summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.cmake.conf7
-rw-r--r--.gitignore145
-rw-r--r--.gitmodules3
-rw-r--r--.prev_CMakeLists.txt16
-rw-r--r--.prev_configure.cmake118
-rw-r--r--.qmake.conf5
-rw-r--r--CMakeLists.txt26
-rw-r--r--LICENSE.FDL450
-rw-r--r--LICENSE.GPL3-EXCEPT704
-rw-r--r--LICENSES/BSD-3-Clause.txt9
-rw-r--r--LICENSES/BSL-1.0.txt9
-rw-r--r--LICENSES/GFDL-1.3-no-invariants-only.txt451
-rw-r--r--LICENSES/GPL-2.0-only.txt (renamed from LICENSE.GPL2)0
-rw-r--r--LICENSES/GPL-3.0-only.txt (renamed from LICENSE.GPL3)0
-rw-r--r--LICENSES/LGPL-3.0-only.txt (renamed from LICENSE.LGPL3)0
-rw-r--r--LICENSES/LicenseRef-Qt-Commercial.txt8
-rw-r--r--LICENSES/Qt-GPL-exception-1.0.txt22
-rw-r--r--cmake/FindWrapLibClang.cmake82
-rw-r--r--coin/axivion/ci_config_linux.json43
-rw-r--r--coin/module_config.yaml5
-rw-r--r--configure.cmake83
-rw-r--r--configure.json152
-rw-r--r--configure.pri434
-rw-r--r--dependencies.yaml7
-rw-r--r--dist/changes-5.12.1026
-rw-r--r--dist/changes-5.15.272
-rw-r--r--dist/changes-6.0.016
-rw-r--r--examples/CMakeLists.txt14
-rw-r--r--examples/assistant/CMakeLists.txt6
-rw-r--r--examples/assistant/doc/src/remotecontrol.qdoc29
-rw-r--r--examples/assistant/doc/src/simpletextviewer.qdoc29
-rw-r--r--examples/assistant/remotecontrol/CMakeLists.txt23
-rw-r--r--examples/assistant/remotecontrol/main.cpp51
-rw-r--r--examples/assistant/remotecontrol/remotecontrol.cpp186
-rw-r--r--examples/assistant/remotecontrol/remotecontrol.h69
-rw-r--r--examples/assistant/remotecontrol/remotecontrol.ui4
-rw-r--r--examples/assistant/simpletextviewer/.prev_CMakeLists.txt43
-rw-r--r--examples/assistant/simpletextviewer/CMakeLists.txt25
-rw-r--r--examples/assistant/simpletextviewer/assistant.cpp98
-rw-r--r--examples/assistant/simpletextviewer/assistant.h53
-rw-r--r--examples/assistant/simpletextviewer/findfiledialog.cpp100
-rw-r--r--examples/assistant/simpletextviewer/findfiledialog.h54
-rw-r--r--examples/assistant/simpletextviewer/main.cpp51
-rw-r--r--examples/assistant/simpletextviewer/mainwindow.cpp62
-rw-r--r--examples/assistant/simpletextviewer/mainwindow.h53
-rw-r--r--examples/assistant/simpletextviewer/textedit.cpp55
-rw-r--r--examples/assistant/simpletextviewer/textedit.h51
-rw-r--r--examples/designer/CMakeLists.txt19
-rw-r--r--examples/designer/README4
-rw-r--r--examples/designer/calculatorbuilder/CMakeLists.txt29
-rw-r--r--examples/designer/calculatorbuilder/calculatorbuilder.pro4
-rw-r--r--examples/designer/calculatorbuilder/calculatorform.cpp104
-rw-r--r--examples/designer/calculatorbuilder/calculatorform.h80
-rw-r--r--examples/designer/calculatorbuilder/main.cpp112
-rw-r--r--examples/designer/calculatorform/CMakeLists.txt26
-rw-r--r--examples/designer/calculatorform/calculatorform.cpp65
-rw-r--r--examples/designer/calculatorform/calculatorform.h54
-rw-r--r--examples/designer/calculatorform/main.cpp51
-rw-r--r--examples/designer/calculatorform_mi/CMakeLists.txt38
-rw-r--r--examples/designer/calculatorform_mi/calculatorform.cpp28
-rw-r--r--examples/designer/calculatorform_mi/calculatorform.h25
-rw-r--r--examples/designer/calculatorform_mi/calculatorform.ui303
-rw-r--r--examples/designer/calculatorform_mi/calculatorform_mi.pro11
-rw-r--r--examples/designer/calculatorform_mi/main.cpp15
-rw-r--r--examples/designer/containerextension/.prev_CMakeLists.txt40
-rw-r--r--examples/designer/containerextension/CMakeLists.txt48
-rw-r--r--examples/designer/containerextension/containerextension.pro13
-rw-r--r--examples/designer/containerextension/multipagewidget.cpp65
-rw-r--r--examples/designer/containerextension/multipagewidget.h53
-rw-r--r--examples/designer/containerextension/multipagewidgetcontainerextension.cpp51
-rw-r--r--examples/designer/containerextension/multipagewidgetcontainerextension.h51
-rw-r--r--examples/designer/containerextension/multipagewidgetextensionfactory.cpp53
-rw-r--r--examples/designer/containerextension/multipagewidgetextensionfactory.h51
-rw-r--r--examples/designer/containerextension/multipagewidgetplugin.cpp123
-rw-r--r--examples/designer/containerextension/multipagewidgetplugin.h51
-rw-r--r--examples/designer/customwidgetplugin/.prev_CMakeLists.txt38
-rw-r--r--examples/designer/customwidgetplugin/CMakeLists.txt48
-rw-r--r--examples/designer/customwidgetplugin/analogclock.cpp109
-rw-r--r--examples/designer/customwidgetplugin/analogclock.h55
-rw-r--r--examples/designer/customwidgetplugin/customwidgetplugin.cpp107
-rw-r--r--examples/designer/customwidgetplugin/customwidgetplugin.h51
-rw-r--r--examples/designer/customwidgetplugin/customwidgetplugin.pro25
-rw-r--r--examples/designer/designer.pro12
-rw-r--r--examples/designer/doc/images/arthurplugin-demo.pngbin77481 -> 0 bytes
-rw-r--r--examples/designer/doc/images/calculatorbuilder-example.pngbin4326 -> 0 bytes
-rw-r--r--examples/designer/doc/images/calculatorbuilder-example.webpbin0 -> 8724 bytes
-rw-r--r--examples/designer/doc/images/calculatorform-example.pngbin3967 -> 0 bytes
-rw-r--r--examples/designer/doc/images/calculatorform-example.webpbin0 -> 7518 bytes
-rw-r--r--examples/designer/doc/images/containerextension-example.pngbin43032 -> 0 bytes
-rw-r--r--examples/designer/doc/images/containerextension-example.webpbin0 -> 22794 bytes
-rw-r--r--examples/designer/doc/images/customwidgetplugin-example.pngbin2175 -> 0 bytes
-rw-r--r--examples/designer/doc/images/customwidgetplugin-example.webpbin0 -> 26828 bytes
-rw-r--r--examples/designer/doc/images/taskmenuextension-dialog.pngbin15163 -> 0 bytes
-rw-r--r--examples/designer/doc/images/taskmenuextension-dialog.webpbin0 -> 20384 bytes
-rw-r--r--examples/designer/doc/images/taskmenuextension-example-faded.pngbin5596 -> 0 bytes
-rw-r--r--examples/designer/doc/images/taskmenuextension-example.pngbin5014 -> 0 bytes
-rw-r--r--examples/designer/doc/images/taskmenuextension-example.webpbin0 -> 20164 bytes
-rw-r--r--examples/designer/doc/images/taskmenuextension-menu.pngbin3067 -> 0 bytes
-rw-r--r--examples/designer/doc/images/taskmenuextension-menu.webpbin0 -> 18886 bytes
-rw-r--r--examples/designer/doc/images/worldtimeclock-connection.pngbin12119 -> 0 bytes
-rw-r--r--examples/designer/doc/images/worldtimeclock-signalandslot.pngbin9907 -> 0 bytes
-rw-r--r--examples/designer/doc/images/worldtimeclockbuilder-example.pngbin8168 -> 0 bytes
-rw-r--r--examples/designer/doc/images/worldtimeclockplugin-example.pngbin13232 -> 0 bytes
-rw-r--r--examples/designer/doc/snippets/doc_src_examples_containerextension.pro51
-rw-r--r--examples/designer/doc/snippets/doc_src_examples_customwidgetplugin.pro51
-rw-r--r--examples/designer/doc/snippets/doc_src_examples_taskmenuextension.pro51
-rw-r--r--examples/designer/doc/snippets/doc_src_examples_worldtimeclockplugin.pro54
-rw-r--r--examples/designer/doc/src/calculatorbuilder.qdoc92
-rw-r--r--examples/designer/doc/src/calculatorform.qdoc81
-rw-r--r--examples/designer/doc/src/calculatorform_mi.qdoc74
-rw-r--r--examples/designer/doc/src/containerextension.qdoc127
-rw-r--r--examples/designer/doc/src/customwidgetplugin.qdoc126
-rw-r--r--examples/designer/doc/src/taskmenuextension.qdoc122
-rw-r--r--examples/designer/doc/src/worldtimeclockbuilder.qdoc97
-rw-r--r--examples/designer/doc/src/worldtimeclockplugin.qdoc188
-rw-r--r--examples/designer/taskmenuextension/.prev_CMakeLists.txt40
-rw-r--r--examples/designer/taskmenuextension/CMakeLists.txt48
-rw-r--r--examples/designer/taskmenuextension/taskmenuextension.pro21
-rw-r--r--examples/designer/taskmenuextension/tictactoe.cpp112
-rw-r--r--examples/designer/taskmenuextension/tictactoe.h53
-rw-r--r--examples/designer/taskmenuextension/tictactoedialog.cpp60
-rw-r--r--examples/designer/taskmenuextension/tictactoedialog.h51
-rw-r--r--examples/designer/taskmenuextension/tictactoeplugin.cpp100
-rw-r--r--examples/designer/taskmenuextension/tictactoeplugin.h51
-rw-r--r--examples/designer/taskmenuextension/tictactoetaskmenu.cpp53
-rw-r--r--examples/designer/taskmenuextension/tictactoetaskmenu.h51
-rw-r--r--examples/designer/worldtimeclockbuilder/CMakeLists.txt50
-rw-r--r--examples/designer/worldtimeclockbuilder/form.ui162
-rw-r--r--examples/designer/worldtimeclockbuilder/main.cpp80
-rw-r--r--examples/designer/worldtimeclockbuilder/worldtimeclockbuilder.pro8
-rw-r--r--examples/designer/worldtimeclockbuilder/worldtimeclockbuilder.qrc5
-rw-r--r--examples/designer/worldtimeclockplugin/.prev_CMakeLists.txt38
-rw-r--r--examples/designer/worldtimeclockplugin/CMakeLists.txt41
-rw-r--r--examples/designer/worldtimeclockplugin/worldtimeclock.cpp131
-rw-r--r--examples/designer/worldtimeclockplugin/worldtimeclock.h82
-rw-r--r--examples/designer/worldtimeclockplugin/worldtimeclockplugin.cpp128
-rw-r--r--examples/designer/worldtimeclockplugin/worldtimeclockplugin.h86
-rw-r--r--examples/designer/worldtimeclockplugin/worldtimeclockplugin.pro30
-rw-r--r--examples/examples.pro4
-rw-r--r--examples/help/CMakeLists.txt4
-rw-r--r--examples/help/contextsensitivehelp/CMakeLists.txt34
-rw-r--r--examples/help/contextsensitivehelp/docs/wateringmachine.qchbin25600 -> 61440 bytes
-rw-r--r--examples/help/contextsensitivehelp/docs/wateringmachine.qhcbin8192 -> 94208 bytes
-rw-r--r--examples/help/contextsensitivehelp/helpbrowser.cpp55
-rw-r--r--examples/help/contextsensitivehelp/helpbrowser.h51
-rw-r--r--examples/help/contextsensitivehelp/main.cpp51
-rw-r--r--examples/help/contextsensitivehelp/wateringconfigdialog.cpp55
-rw-r--r--examples/help/contextsensitivehelp/wateringconfigdialog.h51
-rw-r--r--examples/help/doc/src/contextsensitivehelp.qdoc29
-rw-r--r--examples/linguist/CMakeLists.txt10
-rw-r--r--examples/linguist/arrowpad/CMakeLists.txt36
-rw-r--r--examples/linguist/arrowpad/arrowpad.cpp51
-rw-r--r--examples/linguist/arrowpad/arrowpad.h51
-rw-r--r--examples/linguist/arrowpad/arrowpad_fr.ts3
-rw-r--r--examples/linguist/arrowpad/arrowpad_nl.ts3
-rw-r--r--examples/linguist/arrowpad/main.cpp59
-rw-r--r--examples/linguist/arrowpad/mainwindow.cpp55
-rw-r--r--examples/linguist/arrowpad/mainwindow.h51
-rw-r--r--examples/linguist/doc/images/linguist-i18n.pngbin0 -> 22531 bytes
-rw-r--r--examples/linguist/doc/snippets/doc_src_examples_arrowpad.cpp51
-rw-r--r--examples/linguist/doc/snippets/doc_src_examples_arrowpad.qdoc65
-rw-r--r--examples/linguist/doc/snippets/doc_src_examples_hellotr.qdoc55
-rw-r--r--examples/linguist/doc/snippets/doc_src_examples_trollprint.cpp51
-rw-r--r--examples/linguist/doc/src/arrowpad.qdoc76
-rw-r--r--examples/linguist/doc/src/hellotr.qdoc65
-rw-r--r--examples/linguist/doc/src/i18n.qdoc20
-rw-r--r--examples/linguist/doc/src/trollprint.qdoc53
-rw-r--r--examples/linguist/hellotr/CMakeLists.txt36
-rw-r--r--examples/linguist/hellotr/hellotr_la.ts3
-rw-r--r--examples/linguist/hellotr/main.cpp54
-rw-r--r--examples/linguist/i18n/CMakeLists.txt46
-rw-r--r--examples/linguist/i18n/i18n.pro32
-rw-r--r--examples/linguist/i18n/languagechooser.cpp141
-rw-r--r--examples/linguist/i18n/languagechooser.h50
-rw-r--r--examples/linguist/i18n/main.cpp14
-rw-r--r--examples/linguist/i18n/mainwindow.cpp62
-rw-r--r--examples/linguist/i18n/mainwindow.h39
-rw-r--r--examples/linguist/i18n/translations/i18n_ar.ts59
-rw-r--r--examples/linguist/i18n/translations/i18n_cs.ts59
-rw-r--r--examples/linguist/i18n/translations/i18n_de.ts59
-rw-r--r--examples/linguist/i18n/translations/i18n_el.ts59
-rw-r--r--examples/linguist/i18n/translations/i18n_en.ts59
-rw-r--r--examples/linguist/i18n/translations/i18n_eo.ts59
-rw-r--r--examples/linguist/i18n/translations/i18n_fr.ts59
-rw-r--r--examples/linguist/i18n/translations/i18n_it.ts59
-rw-r--r--examples/linguist/i18n/translations/i18n_ja.ts59
-rw-r--r--examples/linguist/i18n/translations/i18n_ko.ts59
-rw-r--r--examples/linguist/i18n/translations/i18n_nb.ts59
-rw-r--r--examples/linguist/i18n/translations/i18n_ru.ts59
-rw-r--r--examples/linguist/i18n/translations/i18n_sv.ts59
-rw-r--r--examples/linguist/i18n/translations/i18n_zh.ts59
-rw-r--r--examples/linguist/linguist.pro1
-rw-r--r--examples/linguist/trollprint/CMakeLists.txt33
-rw-r--r--examples/linguist/trollprint/main.cpp59
-rw-r--r--examples/linguist/trollprint/mainwindow.cpp65
-rw-r--r--examples/linguist/trollprint/mainwindow.h51
-rw-r--r--examples/linguist/trollprint/printpanel.cpp51
-rw-r--r--examples/linguist/trollprint/printpanel.h51
-rw-r--r--examples/linguist/trollprint/trollprint_pt.ts16
-rw-r--r--examples/uitools/CMakeLists.txt5
-rw-r--r--examples/uitools/doc/images/multipleinheritance-example.pngbin6974 -> 0 bytes
-rw-r--r--examples/uitools/doc/images/textfinder-example-userinterface.pngbin7900 -> 0 bytes
-rw-r--r--examples/uitools/doc/images/textfinder-example-userinterface.webpbin0 -> 13754 bytes
-rw-r--r--examples/uitools/doc/src/multipleinheritance.qdoc96
-rw-r--r--examples/uitools/doc/src/textfinder.qdoc46
-rw-r--r--examples/uitools/multipleinheritance/CMakeLists.txt36
-rw-r--r--examples/uitools/multipleinheritance/calculatorform.cpp75
-rw-r--r--examples/uitools/multipleinheritance/calculatorform.h72
-rw-r--r--examples/uitools/multipleinheritance/calculatorform.ui303
-rw-r--r--examples/uitools/multipleinheritance/main.cpp62
-rw-r--r--examples/uitools/multipleinheritance/multipleinheritance.pro11
-rw-r--r--examples/uitools/textfinder/CMakeLists.txt28
-rw-r--r--examples/uitools/textfinder/forms/textfinder.ui6
-rw-r--r--examples/uitools/textfinder/main.cpp52
-rw-r--r--examples/uitools/textfinder/textfinder.cpp69
-rw-r--r--examples/uitools/textfinder/textfinder.h51
-rw-r--r--examples/uitools/uitools.pro4
-rw-r--r--qttools.pro1
-rw-r--r--src/.prev_CMakeLists.txt44
-rw-r--r--src/CMakeLists.txt55
-rw-r--r--src/assistant/.prev_CMakeLists.txt19
-rw-r--r--src/assistant/CMakeLists.txt39
-rw-r--r--src/assistant/assistant.pro22
-rw-r--r--src/assistant/assistant/.prev_CMakeLists.txt192
-rw-r--r--src/assistant/assistant/CMakeLists.txt51
-rw-r--r--src/assistant/assistant/aboutdialog.cpp38
-rw-r--r--src/assistant/assistant/aboutdialog.h36
-rw-r--r--src/assistant/assistant/assistant.pro123
-rw-r--r--src/assistant/assistant/assistant.qchbin208896 -> 0 bytes
-rw-r--r--src/assistant/assistant/assistant.qrc5
-rw-r--r--src/assistant/assistant/assistant_images.qrc36
-rw-r--r--src/assistant/assistant/bookmarkdialog.cpp37
-rw-r--r--src/assistant/assistant/bookmarkdialog.h29
-rw-r--r--src/assistant/assistant/bookmarkfiltermodel.cpp35
-rw-r--r--src/assistant/assistant/bookmarkfiltermodel.h29
-rw-r--r--src/assistant/assistant/bookmarkitem.cpp37
-rw-r--r--src/assistant/assistant/bookmarkitem.h29
-rw-r--r--src/assistant/assistant/bookmarkmanager.cpp44
-rw-r--r--src/assistant/assistant/bookmarkmanager.h29
-rw-r--r--src/assistant/assistant/bookmarkmanagerwidget.cpp41
-rw-r--r--src/assistant/assistant/bookmarkmanagerwidget.h29
-rw-r--r--src/assistant/assistant/bookmarkmodel.cpp51
-rw-r--r--src/assistant/assistant/bookmarkmodel.h30
-rw-r--r--src/assistant/assistant/centralwidget.cpp43
-rw-r--r--src/assistant/assistant/centralwidget.h29
-rw-r--r--src/assistant/assistant/cmdlineparser.cpp74
-rw-r--r--src/assistant/assistant/cmdlineparser.h29
-rw-r--r--src/assistant/assistant/contentwindow.cpp30
-rw-r--r--src/assistant/assistant/contentwindow.h29
-rw-r--r--src/assistant/assistant/doc/qtassistant.qdocconf9
-rw-r--r--src/assistant/assistant/doc/snippets/doc_src_assistant-manual.qdoc53
-rw-r--r--src/assistant/assistant/doc/src/assistant-example.qdoc28
-rw-r--r--src/assistant/assistant/doc/src/assistant-manual.qdoc49
-rw-r--r--src/assistant/assistant/doc/src/assistant-quick-guide.qdoc28
-rw-r--r--src/assistant/assistant/findwidget.cpp48
-rw-r--r--src/assistant/assistant/findwidget.h29
-rw-r--r--src/assistant/assistant/globalactions.cpp79
-rw-r--r--src/assistant/assistant/globalactions.h29
-rw-r--r--src/assistant/assistant/helpbrowsersupport.cpp37
-rw-r--r--src/assistant/assistant/helpbrowsersupport.h29
-rw-r--r--src/assistant/assistant/helpdocsettings.cpp53
-rw-r--r--src/assistant/assistant/helpdocsettings.h40
-rw-r--r--src/assistant/assistant/helpdocsettingswidget.cpp56
-rw-r--r--src/assistant/assistant/helpdocsettingswidget.h40
-rw-r--r--src/assistant/assistant/helpenginewrapper.cpp105
-rw-r--r--src/assistant/assistant/helpenginewrapper.h32
-rw-r--r--src/assistant/assistant/helpviewer.cpp397
-rw-r--r--src/assistant/assistant/helpviewer.h105
-rw-r--r--src/assistant/assistant/helpviewer_p.h126
-rw-r--r--src/assistant/assistant/helpviewer_qtb.cpp412
-rw-r--r--src/assistant/assistant/helpviewer_qwv.cpp395
-rw-r--r--src/assistant/assistant/helpviewerimpl.cpp68
-rw-r--r--src/assistant/assistant/helpviewerimpl.h111
-rw-r--r--src/assistant/assistant/helpviewerimpl_p.h98
-rw-r--r--src/assistant/assistant/helpviewerimpl_qtb.cpp373
-rw-r--r--src/assistant/assistant/helpviewerimpl_qwv.cpp370
-rw-r--r--src/assistant/assistant/images/mac/addtab.pngbin469 -> 0 bytes
-rw-r--r--src/assistant/assistant/images/win/addtab.pngbin314 -> 0 bytes
-rw-r--r--src/assistant/assistant/indexwindow.cpp35
-rw-r--r--src/assistant/assistant/indexwindow.h29
-rw-r--r--src/assistant/assistant/main.cpp58
-rw-r--r--src/assistant/assistant/mainwindow.cpp183
-rw-r--r--src/assistant/assistant/mainwindow.h29
-rw-r--r--src/assistant/assistant/openpagesmanager.cpp55
-rw-r--r--src/assistant/assistant/openpagesmanager.h34
-rw-r--r--src/assistant/assistant/openpagesmodel.cpp43
-rw-r--r--src/assistant/assistant/openpagesmodel.h31
-rw-r--r--src/assistant/assistant/openpagesswitcher.cpp29
-rw-r--r--src/assistant/assistant/openpagesswitcher.h29
-rw-r--r--src/assistant/assistant/openpageswidget.cpp29
-rw-r--r--src/assistant/assistant/openpageswidget.h29
-rw-r--r--src/assistant/assistant/preferencesdialog.cpp39
-rw-r--r--src/assistant/assistant/preferencesdialog.h29
-rw-r--r--src/assistant/assistant/qtdocinstaller.cpp39
-rw-r--r--src/assistant/assistant/qtdocinstaller.h29
-rw-r--r--src/assistant/assistant/remotecontrol.cpp67
-rw-r--r--src/assistant/assistant/remotecontrol.h29
-rw-r--r--src/assistant/assistant/searchwidget.cpp42
-rw-r--r--src/assistant/assistant/searchwidget.h29
-rw-r--r--src/assistant/assistant/stdinlistener.cpp29
-rw-r--r--src/assistant/assistant/stdinlistener.h29
-rw-r--r--src/assistant/assistant/stdinlistener_win.cpp29
-rw-r--r--src/assistant/assistant/stdinlistener_win.h31
-rw-r--r--src/assistant/assistant/topicchooser.cpp29
-rw-r--r--src/assistant/assistant/topicchooser.h29
-rw-r--r--src/assistant/assistant/tracer.h29
-rw-r--r--src/assistant/assistant/xbelsupport.cpp83
-rw-r--r--src/assistant/assistant/xbelsupport.h29
-rw-r--r--src/assistant/help/.prev_CMakeLists.txt69
-rw-r--r--src/assistant/help/CMakeLists.txt34
-rw-r--r--src/assistant/help/Qt5HelpConfigExtras.cmake.in41
-rw-r--r--src/assistant/help/doc/qthelp.qdocconf8
-rw-r--r--src/assistant/help/doc/snippets/doc_src_qthelp.cpp61
-rw-r--r--src/assistant/help/doc/snippets/doc_src_qthelp.qdoc51
-rw-r--r--src/assistant/help/doc/src/qthelp-examples.qdoc28
-rw-r--r--src/assistant/help/doc/src/qthelp-index.qdoc32
-rw-r--r--src/assistant/help/doc/src/qthelp-module.qdoc33
-rw-r--r--src/assistant/help/doc/src/qthelp.qdoc115
-rw-r--r--src/assistant/help/help.pro65
-rw-r--r--src/assistant/help/helpsystem.qrc12
-rw-r--r--src/assistant/help/qcompressedhelpinfo.cpp57
-rw-r--r--src/assistant/help/qcompressedhelpinfo.h46
-rw-r--r--src/assistant/help/qfilternamedialog.cpp44
-rw-r--r--src/assistant/help/qfilternamedialog_p.h34
-rw-r--r--src/assistant/help/qhelp_global.cpp69
-rw-r--r--src/assistant/help/qhelp_global.h48
-rw-r--r--src/assistant/help/qhelpcollectionhandler.cpp1527
-rw-r--r--src/assistant/help/qhelpcollectionhandler_p.h116
-rw-r--r--src/assistant/help/qhelpcontentitem.cpp102
-rw-r--r--src/assistant/help/qhelpcontentitem.h37
-rw-r--r--src/assistant/help/qhelpcontentwidget.cpp505
-rw-r--r--src/assistant/help/qhelpcontentwidget.h91
-rw-r--r--src/assistant/help/qhelpdbreader.cpp377
-rw-r--r--src/assistant/help/qhelpdbreader_p.h65
-rw-r--r--src/assistant/help/qhelpengine.cpp188
-rw-r--r--src/assistant/help/qhelpengine.h43
-rw-r--r--src/assistant/help/qhelpengine_p.h139
-rw-r--r--src/assistant/help/qhelpenginecore.cpp407
-rw-r--r--src/assistant/help/qhelpenginecore.h90
-rw-r--r--src/assistant/help/qhelpfilterdata.cpp55
-rw-r--r--src/assistant/help/qhelpfilterdata.h42
-rw-r--r--src/assistant/help/qhelpfilterengine.cpp75
-rw-r--r--src/assistant/help/qhelpfilterengine.h50
-rw-r--r--src/assistant/help/qhelpfiltersettings.cpp170
-rw-r--r--src/assistant/help/qhelpfiltersettings_p.h96
-rw-r--r--src/assistant/help/qhelpfiltersettingswidget.cpp203
-rw-r--r--src/assistant/help/qhelpfiltersettingswidget.h43
-rw-r--r--src/assistant/help/qhelpindexwidget.cpp330
-rw-r--r--src/assistant/help/qhelpindexwidget.h67
-rw-r--r--src/assistant/help/qhelplink.cpp40
-rw-r--r--src/assistant/help/qhelplink.h43
-rw-r--r--src/assistant/help/qhelpsearchengine.cpp352
-rw-r--r--src/assistant/help/qhelpsearchengine.h81
-rw-r--r--src/assistant/help/qhelpsearchenginecore.cpp256
-rw-r--r--src/assistant/help/qhelpsearchenginecore.h51
-rw-r--r--src/assistant/help/qhelpsearchindexreader.cpp288
-rw-r--r--src/assistant/help/qhelpsearchindexreader_default.cpp287
-rw-r--r--src/assistant/help/qhelpsearchindexreader_default_p.h102
-rw-r--r--src/assistant/help/qhelpsearchindexreader_p.h68
-rw-r--r--src/assistant/help/qhelpsearchindexwriter.cpp515
-rw-r--r--src/assistant/help/qhelpsearchindexwriter_default.cpp543
-rw-r--r--src/assistant/help/qhelpsearchindexwriter_default_p.h133
-rw-r--r--src/assistant/help/qhelpsearchindexwriter_p.h58
-rw-r--r--src/assistant/help/qhelpsearchquerywidget.cpp143
-rw-r--r--src/assistant/help/qhelpsearchquerywidget.h53
-rw-r--r--src/assistant/help/qhelpsearchresult.cpp90
-rw-r--r--src/assistant/help/qhelpsearchresult.h37
-rw-r--r--src/assistant/help/qhelpsearchresultwidget.cpp235
-rw-r--r--src/assistant/help/qhelpsearchresultwidget.h52
-rw-r--r--src/assistant/help/qoptionswidget.cpp93
-rw-r--r--src/assistant/help/qoptionswidget_p.h48
-rw-r--r--src/assistant/qcollectiongenerator/.prev_CMakeLists.txt17
-rw-r--r--src/assistant/qcollectiongenerator/CMakeLists.txt18
-rw-r--r--src/assistant/qcollectiongenerator/main.c113
-rw-r--r--src/assistant/qcollectiongenerator/qcollectiongenerator.pro7
-rw-r--r--src/assistant/qhelpgenerator/.prev_CMakeLists.txt26
-rw-r--r--src/assistant/qhelpgenerator/CMakeLists.txt58
-rw-r--r--src/assistant/qhelpgenerator/collectionconfigreader.cpp40
-rw-r--r--src/assistant/qhelpgenerator/collectionconfigreader.h40
-rw-r--r--src/assistant/qhelpgenerator/helpgenerator.cpp86
-rw-r--r--src/assistant/qhelpgenerator/helpgenerator.h40
-rw-r--r--src/assistant/qhelpgenerator/main.cpp36
-rw-r--r--src/assistant/qhelpgenerator/qhelpdatainterface.cpp40
-rw-r--r--src/assistant/qhelpgenerator/qhelpdatainterface_p.h40
-rw-r--r--src/assistant/qhelpgenerator/qhelpgenerator.pro20
-rw-r--r--src/assistant/qhelpgenerator/qhelpprojectdata.cpp40
-rw-r--r--src/assistant/qhelpgenerator/qhelpprojectdata_p.h40
m---------src/assistant/qlitehtml0
-rw-r--r--src/assistant/shared/collectionconfiguration.cpp95
-rw-r--r--src/assistant/shared/collectionconfiguration.h40
-rw-r--r--src/designer/CMakeLists.txt3
-rw-r--r--src/designer/data/README2
-rw-r--r--src/designer/data/generate_header.xsl2
-rw-r--r--src/designer/data/generate_impl.xsl50
-rw-r--r--src/designer/data/generate_shared.xsl8
-rwxr-xr-xsrc/designer/data/generate_ui126
-rw-r--r--src/designer/data/generate_ui.py96
-rw-r--r--src/designer/data/ui4.xsd4
-rw-r--r--src/designer/designer.pro7
-rw-r--r--src/designer/src/CMakeLists.txt6
-rw-r--r--src/designer/src/components/CMakeLists.txt3
-rw-r--r--src/designer/src/components/buddyeditor/buddyeditor.cpp57
-rw-r--r--src/designer/src/components/buddyeditor/buddyeditor.h29
-rw-r--r--src/designer/src/components/buddyeditor/buddyeditor.pri17
-rw-r--r--src/designer/src/components/buddyeditor/buddyeditor_global.h29
-rw-r--r--src/designer/src/components/buddyeditor/buddyeditor_plugin.cpp41
-rw-r--r--src/designer/src/components/buddyeditor/buddyeditor_plugin.h29
-rw-r--r--src/designer/src/components/buddyeditor/buddyeditor_tool.cpp33
-rw-r--r--src/designer/src/components/buddyeditor/buddyeditor_tool.h29
-rw-r--r--src/designer/src/components/components.pro2
-rw-r--r--src/designer/src/components/formeditor/default_actionprovider.cpp29
-rw-r--r--src/designer/src/components/formeditor/default_actionprovider.h29
-rw-r--r--src/designer/src/components/formeditor/default_container.cpp33
-rw-r--r--src/designer/src/components/formeditor/default_container.h29
-rw-r--r--src/designer/src/components/formeditor/default_layoutdecoration.cpp29
-rw-r--r--src/designer/src/components/formeditor/default_layoutdecoration.h29
-rw-r--r--src/designer/src/components/formeditor/deviceprofiledialog.cpp46
-rw-r--r--src/designer/src/components/formeditor/deviceprofiledialog.h29
-rw-r--r--src/designer/src/components/formeditor/deviceprofiledialog.ui2
-rw-r--r--src/designer/src/components/formeditor/dpi_chooser.cpp33
-rw-r--r--src/designer/src/components/formeditor/dpi_chooser.h29
-rw-r--r--src/designer/src/components/formeditor/embeddedoptionspage.cpp42
-rw-r--r--src/designer/src/components/formeditor/embeddedoptionspage.h29
-rw-r--r--src/designer/src/components/formeditor/formeditor.cpp43
-rw-r--r--src/designer/src/components/formeditor/formeditor.h31
-rw-r--r--src/designer/src/components/formeditor/formeditor.pri67
-rw-r--r--src/designer/src/components/formeditor/formeditor.qrc179
-rw-r--r--src/designer/src/components/formeditor/formeditor_global.h29
-rw-r--r--src/designer/src/components/formeditor/formeditor_optionspage.cpp29
-rw-r--r--src/designer/src/components/formeditor/formeditor_optionspage.h29
-rw-r--r--src/designer/src/components/formeditor/formwindow.cpp395
-rw-r--r--src/designer/src/components/formeditor/formwindow.h39
-rw-r--r--src/designer/src/components/formeditor/formwindow_dnditem.cpp33
-rw-r--r--src/designer/src/components/formeditor/formwindow_dnditem.h29
-rw-r--r--src/designer/src/components/formeditor/formwindow_widgetstack.cpp41
-rw-r--r--src/designer/src/components/formeditor/formwindow_widgetstack.h29
-rw-r--r--src/designer/src/components/formeditor/formwindowcursor.cpp31
-rw-r--r--src/designer/src/components/formeditor/formwindowcursor.h29
-rw-r--r--src/designer/src/components/formeditor/formwindowmanager.cpp173
-rw-r--r--src/designer/src/components/formeditor/formwindowmanager.h29
-rw-r--r--src/designer/src/components/formeditor/formwindowsettings.cpp77
-rw-r--r--src/designer/src/components/formeditor/formwindowsettings.h31
-rw-r--r--src/designer/src/components/formeditor/formwindowsettings.ui32
-rw-r--r--src/designer/src/components/formeditor/images/cleartext.pngbin474 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/cursors/arrow.pngbin171 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/cursors/busy.pngbin201 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/cursors/closedhand.pngbin147 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/cursors/cross.pngbin130 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/cursors/hand.pngbin159 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/cursors/hsplit.pngbin155 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/cursors/ibeam.pngbin124 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/cursors/no.pngbin199 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/cursors/openhand.pngbin160 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/cursors/sizeall.pngbin174 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/cursors/sizeb.pngbin161 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/cursors/sizef.pngbin161 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/cursors/sizeh.pngbin145 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/cursors/sizev.pngbin141 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/cursors/uparrow.pngbin132 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/cursors/vsplit.pngbin161 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/cursors/wait.pngbin172 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/cursors/whatsthis.pngbin191 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/mac/resourceeditortool.pngbin2171 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/plus-16.pngbin383 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/qt3logo.pngbin1101 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/qtlogo128x128.pngbin0 -> 2143 bytes
-rw-r--r--src/designer/src/components/formeditor/images/qtlogo16x16.pngbin1263 -> 367 bytes
-rw-r--r--src/designer/src/components/formeditor/images/qtlogo24x24.pngbin349 -> 594 bytes
-rw-r--r--src/designer/src/components/formeditor/images/qtlogo32x32.pngbin15518 -> 775 bytes
-rw-r--r--src/designer/src/components/formeditor/images/qtlogo64x64.pngbin1936 -> 1219 bytes
-rw-r--r--src/designer/src/components/formeditor/images/widgets/groupboxcollapsible.pngbin702 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/widgets/hsplit.pngbin164 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/widgets/tabbar.pngbin623 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/widgets/wizard.pngbin898 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/images/win/resourceeditortool.pngbin1429 -> 0 bytes
-rw-r--r--src/designer/src/components/formeditor/itemview_propertysheet.cpp95
-rw-r--r--src/designer/src/components/formeditor/itemview_propertysheet.h29
-rw-r--r--src/designer/src/components/formeditor/layout_propertysheet.cpp160
-rw-r--r--src/designer/src/components/formeditor/layout_propertysheet.h31
-rw-r--r--src/designer/src/components/formeditor/line_propertysheet.cpp37
-rw-r--r--src/designer/src/components/formeditor/line_propertysheet.h29
-rw-r--r--src/designer/src/components/formeditor/previewactiongroup.cpp59
-rw-r--r--src/designer/src/components/formeditor/previewactiongroup.h29
-rw-r--r--src/designer/src/components/formeditor/qdesigner_resource.cpp327
-rw-r--r--src/designer/src/components/formeditor/qdesigner_resource.h29
-rw-r--r--src/designer/src/components/formeditor/qlayoutwidget_propertysheet.cpp38
-rw-r--r--src/designer/src/components/formeditor/qlayoutwidget_propertysheet.h29
-rw-r--r--src/designer/src/components/formeditor/qmainwindow_container.cpp66
-rw-r--r--src/designer/src/components/formeditor/qmainwindow_container.h29
-rw-r--r--src/designer/src/components/formeditor/qmdiarea_container.cpp55
-rw-r--r--src/designer/src/components/formeditor/qmdiarea_container.h29
-rw-r--r--src/designer/src/components/formeditor/qwizard_container.cpp43
-rw-r--r--src/designer/src/components/formeditor/qwizard_container.h29
-rw-r--r--src/designer/src/components/formeditor/spacer_propertysheet.cpp34
-rw-r--r--src/designer/src/components/formeditor/spacer_propertysheet.h29
-rw-r--r--src/designer/src/components/formeditor/templateoptionspage.cpp40
-rw-r--r--src/designer/src/components/formeditor/templateoptionspage.h29
-rw-r--r--src/designer/src/components/formeditor/tool_widgeteditor.cpp71
-rw-r--r--src/designer/src/components/formeditor/tool_widgeteditor.h30
-rw-r--r--src/designer/src/components/formeditor/widgetselection.cpp33
-rw-r--r--src/designer/src/components/formeditor/widgetselection.h29
-rw-r--r--src/designer/src/components/lib/CMakeLists.txt1066
-rw-r--r--src/designer/src/components/lib/lib.pro42
-rw-r--r--src/designer/src/components/lib/lib_pch.h29
-rw-r--r--src/designer/src/components/lib/qdesigner_components.cpp73
-rw-r--r--src/designer/src/components/objectinspector/objectinspector.cpp83
-rw-r--r--src/designer/src/components/objectinspector/objectinspector.h33
-rw-r--r--src/designer/src/components/objectinspector/objectinspector.pri16
-rw-r--r--src/designer/src/components/objectinspector/objectinspector_global.h33
-rw-r--r--src/designer/src/components/objectinspector/objectinspectormodel.cpp80
-rw-r--r--src/designer/src/components/objectinspector/objectinspectormodel_p.h47
-rw-r--r--src/designer/src/components/propertyeditor/brushpropertymanager.cpp78
-rw-r--r--src/designer/src/components/propertyeditor/brushpropertymanager.h45
-rw-r--r--src/designer/src/components/propertyeditor/designerpropertymanager.cpp1069
-rw-r--r--src/designer/src/components/propertyeditor/designerpropertymanager.h165
-rw-r--r--src/designer/src/components/propertyeditor/fontmapping.xml33
-rw-r--r--src/designer/src/components/propertyeditor/fontpropertymanager.cpp228
-rw-r--r--src/designer/src/components/propertyeditor/fontpropertymanager.h52
-rw-r--r--src/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp129
-rw-r--r--src/designer/src/components/propertyeditor/newdynamicpropertydialog.h33
-rw-r--r--src/designer/src/components/propertyeditor/paletteeditor.cpp135
-rw-r--r--src/designer/src/components/propertyeditor/paletteeditor.h44
-rw-r--r--src/designer/src/components/propertyeditor/paletteeditor.ui33
-rw-r--r--src/designer/src/components/propertyeditor/paletteeditorbutton.cpp33
-rw-r--r--src/designer/src/components/propertyeditor/paletteeditorbutton.h29
-rw-r--r--src/designer/src/components/propertyeditor/pixmapeditor.cpp420
-rw-r--r--src/designer/src/components/propertyeditor/pixmapeditor.h128
-rw-r--r--src/designer/src/components/propertyeditor/previewframe.cpp29
-rw-r--r--src/designer/src/components/propertyeditor/previewframe.h29
-rw-r--r--src/designer/src/components/propertyeditor/previewwidget.cpp32
-rw-r--r--src/designer/src/components/propertyeditor/previewwidget.h29
-rw-r--r--src/designer/src/components/propertyeditor/previewwidget.ui32
-rw-r--r--src/designer/src/components/propertyeditor/propertyeditor.cpp242
-rw-r--r--src/designer/src/components/propertyeditor/propertyeditor.h37
-rw-r--r--src/designer/src/components/propertyeditor/propertyeditor.pri48
-rw-r--r--src/designer/src/components/propertyeditor/propertyeditor.qrc5
-rw-r--r--src/designer/src/components/propertyeditor/propertyeditor_global.h29
-rw-r--r--src/designer/src/components/propertyeditor/qlonglongvalidator.cpp41
-rw-r--r--src/designer/src/components/propertyeditor/qlonglongvalidator.h29
-rw-r--r--src/designer/src/components/propertyeditor/stringlisteditor.cpp60
-rw-r--r--src/designer/src/components/propertyeditor/stringlisteditor.h39
-rw-r--r--src/designer/src/components/propertyeditor/stringlisteditor.ui31
-rw-r--r--src/designer/src/components/propertyeditor/stringlisteditorbutton.cpp33
-rw-r--r--src/designer/src/components/propertyeditor/stringlisteditorbutton.h29
-rw-r--r--src/designer/src/components/signalsloteditor/connectdialog.cpp47
-rw-r--r--src/designer/src/components/signalsloteditor/connectdialog_p.h31
-rw-r--r--src/designer/src/components/signalsloteditor/signalslot_utils.cpp31
-rw-r--r--src/designer/src/components/signalsloteditor/signalslot_utils_p.h29
-rw-r--r--src/designer/src/components/signalsloteditor/signalsloteditor.cpp84
-rw-r--r--src/designer/src/components/signalsloteditor/signalsloteditor.h29
-rw-r--r--src/designer/src/components/signalsloteditor/signalsloteditor.pri22
-rw-r--r--src/designer/src/components/signalsloteditor/signalsloteditor_global.h29
-rw-r--r--src/designer/src/components/signalsloteditor/signalsloteditor_p.h29
-rw-r--r--src/designer/src/components/signalsloteditor/signalsloteditor_plugin.cpp41
-rw-r--r--src/designer/src/components/signalsloteditor/signalsloteditor_plugin.h29
-rw-r--r--src/designer/src/components/signalsloteditor/signalsloteditor_tool.cpp33
-rw-r--r--src/designer/src/components/signalsloteditor/signalsloteditor_tool.h29
-rw-r--r--src/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp50
-rw-r--r--src/designer/src/components/signalsloteditor/signalsloteditorwindow.h29
-rw-r--r--src/designer/src/components/tabordereditor/tabordereditor.cpp51
-rw-r--r--src/designer/src/components/tabordereditor/tabordereditor.h29
-rw-r--r--src/designer/src/components/tabordereditor/tabordereditor.pri17
-rw-r--r--src/designer/src/components/tabordereditor/tabordereditor_global.h29
-rw-r--r--src/designer/src/components/tabordereditor/tabordereditor_plugin.cpp41
-rw-r--r--src/designer/src/components/tabordereditor/tabordereditor_plugin.h29
-rw-r--r--src/designer/src/components/tabordereditor/tabordereditor_tool.cpp33
-rw-r--r--src/designer/src/components/tabordereditor/tabordereditor_tool.h29
-rw-r--r--src/designer/src/components/taskmenu/button_taskmenu.cpp86
-rw-r--r--src/designer/src/components/taskmenu/button_taskmenu.h29
-rw-r--r--src/designer/src/components/taskmenu/combobox_taskmenu.cpp33
-rw-r--r--src/designer/src/components/taskmenu/combobox_taskmenu.h29
-rw-r--r--src/designer/src/components/taskmenu/containerwidget_taskmenu.cpp33
-rw-r--r--src/designer/src/components/taskmenu/containerwidget_taskmenu.h29
-rw-r--r--src/designer/src/components/taskmenu/groupbox_taskmenu.cpp33
-rw-r--r--src/designer/src/components/taskmenu/groupbox_taskmenu.h31
-rw-r--r--src/designer/src/components/taskmenu/inplace_editor.cpp33
-rw-r--r--src/designer/src/components/taskmenu/inplace_editor.h34
-rw-r--r--src/designer/src/components/taskmenu/inplace_widget_helper.cpp29
-rw-r--r--src/designer/src/components/taskmenu/inplace_widget_helper.h29
-rw-r--r--src/designer/src/components/taskmenu/itemlisteditor.cpp135
-rw-r--r--src/designer/src/components/taskmenu/itemlisteditor.h60
-rw-r--r--src/designer/src/components/taskmenu/itemlisteditor.ui31
-rw-r--r--src/designer/src/components/taskmenu/label_taskmenu.cpp39
-rw-r--r--src/designer/src/components/taskmenu/label_taskmenu.h29
-rw-r--r--src/designer/src/components/taskmenu/layouttaskmenu.cpp29
-rw-r--r--src/designer/src/components/taskmenu/layouttaskmenu.h29
-rw-r--r--src/designer/src/components/taskmenu/lineedit_taskmenu.cpp33
-rw-r--r--src/designer/src/components/taskmenu/lineedit_taskmenu.h29
-rw-r--r--src/designer/src/components/taskmenu/listwidget_taskmenu.cpp33
-rw-r--r--src/designer/src/components/taskmenu/listwidget_taskmenu.h29
-rw-r--r--src/designer/src/components/taskmenu/listwidgeteditor.cpp40
-rw-r--r--src/designer/src/components/taskmenu/listwidgeteditor.h29
-rw-r--r--src/designer/src/components/taskmenu/menutaskmenu.cpp29
-rw-r--r--src/designer/src/components/taskmenu/menutaskmenu.h29
-rw-r--r--src/designer/src/components/taskmenu/tablewidget_taskmenu.cpp33
-rw-r--r--src/designer/src/components/taskmenu/tablewidget_taskmenu.h29
-rw-r--r--src/designer/src/components/taskmenu/tablewidgeteditor.cpp124
-rw-r--r--src/designer/src/components/taskmenu/tablewidgeteditor.h57
-rw-r--r--src/designer/src/components/taskmenu/tablewidgeteditor.ui31
-rw-r--r--src/designer/src/components/taskmenu/taskmenu.pri49
-rw-r--r--src/designer/src/components/taskmenu/taskmenu_component.cpp38
-rw-r--r--src/designer/src/components/taskmenu/taskmenu_component.h29
-rw-r--r--src/designer/src/components/taskmenu/taskmenu_global.h29
-rw-r--r--src/designer/src/components/taskmenu/textedit_taskmenu.cpp35
-rw-r--r--src/designer/src/components/taskmenu/textedit_taskmenu.h29
-rw-r--r--src/designer/src/components/taskmenu/toolbar_taskmenu.cpp29
-rw-r--r--src/designer/src/components/taskmenu/toolbar_taskmenu.h29
-rw-r--r--src/designer/src/components/taskmenu/treewidget_taskmenu.cpp33
-rw-r--r--src/designer/src/components/taskmenu/treewidget_taskmenu.h31
-rw-r--r--src/designer/src/components/taskmenu/treewidgeteditor.cpp132
-rw-r--r--src/designer/src/components/taskmenu/treewidgeteditor.h65
-rw-r--r--src/designer/src/components/taskmenu/treewidgeteditor.ui31
-rw-r--r--src/designer/src/components/widgetbox/widgetbox.cpp31
-rw-r--r--src/designer/src/components/widgetbox/widgetbox.h29
-rw-r--r--src/designer/src/components/widgetbox/widgetbox.pri14
-rw-r--r--src/designer/src/components/widgetbox/widgetbox.qrc5
-rw-r--r--src/designer/src/components/widgetbox/widgetbox.xml32
-rw-r--r--src/designer/src/components/widgetbox/widgetbox_dnditem.cpp36
-rw-r--r--src/designer/src/components/widgetbox/widgetbox_dnditem.h29
-rw-r--r--src/designer/src/components/widgetbox/widgetbox_global.h29
-rw-r--r--src/designer/src/components/widgetbox/widgetboxcategorylistview.cpp106
-rw-r--r--src/designer/src/components/widgetbox/widgetboxcategorylistview.h31
-rw-r--r--src/designer/src/components/widgetbox/widgetboxtreewidget.cpp168
-rw-r--r--src/designer/src/components/widgetbox/widgetboxtreewidget.h35
-rw-r--r--src/designer/src/designer/.prev_CMakeLists.txt158
-rw-r--r--src/designer/src/designer/CMakeLists.txt55
-rw-r--r--src/designer/src/designer/appfontdialog.cpp105
-rw-r--r--src/designer/src/designer/appfontdialog.h29
-rw-r--r--src/designer/src/designer/assistantclient.cpp54
-rw-r--r--src/designer/src/designer/assistantclient.h31
-rw-r--r--src/designer/src/designer/designer.pro82
-rw-r--r--src/designer/src/designer/designer.qrc5
-rw-r--r--src/designer/src/designer/designer_enums.h29
-rw-r--r--src/designer/src/designer/doc/qtdesigner.qdocconf28
-rw-r--r--src/designer/src/designer/doc/snippets/CMakeLists.txt10
-rw-r--r--src/designer/src/designer/doc/snippets/autoconnection/CMakeLists.txt24
-rw-r--r--src/designer/src/designer/doc/snippets/autoconnection/autoconnection.pro1
-rw-r--r--src/designer/src/designer/doc/snippets/autoconnection/imagedialog.cpp62
-rw-r--r--src/designer/src/designer/doc/snippets/autoconnection/imagedialog.h53
-rw-r--r--src/designer/src/designer/doc/snippets/autoconnection/main.cpp51
-rw-r--r--src/designer/src/designer/doc/snippets/imagedialog/CMakeLists.txt24
-rw-r--r--src/designer/src/designer/doc/snippets/imagedialog/imagedialog.pro1
-rw-r--r--src/designer/src/designer/doc/snippets/imagedialog/main.cpp51
-rw-r--r--src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_extension_default_extensionfactory.cpp70
-rw-r--r--src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_extension_extension.cpp56
-rw-r--r--src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_extension_qextensionmanager.cpp55
-rw-r--r--src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractformeditor.cpp61
-rw-r--r--src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractformwindow.cpp63
-rw-r--r--src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractformwindowcursor.cpp54
-rw-r--r--src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractformwindowmanager.cpp58
-rw-r--r--src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractobjectinspector.cpp58
-rw-r--r--src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractpropertyeditor.cpp68
-rw-r--r--src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractwidgetbox.cpp54
-rw-r--r--src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_uilib_abstractformbuilder.cpp67
-rw-r--r--src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_uilib_formbuilder.cpp54
-rw-r--r--src/designer/src/designer/doc/snippets/manual/doc_src_designer-manual.cpp51
-rw-r--r--src/designer/src/designer/doc/snippets/manual/doc_src_designer-manual.js51
-rw-r--r--src/designer/src/designer/doc/snippets/manual/doc_src_designer-manual.pro51
-rw-r--r--src/designer/src/designer/doc/snippets/multipleinheritance/CMakeLists.txt24
-rw-r--r--src/designer/src/designer/doc/snippets/multipleinheritance/imagedialog.cpp57
-rw-r--r--src/designer/src/designer/doc/snippets/multipleinheritance/imagedialog.h53
-rw-r--r--src/designer/src/designer/doc/snippets/multipleinheritance/main.cpp51
-rw-r--r--src/designer/src/designer/doc/snippets/multipleinheritance/multipleinheritance.pro1
-rw-r--r--src/designer/src/designer/doc/snippets/noautoconnection/CMakeLists.txt24
-rw-r--r--src/designer/src/designer/doc/snippets/noautoconnection/imagedialog.cpp64
-rw-r--r--src/designer/src/designer/doc/snippets/noautoconnection/imagedialog.h53
-rw-r--r--src/designer/src/designer/doc/snippets/noautoconnection/main.cpp51
-rw-r--r--src/designer/src/designer/doc/snippets/noautoconnection/noautoconnection.pro1
-rw-r--r--src/designer/src/designer/doc/snippets/plugins/doc_src_qtdesigner.cpp62
-rw-r--r--src/designer/src/designer/doc/snippets/plugins/doc_src_qtdesigner.pro53
-rw-r--r--src/designer/src/designer/doc/snippets/singleinheritance/CMakeLists.txt24
-rw-r--r--src/designer/src/designer/doc/snippets/singleinheritance/imagedialog.cpp57
-rw-r--r--src/designer/src/designer/doc/snippets/singleinheritance/imagedialog.h53
-rw-r--r--src/designer/src/designer/doc/snippets/singleinheritance/main.cpp51
-rw-r--r--src/designer/src/designer/doc/snippets/singleinheritance/singleinheritance.pro1
-rw-r--r--src/designer/src/designer/doc/snippets/uitools/calculatorform/CMakeLists.txt26
-rw-r--r--src/designer/src/designer/doc/snippets/uitools/calculatorform/main.cpp51
-rw-r--r--src/designer/src/designer/doc/src/designer-custom-widgets.qdoc32
-rw-r--r--src/designer/src/designer/doc/src/designer-examples.qdoc43
-rw-r--r--src/designer/src/designer/doc/src/designer-manual.qdoc428
-rw-r--r--src/designer/src/designer/doc/src/qtdesigner-index.qdoc61
-rw-r--r--src/designer/src/designer/doc/src/qtdesigner-module.qdoc41
-rw-r--r--src/designer/src/designer/images/mdi.pngbin59505 -> 0 bytes
-rw-r--r--src/designer/src/designer/images/sdi.pngbin61037 -> 0 bytes
-rw-r--r--src/designer/src/designer/images/workbench.pngbin2085 -> 0 bytes
-rw-r--r--src/designer/src/designer/main.cpp38
-rw-r--r--src/designer/src/designer/mainwindow.cpp91
-rw-r--r--src/designer/src/designer/mainwindow.h31
-rw-r--r--src/designer/src/designer/newform.cpp43
-rw-r--r--src/designer/src/designer/newform.h31
-rw-r--r--src/designer/src/designer/preferencesdialog.cpp36
-rw-r--r--src/designer/src/designer/preferencesdialog.h29
-rw-r--r--src/designer/src/designer/qdesigner.cpp160
-rw-r--r--src/designer/src/designer/qdesigner.h39
-rw-r--r--src/designer/src/designer/qdesigner_actions.cpp331
-rw-r--r--src/designer/src/designer/qdesigner_actions.h33
-rw-r--r--src/designer/src/designer/qdesigner_appearanceoptions.cpp34
-rw-r--r--src/designer/src/designer/qdesigner_appearanceoptions.h52
-rw-r--r--src/designer/src/designer/qdesigner_formwindow.cpp46
-rw-r--r--src/designer/src/designer/qdesigner_formwindow.h33
-rw-r--r--src/designer/src/designer/qdesigner_pch.h29
-rw-r--r--src/designer/src/designer/qdesigner_server.cpp40
-rw-r--r--src/designer/src/designer/qdesigner_server.h31
-rw-r--r--src/designer/src/designer/qdesigner_settings.cpp103
-rw-r--r--src/designer/src/designer/qdesigner_settings.h29
-rw-r--r--src/designer/src/designer/qdesigner_toolwindow.cpp115
-rw-r--r--src/designer/src/designer/qdesigner_toolwindow.h58
-rw-r--r--src/designer/src/designer/qdesigner_workbench.cpp246
-rw-r--r--src/designer/src/designer/qdesigner_workbench.h63
-rw-r--r--src/designer/src/designer/saveformastemplate.cpp38
-rw-r--r--src/designer/src/designer/saveformastemplate.h29
-rw-r--r--src/designer/src/designer/saveformastemplate.ui31
-rw-r--r--src/designer/src/designer/versiondialog.cpp53
-rw-r--r--src/designer/src/designer/versiondialog.h29
-rw-r--r--src/designer/src/lib/CMakeLists.txt399
-rw-r--r--src/designer/src/lib/components/qdesigner_components.h34
-rw-r--r--src/designer/src/lib/components/qdesigner_components_global.h29
-rw-r--r--src/designer/src/lib/extension/default_extensionfactory.cpp41
-rw-r--r--src/designer/src/lib/extension/default_extensionfactory.h37
-rw-r--r--src/designer/src/lib/extension/extension.cpp41
-rw-r--r--src/designer/src/lib/extension/extension.h41
-rw-r--r--src/designer/src/lib/extension/extension.pri12
-rw-r--r--src/designer/src/lib/extension/extension_global.h29
-rw-r--r--src/designer/src/lib/extension/qextensionmanager.cpp52
-rw-r--r--src/designer/src/lib/extension/qextensionmanager.h32
-rw-r--r--src/designer/src/lib/lib.pro22
-rw-r--r--src/designer/src/lib/lib_pch.h29
-rw-r--r--src/designer/src/lib/sdk/abstractactioneditor.cpp31
-rw-r--r--src/designer/src/lib/sdk/abstractactioneditor.h29
-rw-r--r--src/designer/src/lib/sdk/abstractdialoggui.cpp29
-rw-r--r--src/designer/src/lib/sdk/abstractdialoggui_p.h29
-rw-r--r--src/designer/src/lib/sdk/abstractdnditem.h29
-rw-r--r--src/designer/src/lib/sdk/abstractdnditem.qdoc28
-rw-r--r--src/designer/src/lib/sdk/abstractformeditor.cpp39
-rw-r--r--src/designer/src/lib/sdk/abstractformeditor.h29
-rw-r--r--src/designer/src/lib/sdk/abstractformeditorplugin.cpp31
-rw-r--r--src/designer/src/lib/sdk/abstractformeditorplugin.h29
-rw-r--r--src/designer/src/lib/sdk/abstractformwindow.cpp35
-rw-r--r--src/designer/src/lib/sdk/abstractformwindow.h29
-rw-r--r--src/designer/src/lib/sdk/abstractformwindowcursor.cpp29
-rw-r--r--src/designer/src/lib/sdk/abstractformwindowcursor.h29
-rw-r--r--src/designer/src/lib/sdk/abstractformwindowmanager.cpp71
-rw-r--r--src/designer/src/lib/sdk/abstractformwindowmanager.h29
-rw-r--r--src/designer/src/lib/sdk/abstractformwindowtool.cpp29
-rw-r--r--src/designer/src/lib/sdk/abstractformwindowtool.h29
-rw-r--r--src/designer/src/lib/sdk/abstractintegration.cpp78
-rw-r--r--src/designer/src/lib/sdk/abstractintegration.h29
-rw-r--r--src/designer/src/lib/sdk/abstractintrospection.cpp33
-rw-r--r--src/designer/src/lib/sdk/abstractintrospection_p.h32
-rw-r--r--src/designer/src/lib/sdk/abstractlanguage.h29
-rw-r--r--src/designer/src/lib/sdk/abstractmetadatabase.cpp33
-rw-r--r--src/designer/src/lib/sdk/abstractmetadatabase.h29
-rw-r--r--src/designer/src/lib/sdk/abstractnewformwidget.cpp29
-rw-r--r--src/designer/src/lib/sdk/abstractnewformwidget.h29
-rw-r--r--src/designer/src/lib/sdk/abstractobjectinspector.cpp31
-rw-r--r--src/designer/src/lib/sdk/abstractobjectinspector.h29
-rw-r--r--src/designer/src/lib/sdk/abstractoptionspage.h29
-rw-r--r--src/designer/src/lib/sdk/abstractoptionspage.qdoc28
-rw-r--r--src/designer/src/lib/sdk/abstractpromotioninterface.cpp29
-rw-r--r--src/designer/src/lib/sdk/abstractpromotioninterface.h29
-rw-r--r--src/designer/src/lib/sdk/abstractpropertyeditor.cpp31
-rw-r--r--src/designer/src/lib/sdk/abstractpropertyeditor.h29
-rw-r--r--src/designer/src/lib/sdk/abstractresourcebrowser.cpp29
-rw-r--r--src/designer/src/lib/sdk/abstractresourcebrowser.h29
-rw-r--r--src/designer/src/lib/sdk/abstractsettings.h29
-rw-r--r--src/designer/src/lib/sdk/abstractsettings.qdoc28
-rw-r--r--src/designer/src/lib/sdk/abstractwidgetbox.cpp35
-rw-r--r--src/designer/src/lib/sdk/abstractwidgetbox.h31
-rw-r--r--src/designer/src/lib/sdk/abstractwidgetdatabase.cpp43
-rw-r--r--src/designer/src/lib/sdk/abstractwidgetdatabase.h29
-rw-r--r--src/designer/src/lib/sdk/abstractwidgetfactory.cpp31
-rw-r--r--src/designer/src/lib/sdk/abstractwidgetfactory.h29
-rw-r--r--src/designer/src/lib/sdk/container.h29
-rw-r--r--src/designer/src/lib/sdk/container.qdoc32
-rw-r--r--src/designer/src/lib/sdk/dynamicpropertysheet.h29
-rw-r--r--src/designer/src/lib/sdk/dynamicpropertysheet.qdoc30
-rw-r--r--src/designer/src/lib/sdk/extrainfo.cpp31
-rw-r--r--src/designer/src/lib/sdk/extrainfo.h29
-rw-r--r--src/designer/src/lib/sdk/layoutdecoration.h29
-rw-r--r--src/designer/src/lib/sdk/layoutdecoration.qdoc30
-rw-r--r--src/designer/src/lib/sdk/membersheet.h29
-rw-r--r--src/designer/src/lib/sdk/membersheet.qdoc32
-rw-r--r--src/designer/src/lib/sdk/propertysheet.h29
-rw-r--r--src/designer/src/lib/sdk/propertysheet.qdoc32
-rw-r--r--src/designer/src/lib/sdk/sdk.pri55
-rw-r--r--src/designer/src/lib/sdk/sdk_global.h29
-rw-r--r--src/designer/src/lib/sdk/taskmenu.cpp13
-rw-r--r--src/designer/src/lib/sdk/taskmenu.h38
-rw-r--r--src/designer/src/lib/sdk/taskmenu.qdoc34
-rw-r--r--src/designer/src/lib/shared/actioneditor.cpp159
-rw-r--r--src/designer/src/lib/shared/actioneditor_p.h34
-rw-r--r--src/designer/src/lib/shared/actionprovider_p.h36
-rw-r--r--src/designer/src/lib/shared/actionrepository.cpp98
-rw-r--r--src/designer/src/lib/shared/actionrepository_p.h33
-rw-r--r--src/designer/src/lib/shared/codedialog.cpp63
-rw-r--r--src/designer/src/lib/shared/codedialog_p.h29
-rw-r--r--src/designer/src/lib/shared/connectionedit.cpp65
-rw-r--r--src/designer/src/lib/shared/connectionedit_p.h29
-rw-r--r--src/designer/src/lib/shared/csshighlighter.cpp62
-rw-r--r--src/designer/src/lib/shared/csshighlighter_p.h46
-rw-r--r--src/designer/src/lib/shared/deviceprofile.cpp89
-rw-r--r--src/designer/src/lib/shared/deviceprofile_p.h44
-rw-r--r--src/designer/src/lib/shared/dialoggui.cpp29
-rw-r--r--src/designer/src/lib/shared/dialoggui_p.h29
-rw-r--r--src/designer/src/lib/shared/extensionfactory_p.h29
-rw-r--r--src/designer/src/lib/shared/formlayoutmenu.cpp75
-rw-r--r--src/designer/src/lib/shared/formlayoutmenu_p.h29
-rw-r--r--src/designer/src/lib/shared/formwindowbase.cpp68
-rw-r--r--src/designer/src/lib/shared/formwindowbase_p.h29
-rw-r--r--src/designer/src/lib/shared/grid.cpp63
-rw-r--r--src/designer/src/lib/shared/grid_p.h42
-rw-r--r--src/designer/src/lib/shared/gridpanel.cpp29
-rw-r--r--src/designer/src/lib/shared/gridpanel_p.h29
-rw-r--r--src/designer/src/lib/shared/htmlhighlighter.cpp76
-rw-r--r--src/designer/src/lib/shared/htmlhighlighter_p.h29
-rw-r--r--src/designer/src/lib/shared/icon-naming-spec.txt309
-rw-r--r--src/designer/src/lib/shared/iconloader.cpp77
-rw-r--r--src/designer/src/lib/shared/iconloader_p.h36
-rw-r--r--src/designer/src/lib/shared/iconselector.cpp346
-rw-r--r--src/designer/src/lib/shared/iconselector_p.h69
-rw-r--r--src/designer/src/lib/shared/invisible_widget.cpp29
-rw-r--r--src/designer/src/lib/shared/invisible_widget_p.h29
-rw-r--r--src/designer/src/lib/shared/layout.cpp168
-rw-r--r--src/designer/src/lib/shared/layout_p.h32
-rw-r--r--src/designer/src/lib/shared/layoutinfo.cpp47
-rw-r--r--src/designer/src/lib/shared/layoutinfo_p.h29
-rw-r--r--src/designer/src/lib/shared/metadatabase.cpp32
-rw-r--r--src/designer/src/lib/shared/metadatabase_p.h32
-rw-r--r--src/designer/src/lib/shared/morphmenu.cpp98
-rw-r--r--src/designer/src/lib/shared/morphmenu_p.h29
-rw-r--r--src/designer/src/lib/shared/newactiondialog.cpp78
-rw-r--r--src/designer/src/lib/shared/newactiondialog.ui87
-rw-r--r--src/designer/src/lib/shared/newactiondialog_p.h49
-rw-r--r--src/designer/src/lib/shared/newformwidget.cpp102
-rw-r--r--src/designer/src/lib/shared/newformwidget.ui32
-rw-r--r--src/designer/src/lib/shared/newformwidget_p.h37
-rw-r--r--src/designer/src/lib/shared/orderdialog.cpp56
-rw-r--r--src/designer/src/lib/shared/orderdialog.ui31
-rw-r--r--src/designer/src/lib/shared/orderdialog_p.h38
-rw-r--r--src/designer/src/lib/shared/plaintexteditor.cpp45
-rw-r--r--src/designer/src/lib/shared/plaintexteditor_p.h29
-rw-r--r--src/designer/src/lib/shared/plugindialog.cpp92
-rw-r--r--src/designer/src/lib/shared/plugindialog.ui32
-rw-r--r--src/designer/src/lib/shared/plugindialog_p.h41
-rw-r--r--src/designer/src/lib/shared/pluginmanager.cpp187
-rw-r--r--src/designer/src/lib/shared/pluginmanager_p.h37
-rw-r--r--src/designer/src/lib/shared/previewconfigurationwidget.cpp74
-rw-r--r--src/designer/src/lib/shared/previewconfigurationwidget_p.h29
-rw-r--r--src/designer/src/lib/shared/previewmanager.cpp82
-rw-r--r--src/designer/src/lib/shared/previewmanager_p.h29
-rw-r--r--src/designer/src/lib/shared/promotionmodel.cpp41
-rw-r--r--src/designer/src/lib/shared/promotionmodel_p.h29
-rw-r--r--src/designer/src/lib/shared/promotiontaskmenu.cpp40
-rw-r--r--src/designer/src/lib/shared/promotiontaskmenu_p.h29
-rw-r--r--src/designer/src/lib/shared/propertylineedit.cpp35
-rw-r--r--src/designer/src/lib/shared/propertylineedit_p.h29
-rw-r--r--src/designer/src/lib/shared/qdesigner_command.cpp218
-rw-r--r--src/designer/src/lib/shared/qdesigner_command2.cpp29
-rw-r--r--src/designer/src/lib/shared/qdesigner_command2_p.h29
-rw-r--r--src/designer/src/lib/shared/qdesigner_command_p.h95
-rw-r--r--src/designer/src/lib/shared/qdesigner_dnditem.cpp72
-rw-r--r--src/designer/src/lib/shared/qdesigner_dnditem_p.h29
-rw-r--r--src/designer/src/lib/shared/qdesigner_dockwidget.cpp35
-rw-r--r--src/designer/src/lib/shared/qdesigner_dockwidget_p.h29
-rw-r--r--src/designer/src/lib/shared/qdesigner_formbuilder.cpp49
-rw-r--r--src/designer/src/lib/shared/qdesigner_formbuilder_p.h29
-rw-r--r--src/designer/src/lib/shared/qdesigner_formeditorcommand.cpp29
-rw-r--r--src/designer/src/lib/shared/qdesigner_formeditorcommand_p.h29
-rw-r--r--src/designer/src/lib/shared/qdesigner_formwindowcommand.cpp33
-rw-r--r--src/designer/src/lib/shared/qdesigner_formwindowcommand_p.h29
-rw-r--r--src/designer/src/lib/shared/qdesigner_formwindowmanager.cpp33
-rw-r--r--src/designer/src/lib/shared/qdesigner_formwindowmanager_p.h29
-rw-r--r--src/designer/src/lib/shared/qdesigner_introspection.cpp40
-rw-r--r--src/designer/src/lib/shared/qdesigner_introspection_p.h36
-rw-r--r--src/designer/src/lib/shared/qdesigner_membersheet.cpp81
-rw-r--r--src/designer/src/lib/shared/qdesigner_membersheet_p.h29
-rw-r--r--src/designer/src/lib/shared/qdesigner_menu.cpp155
-rw-r--r--src/designer/src/lib/shared/qdesigner_menu_p.h29
-rw-r--r--src/designer/src/lib/shared/qdesigner_menubar.cpp112
-rw-r--r--src/designer/src/lib/shared/qdesigner_menubar_p.h29
-rw-r--r--src/designer/src/lib/shared/qdesigner_objectinspector.cpp29
-rw-r--r--src/designer/src/lib/shared/qdesigner_objectinspector_p.h29
-rw-r--r--src/designer/src/lib/shared/qdesigner_promotion.cpp87
-rw-r--r--src/designer/src/lib/shared/qdesigner_promotion_p.h29
-rw-r--r--src/designer/src/lib/shared/qdesigner_promotiondialog.cpp66
-rw-r--r--src/designer/src/lib/shared/qdesigner_promotiondialog_p.h29
-rw-r--r--src/designer/src/lib/shared/qdesigner_propertycommand.cpp355
-rw-r--r--src/designer/src/lib/shared/qdesigner_propertycommand_p.h61
-rw-r--r--src/designer/src/lib/shared/qdesigner_propertyeditor.cpp77
-rw-r--r--src/designer/src/lib/shared/qdesigner_propertyeditor_p.h31
-rw-r--r--src/designer/src/lib/shared/qdesigner_propertysheet.cpp419
-rw-r--r--src/designer/src/lib/shared/qdesigner_propertysheet_p.h34
-rw-r--r--src/designer/src/lib/shared/qdesigner_qsettings.cpp29
-rw-r--r--src/designer/src/lib/shared/qdesigner_qsettings_p.h29
-rw-r--r--src/designer/src/lib/shared/qdesigner_stackedbox.cpp56
-rw-r--r--src/designer/src/lib/shared/qdesigner_stackedbox_p.h29
-rw-r--r--src/designer/src/lib/shared/qdesigner_tabwidget.cpp75
-rw-r--r--src/designer/src/lib/shared/qdesigner_tabwidget_p.h32
-rw-r--r--src/designer/src/lib/shared/qdesigner_taskmenu.cpp94
-rw-r--r--src/designer/src/lib/shared/qdesigner_taskmenu_p.h29
-rw-r--r--src/designer/src/lib/shared/qdesigner_toolbar.cpp86
-rw-r--r--src/designer/src/lib/shared/qdesigner_toolbar_p.h31
-rw-r--r--src/designer/src/lib/shared/qdesigner_toolbox.cpp69
-rw-r--r--src/designer/src/lib/shared/qdesigner_toolbox_p.h31
-rw-r--r--src/designer/src/lib/shared/qdesigner_utils.cpp299
-rw-r--r--src/designer/src/lib/shared/qdesigner_utils_p.h180
-rw-r--r--src/designer/src/lib/shared/qdesigner_widget.cpp29
-rw-r--r--src/designer/src/lib/shared/qdesigner_widget_p.h31
-rw-r--r--src/designer/src/lib/shared/qdesigner_widgetbox.cpp52
-rw-r--r--src/designer/src/lib/shared/qdesigner_widgetbox_p.h29
-rw-r--r--src/designer/src/lib/shared/qdesigner_widgetitem.cpp29
-rw-r--r--src/designer/src/lib/shared/qdesigner_widgetitem_p.h29
-rw-r--r--src/designer/src/lib/shared/qlayout_widget.cpp184
-rw-r--r--src/designer/src/lib/shared/qlayout_widget_p.h36
-rw-r--r--src/designer/src/lib/shared/qsimpleresource.cpp47
-rw-r--r--src/designer/src/lib/shared/qsimpleresource_p.h29
-rw-r--r--src/designer/src/lib/shared/qtresourceeditordialog.cpp357
-rw-r--r--src/designer/src/lib/shared/qtresourceeditordialog_p.h64
-rw-r--r--src/designer/src/lib/shared/qtresourcemodel.cpp110
-rw-r--r--src/designer/src/lib/shared/qtresourcemodel_p.h31
-rw-r--r--src/designer/src/lib/shared/qtresourceview.cpp172
-rw-r--r--src/designer/src/lib/shared/qtresourceview_p.h42
-rw-r--r--src/designer/src/lib/shared/rcc.cpp1109
-rw-r--r--src/designer/src/lib/shared/rcc_p.h87
-rw-r--r--src/designer/src/lib/shared/richtexteditor.cpp148
-rw-r--r--src/designer/src/lib/shared/richtexteditor_p.h29
-rw-r--r--src/designer/src/lib/shared/selectsignaldialog.cpp34
-rw-r--r--src/designer/src/lib/shared/selectsignaldialog_p.h31
-rw-r--r--src/designer/src/lib/shared/shared.pri192
-rw-r--r--src/designer/src/lib/shared/shared.qrc20
-rw-r--r--src/designer/src/lib/shared/shared_enums_p.h29
-rw-r--r--src/designer/src/lib/shared/shared_global_p.h29
-rw-r--r--src/designer/src/lib/shared/shared_settings.cpp162
-rw-r--r--src/designer/src/lib/shared/shared_settings_p.h30
-rw-r--r--src/designer/src/lib/shared/sheet_delegate.cpp29
-rw-r--r--src/designer/src/lib/shared/sheet_delegate_p.h29
-rw-r--r--src/designer/src/lib/shared/signalslotdialog.cpp165
-rw-r--r--src/designer/src/lib/shared/signalslotdialog_p.h39
-rw-r--r--src/designer/src/lib/shared/spacer_widget.cpp33
-rw-r--r--src/designer/src/lib/shared/spacer_widget_p.h29
-rw-r--r--src/designer/src/lib/shared/stylesheeteditor.cpp136
-rw-r--r--src/designer/src/lib/shared/stylesheeteditor_p.h29
-rw-r--r--src/designer/src/lib/shared/textpropertyeditor.cpp92
-rw-r--r--src/designer/src/lib/shared/textpropertyeditor_p.h31
-rw-r--r--src/designer/src/lib/shared/widgetdatabase.cpp249
-rw-r--r--src/designer/src/lib/shared/widgetdatabase_p.h35
-rw-r--r--src/designer/src/lib/shared/widgetfactory.cpp232
-rw-r--r--src/designer/src/lib/shared/widgetfactory_p.h68
-rw-r--r--src/designer/src/lib/shared/zoomwidget.cpp37
-rw-r--r--src/designer/src/lib/shared/zoomwidget_p.h29
-rw-r--r--src/designer/src/lib/uilib/abstractformbuilder.cpp557
-rw-r--r--src/designer/src/lib/uilib/abstractformbuilder.h56
-rw-r--r--src/designer/src/lib/uilib/formbuilder.cpp85
-rw-r--r--src/designer/src/lib/uilib/formbuilder.h50
-rw-r--r--src/designer/src/lib/uilib/formbuilderextra.cpp196
-rw-r--r--src/designer/src/lib/uilib/formbuilderextra_p.h111
-rw-r--r--src/designer/src/lib/uilib/properties.cpp230
-rw-r--r--src/designer/src/lib/uilib/properties_p.h46
-rw-r--r--src/designer/src/lib/uilib/resourcebuilder.cpp149
-rw-r--r--src/designer/src/lib/uilib/resourcebuilder_p.h45
-rw-r--r--src/designer/src/lib/uilib/textbuilder.cpp40
-rw-r--r--src/designer/src/lib/uilib/textbuilder_p.h40
-rw-r--r--src/designer/src/lib/uilib/ui4.cpp1303
-rw-r--r--src/designer/src/lib/uilib/ui4_p.h56
-rw-r--r--src/designer/src/lib/uilib/uilib.pri32
-rw-r--r--src/designer/src/lib/uilib/uilib_global.h40
-rw-r--r--src/designer/src/lib/uilib/widgets.table5
-rw-r--r--src/designer/src/plugins/CMakeLists.txt3
-rw-r--r--src/designer/src/plugins/activeqt/CMakeLists.txt8
-rw-r--r--src/designer/src/plugins/activeqt/activeqt.pro19
-rw-r--r--src/designer/src/plugins/activeqt/qaxwidgetextrainfo.cpp36
-rw-r--r--src/designer/src/plugins/activeqt/qaxwidgetextrainfo.h29
-rw-r--r--src/designer/src/plugins/activeqt/qaxwidgetplugin.cpp37
-rw-r--r--src/designer/src/plugins/activeqt/qaxwidgetplugin.h29
-rw-r--r--src/designer/src/plugins/activeqt/qaxwidgetpropertysheet.cpp41
-rw-r--r--src/designer/src/plugins/activeqt/qaxwidgetpropertysheet.h34
-rw-r--r--src/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp43
-rw-r--r--src/designer/src/plugins/activeqt/qaxwidgettaskmenu.h31
-rw-r--r--src/designer/src/plugins/activeqt/qdesigneraxwidget.cpp29
-rw-r--r--src/designer/src/plugins/activeqt/qdesigneraxwidget.h35
-rw-r--r--src/designer/src/plugins/plugins.pri5
-rw-r--r--src/designer/src/plugins/plugins.pro6
-rw-r--r--src/designer/src/plugins/qquickwidget/CMakeLists.txt10
-rw-r--r--src/designer/src/plugins/qquickwidget/qquickwidget.pro9
-rw-r--r--src/designer/src/plugins/qquickwidget/qquickwidget_plugin.cpp77
-rw-r--r--src/designer/src/plugins/qquickwidget/qquickwidget_plugin.h29
-rw-r--r--src/designer/src/plugins/qquickwidget/qquickwidget_plugin.qrc5
-rw-r--r--src/designer/src/plugins/qwebview/CMakeLists.txt13
-rw-r--r--src/designer/src/plugins/qwebview/qwebview.pro10
-rw-r--r--src/designer/src/plugins/qwebview/qwebview_plugin.cpp80
-rw-r--r--src/designer/src/plugins/qwebview/qwebview_plugin.h29
-rw-r--r--src/designer/src/plugins/qwebview/qwebview_plugin.qrc5
-rw-r--r--src/designer/src/plugins/tools/view3d/CMakeLists.txt7
-rw-r--r--src/designer/src/plugins/tools/view3d/view3d.cpp38
-rw-r--r--src/designer/src/plugins/tools/view3d/view3d.h29
-rw-r--r--src/designer/src/plugins/tools/view3d/view3d.pro8
-rw-r--r--src/designer/src/plugins/tools/view3d/view3d_global.h33
-rw-r--r--src/designer/src/plugins/tools/view3d/view3d_plugin.cpp29
-rw-r--r--src/designer/src/plugins/tools/view3d/view3d_plugin.h33
-rw-r--r--src/designer/src/plugins/tools/view3d/view3d_tool.cpp29
-rw-r--r--src/designer/src/plugins/tools/view3d/view3d_tool.h33
-rw-r--r--src/designer/src/src.pro28
-rw-r--r--src/designer/src/uiplugin/.prev_CMakeLists.txt18
-rw-r--r--src/designer/src/uiplugin/CMakeLists.txt27
-rw-r--r--src/designer/src/uiplugin/customwidget.h87
-rw-r--r--src/designer/src/uiplugin/customwidget.qdoc293
-rw-r--r--src/designer/src/uiplugin/qdesignerexportwidget.h49
-rw-r--r--src/designer/src/uiplugin/uiplugin.pro6
-rw-r--r--src/designer/src/uitools/CMakeLists.txt47
-rw-r--r--src/designer/src/uitools/doc/images/textfinder-example-find.pngbin15837 -> 0 bytes
-rw-r--r--src/designer/src/uitools/doc/images/textfinder-example-find2.pngbin15745 -> 0 bytes
-rw-r--r--src/designer/src/uitools/doc/qtuitools.qdocconf43
-rw-r--r--src/designer/src/uitools/doc/snippets/quiloader/doc_src_qtuiloader.cpp53
-rw-r--r--src/designer/src/uitools/doc/snippets/quiloader/doc_src_qtuiloader.pro53
-rw-r--r--src/designer/src/uitools/doc/snippets/quiloader/main.cpp80
-rw-r--r--src/designer/src/uitools/doc/snippets/quiloader/mywidget.cpp70
-rw-r--r--src/designer/src/uitools/doc/snippets/quiloader/mywidget.h62
-rw-r--r--src/designer/src/uitools/doc/src/qtuitools-examples.qdoc51
-rw-r--r--src/designer/src/uitools/doc/src/qtuitools-index.qdoc76
-rw-r--r--src/designer/src/uitools/doc/src/qtuitools-module.qdoc62
-rw-r--r--src/designer/src/uitools/qtuitoolsglobal.h60
-rw-r--r--src/designer/src/uitools/quiloader.cpp949
-rw-r--r--src/designer/src/uitools/quiloader.h97
-rw-r--r--src/designer/src/uitools/quiloader_p.h113
-rw-r--r--src/designer/src/uitools/uitools.pro19
-rw-r--r--src/distancefieldgenerator/CMakeLists.txt10
-rw-r--r--src/distancefieldgenerator/distancefieldgenerator.pro30
-rw-r--r--src/distancefieldgenerator/distancefieldmodel.cpp29
-rw-r--r--src/distancefieldgenerator/distancefieldmodel.h29
-rw-r--r--src/distancefieldgenerator/distancefieldmodelworker.cpp29
-rw-r--r--src/distancefieldgenerator/distancefieldmodelworker.h29
-rw-r--r--src/distancefieldgenerator/doc/distancefieldgenerator.qdocconf27
-rw-r--r--src/distancefieldgenerator/doc/qtdistancefieldgenerator.qdocconf4
-rw-r--r--src/distancefieldgenerator/doc/src/distancefieldgenerator-manual.qdoc28
-rw-r--r--src/distancefieldgenerator/main.cpp29
-rw-r--r--src/distancefieldgenerator/mainwindow.cpp52
-rw-r--r--src/distancefieldgenerator/mainwindow.h29
-rw-r--r--src/global/.prev_CMakeLists.txt13
-rw-r--r--src/global/CMakeLists.txt11
-rw-r--r--src/global/global.pro6
-rw-r--r--src/kmap2qmap/CMakeLists.txt7
-rw-r--r--src/kmap2qmap/kmap2qmap.pro10
-rw-r--r--src/kmap2qmap/main.cpp34
-rw-r--r--src/linguist/.prev_CMakeLists.txt19
-rw-r--r--src/linguist/CMakeLists.txt13
-rw-r--r--src/linguist/GenerateLUpdateProject.cmake152
-rw-r--r--src/linguist/Qt5LinguistToolsConfig.cmake.in103
-rw-r--r--src/linguist/Qt5LinguistToolsMacros.cmake136
-rw-r--r--src/linguist/Qt6LinguistToolsMacros.cmake774
-rw-r--r--src/linguist/lconvert/.prev_CMakeLists.txt32
-rw-r--r--src/linguist/lconvert/CMakeLists.txt14
-rw-r--r--src/linguist/lconvert/lconvert.pro10
-rw-r--r--src/linguist/lconvert/main.cpp44
-rw-r--r--src/linguist/linguist.pro62
-rw-r--r--src/linguist/linguist/CMakeLists.txt23
-rw-r--r--src/linguist/linguist/batchtranslation.ui36
-rw-r--r--src/linguist/linguist/batchtranslationdialog.cpp40
-rw-r--r--src/linguist/linguist/batchtranslationdialog.h29
-rw-r--r--src/linguist/linguist/doc/cmake-macros.qdoc725
-rw-r--r--src/linguist/linguist/doc/cmake-properties.qdoc131
-rw-r--r--src/linguist/linguist/doc/images/front-coding.pngbin0 -> 6045 bytes
-rw-r--r--src/linguist/linguist/doc/images/front-publishing.pngbin0 -> 5101 bytes
-rw-r--r--src/linguist/linguist/doc/images/front-ui.pngbin0 -> 3491 bytes
-rw-r--r--src/linguist/linguist/doc/images/linguist-auxlanguages.pngbin11304 -> 0 bytes
-rw-r--r--src/linguist/linguist/doc/images/linguist-context-view.webpbin0 -> 1240 bytes
-rw-r--r--src/linguist/linguist/doc/images/linguist-finddialog.pngbin9904 -> 0 bytes
-rw-r--r--src/linguist/linguist/doc/images/linguist-strings-view.webpbin0 -> 3870 bytes
-rw-r--r--src/linguist/linguist/doc/images/linguist-ui.webpbin0 -> 20900 bytes
-rw-r--r--src/linguist/linguist/doc/images/next.pngbin0 -> 1038 bytes
-rw-r--r--src/linguist/linguist/doc/images/nextunfinished.pngbin0 -> 1257 bytes
-rw-r--r--src/linguist/linguist/doc/images/xNIz78IPBu0.jpgbin0 -> 1675 bytes
-rw-r--r--src/linguist/linguist/doc/includes/cmake-find-package-linguisttools.qdocinc6
-rw-r--r--src/linguist/linguist/doc/qtlinguist.qdocconf22
-rw-r--r--src/linguist/linguist/doc/snippets/cmake-macros/examples.cmake132
-rw-r--r--src/linguist/linguist/doc/snippets/doc_src_linguist-manual.cpp51
-rw-r--r--src/linguist/linguist/doc/snippets/doc_src_linguist-manual.pro51
-rw-r--r--src/linguist/linguist/doc/src/linguist-examples.qdoc28
-rw-r--r--src/linguist/linguist/doc/src/linguist-manual.qdoc1627
-rw-r--r--src/linguist/linguist/errorsview.cpp29
-rw-r--r--src/linguist/linguist/errorsview.h29
-rw-r--r--src/linguist/linguist/finddialog.cpp60
-rw-r--r--src/linguist/linguist/finddialog.h41
-rw-r--r--src/linguist/linguist/finddialog.ui86
-rw-r--r--src/linguist/linguist/formpreviewview.cpp37
-rw-r--r--src/linguist/linguist/formpreviewview.h29
-rw-r--r--src/linguist/linguist/globals.cpp29
-rw-r--r--src/linguist/linguist/globals.h29
-rw-r--r--src/linguist/linguist/images/icons/linguist-128-8.pngbin5947 -> 0 bytes
-rw-r--r--src/linguist/linguist/images/icons/linguist-16-32.pngbin280 -> 0 bytes
-rw-r--r--src/linguist/linguist/images/icons/linguist-16-8.pngbin608 -> 0 bytes
-rw-r--r--src/linguist/linguist/images/icons/linguist-32-32.pngbin419 -> 0 bytes
-rw-r--r--src/linguist/linguist/images/icons/linguist-32-8.pngbin1369 -> 0 bytes
-rw-r--r--src/linguist/linguist/images/icons/linguist-48-32.pngbin1410 -> 0 bytes
-rw-r--r--src/linguist/linguist/images/icons/linguist-48-8.pngbin1972 -> 0 bytes
-rw-r--r--src/linguist/linguist/images/icons/linguist-64-32.pngbin1542 -> 0 bytes
-rw-r--r--src/linguist/linguist/images/icons/linguist-64-8.pngbin2664 -> 0 bytes
-rw-r--r--src/linguist/linguist/images/mac/fileprint.pngbin741 -> 0 bytes
-rw-r--r--src/linguist/linguist/linguist.pro93
-rw-r--r--src/linguist/linguist/linguist.qrc61
-rw-r--r--src/linguist/linguist/main.cpp35
-rw-r--r--src/linguist/linguist/mainwindow.cpp208
-rw-r--r--src/linguist/linguist/mainwindow.h43
-rw-r--r--src/linguist/linguist/mainwindow.ui44
-rw-r--r--src/linguist/linguist/messageeditor.cpp79
-rw-r--r--src/linguist/linguist/messageeditor.h32
-rw-r--r--src/linguist/linguist/messageeditorwidgets.cpp59
-rw-r--r--src/linguist/linguist/messageeditorwidgets.h29
-rw-r--r--src/linguist/linguist/messagehighlighter.cpp31
-rw-r--r--src/linguist/linguist/messagehighlighter.h29
-rw-r--r--src/linguist/linguist/messagemodel.cpp147
-rw-r--r--src/linguist/linguist/messagemodel.h51
-rw-r--r--src/linguist/linguist/phrase.cpp67
-rw-r--r--src/linguist/linguist/phrase.h41
-rw-r--r--src/linguist/linguist/phrasebookbox.cpp29
-rw-r--r--src/linguist/linguist/phrasebookbox.h29
-rw-r--r--src/linguist/linguist/phrasebookbox.ui32
-rw-r--r--src/linguist/linguist/phrasemodel.cpp39
-rw-r--r--src/linguist/linguist/phrasemodel.h29
-rw-r--r--src/linguist/linguist/phraseview.cpp42
-rw-r--r--src/linguist/linguist/phraseview.h56
-rw-r--r--src/linguist/linguist/printout.cpp35
-rw-r--r--src/linguist/linguist/printout.h29
-rw-r--r--src/linguist/linguist/recentfiles.cpp37
-rw-r--r--src/linguist/linguist/recentfiles.h29
-rw-r--r--src/linguist/linguist/sourcecodeview.cpp29
-rw-r--r--src/linguist/linguist/sourcecodeview.h29
-rw-r--r--src/linguist/linguist/statistics.cpp29
-rw-r--r--src/linguist/linguist/statistics.h29
-rw-r--r--src/linguist/linguist/statistics.ui36
-rw-r--r--src/linguist/linguist/translatedialog.cpp29
-rw-r--r--src/linguist/linguist/translatedialog.h29
-rw-r--r--src/linguist/linguist/translatedialog.ui36
-rw-r--r--src/linguist/linguist/translationsettings.ui4
-rw-r--r--src/linguist/linguist/translationsettingsdialog.cpp97
-rw-r--r--src/linguist/linguist/translationsettingsdialog.h29
-rw-r--r--src/linguist/lprodump/.prev_CMakeLists.txt57
-rw-r--r--src/linguist/lprodump/CMakeLists.txt35
-rw-r--r--src/linguist/lprodump/lprodump.pro22
-rw-r--r--src/linguist/lprodump/main.cpp172
-rw-r--r--src/linguist/lrelease-pro/.prev_CMakeLists.txt25
-rw-r--r--src/linguist/lrelease-pro/CMakeLists.txt16
-rw-r--r--src/linguist/lrelease-pro/lrelease-pro.pro19
-rw-r--r--src/linguist/lrelease-pro/main.cpp85
-rw-r--r--src/linguist/lrelease/.prev_CMakeLists.txt37
-rw-r--r--src/linguist/lrelease/CMakeLists.txt23
-rw-r--r--src/linguist/lrelease/lrelease.123
-rw-r--r--src/linguist/lrelease/lrelease.pro21
-rw-r--r--src/linguist/lrelease/main.cpp159
-rw-r--r--src/linguist/lupdate-pro/.prev_CMakeLists.txt31
-rw-r--r--src/linguist/lupdate-pro/CMakeLists.txt22
-rw-r--r--src/linguist/lupdate-pro/lupdate-pro.pro23
-rw-r--r--src/linguist/lupdate-pro/main.cpp86
-rw-r--r--src/linguist/lupdate/.prev_CMakeLists.txt80
-rw-r--r--src/linguist/lupdate/CMakeLists.txt60
-rw-r--r--src/linguist/lupdate/clangtoolastreader.cpp388
-rw-r--r--src/linguist/lupdate/clangtoolastreader.h78
-rw-r--r--src/linguist/lupdate/cpp.cpp443
-rw-r--r--src/linguist/lupdate/cpp.h29
-rw-r--r--src/linguist/lupdate/cpp_clang.cpp650
-rw-r--r--src/linguist/lupdate/cpp_clang.h168
-rw-r--r--src/linguist/lupdate/filesignificancecheck.cpp70
-rw-r--r--src/linguist/lupdate/filesignificancecheck.h63
-rw-r--r--src/linguist/lupdate/java.cpp73
-rw-r--r--src/linguist/lupdate/lupdate.125
-rw-r--r--src/linguist/lupdate/lupdate.h42
-rw-r--r--src/linguist/lupdate/lupdate.pro76
-rw-r--r--src/linguist/lupdate/lupdatepreprocessoraction.cpp109
-rw-r--r--src/linguist/lupdate/lupdatepreprocessoraction.h65
-rw-r--r--src/linguist/lupdate/main.cpp314
-rw-r--r--src/linguist/lupdate/merge.cpp258
-rw-r--r--src/linguist/lupdate/python.cpp777
-rw-r--r--src/linguist/lupdate/qdeclarative.cpp128
-rw-r--r--src/linguist/lupdate/synchronized.h58
-rw-r--r--src/linguist/lupdate/ui.cpp37
-rw-r--r--src/linguist/shared/fmt.h17
-rw-r--r--src/linguist/shared/formats.pri20
-rw-r--r--src/linguist/shared/ioutils.cpp88
-rw-r--r--src/linguist/shared/ioutils.h34
-rw-r--r--src/linguist/shared/numerus.cpp70
-rw-r--r--src/linguist/shared/po.cpp77
-rw-r--r--src/linguist/shared/profileevaluator.cpp33
-rw-r--r--src/linguist/shared/profileevaluator.h29
-rw-r--r--src/linguist/shared/profileutils.h29
-rw-r--r--src/linguist/shared/proitems.cpp167
-rw-r--r--src/linguist/shared/proitems.h137
-rw-r--r--src/linguist/shared/projectdescriptionreader.cpp40
-rw-r--r--src/linguist/shared/projectdescriptionreader.h39
-rw-r--r--src/linguist/shared/proparser.pri28
-rw-r--r--src/linguist/shared/proparser.qrc5
-rw-r--r--src/linguist/shared/qm.cpp69
-rw-r--r--src/linguist/shared/qmake_global.h29
-rw-r--r--src/linguist/shared/qmakebuiltins.cpp190
-rw-r--r--src/linguist/shared/qmakeevaluator.cpp78
-rw-r--r--src/linguist/shared/qmakeevaluator.h29
-rw-r--r--src/linguist/shared/qmakeevaluator_p.h33
-rw-r--r--src/linguist/shared/qmakeglobals.cpp58
-rw-r--r--src/linguist/shared/qmakeglobals.h29
-rw-r--r--src/linguist/shared/qmakeparser.cpp64
-rw-r--r--src/linguist/shared/qmakeparser.h31
-rw-r--r--src/linguist/shared/qmakevfs.cpp33
-rw-r--r--src/linguist/shared/qmakevfs.h29
-rw-r--r--src/linguist/shared/qph.cpp39
-rw-r--r--src/linguist/shared/qrcreader.cpp40
-rw-r--r--src/linguist/shared/qrcreader.h36
-rw-r--r--src/linguist/shared/registry.cpp133
-rw-r--r--src/linguist/shared/registry_p.h48
-rw-r--r--src/linguist/shared/runqttool.cpp73
-rw-r--r--src/linguist/shared/runqttool.h34
-rw-r--r--src/linguist/shared/simtexth.cpp31
-rw-r--r--src/linguist/shared/simtexth.h29
-rw-r--r--src/linguist/shared/translator.cpp198
-rw-r--r--src/linguist/shared/translator.h63
-rw-r--r--src/linguist/shared/translatormessage.cpp31
-rw-r--r--src/linguist/shared/translatormessage.h42
-rw-r--r--src/linguist/shared/ts.cpp149
-rw-r--r--src/linguist/shared/ts.dtd104
-rw-r--r--src/linguist/shared/ts.xsd189
-rw-r--r--src/linguist/shared/xliff.cpp79
-rw-r--r--src/linguist/shared/xmlparser.cpp29
-rw-r--r--src/linguist/shared/xmlparser.h29
-rw-r--r--src/macdeployqt/CMakeLists.txt7
-rw-r--r--src/macdeployqt/macchangeqt/CMakeLists.txt13
-rw-r--r--src/macdeployqt/macchangeqt/macchangeqt.pro5
-rw-r--r--src/macdeployqt/macchangeqt/main.cpp63
-rw-r--r--src/macdeployqt/macdeployqt.pro6
-rw-r--r--src/macdeployqt/macdeployqt/CMakeLists.txt13
-rw-r--r--src/macdeployqt/macdeployqt/macdeployqt.pro5
-rw-r--r--src/macdeployqt/macdeployqt/main.cpp260
-rw-r--r--src/macdeployqt/shared/shared.cpp1619
-rw-r--r--src/macdeployqt/shared/shared.h144
-rw-r--r--src/pixeltool/CMakeLists.txt9
-rw-r--r--src/pixeltool/main.cpp45
-rw-r--r--src/pixeltool/pixeltool.pro14
-rw-r--r--src/pixeltool/qpixeltool.cpp220
-rw-r--r--src/pixeltool/qpixeltool.h33
-rw-r--r--src/qdbus/CMakeLists.txt3
-rw-r--r--src/qdbus/qdbus.pro13
-rw-r--r--src/qdbus/qdbus/CMakeLists.txt5
-rw-r--r--src/qdbus/qdbus/qdbus.cpp74
-rw-r--r--src/qdbus/qdbus/qdbus.pro5
-rw-r--r--src/qdbus/qdbusviewer/.prev_CMakeLists.txt58
-rw-r--r--src/qdbus/qdbusviewer/CMakeLists.txt11
-rw-r--r--src/qdbus/qdbusviewer/logviewer.cpp29
-rw-r--r--src/qdbus/qdbusviewer/logviewer.h29
-rw-r--r--src/qdbus/qdbusviewer/main.cpp45
-rw-r--r--src/qdbus/qdbusviewer/mainwindow.cpp83
-rw-r--r--src/qdbus/qdbusviewer/mainwindow.h29
-rw-r--r--src/qdbus/qdbusviewer/propertydialog.cpp39
-rw-r--r--src/qdbus/qdbusviewer/propertydialog.h29
-rw-r--r--src/qdbus/qdbusviewer/qdbusmodel.cpp111
-rw-r--r--src/qdbus/qdbusviewer/qdbusmodel.h29
-rw-r--r--src/qdbus/qdbusviewer/qdbusviewer.cpp158
-rw-r--r--src/qdbus/qdbusviewer/qdbusviewer.h33
-rw-r--r--src/qdbus/qdbusviewer/qdbusviewer.pro29
-rw-r--r--src/qdbus/qdbusviewer/qdbusviewer.qrc6
-rw-r--r--src/qdbus/qdbusviewer/qdbusviewer.rc1
-rw-r--r--src/qdbus/qdbusviewer/servicesproxymodel.cpp35
-rw-r--r--src/qdbus/qdbusviewer/servicesproxymodel.h29
-rw-r--r--src/qdoc/.prev_CMakeLists.txt148
-rw-r--r--src/qdoc/CMakeLists.txt165
-rw-r--r--src/qdoc/Qt5DocToolsConfig.cmake.in67
-rw-r--r--src/qdoc/access.h40
-rw-r--r--src/qdoc/aggregate.cpp1037
-rw-r--r--src/qdoc/aggregate.h121
-rw-r--r--src/qdoc/atom.cpp483
-rw-r--r--src/qdoc/atom.h259
-rw-r--r--src/qdoc/catch/CATCH_LICENSE.txt23
-rw-r--r--src/qdoc/catch/CMakeLists.txt9
-rw-r--r--src/qdoc/catch/include/catch/catch.hpp17976
-rw-r--r--src/qdoc/catch/qt_attribution.json20
-rw-r--r--src/qdoc/catch_conversions/CMakeLists.txt12
-rw-r--r--src/qdoc/catch_conversions/src/catch_conversions/qdoc_catch_conversions.h24
-rw-r--r--src/qdoc/catch_conversions/src/catch_conversions/qt_catch_conversions.h19
-rw-r--r--src/qdoc/catch_conversions/src/catch_conversions/std_catch_conversions.h16
-rw-r--r--src/qdoc/catch_generators/CMakeLists.txt16
-rw-r--r--src/qdoc/catch_generators/src/catch_generators/generators/combinators/cycle_generator.h80
-rw-r--r--src/qdoc/catch_generators/src/catch_generators/generators/combinators/oneof_generator.h185
-rw-r--r--src/qdoc/catch_generators/src/catch_generators/generators/k_partition_of_r_generator.h113
-rw-r--r--src/qdoc/catch_generators/src/catch_generators/generators/path_generator.h853
-rw-r--r--src/qdoc/catch_generators/src/catch_generators/generators/qchar_generator.h110
-rw-r--r--src/qdoc/catch_generators/src/catch_generators/generators/qstring_generator.h92
-rw-r--r--src/qdoc/catch_generators/src/catch_generators/namespaces.h14
-rw-r--r--src/qdoc/catch_generators/src/catch_generators/utilities/semantics/copy_value.h26
-rw-r--r--src/qdoc/catch_generators/src/catch_generators/utilities/semantics/generator_handler.h97
-rw-r--r--src/qdoc/catch_generators/src/catch_generators/utilities/semantics/move_into_vector.h62
-rw-r--r--src/qdoc/catch_generators/src/catch_generators/utilities/statistics/distribution.h158
-rw-r--r--src/qdoc/catch_generators/src/catch_generators/utilities/statistics/percentages.h49
-rw-r--r--src/qdoc/catch_generators/tests/CMakeLists.txt20
-rw-r--r--src/qdoc/catch_generators/tests/generators/catch_k_partition_of_r_generator.cpp41
-rw-r--r--src/qdoc/catch_generators/tests/generators/catch_path_generator.cpp755
-rw-r--r--src/qdoc/catch_generators/tests/generators/catch_qchar_generator.cpp102
-rw-r--r--src/qdoc/catch_generators/tests/generators/catch_qstring_generator.cpp89
-rw-r--r--src/qdoc/catch_generators/tests/generators/combinators/catch_cycle_generator.cpp70
-rw-r--r--src/qdoc/catch_generators/tests/generators/combinators/catch_oneof_generator.cpp362
-rw-r--r--src/qdoc/catch_generators/tests/main.cpp13
-rw-r--r--src/qdoc/catch_generators/tests/utilities/semantics/catch_generator_handler.cpp28
-rw-r--r--src/qdoc/clangcodeparser.cpp1726
-rw-r--r--src/qdoc/clangcodeparser.h86
-rw-r--r--src/qdoc/classnode.cpp328
-rw-r--r--src/qdoc/classnode.h103
-rw-r--r--src/qdoc/codechunk.cpp135
-rw-r--r--src/qdoc/codechunk.h97
-rw-r--r--src/qdoc/codemarker.cpp420
-rw-r--r--src/qdoc/codemarker.h98
-rw-r--r--src/qdoc/codeparser.cpp303
-rw-r--r--src/qdoc/codeparser.h179
-rw-r--r--src/qdoc/collectionnode.cpp173
-rw-r--r--src/qdoc/collectionnode.h91
-rw-r--r--src/qdoc/config.cpp1320
-rw-r--r--src/qdoc/config.h417
-rw-r--r--src/qdoc/cppcodemarker.cpp669
-rw-r--r--src/qdoc/cppcodemarker.h63
-rw-r--r--src/qdoc/cppcodeparser.cpp997
-rw-r--r--src/qdoc/cppcodeparser.h100
-rw-r--r--src/qdoc/doc.cpp510
-rw-r--r--src/qdoc/doc.h125
-rw-r--r--src/qdoc/doc/config/qdoc.qdocconf64
-rw-r--r--src/qdoc/doc/corefeatures.qdoc35
-rw-r--r--src/qdoc/doc/examples/cpp.qdoc.sample126
-rw-r--r--src/qdoc/doc/examples/main.cpp41
-rw-r--r--src/qdoc/doc/examples/mainwindow.cpp238
-rw-r--r--src/qdoc/doc/examples/minimum.qdocconf36
-rw-r--r--src/qdoc/doc/examples/qml.qdoc.sample114
-rw-r--r--src/qdoc/doc/examples/samples.qdocinc109
-rw-r--r--src/qdoc/doc/files/compat.qdocconf12
-rw-r--r--src/qdoc/doc/files/qtgui.qdocconf49
-rw-r--r--src/qdoc/doc/images/happy.gifbin11526 -> 0 bytes
-rw-r--r--src/qdoc/doc/images/qa-table.pngbin7057 -> 0 bytes
-rw-r--r--src/qdoc/doc/images/qt-logo.pngbin1214 -> 0 bytes
-rw-r--r--src/qdoc/doc/images/windowsvista-toolbutton.pngbin981 -> 0 bytes
-rw-r--r--src/qdoc/doc/qdoc-guide/qdoc-guide.qdoc721
-rw-r--r--src/qdoc/doc/qdoc-guide/qtwritingstyle-cpp.qdoc187
-rw-r--r--src/qdoc/doc/qdoc-guide/qtwritingstyle-qml.qdoc166
-rw-r--r--src/qdoc/doc/qdoc-manual-cmdindex.qdoc157
-rw-r--r--src/qdoc/doc/qdoc-manual-contextcmds.qdoc1004
-rw-r--r--src/qdoc/doc/qdoc-manual-intro.qdoc324
-rw-r--r--src/qdoc/doc/qdoc-manual-markupcmds.qdoc3986
-rw-r--r--src/qdoc/doc/qdoc-manual-qdocconf.qdoc2082
-rw-r--r--src/qdoc/doc/qdoc-manual-topiccmds.qdoc1632
-rw-r--r--src/qdoc/doc/qdoc-manual.qdoc73
-rw-r--r--src/qdoc/doc/qdoc-minimum-qdocconf.qdoc89
-rw-r--r--src/qdoc/doc/qtgui-qdocconf.qdoc303
-rw-r--r--src/qdoc/docbookgenerator.cpp4298
-rw-r--r--src/qdoc/docbookgenerator.h177
-rw-r--r--src/qdoc/docparser.cpp2490
-rw-r--r--src/qdoc/docparser.h160
-rw-r--r--src/qdoc/docprivate.cpp57
-rw-r--r--src/qdoc/docprivate.h109
-rw-r--r--src/qdoc/docutilities.h55
-rw-r--r--src/qdoc/editdistance.cpp97
-rw-r--r--src/qdoc/editdistance.h46
-rw-r--r--src/qdoc/enumitem.h53
-rw-r--r--src/qdoc/enumnode.cpp94
-rw-r--r--src/qdoc/enumnode.h73
-rw-r--r--src/qdoc/examplenode.h67
-rw-r--r--src/qdoc/externalpagenode.cpp53
-rw-r--r--src/qdoc/externalpagenode.h51
-rw-r--r--src/qdoc/functionnode.cpp613
-rw-r--r--src/qdoc/functionnode.h213
-rw-r--r--src/qdoc/generator.cpp2231
-rw-r--r--src/qdoc/generator.h229
-rw-r--r--src/qdoc/headernode.cpp71
-rw-r--r--src/qdoc/headernode.h72
-rw-r--r--src/qdoc/helpprojectwriter.cpp833
-rw-r--r--src/qdoc/helpprojectwriter.h107
-rw-r--r--src/qdoc/htmlgenerator.cpp3664
-rw-r--r--src/qdoc/htmlgenerator.h205
-rw-r--r--src/qdoc/importrec.h61
-rw-r--r--src/qdoc/jscodemarker.cpp149
-rw-r--r--src/qdoc/jscodemarker.h60
-rw-r--r--src/qdoc/location.cpp456
-rw-r--r--src/qdoc/location.h122
-rw-r--r--src/qdoc/loggingcategory.h40
-rw-r--r--src/qdoc/macro.h52
-rw-r--r--src/qdoc/main.cpp628
-rw-r--r--src/qdoc/manifestwriter.cpp328
-rw-r--r--src/qdoc/manifestwriter.h67
-rw-r--r--src/qdoc/namespacenode.cpp237
-rw-r--r--src/qdoc/namespacenode.h75
-rw-r--r--src/qdoc/node.cpp1813
-rw-r--r--src/qdoc/node.h395
-rw-r--r--src/qdoc/openedlist.cpp213
-rw-r--r--src/qdoc/openedlist.h77
-rw-r--r--src/qdoc/pagenode.cpp164
-rw-r--r--src/qdoc/pagenode.h90
-rw-r--r--src/qdoc/parameters.cpp567
-rw-r--r--src/qdoc/parameters.h137
-rw-r--r--src/qdoc/propertynode.cpp142
-rw-r--r--src/qdoc/propertynode.h137
-rw-r--r--src/qdoc/proxynode.cpp79
-rw-r--r--src/qdoc/proxynode.h48
-rw-r--r--src/qdoc/puredocparser.cpp128
-rw-r--r--src/qdoc/puredocparser.h55
-rw-r--r--src/qdoc/qdoc.pro212
-rw-r--r--src/qdoc/qdoc/CMakeLists.txt117
-rw-r--r--src/qdoc/qdoc/doc/config/qdoc.qdocconf61
-rw-r--r--src/qdoc/qdoc/doc/corefeatures.qdoc11
-rw-r--r--src/qdoc/qdoc/doc/examples/cpp.qdoc.sample102
-rw-r--r--src/qdoc/qdoc/doc/examples/layoutmanagement.qdocinc (renamed from src/qdoc/doc/examples/layoutmanagement.qdocinc)0
-rw-r--r--src/qdoc/qdoc/doc/examples/main.cpp16
-rw-r--r--src/qdoc/qdoc/doc/examples/mainwindow.cpp213
-rw-r--r--src/qdoc/qdoc/doc/examples/minimum.qdocconf46
-rw-r--r--src/qdoc/qdoc/doc/examples/objectmodel.qdocinc (renamed from src/qdoc/doc/examples/objectmodel.qdocinc)0
-rw-r--r--src/qdoc/qdoc/doc/examples/qml.qdoc.sample90
-rw-r--r--src/qdoc/qdoc/doc/examples/samples.qdocinc85
-rw-r--r--src/qdoc/qdoc/doc/examples/signalandslots.qdocinc (renamed from src/qdoc/doc/examples/signalandslots.qdocinc)0
-rw-r--r--src/qdoc/qdoc/doc/files/basicqt.qdoc.sample (renamed from src/qdoc/doc/files/basicqt.qdoc.sample)0
-rw-r--r--src/qdoc/qdoc/doc/files/compat.qdocconf10
-rw-r--r--src/qdoc/qdoc/doc/files/qtgui.qdocconf45
-rw-r--r--src/qdoc/qdoc/doc/images/happyguy.jpg (renamed from src/qdoc/doc/images/happyguy.jpg)bin53442 -> 53442 bytes
-rw-r--r--src/qdoc/qdoc/doc/images/link-to-qquickitem.png (renamed from src/qdoc/doc/images/link-to-qquickitem.png)bin46571 -> 46571 bytes
-rw-r--r--src/qdoc/qdoc/doc/images/links-to-broken-links.png (renamed from src/qdoc/doc/images/links-to-broken-links.png)bin16569 -> 16569 bytes
-rw-r--r--src/qdoc/qdoc/doc/images/links-to-links.png (renamed from src/qdoc/doc/images/links-to-links.png)bin10042 -> 10042 bytes
-rw-r--r--src/qdoc/qdoc/doc/images/qt-logo.pngbin0 -> 1008 bytes
-rw-r--r--src/qdoc/qdoc/doc/images/training.jpg (renamed from src/qdoc/doc/images/training.jpg)bin8368 -> 8368 bytes
-rw-r--r--src/qdoc/qdoc/doc/images/windows-pushbutton.pngbin0 -> 722 bytes
-rw-r--r--src/qdoc/qdoc/doc/images/windows-toolbutton.pngbin0 -> 771 bytes
-rw-r--r--src/qdoc/qdoc/doc/qdoc-guide/qdoc-guide.qdoc670
-rw-r--r--src/qdoc/qdoc/doc/qdoc-guide/qtwritingstyle-cpp.qdoc163
-rw-r--r--src/qdoc/qdoc/doc/qdoc-guide/qtwritingstyle-qml.qdoc142
-rw-r--r--src/qdoc/qdoc/doc/qdoc-manual-cmdindex.qdoc141
-rw-r--r--src/qdoc/qdoc/doc/qdoc-manual-contextcmds.qdoc1002
-rw-r--r--src/qdoc/qdoc/doc/qdoc-manual-intro.qdoc299
-rw-r--r--src/qdoc/qdoc/doc/qdoc-manual-macros.qdoc470
-rw-r--r--src/qdoc/qdoc/doc/qdoc-manual-markupcmds.qdoc3134
-rw-r--r--src/qdoc/qdoc/doc/qdoc-manual-qdocconf.qdoc1976
-rw-r--r--src/qdoc/qdoc/doc/qdoc-manual-topiccmds.qdoc1035
-rw-r--r--src/qdoc/qdoc/doc/qdoc-manual.qdoc59
-rw-r--r--src/qdoc/qdoc/doc/qdoc-warnings.qdoc839
-rw-r--r--src/qdoc/qdoc/doc/qtgui-qdocconf.qdoc260
-rw-r--r--src/qdoc/qdoc/src/qdoc/access.h15
-rw-r--r--src/qdoc/qdoc/src/qdoc/aggregate.cpp762
-rw-r--r--src/qdoc/qdoc/src/qdoc/aggregate.h118
-rw-r--r--src/qdoc/qdoc/src/qdoc/atom.cpp432
-rw-r--r--src/qdoc/qdoc/src/qdoc/atom.h220
-rw-r--r--src/qdoc/qdoc/src/qdoc/boundaries/filesystem/directorypath.cpp126
-rw-r--r--src/qdoc/qdoc/src/qdoc/boundaries/filesystem/directorypath.h17
-rw-r--r--src/qdoc/qdoc/src/qdoc/boundaries/filesystem/filepath.cpp125
-rw-r--r--src/qdoc/qdoc/src/qdoc/boundaries/filesystem/filepath.h17
-rw-r--r--src/qdoc/qdoc/src/qdoc/boundaries/filesystem/resolvedfile.cpp96
-rw-r--r--src/qdoc/qdoc/src/qdoc/boundaries/filesystem/resolvedfile.h20
-rw-r--r--src/qdoc/qdoc/src/qdoc/boundaries/refined_typedef.h207
-rw-r--r--src/qdoc/qdoc/src/qdoc/boundaries/refined_typedef_members.qdocinc162
-rw-r--r--src/qdoc/qdoc/src/qdoc/clang/AST/LLVM_LICENSE.txt279
-rw-r--r--src/qdoc/qdoc/src/qdoc/clang/AST/QualTypeNames.h491
-rw-r--r--src/qdoc/qdoc/src/qdoc/clang/AST/qt_attribution.json20
-rw-r--r--src/qdoc/qdoc/src/qdoc/clangcodeparser.cpp1904
-rw-r--r--src/qdoc/qdoc/src/qdoc/clangcodeparser.h94
-rw-r--r--src/qdoc/qdoc/src/qdoc/classnode.cpp291
-rw-r--r--src/qdoc/qdoc/src/qdoc/classnode.h68
-rw-r--r--src/qdoc/qdoc/src/qdoc/codechunk.cpp104
-rw-r--r--src/qdoc/qdoc/src/qdoc/codechunk.h74
-rw-r--r--src/qdoc/qdoc/src/qdoc/codemarker.cpp448
-rw-r--r--src/qdoc/qdoc/src/qdoc/codemarker.h67
-rw-r--r--src/qdoc/qdoc/src/qdoc/codeparser.cpp139
-rw-r--r--src/qdoc/qdoc/src/qdoc/codeparser.h141
-rw-r--r--src/qdoc/qdoc/src/qdoc/collectionnode.cpp104
-rw-r--r--src/qdoc/qdoc/src/qdoc/collectionnode.h126
-rw-r--r--src/qdoc/qdoc/src/qdoc/comparisoncategory.cpp28
-rw-r--r--src/qdoc/qdoc/src/qdoc/comparisoncategory.h54
-rw-r--r--src/qdoc/qdoc/src/qdoc/config.cpp1438
-rw-r--r--src/qdoc/qdoc/src/qdoc/config.h407
-rw-r--r--src/qdoc/qdoc/src/qdoc/cppcodemarker.cpp594
-rw-r--r--src/qdoc/qdoc/src/qdoc/cppcodemarker.h35
-rw-r--r--src/qdoc/qdoc/src/qdoc/cppcodeparser.cpp997
-rw-r--r--src/qdoc/qdoc/src/qdoc/cppcodeparser.h110
-rw-r--r--src/qdoc/qdoc/src/qdoc/doc.cpp420
-rw-r--r--src/qdoc/qdoc/src/qdoc/doc.h92
-rw-r--r--src/qdoc/qdoc/src/qdoc/docbookgenerator.cpp4750
-rw-r--r--src/qdoc/qdoc/src/qdoc/docbookgenerator.h168
-rw-r--r--src/qdoc/qdoc/src/qdoc/docparser.cpp2798
-rw-r--r--src/qdoc/qdoc/src/qdoc/docparser.h169
-rw-r--r--src/qdoc/qdoc/src/qdoc/docprivate.cpp30
-rw-r--r--src/qdoc/qdoc/src/qdoc/docprivate.h76
-rw-r--r--src/qdoc/qdoc/src/qdoc/docutilities.h28
-rw-r--r--src/qdoc/qdoc/src/qdoc/editdistance.cpp68
-rw-r--r--src/qdoc/qdoc/src/qdoc/editdistance.h17
-rw-r--r--src/qdoc/qdoc/src/qdoc/enumitem.h36
-rw-r--r--src/qdoc/qdoc/src/qdoc/enumnode.cpp82
-rw-r--r--src/qdoc/qdoc/src/qdoc/enumnode.h49
-rw-r--r--src/qdoc/qdoc/src/qdoc/examplenode.h42
-rw-r--r--src/qdoc/qdoc/src/qdoc/externalpagenode.cpp28
-rw-r--r--src/qdoc/qdoc/src/qdoc/externalpagenode.h25
-rw-r--r--src/qdoc/qdoc/src/qdoc/filesystem/fileresolver.cpp161
-rw-r--r--src/qdoc/qdoc/src/qdoc/filesystem/fileresolver.h24
-rw-r--r--src/qdoc/qdoc/src/qdoc/functionnode.cpp473
-rw-r--r--src/qdoc/qdoc/src/qdoc/functionnode.h202
-rw-r--r--src/qdoc/qdoc/src/qdoc/generator.cpp2182
-rw-r--r--src/qdoc/qdoc/src/qdoc/generator.h205
-rw-r--r--src/qdoc/qdoc/src/qdoc/headernode.cpp43
-rw-r--r--src/qdoc/qdoc/src/qdoc/headernode.h46
-rw-r--r--src/qdoc/qdoc/src/qdoc/helpprojectwriter.cpp769
-rw-r--r--src/qdoc/qdoc/src/qdoc/helpprojectwriter.h106
-rw-r--r--src/qdoc/qdoc/src/qdoc/htmlgenerator.cpp3699
-rw-r--r--src/qdoc/qdoc/src/qdoc/htmlgenerator.h177
-rw-r--r--src/qdoc/qdoc/src/qdoc/importrec.h33
-rw-r--r--src/qdoc/qdoc/src/qdoc/location.cpp423
-rw-r--r--src/qdoc/qdoc/src/qdoc/location.h92
-rw-r--r--src/qdoc/qdoc/src/qdoc/macro.h27
-rw-r--r--src/qdoc/qdoc/src/qdoc/main.cpp720
-rw-r--r--src/qdoc/qdoc/src/qdoc/manifestwriter.cpp405
-rw-r--r--src/qdoc/qdoc/src/qdoc/manifestwriter.h46
-rw-r--r--src/qdoc/qdoc/src/qdoc/namespacenode.cpp190
-rw-r--r--src/qdoc/qdoc/src/qdoc/namespacenode.h48
-rw-r--r--src/qdoc/qdoc/src/qdoc/node.cpp1383
-rw-r--r--src/qdoc/qdoc/src/qdoc/node.h343
-rw-r--r--src/qdoc/qdoc/src/qdoc/openedlist.cpp172
-rw-r--r--src/qdoc/qdoc/src/qdoc/openedlist.h47
-rw-r--r--src/qdoc/qdoc/src/qdoc/pagenode.cpp117
-rw-r--r--src/qdoc/qdoc/src/qdoc/pagenode.h82
-rw-r--r--src/qdoc/qdoc/src/qdoc/parameters.cpp542
-rw-r--r--src/qdoc/qdoc/src/qdoc/parameters.h113
-rw-r--r--src/qdoc/qdoc/src/qdoc/parsererror.cpp90
-rw-r--r--src/qdoc/qdoc/src/qdoc/parsererror.h26
-rw-r--r--src/qdoc/qdoc/src/qdoc/propertynode.cpp135
-rw-r--r--src/qdoc/qdoc/src/qdoc/propertynode.h93
-rw-r--r--src/qdoc/qdoc/src/qdoc/proxynode.cpp54
-rw-r--r--src/qdoc/qdoc/src/qdoc/proxynode.h23
-rw-r--r--src/qdoc/qdoc/src/qdoc/puredocparser.cpp74
-rw-r--r--src/qdoc/qdoc/src/qdoc/puredocparser.h31
-rw-r--r--src/qdoc/qdoc/src/qdoc/qdoccommandlineparser.cpp177
-rw-r--r--src/qdoc/qdoc/src/qdoc/qdoccommandlineparser.h28
-rw-r--r--src/qdoc/qdoc/src/qdoc/qdocdatabase.cpp1685
-rw-r--r--src/qdoc/qdoc/src/qdoc/qdocdatabase.h395
-rw-r--r--src/qdoc/qdoc/src/qdoc/qdocindexfiles.cpp1456
-rw-r--r--src/qdoc/qdoc/src/qdoc/qdocindexfiles.h72
-rw-r--r--src/qdoc/qdoc/src/qdoc/qmlcodemarker.cpp175
-rw-r--r--src/qdoc/qdoc/src/qdoc/qmlcodemarker.h38
-rw-r--r--src/qdoc/qdoc/src/qdoc/qmlcodeparser.cpp143
-rw-r--r--src/qdoc/qdoc/src/qdoc/qmlcodeparser.h38
-rw-r--r--src/qdoc/qdoc/src/qdoc/qmlmarkupvisitor.cpp794
-rw-r--r--src/qdoc/qdoc/src/qdoc/qmlmarkupvisitor.h139
-rw-r--r--src/qdoc/qdoc/src/qdoc/qmlpropertynode.cpp175
-rw-r--r--src/qdoc/qdoc/src/qdoc/qmlpropertynode.h72
-rw-r--r--src/qdoc/qdoc/src/qdoc/qmltypenode.cpp153
-rw-r--r--src/qdoc/qdoc/src/qdoc/qmltypenode.h65
-rw-r--r--src/qdoc/qdoc/src/qdoc/qmlvisitor.cpp729
-rw-r--r--src/qdoc/qdoc/src/qdoc/qmlvisitor.h93
-rw-r--r--src/qdoc/qdoc/src/qdoc/quoter.cpp338
-rw-r--r--src/qdoc/qdoc/src/qdoc/quoter.h45
-rw-r--r--src/qdoc/qdoc/src/qdoc/relatedclass.cpp46
-rw-r--r--src/qdoc/qdoc/src/qdoc/relatedclass.h34
-rw-r--r--src/qdoc/qdoc/src/qdoc/sections.cpp992
-rw-r--r--src/qdoc/qdoc/src/qdoc/sections.h206
-rw-r--r--src/qdoc/qdoc/src/qdoc/sharedcommentnode.cpp56
-rw-r--r--src/qdoc/qdoc/src/qdoc/sharedcommentnode.h51
-rw-r--r--src/qdoc/qdoc/src/qdoc/singleton.h32
-rw-r--r--src/qdoc/qdoc/src/qdoc/sourcefileparser.h82
-rw-r--r--src/qdoc/qdoc/src/qdoc/tagfilewriter.cpp306
-rw-r--r--src/qdoc/qdoc/src/qdoc/tagfilewriter.h33
-rw-r--r--src/qdoc/qdoc/src/qdoc/template_declaration.h502
-rw-r--r--src/qdoc/qdoc/src/qdoc/text.cpp341
-rw-r--r--src/qdoc/qdoc/src/qdoc/text.h87
-rw-r--r--src/qdoc/qdoc/src/qdoc/tokenizer.cpp788
-rw-r--r--src/qdoc/qdoc/src/qdoc/tokenizer.h179
-rw-r--r--src/qdoc/qdoc/src/qdoc/topic.h29
-rw-r--r--src/qdoc/qdoc/src/qdoc/tree.cpp1363
-rw-r--r--src/qdoc/qdoc/src/qdoc/tree.h183
-rw-r--r--src/qdoc/qdoc/src/qdoc/typedefnode.cpp55
-rw-r--r--src/qdoc/qdoc/src/qdoc/typedefnode.h54
-rw-r--r--src/qdoc/qdoc/src/qdoc/utilities.cpp254
-rw-r--r--src/qdoc/qdoc/src/qdoc/utilities.h28
-rw-r--r--src/qdoc/qdoc/src/qdoc/variablenode.cpp23
-rw-r--r--src/qdoc/qdoc/src/qdoc/variablenode.h44
-rw-r--r--src/qdoc/qdoc/src/qdoc/webxmlgenerator.cpp901
-rw-r--r--src/qdoc/qdoc/src/qdoc/webxmlgenerator.h60
-rw-r--r--src/qdoc/qdoc/src/qdoc/xmlgenerator.cpp487
-rw-r--r--src/qdoc/qdoc/src/qdoc/xmlgenerator.h54
-rw-r--r--src/qdoc/qdoc/tests/CMakeLists.txt6
-rw-r--r--src/qdoc/qdoc/tests/config/CMakeLists.txt24
-rw-r--r--src/qdoc/qdoc/tests/config/testdata/configs/exampletest.qdocconf (renamed from tests/auto/qdoc/config/testdata/configs/exampletest.qdocconf)0
-rw-r--r--src/qdoc/qdoc/tests/config/testdata/configs/expandvars.qdocconf (renamed from tests/auto/qdoc/config/testdata/configs/expandvars.qdocconf)0
-rw-r--r--src/qdoc/qdoc/tests/config/testdata/configs/includepaths.qdocconf2
-rw-r--r--src/qdoc/qdoc/tests/config/testdata/configs/includes/test.qdoc (renamed from tests/auto/qdoc/config/testdata/configs/includes/test.qdoc)0
-rw-r--r--src/qdoc/qdoc/tests/config/testdata/configs/paths.qdocconf (renamed from tests/auto/qdoc/config/testdata/configs/paths.qdocconf)0
-rw-r--r--src/qdoc/qdoc/tests/config/testdata/configs/vars.qdocconf (renamed from tests/auto/qdoc/config/testdata/configs/vars.qdocconf)0
-rw-r--r--src/qdoc/qdoc/tests/config/testdata/exampletest/examples/test/empty/test.pro (renamed from tests/auto/qdoc/config/testdata/exampletest/examples/test/empty/test.pro)0
-rw-r--r--src/qdoc/qdoc/tests/config/testdata/exampletest/examples/test/example1/example1.pro (renamed from tests/auto/qdoc/config/testdata/exampletest/examples/test/example1/example1.pro)0
-rw-r--r--src/qdoc/qdoc/tests/config/testdata/exampletest/examples/test/example2/example2.qmlproject (renamed from tests/auto/qdoc/config/testdata/exampletest/examples/test/example2/example2.qmlproject)0
-rw-r--r--src/qdoc/qdoc/tests/config/testdata/exampletest/examples/test/example3/example3.pyproject (renamed from tests/auto/qdoc/config/testdata/exampletest/examples/test/example3/example3.pyproject)0
-rw-r--r--src/qdoc/qdoc/tests/config/testdata/exampletest/examples/test/example4/CMakeLists.txt (renamed from tests/auto/qdoc/config/testdata/exampletest/examples/test/example4/CMakeLists.txt)0
-rw-r--r--src/qdoc/qdoc/tests/config/testdata/exampletest/examples/test/example4/example4.pro (renamed from tests/auto/qdoc/config/testdata/exampletest/examples/test/example4/example4.pro)0
-rw-r--r--src/qdoc/qdoc/tests/config/testdata/includepaths/include/framework/ignore.h1
-rw-r--r--src/qdoc/qdoc/tests/config/testdata/includepaths/include/more/ignore.h1
-rw-r--r--src/qdoc/qdoc/tests/config/testdata/includepaths/include/purpose.h1
-rw-r--r--src/qdoc/qdoc/tests/config/testdata/includepaths/include/system/ignore.h1
-rw-r--r--src/qdoc/qdoc/tests/config/testdata/includepaths/includepaths.qdocconf16
-rw-r--r--src/qdoc/qdoc/tests/config/testdata/paths/includes/test.qdoc (renamed from tests/auto/qdoc/config/testdata/paths/includes/test.qdoc)0
-rw-r--r--src/qdoc/qdoc/tests/config/testdata/paths/paths.qdocconf (renamed from tests/auto/qdoc/config/testdata/paths/paths.qdocconf)0
-rw-r--r--src/qdoc/qdoc/tests/config/tst_config.cpp180
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/CMakeLists.txt46
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/autolinking.html36
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/cpptypes.html25
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/crossmodule/all-namespaces.html20
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/crossmodule/testtype-members.html37
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/crossmodule/testtype.html67
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/crossmoduleref-sub-crossmodule.html30
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/testtype-members.html37
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/testtype.html67
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/includefromexampledirs/index.html27
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent-members.html20
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent.html68
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/index-linking.html37
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist-docbook/qdoc-test-qmlmodule.xml16
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist-docbook/test-componentset-example.xml37
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist-docbook/testcpp-module.xml49
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist/qdoc-test-qmlmodule.html19
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist/test-componentset-example.html47
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist/testcpp-module.html45
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/obsolete-classes.html32
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/qml-linkmodule-grandchild-members.html26
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/qmlpropertygroups-docbook/qml-qdoc-test-parent.xml45
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-anotherchild-members.html28
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-parent.html61
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp-module.html57
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp.index79
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/crossmoduleref.html48
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testcpp-module.html57
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testqdoc-test-members.html30
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testqdoc-test.html162
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testqdoc.html64
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-test-members.html30
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-test-obsolete.html45
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-test.html162
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-testderived-members.html33
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-testderived-obsolete.html26
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-testderived.html81
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc.html64
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/configs/noautolist.qdocconf64
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/configs/testcpp.qdocconf31
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/configs/testcpp_singleexec.qdocconf32
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/CrossModule (renamed from tests/auto/qdoc/generatedoutput/testdata/crossmodule/CrossModule)0
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/crossmodule.qdocconf26
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/crossmodule_singleexec.qdocconf6
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/namespaces.qdoc9
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/testtype.cpp45
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/testtype.h16
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/dontdocument/TestCPP (renamed from tests/auto/qdoc/generatedoutput/testdata/dontdocument/TestCPP)0
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/dontdocument/dontdocument.qdocconf46
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/demo/demo.cpp11
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/demo/demo.pro (renamed from tests/auto/qdoc/generatedoutput/testdata/examples/demos/demo/demo.pro)0
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/demo/doc/src/demo.qdoc11
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/demo/dontxclude/CMakeLists.txt2
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/demo/excludes/CMakeLists.txt2
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/hidden/doc/src/hidden.qdoc11
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/hidden/hidden.pro2
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/images/01.pngbin0 -> 1142 bytes
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/images/leonardo-da-vinci.png (renamed from tests/auto/qdoc/generatedoutput/testdata/images/leonardo-da-vinci.png)bin15076 -> 15076 bytes
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/includefromexampledirs/excludes/anotherindex.qdoc14
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/includefromexampledirs/excludes/parentinclude.qdoc28
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/includefromexampledirs/includefromexampledirs.qdocconf64
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/includefromexampledirs/src/includefromparent.qdoc41
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/includefromexampledirs/src/parent.qdocinc (renamed from tests/auto/qdoc/generatedoutput/testdata/includefromexampledirs/src/parent.qdocinc)0
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/indexlinking/indexlinking.qdocconf29
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/indexlinking/linking.qdoc41
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/qml/DocTest.qml86
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/qml/cmaketest/CMakeLists.txt2
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/qml/cmaketest/doc/src/cmaketest.qdoc9
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/qml/cmaketest/main.cpp (renamed from tests/auto/qdoc/generatedoutput/testdata/qml/cmaketest/main.cpp)0
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/ProgressBar.qml98
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/Switch.qml105
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/TabWidget.qml146
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/componentset.pro (renamed from tests/auto/qdoc/generatedoutput/testdata/qml/componentset/componentset.pro)0
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/componentset.qml7
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/examples.qdoc82
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/uicomponents.qdoc.sample14
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/qml/doctest/DocTest.qml11
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/qml/modules.qdoc19
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/qml/parent.qdoc87
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/qml/type.cpp127
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/qmlpropertygroups/parent.qdoc37
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/qmlpropertygroups/qmlpropertygroups.qdocconf63
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/singleexec/singleexec.qdocconf4
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/TestCPP (renamed from tests/auto/qdoc/generatedoutput/testdata/testcpp/TestCPP)0
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/classlists.qdoc51
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/properties.qdoc55
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/snippets/snippet_testcpp.cpp3
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/testcpp.cpp418
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/testcpp.h137
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/tst_generatedoutput.cpp283
-rw-r--r--src/qdoc/qdoc/tests/qdoc/CMakeLists.txt28
-rw-r--r--src/qdoc/qdoc/tests/qdoc/boundaries/filesystem/catch_directorypath.cpp195
-rw-r--r--src/qdoc/qdoc/tests/qdoc/boundaries/filesystem/catch_filepath.cpp136
-rw-r--r--src/qdoc/qdoc/tests/qdoc/filesystem/catch_fileresolver.cpp307
-rw-r--r--src/qdoc/qdoc/tests/qdoc/main.cpp12
-rw-r--r--src/qdoc/qdoc/tests/qdoccommandlineparser/CMakeLists.txt41
-rw-r--r--src/qdoc/qdoc/tests/qdoccommandlineparser/tst_arguments.txt (renamed from tests/auto/qdoc/qdoccommandlineparser/tst_arguments.txt)0
-rw-r--r--src/qdoc/qdoc/tests/qdoccommandlineparser/tst_qdoccommandlineparser.cpp161
-rw-r--r--src/qdoc/qdoc/tests/utilities/CMakeLists.txt21
-rw-r--r--src/qdoc/qdoc/tests/utilities/tst_utilities.cpp134
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/CMakeLists.txt44
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/README.md82
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/bug80259.qdocconf31
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/first-members.html17
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/first-nested.html27
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/first.html37
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/index.html21
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/second.html29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/testmodule.index13
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/third.html29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/first-nested.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/first.webxml15
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/index.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/second.webxml (renamed from tests/auto/qdoc/generatedoutput/expected_output/html/second.webxml)0
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/testmodule.index13
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/third.webxml (renamed from tests/auto/qdoc/generatedoutput/expected_output/html/third.webxml)0
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/inc/testmodule/TestModule.h6
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/inc/testmodule/aaa.h7
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/inc/testmodule/bbb.h8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/inc/testmodule/ccc.h7
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/main.cpp29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/qdoc/index.qdoc10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/cmakedocumentation.qdocconf29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/docbook/car.xml42
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/docbook/engine.xml42
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/docbook/testcar-module.xml23
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/docbook/testcarprivate-module.xml23
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/html/car.html36
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/html/cmakedocumentation.index15
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/html/engine.html36
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/html/testcar-module.html29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/html/testcarprivate-module.html29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/webxml/car.webxml15
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/webxml/cmakedocumentation.index15
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/webxml/engine.webxml20
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/webxml/testcar-module.webxml (renamed from tests/auto/qdoc/generatedoutput/expected_output/html/testcpp-module.webxml)0
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/webxml/testcarprivate-module.webxml (renamed from tests/auto/qdoc/generatedoutput/expected_output/html/uicomponents-qmlmodule.webxml)0
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/src/car.cpp46
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/src/car.h17
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/comprehensiveproject.qdocconf105
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/autolinking.xml32
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/classes.xml30
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/cpptypes.xml33
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/crossmoduleref.xml59
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/images/leonardo-da-vinci.pngbin0 -> 15076 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/obsolete-classes.xml31
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qdoc-test-qmlmodule.xml54
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-int.xml36
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-abstractparent.xml79
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-child.xml79
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-doctest.xml117
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-oldtype.xml37
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-type.xml237
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-yetanotherchild.xml44
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-test-nover-doctest.xml35
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-test-nover-typenoversion.xml35
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-themodule-thetype.xml43
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-uicomponents-progressbar.xml104
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-uicomponents-switch.xml47
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-uicomponents-tabwidget.xml77
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qmlmodules.xml103
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/seenclass.xml42
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-cmaketest-cmakelists-txt.xml14
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-cmaketest-example.xml27
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-cmaketest-main-cpp.xml13
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-componentset-pro.xml18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-componentset-qml.xml20
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-example.xml55
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-progressbar-qml.xml111
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-switch-qml.xml116
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-tabwidget-qml.xml158
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-demos-demo-demo-cpp.xml21
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-demos-demo-demo-pro.xml14
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-demos-demo-dontxclude-cmakelists-txt.xml14
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-demos-demo-example.xml32
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-demos-hidden-example.xml12
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-empty-qmlmodule.xml12
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-nover-qmlmodule.xml30
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testcpp-module.xml91
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testqdoc-test.xml384
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testqdoc-testderived.xml314
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testqdoc.xml73
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/themodule-qmlmodule.xml16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/uicomponents-qmlmodule.xml34
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/autolinking.html36
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/classes.html21
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/cpptypes.html25
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/crossmoduleref.html47
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/images/leonardo-da-vinci.pngbin0 -> 15076 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/obsolete-classes.html32
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qdoc-test-qmlmodule.html27
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-int.html45
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-abstractparent-members.html23
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-abstractparent.html98
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-child-members.html23
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-child.html98
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-doctest-members.html25
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-doctest.html139
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-oldtype-members.html16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-oldtype.html33
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-type-members.html37
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-type-obsolete.html33
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-type.html209
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-yetanotherchild-members.html19
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-yetanotherchild.html48
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-test-nover-doctest-members.html17
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-test-nover-doctest.html33
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-test-nover-typenoversion-members.html17
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-test-nover-typenoversion.html33
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-themodule-thetype-members.html19
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-themodule-thetype.html45
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-progressbar-members.html24
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-progressbar.html98
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-switch-members.html21
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-switch.html68
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-tabwidget-members.html21
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-tabwidget.html84
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qmlmodules.html49
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/seenclass.html37
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-cmaketest-cmakelists-txt.html11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-cmaketest-example.html21
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-cmaketest-main-cpp.html10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-componentset-pro.html15
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-componentset-qml.html17
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-example.html55
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-progressbar-qml.html108
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-switch-qml.html113
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-tabwidget-qml.html155
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-demos-demo-demo-cpp.html18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-demos-demo-demo-pro.html11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-demos-demo-dontxclude-cmakelists-txt.html11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-demos-demo-example.html24
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-demos-hidden-example.html21
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-empty-qmlmodule.html17
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-nover-qmlmodule.html23
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test.index238
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test.qhp260
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testcpp-module.html60
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-test-members.html30
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-test-obsolete.html45
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-test.html165
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-testderived-members.html50
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-testderived-obsolete.html26
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-testderived.html173
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc.html65
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testtagfile.tags500
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/themodule-qmlmodule.html18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/uicomponents-qmlmodule.html24
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/autolinking.webxml36
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/classes.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/cpptypes.webxml22
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/crossmoduleref.webxml15
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/images/leonardo-da-vinci.pngbin0 -> 15076 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/obsolete-classes.webxml18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/qdoc-test-qmlmodule.webxml4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/qmlmodules.webxml21
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/seenclass.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-cmaketest-cmakelists-txt.webxml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-cmaketest-example.webxml23
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-cmaketest-main-cpp.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-componentset-pro.webxml14
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-componentset-qml.webxml16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-example.webxml67
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-progressbar-qml.webxml107
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-switch-qml.webxml112
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-tabwidget-qml.webxml154
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-demos-demo-demo-cpp.webxml18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-demos-demo-demo-pro.webxml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-demos-demo-dontxclude-cmakelists-txt.webxml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-demos-demo-example.webxml30
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-demos-hidden-example.webxml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-empty-qmlmodule.webxml4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-nover-qmlmodule.webxml4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test.index226
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testcpp-module.webxml4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testqdoc-test.webxml121
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testqdoc-testderived.webxml124
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testqdoc.webxml253
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testtagfile.tags500
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/themodule-qmlmodule.webxml4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/uicomponents-qmlmodule.webxml4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/TestCPP5
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/classlists.qdoc51
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/dont.cpp22
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/dont.h16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/demo/demo.cpp11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/demo/demo.pro2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/demo/doc/src/demo.qdoc11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/demo/dontxclude/CMakeLists.txt2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/demo/excludes/CMakeLists.txt2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/hidden/doc/src/hidden.qdoc11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/hidden/hidden.pro2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/images/01.pngbin0 -> 1142 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/images/leonardo-da-vinci.pngbin0 -> 15076 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/properties.qdoc55
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/DocTest.qml86
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/cmaketest/CMakeLists.txt2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/cmaketest/doc/src/cmaketest.qdoc9
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/cmaketest/main.cpp1
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/ProgressBar.qml98
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/Switch.qml105
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/TabWidget.qml146
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/componentset.pro5
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/componentset.qml7
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/examples.qdoc82
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/uicomponents.qdoc.sample14
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/doctest/DocTest.qml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/modules.qdoc19
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/parent.qdoc87
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/type.cpp133
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/snippets/snippet_testcpp.cpp3
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/testcpp.cpp418
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/testcpp.h137
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/unseenclass.qdoc11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/cxx20.qdocconf32
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/bar.xml21
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/baz.xml21
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/comparesstronglywithoneclassandpartiallywithanother.xml27
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/comparesstronglywiththreeclasses.xml22
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/comparesstronglywiththreeclassesacrossmultiplelines.xml22
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/comparesstronglywithtwoclasses.xml26
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/equalitycomparableclass.xml22
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/foo.xml21
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/partiallyorderedclass.xml22
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/stronglyorderedclass.xml22
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/weaklyorderedclass.xml22
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/bar.html28
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/baz.html28
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/comparesstronglywithoneclassandpartiallywithanother.html37
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/comparesstronglywiththreeclasses.html29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/comparesstronglywiththreeclassesacrossmultiplelines.html29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/comparesstronglywithtwoclasses.html33
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/cxx20.index18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/equalitycomparableclass.html29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/foo.html28
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/partiallyorderedclass.html29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/stronglyorderedclass.html29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/weaklyorderedclass.html29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/bar.webxml8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/baz.webxml8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/comparesstronglywithoneclassandpartiallywithanother.webxml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/comparesstronglywiththreeclasses.webxml8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/comparesstronglywiththreeclassesacrossmultiplelines.webxml8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/comparesstronglywithtwoclasses.webxml8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/cxx20.index18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/equalitycomparableclass.webxml8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/foo.webxml8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/partiallyorderedclass.webxml8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/stronglyorderedclass.webxml8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/weaklyorderedclass.webxml8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/src/classes_with_various_ordering.cpp89
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/src/classes_with_various_ordering.h41
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/duplicate_section_titles_have_unique_anchors.qdocconf25
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/expected/docbook/page-one.xml27
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/expected/html/duplicate-section-titles-have-unique-anchors.index12
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/expected/html/page-one.html35
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/expected/webxml/duplicate-section-titles-have-unique-anchors.index12
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/expected/webxml/page-one.webxml30
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/src/page_one.qdoc21
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/expected/html/globals.html45
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/expected/html/testglobals-module.html29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/expected/html/testglobals.index23
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/globalfunc.qdocconf23
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/src/TestGlobals1
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/src/global.h8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/src/global.qdoc25
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/docbook/headers.xml (renamed from tests/auto/qdoc/generatedoutput/expected_output/headerfile-docbook/headers.xml)0
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/docbook/testheader.xml68
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/docbook/tests.xml19
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/html/headerfile.index23
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/html/headers.html19
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/html/testheader.html69
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/html/tests.html19
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/webxml/headerfile.index23
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/webxml/headers.webxml21
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/webxml/testheader.webxml34
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/webxml/tests.webxml21
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/headerfile.qdocconf25
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/src/testheader.cpp43
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/src/testheader.h8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/another-page-with-comments-in-the-brief.html18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/brief-adventures.html27
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/illformatted-examples.html31
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/illformatteddocumentation-someexample-example.html16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/illformatteddocumentation.index22
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/page-with-an-image-at-the-top.html19
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/page-with-comment-after-brief.html18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/page-with-comment-in-brief.html18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/another-page-with-comments-in-the-brief.webxml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/brief-adventures.webxml17
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/illformatted-examples.webxml31
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/illformatteddocumentation-someexample-example.webxml8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/illformatteddocumentation.index22
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/page-with-an-image-at-the-top.webxml12
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/page-with-comment-after-brief.webxml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/page-with-comment-in-brief.webxml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/illformatted_documentation.qdocconf29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/src/brief_adventures.qdoc75
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/src/illformatted-examples.qdoc17
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/src/some_example.qdoc8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/docbook/a-page-with-a-line-comment-in-the-see-also-command.xml20
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/docbook/another-page-with-an-image-at-the-top.xml19
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/docbook/images/leonardo-da-vinci.pngbin0 -> 15076 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/docbook/line-comment-adventures.xml16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/a-page-with-a-line-comment-in-the-see-also-command.html18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/another-page-with-an-image-at-the-top.html19
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/images/leonardo-da-vinci.pngbin0 -> 15076 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/line-comment-adventures.html27
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/linecomment.index11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/webxml/a-page-with-a-line-comment-in-the-see-also-command.webxml14
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/webxml/another-page-with-an-image-at-the-top.webxml13
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/webxml/images/leonardo-da-vinci.pngbin0 -> 15076 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/webxml/line-comment-adventures.webxml16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/webxml/linecomment.index11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/line_comments.qdocconf27
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/src/images/leonardo-da-vinci.pngbin0 -> 15076 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/src/line_comment_adventures.qdoc39
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/minimal_configuration/expected/a-minimal-qdoc-configuration.index7
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/minimal_configuration/expected/readme.html17
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/minimal_configuration/minimal_configuration.qdocconf12
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/minimal_configuration/src/README.qdoc9
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/docbook/boringclass.xml28
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/docbook/excitingclass.xml32
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/docbook/moduleinstate-module.xml23
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/html/boringclass.html31
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/html/excitingclass.html34
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/html/moduleinstate-module.html30
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/html/modulestate.index11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/webxml/boringclass.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/webxml/excitingclass.webxml15
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/webxml/moduleinstate-module.webxml4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/webxml/modulestate.index11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/modulestate.qdocconf29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/src/classes_in_stateful_module.h15
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/src/module_in_a_state.qdoc26
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/8b5c72eb.html16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/adventures-with-non-ascii-characters.html46
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/e85685de.html16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/8b5c72eb.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/adventures-with-non-ascii-characters.webxml45
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/e85685de.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/mozzarella-7c883eff.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/nonasciicharacterinput.index19
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/santa-14209312.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/seite-mit-ausschlie-lich-gro-buchstaben-im-titel-berschrift-htm-bfa91582.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/mozzarella-7c883eff.html16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/nonasciicharacterinput.index19
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/santa-14209312.html16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/seite-mit-ausschlie-lich-gro-buchstaben-im-titel-berschrift-htm-bfa91582.html16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/non_ascii_character_input.qdocconf30
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/src/adventures_with_non_ascii_characters.qdoc89
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/crash.xml12
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/images/01.pngbin0 -> 1142 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/images/leonardo-da-vinci.pngbin0 -> 15076 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/qdoctests-qdocfileoutput-exhaustive.xml129
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/qdoctests-qdocfileoutput-linking.xml19
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/qdoctests-qdocfileoutput.xml80
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/qdoctests-qdocmanuallikefileoutput.xml27
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/toc.xml23
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/crash.html16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/images/01.pngbin0 -> 1142 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/images/leonardo-da-vinci.pngbin0 -> 15076 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/outputfromqdocfiles.index33
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/qdoctests-qdocfileoutput-exhaustive.html78
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/qdoctests-qdocfileoutput-linking.html37
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/qdoctests-qdocfileoutput.html70
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/qdoctests-qdocmanuallikefileoutput.html63
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/toc.html29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/crash.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/images/01.pngbin0 -> 1142 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/images/leonardo-da-vinci.pngbin0 -> 15076 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/outputfromqdocfiles.index33
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/qdoctests-qdocfileoutput-exhaustive.webxml90
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/qdoctests-qdocfileoutput-linking.webxml20
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/qdoctests-qdocfileoutput.webxml95
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/qdoctests-qdocmanuallikefileoutput.webxml57
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/toc.webxml24
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/outputfromqdocfiles.qdocconf43
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/src/images/01.pngbin0 -> 1142 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/src/images/leonardo-da-vinci.pngbin0 -> 15076 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/src/qdoctests-outputfromqdocfiles.qdoc241
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/src/qdoctests-outputfromqdocmanuallikefiles.qdoc59
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/src/snippets/main.cpp10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/expected/docbook/stdpair-proxypage-proxy.xml16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/expected/html/proxypage.index10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/expected/html/stdpair-proxypage-proxy.html20
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/proxypage.qdocconf24
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/src/proxy.h11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/src/proxy.qdoc9
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/docbook/class.xml136
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/docbook/module-module.xml18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/docbook/qml-qmlmodule-type.xml103
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/docbook/qmlmodule-qmlmodule.xml16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/class-members.html18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/class.html59
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/module-module.html28
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/qml-qmlmodule-type-members.html18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/qml-qmlmodule-type.html62
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/qmlenumvaluesfromcpp.index23
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/qmlmodule-qmlmodule.html18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/webxml/class.webxml54
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/webxml/module-module.webxml4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/webxml/qmlenumvaluesfromcpp.index23
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/webxml/qmlmodule-qmlmodule.webxml4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/qmlenumvaluesfromcpp.qdocconf22
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/src/class.cpp36
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/src/class.h10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/src/qmltype.qdoc23
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/a.cpp11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/a.h5
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/b.cpp12
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/expected/bar.html35
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/expected/module-module.html22
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/expected/relatesordering.index11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/relatesordering.qdocconf7
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/autolinking.xml32
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/cpptypes.xml33
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/crossmoduleref.xml49
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/obsolete-classes.xml31
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/scoped-enum-linking.xml12
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testcpp-module.xml83
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testqdoc-test.xml261
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testqdoc-testderived.xml83
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testqdoc.xml63
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/whatsnew.xml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/autolinking.html36
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/cpptypes.html25
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/crossmoduleref.html47
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/obsolete-classes.html32
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/scoped-enum-linking.html18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testcpp-module.html57
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testcpp.index95
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-test-members.html32
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-test-obsolete.html45
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-test.html183
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-testderived-members.html39
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-testderived-obsolete.html26
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-testderived.html81
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc.html64
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/whatsnew.html37
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/autolinking.webxml36
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/cpptypes.webxml22
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/crossmoduleref.webxml15
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/obsolete-classes.webxml18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/scoped-enum-linking.webxml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testcpp-module.webxml4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testcpp.index95
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testqdoc-test.webxml171
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testqdoc-testderived.webxml33
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testqdoc.webxml212
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/whatsnew.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/scopedenum.qdocconf37
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/classlists.qdoc51
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/scopedenum.qdoc43
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/snippets/snippet_testcpp.cpp3
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/testcpp.cpp418
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/testcpp.h137
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/docbok/tableaftervalue.xml60
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/html/tableaftervalue-members.html18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/html/tableaftervalue.html56
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/html/tableaftervalue.index13
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/webxml/tableaftervalue.index13
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/webxml/tableaftervalue.webxml35
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/src/table-after-value.cpp28
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/src/table-after-value.h8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/tableaftervalue.qdocconf29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/docbook/templated-callables-h.xml65
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/docbook/templatedclass.xml66
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/html/templated-callables-h.html81
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/html/templatedcallables.index77
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/html/templatedclass-members.html26
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/html/templatedclass.html90
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/webxml/templated-callables-h.webxml66
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/webxml/templatedcallables.index77
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/webxml/templatedclass.webxml66
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/src/templated_callables.cpp149
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/src/templated_callables.h73
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/templatedcallables.qdocconf29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/autolinking.xml32
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/bar.xml43
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/baz.xml42
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/cpptypes.xml33
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/crossmoduleref.xml49
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/foo.xml43
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/obsolete-classes.xml31
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testcpp-module.xml113
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc-test-struct.xml42
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc-test.xml197
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc-testderived.xml83
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc-vec.xml43
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc.xml67
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/autolinking.html36
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/bar.html38
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/baz.html38
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/cpptypes.html25
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/crossmoduleref.html47
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/foo.html38
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/obsolete-classes.html32
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testcpp-module.html62
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test-members.html33
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test-obsolete.html45
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test-struct.html32
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test.html177
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-testderived-members.html40
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-testderived-obsolete.html26
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-testderived.html81
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-vec.html38
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc.html68
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testtemplate.index91
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/autolinking.webxml36
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/bar.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/baz.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/cpptypes.webxml22
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/crossmoduleref.webxml15
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/foo.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/obsolete-classes.webxml18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testcpp-module.webxml4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc-test-struct.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc-test.webxml141
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc-testderived.webxml33
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc-vec.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc.webxml187
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testtemplate.index91
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/classlists.qdoc51
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/snippets/snippet_testcpp.cpp3
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testcpp.cpp418
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testcpp.h137
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testtemplate.cpp23
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testtemplate.h28
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/testtemplate.qdocconf38
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/crash.xml14
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/images/01.pngbin0 -> 1142 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/images/leonardo-da-vinci.pngbin0 -> 15076 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/qdoctests-qdocfileoutput-exhaustive.xml131
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/qdoctests-qdocfileoutput-linking.xml19
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/qdoctests-qdocfileoutput.xml80
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/qdoctests-qdocmanuallikefileoutput.xml27
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/toc-test.xml40
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/toc.xml23
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/crash.html26
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/images/01.pngbin0 -> 1142 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/images/leonardo-da-vinci.pngbin0 -> 15076 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/outputfromqdocfiles.index34
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput-exhaustive.html91
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput-linking.html39
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput.html72
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocmanuallikefileoutput.html63
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/toc-test.html32
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/toc.html31
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/crash.webxml12
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/images/01.pngbin0 -> 1142 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/images/leonardo-da-vinci.pngbin0 -> 15076 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/outputfromqdocfiles.index34
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/qdoctests-qdocfileoutput-exhaustive.webxml92
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/qdoctests-qdocfileoutput-linking.webxml20
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/qdoctests-qdocfileoutput.webxml95
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/qdoctests-qdocmanuallikefileoutput.webxml57
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/toc-test.webxml44
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/toc.webxml24
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/images/01.pngbin0 -> 1142 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/images/leonardo-da-vinci.pngbin0 -> 15076 bytes
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/qdoctests-outputfromqdocfiles.qdoc241
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/qdoctests-outputfromqdocmanuallikefiles.qdoc59
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/snippets/main.cpp10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/toc.qdoc23
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/tocnavigation.qdocconf48
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/docbook/struct.xml57
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/html/struct-members.html19
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/html/struct.html53
-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.webxml29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/webxml/trailingbackslashes.index12
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/src/trailing_backslashes.cpp32
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/src/trailing_backslashes.h14
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/trailing_backslashes.qdocconf29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/expected/docbook/space.xml29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/expected/html/space.html43
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/expected/html/usingdirective.index15
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/expected/webxml/space.webxml16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/expected/webxml/usingdirective.index15
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/src/UsingDirective (renamed from tests/auto/qdoc/generatedoutput/testdata/usingdirective/UsingDirective)0
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/src/alias.h10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/src/space.cpp21
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/src/space.h10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/usingdirective.qdocconf27
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/tst_validateqdocoutputfiles.cpp171
-rw-r--r--src/qdoc/qdoccommandlineparser.cpp206
-rw-r--r--src/qdoc/qdoccommandlineparser.h53
-rw-r--r--src/qdoc/qdocdatabase.cpp1656
-rw-r--r--src/qdoc/qdocdatabase.h453
-rw-r--r--src/qdoc/qdocindexfiles.cpp1575
-rw-r--r--src/qdoc/qdocindexfiles.h93
-rw-r--r--src/qdoc/qdoctagfiles.cpp366
-rw-r--r--src/qdoc/qdoctagfiles.h63
-rw-r--r--src/qdoc/qmlcodemarker.cpp259
-rw-r--r--src/qdoc/qmlcodemarker.h83
-rw-r--r--src/qdoc/qmlcodeparser.cpp242
-rw-r--r--src/qdoc/qmlcodeparser.h81
-rw-r--r--src/qdoc/qmlmarkupvisitor.cpp828
-rw-r--r--src/qdoc/qmlmarkupvisitor.h176
-rw-r--r--src/qdoc/qmlpropertynode.cpp160
-rw-r--r--src/qdoc/qmlpropertynode.h87
-rw-r--r--src/qdoc/qmltypenode.cpp159
-rw-r--r--src/qdoc/qmltypenode.h109
-rw-r--r--src/qdoc/qmlvisitor.cpp763
-rw-r--r--src/qdoc/qmlvisitor.h131
-rw-r--r--src/qdoc/quoter.cpp364
-rw-r--r--src/qdoc/quoter.h74
-rw-r--r--src/qdoc/relatedclass.cpp87
-rw-r--r--src/qdoc/relatedclass.h62
-rw-r--r--src/qdoc/sections.cpp1071
-rw-r--r--src/qdoc/sections.h259
-rw-r--r--src/qdoc/separator.cpp65
-rw-r--r--src/qdoc/separator.h45
-rw-r--r--src/qdoc/sharedcommentnode.cpp81
-rw-r--r--src/qdoc/sharedcommentnode.h77
-rw-r--r--src/qdoc/singleton.h57
-rw-r--r--src/qdoc/text.cpp304
-rw-r--r--src/qdoc/text.h107
-rw-r--r--src/qdoc/tokenizer.cpp806
-rw-r--r--src/qdoc/tokenizer.h232
-rw-r--r--src/qdoc/topic.h54
-rw-r--r--src/qdoc/tree.cpp1366
-rw-r--r--src/qdoc/tree.h241
-rw-r--r--src/qdoc/typedefnode.cpp80
-rw-r--r--src/qdoc/typedefnode.h82
-rw-r--r--src/qdoc/usingclause.cpp71
-rw-r--r--src/qdoc/usingclause.h53
-rw-r--r--src/qdoc/utilities.cpp59
-rw-r--r--src/qdoc/utilities.h40
-rw-r--r--src/qdoc/variablenode.cpp48
-rw-r--r--src/qdoc/variablenode.h69
-rw-r--r--src/qdoc/webxmlgenerator.cpp877
-rw-r--r--src/qdoc/webxmlgenerator.h86
-rw-r--r--src/qdoc/xmlgenerator.cpp477
-rw-r--r--src/qdoc/xmlgenerator.h71
-rw-r--r--src/qev/CMakeLists.txt7
-rw-r--r--src/qev/qev.cpp35
-rw-r--r--src/qev/qev.pro9
-rw-r--r--src/qtattributionsscanner/.prev_CMakeLists.txt62
-rw-r--r--src/qtattributionsscanner/CMakeLists.txt50
-rw-r--r--src/qtattributionsscanner/Qt5AttributionsScannerTools.cmake.in67
-rw-r--r--src/qtattributionsscanner/jsongenerator.cpp70
-rw-r--r--src/qtattributionsscanner/jsongenerator.h29
-rw-r--r--src/qtattributionsscanner/logging.h29
-rw-r--r--src/qtattributionsscanner/main.cpp145
-rw-r--r--src/qtattributionsscanner/package.h32
-rw-r--r--src/qtattributionsscanner/packagefilter.cpp29
-rw-r--r--src/qtattributionsscanner/packagefilter.h29
-rw-r--r--src/qtattributionsscanner/qdocgenerator.cpp103
-rw-r--r--src/qtattributionsscanner/qdocgenerator.h29
-rw-r--r--src/qtattributionsscanner/qtattributionsscanner.pro63
-rw-r--r--src/qtattributionsscanner/scanner.cpp474
-rw-r--r--src/qtattributionsscanner/scanner.h39
-rw-r--r--src/qtconcurrent/codegenerator/codegenerator.pri4
-rw-r--r--src/qtconcurrent/codegenerator/example/example.pro3
-rw-r--r--src/qtconcurrent/codegenerator/example/main.cpp70
-rw-r--r--src/qtconcurrent/codegenerator/src/codegenerator.cpp127
-rw-r--r--src/qtconcurrent/codegenerator/src/codegenerator.h191
-rw-r--r--src/qtconcurrent/generaterun/main.cpp419
-rw-r--r--src/qtconcurrent/generaterun/run.pro3
-rw-r--r--src/qtdiag/.prev_CMakeLists.txt42
-rw-r--r--src/qtdiag/CMakeLists.txt20
-rw-r--r--src/qtdiag/main.cpp29
-rw-r--r--src/qtdiag/qtdiag.cpp154
-rw-r--r--src/qtdiag/qtdiag.h29
-rw-r--r--src/qtdiag/qtdiag.pro19
-rw-r--r--src/qtpaths/CMakeLists.txt23
-rw-r--r--src/qtpaths/qtpaths.cpp311
-rw-r--r--src/qtpaths/qtpaths.pro9
-rw-r--r--src/qtplugininfo/CMakeLists.txt7
-rw-r--r--src/qtplugininfo/qtplugininfo.cpp33
-rw-r--r--src/qtplugininfo/qtplugininfo.pro9
-rw-r--r--src/shared/corecon/ccapi.h436
-rw-r--r--src/shared/corecon/ccapi_11.h73
-rw-r--r--src/shared/corecon/ccapi_12.h73
-rw-r--r--src/shared/corecon/corecon.cpp466
-rw-r--r--src/shared/corecon/corecon.h94
-rw-r--r--src/shared/corecon/corecon.pri3
-rw-r--r--src/shared/deviceskin/deviceskin.cpp133
-rw-r--r--src/shared/deviceskin/deviceskin.h40
-rw-r--r--src/shared/deviceskin/deviceskin.pri12
-rw-r--r--src/shared/deviceskin/skins/ClamshellPhone.qrc5
-rw-r--r--src/shared/deviceskin/skins/PortableMedia.qrc5
-rw-r--r--src/shared/deviceskin/skins/S60-QVGA-Candybar.qrc5
-rw-r--r--src/shared/deviceskin/skins/S60-nHD-Touchscreen.qrc5
-rw-r--r--src/shared/deviceskin/skins/SmartPhone.qrc5
-rw-r--r--src/shared/deviceskin/skins/SmartPhone2.qrc5
-rw-r--r--src/shared/deviceskin/skins/SmartPhoneWithButtons.qrc5
-rw-r--r--src/shared/deviceskin/skins/TouchscreenPhone.qrc5
-rw-r--r--src/shared/findwidget/abstractfindwidget.cpp72
-rw-r--r--src/shared/findwidget/abstractfindwidget.h40
-rw-r--r--src/shared/findwidget/findwidget.pri4
-rw-r--r--src/shared/findwidget/findwidget.qrc14
-rw-r--r--src/shared/findwidget/itemviewfindwidget.cpp46
-rw-r--r--src/shared/findwidget/itemviewfindwidget.h40
-rw-r--r--src/shared/findwidget/texteditfindwidget.cpp40
-rw-r--r--src/shared/findwidget/texteditfindwidget.h40
-rw-r--r--src/shared/fontpanel/fontpanel.cpp66
-rw-r--r--src/shared/fontpanel/fontpanel.h41
-rw-r--r--src/shared/fontpanel/fontpanel.pri3
-rw-r--r--src/shared/qtgradienteditor/qtcolorbutton.cpp47
-rw-r--r--src/shared/qtgradienteditor/qtcolorbutton.h44
-rw-r--r--src/shared/qtgradienteditor/qtcolorbutton.pri3
-rw-r--r--src/shared/qtgradienteditor/qtcolorline.cpp40
-rw-r--r--src/shared/qtgradienteditor/qtcolorline.h44
-rw-r--r--src/shared/qtgradienteditor/qtgradientdialog.cpp50
-rw-r--r--src/shared/qtgradienteditor/qtgradientdialog.h41
-rw-r--r--src/shared/qtgradienteditor/qtgradientdialog.ui42
-rw-r--r--src/shared/qtgradienteditor/qtgradienteditor.cpp376
-rw-r--r--src/shared/qtgradienteditor/qtgradienteditor.h64
-rw-r--r--src/shared/qtgradienteditor/qtgradienteditor.pri32
-rw-r--r--src/shared/qtgradienteditor/qtgradienteditor.qrc18
-rw-r--r--src/shared/qtgradienteditor/qtgradienteditor.ui42
-rw-r--r--src/shared/qtgradienteditor/qtgradientmanager.cpp44
-rw-r--r--src/shared/qtgradienteditor/qtgradientmanager.h40
-rw-r--r--src/shared/qtgradienteditor/qtgradientstopscontroller.cpp251
-rw-r--r--src/shared/qtgradienteditor/qtgradientstopscontroller.h67
-rw-r--r--src/shared/qtgradienteditor/qtgradientstopsmodel.cpp69
-rw-r--r--src/shared/qtgradienteditor/qtgradientstopsmodel.h42
-rw-r--r--src/shared/qtgradienteditor/qtgradientstopswidget.cpp197
-rw-r--r--src/shared/qtgradienteditor/qtgradientstopswidget.h55
-rw-r--r--src/shared/qtgradienteditor/qtgradientutils.cpp224
-rw-r--r--src/shared/qtgradienteditor/qtgradientutils.h41
-rw-r--r--src/shared/qtgradienteditor/qtgradientview.cpp98
-rw-r--r--src/shared/qtgradienteditor/qtgradientview.h48
-rw-r--r--src/shared/qtgradienteditor/qtgradientviewdialog.cpp48
-rw-r--r--src/shared/qtgradienteditor/qtgradientviewdialog.h40
-rw-r--r--src/shared/qtgradienteditor/qtgradientviewdialog.ui42
-rw-r--r--src/shared/qtgradienteditor/qtgradientwidget.cpp42
-rw-r--r--src/shared/qtgradienteditor/qtgradientwidget.h41
-rw-r--r--src/shared/qtpropertybrowser/qtbuttonpropertybrowser.cpp110
-rw-r--r--src/shared/qtpropertybrowser/qtbuttonpropertybrowser.h47
-rw-r--r--src/shared/qtpropertybrowser/qteditorfactory.cpp519
-rw-r--r--src/shared/qtpropertybrowser/qteditorfactory.h100
-rw-r--r--src/shared/qtpropertybrowser/qtgroupboxpropertybrowser.cpp123
-rw-r--r--src/shared/qtpropertybrowser/qtgroupboxpropertybrowser.h45
-rw-r--r--src/shared/qtpropertybrowser/qtpropertybrowser.cpp153
-rw-r--r--src/shared/qtpropertybrowser/qtpropertybrowser.h67
-rw-r--r--src/shared/qtpropertybrowser/qtpropertybrowser.pri18
-rw-r--r--src/shared/qtpropertybrowser/qtpropertybrowser.qrc23
-rw-r--r--src/shared/qtpropertybrowser/qtpropertybrowserutils.cpp106
-rw-r--r--src/shared/qtpropertybrowser/qtpropertybrowserutils.pri3
-rw-r--r--src/shared/qtpropertybrowser/qtpropertybrowserutils_p.h43
-rw-r--r--src/shared/qtpropertybrowser/qtpropertymanager.cpp1069
-rw-r--r--src/shared/qtpropertybrowser/qtpropertymanager.h67
-rw-r--r--src/shared/qtpropertybrowser/qttreepropertybrowser.cpp132
-rw-r--r--src/shared/qtpropertybrowser/qttreepropertybrowser.h49
-rw-r--r--src/shared/qtpropertybrowser/qtvariantproperty.cpp1107
-rw-r--r--src/shared/qtpropertybrowser/qtvariantproperty.h81
-rw-r--r--src/shared/qttoolbardialog/qttoolbardialog.cpp214
-rw-r--r--src/shared/qttoolbardialog/qttoolbardialog.h56
-rw-r--r--src/shared/qttoolbardialog/qttoolbardialog.pri5
-rw-r--r--src/shared/qttoolbardialog/qttoolbardialog.qrc10
-rw-r--r--src/shared/winutils/elfreader.cpp440
-rw-r--r--src/shared/winutils/elfreader.h176
-rw-r--r--src/shared/winutils/qmlutils.cpp160
-rw-r--r--src/shared/winutils/qmlutils.h65
-rw-r--r--src/shared/winutils/utils.cpp1063
-rw-r--r--src/shared/winutils/utils.h406
-rw-r--r--src/shared/winutils/winutils.pri8
-rw-r--r--src/src.pro57
-rw-r--r--src/uiplugin/CMakeLists.txt27
-rw-r--r--src/uiplugin/customwidget.h68
-rw-r--r--src/uiplugin/customwidget.qdoc269
-rw-r--r--src/uiplugin/qdesignerexportwidget.h26
-rw-r--r--src/uitools/CMakeLists.txt49
-rw-r--r--src/uitools/doc/images/textfinder-example-find.webpbin0 -> 31170 bytes
-rw-r--r--src/uitools/doc/images/textfinder-example-find2.webpbin0 -> 31064 bytes
-rw-r--r--src/uitools/doc/images/textfinder-example.png (renamed from src/designer/src/uitools/doc/images/textfinder-example.png)bin15424 -> 15424 bytes
-rw-r--r--src/uitools/doc/images/uitools-examples.png (renamed from src/designer/src/uitools/doc/images/uitools-examples.png)bin12021 -> 12021 bytes
-rw-r--r--src/uitools/doc/qtuitools.qdocconf43
-rw-r--r--src/uitools/doc/snippets/quiloader/doc_src_qtuiloader.pro6
-rw-r--r--src/uitools/doc/snippets/quiloader/main.cpp33
-rw-r--r--src/uitools/doc/snippets/quiloader/myform.ui (renamed from src/designer/src/uitools/doc/snippets/quiloader/myform.ui)0
-rw-r--r--src/uitools/doc/snippets/quiloader/mywidget.cpp23
-rw-r--r--src/uitools/doc/snippets/quiloader/mywidget.h15
-rw-r--r--src/uitools/doc/snippets/quiloader/mywidget.qrc (renamed from src/designer/src/uitools/doc/snippets/quiloader/mywidget.qrc)0
-rw-r--r--src/uitools/doc/snippets/quiloader/quiloader.pro (renamed from src/designer/src/uitools/doc/snippets/quiloader/quiloader.pro)0
-rw-r--r--src/uitools/doc/src/qtuitools-examples.qdoc26
-rw-r--r--src/uitools/doc/src/qtuitools-index.qdoc54
-rw-r--r--src/uitools/doc/src/qtuitools-module.qdoc32
-rw-r--r--src/uitools/qtuitoolsglobal.h24
-rw-r--r--src/uitools/quiloader.cpp917
-rw-r--r--src/uitools/quiloader.h61
-rw-r--r--src/uitools/quiloader_p.h77
-rw-r--r--src/windeployqt/.prev_CMakeLists.txt43
-rw-r--r--src/windeployqt/CMakeLists.txt42
-rw-r--r--src/windeployqt/main.cpp1724
-rw-r--r--src/windeployqt/windeployqt.pro20
-rw-r--r--sync.profile21
-rw-r--r--tests/CMakeLists.txt3
-rw-r--r--tests/auto/.prev_CMakeLists.txt22
-rw-r--r--tests/auto/CMakeLists.txt13
-rw-r--r--tests/auto/auto.pro33
-rw-r--r--tests/auto/bic/data/QtDesigner.6.0.0.linux-gcc-amd64.txt21454
-rw-r--r--tests/auto/bic/data/QtDesigner.6.1.0.linux-gcc-amd64.txt21466
-rw-r--r--tests/auto/bic/data/QtDesigner.6.2.0.linux-gcc-amd64.txt21876
-rw-r--r--tests/auto/bic/data/QtHelp.6.0.0.linux-gcc-amd64.txt20252
-rw-r--r--tests/auto/bic/data/QtHelp.6.1.0.linux-gcc-amd64.txt20259
-rw-r--r--tests/auto/bic/data/QtHelp.6.2.0.linux-gcc-amd64.txt20669
-rw-r--r--tests/auto/bic/data/QtUiTools.6.0.0.linux-gcc-amd64.txt19797
-rw-r--r--tests/auto/bic/data/QtUiTools.6.1.0.linux-gcc-amd64.txt19804
-rw-r--r--tests/auto/bic/data/QtUiTools.6.2.0.linux-gcc-amd64.txt20214
-rw-r--r--tests/auto/cmake/CMakeLists.txt68
-rw-r--r--tests/auto/cmake/cmake.pro9
-rw-r--r--tests/auto/cmake/linguist/CMakeLists.txt67
-rw-r--r--tests/auto/cmake/linguist/test_add_translation_macro/CMakeLists.txt17
-rw-r--r--tests/auto/cmake/linguist/test_add_translation_macro/myi18nobject.cpp28
-rw-r--r--tests/auto/cmake/linguist/test_add_translation_macro/myobject_de.ts12
-rw-r--r--tests/auto/cmake/linguist/test_add_translation_macro/some_dir/some_include.h9
-rw-r--r--tests/auto/cmake/linguist/test_create_translation_macro/CMakeLists.txt17
-rw-r--r--tests/auto/cmake/linguist/test_create_translation_macro/myi18nobject.cpp26
-rw-r--r--tests/auto/cmake/linguist/test_create_translation_macro/myobject_de.ts12
-rw-r--r--tests/auto/cmake/linguist/test_create_translation_macro/some_dir/some_include.h9
-rw-r--r--tests/auto/cmake/linguist/test_create_translation_same_base_names/CMakeLists.txt22
-rw-r--r--tests/auto/cmake/linguist/test_create_translation_same_base_names/de/myobject.ts12
-rw-r--r--tests/auto/cmake/linguist/test_create_translation_same_base_names/fr/myobject.ts12
-rw-r--r--tests/auto/cmake/linguist/test_create_translation_same_base_names/myi18nobject.cpp32
-rw-r--r--tests/auto/cmake/linguist/test_i18n_auto_ts_file_names/CMakeLists.txt115
-rw-r--r--tests/auto/cmake/linguist/test_i18n_auto_ts_file_names/lib.cpp1
-rw-r--r--tests/auto/cmake/linguist/test_i18n_auto_ts_file_names/subdir/CMakeLists.txt13
-rw-r--r--tests/auto/cmake/linguist/test_i18n_exclusion/CMakeLists.txt29
-rw-r--r--tests/auto/cmake/linguist/test_i18n_exclusion/apps/CMakeLists.txt4
-rw-r--r--tests/auto/cmake/linguist/test_i18n_exclusion/apps/app1/CMakeLists.txt24
-rw-r--r--tests/auto/cmake/linguist/test_i18n_exclusion/apps/app1/excluded1.cpp9
-rw-r--r--tests/auto/cmake/linguist/test_i18n_exclusion/apps/app1/main.cpp19
-rw-r--r--tests/auto/cmake/linguist/test_i18n_exclusion/apps/app1/subdir/excluded2.cpp9
-rw-r--r--tests/auto/cmake/linguist/test_i18n_exclusion/apps/app1/subdir2/excluded4.cpp14
-rw-r--r--tests/auto/cmake/linguist/test_i18n_exclusion/apps/shared/excluded3.cpp9
-rw-r--r--tests/auto/cmake/linguist/test_i18n_exclusion/check_ts_file.cmake37
-rw-r--r--tests/auto/cmake/linguist/test_i18n_exclusion/libs/CMakeLists.txt5
-rw-r--r--tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib1/CMakeLists.txt6
-rw-r--r--tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib1/lib1.cpp14
-rw-r--r--tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib1/lib1.h17
-rw-r--r--tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib2/CMakeLists.txt7
-rw-r--r--tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib2/lib2.cpp14
-rw-r--r--tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib2/lib2.h17
-rw-r--r--tests/auto/cmake/linguist/test_i18n_exclusion/test_i18n_exclusion_de.ts.in4
-rw-r--r--tests/auto/cmake/linguist/test_i18n_exclusion/tests/CMakeLists.txt5
-rw-r--r--tests/auto/cmake/linguist/test_i18n_exclusion/tests/test1/CMakeLists.txt5
-rw-r--r--tests/auto/cmake/linguist/test_i18n_exclusion/tests/test1/test1.cpp12
-rw-r--r--tests/auto/cmake/linguist/test_i18n_filter_autogen_files/CMakeLists.txt30
-rw-r--r--tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app1/CMakeLists.txt9
-rw-r--r--tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app1/main.cpp27
-rw-r--r--tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app1/mainwindow.ui31
-rw-r--r--tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app2/CMakeLists.txt12
-rw-r--r--tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app2/main.cpp27
-rw-r--r--tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app2/mainwindow.ui31
-rw-r--r--tests/auto/cmake/linguist/test_i18n_filter_autogen_files/check_ts_file.cmake31
-rw-r--r--tests/auto/cmake/linguist/test_i18n_source_language/CMakeLists.txt69
-rw-r--r--tests/auto/cmake/linguist/test_i18n_source_language/check_ts_files.cmake47
-rw-r--r--tests/auto/cmake/linguist/test_i18n_source_language/lib.cpp12
-rw-r--r--tests/auto/cmake/linguist/test_i18n_source_language/lib2_en.ts.in18
-rw-r--r--tests/auto/cmake/linguist/test_translation_api/CMakeLists.txt162
-rw-r--r--tests/auto/cmake/linguist/test_translation_api/myi18nobject.cpp24
-rw-r--r--tests/auto/cmake/linguist/test_translation_api/myobject_de.ts12
-rw-r--r--tests/auto/cmake/linguist/test_translation_api/some_dir/some_include.h12
-rw-r--r--tests/auto/cmake/test_add_translation_macro/CMakeLists.txt23
-rw-r--r--tests/auto/cmake/test_add_translation_macro/myi18nobject.cpp46
-rw-r--r--tests/auto/cmake/test_add_translation_macro/myobject_de.ts12
-rw-r--r--tests/auto/cmake/test_add_translation_macro/some_dir/some_include.h36
-rw-r--r--tests/auto/cmake/test_create_translation_macro/CMakeLists.txt23
-rw-r--r--tests/auto/cmake/test_create_translation_macro/myi18nobject.cpp46
-rw-r--r--tests/auto/cmake/test_create_translation_macro/myobject_de.ts12
-rw-r--r--tests/auto/cmake/test_create_translation_macro/some_dir/some_include.h36
-rw-r--r--tests/auto/cmake/test_uiplugin_module/CMakeLists.txt10
-rw-r--r--tests/auto/cmake/test_uiplugin_module/my_designer_plugin.cpp29
-rw-r--r--tests/auto/cmake/test_uiplugin_via_designer/CMakeLists.txt24
-rw-r--r--tests/auto/cmake/test_uiplugin_via_designer/my_designer_plugin.cpp29
-rw-r--r--tests/auto/installed_cmake/installed_cmake.pro4
-rw-r--r--tests/auto/linguist/CMakeLists.txt3
-rw-r--r--tests/auto/linguist/lconvert/CMakeLists.txt11
-rwxr-xr-xtests/auto/linguist/lconvert/data/makeplurals.pl29
-rw-r--r--tests/auto/linguist/lconvert/data/test-trans_seg.ts.out29
-rw-r--r--tests/auto/linguist/lconvert/data/test-trans_seg.xlf42
-rw-r--r--tests/auto/linguist/lconvert/data/untranslated.qmbin0 -> 222 bytes
-rw-r--r--tests/auto/linguist/lconvert/lconvert.pro8
-rw-r--r--tests/auto/linguist/lconvert/tst_lconvert.cpp38
-rw-r--r--tests/auto/linguist/linguist.pro2
-rw-r--r--tests/auto/linguist/lrelease/CMakeLists.txt11
-rw-r--r--tests/auto/linguist/lrelease/lrelease.pro5
-rw-r--r--tests/auto/linguist/lrelease/testdata/dupes.errors2
-rw-r--r--tests/auto/linguist/lrelease/tst_lrelease.cpp31
-rw-r--r--tests/auto/linguist/lupdate/.prev_CMakeLists.txt10
-rw-r--r--tests/auto/linguist/lupdate/CMakeLists.txt20
-rw-r--r--tests/auto/linguist/lupdate/lupdate.pro6
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/backslashes/src/main.cpp61
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/backslashes/ts/project.ts.result4
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/cmdline_order/a.h54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/cmdline_order/b.h54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/cmdline_recurse/project.ts.result4
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/codecforsrc/main.cpp66
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/from_subdir/src/main.cpp59
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/from_subdir/src/main.h58
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/heuristics/expectedoutput.txt5
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/heuristics/main.cpp57
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/heuristics/project.ts.before8
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/heuristics/project.ts.result7
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/lacksqobject/main.cpp54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/lacksqobject_clang_parser/expectedoutput.txt0
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/lacksqobject_clang_parser/main.cpp75
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/lacksqobject_clang_parser/project.pro3
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/lacksqobject_clang_parser/project.ts.result31
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/merge_ordering/foo.cpp58
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/merge_versions/project.ts.result2
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/merge_versions/project.ui32
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/merge_whitespace/main.cpp58
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/mergecpp/finddialog.cpp66
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/mergecpp/project.ts.result20
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/finddialog.cpp140
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/finddialog.h66
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/finddialog.cpp163
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/finddialog.h66
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/mergeui/project.ts.result6
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/mergeui/project.ui29
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/multiple_locations/finddialog.cpp68
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/multiple_locations/main.cpp71
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/multiple_locations/project.ts.result4
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/namespaces/main.cpp58
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/notargetlanguage/main.cpp58
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parse_special_chars/main.cpp58
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecontexts/main.cpp66
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecontexts_clang_parser/main.cpp266
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecontexts_clang_parser/project.pro3
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecontexts_clang_parser/project.ts.result177
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp/excluded.cpp54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp/expectedoutput.txt4
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp/finddialog.cpp208
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp/included.cpp60
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp214
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp/notincluded.cpp60
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result73
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.cpp177
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.h56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp2/project.ts.result100
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp2_clang_parser/expectedoutput.txt3
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp2_clang_parser/main.cpp141
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp2_clang_parser/main.h36
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp2_clang_parser/project.pro3
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp2_clang_parser/project.ts.result83
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/expectedoutput.txt5
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/lupdatecmd1
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/my_include.h33
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/project.pro9
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/project.ts.result319
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_QT_TR_NOOP_context.cpp165
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_QT_TR_NOOP_context_bis.cpp165
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_QT_TR_NOOP_context_with_comments.h36
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_contain_only_alias.cpp35
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_header_only.cpp28
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_header_only.h39
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_isolatedComments.cpp84
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_isolatedComments.h33
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_line_directive.cpp7
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_sameLineComments.cpp54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/expectedoutput.txt2
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/finddialog.cpp169
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/included.cpp31
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/main.cpp690
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/my_include.h6
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/notincluded.cpp31
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/project.pro7
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/project.ts.result666
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parseidbasedui/project.ts.result4
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parseidbasedui/project.ui32
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsejava/main.java54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsejs/main.js3
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsejs/project.ts.result6
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsejs4/main.js54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsejscontexts/main.js3
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsejscontexts/project.ts.result59
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parseobjc/main.mm54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsepython/main.py95
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsepython/project.pro3
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsepython/project.ts.result109
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parseqml/main.qml7
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parseqml/main_test_pragma.qml104
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parseqml/project.pro1
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parseqml/project.ts.result116
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parseqml2/main.qml56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parseqrc/main.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parseqrc/main.qml54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parseqrc_json/main.cpp10
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parseqrc_json/main.js1
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parseqrc_json/main.qml10
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parseqrc_json/project.json16
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parseqrc_json/project.qrc5
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parseqrc_json/project.ts.result25
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parseui/project.ts.result4
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parseui/project.ui32
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/prefix/main.cpp58
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/prefix/main.h48
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/prefix_clang_parser/main.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/prefix_clang_parser/main.h48
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/prefix_clang_parser/project.pro3
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/prefix_clang_parser/project.ts.result47
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/preprocess/main.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/preprocess_clang_parser/expectedoutput.txt1
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/preprocess_clang_parser/main.cpp62
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/preprocess_clang_parser/project.pro3
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/preprocess_clang_parser/project.ts.result29
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing/main.cpp54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing/main.qml54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing/main_mac.cpp57
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing/main_unix.cpp54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing/main_win.cpp54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing/project.pro2
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing/qml/excluded.cpp54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing/qml/notmain.qml54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing/vpaths/dependpath/main_dependpath.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing/wildcard/main1.cpp54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing/wildcard/mainfile.cpp54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing/wildcard1.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing/wildcard99.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing2/a54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing2/a.cpp54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing2/b54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing2/b.cpp54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing2/e54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing2/f/g.cpp54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing2/include.h2
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing2/spaces/z54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing2/variable_with_spaces54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing2/with54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing2/x/d54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing2/x/variable54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingpaths/file1.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingpaths/filter.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingpaths/sub/subfile1.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingpaths/sub/subfilter.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingpri/common/main.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingpri/mac/main_mac.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingpri/relativity/relativity.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingpri/unix/main_unix.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingpri/win/main_win.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingsubdirs/sub1/main.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingsubs/common/main.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingsubs/excluded/main.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingsubs/mac/main_mac.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingsubs/sub/include/test.h56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingsubs/sub/src/test.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingsubs/unix/main_unix.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingsubs/win/main_win.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/reloutput/main.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/resources_cmdline/main.qml54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/respfile/source1.cpp54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/respfile/source2.cpp54
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/tr_function_alias/lupdatecmd2
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/tr_function_alias/main.cpp92
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/tr_function_alias/project.pro4
-rw-r--r--tests/auto/linguist/lupdate/testdata/recursivescan/main.cpp54
-rw-r--r--tests/auto/linguist/lupdate/testdata/recursivescan/project.ui29
-rw-r--r--tests/auto/linguist/lupdate/testdata/recursivescan/sub/filetypes/main.c++54
-rw-r--r--tests/auto/linguist/lupdate/testdata/recursivescan/sub/filetypes/main.cpp54
-rw-r--r--tests/auto/linguist/lupdate/testdata/recursivescan/sub/filetypes/main.cxx54
-rw-r--r--tests/auto/linguist/lupdate/testdata/recursivescan/sub/finddialog.cpp54
-rw-r--r--tests/auto/linguist/lupdate/testdata/subdirs_full/subdir1/main.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/subdirs_full/subdir2/subsub1/main.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/subdirs_full/subdir2/subsub2/main.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/subdirs_part/subdir1/main.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/subdirs_part/subdir2/subsub1/main.cpp56
-rw-r--r--tests/auto/linguist/lupdate/testdata/subdirs_part/subdir2/subsub2/main.cpp56
-rw-r--r--tests/auto/linguist/lupdate/tst_lupdate.cpp110
-rw-r--r--tests/auto/qdoc/.prev_CMakeLists.txt6
-rw-r--r--tests/auto/qdoc/CMakeLists.txt53
-rw-r--r--tests/auto/qdoc/config/CMakeLists.txt16
-rw-r--r--tests/auto/qdoc/config/config.pro16
-rw-r--r--tests/auto/qdoc/config/tst_config.cpp185
-rw-r--r--tests/auto/qdoc/generatedoutput/CMakeLists.txt10
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/crossmodule/testtype-members.html27
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/crossmodule/testtype.html57
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/demos-manifest.xml9
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/docbook/qdoc-test-qmlmodule.xml54
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/docbook/qdoctests-qdocfileoutput-exhaustive.xml65
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/docbook/qdoctests-qdocfileoutput-linking.xml17
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/docbook/qdoctests-qdocfileoutput.xml68
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-int.xml21
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-abstractparent.xml53
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-child.xml53
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-doctest.xml105
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-type.xml162
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-yetanotherchild.xml38
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-uicomponents-progressbar.xml94
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-uicomponents-switch.xml47
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-uicomponents-tabwidget.xml77
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/docbook/test-componentset-example.xml47
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/docbook/testcpp-module.xml43
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/docbook/testqdoc-test.xml234
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/docbook/testqdoc-testderived.xml86
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/docbook/testqdoc.xml65
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/docbook/uicomponents-qmlmodule.xml34
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/dontdocument/classes.html22
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/dontdocument/dontdocument.qhp56
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/dontdocument/seenclass.html34
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/examples-manifest.xml14
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/first.html31
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/headerfile-docbook/testheader.xml90
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/headerfile/headers.html20
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/headerfile/testheader.html72
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/html/first.webxml15
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/html/index.webxml10
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/html/qdoctests-qdocfileoutput-exhaustive.webxml62
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/html/qdoctests-qdocfileoutput-linking.webxml20
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/html/qdoctests-qdocfileoutput.webxml83
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/html/test-componentset-example.webxml62
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/html/testqdoc-test.webxml77
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/html/testqdoc-testderived.webxml23
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/html/testqdoc.webxml75
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/ignoresince/testqdoc-test.html112
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/ignoresince/testqdoc.html65
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/index.html30
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qdoc-test-qmlmodule.html23
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-int.html23
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent-members.html17
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent.html69
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-child-members.html18
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-child.html79
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-doctest-members.html18
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-doctest.html86
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-type-members.html31
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-type.html185
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/test.index75
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testcpp-module.html42
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc-test-members.html22
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc-test-obsolete.html36
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc-test.html91
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc-testderived-members.html22
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc-testderived.html48
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc.html64
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/index.html22
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/nestedmacro/testcpp-module.html43
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/noautolist-docbook/qdoc-test-qmlmodule.xml16
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/noautolist-docbook/test-componentset-example.xml37
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/noautolist-docbook/testcpp-module.xml15
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/noautolist/qdoc-test-qmlmodule.html18
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/noautolist/test-componentset-example.html51
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/noautolist/testcpp-module.html29
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qdoc-test-qmlmodule.html26
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qdoctests-qdocfileoutput-exhaustive.html60
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qdoctests-qdocfileoutput-linking.html38
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qdoctests-qdocfileoutput.html61
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-int.html39
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-abstractparent.html66
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-child.html66
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-doctest.html130
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type-members.html31
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type.html187
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-yetanotherchild.html48
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-progressbar.html97
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-switch.html68
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-tabwidget.html84
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups-docbook/qml-qdoc-test-parent.xml66
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-anotherchild-members.html25
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-parent.html61
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/scopedenum-docbook/testqdoc-test.xml284
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/scopedenum/testqdoc-test.html119
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/second.html31
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/space.html45
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/template/bar.html35
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/template/baz.html35
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/template/foo.html35
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test-struct.html32
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test.html121
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/test-cmaketest-example.html22
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/test-componentset-example.html58
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/test.qhp157
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/testcpp-module.html42
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/testcpp.index49
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-members.html24
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-obsolete.html36
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test.html110
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived-members.html26
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived.html69
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/testqdoc.html65
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/third.html31
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/toc.html30
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/uicomponents-qmlmodule.html24
-rw-r--r--tests/auto/qdoc/generatedoutput/generatedoutput.pro7
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/bug80259/inc/testmodule/TestModule.h3
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/bug80259/inc/testmodule/aaa.h4
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/bug80259/inc/testmodule/bbb.h5
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/bug80259/inc/testmodule/ccc.h4
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/bug80259/src/main.cpp54
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/bug80259/src/qdoc/index.qdoc7
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/bug80259/testmodule.qdocconf14
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/bug80259/webxml_testmodule.qdocconf2
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/config.qdocconf14
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/docbook.qdocconf7
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/docbook_test.qdocconf3
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/docbook_testcpp.qdocconf3
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/docbook_testqml.qdocconf3
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/examples-qhp.qdocconf40
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/headerfile.qdocconf11
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/ignoresince.qdocconf9
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/nestedmacro.qdocconf10
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/noautolist.qdocconf14
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/scopedenum.qdocconf13
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/test.qdocconf13
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/testcpp.qdocconf10
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/testcpp_singleexec.qdocconf6
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/testqml.qdocconf22
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/testtemplate.qdocconf9
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/tocnavigation.qdocconf5
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/usingdirective.qdocconf3
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/webxml.qdocconf3
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/webxml_test.qdocconf3
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/webxml_testcpp.qdocconf3
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/webxml_testqml.qdocconf2
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/crossmodule/crossmodule.qdocconf11
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/crossmodule/crossmodule_singleexec.qdocconf4
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/crossmodule/testtype.cpp56
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/crossmodule/testtype.h37
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/dontdocument/dont.cpp47
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/dontdocument/dont.h41
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/dontdocument/dontdocument.qdocconf21
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/dontdocument/test.qdoc36
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/examples/demos/demo/doc/src/demo.qdoc34
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/headerfile/testheader.cpp61
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/headerfile/testheader.h33
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/includefromexampledirs/excludes/anotherindex.qdoc39
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/includefromexampledirs/excludes/parentinclude.qdoc52
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/includefromexampledirs/includefromexampledirs.qdocconf13
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/includefromexampledirs/src/includefromparent.qdoc66
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/outputfromqdocfiles/qdoctests-outputfromqdocfiles.qdoc212
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/qml/DocTest.qml105
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/qml/cmaketest/CMakeLists.txt2
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/qml/cmaketest/doc/src/cmaketest.qdoc34
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/qml/componentset/ProgressBar.qml145
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/qml/componentset/Switch.qml152
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/qml/componentset/TabWidget.qml193
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/qml/componentset/examples.qdoc104
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/qml/componentset/uicomponents.qdoc.sample38
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/qml/parent.qdoc84
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/qml/type.cpp106
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/qmlpropertygroups/parent.qdoc62
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/qmlpropertygroups/qmlpropertygroups.qdocconf11
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/scopedenum/scopedenum.qdoc35
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/singleexec/singleexec.qdocconf2
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp233
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.h84
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/testtemplate/testtemplate.cpp48
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/testtemplate/testtemplate.h53
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/usingdirective/alias.h7
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/usingdirective/space.cpp18
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/usingdirective/space.h7
-rw-r--r--tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp473
-rw-r--r--tests/auto/qdoc/qdoc.pro7
-rw-r--r--tests/auto/qdoc/qdoccommandlineparser/.prev_CMakeLists.txt26
-rw-r--r--tests/auto/qdoc/qdoccommandlineparser/CMakeLists.txt27
-rw-r--r--tests/auto/qdoc/qdoccommandlineparser/qdoccommandlineparser.pro14
-rw-r--r--tests/auto/qdoc/qdoccommandlineparser/tst_qdoccommandlineparser.cpp186
-rw-r--r--tests/auto/qdoc/qdoccommandlineparser/tst_qdoccommandlineparser.qrc5
-rw-r--r--tests/auto/qdoc/utilities/CMakeLists.txt14
-rw-r--r--tests/auto/qdoc/utilities/tst_utilities.cpp89
-rw-r--r--tests/auto/qdoc/utilities/utilities.pro12
-rw-r--r--tests/auto/qhelpcontentmodel/CMakeLists.txt15
-rw-r--r--tests/auto/qhelpcontentmodel/qhelpcontentmodel.pro6
-rw-r--r--tests/auto/qhelpcontentmodel/tst_qhelpcontentmodel.cpp37
-rw-r--r--tests/auto/qhelpenginecore/CMakeLists.txt16
-rw-r--r--tests/auto/qhelpenginecore/qhelpenginecore.pro7
-rw-r--r--tests/auto/qhelpenginecore/tst_qhelpenginecore.cpp71
-rw-r--r--tests/auto/qhelpgenerator/CMakeLists.txt15
-rw-r--r--tests/auto/qhelpgenerator/qhelpgenerator.pro14
-rw-r--r--tests/auto/qhelpgenerator/tst_qhelpgenerator.cpp33
-rw-r--r--tests/auto/qhelpindexmodel/CMakeLists.txt15
-rw-r--r--tests/auto/qhelpindexmodel/qhelpindexmodel.pro8
-rw-r--r--tests/auto/qhelpindexmodel/tst_qhelpindexmodel.cpp49
-rw-r--r--tests/auto/qhelpprojectdata/CMakeLists.txt15
-rw-r--r--tests/auto/qhelpprojectdata/qhelpprojectdata.pro15
-rw-r--r--tests/auto/qhelpprojectdata/tst_qhelpprojectdata.cpp41
-rw-r--r--tests/auto/qtattributionsscanner/CMakeLists.txt16
-rw-r--r--tests/auto/qtattributionsscanner/qtattributionsscanner.pro25
-rw-r--r--tests/auto/qtattributionsscanner/testdata/good/complete/qt_attribution_test.json31
-rw-r--r--tests/auto/qtattributionsscanner/testdata/good/expected.json28
-rw-r--r--tests/auto/qtattributionsscanner/testdata/good/licenses-dir/expected.error0
-rw-r--r--tests/auto/qtattributionsscanner/testdata/good/licenses-dir/expected.json24
-rw-r--r--tests/auto/qtattributionsscanner/testdata/good/licenses-dir/qt_attribution_test.json9
-rw-r--r--tests/auto/qtattributionsscanner/testdata/good/minimal/expected.json1
-rw-r--r--tests/auto/qtattributionsscanner/testdata/good/variants/COPYRIGHT.txt1
-rw-r--r--tests/auto/qtattributionsscanner/testdata/good/variants/expected.json1
-rw-r--r--tests/auto/qtattributionsscanner/testdata/warnings/incomplete/expected.json23
-rw-r--r--tests/auto/qtattributionsscanner/testdata/warnings/unknown/expected.json23
-rw-r--r--tests/auto/qtattributionsscanner/tst_qtattributionsscanner.cpp69
-rw-r--r--tests/auto/qtdiag/CMakeLists.txt11
-rw-r--r--tests/auto/qtdiag/qtdiag.pro7
-rw-r--r--tests/auto/qtdiag/tst_qtdiag.cpp31
-rw-r--r--tests/auto/windeployqt/BLACKLIST2
-rw-r--r--tests/auto/windeployqt/CMakeLists.txt4
-rw-r--r--tests/auto/windeployqt/test/.prev_CMakeLists.txt11
-rw-r--r--tests/auto/windeployqt/test/CMakeLists.txt11
-rw-r--r--tests/auto/windeployqt/test/test.pro5
-rw-r--r--tests/auto/windeployqt/testapp/.prev_CMakeLists.txt14
-rw-r--r--tests/auto/windeployqt/testapp/CMakeLists.txt21
-rw-r--r--tests/auto/windeployqt/testapp/main.cpp46
-rw-r--r--tests/auto/windeployqt/testapp/testapp.pro2
-rw-r--r--tests/auto/windeployqt/tst_windeployqt.cpp181
-rw-r--r--tests/auto/windeployqt/windeployqt.pro3
-rw-r--r--tests/manual/CMakeLists.txt3
-rw-r--r--tests/manual/qtattributionsscanner/CMakeLists.txt1
-rw-r--r--tests/manual/qtattributionsscanner/data/qt_attribution_test.json (renamed from tests/manual/qtattributionsscanner/data/qt_attribution.json)0
-rw-r--r--tests/manual/qtattributionsscanner/qtattributionsscanner.pro2
-rw-r--r--tests/tests.pro2
-rw-r--r--util/recolordocsicons/README.md32
-rw-r--r--util/recolordocsicons/recolordocsicons.py76
2995 files changed, 338232 insertions, 141638 deletions
diff --git a/.cmake.conf b/.cmake.conf
index 930548045..f1e963040 100644
--- a/.cmake.conf
+++ b/.cmake.conf
@@ -1 +1,6 @@
-set(QT_REPO_MODULE_VERSION "6.0.0")
+set(QT_REPO_MODULE_VERSION "6.8.0")
+set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "alpha1")
+set(QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_AS_CONST=1")
+set(QDOC_MINIMUM_CLANG_VERSION "15")
+list(APPEND QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_FOREACH=1")
+list(APPEND QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_CONTEXTLESS_CONNECT=1")
diff --git a/.gitignore b/.gitignore
index d0d79c51d..4be464fe2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,20 +1,9 @@
# This file is used to ignore files which are generated in the Qt build system
# ----------------------------------------------------------------------------
-examples/*/*/*
-!examples/*/*/*[.]*
-!examples/*/*/README
+.qtc_clangd
+CMakeLists.txt.user
examples/*/*/*[.]app
-!examples/declarative/*
-!examples/tutorials/*
-!examples/tutorials/*/*
-!examples/ja_JP/*/*
-demos/*/*
-!demos/spectrum/*
-demos/spectrum/bin
-!demos/*/*[.]*
-demos/*/*[.]app
-!demos/declarative/*
config.tests/*/*/*
!config.tests/*/*/*[.]*
config.tests/*/*/*[.]app
@@ -54,62 +43,11 @@ Makefile*
*.pro.user
*.qmlproject.user
*.gcov
-bin/Qt*.dll
-bin/assistant*
-bin/designer*
-bin/dumpcpp*
-bin/idc*
-bin/linguist*
-bin/lrelease*
-bin/lupdate*
-bin/lconvert*
-bin/moc*
-bin/pixeltool*
-bin/qmake*
-bin/qdoc3*
-bin/qt3to4*
-bin/qttracereplay*
-bin/rcc*
-bin/uic*
-bin/patternist*
-bin/phonon*
-bin/qcollectiongenerator*
-bin/qdbus*
-bin/qhelpgenerator*
-bin/xmlpatterns*
-bin/cetest*
-bin/helpconverter
-bin/helpgenerator
-bin/kmap2qmap*
-bin/qlalr*
-bin/qmlconv*
-bin/qmldebugger*
-bin/qml*
-bin/qttracereplay*
configure.cache
config.status
-mkspecs/default
-mkspecs/qconfig.pri
moc_*.cpp
-qmake/qmake.exe
-qmake/Makefile.bak
-src/corelib/global/qconfig.cpp
-src/corelib/global/qconfig.h
-src/corelib/global/qconfig.h.qmake
ui_*.h
-tests/auto/qprocess/test*/*.exe
-tests/auto/qtcpsocket/stressTest/*.exe
-tests/auto/qprocess/fileWriterProcess/*.exe
-tests/auto/qmake/testdata/quotedfilenames/*.exe
-tests/auto/compilerwarnings/*.exe
-tests/auto/qmake/testdata/quotedfilenames/test.cpp
-tests/auto/qprocess/fileWriterProcess.txt
.com.apple.timemachine.supported
-tests/auto/qlibrary/libmylib.so*
-tests/auto/qresourceengine/runtime_resource.rcc
-tools/activeqt/testcon/testcon.tlb
-translations/*.qm
-translations/*_untranslated.ts
qrc_*.cpp
# Test generated files
@@ -145,102 +83,23 @@ tests/auto/cmake/build
*.Debug
*.Release
-# WebKit temp files
-src/3rdparty/webkit/WebCore/mocinclude.tmp
-src/3rdparty/webkit/includes.txt
-src/3rdparty/webkit/includes2.txt
-
# Symlinks generated by configure
-tools/qvfb/qvfbhdr.h
-tools/qvfb/qlock_p.h
-tools/qvfb/qlock.cpp
-tools/qvfb/qwssignalhandler.cpp
-tools/qvfb/qwssignalhandler_p.h
.DS_Store
.pch
.rcc
*.app
config.status
-config.tests/unix/cups/cups
-config.tests/unix/getaddrinfo/getaddrinfo
-config.tests/unix/getifaddrs/getifaddrs
-config.tests/unix/iconv/iconv
-config.tests/unix/ipv6/ipv6
-config.tests/unix/ipv6ifname/ipv6ifname
-config.tests/unix/largefile/largefile
-config.tests/unix/nis/nis
-config.tests/unix/odbc/odbc
-config.tests/unix/openssl/openssl
-config.tests/unix/stl/stl
-config.tests/unix/zlib/zlib
-config.tests/unix/3dnow/3dnow
-config.tests/unix/mmx/mmx
-config.tests/unix/sse/sse
-config.tests/unix/sse2/sse2
-
-
# Directories to ignore
# ---------------------
debug
-examples/tools/plugandpaint/plugins
-include/*
-include/*/*
-lib/*
-!lib/fonts
-!lib/README
-plugins/*/*
release
tmp
-doc-build
-doc/html/*
-doc/qch
-doc-build
.rcc
.pch
.metadata
-# Symbian build system generated files
-# ---------------------
-
-ABLD.BAT
-bld.inf*
-*.mmp
-*.mk
-*.rss
-*.loc
-!s60main.rss
-*.pkg
-plugin_commonu.def
-*.qtplugin
-*.sis
-*.sisx
-*.lst
-*.exe
-*.mif
-*.rsc
-*.sym
-*.lib
-
-# runonphone crash dumps
-d_exc_*.txt
-d_exc_*.stk
-
-# Generated by abldfast.bat from devtools.
-.abldsteps.*
-
-# Carbide project files
-# ---------------------
-.project
-.cproject
-.make.cache
-*.d
-
-qtc-debugging-helper
-src/corelib/lib
-src/network/lib
-src/xml/lib/
.pc/
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 000000000..3b0405e35
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "src/assistant/qlitehtml"]
+ path = src/assistant/qlitehtml
+ url = https://code.qt.io/playground/qlitehtml.git
diff --git a/.prev_CMakeLists.txt b/.prev_CMakeLists.txt
deleted file mode 100644
index 1bfb8d1a0..000000000
--- a/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-# Generated from qttools.pro.
-
-cmake_minimum_required(VERSION 3.15.0)
-
-include(.cmake.conf)
-project(QtTools
- VERSION "${QT_REPO_MODULE_VERSION}"
- DESCRIPTION "Qt Tools Libraries"
- HOMEPAGE_URL "https://qt.io/"
- LANGUAGES CXX C
-)
-
-find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core SET_ME_TO_SOMETHING_USEFUL)
-find_package(Qt6 ${PROJECT_VERSION} CONFIG OPTIONAL_COMPONENTS SET_ME_TO_SOMETHING_USEFUL)
-
-qt_build_repo()
diff --git a/.prev_configure.cmake b/.prev_configure.cmake
deleted file mode 100644
index 85adf4175..000000000
--- a/.prev_configure.cmake
+++ /dev/null
@@ -1,118 +0,0 @@
-
-
-#### Inputs
-
-
-
-#### Libraries
-
-
-
-#### Tests
-
-# libclang
-qt_find_package(WrapLibClang PROVIDED_TARGETS WrapLibClang::WrapLibClang)
-
-if(TARGET WrapLibClang::WrapLibClang)
- set(TEST_libclang "ON" CACHE BOOL "Required libclang version found." FORCE)
-endif()
-
-
-
-#### Features
-
-qt_feature("assistant" PRIVATE
- LABEL "Qt Assistant"
- PURPOSE "Qt Assistant is a tool for viewing on-line documentation in Qt help file format."
-)
-qt_feature("clang" PRIVATE
- LABEL "QDoc"
- CONDITION TEST_libclang
-)
-qt_feature("clangcpp" PRIVATE
- LABEL "Clang-based lupdate parser"
- CONDITION QT_FEATURE_clang AND TEST_libclang
-)
-qt_feature("designer" PRIVATE
- LABEL "Qt Designer"
- PURPOSE "Qt Designer is the Qt tool for designing and building graphical user interfaces (GUIs) with Qt Widgets. You can compose and customize your windows or dialogs in a what-you-see-is-what-you-get (WYSIWYG) manner, and test them using different styles and resolutions."
-)
-qt_feature("distancefieldgenerator" PRIVATE
- LABEL "Qt Distance Field Generator"
- PURPOSE "The Qt Distance Field Generator tool can be used to pregenerate the font cache in order to optimize startup performance."
-)
-qt_feature("kmap2qmap" PRIVATE
- LABEL "kmap2qmap"
- PURPOSE "kmap2qmap is a tool to generate keymaps for use on Embedded Linux. The source files have to be in standard Linux kmap format that is e.g. understood by the kernel's loadkeys command."
-)
-qt_feature("linguist" PRIVATE
- LABEL "Qt Linguist"
- PURPOSE "Qt Linguist can be used by translator to translate text in Qt applications."
-)
-qt_feature("macdeployqt" PRIVATE
- LABEL "Mac Deployment Tool"
- PURPOSE "The Mac deployment tool automates the process of creating a deployable application bundle that contains the Qt libraries as private frameworks."
- CONDITION APPLE
-)
-qt_feature("pixeltool" PRIVATE
- LABEL "pixeltool"
- PURPOSE "The Qt Pixel Zooming Tool is a graphical application that magnifies the screen around the mouse pointer so you can look more closely at individual pixels."
-)
-qt_feature("qdbus" PRIVATE
- LABEL "qdbus"
- PURPOSE "qdbus is a communication interface for Qt-based applications."
-)
-qt_feature("qev" PRIVATE
- LABEL "qev"
- PURPOSE "qev allows introspection of incoming events for a QWidget, similar to the X11 xev tool."
-)
-qt_feature("qtattributionsscanner" PRIVATE
- LABEL "Qt Attributions Scanner"
- PURPOSE "Qt Attributions Scanner generates attribution documents for third-party code in Qt."
-)
-qt_feature("qtdiag" PRIVATE
- LABEL "qtdiag"
- PURPOSE "qtdiag outputs information about the Qt installation it was built with."
-)
-qt_feature("qtpaths" PRIVATE
- LABEL "qtpaths"
- PURPOSE "qtpaths is a command line client to QStandardPaths."
-)
-qt_feature("qtplugininfo" PRIVATE
- LABEL "qtplugininfo"
- PURPOSE "qtplugininfo dumps metadata about Qt plugins in JSON format."
-)
-qt_feature("windeployqt" PRIVATE
- LABEL "Windows deployment tool"
- PURPOSE "The Windows deployment tool is designed to automate the process of creating a deployable folder containing the Qt-related dependencies (libraries, QML imports, plugins, and translations) required to run the application from that folder. It creates a sandbox for Universal Windows Platform (UWP) or an installation tree for Windows desktop applications, which can be easily bundled into an installation package."
- CONDITION WIN32
-)
-qt_configure_add_summary_section(NAME "Qt Tools")
-qt_configure_add_summary_entry(ARGS "assistant")
-qt_configure_add_summary_entry(ARGS "clang")
-qt_configure_add_summary_entry(ARGS "clangcpp")
-qt_configure_add_summary_entry(ARGS "designer")
-qt_configure_add_summary_entry(ARGS "distancefieldgenerator")
-qt_configure_add_summary_entry(ARGS "kmap2qmap")
-qt_configure_add_summary_entry(ARGS "linguist")
-qt_configure_add_summary_entry(ARGS "macdeployqt")
-qt_configure_add_summary_entry(ARGS "pixeltool")
-qt_configure_add_summary_entry(ARGS "qdbus")
-qt_configure_add_summary_entry(ARGS "qev")
-qt_configure_add_summary_entry(ARGS "qtattributionsscanner")
-qt_configure_add_summary_entry(ARGS "qtdiag")
-qt_configure_add_summary_entry(ARGS "qtpaths")
-qt_configure_add_summary_entry(ARGS "qtplugininfo")
-qt_configure_add_summary_entry(ARGS "windeployqt")
-qt_configure_end_summary_section() # end of "Qt Tools" section
-qt_configure_add_report_entry(
- TYPE WARNING
- MESSAGE "QDoc will not be compiled, probably because libclang could not be located. This means that you cannot build the Qt documentation.
- Either ensure that llvm-config is in your PATH environment variable, or set LLVM_INSTALL_DIR to the location of your llvm installation. On Linux systems, you may be able to install libclang by installing the libclang-dev or libclang-devel package, depending on your distribution. On macOS, you can use Homebrew's llvm package. On Windows, you must set LLVM_INSTALL_DIR to the installation path."
- CONDITION NOT QT_FEATURE_clang
-)
-qt_configure_add_report_entry(
- TYPE WARNING
- MESSAGE "Clang-based lupdate parser will not be available. LLVM and Clang C++ libraries have not been found."
- CONDITION NOT QT_FEATURE_clangcpp
-)
diff --git a/.qmake.conf b/.qmake.conf
deleted file mode 100644
index 2231c0183..000000000
--- a/.qmake.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-load(qt_build_config)
-
-DEFINES += QT_NO_JAVA_STYLE_ITERATORS
-
-MODULE_VERSION = 6.0.0
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b10dfcbcc..0af185486 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,20 +1,30 @@
-# Generated from qttools.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-cmake_minimum_required(VERSION 3.15.0)
+
+cmake_minimum_required(VERSION 3.16)
include(.cmake.conf)
-project(QtTools # special case
+project(QtTools
VERSION "${QT_REPO_MODULE_VERSION}"
- DESCRIPTION "Qt Tools" # special case
+ DESCRIPTION "Qt Tools"
HOMEPAGE_URL "https://qt.io/"
LANGUAGES CXX C
)
-# special case begin
-set(QT_REPO_NOT_WARNINGS_CLEAN TRUE)
+# add platform specific compontents
+set(optional_components "")
+if(WIN32)
+ list(APPEND optional_components AxContainer)
+endif()
+
find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core Network)
-find_package(Qt6 ${PROJECT_VERSION} CONFIG OPTIONAL_COMPONENTS AxContainer DBus Xml Widgets Quick QuickWidgets QmlDevTools Sql PrintSupport OpenGL OpenGLWidgets)
-# special case end
+find_package(Qt6 ${PROJECT_VERSION} QUIET CONFIG OPTIONAL_COMPONENTS
+ DBus Xml Widgets Quick QuickWidgets Qml
+ Sql PrintSupport OpenGL OpenGLWidgets ${optional_components})
+qt_internal_project_setup()
qt_build_repo()
+# Add tool dependencies that were deferred by qt_internal_add_docs.
+qt_internal_add_deferred_dependencies()
diff --git a/LICENSE.FDL b/LICENSE.FDL
deleted file mode 100644
index 938bb8da9..000000000
--- a/LICENSE.FDL
+++ /dev/null
@@ -1,450 +0,0 @@
- GNU Free Documentation License
- Version 1.3, 3 November 2008
-
-
- Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
- <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-0. PREAMBLE
-
-The purpose of this License is to make a manual, textbook, or other
-functional and useful document "free" in the sense of freedom: to
-assure everyone the effective freedom to copy and redistribute it,
-with or without modifying it, either commercially or noncommercially.
-Secondarily, this License preserves for the author and publisher a way
-to get credit for their work, while not being considered responsible
-for modifications made by others.
-
-This License is a kind of "copyleft", which means that derivative
-works of the document must themselves be free in the same sense. It
-complements the GNU General Public License, which is a copyleft
-license designed for free software.
-
-We have designed this License in order to use it for manuals for free
-software, because free software needs free documentation: a free
-program should come with manuals providing the same freedoms that the
-software does. But this License is not limited to software manuals;
-it can be used for any textual work, regardless of subject matter or
-whether it is published as a printed book. We recommend this License
-principally for works whose purpose is instruction or reference.
-
-
-1. APPLICABILITY AND DEFINITIONS
-
-This License applies to any manual or other work, in any medium, that
-contains a notice placed by the copyright holder saying it can be
-distributed under the terms of this License. Such a notice grants a
-world-wide, royalty-free license, unlimited in duration, to use that
-work under the conditions stated herein. The "Document", below,
-refers to any such manual or work. Any member of the public is a
-licensee, and is addressed as "you". You accept the license if you
-copy, modify or distribute the work in a way requiring permission
-under copyright law.
-
-A "Modified Version" of the Document means any work containing the
-Document or a portion of it, either copied verbatim, or with
-modifications and/or translated into another language.
-
-A "Secondary Section" is a named appendix or a front-matter section of
-the Document that deals exclusively with the relationship of the
-publishers or authors of the Document to the Document's overall
-subject (or to related matters) and contains nothing that could fall
-directly within that overall subject. (Thus, if the Document is in
-part a textbook of mathematics, a Secondary Section may not explain
-any mathematics.) The relationship could be a matter of historical
-connection with the subject or with related matters, or of legal,
-commercial, philosophical, ethical or political position regarding
-them.
-
-The "Invariant Sections" are certain Secondary Sections whose titles
-are designated, as being those of Invariant Sections, in the notice
-that says that the Document is released under this License. If a
-section does not fit the above definition of Secondary then it is not
-allowed to be designated as Invariant. The Document may contain zero
-Invariant Sections. If the Document does not identify any Invariant
-Sections then there are none.
-
-The "Cover Texts" are certain short passages of text that are listed,
-as Front-Cover Texts or Back-Cover Texts, in the notice that says that
-the Document is released under this License. A Front-Cover Text may
-be at most 5 words, and a Back-Cover Text may be at most 25 words.
-
-A "Transparent" copy of the Document means a machine-readable copy,
-represented in a format whose specification is available to the
-general public, that is suitable for revising the document
-straightforwardly with generic text editors or (for images composed of
-pixels) generic paint programs or (for drawings) some widely available
-drawing editor, and that is suitable for input to text formatters or
-for automatic translation to a variety of formats suitable for input
-to text formatters. A copy made in an otherwise Transparent file
-format whose markup, or absence of markup, has been arranged to thwart
-or discourage subsequent modification by readers is not Transparent.
-An image format is not Transparent if used for any substantial amount
-of text. A copy that is not "Transparent" is called "Opaque".
-
-Examples of suitable formats for Transparent copies include plain
-ASCII without markup, Texinfo input format, LaTeX input format, SGML
-or XML using a publicly available DTD, and standard-conforming simple
-HTML, PostScript or PDF designed for human modification. Examples of
-transparent image formats include PNG, XCF and JPG. Opaque formats
-include proprietary formats that can be read and edited only by
-proprietary word processors, SGML or XML for which the DTD and/or
-processing tools are not generally available, and the
-machine-generated HTML, PostScript or PDF produced by some word
-processors for output purposes only.
-
-The "Title Page" means, for a printed book, the title page itself,
-plus such following pages as are needed to hold, legibly, the material
-this License requires to appear in the title page. For works in
-formats which do not have any title page as such, "Title Page" means
-the text near the most prominent appearance of the work's title,
-preceding the beginning of the body of the text.
-
-The "publisher" means any person or entity that distributes copies of
-the Document to the public.
-
-A section "Entitled XYZ" means a named subunit of the Document whose
-title either is precisely XYZ or contains XYZ in parentheses following
-text that translates XYZ in another language. (Here XYZ stands for a
-specific section name mentioned below, such as "Acknowledgements",
-"Dedications", "Endorsements", or "History".) To "Preserve the Title"
-of such a section when you modify the Document means that it remains a
-section "Entitled XYZ" according to this definition.
-
-The Document may include Warranty Disclaimers next to the notice which
-states that this License applies to the Document. These Warranty
-Disclaimers are considered to be included by reference in this
-License, but only as regards disclaiming warranties: any other
-implication that these Warranty Disclaimers may have is void and has
-no effect on the meaning of this License.
-
-2. VERBATIM COPYING
-
-You may copy and distribute the Document in any medium, either
-commercially or noncommercially, provided that this License, the
-copyright notices, and the license notice saying this License applies
-to the Document are reproduced in all copies, and that you add no
-other conditions whatsoever to those of this License. You may not use
-technical measures to obstruct or control the reading or further
-copying of the copies you make or distribute. However, you may accept
-compensation in exchange for copies. If you distribute a large enough
-number of copies you must also follow the conditions in section 3.
-
-You may also lend copies, under the same conditions stated above, and
-you may publicly display copies.
-
-
-3. COPYING IN QUANTITY
-
-If you publish printed copies (or copies in media that commonly have
-printed covers) of the Document, numbering more than 100, and the
-Document's license notice requires Cover Texts, you must enclose the
-copies in covers that carry, clearly and legibly, all these Cover
-Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
-the back cover. Both covers must also clearly and legibly identify
-you as the publisher of these copies. The front cover must present
-the full title with all words of the title equally prominent and
-visible. You may add other material on the covers in addition.
-Copying with changes limited to the covers, as long as they preserve
-the title of the Document and satisfy these conditions, can be treated
-as verbatim copying in other respects.
-
-If the required texts for either cover are too voluminous to fit
-legibly, you should put the first ones listed (as many as fit
-reasonably) on the actual cover, and continue the rest onto adjacent
-pages.
-
-If you publish or distribute Opaque copies of the Document numbering
-more than 100, you must either include a machine-readable Transparent
-copy along with each Opaque copy, or state in or with each Opaque copy
-a computer-network location from which the general network-using
-public has access to download using public-standard network protocols
-a complete Transparent copy of the Document, free of added material.
-If you use the latter option, you must take reasonably prudent steps,
-when you begin distribution of Opaque copies in quantity, to ensure
-that this Transparent copy will remain thus accessible at the stated
-location until at least one year after the last time you distribute an
-Opaque copy (directly or through your agents or retailers) of that
-edition to the public.
-
-It is requested, but not required, that you contact the authors of the
-Document well before redistributing any large number of copies, to
-give them a chance to provide you with an updated version of the
-Document.
-
-
-4. MODIFICATIONS
-
-You may copy and distribute a Modified Version of the Document under
-the conditions of sections 2 and 3 above, provided that you release
-the Modified Version under precisely this License, with the Modified
-Version filling the role of the Document, thus licensing distribution
-and modification of the Modified Version to whoever possesses a copy
-of it. In addition, you must do these things in the Modified Version:
-
-A. Use in the Title Page (and on the covers, if any) a title distinct
- from that of the Document, and from those of previous versions
- (which should, if there were any, be listed in the History section
- of the Document). You may use the same title as a previous version
- if the original publisher of that version gives permission.
-B. List on the Title Page, as authors, one or more persons or entities
- responsible for authorship of the modifications in the Modified
- Version, together with at least five of the principal authors of the
- Document (all of its principal authors, if it has fewer than five),
- unless they release you from this requirement.
-C. State on the Title page the name of the publisher of the
- Modified Version, as the publisher.
-D. Preserve all the copyright notices of the Document.
-E. Add an appropriate copyright notice for your modifications
- adjacent to the other copyright notices.
-F. Include, immediately after the copyright notices, a license notice
- giving the public permission to use the Modified Version under the
- terms of this License, in the form shown in the Addendum below.
-G. Preserve in that license notice the full lists of Invariant Sections
- and required Cover Texts given in the Document's license notice.
-H. Include an unaltered copy of this License.
-I. Preserve the section Entitled "History", Preserve its Title, and add
- to it an item stating at least the title, year, new authors, and
- publisher of the Modified Version as given on the Title Page. If
- there is no section Entitled "History" in the Document, create one
- stating the title, year, authors, and publisher of the Document as
- given on its Title Page, then add an item describing the Modified
- Version as stated in the previous sentence.
-J. Preserve the network location, if any, given in the Document for
- public access to a Transparent copy of the Document, and likewise
- the network locations given in the Document for previous versions
- it was based on. These may be placed in the "History" section.
- You may omit a network location for a work that was published at
- least four years before the Document itself, or if the original
- publisher of the version it refers to gives permission.
-K. For any section Entitled "Acknowledgements" or "Dedications",
- Preserve the Title of the section, and preserve in the section all
- the substance and tone of each of the contributor acknowledgements
- and/or dedications given therein.
-L. Preserve all the Invariant Sections of the Document,
- unaltered in their text and in their titles. Section numbers
- or the equivalent are not considered part of the section titles.
-M. Delete any section Entitled "Endorsements". Such a section
- may not be included in the Modified Version.
-N. Do not retitle any existing section to be Entitled "Endorsements"
- or to conflict in title with any Invariant Section.
-O. Preserve any Warranty Disclaimers.
-
-If the Modified Version includes new front-matter sections or
-appendices that qualify as Secondary Sections and contain no material
-copied from the Document, you may at your option designate some or all
-of these sections as invariant. To do this, add their titles to the
-list of Invariant Sections in the Modified Version's license notice.
-These titles must be distinct from any other section titles.
-
-You may add a section Entitled "Endorsements", provided it contains
-nothing but endorsements of your Modified Version by various
-parties--for example, statements of peer review or that the text has
-been approved by an organization as the authoritative definition of a
-standard.
-
-You may add a passage of up to five words as a Front-Cover Text, and a
-passage of up to 25 words as a Back-Cover Text, to the end of the list
-of Cover Texts in the Modified Version. Only one passage of
-Front-Cover Text and one of Back-Cover Text may be added by (or
-through arrangements made by) any one entity. If the Document already
-includes a cover text for the same cover, previously added by you or
-by arrangement made by the same entity you are acting on behalf of,
-you may not add another; but you may replace the old one, on explicit
-permission from the previous publisher that added the old one.
-
-The author(s) and publisher(s) of the Document do not by this License
-give permission to use their names for publicity for or to assert or
-imply endorsement of any Modified Version.
-
-
-5. COMBINING DOCUMENTS
-
-You may combine the Document with other documents released under this
-License, under the terms defined in section 4 above for modified
-versions, provided that you include in the combination all of the
-Invariant Sections of all of the original documents, unmodified, and
-list them all as Invariant Sections of your combined work in its
-license notice, and that you preserve all their Warranty Disclaimers.
-
-The combined work need only contain one copy of this License, and
-multiple identical Invariant Sections may be replaced with a single
-copy. If there are multiple Invariant Sections with the same name but
-different contents, make the title of each such section unique by
-adding at the end of it, in parentheses, the name of the original
-author or publisher of that section if known, or else a unique number.
-Make the same adjustment to the section titles in the list of
-Invariant Sections in the license notice of the combined work.
-
-In the combination, you must combine any sections Entitled "History"
-in the various original documents, forming one section Entitled
-"History"; likewise combine any sections Entitled "Acknowledgements",
-and any sections Entitled "Dedications". You must delete all sections
-Entitled "Endorsements".
-
-
-6. COLLECTIONS OF DOCUMENTS
-
-You may make a collection consisting of the Document and other
-documents released under this License, and replace the individual
-copies of this License in the various documents with a single copy
-that is included in the collection, provided that you follow the rules
-of this License for verbatim copying of each of the documents in all
-other respects.
-
-You may extract a single document from such a collection, and
-distribute it individually under this License, provided you insert a
-copy of this License into the extracted document, and follow this
-License in all other respects regarding verbatim copying of that
-document.
-
-
-7. AGGREGATION WITH INDEPENDENT WORKS
-
-A compilation of the Document or its derivatives with other separate
-and independent documents or works, in or on a volume of a storage or
-distribution medium, is called an "aggregate" if the copyright
-resulting from the compilation is not used to limit the legal rights
-of the compilation's users beyond what the individual works permit.
-When the Document is included in an aggregate, this License does not
-apply to the other works in the aggregate which are not themselves
-derivative works of the Document.
-
-If the Cover Text requirement of section 3 is applicable to these
-copies of the Document, then if the Document is less than one half of
-the entire aggregate, the Document's Cover Texts may be placed on
-covers that bracket the Document within the aggregate, or the
-electronic equivalent of covers if the Document is in electronic form.
-Otherwise they must appear on printed covers that bracket the whole
-aggregate.
-
-
-8. TRANSLATION
-
-Translation is considered a kind of modification, so you may
-distribute translations of the Document under the terms of section 4.
-Replacing Invariant Sections with translations requires special
-permission from their copyright holders, but you may include
-translations of some or all Invariant Sections in addition to the
-original versions of these Invariant Sections. You may include a
-translation of this License, and all the license notices in the
-Document, and any Warranty Disclaimers, provided that you also include
-the original English version of this License and the original versions
-of those notices and disclaimers. In case of a disagreement between
-the translation and the original version of this License or a notice
-or disclaimer, the original version will prevail.
-
-If a section in the Document is Entitled "Acknowledgements",
-"Dedications", or "History", the requirement (section 4) to Preserve
-its Title (section 1) will typically require changing the actual
-title.
-
-
-9. TERMINATION
-
-You may not copy, modify, sublicense, or distribute the Document
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense, or distribute it is void, and
-will automatically terminate your rights under this License.
-
-However, if you cease all violation of this License, then your license
-from a particular copyright holder is reinstated (a) provisionally,
-unless and until the copyright holder explicitly and finally
-terminates your license, and (b) permanently, if the copyright holder
-fails to notify you of the violation by some reasonable means prior to
-60 days after the cessation.
-
-Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, receipt of a copy of some or all of the same material does
-not give you any rights to use it.
-
-
-10. FUTURE REVISIONS OF THIS LICENSE
-
-The Free Software Foundation may publish new, revised versions of the
-GNU Free Documentation License from time to time. Such new versions
-will be similar in spirit to the present version, but may differ in
-detail to address new problems or concerns. See
-http://www.gnu.org/copyleft/.
-
-Each version of the License is given a distinguishing version number.
-If the Document specifies that a particular numbered version of this
-License "or any later version" applies to it, you have the option of
-following the terms and conditions either of that specified version or
-of any later version that has been published (not as a draft) by the
-Free Software Foundation. If the Document does not specify a version
-number of this License, you may choose any version ever published (not
-as a draft) by the Free Software Foundation. If the Document
-specifies that a proxy can decide which future versions of this
-License can be used, that proxy's public statement of acceptance of a
-version permanently authorizes you to choose that version for the
-Document.
-
-11. RELICENSING
-
-"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
-World Wide Web server that publishes copyrightable works and also
-provides prominent facilities for anybody to edit those works. A
-public wiki that anybody can edit is an example of such a server. A
-"Massive Multiauthor Collaboration" (or "MMC") contained in the site
-means any set of copyrightable works thus published on the MMC site.
-
-"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
-license published by Creative Commons Corporation, a not-for-profit
-corporation with a principal place of business in San Francisco,
-California, as well as future copyleft versions of that license
-published by that same organization.
-
-"Incorporate" means to publish or republish a Document, in whole or in
-part, as part of another Document.
-
-An MMC is "eligible for relicensing" if it is licensed under this
-License, and if all works that were first published under this License
-somewhere other than this MMC, and subsequently incorporated in whole or
-in part into the MMC, (1) had no cover texts or invariant sections, and
-(2) were thus incorporated prior to November 1, 2008.
-
-The operator of an MMC Site may republish an MMC contained in the site
-under CC-BY-SA on the same site at any time before August 1, 2009,
-provided the MMC is eligible for relicensing.
-
-
-ADDENDUM: How to use this License for your documents
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and
-license notices just after the title page:
-
- Copyright (c) YEAR YOUR NAME.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
- A copy of the license is included in the section entitled "GNU
- Free Documentation License".
-
-If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
-replace the "with...Texts." line with this:
-
- with the Invariant Sections being LIST THEIR TITLES, with the
- Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
-
-If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
-If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License,
-to permit their use in free software.
diff --git a/LICENSE.GPL3-EXCEPT b/LICENSE.GPL3-EXCEPT
deleted file mode 100644
index b1cb1bec7..000000000
--- a/LICENSE.GPL3-EXCEPT
+++ /dev/null
@@ -1,704 +0,0 @@
-This is the GNU General Public License version 3, annotated with The
-Qt Company GPL Exception 1.0:
-
--------------------------------------------------------------------------
-
-The Qt Company GPL Exception 1.0
-
-Exception 1:
-
-As a special exception you may create a larger work which contains the
-output of this application and distribute that work under terms of your
-choice, so long as the work is not otherwise derived from or based on
-this application and so long as the work does not in itself generate
-output that contains the output from this application in its original
-or modified form.
-
-Exception 2:
-
-As a special exception, you have permission to combine this application
-with Plugins licensed under the terms of your choice, to produce an
-executable, and to copy and distribute the resulting executable under
-the terms of your choice. However, the executable must be accompanied
-by a prominent notice offering all users of the executable the entire
-source code to this application, excluding the source code of the
-independent modules, but including any changes you have made to this
-application, under the terms of this license.
-
-
--------------------------------------------------------------------------
-
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- <program> Copyright (C) <year> <name of author>
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/LICENSES/BSD-3-Clause.txt b/LICENSES/BSD-3-Clause.txt
new file mode 100644
index 000000000..b91bbd894
--- /dev/null
+++ b/LICENSES/BSD-3-Clause.txt
@@ -0,0 +1,9 @@
+Copyright (c) <year> <owner>.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/LICENSES/BSL-1.0.txt b/LICENSES/BSL-1.0.txt
new file mode 100644
index 000000000..9cc474174
--- /dev/null
+++ b/LICENSES/BSL-1.0.txt
@@ -0,0 +1,9 @@
+
+
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/LICENSES/GFDL-1.3-no-invariants-only.txt b/LICENSES/GFDL-1.3-no-invariants-only.txt
new file mode 100644
index 000000000..857214dd8
--- /dev/null
+++ b/LICENSES/GFDL-1.3-no-invariants-only.txt
@@ -0,0 +1,451 @@
+
+ GNU Free Documentation License
+ Version 1.3, 3 November 2008
+
+
+ Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document "free" in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The "Document", below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as "you". You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject. (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML, PostScript or PDF designed for human modification. Examples of
+transparent image formats include PNG, XCF and JPG. Opaque formats
+include proprietary formats that can be read and edited only by
+proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML, PostScript or PDF produced by some word
+processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The "publisher" means any person or entity that distributes copies of
+the Document to the public.
+
+A section "Entitled XYZ" means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as "Acknowledgements",
+"Dedications", "Endorsements", or "History".) To "Preserve the Title"
+of such a section when you modify the Document means that it remains a
+section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no
+other conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to
+give them a chance to provide you with an updated version of the
+Document.
+
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+A. Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.
+B. List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has fewer than five),
+ unless they release you from this requirement.
+C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+D. Preserve all the copyright notices of the Document.
+E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+F. Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+G. Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+H. Include an unaltered copy of this License.
+I. Preserve the section Entitled "History", Preserve its Title, and add
+ to it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section Entitled "History" in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.
+J. Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the "History" section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the section all
+ the substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.
+M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+N. Do not retitle any existing section to be Entitled "Endorsements"
+ or to conflict in title with any Invariant Section.
+O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History"
+in the various original documents, forming one section Entitled
+"History"; likewise combine any sections Entitled "Acknowledgements",
+and any sections Entitled "Dedications". You must delete all sections
+Entitled "Endorsements".
+
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other
+documents released under this License, and replace the individual
+copies of this License in the various documents with a single copy
+that is included in the collection, provided that you follow the rules
+of this License for verbatim copying of each of the documents in all
+other respects.
+
+You may extract a single document from such a collection, and
+distribute it individually under this License, provided you insert a
+copy of this License into the extracted document, and follow this
+License in all other respects regarding verbatim copying of that
+document.
+
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an "aggregate" if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements",
+"Dedications", or "History", the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the
+GNU Free Documentation License from time to time. Such new versions
+will be similar in spirit to the present version, but may differ in
+detail to address new problems or concerns. See
+https://www.gnu.org/licenses/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation. If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+11. RELICENSING
+
+"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works. A
+public wiki that anybody can edit is an example of such a server. A
+"Massive Multiauthor Collaboration" (or "MMC") contained in the site
+means any set of copyrightable works thus published on the MMC site.
+
+"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+"Incorporate" means to publish or republish a Document, in whole or in
+part, as part of another Document.
+
+An MMC is "eligible for relicensing" if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole or
+in part into the MMC, (1) had no cover texts or invariant sections, and
+(2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled "GNU
+ Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
diff --git a/LICENSE.GPL2 b/LICENSES/GPL-2.0-only.txt
index d159169d1..d159169d1 100644
--- a/LICENSE.GPL2
+++ b/LICENSES/GPL-2.0-only.txt
diff --git a/LICENSE.GPL3 b/LICENSES/GPL-3.0-only.txt
index 94a9ed024..94a9ed024 100644
--- a/LICENSE.GPL3
+++ b/LICENSES/GPL-3.0-only.txt
diff --git a/LICENSE.LGPL3 b/LICENSES/LGPL-3.0-only.txt
index 65c5ca88a..65c5ca88a 100644
--- a/LICENSE.LGPL3
+++ b/LICENSES/LGPL-3.0-only.txt
diff --git a/LICENSES/LicenseRef-Qt-Commercial.txt b/LICENSES/LicenseRef-Qt-Commercial.txt
new file mode 100644
index 000000000..825b1f358
--- /dev/null
+++ b/LICENSES/LicenseRef-Qt-Commercial.txt
@@ -0,0 +1,8 @@
+Licensees holding valid commercial Qt licenses may use this software in
+accordance with the the terms contained in a written agreement between
+you and The Qt Company. Alternatively, the terms and conditions that were
+accepted by the licensee when buying and/or downloading the
+software do apply.
+
+For the latest licensing terms and conditions, see https://www.qt.io/terms-conditions.
+For further information use the contact form at https://www.qt.io/contact-us.
diff --git a/LICENSES/Qt-GPL-exception-1.0.txt b/LICENSES/Qt-GPL-exception-1.0.txt
new file mode 100644
index 000000000..d0322bf0e
--- /dev/null
+++ b/LICENSES/Qt-GPL-exception-1.0.txt
@@ -0,0 +1,22 @@
+The Qt Company GPL Exception 1.0
+
+Exception 1:
+
+As a special exception you may create a larger work which contains the
+output of this application and distribute that work under terms of your
+choice, so long as the work is not otherwise derived from or based on
+this application and so long as the work does not in itself generate
+output that contains the output from this application in its original
+or modified form.
+
+Exception 2:
+
+As a special exception, you have permission to combine this application
+with Plugins licensed under the terms of your choice, to produce an
+executable, and to copy and distribute the resulting executable under
+the terms of your choice. However, the executable must be accompanied
+by a prominent notice offering all users of the executable the entire
+source code to this application, excluding the source code of the
+independent modules, but including any changes you have made to this
+application, under the terms of this license.
+
diff --git a/cmake/FindWrapLibClang.cmake b/cmake/FindWrapLibClang.cmake
index c89dd8cde..b3ef7cd82 100644
--- a/cmake/FindWrapLibClang.cmake
+++ b/cmake/FindWrapLibClang.cmake
@@ -1,6 +1,9 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
if(TARGET WrapLibClang::WrapLibClang)
- set(WrapLibClang_FOUND TRUE)
- return()
+ set(WrapLibClang_FOUND TRUE)
+ return()
endif()
if(DEFINED ENV{LLVM_INSTALL_DIR})
@@ -12,6 +15,11 @@ elseif(DEFINED CACHE{LLVM_INSTALL_DIR})
endif()
find_package(Clang CONFIG)
+# LLVM versions >= 16 come with Findzstd.cmake that creates a target for libzstd.
+# Disable its global promotion to prevent interference with FindWrapZSTD.cmake.
+if(TARGET zstd::libzstd_shared)
+ qt_internal_disable_find_package_global_promotion(zstd::libzstd_shared)
+endif()
if(__qt_wrap_clang_backup_prefix)
set(CMAKE_PREFIX_PATH "${__qt_wrap_clang_backup_prefix}")
@@ -28,41 +36,51 @@ if(WrapLibClang_FIND_VERSION AND LLVM_PACKAGE_VERSION
endif()
if(TARGET libclang AND ((TARGET clang-cpp AND TARGET LLVM) OR TARGET clangHandleCXX) AND __wrap_lib_clang_requested_version_found)
- set(WrapLibClang_FOUND TRUE)
+ set(WrapLibClang_FOUND TRUE)
- get_target_property(type libclang TYPE)
- if (MSVC AND type STREQUAL "STATIC_LIBRARY")
- if (NOT CMAKE_BUILD_TYPE MATCHES "(Release|MinSizeRel|RelWithDebInfo)")
- message(STATUS "Static linkage against libclang with MSVC was requested, but the build is not a release build, therefore libclang cannot be used.")
- set(WrapLibClang_FOUND FALSE)
+ get_target_property(type libclang TYPE)
+ if (MSVC AND type STREQUAL "STATIC_LIBRARY")
+ get_property(__wrap_lib_clang_multi_config
+ GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
+ if(__wrap_lib_clang_multi_config)
+ set(__wrap_lib_clang_configs ${CMAKE_CONFIGURATION_TYPES})
+ else()
+ set(__wrap_lib_clang_configs ${CMAKE_BUILD_TYPE})
+ endif()
+ set(__wrap_lib_clang_non_release_configs ${configs})
+ list(REMOVE_ITEM __wrap_lib_clang_non_release_configs
+ Release MinSizeRel RelWithDebInfo)
+ if(__wrap_lib_clang_non_release_configs STREQUAL __wrap_lib_clang_configs)
+ message(STATUS "Static linkage against libclang with MSVC was requested, but the build is not a release build, therefore libclang cannot be used.")
+ set(WrapLibClang_FOUND FALSE)
+ endif()
endif()
- endif()
- if(WrapLibClang_FOUND)
- add_library(WrapLibClang::WrapLibClang IMPORTED INTERFACE)
+ if(WrapLibClang_FOUND)
+ add_library(WrapLibClang::WrapLibClang IMPORTED INTERFACE)
- target_include_directories(WrapLibClang::WrapLibClang INTERFACE ${CLANG_INCLUDE_DIRS})
- if (NOT TARGET Threads::Threads)
- find_package(Threads)
- endif()
- qt_internal_disable_find_package_global_promotion(Threads::Threads)
- # lupdate must also link to LLVM when using clang-cpp
- set(__qt_clang_genex_condition "$<AND:$<TARGET_EXISTS:clang-cpp>,$<TARGET_EXISTS:LLVM>>")
- set(__qt_clang_genex "$<IF:${__qt_clang_genex_condition},clang-cpp;LLVM,clangHandleCXX>")
- target_link_libraries(WrapLibClang::WrapLibClang
- INTERFACE libclang
- ${__qt_clang_genex}
- Threads::Threads
- )
+ target_include_directories(WrapLibClang::WrapLibClang INTERFACE ${CLANG_INCLUDE_DIRS})
+ if (NOT TARGET Threads::Threads)
+ find_package(Threads)
+ endif()
+ qt_internal_disable_find_package_global_promotion(Threads::Threads)
+ # lupdate must also link to LLVM when using clang-cpp
+ set(__qt_clang_genex_condition "$<AND:$<TARGET_EXISTS:clang-cpp>,$<TARGET_EXISTS:LLVM>>")
+ set(__qt_clang_genex "$<IF:${__qt_clang_genex_condition},clang-cpp;LLVM,clangHandleCXX>")
+ target_link_libraries(WrapLibClang::WrapLibClang
+ INTERFACE libclang
+ "${__qt_clang_genex}"
+ Threads::Threads
+ )
- foreach(version MAJOR MINOR PATCH)
- set(QT_LIB_CLANG_VERSION_${version} ${LLVM_VERSION_${version}} CACHE STRING "" FORCE)
- endforeach()
- set(QT_LIB_CLANG_VERSION ${LLVM_PACKAGE_VERSION} CACHE STRING "" FORCE)
- set(QT_LIB_CLANG_LIBDIR "${LLVM_LIBRARY_DIRS}" CACHE STRING "" FORCE)
- set(QT_LIBCLANG_RESOURCE_DIR
- "\"${QT_LIB_CLANG_LIBDIR}/clang/${QT_LIB_CLANG_VERSION}/include\"" CACHE STRING "" FORCE)
- endif()
+ foreach(version MAJOR MINOR PATCH)
+ set(QT_LIB_CLANG_VERSION_${version} ${LLVM_VERSION_${version}} CACHE STRING "" FORCE)
+ endforeach()
+ set(QT_LIB_CLANG_VERSION ${LLVM_PACKAGE_VERSION} CACHE STRING "" FORCE)
+ set(QT_LIB_CLANG_LIBDIR "${LLVM_LIBRARY_DIRS}" CACHE STRING "" FORCE)
+ set(QT_LIBCLANG_RESOURCE_DIR
+ "\"${QT_LIB_CLANG_LIBDIR}/clang/${QT_LIB_CLANG_VERSION}/include\"" CACHE STRING "" FORCE)
+ endif()
endif()
include(FindPackageHandleStandardArgs)
diff --git a/coin/axivion/ci_config_linux.json b/coin/axivion/ci_config_linux.json
new file mode 100644
index 000000000..199976045
--- /dev/null
+++ b/coin/axivion/ci_config_linux.json
@@ -0,0 +1,43 @@
+{
+ "Project": {
+ "BuildSystemIntegration": {
+ "child_order": [
+ "GCCSetup",
+ "CMake",
+ "LinkLibraries"
+ ]
+ },
+ "CMake": {
+ "_active": true,
+ "_copy_from": "CMakeIntegration",
+ "build_environment": {},
+ "build_options": "-j4",
+ "generate_options": "--fresh",
+ "generator": "Ninja"
+ },
+ "GCCSetup": {
+ "_active": true,
+ "_copy_from": "Command",
+ "build_command": "gccsetup --cc gcc --cxx g++ --config ../../../axivion/"
+ },
+ "LinkLibraries": {
+ "_active": true,
+ "_copy_from": "AxivionLinker",
+ "input_files": [
+ "build/lib/lib*.so*.ir"
+ ],
+ "ir": "build/$(env:TESTED_MODULE_COIN).ir",
+ "plugin_files": [
+ "build/plugins/*/lib*.so*.ir"
+ ]
+ }
+ },
+ "_Format": "1.0",
+ "_Version": "7.6.2",
+ "_VersionNum": [
+ 7,
+ 6,
+ 2,
+ 12725
+ ]
+}
diff --git a/coin/module_config.yaml b/coin/module_config.yaml
index 16d158c6b..628a967aa 100644
--- a/coin/module_config.yaml
+++ b/coin/module_config.yaml
@@ -4,9 +4,14 @@ accept_configuration:
property: features
not_contains_value: Disable
+machine_type:
+ Build:
+ cores: 4
+
instructions:
Build:
- !include "{{qt/qtbase}}/coin_module_build_template_v2.yaml"
Test:
- !include "{{qt/qtbase}}/coin_module_test_template_v3.yaml"
+ - !include "{{qt/qtbase}}/coin_module_test_docs.yaml"
diff --git a/configure.cmake b/configure.cmake
index d0a64ea0f..e0facf0b9 100644
--- a/configure.cmake
+++ b/configure.cmake
@@ -1,4 +1,5 @@
-
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#### Inputs
@@ -27,25 +28,44 @@ endif()
#### Features
+# Check whether the sqlite plugin is available.
+set(sqlite_plugin_available FALSE)
+if(NOT QT_CONFIGURE_RUNNING)
+ if(TARGET ${QT_CMAKE_EXPORT_NAMESPACE}::Sql)
+ get_target_property(sql_plugins ${QT_CMAKE_EXPORT_NAMESPACE}::Sql QT_PLUGINS)
+ if(QSQLiteDriverPlugin IN_LIST sql_plugins)
+ set(sqlite_plugin_available TRUE)
+ endif()
+ endif()
+endif()
+
qt_feature("assistant" PRIVATE
LABEL "Qt Assistant"
PURPOSE "Qt Assistant is a tool for viewing on-line documentation in Qt help file format."
+ CONDITION TARGET Qt::Widgets AND QT_FEATURE_png AND QT_FEATURE_pushbutton AND QT_FEATURE_toolbutton AND (sqlite_plugin_available OR QT_BUILD_SHARED_LIBS)
)
qt_feature("clang" PRIVATE
- LABEL "QDoc"
+ LABEL "libclang found"
CONDITION TEST_libclang
)
+qt_feature("qdoc" PRIVATE
+ LABEL "QDoc"
+ PURPOSE "QDoc is Qt's documentation generator for C++ and QML projects."
+ CONDITION TARGET Qt::QmlPrivate AND QT_FEATURE_clang AND QT_FEATURE_commandlineparser AND QT_FEATURE_thread AND QT_LIB_CLANG_VERSION VERSION_GREATER_EQUAL QDOC_MINIMUM_CLANG_VERSION
+)
qt_feature("clangcpp" PRIVATE
LABEL "Clang-based lupdate parser"
- CONDITION QT_FEATURE_clang AND TEST_libclang
+ CONDITION QT_FEATURE_clang AND (NOT MSVC OR MSVC_VERSION LESS "1939" OR QT_LIB_CLANG_VERSION_MAJOR GREATER_EQUAL "16")
)
qt_feature("designer" PRIVATE
- LABEL "Qt Designer"
- PURPOSE "Qt Designer is the Qt tool for designing and building graphical user interfaces (GUIs) with Qt Widgets. You can compose and customize your windows or dialogs in a what-you-see-is-what-you-get (WYSIWYG) manner, and test them using different styles and resolutions."
+ LABEL "Qt Widgets Designer"
+ PURPOSE "Qt Widgets Designer is the Qt tool for designing and building graphical user interfaces (GUIs) with Qt Widgets. You can compose and customize your windows or dialogs in a what-you-see-is-what-you-get (WYSIWYG) manner, and test them using different styles and resolutions."
+ CONDITION TARGET Qt::Widgets AND QT_FEATURE_png AND QT_FEATURE_pushbutton AND QT_FEATURE_toolbutton
)
qt_feature("distancefieldgenerator" PRIVATE
LABEL "Qt Distance Field Generator"
PURPOSE "The Qt Distance Field Generator tool can be used to pregenerate the font cache in order to optimize startup performance."
+ CONDITION TARGET Qt::Widgets AND QT_FEATURE_png AND QT_FEATURE_thread AND QT_FEATURE_toolbutton AND TARGET Qt::Quick
)
qt_feature("kmap2qmap" PRIVATE
LABEL "kmap2qmap"
@@ -55,18 +75,15 @@ qt_feature("linguist" PRIVATE
LABEL "Qt Linguist"
PURPOSE "Qt Linguist can be used by translator to translate text in Qt applications."
)
-qt_feature("macdeployqt" PRIVATE
- LABEL "Mac Deployment Tool"
- PURPOSE "The Mac deployment tool automates the process of creating a deployable application bundle that contains the Qt libraries as private frameworks."
- CONDITION APPLE
-)
qt_feature("pixeltool" PRIVATE
LABEL "pixeltool"
PURPOSE "The Qt Pixel Zooming Tool is a graphical application that magnifies the screen around the mouse pointer so you can look more closely at individual pixels."
+ CONDITION TARGET Qt::Widgets AND QT_FEATURE_png AND QT_FEATURE_pushbutton AND QT_FEATURE_toolbutton
)
qt_feature("qdbus" PRIVATE
LABEL "qdbus"
PURPOSE "qdbus is a communication interface for Qt-based applications."
+ CONDITION TARGET Qt::DBus
)
qt_feature("qev" PRIVATE
LABEL "qev"
@@ -75,23 +92,17 @@ qt_feature("qev" PRIVATE
qt_feature("qtattributionsscanner" PRIVATE
LABEL "Qt Attributions Scanner"
PURPOSE "Qt Attributions Scanner generates attribution documents for third-party code in Qt."
+ CONDITION QT_FEATURE_commandlineparser
)
qt_feature("qtdiag" PRIVATE
LABEL "qtdiag"
PURPOSE "qtdiag outputs information about the Qt installation it was built with."
-)
-qt_feature("qtpaths" PRIVATE
- LABEL "qtpaths"
- PURPOSE "qtpaths is a command line client to QStandardPaths."
+ CONDITION QT_FEATURE_commandlineparser AND TARGET Qt::Gui AND NOT ANDROID AND NOT QNX AND NOT UIKIT AND NOT WASM
)
qt_feature("qtplugininfo" PRIVATE
LABEL "qtplugininfo"
PURPOSE "qtplugininfo dumps metadata about Qt plugins in JSON format."
-)
-qt_feature("windeployqt" PRIVATE
- LABEL "Windows deployment tool"
- PURPOSE "The Windows deployment tool is designed to automate the process of creating a deployable folder containing the Qt-related dependencies (libraries, QML imports, plugins, and translations) required to run the application from that folder. It creates a sandbox for Universal Windows Platform (UWP) or an installation tree for Windows desktop applications, which can be easily bundled into an installation package."
- CONDITION WIN32
+ CONDITION QT_FEATURE_commandlineparser AND QT_FEATURE_library AND (android_app OR NOT ANDROID)
)
qt_configure_add_summary_section(NAME "Qt Tools")
qt_configure_add_summary_entry(ARGS "assistant")
@@ -99,26 +110,44 @@ qt_configure_add_summary_entry(ARGS "clang")
qt_configure_add_summary_entry(ARGS "clangcpp")
qt_configure_add_summary_entry(ARGS "designer")
qt_configure_add_summary_entry(ARGS "distancefieldgenerator")
-qt_configure_add_summary_entry(ARGS "kmap2qmap")
+#qt_configure_add_summary_entry(ARGS "kmap2qmap")
qt_configure_add_summary_entry(ARGS "linguist")
-qt_configure_add_summary_entry(ARGS "macdeployqt")
qt_configure_add_summary_entry(ARGS "pixeltool")
qt_configure_add_summary_entry(ARGS "qdbus")
-qt_configure_add_summary_entry(ARGS "qev")
+qt_configure_add_summary_entry(ARGS "qdoc")
+#qt_configure_add_summary_entry(ARGS "qev")
qt_configure_add_summary_entry(ARGS "qtattributionsscanner")
qt_configure_add_summary_entry(ARGS "qtdiag")
-qt_configure_add_summary_entry(ARGS "qtpaths")
qt_configure_add_summary_entry(ARGS "qtplugininfo")
-qt_configure_add_summary_entry(ARGS "windeployqt")
qt_configure_end_summary_section() # end of "Qt Tools" section
qt_configure_add_report_entry(
TYPE WARNING
- MESSAGE "QDoc will not be compiled, probably because libclang could not be located. This means that you cannot build the Qt documentation.
- Either ensure that llvm-config is in your PATH environment variable, or set LLVM_INSTALL_DIR to the location of your llvm installation. On Linux systems, you may be able to install libclang by installing the libclang-dev or libclang-devel package, depending on your distribution. On macOS, you can use Homebrew's llvm package. On Windows, you must set LLVM_INSTALL_DIR to the installation path."
+ MESSAGE "QDoc will not be compiled, probably because clang's C and C++ libraries could not be located. This means that you cannot build the Qt documentation.
+You may need to set CMAKE_PREFIX_PATH or LLVM_INSTALL_DIR to the location of your llvm installation.
+Other than clang's libraries, you may need to install another package, such as clang itself, to provide the ClangConfig.cmake file needed to detect your libraries. Once this
+file is in place, the configure script may be able to detect your system-installed libraries without further environment variables.
+On macOS, you can use Homebrew's llvm package.
+You will also need to set the FEATURE_clang CMake variable to ON to re-evaluate this check."
CONDITION NOT QT_FEATURE_clang
)
qt_configure_add_report_entry(
TYPE WARNING
- MESSAGE "Clang-based lupdate parser will not be available. LLVM and Clang C++ libraries have not been found."
+ MESSAGE "QDoc will not be compiled because the QmlPrivate library wasn't found."
+ CONDITION NOT TARGET Qt::QmlPrivate
+)
+qt_configure_add_report_entry(
+ TYPE WARNING
+ MESSAGE "QDoc cannot be compiled without Qt's commandline parser or thread features."
+ CONDITION NOT QT_FEATURE_commandlineparser OR NOT QT_FEATURE_thread
+)
+qt_configure_add_report_entry(
+ TYPE WARNING
+ MESSAGE "QDoc will not be compiled because it requires libclang ${QDOC_MINIMUM_CLANG_VERSION} or newer."
+ CONDITION QT_LIB_CLANG_VERSION VERSION_LESS QDOC_MINIMUM_CLANG_VERSION
+)
+qt_configure_add_report_entry(
+ TYPE WARNING
+ MESSAGE "Clang-based lupdate parser will not be available. Suitable LLVM and Clang C++ libraries have not been found.
+You will need to set the FEATURE_clangcpp CMake variable to ON to re-evaluate this check."
CONDITION NOT QT_FEATURE_clangcpp
)
diff --git a/configure.json b/configure.json
deleted file mode 100644
index f77921fc7..000000000
--- a/configure.json
+++ /dev/null
@@ -1,152 +0,0 @@
-{
- "files": {
- "publicHeader": "src/global/qttools-config.h",
- "privateHeader": "src/global/qttools-config_p.h",
- "publicPro": "src/global/qttools-config.pri",
- "privatePro": "src/global/qttools-config.pri"
- },
- "module": "tools",
- "tests": {
- "libclang": {
- "label": "libclang",
- "test": "libclang",
- "type": "libclang"
- }
- },
- "features": {
- "assistant": {
- "label": "Qt Assistant",
- "purpose": "Qt Assistant is a tool for viewing on-line documentation in Qt help file format.",
- "output": [ "privateFeature" ]
- },
- "clang": {
- "label": "QDoc",
- "condition": "tests.libclang",
- "output": [
- "privateFeature",
- { "type": "varAssign", "name": "CLANG_LIBS", "value": "tests.libclang.libs" },
- { "type": "varAssign", "name": "CLANG_INCLUDEPATH", "value": "tests.libclang.includepath" },
- { "type": "varAssign", "name": "CLANG_LIBDIR", "value": "tests.libclang.libdir" },
- { "type": "varAssign", "name": "CLANG_DEFINES", "value": "tests.libclang.defines" },
- { "type": "varAssign", "name": "CLANG_VERSION", "value": "tests.libclang.version" },
- { "type": "varAssign", "name": "CLANG_MAJOR_VERSION", "value": "tests.libclang.major_version" },
- { "type": "varAssign", "name": "CLANG_MINOR_VERSION", "value": "tests.libclang.minor_version" },
- { "type": "varAssign", "name": "CLANG_PATCH_VERSION", "value": "tests.libclang.patch_version" }
- ]
- },
- "clangcpp": {
- "label": "Clang-based lupdate parser",
- "condition": "features.clang && tests.libclang.has_clangcpp",
- "output": [
- "privateFeature",
- { "type": "varAssign", "name": "CLANGCPP_LIBS", "value": "tests.libclang.clangcpp_libs" }
- ]
- },
- "designer": {
- "label": "Qt Designer",
- "purpose": "Qt Designer is the Qt tool for designing and building graphical user interfaces (GUIs) with Qt Widgets. You can compose and customize your windows or dialogs in a what-you-see-is-what-you-get (WYSIWYG) manner, and test them using different styles and resolutions.",
- "output": [ "privateFeature" ]
- },
- "distancefieldgenerator": {
- "label": "Qt Distance Field Generator",
- "purpose": "The Qt Distance Field Generator tool can be used to pregenerate the font cache in order to optimize startup performance.",
- "output": [ "privateFeature" ]
- },
- "kmap2qmap": {
- "label": "kmap2qmap",
- "purpose": "kmap2qmap is a tool to generate keymaps for use on Embedded Linux. The source files have to be in standard Linux kmap format that is e.g. understood by the kernel's loadkeys command.",
- "output": [ "privateFeature" ]
- },
- "linguist": {
- "label": "Qt Linguist",
- "purpose": "Qt Linguist can be used by translator to translate text in Qt applications.",
- "output": [ "privateFeature" ]
- },
- "macdeployqt": {
- "label": "Mac Deployment Tool",
- "purpose": "The Mac deployment tool automates the process of creating a deployable application bundle that contains the Qt libraries as private frameworks.",
- "condition": "config.darwin",
- "output": [ "privateFeature" ]
- },
- "pixeltool": {
- "label": "pixeltool",
- "purpose": "The Qt Pixel Zooming Tool is a graphical application that magnifies the screen around the mouse pointer so you can look more closely at individual pixels.",
- "output": [ "privateFeature" ]
- },
- "qdbus": {
- "label": "qdbus",
- "purpose": "qdbus is a communication interface for Qt-based applications.",
- "output": [ "privateFeature" ]
- },
- "qev": {
- "label": "qev",
- "purpose": "qev allows introspection of incoming events for a QWidget, similar to the X11 xev tool.",
- "output": [ "privateFeature" ]
- },
- "qtattributionsscanner": {
- "label": "Qt Attributions Scanner",
- "purpose": "Qt Attributions Scanner generates attribution documents for third-party code in Qt.",
- "output": [ "privateFeature" ]
- },
- "qtdiag": {
- "label": "qtdiag",
- "purpose": "qtdiag outputs information about the Qt installation it was built with.",
- "output": [ "privateFeature" ]
- },
- "qtpaths": {
- "label": "qtpaths",
- "purpose": "qtpaths is a command line client to QStandardPaths.",
- "output": [ "privateFeature" ]
- },
- "qtplugininfo": {
- "label": "qtplugininfo",
- "purpose": "qtplugininfo dumps metadata about Qt plugins in JSON format.",
- "output": [ "privateFeature" ]
- },
- "windeployqt": {
- "label": "Windows deployment tool",
- "purpose": "The Windows deployment tool is designed to automate the process of creating a deployable folder containing the Qt-related dependencies (libraries, QML imports, plugins, and translations) required to run the application from that folder. It creates a sandbox for Universal Windows Platform (UWP) or an installation tree for Windows desktop applications, which can be easily bundled into an installation package.",
- "condition": "config.win32",
- "output": [ "privateFeature" ]
- }
- },
- "report": [
- {
- "type": "warning",
- "condition": "!features.clang",
- "message": "QDoc will not be compiled, probably because libclang could not be located. This means that you cannot build the Qt documentation.\n
-Either ensure that llvm-config is in your PATH environment variable, or set LLVM_INSTALL_DIR to the location of your llvm installation.
-On Linux systems, you may be able to install libclang by installing the libclang-dev or libclang-devel package, depending on your distribution.
-On macOS, you can use Homebrew's llvm package.
-On Windows, you must set LLVM_INSTALL_DIR to the installation path."
- },
- {
- "type": "warning",
- "condition": "!features.clangcpp",
- "message": "Clang-based lupdate parser will not be available. LLVM and Clang C++ libraries have not been found."
- }
- ],
- "summary": [
- {
- "section": "Qt Tools",
- "entries": [
- "assistant",
- "clang",
- "clangcpp",
- "designer",
- "distancefieldgenerator",
- "kmap2qmap",
- "linguist",
- "macdeployqt",
- "pixeltool",
- "qdbus",
- "qev",
- "qtattributionsscanner",
- "qtdiag",
- "qtpaths",
- "qtplugininfo",
- "windeployqt"
- ]
- }
- ]
-}
diff --git a/configure.pri b/configure.pri
deleted file mode 100644
index 98c52d269..000000000
--- a/configure.pri
+++ /dev/null
@@ -1,434 +0,0 @@
-defineReplace(extractVersion) { return($$replace(1, ^(\\d+\\.\\d+\\.\\d+)(svn|git)?$, \\1)) }
-defineReplace(extractMajorVersion) { return($$replace(1, ^(\\d+)\\.\\d+\\.\\d+(svn|git)?$, \\1)) }
-defineReplace(extractMinorVersion) { return($$replace(1, ^\\d+\\.(\\d+)\\.\\d+(svn|git)?$, \\1)) }
-defineReplace(extractPatchVersion) { return($$replace(1, ^\\d+\\.\\d+\\.(\\d+)(svn|git)?$, \\1)) }
-
-defineTest(versionIsAtLeast) {
- actual_major_version = $$extractMajorVersion($$1)
- actual_minor_version = $$extractMinorVersion($$1)
- actual_patch_version = $$extractPatchVersion($$1)
- required_min_major_version = $$extractMajorVersion($$2)
- required_min_minor_version = $$extractMinorVersion($$2)
- required_min_patch_version = $$extractPatchVersion($$2)
-
- isEqual(actual_major_version, $$required_min_major_version) {
- isEqual(actual_minor_version, $$required_min_minor_version) {
- isEqual(actual_patch_version, $$required_min_patch_version): return(true)
- greaterThan(actual_patch_version, $$required_min_patch_version): return(true)
- }
- greaterThan(actual_minor_version, $$required_min_minor_version): return(true)
- }
- greaterThan(actual_major_version, $$required_min_major_version): return(true)
-
- return(false)
-}
-
-defineReplace(findLLVMVersionFromLibDir) {
- libdir = $$1
- version_dirs = $$files($$libdir/clang/*)
- for (version_dir, version_dirs) {
- fileName = $$basename(version_dir)
- version = $$find(fileName, ^(\\d+\\.\\d+\\.\\d+)$)
- !isEmpty(version) {
- isEmpty(candidateVersion): candidateVersion = $$version
- else: versionIsAtLeast($$version, $$candidateVersion): candidateVersion = $$version
- }
- }
- return($$candidateVersion)
-}
-
-defineReplace(FindCleanLLVMInstallDir) {
- # Assume libclang is installed on the target system
- equals(QMAKE_HOST.os, Windows) {
- # on Windows we have only two host compilers, MSVC or mingw. The former we never
- # use for cross-compilation where it isn't also the target compiler. The latter
- # is not detectable as this .prf file is evaluated against the target configuration
- # and therefore checking for "mingw" won't work when the target compiler is clang (Android)
- # or qcc (QNX).
- msvc {
- isEmpty(LLVM_INSTALL_DIR): LLVM_INSTALL_DIR = $$(LLVM_INSTALL_DIR_MSVC)
- } else {
- isEmpty(LLVM_INSTALL_DIR): LLVM_INSTALL_DIR = $$(LLVM_INSTALL_DIR_MINGW)
- }
- }
- isEmpty(LLVM_INSTALL_DIR): LLVM_INSTALL_DIR = $$(LLVM_INSTALL_DIR)
- isEmpty(LLVM_INSTALL_DIR) {
- llvmConfigCandidates = \
- llvm-config-10 \
- llvm-config-9 \
- llvm-config-8 \
- llvm-config-7 \
- llvm-config-6.0 \
- llvm-config-5.0 \
- llvm-config-4.0 \
- llvm-config-3.9 \
- llvm-config
-
- for (candidate, llvmConfigCandidates) {
- LLVM_INSTALL_DIR = $$system("$$candidate --prefix 2>$$QMAKE_SYSTEM_NULL_DEVICE")
- !isEmpty(LLVM_INSTALL_DIR) {
- CLANG_INCLUDEPATH = $$system("$$candidate --includedir 2>/dev/null")
- LIBCLANG_MAIN_HEADER = $$CLANG_INCLUDEPATH/clang-c/Index.h
- !exists($$LIBCLANG_MAIN_HEADER) {
- !isEmpty(LLVM_INSTALL_DIR): \
- qtLog("Cannot find libclang's main header file, candidate: $${LIBCLANG_MAIN_HEADER}.")
- continue
- } else {
- qtLog("QDoc:" \
- "Using Clang installation found in $${LLVM_INSTALL_DIR}." \
- "Set the LLVM_INSTALL_DIR environment variable to override.")
- break()
- }
- }
- }
- }
- LLVM_INSTALL_DIR = $$clean_path($$LLVM_INSTALL_DIR)
- return($$LLVM_INSTALL_DIR)
-}
-
-defineReplace(FindClangInstallDir) {
- llvm_install_dir=$$1
- contains(QMAKE_HOST.arch, x86_64): \
- clangInstallDir = $$replace(llvm_install_dir, _ARCH_, 64)
- else: \
- clangInstallDir = $$replace(llvm_install_dir, _ARCH_, 32)
- isEmpty(llvm_install_dir) {
- macos {
- # Default to homebrew llvm on macOS. The CLANG_VERSION test below will complain if missing.
- clangInstallDir = $$system("brew --prefix llvm")
- } else {
- clangInstallDir = /usr
- }
- }
- return($$clangInstallDir)
-}
-
-defineReplace(CheckClangCppLibForLupdateParser) {
- clangLibDir = $$1
- libToTest = clangTooling \
- clangFrontendTool \
- clangFrontend \
- clangDriver \
- clangSerialization \
- clangCodeGen \
- clangParse \
- clangSema \
- clangStaticAnalyzerFrontend \
- clangStaticAnalyzerCheckers \
- clangStaticAnalyzerCore \
- clangAnalysis \
- clangARCMigrate \
- clangASTMatchers \
- clangAST \
- clangRewrite \
- clangRewriteFrontend \
- clangEdit \
- clangLex \
- clangIndex \
- clangBasic
-
- versionIsAtLeast($$CLANG_VERSION, "9.0.0"){
- libToTest += clangToolingRefactoring
- } else {
- libToTest += clangToolingRefactor
- }
-
-
- CLANG_CPP_LIBS =
- for (lib, libToTest) {
- libFullPath =
- msvc {
- libFullPath += $$clangLibDir/$${lib}.lib
- } else {
- equals(QMAKE_HOST.os, Windows): \
- libFullPath += $$clangLibDir/$${lib}.lib
- else: \
- libFullPath += $$clangLibDir/lib$${lib}.a
- }
-
- CLANG_CPP_LIBS += -l$$lib
- !exists($$libFullPath): {
- CLANG_CPP_LIBS =
- qtLog("Cannot locate $$libFullPath.")
- return($$CLANG_CPP_LIBS)
- }
- }
- return($$CLANG_CPP_LIBS)
-}
-
-defineReplace(CheckClangLlvmLibForLupdateParser) {
- clangLibDir = $$1
- libToTest += LLVMOption \
- LLVMProfileData \
- LLVMMCParser \
- LLVMMC \
- LLVMBitReader \
- LLVMCore \
- LLVMBinaryFormat \
- LLVMSupport \
- LLVMDemangle
-
- versionIsAtLeast($$CLANG_VERSION, "9.0.0") {
- libToTest += LLVMBitstreamReader\
- LLVMRemarks
- }
-
- CLANG_LLVM_LIBS =
- for (lib, libToTest) {
- libFullPath =
- msvc {
- libFullPath += $$clangLibDir/$${lib}.lib
- } else {
- equals(QMAKE_HOST.os, Windows): \
- libFullPath += $$clangLibDir/$${lib}.lib
- else: \
- libFullPath += $$clangLibDir/lib$${lib}.a
- }
-
- CLANG_LLVM_LIBS += -l$$lib
- !exists($$libFullPath): {
- CLANG_LLVM_LIBS =
- return($$CLANG_LLVM_LIBS)
- }
- }
- !equals(QMAKE_HOST.os, Windows): {
- equals(QMAKE_HOST.os, Darwin): CLANG_LLVM_LIBS += -lz -lcurses
- else: CLANG_LLVM_LIBS += -lz -ltinfo
- }
- return($$CLANG_LLVM_LIBS)
-}
-
-defineTest(qtConfTest_libclang) {
- isEmpty(QDOC_USE_STATIC_LIBCLANG): QDOC_USE_STATIC_LIBCLANG = $$(QDOC_USE_STATIC_LIBCLANG)
-
- LLVM_INSTALL_DIR = $$FindCleanLLVMInstallDir()
- isEmpty(LLVM_INSTALL_DIR) {
- equals(QMAKE_HOST.os, Windows) {
- return(false)
- }
- }
- clangInstallDir = $$FindClangInstallDir($$LLVM_INSTALL_DIR)
-
- # note: llvm_config only exits on unix
- llvm_config = $$clangInstallDir/bin/llvm-config
- exists($$llvm_config) {
- CLANG_LIBDIR = $$system("$$llvm_config --libdir 2>/dev/null")
- CLANG_INCLUDEPATH = $$system("$$llvm_config --includedir 2>/dev/null")
- output = $$system("$$llvm_config --version 2>/dev/null")
- CLANG_VERSION = $$extractVersion($$output)
- } else {
- CLANG_LIBDIR = $$clangInstallDir/lib
- CLANG_INCLUDEPATH = $$clangInstallDir/include
- CLANG_VERSION = $$findLLVMVersionFromLibDir($$CLANG_LIBDIR)
- }
- isEmpty(CLANG_VERSION) {
- !isEmpty(LLVM_INSTALL_DIR): \
- qtLog("Cannot determine version of clang installation in $${clangInstallDir}.")
- return(false)
- } else {
- CLANG_MAJOR_VERSION = $$extractMajorVersion($$CLANG_VERSION)
- CLANG_MINOR_VERSION = $$extractMinorVersion($$CLANG_VERSION)
- CLANG_PATCH_VERSION = $$extractPatchVersion($$CLANG_VERSION)
- }
-
- LIBCLANG_MAIN_HEADER = $$CLANG_INCLUDEPATH/clang-c/Index.h
- !exists($$LIBCLANG_MAIN_HEADER) {
- !isEmpty(LLVM_INSTALL_DIR): \
- qtLog("Cannot find libclang's main header file, candidate: $${LIBCLANG_MAIN_HEADER}.")
- return(false)
- }
-
- !contains(QMAKE_DEFAULT_LIBDIRS, $$CLANG_LIBDIR): CLANG_LIBS = -L$${CLANG_LIBDIR}
-
- CLANG_DEFINES =
- HAS_CLANGCPP = false
- CLANGCPP_LIB =
-
- isEmpty(QDOC_USE_STATIC_LIBCLANG) {
- # entering here in case of user (as opposed to CI)
-
- #--------------- QDoc needs --------------------------------
- equals(QMAKE_HOST.os, Windows): \
- CLANG_LIBS += -llibclang -ladvapi32 -lshell32 -lversion
- else: \
- CLANG_LIBS += -lclang
-
- #--------------- Lupdate clang-based parser needs Clang C++ and llvm libraries
- CLANGCPP_DY_LIB = $$CLANG_LIBDIR/libclang_shared.so
- # Checking clang cpp libraries
- # check for shared libraries (not available for Windows at the moment)
- exists($$CLANGCPP_DY_LIB): {
- CLANGCPP_LIBS += -lclang_shared
- } else {
- # check for static libraries
- CLANGCPP_LIBS += $$CheckClangCppLibForLupdateParser($$CLANG_LIBDIR)
- }
- # Checking for LLVM libraries needed for Lupdate clang-based parser
- # At this point, if CLANGCPP_LIBS is empty, no need to go further
- !isEmpty(CLANGCPP_LIBS): {
- LLVM_DY_LIB = $$CLANG_LIBDIR/libLLVM.so
- # check for shared libraries (not available for Windows at the moment)
- exists($$LLVM_DY_LIB): {
- CLANGCPP_LIBS += -lLLVM
- HAS_CLANGCPP = true # Clang cpp and llvm libraries have been found
- } else: {
- # check for static libraries
- CLANGLLVM_LIBS = $$CheckClangLlvmLibForLupdateParser($$CLANG_LIBDIR)
- !isEmpty(CLANGLLVM_LIBS): {
- CLANGCPP_LIBS += $$CLANGLLVM_LIBS
- HAS_CLANGCPP = true # Clang cpp and llvm libraries have been found
- }
- }
- #----------------------------------------------------------------------
- }
- } else {
- # CI
- HAS_CLANGCPP = true #just assuming for now
- equals(QMAKE_HOST.os, Windows) {
- versionIsAtLeast($$CLANG_VERSION, "10.0.0") {
- CLANG_DEFINES += CINDEX_NO_EXPORTS
- } else {
- CLANG_DEFINES += CINDEX_LINKAGE=
- }
- }
- !equals(QMAKE_HOST.os, Darwin):!msvc: CLANG_LIBS+=-Wl,--start-group
- CLANG_LIBS += -lclangAnalysis \
- -lclangARCMigrate \
- -lclangAST \
- -lclangASTMatchers \
- -lclangBasic \
- -lclangCodeGen \
- -lclangCrossTU \
- -lclangDriver \
- -lclangDynamicASTMatchers \
- -lclangEdit \
- -lclangFormat \
- -lclangFrontend \
- -lclangFrontendTool \
- -lclangHandleCXX \
- -lclangIndex \
- -lclangLex \
- -lclangParse \
- -lclangRewrite \
- -lclangRewriteFrontend \
- -lclangSema \
- -lclangSerialization \
- -lclangStaticAnalyzerCheckers \
- -lclangStaticAnalyzerCore \
- -lclangStaticAnalyzerFrontend \
- -lclangTooling \
- -lclangToolingASTDiff \
- -lclangToolingCore
-
- versionIsAtLeast($$CLANG_VERSION, "10.0.0") {
- equals(QMAKE_HOST.os, Windows): \
- CLANG_LIBS += -llibclang
- else: \
- CLANG_LIBS += -lclang
-
- CLANG_LIBS += -lclangToolingInclusions
- } else {
- equals(QMAKE_HOST.os, Windows): \
- CLANG_LIBS += -llibclang_static
- else: \
- CLANG_LIBS += -lclang_static
-
- CLANG_LIBS += \
- -lclangApplyReplacements \
- -lclangChangeNamespace \
- -lclangDaemon \
- -lclangIncludeFixer \
- -lclangIncludeFixerPlugin \
- -lclangMove \
- -lclangQuery \
- -lclangReorderFields \
- -lclangTidy \
- -lclangTidyAndroidModule \
- -lclangTidyBoostModule \
- -lclangTidyBugproneModule \
- -lclangTidyCERTModule \
- -lclangTidyCppCoreGuidelinesModule \
- -lclangTidyFuchsiaModule \
- -lclangTidyGoogleModule \
- -lclangTidyHICPPModule \
- -lclangTidyLLVMModule \
- -lclangTidyMiscModule \
- -lclangTidyModernizeModule \
- -lclangTidyMPIModule \
- -lclangTidyObjCModule \
- -lclangTidyPerformanceModule \
- -lclangTidyPlugin \
- -lclangTidyReadabilityModule \
- -lclangTidyUtils \
- -lclangToolingRefactor \
- -lfindAllSymbols
- }
-
- msvc {
- LLVM_LIBS_STRING += $$system("$$llvm_config --libnames")
- } else {
- LLVM_LIBS_STRING += $$system("$$llvm_config --libs")
- }
- LLVM_LIBS_STRING += $$system("$$llvm_config --system-libs")
- CLANG_LIBS += $$split(LLVM_LIBS_STRING, " ")
-
- !equals(QMAKE_HOST.os, Darwin):!msvc: CLANG_LIBS+=-Wl,--end-group
- equals(QMAKE_HOST.os, Windows): CLANG_LIBS += -lversion
- }
-
- !versionIsAtLeast($$CLANG_VERSION, "3.9.0") {
- log("LLVM/Clang version >= 3.9.0 required, version provided: $${CLANG_VERSION}.$$escape_expand(\\n)")
- return(false)
- }
-
- !versionIsAtLeast($$CLANG_VERSION, "8.0.0") {
- # if not InitLLVM.h is missing
- log("LLVM/Clang version >= 8.0.0 required for Clang-based lupdate parser. \
- Version provided: $${CLANG_VERSION}.$$escape_expand(\\n)")
- HAS_CLANGCPP = false
- }
-
- $${1}.libs = $$CLANG_LIBS
- export($${1}.libs)
- $${1}.cache += libs
-
- $${1}.includepath = $$CLANG_INCLUDEPATH
- export($${1}.includepath)
- $${1}.cache += includepath
-
- $${1}.libdir = $$CLANG_LIBDIR
- export($${1}.libdir)
- $${1}.cache += libdir
-
- $${1}.defines = $$CLANG_DEFINES
- export($${1}.defines)
- $${1}.cache += defines
-
- $${1}.version = $$CLANG_VERSION
- export($${1}.version)
- $${1}.cache += version
-
- $${1}.major_version = $$CLANG_MAJOR_VERSION
- export($${1}.major_version)
- $${1}.cache += major_version
-
- $${1}.minor_version = $$CLANG_MINOR_VERSION
- export($${1}.minor_version)
- $${1}.cache += minor_version
-
- $${1}.patch_version = $$CLANG_PATCH_VERSION
- export($${1}.patch_version)
- $${1}.cache += patch_version
-
- $${1}.has_clangcpp = $$HAS_CLANGCPP
- export($${1}.has_clangcpp)
- $${1}.cache += has_clangcpp
-
- $${1}.clangcpp_libs = $$CLANGCPP_LIBS
- export($${1}.clangcpp_libs)
- $${1}.cache += clangcpp_libs
-
- export($${1}.cache)
-
- return(true)
-}
diff --git a/dependencies.yaml b/dependencies.yaml
index 6acb75103..80d434068 100644
--- a/dependencies.yaml
+++ b/dependencies.yaml
@@ -1,7 +1,10 @@
dependencies:
+ ../qtactiveqt:
+ ref: 67cee14fe7ea0542ffa1d305eeb2870b600fd685
+ required: false
../qtbase:
- ref: 46c1e609893b09a61d70dda3589e6b8d25261468
+ ref: e7362764d4931f255d2377462df8ac7a0d4e7c84
required: true
../qtdeclarative:
- ref: 6412bcd2219d2a5c1f8193d8f394ddb1279dee2b
+ ref: 330fa93d6e9003c0ea188b9e703f2b3f0448f8c8
required: false
diff --git a/dist/changes-5.12.10 b/dist/changes-5.12.10
new file mode 100644
index 000000000..95c6a0b2f
--- /dev/null
+++ b/dist/changes-5.12.10
@@ -0,0 +1,26 @@
+Qt 5.12.10 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.12.9.
+
+For more details, refer to the online documentation included in this
+distribution. The documentation is also available online:
+
+ https://doc.qt.io/qt-5.12/index.html
+
+The Qt version 5.12 series is binary compatible with the 5.11.x series.
+Applications compiled for 5.11 will continue to run with 5.12.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker:
+
+ https://bugreports.qt.io/
+
+Each of these identifiers can be entered in the bug tracker to obtain more
+information about a particular change.
+
+****************************************************************************
+* Important Behavior Changes *
+****************************************************************************
+
+****************************************************************************
+* Library *
+****************************************************************************
diff --git a/dist/changes-5.15.2 b/dist/changes-5.15.2
new file mode 100644
index 000000000..fe9d83781
--- /dev/null
+++ b/dist/changes-5.15.2
@@ -0,0 +1,72 @@
+Qt 5.15.2 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.15.1.
+
+For more details, refer to the online documentation included in this
+distribution. The documentation is also available online:
+
+ https://doc.qt.io/qt-5.15/index.html
+
+The Qt version 5.15 series is binary compatible with the 5.14.x series.
+Applications compiled for 5.14 will continue to run with 5.15.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker:
+
+ https://bugreports.qt.io/
+
+Each of these identifiers can be entered in the bug tracker to obtain more
+information about a particular change.
+
+****************************************************************************
+* Important Behavior Changes *
+****************************************************************************
+
+****************************************************************************
+* Library *
+****************************************************************************
+
+ - [QTBUG-87802] qdoc: Fix broken links generated by \sincelist
+ The combination of single-exec mode and outputting to subdirectories
+ (offline mode) made \sincelist generate href's to new classes and
+ functions that are missing the target subdirectory. This happened
+ because we did not pass the relative node to the function(s) that
+ generate that list - proper link resolution requires a check if the
+ page containing the \sincelist command comes from a different doc
+ module, and the relative node is used for that.
+ The bug was: qdoc: \sincelist generates broken links in certain
+ conditions
+ - [QTBUG-84703] qdoc: DocBook generator: Correctly handle enum classes
+ While commit 46f71fcc fixed handling of enum classes for the code
+ parser and marker, the DocBook generator has some dedicated code that
+ also needs to be amended.
+ The bug was: qdoc: DocBook generator: scoped enums not handled
+ correctly
+ - [QTBUG-86988] qdoc: DocBook generator: Remove code for encoding special characters
+ QXmlStreamWriter already handles this for us.
+ The bug was: qdoc: DocBook output format: XML special characters are
+ escaped twice
+ - [QTBUG-86759] Revert "macdeployqt: Don't copy .prl files into the Resources folder"
+ This was skipping other files from Resources/ as well, such as
+ “en-GB.pak” and “QtWebEngineProcess”. This reverts commit
+ aabba72f7965e06e2e6ed960d8cf8078249dac8c.
+ The bug was: Missing QtWebEngineProcess Application in application
+ frameworks
+ - [QTBUG-84727] QtHelp: Fix documentsFor() when not using filter engine
+ The bug was: QHelpIndexWidget does not emit documentActivated or
+ documentsActivated
+ - [QTBUG-86598] Assistant: fix build with QT_NO_CLIPBOARD
+ The bug was: Assistant fails to compile if QT_NO_CLIPBOARD is defined
+ - [QTBUG-86477] Fix static build of assistant
+ The bug was: [REG 5.15.0->5.15.1] assistant not build when building
+ whole Qt statically
+ - [QTBUG-86293] winrtrunner: Remove Windows Phone support
+ Windows Phone has not been supported for a while now. With newer
+ Windows versions the functionality causes issues. On build 1909 the
+ application hangs in CoUninitialize when called with --list-devices
+ and in build 2004 the needed classes are not registered at all.
+ The bug was: "winrtrunner --list-devices" hangs
+ - [QTBUG-86188] qdoc: Fix incorrect loop when processing tagged \fn parameters
+ This fixes ASSERT: "uint(i) < uint(size())" in file
+ qt5/qtbase/src/corelib/text/qstring.h, line 1067
+ The bug was: qdoc: Crash when using a tagged \fn command
+
diff --git a/dist/changes-6.0.0 b/dist/changes-6.0.0
new file mode 100644
index 000000000..c7d04efec
--- /dev/null
+++ b/dist/changes-6.0.0
@@ -0,0 +1,16 @@
+Qt 6.0.0 is a new major version release of Qt. It is not binary compatible with
+earlier Qt releases.
+
+The goal has been to retain as much source compatibility with Qt 5.15 as
+possible, but some changes were inevitable to make Qt a better framework.
+
+To make it easier to port to Qt 6.0, we have created a porting guide to
+summarize those changes and provide guidance to handle them. In the guide, you
+can find links to articles about changes that may affect your application and
+help you transition from Qt 5.15 to Qt 6.0:
+
+https://doc.qt.io/qt-6/portingguide.html
+
+For more details refer to the online documentation of Qt 6.0:
+
+https://doc.qt.io/qt-6/index.html
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index 8a360b99e..23b84c27c 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -1,15 +1,19 @@
-# Generated from examples.pro.
-
-qt_examples_build_begin()
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+qt_examples_build_begin(EXTERNAL_BUILD)
qt_exclude_tool_directories_from_default_target(
assistant
)
if(TARGET Qt::Widgets)
- add_subdirectory(help)
- add_subdirectory(linguist)
+ if(TARGET Qt::Help)
+ add_subdirectory(help)
+ endif()
+ if(QT_FEATURE_linguist)
+ add_subdirectory(linguist)
+ endif()
add_subdirectory(uitools)
endif()
if(QT_FEATURE_process AND TARGET Qt::Widgets)
diff --git a/examples/assistant/CMakeLists.txt b/examples/assistant/CMakeLists.txt
index bed9e1c4f..3d8c97dbb 100644
--- a/examples/assistant/CMakeLists.txt
+++ b/examples/assistant/CMakeLists.txt
@@ -1,4 +1,2 @@
-# Generated from assistant.pro.
-
-add_subdirectory(simpletextviewer)
-add_subdirectory(remotecontrol)
+qt_internal_add_example(simpletextviewer)
+qt_internal_add_example(remotecontrol)
diff --git a/examples/assistant/doc/src/remotecontrol.qdoc b/examples/assistant/doc/src/remotecontrol.qdoc
index c0bde2eb6..0462aae0e 100644
--- a/examples/assistant/doc/src/remotecontrol.qdoc
+++ b/examples/assistant/doc/src/remotecontrol.qdoc
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example remotecontrol
\ingroup examples-qtassistant
\title Remote Control Example
+ \examplecategory {Desktop}
\brief Using and controlling Qt Assistant as a help viewer.
*/
diff --git a/examples/assistant/doc/src/simpletextviewer.qdoc b/examples/assistant/doc/src/simpletextviewer.qdoc
index b8efba659..38c8d038b 100644
--- a/examples/assistant/doc/src/simpletextviewer.qdoc
+++ b/examples/assistant/doc/src/simpletextviewer.qdoc
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example simpletextviewer
\ingroup examples-qtassistant
\title Simple Text Viewer Example
+ \examplecategory {Desktop}
\brief Using \QA as a customized help viewer for your application.
diff --git a/examples/assistant/remotecontrol/CMakeLists.txt b/examples/assistant/remotecontrol/CMakeLists.txt
index 3e4627975..8afd64315 100644
--- a/examples/assistant/remotecontrol/CMakeLists.txt
+++ b/examples/assistant/remotecontrol/CMakeLists.txt
@@ -1,35 +1,36 @@
-# Generated from remotecontrol.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(remotecontrol LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
+ set(INSTALL_EXAMPLESDIR "examples")
endif()
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/assistant/remotecontrol")
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
-add_qt_gui_executable(remotecontrol
+qt_add_executable(remotecontrol
main.cpp
remotecontrol.cpp remotecontrol.h remotecontrol.ui
)
+
+set_target_properties(remotecontrol PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
target_link_libraries(remotecontrol PUBLIC
Qt::Core
Qt::Gui
Qt::Widgets
)
-
# Resources:
set(remotecontrol_resource_files
"enter.png"
diff --git a/examples/assistant/remotecontrol/main.cpp b/examples/assistant/remotecontrol/main.cpp
index ee5201b79..c4207e266 100644
--- a/examples/assistant/remotecontrol/main.cpp
+++ b/examples/assistant/remotecontrol/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "remotecontrol.h"
diff --git a/examples/assistant/remotecontrol/remotecontrol.cpp b/examples/assistant/remotecontrol/remotecontrol.cpp
index 916a08efd..b4d1fe085 100644
--- a/examples/assistant/remotecontrol/remotecontrol.cpp
+++ b/examples/assistant/remotecontrol/remotecontrol.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "remotecontrol.h"
@@ -54,30 +7,48 @@
#include <QLibraryInfo>
#include <QMessageBox>
#include <QProcess>
-#include <QTextStream>
-RemoteControl::RemoteControl(QWidget *parent, Qt::WindowFlags flags)
- : QMainWindow(parent, flags)
+using namespace Qt::StringLiterals;
+
+RemoteControl::RemoteControl()
{
ui.setupUi(this);
- connect(ui.indexLineEdit, SIGNAL(returnPressed()),
- this, SLOT(on_indexButton_clicked()));
- connect(ui.identifierLineEdit, SIGNAL(returnPressed()),
- this, SLOT(on_identifierButton_clicked()));
- connect(ui.urlLineEdit, SIGNAL(returnPressed()),
- this, SLOT(on_urlButton_clicked()));
+ connect(ui.launchButton, &QPushButton::clicked, this, &RemoteControl::onLaunchClicked);
+
+ connect(ui.indexButton, &QPushButton::clicked, this, &RemoteControl::onIndexClicked);
+ connect(ui.indexLineEdit, &QLineEdit::returnPressed, this, &RemoteControl::onIndexClicked);
+
+ connect(ui.idButton, &QPushButton::clicked, this, &RemoteControl::onIdClicked);
+ connect(ui.idLineEdit, &QLineEdit::returnPressed, this, &RemoteControl::onIdClicked);
+
+ connect(ui.urlButton, &QPushButton::clicked, this, &RemoteControl::onUrlClicked);
+ connect(ui.urlLineEdit, &QLineEdit::returnPressed, this, &RemoteControl::onUrlClicked);
+
+ connect(ui.syncContentsButton, &QPushButton::clicked, this,
+ [this] { sendCommand("SyncContents"_L1); });
- QString rc;
- QTextStream(&rc) << QLatin1String("qthelp://org.qt-project.qtdoc.")
- << (QT_VERSION >> 16) << ((QT_VERSION >> 8) & 0xFF)
- << (QT_VERSION & 0xFF)
- << QLatin1String("/qtdoc/index.html");
+ connect(ui.contentsCheckBox, &QCheckBox::toggled, this, [this](bool checked) {
+ sendCommand(checked ? "Show Contents"_L1 : "Hide Contents"_L1);
+ });
+ connect(ui.indexCheckBox, &QCheckBox::toggled, this,
+ [this](bool checked) { sendCommand(checked ? "Show Index"_L1 : "Hide Index"_L1); });
+ connect(ui.bookmarksCheckBox, &QCheckBox::toggled, this, [this](bool checked) {
+ sendCommand(checked ? "Show Bookmarks"_L1 : "Hide Bookmarks"_L1);
+ });
- ui.startUrlLineEdit->setText(rc);
+ connect(ui.actionQuit, &QAction::triggered, this, &QMainWindow::close);
+
+ const QString versionString = QString::number(QT_VERSION_MAJOR)
+ + QString::number(QT_VERSION_MINOR) + QString::number(QT_VERSION_PATCH);
+ ui.startUrlLineEdit->setText("qthelp://org.qt-project.qtdoc."_L1 + versionString
+ + "/qdoc/qdoc-index.html"_L1);
process = new QProcess(this);
- connect(process, SIGNAL(finished(int,QProcess::ExitStatus)),
- this, SLOT(helpViewerClosed()));
+ connect(process, &QProcess::finished, this, [this] {
+ ui.launchButton->setEnabled(true);
+ ui.startUrlLineEdit->setEnabled(true);
+ ui.actionGroupBox->setEnabled(false);
+ });
}
RemoteControl::~RemoteControl()
@@ -88,96 +59,55 @@ RemoteControl::~RemoteControl()
}
}
-void RemoteControl::on_actionQuit_triggered()
-{
- close();
-}
-
-void RemoteControl::on_launchButton_clicked()
+void RemoteControl::onLaunchClicked()
{
if (process->state() == QProcess::Running)
return;
- QString app = QLibraryInfo::location(QLibraryInfo::BinariesPath) + QDir::separator();
+ QString app = QLibraryInfo::path(QLibraryInfo::BinariesPath);
#if !defined(Q_OS_MAC)
- app += QLatin1String("assistant");
+ app += "/assistant"_L1;
#else
- app += QLatin1String("Assistant.app/Contents/MacOS/Assistant");
+ app += "/Assistant.app/Contents/MacOS/Assistant"_L1;
#endif
- ui.contentsCheckBox->setChecked(true);
- ui.indexCheckBox->setChecked(true);
- ui.bookmarksCheckBox->setChecked(true);
-
- QStringList args;
- args << QLatin1String("-enableRemoteControl");
- process->start(app, args);
+ process->start(app, {"-enableRemoteControl"_L1});
if (!process->waitForStarted()) {
QMessageBox::critical(this, tr("Remote Control"),
- tr("Could not start Qt Assistant from %1.").arg(app));
+ tr("Could not start Qt Assistant from %1.").arg(QDir::toNativeSeparators(app)));
return;
}
+ ui.contentsCheckBox->setChecked(true);
+ ui.indexCheckBox->setChecked(true);
+ ui.bookmarksCheckBox->setChecked(true);
+
if (!ui.startUrlLineEdit->text().isEmpty())
- sendCommand(QLatin1String("SetSource ")
- + ui.startUrlLineEdit->text());
+ sendCommand("SetSource "_L1 + ui.startUrlLineEdit->text());
ui.launchButton->setEnabled(false);
ui.startUrlLineEdit->setEnabled(false);
ui.actionGroupBox->setEnabled(true);
}
-void RemoteControl::sendCommand(const QString &cmd)
-{
- if (process->state() != QProcess::Running)
- return;
- process->write(cmd.toLocal8Bit() + '\n');
-}
-
-void RemoteControl::on_indexButton_clicked()
-{
- sendCommand(QLatin1String("ActivateKeyword ")
- + ui.indexLineEdit->text());
-}
-
-void RemoteControl::on_identifierButton_clicked()
-{
- sendCommand(QLatin1String("ActivateIdentifier ")
- + ui.identifierLineEdit->text());
-}
-
-void RemoteControl::on_urlButton_clicked()
+void RemoteControl::onIndexClicked()
{
- sendCommand(QLatin1String("SetSource ")
- + ui.urlLineEdit->text());
+ sendCommand("ActivateKeyword "_L1 + ui.indexLineEdit->text());
}
-void RemoteControl::on_syncContentsButton_clicked()
+void RemoteControl::onIdClicked()
{
- sendCommand(QLatin1String("SyncContents"));
+ sendCommand("ActivateIdentifier "_L1 + ui.idLineEdit->text());
}
-void RemoteControl::on_contentsCheckBox_toggled(bool checked)
+void RemoteControl::onUrlClicked()
{
- sendCommand(checked ?
- QLatin1String("Show Contents") : QLatin1String("Hide Contents"));
+ sendCommand("SetSource "_L1 + ui.urlLineEdit->text());
}
-void RemoteControl::on_indexCheckBox_toggled(bool checked)
-{
- sendCommand(checked ?
- QLatin1String("Show Index") : QLatin1String("Hide Index"));
-}
-
-void RemoteControl::on_bookmarksCheckBox_toggled(bool checked)
-{
- sendCommand(checked ?
- QLatin1String("Show Bookmarks") : QLatin1String("Hide Bookmarks"));
-}
-
-void RemoteControl::helpViewerClosed()
+void RemoteControl::sendCommand(const QString &cmd)
{
- ui.launchButton->setEnabled(true);
- ui.startUrlLineEdit->setEnabled(true);
- ui.actionGroupBox->setEnabled(false);
+ if (process->state() != QProcess::Running)
+ return;
+ process->write(cmd.toLocal8Bit() + '\n');
}
diff --git a/examples/assistant/remotecontrol/remotecontrol.h b/examples/assistant/remotecontrol/remotecontrol.h
index f59ffb7aa..ea707ba22 100644
--- a/examples/assistant/remotecontrol/remotecontrol.h
+++ b/examples/assistant/remotecontrol/remotecontrol.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef REMOTECONTROL_H
#define REMOTECONTROL_H
@@ -64,24 +17,18 @@ class RemoteControl : public QMainWindow
Q_OBJECT
public:
- RemoteControl(QWidget *parent = nullptr, Qt::WindowFlags flags = {});
+ RemoteControl();
~RemoteControl();
private:
Ui::RemoteControlClass ui;
QProcess *process;
-private slots:
- void on_launchButton_clicked();
- void on_actionQuit_triggered();
- void on_indexButton_clicked();
- void on_identifierButton_clicked();
- void on_urlButton_clicked();
- void on_syncContentsButton_clicked();
- void on_contentsCheckBox_toggled(bool checked);
- void on_indexCheckBox_toggled(bool checked);
- void on_bookmarksCheckBox_toggled(bool checked);
- void helpViewerClosed();
+private:
+ void onLaunchClicked();
+ void onIndexClicked();
+ void onIdClicked();
+ void onUrlClicked();
void sendCommand(const QString &cmd);
};
diff --git a/examples/assistant/remotecontrol/remotecontrol.ui b/examples/assistant/remotecontrol/remotecontrol.ui
index 1cfc7f540..525754710 100644
--- a/examples/assistant/remotecontrol/remotecontrol.ui
+++ b/examples/assistant/remotecontrol/remotecontrol.ui
@@ -109,10 +109,10 @@
<number>0</number>
</property>
<item>
- <widget class="QLineEdit" name="identifierLineEdit" />
+ <widget class="QLineEdit" name="idLineEdit" />
</item>
<item>
- <widget class="QToolButton" name="identifierButton" >
+ <widget class="QToolButton" name="idButton" >
<property name="text" >
<string/>
</property>
diff --git a/examples/assistant/simpletextviewer/.prev_CMakeLists.txt b/examples/assistant/simpletextviewer/.prev_CMakeLists.txt
deleted file mode 100644
index 21006b745..000000000
--- a/examples/assistant/simpletextviewer/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-# Generated from simpletextviewer.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(simpletextviewer LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/assistant/simpletextviewer")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
-
-add_qt_gui_executable(simpletextviewer
- assistant.cpp assistant.h
- findfiledialog.cpp findfiledialog.h
- main.cpp
- mainwindow.cpp mainwindow.h
- textedit.cpp textedit.h
-)
-target_compile_definitions(simpletextviewer PUBLIC
- SRCDIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/\\\"
-)
-
-target_link_libraries(simpletextviewer PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Widgets
-)
-
-install(TARGETS simpletextviewer
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/assistant/simpletextviewer/CMakeLists.txt b/examples/assistant/simpletextviewer/CMakeLists.txt
index 481d12a98..8d459a261 100644
--- a/examples/assistant/simpletextviewer/CMakeLists.txt
+++ b/examples/assistant/simpletextviewer/CMakeLists.txt
@@ -1,33 +1,34 @@
-# Generated from simpletextviewer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(simpletextviewer LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
+ set(INSTALL_EXAMPLESDIR "examples")
endif()
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/assistant/simpletextviewer")
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
-add_qt_gui_executable(simpletextviewer
+qt_add_executable(simpletextviewer
assistant.cpp assistant.h
findfiledialog.cpp findfiledialog.h
main.cpp
mainwindow.cpp mainwindow.h
textedit.cpp textedit.h
)
+
+set_target_properties(simpletextviewer PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
target_compile_definitions(simpletextviewer PUBLIC
- SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}/" # special case
+ SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}/"
)
target_link_libraries(simpletextviewer PUBLIC
diff --git a/examples/assistant/simpletextviewer/assistant.cpp b/examples/assistant/simpletextviewer/assistant.cpp
index d222bda6e..cd83723e9 100644
--- a/examples/assistant/simpletextviewer/assistant.cpp
+++ b/examples/assistant/simpletextviewer/assistant.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "assistant.h"
@@ -57,7 +10,7 @@
#include <QMessageBox>
#include <QStandardPaths>
-Assistant::Assistant() = default;
+using namespace Qt::StringLiterals;
//! [0]
Assistant::~Assistant()
@@ -83,40 +36,40 @@ void Assistant::showDocumentation(const QString &page)
}
//! [1]
-QString documentationDirectory()
+static QString documentationDirectory()
{
QStringList paths;
#ifdef SRCDIR
- paths.append(QLatin1String(SRCDIR));
+ paths.append(QLatin1StringView(SRCDIR));
#endif
- paths.append(QLibraryInfo::location(QLibraryInfo::ExamplesPath));
+ paths.append(QLibraryInfo::path(QLibraryInfo::ExamplesPath));
paths.append(QCoreApplication::applicationDirPath());
paths.append(QStandardPaths::standardLocations(QStandardPaths::AppDataLocation));
- for (const auto &dir : qAsConst(paths)) {
- const QString path = dir + QLatin1String("/documentation");
+ for (const auto &dir : std::as_const(paths)) {
+ const QString path = dir + "/documentation"_L1;
if (QFileInfo::exists(path))
return path;
}
- return QString();
+ return {};
}
//! [2]
bool Assistant::startAssistant()
{
if (m_process.isNull()) {
- m_process.reset(new QProcess());
+ m_process.reset(new QProcess);
QObject::connect(m_process.data(), &QProcess::finished,
m_process.data(), [this](int exitCode, QProcess::ExitStatus status) {
- this->finished(exitCode, status);
- });
+ finished(exitCode, status);
+ });
}
if (m_process->state() != QProcess::Running) {
- QString app = QLibraryInfo::location(QLibraryInfo::BinariesPath) + QDir::separator();
+ QString app = QLibraryInfo::path(QLibraryInfo::BinariesPath);
#ifndef Q_OS_DARWIN
- app += QLatin1String("assistant");
+ app += "/assistant"_L1;
#else
- app += QLatin1String("Assistant.app/Contents/MacOS/Assistant");
+ app += "/Assistant.app/Contents/MacOS/Assistant"_L1;
#endif
const QString collectionDirectory = documentationDirectory();
@@ -125,14 +78,15 @@ bool Assistant::startAssistant()
return false;
}
- QStringList args{QLatin1String("-collectionFile"),
- collectionDirectory + QLatin1String("/simpletextviewer.qhc"),
- QLatin1String("-enableRemoteControl")};
+ const QStringList args{"-collectionFile"_L1,
+ collectionDirectory + "/simpletextviewer.qhc"_L1,
+ "-enableRemoteControl"_L1};
m_process->start(app, args);
- if (!m_process->waitForStarted()) {
- showError(tr("Unable to launch Qt Assistant (%1): %2").arg(app, m_process->errorString()));
+ if (!m_process->waitForStarted(3000)) {
+ showError(tr("Unable to launch Qt Assistant (%1): %2")
+ .arg(QDir::toNativeSeparators(app), m_process->errorString()));
return false;
}
}
@@ -142,16 +96,14 @@ bool Assistant::startAssistant()
void Assistant::showError(const QString &message)
{
- QMessageBox::critical(QApplication::activeWindow(),
- tr("Simple Text Viewer"), message);
+ QMessageBox::critical(QApplication::activeWindow(), tr("Simple Text Viewer"), message);
}
void Assistant::finished(int exitCode, QProcess::ExitStatus status)
{
const QString stdErr = QString::fromLocal8Bit(m_process->readAllStandardError());
- if (status != QProcess::NormalExit) {
- showError(tr("Assistant crashed: ").arg(stdErr));
- } else if (exitCode != 0) {
+ if (status != QProcess::NormalExit)
+ showError(tr("Assistant crashed: %1").arg(stdErr));
+ else if (exitCode != 0)
showError(tr("Assistant exited with %1: %2").arg(exitCode).arg(stdErr));
- }
}
diff --git a/examples/assistant/simpletextviewer/assistant.h b/examples/assistant/simpletextviewer/assistant.h
index c513c3428..1cbc8b9e2 100644
--- a/examples/assistant/simpletextviewer/assistant.h
+++ b/examples/assistant/simpletextviewer/assistant.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef ASSISTANT_H
#define ASSISTANT_H
@@ -56,13 +9,11 @@
#include <QScopedPointer>
#include <QString>
-
class Assistant
{
Q_DECLARE_TR_FUNCTIONS(Assistant)
public:
- Assistant();
~Assistant();
void showDocumentation(const QString &file);
diff --git a/examples/assistant/simpletextviewer/findfiledialog.cpp b/examples/assistant/simpletextviewer/findfiledialog.cpp
index e17f7ec0f..7dccfb074 100644
--- a/examples/assistant/simpletextviewer/findfiledialog.cpp
+++ b/examples/assistant/simpletextviewer/findfiledialog.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "assistant.h"
#include "findfiledialog.h"
@@ -67,9 +20,9 @@
//! [0]
FindFileDialog::FindFileDialog(TextEdit *editor, Assistant *assistant)
: QDialog(editor)
+ , currentEditor(editor)
+ , currentAssistant(assistant)
{
- currentAssistant = assistant;
- currentEditor = editor;
//! [0]
createButtons();
@@ -89,8 +42,8 @@ FindFileDialog::FindFileDialog(TextEdit *editor, Assistant *assistant)
void FindFileDialog::browse()
{
- QString currentDirectory = directoryComboBox->currentText();
- QString newDirectory = QFileDialog::getExistingDirectory(this,
+ const QString currentDirectory = directoryComboBox->currentText();
+ const QString newDirectory = QFileDialog::getExistingDirectory(this,
tr("Select Directory"), currentDirectory);
if (!newDirectory.isEmpty()) {
directoryComboBox->addItem(QDir::toNativeSeparators(newDirectory));
@@ -108,22 +61,21 @@ void FindFileDialog::help()
void FindFileDialog::openFile()
{
- auto item = foundFilesTree->currentItem();
+ QTreeWidgetItem *item = foundFilesTree->currentItem();
if (!item)
return;
- QString fileName = item->text(0);
- QString path = directoryComboBox->currentText() + QDir::separator();
+ const QString fileName = item->text(0);
+ const QString path = QDir(directoryComboBox->currentText()).filePath(fileName);
- currentEditor->setContents(path + fileName);
+ currentEditor->setContents(path);
close();
}
void FindFileDialog::update()
{
findFiles();
- buttonBox->button(QDialogButtonBox::Open)->setEnabled(
- foundFilesTree->topLevelItemCount() > 0);
+ buttonBox->button(QDialogButtonBox::Open)->setEnabled(foundFilesTree->topLevelItemCount() > 0);
}
void FindFileDialog::findFiles()
@@ -131,9 +83,9 @@ void FindFileDialog::findFiles()
QString wildCard = fileNameComboBox->currentText();
if (!wildCard.endsWith('*'))
wildCard += '*';
- QRegularExpression filePattern(QRegularExpression::wildcardToRegularExpression(wildCard));
+ const QRegularExpression filePattern(QRegularExpression::wildcardToRegularExpression(wildCard));
- QDir directory(directoryComboBox->currentText());
+ const QDir directory(directoryComboBox->currentText());
const QStringList allFiles = directory.entryList(QDir::Files | QDir::NoSymLinks);
QStringList matchingFiles;
@@ -149,10 +101,8 @@ void FindFileDialog::showFiles(const QStringList &files)
{
foundFilesTree->clear();
- for (int i = 0; i < files.count(); ++i) {
- QTreeWidgetItem *item = new QTreeWidgetItem(foundFilesTree);
- item->setText(0, files[i]);
- }
+ for (const QString &file : files)
+ new QTreeWidgetItem(foundFilesTree, {file});
if (files.count() > 0)
foundFilesTree->setCurrentItem(foundFilesTree->topLevelItem(0));
@@ -178,19 +128,14 @@ void FindFileDialog::createComboBoxes()
fileNameComboBox = new QComboBox;
fileNameComboBox->setEditable(true);
- fileNameComboBox->setSizePolicy(QSizePolicy::Expanding,
- QSizePolicy::Preferred);
+ fileNameComboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
directoryComboBox->setMinimumContentsLength(30);
- directoryComboBox->setSizeAdjustPolicy(
- QComboBox::AdjustToContents);
- directoryComboBox->setSizePolicy(QSizePolicy::Expanding,
- QSizePolicy::Preferred);
-
- connect(fileNameComboBox, &QComboBox::editTextChanged,
- this, &FindFileDialog::update);
- connect(directoryComboBox, &QComboBox::currentTextChanged,
- this, &FindFileDialog::update);
+ directoryComboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
+ directoryComboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+
+ connect(fileNameComboBox, &QComboBox::editTextChanged, this, &FindFileDialog::update);
+ connect(directoryComboBox, &QComboBox::currentTextChanged, this, &FindFileDialog::update);
}
void FindFileDialog::createFilesTree()
@@ -201,8 +146,7 @@ void FindFileDialog::createFilesTree()
foundFilesTree->setRootIsDecorated(false);
foundFilesTree->setSelectionMode(QAbstractItemView::SingleSelection);
- connect(foundFilesTree, &QTreeWidget::itemActivated,
- this, &FindFileDialog::openFile);
+ connect(foundFilesTree, &QTreeWidget::itemActivated, this, &FindFileDialog::openFile);
}
void FindFileDialog::createLabels()
diff --git a/examples/assistant/simpletextviewer/findfiledialog.h b/examples/assistant/simpletextviewer/findfiledialog.h
index 605da0954..7e77938dd 100644
--- a/examples/assistant/simpletextviewer/findfiledialog.h
+++ b/examples/assistant/simpletextviewer/findfiledialog.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef FINDFILEDIALOG_H
#define FINDFILEDIALOG_H
@@ -59,7 +12,6 @@ class QDialogButtonBox;
class QLabel;
class QToolButton;
class QTreeWidget;
-class QTreeWidgetItem;
QT_END_NAMESPACE
class Assistant;
@@ -89,8 +41,8 @@ private:
void createLabels();
void createLayout();
- Assistant *currentAssistant;
TextEdit *currentEditor;
+ Assistant *currentAssistant;
QTreeWidget *foundFilesTree;
QComboBox *directoryComboBox;
diff --git a/examples/assistant/simpletextviewer/main.cpp b/examples/assistant/simpletextviewer/main.cpp
index 55c1039f8..fb0633cc4 100644
--- a/examples/assistant/simpletextviewer/main.cpp
+++ b/examples/assistant/simpletextviewer/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "mainwindow.h"
diff --git a/examples/assistant/simpletextviewer/mainwindow.cpp b/examples/assistant/simpletextviewer/mainwindow.cpp
index f70162c21..124596134 100644
--- a/examples/assistant/simpletextviewer/mainwindow.cpp
+++ b/examples/assistant/simpletextviewer/mainwindow.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "assistant.h"
#include "findfiledialog.h"
@@ -60,14 +13,16 @@
#include <QMenuBar>
#include <QMessageBox>
+using namespace Qt::StringLiterals;
+
// ![0]
MainWindow::MainWindow()
+ : textViewer(new TextEdit)
+ , assistant(new Assistant)
{
- assistant = new Assistant;
// ![0]
- textViewer = new TextEdit;
- textViewer->setContents(QLibraryInfo::location(QLibraryInfo::ExamplesPath)
- + QLatin1String("/assistant/simpletextviewer/documentation/intro.html"));
+ textViewer->setContents(QLibraryInfo::path(QLibraryInfo::ExamplesPath)
+ + "/assistant/simpletextviewer/documentation/intro.html"_L1);
setCentralWidget(textViewer);
createActions();
@@ -150,7 +105,6 @@ void MainWindow::createMenus()
helpMenu->addAction(aboutAct);
helpMenu->addAction(aboutQtAct);
-
menuBar()->addMenu(fileMenu);
menuBar()->addMenu(helpMenu);
}
diff --git a/examples/assistant/simpletextviewer/mainwindow.h b/examples/assistant/simpletextviewer/mainwindow.h
index 1c7f21761..59b5472f0 100644
--- a/examples/assistant/simpletextviewer/mainwindow.h
+++ b/examples/assistant/simpletextviewer/mainwindow.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
@@ -80,8 +33,8 @@ private:
void createActions();
void createMenus();
- Assistant *assistant;
TextEdit *textViewer;
+ Assistant *assistant;
QMenu *fileMenu;
QMenu *helpMenu;
diff --git a/examples/assistant/simpletextviewer/textedit.cpp b/examples/assistant/simpletextviewer/textedit.cpp
index 18cd767eb..2f52f73a1 100644
--- a/examples/assistant/simpletextviewer/textedit.cpp
+++ b/examples/assistant/simpletextviewer/textedit.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "textedit.h"
@@ -61,11 +14,11 @@ TextEdit::TextEdit(QWidget *parent)
void TextEdit::setContents(const QString &fileName)
{
- QFileInfo fi(fileName);
+ const QFileInfo fi(fileName);
srcUrl = QUrl::fromLocalFile(fi.absoluteFilePath());
QFile file(fileName);
if (file.open(QIODevice::ReadOnly)) {
- QString data(file.readAll());
+ const QString data(QString::fromUtf8(file.readAll()));
if (fileName.endsWith(".html"))
setHtml(data);
else
diff --git a/examples/assistant/simpletextviewer/textedit.h b/examples/assistant/simpletextviewer/textedit.h
index b1cb243fb..d75ce2b87 100644
--- a/examples/assistant/simpletextviewer/textedit.h
+++ b/examples/assistant/simpletextviewer/textedit.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef TEXTEDIT_H
#define TEXTEDIT_H
diff --git a/examples/designer/CMakeLists.txt b/examples/designer/CMakeLists.txt
index f5de4c52f..d7c90bda1 100644
--- a/examples/designer/CMakeLists.txt
+++ b/examples/designer/CMakeLists.txt
@@ -1,19 +1,18 @@
-# Generated from designer.pro.
-
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
qt_exclude_tool_directories_from_default_target(
containerextension
taskmenuextension
)
-add_subdirectory(calculatorform)
+qt_internal_add_example(calculatorform)
+qt_internal_add_example(calculatorform_mi)
if(QT_BUILD_SHARED_LIBS AND NOT solaris-cc_x_)
- add_subdirectory(calculatorbuilder)
- add_subdirectory(worldtimeclockbuilder)
+ qt_internal_add_example(calculatorbuilder)
endif()
-if(QT_BUILD_SHARED_LIBS)
- add_subdirectory(containerextension)
- add_subdirectory(customwidgetplugin)
- add_subdirectory(taskmenuextension)
- add_subdirectory(worldtimeclockplugin)
+if(QT_BUILD_SHARED_LIBS AND NOT CMAKE_CROSSCOMPILING)
+ qt_internal_add_example(containerextension)
+ qt_internal_add_example(customwidgetplugin)
+ qt_internal_add_example(taskmenuextension)
endif()
diff --git a/examples/designer/README b/examples/designer/README
index 922507442..239383445 100644
--- a/examples/designer/README
+++ b/examples/designer/README
@@ -1,6 +1,6 @@
-Qt Designer is a capable graphical user interface designer that lets you
+Qt Widgets Designer is a capable graphical user interface designer that lets you
create and configure forms without writing code. GUIs created with
-Qt Designer can be compiled into an application or created at run-time.
+Qt Widgets Designer can be compiled into an application or created at run-time.
Some of the examples in this directory can only be used from within Qt
Designer.
diff --git a/examples/designer/calculatorbuilder/CMakeLists.txt b/examples/designer/calculatorbuilder/CMakeLists.txt
index a053a0745..5aa0d90ea 100644
--- a/examples/designer/calculatorbuilder/CMakeLists.txt
+++ b/examples/designer/calculatorbuilder/CMakeLists.txt
@@ -1,41 +1,42 @@
-# Generated from calculatorbuilder.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(calculatorbuilder LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
+ set(INSTALL_EXAMPLESDIR "examples")
endif()
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/designer/calculatorbuilder")
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
-find_package(Qt6 COMPONENTS UiTools)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui UiTools Widgets)
+
+qt_add_executable(calculatorbuilder main.cpp)
-add_qt_gui_executable(calculatorbuilder
- calculatorform.cpp calculatorform.h
- main.cpp
+set_target_properties(calculatorbuilder PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
)
+
+#! [0]
target_link_libraries(calculatorbuilder PUBLIC
Qt::Core
Qt::Gui
Qt::UiTools
Qt::Widgets
)
-
+#! [0]
# Resources:
+#! [1]
set(calculatorbuilder_resource_files
"calculatorform.ui"
)
+#! [1]
qt6_add_resources(calculatorbuilder "calculatorbuilder"
PREFIX
diff --git a/examples/designer/calculatorbuilder/calculatorbuilder.pro b/examples/designer/calculatorbuilder/calculatorbuilder.pro
index 052dbd38a..740c31a6c 100644
--- a/examples/designer/calculatorbuilder/calculatorbuilder.pro
+++ b/examples/designer/calculatorbuilder/calculatorbuilder.pro
@@ -1,8 +1,6 @@
#! [0]
-HEADERS = calculatorform.h
RESOURCES = calculatorbuilder.qrc
-SOURCES = calculatorform.cpp \
- main.cpp
+SOURCES = main.cpp
QT += widgets uitools
#! [0]
diff --git a/examples/designer/calculatorbuilder/calculatorform.cpp b/examples/designer/calculatorbuilder/calculatorform.cpp
deleted file mode 100644
index 30a9ac665..000000000
--- a/examples/designer/calculatorbuilder/calculatorform.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//! [0]
-#include <QtUiTools>
-//! [0]
-#include <QSpinBox>
-#include <QLabel>
-#include <QVBoxLayout>
-#include <QFile>
-
-#include "calculatorform.h"
-
-//! [1]
-CalculatorForm::CalculatorForm(QWidget *parent)
- : QWidget(parent)
-{
- QUiLoader loader;
-
- QFile file(":/forms/calculatorform.ui");
- file.open(QFile::ReadOnly);
- QWidget *formWidget = loader.load(&file, this);
- file.close();
-//! [1]
-
-//! [2]
- ui_inputSpinBox1 = findChild<QSpinBox*>("inputSpinBox1");
- ui_inputSpinBox2 = findChild<QSpinBox*>("inputSpinBox2");
- ui_outputWidget = findChild<QLabel*>("outputWidget");
-//! [2]
-
-//! [3]
- QMetaObject::connectSlotsByName(this);
-//! [3]
-
-//! [4]
- QVBoxLayout *layout = new QVBoxLayout;
- layout->addWidget(formWidget);
- setLayout(layout);
-
- setWindowTitle(tr("Calculator Builder"));
-}
-//! [4]
-
-//! [5]
-void CalculatorForm::on_inputSpinBox1_valueChanged(int value)
-{
- ui_outputWidget->setText(QString::number(value + ui_inputSpinBox2->value()));
-}
-//! [5] //! [6]
-
-//! [6] //! [7]
-void CalculatorForm::on_inputSpinBox2_valueChanged(int value)
-{
- ui_outputWidget->setText(QString::number(value + ui_inputSpinBox1->value()));
-}
-//! [7]
diff --git a/examples/designer/calculatorbuilder/calculatorform.h b/examples/designer/calculatorbuilder/calculatorform.h
deleted file mode 100644
index 1a1f00c8c..000000000
--- a/examples/designer/calculatorbuilder/calculatorform.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef CALCULATORFORM_H
-#define CALCULATORFORM_H
-
-#include <QWidget>
-
-QT_BEGIN_NAMESPACE
-class QLabel;
-class QSpinBox;
-QT_END_NAMESPACE
-
-//! [0]
-class CalculatorForm : public QWidget
-{
- Q_OBJECT
-
-public:
- explicit CalculatorForm(QWidget *parent = nullptr);
-
-private slots:
- void on_inputSpinBox1_valueChanged(int value);
- void on_inputSpinBox2_valueChanged(int value);
-
-private:
- QSpinBox *ui_inputSpinBox1;
- QSpinBox *ui_inputSpinBox2;
- QLabel *ui_outputWidget;
-};
-//! [0]
-
-#endif
diff --git a/examples/designer/calculatorbuilder/main.cpp b/examples/designer/calculatorbuilder/main.cpp
index 82c0c6f58..78d071e4e 100644
--- a/examples/designer/calculatorbuilder/main.cpp
+++ b/examples/designer/calculatorbuilder/main.cpp
@@ -1,63 +1,67 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+//! [0]
+#include <QtUiTools>
+//! [0]
#include <QApplication>
+#include <QLabel>
+#include <QSpinBox>
+#include <QVBoxLayout>
-#include "calculatorform.h"
+#include <QFile>
-int main(int argc, char *argv[])
+#include <memory>
+
+using namespace Qt::StringLiterals;
+
+//! [1]
+static QWidget *loadCalculatorForm(QWidget *parent = nullptr)
{
- Q_INIT_RESOURCE(calculatorbuilder);
+ QUiLoader loader;
+
+ QFile file(u":/forms/calculatorform.ui"_s);
+ if (!file.open(QFile::ReadOnly))
+ return nullptr;
+ QWidget *formWidget = loader.load(&file, parent);
+ file.close();
+ if (formWidget == nullptr)
+ return nullptr;
+//! [1]
+
+//! [2]
+ auto *inputSpinBox1 = formWidget->findChild<QSpinBox*>(u"inputSpinBox1"_s);
+ auto *inputSpinBox2 = formWidget->findChild<QSpinBox*>(u"inputSpinBox2"_s);
+ auto *outputWidget = formWidget->findChild<QLabel*>(u"outputWidget"_s);
+//! [2]
+//! [3]
+ auto updateResult = [inputSpinBox1, inputSpinBox2, outputWidget]()
+ {
+ const int sum = inputSpinBox1->value() + inputSpinBox2->value();
+ outputWidget->setText(QString::number(sum));
+ };
+ QObject::connect(inputSpinBox1, &QSpinBox::valueChanged, formWidget, updateResult);
+ QObject::connect(inputSpinBox2, &QSpinBox::valueChanged, formWidget, updateResult);
+//! [3]
+
+ return formWidget;
+}
+
+int main(int argc, char *argv[])
+{
QApplication app(argc, argv);
- CalculatorForm calculator;
- calculator.show();
+ QWidget w;
+ auto *formWidget = loadCalculatorForm(&w);
+ if (formWidget == nullptr)
+ return -1;
+ //! [4]
+ auto *layout = new QVBoxLayout(&w);
+ layout->addWidget(formWidget);
+ w.setWindowTitle(QCoreApplication::translate("CalculatorForm",
+ "Calculator Builder"));
+ //! [4]
+ w.show();
return app.exec();
}
diff --git a/examples/designer/calculatorform/CMakeLists.txt b/examples/designer/calculatorform/CMakeLists.txt
index 7ec2b3407..c07ed3d69 100644
--- a/examples/designer/calculatorform/CMakeLists.txt
+++ b/examples/designer/calculatorform/CMakeLists.txt
@@ -1,28 +1,34 @@
-# Generated from calculatorform.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(calculatorform LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
+#! [0]
set(CMAKE_AUTOUIC ON)
+#! [0]
if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
+ set(INSTALL_EXAMPLESDIR "examples")
endif()
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/designer/calculatorform")
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
-add_qt_gui_executable(calculatorform
+#! [1]
+qt_add_executable(calculatorform
calculatorform.cpp calculatorform.h calculatorform.ui
main.cpp
)
+#! [1]
+
+set_target_properties(calculatorform PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
target_link_libraries(calculatorform PUBLIC
Qt::Core
Qt::Gui
diff --git a/examples/designer/calculatorform/calculatorform.cpp b/examples/designer/calculatorform/calculatorform.cpp
index 1b7ff26ba..24ce24a61 100644
--- a/examples/designer/calculatorform/calculatorform.cpp
+++ b/examples/designer/calculatorform/calculatorform.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "calculatorform.h"
@@ -55,19 +8,15 @@ CalculatorForm::CalculatorForm(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
+ connect(ui.inputSpinBox1, &QSpinBox::valueChanged, this, &CalculatorForm::updateResult);
+ connect(ui.inputSpinBox2, &QSpinBox::valueChanged, this, &CalculatorForm::updateResult);
}
//! [0]
//! [1]
-void CalculatorForm::on_inputSpinBox1_valueChanged(int value)
+void CalculatorForm::updateResult()
{
- ui.outputWidget->setText(QString::number(value + ui.inputSpinBox2->value()));
+ const int sum = ui.inputSpinBox1->value() + ui.inputSpinBox2->value();
+ ui.outputWidget->setText(QString::number(sum));
}
//! [1]
-
-//! [2]
-void CalculatorForm::on_inputSpinBox2_valueChanged(int value)
-{
- ui.outputWidget->setText(QString::number(value + ui.inputSpinBox1->value()));
-}
-//! [2]
diff --git a/examples/designer/calculatorform/calculatorform.h b/examples/designer/calculatorform/calculatorform.h
index a521b0c73..9224ba027 100644
--- a/examples/designer/calculatorform/calculatorform.h
+++ b/examples/designer/calculatorform/calculatorform.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef CALCULATORFORM_H
#define CALCULATORFORM_H
@@ -64,8 +17,7 @@ public:
explicit CalculatorForm(QWidget *parent = nullptr);
private slots:
- void on_inputSpinBox1_valueChanged(int value);
- void on_inputSpinBox2_valueChanged(int value);
+ void updateResult();
private:
Ui::CalculatorForm ui;
diff --git a/examples/designer/calculatorform/main.cpp b/examples/designer/calculatorform/main.cpp
index 10329f9c9..893c90bbe 100644
--- a/examples/designer/calculatorform/main.cpp
+++ b/examples/designer/calculatorform/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QApplication>
diff --git a/examples/designer/calculatorform_mi/CMakeLists.txt b/examples/designer/calculatorform_mi/CMakeLists.txt
new file mode 100644
index 000000000..1123a05ba
--- /dev/null
+++ b/examples/designer/calculatorform_mi/CMakeLists.txt
@@ -0,0 +1,38 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(calculatorform_mi LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTOUIC ON)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/designer/calculatorform_mi")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_add_executable(calculatorform_mi
+ calculatorform.cpp calculatorform.h calculatorform.ui
+ main.cpp
+)
+
+set_target_properties(calculatorform_mi PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(calculatorform_mi PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::Widgets
+)
+
+install(TARGETS calculatorform_mi
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/designer/calculatorform_mi/calculatorform.cpp b/examples/designer/calculatorform_mi/calculatorform.cpp
new file mode 100644
index 000000000..6a877de7e
--- /dev/null
+++ b/examples/designer/calculatorform_mi/calculatorform.cpp
@@ -0,0 +1,28 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "calculatorform.h"
+#include <QWidget>
+
+
+//! [0]
+CalculatorForm::CalculatorForm(QWidget *parent)
+ : QWidget(parent)
+{
+ setupUi(this);
+}
+//! [0]
+
+//! [1]
+void CalculatorForm::on_inputSpinBox1_valueChanged(int value)
+{
+ outputWidget->setText(QString::number(value + inputSpinBox2->value()));
+}
+//! [1]
+
+//! [2]
+void CalculatorForm::on_inputSpinBox2_valueChanged(int value)
+{
+ outputWidget->setText(QString::number(value + inputSpinBox1->value()));
+}
+//! [2]
diff --git a/examples/designer/calculatorform_mi/calculatorform.h b/examples/designer/calculatorform_mi/calculatorform.h
new file mode 100644
index 000000000..aba28c2ce
--- /dev/null
+++ b/examples/designer/calculatorform_mi/calculatorform.h
@@ -0,0 +1,25 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef CALCULATORFORM_H
+#define CALCULATORFORM_H
+
+//! [0]
+#include "ui_calculatorform.h"
+//! [0]
+
+//! [1]
+class CalculatorForm : public QWidget, private Ui::CalculatorForm
+{
+ Q_OBJECT
+
+public:
+ explicit CalculatorForm(QWidget *parent = nullptr);
+
+private slots:
+ void on_inputSpinBox1_valueChanged(int value);
+ void on_inputSpinBox2_valueChanged(int value);
+};
+//! [1]
+
+#endif
diff --git a/examples/designer/calculatorform_mi/calculatorform.ui b/examples/designer/calculatorform_mi/calculatorform.ui
new file mode 100644
index 000000000..9bcca91b2
--- /dev/null
+++ b/examples/designer/calculatorform_mi/calculatorform.ui
@@ -0,0 +1,303 @@
+<ui version="4.0" >
+ <author></author>
+ <comment></comment>
+ <exportmacro></exportmacro>
+ <class>CalculatorForm</class>
+ <widget class="QWidget" name="CalculatorForm" >
+ <property name="objectName" >
+ <string notr="true" >CalculatorForm</string>
+ </property>
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>276</width>
+ <height>98</height>
+ </rect>
+ </property>
+ <property name="sizePolicy" >
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="windowTitle" >
+ <string>Calculator Form</string>
+ </property>
+ <layout class="QGridLayout" >
+ <property name="objectName" >
+ <string notr="true" />
+ </property>
+ <property name="margin" >
+ <number>9</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item row="0" column="0" >
+ <layout class="QHBoxLayout" >
+ <property name="objectName" >
+ <string notr="true" />
+ </property>
+ <property name="margin" >
+ <number>1</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item>
+ <layout class="QVBoxLayout" >
+ <property name="objectName" >
+ <string notr="true" />
+ </property>
+ <property name="margin" >
+ <number>1</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="label" >
+ <property name="objectName" >
+ <string notr="true" >label</string>
+ </property>
+ <property name="geometry" >
+ <rect>
+ <x>1</x>
+ <y>1</y>
+ <width>45</width>
+ <height>19</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string>Input 1</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="inputSpinBox1" >
+ <property name="objectName" >
+ <string notr="true" >inputSpinBox1</string>
+ </property>
+ <property name="geometry" >
+ <rect>
+ <x>1</x>
+ <y>26</y>
+ <width>45</width>
+ <height>25</height>
+ </rect>
+ </property>
+ <property name="mouseTracking" >
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_3" >
+ <property name="objectName" >
+ <string notr="true" >label_3</string>
+ </property>
+ <property name="geometry" >
+ <rect>
+ <x>54</x>
+ <y>1</y>
+ <width>7</width>
+ <height>52</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string>+</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" >
+ <property name="objectName" >
+ <string notr="true" />
+ </property>
+ <property name="margin" >
+ <number>1</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="label_2" >
+ <property name="objectName" >
+ <string notr="true" >label_2</string>
+ </property>
+ <property name="geometry" >
+ <rect>
+ <x>1</x>
+ <y>1</y>
+ <width>45</width>
+ <height>19</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string>Input 2</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="inputSpinBox2" >
+ <property name="objectName" >
+ <string notr="true" >inputSpinBox2</string>
+ </property>
+ <property name="geometry" >
+ <rect>
+ <x>1</x>
+ <y>26</y>
+ <width>45</width>
+ <height>25</height>
+ </rect>
+ </property>
+ <property name="mouseTracking" >
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_3_2" >
+ <property name="objectName" >
+ <string notr="true" >label_3_2</string>
+ </property>
+ <property name="geometry" >
+ <rect>
+ <x>120</x>
+ <y>1</y>
+ <width>7</width>
+ <height>52</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string>=</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" >
+ <property name="objectName" >
+ <string notr="true" />
+ </property>
+ <property name="margin" >
+ <number>1</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="label_2_2_2" >
+ <property name="objectName" >
+ <string notr="true" >label_2_2_2</string>
+ </property>
+ <property name="geometry" >
+ <rect>
+ <x>1</x>
+ <y>1</y>
+ <width>37</width>
+ <height>17</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string>Output</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="outputWidget" >
+ <property name="objectName" >
+ <string notr="true" >outputWidget</string>
+ </property>
+ <property name="geometry" >
+ <rect>
+ <x>1</x>
+ <y>24</y>
+ <width>37</width>
+ <height>27</height>
+ </rect>
+ </property>
+ <property name="frameShape" >
+ <enum>QFrame::Box</enum>
+ </property>
+ <property name="frameShadow" >
+ <enum>QFrame::Sunken</enum>
+ </property>
+ <property name="text" >
+ <string>0</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignAbsolute|Qt::AlignBottom|Qt::AlignCenter|Qt::AlignHCenter|Qt::AlignHorizontal_Mask|Qt::AlignJustify|Qt::AlignLeading|Qt::AlignLeft|Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing|Qt::AlignVCenter|Qt::AlignVertical_Mask</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ <item row="1" column="0" >
+ <spacer>
+ <property name="objectName" >
+ <string notr="true" >verticalSpacer</string>
+ </property>
+ <property name="geometry" >
+ <rect>
+ <x>85</x>
+ <y>69</y>
+ <width>20</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="orientation" >
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" >
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="0" column="1" >
+ <spacer>
+ <property name="objectName" >
+ <string notr="true" >horizontalSpacer</string>
+ </property>
+ <property name="geometry" >
+ <rect>
+ <x>188</x>
+ <y>26</y>
+ <width>79</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" >
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ <pixmapfunction></pixmapfunction>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/examples/designer/calculatorform_mi/calculatorform_mi.pro b/examples/designer/calculatorform_mi/calculatorform_mi.pro
new file mode 100644
index 000000000..c0f50316e
--- /dev/null
+++ b/examples/designer/calculatorform_mi/calculatorform_mi.pro
@@ -0,0 +1,11 @@
+#! [0]
+QT += widgets
+
+HEADERS = calculatorform.h
+SOURCES = calculatorform.cpp main.cpp
+FORMS = calculatorform.ui
+#! [0]
+
+target.path = $$[QT_INSTALL_EXAMPLES]/designer/calculatorform_mi
+INSTALLS += target
+
diff --git a/examples/designer/calculatorform_mi/main.cpp b/examples/designer/calculatorform_mi/main.cpp
new file mode 100644
index 000000000..d6b0aee09
--- /dev/null
+++ b/examples/designer/calculatorform_mi/main.cpp
@@ -0,0 +1,15 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "calculatorform.h"
+#include <QApplication>
+
+//! [0]
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ CalculatorForm calculator;
+ calculator.show();
+ return app.exec();
+}
+//! [0]
diff --git a/examples/designer/containerextension/.prev_CMakeLists.txt b/examples/designer/containerextension/.prev_CMakeLists.txt
deleted file mode 100644
index 81f1de9eb..000000000
--- a/examples/designer/containerextension/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-# Generated from containerextension.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(containerextension LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
-find_package(Qt6 COMPONENTS Designer)
-
-add_qt_gui_executable(containerextension
- multipagewidget.cpp multipagewidget.h
- multipagewidgetcontainerextension.cpp multipagewidgetcontainerextension.h
- multipagewidgetextensionfactory.cpp multipagewidgetextensionfactory.h
- multipagewidgetplugin.cpp multipagewidgetplugin.h
-)
-target_link_libraries(containerextension PUBLIC
- Qt::Core
- Qt::Designer
- Qt::Gui
- Qt::Widgets
-)
-
-install(TARGETS containerextension
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/designer/containerextension/CMakeLists.txt b/examples/designer/containerextension/CMakeLists.txt
index e1c4d8a7e..2b2c150e3 100644
--- a/examples/designer/containerextension/CMakeLists.txt
+++ b/examples/designer/containerextension/CMakeLists.txt
@@ -1,43 +1,55 @@
-# Generated from containerextension.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(containerextension LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/plugins/designer") # special case
+#! [0]
+find_package(Qt6 REQUIRED COMPONENTS Core Designer Gui Widgets)
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
-find_package(Qt6 COMPONENTS Designer)
-
-# special case begin
qt_add_plugin(containerextension)
+#! [0]
+
+#! [1]
target_sources(containerextension PRIVATE
multipagewidget.cpp multipagewidget.h
multipagewidgetcontainerextension.cpp multipagewidgetcontainerextension.h
multipagewidgetextensionfactory.cpp multipagewidgetextensionfactory.h
multipagewidgetplugin.cpp multipagewidgetplugin.h
)
-# special case end
+#! [1]
+
+set_target_properties(containerextension PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+#! [2]
target_link_libraries(containerextension PUBLIC
Qt::Core
Qt::Designer
Qt::Gui
Qt::Widgets
)
+#! [2]
+
+if(QT6_INSTALL_PREFIX)
+#! [3]
+ set(INSTALL_EXAMPLEDIR "${QT6_INSTALL_PREFIX}/${QT6_INSTALL_PLUGINS}/designer")
+#! [3]
+else()
+ if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+ endif()
+ set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/plugins/designer")
+endif()
+#! [4]
install(TARGETS containerextension
RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
)
+#! [4]
diff --git a/examples/designer/containerextension/containerextension.pro b/examples/designer/containerextension/containerextension.pro
index 39b6dc2a2..bf7b18e97 100644
--- a/examples/designer/containerextension/containerextension.pro
+++ b/examples/designer/containerextension/containerextension.pro
@@ -1,12 +1,3 @@
-QTDIR_build {
-# This is only for the Qt build. Do not use externally. We mean it.
-PLUGIN_TYPE = designer
-PLUGIN_CLASS_NAME = MultiPageWidgetPlugin
-load(qt_plugin)
-CONFIG += install_ok
-} else {
-# Public example:
-
#! [0]
TEMPLATE = lib
CONFIG += plugin
@@ -14,10 +5,10 @@ CONFIG += plugin
TARGET = $$qtLibraryTarget($$TARGET)
+#! [3]
target.path = $$[QT_INSTALL_PLUGINS]/designer
INSTALLS += target
-
-}
+#! [3]
#! [1]
QT += widgets designer
diff --git a/examples/designer/containerextension/multipagewidget.cpp b/examples/designer/containerextension/multipagewidget.cpp
index d73d3972b..c4131ba67 100644
--- a/examples/designer/containerextension/multipagewidget.cpp
+++ b/examples/designer/containerextension/multipagewidget.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QComboBox>
#include <QVBoxLayout>
@@ -59,19 +12,19 @@ MultiPageWidget::MultiPageWidget(QWidget *parent)
, stackWidget(new QStackedWidget)
, comboBox(new QComboBox)
{
- comboBox->setObjectName(QStringLiteral("__qt__passive_comboBox"));
+ comboBox->setObjectName("__qt__passive_comboBox");
- connect(comboBox, QOverload<int>::of(&QComboBox::activated),
+ connect(comboBox, &QComboBox::activated,
this, &MultiPageWidget::setCurrentIndex);
- QVBoxLayout *layout = new QVBoxLayout(this);
+ auto *layout = new QVBoxLayout(this);
layout->addWidget(comboBox);
layout->addWidget(stackWidget);
}
QSize MultiPageWidget::sizeHint() const
{
- return QSize(200, 150);
+ return {200, 150};
}
void MultiPageWidget::addPage(QWidget *page)
@@ -81,7 +34,7 @@ void MultiPageWidget::addPage(QWidget *page)
void MultiPageWidget::removePage(int index)
{
- QWidget *widget = stackWidget->widget(index);
+ auto *widget = stackWidget->widget(index);
stackWidget->removeWidget(widget);
comboBox->removeItem(index);
@@ -138,10 +91,10 @@ QString MultiPageWidget::pageTitle() const
{
if (const QWidget *currentWidget = stackWidget->currentWidget())
return currentWidget->windowTitle();
- return QString();
+ return {};
}
-void MultiPageWidget::setPageTitle(QString const &newTitle)
+void MultiPageWidget::setPageTitle(const QString &newTitle)
{
if (QWidget *currentWidget = stackWidget->currentWidget())
currentWidget->setWindowTitle(newTitle);
diff --git a/examples/designer/containerextension/multipagewidget.h b/examples/designer/containerextension/multipagewidget.h
index ed83fc3aa..788aaa67e 100644
--- a/examples/designer/containerextension/multipagewidget.h
+++ b/examples/designer/containerextension/multipagewidget.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef MULTIPAGEWIDGET_H
#define MULTIPAGEWIDGET_H
@@ -79,7 +32,7 @@ public slots:
void addPage(QWidget *page);
void insertPage(int index, QWidget *page);
void removePage(int index);
- void setPageTitle(QString const &newTitle);
+ void setPageTitle(const QString &newTitle);
void setCurrentIndex(int index);
private slots:
diff --git a/examples/designer/containerextension/multipagewidgetcontainerextension.cpp b/examples/designer/containerextension/multipagewidgetcontainerextension.cpp
index 2c8eff6bd..d94e91a0e 100644
--- a/examples/designer/containerextension/multipagewidgetcontainerextension.cpp
+++ b/examples/designer/containerextension/multipagewidgetcontainerextension.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "multipagewidgetcontainerextension.h"
#include "multipagewidget.h"
diff --git a/examples/designer/containerextension/multipagewidgetcontainerextension.h b/examples/designer/containerextension/multipagewidgetcontainerextension.h
index 47814c692..cecef3650 100644
--- a/examples/designer/containerextension/multipagewidgetcontainerextension.h
+++ b/examples/designer/containerextension/multipagewidgetcontainerextension.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef MULTIPAGEWIDGETCONTAINEREXTENSION_H
#define MULTIPAGEWIDGETCONTAINEREXTENSION_H
diff --git a/examples/designer/containerextension/multipagewidgetextensionfactory.cpp b/examples/designer/containerextension/multipagewidgetextensionfactory.cpp
index 09c228e87..746fe3111 100644
--- a/examples/designer/containerextension/multipagewidgetextensionfactory.cpp
+++ b/examples/designer/containerextension/multipagewidgetextensionfactory.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "multipagewidgetextensionfactory.h"
#include "multipagewidgetcontainerextension.h"
@@ -63,7 +16,7 @@ QObject *MultiPageWidgetExtensionFactory::createExtension(QObject *object,
const QString &iid,
QObject *parent) const
{
- MultiPageWidget *widget = qobject_cast<MultiPageWidget*>(object);
+ auto *widget = qobject_cast<MultiPageWidget*>(object);
if (widget && (iid == Q_TYPEID(QDesignerContainerExtension)))
return new MultiPageWidgetContainerExtension(widget, parent);
diff --git a/examples/designer/containerextension/multipagewidgetextensionfactory.h b/examples/designer/containerextension/multipagewidgetextensionfactory.h
index bb26f40eb..9610715d6 100644
--- a/examples/designer/containerextension/multipagewidgetextensionfactory.h
+++ b/examples/designer/containerextension/multipagewidgetextensionfactory.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef MULTIPAGEWIDGETEXTENSIONFACTORY_H
#define MULTIPAGEWIDGETEXTENSIONFACTORY_H
diff --git a/examples/designer/containerextension/multipagewidgetplugin.cpp b/examples/designer/containerextension/multipagewidgetplugin.cpp
index d29043ecf..fe0e8da16 100644
--- a/examples/designer/containerextension/multipagewidgetplugin.cpp
+++ b/examples/designer/containerextension/multipagewidgetplugin.cpp
@@ -1,52 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "multipagewidget.h"
+#include "multipagewidgetplugin.h"
+#include "multipagewidgetextensionfactory.h"
#include <QtDesigner/QExtensionFactory>
#include <QtDesigner/QExtensionManager>
@@ -58,9 +15,7 @@
#include <QIcon>
#include <QtPlugin>
-#include "multipagewidget.h"
-#include "multipagewidgetplugin.h"
-#include "multipagewidgetextensionfactory.h"
+using namespace Qt::StringLiterals;
//! [0]
MultiPageWidgetPlugin::MultiPageWidgetPlugin(QObject *parent)
@@ -70,32 +25,32 @@ MultiPageWidgetPlugin::MultiPageWidgetPlugin(QObject *parent)
QString MultiPageWidgetPlugin::name() const
{
- return QLatin1String("MultiPageWidget");
+ return u"MultiPageWidget"_s;
}
QString MultiPageWidgetPlugin::group() const
{
- return QLatin1String("Display Widgets [Examples]");
+ return u"Display Widgets [Examples]"_s;
}
QString MultiPageWidgetPlugin::toolTip() const
{
- return QString();
+ return {};
}
QString MultiPageWidgetPlugin::whatsThis() const
{
- return QString();
+ return {};
}
QString MultiPageWidgetPlugin::includeFile() const
{
- return QLatin1String("multipagewidget.h");
+ return u"multipagewidget.h"_s;
}
QIcon MultiPageWidgetPlugin::icon() const
{
- return QIcon();
+ return {};
}
//! [0] //! [1]
@@ -107,7 +62,7 @@ bool MultiPageWidgetPlugin::isContainer() const
//! [1] //! [2]
QWidget *MultiPageWidgetPlugin::createWidget(QWidget *parent)
{
- MultiPageWidget *widget = new MultiPageWidget(parent);
+ auto *widget = new MultiPageWidget(parent);
connect(widget, &MultiPageWidget::currentIndexChanged,
this, &MultiPageWidgetPlugin::currentIndexChanged);
connect(widget, &MultiPageWidget::pageTitleChanged,
@@ -130,11 +85,11 @@ void MultiPageWidgetPlugin::initialize(QDesignerFormEditorInterface *formEditor)
//! [4]
//! [5]
- QExtensionManager *manager = formEditor->extensionManager();
+ auto *manager = formEditor->extensionManager();
//! [5] //! [6]
- QExtensionFactory *factory = new MultiPageWidgetExtensionFactory(manager);
+ auto *factory = new MultiPageWidgetExtensionFactory(manager);
- Q_ASSERT(manager != 0);
+ Q_ASSERT(manager != nullptr);
manager->registerExtensions(factory, Q_TYPEID(QDesignerContainerExtension));
initialized = true;
@@ -144,19 +99,19 @@ void MultiPageWidgetPlugin::initialize(QDesignerFormEditorInterface *formEditor)
//! [7]
QString MultiPageWidgetPlugin::domXml() const
{
- return QLatin1String("\
-<ui language=\"c++\">\
- <widget class=\"MultiPageWidget\" name=\"multipagewidget\">\
- <widget class=\"QWidget\" name=\"page\" />\
- </widget>\
- <customwidgets>\
- <customwidget>\
- <class>MultiPageWidget</class>\
- <extends>QWidget</extends>\
- <addpagemethod>addPage</addpagemethod>\
- </customwidget>\
- </customwidgets>\
-</ui>");
+ return uR"(
+<ui language="c++">
+ <widget class="MultiPageWidget" name="multipagewidget">
+ <widget class="QWidget" name="page"/>
+ </widget>
+ <customwidgets>
+ <customwidget>
+ <class>MultiPageWidget</class>
+ <extends>QWidget</extends>
+ <addpagemethod>addPage</addpagemethod>
+ </customwidget>
+ </customwidgets>
+</ui>)"_s;
}
//! [7]
@@ -164,10 +119,10 @@ QString MultiPageWidgetPlugin::domXml() const
void MultiPageWidgetPlugin::currentIndexChanged(int index)
{
Q_UNUSED(index);
- MultiPageWidget *widget = qobject_cast<MultiPageWidget*>(sender());
+ auto *widget = qobject_cast<MultiPageWidget*>(sender());
//! [8] //! [9]
if (widget) {
- QDesignerFormWindowInterface *form = QDesignerFormWindowInterface::findFormWindow(widget);
+ auto *form = QDesignerFormWindowInterface::findFormWindow(widget);
if (form)
form->emitSelectionChanged();
}
@@ -178,20 +133,18 @@ void MultiPageWidgetPlugin::currentIndexChanged(int index)
void MultiPageWidgetPlugin::pageTitleChanged(const QString &title)
{
Q_UNUSED(title);
- MultiPageWidget *widget = qobject_cast<MultiPageWidget*>(sender());
+ auto *widget = qobject_cast<MultiPageWidget*>(sender());
//! [10] //! [11]
if (widget) {
- QWidget *page = widget->widget(widget->currentIndex());
- QDesignerFormWindowInterface *form;
- form = QDesignerFormWindowInterface::findFormWindow(widget);
+ auto *page = widget->widget(widget->currentIndex());
+ auto *form = QDesignerFormWindowInterface::findFormWindow(widget);
//! [11]
if (form) {
//! [12]
- QDesignerFormEditorInterface *editor = form->core();
- QExtensionManager *manager = editor->extensionManager();
+ auto *editor = form->core();
+ auto *manager = editor->extensionManager();
//! [12] //! [13]
- QDesignerPropertySheetExtension *sheet;
- sheet = qt_extension<QDesignerPropertySheetExtension*>(manager, page);
+ auto *sheet = qt_extension<QDesignerPropertySheetExtension*>(manager, page);
const int propertyIndex = sheet->indexOf(QLatin1String("windowTitle"));
sheet->setChanged(propertyIndex, true);
}
diff --git a/examples/designer/containerextension/multipagewidgetplugin.h b/examples/designer/containerextension/multipagewidgetplugin.h
index a5dace524..f26f74320 100644
--- a/examples/designer/containerextension/multipagewidgetplugin.h
+++ b/examples/designer/containerextension/multipagewidgetplugin.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
#ifndef MULTIPAGEWIDGETPLUGIN_H
diff --git a/examples/designer/customwidgetplugin/.prev_CMakeLists.txt b/examples/designer/customwidgetplugin/.prev_CMakeLists.txt
deleted file mode 100644
index c241f2422..000000000
--- a/examples/designer/customwidgetplugin/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-# Generated from customwidgetplugin.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(customwidgetplugin LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
-find_package(Qt6 COMPONENTS UiPlugin)
-
-add_qt_gui_executable(customwidgetplugin
- analogclock.cpp analogclock.h
- customwidgetplugin.cpp customwidgetplugin.h
-)
-target_link_libraries(customwidgetplugin PUBLIC
- Qt::Core
- Qt::Gui
- Qt::UiPlugin
- Qt::Widgets
-)
-
-install(TARGETS customwidgetplugin
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/designer/customwidgetplugin/CMakeLists.txt b/examples/designer/customwidgetplugin/CMakeLists.txt
index 0c7b7aefa..259661c1f 100644
--- a/examples/designer/customwidgetplugin/CMakeLists.txt
+++ b/examples/designer/customwidgetplugin/CMakeLists.txt
@@ -1,41 +1,53 @@
-# Generated from customwidgetplugin.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(customwidgetplugin LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/plugins/designer") # special case
+#! [0]
+find_package(Qt6 REQUIRED COMPONENTS Core Gui UiPlugin Widgets)
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
-find_package(Qt6 COMPONENTS UiPlugin)
-
-# special case begin
qt_add_plugin(customwidgetplugin)
+#! [0]
+
+#! [1]
target_sources(customwidgetplugin PRIVATE
analogclock.cpp analogclock.h
customwidgetplugin.cpp customwidgetplugin.h
)
-# special case end
+#! [1]
+
+set_target_properties(customwidgetplugin PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+#! [2]
target_link_libraries(customwidgetplugin PUBLIC
Qt::Core
Qt::Gui
Qt::UiPlugin
Qt::Widgets
)
+#! [2]
+
+if(QT6_INSTALL_PREFIX)
+#! [3]
+ set(INSTALL_EXAMPLEDIR "${QT6_INSTALL_PREFIX}/${QT6_INSTALL_PLUGINS}/designer")
+#! [3]
+else()
+ if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+ endif()
+ set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/plugins/designer")
+endif()
+#! [4]
install(TARGETS customwidgetplugin
RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
)
+#! [4]
diff --git a/examples/designer/customwidgetplugin/analogclock.cpp b/examples/designer/customwidgetplugin/analogclock.cpp
index 713d24e5e..590fe6efa 100644
--- a/examples/designer/customwidgetplugin/analogclock.cpp
+++ b/examples/designer/customwidgetplugin/analogclock.cpp
@@ -1,57 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "analogclock.h"
#include <QMouseEvent>
#include <QPainter>
+
#include <QTime>
#include <QTimer>
@@ -59,7 +13,7 @@ AnalogClock::AnalogClock(QWidget *parent)
: QWidget(parent)
{
QTimer *timer = new QTimer(this);
- connect(timer, &QTimer::timeout, this, QOverload<>::of(&QWidget::update));
+ connect(timer, &QTimer::timeout, this, qOverload<>(&QWidget::update));
timer->start(1000);
setWindowTitle(tr("Analog Clock"));
@@ -68,56 +22,71 @@ AnalogClock::AnalogClock(QWidget *parent)
void AnalogClock::paintEvent(QPaintEvent *)
{
- static const QPoint hourHand[3] = {
- QPoint(7, 8),
- QPoint(-7, 8),
- QPoint(0, -40)
+ static const QPoint hourHand[4] = {
+ QPoint(5, 14),
+ QPoint(-5, 14),
+ QPoint(-4, -71),
+ QPoint(4, -71)
+ };
+ static const QPoint minuteHand[4] = {
+ QPoint(4, 14),
+ QPoint(-4, 14),
+ QPoint(-3, -89),
+ QPoint(3, -89)
};
- static const QPoint minuteHand[3] = {
- QPoint(7, 8),
- QPoint(-7, 8),
- QPoint(0, -70)
+ static const QPoint secondsHand[4] = {
+ QPoint(1, 14),
+ QPoint(-1, 14),
+ QPoint(-1, -89),
+ QPoint(1, -89)
};
- QColor hourColor(127, 0, 127);
- QColor minuteColor(0, 127, 127, 191);
+ const QColor hourColor(palette().color(QPalette::Text));
+ const QColor minuteColor(palette().color(QPalette::Text));
+ const QColor secondsColor(palette().color(QPalette::Accent));
int side = qMin(width(), height());
- QTime time = QTime::currentTime();
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.translate(width() / 2, height() / 2);
painter.scale(side / 200.0, side / 200.0);
+ QTime time = QTime::currentTime();
+
painter.setPen(Qt::NoPen);
painter.setBrush(hourColor);
painter.save();
painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)));
- painter.drawConvexPolygon(hourHand, 3);
+ painter.drawConvexPolygon(hourHand, 4);
painter.restore();
- painter.setPen(hourColor);
-
for (int i = 0; i < 12; ++i) {
- painter.drawLine(88, 0, 96, 0);
+ painter.drawRect(73, -3, 16, 6);
painter.rotate(30.0);
}
- painter.setPen(Qt::NoPen);
painter.setBrush(minuteColor);
painter.save();
- painter.rotate(6.0 * (time.minute() + time.second() / 60.0));
- painter.drawConvexPolygon(minuteHand, 3);
+ painter.rotate(6.0 * time.minute());
+ painter.drawConvexPolygon(minuteHand, 4);
+ painter.restore();
+
+ painter.setBrush(secondsColor);
+
+ painter.save();
+ painter.rotate(6.0 * time.second());
+ painter.drawConvexPolygon(secondsHand, 4);
+ painter.drawEllipse(-3, -3, 6, 6);
+ painter.drawEllipse(-5, -68, 10, 10);
painter.restore();
painter.setPen(minuteColor);
for (int j = 0; j < 60; ++j) {
- if ((j % 5) != 0)
- painter.drawLine(92, 0, 96, 0);
+ painter.drawLine(92, 0, 96, 0);
painter.rotate(6.0);
}
}
diff --git a/examples/designer/customwidgetplugin/analogclock.h b/examples/designer/customwidgetplugin/analogclock.h
index cf2d854b3..c3eabf584 100644
--- a/examples/designer/customwidgetplugin/analogclock.h
+++ b/examples/designer/customwidgetplugin/analogclock.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef ANALOGCLOCK_H
#define ANALOGCLOCK_H
@@ -54,15 +7,19 @@
#include <QWidget>
#include <QtUiPlugin/QDesignerExportWidget>
+//! [0]
class QDESIGNER_WIDGET_EXPORT AnalogClock : public QWidget
{
Q_OBJECT
+//! [0]
public:
explicit AnalogClock(QWidget *parent = nullptr);
protected:
void paintEvent(QPaintEvent *event) override;
+//! [1]
};
+//! [1]
#endif
diff --git a/examples/designer/customwidgetplugin/customwidgetplugin.cpp b/examples/designer/customwidgetplugin/customwidgetplugin.cpp
index a3d75d311..b85bf4ca0 100644
--- a/examples/designer/customwidgetplugin/customwidgetplugin.cpp
+++ b/examples/designer/customwidgetplugin/customwidgetplugin.cpp
@@ -1,58 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "analogclock.h"
#include "customwidgetplugin.h"
#include <QtPlugin>
+using namespace Qt::StringLiterals;
+
//! [0]
AnalogClockPlugin::AnalogClockPlugin(QObject *parent)
: QObject(parent)
@@ -87,35 +42,35 @@ QWidget *AnalogClockPlugin::createWidget(QWidget *parent)
//! [4]
QString AnalogClockPlugin::name() const
{
- return QStringLiteral("AnalogClock");
+ return u"AnalogClock"_s;
}
//! [4]
//! [5]
QString AnalogClockPlugin::group() const
{
- return QStringLiteral("Display Widgets [Examples]");
+ return u"Display Widgets [Examples]"_s;
}
//! [5]
//! [6]
QIcon AnalogClockPlugin::icon() const
{
- return QIcon();
+ return {};
}
//! [6]
//! [7]
QString AnalogClockPlugin::toolTip() const
{
- return QString();
+ return {};
}
//! [7]
//! [8]
QString AnalogClockPlugin::whatsThis() const
{
- return QString();
+ return {};
}
//! [8]
@@ -129,32 +84,38 @@ bool AnalogClockPlugin::isContainer() const
//! [10]
QString AnalogClockPlugin::domXml() const
{
- return "<ui language=\"c++\">\n"
- " <widget class=\"AnalogClock\" name=\"analogClock\">\n"
+ return uR"(
+<ui language="c++">
+ <widget class="AnalogClock" name="analogClock">
+)"
//! [11]
- " <property name=\"geometry\">\n"
- " <rect>\n"
- " <x>0</x>\n"
- " <y>0</y>\n"
- " <width>100</width>\n"
- " <height>100</height>\n"
- " </rect>\n"
- " </property>\n"
+R"(
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>100</width>
+ <height>100</height>
+ </rect>
+ </property>
+")
//! [11]
- " <property name=\"toolTip\" >\n"
- " <string>The current time</string>\n"
- " </property>\n"
- " <property name=\"whatsThis\" >\n"
- " <string>The analog clock widget displays the current time.</string>\n"
- " </property>\n"
- " </widget>\n"
- "</ui>\n";
+R"(
+ <property name="toolTip">
+ <string>The current time</string>
+ </property>
+ <property name="whatsThis">
+ <string>The analog clock widget displays the current time.</string>
+ </property>
+ </widget>
+</ui>
+)"_s;
}
//! [10]
//! [12]
QString AnalogClockPlugin::includeFile() const
{
- return QStringLiteral("analogclock.h");
+ return u"analogclock.h"_s;
}
//! [12]
diff --git a/examples/designer/customwidgetplugin/customwidgetplugin.h b/examples/designer/customwidgetplugin/customwidgetplugin.h
index d9b7c022b..90afe4250 100644
--- a/examples/designer/customwidgetplugin/customwidgetplugin.h
+++ b/examples/designer/customwidgetplugin/customwidgetplugin.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef CUSTOMWIDGETPLUGIN_H
#define CUSTOMWIDGETPLUGIN_H
diff --git a/examples/designer/customwidgetplugin/customwidgetplugin.pro b/examples/designer/customwidgetplugin/customwidgetplugin.pro
index 1447acdc4..07428304b 100644
--- a/examples/designer/customwidgetplugin/customwidgetplugin.pro
+++ b/examples/designer/customwidgetplugin/customwidgetplugin.pro
@@ -1,32 +1,23 @@
-#! [0]
+#! [1]
QT += widgets uiplugin
-#! [0]
+#! [1]
-QTDIR_build {
-# This is only for the Qt build. Do not use externally. We mean it.
-PLUGIN_TYPE = designer
-PLUGIN_CLASS_NAME = AnalogClockPlugin
-load(qt_plugin)
-CONFIG += install_ok
-} else {
-# Public example:
-
-#! [2]
+#! [0]
CONFIG += plugin
TEMPLATE = lib
-#! [2]
+#! [0]
+#! [3]
TARGET = $$qtLibraryTarget($$TARGET)
target.path = $$[QT_INSTALL_PLUGINS]/designer
INSTALLS += target
-
-}
-
#! [3]
+
+#! [2]
HEADERS = analogclock.h \
customwidgetplugin.h
SOURCES = analogclock.cpp \
customwidgetplugin.cpp
OTHER_FILES += analogclock.json
-#! [3]
+#! [2]
diff --git a/examples/designer/designer.pro b/examples/designer/designer.pro
index 3ffd443e1..3f2f6367f 100644
--- a/examples/designer/designer.pro
+++ b/examples/designer/designer.pro
@@ -1,20 +1,14 @@
TEMPLATE = subdirs
-SUBDIRS = calculatorform
+SUBDIRS = calculatorform \
+ calculatorform_mi
!contains(CONFIG, static) {
SUBDIRS += calculatorbuilder \
containerextension \
customwidgetplugin \
- taskmenuextension \
- worldtimeclockbuilder \
- worldtimeclockplugin
+ taskmenuextension
}
# the sun cc compiler has a problem with the include lines for the form.prf
solaris-cc*:SUBDIRS -= calculatorbuilder \
worldtimeclockbuilder
-
-qtNomakeTools( \
- containerextension \
- taskmenuextension \
-)
diff --git a/examples/designer/doc/images/arthurplugin-demo.png b/examples/designer/doc/images/arthurplugin-demo.png
deleted file mode 100644
index 6d372c258..000000000
--- a/examples/designer/doc/images/arthurplugin-demo.png
+++ /dev/null
Binary files differ
diff --git a/examples/designer/doc/images/calculatorbuilder-example.png b/examples/designer/doc/images/calculatorbuilder-example.png
deleted file mode 100644
index 561e50005..000000000
--- a/examples/designer/doc/images/calculatorbuilder-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/designer/doc/images/calculatorbuilder-example.webp b/examples/designer/doc/images/calculatorbuilder-example.webp
new file mode 100644
index 000000000..2dabb43e9
--- /dev/null
+++ b/examples/designer/doc/images/calculatorbuilder-example.webp
Binary files differ
diff --git a/examples/designer/doc/images/calculatorform-example.png b/examples/designer/doc/images/calculatorform-example.png
deleted file mode 100644
index 91432ac8b..000000000
--- a/examples/designer/doc/images/calculatorform-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/designer/doc/images/calculatorform-example.webp b/examples/designer/doc/images/calculatorform-example.webp
new file mode 100644
index 000000000..30fea1ca4
--- /dev/null
+++ b/examples/designer/doc/images/calculatorform-example.webp
Binary files differ
diff --git a/examples/designer/doc/images/containerextension-example.png b/examples/designer/doc/images/containerextension-example.png
deleted file mode 100644
index 2427f9101..000000000
--- a/examples/designer/doc/images/containerextension-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/designer/doc/images/containerextension-example.webp b/examples/designer/doc/images/containerextension-example.webp
new file mode 100644
index 000000000..b4fe4fde2
--- /dev/null
+++ b/examples/designer/doc/images/containerextension-example.webp
Binary files differ
diff --git a/examples/designer/doc/images/customwidgetplugin-example.png b/examples/designer/doc/images/customwidgetplugin-example.png
deleted file mode 100644
index 87fde81a3..000000000
--- a/examples/designer/doc/images/customwidgetplugin-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/designer/doc/images/customwidgetplugin-example.webp b/examples/designer/doc/images/customwidgetplugin-example.webp
new file mode 100644
index 000000000..a867ff886
--- /dev/null
+++ b/examples/designer/doc/images/customwidgetplugin-example.webp
Binary files differ
diff --git a/examples/designer/doc/images/taskmenuextension-dialog.png b/examples/designer/doc/images/taskmenuextension-dialog.png
deleted file mode 100644
index 7ad6d40bd..000000000
--- a/examples/designer/doc/images/taskmenuextension-dialog.png
+++ /dev/null
Binary files differ
diff --git a/examples/designer/doc/images/taskmenuextension-dialog.webp b/examples/designer/doc/images/taskmenuextension-dialog.webp
new file mode 100644
index 000000000..25b16044e
--- /dev/null
+++ b/examples/designer/doc/images/taskmenuextension-dialog.webp
Binary files differ
diff --git a/examples/designer/doc/images/taskmenuextension-example-faded.png b/examples/designer/doc/images/taskmenuextension-example-faded.png
deleted file mode 100644
index 7e96f3ad8..000000000
--- a/examples/designer/doc/images/taskmenuextension-example-faded.png
+++ /dev/null
Binary files differ
diff --git a/examples/designer/doc/images/taskmenuextension-example.png b/examples/designer/doc/images/taskmenuextension-example.png
deleted file mode 100644
index f1d46d2b4..000000000
--- a/examples/designer/doc/images/taskmenuextension-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/designer/doc/images/taskmenuextension-example.webp b/examples/designer/doc/images/taskmenuextension-example.webp
new file mode 100644
index 000000000..667a6d428
--- /dev/null
+++ b/examples/designer/doc/images/taskmenuextension-example.webp
Binary files differ
diff --git a/examples/designer/doc/images/taskmenuextension-menu.png b/examples/designer/doc/images/taskmenuextension-menu.png
deleted file mode 100644
index d626c81da..000000000
--- a/examples/designer/doc/images/taskmenuextension-menu.png
+++ /dev/null
Binary files differ
diff --git a/examples/designer/doc/images/taskmenuextension-menu.webp b/examples/designer/doc/images/taskmenuextension-menu.webp
new file mode 100644
index 000000000..f855f3594
--- /dev/null
+++ b/examples/designer/doc/images/taskmenuextension-menu.webp
Binary files differ
diff --git a/examples/designer/doc/images/worldtimeclock-connection.png b/examples/designer/doc/images/worldtimeclock-connection.png
deleted file mode 100644
index 42c256003..000000000
--- a/examples/designer/doc/images/worldtimeclock-connection.png
+++ /dev/null
Binary files differ
diff --git a/examples/designer/doc/images/worldtimeclock-signalandslot.png b/examples/designer/doc/images/worldtimeclock-signalandslot.png
deleted file mode 100644
index d9d3271f4..000000000
--- a/examples/designer/doc/images/worldtimeclock-signalandslot.png
+++ /dev/null
Binary files differ
diff --git a/examples/designer/doc/images/worldtimeclockbuilder-example.png b/examples/designer/doc/images/worldtimeclockbuilder-example.png
deleted file mode 100644
index 4b91af3ff..000000000
--- a/examples/designer/doc/images/worldtimeclockbuilder-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/designer/doc/images/worldtimeclockplugin-example.png b/examples/designer/doc/images/worldtimeclockplugin-example.png
deleted file mode 100644
index 89481ade8..000000000
--- a/examples/designer/doc/images/worldtimeclockplugin-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/designer/doc/snippets/doc_src_examples_containerextension.pro b/examples/designer/doc/snippets/doc_src_examples_containerextension.pro
index 8f8823abe..903cef948 100644
--- a/examples/designer/doc/snippets/doc_src_examples_containerextension.pro
+++ b/examples/designer/doc/snippets/doc_src_examples_containerextension.pro
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#! [0]
target.path = $$[QT_INSTALL_PLUGINS]/designer
diff --git a/examples/designer/doc/snippets/doc_src_examples_customwidgetplugin.pro b/examples/designer/doc/snippets/doc_src_examples_customwidgetplugin.pro
index 8f8823abe..903cef948 100644
--- a/examples/designer/doc/snippets/doc_src_examples_customwidgetplugin.pro
+++ b/examples/designer/doc/snippets/doc_src_examples_customwidgetplugin.pro
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#! [0]
target.path = $$[QT_INSTALL_PLUGINS]/designer
diff --git a/examples/designer/doc/snippets/doc_src_examples_taskmenuextension.pro b/examples/designer/doc/snippets/doc_src_examples_taskmenuextension.pro
index 8f8823abe..903cef948 100644
--- a/examples/designer/doc/snippets/doc_src_examples_taskmenuextension.pro
+++ b/examples/designer/doc/snippets/doc_src_examples_taskmenuextension.pro
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#! [0]
target.path = $$[QT_INSTALL_PLUGINS]/designer
diff --git a/examples/designer/doc/snippets/doc_src_examples_worldtimeclockplugin.pro b/examples/designer/doc/snippets/doc_src_examples_worldtimeclockplugin.pro
deleted file mode 100644
index 8f8823abe..000000000
--- a/examples/designer/doc/snippets/doc_src_examples_worldtimeclockplugin.pro
+++ /dev/null
@@ -1,54 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#! [0]
-target.path = $$[QT_INSTALL_PLUGINS]/designer
-INSTALLS += target
-#! [0]
diff --git a/examples/designer/doc/src/calculatorbuilder.qdoc b/examples/designer/doc/src/calculatorbuilder.qdoc
index c830367a7..eeec5923b 100644
--- a/examples/designer/doc/src/calculatorbuilder.qdoc
+++ b/examples/designer/doc/src/calculatorbuilder.qdoc
@@ -1,38 +1,16 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example calculatorbuilder
+ \examplecategory {Desktop}
+ \meta tags {widgets,designer}
\ingroup examples-designer
- \title Calculator Builder Example
+ \title Calculator Builder
\brief Creating a user interface from a \QD form at run-time.
- \image calculatorbuilder-example.png
+ \image calculatorbuilder-example.webp
We use the form created in the \l{calculatorform}{Calculator Form}
example to show that the same user interface can be generated when the
@@ -49,36 +27,31 @@
\c QtUiTools module library. The project file we use contains all the
necessary information to do this:
- \snippet calculatorbuilder/calculatorbuilder.pro 0
+ \snippet calculatorbuilder/CMakeLists.txt 0
- All the other necessary files are declared as usual.
+ The UI file is loaded from a resource:
- \section1 CalculatorForm Class Definition
+ \snippet calculatorbuilder/CMakeLists.txt 1
- The \c CalculatorForm class defines the widget used to host the form's
- user interface:
+ For \c qmake:
- \snippet calculatorbuilder/calculatorform.h 0
+ \snippet calculatorbuilder/calculatorbuilder.pro 0
- Note that we do not need to include a header file to describe the user
- interface. We only define two public slots, using the auto-connection
- naming convention required by \c uic, and declare private variables
- that we will use to access widgets provided by the form after they are
- constructed.
+ All the other necessary files are declared as usual.
- \section1 CalculatorForm Class Implementation
+ \section1 Loading the Calculator Form
We will need to use the QUiLoader class that is provided by the
\c libQtUiTools library, so we first ensure that we include the header
file for the module:
- \snippet calculatorbuilder/calculatorform.cpp 0
+ \snippet calculatorbuilder/main.cpp 0
- The constructor uses a form loader object to construct the user
- interface that we retrieve, via a QFile object, from the example's
- resources:
+ We create a static helper function that creates a top level
+ widget and loads the user interface that we retrieve,
+ via a QFile object, from the example's resources:
- \snippet calculatorbuilder/calculatorform.cpp 1
+ \snippet calculatorbuilder/main.cpp 1
By including the user interface in the example's resources, we ensure
that it will be present when the example is run. The \c{loader.load()}
@@ -88,32 +61,27 @@
We are interested in three widgets in the generated user interface:
two spin boxes and a label. For convenience, we retrieve pointers to
these widgets from the widget that was constructed by the \c FormBuilder,
- and we record them for later use. The \c qFindChild() template function
+ and we record them for later use. The \c findChild() template function
allows us to query widgets in order to find named child widgets.
- \snippet calculatorbuilder/calculatorform.cpp 2
+ \snippet calculatorbuilder/main.cpp 2
- The widgets created by the form loader need to be connected to the
- specially-named slots in the \c CalculatorForm object. We use Qt's
- meta-object system to enable these connections:
+ The slot that modifies the output widget provided by the form is defined
+ in a similar way to that in the
+ \l{calculatorform}{Calculator Form} example, except that we use a
+ lambda, capturing the widgets found:
- \snippet calculatorbuilder/calculatorform.cpp 3
+ \snippet calculatorbuilder/main.cpp 3
The form widget is added to a layout, and the window title is set:
- \snippet calculatorbuilder/calculatorform.cpp 4
-
- The two slots that modify widgets provided by the form are defined
- in a similar way to those in the \l{calculatorform}{Calculator
- Form} example, except that we read the values from the spin boxes and
- write the result to the output widget via the pointers we recorded in
- the constructor:
-
- \snippet calculatorbuilder/calculatorform.cpp 5
- \codeline
- \snippet calculatorbuilder/calculatorform.cpp 7
+ \snippet calculatorbuilder/main.cpp 4
The advantage of this approach is that we can replace the form when the
application is run, but we can still manipulate the widgets it contains
as long as they are given appropriate names.
+
+ However, loading a form at runtime incurs a runtime cost compared
+ to converting it to C++ code using the \l {User Interface Compiler (uic)}
+ tool.
*/
diff --git a/examples/designer/doc/src/calculatorform.qdoc b/examples/designer/doc/src/calculatorform.qdoc
index 526e087c3..ccfe16ae6 100644
--- a/examples/designer/doc/src/calculatorform.qdoc
+++ b/examples/designer/doc/src/calculatorform.qdoc
@@ -1,44 +1,20 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example calculatorform
+ \examplecategory {Desktop}
+ \meta tags {widgets,designer}
\ingroup examples-designer
- \title Calculator Form Example
+ \title Calculator Form
\brief Using a form created with \QD in an application.
The Calculator Form Example shows how to use a form created with
\QD in an application by using the user interface information from
- a QWidget subclass. We use \l{Using a Designer UI File in Your Application}
- {uic's auto-connection} feature to automatically connect signals
- from widgets on the form to slots in our code.
+ a QWidget subclass.
- \image calculatorform-example.png Screenshot of the Calculator Form example
+ \image calculatorform-example.webp Screenshot of the Calculator Form example
The example presents two spin boxes that are used to input integer values
and a label that shows their sum. Whenever either of the spin boxes are
@@ -51,8 +27,14 @@
result is a UI file describing the form, the widgets used, any signal-slot
connections between them, and other standard user interface properties.
- To ensure that the example can use this file, we need to include a \c FORMS
- declaration in the example's project file:
+ To ensure that the example can use this file, we enable the \c CMAKE_AUTOUIC
+ feature and list the UI file in the source files:
+
+ \snippet calculatorform/CMakeLists.txt 0
+ \codeline
+ \snippet calculatorform/CMakeLists.txt 1
+
+ For \c qmake, we need to include a \c FORMS declaration in the example's project file:
\snippet calculatorform/calculatorform.pro 1
@@ -73,16 +55,17 @@
\snippet calculatorform/calculatorform.h 1
- Apart from the constructor, the class contains two private slots that
- are named according to the auto-connection naming convention required
- by \c uic.
+ Apart from the constructor, the class contains a private slot
+ \c updateResult() that performs the calculation and updates the output
+ widget accordingly.
The private \c ui member variable refers to the form, and is used to
access the contents of the user interface.
\section1 CalculatorForm Class Implementation
- The constructor simply calls the base class's constructor and
- sets up the form's user interface.
+ The constructor simply calls the base class's constructor,
+ sets up the form's user interface and connects
+ the signals \l{QSpinBox::valueChanged()} to the slot \c updateResult().
\snippet calculatorform/calculatorform.cpp 0
@@ -90,26 +73,10 @@
\c this as the argument to this function to use the \c CalculatorForm
widget itself as the container for the user interface.
- To automatically connect signals from the spin boxes defined in the
- user interface, we use the naming convention that indicates which
- widgets and their signals in the user interface should be connected
- to each slot. The first slot is called whenever the spin box called
- "inputSpinBox1" in the user interface emits the
- \l{QSpinBox::valueChanged()}{valueChanged()} signal:
+ Slot \c updateResult() adds the values and sets the result on
+ the output widget:
\snippet calculatorform/calculatorform.cpp 1
- When this occurs, we use the value supplied by the signal to update the
- output label by setting its new text directly. We access the output label
- and the other spin box via the class's private \c ui variable.
-
- The second slot is called whenever the second spin box, called
- "inputSpinBox2", emits the \l{QSpinBox::valueChanged()}{valueChanged()}
- signal:
-
- \snippet calculatorform/calculatorform.cpp 2
-
- In this case, the value from the first spin box is read and combined
- with the value supplied by the signal. Again, the output label is
- updated directly via the \c ui variable.
+ It is called whenever the value of one of the spin boxes changes.
*/
diff --git a/examples/designer/doc/src/calculatorform_mi.qdoc b/examples/designer/doc/src/calculatorform_mi.qdoc
new file mode 100644
index 000000000..7cf0bca16
--- /dev/null
+++ b/examples/designer/doc/src/calculatorform_mi.qdoc
@@ -0,0 +1,74 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example calculatorform_mi
+ \examplecategory {Desktop}
+ \meta tags {widgets,designer}
+ \ingroup examples-designer
+ \title Calculator Form/Multiple Inheritance
+
+ \brief Using a form created with \QD in an application.
+
+ The Multiple Inheritance Example shows how to use a form created with
+ \l{Qt Widgets Designer} in an application by subclassing both QWidget and the user
+ interface class, which is \c{Ui::CalculatorForm}.
+
+ \image calculatorform-example.webp
+
+ To subclass the \c calculatorform.ui file and ensure that \c qmake
+ processes it with the \c uic, we have to include \c calculatorform.ui
+ in the \c .pro file, as shown below:
+
+ \snippet calculatorform_mi/calculatorform_mi.pro 0
+
+ When the project is compiled, the \c uic will generate a corresponding
+ \c ui_calculatorform.h.
+
+ \section1 CalculatorForm Definition
+
+ In the \c CalculatorForm definition, we include the \c ui_calculatorform.h
+ that was generated earlier.
+
+ \snippet calculatorform_mi/calculatorform.h 0
+
+ As mentioned earlier, the class is a subclass of both QWidget and
+ \c{Ui::CalculatorForm}.
+
+ \snippet calculatorform_mi/calculatorform.h 1
+
+ Two slots are defined according to the \l{Automatic Connections}
+ {automatic connection} naming convention required by \c uic. This is
+ to ensure that \l{QMetaObject}'s auto-connection facilities connect
+ all the signals and slots involved automatically.
+
+ \section1 CalculatorForm Implementation
+
+ In the constructor, we call \c setupUi() to load the user interface file.
+ Note that setupUi is a method of \c Ui::CalculatorForm.
+
+ \snippet calculatorform_mi/calculatorform.cpp 0
+
+ We include two slots, \c{on_inputSpinBox1_valueChanged()} and
+ \c{on_inputSpinBox2_valueChanged()}. These slots respond to the
+ \l{QSpinBox::valueChanged()}{valueChanged()} signal that both spin boxes
+ emit. Whenever there is a change in one spin box's value, we take that
+ value and add it to whatever value the other spin box has.
+
+ \snippet calculatorform_mi/calculatorform.cpp 1
+ \codeline
+ \snippet calculatorform_mi/calculatorform.cpp 2
+
+ \section1 \c main() Function
+
+ The \c main() function instantiates QApplication and \c CalculatorForm.
+ The \c calculator object is displayed by invoking the \l{QWidget::show()}
+ {show()} function.
+
+ \snippet calculatorform_mi/main.cpp 0
+
+ There are various approaches to include forms into applications. The
+ Multiple Inheritance approach is just one of them. See
+ \l{Using a Designer UI File in Your Application} for more information on
+ the other approaches available.
+*/
diff --git a/examples/designer/doc/src/containerextension.qdoc b/examples/designer/doc/src/containerextension.qdoc
index b369ba50b..5fe5a2c8b 100644
--- a/examples/designer/doc/src/containerextension.qdoc
+++ b/examples/designer/doc/src/containerextension.qdoc
@@ -1,32 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example containerextension
+ \examplecategory {Desktop}
+ \meta tags {widgets,designer}
\ingroup examples-designer
\title Container Extension Example
@@ -36,7 +14,7 @@
plugin for \QD using the
QDesignerContainerExtension class.
- \image containerextension-example.png
+ \image containerextension-example.webp
To provide a custom widget that can be used with \QD, we need to
supply a self-contained implementation. In this example we use a
@@ -53,11 +31,11 @@
\list
\li QDesignerMemberSheetExtension provides an extension that allows
you to manipulate a widget's member functions which is displayed
- when configuring connections using Qt Designer's mode for editing
+ when configuring connections using \QD's mode for editing
signals and slots.
\li QDesignerPropertySheetExtension provides an extension that
allows you to manipulate a widget's properties which is displayed
- in Qt Designer's property editor.
+ in \QD's property editor.
\li QDesignerTaskMenuExtension provides an extension that allows
you to add custom menu entries to \QD's task menu.
\li QDesignerContainerExtension provides an extension that allows
@@ -67,7 +45,7 @@
You can use all the extensions following the same pattern as in
this example, only replacing the respective extension base
- class. For more information, see \l{Qt Designer C++ Classes}.
+ class. For more information, see \l{Qt Widgets Designer C++ Classes}.
The Container Extension example consists of four classes:
@@ -83,41 +61,32 @@
extension.
\endlist
- The project file for custom widget plugins needs some additional
+ Project files for custom widget plugins need some additional
information to ensure that they will work within \QD. For example,
custom widget plugins rely on components supplied with \QD, and
- this must be specified in the project file that we use. We will
- first take a look at the plugin's project file.
+ this must be specified in the project files that we use. We will
+ first take a look at the plugin's project files.
Then we will continue by reviewing the \c MultiPageWidgetPlugin
class, and take a look at the \c MultiPageWidgetExtensionFactory
and \c MultiPageWidgetContainerExtension classes. Finally, we will
take a quick look at the \c MultiPageWidget class definition.
- \section1 The Project File: containerextension.pro
+ \section1 Project files
- The project file must contain some additional information to
- ensure that the plugin will work as expected:
+ \section2 CMake
- \snippet containerextension/containerextension.pro 0
- \snippet containerextension/containerextension.pro 1
-
- The \c TEMPLATE variable's value makes \c qmake create the custom
- widget as a library. Later, we will ensure that the widget will be
- recognized as a plugin by Qt by using the Q_PLUGIN_METADATA() macro
- to export the relevant widget information.
+ The project files need to state that a plugin linking
+ to the \QD libraries is to be built:
- The \c CONFIG variable is set to \c plugin, which ensures that \c qmake
- considers the custom widget a plugin library.
-
- The \c QT variable contains the value \c designer. Since the plugin uses
- components supplied with \QD that require linkage, this value ensures
- that our plugin links against \QD's library (\c libQtDesigner.so).
+ \snippet containerextension/CMakeLists.txt 0
+ \codeline
+ \snippet containerextension/CMakeLists.txt 2
- The header and source files for the widget are declared in the
- usual way:
+ The following example shows how to add the header and source files of the
+ widget:
- \snippet containerextension/containerextension.pro 2
+ \snippet containerextension/CMakeLists.txt 1
We provide an implementation of the plugin interface so that \QD
can use the custom widget. In this particular example we also
@@ -129,21 +98,33 @@
target path for the project and adding it to the list of items to
install:
- \snippet doc/snippets/doc_src_examples_containerextension.pro 0
+ \snippet containerextension/CMakeLists.txt 3
+ \snippet containerextension/CMakeLists.txt 4
- The container extension is created as a library, and will be
+ The container extension is created as a library. It will be
installed alongside the other \QD plugins when the project is
- installed (using \c{make install} or an equivalent installation
+ installed (using \c{ninja install} or an equivalent installation
procedure).
- Note that if you want the plugins to appear in a Visual Studio
- integration, the plugins must be built in release mode and their
- libraries must be copied into the plugin directory in the install
- path of the integration (for an example, see \c {C:/program
- files/trolltech as/visual studio integration/plugins}).
+ For more information about plugins, see the
+ \l {How to Create Qt Plugins} documentation.
+
+ \section2 qmake
+
+ The following example shows how to link a plugin to the \QD libraries:
+
+ \snippet containerextension/containerextension.pro 0
+ \codeline
+ \snippet containerextension/containerextension.pro 1
- For more information about plugins, see the \l {How to Create Qt
- Plugins} documentation.
+ The following example shows how to add the header and source files of the
+ widget:
+
+ \snippet containerextension/containerextension.pro 2
+
+ The following example shows how to install a plugin to the \QD's plugin path:
+
+ \snippet containerextension/containerextension.pro 3
\section1 MultiPageWidgetPlugin Class Definition
@@ -181,9 +162,17 @@
using multiple inheritance, to ensure that all the interfaces
(i.e. the classes that doesn't inherit Q_OBJECT) are made known to
the meta object system using the Q_INTERFACES() macro. This
- enables \QD to use \l {qobject_cast(QObject * object)} to query for supported
+ enables \QD to use qobject_cast() to query for supported
interfaces using nothing but a QObject pointer.
+ To ensure that Qt recognizes the widget as a plugin, export relevant
+ information about the widget by adding the \c Q_PLUGIN_METADATA() macro:
+
+ \snippet containerextension/multipagewidgetplugin.h 1
+
+ With this macro, \QD can access and construct the custom widget.
+ Without this macro, there is no way for \QD to use the widget.
+
\section1 MultiPageWidgetPlugin Class Implementation
The MultiPageWidgetPlugin class implementation is in most parts
@@ -227,7 +216,7 @@
Once we have the widget we can update the property editor. \QD
uses the QDesignerPropertySheetExtension class to feed its
property editor, and whenever a widget is selected in its
- workspace, Qt Designer will query for the widget's property sheet
+ workspace, \QD will query for the widget's property sheet
extension and update the property editor.
So what we want to achieve is to notify \QD that our widget's \e
@@ -235,7 +224,7 @@
QDesignerFormWindowInterface::findFormWindow() function to
retrieve the QDesignerFormWindowInterface object containing the
widget. The QDesignerFormWindowInterface class allows you to query
- and manipulate form windows appearing in Qt Designer's
+ and manipulate form windows appearing in \QD's
workspace. Then, all we have to do is to emit its \l
{QDesignerFormWindowInterface::emitSelectionChanged()}{emitSelectionChanged()}
signal, forcing an update of the property editor.
@@ -334,14 +323,6 @@
page; any inital pages of a multi-page widget must be specified
within this function.
- \snippet containerextension/multipagewidgetplugin.h 1
-
- Remember to use the Q_PLUGIN_METADATA() macro to export the
- MultiPageWidgetPlugin class for use with Qt's plugin handling
- classes: This macro ensures that \QD can access and construct the
- custom widget. Without this macro, there is no way for \QD to use
- the widget.
-
\section1 MultiPageWidgetExtensionFactory Class Definition
The \c MultiPageWidgetExtensionFactory class inherits QExtensionFactory
diff --git a/examples/designer/doc/src/customwidgetplugin.qdoc b/examples/designer/doc/src/customwidgetplugin.qdoc
index 82b70cea3..dd8faf6a5 100644
--- a/examples/designer/doc/src/customwidgetplugin.qdoc
+++ b/examples/designer/doc/src/customwidgetplugin.qdoc
@@ -1,38 +1,16 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example customwidgetplugin
+ \examplecategory {Desktop}
+ \meta tags {widgets,designer}
\ingroup examples-designer
- \title Custom Widget Plugin Example
+ \title Custom Widget Plugin
- \brief Creating a custom widget plugin for Qt Designer.
+ \brief Creating a custom widget plugin for \QD.
- \image customwidgetplugin-example.png
+ \image customwidgetplugin-example.webp
In this example, the custom widget used is based on the
\l{widgets/analogclock}{Analog Clock example}, and does not provide any custom
@@ -45,59 +23,68 @@
example, we reuse the \l{widgets/analogclock}{Analog Clock example} for
convenience.
- Since custom widgets plugins rely on components supplied with \QD, the
- project file that we use needs to contain information about \QD's
- library components:
+ \section1 Project files
- \snippet customwidgetplugin/customwidgetplugin.pro 2
- \snippet customwidgetplugin/customwidgetplugin.pro 0
+ \section2 CMake
- The \c TEMPLATE variable's value makes \c qmake create the custom
- widget as a library. Later, we will ensure that the widget will be
- recognized as a plugin by Qt by using the Q_PLUGIN_METADATA() macro
- to export the relevant widget information.
+ The project files need to state that a plugin linking
+ to the \QD libraries is to be built:
+ \snippet customwidgetplugin/CMakeLists.txt 0
+ \codeline
+ \snippet customwidgetplugin/CMakeLists.txt 2
- The \c CONFIG variable is set to \c plugin, which ensures that \c qmake
- considers the custom widget a plugin library.
+ The link libraries list specifies \c Qt::UiPlugin. This indicates that
+ the plugin uses the abstract interfaces QDesignerCustomWidgetInterface
+ and QDesignerCustomWidgetCollectionInterface only and has no linkage
+ to the \QD libraries. When accessing other interfaces of \QD that have
+ linkage, \c Designer should be used instead; this ensures that the plugin
+ dynamically links to the \QD libraries and has a run-time dependency on
+ them.
- The \c QT variable contains the keyword \c uiplugin. This plugin type
- provides a factory function for custom widget creation by implementing
- the abstract interfaces QDesignerCustomWidgetInterface or
- QDesignerCustomWidgetCollectionInterface, suitable for use with
- QUiLoader. It does not have a dependency on the \QD libraries.
- Plugins accessing other interfaces of \QD to implement container extensions
- or other \QD specific functionality follow different rules and are covered
- by other examples.
+ The following example shows how to add the header and source files of the
+ widget:
- The header and source files for the widget are declared in the usual way,
- and we provide an implementation of the plugin interface so that \QD can
- use the custom widget:
+ \snippet customwidgetplugin/CMakeLists.txt 1
- \snippet customwidgetplugin/customwidgetplugin.pro 3
+ We provide an implementation of the plugin interface so that \QD
+ can use the custom widget.
It is also important to ensure that the plugin is installed in a
location that is searched by \QD. We do this by specifying a
target path for the project and adding it to the list of items to
install:
- \snippet doc/snippets/doc_src_examples_customwidgetplugin.pro 0
+ \snippet customwidgetplugin/CMakeLists.txt 3
+ \snippet customwidgetplugin/CMakeLists.txt 4
+
+ The custom widget is created as a library. It will be
+ installed alongside the other \QD plugins when the project is
+ installed (using \c{ninja install} or an equivalent installation
+ procedure).
+
+ For more information about plugins, see the
+ \l {How to Create Qt Plugins} documentation.
+
+ \section2 qmake
+
+ The following example shows how to link a plugin to the \QD libraries:
- The custom widget is created as a library, and will be installed
- alongside the other \QD plugins when the project is installed
- (using \c{make install} or an equivalent installation procedure).
- Later, we will ensure that it is recognized as a plugin by \QD by
- using the Q_PLUGIN_METADATA() macro to export the relevant widget
- information.
+ \snippet customwidgetplugin/customwidgetplugin.pro 0
+ \codeline
+ \snippet customwidgetplugin/customwidgetplugin.pro 1
+
+ The \c QT variable contains the keyword \c uiplugin, which is
+ the equivalent of the \c Qt::UiPlugin library.
- Note that if you want the plugins to appear in a Visual Studio
- integration, the plugins must be built in release mode and their
- libraries must be copied into the plugin directory in the install
- path of the integration (for an example, see \c {C:/program
- files/trolltech as/visual studio integration/plugins}).
+ The following example shows how to add the header and source files of the
+ widget:
+
+ \snippet customwidgetplugin/customwidgetplugin.pro 2
- For more information about plugins, see the \l {How to
- Create Qt Plugins} documentation.
+ The following example shows how to install a plugin to the \QD's plugin path:
+
+ \snippet customwidgetplugin/customwidgetplugin.pro 3
\section1 AnalogClock Class Definition and Implementation
@@ -112,12 +99,15 @@
The \c AnalogClock class is exposed to \QD through the \c
AnalogClockPlugin class. This class inherits from both QObject and
the QDesignerCustomWidgetInterface class, and implements an
- interface defined by QDesignerCustomWidgetInterface:
+ interface defined by QDesignerCustomWidgetInterface.
+
+ To ensure that Qt recognizes the widget as a plugin, export relevant
+ information about the widget by adding the \c Q_PLUGIN_METADATA() macro:
\snippet customwidgetplugin/customwidgetplugin.h 0
The functions provide information about the widget that \QD can use in
- the \l{Getting to Know Qt Designer#WidgetBox}{widget box}.
+ the \l{Getting to Know Qt Widgets Designer#WidgetBox}{widget box}.
The \c initialized private member variable is used to record whether
the plugin has been initialized by \QD.
diff --git a/examples/designer/doc/src/taskmenuextension.qdoc b/examples/designer/doc/src/taskmenuextension.qdoc
index a480fa3a8..6a9521a7c 100644
--- a/examples/designer/doc/src/taskmenuextension.qdoc
+++ b/examples/designer/doc/src/taskmenuextension.qdoc
@@ -1,44 +1,22 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example taskmenuextension
+ \examplecategory {Desktop}
+ \meta tags {widgets,designer}
\ingroup examples-designer
- \title Task Menu Extension Example
+ \title Task Menu Extension
\brief Creating a custom widget plugin for \QD and providing custom task
menu entries that are associated with the plugin.
The Task Menu Extension example shows how to create a custom
- widget plugin for \l {Qt Designer Manual}{\QD}, and how to to use
+ widget plugin for \l {Qt Widgets Designer Manual}{\QD}, and how to use
the QDesignerTaskMenuExtension class to provide custom task menu
entries associated with the plugin.
- \image taskmenuextension-example-faded.png
+ \image taskmenuextension-example.webp
To provide a custom widget that can be used with \QD, we need to
supply a self-contained implementation. In this example we use a
@@ -57,18 +35,18 @@
in \QD.
\li QDesignerMemberSheetExtension provides an extension that allows
you to manipulate a widget's member functions which is displayed
- when configuring connections using Qt Designer's mode for editing
+ when configuring connections using \QD's mode for editing
signals and slots.
\li QDesignerPropertySheetExtension provides an extension that
allows you to manipulate a widget's properties which is displayed
- in Qt Designer's property editor.
+ in \QD's property editor.
\li QDesignerTaskMenuExtension provides an extension that allows
you to add custom menu entries to \QD's task menu.
\endlist
You can use all the extensions following the same pattern as in
this example, only replacing the respective extension base
- class. For more information, see the \l{Qt Designer C++ Classes}.
+ class. For more information, see the \l{Qt Widgets Designer C++ Classes}.
The Task Menu Extension example consists of five classes:
@@ -95,30 +73,21 @@
TicTacToeDialog class before we take a quick look at the \c
TicTacToe widget's class definition.
- \section1 The Project File: taskmenuextension.pro
+ \section1 Project files
- The project file must contain some additional information to
- ensure that the plugin will work as expected:
+ \section2 CMake
- \snippet taskmenuextension/taskmenuextension.pro 0
- \snippet taskmenuextension/taskmenuextension.pro 1
-
- The \c TEMPLATE variable's value makes \c qmake create the custom
- widget as a library. Later, we will ensure that the widget will be
- recognized as a plugin by Qt by using the Q_PLUGIN_METADATA() macro to
- export the relevant widget information.
-
- The \c CONFIG variable is set to \c plugin, which ensures that \c qmake
- considers the custom widget a plugin library.
+ The project files need to state that a plugin linking
+ to the \QD libraries is to be built:
- The \c QT variable contains the value \c designer. Since the plugin uses
- components supplied with \QD that require linkage, this value ensures
- that our plugin links against \QD's library (\c libQtDesigner.so).
+ \snippet taskmenuextension/CMakeLists.txt 0
+ \codeline
+ \snippet taskmenuextension/CMakeLists.txt 2
- The header and source files for the widget are declared in the
- usual way:
+ The following example shows how to add the header and source files of the
+ widget:
- \snippet taskmenuextension/taskmenuextension.pro 2
+ \snippet taskmenuextension/CMakeLists.txt 1
We provide an implementation of the plugin interface so that \QD
can use the custom widget. In this particular example we also
@@ -130,21 +99,33 @@
target path for the project and adding it to the list of items to
install:
- \snippet doc/snippets/doc_src_examples_taskmenuextension.pro 0
+ \snippet taskmenuextension/CMakeLists.txt 3
+ \snippet taskmenuextension/CMakeLists.txt 4
- The task menu extension is created as a library, and will be
+ The task menu extension is created as a library. It will be
installed alongside the other \QD plugins when the project is
- installed (using \c{make install} or an equivalent installation
+ installed (using \c{ninja install} or an equivalent installation
procedure).
- Note that if you want the plugins to appear in a Visual Studio
- integration, the plugins must be built in release mode and their
- libraries must be copied into the plugin directory in the install
- path of the integration (for an example, see \c {C:/program
- files/trolltech as/visual studio integration/plugins}).
+ For more information about plugins, see the
+ \l {How to Create Qt Plugins} documentation.
+
+ \section2 qmake
- For more information about plugins, see the \l {How to Create Qt
- Plugins} documentation.
+ The following example shows how to link a plugin to the \QD libraries:
+
+ \snippet taskmenuextension/taskmenuextension.pro 0
+ \codeline
+ \snippet taskmenuextension/taskmenuextension.pro 1
+
+ The following example shows how to add the header and source files of the
+ widget:
+
+ \snippet taskmenuextension/taskmenuextension.pro 2
+
+ The following example shows how to install a plugin to the \QD's plugin path:
+
+ \snippet taskmenuextension/taskmenuextension.pro 3
\section1 TicTacToePlugin Class Definition
@@ -153,7 +134,10 @@
{customwidgetplugin}{Custom Widget Plugin} example's
plugin class which is explained in detail. The only part of the
class definition that is specific to this particular custom widget
- is the class name:
+ is the class name.
+
+ To ensure that Qt recognizes the widget as a plugin, export relevant
+ information about the widget by adding the \c Q_PLUGIN_METADATA() macro:
\snippet taskmenuextension/tictactoeplugin.h 0
@@ -171,7 +155,7 @@
using multiple inheritance, to ensure that all the interfaces
(i.e. the classes that doesn't inherit Q_OBJECT) are made known to
the meta object system using the Q_INTERFACES() macro. This
- enables \QD to use \l {qobject_cast(QObject * object)} to query for supported
+ enables \QD to use qobject_cast() to query for supported
interfaces using nothing but a QObject pointer.
\section1 TicTacToePlugin Class Implementation
@@ -189,7 +173,7 @@
The \c initialize() function takes a QDesignerFormEditorInterface
object as argument. The QDesignerFormEditorInterface class
- provides access to Qt Designer's components.
+ provides access to \QD's components.
In \QD you can create two kinds of plugins: custom widget plugins
and tool plugins. QDesignerFormEditorInterface provides access to
@@ -241,7 +225,7 @@
We omit to reimplement the
QDesignerCustomWidgetInterface::domXml() function (which include
default settings for the widget in the standard XML format used by
- Qt Designer), since no default values are necessary.
+ \QD), since no default values are necessary.
\snippet taskmenuextension/tictactoeplugin.h 1
@@ -292,7 +276,7 @@
\section1 TicTacToeTaskMenu Class Definition
- \image taskmenuextension-menu.png
+ \image taskmenuextension-menu.webp
The \c TicTacToeTaskMenu class inherits QDesignerTaskMenuExtension
which allows you to add custom entries (in the form of QActions)
@@ -341,7 +325,7 @@
\section1 TicTacToeDialog Class Definition
- \image taskmenuextension-dialog.png
+ \image taskmenuextension-dialog.webp
The \c TicTacToeDialog class inherits QDialog. The dialog lets the
user modify the state of the currently selected Tic-Tac-Toe
@@ -390,8 +374,8 @@
QDesignerFormWindowInterface provides you with information about
the associated form window as well as allowing you to alter its
properties. The interface is not intended to be instantiated
- directly, but to provide access to Qt Designer's current form
- windows controlled by Qt Designer's form window manager.
+ directly, but to provide access to \QD's current form
+ windows controlled by \QD's form window manager.
If you are looking for the form window containing a specific
widget, you can use the static
diff --git a/examples/designer/doc/src/worldtimeclockbuilder.qdoc b/examples/designer/doc/src/worldtimeclockbuilder.qdoc
deleted file mode 100644
index 7360dcafe..000000000
--- a/examples/designer/doc/src/worldtimeclockbuilder.qdoc
+++ /dev/null
@@ -1,97 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example worldtimeclockbuilder
- \ingroup examples-designer
- \title World Time Clock Builder Example
-
- \brief Creating forms with Qt Designer that contain custom widgets that can be
- dynamically generated at run-time.
-
- \image worldtimeclockbuilder-example.png
-
- This example uses a form containing the custom widget plugin described in the
- \l{worldtimeclockplugin}{World Time Clock Plugin} example, and
- dynamically generates a user interface using the QUiLoader class, part of
- the QtUiTools module.
-
- \section1 Preparation
-
- As with the \l{calculatorbuilder}{Calculator Builder} example, the
- project file for this example needs to include the appropriate definitions
- to ensure that it is built against the required Qt modules.
-
- \snippet worldtimeclockbuilder/worldtimeclockbuilder.pro 0
-
- By appending \c form to the \c CONFIG declaration, we instruct \c qmake to
- generate a dependency on the \c libQtUiTools library containing the QtUiTools
- classes.
-
- Note that we do not inform \c qmake about any UI files, and so none will
- be processed and built into the application. The resource file contains
- an entry for the particular form that we wish to use:
-
- \quotefile worldtimeclockbuilder/worldtimeclockbuilder.qrc
-
- Forms do not need to be included with the application in this way. We only
- include a form in the application's resources for convenience, and to keep
- the example short.
-
- \section1 Loading and Building the Form
-
- Since this example only loads and displays a pre-prepared form, all of the
- work can be done in the main() function. We are using a class from the
- QtUiTools library so, in addition to any other Qt classes that are normally
- required to write an application, we must include the appropriate header
- file:
-
- \snippet worldtimeclockbuilder/main.cpp 0
-
- The main function initializes the resource system with the Q_INIT_RESOURCE()
- macro and constructs an QApplication instance in the usual way:
-
- \snippet worldtimeclockbuilder/main.cpp 1
-
- We construct a QUiLoader object to handle the form we want to use.
-
- The form itself is obtained from the resource file system using the path
- defined in the resource file. We use the form loader to load and construct
- the form:
-
- \snippet worldtimeclockbuilder/main.cpp 2
-
- Once the form has been loaded, the resource file can be closed and the
- widget is shown.
-
- \snippet worldtimeclockbuilder/main.cpp 3
-
- The form loader ensures that all the signal and slot connections between
- objects in the form are set up correctly when the form is loaded. As a
- result, the time is updated by the World Time Clock widget, and the time
- zone spin box can be used to change the position of the hour hand.
-*/
diff --git a/examples/designer/doc/src/worldtimeclockplugin.qdoc b/examples/designer/doc/src/worldtimeclockplugin.qdoc
deleted file mode 100644
index 99a452867..000000000
--- a/examples/designer/doc/src/worldtimeclockplugin.qdoc
+++ /dev/null
@@ -1,188 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example worldtimeclockplugin
- \ingroup examples-designer
- \title World Time Clock Plugin Example
-
- \brief Creating a custom widget plugin for \QD that uses signals and slots.
-
- \image worldtimeclockplugin-example.png
-
- In this example, we simply extend the \l
- {customwidgetplugin}{Custom Widget Plugin} example and
- its custom widget (based on the \l{widgets/analogclock}{Analog
- Clock} example), by introducing the concept of signals and slots.
-
- The World Time Clock Plugin example consists of two classes:
-
- \list
- \li \c WorldTimeClock is a custom clock widget with hour and
- minute hands that is automatically updated every few seconds.
- \li \c WorldTimeClockPlugin exposes the \c WorldTimeClock class to \QD.
- \endlist
-
- First we will take a look at the \c WorldTimeClock class which
- extends the \l {customwidgetplugin}{Custom Widget Plugin}
- example's \c AnalogClock class by providing a signal and a
- slot. Then we will take a quick look at the \c
- WorldTimeClockPlugin class, but this class is in most parts
- identical to the \l {customwidgetplugin}{Custom Widget
- Plugin} example's implementation.
-
- Finally we take a look at the plugin's project file. The project
- file for custom widget plugins needs some additional information
- to ensure that they will work within \QD. This is also covered in
- the \l {customwidgetplugin}{Custom Widget Plugin} example,
- but due to its importance (custom widget plugins rely on
- components supplied with \QD which must be specified in the
- project file that we use) we will repeat it here.
-
- \section1 WorldTimeClock Class
-
- The \c WorldTimeClock class inherits QWidget, and is a custom
- clock widget with hour and minute hands that is automatically
- updated every few seconds. What makes this example different from
- the \l {customwidgetplugin}{Custom Widget Plugin}
- example, is the introduction of the signal and slot in the custom
- widget class:
-
- \snippet worldtimeclockplugin/worldtimeclock.h 1
-
- Note the use of the QDESIGNER_WIDGET_EXPORT macro. This is needed
- to ensure that \QD can create instances of the widget on some
- platforms, but it is a good idea to use it on all platforms.
-
- We declare the \c setTimeZone() slot with an associated \c
- timeZoneOffset variable, and we declare an \c updated() signal
- which takes the current time as argument and is emitted whenever
- the widget is repainted.
-
- \image worldtimeclock-connection.png
-
- In \QD's workspace we can then, for example, connect the \c
- WorldTimeClock widget's \c updated() signal to a QTimeEdit's \l
- {QDateTimeEdit::setTime()}{setTime()} slot using \QD's mode
- for editing signal and slots.
-
- \image worldtimeclock-signalandslot.png
-
- We can also connect a QSpinBox's \l
- {QSpinBox::valueChanged()}{valueChanged()} signal to the \c
- WorldTimeClock's \c setTimeZone() slot.
-
- \section1 WorldTimeClockPlugin Class
-
- The \c WorldTimeClockPlugin class exposes the \c WorldTimeClock
- class to \QD. Its definition is equivalent to the \l
- {customwidgetplugin}{Custom Widget Plugin} example's
- plugin class which is explained in detail. The only part of the
- class definition that is specific to this particular custom widget
- is the class name:
-
- \snippet worldtimeclockplugin/worldtimeclockplugin.h 0
-
- The plugin class provides \QD with basic information about our
- plugin, such as its class name and its include file. Furthermore
- it knows how to create instances of the \c WorldTimeClockPlugin
- widget. \c WorldTimeClockPlugin also defines the \l
- {QDesignerCustomWidgetInterface::initialize()}{initialize()}
- function which is called after the plugin is loaded into \QD. The
- function's QDesignerFormEditorInterface parameter provides the
- plugin with a gateway to all of \QD's API's.
-
- The \c WorldTimeClockPlugin class inherits from both QObject and
- QDesignerCustomWidgetInterface. It is important to remember, when
- using multiple inheritance, to ensure that all the interfaces
- (i.e. the classes that doesn't inherit Q_OBJECT) are made known to
- the meta object system using the Q_INTERFACES() macro. This
- enables \QD to use \l {qobject_cast(QObject * object)} to query for supported
- interfaces using nothing but a QObject pointer.
-
- The implementation of the \c WorldTimeClockPlugin is also
- equivalent to the plugin interface implementation in the \l
- {customwidgetplugin}{Custom Widget Plugin} example (only
- the class name and the implementation of
- QDesignerCustomWidgetInterface::domXml() differ). The main thing
- to remember is to use the Q_PLUGIN_METADATA() macro to export the \c
- WorldTimeClockPlugin class for use with \QD:
-
- \snippet worldtimeclockplugin/worldtimeclockplugin.h 1
-
- Without this macro, there is no way for Qt Designer to use the
- widget.
-
- \section1 The Project File: worldtimeclockplugin.pro
-
- The project file for custom widget plugins needs some additional
- information to ensure that they will work as expected within \QD:
-
- \snippet worldtimeclockplugin/worldtimeclockplugin.pro 0
- \snippet worldtimeclockplugin/worldtimeclockplugin.pro 1
-
- The \c TEMPLATE variable's value in conjunction with the keyword
- \c plugin in the \c CONFIG variable make \c qmake create the custom
- widget as a plugin library.
-
- The \c QT variable contains the keyword \c uiplugin. This plugin type
- provides a factory function for custom widget creation by implementing
- the abstract interfaces QDesignerCustomWidgetInterface or
- QDesignerCustomWidgetCollectionInterface, suitable for use with
- QUiLoader. It does not have a dependency on the \QD libraries.
- Plugins accessing other interfaces of \QD to implement container extensions
- or other \QD specific functionality follow different rules and are covered
- by other examples.
-
- The header and source files for the widget are declared in the
- usual way, and in addition we provide an implementation of the
- plugin interface so that \QD can use the custom widget.
-
- \snippet worldtimeclockplugin/worldtimeclockplugin.pro 2
-
- It is important to ensure that the plugin is installed in a location that
- is searched by \QD. We do this by specifying a target path for the project
- and adding it to the list of items to install:
-
- \snippet doc/snippets/doc_src_examples_worldtimeclockplugin.pro 0
-
- The custom widget is created as a library, and will be installed
- alongside the other \QD plugins when the project is installed
- (using \c{make install} or an equivalent installation procedure).
- Later, we will ensure that it is recognized as a plugin by \QD by
- using the Q_PLUGIN_METADATA() macro to export the relevant widget
- information.
-
- Note that if you want the plugins to appear in a Visual Studio
- integration, the plugins must be built in release mode and their
- libraries must be copied into the plugin directory in the install
- path of the integration (for an example, see \c {C:/program
- files/trolltech as/visual studio integration/plugins}).
-
- For more information about plugins, see the \l {How to Create Qt
- Plugins} document.
-*/
diff --git a/examples/designer/taskmenuextension/.prev_CMakeLists.txt b/examples/designer/taskmenuextension/.prev_CMakeLists.txt
deleted file mode 100644
index 0a6900865..000000000
--- a/examples/designer/taskmenuextension/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-# Generated from taskmenuextension.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(taskmenuextension LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
-find_package(Qt6 COMPONENTS Designer)
-
-add_qt_gui_executable(taskmenuextension
- tictactoe.cpp tictactoe.h
- tictactoedialog.cpp tictactoedialog.h
- tictactoeplugin.cpp tictactoeplugin.h
- tictactoetaskmenu.cpp tictactoetaskmenu.h
-)
-target_link_libraries(taskmenuextension PUBLIC
- Qt::Core
- Qt::Designer
- Qt::Gui
- Qt::Widgets
-)
-
-install(TARGETS taskmenuextension
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/designer/taskmenuextension/CMakeLists.txt b/examples/designer/taskmenuextension/CMakeLists.txt
index da08eaddc..b1ed49154 100644
--- a/examples/designer/taskmenuextension/CMakeLists.txt
+++ b/examples/designer/taskmenuextension/CMakeLists.txt
@@ -1,43 +1,55 @@
-# Generated from taskmenuextension.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(taskmenuextension LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/plugins/designer") # special case
+#! [0]
+find_package(Qt6 REQUIRED COMPONENTS Core Designer Gui Widgets)
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
-find_package(Qt6 COMPONENTS Designer)
-
-# special case begin
qt_add_plugin(taskmenuextension)
+#! [0]
+
+#! [1]
target_sources(taskmenuextension PRIVATE
tictactoe.cpp tictactoe.h
tictactoedialog.cpp tictactoedialog.h
tictactoeplugin.cpp tictactoeplugin.h
tictactoetaskmenu.cpp tictactoetaskmenu.h
)
-# special case end
+#! [1]
+
+set_target_properties(taskmenuextension PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+#! [2]
target_link_libraries(taskmenuextension PUBLIC
Qt::Core
Qt::Designer
Qt::Gui
Qt::Widgets
)
+#! [2]
+
+if(QT6_INSTALL_PREFIX)
+#! [3]
+ set(INSTALL_EXAMPLEDIR "${QT6_INSTALL_PREFIX}/${QT6_INSTALL_PLUGINS}/designer")
+#! [3]
+else()
+ if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+ endif()
+ set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/plugins/designer")
+endif()
+#! [4]
install(TARGETS taskmenuextension
RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
)
+#! [4]
diff --git a/examples/designer/taskmenuextension/taskmenuextension.pro b/examples/designer/taskmenuextension/taskmenuextension.pro
index 71a3806d6..b4f8cbd1a 100644
--- a/examples/designer/taskmenuextension/taskmenuextension.pro
+++ b/examples/designer/taskmenuextension/taskmenuextension.pro
@@ -1,27 +1,18 @@
-#! [0]
+#! [1]
QT += widgets designer
-#! [0]
-
-QTDIR_build {
-# This is only for the Qt build. Do not use externally. We mean it.
-PLUGIN_TYPE = designer
-PLUGIN_CLASS_NAME = TicTacToePlugin
-load(qt_plugin)
-CONFIG += install_ok
-} else {
-# Public example:
-
#! [1]
+
+#! [0]
TEMPLATE = lib
CONFIG += plugin
-#! [1]
+#! [0]
TARGET = $$qtLibraryTarget($$TARGET)
+#! [3]
target.path = $$[QT_INSTALL_PLUGINS]/designer
INSTALLS += target
-
-}
+#! [3]
#! [2]
HEADERS += tictactoe.h \
diff --git a/examples/designer/taskmenuextension/tictactoe.cpp b/examples/designer/taskmenuextension/tictactoe.cpp
index c6370a2cb..58bc359b3 100644
--- a/examples/designer/taskmenuextension/tictactoe.cpp
+++ b/examples/designer/taskmenuextension/tictactoe.cpp
@@ -1,87 +1,41 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "tictactoe.h"
#include <QMouseEvent>
#include <QPainter>
-static inline QString defaultState() { return QStringLiteral("---------"); }
+using namespace Qt::StringLiterals;
+
+static inline QString defaultState() { return u"---------"_s; }
TicTacToe::TicTacToe(QWidget *parent)
- : QWidget(parent)
+ : QWidget(parent), myState(defaultState())
{
}
QSize TicTacToe::minimumSizeHint() const
{
- return QSize(200, 200);
+ return {200, 200};
}
QSize TicTacToe::sizeHint() const
{
- return QSize(200, 200);
+ return {200, 200};
}
void TicTacToe::setState(const QString &newState)
{
turnNumber = 0;
myState = defaultState();
- int position = 0;
- while (position < 9 && position < newState.length()) {
- QChar mark = newState.at(position);
+ const int count = qMin(9, int(newState.length()));
+ for (int position = 0; position < count; ++position) {
+ const QChar mark = newState.at(position);
if (mark == Cross || mark == Nought) {
++turnNumber;
- myState.replace(position, 1, mark);
+ myState[position] = mark;
}
- position++;
}
update();
}
@@ -102,19 +56,16 @@ void TicTacToe::mousePressEvent(QMouseEvent *event)
{
if (turnNumber == 9) {
clearBoard();
- update();
- } else {
- for (int position = 0; position < 9; ++position) {
- QRect cell = cellRect(position / 3, position % 3);
- if (cell.contains(event->pos())) {
- if (myState.at(position) == Empty) {
- if (turnNumber % 2 == 0)
- myState.replace(position, 1, Cross);
- else
- myState.replace(position, 1, Nought);
- ++turnNumber;
- update();
- }
+ return;
+ }
+ for (int position = 0; position < 9; ++position) {
+ const QRect &cell = cellRect(position);
+ if (cell.contains(event->position().toPoint())) {
+ if (myState.at(position) == Empty) {
+ myState[position] = turnNumber % 2 == 0
+ ? Cross : Nought;
+ ++turnNumber;
+ update();
}
}
}
@@ -134,7 +85,7 @@ void TicTacToe::paintEvent(QPaintEvent * /* event */)
painter.setPen(QPen(Qt::darkBlue, 2));
for (int position = 0; position < 9; ++position) {
- QRect cell = cellRect(position / 3, position % 3);
+ const QRect &cell = cellRect(position);
if (myState.at(position) == Cross) {
painter.drawLine(cell.topLeft(), cell.bottomRight());
@@ -150,7 +101,7 @@ void TicTacToe::paintEvent(QPaintEvent * /* event */)
if (myState.at(position) != Empty
&& myState.at(position + 1) == myState.at(position)
&& myState.at(position + 2) == myState.at(position)) {
- int y = cellRect((position / 3), 0).center().y();
+ const int y = cellRect(position).center().y();
painter.drawLine(0, y, width(), y);
turnNumber = 9;
}
@@ -160,7 +111,7 @@ void TicTacToe::paintEvent(QPaintEvent * /* event */)
if (myState.at(position) != Empty
&& myState.at(position + 3) == myState.at(position)
&& myState.at(position + 6) == myState.at(position)) {
- int x = cellRect(0, position).center().x();
+ const int x = cellRect(position).center().x();
painter.drawLine(x, 0, x, height());
turnNumber = 9;
}
@@ -177,12 +128,15 @@ void TicTacToe::paintEvent(QPaintEvent * /* event */)
}
}
-QRect TicTacToe::cellRect(int row, int column) const
+QRect TicTacToe::cellRect(int position) const
{
const int HMargin = width() / 30;
const int VMargin = height() / 30;
- return QRect(column * cellWidth() + HMargin,
- row * cellHeight() + VMargin,
- cellWidth() - 2 * HMargin,
- cellHeight() - 2 * VMargin);
+ const int row = position / 3;
+ const int column = position % 3;
+ const QPoint pos{column * cellWidth() + HMargin,
+ row * cellHeight() + VMargin};
+ const QSize size{cellWidth() - 2 * HMargin,
+ cellHeight() - 2 * VMargin};
+ return {pos, size};
}
diff --git a/examples/designer/taskmenuextension/tictactoe.h b/examples/designer/taskmenuextension/tictactoe.h
index 23784d750..60b82a58b 100644
--- a/examples/designer/taskmenuextension/tictactoe.h
+++ b/examples/designer/taskmenuextension/tictactoe.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef TICTACTOE_H
#define TICTACTOE_H
@@ -82,7 +35,7 @@ private:
static constexpr char16_t Cross = 'X';
static constexpr char16_t Nought = 'O';
- QRect cellRect(int row, int col) const;
+ QRect cellRect(int position) const;
int cellWidth() const { return width() / 3; }
int cellHeight() const { return height() / 3; }
diff --git a/examples/designer/taskmenuextension/tictactoedialog.cpp b/examples/designer/taskmenuextension/tictactoedialog.cpp
index 8b62064f8..b0c9acc3d 100644
--- a/examples/designer/taskmenuextension/tictactoedialog.cpp
+++ b/examples/designer/taskmenuextension/tictactoedialog.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "tictactoe.h"
#include "tictactoedialog.h"
@@ -74,11 +27,10 @@ TicTacToeDialog::TicTacToeDialog(TicTacToe *tic, QWidget *parent)
connect(buttonBox, &QDialogButtonBox::accepted, this, &TicTacToeDialog::saveState);
connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
- QVBoxLayout *mainLayout = new QVBoxLayout;
+ auto *mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(editor);
mainLayout->addWidget(buttonBox);
- setLayout(mainLayout);
setWindowTitle(tr("Edit State"));
}
//! [0]
@@ -86,7 +38,7 @@ TicTacToeDialog::TicTacToeDialog(TicTacToe *tic, QWidget *parent)
//! [1]
QSize TicTacToeDialog::sizeHint() const
{
- return QSize(250, 250);
+ return {250, 250};
}
//! [1]
@@ -101,10 +53,8 @@ void TicTacToeDialog::resetState()
void TicTacToeDialog::saveState()
{
//! [3] //! [4]
- if (QDesignerFormWindowInterface *formWindow
- = QDesignerFormWindowInterface::findFormWindow(ticTacToe)) {
+ if (auto *formWindow = QDesignerFormWindowInterface::findFormWindow(ticTacToe))
formWindow->cursor()->setProperty("state", editor->state());
- }
//! [4] //! [5]
accept();
}
diff --git a/examples/designer/taskmenuextension/tictactoedialog.h b/examples/designer/taskmenuextension/tictactoedialog.h
index e82edaa11..4dfae744e 100644
--- a/examples/designer/taskmenuextension/tictactoedialog.h
+++ b/examples/designer/taskmenuextension/tictactoedialog.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef TICTACTOEDIALOG_H
#define TICTACTOEDIALOG_H
diff --git a/examples/designer/taskmenuextension/tictactoeplugin.cpp b/examples/designer/taskmenuextension/tictactoeplugin.cpp
index 724720ad5..fc729c8d8 100644
--- a/examples/designer/taskmenuextension/tictactoeplugin.cpp
+++ b/examples/designer/taskmenuextension/tictactoeplugin.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "tictactoe.h"
#include "tictactoeplugin.h"
@@ -56,6 +9,8 @@
#include <QtDesigner/QExtensionManager>
#include <QtPlugin>
+using namespace Qt::StringLiterals;
+
//! [0]
TicTacToePlugin::TicTacToePlugin(QObject *parent)
: QObject(parent)
@@ -64,32 +19,32 @@ TicTacToePlugin::TicTacToePlugin(QObject *parent)
QString TicTacToePlugin::name() const
{
- return QStringLiteral("TicTacToe");
+ return u"TicTacToe"_s;
}
QString TicTacToePlugin::group() const
{
- return QStringLiteral("Display Widgets [Examples]");
+ return u"Display Widgets [Examples]"_s;
}
QString TicTacToePlugin::toolTip() const
{
- return QString();
+ return u"Tic Tac Toe Example, demonstrating class QDesignerTaskMenuExtension (C++)"_s;
}
QString TicTacToePlugin::whatsThis() const
{
- return QString();
+ return {};
}
QString TicTacToePlugin::includeFile() const
{
- return QStringLiteral("tictactoe.h");
+ return u"tictactoe.h"_s;
}
QIcon TicTacToePlugin::icon() const
{
- return QIcon();
+ return {};
}
bool TicTacToePlugin::isContainer() const
@@ -99,8 +54,8 @@ bool TicTacToePlugin::isContainer() const
QWidget *TicTacToePlugin::createWidget(QWidget *parent)
{
- TicTacToe *ticTacToe = new TicTacToe(parent);
- ticTacToe->setState(QStringLiteral("-X-XO----"));
+ auto *ticTacToe = new TicTacToe(parent);
+ ticTacToe->setState(u"-X-XO----"_s);
return ticTacToe;
}
@@ -116,8 +71,8 @@ void TicTacToePlugin::initialize(QDesignerFormEditorInterface *formEditor)
if (initialized)
return;
- QExtensionManager *manager = formEditor->extensionManager();
- Q_ASSERT(manager != 0);
+ auto *manager = formEditor->extensionManager();
+ Q_ASSERT(manager != nullptr);
//! [2]
//! [3]
@@ -129,19 +84,20 @@ void TicTacToePlugin::initialize(QDesignerFormEditorInterface *formEditor)
QString TicTacToePlugin::domXml() const
{
- return QLatin1String("\
-<ui language=\"c++\">\
- <widget class=\"TicTacToe\" name=\"ticTacToe\"/>\
- <customwidgets>\
- <customwidget>\
- <class>TicTacToe</class>\
- <propertyspecifications>\
- <tooltip name=\"state\">Tic Tac Toe state</tooltip>\
- <stringpropertyspecification name=\"state\" notr=\"true\" type=\"singleline\"/>\
- </propertyspecifications>\
- </customwidget>\
- </customwidgets>\
-</ui>");
+ return uR"(
+<ui language="c++">
+ <widget class="TicTacToe" name="ticTacToe"/>
+ <customwidgets>
+ <customwidget>
+ <class>TicTacToe</class>
+ <propertyspecifications>
+ <tooltip name="state">Tic Tac Toe state</tooltip>
+ <stringpropertyspecification name="state" notr="true" type="singleline"/>
+ </propertyspecifications>
+ </customwidget>
+ </customwidgets>
+</ui>
+)"_s;
}
//! [3]
diff --git a/examples/designer/taskmenuextension/tictactoeplugin.h b/examples/designer/taskmenuextension/tictactoeplugin.h
index 9aa8b5650..8826266a4 100644
--- a/examples/designer/taskmenuextension/tictactoeplugin.h
+++ b/examples/designer/taskmenuextension/tictactoeplugin.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
#ifndef TICTACTOEPLUGIN_H
diff --git a/examples/designer/taskmenuextension/tictactoetaskmenu.cpp b/examples/designer/taskmenuextension/tictactoetaskmenu.cpp
index 75d1f625c..b91994924 100644
--- a/examples/designer/taskmenuextension/tictactoetaskmenu.cpp
+++ b/examples/designer/taskmenuextension/tictactoetaskmenu.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "tictactoe.h"
#include "tictactoedialog.h"
@@ -102,7 +55,7 @@ QObject *TicTacToeTaskMenuFactory::createExtension(QObject *object,
if (iid != Q_TYPEID(QDesignerTaskMenuExtension))
return nullptr;
- if (TicTacToe *tic = qobject_cast<TicTacToe*>(object))
+ if (auto *tic = qobject_cast<TicTacToe*>(object))
return new TicTacToeTaskMenu(tic, parent);
return nullptr;
diff --git a/examples/designer/taskmenuextension/tictactoetaskmenu.h b/examples/designer/taskmenuextension/tictactoetaskmenu.h
index a57ded625..ef857335a 100644
--- a/examples/designer/taskmenuextension/tictactoetaskmenu.h
+++ b/examples/designer/taskmenuextension/tictactoetaskmenu.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef TICTACTOETASKMENU_H
#define TICTACTOETASKMENU_H
diff --git a/examples/designer/worldtimeclockbuilder/CMakeLists.txt b/examples/designer/worldtimeclockbuilder/CMakeLists.txt
deleted file mode 100644
index 8c703138c..000000000
--- a/examples/designer/worldtimeclockbuilder/CMakeLists.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-# Generated from worldtimeclockbuilder.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(worldtimeclockbuilder LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/designer/worldtimeclockbuilder")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
-find_package(Qt6 COMPONENTS UiTools)
-
-add_qt_gui_executable(worldtimeclockbuilder
- main.cpp
-)
-target_link_libraries(worldtimeclockbuilder PUBLIC
- Qt::Core
- Qt::Gui
- Qt::UiTools
- Qt::Widgets
-)
-
-
-# Resources:
-set(worldtimeclockbuilder_resource_files
- "form.ui"
-)
-
-qt6_add_resources(worldtimeclockbuilder "worldtimeclockbuilder"
- PREFIX
- "/forms"
- FILES
- ${worldtimeclockbuilder_resource_files}
-)
-
-install(TARGETS worldtimeclockbuilder
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/designer/worldtimeclockbuilder/form.ui b/examples/designer/worldtimeclockbuilder/form.ui
deleted file mode 100644
index e5be1d911..000000000
--- a/examples/designer/worldtimeclockbuilder/form.ui
+++ /dev/null
@@ -1,162 +0,0 @@
-<ui version="4.0" >
- <author></author>
- <comment></comment>
- <exportmacro></exportmacro>
- <class>WorldTimeForm</class>
- <widget class="QWidget" name="WorldTimeForm" >
- <property name="geometry" >
- <rect>
- <x>0</x>
- <y>0</y>
- <width>400</width>
- <height>300</height>
- </rect>
- </property>
- <property name="windowTitle" >
- <string>World Time Clock</string>
- </property>
- <layout class="QHBoxLayout" >
- <property name="margin" >
- <number>9</number>
- </property>
- <property name="spacing" >
- <number>6</number>
- </property>
- <item>
- <widget class="WorldTimeClock" name="worldTimeClock" />
- </item>
- <item>
- <layout class="QVBoxLayout" >
- <property name="margin" >
- <number>1</number>
- </property>
- <property name="spacing" >
- <number>6</number>
- </property>
- <item>
- <spacer>
- <property name="orientation" >
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" >
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QHBoxLayout" >
- <property name="margin" >
- <number>1</number>
- </property>
- <property name="spacing" >
- <number>6</number>
- </property>
- <item>
- <widget class="QLabel" name="label" >
- <property name="text" >
- <string>Current time:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QTimeEdit" name="timeEdit" >
- <property name="readOnly" >
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" >
- <property name="margin" >
- <number>1</number>
- </property>
- <property name="spacing" >
- <number>6</number>
- </property>
- <item>
- <widget class="QLabel" name="label_2" >
- <property name="text" >
- <string>Set time zone:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="spinBox" >
- <property name="maximum" >
- <number>12</number>
- </property>
- <property name="minimum" >
- <number>-12</number>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <spacer>
- <property name="orientation" >
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" >
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <pixmapfunction></pixmapfunction>
- <customwidgets>
- <customwidget>
- <class>WorldTimeClock</class>
- <extends></extends>
- <header>worldtimeclock.h</header>
- <container>0</container>
- <pixmap></pixmap>
- </customwidget>
- </customwidgets>
- <resources/>
- <connections>
- <connection>
- <sender>spinBox</sender>
- <signal>valueChanged(int)</signal>
- <receiver>worldTimeClock</receiver>
- <slot>setTimeZone(int)</slot>
- <hints>
- <hint type="sourcelabel" >
- <x>339</x>
- <y>166</y>
- </hint>
- <hint type="destinationlabel" >
- <x>157</x>
- <y>230</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>worldTimeClock</sender>
- <signal>updated(QTime)</signal>
- <receiver>timeEdit</receiver>
- <slot>setTime(QTime)</slot>
- <hints>
- <hint type="sourcelabel" >
- <x>141</x>
- <y>59</y>
- </hint>
- <hint type="destinationlabel" >
- <x>291</x>
- <y>133</y>
- </hint>
- </hints>
- </connection>
- </connections>
-</ui>
diff --git a/examples/designer/worldtimeclockbuilder/main.cpp b/examples/designer/worldtimeclockbuilder/main.cpp
deleted file mode 100644
index ad2728079..000000000
--- a/examples/designer/worldtimeclockbuilder/main.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//! [0]
-#include <QtUiTools>
-//! [0]
-#include <QApplication>
-#include <QWidget>
-#include <QFile>
-//! [1]
-int main(int argc, char *argv[])
-{
- Q_INIT_RESOURCE(worldtimeclockbuilder);
-
- QApplication app(argc, argv);
-
- QUiLoader loader;
-//! [1]
-
-//! [2]
- QFile file(":/forms/form.ui");
- file.open(QFile::ReadOnly);
-
- QWidget *widget = loader.load(&file);
-
- file.close();
- widget->show();
-//! [2]
-
-//! [3]
- return app.exec();
-}
-//! [3]
diff --git a/examples/designer/worldtimeclockbuilder/worldtimeclockbuilder.pro b/examples/designer/worldtimeclockbuilder/worldtimeclockbuilder.pro
deleted file mode 100644
index 1e420aa65..000000000
--- a/examples/designer/worldtimeclockbuilder/worldtimeclockbuilder.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-#! [0]
-QT += widgets uitools
-SOURCES = main.cpp
-RESOURCES = worldtimeclockbuilder.qrc
-#! [0]
-
-target.path = $$[QT_INSTALL_EXAMPLES]/designer/worldtimeclockbuilder
-INSTALLS += target
diff --git a/examples/designer/worldtimeclockbuilder/worldtimeclockbuilder.qrc b/examples/designer/worldtimeclockbuilder/worldtimeclockbuilder.qrc
deleted file mode 100644
index 89d5ac3c2..000000000
--- a/examples/designer/worldtimeclockbuilder/worldtimeclockbuilder.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource prefix="/forms">
- <file>form.ui</file>
-</qresource>
-</RCC>
diff --git a/examples/designer/worldtimeclockplugin/.prev_CMakeLists.txt b/examples/designer/worldtimeclockplugin/.prev_CMakeLists.txt
deleted file mode 100644
index 52eb77843..000000000
--- a/examples/designer/worldtimeclockplugin/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-# Generated from worldtimeclockplugin.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(worldtimeclockplugin LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
-find_package(Qt6 COMPONENTS UiPlugin)
-
-add_qt_gui_executable(worldtimeclockplugin
- worldtimeclock.cpp worldtimeclock.h
- worldtimeclockplugin.cpp worldtimeclockplugin.h
-)
-target_link_libraries(worldtimeclockplugin PUBLIC
- Qt::Core
- Qt::Gui
- Qt::UiPlugin
- Qt::Widgets
-)
-
-install(TARGETS worldtimeclockplugin
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/designer/worldtimeclockplugin/CMakeLists.txt b/examples/designer/worldtimeclockplugin/CMakeLists.txt
deleted file mode 100644
index daff406c6..000000000
--- a/examples/designer/worldtimeclockplugin/CMakeLists.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-# Generated from worldtimeclockplugin.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(worldtimeclockplugin LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/plugins/designer") # special case
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
-find_package(Qt6 COMPONENTS UiPlugin)
-
-# special case begin
-qt_add_plugin(worldtimeclockplugin)
-target_sources(worldtimeclockplugin PRIVATE
- worldtimeclock.cpp worldtimeclock.h
- worldtimeclockplugin.cpp worldtimeclockplugin.h
-)
-# special case end
-target_link_libraries(worldtimeclockplugin PUBLIC
- Qt::Core
- Qt::Gui
- Qt::UiPlugin
- Qt::Widgets
-)
-
-install(TARGETS worldtimeclockplugin
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/designer/worldtimeclockplugin/worldtimeclock.cpp b/examples/designer/worldtimeclockplugin/worldtimeclock.cpp
deleted file mode 100644
index 366394287..000000000
--- a/examples/designer/worldtimeclockplugin/worldtimeclock.cpp
+++ /dev/null
@@ -1,131 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "worldtimeclock.h"
-
-#include <QMouseEvent>
-#include <QPainter>
-#include <QTimer>
-
-WorldTimeClock::WorldTimeClock(QWidget *parent)
- : QWidget(parent)
-{
- QTimer *timer = new QTimer(this);
- connect(timer, &QTimer::timeout, this, QOverload<>::of(&QWidget::update));
- timer->start(1000);
-
- setWindowTitle(tr("World Time Clock"));
- resize(200, 200);
-}
-
-void WorldTimeClock::paintEvent(QPaintEvent *)
-{
- static const QPoint hourHand[3] = {
- QPoint(7, 8),
- QPoint(-7, 8),
- QPoint(0, -40)
- };
- static const QPoint minuteHand[3] = {
- QPoint(7, 8),
- QPoint(-7, 8),
- QPoint(0, -70)
- };
-
- QColor hourColor(127, 0, 127);
- QColor minuteColor(0, 127, 127, 191);
-
- int side = qMin(width(), height());
- QTime time = QTime::currentTime();
- time = time.addSecs(timeZoneOffset);
-
- QPainter painter(this);
- painter.setRenderHint(QPainter::Antialiasing);
- painter.translate(width() / 2, height() / 2);
- painter.scale(side / 200.0, side / 200.0);
-
- painter.setPen(Qt::NoPen);
- painter.setBrush(hourColor);
-
- painter.save();
- painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)));
- painter.drawConvexPolygon(hourHand, 3);
- painter.restore();
-
- painter.setPen(hourColor);
-
- for (int i = 0; i < 12; ++i) {
- painter.drawLine(88, 0, 96, 0);
- painter.rotate(30.0);
- }
-
- painter.setPen(Qt::NoPen);
- painter.setBrush(minuteColor);
-
- painter.save();
- painter.rotate(6.0 * (time.minute() + time.second() / 60.0));
- painter.drawConvexPolygon(minuteHand, 3);
- painter.restore();
-
- painter.setPen(minuteColor);
-
- for (int j = 0; j < 60; ++j) {
- if ((j % 5) != 0)
- painter.drawLine(92, 0, 96, 0);
- painter.rotate(6.0);
- }
-
- emit updated(time);
-}
-
-void WorldTimeClock::setTimeZone(int hourOffset)
-{
- timeZoneOffset = qMin(qMax(-12, hourOffset), 12) * 3600;
- update();
-}
diff --git a/examples/designer/worldtimeclockplugin/worldtimeclock.h b/examples/designer/worldtimeclockplugin/worldtimeclock.h
deleted file mode 100644
index e2d54a7e4..000000000
--- a/examples/designer/worldtimeclockplugin/worldtimeclock.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef WORLDTIMECLOCK_H
-#define WORLDTIMECLOCK_H
-
-#include <QTime>
-#include <QWidget>
-#include <QtUiPlugin/QDesignerExportWidget>
-
-//! [0] //! [1]
-class QDESIGNER_WIDGET_EXPORT WorldTimeClock : public QWidget
-{
- Q_OBJECT
-//! [0]
-
-public:
- explicit WorldTimeClock(QWidget *parent = nullptr);
-
-public slots:
- void setTimeZone(int hourOffset);
-
-signals:
- void updated(QTime currentTime);
-
-protected:
- void paintEvent(QPaintEvent *event) override;
-
-private:
- int timeZoneOffset = 0;
-//! [2]
-};
-//! [1] //! [2]
-
-#endif
diff --git a/examples/designer/worldtimeclockplugin/worldtimeclockplugin.cpp b/examples/designer/worldtimeclockplugin/worldtimeclockplugin.cpp
deleted file mode 100644
index 8cd059c56..000000000
--- a/examples/designer/worldtimeclockplugin/worldtimeclockplugin.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "worldtimeclock.h"
-#include "worldtimeclockplugin.h"
-
-#include <QtPlugin>
-
-WorldTimeClockPlugin::WorldTimeClockPlugin(QObject *parent)
- : QObject(parent)
-{
-}
-
-void WorldTimeClockPlugin::initialize(QDesignerFormEditorInterface * /* core */)
-{
- if (initialized)
- return;
-
- initialized = true;
-}
-
-bool WorldTimeClockPlugin::isInitialized() const
-{
- return initialized;
-}
-
-QWidget *WorldTimeClockPlugin::createWidget(QWidget *parent)
-{
- return new WorldTimeClock(parent);
-}
-
-QString WorldTimeClockPlugin::name() const
-{
- return QStringLiteral("WorldTimeClock");
-}
-
-QString WorldTimeClockPlugin::group() const
-{
- return QStringLiteral("Display Widgets [Examples]");
-}
-
-QIcon WorldTimeClockPlugin::icon() const
-{
- return QIcon();
-}
-
-QString WorldTimeClockPlugin::toolTip() const
-{
- return QString();
-}
-
-QString WorldTimeClockPlugin::whatsThis() const
-{
- return QString();
-}
-
-bool WorldTimeClockPlugin::isContainer() const
-{
- return false;
-}
-
-QString WorldTimeClockPlugin::domXml() const
-{
- return "<ui language=\"c++\">\n"
- " <widget class=\"WorldTimeClock\" name=\"worldTimeClock\">\n"
- " <property name=\"geometry\">\n"
- " <rect>\n"
- " <x>0</x>\n"
- " <y>0</y>\n"
- " <width>100</width>\n"
- " <height>100</height>\n"
- " </rect>\n"
- " </property>\n"
- " </widget>\n"
- "</ui>";
-}
-
-QString WorldTimeClockPlugin::includeFile() const
-{
- return QStringLiteral("worldtimeclock.h");
-}
diff --git a/examples/designer/worldtimeclockplugin/worldtimeclockplugin.h b/examples/designer/worldtimeclockplugin/worldtimeclockplugin.h
deleted file mode 100644
index 0af0b1dd0..000000000
--- a/examples/designer/worldtimeclockplugin/worldtimeclockplugin.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef WORLDTIMECLOCKPLUGIN_H
-#define WORLDTIMECLOCKPLUGIN_H
-
-#include <QtUiPlugin/QDesignerCustomWidgetInterface>
-
-//! [0]
-class WorldTimeClockPlugin : public QObject,
- public QDesignerCustomWidgetInterface
-{
- Q_OBJECT
-//! [1]
- Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetInterface")
-//! [1]
- Q_INTERFACES(QDesignerCustomWidgetInterface)
-
-public:
- explicit WorldTimeClockPlugin(QObject *parent = nullptr);
-
- bool isContainer() const override;
- bool isInitialized() const override;
- QIcon icon() const override;
- QString domXml() const override;
- QString group() const override;
- QString includeFile() const override;
- QString name() const override;
- QString toolTip() const override;
- QString whatsThis() const override;
- QWidget *createWidget(QWidget *parent) override;
- void initialize(QDesignerFormEditorInterface *core) override;
-
-private:
- bool initialized = false;
-};
-//! [0]
-
-#endif
diff --git a/examples/designer/worldtimeclockplugin/worldtimeclockplugin.pro b/examples/designer/worldtimeclockplugin/worldtimeclockplugin.pro
deleted file mode 100644
index b6332ce46..000000000
--- a/examples/designer/worldtimeclockplugin/worldtimeclockplugin.pro
+++ /dev/null
@@ -1,30 +0,0 @@
-#! [0]
-QT += widgets uiplugin
-#! [0]
-
-QTDIR_build {
-# This is only for the Qt build. Do not use externally. We mean it.
-PLUGIN_TYPE = designer
-PLUGIN_CLASS_NAME = WorldTimeClockPlugin
-load(qt_plugin)
-CONFIG += install_ok
-} else {
-# Public example:
-
-TARGET = $$qtLibraryTarget($$TARGET)
-#! [1]
-CONFIG += plugin
-TEMPLATE = lib
-#! [1]
-
-target.path = $$[QT_INSTALL_PLUGINS]/designer
-INSTALLS += target
-
-}
-
-#! [2]
-HEADERS = worldtimeclock.h \
- worldtimeclockplugin.h
-SOURCES = worldtimeclock.cpp \
- worldtimeclockplugin.cpp
-#! [2]
diff --git a/examples/examples.pro b/examples/examples.pro
index 2003bc514..0300e3c04 100644
--- a/examples/examples.pro
+++ b/examples/examples.pro
@@ -2,7 +2,3 @@ TEMPLATE = subdirs
qtHaveModule(widgets): SUBDIRS += help designer linguist uitools assistant
!qtConfig(process): SUBDIRS -= assistant designer
-
-qtNomakeTools( \
- assistant \
-)
diff --git a/examples/help/CMakeLists.txt b/examples/help/CMakeLists.txt
index b61829db7..d51ae1d54 100644
--- a/examples/help/CMakeLists.txt
+++ b/examples/help/CMakeLists.txt
@@ -1,3 +1 @@
-# Generated from help.pro.
-
-add_subdirectory(contextsensitivehelp)
+qt_internal_add_example(contextsensitivehelp)
diff --git a/examples/help/contextsensitivehelp/CMakeLists.txt b/examples/help/contextsensitivehelp/CMakeLists.txt
index 0bcf89871..dd0c30434 100644
--- a/examples/help/contextsensitivehelp/CMakeLists.txt
+++ b/examples/help/contextsensitivehelp/CMakeLists.txt
@@ -1,35 +1,37 @@
-# Generated from contextsensitivehelp.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(contextsensitivehelp LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
+ set(INSTALL_EXAMPLESDIR "examples")
endif()
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/help/contextsensitivehelp")
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Help)
-find_package(Qt6 COMPONENTS Widgets)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Help Widgets)
+
+qt_standard_project_setup()
-add_qt_gui_executable(contextsensitivehelp
+qt_add_executable(contextsensitivehelp
helpbrowser.cpp helpbrowser.h
main.cpp
wateringconfigdialog.cpp wateringconfigdialog.h wateringconfigdialog.ui
)
+
+set_target_properties(contextsensitivehelp PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
target_link_libraries(contextsensitivehelp PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Help
- Qt::Widgets
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Help
+ Qt6::Widgets
)
install(TARGETS contextsensitivehelp
diff --git a/examples/help/contextsensitivehelp/docs/wateringmachine.qch b/examples/help/contextsensitivehelp/docs/wateringmachine.qch
index 35d29be22..1433acfc9 100644
--- a/examples/help/contextsensitivehelp/docs/wateringmachine.qch
+++ b/examples/help/contextsensitivehelp/docs/wateringmachine.qch
Binary files differ
diff --git a/examples/help/contextsensitivehelp/docs/wateringmachine.qhc b/examples/help/contextsensitivehelp/docs/wateringmachine.qhc
index b5653c3ff..98cfa1481 100644
--- a/examples/help/contextsensitivehelp/docs/wateringmachine.qhc
+++ b/examples/help/contextsensitivehelp/docs/wateringmachine.qhc
Binary files differ
diff --git a/examples/help/contextsensitivehelp/helpbrowser.cpp b/examples/help/contextsensitivehelp/helpbrowser.cpp
index f0cc4a1d7..893b32868 100644
--- a/examples/help/contextsensitivehelp/helpbrowser.cpp
+++ b/examples/help/contextsensitivehelp/helpbrowser.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtCore/QLibraryInfo>
#include <QtWidgets/QApplication>
@@ -58,13 +11,13 @@
HelpBrowser::HelpBrowser(QWidget *parent)
: QTextBrowser(parent)
{
- QString collectionFile = QLibraryInfo::location(QLibraryInfo::ExamplesPath)
+ QString collectionFile = QLibraryInfo::path(QLibraryInfo::ExamplesPath)
+ QLatin1String("/help/contextsensitivehelp/docs/wateringmachine.qhc");
m_helpEngine = new QHelpEngineCore(collectionFile, this);
if (!m_helpEngine->setupData()) {
delete m_helpEngine;
- m_helpEngine = 0;
+ m_helpEngine = nullptr;
}
}
diff --git a/examples/help/contextsensitivehelp/helpbrowser.h b/examples/help/contextsensitivehelp/helpbrowser.h
index 4bd0e8356..b0a59f818 100644
--- a/examples/help/contextsensitivehelp/helpbrowser.h
+++ b/examples/help/contextsensitivehelp/helpbrowser.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef HELPBROWSER_H
#define HELPBROWSER_H
diff --git a/examples/help/contextsensitivehelp/main.cpp b/examples/help/contextsensitivehelp/main.cpp
index ff238a759..5b7559513 100644
--- a/examples/help/contextsensitivehelp/main.cpp
+++ b/examples/help/contextsensitivehelp/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtWidgets/QApplication>
diff --git a/examples/help/contextsensitivehelp/wateringconfigdialog.cpp b/examples/help/contextsensitivehelp/wateringconfigdialog.cpp
index 3444e33ff..602fed4cf 100644
--- a/examples/help/contextsensitivehelp/wateringconfigdialog.cpp
+++ b/examples/help/contextsensitivehelp/wateringconfigdialog.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "wateringconfigdialog.h"
@@ -63,8 +16,8 @@ WateringConfigDialog::WateringConfigDialog()
m_widgetInfo.insert(m_ui.sourceComboBox, tr("water source"));
m_widgetInfo.insert(m_ui.filterCheckBox, tr("water filtering"));
- connect(qApp, SIGNAL(focusChanged(QWidget*,QWidget*)),
- this, SLOT(focusChanged(QWidget*,QWidget*)));
+ connect(qApp, &QApplication::focusChanged,
+ this, &WateringConfigDialog::focusChanged);
}
void WateringConfigDialog::focusChanged(QWidget *, QWidget *now)
diff --git a/examples/help/contextsensitivehelp/wateringconfigdialog.h b/examples/help/contextsensitivehelp/wateringconfigdialog.h
index 7ef65ec54..d2f358712 100644
--- a/examples/help/contextsensitivehelp/wateringconfigdialog.h
+++ b/examples/help/contextsensitivehelp/wateringconfigdialog.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef WATERINGCONFIGDIALOG_H
#define WATERINGCONFIGDIALOG_H
diff --git a/examples/help/doc/src/contextsensitivehelp.qdoc b/examples/help/doc/src/contextsensitivehelp.qdoc
index b353747c8..d1c0771d6 100644
--- a/examples/help/doc/src/contextsensitivehelp.qdoc
+++ b/examples/help/doc/src/contextsensitivehelp.qdoc
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example contextsensitivehelp
\ingroup examples-qthelp
\title Context-Sensitive Help Example
+ \examplecategory {User Interface Components}
\brief Using the QHelpEngineCore class to implement context-sensitive help
for applications.
diff --git a/examples/linguist/CMakeLists.txt b/examples/linguist/CMakeLists.txt
index 612ae91cc..c05860782 100644
--- a/examples/linguist/CMakeLists.txt
+++ b/examples/linguist/CMakeLists.txt
@@ -1,5 +1,7 @@
-# Generated from linguist.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-add_subdirectory(arrowpad)
-add_subdirectory(hellotr)
-add_subdirectory(trollprint)
+qt_internal_add_example(arrowpad)
+qt_internal_add_example(hellotr)
+qt_internal_add_example(i18n)
+qt_internal_add_example(trollprint)
diff --git a/examples/linguist/arrowpad/CMakeLists.txt b/examples/linguist/arrowpad/CMakeLists.txt
index 4781947e2..08fc69693 100644
--- a/examples/linguist/arrowpad/CMakeLists.txt
+++ b/examples/linguist/arrowpad/CMakeLists.txt
@@ -1,29 +1,39 @@
-# Generated from arrowpad.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(arrowpad LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
+ set(INSTALL_EXAMPLESDIR "examples")
endif()
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/linguist/arrowpad")
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+#! [0]
+find_package(Qt6 REQUIRED COMPONENTS LinguistTools)
+
+qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES fr nl)
+#! [0]
-add_qt_gui_executable(arrowpad
+qt_add_executable(arrowpad
arrowpad.cpp arrowpad.h
main.cpp
mainwindow.cpp mainwindow.h
)
+
+#! [1]
+qt6_add_translations(arrowpad
+ QM_FILES_OUTPUT_VARIABLE qm_files)
+install(FILES ${qm_files} DESTINATION ${INSTALL_EXAMPLEDIR})
+#! [1]
+set_target_properties(arrowpad PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
target_link_libraries(arrowpad PUBLIC
Qt::Core
Qt::Gui
diff --git a/examples/linguist/arrowpad/arrowpad.cpp b/examples/linguist/arrowpad/arrowpad.cpp
index 8992d4795..86771ec37 100644
--- a/examples/linguist/arrowpad/arrowpad.cpp
+++ b/examples/linguist/arrowpad/arrowpad.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtWidgets>
diff --git a/examples/linguist/arrowpad/arrowpad.h b/examples/linguist/arrowpad/arrowpad.h
index 872dc4fc5..f908baa7a 100644
--- a/examples/linguist/arrowpad/arrowpad.h
+++ b/examples/linguist/arrowpad/arrowpad.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef ARROWPAD_H
#define ARROWPAD_H
diff --git a/examples/linguist/arrowpad/arrowpad_fr.ts b/examples/linguist/arrowpad/arrowpad_fr.ts
new file mode 100644
index 000000000..1f068c5de
--- /dev/null
+++ b/examples/linguist/arrowpad/arrowpad_fr.ts
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS/>
diff --git a/examples/linguist/arrowpad/arrowpad_nl.ts b/examples/linguist/arrowpad/arrowpad_nl.ts
new file mode 100644
index 000000000..1f068c5de
--- /dev/null
+++ b/examples/linguist/arrowpad/arrowpad_nl.ts
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS/>
diff --git a/examples/linguist/arrowpad/main.cpp b/examples/linguist/arrowpad/main.cpp
index 68c4918fd..44581050e 100644
--- a/examples/linguist/arrowpad/main.cpp
+++ b/examples/linguist/arrowpad/main.cpp
@@ -1,70 +1,25 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtWidgets>
#include "mainwindow.h"
+using namespace Qt::StringLiterals;
+
//! [0]
int main(int argc, char *argv[])
//! [0] //! [1]
{
QApplication app(argc, argv);
- QString locale = QLocale::system().name();
+ auto locale = QLocale::system();
//! [2]
QTranslator translator;
//! [2] //! [3]
- translator.load(QString("arrowpad_") + locale);
- app.installTranslator(&translator);
+ if (translator.load(locale, u"arrowpad"_s, u"_"_s))
+ app.installTranslator(&translator);
//! [1] //! [3]
MainWindow mainWindow;
diff --git a/examples/linguist/arrowpad/mainwindow.cpp b/examples/linguist/arrowpad/mainwindow.cpp
index 663225c0c..6da16a4a5 100644
--- a/examples/linguist/arrowpad/mainwindow.cpp
+++ b/examples/linguist/arrowpad/mainwindow.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtWidgets>
@@ -62,8 +15,8 @@ MainWindow::MainWindow()
//! [1]
exitAct = new QAction(tr("E&xit"), this);
- exitAct->setShortcuts(QKeySequence::Quit);
- connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));
+ exitAct->setShortcut(QKeySequence(tr("Ctrl+Q", "Quit")));
+ connect(exitAct, &QAction::triggered, this, &MainWindow::close);
//! [1]
fileMenu = menuBar()->addMenu(tr("&File"));
diff --git a/examples/linguist/arrowpad/mainwindow.h b/examples/linguist/arrowpad/mainwindow.h
index 271c7f645..0b16d1503 100644
--- a/examples/linguist/arrowpad/mainwindow.h
+++ b/examples/linguist/arrowpad/mainwindow.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
diff --git a/examples/linguist/doc/images/linguist-i18n.png b/examples/linguist/doc/images/linguist-i18n.png
new file mode 100644
index 000000000..20c46c9e6
--- /dev/null
+++ b/examples/linguist/doc/images/linguist-i18n.png
Binary files differ
diff --git a/examples/linguist/doc/snippets/doc_src_examples_arrowpad.cpp b/examples/linguist/doc/snippets/doc_src_examples_arrowpad.cpp
index 38605df52..4d1168109 100644
--- a/examples/linguist/doc/snippets/doc_src_examples_arrowpad.cpp
+++ b/examples/linguist/doc/snippets/doc_src_examples_arrowpad.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
qApp->translate("ArrowPad", x)
diff --git a/examples/linguist/doc/snippets/doc_src_examples_arrowpad.qdoc b/examples/linguist/doc/snippets/doc_src_examples_arrowpad.qdoc
index ddb17bdbe..1d618ef9b 100644
--- a/examples/linguist/doc/snippets/doc_src_examples_arrowpad.qdoc
+++ b/examples/linguist/doc/snippets/doc_src_examples_arrowpad.qdoc
@@ -1,52 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [0]
+lupdate arrowpad.pro
+//! [0]
//! [1]
lrelease arrowpad.pro
@@ -59,6 +16,10 @@ setenv LANG fr
//! [2]
-//! [3]
-set LANG=fr
-//! [3]
+//! [4]
+cmake --build . --target update_translations
+//! [4]
+
+//! [5]
+cmake --build . --target release_translations
+//! [5]
diff --git a/examples/linguist/doc/snippets/doc_src_examples_hellotr.qdoc b/examples/linguist/doc/snippets/doc_src_examples_hellotr.qdoc
index a32a64915..b5f931310 100644
--- a/examples/linguist/doc/snippets/doc_src_examples_hellotr.qdoc
+++ b/examples/linguist/doc/snippets/doc_src_examples_hellotr.qdoc
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
//! [0]
lupdate -verbose hellotr.pro
@@ -79,3 +32,7 @@ linguist hellotr_la.ts
//! [4]
<translation>Orbis, te saluto!</translation>
//! [4]
+
+//! [5]
+cmake --build . --target update_translations
+//! [5]
diff --git a/examples/linguist/doc/snippets/doc_src_examples_trollprint.cpp b/examples/linguist/doc/snippets/doc_src_examples_trollprint.cpp
index 8492f9eb5..667f6745b 100644
--- a/examples/linguist/doc/snippets/doc_src_examples_trollprint.cpp
+++ b/examples/linguist/doc/snippets/doc_src_examples_trollprint.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
twoSidedEnabledRadio = new QRadioButton(tr("Enabled", "two-sided"));
diff --git a/examples/linguist/doc/src/arrowpad.qdoc b/examples/linguist/doc/src/arrowpad.qdoc
index 926aeead9..d4408f77f 100644
--- a/examples/linguist/doc/src/arrowpad.qdoc
+++ b/examples/linguist/doc/src/arrowpad.qdoc
@@ -1,34 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example arrowpad
- \title Arrow Pad Example
\ingroup examples-linguist
+ \examplecategory {User Interface Components}
+
+ \title Arrow Pad Example
+
\brief Understanding the Qt Linguist \e contexts concept and using two
or more languages.
@@ -36,18 +15,33 @@
We will use two translations, French and Dutch, although there is no
effective limit on the number of possible translations that can be used
- with an application. The relevant lines of \c arrowpad.pro are
+ with an application.
+
+ When using qmake, the relevant lines in \c arrowpad.pro are:
\snippet arrowpad/arrowpad.pro 0
\codeline
\snippet arrowpad/arrowpad.pro 1
- Run \c lupdate; it should produce two identical message files
+ When using CMake, the relevant lines in \c CMakeLists.txt are:
+ \snippet arrowpad/CMakeLists.txt 0
+ \codeline
+ \snippet arrowpad/CMakeLists.txt 1
+
+ Run \c lupdate. It should produce two identical message files
\c arrowpad_fr.ts and \c arrowpad_nl.ts. These files will contain all the source
texts marked for translation with \c tr() calls and their contexts.
+ When using qmake, \c lupdate must be run manually:
+
+ \snippet doc/snippets/doc_src_examples_arrowpad.qdoc 0
+
+ When using CMake, build the \c update_translations target to run \c lupdate:
+
+ \snippet doc/snippets/doc_src_examples_arrowpad.qdoc 4
+
See the \l{Qt Linguist Manual} for more information about
- translating Qt application.
+ translating Qt applications.
\section1 Line by Line Walkthrough
@@ -156,9 +150,10 @@
\endlist
\endlist
- It's quickest to press \uicontrol{Alt+D} (which clicks the \uicontrol {Done \& Next}
- button) after typing each translation, since this marks the
+ The \uicontrol {Done \& Next} button marks the
translation as done and moves on to the next source text.
+ It's quicker to use its short cut (see the Translation menu bar)
+ after typing each translation.
Save the file and do the same for Dutch working with \c arrowpad_nl.ts:
@@ -189,21 +184,24 @@
\snippet doc/snippets/doc_src_examples_arrowpad.qdoc 1
- This should create both \c arrowpad_fr.qm and \c arrowpad_nl.qm. Set the \c
- LANG environment variable to \c fr. In Unix, one of the two following
- commands should work
+ when using CMake, type
- \snippet doc/snippets/doc_src_examples_arrowpad.qdoc 2
+ \snippet doc/snippets/doc_src_examples_arrowpad.qdoc 5
- In Windows, either modify \c autoexec.bat or run
+ This should create both \c arrowpad_fr.qm and \c arrowpad_nl.qm.
+
+ To use \c arrowpad_fr.qm, change your system language to French.
+ In Unix, one of the two following commands should work:
+
+ \snippet doc/snippets/doc_src_examples_arrowpad.qdoc 2
- \snippet doc/snippets/doc_src_examples_arrowpad.qdoc 3
+ In Windows or Mac, set your display language to French.
When you run the program, you should now see the French version:
\image linguist-arrowpad_fr.png
- Try the same with Dutch, by setting \c LANG=nl. Now the Dutch
+ Try the same with Dutch (use \c LANG=nl in Unix). Now the Dutch
version should appear:
\image linguist-arrowpad_nl.png
diff --git a/examples/linguist/doc/src/hellotr.qdoc b/examples/linguist/doc/src/hellotr.qdoc
index 924950731..67de1002e 100644
--- a/examples/linguist/doc/src/hellotr.qdoc
+++ b/examples/linguist/doc/src/hellotr.qdoc
@@ -1,33 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example hellotr
\ingroup examples-linguist
+ \examplecategory {User Interface Components}
+
\title Hello tr() Example
\brief Translating a small Hello World program to Latin.
@@ -56,6 +34,10 @@
Tries to load a file called \c hellotr_la.qm (the \c .qm file extension is
implicit) that contains Latin translations for the source texts used in
the program. No error will occur if the file is not found.
+ This example works best on desktop platforms.
+ On platforms like Android and iOS,
+ the .qm file needs to be part of the app bundle. Usually,
+ this involves bundling the .qm file in a Qt resource.
\snippet hellotr/main.cpp 7
@@ -82,17 +64,23 @@
\section1 Creating a Latin Message File
- The first step is to create a project file, \c hellotr.pro, that lists
- all the source files for the project. The project file can be a qmake
- project file, or even an ordinary makefile. Any file that contains
+ The first step is to create a project file that lists
+ all the source files for the project.
+
+ When using qmake, the relevant lines in \c hellotr.pro are:
\snippet hellotr/hellotr.pro 0
\snippet hellotr/hellotr.pro 1
- will work. \c TRANSLATIONS specifies the message files we want to
+ \c TRANSLATIONS specifies the message files we want to
maintain. In this example, we just maintain one set of translations,
namely Latin.
+ When using CMake, the relevant lines in \c CMakeLists.txt are:
+ \snippet hellotr/CMakeLists.txt 0
+ \codeline
+ \snippet hellotr/CMakeLists.txt 1
+
Note that the file extension is \c .ts, not \c .qm. The \c .ts
translation source format is designed for use during the
application's development. Programmers or release managers run
@@ -119,16 +107,23 @@
\c lupdate is used to create and update the message files (\c hellotr_la.ts
in this case) to keep them in sync with the source code. It is safe to
run \c lupdate at any time, as \c lupdate does not remove any
- information. For example, you can put it in the makefile, so the TS
- files are updated whenever the source changes.
+ information.
+
+ Try running \c lupdate right now.
- Try running \c lupdate right now, like this:
+ When using qmake, \c lupdate must be run manually:
\snippet doc/snippets/doc_src_examples_hellotr.qdoc 0
(The \c -verbose option instructs \c lupdate to display messages that
- explain what it is doing.) You should now have a file \c hellotr_la.ts in
- the current directory, containing this:
+ explain what it is doing.)
+
+ When using CMake, build the \c update_translations target to run \c lupdate:
+
+ \snippet doc/snippets/doc_src_examples_hellotr.qdoc 5
+
+ You should now have a file \c hellotr_la.ts in
+ the source directory, containing this:
\snippet doc/snippets/doc_src_examples_hellotr.qdoc 1
diff --git a/examples/linguist/doc/src/i18n.qdoc b/examples/linguist/doc/src/i18n.qdoc
new file mode 100644
index 000000000..a356b09d0
--- /dev/null
+++ b/examples/linguist/doc/src/i18n.qdoc
@@ -0,0 +1,20 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example i18n
+ \ingroup examples-linguist
+ \examplecategory {User Interface Components}
+
+ \title I18N Example
+
+ \brief Demonstrates Qt's support for translated text.
+
+ The Internationalization (I18N) example demonstrates Qt's support for translated
+ text. Developers can write the initial application text in one language, and
+ translations can be provided later without any modifications to the code. It also
+ demonstrates how to detect the system language settings and show the UI in the appropriate
+ languages.
+
+ \image linguist-i18n.png
+*/
diff --git a/examples/linguist/doc/src/trollprint.qdoc b/examples/linguist/doc/src/trollprint.qdoc
index 0228936e4..ffbd57fb8 100644
--- a/examples/linguist/doc/src/trollprint.qdoc
+++ b/examples/linguist/doc/src/trollprint.qdoc
@@ -1,33 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example trollprint
\ingroup examples-linguist
+ \examplecategory {User Interface Components}
+
\title Troll Print Example
\brief Updating translations for later releases.
@@ -142,8 +120,8 @@
\snippet doc/snippets/doc_src_examples_trollprint.cpp 1
- Now run \c lupdate and open \c trollprint_pt.ts with \e {Qt Linguist}. You
- should now see two changes.
+ Now recompile, run \c lupdate and open \c trollprint_pt.ts with
+ \e {Qt Linguist}. You should now see two changes.
First, the translation source file now contains \e three "Enabled",
"Disabled" pairs. The first pair is marked "(obs.)" signifying that they
@@ -217,20 +195,6 @@
Linguist}. The following items are of special interest:
\list
- \li \c MainWindow
- \list
- \li Troll Print 1.0 - marked "(obs.)", obsolete
- \li About Troll Print 1.0 - marked "(obs.)", obsolete
- \li Troll Print 1.0. Copyright 1999 Software, Inc. -
- marked obsolete
- \li Troll Print 1.1 - automatically translated as
- "Troll Imprimir 1.1"
- \li About Troll Print 1.1 - automatically translated as
- "Troll Imprimir 1.1"
- \li Troll Print 1.1. Copyright 1999-2000 Software,
- Inc. - automatically translated as "Troll Imprimir 1.1.
- Copyright 1999-2000 Software, Inc."
- \endlist
\li \c PrintPanel
\list
\li 2-sided - marked "(obs.)", obsolete
@@ -239,8 +203,9 @@
\endlist
\endlist
- Notice that \c lupdate works hard behind the scenes to make revisions
- easier, and it's pretty smart with numbers.
+ In order to make revisions easier, instead of tr("Troll Print 1.0")
+ you can use tr("Troll Print %1").arg("1.0") or such to avoid having to update
+ the string on every release.
Go over the translations in \c MainWindow and mark these as "done".
Translate "\<b\>TROLL PRINT\</b\>" as "\<b\>TROLL IMPRIMIR\</b\>".
diff --git a/examples/linguist/hellotr/CMakeLists.txt b/examples/linguist/hellotr/CMakeLists.txt
index 2d532895f..0fff68ad5 100644
--- a/examples/linguist/hellotr/CMakeLists.txt
+++ b/examples/linguist/hellotr/CMakeLists.txt
@@ -1,27 +1,37 @@
-# Generated from hellotr.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(hellotr LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
+ set(INSTALL_EXAMPLESDIR "examples")
endif()
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/linguist/hellotr")
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+#! [0]
+find_package(Qt6 REQUIRED COMPONENTS LinguistTools)
+
+qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES la)
+#! [0]
-add_qt_gui_executable(hellotr
+qt_add_executable(hellotr
main.cpp
)
+
+#! [1]
+qt6_add_translations(hellotr
+ QM_FILES_OUTPUT_VARIABLE qm_files)
+install(FILES ${qm_files} DESTINATION ${INSTALL_EXAMPLEDIR})
+#! [1]
+set_target_properties(hellotr PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
target_link_libraries(hellotr PUBLIC
Qt::Core
Qt::Gui
diff --git a/examples/linguist/hellotr/hellotr_la.ts b/examples/linguist/hellotr/hellotr_la.ts
new file mode 100644
index 000000000..1f068c5de
--- /dev/null
+++ b/examples/linguist/hellotr/hellotr_la.ts
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS/>
diff --git a/examples/linguist/hellotr/main.cpp b/examples/linguist/hellotr/main.cpp
index 24206f093..e655029fb 100644
--- a/examples/linguist/hellotr/main.cpp
+++ b/examples/linguist/hellotr/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QApplication>
#include <QPushButton>
@@ -64,8 +17,7 @@ int main(int argc, char *argv[])
//! [5]
QTranslator translator;
//! [5] //! [6]
- if (!translator.load("hellotr_la"))
- return 1;
+ Q_UNUSED(translator.load("hellotr_la"));
//! [6] //! [7]
app.installTranslator(&translator);
//! [4] //! [7]
diff --git a/examples/linguist/i18n/CMakeLists.txt b/examples/linguist/i18n/CMakeLists.txt
new file mode 100644
index 000000000..d412177c3
--- /dev/null
+++ b/examples/linguist/i18n/CMakeLists.txt
@@ -0,0 +1,46 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(i18n LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/tools/i18n")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets LinguistTools)
+
+qt_standard_project_setup(
+ I18N_TRANSLATED_LANGUAGES ar cs de el en eo fr it ja ko nb ru sv zh
+)
+
+qt_add_executable(i18n
+ languagechooser.cpp languagechooser.h
+ main.cpp
+ mainwindow.cpp mainwindow.h
+)
+
+set_target_properties(i18n PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(i18n PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::Widgets
+)
+
+qt_add_translations(i18n
+ TS_FILE_DIR translations
+)
+
+install(TARGETS i18n
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/linguist/i18n/i18n.pro b/examples/linguist/i18n/i18n.pro
new file mode 100644
index 000000000..c15d78007
--- /dev/null
+++ b/examples/linguist/i18n/i18n.pro
@@ -0,0 +1,32 @@
+CONFIG += lrelease embed_translations
+
+QT += widgets
+
+HEADERS = \
+ languagechooser.h \
+ mainwindow.h
+
+SOURCES = \
+ languagechooser.cpp \
+ main.cpp \
+ mainwindow.cpp
+
+TRANSLATIONS += \
+ translations/i18n_ar.ts \
+ translations/i18n_cs.ts \
+ translations/i18n_de.ts \
+ translations/i18n_el.ts \
+ translations/i18n_en.ts \
+ translations/i18n_eo.ts \
+ translations/i18n_fr.ts \
+ translations/i18n_it.ts \
+ translations/i18n_ja.ts \
+ translations/i18n_ko.ts \
+ translations/i18n_nb.ts \
+ translations/i18n_ru.ts \
+ translations/i18n_sv.ts \
+ translations/i18n_zh.ts
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/i18n
+INSTALLS += target
diff --git a/examples/linguist/i18n/languagechooser.cpp b/examples/linguist/i18n/languagechooser.cpp
new file mode 100644
index 000000000..a8558cb60
--- /dev/null
+++ b/examples/linguist/i18n/languagechooser.cpp
@@ -0,0 +1,141 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "languagechooser.h"
+#include "mainwindow.h"
+
+#include <QCoreApplication>
+#include <QCheckBox>
+#include <QDialogButtonBox>
+#include <QDir>
+#include <QGridLayout>
+#include <QGroupBox>
+#include <QPushButton>
+#include <QTranslator>
+
+#include <algorithm>
+
+LanguageChooser::LanguageChooser(QWidget *parent) : QDialog(parent, Qt::WindowStaysOnTopHint)
+{
+ groupBox = new QGroupBox("Languages");
+
+ QGridLayout *groupBoxLayout = new QGridLayout;
+
+ const QStringList qmFiles = findQmFiles();
+ const QStringList uiLanguages = QLocale::system().uiLanguages();
+ for (int i = 0; i < qmFiles.size(); ++i) {
+ const QString &qmFile = qmFiles.at(i);
+ QCheckBox *checkBox = new QCheckBox(languageName(qmFile));
+ qmFileForCheckBoxMap.insert(checkBox, qmFile);
+ connect(checkBox, &QCheckBox::toggled, this, &LanguageChooser::checkBoxToggled);
+ if (std::find_if(
+ uiLanguages.begin(), uiLanguages.end(),
+ [qmFile](const QString &lang) -> bool { return languageMatch(lang, qmFile); })
+ != uiLanguages.end())
+ checkBox->setCheckState(Qt::Checked);
+ groupBoxLayout->addWidget(checkBox, i / 2, i % 2);
+ }
+ groupBox->setLayout(groupBoxLayout);
+
+ buttonBox = new QDialogButtonBox;
+ showAllButton = buttonBox->addButton("Show All", QDialogButtonBox::ActionRole);
+ hideAllButton = buttonBox->addButton("Hide All", QDialogButtonBox::ActionRole);
+
+ connect(showAllButton, &QAbstractButton::clicked, this, &LanguageChooser::showAll);
+ connect(hideAllButton, &QAbstractButton::clicked, this, &LanguageChooser::hideAll);
+
+ QVBoxLayout *mainLayout = new QVBoxLayout;
+ mainLayout->addWidget(groupBox);
+ mainLayout->addWidget(buttonBox);
+ setLayout(mainLayout);
+
+ setWindowTitle("I18N");
+}
+
+bool LanguageChooser::languageMatch(QStringView lang, QStringView qmFile)
+{
+ // qmFile: i18n_xx.qm
+ const QStringView prefix{ u"i18n_" };
+ const int langTokenLength = 2; /*FIXME: is checking two chars enough?*/
+ return qmFile.mid(qmFile.indexOf(prefix) + prefix.length(), langTokenLength)
+ == lang.left(langTokenLength);
+}
+
+bool LanguageChooser::eventFilter(QObject *object, QEvent *event)
+{
+ if (event->type() == QEvent::Close) {
+ MainWindow *window = qobject_cast<MainWindow *>(object);
+ if (window) {
+ QCheckBox *checkBox = mainWindowForCheckBoxMap.key(window);
+ if (checkBox)
+ checkBox->setChecked(false);
+ }
+ }
+ return QDialog::eventFilter(object, event);
+}
+
+void LanguageChooser::closeEvent(QCloseEvent * /* event */)
+{
+ QCoreApplication::quit();
+}
+
+void LanguageChooser::checkBoxToggled()
+{
+ QCheckBox *checkBox = qobject_cast<QCheckBox *>(sender());
+ MainWindow *window = mainWindowForCheckBoxMap.value(checkBox);
+ if (!window) {
+ QTranslator translator;
+ const QString qmlFile = qmFileForCheckBoxMap.value(checkBox);
+ if (translator.load(qmlFile))
+ QCoreApplication::installTranslator(&translator);
+ else
+ qWarning("Unable to load %s", qPrintable(QDir::toNativeSeparators(qmlFile)));
+
+ window = new MainWindow;
+ window->setPalette(colorForLanguage(checkBox->text()));
+
+ window->installEventFilter(this);
+ mainWindowForCheckBoxMap.insert(checkBox, window);
+ }
+ window->setVisible(checkBox->isChecked());
+}
+
+void LanguageChooser::showAll()
+{
+ for (auto it = qmFileForCheckBoxMap.keyBegin(); it != qmFileForCheckBoxMap.keyEnd(); ++it)
+ (*it)->setChecked(true);
+}
+
+void LanguageChooser::hideAll()
+{
+ for (auto it = qmFileForCheckBoxMap.keyBegin(); it != qmFileForCheckBoxMap.keyEnd(); ++it)
+ (*it)->setChecked(false);
+}
+
+QStringList LanguageChooser::findQmFiles()
+{
+ QDir dir(":/i18n");
+ QStringList fileNames = dir.entryList(QStringList("*.qm"), QDir::Files, QDir::Name);
+ for (QString &fileName : fileNames)
+ fileName = dir.filePath(fileName);
+ return fileNames;
+}
+
+QString LanguageChooser::languageName(const QString &qmFile)
+{
+ QTranslator translator;
+ if (!translator.load(qmFile)) {
+ qWarning("Unable to load %s", qPrintable(QDir::toNativeSeparators(qmFile)));
+ return {};
+ }
+ return translator.translate("MainWindow", "English");
+}
+
+QColor LanguageChooser::colorForLanguage(const QString &language)
+{
+ size_t hashValue = qHash(language);
+ int red = 156 + (hashValue & 0x3F);
+ int green = 156 + ((hashValue >> 6) & 0x3F);
+ int blue = 156 + ((hashValue >> 12) & 0x3F);
+ return QColor(red, green, blue);
+}
diff --git a/examples/linguist/i18n/languagechooser.h b/examples/linguist/i18n/languagechooser.h
new file mode 100644
index 000000000..789f76203
--- /dev/null
+++ b/examples/linguist/i18n/languagechooser.h
@@ -0,0 +1,50 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef LANGUAGECHOOSER_H
+#define LANGUAGECHOOSER_H
+
+#include <QDialog>
+#include <QHash>
+#include <QStringList>
+
+QT_BEGIN_NAMESPACE
+class QAbstractButton;
+class QCheckBox;
+class QDialogButtonBox;
+class QGroupBox;
+QT_END_NAMESPACE
+
+class MainWindow;
+
+class LanguageChooser : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit LanguageChooser(QWidget *parent = nullptr);
+
+protected:
+ bool eventFilter(QObject *object, QEvent *event) override;
+ void closeEvent(QCloseEvent *event) override;
+
+private slots:
+ void checkBoxToggled();
+ void showAll();
+ void hideAll();
+
+private:
+ static QStringList findQmFiles();
+ static QString languageName(const QString &qmFile);
+ static QColor colorForLanguage(const QString &language);
+ static bool languageMatch(QStringView lang, QStringView qmFile);
+
+ QGroupBox *groupBox;
+ QDialogButtonBox *buttonBox;
+ QAbstractButton *showAllButton;
+ QAbstractButton *hideAllButton;
+ QHash<QCheckBox *, QString> qmFileForCheckBoxMap;
+ QHash<QCheckBox *, MainWindow *> mainWindowForCheckBoxMap;
+};
+
+#endif // LANGUAGECHOOSER_H
diff --git a/examples/linguist/i18n/main.cpp b/examples/linguist/i18n/main.cpp
new file mode 100644
index 000000000..f93166102
--- /dev/null
+++ b/examples/linguist/i18n/main.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "languagechooser.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ LanguageChooser chooser;
+ chooser.show();
+ return app.exec();
+}
diff --git a/examples/linguist/i18n/mainwindow.cpp b/examples/linguist/i18n/mainwindow.cpp
new file mode 100644
index 000000000..6b8f5b52b
--- /dev/null
+++ b/examples/linguist/i18n/mainwindow.cpp
@@ -0,0 +1,62 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "mainwindow.h"
+
+#include <QAction>
+#include <QCoreApplication>
+#include <QGroupBox>
+#include <QListWidget>
+#include <QMenuBar>
+#include <QRadioButton>
+#include <QStatusBar>
+#include <QVBoxLayout>
+
+static const char *const listEntries[] = { QT_TRANSLATE_NOOP("MainWindow", "First"),
+ QT_TRANSLATE_NOOP("MainWindow", "Second"),
+ QT_TRANSLATE_NOOP("MainWindow", "Third"), nullptr };
+
+MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
+{
+ centralWidget = new QWidget;
+ setCentralWidget(centralWidget);
+
+ createGroupBox();
+
+ listWidget = new QListWidget;
+ for (const char *entry : listEntries)
+ listWidget->addItem(tr(entry));
+
+ QVBoxLayout *mainLayout = new QVBoxLayout;
+ mainLayout->addWidget(groupBox);
+ mainLayout->addWidget(listWidget);
+ centralWidget->setLayout(mainLayout);
+
+ exitAction = new QAction(tr("E&xit"), this);
+ connect(exitAction, &QAction::triggered, qApp, QCoreApplication::quit);
+
+ fileMenu = menuBar()->addMenu(tr("&File"));
+ fileMenu->setPalette(QPalette(Qt::red));
+ fileMenu->addAction(exitAction);
+
+ setWindowTitle(tr("Language: %1").arg(tr("English")));
+ statusBar()->showMessage(tr("Internationalization Example"));
+
+ if (tr("LTR") == "RTL")
+ setLayoutDirection(Qt::RightToLeft);
+}
+
+void MainWindow::createGroupBox()
+{
+ groupBox = new QGroupBox(tr("View"));
+ perspectiveRadioButton = new QRadioButton(tr("Perspective"));
+ isometricRadioButton = new QRadioButton(tr("Isometric"));
+ obliqueRadioButton = new QRadioButton(tr("Oblique"));
+ perspectiveRadioButton->setChecked(true);
+
+ QVBoxLayout *groupBoxLayout = new QVBoxLayout;
+ groupBoxLayout->addWidget(perspectiveRadioButton);
+ groupBoxLayout->addWidget(isometricRadioButton);
+ groupBoxLayout->addWidget(obliqueRadioButton);
+ groupBox->setLayout(groupBoxLayout);
+}
diff --git a/examples/linguist/i18n/mainwindow.h b/examples/linguist/i18n/mainwindow.h
new file mode 100644
index 000000000..93b75fd27
--- /dev/null
+++ b/examples/linguist/i18n/mainwindow.h
@@ -0,0 +1,39 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QMainWindow>
+
+QT_BEGIN_NAMESPACE
+class QAction;
+class QGroupBox;
+class QLabel;
+class QListWidget;
+class QMenu;
+class QRadioButton;
+QT_END_NAMESPACE
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow(QWidget *parent = nullptr);
+
+private:
+ void createGroupBox();
+
+ QWidget *centralWidget;
+ QLabel *label;
+ QGroupBox *groupBox;
+ QListWidget *listWidget;
+ QRadioButton *perspectiveRadioButton;
+ QRadioButton *isometricRadioButton;
+ QRadioButton *obliqueRadioButton;
+ QMenu *fileMenu;
+ QAction *exitAction;
+};
+
+#endif // MAINWINDOW_H
diff --git a/examples/linguist/i18n/translations/i18n_ar.ts b/examples/linguist/i18n/translations/i18n_ar.ts
new file mode 100644
index 000000000..f575f2b2a
--- /dev/null
+++ b/examples/linguist/i18n/translations/i18n_ar.ts
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ar_EG">
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>First</source>
+ <translation>أول</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>مثال التدويل</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>متماثل</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>اللغة: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>العربية</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>مصمت</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>منظور</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>ثانى</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>ثالث</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>مرئى</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>أخرج</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>الملف</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>RTL</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/linguist/i18n/translations/i18n_cs.ts b/examples/linguist/i18n/translations/i18n_cs.ts
new file mode 100644
index 000000000..d05d5c875
--- /dev/null
+++ b/examples/linguist/i18n/translations/i18n_cs.ts
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="cs_CZ">
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>View</source>
+ <translation>Pohled</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>&amp;Soubor</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>&amp;Konec</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>První</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>Třetí</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Jayzk: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Český</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Nakloněný</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>Druhý</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>Isometrický</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>Perspektivní</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>Ukázka lokalizace</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/linguist/i18n/translations/i18n_de.ts b/examples/linguist/i18n/translations/i18n_de.ts
new file mode 100644
index 000000000..155b6b54d
--- /dev/null
+++ b/examples/linguist/i18n/translations/i18n_de.ts
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="de_DE">
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>View</source>
+ <translation>Ansicht</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>&amp;Datei</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>Be&amp;enden</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>Erstens</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>Drittens</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Deutsch</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Sprache: %1</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Schief</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>Zweitens</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>Isometrisch</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>Perspektivisch</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>Internationalisierungsbeispiel</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/linguist/i18n/translations/i18n_el.ts b/examples/linguist/i18n/translations/i18n_el.ts
new file mode 100644
index 000000000..e87ef2431
--- /dev/null
+++ b/examples/linguist/i18n/translations/i18n_el.ts
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="el_GR">
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>&amp;File</source>
+ <translation>&amp;Αρχείο</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>Έ&amp;ξοδος</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>Πρώτο</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>Παράδειγμα διεθνοποίησης</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>Ισομετρική</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Γλώσσα: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Ελληνικά</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Πλάγια</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>Προοπτική</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>Δεύτερο</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>Τρίτο</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Όψη</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/linguist/i18n/translations/i18n_en.ts b/examples/linguist/i18n/translations/i18n_en.ts
new file mode 100644
index 000000000..9c6c0bf9b
--- /dev/null
+++ b/examples/linguist/i18n/translations/i18n_en.ts
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="en_US">
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>E&amp;xit</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>&amp;File</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>Internationalization Example</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Language: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>English</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>View</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>Perspective</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>Isometric</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Oblique</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>First</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>Second</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>Third</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/linguist/i18n/translations/i18n_eo.ts b/examples/linguist/i18n/translations/i18n_eo.ts
new file mode 100644
index 000000000..0e95f9df3
--- /dev/null
+++ b/examples/linguist/i18n/translations/i18n_eo.ts
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="eo_001">
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>&amp;File</source>
+ <translation>&amp;Dosiero</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>Unue</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>Ekzemplo pri internaciigo</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>Isometria</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Lingvo: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Esperanto</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Oblikva</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>Perspektiva</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>Due</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>Trie</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Aspekto</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>&amp;Fini</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/linguist/i18n/translations/i18n_fr.ts b/examples/linguist/i18n/translations/i18n_fr.ts
new file mode 100644
index 000000000..58cdd7a58
--- /dev/null
+++ b/examples/linguist/i18n/translations/i18n_fr.ts
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="fr_FR">
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>View</source>
+ <translation>Vue</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>&amp;Fichier</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>&amp;Quitter</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>Premier</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>Troisième</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Langue : %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Français</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Oblique</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>Deuxième</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>Isométrique</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>Perspective</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>Exemple d&apos;internationalisation</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/linguist/i18n/translations/i18n_it.ts b/examples/linguist/i18n/translations/i18n_it.ts
new file mode 100644
index 000000000..62facf0dc
--- /dev/null
+++ b/examples/linguist/i18n/translations/i18n_it.ts
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="it_IT">
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>First</source>
+ <translation>Primo</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>Esempio di localizzazione</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>Isometrica</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Lingua: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Italiano</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Obliqua</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>Prospettica</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>Secondo</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>Terzo</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Vista</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>&amp;Esci</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>&amp;File</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/linguist/i18n/translations/i18n_ja.ts b/examples/linguist/i18n/translations/i18n_ja.ts
new file mode 100644
index 000000000..e7fe10a38
--- /dev/null
+++ b/examples/linguist/i18n/translations/i18n_ja.ts
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ja_JP">
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>&amp;File</source>
+ <translation>ファイル(&amp;F)</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>終了(&amp;X)</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>第一行</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>国際化(i18n)の例</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>等角投影法</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>言語: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>日本語</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>斜め投影法</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>遠近法</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>第二行</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>第三行</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>表示方式</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/linguist/i18n/translations/i18n_ko.ts b/examples/linguist/i18n/translations/i18n_ko.ts
new file mode 100644
index 000000000..ab921c8df
--- /dev/null
+++ b/examples/linguist/i18n/translations/i18n_ko.ts
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ko_KR">
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>&amp;File</source>
+ <translation>파일&amp;F</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>종료&amp;X</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>첫번째</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>국제화 예제</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>등측도</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>언어 : %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>한국어</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>빗각</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>원근화법</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>두번째</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>세번째</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>보기</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/linguist/i18n/translations/i18n_nb.ts b/examples/linguist/i18n/translations/i18n_nb.ts
new file mode 100644
index 000000000..076ed3a05
--- /dev/null
+++ b/examples/linguist/i18n/translations/i18n_nb.ts
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="nb_NO">
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>View</source>
+ <translation>Vis</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>&amp;Fil</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>&amp;Avslutt</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>Første</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>Tredje</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Språk: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Norsk</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Skjevt</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>Andre</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>Isometrisk</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>Perspektiv</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>Internasjonaliseringseksempel</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/linguist/i18n/translations/i18n_ru.ts b/examples/linguist/i18n/translations/i18n_ru.ts
new file mode 100644
index 000000000..7c7645d44
--- /dev/null
+++ b/examples/linguist/i18n/translations/i18n_ru.ts
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ru_RU">
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>View</source>
+ <translation>Вид</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>Файл</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>Выход</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>Первый</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>Третий</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Язык: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Русский</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Курсив</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>Второй</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>Изометрический</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>Перспектива</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>Пример интернационализации</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/linguist/i18n/translations/i18n_sv.ts b/examples/linguist/i18n/translations/i18n_sv.ts
new file mode 100644
index 000000000..b7b3a45fa
--- /dev/null
+++ b/examples/linguist/i18n/translations/i18n_sv.ts
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="sv_SE">
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>View</source>
+ <translation>Visa</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>&amp;Arkiv</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>&amp;Avsluta</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>Första</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>Tredje</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Språk: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Svenska</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Skevt</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>Andra</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>Isometriskt</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>Perspektivt</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>Internationaliseringsexempel</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/linguist/i18n/translations/i18n_zh.ts b/examples/linguist/i18n/translations/i18n_zh.ts
new file mode 100644
index 000000000..8701d76af
--- /dev/null
+++ b/examples/linguist/i18n/translations/i18n_zh.ts
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="zh_CN">
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>View</source>
+ <translation>视图</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>文件[&amp;F]</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>退出[&amp;x]</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>第一个</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>第三个</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>语言: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>简体中文</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>斜投影</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>第二个</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>等角投影</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>透视投影</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>国际化范例</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/linguist/linguist.pro b/examples/linguist/linguist.pro
index 79e96820c..2d30450de 100644
--- a/examples/linguist/linguist.pro
+++ b/examples/linguist/linguist.pro
@@ -1,4 +1,5 @@
TEMPLATE = subdirs
SUBDIRS = arrowpad \
hellotr \
+ i18n \
trollprint
diff --git a/examples/linguist/trollprint/CMakeLists.txt b/examples/linguist/trollprint/CMakeLists.txt
index 6ad0d6837..8ced26c90 100644
--- a/examples/linguist/trollprint/CMakeLists.txt
+++ b/examples/linguist/trollprint/CMakeLists.txt
@@ -1,29 +1,36 @@
-# Generated from trollprint.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(trollprint LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
+ set(INSTALL_EXAMPLESDIR "examples")
endif()
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/linguist/trollprint")
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+find_package(Qt6 REQUIRED COMPONENTS LinguistTools)
+
+qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES pt)
-add_qt_gui_executable(trollprint
+qt_add_executable(trollprint
main.cpp
mainwindow.cpp mainwindow.h
printpanel.cpp printpanel.h
)
+
+qt6_add_translations(trollprint
+ QM_FILES_OUTPUT_VARIABLE qm_files)
+install(FILES ${qm_files} DESTINATION ${INSTALL_EXAMPLEDIR})
+
+set_target_properties(trollprint PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
target_link_libraries(trollprint PUBLIC
Qt::Core
Qt::Gui
diff --git a/examples/linguist/trollprint/main.cpp b/examples/linguist/trollprint/main.cpp
index dea3748f5..6d7b35ba5 100644
--- a/examples/linguist/trollprint/main.cpp
+++ b/examples/linguist/trollprint/main.cpp
@@ -1,67 +1,22 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtWidgets>
#include "mainwindow.h"
+using namespace Qt::StringLiterals;
+
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
- QString locale = QLocale::system().name();
+ auto locale = QLocale::system();
//! [0]
QTranslator translator;
- translator.load(QString("trollprint_") + locale);
- app.installTranslator(&translator);
+ if (translator.load(locale, u"trollprint"_s, u"_"_s))
+ app.installTranslator(&translator);
//! [0]
MainWindow mainWindow;
diff --git a/examples/linguist/trollprint/mainwindow.cpp b/examples/linguist/trollprint/mainwindow.cpp
index 64461acec..b0a411dc5 100644
--- a/examples/linguist/trollprint/mainwindow.cpp
+++ b/examples/linguist/trollprint/mainwindow.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtWidgets>
@@ -62,15 +15,15 @@ MainWindow::MainWindow()
createMenus();
//! [0]
- setWindowTitle(tr("Troll Print 1.0"));
+ setWindowTitle(tr("Troll Print %1").arg("1.0"));
//! [0]
}
void MainWindow::about()
{
- QMessageBox::information(this, tr("About Troll Print 1.0"),
- tr("Troll Print 1.0.\n\n"
- "Copyright 1999 Software, Inc."));
+ QMessageBox::information(this, tr("About Troll Print %1").arg("1.0"),
+ tr("Troll Print %1.\n\n"
+ "Copyright 1999 Software, Inc.").arg("1.0"));
}
//! [1]
@@ -80,14 +33,14 @@ void MainWindow::createActions()
exitAct = new QAction(tr("E&xit"), this);
exitAct->setShortcut(tr("Ctrl+Q", "Quit"));
//! [2]
- connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));
+ connect(exitAct, &QAction::triggered, this, &MainWindow::close);
aboutAct = new QAction(tr("&About"), this);
aboutAct->setShortcut(Qt::Key_F1);
- connect(aboutAct, SIGNAL(triggered()), this, SLOT(about()));
+ connect(aboutAct, &QAction::triggered, this, &MainWindow::about);
aboutQtAct = new QAction(tr("About &Qt"), this);
- connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
+ connect(aboutQtAct, &QAction::triggered, qApp, &QApplication::aboutQt);
}
void MainWindow::createMenus()
diff --git a/examples/linguist/trollprint/mainwindow.h b/examples/linguist/trollprint/mainwindow.h
index 178113179..ed2d7b69e 100644
--- a/examples/linguist/trollprint/mainwindow.h
+++ b/examples/linguist/trollprint/mainwindow.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
diff --git a/examples/linguist/trollprint/printpanel.cpp b/examples/linguist/trollprint/printpanel.cpp
index adfd683be..1d0c30c4c 100644
--- a/examples/linguist/trollprint/printpanel.cpp
+++ b/examples/linguist/trollprint/printpanel.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtWidgets>
diff --git a/examples/linguist/trollprint/printpanel.h b/examples/linguist/trollprint/printpanel.h
index 97edcafb4..9a075dca6 100644
--- a/examples/linguist/trollprint/printpanel.h
+++ b/examples/linguist/trollprint/printpanel.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef PRINTPANEL_H
#define PRINTPANEL_H
diff --git a/examples/linguist/trollprint/trollprint_pt.ts b/examples/linguist/trollprint/trollprint_pt.ts
index e5871bd08..b8e215c51 100644
--- a/examples/linguist/trollprint/trollprint_pt.ts
+++ b/examples/linguist/trollprint/trollprint_pt.ts
@@ -1,9 +1,11 @@
-<!DOCTYPE TS><TS>
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="pt">
<context>
<name>MainWindow</name>
<message>
- <source>Troll Print 1.0</source>
- <translation>Troll Imprimir 1.0</translation>
+ <source>Troll Print %1</source>
+ <translation>Troll Imprimir %1</translation>
</message>
<message>
<source>E&amp;xit</source>
@@ -26,14 +28,14 @@
<translation>A&amp;juda</translation>
</message>
<message>
- <source>About Troll Print 1.0</source>
- <translation>Sobre Troll Imprimir 1.0</translation>
+ <source>About Troll Print %1</source>
+ <translation>Sobre Troll Imprimir %1</translation>
</message>
<message>
- <source>Troll Print 1.0.
+ <source>Troll Print %1.
Copyright 1999 Software, Inc.</source>
- <translation>Troll Imprimir 1.0
+ <translation>Troll Imprimir %1
Copyright 1999 Software, Inc.</translation>
</message>
diff --git a/examples/uitools/CMakeLists.txt b/examples/uitools/CMakeLists.txt
index a31646da0..16d288cbc 100644
--- a/examples/uitools/CMakeLists.txt
+++ b/examples/uitools/CMakeLists.txt
@@ -1,4 +1 @@
-# Generated from uitools.pro.
-
-add_subdirectory(multipleinheritance)
-add_subdirectory(textfinder)
+qt_internal_add_example(textfinder)
diff --git a/examples/uitools/doc/images/multipleinheritance-example.png b/examples/uitools/doc/images/multipleinheritance-example.png
deleted file mode 100644
index 9e8929297..000000000
--- a/examples/uitools/doc/images/multipleinheritance-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/uitools/doc/images/textfinder-example-userinterface.png b/examples/uitools/doc/images/textfinder-example-userinterface.png
deleted file mode 100644
index 2bebe2e9d..000000000
--- a/examples/uitools/doc/images/textfinder-example-userinterface.png
+++ /dev/null
Binary files differ
diff --git a/examples/uitools/doc/images/textfinder-example-userinterface.webp b/examples/uitools/doc/images/textfinder-example-userinterface.webp
new file mode 100644
index 000000000..e746c7304
--- /dev/null
+++ b/examples/uitools/doc/images/textfinder-example-userinterface.webp
Binary files differ
diff --git a/examples/uitools/doc/src/multipleinheritance.qdoc b/examples/uitools/doc/src/multipleinheritance.qdoc
deleted file mode 100644
index da39d4b90..000000000
--- a/examples/uitools/doc/src/multipleinheritance.qdoc
+++ /dev/null
@@ -1,96 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example multipleinheritance
- \ingroup examples-qtuitools
- \title Multiple Inheritance Example
-
- \brief Using a form created with Qt Designer in an application.
-
- The Multiple Inheritance Example shows how to use a form created with
- \l{Qt Designer} in an application by subclassing both QWidget and the user
- interface class, which is \c{Ui::CalculatorForm}.
-
- \image multipleinheritance-example.png
-
- To subclass the \c calculatorform.ui file and ensure that \c qmake
- processes it with the \c uic, we have to include \c calculatorform.ui
- in the \c .pro file, as shown below:
-
- \snippet multipleinheritance/multipleinheritance.pro 0
-
- When the project is compiled, the \c uic will generate a corresponding
- \c ui_calculatorform.h.
-
- \section1 CalculatorForm Definition
-
- In the \c CalculatorForm definition, we include the \c ui_calculatorform.h
- that was generated earlier.
-
- \snippet multipleinheritance/calculatorform.h 0
-
- As mentioned earlier, the class is a subclass of both QWidget and
- \c{Ui::CalculatorForm}.
-
- \snippet multipleinheritance/calculatorform.h 1
-
- Two slots are defined according to the \l{Automatic Connections}
- {automatic connection} naming convention required by \c uic. This is
- to ensure that \l{QMetaObject}'s auto-connection facilities connect
- all the signals and slots involved automatically.
-
- \section1 CalculatorForm Implementation
-
- In the constructor, we call \c setupUi() to load the user interface file.
- Note that setupUi is a method of \c Ui::CalculatorForm.
-
- \snippet multipleinheritance/calculatorform.cpp 0
-
- We include two slots, \c{on_inputSpinBox1_valueChanged()} and
- \c{on_inputSpinBox2_valueChanged()}. These slots respond to the
- \l{QSpinBox::valueChanged()}{valueChanged()} signal that both spin boxes
- emit. Whenever there is a change in one spin box's value, we take that
- value and add it to whatever value the other spin box has.
-
- \snippet multipleinheritance/calculatorform.cpp 1
- \codeline
- \snippet multipleinheritance/calculatorform.cpp 2
-
- \section1 \c main() Function
-
- The \c main() function instantiates QApplication and \c CalculatorForm.
- The \c calculator object is displayed by invoking the \l{QWidget::show()}
- {show()} function.
-
- \snippet multipleinheritance/main.cpp 0
-
- There are various approaches to include forms into applications. The
- Multiple Inheritance approach is just one of them. See
- \l{Using a Designer UI File in Your Application} for more information on
- the other approaches available.
-*/
diff --git a/examples/uitools/doc/src/textfinder.qdoc b/examples/uitools/doc/src/textfinder.qdoc
index b6d1936ee..91cfac5db 100644
--- a/examples/uitools/doc/src/textfinder.qdoc
+++ b/examples/uitools/doc/src/textfinder.qdoc
@@ -1,34 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example textfinder
+ \examplecategory {Desktop}
+ \meta tags {widgets,designer}
\ingroup examples-qtuitools
- \title Text Finder Example
+ \title Text Finder
\brief Dynamically loading .ui files using QUiLoader.
@@ -41,8 +19,8 @@
loaded at runtime, from a the program resources.
\table
- \row \li \inlineimage textfinder-example-find.png
- \li \inlineimage textfinder-example-find2.png
+ \row \li \inlineimage textfinder-example-find.webp
+ \li \inlineimage textfinder-example-find2.webp
\endtable
\section1 Setting Up The Resource File
@@ -50,7 +28,7 @@
The resources required for the example are:
\list
\li \c{textfinder.ui} - the user interface file created in
- \l{Qt Designer}
+ \l{Qt Widgets Designer}
\li \c{input.txt} - a text file containing some text to be displayed in
a QTextEdit
\endlist
@@ -62,9 +40,9 @@
that all the widgets have sensible \c{objectName}'s assigned. These are
used in code to identify them.
- The screenshot below shows the preview obtained in \l{Qt Designer}.
+ The screenshot below shows the preview obtained in \l{Qt Widgets Designer}.
- \image textfinder-example-userinterface.png
+ \image doc/images/textfinder-example-userinterface.webp
In this example, we store both resources in the applicaton's executable by
including the \c{textfinder.qrc} file. Alternatively, the files could also
@@ -103,7 +81,7 @@
\c{loadUiFile} and \c{loadTextFile}.
The \c{loadUiFile} function loads the user interface file previously
- created in \l{Qt Designer}. First, the content of the \c{textfinder.ui}
+ created in \l{Qt Widgets Designer}. First, the content of the \c{textfinder.ui}
file is loaded from the resource system. Then a QUiLoader instance is
created, and the QUiLoader::load() function is called, with the first
argument being the open file, and the second argument being the pointer of
@@ -174,5 +152,5 @@
QUILoader is just one of them. See \l{Using a Designer UI File in Your
Application} for more information on the other approaches available.
- \sa {Calculator Builder Example}, {World Time Clock Builder Example}
+ \sa {Calculator Builder}
*/
diff --git a/examples/uitools/multipleinheritance/CMakeLists.txt b/examples/uitools/multipleinheritance/CMakeLists.txt
deleted file mode 100644
index 45e807daa..000000000
--- a/examples/uitools/multipleinheritance/CMakeLists.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-# Generated from multipleinheritance.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(multipleinheritance LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/uitools/multipleinheritance")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
-
-add_qt_gui_executable(multipleinheritance
- calculatorform.cpp calculatorform.h calculatorform.ui
- main.cpp
-)
-target_link_libraries(multipleinheritance PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Widgets
-)
-
-install(TARGETS multipleinheritance
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/uitools/multipleinheritance/calculatorform.cpp b/examples/uitools/multipleinheritance/calculatorform.cpp
deleted file mode 100644
index 73bbd4fe5..000000000
--- a/examples/uitools/multipleinheritance/calculatorform.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "calculatorform.h"
-#include <QWidget>
-
-
-//! [0]
-CalculatorForm::CalculatorForm(QWidget *parent)
- : QWidget(parent)
-{
- setupUi(this);
-}
-//! [0]
-
-//! [1]
-void CalculatorForm::on_inputSpinBox1_valueChanged(int value)
-{
- outputWidget->setText(QString::number(value + inputSpinBox2->value()));
-}
-//! [1]
-
-//! [2]
-void CalculatorForm::on_inputSpinBox2_valueChanged(int value)
-{
- outputWidget->setText(QString::number(value + inputSpinBox1->value()));
-}
-//! [2]
diff --git a/examples/uitools/multipleinheritance/calculatorform.h b/examples/uitools/multipleinheritance/calculatorform.h
deleted file mode 100644
index 28a885c82..000000000
--- a/examples/uitools/multipleinheritance/calculatorform.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef CALCULATORFORM_H
-#define CALCULATORFORM_H
-
-//! [0]
-#include "ui_calculatorform.h"
-//! [0]
-
-//! [1]
-class CalculatorForm : public QWidget, private Ui::CalculatorForm
-{
- Q_OBJECT
-
-public:
- explicit CalculatorForm(QWidget *parent = nullptr);
-
-private slots:
- void on_inputSpinBox1_valueChanged(int value);
- void on_inputSpinBox2_valueChanged(int value);
-};
-//! [1]
-
-#endif
diff --git a/examples/uitools/multipleinheritance/calculatorform.ui b/examples/uitools/multipleinheritance/calculatorform.ui
deleted file mode 100644
index dda0e62dd..000000000
--- a/examples/uitools/multipleinheritance/calculatorform.ui
+++ /dev/null
@@ -1,303 +0,0 @@
-<ui version="4.0" >
- <author></author>
- <comment></comment>
- <exportmacro></exportmacro>
- <class>CalculatorForm</class>
- <widget class="QWidget" name="CalculatorForm" >
- <property name="objectName" >
- <string notr="true" >CalculatorForm</string>
- </property>
- <property name="geometry" >
- <rect>
- <x>0</x>
- <y>0</y>
- <width>276</width>
- <height>98</height>
- </rect>
- </property>
- <property name="sizePolicy" >
- <sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>5</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="windowTitle" >
- <string>Calculator Builder</string>
- </property>
- <layout class="QGridLayout" >
- <property name="objectName" >
- <string notr="true" />
- </property>
- <property name="margin" >
- <number>9</number>
- </property>
- <property name="spacing" >
- <number>6</number>
- </property>
- <item row="0" column="0" >
- <layout class="QHBoxLayout" >
- <property name="objectName" >
- <string notr="true" />
- </property>
- <property name="margin" >
- <number>1</number>
- </property>
- <property name="spacing" >
- <number>6</number>
- </property>
- <item>
- <layout class="QVBoxLayout" >
- <property name="objectName" >
- <string notr="true" />
- </property>
- <property name="margin" >
- <number>1</number>
- </property>
- <property name="spacing" >
- <number>6</number>
- </property>
- <item>
- <widget class="QLabel" name="label" >
- <property name="objectName" >
- <string notr="true" >label</string>
- </property>
- <property name="geometry" >
- <rect>
- <x>1</x>
- <y>1</y>
- <width>45</width>
- <height>19</height>
- </rect>
- </property>
- <property name="text" >
- <string>Input 1</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="inputSpinBox1" >
- <property name="objectName" >
- <string notr="true" >inputSpinBox1</string>
- </property>
- <property name="geometry" >
- <rect>
- <x>1</x>
- <y>26</y>
- <width>45</width>
- <height>25</height>
- </rect>
- </property>
- <property name="mouseTracking" >
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QLabel" name="label_3" >
- <property name="objectName" >
- <string notr="true" >label_3</string>
- </property>
- <property name="geometry" >
- <rect>
- <x>54</x>
- <y>1</y>
- <width>7</width>
- <height>52</height>
- </rect>
- </property>
- <property name="text" >
- <string>+</string>
- </property>
- <property name="alignment" >
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QVBoxLayout" >
- <property name="objectName" >
- <string notr="true" />
- </property>
- <property name="margin" >
- <number>1</number>
- </property>
- <property name="spacing" >
- <number>6</number>
- </property>
- <item>
- <widget class="QLabel" name="label_2" >
- <property name="objectName" >
- <string notr="true" >label_2</string>
- </property>
- <property name="geometry" >
- <rect>
- <x>1</x>
- <y>1</y>
- <width>45</width>
- <height>19</height>
- </rect>
- </property>
- <property name="text" >
- <string>Input 2</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="inputSpinBox2" >
- <property name="objectName" >
- <string notr="true" >inputSpinBox2</string>
- </property>
- <property name="geometry" >
- <rect>
- <x>1</x>
- <y>26</y>
- <width>45</width>
- <height>25</height>
- </rect>
- </property>
- <property name="mouseTracking" >
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QLabel" name="label_3_2" >
- <property name="objectName" >
- <string notr="true" >label_3_2</string>
- </property>
- <property name="geometry" >
- <rect>
- <x>120</x>
- <y>1</y>
- <width>7</width>
- <height>52</height>
- </rect>
- </property>
- <property name="text" >
- <string>=</string>
- </property>
- <property name="alignment" >
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QVBoxLayout" >
- <property name="objectName" >
- <string notr="true" />
- </property>
- <property name="margin" >
- <number>1</number>
- </property>
- <property name="spacing" >
- <number>6</number>
- </property>
- <item>
- <widget class="QLabel" name="label_2_2_2" >
- <property name="objectName" >
- <string notr="true" >label_2_2_2</string>
- </property>
- <property name="geometry" >
- <rect>
- <x>1</x>
- <y>1</y>
- <width>37</width>
- <height>17</height>
- </rect>
- </property>
- <property name="text" >
- <string>Output</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="outputWidget" >
- <property name="objectName" >
- <string notr="true" >outputWidget</string>
- </property>
- <property name="geometry" >
- <rect>
- <x>1</x>
- <y>24</y>
- <width>37</width>
- <height>27</height>
- </rect>
- </property>
- <property name="frameShape" >
- <enum>QFrame::Box</enum>
- </property>
- <property name="frameShadow" >
- <enum>QFrame::Sunken</enum>
- </property>
- <property name="text" >
- <string>0</string>
- </property>
- <property name="alignment" >
- <set>Qt::AlignAbsolute|Qt::AlignBottom|Qt::AlignCenter|Qt::AlignHCenter|Qt::AlignHorizontal_Mask|Qt::AlignJustify|Qt::AlignLeading|Qt::AlignLeft|Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing|Qt::AlignVCenter|Qt::AlignVertical_Mask</set>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </item>
- <item row="1" column="0" >
- <spacer>
- <property name="objectName" >
- <string notr="true" >verticalSpacer</string>
- </property>
- <property name="geometry" >
- <rect>
- <x>85</x>
- <y>69</y>
- <width>20</width>
- <height>20</height>
- </rect>
- </property>
- <property name="orientation" >
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" >
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="0" column="1" >
- <spacer>
- <property name="objectName" >
- <string notr="true" >horizontalSpacer</string>
- </property>
- <property name="geometry" >
- <rect>
- <x>188</x>
- <y>26</y>
- <width>79</width>
- <height>20</height>
- </rect>
- </property>
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" >
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- <pixmapfunction></pixmapfunction>
- <resources/>
- <connections/>
-</ui>
diff --git a/examples/uitools/multipleinheritance/main.cpp b/examples/uitools/multipleinheritance/main.cpp
deleted file mode 100644
index 4a6c600c8..000000000
--- a/examples/uitools/multipleinheritance/main.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "calculatorform.h"
-#include <QApplication>
-
-//! [0]
-int main(int argc, char *argv[])
-{
- QApplication app(argc, argv);
- CalculatorForm calculator;
- calculator.show();
- return app.exec();
-}
-//! [0]
diff --git a/examples/uitools/multipleinheritance/multipleinheritance.pro b/examples/uitools/multipleinheritance/multipleinheritance.pro
deleted file mode 100644
index fd40982ed..000000000
--- a/examples/uitools/multipleinheritance/multipleinheritance.pro
+++ /dev/null
@@ -1,11 +0,0 @@
-#! [0]
-QT += widgets
-
-HEADERS = calculatorform.h
-SOURCES = calculatorform.cpp main.cpp
-FORMS = calculatorform.ui
-#! [0]
-
-target.path = $$[QT_INSTALL_EXAMPLES]/uitools/multipleinheritance
-INSTALLS += target
-
diff --git a/examples/uitools/textfinder/CMakeLists.txt b/examples/uitools/textfinder/CMakeLists.txt
index 67eb28eae..21e4f08d5 100644
--- a/examples/uitools/textfinder/CMakeLists.txt
+++ b/examples/uitools/textfinder/CMakeLists.txt
@@ -1,36 +1,40 @@
-# Generated from textfinder.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(textfinder LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
+ set(INSTALL_EXAMPLESDIR "examples")
endif()
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/uitools/textfinder")
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
-find_package(Qt6 COMPONENTS UiTools)
+#! [0]
+find_package(Qt6 REQUIRED COMPONENTS Core Gui UiTools Widgets)
+#! [0]
-add_qt_gui_executable(textfinder
+qt_add_executable(textfinder
main.cpp
textfinder.cpp textfinder.h
)
+
+set_target_properties(textfinder PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+#! [1]
target_link_libraries(textfinder PUBLIC
Qt::Core
Qt::Gui
Qt::UiTools
Qt::Widgets
)
-
+#! [1]
# Resources:
set(textfinder_resource_files
diff --git a/examples/uitools/textfinder/forms/textfinder.ui b/examples/uitools/textfinder/forms/textfinder.ui
index 9ea3011e8..f8cec91d1 100644
--- a/examples/uitools/textfinder/forms/textfinder.ui
+++ b/examples/uitools/textfinder/forms/textfinder.ui
@@ -47,7 +47,11 @@
<number>6</number>
</property>
<item row="0" column="1">
- <widget class="QLineEdit" name="lineEdit"/>
+ <widget class="QLineEdit" name="lineEdit">
+ <property name="clearButtonEnabled">
+ <bool>true</bool>
+ </property>
+ </widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="searchLabel">
diff --git a/examples/uitools/textfinder/main.cpp b/examples/uitools/textfinder/main.cpp
index 3db26ebe7..c1e2e690c 100644
--- a/examples/uitools/textfinder/main.cpp
+++ b/examples/uitools/textfinder/main.cpp
@@ -1,54 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "textfinder.h"
+
#include <QApplication>
//! [0]
diff --git a/examples/uitools/textfinder/textfinder.cpp b/examples/uitools/textfinder/textfinder.cpp
index d6c11906b..b8a59f7dc 100644
--- a/examples/uitools/textfinder/textfinder.cpp
+++ b/examples/uitools/textfinder/textfinder.cpp
@@ -1,67 +1,25 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "textfinder.h"
-#include <QFile>
+
+#include <QUiLoader>
+
#include <QLineEdit>
#include <QMessageBox>
#include <QPushButton>
#include <QTextEdit>
-#include <QTextStream>
-#include <QUiLoader>
#include <QVBoxLayout>
+#include <QFile>
+#include <QTextStream>
+
+using namespace Qt::StringLiterals;
+
//! [4]
static QWidget *loadUiFile(QWidget *parent)
{
- QFile file(":/forms/textfinder.ui");
+ QFile file(u":/forms/textfinder.ui"_s);
file.open(QIODevice::ReadOnly);
QUiLoader loader;
@@ -72,7 +30,7 @@ static QWidget *loadUiFile(QWidget *parent)
//! [5]
static QString loadTextFile()
{
- QFile inputFile(":/forms/input.txt");
+ QFile inputFile(u":/forms/input.txt"_s);
inputFile.open(QIODevice::ReadOnly);
QTextStream in(&inputFile);
return in.readAll();
@@ -100,9 +58,8 @@ TextFinder::TextFinder(QWidget *parent)
//! [3a]
//! [3b]
- QVBoxLayout *layout = new QVBoxLayout;
+ auto *layout = new QVBoxLayout(this);
layout->addWidget(formWidget);
- setLayout(layout);
//! [3b]
//! [3c]
diff --git a/examples/uitools/textfinder/textfinder.h b/examples/uitools/textfinder/textfinder.h
index 17336d260..a9204c166 100644
--- a/examples/uitools/textfinder/textfinder.h
+++ b/examples/uitools/textfinder/textfinder.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef TEXTFINDER_H
#define TEXTFINDER_H
diff --git a/examples/uitools/uitools.pro b/examples/uitools/uitools.pro
index bc2285d80..e0d22065e 100644
--- a/examples/uitools/uitools.pro
+++ b/examples/uitools/uitools.pro
@@ -1,4 +1,2 @@
TEMPLATE = subdirs
-SUBDIRS = multipleinheritance
-
-SUBDIRS += textfinder
+SUBDIRS = textfinder
diff --git a/qttools.pro b/qttools.pro
deleted file mode 100644
index 58c33f27c..000000000
--- a/qttools.pro
+++ /dev/null
@@ -1 +0,0 @@
-load(qt_parts)
diff --git a/src/.prev_CMakeLists.txt b/src/.prev_CMakeLists.txt
deleted file mode 100644
index ef189b947..000000000
--- a/src/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-# Generated from src.pro.
-
-
-qt_exclude_tool_directories_from_default_target(
- distancefieldgenerator
- pixeltool
-)
-
-add_subdirectory(linguist)
-add_subdirectory(global)
-if(QT_FEATURE_png AND QT_FEATURE_pushbutton AND QT_FEATURE_toolbutton AND TARGET Qt::Widgets)
- add_subdirectory(designer)
- add_subdirectory(pixeltool)
-endif()
-if(QT_FEATURE_png AND QT_FEATURE_pushbutton AND QT_FEATURE_toolbutton AND TARGET Qt::Widgets AND (QT_PLUGINS___contains___qsqlite OR NOT static))
- add_subdirectory(assistant)
-endif()
-if(QT_FEATURE_png AND QT_FEATURE_thread AND QT_FEATURE_toolbutton AND TARGET Qt::Quick AND TARGET Qt::Widgets)
- add_subdirectory(distancefieldgenerator)
-endif()
-if(QT_FEATURE_commandlineparser)
- add_subdirectory(qtattributionsscanner)
-endif()
-if(QT_FEATURE_commandlineparser AND QT_FEATURE_library AND (android_app OR NOT ANDROID))
- add_subdirectory(qtplugininfo)
-endif()
-if(QT_FEATURE_clang AND QT_FEATURE_commandlineparser AND QT_FEATURE_thread)
- add_subdirectory(qdoc)
-endif()
-if(android_app OR (QT_FEATURE_commandlineparser AND NOT ANDROID))
- add_subdirectory(qtpaths)
-endif()
-if(MACOS)
- add_subdirectory(macdeployqt)
-endif()
-if(TARGET Qt::DBus)
- add_subdirectory(qdbus)
-endif()
-if(WIN32)
- add_subdirectory(windeployqt)
-endif()
-if(QT_FEATURE_commandlineparser AND TARGET Qt::Gui AND NOT ANDROID AND NOT QNX AND NOT UIKIT AND NOT WASM)
- add_subdirectory(qtdiag)
-endif()
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 770f1cabc..dc03e1c14 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,59 +1,56 @@
-# Generated from src.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-# special case begin
# Need to stop building these apps by default because they would fail
-# in device_and_simulator builds.
-if(IOS)
- set(_qt_additional_tools_to_exclude qtplugininfo qtpaths)
+# in device_and_simulator and webassembly builds.
+if(IOS OR WASM)
+ set(_qt_additional_tools_to_exclude qtplugininfo)
endif()
-# special case end
qt_exclude_tool_directories_from_default_target(
distancefieldgenerator
pixeltool
- ${_qt_additional_tools_to_exclude} # special case
+ ${_qt_additional_tools_to_exclude}
)
-# special case begin
# Evaluate features to decide what to build.
# The config files will be written in the src/global module.
qt_feature_evaluate_features("${CMAKE_CURRENT_SOURCE_DIR}/../configure.cmake")
-# special case end
+
+if(TARGET Qt::Widgets)
+ add_subdirectory(uiplugin)
+ add_subdirectory(uitools)
+endif()
add_subdirectory(global) # special case add as first directory
-add_subdirectory(linguist)
+if(QT_FEATURE_linguist)
+ add_subdirectory(linguist)
+endif()
# add_subdirectory(global) # special case remove
-if(QT_FEATURE_png AND QT_FEATURE_pushbutton AND QT_FEATURE_toolbutton AND TARGET Qt::Widgets)
+if(QT_FEATURE_designer)
add_subdirectory(designer)
+endif()
+if(QT_FEATURE_pixeltool)
add_subdirectory(pixeltool)
endif()
-if(QT_FEATURE_png AND QT_FEATURE_pushbutton AND QT_FEATURE_toolbutton AND TARGET Qt::Widgets AND (FEATURE_sql_sqlite OR QT_BUILD_SHARED_LIBS)) # special case
+if(QT_FEATURE_assistant)
add_subdirectory(assistant)
endif()
-if(QT_FEATURE_png AND QT_FEATURE_thread AND QT_FEATURE_toolbutton AND TARGET Qt::Quick AND TARGET Qt::Widgets)
+if(QT_FEATURE_distancefieldgenerator)
add_subdirectory(distancefieldgenerator)
endif()
-if(QT_FEATURE_commandlineparser)
+if(QT_FEATURE_qtattributionsscanner)
add_subdirectory(qtattributionsscanner)
endif()
-if(QT_FEATURE_commandlineparser AND QT_FEATURE_library AND (android_app OR NOT ANDROID))
+if(QT_FEATURE_qtplugininfo)
add_subdirectory(qtplugininfo)
endif()
-if(QT_FEATURE_clang AND QT_FEATURE_commandlineparser AND QT_FEATURE_thread)
- add_subdirectory(qdoc)
-endif()
-if(android_app OR (QT_FEATURE_commandlineparser AND NOT ANDROID))
- add_subdirectory(qtpaths)
-endif()
-if(MACOS)
- add_subdirectory(macdeployqt)
-endif()
-if(TARGET Qt::DBus)
+
+add_subdirectory(qdoc)
+
+if(QT_FEATURE_qdbus)
add_subdirectory(qdbus)
endif()
-if(WIN32)
- add_subdirectory(windeployqt)
-endif()
-if(QT_FEATURE_commandlineparser AND TARGET Qt::Gui AND NOT ANDROID AND NOT QNX AND NOT UIKIT AND NOT WASM)
+if(QT_FEATURE_qtdiag)
add_subdirectory(qtdiag)
endif()
diff --git a/src/assistant/.prev_CMakeLists.txt b/src/assistant/.prev_CMakeLists.txt
deleted file mode 100644
index ea1eafc81..000000000
--- a/src/assistant/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-# Generated from assistant.pro.
-
-
-qt_exclude_tool_directories_from_default_target(
- assistant
- qhelpgenerator
- qcollectiongenerator
-)
-
-if(NOT TARGET Qt::Sql)
- return()
-endif()
-if(NOT QT_FEATURE_assistant)
- return()
-endif()
-add_subdirectory(help)
-add_subdirectory(assistant)
-add_subdirectory(qhelpgenerator)
-add_subdirectory(qcollectiongenerator)
diff --git a/src/assistant/CMakeLists.txt b/src/assistant/CMakeLists.txt
index 2ad364db8..17d3c3c8c 100644
--- a/src/assistant/CMakeLists.txt
+++ b/src/assistant/CMakeLists.txt
@@ -1,15 +1,13 @@
-# Generated from assistant.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-# special case begin
if(NOT TARGET Qt::Sql OR NOT TARGET Qt::PrintSupport)
return()
endif()
-# special case end
qt_exclude_tool_directories_from_default_target(
assistant
qhelpgenerator
- qcollectiongenerator
)
if(NOT TARGET Qt::Sql)
@@ -21,4 +19,35 @@ endif()
add_subdirectory(help)
add_subdirectory(assistant)
add_subdirectory(qhelpgenerator)
-add_subdirectory(qcollectiongenerator)
+
+set(QLITEHTML_BIN_PATH ${INSTALL_BINDIR})
+set(QLITEHTML_LIBRARY_PATH ${INSTALL_LIBDIR})
+set(QLITEHTML_LIBRARY_TYPE STATIC)
+set(BUILD_SHARED_LIBS OFF)
+set(BUILD_TESTING OFF)
+if(QT_FEATURE_static_runtime AND MSVC)
+ set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
+endif()
+add_subdirectory(qlitehtml/src EXCLUDE_FROM_ALL)
+if(TARGET qlitehtml)
+ qt_autogen_tools_initial_setup(qlitehtml)
+ # The litehtml and gumbo targets will not be available here if they are not built by Qt
+ # but found in the system, because they are imported only to the subdirectory scope
+ # where find_package was called. But that's fine, we wouldn't be able to set compiler flags
+ # on them anyway.
+ if(TARGET litehtml)
+ qt_internal_set_exceptions_flags(litehtml OFF)
+ qt_disable_warnings(litehtml)
+ endif()
+ if(TARGET gumbo)
+ qt_disable_warnings(gumbo)
+ endif()
+ qt_disable_warnings(qlitehtml)
+ qt_handle_multi_config_output_dirs(qlitehtml)
+ set_target_properties(qlitehtml PROPERTIES
+ RUNTIME_OUTPUT_DIRECTORY "${QT_BUILD_DIR}/${INSTALL_BINDIR}"
+ LIBRARY_OUTPUT_DIRECTORY "${QT_BUILD_DIR}/${INSTALL_LIBDIR}"
+ ARCHIVE_OUTPUT_DIRECTORY "${QT_BUILD_DIR}/${INSTALL_LIBDIR}")
+else()
+ message(FATAL_ERROR "qlitehtml not found. Did you run git submodule update --init --recursive?")
+endif()
diff --git a/src/assistant/assistant.pro b/src/assistant/assistant.pro
deleted file mode 100644
index f3395abb0..000000000
--- a/src/assistant/assistant.pro
+++ /dev/null
@@ -1,22 +0,0 @@
-requires(qtHaveModule(sql))
-
-include($$OUT_PWD/../../src/global/qttools-config.pri)
-QT_FOR_CONFIG += tools-private
-requires(qtConfig(assistant))
-
-TEMPLATE = subdirs
-
-SUBDIRS += \
- help \
- assistant \
- qhelpgenerator \
- qcollectiongenerator
-
-assistant.depends = help
-qhelpgenerator.depends = help
-
-qtNomakeTools( \
- assistant \
- qhelpgenerator \
- qcollectiongenerator \
-)
diff --git a/src/assistant/assistant/.prev_CMakeLists.txt b/src/assistant/assistant/.prev_CMakeLists.txt
deleted file mode 100644
index 42241ec7f..000000000
--- a/src/assistant/assistant/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,192 +0,0 @@
-# Generated from assistant.pro.
-
-#####################################################################
-## assistant App:
-#####################################################################
-
-qt_internal_add_app(assistant
- SOURCES
- ../../shared/fontpanel/fontpanel.cpp ../../shared/fontpanel/fontpanel.h
- ../shared/collectionconfiguration.cpp ../shared/collectionconfiguration.h
- aboutdialog.cpp aboutdialog.h
- bookmarkdialog.cpp bookmarkdialog.h bookmarkdialog.ui
- bookmarkfiltermodel.cpp bookmarkfiltermodel.h
- bookmarkitem.cpp bookmarkitem.h
- bookmarkmanager.cpp bookmarkmanager.h
- bookmarkmanagerwidget.cpp bookmarkmanagerwidget.h bookmarkmanagerwidget.ui
- bookmarkmodel.cpp bookmarkmodel.h
- bookmarkwidget.ui
- centralwidget.cpp centralwidget.h
- cmdlineparser.cpp cmdlineparser.h
- contentwindow.cpp contentwindow.h
- findwidget.cpp findwidget.h
- globalactions.cpp globalactions.h
- helpbrowsersupport.cpp helpbrowsersupport.h
- helpdocsettings.cpp helpdocsettings.h
- helpdocsettingswidget.cpp helpdocsettingswidget.h helpdocsettingswidget.ui
- helpenginewrapper.cpp helpenginewrapper.h
- helpviewer.cpp helpviewer.h helpviewer_p.h
- indexwindow.cpp indexwindow.h
- main.cpp
- mainwindow.cpp mainwindow.h
- openpagesmanager.cpp openpagesmanager.h
- openpagesmodel.cpp openpagesmodel.h
- openpagesswitcher.cpp openpagesswitcher.h
- openpageswidget.cpp openpageswidget.h
- preferencesdialog.cpp preferencesdialog.h preferencesdialog.ui
- qtdocinstaller.cpp qtdocinstaller.h
- remotecontrol.cpp remotecontrol.h
- searchwidget.cpp searchwidget.h
- topicchooser.cpp topicchooser.h topicchooser.ui
- tracer.h
- xbelsupport.cpp xbelsupport.h
- INCLUDE_DIRECTORIES
- ../../shared/fontpanel
- PUBLIC_LIBRARIES
- Qt::Gui
- Qt::Help
- Qt::Network
- Qt::Sql
- Qt::Widgets
- ENABLE_AUTOGEN_TOOLS
- uic
-)
-
-# Resources:
-set(assistant_resource_files
- "assistant.qch"
-)
-
-qt_add_resource(assistant "assistant"
- PREFIX
- "/qt-project.org/assistant"
- FILES
- ${assistant_resource_files}
-)
-set(assistant_images_resource_files
- "images/assistant-128.png"
- "images/assistant.png"
- "images/bookmark.png"
- "images/closebutton.png"
- "images/darkclosebutton.png"
- "images/mac/addtab.png"
- "images/mac/book.png"
- "images/mac/closetab.png"
- "images/mac/editcopy.png"
- "images/mac/find.png"
- "images/mac/home.png"
- "images/mac/next.png"
- "images/mac/previous.png"
- "images/mac/print.png"
- "images/mac/resetzoom.png"
- "images/mac/synctoc.png"
- "images/mac/zoomin.png"
- "images/mac/zoomout.png"
- "images/win/addtab.png"
- "images/win/book.png"
- "images/win/closetab.png"
- "images/win/editcopy.png"
- "images/win/find.png"
- "images/win/home.png"
- "images/win/next.png"
- "images/win/previous.png"
- "images/win/print.png"
- "images/win/resetzoom.png"
- "images/win/synctoc.png"
- "images/win/zoomin.png"
- "images/win/zoomout.png"
- "images/wrap.png"
-)
-
-qt_add_resource(assistant "assistant_images"
- PREFIX
- "/qt-project.org/assistant"
- FILES
- ${assistant_images_resource_files}
-)
-
-set_target_properties(assistant PROPERTIES
- QT_TARGET_DESCRIPTION "Qt Assistant"
-)
-
-#### Keys ignored in scope 1:.:.:assistant.pro:<TRUE>:
-# PROJECTNAME = "Assistant"
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 2:.:.:assistant.pro:TARGET Qt::WebKitWidgets AND NOT QT_CONFIG___contains___static:
-# BROWSER = "qtwebkit"
-
-#### Keys ignored in scope 3:.:.:assistant.pro:else:
-# BROWSER = "qtextbrowser"
-
-qt_extend_target(assistant CONDITION TARGET Qt::PrintSupport
- PUBLIC_LIBRARIES
- Qt::PrintSupport
-)
-
-qt_extend_target(assistant CONDITION BROWSER___equals___qtwebkit
- SOURCES
- helpviewer_qwv.cpp
- DEFINES
- BROWSER_QTWEBKIT
- PUBLIC_LIBRARIES
- Qt::WebKitWidgets
-)
-
-qt_extend_target(assistant CONDITION NOT BROWSER___equals___qtwebkit
- SOURCES
- helpviewer_qtb.cpp
- DEFINES
- BROWSER_QTEXTBROWSER
-)
-
-if(WIN32)
- set_target_properties(assistant PROPERTIES
- QT_TARGET_RC_ICONS "${CMAKE_CURRENT_SOURCE_DIR}/assistant.ico"
- )
-endif()
-
-if(WIN32)
- set_target_properties(assistant PROPERTIES
- QT_TARGET_VERSION "${PROJECT_VERSION}.0"
- )
-endif()
-
-qt_extend_target(assistant CONDITION WIN32
- SOURCES
- stdinlistener_win.cpp stdinlistener_win.h
- PUBLIC_LIBRARIES
- shell32
-)
-
-if(UNIX)
- set_target_properties(assistant PROPERTIES
- QT_TARGET_VERSION "${PROJECT_VERSION}"
- )
-endif()
-
-qt_extend_target(assistant CONDITION UNIX
- SOURCES
- stdinlistener.cpp stdinlistener.h
-)
-
-if(APPLE)
- set_target_properties(assistant PROPERTIES
- MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info_mac.plist"
- MACOSX_BUNDLE TRUE
- MACOSX_BUNDLE_ICON_FILE "assistant.icns"
- OUTPUT_NAME "Assistant"
- )
- set_source_files_properties(assistant.icns PROPERTIES
- MACOSX_PACKAGE_LOCATION Resources
- )
- target_sources(assistant PRIVATE
- assistant.icns
- )
-endif()
-qt_add_docs(assistant
- doc/qtassistant.qdocconf
-)
-
diff --git a/src/assistant/assistant/CMakeLists.txt b/src/assistant/assistant/CMakeLists.txt
index d8a56090c..10df7f777 100644
--- a/src/assistant/assistant/CMakeLists.txt
+++ b/src/assistant/assistant/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from assistant.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## assistant App:
@@ -25,7 +26,7 @@ qt_internal_add_app(assistant
helpdocsettings.cpp helpdocsettings.h
helpdocsettingswidget.cpp helpdocsettingswidget.h helpdocsettingswidget.ui
helpenginewrapper.cpp helpenginewrapper.h
- helpviewer.cpp helpviewer.h helpviewer_p.h
+ helpviewer.cpp helpviewer.h helpviewerimpl.cpp helpviewerimpl.h helpviewerimpl_p.h
indexwindow.cpp indexwindow.h
main.cpp
mainwindow.cpp mainwindow.h
@@ -42,35 +43,25 @@ qt_internal_add_app(assistant
xbelsupport.cpp xbelsupport.h
INCLUDE_DIRECTORIES
../../shared/fontpanel
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Help
Qt::Network
Qt::Sql
Qt::Widgets
- Qt::PrintSupport # special case
+ Qt::PrintSupport
+ qlitehtml
ENABLE_AUTOGEN_TOOLS
uic
)
# Resources:
-set(assistant_resource_files
- "assistant.qch"
-)
-
-qt_add_resource(assistant "assistant"
- PREFIX
- "/qt-project.org/assistant"
- FILES
- ${assistant_resource_files}
-)
set(assistant_images_resource_files
"images/assistant-128.png"
"images/assistant.png"
"images/bookmark.png"
"images/closebutton.png"
"images/darkclosebutton.png"
- "images/mac/addtab.png"
"images/mac/book.png"
"images/mac/closetab.png"
"images/mac/editcopy.png"
@@ -83,7 +74,6 @@ set(assistant_images_resource_files
"images/mac/synctoc.png"
"images/mac/zoomin.png"
"images/mac/zoomout.png"
- "images/win/addtab.png"
"images/win/book.png"
"images/win/closetab.png"
"images/win/editcopy.png"
@@ -99,7 +89,7 @@ set(assistant_images_resource_files
"images/wrap.png"
)
-qt_add_resource(assistant "assistant_images"
+qt_internal_add_resource(assistant "assistant_images"
PREFIX
"/qt-project.org/assistant"
FILES
@@ -110,35 +100,26 @@ set_target_properties(assistant PROPERTIES
QT_TARGET_DESCRIPTION "Qt Assistant"
)
-#### Keys ignored in scope 1:.:.:assistant.pro:<TRUE>:
-# PROJECTNAME = "Assistant"
-
## Scopes:
#####################################################################
-#### Keys ignored in scope 2:.:.:assistant.pro:TARGET Qt::WebKitWidgets AND NOT QT_CONFIG___contains___static:
-# BROWSER = "qtwebkit"
-
-#### Keys ignored in scope 3:.:.:assistant.pro:else:
-# BROWSER = "qtextbrowser"
-
-qt_extend_target(assistant CONDITION TARGET Qt::PrintSupport
+qt_internal_extend_target(assistant CONDITION TARGET Qt::PrintSupport
PUBLIC_LIBRARIES
Qt::PrintSupport
)
-qt_extend_target(assistant CONDITION BROWSER___equals___qtwebkit
+qt_internal_extend_target(assistant CONDITION BROWSER___equals___qtwebkit
SOURCES
- helpviewer_qwv.cpp
+ helpviewerimpl_qwv.cpp
DEFINES
BROWSER_QTWEBKIT
PUBLIC_LIBRARIES
Qt::WebKitWidgets
)
-qt_extend_target(assistant CONDITION NOT BROWSER___equals___qtwebkit
+qt_internal_extend_target(assistant CONDITION NOT BROWSER___equals___qtwebkit
SOURCES
- helpviewer_qtb.cpp
+ helpviewerimpl_qtb.cpp
DEFINES
BROWSER_QTEXTBROWSER
)
@@ -155,7 +136,7 @@ if(WIN32)
)
endif()
-qt_extend_target(assistant CONDITION WIN32
+qt_internal_extend_target(assistant CONDITION WIN32
SOURCES
stdinlistener_win.cpp stdinlistener_win.h
PUBLIC_LIBRARIES
@@ -168,7 +149,7 @@ if(UNIX)
)
endif()
-qt_extend_target(assistant CONDITION UNIX
+qt_internal_extend_target(assistant CONDITION UNIX
SOURCES
stdinlistener.cpp stdinlistener.h
)
@@ -186,13 +167,11 @@ if(APPLE)
target_sources(assistant PRIVATE
assistant.icns
)
- # special case end
# Set values to be replaced in the custom Info_mac.plist.
set(ICON "assistant.icns")
set(EXECUTABLE "Assistant")
- # special case end
endif()
-qt_add_docs(assistant
+qt_internal_add_docs(assistant
doc/qtassistant.qdocconf
)
diff --git a/src/assistant/assistant/aboutdialog.cpp b/src/assistant/assistant/aboutdialog.cpp
index 774b6fd4b..2c7ea63b0 100644
--- a/src/assistant/assistant/aboutdialog.cpp
+++ b/src/assistant/assistant/aboutdialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "aboutdialog.h"
@@ -81,22 +56,15 @@ QVariant AboutLabel::loadResource(int type, const QUrl &name)
return QVariant();
}
-
-#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
-void AboutLabel::setSource(const QUrl &url)
-#else
void AboutLabel::doSetSource(const QUrl &url, QTextDocument::ResourceType type)
-#endif
{
TRACE_OBJ
-#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
Q_UNUSED(type);
-#endif
if (url.isValid() && (!HelpViewer::isLocalUrl(url)
|| !HelpViewer::canOpenPage(url.path()))) {
if (!QDesktopServices::openUrl(url)) {
QMessageBox::warning(this, tr("Warning"),
- tr("Unable to launch external application."), tr("OK"));
+ tr("Unable to launch external application."), QMessageBox::Close);
}
}
}
diff --git a/src/assistant/assistant/aboutdialog.h b/src/assistant/assistant/aboutdialog.h
index 720292d7b..dd3db0c19 100644
--- a/src/assistant/assistant/aboutdialog.h
+++ b/src/assistant/assistant/aboutdialog.h
@@ -1,36 +1,14 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABOUTDIALOG_H
#define ABOUTDIALOG_H
#include <QtWidgets/QTextBrowser>
#include <QtWidgets/QDialog>
+#include <QtCore/QMap>
+
+#include <QtCore/QMap>
QT_BEGIN_NAMESPACE
@@ -50,11 +28,7 @@ public:
private:
QVariant loadResource(int type, const QUrl &name) override;
-#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
- void setSource(const QUrl &url) override;
-#else
void doSetSource(const QUrl &name, QTextDocument::ResourceType type) override;
-#endif
QMap<QString, QByteArray> m_resourceMap;
};
diff --git a/src/assistant/assistant/assistant.pro b/src/assistant/assistant/assistant.pro
deleted file mode 100644
index 5da0b0077..000000000
--- a/src/assistant/assistant/assistant.pro
+++ /dev/null
@@ -1,123 +0,0 @@
-qtHaveModule(webkitwidgets):!contains(QT_CONFIG, static) {
- BROWSER = qtwebkit
-} else {
- BROWSER = qtextbrowser
-}
-
-QT += widgets network help sql
-qtHaveModule(printsupport): QT += printsupport
-PROJECTNAME = Assistant
-
-include(../../shared/fontpanel/fontpanel.pri)
-
-QMAKE_DOCS = $$PWD/doc/qtassistant.qdocconf
-
-HEADERS += aboutdialog.h \
- bookmarkdialog.h \
- bookmarkfiltermodel.h \
- bookmarkitem.h \
- bookmarkmanager.h \
- bookmarkmanagerwidget.h \
- bookmarkmodel.h \
- centralwidget.h \
- cmdlineparser.h \
- contentwindow.h \
- findwidget.h \
- helpdocsettings.h \
- helpdocsettingswidget.h \
- helpenginewrapper.h \
- helpbrowsersupport.h \
- helpviewer.h \
- helpviewer_p.h \
- indexwindow.h \
- mainwindow.h \
- preferencesdialog.h \
- qtdocinstaller.h \
- remotecontrol.h \
- searchwidget.h \
- topicchooser.h \
- tracer.h \
- xbelsupport.h \
- ../shared/collectionconfiguration.h \
- openpagesmodel.h \
- globalactions.h \
- openpageswidget.h \
- openpagesmanager.h \
- openpagesswitcher.h
-
-SOURCES += aboutdialog.cpp \
- bookmarkdialog.cpp \
- bookmarkfiltermodel.cpp \
- bookmarkitem.cpp \
- bookmarkmanager.cpp \
- bookmarkmanagerwidget.cpp \
- bookmarkmodel.cpp \
- centralwidget.cpp \
- cmdlineparser.cpp \
- contentwindow.cpp \
- findwidget.cpp \
- helpdocsettings.cpp \
- helpdocsettingswidget.cpp \
- helpenginewrapper.cpp \
- helpbrowsersupport.cpp \
- helpviewer.cpp \
- indexwindow.cpp \
- main.cpp \
- mainwindow.cpp \
- preferencesdialog.cpp \
- qtdocinstaller.cpp \
- remotecontrol.cpp \
- searchwidget.cpp \
- topicchooser.cpp \
- xbelsupport.cpp \
- ../shared/collectionconfiguration.cpp \
- openpagesmodel.cpp \
- globalactions.cpp \
- openpageswidget.cpp \
- openpagesmanager.cpp \
- openpagesswitcher.cpp
-
-equals(BROWSER, "qtwebkit") {
- DEFINES += BROWSER_QTWEBKIT
- QT += webkitwidgets
- SOURCES += helpviewer_qwv.cpp
-} else {
- DEFINES += BROWSER_QTEXTBROWSER
- SOURCES += helpviewer_qtb.cpp
-}
-
-win32 {
- HEADERS += stdinlistener_win.h
- SOURCES += stdinlistener_win.cpp
-} else {
- HEADERS += stdinlistener.h
- SOURCES += stdinlistener.cpp
-}
-
-FORMS += bookmarkdialog.ui \
- bookmarkmanagerwidget.ui \
- bookmarkwidget.ui \
- helpdocsettingswidget.ui \
- preferencesdialog.ui \
- topicchooser.ui
-
-RESOURCES += assistant.qrc \
- assistant_images.qrc
-
-QMAKE_TARGET_DESCRIPTION = Qt Assistant
-
-win32 {
- LIBS += -lshell32
- RC_ICONS = assistant.ico
- VERSION = $${QT_VERSION}.0
-} else {
- VERSION = $${QT_VERSION}
-}
-
-mac {
- ICON = assistant.icns
- TARGET = Assistant
- QMAKE_INFO_PLIST = Info_mac.plist
-}
-
-load(qt_app)
diff --git a/src/assistant/assistant/assistant.qch b/src/assistant/assistant/assistant.qch
deleted file mode 100644
index b58b7ecca..000000000
--- a/src/assistant/assistant/assistant.qch
+++ /dev/null
Binary files differ
diff --git a/src/assistant/assistant/assistant.qrc b/src/assistant/assistant/assistant.qrc
deleted file mode 100644
index 568ecffe7..000000000
--- a/src/assistant/assistant/assistant.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
- <qresource prefix="/qt-project.org/assistant" >
- <file>assistant.qch</file>
- </qresource>
-</RCC>
diff --git a/src/assistant/assistant/assistant_images.qrc b/src/assistant/assistant/assistant_images.qrc
deleted file mode 100644
index 948de970f..000000000
--- a/src/assistant/assistant/assistant_images.qrc
+++ /dev/null
@@ -1,36 +0,0 @@
-<RCC>
- <qresource prefix="/qt-project.org/assistant">
- <file>images/assistant-128.png</file>
- <file>images/assistant.png</file>
- <file>images/wrap.png</file>
- <file>images/bookmark.png</file>
- <file>images/mac/addtab.png</file>
- <file>images/mac/book.png</file>
- <file>images/mac/closetab.png</file>
- <file>images/mac/editcopy.png</file>
- <file>images/mac/find.png</file>
- <file>images/mac/home.png</file>
- <file>images/mac/next.png</file>
- <file>images/mac/previous.png</file>
- <file>images/mac/print.png</file>
- <file>images/mac/synctoc.png</file>
- <file>images/mac/zoomin.png</file>
- <file>images/mac/zoomout.png</file>
- <file>images/mac/resetzoom.png</file>
- <file>images/win/addtab.png</file>
- <file>images/win/book.png</file>
- <file>images/win/closetab.png</file>
- <file>images/win/editcopy.png</file>
- <file>images/win/find.png</file>
- <file>images/win/home.png</file>
- <file>images/win/next.png</file>
- <file>images/win/previous.png</file>
- <file>images/win/print.png</file>
- <file>images/win/synctoc.png</file>
- <file>images/win/zoomin.png</file>
- <file>images/win/zoomout.png</file>
- <file>images/win/resetzoom.png</file>
- <file>images/closebutton.png</file>
- <file>images/darkclosebutton.png</file>
- </qresource>
-</RCC>
diff --git a/src/assistant/assistant/bookmarkdialog.cpp b/src/assistant/assistant/bookmarkdialog.cpp
index cb775d30a..cbe2d67d2 100644
--- a/src/assistant/assistant/bookmarkdialog.cpp
+++ b/src/assistant/assistant/bookmarkdialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "bookmarkdialog.h"
#include "bookmarkfiltermodel.h"
#include "bookmarkitem.h"
@@ -37,6 +12,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
BookmarkDialog::BookmarkDialog(BookmarkModel *sourceModel, const QString &title,
const QString &url, QWidget *parent)
: QDialog(parent)
@@ -155,7 +132,7 @@ void BookmarkDialog::accepted()
void BookmarkDialog::rejected()
{
TRACE_OBJ
- for (const QPersistentModelIndex &index : qAsConst(cache))
+ for (const QPersistentModelIndex &index : std::as_const(cache))
bookmarkModel->removeItem(index);
reject();
}
@@ -189,10 +166,10 @@ void BookmarkDialog::toolButtonClicked()
if (visible) {
resize(QSize(width(), 400));
- ui.toolButton->setText(QLatin1String("-"));
+ ui.toolButton->setText("-"_L1);
} else {
resize(width(), minimumHeight());
- ui.toolButton->setText(QLatin1String("+"));
+ ui.toolButton->setText("+"_L1);
}
}
diff --git a/src/assistant/assistant/bookmarkdialog.h b/src/assistant/assistant/bookmarkdialog.h
index 2283b44b0..3b5aecfd2 100644
--- a/src/assistant/assistant/bookmarkdialog.h
+++ b/src/assistant/assistant/bookmarkdialog.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef BOOKMARKDIALOG_H
#define BOOKMARKDIALOG_H
diff --git a/src/assistant/assistant/bookmarkfiltermodel.cpp b/src/assistant/assistant/bookmarkfiltermodel.cpp
index a3d5c1191..89fe5cad7 100644
--- a/src/assistant/assistant/bookmarkfiltermodel.cpp
+++ b/src/assistant/assistant/bookmarkfiltermodel.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "bookmarkfiltermodel.h"
#include "bookmarkitem.h"
@@ -87,7 +62,7 @@ void BookmarkFilterModel::setSourceModel(QAbstractItemModel *_sourceModel)
int BookmarkFilterModel::rowCount(const QModelIndex &index) const
{
Q_UNUSED(index);
- return cache.count();
+ return cache.size();
}
int BookmarkFilterModel::columnCount(const QModelIndex &index) const
@@ -101,7 +76,7 @@ int BookmarkFilterModel::columnCount(const QModelIndex &index) const
QModelIndex BookmarkFilterModel::mapToSource(const QModelIndex &proxyIndex) const
{
const int row = proxyIndex.row();
- if (proxyIndex.isValid() && row >= 0 && row < cache.count())
+ if (proxyIndex.isValid() && row >= 0 && row < cache.size())
return cache[row];
return QModelIndex();
}
@@ -121,7 +96,7 @@ QModelIndex BookmarkFilterModel::index(int row, int column,
const QModelIndex &index) const
{
Q_UNUSED(index);
- if (row < 0 || column < 0 || cache.count() <= row
+ if (row < 0 || column < 0 || cache.size() <= row
|| !sourceModel || sourceModel->columnCount() <= column) {
return QModelIndex();
}
diff --git a/src/assistant/assistant/bookmarkfiltermodel.h b/src/assistant/assistant/bookmarkfiltermodel.h
index 28b5436df..38bfde74d 100644
--- a/src/assistant/assistant/bookmarkfiltermodel.h
+++ b/src/assistant/assistant/bookmarkfiltermodel.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef BOOKMARKFILTERMODEL_H
#define BOOKMARKFILTERMODEL_H
diff --git a/src/assistant/assistant/bookmarkitem.cpp b/src/assistant/assistant/bookmarkitem.cpp
index 5848efc33..f114f838e 100644
--- a/src/assistant/assistant/bookmarkitem.cpp
+++ b/src/assistant/assistant/bookmarkitem.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "bookmarkitem.h"
@@ -33,6 +8,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
BookmarkItem::BookmarkItem(const DataVector &data, BookmarkItem *parent)
: m_data(data)
, m_parent(parent)
@@ -66,14 +43,14 @@ BookmarkItem::addChild(BookmarkItem *child)
BookmarkItem*
BookmarkItem::child(int number) const
{
- if (number >= 0 && number < m_children.count())
+ if (number >= 0 && number < m_children.size())
return m_children[number];
return nullptr;
}
int BookmarkItem::childCount() const
{
- return m_children.count();
+ return m_children.size();
}
int BookmarkItem::childNumber() const
@@ -93,7 +70,7 @@ BookmarkItem::data(int column) const
return m_data[1];
if (column == UserRoleFolder)
- return m_data[1].toString() == QLatin1String("Folder");
+ return m_data[1].toString() == "Folder"_L1;
if (column == UserRoleExpanded)
return m_data[2];
diff --git a/src/assistant/assistant/bookmarkitem.h b/src/assistant/assistant/bookmarkitem.h
index c7e37dc55..391a7037e 100644
--- a/src/assistant/assistant/bookmarkitem.h
+++ b/src/assistant/assistant/bookmarkitem.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef BOOKMARKITEM_H
#define BOOKMARKITEM_H
diff --git a/src/assistant/assistant/bookmarkmanager.cpp b/src/assistant/assistant/bookmarkmanager.cpp
index 5daab74e8..28c534e9b 100644
--- a/src/assistant/assistant/bookmarkmanager.cpp
+++ b/src/assistant/assistant/bookmarkmanager.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "tracer.h"
#include "bookmarkmanager.h"
@@ -44,6 +19,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
// -- BookmarkManager::BookmarkWidget
void BookmarkManager::BookmarkWidget::focusInEvent(QFocusEvent *event)
@@ -147,7 +124,7 @@ void BookmarkManager::addBookmark(const QString &title, const QString &url)
{
TRACE_OBJ
showBookmarkDialog(title.isEmpty() ? tr("Untitled") : title,
- url.isEmpty() ? QLatin1String("about:blank") : url);
+ url.isEmpty() ? "about:blank"_L1 : url);
storeBookmarks();
}
@@ -302,6 +279,8 @@ void BookmarkManager::buildBookmarksMenu(const QModelIndex &index, QMenu* menu)
} else {
QAction *action = menu->addAction(icon, text);
action->setData(index.data(UserRoleUrl).toString());
+ connect(action, &QAction::triggered,
+ this, &BookmarkManager::setSourceFromAction);
}
}
@@ -383,8 +362,8 @@ void BookmarkManager::refreshBookmarkMenu()
bookmarkMenu->addAction(tr("Manage Bookmarks..."), this,
&BookmarkManager::manageBookmarks);
bookmarkMenu->addAction(QIcon::fromTheme("bookmark-new"), tr("Add Bookmark..."),
- this, &BookmarkManager::addBookmarkActivated,
- QKeySequence(tr("Ctrl+D")));
+ QKeySequence(tr("Ctrl+D")),
+ this, &BookmarkManager::addBookmarkActivated);
bookmarkMenu->addSeparator();
@@ -396,9 +375,6 @@ void BookmarkManager::refreshBookmarkMenu()
root = bookmarkModel->index(1, 0, QModelIndex());
for (int i = 0; i < bookmarkModel->rowCount(root); ++i)
buildBookmarksMenu(bookmarkModel->index(i, 0, root), bookmarkMenu);
-
- connect(bookmarkMenu, &QMenu::triggered,
- this, &BookmarkManager::setSourceFromAction);
}
void BookmarkManager::refreshBookmarkToolBar()
@@ -420,8 +396,6 @@ void BookmarkManager::refreshBookmarkToolBar()
QMenu *menu = new QMenu(button);
for (int j = 0; j < bookmarkModel->rowCount(index); ++j)
buildBookmarksMenu(bookmarkModel->index(j, 0, index), menu);
- connect(menu, &QMenu::triggered,
- this, &BookmarkManager::setSourceFromAction);
button->setMenu(menu);
button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
button->setIcon(qvariant_cast<QIcon>(index.data(Qt::DecorationRole)));
diff --git a/src/assistant/assistant/bookmarkmanager.h b/src/assistant/assistant/bookmarkmanager.h
index 4bcb4cd10..1ffb079a0 100644
--- a/src/assistant/assistant/bookmarkmanager.h
+++ b/src/assistant/assistant/bookmarkmanager.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef BOOKMARKMANAGER_H
#define BOOKMARKMANAGER_H
diff --git a/src/assistant/assistant/bookmarkmanagerwidget.cpp b/src/assistant/assistant/bookmarkmanagerwidget.cpp
index 090d7c754..fc2f24def 100644
--- a/src/assistant/assistant/bookmarkmanagerwidget.cpp
+++ b/src/assistant/assistant/bookmarkmanagerwidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "bookmarkmanagerwidget.h"
#include "bookmarkitem.h"
#include "bookmarkmodel.h"
@@ -44,6 +19,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
BookmarkManagerWidget::BookmarkManagerWidget(BookmarkModel *sourceModel,
QWidget *parent)
: QWidget(parent)
@@ -129,7 +106,7 @@ void BookmarkManagerWidget::selectNextIndex(bool direction) const
{
QModelIndex current = ui.treeView->currentIndex();
if (current.isValid() && !cache.isEmpty()) {
- current = cache.at(nextIndex(cache.indexOf(current), cache.count(),
+ current = cache.at(nextIndex(cache.indexOf(current), cache.size(),
direction));
}
ui.treeView->setCurrentIndex(current);
@@ -205,10 +182,10 @@ void BookmarkManagerWidget::importBookmarks()
void BookmarkManagerWidget::exportBookmarks()
{
TRACE_OBJ
- QString fileName = QFileDialog::getSaveFileName(nullptr, tr("Save File"),
- QLatin1String("untitled.xbel"), tr("Files (*.xbel)"));
+ QString fileName = QFileDialog::getSaveFileName(nullptr, tr("Save File"), "untitled.xbel"_L1,
+ tr("Files (*.xbel)"));
- const QLatin1String suffix(".xbel");
+ const QLatin1StringView suffix(".xbel");
if (!fileName.endsWith(suffix))
fileName.append(suffix);
@@ -218,7 +195,7 @@ void BookmarkManagerWidget::exportBookmarks()
writer.writeToFile(&file);
} else {
QMessageBox::information(this, tr("Qt Assistant"),
- tr("Unable to save bookmarks."), tr("OK"));
+ tr("Unable to save bookmarks."), QMessageBox::Ok);
}
}
diff --git a/src/assistant/assistant/bookmarkmanagerwidget.h b/src/assistant/assistant/bookmarkmanagerwidget.h
index cc439d5ed..dc56eeacd 100644
--- a/src/assistant/assistant/bookmarkmanagerwidget.h
+++ b/src/assistant/assistant/bookmarkmanagerwidget.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef BOOKMARKMANAGERWIDGET_H
#define BOOKMARKMANAGERWIDGET_H
diff --git a/src/assistant/assistant/bookmarkmodel.cpp b/src/assistant/assistant/bookmarkmodel.cpp
index 557e2e26c..2acb1ed34 100644
--- a/src/assistant/assistant/bookmarkmodel.cpp
+++ b/src/assistant/assistant/bookmarkmodel.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "bookmarkmodel.h"
#include "bookmarkitem.h"
@@ -36,8 +11,10 @@
#include <QtWidgets/QStyle>
#include <QtWidgets/QTreeView>
+using namespace Qt::StringLiterals;
+
const quint32 VERSION = 0xe53798;
-const QLatin1String MIMETYPE("application/bookmarks.assistant");
+const QLatin1StringView MIMETYPE("application/bookmarks.assistant");
BookmarkModel::BookmarkModel()
: QAbstractItemModel()
@@ -73,7 +50,7 @@ BookmarkModel::setBookmarks(const QByteArray &bookmarks)
delete rootItem;
folderIcon = QApplication::style()->standardIcon(QStyle::SP_DirClosedIcon);
- bookmarkIcon = QIcon(QLatin1String(":/qt-project.org/assistant/images/bookmark.png"));
+ bookmarkIcon = QIcon(":/qt-project.org/assistant/images/bookmark.png"_L1);
rootItem = new BookmarkItem(DataVector() << tr("Name") << tr("Address")
<< true);
@@ -85,12 +62,12 @@ BookmarkModel::setBookmarks(const QByteArray &bookmarks)
stream >> version;
if (version < VERSION) {
stream.device()->seek(0);
- BookmarkItem* toolbar = new BookmarkItem(DataVector() << tr("Bookmarks Toolbar")
- << QLatin1String("Folder") << true);
+ BookmarkItem *toolbar =
+ new BookmarkItem(DataVector() << tr("Bookmarks Toolbar") << "Folder"_L1 << true);
rootItem->addChild(toolbar);
- BookmarkItem* menu = new BookmarkItem(DataVector() << tr("Bookmarks Menu")
- << QLatin1String("Folder") << true);
+ BookmarkItem *menu =
+ new BookmarkItem(DataVector() << tr("Bookmarks Menu") << "Folder"_L1 << true);
rootItem->addChild(menu);
parents.push(menu);
} else {
@@ -102,11 +79,11 @@ BookmarkModel::setBookmarks(const QByteArray &bookmarks)
QString name, url;
while (!stream.atEnd()) {
stream >> depth >> name >> url >> expanded;
- while ((parents.count() - 1) != depth)
+ while ((parents.size() - 1) != depth)
parents.pop();
BookmarkItem *item = new BookmarkItem(DataVector() << name << url << expanded);
- if (url == QLatin1String("Folder")) {
+ if (url == "Folder"_L1) {
parents.top()->addChild(item);
parents.push(item);
} else {
@@ -128,7 +105,7 @@ BookmarkModel::setItemsEditable(bool editable)
void
BookmarkModel::expandFoldersIfNeeeded(QTreeView *treeView)
{
- for (const QModelIndex &index : qAsConst(cache))
+ for (QModelIndex index : std::as_const(cache))
treeView->setExpanded(index, index.data(UserRoleExpanded).toBool());
}
@@ -155,7 +132,7 @@ BookmarkModel::removeItem(const QModelIndex &index)
indexes = collectItems(index);
indexes.append(index);
- for (const QModelIndex &itemToRemove : qAsConst(indexes)) {
+ for (const QModelIndex &itemToRemove : std::as_const(indexes)) {
if (!removeRow(itemToRemove.row(), itemToRemove.parent()))
return false;
cache.remove(itemFromIndex(itemToRemove));
diff --git a/src/assistant/assistant/bookmarkmodel.h b/src/assistant/assistant/bookmarkmodel.h
index 73e6595af..9d1453d9f 100644
--- a/src/assistant/assistant/bookmarkmodel.h
+++ b/src/assistant/assistant/bookmarkmodel.h
@@ -1,34 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef BOOKMARKMODEL_H
#define BOOKMARKMODEL_H
#include <QtCore/QAbstractItemModel>
+#include <QtCore/QMap>
#include <QtGui/QIcon>
diff --git a/src/assistant/assistant/centralwidget.cpp b/src/assistant/assistant/centralwidget.cpp
index 4f3d749f4..f0de921de 100644
--- a/src/assistant/assistant/centralwidget.cpp
+++ b/src/assistant/assistant/centralwidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "centralwidget.h"
@@ -53,6 +28,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace {
CentralWidget *staticCentralWidget = nullptr;
}
@@ -123,7 +100,7 @@ void TabBar::titleChanged()
for (int i = 0; i < count(); ++i) {
HelpViewer *data = tabData(i).value<HelpViewer*>();
QString title = data->title();
- title.replace(QLatin1Char('&'), QLatin1String("&&"));
+ title.replace(u'&', "&&"_L1);
setTabText(i, title.isEmpty() ? tr("(Untitled)") : title);
}
}
@@ -163,7 +140,7 @@ void TabBar::slotCustomContextMenuRequested(const QPoint &pos)
HelpViewer *viewer = tabData(tab).value<HelpViewer*>();
QAction *newBookmark = menu.addAction(tr("Add Bookmark for this Page..."));
const QString &url = viewer->source().toString();
- if (url.isEmpty() || url == QLatin1String("about:blank"))
+ if (url.isEmpty() || url == "about:blank"_L1)
newBookmark->setEnabled(false);
QAction *pickedAction = menu.exec(mapToGlobal(pos));
@@ -509,7 +486,7 @@ void CentralWidget::keyPressEvent(QKeyEvent *e)
{
TRACE_OBJ
const QString &text = e->text();
- if (text.startsWith(QLatin1Char('/'))) {
+ if (text.startsWith(u'/')) {
if (!m_findWidget->isVisible()) {
m_findWidget->showAndClear();
} else {
@@ -542,9 +519,9 @@ void CentralWidget::highlightSearchTerms()
QHelpSearchEngine *searchEngine =
HelpEngineWrapper::instance().searchEngine();
const QString searchInput = searchEngine->searchInput();
- const bool wholePhrase = searchInput.startsWith(QLatin1Char('"')) &&
- searchInput.endsWith(QLatin1Char('"'));
- const QStringList &words = wholePhrase ? QStringList(searchInput.mid(1, searchInput.length() - 2)) :
+ const bool wholePhrase = searchInput.startsWith(u'"') &&
+ searchInput.endsWith(u'"');
+ const QStringList &words = wholePhrase ? QStringList(searchInput.mid(1, searchInput.size() - 2)) :
searchInput.split(QRegularExpression("\\W+"), Qt::SkipEmptyParts);
HelpViewer *viewer = currentHelpViewer();
for (const QString &word : words)
diff --git a/src/assistant/assistant/centralwidget.h b/src/assistant/assistant/centralwidget.h
index 6962c9931..2ff379b31 100644
--- a/src/assistant/assistant/centralwidget.h
+++ b/src/assistant/assistant/centralwidget.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef CENTRALWIDGET_H
#define CENTRALWIDGET_H
diff --git a/src/assistant/assistant/cmdlineparser.cpp b/src/assistant/assistant/cmdlineparser.cpp
index b7bf7e49a..7172c3762 100644
--- a/src/assistant/assistant/cmdlineparser.cpp
+++ b/src/assistant/assistant/cmdlineparser.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "tracer.h"
#include <QtCore/QFileInfo>
@@ -35,6 +10,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
static const char helpMessage[] = QT_TRANSLATE_NOOP("CmdLineParser",
"Usage: assistant [Options]\n\n"
"-collectionFile file Uses the specified collection\n"
@@ -81,7 +58,7 @@ CmdLineParser::CmdLineParser(const QStringList &arguments)
m_quiet(false)
{
TRACE_OBJ
- for (int i = 1; i < arguments.count(); ++i) {
+ for (int i = 1; i < arguments.size(); ++i) {
const QString &arg = arguments.at(i);
if (arg.toLower() == "-quiet")
m_quiet = true;
@@ -97,36 +74,36 @@ CmdLineParser::Result CmdLineParser::parse()
while (m_error.isEmpty() && hasMoreArgs()) {
const QString &arg = nextArg().toLower();
- if (arg == QLatin1String("-collectionfile"))
+ if (arg == "-collectionfile"_L1)
handleCollectionFileOption();
- else if (arg == QLatin1String("-showurl"))
+ else if (arg == "-showurl"_L1)
handleShowUrlOption();
- else if (arg == QLatin1String("-enableremotecontrol"))
+ else if (arg == "-enableremotecontrol"_L1)
m_enableRemoteControl = true;
- else if (arg == QLatin1String("-show"))
+ else if (arg == "-show"_L1)
handleShowOption();
- else if (arg == QLatin1String("-hide"))
+ else if (arg == "-hide"_L1)
handleHideOption();
- else if (arg == QLatin1String("-activate"))
+ else if (arg == "-activate"_L1)
handleActivateOption();
- else if (arg == QLatin1String("-register"))
+ else if (arg == "-register"_L1)
handleRegisterOption();
- else if (arg == QLatin1String("-unregister"))
+ else if (arg == "-unregister"_L1)
handleUnregisterOption();
- else if (arg == QLatin1String("-setcurrentfilter"))
+ else if (arg == "-setcurrentfilter"_L1)
handleSetCurrentFilterOption();
- else if (arg == QLatin1String("-remove-search-index"))
+ else if (arg == "-remove-search-index"_L1)
m_removeSearchIndex = true;
- else if (arg == QLatin1String("-rebuild-search-index"))
+ else if (arg == "-rebuild-search-index"_L1)
m_removeSearchIndex = true;
- else if (arg == QLatin1String("-help"))
+ else if (arg == "-help"_L1)
showHelp = true;
else
m_error = tr("Unknown option: %1").arg(arg);
}
if (!m_error.isEmpty()) {
- showMessage(m_error + QLatin1String("\n\n\n") + tr(helpMessage), true);
+ showMessage(m_error + "\n\n\n"_L1 + tr(helpMessage), true);
return Error;
} else if (showHelp) {
showMessage(tr(helpMessage), false);
@@ -138,7 +115,7 @@ CmdLineParser::Result CmdLineParser::parse()
bool CmdLineParser::hasMoreArgs() const
{
TRACE_OBJ
- return m_pos < m_arguments.count();
+ return m_pos < m_arguments.size();
}
const QString &CmdLineParser::nextArg()
@@ -200,13 +177,13 @@ void CmdLineParser::handleShowOrHideOrActivateOption(ShowState state)
TRACE_OBJ
if (hasMoreArgs()) {
const QString &widget = nextArg().toLower();
- if (widget == QLatin1String("contents"))
+ if (widget == "contents"_L1)
m_contents = state;
- else if (widget == QLatin1String("index"))
+ else if (widget == "index"_L1)
m_index = state;
- else if (widget == QLatin1String("bookmarks"))
+ else if (widget == "bookmarks"_L1)
m_bookmarks = state;
- else if (widget == QLatin1String("search"))
+ else if (widget == "search"_L1)
m_search = state;
else
m_error = tr("Unknown widget: %1").arg(widget);
@@ -266,7 +243,7 @@ void CmdLineParser::showMessage(const QString &msg, bool error)
if (m_quiet)
return;
#ifdef Q_OS_WIN
- QString message = QLatin1String("<pre>") % msg % QLatin1String("</pre>");
+ QString message = "<pre>"_L1 % msg % "</pre>"_L1;
if (error)
QMessageBox::critical(0, tr("Error"), message);
else
@@ -291,8 +268,7 @@ QString CmdLineParser::collectionFile() const
bool CmdLineParser::collectionFileGiven() const
{
TRACE_OBJ
- return m_arguments.contains(QLatin1String("-collectionfile"),
- Qt::CaseInsensitive);
+ return m_arguments.contains("-collectionfile"_L1, Qt::CaseInsensitive);
}
QUrl CmdLineParser::url() const
diff --git a/src/assistant/assistant/cmdlineparser.h b/src/assistant/assistant/cmdlineparser.h
index 2a49cbcf4..04ca012ff 100644
--- a/src/assistant/assistant/cmdlineparser.h
+++ b/src/assistant/assistant/cmdlineparser.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef CMDLINEPARSER_H
#define CMDLINEPARSER_H
diff --git a/src/assistant/assistant/contentwindow.cpp b/src/assistant/assistant/contentwindow.cpp
index 3482fd7ba..d9fc1850b 100644
--- a/src/assistant/assistant/contentwindow.cpp
+++ b/src/assistant/assistant/contentwindow.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "contentwindow.h"
@@ -77,6 +52,7 @@ bool ContentWindow::syncToContent(const QUrl& url)
if (!idx.isValid())
return false;
m_contentWidget->setCurrentIndex(idx);
+ m_contentWidget->scrollTo(idx);
return true;
}
diff --git a/src/assistant/assistant/contentwindow.h b/src/assistant/assistant/contentwindow.h
index 8281ff2d2..5dae053e9 100644
--- a/src/assistant/assistant/contentwindow.h
+++ b/src/assistant/assistant/contentwindow.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef CONTENTWINDOW_H
#define CONTENTWINDOW_H
diff --git a/src/assistant/assistant/doc/qtassistant.qdocconf b/src/assistant/assistant/doc/qtassistant.qdocconf
index 07e93da5f..a46818216 100644
--- a/src/assistant/assistant/doc/qtassistant.qdocconf
+++ b/src/assistant/assistant/doc/qtassistant.qdocconf
@@ -13,9 +13,6 @@ qhp.QtAssistant.namespace = org.qt-project.qtassistant.$QT_VERSION_TAG
qhp.QtAssistant.virtualFolder = qtassistant
qhp.QtAssistant.indexTitle = Qt Assistant Manual
-qhp.QtAssistant.filterAttributes = qt $QT_VERSION tools assistant
-qhp.QtAssistant.customFilters.QtAssistant.name = Qt Assistant Manual
-qhp.QtAssistant.customFilters.QtAssistant.filterAttributes = qt tools assistant
qhp.QtAssistant.subprojects = manual examples
qhp.QtAssistant.subprojects.manual.title = Manual
qhp.QtAssistant.subprojects.manual.indexTitle = Qt Assistant Manual
@@ -27,7 +24,7 @@ qhp.QtAssistant.subprojects.examples.sortPages = true
language = Cpp
-sourcedirs = ..
+sourcedirs += ..
exampledirs = ../../../../examples/assistant \
snippets
@@ -39,4 +36,8 @@ depends += qtdoc qmake
# Use a generic thumbnail image for examples that have no images in their docs
manifestmeta.thumbnail.names += "QtAssistant/Remote Control Example"
+# Highlighted example for Desktop category
+manifestmeta.highlighted.names = "QtAssistant/Simple Text Viewer Example"
+
navigation.landingpage = "Qt Assistant Manual"
+
diff --git a/src/assistant/assistant/doc/snippets/doc_src_assistant-manual.qdoc b/src/assistant/assistant/doc/snippets/doc_src_assistant-manual.qdoc
index feae78784..7f52adc33 100644
--- a/src/assistant/assistant/doc/snippets/doc_src_assistant-manual.qdoc
+++ b/src/assistant/assistant/doc/snippets/doc_src_assistant-manual.qdoc
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
//! [0]
assistant -collectionFile file
@@ -150,7 +103,7 @@ assistant -collectionFile mycollection.qhc
//! [8]
//! [9]
-%QDesktopServices::DataLocation%/mycompany/myapplication/mycollection.qhc
+%QDesktopServices::AppDataLocation%/mycompany/myapplication/mycollection.qhc
//! [9]
//! [10]
diff --git a/src/assistant/assistant/doc/src/assistant-example.qdoc b/src/assistant/assistant/doc/src/assistant-example.qdoc
index 75291c755..8a3fc5efe 100644
--- a/src/assistant/assistant/doc/src/assistant-example.qdoc
+++ b/src/assistant/assistant/doc/src/assistant-example.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\group examples-qtassistant
diff --git a/src/assistant/assistant/doc/src/assistant-manual.qdoc b/src/assistant/assistant/doc/src/assistant-manual.qdoc
index b03cffeaa..121def1c6 100644
--- a/src/assistant/assistant/doc/src/assistant-manual.qdoc
+++ b/src/assistant/assistant/doc/src/assistant-manual.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\page qtassistant-index.html
@@ -55,6 +31,7 @@
\li \l{Qt Assistant Quick Guide}
\li \l{Using Qt Assistant}
\li \l{Customizing Qt Assistant}
+ \li \l{Licenses and Attributions}
\endlist
*/
@@ -63,6 +40,7 @@
\title Customizing Qt Assistant
\previouspage Using Qt Assistant
+ \nextpage Licenses and Attributions
Using \QA as custom help viewer requires more than just being able to
display custom documentation. It is equally important that the
@@ -119,7 +97,7 @@
To solve this dilemma, \QA creates user specific collection files which
are more or less copied from the original collection file. The user-specific
collection file will be saved in a subdirectory of the path returned by
- QDesktopServices::DataLocation. The subdirectory, or \e{cache directory}
+ QDesktopServices::AppDataLocation. The subdirectory, or \e{cache directory}
within this user-specific location, can be defined in the help collection
project file. For example:
@@ -260,7 +238,7 @@
relative to the directory the collection file resides in.
If the attribute is set to "default" or if it is missing,
the path is relative to the directory given by
- QDesktopServices::DataLocation. The first form is useful for
+ QDesktopServices::AppDataLocation. The first form is useful for
collections that are used in a \e mobile way, such as carried around
on a USB stick.
\row
@@ -423,3 +401,18 @@
\li Doesn't show any error, warning or success messages.
\endtable
*/
+
+/*!
+ \page assistant-licenses.html
+ \title Licenses and Attributions
+
+ \previouspage Customizing Qt Assistant
+
+ \QA is available under commercial licenses from \l{The Qt Company}. In
+ addition, it is available under the \l{GNU General Public License, version 3}.
+
+ Furthermore, \QA \QtVersion may contain third party modules
+ under following permissive licenses:
+
+ \generatelist{groupsbymodule attributions-qtassistant-tools}
+*/
diff --git a/src/assistant/assistant/doc/src/assistant-quick-guide.qdoc b/src/assistant/assistant/doc/src/assistant-quick-guide.qdoc
index 2a8dc01e1..5fa53a275 100644
--- a/src/assistant/assistant/doc/src/assistant-quick-guide.qdoc
+++ b/src/assistant/assistant/doc/src/assistant-quick-guide.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\if !defined(ASSISTANT_INTERNAL)
diff --git a/src/assistant/assistant/findwidget.cpp b/src/assistant/assistant/findwidget.cpp
index 2bbbbf6b0..55954564a 100644
--- a/src/assistant/assistant/findwidget.cpp
+++ b/src/assistant/assistant/findwidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "tracer.h"
#include "findwidget.h"
@@ -39,6 +14,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
FindWidget::FindWidget(QWidget *parent)
: QWidget(parent)
, appPalette(qApp->palette())
@@ -46,18 +23,17 @@ FindWidget::FindWidget(QWidget *parent)
TRACE_OBJ
installEventFilter(this);
QHBoxLayout *hboxLayout = new QHBoxLayout(this);
- QString resourcePath = QLatin1String(":/qt-project.org/assistant/images/");
+ QString resourcePath = ":/qt-project.org/assistant/images/"_L1;
#ifndef Q_OS_MAC
- hboxLayout->setContentsMargins(QMargins());
+ hboxLayout->setContentsMargins({});
hboxLayout->setSpacing(6);
- resourcePath.append(QLatin1String("win"));
+ resourcePath.append("win"_L1);
#else
- resourcePath.append(QLatin1String("mac"));
+ resourcePath.append("mac"_L1);
#endif
- toolClose = setupToolButton(QString(),
- resourcePath + QLatin1String("/closetab.png"));
+ toolClose = setupToolButton({}, resourcePath + "/closetab.png"_L1);
hboxLayout->addWidget(toolClose);
connect(toolClose, &QAbstractButton::clicked, this, &QWidget::hide);
@@ -68,14 +44,12 @@ FindWidget::FindWidget(QWidget *parent)
connect(editFind, &QLineEdit::returnPressed, this, &FindWidget::findNext);
connect(editFind, &QLineEdit::textChanged, this, &FindWidget::updateButtons);
- toolPrevious = setupToolButton(tr("Previous"),
- resourcePath + QLatin1String("/previous.png"));
+ toolPrevious = setupToolButton(tr("Previous"), resourcePath + "/previous.png"_L1);
connect(toolPrevious, &QAbstractButton::clicked, this, &FindWidget::findPrevious);
hboxLayout->addWidget(toolPrevious);
- toolNext = setupToolButton(tr("Next"),
- resourcePath + QLatin1String("/next.png"));
+ toolNext = setupToolButton(tr("Next"), resourcePath + "/next.png"_L1);
hboxLayout->addWidget(toolNext);
connect(toolNext, &QAbstractButton::clicked, this, &FindWidget::findNext);
diff --git a/src/assistant/assistant/findwidget.h b/src/assistant/assistant/findwidget.h
index c4f3090a2..a9647b0a4 100644
--- a/src/assistant/assistant/findwidget.h
+++ b/src/assistant/assistant/findwidget.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef FINDWIDGET_H
#define FINDWIDGET_H
diff --git a/src/assistant/assistant/globalactions.cpp b/src/assistant/assistant/globalactions.cpp
index 4e7b73784..cd9d1871f 100644
--- a/src/assistant/assistant/globalactions.cpp
+++ b/src/assistant/assistant/globalactions.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Assistant module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "globalactions.h"
@@ -40,6 +15,8 @@
# include <QWebHistory>
#endif
+using namespace Qt::StringLiterals;
+
GlobalActions *GlobalActions::instance(QObject *parent)
{
Q_ASSERT(!m_instance != !parent);
@@ -53,18 +30,18 @@ GlobalActions::GlobalActions(QObject *parent) : QObject(parent)
TRACE_OBJ
// TODO: Put resource path in misc class
- QString resourcePath = QLatin1String(":/qt-project.org/assistant/images/");
+ QString resourcePath = ":/qt-project.org/assistant/images/"_L1;
#ifdef Q_OS_MAC
- resourcePath.append(QLatin1String("mac"));
+ resourcePath.append("mac"_L1);
#else
- resourcePath.append(QLatin1String("win"));
+ resourcePath.append("win"_L1);
#endif
CentralWidget *centralWidget = CentralWidget::instance();
m_backAction = new QAction(tr("&Back"), parent);
m_backAction->setEnabled(false);
m_backAction->setShortcuts(QKeySequence::Back);
- m_backAction->setIcon(QIcon(resourcePath + QLatin1String("/previous.png")));
+ m_backAction->setIcon(QIcon(resourcePath + "/previous.png"_L1));
connect(m_backAction, &QAction::triggered, centralWidget, &CentralWidget::backward);
m_actionList << m_backAction;
@@ -72,7 +49,7 @@ GlobalActions::GlobalActions(QObject *parent) : QObject(parent)
m_nextAction->setPriority(QAction::LowPriority);
m_nextAction->setEnabled(false);
m_nextAction->setShortcuts(QKeySequence::Forward);
- m_nextAction->setIcon(QIcon(resourcePath + QLatin1String("/next.png")));
+ m_nextAction->setIcon(QIcon(resourcePath + "/next.png"_L1));
connect(m_nextAction, &QAction::triggered, centralWidget, &CentralWidget::forward);
m_actionList << m_nextAction;
@@ -80,7 +57,7 @@ GlobalActions::GlobalActions(QObject *parent) : QObject(parent)
m_homeAction = new QAction(tr("&Home"), parent);
m_homeAction->setShortcut(tr("ALT+Home"));
- m_homeAction->setIcon(QIcon(resourcePath + QLatin1String("/home.png")));
+ m_homeAction->setIcon(QIcon(resourcePath + "/home.png"_L1));
connect(m_homeAction, &QAction::triggered, centralWidget, &CentralWidget::home);
m_actionList << m_homeAction;
@@ -90,14 +67,14 @@ GlobalActions::GlobalActions(QObject *parent) : QObject(parent)
m_zoomInAction = new QAction(tr("Zoom &in"), parent);
m_zoomInAction->setPriority(QAction::LowPriority);
- m_zoomInAction->setIcon(QIcon(resourcePath + QLatin1String("/zoomin.png")));
+ m_zoomInAction->setIcon(QIcon(resourcePath + "/zoomin.png"_L1));
m_zoomInAction->setShortcut(QKeySequence::ZoomIn);
connect(m_zoomInAction, &QAction::triggered, centralWidget, &CentralWidget::zoomIn);
m_actionList << m_zoomInAction;
m_zoomOutAction = new QAction(tr("Zoom &out"), parent);
m_zoomOutAction->setPriority(QAction::LowPriority);
- m_zoomOutAction->setIcon(QIcon(resourcePath + QLatin1String("/zoomout.png")));
+ m_zoomOutAction->setIcon(QIcon(resourcePath + "/zoomout.png"_L1));
m_zoomOutAction->setShortcut(QKeySequence::ZoomOut);
connect(m_zoomOutAction, &QAction::triggered, centralWidget, &CentralWidget::zoomOut);
m_actionList << m_zoomOutAction;
@@ -110,7 +87,7 @@ GlobalActions::GlobalActions(QObject *parent) : QObject(parent)
m_copyAction = new QAction(tr("&Copy selected Text"), parent);
m_copyAction->setPriority(QAction::LowPriority);
m_copyAction->setIconText("&Copy");
- m_copyAction->setIcon(QIcon(resourcePath + QLatin1String("/editcopy.png")));
+ m_copyAction->setIcon(QIcon(resourcePath + "/editcopy.png"_L1));
m_copyAction->setShortcuts(QKeySequence::Copy);
m_copyAction->setEnabled(false);
connect(m_copyAction, &QAction::triggered, centralWidget, &CentralWidget::copy);
@@ -119,29 +96,37 @@ GlobalActions::GlobalActions(QObject *parent) : QObject(parent)
m_printAction = new QAction(tr("&Print..."), parent);
m_printAction->setPriority(QAction::LowPriority);
- m_printAction->setIcon(QIcon(resourcePath + QLatin1String("/print.png")));
+ m_printAction->setIcon(QIcon(resourcePath + "/print.png"_L1));
m_printAction->setShortcut(QKeySequence::Print);
connect(m_printAction, &QAction::triggered, centralWidget, &CentralWidget::print);
m_actionList << m_printAction;
m_findAction = new QAction(tr("&Find in Text..."), parent);
m_findAction->setIconText(tr("&Find"));
- m_findAction->setIcon(QIcon(resourcePath + QLatin1String("/find.png")));
+ m_findAction->setIcon(QIcon(resourcePath + "/find.png"_L1));
m_findAction->setShortcuts(QKeySequence::Find);
connect(m_findAction, &QAction::triggered, centralWidget, &CentralWidget::showTextSearch);
m_actionList << m_findAction;
#if defined (Q_OS_UNIX) && !defined(Q_OS_MAC)
- m_backAction->setIcon(QIcon::fromTheme(QStringLiteral("go-previous") , m_backAction->icon()));
- m_nextAction->setIcon(QIcon::fromTheme(QStringLiteral("go-next") , m_nextAction->icon()));
- m_zoomInAction->setIcon(QIcon::fromTheme(QStringLiteral("zoom-in") , m_zoomInAction->icon()));
- m_zoomOutAction->setIcon(QIcon::fromTheme(QStringLiteral("zoom-out") , m_zoomOutAction->icon()));
+ m_backAction->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::GoPrevious,
+ m_backAction->icon()));
+ m_nextAction->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::GoNext,
+ m_nextAction->icon()));
+ m_zoomInAction->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::ZoomIn,
+ m_zoomInAction->icon()));
+ m_zoomOutAction->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::ZoomOut,
+ m_zoomOutAction->icon()));
#if QT_CONFIG(clipboard)
- m_copyAction->setIcon(QIcon::fromTheme(QStringLiteral("edit-copy") , m_copyAction->icon()));
+ m_copyAction->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::EditCopy,
+ m_copyAction->icon()));
#endif
- m_findAction->setIcon(QIcon::fromTheme(QStringLiteral("edit-find") , m_findAction->icon()));
- m_homeAction->setIcon(QIcon::fromTheme(QStringLiteral("go-home") , m_homeAction->icon()));
- m_printAction->setIcon(QIcon::fromTheme(QStringLiteral("document-print") , m_printAction->icon()));
+ m_findAction->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::EditFind,
+ m_findAction->icon()));
+ m_homeAction->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::GoHome,
+ m_homeAction->icon()));
+ m_printAction->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::DocumentPrint,
+ m_printAction->icon()));
#endif
}
@@ -239,4 +224,4 @@ void GlobalActions::setupNavigationMenus(QAction *back, QAction *next,
#endif
}
-GlobalActions *GlobalActions::m_instance = 0;
+GlobalActions *GlobalActions::m_instance = nullptr;
diff --git a/src/assistant/assistant/globalactions.h b/src/assistant/assistant/globalactions.h
index ad59c435a..fc7255441 100644
--- a/src/assistant/assistant/globalactions.h
+++ b/src/assistant/assistant/globalactions.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Assistant module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef GLOBALACTIONS_H
#define GLOBALACTIONS_H
diff --git a/src/assistant/assistant/helpbrowsersupport.cpp b/src/assistant/assistant/helpbrowsersupport.cpp
index 86f44f9c8..2109f906c 100644
--- a/src/assistant/assistant/helpbrowsersupport.cpp
+++ b/src/assistant/assistant/helpbrowsersupport.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "helpbrowsersupport.h"
#include "helpenginewrapper.h"
@@ -96,7 +71,7 @@ public:
void abort() override;
qint64 bytesAvailable() const override
- { return data.length() + QNetworkReply::bytesAvailable(); }
+ { return data.size() + QNetworkReply::bytesAvailable(); }
protected:
qint64 readData(char *data, qint64 maxlen) override;
@@ -108,7 +83,7 @@ private:
HelpNetworkReply::HelpNetworkReply(const QNetworkRequest &request,
const QByteArray &fileData, const QString& mimeType)
- : data(fileData), origLen(fileData.length())
+ : data(fileData), origLen(fileData.size())
{
TRACE_OBJ
setRequest(request);
@@ -130,12 +105,12 @@ void HelpNetworkReply::abort()
qint64 HelpNetworkReply::readData(char *buffer, qint64 maxlen)
{
TRACE_OBJ
- qint64 len = qMin(qint64(data.length()), maxlen);
+ qint64 len = qMin(qint64(data.size()), maxlen);
if (len) {
memcpy(buffer, data.constData(), len);
data.remove(0, len);
}
- if (!data.length())
+ if (!data.size())
QTimer::singleShot(0, this, &QNetworkReply::finished);
return len;
}
diff --git a/src/assistant/assistant/helpbrowsersupport.h b/src/assistant/assistant/helpbrowsersupport.h
index d10056645..08920e6cb 100644
--- a/src/assistant/assistant/helpbrowsersupport.h
+++ b/src/assistant/assistant/helpbrowsersupport.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef HELPBROWSERSUPPORT_H
#define HELPBROWSERSUPPORT_H
diff --git a/src/assistant/assistant/helpdocsettings.cpp b/src/assistant/assistant/helpdocsettings.cpp
index dc4afdb86..2a027c700 100644
--- a/src/assistant/assistant/helpdocsettings.cpp
+++ b/src/assistant/assistant/helpdocsettings.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "helpdocsettings.h"
@@ -212,20 +176,17 @@ bool HelpDocSettings::applySettings(QHelpEngineCore *helpEngine,
settings.namespaceToFileName(),
oldSettings.namespaceToFileName());
- bool changed = false;
- for (const QString &namespaceName : docsToRemove.keys()) {
- if (!helpEngine->unregisterDocumentation(namespaceName))
- qWarning() << "Cannot unregister documentation:" << namespaceName;
- changed = true;
+ for (auto it = docsToRemove.cbegin(); it != docsToRemove.cend(); ++it) {
+ if (!helpEngine->unregisterDocumentation(it.key()))
+ qWarning() << "Cannot unregister documentation:" << it.key();
}
- for (const QString &fileName : docsToAdd.values()) {
+ for (const QString &fileName : docsToAdd) {
if (!helpEngine->registerDocumentation(fileName))
qWarning() << "Cannot register documentation file:" << fileName;
- changed = true;
}
- return changed;
+ return !docsToRemove.isEmpty() || !docsToAdd.isEmpty();
}
QT_END_NAMESPACE
diff --git a/src/assistant/assistant/helpdocsettings.h b/src/assistant/assistant/helpdocsettings.h
index 7476eb63a..bcdedb34a 100644
--- a/src/assistant/assistant/helpdocsettings.h
+++ b/src/assistant/assistant/helpdocsettings.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef HELPDOCSETTINGS_H
#define HELPDOCSETTINGS_H
diff --git a/src/assistant/assistant/helpdocsettingswidget.cpp b/src/assistant/assistant/helpdocsettingswidget.cpp
index 94ca2b25a..be1ca121d 100644
--- a/src/assistant/assistant/helpdocsettingswidget.cpp
+++ b/src/assistant/assistant/helpdocsettingswidget.cpp
@@ -1,49 +1,16 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "helpdocsettings.h"
#include "helpdocsettingswidget.h"
#include "ui_helpdocsettingswidget.h"
+#include <QtCore/QMap>
#include <QtWidgets/QFileDialog>
#include <QtWidgets/QPushButton>
+#include <QtCore/QMap>
+
QT_BEGIN_NAMESPACE
class HelpDocSettingsWidgetPrivate
@@ -68,8 +35,9 @@ void HelpDocSettingsWidgetPrivate::addDocumentation()
{
Q_Q(HelpDocSettingsWidget);
- const QStringList &fileNames = QFileDialog::getOpenFileNames(q,
- q->tr("Add Documentation"), QString(), q->tr("Qt Compressed Help Files (*.qch)"));
+ const QStringList &fileNames =
+ QFileDialog::getOpenFileNames(q, HelpDocSettingsWidget::tr("Add Documentation"), {},
+ HelpDocSettingsWidget::tr("Qt Compressed Help Files (*.qch)"));
if (fileNames.isEmpty())
return;
@@ -138,23 +106,23 @@ HelpDocSettingsWidget::HelpDocSettingsWidget(QWidget *parent)
d->q_ptr = this;
d->m_ui.setupUi(this);
- connect(d->m_ui.docAddButton, &QAbstractButton::clicked,
+ connect(d->m_ui.docAddButton, &QAbstractButton::clicked, this,
[this]() {
Q_D(HelpDocSettingsWidget);
d->addDocumentation();
});
- connect(d->m_ui.docRemoveButton, &QAbstractButton::clicked,
+ connect(d->m_ui.docRemoveButton, &QAbstractButton::clicked, this,
[this]() {
Q_D(HelpDocSettingsWidget);
d->removeDocumentation();
});
- connect(d->m_ui.registeredDocsFilterLineEdit, &QLineEdit::textChanged,
+ connect(d->m_ui.registeredDocsFilterLineEdit, &QLineEdit::textChanged, this,
[this](const QString &) {
Q_D(HelpDocSettingsWidget);
for (const auto item : d->m_namespaceToItem)
d->applyDocListFilter(item);
});
- connect(d->m_ui.registeredDocsListWidget, &QListWidget::itemSelectionChanged,
+ connect(d->m_ui.registeredDocsListWidget, &QListWidget::itemSelectionChanged, this,
[this]() {
Q_D(HelpDocSettingsWidget);
d->m_ui.docRemoveButton->setEnabled(
diff --git a/src/assistant/assistant/helpdocsettingswidget.h b/src/assistant/assistant/helpdocsettingswidget.h
index 3ed089353..f638bb940 100644
--- a/src/assistant/assistant/helpdocsettingswidget.h
+++ b/src/assistant/assistant/helpdocsettingswidget.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef HELPDOCSETTINGSWIDGET_H
#define HELPDOCSETTINGSWIDGET_H
diff --git a/src/assistant/assistant/helpenginewrapper.cpp b/src/assistant/assistant/helpenginewrapper.cpp
index 78bca7240..98a392e6b 100644
--- a/src/assistant/assistant/helpenginewrapper.cpp
+++ b/src/assistant/assistant/helpenginewrapper.cpp
@@ -1,41 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "tracer.h"
#include "helpenginewrapper.h"
#include "../shared/collectionconfiguration.h"
-#include "../help/qhelpengine_p.h"
#include <QtCore/QDateTime>
#include <QtCore/QFileInfo>
#include <QtCore/QFileSystemWatcher>
-#include <QtCore/QPair>
-#include <QtCore/QSharedPointer>
#include <QtCore/QTimer>
#include <QtHelp/QHelpContentModel>
#include <QtHelp/QHelpEngine>
@@ -44,25 +16,29 @@
#include <QtHelp/QHelpLink>
#include <QtHelp/QHelpSearchEngine>
+#include <map>
+#include <memory>
+
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace {
- const QString AppFontKey(QLatin1String("appFont"));
- const QString AppWritingSystemKey(QLatin1String("appWritingSystem"));
- const QString BookmarksKey(QLatin1String("Bookmarks"));
- const QString BrowserFontKey(QLatin1String("browserFont"));
- const QString BrowserWritingSystemKey(QLatin1String("browserWritingSystem"));
- const QString HomePageKey(QLatin1String("homepage"));
- const QString MainWindowKey(QLatin1String("MainWindow"));
- const QString MainWindowGeometryKey(QLatin1String("MainWindowGeometry"));
- const QString SearchWasAttachedKey(QLatin1String("SearchWasAttached"));
- const QString StartOptionKey(QLatin1String("StartOption"));
- const QString UseAppFontKey(QLatin1String("useAppFont"));
- const QString UseBrowserFontKey(QLatin1String("useBrowserFont"));
- const QString VersionKey(QString(QLatin1String("qtVersion%1$$$%2")).
- arg(QLatin1String(QT_VERSION_STR)));
- const QString ShowTabsKey(QLatin1String("showTabs"));
- const QString TopicChooserGeometryKey(QLatin1String("TopicChooserGeometry"));
+ const QString AppFontKey("appFont"_L1);
+ const QString AppWritingSystemKey("appWritingSystem"_L1);
+ const QString BookmarksKey("Bookmarks"_L1);
+ const QString BrowserFontKey("browserFont"_L1);
+ const QString BrowserWritingSystemKey("browserWritingSystem"_L1);
+ const QString HomePageKey("homepage"_L1);
+ const QString MainWindowKey("MainWindow"_L1);
+ const QString MainWindowGeometryKey("MainWindowGeometry"_L1);
+ const QString SearchWasAttachedKey("SearchWasAttached"_L1);
+ const QString StartOptionKey("StartOption"_L1);
+ const QString UseAppFontKey("useAppFont"_L1);
+ const QString UseBrowserFontKey("useBrowserFont"_L1);
+ const QString VersionKey("qtVersion%1$$$%2"_L1.arg(QLatin1StringView(QT_VERSION_STR)));
+ const QString ShowTabsKey("showTabs"_L1);
+ const QString TopicChooserGeometryKey("TopicChooserGeometry"_L1);
} // anonymous namespace
class TimeoutForwarder : public QObject
@@ -101,12 +77,20 @@ private:
QHelpEngine * const m_helpEngine;
QFileSystemWatcher * const m_qchWatcher;
- typedef QPair<QDateTime, QSharedPointer<TimeoutForwarder> > RecentSignal;
- QMap<QString, RecentSignal> m_recentQchUpdates;
+ struct RecentSignal {
+ QDateTime timestamp;
+ std::unique_ptr<TimeoutForwarder> forwarder;
+ };
+ std::map<QString, RecentSignal> m_recentQchUpdates;
};
HelpEngineWrapper *HelpEngineWrapper::helpEngineWrapper = nullptr;
+HelpEngineWrapper &HelpEngineWrapper::instance()
+{
+ return instance({});
+}
+
HelpEngineWrapper &HelpEngineWrapper::instance(const QString &collectionFile)
{
TRACE_OBJ
@@ -698,9 +682,9 @@ HelpEngineWrapperPrivate::HelpEngineWrapperPrivate(const QString &collectionFile
m_qchWatcher(new QFileSystemWatcher(this))
{
TRACE_OBJ
- initFileSystemWatchers();
m_helpEngine->setReadOnly(false);
m_helpEngine->setUsesFilterEngine(true);
+ initFileSystemWatchers();
}
void HelpEngineWrapperPrivate::initFileSystemWatchers()
@@ -723,8 +707,8 @@ void HelpEngineWrapperPrivate::qchFileChanged(const QString &fileName)
void HelpEngineWrapperPrivate::checkDocFilesWatched()
{
TRACE_OBJ
- const int watchedFilesCount = m_qchWatcher->files().count();
- const int docFilesCount = m_helpEngine->registeredDocumentations().count();
+ const int watchedFilesCount = m_qchWatcher->files().size();
+ const int docFilesCount = m_helpEngine->registeredDocumentations().size();
if (watchedFilesCount != docFilesCount) {
qWarning("Strange: Have %d docs, but %d are being watched",
watchedFilesCount, docFilesCount);
@@ -753,7 +737,7 @@ void HelpEngineWrapperPrivate::qchFileChanged(const QString &fileName,
* signal more than once.
*/
if (ns.isEmpty()) {
- m_recentQchUpdates.remove(fileName);
+ m_recentQchUpdates.erase(fileName);
return;
}
@@ -764,23 +748,26 @@ void HelpEngineWrapperPrivate::qchFileChanged(const QString &fileName,
*/
const auto &it = m_recentQchUpdates.find(fileName);
- const QDateTime &now = QDateTime::currentDateTime();
+ const QDateTime now = QDateTime::currentDateTimeUtc();
// Case 1: This is the first recent signal for the file.
if (it == m_recentQchUpdates.end()) {
- QSharedPointer<TimeoutForwarder> forwarder(new TimeoutForwarder(fileName));
- m_recentQchUpdates.insert(fileName, RecentSignal(now, forwarder));
- QTimer::singleShot(UpdateGracePeriod, forwarder.data(),
+ auto forwarder = std::make_unique<TimeoutForwarder>(fileName);
+ QTimer::singleShot(UpdateGracePeriod, forwarder.get(),
&TimeoutForwarder::forward);
+ m_recentQchUpdates.emplace(fileName,
+ RecentSignal{std::move(now), std::move(forwarder)});
return;
}
+ auto &[key, entry] = *it;
+
// Case 2: The last signal for this file has not expired yet.
- if (it.value().first > now.addMSecs(-UpdateGracePeriod)) {
+ if (entry.timestamp > now.addMSecs(-UpdateGracePeriod)) {
if (!fromTimeout)
- it.value().first = now;
+ entry.timestamp = now;
else
- QTimer::singleShot(UpdateGracePeriod, it.value().second.data(),
+ QTimer::singleShot(UpdateGracePeriod, entry.forwarder.get(),
&TimeoutForwarder::forward);
return;
}
diff --git a/src/assistant/assistant/helpenginewrapper.h b/src/assistant/assistant/helpenginewrapper.h
index e43abec92..f0e7b84aa 100644
--- a/src/assistant/assistant/helpenginewrapper.h
+++ b/src/assistant/assistant/helpenginewrapper.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef HELPENGINEWRAPPER_H
#define HELPENGINEWRAPPER_H
@@ -65,7 +40,8 @@ class HelpEngineWrapper : public QObject
Q_DISABLE_COPY(HelpEngineWrapper)
friend class TimeoutForwarder;
public:
- static HelpEngineWrapper &instance(const QString &collectionFile = QString());
+ static HelpEngineWrapper &instance();
+ static HelpEngineWrapper &instance(const QString &collectionFile);
static void removeInstance();
// Forwarded help engine member functions, possibly enriched.
diff --git a/src/assistant/assistant/helpviewer.cpp b/src/assistant/assistant/helpviewer.cpp
index 889b0e983..489a83918 100644
--- a/src/assistant/assistant/helpviewer.cpp
+++ b/src/assistant/assistant/helpviewer.cpp
@@ -1,62 +1,37 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "helpviewer.h"
-#include "helpviewer_p.h"
+#include "helpviewerimpl.h"
#include "helpenginewrapper.h"
#include "tracer.h"
-#include <QtCore/QCoreApplication>
#include <QtCore/QFileInfo>
#include <QtCore/QStringBuilder>
#include <QtCore/QTemporaryFile>
-#include <QtCore/QUrl>
#include <QtGui/QDesktopServices>
-#include <QtGui/QMouseEvent>
+#if QT_CONFIG(clipboard)
+#include <QtGui/QClipboard>
+#endif
+#include <QtGui/QGuiApplication>
+#include <QtGui/QWheelEvent>
+
+#include <QtWidgets/QScrollBar>
+#include <QtWidgets/QVBoxLayout>
#include <QtHelp/QHelpEngineCore>
-QT_BEGIN_NAMESPACE
+#include <qlitehtmlwidget.h>
-const QString HelpViewer::AboutBlank =
- QCoreApplication::translate("HelpViewer", "<title>about:blank</title>");
+QT_BEGIN_NAMESPACE
-const QString HelpViewer::LocalHelpFile = QLatin1String("qthelp://"
- "org.qt-project.assistantinternal-1.0.0/assistant/assistant-quick-guide.html");
+using namespace Qt::StringLiterals;
-const QString HelpViewer::PageNotFoundMessage =
- QCoreApplication::translate("HelpViewer", "<title>Error 404...</title><div "
- "align=\"center\"><br><br><h1>The page could not be found.</h1><br><h3>'%1'"
- "</h3></div>");
+const int kMaxHistoryItems = 20;
-struct ExtensionMap {
+const struct ExtensionMap {
const char *extension;
const char *mimeType;
} extensionMap[] = {
@@ -93,22 +68,302 @@ struct ExtensionMap {
{ nullptr, nullptr }
};
+static QByteArray getData(const QUrl &url)
+{
+ // TODO: this is just a hack for Qt documentation
+ // which decides to use a simpler CSS if the viewer does not have JavaScript
+ // which was a hack to decide if we are viewing in QTextBrowser or QtWebEngine et al
+ QUrl actualUrl = url;
+ QString path = url.path(QUrl::FullyEncoded);
+ static const char simpleCss[] = "/offline-simple.css";
+ if (path.endsWith(simpleCss)) {
+ path.replace(simpleCss, "/offline.css");
+ actualUrl.setPath(path);
+ }
+
+ if (actualUrl.isValid())
+ return HelpEngineWrapper::instance().fileData(actualUrl);
+
+ const bool isAbout = (actualUrl.toString() == "about:blank"_L1);
+ return isAbout ? HelpViewerImpl::AboutBlank.toUtf8()
+ : HelpViewerImpl::PageNotFoundMessage.arg(url.toString()).toUtf8();
+}
+
+class HelpViewerPrivate
+{
+public:
+ struct HistoryItem
+ {
+ QUrl url;
+ QString title;
+ int vscroll;
+ };
+ HistoryItem currentHistoryItem() const;
+ void setSourceInternal(const QUrl &url, int *vscroll = nullptr, bool reload = false);
+ void incrementZoom(int steps);
+ void applyZoom(int percentage);
+
+ HelpViewer *q = nullptr;
+ QLiteHtmlWidget *m_viewer = nullptr;
+ std::vector<HistoryItem> m_backItems;
+ std::vector<HistoryItem> m_forwardItems;
+ int m_fontZoom = 100; // zoom percentage
+};
+
+HelpViewerPrivate::HistoryItem HelpViewerPrivate::currentHistoryItem() const
+{
+ return { m_viewer->url(), m_viewer->title(), m_viewer->verticalScrollBar()->value() };
+}
+
+void HelpViewerPrivate::setSourceInternal(const QUrl &url, int *vscroll, bool reload)
+{
+ QGuiApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+
+ const bool isHelp = (url.toString() == "help"_L1);
+ const QUrl resolvedUrl = (isHelp ? HelpViewerImpl::LocalHelpFile
+ : HelpEngineWrapper::instance().findFile(url));
+
+ QUrl currentUrlWithoutFragment = m_viewer->url();
+ currentUrlWithoutFragment.setFragment({});
+ QUrl newUrlWithoutFragment = resolvedUrl;
+ newUrlWithoutFragment.setFragment({});
+
+ m_viewer->setUrl(resolvedUrl);
+ if (currentUrlWithoutFragment != newUrlWithoutFragment || reload)
+ m_viewer->setHtml(QString::fromUtf8(getData(resolvedUrl)));
+ if (vscroll)
+ m_viewer->verticalScrollBar()->setValue(*vscroll);
+ else
+ m_viewer->scrollToAnchor(resolvedUrl.fragment(QUrl::FullyEncoded));
+
+ QGuiApplication::restoreOverrideCursor();
+
+ emit q->sourceChanged(q->source());
+ emit q->loadFinished();
+ emit q->titleChanged();
+}
+
+void HelpViewerPrivate::incrementZoom(int steps)
+{
+ const int incrementPercentage = 10 * steps; // 10 percent increase by single step
+ const int previousZoom = m_fontZoom;
+ applyZoom(previousZoom + incrementPercentage);
+}
+
+void HelpViewerPrivate::applyZoom(int percentage)
+{
+ const int newZoom = qBound(10, percentage, 300);
+ if (newZoom == m_fontZoom)
+ return;
+ m_fontZoom = newZoom;
+ m_viewer->setZoomFactor(newZoom / 100.0);
+}
+
+HelpViewer::HelpViewer(qreal zoom, QWidget *parent)
+ : QWidget(parent)
+ , d(new HelpViewerPrivate)
+{
+ auto layout = new QVBoxLayout;
+ d->q = this;
+ d->m_viewer = new QLiteHtmlWidget(this);
+ d->m_viewer->setResourceHandler([](const QUrl &url) { return getData(url); });
+ d->m_viewer->viewport()->installEventFilter(this);
+ const int zoomPercentage = zoom == 0 ? 100 : zoom * 100;
+ d->applyZoom(zoomPercentage);
+ connect(d->m_viewer, &QLiteHtmlWidget::linkClicked, this, &HelpViewer::setSource);
+ connect(d->m_viewer, &QLiteHtmlWidget::linkHighlighted, this, &HelpViewer::highlighted);
+#if QT_CONFIG(clipboard)
+ connect(d->m_viewer, &QLiteHtmlWidget::copyAvailable, this, &HelpViewer::copyAvailable);
+#endif
+ setLayout(layout);
+ layout->setContentsMargins(0, 0, 0, 0);
+ layout->addWidget(d->m_viewer, 10);
+
+ // Make docs' contents visible in dark theme
+ QPalette p = palette();
+ p.setColor(QPalette::Inactive, QPalette::Highlight,
+ p.color(QPalette::Active, QPalette::Highlight));
+ p.setColor(QPalette::Inactive, QPalette::HighlightedText,
+ p.color(QPalette::Active, QPalette::HighlightedText));
+ p.setColor(QPalette::Base, Qt::white);
+ p.setColor(QPalette::Text, Qt::black);
+ setPalette(p);
+}
+
HelpViewer::~HelpViewer()
{
- TRACE_OBJ
delete d;
}
+QFont HelpViewer::viewerFont() const
+{
+ return d->m_viewer->defaultFont();
+}
+
+void HelpViewer::setViewerFont(const QFont &font)
+{
+ d->m_viewer->setDefaultFont(font);
+}
+
+void HelpViewer::scaleUp()
+{
+ d->incrementZoom(1);
+}
+
+void HelpViewer::scaleDown()
+{
+ d->incrementZoom(-1);
+}
+
+void HelpViewer::resetScale()
+{
+ d->applyZoom(100);
+}
+
+qreal HelpViewer::scale() const
+{
+ return d->m_viewer->zoomFactor();
+}
+
+QString HelpViewer::title() const
+{
+ return d->m_viewer->title();
+}
+
+QUrl HelpViewer::source() const
+{
+ return d->m_viewer->url();
+}
+
+void HelpViewer::reload()
+{
+ doSetSource(source(), true);
+}
+
+void HelpViewer::setSource(const QUrl &url)
+{
+ doSetSource(url, false);
+}
+
+void HelpViewer::doSetSource(const QUrl &url, bool reload)
+{
+ if (launchWithExternalApp(url))
+ return;
+
+ d->m_forwardItems.clear();
+ emit forwardAvailable(false);
+ if (d->m_viewer->url().isValid()) {
+ d->m_backItems.push_back(d->currentHistoryItem());
+ while (d->m_backItems.size() > kMaxHistoryItems) // this should trigger only once anyhow
+ d->m_backItems.erase(d->m_backItems.begin());
+ emit backwardAvailable(true);
+ }
+
+ d->setSourceInternal(url, nullptr, reload);
+}
+
+void HelpViewer::print(QPagedPaintDevice *printer)
+{
+ Q_UNUSED(printer);
+ // TODO: implement me
+}
+
+QString HelpViewer::selectedText() const
+{
+ return d->m_viewer->selectedText();
+}
+
+bool HelpViewer::isForwardAvailable() const
+{
+ return !d->m_forwardItems.empty();
+}
+
+bool HelpViewer::isBackwardAvailable() const
+{
+ return !d->m_backItems.empty();
+}
+
+static QTextDocument::FindFlags textDocumentFlagsForFindFlags(HelpViewer::FindFlags flags)
+{
+ QTextDocument::FindFlags textDocFlags;
+ if (flags & HelpViewer::FindBackward)
+ textDocFlags |= QTextDocument::FindBackward;
+ if (flags & HelpViewer::FindCaseSensitively)
+ textDocFlags |= QTextDocument::FindCaseSensitively;
+ return textDocFlags;
+}
+
+bool HelpViewer::findText(const QString &text, FindFlags flags, bool incremental, bool fromSearch)
+{
+ Q_UNUSED(fromSearch);
+ return d->m_viewer->findText(text, textDocumentFlagsForFindFlags(flags), incremental);
+}
+
+#if QT_CONFIG(clipboard)
+void HelpViewer::copy()
+{
+ QGuiApplication::clipboard()->setText(selectedText());
+}
+#endif
+
+void HelpViewer::home()
+{
+ setSource(HelpEngineWrapper::instance().homePage());
+}
+
+void HelpViewer::forward()
+{
+ HelpViewerPrivate::HistoryItem nextItem = d->currentHistoryItem();
+ if (d->m_forwardItems.empty())
+ return;
+ d->m_backItems.push_back(nextItem);
+ nextItem = d->m_forwardItems.front();
+ d->m_forwardItems.erase(d->m_forwardItems.begin());
+
+ emit backwardAvailable(isBackwardAvailable());
+ emit forwardAvailable(isForwardAvailable());
+ d->setSourceInternal(nextItem.url, &nextItem.vscroll);
+}
+
+void HelpViewer::backward()
+{
+ HelpViewerPrivate::HistoryItem previousItem = d->currentHistoryItem();
+ if (d->m_backItems.empty())
+ return;
+ d->m_forwardItems.insert(d->m_forwardItems.begin(), previousItem);
+ previousItem = d->m_backItems.back();
+ d->m_backItems.pop_back();
+
+ emit backwardAvailable(isBackwardAvailable());
+ emit forwardAvailable(isForwardAvailable());
+ d->setSourceInternal(previousItem.url, &previousItem.vscroll);
+}
+
+bool HelpViewer::eventFilter(QObject *src, QEvent *event)
+{
+ if (event->type() == QEvent::Wheel) {
+ auto we = static_cast<QWheelEvent *>(event);
+ if (we->modifiers() == Qt::ControlModifier) {
+ we->accept();
+ const int deltaY = we->angleDelta().y();
+ if (deltaY != 0)
+ d->incrementZoom(deltaY / 120);
+ return true;
+ }
+ }
+ return QWidget::eventFilter(src, event);
+}
+
bool HelpViewer::isLocalUrl(const QUrl &url)
{
TRACE_OBJ
const QString &scheme = url.scheme();
return scheme.isEmpty()
- || scheme == QLatin1String("file")
- || scheme == QLatin1String("qrc")
- || scheme == QLatin1String("data")
- || scheme == QLatin1String("qthelp")
- || scheme == QLatin1String("about");
+ || scheme == "file"_L1
+ || scheme == "qrc"_L1
+ || scheme == "data"_L1
+ || scheme == "qthelp"_L1
+ || scheme == "about"_L1;
}
bool HelpViewer::canOpenPage(const QString &path)
@@ -121,16 +376,16 @@ QString HelpViewer::mimeFromUrl(const QUrl &url)
{
TRACE_OBJ
const QString &path = url.path();
- const int index = path.lastIndexOf(QLatin1Char('.'));
+ const int index = path.lastIndexOf(u'.');
const QByteArray &ext = path.mid(index).toUtf8().toLower();
const ExtensionMap *e = extensionMap;
while (e->extension) {
if (ext == e->extension)
- return QLatin1String(e->mimeType);
+ return QLatin1StringView(e->mimeType);
++e;
}
- return QLatin1String("application/octet-stream");
+ return "application/octet-stream"_L1;
}
bool HelpViewer::launchWithExternalApp(const QUrl &url)
@@ -149,8 +404,7 @@ bool HelpViewer::launchWithExternalApp(const QUrl &url)
return false;
const QString &extension = QFileInfo(path).completeSuffix();
- QFile actualTmpFile(tmpTmpFile.fileName() % QLatin1String(".")
- % extension);
+ QFile actualTmpFile(tmpTmpFile.fileName() % "."_L1 % extension);
if (!actualTmpFile.open(QIODevice::ReadWrite | QIODevice::Truncate))
return false;
@@ -163,43 +417,4 @@ bool HelpViewer::launchWithExternalApp(const QUrl &url)
return QDesktopServices::openUrl(url);
}
-// -- public slots
-
-void HelpViewer::home()
-{
- TRACE_OBJ
- setSource(HelpEngineWrapper::instance().homePage());
-}
-
-// -- private slots
-
-void HelpViewer::setLoadStarted()
-{
- d->m_loadFinished = false;
-}
-
-void HelpViewer::setLoadFinished(bool ok)
-{
- d->m_loadFinished = ok;
- emit sourceChanged(source());
-}
-
-// -- private
-
-bool HelpViewer::handleForwardBackwardMouseButtons(QMouseEvent *event)
-{
- TRACE_OBJ
- if (event->button() == Qt::XButton1) {
- backward();
- return true;
- }
-
- if (event->button() == Qt::XButton2) {
- forward();
- return true;
- }
-
- return false;
-}
-
QT_END_NAMESPACE
diff --git a/src/assistant/assistant/helpviewer.h b/src/assistant/assistant/helpviewer.h
index 84ab800c3..b92638577 100644
--- a/src/assistant/assistant/helpviewer.h
+++ b/src/assistant/assistant/helpviewer.h
@@ -1,64 +1,24 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef HELPVIEWER_H
#define HELPVIEWER_H
#include <QtCore/qglobal.h>
-#include <QtCore/QString>
#include <QtCore/QUrl>
-#include <QtCore/QVariant>
-#include <QtGui/QAction>
#include <QtGui/QFont>
+#include <QtGui/QTextDocument>
-#if defined(BROWSER_QTWEBKIT)
-# include <QWebView>
-#elif defined(BROWSER_QTEXTBROWSER)
-# include <QtWidgets/QTextBrowser>
-#endif
+#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
-class HelpEngineWrapper;
+class HelpViewerPrivate;
-#if defined(BROWSER_QTWEBKIT)
-#define TEXTBROWSER_OVERRIDE
-class HelpViewer : public QWebView
-#elif defined(BROWSER_QTEXTBROWSER)
-#define TEXTBROWSER_OVERRIDE override
-class HelpViewer : public QTextBrowser
-#endif
+class HelpViewer : public QWidget
{
Q_OBJECT
- class HelpViewerPrivate;
- Q_DISABLE_COPY(HelpViewer)
-
public:
enum FindFlag {
FindBackward = 0x01,
@@ -79,14 +39,12 @@ public:
qreal scale() const;
QString title() const;
- void setTitle(const QString &title);
QUrl source() const;
-#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
- void setSource(const QUrl &url) TEXTBROWSER_OVERRIDE;
-#else
- void doSetSource(const QUrl &url, QTextDocument::ResourceType type) TEXTBROWSER_OVERRIDE;
-#endif
+ void reload();
+ void setSource(const QUrl &url);
+
+ void print(QPagedPaintDevice *printer);
QString selectedText() const;
bool isForwardAvailable() const;
@@ -95,64 +53,37 @@ public:
bool findText(const QString &text, FindFlags flags, bool incremental,
bool fromSearch);
- static const QString AboutBlank;
- static const QString LocalHelpFile;
- static const QString PageNotFoundMessage;
-
static bool isLocalUrl(const QUrl &url);
static bool canOpenPage(const QString &url);
static QString mimeFromUrl(const QUrl &url);
static bool launchWithExternalApp(const QUrl &url);
+ // implementation detail, not a part of the interface
+ bool eventFilter(QObject *src, QEvent *event) override;
+
public slots:
#if QT_CONFIG(clipboard)
void copy();
#endif
- void home() TEXTBROWSER_OVERRIDE;
-
- void forward() TEXTBROWSER_OVERRIDE;
- void backward() TEXTBROWSER_OVERRIDE;
+ void home();
+ void forward();
+ void backward();
signals:
void titleChanged();
-#if !defined(BROWSER_QTEXTBROWSER)
- // Provide signals present in QTextBrowser, QTextEdit for browsers that do not inherit QTextBrowser
void copyAvailable(bool yes);
void sourceChanged(const QUrl &url);
void forwardAvailable(bool enabled);
void backwardAvailable(bool enabled);
void highlighted(const QUrl &link);
void printRequested();
-#elif !defined(BROWSER_QTWEBKIT)
- // Provide signals present in QWebView for browsers that do not inherit QWebView
- void loadStarted();
- void loadFinished(bool finished);
-#endif
-
-protected:
- void keyPressEvent(QKeyEvent *e) override;
- void wheelEvent(QWheelEvent *event) override;
- void mousePressEvent(QMouseEvent *event) override;
- void mouseReleaseEvent(QMouseEvent *event) override;
- void resizeEvent(QResizeEvent *e) override;
-
-private slots:
- void actionChanged();
- void setLoadStarted();
- void setLoadFinished(bool ok);
-
+ void loadFinished();
private:
- bool eventFilter(QObject *obj, QEvent *event) override;
- void contextMenuEvent(QContextMenuEvent *event) override;
- QVariant loadResource(int type, const QUrl &name) TEXTBROWSER_OVERRIDE;
- bool handleForwardBackwardMouseButtons(QMouseEvent *e);
- void scrollToTextPosition(int position);
+ void doSetSource(const QUrl &url, bool reload);
-private:
HelpViewerPrivate *d;
};
QT_END_NAMESPACE
-Q_DECLARE_METATYPE(HelpViewer*)
#endif // HELPVIEWER_H
diff --git a/src/assistant/assistant/helpviewer_p.h b/src/assistant/assistant/helpviewer_p.h
deleted file mode 100644
index 8a85fdcea..000000000
--- a/src/assistant/assistant/helpviewer_p.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef HELPVIEWERPRIVATE_H
-#define HELPVIEWERPRIVATE_H
-
-#include "centralwidget.h"
-#include "helpviewer.h"
-#include "openpagesmanager.h"
-
-#include <QtCore/QObject>
-#if defined(BROWSER_QTEXTBROWSER)
-# include <QtWidgets/QTextBrowser>
-#elif defined(BROWSER_QTWEBKIT)
-# include <QtGui/QGuiApplication>
-# include <QtGui/QScreen>
-#endif // BROWSER_QTWEBKIT
-
-QT_BEGIN_NAMESPACE
-
-class HelpViewer::HelpViewerPrivate : public QObject
-{
- Q_OBJECT
-
-public:
-#if defined(BROWSER_QTEXTBROWSER)
- HelpViewerPrivate(int zoom)
- : zoomCount(zoom)
- { }
-#elif defined(BROWSER_QTWEBKIT)
- HelpViewerPrivate()
- : m_loadFinished(false)
- {
- // The web uses 96dpi by default on the web to preserve the font size across platforms, but
- // since we control the content for the documentation, we want the system DPI to be used.
- // - OS X reports 72dpi but doesn't allow changing the DPI, ignore anything below a 1.0 ratio to handle this.
- // - On Windows and Linux don't zoom the default web 96dpi below a 1.25 ratio to avoid
- // filtered images in the doc unless the font readability difference is considerable.
- webDpiRatio = QGuiApplication::primaryScreen()->logicalDotsPerInch() / 96.;
- if (webDpiRatio < 1.25)
- webDpiRatio = 1.0;
- }
-#endif // BROWSER_QTWEBKIT
-
-#if defined(BROWSER_QTEXTBROWSER)
- bool hasAnchorAt(QTextBrowser *browser, const QPoint& pos)
- {
- lastAnchor = browser->anchorAt(pos);
- if (lastAnchor.isEmpty())
- return false;
-
- lastAnchor = browser->source().resolved(lastAnchor).toString();
- if (lastAnchor.at(0) == QLatin1Char('#')) {
- QString src = browser->source().toString();
- int hsh = src.indexOf(QLatin1Char('#'));
- lastAnchor = (hsh >= 0 ? src.left(hsh) : src) + lastAnchor;
- }
- return true;
- }
-
-public slots:
- void openLink()
- {
- doOpenLink(false);
- }
-
- void openLinkInNewPage()
- {
- doOpenLink(true);
- }
-
-public:
- QString lastAnchor;
- int zoomCount;
- bool forceFont = false;
-
-private:
-
- void doOpenLink(bool newPage)
- {
- if (lastAnchor.isEmpty())
- return;
- if (newPage)
- OpenPagesManager::instance()->createPage(lastAnchor);
- else
- CentralWidget::instance()->setSource(lastAnchor);
- lastAnchor.clear();
- }
-
-#elif defined(BROWSER_QTWEBKIT)
- qreal webDpiRatio;
-#endif // BROWSER_QTWEBKIT
-
-public:
- bool m_loadFinished = false;
-
-};
-
-QT_END_NAMESPACE
-
-#endif // HELPVIEWERPRIVATE_H
diff --git a/src/assistant/assistant/helpviewer_qtb.cpp b/src/assistant/assistant/helpviewer_qtb.cpp
deleted file mode 100644
index e8eb27338..000000000
--- a/src/assistant/assistant/helpviewer_qtb.cpp
+++ /dev/null
@@ -1,412 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "helpviewer.h"
-
-#include "globalactions.h"
-#include "helpenginewrapper.h"
-#include "helpviewer_p.h"
-#include "openpagesmanager.h"
-#include "tracer.h"
-
-#include <QtCore/QStringBuilder>
-
-#include <QtGui/QContextMenuEvent>
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QScrollBar>
-#if QT_CONFIG(clipboard)
-#include <QtGui/QClipboard>
-#endif
-#include <QtWidgets/QApplication>
-
-QT_BEGIN_NAMESPACE
-
-HelpViewer::HelpViewer(qreal zoom, QWidget *parent)
- : QTextBrowser(parent)
- , d(new HelpViewerPrivate(zoom))
-{
- TRACE_OBJ
- QPalette p = palette();
- p.setColor(QPalette::Inactive, QPalette::Highlight,
- p.color(QPalette::Active, QPalette::Highlight));
- p.setColor(QPalette::Inactive, QPalette::HighlightedText,
- p.color(QPalette::Active, QPalette::HighlightedText));
- setPalette(p);
-
- installEventFilter(this);
- document()->setDocumentMargin(8);
-
- QFont font = viewerFont();
- font.setPointSize(int(font.pointSize() + zoom));
- setViewerFont(font);
-
- connect(this, &QTextBrowser::sourceChanged, this, &HelpViewer::titleChanged);
- connect(this, &HelpViewer::loadFinished, this, &HelpViewer::setLoadFinished);
-}
-
-QFont HelpViewer::viewerFont() const
-{
- TRACE_OBJ
- if (HelpEngineWrapper::instance().usesBrowserFont())
- return HelpEngineWrapper::instance().browserFont();
- return qApp->font();
-}
-
-void HelpViewer::setViewerFont(const QFont &newFont)
-{
- TRACE_OBJ
- if (font() != newFont) {
- d->forceFont = true;
- setFont(newFont);
- d->forceFont = false;
- }
-}
-
-void HelpViewer::scaleUp()
-{
- TRACE_OBJ
- if (d->zoomCount < 10) {
- d->zoomCount++;
- d->forceFont = true;
- zoomIn();
- d->forceFont = false;
- }
-}
-
-void HelpViewer::scaleDown()
-{
- TRACE_OBJ
- if (d->zoomCount > -5) {
- d->zoomCount--;
- d->forceFont = true;
- zoomOut();
- d->forceFont = false;
- }
-}
-
-void HelpViewer::resetScale()
-{
- TRACE_OBJ
- if (d->zoomCount != 0) {
- d->forceFont = true;
- zoomOut(d->zoomCount);
- d->forceFont = false;
- }
- d->zoomCount = 0;
-}
-
-qreal HelpViewer::scale() const
-{
- TRACE_OBJ
- return d->zoomCount;
-}
-
-QString HelpViewer::title() const
-{
- TRACE_OBJ
- return documentTitle();
-}
-
-void HelpViewer::setTitle(const QString &title)
-{
- TRACE_OBJ
- setDocumentTitle(title);
-}
-
-QUrl HelpViewer::source() const
-{
- TRACE_OBJ
- return QTextBrowser::source();
-}
-
-#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
-void HelpViewer::setSource(const QUrl &url)
-#else
-void HelpViewer::doSetSource(const QUrl &url, QTextDocument::ResourceType type)
-#endif
-{
- TRACE_OBJ
-#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
- Q_UNUSED(type);
-#endif
- if (launchWithExternalApp(url))
- return;
-
- emit loadStarted();
- bool helpOrAbout = (url.toString() == QLatin1String("help"));
- const QUrl resolvedUrl = (helpOrAbout ? LocalHelpFile : HelpEngineWrapper::instance().findFile(url));
-
- QTextBrowser::doSetSource(resolvedUrl, type);
-
- if (!resolvedUrl.isValid()) {
- helpOrAbout = (url.toString() == QLatin1String("about:blank"));
- setHtml(helpOrAbout ? AboutBlank : PageNotFoundMessage.arg(url.toString()));
- }
- emit loadFinished(true);
-}
-
-QString HelpViewer::selectedText() const
-{
- TRACE_OBJ
- return textCursor().selectedText();
-}
-
-bool HelpViewer::isForwardAvailable() const
-{
- TRACE_OBJ
- return QTextBrowser::isForwardAvailable();
-}
-
-bool HelpViewer::isBackwardAvailable() const
-{
- TRACE_OBJ
- return QTextBrowser::isBackwardAvailable();
-}
-
-bool HelpViewer::findText(const QString &text, FindFlags flags, bool incremental,
- bool fromSearch)
-{
- TRACE_OBJ
- QTextDocument *doc = document();
- QTextCursor cursor = textCursor();
- if (!doc || cursor.isNull())
- return false;
-
- const int position = cursor.selectionStart();
- if (incremental)
- cursor.setPosition(position);
-
- QTextDocument::FindFlags textDocFlags;
- if (flags & HelpViewer::FindBackward)
- textDocFlags |= QTextDocument::FindBackward;
- if (flags & HelpViewer::FindCaseSensitively)
- textDocFlags |= QTextDocument::FindCaseSensitively;
-
- QTextCursor found = doc->find(text, cursor, textDocFlags);
- if (found.isNull()) {
- if ((flags & HelpViewer::FindBackward) == 0)
- cursor.movePosition(QTextCursor::Start);
- else
- cursor.movePosition(QTextCursor::End);
- found = doc->find(text, cursor, textDocFlags);
- }
-
- if (fromSearch) {
- cursor.beginEditBlock();
- viewport()->setUpdatesEnabled(false);
-
- QTextCharFormat marker;
- marker.setForeground(Qt::red);
- cursor.movePosition(QTextCursor::Start);
- setTextCursor(cursor);
-
- while (find(text)) {
- QTextCursor hit = textCursor();
- hit.mergeCharFormat(marker);
- }
-
- viewport()->setUpdatesEnabled(true);
- cursor.endEditBlock();
- }
-
- bool cursorIsNull = found.isNull();
- if (cursorIsNull) {
- found = textCursor();
- found.setPosition(position);
- }
- setTextCursor(found);
- return !cursorIsNull;
-}
-
-// -- public slots
-
-#if QT_CONFIG(clipboard)
-void HelpViewer::copy()
-{
- TRACE_OBJ
- QTextBrowser::copy();
-}
-#endif
-
-void HelpViewer::forward()
-{
- TRACE_OBJ
- QTextBrowser::forward();
-}
-
-void HelpViewer::backward()
-{
- TRACE_OBJ
- QTextBrowser::backward();
-}
-
-// -- protected
-
-void HelpViewer::keyPressEvent(QKeyEvent *e)
-{
- TRACE_OBJ
- if ((e->key() == Qt::Key_Home && e->modifiers() != Qt::NoModifier)
- || (e->key() == Qt::Key_End && e->modifiers() != Qt::NoModifier)) {
- QKeyEvent* event = new QKeyEvent(e->type(), e->key(), Qt::NoModifier,
- e->text(), e->isAutoRepeat(), e->count());
- e = event;
- }
- QTextBrowser::keyPressEvent(e);
-}
-
-
-void HelpViewer::wheelEvent(QWheelEvent *e)
-{
- TRACE_OBJ
- if (e->modifiers() == Qt::ControlModifier) {
- e->accept();
- e->angleDelta().y() > 0 ? scaleUp() : scaleDown();
- } else {
- QTextBrowser::wheelEvent(e);
- }
-}
-
-void HelpViewer::mousePressEvent(QMouseEvent *e)
-{
- TRACE_OBJ
-#ifdef Q_OS_LINUX
- if (handleForwardBackwardMouseButtons(e))
- return;
-#endif
-
- QTextBrowser::mousePressEvent(e);
-}
-
-void HelpViewer::mouseReleaseEvent(QMouseEvent *e)
-{
- TRACE_OBJ
-#ifndef Q_OS_LINUX
- if (handleForwardBackwardMouseButtons(e))
- return;
-#endif
-
- bool controlPressed = e->modifiers() & Qt::ControlModifier;
- if ((controlPressed && d->hasAnchorAt(this, e->pos())) ||
- (e->button() == Qt::MiddleButton && d->hasAnchorAt(this, e->pos()))) {
- d->openLinkInNewPage();
- return;
- }
-
- QTextBrowser::mouseReleaseEvent(e);
-}
-
-
-void HelpViewer::resizeEvent(QResizeEvent *e)
-{
- const int topTextPosition = cursorForPosition({width() / 2, 0}).position();
- QTextBrowser::resizeEvent(e);
- scrollToTextPosition(topTextPosition);
-}
-
-// -- private slots
-
-void HelpViewer::actionChanged()
-{
- // stub
- TRACE_OBJ
-}
-
-// -- private
-
-bool HelpViewer::eventFilter(QObject *obj, QEvent *event)
-{
- TRACE_OBJ
- if (event->type() == QEvent::FontChange && !d->forceFont)
- return true;
- return QTextBrowser::eventFilter(obj, event);
-}
-
-void HelpViewer::contextMenuEvent(QContextMenuEvent *event)
-{
- TRACE_OBJ
-
- QMenu menu(QString(), nullptr);
- QUrl link;
-#if QT_CONFIG(clipboard)
- QAction *copyAnchorAction = nullptr;
-#endif
- if (d->hasAnchorAt(this, event->pos())) {
- link = anchorAt(event->pos());
- if (link.isRelative())
- link = source().resolved(link);
- menu.addAction(tr("Open Link"), d, &HelpViewerPrivate::openLink);
- menu.addAction(tr("Open Link in New Tab\tCtrl+LMB"), d, &HelpViewerPrivate::openLinkInNewPage);
-
-#if QT_CONFIG(clipboard)
- if (!link.isEmpty() && link.isValid())
- copyAnchorAction = menu.addAction(tr("Copy &Link Location"));
-#endif
- } else if (!selectedText().isEmpty()) {
-#if QT_CONFIG(clipboard)
- menu.addAction(tr("Copy"), this, &HelpViewer::copy);
-#endif
- } else {
- menu.addAction(tr("Reload"), this, &HelpViewer::reload);
- }
-
-#if QT_CONFIG(clipboard)
- if (copyAnchorAction == menu.exec(event->globalPos()))
- QApplication::clipboard()->setText(link.toString());
-#endif
-}
-
-QVariant HelpViewer::loadResource(int type, const QUrl &name)
-{
- TRACE_OBJ
- QByteArray ba;
- if (type < 4) {
- const QUrl url = HelpEngineWrapper::instance().findFile(name);
- ba = HelpEngineWrapper::instance().fileData(url);
- if (url.toString().endsWith(QLatin1String(".svg"), Qt::CaseInsensitive)) {
- QImage image;
- image.loadFromData(ba, "svg");
- if (!image.isNull())
- return image;
- }
- }
- return ba;
-}
-
-
-void HelpViewer::scrollToTextPosition(int position)
-{
- QTextCursor tc(document());
- tc.setPosition(position);
- const int dy = cursorRect(tc).top();
- if (verticalScrollBar()) {
- verticalScrollBar()->setValue(
- std::min(verticalScrollBar()->value() + dy, verticalScrollBar()->maximum()));
- }
-}
-
-QT_END_NAMESPACE
diff --git a/src/assistant/assistant/helpviewer_qwv.cpp b/src/assistant/assistant/helpviewer_qwv.cpp
deleted file mode 100644
index 7ed073eb8..000000000
--- a/src/assistant/assistant/helpviewer_qwv.cpp
+++ /dev/null
@@ -1,395 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "helpviewer.h"
-#include "helpviewer_p.h"
-
-#include "centralwidget.h"
-#include "helpenginewrapper.h"
-#include "helpbrowsersupport.h"
-#include "openpagesmanager.h"
-#include "tracer.h"
-
-#include <QClipboard>
-#include <QtCore/QFileInfo>
-#include <QtCore/QString>
-#include <QtCore/QTimer>
-
-#include <QtWidgets/QApplication>
-#include <QtGui/QWheelEvent>
-
-#include <QtNetwork/QNetworkReply>
-
-QT_BEGIN_NAMESPACE
-
-// -- HelpPage
-
-class HelpPage : public QWebPage
-{
-public:
- HelpPage(QObject *parent);
-
-protected:
- virtual QWebPage *createWindow(QWebPage::WebWindowType);
- virtual void triggerAction(WebAction action, bool checked = false);
-
- virtual bool acceptNavigationRequest(QWebFrame *frame,
- const QNetworkRequest &request, NavigationType type);
-
-private:
- bool closeNewTabIfNeeded;
-
- friend class HelpViewer;
- QUrl m_loadingUrl;
- Qt::MouseButtons m_pressedButtons;
- Qt::KeyboardModifiers m_keyboardModifiers;
-};
-
-HelpPage::HelpPage(QObject *parent)
- : QWebPage(parent)
- , closeNewTabIfNeeded(false)
- , m_pressedButtons(Qt::NoButton)
- , m_keyboardModifiers(Qt::NoModifier)
-{
- TRACE_OBJ
-}
-
-QWebPage *HelpPage::createWindow(QWebPage::WebWindowType)
-{
- TRACE_OBJ
- HelpPage *newPage = static_cast<HelpPage *>(OpenPagesManager::instance()
- ->createBlankPage()->page());
- newPage->closeNewTabIfNeeded = closeNewTabIfNeeded;
- closeNewTabIfNeeded = false;
- return newPage;
-}
-
-void HelpPage::triggerAction(WebAction action, bool checked)
-{
- TRACE_OBJ
- switch (action) {
- case OpenLinkInNewWindow:
- closeNewTabIfNeeded = true;
- Q_FALLTHROUGH();
- default:
- QWebPage::triggerAction(action, checked);
- break;
- }
-
-#if QT_CONFIG(clipboard)
- if (action == CopyLinkToClipboard || action == CopyImageUrlToClipboard) {
- const QString link = QApplication::clipboard()->text();
- QApplication::clipboard()->setText(HelpEngineWrapper::instance().findFile(link).toString());
- }
-#endif
-}
-
-bool HelpPage::acceptNavigationRequest(QWebFrame *,
- const QNetworkRequest &request, QWebPage::NavigationType type)
-{
- TRACE_OBJ
- const bool closeNewTab = closeNewTabIfNeeded;
- closeNewTabIfNeeded = false;
-
- const QUrl &url = request.url();
- if (HelpViewer::launchWithExternalApp(url)) {
- if (closeNewTab)
- QMetaObject::invokeMethod(OpenPagesManager::instance(), "closeCurrentPage");
- return false;
- }
-
- if (type == QWebPage::NavigationTypeLinkClicked
- && (m_keyboardModifiers & Qt::ControlModifier
- || m_pressedButtons == Qt::MiddleButton)) {
- m_pressedButtons = Qt::NoButton;
- m_keyboardModifiers = Qt::NoModifier;
- OpenPagesManager::instance()->createPage(url);
- return false;
- }
-
- m_loadingUrl = url; // because of async page loading, we will hit some kind
- // of race condition while using a remote command, like a combination of
- // SetSource; SyncContent. SetSource would be called and SyncContents shortly
- // afterwards, but the page might not have finished loading and the old url
- // would be returned.
- return true;
-}
-
-// -- HelpViewer
-
-HelpViewer::HelpViewer(qreal zoom, QWidget *parent)
- : QWebView(parent)
- , d(new HelpViewerPrivate)
-{
- TRACE_OBJ
- setAcceptDrops(false);
- settings()->setAttribute(QWebSettings::JavaEnabled, false);
- settings()->setAttribute(QWebSettings::PluginsEnabled, false);
-
- setPage(new HelpPage(this));
- page()->setNetworkAccessManager(HelpBrowserSupport::createNetworkAccessManager(this));
-
- QAction* action = pageAction(QWebPage::OpenLinkInNewWindow);
- action->setText(tr("Open Link in New Page"));
-
- pageAction(QWebPage::DownloadLinkToDisk)->setVisible(false);
- pageAction(QWebPage::DownloadImageToDisk)->setVisible(false);
- pageAction(QWebPage::OpenImageInNewWindow)->setVisible(false);
-
- connect(pageAction(QWebPage::Copy), SIGNAL(changed()), this,
- SLOT(actionChanged()));
- connect(pageAction(QWebPage::Back), SIGNAL(changed()), this,
- SLOT(actionChanged()));
- connect(pageAction(QWebPage::Forward), SIGNAL(changed()), this,
- SLOT(actionChanged()));
- connect(page(), &QWebPage::linkHovered, this,
- [this] (const QString &link, const QString &, const QString &) {
- emit this->highlighted(QUrl(link));
- });
- connect(this, SIGNAL(urlChanged(QUrl)), this, SIGNAL(sourceChanged(QUrl)));
- connect(this, SIGNAL(loadStarted()), this, SLOT(setLoadStarted()));
- connect(this, SIGNAL(loadFinished(bool)), this, SLOT(setLoadFinished(bool)));
- connect(this, SIGNAL(titleChanged(QString)), this, SIGNAL(titleChanged()));
- connect(page(), SIGNAL(printRequested(QWebFrame*)), this, SIGNAL(printRequested()));
-
- setFont(viewerFont());
- setZoomFactor(d->webDpiRatio * (zoom == 0.0 ? 1.0 : zoom));
-}
-
-QFont HelpViewer::viewerFont() const
-{
- TRACE_OBJ
- if (HelpEngineWrapper::instance().usesBrowserFont())
- return HelpEngineWrapper::instance().browserFont();
-
- QWebSettings *webSettings = QWebSettings::globalSettings();
- return QFont(webSettings->fontFamily(QWebSettings::StandardFont),
- webSettings->fontSize(QWebSettings::DefaultFontSize));
-}
-
-void HelpViewer::setViewerFont(const QFont &font)
-{
- TRACE_OBJ
- QWebSettings *webSettings = settings();
- webSettings->setFontFamily(QWebSettings::StandardFont, font.family());
- webSettings->setFontSize(QWebSettings::DefaultFontSize, font.pointSize());
-}
-
-void HelpViewer::scaleUp()
-{
- TRACE_OBJ
- setZoomFactor(zoomFactor() + 0.1);
-}
-
-void HelpViewer::scaleDown()
-{
- TRACE_OBJ
- setZoomFactor(qMax(0.0, zoomFactor() - 0.1));
-}
-
-void HelpViewer::resetScale()
-{
- TRACE_OBJ
- setZoomFactor(d->webDpiRatio);
-}
-
-qreal HelpViewer::scale() const
-{
- TRACE_OBJ
- return zoomFactor() / d->webDpiRatio;
-}
-
-QString HelpViewer::title() const
-{
- TRACE_OBJ
- return QWebView::title();
-}
-
-void HelpViewer::setTitle(const QString &title)
-{
- TRACE_OBJ
- Q_UNUSED(title);
-}
-
-QUrl HelpViewer::source() const
-{
- TRACE_OBJ
- HelpPage *currentPage = static_cast<HelpPage*> (page());
- if (currentPage && !d->m_loadFinished) {
- // see HelpPage::acceptNavigationRequest(...)
- return currentPage->m_loadingUrl;
- }
- return url();
-}
-
-void HelpViewer::setSource(const QUrl &url)
-{
- TRACE_OBJ
- load(url.toString() == QLatin1String("help") ? LocalHelpFile : url);
-}
-
-QString HelpViewer::selectedText() const
-{
- TRACE_OBJ
- return QWebView::selectedText();
-}
-
-bool HelpViewer::isForwardAvailable() const
-{
- TRACE_OBJ
- return pageAction(QWebPage::Forward)->isEnabled();
-}
-
-bool HelpViewer::isBackwardAvailable() const
-{
- TRACE_OBJ
- return pageAction(QWebPage::Back)->isEnabled();
-}
-
-bool HelpViewer::findText(const QString &text, FindFlags flags, bool incremental,
- bool fromSearch)
-{
- TRACE_OBJ
- Q_UNUSED(incremental); Q_UNUSED(fromSearch);
- QWebPage::FindFlags options = QWebPage::FindWrapsAroundDocument;
- if (flags & FindBackward)
- options |= QWebPage::FindBackward;
- if (flags & FindCaseSensitively)
- options |= QWebPage::FindCaseSensitively;
-
- bool found = QWebView::findText(text, options);
- options = QWebPage::HighlightAllOccurrences;
- QWebView::findText(QString(), options); // clear first
- QWebView::findText(text, options); // force highlighting of all other matches
- return found;
-}
-
-// -- public slots
-
-#if QT_CONFIG(clipboard)
-void HelpViewer::copy()
-{
- TRACE_OBJ
- triggerPageAction(QWebPage::Copy);
-}
-#endif
-
-void HelpViewer::forward()
-{
- TRACE_OBJ
- QWebView::forward();
-}
-
-void HelpViewer::backward()
-{
- TRACE_OBJ
- back();
-}
-
-// -- protected
-
-void HelpViewer::keyPressEvent(QKeyEvent *e)
-{
- TRACE_OBJ
- // TODO: remove this once we support multiple keysequences per command
-#if QT_CONFIG(clipboard)
- if (e->key() == Qt::Key_Insert && e->modifiers() == Qt::CTRL) {
- if (!selectedText().isEmpty())
- copy();
- }
-#endif
- QWebView::keyPressEvent(e);
-}
-
-void HelpViewer::wheelEvent(QWheelEvent *event)
-{
- TRACE_OBJ
- if (event->modifiers()& Qt::ControlModifier) {
- event->accept();
- event->delta() > 0 ? scaleUp() : scaleDown();
- } else {
- QWebView::wheelEvent(event);
- }
-}
-
-void HelpViewer::mousePressEvent(QMouseEvent *event)
-{
- TRACE_OBJ
-#ifdef Q_OS_LINUX
- if (handleForwardBackwardMouseButtons(event))
- return;
-#endif
-
- if (HelpPage *currentPage = static_cast<HelpPage*> (page())) {
- currentPage->m_pressedButtons = event->buttons();
- currentPage->m_keyboardModifiers = event->modifiers();
- }
-
- QWebView::mousePressEvent(event);
-}
-
-void HelpViewer::mouseReleaseEvent(QMouseEvent *event)
-{
- TRACE_OBJ
-#ifndef Q_OS_LINUX
- if (handleForwardBackwardMouseButtons(event))
- return;
-#endif
-
- QWebView::mouseReleaseEvent(event);
-}
-
-// -- private slots
-
-void HelpViewer::actionChanged()
-{
- TRACE_OBJ
- QAction *a = qobject_cast<QAction *>(sender());
- if (a == pageAction(QWebPage::Copy))
- emit copyAvailable(a->isEnabled());
- else if (a == pageAction(QWebPage::Back))
- emit backwardAvailable(a->isEnabled());
- else if (a == pageAction(QWebPage::Forward))
- emit forwardAvailable(a->isEnabled());
-}
-
-// -- private
-
-bool HelpViewer::eventFilter(QObject *obj, QEvent *event)
-{
- TRACE_OBJ
- return QWebView::eventFilter(obj, event);
-}
-
-void HelpViewer::contextMenuEvent(QContextMenuEvent *event)
-{
- TRACE_OBJ
- QWebView::contextMenuEvent(event);
-}
-
-QT_END_NAMESPACE
diff --git a/src/assistant/assistant/helpviewerimpl.cpp b/src/assistant/assistant/helpviewerimpl.cpp
new file mode 100644
index 000000000..70c52827d
--- /dev/null
+++ b/src/assistant/assistant/helpviewerimpl.cpp
@@ -0,0 +1,68 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "helpviewerimpl.h"
+#include "helpviewerimpl_p.h"
+
+#include "helpenginewrapper.h"
+#include "tracer.h"
+
+#include <QtCore/QCoreApplication>
+
+#include <QtGui/QMouseEvent>
+
+QT_BEGIN_NAMESPACE
+
+const QString HelpViewerImpl::AboutBlank =
+ QCoreApplication::translate("HelpViewer", "<title>about:blank</title>");
+
+const QString HelpViewerImpl::LocalHelpFile =
+ "qthelp://org.qt-project.qtassistant.%1%2%3/qtassistant/assistant-quick-guide.html"_L1.arg(
+ QString::number(QT_VERSION_MAJOR), QString::number(QT_VERSION_MINOR),
+ QString::number(QT_VERSION_PATCH));
+
+const QString HelpViewerImpl::PageNotFoundMessage =
+ QCoreApplication::translate("HelpViewer", "<title>Error 404...</title><div "
+ "align=\"center\"><br><br><h1>The page could not be found.</h1><br><h3>'%1'"
+ "</h3></div>");
+
+HelpViewerImpl::~HelpViewerImpl()
+{
+ TRACE_OBJ
+ delete d;
+}
+
+// -- public slots
+
+void HelpViewerImpl::home()
+{
+ TRACE_OBJ
+ setSource(HelpEngineWrapper::instance().homePage());
+}
+
+// -- private slots
+
+void HelpViewerImpl::setLoadFinished()
+{
+ emit sourceChanged(source());
+}
+
+// -- private
+
+bool HelpViewerImpl::handleForwardBackwardMouseButtons(QMouseEvent *event)
+{
+ TRACE_OBJ
+ if (event->button() == Qt::XButton1) {
+ backward();
+ return true;
+ }
+
+ if (event->button() == Qt::XButton2) {
+ forward();
+ return true;
+ }
+
+ return false;
+}
+
+QT_END_NAMESPACE
diff --git a/src/assistant/assistant/helpviewerimpl.h b/src/assistant/assistant/helpviewerimpl.h
new file mode 100644
index 000000000..5bf2f92e4
--- /dev/null
+++ b/src/assistant/assistant/helpviewerimpl.h
@@ -0,0 +1,111 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef HELPVIEWERIMPL_H
+#define HELPVIEWERIMPL_H
+
+#include <QtCore/qglobal.h>
+#include <QtCore/QUrl>
+#include <QtCore/QVariant>
+
+#include <QtGui/QFont>
+
+#if defined(BROWSER_QTWEBKIT)
+# include <QWebView>
+#elif defined(BROWSER_QTEXTBROWSER)
+# include <QtWidgets/QTextBrowser>
+#endif
+
+#include "helpviewer.h"
+
+QT_BEGIN_NAMESPACE
+
+#if defined(BROWSER_QTWEBKIT)
+#define TEXTBROWSER_OVERRIDE
+class HelpViewerImpl : public QWebView
+#elif defined(BROWSER_QTEXTBROWSER)
+#define TEXTBROWSER_OVERRIDE override
+class HelpViewerImpl : public QTextBrowser
+#endif
+{
+ Q_OBJECT
+ class HelpViewerImplPrivate;
+
+public:
+ HelpViewerImpl(qreal zoom, QWidget *parent = nullptr);
+ ~HelpViewerImpl() override;
+
+ QFont viewerFont() const;
+ void setViewerFont(const QFont &font);
+
+ void scaleUp();
+ void scaleDown();
+
+ void resetScale();
+ qreal scale() const;
+
+ QString title() const;
+
+ QUrl source() const;
+ void doSetSource(const QUrl &url, QTextDocument::ResourceType type) TEXTBROWSER_OVERRIDE;
+
+ QString selectedText() const;
+ bool isForwardAvailable() const;
+ bool isBackwardAvailable() const;
+
+ bool findText(const QString &text, HelpViewer::FindFlags flags, bool incremental,
+ bool fromSearch);
+
+ static const QString AboutBlank;
+ static const QString LocalHelpFile;
+ static const QString PageNotFoundMessage;
+
+public slots:
+#if QT_CONFIG(clipboard)
+ void copy();
+#endif
+ void home() TEXTBROWSER_OVERRIDE;
+
+ void forward() TEXTBROWSER_OVERRIDE;
+ void backward() TEXTBROWSER_OVERRIDE;
+
+signals:
+ void titleChanged();
+#if !defined(BROWSER_QTEXTBROWSER)
+ // Provide signals present in QTextBrowser, QTextEdit for browsers that do not inherit QTextBrowser
+ void copyAvailable(bool yes);
+ void sourceChanged(const QUrl &url);
+ void forwardAvailable(bool enabled);
+ void backwardAvailable(bool enabled);
+ void highlighted(const QUrl &link);
+ void printRequested();
+#elif !defined(BROWSER_QTWEBKIT)
+ // Provide signals present in QWebView for browsers that do not inherit QWebView
+ void loadFinished(bool finished);
+#endif
+
+protected:
+ void keyPressEvent(QKeyEvent *e) override;
+ void wheelEvent(QWheelEvent *event) override;
+ void mousePressEvent(QMouseEvent *event) override;
+ void mouseReleaseEvent(QMouseEvent *event) override;
+ void resizeEvent(QResizeEvent *e) override;
+
+private slots:
+ void actionChanged();
+ void setLoadFinished();
+
+private:
+ bool eventFilter(QObject *obj, QEvent *event) override;
+ void contextMenuEvent(QContextMenuEvent *event) override;
+ QVariant loadResource(int type, const QUrl &name) TEXTBROWSER_OVERRIDE;
+ bool handleForwardBackwardMouseButtons(QMouseEvent *e);
+ void scrollToTextPosition(int position);
+
+private:
+ HelpViewerImplPrivate *d;
+};
+
+QT_END_NAMESPACE
+
+#endif // HELPVIEWERIMPL_H
diff --git a/src/assistant/assistant/helpviewerimpl_p.h b/src/assistant/assistant/helpviewerimpl_p.h
new file mode 100644
index 000000000..0760e10e4
--- /dev/null
+++ b/src/assistant/assistant/helpviewerimpl_p.h
@@ -0,0 +1,98 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef HELPVIEWERIMPLPRIVATE_H
+#define HELPVIEWERIMPLPRIVATE_H
+
+#include "centralwidget.h"
+#include "helpviewer.h"
+#include "openpagesmanager.h"
+
+#include <QtCore/QObject>
+#if defined(BROWSER_QTEXTBROWSER)
+# include <QtWidgets/QTextBrowser>
+#elif defined(BROWSER_QTWEBKIT)
+# include <QtGui/QGuiApplication>
+# include <QtGui/QScreen>
+#endif // BROWSER_QTWEBKIT
+
+QT_BEGIN_NAMESPACE
+
+using namespace Qt::StringLiterals;
+
+class HelpViewerImpl::HelpViewerImplPrivate : public QObject
+{
+ Q_OBJECT
+
+public:
+#if defined(BROWSER_QTEXTBROWSER)
+ HelpViewerImplPrivate(int zoom)
+ : zoomCount(zoom)
+ { }
+#elif defined(BROWSER_QTWEBKIT)
+ HelpViewerImplPrivate()
+ {
+ // The web uses 96dpi by default on the web to preserve the font size across platforms, but
+ // since we control the content for the documentation, we want the system DPI to be used.
+ // - OS X reports 72dpi but doesn't allow changing the DPI, ignore anything below a 1.0 ratio to handle this.
+ // - On Windows and Linux don't zoom the default web 96dpi below a 1.25 ratio to avoid
+ // filtered images in the doc unless the font readability difference is considerable.
+ webDpiRatio = QGuiApplication::primaryScreen()->logicalDotsPerInch() / 96.;
+ if (webDpiRatio < 1.25)
+ webDpiRatio = 1.0;
+ }
+#endif // BROWSER_QTWEBKIT
+
+#if defined(BROWSER_QTEXTBROWSER)
+ bool hasAnchorAt(QTextBrowser *browser, const QPoint& pos)
+ {
+ lastAnchor = browser->anchorAt(pos);
+ if (lastAnchor.isEmpty())
+ return false;
+
+ lastAnchor = browser->source().resolved(lastAnchor).toString();
+ if (lastAnchor.at(0) == u'#') {
+ QString src = browser->source().toString();
+ int hsh = src.indexOf(u'#');
+ lastAnchor = (hsh >= 0 ? src.left(hsh) : src) + lastAnchor;
+ }
+ return true;
+ }
+
+public slots:
+ void openLink()
+ {
+ doOpenLink(false);
+ }
+
+ void openLinkInNewPage()
+ {
+ doOpenLink(true);
+ }
+
+public:
+ QString lastAnchor;
+ int zoomCount;
+ bool forceFont = false;
+
+private:
+
+ void doOpenLink(bool newPage)
+ {
+ if (lastAnchor.isEmpty())
+ return;
+ if (newPage)
+ OpenPagesManager::instance()->createPage(lastAnchor);
+ else
+ CentralWidget::instance()->setSource(lastAnchor);
+ lastAnchor.clear();
+ }
+
+#elif defined(BROWSER_QTWEBKIT)
+ qreal webDpiRatio;
+#endif // BROWSER_QTWEBKIT
+};
+
+QT_END_NAMESPACE
+
+#endif // HELPVIEWERIMPLPRIVATE_H
diff --git a/src/assistant/assistant/helpviewerimpl_qtb.cpp b/src/assistant/assistant/helpviewerimpl_qtb.cpp
new file mode 100644
index 000000000..c0c1fa092
--- /dev/null
+++ b/src/assistant/assistant/helpviewerimpl_qtb.cpp
@@ -0,0 +1,373 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "helpviewerimpl.h"
+#include "helpviewerimpl_p.h"
+
+#include "globalactions.h"
+#include "helpenginewrapper.h"
+#include "openpagesmanager.h"
+#include "tracer.h"
+
+#include <QtCore/QStringBuilder>
+
+#include <QtGui/QContextMenuEvent>
+#include <QtWidgets/QMenu>
+#include <QtWidgets/QScrollBar>
+#if QT_CONFIG(clipboard)
+#include <QtGui/QClipboard>
+#endif
+#include <QtWidgets/QApplication>
+
+QT_BEGIN_NAMESPACE
+
+HelpViewerImpl::HelpViewerImpl(qreal zoom, QWidget *parent)
+ : QTextBrowser(parent)
+ , d(new HelpViewerImplPrivate(zoom))
+{
+ TRACE_OBJ
+ QPalette p = palette();
+ p.setColor(QPalette::Inactive, QPalette::Highlight,
+ p.color(QPalette::Active, QPalette::Highlight));
+ p.setColor(QPalette::Inactive, QPalette::HighlightedText,
+ p.color(QPalette::Active, QPalette::HighlightedText));
+ setPalette(p);
+
+ installEventFilter(this);
+ document()->setDocumentMargin(8);
+
+ QFont font = viewerFont();
+ font.setPointSize(int(font.pointSize() + zoom));
+ setViewerFont(font);
+
+ connect(this, &QTextBrowser::sourceChanged, this, &HelpViewerImpl::titleChanged);
+ connect(this, &HelpViewerImpl::loadFinished, this, &HelpViewerImpl::setLoadFinished);
+}
+
+QFont HelpViewerImpl::viewerFont() const
+{
+ TRACE_OBJ
+ if (HelpEngineWrapper::instance().usesBrowserFont())
+ return HelpEngineWrapper::instance().browserFont();
+ return qApp->font();
+}
+
+void HelpViewerImpl::setViewerFont(const QFont &newFont)
+{
+ TRACE_OBJ
+ if (font() != newFont) {
+ d->forceFont = true;
+ setFont(newFont);
+ d->forceFont = false;
+ }
+}
+
+void HelpViewerImpl::scaleUp()
+{
+ TRACE_OBJ
+ if (d->zoomCount < 10) {
+ d->zoomCount++;
+ d->forceFont = true;
+ zoomIn();
+ d->forceFont = false;
+ }
+}
+
+void HelpViewerImpl::scaleDown()
+{
+ TRACE_OBJ
+ if (d->zoomCount > -5) {
+ d->zoomCount--;
+ d->forceFont = true;
+ zoomOut();
+ d->forceFont = false;
+ }
+}
+
+void HelpViewerImpl::resetScale()
+{
+ TRACE_OBJ
+ if (d->zoomCount != 0) {
+ d->forceFont = true;
+ zoomOut(d->zoomCount);
+ d->forceFont = false;
+ }
+ d->zoomCount = 0;
+}
+
+qreal HelpViewerImpl::scale() const
+{
+ TRACE_OBJ
+ return d->zoomCount;
+}
+
+QString HelpViewerImpl::title() const
+{
+ TRACE_OBJ
+ return documentTitle();
+}
+
+QUrl HelpViewerImpl::source() const
+{
+ TRACE_OBJ
+ return QTextBrowser::source();
+}
+
+void HelpViewerImpl::doSetSource(const QUrl &url, QTextDocument::ResourceType type)
+{
+ TRACE_OBJ
+ Q_UNUSED(type);
+ if (HelpViewer::launchWithExternalApp(url))
+ return;
+
+ bool helpOrAbout = (url.toString() == "help"_L1);
+ const QUrl resolvedUrl = (helpOrAbout ? LocalHelpFile : HelpEngineWrapper::instance().findFile(url));
+
+ QTextBrowser::doSetSource(resolvedUrl, type);
+
+ if (!resolvedUrl.isValid()) {
+ helpOrAbout = (url.toString() == "about:blank"_L1);
+ setHtml(helpOrAbout ? AboutBlank : PageNotFoundMessage.arg(url.toString()));
+ }
+ emit loadFinished(true);
+}
+
+QString HelpViewerImpl::selectedText() const
+{
+ TRACE_OBJ
+ return textCursor().selectedText();
+}
+
+bool HelpViewerImpl::isForwardAvailable() const
+{
+ TRACE_OBJ
+ return QTextBrowser::isForwardAvailable();
+}
+
+bool HelpViewerImpl::isBackwardAvailable() const
+{
+ TRACE_OBJ
+ return QTextBrowser::isBackwardAvailable();
+}
+
+bool HelpViewerImpl::findText(const QString &text, HelpViewer::FindFlags flags, bool incremental,
+ bool fromSearch)
+{
+ TRACE_OBJ
+ QTextDocument *doc = document();
+ QTextCursor cursor = textCursor();
+ if (!doc || cursor.isNull())
+ return false;
+
+ const int position = cursor.selectionStart();
+ if (incremental)
+ cursor.setPosition(position);
+
+ QTextDocument::FindFlags textDocFlags;
+ if (flags & HelpViewer::FindBackward)
+ textDocFlags |= QTextDocument::FindBackward;
+ if (flags & HelpViewer::FindCaseSensitively)
+ textDocFlags |= QTextDocument::FindCaseSensitively;
+
+ QTextCursor found = doc->find(text, cursor, textDocFlags);
+ if (found.isNull()) {
+ if ((flags & HelpViewer::FindBackward) == 0)
+ cursor.movePosition(QTextCursor::Start);
+ else
+ cursor.movePosition(QTextCursor::End);
+ found = doc->find(text, cursor, textDocFlags);
+ }
+
+ if (fromSearch) {
+ cursor.beginEditBlock();
+ viewport()->setUpdatesEnabled(false);
+
+ QTextCharFormat marker;
+ marker.setForeground(Qt::red);
+ cursor.movePosition(QTextCursor::Start);
+ setTextCursor(cursor);
+
+ while (find(text)) {
+ QTextCursor hit = textCursor();
+ hit.mergeCharFormat(marker);
+ }
+
+ viewport()->setUpdatesEnabled(true);
+ cursor.endEditBlock();
+ }
+
+ bool cursorIsNull = found.isNull();
+ if (cursorIsNull) {
+ found = textCursor();
+ found.setPosition(position);
+ }
+ setTextCursor(found);
+ return !cursorIsNull;
+}
+
+// -- public slots
+
+#if QT_CONFIG(clipboard)
+void HelpViewerImpl::copy()
+{
+ TRACE_OBJ
+ QTextBrowser::copy();
+}
+#endif
+
+void HelpViewerImpl::forward()
+{
+ TRACE_OBJ
+ QTextBrowser::forward();
+}
+
+void HelpViewerImpl::backward()
+{
+ TRACE_OBJ
+ QTextBrowser::backward();
+}
+
+// -- protected
+
+void HelpViewerImpl::keyPressEvent(QKeyEvent *e)
+{
+ TRACE_OBJ
+ if ((e->key() == Qt::Key_Home && e->modifiers() != Qt::NoModifier)
+ || (e->key() == Qt::Key_End && e->modifiers() != Qt::NoModifier)) {
+ QKeyEvent* event = new QKeyEvent(e->type(), e->key(), Qt::NoModifier,
+ e->text(), e->isAutoRepeat(), e->count());
+ e = event;
+ }
+ QTextBrowser::keyPressEvent(e);
+}
+
+void HelpViewerImpl::wheelEvent(QWheelEvent *e)
+{
+ TRACE_OBJ
+ if (e->modifiers() == Qt::ControlModifier) {
+ e->accept();
+ e->angleDelta().y() > 0 ? scaleUp() : scaleDown();
+ } else {
+ QTextBrowser::wheelEvent(e);
+ }
+}
+
+void HelpViewerImpl::mousePressEvent(QMouseEvent *e)
+{
+ TRACE_OBJ
+#ifdef Q_OS_LINUX
+ if (handleForwardBackwardMouseButtons(e))
+ return;
+#endif
+
+ QTextBrowser::mousePressEvent(e);
+}
+
+void HelpViewerImpl::mouseReleaseEvent(QMouseEvent *e)
+{
+ TRACE_OBJ
+#ifndef Q_OS_LINUX
+ if (handleForwardBackwardMouseButtons(e))
+ return;
+#endif
+
+ bool controlPressed = e->modifiers() & Qt::ControlModifier;
+ if ((controlPressed && d->hasAnchorAt(this, e->pos())) ||
+ (e->button() == Qt::MiddleButton && d->hasAnchorAt(this, e->pos()))) {
+ d->openLinkInNewPage();
+ return;
+ }
+
+ QTextBrowser::mouseReleaseEvent(e);
+}
+
+
+void HelpViewerImpl::resizeEvent(QResizeEvent *e)
+{
+ const int topTextPosition = cursorForPosition({width() / 2, 0}).position();
+ QTextBrowser::resizeEvent(e);
+ scrollToTextPosition(topTextPosition);
+}
+
+// -- private slots
+
+void HelpViewerImpl::actionChanged()
+{
+ // stub
+ TRACE_OBJ
+}
+
+// -- private
+
+bool HelpViewerImpl::eventFilter(QObject *obj, QEvent *event)
+{
+ TRACE_OBJ
+ if (event->type() == QEvent::FontChange && !d->forceFont)
+ return true;
+ return QTextBrowser::eventFilter(obj, event);
+}
+
+void HelpViewerImpl::contextMenuEvent(QContextMenuEvent *event)
+{
+ TRACE_OBJ
+
+ QMenu menu(QString(), nullptr);
+ QUrl link;
+#if QT_CONFIG(clipboard)
+ QAction *copyAnchorAction = nullptr;
+#endif
+ if (d->hasAnchorAt(this, event->pos())) {
+ link = anchorAt(event->pos());
+ if (link.isRelative())
+ link = source().resolved(link);
+ menu.addAction(tr("Open Link"), d, &HelpViewerImplPrivate::openLink);
+ menu.addAction(tr("Open Link in New Tab\tCtrl+LMB"), d, &HelpViewerImplPrivate::openLinkInNewPage);
+
+#if QT_CONFIG(clipboard)
+ if (!link.isEmpty() && link.isValid())
+ copyAnchorAction = menu.addAction(tr("Copy &Link Location"));
+#endif
+ } else if (!selectedText().isEmpty()) {
+#if QT_CONFIG(clipboard)
+ menu.addAction(tr("Copy"), this, &HelpViewerImpl::copy);
+#endif
+ } else {
+ menu.addAction(tr("Reload"), this, &HelpViewerImpl::reload);
+ }
+
+#if QT_CONFIG(clipboard)
+ if (copyAnchorAction == menu.exec(event->globalPos()))
+ QApplication::clipboard()->setText(link.toString());
+#endif
+}
+
+QVariant HelpViewerImpl::loadResource(int type, const QUrl &name)
+{
+ TRACE_OBJ
+ QByteArray ba;
+ if (type < 4) {
+ const QUrl url = HelpEngineWrapper::instance().findFile(name);
+ ba = HelpEngineWrapper::instance().fileData(url);
+ if (url.toString().endsWith(".svg"_L1, Qt::CaseInsensitive)) {
+ QImage image;
+ image.loadFromData(ba, "svg");
+ if (!image.isNull())
+ return image;
+ }
+ }
+ return ba;
+}
+
+
+void HelpViewerImpl::scrollToTextPosition(int position)
+{
+ QTextCursor tc(document());
+ tc.setPosition(position);
+ const int dy = cursorRect(tc).top();
+ if (verticalScrollBar()) {
+ verticalScrollBar()->setValue(
+ std::min(verticalScrollBar()->value() + dy, verticalScrollBar()->maximum()));
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/assistant/assistant/helpviewerimpl_qwv.cpp b/src/assistant/assistant/helpviewerimpl_qwv.cpp
new file mode 100644
index 000000000..705661029
--- /dev/null
+++ b/src/assistant/assistant/helpviewerimpl_qwv.cpp
@@ -0,0 +1,370 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "helpviewerimpl.h"
+#include "helpviewerimpl_p.h"
+
+#include "centralwidget.h"
+#include "helpenginewrapper.h"
+#include "helpbrowsersupport.h"
+#include "openpagesmanager.h"
+#include "tracer.h"
+
+#include <QClipboard>
+#include <QtCore/QFileInfo>
+#include <QtCore/QString>
+#include <QtCore/QTimer>
+
+#include <QtWidgets/QApplication>
+#include <QtGui/QWheelEvent>
+
+#include <QtNetwork/QNetworkReply>
+
+QT_BEGIN_NAMESPACE
+
+// -- HelpPage
+
+class HelpPage : public QWebPage
+{
+public:
+ HelpPage(QObject *parent);
+
+protected:
+ virtual QWebPage *createWindow(QWebPage::WebWindowType);
+ virtual void triggerAction(WebAction action, bool checked = false);
+
+ virtual bool acceptNavigationRequest(QWebFrame *frame,
+ const QNetworkRequest &request, NavigationType type);
+
+private:
+ bool closeNewTabIfNeeded;
+
+ friend class HelpViewerImpl;
+ QUrl m_loadingUrl;
+ Qt::MouseButtons m_pressedButtons;
+ Qt::KeyboardModifiers m_keyboardModifiers;
+};
+
+HelpPage::HelpPage(QObject *parent)
+ : QWebPage(parent)
+ , closeNewTabIfNeeded(false)
+ , m_pressedButtons(Qt::NoButton)
+ , m_keyboardModifiers(Qt::NoModifier)
+{
+ TRACE_OBJ
+}
+
+QWebPage *HelpPage::createWindow(QWebPage::WebWindowType)
+{
+ TRACE_OBJ
+ HelpPage *newPage = static_cast<HelpPage *>(OpenPagesManager::instance()
+ ->createBlankPage()->page());
+ newPage->closeNewTabIfNeeded = closeNewTabIfNeeded;
+ closeNewTabIfNeeded = false;
+ return newPage;
+}
+
+void HelpPage::triggerAction(WebAction action, bool checked)
+{
+ TRACE_OBJ
+ switch (action) {
+ case OpenLinkInNewWindow:
+ closeNewTabIfNeeded = true;
+ Q_FALLTHROUGH();
+ default:
+ QWebPage::triggerAction(action, checked);
+ break;
+ }
+
+#if QT_CONFIG(clipboard)
+ if (action == CopyLinkToClipboard || action == CopyImageUrlToClipboard) {
+ const QString link = QApplication::clipboard()->text();
+ QApplication::clipboard()->setText(HelpEngineWrapper::instance().findFile(link).toString());
+ }
+#endif
+}
+
+bool HelpPage::acceptNavigationRequest(QWebFrame *,
+ const QNetworkRequest &request, QWebPage::NavigationType type)
+{
+ TRACE_OBJ
+ const bool closeNewTab = closeNewTabIfNeeded;
+ closeNewTabIfNeeded = false;
+
+ const QUrl &url = request.url();
+ if (HelpViewer::launchWithExternalApp(url)) {
+ if (closeNewTab)
+ QMetaObject::invokeMethod(OpenPagesManager::instance(), "closeCurrentPage");
+ return false;
+ }
+
+ if (type == QWebPage::NavigationTypeLinkClicked
+ && (m_keyboardModifiers & Qt::ControlModifier
+ || m_pressedButtons == Qt::MiddleButton)) {
+ m_pressedButtons = Qt::NoButton;
+ m_keyboardModifiers = Qt::NoModifier;
+ OpenPagesManager::instance()->createPage(url);
+ return false;
+ }
+
+ m_loadingUrl = url; // because of async page loading, we will hit some kind
+ // of race condition while using a remote command, like a combination of
+ // SetSource; SyncContent. SetSource would be called and SyncContents shortly
+ // afterwards, but the page might not have finished loading and the old url
+ // would be returned.
+ return true;
+}
+
+// -- HelpViewerImpl
+
+HelpViewerImpl::HelpViewerImpl(qreal zoom, QWidget *parent)
+ : QWebView(parent)
+ , d(new HelpViewerImplPrivate)
+{
+ TRACE_OBJ
+ setAcceptDrops(false);
+ settings()->setAttribute(QWebSettings::JavaEnabled, false);
+ settings()->setAttribute(QWebSettings::PluginsEnabled, false);
+
+ setPage(new HelpPage(this));
+ page()->setNetworkAccessManager(HelpBrowserSupport::createNetworkAccessManager(this));
+
+ QAction* action = pageAction(QWebPage::OpenLinkInNewWindow);
+ action->setText(tr("Open Link in New Page"));
+
+ pageAction(QWebPage::DownloadLinkToDisk)->setVisible(false);
+ pageAction(QWebPage::DownloadImageToDisk)->setVisible(false);
+ pageAction(QWebPage::OpenImageInNewWindow)->setVisible(false);
+
+ connect(pageAction(QWebPage::Copy), SIGNAL(changed()), this,
+ SLOT(actionChanged()));
+ connect(pageAction(QWebPage::Back), SIGNAL(changed()), this,
+ SLOT(actionChanged()));
+ connect(pageAction(QWebPage::Forward), SIGNAL(changed()), this,
+ SLOT(actionChanged()));
+ connect(page(), &QWebPage::linkHovered, this,
+ [this] (const QString &link, const QString &, const QString &) {
+ emit this->highlighted(QUrl(link));
+ });
+ connect(this, SIGNAL(urlChanged(QUrl)), this, SIGNAL(sourceChanged(QUrl)));
+ connect(this, SIGNAL(loadStarted()), this, SLOT(setLoadStarted()));
+ connect(this, SIGNAL(loadFinished(bool)), this, SLOT(setLoadFinished(bool)));
+ connect(this, SIGNAL(titleChanged(QString)), this, SIGNAL(titleChanged()));
+ connect(page(), SIGNAL(printRequested(QWebFrame*)), this, SIGNAL(printRequested()));
+
+ setFont(viewerFont());
+ setZoomFactor(d->webDpiRatio * (zoom == 0.0 ? 1.0 : zoom));
+}
+
+QFont HelpViewerImpl::viewerFont() const
+{
+ TRACE_OBJ
+ if (HelpEngineWrapper::instance().usesBrowserFont())
+ return HelpEngineWrapper::instance().browserFont();
+
+ QWebSettings *webSettings = QWebSettings::globalSettings();
+ return QFont(webSettings->fontFamily(QWebSettings::StandardFont),
+ webSettings->fontSize(QWebSettings::DefaultFontSize));
+}
+
+void HelpViewerImpl::setViewerFont(const QFont &font)
+{
+ TRACE_OBJ
+ QWebSettings *webSettings = settings();
+ webSettings->setFontFamily(QWebSettings::StandardFont, font.family());
+ webSettings->setFontSize(QWebSettings::DefaultFontSize, font.pointSize());
+}
+
+void HelpViewerImpl::scaleUp()
+{
+ TRACE_OBJ
+ setZoomFactor(zoomFactor() + 0.1);
+}
+
+void HelpViewerImpl::scaleDown()
+{
+ TRACE_OBJ
+ setZoomFactor(qMax(0.0, zoomFactor() - 0.1));
+}
+
+void HelpViewerImpl::resetScale()
+{
+ TRACE_OBJ
+ setZoomFactor(d->webDpiRatio);
+}
+
+qreal HelpViewerImpl::scale() const
+{
+ TRACE_OBJ
+ return zoomFactor() / d->webDpiRatio;
+}
+
+QString HelpViewerImpl::title() const
+{
+ TRACE_OBJ
+ return QWebView::title();
+}
+
+void HelpViewerImpl::setTitle(const QString &title)
+{
+ TRACE_OBJ
+ Q_UNUSED(title);
+}
+
+QUrl HelpViewerImpl::source() const
+{
+ TRACE_OBJ
+ HelpPage *currentPage = static_cast<HelpPage*> (page());
+ if (currentPage && !d->m_loadFinished) {
+ // see HelpPage::acceptNavigationRequest(...)
+ return currentPage->m_loadingUrl;
+ }
+ return url();
+}
+
+void HelpViewerImpl::setSource(const QUrl &url)
+{
+ TRACE_OBJ
+ load(url.toString() == QLatin1String("help") ? LocalHelpFile : url);
+}
+
+QString HelpViewerImpl::selectedText() const
+{
+ TRACE_OBJ
+ return QWebView::selectedText();
+}
+
+bool HelpViewerImpl::isForwardAvailable() const
+{
+ TRACE_OBJ
+ return pageAction(QWebPage::Forward)->isEnabled();
+}
+
+bool HelpViewerImpl::isBackwardAvailable() const
+{
+ TRACE_OBJ
+ return pageAction(QWebPage::Back)->isEnabled();
+}
+
+bool HelpViewerImpl::findText(const QString &text, HelpViewer::FindFlags flags, bool incremental,
+ bool fromSearch)
+{
+ TRACE_OBJ
+ Q_UNUSED(incremental); Q_UNUSED(fromSearch);
+ QWebPage::FindFlags options = QWebPage::FindWrapsAroundDocument;
+ if (flags & HelpViewer::FindBackward)
+ options |= QWebPage::FindBackward;
+ if (flags & HelpViewer::FindCaseSensitively)
+ options |= QWebPage::FindCaseSensitively;
+
+ bool found = QWebView::findText(text, options);
+ options = QWebPage::HighlightAllOccurrences;
+ QWebView::findText(QString(), options); // clear first
+ QWebView::findText(text, options); // force highlighting of all other matches
+ return found;
+}
+
+// -- public slots
+
+#if QT_CONFIG(clipboard)
+void HelpViewerImpl::copy()
+{
+ TRACE_OBJ
+ triggerPageAction(QWebPage::Copy);
+}
+#endif
+
+void HelpViewerImpl::forward()
+{
+ TRACE_OBJ
+ QWebView::forward();
+}
+
+void HelpViewerImpl::backward()
+{
+ TRACE_OBJ
+ back();
+}
+
+// -- protected
+
+void HelpViewerImpl::keyPressEvent(QKeyEvent *e)
+{
+ TRACE_OBJ
+ // TODO: remove this once we support multiple keysequences per command
+#if QT_CONFIG(clipboard)
+ if (e->key() == Qt::Key_Insert && e->modifiers() == Qt::CTRL) {
+ if (!selectedText().isEmpty())
+ copy();
+ }
+#endif
+ QWebView::keyPressEvent(e);
+}
+
+void HelpViewerImpl::wheelEvent(QWheelEvent *event)
+{
+ TRACE_OBJ
+ if (event->modifiers()& Qt::ControlModifier) {
+ event->accept();
+ event->delta() > 0 ? scaleUp() : scaleDown();
+ } else {
+ QWebView::wheelEvent(event);
+ }
+}
+
+void HelpViewerImpl::mousePressEvent(QMouseEvent *event)
+{
+ TRACE_OBJ
+#ifdef Q_OS_LINUX
+ if (handleForwardBackwardMouseButtons(event))
+ return;
+#endif
+
+ if (HelpPage *currentPage = static_cast<HelpPage*> (page())) {
+ currentPage->m_pressedButtons = event->buttons();
+ currentPage->m_keyboardModifiers = event->modifiers();
+ }
+
+ QWebView::mousePressEvent(event);
+}
+
+void HelpViewerImpl::mouseReleaseEvent(QMouseEvent *event)
+{
+ TRACE_OBJ
+#ifndef Q_OS_LINUX
+ if (handleForwardBackwardMouseButtons(event))
+ return;
+#endif
+
+ QWebView::mouseReleaseEvent(event);
+}
+
+// -- private slots
+
+void HelpViewerImpl::actionChanged()
+{
+ TRACE_OBJ
+ QAction *a = qobject_cast<QAction *>(sender());
+ if (a == pageAction(QWebPage::Copy))
+ emit copyAvailable(a->isEnabled());
+ else if (a == pageAction(QWebPage::Back))
+ emit backwardAvailable(a->isEnabled());
+ else if (a == pageAction(QWebPage::Forward))
+ emit forwardAvailable(a->isEnabled());
+}
+
+// -- private
+
+bool HelpViewerImpl::eventFilter(QObject *obj, QEvent *event)
+{
+ TRACE_OBJ
+ return QWebView::eventFilter(obj, event);
+}
+
+void HelpViewerImpl::contextMenuEvent(QContextMenuEvent *event)
+{
+ TRACE_OBJ
+ QWebView::contextMenuEvent(event);
+}
+
+QT_END_NAMESPACE
diff --git a/src/assistant/assistant/images/mac/addtab.png b/src/assistant/assistant/images/mac/addtab.png
deleted file mode 100644
index 20928fb40..000000000
--- a/src/assistant/assistant/images/mac/addtab.png
+++ /dev/null
Binary files differ
diff --git a/src/assistant/assistant/images/win/addtab.png b/src/assistant/assistant/images/win/addtab.png
deleted file mode 100644
index 4bb0feb92..000000000
--- a/src/assistant/assistant/images/win/addtab.png
+++ /dev/null
Binary files differ
diff --git a/src/assistant/assistant/indexwindow.cpp b/src/assistant/assistant/indexwindow.cpp
index 5e7ece6cb..53a471175 100644
--- a/src/assistant/assistant/indexwindow.cpp
+++ b/src/assistant/assistant/indexwindow.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "indexwindow.h"
@@ -49,6 +24,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
IndexWindow::IndexWindow(QWidget *parent)
: QWidget(parent)
, m_searchLineEdit(new QLineEdit)
@@ -94,7 +71,7 @@ IndexWindow::~IndexWindow()
void IndexWindow::filterIndices(const QString &filter)
{
TRACE_OBJ
- if (filter.contains(QLatin1Char('*')))
+ if (filter.contains(u'*'))
m_indexWidget->filterIndices(filter, filter);
else
m_indexWidget->filterIndices(filter, QString());
@@ -203,7 +180,7 @@ void IndexWindow::open(QHelpIndexWidget* indexWidget, const QModelIndex &index)
const QList<QHelpLink> docs = model->helpEngine()->documentsForKeyword(keyword);
QUrl url;
- if (docs.count() > 1) {
+ if (docs.size() > 1) {
TopicChooser tc(this, keyword, docs);
if (tc.exec() == QDialog::Accepted)
url = tc.link();
diff --git a/src/assistant/assistant/indexwindow.h b/src/assistant/assistant/indexwindow.h
index b20531799..dab8e7abc 100644
--- a/src/assistant/assistant/indexwindow.h
+++ b/src/assistant/assistant/indexwindow.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef INDEXWINDOW_H
#define INDEXWINDOW_H
diff --git a/src/assistant/assistant/main.cpp b/src/assistant/assistant/main.cpp
index 7ace7b02a..b136b0903 100644
--- a/src/assistant/assistant/main.cpp
+++ b/src/assistant/assistant/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "tracer.h"
#include <QtCore/QDir>
@@ -58,6 +33,8 @@
QT_USE_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace {
void
@@ -68,10 +45,10 @@ updateLastPagesOnUnregister(QHelpEngineCore& helpEngine, const QString& nsName)
QStringList currentPages = CollectionConfiguration::lastShownPages(helpEngine);
if (!currentPages.isEmpty()) {
QStringList zoomList = CollectionConfiguration::lastZoomFactors(helpEngine);
- while (zoomList.count() < currentPages.count())
+ while (zoomList.size() < currentPages.size())
zoomList.append(CollectionConfiguration::DefaultZoomFactor);
- for (int i = currentPages.count(); --i >= 0;) {
+ for (int i = currentPages.size(); --i >= 0;) {
if (QUrl(currentPages.at(i)).host() == nsName) {
zoomList.removeAt(i);
currentPages.removeAt(i);
@@ -99,11 +76,10 @@ void stripNonexistingDocs(QHelpEngineCore& collection)
QString indexFilesFolder(const QString &collectionFile)
{
TRACE_OBJ
- QString indexFilesFolder = QLatin1String(".fulltextsearch");
+ QString indexFilesFolder = ".fulltextsearch"_L1;
if (!collectionFile.isEmpty()) {
QFileInfo fi(collectionFile);
- indexFilesFolder = QLatin1Char('.') +
- fi.fileName().left(fi.fileName().lastIndexOf(QLatin1String(".qhc")));
+ indexFilesFolder = u'.' + fi.fileName().left(fi.fileName().lastIndexOf(".qhc"_L1));
}
return indexFilesFolder;
}
@@ -165,8 +141,8 @@ bool synchronizeDocs(QHelpEngineCore &collection,
bool removeSearchIndex(const QString &collectionFile)
{
TRACE_OBJ
- QString path = QFileInfo(collectionFile).path();
- path += QLatin1Char('/') + indexFilesFolder(collectionFile);
+ const QString path =
+ QFileInfo(collectionFile).path() + u'/' + indexFilesFolder(collectionFile);
QDir dir(path);
if (!dir.exists())
@@ -195,7 +171,7 @@ QCoreApplication* createApplication(int &argc, char *argv[])
}
#endif
QApplication *app = new QApplication(argc, argv);
- app->connect(app, &QGuiApplication::lastWindowClosed,
+ app->connect(app, &QGuiApplication::lastWindowClosed, app,
&QCoreApplication::quit);
return app;
}
@@ -240,7 +216,7 @@ bool unregisterDocumentation(QHelpEngineCore &collection,
void setupTranslation(const QString &fileName, const QString &dir)
{
QTranslator *translator = new QTranslator(QCoreApplication::instance());
- if (translator->load(QLocale(), fileName, QLatin1String("_"), dir))
+ if (translator->load(QLocale(), fileName, "_"_L1, dir))
QCoreApplication::installTranslator(translator);
}
@@ -249,9 +225,9 @@ void setupTranslations()
TRACE_OBJ
const QString &resourceDir
= QLibraryInfo::path(QLibraryInfo::TranslationsPath);
- setupTranslation(QLatin1String("assistant"), resourceDir);
- setupTranslation(QLatin1String("qt"), resourceDir);
- setupTranslation(QLatin1String("qt_help"), resourceDir);
+ setupTranslation("assistant"_L1, resourceDir);
+ setupTranslation("qt"_L1, resourceDir);
+ setupTranslation("qt_help"_L1, resourceDir);
}
} // Anonymous namespace.
@@ -340,7 +316,7 @@ static ExitStatus preliminarySetup(CmdLineParser *cmd)
? ExitSuccess : ExitFailure;
}
- if (!QSqlDatabase::isDriverAvailable(QLatin1String("QSQLITE"))) {
+ if (!QSqlDatabase::isDriverAvailable("QSQLITE"_L1)) {
cmd->showMessage(QCoreApplication::translate("Assistant",
"Cannot load sqlite database driver!"),
true);
@@ -364,7 +340,7 @@ int main(int argc, char *argv[])
TRACE_OBJ
QScopedPointer<QCoreApplication> a(createApplication(argc, argv));
#if QT_CONFIG(library)
- a->addLibraryPath(a->applicationDirPath() + QLatin1String("/plugins"));
+ a->addLibraryPath(a->applicationDirPath() + "/plugins"_L1);
#endif
setupTranslations();
diff --git a/src/assistant/assistant/mainwindow.cpp b/src/assistant/assistant/mainwindow.cpp
index 161b49079..5a6d35e20 100644
--- a/src/assistant/assistant/mainwindow.cpp
+++ b/src/assistant/assistant/mainwindow.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "mainwindow.h"
@@ -87,6 +62,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
enum { warnAboutMissingModules = 0 };
MainWindow::MainWindow(CmdLineParser *cmdLine, QWidget *parent)
@@ -121,13 +98,13 @@ MainWindow::MainWindow(CmdLineParser *cmdLine, QWidget *parent)
m_indexWindow = new IndexWindow(this);
QDockWidget *indexDock = new QDockWidget(tr("Index"), this);
- indexDock->setObjectName(QLatin1String("IndexWindow"));
+ indexDock->setObjectName("IndexWindow"_L1);
indexDock->setWidget(m_indexWindow);
addDockWidget(Qt::LeftDockWidgetArea, indexDock);
m_contentWindow = new ContentWindow;
QDockWidget *contentDock = new QDockWidget(tr("Contents"), this);
- contentDock->setObjectName(QLatin1String("ContentWindow"));
+ contentDock->setObjectName("ContentWindow"_L1);
contentDock->setWidget(m_contentWindow);
addDockWidget(Qt::LeftDockWidgetArea, contentDock);
@@ -135,18 +112,18 @@ MainWindow::MainWindow(CmdLineParser *cmdLine, QWidget *parent)
m_searchWindow->setFont(!helpEngineWrapper.usesBrowserFont() ? qApp->font()
: helpEngineWrapper.browserFont());
QDockWidget *searchDock = new QDockWidget(tr("Search"), this);
- searchDock->setObjectName(QLatin1String("SearchWindow"));
+ searchDock->setObjectName("SearchWindow"_L1);
searchDock->setWidget(m_searchWindow);
addDockWidget(Qt::LeftDockWidgetArea, searchDock);
QDockWidget *bookmarkDock = new QDockWidget(tr("Bookmarks"), this);
- bookmarkDock->setObjectName(QLatin1String("BookmarkWindow"));
+ bookmarkDock->setObjectName("BookmarkWindow"_L1);
bookmarkDock->setWidget(m_bookmarkWidget
= bookMarkManager->bookmarkDockWidget());
addDockWidget(Qt::LeftDockWidgetArea, bookmarkDock);
QDockWidget *openPagesDock = new QDockWidget(tr("Open Pages"), this);
- openPagesDock->setObjectName(QLatin1String("Open Pages"));
+ openPagesDock->setObjectName("Open Pages"_L1);
OpenPagesManager *openPagesManager
= OpenPagesManager::createInstance(this, usesDefaultCollection(), m_cmdLine->url());
openPagesDock->setWidget(openPagesManager->openPagesWidget());
@@ -191,15 +168,15 @@ MainWindow::MainWindow(CmdLineParser *cmdLine, QWidget *parent)
} while (reader.jumpToNextImage());
qApp->setWindowIcon(appIcon);
}
-#if !defined(Q_OS_OSX) && !defined(Q_OS_WIN)
+#if !defined(Q_OS_MACOS) && !defined(Q_OS_WIN)
else {
- QIcon appIcon(QLatin1String(":/qt-project.org/assistant/images/assistant-128.png"));
+ QIcon appIcon(":/qt-project.org/assistant/images/assistant-128.png"_L1);
qApp->setWindowIcon(appIcon);
}
#endif
QToolBar *toolBar = addToolBar(tr("Bookmark Toolbar"));
- toolBar->setObjectName(QLatin1String("Bookmark Toolbar"));
+ toolBar->setObjectName("Bookmark Toolbar"_L1);
bookMarkManager->setBookmarksToolbar(toolBar);
toolBar->hide();
@@ -218,9 +195,9 @@ MainWindow::MainWindow(CmdLineParser *cmdLine, QWidget *parent)
tabifyDockWidget(bookmarkDock, searchDock);
contentDock->raise();
const QRect screen = QGuiApplication::primaryScreen()->geometry();
- resize(4*screen.width()/5, 4*screen.height()/5);
-
adjustSize(); // make sure we won't start outside of the screen
+ resize(4 * screen.width() / 5, 4 * screen.height() / 5);
+
move(screen.center() - rect().center());
}
@@ -318,45 +295,9 @@ bool MainWindow::initHelpDB(bool registerInternalDoc)
if (!helpEngineWrapper.setupData())
return false;
- if (!registerInternalDoc) {
- if (helpEngineWrapper.defaultHomePage() == QLatin1String("help"))
- helpEngineWrapper.setDefaultHomePage(QLatin1String("about:blank"));
- return true;
- }
- bool assistantInternalDocRegistered = false;
- QString intern(QLatin1String("org.qt-project.assistantinternal-"));
- for (const QString &ns : helpEngineWrapper.registeredDocumentations()) {
- if (ns.startsWith(intern)) {
- intern = ns;
- assistantInternalDocRegistered = true;
- break;
- }
- }
-
- const QString &collectionFile = helpEngineWrapper.collectionFile();
- QFileInfo fi(collectionFile);
- QString helpFile;
- QTextStream(&helpFile) << fi.absolutePath() << QDir::separator()
- << QLatin1String("assistant.qch.") << (QT_VERSION >> 16)
- << QLatin1Char('.') << ((QT_VERSION >> 8) & 0xFF);
-
- bool needsSetup = false;
- if (!assistantInternalDocRegistered || !QFile::exists(helpFile)) {
- QFile file(helpFile);
- if (file.open(QIODevice::WriteOnly)) {
- QResource res(QLatin1String(":/qt-project.org/assistant/assistant.qch"));
- if (file.write((const char*)res.data(), res.size()) != res.size())
- qDebug() << QLatin1String("could not write assistant.qch...");
-
- file.close();
- }
- helpEngineWrapper.unregisterDocumentation(intern);
- helpEngineWrapper.registerDocumentation(helpFile);
- needsSetup = true;
- }
+ if (!registerInternalDoc && helpEngineWrapper.defaultHomePage() == "help"_L1)
+ helpEngineWrapper.setDefaultHomePage("about:blank"_L1);
- if (needsSetup)
- helpEngineWrapper.setupData();
return true;
}
@@ -432,7 +373,7 @@ static QStringList newQtDocumentation()
const int docCount = int(sizeof(docs) / sizeof(docs[0]));
result.reserve(docCount);
for (int d = 0; d < docCount; ++d)
- result.append(QLatin1String(docs[d]));
+ result.append(QLatin1StringView(docs[d]));
return result;
}
@@ -459,7 +400,7 @@ void MainWindow::lookForNewQtDocumentation()
this, &MainWindow::resetQtDocInfo);
connect(m_qtDocInstaller, &QtDocInstaller::registerDocumentation,
this, &MainWindow::registerDocumentation);
- if (helpEngine.qtDocInfo(QLatin1String("qt")).count() != 2)
+ if (helpEngine.qtDocInfo("qt"_L1).size() != 2)
statusBar()->showMessage(tr("Looking for Qt Documentation..."));
m_qtDocInstaller->installDocs();
}
@@ -467,6 +408,7 @@ void MainWindow::lookForNewQtDocumentation()
void MainWindow::qtDocumentationInstalled()
{
TRACE_OBJ
+ OpenPagesManager::instance()->resetHelpPage();
statusBar()->clearMessage();
checkInitState();
}
@@ -509,12 +451,12 @@ void MainWindow::insertLastPages()
void MainWindow::setupActions()
{
TRACE_OBJ
- QString resourcePath = QLatin1String(":/qt-project.org/assistant/images/");
+ QString resourcePath = ":/qt-project.org/assistant/images/"_L1;
#ifdef Q_OS_MAC
setUnifiedTitleAndToolBarOnMac(true);
- resourcePath.append(QLatin1String("mac"));
+ resourcePath.append("mac"_L1);
#else
- resourcePath.append(QLatin1String("win"));
+ resourcePath.append("win"_L1);
#endif
QMenu *menu = menuBar()->addMenu(tr("&File"));
@@ -542,7 +484,7 @@ void MainWindow::setupActions()
menu->addAction(globalActions->printAction());
menu->addSeparator();
- QIcon appExitIcon = QIcon::fromTheme("application-exit");
+ QIcon appExitIcon = QIcon::fromTheme(QIcon::ThemeIcon::ApplicationExit);
QAction *tmp;
#ifdef Q_OS_WIN
tmp = menu->addAction(appExitIcon, tr("E&xit"),
@@ -581,21 +523,21 @@ void MainWindow::setupActions()
m_resetZoomAction = m_viewMenu->addAction(tr("Normal &Size"),
m_centralWidget, &CentralWidget::resetZoom);
m_resetZoomAction->setPriority(QAction::LowPriority);
- m_resetZoomAction->setIcon(QIcon(resourcePath + QLatin1String("/resetzoom.png")));
+ m_resetZoomAction->setIcon(QIcon(resourcePath + "/resetzoom.png"_L1));
m_resetZoomAction->setShortcut(tr("Ctrl+0"));
m_viewMenu->addSeparator();
- m_viewMenu->addAction(tr("Contents"),
- this, &MainWindow::showContents, QKeySequence(tr("ALT+C")));
- m_viewMenu->addAction(tr("Index"),
- this, &MainWindow::showIndex, QKeySequence(tr("ALT+I")));
- m_viewMenu->addAction(tr("Bookmarks"),
- this, &MainWindow::showBookmarksDockWidget, QKeySequence(tr("ALT+O")));
- m_viewMenu->addAction(tr("Search"),
- this, &MainWindow::showSearch, QKeySequence(tr("ALT+S")));
- m_viewMenu->addAction(tr("Open Pages"),
- this, &MainWindow::showOpenPages, QKeySequence(tr("ALT+P")));
+ m_viewMenu->addAction(tr("Contents"), QKeySequence(tr("ALT+C")),
+ this, &MainWindow::showContents);
+ m_viewMenu->addAction(tr("Index"), QKeySequence(tr("ALT+I")),
+ this, &MainWindow::showIndex);
+ m_viewMenu->addAction(tr("Bookmarks"), QKeySequence(tr("ALT+O")),
+ this, &MainWindow::showBookmarksDockWidget);
+ m_viewMenu->addAction(tr("Search"), QKeySequence(tr("ALT+S")),
+ this, &MainWindow::showSearch);
+ m_viewMenu->addAction(tr("Open Pages"), QKeySequence(tr("ALT+P")),
+ this, &MainWindow::showOpenPages);
menu = menuBar()->addMenu(tr("&Go"));
menu->addAction(globalActions->homeAction());
@@ -605,7 +547,7 @@ void MainWindow::setupActions()
m_syncAction = menu->addAction(tr("Sync with Table of Contents"),
this, &MainWindow::syncContents);
m_syncAction->setIconText(tr("Sync"));
- m_syncAction->setIcon(QIcon(resourcePath + QLatin1String("/synctoc.png")));
+ m_syncAction->setIcon(QIcon(resourcePath + "/synctoc.png"_L1));
menu->addSeparator();
@@ -641,12 +583,13 @@ void MainWindow::setupActions()
m_aboutAction->setMenuRole(QAction::AboutRole);
#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
- m_resetZoomAction->setIcon(QIcon::fromTheme("zoom-original" , m_resetZoomAction->icon()));
- m_syncAction->setIcon(QIcon::fromTheme("view-refresh" , m_syncAction->icon()));
+ m_resetZoomAction->setIcon(QIcon::fromTheme("zoom-original"_L1, m_resetZoomAction->icon()));
+ m_syncAction->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::ViewRefresh,
+ m_syncAction->icon()));
#endif
QToolBar *navigationBar = addToolBar(tr("Navigation Toolbar"));
- navigationBar->setObjectName(QLatin1String("NavigationToolBar"));
+ navigationBar->setObjectName("NavigationToolBar"_L1);
navigationBar->addAction(globalActions->backAction());
navigationBar->addAction(globalActions->nextAction());
navigationBar->addAction(globalActions->homeAction());
@@ -667,8 +610,8 @@ void MainWindow::setupActions()
menuBar()->insertMenu(menu->menuAction(), windowMenu);
windowMenu->addAction(tr("Zoom"),
this, &QWidget::showMaximized);
- windowMenu->addAction(tr("Minimize"),
- this, &QWidget::showMinimized, QKeySequence(tr("Ctrl+M")));
+ windowMenu->addAction(tr("Minimize"), QKeySequence(tr("Ctrl+M")),
+ this, &QWidget::showMinimized);
#endif
// content viewer connections
@@ -730,12 +673,12 @@ void MainWindow::setupFilterToolbar()
return;
m_filterCombo = new QComboBox(this);
- m_filterCombo->setMinimumWidth(QFontMetrics(QFont()).
- horizontalAdvance(QLatin1String("MakeTheComboBoxWidthEnough")));
+ m_filterCombo->setMinimumWidth(QFontMetrics({}).
+ horizontalAdvance("MakeTheComboBoxWidthEnough"_L1));
QToolBar *filterToolBar = addToolBar(tr("Filter Toolbar"));
- filterToolBar->setObjectName(QLatin1String("FilterToolBar"));
- filterToolBar->addWidget(new QLabel(tr("Filtered by:").append(QLatin1Char(' ')),
+ filterToolBar->setObjectName("FilterToolBar"_L1);
+ filterToolBar->addWidget(new QLabel(tr("Filtered by:").append(u' '),
this));
filterToolBar->addWidget(m_filterCombo);
@@ -762,7 +705,7 @@ void MainWindow::setupAddressToolbar()
m_addressLineEdit = new QLineEdit(this);
QToolBar *addressToolBar = addToolBar(tr("Address Toolbar"));
- addressToolBar->setObjectName(QLatin1String("AddressToolBar"));
+ addressToolBar->setObjectName("AddressToolBar"_L1);
insertToolBarBreak(addressToolBar);
addressToolBar->addWidget(new QLabel(tr("Address:").append(QChar::Space),
@@ -774,8 +717,7 @@ void MainWindow::setupAddressToolbar()
toolBarMenu()->addAction(addressToolBar->toggleViewAction());
// address lineedit
- connect(m_addressLineEdit, &QLineEdit::returnPressed,
- this, &MainWindow::gotoAddress);
+ connect(m_addressLineEdit, &QLineEdit::returnPressed, this, &MainWindow::gotoAddress);
connect(m_centralWidget, &CentralWidget::currentViewerChanged,
this, QOverload<>::of(&MainWindow::showNewAddress));
connect(m_centralWidget, &CentralWidget::sourceChanged,
@@ -791,14 +733,14 @@ void MainWindow::updateAboutMenuText()
QString str;
QString trStr;
QString currentLang = QLocale::system().name();
- int i = currentLang.indexOf(QLatin1Char('_'));
+ int i = currentLang.indexOf(u'_');
if (i > -1)
currentLang = currentLang.left(i);
QDataStream s(&ba, QIODevice::ReadOnly);
while (!s.atEnd()) {
s >> lang;
s >> str;
- if (lang == QLatin1String("default") && trStr.isEmpty()) {
+ if (lang == "default"_L1 && trStr.isEmpty()) {
trStr = str;
} else if (lang == currentLang) {
trStr = str;
@@ -873,14 +815,14 @@ void MainWindow::showAboutDialog()
QString lang;
QByteArray cba;
QString currentLang = QLocale::system().name();
- int i = currentLang.indexOf(QLatin1Char('_'));
+ int i = currentLang.indexOf(u'_');
if (i > -1)
currentLang = currentLang.left(i);
QDataStream s(&ba, QIODevice::ReadOnly);
while (!s.atEnd()) {
s >> lang;
s >> cba;
- if (lang == QLatin1String("default") && contents.isEmpty()) {
+ if (lang == "default"_L1 && contents.isEmpty()) {
contents = cba;
} else if (lang == currentLang) {
contents = cba;
@@ -904,19 +846,20 @@ void MainWindow::showAboutDialog()
} else {
QByteArray resources;
#if defined(BROWSER_QTWEBKIT)
- const QString browser = QStringLiteral("Qt WebKit");
+ QString browser = QStringLiteral("Qt WebKit");
#else
- const QString browser = QStringLiteral("QTextBrowser");
+ QString browser = QStringLiteral("QTextBrowser");
#endif
+ if (m_centralWidget->currentHelpViewer())
+ browser = QStringLiteral("QLiteHtmlWidget");
aboutDia.setText(tr("<center>"
"<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"), QLatin1String(QT_VERSION_STR), browser, QStringLiteral("2020")),
+ .arg(tr("Qt Assistant"), QLatin1StringView(QT_VERSION_STR), browser, QString()),
resources);
- QLatin1String path(":/qt-project.org/assistant/images/assistant-128.png");
- aboutDia.setPixmap(QString(path));
+ aboutDia.setPixmap(QString(":/qt-project.org/assistant/images/assistant-128.png"_L1));
}
if (aboutDia.windowTitle().isEmpty())
aboutDia.setWindowTitle(tr("About %1").arg(windowTitle()));
@@ -1127,13 +1070,12 @@ QString MainWindow::collectionFileDirectory(bool createDir, const QString &cache
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
if (collectionPath.isEmpty()) {
if (cacheDir.isEmpty())
- collectionPath = QDir::homePath() + QDir::separator()
- + QLatin1String(".assistant");
+ collectionPath = QDir::homePath() + QDir::separator() + ".assistant"_L1;
else
- collectionPath = QDir::homePath() + QLatin1String("/.") + cacheDir;
+ collectionPath = QDir::homePath() + "/."_L1 + cacheDir;
} else {
if (cacheDir.isEmpty())
- collectionPath = collectionPath + QLatin1String("/QtProject/Assistant");
+ collectionPath = collectionPath + "/QtProject/Assistant"_L1;
else
collectionPath = collectionPath + QDir::separator() + cacheDir;
}
@@ -1149,9 +1091,8 @@ QString MainWindow::defaultHelpCollectionFileName()
{
TRACE_OBJ
// forces creation of the default collection file path
- return collectionFileDirectory(true) + QDir::separator() +
- QString(QLatin1String("qthelpcollection_%1.qhc")).
- arg(QLatin1String(QT_VERSION_STR));
+ return collectionFileDirectory(true) + QDir::separator()
+ + QString("qthelpcollection_%1.qhc"_L1).arg(QLatin1StringView(QT_VERSION_STR));
}
void MainWindow::currentFilterChanged(const QString &filter)
diff --git a/src/assistant/assistant/mainwindow.h b/src/assistant/assistant/mainwindow.h
index 22983c787..9629af5dd 100644
--- a/src/assistant/assistant/mainwindow.h
+++ b/src/assistant/assistant/mainwindow.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
diff --git a/src/assistant/assistant/openpagesmanager.cpp b/src/assistant/assistant/openpagesmanager.cpp
index f3acb4656..2657c98cb 100644
--- a/src/assistant/assistant/openpagesmanager.cpp
+++ b/src/assistant/assistant/openpagesmanager.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Assistant module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "openpagesmanager.h"
@@ -42,6 +17,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
OpenPagesManager *OpenPagesManager::m_instance = nullptr;
OpenPagesManager *OpenPagesManager::createInstance(QObject *parent,
@@ -113,19 +90,19 @@ void OpenPagesManager::setupInitialPages(bool defaultCollection,
m_model->addPage(helpEngine.homePage());
break;
case ShowBlankPage:
- m_model->addPage(QUrl(QLatin1String("about:blank")));
+ m_model->addPage(QUrl("about:blank"_L1));
break;
case ShowLastPages: {
const QStringList &lastShownPageList = helpEngine.lastShownPages();
- const int pageCount = lastShownPageList.count();
+ const int pageCount = lastShownPageList.size();
if (pageCount == 0) {
if (defaultCollection)
- m_model->addPage(QUrl(QLatin1String("help")));
+ m_helpPageViewer = m_model->addPage(QUrl("help"_L1));
else
- m_model->addPage(QUrl(QLatin1String("about:blank")));
+ m_model->addPage(QUrl("about:blank"_L1));
} else {
QStringList zoomFactors = helpEngine.lastZoomFactors();
- while (zoomFactors.count() < pageCount)
+ while (zoomFactors.size() < pageCount)
zoomFactors.append(CollectionConfiguration::DefaultZoomFactor);
initialPage = helpEngine.lastTabPage();
if (initialPage >= pageCount) {
@@ -136,7 +113,7 @@ void OpenPagesManager::setupInitialPages(bool defaultCollection,
for (int curPage = 0; curPage < pageCount; ++curPage) {
const QString &curFile = lastShownPageList.at(curPage);
if (helpEngine.findFile(curFile).isValid()
- || curFile == QLatin1String("about:blank")) {
+ || curFile == "about:blank"_L1) {
m_model->addPage(curFile, zoomFactors.at(curPage).toFloat());
} else if (curPage <= initialPage && initialPage > 0)
--initialPage;
@@ -160,7 +137,7 @@ void OpenPagesManager::setupInitialPages(bool defaultCollection,
HelpViewer *OpenPagesManager::createBlankPage()
{
TRACE_OBJ
- return createPage(QUrl(QLatin1String("about:blank")));
+ return createPage(QUrl("about:blank"_L1));
}
void OpenPagesManager::closeCurrentPage()
@@ -171,7 +148,7 @@ void OpenPagesManager::closeCurrentPage()
= m_openPagesWidget->selectionModel()->selectedRows();
if (selectedIndexes.isEmpty())
return;
- Q_ASSERT(selectedIndexes.count() == 1);
+ Q_ASSERT(selectedIndexes.size() == 1);
removePage(selectedIndexes.first().row());
}
@@ -240,7 +217,7 @@ void OpenPagesManager::closeOrReloadPages(const QString &nameSpace, bool tryRelo
if (tryReload && HelpEngineWrapper::instance().findFile(page->source()).isValid())
page->reload();
else if (m_model->rowCount() == 1)
- page->setSource(QUrl(QLatin1String("about:blank")));
+ page->setSource(QUrl("about:blank"_L1));
else
removePage(i);
}
@@ -268,6 +245,12 @@ void OpenPagesManager::setCurrentPage(int index)
setCurrentPage(m_model->pageAt(index));
}
+void OpenPagesManager::resetHelpPage()
+{
+ if (m_helpPageViewer)
+ m_helpPageViewer->reload();
+}
+
void OpenPagesManager::setCurrentPage(HelpViewer *page)
{
TRACE_OBJ
diff --git a/src/assistant/assistant/openpagesmanager.h b/src/assistant/assistant/openpagesmanager.h
index 10f97f1bb..f61bf0c8c 100644
--- a/src/assistant/assistant/openpagesmanager.h
+++ b/src/assistant/assistant/openpagesmanager.h
@@ -1,35 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Assistant module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef OPENPAGESMANAGER_H
#define OPENPAGESMANAGER_H
#include <QtCore/QObject>
+#include <QtCore/QPointer>
QT_BEGIN_NAMESPACE
@@ -59,6 +35,8 @@ public:
int pageCount() const;
void setCurrentPage(int index);
+ void resetHelpPage();
+
public slots:
HelpViewer *createPage(const QUrl &url, bool fromSearch = false);
HelpViewer *createNewPageFromSearch(const QUrl &url);
@@ -101,6 +79,8 @@ private:
OpenPagesWidget *m_openPagesWidget = nullptr;
OpenPagesSwitcher *m_openPagesSwitcher = nullptr;
+ QPointer<HelpViewer> m_helpPageViewer;
+
static OpenPagesManager *m_instance;
};
diff --git a/src/assistant/assistant/openpagesmodel.cpp b/src/assistant/assistant/openpagesmodel.cpp
index 41a4504e7..12620f6f8 100644
--- a/src/assistant/assistant/openpagesmodel.cpp
+++ b/src/assistant/assistant/openpagesmodel.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Assistant module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "openpagesmodel.h"
#include "helpenginewrapper.h"
@@ -36,6 +11,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
OpenPagesModel::OpenPagesModel(QObject *parent) : QAbstractTableModel(parent)
{
TRACE_OBJ
@@ -44,7 +21,7 @@ OpenPagesModel::OpenPagesModel(QObject *parent) : QAbstractTableModel(parent)
int OpenPagesModel::rowCount(const QModelIndex &parent) const
{
TRACE_OBJ
- return parent.isValid() ? 0 : m_pages.count();
+ return parent.isValid() ? 0 : m_pages.size();
}
int OpenPagesModel::columnCount(const QModelIndex &/*parent*/) const
@@ -60,20 +37,20 @@ QVariant OpenPagesModel::data(const QModelIndex &index, int role) const
|| role != Qt::DisplayRole)
return QVariant();
QString title = m_pages.at(index.row())->title();
- title.replace(QLatin1Char('&'), QLatin1String("&&"));
- return title.isEmpty() ? QLatin1String("(Untitled)") : title;
+ title.replace(u'&', "&&"_L1);
+ return title.isEmpty() ? "(Untitled)"_L1 : title;
}
-void OpenPagesModel::addPage(const QUrl &url, qreal zoom)
+HelpViewer *OpenPagesModel::addPage(const QUrl &url, qreal zoom)
{
TRACE_OBJ
beginInsertRows(QModelIndex(), rowCount(), rowCount());
HelpViewer *page = new HelpViewer(zoom);
- connect(page, &HelpViewer::titleChanged,
- this, &OpenPagesModel::handleTitleChanged);
+ connect(page, &HelpViewer::titleChanged, this, &OpenPagesModel::handleTitleChanged);
m_pages << page;
endInsertRows();
page->setSource(url);
+ return page;
}
void OpenPagesModel::removePage(int index)
diff --git a/src/assistant/assistant/openpagesmodel.h b/src/assistant/assistant/openpagesmodel.h
index 781a65127..3e184bf13 100644
--- a/src/assistant/assistant/openpagesmodel.h
+++ b/src/assistant/assistant/openpagesmodel.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Assistant module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef OPENPAGESMODEL_H
#define OPENPAGESMODEL_H
@@ -48,7 +23,7 @@ public:
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
- void addPage(const QUrl &url, qreal zoom = 0);
+ HelpViewer *addPage(const QUrl &url, qreal zoom = 0);
void removePage(int index);
HelpViewer *pageAt(int index) const;
diff --git a/src/assistant/assistant/openpagesswitcher.cpp b/src/assistant/assistant/openpagesswitcher.cpp
index ee932def9..c5d97bd24 100644
--- a/src/assistant/assistant/openpagesswitcher.cpp
+++ b/src/assistant/assistant/openpagesswitcher.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Assistant module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "openpagesswitcher.h"
diff --git a/src/assistant/assistant/openpagesswitcher.h b/src/assistant/assistant/openpagesswitcher.h
index 9b49e14ed..b904bccdb 100644
--- a/src/assistant/assistant/openpagesswitcher.h
+++ b/src/assistant/assistant/openpagesswitcher.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Assistant module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef OPENPAGESSWITCHER_H
#define OPENPAGESSWITCHER_H
diff --git a/src/assistant/assistant/openpageswidget.cpp b/src/assistant/assistant/openpageswidget.cpp
index 2be24c164..937e55ba9 100644
--- a/src/assistant/assistant/openpageswidget.cpp
+++ b/src/assistant/assistant/openpageswidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Assistant module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "openpageswidget.h"
diff --git a/src/assistant/assistant/openpageswidget.h b/src/assistant/assistant/openpageswidget.h
index 7f2f5913a..6cb27b6fb 100644
--- a/src/assistant/assistant/openpageswidget.h
+++ b/src/assistant/assistant/openpageswidget.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Assistant module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef OPENPAGESWIDGET_H
#define OPENPAGESWIDGET_H
diff --git a/src/assistant/assistant/preferencesdialog.cpp b/src/assistant/assistant/preferencesdialog.cpp
index 9af0ff188..e8ad63194 100644
--- a/src/assistant/assistant/preferencesdialog.cpp
+++ b/src/assistant/assistant/preferencesdialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "preferencesdialog.h"
#include "centralwidget.h"
@@ -46,6 +21,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
PreferencesDialog::PreferencesDialog(QWidget *parent)
: QDialog(parent)
, m_appFontChanged(false)
@@ -68,7 +45,7 @@ PreferencesDialog::PreferencesDialog(QWidget *parent)
if (m_hideDocsTab) {
m_ui.tabWidget->removeTab(m_ui.tabWidget->indexOf(m_ui.docsTab));
} else {
- connect(m_ui.docSettingsWidget, &HelpDocSettingsWidget::docSettingsChanged,
+ connect(m_ui.docSettingsWidget, &HelpDocSettingsWidget::docSettingsChanged, this,
[this](const HelpDocSettings &settings) {
m_docSettings = settings;
if (m_hideFiltersTab)
@@ -153,7 +130,7 @@ void PreferencesDialog::applyChanges()
QString homePage = m_ui.homePageLineEdit->text();
if (homePage.isEmpty())
- homePage = QLatin1String("help");
+ homePage = "help"_L1;
helpEngine.setHomePage(homePage);
const int option = m_ui.helpStartComboBox->currentIndex();
@@ -255,14 +232,14 @@ void PreferencesDialog::updateOptionsPage()
void PreferencesDialog::setBlankPage()
{
- m_ui.homePageLineEdit->setText(QLatin1String("about:blank"));
+ m_ui.homePageLineEdit->setText("about:blank"_L1);
}
void PreferencesDialog::setCurrentPage()
{
QString homepage = CentralWidget::instance()->currentSource().toString();
if (homepage.isEmpty())
- homepage = QLatin1String("help");
+ homepage = "help"_L1;
m_ui.homePageLineEdit->setText(homepage);
}
diff --git a/src/assistant/assistant/preferencesdialog.h b/src/assistant/assistant/preferencesdialog.h
index a65066fde..9a1d2d3c4 100644
--- a/src/assistant/assistant/preferencesdialog.h
+++ b/src/assistant/assistant/preferencesdialog.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PREFERENCESDIALOG_H
#define PREFERENCESDIALOG_H
diff --git a/src/assistant/assistant/qtdocinstaller.cpp b/src/assistant/assistant/qtdocinstaller.cpp
index 1a758577c..ba72fa1e0 100644
--- a/src/assistant/assistant/qtdocinstaller.cpp
+++ b/src/assistant/assistant/qtdocinstaller.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "tracer.h"
#include <QtCore/QDir>
@@ -37,6 +12,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
QtDocInstaller::QtDocInstaller(const QList<DocInfo> &docInfos)
: m_abort(false), m_docInfos(docInfos)
{
@@ -64,10 +41,10 @@ void QtDocInstaller::run()
{
TRACE_OBJ
m_qchDir.setPath(QLibraryInfo::path(QLibraryInfo::DocumentationPath));
- m_qchFiles = m_qchDir.entryList(QStringList() << QLatin1String("*.qch"));
+ m_qchFiles = m_qchDir.entryList(QStringList() << "*.qch"_L1);
bool changes = false;
- for (const DocInfo &docInfo : qAsConst(m_docInfos)) {
+ for (const DocInfo &docInfo : std::as_const(m_docInfos)) {
changes |= installDoc(docInfo);
m_mutex.lock();
if (m_abort) {
@@ -89,14 +66,14 @@ bool QtDocInstaller::installDoc(const DocInfo &docInfo)
dt = QDateTime::fromString(info.first(), Qt::ISODate);
QString qchFile;
- if (info.count() == 2)
+ if (info.size() == 2)
qchFile = info.last();
if (m_qchFiles.isEmpty()) {
emit qchFileNotFound(component);
return false;
}
- for (const QString &f : qAsConst(m_qchFiles)) {
+ for (const QString &f : std::as_const(m_qchFiles)) {
if (f.startsWith(component)) {
QFileInfo fi(m_qchDir.absolutePath() + QDir::separator() + f);
if (dt.isValid() && fi.lastModified().toSecsSinceEpoch() == dt.toSecsSinceEpoch()
diff --git a/src/assistant/assistant/qtdocinstaller.h b/src/assistant/assistant/qtdocinstaller.h
index 5feee223a..932c077ca 100644
--- a/src/assistant/assistant/qtdocinstaller.h
+++ b/src/assistant/assistant/qtdocinstaller.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QTDOCINSTALLER
#define QTDOCINSTALLER
diff --git a/src/assistant/assistant/remotecontrol.cpp b/src/assistant/assistant/remotecontrol.cpp
index 0c9cc6c14..4b7941318 100644
--- a/src/assistant/assistant/remotecontrol.cpp
+++ b/src/assistant/assistant/remotecontrol.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "remotecontrol.h"
#include "centralwidget.h"
@@ -55,6 +30,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
RemoteControl::RemoteControl(MainWindow *mainWindow)
: QObject(mainWindow)
, m_mainWindow(mainWindow)
@@ -73,7 +50,7 @@ RemoteControl::RemoteControl(MainWindow *mainWindow)
void RemoteControl::handleCommandString(const QString &cmdString)
{
TRACE_OBJ
- const QStringList &commands = cmdString.split(QLatin1Char(';'));
+ const QStringList &commands = cmdString.split(u';');
for (const QString &command : commands) {
QString cmd, arg;
splitInputString(command, cmd, arg);
@@ -82,27 +59,27 @@ void RemoteControl::handleCommandString(const QString &cmdString)
QMessageBox::information(nullptr, tr("Debugging Remote Control"),
tr("Received Command: %1 %2").arg(cmd).arg(arg));
- if (cmd == QLatin1String("debug"))
+ if (cmd == "debug"_L1)
handleDebugCommand(arg);
- else if (cmd == QLatin1String("show"))
+ else if (cmd == "show"_L1)
handleShowOrHideCommand(arg, true);
- else if (cmd == QLatin1String("hide"))
+ else if (cmd == "hide"_L1)
handleShowOrHideCommand(arg, false);
- else if (cmd == QLatin1String("setsource"))
+ else if (cmd == "setsource"_L1)
handleSetSourceCommand(arg);
- else if (cmd == QLatin1String("synccontents"))
+ else if (cmd == "synccontents"_L1)
handleSyncContentsCommand();
- else if (cmd == QLatin1String("activatekeyword"))
+ else if (cmd == "activatekeyword"_L1)
handleActivateKeywordCommand(arg);
- else if (cmd == QLatin1String("activateidentifier"))
+ else if (cmd == "activateidentifier"_L1)
handleActivateIdentifierCommand(arg);
- else if (cmd == QLatin1String("expandtoc"))
+ else if (cmd == "expandtoc"_L1)
handleExpandTocCommand(arg);
- else if (cmd == QLatin1String("setcurrentfilter"))
+ else if (cmd == "setcurrentfilter"_L1)
handleSetCurrentFilterCommand(arg);
- else if (cmd == QLatin1String("register"))
+ else if (cmd == "register"_L1)
handleRegisterCommand(arg);
- else if (cmd == QLatin1String("unregister"))
+ else if (cmd == "unregister"_L1)
handleUnregisterCommand(arg);
else
break;
@@ -116,7 +93,7 @@ void RemoteControl::splitInputString(const QString &input, QString &cmd,
{
TRACE_OBJ
QString cmdLine = input.trimmed();
- int i = cmdLine.indexOf(QLatin1Char(' '));
+ int i = cmdLine.indexOf(u' ');
cmd = cmdLine.left(i);
arg = cmdLine.mid(i + 1);
cmd = cmd.toLower();
@@ -125,19 +102,19 @@ void RemoteControl::splitInputString(const QString &input, QString &cmd,
void RemoteControl::handleDebugCommand(const QString &arg)
{
TRACE_OBJ
- m_debug = arg == QLatin1String("on");
+ m_debug = arg == "on"_L1;
}
void RemoteControl::handleShowOrHideCommand(const QString &arg, bool show)
{
TRACE_OBJ
- if (arg.toLower() == QLatin1String("contents"))
+ if (arg.toLower() == "contents"_L1)
m_mainWindow->setContentsVisible(show);
- else if (arg.toLower() == QLatin1String("index"))
+ else if (arg.toLower() == "index"_L1)
m_mainWindow->setIndexVisible(show);
- else if (arg.toLower() == QLatin1String("bookmarks"))
+ else if (arg.toLower() == "bookmarks"_L1)
m_mainWindow->setBookmarksVisible(show);
- else if (arg.toLower() == QLatin1String("search"))
+ else if (arg.toLower() == "search"_L1)
m_mainWindow->setSearchVisible(show);
}
diff --git a/src/assistant/assistant/remotecontrol.h b/src/assistant/assistant/remotecontrol.h
index 781d563f5..6b566a711 100644
--- a/src/assistant/assistant/remotecontrol.h
+++ b/src/assistant/assistant/remotecontrol.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef REMOTECONTROL_H
#define REMOTECONTROL_H
diff --git a/src/assistant/assistant/searchwidget.cpp b/src/assistant/assistant/searchwidget.cpp
index d6466b1cc..01d272116 100644
--- a/src/assistant/assistant/searchwidget.cpp
+++ b/src/assistant/assistant/searchwidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "tracer.h"
#include "mainwindow.h"
@@ -50,6 +25,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
SearchWidget::SearchWidget(QHelpSearchEngine *engine, QWidget *parent)
: QWidget(parent)
, zoomCount(0)
@@ -186,7 +163,7 @@ void SearchWidget::contextMenuEvent(QContextMenuEvent *contextMenuEvent)
QKeySequence keySeq;
#if QT_CONFIG(clipboard)
keySeq = QKeySequence::Copy;
- QAction *copyAction = menu.addAction(tr("&Copy") + QLatin1Char('\t') +
+ QAction *copyAction = menu.addAction(tr("&Copy") + u'\t' +
keySeq.toString(QKeySequence::NativeText));
copyAction->setEnabled(QTextCursor(browser->textCursor()).hasSelection());
@@ -195,16 +172,15 @@ void SearchWidget::contextMenuEvent(QContextMenuEvent *contextMenuEvent)
#endif
keySeq = QKeySequence(Qt::CTRL);
- QAction *newTabAction = menu.addAction(tr("Open Link in New Tab") +
- QLatin1Char('\t') + keySeq.toString(QKeySequence::NativeText) +
- QLatin1String("LMB"));
+ QAction *newTabAction = menu.addAction(tr("Open Link in New Tab") + u'\t'
+ + keySeq.toString(QKeySequence::NativeText) + "LMB"_L1);
newTabAction->setEnabled(!link.isEmpty() && link.isValid());
menu.addSeparator();
keySeq = QKeySequence::SelectAll;
- QAction *selectAllAction = menu.addAction(tr("Select All") +
- QLatin1Char('\t') + keySeq.toString(QKeySequence::NativeText));
+ QAction *selectAllAction =
+ menu.addAction(tr("Select All") + u'\t' + keySeq.toString(QKeySequence::NativeText));
QAction *usedAction = menu.exec(mapToGlobal(contextMenuEvent->pos()));
#if QT_CONFIG(clipboard)
diff --git a/src/assistant/assistant/searchwidget.h b/src/assistant/assistant/searchwidget.h
index 29443bb52..11df4796c 100644
--- a/src/assistant/assistant/searchwidget.h
+++ b/src/assistant/assistant/searchwidget.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef SEARCHWIDGET_H
#define SEARCHWIDGET_H
diff --git a/src/assistant/assistant/stdinlistener.cpp b/src/assistant/assistant/stdinlistener.cpp
index 43c13f299..40cc55565 100644
--- a/src/assistant/assistant/stdinlistener.cpp
+++ b/src/assistant/assistant/stdinlistener.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "stdinlistener.h"
diff --git a/src/assistant/assistant/stdinlistener.h b/src/assistant/assistant/stdinlistener.h
index 10c7a713f..b175a59a9 100644
--- a/src/assistant/assistant/stdinlistener.h
+++ b/src/assistant/assistant/stdinlistener.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef STDINLISTENER_H
#define STDINLISTENER_H
diff --git a/src/assistant/assistant/stdinlistener_win.cpp b/src/assistant/assistant/stdinlistener_win.cpp
index 8324adb28..f7bb7462e 100644
--- a/src/assistant/assistant/stdinlistener_win.cpp
+++ b/src/assistant/assistant/stdinlistener_win.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "stdinlistener_win.h"
diff --git a/src/assistant/assistant/stdinlistener_win.h b/src/assistant/assistant/stdinlistener_win.h
index a8834a9c2..0ddf572ed 100644
--- a/src/assistant/assistant/stdinlistener_win.h
+++ b/src/assistant/assistant/stdinlistener_win.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef STDINLISTENER_WIN_H
#define STDINLISTENER_WIN_H
@@ -46,7 +21,7 @@ signals:
void receivedCommand(const QString &cmd);
private:
- void run();
+ void run() override;
bool ok;
};
diff --git a/src/assistant/assistant/topicchooser.cpp b/src/assistant/assistant/topicchooser.cpp
index ec9faddb6..8553823dd 100644
--- a/src/assistant/assistant/topicchooser.cpp
+++ b/src/assistant/assistant/topicchooser.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "tracer.h"
#include "topicchooser.h"
diff --git a/src/assistant/assistant/topicchooser.h b/src/assistant/assistant/topicchooser.h
index 2406ef99f..ea8b08e26 100644
--- a/src/assistant/assistant/topicchooser.h
+++ b/src/assistant/assistant/topicchooser.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef TOPICCHOOSER_H
#define TOPICCHOOSER_H
diff --git a/src/assistant/assistant/tracer.h b/src/assistant/assistant/tracer.h
index de7a2b719..03d872584 100644
--- a/src/assistant/assistant/tracer.h
+++ b/src/assistant/assistant/tracer.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef TRACER_H
#define TRACER_H
diff --git a/src/assistant/assistant/xbelsupport.cpp b/src/assistant/assistant/xbelsupport.cpp
index 1ff700209..ffe71c755 100644
--- a/src/assistant/assistant/xbelsupport.cpp
+++ b/src/assistant/assistant/xbelsupport.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "tracer.h"
#include "xbelsupport.h"
@@ -37,6 +12,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
struct Bookmark {
QString title;
QString url;
@@ -57,9 +34,9 @@ void XbelWriter::writeToFile(QIODevice *device)
setDevice(device);
writeStartDocument();
- writeDTD(QLatin1String("<!DOCTYPE xbel>"));
- writeStartElement(QLatin1String("xbel"));
- writeAttribute(QLatin1String("version"), QLatin1String("1.0"));
+ writeDTD("<!DOCTYPE xbel>"_L1);
+ writeStartElement("xbel"_L1);
+ writeAttribute("version"_L1, "1.0"_L1);
const QModelIndex root;
for (int i = 0; i < bookmarkModel->rowCount(root); ++i)
@@ -76,19 +53,17 @@ void XbelWriter::writeData(const QModelIndex &index)
entry.url = index.data(UserRoleUrl).toString();
if (index.data(UserRoleFolder).toBool()) {
- writeStartElement(QLatin1String("folder"));
+ writeStartElement("folder"_L1);
entry.folded = !index.data(UserRoleExpanded).toBool();
- writeAttribute(QLatin1String("folded"), entry.folded
- ? QLatin1String("yes") : QLatin1String("no"));
- writeTextElement(QLatin1String("title"), entry.title);
-
+ writeAttribute("folded"_L1, entry.folded ? "yes"_L1 : "no"_L1);
+ writeTextElement("title"_L1, entry.title);
for (int i = 0; i < bookmarkModel->rowCount(index); ++i)
writeData(bookmarkModel->index(i, 0 , index));
writeEndElement();
} else {
- writeStartElement(QLatin1String("bookmark"));
- writeAttribute(QLatin1String("href"), entry.url);
- writeTextElement(QLatin1String("title"), entry.title);
+ writeStartElement("bookmark"_L1);
+ writeAttribute("href"_L1, entry.url);
+ writeTextElement("title"_L1, entry.title);
writeEndElement();
}
}
@@ -112,16 +87,14 @@ bool XbelReader::readFromFile(QIODevice *device)
readNext();
if (isStartElement()) {
- if (name() == QLatin1String("xbel")
- && attributes().value(QLatin1String("version"))
- == QLatin1String("1.0")) {
+ if (name() == "xbel"_L1 && attributes().value("version"_L1) == "1.0"_L1) {
const QModelIndex root;
parents.append(bookmarkModel->addItem(root, true));
readXBEL();
bookmarkModel->setData(parents.first(),
QDate::currentDate().toString(Qt::ISODate), Qt::EditRole);
} else {
- raiseError(QLatin1String("The file is not an XBEL version 1.0 file."));
+ raiseError("The file is not an XBEL version 1.0 file."_L1);
}
}
}
@@ -139,9 +112,9 @@ void XbelReader::readXBEL()
break;
if (isStartElement()) {
- if (name() == QLatin1String("folder"))
+ if (name() == "folder"_L1)
readFolder();
- else if (name() == QLatin1String("bookmark"))
+ else if (name() == "bookmark"_L1)
readBookmark();
else
readUnknownElement();
@@ -153,9 +126,8 @@ void XbelReader::readFolder()
{
TRACE_OBJ
parents.append(bookmarkModel->addItem(parents.last(), true));
- bookmarkModel->setData(parents.last(),
- attributes().value(QLatin1String("folded")) == QLatin1String("no"),
- UserRoleExpanded);
+ bookmarkModel->setData(parents.last(), attributes().value("folded"_L1) == "no"_L1,
+ UserRoleExpanded);
while (!atEnd()) {
readNext();
@@ -164,12 +136,11 @@ void XbelReader::readFolder()
break;
if (isStartElement()) {
- if (name() == QLatin1String("title")) {
- bookmarkModel->setData(parents.last(), readElementText(),
- Qt::EditRole);
- } else if (name() == QLatin1String("folder"))
+ if (name() == "title"_L1)
+ bookmarkModel->setData(parents.last(), readElementText(), Qt::EditRole);
+ else if (name() == "folder"_L1)
readFolder();
- else if (name() == QLatin1String("bookmark"))
+ else if (name() == "bookmark"_L1)
readBookmark();
else
readUnknownElement();
@@ -183,10 +154,8 @@ void XbelReader::readBookmark()
{
TRACE_OBJ
const QModelIndex &index = bookmarkModel->addItem(parents.last(), false);
- if (BookmarkItem* item = bookmarkModel->itemFromIndex(index)) {
- item->setData(UserRoleUrl, attributes().value(QLatin1String("href"))
- .toString());
- }
+ if (BookmarkItem* item = bookmarkModel->itemFromIndex(index))
+ item->setData(UserRoleUrl, attributes().value("href"_L1).toString());
while (!atEnd()) {
readNext();
@@ -195,7 +164,7 @@ void XbelReader::readBookmark()
break;
if (isStartElement()) {
- if (name() == QLatin1String("title"))
+ if (name() == "title"_L1)
bookmarkModel->setData(index, readElementText(), Qt::EditRole);
else
readUnknownElement();
diff --git a/src/assistant/assistant/xbelsupport.h b/src/assistant/assistant/xbelsupport.h
index 470647002..291792269 100644
--- a/src/assistant/assistant/xbelsupport.h
+++ b/src/assistant/assistant/xbelsupport.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef XBELSUPPORT_H
#define XBELSUPPORT_H
diff --git a/src/assistant/help/.prev_CMakeLists.txt b/src/assistant/help/.prev_CMakeLists.txt
deleted file mode 100644
index 2ecde4d80..000000000
--- a/src/assistant/help/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-# Generated from help.pro.
-
-#####################################################################
-## Help Module:
-#####################################################################
-
-qt_add_module(Help
- SOURCES
- qcompressedhelpinfo.cpp qcompressedhelpinfo.h
- qfilternamedialog.cpp qfilternamedialog.ui qfilternamedialog_p.h
- qhelp_global.cpp qhelp_global.h
- qhelpcollectionhandler.cpp qhelpcollectionhandler_p.h
- qhelpcontentwidget.cpp qhelpcontentwidget.h
- qhelpdbreader.cpp qhelpdbreader_p.h
- qhelpengine.cpp qhelpengine.h qhelpengine_p.h
- qhelpenginecore.cpp qhelpenginecore.h
- qhelpfilterdata.cpp qhelpfilterdata.h
- qhelpfilterengine.cpp qhelpfilterengine.h
- qhelpfiltersettings.cpp qhelpfiltersettings_p.h
- qhelpfiltersettingswidget.cpp qhelpfiltersettingswidget.h qhelpfiltersettingswidget.ui
- qhelpindexwidget.cpp qhelpindexwidget.h
- qhelplink.cpp qhelplink.h
- qhelpsearchengine.cpp qhelpsearchengine.h
- qhelpsearchindexreader.cpp qhelpsearchindexreader_p.h
- qhelpsearchindexreader_default.cpp qhelpsearchindexreader_default_p.h
- qhelpsearchindexwriter_default.cpp qhelpsearchindexwriter_default_p.h
- qhelpsearchquerywidget.cpp qhelpsearchquerywidget.h
- qhelpsearchresultwidget.cpp qhelpsearchresultwidget.h
- qoptionswidget.cpp qoptionswidget_p.h
- DEFINES
- -QT_ASCII_CAST_WARNINGS
- QHELP_LIB
- LIBRARIES
- Qt::CorePrivate
- Qt::Network
- PUBLIC_LIBRARIES
- Qt::Core
- Qt::Gui
- Qt::Sql
- Qt::Widgets
- PRIVATE_MODULE_INTERFACE
- Qt::CorePrivate
- ENABLE_AUTOGEN_TOOLS
- uic
-)
-
-# Resources:
-set(helpsystem_resource_files
- "images/1leftarrow.png"
- "images/1rightarrow.png"
- "images/3leftarrow.png"
- "images/3rightarrow.png"
- "images/mac/minus.png"
- "images/mac/plus.png"
- "images/win/minus.png"
- "images/win/plus.png"
-)
-
-qt_add_resource(Help "helpsystem"
- PREFIX
- "/qt-project.org/assistant"
- FILES
- ${helpsystem_resource_files}
-)
-
-qt_add_docs(Help
- doc/qthelp.qdocconf
-)
-
diff --git a/src/assistant/help/CMakeLists.txt b/src/assistant/help/CMakeLists.txt
index e80ee44ac..45c4c192e 100644
--- a/src/assistant/help/CMakeLists.txt
+++ b/src/assistant/help/CMakeLists.txt
@@ -1,47 +1,47 @@
-# Generated from help.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## Help Module:
#####################################################################
-qt_add_module(Help
+qt_internal_add_module(Help
SOURCES
+ # QtHelpCore
qcompressedhelpinfo.cpp qcompressedhelpinfo.h
- qfilternamedialog.cpp qfilternamedialog.ui qfilternamedialog_p.h
qhelp_global.cpp qhelp_global.h
qhelpcollectionhandler.cpp qhelpcollectionhandler_p.h
- qhelpcontentwidget.cpp qhelpcontentwidget.h
+ qhelpcontentitem.cpp qhelpcontentitem.h
qhelpdbreader.cpp qhelpdbreader_p.h
- qhelpengine.cpp qhelpengine.h qhelpengine_p.h
qhelpenginecore.cpp qhelpenginecore.h
qhelpfilterdata.cpp qhelpfilterdata.h
qhelpfilterengine.cpp qhelpfilterengine.h
- qhelpfiltersettings.cpp qhelpfiltersettings_p.h
+ qhelplink.cpp qhelplink.h
+ qhelpsearchenginecore.cpp qhelpsearchenginecore.h
+ qhelpsearchindexreader.cpp qhelpsearchindexreader_p.h
+ qhelpsearchindexwriter.cpp qhelpsearchindexwriter_p.h
+ qhelpsearchresult.cpp qhelpsearchresult.h
+ # QtHelp
+ qfilternamedialog.cpp qfilternamedialog.ui qfilternamedialog_p.h
+ qhelpcontentwidget.cpp qhelpcontentwidget.h
+ qhelpengine.cpp qhelpengine.h
qhelpfiltersettingswidget.cpp qhelpfiltersettingswidget.h qhelpfiltersettingswidget.ui
qhelpindexwidget.cpp qhelpindexwidget.h
- qhelplink.cpp qhelplink.h
qhelpsearchengine.cpp qhelpsearchengine.h
- qhelpsearchindexreader.cpp qhelpsearchindexreader_p.h
- qhelpsearchindexreader_default.cpp qhelpsearchindexreader_default_p.h
- qhelpsearchindexwriter_default.cpp qhelpsearchindexwriter_default_p.h
qhelpsearchquerywidget.cpp qhelpsearchquerywidget.h
qhelpsearchresultwidget.cpp qhelpsearchresultwidget.h
qoptionswidget.cpp qoptionswidget_p.h
DEFINES
# -QT_ASCII_CAST_WARNINGS # special case remove
QHELP_LIB
- LIBRARIES
- Qt::CorePrivate
- Qt::Network
PUBLIC_LIBRARIES
Qt::Core
Qt::Gui
Qt::Sql
Qt::Widgets
- PRIVATE_MODULE_INTERFACE
- Qt::CorePrivate
ENABLE_AUTOGEN_TOOLS
uic
+ NO_GENERATE_CPP_EXPORTS
)
# Resources:
@@ -56,14 +56,14 @@ set(helpsystem_resource_files
"images/win/plus.png"
)
-qt_add_resource(Help "helpsystem"
+qt_internal_add_resource(Help "helpsystem"
PREFIX
"/qt-project.org/assistant"
FILES
${helpsystem_resource_files}
)
-qt_add_docs(Help
+qt_internal_add_docs(Help
doc/qthelp.qdocconf
)
diff --git a/src/assistant/help/Qt5HelpConfigExtras.cmake.in b/src/assistant/help/Qt5HelpConfigExtras.cmake.in
deleted file mode 100644
index 1f7544b62..000000000
--- a/src/assistant/help/Qt5HelpConfigExtras.cmake.in
+++ /dev/null
@@ -1,41 +0,0 @@
-
-if (NOT TARGET Qt5::qcollectiongenerator)
- add_executable(Qt5::qcollectiongenerator IMPORTED)
-
-!!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
- set(imported_location \"${_qt5Help_install_prefix}/$${CMAKE_BIN_DIR}qcollectiongenerator$$CMAKE_BIN_SUFFIX\")
-!!ELSE
- set(imported_location \"$${CMAKE_BIN_DIR}qcollectiongenerator$$CMAKE_BIN_SUFFIX\")
-!!ENDIF
- _qt5_Help_check_file_exists(${imported_location})
-
- set_target_properties(Qt5::qcollectiongenerator PROPERTIES
- IMPORTED_LOCATION ${imported_location}
- )
-endif()
-
-if (NOT TARGET Qt5::qhelpgenerator)
- add_executable(Qt5::qhelpgenerator IMPORTED)
-
-!!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
- set(imported_location \"${_qt5Help_install_prefix}/$${CMAKE_BIN_DIR}qhelpgenerator$$CMAKE_BIN_SUFFIX\")
-!!ELSE
- set(imported_location \"$${CMAKE_BIN_DIR}qhelpgenerator$$CMAKE_BIN_SUFFIX\")
-!!ENDIF
- _qt5_Help_check_file_exists(${imported_location})
-
- set_target_properties(Qt5::qhelpgenerator PROPERTIES
- IMPORTED_LOCATION ${imported_location}
- )
-endif()
-
-# Create versionless tool targets.
-foreach(__qt_tool qcollectiongenerator qhelpgenerator)
- if(NOT \"${QT_NO_CREATE_VERSIONLESS_TARGETS}\" AND NOT TARGET Qt::${__qt_tool}
- AND TARGET Qt5::${__qt_tool})
- add_executable(Qt::${__qt_tool} IMPORTED)
- get_target_property(__qt_imported_location Qt5::${__qt_tool} IMPORTED_LOCATION)
- set_target_properties(Qt::${__qt_tool}
- PROPERTIES IMPORTED_LOCATION \"${__qt_imported_location}\")
- endif()
-endforeach()
diff --git a/src/assistant/help/doc/qthelp.qdocconf b/src/assistant/help/doc/qthelp.qdocconf
index 7bde6302d..95a80b6b4 100644
--- a/src/assistant/help/doc/qthelp.qdocconf
+++ b/src/assistant/help/doc/qthelp.qdocconf
@@ -15,9 +15,6 @@ qhp.QtHelp.virtualFolder = qthelp
qhp.QtHelp.indexTitle = Qt Help
qhp.QtHelp.indexRoot =
-qhp.QtHelp.filterAttributes = qthelp $QT_VERSION tools assistant qtrefdoc
-qhp.QtHelp.customFilters.QtHelp.name = QtHelp $QT_VERSION
-qhp.QtHelp.customFilters.QtHelp.filterAttributes = qthelp $QT_VERSION
qhp.QtHelp.subprojects = classes
qhp.QtHelp.subprojects.classes.title = C++ Classes
qhp.QtHelp.subprojects.classes.indexTitle = Qt Help C++ Classes
@@ -26,7 +23,7 @@ qhp.QtHelp.subprojects.classes.sortPages = true
language = Cpp
-depends += qtdoc qtcore qtassistant qtwidgets qmake
+depends += qtdoc qtcore qtwidgets qmake qtgui
headerdirs += ..
@@ -39,3 +36,6 @@ imagedirs = images
navigation.landingpage = "Qt Help"
navigation.cppclassespage = "Qt Help C++ Classes"
+
+# Enforce zero documentation warnings
+warninglimit = 0
diff --git a/src/assistant/help/doc/snippets/doc_src_qthelp.cpp b/src/assistant/help/doc/snippets/doc_src_qthelp.cpp
index aa8ef23dc..7498c22f3 100644
--- a/src/assistant/help/doc/snippets/doc_src_qthelp.cpp
+++ b/src/assistant/help/doc/snippets/doc_src_qthelp.cpp
@@ -1,69 +1,18 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//! [0]
-#include <QtHelp>
-//! [0]
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [6]
QHelpEngineCore helpEngine("mycollection.qhc");
...
// get all file references for the identifier
-QMap<QString, QUrl> links =
- helpEngine.linksForIdentifier(QLatin1String("MyDialog::ChangeButton"));
+QList<QHelpLink> links =
+ helpEngine.documentsForIdentifier(QLatin1String("MyDialog::ChangeButton"));
// If help is available for this keyword, get the help data
// of the first file reference.
if (links.count()) {
- QByteArray helpData = helpEngine->fileData(links.constBegin().value());
+ QByteArray helpData = helpEngine->fileData(links.constBegin()->url);
// show the documentation to the user
if (!helpData.isEmpty())
displayHelp(helpData);
diff --git a/src/assistant/help/doc/snippets/doc_src_qthelp.qdoc b/src/assistant/help/doc/snippets/doc_src_qthelp.qdoc
index 648598079..1d027a88e 100644
--- a/src/assistant/help/doc/snippets/doc_src_qthelp.qdoc
+++ b/src/assistant/help/doc/snippets/doc_src_qthelp.qdoc
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
//! [1]
QT += help
diff --git a/src/assistant/help/doc/src/qthelp-examples.qdoc b/src/assistant/help/doc/src/qthelp-examples.qdoc
index 051454a5b..e2191bb03 100644
--- a/src/assistant/help/doc/src/qthelp-examples.qdoc
+++ b/src/assistant/help/doc/src/qthelp-examples.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\group examples-qthelp
diff --git a/src/assistant/help/doc/src/qthelp-index.qdoc b/src/assistant/help/doc/src/qthelp-index.qdoc
index abe20b81f..f97ed415a 100644
--- a/src/assistant/help/doc/src/qthelp-index.qdoc
+++ b/src/assistant/help/doc/src/qthelp-index.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\page qthelp-index.html
@@ -34,10 +10,6 @@
\section1 Getting Started
- To use Qt Help classes, add this directive into the C++ files:
-
- \snippet doc_src_qthelp.cpp 0
-
To link against the Qt Help module, add this line to the project file:
\snippet doc_src_qthelp.qdoc 1
diff --git a/src/assistant/help/doc/src/qthelp-module.qdoc b/src/assistant/help/doc/src/qthelp-module.qdoc
index 9cd8ab332..3308b95b8 100644
--- a/src/assistant/help/doc/src/qthelp-module.qdoc
+++ b/src/assistant/help/doc/src/qthelp-module.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\module QtHelp
@@ -39,11 +15,6 @@
online help and documentation in their applications are described in
more detail in \l{The Qt Help Framework} overview document.
- To include the definitions of the module's classes, use the
- following directive:
-
- \snippet doc_src_qthelp.cpp 0
-
To link against the module, add this line to your \l qmake \c
.pro file:
diff --git a/src/assistant/help/doc/src/qthelp.qdoc b/src/assistant/help/doc/src/qthelp.qdoc
index 9b02c9612..2c010b87b 100644
--- a/src/assistant/help/doc/src/qthelp.qdoc
+++ b/src/assistant/help/doc/src/qthelp.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\group helpsystem
@@ -118,17 +94,16 @@
\li \l {Qt Help Collection Project}
\li .qhcp
\li An XML file that contains references to the compressed help
- files that should be included in the help collection. In
- addition, it may contain information for customizing Qt
- Assistant. This file can be passed to the help generator for
- creating a help collection file.
+ files that should be included in the help collection. This file
+ can be passed to the help generator for creating a help collection
+ file.
\row
\li Qt Help Collection
\li .qhc
\li The help collection file that QHelpEngine operates on. It can
contain references to any number of compressed help files as
- well as additional information, such as custom filters.
+ well as additional information.
\endtable
\section1 Generating Qt Help
@@ -174,31 +149,13 @@
\c generate or \c register section, so any number of compressed
help files can be generated and registered in one go.
- \section1 Using Qt Help
+ \section1 Using QHelpEngine API
- Accessing the help contents can be done in two ways: Using Qt
- Assistant as documentation browser or using the QHelpEngine
- API for embedding the help contents directly in an application.
+ QHelpEngine allows embedding the help contents directly in an
+ application.
- \section2 Using Qt Assistant
-
- \QA operates on a collection file which can be specified
- before startup. If no collection file is given, a default one
- will be created and used. In either case, it is possible to
- register any Qt compressed help file and access the help contents.
-
- When using Qt Assistant as the help browser for an application, it
- should be possible to customize it to fit the application
- better, so that it does not look like an independent, standalone
- help browser. To achieve this, several additional properties can
- be set in a Qt help collection file, to change for example the title
- or application icon of Qt Assistant. For more information, see the
- \l{Qt Assistant Manual}.
-
- \section2 Using QHelpEngine API
-
- Instead of showing the help in an external application like the
- Qt Assistant, it is also possible to embed the online help in
+ Instead of showing the help in an external application such as a
+ web browser, it is also possible to embed the online help in
the application. The contents can then be retrieved via the
QHelpEngine class and can be displayed in nearly any form.
Showing the help in a QTextBrowser is probably the most common way, but
@@ -227,7 +184,7 @@
the table of contents, index keywords and help documents, it
contains some extra information like a namespace to identify
the help file. One help project stands for one documentation set,
- for example the \l{Qt Assistant Manual}.
+ for example the \l{qmake Manual}.
\section1 Qt Help Project File Format
@@ -275,48 +232,14 @@
The virtual folder tag is mandatory and the folder name must not
contain any slashes (/).
- \target Custom Filters
- \section2 Custom Filters
-
- The Qt help project file contains optional definitions of
- custom filters. A custom filter contains a list of filter
- attributes which will be used later to display only the documentation
- set that has all those attributes assigned. So, when setting the
- current filter in the QHelpEngine to \e {My Application 1.0} only
- the documentation which has \e myapp and \e {1.0} set as filter
- attributes will be shown.
-
- \snippet doc_src_qthelp.qdoc 9
-
- You can define any number of custom filters in a help project file.
- It is important to know that you do not have to specify the filter
- attributes in the same project file. These attributes can be defined
- in any help file, in a filter section.
-
\target Filter Section
\section2 Filter Section
- A filter section contains the actual documentation. One Qt help project
- file may contain more than one filter sections. Every filter section
- consists of four parts, the filter attributes section, the table of
- contents, the keywords and the files list. In theory all parts are
- optional but not specifying anything there will result in an empty
- documentation set.
-
- \section3 Filter Attributes
-
- Every filter section should have filter attributes assigned to it, to
- enable documentation filtering. If no filter attribute is defined, the
- documentation will only be shown if no filtering occurs, meaning the
- current custom filter in the QHelpEngine does not contain any filter
- attributes.
-
- \snippet doc_src_qthelp.qdoc 10
-
- In this case, the filter attributes \e myapp and \e {1.0} are assigned to
- the filter section. This means that all contents specified in this section
- will only be shown if the current custom filter has \e myapp or \e {1.0},
- or both, as filter attributes.
+ A filter section contains the actual documentation. A Qt help project
+ file may contain more than one filter section. Every filter section
+ consists of the table of contents, the keywords, and the files list.
+ In theory all parts are optional but not specifying anything there will
+ result in an empty documentation set.
\section3 Table of Contents
@@ -340,8 +263,8 @@
attribute \e name is used, the keyword specified there will appear in the
visible index. That is, it will be accessible through the QHelpIndexModel
class. If \e id is used, the keyword does not appear in the index and is
- only accessible via \l QHelpEngineCore::linksForIdentifier(). \e name and
- \e id can be specified at the same time.
+ only accessible via \l QHelpEngineCore::documentsForIdentifier(). \e name
+ and \e id can be specified at the same time.
\section3 Files
diff --git a/src/assistant/help/help.pro b/src/assistant/help/help.pro
deleted file mode 100644
index 800c4a38d..000000000
--- a/src/assistant/help/help.pro
+++ /dev/null
@@ -1,65 +0,0 @@
-TARGET = QtHelp
-
-QT = core-private gui widgets sql
-QT_PRIVATE = network
-
-DEFINES += QHELP_LIB
-
-QMAKE_DOCS = $$PWD/doc/qthelp.qdocconf
-
-DEFINES -= QT_ASCII_CAST_WARNINGS
-
-RESOURCES += helpsystem.qrc
-SOURCES += \
- qcompressedhelpinfo.cpp \
- qfilternamedialog.cpp \
- qhelpenginecore.cpp \
- qhelpengine.cpp \
- qhelpfilterdata.cpp \
- qhelpfilterengine.cpp \
- qhelpfiltersettings.cpp \
- qhelpfiltersettingswidget.cpp \
- qhelpdbreader.cpp \
- qhelpcontentwidget.cpp \
- qhelpindexwidget.cpp \
- qhelplink.cpp \
- qhelpcollectionhandler.cpp \
- qhelpsearchengine.cpp \
- qhelpsearchquerywidget.cpp \
- qhelpsearchresultwidget.cpp \
- qhelpsearchindexwriter_default.cpp \
- qhelpsearchindexreader_default.cpp \
- qhelpsearchindexreader.cpp \
- qhelp_global.cpp \
- qoptionswidget.cpp
-
-HEADERS += \
- qcompressedhelpinfo.h \
- qfilternamedialog_p.h \
- qhelpenginecore.h \
- qhelpengine.h \
- qhelpengine_p.h \
- qhelpfilterdata.h \
- qhelpfilterengine.h \
- qhelpfiltersettings_p.h \
- qhelpfiltersettingswidget.h \
- qhelp_global.h \
- qhelpdbreader_p.h \
- qhelpcontentwidget.h \
- qhelpindexwidget.h \
- qhelplink.h \
- qhelpcollectionhandler_p.h \
- qhelpsearchengine.h \
- qhelpsearchquerywidget.h \
- qhelpsearchresultwidget.h \
- qhelpsearchindexwriter_default_p.h \
- qhelpsearchindexreader_default_p.h \
- qhelpsearchindexreader_p.h \
- qoptionswidget_p.h
-
-FORMS += \
- qhelpfiltersettingswidget.ui \
- qfilternamedialog.ui
-
-
-load(qt_module)
diff --git a/src/assistant/help/helpsystem.qrc b/src/assistant/help/helpsystem.qrc
deleted file mode 100644
index 611008639..000000000
--- a/src/assistant/help/helpsystem.qrc
+++ /dev/null
@@ -1,12 +0,0 @@
-<RCC>
- <qresource prefix="/qt-project.org/assistant" >
- <file>images/1leftarrow.png</file>
- <file>images/1rightarrow.png</file>
- <file>images/3leftarrow.png</file>
- <file>images/3rightarrow.png</file>
- <file>images/mac/minus.png</file>
- <file>images/mac/plus.png</file>
- <file>images/win/minus.png</file>
- <file>images/win/plus.png</file>
- </qresource>
-</RCC>
diff --git a/src/assistant/help/qcompressedhelpinfo.cpp b/src/assistant/help/qcompressedhelpinfo.cpp
index a3c5b75d5..8051fdddc 100644
--- a/src/assistant/help/qcompressedhelpinfo.cpp
+++ b/src/assistant/help/qcompressedhelpinfo.cpp
@@ -1,51 +1,16 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 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 "qcompressedhelpinfo.h"
#include "qhelpdbreader_p.h"
-#include <QtCore/QThread>
-#include <QtCore/QVersionNumber>
+#include <QtCore/qversionnumber.h>
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
class QCompressedHelpInfoPrivate : public QSharedData
{
public:
@@ -57,7 +22,6 @@ public:
, m_version(other.m_version)
, m_isNull(other.m_isNull)
{ }
- ~QCompressedHelpInfoPrivate() = default;
QString m_namespaceName;
QString m_component;
@@ -90,8 +54,7 @@ public:
*/
QCompressedHelpInfo::QCompressedHelpInfo()
: d(new QCompressedHelpInfoPrivate)
-{
-}
+{}
/*!
Constructs a copy of \a other.
@@ -167,9 +130,9 @@ bool QCompressedHelpInfo::isNull() const
*/
QCompressedHelpInfo QCompressedHelpInfo::fromCompressedHelpFile(const QString &documentationFileName)
{
- QHelpDBReader reader(documentationFileName,
- QHelpGlobal::uniquifyConnectionName(QLatin1String("GetCompressedHelpInfo"),
- QThread::currentThread()), nullptr);
+ void *pointer = const_cast<QString *>(&documentationFileName);
+ QHelpDBReader reader(documentationFileName, QHelpGlobal::uniquifyConnectionName(
+ "GetCompressedHelpInfo"_L1, pointer), nullptr);
if (reader.init()) {
QCompressedHelpInfo info;
info.d->m_namespaceName = reader.namespaceName();
@@ -178,7 +141,7 @@ QCompressedHelpInfo QCompressedHelpInfo::fromCompressedHelpFile(const QString &d
info.d->m_isNull = false;
return info;
}
- return QCompressedHelpInfo();
+ return {};
}
QT_END_NAMESPACE
diff --git a/src/assistant/help/qcompressedhelpinfo.h b/src/assistant/help/qcompressedhelpinfo.h
index 7b3c78c12..a68c03c11 100644
--- a/src/assistant/help/qcompressedhelpinfo.h
+++ b/src/assistant/help/qcompressedhelpinfo.h
@@ -1,53 +1,17 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 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 QCOMPRESSEDHELPINFO_H
#define QCOMPRESSEDHELPINFO_H
#include <QtHelp/qhelp_global.h>
-#include <QtCore/QSharedDataPointer>
+#include <QtCore/qshareddata.h>
QT_BEGIN_NAMESPACE
-class QVersionNumber;
class QCompressedHelpInfoPrivate;
+class QVersionNumber;
class QHELP_EXPORT QCompressedHelpInfo final
{
@@ -76,4 +40,4 @@ private:
QT_END_NAMESPACE
-#endif // QHELPCOLLECTIONDETAILS_H
+#endif // QCOMPRESSEDHELPINFO_H
diff --git a/src/assistant/help/qfilternamedialog.cpp b/src/assistant/help/qfilternamedialog.cpp
index 8563a3355..11e71bc9a 100644
--- a/src/assistant/help/qfilternamedialog.cpp
+++ b/src/assistant/help/qfilternamedialog.cpp
@@ -1,35 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtWidgets/QPushButton>
+// Copyright (C) 2020 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 "qfilternamedialog_p.h"
+#include <QtWidgets/qpushbutton.h>
+
QT_BEGIN_NAMESPACE
QFilterNameDialog::QFilterNameDialog(QWidget *parent)
@@ -40,8 +15,7 @@ QFilterNameDialog::QFilterNameDialog(QWidget *parent)
this, &QDialog::accept);
connect(m_ui.buttonBox->button(QDialogButtonBox::Cancel), &QAbstractButton::clicked,
this, &QDialog::reject);
- connect(m_ui.lineEdit, &QLineEdit::textChanged,
- this, &QFilterNameDialog::updateOkButton);
+ connect(m_ui.lineEdit, &QLineEdit::textChanged, this, &QFilterNameDialog::updateOkButton);
m_ui.buttonBox->button(QDialogButtonBox::Ok)->setDisabled(true);
}
@@ -51,15 +25,9 @@ void QFilterNameDialog::setFilterName(const QString &filter)
m_ui.lineEdit->selectAll();
}
-QString QFilterNameDialog::filterName() const
-{
- return m_ui.lineEdit->text();
-}
-
void QFilterNameDialog::updateOkButton()
{
- m_ui.buttonBox->button(QDialogButtonBox::Ok)
- ->setDisabled(m_ui.lineEdit->text().isEmpty());
+ m_ui.buttonBox->button(QDialogButtonBox::Ok)->setDisabled(m_ui.lineEdit->text().isEmpty());
}
QT_END_NAMESPACE
diff --git a/src/assistant/help/qfilternamedialog_p.h b/src/assistant/help/qfilternamedialog_p.h
index 76a495d78..76110abba 100644
--- a/src/assistant/help/qfilternamedialog_p.h
+++ b/src/assistant/help/qfilternamedialog_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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 QFILTERNAMEDIALOG_H
#define QFILTERNAMEDIALOG_H
@@ -40,9 +15,10 @@
// We mean it.
//
-#include <QtWidgets/QDialog>
#include "ui_qfilternamedialog.h"
+#include <QtWidgets/qdialog.h>
+
QT_BEGIN_NAMESPACE
class QFilterNameDialog : public QDialog
@@ -53,7 +29,7 @@ public:
QFilterNameDialog(QWidget *parent = nullptr);
void setFilterName(const QString &filter);
- QString filterName() const;
+ QString filterName() const { return m_ui.lineEdit->text(); }
private slots:
void updateOkButton();
diff --git a/src/assistant/help/qhelp_global.cpp b/src/assistant/help/qhelp_global.cpp
index d86ce767b..bd4c85ff4 100644
--- a/src/assistant/help/qhelp_global.cpp
+++ b/src/assistant/help/qhelp_global.cpp
@@ -1,69 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtCore/QCoreApplication>
-#include <QtCore/QRegularExpression>
-#include <QtCore/QMutexLocker>
-#include <QtGui/QTextDocument>
+// Copyright (C) 2016 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 "qhelp_global.h"
+#include <QtCore/qcoreapplication.h>
+#include <QtCore/qhash.h>
+#include <QtCore/qmutex.h>
+#include <QtGui/qtextdocument.h>
+
+QT_BEGIN_NAMESPACE
+
+using namespace Qt::StringLiterals;
+
QString QHelpGlobal::uniquifyConnectionName(const QString &name, void *pointer)
{
static QMutex mutex;
QMutexLocker locker(&mutex);
-
- static QHash<QString,quint16> idHash;
-
- return QString::fromLatin1("%1-%2-%3").
- arg(name).arg(quintptr(pointer)).arg(++idHash[name]);
+ static QHash<QString, quint16> idHash;
+ return QString::asprintf("%ls-%p-%d", qUtf16Printable(name), pointer, ++idHash[name]);
}
QString QHelpGlobal::documentTitle(const QString &content)
{
QString title = QCoreApplication::translate("QHelp", "Untitled");
if (!content.isEmpty()) {
- const int start = content.indexOf(QLatin1String("<title>"), 0, Qt::CaseInsensitive) + 7;
- const int end = content.indexOf(QLatin1String("</title>"), 0, Qt::CaseInsensitive);
+ const int start = content.indexOf("<title>"_L1, 0, Qt::CaseInsensitive) + 7;
+ const int end = content.indexOf("</title>"_L1, 0, Qt::CaseInsensitive);
if ((end - start) > 0) {
title = content.mid(start, end - start);
- if (Qt::mightBeRichText(title) || title.contains(QLatin1Char('&'))) {
+ if (Qt::mightBeRichText(title) || title.contains(u'&')) {
QTextDocument doc;
doc.setHtml(title);
title = doc.toPlainText();
@@ -72,3 +37,5 @@ QString QHelpGlobal::documentTitle(const QString &content)
}
return title;
}
+
+QT_END_NAMESPACE
diff --git a/src/assistant/help/qhelp_global.h b/src/assistant/help/qhelp_global.h
index c0354083d..b7367ee37 100644
--- a/src/assistant/help/qhelp_global.h
+++ b/src/assistant/help/qhelp_global.h
@@ -1,51 +1,14 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QHELP_GLOBAL_H
#define QHELP_GLOBAL_H
#include <QtCore/qglobal.h>
-#include <QtCore/QString>
-#include <QtCore/QObject>
QT_BEGIN_NAMESPACE
+class QString;
#ifdef QT_STATIC
# define QHELP_EXPORT
@@ -55,7 +18,10 @@ QT_BEGIN_NAMESPACE
# define QHELP_EXPORT Q_DECL_IMPORT
#endif
-class QHELP_EXPORT QHelpGlobal {
+// TODO Qt 7.0: Remove the class and make it a namespace with a collection of functions.
+// Review, if they are still need to be public.
+class QHELP_EXPORT QHelpGlobal
+{
public:
static QString uniquifyConnectionName(const QString &name, void *pointer);
static QString documentTitle(const QString &content);
diff --git a/src/assistant/help/qhelpcollectionhandler.cpp b/src/assistant/help/qhelpcollectionhandler.cpp
index 57ab8e329..56251309c 100644
--- a/src/assistant/help/qhelpcollectionhandler.cpp
+++ b/src/assistant/help/qhelpcollectionhandler.cpp
@@ -1,66 +1,32 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qhelpcollectionhandler_p.h"
#include "qhelp_global.h"
#include "qhelpdbreader_p.h"
#include "qhelpfilterdata.h"
-
-#include <QtCore/QDataStream>
-#include <QtCore/QDateTime>
-#include <QtCore/QDir>
-#include <QtCore/QFile>
-#include <QtCore/QFileInfo>
-#include <QtCore/QList>
-#include <QtCore/QTimer>
-#include <QtCore/QVersionNumber>
-
-#include <QtHelp/QHelpLink>
-
-#include <QtSql/QSqlError>
-#include <QtSql/QSqlDriver>
+#include "qhelplink.h"
+
+#include <QtCore/qdatastream.h>
+#include <QtCore/qdatetime.h>
+#include <QtCore/qdir.h>
+#include <QtCore/qfileinfo.h>
+#include <QtCore/qmap.h>
+#include <QtCore/qtimer.h>
+#include <QtCore/qversionnumber.h>
+#include <QtSql/qsqldriver.h>
+#include <QtSql/qsqlerror.h>
+#include <QtSql/qsqlquery.h>
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
class Transaction
{
public:
+ Q_DISABLE_COPY_MOVE(Transaction);
+
Transaction(const QString &connectionName)
: m_db(QSqlDatabase::database(connectionName)),
m_inTransaction(m_db.driver()->hasFeature(QSqlDriver::Transactions))
@@ -107,8 +73,8 @@ bool QHelpCollectionHandler::isDBOpened() const
{
if (m_query)
return true;
- emit error(tr("The collection file \"%1\" is not set up yet.").
- arg(m_collectionFile));
+ auto *that = const_cast<QHelpCollectionHandler *>(this);
+ emit that->error(tr("The collection file \"%1\" is not set up yet.").arg(m_collectionFile));
return false;
}
@@ -117,15 +83,9 @@ void QHelpCollectionHandler::closeDB()
if (!m_query)
return;
- delete m_query;
- m_query = nullptr;
+ m_query.reset();
QSqlDatabase::removeDatabase(m_connectionName);
- m_connectionName = QString();
-}
-
-QString QHelpCollectionHandler::collectionFile() const
-{
- return m_collectionFile;
+ m_connectionName.clear();
}
bool QHelpCollectionHandler::openCollectionFile()
@@ -133,11 +93,9 @@ bool QHelpCollectionHandler::openCollectionFile()
if (m_query)
return true;
- m_connectionName = QHelpGlobal::uniquifyConnectionName(
- QLatin1String("QHelpCollectionHandler"), this);
+ m_connectionName = QHelpGlobal::uniquifyConnectionName("QHelpCollectionHandler"_L1, this);
{
- QSqlDatabase db = QSqlDatabase::addDatabase(QLatin1String("QSQLITE"),
- m_connectionName);
+ QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"_L1, m_connectionName);
if (db.driver()
&& db.driver()->lastError().type() == QSqlError::ConnectionError) {
emit error(tr("Cannot load sqlite database driver."));
@@ -146,7 +104,7 @@ bool QHelpCollectionHandler::openCollectionFile()
db.setDatabaseName(collectionFile());
if (db.open())
- m_query = new QSqlQuery(db);
+ m_query.reset(new QSqlQuery(db));
if (!m_query) {
QSqlDatabase::removeDatabase(m_connectionName);
@@ -158,16 +116,16 @@ bool QHelpCollectionHandler::openCollectionFile()
if (m_readOnly)
return true;
- m_query->exec(QLatin1String("PRAGMA synchronous=OFF"));
- m_query->exec(QLatin1String("PRAGMA cache_size=3000"));
+ m_query->exec("PRAGMA synchronous=OFF"_L1);
+ m_query->exec("PRAGMA cache_size=3000"_L1);
- m_query->exec(QLatin1String("SELECT COUNT(*) FROM sqlite_master WHERE TYPE=\'table\' "
- "AND Name=\'NamespaceTable\'"));
+ m_query->exec("SELECT COUNT(*) FROM sqlite_master WHERE TYPE=\'table\' "
+ "AND Name=\'NamespaceTable\'"_L1);
m_query->next();
const bool tablesExist = m_query->value(0).toInt() > 0;
if (!tablesExist) {
- if (!createTables(m_query)) {
+ if (!createTables(m_query.get())) {
closeDB();
emit error(tr("Cannot create tables in file %1.").arg(collectionFile()));
return false;
@@ -177,34 +135,32 @@ bool QHelpCollectionHandler::openCollectionFile()
bool indexAndNamespaceFilterTablesMissing = false;
const QStringList newTables = {
- QLatin1String("IndexTable"),
- QLatin1String("FileNameTable"),
- QLatin1String("ContentsTable"),
- QLatin1String("FileFilterTable"),
- QLatin1String("IndexFilterTable"),
- QLatin1String("ContentsFilterTable"),
- QLatin1String("FileAttributeSetTable"),
- QLatin1String("OptimizedFilterTable"),
- QLatin1String("TimeStampTable"),
- QLatin1String("VersionTable"),
- QLatin1String("Filter"),
- QLatin1String("ComponentTable"),
- QLatin1String("ComponentMapping"),
- QLatin1String("ComponentFilter"),
- QLatin1String("VersionFilter")
+ "IndexTable"_L1,
+ "FileNameTable"_L1,
+ "ContentsTable"_L1,
+ "FileFilterTable"_L1,
+ "IndexFilterTable"_L1,
+ "ContentsFilterTable"_L1,
+ "FileAttributeSetTable"_L1,
+ "OptimizedFilterTable"_L1,
+ "TimeStampTable"_L1,
+ "VersionTable"_L1,
+ "Filter"_L1,
+ "ComponentTable"_L1,
+ "ComponentMapping"_L1,
+ "ComponentFilter"_L1,
+ "VersionFilter"_L1
};
- QString queryString = QLatin1String("SELECT COUNT(*) "
- "FROM sqlite_master "
- "WHERE TYPE=\'table\'");
- queryString.append(QLatin1String(" AND (Name=\'"));
- queryString.append(newTables.join(QLatin1String("\' OR Name=\'")));
- queryString.append(QLatin1String("\')"));
+ QString queryString = "SELECT COUNT(*) FROM sqlite_master WHERE TYPE=\'table\'"_L1;
+ queryString.append(" AND (Name=\'"_L1);
+ queryString.append(newTables.join("\' OR Name=\'"_L1));
+ queryString.append("\')"_L1);
m_query->exec(queryString);
m_query->next();
- if (m_query->value(0).toInt() != newTables.count()) {
- if (!recreateIndexAndNamespaceFilterTables(m_query)) {
+ if (m_query->value(0).toInt() != newTables.size()) {
+ if (!recreateIndexAndNamespaceFilterTables(m_query.get())) {
emit error(tr("Cannot create index tables in file %1.").arg(collectionFile()));
return false;
}
@@ -225,15 +181,14 @@ bool QHelpCollectionHandler::openCollectionFile()
}
QList<TimeStamp> timeStamps;
- m_query->exec(QLatin1String("SELECT NamespaceId, FolderId, FilePath, Size, TimeStamp "
- "FROM TimeStampTable"));
+ m_query->exec("SELECT NamespaceId, FolderId, FilePath, Size, TimeStamp FROM TimeStampTable"_L1);
while (m_query->next()) {
TimeStamp timeStamp;
timeStamp.namespaceId = m_query->value(0).toInt();
timeStamp.folderId = m_query->value(1).toInt();
timeStamp.fileName = m_query->value(2).toString();
timeStamp.size = m_query->value(3).toInt();
- timeStamp.timeStamp = m_query->value(4).toString();
+ timeStamp.timeStamp = m_query->value(4).toDateTime();
timeStamps.append(timeStamp);
}
@@ -262,7 +217,6 @@ bool QHelpCollectionHandler::openCollectionFile()
unregisterDocumentation(info.namespaceName);
}
}
-
return true;
}
@@ -271,8 +225,7 @@ QString QHelpCollectionHandler::absoluteDocPath(const QString &fileName) const
const QFileInfo fi(collectionFile());
return QDir::isAbsolutePath(fileName)
? fileName
- : QFileInfo(fi.absolutePath() + QLatin1Char('/') + fileName)
- .absoluteFilePath();
+ : QFileInfo(fi.absolutePath() + u'/' + fileName).absoluteFilePath();
}
bool QHelpCollectionHandler::isTimeStampCorrect(const TimeStamp &timeStamp) const
@@ -285,12 +238,10 @@ bool QHelpCollectionHandler::isTimeStampCorrect(const TimeStamp &timeStamp) cons
if (fi.size() != timeStamp.size)
return false;
- if (fi.lastModified().toString(Qt::ISODate) != timeStamp.timeStamp)
+ if (fi.lastModified(QTimeZone::UTC) != timeStamp.timeStamp)
return false;
- m_query->prepare(QLatin1String("SELECT FilePath "
- "FROM NamespaceTable "
- "WHERE Id = ?"));
+ m_query->prepare("SELECT FilePath FROM NamespaceTable WHERE Id = ?"_L1);
m_query->bindValue(0, timeStamp.namespaceId);
if (!m_query->exec() || !m_query->next())
return false;
@@ -305,13 +256,14 @@ bool QHelpCollectionHandler::isTimeStampCorrect(const TimeStamp &timeStamp) cons
bool QHelpCollectionHandler::hasTimeStampInfo(const QString &nameSpace) const
{
- m_query->prepare(QLatin1String("SELECT "
- "TimeStampTable.NamespaceId "
- "FROM "
- "NamespaceTable, "
- "TimeStampTable "
- "WHERE NamespaceTable.Id = TimeStampTable.NamespaceId "
- "AND NamespaceTable.Name = ? LIMIT 1"));
+ m_query->prepare(
+ "SELECT "
+ "TimeStampTable.NamespaceId "
+ "FROM "
+ "NamespaceTable, "
+ "TimeStampTable "
+ "WHERE NamespaceTable.Id = TimeStampTable.NamespaceId "
+ "AND NamespaceTable.Name = ? LIMIT 1"_L1);
m_query->bindValue(0, nameSpace);
if (!m_query->exec())
return false;
@@ -337,7 +289,7 @@ void QHelpCollectionHandler::execVacuum()
if (!m_query)
return;
- m_query->exec(QLatin1String("VACUUM"));
+ m_query->exec("VACUUM"_L1);
m_vacuumScheduled = false;
}
@@ -348,8 +300,7 @@ bool QHelpCollectionHandler::copyCollectionFile(const QString &fileName)
const QFileInfo fi(fileName);
if (fi.exists()) {
- emit error(tr("The collection file \"%1\" already exists.").
- arg(fileName));
+ emit error(tr("The collection file \"%1\" already exists.").arg(fileName));
return false;
}
@@ -359,114 +310,106 @@ bool QHelpCollectionHandler::copyCollectionFile(const QString &fileName)
}
const QString &colFile = fi.absoluteFilePath();
- const QString &connectionName = QHelpGlobal::uniquifyConnectionName(
- QLatin1String("QHelpCollectionHandlerCopy"), this);
- QSqlQuery *copyQuery = nullptr;
- bool openingOk = true;
- {
- QSqlDatabase db = QSqlDatabase::addDatabase(QLatin1String("QSQLITE"), connectionName);
- db.setDatabaseName(colFile);
- openingOk = db.open();
- if (openingOk)
- copyQuery = new QSqlQuery(db);
- }
-
- if (!openingOk) {
+ const QString &connectionName =
+ QHelpGlobal::uniquifyConnectionName("QHelpCollectionHandlerCopy"_L1, this);
+ QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"_L1, connectionName);
+ db.setDatabaseName(colFile);
+ if (!db.open()) {
emit error(tr("Cannot open collection file: %1").arg(colFile));
return false;
}
- copyQuery->exec(QLatin1String("PRAGMA synchronous=OFF"));
- copyQuery->exec(QLatin1String("PRAGMA cache_size=3000"));
+ QSqlQuery copyQuery(db);
+ copyQuery.exec("PRAGMA synchronous=OFF"_L1);
+ copyQuery.exec("PRAGMA cache_size=3000"_L1);
- if (!createTables(copyQuery) || !recreateIndexAndNamespaceFilterTables(copyQuery)) {
+ if (!createTables(&copyQuery) || !recreateIndexAndNamespaceFilterTables(&copyQuery)) {
emit error(tr("Cannot copy collection file: %1").arg(colFile));
- delete copyQuery;
return false;
}
const QString &oldBaseDir = QFileInfo(collectionFile()).absolutePath();
const QFileInfo newColFi(colFile);
- m_query->exec(QLatin1String("SELECT Name, FilePath FROM NamespaceTable"));
+ m_query->exec("SELECT Name, FilePath FROM NamespaceTable"_L1);
while (m_query->next()) {
- copyQuery->prepare(QLatin1String("INSERT INTO NamespaceTable VALUES(NULL, ?, ?)"));
- copyQuery->bindValue(0, m_query->value(0).toString());
+ copyQuery.prepare("INSERT INTO NamespaceTable VALUES(NULL, ?, ?)"_L1);
+ copyQuery.bindValue(0, m_query->value(0).toString());
QString oldFilePath = m_query->value(1).toString();
if (!QDir::isAbsolutePath(oldFilePath))
- oldFilePath = oldBaseDir + QLatin1Char('/') + oldFilePath;
- copyQuery->bindValue(1, newColFi.absoluteDir().relativeFilePath(oldFilePath));
- copyQuery->exec();
+ oldFilePath = oldBaseDir + u'/' + oldFilePath;
+ copyQuery.bindValue(1, newColFi.absoluteDir().relativeFilePath(oldFilePath));
+ copyQuery.exec();
}
- m_query->exec(QLatin1String("SELECT NamespaceId, Name FROM FolderTable"));
+ m_query->exec("SELECT NamespaceId, Name FROM FolderTable"_L1);
while (m_query->next()) {
- copyQuery->prepare(QLatin1String("INSERT INTO FolderTable VALUES(NULL, ?, ?)"));
- copyQuery->bindValue(0, m_query->value(0).toString());
- copyQuery->bindValue(1, m_query->value(1).toString());
- copyQuery->exec();
+ copyQuery.prepare("INSERT INTO FolderTable VALUES(NULL, ?, ?)"_L1);
+ copyQuery.bindValue(0, m_query->value(0).toString());
+ copyQuery.bindValue(1, m_query->value(1).toString());
+ copyQuery.exec();
}
- m_query->exec(QLatin1String("SELECT Name FROM FilterAttributeTable"));
+ m_query->exec("SELECT Name FROM FilterAttributeTable"_L1);
while (m_query->next()) {
- copyQuery->prepare(QLatin1String("INSERT INTO FilterAttributeTable VALUES(NULL, ?)"));
- copyQuery->bindValue(0, m_query->value(0).toString());
- copyQuery->exec();
+ copyQuery.prepare("INSERT INTO FilterAttributeTable VALUES(NULL, ?)"_L1);
+ copyQuery.bindValue(0, m_query->value(0).toString());
+ copyQuery.exec();
}
- m_query->exec(QLatin1String("SELECT Name FROM FilterNameTable"));
+ m_query->exec("SELECT Name FROM FilterNameTable"_L1);
while (m_query->next()) {
- copyQuery->prepare(QLatin1String("INSERT INTO FilterNameTable VALUES(NULL, ?)"));
- copyQuery->bindValue(0, m_query->value(0).toString());
- copyQuery->exec();
+ copyQuery.prepare("INSERT INTO FilterNameTable VALUES(NULL, ?)"_L1);
+ copyQuery.bindValue(0, m_query->value(0).toString());
+ copyQuery.exec();
}
- m_query->exec(QLatin1String("SELECT NameId, FilterAttributeId FROM FilterTable"));
+ m_query->exec("SELECT NameId, FilterAttributeId FROM FilterTable"_L1);
while (m_query->next()) {
- copyQuery->prepare(QLatin1String("INSERT INTO FilterTable VALUES(?, ?)"));
- copyQuery->bindValue(0, m_query->value(0).toInt());
- copyQuery->bindValue(1, m_query->value(1).toInt());
- copyQuery->exec();
+ copyQuery.prepare("INSERT INTO FilterTable VALUES(?, ?)"_L1);
+ copyQuery.bindValue(0, m_query->value(0).toInt());
+ copyQuery.bindValue(1, m_query->value(1).toInt());
+ copyQuery.exec();
}
- m_query->exec(QLatin1String("SELECT Key, Value FROM SettingsTable"));
+ m_query->exec("SELECT Key, Value FROM SettingsTable"_L1);
while (m_query->next()) {
- if (m_query->value(0).toString() == QLatin1String("FTS5IndexedNamespaces"))
+ if (m_query->value(0).toString() == "FTS5IndexedNamespaces"_L1)
continue;
- copyQuery->prepare(QLatin1String("INSERT INTO SettingsTable VALUES(?, ?)"));
- copyQuery->bindValue(0, m_query->value(0).toString());
- copyQuery->bindValue(1, m_query->value(1));
- copyQuery->exec();
+ copyQuery.prepare("INSERT INTO SettingsTable VALUES(?, ?)"_L1);
+ copyQuery.bindValue(0, m_query->value(0).toString());
+ copyQuery.bindValue(1, m_query->value(1));
+ copyQuery.exec();
}
- copyQuery->clear();
- delete copyQuery;
+ copyQuery.clear();
QSqlDatabase::removeDatabase(connectionName);
return true;
}
bool QHelpCollectionHandler::createTables(QSqlQuery *query)
{
- const QStringList tables = QStringList()
- << QLatin1String("CREATE TABLE NamespaceTable ("
- "Id INTEGER PRIMARY KEY, "
- "Name TEXT, "
- "FilePath TEXT )")
- << QLatin1String("CREATE TABLE FolderTable ("
- "Id INTEGER PRIMARY KEY, "
- "NamespaceId INTEGER, "
- "Name TEXT )")
- << QLatin1String("CREATE TABLE FilterAttributeTable ("
- "Id INTEGER PRIMARY KEY, "
- "Name TEXT )")
- << QLatin1String("CREATE TABLE FilterNameTable ("
- "Id INTEGER PRIMARY KEY, "
- "Name TEXT )")
- << QLatin1String("CREATE TABLE FilterTable ("
- "NameId INTEGER, "
- "FilterAttributeId INTEGER )")
- << QLatin1String("CREATE TABLE SettingsTable ("
- "Key TEXT PRIMARY KEY, "
- "Value BLOB )");
+ const QStringList tables = {
+ "CREATE TABLE NamespaceTable ("
+ "Id INTEGER PRIMARY KEY, "
+ "Name TEXT, "
+ "FilePath TEXT )"_L1,
+ "CREATE TABLE FolderTable ("
+ "Id INTEGER PRIMARY KEY, "
+ "NamespaceId INTEGER, "
+ "Name TEXT )"_L1,
+ "CREATE TABLE FilterAttributeTable ("
+ "Id INTEGER PRIMARY KEY, "
+ "Name TEXT )"_L1,
+ "CREATE TABLE FilterNameTable ("
+ "Id INTEGER PRIMARY KEY, "
+ "Name TEXT )"_L1,
+ "CREATE TABLE FilterTable ("
+ "NameId INTEGER, "
+ "FilterAttributeId INTEGER )"_L1,
+ "CREATE TABLE SettingsTable ("
+ "Key TEXT PRIMARY KEY, "
+ "Value BLOB )"_L1
+ };
for (const QString &q : tables) {
if (!query->exec(q))
@@ -477,78 +420,79 @@ bool QHelpCollectionHandler::createTables(QSqlQuery *query)
bool QHelpCollectionHandler::recreateIndexAndNamespaceFilterTables(QSqlQuery *query)
{
- const QStringList tables = QStringList()
- << QLatin1String("DROP TABLE IF EXISTS FileNameTable")
- << QLatin1String("DROP TABLE IF EXISTS IndexTable")
- << QLatin1String("DROP TABLE IF EXISTS ContentsTable")
- << QLatin1String("DROP TABLE IF EXISTS FileFilterTable") // legacy
- << QLatin1String("DROP TABLE IF EXISTS IndexFilterTable") // legacy
- << QLatin1String("DROP TABLE IF EXISTS ContentsFilterTable") // legacy
- << QLatin1String("DROP TABLE IF EXISTS FileAttributeSetTable") // legacy
- << QLatin1String("DROP TABLE IF EXISTS OptimizedFilterTable") // legacy
- << QLatin1String("DROP TABLE IF EXISTS TimeStampTable")
- << QLatin1String("DROP TABLE IF EXISTS VersionTable")
- << QLatin1String("DROP TABLE IF EXISTS Filter")
- << QLatin1String("DROP TABLE IF EXISTS ComponentTable")
- << QLatin1String("DROP TABLE IF EXISTS ComponentMapping")
- << QLatin1String("DROP TABLE IF EXISTS ComponentFilter")
- << QLatin1String("DROP TABLE IF EXISTS VersionFilter")
- << QLatin1String("CREATE TABLE FileNameTable ("
- "FolderId INTEGER, "
- "Name TEXT, "
- "FileId INTEGER PRIMARY KEY, "
- "Title TEXT)")
- << QLatin1String("CREATE TABLE IndexTable ("
- "Id INTEGER PRIMARY KEY, "
- "Name TEXT, "
- "Identifier TEXT, "
- "NamespaceId INTEGER, "
- "FileId INTEGER, "
- "Anchor TEXT)")
- << QLatin1String("CREATE TABLE ContentsTable ("
- "Id INTEGER PRIMARY KEY, "
- "NamespaceId INTEGER, "
- "Data BLOB)")
- << QLatin1String("CREATE TABLE FileFilterTable ("
- "FilterAttributeId INTEGER, "
- "FileId INTEGER)")
- << QLatin1String("CREATE TABLE IndexFilterTable ("
- "FilterAttributeId INTEGER, "
- "IndexId INTEGER)")
- << QLatin1String("CREATE TABLE ContentsFilterTable ("
- "FilterAttributeId INTEGER, "
- "ContentsId INTEGER )")
- << QLatin1String("CREATE TABLE FileAttributeSetTable ("
- "NamespaceId INTEGER, "
- "FilterAttributeSetId INTEGER, "
- "FilterAttributeId INTEGER)")
- << QLatin1String("CREATE TABLE OptimizedFilterTable ("
- "NamespaceId INTEGER, "
- "FilterAttributeId INTEGER)")
- << QLatin1String("CREATE TABLE TimeStampTable ("
- "NamespaceId INTEGER, "
- "FolderId INTEGER, "
- "FilePath TEXT, "
- "Size INTEGER, "
- "TimeStamp TEXT)")
- << QLatin1String("CREATE TABLE VersionTable ("
- "NamespaceId INTEGER, "
- "Version TEXT)")
- << QLatin1String("CREATE TABLE Filter ("
- "FilterId INTEGER PRIMARY KEY, "
- "Name TEXT)")
- << QLatin1String("CREATE TABLE ComponentTable ("
- "ComponentId INTEGER PRIMARY KEY, "
- "Name TEXT)")
- << QLatin1String("CREATE TABLE ComponentMapping ("
- "ComponentId INTEGER, "
- "NamespaceId INTEGER)")
- << QLatin1String("CREATE TABLE ComponentFilter ("
- "ComponentName TEXT, "
- "FilterId INTEGER)")
- << QLatin1String("CREATE TABLE VersionFilter ("
- "Version TEXT, "
- "FilterId INTEGER)");
+ const QStringList tables = {
+ "DROP TABLE IF EXISTS FileNameTable"_L1,
+ "DROP TABLE IF EXISTS IndexTable"_L1,
+ "DROP TABLE IF EXISTS ContentsTable"_L1,
+ "DROP TABLE IF EXISTS FileFilterTable"_L1, // legacy
+ "DROP TABLE IF EXISTS IndexFilterTable"_L1, // legacy
+ "DROP TABLE IF EXISTS ContentsFilterTable"_L1, // legacy
+ "DROP TABLE IF EXISTS FileAttributeSetTable"_L1, // legacy
+ "DROP TABLE IF EXISTS OptimizedFilterTable"_L1, // legacy
+ "DROP TABLE IF EXISTS TimeStampTable"_L1,
+ "DROP TABLE IF EXISTS VersionTable"_L1,
+ "DROP TABLE IF EXISTS Filter"_L1,
+ "DROP TABLE IF EXISTS ComponentTable"_L1,
+ "DROP TABLE IF EXISTS ComponentMapping"_L1,
+ "DROP TABLE IF EXISTS ComponentFilter"_L1,
+ "DROP TABLE IF EXISTS VersionFilter"_L1,
+ "CREATE TABLE FileNameTable ("
+ "FolderId INTEGER, "
+ "Name TEXT, "
+ "FileId INTEGER PRIMARY KEY, "
+ "Title TEXT)"_L1,
+ "CREATE TABLE IndexTable ("
+ "Id INTEGER PRIMARY KEY, "
+ "Name TEXT, "
+ "Identifier TEXT, "
+ "NamespaceId INTEGER, "
+ "FileId INTEGER, "
+ "Anchor TEXT)"_L1,
+ "CREATE TABLE ContentsTable ("
+ "Id INTEGER PRIMARY KEY, "
+ "NamespaceId INTEGER, "
+ "Data BLOB)"_L1,
+ "CREATE TABLE FileFilterTable ("
+ "FilterAttributeId INTEGER, "
+ "FileId INTEGER)"_L1,
+ "CREATE TABLE IndexFilterTable ("
+ "FilterAttributeId INTEGER, "
+ "IndexId INTEGER)"_L1,
+ "CREATE TABLE ContentsFilterTable ("
+ "FilterAttributeId INTEGER, "
+ "ContentsId INTEGER )"_L1,
+ "CREATE TABLE FileAttributeSetTable ("
+ "NamespaceId INTEGER, "
+ "FilterAttributeSetId INTEGER, "
+ "FilterAttributeId INTEGER)"_L1,
+ "CREATE TABLE OptimizedFilterTable ("
+ "NamespaceId INTEGER, "
+ "FilterAttributeId INTEGER)"_L1,
+ "CREATE TABLE TimeStampTable ("
+ "NamespaceId INTEGER, "
+ "FolderId INTEGER, "
+ "FilePath TEXT, "
+ "Size INTEGER, "
+ "TimeStamp TEXT)"_L1,
+ "CREATE TABLE VersionTable ("
+ "NamespaceId INTEGER, "
+ "Version TEXT)"_L1,
+ "CREATE TABLE Filter ("
+ "FilterId INTEGER PRIMARY KEY, "
+ "Name TEXT)"_L1,
+ "CREATE TABLE ComponentTable ("
+ "ComponentId INTEGER PRIMARY KEY, "
+ "Name TEXT)"_L1,
+ "CREATE TABLE ComponentMapping ("
+ "ComponentId INTEGER, "
+ "NamespaceId INTEGER)"_L1,
+ "CREATE TABLE ComponentFilter ("
+ "ComponentName TEXT, "
+ "FilterId INTEGER)"_L1,
+ "CREATE TABLE VersionFilter ("
+ "Version TEXT, "
+ "FilterId INTEGER)"_L1
+ };
for (const QString &q : tables) {
if (!query->exec(q))
@@ -561,19 +505,18 @@ QStringList QHelpCollectionHandler::customFilters() const
{
QStringList list;
if (m_query) {
- m_query->exec(QLatin1String("SELECT Name FROM FilterNameTable"));
+ m_query->exec("SELECT Name FROM FilterNameTable"_L1);
while (m_query->next())
list.append(m_query->value(0).toString());
}
return list;
}
-
QStringList QHelpCollectionHandler::filters() const
{
QStringList list;
if (m_query) {
- m_query->exec(QLatin1String("SELECT Name FROM Filter ORDER BY Name"));
+ m_query->exec("SELECT Name FROM Filter ORDER BY Name"_L1);
while (m_query->next())
list.append(m_query->value(0).toString());
}
@@ -584,7 +527,7 @@ QStringList QHelpCollectionHandler::availableComponents() const
{
QStringList list;
if (m_query) {
- m_query->exec(QLatin1String("SELECT DISTINCT Name FROM ComponentTable ORDER BY Name"));
+ m_query->exec("SELECT DISTINCT Name FROM ComponentTable ORDER BY Name"_L1);
while (m_query->next())
list.append(m_query->value(0).toString());
}
@@ -595,7 +538,7 @@ QList<QVersionNumber> QHelpCollectionHandler::availableVersions() const
{
QList<QVersionNumber> list;
if (m_query) {
- m_query->exec(QLatin1String("SELECT DISTINCT Version FROM VersionTable ORDER BY Version"));
+ m_query->exec("SELECT DISTINCT Version FROM VersionTable ORDER BY Version"_L1);
while (m_query->next())
list.append(QVersionNumber::fromString(m_query->value(0).toString()));
}
@@ -606,14 +549,15 @@ QMap<QString, QString> QHelpCollectionHandler::namespaceToComponent() const
{
QMap<QString, QString> result;
if (m_query) {
- m_query->exec(QLatin1String("SELECT "
- "NamespaceTable.Name, "
- "ComponentTable.Name "
- "FROM NamespaceTable, "
- "ComponentTable, "
- "ComponentMapping "
- "WHERE NamespaceTable.Id = ComponentMapping.NamespaceId "
- "AND ComponentMapping.ComponentId = ComponentTable.ComponentId"));
+ m_query->exec(
+ "SELECT "
+ "NamespaceTable.Name, "
+ "ComponentTable.Name "
+ "FROM NamespaceTable, "
+ "ComponentTable, "
+ "ComponentMapping "
+ "WHERE NamespaceTable.Id = ComponentMapping.NamespaceId "
+ "AND ComponentMapping.ComponentId = ComponentTable.ComponentId"_L1);
while (m_query->next())
result.insert(m_query->value(0).toString(), m_query->value(1).toString());
}
@@ -624,12 +568,13 @@ QMap<QString, QVersionNumber> QHelpCollectionHandler::namespaceToVersion() const
{
QMap<QString, QVersionNumber> result;
if (m_query) {
- m_query->exec(QLatin1String("SELECT "
- "NamespaceTable.Name, "
- "VersionTable.Version "
- "FROM NamespaceTable, "
- "VersionTable "
- "WHERE NamespaceTable.Id = VersionTable.NamespaceId"));
+ m_query->exec(
+ "SELECT "
+ "NamespaceTable.Name, "
+ "VersionTable.Version "
+ "FROM NamespaceTable, "
+ "VersionTable "
+ "WHERE NamespaceTable.Id = VersionTable.NamespaceId"_L1);
while (m_query->next()) {
result.insert(m_query->value(0).toString(),
QVersionNumber::fromString(m_query->value(1).toString()));
@@ -643,21 +588,23 @@ QHelpFilterData QHelpCollectionHandler::filterData(const QString &filterName) co
QStringList components;
QList<QVersionNumber> versions;
if (m_query) {
- m_query->prepare(QLatin1String("SELECT ComponentFilter.ComponentName "
- "FROM ComponentFilter, Filter "
- "WHERE ComponentFilter.FilterId = Filter.FilterId "
- "AND Filter.Name = ? "
- "ORDER BY ComponentFilter.ComponentName"));
+ m_query->prepare(
+ "SELECT ComponentFilter.ComponentName "
+ "FROM ComponentFilter, Filter "
+ "WHERE ComponentFilter.FilterId = Filter.FilterId "
+ "AND Filter.Name = ? "
+ "ORDER BY ComponentFilter.ComponentName"_L1);
m_query->bindValue(0, filterName);
m_query->exec();
while (m_query->next())
components.append(m_query->value(0).toString());
- m_query->prepare(QLatin1String("SELECT VersionFilter.Version "
- "FROM VersionFilter, Filter "
- "WHERE VersionFilter.FilterId = Filter.FilterId "
- "AND Filter.Name = ? "
- "ORDER BY VersionFilter.Version"));
+ m_query->prepare(
+ "SELECT VersionFilter.Version "
+ "FROM VersionFilter, Filter "
+ "WHERE VersionFilter.FilterId = Filter.FilterId "
+ "AND Filter.Name = ? "
+ "ORDER BY VersionFilter.Version"_L1);
m_query->bindValue(0, filterName);
m_query->exec();
while (m_query->next())
@@ -676,8 +623,7 @@ bool QHelpCollectionHandler::setFilterData(const QString &filterName,
if (!removeFilter(filterName))
return false;
- m_query->prepare(QLatin1String("INSERT INTO Filter "
- "VALUES (NULL, ?)"));
+ m_query->prepare("INSERT INTO Filter VALUES (NULL, ?)"_L1);
m_query->bindValue(0, filterName);
if (!m_query->exec())
return false;
@@ -693,8 +639,7 @@ bool QHelpCollectionHandler::setFilterData(const QString &filterName,
filterIdList.append(filterId);
}
- m_query->prepare(QLatin1String("INSERT INTO ComponentFilter "
- "VALUES (?, ?)"));
+ m_query->prepare("INSERT INTO ComponentFilter VALUES (?, ?)"_L1);
m_query->addBindValue(componentList);
m_query->addBindValue(filterIdList);
if (!m_query->execBatch())
@@ -706,8 +651,7 @@ bool QHelpCollectionHandler::setFilterData(const QString &filterName,
filterIdList.append(filterId);
}
- m_query->prepare(QLatin1String("INSERT INTO VersionFilter "
- "VALUES (?, ?)"));
+ m_query->prepare("INSERT INTO VersionFilter VALUES (?, ?)"_L1);
m_query->addBindValue(versionList);
m_query->addBindValue(filterIdList);
if (!m_query->execBatch())
@@ -718,9 +662,7 @@ bool QHelpCollectionHandler::setFilterData(const QString &filterName,
bool QHelpCollectionHandler::removeFilter(const QString &filterName)
{
- m_query->prepare(QLatin1String("SELECT FilterId "
- "FROM Filter "
- "WHERE Name = ?"));
+ m_query->prepare("SELECT FilterId FROM Filter WHERE Name = ?"_L1);
m_query->bindValue(0, filterName);
if (!m_query->exec())
return false;
@@ -730,20 +672,17 @@ bool QHelpCollectionHandler::removeFilter(const QString &filterName)
const int filterId = m_query->value(0).toInt();
- m_query->prepare(QLatin1String("DELETE FROM Filter "
- "WHERE Filter.Name = ?"));
+ m_query->prepare("DELETE FROM Filter WHERE Filter.Name = ?"_L1);
m_query->bindValue(0, filterName);
if (!m_query->exec())
return false;
- m_query->prepare(QLatin1String("DELETE FROM ComponentFilter "
- "WHERE ComponentFilter.FilterId = ?"));
+ m_query->prepare("DELETE FROM ComponentFilter WHERE ComponentFilter.FilterId = ?"_L1);
m_query->bindValue(0, filterId);
if (!m_query->exec())
return false;
- m_query->prepare(QLatin1String("DELETE FROM VersionFilter "
- "WHERE VersionFilter.FilterId = ?"));
+ m_query->prepare("DELETE FROM VersionFilter WHERE VersionFilter.FilterId = ?"_L1);
m_query->bindValue(0, filterId);
if (!m_query->exec())
return false;
@@ -757,7 +696,7 @@ bool QHelpCollectionHandler::removeCustomFilter(const QString &filterName)
return false;
int filterNameId = -1;
- m_query->prepare(QLatin1String("SELECT Id FROM FilterNameTable WHERE Name=?"));
+ m_query->prepare("SELECT Id FROM FilterNameTable WHERE Name=?"_L1);
m_query->bindValue(0, filterName);
m_query->exec();
if (m_query->next())
@@ -768,11 +707,11 @@ bool QHelpCollectionHandler::removeCustomFilter(const QString &filterName)
return false;
}
- m_query->prepare(QLatin1String("DELETE FROM FilterTable WHERE NameId=?"));
+ m_query->prepare("DELETE FROM FilterTable WHERE NameId=?"_L1);
m_query->bindValue(0, filterNameId);
m_query->exec();
- m_query->prepare(QLatin1String("DELETE FROM FilterNameTable WHERE Id=?"));
+ m_query->prepare("DELETE FROM FilterNameTable WHERE Id=?"_L1);
m_query->bindValue(0, filterNameId);
m_query->exec();
@@ -786,32 +725,31 @@ bool QHelpCollectionHandler::addCustomFilter(const QString &filterName,
return false;
int nameId = -1;
- m_query->prepare(QLatin1String("SELECT Id FROM FilterNameTable WHERE Name=?"));
+ m_query->prepare("SELECT Id FROM FilterNameTable WHERE Name=?"_L1);
m_query->bindValue(0, filterName);
m_query->exec();
if (m_query->next())
nameId = m_query->value(0).toInt();
- m_query->exec(QLatin1String("SELECT Id, Name FROM FilterAttributeTable"));
+ m_query->exec("SELECT Id, Name FROM FilterAttributeTable"_L1);
QStringList idsToInsert = attributes;
QMap<QString, int> attributeMap;
while (m_query->next()) {
// all old attributes
const QString attributeName = m_query->value(1).toString();
attributeMap.insert(attributeName, m_query->value(0).toInt());
- if (idsToInsert.contains(attributeName))
- idsToInsert.removeAll(attributeName);
+ idsToInsert.removeAll(attributeName);
}
- for (const QString &id : qAsConst(idsToInsert)) {
- m_query->prepare(QLatin1String("INSERT INTO FilterAttributeTable VALUES(NULL, ?)"));
+ for (const QString &id : std::as_const(idsToInsert)) {
+ m_query->prepare("INSERT INTO FilterAttributeTable VALUES(NULL, ?)"_L1);
m_query->bindValue(0, id);
m_query->exec();
attributeMap.insert(id, m_query->lastInsertId().toInt());
}
if (nameId < 0) {
- m_query->prepare(QLatin1String("INSERT INTO FilterNameTable VALUES(NULL, ?)"));
+ m_query->prepare("INSERT INTO FilterNameTable VALUES(NULL, ?)"_L1);
m_query->bindValue(0, filterName);
if (m_query->exec())
nameId = m_query->lastInsertId().toInt();
@@ -822,12 +760,12 @@ bool QHelpCollectionHandler::addCustomFilter(const QString &filterName,
return false;
}
- m_query->prepare(QLatin1String("DELETE FROM FilterTable WHERE NameId=?"));
+ m_query->prepare("DELETE FROM FilterTable WHERE NameId=?"_L1);
m_query->bindValue(0, nameId);
m_query->exec();
for (const QString &att : attributes) {
- m_query->prepare(QLatin1String("INSERT INTO FilterTable VALUES(?, ?)"));
+ m_query->prepare("INSERT INTO FilterTable VALUES(?, ?)"_L1);
m_query->bindValue(0, nameId);
m_query->bindValue(1, attributeMap[att]);
if (!m_query->exec())
@@ -844,15 +782,16 @@ QHelpCollectionHandler::FileInfo QHelpCollectionHandler::registeredDocumentation
if (!m_query)
return fileInfo;
- m_query->prepare(QLatin1String("SELECT "
- "NamespaceTable.Name, "
- "NamespaceTable.FilePath, "
- "FolderTable.Name "
- "FROM "
- "NamespaceTable, "
- "FolderTable "
- "WHERE NamespaceTable.Id = FolderTable.NamespaceId "
- "AND NamespaceTable.Name = ? LIMIT 1"));
+ m_query->prepare(
+ "SELECT "
+ "NamespaceTable.Name, "
+ "NamespaceTable.FilePath, "
+ "FolderTable.Name "
+ "FROM "
+ "NamespaceTable, "
+ "FolderTable "
+ "WHERE NamespaceTable.Id = FolderTable.NamespaceId "
+ "AND NamespaceTable.Name = ? LIMIT 1"_L1);
m_query->bindValue(0, namespaceName);
if (!m_query->exec() || !m_query->next())
return fileInfo;
@@ -872,14 +811,15 @@ QHelpCollectionHandler::FileInfoList QHelpCollectionHandler::registeredDocumenta
if (!m_query)
return list;
- m_query->exec(QLatin1String("SELECT "
- "NamespaceTable.Name, "
- "NamespaceTable.FilePath, "
- "FolderTable.Name "
- "FROM "
- "NamespaceTable, "
- "FolderTable "
- "WHERE NamespaceTable.Id = FolderTable.NamespaceId"));
+ m_query->exec(
+ "SELECT "
+ "NamespaceTable.Name, "
+ "NamespaceTable.FilePath, "
+ "FolderTable.Name "
+ "FROM "
+ "NamespaceTable, "
+ "FolderTable "
+ "WHERE NamespaceTable.Id = FolderTable.NamespaceId"_L1);
while (m_query->next()) {
FileInfo fileInfo;
@@ -898,7 +838,7 @@ bool QHelpCollectionHandler::registerDocumentation(const QString &fileName)
return false;
QHelpDBReader reader(fileName, QHelpGlobal::uniquifyConnectionName(
- QLatin1String("QHelpCollectionHandler"), this), nullptr);
+ "QHelpCollectionHandler"_L1, this), nullptr);
if (!reader.init()) {
emit error(tr("Cannot open documentation file %1.").arg(fileName));
return false;
@@ -934,7 +874,7 @@ bool QHelpCollectionHandler::unregisterDocumentation(const QString &namespaceNam
if (!isDBOpened())
return false;
- m_query->prepare(QLatin1String("SELECT Id FROM NamespaceTable WHERE Name = ?"));
+ m_query->prepare("SELECT Id FROM NamespaceTable WHERE Name = ?"_L1);
m_query->bindValue(0, namespaceName);
m_query->exec();
@@ -945,12 +885,12 @@ bool QHelpCollectionHandler::unregisterDocumentation(const QString &namespaceNam
const int nsId = m_query->value(0).toInt();
- m_query->prepare(QLatin1String("DELETE FROM NamespaceTable WHERE Id = ?"));
+ m_query->prepare("DELETE FROM NamespaceTable WHERE Id = ?"_L1);
m_query->bindValue(0, nsId);
if (!m_query->exec())
return false;
- m_query->prepare(QLatin1String("SELECT Id FROM FolderTable WHERE NamespaceId = ?"));
+ m_query->prepare("SELECT Id FROM FolderTable WHERE NamespaceId = ?"_L1);
m_query->bindValue(0, nsId);
m_query->exec();
@@ -961,12 +901,12 @@ bool QHelpCollectionHandler::unregisterDocumentation(const QString &namespaceNam
const int vfId = m_query->value(0).toInt();
- m_query->prepare(QLatin1String("DELETE FROM NamespaceTable WHERE Id = ?"));
+ m_query->prepare("DELETE FROM NamespaceTable WHERE Id = ?"_L1);
m_query->bindValue(0, nsId);
if (!m_query->exec())
return false;
- m_query->prepare(QLatin1String("DELETE FROM FolderTable WHERE NamespaceId = ?"));
+ m_query->prepare("DELETE FROM FolderTable WHERE NamespaceId = ?"_L1);
m_query->bindValue(0, nsId);
if (!m_query->exec())
return false;
@@ -983,17 +923,17 @@ static QHelpCollectionHandler::FileInfo extractFileInfo(const QUrl &url)
{
QHelpCollectionHandler::FileInfo fileInfo;
- if (!url.isValid() || url.toString().count(QLatin1Char('/')) < 4
- || url.scheme() != QLatin1String("qthelp")) {
+ if (!url.isValid() || url.toString().count(u'/') < 4
+ || url.scheme() != "qthelp"_L1) {
return fileInfo;
}
fileInfo.namespaceName = url.authority();
fileInfo.fileName = url.path();
- if (fileInfo.fileName.startsWith(QLatin1Char('/')))
+ if (fileInfo.fileName.startsWith(u'/'))
fileInfo.fileName = fileInfo.fileName.mid(1);
- fileInfo.folderName = fileInfo.fileName.mid(0, fileInfo.fileName.indexOf(QLatin1Char('/'), 1));
- fileInfo.fileName.remove(0, fileInfo.folderName.length() + 1);
+ fileInfo.folderName = fileInfo.fileName.mid(0, fileInfo.fileName.indexOf(u'/', 1));
+ fileInfo.fileName.remove(0, fileInfo.folderName.size() + 1);
return fileInfo;
}
@@ -1007,15 +947,16 @@ bool QHelpCollectionHandler::fileExists(const QUrl &url) const
if (fileInfo.namespaceName.isEmpty())
return false;
- m_query->prepare(QLatin1String("SELECT COUNT (DISTINCT NamespaceTable.Id) "
- "FROM "
- "FileNameTable, "
- "NamespaceTable, "
- "FolderTable "
- "WHERE FolderTable.Name = ? "
- "AND FileNameTable.Name = ? "
- "AND FileNameTable.FolderId = FolderTable.Id "
- "AND FolderTable.NamespaceId = NamespaceTable.Id"));
+ m_query->prepare(
+ "SELECT COUNT (DISTINCT NamespaceTable.Id) "
+ "FROM "
+ "FileNameTable, "
+ "NamespaceTable, "
+ "FolderTable "
+ "WHERE FolderTable.Name = ? "
+ "AND FileNameTable.Name = ? "
+ "AND FileNameTable.FolderId = FolderTable.Id "
+ "AND FolderTable.NamespaceId = NamespaceTable.Id"_L1);
m_query->bindValue(0, fileInfo.folderName);
m_query->bindValue(1, fileInfo.fileName);
if (!m_query->exec() || !m_query->next())
@@ -1030,52 +971,52 @@ bool QHelpCollectionHandler::fileExists(const QUrl &url) const
static QString prepareFilterQuery(const QString &filterName)
{
if (filterName.isEmpty())
- return QString();
-
- return QString::fromLatin1(" AND EXISTS(SELECT * FROM Filter WHERE Filter.Name = ?) "
- "AND ("
- "(NOT EXISTS(" // 1. filter by component
- "SELECT * FROM "
- "ComponentFilter, "
- "Filter "
- "WHERE ComponentFilter.FilterId = Filter.FilterId "
- "AND Filter.Name = ?) "
- "OR NamespaceTable.Id IN ("
- "SELECT "
- "NamespaceTable.Id "
- "FROM "
- "NamespaceTable, "
- "ComponentTable, "
- "ComponentMapping, "
- "ComponentFilter, "
- "Filter "
- "WHERE ComponentMapping.NamespaceId = NamespaceTable.Id "
- "AND ComponentTable.ComponentId = ComponentMapping.ComponentId "
- "AND ((ComponentTable.Name = ComponentFilter.ComponentName) "
- "OR (ComponentTable.Name IS NULL AND ComponentFilter.ComponentName IS NULL)) "
- "AND ComponentFilter.FilterId = Filter.FilterId "
- "AND Filter.Name = ?))"
- " AND "
- "(NOT EXISTS(" // 2. filter by version
- "SELECT * FROM "
- "VersionFilter, "
- "Filter "
- "WHERE VersionFilter.FilterId = Filter.FilterId "
- "AND Filter.Name = ?) "
- "OR NamespaceTable.Id IN ("
- "SELECT "
- "NamespaceTable.Id "
- "FROM "
- "NamespaceTable, "
- "VersionFilter, "
- "VersionTable, "
- "Filter "
- "WHERE VersionFilter.FilterId = Filter.FilterId "
- "AND ((VersionFilter.Version = VersionTable.Version) "
- "OR (VersionFilter.Version IS NULL AND VersionTable.Version IS NULL)) "
- "AND VersionTable.NamespaceId = NamespaceTable.Id "
- "AND Filter.Name = ?))"
- ")");
+ return {};
+
+ return " AND EXISTS(SELECT * FROM Filter WHERE Filter.Name = ?) "
+ "AND ("
+ "(NOT EXISTS(" // 1. filter by component
+ "SELECT * FROM "
+ "ComponentFilter, "
+ "Filter "
+ "WHERE ComponentFilter.FilterId = Filter.FilterId "
+ "AND Filter.Name = ?) "
+ "OR NamespaceTable.Id IN ("
+ "SELECT "
+ "NamespaceTable.Id "
+ "FROM "
+ "NamespaceTable, "
+ "ComponentTable, "
+ "ComponentMapping, "
+ "ComponentFilter, "
+ "Filter "
+ "WHERE ComponentMapping.NamespaceId = NamespaceTable.Id "
+ "AND ComponentTable.ComponentId = ComponentMapping.ComponentId "
+ "AND ((ComponentTable.Name = ComponentFilter.ComponentName) "
+ "OR (ComponentTable.Name IS NULL AND ComponentFilter.ComponentName IS NULL)) "
+ "AND ComponentFilter.FilterId = Filter.FilterId "
+ "AND Filter.Name = ?))"
+ " AND "
+ "(NOT EXISTS(" // 2. filter by version
+ "SELECT * FROM "
+ "VersionFilter, "
+ "Filter "
+ "WHERE VersionFilter.FilterId = Filter.FilterId "
+ "AND Filter.Name = ?) "
+ "OR NamespaceTable.Id IN ("
+ "SELECT "
+ "NamespaceTable.Id "
+ "FROM "
+ "NamespaceTable, "
+ "VersionFilter, "
+ "VersionTable, "
+ "Filter "
+ "WHERE VersionFilter.FilterId = Filter.FilterId "
+ "AND ((VersionFilter.Version = VersionTable.Version) "
+ "OR (VersionFilter.Version IS NULL AND VersionTable.Version IS NULL)) "
+ "AND VersionTable.NamespaceId = NamespaceTable.Id "
+ "AND Filter.Name = ?))"
+ ")"_L1;
}
static void bindFilterQuery(QSqlQuery *query, int bindStart, const QString &filterName)
@@ -1097,47 +1038,46 @@ static QString prepareFilterQuery(int attributesCount,
const QString &filterColumnName)
{
if (!attributesCount)
- return QString();
+ return {};
- QString filterQuery = QString::fromLatin1(" AND (%1.%2 IN (").arg(idTableName, idColumnName);
+ QString filterQuery = " AND (%1.%2 IN ("_L1.arg(idTableName, idColumnName);
- const QString filterQueryTemplate = QString::fromLatin1(
- "SELECT %1.%2 "
- "FROM %1, FilterAttributeTable "
- "WHERE %1.FilterAttributeId = FilterAttributeTable.Id "
- "AND FilterAttributeTable.Name = ?")
- .arg(filterTableName, filterColumnName);
+ const QString filterQueryTemplate =
+ "SELECT %1.%2 "
+ "FROM %1, FilterAttributeTable "
+ "WHERE %1.FilterAttributeId = FilterAttributeTable.Id "
+ "AND FilterAttributeTable.Name = ?"_L1.arg(filterTableName, filterColumnName);
for (int i = 0; i < attributesCount; ++i) {
if (i > 0)
- filterQuery.append(QLatin1String(" INTERSECT "));
+ filterQuery.append(" INTERSECT "_L1);
filterQuery.append(filterQueryTemplate);
}
- filterQuery.append(QLatin1String(") OR NamespaceTable.Id IN ("));
+ filterQuery.append(") OR NamespaceTable.Id IN ("_L1);
- const QString optimizedFilterQueryTemplate = QLatin1String(
- "SELECT OptimizedFilterTable.NamespaceId "
- "FROM OptimizedFilterTable, FilterAttributeTable "
- "WHERE OptimizedFilterTable.FilterAttributeId = FilterAttributeTable.Id "
- "AND FilterAttributeTable.Name = ?");
+ const QString optimizedFilterQueryTemplate =
+ "SELECT OptimizedFilterTable.NamespaceId "
+ "FROM OptimizedFilterTable, FilterAttributeTable "
+ "WHERE OptimizedFilterTable.FilterAttributeId = FilterAttributeTable.Id "
+ "AND FilterAttributeTable.Name = ?"_L1;
for (int i = 0; i < attributesCount; ++i) {
if (i > 0)
- filterQuery.append(QLatin1String(" INTERSECT "));
+ filterQuery.append(" INTERSECT "_L1);
filterQuery.append(optimizedFilterQueryTemplate);
}
- filterQuery.append(QLatin1String("))"));
+ filterQuery.append("))"_L1);
return filterQuery;
}
-void bindFilterQuery(QSqlQuery *query, int startingBindPos, const QStringList &filterAttributes)
+static void bindFilterQuery(QSqlQuery *query, int startingBindPos, const QStringList &filterAttributes)
{
for (int i = 0; i < 2; ++i) {
- for (int j = 0; j < filterAttributes.count(); j++) {
- query->bindValue(i * filterAttributes.count() + j + startingBindPos,
+ for (int j = 0; j < filterAttributes.size(); j++) {
+ query->bindValue(i * filterAttributes.size() + j + startingBindPos,
filterAttributes.at(j));
}
}
@@ -1147,45 +1087,42 @@ QString QHelpCollectionHandler::namespaceForFile(const QUrl &url,
const QStringList &filterAttributes) const
{
if (!isDBOpened())
- return QString();
+ return {};
const FileInfo fileInfo = extractFileInfo(url);
if (fileInfo.namespaceName.isEmpty())
- return QString();
-
- const QString filterlessQuery = QLatin1String(
- "SELECT DISTINCT "
- "NamespaceTable.Name "
- "FROM "
- "FileNameTable, "
- "NamespaceTable, "
- "FolderTable "
- "WHERE FolderTable.Name = ? "
- "AND FileNameTable.Name = ? "
- "AND FileNameTable.FolderId = FolderTable.Id "
- "AND FolderTable.NamespaceId = NamespaceTable.Id");
+ return {};
+
+ const QString filterlessQuery =
+ "SELECT DISTINCT "
+ "NamespaceTable.Name "
+ "FROM "
+ "FileNameTable, "
+ "NamespaceTable, "
+ "FolderTable "
+ "WHERE FolderTable.Name = ? "
+ "AND FileNameTable.Name = ? "
+ "AND FileNameTable.FolderId = FolderTable.Id "
+ "AND FolderTable.NamespaceId = NamespaceTable.Id"_L1;
const QString filterQuery = filterlessQuery
- + prepareFilterQuery(filterAttributes.count(),
- QLatin1String("FileNameTable"),
- QLatin1String("FileId"),
- QLatin1String("FileFilterTable"),
- QLatin1String("FileId"));
+ + prepareFilterQuery(filterAttributes.size(), "FileNameTable"_L1, "FileId"_L1,
+ "FileFilterTable"_L1, "FileId"_L1);
m_query->prepare(filterQuery);
m_query->bindValue(0, fileInfo.folderName);
m_query->bindValue(1, fileInfo.fileName);
- bindFilterQuery(m_query, 2, filterAttributes);
+ bindFilterQuery(m_query.get(), 2, filterAttributes);
if (!m_query->exec())
- return QString();
+ return {};
- QList<QString> namespaceList;
+ QStringList namespaceList;
while (m_query->next())
namespaceList.append(m_query->value(0).toString());
if (namespaceList.isEmpty())
- return QString();
+ return {};
if (namespaceList.contains(fileInfo.namespaceName))
return fileInfo.namespaceName;
@@ -1206,23 +1143,23 @@ QString QHelpCollectionHandler::namespaceForFile(const QUrl &url,
const QString &filterName) const
{
if (!isDBOpened())
- return QString();
+ return {};
const FileInfo fileInfo = extractFileInfo(url);
if (fileInfo.namespaceName.isEmpty())
- return QString();
-
- const QString filterlessQuery = QLatin1String(
- "SELECT DISTINCT "
- "NamespaceTable.Name "
- "FROM "
- "FileNameTable, "
- "NamespaceTable, "
- "FolderTable "
- "WHERE FolderTable.Name = ? "
- "AND FileNameTable.Name = ? "
- "AND FileNameTable.FolderId = FolderTable.Id "
- "AND FolderTable.NamespaceId = NamespaceTable.Id");
+ return {};
+
+ const QString filterlessQuery =
+ "SELECT DISTINCT "
+ "NamespaceTable.Name "
+ "FROM "
+ "FileNameTable, "
+ "NamespaceTable, "
+ "FolderTable "
+ "WHERE FolderTable.Name = ? "
+ "AND FileNameTable.Name = ? "
+ "AND FileNameTable.FolderId = FolderTable.Id "
+ "AND FolderTable.NamespaceId = NamespaceTable.Id"_L1;
const QString filterQuery = filterlessQuery
+ prepareFilterQuery(filterName);
@@ -1230,17 +1167,17 @@ QString QHelpCollectionHandler::namespaceForFile(const QUrl &url,
m_query->prepare(filterQuery);
m_query->bindValue(0, fileInfo.folderName);
m_query->bindValue(1, fileInfo.fileName);
- bindFilterQuery(m_query, 2, filterName);
+ bindFilterQuery(m_query.get(), 2, filterName);
if (!m_query->exec())
- return QString();
+ return {};
- QList<QString> namespaceList;
+ QStringList namespaceList;
while (m_query->next())
namespaceList.append(m_query->value(0).toString());
if (namespaceList.isEmpty())
- return QString();
+ return {};
if (namespaceList.contains(fileInfo.namespaceName))
return fileInfo.namespaceName;
@@ -1262,48 +1199,41 @@ QStringList QHelpCollectionHandler::files(const QString &namespaceName,
const QString &extensionFilter) const
{
if (!isDBOpened())
- return QStringList();
+ return {};
const QString extensionQuery = extensionFilter.isEmpty()
- ? QString() : QLatin1String(" AND FileNameTable.Name LIKE ?");
- const QString filterlessQuery = QLatin1String(
- "SELECT "
- "FolderTable.Name, "
- "FileNameTable.Name "
- "FROM "
- "FileNameTable, "
- "FolderTable, "
- "NamespaceTable "
- "WHERE FileNameTable.FolderId = FolderTable.Id "
- "AND FolderTable.NamespaceId = NamespaceTable.Id "
- "AND NamespaceTable.Name = ?") + extensionQuery;
+ ? QString() : " AND FileNameTable.Name LIKE ?"_L1;
+ const QString filterlessQuery =
+ "SELECT "
+ "FolderTable.Name, "
+ "FileNameTable.Name "
+ "FROM "
+ "FileNameTable, "
+ "FolderTable, "
+ "NamespaceTable "
+ "WHERE FileNameTable.FolderId = FolderTable.Id "
+ "AND FolderTable.NamespaceId = NamespaceTable.Id "
+ "AND NamespaceTable.Name = ?"_L1 + extensionQuery;
const QString filterQuery = filterlessQuery
- + prepareFilterQuery(filterAttributes.count(),
- QLatin1String("FileNameTable"),
- QLatin1String("FileId"),
- QLatin1String("FileFilterTable"),
- QLatin1String("FileId"));
+ + prepareFilterQuery(filterAttributes.size(), "FileNameTable"_L1, "FileId"_L1,
+ "FileFilterTable"_L1, "FileId"_L1);
m_query->prepare(filterQuery);
m_query->bindValue(0, namespaceName);
int bindCount = 1;
if (!extensionFilter.isEmpty()) {
- m_query->bindValue(bindCount, QString::fromLatin1("%.%1").arg(extensionFilter));
+ m_query->bindValue(bindCount, "%.%1"_L1.arg(extensionFilter));
++bindCount;
}
- bindFilterQuery(m_query, bindCount, filterAttributes);
+ bindFilterQuery(m_query.get(), bindCount, filterAttributes);
if (!m_query->exec())
- return QStringList();
+ return {};
QStringList fileNames;
- while (m_query->next()) {
- fileNames.append(m_query->value(0).toString()
- + QLatin1Char('/')
- + m_query->value(1).toString());
- }
-
+ while (m_query->next())
+ fileNames.append(m_query->value(0).toString() + u'/' + m_query->value(1).toString());
return fileNames;
}
@@ -1312,21 +1242,21 @@ QStringList QHelpCollectionHandler::files(const QString &namespaceName,
const QString &extensionFilter) const
{
if (!isDBOpened())
- return QStringList();
+ return {};
const QString extensionQuery = extensionFilter.isEmpty()
- ? QString() : QLatin1String(" AND FileNameTable.Name LIKE ?");
- const QString filterlessQuery = QLatin1String(
- "SELECT "
- "FolderTable.Name, "
- "FileNameTable.Name "
- "FROM "
- "FileNameTable, "
- "FolderTable, "
- "NamespaceTable "
- "WHERE FileNameTable.FolderId = FolderTable.Id "
- "AND FolderTable.NamespaceId = NamespaceTable.Id "
- "AND NamespaceTable.Name = ?") + extensionQuery;
+ ? QString() : " AND FileNameTable.Name LIKE ?"_L1;
+ const QString filterlessQuery =
+ "SELECT "
+ "FolderTable.Name, "
+ "FileNameTable.Name "
+ "FROM "
+ "FileNameTable, "
+ "FolderTable, "
+ "NamespaceTable "
+ "WHERE FileNameTable.FolderId = FolderTable.Id "
+ "AND FolderTable.NamespaceId = NamespaceTable.Id "
+ "AND NamespaceTable.Name = ?"_L1 + extensionQuery;
const QString filterQuery = filterlessQuery
+ prepareFilterQuery(filterName);
@@ -1335,33 +1265,29 @@ QStringList QHelpCollectionHandler::files(const QString &namespaceName,
m_query->bindValue(0, namespaceName);
int bindCount = 1;
if (!extensionFilter.isEmpty()) {
- m_query->bindValue(bindCount, QString::fromLatin1("%.%1").arg(extensionFilter));
+ m_query->bindValue(bindCount, "%.%1"_L1.arg(extensionFilter));
++bindCount;
}
- bindFilterQuery(m_query, bindCount, filterName);
+ bindFilterQuery(m_query.get(), bindCount, filterName);
if (!m_query->exec())
- return QStringList();
+ return{};
QStringList fileNames;
- while (m_query->next()) {
- fileNames.append(m_query->value(0).toString()
- + QLatin1Char('/')
- + m_query->value(1).toString());
- }
-
+ while (m_query->next())
+ fileNames.append(m_query->value(0).toString() + u'/' + m_query->value(1).toString());
return fileNames;
}
QUrl QHelpCollectionHandler::findFile(const QUrl &url, const QStringList &filterAttributes) const
{
if (!isDBOpened())
- return QUrl();
+ return {};
const QString namespaceName = namespaceForFile(url, filterAttributes);
if (namespaceName.isEmpty())
- return QUrl();
+ return {};
QUrl result = url;
result.setAuthority(namespaceName);
@@ -1371,11 +1297,11 @@ QUrl QHelpCollectionHandler::findFile(const QUrl &url, const QStringList &filter
QUrl QHelpCollectionHandler::findFile(const QUrl &url, const QString &filterName) const
{
if (!isDBOpened())
- return QUrl();
+ return {};
const QString namespaceName = namespaceForFile(url, filterName);
if (namespaceName.isEmpty())
- return QUrl();
+ return {};
QUrl result = url;
result.setAuthority(namespaceName);
@@ -1385,11 +1311,11 @@ QUrl QHelpCollectionHandler::findFile(const QUrl &url, const QString &filterName
QByteArray QHelpCollectionHandler::fileData(const QUrl &url) const
{
if (!isDBOpened())
- return QByteArray();
+ return {};
const QString namespaceName = namespaceForFile(url, QString());
if (namespaceName.isEmpty())
- return QByteArray();
+ return {};
const FileInfo fileInfo = extractFileInfo(url);
@@ -1397,9 +1323,9 @@ QByteArray QHelpCollectionHandler::fileData(const QUrl &url) const
const QString absFileName = absoluteDocPath(docInfo.fileName);
QHelpDBReader reader(absFileName, QHelpGlobal::uniquifyConnectionName(
- docInfo.fileName, const_cast<QHelpCollectionHandler *>(this)), nullptr);
+ docInfo.fileName, const_cast<QHelpCollectionHandler *>(this)), nullptr);
if (!reader.init())
- return QByteArray();
+ return {};
return reader.fileData(fileInfo.folderName, fileInfo.fileName);
}
@@ -1411,29 +1337,26 @@ QStringList QHelpCollectionHandler::indicesForFilter(const QStringList &filterAt
if (!isDBOpened())
return indices;
- const QString filterlessQuery = QString::fromLatin1(
- "SELECT DISTINCT "
- "IndexTable.Name "
- "FROM "
- "IndexTable, "
- "FileNameTable, "
- "FolderTable, "
- "NamespaceTable "
- "WHERE IndexTable.FileId = FileNameTable.FileId "
- "AND FileNameTable.FolderId = FolderTable.Id "
- "AND IndexTable.NamespaceId = NamespaceTable.Id");
+ const QString filterlessQuery =
+ "SELECT DISTINCT "
+ "IndexTable.Name "
+ "FROM "
+ "IndexTable, "
+ "FileNameTable, "
+ "FolderTable, "
+ "NamespaceTable "
+ "WHERE IndexTable.FileId = FileNameTable.FileId "
+ "AND FileNameTable.FolderId = FolderTable.Id "
+ "AND IndexTable.NamespaceId = NamespaceTable.Id"_L1;
const QString filterQuery = filterlessQuery
- + prepareFilterQuery(filterAttributes.count(),
- QLatin1String("IndexTable"),
- QLatin1String("Id"),
- QLatin1String("IndexFilterTable"),
- QLatin1String("IndexId"))
- + QLatin1String(" ORDER BY LOWER(IndexTable.Name), IndexTable.Name");
+ + prepareFilterQuery(filterAttributes.size(), "IndexTable"_L1, "Id"_L1,
+ "IndexFilterTable"_L1, "IndexId"_L1)
+ + " ORDER BY LOWER(IndexTable.Name), IndexTable.Name"_L1;
// this doesn't work: ASC COLLATE NOCASE
m_query->prepare(filterQuery);
- bindFilterQuery(m_query, 0, filterAttributes);
+ bindFilterQuery(m_query.get(), 0, filterAttributes);
m_query->exec();
@@ -1443,7 +1366,6 @@ QStringList QHelpCollectionHandler::indicesForFilter(const QStringList &filterAt
return indices;
}
-
QStringList QHelpCollectionHandler::indicesForFilter(const QString &filterName) const
{
QStringList indices;
@@ -1451,24 +1373,24 @@ QStringList QHelpCollectionHandler::indicesForFilter(const QString &filterName)
if (!isDBOpened())
return indices;
- const QString filterlessQuery = QString::fromLatin1(
- "SELECT DISTINCT "
- "IndexTable.Name "
- "FROM "
- "IndexTable, "
- "FileNameTable, "
- "FolderTable, "
- "NamespaceTable "
- "WHERE IndexTable.FileId = FileNameTable.FileId "
- "AND FileNameTable.FolderId = FolderTable.Id "
- "AND IndexTable.NamespaceId = NamespaceTable.Id");
+ const QString filterlessQuery =
+ "SELECT DISTINCT "
+ "IndexTable.Name "
+ "FROM "
+ "IndexTable, "
+ "FileNameTable, "
+ "FolderTable, "
+ "NamespaceTable "
+ "WHERE IndexTable.FileId = FileNameTable.FileId "
+ "AND FileNameTable.FolderId = FolderTable.Id "
+ "AND IndexTable.NamespaceId = NamespaceTable.Id"_L1;
const QString filterQuery = filterlessQuery
+ prepareFilterQuery(filterName)
- + QLatin1String(" ORDER BY LOWER(IndexTable.Name), IndexTable.Name");
+ + " ORDER BY LOWER(IndexTable.Name), IndexTable.Name"_L1;
m_query->prepare(filterQuery);
- bindFilterQuery(m_query, 0, filterName);
+ bindFilterQuery(m_query.get(), 0, filterName);
m_query->exec();
@@ -1481,7 +1403,7 @@ QStringList QHelpCollectionHandler::indicesForFilter(const QString &filterName)
static QString getTitle(const QByteArray &contents)
{
if (!contents.size())
- return QString();
+ return {};
int depth = 0;
QString link;
@@ -1499,33 +1421,30 @@ QList<QHelpCollectionHandler::ContentsData> QHelpCollectionHandler::contentsForF
const QStringList &filterAttributes) const
{
if (!isDBOpened())
- return QList<ContentsData>();
-
- const QString filterlessQuery = QString::fromLatin1(
- "SELECT DISTINCT "
- "NamespaceTable.Name, "
- "FolderTable.Name, "
- "ContentsTable.Data, "
- "VersionTable.Version "
- "FROM "
- "FolderTable, "
- "NamespaceTable, "
- "ContentsTable, "
- "VersionTable "
- "WHERE ContentsTable.NamespaceId = NamespaceTable.Id "
- "AND NamespaceTable.Id = FolderTable.NamespaceId "
- "AND ContentsTable.NamespaceId = NamespaceTable.Id "
- "AND VersionTable.NamespaceId = NamespaceTable.Id");
+ return {};
+
+ const QString filterlessQuery =
+ "SELECT DISTINCT "
+ "NamespaceTable.Name, "
+ "FolderTable.Name, "
+ "ContentsTable.Data, "
+ "VersionTable.Version "
+ "FROM "
+ "FolderTable, "
+ "NamespaceTable, "
+ "ContentsTable, "
+ "VersionTable "
+ "WHERE ContentsTable.NamespaceId = NamespaceTable.Id "
+ "AND NamespaceTable.Id = FolderTable.NamespaceId "
+ "AND ContentsTable.NamespaceId = NamespaceTable.Id "
+ "AND VersionTable.NamespaceId = NamespaceTable.Id"_L1;
const QString filterQuery = filterlessQuery
- + prepareFilterQuery(filterAttributes.count(),
- QLatin1String("ContentsTable"),
- QLatin1String("Id"),
- QLatin1String("ContentsFilterTable"),
- QLatin1String("ContentsId"));
+ + prepareFilterQuery(filterAttributes.size(), "ContentsTable"_L1, "Id"_L1,
+ "ContentsFilterTable"_L1, "ContentsId"_L1);
m_query->prepare(filterQuery);
- bindFilterQuery(m_query, 0, filterAttributes);
+ bindFilterQuery(m_query.get(), 0, filterAttributes);
m_query->exec();
@@ -1546,7 +1465,7 @@ QList<QHelpCollectionHandler::ContentsData> QHelpCollectionHandler::contentsForF
}
QList<QHelpCollectionHandler::ContentsData> result;
- for (const auto &versionContents : qAsConst(contentsMap)) {
+ for (const auto &versionContents : std::as_const(contentsMap)) {
// insert items in the reverse order of version number
const auto itBegin = versionContents.constBegin();
auto it = versionContents.constEnd();
@@ -1555,36 +1474,34 @@ QList<QHelpCollectionHandler::ContentsData> QHelpCollectionHandler::contentsForF
result.append(it.value());
}
}
-
return result;
}
QList<QHelpCollectionHandler::ContentsData> QHelpCollectionHandler::contentsForFilter(const QString &filterName) const
{
if (!isDBOpened())
- return QList<ContentsData>();
-
- const QString filterlessQuery = QString::fromLatin1(
- "SELECT DISTINCT "
- "NamespaceTable.Name, "
- "FolderTable.Name, "
- "ContentsTable.Data, "
- "VersionTable.Version "
- "FROM "
- "FolderTable, "
- "NamespaceTable, "
- "ContentsTable, "
- "VersionTable "
- "WHERE ContentsTable.NamespaceId = NamespaceTable.Id "
- "AND NamespaceTable.Id = FolderTable.NamespaceId "
- "AND ContentsTable.NamespaceId = NamespaceTable.Id "
- "AND VersionTable.NamespaceId = NamespaceTable.Id");
-
- const QString filterQuery = filterlessQuery
- + prepareFilterQuery(filterName);
+ return {};
+
+ const QString filterlessQuery =
+ "SELECT DISTINCT "
+ "NamespaceTable.Name, "
+ "FolderTable.Name, "
+ "ContentsTable.Data, "
+ "VersionTable.Version "
+ "FROM "
+ "FolderTable, "
+ "NamespaceTable, "
+ "ContentsTable, "
+ "VersionTable "
+ "WHERE ContentsTable.NamespaceId = NamespaceTable.Id "
+ "AND NamespaceTable.Id = FolderTable.NamespaceId "
+ "AND ContentsTable.NamespaceId = NamespaceTable.Id "
+ "AND VersionTable.NamespaceId = NamespaceTable.Id"_L1;
+
+ const QString filterQuery = filterlessQuery + prepareFilterQuery(filterName);
m_query->prepare(filterQuery);
- bindFilterQuery(m_query, 0, filterName);
+ bindFilterQuery(m_query.get(), 0, filterName);
m_query->exec();
@@ -1605,7 +1522,7 @@ QList<QHelpCollectionHandler::ContentsData> QHelpCollectionHandler::contentsForF
}
QList<QHelpCollectionHandler::ContentsData> result;
- for (const auto &versionContents : qAsConst(contentsMap)) {
+ for (const auto &versionContents : std::as_const(contentsMap)) {
// insert items in the reverse order of version number
const auto itBegin = versionContents.constBegin();
auto it = versionContents.constEnd();
@@ -1614,7 +1531,6 @@ QList<QHelpCollectionHandler::ContentsData> QHelpCollectionHandler::contentsForF
result.append(it.value());
}
}
-
return result;
}
@@ -1623,7 +1539,7 @@ bool QHelpCollectionHandler::removeCustomValue(const QString &key)
if (!isDBOpened())
return false;
- m_query->prepare(QLatin1String("DELETE FROM SettingsTable WHERE Key=?"));
+ m_query->prepare("DELETE FROM SettingsTable WHERE Key=?"_L1);
m_query->bindValue(0, key);
return m_query->exec();
}
@@ -1634,7 +1550,7 @@ QVariant QHelpCollectionHandler::customValue(const QString &key,
if (!m_query)
return defaultValue;
- m_query->prepare(QLatin1String("SELECT COUNT(Key) FROM SettingsTable WHERE Key=?"));
+ m_query->prepare("SELECT COUNT(Key) FROM SettingsTable WHERE Key=?"_L1);
m_query->bindValue(0, key);
if (!m_query->exec() || !m_query->next() || !m_query->value(0).toInt()) {
m_query->clear();
@@ -1642,14 +1558,13 @@ QVariant QHelpCollectionHandler::customValue(const QString &key,
}
m_query->clear();
- m_query->prepare(QLatin1String("SELECT Value FROM SettingsTable WHERE Key=?"));
+ m_query->prepare("SELECT Value FROM SettingsTable WHERE Key=?"_L1);
m_query->bindValue(0, key);
if (m_query->exec() && m_query->next()) {
const QVariant &value = m_query->value(0);
m_query->clear();
return value;
}
-
return defaultValue;
}
@@ -1659,15 +1574,15 @@ bool QHelpCollectionHandler::setCustomValue(const QString &key,
if (!isDBOpened())
return false;
- m_query->prepare(QLatin1String("SELECT Value FROM SettingsTable WHERE Key=?"));
+ m_query->prepare("SELECT Value FROM SettingsTable WHERE Key=?"_L1);
m_query->bindValue(0, key);
m_query->exec();
if (m_query->next()) {
- m_query->prepare(QLatin1String("UPDATE SettingsTable SET Value=? where Key=?"));
+ m_query->prepare("UPDATE SettingsTable SET Value=? where Key=?"_L1);
m_query->bindValue(0, value);
m_query->bindValue(1, key);
} else {
- m_query->prepare(QLatin1String("INSERT INTO SettingsTable VALUES(?, ?)"));
+ m_query->prepare("INSERT INTO SettingsTable VALUES(?, ?)"_L1);
m_query->bindValue(0, key);
m_query->bindValue(1, value);
}
@@ -1680,7 +1595,7 @@ bool QHelpCollectionHandler::registerFilterAttributes(const QList<QStringList> &
if (!isDBOpened())
return false;
- m_query->exec(QLatin1String("SELECT Name FROM FilterAttributeTable"));
+ m_query->exec("SELECT Name FROM FilterAttributeTable"_L1);
QSet<QString> atts;
while (m_query->next())
atts.insert(m_query->value(0).toString());
@@ -1688,7 +1603,7 @@ bool QHelpCollectionHandler::registerFilterAttributes(const QList<QStringList> &
for (const QStringList &attributeSet : attributeSets) {
for (const QString &attribute : attributeSet) {
if (!atts.contains(attribute)) {
- m_query->prepare(QLatin1String("INSERT INTO FilterAttributeTable VALUES(NULL, ?)"));
+ m_query->prepare("INSERT INTO FilterAttributeTable VALUES(NULL, ?)"_L1);
m_query->bindValue(0, attribute);
m_query->exec();
}
@@ -1710,8 +1625,8 @@ bool QHelpCollectionHandler::registerFileAttributeSets(const QList<QStringList>
QVariantList attributeSetIds;
QVariantList filterAttributeIds;
- if (!m_query->exec(QLatin1String("SELECT MAX(FilterAttributeSetId) FROM FileAttributeSetTable"))
- || !m_query->next()) {
+ if (!m_query->exec("SELECT MAX(FilterAttributeSetId) FROM FileAttributeSetTable"_L1)
+ || !m_query->next()) {
return false;
}
@@ -1721,8 +1636,7 @@ bool QHelpCollectionHandler::registerFileAttributeSets(const QList<QStringList>
++attributeSetId;
for (const QString &attribute : attributeSet) {
-
- m_query->prepare(QLatin1String("SELECT Id FROM FilterAttributeTable WHERE Name=?"));
+ m_query->prepare("SELECT Id FROM FilterAttributeTable WHERE Name=?"_L1);
m_query->bindValue(0, attribute);
if (!m_query->exec() || !m_query->next())
@@ -1734,9 +1648,9 @@ bool QHelpCollectionHandler::registerFileAttributeSets(const QList<QStringList>
}
}
- m_query->prepare(QLatin1String("INSERT INTO FileAttributeSetTable "
- "(NamespaceId, FilterAttributeSetId, FilterAttributeId) "
- "VALUES(?, ?, ?)"));
+ m_query->prepare("INSERT INTO FileAttributeSetTable "
+ "(NamespaceId, FilterAttributeSetId, FilterAttributeId) "
+ "VALUES(?, ?, ?)"_L1);
m_query->addBindValue(nsIds);
m_query->addBindValue(attributeSetIds);
m_query->addBindValue(filterAttributeIds);
@@ -1747,7 +1661,7 @@ QStringList QHelpCollectionHandler::filterAttributes() const
{
QStringList list;
if (m_query) {
- m_query->exec(QLatin1String("SELECT Name FROM FilterAttributeTable"));
+ m_query->exec("SELECT Name FROM FilterAttributeTable"_L1);
while (m_query->next())
list.append(m_query->value(0).toString());
}
@@ -1758,16 +1672,16 @@ QStringList QHelpCollectionHandler::filterAttributes(const QString &filterName)
{
QStringList list;
if (m_query) {
- m_query->prepare(QLatin1String(
- "SELECT "
- "FilterAttributeTable.Name "
- "FROM "
- "FilterAttributeTable, "
- "FilterTable, "
- "FilterNameTable "
- "WHERE FilterAttributeTable.Id = FilterTable.FilterAttributeId "
- "AND FilterTable.NameId = FilterNameTable.Id "
- "AND FilterNameTable.Name=?"));
+ m_query->prepare(
+ "SELECT "
+ "FilterAttributeTable.Name "
+ "FROM "
+ "FilterAttributeTable, "
+ "FilterTable, "
+ "FilterNameTable "
+ "WHERE FilterAttributeTable.Id = FilterTable.FilterAttributeId "
+ "AND FilterTable.NameId = FilterNameTable.Id "
+ "AND FilterNameTable.Name=?"_L1);
m_query->bindValue(0, filterName);
m_query->exec();
while (m_query->next())
@@ -1778,25 +1692,25 @@ QStringList QHelpCollectionHandler::filterAttributes(const QString &filterName)
QList<QStringList> QHelpCollectionHandler::filterAttributeSets(const QString &namespaceName) const
{
- QList<QStringList> result;
if (!isDBOpened())
- return result;
-
- m_query->prepare(QLatin1String(
- "SELECT "
- "FileAttributeSetTable.FilterAttributeSetId, "
- "FilterAttributeTable.Name "
- "FROM "
- "FileAttributeSetTable, "
- "FilterAttributeTable, "
- "NamespaceTable "
- "WHERE FileAttributeSetTable.FilterAttributeId = FilterAttributeTable.Id "
- "AND FileAttributeSetTable.NamespaceId = NamespaceTable.Id "
- "AND NamespaceTable.Name = ? "
- "ORDER BY FileAttributeSetTable.FilterAttributeSetId"));
+ return {};
+
+ m_query->prepare(
+ "SELECT "
+ "FileAttributeSetTable.FilterAttributeSetId, "
+ "FilterAttributeTable.Name "
+ "FROM "
+ "FileAttributeSetTable, "
+ "FilterAttributeTable, "
+ "NamespaceTable "
+ "WHERE FileAttributeSetTable.FilterAttributeId = FilterAttributeTable.Id "
+ "AND FileAttributeSetTable.NamespaceId = NamespaceTable.Id "
+ "AND NamespaceTable.Name = ? "
+ "ORDER BY FileAttributeSetTable.FilterAttributeSetId"_L1);
m_query->bindValue(0, namespaceName);
m_query->exec();
int oldId = -1;
+ QList<QStringList> result;
while (m_query->next()) {
const int id = m_query->value(0).toInt();
if (id != oldId) {
@@ -1808,29 +1722,28 @@ QList<QStringList> QHelpCollectionHandler::filterAttributeSets(const QString &na
if (result.isEmpty())
result.append(QStringList());
-
return result;
}
QString QHelpCollectionHandler::namespaceVersion(const QString &namespaceName) const
{
if (!m_query)
- return QString();
-
- m_query->prepare(QLatin1String("SELECT "
- "VersionTable.Version "
- "FROM "
- "NamespaceTable, "
- "VersionTable "
- "WHERE NamespaceTable.Name = ? "
- "AND NamespaceTable.Id = VersionTable.NamespaceId"));
+ return {};
+
+ m_query->prepare(
+ "SELECT "
+ "VersionTable.Version "
+ "FROM "
+ "NamespaceTable, "
+ "VersionTable "
+ "WHERE NamespaceTable.Name = ? "
+ "AND NamespaceTable.Id = VersionTable.NamespaceId"_L1);
m_query->bindValue(0, namespaceName);
if (!m_query->exec() || !m_query->next())
- return QString();
+ return {};
const QString ret = m_query->value(0).toString();
m_query->clear();
-
return ret;
}
@@ -1840,7 +1753,7 @@ int QHelpCollectionHandler::registerNamespace(const QString &nspace, const QStri
if (!m_query)
return errorValue;
- m_query->prepare(QLatin1String("SELECT COUNT(Id) FROM NamespaceTable WHERE Name=?"));
+ m_query->prepare("SELECT COUNT(Id) FROM NamespaceTable WHERE Name=?"_L1);
m_query->bindValue(0, nspace);
m_query->exec();
while (m_query->next()) {
@@ -1851,7 +1764,7 @@ int QHelpCollectionHandler::registerNamespace(const QString &nspace, const QStri
}
QFileInfo fi(m_collectionFile);
- m_query->prepare(QLatin1String("INSERT INTO NamespaceTable VALUES(NULL, ?, ?)"));
+ m_query->prepare("INSERT INTO NamespaceTable VALUES(NULL, ?, ?)"_L1);
m_query->bindValue(0, nspace);
m_query->bindValue(1, fi.absoluteDir().relativeFilePath(fileName));
int namespaceId = errorValue;
@@ -1871,7 +1784,7 @@ int QHelpCollectionHandler::registerVirtualFolder(const QString &folderName, int
if (!m_query)
return false;
- m_query->prepare(QLatin1String("INSERT INTO FolderTable VALUES(NULL, ?, ?)"));
+ m_query->prepare("INSERT INTO FolderTable VALUES(NULL, ?, ?)"_L1);
m_query->bindValue(0, namespaceId);
m_query->bindValue(1, folderName);
@@ -1884,27 +1797,25 @@ int QHelpCollectionHandler::registerVirtualFolder(const QString &folderName, int
emit error(tr("Cannot register virtual folder '%1'.").arg(folderName));
return -1;
}
-
if (registerComponent(folderName, namespaceId) < 0)
return -1;
-
return virtualId;
}
int QHelpCollectionHandler::registerComponent(const QString &componentName, int namespaceId)
{
- m_query->prepare(QLatin1String("SELECT ComponentId FROM ComponentTable WHERE Name = ?"));
+ m_query->prepare("SELECT ComponentId FROM ComponentTable WHERE Name = ?"_L1);
m_query->bindValue(0, componentName);
if (!m_query->exec())
return -1;
if (!m_query->next()) {
- m_query->prepare(QLatin1String("INSERT INTO ComponentTable VALUES(NULL, ?)"));
+ m_query->prepare("INSERT INTO ComponentTable VALUES(NULL, ?)"_L1);
m_query->bindValue(0, componentName);
if (!m_query->exec())
return -1;
- m_query->prepare(QLatin1String("SELECT ComponentId FROM ComponentTable WHERE Name = ?"));
+ m_query->prepare("SELECT ComponentId FROM ComponentTable WHERE Name = ?"_L1);
m_query->bindValue(0, componentName);
if (!m_query->exec() || !m_query->next())
return -1;
@@ -1912,7 +1823,7 @@ int QHelpCollectionHandler::registerComponent(const QString &componentName, int
const int componentId = m_query->value(0).toInt();
- m_query->prepare(QLatin1String("INSERT INTO ComponentMapping VALUES(?, ?)"));
+ m_query->prepare("INSERT INTO ComponentMapping VALUES(?, ?)"_L1);
m_query->bindValue(0, componentId);
m_query->bindValue(1, namespaceId);
if (!m_query->exec())
@@ -1926,9 +1837,7 @@ bool QHelpCollectionHandler::registerVersion(const QString &version, int namespa
if (!m_query)
return false;
- m_query->prepare(QLatin1String("INSERT INTO VersionTable "
- "(NamespaceId, Version) "
- "VALUES(?, ?)"));
+ m_query->prepare("INSERT INTO VersionTable (NamespaceId, Version) VALUES(?, ?)"_L1);
m_query->addBindValue(namespaceId);
m_query->addBindValue(version);
return m_query->exec();
@@ -1940,7 +1849,7 @@ bool QHelpCollectionHandler::registerIndexAndNamespaceFilterTables(
if (!isDBOpened())
return false;
- m_query->prepare(QLatin1String("SELECT Id, FilePath FROM NamespaceTable WHERE Name=?"));
+ m_query->prepare("SELECT Id, FilePath FROM NamespaceTable WHERE Name=?"_L1);
m_query->bindValue(0, nameSpace);
m_query->exec();
if (!m_query->next())
@@ -1949,7 +1858,7 @@ bool QHelpCollectionHandler::registerIndexAndNamespaceFilterTables(
const int nsId = m_query->value(0).toInt();
const QString fileName = m_query->value(1).toString();
- m_query->prepare(QLatin1String("SELECT Id, Name FROM FolderTable WHERE NamespaceId=?"));
+ m_query->prepare("SELECT Id, Name FROM FolderTable WHERE NamespaceId=?"_L1);
m_query->bindValue(0, nsId);
m_query->exec();
if (!m_query->next())
@@ -1974,7 +1883,6 @@ bool QHelpCollectionHandler::registerIndexAndNamespaceFilterTables(
if (createDefaultVersionFilter)
createVersionFilter(reader.version());
-
return true;
}
@@ -1992,7 +1900,7 @@ void QHelpCollectionHandler::createVersionFilter(const QString &version)
return;
QHelpFilterData filterData;
- filterData.setVersions(QList<QVersionNumber>() << versionNumber);
+ filterData.setVersions({versionNumber});
setFilterData(filterName, filterData);
}
@@ -2011,7 +1919,7 @@ bool QHelpCollectionHandler::registerIndexTable(const QHelpDBReader::IndexTable
fileNames.reserve(fileSize);
fileTitles.reserve(fileSize);
- if (!m_query->exec(QLatin1String("SELECT MAX(FileId) FROM FileNameTable")) || !m_query->next())
+ if (!m_query->exec("SELECT MAX(FileId) FROM FileNameTable"_L1) || !m_query->next())
return false;
const int maxFileId = m_query->value(0).toInt();
@@ -2027,7 +1935,7 @@ bool QHelpCollectionHandler::registerIndexTable(const QHelpDBReader::IndexTable
++newFileId;
}
- m_query->prepare(QLatin1String("INSERT INTO FileNameTable VALUES(?, ?, NULL, ?)"));
+ m_query->prepare("INSERT INTO FileNameTable VALUES(?, ?, NULL, ?)"_L1);
m_query->addBindValue(fileFolderIds);
m_query->addBindValue(fileNames);
m_query->addBindValue(fileTitles);
@@ -2037,7 +1945,7 @@ bool QHelpCollectionHandler::registerIndexTable(const QHelpDBReader::IndexTable
for (auto it = filterAttributeToNewFileId.cbegin(),
end = filterAttributeToNewFileId.cend(); it != end; ++it) {
const QString filterAttribute = it.key();
- m_query->prepare(QLatin1String("SELECT Id From FilterAttributeTable WHERE Name = ?"));
+ m_query->prepare("SELECT Id From FilterAttributeTable WHERE Name = ?"_L1);
m_query->bindValue(0, filterAttribute);
if (!m_query->exec() || !m_query->next())
return false;
@@ -2045,10 +1953,10 @@ bool QHelpCollectionHandler::registerIndexTable(const QHelpDBReader::IndexTable
const int attributeId = m_query->value(0).toInt();
QVariantList attributeIds;
- for (int i = 0; i < it.value().count(); i++)
+ for (int i = 0; i < it.value().size(); i++)
attributeIds.append(attributeId);
- m_query->prepare(QLatin1String("INSERT INTO FileFilterTable VALUES(?, ?)"));
+ m_query->prepare("INSERT INTO FileFilterTable VALUES(?, ?)"_L1);
m_query->addBindValue(attributeIds);
m_query->addBindValue(it.value());
if (!m_query->execBatch())
@@ -2057,7 +1965,7 @@ bool QHelpCollectionHandler::registerIndexTable(const QHelpDBReader::IndexTable
QMap<QString, QVariantList> filterAttributeToNewIndexId;
- if (!m_query->exec(QLatin1String("SELECT MAX(Id) FROM IndexTable")) || !m_query->next())
+ if (!m_query->exec("SELECT MAX(Id) FROM IndexTable"_L1) || !m_query->next())
return false;
const int maxIndexId = m_query->value(0).toInt();
@@ -2087,7 +1995,7 @@ bool QHelpCollectionHandler::registerIndexTable(const QHelpDBReader::IndexTable
++newIndexId;
}
- m_query->prepare(QLatin1String("INSERT INTO IndexTable VALUES(NULL, ?, ?, ?, ?, ?)"));
+ m_query->prepare("INSERT INTO IndexTable VALUES(NULL, ?, ?, ?, ?, ?)"_L1);
m_query->addBindValue(indexNames);
m_query->addBindValue(indexIdentifiers);
m_query->addBindValue(indexNamespaceIds);
@@ -2099,7 +2007,7 @@ bool QHelpCollectionHandler::registerIndexTable(const QHelpDBReader::IndexTable
for (auto it = filterAttributeToNewIndexId.cbegin(),
end = filterAttributeToNewIndexId.cend(); it != end; ++it) {
const QString filterAttribute = it.key();
- m_query->prepare(QLatin1String("SELECT Id From FilterAttributeTable WHERE Name = ?"));
+ m_query->prepare("SELECT Id From FilterAttributeTable WHERE Name = ?"_L1);
m_query->bindValue(0, filterAttribute);
if (!m_query->exec() || !m_query->next())
return false;
@@ -2107,10 +2015,10 @@ bool QHelpCollectionHandler::registerIndexTable(const QHelpDBReader::IndexTable
const int attributeId = m_query->value(0).toInt();
QVariantList attributeIds;
- for (int i = 0; i < it.value().count(); i++)
+ for (int i = 0; i < it.value().size(); i++)
attributeIds.append(attributeId);
- m_query->prepare(QLatin1String("INSERT INTO IndexFilterTable VALUES(?, ?)"));
+ m_query->prepare("INSERT INTO IndexFilterTable VALUES(?, ?)"_L1);
m_query->addBindValue(attributeIds);
m_query->addBindValue(it.value());
if (!m_query->execBatch())
@@ -2125,7 +2033,7 @@ bool QHelpCollectionHandler::registerIndexTable(const QHelpDBReader::IndexTable
contentsNsIds.reserve(contentsSize);
contentsData.reserve(contentsSize);
- if (!m_query->exec(QLatin1String("SELECT MAX(Id) FROM ContentsTable")) || !m_query->next())
+ if (!m_query->exec("SELECT MAX(Id) FROM ContentsTable"_L1) || !m_query->next())
return false;
const int maxContentsId = m_query->value(0).toInt();
@@ -2142,7 +2050,7 @@ bool QHelpCollectionHandler::registerIndexTable(const QHelpDBReader::IndexTable
++newContentsId;
}
- m_query->prepare(QLatin1String("INSERT INTO ContentsTable VALUES(NULL, ?, ?)"));
+ m_query->prepare("INSERT INTO ContentsTable VALUES(NULL, ?, ?)"_L1);
m_query->addBindValue(contentsNsIds);
m_query->addBindValue(contentsData);
if (!m_query->execBatch())
@@ -2151,7 +2059,7 @@ bool QHelpCollectionHandler::registerIndexTable(const QHelpDBReader::IndexTable
for (auto it = filterAttributeToNewContentsId.cbegin(),
end = filterAttributeToNewContentsId.cend(); it != end; ++it) {
const QString filterAttribute = it.key();
- m_query->prepare(QLatin1String("SELECT Id From FilterAttributeTable WHERE Name = ?"));
+ m_query->prepare("SELECT Id From FilterAttributeTable WHERE Name = ?"_L1);
m_query->bindValue(0, filterAttribute);
if (!m_query->exec() || !m_query->next())
return false;
@@ -2159,10 +2067,10 @@ bool QHelpCollectionHandler::registerIndexTable(const QHelpDBReader::IndexTable
const int attributeId = m_query->value(0).toInt();
QVariantList attributeIds;
- for (int i = 0; i < it.value().count(); i++)
+ for (int i = 0; i < it.value().size(); i++)
attributeIds.append(attributeId);
- m_query->prepare(QLatin1String("INSERT INTO ContentsFilterTable VALUES(?, ?)"));
+ m_query->prepare("INSERT INTO ContentsFilterTable VALUES(?, ?)"_L1);
m_query->addBindValue(attributeIds);
m_query->addBindValue(it.value());
if (!m_query->execBatch())
@@ -2174,7 +2082,7 @@ bool QHelpCollectionHandler::registerIndexTable(const QHelpDBReader::IndexTable
for (const QString &filterAttribute : indexTable.usedFilterAttributes) {
filterNsIds.append(nsId);
- m_query->prepare(QLatin1String("SELECT Id From FilterAttributeTable WHERE Name = ?"));
+ m_query->prepare("SELECT Id From FilterAttributeTable WHERE Name = ?"_L1);
m_query->bindValue(0, filterAttribute);
if (!m_query->exec() || !m_query->next())
return false;
@@ -2182,22 +2090,30 @@ bool QHelpCollectionHandler::registerIndexTable(const QHelpDBReader::IndexTable
filterAttributeIds.append(m_query->value(0).toInt());
}
- m_query->prepare(QLatin1String("INSERT INTO OptimizedFilterTable "
- "(NamespaceId, FilterAttributeId) VALUES(?, ?)"));
+ m_query->prepare("INSERT INTO OptimizedFilterTable "
+ "(NamespaceId, FilterAttributeId) VALUES(?, ?)"_L1);
m_query->addBindValue(filterNsIds);
m_query->addBindValue(filterAttributeIds);
if (!m_query->execBatch())
return false;
- m_query->prepare(QLatin1String("INSERT INTO TimeStampTable "
- "(NamespaceId, FolderId, FilePath, Size, TimeStamp) "
- "VALUES(?, ?, ?, ?, ?)"));
+ m_query->prepare("INSERT INTO TimeStampTable "
+ "(NamespaceId, FolderId, FilePath, Size, TimeStamp) "
+ "VALUES(?, ?, ?, ?, ?)"_L1);
m_query->addBindValue(nsId);
m_query->addBindValue(vfId);
m_query->addBindValue(fileName);
const QFileInfo fi(absoluteDocPath(fileName));
m_query->addBindValue(fi.size());
- m_query->addBindValue(fi.lastModified().toString(Qt::ISODate));
+ QDateTime lastModified = fi.lastModified(QTimeZone::UTC);
+ if (qEnvironmentVariableIsSet("SOURCE_DATE_EPOCH")) {
+ const QString sourceDateEpochStr = qEnvironmentVariable("SOURCE_DATE_EPOCH");
+ bool ok;
+ const qlonglong sourceDateEpoch = sourceDateEpochStr.toLongLong(&ok);
+ if (ok && sourceDateEpoch < lastModified.toSecsSinceEpoch())
+ lastModified.setSecsSinceEpoch(sourceDateEpoch);
+ }
+ m_query->addBindValue(lastModified);
if (!m_query->exec())
return false;
@@ -2207,60 +2123,60 @@ bool QHelpCollectionHandler::registerIndexTable(const QHelpDBReader::IndexTable
bool QHelpCollectionHandler::unregisterIndexTable(int nsId, int vfId)
{
- m_query->prepare(QLatin1String("DELETE FROM IndexFilterTable WHERE IndexId IN "
- "(SELECT Id FROM IndexTable WHERE NamespaceId = ?)"));
+ m_query->prepare("DELETE FROM IndexFilterTable WHERE IndexId IN "
+ "(SELECT Id FROM IndexTable WHERE NamespaceId = ?)"_L1);
m_query->bindValue(0, nsId);
if (!m_query->exec())
return false;
- m_query->prepare(QLatin1String("DELETE FROM IndexTable WHERE NamespaceId = ?"));
+ m_query->prepare("DELETE FROM IndexTable WHERE NamespaceId = ?"_L1);
m_query->bindValue(0, nsId);
if (!m_query->exec())
return false;
- m_query->prepare(QLatin1String("DELETE FROM FileFilterTable WHERE FileId IN "
- "(SELECT FileId FROM FileNameTable WHERE FolderId = ?)"));
+ m_query->prepare("DELETE FROM FileFilterTable WHERE FileId IN "
+ "(SELECT FileId FROM FileNameTable WHERE FolderId = ?)"_L1);
m_query->bindValue(0, vfId);
if (!m_query->exec())
return false;
- m_query->prepare(QLatin1String("DELETE FROM FileNameTable WHERE FolderId = ?"));
+ m_query->prepare("DELETE FROM FileNameTable WHERE FolderId = ?"_L1);
m_query->bindValue(0, vfId);
if (!m_query->exec())
return false;
- m_query->prepare(QLatin1String("DELETE FROM ContentsFilterTable WHERE ContentsId IN "
- "(SELECT Id FROM ContentsTable WHERE NamespaceId = ?)"));
+ m_query->prepare("DELETE FROM ContentsFilterTable WHERE ContentsId IN "
+ "(SELECT Id FROM ContentsTable WHERE NamespaceId = ?)"_L1);
m_query->bindValue(0, nsId);
if (!m_query->exec())
return false;
- m_query->prepare(QLatin1String("DELETE FROM ContentsTable WHERE NamespaceId = ?"));
+ m_query->prepare("DELETE FROM ContentsTable WHERE NamespaceId = ?"_L1);
m_query->bindValue(0, nsId);
if (!m_query->exec())
return false;
- m_query->prepare(QLatin1String("DELETE FROM FileAttributeSetTable WHERE NamespaceId = ?"));
+ m_query->prepare("DELETE FROM FileAttributeSetTable WHERE NamespaceId = ?"_L1);
m_query->bindValue(0, nsId);
if (!m_query->exec())
return false;
- m_query->prepare(QLatin1String("DELETE FROM OptimizedFilterTable WHERE NamespaceId = ?"));
+ m_query->prepare("DELETE FROM OptimizedFilterTable WHERE NamespaceId = ?"_L1);
m_query->bindValue(0, nsId);
if (!m_query->exec())
return false;
- m_query->prepare(QLatin1String("DELETE FROM TimeStampTable WHERE NamespaceId = ?"));
+ m_query->prepare("DELETE FROM TimeStampTable WHERE NamespaceId = ?"_L1);
m_query->bindValue(0, nsId);
if (!m_query->exec())
return false;
- m_query->prepare(QLatin1String("DELETE FROM VersionTable WHERE NamespaceId = ?"));
+ m_query->prepare("DELETE FROM VersionTable WHERE NamespaceId = ?"_L1);
m_query->bindValue(0, nsId);
if (!m_query->exec())
return false;
- m_query->prepare(QLatin1String("SELECT ComponentId FROM ComponentMapping WHERE NamespaceId = ?"));
+ m_query->prepare("SELECT ComponentId FROM ComponentMapping WHERE NamespaceId = ?"_L1);
m_query->bindValue(0, nsId);
if (!m_query->exec())
return false;
@@ -2270,18 +2186,18 @@ bool QHelpCollectionHandler::unregisterIndexTable(int nsId, int vfId)
const int componentId = m_query->value(0).toInt();
- m_query->prepare(QLatin1String("DELETE FROM ComponentMapping WHERE NamespaceId = ?"));
+ m_query->prepare("DELETE FROM ComponentMapping WHERE NamespaceId = ?"_L1);
m_query->bindValue(0, nsId);
if (!m_query->exec())
return false;
- m_query->prepare(QLatin1String("SELECT ComponentId FROM ComponentMapping WHERE ComponentId = ?"));
+ m_query->prepare("SELECT ComponentId FROM ComponentMapping WHERE ComponentId = ?"_L1);
m_query->bindValue(0, componentId);
if (!m_query->exec())
return false;
if (!m_query->next()) { // no more namespaces refer to the componentId
- m_query->prepare(QLatin1String("DELETE FROM ComponentTable WHERE ComponentId = ?"));
+ m_query->prepare("DELETE FROM ComponentTable WHERE ComponentId = ?"_L1);
m_query->bindValue(0, componentId);
if (!m_query->exec())
return false;
@@ -2290,102 +2206,67 @@ bool QHelpCollectionHandler::unregisterIndexTable(int nsId, int vfId)
return true;
}
-static QUrl buildQUrl(const QString &ns, const QString &folder,
- const QString &relFileName, const QString &anchor)
+QUrl QHelpCollectionHandler::buildQUrl(const QString &ns, const QString &folder,
+ const QString &relFileName, const QString &anchor)
{
QUrl url;
- url.setScheme(QLatin1String("qthelp"));
+ url.setScheme("qthelp"_L1);
url.setAuthority(ns);
- url.setPath(QLatin1Char('/') + folder + QLatin1Char('/') + relFileName);
+ url.setPath(u'/' + folder + u'/' + relFileName);
url.setFragment(anchor);
return url;
}
-QMultiMap<QString, QUrl> QHelpCollectionHandler::linksForIdentifier(
- const QString &id,
- const QStringList &filterAttributes) const
-{
- return linksForField(QLatin1String("Identifier"), id, filterAttributes);
-}
-
-QMultiMap<QString, QUrl> QHelpCollectionHandler::linksForKeyword(
- const QString &keyword,
- const QStringList &filterAttributes) const
-{
- return linksForField(QLatin1String("Name"), keyword, filterAttributes);
-}
-
QList<QHelpLink> QHelpCollectionHandler::documentsForIdentifier(
- const QString &id,
- const QStringList &filterAttributes) const
+ const QString &id, const QStringList &filterAttributes) const
{
- return documentsForField(QLatin1String("Identifier"), id, filterAttributes);
+ return documentsForField("Identifier"_L1, id, filterAttributes);
}
QList<QHelpLink> QHelpCollectionHandler::documentsForKeyword(
- const QString &keyword,
- const QStringList &filterAttributes) const
-{
- return documentsForField(QLatin1String("Name"), keyword, filterAttributes);
-}
-
-QMultiMap<QString, QUrl> QHelpCollectionHandler::linksForField(
- const QString &fieldName,
- const QString &fieldValue,
- const QStringList &filterAttributes) const
+ const QString &keyword, const QStringList &filterAttributes) const
{
- QMultiMap<QString, QUrl> linkMap;
- const auto documents = documentsForField(fieldName, fieldValue, filterAttributes);
- for (const auto &document : documents)
- linkMap.insert(document.title, document.url);
-
- return linkMap;
+ return documentsForField("Name"_L1, keyword, filterAttributes);
}
-QList<QHelpLink> QHelpCollectionHandler::documentsForField(
- const QString &fieldName,
- const QString &fieldValue,
- const QStringList &filterAttributes) const
+QList<QHelpLink> QHelpCollectionHandler::documentsForField(const QString &fieldName,
+ const QString &fieldValue, const QStringList &filterAttributes) const
{
- QList<QHelpLink> docList;
-
if (!isDBOpened())
- return docList;
-
- const QString filterlessQuery = QString::fromLatin1(
- "SELECT "
- "FileNameTable.Title, "
- "NamespaceTable.Name, "
- "FolderTable.Name, "
- "FileNameTable.Name, "
- "IndexTable.Anchor "
- "FROM "
- "IndexTable, "
- "FileNameTable, "
- "FolderTable, "
- "NamespaceTable "
- "WHERE IndexTable.FileId = FileNameTable.FileId "
- "AND FileNameTable.FolderId = FolderTable.Id "
- "AND IndexTable.NamespaceId = NamespaceTable.Id "
- "AND IndexTable.%1 = ?").arg(fieldName);
+ return {};
+
+ const QString filterlessQuery =
+ "SELECT "
+ "FileNameTable.Title, "
+ "NamespaceTable.Name, "
+ "FolderTable.Name, "
+ "FileNameTable.Name, "
+ "IndexTable.Anchor "
+ "FROM "
+ "IndexTable, "
+ "FileNameTable, "
+ "FolderTable, "
+ "NamespaceTable "
+ "WHERE IndexTable.FileId = FileNameTable.FileId "
+ "AND FileNameTable.FolderId = FolderTable.Id "
+ "AND IndexTable.NamespaceId = NamespaceTable.Id "
+ "AND IndexTable.%1 = ?"_L1.arg(fieldName);
const QString filterQuery = filterlessQuery
- + prepareFilterQuery(filterAttributes.count(),
- QLatin1String("IndexTable"),
- QLatin1String("Id"),
- QLatin1String("IndexFilterTable"),
- QLatin1String("IndexId"));
+ + prepareFilterQuery(filterAttributes.size(), "IndexTable"_L1, "Id"_L1,
+ "IndexFilterTable"_L1, "IndexId"_L1);
m_query->prepare(filterQuery);
m_query->bindValue(0, fieldValue);
- bindFilterQuery(m_query, 1, filterAttributes);
+ bindFilterQuery(m_query.get(), 1, filterAttributes);
m_query->exec();
+ QList<QHelpLink> docList;
while (m_query->next()) {
QString title = m_query->value(0).toString();
if (title.isEmpty()) // generate a title + corresponding path
- title = fieldValue + QLatin1String(" : ") + m_query->value(3).toString();
+ title = fieldValue + " : "_L1 + m_query->value(3).toString();
const QUrl url = buildQUrl(m_query->value(1).toString(),
m_query->value(2).toString(),
@@ -2396,88 +2277,66 @@ QList<QHelpLink> QHelpCollectionHandler::documentsForField(
return docList;
}
-QMultiMap<QString, QUrl> QHelpCollectionHandler::linksForIdentifier(
- const QString &id,
- const QString &filterName) const
-{
- return linksForField(QLatin1String("Identifier"), id, filterName);
-}
-
-QMultiMap<QString, QUrl> QHelpCollectionHandler::linksForKeyword(
- const QString &keyword,
- const QString &filterName) const
-{
- return linksForField(QLatin1String("Name"), keyword, filterName);
-}
-
QList<QHelpLink> QHelpCollectionHandler::documentsForIdentifier(
- const QString &id,
- const QString &filterName) const
+ const QString &id, const QString &filterName) const
{
- return documentsForField(QLatin1String("Identifier"), id, filterName);
+ return documentsForField("Identifier"_L1, id, filterName);
}
QList<QHelpLink> QHelpCollectionHandler::documentsForKeyword(
- const QString &keyword,
- const QString &filterName) const
+ const QString &keyword, const QString &filterName) const
{
- return documentsForField(QLatin1String("Name"), keyword, filterName);
+ return documentsForField("Name"_L1, keyword, filterName);
}
-QMultiMap<QString, QUrl> QHelpCollectionHandler::linksForField(
- const QString &fieldName,
- const QString &fieldValue,
- const QString &filterName) const
+QMultiMap<QString, QUrl> QHelpCollectionHandler::linksForField(const QString &fieldName,
+ const QString &fieldValue, const QString &filterName) const
{
QMultiMap<QString, QUrl> linkMap;
const auto documents = documentsForField(fieldName, fieldValue, filterName);
for (const auto &document : documents)
linkMap.insert(document.title, document.url);
-
return linkMap;
}
-QList<QHelpLink> QHelpCollectionHandler::documentsForField(
- const QString &fieldName,
- const QString &fieldValue,
- const QString &filterName) const
+QList<QHelpLink> QHelpCollectionHandler::documentsForField(const QString &fieldName,
+ const QString &fieldValue, const QString &filterName) const
{
- QList<QHelpLink> docList;
-
if (!isDBOpened())
- return docList;
-
- const QString filterlessQuery = QString::fromLatin1(
- "SELECT "
- "FileNameTable.Title, "
- "NamespaceTable.Name, "
- "FolderTable.Name, "
- "FileNameTable.Name, "
- "IndexTable.Anchor "
- "FROM "
- "IndexTable, "
- "FileNameTable, "
- "FolderTable, "
- "NamespaceTable "
- "WHERE IndexTable.FileId = FileNameTable.FileId "
- "AND FileNameTable.FolderId = FolderTable.Id "
- "AND IndexTable.NamespaceId = NamespaceTable.Id "
- "AND IndexTable.%1 = ?").arg(fieldName);
+ return {};
+
+ const QString filterlessQuery =
+ "SELECT "
+ "FileNameTable.Title, "
+ "NamespaceTable.Name, "
+ "FolderTable.Name, "
+ "FileNameTable.Name, "
+ "IndexTable.Anchor "
+ "FROM "
+ "IndexTable, "
+ "FileNameTable, "
+ "FolderTable, "
+ "NamespaceTable "
+ "WHERE IndexTable.FileId = FileNameTable.FileId "
+ "AND FileNameTable.FolderId = FolderTable.Id "
+ "AND IndexTable.NamespaceId = NamespaceTable.Id "
+ "AND IndexTable.%1 = ?"_L1.arg(fieldName);
const QString filterQuery = filterlessQuery
+ prepareFilterQuery(filterName)
- + QLatin1String(" ORDER BY LOWER(FileNameTable.Title), FileNameTable.Title");
+ + " ORDER BY LOWER(FileNameTable.Title), FileNameTable.Title"_L1;
m_query->prepare(filterQuery);
m_query->bindValue(0, fieldValue);
- bindFilterQuery(m_query, 1, filterName);
+ bindFilterQuery(m_query.get(), 1, filterName);
m_query->exec();
+ QList<QHelpLink> docList;
while (m_query->next()) {
QString title = m_query->value(0).toString();
if (title.isEmpty()) // generate a title + corresponding path
- title = fieldValue + QLatin1String(" : ") + m_query->value(3).toString();
+ title = fieldValue + " : "_L1 + m_query->value(3).toString();
const QUrl url = buildQUrl(m_query->value(1).toString(),
m_query->value(2).toString(),
@@ -2495,30 +2354,24 @@ QStringList QHelpCollectionHandler::namespacesForFilter(const QString &filterNam
if (!isDBOpened())
return namespaceList;
- const QString filterlessQuery = QString::fromLatin1(
- "SELECT "
- "NamespaceTable.Name "
- "FROM "
- "NamespaceTable "
- "WHERE TRUE");
+ const QString filterlessQuery =
+ "SELECT "
+ "NamespaceTable.Name "
+ "FROM "
+ "NamespaceTable "
+ "WHERE TRUE"_L1;
const QString filterQuery = filterlessQuery
+ prepareFilterQuery(filterName);
m_query->prepare(filterQuery);
- bindFilterQuery(m_query, 0, filterName);
+ bindFilterQuery(m_query.get(), 0, filterName);
m_query->exec();
while (m_query->next())
namespaceList.append(m_query->value(0).toString());
-
return namespaceList;
}
-void QHelpCollectionHandler::setReadOnly(bool readOnly)
-{
- m_readOnly = readOnly;
-}
-
QT_END_NAMESPACE
diff --git a/src/assistant/help/qhelpcollectionhandler_p.h b/src/assistant/help/qhelpcollectionhandler_p.h
index fb26aabb5..28f13e541 100644
--- a/src/assistant/help/qhelpcollectionhandler_p.h
+++ b/src/assistant/help/qhelpcollectionhandler_p.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QHELPCOLLECTIONHANDLER_H
#define QHELPCOLLECTIONHANDLER_H
@@ -51,21 +15,19 @@
// We mean it.
//
-#include <QtCore/QList>
-#include <QtCore/QString>
-#include <QtCore/QObject>
-#include <QtCore/QVariant>
-#include <QtCore/QStringList>
-
-#include <QtSql/QSqlQuery>
-
#include "qhelpdbreader_p.h"
#include "qhelplink.h"
+#include <QtCore/qdatetime.h>
+#include <QtCore/qobject.h>
+#include <QtCore/qstringlist.h>
+
QT_BEGIN_NAMESPACE
-class QVersionNumber;
class QHelpFilterData;
+class QSqlQuery;
+class QVariant;
+class QVersionNumber;
class QHelpCollectionHandler : public QObject
{
@@ -86,7 +48,7 @@ public:
int folderId = -1;
QString fileName;
int size = 0;
- QString timeStamp;
+ QDateTime timeStamp;
};
struct ContentsData
@@ -96,11 +58,10 @@ public:
QList<QByteArray> contentsList;
};
- explicit QHelpCollectionHandler(const QString &collectionFile,
- QObject *parent = nullptr);
+ explicit QHelpCollectionHandler(const QString &collectionFile, QObject *parent = nullptr);
~QHelpCollectionHandler();
- QString collectionFile() const;
+ QString collectionFile() const { return m_collectionFile; }
bool openCollectionFile();
bool copyCollectionFile(const QString &fileName);
@@ -115,8 +76,7 @@ public:
bool removeCustomFilter(const QString &filterName);
// use QHelpFilterEngine::setFilterData() instead
- bool addCustomFilter(const QString &filterName,
- const QStringList &attributes);
+ bool addCustomFilter(const QString &filterName, const QStringList &attributes);
// use files(const QString &, const QString &, const QString &) instead
QStringList files(const QString &namespaceName,
@@ -124,12 +84,10 @@ public:
const QString &extensionFilter) const;
// use namespaceForFile(const QUrl &, const QString &) instead
- QString namespaceForFile(const QUrl &url,
- const QStringList &filterAttributes) const;
+ QString namespaceForFile(const QUrl &url, const QStringList &filterAttributes) const;
// use findFile(const QUrl &, const QString &) instead
- QUrl findFile(const QUrl &url,
- const QStringList &filterAttributes) const;
+ QUrl findFile(const QUrl &url, const QStringList &filterAttributes) const;
// use indicesForFilter(const QString &) instead
QStringList indicesForFilter(const QStringList &filterAttributes) const;
@@ -146,20 +104,6 @@ public:
// use filterData(const QString &) instead
QList<QStringList> filterAttributeSets(const QString &namespaceName) const;
- // use linksForIdentifier(const QString &, const QString &) instead
- QMultiMap<QString, QUrl> linksForIdentifier(const QString &id,
- const QStringList &filterAttributes) const;
-
- // use linksForKeyword(const QString &, const QString &) instead
- QMultiMap<QString, QUrl> linksForKeyword(const QString &keyword,
- const QStringList &filterAttributes) const;
-
- // use documentsForIdentifier instead
- QMultiMap<QString, QUrl> linksForIdentifier(const QString &id, const QString &filterName) const;
-
- // use documentsForKeyword instead
- QMultiMap<QString, QUrl> linksForKeyword(const QString &keyword,
- const QString &filterName) const;
// *** Legacy block end ***
QStringList filters() const;
@@ -172,24 +116,19 @@ public:
bool setFilterData(const QString &filterName, const QHelpFilterData &filterData);
bool removeFilter(const QString &filterName);
-
FileInfo registeredDocumentation(const QString &namespaceName) const;
FileInfoList registeredDocumentations() const;
bool registerDocumentation(const QString &fileName);
bool unregisterDocumentation(const QString &namespaceName);
-
bool fileExists(const QUrl &url) const;
QStringList files(const QString &namespaceName,
const QString &filterName,
const QString &extensionFilter) const;
- QString namespaceForFile(const QUrl &url,
- const QString &filterName) const;
- QUrl findFile(const QUrl &url,
- const QString &filterName) const;
+ QString namespaceForFile(const QUrl &url, const QString &filterName) const;
+ QUrl findFile(const QUrl &url, const QString &filterName) const;
QByteArray fileData(const QUrl &url) const;
-
QStringList indicesForFilter(const QString &filterName) const;
QList<ContentsData> contentsForFilter(const QString &filterName) const;
@@ -197,16 +136,13 @@ public:
QVariant customValue(const QString &key, const QVariant &defaultValue) const;
bool setCustomValue(const QString &key, const QVariant &value);
-
int registerNamespace(const QString &nspace, const QString &fileName);
int registerVirtualFolder(const QString &folderName, int namespaceId);
int registerComponent(const QString &componentName, int namespaceId);
bool registerVersion(const QString &version, int namespaceId);
- QList<QHelpLink> documentsForIdentifier(const QString &id,
- const QString &filterName) const;
- QList<QHelpLink> documentsForKeyword(const QString &keyword,
- const QString &filterName) const;
+ QList<QHelpLink> documentsForIdentifier(const QString &id, const QString &filterName) const;
+ QList<QHelpLink> documentsForKeyword(const QString &keyword, const QString &filterName) const;
QList<QHelpLink> documentsForIdentifier(const QString &id,
const QStringList &filterAttributes) const;
QList<QHelpLink> documentsForKeyword(const QString &keyword,
@@ -214,16 +150,16 @@ public:
QStringList namespacesForFilter(const QString &filterName) const;
- void setReadOnly(bool readOnly);
+ void setReadOnly(bool readOnly) { m_readOnly = readOnly; }
+
+ static QUrl buildQUrl(const QString &ns, const QString &folder,
+ const QString &relFileName, const QString &anchor);
signals:
- void error(const QString &msg) const;
+ void error(const QString &msg);
private:
// legacy stuff
- QMultiMap<QString, QUrl> linksForField(const QString &fieldName,
- const QString &fieldValue,
- const QStringList &filterAttributes) const;
QList<QHelpLink> documentsForField(const QString &fieldName,
const QString &fieldValue,
const QStringList &filterAttributes) const;
@@ -255,11 +191,11 @@ private:
QString m_collectionFile;
QString m_connectionName;
- QSqlQuery *m_query = nullptr;
+ std::unique_ptr<QSqlQuery> m_query;
bool m_vacuumScheduled = false;
bool m_readOnly = true;
};
QT_END_NAMESPACE
-#endif //QHELPCOLLECTIONHANDLER_H
+#endif // QHELPCOLLECTIONHANDLER_H
diff --git a/src/assistant/help/qhelpcontentitem.cpp b/src/assistant/help/qhelpcontentitem.cpp
new file mode 100644
index 000000000..3c437efe0
--- /dev/null
+++ b/src/assistant/help/qhelpcontentitem.cpp
@@ -0,0 +1,102 @@
+// 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 "qhelpcontentitem.h"
+
+#include <QtCore/qstring.h>
+#include <QtCore/qurl.h>
+
+QT_BEGIN_NAMESPACE
+
+class QHelpContentItemPrivate
+{
+public:
+ QString title;
+ QUrl link;
+ QHelpContentItem *parent;
+ QList<QHelpContentItem *> childItems = {};
+};
+
+/*!
+ \class QHelpContentItem
+ \inmodule QtHelp
+ \brief The QHelpContentItem class provides an item for use with QHelpContentModel.
+ \since 4.4
+*/
+
+QHelpContentItem::QHelpContentItem(const QString &name, const QUrl &link, QHelpContentItem *parent)
+ : d(new QHelpContentItemPrivate{name, link, parent})
+{
+ if (parent)
+ parent->d->childItems.append(this);
+}
+
+/*!
+ Destroys the help content item.
+*/
+QHelpContentItem::~QHelpContentItem()
+{
+ qDeleteAll(d->childItems);
+ delete d;
+}
+
+/*!
+ Returns the child of the content item in the give \a row.
+
+ \sa parent()
+*/
+QHelpContentItem *QHelpContentItem::child(int row) const
+{
+ return d->childItems.value(row);
+}
+
+/*!
+ Returns the number of child items.
+*/
+int QHelpContentItem::childCount() const
+{
+ return d->childItems.size();
+}
+
+/*!
+ Returns the row of this item from its parents view.
+*/
+int QHelpContentItem::row() const
+{
+ // TODO: Optimize by keeping the index internally.
+ return d->parent ? d->parent->d->childItems.indexOf(const_cast<QHelpContentItem*>(this)) : 0;
+}
+
+/*!
+ Returns the title of the content item.
+*/
+QString QHelpContentItem::title() const
+{
+ return d->title;
+}
+
+/*!
+ Returns the URL of this content item.
+*/
+QUrl QHelpContentItem::url() const
+{
+ return d->link;
+}
+
+/*!
+ Returns the parent content item.
+*/
+QHelpContentItem *QHelpContentItem::parent() const
+{
+ return d->parent;
+}
+
+/*!
+ Returns the position of a given \a child.
+*/
+int QHelpContentItem::childPosition(QHelpContentItem *child) const
+{
+ return d->childItems.indexOf(child);
+}
+
+QT_END_NAMESPACE
diff --git a/src/assistant/help/qhelpcontentitem.h b/src/assistant/help/qhelpcontentitem.h
new file mode 100644
index 000000000..176ae05ed
--- /dev/null
+++ b/src/assistant/help/qhelpcontentitem.h
@@ -0,0 +1,37 @@
+// 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 QHELPCONTENTITEM_H
+#define QHELPCONTENTITEM_H
+
+#include <QtHelp/qhelp_global.h>
+
+QT_BEGIN_NAMESPACE
+
+class QHelpContentItemPrivate;
+class QString;
+class QUrl;
+
+class QHELP_EXPORT QHelpContentItem
+{
+public:
+ ~QHelpContentItem();
+
+ QHelpContentItem *child(int row) const;
+ int childCount() const;
+ QString title() const;
+ QUrl url() const;
+ int row() const;
+ QHelpContentItem *parent() const;
+ int childPosition(QHelpContentItem *child) const;
+
+private:
+ QHelpContentItem(const QString &name, const QUrl &link, QHelpContentItem *parent = nullptr);
+
+ QHelpContentItemPrivate *d;
+ friend QHelpContentItem *createContentItem(const QString &, const QUrl &, QHelpContentItem *);
+};
+
+QT_END_NAMESPACE
+
+#endif // QHELPCONTENTITEM_H
diff --git a/src/assistant/help/qhelpcontentwidget.cpp b/src/assistant/help/qhelpcontentwidget.cpp
index f0702602e..d08b8c7c1 100644
--- a/src/assistant/help/qhelpcontentwidget.cpp
+++ b/src/assistant/help/qhelpcontentwidget.cpp
@@ -1,348 +1,79 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qhelpcontentwidget.h"
#include "qhelpenginecore.h"
-#include "qhelpengine_p.h"
-#include "qhelpcollectionhandler_p.h"
-#include <QDir>
-#include <QtCore/QStack>
-#include <QtCore/QThread>
-#include <QtCore/QMutex>
-#include <QtWidgets/QHeaderView>
+#if QT_CONFIG(future)
+#include <QtCore/qfuturewatcher.h>
+#endif
-QT_BEGIN_NAMESPACE
+#include <QtCore/qdir.h>
+#include <QtWidgets/qheaderview.h>
-class QHelpContentItemPrivate
-{
-public:
- QHelpContentItemPrivate(const QString &t, const QUrl &l, QHelpContentItem *p)
- : parent(p),
- title(t),
- link(l)
- {
- }
-
- void appendChild(QHelpContentItem *item) { childItems.append(item); }
+QT_BEGIN_NAMESPACE
- QList<QHelpContentItem*> childItems;
- QHelpContentItem *parent;
- QString title;
- QUrl link;
-};
-
-class QHelpContentProvider : public QThread
-{
- Q_OBJECT
-public:
- QHelpContentProvider(QHelpEnginePrivate *helpEngine);
- ~QHelpContentProvider() override;
- void collectContents(const QString &customFilterName);
- void stopCollecting();
- QHelpContentItem *takeContentItem();
-
-private:
- void run() override;
-
- QHelpEnginePrivate *m_helpEngine;
- QString m_currentFilter;
- QStringList m_filterAttributes;
- QString m_collectionFile;
- QHelpContentItem *m_rootItem = nullptr;
- QMutex m_mutex;
- bool m_usesFilterEngine = false;
- bool m_abort = false;
-};
+using namespace Qt::StringLiterals;
class QHelpContentModelPrivate
{
-public:
- QHelpContentItem *rootItem = nullptr;
- QHelpContentProvider *qhelpContentProvider;
-};
-
+#if QT_CONFIG(future)
+ using ItemFutureProvider = std::function<QFuture<std::shared_ptr<QHelpContentItem>>()>;
+ struct WatcherDeleter
+ {
+ void operator()(QFutureWatcherBase *watcher) {
+ watcher->disconnect();
+ watcher->cancel();
+ watcher->waitForFinished();
+ delete watcher;
+ }
+ };
+#endif
-/*!
- \class QHelpContentItem
- \inmodule QtHelp
- \brief The QHelpContentItem class provides an item for use with QHelpContentModel.
- \since 4.4
-*/
-
-QHelpContentItem::QHelpContentItem(const QString &name, const QUrl &link, QHelpContentItem *parent)
-{
- d = new QHelpContentItemPrivate(name, link, parent);
-}
-
-/*!
- Destroys the help content item.
-*/
-QHelpContentItem::~QHelpContentItem()
-{
- qDeleteAll(d->childItems);
- delete d;
-}
-
-/*!
- Returns the child of the content item in the give \a row.
-
- \sa parent()
-*/
-QHelpContentItem *QHelpContentItem::child(int row) const
-{
- return d->childItems.value(row);
-}
-
-/*!
- Returns the number of child items.
-*/
-int QHelpContentItem::childCount() const
-{
- return d->childItems.count();
-}
-
-/*!
- Returns the row of this item from its parents view.
-*/
-int QHelpContentItem::row() const
-{
- if (d->parent)
- return d->parent->d->childItems.indexOf(const_cast<QHelpContentItem*>(this));
- return 0;
-}
-
-/*!
- Returns the title of the content item.
-*/
-QString QHelpContentItem::title() const
-{
- return d->title;
-}
-
-/*!
- Returns the URL of this content item.
-*/
-QUrl QHelpContentItem::url() const
-{
- return d->link;
-}
-
-/*!
- Returns the parent content item.
-*/
-QHelpContentItem *QHelpContentItem::parent() const
-{
- return d->parent;
-}
-
-/*!
- Returns the position of a given \a child.
-*/
-int QHelpContentItem::childPosition(QHelpContentItem *child) const
-{
- return d->childItems.indexOf(child);
-}
-
-
-
-QHelpContentProvider::QHelpContentProvider(QHelpEnginePrivate *helpEngine)
- : QThread(helpEngine)
-{
- m_helpEngine = helpEngine;
-}
-
-QHelpContentProvider::~QHelpContentProvider()
-{
- stopCollecting();
-}
-
-void QHelpContentProvider::collectContents(const QString &customFilterName)
-{
- m_mutex.lock();
- m_currentFilter = customFilterName;
- m_filterAttributes = m_helpEngine->q->filterAttributes(customFilterName);
- m_collectionFile = m_helpEngine->collectionHandler->collectionFile();
- m_usesFilterEngine = m_helpEngine->usesFilterEngine;
- m_mutex.unlock();
-
- if (isRunning())
- stopCollecting();
- start(LowPriority);
-}
-
-void QHelpContentProvider::stopCollecting()
-{
- if (isRunning()) {
- m_mutex.lock();
- m_abort = true;
- m_mutex.unlock();
- wait();
- // we need to force-set m_abort to false, because the thread might either have
- // finished between the isRunning() check and the "m_abort = true" above, or the
- // isRunning() check might already happen after the "m_abort = false" in the run() method,
- // either way never resetting m_abort to false from within the run() method
- m_abort = false;
- }
- delete m_rootItem;
- m_rootItem = nullptr;
-}
-
-QHelpContentItem *QHelpContentProvider::takeContentItem()
-{
- QMutexLocker locker(&m_mutex);
- QHelpContentItem *content = m_rootItem;
- m_rootItem = nullptr;
- return content;
-}
-
-// TODO: this is a copy from helpcollectionhandler, make it common
-static QUrl buildQUrl(const QString &ns, const QString &folder,
- const QString &relFileName, const QString &anchor)
-{
- QUrl url;
- url.setScheme(QLatin1String("qthelp"));
- url.setAuthority(ns);
- url.setPath(QLatin1Char('/') + folder + QLatin1Char('/') + relFileName);
- url.setFragment(anchor);
- return url;
-}
-
-static QUrl constructUrl(const QString &namespaceName,
- const QString &folderName,
- const QString &relativePath)
-{
- const int idx = relativePath.indexOf(QLatin1Char('#'));
- const QString &rp = idx < 0 ? relativePath : relativePath.left(idx);
- const QString anchor = idx < 0 ? QString() : relativePath.mid(idx + 1);
- return buildQUrl(namespaceName, folderName, rp, anchor);
-}
+public:
+#if QT_CONFIG(future)
+ void createContents(const ItemFutureProvider &futureProvider);
+#endif
+
+ QHelpContentModel *q = nullptr;
+ QHelpEngineCore *helpEngine = nullptr;
+ std::shared_ptr<QHelpContentItem> rootItem = {};
+#if QT_CONFIG(future)
+ std::unique_ptr<QFutureWatcher<std::shared_ptr<QHelpContentItem>>, WatcherDeleter> watcher = {};
+#endif
+};
-void QHelpContentProvider::run()
-{
- QString title;
- QString link;
- int depth = 0;
- QHelpContentItem *item = nullptr;
-
- m_mutex.lock();
- QHelpContentItem * const rootItem = new QHelpContentItem(QString(), QString(), nullptr);
- const QString currentFilter = m_currentFilter;
- const QStringList attributes = m_filterAttributes;
- const QString collectionFile = m_collectionFile;
- const bool usesFilterEngine = m_usesFilterEngine;
- delete m_rootItem;
- m_rootItem = nullptr;
- m_mutex.unlock();
-
- if (collectionFile.isEmpty())
- return;
+#if QT_CONFIG(future)
+void QHelpContentModelPrivate::createContents(const ItemFutureProvider &futureProvider)
+{
+ const bool wasRunning = bool(watcher);
+ watcher.reset(new QFutureWatcher<std::shared_ptr<QHelpContentItem>>);
+ QObject::connect(watcher.get(), &QFutureWatcherBase::finished, q, [this] {
+ if (!watcher->isCanceled()) {
+ const std::shared_ptr<QHelpContentItem> result = watcher->result();
+ if (result && result.get()) {
+ q->beginResetModel();
+ rootItem = result;
+ q->endResetModel();
+ }
+ }
+ watcher.release()->deleteLater();
+ emit q->contentsCreated();
+ });
+ watcher->setFuture(futureProvider());
- QHelpCollectionHandler collectionHandler(collectionFile);
- if (!collectionHandler.openCollectionFile())
+ if (wasRunning)
return;
- const QList<QHelpCollectionHandler::ContentsData> result = usesFilterEngine
- ? collectionHandler.contentsForFilter(currentFilter)
- : collectionHandler.contentsForFilter(attributes);
-
- for (const auto &contentsData : result) {
- m_mutex.lock();
- if (m_abort) {
- delete rootItem;
- m_abort = false;
- m_mutex.unlock();
- return;
- }
- m_mutex.unlock();
-
- const QString namespaceName = contentsData.namespaceName;
- const QString folderName = contentsData.folderName;
- for (const QByteArray &contents : contentsData.contentsList) {
- if (contents.size() < 1)
- continue;
-
- int _depth = 0;
- bool _root = false;
- QStack<QHelpContentItem*> stack;
-
- QDataStream s(contents);
- for (;;) {
- s >> depth;
- s >> link;
- s >> title;
- if (title.isEmpty())
- break;
- const QUrl url = constructUrl(namespaceName, folderName, link);
-CHECK_DEPTH:
- if (depth == 0) {
- m_mutex.lock();
- item = new QHelpContentItem(title, url, rootItem);
- rootItem->d->appendChild(item);
- m_mutex.unlock();
- stack.push(item);
- _depth = 1;
- _root = true;
- } else {
- if (depth > _depth && _root) {
- _depth = depth;
- stack.push(item);
- }
- if (depth == _depth) {
- item = new QHelpContentItem(title, url, stack.top());
- stack.top()->d->appendChild(item);
- } else if (depth < _depth) {
- stack.pop();
- --_depth;
- goto CHECK_DEPTH;
- }
- }
- }
- }
+ if (rootItem) {
+ q->beginResetModel();
+ rootItem.reset();
+ q->endResetModel();
}
-
- m_mutex.lock();
- m_rootItem = rootItem;
- m_abort = false;
- m_mutex.unlock();
+ emit q->contentsCreationStarted();
}
+#endif
/*!
\class QHelpContentModel
@@ -367,67 +98,57 @@ CHECK_DEPTH:
This signal is emitted when the contents have been created.
*/
-QHelpContentModel::QHelpContentModel(QHelpEnginePrivate *helpEngine)
+QHelpContentModel::QHelpContentModel(QHelpEngineCore *helpEngine)
: QAbstractItemModel(helpEngine)
-{
- d = new QHelpContentModelPrivate();
- d->qhelpContentProvider = new QHelpContentProvider(helpEngine);
-
- connect(d->qhelpContentProvider, &QThread::finished,
- this, &QHelpContentModel::insertContents);
-}
+ , d(new QHelpContentModelPrivate{this, helpEngine})
+{}
/*!
Destroys the help content model.
*/
QHelpContentModel::~QHelpContentModel()
{
- delete d->rootItem;
delete d;
}
/*!
- Creates new contents by querying the help system
- for contents specified for the \a customFilterName.
+ \since 6.8
+
+ Creates new contents by querying the help system for contents specified for the current filter.
*/
-void QHelpContentModel::createContents(const QString &customFilterName)
+void QHelpContentModel::createContentsForCurrentFilter()
{
- const bool running = d->qhelpContentProvider->isRunning();
- d->qhelpContentProvider->collectContents(customFilterName);
- if (running)
- return;
-
- if (d->rootItem) {
- beginResetModel();
- delete d->rootItem;
- d->rootItem = nullptr;
- endResetModel();
- }
- emit contentsCreationStarted();
+#if QT_CONFIG(future)
+ d->createContents([this] { return d->helpEngine->provideContentForCurrentFilter(); });
+#endif
}
-void QHelpContentModel::insertContents()
+/*!
+ Creates new contents by querying the help system
+ for contents specified for the custom \a filter name.
+*/
+void QHelpContentModel::createContents(const QString &filter)
{
- if (d->qhelpContentProvider->isRunning())
- return;
-
- QHelpContentItem * const newRootItem = d->qhelpContentProvider->takeContentItem();
- if (!newRootItem)
- return;
- beginResetModel();
- delete d->rootItem;
- d->rootItem = newRootItem;
- endResetModel();
- emit contentsCreated();
+#if QT_CONFIG(future)
+ d->createContents([this, filter] { return d->helpEngine->provideContent(filter); });
+#endif
}
+// TODO: Remove me
+void QHelpContentModel::insertContents()
+{}
+
/*!
Returns true if the contents are currently rebuilt, otherwise
false.
*/
bool QHelpContentModel::isCreatingContents() const
{
- return d->qhelpContentProvider->isRunning();
+#if QT_CONFIG(future)
+ return bool(d->watcher);
+#else
+ return false;
+#endif
}
/*!
@@ -436,10 +157,8 @@ bool QHelpContentModel::isCreatingContents() const
*/
QHelpContentItem *QHelpContentModel::contentItemAt(const QModelIndex &index) const
{
- if (index.isValid())
- return static_cast<QHelpContentItem*>(index.internalPointer());
- else
- return d->rootItem;
+ return index.isValid() ? static_cast<QHelpContentItem *>(index.internalPointer())
+ : d->rootItem.get();
}
/*!
@@ -449,12 +168,12 @@ QHelpContentItem *QHelpContentModel::contentItemAt(const QModelIndex &index) con
QModelIndex QHelpContentModel::index(int row, int column, const QModelIndex &parent) const
{
if (!d->rootItem)
- return QModelIndex();
+ return {};
QHelpContentItem *parentItem = contentItemAt(parent);
QHelpContentItem *item = parentItem->child(row);
if (!item)
- return QModelIndex();
+ return {};
return createIndex(row, column, item);
}
@@ -466,17 +185,17 @@ QModelIndex QHelpContentModel::parent(const QModelIndex &index) const
{
QHelpContentItem *item = contentItemAt(index);
if (!item)
- return QModelIndex();
+ return {};
QHelpContentItem *parentItem = static_cast<QHelpContentItem*>(item->parent());
if (!parentItem)
- return QModelIndex();
+ return {};
QHelpContentItem *grandparentItem = static_cast<QHelpContentItem*>(parentItem->parent());
if (!grandparentItem)
- return QModelIndex();
+ return {};
- int row = grandparentItem->childPosition(parentItem);
+ const int row = grandparentItem->childPosition(parentItem);
return createIndex(row, index.column(), parentItem);
}
@@ -486,9 +205,9 @@ QModelIndex QHelpContentModel::parent(const QModelIndex &index) const
int QHelpContentModel::rowCount(const QModelIndex &parent) const
{
QHelpContentItem *parentItem = contentItemAt(parent);
- if (!parentItem)
- return 0;
- return parentItem->childCount();
+ if (parentItem)
+ return parentItem->childCount();
+ return 0;
}
/*!
@@ -497,7 +216,6 @@ int QHelpContentModel::rowCount(const QModelIndex &parent) const
int QHelpContentModel::columnCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
-
return 1;
}
@@ -507,17 +225,14 @@ int QHelpContentModel::columnCount(const QModelIndex &parent) const
*/
QVariant QHelpContentModel::data(const QModelIndex &index, int role) const
{
- if (role != Qt::DisplayRole)
- return QVariant();
-
- QHelpContentItem *item = contentItemAt(index);
- if (!item)
- return QVariant();
- return item->title();
+ if (role == Qt::DisplayRole) {
+ QHelpContentItem *item = contentItemAt(index);
+ if (item)
+ return item->title();
+ }
+ return {};
}
-
-
/*!
\class QHelpContentWidget
\inmodule QtHelp
@@ -533,12 +248,10 @@ QVariant QHelpContentModel::data(const QModelIndex &index, int role) const
*/
QHelpContentWidget::QHelpContentWidget()
- : QTreeView(nullptr)
{
header()->hide();
setUniformRowHeights(true);
- connect(this, &QAbstractItemView::activated,
- this, &QHelpContentWidget::showLink);
+ connect(this, &QAbstractItemView::activated, this, &QHelpContentWidget::showLink);
}
/*!
@@ -548,10 +261,10 @@ QHelpContentWidget::QHelpContentWidget()
QModelIndex QHelpContentWidget::indexOf(const QUrl &link)
{
QHelpContentModel *contentModel = qobject_cast<QHelpContentModel*>(model());
- if (!contentModel || link.scheme() != QLatin1String("qthelp"))
- return QModelIndex();
+ if (!contentModel || link.scheme() != "qthelp"_L1)
+ return {};
- m_syncIndex = QModelIndex();
+ m_syncIndex = {};
for (int i = 0; i < contentModel->rowCount(); ++i) {
QHelpContentItem *itm = contentModel->contentItemAt(contentModel->index(i, 0));
if (itm && itm->url().host() == link.host()) {
@@ -559,11 +272,11 @@ QModelIndex QHelpContentWidget::indexOf(const QUrl &link)
return m_syncIndex;
}
}
- return QModelIndex();
+ return {};
}
bool QHelpContentWidget::searchContentItem(QHelpContentModel *model, const QModelIndex &parent,
- const QString &cleanPath)
+ const QString &cleanPath)
{
QHelpContentItem *parentItem = model->contentItemAt(parent);
if (!parentItem)
@@ -596,5 +309,3 @@ void QHelpContentWidget::showLink(const QModelIndex &index)
}
QT_END_NAMESPACE
-
-#include "qhelpcontentwidget.moc"
diff --git a/src/assistant/help/qhelpcontentwidget.h b/src/assistant/help/qhelpcontentwidget.h
index b316ebba9..cf9668835 100644
--- a/src/assistant/help/qhelpcontentwidget.h
+++ b/src/assistant/help/qhelpcontentwidget.h
@@ -1,80 +1,19 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QHELPCONTENTWIDGET_H
#define QHELPCONTENTWIDGET_H
#include <QtHelp/qhelp_global.h>
-
-#include <QtCore/QQueue>
-#include <QtCore/QString>
-#include <QtWidgets/QTreeView>
+#include <QtHelp/qhelpcontentitem.h>
+#include <QtWidgets/qtreeview.h>
QT_BEGIN_NAMESPACE
-
-class QHelpEnginePrivate;
-class QHelpContentItemPrivate;
class QHelpContentModelPrivate;
class QHelpEngine;
-class QHelpContentProvider;
-
-class QHELP_EXPORT QHelpContentItem
-{
-public:
- ~QHelpContentItem();
-
- QHelpContentItem *child(int row) const;
- int childCount() const;
- QString title() const;
- QUrl url() const;
- int row() const;
- QHelpContentItem *parent() const;
- int childPosition(QHelpContentItem *child) const;
-
-private:
- QHelpContentItem(const QString &name, const QUrl &link,
- QHelpContentItem *parent = nullptr);
-
- QHelpContentItemPrivate *d;
- friend class QHelpContentProvider;
-};
+class QHelpEngineCore;
+class QUrl;
class QHELP_EXPORT QHelpContentModel : public QAbstractItemModel
{
@@ -83,15 +22,15 @@ class QHELP_EXPORT QHelpContentModel : public QAbstractItemModel
public:
~QHelpContentModel() override;
+ void createContentsForCurrentFilter();
void createContents(const QString &customFilterName);
QHelpContentItem *contentItemAt(const QModelIndex &index) const;
QVariant data(const QModelIndex &index, int role) const override;
- QModelIndex index(int row, int column,
- const QModelIndex &parent = QModelIndex()) const override;
+ QModelIndex index(int row, int column, const QModelIndex &parent = {}) const override;
QModelIndex parent(const QModelIndex &index) const override;
- int rowCount(const QModelIndex &parent = QModelIndex()) const override;
- int columnCount(const QModelIndex &parent = QModelIndex()) const override;
+ int rowCount(const QModelIndex &parent = {}) const override;
+ int columnCount(const QModelIndex &parent = {}) const override;
bool isCreatingContents() const;
Q_SIGNALS:
@@ -102,9 +41,10 @@ private Q_SLOTS:
void insertContents();
private:
- QHelpContentModel(QHelpEnginePrivate *helpEngine);
+ QHelpContentModel(QHelpEngineCore *helpEngine);
QHelpContentModelPrivate *d;
friend class QHelpEnginePrivate;
+ friend class QHelpContentModelPrivate;
};
class QHELP_EXPORT QHelpContentWidget : public QTreeView
@@ -121,8 +61,8 @@ private Q_SLOTS:
void showLink(const QModelIndex &index);
private:
- bool searchContentItem(QHelpContentModel *model,
- const QModelIndex &parent, const QString &path);
+ bool searchContentItem(QHelpContentModel *model, const QModelIndex &parent,
+ const QString &path);
QModelIndex m_syncIndex;
private:
@@ -132,5 +72,4 @@ private:
QT_END_NAMESPACE
-#endif
-
+#endif // QHELPCONTENTWIDGET_H
diff --git a/src/assistant/help/qhelpdbreader.cpp b/src/assistant/help/qhelpdbreader.cpp
index 2d99a2a3c..cfe1b6839 100644
--- a/src/assistant/help/qhelpdbreader.cpp
+++ b/src/assistant/help/qhelpdbreader.cpp
@@ -1,75 +1,35 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qhelpdbreader_p.h"
#include "qhelp_global.h"
-#include <QtCore/QFile>
-#include <QtCore/QList>
-#include <QtCore/QVariant>
-#include <QtSql/QSqlError>
-#include <QtSql/QSqlQuery>
+#include <QtCore/qfile.h>
+#include <QtCore/qmap.h>
+#include <QtCore/qvariant.h>
+#include <QtSql/qsqldatabase.h>
+#include <QtSql/qsqlerror.h>
+#include <QtSql/qsqlquery.h>
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
QHelpDBReader::QHelpDBReader(const QString &dbName)
- : QObject(nullptr),
- m_dbName(dbName),
- m_uniqueId(QHelpGlobal::uniquifyConnectionName(QLatin1String("QHelpDBReader"),
- this))
-{
-}
+ : m_dbName(dbName)
+ , m_uniqueId(QHelpGlobal::uniquifyConnectionName("QHelpDBReader"_L1, this))
+{}
-QHelpDBReader::QHelpDBReader(const QString &dbName, const QString &uniqueId,
- QObject *parent)
- : QObject(parent),
- m_dbName(dbName),
- m_uniqueId(uniqueId)
-{
-}
+QHelpDBReader::QHelpDBReader(const QString &dbName, const QString &uniqueId, QObject *parent)
+ : QObject(parent)
+ , m_dbName(dbName)
+ , m_uniqueId(uniqueId)
+{}
QHelpDBReader::~QHelpDBReader()
{
- if (m_initDone) {
- delete m_query;
+ if (m_initDone)
QSqlDatabase::removeDatabase(m_uniqueId);
- }
}
bool QHelpDBReader::init()
@@ -86,15 +46,14 @@ bool QHelpDBReader::init()
}
m_initDone = true;
- m_query = new QSqlQuery(QSqlDatabase::database(m_uniqueId));
-
+ m_query.reset(new QSqlQuery(QSqlDatabase::database(m_uniqueId)));
return true;
}
bool QHelpDBReader::initDB()
{
- QSqlDatabase db = QSqlDatabase::addDatabase(QLatin1String("QSQLITE"), m_uniqueId);
- db.setConnectOptions(QLatin1String("QSQLITE_OPEN_READONLY"));
+ QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"_L1, m_uniqueId);
+ db.setConnectOptions("QSQLITE_OPEN_READONLY"_L1);
db.setDatabaseName(m_dbName);
if (!db.open()) {
/*: The placeholders are: %1 - The name of the database which cannot be opened
@@ -111,7 +70,7 @@ QString QHelpDBReader::namespaceName() const
if (!m_namespace.isEmpty())
return m_namespace;
if (m_query) {
- m_query->exec(QLatin1String("SELECT Name FROM NamespaceTable"));
+ m_query->exec("SELECT Name FROM NamespaceTable"_L1);
if (m_query->next())
m_namespace = m_query->value(0).toString();
}
@@ -121,16 +80,16 @@ QString QHelpDBReader::namespaceName() const
QString QHelpDBReader::virtualFolder() const
{
if (m_query) {
- m_query->exec(QLatin1String("SELECT Name FROM FolderTable WHERE Id=1"));
+ m_query->exec("SELECT Name FROM FolderTable WHERE Id=1"_L1);
if (m_query->next())
return m_query->value(0).toString();
}
- return QString();
+ return {};
}
QString QHelpDBReader::version() const
{
- const QString versionString = metaData(QLatin1String("version")).toString();
+ const QString versionString = metaData("version"_L1).toString();
if (versionString.isEmpty())
return qtVersionHeuristic();
return versionString;
@@ -139,14 +98,14 @@ QString QHelpDBReader::version() const
QString QHelpDBReader::qtVersionHeuristic() const
{
const QString nameSpace = namespaceName();
- if (!nameSpace.startsWith(QLatin1String("org.qt-project.")))
- return QString();
+ if (!nameSpace.startsWith("org.qt-project."_L1))
+ return {};
// We take the namespace tail, starting from the last letter in namespace name.
// We drop any non digit characters.
- const QChar dot(QLatin1Char('.'));
+ const QChar dot(u'.');
QString tail;
- for (int i = nameSpace.count(); i > 0; --i) {
+ for (int i = nameSpace.size(); i > 0; --i) {
const QChar c = nameSpace.at(i - 1);
if (c.isDigit() || c == dot)
tail.prepend(c);
@@ -172,30 +131,29 @@ QString QHelpDBReader::qtVersionHeuristic() const
tail.chop(1);
if (tail.count(dot) == 0) {
- if (tail.count() > 5)
+ if (tail.size() > 5)
return tail;
// When we have 3 digits, we split it like: ABC -> A.B.C
// When we have 4 digits, we split it like: ABCD -> A.BC.D
// When we have 5 digits, we split it like: ABCDE -> A.BC.DE
const int major = tail.left(1).toInt();
- const int minor = tail.count() == 3
+ const int minor = tail.size() == 3
? tail.mid(1, 1).toInt() : tail.mid(1, 2).toInt();
- const int patch = tail.count() == 5
+ const int patch = tail.size() == 5
? tail.right(2).toInt() : tail.right(1).toInt();
return QString::fromUtf8("%1.%2.%3").arg(major).arg(minor).arg(patch);
}
-
return tail;
}
static bool isAttributeUsed(QSqlQuery *query, const QString &tableName, int attributeId)
{
query->prepare(QString::fromLatin1("SELECT FilterAttributeId "
- "FROM %1 "
- "WHERE FilterAttributeId = ? "
- "LIMIT 1").arg(tableName));
+ "FROM %1 "
+ "WHERE FilterAttributeId = ? "
+ "LIMIT 1").arg(tableName));
query->bindValue(0, attributeId);
query->exec();
return query->next(); // if we got a result it means it was used
@@ -204,7 +162,7 @@ static bool isAttributeUsed(QSqlQuery *query, const QString &tableName, int attr
static int filterDataCount(QSqlQuery *query, const QString &tableName)
{
query->exec(QString::fromLatin1("SELECT COUNT(*) FROM"
- "(SELECT DISTINCT * FROM %1)").arg(tableName));
+ "(SELECT DISTINCT * FROM %1)").arg(tableName));
query->next();
return query->value(0).toInt();
}
@@ -216,7 +174,7 @@ QHelpDBReader::IndexTable QHelpDBReader::indexTable() const
return table;
QMap<int, QString> attributeIds;
- m_query->exec(QLatin1String("SELECT DISTINCT Id, Name FROM FilterAttributeTable ORDER BY Id"));
+ m_query->exec("SELECT DISTINCT Id, Name FROM FilterAttributeTable ORDER BY Id"_L1);
while (m_query->next())
attributeIds.insert(m_query->value(0).toInt(), m_query->value(1).toString());
@@ -225,27 +183,22 @@ QHelpDBReader::IndexTable QHelpDBReader::indexTable() const
QList<int> usedAttributeIds;
for (auto it = attributeIds.cbegin(), end = attributeIds.cend(); it != end; ++it) {
const int attributeId = it.key();
- if (isAttributeUsed(m_query, QLatin1String("IndexFilterTable"), attributeId)
- || isAttributeUsed(m_query, QLatin1String("ContentsFilterTable"), attributeId)
- || isAttributeUsed(m_query, QLatin1String("FileFilterTable"), attributeId)) {
+ if (isAttributeUsed(m_query.get(), "IndexFilterTable"_L1, attributeId)
+ || isAttributeUsed(m_query.get(), "ContentsFilterTable"_L1, attributeId)
+ || isAttributeUsed(m_query.get(), "FileFilterTable"_L1, attributeId)) {
usedAttributeIds.append(attributeId);
}
}
bool legacy = false;
- m_query->exec(QLatin1String("SELECT * FROM pragma_table_info('IndexTable') "
- "WHERE name='ContextName'"));
+ m_query->exec("SELECT * FROM pragma_table_info('IndexTable') WHERE name='ContextName'"_L1);
if (m_query->next())
legacy = true;
- const QString identifierColumnName = legacy
- ? QLatin1String("ContextName")
- : QLatin1String("Identifier");
-
- const int usedAttributeCount = usedAttributeIds.count();
+ const QString identifierColumnName = legacy ? "ContextName"_L1 : "Identifier"_L1;
+ const int usedAttributeCount = usedAttributeIds.size();
QMap<int, IndexItem> idToIndexItem;
-
m_query->exec(QString::fromLatin1("SELECT Name, %1, FileId, Anchor, Id "
"FROM IndexTable "
"ORDER BY Id").arg(identifierColumnName));
@@ -264,13 +217,14 @@ QHelpDBReader::IndexTable QHelpDBReader::indexTable() const
QMap<int, int> originalFileIdToNewFileId;
int filesCount = 0;
- m_query->exec(QLatin1String("SELECT "
- "FileNameTable.FileId, "
- "FileNameTable.Name, "
- "FileNameTable.Title "
- "FROM FileNameTable, FolderTable "
- "WHERE FileNameTable.FolderId = FolderTable.Id "
- "ORDER BY FileId"));
+ m_query->exec(
+ "SELECT "
+ "FileNameTable.FileId, "
+ "FileNameTable.Name, "
+ "FileNameTable.Title "
+ "FROM FileNameTable, FolderTable "
+ "WHERE FileNameTable.FolderId = FolderTable.Id "
+ "ORDER BY FileId"_L1);
while (m_query->next()) {
const int fileId = m_query->value(0).toInt();
FileItem fileItem;
@@ -284,9 +238,7 @@ QHelpDBReader::IndexTable QHelpDBReader::indexTable() const
QMap<int, ContentsItem> idToContentsItem;
- m_query->exec(QLatin1String("SELECT Data, Id "
- "FROM ContentsTable "
- "ORDER BY Id"));
+ m_query->exec("SELECT Data, Id FROM ContentsTable ORDER BY Id"_L1);
while (m_query->next()) {
ContentsItem contentsItem;
contentsItem.data = m_query->value(0).toByteArray();
@@ -306,27 +258,25 @@ QHelpDBReader::IndexTable QHelpDBReader::indexTable() const
// which we want to optimize). The same with FileNameTable and
// FileFilterTable.
- const bool mayOptimizeIndexTable
- = filterDataCount(m_query, QLatin1String("IndexFilterTable"))
- == idToIndexItem.count() * usedAttributeCount;
- const bool mayOptimizeFileTable
- = filterDataCount(m_query, QLatin1String("FileFilterTable"))
- == idToFileItem.count() * usedAttributeCount;
- const bool mayOptimizeContentsTable
- = filterDataCount(m_query, QLatin1String("ContentsFilterTable"))
- == idToContentsItem.count() * usedAttributeCount;
+ const bool mayOptimizeIndexTable = filterDataCount(m_query.get(), "IndexFilterTable"_L1)
+ == idToIndexItem.size() * usedAttributeCount;
+ const bool mayOptimizeFileTable = filterDataCount(m_query.get(), "FileFilterTable"_L1)
+ == idToFileItem.size() * usedAttributeCount;
+ const bool mayOptimizeContentsTable =
+ filterDataCount(m_query.get(), "ContentsFilterTable"_L1)
+ == idToContentsItem.size() * usedAttributeCount;
optimized = mayOptimizeIndexTable && mayOptimizeFileTable && mayOptimizeContentsTable;
if (!optimized) {
- m_query->exec(QLatin1String(
- "SELECT "
- "IndexFilterTable.IndexId, "
- "FilterAttributeTable.Name "
- "FROM "
- "IndexFilterTable, "
- "FilterAttributeTable "
- "WHERE "
- "IndexFilterTable.FilterAttributeId = FilterAttributeTable.Id"));
+ m_query->exec(
+ "SELECT "
+ "IndexFilterTable.IndexId, "
+ "FilterAttributeTable.Name "
+ "FROM "
+ "IndexFilterTable, "
+ "FilterAttributeTable "
+ "WHERE "
+ "IndexFilterTable.FilterAttributeId = FilterAttributeTable.Id"_L1);
while (m_query->next()) {
const int indexId = m_query->value(0).toInt();
auto it = idToIndexItem.find(indexId);
@@ -334,15 +284,15 @@ QHelpDBReader::IndexTable QHelpDBReader::indexTable() const
it.value().filterAttributes.append(m_query->value(1).toString());
}
- m_query->exec(QLatin1String(
- "SELECT "
- "FileFilterTable.FileId, "
- "FilterAttributeTable.Name "
- "FROM "
- "FileFilterTable, "
- "FilterAttributeTable "
- "WHERE "
- "FileFilterTable.FilterAttributeId = FilterAttributeTable.Id"));
+ m_query->exec(
+ "SELECT "
+ "FileFilterTable.FileId, "
+ "FilterAttributeTable.Name "
+ "FROM "
+ "FileFilterTable, "
+ "FilterAttributeTable "
+ "WHERE "
+ "FileFilterTable.FilterAttributeId = FilterAttributeTable.Id"_L1);
while (m_query->next()) {
const int fileId = m_query->value(0).toInt();
auto it = idToFileItem.find(fileId);
@@ -350,15 +300,15 @@ QHelpDBReader::IndexTable QHelpDBReader::indexTable() const
it.value().filterAttributes.append(m_query->value(1).toString());
}
- m_query->exec(QLatin1String(
- "SELECT "
- "ContentsFilterTable.ContentsId, "
- "FilterAttributeTable.Name "
- "FROM "
- "ContentsFilterTable, "
- "FilterAttributeTable "
- "WHERE "
- "ContentsFilterTable.FilterAttributeId = FilterAttributeTable.Id"));
+ m_query->exec(
+ "SELECT "
+ "ContentsFilterTable.ContentsId, "
+ "FilterAttributeTable.Name "
+ "FROM "
+ "ContentsFilterTable, "
+ "FilterAttributeTable "
+ "WHERE "
+ "ContentsFilterTable.FilterAttributeId = FilterAttributeTable.Id"_L1);
while (m_query->next()) {
const int contentsId = m_query->value(0).toInt();
auto it = idToContentsItem.find(contentsId);
@@ -382,7 +332,6 @@ QHelpDBReader::IndexTable QHelpDBReader::indexTable() const
for (int attributeId : usedAttributeIds)
table.usedFilterAttributes.append(attributeIds.value(attributeId));
}
-
return table;
}
@@ -390,15 +339,15 @@ QList<QStringList> QHelpDBReader::filterAttributeSets() const
{
QList<QStringList> result;
if (m_query) {
- m_query->exec(QLatin1String(
- "SELECT "
- "FileAttributeSetTable.Id, "
- "FilterAttributeTable.Name "
- "FROM "
- "FileAttributeSetTable, "
- "FilterAttributeTable "
- "WHERE FileAttributeSetTable.FilterAttributeId = FilterAttributeTable.Id "
- "ORDER BY FileAttributeSetTable.Id"));
+ m_query->exec(
+ "SELECT "
+ "FileAttributeSetTable.Id, "
+ "FilterAttributeTable.Name "
+ "FROM "
+ "FileAttributeSetTable, "
+ "FilterAttributeTable "
+ "WHERE FileAttributeSetTable.FilterAttributeId = FilterAttributeTable.Id "
+ "ORDER BY FileAttributeSetTable.Id"_L1);
int oldId = -1;
while (m_query->next()) {
const int id = m_query->value(0).toInt();
@@ -420,22 +369,22 @@ QByteArray QHelpDBReader::fileData(const QString &virtualFolder,
return ba;
namespaceName();
- m_query->prepare(QLatin1String(
- "SELECT "
- "FileDataTable.Data "
- "FROM "
- "FileDataTable, "
- "FileNameTable, "
- "FolderTable, "
- "NamespaceTable "
- "WHERE FileDataTable.Id = FileNameTable.FileId "
- "AND (FileNameTable.Name = ? OR FileNameTable.Name = ?) "
- "AND FileNameTable.FolderId = FolderTable.Id "
- "AND FolderTable.Name = ? "
- "AND FolderTable.NamespaceId = NamespaceTable.Id "
- "AND NamespaceTable.Name = ?"));
+ m_query->prepare(
+ "SELECT "
+ "FileDataTable.Data "
+ "FROM "
+ "FileDataTable, "
+ "FileNameTable, "
+ "FolderTable, "
+ "NamespaceTable "
+ "WHERE FileDataTable.Id = FileNameTable.FileId "
+ "AND (FileNameTable.Name = ? OR FileNameTable.Name = ?) "
+ "AND FileNameTable.FolderId = FolderTable.Id "
+ "AND FolderTable.Name = ? "
+ "AND FolderTable.NamespaceId = NamespaceTable.Id "
+ "AND NamespaceTable.Name = ?"_L1);
m_query->bindValue(0, filePath);
- m_query->bindValue(1, QString(QLatin1String("./") + filePath));
+ m_query->bindValue(1, QString("./"_L1 + filePath));
m_query->bindValue(2, virtualFolder);
m_query->bindValue(3, m_namespace);
m_query->exec();
@@ -448,7 +397,7 @@ QStringList QHelpDBReader::customFilters() const
{
QStringList lst;
if (m_query) {
- m_query->exec(QLatin1String("SELECT Name FROM FilterNameTable"));
+ m_query->exec("SELECT Name FROM FilterNameTable"_L1);
while (m_query->next())
lst.append(m_query->value(0).toString());
}
@@ -460,18 +409,18 @@ QStringList QHelpDBReader::filterAttributes(const QString &filterName) const
QStringList lst;
if (m_query) {
if (filterName.isEmpty()) {
- m_query->prepare(QLatin1String("SELECT Name FROM FilterAttributeTable"));
+ m_query->prepare("SELECT Name FROM FilterAttributeTable"_L1);
} else {
- m_query->prepare(QLatin1String(
- "SELECT "
- "FilterAttributeTable.Name "
- "FROM "
- "FilterAttributeTable, "
- "FilterTable, "
- "FilterNameTable "
- "WHERE FilterNameTable.Name = ? "
- "AND FilterNameTable.Id = FilterTable.NameId "
- "AND FilterTable.FilterAttributeId = FilterAttributeTable.Id"));
+ m_query->prepare(
+ "SELECT "
+ "FilterAttributeTable.Name "
+ "FROM "
+ "FilterAttributeTable, "
+ "FilterTable, "
+ "FilterNameTable "
+ "WHERE FilterNameTable.Name = ? "
+ "AND FilterNameTable.Id = FilterTable.NameId "
+ "AND FilterTable.FilterAttributeId = FilterAttributeTable.Id"_L1);
m_query->bindValue(0, filterName);
}
m_query->exec();
@@ -484,76 +433,70 @@ QStringList QHelpDBReader::filterAttributes(const QString &filterName) const
QMultiMap<QString, QByteArray> QHelpDBReader::filesData(const QStringList &filterAttributes,
const QString &extensionFilter) const
{
- QMultiMap<QString, QByteArray> result;
if (!m_query)
- return result;
+ return {};
QString query;
QString extension;
if (!extensionFilter.isEmpty())
- extension = QString(QLatin1String("AND FileNameTable.Name "
- "LIKE \'%.%1\'")).arg(extensionFilter);
+ extension = "AND FileNameTable.Name LIKE \'%.%1\'"_L1.arg(extensionFilter);
if (filterAttributes.isEmpty()) {
- query = QString(QLatin1String("SELECT "
- "FileNameTable.Name, "
- "FileDataTable.Data "
- "FROM "
- "FolderTable, "
- "FileNameTable, "
- "FileDataTable "
- "WHERE FileDataTable.Id = FileNameTable.FileId "
- "AND FileNameTable.FolderId = FolderTable.Id %1"))
- .arg(extension);
+ query =
+ "SELECT "
+ "FileNameTable.Name, "
+ "FileDataTable.Data "
+ "FROM "
+ "FolderTable, "
+ "FileNameTable, "
+ "FileDataTable "
+ "WHERE FileDataTable.Id = FileNameTable.FileId "
+ "AND FileNameTable.FolderId = FolderTable.Id %1"_L1.arg(extension);
} else {
- for (int i = 0; i < filterAttributes.count(); ++i) {
+ for (int i = 0; i < filterAttributes.size(); ++i) {
if (i > 0)
- query.append(QLatin1String(" INTERSECT "));
- query.append(QString(QLatin1String(
- "SELECT "
- "FileNameTable.Name, "
- "FileDataTable.Data "
- "FROM "
- "FolderTable, "
- "FileNameTable, "
- "FileDataTable, "
- "FileFilterTable, "
- "FilterAttributeTable "
- "WHERE FileDataTable.Id = FileNameTable.FileId "
- "AND FileNameTable.FolderId = FolderTable.Id "
- "AND FileNameTable.FileId = FileFilterTable.FileId "
- "AND FileFilterTable.FilterAttributeId = FilterAttributeTable.Id "
- "AND FilterAttributeTable.Name = \'%1\' %2"))
- .arg(quote(filterAttributes.at(i)))
- .arg(extension));
+ query.append(" INTERSECT "_L1);
+ query.append(
+ "SELECT "
+ "FileNameTable.Name, "
+ "FileDataTable.Data "
+ "FROM "
+ "FolderTable, "
+ "FileNameTable, "
+ "FileDataTable, "
+ "FileFilterTable, "
+ "FilterAttributeTable "
+ "WHERE FileDataTable.Id = FileNameTable.FileId "
+ "AND FileNameTable.FolderId = FolderTable.Id "
+ "AND FileNameTable.FileId = FileFilterTable.FileId "
+ "AND FileFilterTable.FilterAttributeId = FilterAttributeTable.Id "
+ "AND FilterAttributeTable.Name = \'%1\' %2"_L1
+ .arg(quote(filterAttributes.at(i)), extension));
}
}
m_query->exec(query);
+ QMultiMap<QString, QByteArray> result;
while (m_query->next())
result.insert(m_query->value(0).toString(), qUncompress(m_query->value(1).toByteArray()));
-
return result;
}
QVariant QHelpDBReader::metaData(const QString &name) const
{
- QVariant v;
if (!m_query)
- return v;
+ return {};
- m_query->prepare(QLatin1String("SELECT COUNT(Value), Value FROM MetaDataTable "
- "WHERE Name=?"));
+ m_query->prepare("SELECT COUNT(Value), Value FROM MetaDataTable WHERE Name=?"_L1);
m_query->bindValue(0, name);
- if (m_query->exec() && m_query->next()
- && m_query->value(0).toInt() == 1)
- v = m_query->value(1);
- return v;
+ if (m_query->exec() && m_query->next() && m_query->value(0).toInt() == 1)
+ return m_query->value(1);
+ return {};
}
QString QHelpDBReader::quote(const QString &string) const
{
QString s = string;
- s.replace(QLatin1Char('\''), QLatin1String("\'\'"));
+ s.replace(u'\'', "\'\'"_L1);
return s;
}
diff --git a/src/assistant/help/qhelpdbreader_p.h b/src/assistant/help/qhelpdbreader_p.h
index 9abc3c06f..1bc4fc7c9 100644
--- a/src/assistant/help/qhelpdbreader_p.h
+++ b/src/assistant/help/qhelpdbreader_p.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QHELPDBREADER_H
#define QHELPDBREADER_H
@@ -51,11 +15,9 @@
// We mean it.
//
-#include <QtCore/QObject>
-#include <QtCore/QStringList>
-#include <QtCore/QUrl>
-#include <QtCore/QByteArray>
-#include <QtCore/QSet>
+#include <QtCore/qbytearray.h>
+#include <QtCore/qobject.h>
+#include <QtCore/qstringlist.h>
QT_BEGIN_NAMESPACE
@@ -69,7 +31,6 @@ public:
class IndexItem
{
public:
- IndexItem() = default;
QString name;
QString identifier;
int fileId = 0;
@@ -80,7 +41,6 @@ public:
class FileItem
{
public:
- FileItem() = default;
QString name;
QString title;
QStringList filterAttributes;
@@ -89,7 +49,6 @@ public:
class ContentsItem
{
public:
- ContentsItem() = default;
QByteArray data;
QStringList filterAttributes;
};
@@ -104,8 +63,7 @@ public:
};
QHelpDBReader(const QString &dbName);
- QHelpDBReader(const QString &dbName, const QString &uniqueId,
- QObject *parent);
+ QHelpDBReader(const QString &dbName, const QString &uniqueId, QObject *parent);
~QHelpDBReader();
bool init();
@@ -116,12 +74,11 @@ public:
IndexTable indexTable() const;
QList<QStringList> filterAttributeSets() const;
QMultiMap<QString, QByteArray> filesData(const QStringList &filterAttributes,
- const QString &extensionFilter = QString()) const;
- QByteArray fileData(const QString &virtualFolder,
- const QString &filePath) const;
+ const QString &extensionFilter = {}) const;
+ QByteArray fileData(const QString &virtualFolder, const QString &filePath) const;
QStringList customFilters() const;
- QStringList filterAttributes(const QString &filterName = QString()) const;
+ QStringList filterAttributes(const QString &filterName = {}) const;
QVariant metaData(const QString &name) const;
@@ -134,10 +91,10 @@ private:
QString m_dbName;
QString m_uniqueId;
QString m_error;
- QSqlQuery *m_query = nullptr;
+ std::unique_ptr<QSqlQuery> m_query;
mutable QString m_namespace;
};
QT_END_NAMESPACE
-#endif
+#endif // QHELPDBREADER_H
diff --git a/src/assistant/help/qhelpengine.cpp b/src/assistant/help/qhelpengine.cpp
index bb1475fdf..e773018e5 100644
--- a/src/assistant/help/qhelpengine.cpp
+++ b/src/assistant/help/qhelpengine.cpp
@@ -1,126 +1,64 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qhelpengine.h"
-#include "qhelpengine_p.h"
-#include "qhelpdbreader_p.h"
#include "qhelpcontentwidget.h"
+#include "qhelpfilterengine.h"
#include "qhelpindexwidget.h"
#include "qhelpsearchengine.h"
-#include "qhelpcollectionhandler_p.h"
-#include "qhelpfilterengine.h"
-#include <QtCore/QDir>
-#include <QtCore/QFile>
-#include <QtCore/QPluginLoader>
-#include <QtCore/QTimer>
-#include <QtWidgets/QApplication>
-#include <QtSql/QSqlQuery>
+#include <QtCore/qtimer.h>
QT_BEGIN_NAMESPACE
-void QHelpEnginePrivate::init(const QString &collectionFile,
- QHelpEngineCore *helpEngineCore)
+class QHelpEnginePrivate
{
- QHelpEngineCorePrivate::init(collectionFile, helpEngineCore);
+public:
+ QHelpEnginePrivate(QHelpEngineCore *helpEngineCore);
- if (!contentModel)
- contentModel = new QHelpContentModel(this);
- if (!indexModel)
- indexModel = new QHelpIndexModel(this);
-
- connect(helpEngineCore, &QHelpEngineCore::setupFinished,
- this, &QHelpEnginePrivate::scheduleApplyCurrentFilter);
- connect(helpEngineCore, &QHelpEngineCore::currentFilterChanged,
- this, &QHelpEnginePrivate::scheduleApplyCurrentFilter);
- connect(helpEngineCore->filterEngine(), &QHelpFilterEngine::filterActivated,
- this, &QHelpEnginePrivate::scheduleApplyCurrentFilter);
-}
+ QHelpContentModel *contentModel = nullptr;
+ QHelpContentWidget *contentWidget = nullptr;
-void QHelpEnginePrivate::scheduleApplyCurrentFilter()
-{
- if (!error.isEmpty())
- return;
-
- if (m_isApplyCurrentFilterScheduled)
- return;
-
- m_isApplyCurrentFilterScheduled = true;
- QTimer::singleShot(0, this, &QHelpEnginePrivate::applyCurrentFilter);
-}
+ QHelpIndexModel *indexModel = nullptr;
+ QHelpIndexWidget *indexWidget = nullptr;
-void QHelpEnginePrivate::applyCurrentFilter()
-{
- m_isApplyCurrentFilterScheduled = false;
- const QString filter = usesFilterEngine
- ? q->filterEngine()->activeFilter()
- : currentFilter;
- contentModel->createContents(filter);
- indexModel->createIndex(filter);
-}
+ QHelpSearchEngine *searchEngine = nullptr;
-void QHelpEnginePrivate::setContentsWidgetBusy()
-{
-#if QT_CONFIG(cursor)
- contentWidget->setCursor(Qt::WaitCursor);
-#endif
-}
+ bool m_isApplyCurrentFilterScheduled = false;
+ QHelpEngineCore *m_helpEngineCore = nullptr;
+};
-void QHelpEnginePrivate::unsetContentsWidgetBusy()
+QHelpEnginePrivate::QHelpEnginePrivate(QHelpEngineCore *helpEngineCore)
+ : m_helpEngineCore(helpEngineCore)
{
-#if QT_CONFIG(cursor)
- contentWidget->unsetCursor();
-#endif
-}
-
-void QHelpEnginePrivate::setIndexWidgetBusy()
-{
-#if QT_CONFIG(cursor)
- indexWidget->setCursor(Qt::WaitCursor);
-#endif
-}
-
-void QHelpEnginePrivate::unsetIndexWidgetBusy()
-{
-#if QT_CONFIG(cursor)
- indexWidget->unsetCursor();
-#endif
+ if (!contentModel)
+ contentModel = new QHelpContentModel(helpEngineCore);
+ if (!indexModel)
+ indexModel = new QHelpIndexModel(m_helpEngineCore);
+
+ const auto applyCurrentFilter = [this] {
+ m_isApplyCurrentFilterScheduled = false;
+ contentModel->createContentsForCurrentFilter();
+ indexModel->createIndexForCurrentFilter();
+ };
+
+ const auto scheduleApplyCurrentFilter = [this, applyCurrentFilter] {
+ if (!m_helpEngineCore->error().isEmpty())
+ return;
+
+ if (m_isApplyCurrentFilterScheduled)
+ return;
+
+ m_isApplyCurrentFilterScheduled = true;
+ QTimer::singleShot(0, m_helpEngineCore, applyCurrentFilter);
+ };
+
+ QObject::connect(m_helpEngineCore, &QHelpEngineCore::setupFinished,
+ m_helpEngineCore, scheduleApplyCurrentFilter);
+ QObject::connect(m_helpEngineCore, &QHelpEngineCore::currentFilterChanged,
+ m_helpEngineCore, scheduleApplyCurrentFilter);
+ QObject::connect(m_helpEngineCore->filterEngine(), &QHelpFilterEngine::filterActivated,
+ m_helpEngineCore, scheduleApplyCurrentFilter);
}
/*!
@@ -138,16 +76,16 @@ void QHelpEnginePrivate::unsetIndexWidgetBusy()
it will be created.
*/
QHelpEngine::QHelpEngine(const QString &collectionFile, QObject *parent)
- : QHelpEngineCore(d = new QHelpEnginePrivate(), parent)
-{
- d->init(collectionFile, this);
-}
+ : QHelpEngineCore(collectionFile, parent)
+ , d(new QHelpEnginePrivate(this))
+{}
/*!
Destroys the help engine object.
*/
QHelpEngine::~QHelpEngine()
{
+ delete d;
}
/*!
@@ -172,12 +110,16 @@ QHelpIndexModel *QHelpEngine::indexModel() const
QHelpContentWidget *QHelpEngine::contentWidget()
{
if (!d->contentWidget) {
- d->contentWidget = new QHelpContentWidget();
+ d->contentWidget = new QHelpContentWidget;
d->contentWidget->setModel(d->contentModel);
- connect(d->contentModel, &QHelpContentModel::contentsCreationStarted,
- d, &QHelpEnginePrivate::setContentsWidgetBusy);
- connect(d->contentModel, &QHelpContentModel::contentsCreated,
- d, &QHelpEnginePrivate::unsetContentsWidgetBusy);
+#if QT_CONFIG(cursor)
+ connect(d->contentModel, &QHelpContentModel::contentsCreationStarted, this, [this] {
+ d->contentWidget->setCursor(Qt::WaitCursor);
+ });
+ connect(d->contentModel, &QHelpContentModel::contentsCreated, this, [this] {
+ d->contentWidget->unsetCursor();
+ });
+#endif
}
return d->contentWidget;
}
@@ -188,12 +130,16 @@ QHelpContentWidget *QHelpEngine::contentWidget()
QHelpIndexWidget *QHelpEngine::indexWidget()
{
if (!d->indexWidget) {
- d->indexWidget = new QHelpIndexWidget();
+ d->indexWidget = new QHelpIndexWidget;
d->indexWidget->setModel(d->indexModel);
- connect(d->indexModel, &QHelpIndexModel::indexCreationStarted,
- d, &QHelpEnginePrivate::setIndexWidgetBusy);
- connect(d->indexModel, &QHelpIndexModel::indexCreated,
- d, &QHelpEnginePrivate::unsetIndexWidgetBusy);
+#if QT_CONFIG(cursor)
+ connect(d->indexModel, &QHelpIndexModel::indexCreationStarted, this, [this] {
+ d->indexWidget->setCursor(Qt::WaitCursor);
+ });
+ connect(d->indexModel, &QHelpIndexModel::indexCreated, this, [this] {
+ d->indexWidget->unsetCursor();
+ });
+#endif
}
return d->indexWidget;
}
diff --git a/src/assistant/help/qhelpengine.h b/src/assistant/help/qhelpengine.h
index b09724f62..31b8fb3ef 100644
--- a/src/assistant/help/qhelpengine.h
+++ b/src/assistant/help/qhelpengine.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QHELPENGINE_H
#define QHELPENGINE_H
@@ -44,7 +8,6 @@
QT_BEGIN_NAMESPACE
-
class QHelpContentModel;
class QHelpContentWidget;
class QHelpIndexModel;
@@ -76,4 +39,4 @@ private:
QT_END_NAMESPACE
-#endif
+#endif // QHELPENGINE_H
diff --git a/src/assistant/help/qhelpengine_p.h b/src/assistant/help/qhelpengine_p.h
deleted file mode 100644
index 76bdbb421..000000000
--- a/src/assistant/help/qhelpengine_p.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QHELPENGINE_P_H
-#define QHELPENGINE_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists for the convenience
-// of the help generator tools. This header file may change from version
-// to version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/QHash>
-#include <QtCore/QMap>
-#include <QtCore/QStringList>
-#include <QtCore/QObject>
-
-QT_BEGIN_NAMESPACE
-
-class QSqlQuery;
-
-class QHelpEngineCore;
-class QHelpDBReader;
-class QHelpContentModel;
-class QHelpContentWidget;
-class QHelpIndexModel;
-class QHelpIndexWidget;
-class QHelpSearchEngine;
-class QHelpCollectionHandler;
-class QHelpFilterEngine;
-
-class QHelpEngineCorePrivate : public QObject
-{
- Q_OBJECT
-
-public:
- virtual ~QHelpEngineCorePrivate();
-
- virtual void init(const QString &collectionFile,
- QHelpEngineCore *helpEngineCore);
-
- bool setup();
-
- QHelpCollectionHandler *collectionHandler = nullptr;
- QHelpFilterEngine *filterEngine = nullptr;
- QString currentFilter;
- QString error;
- bool needsSetup = true;
- bool autoSaveFilter = true;
- bool usesFilterEngine = false;
- bool readOnly = true;
-
-protected:
- QHelpEngineCore *q;
-
-private slots:
- void errorReceived(const QString &msg);
-};
-
-class QHelpEnginePrivate : public QHelpEngineCorePrivate
-{
- Q_OBJECT
-
-public:
- void init(const QString &collectionFile,
- QHelpEngineCore *helpEngineCore) override;
-
- QHelpContentModel *contentModel = nullptr;
- QHelpContentWidget *contentWidget = nullptr;
-
- QHelpIndexModel *indexModel = nullptr;
- QHelpIndexWidget *indexWidget = nullptr;
-
- QHelpSearchEngine *searchEngine = nullptr;
-
- friend class QHelpContentProvider;
- friend class QHelpContentModel;
- friend class QHelpIndexProvider;
- friend class QHelpIndexModel;
-
-public slots:
- void setContentsWidgetBusy();
- void unsetContentsWidgetBusy();
- void setIndexWidgetBusy();
- void unsetIndexWidgetBusy();
-
-private slots:
- void scheduleApplyCurrentFilter();
- void applyCurrentFilter();
-
-private:
- bool m_isApplyCurrentFilterScheduled = false;
-
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/assistant/help/qhelpenginecore.cpp b/src/assistant/help/qhelpenginecore.cpp
index f9a3b7f53..5726e3250 100644
--- a/src/assistant/help/qhelpenginecore.cpp
+++ b/src/assistant/help/qhelpenginecore.cpp
@@ -1,73 +1,59 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qhelpenginecore.h"
-#include "qhelpengine_p.h"
-#include "qhelpdbreader_p.h"
#include "qhelpcollectionhandler_p.h"
+#include "qhelpdbreader_p.h"
#include "qhelpfilterengine.h"
+#include "qhelplink.h"
-#include <QtCore/QDir>
-#include <QtCore/QFile>
-#include <QtCore/QPluginLoader>
-#include <QtCore/QFileInfo>
-#include <QtCore/QThread>
-#include <QtHelp/QHelpLink>
-#include <QtWidgets/QApplication>
-#include <QtSql/QSqlQuery>
+#if QT_CONFIG(future)
+#include <QtConcurrent/qtconcurrentrun.h>
+#include <QtCore/qpromise.h>
+#endif
+
+#include <QtCore/qdir.h>
+#include <QtCore/qfileinfo.h>
QT_BEGIN_NAMESPACE
-void QHelpEngineCorePrivate::init(const QString &collectionFile,
- QHelpEngineCore *helpEngineCore)
+using namespace Qt::StringLiterals;
+
+class QHelpEngineCorePrivate
+{
+public:
+ QHelpEngineCorePrivate(const QString &collectionFile, QHelpEngineCore *helpEngineCore);
+
+ void init(const QString &collectionFile);
+ bool setup();
+
+ std::unique_ptr<QHelpCollectionHandler> collectionHandler;
+ QHelpFilterEngine *filterEngine = nullptr;
+ QString currentFilter;
+ QString error;
+ bool needsSetup = true;
+ bool autoSaveFilter = true;
+ bool usesFilterEngine = false;
+ bool readOnly = true;
+
+ QHelpEngineCore *q;
+};
+
+QHelpEngineCorePrivate::QHelpEngineCorePrivate(const QString &collectionFile,
+ QHelpEngineCore *helpEngineCore)
{
q = helpEngineCore;
- collectionHandler = new QHelpCollectionHandler(collectionFile, helpEngineCore);
- connect(collectionHandler, &QHelpCollectionHandler::error,
- this, &QHelpEngineCorePrivate::errorReceived);
- filterEngine->setCollectionHandler(collectionHandler);
- needsSetup = true;
+ filterEngine = new QHelpFilterEngine(q);
+ init(collectionFile);
}
-QHelpEngineCorePrivate::~QHelpEngineCorePrivate()
+void QHelpEngineCorePrivate::init(const QString &collectionFile)
{
- delete collectionHandler;
+ collectionHandler.reset(new QHelpCollectionHandler(collectionFile, q));
+ QObject::connect(collectionHandler.get(), &QHelpCollectionHandler::error, q,
+ [this](const QString &msg) { error = msg; });
+ filterEngine->setCollectionHandler(collectionHandler.get());
+ needsSetup = true;
}
bool QHelpEngineCorePrivate::setup()
@@ -79,24 +65,15 @@ bool QHelpEngineCorePrivate::setup()
needsSetup = false;
emit q->setupStarted();
- const QVariant readOnlyVariant = q->property("_q_readonly");
- const bool readOnly = readOnlyVariant.isValid()
- ? readOnlyVariant.toBool() : q->isReadOnly();
- collectionHandler->setReadOnly(readOnly);
+ collectionHandler->setReadOnly(q->isReadOnly());
const bool opened = collectionHandler->openCollectionFile();
if (opened)
q->currentFilter();
emit q->setupFinished();
-
return opened;
}
-void QHelpEngineCorePrivate::errorReceived(const QString &msg)
-{
- error = msg;
-}
-
/*!
\class QHelpEngineCore
\since 4.4
@@ -113,7 +90,7 @@ void QHelpEngineCorePrivate::errorReceived(const QString &msg)
The core help engine can be used to perform different tasks.
By calling documentsForIdentifier() the engine returns
URLs specifying the file locations inside the help system. The
- actual file data can then be retrived by calling fileData().
+ actual file data can then be retrieved by calling fileData().
The help engine can contain any number of custom filters.
The management of the filters, including adding new filters,
@@ -144,13 +121,6 @@ void QHelpEngineCorePrivate::errorReceived(const QString &msg)
This class does not offer any GUI components or functionality for
indices or contents. If you need one of those use QHelpEngine
instead.
-
- When creating a custom help viewer the viewer can be
- configured by writing a custom collection file which could contain various
- keywords to be used to configure the help engine. These keywords and values
- and their meaning can be found in the help information for
- \l{assistant-custom-help-viewer.html#creating-a-custom-help-collection-file}
- {creating a custom help collection file} for Assistant.
*/
/*!
@@ -167,12 +137,12 @@ void QHelpEngineCorePrivate::errorReceived(const QString &msg)
/*!
\fn void QHelpEngineCore::readersAboutToBeInvalidated()
- \obsolete
+ \deprecated
*/
/*!
\fn void QHelpEngineCore::currentFilterChanged(const QString &newFilter)
- \obsolete
+ \deprecated
QHelpFilterEngine::filterActivated() should be used instead.
@@ -194,22 +164,18 @@ void QHelpEngineCorePrivate::errorReceived(const QString &msg)
*/
QHelpEngineCore::QHelpEngineCore(const QString &collectionFile, QObject *parent)
: QObject(parent)
-{
- d = new QHelpEngineCorePrivate();
- d->filterEngine = new QHelpFilterEngine(this);
- d->init(collectionFile, this);
-}
+ , d(new QHelpEngineCorePrivate(collectionFile, this))
+{}
/*!
\internal
*/
-QHelpEngineCore::QHelpEngineCore(QHelpEngineCorePrivate *helpEngineCorePrivate,
- QObject *parent)
+#if QT_DEPRECATED_SINCE(6, 8)
+QHelpEngineCore::QHelpEngineCore(QHelpEngineCorePrivate *helpEngineCorePrivate, QObject *parent)
: QObject(parent)
-{
- d = helpEngineCorePrivate;
- d->filterEngine = new QHelpFilterEngine(this);
-}
+ , d(helpEngineCorePrivate)
+{}
+#endif
/*!
Destructs the help engine.
@@ -235,15 +201,8 @@ QString QHelpEngineCore::collectionFile() const
void QHelpEngineCore::setCollectionFile(const QString &fileName)
{
- if (fileName == collectionFile())
- return;
-
- if (d->collectionHandler) {
- delete d->collectionHandler;
- d->collectionHandler = nullptr;
- }
- d->init(fileName, this);
- d->needsSetup = true;
+ if (fileName != collectionFile())
+ d->init(fileName);
}
/*!
@@ -328,12 +287,12 @@ bool QHelpEngineCore::copyCollectionFile(const QString &fileName)
*/
QString QHelpEngineCore::namespaceName(const QString &documentationFileName)
{
- QHelpDBReader reader(documentationFileName,
- QHelpGlobal::uniquifyConnectionName(QLatin1String("GetNamespaceName"),
- QThread::currentThread()), nullptr);
+ void *pointer = const_cast<QString *>(&documentationFileName);
+ QHelpDBReader reader(documentationFileName, QHelpGlobal::uniquifyConnectionName(
+ "GetNamespaceName"_L1, pointer), nullptr);
if (reader.init())
return reader.namespaceName();
- return QString();
+ return {};
}
/*!
@@ -376,19 +335,19 @@ bool QHelpEngineCore::unregisterDocumentation(const QString &namespaceName)
QString QHelpEngineCore::documentationFileName(const QString &namespaceName)
{
if (!d->setup())
- return QString();
+ return {};
const QHelpCollectionHandler::FileInfo fileInfo =
d->collectionHandler->registeredDocumentation(namespaceName);
if (fileInfo.namespaceName.isEmpty())
- return QString();
+ return {};
if (QDir::isAbsolutePath(fileInfo.fileName))
return fileInfo.fileName;
return QFileInfo(QFileInfo(d->collectionHandler->collectionFile()).absolutePath()
- + QLatin1Char('/') + fileInfo.fileName).absoluteFilePath();
+ + u'/' + fileInfo.fileName).absoluteFilePath();
}
/*!
@@ -397,18 +356,17 @@ QString QHelpEngineCore::documentationFileName(const QString &namespaceName)
*/
QStringList QHelpEngineCore::registeredDocumentations() const
{
- QStringList list;
if (!d->setup())
- return list;
- const QHelpCollectionHandler::FileInfoList &docList
- = d->collectionHandler->registeredDocumentations();
+ return {};
+ const auto &docList = d->collectionHandler->registeredDocumentations();
+ QStringList list;
for (const QHelpCollectionHandler::FileInfo &info : docList)
list.append(info.namespaceName);
return list;
}
/*!
- \obsolete
+ \deprecated
QHelpFilterEngine::filters() should be used instead.
@@ -419,12 +377,12 @@ QStringList QHelpEngineCore::registeredDocumentations() const
QStringList QHelpEngineCore::customFilters() const
{
if (!d->setup())
- return QStringList();
+ return {};
return d->collectionHandler->customFilters();
}
/*!
- \obsolete
+ \deprecated
QHelpFilterEngine::setFilterData() should be used instead.
@@ -444,7 +402,7 @@ bool QHelpEngineCore::addCustomFilter(const QString &filterName,
}
/*!
- \obsolete
+ \deprecated
QHelpFilterEngine::removeFilter() should be used instead.
@@ -461,7 +419,7 @@ bool QHelpEngineCore::removeCustomFilter(const QString &filterName)
}
/*!
- \obsolete
+ \deprecated
QHelpFilterEngine::availableComponents() should be used instead.
@@ -470,12 +428,12 @@ bool QHelpEngineCore::removeCustomFilter(const QString &filterName)
QStringList QHelpEngineCore::filterAttributes() const
{
if (!d->setup())
- return QStringList();
+ return {};
return d->collectionHandler->filterAttributes();
}
/*!
- \obsolete
+ \deprecated
QHelpFilterEngine::filterData() should be used instead.
@@ -485,12 +443,12 @@ QStringList QHelpEngineCore::filterAttributes() const
QStringList QHelpEngineCore::filterAttributes(const QString &filterName) const
{
if (!d->setup())
- return QStringList();
+ return {};
return d->collectionHandler->filterAttributes(filterName);
}
/*!
- \obsolete
+ \deprecated
\property QHelpEngineCore::currentFilter
\brief the name of the custom filter currently applied.
\since 4.5
@@ -506,14 +464,12 @@ QStringList QHelpEngineCore::filterAttributes(const QString &filterName) const
QString QHelpEngineCore::currentFilter() const
{
if (!d->setup())
- return QString();
+ return {};
if (d->currentFilter.isEmpty()) {
const QString &filter =
- d->collectionHandler->customValue(QLatin1String("CurrentFilter"),
- QString()).toString();
- if (!filter.isEmpty()
- && d->collectionHandler->customFilters().contains(filter))
+ d->collectionHandler->customValue("CurrentFilter"_L1, QString()).toString();
+ if (!filter.isEmpty() && d->collectionHandler->customFilters().contains(filter))
d->currentFilter = filter;
}
return d->currentFilter;
@@ -524,15 +480,13 @@ void QHelpEngineCore::setCurrentFilter(const QString &filterName)
if (!d->setup() || filterName == d->currentFilter)
return;
d->currentFilter = filterName;
- if (d->autoSaveFilter) {
- d->collectionHandler->setCustomValue(QLatin1String("CurrentFilter"),
- d->currentFilter);
- }
+ if (d->autoSaveFilter)
+ d->collectionHandler->setCustomValue("CurrentFilter"_L1, d->currentFilter);
emit currentFilterChanged(d->currentFilter);
}
/*!
- \obsolete
+ \deprecated
QHelpFilterEngine::filterData() should be used instead.
@@ -543,13 +497,12 @@ void QHelpEngineCore::setCurrentFilter(const QString &filterName)
QList<QStringList> QHelpEngineCore::filterAttributeSets(const QString &namespaceName) const
{
if (!d->setup())
- return QList<QStringList>();
-
+ return {};
return d->collectionHandler->filterAttributeSets(namespaceName);
}
/*!
- \obsolete
+ \deprecated
files() should be used instead.
@@ -566,13 +519,13 @@ QList<QUrl> QHelpEngineCore::files(const QString namespaceName,
return res;
QUrl url;
- url.setScheme(QLatin1String("qthelp"));
+ url.setScheme("qthelp"_L1);
url.setAuthority(namespaceName);
const QStringList &files = d->collectionHandler->files(
namespaceName, filterAttributes, extensionFilter);
for (const QString &file : files) {
- url.setPath(QLatin1String("/") + file);
+ url.setPath("/"_L1 + file);
res.append(url);
}
return res;
@@ -592,13 +545,13 @@ QList<QUrl> QHelpEngineCore::files(const QString namespaceName,
return res;
QUrl url;
- url.setScheme(QLatin1String("qthelp"));
+ url.setScheme("qthelp"_L1);
url.setAuthority(namespaceName);
const QStringList &files = d->collectionHandler->files(
namespaceName, filterName, extensionFilter);
for (const QString &file : files) {
- url.setPath(QLatin1String("/") + file);
+ url.setPath("/"_L1 + file);
res.append(url);
}
return res;
@@ -643,8 +596,7 @@ QUrl QHelpEngineCore::findFile(const QUrl &url) const
QByteArray QHelpEngineCore::fileData(const QUrl &url) const
{
if (!d->setup())
- return QByteArray();
-
+ return {};
return d->collectionHandler->fileData(url);
}
@@ -657,9 +609,8 @@ QByteArray QHelpEngineCore::fileData(const QUrl &url) const
*/
QList<QHelpLink> QHelpEngineCore::documentsForIdentifier(const QString &id) const
{
- return documentsForIdentifier(id, d->usesFilterEngine
- ? d->filterEngine->activeFilter()
- : d->currentFilter);
+ return documentsForIdentifier(
+ id, d->usesFilterEngine ? d->filterEngine->activeFilter() : d->currentFilter);
}
/*!
@@ -673,11 +624,10 @@ QList<QHelpLink> QHelpEngineCore::documentsForIdentifier(const QString &id) cons
QList<QHelpLink> QHelpEngineCore::documentsForIdentifier(const QString &id, const QString &filterName) const
{
if (!d->setup())
- return QList<QHelpLink>();
+ return {};
if (d->usesFilterEngine)
return d->collectionHandler->documentsForIdentifier(id, filterName);
-
return d->collectionHandler->documentsForIdentifier(id, filterAttributes(filterName));
}
@@ -690,9 +640,8 @@ QList<QHelpLink> QHelpEngineCore::documentsForIdentifier(const QString &id, cons
*/
QList<QHelpLink> QHelpEngineCore::documentsForKeyword(const QString &keyword) const
{
- return documentsForKeyword(keyword, d->usesFilterEngine
- ? d->filterEngine->activeFilter()
- : d->currentFilter);
+ return documentsForKeyword(
+ keyword, d->usesFilterEngine ? d->filterEngine->activeFilter() : d->currentFilter);
}
/*!
@@ -706,11 +655,10 @@ QList<QHelpLink> QHelpEngineCore::documentsForKeyword(const QString &keyword) co
QList<QHelpLink> QHelpEngineCore::documentsForKeyword(const QString &keyword, const QString &filterName) const
{
if (!d->setup())
- return QList<QHelpLink>();
+ return {};
if (d->usesFilterEngine)
return d->collectionHandler->documentsForKeyword(keyword, filterName);
-
return d->collectionHandler->documentsForKeyword(keyword, filterAttributes(filterName));
}
@@ -737,7 +685,7 @@ bool QHelpEngineCore::removeCustomValue(const QString &key)
QVariant QHelpEngineCore::customValue(const QString &key, const QVariant &defaultValue) const
{
if (!d->setup())
- return QVariant();
+ return {};
return d->collectionHandler->customValue(key, defaultValue);
}
@@ -765,11 +713,11 @@ bool QHelpEngineCore::setCustomValue(const QString &key, const QVariant &value)
QVariant QHelpEngineCore::metaData(const QString &documentationFileName,
const QString &name)
{
- QHelpDBReader reader(documentationFileName, QLatin1String("GetMetaData"), nullptr);
+ QHelpDBReader reader(documentationFileName, "GetMetaData"_L1, nullptr);
if (reader.init())
return reader.metaData(name);
- return QVariant();
+ return {};
}
/*!
@@ -826,4 +774,165 @@ bool QHelpEngineCore::usesFilterEngine() const
return d->usesFilterEngine;
}
+#if QT_CONFIG(future)
+static QUrl constructUrl(const QString &namespaceName, const QString &folderName,
+ const QString &relativePath)
+{
+ const int idx = relativePath.indexOf(u'#');
+ const QString &rp = idx < 0 ? relativePath : relativePath.left(idx);
+ const QString anchor = idx < 0 ? QString() : relativePath.mid(idx + 1);
+ return QHelpCollectionHandler::buildQUrl(namespaceName, folderName, rp, anchor);
+}
+
+using ContentProviderResult = QList<QHelpCollectionHandler::ContentsData>;
+using ContentProvider = std::function<ContentProviderResult(const QString &)>;
+using ContentResult = std::shared_ptr<QHelpContentItem>;
+
+// This trick is needed because the c'tor of QHelpContentItem is private.
+QHelpContentItem *createContentItem(const QString &name = {}, const QUrl &link = {},
+ QHelpContentItem *parent = {})
+{
+ return new QHelpContentItem(name, link, parent);
+}
+
+static void provideContentHelper(QPromise<ContentResult> &promise, const ContentProvider &provider,
+ const QString &collectionFile)
+{
+ ContentResult rootItem(createContentItem());
+ const ContentProviderResult result = provider(collectionFile);
+ for (const auto &contentsData : result) {
+ const QString namespaceName = contentsData.namespaceName;
+ const QString folderName = contentsData.folderName;
+ for (const QByteArray &contents : contentsData.contentsList) {
+ if (promise.isCanceled())
+ return;
+
+ if (contents.isEmpty())
+ continue;
+
+ QList<QHelpContentItem *> stack;
+ QDataStream s(contents);
+ while (true) {
+ int depth = 0;
+ QString link, title;
+ s >> depth;
+ s >> link;
+ s >> title;
+ if (title.isEmpty())
+ break;
+
+// The example input (depth, link, title):
+//
+// 0 "graphicaleffects5.html" "Qt 5 Compatibility APIs: Qt Graphical Effects"
+// 1 "qtgraphicaleffects5-index.html" "QML Types"
+// 2 "qml-qt5compat-graphicaleffects-blend.html" "Blend Type Reference"
+// 3 "qml-qt5compat-graphicaleffects-blend-members.html" "List of all members"
+// 2 "qml-qt5compat-graphicaleffects-brightnesscontrast.html" "BrightnessContrast Type Reference"
+//
+// Thus, the valid order of depths is:
+// 1. Whenever the item's depth is < 0, we insert the item as its depth is 0.
+// 2. The first item's depth must be 0, otherwise we insert the item as its depth is 0.
+// 3. When the previous depth was N, the next depth must be in range [0, N+1] inclusively.
+// If next item's depth is M > N+1, we insert the item as its depth is N+1.
+
+ if (depth <= 0) {
+ stack.clear();
+ } else if (depth < stack.size()) {
+ stack = stack.sliced(0, depth);
+ } else if (depth > stack.size()) {
+ // Fill the gaps with the last item from the stack (or with the root).
+ // This branch handles the case when depths are broken, e.g. 0, 2, 2, 1.
+ // In this case, the 1st item is a root, and 2nd - 4th are all direct
+ // children of the 1st.
+ QHelpContentItem *substituteItem =
+ stack.isEmpty() ? rootItem.get() : stack.constLast();
+ while (depth > stack.size())
+ stack.append(substituteItem);
+ }
+
+ const QUrl url = constructUrl(namespaceName, folderName, link);
+ QHelpContentItem *parent = stack.isEmpty() ? rootItem.get() : stack.constLast();
+ stack.push_back(createContentItem(title, url, parent));
+ }
+ }
+ }
+ promise.addResult(rootItem);
+}
+
+static ContentProvider contentProviderFromFilterEngine(const QString &filter)
+{
+ return [filter](const QString &collectionFile) -> ContentProviderResult {
+ QHelpCollectionHandler collectionHandler(collectionFile);
+ if (!collectionHandler.openCollectionFile())
+ return {};
+ return collectionHandler.contentsForFilter(filter);
+ };
+}
+
+static ContentProvider contentProviderFromAttributes(const QStringList &attributes)
+{
+ return [attributes](const QString &collectionFile) -> ContentProviderResult {
+ QHelpCollectionHandler collectionHandler(collectionFile);
+ if (!collectionHandler.openCollectionFile())
+ return {};
+ return collectionHandler.contentsForFilter(attributes);
+ };
+}
+
+QFuture<ContentResult> QHelpEngineCore::provideContentForCurrentFilter() const
+{
+ const ContentProvider provider = usesFilterEngine()
+ ? contentProviderFromFilterEngine(filterEngine()->activeFilter())
+ : contentProviderFromAttributes(filterAttributes(d->currentFilter));
+ return QtConcurrent::run(provideContentHelper, provider, collectionFile());
+}
+
+QFuture<ContentResult> QHelpEngineCore::provideContent(const QString &filter) const
+{
+ const ContentProvider provider = usesFilterEngine()
+ ? contentProviderFromFilterEngine(filter)
+ : contentProviderFromAttributes(filterAttributes(filter));
+ return QtConcurrent::run(provideContentHelper, provider, collectionFile());
+}
+
+using IndexProvider = std::function<QStringList(const QString &)>;
+using IndexResult = QStringList;
+
+static IndexProvider indexProviderFromFilterEngine(const QString &filter)
+{
+ return [filter](const QString &collectionFile) -> IndexResult {
+ QHelpCollectionHandler collectionHandler(collectionFile);
+ if (!collectionHandler.openCollectionFile())
+ return {};
+ return collectionHandler.indicesForFilter(filter);
+ };
+}
+
+static IndexProvider indexProviderFromAttributes(const QStringList &attributes)
+{
+ return [attributes](const QString &collectionFile) -> IndexResult {
+ QHelpCollectionHandler collectionHandler(collectionFile);
+ if (!collectionHandler.openCollectionFile())
+ return {};
+ return collectionHandler.indicesForFilter(attributes);
+ };
+}
+
+QFuture<IndexResult> QHelpEngineCore::provideIndexForCurrentFilter() const
+{
+ const IndexProvider provider = usesFilterEngine()
+ ? indexProviderFromFilterEngine(filterEngine()->activeFilter())
+ : indexProviderFromAttributes(filterAttributes(d->currentFilter));
+ return QtConcurrent::run(std::move(provider), collectionFile());
+}
+
+QFuture<IndexResult> QHelpEngineCore::provideIndex(const QString &filter) const
+{
+ const IndexProvider provider = usesFilterEngine()
+ ? indexProviderFromFilterEngine(filter)
+ : indexProviderFromAttributes(filterAttributes(filter));
+ return QtConcurrent::run(std::move(provider), collectionFile());
+}
+#endif
+
QT_END_NAMESPACE
diff --git a/src/assistant/help/qhelpenginecore.h b/src/assistant/help/qhelpenginecore.h
index dc4cd7695..aa0828f81 100644
--- a/src/assistant/help/qhelpenginecore.h
+++ b/src/assistant/help/qhelpenginecore.h
@@ -1,51 +1,19 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QHELPENGINECORE_H
#define QHELPENGINECORE_H
#include <QtHelp/qhelp_global.h>
+#include <QtHelp/qhelpcontentitem.h>
-#include <QtCore/QUrl>
-#include <QtCore/QMap>
-#include <QtCore/QObject>
-#include <QtCore/QVariant>
+#if QT_CONFIG(future)
+#include <QtCore/qfuture.h>
+#endif
+
+#include <QtCore/qobject.h>
+#include <QtCore/qurl.h>
+#include <QtCore/qvariant.h>
QT_BEGIN_NAMESPACE
@@ -86,7 +54,7 @@ public:
QStringList registeredDocumentations() const;
QByteArray fileData(const QUrl &url) const;
-#if QT_DEPRECATED_SINCE(5,13)
+// #if QT_DEPRECATED_SINCE(5,13)
QStringList customFilters() const;
bool removeCustomFilter(const QString &filterName);
bool addCustomFilter(const QString &filterName,
@@ -99,14 +67,12 @@ public:
void setCurrentFilter(const QString &filterName);
QList<QStringList> filterAttributeSets(const QString &namespaceName) const;
- QList<QUrl> files(const QString namespaceName,
- const QStringList &filterAttributes,
- const QString &extensionFilter = QString());
-#endif
+ QList<QUrl> files(const QString namespaceName, const QStringList &filterAttributes,
+ const QString &extensionFilter = {});
+// #endif
- QList<QUrl> files(const QString namespaceName,
- const QString &filterName,
- const QString &extensionFilter = QString());
+ QList<QUrl> files(const QString namespaceName, const QString &filterName,
+ const QString &extensionFilter = {});
QUrl findFile(const QUrl &url) const;
QList<QHelpLink> documentsForIdentifier(const QString &id) const;
@@ -115,12 +81,10 @@ public:
QList<QHelpLink> documentsForKeyword(const QString &keyword, const QString &filterName) const;
bool removeCustomValue(const QString &key);
- QVariant customValue(const QString &key,
- const QVariant &defaultValue = QVariant()) const;
+ QVariant customValue(const QString &key, const QVariant &defaultValue = {}) const;
bool setCustomValue(const QString &key, const QVariant &value);
- static QVariant metaData(const QString &documentationFileName,
- const QString &name);
+ static QVariant metaData(const QString &documentationFileName, const QString &name);
QString error() const;
@@ -130,23 +94,31 @@ public:
void setUsesFilterEngine(bool uses);
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<QStringList> provideIndexForCurrentFilter() const;
+ QFuture<QStringList> provideIndex(const QString &filter) const;
+#endif
+
Q_SIGNALS:
void setupStarted();
void setupFinished();
void warning(const QString &msg);
-#if QT_DEPRECATED_SINCE(5,13)
+// #if QT_DEPRECATED_SINCE(5,13)
void currentFilterChanged(const QString &newFilter);
void readersAboutToBeInvalidated();
-#endif
+// #endif
protected:
- QHelpEngineCore(QHelpEngineCorePrivate *helpEngineCorePrivate,
- QObject *parent);
+#if QT_DEPRECATED_SINCE(6, 8)
+ QHelpEngineCore(QHelpEngineCorePrivate *helpEngineCorePrivate, QObject *parent);
+#endif
private:
QHelpEngineCorePrivate *d;
- friend class QHelpEngineCorePrivate;
};
QT_END_NAMESPACE
diff --git a/src/assistant/help/qhelpfilterdata.cpp b/src/assistant/help/qhelpfilterdata.cpp
index b90aeb6c8..2baa7ce3c 100644
--- a/src/assistant/help/qhelpfilterdata.cpp
+++ b/src/assistant/help/qhelpfilterdata.cpp
@@ -1,44 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 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 "qhelpfilterdata.h"
-#include <QtCore/QVersionNumber>
+
+#include <QtCore/qversionnumber.h>
QT_BEGIN_NAMESPACE
@@ -50,8 +15,7 @@ public:
: QSharedData(other)
, m_components(other.m_components)
, m_versions(other.m_versions)
- { }
- ~QHelpFilterDataPrivate() = default;
+ {}
QStringList m_components;
QList<QVersionNumber> m_versions;
@@ -75,10 +39,7 @@ public:
/*!
Constructs the empty filter.
*/
-QHelpFilterData::QHelpFilterData()
- : d(new QHelpFilterDataPrivate)
-{
-}
+QHelpFilterData::QHelpFilterData() : d(new QHelpFilterDataPrivate) { }
/*!
Constructs a copy of \a other.
@@ -100,7 +61,6 @@ QHelpFilterData::~QHelpFilterData() = default;
*/
QHelpFilterData &QHelpFilterData::operator=(const QHelpFilterData &) = default;
-
/*!
Move-assigns \a other to this QHelpFilterData instance.
*/
@@ -115,8 +75,7 @@ QHelpFilterData &QHelpFilterData::operator=(QHelpFilterData &&) = default;
bool QHelpFilterData::operator==(const QHelpFilterData &other) const
{
- return (d->m_components == other.d->m_components &&
- d->m_versions == other.d->m_versions);
+ return (d->m_components == other.d->m_components && d->m_versions == other.d->m_versions);
}
/*!
diff --git a/src/assistant/help/qhelpfilterdata.h b/src/assistant/help/qhelpfilterdata.h
index b51ee495b..aaf35a2df 100644
--- a/src/assistant/help/qhelpfilterdata.h
+++ b/src/assistant/help/qhelpfilterdata.h
@@ -1,48 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 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 QHELPFILTERDATA_H
#define QHELPFILTERDATA_H
#include <QtHelp/qhelp_global.h>
-#include <QtCore/QSharedDataPointer>
+#include <QtCore/qshareddata.h>
QT_BEGIN_NAMESPACE
diff --git a/src/assistant/help/qhelpfilterengine.cpp b/src/assistant/help/qhelpfilterengine.cpp
index b465d6c91..dc139bffd 100644
--- a/src/assistant/help/qhelpfilterengine.cpp
+++ b/src/assistant/help/qhelpfilterengine.cpp
@@ -1,50 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 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 "qhelpfilterengine.h"
+#include "qhelpcollectionhandler_p.h"
#include "qhelpenginecore.h"
#include "qhelpfilterdata.h"
-#include "qhelpdbreader_p.h"
-#include "qhelpcollectionhandler_p.h"
-#include <QtCore/QThread>
-#include <QtCore/QVersionNumber>
+#include <QtCore/qthread.h>
+#include <QtCore/qversionnumber.h>
QT_BEGIN_NAMESPACE
@@ -81,7 +44,7 @@ bool QHelpFilterEnginePrivate::setup()
}
const QString filter = m_collectionHandler->customValue(
- QLatin1String(ActiveFilter), QString()).toString();
+ QLatin1StringView(ActiveFilter), QString()).toString();
if (!filter.isEmpty() && m_collectionHandler->filters().contains(filter))
m_currentFilter = filter;
@@ -160,7 +123,7 @@ QHelpFilterEngine::~QHelpFilterEngine()
void QHelpFilterEngine::setCollectionHandler(QHelpCollectionHandler *collectionHandler)
{
d->m_collectionHandler = collectionHandler;
- d->m_currentFilter = QString();
+ d->m_currentFilter.clear();
d->m_needsSetup = true;
}
@@ -171,7 +134,7 @@ void QHelpFilterEngine::setCollectionHandler(QHelpCollectionHandler *collectionH
QMap<QString, QString> QHelpFilterEngine::namespaceToComponent() const
{
if (!d->setup())
- return QMap<QString, QString>();
+ return {};
return d->m_collectionHandler->namespaceToComponent();
}
@@ -182,8 +145,7 @@ QMap<QString, QString> QHelpFilterEngine::namespaceToComponent() const
QMap<QString, QVersionNumber> QHelpFilterEngine::namespaceToVersion() const
{
if (!d->setup())
- return QMap<QString, QVersionNumber>();
-
+ return {};
return d->m_collectionHandler->namespaceToVersion();
}
@@ -193,7 +155,7 @@ QMap<QString, QVersionNumber> QHelpFilterEngine::namespaceToVersion() const
QStringList QHelpFilterEngine::filters() const
{
if (!d->setup())
- return QStringList();
+ return {};
return d->m_collectionHandler->filters();
}
@@ -204,7 +166,7 @@ QStringList QHelpFilterEngine::filters() const
QStringList QHelpFilterEngine::availableComponents() const
{
if (!d->setup())
- return QStringList();
+ return {};
return d->m_collectionHandler->availableComponents();
}
@@ -217,7 +179,7 @@ QStringList QHelpFilterEngine::availableComponents() const
QList<QVersionNumber> QHelpFilterEngine::availableVersions() const
{
if (!d->setup())
- return QList<QVersionNumber>();
+ return {};
return d->m_collectionHandler->availableVersions();
}
@@ -227,7 +189,7 @@ QList<QVersionNumber> QHelpFilterEngine::availableVersions() const
QHelpFilterData QHelpFilterEngine::filterData(const QString &filterName) const
{
if (!d->setup())
- return QHelpFilterData();
+ return {};
return d->m_collectionHandler->filterData(filterName);
}
@@ -264,7 +226,7 @@ bool QHelpFilterEngine::removeFilter(const QString &filterName)
QString QHelpFilterEngine::activeFilter() const
{
if (!d->setup())
- return QString();
+ return {};
return d->m_currentFilter;
}
@@ -286,11 +248,8 @@ bool QHelpFilterEngine::setActiveFilter(const QString &filterName)
return false;
d->m_currentFilter = filterName;
- d->m_collectionHandler->setCustomValue(QLatin1String(ActiveFilter),
- d->m_currentFilter);
-
+ d->m_collectionHandler->setCustomValue(QLatin1StringView(ActiveFilter), d->m_currentFilter);
emit filterActivated(d->m_currentFilter);
-
return true;
}
@@ -301,7 +260,7 @@ bool QHelpFilterEngine::setActiveFilter(const QString &filterName)
QStringList QHelpFilterEngine::namespacesForFilter(const QString &filterName) const
{
if (!d->setup())
- return QStringList();
+ return {};
return d->m_collectionHandler->namespacesForFilter(filterName);
}
@@ -329,7 +288,7 @@ QStringList QHelpFilterEngine::indices() const
QStringList QHelpFilterEngine::indices(const QString &filterName) const
{
if (!d->setup())
- return QStringList();
+ return {};
return d->m_collectionHandler->indicesForFilter(filterName);
}
diff --git a/src/assistant/help/qhelpfilterengine.h b/src/assistant/help/qhelpfilterengine.h
index d06d18b04..a16a20483 100644
--- a/src/assistant/help/qhelpfilterengine.h
+++ b/src/assistant/help/qhelpfilterengine.h
@@ -1,59 +1,22 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 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 QHELPFILTERENGINE_H
#define QHELPFILTERENGINE_H
#include <QtHelp/qhelp_global.h>
-#include <QtCore/QObject>
+#include <QtCore/qobject.h>
QT_BEGIN_NAMESPACE
-template <class K, class T>
-class QMap;
-class QVersionNumber;
-
class QHelpCollectionHandler;
class QHelpEngineCore;
class QHelpFilterData;
class QHelpFilterEnginePrivate;
+template <class K, class T>
+class QMap;
+class QVersionNumber;
class QHELP_EXPORT QHelpFilterEngine : public QObject
{
@@ -91,7 +54,6 @@ private:
void setCollectionHandler(QHelpCollectionHandler *collectionHandler);
QHelpFilterEnginePrivate *d;
- friend class QHelpEngineCore;
friend class QHelpEngineCorePrivate;
};
diff --git a/src/assistant/help/qhelpfiltersettings.cpp b/src/assistant/help/qhelpfiltersettings.cpp
deleted file mode 100644
index 206692179..000000000
--- a/src/assistant/help/qhelpfiltersettings.cpp
+++ /dev/null
@@ -1,170 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qhelpfiltersettings_p.h"
-#include "qhelpfilterdata.h"
-
-#include <QtCore/QMap>
-#include <QtHelp/QHelpFilterEngine>
-
-QT_BEGIN_NAMESPACE
-
-class QHelpFilterSettingsPrivate : public QSharedData
-{
-public:
- QHelpFilterSettingsPrivate() = default;
- QHelpFilterSettingsPrivate(const QHelpFilterSettingsPrivate &other) = default;
- ~QHelpFilterSettingsPrivate() = default;
-
- QMap<QString, QHelpFilterData> m_filterToData;
- QString m_currentFilter;
-};
-
-QHelpFilterSettings::QHelpFilterSettings()
- : d(new QHelpFilterSettingsPrivate)
-{
-}
-
-QHelpFilterSettings::QHelpFilterSettings(const QHelpFilterSettings &) = default;
-
-QHelpFilterSettings::QHelpFilterSettings(QHelpFilterSettings &&) = default;
-
-QHelpFilterSettings::~QHelpFilterSettings() = default;
-
-QHelpFilterSettings &QHelpFilterSettings::operator=(const QHelpFilterSettings &) = default;
-
-QHelpFilterSettings &QHelpFilterSettings::operator=(QHelpFilterSettings &&) = default;
-
-void QHelpFilterSettings::setFilter(const QString &filterName,
- const QHelpFilterData &filterData)
-{
- d->m_filterToData.insert(filterName, filterData);
-}
-
-void QHelpFilterSettings::removeFilter(const QString &filterName)
-{
- d->m_filterToData.remove(filterName);
-}
-
-QStringList QHelpFilterSettings::filterNames() const
-{
- return d->m_filterToData.keys();
-}
-
-QHelpFilterData QHelpFilterSettings::filterData(const QString &filterName) const
-{
- return d->m_filterToData.value(filterName);
-}
-
-QMap<QString, QHelpFilterData> QHelpFilterSettings::filters() const
-{
- return d->m_filterToData;
-}
-
-void QHelpFilterSettings::setCurrentFilter(const QString &filterName)
-{
- d->m_currentFilter = filterName;
-}
-
-QString QHelpFilterSettings::currentFilter() const
-{
- return d->m_currentFilter;
-}
-
-QHelpFilterSettings QHelpFilterSettings::readSettings(const QHelpFilterEngine *filterEngine)
-{
- QHelpFilterSettings filterSettings;
-
- const QStringList allFilters = filterEngine->filters();
- for (const QString &filter : allFilters)
- filterSettings.setFilter(filter, filterEngine->filterData(filter));
-
- filterSettings.setCurrentFilter(filterEngine->activeFilter());
-
- return filterSettings;
-}
-
-static QMap<QString, QHelpFilterData> subtract(const QMap<QString, QHelpFilterData> &minuend,
- const QMap<QString, QHelpFilterData> &subtrahend)
-{
- QMap<QString, QHelpFilterData> result = minuend;
-
- for (auto itSubtrahend = subtrahend.cbegin(); itSubtrahend != subtrahend.cend(); ++itSubtrahend) {
- auto itResult = result.find(itSubtrahend.key());
- if (itResult != result.end() && itSubtrahend.value() == itResult.value())
- result.erase(itResult);
- }
-
- return result;
-}
-
-bool QHelpFilterSettings::applySettings(QHelpFilterEngine *filterEngine,
- const QHelpFilterSettings &settings)
-{
- bool changed = false;
- const QHelpFilterSettings oldSettings = readSettings(filterEngine);
-
- const QMap<QString, QHelpFilterData> filtersToRemove = subtract(
- oldSettings.filters(),
- settings.filters());
- const QMap<QString, QHelpFilterData> filtersToAdd = subtract(
- settings.filters(),
- oldSettings.filters());
-
- const QString &currentFilter = filterEngine->activeFilter();
-
- for (const QString &filter : filtersToRemove.keys()) {
- filterEngine->removeFilter(filter);
- if (currentFilter == filter && !filtersToAdd.contains(filter))
- filterEngine->setActiveFilter(QString());
- changed = true;
- }
-
- for (auto it = filtersToAdd.cbegin(); it != filtersToAdd.cend(); ++it) {
- filterEngine->setFilterData(it.key(), it.value());
- changed = true;
- }
-
- if (changed)
- filterEngine->setActiveFilter(settings.currentFilter());
-
- return changed;
-}
-
-QT_END_NAMESPACE
diff --git a/src/assistant/help/qhelpfiltersettings_p.h b/src/assistant/help/qhelpfiltersettings_p.h
deleted file mode 100644
index cf5622b6d..000000000
--- a/src/assistant/help/qhelpfiltersettings_p.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QHELPFILTERSETTINGS_H
-#define QHELPFILTERSETTINGS_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists for the convenience
-// of the help generator tools. This header file may change from version
-// to version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/QSharedDataPointer>
-
-QT_BEGIN_NAMESPACE
-
-template <class K, class T>
-class QMap;
-class QHelpFilterData;
-class QHelpFilterEngine;
-class QHelpFilterSettingsPrivate;
-
-class QHelpFilterSettings final
-{
-public:
- QHelpFilterSettings();
- QHelpFilterSettings(const QHelpFilterSettings &other);
- QHelpFilterSettings(QHelpFilterSettings &&other);
- ~QHelpFilterSettings();
-
- QHelpFilterSettings &operator=(const QHelpFilterSettings &other);
- QHelpFilterSettings &operator=(QHelpFilterSettings &&other);
-
- void swap(QHelpFilterSettings &other) noexcept
- { d.swap(other.d); }
-
- void setFilter(const QString &filterName, const QHelpFilterData &filterData);
- void removeFilter(const QString &filterName);
- QStringList filterNames() const;
- QHelpFilterData filterData(const QString &filterName) const;
- QMap<QString, QHelpFilterData> filters() const;
-
- void setCurrentFilter(const QString &filterName);
- QString currentFilter() const;
-
- static QHelpFilterSettings readSettings(const QHelpFilterEngine *filterEngine);
- static bool applySettings(QHelpFilterEngine *filterEngine, const QHelpFilterSettings &settings);
-
-private:
- QSharedDataPointer<QHelpFilterSettingsPrivate> d;
-};
-
-QT_END_NAMESPACE
-
-#endif // QHELPFILTERSETTINGS_H
diff --git a/src/assistant/help/qhelpfiltersettingswidget.cpp b/src/assistant/help/qhelpfiltersettingswidget.cpp
index c5f8ac29c..319111f6c 100644
--- a/src/assistant/help/qhelpfiltersettingswidget.cpp
+++ b/src/assistant/help/qhelpfiltersettingswidget.cpp
@@ -1,53 +1,94 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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 "qhelpfilterdata.h"
-#include "qhelpfiltersettings_p.h"
+#include "qfilternamedialog_p.h"
#include "qhelpfiltersettingswidget.h"
#include "ui_qhelpfiltersettingswidget.h"
-#include "qfilternamedialog_p.h"
-#include <QtWidgets/QMessageBox>
-#include <QtCore/QVersionNumber>
+#include <QtCore/qversionnumber.h>
+#include <QtHelp/qhelpfilterdata.h>
+#include <QtHelp/qhelpfilterengine.h>
+#include <QtWidgets/qmessagebox.h>
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
+class QHelpFilterSettings final
+{
+public:
+ void setFilter(const QString &filterName, const QHelpFilterData &filterData)
+ {
+ m_filterToData.insert(filterName, filterData);
+ }
+ void removeFilter(const QString &filterName) { m_filterToData.remove(filterName); }
+ QHelpFilterData filterData(const QString &filterName) const
+ {
+ return m_filterToData.value(filterName);
+ }
+ QMap<QString, QHelpFilterData> filters() const { return m_filterToData; }
+
+ void setCurrentFilter(const QString &filterName) { m_currentFilter = filterName; }
+ QString currentFilter() const { return m_currentFilter; }
+
+private:
+ QMap<QString, QHelpFilterData> m_filterToData;
+ QString m_currentFilter;
+};
+
+static QHelpFilterSettings readSettingsHelper(const QHelpFilterEngine *filterEngine)
+{
+ QHelpFilterSettings filterSettings;
+
+ const QStringList allFilters = filterEngine->filters();
+ for (const QString &filter : allFilters)
+ filterSettings.setFilter(filter, filterEngine->filterData(filter));
+
+ filterSettings.setCurrentFilter(filterEngine->activeFilter());
+ return filterSettings;
+}
+
+static QMap<QString, QHelpFilterData> subtract(const QMap<QString, QHelpFilterData> &minuend,
+ const QMap<QString, QHelpFilterData> &subtrahend)
+{
+ QMap<QString, QHelpFilterData> result = minuend;
+
+ for (auto itSubtrahend = subtrahend.cbegin(); itSubtrahend != subtrahend.cend(); ++itSubtrahend) {
+ auto itResult = result.find(itSubtrahend.key());
+ if (itResult != result.end() && itSubtrahend.value() == itResult.value())
+ result.erase(itResult);
+ }
+ return result;
+}
+
+static bool applySettingsHelper(QHelpFilterEngine *filterEngine, const QHelpFilterSettings &settings)
+{
+ bool changed = false;
+ const QHelpFilterSettings oldSettings = readSettingsHelper(filterEngine);
+
+ const auto filtersToRemove = subtract(oldSettings.filters(), settings.filters());
+ const auto filtersToAdd = subtract(settings.filters(), oldSettings.filters());
+
+ const QString &currentFilter = filterEngine->activeFilter();
+
+ for (auto it = filtersToRemove.cbegin(); it != filtersToRemove.cend(); ++it) {
+ filterEngine->removeFilter(it.key());
+ if (currentFilter == it.key() && !filtersToAdd.contains(it.key()))
+ filterEngine->setActiveFilter({});
+ changed = true;
+ }
+
+ for (auto it = filtersToAdd.cbegin(); it != filtersToAdd.cend(); ++it) {
+ filterEngine->setFilterData(it.key(), it.value());
+ changed = true;
+ }
+
+ if (changed)
+ filterEngine->setActiveFilter(settings.currentFilter());
+ return changed;
+}
+
static QStringList versionsToStringList(const QList<QVersionNumber> &versions)
{
QStringList versionList;
@@ -67,11 +108,11 @@ static QList<QVersionNumber> stringListToVersions(const QStringList &versionList
class QHelpFilterSettingsWidgetPrivate
{
QHelpFilterSettingsWidget *q_ptr;
- Q_DECLARE_PUBLIC(QHelpFilterSettingsWidget)
+ Q_DECLARE_PUBLIC(QHelpFilterSettingsWidget) // TODO: remove Q_DECLARE_PUBLIC
public:
QHelpFilterSettingsWidgetPrivate() = default;
- QHelpFilterSettings filterSettings() const;
+ QHelpFilterSettings filterSettings() const { return m_filterSettings; }
void setFilterSettings(const QHelpFilterSettings &settings);
void updateCurrentFilter();
@@ -80,11 +121,9 @@ public:
void addFilterClicked();
void renameFilterClicked();
void removeFilterClicked();
- void addFilter(const QString &filterName,
- const QHelpFilterData &filterData = QHelpFilterData());
+ void addFilter(const QString &filterName, const QHelpFilterData &filterData = {});
void removeFilter(const QString &filterName);
- QString getUniqueFilterName(const QString &windowTitle,
- const QString &initialFilterName);
+ QString getUniqueFilterName(const QString &windowTitle, const QString &initialFilterName);
QString suggestedNewFilterName(const QString &initialFilterName) const;
QMap<QString, QListWidgetItem *> m_filterToItem;
@@ -114,7 +153,9 @@ void QHelpFilterSettingsWidgetPrivate::setFilterSettings(const QHelpFilterSettin
m_itemToFilter.clear();
m_filterToItem.clear();
- for (const QString &filterName : m_filterSettings.filterNames()) {
+ const auto filters = m_filterSettings.filters();
+ for (auto it = filters.cbegin(); it != filters.cend(); ++it) {
+ const QString &filterName = it.key();
QListWidgetItem *item = new QListWidgetItem(filterName);
m_ui.filterWidget->addItem(item);
m_itemToFilter.insert(item, filterName);
@@ -129,11 +170,6 @@ void QHelpFilterSettingsWidgetPrivate::setFilterSettings(const QHelpFilterSettin
updateCurrentFilter();
}
-QHelpFilterSettings QHelpFilterSettingsWidgetPrivate::filterSettings() const
-{
- return m_filterSettings;
-}
-
void QHelpFilterSettingsWidgetPrivate::updateCurrentFilter()
{
const QString &currentFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
@@ -209,17 +245,15 @@ void QHelpFilterSettingsWidgetPrivate::removeFilterClicked()
return;
if (QMessageBox::question(q, QHelpFilterSettingsWidget::tr("Remove Filter"),
- QHelpFilterSettingsWidget::tr("Are you sure you want to remove the \"%1\" filter?")
- .arg(currentFilter),
- QMessageBox::Yes | QMessageBox::No)
- != QMessageBox::Yes) {
+ QHelpFilterSettingsWidget::tr("Are you sure you want to remove the \"%1\" filter?")
+ .arg(currentFilter), QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes) {
return;
}
removeFilter(currentFilter);
if (m_filterSettings.currentFilter() == currentFilter)
- m_filterSettings.setCurrentFilter(QString());
+ m_filterSettings.setCurrentFilter({});
}
void QHelpFilterSettingsWidgetPrivate::addFilter(const QString &filterName,
@@ -241,7 +275,6 @@ void QHelpFilterSettingsWidgetPrivate::removeFilter(const QString &filterName)
m_itemToFilter.remove(item);
m_filterToItem.remove(filterName);
delete item;
-
m_filterSettings.removeFilter(filterName);
}
@@ -251,39 +284,32 @@ QString QHelpFilterSettingsWidgetPrivate::getUniqueFilterName(const QString &win
Q_Q(QHelpFilterSettingsWidget);
QString newFilterName = initialFilterName;
- while (1) {
+ while (true) {
QFilterNameDialog dialog(q);
dialog.setWindowTitle(windowTitle);
dialog.setFilterName(newFilterName);
if (dialog.exec() == QDialog::Rejected)
- return QString();
+ return {};
newFilterName = dialog.filterName();
if (!m_filterToItem.contains(newFilterName))
break;
if (QMessageBox::warning(q, QHelpFilterSettingsWidget::tr("Filter Exists"),
- QHelpFilterSettingsWidget::tr("The filter \"%1\" already exists.")
- .arg(newFilterName),
- QMessageBox::Retry | QMessageBox::Cancel)
- == QMessageBox::Cancel) {
- return QString();
+ QHelpFilterSettingsWidget::tr("The filter \"%1\" already exists.").arg(newFilterName),
+ QMessageBox::Retry | QMessageBox::Cancel) == QMessageBox::Cancel) {
+ return {};
}
}
-
return newFilterName;
}
QString QHelpFilterSettingsWidgetPrivate::suggestedNewFilterName(const QString &initialFilterName) const
{
QString newFilterName = initialFilterName;
-
int counter = 1;
- while (m_filterToItem.contains(newFilterName)) {
- newFilterName = initialFilterName + QLatin1Char(' ')
- + QString::number(++counter);
- }
-
+ while (m_filterToItem.contains(newFilterName))
+ newFilterName = initialFilterName + u' ' + QString::number(++counter);
return newFilterName;
}
@@ -319,22 +345,22 @@ QHelpFilterSettingsWidget::QHelpFilterSettingsWidget(QWidget *parent)
d->m_ui.setupUi(this);
// TODO: make resources configurable
- QString resourcePath = QLatin1String(":/qt-project.org/assistant/images/");
+ QString resourcePath = ":/qt-project.org/assistant/images/"_L1;
#ifdef Q_OS_MACOS
- resourcePath.append(QLatin1String("mac"));
+ resourcePath.append("mac"_L1);
#else
- resourcePath.append(QLatin1String("win"));
+ resourcePath.append("win"_L1);
#endif
- d->m_ui.addButton->setIcon(QIcon(resourcePath + QLatin1String("/plus.png")));
- d->m_ui.removeButton->setIcon(QIcon(resourcePath + QLatin1String("/minus.png")));
+ d->m_ui.addButton->setIcon(QIcon(resourcePath + "/plus.png"_L1));
+ d->m_ui.removeButton->setIcon(QIcon(resourcePath + "/minus.png"_L1));
connect(d->m_ui.componentWidget, &QOptionsWidget::optionSelectionChanged,
- [this](const QStringList &options) {
+ this, [this](const QStringList &options) {
Q_D(QHelpFilterSettingsWidget);
d->componentsChanged(options);
});
connect(d->m_ui.versionWidget, &QOptionsWidget::optionSelectionChanged,
- [this](const QStringList &options) {
+ this, [this](const QStringList &options) {
Q_D(QHelpFilterSettingsWidget);
d->versionsChanged(options);
});
@@ -344,24 +370,21 @@ QHelpFilterSettingsWidget::QHelpFilterSettingsWidget(QWidget *parent)
d->updateCurrentFilter();
});
connect(d->m_ui.filterWidget, &QListWidget::itemDoubleClicked,
- [this](QListWidgetItem *) {
+ this, [this](QListWidgetItem *) {
Q_D(QHelpFilterSettingsWidget);
d->renameFilterClicked();
});
// TODO: repeat these actions on context menu
- connect(d->m_ui.addButton, &QAbstractButton::clicked,
- [this]() {
+ connect(d->m_ui.addButton, &QAbstractButton::clicked, this, [this] {
Q_D(QHelpFilterSettingsWidget);
d->addFilterClicked();
});
- connect(d->m_ui.renameButton, &QAbstractButton::clicked,
- [this]() {
+ connect(d->m_ui.renameButton, &QAbstractButton::clicked, this, [this] {
Q_D(QHelpFilterSettingsWidget);
d->renameFilterClicked();
});
- connect(d->m_ui.removeButton, &QAbstractButton::clicked,
- [this]() {
+ connect(d->m_ui.removeButton, &QAbstractButton::clicked, this, [this] {
Q_D(QHelpFilterSettingsWidget);
d->removeFilterClicked();
});
@@ -406,7 +429,7 @@ void QHelpFilterSettingsWidget::setAvailableVersions(const QList<QVersionNumber>
void QHelpFilterSettingsWidget::readSettings(const QHelpFilterEngine *filterEngine)
{
Q_D(QHelpFilterSettingsWidget);
- const QHelpFilterSettings settings = QHelpFilterSettings::readSettings(filterEngine);
+ const QHelpFilterSettings settings = readSettingsHelper(filterEngine);
d->setFilterSettings(settings);
}
@@ -418,7 +441,7 @@ void QHelpFilterSettingsWidget::readSettings(const QHelpFilterEngine *filterEngi
bool QHelpFilterSettingsWidget::applySettings(QHelpFilterEngine *filterEngine) const
{
Q_D(const QHelpFilterSettingsWidget);
- return QHelpFilterSettings::applySettings(filterEngine, d->filterSettings());
+ return applySettingsHelper(filterEngine, d->filterSettings());
}
QT_END_NAMESPACE
diff --git a/src/assistant/help/qhelpfiltersettingswidget.h b/src/assistant/help/qhelpfiltersettingswidget.h
index c3c77305f..136c4f703 100644
--- a/src/assistant/help/qhelpfiltersettingswidget.h
+++ b/src/assistant/help/qhelpfiltersettingswidget.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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 QHELPFILTERSETTINGSWIDGET_H
#define QHELPFILTERSETTINGSWIDGET_H
@@ -46,10 +10,9 @@
QT_BEGIN_NAMESPACE
-class QVersionNumber;
-
class QHelpFilterEngine;
class QHelpFilterSettingsWidgetPrivate;
+class QVersionNumber;
class QHELP_EXPORT QHelpFilterSettingsWidget : public QWidget
{
diff --git a/src/assistant/help/qhelpindexwidget.cpp b/src/assistant/help/qhelpindexwidget.cpp
index acda393fb..bd330de26 100644
--- a/src/assistant/help/qhelpindexwidget.cpp
+++ b/src/assistant/help/qhelpindexwidget.cpp
@@ -1,151 +1,68 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qhelpindexwidget.h"
#include "qhelpenginecore.h"
-#include "qhelpengine_p.h"
-#include "qhelpdbreader_p.h"
-#include "qhelpcollectionhandler_p.h"
+#include "qhelplink.h"
-#include <QtCore/QThread>
-#include <QtCore/QMutex>
-#include <QtHelp/QHelpLink>
-#include <QtWidgets/QListView>
-#include <QtWidgets/QHeaderView>
-
-#include <algorithm>
+#if QT_CONFIG(future)
+#include <QtCore/qfuturewatcher.h>
+#endif
QT_BEGIN_NAMESPACE
-class QHelpIndexProvider : public QThread
-{
-public:
- QHelpIndexProvider(QHelpEnginePrivate *helpEngine);
- ~QHelpIndexProvider() override;
- void collectIndices(const QString &customFilterName);
- void stopCollecting();
- QStringList indices() const;
-
-private:
- void run() override;
-
- QHelpEnginePrivate *m_helpEngine;
- QString m_currentFilter;
- QStringList m_filterAttributes;
- QStringList m_indices;
- mutable QMutex m_mutex;
-};
-
class QHelpIndexModelPrivate
{
-public:
- QHelpIndexModelPrivate(QHelpEnginePrivate *hE)
- : helpEngine(hE),
- indexProvider(new QHelpIndexProvider(helpEngine))
+#if QT_CONFIG(future)
+ using FutureProvider = std::function<QFuture<QStringList>()>;
+
+ struct WatcherDeleter
{
- }
+ void operator()(QFutureWatcherBase *watcher) {
+ watcher->disconnect();
+ watcher->cancel();
+ watcher->waitForFinished();
+ delete watcher;
+ }
+ };
+#endif
- QHelpEnginePrivate *helpEngine;
- QHelpIndexProvider *indexProvider;
- QStringList indices;
+public:
+#if QT_CONFIG(future)
+ void createIndex(const FutureProvider &futureProvider);
+#endif
+
+ QHelpIndexModel *q = nullptr;
+ QHelpEngineCore *helpEngine = nullptr;
+ QStringList indices = {};
+#if QT_CONFIG(future)
+ std::unique_ptr<QFutureWatcher<QStringList>, WatcherDeleter> watcher = {};
+#endif
};
-QHelpIndexProvider::QHelpIndexProvider(QHelpEnginePrivate *helpEngine)
- : QThread(helpEngine),
- m_helpEngine(helpEngine)
-{
-}
-
-QHelpIndexProvider::~QHelpIndexProvider()
-{
- stopCollecting();
-}
-
-void QHelpIndexProvider::collectIndices(const QString &customFilterName)
-{
- m_mutex.lock();
- m_currentFilter = customFilterName;
- m_filterAttributes = m_helpEngine->q->filterAttributes(customFilterName);
- m_mutex.unlock();
-
- if (isRunning())
- stopCollecting();
- start(LowPriority);
-}
-
-void QHelpIndexProvider::stopCollecting()
+#if QT_CONFIG(future)
+void QHelpIndexModelPrivate::createIndex(const FutureProvider &futureProvider)
{
- if (!isRunning())
- return;
- wait();
-}
-
-QStringList QHelpIndexProvider::indices() const
-{
- QMutexLocker lck(&m_mutex);
- return m_indices;
-}
-
-void QHelpIndexProvider::run()
-{
- m_mutex.lock();
- const QString currentFilter = m_currentFilter;
- const QStringList attributes = m_filterAttributes;
- const QString collectionFile = m_helpEngine->collectionHandler->collectionFile();
- m_indices = QStringList();
- m_mutex.unlock();
-
- if (collectionFile.isEmpty())
- return;
+ const bool wasRunning = bool(watcher);
+ watcher.reset(new QFutureWatcher<QStringList>);
+ QObject::connect(watcher.get(), &QFutureWatcherBase::finished, q, [this] {
+ if (!watcher->isCanceled()) {
+ indices = watcher->result();
+ q->filter({});
+ }
+ watcher.release()->deleteLater();
+ emit q->indexCreated();
+ });
+ watcher->setFuture(futureProvider());
- QHelpCollectionHandler collectionHandler(collectionFile);
- if (!collectionHandler.openCollectionFile())
+ if (wasRunning)
return;
- const QStringList result = m_helpEngine->usesFilterEngine
- ? collectionHandler.indicesForFilter(currentFilter)
- : collectionHandler.indicesForFilter(attributes);
-
- m_mutex.lock();
- m_indices = result;
- m_mutex.unlock();
+ indices.clear();
+ q->filter({});
+ emit q->indexCreationStarted();
}
+#endif
/*!
\class QHelpIndexModel
@@ -153,8 +70,6 @@ void QHelpIndexProvider::run()
\inmodule QtHelp
\brief The QHelpIndexModel class provides a model that
supplies index keywords to views.
-
-
*/
/*!
@@ -173,14 +88,10 @@ void QHelpIndexProvider::run()
This signal is emitted when the index has been created.
*/
-QHelpIndexModel::QHelpIndexModel(QHelpEnginePrivate *helpEngine)
+QHelpIndexModel::QHelpIndexModel(QHelpEngineCore *helpEngine)
: QStringListModel(helpEngine)
-{
- d = new QHelpIndexModelPrivate(helpEngine);
-
- connect(d->indexProvider, &QThread::finished,
- this, &QHelpIndexModel::insertIndices);
-}
+ , d(new QHelpIndexModelPrivate{this, helpEngine})
+{}
QHelpIndexModel::~QHelpIndexModel()
{
@@ -188,38 +99,43 @@ QHelpIndexModel::~QHelpIndexModel()
}
/*!
- Creates a new index by querying the help system for
- keywords for the specified \a customFilterName.
+ \since 6.8
+
+ Creates a new index by querying the help system for keywords for the current filter.
*/
-void QHelpIndexModel::createIndex(const QString &customFilterName)
+void QHelpIndexModel::createIndexForCurrentFilter()
{
- const bool running = d->indexProvider->isRunning();
- d->indexProvider->collectIndices(customFilterName);
- if (running)
- return;
-
- d->indices = QStringList();
- filter(QString());
- emit indexCreationStarted();
+#if QT_CONFIG(future)
+ d->createIndex([this] { return d->helpEngine->provideIndexForCurrentFilter(); });
+#endif
}
-void QHelpIndexModel::insertIndices()
+/*!
+ Creates a new index by querying the help system for
+ keywords for the specified custom \a filter name.
+*/
+void QHelpIndexModel::createIndex(const QString &filter)
{
- if (d->indexProvider->isRunning())
- return;
-
- d->indices = d->indexProvider->indices();
- filter(QString());
- emit indexCreated();
+#if QT_CONFIG(future)
+ d->createIndex([this, filter] { return d->helpEngine->provideIndex(filter); });
+#endif
}
+// TODO: Remove me
+void QHelpIndexModel::insertIndices()
+{}
+
/*!
Returns true if the index is currently built up, otherwise
false.
*/
bool QHelpIndexModel::isCreatingIndex() const
{
- return d->indexProvider->isRunning();
+#if QT_CONFIG(future)
+ return bool(d->watcher);
+#else
+ return false;
+#endif
}
/*!
@@ -229,7 +145,7 @@ bool QHelpIndexModel::isCreatingIndex() const
*/
QHelpEngineCore *QHelpIndexModel::helpEngine() const
{
- return d->helpEngine->q;
+ return d->helpEngine;
}
/*!
@@ -246,58 +162,47 @@ QModelIndex QHelpIndexModel::filter(const QString &filter, const QString &wildca
{
if (filter.isEmpty()) {
setStringList(d->indices);
- return index(-1, 0, QModelIndex());
+ return index(-1, 0, {});
}
- QStringList lst;
- int goodMatch = -1;
- int perfectMatch = -1;
-
- if (!wildcard.isEmpty()) {
- auto re = QRegularExpression::wildcardToRegularExpression(wildcard,
- QRegularExpression::UnanchoredWildcardConversion);
- const QRegularExpression regExp(re, QRegularExpression::CaseInsensitiveOption);
- for (const QString &index : qAsConst(d->indices)) {
- if (index.contains(regExp)) {
- lst.append(index);
+ using Checker = std::function<bool(const QString &)>;
+ const auto checkIndices = [this, filter](const Checker &checker) {
+ QStringList filteredList;
+ int goodMatch = -1;
+ int perfectMatch = -1;
+ for (const QString &index : std::as_const(d->indices)) {
+ if (checker(index)) {
+ filteredList.append(index);
if (perfectMatch == -1 && index.startsWith(filter, Qt::CaseInsensitive)) {
if (goodMatch == -1)
- goodMatch = lst.count() - 1;
- if (filter.length() == index.length()){
- perfectMatch = lst.count() - 1;
- }
+ goodMatch = filteredList.size() - 1;
+ if (filter.size() == index.size())
+ perfectMatch = filteredList.size() - 1;
} else if (perfectMatch > -1 && index == filter) {
- perfectMatch = lst.count() - 1;
- }
- }
- }
- } else {
- for (const QString &index : qAsConst(d->indices)) {
- if (index.contains(filter, Qt::CaseInsensitive)) {
- lst.append(index);
- if (perfectMatch == -1 && index.startsWith(filter, Qt::CaseInsensitive)) {
- if (goodMatch == -1)
- goodMatch = lst.count() - 1;
- if (filter.length() == index.length()){
- perfectMatch = lst.count() - 1;
- }
- } else if (perfectMatch > -1 && index == filter) {
- perfectMatch = lst.count() - 1;
+ perfectMatch = filteredList.size() - 1;
}
}
}
+ setStringList(filteredList);
+ return perfectMatch >= 0 ? perfectMatch : qMax(0, goodMatch);
+ };
+ int perfectMatch = -1;
+ if (!wildcard.isEmpty()) {
+ const auto re = QRegularExpression::wildcardToRegularExpression(wildcard,
+ QRegularExpression::UnanchoredWildcardConversion);
+ const QRegularExpression regExp(re, QRegularExpression::CaseInsensitiveOption);
+ perfectMatch = checkIndices([regExp](const QString &index) {
+ return index.contains(regExp);
+ });
+ } else {
+ perfectMatch = checkIndices([filter](const QString &index) {
+ return index.contains(filter, Qt::CaseInsensitive);
+ });
}
-
- if (perfectMatch == -1)
- perfectMatch = qMax(0, goodMatch);
-
- setStringList(lst);
- return index(perfectMatch, 0, QModelIndex());
+ return index(perfectMatch, 0, {});
}
-
-
/*!
\class QHelpIndexWidget
\inmodule QtHelp
@@ -310,7 +215,7 @@ QModelIndex QHelpIndexModel::filter(const QString &filter, const QString &wildca
\fn void QHelpIndexWidget::linkActivated(const QUrl &link,
const QString &keyword)
- \obsolete
+ \deprecated
Use documentActivated() instead.
@@ -320,19 +225,6 @@ QModelIndex QHelpIndexModel::filter(const QString &filter, const QString &wildca
*/
/*!
- \fn void QHelpIndexWidget::linksActivated(const QMap<QString, QUrl> &links,
- const QString &keyword)
-
- \obsolete
-
- Use documentsActivated() instead.
-
- This signal is emitted when the item representing the \a keyword
- is activated and the item has more than one link associated.
- The \a links consist of the document titles and their URLs.
-*/
-
-/*!
\fn void QHelpIndexWidget::documentActivated(const QHelpLink &document,
const QString &keyword)
@@ -355,12 +247,10 @@ QModelIndex QHelpIndexModel::filter(const QString &filter, const QString &wildca
*/
QHelpIndexWidget::QHelpIndexWidget()
- : QListView(nullptr)
{
setEditTriggers(QAbstractItemView::NoEditTriggers);
setUniformItemSizes(true);
- connect(this, &QAbstractItemView::activated,
- this, &QHelpIndexWidget::showLink);
+ connect(this, &QAbstractItemView::activated, this, &QHelpIndexWidget::showLink);
}
void QHelpIndexWidget::showLink(const QModelIndex &index)
@@ -376,8 +266,9 @@ void QHelpIndexWidget::showLink(const QModelIndex &index)
const QString name = v.isValid() ? v.toString() : QString();
const QList<QHelpLink> &docs = indexModel->helpEngine()->documentsForKeyword(name);
- if (docs.count() > 1) {
+ if (docs.size() > 1) {
emit documentsActivated(docs, name);
+#if QT_DEPRECATED_SINCE(5, 15)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
QMultiMap<QString, QUrl> links;
@@ -385,12 +276,15 @@ void QHelpIndexWidget::showLink(const QModelIndex &index)
links.insert(doc.title, doc.url);
emit linksActivated(links, name);
QT_WARNING_POP
+#endif
} else if (!docs.isEmpty()) {
emit documentActivated(docs.first(), name);
+#if QT_DEPRECATED_SINCE(5, 15)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
emit linkActivated(docs.first().url, name);
QT_WARNING_POP
+#endif
}
}
@@ -412,7 +306,7 @@ void QHelpIndexWidget::activateCurrentItem()
*/
void QHelpIndexWidget::filterIndices(const QString &filter, const QString &wildcard)
{
- QHelpIndexModel *indexModel = qobject_cast<QHelpIndexModel*>(model());
+ QHelpIndexModel *indexModel = qobject_cast<QHelpIndexModel *>(model());
if (!indexModel)
return;
const QModelIndex &idx = indexModel->filter(filter, wildcard);
diff --git a/src/assistant/help/qhelpindexwidget.h b/src/assistant/help/qhelpindexwidget.h
index e3ffcba80..c3518367b 100644
--- a/src/assistant/help/qhelpindexwidget.h
+++ b/src/assistant/help/qhelpindexwidget.h
@@ -1,56 +1,20 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QHELPINDEXWIDGET_H
#define QHELPINDEXWIDGET_H
#include <QtHelp/qhelp_global.h>
-#include <QtCore/QUrl>
-#include <QtCore/QStringListModel>
-#include <QtWidgets/QListView>
+#include <QtCore/qstringlistmodel.h>
+#include <QtCore/qurl.h>
-QT_BEGIN_NAMESPACE
+#include <QtWidgets/qlistview.h>
+QT_BEGIN_NAMESPACE
-class QHelpEnginePrivate;
class QHelpEngineCore;
+class QHelpEnginePrivate;
class QHelpIndexModelPrivate;
struct QHelpLink;
@@ -59,9 +23,9 @@ class QHELP_EXPORT QHelpIndexModel : public QStringListModel
Q_OBJECT
public:
+ void createIndexForCurrentFilter();
void createIndex(const QString &customFilterName);
- QModelIndex filter(const QString &filter,
- const QString &wildcard = QString());
+ QModelIndex filter(const QString &filter, const QString &wildcard = {});
bool isCreatingIndex() const;
QHelpEngineCore *helpEngine() const;
@@ -74,7 +38,7 @@ private Q_SLOTS:
void insertIndices();
private:
- QHelpIndexModel(QHelpEnginePrivate *helpEngine);
+ QHelpIndexModel(QHelpEngineCore *helpEngine);
~QHelpIndexModel();
QHelpIndexModelPrivate *d;
@@ -93,14 +57,11 @@ Q_SIGNALS:
QT_DEPRECATED_X("Use documentsActivated() instead")
void linksActivated(const QMultiMap<QString, QUrl> &links, const QString &keyword);
#endif
- void documentActivated(const QHelpLink &document,
- const QString &keyword);
- void documentsActivated(const QList<QHelpLink> &documents,
- const QString &keyword);
+ void documentActivated(const QHelpLink &document, const QString &keyword);
+ void documentsActivated(const QList<QHelpLink> &documents, const QString &keyword);
public Q_SLOTS:
- void filterIndices(const QString &filter,
- const QString &wildcard = QString());
+ void filterIndices(const QString &filter, const QString &wildcard = {});
void activateCurrentItem();
private Q_SLOTS:
@@ -113,4 +74,4 @@ private:
QT_END_NAMESPACE
-#endif
+#endif // QHELPINDEXWIDGET_H
diff --git a/src/assistant/help/qhelplink.cpp b/src/assistant/help/qhelplink.cpp
index 75cb16ab8..91c1f4fbc 100644
--- a/src/assistant/help/qhelplink.cpp
+++ b/src/assistant/help/qhelplink.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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 "qhelplink.h"
diff --git a/src/assistant/help/qhelplink.h b/src/assistant/help/qhelplink.h
index 92b5ec6d0..5c359188e 100644
--- a/src/assistant/help/qhelplink.h
+++ b/src/assistant/help/qhelplink.h
@@ -1,51 +1,16 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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 QHELPLINK_H
#define QHELPLINK_H
#include <QtHelp/qhelp_global.h>
-#include <QtCore/QUrl>
+#include <QtCore/qurl.h>
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/qhelpsearchengine.cpp b/src/assistant/help/qhelpsearchengine.cpp
index c3dcc4422..43f41deb9 100644
--- a/src/assistant/help/qhelpsearchengine.cpp
+++ b/src/assistant/help/qhelpsearchengine.cpp
@@ -1,279 +1,25 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qhelpenginecore.h"
#include "qhelpsearchengine.h"
+#include "qhelpenginecore.h"
+#include "qhelpsearchenginecore.h"
#include "qhelpsearchquerywidget.h"
#include "qhelpsearchresultwidget.h"
-#include "qhelpsearchindexreader_p.h"
-#include "qhelpsearchindexreader_default_p.h"
-#include "qhelpsearchindexwriter_default_p.h"
-
-#include <QtCore/QDir>
-#include <QtCore/QFile>
-#include <QtCore/QFileInfo>
-#include <QtCore/QVariant>
-#include <QtCore/QThread>
-#include <QtCore/QPointer>
-#include <QtCore/QTimer>
-
QT_BEGIN_NAMESPACE
-using namespace fulltextsearch::qt;
-
-class QHelpSearchResultData : public QSharedData
+class QHelpSearchEnginePrivate
{
public:
- QUrl m_url;
- QString m_title;
- QString m_snippet;
-};
-
-/*!
- \class QHelpSearchResult
- \since 5.9
- \inmodule QtHelp
- \brief The QHelpSearchResult class provides the data associated with the
- search result.
-
- The QHelpSearchResult object is a data object that describes a single search result.
- The vector of search result objects is returned by QHelpSearchEngine::searchResults().
- The description of the search result contains the document title and URL
- that the search input matched. It also contains the snippet from
- the document content containing the best match of the search input.
- \sa QHelpSearchEngine
-*/
-
-/*!
- Constructs a new empty QHelpSearchResult.
-*/
-QHelpSearchResult::QHelpSearchResult()
- : d(new QHelpSearchResultData)
-{
-}
-
-/*!
- Constructs a copy of \a other.
-*/
-QHelpSearchResult::QHelpSearchResult(const QHelpSearchResult &other)
- : d(other.d)
-{
-}
-
-/*!
- Constructs the search result containing \a url, \a title and \a snippet
- as the description of the result.
-*/
-QHelpSearchResult::QHelpSearchResult(const QUrl &url, const QString &title, const QString &snippet)
- : d(new QHelpSearchResultData)
-{
- d->m_url = url;
- d->m_title = title;
- d->m_snippet = snippet;
-}
-
-/*!
- Destroys the search result.
-*/
-QHelpSearchResult::~QHelpSearchResult()
-{
-}
-
-/*!
- Assigns \a other to this search result and returns a reference to this search result.
-*/
-QHelpSearchResult &QHelpSearchResult::operator=(const QHelpSearchResult &other)
-{
- d = other.d;
- return *this;
-}
-
-/*!
- Returns the document title of the search result.
-*/
-QString QHelpSearchResult::title() const
-{
- return d->m_title;
-}
-
-/*!
- Returns the document URL of the search result.
-*/
-QUrl QHelpSearchResult::url() const
-{
- return d->m_url;
-}
-
-/*!
- Returns the document snippet containing the search phrase of the search result.
-*/
-QString QHelpSearchResult::snippet() const
-{
- return d->m_snippet;
-}
-
-
-class QHelpSearchEnginePrivate : public QObject
-{
- Q_OBJECT
-
-signals:
- void indexingStarted();
- void indexingFinished();
-
- void searchingStarted();
- void searchingFinished(int searchResultCount);
-
-private:
- QHelpSearchEnginePrivate(QHelpEngineCore *helpEngine)
- : helpEngine(helpEngine)
- {
- }
-
- ~QHelpSearchEnginePrivate()
- {
- delete indexReader;
- delete indexWriter;
- }
-
- int searchResultCount() const
- {
- return indexReader ? indexReader->searchResultCount() : 0;
- }
-
- QList<QHelpSearchResult> searchResults(int start, int end) const
- {
- return indexReader ?
- indexReader->searchResults(start, end) :
- QList<QHelpSearchResult>();
- }
-
- void updateIndex(bool reindex = false)
- {
- if (helpEngine.isNull())
- return;
-
- if (!QFile::exists(QFileInfo(helpEngine->collectionFile()).path()))
- return;
-
- if (!indexWriter) {
- indexWriter = new QHelpSearchIndexWriter();
-
- connect(indexWriter, &QHelpSearchIndexWriter::indexingStarted,
- this, &QHelpSearchEnginePrivate::indexingStarted);
- connect(indexWriter, &QHelpSearchIndexWriter::indexingFinished,
- this, &QHelpSearchEnginePrivate::indexingFinished);
- }
-
- indexWriter->cancelIndexing();
- indexWriter->updateIndex(helpEngine->collectionFile(),
- indexFilesFolder(), reindex);
- }
-
- void cancelIndexing()
- {
- if (indexWriter)
- indexWriter->cancelIndexing();
- }
-
- void search(const QString &searchInput)
- {
- if (helpEngine.isNull())
- return;
-
- if (!QFile::exists(QFileInfo(helpEngine->collectionFile()).path()))
- return;
-
- if (!indexReader) {
- indexReader = new QHelpSearchIndexReaderDefault();
- connect(indexReader, &fulltextsearch::QHelpSearchIndexReader::searchingStarted,
- this, &QHelpSearchEnginePrivate::searchingStarted);
- connect(indexReader, &fulltextsearch::QHelpSearchIndexReader::searchingFinished,
- this, &QHelpSearchEnginePrivate::searchingFinished);
- }
-
- m_searchInput = searchInput;
- indexReader->cancelSearching();
- indexReader->search(helpEngine->collectionFile(), indexFilesFolder(),
- searchInput, helpEngine->usesFilterEngine());
- }
-
- void cancelSearching()
- {
- if (indexReader)
- indexReader->cancelSearching();
- }
-
- QString indexFilesFolder() const
- {
- QString indexFilesFolder = QLatin1String(".fulltextsearch");
- if (helpEngine && !helpEngine->collectionFile().isEmpty()) {
- QFileInfo fi(helpEngine->collectionFile());
- indexFilesFolder = fi.absolutePath() + QDir::separator()
- + QLatin1Char('.')
- + fi.fileName().left(fi.fileName().lastIndexOf(QLatin1String(".qhc")));
- }
- return indexFilesFolder;
- }
-
-private:
- friend class QHelpSearchEngine;
-
- bool m_isIndexingScheduled = false;
-
+ QHelpSearchEngineCore m_searchEngine;
QHelpSearchQueryWidget *queryWidget = nullptr;
QHelpSearchResultWidget *resultWidget = nullptr;
-
- fulltextsearch::QHelpSearchIndexReader *indexReader = nullptr;
- QHelpSearchIndexWriter *indexWriter = nullptr;
-
- QPointer<QHelpEngineCore> helpEngine;
-
- QString m_searchInput;
};
-#include "qhelpsearchengine.moc"
-
/*!
\class QHelpSearchQuery
- \obsolete
+ \deprecated
\since 4.4
\inmodule QtHelp
\brief The QHelpSearchQuery class contains the field name and the associated
@@ -306,14 +52,14 @@ private:
\value DEFAULT the default field provided by the search widget, several terms should be
split and stored in the word list except search terms enclosed in quotes.
- \value FUZZY \obsolete Terms should be split in separate
+ \value FUZZY \deprecated Terms should be split in separate
words and passed to the search engine.
- \value WITHOUT \obsolete Terms should be split in separate
+ \value WITHOUT \deprecated Terms should be split in separate
words and passed to the search engine.
- \value PHRASE \obsolete Terms should not be split in separate words.
- \value ALL \obsolete Terms should be split in separate
+ \value PHRASE \deprecated Terms should not be split in separate words.
+ \value ALL \deprecated Terms should be split in separate
words and passed to the search engine
- \value ATLEAST \obsolete Terms should be split in separate
+ \value ATLEAST \deprecated Terms should be split in separate
words and passed to the search engine
*/
@@ -386,19 +132,15 @@ private:
*/
QHelpSearchEngine::QHelpSearchEngine(QHelpEngineCore *helpEngine, QObject *parent)
: QObject(parent)
+ , d(new QHelpSearchEnginePrivate{QHelpSearchEngineCore(helpEngine)})
{
- d = new QHelpSearchEnginePrivate(helpEngine);
-
- connect(helpEngine, &QHelpEngineCore::setupFinished,
- this, &QHelpSearchEngine::scheduleIndexDocumentation);
-
- connect(d, &QHelpSearchEnginePrivate::indexingStarted,
+ connect(&d->m_searchEngine, &QHelpSearchEngineCore::indexingStarted,
this, &QHelpSearchEngine::indexingStarted);
- connect(d, &QHelpSearchEnginePrivate::indexingFinished,
+ connect(&d->m_searchEngine, &QHelpSearchEngineCore::indexingFinished,
this, &QHelpSearchEngine::indexingFinished);
- connect(d, &QHelpSearchEnginePrivate::searchingStarted,
+ connect(&d->m_searchEngine, &QHelpSearchEngineCore::searchingStarted,
this, &QHelpSearchEngine::searchingStarted);
- connect(d, &QHelpSearchEnginePrivate::searchingFinished,
+ connect(&d->m_searchEngine, &QHelpSearchEngineCore::searchingFinished,
this, &QHelpSearchEngine::searchingFinished);
}
@@ -418,7 +160,6 @@ QHelpSearchQueryWidget* QHelpSearchEngine::queryWidget()
{
if (!d->queryWidget)
d->queryWidget = new QHelpSearchQueryWidget();
-
return d->queryWidget;
}
@@ -429,28 +170,29 @@ QHelpSearchResultWidget* QHelpSearchEngine::resultWidget()
{
if (!d->resultWidget)
d->resultWidget = new QHelpSearchResultWidget(this);
-
return d->resultWidget;
}
+#if QT_DEPRECATED_SINCE(5, 9)
/*!
- \obsolete
+ \deprecated
Use searchResultCount() instead.
*/
int QHelpSearchEngine::hitsCount() const
{
- return d->searchResultCount();
+ return searchResultCount();
}
/*!
\since 4.6
- \obsolete
+ \deprecated
Use searchResultCount() instead.
*/
int QHelpSearchEngine::hitCount() const
{
- return d->searchResultCount();
+ return searchResultCount();
}
+#endif // QT_DEPRECATED_SINCE(5, 9)
/*!
\since 5.9
@@ -458,12 +200,13 @@ int QHelpSearchEngine::hitCount() const
*/
int QHelpSearchEngine::searchResultCount() const
{
- return d->searchResultCount();
+ return d->m_searchEngine.searchResultCount();
}
+#if QT_DEPRECATED_SINCE(5, 9)
/*!
\typedef QHelpSearchEngine::SearchHit
- \obsolete
+ \deprecated
Use QHelpSearchResult instead.
@@ -474,7 +217,7 @@ int QHelpSearchEngine::searchResultCount() const
*/
/*!
- \obsolete
+ \deprecated
Use searchResults() instead.
*/
QList<QHelpSearchEngine::SearchHit> QHelpSearchEngine::hits(int start, int end) const
@@ -484,6 +227,7 @@ QList<QHelpSearchEngine::SearchHit> QHelpSearchEngine::hits(int start, int end)
hits.append(qMakePair(result.url().toString(), result.title()));
return hits;
}
+#endif // QT_DEPRECATED_SINCE(5, 9)
/*!
\since 5.9
@@ -492,7 +236,7 @@ QList<QHelpSearchEngine::SearchHit> QHelpSearchEngine::hits(int start, int end)
*/
QList<QHelpSearchResult> QHelpSearchEngine::searchResults(int start, int end) const
{
- return d->searchResults(start, end);
+ return d->m_searchEngine.searchResults(start, end);
}
/*!
@@ -501,26 +245,30 @@ QList<QHelpSearchResult> QHelpSearchEngine::searchResults(int start, int end) co
*/
QString QHelpSearchEngine::searchInput() const
{
- return d->m_searchInput;
+ return d->m_searchEngine.searchInput();
}
+#if QT_DEPRECATED_SINCE(5, 9)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
/*!
- \obsolete
+ \deprecated
\since 4.5
Use searchInput() instead.
*/
QList<QHelpSearchQuery> QHelpSearchEngine::query() const
{
- return QList<QHelpSearchQuery>() << QHelpSearchQuery(QHelpSearchQuery::DEFAULT,
- d->m_searchInput.split(QChar::Space));
+ return {{QHelpSearchQuery::DEFAULT, searchInput().split(QChar::Space)}};
}
+QT_WARNING_POP
+#endif // QT_DEPRECATED_SINCE(5, 9)
/*!
Forces the search engine to reindex all documentation files.
*/
void QHelpSearchEngine::reindexDocumentation()
{
- d->updateIndex(true);
+ d->m_searchEngine.reindexDocumentation();
}
/*!
@@ -528,7 +276,7 @@ void QHelpSearchEngine::reindexDocumentation()
*/
void QHelpSearchEngine::cancelIndexing()
{
- d->cancelIndexing();
+ d->m_searchEngine.cancelIndexing();
}
/*!
@@ -536,7 +284,7 @@ void QHelpSearchEngine::cancelIndexing()
*/
void QHelpSearchEngine::cancelSearching()
{
- d->cancelSearching();
+ d->m_searchEngine.cancelSearching();
}
/*!
@@ -558,11 +306,12 @@ void QHelpSearchEngine::cancelSearching()
*/
void QHelpSearchEngine::search(const QString &searchInput)
{
- d->search(searchInput);
+ d->m_searchEngine.search(searchInput);
}
+#if QT_DEPRECATED_SINCE(5, 9)
/*!
- \obsolete
+ \deprecated
Use search(const QString &searchInput) instead.
*/
void QHelpSearchEngine::search(const QList<QHelpSearchQuery> &queryList)
@@ -570,25 +319,20 @@ void QHelpSearchEngine::search(const QList<QHelpSearchQuery> &queryList)
if (queryList.isEmpty())
return;
- d->search(queryList.first().wordList.join(QChar::Space));
+ d->m_searchEngine.search(queryList.first().wordList.join(QChar::Space));
}
+#endif // QT_DEPRECATED_SINCE(5, 9)
/*!
\internal
*/
void QHelpSearchEngine::scheduleIndexDocumentation()
{
- if (d->m_isIndexingScheduled)
- return;
-
- d->m_isIndexingScheduled = true;
- QTimer::singleShot(0, this, &QHelpSearchEngine::indexDocumentation);
+ d->m_searchEngine.scheduleIndexDocumentation();
}
+// TODO: Deprecate me (but it's private???)
void QHelpSearchEngine::indexDocumentation()
-{
- d->m_isIndexingScheduled = false;
- d->updateIndex();
-}
+{}
QT_END_NAMESPACE
diff --git a/src/assistant/help/qhelpsearchengine.h b/src/assistant/help/qhelpsearchengine.h
index f1ddb1634..f782e6174 100644
--- a/src/assistant/help/qhelpsearchengine.h
+++ b/src/assistant/help/qhelpsearchengine.h
@@ -1,93 +1,40 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QHELPSEARCHENGINE_H
#define QHELPSEARCHENGINE_H
#include <QtHelp/qhelp_global.h>
+#include <QtHelp/qhelpsearchresult.h>
-#include <QtCore/QMap>
-#include <QtCore/QUrl>
-#include <QtCore/QObject>
-#include <QtCore/QSharedDataPointer>
-#include <QtCore/QString>
-#include <QtCore/QStringList>
+#include <QtCore/qobject.h>
+#include <QtCore/qshareddata.h>
+#include <QtCore/qstringlist.h>
QT_BEGIN_NAMESPACE
class QHelpEngineCore;
-class QHelpSearchQueryWidget;
class QHelpSearchEnginePrivate;
-class QHelpSearchResultData;
+class QHelpSearchQueryWidget;
class QHelpSearchResultWidget;
+#if QT_DEPRECATED_SINCE(6, 7)
class QHELP_EXPORT QHelpSearchQuery
{
public:
enum FieldName { DEFAULT = 0, FUZZY, WITHOUT, PHRASE, ALL, ATLEAST };
+ QT_DEPRECATED_VERSION_X_6_7("Use QString instead")
QHelpSearchQuery()
: fieldName(DEFAULT) { wordList.clear(); }
+ QT_DEPRECATED_VERSION_X_6_7("Use QString instead")
QHelpSearchQuery(FieldName field, const QStringList &wordList_)
: fieldName(field), wordList(wordList_) {}
FieldName fieldName;
QStringList wordList;
};
-
-class QHELP_EXPORT QHelpSearchResult
-{
-public:
- QHelpSearchResult();
- QHelpSearchResult(const QHelpSearchResult &other);
- QHelpSearchResult(const QUrl &url, const QString &title, const QString &snippet);
- ~QHelpSearchResult();
-
- QHelpSearchResult &operator=(const QHelpSearchResult &other);
-
- QString title() const;
- QUrl url() const;
- QString snippet() const;
-
-private:
- QSharedDataPointer<QHelpSearchResultData> d;
-};
+#endif // QT_DEPRECATED_SINCE(6, 7)
class QHELP_EXPORT QHelpSearchEngine : public QObject
{
@@ -97,8 +44,8 @@ public:
explicit QHelpSearchEngine(QHelpEngineCore *helpEngine, QObject *parent = nullptr);
~QHelpSearchEngine();
- QHelpSearchQueryWidget* queryWidget();
- QHelpSearchResultWidget* resultWidget();
+ QHelpSearchQueryWidget *queryWidget();
+ QHelpSearchResultWidget *resultWidget();
#if QT_DEPRECATED_SINCE(5, 9)
typedef QPair<QString, QString> SearchHit;
@@ -142,4 +89,4 @@ private:
QT_END_NAMESPACE
-#endif // QHELPSEARCHENGINE_H
+#endif // QHELPSEARCHENGINE_H
diff --git a/src/assistant/help/qhelpsearchenginecore.cpp b/src/assistant/help/qhelpsearchenginecore.cpp
new file mode 100644
index 000000000..5ed8f453d
--- /dev/null
+++ b/src/assistant/help/qhelpsearchenginecore.cpp
@@ -0,0 +1,256 @@
+// 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 "qhelpsearchenginecore.h"
+#include "qhelpenginecore.h"
+
+#include "qhelpsearchindexreader_p.h"
+#include "qhelpsearchindexwriter_p.h"
+
+#include <QtCore/qdir.h>
+#include <QtCore/qfile.h>
+#include <QtCore/qfileinfo.h>
+#include <QtCore/qpointer.h>
+#include <QtCore/qtimer.h>
+
+QT_BEGIN_NAMESPACE
+
+using namespace fulltextsearch;
+using namespace Qt::StringLiterals;
+
+class QHelpSearchEngineCorePrivate
+{
+public:
+ QString indexFilesFolder() const
+ {
+ QString indexFilesFolder = ".fulltextsearch"_L1;
+ if (m_helpEngine && !m_helpEngine->collectionFile().isEmpty()) {
+ const QFileInfo fi(m_helpEngine->collectionFile());
+ indexFilesFolder = fi.absolutePath() + QDir::separator() + u'.'
+ + fi.fileName().left(fi.fileName().lastIndexOf(".qhc"_L1));
+ }
+ return indexFilesFolder;
+ }
+
+ void updateIndex(bool reindex)
+ {
+ if (m_helpEngine.isNull())
+ return;
+
+ if (!QFile::exists(QFileInfo(m_helpEngine->collectionFile()).path()))
+ return;
+
+ if (!m_indexWriter) {
+ m_indexWriter.reset(new QHelpSearchIndexWriter);
+
+ QObject::connect(m_indexWriter.get(), &QHelpSearchIndexWriter::indexingStarted,
+ q, &QHelpSearchEngineCore::indexingStarted);
+ QObject::connect(m_indexWriter.get(), &QHelpSearchIndexWriter::indexingFinished,
+ q, &QHelpSearchEngineCore::indexingFinished);
+ }
+
+ m_indexWriter->cancelIndexing();
+ m_indexWriter->updateIndex(m_helpEngine->collectionFile(), indexFilesFolder(), reindex);
+ }
+
+ void search(const QString &searchInput)
+ {
+ if (m_helpEngine.isNull())
+ return;
+
+ if (!QFile::exists(QFileInfo(m_helpEngine->collectionFile()).path()))
+ return;
+
+ if (!m_indexReader) {
+ m_indexReader.reset(new QHelpSearchIndexReader);
+ QObject::connect(m_indexReader.get(), &QHelpSearchIndexReader::searchingStarted,
+ q, &QHelpSearchEngineCore::searchingStarted);
+ QObject::connect(m_indexReader.get(), &QHelpSearchIndexReader::searchingFinished,
+ q, &QHelpSearchEngineCore::searchingFinished);
+ }
+
+ m_searchInput = searchInput;
+ m_indexReader->cancelSearching();
+ m_indexReader->search(m_helpEngine->collectionFile(), indexFilesFolder(), searchInput,
+ m_helpEngine->usesFilterEngine());
+ }
+
+ QHelpSearchEngineCore *q = nullptr;
+
+ bool m_isIndexingScheduled = false;
+
+ std::unique_ptr<QHelpSearchIndexReader> m_indexReader;
+ std::unique_ptr<QHelpSearchIndexWriter> m_indexWriter;
+
+ QPointer<QHelpEngineCore> m_helpEngine;
+ QString m_searchInput;
+};
+
+/*!
+ \class QHelpSearchEngineCore
+ \since 6.8
+ \inmodule QtHelp
+ \brief The QHelpSearchEngineCore class provides access to index and
+ search documentation.
+
+ Before the search engine can be used, one has to instantiate at least a
+ QHelpEngineCore object that needs to be passed to the search engines constructor.
+ This is required as the search engine needs to be connected to the help
+ engines setupFinished() signal to know when it can start to index documentation.
+
+ After starting the indexing process the signal indexingStarted() is emitted and
+ on the end of the indexing process the indexingFinished() is emitted. To stop
+ the indexing one can call cancelIndexing().
+
+ When the indexing process has finished, the search engine can be used to
+ search through the index for a given term using the search() function. When
+ the search input is passed to the search engine, the searchingStarted()
+ signal is emitted. When the search finishes, the searchingFinished() signal
+ is emitted. The search process can be stopped by calling cancelSearching().
+
+ If the search succeeds, searchingFinished() is called with the search result
+ count to fetch the search results from the search engine. Calling the
+ searchResults() function with a range returns a list of QHelpSearchResult
+ objects within the range. The results consist of the document title and URL,
+ as well as a snippet from the document that contains the best match for the
+ search input.
+*/
+
+/*!
+ \fn void QHelpSearchEngineCore::indexingStarted()
+
+ This signal is emitted when indexing process is started.
+*/
+
+/*!
+ \fn void QHelpSearchEngineCore::indexingFinished()
+
+ This signal is emitted when the indexing process is complete.
+*/
+
+/*!
+ \fn void QHelpSearchEngineCore::searchingStarted()
+
+ This signal is emitted when the search process is started.
+*/
+
+/*!
+ \fn void QHelpSearchEngineCore::searchingFinished(int searchResultCount)
+
+ This signal is emitted when the search process is complete.
+ The search result count is stored in \a searchResultCount.
+*/
+
+/*!
+ Constructs a new search engine. The search engine uses the given
+ \a helpEngine to access the documentation that needs to be indexed.
+ The QHelpEngine's setupFinished() signal is automatically connected to the
+ QHelpSearchEngineCore's indexing function, so that new documentation will
+ be indexed after the signal is emitted.
+*/
+QHelpSearchEngineCore::QHelpSearchEngineCore(QHelpEngineCore *helpEngine)
+ : d(new QHelpSearchEngineCorePrivate)
+{
+ d->q = this;
+ d->m_helpEngine = helpEngine;
+ connect(helpEngine, &QHelpEngineCore::setupFinished,
+ this, &QHelpSearchEngineCore::scheduleIndexDocumentation);
+}
+
+/*!
+ Destructs the search engine.
+*/
+QHelpSearchEngineCore::~QHelpSearchEngineCore()
+{
+ delete d;
+}
+
+/*!
+ Returns the number of results the search engine found.
+*/
+int QHelpSearchEngineCore::searchResultCount() const
+{
+ return d->m_indexReader ? d->m_indexReader->searchResultCount() : 0;;
+}
+
+/*!
+ Returns a list of search results within the range from the index
+ specified by \a start to the index specified by \a end.
+*/
+QList<QHelpSearchResult> QHelpSearchEngineCore::searchResults(int start, int end) const
+{
+ return d->m_indexReader ? d->m_indexReader->searchResults(start, end)
+ : QList<QHelpSearchResult>();
+}
+
+/*!
+ Returns the phrase that was last searched for.
+*/
+QString QHelpSearchEngineCore::searchInput() const
+{
+ return d->m_searchInput;
+}
+
+/*!
+ Forces the search engine to reindex all documentation files.
+*/
+void QHelpSearchEngineCore::reindexDocumentation()
+{
+ d->updateIndex(true);
+}
+
+/*!
+ Stops the indexing process.
+*/
+void QHelpSearchEngineCore::cancelIndexing()
+{
+ if (d->m_indexWriter)
+ d->m_indexWriter->cancelIndexing();
+}
+
+/*!
+ Stops the search process.
+*/
+void QHelpSearchEngineCore::cancelSearching()
+{
+ if (d->m_indexReader)
+ d->m_indexReader->cancelSearching();
+}
+
+/*!
+ Starts the search process using the given search phrase \a searchInput.
+
+ The phrase may consist of several words. By default, the search engine returns
+ the list of documents that contain all the specified words.
+ The phrase may contain any combination of the logical operators AND, OR, and
+ NOT. The operator must be written in all capital letters, otherwise it will
+ be considered a part of the search phrase.
+
+ If double quotation marks are used to group the words,
+ the search engine will search for an exact match of the quoted phrase.
+
+ For more information about the text query syntax,
+ see \l {https://sqlite.org/fts5.html#full_text_query_syntax}
+ {SQLite FTS5 Extension}.
+*/
+void QHelpSearchEngineCore::search(const QString &searchInput)
+{
+ d->search(searchInput);
+}
+
+/*!
+ \internal
+*/
+void QHelpSearchEngineCore::scheduleIndexDocumentation()
+{
+ if (d->m_isIndexingScheduled)
+ return;
+
+ d->m_isIndexingScheduled = true;
+ QTimer::singleShot(0, this, [this] {
+ d->m_isIndexingScheduled = false;
+ d->updateIndex(false);
+ });
+}
+
+QT_END_NAMESPACE
diff --git a/src/assistant/help/qhelpsearchenginecore.h b/src/assistant/help/qhelpsearchenginecore.h
new file mode 100644
index 000000000..d820a8f3d
--- /dev/null
+++ b/src/assistant/help/qhelpsearchenginecore.h
@@ -0,0 +1,51 @@
+// 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 QHELPSEARCHENGINECORE_H
+#define QHELPSEARCHENGINECORE_H
+
+#include <QtHelp/qhelp_global.h>
+#include <QtHelp/qhelpsearchresult.h>
+
+#include <QtCore/qobject.h>
+#include <QtCore/qshareddata.h>
+
+QT_BEGIN_NAMESPACE
+
+class QHelpEngineCore;
+class QHelpSearchEngineCorePrivate;
+
+class QHELP_EXPORT QHelpSearchEngineCore : public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit QHelpSearchEngineCore(QHelpEngineCore *helpEngine);
+ ~QHelpSearchEngineCore();
+
+ int searchResultCount() const;
+ QList<QHelpSearchResult> searchResults(int start, int end) const;
+ QString searchInput() const;
+
+ void reindexDocumentation();
+ void cancelIndexing();
+
+ void search(const QString &searchInput);
+ void cancelSearching(); // TODO: is it needed?
+
+ void scheduleIndexDocumentation();
+
+Q_SIGNALS:
+ void indexingStarted();
+ void indexingFinished();
+
+ void searchingStarted();
+ void searchingFinished(int searchResultCount);
+
+private:
+ QHelpSearchEngineCorePrivate *d;
+};
+
+QT_END_NAMESPACE
+
+#endif // QHELPSEARCHENGINECORE_H
diff --git a/src/assistant/help/qhelpsearchindexreader.cpp b/src/assistant/help/qhelpsearchindexreader.cpp
index e2172deda..5fd583335 100644
--- a/src/assistant/help/qhelpsearchindexreader.cpp
+++ b/src/assistant/help/qhelpsearchindexreader.cpp
@@ -1,48 +1,193 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qhelpsearchindexreader_p.h"
+#include "qhelpenginecore.h"
+#include "qhelpfilterengine.h"
+
+#include <QtCore/qmap.h>
+#include <QtCore/qset.h>
+#include <QtSql/qsqldatabase.h>
+#include <QtSql/qsqlquery.h>
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace fulltextsearch {
+class Reader
+{
+public:
+ void setIndexPath(const QString &path)
+ {
+ m_indexPath = path;
+ m_namespaceAttributes.clear();
+ m_filterEngineNamespaceList.clear();
+ m_useFilterEngine = false;
+ }
+ void addNamespaceAttributes(const QString &namespaceName, const QStringList &attributes)
+ {
+ m_namespaceAttributes.insert(namespaceName, attributes);
+ }
+ void setFilterEngineNamespaceList(const QStringList &namespaceList)
+ {
+ m_useFilterEngine = true;
+ m_filterEngineNamespaceList = namespaceList;
+ }
+
+ void searchInDB(const QString &term);
+ QList<QHelpSearchResult> searchResults() const { return m_searchResults; }
+
+private:
+ QList<QHelpSearchResult> queryTable(const QSqlDatabase &db, const QString &tableName,
+ const QString &searchInput) const;
+
+ QMultiMap<QString, QStringList> m_namespaceAttributes;
+ QStringList m_filterEngineNamespaceList;
+ QList<QHelpSearchResult> m_searchResults;
+ QString m_indexPath;
+ bool m_useFilterEngine = false;
+};
+
+static QString namespacePlaceholders(const QMultiMap<QString, QStringList> &namespaces)
+{
+ QString placeholders;
+ const auto &namespaceList = namespaces.uniqueKeys();
+ bool firstNS = true;
+ for (const QString &ns : namespaceList) {
+ if (firstNS)
+ firstNS = false;
+ else
+ placeholders += " OR "_L1;
+ placeholders += "(namespace = ?"_L1;
+
+ const QList<QStringList> &attributeSets = namespaces.values(ns);
+ bool firstAS = true;
+ for (const QStringList &attributeSet : attributeSets) {
+ if (!attributeSet.isEmpty()) {
+ if (firstAS) {
+ firstAS = false;
+ placeholders += " AND ("_L1;
+ } else {
+ placeholders += " OR "_L1;
+ }
+ placeholders += "attributes = ?"_L1;
+ }
+ }
+ if (!firstAS)
+ placeholders += u')'; // close "AND ("
+ placeholders += u')';
+ }
+ return placeholders;
+}
+
+static void bindNamespacesAndAttributes(QSqlQuery *query,
+ const QMultiMap<QString, QStringList> &namespaces)
+{
+ const auto &namespaceList = namespaces.uniqueKeys();
+ for (const QString &ns : namespaceList) {
+ query->addBindValue(ns);
+
+ const QList<QStringList> &attributeSets = namespaces.values(ns);
+ for (const QStringList &attributeSet : attributeSets) {
+ if (!attributeSet.isEmpty())
+ query->addBindValue(attributeSet.join(u'|'));
+ }
+ }
+}
+
+static QString namespacePlaceholders(const QStringList &namespaceList)
+{
+ QString placeholders;
+ bool firstNS = true;
+ for (int i = namespaceList.size(); i; --i) {
+ if (firstNS)
+ firstNS = false;
+ else
+ placeholders += " OR "_L1;
+ placeholders += "namespace = ?"_L1;
+ }
+ return placeholders;
+}
+
+static void bindNamespacesAndAttributes(QSqlQuery *query, const QStringList &namespaceList)
+{
+ for (const QString &ns : namespaceList)
+ query->addBindValue(ns);
+}
+
+QList<QHelpSearchResult> Reader::queryTable(const QSqlDatabase &db, const QString &tableName,
+ const QString &searchInput) const
+{
+ const QString nsPlaceholders = m_useFilterEngine
+ ? namespacePlaceholders(m_filterEngineNamespaceList)
+ : namespacePlaceholders(m_namespaceAttributes);
+ QSqlQuery query(db);
+ query.prepare("SELECT url, title, snippet("_L1 + tableName +
+ ", -1, '<b>', '</b>', '...', '10') FROM "_L1 + tableName +
+ " WHERE ("_L1 + nsPlaceholders +
+ ") AND "_L1 + tableName +
+ " MATCH ? ORDER BY rank"_L1);
+ m_useFilterEngine
+ ? bindNamespacesAndAttributes(&query, m_filterEngineNamespaceList)
+ : bindNamespacesAndAttributes(&query, m_namespaceAttributes);
+ query.addBindValue(searchInput);
+ query.exec();
+
+ QList<QHelpSearchResult> results;
+
+ while (query.next()) {
+ const QString &url = query.value("url"_L1).toString();
+ const QString &title = query.value("title"_L1).toString();
+ const QString &snippet = query.value(2).toString();
+ results.append(QHelpSearchResult(url, title, snippet));
+ }
+ return results;
+}
+
+void Reader::searchInDB(const QString &searchInput)
+{
+ const QString &uniqueId = QHelpGlobal::uniquifyConnectionName("QHelpReader"_L1, this);
+ {
+ QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"_L1, uniqueId);
+ db.setConnectOptions("QSQLITE_OPEN_READONLY"_L1);
+ db.setDatabaseName(m_indexPath + "/fts"_L1);
+
+ if (db.open()) {
+ const QList<QHelpSearchResult> titleResults = queryTable(db, "titles"_L1, searchInput);
+ const QList<QHelpSearchResult> contentResults =
+ queryTable(db, "contents"_L1, searchInput);
+
+ // merge results form title and contents searches
+ m_searchResults.clear();
+ QSet<QUrl> urls;
+ for (const QHelpSearchResult &result : titleResults) {
+ const auto size = urls.size();
+ urls.insert(result.url());
+ if (size != urls.size()) // insertion took place
+ m_searchResults.append(result);
+ }
+ for (const QHelpSearchResult &result : contentResults) {
+ const auto size = urls.size();
+ urls.insert(result.url());
+ if (size != urls.size()) // insertion took place
+ m_searchResults.append(result);
+ }
+ }
+ }
+ QSqlDatabase::removeDatabase(uniqueId);
+}
+
+static bool attributesMatchFilter(const QStringList &attributes, const QStringList &filter)
+{
+ for (const QString &attribute : filter) {
+ if (!attributes.contains(attribute, Qt::CaseInsensitive))
+ return false;
+ }
+ return true;
+}
+
QHelpSearchIndexReader::~QHelpSearchIndexReader()
{
cancelSearching();
@@ -56,7 +201,7 @@ void QHelpSearchIndexReader::cancelSearching()
}
void QHelpSearchIndexReader::search(const QString &collectionFile, const QString &indexFilesFolder,
- const QString &searchInput, bool usesFilterEngine)
+ const QString &searchInput, bool usesFilterEngine)
{
wait();
@@ -73,17 +218,74 @@ void QHelpSearchIndexReader::search(const QString &collectionFile, const QString
int QHelpSearchIndexReader::searchResultCount() const
{
QMutexLocker lock(&m_mutex);
- return m_searchResults.count();
+ return m_searchResults.size();
}
-QList<QHelpSearchResult> QHelpSearchIndexReader::searchResults(int start,
- int end) const
+QList<QHelpSearchResult> QHelpSearchIndexReader::searchResults(int start, int end) const
{
QMutexLocker lock(&m_mutex);
return m_searchResults.mid(start, end - start);
}
+void QHelpSearchIndexReader::run()
+{
+ QMutexLocker lock(&m_mutex);
+
+ if (m_cancel)
+ return;
+
+ const QString searchInput = m_searchInput;
+ const QString collectionFile = m_collectionFile;
+ const QString indexPath = m_indexFilesFolder;
+ const bool usesFilterEngine = m_usesFilterEngine;
+
+ lock.unlock();
+
+ QHelpEngineCore engine(collectionFile, nullptr);
+ if (!engine.setupData())
+ return;
+
+ emit searchingStarted();
+
+ // setup the reader
+ Reader reader;
+ reader.setIndexPath(indexPath);
+
+ if (usesFilterEngine) {
+ reader.setFilterEngineNamespaceList(
+ engine.filterEngine()->namespacesForFilter(engine.filterEngine()->activeFilter()));
+ } else {
+ const QStringList &registeredDocs = engine.registeredDocumentations();
+ const QStringList &currentFilter = engine.filterAttributes(engine.currentFilter());
+
+ for (const QString &namespaceName : registeredDocs) {
+ const QList<QStringList> &attributeSets =
+ engine.filterAttributeSets(namespaceName);
+
+ for (const QStringList &attributes : attributeSets) {
+ if (attributesMatchFilter(attributes, currentFilter))
+ reader.addNamespaceAttributes(namespaceName, attributes);
+ }
+ }
+ }
+
+ lock.relock();
+ if (m_cancel) {
+ emit searchingFinished(0); // TODO: check this, speed issue while locking???
+ return;
+ }
+ lock.unlock();
+
+ m_searchResults.clear();
+ reader.searchInDB(searchInput); // TODO: should this be interruptible as well ???
+
+ lock.relock();
+ m_searchResults = reader.searchResults();
+ lock.unlock();
+
+ emit searchingFinished(m_searchResults.size());
+}
-} // namespace fulltextsearch
+} // namespace fulltextsearch
QT_END_NAMESPACE
diff --git a/src/assistant/help/qhelpsearchindexreader_default.cpp b/src/assistant/help/qhelpsearchindexreader_default.cpp
deleted file mode 100644
index cbd01ee7b..000000000
--- a/src/assistant/help/qhelpsearchindexreader_default.cpp
+++ /dev/null
@@ -1,287 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qhelpenginecore.h"
-#include "qhelpfilterengine.h"
-#include "qhelpsearchindexreader_default_p.h"
-
-#include <QtCore/QSet>
-#include <QtSql/QSqlDatabase>
-#include <QtSql/QSqlQuery>
-
-QT_BEGIN_NAMESPACE
-
-namespace fulltextsearch {
-namespace qt {
-
-void Reader::setIndexPath(const QString &path)
-{
- m_indexPath = path;
- m_namespaceAttributes.clear();
- m_filterEngineNamespaceList.clear();
- m_useFilterEngine = false;
-}
-
-void Reader::addNamespaceAttributes(const QString &namespaceName, const QStringList &attributes)
-{
- m_namespaceAttributes.insert(namespaceName, attributes);
-}
-
-void Reader::setFilterEngineNamespaceList(const QStringList &namespaceList)
-{
- m_useFilterEngine = true;
- m_filterEngineNamespaceList = namespaceList;
-}
-
-static QString namespacePlaceholders(const QMultiMap<QString, QStringList> &namespaces)
-{
- QString placeholders;
- const auto &namespaceList = namespaces.uniqueKeys();
- bool firstNS = true;
- for (const QString &ns : namespaceList) {
- if (firstNS)
- firstNS = false;
- else
- placeholders += QLatin1String(" OR ");
- placeholders += QLatin1String("(namespace = ?");
-
- const QList<QStringList> &attributeSets = namespaces.values(ns);
- bool firstAS = true;
- for (const QStringList &attributeSet : attributeSets) {
- if (!attributeSet.isEmpty()) {
- if (firstAS) {
- firstAS = false;
- placeholders += QLatin1String(" AND (");
- } else {
- placeholders += QLatin1String(" OR ");
- }
- placeholders += QLatin1String("attributes = ?");
- }
- }
- if (!firstAS)
- placeholders += QLatin1Char(')'); // close "AND ("
- placeholders += QLatin1Char(')');
- }
- return placeholders;
-}
-
-static void bindNamespacesAndAttributes(QSqlQuery *query, const QMultiMap<QString, QStringList> &namespaces)
-{
- const auto &namespaceList = namespaces.uniqueKeys();
- for (const QString &ns : namespaceList) {
- query->addBindValue(ns);
-
- const QList<QStringList> &attributeSets = namespaces.values(ns);
- for (const QStringList &attributeSet : attributeSets) {
- if (!attributeSet.isEmpty())
- query->addBindValue(attributeSet.join(QLatin1Char('|')));
- }
- }
-}
-
-static QString namespacePlaceholders(const QStringList &namespaceList)
-{
- QString placeholders;
- bool firstNS = true;
- for (int i = namespaceList.count(); i; --i) {
- if (firstNS)
- firstNS = false;
- else
- placeholders += QLatin1String(" OR ");
- placeholders += QLatin1String("namespace = ?");
- }
- return placeholders;
-}
-
-static void bindNamespacesAndAttributes(QSqlQuery *query, const QStringList &namespaceList)
-{
- for (const QString &ns : namespaceList)
- query->addBindValue(ns);
-}
-
-QList<QHelpSearchResult> Reader::queryTable(const QSqlDatabase &db,
- const QString &tableName,
- const QString &searchInput) const
-{
- const QString nsPlaceholders = m_useFilterEngine
- ? namespacePlaceholders(m_filterEngineNamespaceList)
- : namespacePlaceholders(m_namespaceAttributes);
- QSqlQuery query(db);
- query.prepare(QLatin1String("SELECT url, title, snippet(") + tableName +
- QLatin1String(", -1, '<b>', '</b>', '...', '10') FROM ") + tableName +
- QLatin1String(" WHERE (") + nsPlaceholders +
- QLatin1String(") AND ") + tableName +
- QLatin1String(" MATCH ? ORDER BY rank"));
- m_useFilterEngine
- ? bindNamespacesAndAttributes(&query, m_filterEngineNamespaceList)
- : bindNamespacesAndAttributes(&query, m_namespaceAttributes);
- query.addBindValue(searchInput);
- query.exec();
-
- QList<QHelpSearchResult> results;
-
- while (query.next()) {
- const QString &url = query.value(QLatin1String("url")).toString();
- const QString &title = query.value(QLatin1String("title")).toString();
- const QString &snippet = query.value(2).toString();
- results.append(QHelpSearchResult(url, title, snippet));
- }
-
- return results;
-}
-
-void Reader::searchInDB(const QString &searchInput)
-{
- const QString &uniqueId = QHelpGlobal::uniquifyConnectionName(QLatin1String("QHelpReader"), this);
- {
- QSqlDatabase db = QSqlDatabase::addDatabase(QLatin1String("QSQLITE"), uniqueId);
- db.setConnectOptions(QLatin1String("QSQLITE_OPEN_READONLY"));
- db.setDatabaseName(m_indexPath + QLatin1String("/fts"));
-
- if (db.open()) {
- const QList<QHelpSearchResult> titleResults = queryTable(db,
- QLatin1String("titles"), searchInput);
- const QList<QHelpSearchResult> contentResults = queryTable(db,
- QLatin1String("contents"), searchInput);
-
- // merge results form title and contents searches
- m_searchResults = QList<QHelpSearchResult>();
-
- QSet<QUrl> urls;
-
- for (const QHelpSearchResult &result : titleResults) {
- const QUrl &url = result.url();
- if (!urls.contains(url)) {
- urls.insert(url);
- m_searchResults.append(result);
- }
- }
-
- for (const QHelpSearchResult &result : contentResults) {
- const QUrl &url = result.url();
- if (!urls.contains(url)) {
- urls.insert(url);
- m_searchResults.append(result);
- }
- }
- }
- }
- QSqlDatabase::removeDatabase(uniqueId);
-}
-
-QList<QHelpSearchResult> Reader::searchResults() const
-{
- return m_searchResults;
-}
-
-static bool attributesMatchFilter(const QStringList &attributes,
- const QStringList &filter)
-{
- for (const QString &attribute : filter) {
- if (!attributes.contains(attribute, Qt::CaseInsensitive))
- return false;
- }
-
- return true;
-}
-
-void QHelpSearchIndexReaderDefault::run()
-{
- QMutexLocker lock(&m_mutex);
-
- if (m_cancel)
- return;
-
- const QString searchInput = m_searchInput;
- const QString collectionFile = m_collectionFile;
- const QString indexPath = m_indexFilesFolder;
- const bool usesFilterEngine = m_usesFilterEngine;
-
- lock.unlock();
-
- QHelpEngineCore engine(collectionFile, nullptr);
- if (!engine.setupData())
- return;
-
- emit searchingStarted();
-
- // setup the reader
- m_reader.setIndexPath(indexPath);
-
- if (usesFilterEngine) {
- m_reader.setFilterEngineNamespaceList(
- engine.filterEngine()->namespacesForFilter(
- engine.filterEngine()->activeFilter()));
- } else {
- const QStringList &registeredDocs = engine.registeredDocumentations();
- const QStringList &currentFilter = engine.filterAttributes(engine.currentFilter());
-
- for (const QString &namespaceName : registeredDocs) {
- const QList<QStringList> &attributeSets =
- engine.filterAttributeSets(namespaceName);
-
- for (const QStringList &attributes : attributeSets) {
- if (attributesMatchFilter(attributes, currentFilter)) {
- m_reader.addNamespaceAttributes(namespaceName, attributes);
- }
- }
- }
- }
-
- lock.relock();
- if (m_cancel) {
- emit searchingFinished(0); // TODO: check this, speed issue while locking???
- return;
- }
- lock.unlock();
-
- m_searchResults.clear();
- m_reader.searchInDB(searchInput); // TODO: should this be interruptible as well ???
-
- lock.relock();
- m_searchResults = m_reader.searchResults();
- lock.unlock();
-
- emit searchingFinished(m_searchResults.count());
-}
-
-} // namespace std
-} // namespace fulltextsearch
-
-QT_END_NAMESPACE
diff --git a/src/assistant/help/qhelpsearchindexreader_default_p.h b/src/assistant/help/qhelpsearchindexreader_default_p.h
deleted file mode 100644
index 6990b2c21..000000000
--- a/src/assistant/help/qhelpsearchindexreader_default_p.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QHELPSEARCHINDEXREADERDEFAULT_H
-#define QHELPSEARCHINDEXREADERDEFAULT_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists for the convenience
-// of the help generator tools. This header file may change from version
-// to version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qhelpsearchindexreader_p.h"
-
-QT_FORWARD_DECLARE_CLASS(QSqlDatabase)
-
-QT_BEGIN_NAMESPACE
-
-namespace fulltextsearch {
-namespace qt {
-
-class Reader
-{
-public:
- void setIndexPath(const QString &path);
- void addNamespaceAttributes(const QString &namespaceName, const QStringList &attributes);
- void setFilterEngineNamespaceList(const QStringList &namespaceList);
-
- void searchInDB(const QString &term);
- QList<QHelpSearchResult> searchResults() const;
-
-private:
- QList<QHelpSearchResult> queryTable(const QSqlDatabase &db,
- const QString &tableName,
- const QString &searchInput) const;
-
- QMultiMap<QString, QStringList> m_namespaceAttributes;
- QStringList m_filterEngineNamespaceList;
- QList<QHelpSearchResult> m_searchResults;
- QString m_indexPath;
- bool m_useFilterEngine = false;
-};
-
-
-class QHelpSearchIndexReaderDefault : public QHelpSearchIndexReader
-{
- Q_OBJECT
-
-private:
- void run() override;
-
-private:
- Reader m_reader;
-};
-
-} // namespace std
-} // namespace fulltextsearch
-
-QT_END_NAMESPACE
-
-#endif // QHELPSEARCHINDEXREADERDEFAULT_H
diff --git a/src/assistant/help/qhelpsearchindexreader_p.h b/src/assistant/help/qhelpsearchindexreader_p.h
index 883446fea..835c44f97 100644
--- a/src/assistant/help/qhelpsearchindexreader_p.h
+++ b/src/assistant/help/qhelpsearchindexreader_p.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QHELPSEARCHINDEXREADER_H
#define QHELPSEARCHINDEXREADER_H
@@ -51,18 +15,17 @@
// We mean it.
//
-#include "qhelpsearchengine.h"
+#include "qhelpsearchresult.h"
-#include <QtCore/QList>
-#include <QtCore/QMutex>
-#include <QtCore/QThread>
+#include <QtCore/qlist.h>
+#include <QtCore/qmutex.h>
+#include <QtCore/qthread.h>
QT_BEGIN_NAMESPACE
-class QHelpEngineCore;
-
namespace fulltextsearch {
+// TODO: Employ QFuture / QtConcurrent::run() ?
class QHelpSearchIndexReader : public QThread
{
Q_OBJECT
@@ -71,10 +34,8 @@ public:
~QHelpSearchIndexReader() override;
void cancelSearching();
- void search(const QString &collectionFile,
- const QString &indexFilesFolder,
- const QString &searchInput,
- bool usesFilterEngine = false);
+ void search(const QString &collectionFile, const QString &indexFilesFolder,
+ const QString &searchInput, bool usesFilterEngine = false);
int searchResultCount() const;
QList<QHelpSearchResult> searchResults(int start, int end) const;
@@ -82,7 +43,9 @@ signals:
void searchingStarted();
void searchingFinished(int searchResultCount);
-protected:
+private:
+ void run() override;
+
mutable QMutex m_mutex;
QList<QHelpSearchResult> m_searchResults;
bool m_cancel = false;
@@ -90,13 +53,10 @@ protected:
QString m_searchInput;
QString m_indexFilesFolder;
bool m_usesFilterEngine = false;
-
-private:
- void run() override = 0;
};
-} // namespace fulltextsearch
+} // namespace fulltextsearch
QT_END_NAMESPACE
-#endif // QHELPSEARCHINDEXREADER_H
+#endif // QHELPSEARCHINDEXREADER_H
diff --git a/src/assistant/help/qhelpsearchindexwriter.cpp b/src/assistant/help/qhelpsearchindexwriter.cpp
new file mode 100644
index 000000000..2cccbade3
--- /dev/null
+++ b/src/assistant/help/qhelpsearchindexwriter.cpp
@@ -0,0 +1,515 @@
+// Copyright (C) 2016 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 "qhelpsearchindexwriter_p.h"
+#include "qhelp_global.h"
+#include "qhelpdbreader_p.h"
+#include "qhelpenginecore.h"
+
+#include <QtCore/qdatastream.h>
+#include <QtCore/qdatetime.h>
+#include <QtCore/qdir.h>
+#include <QtCore/qstringconverter.h>
+#include <QtCore/qtextstream.h>
+#include <QtCore/qurl.h>
+#include <QtCore/qvariant.h>
+#include <QtGui/qtextdocument.h>
+#include <QtSql/qsqldatabase.h>
+#include <QtSql/qsqldriver.h>
+#include <QtSql/qsqlerror.h>
+#include <QtSql/qsqlquery.h>
+
+QT_BEGIN_NAMESPACE
+
+using namespace Qt::StringLiterals;
+
+namespace fulltextsearch {
+
+const char FTS_DB_NAME[] = "fts";
+
+class Writer
+{
+public:
+ Writer(const QString &path);
+ ~Writer();
+
+ bool tryInit(bool reindex);
+ void flush();
+
+ void removeNamespace(const QString &namespaceName);
+ bool hasNamespace(const QString &namespaceName);
+ void insertDoc(const QString &namespaceName,
+ const QString &attributes,
+ const QString &url,
+ const QString &title,
+ const QString &contents);
+ void startTransaction();
+ void endTransaction();
+
+private:
+ void init(bool reindex);
+ bool hasDB();
+ void clearLegacyIndex();
+
+ const QString m_dbDir;
+ QString m_uniqueId;
+
+ bool m_needOptimize = false;
+ QSqlDatabase m_db;
+ QVariantList m_namespaces;
+ QVariantList m_attributes;
+ QVariantList m_urls;
+ QVariantList m_titles;
+ QVariantList m_contents;
+};
+
+Writer::Writer(const QString &path)
+ : m_dbDir(path)
+{
+ clearLegacyIndex();
+ QDir().mkpath(m_dbDir);
+ m_uniqueId = QHelpGlobal::uniquifyConnectionName("QHelpWriter"_L1, this);
+ m_db = QSqlDatabase::addDatabase("QSQLITE"_L1, m_uniqueId);
+ const QString dbPath = m_dbDir + u'/' + QLatin1StringView(FTS_DB_NAME);
+ m_db.setDatabaseName(dbPath);
+ if (!m_db.open()) {
+ const QString &error = QHelpSearchIndexWriter::tr(
+ "Cannot open database \"%1\" using connection \"%2\": %3")
+ .arg(dbPath, m_uniqueId, m_db.lastError().text());
+ qWarning("%s", qUtf8Printable(error));
+ m_db = {};
+ QSqlDatabase::removeDatabase(m_uniqueId);
+ m_uniqueId.clear();
+ } else {
+ startTransaction();
+ }
+}
+
+bool Writer::tryInit(bool reindex)
+{
+ if (!m_db.isValid())
+ return true;
+
+ QSqlQuery query(m_db);
+ // HACK: we try to perform any modifying command just to check if
+ // we don't get SQLITE_BUSY code (SQLITE_BUSY is defined to 5 in sqlite driver)
+ if (!query.exec("CREATE TABLE foo ();"_L1) && query.lastError().nativeErrorCode() == "5"_L1) // db is locked
+ return false;
+
+ // HACK: clear what we have created
+ query.exec("DROP TABLE foo;"_L1);
+
+ init(reindex);
+ return true;
+}
+
+bool Writer::hasDB()
+{
+ if (!m_db.isValid())
+ return false;
+
+ QSqlQuery query(m_db);
+ query.prepare("SELECT id FROM info LIMIT 1"_L1);
+ query.exec();
+ return query.next();
+}
+
+void Writer::clearLegacyIndex()
+{
+ // Clear old legacy clucene index.
+ // More important in case of Creator, since
+ // the index folder is common for all Creator versions
+ QDir dir(m_dbDir);
+ if (!dir.exists())
+ return;
+
+ const QStringList &list = dir.entryList(QDir::Files | QDir::Hidden);
+ if (!list.contains(QLatin1StringView(FTS_DB_NAME))) {
+ for (const QString &item : list)
+ dir.remove(item);
+ }
+}
+
+void Writer::init(bool reindex)
+{
+ if (!m_db.isValid())
+ return;
+
+ QSqlQuery query(m_db);
+
+ if (reindex && hasDB()) {
+ m_needOptimize = true;
+
+ query.exec("DROP TABLE titles;"_L1);
+ query.exec("DROP TABLE contents;"_L1);
+ query.exec("DROP TABLE info;"_L1);
+ }
+
+ query.exec("CREATE TABLE info (id INTEGER PRIMARY KEY, namespace, attributes, url, title, data);"_L1);
+
+ query.exec("CREATE VIRTUAL TABLE titles USING fts5("
+ "namespace UNINDEXED, attributes UNINDEXED, "
+ "url UNINDEXED, title, "
+ "tokenize = 'porter unicode61', content = 'info', content_rowid='id');"_L1);
+ query.exec("CREATE TRIGGER titles_insert AFTER INSERT ON info BEGIN "
+ "INSERT INTO titles(rowid, namespace, attributes, url, title) "
+ "VALUES(new.id, new.namespace, new.attributes, new.url, new.title); "
+ "END;"_L1);
+ query.exec("CREATE TRIGGER titles_delete AFTER DELETE ON info BEGIN "
+ "INSERT INTO titles(titles, rowid, namespace, attributes, url, title) "
+ "VALUES('delete', old.id, old.namespace, old.attributes, old.url, old.title); "
+ "END;"_L1);
+ query.exec("CREATE TRIGGER titles_update AFTER UPDATE ON info BEGIN "
+ "INSERT INTO titles(titles, rowid, namespace, attributes, url, title) "
+ "VALUES('delete', old.id, old.namespace, old.attributes, old.url, old.title); "
+ "INSERT INTO titles(rowid, namespace, attributes, url, title) "
+ "VALUES(new.id, new.namespace, new.attributes, new.url, new.title); "
+ "END;"_L1);
+
+ query.exec("CREATE VIRTUAL TABLE contents USING fts5("
+ "namespace UNINDEXED, attributes UNINDEXED, "
+ "url UNINDEXED, title, data, "
+ "tokenize = 'porter unicode61', content = 'info', content_rowid='id');"_L1);
+ query.exec("CREATE TRIGGER contents_insert AFTER INSERT ON info BEGIN "
+ "INSERT INTO contents(rowid, namespace, attributes, url, title, data) "
+ "VALUES(new.id, new.namespace, new.attributes, new.url, new.title, new.data); "
+ "END;"_L1);
+ query.exec("CREATE TRIGGER contents_delete AFTER DELETE ON info BEGIN "
+ "INSERT INTO contents(contents, rowid, namespace, attributes, url, title, data) "
+ "VALUES('delete', old.id, old.namespace, old.attributes, old.url, old.title, old.data); "
+ "END;"_L1);
+ query.exec("CREATE TRIGGER contents_update AFTER UPDATE ON info BEGIN "
+ "INSERT INTO contents(contents, rowid, namespace, attributes, url, title, data) "
+ "VALUES('delete', old.id, old.namespace, old.attributes, old.url, old.title, old.data); "
+ "INSERT INTO contents(rowid, namespace, attributes, url, title, data) "
+ "VALUES(new.id, new.namespace, new.attributes, new.url, new.title, new.data); "
+ "END;"_L1);
+}
+
+Writer::~Writer()
+{
+ if (m_db.isValid())
+ m_db.close();
+ m_db = {};
+ if (!m_uniqueId.isEmpty())
+ QSqlDatabase::removeDatabase(m_uniqueId);
+}
+
+void Writer::flush()
+{
+ if (!m_db.isValid())
+ return;
+
+ QSqlQuery query(m_db);
+ query.prepare("INSERT INTO info (namespace, attributes, url, title, data) VALUES (?, ?, ?, ?, ?)"_L1);
+ query.addBindValue(m_namespaces);
+ query.addBindValue(m_attributes);
+ query.addBindValue(m_urls);
+ query.addBindValue(m_titles);
+ query.addBindValue(m_contents);
+ query.execBatch();
+
+ m_namespaces.clear();
+ m_attributes.clear();
+ m_urls.clear();
+ m_titles.clear();
+ m_contents.clear();
+}
+
+void Writer::removeNamespace(const QString &namespaceName)
+{
+ if (!m_db.isValid() || !hasNamespace(namespaceName)) // no data to delete
+ return;
+
+ m_needOptimize = true;
+ QSqlQuery query(m_db);
+ query.prepare("DELETE FROM info WHERE namespace = ?"_L1);
+ query.addBindValue(namespaceName);
+ query.exec();
+}
+
+bool Writer::hasNamespace(const QString &namespaceName)
+{
+ if (!m_db.isValid())
+ return false;
+
+ QSqlQuery query(m_db);
+ query.prepare("SELECT id FROM info WHERE namespace = ? LIMIT 1"_L1);
+ query.addBindValue(namespaceName);
+ query.exec();
+ return query.next();
+}
+
+void Writer::insertDoc(const QString &namespaceName,
+ const QString &attributes,
+ const QString &url,
+ const QString &title,
+ const QString &contents)
+{
+ m_namespaces.append(namespaceName);
+ m_attributes.append(attributes);
+ m_urls.append(url);
+ m_titles.append(title);
+ m_contents.append(contents);
+}
+
+void Writer::startTransaction()
+{
+ if (!m_db.isValid())
+ return;
+
+ m_needOptimize = false;
+ if (m_db.driver()->hasFeature(QSqlDriver::Transactions))
+ m_db.transaction();
+}
+
+void Writer::endTransaction()
+{
+ if (!m_db.isValid())
+ return;
+
+ QSqlQuery query(m_db);
+
+ if (m_needOptimize) {
+ query.exec("INSERT INTO titles(titles) VALUES('rebuild')"_L1);
+ query.exec("INSERT INTO contents(contents) VALUES('rebuild')"_L1);
+ }
+
+ if (m_db.driver()->hasFeature(QSqlDriver::Transactions))
+ m_db.commit();
+
+ if (m_needOptimize)
+ query.exec("VACUUM"_L1);
+}
+
+QHelpSearchIndexWriter::~QHelpSearchIndexWriter()
+{
+ m_mutex.lock();
+ this->m_cancel = true;
+ m_mutex.unlock();
+ wait();
+}
+
+void QHelpSearchIndexWriter::cancelIndexing()
+{
+ QMutexLocker lock(&m_mutex);
+ m_cancel = true;
+}
+
+void QHelpSearchIndexWriter::updateIndex(const QString &collectionFile,
+ const QString &indexFilesFolder, bool reindex)
+{
+ wait();
+ QMutexLocker lock(&m_mutex);
+
+ m_cancel = false;
+ m_reindex = reindex;
+ m_collectionFile = collectionFile;
+ m_indexFilesFolder = indexFilesFolder;
+
+ lock.unlock();
+
+ start(QThread::LowestPriority);
+}
+
+static const char IndexedNamespacesKey[] = "FTS5IndexedNamespaces";
+
+static QMap<QString, QDateTime> readIndexMap(const QHelpEngineCore &engine)
+{
+ QMap<QString, QDateTime> indexMap;
+ QDataStream dataStream(
+ engine.customValue(QLatin1StringView(IndexedNamespacesKey)).toByteArray());
+ dataStream >> indexMap;
+ return indexMap;
+}
+
+static bool writeIndexMap(QHelpEngineCore *engine, const QMap<QString, QDateTime> &indexMap)
+{
+ QByteArray data;
+ QDataStream dataStream(&data, QIODevice::ReadWrite);
+ dataStream << indexMap;
+ return engine->setCustomValue(QLatin1StringView(IndexedNamespacesKey), data);
+}
+
+static bool clearIndexMap(QHelpEngineCore *engine)
+{
+ return engine->removeCustomValue(QLatin1StringView(IndexedNamespacesKey));
+}
+
+void QHelpSearchIndexWriter::run()
+{
+ QMutexLocker lock(&m_mutex);
+
+ if (m_cancel)
+ return;
+
+ const bool reindex(m_reindex);
+ const QString collectionFile(m_collectionFile);
+ const QString indexPath(m_indexFilesFolder);
+
+ lock.unlock();
+
+ QHelpEngineCore engine(collectionFile, nullptr);
+ if (!engine.setupData())
+ return;
+
+ if (reindex)
+ clearIndexMap(&engine);
+
+ emit indexingStarted();
+
+ Writer writer(indexPath);
+
+ while (!writer.tryInit(reindex))
+ sleep(1);
+
+ const QStringList &registeredDocs = engine.registeredDocumentations();
+ QMap<QString, QDateTime> indexMap = readIndexMap(engine);
+
+ if (!reindex) {
+ for (const QString &namespaceName : registeredDocs) {
+ const auto it = indexMap.constFind(namespaceName);
+ if (it != indexMap.constEnd()) {
+ const QString path = engine.documentationFileName(namespaceName);
+ if (*it < QFileInfo(path).lastModified()) {
+ // Remove some outdated indexed stuff
+ indexMap.erase(it);
+ writer.removeNamespace(namespaceName);
+ } else if (!writer.hasNamespace(namespaceName)) {
+ // No data in fts db for namespace.
+ // The namespace could have been removed from fts db
+ // or the whole fts db have been removed
+ // without removing it from indexMap.
+ indexMap.erase(it);
+ }
+ } else {
+ // Needed in case namespaceName was removed from indexMap
+ // without removing it from fts db.
+ // May happen when e.g. qch file was removed manually
+ // without removing fts db.
+ writer.removeNamespace(namespaceName);
+ }
+ // TODO: we may also detect if there are any other data
+ // and remove it
+ }
+ } else {
+ indexMap.clear();
+ }
+
+ auto it = indexMap.begin();
+ while (it != indexMap.end()) {
+ if (!registeredDocs.contains(it.key())) {
+ writer.removeNamespace(it.key());
+ it = indexMap.erase(it);
+ } else {
+ ++it;
+ }
+ }
+
+ for (const QString &namespaceName : registeredDocs) {
+ lock.relock();
+ if (m_cancel) {
+ // store what we have done so far
+ writeIndexMap(&engine, indexMap);
+ writer.endTransaction();
+ emit indexingFinished();
+ return;
+ }
+ lock.unlock();
+
+ // if indexed, continue
+ if (indexMap.contains(namespaceName))
+ continue;
+
+ const QString fileName = engine.documentationFileName(namespaceName);
+ QHelpDBReader reader(fileName, QHelpGlobal::uniquifyConnectionName(
+ fileName, this), nullptr);
+ if (!reader.init())
+ continue;
+
+ const QString virtualFolder = reader.virtualFolder();
+
+ const QList<QStringList> &attributeSets =
+ engine.filterAttributeSets(namespaceName);
+
+ for (const QStringList &attributes : attributeSets) {
+ const QString &attributesString = attributes.join(u'|');
+
+ const auto htmlFiles = reader.filesData(attributes, "html"_L1);
+ const auto htmFiles = reader.filesData(attributes, "htm"_L1);
+ const auto txtFiles = reader.filesData(attributes, "txt"_L1);
+
+ auto files = htmlFiles;
+ files.unite(htmFiles);
+ files.unite(txtFiles);
+
+ for (auto it = files.cbegin(), end = files.cend(); it != end ; ++it) {
+ lock.relock();
+ if (m_cancel) {
+ // store what we have done so far
+ writeIndexMap(&engine, indexMap);
+ writer.endTransaction();
+ emit indexingFinished();
+ return;
+ }
+ lock.unlock();
+
+ const QString &file = it.key();
+ const QByteArray &data = it.value();
+
+ if (data.isEmpty())
+ continue;
+
+ QUrl url;
+ url.setScheme("qthelp"_L1);
+ url.setAuthority(namespaceName);
+ url.setPath(u'/' + virtualFolder + u'/' + file);
+
+ if (url.hasFragment())
+ url.setFragment({});
+
+ const QString &fullFileName = url.toString();
+ if (!fullFileName.endsWith(".html"_L1) && !fullFileName.endsWith(".htm"_L1)
+ && !fullFileName.endsWith(".txt"_L1)) {
+ continue;
+ }
+
+ QTextStream s(data);
+ auto encoding = QStringDecoder::encodingForHtml(data);
+ if (encoding)
+ s.setEncoding(*encoding);
+
+ const QString &text = s.readAll();
+ if (text.isEmpty())
+ continue;
+
+ QString title;
+ QString contents;
+ if (fullFileName.endsWith(".txt"_L1)) {
+ title = fullFileName.mid(fullFileName.lastIndexOf(u'/') + 1);
+ contents = text.toHtmlEscaped();
+ } else {
+ QTextDocument doc;
+ doc.setHtml(text);
+
+ title = doc.metaInformation(QTextDocument::DocumentTitle).toHtmlEscaped();
+ contents = doc.toPlainText().toHtmlEscaped();
+ }
+
+ writer.insertDoc(namespaceName, attributesString, fullFileName, title, contents);
+ }
+ }
+ writer.flush();
+ const QString &path = engine.documentationFileName(namespaceName);
+ indexMap.insert(namespaceName, QFileInfo(path).lastModified());
+ }
+
+ writeIndexMap(&engine, indexMap);
+
+ writer.endTransaction();
+ emit indexingFinished();
+}
+
+} // namespace fulltextsearch
+
+QT_END_NAMESPACE
diff --git a/src/assistant/help/qhelpsearchindexwriter_default.cpp b/src/assistant/help/qhelpsearchindexwriter_default.cpp
deleted file mode 100644
index 2e70ffaa8..000000000
--- a/src/assistant/help/qhelpsearchindexwriter_default.cpp
+++ /dev/null
@@ -1,543 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qhelpsearchindexwriter_default_p.h"
-#include "qhelp_global.h"
-#include "qhelpenginecore.h"
-#include "qhelpdbreader_p.h"
-
-#include <QtCore/QDataStream>
-#include <QtCore/QDateTime>
-#include <QtCore/QDir>
-#include <QtCore/QStringDecoder>
-#include <QtCore/QTextStream>
-#include <QtCore/QSet>
-#include <QtCore/QUrl>
-#include <QtCore/QVariant>
-#include <QtSql/QSqlDatabase>
-#include <QtSql/QSqlDriver>
-#include <QtSql/QSqlError>
-#include <QtSql/QSqlQuery>
-
-#include <QTextDocument>
-
-QT_BEGIN_NAMESPACE
-
-namespace fulltextsearch {
-namespace qt {
-
-const char FTS_DB_NAME[] = "fts";
-
-Writer::Writer(const QString &path)
- : m_dbDir(path)
-{
- clearLegacyIndex();
- QDir().mkpath(m_dbDir);
- m_uniqueId = QHelpGlobal::uniquifyConnectionName(QLatin1String("QHelpWriter"), this);
- m_db = new QSqlDatabase();
- *m_db = QSqlDatabase::addDatabase(QLatin1String("QSQLITE"), m_uniqueId);
- const QString dbPath = m_dbDir + QLatin1Char('/') + QLatin1String(FTS_DB_NAME);
- m_db->setDatabaseName(dbPath);
- if (!m_db->open()) {
- const QString &error = QHelpSearchIndexWriter::tr("Cannot open database \"%1\" using connection \"%2\": %3")
- .arg(dbPath, m_uniqueId, m_db->lastError().text());
- qWarning("%s", qUtf8Printable(error));
- delete m_db;
- m_db = nullptr;
- QSqlDatabase::removeDatabase(m_uniqueId);
- m_uniqueId = QString();
- } else {
- startTransaction();
- }
-}
-
-bool Writer::tryInit(bool reindex)
-{
- if (!m_db)
- return true;
-
- QSqlQuery query(*m_db);
- // HACK: we try to perform any modifying command just to check if
- // we don't get SQLITE_BUSY code (SQLITE_BUSY is defined to 5 in sqlite driver)
- if (!query.exec(QLatin1String("CREATE TABLE foo ();"))) {
- if (query.lastError().nativeErrorCode() == QLatin1String("5")) // db is locked
- return false;
- }
- // HACK: clear what we have created
- query.exec(QLatin1String("DROP TABLE foo;"));
-
- init(reindex);
- return true;
-}
-
-bool Writer::hasDB()
-{
- if (!m_db)
- return false;
-
- QSqlQuery query(*m_db);
-
- query.prepare(QLatin1String("SELECT id FROM info LIMIT 1"));
- query.exec();
-
- return query.next();
-}
-
-void Writer::clearLegacyIndex()
-{
- // Clear old legacy clucene index.
- // More important in case of Creator, since
- // the index folder is common for all Creator versions
- QDir dir(m_dbDir);
- if (!dir.exists())
- return;
-
- const QStringList &list = dir.entryList(QDir::Files | QDir::Hidden);
- if (!list.contains(QLatin1String(FTS_DB_NAME))) {
- for (const QString &item : list)
- dir.remove(item);
- }
-}
-
-void Writer::init(bool reindex)
-{
- if (!m_db)
- return;
-
- QSqlQuery query(*m_db);
-
- if (reindex && hasDB()) {
- m_needOptimize = true;
-
- query.exec(QLatin1String("DROP TABLE titles;"));
- query.exec(QLatin1String("DROP TABLE contents;"));
- query.exec(QLatin1String("DROP TABLE info;"));
- }
-
- query.exec(QLatin1String("CREATE TABLE info (id INTEGER PRIMARY KEY, namespace, attributes, url, title, data);"));
-
- query.exec(QLatin1String("CREATE VIRTUAL TABLE titles USING fts5("
- "namespace UNINDEXED, attributes UNINDEXED, "
- "url UNINDEXED, title, "
- "tokenize = 'porter unicode61', content = 'info', content_rowid='id');"));
- query.exec(QLatin1String("CREATE TRIGGER titles_insert AFTER INSERT ON info BEGIN "
- "INSERT INTO titles(rowid, namespace, attributes, url, title) "
- "VALUES(new.id, new.namespace, new.attributes, new.url, new.title); "
- "END;"));
- query.exec(QLatin1String("CREATE TRIGGER titles_delete AFTER DELETE ON info BEGIN "
- "INSERT INTO titles(titles, rowid, namespace, attributes, url, title) "
- "VALUES('delete', old.id, old.namespace, old.attributes, old.url, old.title); "
- "END;"));
- query.exec(QLatin1String("CREATE TRIGGER titles_update AFTER UPDATE ON info BEGIN "
- "INSERT INTO titles(titles, rowid, namespace, attributes, url, title) "
- "VALUES('delete', old.id, old.namespace, old.attributes, old.url, old.title); "
- "INSERT INTO titles(rowid, namespace, attributes, url, title) "
- "VALUES(new.id, new.namespace, new.attributes, new.url, new.title); "
- "END;"));
-
- query.exec(QLatin1String("CREATE VIRTUAL TABLE contents USING fts5("
- "namespace UNINDEXED, attributes UNINDEXED, "
- "url UNINDEXED, title, data, "
- "tokenize = 'porter unicode61', content = 'info', content_rowid='id');"));
- query.exec(QLatin1String("CREATE TRIGGER contents_insert AFTER INSERT ON info BEGIN "
- "INSERT INTO contents(rowid, namespace, attributes, url, title, data) "
- "VALUES(new.id, new.namespace, new.attributes, new.url, new.title, new.data); "
- "END;"));
- query.exec(QLatin1String("CREATE TRIGGER contents_delete AFTER DELETE ON info BEGIN "
- "INSERT INTO contents(contents, rowid, namespace, attributes, url, title, data) "
- "VALUES('delete', old.id, old.namespace, old.attributes, old.url, old.title, old.data); "
- "END;"));
- query.exec(QLatin1String("CREATE TRIGGER contents_update AFTER UPDATE ON info BEGIN "
- "INSERT INTO contents(contents, rowid, namespace, attributes, url, title, data) "
- "VALUES('delete', old.id, old.namespace, old.attributes, old.url, old.title, old.data); "
- "INSERT INTO contents(rowid, namespace, attributes, url, title, data) "
- "VALUES(new.id, new.namespace, new.attributes, new.url, new.title, new.data); "
- "END;"));
-}
-
-Writer::~Writer()
-{
- if (m_db) {
- m_db->close();
- delete m_db;
- }
-
- if (!m_uniqueId.isEmpty())
- QSqlDatabase::removeDatabase(m_uniqueId);
-}
-
-void Writer::flush()
-{
- if (!m_db)
- return;
-
- QSqlQuery query(*m_db);
-
- query.prepare(QLatin1String("INSERT INTO info (namespace, attributes, url, title, data) VALUES (?, ?, ?, ?, ?)"));
- query.addBindValue(m_namespaces);
- query.addBindValue(m_attributes);
- query.addBindValue(m_urls);
- query.addBindValue(m_titles);
- query.addBindValue(m_contents);
- query.execBatch();
-
- m_namespaces = QVariantList();
- m_attributes = QVariantList();
- m_urls = QVariantList();
- m_titles = QVariantList();
- m_contents = QVariantList();
-}
-
-void Writer::removeNamespace(const QString &namespaceName)
-{
- if (!m_db)
- return;
-
- if (!hasNamespace(namespaceName))
- return; // no data to delete
-
- m_needOptimize = true;
-
- QSqlQuery query(*m_db);
-
- query.prepare(QLatin1String("DELETE FROM info WHERE namespace = ?"));
- query.addBindValue(namespaceName);
- query.exec();
-}
-
-bool Writer::hasNamespace(const QString &namespaceName)
-{
- if (!m_db)
- return false;
-
- QSqlQuery query(*m_db);
-
- query.prepare(QLatin1String("SELECT id FROM info WHERE namespace = ? LIMIT 1"));
- query.addBindValue(namespaceName);
- query.exec();
-
- return query.next();
-}
-
-void Writer::insertDoc(const QString &namespaceName,
- const QString &attributes,
- const QString &url,
- const QString &title,
- const QString &contents)
-{
- m_namespaces.append(namespaceName);
- m_attributes.append(attributes);
- m_urls.append(url);
- m_titles.append(title);
- m_contents.append(contents);
-}
-
-void Writer::startTransaction()
-{
- if (!m_db)
- return;
-
- m_needOptimize = false;
- if (m_db && m_db->driver()->hasFeature(QSqlDriver::Transactions))
- m_db->transaction();
-}
-
-void Writer::endTransaction()
-{
- if (!m_db)
- return;
-
- QSqlQuery query(*m_db);
-
- if (m_needOptimize) {
- query.exec(QLatin1String("INSERT INTO titles(titles) VALUES('rebuild')"));
- query.exec(QLatin1String("INSERT INTO contents(contents) VALUES('rebuild')"));
- }
-
- if (m_db && m_db->driver()->hasFeature(QSqlDriver::Transactions))
- m_db->commit();
-
- if (m_needOptimize)
- query.exec(QLatin1String("VACUUM"));
-}
-
-QHelpSearchIndexWriter::QHelpSearchIndexWriter()
- : QThread()
- , m_cancel(false)
-{
-}
-
-QHelpSearchIndexWriter::~QHelpSearchIndexWriter()
-{
- m_mutex.lock();
- this->m_cancel = true;
- m_mutex.unlock();
-
- wait();
-}
-
-void QHelpSearchIndexWriter::cancelIndexing()
-{
- QMutexLocker lock(&m_mutex);
- m_cancel = true;
-}
-
-void QHelpSearchIndexWriter::updateIndex(const QString &collectionFile,
- const QString &indexFilesFolder,
- bool reindex)
-{
- wait();
- QMutexLocker lock(&m_mutex);
-
- m_cancel = false;
- m_reindex = reindex;
- m_collectionFile = collectionFile;
- m_indexFilesFolder = indexFilesFolder;
-
- lock.unlock();
-
- start(QThread::LowestPriority);
-}
-
-static const char IndexedNamespacesKey[] = "FTS5IndexedNamespaces";
-
-static QMap<QString, QDateTime> readIndexMap(const QHelpEngineCore &engine)
-{
- QMap<QString, QDateTime> indexMap;
- QDataStream dataStream(engine.customValue(
- QLatin1String(IndexedNamespacesKey)).toByteArray());
- dataStream >> indexMap;
- return indexMap;
-}
-
-static bool writeIndexMap(QHelpEngineCore *engine,
- const QMap<QString, QDateTime> &indexMap)
-{
- QByteArray data;
-
- QDataStream dataStream(&data, QIODevice::ReadWrite);
- dataStream << indexMap;
-
- return engine->setCustomValue(
- QLatin1String(IndexedNamespacesKey), data);
-}
-
-static bool clearIndexMap(QHelpEngineCore *engine)
-{
- return engine->removeCustomValue(QLatin1String(IndexedNamespacesKey));
-}
-
-void QHelpSearchIndexWriter::run()
-{
- QMutexLocker lock(&m_mutex);
-
- if (m_cancel)
- return;
-
- const bool reindex(m_reindex);
- const QString collectionFile(m_collectionFile);
- const QString indexPath(m_indexFilesFolder);
-
- lock.unlock();
-
- QHelpEngineCore engine(collectionFile, nullptr);
- if (!engine.setupData())
- return;
-
- if (reindex)
- clearIndexMap(&engine);
-
- emit indexingStarted();
-
- Writer writer(indexPath);
-
- while (!writer.tryInit(reindex))
- sleep(1);
-
- const QStringList &registeredDocs = engine.registeredDocumentations();
- QMap<QString, QDateTime> indexMap = readIndexMap(engine);
-
- if (!reindex) {
- for (const QString &namespaceName : registeredDocs) {
- if (indexMap.contains(namespaceName)) {
- const QString path = engine.documentationFileName(namespaceName);
- if (indexMap.value(namespaceName) < QFileInfo(path).lastModified()) {
- // Remove some outdated indexed stuff
- indexMap.remove(namespaceName);
- writer.removeNamespace(namespaceName);
- } else if (!writer.hasNamespace(namespaceName)) {
- // No data in fts db for namespace.
- // The namespace could have been removed from fts db
- // or the whole fts db have been removed
- // without removing it from indexMap.
- indexMap.remove(namespaceName);
- }
- } else {
- // Needed in case namespaceName was removed from indexMap
- // without removing it from fts db.
- // May happen when e.g. qch file was removed manually
- // without removing fts db.
- writer.removeNamespace(namespaceName);
- }
- // TODO: we may also detect if there are any other data
- // and remove it
- }
- } else {
- indexMap.clear();
- }
-
- for (const QString &namespaceName : indexMap.keys()) {
- if (!registeredDocs.contains(namespaceName)) {
- indexMap.remove(namespaceName);
- writer.removeNamespace(namespaceName);
- }
- }
-
- for (const QString &namespaceName : registeredDocs) {
- lock.relock();
- if (m_cancel) {
- // store what we have done so far
- writeIndexMap(&engine, indexMap);
- writer.endTransaction();
- emit indexingFinished();
- return;
- }
- lock.unlock();
-
- // if indexed, continue
- if (indexMap.contains(namespaceName))
- continue;
-
- const QString fileName = engine.documentationFileName(namespaceName);
- QHelpDBReader reader(fileName, QHelpGlobal::uniquifyConnectionName(
- fileName, this), nullptr);
- if (!reader.init())
- continue;
-
- const QString virtualFolder = reader.virtualFolder();
-
- const QList<QStringList> &attributeSets =
- engine.filterAttributeSets(namespaceName);
-
- for (const QStringList &attributes : attributeSets) {
- const QString &attributesString = attributes.join(QLatin1Char('|'));
-
- const QMultiMap<QString, QByteArray> htmlFiles =
- reader.filesData(attributes, QLatin1String("html"));
- const QMultiMap<QString, QByteArray> htmFiles =
- reader.filesData(attributes, QLatin1String("htm"));
- const QMultiMap<QString, QByteArray> txtFiles =
- reader.filesData(attributes, QLatin1String("txt"));
-
- QMultiMap<QString, QByteArray> files = htmlFiles;
- files.unite(htmFiles);
- files.unite(txtFiles);
-
- for (auto it = files.cbegin(), end = files.cend(); it != end ; ++it) {
- lock.relock();
- if (m_cancel) {
- // store what we have done so far
- writeIndexMap(&engine, indexMap);
- writer.endTransaction();
- emit indexingFinished();
- return;
- }
- lock.unlock();
-
- const QString &file = it.key();
- const QByteArray &data = it.value();
-
- if (data.isEmpty())
- continue;
-
- QUrl url;
- url.setScheme(QLatin1String("qthelp"));
- url.setAuthority(namespaceName);
- url.setPath(QLatin1Char('/') + virtualFolder + QLatin1Char('/') + file);
-
- if (url.hasFragment())
- url.setFragment(QString());
-
- const QString &fullFileName = url.toString();
- if (!fullFileName.endsWith(QLatin1String(".html"))
- && !fullFileName.endsWith(QLatin1String(".htm"))
- && !fullFileName.endsWith(QLatin1String(".txt"))) {
- continue;
- }
-
- QTextStream s(data);
- auto encoding = QStringDecoder::encodingForHtml(data.constData(), data.size());
- if (encoding)
- s.setEncoding(*encoding);
-
- const QString &text = s.readAll();
- if (text.isEmpty())
- continue;
-
- QString title;
- QString contents;
- if (fullFileName.endsWith(QLatin1String(".txt"))) {
- title = fullFileName.mid(fullFileName.lastIndexOf(QLatin1Char('/')) + 1);
- contents = text.toHtmlEscaped();
- } else {
- QTextDocument doc;
- doc.setHtml(text);
-
- title = doc.metaInformation(QTextDocument::DocumentTitle).toHtmlEscaped();
- contents = doc.toPlainText().toHtmlEscaped();
- }
-
- writer.insertDoc(namespaceName, attributesString, fullFileName, title, contents);
- }
- }
- writer.flush();
- const QString &path = engine.documentationFileName(namespaceName);
- indexMap.insert(namespaceName, QFileInfo(path).lastModified());
- }
-
- writeIndexMap(&engine, indexMap);
-
- writer.endTransaction();
- emit indexingFinished();
-}
-
-} // namespace std
-} // namespace fulltextsearch
-
-QT_END_NAMESPACE
diff --git a/src/assistant/help/qhelpsearchindexwriter_default_p.h b/src/assistant/help/qhelpsearchindexwriter_default_p.h
deleted file mode 100644
index d6233d574..000000000
--- a/src/assistant/help/qhelpsearchindexwriter_default_p.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QHELPSEARCHINDEXWRITERDEFAULT_H
-#define QHELPSEARCHINDEXWRITERDEFAULT_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists for the convenience
-// of the help generator tools. This header file may change from version
-// to version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/QMutex>
-#include <QtCore/QThread>
-
-QT_FORWARD_DECLARE_CLASS(QSqlDatabase)
-
-QT_BEGIN_NAMESPACE
-
-namespace fulltextsearch {
-namespace qt {
-
-class Writer
-{
-public:
- Writer(const QString &path);
- ~Writer();
-
- bool tryInit(bool reindex);
- void flush();
-
- void removeNamespace(const QString &namespaceName);
- bool hasNamespace(const QString &namespaceName);
- void insertDoc(const QString &namespaceName,
- const QString &attributes,
- const QString &url,
- const QString &title,
- const QString &contents);
- void startTransaction();
- void endTransaction();
-private:
- void init(bool reindex);
- bool hasDB();
- void clearLegacyIndex();
-
- const QString m_dbDir;
- QString m_uniqueId;
-
- bool m_needOptimize = false;
- QSqlDatabase *m_db = nullptr;
- QVariantList m_namespaces;
- QVariantList m_attributes;
- QVariantList m_urls;
- QVariantList m_titles;
- QVariantList m_contents;
-};
-
-
-class QHelpSearchIndexWriter : public QThread
-{
- Q_OBJECT
-
-public:
- QHelpSearchIndexWriter();
- ~QHelpSearchIndexWriter() override;
-
- void cancelIndexing();
- void updateIndex(const QString &collectionFile,
- const QString &indexFilesFolder, bool reindex);
-
-signals:
- void indexingStarted();
- void indexingFinished();
-
-private:
- void run() override;
-
-private:
- QMutex m_mutex;
-
- bool m_cancel;
- bool m_reindex;
- QString m_collectionFile;
- QString m_indexFilesFolder;
-};
-
-} // namespace std
-} // namespace fulltextsearch
-
-QT_END_NAMESPACE
-
-#endif // QHELPSEARCHINDEXWRITERDEFAULT_H
diff --git a/src/assistant/help/qhelpsearchindexwriter_p.h b/src/assistant/help/qhelpsearchindexwriter_p.h
new file mode 100644
index 000000000..61e004794
--- /dev/null
+++ b/src/assistant/help/qhelpsearchindexwriter_p.h
@@ -0,0 +1,58 @@
+// Copyright (C) 2016 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 QHELPSEARCHINDEXWRITER_H
+#define QHELPSEARCHINDEXWRITER_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists for the convenience
+// of the help generator tools. This header file may change from version
+// to version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qmutex.h>
+#include <QtCore/qthread.h>
+
+QT_BEGIN_NAMESPACE
+
+class QSqlDatabase;
+
+namespace fulltextsearch {
+
+// TODO: Employ QFuture / QtConcurrent::run() ?
+class QHelpSearchIndexWriter : public QThread
+{
+ Q_OBJECT
+
+public:
+ ~QHelpSearchIndexWriter() override;
+
+ void cancelIndexing();
+ void updateIndex(const QString &collectionFile, const QString &indexFilesFolder, bool reindex);
+
+signals:
+ void indexingStarted();
+ void indexingFinished();
+
+private:
+ void run() override;
+
+private:
+ QMutex m_mutex;
+
+ bool m_cancel = false;
+ bool m_reindex;
+ QString m_collectionFile;
+ QString m_indexFilesFolder;
+};
+
+} // namespace fulltextsearch
+
+QT_END_NAMESPACE
+
+#endif // QHELPSEARCHINDEXWRITER_H
diff --git a/src/assistant/help/qhelpsearchquerywidget.cpp b/src/assistant/help/qhelpsearchquerywidget.cpp
index 183e317aa..d5e84bacd 100644
--- a/src/assistant/help/qhelpsearchquerywidget.cpp
+++ b/src/assistant/help/qhelpsearchquerywidget.cpp
@@ -1,75 +1,33 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qhelpsearchquerywidget.h"
-#include <QtCore/QAbstractListModel>
-#include <QtCore/QObject>
-#include <QtCore/QStringList>
-#include <QtCore/QtGlobal>
-
-#include <QtWidgets/QCompleter>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QLayout>
-#include <QtWidgets/QLineEdit>
-#include <QtGui/QFocusEvent>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QToolButton>
+#include <QtCore/qabstractitemmodel.h>
+#include <QtCore/qstringlist.h>
+#include <QtGui/qevent.h>
+#include <QtWidgets/qcompleter.h>
+#include <QtWidgets/qlabel.h>
+#include <QtWidgets/qlayout.h>
+#include <QtWidgets/qlineedit.h>
+#include <QtWidgets/qpushbutton.h>
+#include <QtWidgets/qtoolbutton.h>
QT_BEGIN_NAMESPACE
class QHelpSearchQueryWidgetPrivate : public QObject
{
- Q_OBJECT
-
-private:
+public:
struct QueryHistory {
explicit QueryHistory() : curQuery(-1) {}
QStringList queries;
- int curQuery;
+ int curQuery = 0;
};
class CompleterModel : public QAbstractListModel
{
public:
- explicit CompleterModel(QObject *parent)
- : QAbstractListModel(parent) {}
+ explicit CompleterModel(QObject *parent) : QAbstractListModel(parent) { }
int rowCount(const QModelIndex &parent = QModelIndex()) const override
{
@@ -78,9 +36,9 @@ private:
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
{
- if (!index.isValid() || index.row() >= termList.count()||
+ if (!index.isValid() || index.row() >= termList.size()||
(role != Qt::EditRole && role != Qt::DisplayRole))
- return QVariant();
+ return {};
return termList.at(index.row());
}
@@ -97,16 +55,7 @@ private:
QStringList termList;
};
- QHelpSearchQueryWidgetPrivate()
- : QObject()
- , m_searchCompleter(new CompleterModel(this), this)
- {
- }
-
- ~QHelpSearchQueryWidgetPrivate() override
- {
- // nothing todo
- }
+ QHelpSearchQueryWidgetPrivate() : m_searchCompleter(new CompleterModel(this), this) {}
void retranslate()
{
@@ -136,7 +85,7 @@ private:
// Otherwise, the respective button would be disabled.
Q_ASSERT(m_queries.curQuery != maxOrMinIndex);
- m_queries.curQuery = qBound(0, m_queries.curQuery + addend, m_queries.queries.count() - 1);
+ m_queries.curQuery = qBound(0, m_queries.curQuery + addend, m_queries.queries.size() - 1);
const QString &query = m_queries.queries.at(m_queries.curQuery);
m_lineEdit->setText(query);
@@ -148,11 +97,9 @@ private:
void enableOrDisableToolButtons()
{
m_prevQueryButton->setEnabled(m_queries.curQuery > 0);
- m_nextQueryButton->setEnabled(m_queries.curQuery
- < m_queries.queries.size() - 1);
+ m_nextQueryButton->setEnabled(m_queries.curQuery < m_queries.queries.size() - 1);
}
-private slots:
bool eventFilter(QObject *ob, QEvent *event) override
{
if (event->type() == QEvent::KeyPress) {
@@ -167,7 +114,6 @@ private slots:
prevQuery();
return true;
}
-
}
return QObject::eventFilter(ob, event);
}
@@ -183,17 +129,10 @@ private slots:
void nextQuery()
{
- nextOrPrevQuery(m_queries.queries.size() - 1, 1, m_nextQueryButton,
- m_prevQueryButton);
+ nextOrPrevQuery(m_queries.queries.size() - 1, 1, m_nextQueryButton, m_prevQueryButton);
}
- void prevQuery()
- {
- nextOrPrevQuery(0, -1, m_prevQueryButton, m_nextQueryButton);
- }
-
-private:
- friend class QHelpSearchQueryWidget;
+ void prevQuery() { nextOrPrevQuery(0, -1, m_prevQueryButton, m_nextQueryButton); }
QLabel *m_searchLabel = nullptr;
QPushButton *m_searchButton = nullptr;
@@ -227,13 +166,12 @@ private:
*/
QHelpSearchQueryWidget::QHelpSearchQueryWidget(QWidget *parent)
: QWidget(parent)
+ , d(new QHelpSearchQueryWidgetPrivate)
{
- d = new QHelpSearchQueryWidgetPrivate();
-
QVBoxLayout *vLayout = new QVBoxLayout(this);
- vLayout->setContentsMargins(QMargins());
+ vLayout->setContentsMargins({});
- QHBoxLayout* hBoxLayout = new QHBoxLayout();
+ QHBoxLayout* hBoxLayout = new QHBoxLayout;
d->m_searchLabel = new QLabel(this);
d->m_lineEdit = new QLineEdit(this);
d->m_lineEdit->setClearButtonEnabled(true);
@@ -254,18 +192,13 @@ QHelpSearchQueryWidget::QHelpSearchQueryWidget(QWidget *parent)
vLayout->addLayout(hBoxLayout);
- connect(d->m_prevQueryButton, &QAbstractButton::clicked,
- d, &QHelpSearchQueryWidgetPrivate::prevQuery);
- connect(d->m_nextQueryButton, &QAbstractButton::clicked,
- d, &QHelpSearchQueryWidgetPrivate::nextQuery);
- connect(d->m_searchButton, &QAbstractButton::clicked,
- this, &QHelpSearchQueryWidget::search);
- connect(d->m_lineEdit, &QLineEdit::returnPressed,
- this, &QHelpSearchQueryWidget::search);
+ connect(d->m_prevQueryButton, &QAbstractButton::clicked, this, [this] { d->prevQuery(); });
+ connect(d->m_nextQueryButton, &QAbstractButton::clicked, this, [this] { d->nextQuery(); });
+ connect(d->m_searchButton, &QAbstractButton::clicked, this, &QHelpSearchQueryWidget::search);
+ connect(d->m_lineEdit, &QLineEdit::returnPressed, this, &QHelpSearchQueryWidget::search);
d->retranslate();
- connect(this, &QHelpSearchQueryWidget::search,
- d, &QHelpSearchQueryWidgetPrivate::searchRequested);
+ connect(this, &QHelpSearchQueryWidget::search, this, [this] { d->searchRequested(); });
setCompactMode(true);
}
@@ -294,19 +227,21 @@ void QHelpSearchQueryWidget::collapseExtendedSearch()
// TODO: no extended search anymore, deprecate it?
}
+#if QT_DEPRECATED_SINCE(5, 9)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
/*!
- \obsolete
+ \deprecated
Use searchInput() instead.
*/
QList<QHelpSearchQuery> QHelpSearchQueryWidget::query() const
{
- return QList<QHelpSearchQuery>() << QHelpSearchQuery(QHelpSearchQuery::DEFAULT,
- searchInput().split(QChar::Space, Qt::SkipEmptyParts));
+ return {{QHelpSearchQuery::DEFAULT, searchInput().split(QChar::Space, Qt::SkipEmptyParts)}};
}
/*!
- \obsolete
+ \deprecated
Use setSearchInput() instead.
*/
@@ -317,6 +252,8 @@ void QHelpSearchQueryWidget::setQuery(const QList<QHelpSearchQuery> &queryList)
setSearchInput(queryList.first().wordList.join(QChar::Space));
}
+QT_WARNING_POP
+#endif // QT_DEPRECATED_SINCE(5, 9)
/*!
\since 5.9
@@ -327,7 +264,7 @@ void QHelpSearchQueryWidget::setQuery(const QList<QHelpSearchQuery> &queryList)
QString QHelpSearchQueryWidget::searchInput() const
{
if (d->m_queries.queries.isEmpty())
- return QString();
+ return {};
return d->m_queries.queries.last();
}
@@ -343,9 +280,7 @@ QString QHelpSearchQueryWidget::searchInput() const
void QHelpSearchQueryWidget::setSearchInput(const QString &searchInput)
{
d->m_lineEdit->clear();
-
d->m_lineEdit->setText(searchInput);
-
d->searchRequested();
}
@@ -387,5 +322,3 @@ void QHelpSearchQueryWidget::changeEvent(QEvent *event)
}
QT_END_NAMESPACE
-
-#include "qhelpsearchquerywidget.moc"
diff --git a/src/assistant/help/qhelpsearchquerywidget.h b/src/assistant/help/qhelpsearchquerywidget.h
index 52a137db1..148ae0f11 100644
--- a/src/assistant/help/qhelpsearchquerywidget.h
+++ b/src/assistant/help/qhelpsearchquerywidget.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QHELPSEARCHQUERYWIDGET_H
#define QHELPSEARCHQUERYWIDGET_H
@@ -43,15 +7,10 @@
#include <QtHelp/qhelp_global.h>
#include <QtHelp/qhelpsearchengine.h>
-#include <QtCore/QMap>
-#include <QtCore/QString>
-#include <QtCore/QStringList>
-
-#include <QtWidgets/QWidget>
+#include <QtWidgets/qwidget.h>
QT_BEGIN_NAMESPACE
-
class QFocusEvent;
class QHelpSearchQueryWidgetPrivate;
@@ -75,7 +34,9 @@ public:
void setSearchInput(const QString &searchInput);
bool isCompactMode() const;
- Q_SLOT void setCompactMode(bool on);
+
+public Q_SLOTS:
+ void setCompactMode(bool on);
Q_SIGNALS:
void search();
@@ -90,4 +51,4 @@ private:
QT_END_NAMESPACE
-#endif // QHELPSEARCHQUERYWIDGET_H
+#endif // QHELPSEARCHQUERYWIDGET_H
diff --git a/src/assistant/help/qhelpsearchresult.cpp b/src/assistant/help/qhelpsearchresult.cpp
new file mode 100644
index 000000000..a813249d7
--- /dev/null
+++ b/src/assistant/help/qhelpsearchresult.cpp
@@ -0,0 +1,90 @@
+// 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 "qhelpsearchresult.h"
+
+#include <QtCore/qstring.h>
+#include <QtCore/qurl.h>
+
+QT_BEGIN_NAMESPACE
+
+class QHelpSearchResultData : public QSharedData
+{
+public:
+ QUrl m_url;
+ QString m_title;
+ QString m_snippet;
+};
+
+/*!
+ \class QHelpSearchResult
+ \since 5.9
+ \inmodule QtHelp
+ \brief The QHelpSearchResult class provides the data associated with the
+ search result.
+
+ The QHelpSearchResult object is a data object that describes a single search result.
+ The vector of search result objects is returned by QHelpSearchEngine::searchResults().
+ The description of the search result contains the document title and URL
+ that the search input matched. It also contains the snippet from
+ the document content containing the best match of the search input.
+ \sa QHelpSearchEngine
+*/
+
+/*!
+ Constructs a new empty QHelpSearchResult.
+*/
+QHelpSearchResult::QHelpSearchResult() : d(new QHelpSearchResultData) { }
+
+/*!
+ Constructs a copy of \a other.
+*/
+QHelpSearchResult::QHelpSearchResult(const QHelpSearchResult &other) = default;
+
+/*!
+ Constructs the search result containing \a url, \a title and \a snippet
+ as the description of the result.
+*/
+QHelpSearchResult::QHelpSearchResult(const QUrl &url, const QString &title, const QString &snippet)
+ : d(new QHelpSearchResultData)
+{
+ d->m_url = url;
+ d->m_title = title;
+ d->m_snippet = snippet;
+}
+
+/*!
+ Destroys the search result.
+*/
+QHelpSearchResult::~QHelpSearchResult() = default;
+
+/*!
+ Assigns \a other to this search result and returns a reference to this search result.
+*/
+QHelpSearchResult &QHelpSearchResult::operator=(const QHelpSearchResult &other) = default;
+
+/*!
+ Returns the document title of the search result.
+*/
+QString QHelpSearchResult::title() const
+{
+ return d->m_title;
+}
+
+/*!
+ Returns the document URL of the search result.
+*/
+QUrl QHelpSearchResult::url() const
+{
+ return d->m_url;
+}
+
+/*!
+ Returns the document snippet containing the search phrase of the search result.
+*/
+QString QHelpSearchResult::snippet() const
+{
+ return d->m_snippet;
+}
+
+QT_END_NAMESPACE
diff --git a/src/assistant/help/qhelpsearchresult.h b/src/assistant/help/qhelpsearchresult.h
new file mode 100644
index 000000000..d8b42c158
--- /dev/null
+++ b/src/assistant/help/qhelpsearchresult.h
@@ -0,0 +1,37 @@
+// 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 QHELPSEARCHRESULT_H
+#define QHELPSEARCHRESULT_H
+
+#include <QtHelp/qhelp_global.h>
+
+#include <QtCore/qshareddata.h>
+
+QT_BEGIN_NAMESPACE
+
+class QHelpSearchResultData;
+class QString;
+class QUrl;
+
+class QHELP_EXPORT QHelpSearchResult
+{
+public:
+ QHelpSearchResult();
+ QHelpSearchResult(const QHelpSearchResult &other);
+ QHelpSearchResult(const QUrl &url, const QString &title, const QString &snippet);
+ ~QHelpSearchResult();
+
+ QHelpSearchResult &operator=(const QHelpSearchResult &other);
+
+ QString title() const;
+ QUrl url() const;
+ QString snippet() const;
+
+private:
+ QSharedDataPointer<QHelpSearchResultData> d;
+};
+
+QT_END_NAMESPACE
+
+#endif // QHELPSEARCHRESULT_H
diff --git a/src/assistant/help/qhelpsearchresultwidget.cpp b/src/assistant/help/qhelpsearchresultwidget.cpp
index 9c01032ba..3de64dd85 100644
--- a/src/assistant/help/qhelpsearchresultwidget.cpp
+++ b/src/assistant/help/qhelpsearchresultwidget.cpp
@@ -1,82 +1,52 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qhelpsearchresultwidget.h"
-#include <QtCore/QList>
-#include <QtCore/QString>
-#include <QtCore/QPointer>
-#include <QtCore/QStringList>
-#include <QtCore/QTextStream>
-
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QLayout>
-#include <QtGui/QMouseEvent>
-#include <QtWidgets/QHeaderView>
-#include <QtWidgets/QSpacerItem>
-#include <QtWidgets/QToolButton>
-#include <QtWidgets/QTreeWidget>
-#include <QtWidgets/QTextBrowser>
-#include <QtWidgets/QTreeWidgetItem>
+#include <QtCore/qcoreevent.h>
+#include <QtCore/qlist.h>
+#include <QtCore/qpointer.h>
+#include <QtCore/qtextstream.h>
+#include <QtWidgets/qlabel.h>
+#include <QtWidgets/qlayout.h>
+#include <QtWidgets/qlayoutitem.h>
+#include <QtWidgets/qtoolbutton.h>
+#include <QtWidgets/qtextbrowser.h>
QT_BEGIN_NAMESPACE
+static constexpr int ResultsRange = 20;
+
class QResultWidget : public QTextBrowser
{
Q_OBJECT
+ Q_PROPERTY(QColor linkColor READ linkColor WRITE setLinkColor)
public:
QResultWidget(QWidget *parent = nullptr)
: QTextBrowser(parent)
{
- connect(this, &QTextBrowser::anchorClicked,
- this, &QResultWidget::requestShowLink);
+ connect(this, &QTextBrowser::anchorClicked, this, &QResultWidget::requestShowLink);
setContextMenuPolicy(Qt::NoContextMenu);
+ setLinkColor(palette().color(QPalette::Link));
+ }
+
+ QColor linkColor() const { return m_linkColor; }
+ void setLinkColor(const QColor &color)
+ {
+ m_linkColor = color;
+ const QString sheet = QString::fromLatin1("a { text-decoration: underline; color: %1 }")
+ .arg(m_linkColor.name());
+ document()->setDefaultStyleSheet(sheet);
}
- void showResultPage(const QList<QHelpSearchResult> results, bool isIndexing)
+ void showResultPage(const QList<QHelpSearchResult> &results, bool isIndexing)
{
QString htmlFile;
QTextStream str(&htmlFile);
str << "<html><head><title>" << tr("Search Results") << "</title></head><body>";
- const int count = results.count();
+ const int count = results.size();
if (count != 0) {
if (isIndexing) {
str << "<div style=\"text-align:left;"
@@ -88,10 +58,10 @@ public:
}
for (const QHelpSearchResult &result : results) {
- str << "<div style=\"text-align:left; font-weight:bold\"><a href=\""
- << result.url().toString() << "\">" << result.title() << "</a>"
- "<div style=\"color:green; font-weight:normal;"
- " margin:5px\">" << result.snippet() << "</div></div><p></p>";
+ str << "<div style=\"text-align:left\"><a href=\""
+ << result.url().toString() << "\">"
+ << result.title() << "</a></div>"
+ "<div style =\"margin:5px\">" << result.snippet() << "</div>";
}
} else {
str << "<div align=\"center\"><br><br><h2>"
@@ -105,7 +75,6 @@ public:
}
str << "</body></html>";
-
setHtml(htmlFile);
}
@@ -113,87 +82,28 @@ signals:
void requestShowLink(const QUrl &url);
private slots:
-#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
- void setSource(const QUrl & /* name */) override {}
-#else
void doSetSource(const QUrl & /*name*/, QTextDocument::ResourceType /*type*/) override {}
-#endif
-};
-
-
-class QHelpSearchResultWidgetPrivate : public QObject
-{
- Q_OBJECT
-
-private slots:
- void showFirstResultPage()
- {
- if (!searchEngine.isNull())
- resultFirstToShow = 0;
- updateHitRange();
- }
-
- void showLastResultPage()
- {
- if (!searchEngine.isNull())
- resultFirstToShow = (searchEngine->searchResultCount() - 1) / ResultsRange * ResultsRange;
- updateHitRange();
- }
-
- void showPreviousResultPage()
- {
- if (!searchEngine.isNull()) {
- resultFirstToShow -= ResultsRange;
- if (resultFirstToShow < 0)
- resultFirstToShow = 0;
- }
- updateHitRange();
- }
-
- void showNextResultPage()
- {
- if (!searchEngine.isNull()
- && resultFirstToShow + ResultsRange < searchEngine->searchResultCount()) {
- resultFirstToShow += ResultsRange;
- }
- updateHitRange();
- }
-
- void indexingStarted()
- {
- isIndexing = true;
- }
-
- void indexingFinished()
- {
- isIndexing = false;
- }
private:
- QHelpSearchResultWidgetPrivate(QHelpSearchEngine *engine)
- : QObject()
- , searchEngine(engine)
- {
- connect(searchEngine.data(), &QHelpSearchEngine::indexingStarted,
- this, &QHelpSearchResultWidgetPrivate::indexingStarted);
- connect(searchEngine.data(), &QHelpSearchEngine::indexingFinished,
- this, &QHelpSearchResultWidgetPrivate::indexingFinished);
- }
+ QColor m_linkColor;
+};
+class QHelpSearchResultWidgetPrivate
+{
+public:
~QHelpSearchResultWidgetPrivate()
{
- delete searchEngine;
+ delete searchEngine; // TODO: This it probably wrong, why the widget owns the engine?
}
QToolButton* setupToolButton(const QString &iconPath)
{
- QToolButton *button = new QToolButton();
+ QToolButton *button = new QToolButton;
button->setEnabled(false);
button->setAutoRaise(true);
button->setIcon(QIcon(iconPath));
- button->setIconSize(QSize(12, 12));
- button->setMaximumSize(QSize(16, 16));
-
+ button->setIconSize({12, 12});
+ button->setMaximumSize({16, 16});
return button;
}
@@ -209,26 +119,23 @@ private:
last = qMin(resultFirstToShow + ResultsRange, count);
first = resultFirstToShow + 1;
}
- resultTextBrowser->showResultPage(searchEngine->searchResults(resultFirstToShow,
- last), isIndexing);
+ resultTextBrowser->showResultPage(searchEngine->searchResults(resultFirstToShow, last),
+ isIndexing);
}
- hitsLabel->setText(QHelpSearchResultWidget::tr("%1 - %2 of %n Hits", nullptr, count).arg(first).arg(last));
+ hitsLabel->setText(QHelpSearchResultWidget::tr("%1 - %2 of %n Hits", nullptr, count)
+ .arg(first).arg(last));
firstResultPage->setEnabled(resultFirstToShow);
previousResultPage->setEnabled(resultFirstToShow);
lastResultPage->setEnabled(count - last);
nextResultPage->setEnabled(count - last);
}
-private:
- friend class QHelpSearchResultWidget;
-
+ QHelpSearchResultWidget *q = nullptr;
QPointer<QHelpSearchEngine> searchEngine;
QResultWidget *resultTextBrowser = nullptr;
- static const int ResultsRange = 20;
-
QToolButton *firstResultPage = nullptr;
QToolButton *previousResultPage = nullptr;
QToolButton *nextResultPage = nullptr;
@@ -255,15 +162,21 @@ private:
QHelpSearchResultWidget::QHelpSearchResultWidget(QHelpSearchEngine *engine)
: QWidget(0)
- , d(new QHelpSearchResultWidgetPrivate(engine))
+ , d(new QHelpSearchResultWidgetPrivate)
{
+ d->q = this;
+ d->searchEngine = engine;
+
+ connect(engine, &QHelpSearchEngine::indexingStarted, this, [this] { d->isIndexing = true; });
+ connect(engine, &QHelpSearchEngine::indexingFinished, this, [this] { d->isIndexing = false; });
+
QVBoxLayout *vLayout = new QVBoxLayout(this);
- vLayout->setContentsMargins(QMargins());
+ vLayout->setContentsMargins({});
vLayout->setSpacing(0);
QHBoxLayout *hBoxLayout = new QHBoxLayout();
#ifndef Q_OS_MAC
- hBoxLayout->setContentsMargins(QMargins());
+ hBoxLayout->setContentsMargins({});
hBoxLayout->setSpacing(0);
#endif
hBoxLayout->addWidget(d->firstResultPage = d->setupToolButton(
@@ -294,17 +207,33 @@ QHelpSearchResultWidget::QHelpSearchResultWidget(QHelpSearchEngine *engine)
connect(d->resultTextBrowser, &QResultWidget::requestShowLink,
this, &QHelpSearchResultWidget::requestShowLink);
- connect(d->nextResultPage, &QAbstractButton::clicked,
- d, &QHelpSearchResultWidgetPrivate::showNextResultPage);
- connect(d->lastResultPage, &QAbstractButton::clicked,
- d, &QHelpSearchResultWidgetPrivate::showLastResultPage);
- connect(d->firstResultPage, &QAbstractButton::clicked,
- d, &QHelpSearchResultWidgetPrivate::showFirstResultPage);
- connect(d->previousResultPage, &QAbstractButton::clicked,
- d, &QHelpSearchResultWidgetPrivate::showPreviousResultPage);
-
- connect(engine, &QHelpSearchEngine::searchingFinished,
- d, &QHelpSearchResultWidgetPrivate::showFirstResultPage);
+ connect(d->nextResultPage, &QAbstractButton::clicked, this, [this] {
+ if (!d->searchEngine.isNull()
+ && d->resultFirstToShow + ResultsRange < d->searchEngine->searchResultCount()) {
+ d->resultFirstToShow += ResultsRange;
+ }
+ d->updateHitRange();
+ });
+ connect(d->previousResultPage, &QAbstractButton::clicked, this, [this] {
+ if (!d->searchEngine.isNull()) {
+ d->resultFirstToShow -= ResultsRange;
+ if (d->resultFirstToShow < 0)
+ d->resultFirstToShow = 0;
+ }
+ d->updateHitRange();
+ });
+ connect(d->lastResultPage, &QAbstractButton::clicked, this, [this] {
+ if (!d->searchEngine.isNull())
+ d->resultFirstToShow = (d->searchEngine->searchResultCount() - 1) / ResultsRange * ResultsRange;
+ d->updateHitRange();
+ });
+ const auto showFirstPage = [this] {
+ if (!d->searchEngine.isNull())
+ d->resultFirstToShow = 0;
+ d->updateHitRange();
+ };
+ connect(d->firstResultPage, &QAbstractButton::clicked, this, showFirstPage);
+ connect(engine, &QHelpSearchEngine::searchingFinished, this, showFirstPage);
}
/*! \reimp
@@ -331,7 +260,7 @@ QUrl QHelpSearchResultWidget::linkAt(const QPoint &point)
{
if (d->resultTextBrowser)
return d->resultTextBrowser->anchorAt(point);
- return QUrl();
+ return {};
}
QT_END_NAMESPACE
diff --git a/src/assistant/help/qhelpsearchresultwidget.h b/src/assistant/help/qhelpsearchresultwidget.h
index 4cb802527..859477eae 100644
--- a/src/assistant/help/qhelpsearchresultwidget.h
+++ b/src/assistant/help/qhelpsearchresultwidget.h
@@ -1,57 +1,19 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QHELPSEARCHRESULTWIDGET_H
#define QHELPSEARCHRESULTWIDGET_H
-#include <QtHelp/qhelpsearchengine.h>
#include <QtHelp/qhelp_global.h>
+#include <QtHelp/qhelpsearchengine.h>
-#include <QtCore/QUrl>
-#include <QtCore/QPoint>
-#include <QtCore/QObject>
-
-#include <QtWidgets/QWidget>
+#include <QtWidgets/qwidget.h>
QT_BEGIN_NAMESPACE
class QHelpSearchResultWidgetPrivate;
+class QPoint;
+class QUrl;
class QHELP_EXPORT QHelpSearchResultWidget : public QWidget
{
@@ -74,4 +36,4 @@ private:
QT_END_NAMESPACE
-#endif // QHELPSEARCHRESULTWIDGET_H
+#endif // QHELPSEARCHRESULTWIDGET_H
diff --git a/src/assistant/help/qoptionswidget.cpp b/src/assistant/help/qoptionswidget.cpp
index 21fdfe07a..e529b65eb 100644
--- a/src/assistant/help/qoptionswidget.cpp
+++ b/src/assistant/help/qoptionswidget.cpp
@@ -1,47 +1,23 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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 "qoptionswidget_p.h"
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QItemDelegate>
-#include <QtWidgets/QListWidget>
-#include <QtWidgets/QVBoxLayout>
+#include <QtWidgets/qitemdelegate.h>
+#include <QtWidgets/qlayout.h>
+#include <QtWidgets/qlistwidget.h>
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
class ListWidgetDelegate : public QItemDelegate
{
public:
ListWidgetDelegate(QWidget *w) : QItemDelegate(w), m_widget(w) {}
static bool isSeparator(const QModelIndex &index) {
- return index.data(Qt::AccessibleDescriptionRole).toString() == QLatin1String("separator");
+ return index.data(Qt::AccessibleDescriptionRole).toString() == "separator"_L1;
}
static void setSeparator(QListWidgetItem *item) {
item->setData(Qt::AccessibleDescriptionRole, QString::fromLatin1("separator"));
@@ -49,29 +25,31 @@ public:
}
protected:
- void paint(QPainter *painter,
- const QStyleOptionViewItem &option,
- const QModelIndex &index) const override {
+ void paint(QPainter *painter, const QStyleOptionViewItem &option,
+ const QModelIndex &index) const override
+ {
if (isSeparator(index)) {
QRect rect = option.rect;
if (const QAbstractItemView *view = qobject_cast<const QAbstractItemView*>(option.widget))
rect.setWidth(view->viewport()->width());
QStyleOption opt;
opt.rect = rect;
- m_widget->style()->drawPrimitive(QStyle::PE_IndicatorToolBarSeparator, &opt, painter, m_widget);
+ m_widget->style()->drawPrimitive(QStyle::PE_IndicatorToolBarSeparator, &opt, painter,
+ m_widget);
} else {
QItemDelegate::paint(painter, option, index);
}
}
- QSize sizeHint(const QStyleOptionViewItem &option,
- const QModelIndex &index) const override {
+ QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override
+ {
if (isSeparator(index)) {
int pm = m_widget->style()->pixelMetric(QStyle::PM_DefaultFrameWidth, nullptr, m_widget);
- return QSize(pm, pm);
+ return {pm, pm};
}
return QItemDelegate::sizeHint(option, index);
}
+
private:
QWidget *m_widget;
};
@@ -93,18 +71,11 @@ QOptionsWidget::QOptionsWidget(QWidget *parent)
m_listWidget->setItemDelegate(new ListWidgetDelegate(m_listWidget));
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(m_listWidget);
- layout->setContentsMargins(QMargins());
-
+ layout->setContentsMargins({});
connect(m_listWidget, &QListWidget::itemChanged, this, &QOptionsWidget::itemChanged);
}
-void QOptionsWidget::clear()
-{
- setOptions(QStringList(), QStringList());
-}
-
-void QOptionsWidget::setOptions(const QStringList &validOptions,
- const QStringList &selectedOptions)
+void QOptionsWidget::setOptions(const QStringList &validOptions, const QStringList &selectedOptions)
{
m_listWidget->clear();
m_optionToItem.clear();
@@ -128,28 +99,16 @@ void QOptionsWidget::setOptions(const QStringList &validOptions,
for (const QString &option : m_invalidOptions)
appendItem(option, false, true);
- if ((validSelectedOptions.count() + m_invalidOptions.count())
- && validUnselectedOptions.count()) {
+ if ((validSelectedOptions.size() + m_invalidOptions.size()) && validUnselectedOptions.size())
appendSeparator();
- }
for (const QString &option : validUnselectedOptions) {
appendItem(option, true, false);
- if (option.isEmpty() && validUnselectedOptions.count() > 1) // special No Option item
+ if (option.isEmpty() && validUnselectedOptions.size() > 1) // special No Option item
appendSeparator();
}
}
-QStringList QOptionsWidget::validOptions() const
-{
- return m_validOptions;
-}
-
-QStringList QOptionsWidget::selectedOptions() const
-{
- return m_selectedOptions;
-}
-
void QOptionsWidget::setNoOptionText(const QString &text)
{
if (m_noOptionText == text)
@@ -182,9 +141,9 @@ QString QOptionsWidget::optionText(const QString &optionName, bool valid) const
{
QString text = optionName;
if (optionName.isEmpty())
- text = QLatin1Char('[') + m_noOptionText + QLatin1Char(']');
+ text = u'[' + m_noOptionText + u']';
if (!valid)
- text += QLatin1String("\t[") + m_invalidOptionText + QLatin1Char(']');
+ text += "\t["_L1 + m_invalidOptionText + u']';
return text;
}
@@ -192,7 +151,7 @@ QListWidgetItem *QOptionsWidget::appendItem(const QString &optionName, bool vali
{
QListWidgetItem *optionItem = new QListWidgetItem(optionText(optionName, valid), m_listWidget);
optionItem->setCheckState(selected ? Qt::Checked : Qt::Unchecked);
- m_listWidget->insertItem(m_listWidget->count(), optionItem);
+ m_listWidget->addItem(optionItem);
m_optionToItem[optionName] = optionItem;
m_itemToOption[optionItem] = optionName;
return optionItem;
@@ -202,7 +161,7 @@ void QOptionsWidget::appendSeparator()
{
QListWidgetItem *separatorItem = new QListWidgetItem(m_listWidget);
ListWidgetDelegate::setSeparator(separatorItem);
- m_listWidget->insertItem(m_listWidget->count(), separatorItem);
+ m_listWidget->addItem(separatorItem);
}
void QOptionsWidget::itemChanged(QListWidgetItem *item)
@@ -221,9 +180,7 @@ void QOptionsWidget::itemChanged(QListWidgetItem *item)
} else {
return;
}
-
emit optionSelectionChanged(m_selectedOptions);
}
-
QT_END_NAMESPACE
diff --git a/src/assistant/help/qoptionswidget_p.h b/src/assistant/help/qoptionswidget_p.h
index a6700c1d7..a62fbe2c8 100644
--- a/src/assistant/help/qoptionswidget_p.h
+++ b/src/assistant/help/qoptionswidget_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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 QOPTIONSWIDGET_H
#define QOPTIONSWIDGET_H
@@ -40,8 +15,8 @@
// We mean it.
//
-#include <QtWidgets/QWidget>
-#include <QtCore/QMap>
+#include <QtCore/qhash.h>
+#include <QtWidgets/qwidget.h>
QT_BEGIN_NAMESPACE
@@ -54,11 +29,10 @@ class QOptionsWidget : public QWidget
public:
QOptionsWidget(QWidget *parent = nullptr);
- void clear();
- void setOptions(const QStringList &validOptions,
- const QStringList &selectedOptions);
- QStringList validOptions() const;
- QStringList selectedOptions() const;
+ void clear() { setOptions({}, {}); }
+ void setOptions(const QStringList &validOptions, const QStringList &selectedOptions);
+ QStringList validOptions() const { return m_validOptions; }
+ QStringList selectedOptions() const { return m_selectedOptions; }
void setNoOptionText(const QString &text);
void setInvalidOptionText(const QString &text);
@@ -78,10 +52,10 @@ private:
QStringList m_validOptions;
QStringList m_invalidOptions;
QStringList m_selectedOptions;
- QMap<QString, QListWidgetItem *> m_optionToItem;
- QMap<QListWidgetItem *, QString> m_itemToOption;
+ QHash<QString, QListWidgetItem *> m_optionToItem;
+ QHash<QListWidgetItem *, QString> m_itemToOption;
};
QT_END_NAMESPACE
-#endif // OPTIONSWIDGET_H
+#endif // QOPTIONSWIDGET_H
diff --git a/src/assistant/qcollectiongenerator/.prev_CMakeLists.txt b/src/assistant/qcollectiongenerator/.prev_CMakeLists.txt
deleted file mode 100644
index cfbcfc0ae..000000000
--- a/src/assistant/qcollectiongenerator/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-# Generated from qcollectiongenerator.pro.
-
-#####################################################################
-## qcollectiongenerator Tool:
-#####################################################################
-
-qt_get_tool_target_name(target_name qcollectiongenerator)
-qt_add_tool(${target_name}
- TARGET_DESCRIPTION "Qt Help Collection File Generator"
- SOURCES
- main.c
- PUBLIC_LIBRARIES
- Qt::Gui
-)
-
-#### Keys ignored in scope 1:.:.:qcollectiongenerator.pro:<TRUE>:
-# QMAKE_TARGET_DESCRIPTION = "Qt Help Collection File Generator"
diff --git a/src/assistant/qcollectiongenerator/CMakeLists.txt b/src/assistant/qcollectiongenerator/CMakeLists.txt
deleted file mode 100644
index 97c8740d0..000000000
--- a/src/assistant/qcollectiongenerator/CMakeLists.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated from qcollectiongenerator.pro.
-
-#####################################################################
-## qcollectiongenerator Tool:
-#####################################################################
-
-qt_get_tool_target_name(target_name qcollectiongenerator)
-qt_add_tool(${target_name}
- TARGET_DESCRIPTION "Qt Help Collection File Generator"
- TOOLS_TARGET Tools # special case
- SOURCES
- main.c
- PUBLIC_LIBRARIES
- Qt::Gui
-)
-
-#### Keys ignored in scope 1:.:.:qcollectiongenerator.pro:<TRUE>:
-# QMAKE_TARGET_DESCRIPTION = "Qt Help Collection File Generator"
diff --git a/src/assistant/qcollectiongenerator/main.c b/src/assistant/qcollectiongenerator/main.c
deleted file mode 100644
index 783a799a1..000000000
--- a/src/assistant/qcollectiongenerator/main.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef _WIN32
-#include <process.h>
-#else
-#include <unistd.h>
-#endif
-
-static const char collectionGeneratorName[] = "qcollectiongenerator";
-static const char helpGeneratorName[] = "qhelpgenerator";
-
-#ifdef _WIN32
-static const char separator = '\\';
-#else
-static const char separator = '/';
-#endif
-
-int main(int argc, char *argv[])
-{
- (void)argc;
- printf("The \"%s\" tool is deprecated, use \"%s\" instead.\n\n",
- collectionGeneratorName, helpGeneratorName);
-
- // Replace the "qcollectiongenerator" with "qhelpgenerator"
- // in passed argv[0], keeping the path.
-
- const size_t currentNameSize = strlen(argv[0]);
- const size_t collectionGeneratorNameSize = strlen(collectionGeneratorName);
- const ptrdiff_t maxPathOffset = currentNameSize - collectionGeneratorNameSize;
- ptrdiff_t pathOffset = maxPathOffset;
-
- if (maxPathOffset >= 0 && strchr(argv[0] + maxPathOffset, separator))
- pathOffset = -1; // Separator detected. Wrong filename.
-
- while (pathOffset >= 0) {
- const char *fileName = argv[0] + pathOffset;
-
- if (fileName[0] == separator) { // Separator detected. Wrong filename.
- pathOffset = -1;
- break;
- }
-
- if (!strncmp(fileName, collectionGeneratorName, collectionGeneratorNameSize))
- break;
-
- --pathOffset;
- }
-
- if (pathOffset < 0) {
- fprintf(stderr, "Wrong tool name. "
- "The tool name is expected to contain: \"%s\", got: \"%s\" instead.\n",
- collectionGeneratorName, argv[0]);
- return 3;
- }
-
- const size_t helpGeneratorNameSize = strlen(helpGeneratorName);
- // Allocate a buffer for the new full path, consisting of the pathSize + new name
- char *newPath = (char *) malloc((maxPathOffset + helpGeneratorNameSize + 1) * sizeof(char));
- // Copy the path
- memcpy(newPath, argv[0], pathOffset);
- // Copy the new name
- memcpy(newPath + pathOffset, helpGeneratorName, helpGeneratorNameSize);
- // Copy the remaining part
- memcpy(newPath + pathOffset + helpGeneratorNameSize,
- argv[0] + pathOffset + collectionGeneratorNameSize,
- currentNameSize - pathOffset - collectionGeneratorNameSize + 1);
-
- argv[0] = newPath;
-#ifdef _WIN32
- const intptr_t ret = _spawnvp(_P_WAIT, newPath, argv);
- if (ret == -1) {
- fprintf(stderr, "Error while executing \"%s\" tool.\n", newPath);
- return 3;
- }
- return ret;
-#else
- execvp(newPath, argv);
- fprintf(stderr, "Error while executing \"%s\" tool.\n", newPath);
- return 3;
-#endif
-}
-
diff --git a/src/assistant/qcollectiongenerator/qcollectiongenerator.pro b/src/assistant/qcollectiongenerator/qcollectiongenerator.pro
deleted file mode 100644
index 491c8f927..000000000
--- a/src/assistant/qcollectiongenerator/qcollectiongenerator.pro
+++ /dev/null
@@ -1,7 +0,0 @@
-CONFIG += console
-CONFIG -= qt app_bundle
-SOURCES += main.c
-
-QMAKE_TARGET_DESCRIPTION = "Qt Help Collection File Generator"
-load(qt_tool)
-
diff --git a/src/assistant/qhelpgenerator/.prev_CMakeLists.txt b/src/assistant/qhelpgenerator/.prev_CMakeLists.txt
deleted file mode 100644
index cbf850636..000000000
--- a/src/assistant/qhelpgenerator/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-# Generated from qhelpgenerator.pro.
-
-#####################################################################
-## qhelpgenerator Tool:
-#####################################################################
-
-qt_get_tool_target_name(target_name qhelpgenerator)
-qt_add_tool(${target_name}
- TARGET_DESCRIPTION "Qt Compressed Help File Generator"
- SOURCES
- ../shared/collectionconfiguration.cpp ../shared/collectionconfiguration.h
- collectionconfigreader.cpp collectionconfigreader.h
- helpgenerator.cpp helpgenerator.h
- main.cpp
- qhelpdatainterface.cpp qhelpdatainterface_p.h
- qhelpprojectdata.cpp qhelpprojectdata_p.h
- PUBLIC_LIBRARIES
- Qt::Gui
- Qt::HelpPrivate
- Qt::Network
-)
-
-#### Keys ignored in scope 1:.:.:qhelpgenerator.pro:<TRUE>:
-# QMAKE_TARGET_DESCRIPTION = "Qt Compressed Help File Generator"
-# QTPLUGIN.platforms = "qminimal"
-# QTPLUGIN.sqldrivers = "qsqlite"
diff --git a/src/assistant/qhelpgenerator/CMakeLists.txt b/src/assistant/qhelpgenerator/CMakeLists.txt
index 540bb762a..205a19cc7 100644
--- a/src/assistant/qhelpgenerator/CMakeLists.txt
+++ b/src/assistant/qhelpgenerator/CMakeLists.txt
@@ -1,13 +1,15 @@
-# Generated from qhelpgenerator.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qhelpgenerator Tool:
#####################################################################
qt_get_tool_target_name(target_name qhelpgenerator)
-qt_add_tool(${target_name}
+qt_internal_add_tool(${target_name}
TARGET_DESCRIPTION "Qt Compressed Help File Generator"
- TOOLS_TARGET Tools # special case
+ TOOLS_TARGET Tools
+ INSTALL_DIR "${INSTALL_LIBEXECDIR}"
SOURCES
../shared/collectionconfiguration.cpp ../shared/collectionconfiguration.h
collectionconfigreader.cpp collectionconfigreader.h
@@ -15,13 +17,51 @@ qt_add_tool(${target_name}
main.cpp
qhelpdatainterface.cpp qhelpdatainterface_p.h
qhelpprojectdata.cpp qhelpprojectdata_p.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::HelpPrivate
- Qt::Network
)
+qt_internal_return_unless_building_tools()
-#### Keys ignored in scope 1:.:.:qhelpgenerator.pro:<TRUE>:
-# QMAKE_TARGET_DESCRIPTION = "Qt Compressed Help File Generator"
-# QTPLUGIN.platforms = "qminimal"
-# QTPLUGIN.sqldrivers = "qsqlite"
+set(needed_plugins
+ QMinimalIntegrationPlugin
+ QSQLiteDriverPlugin
+)
+list(TRANSFORM needed_plugins PREPEND Qt:: OUTPUT_VARIABLE needed_plugin_targets)
+
+if(NOT QT_BUILD_SHARED_LIBS)
+ if(QT_SUPERBUILD)
+ # In a top-level build, qt_import_plugins() is a no-op because
+ # __qt_internal_add_static_plugins_once() is not called.
+ # So we need to initialize and link the plugin manually.
+ set(out_file_path "${CMAKE_CURRENT_BINARY_DIR}/${target_name}_plugin_imports_custom.cpp")
+
+ # Create a string with the necessary Q_IMPORT_PLUGIN(...) statements.
+ list(TRANSFORM needed_plugins PREPEND "Q_IMPORT_PLUGIN(" OUTPUT_VARIABLE import_plugin_code)
+ list(TRANSFORM import_plugin_code APPEND ")")
+ list(JOIN import_plugin_code "\n" import_plugin_code)
+
+ file(GENERATE OUTPUT "${out_file_path}" CONTENT
+"// This file is auto-generated. Do not edit.
+#include <QtPlugin>
+
+${import_plugin_code}
+")
+
+ # CMake versions earlier than 3.18.0 can't find the generated file for some reason,
+ # failing at generation phase.
+ # Explicitly marking the file as GENERATED fixes the issue.
+ set_source_files_properties("${out_file_path}" PROPERTIES GENERATED TRUE)
+
+ target_sources(${target_name} PRIVATE "${out_file_path}")
+ target_link_libraries(${target_name} PRIVATE ${needed_plugin_targets})
+ else()
+ qt_import_plugins(${target_name}
+ INCLUDE ${needed_plugin_targets}
+ )
+ endif()
+else() # QT_BUILD_SHARED_LIBS
+ if(TARGET ${target_name} AND QT_SUPERBUILD)
+ add_dependencies(${target_name} ${needed_plugins})
+ endif()
+endif()
diff --git a/src/assistant/qhelpgenerator/collectionconfigreader.cpp b/src/assistant/qhelpgenerator/collectionconfigreader.cpp
index 4928b695e..d395e63fe 100644
--- a/src/assistant/qhelpgenerator/collectionconfigreader.cpp
+++ b/src/assistant/qhelpgenerator/collectionconfigreader.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "collectionconfigreader.h"
diff --git a/src/assistant/qhelpgenerator/collectionconfigreader.h b/src/assistant/qhelpgenerator/collectionconfigreader.h
index eaf332b6b..0d6de5de4 100644
--- a/src/assistant/qhelpgenerator/collectionconfigreader.h
+++ b/src/assistant/qhelpgenerator/collectionconfigreader.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef COLLECTIONCONFIGREADER_H
#define COLLECTIONCONFIGREADER_H
diff --git a/src/assistant/qhelpgenerator/helpgenerator.cpp b/src/assistant/qhelpgenerator/helpgenerator.cpp
index 6e1db70b4..802830ad1 100644
--- a/src/assistant/qhelpgenerator/helpgenerator.cpp
+++ b/src/assistant/qhelpgenerator/helpgenerator.cpp
@@ -1,53 +1,19 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "helpgenerator.h"
#include "qhelpprojectdata_p.h"
#include <qhelp_global.h>
#include <QtCore/QtMath>
+#include <QtCore/QMap>
#include <QtCore/QFile>
#include <QtCore/QFileInfo>
#include <QtCore/QDir>
#include <QtCore/QDebug>
#include <QtCore/QRegularExpression>
#include <QtCore/QSet>
+#include <QtCore/QMap>
#include <QtCore/QVariant>
#include <QtCore/QDateTime>
#include <QtCore/QStringConverter>
@@ -191,7 +157,7 @@ bool HelpGeneratorPrivate::generate(QHelpProjectData *helpData,
int i = 1;
for (const QHelpDataFilterSection &fs : helpData->filterSections()) {
emit statusChanged(tr("Insert help data for filter section (%1 of %2)...")
- .arg(i++).arg(helpData->filterSections().count()));
+ .arg(i++).arg(helpData->filterSections().size()));
insertFilterAttributes(fs.filterAttributes());
QByteArray ba;
QDataStream s(&ba, QIODevice::WriteOnly);
@@ -219,15 +185,15 @@ void HelpGeneratorPrivate::setupProgress(QHelpProjectData *helpData)
int numberOfFiles = 0;
int numberOfIndices = 0;
for (const QHelpDataFilterSection &fs : helpData->filterSections()) {
- numberOfFiles += fs.files().count();
- numberOfIndices += fs.indices().count();
+ numberOfFiles += fs.files().size();
+ numberOfIndices += fs.indices().size();
}
// init 2%
// filters 1%
// contents 10%
// files 60%
// indices 27%
- m_contentStep = 10.0 / qMax(helpData->customFilters().count(), 1);
+ m_contentStep = 10.0 / qMax(helpData->customFilters().size(), 1);
m_fileStep = 60.0 / qMax(numberOfFiles, 1);
m_indexStep = 27.0 / qMax(numberOfIndices, 1);
}
@@ -364,7 +330,7 @@ bool HelpGeneratorPrivate::insertFileNotFoundFile()
" VALUES (0, '', ?, '')"));
m_query->bindValue(0, fileId);
if (fileId > -1 && m_query->exec()) {
- m_fileMap.insert(QString(), fileId);
+ m_fileMap.insert({}, fileId);
return true;
}
return false;
@@ -445,7 +411,9 @@ bool HelpGeneratorPrivate::insertFiles(const QStringList &files, const QString &
if (filterSetId < 0)
return false;
++filterSetId;
- for (int attId : qAsConst(filterAtts)) {
+ QList<int> attValues = filterAtts.values();
+ std::sort(attValues.begin(), attValues.end());
+ for (int attId : std::as_const(attValues)) {
m_query->prepare(QLatin1String("INSERT INTO FileAttributeSetTable "
"VALUES(?, ?)"));
m_query->bindValue(0, filterSetId);
@@ -484,10 +452,10 @@ bool HelpGeneratorPrivate::insertFiles(const QStringList &files, const QString &
QByteArray data = fi.readAll();
if (fileName.endsWith(QLatin1String(".html"))
|| fileName.endsWith(QLatin1String(".htm"))) {
- auto encoding = QStringDecoder::encodingForHtml(data.constData(), data.size());
- if (!encoding)
- encoding = QStringDecoder::Utf8;
- title = QHelpGlobal::documentTitle(QStringDecoder(*encoding)(data));
+ auto encoding = QStringDecoder::encodingForHtml(data);
+ if (!encoding)
+ encoding = QStringDecoder::Utf8;
+ title = QHelpGlobal::documentTitle(QStringDecoder(*encoding)(data));
} else {
title = fileName.mid(fileName.lastIndexOf(QLatin1Char('/')) + 1);
}
@@ -512,7 +480,7 @@ bool HelpGeneratorPrivate::insertFiles(const QStringList &files, const QString &
fileId = it.value();
QSet<int> &fileFilterSet = m_fileFilterMap[fileId];
QSet<int> &tmpFileFilterSet = tmpFileFilterMap[fileId];
- for (int filter : qAsConst(filterAtts)) {
+ for (int filter : std::as_const(filterAtts)) {
if (!fileFilterSet.contains(filter)
&& !tmpFileFilterSet.contains(filter)) {
fileFilterSet.insert(filter);
@@ -527,7 +495,7 @@ bool HelpGeneratorPrivate::insertFiles(const QStringList &files, const QString &
for (auto it = tmpFileFilterMap.cbegin(), end = tmpFileFilterMap.cend(); it != end; ++it) {
QList<int> filterValues = it.value().values();
std::sort(filterValues.begin(), filterValues.end());
- for (int fv : qAsConst(filterValues)) {
+ for (int fv : std::as_const(filterValues)) {
m_query->prepare(QLatin1String("INSERT INTO FileFilterTable "
"VALUES(?, ?)"));
m_query->bindValue(0, fv);
@@ -536,7 +504,7 @@ bool HelpGeneratorPrivate::insertFiles(const QStringList &files, const QString &
}
}
- for (const QByteArray &fileData : qAsConst(fileDataList)) {
+ for (const QByteArray &fileData : std::as_const(fileDataList)) {
m_query->prepare(QLatin1String("INSERT INTO FileDataTable VALUES "
"(Null, ?)"));
m_query->bindValue(0, fileData);
@@ -545,7 +513,7 @@ bool HelpGeneratorPrivate::insertFiles(const QStringList &files, const QString &
addProgress(m_fileStep * 20.0);
}
- for (const FileNameTableData &fnd : qAsConst(fileNameDataList)) {
+ for (const FileNameTableData &fnd : std::as_const(fileNameDataList)) {
m_query->prepare(QLatin1String("INSERT INTO FileNameTable "
"(FolderId, Name, FileId, Title) VALUES (?, ?, ?, ?)"));
m_query->bindValue(0, 1);
@@ -581,7 +549,7 @@ bool HelpGeneratorPrivate::registerCustomFilter(const QString &filterName,
idsToInsert.removeAll(m_query->value(1).toString());
}
- for (const QString &id : qAsConst(idsToInsert)) {
+ for (const QString &id : std::as_const(idsToInsert)) {
m_query->prepare(QLatin1String("INSERT INTO FilterAttributeTable VALUES(NULL, ?)"));
m_query->bindValue(0, id);
m_query->exec();
@@ -688,8 +656,8 @@ bool HelpGeneratorPrivate::insertKeywords(const QList<QHelpDataIndexItem> &keywo
m_query->exec(QLatin1String("COMMIT"));
m_query->exec(QLatin1String("BEGIN"));
- for (int idx : qAsConst(indexFilterTable)) {
- for (int a : qAsConst(filterAtts)) {
+ for (int idx : std::as_const(indexFilterTable)) {
+ for (int a : std::as_const(filterAtts)) {
m_query->prepare(QLatin1String("INSERT INTO IndexFilterTable (FilterAttributeId, IndexId) "
"VALUES(?, ?)"));
m_query->bindValue(0, a);
@@ -700,7 +668,7 @@ bool HelpGeneratorPrivate::insertKeywords(const QList<QHelpDataIndexItem> &keywo
m_query->exec(QLatin1String("COMMIT"));
m_query->exec(QLatin1String("SELECT COUNT(Id) FROM IndexTable"));
- if (m_query->next() && m_query->value(0).toInt() >= indices.count())
+ if (m_query->next() && m_query->value(0).toInt() >= indices.size())
return true;
return false;
}
@@ -798,7 +766,7 @@ bool HelpGeneratorPrivate::checkLinks(const QHelpProjectData &helpData)
* commented out can cause false warning.
*/
bool allLinksOk = true;
- for (const QString &fileName : qAsConst(files)) {
+ for (const QString &fileName : std::as_const(files)) {
if (!fileName.endsWith(QLatin1String("html"))
&& !fileName.endsWith(QLatin1String("htm")))
continue;
@@ -809,7 +777,7 @@ bool HelpGeneratorPrivate::checkLinks(const QHelpProjectData &helpData)
}
const QRegularExpression linkPattern(QLatin1String("<(?:a href|img src)=\"?([^#\">]+)[#\">]"));
QByteArray data = htmlFile.readAll();
- auto encoding = QStringDecoder::encodingForHtml(data.constData(), data.size());
+ auto encoding = QStringDecoder::encodingForHtml(data);
if (!encoding)
encoding = QStringDecoder::Utf8;
const QString &content = QStringDecoder(*encoding)(data);
@@ -817,6 +785,7 @@ bool HelpGeneratorPrivate::checkLinks(const QHelpProjectData &helpData)
QRegularExpressionMatch match;
int pos = 0;
while ((match = linkPattern.match(content, pos)).hasMatch()) {
+ pos = match.capturedEnd();
const QString &linkedFileName = match.captured(1);
if (linkedFileName.contains(QLatin1String("://")))
continue;
@@ -830,7 +799,6 @@ bool HelpGeneratorPrivate::checkLinks(const QHelpProjectData &helpData)
allLinksOk = false;
invalidLinks.append(canonicalLinkedFileName);
}
- pos = match.capturedEnd();
}
}
diff --git a/src/assistant/qhelpgenerator/helpgenerator.h b/src/assistant/qhelpgenerator/helpgenerator.h
index dc63bf128..8c5ef343d 100644
--- a/src/assistant/qhelpgenerator/helpgenerator.h
+++ b/src/assistant/qhelpgenerator/helpgenerator.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef HELPGENERATOR_H
#define HELPGENERATOR_H
diff --git a/src/assistant/qhelpgenerator/main.cpp b/src/assistant/qhelpgenerator/main.cpp
index c4fae724c..ca5549974 100644
--- a/src/assistant/qhelpgenerator/main.cpp
+++ b/src/assistant/qhelpgenerator/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "../shared/collectionconfiguration.h"
#include "helpgenerator.h"
@@ -117,6 +92,7 @@ int generateCollectionFile(const QByteArray &data, const QString &basePath, cons
if (!config.filesToRegister().isEmpty()) {
if (Q_UNLIKELY(qEnvironmentVariableIsSet("SOURCE_DATE_EPOCH"))) {
QDateTime dt;
+ dt.setTimeZone(QTimeZone::UTC);
dt.setSecsSinceEpoch(qEnvironmentVariableIntValue("SOURCE_DATE_EPOCH"));
CollectionConfiguration::updateLastRegisterTime(helpEngine, dt);
} else {
@@ -172,7 +148,7 @@ int generateCollectionFile(const QByteArray &data, const QString &basePath, cons
CollectionConfiguration::setApplicationIcon(helpEngine, icon.readAll());
}
- if (config.aboutMenuTexts().count()) {
+ if (config.aboutMenuTexts().size()) {
QByteArray ba;
QDataStream s(&ba, QIODevice::WriteOnly);
const QMap<QString, QString> &aboutMenuTexts = config.aboutMenuTexts();
@@ -190,7 +166,7 @@ int generateCollectionFile(const QByteArray &data, const QString &basePath, cons
CollectionConfiguration::setAboutIcon(helpEngine, icon.readAll());
}
- if (config.aboutTextFiles().count()) {
+ if (config.aboutTextFiles().size()) {
QByteArray ba;
QDataStream s(&ba, QIODevice::WriteOnly);
QMap<QString, QByteArray> imgData;
@@ -234,7 +210,7 @@ int generateCollectionFile(const QByteArray &data, const QString &basePath, cons
}
}
CollectionConfiguration::setAboutTexts(helpEngine, ba);
- if (imgData.count()) {
+ if (imgData.size()) {
QByteArray imageData;
QBuffer buffer(&imageData);
buffer.open(QIODevice::WriteOnly);
diff --git a/src/assistant/qhelpgenerator/qhelpdatainterface.cpp b/src/assistant/qhelpgenerator/qhelpdatainterface.cpp
index fade438e1..f5a9afdd4 100644
--- a/src/assistant/qhelpgenerator/qhelpdatainterface.cpp
+++ b/src/assistant/qhelpgenerator/qhelpdatainterface.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qhelpdatainterface_p.h"
diff --git a/src/assistant/qhelpgenerator/qhelpdatainterface_p.h b/src/assistant/qhelpgenerator/qhelpdatainterface_p.h
index 5a342c003..6f215313e 100644
--- a/src/assistant/qhelpgenerator/qhelpdatainterface_p.h
+++ b/src/assistant/qhelpgenerator/qhelpdatainterface_p.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QHELPDATAINTERFACE_H
#define QHELPDATAINTERFACE_H
diff --git a/src/assistant/qhelpgenerator/qhelpgenerator.pro b/src/assistant/qhelpgenerator/qhelpgenerator.pro
deleted file mode 100644
index bb22000c8..000000000
--- a/src/assistant/qhelpgenerator/qhelpgenerator.pro
+++ /dev/null
@@ -1,20 +0,0 @@
-QT += network help-private
-
-QTPLUGIN.platforms = qminimal
-QTPLUGIN.sqldrivers = qsqlite
-
-SOURCES += ../shared/collectionconfiguration.cpp \
- helpgenerator.cpp \
- collectionconfigreader.cpp \
- qhelpprojectdata.cpp \
- qhelpdatainterface.cpp \
- main.cpp
-
-HEADERS += ../shared/collectionconfiguration.h \
- helpgenerator.h \
- collectionconfigreader.h \
- qhelpprojectdata_p.h \
- qhelpdatainterface_p.h
-
-QMAKE_TARGET_DESCRIPTION = "Qt Compressed Help File Generator"
-load(qt_tool)
diff --git a/src/assistant/qhelpgenerator/qhelpprojectdata.cpp b/src/assistant/qhelpgenerator/qhelpprojectdata.cpp
index 5b7d84e9c..01cf2388c 100644
--- a/src/assistant/qhelpgenerator/qhelpprojectdata.cpp
+++ b/src/assistant/qhelpgenerator/qhelpprojectdata.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qhelpprojectdata_p.h"
diff --git a/src/assistant/qhelpgenerator/qhelpprojectdata_p.h b/src/assistant/qhelpgenerator/qhelpprojectdata_p.h
index 516bb7cda..6eab2864e 100644
--- a/src/assistant/qhelpgenerator/qhelpprojectdata_p.h
+++ b/src/assistant/qhelpgenerator/qhelpprojectdata_p.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QHELPPROJECTDATA_H
#define QHELPPROJECTDATA_H
diff --git a/src/assistant/qlitehtml b/src/assistant/qlitehtml
new file mode 160000
+Subproject 4f737256c0a698ff3ba380cbaef1ba80a16fc3a
diff --git a/src/assistant/shared/collectionconfiguration.cpp b/src/assistant/shared/collectionconfiguration.cpp
index 562cbfaab..8caf39d59 100644
--- a/src/assistant/shared/collectionconfiguration.cpp
+++ b/src/assistant/shared/collectionconfiguration.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "collectionconfiguration.h"
@@ -43,37 +7,39 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace {
- const QString AboutIconKey(QLatin1String("AboutIcon"));
- const QString AboutImagesKey(QLatin1String("AboutImages"));
- const QString AboutMenuTextsKey(QLatin1String("AboutMenuTexts"));
- const QString AboutTextsKey(QLatin1String("AboutTexts"));
- const QString ApplicationIconKey(QLatin1String("ApplicationIcon"));
- const QString CacheDirKey(QLatin1String("CacheDirectory"));
- const QString CacheDirRelativeToCollectionKey(QLatin1String("CacheDirRelativeToCollection"));
- const QString CreationTimeKey(QLatin1String("CreationTime"));
- const QString DefaultHomePageKey(QLatin1String("defaultHomepage"));
- const QString EnableAddressBarKey(QLatin1String("EnableAddressBar"));
- const QString EnableDocManagerKey(QLatin1String("EnableDocumentationManager"));
- const QString EnableFilterKey(QLatin1String("EnableFilterFunctionality"));
- const QString HideAddressBarKey(QLatin1String("HideAddressBar"));
- const QString FilterToolbarHiddenKey(QLatin1String("HideFilterFunctionality"));
- const QString LastPageKey(QLatin1String("LastTabPage"));
- const QString LastRegisterTime(QLatin1String("LastRegisterTime"));
- const QString LastShownPagesKey(QLatin1String("LastShownPages"));
- const QString LastZoomFactorsKey(QLatin1String(
+ const QString AboutIconKey("AboutIcon"_L1);
+ const QString AboutImagesKey("AboutImages"_L1);
+ const QString AboutMenuTextsKey("AboutMenuTexts"_L1);
+ const QString AboutTextsKey("AboutTexts"_L1);
+ const QString ApplicationIconKey("ApplicationIcon"_L1);
+ const QString CacheDirKey("CacheDirectory"_L1);
+ const QString CacheDirRelativeToCollectionKey("CacheDirRelativeToCollection"_L1);
+ const QString CreationTimeKey("CreationTime"_L1);
+ const QString DefaultHomePageKey("defaultHomepage"_L1);
+ const QString EnableAddressBarKey("EnableAddressBar"_L1);
+ const QString EnableDocManagerKey("EnableDocumentationManager"_L1);
+ const QString EnableFilterKey("EnableFilterFunctionality"_L1);
+ const QString HideAddressBarKey("HideAddressBar"_L1);
+ const QString FilterToolbarHiddenKey("HideFilterFunctionality"_L1);
+ const QString LastPageKey("LastTabPage"_L1);
+ const QString LastRegisterTime("LastRegisterTime"_L1);
+ const QString LastShownPagesKey("LastShownPages"_L1);
+ const QString LastZoomFactorsKey(
#if defined(BROWSER_QTWEBKIT)
- "LastPagesZoomWebView"
+ "LastPagesZoomWebView"_L1
#else
- "LastPagesZoomTextBrowser"
+ "LastPagesZoomTextBrowser"_L1
#endif
- ));
- const QString WindowTitleKey(QLatin1String("WindowTitle"));
- const QString FullTextSearchFallbackKey(QLatin1String("FullTextSearchFallback"));
+ );
+ const QString WindowTitleKey("WindowTitle"_L1);
+ const QString FullTextSearchFallbackKey("FullTextSearchFallback"_L1);
} // anonymous namespace
-const QString CollectionConfiguration::DefaultZoomFactor(QLatin1String("0.0"));
-const QString CollectionConfiguration::ListSeparator(QLatin1String("|"));
+const QString CollectionConfiguration::DefaultZoomFactor("0.0"_L1);
+const QString CollectionConfiguration::ListSeparator("|"_L1);
uint CollectionConfiguration::creationTime(const QHelpEngineCore &helpEngine)
{
@@ -226,8 +192,7 @@ void CollectionConfiguration::setAboutImages(QHelpEngineCore &helpEngine,
const QString CollectionConfiguration::defaultHomePage(const QHelpEngineCore &helpEngine)
{
- return helpEngine.customValue(DefaultHomePageKey, QLatin1String("help")).
- toString();
+ return helpEngine.customValue(DefaultHomePageKey, "help"_L1).toString();
}
void CollectionConfiguration::setDefaultHomePage(QHelpEngineCore &helpEngine,
diff --git a/src/assistant/shared/collectionconfiguration.h b/src/assistant/shared/collectionconfiguration.h
index fbb3bed6c..854da02c8 100644
--- a/src/assistant/shared/collectionconfiguration.h
+++ b/src/assistant/shared/collectionconfiguration.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Assistant of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 COLLECTIONCONFIGURATION_H
#define COLLECTIONCONFIGURATION_H
diff --git a/src/designer/CMakeLists.txt b/src/designer/CMakeLists.txt
index 35b6eeace..b4deaf956 100644
--- a/src/designer/CMakeLists.txt
+++ b/src/designer/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from designer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
if(NOT QT_FEATURE_designer)
return()
diff --git a/src/designer/data/README b/src/designer/data/README
index b7160b8f6..5b05ffa26 100644
--- a/src/designer/data/README
+++ b/src/designer/data/README
@@ -1,4 +1,4 @@
-You may generate ui4.h and ui4.cpp parser files by using the generate_ui script
+You may generate ui4.h and ui4.cpp parser files by using the generate_ui.py script
or manually by invoking the xsltproc command:
xsltproc generate_header.xsl ui4.xsd > ui4.h
diff --git a/src/designer/data/generate_header.xsl b/src/designer/data/generate_header.xsl
index af39044be..c2b12dfa8 100644
--- a/src/designer/data/generate_header.xsl
+++ b/src/designer/data/generate_header.xsl
@@ -407,7 +407,7 @@
// -------------
//
// This file is not part of the Qt API. It exists for the convenience
-// of Qt Designer. This header
+// of Qt Widgets Designer. This header
// file may change from version to version without notice, or even be removed.
//
// We mean it.
diff --git a/src/designer/data/generate_impl.xsl b/src/designer/data/generate_impl.xsl
index 2002c71a1..7ce02f41b 100644
--- a/src/designer/data/generate_impl.xsl
+++ b/src/designer/data/generate_impl.xsl
@@ -161,29 +161,12 @@
</xsl:template>
- <!-- Format a string constant for comparison as QLatin1String("foo") - they're all ascii-only -->
- <xsl:template name="string-constant-for-comparison">
- <xsl:param name="literal"/>
- <xsl:text>QLatin1String("</xsl:text>
- <xsl:value-of select="$literal"/>
- <xsl:text>")</xsl:text>
- </xsl:template>
-
- <!-- Format a string constant for storage as QString(QLatin1Char('X')) or QLatin1String("foo"), respectively -->
- <xsl:template name="string-constant-for-storage">
+ <!-- Format a string constant -->
+ <xsl:template name="string-constant">
<xsl:param name="literal"/>
- <xsl:choose>
- <xsl:when test="string-length($literal) &lt; 2">
- <xsl:text>QString(QLatin1Char('</xsl:text>
- <xsl:value-of select="$literal"/>
- <xsl:text>'))</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>QStringLiteral("</xsl:text>
- <xsl:value-of select="$literal"/>
- <xsl:text>")</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
+ <xsl:text>u"</xsl:text>
+ <xsl:value-of select="$literal"/>
+ <xsl:text>"_s</xsl:text>
</xsl:template>
<!-- Implementation: read(QXmlStreamReader) -->
@@ -217,7 +200,7 @@
</xsl:variable>
<xsl:text> if (name == </xsl:text>
- <xsl:call-template name="string-constant-for-comparison">
+ <xsl:call-template name="string-constant">
<xsl:with-param name="literal" select="@name"/>
</xsl:call-template>
<xsl:text>) {&endl;</xsl:text>
@@ -230,7 +213,7 @@
<xsl:text> }&endl;</xsl:text>
</xsl:for-each>
- <xsl:text> reader.raiseError(QLatin1String("Unexpected attribute ") + name);&endl;</xsl:text>
+ <xsl:text> reader.raiseError("Unexpected attribute "_L1 + name);&endl;</xsl:text>
<xsl:text> }&endl;</xsl:text>
<xsl:text>&endl;</xsl:text>
</xsl:if>
@@ -264,7 +247,7 @@
<xsl:variable name="array" select="@maxOccurs = 'unbounded'"/>
<xsl:text> if (!tag.compare(</xsl:text>
- <xsl:call-template name="string-constant-for-comparison">
+ <xsl:call-template name="string-constant">
<xsl:with-param name="literal" select="$lower-name"/>
</xsl:call-template>
<xsl:text>, Qt::CaseInsensitive)) {&endl;</xsl:text>
@@ -355,7 +338,7 @@
</xsl:call-template>
</xsl:for-each>
- <xsl:text> reader.raiseError(QLatin1String("Unexpected element ") + tag);&endl;</xsl:text>
+ <xsl:text> reader.raiseError("Unexpected element "_L1 + tag);&endl;</xsl:text>
<xsl:text> }&endl;</xsl:text>
<xsl:text> break;&endl;</xsl:text>
<xsl:text> case QXmlStreamReader::EndElement :&endl;</xsl:text>
@@ -402,7 +385,7 @@
<xsl:value-of select="$cap-name"/>
<xsl:text>())&endl;</xsl:text>
<xsl:text> writer.writeAttribute(</xsl:text>
- <xsl:call-template name="string-constant-for-storage">
+ <xsl:call-template name="string-constant">
<xsl:with-param name="literal" select="$lower-name"/>
</xsl:call-template>
@@ -458,7 +441,7 @@
</xsl:variable>
<xsl:text> writer.writeTextElement(</xsl:text>
- <xsl:call-template name="string-constant-for-storage">
+ <xsl:call-template name="string-constant">
<xsl:with-param name="literal" select="$camel-case-name"/>
</xsl:call-template>
<xsl:text>, </xsl:text>
@@ -478,7 +461,7 @@
<xsl:text> m_</xsl:text>
<xsl:value-of select="$camel-case-name"/>
<xsl:text>->write(writer, </xsl:text>
- <xsl:call-template name="string-constant-for-storage">
+ <xsl:call-template name="string-constant">
<xsl:with-param name="literal" select="$lower-name"/>
</xsl:call-template>
<xsl:text>);&endl;</xsl:text>
@@ -533,7 +516,7 @@
<xsl:choose>
<xsl:when test="$xs-type-cat = 'pointer'">
<xsl:text> v->write(writer, </xsl:text>
- <xsl:call-template name="string-constant-for-storage">
+ <xsl:call-template name="string-constant">
<xsl:with-param name="literal" select="$lower-name"/>
</xsl:call-template>
<xsl:text>);&endl;</xsl:text>
@@ -547,7 +530,7 @@
</xsl:variable>
<xsl:text> writer.writeTextElement(</xsl:text>
- <xsl:call-template name="string-constant-for-storage">
+ <xsl:call-template name="string-constant">
<xsl:with-param name="literal" select="$lower-name"/>
</xsl:call-template>
<xsl:text>, </xsl:text>
@@ -566,7 +549,7 @@
<xsl:text> m_</xsl:text>
<xsl:value-of select="$camel-case-name"/>
<xsl:text>->write(writer, </xsl:text>
- <xsl:call-template name="string-constant-for-storage">
+ <xsl:call-template name="string-constant">
<xsl:with-param name="literal" select="$lower-name"/>
</xsl:call-template>
<xsl:text>);&endl;</xsl:text>
@@ -579,7 +562,7 @@
</xsl:call-template>
</xsl:variable>
<xsl:text> writer.writeTextElement(</xsl:text>
- <xsl:call-template name="string-constant-for-storage">
+ <xsl:call-template name="string-constant">
<xsl:with-param name="literal" select="$lower-name"/>
</xsl:call-template>
<xsl:text>, </xsl:text>
@@ -838,6 +821,7 @@
<xsl:text>&endl;</xsl:text>
<xsl:text>&endl;</xsl:text>
<xsl:text>QT_BEGIN_NAMESPACE&endl;</xsl:text>
+ <xsl:text>&endl;using namespace Qt::StringLiterals;&endl;&endl;</xsl:text>
<xsl:text>#ifdef QFORMINTERNAL_NAMESPACE&endl;</xsl:text>
<xsl:text>using namespace QFormInternal;&endl;</xsl:text>
diff --git a/src/designer/data/generate_shared.xsl b/src/designer/data/generate_shared.xsl
index 38269cd61..d1ca2b94b 100644
--- a/src/designer/data/generate_shared.xsl
+++ b/src/designer/data/generate_shared.xsl
@@ -48,6 +48,8 @@
<xsl:when test="$text='pointsize'">pointSize</xsl:when>
<xsl:when test="$text='strikeout'">strikeOut</xsl:when>
<xsl:when test="$text='stylestrategy'">styleStrategy</xsl:when>
+ <xsl:when test="$text='hintingpreference'">hintingPreference</xsl:when>
+ <xsl:when test="$text='fontweight'">fontWeight</xsl:when>
<xsl:when test="$text='hsizetype'">hSizeType</xsl:when>
<xsl:when test="$text='vsizetype'">vSizeType</xsl:when>
<xsl:when test="$text='horstretch'">horStretch</xsl:when>
@@ -142,7 +144,7 @@
</xsl:when>
<xsl:when test="$xs-type='xs:boolean'">
<xsl:value-of select="$val"/>
- <xsl:text> == QLatin1String("true")</xsl:text>
+ <xsl:text> == u"true"_s</xsl:text>
</xsl:when>
<xsl:when test="$xs-type='xs:long'">
<xsl:value-of select="$val"/>
@@ -217,9 +219,7 @@
<xsl:when test="$xs-type='xs:boolean'">
<xsl:text>(</xsl:text>
<xsl:value-of select="$val"/>
- <!-- Note: Do not use QStringLiteral here as the types are not compatible:
- QConstStringData<5> vs QConstStringData<4> -->
- <xsl:text> ? QLatin1String("true") : QLatin1String("false"))</xsl:text>
+ <xsl:text> ? u"true"_s : u"false"_s)</xsl:text>
</xsl:when>
<xsl:otherwise>### BZZZZT! ###</xsl:otherwise>
</xsl:choose>
diff --git a/src/designer/data/generate_ui b/src/designer/data/generate_ui
deleted file mode 100755
index 4c723a61c..000000000
--- a/src/designer/data/generate_ui
+++ /dev/null
@@ -1,126 +0,0 @@
-#!/usr/bin/perl -w
-####################################################################################################
-#
-# Helper script for Qt 5
-#
-# Copyright (C) 2015 The Qt Company Ltd.
-# Contact: http://www.qt.io/licensing/
-#
-####################################################################################################
-
-############################################################################################
-#
-# Generates the source files ui4.cpp, ui4.h used in the uic tool, the QtUiTools library and
-# Qt Designer from the XML schema used for .ui files.
-#
-############################################################################################
-
-use strict;
-
-use File::Basename;
-use File::Spec;
-use File::Copy;
-use IO::File;
-use File::Path;
-use File::Temp;
-
-my $USAGE=<<EOF;
-Usage: generate_ui
-
-Generates the source files ui4.cpp, ui4.h used in the uic tool, the QtUiTools library and
-Qt Designer from the XML schema used for .ui files.
-
-Requires the environment variable QTDIR to point to qtbase and xalan.
-EOF
-
-my $qtDir = $ENV{'QTDIR'};
-die ('QTDIR not set') unless defined $qtDir && -d $qtDir;
-
-print 'Generating ui4.cpp/ui4.h ',$qtDir,"\n";
-
-my $uicDir = File::Spec->catfile($qtDir, 'src', 'tools', 'uic');
-my $toolsDir = File::Spec->catfile($qtDir, '..', 'qttools');
-my $designerDir = File::Spec->catfile($toolsDir, 'src', 'designer');
-my $uiLibDir = File::Spec->catfile($designerDir, 'src', 'lib', 'uilib');
-my $xmlDir = File::Spec->catfile($designerDir, 'data');
-my $qtXmlPatterns = File::Spec->catfile($qtDir, 'bin', 'xmlpatterns');
-
-print 'uic at: ',$uicDir, ' Designer at: ',$designerDir, ' uilib at: ',$uiLibDir,' XML at ',$xmlDir,"\n";
-die ('Invalid folder structure') unless -d $xmlDir && -d $uicDir && -d $uiLibDir;
-
-# Read out license delimited by '/** .. **/' from a C++ source
-sub readCppLicense
-{
- my ($fileName) = @_;
- my $license = '';
- my $file = new IO::File('<' . $fileName) or die ('Unable to open ' . $fileName . ' for reading: ' . $!);
- while (my $line = <$file>) {
- $license .= $line;
- last if index($line, '*****/') >= 0;
- }
- $file->close();
- return $license;
-}
-
-# Replace special keys in XSL files and return a handle to temporary file
-sub replaceXslKeys
-{
- my ($xslSourceFileName, $license, $uiHeaderName) = @_;
-
- my $xslSourceFile = new IO::File('<' . $xslSourceFileName) or die ('Unable to open ' . $xslSourceFileName . ' for reading: ' . $!);
- my $xsl = '';
- while (my $line = <$xslSourceFile>) {
- $xsl .= $line;
- }
- $xslSourceFile->close();
- $xsl =~ s/\@LICENSE\@/$license/g;
- $xsl =~ s/\@HEADER\@/$uiHeaderName/g if defined $uiHeaderName;
-
- my $xslHandle = File::Temp->new(DIR => dirname($xslSourceFileName), SUFFIX => '.xsl');
- print $xslHandle $xsl;
- $xslHandle->close();
- return $xslHandle;
-}
-
-# Run xalan. Note: xmlpatterns currently reports a syntax error on the sheets
-sub runXSLT
-{
- my ($source, $sheet, $target) = @_;
- my $rc = system('xalan', '-in', $source, '-xsl', $sheet, '-out', $target);
-# my $rc = system($qtXmlPatterns, '-output', $target, $sheet, $source);
- die ('Xalan failed on ' . $source . ' ' . $sheet) unless $rc == 0;
-}
-
-# Generate uilib header and source.
-
-my $uiLibImpl = File::Spec->catfile($uiLibDir, 'ui4.cpp');
-my $uiLibHeader = File::Spec->catfile($uiLibDir, 'ui4_p.h');
-my $license = readCppLicense($uiLibImpl);
-
-print "Running XSLT processor for uilib header...\n";
-
-my $ui4Xsd = File::Spec->catfile($xmlDir, 'ui4.xsd');
-my $headerXslSource = File::Spec->catfile($xmlDir, 'generate_header.xsl');
-my $headerXsl = replaceXslKeys($headerXslSource, $license);
-runXSLT($ui4Xsd, $headerXsl->filename, $uiLibHeader);
-
-print "Running XSLT processor for uilib source...\n";
-my $implXslSource = File::Spec->catfile($xmlDir, 'generate_impl.xsl');
-my $implXsl = replaceXslKeys($implXslSource, $license, 'ui4_p.h');
-runXSLT($ui4Xsd, $implXsl->filename, $uiLibImpl);
-
-# uic: Header is called 'ui4.h' instead of 'ui4_p.h'
-
-my $uicImpl = File::Spec->catfile($uicDir, 'ui4.cpp');
-my $uicHeader = File::Spec->catfile($uicDir, 'ui4.h');
-$license = readCppLicense($uicImpl);
-
-print "Running XSLT processor for uic header...\n";
-$headerXsl = replaceXslKeys($headerXslSource, $license);
-runXSLT($ui4Xsd, $headerXsl->filename, $uicHeader);
-
-print "Running XSLT processor for uic source...\n";
-$implXsl = replaceXslKeys($implXslSource, $license, 'ui4.h');
-runXSLT($ui4Xsd, $implXsl->filename, $uicImpl);
-
-system('git', 'diff');
diff --git a/src/designer/data/generate_ui.py b/src/designer/data/generate_ui.py
new file mode 100644
index 000000000..05472c7f5
--- /dev/null
+++ b/src/designer/data/generate_ui.py
@@ -0,0 +1,96 @@
+#!/usr/bin/python3
+
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import os
+import subprocess
+
+from argparse import ArgumentParser, RawTextHelpFormatter
+from pathlib import Path
+from tempfile import NamedTemporaryFile
+
+
+DESCRIPTION = """
+Usage: generate_ui.py
+
+Generates the source files ui4.cpp, ui4.h used in the uic tool, the QtUiTools library and
+Qt Widgets Designer from the XML schema used for .ui files.
+
+Requires xalan.
+"""
+
+
+opt_delete_temp_files = True
+
+
+def read_cpp_license(path):
+ """Read out the license from a C++ source"""
+ result = ""
+ for line in path.read_text().splitlines():
+ result += line + "\n"
+ if 'SPDX-License-Identifier' in line:
+ break
+ return result
+
+
+def replace_xsl_keys(xsl_source_file, license, ui_header_name=None):
+ """Replace special keys in XSL files and return a handle to temporary file"""
+ xsl = xsl_source_file.read_text()
+ xsl = xsl.replace("@LICENSE@", license)
+ if ui_header_name:
+ xsl = xsl.replace("@HEADER@", ui_header_name)
+
+ result = NamedTemporaryFile(mode='w', suffix='.xsl',
+ dir=Path.cwd(),
+ delete=opt_delete_temp_files)
+ result.write(xsl)
+ return result
+
+
+def run_xslt(source, sheet, target):
+ """Run xalan."""
+ cmd = ['xalan', '-in', os.fspath(source), '-xsl', os.fspath(sheet),
+ '-out', os.fspath(target)]
+ subprocess.check_call(cmd)
+
+
+if __name__ == '__main__':
+ argument_parser = ArgumentParser(description=DESCRIPTION,
+ formatter_class=RawTextHelpFormatter)
+ argument_parser.add_argument('--keep', '-k', action='store_true',
+ help='Keep temporary files')
+ options = argument_parser.parse_args()
+ opt_delete_temp_files = not options.keep
+
+ # Generate uilib header and source.
+ xml_dir = Path(__file__).parent.resolve()
+ ui4_xsd = xml_dir / 'ui4.xsd'
+
+ designer_dir = xml_dir.parent
+ uilib_dir = designer_dir / "src" / "lib" / "uilib"
+ uilib_impl = uilib_dir / 'ui4.cpp'
+ license = read_cpp_license(uilib_impl)
+
+ print("Running XSLT processor for uilib header...\n")
+ header_xsl_source = xml_dir / 'generate_header.xsl'
+ header_xsl = replace_xsl_keys(header_xsl_source, license)
+ run_xslt(ui4_xsd, header_xsl.name, uilib_dir / 'ui4_p.h')
+
+ print("Running XSLT processor for uilib source...\n")
+ impl_xsl_source = xml_dir / 'generate_impl.xsl'
+ impl_xsl = replace_xsl_keys(impl_xsl_source, license, 'ui4_p.h')
+ run_xslt(ui4_xsd, impl_xsl.name, uilib_impl)
+
+ # uic: Header is called 'ui4.h' instead of 'ui4_p.h'
+ uic_dir = designer_dir.parents[2] / "qtbase" / "src" / "tools" / "uic"
+ uic_impl = uic_dir / 'ui4.cpp'
+ license = read_cpp_license(uic_impl)
+ print("Running XSLT processor for uic header...\n")
+ header_xsl = replace_xsl_keys(header_xsl_source, license)
+ run_xslt(ui4_xsd, header_xsl.name, uic_dir / 'ui4.h')
+ print("Running XSLT processor for uic source...\n")
+ impl_xsl = replace_xsl_keys(impl_xsl_source, license, 'ui4.h')
+ run_xslt(ui4_xsd, impl_xsl.name, uic_impl)
+
+ subprocess.call(['git', 'diff'])
diff --git a/src/designer/data/ui4.xsd b/src/designer/data/ui4.xsd
index e1dc35d49..0063f473b 100644
--- a/src/designer/data/ui4.xsd
+++ b/src/designer/data/ui4.xsd
@@ -301,6 +301,7 @@
<xs:all>
<xs:element name="family" type="xs:string" minOccurs="0" />
<xs:element name="pointsize" type="xs:integer" minOccurs="0" />
+ <!-- Qt 4 legacy (int) -->
<xs:element name="weight" type="xs:integer" minOccurs="0" />
<xs:element name="italic" type="xs:boolean" minOccurs="0" />
<xs:element name="bold" type="xs:boolean" minOccurs="0" />
@@ -309,6 +310,9 @@
<xs:element name="antialiasing" type="xs:boolean" minOccurs="0" />
<xs:element name="stylestrategy" type="xs:string" minOccurs="0" />
<xs:element name="kerning" type="xs:boolean" minOccurs="0" />
+ <xs:element name="hintingpreference" type="xs:string" minOccurs="0"/>
+ <!-- Qt 5/6 (enum) -->
+ <xs:element name="fontweight" type="xs:string" minOccurs="0"/>
</xs:all>
</xs:complexType>
diff --git a/src/designer/designer.pro b/src/designer/designer.pro
deleted file mode 100644
index a4c2c27b8..000000000
--- a/src/designer/designer.pro
+++ /dev/null
@@ -1,7 +0,0 @@
-include($$OUT_PWD/../../src/global/qttools-config.pri)
-QT_FOR_CONFIG += tools-private
-requires(qtConfig(designer))
-
-TEMPLATE = subdirs
-
-SUBDIRS = src
diff --git a/src/designer/src/CMakeLists.txt b/src/designer/src/CMakeLists.txt
index 32fb45160..00d2a48e2 100644
--- a/src/designer/src/CMakeLists.txt
+++ b/src/designer/src/CMakeLists.txt
@@ -1,5 +1,5 @@
-# Generated from src.pro.
-
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
qt_exclude_tool_directories_from_default_target(
lib
@@ -8,8 +8,6 @@ qt_exclude_tool_directories_from_default_target(
plugins
)
-add_subdirectory(uiplugin)
-add_subdirectory(uitools)
if(QT_FEATURE_process)
add_subdirectory(lib)
add_subdirectory(components)
diff --git a/src/designer/src/components/CMakeLists.txt b/src/designer/src/components/CMakeLists.txt
index df5b03f92..ec6a9a8fd 100644
--- a/src/designer/src/components/CMakeLists.txt
+++ b/src/designer/src/components/CMakeLists.txt
@@ -1,3 +1,4 @@
-# Generated from components.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(lib)
diff --git a/src/designer/src/components/buddyeditor/buddyeditor.cpp b/src/designer/src/components/buddyeditor/buddyeditor.cpp
index b31e2830b..452d33771 100644
--- a/src/designer/src/components/buddyeditor/buddyeditor.cpp
+++ b/src/designer/src/components/buddyeditor/buddyeditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "buddyeditor.h"
@@ -53,7 +28,9 @@
QT_BEGIN_NAMESPACE
-static const char *buddyPropertyC = "buddy";
+using namespace Qt::StringLiterals;
+
+static constexpr auto buddyPropertyC = "buddy"_L1;
static bool canBeBuddy(QWidget *w, QDesignerFormWindowInterface *form)
{
@@ -64,7 +41,7 @@ static bool canBeBuddy(QWidget *w, QDesignerFormWindowInterface *form)
QExtensionManager *ext = form->core()->extensionManager();
if (QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(ext, w)) {
- const int index = sheet->indexOf(QStringLiteral("focusPolicy"));
+ const int index = sheet->indexOf(u"focusPolicy"_s);
if (index != -1) {
bool ok = false;
const Qt::FocusPolicy q = static_cast<Qt::FocusPolicy>(qdesigner_internal::Utils::valueOf(sheet->property(index), &ok));
@@ -80,7 +57,7 @@ static QString buddy(QLabel *label, QDesignerFormEditorInterface *core)
QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core->extensionManager(), label);
if (sheet == nullptr)
return QString();
- const int prop_idx = sheet->indexOf(QLatin1String(buddyPropertyC));
+ const int prop_idx = sheet->indexOf(buddyPropertyC);
if (prop_idx == -1)
return QString();
return sheet->property(prop_idx).toString();
@@ -183,11 +160,11 @@ void BuddyEditor::updateBackground()
if (!toRemove.isEmpty()) {
DeleteConnectionsCommand command(this, toRemove);
command.redo();
- for (Connection *con : qAsConst(toRemove))
+ for (Connection *con : std::as_const(toRemove))
delete takeConnection(con);
}
- for (Connection *newConn : qAsConst(newList)) {
+ for (Connection *newConn : std::as_const(newList)) {
bool found = false;
const int c = connectionCount();
for (int i = 0; i < c; i++) {
@@ -212,6 +189,8 @@ void BuddyEditor::setBackground(QWidget *background)
{
clear();
ConnectionEdit::setBackground(background);
+ if (background == nullptr)
+ return;
const auto label_list = background->findChildren<QLabel*>();
for (QLabel *label : label_list) {
@@ -232,7 +211,7 @@ void BuddyEditor::setBackground(QWidget *background)
static QUndoCommand *createBuddyCommand(QDesignerFormWindowInterface *fw, QLabel *label, QWidget *buddy)
{
SetPropertyCommand *command = new SetPropertyCommand(fw);
- command->init(label, QLatin1String(buddyPropertyC), buddy->objectName());
+ command->init(label, buddyPropertyC, buddy->objectName());
command->setText(BuddyEditor::tr("Add buddy"));
return command;
}
@@ -276,7 +255,7 @@ void BuddyEditor::widgetRemoved(QWidget *widget)
child_list.prepend(widget);
ConnectionSet remove_set;
- for (QWidget *w : qAsConst(child_list)) {
+ for (QWidget *w : std::as_const(child_list)) {
const ConnectionList &cl = connectionList();
for (Connection *con : cl) {
if (con->widget(EndPoint::Source) == w || con->widget(EndPoint::Target) == w)
@@ -286,7 +265,7 @@ void BuddyEditor::widgetRemoved(QWidget *widget)
if (!remove_set.isEmpty()) {
undoStack()->beginMacro(tr("Remove buddies"));
- for (Connection *con : qAsConst(remove_set)) {
+ for (Connection *con : std::as_const(remove_set)) {
setSelected(con, false);
con->update();
QWidget *source = con->widget(EndPoint::Source);
@@ -294,7 +273,7 @@ void BuddyEditor::widgetRemoved(QWidget *widget)
qDebug("BuddyConnection::widgetRemoved(): not a label");
} else {
ResetPropertyCommand *command = new ResetPropertyCommand(formWindow());
- command->init(source, QLatin1String(buddyPropertyC));
+ command->init(source, buddyPropertyC);
undoStack()->push(command);
}
delete takeConnection(con);
@@ -318,7 +297,7 @@ void BuddyEditor::deleteSelected()
qDebug("BuddyConnection::deleteSelected(): not a label");
} else {
ResetPropertyCommand *command = new ResetPropertyCommand(formWindow());
- command->init(source, QLatin1String(buddyPropertyC));
+ command->init(source, buddyPropertyC);
undoStack()->push(command);
}
delete takeConnection(con);
@@ -358,10 +337,10 @@ void BuddyEditor::autoBuddy()
// Add the list in one go.
if (labelList.isEmpty())
return;
- const int count = labelList.size();
+ const auto count = labelList.size();
Q_ASSERT(count == buddies.size());
undoStack()->beginMacro(tr("Add %n buddies", nullptr, count));
- for (int i = 0; i < count; i++)
+ for (qsizetype i = 0; i < count; ++i)
undoStack()->push(createBuddyCommand(m_formWindow, labelList.at(i), buddies.at(i)));
undoStack()->endMacro();
// Now select all new ones
diff --git a/src/designer/src/components/buddyeditor/buddyeditor.h b/src/designer/src/components/buddyeditor/buddyeditor.h
index 86ce41f6a..d844b997c 100644
--- a/src/designer/src/components/buddyeditor/buddyeditor.h
+++ b/src/designer/src/components/buddyeditor/buddyeditor.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef BUDDYEDITOR_H
#define BUDDYEDITOR_H
diff --git a/src/designer/src/components/buddyeditor/buddyeditor.pri b/src/designer/src/components/buddyeditor/buddyeditor.pri
deleted file mode 100644
index b6e9614c1..000000000
--- a/src/designer/src/components/buddyeditor/buddyeditor.pri
+++ /dev/null
@@ -1,17 +0,0 @@
-
-QT += xml
-
-INCLUDEPATH += $$PWD
-
-HEADERS += \
- $$PWD/buddyeditor.h \
- $$PWD/buddyeditor_plugin.h \
- $$PWD/buddyeditor_tool.h \
- $$PWD/buddyeditor_global.h
-
-SOURCES += \
- $$PWD/buddyeditor.cpp \
- $$PWD/buddyeditor_tool.cpp \
- $$PWD/buddyeditor_plugin.cpp
-
-OTHER_FILES += $$PWD/buddyeditor.json
diff --git a/src/designer/src/components/buddyeditor/buddyeditor_global.h b/src/designer/src/components/buddyeditor/buddyeditor_global.h
index 75d5323d1..1085e409b 100644
--- a/src/designer/src/components/buddyeditor/buddyeditor_global.h
+++ b/src/designer/src/components/buddyeditor/buddyeditor_global.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef BUDDYEDITOR_GLOBAL_H
#define BUDDYEDITOR_GLOBAL_H
diff --git a/src/designer/src/components/buddyeditor/buddyeditor_plugin.cpp b/src/designer/src/components/buddyeditor/buddyeditor_plugin.cpp
index 868c52125..b4128bad4 100644
--- a/src/designer/src/components/buddyeditor/buddyeditor_plugin.cpp
+++ b/src/designer/src/components/buddyeditor/buddyeditor_plugin.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QtGui/qaction.h>
@@ -37,7 +12,9 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+using namespace Qt::StringLiterals;
+
+namespace qdesigner_internal {
BuddyEditorPlugin::BuddyEditorPlugin() = default;
@@ -53,9 +30,9 @@ void BuddyEditorPlugin::initialize(QDesignerFormEditorInterface *core)
Q_ASSERT(!isInitialized());
m_action = new QAction(tr("Edit Buddies"), this);
- m_action->setObjectName(QStringLiteral("__qt_edit_buddies_action"));
- QIcon buddyIcon = QIcon::fromTheme(QStringLiteral("designer-edit-buddy"),
- QIcon(core->resourceLocation() + QStringLiteral("/buddytool.png")));
+ m_action->setObjectName(u"__qt_edit_buddies_action"_s);
+ QIcon buddyIcon = QIcon::fromTheme(u"designer-edit-buddy"_s,
+ QIcon(core->resourceLocation() + "/buddytool.png"_L1));
m_action->setIcon(buddyIcon);
m_action->setEnabled(false);
@@ -112,4 +89,6 @@ void BuddyEditorPlugin::activeFormWindowChanged(QDesignerFormWindowInterface *fo
m_action->setEnabled(formWindow != nullptr);
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/buddyeditor/buddyeditor_plugin.h b/src/designer/src/components/buddyeditor/buddyeditor_plugin.h
index 340c239b0..1e38f0ed9 100644
--- a/src/designer/src/components/buddyeditor/buddyeditor_plugin.h
+++ b/src/designer/src/components/buddyeditor/buddyeditor_plugin.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef BUDDYEDITOR_PLUGIN_H
#define BUDDYEDITOR_PLUGIN_H
diff --git a/src/designer/src/components/buddyeditor/buddyeditor_tool.cpp b/src/designer/src/components/buddyeditor/buddyeditor_tool.cpp
index 2cbb5ec8b..0ed4e7e64 100644
--- a/src/designer/src/components/buddyeditor/buddyeditor_tool.cpp
+++ b/src/designer/src/components/buddyeditor/buddyeditor_tool.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "buddyeditor_tool.h"
#include "buddyeditor.h"
@@ -35,7 +10,7 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+namespace qdesigner_internal {
BuddyEditorTool::BuddyEditorTool(QDesignerFormWindowInterface *formWindow, QObject *parent)
: QDesignerFormWindowToolInterface(parent),
@@ -94,4 +69,6 @@ QAction *BuddyEditorTool::action() const
return m_action;
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/buddyeditor/buddyeditor_tool.h b/src/designer/src/components/buddyeditor/buddyeditor_tool.h
index 1bcee7d7e..136711ebb 100644
--- a/src/designer/src/components/buddyeditor/buddyeditor_tool.h
+++ b/src/designer/src/components/buddyeditor/buddyeditor_tool.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef BUDDYEDITOR_TOOL_H
#define BUDDYEDITOR_TOOL_H
diff --git a/src/designer/src/components/components.pro b/src/designer/src/components/components.pro
deleted file mode 100644
index dac34e57f..000000000
--- a/src/designer/src/components/components.pro
+++ /dev/null
@@ -1,2 +0,0 @@
-TEMPLATE = subdirs
-SUBDIRS = lib
diff --git a/src/designer/src/components/formeditor/default_actionprovider.cpp b/src/designer/src/components/formeditor/default_actionprovider.cpp
index 6a479e4b1..890391857 100644
--- a/src/designer/src/components/formeditor/default_actionprovider.cpp
+++ b/src/designer/src/components/formeditor/default_actionprovider.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "default_actionprovider.h"
#include "invisible_widget_p.h"
diff --git a/src/designer/src/components/formeditor/default_actionprovider.h b/src/designer/src/components/formeditor/default_actionprovider.h
index 15e5683bd..88e7fabc2 100644
--- a/src/designer/src/components/formeditor/default_actionprovider.h
+++ b/src/designer/src/components/formeditor/default_actionprovider.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef DEFAULT_ACTIONPROVIDER_H
#define DEFAULT_ACTIONPROVIDER_H
diff --git a/src/designer/src/components/formeditor/default_container.cpp b/src/designer/src/components/formeditor/default_container.cpp
index 747000aa6..ea68b9b21 100644
--- a/src/designer/src/components/formeditor/default_container.cpp
+++ b/src/designer/src/components/formeditor/default_container.cpp
@@ -1,36 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "default_container.h"
#include <QtCore/qdebug.h>
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
template <class Container>
static inline void setCurrentContainerIndex(int index, Container *container)
{
@@ -46,7 +23,7 @@ static inline void ensureNoParent(QWidget *widget)
widget->setParent(nullptr);
}
-static const char *PageLabel = "Page";
+static constexpr auto PageLabel = "Page"_L1;
namespace qdesigner_internal {
diff --git a/src/designer/src/components/formeditor/default_container.h b/src/designer/src/components/formeditor/default_container.h
index 3781d713d..a22abad42 100644
--- a/src/designer/src/components/formeditor/default_container.h
+++ b/src/designer/src/components/formeditor/default_container.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef DEFAULT_CONTAINER_H
#define DEFAULT_CONTAINER_H
diff --git a/src/designer/src/components/formeditor/default_layoutdecoration.cpp b/src/designer/src/components/formeditor/default_layoutdecoration.cpp
index 9a45b01b6..171bd0f4a 100644
--- a/src/designer/src/components/formeditor/default_layoutdecoration.cpp
+++ b/src/designer/src/components/formeditor/default_layoutdecoration.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "default_layoutdecoration.h"
#include "qlayout_widget_p.h"
diff --git a/src/designer/src/components/formeditor/default_layoutdecoration.h b/src/designer/src/components/formeditor/default_layoutdecoration.h
index 412824ff5..b9cf5939f 100644
--- a/src/designer/src/components/formeditor/default_layoutdecoration.h
+++ b/src/designer/src/components/formeditor/default_layoutdecoration.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef DEFAULT_LAYOUTDECORATION_H
#define DEFAULT_LAYOUTDECORATION_H
diff --git a/src/designer/src/components/formeditor/deviceprofiledialog.cpp b/src/designer/src/components/formeditor/deviceprofiledialog.cpp
index ef1693c39..6deabbaa1 100644
--- a/src/designer/src/components/formeditor/deviceprofiledialog.cpp
+++ b/src/designer/src/components/formeditor/deviceprofiledialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "deviceprofiledialog.h"
#include "ui_deviceprofiledialog.h"
@@ -44,11 +19,13 @@
QT_BEGIN_NAMESPACE
-static const char *profileExtensionC = "qdp";
+using namespace Qt::StringLiterals;
+
+static constexpr auto profileExtensionC = "qdp"_L1;
static inline QString fileFilter()
{
- return qdesigner_internal::DeviceProfileDialog::tr("Device Profiles (*.%1)").arg(QLatin1String(profileExtensionC));
+ return qdesigner_internal::DeviceProfileDialog::tr("Device Profiles (*.%1)").arg(profileExtensionC);
}
// Populate a combo with a sequence of integers, also set them as data.
@@ -84,9 +61,8 @@ DeviceProfileDialog::DeviceProfileDialog(QDesignerDialogGuiInterface *dlgGui, QW
// Styles
const QStringList styles = QStyleFactory::keys();
m_ui->m_styleCombo->addItem(tr("Default"), QVariant(QString()));
- const QStringList::const_iterator cend = styles.constEnd();
- for (QStringList::const_iterator it = styles.constBegin(); it != cend; ++it)
- m_ui->m_styleCombo->addItem(*it, *it);
+ for (const auto &s : styles)
+ m_ui->m_styleCombo->addItem(s, s);
connect(m_ui->m_nameLineEdit, &QLineEdit::textChanged, this, &DeviceProfileDialog::nameChanged);
connect(m_ui->buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
@@ -156,10 +132,8 @@ void DeviceProfileDialog::save()
QString fn = m_dlgGui->getSaveFileName(this, tr("Save Profile"), QString(), fileFilter());
if (fn.isEmpty())
return;
- if (QFileInfo(fn).completeSuffix().isEmpty()) {
- fn += QLatin1Char('.');
- fn += QLatin1String(profileExtensionC);
- }
+ if (QFileInfo(fn).completeSuffix().isEmpty())
+ fn += u'.' + profileExtensionC;
QFile file(fn);
if (!file.open(QIODevice::WriteOnly|QIODevice::Text)) {
diff --git a/src/designer/src/components/formeditor/deviceprofiledialog.h b/src/designer/src/components/formeditor/deviceprofiledialog.h
index ebccd31d9..34a9fe5b0 100644
--- a/src/designer/src/components/formeditor/deviceprofiledialog.h
+++ b/src/designer/src/components/formeditor/deviceprofiledialog.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/components/formeditor/deviceprofiledialog.ui b/src/designer/src/components/formeditor/deviceprofiledialog.ui
index 2915eb996..1671d9780 100644
--- a/src/designer/src/components/formeditor/deviceprofiledialog.ui
+++ b/src/designer/src/components/formeditor/deviceprofiledialog.ui
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DeviceProfileDialog</class>
- <widget class="QDialog" name="dialog">
+ <widget class="QDialog" name="DeviceProfileDialog">
<property name="geometry">
<rect>
<x>0</x>
diff --git a/src/designer/src/components/formeditor/dpi_chooser.cpp b/src/designer/src/components/formeditor/dpi_chooser.cpp
index 739d70832..5a34f124a 100644
--- a/src/designer/src/components/formeditor/dpi_chooser.cpp
+++ b/src/designer/src/components/formeditor/dpi_chooser.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "dpi_chooser.h"
@@ -145,7 +120,7 @@ void DPI_Chooser::setDPI(int dpiX, int dpiY)
int predefinedIndex = -1;
for (int i = 0; i < count; i++) {
const QVariant data = m_predefinedCombo->itemData(i);
- if (data.type() != QVariant::Invalid) {
+ if (data.metaType().id() != QMetaType::UnknownType) {
const struct DPI_Entry *entry = qvariant_cast<const struct DPI_Entry *>(data);
if (entry->dpiX == dpiX && entry->dpiY == dpiY) {
predefinedIndex = i;
@@ -178,7 +153,7 @@ void DPI_Chooser::syncSpinBoxes()
const QVariant data = m_predefinedCombo->itemData(predefIdx);
// Predefined mode in which spin boxes are disabled or user defined?
- const bool userSetting = data.type() == QVariant::Invalid;
+ const bool userSetting = data.metaType().id() == QMetaType::UnknownType;
m_dpiXSpinBox->setEnabled(userSetting);
m_dpiYSpinBox->setEnabled(userSetting);
diff --git a/src/designer/src/components/formeditor/dpi_chooser.h b/src/designer/src/components/formeditor/dpi_chooser.h
index 0efa2cdd0..ba8af375f 100644
--- a/src/designer/src/components/formeditor/dpi_chooser.h
+++ b/src/designer/src/components/formeditor/dpi_chooser.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/components/formeditor/embeddedoptionspage.cpp b/src/designer/src/components/formeditor/embeddedoptionspage.cpp
index 4a1c27035..3d9b7f9d5 100644
--- a/src/designer/src/components/formeditor/embeddedoptionspage.cpp
+++ b/src/designer/src/components/formeditor/embeddedoptionspage.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "embeddedoptionspage.h"
#include "deviceprofiledialog.h"
@@ -58,6 +33,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
using DeviceProfileList = QList<DeviceProfile>;
@@ -148,7 +125,7 @@ void EmbeddedOptionsControlPrivate::init(EmbeddedOptionsControl *q)
EmbeddedOptionsControl::connect(m_profileCombo, &QComboBox::currentIndexChanged,
m_q, &EmbeddedOptionsControl::slotProfileIndexChanged);
- m_addButton->setIcon(createIconSet(QString::fromUtf8("plus.png")));
+ m_addButton->setIcon(createIconSet("plus.png"_L1));
m_addButton->setToolTip(EmbeddedOptionsControl::tr("Add a profile"));
EmbeddedOptionsControl::connect(m_addButton, &QAbstractButton::clicked,
m_q, &EmbeddedOptionsControl::slotAdd);
@@ -156,11 +133,11 @@ void EmbeddedOptionsControlPrivate::init(EmbeddedOptionsControl *q)
EmbeddedOptionsControl::connect(m_editButton, &QAbstractButton::clicked,
m_q, &EmbeddedOptionsControl::slotEdit);
- m_editButton->setIcon(createIconSet(QString::fromUtf8("edit.png")));
+ m_editButton->setIcon(createIconSet("edit.png"_L1));
m_editButton->setToolTip(EmbeddedOptionsControl::tr("Edit the selected profile"));
hLayout->addWidget(m_editButton);
- m_deleteButton->setIcon(createIconSet(QString::fromUtf8("minus.png")));
+ m_deleteButton->setIcon(createIconSet("minus.png"_L1));
m_deleteButton->setToolTip(EmbeddedOptionsControl::tr("Delete the selected profile"));
EmbeddedOptionsControl::connect(m_deleteButton, &QAbstractButton::clicked,
m_q, &EmbeddedOptionsControl::slotDelete);
@@ -175,9 +152,8 @@ void EmbeddedOptionsControlPrivate::init(EmbeddedOptionsControl *q)
QStringList EmbeddedOptionsControlPrivate::existingProfileNames() const
{
QStringList rc;
- const DeviceProfileList::const_iterator dcend = m_sortedProfiles.constEnd();
- for (DeviceProfileList::const_iterator it = m_sortedProfiles.constBegin(); it != dcend; ++it)
- rc.push_back(it->name());
+ for (const auto &dp : m_sortedProfiles)
+ rc.append(dp.name());
return rc;
}
diff --git a/src/designer/src/components/formeditor/embeddedoptionspage.h b/src/designer/src/components/formeditor/embeddedoptionspage.h
index 8a412ed4c..d1d2d0fb7 100644
--- a/src/designer/src/components/formeditor/embeddedoptionspage.h
+++ b/src/designer/src/components/formeditor/embeddedoptionspage.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef EMBEDDEDOPTIONSPAGE_H
#define EMBEDDEDOPTIONSPAGE_H
diff --git a/src/designer/src/components/formeditor/formeditor.cpp b/src/designer/src/components/formeditor/formeditor.cpp
index 05e7fc4ee..4d92608f7 100644
--- a/src/designer/src/components/formeditor/formeditor.cpp
+++ b/src/designer/src/components/formeditor/formeditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "formeditor.h"
#include "formeditor_optionspage.h"
@@ -65,14 +40,21 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
-FormEditor::FormEditor(QObject *parent)
+FormEditor::FormEditor(QObject *parent) : FormEditor(QStringList{}, parent)
+{
+}
+
+FormEditor::FormEditor(const QStringList &pluginPaths,
+ QObject *parent)
: QDesignerFormEditorInterface(parent)
{
setIntrospection(new QDesignerIntrospection);
setDialogGui(new DialogGui);
- QDesignerPluginManager *pluginManager = new QDesignerPluginManager(this);
+ auto *pluginManager = new QDesignerPluginManager(pluginPaths, this);
setPluginManager(pluginManager);
WidgetDataBase *widgetDatabase = new WidgetDataBase(this, this);
@@ -127,8 +109,7 @@ FormEditor::FormEditor(QObject *parent)
QTreeViewPropertySheetFactory::registerExtension(mgr);
QTableViewPropertySheetFactory::registerExtension(mgr);
- const QString internalTaskMenuId = QStringLiteral("QDesignerInternalTaskMenuExtension");
- QDesignerTaskMenuFactory::registerExtension(mgr, internalTaskMenuId);
+ QDesignerTaskMenuFactory::registerExtension(mgr, u"QDesignerInternalTaskMenuExtension"_s);
mgr->registerExtensions(new QDesignerMemberSheetFactory(mgr),
Q_TYPEID(QDesignerMemberSheetExtension));
diff --git a/src/designer/src/components/formeditor/formeditor.h b/src/designer/src/components/formeditor/formeditor.h
index 25698c23d..483bd6b69 100644
--- a/src/designer/src/components/formeditor/formeditor.h
+++ b/src/designer/src/components/formeditor/formeditor.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef FORMEDITOR_H
#define FORMEDITOR_H
@@ -44,6 +19,8 @@ class QT_FORMEDITOR_EXPORT FormEditor: public QDesignerFormEditorInterface
Q_OBJECT
public:
FormEditor(QObject *parent = nullptr);
+ FormEditor(const QStringList &pluginPaths,
+ QObject *parent = nullptr);
~FormEditor() override;
public slots:
void slotQrcFileChangedExternally(const QString &path);
diff --git a/src/designer/src/components/formeditor/formeditor.pri b/src/designer/src/components/formeditor/formeditor.pri
deleted file mode 100644
index 7e4afd021..000000000
--- a/src/designer/src/components/formeditor/formeditor.pri
+++ /dev/null
@@ -1,67 +0,0 @@
-
-QT += xml
-
-INCLUDEPATH += $$PWD
-
-FORMS += $$PWD/deviceprofiledialog.ui \
- $$PWD/formwindowsettings.ui \
- $$PWD/templateoptionspage.ui
-
-HEADERS += $$PWD/qdesigner_resource.h \
- $$PWD/formwindow.h \
- $$PWD/formwindow_widgetstack.h \
- $$PWD/formwindow_dnditem.h \
- $$PWD/formwindowcursor.h \
- $$PWD/widgetselection.h \
- $$PWD/formwindowmanager.h \
- $$PWD/formeditor.h \
- $$PWD/formeditor_global.h \
- $$PWD/qlayoutwidget_propertysheet.h \
- $$PWD/layout_propertysheet.h \
- $$PWD/spacer_propertysheet.h \
- $$PWD/line_propertysheet.h \
- $$PWD/default_container.h \
- $$PWD/default_actionprovider.h \
- $$PWD/qmainwindow_container.h \
- $$PWD/qmdiarea_container.h \
- $$PWD/qwizard_container.h \
- $$PWD/default_layoutdecoration.h \
- $$PWD/tool_widgeteditor.h \
- $$PWD/formeditor_optionspage.h \
- $$PWD/embeddedoptionspage.h \
- $$PWD/formwindowsettings.h \
- $$PWD/deviceprofiledialog.h \
- $$PWD/dpi_chooser.h \
- $$PWD/previewactiongroup.h \
- $$PWD/itemview_propertysheet.h \
- $$PWD/templateoptionspage.h
-
-SOURCES += $$PWD/qdesigner_resource.cpp \
- $$PWD/formwindow.cpp \
- $$PWD/formwindow_widgetstack.cpp \
- $$PWD/formwindow_dnditem.cpp \
- $$PWD/formwindowcursor.cpp \
- $$PWD/widgetselection.cpp \
- $$PWD/formwindowmanager.cpp \
- $$PWD/formeditor.cpp \
- $$PWD/qlayoutwidget_propertysheet.cpp \
- $$PWD/layout_propertysheet.cpp \
- $$PWD/spacer_propertysheet.cpp \
- $$PWD/line_propertysheet.cpp \
- $$PWD/qmainwindow_container.cpp \
- $$PWD/qmdiarea_container.cpp \
- $$PWD/qwizard_container.cpp \
- $$PWD/default_container.cpp \
- $$PWD/default_layoutdecoration.cpp \
- $$PWD/default_actionprovider.cpp \
- $$PWD/tool_widgeteditor.cpp \
- $$PWD/formeditor_optionspage.cpp \
- $$PWD/embeddedoptionspage.cpp \
- $$PWD/formwindowsettings.cpp \
- $$PWD/deviceprofiledialog.cpp \
- $$PWD/dpi_chooser.cpp \
- $$PWD/previewactiongroup.cpp \
- $$PWD/itemview_propertysheet.cpp \
- $$PWD/templateoptionspage.cpp
-
-RESOURCES += $$PWD/formeditor.qrc
diff --git a/src/designer/src/components/formeditor/formeditor.qrc b/src/designer/src/components/formeditor/formeditor.qrc
deleted file mode 100644
index 351658088..000000000
--- a/src/designer/src/components/formeditor/formeditor.qrc
+++ /dev/null
@@ -1,179 +0,0 @@
-<RCC>
- <qresource prefix="/qt-project.org/formeditor">
- <file>images/submenu.png</file>
- <file>images/cursors/arrow.png</file>
- <file>images/cursors/busy.png</file>
- <file>images/cursors/closedhand.png</file>
- <file>images/cursors/cross.png</file>
- <file>images/cursors/hand.png</file>
- <file>images/cursors/hsplit.png</file>
- <file>images/cursors/ibeam.png</file>
- <file>images/cursors/no.png</file>
- <file>images/cursors/openhand.png</file>
- <file>images/cursors/sizeall.png</file>
- <file>images/cursors/sizeb.png</file>
- <file>images/cursors/sizef.png</file>
- <file>images/cursors/sizeh.png</file>
- <file>images/cursors/sizev.png</file>
- <file>images/cursors/uparrow.png</file>
- <file>images/cursors/vsplit.png</file>
- <file>images/cursors/wait.png</file>
- <file>images/cursors/whatsthis.png</file>
- <file>images/emptyicon.png</file>
- <file>images/filenew-16.png</file>
- <file>images/fileopen-16.png</file>
- <file>images/editdelete-16.png</file>
- <file>images/plus-16.png</file>
- <file>images/minus-16.png</file>
- <file>images/prefix-add.png</file>
- <file>images/downplus.png</file>
- <file>images/leveldown.png</file>
- <file>images/levelup.png</file>
- <file>images/righttoleft.png</file>
- <file>images/mac/adjustsize.png</file>
- <file>images/mac/widgettool.png</file>
- <file>images/mac/signalslottool.png</file>
- <file>images/mac/tabordertool.png</file>
- <file>images/mac/buddytool.png</file>
- <file>images/mac/editbreaklayout.png</file>
- <file>images/mac/editcopy.png</file>
- <file>images/mac/editcut.png</file>
- <file>images/mac/editdelete.png</file>
- <file>images/mac/editgrid.png</file>
- <file>images/mac/editform.png</file>
- <file>images/mac/edithlayout.png</file>
- <file>images/mac/edithlayoutsplit.png</file>
- <file>images/mac/editlower.png</file>
- <file>images/mac/editpaste.png</file>
- <file>images/mac/editraise.png</file>
- <file>images/mac/editvlayout.png</file>
- <file>images/mac/editvlayoutsplit.png</file>
- <file>images/mac/filenew.png</file>
- <file>images/mac/insertimage.png</file>
- <file>images/mac/undo.png</file>
- <file>images/mac/redo.png</file>
- <file>images/mac/fileopen.png</file>
- <file>images/mac/filesave.png</file>
- <file>images/mac/resourceeditortool.png</file>
- <file>images/mac/plus.png</file>
- <file>images/mac/minus.png</file>
- <file>images/mac/back.png</file>
- <file>images/mac/forward.png</file>
- <file>images/mac/down.png</file>
- <file>images/mac/up.png</file>
- <file>images/qtlogo16x16.png</file>
- <file>images/qtlogo24x24.png</file>
- <file>images/qtlogo32x32.png</file>
- <file>images/qtlogo64x64.png</file>
- <file>images/qt3logo.png</file>
- <file>images/resetproperty.png</file>
- <file>images/cleartext.png</file>
- <file>images/sort.png</file>
- <file>images/edit.png</file>
- <file>images/reload.png</file>
- <file>images/configure.png</file>
- <file>images/color.png</file>
- <file>images/dropdownbutton.png</file>
- <file>images/widgets/calendarwidget.png</file>
- <file>images/widgets/checkbox.png</file>
- <file>images/widgets/columnview.png</file>
- <file>images/widgets/combobox.png</file>
- <file>images/widgets/commandlinkbutton.png</file>
- <file>images/widgets/dateedit.png</file>
- <file>images/widgets/datetimeedit.png</file>
- <file>images/widgets/dial.png</file>
- <file>images/widgets/dialogbuttonbox.png</file>
- <file>images/widgets/dockwidget.png</file>
- <file>images/widgets/doublespinbox.png</file>
- <file>images/widgets/fontcombobox.png</file>
- <file>images/widgets/frame.png</file>
- <file>images/widgets/graphicsview.png</file>
- <file>images/widgets/groupbox.png</file>
- <file>images/widgets/hscrollbar.png</file>
- <file>images/widgets/hslider.png</file>
- <file>images/widgets/hsplit.png</file>
- <file>images/widgets/label.png</file>
- <file>images/widgets/lcdnumber.png</file>
- <file>images/widgets/line.png</file>
- <file>images/widgets/lineedit.png</file>
- <file>images/widgets/listbox.png</file>
- <file>images/widgets/listview.png</file>
- <file>images/widgets/mdiarea.png</file>
- <file>images/widgets/plaintextedit.png</file>
- <file>images/widgets/progress.png</file>
- <file>images/widgets/pushbutton.png</file>
- <file>images/widgets/radiobutton.png</file>
- <file>images/widgets/scrollarea.png</file>
- <file>images/widgets/spacer.png</file>
- <file>images/widgets/spinbox.png</file>
- <file>images/widgets/table.png</file>
- <file>images/widgets/tabwidget.png</file>
- <file>images/widgets/textedit.png</file>
- <file>images/widgets/timeedit.png</file>
- <file>images/widgets/toolbox.png</file>
- <file>images/widgets/toolbutton.png</file>
- <file>images/widgets/vline.png</file>
- <file>images/widgets/vscrollbar.png</file>
- <file>images/widgets/vslider.png</file>
- <file>images/widgets/vspacer.png</file>
- <file>images/widgets/widget.png</file>
- <file>images/widgets/widgetstack.png</file>
- <file>images/widgets/wizard.png</file>
- <file>images/win/adjustsize.png</file>
- <file>images/win/widgettool.png</file>
- <file>images/win/signalslottool.png</file>
- <file>images/win/tabordertool.png</file>
- <file>images/win/buddytool.png</file>
- <file>images/win/editbreaklayout.png</file>
- <file>images/win/editcopy.png</file>
- <file>images/win/editcut.png</file>
- <file>images/win/editdelete.png</file>
- <file>images/win/editgrid.png</file>
- <file>images/win/editform.png</file>
- <file>images/win/edithlayout.png</file>
- <file>images/win/edithlayoutsplit.png</file>
- <file>images/win/editlower.png</file>
- <file>images/win/editpaste.png</file>
- <file>images/win/editraise.png</file>
- <file>images/win/editvlayout.png</file>
- <file>images/win/editvlayoutsplit.png</file>
- <file>images/win/filenew.png</file>
- <file>images/win/insertimage.png</file>
- <file>images/win/undo.png</file>
- <file>images/win/redo.png</file>
- <file>images/win/fileopen.png</file>
- <file>images/win/filesave.png</file>
- <file>images/win/resourceeditortool.png</file>
- <file>images/win/plus.png</file>
- <file>images/win/minus.png</file>
- <file>images/win/textanchor.png</file>
- <file>images/win/textbold.png</file>
- <file>images/win/textitalic.png</file>
- <file>images/win/textunder.png</file>
- <file>images/win/textleft.png</file>
- <file>images/win/textcenter.png</file>
- <file>images/win/textright.png</file>
- <file>images/win/textjustify.png</file>
- <file>images/win/textsuperscript.png</file>
- <file>images/win/textsubscript.png</file>
- <file>images/win/simplifyrichtext.png</file>
- <file>images/win/back.png</file>
- <file>images/win/forward.png</file>
- <file>images/win/down.png</file>
- <file>images/win/up.png</file>
- <file>images/mac/textanchor.png</file>
- <file>images/mac/textbold.png</file>
- <file>images/mac/textitalic.png</file>
- <file>images/mac/textunder.png</file>
- <file>images/mac/textleft.png</file>
- <file>images/mac/textcenter.png</file>
- <file>images/mac/textright.png</file>
- <file>images/mac/textjustify.png</file>
- <file>images/mac/textsuperscript.png</file>
- <file>images/mac/textsubscript.png</file>
- <file>images/mac/simplifyrichtext.png</file>
- </qresource>
- <qresource prefix="/qt-project.org/brushes">
- <file>defaultbrushes.xml</file>
- </qresource>
-</RCC>
diff --git a/src/designer/src/components/formeditor/formeditor_global.h b/src/designer/src/components/formeditor/formeditor_global.h
index 9dad63d70..37af044be 100644
--- a/src/designer/src/components/formeditor/formeditor_global.h
+++ b/src/designer/src/components/formeditor/formeditor_global.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef FORMEDITOR_GLOBAL_H
#define FORMEDITOR_GLOBAL_H
diff --git a/src/designer/src/components/formeditor/formeditor_optionspage.cpp b/src/designer/src/components/formeditor/formeditor_optionspage.cpp
index c7ca46b42..ffd93f263 100644
--- a/src/designer/src/components/formeditor/formeditor_optionspage.cpp
+++ b/src/designer/src/components/formeditor/formeditor_optionspage.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "formeditor_optionspage.h"
diff --git a/src/designer/src/components/formeditor/formeditor_optionspage.h b/src/designer/src/components/formeditor/formeditor_optionspage.h
index 160d7340a..69758d28e 100644
--- a/src/designer/src/components/formeditor/formeditor_optionspage.h
+++ b/src/designer/src/components/formeditor/formeditor_optionspage.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef FORMEDITOR_OPTIONSPAGE_H
#define FORMEDITOR_OPTIONSPAGE_H
diff --git a/src/designer/src/components/formeditor/formwindow.cpp b/src/designer/src/components/formeditor/formwindow.cpp
index b27b7e18e..35cb0eca6 100644
--- a/src/designer/src/components/formeditor/formwindow.cpp
+++ b/src/designer/src/components/formeditor/formwindow.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "formwindow.h"
#include "formeditor.h"
@@ -102,6 +77,8 @@ Q_DECLARE_METATYPE(QWidget*)
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace {
class BlockSelection
{
@@ -168,8 +145,7 @@ private:
using SelectionPool = QList<WidgetSelection *>;
SelectionPool m_selectionPool;
- typedef QHash<QWidget *, WidgetSelection *> SelectionHash;
- SelectionHash m_usedSelections;
+ QHash<QWidget *, WidgetSelection *> m_usedSelections;
};
FormWindow::Selection::Selection() = default;
@@ -204,9 +180,9 @@ WidgetSelection *FormWindow::Selection::addWidget(FormWindow* fw, QWidget *w)
return rc;
}
// find a free one in the pool
- for (auto it = m_selectionPool.constBegin(), pend = m_selectionPool.constEnd(); it != pend; ++it) {
- if (! (*it)->isUsed()) {
- rc = *it;
+ for (auto *s : std::as_const(m_selectionPool)) {
+ if (!s->isUsed()) {
+ rc = s;
break;
}
}
@@ -479,11 +455,11 @@ void FormWindow::setMainContainer(QWidget *w)
manageWidget(m_mainContainer);
if (QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core()->extensionManager(), m_mainContainer)) {
- sheet->setVisible(sheet->indexOf(QStringLiteral("windowTitle")), true);
- sheet->setVisible(sheet->indexOf(QStringLiteral("windowIcon")), true);
- sheet->setVisible(sheet->indexOf(QStringLiteral("windowModality")), true);
- sheet->setVisible(sheet->indexOf(QStringLiteral("windowOpacity")), true);
- sheet->setVisible(sheet->indexOf(QStringLiteral("windowFilePath")), true);
+ sheet->setVisible(sheet->indexOf(u"windowTitle"_s), true);
+ sheet->setVisible(sheet->indexOf(u"windowIcon"_s), true);
+ sheet->setVisible(sheet->indexOf(u"windowModality"_s), true);
+ sheet->setVisible(sheet->indexOf(u"windowOpacity"_s), true);
+ sheet->setVisible(sheet->indexOf(u"windowFilePath"_s), true);
// ### generalize
}
@@ -692,7 +668,7 @@ bool FormWindow::handleMouseMoveEvent(QWidget *, QWidget *, QMouseEvent *e)
QSet<QWidget*> widget_set;
- for (QWidget *child : qAsConst(sel)) { // Move parent layout or container?
+ for (QWidget *child : std::as_const(sel)) { // Move parent layout or container?
QWidget *current = child;
bool done = false;
@@ -729,7 +705,7 @@ bool FormWindow::handleMouseMoveEvent(QWidget *, QWidget *, QMouseEvent *e)
const QPoint globalPos = mapToGlobal(m_startPos);
const QDesignerDnDItemInterface::DropType dropType = (mouseFlags(e->modifiers()) & CopyDragModifier) ?
QDesignerDnDItemInterface::CopyDrop : QDesignerDnDItemInterface::MoveDrop;
- for (QWidget *widget : qAsConst(sel)) {
+ for (QWidget *widget : std::as_const(sel)) {
item_list.append(new FormWindowDnDItem(dropType, this, widget, globalPos));
if (dropType == QDesignerDnDItemInterface::MoveDrop) {
m_selection->hide(widget);
@@ -746,7 +722,7 @@ bool FormWindow::handleMouseMoveEvent(QWidget *, QWidget *, QMouseEvent *e)
if (!sel.isEmpty()) // reshow selection?
if (QDesignerMimeData::execDrag(item_list, core()->topLevel()) == Qt::IgnoreAction && dropType == QDesignerDnDItemInterface::MoveDrop)
- for (QWidget *widget : qAsConst(sel))
+ for (QWidget *widget : std::as_const(sel))
m_selection->show(widget);
m_startPos = QPoint();
@@ -949,13 +925,9 @@ bool FormWindow::isMainContainer(const QWidget *w) const
void FormWindow::updateChildSelections(QWidget *w)
{
const QWidgetList l = w->findChildren<QWidget*>();
- if (!l.isEmpty()) {
- const QWidgetList::const_iterator lcend = l.constEnd();
- for (QWidgetList::const_iterator it = l.constBegin(); it != lcend; ++it) {
- QWidget *w = *it;
- if (isManaged(w))
- updateSelection(w);
- }
+ for (auto *w : l) {
+ if (isManaged(w))
+ updateSelection(w);
}
}
@@ -1018,129 +990,98 @@ static inline void insertNames(const QDesignerMetaDataBaseInterface *metaDataBas
static QSet<QString> languageKeywords()
{
- static QSet<QString> keywords;
- if (keywords.isEmpty()) {
+ static const QSet<QString> keywords = {
// C++ keywords
- keywords.insert(QStringLiteral("asm"));
- keywords.insert(QStringLiteral("auto"));
- keywords.insert(QStringLiteral("bool"));
- keywords.insert(QStringLiteral("break"));
- keywords.insert(QStringLiteral("case"));
- keywords.insert(QStringLiteral("catch"));
- keywords.insert(QStringLiteral("char"));
- keywords.insert(QStringLiteral("class"));
- keywords.insert(QStringLiteral("const"));
- keywords.insert(QStringLiteral("const_cast"));
- keywords.insert(QStringLiteral("continue"));
- keywords.insert(QStringLiteral("default"));
- keywords.insert(QStringLiteral("delete"));
- keywords.insert(QStringLiteral("do"));
- keywords.insert(QStringLiteral("double"));
- keywords.insert(QStringLiteral("dynamic_cast"));
- keywords.insert(QStringLiteral("else"));
- keywords.insert(QStringLiteral("enum"));
- keywords.insert(QStringLiteral("explicit"));
- keywords.insert(QStringLiteral("export"));
- keywords.insert(QStringLiteral("extern"));
- keywords.insert(QStringLiteral("false"));
- keywords.insert(QStringLiteral("float"));
- keywords.insert(QStringLiteral("for"));
- keywords.insert(QStringLiteral("friend"));
- keywords.insert(QStringLiteral("goto"));
- keywords.insert(QStringLiteral("if"));
- keywords.insert(QStringLiteral("inline"));
- keywords.insert(QStringLiteral("int"));
- keywords.insert(QStringLiteral("long"));
- keywords.insert(QStringLiteral("mutable"));
- keywords.insert(QStringLiteral("namespace"));
- keywords.insert(QStringLiteral("new"));
- keywords.insert(QStringLiteral("NULL"));
- keywords.insert(QStringLiteral("operator"));
- keywords.insert(QStringLiteral("private"));
- keywords.insert(QStringLiteral("protected"));
- keywords.insert(QStringLiteral("public"));
- keywords.insert(QStringLiteral("register"));
- keywords.insert(QStringLiteral("reinterpret_cast"));
- keywords.insert(QStringLiteral("return"));
- keywords.insert(QStringLiteral("short"));
- keywords.insert(QStringLiteral("signed"));
- keywords.insert(QStringLiteral("sizeof"));
- keywords.insert(QStringLiteral("static"));
- keywords.insert(QStringLiteral("static_cast"));
- keywords.insert(QStringLiteral("struct"));
- keywords.insert(QStringLiteral("switch"));
- keywords.insert(QStringLiteral("template"));
- keywords.insert(QStringLiteral("this"));
- keywords.insert(QStringLiteral("throw"));
- keywords.insert(QStringLiteral("true"));
- keywords.insert(QStringLiteral("try"));
- keywords.insert(QStringLiteral("typedef"));
- keywords.insert(QStringLiteral("typeid"));
- keywords.insert(QStringLiteral("typename"));
- keywords.insert(QStringLiteral("union"));
- keywords.insert(QStringLiteral("unsigned"));
- keywords.insert(QStringLiteral("using"));
- keywords.insert(QStringLiteral("virtual"));
- keywords.insert(QStringLiteral("void"));
- keywords.insert(QStringLiteral("volatile"));
- keywords.insert(QStringLiteral("wchar_t"));
- keywords.insert(QStringLiteral("while"));
+ u"asm"_s,
+ u"assert"_s,
+ u"auto"_s,
+ u"bool"_s,
+ u"break"_s,
+ u"case"_s,
+ u"catch"_s,
+ u"char"_s,
+ u"class"_s,
+ u"const"_s,
+ u"const_cast"_s,
+ u"continue"_s,
+ u"default"_s,
+ u"delete"_s,
+ u"do"_s,
+ u"double"_s,
+ u"dynamic_cast"_s,
+ u"else"_s,
+ u"enum"_s,
+ u"explicit"_s,
+ u"export"_s,
+ u"extern"_s,
+ u"false"_s,
+ u"final"_s,
+ u"float"_s,
+ u"for"_s,
+ u"friend"_s,
+ u"goto"_s,
+ u"if"_s,
+ u"inline"_s,
+ u"int"_s,
+ u"long"_s,
+ u"mutable"_s,
+ u"namespace"_s,
+ u"new"_s,
+ u"noexcept"_s,
+ u"NULL"_s,
+ u"nullptr"_s,
+ u"operator"_s,
+ u"override"_s,
+ u"private"_s,
+ u"protected"_s,
+ u"public"_s,
+ u"register"_s,
+ u"reinterpret_cast"_s,
+ u"return"_s,
+ u"short"_s,
+ u"signed"_s,
+ u"sizeof"_s,
+ u"static"_s,
+ u"static_cast"_s,
+ u"struct"_s,
+ u"switch"_s,
+ u"template"_s,
+ u"this"_s,
+ u"throw"_s,
+ u"true"_s,
+ u"try"_s,
+ u"typedef"_s,
+ u"typeid"_s,
+ u"typename"_s,
+ u"union"_s,
+ u"unsigned"_s,
+ u"using"_s,
+ u"virtual"_s,
+ u"void"_s,
+ u"volatile"_s,
+ u"wchar_t"_s,
+ u"while"_s,
// java keywords
- keywords.insert(QStringLiteral("abstract"));
- keywords.insert(QStringLiteral("assert"));
- keywords.insert(QStringLiteral("boolean"));
- keywords.insert(QStringLiteral("break"));
- keywords.insert(QStringLiteral("byte"));
- keywords.insert(QStringLiteral("case"));
- keywords.insert(QStringLiteral("catch"));
- keywords.insert(QStringLiteral("char"));
- keywords.insert(QStringLiteral("class"));
- keywords.insert(QStringLiteral("const"));
- keywords.insert(QStringLiteral("continue"));
- keywords.insert(QStringLiteral("default"));
- keywords.insert(QStringLiteral("do"));
- keywords.insert(QStringLiteral("double"));
- keywords.insert(QStringLiteral("else"));
- keywords.insert(QStringLiteral("enum"));
- keywords.insert(QStringLiteral("extends"));
- keywords.insert(QStringLiteral("false"));
- keywords.insert(QStringLiteral("final"));
- keywords.insert(QStringLiteral("finality"));
- keywords.insert(QStringLiteral("float"));
- keywords.insert(QStringLiteral("for"));
- keywords.insert(QStringLiteral("goto"));
- keywords.insert(QStringLiteral("if"));
- keywords.insert(QStringLiteral("implements"));
- keywords.insert(QStringLiteral("import"));
- keywords.insert(QStringLiteral("instanceof"));
- keywords.insert(QStringLiteral("int"));
- keywords.insert(QStringLiteral("interface"));
- keywords.insert(QStringLiteral("long"));
- keywords.insert(QStringLiteral("native"));
- keywords.insert(QStringLiteral("new"));
- keywords.insert(QStringLiteral("null"));
- keywords.insert(QStringLiteral("package"));
- keywords.insert(QStringLiteral("private"));
- keywords.insert(QStringLiteral("protected"));
- keywords.insert(QStringLiteral("public"));
- keywords.insert(QStringLiteral("return"));
- keywords.insert(QStringLiteral("short"));
- keywords.insert(QStringLiteral("static"));
- keywords.insert(QStringLiteral("strictfp"));
- keywords.insert(QStringLiteral("super"));
- keywords.insert(QStringLiteral("switch"));
- keywords.insert(QStringLiteral("synchronized"));
- keywords.insert(QStringLiteral("this"));
- keywords.insert(QStringLiteral("throw"));
- keywords.insert(QStringLiteral("throws"));
- keywords.insert(QStringLiteral("transient"));
- keywords.insert(QStringLiteral("true"));
- keywords.insert(QStringLiteral("try"));
- keywords.insert(QStringLiteral("void"));
- keywords.insert(QStringLiteral("volatile"));
- keywords.insert(QStringLiteral("while"));
- }
+ u"abstract"_s,
+ u"boolean"_s,
+ u"byte"_s,
+ u"extends"_s,
+ u"finality"_s,
+ u"implements"_s,
+ u"import"_s,
+ u"instanceof"_s,
+ u"interface"_s,
+ u"native"_s,
+ u"null"_s,
+ u"package"_s,
+ u"strictfp"_s,
+ u"super"_s,
+ u"synchronized"_s,
+ u"throws"_s,
+ u"transient"_s,
+ };
+
return keywords;
}
@@ -1174,8 +1115,7 @@ bool FormWindow::unify(QObject *w, QString &s, bool changeIt)
if (!buttonGroupChildren.isEmpty())
insertNames(metaDataBase, buttonGroupChildren.constBegin(), buttonGroupChildren.constEnd(), w, existingNames);
- const StringSet::const_iterator enEnd = existingNames.constEnd();
- if (existingNames.constFind(s) == enEnd)
+ if (!existingNames.contains(s))
return true;
if (!changeIt)
return false;
@@ -1183,26 +1123,26 @@ bool FormWindow::unify(QObject *w, QString &s, bool changeIt)
// split 'name_number'
qlonglong num = 0;
qlonglong factor = 1;
- int idx = s.length()-1;
- const ushort zeroUnicode = QLatin1Char('0').unicode();
+ qsizetype idx = s.size() - 1;
+ const char16_t zeroUnicode = u'0';
for ( ; idx > 0 && s.at(idx).isDigit(); --idx) {
num += (s.at(idx).unicode() - zeroUnicode) * factor;
factor *= 10;
}
// Position index past '_'.
- const QChar underscore = QLatin1Char('_');
+ const QChar underscore = u'_';
if (idx >= 0 && s.at(idx) == underscore) {
idx++;
} else {
num = 1;
s += underscore;
- idx = s.length();
+ idx = s.size();
}
// try 'name_n', 'name_n+1'
for (num++ ; ;num++) {
s.truncate(idx);
s += QString::number(num);
- if (existingNames.constFind(s) == enEnd)
+ if (!existingNames.contains(s))
break;
}
return false;
@@ -1222,7 +1162,7 @@ void FormWindow::insertWidget(QWidget *w, const QRect &rect, QWidget *container,
QRect r = rect;
Q_ASSERT(r.isValid());
SetPropertyCommand *geom_cmd = new SetPropertyCommand(this);
- geom_cmd->init(w, QStringLiteral("geometry"), r); // ### use rc.size()
+ geom_cmd->init(w, u"geometry"_s, r); // ### use rc.size()
if (w->parentWidget() != container) {
ReparentWidgetCommand *cmd = new ReparentWidgetCommand(this);
@@ -1232,8 +1172,19 @@ void FormWindow::insertWidget(QWidget *w, const QRect &rect, QWidget *container,
m_undoStack.push(geom_cmd);
- InsertWidgetCommand *cmd = new InsertWidgetCommand(this);
- cmd->init(w, already_in_form);
+ QUndoCommand *cmd = nullptr;
+ if (auto dockWidget = qobject_cast<QDockWidget *>(w)) {
+ if (auto mainWindow = qobject_cast<QMainWindow *>(container)) {
+ auto addDockCmd = new AddDockWidgetCommand(this);
+ addDockCmd->init(mainWindow, dockWidget);
+ cmd = addDockCmd;
+ }
+ }
+ if (cmd == nullptr) {
+ auto insertCmd = new InsertWidgetCommand(this);
+ insertCmd->init(w, already_in_form);
+ cmd = insertCmd;
+ }
m_undoStack.push(cmd);
endCommand();
@@ -1276,7 +1227,7 @@ void FormWindow::resizeWidget(QWidget *widget, const QRect &geometry)
QRect r = geometry;
SetPropertyCommand *cmd = new SetPropertyCommand(this);
- cmd->init(widget, QStringLiteral("geometry"), r);
+ cmd->init(widget, u"geometry"_s, r);
cmd->setText(tr("Resize"));
m_undoStack.push(cmd);
}
@@ -1299,7 +1250,7 @@ QWidget *FormWindow::containerAt(const QPoint &pos, QWidget *notParentOf)
depth = widgetDepth(container);
}
- for (QWidget *wit : qAsConst(m_widgets)) {
+ for (QWidget *wit : std::as_const(m_widgets)) {
if (qobject_cast<QLayoutWidget*>(wit) || qobject_cast<QSplitter*>(wit))
continue;
if (!wit->isVisibleTo(this))
@@ -1476,10 +1427,12 @@ public:
QDesignerPropertySheetExtension *s, int i) :
PropertyHelper(o, sp, s, i) {}
- Value setValue(QDesignerFormWindowInterface *fw, const QVariant &value, bool changed, unsigned subPropertyMask) override;
+ Value setValue(QDesignerFormWindowInterface *fw, const QVariant &value, bool changed,
+ quint64 subPropertyMask) override;
};
-PropertyHelper::Value ArrowKeyPropertyHelper::setValue(QDesignerFormWindowInterface *fw, const QVariant &value, bool changed, unsigned subPropertyMask)
+PropertyHelper::Value ArrowKeyPropertyHelper::setValue(QDesignerFormWindowInterface *fw, const QVariant &value,
+ bool changed, quint64 subPropertyMask)
{
// Apply operation to obtain the new geometry value.
QWidget *w = qobject_cast<QWidget*>(object());
@@ -1499,9 +1452,10 @@ public:
void init(QWidgetList &l, const ArrowKeyOperation &op);
protected:
- PropertyHelper *createPropertyHelper(QObject *o, SpecialProperty sp,
- QDesignerPropertySheetExtension *s, int i) const override
- { return new ArrowKeyPropertyHelper(o, sp, s, i); }
+ std::unique_ptr<PropertyHelper>
+ createPropertyHelper(QObject *o, SpecialProperty sp,
+ QDesignerPropertySheetExtension *s, int i) const override
+ { return std::make_unique<ArrowKeyPropertyHelper>(o, sp, s, i); }
QVariant mergeValue(const QVariant &newValue) override;
};
@@ -1516,9 +1470,9 @@ ArrowKeyPropertyCommand::ArrowKeyPropertyCommand(QDesignerFormWindowInterface *f
void ArrowKeyPropertyCommand::init(QWidgetList &l, const ArrowKeyOperation &op)
{
QObjectList ol;
- for (QWidget *w : qAsConst(l))
+ for (QWidget *w : std::as_const(l))
ol.push_back(w);
- SetPropertyCommand::init(ol, QStringLiteral("geometry"), QVariant::fromValue(op));
+ SetPropertyCommand::init(ol, u"geometry"_s, QVariant::fromValue(op));
setText(op.resize ? FormWindow::tr("Key Resize") : FormWindow::tr("Key Move"));
}
@@ -1591,7 +1545,7 @@ bool FormWindow::handleKeyReleaseEvent(QWidget *, QWidget *, QKeyEvent *e)
void FormWindow::selectAll()
{
bool selectionChanged = false;
- for (QWidget *widget : qAsConst(m_widgets)) {
+ for (QWidget *widget : std::as_const(m_widgets)) {
if (widget->isVisibleTo(this) && trySelectWidget(widget, true))
selectionChanged = true;
}
@@ -1743,15 +1697,14 @@ static inline DomUI *domUIFromClipboard(int *widgetCount, int *actionCount)
{
*widgetCount = *actionCount = 0;
const QString clipboardText = qApp->clipboard()->text();
- if (clipboardText.isEmpty() || clipboardText.indexOf(QLatin1Char('<')) == -1)
+ if (clipboardText.isEmpty() || clipboardText.indexOf(u'<') == -1)
return nullptr;
QXmlStreamReader reader(clipboardText);
DomUI *ui = nullptr;
- const QString uiElement = QStringLiteral("ui");
while (!reader.atEnd()) {
if (reader.readNext() == QXmlStreamReader::StartElement) {
- if (reader.name().compare(uiElement, Qt::CaseInsensitive) == 0 && !ui) {
+ if (reader.name().compare("ui"_L1, Qt::CaseInsensitive) == 0 && !ui) {
ui = new DomUI();
ui->read(reader);
break;
@@ -1803,9 +1756,8 @@ static void positionPastedWidgetsAtMousePosition(FormWindow *fw, const QPoint &c
cursorPos = grid.snapPoint(QPoint(0, 0));
// Determine area of pasted widgets
QRect pasteArea;
- const QWidgetList::const_iterator lcend = l.constEnd();
- for (QWidgetList::const_iterator it = l.constBegin(); it != lcend; ++it)
- pasteArea =pasteArea.isNull() ? (*it)->geometry() : pasteArea.united((*it)->geometry());
+ for (auto *w : l)
+ pasteArea = pasteArea.isNull() ? w->geometry() : pasteArea.united(w->geometry());
// Mouse on some child? (try to position bottomRight on a free spot to
// get the stacked-offset effect of Designer 4.3, that is, offset by grid if Ctrl-V is pressed continuously
@@ -1817,8 +1769,8 @@ static void positionPastedWidgetsAtMousePosition(FormWindow *fw, const QPoint &c
} while (true);
// Move.
const QPoint offset = cursorPos - pasteArea.topLeft();
- for (QWidgetList::const_iterator it = l.constBegin(); it != lcend; ++it)
- (*it)->move((*it)->pos() + offset);
+ for (auto *w : l)
+ w->move(w->pos() + offset);
}
void FormWindow::paste(PasteMode pasteMode)
@@ -1996,15 +1948,14 @@ void FormWindow::breakLayout(QWidget *w)
// Find the first-order managed child widgets
QWidgetList widgets;
- const QObjectList children = w->children();
- const QObjectList::const_iterator cend = children.constEnd();
const QDesignerMetaDataBaseInterface *mdb = core()->metaDataBase();
- for (QObjectList::const_iterator it = children.constBegin(); it != cend; ++it)
- if ( (*it)->isWidgetType()) {
- QWidget *w = static_cast<QWidget*>(*it);
+ for (auto *o : w->children()) {
+ if (o->isWidgetType()) {
+ auto *w = static_cast<QWidget*>(o);
if (mdb->item(w))
widgets.push_back(w);
}
+ }
BreakLayoutCommand *cmd = new BreakLayoutCommand(this);
cmd->init(widgets, w);
@@ -2031,7 +1982,7 @@ void FormWindow::raiseWidgets()
return;
beginCommand(tr("Raise widgets"));
- for (QWidget *widget : qAsConst(widgets)) {
+ for (QWidget *widget : std::as_const(widgets)) {
RaiseWidgetCommand *cmd = new RaiseWidgetCommand(this);
cmd->init(widget);
m_undoStack.push(cmd);
@@ -2048,7 +1999,7 @@ void FormWindow::lowerWidgets()
return;
beginCommand(tr("Lower widgets"));
- for (QWidget *widget : qAsConst(widgets)) {
+ for (QWidget *widget : std::as_const(widgets)) {
LowerWidgetCommand *cmd = new LowerWidgetCommand(this);
cmd->init(widget);
m_undoStack.push(cmd);
@@ -2188,16 +2139,15 @@ void FormWindow::layoutContainer(QWidget *w, int type)
w = core()->widgetFactory()->containerOfWidget(w);
- const QObjectList l = w->children();
// find managed widget children
QWidgetList widgets;
- const QObjectList::const_iterator ocend = l.constEnd();
- for (QObjectList::const_iterator it = l.constBegin(); it != ocend; ++it)
- if ( (*it)->isWidgetType() ) {
- QWidget *widget = static_cast<QWidget*>(*it);
+ for (auto *o : w->children()) {
+ if (o->isWidgetType() ) {
+ auto *widget = static_cast<QWidget*>(o);
if (widget->isVisibleTo(this) && isManaged(widget))
widgets.append(widget);
}
+ }
if (widgets.isEmpty()) // QTBUG-50563, observed when using hand-edited forms.
return;
@@ -2267,9 +2217,7 @@ QAction *FormWindow::createSelectAncestorSubMenu(QWidget *w)
QMenu *menu = new QMenu;
QActionGroup *ag = new QActionGroup(menu);
QObject::connect(ag, &QActionGroup::triggered, this, &FormWindow::slotSelectWidget);
- const int size = parents.size();
- for (int i = 0; i < size; i++) {
- QWidget *w = parents.at(i);
+ for (auto *w : std::as_const(parents)) {
QAction *a = ag->addAction(objectNameOf(w));
a->setData(QVariant::fromValue(w));
menu->addAction(a);
@@ -2368,7 +2316,7 @@ QPoint FormWindow::mapToForm(const QWidget *w, const QPoint &pos) const
bool FormWindow::canBeBuddy(QWidget *w) const // ### rename me.
{
if (QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core()->extensionManager(), w)) {
- const int index = sheet->indexOf(QStringLiteral("focusPolicy"));
+ const int index = sheet->indexOf(u"focusPolicy"_s);
if (index != -1) {
bool ok = false;
const Qt::FocusPolicy q = static_cast<Qt::FocusPolicy>(Utils::valueOf(sheet->property(index), &ok));
@@ -2428,9 +2376,7 @@ void FormWindow::simplifySelection(QWidgetList *sel) const
}
QWidgetList toBeRemoved;
toBeRemoved.reserve(sel->size());
- const QWidgetList::const_iterator scend = sel->constEnd();
- for (QWidgetList::const_iterator it = sel->constBegin(); it != scend; ++it) {
- QWidget *child = *it;
+ for (auto *child : std::as_const(*sel)) {
for (QWidget *w = child; true ; ) { // Is any of the parents also selected?
QWidget *parent = w->parentWidget();
if (!parent || parent == mainC)
@@ -2444,11 +2390,8 @@ void FormWindow::simplifySelection(QWidgetList *sel) const
}
// Now we can actually remove the widgets that were marked
// for removal in the previous pass.
- if (!toBeRemoved.isEmpty()) {
- const QWidgetList::const_iterator rcend = toBeRemoved.constEnd();
- for (QWidgetList::const_iterator it = toBeRemoved.constBegin(); it != rcend; ++it)
- sel->removeAll(*it);
- }
+ for (auto *r : std::as_const(toBeRemoved))
+ sel->removeAll(r);
}
FormWindow *FormWindow::findFormWindow(QWidget *w)
@@ -2478,8 +2421,8 @@ QWidget *FormWindow::containerAt(const QPoint &pos)
static QWidget *childAt_SkipDropLine(QWidget *w, QPoint pos)
{
const QObjectList &child_list = w->children();
- for (int i = child_list.size() - 1; i >= 0; --i) {
- QObject *child_obj = child_list[i];
+ for (auto i = child_list.size() - 1; i >= 0; --i) {
+ QObject *child_obj = child_list.at(i);
if (qobject_cast<WidgetHandle*>(child_obj) != nullptr)
continue;
QWidget *child = qobject_cast<QWidget*>(child_obj);
@@ -2540,7 +2483,7 @@ void FormWindow::highlightWidget(QWidget *widget, const QPoint &pos, HighlightMo
return;
if (mode == Restore) {
- const WidgetPaletteMap::iterator pit = m_palettesBeforeHighlight.find(container);
+ const auto pit = m_palettesBeforeHighlight.find(container);
if (pit != m_palettesBeforeHighlight.end()) {
container->setPalette(pit.value().first);
container->setAutoFillBackground(pit.value().second);
@@ -2700,7 +2643,7 @@ bool FormWindow::blockSelectionChanged(bool b)
void FormWindow::editContents()
{
const QWidgetList sel = selectedWidgets();
- if (sel.count() == 1) {
+ if (sel.size() == 1) {
QWidget *widget = sel.first();
if (QAction *a = preferredEditAction(core(), widget))
@@ -2818,7 +2761,7 @@ bool FormWindow::dropDockWidget(QDesignerDnDItemInterface *item, const QPoint &g
QDesignerPropertySheetExtension *propertySheet = qobject_cast<QDesignerPropertySheetExtension*>(m_core->extensionManager()->extension(widget, Q_TYPEID(QDesignerPropertySheetExtension)));
if (propertySheet) {
- const QString dockWidgetAreaName = QStringLiteral("dockWidgetArea");
+ const QString dockWidgetAreaName = u"dockWidgetArea"_s;
PropertySheetEnumValue e = qvariant_cast<PropertySheetEnumValue>(propertySheet->property(propertySheet->indexOf(dockWidgetAreaName)));
e.value = area;
QVariant v;
@@ -2864,7 +2807,7 @@ bool FormWindow::dropWidgets(const QList<QDesignerDnDItemInterface*> &item_list,
QPoint offset;
QDesignerDnDItemInterface *current = nullptr;
QDesignerFormWindowCursorInterface *c = cursor();
- for (QDesignerDnDItemInterface *item : qAsConst(item_list)) {
+ for (QDesignerDnDItemInterface *item : std::as_const(item_list)) {
QWidget *w = item->widget();
if (!current)
current = item;
@@ -2879,7 +2822,7 @@ bool FormWindow::dropWidgets(const QList<QDesignerDnDItemInterface*> &item_list,
offset = designerGrid().snapPoint(topLeft) - topLeft;
}
- for (QDesignerDnDItemInterface *item : qAsConst(item_list)) {
+ for (QDesignerDnDItemInterface *item : std::as_const(item_list)) {
DomUI *dom_ui = item->domUi();
QRect geometry = item->decoration()->geometry();
Q_ASSERT(dom_ui != nullptr);
diff --git a/src/designer/src/components/formeditor/formwindow.h b/src/designer/src/components/formeditor/formwindow.h
index a2d16fe5f..c9aefee37 100644
--- a/src/designer/src/components/formeditor/formwindow.h
+++ b/src/designer/src/components/formeditor/formwindow.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef FORMWINDOW_H
#define FORMWINDOW_H
@@ -36,10 +11,11 @@
#include <QtGui/qundostack.h>
#include <QtCore/qhash.h>
#include <QtCore/qlist.h>
-#include <QtCore/qmap.h>
#include <QtCore/qset.h>
#include <QtCore/qpointer.h>
+#include <utility>
+
QT_BEGIN_NAMESPACE
class QDesignerDnDItemInterface;
@@ -148,7 +124,7 @@ public:
void raiseSelection(QWidget *w);
inline const QWidgetList& widgets() const { return m_widgets; }
- inline int widgetCount() const { return m_widgets.count(); }
+ inline int widgetCount() const { return m_widgets.size(); }
inline QWidget *widgetAt(int index) const { return m_widgets.at(index); }
QWidgetList widgets(QWidget *widget) const;
@@ -340,9 +316,8 @@ private:
QString m_fileName;
- using PaletteAndFill = QPair<QPalette ,bool>;
- using WidgetPaletteMap = QMap<QWidget*, PaletteAndFill>;
- WidgetPaletteMap m_palettesBeforeHighlight;
+ using PaletteAndFill = std::pair<QPalette, bool>;
+ QHash<QWidget *, PaletteAndFill> m_palettesBeforeHighlight;
QRubberBand *m_rubberBand = nullptr;
diff --git a/src/designer/src/components/formeditor/formwindow_dnditem.cpp b/src/designer/src/components/formeditor/formwindow_dnditem.cpp
index 2df8c9aa6..928922e3b 100644
--- a/src/designer/src/components/formeditor/formwindow_dnditem.cpp
+++ b/src/designer/src/components/formeditor/formwindow_dnditem.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "formwindow_dnditem.h"
#include "formwindow.h"
@@ -41,7 +16,7 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+namespace qdesigner_internal {
static QWidget *decorationFromWidget(QWidget *w)
{
@@ -101,4 +76,6 @@ DomUI *FormWindowDnDItem::domUi() const
return result;
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/formeditor/formwindow_dnditem.h b/src/designer/src/components/formeditor/formwindow_dnditem.h
index 9ff1b0fb9..72012f27d 100644
--- a/src/designer/src/components/formeditor/formwindow_dnditem.h
+++ b/src/designer/src/components/formeditor/formwindow_dnditem.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef FORMWINDOW_DNDITEM_H
#define FORMWINDOW_DNDITEM_H
diff --git a/src/designer/src/components/formeditor/formwindow_widgetstack.cpp b/src/designer/src/components/formeditor/formwindow_widgetstack.cpp
index da6512211..e42345b41 100644
--- a/src/designer/src/components/formeditor/formwindow_widgetstack.cpp
+++ b/src/designer/src/components/formeditor/formwindow_widgetstack.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "formwindow_widgetstack.h"
#include <QtDesigner/abstractformwindowtool.h>
@@ -40,7 +15,9 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+using namespace Qt::StringLiterals;
+
+namespace qdesigner_internal {
FormWindowWidgetStack::FormWindowWidgetStack(QObject *parent) :
QObject(parent),
@@ -56,7 +33,7 @@ FormWindowWidgetStack::FormWindowWidgetStack(QObject *parent) :
// the form windows as it ignores the sizePolicy of
// its child (for example, Fixed would cause undesired side effects).
m_formContainerLayout->setContentsMargins(QMargins());
- m_formContainer->setObjectName(QStringLiteral("formContainer"));
+ m_formContainer->setObjectName(u"formContainer"_s);
m_formContainer->setLayout(m_formContainerLayout);
m_formContainerLayout->setStackingMode(QStackedLayout::StackAll);
// System settings might have different background colors, autofill them
@@ -68,7 +45,7 @@ FormWindowWidgetStack::~FormWindowWidgetStack() = default;
int FormWindowWidgetStack::count() const
{
- return m_tools.count();
+ return m_tools.size();
}
QDesignerFormWindowToolInterface *FormWindowWidgetStack::currentTool() const
@@ -112,7 +89,7 @@ void FormWindowWidgetStack::setSenderAsCurrentTool()
return;
}
- for (QDesignerFormWindowToolInterface *t : qAsConst(m_tools)) {
+ for (QDesignerFormWindowToolInterface *t : std::as_const(m_tools)) {
if (action == t->action()) {
tool = t;
break;
@@ -202,4 +179,6 @@ QLayout *FormWindowWidgetStack::layout() const
return m_layout;
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/formeditor/formwindow_widgetstack.h b/src/designer/src/components/formeditor/formwindow_widgetstack.h
index 01ee921fd..9961754c8 100644
--- a/src/designer/src/components/formeditor/formwindow_widgetstack.h
+++ b/src/designer/src/components/formeditor/formwindow_widgetstack.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef FORMWINDOW_WIDGETSTACK_H
#define FORMWINDOW_WIDGETSTACK_H
diff --git a/src/designer/src/components/formeditor/formwindowcursor.cpp b/src/designer/src/components/formeditor/formwindowcursor.cpp
index 31dcdfebb..4bf230e16 100644
--- a/src/designer/src/components/formeditor/formwindowcursor.cpp
+++ b/src/designer/src/components/formeditor/formwindowcursor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "formwindowcursor.h"
#include "formwindow.h"
@@ -122,7 +97,7 @@ bool FormWindowCursor::hasSelection() const
int FormWindowCursor::selectedWidgetCount() const
{
- int N = m_formWindow->selectedWidgets().count();
+ int N = m_formWindow->selectedWidgets().size();
return N ? N : 1;
}
diff --git a/src/designer/src/components/formeditor/formwindowcursor.h b/src/designer/src/components/formeditor/formwindowcursor.h
index e8f699928..c3559a5e0 100644
--- a/src/designer/src/components/formeditor/formwindowcursor.h
+++ b/src/designer/src/components/formeditor/formwindowcursor.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef FORMWINDOWCURSOR_H
#define FORMWINDOWCURSOR_H
diff --git a/src/designer/src/components/formeditor/formwindowmanager.cpp b/src/designer/src/components/formeditor/formwindowmanager.cpp
index c0f84061a..2f94397cd 100644
--- a/src/designer/src/components/formeditor/formwindowmanager.cpp
+++ b/src/designer/src/components/formeditor/formwindowmanager.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
// components/formeditor
#include "formwindowmanager.h"
@@ -78,6 +53,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace {
enum { debugFWM = 0 };
}
@@ -365,151 +342,161 @@ QWidget *FormWindowManager::findManagedWidget(FormWindow *fw, QWidget *w)
void FormWindowManager::setupActions()
{
#if QT_CONFIG(clipboard)
- const QIcon cutIcon = QIcon::fromTheme(QStringLiteral("edit-cut"), createIconSet(QStringLiteral("editcut.png")));
+ const QIcon cutIcon = createIconSet(QIcon::ThemeIcon::EditCut,
+ "editcut.png"_L1);
m_actionCut = new QAction(cutIcon, tr("Cu&t"), this);
- m_actionCut->setObjectName(QStringLiteral("__qt_cut_action"));
+ m_actionCut->setObjectName(u"__qt_cut_action"_s);
m_actionCut->setShortcut(QKeySequence::Cut);
m_actionCut->setStatusTip(tr("Cuts the selected widgets and puts them on the clipboard"));
- m_actionCut->setWhatsThis(whatsThisFrom(QStringLiteral("Edit|Cut")));
+ m_actionCut->setWhatsThis(whatsThisFrom(u"Edit|Cut"_s));
connect(m_actionCut, &QAction::triggered, this, &FormWindowManager::slotActionCutActivated);
m_actionCut->setEnabled(false);
- const QIcon copyIcon = QIcon::fromTheme(QStringLiteral("edit-copy"), createIconSet(QStringLiteral("editcopy.png")));
+ const QIcon copyIcon = createIconSet(QIcon::ThemeIcon::EditCopy, "editcopy.png"_L1);
m_actionCopy = new QAction(copyIcon, tr("&Copy"), this);
- m_actionCopy->setObjectName(QStringLiteral("__qt_copy_action"));
+ m_actionCopy->setObjectName(u"__qt_copy_action"_s);
m_actionCopy->setShortcut(QKeySequence::Copy);
m_actionCopy->setStatusTip(tr("Copies the selected widgets to the clipboard"));
- m_actionCopy->setWhatsThis(whatsThisFrom(QStringLiteral("Edit|Copy")));
+ m_actionCopy->setWhatsThis(whatsThisFrom(u"Edit|Copy"_s));
connect(m_actionCopy, &QAction::triggered, this, &FormWindowManager::slotActionCopyActivated);
m_actionCopy->setEnabled(false);
- const QIcon pasteIcon = QIcon::fromTheme(QStringLiteral("edit-paste"), createIconSet(QStringLiteral("editpaste.png")));
+ const QIcon pasteIcon = createIconSet(QIcon::ThemeIcon::EditPaste, "editpaste.png"_L1);
m_actionPaste = new QAction(pasteIcon, tr("&Paste"), this);
- m_actionPaste->setObjectName(QStringLiteral("__qt_paste_action"));
+ m_actionPaste->setObjectName(u"__qt_paste_action"_s);
m_actionPaste->setShortcut(QKeySequence::Paste);
m_actionPaste->setStatusTip(tr("Pastes the clipboard's contents"));
- m_actionPaste->setWhatsThis(whatsThisFrom(QStringLiteral("Edit|Paste")));
+ m_actionPaste->setWhatsThis(whatsThisFrom(u"Edit|Paste"_s));
connect(m_actionPaste, &QAction::triggered, this, &FormWindowManager::slotActionPasteActivated);
m_actionPaste->setEnabled(false);
#endif
- m_actionDelete = new QAction(QIcon::fromTheme(QStringLiteral("edit-delete")), tr("&Delete"), this);
- m_actionDelete->setObjectName(QStringLiteral("__qt_delete_action"));
+ m_actionDelete = new QAction(QIcon::fromTheme(QIcon::ThemeIcon::EditDelete),
+ tr("&Delete"), this);
+ m_actionDelete->setObjectName(u"__qt_delete_action"_s);
m_actionDelete->setStatusTip(tr("Deletes the selected widgets"));
- m_actionDelete->setWhatsThis(whatsThisFrom(QStringLiteral("Edit|Delete")));
+ m_actionDelete->setWhatsThis(whatsThisFrom(u"Edit|Delete"_s));
connect(m_actionDelete, &QAction::triggered, this, &FormWindowManager::slotActionDeleteActivated);
m_actionDelete->setEnabled(false);
m_actionSelectAll = new QAction(tr("Select &All"), this);
- m_actionSelectAll->setObjectName(QStringLiteral("__qt_select_all_action"));
+ m_actionSelectAll->setObjectName(u"__qt_select_all_action"_s);
m_actionSelectAll->setShortcut(QKeySequence::SelectAll);
m_actionSelectAll->setStatusTip(tr("Selects all widgets"));
- m_actionSelectAll->setWhatsThis(whatsThisFrom(QStringLiteral("Edit|Select All")));
+ m_actionSelectAll->setWhatsThis(whatsThisFrom(u"Edit|Select All"_s));
connect(m_actionSelectAll, &QAction::triggered, this, &FormWindowManager::slotActionSelectAllActivated);
m_actionSelectAll->setEnabled(false);
- m_actionRaise = new QAction(createIconSet(QStringLiteral("editraise.png")), tr("Bring to &Front"), this);
- m_actionRaise->setObjectName(QStringLiteral("__qt_raise_action"));
+ m_actionRaise = new QAction(createIconSet("editraise.png"_L1),
+ tr("Bring to &Front"), this);
+ m_actionRaise->setObjectName(u"__qt_raise_action"_s);
m_actionRaise->setShortcut(Qt::CTRL | Qt::Key_L);
m_actionRaise->setStatusTip(tr("Raises the selected widgets"));
m_actionRaise->setWhatsThis(tr("Raises the selected widgets"));
connect(m_actionRaise, &QAction::triggered, this, &FormWindowManager::slotActionRaiseActivated);
m_actionRaise->setEnabled(false);
- m_actionLower = new QAction(createIconSet(QStringLiteral("editlower.png")), tr("Send to &Back"), this);
- m_actionLower->setObjectName(QStringLiteral("__qt_lower_action"));
+ m_actionLower = new QAction(createIconSet("editlower.png"_L1),
+ tr("Send to &Back"), this);
+ m_actionLower->setObjectName(u"__qt_lower_action"_s);
m_actionLower->setShortcut(Qt::CTRL | Qt::Key_K);
m_actionLower->setStatusTip(tr("Lowers the selected widgets"));
m_actionLower->setWhatsThis(tr("Lowers the selected widgets"));
connect(m_actionLower, &QAction::triggered, this, &FormWindowManager::slotActionLowerActivated);
m_actionLower->setEnabled(false);
- m_actionAdjustSize = new QAction(createIconSet(QStringLiteral("adjustsize.png")), tr("Adjust &Size"), this);
- m_actionAdjustSize->setObjectName(QStringLiteral("__qt_adjust_size_action"));
+ m_actionAdjustSize = new QAction(createIconSet("adjustsize.png"_L1),
+ tr("Adjust &Size"), this);
+ m_actionAdjustSize->setObjectName(u"__qt_adjust_size_action"_s);
m_actionAdjustSize->setShortcut(Qt::CTRL | Qt::Key_J);
m_actionAdjustSize->setStatusTip(tr("Adjusts the size of the selected widget"));
- m_actionAdjustSize->setWhatsThis(whatsThisFrom(QStringLiteral("Layout|Adjust Size")));
+ m_actionAdjustSize->setWhatsThis(whatsThisFrom(u"Layout|Adjust Size"_s));
connect(m_actionAdjustSize, &QAction::triggered, this, &FormWindowManager::slotActionAdjustSizeActivated);
m_actionAdjustSize->setEnabled(false);
- m_actionHorizontalLayout = new QAction(createIconSet(QStringLiteral("edithlayout.png")), tr("Lay Out &Horizontally"), this);
- m_actionHorizontalLayout->setObjectName(QStringLiteral("__qt_horizontal_layout_action"));
+ m_actionHorizontalLayout = new QAction(createIconSet("edithlayout.png"_L1),
+ tr("Lay Out &Horizontally"), this);
+ m_actionHorizontalLayout->setObjectName(u"__qt_horizontal_layout_action"_s);
m_actionHorizontalLayout->setShortcut(Qt::CTRL | Qt::Key_1);
m_actionHorizontalLayout->setStatusTip(tr("Lays out the selected widgets horizontally"));
- m_actionHorizontalLayout->setWhatsThis(whatsThisFrom(QStringLiteral("Layout|Lay Out Horizontally")));
+ m_actionHorizontalLayout->setWhatsThis(whatsThisFrom(u"Layout|Lay Out Horizontally"_s));
m_actionHorizontalLayout->setData(LayoutInfo::HBox);
m_actionHorizontalLayout->setEnabled(false);
connect(m_actionHorizontalLayout, &QAction::triggered, this, &FormWindowManager::createLayout);
- m_actionVerticalLayout = new QAction(createIconSet(QStringLiteral("editvlayout.png")), tr("Lay Out &Vertically"), this);
- m_actionVerticalLayout->setObjectName(QStringLiteral("__qt_vertical_layout_action"));
+ m_actionVerticalLayout = new QAction(createIconSet("editvlayout.png"_L1),
+ tr("Lay Out &Vertically"), this);
+ m_actionVerticalLayout->setObjectName(u"__qt_vertical_layout_action"_s);
m_actionVerticalLayout->setShortcut(Qt::CTRL | Qt::Key_2);
m_actionVerticalLayout->setStatusTip(tr("Lays out the selected widgets vertically"));
- m_actionVerticalLayout->setWhatsThis(whatsThisFrom(QStringLiteral("Layout|Lay Out Vertically")));
+ m_actionVerticalLayout->setWhatsThis(whatsThisFrom(u"Layout|Lay Out Vertically"_s));
m_actionVerticalLayout->setData(LayoutInfo::VBox);
m_actionVerticalLayout->setEnabled(false);
connect(m_actionVerticalLayout, &QAction::triggered, this, &FormWindowManager::createLayout);
- QIcon formIcon = QIcon::fromTheme(QStringLiteral("designer-form-layout"), createIconSet(QStringLiteral("editform.png")));
+ QIcon formIcon = QIcon::fromTheme(u"designer-form-layout"_s,
+ createIconSet("editform.png"_L1));
m_actionFormLayout = new QAction(formIcon, tr("Lay Out in a &Form Layout"), this);
- m_actionFormLayout->setObjectName(QStringLiteral("__qt_form_layout_action"));
+ m_actionFormLayout->setObjectName(u"__qt_form_layout_action"_s);
m_actionFormLayout->setShortcut(Qt::CTRL | Qt::Key_6);
m_actionFormLayout->setStatusTip(tr("Lays out the selected widgets in a form layout"));
- m_actionFormLayout->setWhatsThis(whatsThisFrom(QStringLiteral("Layout|Lay Out in a Form")));
+ m_actionFormLayout->setWhatsThis(whatsThisFrom(u"Layout|Lay Out in a Form"_s));
m_actionFormLayout->setData(LayoutInfo::Form);
m_actionFormLayout->setEnabled(false);
connect(m_actionFormLayout, &QAction::triggered, this, &FormWindowManager::createLayout);
- m_actionGridLayout = new QAction(createIconSet(QStringLiteral("editgrid.png")), tr("Lay Out in a &Grid"), this);
- m_actionGridLayout->setObjectName(QStringLiteral("__qt_grid_layout_action"));
+ m_actionGridLayout = new QAction(createIconSet("editgrid.png"_L1),
+ tr("Lay Out in a &Grid"), this);
+ m_actionGridLayout->setObjectName(u"__qt_grid_layout_action"_s);
m_actionGridLayout->setShortcut(Qt::CTRL | Qt::Key_5);
m_actionGridLayout->setStatusTip(tr("Lays out the selected widgets in a grid"));
- m_actionGridLayout->setWhatsThis(whatsThisFrom(QStringLiteral("Layout|Lay Out in a Grid")));
+ m_actionGridLayout->setWhatsThis(whatsThisFrom(u"Layout|Lay Out in a Grid"_s));
m_actionGridLayout->setData(LayoutInfo::Grid);
m_actionGridLayout->setEnabled(false);
connect(m_actionGridLayout, &QAction::triggered, this, &FormWindowManager::createLayout);
- m_actionSplitHorizontal = new QAction(createIconSet(QStringLiteral("edithlayoutsplit.png")),
+ m_actionSplitHorizontal = new QAction(createIconSet("edithlayoutsplit.png"_L1),
tr("Lay Out Horizontally in S&plitter"), this);
- m_actionSplitHorizontal->setObjectName(QStringLiteral("__qt_split_horizontal_action"));
+ m_actionSplitHorizontal->setObjectName(u"__qt_split_horizontal_action"_s);
m_actionSplitHorizontal->setShortcut(Qt::CTRL | Qt::Key_3);
m_actionSplitHorizontal->setStatusTip(tr("Lays out the selected widgets horizontally in a splitter"));
- m_actionSplitHorizontal->setWhatsThis(whatsThisFrom(QStringLiteral("Layout|Lay Out Horizontally in Splitter")));
+ m_actionSplitHorizontal->setWhatsThis(whatsThisFrom(u"Layout|Lay Out Horizontally in Splitter"_s));
m_actionSplitHorizontal->setData(LayoutInfo::HSplitter);
m_actionSplitHorizontal->setEnabled(false);
connect(m_actionSplitHorizontal, &QAction::triggered, this, &FormWindowManager::createLayout);
- m_actionSplitVertical = new QAction(createIconSet(QStringLiteral("editvlayoutsplit.png")),
+ m_actionSplitVertical = new QAction(createIconSet("editvlayoutsplit.png"_L1),
tr("Lay Out Vertically in Sp&litter"), this);
- m_actionSplitVertical->setObjectName(QStringLiteral("__qt_split_vertical_action"));
+ m_actionSplitVertical->setObjectName(u"__qt_split_vertical_action"_s);
m_actionSplitVertical->setShortcut(Qt::CTRL | Qt::Key_4);
m_actionSplitVertical->setStatusTip(tr("Lays out the selected widgets vertically in a splitter"));
- m_actionSplitVertical->setWhatsThis(whatsThisFrom(QStringLiteral("Layout|Lay Out Vertically in Splitter")));
+ m_actionSplitVertical->setWhatsThis(whatsThisFrom(u"Layout|Lay Out Vertically in Splitter"_s));
connect(m_actionSplitVertical, &QAction::triggered, this, &FormWindowManager::createLayout);
m_actionSplitVertical->setData(LayoutInfo::VSplitter);
m_actionSplitVertical->setEnabled(false);
- m_actionBreakLayout = new QAction(createIconSet(QStringLiteral("editbreaklayout.png")), tr("&Break Layout"), this);
- m_actionBreakLayout->setObjectName(QStringLiteral("__qt_break_layout_action"));
+ m_actionBreakLayout = new QAction(createIconSet("editbreaklayout.png"_L1),
+ tr("&Break Layout"), this);
+ m_actionBreakLayout->setObjectName(u"__qt_break_layout_action"_s);
m_actionBreakLayout->setShortcut(Qt::CTRL | Qt::Key_0);
m_actionBreakLayout->setStatusTip(tr("Breaks the selected layout"));
- m_actionBreakLayout->setWhatsThis(whatsThisFrom(QStringLiteral("Layout|Break Layout")));
+ m_actionBreakLayout->setWhatsThis(whatsThisFrom(u"Layout|Break Layout"_s));
connect(m_actionBreakLayout, &QAction::triggered, this, &FormWindowManager::slotActionBreakLayoutActivated);
m_actionBreakLayout->setEnabled(false);
m_actionSimplifyLayout = new QAction(tr("Si&mplify Grid Layout"), this);
- m_actionSimplifyLayout->setObjectName(QStringLiteral("__qt_simplify_layout_action"));
+ m_actionSimplifyLayout->setObjectName(u"__qt_simplify_layout_action"_s);
m_actionSimplifyLayout->setStatusTip(tr("Removes empty columns and rows"));
- m_actionSimplifyLayout->setWhatsThis(whatsThisFrom(QStringLiteral("Layout|Simplify Layout")));
+ m_actionSimplifyLayout->setWhatsThis(whatsThisFrom(u"Layout|Simplify Layout"_s));
connect(m_actionSimplifyLayout, &QAction::triggered, this, &FormWindowManager::slotActionSimplifyLayoutActivated);
m_actionSimplifyLayout->setEnabled(false);
m_actionDefaultPreview = new QAction(tr("&Preview..."), this);
- m_actionDefaultPreview->setObjectName(QStringLiteral("__qt_default_preview_action"));
+ m_actionDefaultPreview->setObjectName(u"__qt_default_preview_action"_s);
m_actionDefaultPreview->setStatusTip(tr("Preview current form"));
- m_actionDefaultPreview->setWhatsThis(whatsThisFrom(QStringLiteral("Form|Preview")));
+ m_actionDefaultPreview->setWhatsThis(whatsThisFrom(u"Form|Preview"_s));
connect(m_actionDefaultPreview, &QAction::triggered,
this, &FormWindowManager::showPreview);
@@ -518,13 +505,13 @@ void FormWindowManager::setupActions()
m_actionUndo = m_undoGroup->createUndoAction(this);
m_actionUndo->setEnabled(false);
- m_actionUndo->setIcon(QIcon::fromTheme(QStringLiteral("edit-undo"), createIconSet(QStringLiteral("undo.png"))));
+ m_actionUndo->setIcon(createIconSet(QIcon::ThemeIcon::EditUndo, "undo.png"_L1));
m_actionRedo = m_undoGroup->createRedoAction(this);
m_actionRedo->setEnabled(false);
- m_actionRedo->setIcon(QIcon::fromTheme(QStringLiteral("edit-redo"), createIconSet(QStringLiteral("redo.png"))));
+ m_actionRedo->setIcon(createIconSet(QIcon::ThemeIcon::EditRedo, "redo.png"_L1));
m_actionShowFormWindowSettingsDialog = new QAction(tr("Form &Settings..."), this);
- m_actionShowFormWindowSettingsDialog->setObjectName(QStringLiteral("__qt_form_settings_action"));
+ m_actionShowFormWindowSettingsDialog->setObjectName(u"__qt_form_settings_action"_s);
connect(m_actionShowFormWindowSettingsDialog, &QAction::triggered,
this, &FormWindowManager::slotActionShowFormWindowSettingsDialog);
m_actionShowFormWindowSettingsDialog->setEnabled(false);
@@ -639,7 +626,7 @@ void FormWindowManager::slotActionAdjustSizeActivated()
}
// Always count the main container as unlaid-out
- for (QWidget *widget : qAsConst(selectedWidgets)) {
+ for (QWidget *widget : std::as_const(selectedWidgets)) {
bool unlaidout = LayoutInfo::layoutType(core(), widget->parentWidget()) == LayoutInfo::NoLayout;
bool isMainContainer = m_activeFormWindow->isMainContainer(widget);
@@ -751,7 +738,7 @@ QSet<QWidget *> FormWindowManager::getUnsortedLayoutsToBeBroken(bool firstOnly)
if (selection.isEmpty() && m_activeFormWindow->mainContainer())
selection.append(m_activeFormWindow->mainContainer());
- for (QWidget *selectedWidget : qAsConst(selection)) {
+ for (QWidget *selectedWidget : std::as_const(selection)) {
// find all layouts
const QWidgetList &list = layoutsToBeBroken(selectedWidget);
if (!list.isEmpty()) {
@@ -780,7 +767,7 @@ QWidgetList FormWindowManager::layoutsToBeBroken() const
for (QWidget *wToBeInserted : unsortedLayouts) {
if (!orderedLayoutList.contains(wToBeInserted)) {
// try to find first child, use as insertion position, else append
- const QWidgetList::iterator firstChildPos = findFirstChildOf(orderedLayoutList.begin(), orderedLayoutList.end(), wToBeInserted);
+ const auto firstChildPos = findFirstChildOf(orderedLayoutList.begin(), orderedLayoutList.end(), wToBeInserted);
if (firstChildPos == orderedLayoutList.end()) {
orderedLayoutList.push_back(wToBeInserted);
} else {
@@ -811,8 +798,7 @@ void FormWindowManager::slotUpdateActions()
bool canMorphIntoHBoxLayout = false;
bool canMorphIntoGridLayout = false;
bool canMorphIntoFormLayout = false;
- int selectedWidgetCount = 0;
- int laidoutWidgetCount = 0;
+ bool hasSelectedWidgets = false;
int unlaidoutWidgetCount = 0;
#if QT_CONFIG(clipboard)
bool pasteAvailable = false;
@@ -831,7 +817,7 @@ void FormWindowManager::slotUpdateActions()
QWidgetList simplifiedSelection = m_activeFormWindow->selectedWidgets();
- selectedWidgetCount = simplifiedSelection.count();
+ hasSelectedWidgets = !simplifiedSelection.isEmpty();
#if QT_CONFIG(clipboard)
pasteAvailable = qApp->clipboard()->mimeData() && qApp->clipboard()->mimeData()->hasText();
#endif
@@ -842,19 +828,16 @@ void FormWindowManager::slotUpdateActions()
simplifiedSelection.append(mainContainer);
// Always count the main container as unlaid-out
- const QWidgetList::const_iterator cend = simplifiedSelection.constEnd();
- for (QWidgetList::const_iterator it = simplifiedSelection.constBegin(); it != cend; ++it) {
- if (*it != mainContainer && LayoutInfo::isWidgetLaidout(m_core, *it)) {
- ++laidoutWidgetCount;
- } else {
+ for (auto *w : std::as_const(simplifiedSelection)) {
+ if (w == mainContainer || !LayoutInfo::isWidgetLaidout(m_core, w))
++unlaidoutWidgetCount;
- }
- if (qobject_cast<const QLayoutWidget *>(*it) || qobject_cast<const Spacer *>(*it))
+
+ if (qobject_cast<const QLayoutWidget *>(w) || qobject_cast<const Spacer *>(w))
canChangeZOrder = false;
}
// Figure out layouts: Looking at a group of dangling widgets
- if (simplifiedSelection.count() != 1) {
+ if (simplifiedSelection.size() != 1) {
layoutAvailable = unlaidoutWidgetCount > 1;
//breakAvailable = false;
break;
@@ -903,13 +886,13 @@ void FormWindowManager::slotUpdateActions()
} while(false);
#if QT_CONFIG(clipboard)
- m_actionCut->setEnabled(selectedWidgetCount > 0);
- m_actionCopy->setEnabled(selectedWidgetCount > 0);
+ m_actionCut->setEnabled(hasSelectedWidgets);
+ m_actionCopy->setEnabled(hasSelectedWidgets);
m_actionPaste->setEnabled(pasteAvailable);
#endif
- m_actionDelete->setEnabled(selectedWidgetCount > 0);
- m_actionLower->setEnabled(canChangeZOrder && selectedWidgetCount > 0);
- m_actionRaise->setEnabled(canChangeZOrder && selectedWidgetCount > 0);
+ m_actionDelete->setEnabled(hasSelectedWidgets);
+ m_actionLower->setEnabled(canChangeZOrder && hasSelectedWidgets);
+ m_actionRaise->setEnabled(canChangeZOrder && hasSelectedWidgets);
m_actionSelectAll->setEnabled(m_activeFormWindow != nullptr);
diff --git a/src/designer/src/components/formeditor/formwindowmanager.h b/src/designer/src/components/formeditor/formwindowmanager.h
index d9723cea6..001390bb4 100644
--- a/src/designer/src/components/formeditor/formwindowmanager.h
+++ b/src/designer/src/components/formeditor/formwindowmanager.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef FORMWINDOWMANAGER_H
#define FORMWINDOWMANAGER_H
diff --git a/src/designer/src/components/formeditor/formwindowsettings.cpp b/src/designer/src/components/formeditor/formwindowsettings.cpp
index 3e24b7623..df3fa01c2 100644
--- a/src/designer/src/components/formeditor/formwindowsettings.cpp
+++ b/src/designer/src/components/formeditor/formwindowsettings.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "formwindowsettings.h"
#include "ui_formwindowsettings.h"
@@ -34,6 +9,7 @@
#include <QtWidgets/qstyle.h>
+#include <QtCore/qcompare.h>
#include <QtCore/qregularexpression.h>
#include <QtCore/qdebug.h>
@@ -41,12 +17,12 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
// Data structure containing form dialog data providing comparison
struct FormWindowData {
- bool equals(const FormWindowData&) const;
-
void fromFormWindow(FormWindowBase* fw);
void applyToFormWindow(FormWindowBase* fw) const;
@@ -68,10 +44,11 @@ struct FormWindowData {
Grid grid;
bool idBasedTranslations{false};
bool connectSlotsByName{true};
-};
-inline bool operator==(const FormWindowData &fd1, const FormWindowData &fd2) { return fd1.equals(fd2); }
-inline bool operator!=(const FormWindowData &fd1, const FormWindowData &fd2) { return !fd1.equals(fd2); }
+ friend bool comparesEqual(const FormWindowData &lhs,
+ const FormWindowData &rhs) noexcept;
+ Q_DECLARE_EQUALITY_COMPARABLE(FormWindowData)
+};
QDebug operator<<(QDebug str, const FormWindowData &d)
{
@@ -86,21 +63,21 @@ QDebug operator<<(QDebug str, const FormWindowData &d)
return str;
}
-bool FormWindowData::equals(const FormWindowData &rhs) const
+bool comparesEqual(const FormWindowData &lhs, const FormWindowData &rhs) noexcept
{
- return layoutDefaultEnabled == rhs.layoutDefaultEnabled &&
- defaultMargin == rhs.defaultMargin &&
- defaultSpacing == rhs.defaultSpacing &&
- layoutFunctionsEnabled == rhs.layoutFunctionsEnabled &&
- marginFunction == rhs.marginFunction &&
- spacingFunction == rhs.spacingFunction &&
- pixFunction == rhs.pixFunction &&
- author == rhs.author &&
- includeHints == rhs.includeHints &&
- hasFormGrid == rhs.hasFormGrid &&
- grid == rhs.grid &&
- idBasedTranslations == rhs.idBasedTranslations &&
- connectSlotsByName == rhs.connectSlotsByName;
+ return lhs.layoutDefaultEnabled == rhs.layoutDefaultEnabled &&
+ lhs.defaultMargin == rhs.defaultMargin &&
+ lhs.defaultSpacing == rhs.defaultSpacing &&
+ lhs.layoutFunctionsEnabled == rhs.layoutFunctionsEnabled &&
+ lhs.marginFunction == rhs.marginFunction &&
+ lhs.spacingFunction == rhs.spacingFunction &&
+ lhs.pixFunction == rhs.pixFunction &&
+ lhs.author == rhs.author &&
+ lhs.includeHints == rhs.includeHints &&
+ lhs.hasFormGrid == rhs.hasFormGrid &&
+ lhs.grid == rhs.grid &&
+ lhs.idBasedTranslations == rhs.idBasedTranslations &&
+ lhs.connectSlotsByName == rhs.connectSlotsByName;
}
void FormWindowData::fromFormWindow(FormWindowBase* fw)
@@ -176,8 +153,6 @@ FormWindowSettings::FormWindowSettings(QDesignerFormWindowInterface *parent) :
m_ui->gridPanel->setCheckable(true);
m_ui->gridPanel->setResetButtonVisible(false);
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
-
QString deviceProfileName = m_formWindow->deviceProfileName();
if (deviceProfileName.isEmpty())
deviceProfileName = tr("None");
@@ -214,9 +189,9 @@ FormWindowData FormWindowSettings::data() const
const QString hints = m_ui->includeHintsTextEdit->toPlainText();
if (!hints.isEmpty()) {
- rc.includeHints = hints.split(QLatin1Char('\n'));
+ rc.includeHints = hints.split(u'\n');
// Purge out any lines consisting of blanks only
- const QRegularExpression blankLine(QStringLiteral("^\\s*$"));
+ const QRegularExpression blankLine(u"^\\s*$"_s);
Q_ASSERT(blankLine.isValid());
rc.includeHints.erase(std::remove_if(rc.includeHints.begin(), rc.includeHints.end(),
[blankLine](const QString &hint){ return blankLine.match(hint).hasMatch(); }),
@@ -248,7 +223,7 @@ void FormWindowSettings::setData(const FormWindowData &data)
if (data.includeHints.isEmpty()) {
m_ui->includeHintsTextEdit->clear();
} else {
- m_ui->includeHintsTextEdit->setText(data.includeHints.join(QLatin1Char('\n')));
+ m_ui->includeHintsTextEdit->setText(data.includeHints.join(u'\n'));
}
m_ui->gridPanel->setChecked(data.hasFormGrid);
diff --git a/src/designer/src/components/formeditor/formwindowsettings.h b/src/designer/src/components/formeditor/formwindowsettings.h
index 8d06097a6..37e5101c7 100644
--- a/src/designer/src/components/formeditor/formwindowsettings.h
+++ b/src/designer/src/components/formeditor/formwindowsettings.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef FORMWINDOWSETTINGS_H
#define FORMWINDOWSETTINGS_H
@@ -61,7 +36,7 @@ private:
FormWindowData data() const;
void setData(const FormWindowData&);
- Ui::FormWindowSettings *m_ui;
+ QT_PREPEND_NAMESPACE(Ui)::FormWindowSettings *m_ui;
FormWindowBase *m_formWindow;
FormWindowData *m_oldData;
};
diff --git a/src/designer/src/components/formeditor/formwindowsettings.ui b/src/designer/src/components/formeditor/formwindowsettings.ui
index a71ae3542..1fd1e35b7 100644
--- a/src/designer/src/components/formeditor/formwindowsettings.ui
+++ b/src/designer/src/components/formeditor/formwindowsettings.ui
@@ -1,32 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+</comment>
<class>FormWindowSettings</class>
<widget class="QDialog" name="FormWindowSettings">
<property name="geometry">
diff --git a/src/designer/src/components/formeditor/images/cleartext.png b/src/designer/src/components/formeditor/images/cleartext.png
deleted file mode 100644
index 4c7bb13f3..000000000
--- a/src/designer/src/components/formeditor/images/cleartext.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/cursors/arrow.png b/src/designer/src/components/formeditor/images/cursors/arrow.png
deleted file mode 100644
index a69ef4eb6..000000000
--- a/src/designer/src/components/formeditor/images/cursors/arrow.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/cursors/busy.png b/src/designer/src/components/formeditor/images/cursors/busy.png
deleted file mode 100644
index 53717e499..000000000
--- a/src/designer/src/components/formeditor/images/cursors/busy.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/cursors/closedhand.png b/src/designer/src/components/formeditor/images/cursors/closedhand.png
deleted file mode 100644
index b78dd1dac..000000000
--- a/src/designer/src/components/formeditor/images/cursors/closedhand.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/cursors/cross.png b/src/designer/src/components/formeditor/images/cursors/cross.png
deleted file mode 100644
index fe38e7448..000000000
--- a/src/designer/src/components/formeditor/images/cursors/cross.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/cursors/hand.png b/src/designer/src/components/formeditor/images/cursors/hand.png
deleted file mode 100644
index d2004aefa..000000000
--- a/src/designer/src/components/formeditor/images/cursors/hand.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/cursors/hsplit.png b/src/designer/src/components/formeditor/images/cursors/hsplit.png
deleted file mode 100644
index a5667e3ff..000000000
--- a/src/designer/src/components/formeditor/images/cursors/hsplit.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/cursors/ibeam.png b/src/designer/src/components/formeditor/images/cursors/ibeam.png
deleted file mode 100644
index 097fc5fa7..000000000
--- a/src/designer/src/components/formeditor/images/cursors/ibeam.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/cursors/no.png b/src/designer/src/components/formeditor/images/cursors/no.png
deleted file mode 100644
index 2b08c4e2a..000000000
--- a/src/designer/src/components/formeditor/images/cursors/no.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/cursors/openhand.png b/src/designer/src/components/formeditor/images/cursors/openhand.png
deleted file mode 100644
index 9181c859e..000000000
--- a/src/designer/src/components/formeditor/images/cursors/openhand.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/cursors/sizeall.png b/src/designer/src/components/formeditor/images/cursors/sizeall.png
deleted file mode 100644
index 69f13eb34..000000000
--- a/src/designer/src/components/formeditor/images/cursors/sizeall.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/cursors/sizeb.png b/src/designer/src/components/formeditor/images/cursors/sizeb.png
deleted file mode 100644
index 3b127a05d..000000000
--- a/src/designer/src/components/formeditor/images/cursors/sizeb.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/cursors/sizef.png b/src/designer/src/components/formeditor/images/cursors/sizef.png
deleted file mode 100644
index f37d7b91e..000000000
--- a/src/designer/src/components/formeditor/images/cursors/sizef.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/cursors/sizeh.png b/src/designer/src/components/formeditor/images/cursors/sizeh.png
deleted file mode 100644
index a9f40cbc3..000000000
--- a/src/designer/src/components/formeditor/images/cursors/sizeh.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/cursors/sizev.png b/src/designer/src/components/formeditor/images/cursors/sizev.png
deleted file mode 100644
index 1edbab27a..000000000
--- a/src/designer/src/components/formeditor/images/cursors/sizev.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/cursors/uparrow.png b/src/designer/src/components/formeditor/images/cursors/uparrow.png
deleted file mode 100644
index d3e70ef4c..000000000
--- a/src/designer/src/components/formeditor/images/cursors/uparrow.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/cursors/vsplit.png b/src/designer/src/components/formeditor/images/cursors/vsplit.png
deleted file mode 100644
index 1beda2570..000000000
--- a/src/designer/src/components/formeditor/images/cursors/vsplit.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/cursors/wait.png b/src/designer/src/components/formeditor/images/cursors/wait.png
deleted file mode 100644
index 69056c479..000000000
--- a/src/designer/src/components/formeditor/images/cursors/wait.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/cursors/whatsthis.png b/src/designer/src/components/formeditor/images/cursors/whatsthis.png
deleted file mode 100644
index b47601c37..000000000
--- a/src/designer/src/components/formeditor/images/cursors/whatsthis.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/mac/resourceeditortool.png b/src/designer/src/components/formeditor/images/mac/resourceeditortool.png
deleted file mode 100644
index 7ef511c2b..000000000
--- a/src/designer/src/components/formeditor/images/mac/resourceeditortool.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/plus-16.png b/src/designer/src/components/formeditor/images/plus-16.png
deleted file mode 100644
index ef43788e6..000000000
--- a/src/designer/src/components/formeditor/images/plus-16.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/qt3logo.png b/src/designer/src/components/formeditor/images/qt3logo.png
deleted file mode 100644
index 720285001..000000000
--- a/src/designer/src/components/formeditor/images/qt3logo.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/qtlogo128x128.png b/src/designer/src/components/formeditor/images/qtlogo128x128.png
new file mode 100644
index 000000000..8dfeb1a02
--- /dev/null
+++ b/src/designer/src/components/formeditor/images/qtlogo128x128.png
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/qtlogo16x16.png b/src/designer/src/components/formeditor/images/qtlogo16x16.png
index 30bcb45ed..849684984 100644
--- a/src/designer/src/components/formeditor/images/qtlogo16x16.png
+++ b/src/designer/src/components/formeditor/images/qtlogo16x16.png
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/qtlogo24x24.png b/src/designer/src/components/formeditor/images/qtlogo24x24.png
index 058bf6972..4effcc4ab 100644
--- a/src/designer/src/components/formeditor/images/qtlogo24x24.png
+++ b/src/designer/src/components/formeditor/images/qtlogo24x24.png
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/qtlogo32x32.png b/src/designer/src/components/formeditor/images/qtlogo32x32.png
index d609c1e1e..d34a6a17f 100644
--- a/src/designer/src/components/formeditor/images/qtlogo32x32.png
+++ b/src/designer/src/components/formeditor/images/qtlogo32x32.png
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/qtlogo64x64.png b/src/designer/src/components/formeditor/images/qtlogo64x64.png
index 3bc03b7c7..e40b5c6fc 100644
--- a/src/designer/src/components/formeditor/images/qtlogo64x64.png
+++ b/src/designer/src/components/formeditor/images/qtlogo64x64.png
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/widgets/groupboxcollapsible.png b/src/designer/src/components/formeditor/images/widgets/groupboxcollapsible.png
deleted file mode 100644
index 62fd1ad56..000000000
--- a/src/designer/src/components/formeditor/images/widgets/groupboxcollapsible.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/widgets/hsplit.png b/src/designer/src/components/formeditor/images/widgets/hsplit.png
deleted file mode 100644
index 1ea8f2ac0..000000000
--- a/src/designer/src/components/formeditor/images/widgets/hsplit.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/widgets/tabbar.png b/src/designer/src/components/formeditor/images/widgets/tabbar.png
deleted file mode 100644
index d5d37836b..000000000
--- a/src/designer/src/components/formeditor/images/widgets/tabbar.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/widgets/wizard.png b/src/designer/src/components/formeditor/images/widgets/wizard.png
deleted file mode 100644
index 7c0e107ae..000000000
--- a/src/designer/src/components/formeditor/images/widgets/wizard.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/images/win/resourceeditortool.png b/src/designer/src/components/formeditor/images/win/resourceeditortool.png
deleted file mode 100644
index cc9cb5851..000000000
--- a/src/designer/src/components/formeditor/images/win/resourceeditortool.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/components/formeditor/itemview_propertysheet.cpp b/src/designer/src/components/formeditor/itemview_propertysheet.cpp
index 71adf7397..312427341 100644
--- a/src/designer/src/components/formeditor/itemview_propertysheet.cpp
+++ b/src/designer/src/components/formeditor/itemview_propertysheet.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "itemview_propertysheet.h"
@@ -36,6 +11,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
struct Property {
@@ -47,8 +24,6 @@ struct Property {
int m_id{-1};
};
-typedef QMap<int, Property> FakePropertyMap;
-
struct ItemViewPropertySheetPrivate {
ItemViewPropertySheetPrivate(QDesignerFormEditorInterface *core,
QHeaderView *horizontalHeader,
@@ -58,7 +33,7 @@ struct ItemViewPropertySheetPrivate {
inline QString fakePropertyName(const QString &prefix, const QString &realName);
// Maps index of fake property to index of real property in respective sheet
- FakePropertyMap m_propertyIdMap;
+ QMap<int, Property> m_propertyIdMap;
// Maps name of fake property to name of real property
QHash<QString, QString> m_propertyNameMap;
@@ -68,20 +43,16 @@ struct ItemViewPropertySheetPrivate {
};
// Name of the fake group
-static const char *headerGroup = "Header";
+static constexpr auto headerGroup = "Header"_L1;
// Name of the real properties
-static const char *visibleProperty = "visible";
-static const char *cascadingSectionResizesProperty = "cascadingSectionResizes";
-static const char *defaultSectionSizeProperty = "defaultSectionSize";
-static const char *highlightSectionsProperty = "highlightSections";
-static const char *minimumSectionSizeProperty = "minimumSectionSize";
-static const char *showSortIndicatorProperty = "showSortIndicator";
-static const char *stretchLastSectionProperty = "stretchLastSection";
-} // namespace qdesigner_internal
-
-using namespace qdesigner_internal;
-
+static constexpr auto visibleProperty = "visible"_L1;
+static constexpr auto cascadingSectionResizesProperty = "cascadingSectionResizes"_L1;
+static constexpr auto defaultSectionSizeProperty = "defaultSectionSize"_L1;
+static constexpr auto highlightSectionsProperty = "highlightSections"_L1;
+static constexpr auto minimumSectionSizeProperty = "minimumSectionSize"_L1;
+static constexpr auto showSortIndicatorProperty = "showSortIndicator"_L1;
+static constexpr auto stretchLastSectionProperty = "stretchLastSection"_L1;
/***************** ItemViewPropertySheetPrivate *********************/
@@ -102,14 +73,12 @@ ItemViewPropertySheetPrivate::ItemViewPropertySheetPrivate(QDesignerFormEditorIn
QStringList ItemViewPropertySheetPrivate::realPropertyNames()
{
if (m_realPropertyNames.isEmpty())
- m_realPropertyNames
- << QLatin1String(visibleProperty)
- << QLatin1String(cascadingSectionResizesProperty)
- << QLatin1String(defaultSectionSizeProperty)
- << QLatin1String(highlightSectionsProperty)
- << QLatin1String(minimumSectionSizeProperty)
- << QLatin1String(showSortIndicatorProperty)
- << QLatin1String(stretchLastSectionProperty);
+ m_realPropertyNames = {
+ visibleProperty, cascadingSectionResizesProperty,
+ defaultSectionSizeProperty, highlightSectionsProperty,
+ minimumSectionSizeProperty, showSortIndicatorProperty,
+ stretchLastSectionProperty
+ };
return m_realPropertyNames;
}
@@ -145,7 +114,7 @@ ItemViewPropertySheet::ItemViewPropertySheet(QTreeView *treeViewObject, QObject
: QDesignerPropertySheet(treeViewObject, parent),
d(new ItemViewPropertySheetPrivate(core(), treeViewObject->header(), nullptr))
{
- initHeaderProperties(treeViewObject->header(), QStringLiteral("header"));
+ initHeaderProperties(treeViewObject->header(), u"header"_s);
}
ItemViewPropertySheet::ItemViewPropertySheet(QTableView *tableViewObject, QObject *parent)
@@ -154,8 +123,8 @@ ItemViewPropertySheet::ItemViewPropertySheet(QTableView *tableViewObject, QObjec
tableViewObject->horizontalHeader(),
tableViewObject->verticalHeader()))
{
- initHeaderProperties(tableViewObject->horizontalHeader(), QStringLiteral("horizontalHeader"));
- initHeaderProperties(tableViewObject->verticalHeader(), QStringLiteral("verticalHeader"));
+ initHeaderProperties(tableViewObject->horizontalHeader(), u"horizontalHeader"_s);
+ initHeaderProperties(tableViewObject->verticalHeader(), u"verticalHeader"_s);
}
ItemViewPropertySheet::~ItemViewPropertySheet()
@@ -167,12 +136,12 @@ void ItemViewPropertySheet::initHeaderProperties(QHeaderView *hv, const QString
{
QDesignerPropertySheetExtension *headerSheet = d->m_propertySheet.value(hv);
Q_ASSERT(headerSheet);
- const QString headerGroupS = QLatin1String(headerGroup);
+ const QString headerGroupS = headerGroup;
const QStringList &realPropertyNames = d->realPropertyNames();
for (const QString &realPropertyName : realPropertyNames) {
const int headerIndex = headerSheet->indexOf(realPropertyName);
Q_ASSERT(headerIndex != -1);
- const QVariant defaultValue = realPropertyName == QLatin1String(visibleProperty) ?
+ const QVariant defaultValue = realPropertyName == visibleProperty ?
QVariant(true) : headerSheet->property(headerIndex);
const QString fakePropertyName = d->fakePropertyName(prefix, realPropertyName);
const int fakeIndex = createFakeProperty(fakePropertyName, defaultValue);
@@ -192,7 +161,7 @@ QHash<QString,QString> ItemViewPropertySheet::propertyNameMap() const
QVariant ItemViewPropertySheet::property(int index) const
{
- const FakePropertyMap::const_iterator it = d->m_propertyIdMap.constFind(index);
+ const auto it = d->m_propertyIdMap.constFind(index);
if (it != d->m_propertyIdMap.constEnd())
return it.value().m_sheet->property(it.value().m_id);
return QDesignerPropertySheet::property(index);
@@ -200,7 +169,7 @@ QVariant ItemViewPropertySheet::property(int index) const
void ItemViewPropertySheet::setProperty(int index, const QVariant &value)
{
- const FakePropertyMap::iterator it = d->m_propertyIdMap.find(index);
+ const auto it = d->m_propertyIdMap.find(index);
if (it != d->m_propertyIdMap.end()) {
it.value().m_sheet->setProperty(it.value().m_id, value);
} else {
@@ -210,7 +179,7 @@ void ItemViewPropertySheet::setProperty(int index, const QVariant &value)
void ItemViewPropertySheet::setChanged(int index, bool changed)
{
- const FakePropertyMap::iterator it = d->m_propertyIdMap.find(index);
+ const auto it = d->m_propertyIdMap.find(index);
if (it != d->m_propertyIdMap.end()) {
it.value().m_sheet->setChanged(it.value().m_id, changed);
} else {
@@ -220,7 +189,7 @@ void ItemViewPropertySheet::setChanged(int index, bool changed)
bool ItemViewPropertySheet::isChanged(int index) const
{
- const FakePropertyMap::const_iterator it = d->m_propertyIdMap.constFind(index);
+ const auto it = d->m_propertyIdMap.constFind(index);
if (it != d->m_propertyIdMap.constEnd())
return it.value().m_sheet->isChanged(it.value().m_id);
return QDesignerPropertySheet::isChanged(index);
@@ -228,7 +197,7 @@ bool ItemViewPropertySheet::isChanged(int index) const
bool ItemViewPropertySheet::hasReset(int index) const
{
- const FakePropertyMap::const_iterator it = d->m_propertyIdMap.constFind(index);
+ const auto it = d->m_propertyIdMap.constFind(index);
if (it != d->m_propertyIdMap.constEnd())
return it.value().m_sheet->hasReset(it.value().m_id);
return QDesignerPropertySheet::hasReset(index);
@@ -236,7 +205,7 @@ bool ItemViewPropertySheet::hasReset(int index) const
bool ItemViewPropertySheet::reset(int index)
{
- const FakePropertyMap::iterator it = d->m_propertyIdMap.find(index);
+ const auto it = d->m_propertyIdMap.find(index);
if (it != d->m_propertyIdMap.end()) {
QDesignerPropertySheetExtension *headerSheet = it.value().m_sheet;
const int headerIndex = it.value().m_id;
@@ -244,7 +213,7 @@ bool ItemViewPropertySheet::reset(int index)
// Resetting for "visible" might fail and the stored default
// of the Widget database is "false" due to the widget not being
// visible at the time it was determined. Reset to "true" manually.
- if (!resetRC && headerSheet->propertyName(headerIndex) == QLatin1String(visibleProperty)) {
+ if (!resetRC && headerSheet->propertyName(headerIndex) == visibleProperty) {
headerSheet->setProperty(headerIndex, QVariant(true));
headerSheet->setChanged(headerIndex, false);
return true;
@@ -254,4 +223,6 @@ bool ItemViewPropertySheet::reset(int index)
return QDesignerPropertySheet::reset(index);
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/formeditor/itemview_propertysheet.h b/src/designer/src/components/formeditor/itemview_propertysheet.h
index 5a72095d2..5ef061978 100644
--- a/src/designer/src/components/formeditor/itemview_propertysheet.h
+++ b/src/designer/src/components/formeditor/itemview_propertysheet.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ITEMVIEW_PROPERTYSHEET_H
#define ITEMVIEW_PROPERTYSHEET_H
diff --git a/src/designer/src/components/formeditor/layout_propertysheet.cpp b/src/designer/src/components/formeditor/layout_propertysheet.cpp
index 0bb3ecb2f..8447f3fd5 100644
--- a/src/designer/src/components/formeditor/layout_propertysheet.cpp
+++ b/src/designer/src/components/formeditor/layout_propertysheet.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "layout_propertysheet.h"
@@ -48,27 +23,27 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
#define USE_LAYOUT_SIZE_CONSTRAINT
-static const char *leftMargin = "leftMargin";
-static const char *topMargin = "topMargin";
-static const char *rightMargin = "rightMargin";
-static const char *bottomMargin = "bottomMargin";
-static const char *horizontalSpacing = "horizontalSpacing";
-static const char *verticalSpacing = "verticalSpacing";
-static const char *spacing = "spacing";
-static const char *margin = "margin";
-static const char *sizeConstraint = "sizeConstraint";
-static const char *boxStretchPropertyC = "stretch";
-static const char *gridRowStretchPropertyC = "rowStretch";
-static const char *gridColumnStretchPropertyC = "columnStretch";
-static const char *gridRowMinimumHeightPropertyC = "rowMinimumHeight";
-static const char *gridColumnMinimumWidthPropertyC = "columnMinimumWidth";
+static constexpr auto leftMargin = "leftMargin"_L1;
+static constexpr auto topMargin = "topMargin"_L1;
+static constexpr auto rightMargin = "rightMargin"_L1;
+static constexpr auto bottomMargin = "bottomMargin"_L1;
+static constexpr auto horizontalSpacing = "horizontalSpacing"_L1;
+static constexpr auto verticalSpacing = "verticalSpacing"_L1;
+static constexpr auto spacing = "spacing"_L1;
+static constexpr auto sizeConstraint = "sizeConstraint"_L1;
+static constexpr auto boxStretchPropertyC = "stretch"_L1;
+static constexpr auto gridRowStretchPropertyC = "rowStretch"_L1;
+static constexpr auto gridColumnStretchPropertyC = "columnStretch"_L1;
+static constexpr auto gridRowMinimumHeightPropertyC = "rowMinimumHeight"_L1;
+static constexpr auto gridColumnMinimumWidthPropertyC = "columnMinimumWidth"_L1;
namespace {
enum LayoutPropertyType {
LayoutPropertyNone,
- LayoutPropertyMargin, // Deprecated
LayoutPropertyLeftMargin,
LayoutPropertyTopMargin,
LayoutPropertyRightMargin,
@@ -94,7 +69,7 @@ namespace {
static bool isIntegerList(const QString &s)
{
// Check for empty string or comma-separated list of integers
- static const QRegularExpression re(QStringLiteral("^[0-9]+(,[0-9]+)+$"));
+ static const QRegularExpression re(u"^[0-9]+(,[0-9]+)+$"_s);
Q_ASSERT(re.isValid());
return s.isEmpty() || re.match(s).hasMatch();
}
@@ -102,23 +77,21 @@ static bool isIntegerList(const QString &s)
// Quick lookup by name
static LayoutPropertyType layoutPropertyType(const QString &name)
{
- static QHash<QString, LayoutPropertyType> namePropertyMap;
- if (namePropertyMap.isEmpty()) {
- namePropertyMap.insert(QLatin1String(leftMargin), LayoutPropertyLeftMargin);
- namePropertyMap.insert(QLatin1String(topMargin), LayoutPropertyTopMargin);
- namePropertyMap.insert(QLatin1String(rightMargin), LayoutPropertyRightMargin);
- namePropertyMap.insert(QLatin1String(bottomMargin), LayoutPropertyBottomMargin);
- namePropertyMap.insert(QLatin1String(horizontalSpacing), LayoutPropertyHorizontalSpacing);
- namePropertyMap.insert(QLatin1String(verticalSpacing), LayoutPropertyVerticalSpacing);
- namePropertyMap.insert(QLatin1String(spacing), LayoutPropertySpacing);
- namePropertyMap.insert(QLatin1String(margin), LayoutPropertyMargin);
- namePropertyMap.insert(QLatin1String(sizeConstraint), LayoutPropertySizeConstraint);
- namePropertyMap.insert(QLatin1String(boxStretchPropertyC ), LayoutPropertyBoxStretch);
- namePropertyMap.insert(QLatin1String(gridRowStretchPropertyC), LayoutPropertyGridRowStretch);
- namePropertyMap.insert(QLatin1String(gridColumnStretchPropertyC), LayoutPropertyGridColumnStretch);
- namePropertyMap.insert(QLatin1String(gridRowMinimumHeightPropertyC), LayoutPropertyGridRowMinimumHeight);
- namePropertyMap.insert(QLatin1String(gridColumnMinimumWidthPropertyC), LayoutPropertyGridColumnMinimumWidth);
- }
+ static const QHash<QString, LayoutPropertyType> namePropertyMap = {
+ {leftMargin, LayoutPropertyLeftMargin},
+ {topMargin, LayoutPropertyTopMargin},
+ {rightMargin, LayoutPropertyRightMargin},
+ {bottomMargin, LayoutPropertyBottomMargin},
+ {horizontalSpacing, LayoutPropertyHorizontalSpacing},
+ {verticalSpacing, LayoutPropertyVerticalSpacing},
+ {spacing, LayoutPropertySpacing},
+ {sizeConstraint, LayoutPropertySizeConstraint},
+ {boxStretchPropertyC, LayoutPropertyBoxStretch},
+ {gridRowStretchPropertyC, LayoutPropertyGridRowStretch},
+ {gridColumnStretchPropertyC, LayoutPropertyGridColumnStretch},
+ {gridRowMinimumHeightPropertyC, LayoutPropertyGridRowMinimumHeight},
+ {gridColumnMinimumWidthPropertyC, LayoutPropertyGridColumnMinimumWidth}
+ };
return namePropertyMap.value(name, LayoutPropertyNone);
}
@@ -179,50 +152,49 @@ namespace qdesigner_internal {
LayoutPropertySheet::LayoutPropertySheet(QLayout *l, QObject *parent)
: QDesignerPropertySheet(l, parent), m_layout(l)
{
- const QString layoutGroup = QStringLiteral("Layout");
- int pindex = createFakeProperty(QLatin1String(leftMargin), 0);
+ const QString layoutGroup = u"Layout"_s;
+ int pindex = createFakeProperty(leftMargin, 0);
setPropertyGroup(pindex, layoutGroup);
- pindex = createFakeProperty(QLatin1String(topMargin), 0);
+ pindex = createFakeProperty(topMargin, 0);
setPropertyGroup(pindex, layoutGroup);
- pindex = createFakeProperty(QLatin1String(rightMargin), 0);
+ pindex = createFakeProperty(rightMargin, 0);
setPropertyGroup(pindex, layoutGroup);
- pindex = createFakeProperty(QLatin1String(bottomMargin), 0);
+ pindex = createFakeProperty(bottomMargin, 0);
setPropertyGroup(pindex, layoutGroup);
const int visibleMask = LayoutProperties::visibleProperties(m_layout);
if (visibleMask & LayoutProperties::HorizSpacingProperty) {
- pindex = createFakeProperty(QLatin1String(horizontalSpacing), 0);
+ pindex = createFakeProperty(horizontalSpacing, 0);
setPropertyGroup(pindex, layoutGroup);
- pindex = createFakeProperty(QLatin1String(verticalSpacing), 0);
+ pindex = createFakeProperty(verticalSpacing, 0);
setPropertyGroup(pindex, layoutGroup);
- setAttribute(indexOf(QLatin1String(spacing)), true);
+ setAttribute(indexOf(spacing), true);
}
- setAttribute(indexOf(QLatin1String(margin)), true);
// Stretch
if (visibleMask & LayoutProperties::BoxStretchProperty) {
- pindex = createFakeProperty(QLatin1String(boxStretchPropertyC), QByteArray());
+ pindex = createFakeProperty(boxStretchPropertyC, QByteArray());
setPropertyGroup(pindex, layoutGroup);
setAttribute(pindex, true);
} else {
// Add the grid per-row/column stretch and size limits
if (visibleMask & LayoutProperties::GridColumnStretchProperty) {
const QByteArray empty;
- pindex = createFakeProperty(QLatin1String(gridRowStretchPropertyC), empty);
+ pindex = createFakeProperty(gridRowStretchPropertyC, empty);
setPropertyGroup(pindex, layoutGroup);
setAttribute(pindex, true);
- pindex = createFakeProperty(QLatin1String(gridColumnStretchPropertyC), empty);
+ pindex = createFakeProperty(gridColumnStretchPropertyC, empty);
setPropertyGroup(pindex, layoutGroup);
setAttribute(pindex, true);
- pindex = createFakeProperty(QLatin1String(gridRowMinimumHeightPropertyC), empty);
+ pindex = createFakeProperty(gridRowMinimumHeightPropertyC, empty);
setPropertyGroup(pindex, layoutGroup);
setAttribute(pindex, true);
- pindex = createFakeProperty(QLatin1String(gridColumnMinimumWidthPropertyC), empty);
+ pindex = createFakeProperty(gridColumnMinimumWidthPropertyC, empty);
setPropertyGroup(pindex, layoutGroup);
setAttribute(pindex, true);
}
@@ -232,7 +204,7 @@ LayoutPropertySheet::LayoutPropertySheet(QLayout *l, QObject *parent)
// as it affects the layout parent widget and thus
// conflicts with Designer's special layout widget.
// It will take effect on the preview only.
- pindex = createFakeProperty(QLatin1String(sizeConstraint));
+ pindex = createFakeProperty(sizeConstraint);
setPropertyGroup(pindex, layoutGroup);
#endif
}
@@ -256,14 +228,6 @@ void LayoutPropertySheet::setProperty(int index, const QVariant &value)
case LayoutPropertyBottomMargin:
lw->setLayoutBottomMargin(value.toInt());
return;
- case LayoutPropertyMargin: {
- const int v = value.toInt();
- lw->setLayoutLeftMargin(v);
- lw->setLayoutTopMargin(v);
- lw->setLayoutRightMargin(v);
- lw->setLayoutBottomMargin(v);
- }
- return;
default:
break;
}
@@ -451,16 +415,10 @@ void LayoutPropertySheet::setChanged(int index, bool changed)
switch (type) {
case LayoutPropertySpacing:
if (LayoutProperties::visibleProperties(m_layout) & LayoutProperties::HorizSpacingProperty) {
- setChanged(indexOf(QLatin1String(horizontalSpacing)), changed);
- setChanged(indexOf(QLatin1String(verticalSpacing)), changed);
+ setChanged(indexOf(horizontalSpacing), changed);
+ setChanged(indexOf(verticalSpacing), changed);
}
break;
- case LayoutPropertyMargin:
- setChanged(indexOf(QLatin1String(leftMargin)), changed);
- setChanged(indexOf(QLatin1String(topMargin)), changed);
- setChanged(indexOf(QLatin1String(rightMargin)), changed);
- setChanged(indexOf(QLatin1String(bottomMargin)), changed);
- break;
default:
break;
}
@@ -479,31 +437,31 @@ void LayoutPropertySheet::stretchAttributesToDom(QDesignerFormEditorInterface *c
// Stretch
if (visibleMask & LayoutProperties::BoxStretchProperty) {
- const int index = sheet->indexOf(QLatin1String(boxStretchPropertyC));
+ const int index = sheet->indexOf(boxStretchPropertyC);
Q_ASSERT(index != -1);
if (sheet->isChanged(index))
domLayout->setAttributeStretch(sheet->property(index).toString());
}
if (visibleMask & LayoutProperties::GridColumnStretchProperty) {
- const int index = sheet->indexOf(QLatin1String(gridColumnStretchPropertyC));
+ const int index = sheet->indexOf(gridColumnStretchPropertyC);
Q_ASSERT(index != -1);
if (sheet->isChanged(index))
domLayout->setAttributeColumnStretch(sheet->property(index).toString());
}
if (visibleMask & LayoutProperties::GridRowStretchProperty) {
- const int index = sheet->indexOf(QLatin1String(gridRowStretchPropertyC));
+ const int index = sheet->indexOf(gridRowStretchPropertyC);
Q_ASSERT(index != -1);
if (sheet->isChanged(index))
domLayout->setAttributeRowStretch(sheet->property(index).toString());
}
if (visibleMask & LayoutProperties::GridRowMinimumHeightProperty) {
- const int index = sheet->indexOf(QLatin1String(gridRowMinimumHeightPropertyC));
+ const int index = sheet->indexOf(gridRowMinimumHeightPropertyC);
Q_ASSERT(index != -1);
if (sheet->isChanged(index))
domLayout->setAttributeRowMinimumHeight(sheet->property(index).toString());
}
if (visibleMask & LayoutProperties::GridColumnMinimumWidthProperty) {
- const int index = sheet->indexOf(QLatin1String(gridColumnMinimumWidthPropertyC));
+ const int index = sheet->indexOf(gridColumnMinimumWidthPropertyC);
Q_ASSERT(index != -1);
if (sheet->isChanged(index))
domLayout->setAttributeColumnMinimumWidth(sheet->property(index).toString());
@@ -517,15 +475,15 @@ void LayoutPropertySheet::markChangedStretchProperties(QDesignerFormEditorInterf
QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core->extensionManager(), lt);
Q_ASSERT(sheet);
if (!domLayout->attributeStretch().isEmpty())
- sheet->setChanged(sheet->indexOf(QLatin1String(boxStretchPropertyC)), true);
+ sheet->setChanged(sheet->indexOf(boxStretchPropertyC), true);
if (!domLayout->attributeRowStretch().isEmpty())
- sheet->setChanged(sheet->indexOf(QLatin1String(gridRowStretchPropertyC)), true);
+ sheet->setChanged(sheet->indexOf(gridRowStretchPropertyC), true);
if (!domLayout->attributeColumnStretch().isEmpty())
- sheet->setChanged(sheet->indexOf(QLatin1String(gridColumnStretchPropertyC)), true);
+ sheet->setChanged(sheet->indexOf(gridColumnStretchPropertyC), true);
if (!domLayout->attributeColumnMinimumWidth().isEmpty())
- sheet->setChanged(sheet->indexOf(QLatin1String(gridColumnMinimumWidthPropertyC)), true);
+ sheet->setChanged(sheet->indexOf(gridColumnMinimumWidthPropertyC), true);
if (!domLayout->attributeRowMinimumHeight().isEmpty())
- sheet->setChanged(sheet->indexOf(QLatin1String(gridRowMinimumHeightPropertyC)), true);
+ sheet->setChanged(sheet->indexOf(gridRowMinimumHeightPropertyC), true);
}
}
diff --git a/src/designer/src/components/formeditor/layout_propertysheet.h b/src/designer/src/components/formeditor/layout_propertysheet.h
index 559f09d4a..5d59071de 100644
--- a/src/designer/src/components/formeditor/layout_propertysheet.h
+++ b/src/designer/src/components/formeditor/layout_propertysheet.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef LAYOUT_PROPERTYSHEET_H
#define LAYOUT_PROPERTYSHEET_H
@@ -61,7 +36,7 @@ private:
QLayout *m_layout;
};
-typedef QDesignerPropertySheetFactory<QLayout, LayoutPropertySheet> LayoutPropertySheetFactory;
+using LayoutPropertySheetFactory = QDesignerPropertySheetFactory<QLayout, LayoutPropertySheet>;
} // namespace qdesigner_internal
QT_END_NAMESPACE
diff --git a/src/designer/src/components/formeditor/line_propertysheet.cpp b/src/designer/src/components/formeditor/line_propertysheet.cpp
index 3ad332015..b155e78db 100644
--- a/src/designer/src/components/formeditor/line_propertysheet.cpp
+++ b/src/designer/src/components/formeditor/line_propertysheet.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "line_propertysheet.h"
#include "formwindow.h"
@@ -38,7 +13,9 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+using namespace Qt::StringLiterals;
+
+namespace qdesigner_internal {
LinePropertySheet::LinePropertySheet(Line *object, QObject *parent)
: QDesignerPropertySheet(object, parent)
@@ -52,7 +29,7 @@ bool LinePropertySheet::isVisible(int index) const
{
const QString name = propertyName(index);
- if (name == QStringLiteral("frameShape"))
+ if (name == "frameShape"_L1)
return false;
return QDesignerPropertySheet::isVisible(index);
}
@@ -67,4 +44,6 @@ QString LinePropertySheet::propertyGroup(int index) const
return QDesignerPropertySheet::propertyGroup(index);
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/formeditor/line_propertysheet.h b/src/designer/src/components/formeditor/line_propertysheet.h
index 6d0ef613a..ba1dbe5a7 100644
--- a/src/designer/src/components/formeditor/line_propertysheet.h
+++ b/src/designer/src/components/formeditor/line_propertysheet.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef LINE_PROPERTYSHEET_H
#define LINE_PROPERTYSHEET_H
diff --git a/src/designer/src/components/formeditor/previewactiongroup.cpp b/src/designer/src/components/formeditor/previewactiongroup.cpp
index a85fb22c0..abcf0b8bd 100644
--- a/src/designer/src/components/formeditor/previewactiongroup.cpp
+++ b/src/designer/src/components/formeditor/previewactiongroup.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "previewactiongroup.h"
@@ -36,6 +11,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
enum { MaxDeviceActions = 20 };
namespace qdesigner_internal {
@@ -50,22 +27,17 @@ PreviewActionGroup::PreviewActionGroup(QDesignerFormEditorInterface *core, QObje
connect(this, &PreviewActionGroup::triggered, this, &PreviewActionGroup::slotTriggered);
setExclusive(true);
- const QString objNamePostfix = QStringLiteral("_action");
// Create invisible actions for devices. Set index as action data.
- QString objNamePrefix = QStringLiteral("__qt_designer_device_");
for (int i = 0; i < MaxDeviceActions; i++) {
QAction *a = new QAction(this);
- QString objName = objNamePrefix;
- objName += QString::number(i);
- objName += objNamePostfix;
- a->setObjectName(objName);
+ a->setObjectName(QString::asprintf("__qt_designer_device_%d_action", i));
a->setVisible(false);
a->setData(i);
addAction(a);
}
// Create separator at index MaxDeviceActions
QAction *sep = new QAction(this);
- sep->setObjectName(QStringLiteral("__qt_designer_deviceseparator"));
+ sep->setObjectName(u"__qt_designer_deviceseparator"_s);
sep->setSeparator(true);
sep->setVisible(false);
addAction(sep);
@@ -74,17 +46,12 @@ PreviewActionGroup::PreviewActionGroup(QDesignerFormEditorInterface *core, QObje
// Add style actions
const QStringList styles = QStyleFactory::keys();
- const QStringList::const_iterator cend = styles.constEnd();
// Make sure ObjectName is unique in case toolbar solution is used.
- objNamePrefix = QStringLiteral("__qt_designer_style_");
// Create styles. Set style name string as action data.
- for (QStringList::const_iterator it = styles.constBegin(); it != cend ;++it) {
- QAction *a = new QAction(tr("%1 Style").arg(*it), this);
- QString objName = objNamePrefix;
- objName += *it;
- objName += objNamePostfix;
- a->setObjectName(objName);
- a->setData(*it);
+ for (const auto &s : styles) {
+ QAction *a = new QAction(tr("%1 Style").arg(s), this);
+ a->setObjectName("__qt_designer_style_"_L1 + s + "_action"_L1);
+ a->setData(s);
addAction(a);
}
}
@@ -116,11 +83,11 @@ void PreviewActionGroup::slotTriggered(QAction *a)
{
// Device or style according to data.
const QVariant data = a->data();
- switch (data.type()) {
- case QVariant::String:
+ switch (data.metaType().id()) {
+ case QMetaType::QString:
emit preview(data.toString(), -1);
break;
- case QVariant::Int:
+ case QMetaType::Int:
emit preview(QString(), data.toInt());
break;
default:
diff --git a/src/designer/src/components/formeditor/previewactiongroup.h b/src/designer/src/components/formeditor/previewactiongroup.h
index dae1abbe1..cb0ee0a19 100644
--- a/src/designer/src/components/formeditor/previewactiongroup.h
+++ b/src/designer/src/components/formeditor/previewactiongroup.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/components/formeditor/qdesigner_resource.cpp b/src/designer/src/components/formeditor/qdesigner_resource.cpp
index bcec066ee..1dc7aa735 100644
--- a/src/designer/src/components/formeditor/qdesigner_resource.cpp
+++ b/src/designer/src/components/formeditor/qdesigner_resource.cpp
@@ -1,35 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_resource.h"
#include "formwindow.h"
#include "dynamicpropertysheet.h"
#include "qdesigner_tabwidget_p.h"
+#include "iconloader_p.h"
#include "qdesigner_toolbox_p.h"
#include "qdesigner_stackedbox_p.h"
#include "qdesigner_toolbar_p.h"
@@ -108,12 +84,16 @@ Q_DECLARE_METATYPE(QWidgetList)
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
+using QFBE = QFormBuilderExtra;
+
namespace {
using DomPropertyList = QList<DomProperty *>;
}
-static const char *currentUiVersion = "4.0";
-static const char *clipboardObjectName = "__qt_fake_top_level";
+static constexpr auto currentUiVersion = "4.0"_L1;
+static constexpr auto clipboardObjectName = "__qt_fake_top_level"_L1;
#define OLD_RESOURCE_FORMAT // Support pre 4.4 format.
@@ -193,7 +173,16 @@ QVariant QDesignerResourceBuilder::loadResource(const QDir &workingDirectory, co
case DomProperty::IconSet: {
PropertySheetIconValue icon;
DomResourceIcon *di = property->elementIconSet();
- icon.setTheme(di->attributeTheme());
+ const bool hasTheme = di->hasAttributeTheme();
+ if (hasTheme) {
+ const QString &theme = di->attributeTheme();
+ const qsizetype themeEnum = theme.startsWith("QIcon::"_L1)
+ ? QDesignerResourceBuilder::themeIconIndex(theme) : -1;
+ if (themeEnum != -1)
+ icon.setThemeEnum(themeEnum);
+ else
+ icon.setTheme(theme);
+ }
if (const int flags = iconStateFlags(di)) { // new, post 4.4 format
if (flags & NormalOff)
setIconPixmap(QIcon::Normal, QIcon::Off, workingDirectory, di->elementNormalOff()->text(), icon, m_lang);
@@ -211,7 +200,7 @@ QVariant QDesignerResourceBuilder::loadResource(const QDir &workingDirectory, co
setIconPixmap(QIcon::Selected, QIcon::Off, workingDirectory, di->elementSelectedOff()->text(), icon, m_lang);
if (flags & SelectedOn)
setIconPixmap(QIcon::Selected, QIcon::On, workingDirectory, di->elementSelectedOn()->text(), icon, m_lang);
- } else {
+ } else if (!hasTheme) {
#ifdef OLD_RESOURCE_FORMAT
setIconPixmap(QIcon::Normal, QIcon::Off, workingDirectory, di->text(), icon, m_lang);
if (di->hasAttributeResource())
@@ -269,8 +258,10 @@ DomProperty *QDesignerResourceBuilder::saveResource(const QDir &workingDirectory
}
if (value.canConvert<PropertySheetIconValue>()) {
const PropertySheetIconValue icon = qvariant_cast<PropertySheetIconValue>(value);
- const QMap<QPair<QIcon::Mode, QIcon::State>, PropertySheetPixmapValue> pixmaps = icon.paths();
- const QString theme = icon.theme();
+ const auto &pixmaps = icon.paths();
+ const int themeEnum = icon.themeEnum();
+ const QString theme = themeEnum != -1
+ ? QDesignerResourceBuilder::fullyQualifiedThemeIconName(themeEnum) : icon.theme();
if (!pixmaps.isEmpty() || !theme.isEmpty()) {
DomResourceIcon *ri = new DomResourceIcon;
if (!theme.isEmpty())
@@ -343,7 +334,7 @@ inline void translationParametersToDom(const PropertySheetTranslatableData &data
if (!id.isEmpty())
e->setAttributeId(id);
if (!data.translatable())
- e->setAttributeNotr(QStringLiteral("true"));
+ e->setAttributeNotr(u"true"_s);
}
template <class DomElement> // for DomString, potentially DomStringList
@@ -357,7 +348,7 @@ inline void translationParametersFromDom(const DomElement *e, PropertySheetTrans
data->setId(e->attributeId());
if (e->hasAttributeNotr()) {
const QString notr = e->attributeNotr();
- const bool translatable = !(notr == QStringLiteral("true") || notr == QStringLiteral("yes"));
+ const bool translatable = !(notr == "true"_L1 || notr == "yes"_L1);
data->setTranslatable(translatable);
}
}
@@ -439,19 +430,18 @@ QDesignerResource::QDesignerResource(FormWindow *formWindow) :
setTextBuilder(new QDesignerTextBuilder());
// ### generalise
- const QString designerWidget = QStringLiteral("QDesignerWidget");
- const QString layoutWidget = QStringLiteral("QLayoutWidget");
- const QString widget = QStringLiteral("QWidget");
+ const QString designerWidget = u"QDesignerWidget"_s;
+ const QString layoutWidget = u"QLayoutWidget"_s;
+ const QString widget = u"QWidget"_s;
m_internal_to_qt.insert(layoutWidget, widget);
m_internal_to_qt.insert(designerWidget, widget);
- m_internal_to_qt.insert(QStringLiteral("QDesignerDialog"), QStringLiteral("QDialog"));
- m_internal_to_qt.insert(QStringLiteral("QDesignerMenuBar"), QStringLiteral("QMenuBar"));
- m_internal_to_qt.insert(QStringLiteral("QDesignerMenu"), QStringLiteral("QMenu"));
- m_internal_to_qt.insert(QStringLiteral("QDesignerDockWidget"), QStringLiteral("QDockWidget"));
+ m_internal_to_qt.insert(u"QDesignerDialog"_s, u"QDialog"_s);
+ m_internal_to_qt.insert(u"QDesignerMenuBar"_s, u"QMenuBar"_s);
+ m_internal_to_qt.insert(u"QDesignerMenu"_s, u"QMenu"_s);
+ m_internal_to_qt.insert(u"QDesignerDockWidget"_s, u"QDockWidget"_s);
// invert
- QHash<QString, QString>::const_iterator cend = m_internal_to_qt.constEnd();
- for (QHash<QString, QString>::const_iterator it = m_internal_to_qt.constBegin();it != cend; ++it ) {
+ for (auto it = m_internal_to_qt.cbegin(), cend = m_internal_to_qt.cend(); it != cend; ++it ) {
if (it.value() != designerWidget && it.value() != layoutWidget)
m_qt_to_internal.insert(it.value(), it.key());
@@ -467,7 +457,7 @@ DomUI *QDesignerResource::readUi(QIODevice *dev)
static inline QString messageBoxTitle()
{
- return QApplication::translate("Designer", "Qt Designer");
+ return QApplication::translate("Designer", "Qt Widgets Designer");
}
void QDesignerResource::save(QIODevice *dev, QWidget *widget)
@@ -482,7 +472,7 @@ void QDesignerResource::saveDom(DomUI *ui, QWidget *widget)
QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core()->extensionManager(), widget);
Q_ASSERT(sheet != nullptr);
- const QVariant classVar = sheet->property(sheet->indexOf(QStringLiteral("objectName")));
+ const QVariant classVar = sheet->property(sheet->indexOf(u"objectName"_s));
QString classStr;
if (classVar.canConvert<QString>())
classStr = classVar.toString();
@@ -519,8 +509,7 @@ void QDesignerResource::saveDom(DomUI *ui, QWidget *widget)
const QVariantMap designerFormData = m_formWindow->formData();
if (!designerFormData.isEmpty()) {
DomPropertyList domPropertyList;
- const QVariantMap::const_iterator cend = designerFormData.constEnd();
- for (QVariantMap::const_iterator it = designerFormData.constBegin(); it != cend; ++it) {
+ for (auto it = designerFormData.cbegin(), cend = designerFormData.cend(); it != cend; ++it) {
if (DomProperty *prop = variantToDomProperty(this, widget->metaObject(), it.key(), it.value()))
domPropertyList += prop;
}
@@ -532,8 +521,8 @@ void QDesignerResource::saveDom(DomUI *ui, QWidget *widget)
}
if (!m_formWindow->includeHints().isEmpty()) {
- const QString local = QStringLiteral("local");
- const QString global = QStringLiteral("global");
+ const QString local = u"local"_s;
+ const QString global = u"global"_s;
QList<DomInclude *> ui_includes;
const QStringList &includeHints = m_formWindow->includeHints();
ui_includes.reserve(includeHints.size());
@@ -541,10 +530,10 @@ void QDesignerResource::saveDom(DomUI *ui, QWidget *widget)
if (includeHint.isEmpty())
continue;
DomInclude *incl = new DomInclude;
- const QString location = includeHint.at(0) == QLatin1Char('<') ? global : local;
- includeHint.remove(QLatin1Char('"'));
- includeHint.remove(QLatin1Char('<'));
- includeHint.remove(QLatin1Char('>'));
+ const QString location = includeHint.at(0) == u'<' ? global : local;
+ includeHint.remove(u'"');
+ includeHint.remove(u'<');
+ includeHint.remove(u'>');
incl->setAttributeLocation(location);
incl->setText(includeHint);
ui_includes.append(incl);
@@ -665,11 +654,10 @@ QWidget *QDesignerResource::create(DomUI *ui, QWidget *parentWidget)
QVariantMap designerFormData;
if (ui->hasElementDesignerdata()) {
const DomPropertyList domPropertyList = ui->elementDesignerdata()->elementProperty();
- const DomPropertyList::const_iterator cend = domPropertyList.constEnd();
- for (DomPropertyList::const_iterator it = domPropertyList.constBegin(); it != cend; ++it) {
- const QVariant vprop = domPropertyToVariant(this, mainWidget->metaObject(), *it);
- if (vprop.type() != QVariant::Invalid)
- designerFormData.insert((*it)->attributeName(), vprop);
+ for (auto *prop : domPropertyList) {
+ const QVariant vprop = domPropertyToVariant(this, mainWidget->metaObject(), prop);
+ if (vprop.metaType().id() != QMetaType::UnknownType)
+ designerFormData.insert(prop->attributeName(), vprop);
}
}
m_formWindow->setFormData(designerFormData);
@@ -685,7 +673,7 @@ QWidget *QDesignerResource::create(DomUI *ui, QWidget *parentWidget)
}
if (DomIncludes *includes = ui->elementIncludes()) {
- const QString global = QStringLiteral("global");
+ const auto global = "global"_L1;
QStringList includeHints;
const auto &elementInclude = includes->elementInclude();
for (DomInclude *incl : elementInclude) {
@@ -695,9 +683,11 @@ QWidget *QDesignerResource::create(DomUI *ui, QWidget *parentWidget)
continue;
if (incl->hasAttributeLocation() && incl->attributeLocation() == global ) {
- text = text.prepend(QLatin1Char('<')).append(QLatin1Char('>'));
+ text.prepend(u'<');
+ text.append(u'>');
} else {
- text = text.prepend(QLatin1Char('"')).append(QLatin1Char('"'));
+ text.prepend(u'"');
+ text.append(u'"');
}
includeHints.append(text);
@@ -708,13 +698,10 @@ QWidget *QDesignerResource::create(DomUI *ui, QWidget *parentWidget)
// Register all button groups the form builder adds as children of the main container for them to be found
// in the signal slot editor
- const QObjectList mchildren = mainWidget->children();
- if (!mchildren.isEmpty()) {
- QDesignerMetaDataBaseInterface *mdb = core()->metaDataBase();
- const QObjectList::const_iterator cend = mchildren.constEnd();
- for (QObjectList::const_iterator it = mchildren.constBegin(); it != cend; ++it)
- if (QButtonGroup *bg = qobject_cast<QButtonGroup*>(*it))
- mdb->add(bg);
+ auto *mdb = core()->metaDataBase();
+ for (auto *child : mainWidget->children()) {
+ if (QButtonGroup *bg = qobject_cast<QButtonGroup*>(child))
+ mdb->add(bg);
}
// Load tools
for (int index = 0; index < m_formWindow->toolCount(); ++index) {
@@ -742,9 +729,8 @@ QWidget *QDesignerResource::create(DomUI *ui, QWidget *parentWidget)
bool hasExplicitGeometry = false;
const auto &properties = ui->elementWidget()->elementProperty();
if (!properties.isEmpty()) {
- const QString geometry = QStringLiteral("geometry");
for (const DomProperty *p : properties) {
- if (p->attributeName() == geometry) {
+ if (p->attributeName() == "geometry"_L1) {
hasExplicitGeometry = true;
break;
}
@@ -786,7 +772,7 @@ QWidget *QDesignerResource::create(DomUI *ui, QWidget *parentWidget)
QWidget *QDesignerResource::create(DomWidget *ui_widget, QWidget *parentWidget)
{
const QString className = ui_widget->attributeClass();
- if (!m_isMainWidget && className == QStringLiteral("QWidget")
+ if (!m_isMainWidget && className == "QWidget"_L1
&& !ui_widget->elementLayout().isEmpty()
&& !ui_widget->hasAttributeNative()) {
// ### check if elementLayout.size() == 1
@@ -795,7 +781,7 @@ QWidget *QDesignerResource::create(DomWidget *ui_widget, QWidget *parentWidget)
if (container == nullptr) {
// generate a QLayoutWidget iff the parent is not an QDesignerContainerExtension.
- ui_widget->setAttributeClass(QStringLiteral("QLayoutWidget"));
+ ui_widget->setAttributeClass(u"QLayoutWidget"_s);
}
}
@@ -820,7 +806,7 @@ QWidget *QDesignerResource::create(DomWidget *ui_widget, QWidget *parentWidget)
for (DomActionRef *ui_action_ref : actionRefs) {
const QString name = ui_action_ref->attributeName();
- if (name == QStringLiteral("separator")) {
+ if (name == "separator"_L1) {
QAction *sep = new QAction(w);
sep->setSeparator(true);
w->addAction(sep);
@@ -866,7 +852,7 @@ QLayoutItem *QDesignerResource::create(DomLayoutItem *ui_layoutItem, QLayout *la
{
if (ui_layoutItem->kind() == DomLayoutItem::Spacer) {
const DomSpacer *domSpacer = ui_layoutItem->elementSpacer();
- Spacer *spacer = static_cast<Spacer*>(core()->widgetFactory()->createWidget(QStringLiteral("Spacer"), parentWidget));
+ Spacer *spacer = static_cast<Spacer*>(core()->widgetFactory()->createWidget(u"Spacer"_s, parentWidget));
if (domSpacer->hasAttributeName())
changeObjectName(spacer, domSpacer->attributeName());
core()->metaDataBase()->add(spacer);
@@ -878,7 +864,7 @@ QLayoutItem *QDesignerResource::create(DomLayoutItem *ui_layoutItem, QLayout *la
if (m_formWindow) {
m_formWindow->manageWidget(spacer);
if (QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core()->extensionManager(), spacer))
- sheet->setChanged(sheet->indexOf(QStringLiteral("orientation")), true);
+ sheet->setChanged(sheet->indexOf(u"orientation"_s), true);
}
return new QWidgetItem(spacer);
@@ -940,6 +926,29 @@ static bool readDomEnumerationValue(const DomProperty *p,
return false;
}
+// ### fixme Qt 7 remove this: Exclude deprecated properties of Qt 5.
+static bool isDeprecatedQt5Property(const QObject *o, const DomProperty *p)
+{
+ const QString &propertyName = p->attributeName();
+ switch (p->kind()) {
+ case DomProperty::Set:
+ if (propertyName == u"features" && o->inherits("QDockWidget")
+ && p->elementSet() == u"QDockWidget::AllDockWidgetFeatures") {
+ return true;
+ }
+ break;
+ case DomProperty::Enum:
+ if (propertyName == u"sizeAdjustPolicy" && o->inherits("QComboBox")
+ && p->elementEnum() == u"QComboBox::AdjustToMinimumContentsLength") {
+ return true;
+ }
+ break;
+ default:
+ break;
+ }
+ return false;
+}
+
void QDesignerResource::applyProperties(QObject *o, const QList<DomProperty*> &properties)
{
if (properties.isEmpty())
@@ -952,11 +961,12 @@ void QDesignerResource::applyProperties(QObject *o, const QList<DomProperty*> &p
QDesignerDynamicPropertySheetExtension *dynamicSheet = qt_extension<QDesignerDynamicPropertySheetExtension*>(core()->extensionManager(), o);
const bool dynamicPropertiesAllowed = dynamicSheet && dynamicSheet->dynamicPropertiesAllowed();
- const QString objectNameProperty = QStringLiteral("objectName");
for (DomProperty *p : properties) {
+ if (isDeprecatedQt5Property(o, p)) // ### fixme Qt 7 remove this
+ continue; // ### fixme Qt 7 remove this: Exclude deprecated value of Qt 5.
QString propertyName = p->attributeName();
- if (propertyName == QLatin1String("numDigits") && o->inherits("QLCDNumber")) // Deprecated in Qt 4, removed in Qt 5.
- propertyName = QLatin1String("digitCount");
+ if (propertyName == "numDigits"_L1 && o->inherits("QLCDNumber")) // Deprecated in Qt 4, removed in Qt 5.
+ propertyName = u"digitCount"_s;
const int index = sheet->indexOf(propertyName);
QVariant v;
if (!readDomEnumerationValue(p, sheet, index, v))
@@ -992,25 +1002,25 @@ void QDesignerResource::applyProperties(QObject *o, const QList<DomProperty*> &p
sheet->setProperty(index, v);
sheet->setChanged(index, true);
} else if (dynamicPropertiesAllowed) {
- QVariant defaultValue = QVariant(v.type());
+ QVariant defaultValue = QVariant(v.metaType());
bool isDefault = (v == defaultValue);
if (v.canConvert<PropertySheetIconValue>()) {
- defaultValue = QVariant(QVariant::Icon);
+ defaultValue = QVariant(QMetaType(QMetaType::QIcon));
isDefault = (qvariant_cast<PropertySheetIconValue>(v) == PropertySheetIconValue());
} else if (v.canConvert<PropertySheetPixmapValue>()) {
- defaultValue = QVariant(QVariant::Pixmap);
+ defaultValue = QVariant(QMetaType(QMetaType::QPixmap));
isDefault = (qvariant_cast<PropertySheetPixmapValue>(v) == PropertySheetPixmapValue());
} else if (v.canConvert<PropertySheetStringValue>()) {
- defaultValue = QVariant(QVariant::String);
+ defaultValue = QVariant(QMetaType(QMetaType::QString));
isDefault = (qvariant_cast<PropertySheetStringValue>(v) == PropertySheetStringValue());
} else if (v.canConvert<PropertySheetStringListValue>()) {
- defaultValue = QVariant(QVariant::StringList);
+ defaultValue = QVariant(QMetaType(QMetaType::QStringList));
isDefault = (qvariant_cast<PropertySheetStringListValue>(v) == PropertySheetStringListValue());
} else if (v.canConvert<PropertySheetKeySequenceValue>()) {
- defaultValue = QVariant(QVariant::KeySequence);
+ defaultValue = QVariant(QMetaType(QMetaType::QKeySequence));
isDefault = (qvariant_cast<PropertySheetKeySequenceValue>(v) == PropertySheetKeySequenceValue());
}
- if (defaultValue.type() != QVariant::UserType) {
+ if (defaultValue.metaType().id() != QMetaType::User) {
const int idx = dynamicSheet->addDynamicProperty(p->attributeName(), defaultValue);
if (idx != -1) {
sheet->setProperty(idx, v);
@@ -1019,7 +1029,7 @@ void QDesignerResource::applyProperties(QObject *o, const QList<DomProperty*> &p
}
}
- if (propertyName == objectNameProperty)
+ if (propertyName == "objectName"_L1)
changeObjectName(o, o->objectName());
}
}
@@ -1136,25 +1146,21 @@ DomWidget *QDesignerResource::createDom(QWidget *widget, DomWidget *ui_parentWid
Q_ASSERT( w != nullptr );
- if (!qobject_cast<QLayoutWidget*>(widget) && w->attributeClass() == QStringLiteral("QWidget")) {
+ if (!qobject_cast<QLayoutWidget*>(widget) && w->attributeClass() == "QWidget"_L1)
w->setAttributeNative(true);
- }
const QString className = w->attributeClass();
if (m_internal_to_qt.contains(className))
w->setAttributeClass(m_internal_to_qt.value(className));
- w->setAttributeName(widget->objectName());
-
if (isPromoted( core(), widget)) { // is promoted?
Q_ASSERT(widgetInfo != nullptr);
- w->setAttributeName(widget->objectName());
w->setAttributeClass(widgetInfo->name());
const auto &prop_list = w->elementProperty();
for (DomProperty *prop : prop_list) {
- if (prop->attributeName() == QStringLiteral("geometry")) {
+ if (prop->attributeName() == "geometry"_L1) {
if (DomRect *rect = prop->elementRect()) {
rect->setElementX(widget->x());
rect->setElementY(widget->y());
@@ -1251,7 +1257,7 @@ DomTabStops *QDesignerResource::saveTabStops()
tabStops.append(widget->objectName());
}
- if (tabStops.count()) {
+ if (!tabStops.isEmpty()) {
DomTabStops *dom = new DomTabStops;
dom->setElementTabStop(tabStops);
return dom;
@@ -1262,7 +1268,7 @@ DomTabStops *QDesignerResource::saveTabStops()
void QDesignerResource::applyTabStops(QWidget *widget, DomTabStops *tabStops)
{
- if (!tabStops)
+ if (tabStops == nullptr || widget == nullptr)
return;
QWidgetList tabOrder;
@@ -1344,13 +1350,13 @@ DomWidget *QDesignerResource::saveWidget(QToolBar *toolBar, DomWidget *ui_parent
auto attributes = ui_widget->elementAttribute();
DomProperty *attr = new DomProperty();
- attr->setAttributeName(QStringLiteral("toolBarArea"));
- attr->setElementEnum(QLatin1String(toolBarAreaMetaEnum().valueToKey(area)));
+ attr->setAttributeName(u"toolBarArea"_s);
+ attr->setElementEnum(QLatin1StringView(toolBarAreaMetaEnum().valueToKey(area)));
attributes << attr;
attr = new DomProperty();
- attr->setAttributeName(QStringLiteral("toolBarBreak"));
- attr->setElementBool(toolBarBreak ? QLatin1String("true") : QLatin1String("false"));
+ attr->setAttributeName(u"toolBarBreak"_s);
+ attr->setElementBool(toolBarBreak ? u"true"_s : u"false"_s);
attributes << attr;
ui_widget->setElementAttribute(attributes);
}
@@ -1364,7 +1370,7 @@ DomWidget *QDesignerResource::saveWidget(QDesignerDockWidget *dockWidget, DomWid
if (QMainWindow *mainWindow = qobject_cast<QMainWindow*>(dockWidget->parentWidget())) {
const Qt::DockWidgetArea area = mainWindow->dockWidgetArea(dockWidget);
DomProperty *attr = new DomProperty();
- attr->setAttributeName(QStringLiteral("dockWidgetArea"));
+ attr->setAttributeName(u"dockWidgetArea"_s);
attr->setElementNumber(int(area));
ui_widget->setElementAttribute(ui_widget->elementAttribute() << attr);
}
@@ -1390,39 +1396,38 @@ DomWidget *QDesignerResource::saveWidget(QTabWidget *widget, DomWidget *ui_paren
}
QList<DomProperty*> ui_attribute_list;
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
// attribute `icon'
widget->setCurrentIndex(i);
QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core()->extensionManager(), widget);
- PropertySheetIconValue icon = qvariant_cast<PropertySheetIconValue>(sheet->property(sheet->indexOf(QStringLiteral("currentTabIcon"))));
+ PropertySheetIconValue icon = qvariant_cast<PropertySheetIconValue>(sheet->property(sheet->indexOf(u"currentTabIcon"_s)));
DomProperty *p = resourceBuilder()->saveResource(workingDirectory(), QVariant::fromValue(icon));
if (p) {
- p->setAttributeName(strings.iconAttribute);
+ p->setAttributeName(QFormBuilderStrings::iconAttribute);
ui_attribute_list.append(p);
}
// attribute `title'
- p = textBuilder()->saveText(sheet->property(sheet->indexOf(QStringLiteral("currentTabText"))));
+ p = textBuilder()->saveText(sheet->property(sheet->indexOf(u"currentTabText"_s)));
if (p) {
- p->setAttributeName(strings.titleAttribute);
+ p->setAttributeName(QFormBuilderStrings::titleAttribute);
ui_attribute_list.append(p);
}
// attribute `toolTip'
- QVariant v = sheet->property(sheet->indexOf(QStringLiteral("currentTabToolTip")));
+ QVariant v = sheet->property(sheet->indexOf(u"currentTabToolTip"_s));
if (!qvariant_cast<PropertySheetStringValue>(v).value().isEmpty()) {
p = textBuilder()->saveText(v);
if (p) {
- p->setAttributeName(strings.toolTipAttribute);
+ p->setAttributeName(QFormBuilderStrings::toolTipAttribute);
ui_attribute_list.append(p);
}
}
// attribute `whatsThis'
- v = sheet->property(sheet->indexOf(QStringLiteral("currentTabWhatsThis")));
+ v = sheet->property(sheet->indexOf(u"currentTabWhatsThis"_s));
if (!qvariant_cast<PropertySheetStringValue>(v).value().isEmpty()) {
p = textBuilder()->saveText(v);
if (p) {
- p->setAttributeName(strings.whatsThisAttribute);
+ p->setAttributeName(QFormBuilderStrings::whatsThisAttribute);
ui_attribute_list.append(p);
}
}
@@ -1459,29 +1464,27 @@ DomWidget *QDesignerResource::saveWidget(QToolBox *widget, DomWidget *ui_parentW
// attribute `label'
QList<DomProperty*> ui_attribute_list;
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
-
// attribute `icon'
widget->setCurrentIndex(i);
QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core()->extensionManager(), widget);
- PropertySheetIconValue icon = qvariant_cast<PropertySheetIconValue>(sheet->property(sheet->indexOf(QStringLiteral("currentItemIcon"))));
+ PropertySheetIconValue icon = qvariant_cast<PropertySheetIconValue>(sheet->property(sheet->indexOf(u"currentItemIcon"_s)));
DomProperty *p = resourceBuilder()->saveResource(workingDirectory(), QVariant::fromValue(icon));
if (p) {
- p->setAttributeName(strings.iconAttribute);
+ p->setAttributeName(QFormBuilderStrings::iconAttribute);
ui_attribute_list.append(p);
}
- p = textBuilder()->saveText(sheet->property(sheet->indexOf(QStringLiteral("currentItemText"))));
+ p = textBuilder()->saveText(sheet->property(sheet->indexOf(u"currentItemText"_s)));
if (p) {
- p->setAttributeName(strings.labelAttribute);
+ p->setAttributeName(QFormBuilderStrings::labelAttribute);
ui_attribute_list.append(p);
}
// attribute `toolTip'
- QVariant v = sheet->property(sheet->indexOf(QStringLiteral("currentItemToolTip")));
+ QVariant v = sheet->property(sheet->indexOf(u"currentItemToolTip"_s));
if (!qvariant_cast<PropertySheetStringValue>(v).value().isEmpty()) {
p = textBuilder()->saveText(v);
if (p) {
- p->setAttributeName(strings.toolTipAttribute);
+ p->setAttributeName(QFormBuilderStrings::toolTipAttribute);
ui_attribute_list.append(p);
}
}
@@ -1503,12 +1506,12 @@ DomWidget *QDesignerResource::saveWidget(QWizardPage *wizardPage, DomWidget *ui_
DomWidget *ui_widget = QAbstractFormBuilder::createDom(wizardPage, ui_parentWidget, true);
QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core()->extensionManager(), wizardPage);
// Save the page id (string) attribute, append to existing attributes
- const QString pageIdPropertyName = QLatin1String(QWizardPagePropertySheet::pageIdProperty);
+ const QString pageIdPropertyName = QLatin1StringView(QWizardPagePropertySheet::pageIdProperty);
const int pageIdIndex = sheet->indexOf(pageIdPropertyName);
if (pageIdIndex != -1 && sheet->isChanged(pageIdIndex)) {
DomProperty *property = variantToDomProperty(this, wizardPage->metaObject(), pageIdPropertyName, sheet->property(pageIdIndex));
Q_ASSERT(property);
- property->elementString()->setAttributeNotr(QStringLiteral("true"));
+ property->elementString()->setAttributeNotr(u"true"_s);
DomPropertyList attributes = ui_widget->elementAttribute();
attributes.push_back(property);
ui_widget->setElementAttribute(attributes);
@@ -1538,14 +1541,14 @@ bool QDesignerResource::checkProperty(QObject *obj, const QString &prop) const
if (pindex != -1 && !meta->property(pindex)->attributes().testFlag(QDesignerMetaPropertyInterface::StoredAttribute))
return false;
- if (prop == QStringLiteral("objectName") || prop == QStringLiteral("spacerName")) // ### don't store the property objectName
+ if (prop == "objectName"_L1 || prop == "spacerName"_L1) // ### don't store the property objectName
return false;
QWidget *check_widget = nullptr;
if (obj->isWidgetType())
check_widget = static_cast<QWidget*>(obj);
- if (check_widget && prop == QStringLiteral("geometry")) {
+ if (check_widget && prop == "geometry"_L1) {
if (check_widget == m_formWindow->mainContainer())
return true; // Save although maincontainer is technically laid-out by embedding container
if (m_selected && m_selected == check_widget)
@@ -1611,25 +1614,23 @@ bool QDesignerResource::addItem(DomWidget *ui_widget, QWidget *widget, QWidget *
tabWidget->setCurrentIndex(tabIndex);
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
-
- const DomPropertyHash attributes = propertyMap(ui_widget->elementAttribute());
+ const auto &attributes = ui_widget->elementAttribute();
QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core()->extensionManager(), parentWidget);
- if (DomProperty *picon = attributes.value(strings.iconAttribute)) {
+ if (auto *picon = QFBE::propertyByName(attributes, QFormBuilderStrings::iconAttribute)) {
QVariant v = resourceBuilder()->loadResource(workingDirectory(), picon);
- sheet->setProperty(sheet->indexOf(QStringLiteral("currentTabIcon")), v);
+ sheet->setProperty(sheet->indexOf(u"currentTabIcon"_s), v);
}
- if (DomProperty *ptext = attributes.value(strings.titleAttribute)) {
+ if (auto *ptext = QFBE::propertyByName(attributes, QFormBuilderStrings::titleAttribute)) {
QVariant v = textBuilder()->loadText(ptext);
- sheet->setProperty(sheet->indexOf(QStringLiteral("currentTabText")), v);
+ sheet->setProperty(sheet->indexOf(u"currentTabText"_s), v);
}
- if (DomProperty *ptext = attributes.value(strings.toolTipAttribute)) {
+ if (auto *ptext = QFBE::propertyByName(attributes, QFormBuilderStrings::toolTipAttribute)) {
QVariant v = textBuilder()->loadText(ptext);
- sheet->setProperty(sheet->indexOf(QStringLiteral("currentTabToolTip")), v);
+ sheet->setProperty(sheet->indexOf(u"currentTabToolTip"_s), v);
}
- if (DomProperty *ptext = attributes.value(strings.whatsThisAttribute)) {
+ if (auto *ptext = QFBE::propertyByName(attributes, QFormBuilderStrings::whatsThisAttribute)) {
QVariant v = textBuilder()->loadText(ptext);
- sheet->setProperty(sheet->indexOf(QStringLiteral("currentTabWhatsThis")), v);
+ sheet->setProperty(sheet->indexOf(u"currentTabWhatsThis"_s), v);
}
tabWidget->setCurrentIndex(current);
} else if (QToolBox *toolBox = qobject_cast<QToolBox*>(parentWidget)) {
@@ -1638,21 +1639,19 @@ bool QDesignerResource::addItem(DomWidget *ui_widget, QWidget *widget, QWidget *
toolBox->setCurrentIndex(itemIndex);
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
-
- const DomPropertyHash attributes = propertyMap(ui_widget->elementAttribute());
+ const auto &attributes = ui_widget->elementAttribute();
QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core()->extensionManager(), parentWidget);
- if (DomProperty *picon = attributes.value(strings.iconAttribute)) {
+ if (auto *picon = QFBE::propertyByName(attributes, QFormBuilderStrings::iconAttribute)) {
QVariant v = resourceBuilder()->loadResource(workingDirectory(), picon);
- sheet->setProperty(sheet->indexOf(QStringLiteral("currentItemIcon")), v);
+ sheet->setProperty(sheet->indexOf(u"currentItemIcon"_s), v);
}
- if (DomProperty *ptext = attributes.value(strings.labelAttribute)) {
+ if (auto *ptext = QFBE::propertyByName(attributes, QFormBuilderStrings::labelAttribute)) {
QVariant v = textBuilder()->loadText(ptext);
- sheet->setProperty(sheet->indexOf(QStringLiteral("currentItemText")), v);
+ sheet->setProperty(sheet->indexOf(u"currentItemText"_s), v);
}
- if (DomProperty *ptext = attributes.value(strings.toolTipAttribute)) {
+ if (auto *ptext = QFBE::propertyByName(attributes, QFormBuilderStrings::toolTipAttribute)) {
QVariant v = textBuilder()->loadText(ptext);
- sheet->setProperty(sheet->indexOf(QStringLiteral("currentItemToolTip")), v);
+ sheet->setProperty(sheet->indexOf(u"currentItemToolTip"_s), v);
}
toolBox->setCurrentIndex(current);
}
@@ -1690,14 +1689,12 @@ DomUI *QDesignerResource::copy(const FormBuilderClipboard &selection)
m_copyWidget = true;
DomWidget *ui_widget = new DomWidget();
- ui_widget->setAttributeName(QLatin1String(clipboardObjectName));
+ ui_widget->setAttributeName(clipboardObjectName);
bool hasItems = false;
// Widgets
if (!selection.m_widgets.isEmpty()) {
QList<DomWidget *> ui_widget_list;
- const int size = selection.m_widgets.size();
- for (int i=0; i< size; ++i) {
- QWidget *w = selection.m_widgets.at(i);
+ for (auto *w : selection.m_widgets) {
m_selected = w;
DomWidget *ui_child = createDom(w, ui_widget);
m_selected = nullptr;
@@ -1712,7 +1709,7 @@ DomUI *QDesignerResource::copy(const FormBuilderClipboard &selection)
// actions
if (!selection.m_actions.isEmpty()) {
QList<DomAction *> domActions;
- for (QAction* action : qAsConst(selection.m_actions)) {
+ for (QAction* action : std::as_const(selection.m_actions)) {
if (DomAction *domAction = createDom(action))
domActions += domAction;
}
@@ -1731,7 +1728,7 @@ DomUI *QDesignerResource::copy(const FormBuilderClipboard &selection)
}
// UI
DomUI *ui = new DomUI();
- ui->setAttributeVersion(QLatin1String(currentUiVersion));
+ ui->setAttributeVersion(currentUiVersion);
ui->setElementWidget(ui_widget);
ui->setElementResources(saveResources(m_resourceBuilder->usedQrcFiles()));
if (DomCustomWidgets *cws = saveCustomWidgets())
@@ -1783,10 +1780,9 @@ FormBuilderClipboard QDesignerResource::paste(QIODevice *dev, QWidget *widgetPar
QXmlStreamReader reader(dev);
bool uiInitialized = false;
- const QString uiElement = QStringLiteral("ui");
while (!reader.atEnd()) {
if (reader.readNext() == QXmlStreamReader::StartElement) {
- if (reader.name().compare(uiElement, Qt::CaseInsensitive)) {
+ if (reader.name().compare("ui"_L1, Qt::CaseInsensitive)) {
ui.read(reader);
uiInitialized = true;
} else {
@@ -1829,10 +1825,7 @@ DomCustomWidgets *QDesignerResource::saveCustomWidgets()
QDesignerFormEditorInterface *core = m_formWindow->core();
QDesignerWidgetDataBaseInterface *db = core->widgetDataBase();
const bool isInternalWidgetDataBase = qobject_cast<const WidgetDataBase *>(db);
- typedef QMap<int,DomCustomWidget*> OrderedDBIndexDomCustomWidgetMap;
- OrderedDBIndexDomCustomWidgetMap orderedMap;
-
- const QString global = QStringLiteral("global");
+ QMap<int, DomCustomWidget *> orderedMap;
for (auto it = m_usedCustomWidgets.cbegin(), end = m_usedCustomWidgets.cend(); it != end; ++it) {
QDesignerWidgetDataBaseItemInterface *item = it.key();
@@ -1848,7 +1841,7 @@ DomCustomWidgets *QDesignerResource::saveCustomWidgets()
const IncludeSpecification spec = includeSpecification(item->includeFile());
header->setText(spec.first);
if (spec.second == IncludeGlobal) {
- header->setAttributeLocation(global);
+ header->setAttributeLocation(u"global"_s);
}
custom_widget->setElementHeader(header);
custom_widget->setElementExtends(item->extends());
@@ -1881,8 +1874,8 @@ bool QDesignerResource::canCompressSpacings(QObject *object) const
{
if (QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core()->extensionManager(), object)) {
if (qobject_cast<QGridLayout *>(object)) {
- const int h = sheet->property(sheet->indexOf(QStringLiteral("horizontalSpacing"))).toInt();
- const int v = sheet->property(sheet->indexOf(QStringLiteral("verticalSpacing"))).toInt();
+ const int h = sheet->property(sheet->indexOf(u"horizontalSpacing"_s)).toInt();
+ const int v = sheet->property(sheet->indexOf(u"verticalSpacing"_s)).toInt();
if (h == v)
return true;
}
@@ -1904,13 +1897,13 @@ QList<DomProperty*> QDesignerResource::computeProperties(QObject *object)
const QString propertyName = sheet->propertyName(index);
// Suppress windowModality in legacy forms that have it set on child widgets
- if (propertyName == QStringLiteral("windowModality") && !sheet->isVisible(index))
+ if (propertyName == "windowModality"_L1 && !sheet->isVisible(index))
continue;
const QVariant value = sheet->property(index);
if (DomProperty *p = createProperty(object, propertyName, value)) {
- if (compressSpacings && (propertyName == QStringLiteral("horizontalSpacing")
- || propertyName == QStringLiteral("verticalSpacing"))) {
+ if (compressSpacings && (propertyName == "horizontalSpacing"_L1
+ || propertyName == "verticalSpacing"_L1)) {
spacingProperties.append(p);
} else {
properties.append(p);
@@ -1918,9 +1911,9 @@ QList<DomProperty*> QDesignerResource::computeProperties(QObject *object)
}
}
if (compressSpacings) {
- if (spacingProperties.count() == 2) {
+ if (spacingProperties.size() == 2) {
DomProperty *spacingProperty = spacingProperties.at(0);
- spacingProperty->setAttributeName(QStringLiteral("spacing"));
+ spacingProperty->setAttributeName(u"spacing"_s);
properties.append(spacingProperty);
delete spacingProperties.at(1);
} else {
@@ -2125,7 +2118,8 @@ DomResources *QDesignerResource::saveResources(const QStringList &qrcPaths)
QString conv_path = path;
if (m_resourceBuilder->isSaveRelative())
conv_path = m_formWindow->absoluteDir().relativeFilePath(path);
- dom_res->setAttributeLocation(conv_path.replace(QDir::separator(), QLatin1Char('/')));
+ conv_path.replace(QDir::separator(), u'/');
+ dom_res->setAttributeLocation(conv_path);
dom_include.append(dom_res);
}
}
@@ -2216,15 +2210,14 @@ void QDesignerResource::applyAttributesToPropertySheet(const DomWidget *ui_widge
if (attributes.isEmpty())
return;
QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(m_formWindow->core()->extensionManager(), widget);
- const DomPropertyList::const_iterator acend = attributes.constEnd();
- for (DomPropertyList::const_iterator it = attributes.constBegin(); it != acend; ++it) {
- const QString name = (*it)->attributeName();
+ for (auto *prop : attributes) {
+ const QString name = prop->attributeName();
const int index = sheet->indexOf(name);
if (index == -1) {
- const QString msg = QString::fromUtf8("Unable to apply attributive property '%1' to '%2'. It does not exist.").arg(name, widget->objectName());
+ const QString msg = "Unable to apply attributive property '%1' to '%2'. It does not exist."_L1.arg(name, widget->objectName());
designerWarning(msg);
} else {
- sheet->setProperty(index, domPropertyToVariant(this, widget->metaObject(), *it));
+ sheet->setProperty(index, domPropertyToVariant(this, widget->metaObject(), prop));
sheet->setChanged(index, true);
}
}
diff --git a/src/designer/src/components/formeditor/qdesigner_resource.h b/src/designer/src/components/formeditor/qdesigner_resource.h
index d667f1372..7466744ca 100644
--- a/src/designer/src/components/formeditor/qdesigner_resource.h
+++ b/src/designer/src/components/formeditor/qdesigner_resource.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QDESIGNER_RESOURCE_H
#define QDESIGNER_RESOURCE_H
diff --git a/src/designer/src/components/formeditor/qlayoutwidget_propertysheet.cpp b/src/designer/src/components/formeditor/qlayoutwidget_propertysheet.cpp
index 517bec0cf..78fc443a2 100644
--- a/src/designer/src/components/formeditor/qlayoutwidget_propertysheet.cpp
+++ b/src/designer/src/components/formeditor/qlayoutwidget_propertysheet.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qlayoutwidget_propertysheet.h"
#include "qlayout_widget_p.h"
@@ -37,7 +12,9 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+using namespace Qt::StringLiterals;
+
+namespace qdesigner_internal {
QLayoutWidgetPropertySheet::QLayoutWidgetPropertySheet(QLayoutWidget *object, QObject *parent)
: QDesignerPropertySheet(object, parent)
@@ -49,8 +26,7 @@ QLayoutWidgetPropertySheet::~QLayoutWidgetPropertySheet() = default;
bool QLayoutWidgetPropertySheet::isVisible(int index) const
{
- static const QString layoutPropertyGroup = QStringLiteral("Layout");
- if (propertyGroup(index) == layoutPropertyGroup)
+ if (propertyGroup(index) == "Layout"_L1)
return QDesignerPropertySheet::isVisible(index);
return false;
}
@@ -65,4 +41,6 @@ bool QLayoutWidgetPropertySheet::dynamicPropertiesAllowed() const
return false;
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/formeditor/qlayoutwidget_propertysheet.h b/src/designer/src/components/formeditor/qlayoutwidget_propertysheet.h
index f0a66787e..b01a9b148 100644
--- a/src/designer/src/components/formeditor/qlayoutwidget_propertysheet.h
+++ b/src/designer/src/components/formeditor/qlayoutwidget_propertysheet.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QLAYOUTWIDGET_PROPERTYSHEET_H
#define QLAYOUTWIDGET_PROPERTYSHEET_H
diff --git a/src/designer/src/components/formeditor/qmainwindow_container.cpp b/src/designer/src/components/formeditor/qmainwindow_container.cpp
index 180c38e79..d4c85bc75 100644
--- a/src/designer/src/components/formeditor/qmainwindow_container.cpp
+++ b/src/designer/src/components/formeditor/qmainwindow_container.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qmainwindow_container.h"
#include "qdesigner_toolbar_p.h"
@@ -40,7 +15,7 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+namespace qdesigner_internal {
QMainWindowContainer::QMainWindowContainer(QMainWindow *widget, QObject *parent)
: QObject(parent),
@@ -50,20 +25,19 @@ QMainWindowContainer::QMainWindowContainer(QMainWindow *widget, QObject *parent)
int QMainWindowContainer::count() const
{
- return m_widgets.count();
+ return m_widgets.size();
}
QWidget *QMainWindowContainer::widget(int index) const
{
- if (index == -1)
- return nullptr;
-
- return m_widgets.at(index);
+ return m_widgets.value(index, nullptr);
}
int QMainWindowContainer::currentIndex() const
{
- return m_mainWindow->centralWidget() ? 0 : -1;
+ // QTBUG-111603, handle plugins with unmanaged central widgets
+ auto *cw = m_mainWindow->centralWidget();
+ return cw != nullptr && m_widgets.contains(cw) ? 0 : -1;
}
void QMainWindowContainer::setCurrentIndex(int index)
@@ -74,7 +48,7 @@ void QMainWindowContainer::setCurrentIndex(int index)
namespace {
// Pair of <area,break_before>
- using ToolBarData = QPair<Qt::ToolBarArea,bool> ;
+ using ToolBarData = std::pair<Qt::ToolBarArea, bool>;
ToolBarData toolBarData(QToolBar *me) {
const QMainWindow *mw = qobject_cast<const QMainWindow*>(me->parentWidget());
@@ -97,7 +71,7 @@ Qt::DockWidgetArea dockWidgetArea(QDockWidget *me)
candidates.append(mw->layout());
candidates += mw->layout()->findChildren<QLayout*>();
}
- for (QLayout *l : qAsConst(candidates)) {
+ for (QLayout *l : std::as_const(candidates)) {
if (l->indexOf(me) != -1)
return mw->dockWidgetArea(me);
}
@@ -106,6 +80,10 @@ Qt::DockWidgetArea dockWidgetArea(QDockWidget *me)
}
}
+// In QMainWindowContainer::remove(), remember the dock area in a dynamic
+// property so that it can used in addWidget() if that is called by undo().
+static const char dockAreaPropertyName[] = "_q_dockArea";
+
void QMainWindowContainer::addWidget(QWidget *widget)
{
// remove all the occurrences of widget
@@ -138,7 +116,17 @@ void QMainWindowContainer::addWidget(QWidget *widget)
else if (QDockWidget *dockWidget = qobject_cast<QDockWidget*>(widget)) {
m_widgets.append(widget);
- m_mainWindow->addDockWidget(dockWidgetArea(dockWidget), dockWidget);
+
+ Qt::DockWidgetArea area = Qt::LeftDockWidgetArea;
+ const auto areaProperty = widget->property(dockAreaPropertyName);
+ if (areaProperty.canConvert<Qt::DockWidgetArea>()) {
+ area = areaProperty.value<Qt::DockWidgetArea>();
+ widget->setProperty(dockAreaPropertyName, {});
+ } else {
+ area = dockWidgetArea(dockWidget);
+ }
+
+ m_mainWindow->addDockWidget(area, dockWidget);
dockWidget->show();
if (FormWindow *fw = FormWindow::findFormWindow(m_mainWindow)) {
@@ -181,9 +169,13 @@ void QMainWindowContainer::remove(int index)
statusBar->setParent(nullptr);
m_mainWindow->setStatusBar(nullptr);
} else if (QDockWidget *dockWidget = qobject_cast<QDockWidget*>(widget)) {
+ const auto area = m_mainWindow->dockWidgetArea(dockWidget);
+ dockWidget->setProperty(dockAreaPropertyName, QVariant::fromValue(area));
m_mainWindow->removeDockWidget(dockWidget);
}
m_widgets.removeAt(index);
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/formeditor/qmainwindow_container.h b/src/designer/src/components/formeditor/qmainwindow_container.h
index bdd0a3a87..4473cab8f 100644
--- a/src/designer/src/components/formeditor/qmainwindow_container.h
+++ b/src/designer/src/components/formeditor/qmainwindow_container.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QMAINWINDOW_CONTAINER_H
#define QMAINWINDOW_CONTAINER_H
diff --git a/src/designer/src/components/formeditor/qmdiarea_container.cpp b/src/designer/src/components/formeditor/qmdiarea_container.cpp
index 03fe667a3..137bd9618 100644
--- a/src/designer/src/components/formeditor/qmdiarea_container.cpp
+++ b/src/designer/src/components/formeditor/qmdiarea_container.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qmdiarea_container.h"
@@ -39,6 +14,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
QMdiAreaContainer::QMdiAreaContainer(QMdiArea *widget, QObject *parent)
@@ -49,7 +26,7 @@ QMdiAreaContainer::QMdiAreaContainer(QMdiArea *widget, QObject *parent)
int QMdiAreaContainer::count() const
{
- return m_mdiArea->subWindowList(QMdiArea::CreationOrder).count();
+ return m_mdiArea->subWindowList(QMdiArea::CreationOrder).size();
}
QWidget *QMdiAreaContainer::widget(int index) const
@@ -129,26 +106,24 @@ void QMdiAreaContainer::remove(int index)
// 1) window name (object name of child)
// 2) title (windowTitle of child).
-static const char *subWindowTitleC = "activeSubWindowTitle";
-static const char *subWindowNameC = "activeSubWindowName";
+static constexpr auto subWindowTitleC = "activeSubWindowTitle"_L1;
+static constexpr auto subWindowNameC = "activeSubWindowName"_L1;
QMdiAreaPropertySheet::QMdiAreaPropertySheet(QWidget *mdiArea, QObject *parent) :
QDesignerPropertySheet(mdiArea, parent),
- m_windowTitleProperty(QStringLiteral("windowTitle"))
+ m_windowTitleProperty(u"windowTitle"_s)
{
- createFakeProperty(QLatin1String(subWindowNameC), QString());
- createFakeProperty(QLatin1String(subWindowTitleC), QString());
+ createFakeProperty(subWindowNameC, QString());
+ createFakeProperty(subWindowTitleC, QString());
}
QMdiAreaPropertySheet::MdiAreaProperty QMdiAreaPropertySheet::mdiAreaProperty(const QString &name)
{
- using MdiAreaPropertyHash = QHash<QString, MdiAreaProperty>;
- static MdiAreaPropertyHash mdiAreaPropertyHash;
- if (mdiAreaPropertyHash.isEmpty()) {
- mdiAreaPropertyHash.insert(QLatin1String(subWindowNameC), MdiAreaSubWindowName);
- mdiAreaPropertyHash.insert(QLatin1String(subWindowTitleC), MdiAreaSubWindowTitle);
- }
- return mdiAreaPropertyHash.value(name,MdiAreaNone);
+ static const QHash<QString, MdiAreaProperty> mdiAreaPropertyHash = {
+ {subWindowNameC, MdiAreaSubWindowName},
+ {subWindowTitleC, MdiAreaSubWindowTitle}
+ };
+ return mdiAreaPropertyHash.value(name, MdiAreaNone);
}
void QMdiAreaPropertySheet::setProperty(int index, const QVariant &value)
diff --git a/src/designer/src/components/formeditor/qmdiarea_container.h b/src/designer/src/components/formeditor/qmdiarea_container.h
index 5134757d7..aebd3f2c3 100644
--- a/src/designer/src/components/formeditor/qmdiarea_container.h
+++ b/src/designer/src/components/formeditor/qmdiarea_container.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QMDIAREA_CONTAINER_H
#define QMDIAREA_CONTAINER_H
diff --git a/src/designer/src/components/formeditor/qwizard_container.cpp b/src/designer/src/components/formeditor/qwizard_container.cpp
index c2b8408d3..99254a4fb 100644
--- a/src/designer/src/components/formeditor/qwizard_container.cpp
+++ b/src/designer/src/components/formeditor/qwizard_container.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qwizard_container.h"
@@ -37,6 +12,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
using WizardPageList = QList<QWizardPage *>;
namespace qdesigner_internal {
@@ -93,7 +70,7 @@ void QWizardContainer::setCurrentIndex(int index)
}
}
-static const char *msgWrongType = "** WARNING Attempt to add oject that is not of class WizardPage to a QWizard";
+static const char msgWrongType[] = "** WARNING Attempt to add oject that is not of class WizardPage to a QWizard";
void QWizardContainer::addWidget(QWidget *widget)
{
@@ -118,7 +95,7 @@ void QWizardContainer::insertWidget(int index, QWidget *widget)
}
const auto idList = m_wizard->pageIds();
- const int pageCount = idList.size();
+ const auto pageCount = idList.size();
if (index >= pageCount) {
addWidget(widget);
return;
@@ -134,12 +111,12 @@ void QWizardContainer::insertWidget(int index, QWidget *widget)
// Create a gap by shuffling pages
WizardPageList pageList;
pageList.push_back(newPage);
- for (int i = index; i < pageCount; i++) {
+ for (qsizetype i = index; i < pageCount; ++i) {
pageList.push_back(m_wizard->page(idList.at(i)));
m_wizard->removePage(idList.at(i));
}
int newId = idBefore + delta;
- for (QWizardPage *page : qAsConst(pageList)) {
+ for (QWizardPage *page : std::as_const(pageList)) {
m_wizard->setPage(newId, page);
newId += delta;
}
@@ -176,7 +153,7 @@ const char *QWizardPagePropertySheet::pageIdProperty = "pageId";
QWizardPagePropertySheet::QWizardPagePropertySheet(QWizardPage *object, QObject *parent) :
QDesignerPropertySheet(object, parent),
- m_pageIdIndex(createFakeProperty(QLatin1String(pageIdProperty), QString()))
+ m_pageIdIndex(createFakeProperty(QLatin1StringView(pageIdProperty), QString()))
{
setAttribute(m_pageIdIndex, true);
}
@@ -193,7 +170,7 @@ bool QWizardPagePropertySheet::reset(int index)
// ---------------- QWizardPropertySheet
QWizardPropertySheet::QWizardPropertySheet(QWizard *object, QObject *parent) :
QDesignerPropertySheet(object, parent),
- m_startId(QStringLiteral("startId"))
+ m_startId(u"startId"_s)
{
}
diff --git a/src/designer/src/components/formeditor/qwizard_container.h b/src/designer/src/components/formeditor/qwizard_container.h
index 23dc63b4f..5c6533f66 100644
--- a/src/designer/src/components/formeditor/qwizard_container.h
+++ b/src/designer/src/components/formeditor/qwizard_container.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QWIZARD_CONTAINER_H
#define QWIZARD_CONTAINER_H
diff --git a/src/designer/src/components/formeditor/spacer_propertysheet.cpp b/src/designer/src/components/formeditor/spacer_propertysheet.cpp
index eed26383a..9c3da1303 100644
--- a/src/designer/src/components/formeditor/spacer_propertysheet.cpp
+++ b/src/designer/src/components/formeditor/spacer_propertysheet.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "spacer_propertysheet.h"
#include "qdesigner_widget_p.h"
@@ -37,6 +12,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal
{
SpacerPropertySheet::SpacerPropertySheet(Spacer *object, QObject *parent)
@@ -49,8 +26,7 @@ SpacerPropertySheet::~SpacerPropertySheet() = default;
bool SpacerPropertySheet::isVisible(int index) const
{
- static const QString spacerGroup = QStringLiteral("Spacer");
- return propertyGroup(index) == spacerGroup;
+ return propertyGroup(index) == "Spacer"_L1;
}
void SpacerPropertySheet::setProperty(int index, const QVariant &value)
diff --git a/src/designer/src/components/formeditor/spacer_propertysheet.h b/src/designer/src/components/formeditor/spacer_propertysheet.h
index a2b00dbdb..c2525d84d 100644
--- a/src/designer/src/components/formeditor/spacer_propertysheet.h
+++ b/src/designer/src/components/formeditor/spacer_propertysheet.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef SPACER_PROPERTYSHEET_H
#define SPACER_PROPERTYSHEET_H
diff --git a/src/designer/src/components/formeditor/templateoptionspage.cpp b/src/designer/src/components/formeditor/templateoptionspage.cpp
index 4e638c913..b54981272 100644
--- a/src/designer/src/components/formeditor/templateoptionspage.cpp
+++ b/src/designer/src/components/formeditor/templateoptionspage.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "templateoptionspage.h"
#include "ui_templateoptionspage.h"
@@ -37,6 +12,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
// ----------------- TemplateOptionsWidget
@@ -48,9 +25,9 @@ TemplateOptionsWidget::TemplateOptionsWidget(QDesignerFormEditorInterface *core,
m_ui->setupUi(this);
m_ui->m_addTemplatePathButton->setIcon(
- qdesigner_internal::createIconSet(QString::fromUtf8("plus.png")));
+ qdesigner_internal::createIconSet("plus.png"_L1));
m_ui->m_removeTemplatePathButton->setIcon(
- qdesigner_internal::createIconSet(QString::fromUtf8("minus.png")));
+ qdesigner_internal::createIconSet("minus.png"_L1));
connect(m_ui->m_templatePathListWidget, &QListWidget::itemSelectionChanged,
this, &TemplateOptionsWidget::templatePathSelectionChanged);
@@ -83,9 +60,8 @@ void TemplateOptionsWidget::setTemplatePaths(const QStringList &l)
// disable button
templatePathSelectionChanged();
} else {
- const QStringList::const_iterator cend = l.constEnd();
- for (QStringList::const_iterator it = l.constBegin(); it != cend; ++it)
- m_ui->m_templatePathListWidget->addItem(*it);
+ for (const auto &s : l)
+ m_ui->m_templatePathListWidget->addItem(s);
m_ui->m_templatePathListWidget->setCurrentItem(m_ui->m_templatePathListWidget->item(0));
}
}
diff --git a/src/designer/src/components/formeditor/templateoptionspage.h b/src/designer/src/components/formeditor/templateoptionspage.h
index 374713fed..9ce8c45cf 100644
--- a/src/designer/src/components/formeditor/templateoptionspage.h
+++ b/src/designer/src/components/formeditor/templateoptionspage.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QDESIGNER_TEMPLATEOPTIONS_H
#define QDESIGNER_TEMPLATEOPTIONS_H
diff --git a/src/designer/src/components/formeditor/tool_widgeteditor.cpp b/src/designer/src/components/formeditor/tool_widgeteditor.cpp
index 8b27d54aa..fd019b75c 100644
--- a/src/designer/src/components/formeditor/tool_widgeteditor.cpp
+++ b/src/designer/src/components/formeditor/tool_widgeteditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "tool_widgeteditor.h"
#include "formwindow.h"
@@ -48,7 +23,7 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+namespace qdesigner_internal {
WidgetEditorTool::WidgetEditorTool(FormWindow *formWindow)
: QDesignerFormWindowToolInterface(formWindow),
@@ -75,6 +50,7 @@ QDesignerFormWindowInterface *WidgetEditorTool::formWindow() const
return m_formWindow;
}
+// separators in QMainWindow are no longer widgets
bool WidgetEditorTool::mainWindowSeparatorEvent(QWidget *widget, QEvent *event)
{
QMainWindow *mw = qobject_cast<QMainWindow*>(widget);
@@ -109,11 +85,14 @@ bool WidgetEditorTool::mainWindowSeparatorEvent(QWidget *widget, QEvent *event)
return false;
}
+bool WidgetEditorTool::isPassiveInteractor(QWidget *widget, QEvent *event)
+{
+ auto *widgetFactory = core()->widgetFactory();
+ return widgetFactory->isPassiveInteractor(widget) || mainWindowSeparatorEvent(widget, event);
+}
+
bool WidgetEditorTool::handleEvent(QWidget *widget, QWidget *managedWidget, QEvent *event)
{
- const bool passive = core()->widgetFactory()->isPassiveInteractor(widget) != 0
- || mainWindowSeparatorEvent(widget, event); // separators in QMainWindow
- // are no longer widgets
switch (event->type()) {
case QEvent::Resize:
case QEvent::Move:
@@ -122,40 +101,48 @@ bool WidgetEditorTool::handleEvent(QWidget *widget, QWidget *managedWidget, QEve
case QEvent::FocusOut:
case QEvent::FocusIn: // Popup cancelled over a form widget: Reset its focus frame
- return !(passive || widget == m_formWindow || widget == m_formWindow->mainContainer());
+ return widget != m_formWindow && widget != m_formWindow->mainContainer()
+ && !isPassiveInteractor(widget, event);
case QEvent::Wheel: // Prevent spinboxes and combos from reacting
if (widget == m_formWindow->formContainer() || widget == m_formWindow
|| widget == m_formWindow->mainContainer()) { // Allow scrolling the form with wheel.
return false;
}
- return !passive;
+ return !isPassiveInteractor(widget, event);
case QEvent::KeyPress:
- return !passive && handleKeyPressEvent(widget, managedWidget, static_cast<QKeyEvent*>(event));
+ return !isPassiveInteractor(widget, event)
+ && handleKeyPressEvent(widget, managedWidget, static_cast<QKeyEvent*>(event));
case QEvent::KeyRelease:
- return !passive && handleKeyReleaseEvent(widget, managedWidget, static_cast<QKeyEvent*>(event));
+ return !isPassiveInteractor(widget, event)
+ && handleKeyReleaseEvent(widget, managedWidget, static_cast<QKeyEvent*>(event));
case QEvent::MouseMove:
- return !passive && handleMouseMoveEvent(widget, managedWidget, static_cast<QMouseEvent*>(event));
+ return !isPassiveInteractor(widget, event)
+ && handleMouseMoveEvent(widget, managedWidget, static_cast<QMouseEvent*>(event));
case QEvent::MouseButtonPress:
- return !passive && handleMousePressEvent(widget, managedWidget, static_cast<QMouseEvent*>(event));
+ return !isPassiveInteractor(widget, event)
+ && handleMousePressEvent(widget, managedWidget, static_cast<QMouseEvent*>(event));
case QEvent::MouseButtonRelease:
- return !passive && handleMouseReleaseEvent(widget, managedWidget, static_cast<QMouseEvent*>(event));
+ return !isPassiveInteractor(widget, event)
+ && handleMouseReleaseEvent(widget, managedWidget, static_cast<QMouseEvent*>(event));
case QEvent::MouseButtonDblClick:
- return !passive && handleMouseButtonDblClickEvent(widget, managedWidget, static_cast<QMouseEvent*>(event));
+ return !isPassiveInteractor(widget, event)
+ && handleMouseButtonDblClickEvent(widget, managedWidget, static_cast<QMouseEvent*>(event));
case QEvent::ContextMenu:
- return !passive && handleContextMenu(widget, managedWidget, static_cast<QContextMenuEvent*>(event));
+ return !isPassiveInteractor(widget, event)
+ && handleContextMenu(widget, managedWidget, static_cast<QContextMenuEvent*>(event));
case QEvent::DragEnter:
return handleDragEnterMoveEvent(widget, managedWidget, static_cast<QDragEnterEvent *>(event), true);
case QEvent::DragMove:
- return handleDragEnterMoveEvent(widget, managedWidget, static_cast<QDragEnterEvent *>(event), false);
+ return handleDragEnterMoveEvent(widget, managedWidget, static_cast<QDragMoveEvent *>(event), false);
case QEvent::DragLeave:
return handleDragLeaveEvent(widget, managedWidget, static_cast<QDragLeaveEvent *>(event));
case QEvent::Drop:
@@ -351,4 +338,6 @@ void WidgetEditorTool::deactivated()
m_formWindow->clearSelection();
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/formeditor/tool_widgeteditor.h b/src/designer/src/components/formeditor/tool_widgeteditor.h
index d2b3a1df4..5e22224be 100644
--- a/src/designer/src/components/formeditor/tool_widgeteditor.h
+++ b/src/designer/src/components/formeditor/tool_widgeteditor.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef TOOL_WIDGETEDITOR_H
#define TOOL_WIDGETEDITOR_H
@@ -82,6 +57,7 @@ private:
QAction *m_action;
bool mainWindowSeparatorEvent(QWidget *widget, QEvent *event);
+ bool isPassiveInteractor(QWidget *widget, QEvent *event);
QPointer<QMainWindow> m_separator_drag_mw;
QPointer<QWidget> m_lastDropTarget;
bool m_specialDockDrag;
diff --git a/src/designer/src/components/formeditor/widgetselection.cpp b/src/designer/src/components/formeditor/widgetselection.cpp
index 36f9eec1f..75d8a5fb7 100644
--- a/src/designer/src/components/formeditor/widgetselection.cpp
+++ b/src/designer/src/components/formeditor/widgetselection.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "widgetselection.h"
#include "formwindow.h"
@@ -58,6 +33,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
enum { debugWidgetSelection = 0 };
@@ -351,7 +328,7 @@ void WidgetHandle::mouseReleaseEvent(QMouseEvent *e)
case WidgetSelection::UnlaidOut:
if (m_geom != m_widget->geometry()) {
SetPropertyCommand *cmd = new SetPropertyCommand(m_formWindow);
- cmd->init(m_widget, QStringLiteral("geometry"), m_widget->geometry());
+ cmd->init(m_widget, u"geometry"_s, m_widget->geometry());
cmd->setOldValue(m_origGeom);
m_formWindow->commandHistory()->push(cmd);
m_formWindow->emitSelectionChanged();
diff --git a/src/designer/src/components/formeditor/widgetselection.h b/src/designer/src/components/formeditor/widgetselection.h
index eef2593b3..b5a6ae20c 100644
--- a/src/designer/src/components/formeditor/widgetselection.h
+++ b/src/designer/src/components/formeditor/widgetselection.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef WIDGETSELECTION_H
#define WIDGETSELECTION_H
diff --git a/src/designer/src/components/lib/CMakeLists.txt b/src/designer/src/components/lib/CMakeLists.txt
index c094b756d..1d08b785f 100644
--- a/src/designer/src/components/lib/CMakeLists.txt
+++ b/src/designer/src/components/lib/CMakeLists.txt
@@ -1,12 +1,14 @@
-# Generated from lib.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
-## DesignerComponents Module:
+## DesignerComponentsPrivate Module:
#####################################################################
-qt_add_module(DesignerComponents
+qt_internal_add_module(DesignerComponentsPrivate
INTERNAL_MODULE
SOURCES
+ lib_pch.h
../buddyeditor/buddyeditor.cpp ../buddyeditor/buddyeditor.h
../buddyeditor/buddyeditor_global.h
../buddyeditor/buddyeditor_plugin.cpp ../buddyeditor/buddyeditor_plugin.h
@@ -14,7 +16,7 @@ qt_add_module(DesignerComponents
../formeditor/default_actionprovider.cpp ../formeditor/default_actionprovider.h
../formeditor/default_container.cpp ../formeditor/default_container.h
../formeditor/default_layoutdecoration.cpp ../formeditor/default_layoutdecoration.h
- ../formeditor/deviceprofiledialog.cpp ../formeditor/deviceprofiledialog.h ../formeditor/deviceprofiledialog.ui
+ ../formeditor/deviceprofiledialog.cpp ../formeditor/deviceprofiledialog.h
../formeditor/dpi_chooser.cpp ../formeditor/dpi_chooser.h
../formeditor/embeddedoptionspage.cpp ../formeditor/embeddedoptionspage.h
../formeditor/formeditor.cpp ../formeditor/formeditor.h
@@ -25,7 +27,7 @@ qt_add_module(DesignerComponents
../formeditor/formwindow_widgetstack.cpp ../formeditor/formwindow_widgetstack.h
../formeditor/formwindowcursor.cpp ../formeditor/formwindowcursor.h
../formeditor/formwindowmanager.cpp ../formeditor/formwindowmanager.h
- ../formeditor/formwindowsettings.cpp ../formeditor/formwindowsettings.h ../formeditor/formwindowsettings.ui
+ ../formeditor/formwindowsettings.cpp ../formeditor/formwindowsettings.h
../formeditor/itemview_propertysheet.cpp ../formeditor/itemview_propertysheet.h
../formeditor/layout_propertysheet.cpp ../formeditor/layout_propertysheet.h
../formeditor/line_propertysheet.cpp ../formeditor/line_propertysheet.h
@@ -36,7 +38,7 @@ qt_add_module(DesignerComponents
../formeditor/qmdiarea_container.cpp ../formeditor/qmdiarea_container.h
../formeditor/qwizard_container.cpp ../formeditor/qwizard_container.h
../formeditor/spacer_propertysheet.cpp ../formeditor/spacer_propertysheet.h
- ../formeditor/templateoptionspage.cpp ../formeditor/templateoptionspage.h ../formeditor/templateoptionspage.ui
+ ../formeditor/templateoptionspage.cpp ../formeditor/templateoptionspage.h
../formeditor/tool_widgeteditor.cpp ../formeditor/tool_widgeteditor.h
../formeditor/widgetselection.cpp ../formeditor/widgetselection.h
../objectinspector/objectinspector.cpp ../objectinspector/objectinspector.h
@@ -45,17 +47,18 @@ qt_add_module(DesignerComponents
../propertyeditor/brushpropertymanager.cpp ../propertyeditor/brushpropertymanager.h
../propertyeditor/designerpropertymanager.cpp ../propertyeditor/designerpropertymanager.h
../propertyeditor/fontpropertymanager.cpp ../propertyeditor/fontpropertymanager.h
- ../propertyeditor/newdynamicpropertydialog.cpp ../propertyeditor/newdynamicpropertydialog.h ../propertyeditor/newdynamicpropertydialog.ui
- ../propertyeditor/paletteeditor.cpp ../propertyeditor/paletteeditor.h ../propertyeditor/paletteeditor.ui
+ ../propertyeditor/newdynamicpropertydialog.cpp ../propertyeditor/newdynamicpropertydialog.h
+ ../propertyeditor/paletteeditor.cpp ../propertyeditor/paletteeditor.h
../propertyeditor/paletteeditorbutton.cpp ../propertyeditor/paletteeditorbutton.h
+ ../propertyeditor/pixmapeditor.cpp ../propertyeditor/pixmapeditor.h
../propertyeditor/previewframe.cpp ../propertyeditor/previewframe.h
- ../propertyeditor/previewwidget.cpp ../propertyeditor/previewwidget.h ../propertyeditor/previewwidget.ui
+ ../propertyeditor/previewwidget.cpp ../propertyeditor/previewwidget.h
../propertyeditor/propertyeditor.cpp ../propertyeditor/propertyeditor.h
../propertyeditor/propertyeditor_global.h
../propertyeditor/qlonglongvalidator.cpp ../propertyeditor/qlonglongvalidator.h
- ../propertyeditor/stringlisteditor.cpp ../propertyeditor/stringlisteditor.h ../propertyeditor/stringlisteditor.ui
+ ../propertyeditor/stringlisteditor.cpp ../propertyeditor/stringlisteditor.h
../propertyeditor/stringlisteditorbutton.cpp ../propertyeditor/stringlisteditorbutton.h
- ../signalsloteditor/connectdialog.cpp ../signalsloteditor/connectdialog.ui ../signalsloteditor/connectdialog_p.h
+ ../signalsloteditor/connectdialog.cpp ../signalsloteditor/connectdialog_p.h
../signalsloteditor/signalslot_utils.cpp ../signalsloteditor/signalslot_utils_p.h
../signalsloteditor/signalsloteditor.cpp ../signalsloteditor/signalsloteditor.h ../signalsloteditor/signalsloteditor_p.h
../signalsloteditor/signalsloteditor_global.h
@@ -72,7 +75,7 @@ qt_add_module(DesignerComponents
../taskmenu/groupbox_taskmenu.cpp ../taskmenu/groupbox_taskmenu.h
../taskmenu/inplace_editor.cpp ../taskmenu/inplace_editor.h
../taskmenu/inplace_widget_helper.cpp ../taskmenu/inplace_widget_helper.h
- ../taskmenu/itemlisteditor.cpp ../taskmenu/itemlisteditor.h ../taskmenu/itemlisteditor.ui
+ ../taskmenu/itemlisteditor.cpp ../taskmenu/itemlisteditor.h
../taskmenu/label_taskmenu.cpp ../taskmenu/label_taskmenu.h
../taskmenu/layouttaskmenu.cpp ../taskmenu/layouttaskmenu.h
../taskmenu/lineedit_taskmenu.cpp ../taskmenu/lineedit_taskmenu.h
@@ -80,18 +83,21 @@ qt_add_module(DesignerComponents
../taskmenu/listwidgeteditor.cpp ../taskmenu/listwidgeteditor.h
../taskmenu/menutaskmenu.cpp ../taskmenu/menutaskmenu.h
../taskmenu/tablewidget_taskmenu.cpp ../taskmenu/tablewidget_taskmenu.h
- ../taskmenu/tablewidgeteditor.cpp ../taskmenu/tablewidgeteditor.h ../taskmenu/tablewidgeteditor.ui
+ ../taskmenu/tablewidgeteditor.cpp ../taskmenu/tablewidgeteditor.h
../taskmenu/taskmenu_component.cpp ../taskmenu/taskmenu_component.h
../taskmenu/textedit_taskmenu.cpp ../taskmenu/textedit_taskmenu.h
../taskmenu/toolbar_taskmenu.cpp ../taskmenu/toolbar_taskmenu.h
../taskmenu/treewidget_taskmenu.cpp ../taskmenu/treewidget_taskmenu.h
- ../taskmenu/treewidgeteditor.cpp ../taskmenu/treewidgeteditor.h ../taskmenu/treewidgeteditor.ui
+ ../taskmenu/treewidgeteditor.cpp ../taskmenu/treewidgeteditor.h
../widgetbox/widgetbox.cpp ../widgetbox/widgetbox.h
../widgetbox/widgetbox_dnditem.cpp ../widgetbox/widgetbox_dnditem.h
../widgetbox/widgetbox_global.h
../widgetbox/widgetboxcategorylistview.cpp ../widgetbox/widgetboxcategorylistview.h
../widgetbox/widgetboxtreewidget.cpp ../widgetbox/widgetboxtreewidget.h
qdesigner_components.cpp
+ NO_UNITY_BUILD_SOURCES
+ ../tabordereditor/tabordereditor.cpp # redefinition of 'QMetaTypeId<QList<QWidget *>>' (from qdesigner_resource.cpp)
+ ../formeditor/formwindow.cpp # explicit specialization of 'QMetaTypeId<QWidget *>' after instantiation
DEFINES
QDESIGNER_COMPONENTS_LIBRARY
QT_STATICPLUGIN
@@ -123,17 +129,37 @@ qt_add_module(DesignerComponents
uic
PRECOMPILED_HEADER
"lib_pch.h"
+ NO_GENERATE_CPP_EXPORTS
)
-# Resources:
-set_source_files_properties("../propertyeditor/fontmapping.xml"
- PROPERTIES QT_RESOURCE_ALIAS "fontmapping.xml"
+set(ui_sources
+ ../formeditor/deviceprofiledialog.ui
+ ../formeditor/formwindowsettings.ui
+ ../formeditor/templateoptionspage.ui
+ ../propertyeditor/newdynamicpropertydialog.ui
+ ../propertyeditor/paletteeditor.ui
+ ../propertyeditor/previewwidget.ui
+ ../propertyeditor/stringlisteditor.ui
+ ../signalsloteditor/connectdialog.ui
+ ../taskmenu/itemlisteditor.ui
+ ../taskmenu/tablewidgeteditor.ui
+ ../taskmenu/treewidgeteditor.ui
)
+
+# Work around QTBUG-95305
+if(CMAKE_GENERATOR STREQUAL "Ninja Multi-Config" AND CMAKE_CROSS_CONFIGS)
+ qt6_wrap_ui(ui_sources_processed ${ui_sources})
+else()
+ set(ui_sources_processed ${ui_sources})
+endif()
+target_sources(DesignerComponentsPrivate PRIVATE ${ui_sources_processed})
+
+# Resources:
set(propertyeditor_resource_files
- "fontmapping.xml"
+ "../propertyeditor/fontmapping.xml"
)
-qt_add_resource(DesignerComponents "propertyeditor"
+qt_internal_add_resource(DesignerComponentsPrivate "propertyeditor"
PREFIX
"/qt-project.org/propertyeditor"
BASE
@@ -141,698 +167,158 @@ qt_add_resource(DesignerComponents "propertyeditor"
FILES
${propertyeditor_resource_files}
)
-set_source_files_properties("../formeditor/images/cleartext.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cleartext.png"
-)
-set_source_files_properties("../formeditor/images/color.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/color.png"
-)
-set_source_files_properties("../formeditor/images/configure.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/configure.png"
-)
-set_source_files_properties("../formeditor/images/cursors/arrow.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursors/arrow.png"
-)
-set_source_files_properties("../formeditor/images/cursors/busy.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursors/busy.png"
-)
-set_source_files_properties("../formeditor/images/cursors/closedhand.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursors/closedhand.png"
-)
-set_source_files_properties("../formeditor/images/cursors/cross.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursors/cross.png"
-)
-set_source_files_properties("../formeditor/images/cursors/hand.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursors/hand.png"
-)
-set_source_files_properties("../formeditor/images/cursors/hsplit.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursors/hsplit.png"
-)
-set_source_files_properties("../formeditor/images/cursors/ibeam.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursors/ibeam.png"
-)
-set_source_files_properties("../formeditor/images/cursors/no.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursors/no.png"
-)
-set_source_files_properties("../formeditor/images/cursors/openhand.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursors/openhand.png"
-)
-set_source_files_properties("../formeditor/images/cursors/sizeall.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursors/sizeall.png"
-)
-set_source_files_properties("../formeditor/images/cursors/sizeb.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursors/sizeb.png"
-)
-set_source_files_properties("../formeditor/images/cursors/sizef.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursors/sizef.png"
-)
-set_source_files_properties("../formeditor/images/cursors/sizeh.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursors/sizeh.png"
-)
-set_source_files_properties("../formeditor/images/cursors/sizev.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursors/sizev.png"
-)
-set_source_files_properties("../formeditor/images/cursors/uparrow.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursors/uparrow.png"
-)
-set_source_files_properties("../formeditor/images/cursors/vsplit.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursors/vsplit.png"
-)
-set_source_files_properties("../formeditor/images/cursors/wait.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursors/wait.png"
-)
-set_source_files_properties("../formeditor/images/cursors/whatsthis.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursors/whatsthis.png"
-)
-set_source_files_properties("../formeditor/images/downplus.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/downplus.png"
-)
-set_source_files_properties("../formeditor/images/dropdownbutton.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/dropdownbutton.png"
-)
-set_source_files_properties("../formeditor/images/edit.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/edit.png"
-)
-set_source_files_properties("../formeditor/images/editdelete-16.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/editdelete-16.png"
-)
-set_source_files_properties("../formeditor/images/emptyicon.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/emptyicon.png"
-)
-set_source_files_properties("../formeditor/images/filenew-16.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/filenew-16.png"
-)
-set_source_files_properties("../formeditor/images/fileopen-16.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/fileopen-16.png"
-)
-set_source_files_properties("../formeditor/images/leveldown.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/leveldown.png"
-)
-set_source_files_properties("../formeditor/images/levelup.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/levelup.png"
-)
-set_source_files_properties("../formeditor/images/mac/adjustsize.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/adjustsize.png"
-)
-set_source_files_properties("../formeditor/images/mac/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/back.png"
-)
-set_source_files_properties("../formeditor/images/mac/buddytool.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/buddytool.png"
-)
-set_source_files_properties("../formeditor/images/mac/down.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/down.png"
-)
-set_source_files_properties("../formeditor/images/mac/editbreaklayout.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/editbreaklayout.png"
-)
-set_source_files_properties("../formeditor/images/mac/editcopy.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/editcopy.png"
-)
-set_source_files_properties("../formeditor/images/mac/editcut.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/editcut.png"
-)
-set_source_files_properties("../formeditor/images/mac/editdelete.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/editdelete.png"
-)
-set_source_files_properties("../formeditor/images/mac/editform.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/editform.png"
-)
-set_source_files_properties("../formeditor/images/mac/editgrid.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/editgrid.png"
-)
-set_source_files_properties("../formeditor/images/mac/edithlayout.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/edithlayout.png"
-)
-set_source_files_properties("../formeditor/images/mac/edithlayoutsplit.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/edithlayoutsplit.png"
-)
-set_source_files_properties("../formeditor/images/mac/editlower.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/editlower.png"
-)
-set_source_files_properties("../formeditor/images/mac/editpaste.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/editpaste.png"
-)
-set_source_files_properties("../formeditor/images/mac/editraise.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/editraise.png"
-)
-set_source_files_properties("../formeditor/images/mac/editvlayout.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/editvlayout.png"
-)
-set_source_files_properties("../formeditor/images/mac/editvlayoutsplit.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/editvlayoutsplit.png"
-)
-set_source_files_properties("../formeditor/images/mac/filenew.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/filenew.png"
-)
-set_source_files_properties("../formeditor/images/mac/fileopen.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/fileopen.png"
-)
-set_source_files_properties("../formeditor/images/mac/filesave.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/filesave.png"
-)
-set_source_files_properties("../formeditor/images/mac/forward.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/forward.png"
-)
-set_source_files_properties("../formeditor/images/mac/insertimage.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/insertimage.png"
-)
-set_source_files_properties("../formeditor/images/mac/minus.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/minus.png"
-)
-set_source_files_properties("../formeditor/images/mac/plus.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/plus.png"
-)
-set_source_files_properties("../formeditor/images/mac/redo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/redo.png"
-)
-set_source_files_properties("../formeditor/images/mac/resourceeditortool.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/resourceeditortool.png"
-)
-set_source_files_properties("../formeditor/images/mac/signalslottool.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/signalslottool.png"
-)
-set_source_files_properties("../formeditor/images/mac/simplifyrichtext.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/simplifyrichtext.png"
-)
-set_source_files_properties("../formeditor/images/mac/tabordertool.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/tabordertool.png"
-)
-set_source_files_properties("../formeditor/images/mac/textanchor.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/textanchor.png"
-)
-set_source_files_properties("../formeditor/images/mac/textbold.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/textbold.png"
-)
-set_source_files_properties("../formeditor/images/mac/textcenter.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/textcenter.png"
-)
-set_source_files_properties("../formeditor/images/mac/textitalic.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/textitalic.png"
-)
-set_source_files_properties("../formeditor/images/mac/textjustify.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/textjustify.png"
-)
-set_source_files_properties("../formeditor/images/mac/textleft.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/textleft.png"
-)
-set_source_files_properties("../formeditor/images/mac/textright.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/textright.png"
-)
-set_source_files_properties("../formeditor/images/mac/textsubscript.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/textsubscript.png"
-)
-set_source_files_properties("../formeditor/images/mac/textsuperscript.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/textsuperscript.png"
-)
-set_source_files_properties("../formeditor/images/mac/textunder.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/textunder.png"
-)
-set_source_files_properties("../formeditor/images/mac/undo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/undo.png"
-)
-set_source_files_properties("../formeditor/images/mac/up.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/up.png"
-)
-set_source_files_properties("../formeditor/images/mac/widgettool.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/widgettool.png"
-)
-set_source_files_properties("../formeditor/images/minus-16.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/minus-16.png"
-)
-set_source_files_properties("../formeditor/images/plus-16.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/plus-16.png"
-)
-set_source_files_properties("../formeditor/images/prefix-add.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/prefix-add.png"
-)
-set_source_files_properties("../formeditor/images/qt3logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt3logo.png"
-)
-set_source_files_properties("../formeditor/images/qtlogo16x16.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qtlogo16x16.png"
-)
-set_source_files_properties("../formeditor/images/qtlogo24x24.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qtlogo24x24.png"
-)
-set_source_files_properties("../formeditor/images/qtlogo32x32.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qtlogo32x32.png"
-)
-set_source_files_properties("../formeditor/images/qtlogo64x64.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qtlogo64x64.png"
-)
-set_source_files_properties("../formeditor/images/reload.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/reload.png"
-)
-set_source_files_properties("../formeditor/images/resetproperty.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/resetproperty.png"
-)
-set_source_files_properties("../formeditor/images/righttoleft.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/righttoleft.png"
-)
-set_source_files_properties("../formeditor/images/sort.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/sort.png"
-)
-set_source_files_properties("../formeditor/images/submenu.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/submenu.png"
-)
-set_source_files_properties("../formeditor/images/widgets/calendarwidget.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/calendarwidget.png"
-)
-set_source_files_properties("../formeditor/images/widgets/checkbox.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/checkbox.png"
-)
-set_source_files_properties("../formeditor/images/widgets/columnview.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/columnview.png"
-)
-set_source_files_properties("../formeditor/images/widgets/combobox.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/combobox.png"
-)
-set_source_files_properties("../formeditor/images/widgets/commandlinkbutton.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/commandlinkbutton.png"
-)
-set_source_files_properties("../formeditor/images/widgets/dateedit.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/dateedit.png"
-)
-set_source_files_properties("../formeditor/images/widgets/datetimeedit.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/datetimeedit.png"
-)
-set_source_files_properties("../formeditor/images/widgets/dial.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/dial.png"
-)
-set_source_files_properties("../formeditor/images/widgets/dialogbuttonbox.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/dialogbuttonbox.png"
-)
-set_source_files_properties("../formeditor/images/widgets/dockwidget.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/dockwidget.png"
-)
-set_source_files_properties("../formeditor/images/widgets/doublespinbox.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/doublespinbox.png"
-)
-set_source_files_properties("../formeditor/images/widgets/fontcombobox.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/fontcombobox.png"
-)
-set_source_files_properties("../formeditor/images/widgets/frame.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/frame.png"
-)
-set_source_files_properties("../formeditor/images/widgets/graphicsview.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/graphicsview.png"
-)
-set_source_files_properties("../formeditor/images/widgets/groupbox.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/groupbox.png"
-)
-set_source_files_properties("../formeditor/images/widgets/hscrollbar.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/hscrollbar.png"
-)
-set_source_files_properties("../formeditor/images/widgets/hslider.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/hslider.png"
-)
-set_source_files_properties("../formeditor/images/widgets/hsplit.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/hsplit.png"
-)
-set_source_files_properties("../formeditor/images/widgets/label.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/label.png"
-)
-set_source_files_properties("../formeditor/images/widgets/lcdnumber.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/lcdnumber.png"
-)
-set_source_files_properties("../formeditor/images/widgets/line.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/line.png"
-)
-set_source_files_properties("../formeditor/images/widgets/lineedit.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/lineedit.png"
-)
-set_source_files_properties("../formeditor/images/widgets/listbox.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/listbox.png"
-)
-set_source_files_properties("../formeditor/images/widgets/listview.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/listview.png"
-)
-set_source_files_properties("../formeditor/images/widgets/mdiarea.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/mdiarea.png"
-)
-set_source_files_properties("../formeditor/images/widgets/plaintextedit.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/plaintextedit.png"
-)
-set_source_files_properties("../formeditor/images/widgets/progress.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/progress.png"
-)
-set_source_files_properties("../formeditor/images/widgets/pushbutton.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/pushbutton.png"
-)
-set_source_files_properties("../formeditor/images/widgets/radiobutton.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/radiobutton.png"
-)
-set_source_files_properties("../formeditor/images/widgets/scrollarea.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/scrollarea.png"
-)
-set_source_files_properties("../formeditor/images/widgets/spacer.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/spacer.png"
-)
-set_source_files_properties("../formeditor/images/widgets/spinbox.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/spinbox.png"
-)
-set_source_files_properties("../formeditor/images/widgets/table.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/table.png"
-)
-set_source_files_properties("../formeditor/images/widgets/tabwidget.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/tabwidget.png"
-)
-set_source_files_properties("../formeditor/images/widgets/textedit.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/textedit.png"
-)
-set_source_files_properties("../formeditor/images/widgets/timeedit.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/timeedit.png"
-)
-set_source_files_properties("../formeditor/images/widgets/toolbox.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/toolbox.png"
-)
-set_source_files_properties("../formeditor/images/widgets/toolbutton.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/toolbutton.png"
-)
-set_source_files_properties("../formeditor/images/widgets/vline.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/vline.png"
-)
-set_source_files_properties("../formeditor/images/widgets/vscrollbar.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/vscrollbar.png"
-)
-set_source_files_properties("../formeditor/images/widgets/vslider.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/vslider.png"
-)
-set_source_files_properties("../formeditor/images/widgets/vspacer.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/vspacer.png"
-)
-set_source_files_properties("../formeditor/images/widgets/widget.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/widget.png"
-)
-set_source_files_properties("../formeditor/images/widgets/widgetstack.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/widgetstack.png"
-)
-set_source_files_properties("../formeditor/images/widgets/wizard.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/widgets/wizard.png"
-)
-set_source_files_properties("../formeditor/images/win/adjustsize.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/adjustsize.png"
-)
-set_source_files_properties("../formeditor/images/win/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/back.png"
-)
-set_source_files_properties("../formeditor/images/win/buddytool.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/buddytool.png"
-)
-set_source_files_properties("../formeditor/images/win/down.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/down.png"
-)
-set_source_files_properties("../formeditor/images/win/editbreaklayout.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/editbreaklayout.png"
-)
-set_source_files_properties("../formeditor/images/win/editcopy.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/editcopy.png"
-)
-set_source_files_properties("../formeditor/images/win/editcut.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/editcut.png"
-)
-set_source_files_properties("../formeditor/images/win/editdelete.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/editdelete.png"
-)
-set_source_files_properties("../formeditor/images/win/editform.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/editform.png"
-)
-set_source_files_properties("../formeditor/images/win/editgrid.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/editgrid.png"
-)
-set_source_files_properties("../formeditor/images/win/edithlayout.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/edithlayout.png"
-)
-set_source_files_properties("../formeditor/images/win/edithlayoutsplit.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/edithlayoutsplit.png"
-)
-set_source_files_properties("../formeditor/images/win/editlower.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/editlower.png"
-)
-set_source_files_properties("../formeditor/images/win/editpaste.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/editpaste.png"
-)
-set_source_files_properties("../formeditor/images/win/editraise.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/editraise.png"
-)
-set_source_files_properties("../formeditor/images/win/editvlayout.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/editvlayout.png"
-)
-set_source_files_properties("../formeditor/images/win/editvlayoutsplit.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/editvlayoutsplit.png"
-)
-set_source_files_properties("../formeditor/images/win/filenew.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/filenew.png"
-)
-set_source_files_properties("../formeditor/images/win/fileopen.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/fileopen.png"
-)
-set_source_files_properties("../formeditor/images/win/filesave.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/filesave.png"
-)
-set_source_files_properties("../formeditor/images/win/forward.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/forward.png"
-)
-set_source_files_properties("../formeditor/images/win/insertimage.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/insertimage.png"
-)
-set_source_files_properties("../formeditor/images/win/minus.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/minus.png"
-)
-set_source_files_properties("../formeditor/images/win/plus.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/plus.png"
-)
-set_source_files_properties("../formeditor/images/win/redo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/redo.png"
-)
-set_source_files_properties("../formeditor/images/win/resourceeditortool.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/resourceeditortool.png"
-)
-set_source_files_properties("../formeditor/images/win/signalslottool.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/signalslottool.png"
-)
-set_source_files_properties("../formeditor/images/win/simplifyrichtext.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/simplifyrichtext.png"
-)
-set_source_files_properties("../formeditor/images/win/tabordertool.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/tabordertool.png"
-)
-set_source_files_properties("../formeditor/images/win/textanchor.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/textanchor.png"
-)
-set_source_files_properties("../formeditor/images/win/textbold.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/textbold.png"
-)
-set_source_files_properties("../formeditor/images/win/textcenter.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/textcenter.png"
-)
-set_source_files_properties("../formeditor/images/win/textitalic.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/textitalic.png"
-)
-set_source_files_properties("../formeditor/images/win/textjustify.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/textjustify.png"
-)
-set_source_files_properties("../formeditor/images/win/textleft.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/textleft.png"
-)
-set_source_files_properties("../formeditor/images/win/textright.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/textright.png"
-)
-set_source_files_properties("../formeditor/images/win/textsubscript.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/textsubscript.png"
-)
-set_source_files_properties("../formeditor/images/win/textsuperscript.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/textsuperscript.png"
-)
-set_source_files_properties("../formeditor/images/win/textunder.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/textunder.png"
-)
-set_source_files_properties("../formeditor/images/win/undo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/undo.png"
-)
-set_source_files_properties("../formeditor/images/win/up.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/up.png"
-)
-set_source_files_properties("../formeditor/images/win/widgettool.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/widgettool.png"
-)
set(formeditor_resource_files
- "images/cleartext.png"
- "images/color.png"
- "images/configure.png"
- "images/cursors/arrow.png"
- "images/cursors/busy.png"
- "images/cursors/closedhand.png"
- "images/cursors/cross.png"
- "images/cursors/hand.png"
- "images/cursors/hsplit.png"
- "images/cursors/ibeam.png"
- "images/cursors/no.png"
- "images/cursors/openhand.png"
- "images/cursors/sizeall.png"
- "images/cursors/sizeb.png"
- "images/cursors/sizef.png"
- "images/cursors/sizeh.png"
- "images/cursors/sizev.png"
- "images/cursors/uparrow.png"
- "images/cursors/vsplit.png"
- "images/cursors/wait.png"
- "images/cursors/whatsthis.png"
- "images/downplus.png"
- "images/dropdownbutton.png"
- "images/edit.png"
- "images/editdelete-16.png"
- "images/emptyicon.png"
- "images/filenew-16.png"
- "images/fileopen-16.png"
- "images/leveldown.png"
- "images/levelup.png"
- "images/mac/adjustsize.png"
- "images/mac/back.png"
- "images/mac/buddytool.png"
- "images/mac/down.png"
- "images/mac/editbreaklayout.png"
- "images/mac/editcopy.png"
- "images/mac/editcut.png"
- "images/mac/editdelete.png"
- "images/mac/editform.png"
- "images/mac/editgrid.png"
- "images/mac/edithlayout.png"
- "images/mac/edithlayoutsplit.png"
- "images/mac/editlower.png"
- "images/mac/editpaste.png"
- "images/mac/editraise.png"
- "images/mac/editvlayout.png"
- "images/mac/editvlayoutsplit.png"
- "images/mac/filenew.png"
- "images/mac/fileopen.png"
- "images/mac/filesave.png"
- "images/mac/forward.png"
- "images/mac/insertimage.png"
- "images/mac/minus.png"
- "images/mac/plus.png"
- "images/mac/redo.png"
- "images/mac/resourceeditortool.png"
- "images/mac/signalslottool.png"
- "images/mac/simplifyrichtext.png"
- "images/mac/tabordertool.png"
- "images/mac/textanchor.png"
- "images/mac/textbold.png"
- "images/mac/textcenter.png"
- "images/mac/textitalic.png"
- "images/mac/textjustify.png"
- "images/mac/textleft.png"
- "images/mac/textright.png"
- "images/mac/textsubscript.png"
- "images/mac/textsuperscript.png"
- "images/mac/textunder.png"
- "images/mac/undo.png"
- "images/mac/up.png"
- "images/mac/widgettool.png"
- "images/minus-16.png"
- "images/plus-16.png"
- "images/prefix-add.png"
- "images/qt3logo.png"
- "images/qtlogo16x16.png"
- "images/qtlogo24x24.png"
- "images/qtlogo32x32.png"
- "images/qtlogo64x64.png"
- "images/reload.png"
- "images/resetproperty.png"
- "images/righttoleft.png"
- "images/sort.png"
- "images/submenu.png"
- "images/widgets/calendarwidget.png"
- "images/widgets/checkbox.png"
- "images/widgets/columnview.png"
- "images/widgets/combobox.png"
- "images/widgets/commandlinkbutton.png"
- "images/widgets/dateedit.png"
- "images/widgets/datetimeedit.png"
- "images/widgets/dial.png"
- "images/widgets/dialogbuttonbox.png"
- "images/widgets/dockwidget.png"
- "images/widgets/doublespinbox.png"
- "images/widgets/fontcombobox.png"
- "images/widgets/frame.png"
- "images/widgets/graphicsview.png"
- "images/widgets/groupbox.png"
- "images/widgets/hscrollbar.png"
- "images/widgets/hslider.png"
- "images/widgets/hsplit.png"
- "images/widgets/label.png"
- "images/widgets/lcdnumber.png"
- "images/widgets/line.png"
- "images/widgets/lineedit.png"
- "images/widgets/listbox.png"
- "images/widgets/listview.png"
- "images/widgets/mdiarea.png"
- "images/widgets/plaintextedit.png"
- "images/widgets/progress.png"
- "images/widgets/pushbutton.png"
- "images/widgets/radiobutton.png"
- "images/widgets/scrollarea.png"
- "images/widgets/spacer.png"
- "images/widgets/spinbox.png"
- "images/widgets/table.png"
- "images/widgets/tabwidget.png"
- "images/widgets/textedit.png"
- "images/widgets/timeedit.png"
- "images/widgets/toolbox.png"
- "images/widgets/toolbutton.png"
- "images/widgets/vline.png"
- "images/widgets/vscrollbar.png"
- "images/widgets/vslider.png"
- "images/widgets/vspacer.png"
- "images/widgets/widget.png"
- "images/widgets/widgetstack.png"
- "images/widgets/wizard.png"
- "images/win/adjustsize.png"
- "images/win/back.png"
- "images/win/buddytool.png"
- "images/win/down.png"
- "images/win/editbreaklayout.png"
- "images/win/editcopy.png"
- "images/win/editcut.png"
- "images/win/editdelete.png"
- "images/win/editform.png"
- "images/win/editgrid.png"
- "images/win/edithlayout.png"
- "images/win/edithlayoutsplit.png"
- "images/win/editlower.png"
- "images/win/editpaste.png"
- "images/win/editraise.png"
- "images/win/editvlayout.png"
- "images/win/editvlayoutsplit.png"
- "images/win/filenew.png"
- "images/win/fileopen.png"
- "images/win/filesave.png"
- "images/win/forward.png"
- "images/win/insertimage.png"
- "images/win/minus.png"
- "images/win/plus.png"
- "images/win/redo.png"
- "images/win/resourceeditortool.png"
- "images/win/signalslottool.png"
- "images/win/simplifyrichtext.png"
- "images/win/tabordertool.png"
- "images/win/textanchor.png"
- "images/win/textbold.png"
- "images/win/textcenter.png"
- "images/win/textitalic.png"
- "images/win/textjustify.png"
- "images/win/textleft.png"
- "images/win/textright.png"
- "images/win/textsubscript.png"
- "images/win/textsuperscript.png"
- "images/win/textunder.png"
- "images/win/undo.png"
- "images/win/up.png"
- "images/win/widgettool.png"
+ "../formeditor/images/color.png"
+ "../formeditor/images/configure.png"
+ "../formeditor/images/downplus.png"
+ "../formeditor/images/dropdownbutton.png"
+ "../formeditor/images/edit.png"
+ "../formeditor/images/editdelete-16.png"
+ "../formeditor/images/emptyicon.png"
+ "../formeditor/images/filenew-16.png"
+ "../formeditor/images/fileopen-16.png"
+ "../formeditor/images/leveldown.png"
+ "../formeditor/images/levelup.png"
+ "../formeditor/images/mac/adjustsize.png"
+ "../formeditor/images/mac/back.png"
+ "../formeditor/images/mac/buddytool.png"
+ "../formeditor/images/mac/down.png"
+ "../formeditor/images/mac/editbreaklayout.png"
+ "../formeditor/images/mac/editcopy.png"
+ "../formeditor/images/mac/editcut.png"
+ "../formeditor/images/mac/editdelete.png"
+ "../formeditor/images/mac/editform.png"
+ "../formeditor/images/mac/editgrid.png"
+ "../formeditor/images/mac/edithlayout.png"
+ "../formeditor/images/mac/edithlayoutsplit.png"
+ "../formeditor/images/mac/editlower.png"
+ "../formeditor/images/mac/editpaste.png"
+ "../formeditor/images/mac/editraise.png"
+ "../formeditor/images/mac/editvlayout.png"
+ "../formeditor/images/mac/editvlayoutsplit.png"
+ "../formeditor/images/mac/filenew.png"
+ "../formeditor/images/mac/fileopen.png"
+ "../formeditor/images/mac/filesave.png"
+ "../formeditor/images/mac/forward.png"
+ "../formeditor/images/mac/insertimage.png"
+ "../formeditor/images/mac/minus.png"
+ "../formeditor/images/mac/plus.png"
+ "../formeditor/images/mac/redo.png"
+ "../formeditor/images/mac/signalslottool.png"
+ "../formeditor/images/mac/simplifyrichtext.png"
+ "../formeditor/images/mac/tabordertool.png"
+ "../formeditor/images/mac/textanchor.png"
+ "../formeditor/images/mac/textbold.png"
+ "../formeditor/images/mac/textcenter.png"
+ "../formeditor/images/mac/textitalic.png"
+ "../formeditor/images/mac/textjustify.png"
+ "../formeditor/images/mac/textleft.png"
+ "../formeditor/images/mac/textright.png"
+ "../formeditor/images/mac/textsubscript.png"
+ "../formeditor/images/mac/textsuperscript.png"
+ "../formeditor/images/mac/textunder.png"
+ "../formeditor/images/mac/undo.png"
+ "../formeditor/images/mac/up.png"
+ "../formeditor/images/mac/widgettool.png"
+ "../formeditor/images/minus-16.png"
+ "../formeditor/images/prefix-add.png"
+ "../formeditor/images/qtlogo128x128.png"
+ "../formeditor/images/qtlogo16x16.png"
+ "../formeditor/images/qtlogo24x24.png"
+ "../formeditor/images/qtlogo32x32.png"
+ "../formeditor/images/qtlogo64x64.png"
+ "../formeditor/images/reload.png"
+ "../formeditor/images/resetproperty.png"
+ "../formeditor/images/righttoleft.png"
+ "../formeditor/images/sort.png"
+ "../formeditor/images/submenu.png"
+ "../formeditor/images/widgets/calendarwidget.png"
+ "../formeditor/images/widgets/checkbox.png"
+ "../formeditor/images/widgets/columnview.png"
+ "../formeditor/images/widgets/combobox.png"
+ "../formeditor/images/widgets/commandlinkbutton.png"
+ "../formeditor/images/widgets/dateedit.png"
+ "../formeditor/images/widgets/datetimeedit.png"
+ "../formeditor/images/widgets/dial.png"
+ "../formeditor/images/widgets/dialogbuttonbox.png"
+ "../formeditor/images/widgets/dockwidget.png"
+ "../formeditor/images/widgets/doublespinbox.png"
+ "../formeditor/images/widgets/fontcombobox.png"
+ "../formeditor/images/widgets/frame.png"
+ "../formeditor/images/widgets/graphicsview.png"
+ "../formeditor/images/widgets/groupbox.png"
+ "../formeditor/images/widgets/hscrollbar.png"
+ "../formeditor/images/widgets/hslider.png"
+ "../formeditor/images/widgets/label.png"
+ "../formeditor/images/widgets/lcdnumber.png"
+ "../formeditor/images/widgets/line.png"
+ "../formeditor/images/widgets/lineedit.png"
+ "../formeditor/images/widgets/listbox.png"
+ "../formeditor/images/widgets/listview.png"
+ "../formeditor/images/widgets/mdiarea.png"
+ "../formeditor/images/widgets/plaintextedit.png"
+ "../formeditor/images/widgets/progress.png"
+ "../formeditor/images/widgets/pushbutton.png"
+ "../formeditor/images/widgets/radiobutton.png"
+ "../formeditor/images/widgets/scrollarea.png"
+ "../formeditor/images/widgets/spacer.png"
+ "../formeditor/images/widgets/spinbox.png"
+ "../formeditor/images/widgets/table.png"
+ "../formeditor/images/widgets/tabwidget.png"
+ "../formeditor/images/widgets/textedit.png"
+ "../formeditor/images/widgets/timeedit.png"
+ "../formeditor/images/widgets/toolbox.png"
+ "../formeditor/images/widgets/toolbutton.png"
+ "../formeditor/images/widgets/vline.png"
+ "../formeditor/images/widgets/vscrollbar.png"
+ "../formeditor/images/widgets/vslider.png"
+ "../formeditor/images/widgets/vspacer.png"
+ "../formeditor/images/widgets/widget.png"
+ "../formeditor/images/widgets/widgetstack.png"
+ "../formeditor/images/win/adjustsize.png"
+ "../formeditor/images/win/back.png"
+ "../formeditor/images/win/buddytool.png"
+ "../formeditor/images/win/down.png"
+ "../formeditor/images/win/editbreaklayout.png"
+ "../formeditor/images/win/editcopy.png"
+ "../formeditor/images/win/editcut.png"
+ "../formeditor/images/win/editdelete.png"
+ "../formeditor/images/win/editform.png"
+ "../formeditor/images/win/editgrid.png"
+ "../formeditor/images/win/edithlayout.png"
+ "../formeditor/images/win/edithlayoutsplit.png"
+ "../formeditor/images/win/editlower.png"
+ "../formeditor/images/win/editpaste.png"
+ "../formeditor/images/win/editraise.png"
+ "../formeditor/images/win/editvlayout.png"
+ "../formeditor/images/win/editvlayoutsplit.png"
+ "../formeditor/images/win/filenew.png"
+ "../formeditor/images/win/fileopen.png"
+ "../formeditor/images/win/filesave.png"
+ "../formeditor/images/win/forward.png"
+ "../formeditor/images/win/insertimage.png"
+ "../formeditor/images/win/minus.png"
+ "../formeditor/images/win/plus.png"
+ "../formeditor/images/win/redo.png"
+ "../formeditor/images/win/signalslottool.png"
+ "../formeditor/images/win/simplifyrichtext.png"
+ "../formeditor/images/win/tabordertool.png"
+ "../formeditor/images/win/textanchor.png"
+ "../formeditor/images/win/textbold.png"
+ "../formeditor/images/win/textcenter.png"
+ "../formeditor/images/win/textitalic.png"
+ "../formeditor/images/win/textjustify.png"
+ "../formeditor/images/win/textleft.png"
+ "../formeditor/images/win/textright.png"
+ "../formeditor/images/win/textsubscript.png"
+ "../formeditor/images/win/textsuperscript.png"
+ "../formeditor/images/win/textunder.png"
+ "../formeditor/images/win/undo.png"
+ "../formeditor/images/win/up.png"
+ "../formeditor/images/win/widgettool.png"
)
-qt_add_resource(DesignerComponents "formeditor"
+qt_internal_add_resource(DesignerComponentsPrivate "formeditor"
PREFIX
"/qt-project.org/formeditor"
BASE
@@ -840,14 +326,11 @@ qt_add_resource(DesignerComponents "formeditor"
FILES
${formeditor_resource_files}
)
-set_source_files_properties("../formeditor/defaultbrushes.xml"
- PROPERTIES QT_RESOURCE_ALIAS "defaultbrushes.xml"
-)
set(formeditor1_resource_files
- "defaultbrushes.xml"
+ "../formeditor/defaultbrushes.xml"
)
-qt_add_resource(DesignerComponents "formeditor1"
+qt_internal_add_resource(DesignerComponentsPrivate "formeditor1"
PREFIX
"/qt-project.org/brushes"
BASE
@@ -855,14 +338,11 @@ qt_add_resource(DesignerComponents "formeditor1"
FILES
${formeditor1_resource_files}
)
-set_source_files_properties("../widgetbox/widgetbox.xml"
- PROPERTIES QT_RESOURCE_ALIAS "widgetbox.xml"
-)
set(widgetbox_resource_files
- "widgetbox.xml"
+ "../widgetbox/widgetbox.xml"
)
-qt_add_resource(DesignerComponents "widgetbox"
+qt_internal_add_resource(DesignerComponentsPrivate "widgetbox"
PREFIX
"/qt-project.org/widgetbox"
BASE
@@ -871,26 +351,19 @@ qt_add_resource(DesignerComponents "widgetbox"
${widgetbox_resource_files}
)
-
-#### Keys ignored in scope 1:.:.:lib.pro:<TRUE>:
-# MODULE = "designercomponents"
-
## Scopes:
#####################################################################
-qt_extend_target(DesignerComponents CONDITION static
+qt_internal_extend_target(DesignerComponentsPrivate CONDITION NOT QT_BUILD_SHARED_LIBS
DEFINES
QT_DESIGNER_STATIC
-)
-
-qt_extend_target(DesignerComponents CONDITION NOT QT_BUILD_SHARED_LIBS
INCLUDE_DIRECTORIES
../../../../shared/findwidget
../../../../shared/qtgradienteditor
../../../../shared/qtpropertybrowser
)
-qt_extend_target(DesignerComponents CONDITION QT_BUILD_SHARED_LIBS
+qt_internal_extend_target(DesignerComponentsPrivate CONDITION QT_BUILD_SHARED_LIBS
SOURCES
../../../../shared/findwidget/abstractfindwidget.cpp ../../../../shared/findwidget/abstractfindwidget.h
../../../../shared/findwidget/itemviewfindwidget.cpp ../../../../shared/findwidget/itemviewfindwidget.h
@@ -912,46 +385,19 @@ qt_extend_target(DesignerComponents CONDITION QT_BUILD_SHARED_LIBS
if(QT_BUILD_SHARED_LIBS)
# Resources:
- set_source_files_properties("../../../../shared/findwidget/images/mac/closetab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/closetab.png"
- )
- set_source_files_properties("../../../../shared/findwidget/images/mac/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/next.png"
- )
- set_source_files_properties("../../../../shared/findwidget/images/mac/previous.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/previous.png"
- )
- set_source_files_properties("../../../../shared/findwidget/images/mac/searchfind.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/searchfind.png"
- )
- set_source_files_properties("../../../../shared/findwidget/images/win/closetab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/closetab.png"
- )
- set_source_files_properties("../../../../shared/findwidget/images/win/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/next.png"
- )
- set_source_files_properties("../../../../shared/findwidget/images/win/previous.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/previous.png"
- )
- set_source_files_properties("../../../../shared/findwidget/images/win/searchfind.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/searchfind.png"
- )
- set_source_files_properties("../../../../shared/findwidget/images/wrap.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/wrap.png"
- )
set(findwidget_resource_files
- "images/mac/closetab.png"
- "images/mac/next.png"
- "images/mac/previous.png"
- "images/mac/searchfind.png"
- "images/win/closetab.png"
- "images/win/next.png"
- "images/win/previous.png"
- "images/win/searchfind.png"
- "images/wrap.png"
+ "../../../../shared/findwidget/images/mac/closetab.png"
+ "../../../../shared/findwidget/images/mac/next.png"
+ "../../../../shared/findwidget/images/mac/previous.png"
+ "../../../../shared/findwidget/images/mac/searchfind.png"
+ "../../../../shared/findwidget/images/win/closetab.png"
+ "../../../../shared/findwidget/images/win/next.png"
+ "../../../../shared/findwidget/images/win/previous.png"
+ "../../../../shared/findwidget/images/win/searchfind.png"
+ "../../../../shared/findwidget/images/wrap.png"
)
- qt_add_resource(DesignerComponents "findwidget"
+ qt_internal_add_resource(DesignerComponentsPrivate "findwidget"
PREFIX
"/qt-project.org/shared"
BASE
@@ -959,82 +405,28 @@ if(QT_BUILD_SHARED_LIBS)
FILES
${findwidget_resource_files}
)
- set_source_files_properties("../../../../shared/qtpropertybrowser/images/cursor-arrow.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-arrow.png"
- )
- set_source_files_properties("../../../../shared/qtpropertybrowser/images/cursor-busy.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-busy.png"
- )
- set_source_files_properties("../../../../shared/qtpropertybrowser/images/cursor-closedhand.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-closedhand.png"
- )
- set_source_files_properties("../../../../shared/qtpropertybrowser/images/cursor-cross.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-cross.png"
- )
- set_source_files_properties("../../../../shared/qtpropertybrowser/images/cursor-forbidden.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-forbidden.png"
- )
- set_source_files_properties("../../../../shared/qtpropertybrowser/images/cursor-hand.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-hand.png"
- )
- set_source_files_properties("../../../../shared/qtpropertybrowser/images/cursor-hsplit.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-hsplit.png"
- )
- set_source_files_properties("../../../../shared/qtpropertybrowser/images/cursor-ibeam.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-ibeam.png"
- )
- set_source_files_properties("../../../../shared/qtpropertybrowser/images/cursor-openhand.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-openhand.png"
- )
- set_source_files_properties("../../../../shared/qtpropertybrowser/images/cursor-sizeall.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-sizeall.png"
- )
- set_source_files_properties("../../../../shared/qtpropertybrowser/images/cursor-sizeb.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-sizeb.png"
- )
- set_source_files_properties("../../../../shared/qtpropertybrowser/images/cursor-sizef.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-sizef.png"
- )
- set_source_files_properties("../../../../shared/qtpropertybrowser/images/cursor-sizeh.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-sizeh.png"
- )
- set_source_files_properties("../../../../shared/qtpropertybrowser/images/cursor-sizev.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-sizev.png"
- )
- set_source_files_properties("../../../../shared/qtpropertybrowser/images/cursor-uparrow.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-uparrow.png"
- )
- set_source_files_properties("../../../../shared/qtpropertybrowser/images/cursor-vsplit.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-vsplit.png"
- )
- set_source_files_properties("../../../../shared/qtpropertybrowser/images/cursor-wait.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-wait.png"
- )
- set_source_files_properties("../../../../shared/qtpropertybrowser/images/cursor-whatsthis.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-whatsthis.png"
- )
set(qtpropertybrowser_resource_files
- "images/cursor-arrow.png"
- "images/cursor-busy.png"
- "images/cursor-closedhand.png"
- "images/cursor-cross.png"
- "images/cursor-forbidden.png"
- "images/cursor-hand.png"
- "images/cursor-hsplit.png"
- "images/cursor-ibeam.png"
- "images/cursor-openhand.png"
- "images/cursor-sizeall.png"
- "images/cursor-sizeb.png"
- "images/cursor-sizef.png"
- "images/cursor-sizeh.png"
- "images/cursor-sizev.png"
- "images/cursor-uparrow.png"
- "images/cursor-vsplit.png"
- "images/cursor-wait.png"
- "images/cursor-whatsthis.png"
+ "../../../../shared/qtpropertybrowser/images/cursor-arrow.png"
+ "../../../../shared/qtpropertybrowser/images/cursor-busy.png"
+ "../../../../shared/qtpropertybrowser/images/cursor-closedhand.png"
+ "../../../../shared/qtpropertybrowser/images/cursor-cross.png"
+ "../../../../shared/qtpropertybrowser/images/cursor-forbidden.png"
+ "../../../../shared/qtpropertybrowser/images/cursor-hand.png"
+ "../../../../shared/qtpropertybrowser/images/cursor-hsplit.png"
+ "../../../../shared/qtpropertybrowser/images/cursor-ibeam.png"
+ "../../../../shared/qtpropertybrowser/images/cursor-openhand.png"
+ "../../../../shared/qtpropertybrowser/images/cursor-sizeall.png"
+ "../../../../shared/qtpropertybrowser/images/cursor-sizeb.png"
+ "../../../../shared/qtpropertybrowser/images/cursor-sizef.png"
+ "../../../../shared/qtpropertybrowser/images/cursor-sizeh.png"
+ "../../../../shared/qtpropertybrowser/images/cursor-sizev.png"
+ "../../../../shared/qtpropertybrowser/images/cursor-uparrow.png"
+ "../../../../shared/qtpropertybrowser/images/cursor-vsplit.png"
+ "../../../../shared/qtpropertybrowser/images/cursor-wait.png"
+ "../../../../shared/qtpropertybrowser/images/cursor-whatsthis.png"
)
- qt_add_resource(DesignerComponents "qtpropertybrowser"
+ qt_internal_add_resource(DesignerComponentsPrivate "qtpropertybrowser"
PREFIX
"/qt-project.org/qtpropertybrowser"
BASE
diff --git a/src/designer/src/components/lib/lib.pro b/src/designer/src/components/lib/lib.pro
deleted file mode 100644
index 3f6fae950..000000000
--- a/src/designer/src/components/lib/lib.pro
+++ /dev/null
@@ -1,42 +0,0 @@
-TARGET = QtDesignerComponents
-MODULE = designercomponents
-
-QT = core gui-private widgets-private designer-private
-QT_PRIVATE = xml
-CONFIG += internal_module create_cmake
-
-# QtDesignerComponents uses
-DEFINES += QT_STATICPLUGIN
-DEFINES += QDESIGNER_COMPONENTS_LIBRARY
-
-static:DEFINES += QT_DESIGNER_STATIC
-
-SOURCES += qdesigner_components.cpp
-
-INCLUDEPATH += . .. \
- $$PWD/../../lib/components \
- $$PWD/../../lib/sdk \
- $$PWD/../../lib/extension \
- $$PWD/../../lib/shared
-
-include(../propertyeditor/propertyeditor.pri)
-include(../objectinspector/objectinspector.pri)
-include(../signalsloteditor/signalsloteditor.pri)
-include(../formeditor/formeditor.pri)
-include(../widgetbox/widgetbox.pri)
-include(../buddyeditor/buddyeditor.pri)
-include(../taskmenu/taskmenu.pri)
-include(../tabordereditor/tabordereditor.pri)
-
-PRECOMPILED_HEADER= lib_pch.h
-
-# MinGW GCC cc1plus crashes when using precompiled header
-# Date Checked: 3rd September 2012
-#
-# Compilers known to be affected:
-# * MinGW-builds GCC 4.6.3 64-bit
-# * MinGW-builds GCC 4.7.1 64-bit
-# * MinGW-w64 GCC 4.7.1 64-bit (rubenvb)
-mingw:CONFIG -= precompile_header
-
-load(qt_module)
diff --git a/src/designer/src/components/lib/lib_pch.h b/src/designer/src/components/lib/lib_pch.h
index 1c7a758ee..6befeb751 100644
--- a/src/designer/src/components/lib/lib_pch.h
+++ b/src/designer/src/components/lib/lib_pch.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#if defined __cplusplus
#include <QtDesigner/QtDesigner>
diff --git a/src/designer/src/components/lib/qdesigner_components.cpp b/src/designer/src/components/lib/qdesigner_components.cpp
index 29226f95a..02e38a24b 100644
--- a/src/designer/src/components/lib/qdesigner_components.cpp
+++ b/src/designer/src/components/lib/qdesigner_components.cpp
@@ -1,34 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QtDesigner/QDesignerComponents>
#include <actioneditor_p.h>
+#include <pluginmanager_p.h>
#include <widgetdatabase_p.h>
#include <widgetfactory_p.h>
@@ -89,6 +65,8 @@ static void initInstances()
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
/*!
\class QDesignerComponents
\brief The QDesignerComponents class provides a central resource for the various components
@@ -119,12 +97,25 @@ void QDesignerComponents::initializePlugins(QDesignerFormEditorInterface *core)
QDesignerIntegration::initializePlugins(core);
}
+// ### fixme Qt 7 createFormEditorWithPluginPaths->createFormEditor
+
/*!
Constructs a form editor interface with the given \a parent.*/
QDesignerFormEditorInterface *QDesignerComponents::createFormEditor(QObject *parent)
{
+ return createFormEditorWithPluginPaths({}, parent);
+}
+
+/*!
+ Constructs a form editor interface with the given \a pluginPaths and the \a parent.
+ \since 6.7
+*/
+QDesignerFormEditorInterface *
+ QDesignerComponents::createFormEditorWithPluginPaths(const QStringList &pluginPaths,
+ QObject *parent)
+{
initInstances();
- return new qdesigner_internal::FormEditor(parent);
+ return new qdesigner_internal::FormEditor(pluginPaths, parent);
}
/*!
@@ -146,18 +137,17 @@ static inline void setMinorVersion(int minorVersion, int *qtVersion)
static inline QString widgetBoxFileName(int qtVersion, const QDesignerLanguageExtension *lang = nullptr)
{
QString rc; {
- const QChar dot = QLatin1Char('.');
QTextStream str(&rc);
- str << QDir::homePath() << QDir::separator() << QStringLiteral(".designer") << QDir::separator()
- << QStringLiteral("widgetbox");
+ str << QDir::homePath() << QDir::separator() << ".designer" << QDir::separator()
+ << "widgetbox";
// The naming convention using the version was introduced with 4.4
const int major = qtMajorVersion(qtVersion);
const int minor = qtMinorVersion(qtVersion);
if (major >= 4 && minor >= 4)
- str << major << dot << minor;
+ str << major << '.' << minor;
if (lang)
- str << dot << lang->uiExtension();
- str << QStringLiteral(".xml");
+ str << '.' << lang->uiExtension();
+ str << ".xml";
}
return rc;
}
@@ -179,7 +169,7 @@ QDesignerWidgetBoxInterface *QDesignerComponents::createWidgetBox(QDesignerFormE
}
}
- widgetBox->setFileName(QStringLiteral(":/qt-project.org/widgetbox/widgetbox.xml"));
+ widgetBox->setFileName(u":/qt-project.org/widgetbox/widgetbox.xml"_s);
widgetBox->load();
} while (false);
@@ -234,7 +224,7 @@ QWidget *QDesignerComponents::createResourceEditor(QDesignerFormEditorInterface
}
QtResourceView *resourceView = new QtResourceView(core, parent);
resourceView->setResourceModel(core->resourceModel());
- resourceView->setSettingsKey(QStringLiteral("ResourceBrowser"));
+ resourceView->setSettingsKey(u"ResourceBrowser"_s);
// Note for integrators: make sure you call createResourceEditor() after you instantiated your subclass of designer integration
// (designer doesn't do that since by default editing resources is enabled)
const QDesignerIntegrationInterface *integration = core->integration();
@@ -250,5 +240,16 @@ QWidget *QDesignerComponents::createSignalSlotEditor(QDesignerFormEditorInterfac
return new qdesigner_internal::SignalSlotEditorWindow(core, parent);
}
+/*!
+ Returns the default plugin paths of Qt Widgets Designer's plugin manager.
+
+ \return Plugin paths
+ \since 6.7
+*/
+QStringList QDesignerComponents::defaultPluginPaths()
+{
+ return QDesignerPluginManager::defaultPluginPaths();
+}
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/objectinspector/objectinspector.cpp b/src/designer/src/components/objectinspector/objectinspector.cpp
index c34df34f9..18096065b 100644
--- a/src/designer/src/components/objectinspector/objectinspector.cpp
+++ b/src/designer/src/components/objectinspector/objectinspector.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "objectinspector.h"
#include "objectinspectormodel_p.h"
@@ -63,6 +38,7 @@
#include <QtCore/qdebug.h>
#include <QtCore/qlist.h>
+#include <QtCore/qpointer.h>
#include <QtCore/qsortfilterproxymodel.h>
QT_BEGIN_NAMESPACE
@@ -89,8 +65,6 @@ namespace {
UnmanagedWidgetSelection,
// A widget managed by the form window cursor
ManagedWidgetSelection };
-
- using QObjectVector = QList<QObject *>;
}
static inline SelectionType selectionType(const QDesignerFormWindowInterface *fw, QObject *o)
@@ -208,7 +182,7 @@ public:
QModelIndexList indexesOf(QObject *o) const;
QObject *objectAt(const QModelIndex &index) const;
- QObjectVector indexesToObjects(const QModelIndexList &indexes) const;
+ QObjectList indexesToObjects(const QModelIndexList &indexes) const;
void slotHeaderDoubleClicked(int column) { m_treeView->resizeColumnToContents(column); }
void slotPopupContextMenu(QWidget *parent, const QPoint &pos);
@@ -255,6 +229,8 @@ ObjectInspector::ObjectInspectorPrivate::ObjectInspectorPrivate(QDesignerFormEdi
m_filterModel->setSourceModel(m_model);
m_filterModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
m_treeView->setModel(m_filterModel);
+ m_treeView->setSortingEnabled(true);
+ m_treeView->sortByColumn(0, Qt::AscendingOrder);
m_treeView->setItemDelegate(new ObjectInspectorDelegate);
m_treeView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
m_treeView->header()->setSectionResizeMode(1, QHeaderView::Stretch);
@@ -454,12 +430,12 @@ void ObjectInspector::ObjectInspectorPrivate::selectIndexRange(const QModelIndex
selectFlags |= QItemSelectionModel::Current;
QItemSelectionModel *selectionModel = m_treeView->selectionModel();
- const QModelIndexList::const_iterator cend = indexes.constEnd();
- for (QModelIndexList::const_iterator it = indexes.constBegin(); it != cend; ++it)
- if (it->column() == 0) {
- selectionModel->select(*it, selectFlags);
+ for (const auto &mi : indexes) {
+ if (mi.column() == 0) {
+ selectionModel->select(mi, selectFlags);
selectFlags &= ~(QItemSelectionModel::Clear|QItemSelectionModel::Current);
}
+ }
if (flags & MakeCurrent)
m_treeView->scrollTo(indexes.constFirst(), QAbstractItemView::EnsureVisible);
}
@@ -566,16 +542,16 @@ void ObjectInspector::ObjectInspectorPrivate::applyCursorSelection()
}
// Synchronize managed widget in the form (select in cursor). Block updates
-static int selectInCursor(FormWindowBase *fw, const QObjectVector &objects, bool value)
+static int selectInCursor(FormWindowBase *fw, const QObjectList &objects, bool value)
{
int rc = 0;
const bool blocked = fw->blockSelectionChanged(true);
- const QObjectVector::const_iterator ocend = objects.constEnd();
- for (QObjectVector::const_iterator it = objects.constBegin(); it != ocend; ++it)
- if (selectionType(fw, *it) == ManagedWidgetSelection) {
- fw->selectWidget(static_cast<QWidget *>(*it), value);
+ for (auto *o : objects) {
+ if (selectionType(fw, o) == ManagedWidgetSelection) {
+ fw->selectWidget(static_cast<QWidget *>(o), value);
rc++;
}
+ }
fw->blockSelectionChanged(blocked);
return rc;
}
@@ -590,16 +566,16 @@ void ObjectInspector::ObjectInspectorPrivate::slotSelectionChanged(const QItemSe
// Convert indexes to object vectors taking into account that
// some index lists are multicolumn ranges
-QObjectVector ObjectInspector::ObjectInspectorPrivate::indexesToObjects(const QModelIndexList &indexes) const
+QObjectList ObjectInspector::ObjectInspectorPrivate::indexesToObjects(const QModelIndexList &indexes) const
{
+ QObjectList rc;
if (indexes.isEmpty())
- return QObjectVector();
- QObjectVector rc;
+ return rc;
rc.reserve(indexes.size());
- const QModelIndexList::const_iterator icend = indexes.constEnd();
- for (QModelIndexList::const_iterator it = indexes.constBegin(); it != icend; ++it)
- if (it->column() == 0)
- rc.append(objectAt(*it));
+ for (const auto &mi : indexes) {
+ if (mi.column() == 0)
+ rc.append(objectAt(mi));
+ }
return rc;
}
@@ -609,9 +585,8 @@ bool ObjectInspector::ObjectInspectorPrivate::checkManagedWidgetSelection(const
{
bool isManagedWidgetSelection = false;
QItemSelectionModel *selectionModel = m_treeView->selectionModel();
- const QModelIndexList::const_iterator cscend = rowSelection.constEnd();
- for (QModelIndexList::const_iterator it = rowSelection.constBegin(); it != cscend; ++it) {
- QObject *object = objectAt(*it);
+ for (const auto &mi : rowSelection) {
+ QObject *object = objectAt(mi);
if (selectionType(m_formWindow, object) == ManagedWidgetSelection) {
isManagedWidgetSelection = true;
break;
@@ -622,10 +597,10 @@ bool ObjectInspector::ObjectInspectorPrivate::checkManagedWidgetSelection(const
return false;
// Need to unselect unmanaged ones
const bool blocked = selectionModel->blockSignals(true);
- for (QModelIndexList::const_iterator it = rowSelection.constBegin(); it != cscend; ++it) {
- QObject *object = objectAt(*it);
+ for (const auto &mi : rowSelection) {
+ QObject *object = objectAt(mi);
if (selectionType(m_formWindow, object) != ManagedWidgetSelection)
- selectionModel->select(*it, QItemSelectionModel::Deselect|QItemSelectionModel::Rows);
+ selectionModel->select(mi, QItemSelectionModel::Deselect|QItemSelectionModel::Rows);
}
selectionModel->blockSignals(blocked);
return true;
@@ -634,8 +609,8 @@ bool ObjectInspector::ObjectInspectorPrivate::checkManagedWidgetSelection(const
void ObjectInspector::ObjectInspectorPrivate::synchronizeSelection(const QItemSelection & selectedSelection, const QItemSelection &deselectedSelection)
{
// Synchronize form window cursor.
- const QObjectVector deselected = indexesToObjects(deselectedSelection.indexes());
- const QObjectVector newlySelected = indexesToObjects(selectedSelection.indexes());
+ const QObjectList deselected = indexesToObjects(deselectedSelection.indexes());
+ const QObjectList newlySelected = indexesToObjects(selectedSelection.indexes());
const QModelIndexList currentSelectedIndexes = m_treeView->selectionModel()->selectedRows(0);
diff --git a/src/designer/src/components/objectinspector/objectinspector.h b/src/designer/src/components/objectinspector/objectinspector.h
index 2aa53cdb9..c856d7d91 100644
--- a/src/designer/src/components/objectinspector/objectinspector.h
+++ b/src/designer/src/components/objectinspector/objectinspector.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef OBJECTINSPECTOR_H
#define OBJECTINSPECTOR_H
@@ -77,6 +52,6 @@ private:
} // namespace qdesigner_internal
-#endif // OBJECTINSPECTOR_H
-
QT_END_NAMESPACE
+
+#endif // OBJECTINSPECTOR_H
diff --git a/src/designer/src/components/objectinspector/objectinspector.pri b/src/designer/src/components/objectinspector/objectinspector.pri
deleted file mode 100644
index ee666acb0..000000000
--- a/src/designer/src/components/objectinspector/objectinspector.pri
+++ /dev/null
@@ -1,16 +0,0 @@
-# --- The Find widget is also linked into the designer_shared library.
-# Avoid conflict when linking statically
-contains(CONFIG, static) {
- INCLUDEPATH *= ../../../../shared/findwidget
-} else {
- include(../../../../shared/findwidget/findwidget.pri)
-}
-
-INCLUDEPATH += $$PWD
-
-HEADERS += $$PWD/objectinspector.h \
- $$PWD/objectinspectormodel_p.h \
- $$PWD/objectinspector_global.h
-
-SOURCES += $$PWD/objectinspector.cpp \
- $$PWD/objectinspectormodel.cpp
diff --git a/src/designer/src/components/objectinspector/objectinspector_global.h b/src/designer/src/components/objectinspector/objectinspector_global.h
index 9c7162fdf..6a1185564 100644
--- a/src/designer/src/components/objectinspector/objectinspector_global.h
+++ b/src/designer/src/components/objectinspector/objectinspector_global.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef OBJECTINSPECTOR_GLOBAL_H
#define OBJECTINSPECTOR_GLOBAL_H
@@ -43,6 +18,6 @@ QT_BEGIN_NAMESPACE
#define QT_OBJECTINSPECTOR_EXPORT
#endif
-#endif // OBJECTINSPECTOR_GLOBAL_H
-
QT_END_NAMESPACE
+
+#endif // OBJECTINSPECTOR_GLOBAL_H
diff --git a/src/designer/src/components/objectinspector/objectinspectormodel.cpp b/src/designer/src/components/objectinspector/objectinspectormodel.cpp
index c539f8f3d..5168d4ff8 100644
--- a/src/designer/src/components/objectinspector/objectinspectormodel.cpp
+++ b/src/designer/src/components/objectinspector/objectinspectormodel.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "objectinspectormodel_p.h"
@@ -55,6 +30,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace {
enum { DataRole = 1000 };
}
@@ -63,11 +40,6 @@ static inline QObject *objectOfItem(const QStandardItem *item) {
return qvariant_cast<QObject *>(item->data(DataRole));
}
-static bool sortEntry(const QObject *a, const QObject *b)
-{
- return a->objectName() < b->objectName();
-}
-
static bool sameIcon(const QIcon &i1, const QIcon &i2)
{
if (i1.isNull() && i2.isNull())
@@ -77,8 +49,10 @@ static bool sameIcon(const QIcon &i1, const QIcon &i2)
return i1.cacheKey() == i2.cacheKey();
}
-static inline bool isNameColumnEditable(const QObject *)
+static inline bool isNameColumnEditable(const QObject *o)
{
+ if (auto *action = qobject_cast<const QAction *>(o))
+ return !action->isSeparator();
return true;
}
@@ -117,7 +91,7 @@ namespace qdesigner_internal {
};
ModelRecursionContext::ModelRecursionContext(QDesignerFormEditorInterface *c, const QString &sepName) :
- designerPrefix(QStringLiteral("QDesigner")),
+ designerPrefix(u"QDesigner"_s),
separator(sepName),
core(c),
db(c->widgetDataBase()),
@@ -141,7 +115,7 @@ namespace qdesigner_internal {
ObjectData::ObjectData(QObject *parent, QObject *object, const ModelRecursionContext &ctx) :
m_parent(parent),
m_object(object),
- m_className(QLatin1String(object->metaObject()->className())),
+ m_className(QLatin1StringView(object->metaObject()->className())),
m_objectName(object->objectName())
{
@@ -187,7 +161,7 @@ namespace qdesigner_internal {
if (const QLayout *layout = w->layout()) {
m_type = LayoutWidget;
m_managedLayoutType = LayoutInfo::layoutType(ctx.core, layout);
- m_className = QLatin1String(layout->metaObject()->className());
+ m_className = QLatin1StringView(layout->metaObject()->className());
m_objectName = layout->objectName();
}
return;
@@ -289,9 +263,7 @@ namespace qdesigner_internal {
if (!object->children().isEmpty()) {
ButtonGroupList buttonGroups;
- QObjectList children = object->children();
- std::sort(children.begin(), children.end(), sortEntry);
- for (QObject *childObject : qAsConst(children)) {
+ for (QObject *childObject : object->children()) {
// Managed child widgets unless we had a container extension
if (childObject->isWidgetType()) {
if (!containerExtension) {
@@ -308,7 +280,7 @@ namespace qdesigner_internal {
}
// Add button groups
if (!buttonGroups.isEmpty()) {
- for (QButtonGroup *group : qAsConst(buttonGroups))
+ for (QButtonGroup *group : std::as_const(buttonGroups))
createModelRecursion(fwi, object, group, model, ctx);
}
} // has children
@@ -337,13 +309,13 @@ namespace qdesigner_internal {
setColumnCount(NumColumns);
setHorizontalHeaderLabels(headers);
// Icons
- m_icons.layoutIcons[LayoutInfo::NoLayout] = createIconSet(QStringLiteral("editbreaklayout.png"));
- m_icons.layoutIcons[LayoutInfo::HSplitter] = createIconSet(QStringLiteral("edithlayoutsplit.png"));
- m_icons.layoutIcons[LayoutInfo::VSplitter] = createIconSet(QStringLiteral("editvlayoutsplit.png"));
- m_icons.layoutIcons[LayoutInfo::HBox] = createIconSet(QStringLiteral("edithlayout.png"));
- m_icons.layoutIcons[LayoutInfo::VBox] = createIconSet(QStringLiteral("editvlayout.png"));
- m_icons.layoutIcons[LayoutInfo::Grid] = createIconSet(QStringLiteral("editgrid.png"));
- m_icons.layoutIcons[LayoutInfo::Form] = createIconSet(QStringLiteral("editform.png"));
+ m_icons.layoutIcons[LayoutInfo::NoLayout] = createIconSet("editbreaklayout.png"_L1);
+ m_icons.layoutIcons[LayoutInfo::HSplitter] = createIconSet("edithlayoutsplit.png"_L1);
+ m_icons.layoutIcons[LayoutInfo::VSplitter] = createIconSet("editvlayoutsplit.png"_L1);
+ m_icons.layoutIcons[LayoutInfo::HBox] = createIconSet("edithlayout.png"_L1);
+ m_icons.layoutIcons[LayoutInfo::VBox] = createIconSet("editvlayout.png"_L1);
+ m_icons.layoutIcons[LayoutInfo::Grid] = createIconSet("editgrid.png"_L1);
+ m_icons.layoutIcons[LayoutInfo::Form] = createIconSet("editform.png"_L1);
}
void ObjectInspectorModel::clearItems()
@@ -411,8 +383,8 @@ namespace qdesigner_internal {
if (newModel.isEmpty())
return;
- const ObjectModel::const_iterator mcend = newModel.constEnd();
- ObjectModel::const_iterator it = newModel.constBegin();
+ const auto mcend = newModel.cend();
+ auto it = newModel.cbegin();
// Set up root element
StandardItemList rootRow = createModelRow(it->object());
it->setItems(rootRow, m_icons);
@@ -439,10 +411,10 @@ namespace qdesigner_internal {
QObjectSet changedObjects;
- const int size = newModel.size();
+ const auto size = newModel.size();
Q_ASSERT(oldModel.size() == size);
- for (int i = 0; i < size; i++) {
- const ObjectData &newEntry = newModel[i];
+ for (qsizetype i = 0; i < size; ++i) {
+ const ObjectData &newEntry = newModel.at(i);
ObjectData &entry = oldModel[i];
// Has some data changed?
if (const unsigned changedMask = entry.compare(newEntry)) {
@@ -463,7 +435,7 @@ namespace qdesigner_internal {
const QVariant rc = QStandardItemModel::data(index, role);
// Return <noname> if the string is empty for the display role
// only (else, editing starts with <noname>).
- if (role == Qt::DisplayRole && rc.type() == QVariant::String) {
+ if (role == Qt::DisplayRole && rc.metaType().id() == QMetaType::QString) {
const QString s = rc.toString();
if (s.isEmpty()) {
static const QString noName = QCoreApplication::translate("ObjectInspectorModel", "<noname>");
@@ -482,7 +454,7 @@ namespace qdesigner_internal {
if (!object)
return false;
// Is this a layout widget?
- const QString nameProperty = isQLayoutWidget(object) ? QStringLiteral("layoutName") : QStringLiteral("objectName");
+ const QString nameProperty = isQLayoutWidget(object) ? u"layoutName"_s : u"objectName"_s;
m_formWindow->commandHistory()->push(createTextPropertyCommand(nameProperty, value.toString(), object, m_formWindow));
return true;
}
diff --git a/src/designer/src/components/objectinspector/objectinspectormodel_p.h b/src/designer/src/components/objectinspector/objectinspectormodel_p.h
index f138253a5..5ba4b83d3 100644
--- a/src/designer/src/components/objectinspector/objectinspectormodel_p.h
+++ b/src/designer/src/components/objectinspector/objectinspectormodel_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -44,6 +19,7 @@
#include <QtGui/qstandarditemmodel.h>
#include <QtGui/qicon.h>
+#include <QtCore/qcompare.h>
#include <QtCore/qstring.h>
#include <QtCore/qlist.h>
#include <QtCore/qmap.h>
@@ -99,6 +75,12 @@ namespace qdesigner_internal {
void setItemsDisplayData(const StandardItemList &row, const ObjectInspectorIcons &icons, unsigned mask) const;
private:
+ friend bool comparesEqual(const ObjectData &lhs, const ObjectData &rhs) noexcept
+ {
+ return lhs.m_parent == rhs.m_parent && lhs.m_object == rhs.m_object;
+ }
+ Q_DECLARE_EQUALITY_COMPARABLE(ObjectData)
+
void initObject(const ModelRecursionContext &ctx);
void initWidget(QWidget *w, const ModelRecursionContext &ctx);
@@ -111,9 +93,6 @@ namespace qdesigner_internal {
LayoutInfo::Type m_managedLayoutType = LayoutInfo::NoLayout;
};
- inline bool operator==(const ObjectData &e1, const ObjectData &e2) { return e1.equals(e2); }
- inline bool operator!=(const ObjectData &e1, const ObjectData &e2) { return !e1.equals(e2); }
-
using ObjectModel = QList<ObjectData>;
// QStandardItemModel for ObjectInspector. Uses ObjectData/ObjectModel
@@ -135,20 +114,18 @@ namespace qdesigner_internal {
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
private:
- typedef QMultiMap<QObject *,QModelIndex> ObjectIndexMultiMap;
-
void rebuild(const ObjectModel &newModel);
void updateItemContents(ObjectModel &oldModel, const ObjectModel &newModel);
void clearItems();
StandardItemList rowAt(QModelIndex index) const;
ObjectInspectorIcons m_icons;
- ObjectIndexMultiMap m_objectIndexMultiMap;
+ QMultiMap<QObject *, QModelIndex> m_objectIndexMultiMap;
ObjectModel m_model;
QPointer<QDesignerFormWindowInterface> m_formWindow;
};
} // namespace qdesigner_internal
-#endif // OBJECTINSPECTORMODEL_H
-
QT_END_NAMESPACE
+
+#endif // OBJECTINSPECTORMODEL_H
diff --git a/src/designer/src/components/propertyeditor/brushpropertymanager.cpp b/src/designer/src/components/propertyeditor/brushpropertymanager.cpp
index 41887cda2..2356e3843 100644
--- a/src/designer/src/components/propertyeditor/brushpropertymanager.cpp
+++ b/src/designer/src/components/propertyeditor/brushpropertymanager.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "brushpropertymanager.h"
#include "qtpropertymanager.h"
@@ -55,6 +30,8 @@ QT_TRANSLATE_NOOP("BrushPropertyManager", "Crossing diagonal"),
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
BrushPropertyManager::BrushPropertyManager() = default;
@@ -124,7 +101,7 @@ static void clearBrushIcons()
brushIcons()->clear();
}
-const BrushPropertyManager::EnumIndexIconMap &BrushPropertyManager::brushStyleIcons()
+const QMap<int, QIcon> &BrushPropertyManager::brushStyleIcons()
{
// Create a map of icons for the brush style editor
if (brushIcons()->empty()) {
@@ -145,6 +122,8 @@ QString BrushPropertyManager::brushStyleIndexToString(int brushStyleIndex)
return brushStyleIndex < brushStyleCount ? QCoreApplication::translate("BrushPropertyManager", brushStyles[brushStyleIndex]) : QString();
}
+BrushPropertyManager::~BrushPropertyManager() = default;
+
void BrushPropertyManager::initializeProperty(QtVariantPropertyManager *vm, QtProperty *property, int enumTypeId)
{
m_brushValues.insert(property, QBrush());
@@ -154,12 +133,13 @@ void BrushPropertyManager::initializeProperty(QtVariantPropertyManager *vm, QtPr
QStringList styles;
for (const char *brushStyle : brushStyles)
styles.push_back(QCoreApplication::translate("BrushPropertyManager", brushStyle));
- styleSubProperty->setAttribute(QStringLiteral("enumNames"), styles);
- styleSubProperty->setAttribute(QStringLiteral("enumIcons"), QVariant::fromValue(brushStyleIcons()));
+ styleSubProperty->setAttribute(u"enumNames"_s, styles);
+ styleSubProperty->setAttribute(u"enumIcons"_s, QVariant::fromValue(brushStyleIcons()));
m_brushPropertyToStyleSubProperty.insert(property, styleSubProperty);
m_brushStyleSubPropertyToProperty.insert(styleSubProperty, property);
// color
- QtVariantProperty *colorSubProperty = vm->addProperty(QVariant::Color, QCoreApplication::translate("BrushPropertyManager", "Color"));
+ QtVariantProperty *colorSubProperty =
+ vm->addProperty(QMetaType::QColor, QCoreApplication::translate("BrushPropertyManager", "Color"));
property->addSubProperty(colorSubProperty);
m_brushPropertyToColorSubProperty.insert(property, colorSubProperty);
m_brushColorSubPropertyToProperty.insert(colorSubProperty, property);
@@ -167,24 +147,24 @@ void BrushPropertyManager::initializeProperty(QtVariantPropertyManager *vm, QtPr
bool BrushPropertyManager::uninitializeProperty(QtProperty *property)
{
- const PropertyBrushMap::iterator brit = m_brushValues.find(property); // Brushes
+ const auto brit = m_brushValues.find(property); // Brushes
if (brit == m_brushValues.end())
return false;
m_brushValues.erase(brit);
// style
- PropertyToPropertyMap::iterator subit = m_brushPropertyToStyleSubProperty.find(property);
- if (subit != m_brushPropertyToStyleSubProperty.end()) {
- QtProperty *styleProp = subit.value();
+ const auto styleIt = m_brushPropertyToStyleSubProperty.find(property);
+ if (styleIt != m_brushPropertyToStyleSubProperty.end()) {
+ QtProperty *styleProp = styleIt .value();
m_brushStyleSubPropertyToProperty.remove(styleProp);
- m_brushPropertyToStyleSubProperty.erase(subit);
+ m_brushPropertyToStyleSubProperty.erase(styleIt );
delete styleProp;
}
// color
- subit = m_brushPropertyToColorSubProperty.find(property);
- if (subit != m_brushPropertyToColorSubProperty.end()) {
- QtProperty *colorProp = subit.value();
+ const auto colorIt = m_brushPropertyToColorSubProperty.find(property);
+ if (colorIt != m_brushPropertyToColorSubProperty.end()) {
+ QtProperty *colorProp = colorIt .value();
m_brushColorSubPropertyToProperty.remove(colorProp);
- m_brushPropertyToColorSubProperty.erase(subit);
+ m_brushPropertyToColorSubProperty.erase(colorIt );
delete colorProp;
}
return true;
@@ -192,7 +172,7 @@ bool BrushPropertyManager::uninitializeProperty(QtProperty *property)
void BrushPropertyManager::slotPropertyDestroyed(QtProperty *property)
{
- PropertyToPropertyMap::iterator subit = m_brushStyleSubPropertyToProperty.find(property);
+ auto subit = m_brushStyleSubPropertyToProperty.find(property);
if (subit != m_brushStyleSubPropertyToProperty.end()) {
m_brushPropertyToStyleSubProperty[subit.value()] = 0;
m_brushStyleSubPropertyToProperty.erase(subit);
@@ -207,8 +187,8 @@ void BrushPropertyManager::slotPropertyDestroyed(QtProperty *property)
int BrushPropertyManager::valueChanged(QtVariantPropertyManager *vm, QtProperty *property, const QVariant &value)
{
- switch (value.type()) {
- case QVariant::Int: // Style subproperty?
+ switch (value.metaType().id()) {
+ case QMetaType::Int: // Style subproperty?
if (QtProperty *brushProperty = m_brushStyleSubPropertyToProperty.value(property, 0)) {
const QBrush oldValue = m_brushValues.value(brushProperty);
QBrush newBrush = oldValue;
@@ -220,7 +200,7 @@ int BrushPropertyManager::valueChanged(QtVariantPropertyManager *vm, QtProperty
return DesignerPropertyManager::Changed;
}
break;
- case QVariant::Color: // Color subproperty?
+ case QMetaType::QColor: // Color subproperty?
if (QtProperty *brushProperty = m_brushColorSubPropertyToProperty.value(property, 0)) {
const QBrush oldValue = m_brushValues.value(brushProperty);
QBrush newBrush = oldValue;
@@ -239,9 +219,9 @@ int BrushPropertyManager::valueChanged(QtVariantPropertyManager *vm, QtProperty
int BrushPropertyManager::setValue(QtVariantPropertyManager *vm, QtProperty *property, const QVariant &value)
{
- if (value.type() != QVariant::Brush)
+ if (value.metaType().id() != QMetaType::QBrush)
return DesignerPropertyManager::NoMatch;
- const PropertyBrushMap::iterator brit = m_brushValues.find(property);
+ const auto brit = m_brushValues.find(property);
if (brit == m_brushValues.end())
return DesignerPropertyManager::NoMatch;
@@ -259,7 +239,7 @@ int BrushPropertyManager::setValue(QtVariantPropertyManager *vm, QtProperty *pro
bool BrushPropertyManager::valueText(const QtProperty *property, QString *text) const
{
- const PropertyBrushMap::const_iterator brit = m_brushValues.constFind(const_cast<QtProperty *>(property));
+ const auto brit = m_brushValues.constFind(property);
if (brit == m_brushValues.constEnd())
return false;
const QBrush &brush = brit.value();
@@ -271,7 +251,7 @@ bool BrushPropertyManager::valueText(const QtProperty *property, QString *text)
bool BrushPropertyManager::valueIcon(const QtProperty *property, QIcon *icon) const
{
- const PropertyBrushMap::const_iterator brit = m_brushValues.constFind(const_cast<QtProperty *>(property));
+ const auto brit = m_brushValues.constFind(property);
if (brit == m_brushValues.constEnd())
return false;
*icon = QtPropertyBrowserUtils::brushValueIcon(brit.value());
@@ -280,7 +260,7 @@ bool BrushPropertyManager::valueIcon(const QtProperty *property, QIcon *icon) co
bool BrushPropertyManager::value(const QtProperty *property, QVariant *v) const
{
- const PropertyBrushMap::const_iterator brit = m_brushValues.constFind(const_cast<QtProperty *>(property));
+ const auto brit = m_brushValues.constFind(property);
if (brit == m_brushValues.constEnd())
return false;
v->setValue(brit.value());
diff --git a/src/designer/src/components/propertyeditor/brushpropertymanager.h b/src/designer/src/components/propertyeditor/brushpropertymanager.h
index 5f2a81a00..8bfe7f5c6 100644
--- a/src/designer/src/components/propertyeditor/brushpropertymanager.h
+++ b/src/designer/src/components/propertyeditor/brushpropertymanager.h
@@ -1,35 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef BRUSHPROPERTYMANAGER_H
#define BRUSHPROPERTYMANAGER_H
-#include <QtCore/qmap.h>
+#include <QtCore/qhash.h>
#include <QtGui/qbrush.h>
#include <QtGui/qicon.h>
@@ -46,11 +21,11 @@ namespace qdesigner_internal {
// BrushPropertyManager: A mixin for DesignerPropertyManager that manages brush properties.
class BrushPropertyManager {
- BrushPropertyManager(const BrushPropertyManager&);
- BrushPropertyManager &operator=(const BrushPropertyManager&);
-
public:
+ Q_DISABLE_COPY_MOVE(BrushPropertyManager);
+
BrushPropertyManager();
+ ~BrushPropertyManager();
void initializeProperty(QtVariantPropertyManager *vm, QtProperty *property, int enumTypeId);
bool uninitializeProperty(QtProperty *property);
@@ -71,17 +46,15 @@ private:
static Qt::BrushStyle brushStyleIndexToStyle(int brushStyleIndex);
static QString brushStyleIndexToString(int brushStyleIndex);
- typedef QMap<int, QIcon> EnumIndexIconMap;
- static const EnumIndexIconMap &brushStyleIcons();
+ static const QMap<int, QIcon> &brushStyleIcons();
- typedef QMap<QtProperty *, QtProperty *> PropertyToPropertyMap;
+ using PropertyToPropertyMap = QHash<const QtProperty *, QtProperty *>;
PropertyToPropertyMap m_brushPropertyToStyleSubProperty;
PropertyToPropertyMap m_brushPropertyToColorSubProperty;
PropertyToPropertyMap m_brushStyleSubPropertyToProperty;
PropertyToPropertyMap m_brushColorSubPropertyToProperty;
- typedef QMap<QtProperty *, QBrush> PropertyBrushMap;
- PropertyBrushMap m_brushValues;
+ QHash<const QtProperty *, QBrush> m_brushValues;
};
}
diff --git a/src/designer/src/components/propertyeditor/designerpropertymanager.cpp b/src/designer/src/components/propertyeditor/designerpropertymanager.cpp
index 48a59b458..868087e2f 100644
--- a/src/designer/src/components/propertyeditor/designerpropertymanager.cpp
+++ b/src/designer/src/components/propertyeditor/designerpropertymanager.cpp
@@ -1,34 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "designerpropertymanager.h"
#include "qtpropertymanager.h"
#include "paletteeditorbutton.h"
+#include "pixmapeditor.h"
#include "qlonglongvalidator.h"
#include "stringlisteditorbutton.h"
#include "qtresourceview_p.h"
@@ -49,6 +25,7 @@
#include <abstractdialoggui_p.h>
#include <QtWidgets/qapplication.h>
+#include <QtWidgets/qcombobox.h>
#include <QtWidgets/qlabel.h>
#include <QtWidgets/qtoolbutton.h>
#include <QtWidgets/qboxlayout.h>
@@ -60,9 +37,6 @@
#include <QtWidgets/qkeysequenceedit.h>
#include <QtGui/qaction.h>
-#if QT_CONFIG(clipboard)
-#include <QtGui/qclipboard.h>
-#endif
#include <QtGui/qevent.h>
#include <QtCore/qdebug.h>
@@ -71,13 +45,16 @@
QT_BEGIN_NAMESPACE
-static const char *resettableAttributeC = "resettable";
-static const char *flagsAttributeC = "flags";
-static const char *validationModesAttributeC = "validationMode";
-static const char *superPaletteAttributeC = "superPalette";
-static const char *defaultResourceAttributeC = "defaultResource";
-static const char *fontAttributeC = "font";
-static const char *themeAttributeC = "theme";
+using namespace Qt::StringLiterals;
+
+static constexpr auto resettableAttributeC = "resettable"_L1;
+static constexpr auto flagsAttributeC = "flags"_L1;
+static constexpr auto validationModesAttributeC = "validationMode"_L1;
+static constexpr auto superPaletteAttributeC = "superPalette"_L1;
+static constexpr auto defaultResourceAttributeC = "defaultResource"_L1;
+static constexpr auto fontAttributeC = "font"_L1;
+static constexpr auto themeAttributeC = "theme"_L1;
+static constexpr auto themeEnumAttributeC = "themeEnum"_L1;
class DesignerFlagPropertyType
{
@@ -104,28 +81,29 @@ void TranslatablePropertyManager<PropertySheetValue>::initialize(QtVariantProper
{
m_values.insert(property, value);
- QtVariantProperty *translatable = m->addProperty(QVariant::Bool, DesignerPropertyManager::tr("translatable"));
+ QtVariantProperty *translatable = m->addProperty(QMetaType::Bool, DesignerPropertyManager::tr("translatable"));
translatable->setValue(value.translatable());
m_valueToTranslatable.insert(property, translatable);
m_translatableToValue.insert(translatable, property);
property->addSubProperty(translatable);
if (!DesignerPropertyManager::useIdBasedTranslations()) {
- QtVariantProperty *disambiguation = m->addProperty(QVariant::String, DesignerPropertyManager::tr("disambiguation"));
+ QtVariantProperty *disambiguation =
+ m->addProperty(QMetaType::QString, DesignerPropertyManager::tr("disambiguation"));
disambiguation->setValue(value.disambiguation());
m_valueToDisambiguation.insert(property, disambiguation);
m_disambiguationToValue.insert(disambiguation, property);
property->addSubProperty(disambiguation);
}
- QtVariantProperty *comment = m->addProperty(QVariant::String, DesignerPropertyManager::tr("comment"));
+ QtVariantProperty *comment = m->addProperty(QMetaType::QString, DesignerPropertyManager::tr("comment"));
comment->setValue(value.comment());
m_valueToComment.insert(property, comment);
m_commentToValue.insert(comment, property);
property->addSubProperty(comment);
if (DesignerPropertyManager::useIdBasedTranslations()) {
- QtVariantProperty *id = m->addProperty(QVariant::String, DesignerPropertyManager::tr("id"));
+ QtVariantProperty *id = m->addProperty(QMetaType::QString, DesignerPropertyManager::tr("id"));
id->setValue(value.id());
m_valueToId.insert(property, id);
m_idToValue.insert(id, property);
@@ -270,7 +248,7 @@ int TranslatablePropertyManager<PropertySheetValue>::setValue(QtVariantPropertyM
template <class PropertySheetValue>
bool TranslatablePropertyManager<PropertySheetValue>::value(const QtProperty *property, QVariant *rc) const
{
- const auto it = m_values.constFind(const_cast<QtProperty *>(property));
+ const auto it = m_values.constFind(property);
if (it == m_values.constEnd())
return false;
*rc = QVariant::fromValue(it.value());
@@ -439,7 +417,7 @@ void TextEditor::buttonClicked()
}
break;
case ValidationURL:
- if (oldText.isEmpty() || oldText.startsWith(QStringLiteral("qrc:")))
+ if (oldText.isEmpty() || oldText.startsWith("qrc:"_L1))
resourceActionActivated();
else
fileActionActivated();
@@ -456,15 +434,15 @@ void TextEditor::buttonClicked()
void TextEditor::resourceActionActivated()
{
QString oldPath = m_editor->text();
- if (oldPath.startsWith(QStringLiteral("qrc:")))
+ if (oldPath.startsWith("qrc:"_L1))
oldPath.remove(0, 4);
// returns ':/file'
QString newPath = IconSelector::choosePixmapResource(m_core, m_core->resourceModel(), oldPath, this);
- if (newPath.startsWith(QLatin1Char(':')))
+ if (newPath.startsWith(u':'))
newPath.remove(0, 1);
if (newPath.isEmpty() || newPath == oldPath)
return;
- const QString newText = QStringLiteral("qrc:") + newPath;
+ const QString newText = "qrc:"_L1 + newPath;
m_editor->setText(newText);
emit textChanged(newText);
}
@@ -472,7 +450,7 @@ void TextEditor::resourceActionActivated()
void TextEditor::fileActionActivated()
{
QString oldPath = m_editor->text();
- if (oldPath.startsWith(QStringLiteral("file:")))
+ if (oldPath.startsWith("file:"_L1))
oldPath = oldPath.mid(5);
const QString newPath = m_core->dialogGui()->getOpenFileName(this, tr("Choose a File"), oldPath);
if (newPath.isEmpty() || newPath == oldPath)
@@ -482,314 +460,6 @@ void TextEditor::fileActionActivated()
emit textChanged(newText);
}
-// ------------ ThemeInputDialog
-
-class IconThemeDialog : public QDialog
-{
- Q_OBJECT
-public:
- static QString getTheme(QWidget *parent, const QString &theme, bool *ok);
-private:
- IconThemeDialog(QWidget *parent);
- IconThemeEditor *m_editor;
-};
-
-IconThemeDialog::IconThemeDialog(QWidget *parent)
- : QDialog(parent)
-{
- setWindowTitle(tr("Set Icon From Theme"));
-
- QVBoxLayout *layout = new QVBoxLayout(this);
- QLabel *label = new QLabel(tr("Input icon name from the current theme:"), this);
- m_editor = new IconThemeEditor(this);
- QDialogButtonBox *buttons = new QDialogButtonBox(this);
- buttons->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
-
- layout->addWidget(label);
- layout->addWidget(m_editor);
- layout->addWidget(buttons);
-
- connect(buttons, &QDialogButtonBox::accepted, this, &QDialog::accept);
- connect(buttons, &QDialogButtonBox::rejected, this, &QDialog::reject);
-}
-
-QString IconThemeDialog::getTheme(QWidget *parent, const QString &theme, bool *ok)
-{
- IconThemeDialog dlg(parent);
- dlg.m_editor->setTheme(theme);
- if (dlg.exec() == QDialog::Accepted) {
- *ok = true;
- return dlg.m_editor->theme();
- }
- *ok = false;
- return QString();
-}
-
-// ------------ PixmapEditor
-class PixmapEditor : public QWidget
-{
- Q_OBJECT
-public:
- PixmapEditor(QDesignerFormEditorInterface *core, QWidget *parent);
-
- void setSpacing(int spacing);
- void setPixmapCache(DesignerPixmapCache *cache);
- void setIconThemeModeEnabled(bool enabled);
-public slots:
- void setPath(const QString &path);
- void setTheme(const QString &theme);
- void setDefaultPixmap(const QPixmap &pixmap);
-
-signals:
- void pathChanged(const QString &path);
- void themeChanged(const QString &theme);
-
-protected:
- void contextMenuEvent(QContextMenuEvent *event) override;
-
-private slots:
- void defaultActionActivated();
- void resourceActionActivated();
- void fileActionActivated();
- void themeActionActivated();
-#if QT_CONFIG(clipboard)
- void copyActionActivated();
- void pasteActionActivated();
- void clipboardDataChanged();
-#endif
-private:
- void updateLabels();
- bool m_iconThemeModeEnabled;
- QDesignerFormEditorInterface *m_core;
- QLabel *m_pixmapLabel;
- QLabel *m_pathLabel;
- QToolButton *m_button;
- QAction *m_resourceAction;
- QAction *m_fileAction;
- QAction *m_themeAction;
- QAction *m_copyAction;
- QAction *m_pasteAction;
- QHBoxLayout *m_layout;
- QPixmap m_defaultPixmap;
- QString m_path;
- QString m_theme;
- DesignerPixmapCache *m_pixmapCache;
-};
-
-PixmapEditor::PixmapEditor(QDesignerFormEditorInterface *core, QWidget *parent) :
- QWidget(parent),
- m_iconThemeModeEnabled(false),
- m_core(core),
- m_pixmapLabel(new QLabel(this)),
- m_pathLabel(new QLabel(this)),
- m_button(new QToolButton(this)),
- m_resourceAction(new QAction(tr("Choose Resource..."), this)),
- m_fileAction(new QAction(tr("Choose File..."), this)),
- m_themeAction(new QAction(tr("Set Icon From Theme..."), this)),
- m_copyAction(new QAction(createIconSet(QStringLiteral("editcopy.png")), tr("Copy Path"), this)),
- m_pasteAction(new QAction(createIconSet(QStringLiteral("editpaste.png")), tr("Paste Path"), this)),
- m_layout(new QHBoxLayout(this)),
- m_pixmapCache(nullptr)
-{
- m_layout->addWidget(m_pixmapLabel);
- m_layout->addWidget(m_pathLabel);
- m_button->setText(tr("..."));
- m_button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Ignored);
- m_button->setFixedWidth(30);
- m_button->setPopupMode(QToolButton::MenuButtonPopup);
- m_layout->addWidget(m_button);
- m_layout->setContentsMargins(QMargins());
- m_layout->setSpacing(0);
- m_pixmapLabel->setFixedWidth(16);
- m_pixmapLabel->setAlignment(Qt::AlignCenter);
- m_pathLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed));
- m_themeAction->setVisible(false);
-
- QMenu *menu = new QMenu(this);
- menu->addAction(m_resourceAction);
- menu->addAction(m_fileAction);
- menu->addAction(m_themeAction);
-
- m_button->setMenu(menu);
- m_button->setText(tr("..."));
-
- connect(m_button, &QAbstractButton::clicked, this, &PixmapEditor::defaultActionActivated);
- connect(m_resourceAction, &QAction::triggered, this, &PixmapEditor::resourceActionActivated);
- connect(m_fileAction, &QAction::triggered, this, &PixmapEditor::fileActionActivated);
- connect(m_themeAction, &QAction::triggered, this, &PixmapEditor::themeActionActivated);
-#if QT_CONFIG(clipboard)
- connect(m_copyAction, &QAction::triggered, this, &PixmapEditor::copyActionActivated);
- connect(m_pasteAction, &QAction::triggered, this, &PixmapEditor::pasteActionActivated);
-#endif
- setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Ignored));
- setFocusProxy(m_button);
-
-#if QT_CONFIG(clipboard)
- connect(QApplication::clipboard(), &QClipboard::dataChanged,
- this, &PixmapEditor::clipboardDataChanged);
- clipboardDataChanged();
-#endif
-}
-
-void PixmapEditor::setPixmapCache(DesignerPixmapCache *cache)
-{
- m_pixmapCache = cache;
-}
-
-void PixmapEditor::setIconThemeModeEnabled(bool enabled)
-{
- if (m_iconThemeModeEnabled == enabled)
- return;
- m_iconThemeModeEnabled = enabled;
- m_themeAction->setVisible(enabled);
-}
-
-void PixmapEditor::setSpacing(int spacing)
-{
- m_layout->setSpacing(spacing);
-}
-
-void PixmapEditor::setPath(const QString &path)
-{
- m_path = path;
- updateLabels();
-}
-
-void PixmapEditor::setTheme(const QString &theme)
-{
- m_theme = theme;
- updateLabels();
-}
-
-void PixmapEditor::updateLabels()
-{
- if (m_iconThemeModeEnabled && QIcon::hasThemeIcon(m_theme)) {
- m_pixmapLabel->setPixmap(QIcon::fromTheme(m_theme).pixmap(16, 16));
- m_pathLabel->setText(tr("[Theme] %1").arg(m_theme));
- m_copyAction->setEnabled(true);
- } else {
- if (m_path.isEmpty()) {
- m_pathLabel->setText(m_path);
- m_pixmapLabel->setPixmap(m_defaultPixmap);
- m_copyAction->setEnabled(false);
- } else {
- m_pathLabel->setText(QFileInfo(m_path).fileName());
- if (m_pixmapCache)
- m_pixmapLabel->setPixmap(QIcon(m_pixmapCache->pixmap(PropertySheetPixmapValue(m_path))).pixmap(16, 16));
- m_copyAction->setEnabled(true);
- }
- }
-}
-
-void PixmapEditor::setDefaultPixmap(const QPixmap &pixmap)
-{
- m_defaultPixmap = QIcon(pixmap).pixmap(16, 16);
- const bool hasThemeIcon = m_iconThemeModeEnabled && QIcon::hasThemeIcon(m_theme);
- if (!hasThemeIcon && m_path.isEmpty())
- m_pixmapLabel->setPixmap(m_defaultPixmap);
-}
-
-void PixmapEditor::contextMenuEvent(QContextMenuEvent *event)
-{
- QMenu menu(this);
- menu.addAction(m_copyAction);
- menu.addAction(m_pasteAction);
- menu.exec(event->globalPos());
- event->accept();
-}
-
-void PixmapEditor::defaultActionActivated()
-{
- if (m_iconThemeModeEnabled && QIcon::hasThemeIcon(m_theme)) {
- themeActionActivated();
- return;
- }
- // Default to resource
- const PropertySheetPixmapValue::PixmapSource ps = m_path.isEmpty() ? PropertySheetPixmapValue::ResourcePixmap : PropertySheetPixmapValue::getPixmapSource(m_core, m_path);
- switch (ps) {
- case PropertySheetPixmapValue::LanguageResourcePixmap:
- case PropertySheetPixmapValue::ResourcePixmap:
- resourceActionActivated();
- break;
- case PropertySheetPixmapValue::FilePixmap:
- fileActionActivated();
- break;
- }
-}
-
-void PixmapEditor::resourceActionActivated()
-{
- const QString oldPath = m_path;
- const QString newPath = IconSelector::choosePixmapResource(m_core, m_core->resourceModel(), oldPath, this);
- if (!newPath.isEmpty() && newPath != oldPath) {
- setTheme(QString());
- setPath(newPath);
- emit pathChanged(newPath);
- }
-}
-
-void PixmapEditor::fileActionActivated()
-{
- const QString newPath = IconSelector::choosePixmapFile(m_path, m_core->dialogGui(), this);
- if (!newPath.isEmpty() && newPath != m_path) {
- setTheme(QString());
- setPath(newPath);
- emit pathChanged(newPath);
- }
-}
-
-void PixmapEditor::themeActionActivated()
-{
- bool ok;
- const QString newTheme = IconThemeDialog::getTheme(this, m_theme, &ok);
- if (ok && newTheme != m_theme) {
- setTheme(newTheme);
- setPath(QString());
- emit themeChanged(newTheme);
- }
-}
-
-#if QT_CONFIG(clipboard)
-void PixmapEditor::copyActionActivated()
-{
- QClipboard *clipboard = QApplication::clipboard();
- if (m_iconThemeModeEnabled && QIcon::hasThemeIcon(m_theme))
- clipboard->setText(m_theme);
- else
- clipboard->setText(m_path);
-}
-
-void PixmapEditor::pasteActionActivated()
-{
- QClipboard *clipboard = QApplication::clipboard();
- QString subtype = QStringLiteral("plain");
- QString text = clipboard->text(subtype);
- if (!text.isNull()) {
- QStringList list = text.split(QLatin1Char('\n'));
- if (!list.isEmpty()) {
- text = list.at(0);
- if (m_iconThemeModeEnabled && QIcon::hasThemeIcon(text)) {
- setTheme(text);
- setPath(QString());
- emit themeChanged(text);
- } else {
- setPath(text);
- setTheme(QString());
- emit pathChanged(text);
- }
- }
- }
-}
-
-void PixmapEditor::clipboardDataChanged()
-{
- QClipboard *clipboard = QApplication::clipboard();
- QString subtype = QStringLiteral("plain");
- const QString text = clipboard->text(subtype);
- m_pasteAction->setEnabled(!text.isNull());
-}
-#endif
-
// --------------- ResetWidget
class ResetWidget : public QWidget
{
@@ -825,7 +495,7 @@ ResetWidget::ResetWidget(QtProperty *property, QWidget *parent) :
m_textLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed));
m_iconLabel->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
m_button->setToolButtonStyle(Qt::ToolButtonIconOnly);
- m_button->setIcon(createIconSet(QStringLiteral("resetproperty.png")));
+ m_button->setIcon(createIconSet("resetproperty.png"_L1));
m_button->setIconSize(QSize(8,8));
m_button->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::MinimumExpanding));
connect(m_button, &QAbstractButton::clicked, this, &ResetWidget::slotClicked);
@@ -912,7 +582,8 @@ DesignerPropertyManager::~DesignerPropertyManager()
bool DesignerPropertyManager::m_IdBasedTranslations = false;
-int DesignerPropertyManager::bitCount(int mask) const
+template <class IntT>
+static int bitCount(IntT mask)
{
int count = 0;
for (; mask; count++)
@@ -1014,10 +685,10 @@ void DesignerPropertyManager::slotValueChanged(QtProperty *property, const QVari
if (QtProperty *flagProperty = m_flagToProperty.value(property, 0)) {
const auto subFlags = m_propertyToFlags.value(flagProperty);
- const int subFlagCount = subFlags.count();
+ const qsizetype subFlagCount = subFlags.size();
// flag changed
const bool subValue = variantProperty(property)->value().toBool();
- const int subIndex = subFlags.indexOf(property);
+ const qsizetype subIndex = subFlags.indexOf(property);
if (subIndex < 0)
return;
@@ -1029,21 +700,21 @@ void DesignerPropertyManager::slotValueChanged(QtProperty *property, const QVari
const auto values = data.values;
// Compute new value, without including (additional) supermasks
if (values.at(subIndex) == 0) {
- for (int i = 0; i < subFlagCount; ++i) {
+ for (qsizetype i = 0; i < subFlagCount; ++i) {
QtVariantProperty *subFlag = variantProperty(subFlags.at(i));
subFlag->setValue(i == subIndex);
}
} else {
if (subValue)
newValue = values.at(subIndex); // value mask of subValue
- for (int i = 0; i < subFlagCount; ++i) {
+ for (qsizetype i = 0; i < subFlagCount; ++i) {
QtVariantProperty *subFlag = variantProperty(subFlags.at(i));
if (subFlag->value().toBool() && bitCount(values.at(i)) == 1)
newValue |= values.at(i);
}
if (newValue == 0) {
// Uncheck all items except 0-mask
- for (int i = 0; i < subFlagCount; ++i) {
+ for (qsizetype i = 0; i < subFlagCount; ++i) {
QtVariantProperty *subFlag = variantProperty(subFlags.at(i));
subFlag->setValue(values.at(i) == 0);
}
@@ -1054,7 +725,7 @@ void DesignerPropertyManager::slotValueChanged(QtProperty *property, const QVari
}
} else {
// Make sure 0-mask is not selected
- for (int i = 0; i < subFlagCount; ++i) {
+ for (qsizetype i = 0; i < subFlagCount; ++i) {
QtVariantProperty *subFlag = variantProperty(subFlags.at(i));
if (values.at(i) == 0)
subFlag->setValue(false);
@@ -1062,7 +733,7 @@ void DesignerPropertyManager::slotValueChanged(QtProperty *property, const QVari
// Check/uncheck proper masks
if (subValue) {
// Make sure submasks and supermasks are selected
- for (int i = 0; i < subFlagCount; ++i) {
+ for (qsizetype i = 0; i < subFlagCount; ++i) {
QtVariantProperty *subFlag = variantProperty(subFlags.at(i));
const uint vi = values.at(i);
if ((vi != 0) && ((vi & newValue) == vi) && !subFlag->value().toBool())
@@ -1070,7 +741,7 @@ void DesignerPropertyManager::slotValueChanged(QtProperty *property, const QVari
}
} else {
// Make sure supermasks are not selected if they're no longer valid
- for (int i = 0; i < subFlagCount; ++i) {
+ for (qsizetype i = 0; i < subFlagCount; ++i) {
QtVariantProperty *subFlag = variantProperty(subFlags.at(i));
const uint vi = values.at(i);
if (subFlag->value().toBool() && ((vi & newValue) != vi))
@@ -1101,10 +772,12 @@ void DesignerPropertyManager::slotValueChanged(QtProperty *property, const QVari
} else if (QtProperty *iProperty = m_iconSubPropertyToProperty.value(property, 0)) {
QtVariantProperty *iconProperty = variantProperty(iProperty);
PropertySheetIconValue icon = qvariant_cast<PropertySheetIconValue>(iconProperty->value());
- QMap<QtProperty *, QPair<QIcon::Mode, QIcon::State> >::ConstIterator itState = m_iconSubPropertyToState.constFind(property);
+ const auto itState = m_iconSubPropertyToState.constFind(property);
if (itState != m_iconSubPropertyToState.constEnd()) {
- QPair<QIcon::Mode, QIcon::State> pair = m_iconSubPropertyToState.value(property);
+ const auto pair = m_iconSubPropertyToState.value(property);
icon.setPixmap(pair.first, pair.second, qvariant_cast<PropertySheetPixmapValue>(value));
+ } else if (attributeValue(property, themeEnumAttributeC).toBool()) {
+ icon.setThemeEnum(value.toInt());
} else { // must be theme property
icon.setTheme(value.toString());
}
@@ -1123,7 +796,7 @@ void DesignerPropertyManager::slotValueChanged(QtProperty *property, const QVari
void DesignerPropertyManager::slotPropertyDestroyed(QtProperty *property)
{
if (QtProperty *flagProperty = m_flagToProperty.value(property, 0)) {
- PropertyToPropertyListMap::iterator it = m_propertyToFlags.find(flagProperty);
+ const auto it = m_propertyToFlags.find(flagProperty);
auto &propertyList = it.value();
propertyList.replace(propertyList.indexOf(property), 0);
m_flagToProperty.remove(property);
@@ -1139,11 +812,12 @@ void DesignerPropertyManager::slotPropertyDestroyed(QtProperty *property)
} else if (QtProperty *iconProperty = m_iconSubPropertyToProperty.value(property, 0)) {
if (m_propertyToTheme.value(iconProperty) == property) {
m_propertyToTheme.remove(iconProperty);
+ } else if (m_propertyToThemeEnum.value(iconProperty) == property) {
+ m_propertyToThemeEnum.remove(iconProperty);
} else {
- QMap<QtProperty *, QMap<QPair<QIcon::Mode, QIcon::State>, QtProperty *> >::iterator it =
- m_propertyToIconSubProperties.find(iconProperty);
- QPair<QIcon::Mode, QIcon::State> state = m_iconSubPropertyToState.value(property);
- QMap<QPair<QIcon::Mode, QIcon::State>, QtProperty *> &propertyList = it.value();
+ const auto it = m_propertyToIconSubProperties.find(iconProperty);
+ const auto state = m_iconSubPropertyToState.value(property);
+ auto &propertyList = it.value();
propertyList.remove(state);
m_iconSubPropertyToState.remove(property);
}
@@ -1152,6 +826,7 @@ void DesignerPropertyManager::slotPropertyDestroyed(QtProperty *property)
m_fontManager.slotPropertyDestroyed(property);
m_brushManager.slotPropertyDestroyed(property);
}
+ m_alignDefault.remove(property);
}
QStringList DesignerPropertyManager::attributes(int propertyType) const
@@ -1161,19 +836,21 @@ QStringList DesignerPropertyManager::attributes(int propertyType) const
QStringList list = QtVariantPropertyManager::attributes(propertyType);
if (propertyType == designerFlagTypeId()) {
- list.append(QLatin1String(flagsAttributeC));
+ list.append(flagsAttributeC);
} else if (propertyType == designerPixmapTypeId()) {
- list.append(QLatin1String(defaultResourceAttributeC));
+ list.append(defaultResourceAttributeC);
} else if (propertyType == designerIconTypeId()) {
- list.append(QLatin1String(defaultResourceAttributeC));
- } else if (propertyType == designerStringTypeId() || propertyType == QVariant::String) {
- list.append(QLatin1String(validationModesAttributeC));
- list.append(QLatin1String(fontAttributeC));
- list.append(QLatin1String(themeAttributeC));
- } else if (propertyType == QVariant::Palette) {
- list.append(QLatin1String(superPaletteAttributeC));
- }
- list.append(QLatin1String(resettableAttributeC));
+ list.append(defaultResourceAttributeC);
+ } else if (propertyType == designerStringTypeId() || propertyType == QMetaType::QString) {
+ list.append(validationModesAttributeC);
+ list.append(fontAttributeC);
+ list.append(themeAttributeC);
+ } else if (propertyType == QMetaType::QPalette) {
+ list.append(superPaletteAttributeC);
+ } else if (propertyType == QMetaType::Int) {
+ list.append(themeEnumAttributeC);
+ }
+ list.append(resettableAttributeC);
return list;
}
@@ -1182,109 +859,119 @@ int DesignerPropertyManager::attributeType(int propertyType, const QString &attr
if (!isPropertyTypeSupported(propertyType))
return 0;
- if (propertyType == designerFlagTypeId() && attribute == QLatin1String(flagsAttributeC))
+ if (propertyType == designerFlagTypeId() && attribute == flagsAttributeC)
return designerFlagListTypeId();
- if (propertyType == designerPixmapTypeId() && attribute == QLatin1String(defaultResourceAttributeC))
- return QVariant::Pixmap;
- if (propertyType == designerIconTypeId() && attribute == QLatin1String(defaultResourceAttributeC))
- return QVariant::Icon;
- if (attribute == QLatin1String(resettableAttributeC))
- return QVariant::Bool;
- if (propertyType == designerStringTypeId() || propertyType == QVariant::String) {
- if (attribute == QLatin1String(validationModesAttributeC))
- return QVariant::Int;
- if (attribute == QLatin1String(fontAttributeC))
- return QVariant::Font;
- if (attribute == QLatin1String(themeAttributeC))
- return QVariant::Bool;
- }
- if (propertyType == QVariant::Palette && attribute == QLatin1String(superPaletteAttributeC))
- return QVariant::Palette;
+ if (propertyType == designerPixmapTypeId() && attribute == defaultResourceAttributeC)
+ return QMetaType::QPixmap;
+ if (propertyType == designerIconTypeId() && attribute == defaultResourceAttributeC)
+ return QMetaType::QIcon;
+ if (attribute == resettableAttributeC)
+ return QMetaType::Bool;
+ if (propertyType == designerStringTypeId() || propertyType == QMetaType::QString) {
+ if (attribute == validationModesAttributeC)
+ return QMetaType::Int;
+ if (attribute == fontAttributeC)
+ return QMetaType::QFont;
+ if (attribute == themeAttributeC)
+ return QMetaType::Bool;
+ }
+ if (propertyType == QMetaType::QPalette && attribute == superPaletteAttributeC)
+ return QMetaType::QPalette;
return QtVariantPropertyManager::attributeType(propertyType, attribute);
}
QVariant DesignerPropertyManager::attributeValue(const QtProperty *property, const QString &attribute) const
{
- QtProperty *prop = const_cast<QtProperty *>(property);
-
- if (attribute == QLatin1String(resettableAttributeC)) {
- const PropertyBoolMap::const_iterator it = m_resetMap.constFind(prop);
+ if (attribute == resettableAttributeC) {
+ const auto it = m_resetMap.constFind(property);
if (it != m_resetMap.constEnd())
return it.value();
}
- if (attribute == QLatin1String(flagsAttributeC)) {
- PropertyFlagDataMap::const_iterator it = m_flagValues.constFind(prop);
+ if (attribute == flagsAttributeC) {
+ const auto it = m_flagValues.constFind(property);
if (it != m_flagValues.constEnd()) {
QVariant v;
v.setValue(it.value().flags);
return v;
}
}
- if (attribute == QLatin1String(validationModesAttributeC)) {
- const PropertyIntMap::const_iterator it = m_stringAttributes.constFind(prop);
+ if (attribute == validationModesAttributeC) {
+ const auto it = m_stringAttributes.constFind(property);
if (it != m_stringAttributes.constEnd())
return it.value();
}
- if (attribute == QLatin1String(fontAttributeC)) {
- const PropertyFontMap::const_iterator it = m_stringFontAttributes.constFind(prop);
+ if (attribute == fontAttributeC) {
+ const auto it = m_stringFontAttributes.constFind(property);
if (it != m_stringFontAttributes.constEnd())
return it.value();
}
- if (attribute == QLatin1String(themeAttributeC)) {
- const PropertyBoolMap::const_iterator it = m_stringThemeAttributes.constFind(prop);
+ if (attribute == themeAttributeC) {
+ const auto it = m_stringThemeAttributes.constFind(property);
if (it != m_stringThemeAttributes.constEnd())
return it.value();
}
- if (attribute == QLatin1String(superPaletteAttributeC)) {
- PropertyPaletteDataMap::const_iterator it = m_paletteValues.constFind(prop);
- if (it != m_paletteValues.constEnd())
+ if (attribute == themeEnumAttributeC) {
+ const auto it = m_intThemeEnumAttributes.constFind(property);
+ if (it != m_intThemeEnumAttributes.constEnd())
+ return it.value();
+ }
+
+ if (attribute == superPaletteAttributeC) {
+ const auto it = m_paletteValues.constFind(property);
+ if (it != m_paletteValues.cend())
return it.value().superPalette;
}
- if (attribute == QLatin1String(defaultResourceAttributeC)) {
- QMap<QtProperty *, QPixmap>::const_iterator itPix = m_defaultPixmaps.constFind(prop);
+ if (attribute == defaultResourceAttributeC) {
+ const auto itPix = m_defaultPixmaps.constFind(property);
if (itPix != m_defaultPixmaps.constEnd())
return itPix.value();
- QMap<QtProperty *, QIcon>::const_iterator itIcon = m_defaultIcons.constFind(prop);
+ const auto itIcon = m_defaultIcons.constFind(property);
if (itIcon != m_defaultIcons.constEnd())
return itIcon.value();
}
+ if (attribute == alignDefaultAttribute()) {
+ Qt::Alignment v = m_alignDefault.value(property,
+ Qt::Alignment(Qt::AlignLeading | Qt::AlignHCenter));
+ return QVariant(uint(v));
+ }
+
return QtVariantPropertyManager::attributeValue(property, attribute);
}
void DesignerPropertyManager::setAttribute(QtProperty *property,
const QString &attribute, const QVariant &value)
{
- if (attribute == QLatin1String(resettableAttributeC) && m_resetMap.contains(property)) {
- if (value.userType() != QVariant::Bool)
+ if (attribute == resettableAttributeC && m_resetMap.contains(property)) {
+ if (value.userType() != QMetaType::Bool)
return;
const bool val = value.toBool();
- const PropertyBoolMap::iterator it = m_resetMap.find(property);
+ const auto it = m_resetMap.find(property);
if (it.value() == val)
return;
it.value() = val;
emit attributeChanged(variantProperty(property), attribute, value);
return;
}
- if (attribute == QLatin1String(flagsAttributeC) && m_flagValues.contains(property)) {
+ if (attribute == flagsAttributeC && m_flagValues.contains(property)) {
if (value.userType() != designerFlagListTypeId())
return;
const DesignerFlagList flags = qvariant_cast<DesignerFlagList>(value);
- PropertyFlagDataMap::iterator fit = m_flagValues.find(property);
+ const auto fit = m_flagValues.find(property);
FlagData data = fit.value();
if (data.flags == flags)
return;
- PropertyToPropertyListMap::iterator pfit = m_propertyToFlags.find(property);
- for (QtProperty *prop : qAsConst(pfit.value())) {
+ const auto pfit = m_propertyToFlags.find(property);
+ for (QtProperty *prop : std::as_const(pfit.value())) {
if (prop) {
delete prop;
m_flagToProperty.remove(prop);
@@ -1294,9 +981,9 @@ void DesignerPropertyManager::setAttribute(QtProperty *property,
QList<uint> values;
- for (const QPair<QString, uint> &pair : flags) {
+ for (const auto &pair : flags) {
const QString flagName = pair.first;
- QtProperty *prop = addProperty(QVariant::Bool);
+ QtProperty *prop = addProperty(QMetaType::Bool);
prop->setPropertyName(flagName);
property->addSubProperty(prop);
m_propertyToFlags[property].append(prop);
@@ -1316,11 +1003,11 @@ void DesignerPropertyManager::setAttribute(QtProperty *property,
emit propertyChanged(property);
emit QtVariantPropertyManager::valueChanged(property, data.val);
- } else if (attribute == QLatin1String(validationModesAttributeC) && m_stringAttributes.contains(property)) {
- if (value.userType() != QVariant::Int)
+ } else if (attribute == validationModesAttributeC && m_stringAttributes.contains(property)) {
+ if (value.userType() != QMetaType::Int)
return;
- const PropertyIntMap::iterator it = m_stringAttributes.find(property);
+ const auto it = m_stringAttributes.find(property);
const int oldValue = it.value();
const int newValue = value.toInt();
@@ -1331,11 +1018,11 @@ void DesignerPropertyManager::setAttribute(QtProperty *property,
it.value() = newValue;
emit attributeChanged(property, attribute, newValue);
- } else if (attribute == QLatin1String(fontAttributeC) && m_stringFontAttributes.contains(property)) {
- if (value.userType() != QVariant::Font)
+ } else if (attribute == fontAttributeC && m_stringFontAttributes.contains(property)) {
+ if (value.userType() != QMetaType::QFont)
return;
- const PropertyFontMap::iterator it = m_stringFontAttributes.find(property);
+ const auto it = m_stringFontAttributes.find(property);
const QFont oldValue = it.value();
const QFont newValue = qvariant_cast<QFont>(value);
@@ -1346,11 +1033,26 @@ void DesignerPropertyManager::setAttribute(QtProperty *property,
it.value() = newValue;
emit attributeChanged(property, attribute, newValue);
- } else if (attribute == QLatin1String(themeAttributeC) && m_stringThemeAttributes.contains(property)) {
- if (value.userType() != QVariant::Bool)
+ } else if (attribute == themeAttributeC && m_stringThemeAttributes.contains(property)) {
+ if (value.userType() != QMetaType::Bool)
+ return;
+
+ const auto it = m_stringThemeAttributes.find(property);
+ const bool oldValue = it.value();
+
+ const bool newValue = value.toBool();
+
+ if (oldValue == newValue)
+ return;
+
+ it.value() = newValue;
+
+ emit attributeChanged(property, attribute, newValue);
+ } else if (attribute == themeEnumAttributeC && m_intThemeEnumAttributes.contains(property)) {
+ if (value.userType() != QMetaType::Bool)
return;
- const PropertyBoolMap::iterator it = m_stringThemeAttributes.find(property);
+ const auto it = m_intThemeEnumAttributes.find(property);
const bool oldValue = it.value();
const bool newValue = value.toBool();
@@ -1361,20 +1063,20 @@ void DesignerPropertyManager::setAttribute(QtProperty *property,
it.value() = newValue;
emit attributeChanged(property, attribute, newValue);
- } else if (attribute == QLatin1String(superPaletteAttributeC) && m_paletteValues.contains(property)) {
- if (value.userType() != QVariant::Palette)
+ } else if (attribute == superPaletteAttributeC && m_paletteValues.contains(property)) {
+ if (value.userType() != QMetaType::QPalette)
return;
QPalette superPalette = qvariant_cast<QPalette>(value);
- const PropertyPaletteDataMap::iterator it = m_paletteValues.find(property);
+ const auto it = m_paletteValues.find(property);
PaletteData data = it.value();
if (data.superPalette == superPalette)
return;
data.superPalette = superPalette;
// resolve here
- const uint mask = data.val.resolveMask();
+ const auto mask = data.val.resolveMask();
data.val = data.val.resolve(superPalette);
data.val.setResolveMask(mask);
@@ -1386,13 +1088,13 @@ void DesignerPropertyManager::setAttribute(QtProperty *property,
emit propertyChanged(property);
emit QtVariantPropertyManager::valueChanged(property, data.val); // if resolve was done, this is also for consistency
- } else if (attribute == QLatin1String(defaultResourceAttributeC) && m_defaultPixmaps.contains(property)) {
- if (value.userType() != QVariant::Pixmap)
+ } else if (attribute == defaultResourceAttributeC && m_defaultPixmaps.contains(property)) {
+ if (value.userType() != QMetaType::QPixmap)
return;
QPixmap defaultPixmap = qvariant_cast<QPixmap>(value);
- const QMap<QtProperty *, QPixmap>::iterator it = m_defaultPixmaps.find(property);
+ const auto it = m_defaultPixmaps.find(property);
QPixmap oldDefaultPixmap = it.value();
if (defaultPixmap.cacheKey() == oldDefaultPixmap.cacheKey())
return;
@@ -1403,13 +1105,13 @@ void DesignerPropertyManager::setAttribute(QtProperty *property,
emit attributeChanged(property, attribute, v);
emit propertyChanged(property);
- } else if (attribute == QLatin1String(defaultResourceAttributeC) && m_defaultIcons.contains(property)) {
- if (value.userType() != QVariant::Icon)
+ } else if (attribute == defaultResourceAttributeC && m_defaultIcons.contains(property)) {
+ if (value.userType() != QMetaType::QIcon)
return;
QIcon defaultIcon = qvariant_cast<QIcon>(value);
- const QMap<QtProperty *, QIcon>::iterator it = m_defaultIcons.find(property);
+ const auto it = m_defaultIcons.find(property);
QIcon oldDefaultIcon = it.value();
if (defaultIcon.cacheKey() == oldDefaultIcon.cacheKey())
return;
@@ -1418,11 +1120,11 @@ void DesignerPropertyManager::setAttribute(QtProperty *property,
qdesigner_internal::PropertySheetIconValue icon = m_iconValues.value(property);
if (icon.paths().isEmpty()) {
- QMap<QPair<QIcon::Mode, QIcon::State>, QtProperty *> subIconProperties = m_propertyToIconSubProperties.value(property);
+ const auto &subIconProperties = m_propertyToIconSubProperties.value(property);
for (auto itSub = subIconProperties.cbegin(), end = subIconProperties.cend(); itSub != end; ++itSub) {
- QPair<QIcon::Mode, QIcon::State> pair = itSub.key();
+ const auto pair = itSub.key();
QtProperty *subProp = itSub.value();
- setAttribute(subProp, QLatin1String(defaultResourceAttributeC),
+ setAttribute(subProp, defaultResourceAttributeC,
defaultIcon.pixmap(16, 16, pair.first, pair.second));
}
}
@@ -1431,6 +1133,8 @@ void DesignerPropertyManager::setAttribute(QtProperty *property,
emit attributeChanged(property, attribute, v);
emit propertyChanged(property);
+ } else if (attribute == alignDefaultAttribute()) {
+ m_alignDefault[property] = Qt::Alignment(value.toUInt());
}
QtVariantPropertyManager::setAttribute(property, attribute, value);
}
@@ -1478,17 +1182,27 @@ int DesignerPropertyManager::designerKeySequenceTypeId()
return qMetaTypeId<PropertySheetKeySequenceValue>();
}
+QString DesignerPropertyManager::alignDefaultAttribute()
+{
+ return u"alignDefault"_s;
+}
+
+uint DesignerPropertyManager::alignDefault(const QtVariantProperty *prop)
+{
+ return prop->attributeValue(DesignerPropertyManager::alignDefaultAttribute()).toUInt();
+}
+
bool DesignerPropertyManager::isPropertyTypeSupported(int propertyType) const
{
switch (propertyType) {
- case QVariant::Palette:
- case QVariant::UInt:
- case QVariant::LongLong:
- case QVariant::ULongLong:
- case QVariant::Url:
- case QVariant::ByteArray:
- case QVariant::StringList:
- case QVariant::Brush:
+ case QMetaType::QPalette:
+ case QMetaType::UInt:
+ case QMetaType::LongLong:
+ case QMetaType::ULongLong:
+ case QMetaType::QUrl:
+ case QMetaType::QByteArray:
+ case QMetaType::QStringList:
+ case QMetaType::QBrush:
return true;
default:
break;
@@ -1512,82 +1226,75 @@ bool DesignerPropertyManager::isPropertyTypeSupported(int propertyType) const
QString DesignerPropertyManager::valueText(const QtProperty *property) const
{
- if (m_flagValues.contains(const_cast<QtProperty *>(property))) {
- const FlagData data = m_flagValues.value(const_cast<QtProperty *>(property));
+ if (m_flagValues.contains(property)) {
+ const FlagData data = m_flagValues.value(property);
const uint v = data.val;
- const QChar bar = QLatin1Char('|');
QString valueStr;
for (const DesignerIntPair &p : data.flags) {
const uint val = p.second;
const bool checked = (val == 0) ? (v == 0) : ((val & v) == val);
if (checked) {
if (!valueStr.isEmpty())
- valueStr += bar;
+ valueStr += u'|';
valueStr += p.first;
}
}
return valueStr;
}
- if (m_alignValues.contains(const_cast<QtProperty *>(property))) {
- const uint v = m_alignValues.value(const_cast<QtProperty *>(property));
+ if (m_alignValues.contains(property)) {
+ const uint v = m_alignValues.value(property);
return tr("%1, %2").arg(indexHToString(alignToIndexH(v)),
indexVToString(alignToIndexV(v)));
}
- if (m_paletteValues.contains(const_cast<QtProperty *>(property))) {
- const PaletteData data = m_paletteValues.value(const_cast<QtProperty *>(property));
- const uint mask = data.val.resolveMask();
+ if (m_paletteValues.contains(property)) {
+ const PaletteData data = m_paletteValues.value(property);
+ const auto mask = data.val.resolveMask();
if (mask)
return tr("Customized (%n roles)", nullptr, bitCount(mask));
static const QString inherited = tr("Inherited");
return inherited;
}
- if (m_iconValues.contains(const_cast<QtProperty *>(property))) {
- const PropertySheetIconValue icon = m_iconValues.value(const_cast<QtProperty *>(property));
- const QString theme = icon.theme();
- if (!theme.isEmpty() && QIcon::hasThemeIcon(theme))
- return tr("[Theme] %1").arg(theme);
- const auto &paths = icon.paths();
- const PropertySheetIconValue::ModeStateToPixmapMap::const_iterator it = paths.constFind(qMakePair(QIcon::Normal, QIcon::Off));
- if (it == paths.constEnd())
- return QString();
- return QFileInfo(it.value().path()).fileName();
- }
- if (m_pixmapValues.contains(const_cast<QtProperty *>(property))) {
- const QString path = m_pixmapValues.value(const_cast<QtProperty *>(property)).path();
+ if (m_iconValues.contains(property))
+ return PixmapEditor::displayText(m_iconValues.value(property));
+ if (m_pixmapValues.contains(property)) {
+ const QString path = m_pixmapValues.value(property).path();
if (path.isEmpty())
return QString();
return QFileInfo(path).fileName();
}
- if (m_uintValues.contains(const_cast<QtProperty *>(property))) {
- return QString::number(m_uintValues.value(const_cast<QtProperty *>(property)));
- }
- if (m_longLongValues.contains(const_cast<QtProperty *>(property))) {
- return QString::number(m_longLongValues.value(const_cast<QtProperty *>(property)));
- }
- if (m_uLongLongValues.contains(const_cast<QtProperty *>(property))) {
- return QString::number(m_uLongLongValues.value(const_cast<QtProperty *>(property)));
- }
- if (m_urlValues.contains(const_cast<QtProperty *>(property))) {
- return m_urlValues.value(const_cast<QtProperty *>(property)).toString();
- }
- if (m_byteArrayValues.contains(const_cast<QtProperty *>(property))) {
- return QString::fromUtf8(m_byteArrayValues.value(const_cast<QtProperty *>(property)));
- }
+ if (m_intValues.contains(property)) {
+ const auto value = m_intValues.value(property);
+ if (m_intThemeEnumAttributes.value(property))
+ return IconThemeEnumEditor::iconName(value);
+ return QString::number(value);
+ }
+ if (m_uintValues.contains(property))
+ return QString::number(m_uintValues.value(property));
+ if (m_longLongValues.contains(property))
+ return QString::number(m_longLongValues.value(property));
+ if (m_uLongLongValues.contains(property))
+ return QString::number(m_uLongLongValues.value(property));
+ if (m_urlValues.contains(property))
+ return m_urlValues.value(property).toString();
+ if (m_byteArrayValues.contains(property))
+ return QString::fromUtf8(m_byteArrayValues.value(property));
const int vType = QtVariantPropertyManager::valueType(property);
- if (vType == QVariant::String || vType == designerStringTypeId()) {
- const QString str = (QtVariantPropertyManager::valueType(property) == QVariant::String) ? value(property).toString() : qvariant_cast<PropertySheetStringValue>(value(property)).value();
- const int validationMode = attributeValue(property, QLatin1String(validationModesAttributeC)).toInt();
+ if (vType == QMetaType::QString || vType == designerStringTypeId()) {
+ const QString str = (QtVariantPropertyManager::valueType(property) == QMetaType::QString)
+ ? value(property).toString() : qvariant_cast<PropertySheetStringValue>(value(property)).value();
+ const int validationMode = attributeValue(property, validationModesAttributeC).toInt();
return TextPropertyEditor::stringToEditorString(str, static_cast<TextPropertyValidationMode>(validationMode));
}
- if (vType == QVariant::StringList || vType == designerStringListTypeId()) {
+ if (vType == QMetaType::QStringList || vType == designerStringListTypeId()) {
QVariant v = value(property);
- const QStringList list = v.type() == QVariant::StringList ? v.toStringList() : qvariant_cast<PropertySheetStringListValue>(v).value();
- return list.join(QLatin1String("; "));
+ const QStringList list = v.metaType().id() == QMetaType::QStringList
+ ? v.toStringList() : qvariant_cast<PropertySheetStringListValue>(v).value();
+ return list.join("; "_L1);
}
if (vType == designerKeySequenceTypeId()) {
return qvariant_cast<PropertySheetKeySequenceValue>(value(property)).value().toString(QKeySequence::NativeText);
}
- if (vType == QVariant::Bool) {
+ if (vType == QMetaType::Bool) {
return QString();
}
@@ -1601,7 +1308,7 @@ void DesignerPropertyManager::reloadResourceProperties()
{
DesignerIconCache *iconCache = nullptr;
for (auto itIcon = m_iconValues.cbegin(), end = m_iconValues.cend(); itIcon!= end; ++itIcon) {
- QtProperty *property = itIcon.key();
+ auto *property = itIcon.key();
const PropertySheetIconValue &icon = itIcon.value();
QIcon defaultIcon = m_defaultIcons.value(property);
@@ -1615,19 +1322,20 @@ void DesignerPropertyManager::reloadResourceProperties()
defaultIcon = iconCache->icon(icon);
}
- QMap<QPair<QIcon::Mode, QIcon::State>, QtProperty *> subProperties = m_propertyToIconSubProperties.value(property);
+ const auto &subProperties = m_propertyToIconSubProperties.value(property);
for (auto itSub = subProperties.cbegin(), end = subProperties.cend(); itSub != end; ++itSub) {
- const QPair<QIcon::Mode, QIcon::State> pair = itSub.key();
+ const auto pair = itSub.key();
QtVariantProperty *subProperty = variantProperty(itSub.value());
- subProperty->setAttribute(QLatin1String(defaultResourceAttributeC),
+ subProperty->setAttribute(defaultResourceAttributeC,
defaultIcon.pixmap(16, 16, pair.first, pair.second));
}
- emit propertyChanged(property);
- emit QtVariantPropertyManager::valueChanged(property, QVariant::fromValue(itIcon.value()));
+ auto *ncProperty = const_cast<QtProperty *>(property);
+ emit propertyChanged(ncProperty);
+ emit QtVariantPropertyManager::valueChanged(ncProperty, QVariant::fromValue(itIcon.value()));
}
for (auto itPix = m_pixmapValues.cbegin(), end = m_pixmapValues.cend(); itPix != end; ++itPix) {
- QtProperty *property = itPix.key();
+ auto *property = const_cast<QtProperty *>(itPix.key());
emit propertyChanged(property);
emit QtVariantPropertyManager::valueChanged(property, QVariant::fromValue(itPix.value()));
}
@@ -1635,21 +1343,21 @@ void DesignerPropertyManager::reloadResourceProperties()
QIcon DesignerPropertyManager::valueIcon(const QtProperty *property) const
{
- if (m_iconValues.contains(const_cast<QtProperty *>(property))) {
+ if (m_iconValues.contains(property)) {
if (!property->isModified())
- return m_defaultIcons.value(const_cast<QtProperty *>(property)).pixmap(16, 16);
+ return m_defaultIcons.value(property).pixmap(16, 16);
QDesignerFormWindowInterface *formWindow = QDesignerFormWindowInterface::findFormWindow(m_object);
qdesigner_internal::FormWindowBase *fwb = qobject_cast<qdesigner_internal::FormWindowBase *>(formWindow);
if (fwb)
- return fwb->iconCache()->icon(m_iconValues.value(const_cast<QtProperty *>(property))).pixmap(16, 16);
- } else if (m_pixmapValues.contains(const_cast<QtProperty *>(property))) {
+ return fwb->iconCache()->icon(m_iconValues.value(property)).pixmap(16, 16);
+ } else if (m_pixmapValues.contains(property)) {
if (!property->isModified())
- return m_defaultPixmaps.value(const_cast<QtProperty *>(property));
+ return m_defaultPixmaps.value(property);
QDesignerFormWindowInterface *formWindow = QDesignerFormWindowInterface::findFormWindow(m_object);
qdesigner_internal::FormWindowBase *fwb = qobject_cast<qdesigner_internal::FormWindowBase *>(formWindow);
if (fwb)
- return fwb->pixmapCache()->pixmap(m_pixmapValues.value(const_cast<QtProperty *>(property)));
- } else if (m_stringThemeAttributes.value(const_cast<QtProperty *>(property), false)) {
+ return fwb->pixmapCache()->pixmap(m_pixmapValues.value(property));
+ } else if (m_stringThemeAttributes.value(property, false)) {
return QIcon::fromTheme(value(property).toString());
} else {
QIcon rc;
@@ -1662,32 +1370,34 @@ QIcon DesignerPropertyManager::valueIcon(const QtProperty *property) const
QVariant DesignerPropertyManager::value(const QtProperty *property) const
{
- if (m_flagValues.contains(const_cast<QtProperty *>(property)))
- return m_flagValues.value(const_cast<QtProperty *>(property)).val;
- if (m_alignValues.contains(const_cast<QtProperty *>(property)))
- return m_alignValues.value(const_cast<QtProperty *>(property));
- if (m_paletteValues.contains(const_cast<QtProperty *>(property)))
- return m_paletteValues.value(const_cast<QtProperty *>(property)).val;
- if (m_iconValues.contains(const_cast<QtProperty *>(property)))
- return QVariant::fromValue(m_iconValues.value(const_cast<QtProperty *>(property)));
- if (m_pixmapValues.contains(const_cast<QtProperty *>(property)))
- return QVariant::fromValue(m_pixmapValues.value(const_cast<QtProperty *>(property)));
+ if (m_flagValues.contains(property))
+ return m_flagValues.value(property).val;
+ if (m_alignValues.contains(property))
+ return m_alignValues.value(property);
+ if (m_paletteValues.contains(property))
+ return m_paletteValues.value(property).val;
+ if (m_iconValues.contains(property))
+ return QVariant::fromValue(m_iconValues.value(property));
+ if (m_pixmapValues.contains(property))
+ return QVariant::fromValue(m_pixmapValues.value(property));
QVariant rc;
if (m_stringManager.value(property, &rc)
|| m_keySequenceManager.value(property, &rc)
|| m_stringListManager.value(property, &rc)
|| m_brushManager.value(property, &rc))
return rc;
- if (m_uintValues.contains(const_cast<QtProperty *>(property)))
- return m_uintValues.value(const_cast<QtProperty *>(property));
- if (m_longLongValues.contains(const_cast<QtProperty *>(property)))
- return m_longLongValues.value(const_cast<QtProperty *>(property));
- if (m_uLongLongValues.contains(const_cast<QtProperty *>(property)))
- return m_uLongLongValues.value(const_cast<QtProperty *>(property));
- if (m_urlValues.contains(const_cast<QtProperty *>(property)))
- return m_urlValues.value(const_cast<QtProperty *>(property));
- if (m_byteArrayValues.contains(const_cast<QtProperty *>(property)))
- return m_byteArrayValues.value(const_cast<QtProperty *>(property));
+ if (m_intValues.contains(property))
+ return m_intValues.value(property);
+ if (m_uintValues.contains(property))
+ return m_uintValues.value(property);
+ if (m_longLongValues.contains(property))
+ return m_longLongValues.value(property);
+ if (m_uLongLongValues.contains(property))
+ return m_uLongLongValues.value(property);
+ if (m_urlValues.contains(property))
+ return m_urlValues.value(property);
+ if (m_byteArrayValues.contains(property))
+ return m_byteArrayValues.value(property);
return QtVariantPropertyManager::value(property);
}
@@ -1695,22 +1405,22 @@ QVariant DesignerPropertyManager::value(const QtProperty *property) const
int DesignerPropertyManager::valueType(int propertyType) const
{
switch (propertyType) {
- case QVariant::Palette:
- case QVariant::UInt:
- case QVariant::LongLong:
- case QVariant::ULongLong:
- case QVariant::Url:
- case QVariant::ByteArray:
- case QVariant::StringList:
- case QVariant::Brush:
+ case QMetaType::QPalette:
+ case QMetaType::UInt:
+ case QMetaType::LongLong:
+ case QMetaType::ULongLong:
+ case QMetaType::QUrl:
+ case QMetaType::QByteArray:
+ case QMetaType::QStringList:
+ case QMetaType::QBrush:
return propertyType;
default:
break;
}
if (propertyType == designerFlagTypeId())
- return QVariant::UInt;
+ return QMetaType::UInt;
if (propertyType == designerAlignmentTypeId())
- return QVariant::UInt;
+ return QMetaType::UInt;
if (propertyType == designerPixmapTypeId())
return propertyType;
if (propertyType == designerIconTypeId())
@@ -1739,10 +1449,10 @@ void DesignerPropertyManager::setValue(QtProperty *property, const QVariant &val
return;
}
- const PropertyFlagDataMap::iterator fit = m_flagValues.find(property);
+ const auto fit = m_flagValues.find(property);
if (fit != m_flagValues.end()) {
- if (value.type() != QVariant::UInt && !value.canConvert<uint>())
+ if (value.metaType().id() != QMetaType::UInt && !value.canConvert<uint>())
return;
const uint v = value.toUInt();
@@ -1755,15 +1465,15 @@ void DesignerPropertyManager::setValue(QtProperty *property, const QVariant &val
const auto values = data.values;
const auto subFlags = m_propertyToFlags.value(property);
- const int subFlagCount = subFlags.count();
- for (int i = 0; i < subFlagCount; ++i) {
+ const qsizetype subFlagCount = subFlags.size();
+ for (qsizetype i = 0; i < subFlagCount; ++i) {
QtVariantProperty *subFlag = variantProperty(subFlags.at(i));
const uint val = values.at(i);
const bool checked = (val == 0) ? (v == 0) : ((val & v) == val);
subFlag->setValue(checked);
}
- for (int i = 0; i < subFlagCount; ++i) {
+ for (qsizetype i = 0; i < subFlagCount; ++i) {
QtVariantProperty *subFlag = variantProperty(subFlags.at(i));
const uint val = values.at(i);
const bool checked = (val == 0) ? (v == 0) : ((val & v) == val);
@@ -1774,7 +1484,7 @@ void DesignerPropertyManager::setValue(QtProperty *property, const QVariant &val
} else if (bitCount(val) > 1) {
// Disabled if all flags contained in the mask are checked
uint currentMask = 0;
- for (int j = 0; j < subFlagCount; ++j) {
+ for (qsizetype j = 0; j < subFlagCount; ++j) {
QtVariantProperty *subFlag = variantProperty(subFlags.at(j));
if (bitCount(values.at(j)) == 1)
currentMask |= subFlag->value().toBool() ? values.at(j) : 0;
@@ -1794,7 +1504,7 @@ void DesignerPropertyManager::setValue(QtProperty *property, const QVariant &val
return;
}
if (m_alignValues.contains(property)) {
- if (value.type() != QVariant::UInt && !value.canConvert<uint>())
+ if (value.metaType().id() != QMetaType::UInt && !value.canConvert<uint>())
return;
const uint v = value.toUInt();
@@ -1820,14 +1530,14 @@ void DesignerPropertyManager::setValue(QtProperty *property, const QVariant &val
return;
}
if (m_paletteValues.contains(property)) {
- if (value.type() != QVariant::Palette && !value.canConvert<QPalette>())
+ if (value.metaType().id() != QMetaType::QPalette && !value.canConvert<QPalette>())
return;
QPalette p = qvariant_cast<QPalette>(value);
PaletteData data = m_paletteValues.value(property);
- const uint mask = p.resolveMask();
+ const auto mask = p.resolveMask();
p = p.resolve(data.superPalette);
p.setResolveMask(mask);
@@ -1864,14 +1574,14 @@ void DesignerPropertyManager::setValue(QtProperty *property, const QVariant &val
const auto &iconPaths = icon.paths();
- QMap<QPair<QIcon::Mode, QIcon::State>, QtProperty *> subProperties = m_propertyToIconSubProperties.value(property);
+ const auto &subProperties = m_propertyToIconSubProperties.value(property);
for (auto itSub = subProperties.cbegin(), end = subProperties.cend(); itSub != end; ++itSub) {
- const QPair<QIcon::Mode, QIcon::State> pair = itSub.key();
+ const auto pair = itSub.key();
QtVariantProperty *subProperty = variantProperty(itSub.value());
bool hasPath = iconPaths.contains(pair);
subProperty->setModified(hasPath);
subProperty->setValue(QVariant::fromValue(iconPaths.value(pair)));
- subProperty->setAttribute(QLatin1String(defaultResourceAttributeC),
+ subProperty->setAttribute(defaultResourceAttributeC,
defaultIcon.pixmap(16, 16, pair.first, pair.second));
}
QtVariantProperty *themeSubProperty = variantProperty(m_propertyToTheme.value(property));
@@ -1880,13 +1590,18 @@ void DesignerPropertyManager::setValue(QtProperty *property, const QVariant &val
themeSubProperty->setModified(!theme.isEmpty());
themeSubProperty->setValue(theme);
}
+ QtVariantProperty *themeEnumSubProperty = variantProperty(m_propertyToThemeEnum.value(property));
+ if (themeEnumSubProperty) {
+ const int themeEnum = icon.themeEnum();
+ themeEnumSubProperty->setModified(themeEnum != -1);
+ themeEnumSubProperty->setValue(QVariant(themeEnum));
+ }
emit QtVariantPropertyManager::valueChanged(property, QVariant::fromValue(icon));
emit propertyChanged(property);
QString toolTip;
- const QMap<QPair<QIcon::Mode, QIcon::State>, PropertySheetPixmapValue>::ConstIterator itNormalOff =
- iconPaths.constFind(qMakePair(QIcon::Normal, QIcon::Off));
+ const auto itNormalOff = iconPaths.constFind({QIcon::Normal, QIcon::Off});
if (itNormalOff != iconPaths.constEnd())
toolTip = itNormalOff.value().path();
// valueText() only show the file name; show full path as ToolTip.
@@ -1914,8 +1629,25 @@ void DesignerPropertyManager::setValue(QtProperty *property, const QVariant &val
return;
}
+ if (m_intValues.contains(property)) {
+ if (value.metaType().id() != QMetaType::Int && !value.canConvert<int>())
+ return;
+
+ const int v = value.toInt(nullptr);
+
+ const int oldValue = m_intValues.value(property);
+ if (v == oldValue)
+ return;
+
+ m_intValues[property] = v;
+
+ emit QtVariantPropertyManager::valueChanged(property, v);
+ emit propertyChanged(property);
+
+ return;
+ }
if (m_uintValues.contains(property)) {
- if (value.type() != QVariant::UInt && !value.canConvert<uint>())
+ if (value.metaType().id() != QMetaType::UInt && !value.canConvert<uint>())
return;
const uint v = value.toUInt(nullptr);
@@ -1932,7 +1664,7 @@ void DesignerPropertyManager::setValue(QtProperty *property, const QVariant &val
return;
}
if (m_longLongValues.contains(property)) {
- if (value.type() != QVariant::LongLong && !value.canConvert<qlonglong>())
+ if (value.metaType().id() != QMetaType::LongLong && !value.canConvert<qlonglong>())
return;
const qlonglong v = value.toLongLong(nullptr);
@@ -1949,7 +1681,7 @@ void DesignerPropertyManager::setValue(QtProperty *property, const QVariant &val
return;
}
if (m_uLongLongValues.contains(property)) {
- if (value.type() != QVariant::ULongLong && !value.canConvert<qulonglong>())
+ if (value.metaType().id() != QMetaType::ULongLong && !value.canConvert<qulonglong>())
return;
qulonglong v = value.toULongLong(nullptr);
@@ -1966,7 +1698,7 @@ void DesignerPropertyManager::setValue(QtProperty *property, const QVariant &val
return;
}
if (m_urlValues.contains(property)) {
- if (value.type() != QVariant::Url && !value.canConvert<QUrl>())
+ if (value.metaType().id() != QMetaType::QUrl && !value.canConvert<QUrl>())
return;
const QUrl v = value.toUrl();
@@ -1983,7 +1715,7 @@ void DesignerPropertyManager::setValue(QtProperty *property, const QVariant &val
return;
}
if (m_byteArrayValues.contains(property)) {
- if (value.type() != QVariant::ByteArray && !value.canConvert<QByteArray>())
+ if (value.metaType().id() != QMetaType::QByteArray && !value.canConvert<QByteArray>())
return;
const QByteArray v = value.toByteArray();
@@ -2001,7 +1733,7 @@ void DesignerPropertyManager::setValue(QtProperty *property, const QVariant &val
}
m_fontManager.setValue(this, property, value);
QtVariantPropertyManager::setValue(property, value);
- if (QtVariantPropertyManager::valueType(property) == QVariant::Bool)
+ if (QtVariantPropertyManager::valueType(property) == QMetaType::Bool)
property->setToolTip(QtVariantPropertyManager::valueText(property));
}
@@ -2012,30 +1744,34 @@ void DesignerPropertyManager::initializeProperty(QtProperty *property)
const int type = propertyType(property);
m_fontManager.preInitializeProperty(property, type, m_resetMap);
switch (type) {
- case QVariant::Palette:
+ case QMetaType::QPalette:
m_paletteValues[property] = PaletteData();
break;
- case QVariant::String:
+ case QMetaType::QString:
m_stringAttributes[property] = ValidationSingleLine;
m_stringFontAttributes[property] = QApplication::font();
m_stringThemeAttributes[property] = false;
break;
- case QVariant::UInt:
+ case QMetaType::Int:
+ m_intValues[property] = 0;
+ m_intThemeEnumAttributes[property] = false;
+ break;
+ case QMetaType::UInt:
m_uintValues[property] = 0;
break;
- case QVariant::LongLong:
+ case QMetaType::LongLong:
m_longLongValues[property] = 0;
break;
- case QVariant::ULongLong:
+ case QMetaType::ULongLong:
m_uLongLongValues[property] = 0;
break;
- case QVariant::Url:
+ case QMetaType::QUrl:
m_urlValues[property] = QUrl();
break;
- case QVariant::ByteArray:
+ case QMetaType::QByteArray:
m_byteArrayValues[property] = QByteArray();
break;
- case QVariant::Brush:
+ case QMetaType::QBrush:
m_brushManager.initializeProperty(this, property, enumTypeId());
break;
default:
@@ -2049,7 +1785,7 @@ void DesignerPropertyManager::initializeProperty(QtProperty *property)
QtVariantProperty *alignH = addProperty(enumTypeId(), tr("Horizontal"));
QStringList namesH;
namesH << indexHToString(0) << indexHToString(1) << indexHToString(2) << indexHToString(3);
- alignH->setAttribute(QStringLiteral("enumNames"), namesH);
+ alignH->setAttribute(u"enumNames"_s, namesH);
alignH->setValue(alignToIndexH(align));
m_propertyToAlignH[property] = alignH;
m_alignHToProperty[alignH] = property;
@@ -2058,7 +1794,7 @@ void DesignerPropertyManager::initializeProperty(QtProperty *property)
QtVariantProperty *alignV = addProperty(enumTypeId(), tr("Vertical"));
QStringList namesV;
namesV << indexVToString(0) << indexVToString(1) << indexVToString(2);
- alignV->setAttribute(QStringLiteral("enumNames"), namesV);
+ alignV->setAttribute(u"enumNames"_s, namesV);
alignV->setValue(alignToIndexV(align));
m_propertyToAlignV[property] = alignV;
m_alignVToProperty[alignV] = property;
@@ -2070,8 +1806,16 @@ void DesignerPropertyManager::initializeProperty(QtProperty *property)
m_iconValues[property] = PropertySheetIconValue();
m_defaultIcons[property] = QIcon();
- QtVariantProperty *themeProp = addProperty(QVariant::String, tr("Theme"));
- themeProp->setAttribute(QLatin1String(themeAttributeC), true);
+ QtVariantProperty *themeEnumProp = addProperty(QMetaType::Int, tr("Theme"));
+ m_intValues[themeEnumProp] = -1;
+ themeEnumProp->setAttribute(themeEnumAttributeC, true);
+ m_iconSubPropertyToProperty[themeEnumProp] = property;
+ m_propertyToThemeEnum[property] = themeEnumProp;
+ m_resetMap[themeEnumProp] = true;
+ property->addSubProperty(themeEnumProp);
+
+ QtVariantProperty *themeProp = addProperty(QMetaType::QString, tr("XDG Theme"));
+ themeProp->setAttribute(themeAttributeC, true);
m_iconSubPropertyToProperty[themeProp] = property;
m_propertyToTheme[property] = themeProp;
m_resetMap[themeProp] = true;
@@ -2099,13 +1843,13 @@ void DesignerPropertyManager::initializeProperty(QtProperty *property)
QtVariantPropertyManager::initializeProperty(property);
m_fontManager.postInitializeProperty(this, property, type, DesignerPropertyManager::enumTypeId());
- if (type == QVariant::Double)
- setAttribute(property, QStringLiteral("decimals"), 6);
+ if (type == QMetaType::Double)
+ setAttribute(property, u"decimals"_s, 6);
}
void DesignerPropertyManager::createIconSubProperty(QtProperty *iconProperty, QIcon::Mode mode, QIcon::State state, const QString &subName)
{
- QPair<QIcon::Mode, QIcon::State> pair = qMakePair(mode, state);
+ const auto pair = std::make_pair(mode, state);
QtVariantProperty *subProp = addProperty(DesignerPropertyManager::designerPixmapTypeId(), subName);
m_propertyToIconSubProperties[iconProperty][pair] = subProp;
m_iconSubPropertyToState[subProp] = pair;
@@ -2148,6 +1892,11 @@ void DesignerPropertyManager::uninitializeProperty(QtProperty *property)
m_iconSubPropertyToProperty.remove(iconTheme);
}
+ if (QtProperty *iconThemeEnum = m_propertyToThemeEnum.value(property)) {
+ m_iconSubPropertyToProperty.remove(iconThemeEnum);
+ delete iconThemeEnum;
+ }
+
m_propertyToAlignH.remove(property);
m_propertyToAlignV.remove(property);
@@ -2162,7 +1911,7 @@ void DesignerPropertyManager::uninitializeProperty(QtProperty *property)
m_pixmapValues.remove(property);
m_defaultPixmaps.remove(property);
- QMap<QPair<QIcon::Mode, QIcon::State>, QtProperty *> iconSubProperties = m_propertyToIconSubProperties.value(property);
+ const auto &iconSubProperties = m_propertyToIconSubProperties.value(property);
for (auto itIcon = iconSubProperties.cbegin(), end = iconSubProperties.cend(); itIcon != end; ++itIcon) {
QtProperty *subIcon = itIcon.value();
delete subIcon;
@@ -2173,6 +1922,7 @@ void DesignerPropertyManager::uninitializeProperty(QtProperty *property)
m_iconSubPropertyToState.remove(property);
m_iconSubPropertyToProperty.remove(property);
+ m_intValues.remove(property);
m_uintValues.remove(property);
m_longLongValues.remove(property);
m_uLongLongValues.remove(property);
@@ -2185,6 +1935,16 @@ void DesignerPropertyManager::uninitializeProperty(QtProperty *property)
QtVariantPropertyManager::uninitializeProperty(property);
}
+bool DesignerPropertyManager::resetTextAlignmentProperty(QtProperty *property)
+{
+ const auto it = m_alignDefault.constFind(property);
+ if (it == m_alignDefault.cend())
+ return false;
+ QtVariantProperty *alignProperty = variantProperty(property);
+ alignProperty->setValue(DesignerPropertyManager::alignDefault(alignProperty));
+ alignProperty->setModified(false);
+ return true;
+}
bool DesignerPropertyManager::resetFontSubProperty(QtProperty *property)
{
@@ -2202,11 +1962,17 @@ bool DesignerPropertyManager::resetIconSubProperty(QtProperty *property)
pixmapProperty->setValue(QVariant::fromValue(PropertySheetPixmapValue()));
return true;
}
- if (m_propertyToTheme.contains(iconProperty)) {
+ if (attributeValue(property, themeAttributeC).toBool()) {
QtVariantProperty *themeProperty = variantProperty(property);
themeProperty->setValue(QString());
return true;
}
+ if (attributeValue(property, themeEnumAttributeC).toBool()) {
+ QtVariantProperty *themeEnumProperty = variantProperty(property);
+ themeEnumProperty->setValue(-1);
+ return true;
+ }
+
return false;
}
@@ -2284,23 +2050,23 @@ void DesignerEditorFactory::slotAttributeChanged(QtProperty *property, const QSt
{
QtVariantPropertyManager *manager = propertyManager(property);
const int type = manager->propertyType(property);
- if (type == DesignerPropertyManager::designerPixmapTypeId() && attribute == QLatin1String(defaultResourceAttributeC)) {
+ if (type == DesignerPropertyManager::designerPixmapTypeId() && attribute == defaultResourceAttributeC) {
const QPixmap pixmap = qvariant_cast<QPixmap>(value);
applyToEditors(m_pixmapPropertyToEditors.value(property), &PixmapEditor::setDefaultPixmap, pixmap);
- } else if (type == DesignerPropertyManager::designerStringTypeId() || type == QVariant::String) {
- if (attribute == QLatin1String(validationModesAttributeC)) {
+ } else if (type == DesignerPropertyManager::designerStringTypeId() || type == QMetaType::QString) {
+ if (attribute == validationModesAttributeC) {
const TextPropertyValidationMode validationMode = static_cast<TextPropertyValidationMode>(value.toInt());
applyToEditors(m_stringPropertyToEditors.value(property), &TextEditor::setTextPropertyValidationMode, validationMode);
}
- if (attribute == QLatin1String(fontAttributeC)) {
+ if (attribute == fontAttributeC) {
const QFont font = qvariant_cast<QFont>(value);
applyToEditors(m_stringPropertyToEditors.value(property), &TextEditor::setRichTextDefaultFont, font);
}
- if (attribute == QLatin1String(themeAttributeC)) {
+ if (attribute == themeAttributeC) {
const bool themeEnabled = value.toBool();
applyToEditors(m_stringPropertyToEditors.value(property), &TextEditor::setIconThemeModeEnabled, themeEnabled);
}
- } else if (type == QVariant::Palette && attribute == QLatin1String(superPaletteAttributeC)) {
+ } else if (type == QMetaType::QPalette && attribute == superPaletteAttributeC) {
const QPalette palette = qvariant_cast<QPalette>(value);
applyToEditors(m_palettePropertyToEditors.value(property), &PaletteEditorButton::setSuperPalette, palette);
}
@@ -2311,14 +2077,17 @@ void DesignerEditorFactory::slotPropertyChanged(QtProperty *property)
QtVariantPropertyManager *manager = propertyManager(property);
const int type = manager->propertyType(property);
if (type == DesignerPropertyManager::designerIconTypeId()) {
- QPixmap defaultPixmap;
- if (!property->isModified())
- defaultPixmap = qvariant_cast<QIcon>(manager->attributeValue(property, QLatin1String(defaultResourceAttributeC))).pixmap(16, 16);
- else if (m_fwb)
- defaultPixmap = m_fwb->iconCache()->icon(qvariant_cast<PropertySheetIconValue>(manager->value(property))).pixmap(16, 16);
+ QIcon defaultPixmap;
+ if (!property->isModified()) {
+ const auto attributeValue = manager->attributeValue(property, defaultResourceAttributeC);
+ defaultPixmap = attributeValue.value<QIcon>();
+ } else if (m_fwb) {
+ const auto value = manager->value(property);
+ defaultPixmap = m_fwb->iconCache()->icon(value.value<PropertySheetIconValue>());
+ }
const auto editors = m_iconPropertyToEditors.value(property);
for (PixmapEditor *editor : editors)
- editor->setDefaultPixmap(defaultPixmap);
+ editor->setDefaultPixmapIcon(defaultPixmap);
}
}
@@ -2330,34 +2099,38 @@ void DesignerEditorFactory::slotValueChanged(QtProperty *property, const QVarian
QtVariantPropertyManager *manager = propertyManager(property);
const int type = manager->propertyType(property);
switch (type) {
- case QVariant::String:
+ case QMetaType::QString:
applyToEditors(m_stringPropertyToEditors.value(property), &TextEditor::setText, value.toString());
break;
- case QVariant::Palette:
+ case QMetaType::QPalette:
applyToEditors(m_palettePropertyToEditors.value(property), &PaletteEditorButton::setPalette, qvariant_cast<QPalette>(value));
break;
- case QVariant::UInt:
+ case QMetaType::Int:
+ applyToEditors(m_intPropertyToComboEditors.value(property), &QComboBox::setCurrentIndex, value.toInt());
+ break;
+ case QMetaType::UInt:
applyToEditors(m_uintPropertyToEditors.value(property), &QLineEdit::setText, QString::number(value.toUInt()));
break;
- case QVariant::LongLong:
+ case QMetaType::LongLong:
applyToEditors(m_longLongPropertyToEditors.value(property), &QLineEdit::setText, QString::number(value.toLongLong()));
break;
- case QVariant::ULongLong:
+ case QMetaType::ULongLong:
applyToEditors(m_uLongLongPropertyToEditors.value(property), &QLineEdit::setText, QString::number(value.toULongLong()));
break;
- case QVariant::Url:
+ case QMetaType::QUrl:
applyToEditors(m_urlPropertyToEditors.value(property), &TextEditor::setText, value.toUrl().toString());
break;
- case QVariant::ByteArray:
+ case QMetaType::QByteArray:
applyToEditors(m_byteArrayPropertyToEditors.value(property), &TextEditor::setText, QString::fromUtf8(value.toByteArray()));
break;
- case QVariant::StringList:
+ case QMetaType::QStringList:
applyToEditors(m_stringListPropertyToEditors.value(property), &StringListEditorButton::setStringList, value.toStringList());
break;
default:
if (type == DesignerPropertyManager::designerIconTypeId()) {
PropertySheetIconValue iconValue = qvariant_cast<PropertySheetIconValue>(value);
applyToEditors(m_iconPropertyToEditors.value(property), &PixmapEditor::setTheme, iconValue.theme());
+ applyToEditors(m_iconPropertyToEditors.value(property), &PixmapEditor::setThemeEnum, iconValue.themeEnum());
applyToEditors(m_iconPropertyToEditors.value(property), &PixmapEditor::setPath, iconValue.pixmap(QIcon::Normal, QIcon::Off).path());
} else if (type == DesignerPropertyManager::designerPixmapTypeId()) {
applyToEditors(m_pixmapPropertyToEditors.value(property), &PixmapEditor::setPath, qvariant_cast<PropertySheetPixmapValue>(value).path());
@@ -2388,20 +2161,21 @@ QWidget *DesignerEditorFactory::createEditor(QtVariantPropertyManager *manager,
QWidget *editor = nullptr;
const int type = manager->propertyType(property);
switch (type) {
- case QVariant::Bool: {
+ case QMetaType::Bool: {
editor = QtVariantEditorFactory::createEditor(manager, property, parent);
QtBoolEdit *boolEdit = qobject_cast<QtBoolEdit *>(editor);
if (boolEdit)
boolEdit->setTextVisible(false);
}
break;
- case QVariant::String: {
- const TextPropertyValidationMode tvm = static_cast<TextPropertyValidationMode>(manager->attributeValue(property, QLatin1String(validationModesAttributeC)).toInt());
+ case QMetaType::QString: {
+ const int itvm = manager->attributeValue(property, validationModesAttributeC).toInt();
+ const auto tvm = static_cast<TextPropertyValidationMode>(itvm);
TextEditor *ed = createTextEditor(parent, tvm, manager->value(property).toString());
- const QVariant richTextDefaultFont = manager->attributeValue(property, QLatin1String(fontAttributeC));
- if (richTextDefaultFont.type() == QVariant::Font)
+ const QVariant richTextDefaultFont = manager->attributeValue(property, fontAttributeC);
+ if (richTextDefaultFont.metaType().id() == QMetaType::QFont)
ed->setRichTextDefaultFont(qvariant_cast<QFont>(richTextDefaultFont));
- const bool themeEnabled = manager->attributeValue(property, QLatin1String(themeAttributeC)).toBool();
+ const bool themeEnabled = manager->attributeValue(property, themeAttributeC).toBool();
ed->setIconThemeModeEnabled(themeEnabled);
m_stringPropertyToEditors[property].append(ed);
m_editorToStringProperty[ed] = property;
@@ -2410,9 +2184,9 @@ QWidget *DesignerEditorFactory::createEditor(QtVariantPropertyManager *manager,
editor = ed;
}
break;
- case QVariant::Palette: {
+ case QMetaType::QPalette: {
PaletteEditorButton *ed = new PaletteEditorButton(m_core, qvariant_cast<QPalette>(manager->value(property)), parent);
- ed->setSuperPalette(qvariant_cast<QPalette>(manager->attributeValue(property, QLatin1String(superPaletteAttributeC))));
+ ed->setSuperPalette(qvariant_cast<QPalette>(manager->attributeValue(property, superPaletteAttributeC)));
m_palettePropertyToEditors[property].append(ed);
m_editorToPaletteProperty[ed] = property;
connect(ed, &QObject::destroyed, this, &DesignerEditorFactory::slotEditorDestroyed);
@@ -2420,7 +2194,19 @@ QWidget *DesignerEditorFactory::createEditor(QtVariantPropertyManager *manager,
editor = ed;
}
break;
- case QVariant::UInt: {
+ case QMetaType::Int:
+ if (manager->attributeValue(property, themeEnumAttributeC).toBool()) {
+ auto *ed = IconThemeEnumEditor::createComboBox(parent);
+ ed->setCurrentIndex(manager->value(property).toInt());
+ connect(ed, &QComboBox::currentIndexChanged, this,
+ &DesignerEditorFactory::slotIntChanged);
+ connect(ed, &QObject::destroyed, this, &DesignerEditorFactory::slotEditorDestroyed);
+ m_intPropertyToComboEditors[property].append(ed);
+ m_comboEditorToIntProperty.insert(ed, property);
+ editor = ed;
+ }
+ break;
+ case QMetaType::UInt: {
QLineEdit *ed = new QLineEdit(parent);
ed->setValidator(new QULongLongValidator(0, UINT_MAX, ed));
ed->setText(QString::number(manager->value(property).toUInt()));
@@ -2431,7 +2217,7 @@ QWidget *DesignerEditorFactory::createEditor(QtVariantPropertyManager *manager,
editor = ed;
}
break;
- case QVariant::LongLong: {
+ case QMetaType::LongLong: {
QLineEdit *ed = new QLineEdit(parent);
ed->setValidator(new QLongLongValidator(ed));
ed->setText(QString::number(manager->value(property).toLongLong()));
@@ -2442,7 +2228,7 @@ QWidget *DesignerEditorFactory::createEditor(QtVariantPropertyManager *manager,
editor = ed;
}
break;
- case QVariant::ULongLong: {
+ case QMetaType::ULongLong: {
QLineEdit *ed = new QLineEdit(parent);
ed->setValidator(new QULongLongValidator(ed));
ed->setText(QString::number(manager->value(property).toULongLong()));
@@ -2453,7 +2239,7 @@ QWidget *DesignerEditorFactory::createEditor(QtVariantPropertyManager *manager,
editor = ed;
}
break;
- case QVariant::Url: {
+ case QMetaType::QUrl: {
TextEditor *ed = createTextEditor(parent, ValidationURL, manager->value(property).toUrl().toString());
ed->setUpdateMode(TextPropertyEditor::UpdateOnFinished);
m_urlPropertyToEditors[property].append(ed);
@@ -2463,7 +2249,7 @@ QWidget *DesignerEditorFactory::createEditor(QtVariantPropertyManager *manager,
editor = ed;
}
break;
- case QVariant::ByteArray: {
+ case QMetaType::QByteArray: {
TextEditor *ed = createTextEditor(parent, ValidationMultiLine, QString::fromUtf8(manager->value(property).toByteArray()));
m_byteArrayPropertyToEditors[property].append(ed);
m_editorToByteArrayProperty[ed] = property;
@@ -2477,7 +2263,7 @@ QWidget *DesignerEditorFactory::createEditor(QtVariantPropertyManager *manager,
PixmapEditor *ed = new PixmapEditor(m_core, parent);
ed->setPixmapCache(m_fwb->pixmapCache());
ed->setPath(qvariant_cast<PropertySheetPixmapValue>(manager->value(property)).path());
- ed->setDefaultPixmap(qvariant_cast<QPixmap>(manager->attributeValue(property, QLatin1String(defaultResourceAttributeC))));
+ ed->setDefaultPixmap(qvariant_cast<QPixmap>(manager->attributeValue(property, defaultResourceAttributeC)));
ed->setSpacing(m_spacing);
m_pixmapPropertyToEditors[property].append(ed);
m_editorToPixmapProperty[ed] = property;
@@ -2490,35 +2276,37 @@ QWidget *DesignerEditorFactory::createEditor(QtVariantPropertyManager *manager,
ed->setIconThemeModeEnabled(true);
PropertySheetIconValue value = qvariant_cast<PropertySheetIconValue>(manager->value(property));
ed->setTheme(value.theme());
+ ed->setThemeEnum(value.themeEnum());
ed->setPath(value.pixmap(QIcon::Normal, QIcon::Off).path());
- QPixmap defaultPixmap;
+ QIcon defaultPixmap;
if (!property->isModified())
- defaultPixmap = qvariant_cast<QIcon>(manager->attributeValue(property, QLatin1String(defaultResourceAttributeC))).pixmap(16, 16);
+ defaultPixmap = qvariant_cast<QIcon>(manager->attributeValue(property, defaultResourceAttributeC));
else if (m_fwb)
- defaultPixmap = m_fwb->iconCache()->icon(value).pixmap(16, 16);
- ed->setDefaultPixmap(defaultPixmap);
+ defaultPixmap = m_fwb->iconCache()->icon(value);
+ ed->setDefaultPixmapIcon(defaultPixmap);
ed->setSpacing(m_spacing);
m_iconPropertyToEditors[property].append(ed);
m_editorToIconProperty[ed] = property;
connect(ed, &QObject::destroyed, this, &DesignerEditorFactory::slotEditorDestroyed);
connect(ed, &PixmapEditor::pathChanged, this, &DesignerEditorFactory::slotIconChanged);
connect(ed, &PixmapEditor::themeChanged, this, &DesignerEditorFactory::slotIconThemeChanged);
+ connect(ed, &PixmapEditor::themeEnumChanged, this, &DesignerEditorFactory::slotIconThemeEnumChanged);
editor = ed;
} else if (type == DesignerPropertyManager::designerStringTypeId()) {
- const TextPropertyValidationMode tvm = static_cast<TextPropertyValidationMode>(manager->attributeValue(property, QLatin1String(validationModesAttributeC)).toInt());
+ const TextPropertyValidationMode tvm = static_cast<TextPropertyValidationMode>(manager->attributeValue(property, validationModesAttributeC).toInt());
TextEditor *ed = createTextEditor(parent, tvm, qvariant_cast<PropertySheetStringValue>(manager->value(property)).value());
- const QVariant richTextDefaultFont = manager->attributeValue(property, QLatin1String(fontAttributeC));
- if (richTextDefaultFont.type() == QVariant::Font)
+ const QVariant richTextDefaultFont = manager->attributeValue(property, fontAttributeC);
+ if (richTextDefaultFont.metaType().id() == QMetaType::QFont)
ed->setRichTextDefaultFont(qvariant_cast<QFont>(richTextDefaultFont));
m_stringPropertyToEditors[property].append(ed);
m_editorToStringProperty[ed] = property;
connect(ed, &QObject::destroyed, this, &DesignerEditorFactory::slotEditorDestroyed);
connect(ed, &TextEditor::textChanged, this, &DesignerEditorFactory::slotStringTextChanged);
editor = ed;
- } else if (type == DesignerPropertyManager::designerStringListTypeId() || type == QVariant::StringList) {
+ } else if (type == DesignerPropertyManager::designerStringListTypeId() || type == QMetaType::QStringList) {
const QVariant variantValue = manager->value(property);
- const QStringList value = type == QVariant::StringList ? variantValue.toStringList() :
- qvariant_cast<PropertySheetStringListValue>(variantValue).value();
+ const QStringList value = type == QMetaType::QStringList
+ ? variantValue.toStringList() : qvariant_cast<PropertySheetStringListValue>(variantValue).value();
StringListEditorButton *ed = new StringListEditorButton(value, parent);
m_stringListPropertyToEditors[property].append(ed);
m_editorToStringListProperty.insert(ed, property);
@@ -2539,14 +2327,14 @@ QWidget *DesignerEditorFactory::createEditor(QtVariantPropertyManager *manager,
break;
}
return m_resetDecorator->editor(editor,
- manager->variantProperty(property)->attributeValue(QLatin1String(resettableAttributeC)).toBool(),
+ manager->variantProperty(property)->attributeValue(resettableAttributeC).toBool(),
manager, property, parent);
}
template <class Editor>
bool removeEditor(QObject *object,
- QMap<QtProperty *, QList<Editor> > *propertyToEditors,
- QMap<Editor, QtProperty *> *editorToProperty)
+ QHash<const QtProperty *, QList<Editor>> *propertyToEditors,
+ QHash<Editor, QtProperty *> *editorToProperty)
{
if (!propertyToEditors)
return false;
@@ -2584,6 +2372,8 @@ void DesignerEditorFactory::slotEditorDestroyed(QObject *object)
return;
if (removeEditor(object, &m_longLongPropertyToEditors, &m_editorToLongLongProperty))
return;
+ if (removeEditor(object, &m_intPropertyToComboEditors, &m_comboEditorToIntProperty))
+ return;
if (removeEditor(object, &m_uLongLongPropertyToEditors, &m_editorToULongLongProperty))
return;
if (removeEditor(object, &m_urlPropertyToEditors, &m_editorToUrlProperty))
@@ -2596,7 +2386,7 @@ void DesignerEditorFactory::slotEditorDestroyed(QObject *object)
template<class Editor>
bool updateManager(QtVariantEditorFactory *factory, bool *changingPropertyValue,
- const QMap<Editor, QtProperty *> &editorToProperty, QWidget *editor, const QVariant &value)
+ const QHash<Editor, QtProperty *> &editorToProperty, QWidget *editor, const QVariant &value)
{
if (!editor)
return false;
@@ -2623,6 +2413,12 @@ void DesignerEditorFactory::slotLongLongChanged(const QString &value)
updateManager(this, &m_changingPropertyValue, m_editorToLongLongProperty, qobject_cast<QWidget *>(sender()), value.toLongLong());
}
+void DesignerEditorFactory::slotIntChanged(int v)
+{
+ updateManager(this, &m_changingPropertyValue, m_comboEditorToIntProperty,
+ qobject_cast<QWidget *>(sender()), v);
+}
+
void DesignerEditorFactory::slotULongLongChanged(const QString &value)
{
updateManager(this, &m_changingPropertyValue, m_editorToULongLongProperty, qobject_cast<QWidget *>(sender()), value.toULongLong());
@@ -2639,7 +2435,7 @@ void DesignerEditorFactory::slotByteArrayChanged(const QString &value)
}
template <class Editor>
-QtProperty *findPropertyForEditor(const QMap<Editor *, QtProperty *> &editorMap,
+QtProperty *findPropertyForEditor(const QHash<Editor *, QtProperty *> &editorMap,
const QObject *sender)
{
for (auto it = editorMap.constBegin(), cend = editorMap.constEnd(); it != cend; ++it)
@@ -2714,6 +2510,14 @@ void DesignerEditorFactory::slotIconThemeChanged(const QString &value)
QVariant::fromValue(icon));
}
+void DesignerEditorFactory::slotIconThemeEnumChanged(int value)
+{
+ PropertySheetIconValue icon;
+ icon.setThemeEnum(value);
+ updateManager(this, &m_changingPropertyValue, m_editorToIconProperty,
+ qobject_cast<QWidget *>(sender()), QVariant::fromValue(icon));
+}
+
void DesignerEditorFactory::slotStringListChanged(const QStringList &value)
{
if (QtProperty *prop = findPropertyForEditor(m_editorToStringListProperty, sender())) {
@@ -2831,8 +2635,7 @@ void ResetDecorator::slotPropertyChanged(QtProperty *property)
void ResetDecorator::slotEditorDestroyed(QObject *object)
{
- const QMap<ResetWidget *, QtProperty *>::ConstIterator rcend = m_resetWidgetToProperty.constEnd();
- for (QMap<ResetWidget *, QtProperty *>::ConstIterator itEditor = m_resetWidgetToProperty.constBegin(); itEditor != rcend; ++itEditor) {
+ for (auto itEditor = m_resetWidgetToProperty.cbegin(), cend = m_resetWidgetToProperty.cend(); itEditor != cend; ++itEditor) {
if (itEditor.key() == object) {
ResetWidget *editor = itEditor.key();
QtProperty *property = itEditor.value();
diff --git a/src/designer/src/components/propertyeditor/designerpropertymanager.h b/src/designer/src/components/propertyeditor/designerpropertymanager.h
index abc6e385c..be5c224bb 100644
--- a/src/designer/src/components/propertyeditor/designerpropertymanager.h
+++ b/src/designer/src/components/propertyeditor/designerpropertymanager.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef DESIGNERPROPERTYMANAGER_H
#define DESIGNERPROPERTYMANAGER_H
@@ -37,15 +12,16 @@
#include <shared_enums_p.h>
#include <QtCore/qurl.h>
-#include <QtCore/qmap.h>
+#include <QtCore/qhash.h>
#include <QtGui/qfont.h>
#include <QtGui/qicon.h>
QT_BEGIN_NAMESPACE
-typedef QPair<QString, uint> DesignerIntPair;
+using DesignerIntPair = std::pair<QString, uint>;
using DesignerFlagList = QList<DesignerIntPair>;
+class QComboBox;
class QDesignerFormEditorInterface;
class QLineEdit;
class QUrl;
@@ -80,8 +56,8 @@ private slots:
void slotPropertyChanged(QtProperty *property);
void slotEditorDestroyed(QObject *object);
private:
- QMap<QtProperty *, QList<ResetWidget *> > m_createdResetWidgets;
- QMap<ResetWidget *, QtProperty *> m_resetWidgetToProperty;
+ QHash<const QtProperty *, QList<ResetWidget *>> m_createdResetWidgets;
+ QHash<ResetWidget *, QtProperty *> m_resetWidgetToProperty;
int m_spacing;
const QDesignerFormEditorInterface *m_core;
};
@@ -104,16 +80,16 @@ public:
int expectedTypeId, const QVariant &value);
private:
- QHash<QtProperty *, PropertySheetValue> m_values;
- QHash<QtProperty *, QtProperty *> m_valueToComment;
- QHash<QtProperty *, QtProperty *> m_valueToTranslatable;
- QHash<QtProperty *, QtProperty *> m_valueToDisambiguation;
- QHash<QtProperty *, QtProperty *> m_valueToId;
-
- QHash<QtProperty *, QtProperty *> m_commentToValue;
- QHash<QtProperty *, QtProperty *> m_translatableToValue;
- QHash<QtProperty *, QtProperty *> m_disambiguationToValue;
- QHash<QtProperty *, QtProperty *> m_idToValue;
+ QHash<const QtProperty *, PropertySheetValue> m_values;
+ QHash<const QtProperty *, QtProperty *> m_valueToComment;
+ QHash<const QtProperty *, QtProperty *> m_valueToTranslatable;
+ QHash<const QtProperty *, QtProperty *> m_valueToDisambiguation;
+ QHash<const QtProperty *, QtProperty *> m_valueToId;
+
+ QHash<const QtProperty *, QtProperty *> m_commentToValue;
+ QHash<const QtProperty *, QtProperty *> m_translatableToValue;
+ QHash<const QtProperty *, QtProperty *> m_disambiguationToValue;
+ QHash<const QtProperty *, QtProperty *> m_idToValue;
};
class DesignerPropertyManager : public QtVariantPropertyManager
@@ -135,6 +111,7 @@ public:
QString valueText(const QtProperty *property) const override;
QIcon valueIcon(const QtProperty *property) const override;
+ bool resetTextAlignmentProperty(QtProperty *property);
bool resetFontSubProperty(QtProperty *property);
bool resetIconSubProperty(QtProperty *subProperty);
@@ -156,6 +133,10 @@ public:
static bool useIdBasedTranslations()
{ return m_IdBasedTranslations; }
+ static QString alignDefaultAttribute();
+
+ static uint alignDefault(const QtVariantProperty *prop);
+
public Q_SLOTS:
void setAttribute(QtProperty *property, const QString &attribute, const QVariant &value) override;
void setValue(QtProperty *property, const QVariant &value) override;
@@ -172,21 +153,18 @@ private Q_SLOTS:
private:
void createIconSubProperty(QtProperty *iconProperty, QIcon::Mode mode, QIcon::State state, const QString &subName);
- typedef QMap<QtProperty *, bool> PropertyBoolMap;
- PropertyBoolMap m_resetMap;
+ QHash<const QtProperty *, bool> m_resetMap;
- int bitCount(int mask) const;
struct FlagData
{
uint val{0};
DesignerFlagList flags;
QList<uint> values;
};
- typedef QMap<QtProperty *, FlagData> PropertyFlagDataMap;
- PropertyFlagDataMap m_flagValues;
- typedef QMap<QtProperty *, QList<QtProperty *> > PropertyToPropertyListMap;
- PropertyToPropertyListMap m_propertyToFlags;
- QMap<QtProperty *, QtProperty *> m_flagToProperty;
+
+ QHash<const QtProperty *, FlagData> m_flagValues;
+ QHash<const QtProperty *, QList<QtProperty *>> m_propertyToFlags;
+ QHash<const QtProperty *, QtProperty *> m_flagToProperty;
int alignToIndexH(uint align) const;
int alignToIndexV(uint align) const;
@@ -194,17 +172,19 @@ private:
uint indexVToAlign(int idx) const;
QString indexHToString(int idx) const;
QString indexVToString(int idx) const;
- QMap<QtProperty *, uint> m_alignValues;
- typedef QMap<QtProperty *, QtProperty *> PropertyToPropertyMap;
+ QHash<const QtProperty *, uint> m_alignValues;
+ using PropertyToPropertyMap = QHash<const QtProperty *, QtProperty *>;
PropertyToPropertyMap m_propertyToAlignH;
PropertyToPropertyMap m_propertyToAlignV;
PropertyToPropertyMap m_alignHToProperty;
PropertyToPropertyMap m_alignVToProperty;
+ QHash<const QtProperty *, Qt::Alignment> m_alignDefault;
- QMap<QtProperty *, QMap<QPair<QIcon::Mode, QIcon::State>, QtProperty *> > m_propertyToIconSubProperties;
- QMap<QtProperty *, QPair<QIcon::Mode, QIcon::State> > m_iconSubPropertyToState;
+ QHash<const QtProperty *, QMap<std::pair<QIcon::Mode, QIcon::State>, QtProperty *>> m_propertyToIconSubProperties;
+ QHash<const QtProperty *, std::pair<QIcon::Mode, QIcon::State>> m_iconSubPropertyToState;
PropertyToPropertyMap m_iconSubPropertyToProperty;
PropertyToPropertyMap m_propertyToTheme;
+ PropertyToPropertyMap m_propertyToThemeEnum;
TranslatablePropertyManager<PropertySheetStringValue> m_stringManager;
TranslatablePropertyManager<PropertySheetKeySequenceValue> m_keySequenceManager;
@@ -215,29 +195,28 @@ private:
QPalette val;
QPalette superPalette;
};
- typedef QMap<QtProperty *, PaletteData> PropertyPaletteDataMap;
- PropertyPaletteDataMap m_paletteValues;
+ QHash<const QtProperty *, PaletteData> m_paletteValues;
- QMap<QtProperty *, qdesigner_internal::PropertySheetPixmapValue> m_pixmapValues;
- QMap<QtProperty *, qdesigner_internal::PropertySheetIconValue> m_iconValues;
+ QHash<const QtProperty *, qdesigner_internal::PropertySheetPixmapValue> m_pixmapValues;
+ QHash<const QtProperty *, qdesigner_internal::PropertySheetIconValue> m_iconValues;
- QMap<QtProperty *, uint> m_uintValues;
- QMap<QtProperty *, qlonglong> m_longLongValues;
- QMap<QtProperty *, qulonglong> m_uLongLongValues;
- QMap<QtProperty *, QUrl> m_urlValues;
- QMap<QtProperty *, QByteArray> m_byteArrayValues;
+ QHash<const QtProperty *, int> m_intValues;
+ QHash<const QtProperty *, uint> m_uintValues;
+ QHash<const QtProperty *, qlonglong> m_longLongValues;
+ QHash<const QtProperty *, qulonglong> m_uLongLongValues;
+ QHash<const QtProperty *, QUrl> m_urlValues;
+ QHash<const QtProperty *, QByteArray> m_byteArrayValues;
- typedef QMap<QtProperty *, int> PropertyIntMap;
- PropertyIntMap m_stringAttributes;
- typedef QMap<QtProperty *, QFont> PropertyFontMap;
- PropertyFontMap m_stringFontAttributes;
- PropertyBoolMap m_stringThemeAttributes;
+ QHash<const QtProperty *, int> m_stringAttributes;
+ QHash<const QtProperty *, QFont> m_stringFontAttributes;
+ QHash<const QtProperty *, bool> m_stringThemeAttributes;
+ QHash<const QtProperty *, bool> m_intThemeEnumAttributes;
BrushPropertyManager m_brushManager;
FontPropertyManager m_fontManager;
- QMap<QtProperty *, QPixmap> m_defaultPixmaps;
- QMap<QtProperty *, QIcon> m_defaultIcons;
+ QHash<const QtProperty *, QPixmap> m_defaultPixmaps;
+ QHash<const QtProperty *, QIcon> m_defaultIcons;
bool m_changingSubValue;
QDesignerFormEditorInterface *m_core;
@@ -274,7 +253,9 @@ private slots:
void slotPixmapChanged(const QString &value);
void slotIconChanged(const QString &value);
void slotIconThemeChanged(const QString &value);
+ void slotIconThemeEnumChanged(int value);
void slotUintChanged(const QString &value);
+ void slotIntChanged(int);
void slotLongLongChanged(const QString &value);
void slotULongLongChanged(const QString &value);
void slotUrlChanged(const QString &value);
@@ -290,28 +271,30 @@ private:
int m_spacing;
- QMap<QtProperty *, QList<TextEditor *> > m_stringPropertyToEditors;
- QMap<TextEditor *, QtProperty *> m_editorToStringProperty;
- QMap<QtProperty *, QList<QKeySequenceEdit *> > m_keySequencePropertyToEditors;
- QMap<QKeySequenceEdit *, QtProperty *> m_editorToKeySequenceProperty;
- QMap<QtProperty *, QList<PaletteEditorButton *> > m_palettePropertyToEditors;
- QMap<PaletteEditorButton *, QtProperty *> m_editorToPaletteProperty;
- QMap<QtProperty *, QList<PixmapEditor *> > m_pixmapPropertyToEditors;
- QMap<PixmapEditor *, QtProperty *> m_editorToPixmapProperty;
- QMap<QtProperty *, QList<PixmapEditor *> > m_iconPropertyToEditors;
- QMap<PixmapEditor *, QtProperty *> m_editorToIconProperty;
- QMap<QtProperty *, QList<QLineEdit *> > m_uintPropertyToEditors;
- QMap<QLineEdit *, QtProperty *> m_editorToUintProperty;
- QMap<QtProperty *, QList<QLineEdit *> > m_longLongPropertyToEditors;
- QMap<QLineEdit *, QtProperty *> m_editorToLongLongProperty;
- QMap<QtProperty *, QList<QLineEdit *> > m_uLongLongPropertyToEditors;
- QMap<QLineEdit *, QtProperty *> m_editorToULongLongProperty;
- QMap<QtProperty *, QList<TextEditor *> > m_urlPropertyToEditors;
- QMap<TextEditor *, QtProperty *> m_editorToUrlProperty;
- QMap<QtProperty *, QList<TextEditor *> > m_byteArrayPropertyToEditors;
- QMap<TextEditor *, QtProperty *> m_editorToByteArrayProperty;
- QMap<QtProperty *, QList<StringListEditorButton *> > m_stringListPropertyToEditors;
- QMap<StringListEditorButton *, QtProperty *> m_editorToStringListProperty;
+ QHash<const QtProperty *, QList<TextEditor *>> m_stringPropertyToEditors;
+ QHash<TextEditor *, QtProperty *> m_editorToStringProperty;
+ QHash<const QtProperty *, QList<QKeySequenceEdit *>> m_keySequencePropertyToEditors;
+ QHash<QKeySequenceEdit *, QtProperty *> m_editorToKeySequenceProperty;
+ QHash<const QtProperty *, QList<PaletteEditorButton *>> m_palettePropertyToEditors;
+ QHash<PaletteEditorButton *, QtProperty *> m_editorToPaletteProperty;
+ QHash<const QtProperty *, QList<PixmapEditor *>> m_pixmapPropertyToEditors;
+ QHash<PixmapEditor *, QtProperty *> m_editorToPixmapProperty;
+ QHash<const QtProperty *, QList<PixmapEditor *>> m_iconPropertyToEditors;
+ QHash<PixmapEditor *, QtProperty *> m_editorToIconProperty;
+ QHash<const QtProperty *, QList<QComboBox *>> m_intPropertyToComboEditors;
+ QHash<QComboBox *, QtProperty *> m_comboEditorToIntProperty;
+ QHash<const QtProperty *, QList<QLineEdit *>> m_uintPropertyToEditors;
+ QHash<QLineEdit *, QtProperty *> m_editorToUintProperty;
+ QHash<const QtProperty *, QList<QLineEdit *>> m_longLongPropertyToEditors;
+ QHash<QLineEdit *, QtProperty *> m_editorToLongLongProperty;
+ QHash<const QtProperty *, QList<QLineEdit *>> m_uLongLongPropertyToEditors;
+ QHash<QLineEdit *, QtProperty *> m_editorToULongLongProperty;
+ QHash<const QtProperty *, QList<TextEditor *>> m_urlPropertyToEditors;
+ QHash<TextEditor *, QtProperty *> m_editorToUrlProperty;
+ QHash<const QtProperty *, QList<TextEditor *>> m_byteArrayPropertyToEditors;
+ QHash<TextEditor *, QtProperty *> m_editorToByteArrayProperty;
+ QHash<const QtProperty *, QList<StringListEditorButton *>> m_stringListPropertyToEditors;
+ QHash<StringListEditorButton *, QtProperty *> m_editorToStringListProperty;
};
} // namespace qdesigner_internal
diff --git a/src/designer/src/components/propertyeditor/fontmapping.xml b/src/designer/src/components/propertyeditor/fontmapping.xml
index 20a1f63c4..d7a716e39 100644
--- a/src/designer/src/components/propertyeditor/fontmapping.xml
+++ b/src/designer/src/components/propertyeditor/fontmapping.xml
@@ -1,32 +1,7 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************-->
+<!--
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+-->
<!DOCTYPE fontmapping
[
diff --git a/src/designer/src/components/propertyeditor/fontpropertymanager.cpp b/src/designer/src/components/propertyeditor/fontpropertymanager.cpp
index b624de147..fdd33add2 100644
--- a/src/designer/src/components/propertyeditor/fontpropertymanager.cpp
+++ b/src/designer/src/components/propertyeditor/fontpropertymanager.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "fontpropertymanager.h"
#include "qtpropertymanager.h"
@@ -41,21 +16,36 @@
#include <QtCore/qtextstream.h>
#include <QtCore/qxmlstream.h>
+#include <utility>
+
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
+ using DisambiguatedTranslation = std::pair<const char *, const char *>;
+
static const char *aliasingC[] = {
QT_TRANSLATE_NOOP("FontPropertyManager", "PreferDefault"),
QT_TRANSLATE_NOOP("FontPropertyManager", "NoAntialias"),
QT_TRANSLATE_NOOP("FontPropertyManager", "PreferAntialias")
};
+ static const DisambiguatedTranslation hintingPreferenceC[] = {
+ QT_TRANSLATE_NOOP3("FontPropertyManager", "PreferDefaultHinting", "QFont::StyleStrategy combo"),
+ QT_TRANSLATE_NOOP3("FontPropertyManager", "PreferNoHinting", "QFont::StyleStrategy combo"),
+ QT_TRANSLATE_NOOP3("FontPropertyManager", "PreferVerticalHinting", "QFont::StyleStrategy combo"),
+ QT_TRANSLATE_NOOP3("FontPropertyManager", "PreferFullHinting", "QFont::StyleStrategy combo")
+ };
+
FontPropertyManager::FontPropertyManager()
{
- const int nameCount = sizeof(aliasingC)/sizeof(const char *);
- for (int i = 0; i < nameCount; i++)
- m_aliasingEnumNames.push_back(QCoreApplication::translate("FontPropertyManager", aliasingC[i]));
+ for (const auto *a : aliasingC)
+ m_aliasingEnumNames.append(QCoreApplication::translate("FontPropertyManager", a));
+
+ for (const auto &h : hintingPreferenceC)
+ m_hintingPreferenceEnumNames.append(QCoreApplication::translate("FontPropertyManager", h.first, h.second));
QString errorMessage;
if (!readFamilyMapping(&m_familyMappings, &errorMessage)) {
@@ -69,7 +59,7 @@ namespace qdesigner_internal {
ResetMap &resetMap)
{
if (m_createdFontProperty) {
- PropertyToSubPropertiesMap::iterator it = m_propertyToFontSubProperties.find(m_createdFontProperty);
+ auto it = m_propertyToFontSubProperties.find(m_createdFontProperty);
if (it == m_propertyToFontSubProperties.end())
it = m_propertyToFontSubProperties.insert(m_createdFontProperty, PropertyList());
const int index = it.value().size();
@@ -79,7 +69,7 @@ namespace qdesigner_internal {
resetMap[property] = true;
}
- if (type == QVariant::Font)
+ if (type == QMetaType::QFont)
m_createdFontProperty = property;
}
@@ -103,24 +93,33 @@ namespace qdesigner_internal {
int type,
int enumTypeId)
{
- if (type != QVariant::Font)
+ if (type != QMetaType::QFont)
return;
// This will cause a recursion
QtVariantProperty *antialiasing = vm->addProperty(enumTypeId, QCoreApplication::translate("FontPropertyManager", "Antialiasing"));
const QFont font = qvariant_cast<QFont>(vm->variantProperty(property)->value());
- antialiasing->setAttribute(QStringLiteral("enumNames"), m_aliasingEnumNames);
+ antialiasing->setAttribute(u"enumNames"_s, m_aliasingEnumNames);
antialiasing->setValue(antialiasingToIndex(font.styleStrategy()));
property->addSubProperty(antialiasing);
m_propertyToAntialiasing[property] = antialiasing;
m_antialiasingToProperty[antialiasing] = property;
+
+ QtVariantProperty *hintingPreference = vm->addProperty(enumTypeId, QCoreApplication::translate("FontPropertyManager", "HintingPreference"));
+ hintingPreference->setAttribute(u"enumNames"_s, m_hintingPreferenceEnumNames);
+ hintingPreference->setValue(hintingPreferenceToIndex(font.hintingPreference()));
+ property->addSubProperty(hintingPreference);
+
+ m_propertyToHintingPreference[property] = hintingPreference;
+ m_hintingPreferenceToProperty[hintingPreference] = property;
+
// Fiddle family names
if (!m_familyMappings.isEmpty()) {
- const PropertyToSubPropertiesMap::iterator it = m_propertyToFontSubProperties.find(m_createdFontProperty);
+ const auto it = m_propertyToFontSubProperties.find(m_createdFontProperty);
QtVariantProperty *familyProperty = vm->variantProperty(it.value().constFirst());
- const QString enumNamesAttribute = QStringLiteral("enumNames");
+ const QString enumNamesAttribute = u"enumNames"_s;
QStringList plainFamilyNames = familyProperty->attributeValue(enumNamesAttribute).toStringList();
// Did someone load fonts or something?
if (m_designerFamilyNames.size() != plainFamilyNames.size())
@@ -133,7 +132,7 @@ namespace qdesigner_internal {
bool FontPropertyManager::uninitializeProperty(QtProperty *property)
{
- const PropertyToPropertyMap::iterator ait = m_propertyToAntialiasing.find(property);
+ const auto ait = m_propertyToAntialiasing.find(property);
if (ait != m_propertyToAntialiasing.end()) {
QtProperty *antialiasing = ait.value();
m_antialiasingToProperty.remove(antialiasing);
@@ -141,7 +140,15 @@ namespace qdesigner_internal {
delete antialiasing;
}
- PropertyToSubPropertiesMap::iterator sit = m_propertyToFontSubProperties.find(property);
+ const auto hit = m_propertyToHintingPreference.find(property);
+ if (hit != m_propertyToHintingPreference.end()) {
+ QtProperty *hintingPreference = hit.value();
+ m_hintingPreferenceToProperty.remove(hintingPreference);
+ m_propertyToHintingPreference.erase(hit);
+ delete hintingPreference;
+ }
+
+ const auto sit = m_propertyToFontSubProperties.find(property);
if (sit == m_propertyToFontSubProperties.end())
return false;
@@ -155,20 +162,30 @@ namespace qdesigner_internal {
void FontPropertyManager::slotPropertyDestroyed(QtProperty *property)
{
removeAntialiasingProperty(property);
+ removeHintingPreferenceProperty(property);
}
void FontPropertyManager::removeAntialiasingProperty(QtProperty *property)
{
- const PropertyToPropertyMap::iterator ait = m_antialiasingToProperty.find(property);
+ const auto ait = m_antialiasingToProperty.find(property);
if (ait == m_antialiasingToProperty.end())
return;
m_propertyToAntialiasing[ait.value()] = 0;
m_antialiasingToProperty.erase(ait);
}
+ void FontPropertyManager::removeHintingPreferenceProperty(QtProperty *property)
+ {
+ const auto hit = m_hintingPreferenceToProperty.find(property);
+ if (hit == m_hintingPreferenceToProperty.end())
+ return;
+ m_propertyToHintingPreference[hit.value()] = nullptr;
+ m_hintingPreferenceToProperty.erase(hit);
+ }
+
bool FontPropertyManager::resetFontSubProperty(QtVariantPropertyManager *vm, QtProperty *property)
{
- const PropertyToPropertyMap::iterator it = m_fontSubPropertyToProperty.find(property);
+ const auto it = m_fontSubPropertyToProperty.find(property);
if (it == m_fontSubPropertyToProperty.end())
return false;
@@ -207,31 +224,80 @@ namespace qdesigner_internal {
return QFont::PreferDefault;
}
+ int FontPropertyManager::hintingPreferenceToIndex(QFont::HintingPreference h)
+ {
+ switch (h) {
+ case QFont::PreferDefaultHinting:
+ return 0;
+ case QFont::PreferNoHinting:
+ return 1;
+ case QFont::PreferVerticalHinting:
+ return 2;
+ case QFont::PreferFullHinting:
+ return 3;
+ }
+ return 0;
+ }
+
+ QFont::HintingPreference FontPropertyManager::indexToHintingPreference(int idx)
+ {
+ switch (idx) {
+ case 0:
+ return QFont::PreferDefaultHinting;
+ case 1:
+ return QFont::PreferNoHinting;
+ case 2:
+ return QFont::PreferVerticalHinting;
+ case 3:
+ return QFont::PreferFullHinting;
+ }
+ return QFont::PreferDefaultHinting;
+ }
+
unsigned FontPropertyManager::fontFlag(int idx)
{
switch (idx) {
- case 0: return QFont::FamilyResolved;
- case 1: return QFont::SizeResolved;
- case 2: return QFont::WeightResolved;
- case 3: return QFont::StyleResolved;
- case 4: return QFont::UnderlineResolved;
- case 5: return QFont::StrikeOutResolved;
- case 6: return QFont::KerningResolved;
- case 7: return QFont::StyleStrategyResolved;
+ case 0:
+ return QFont::FamilyResolved | QFont::FamiliesResolved;
+ case 1:
+ return QFont::SizeResolved;
+ case 2:
+ case 7:
+ return QFont::WeightResolved;
+ case 3:
+ return QFont::StyleResolved;
+ case 4:
+ return QFont::UnderlineResolved;
+ case 5:
+ return QFont::StrikeOutResolved;
+ case 6:
+ return QFont::KerningResolved;
+ case 8:
+ return QFont::StyleStrategyResolved;
+ case 9:
+ return QFont::HintingPreferenceResolved;
}
return 0;
}
int FontPropertyManager::valueChanged(QtVariantPropertyManager *vm, QtProperty *property, const QVariant &value)
{
- QtProperty *antialiasingProperty = m_antialiasingToProperty.value(property, 0);
- if (!antialiasingProperty) {
- if (m_propertyToFontSubProperties.contains(property)) {
- updateModifiedState(property, value);
- }
- return DesignerPropertyManager::NoMatch;
- }
+ if (auto *antialiasingProperty = m_antialiasingToProperty.value(property, nullptr))
+ return antialiasingValueChanged(vm, antialiasingProperty, value);
+
+ if (auto *hintingPreferenceProperty = m_hintingPreferenceToProperty.value(property, nullptr))
+ return hintingPreferenceValueChanged(vm, hintingPreferenceProperty, value);
+
+ if (m_propertyToFontSubProperties.contains(property))
+ updateModifiedState(property, value);
+
+ return DesignerPropertyManager::NoMatch;
+ }
+ int FontPropertyManager::antialiasingValueChanged(QtVariantPropertyManager *vm,
+ QtProperty *antialiasingProperty,
+ const QVariant &value)
+ {
QtVariantProperty *fontProperty = vm->variantProperty(antialiasingProperty);
const QFont::StyleStrategy newValue = indexToAntialiasing(value.toInt());
@@ -245,9 +311,26 @@ namespace qdesigner_internal {
return DesignerPropertyManager::Changed;
}
+ int FontPropertyManager::hintingPreferenceValueChanged(QtVariantPropertyManager *vm,
+ QtProperty *hintingPreferenceProperty,
+ const QVariant &value)
+ {
+ QtVariantProperty *fontProperty = vm->variantProperty(hintingPreferenceProperty);
+ const QFont::HintingPreference newValue = indexToHintingPreference(value.toInt());
+
+ QFont font = qvariant_cast<QFont>(fontProperty->value());
+ const QFont::HintingPreference oldValue = font.hintingPreference();
+ if (newValue == oldValue)
+ return DesignerPropertyManager::Unchanged;
+
+ font.setHintingPreference(newValue);
+ fontProperty->setValue(QVariant::fromValue(font));
+ return DesignerPropertyManager::Changed;
+ }
+
void FontPropertyManager::updateModifiedState(QtProperty *property, const QVariant &value)
{
- const PropertyToSubPropertiesMap::iterator it = m_propertyToFontSubProperties.find(property);
+ const auto it = m_propertyToFontSubProperties.find(property);
if (it == m_propertyToFontSubProperties.end())
return;
@@ -274,6 +357,14 @@ namespace qdesigner_internal {
antialiasing->setValue(antialiasingToIndex(font.styleStrategy()));
}
}
+
+ if (QtProperty *hintingPreferenceProperty = m_propertyToHintingPreference.value(property, nullptr)) {
+ if (auto *hintingPreference = vm->variantProperty(hintingPreferenceProperty)) {
+ QFont font = qvariant_cast<QFont>(value);
+ hintingPreference->setValue(hintingPreferenceToIndex(font.hintingPreference()));
+ }
+ }
+
}
/* Parse a mappings file of the form:
@@ -281,14 +372,14 @@ namespace qdesigner_internal {
* <mapping><family>DejaVu Sans</family><display>DejaVu Sans [CE]</display></mapping>
* ... which is used to display on which platforms fonts are available.*/
- static const char *rootTagC = "fontmappings";
- static const char *mappingTagC = "mapping";
- static const char *familyTagC = "family";
- static const char *displayTagC = "display";
+static constexpr auto rootTagC = "fontmappings"_L1;
+static constexpr auto mappingTagC = "mapping"_L1;
+static constexpr auto familyTagC = "family"_L1;
+static constexpr auto displayTagC = "display"_L1;
static QString msgXmlError(const QXmlStreamReader &r, const QString& fileName)
{
- return QString::fromUtf8("An error has been encountered at line %1 of %2: %3:").arg(r.lineNumber()).arg(fileName, r.errorString());
+ return u"An error has been encountered at line %1 of %2: %3:"_s.arg(r.lineNumber()).arg(fileName, r.errorString());
}
/* Switch stages when encountering a start element (state table) */
@@ -299,14 +390,14 @@ namespace qdesigner_internal {
{
switch (currentStage) {
case ParseBeginning:
- return startElement == QLatin1String(rootTagC) ? ParseWithinRoot : ParseError;
+ return startElement == rootTagC ? ParseWithinRoot : ParseError;
case ParseWithinRoot:
case ParseWithinDisplay: // Next mapping, was in <display>
- return startElement == QLatin1String(mappingTagC) ? ParseWithinMapping : ParseError;
+ return startElement == mappingTagC ? ParseWithinMapping : ParseError;
case ParseWithinMapping:
- return startElement == QLatin1String(familyTagC) ? ParseWithinFamily : ParseError;
+ return startElement == familyTagC ? ParseWithinFamily : ParseError;
case ParseWithinFamily:
- return startElement == QLatin1String(displayTagC) ? ParseWithinDisplay : ParseError;
+ return startElement == displayTagC ? ParseWithinDisplay : ParseError;
case ParseError:
break;
}
@@ -316,10 +407,10 @@ namespace qdesigner_internal {
bool FontPropertyManager::readFamilyMapping(NameMap *rc, QString *errorMessage)
{
rc->clear();
- const QString fileName = QStringLiteral(":/qt-project.org/propertyeditor/fontmapping.xml");
+ const QString fileName = u":/qt-project.org/propertyeditor/fontmapping.xml"_s;
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly)) {
- *errorMessage = QString::fromUtf8("Unable to open %1: %2").arg(fileName, file.errorString());
+ *errorMessage = "Unable to open %1: %2"_L1.arg(fileName, file.errorString());
return false;
}
@@ -338,7 +429,7 @@ namespace qdesigner_internal {
stage = nextStage(stage, reader.name());
switch (stage) {
case ParseError:
- reader.raiseError(QString::fromUtf8("Unexpected element <%1>.").arg(reader.name().toString()));
+ reader.raiseError("Unexpected element <%1>."_L1.arg(reader.name()));
*errorMessage = msgXmlError(reader, fileName);
return false;
case ParseWithinFamily:
@@ -350,6 +441,7 @@ namespace qdesigner_internal {
default:
break;
}
+ break;
default:
break;
}
diff --git a/src/designer/src/components/propertyeditor/fontpropertymanager.h b/src/designer/src/components/propertyeditor/fontpropertymanager.h
index 1041cd357..3e628dbf2 100644
--- a/src/designer/src/components/propertyeditor/fontpropertymanager.h
+++ b/src/designer/src/components/propertyeditor/fontpropertymanager.h
@@ -1,34 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef FONTPROPERTYMANAGER_H
#define FONTPROPERTYMANAGER_H
+#include <QtCore/qhash.h>
#include <QtCore/qmap.h>
#include <QtCore/qstringlist.h>
#include <QtGui/qfont.h>
@@ -55,7 +31,7 @@ class FontPropertyManager {
public:
FontPropertyManager();
- using ResetMap = QMap<QtProperty *, bool>;
+ using ResetMap = QHash<const QtProperty *, bool>;
using NameMap = QMap<QString, QString>;
// Call before QtVariantPropertyManager::initializeProperty.
@@ -80,24 +56,36 @@ public:
static bool readFamilyMapping(NameMap *rc, QString *errorMessage);
private:
- using PropertyToPropertyMap = QMap<QtProperty *, QtProperty *>;
+ using PropertyToPropertyMap = QHash<QtProperty *, QtProperty *>;
using PropertyList = QList<QtProperty *>;
- using PropertyToSubPropertiesMap = QMap<QtProperty *, PropertyList>;
void removeAntialiasingProperty(QtProperty *);
+ void removeHintingPreferenceProperty(QtProperty *);
+ int antialiasingValueChanged(QtVariantPropertyManager *vm,
+ QtProperty *antialiasingProperty, const QVariant &value);
+ int hintingPreferenceValueChanged(QtVariantPropertyManager *vm,
+ QtProperty *hintingPreferenceProperty,
+ const QVariant &value);
void updateModifiedState(QtProperty *property, const QVariant &value);
static int antialiasingToIndex(QFont::StyleStrategy antialias);
static QFont::StyleStrategy indexToAntialiasing(int idx);
+ static int hintingPreferenceToIndex(QFont::HintingPreference h);
+ static QFont::HintingPreference indexToHintingPreference(int idx);
+
static unsigned fontFlag(int idx);
PropertyToPropertyMap m_propertyToAntialiasing;
PropertyToPropertyMap m_antialiasingToProperty;
+ PropertyToPropertyMap m_propertyToHintingPreference;
+ PropertyToPropertyMap m_hintingPreferenceToProperty;
+
- PropertyToSubPropertiesMap m_propertyToFontSubProperties;
- QMap<QtProperty *, int> m_fontSubPropertyToFlag;
+ QHash<QtProperty *, PropertyList> m_propertyToFontSubProperties;
+ QHash<QtProperty *, int> m_fontSubPropertyToFlag;
PropertyToPropertyMap m_fontSubPropertyToProperty;
QtProperty *m_createdFontProperty = nullptr;
QStringList m_aliasingEnumNames;
+ QStringList m_hintingPreferenceEnumNames;
// Font families with Designer annotations
QStringList m_designerFamilyNames;
NameMap m_familyMappings;
diff --git a/src/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp b/src/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp
index 0a0046c9c..6ac1638bc 100644
--- a/src/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp
+++ b/src/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "newdynamicpropertydialog.h"
#include "ui_newdynamicpropertydialog.h"
@@ -35,6 +10,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
NewDynamicPropertyDialog::NewDynamicPropertyDialog(QDesignerDialogGuiInterface *dialogGui,
@@ -45,37 +22,65 @@ NewDynamicPropertyDialog::NewDynamicPropertyDialog(QDesignerDialogGuiInterface *
{
m_ui->setupUi(this);
connect(m_ui->m_lineEdit, &QLineEdit::textChanged, this, &NewDynamicPropertyDialog::nameChanged);
-
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
-
- m_ui->m_comboBox->addItem(QStringLiteral("String"), QVariant(QVariant::String));
- m_ui->m_comboBox->addItem(QStringLiteral("StringList"), QVariant(QVariant::StringList));
- m_ui->m_comboBox->addItem(QStringLiteral("Char"), QVariant(QVariant::Char));
- m_ui->m_comboBox->addItem(QStringLiteral("ByteArray"), QVariant(QVariant::ByteArray));
- m_ui->m_comboBox->addItem(QStringLiteral("Url"), QVariant(QVariant::Url));
- m_ui->m_comboBox->addItem(QStringLiteral("Bool"), QVariant(QVariant::Bool));
- m_ui->m_comboBox->addItem(QStringLiteral("Int"), QVariant(QVariant::Int));
- m_ui->m_comboBox->addItem(QStringLiteral("UInt"), QVariant(QVariant::UInt));
- m_ui->m_comboBox->addItem(QStringLiteral("LongLong"), QVariant(QVariant::LongLong));
- m_ui->m_comboBox->addItem(QStringLiteral("ULongLong"), QVariant(QVariant::ULongLong));
- m_ui->m_comboBox->addItem(QStringLiteral("Double"), QVariant(QVariant::Double));
- m_ui->m_comboBox->addItem(QStringLiteral("Size"), QVariant(QVariant::Size));
- m_ui->m_comboBox->addItem(QStringLiteral("SizeF"), QVariant(QVariant::SizeF));
- m_ui->m_comboBox->addItem(QStringLiteral("Point"), QVariant(QVariant::Point));
- m_ui->m_comboBox->addItem(QStringLiteral("PointF"), QVariant(QVariant::PointF));
- m_ui->m_comboBox->addItem(QStringLiteral("Rect"), QVariant(QVariant::Rect));
- m_ui->m_comboBox->addItem(QStringLiteral("RectF"), QVariant(QVariant::RectF));
- m_ui->m_comboBox->addItem(QStringLiteral("Date"), QVariant(QVariant::Date));
- m_ui->m_comboBox->addItem(QStringLiteral("Time"), QVariant(QVariant::Time));
- m_ui->m_comboBox->addItem(QStringLiteral("DateTime"), QVariant(QVariant::DateTime));
- m_ui->m_comboBox->addItem(QStringLiteral("Font"), QVariant(QVariant::Font));
- m_ui->m_comboBox->addItem(QStringLiteral("Palette"), QVariant(QVariant::Palette));
- m_ui->m_comboBox->addItem(QStringLiteral("Color"), QVariant(QVariant::Color));
- m_ui->m_comboBox->addItem(QStringLiteral("Pixmap"), QVariant(QVariant::Pixmap));
- m_ui->m_comboBox->addItem(QStringLiteral("Icon"), QVariant(QVariant::Icon));
- m_ui->m_comboBox->addItem(QStringLiteral("Cursor"), QVariant(QVariant::Cursor));
- m_ui->m_comboBox->addItem(QStringLiteral("SizePolicy"), QVariant(QVariant::SizePolicy));
- m_ui->m_comboBox->addItem(QStringLiteral("KeySequence"), QVariant(QVariant::KeySequence));
+ connect(m_ui->m_buttonBox, &QDialogButtonBox::clicked,
+ this, &NewDynamicPropertyDialog::buttonBoxClicked);
+
+ m_ui->m_comboBox->addItem(u"String"_s,
+ QVariant(QMetaType(QMetaType::QString)));
+ m_ui->m_comboBox->addItem(u"StringList"_s,
+ QVariant(QMetaType(QMetaType::QStringList)));
+ m_ui->m_comboBox->addItem(u"Char"_s,
+ QVariant(QMetaType(QMetaType::QChar)));
+ m_ui->m_comboBox->addItem(u"ByteArray"_s,
+ QVariant(QMetaType(QMetaType::QByteArray)));
+ m_ui->m_comboBox->addItem(u"Url"_s,
+ QVariant(QMetaType(QMetaType::QUrl)));
+ m_ui->m_comboBox->addItem(u"Bool"_s,
+ QVariant(QMetaType(QMetaType::Bool)));
+ m_ui->m_comboBox->addItem(u"Int"_s,
+ QVariant(QMetaType(QMetaType::Int)));
+ m_ui->m_comboBox->addItem(u"UInt"_s,
+ QVariant(QMetaType(QMetaType::UInt)));
+ m_ui->m_comboBox->addItem(u"LongLong"_s,
+ QVariant(QMetaType(QMetaType::LongLong)));
+ m_ui->m_comboBox->addItem(u"ULongLong"_s,
+ QVariant(QMetaType(QMetaType::ULongLong)));
+ m_ui->m_comboBox->addItem(u"Double"_s,
+ QVariant(QMetaType(QMetaType::Double)));
+ m_ui->m_comboBox->addItem(u"Size"_s,
+ QVariant(QMetaType(QMetaType::QSize)));
+ m_ui->m_comboBox->addItem(u"SizeF"_s,
+ QVariant(QMetaType(QMetaType::QSizeF)));
+ m_ui->m_comboBox->addItem(u"Point"_s,
+ QVariant(QMetaType(QMetaType::QPoint)));
+ m_ui->m_comboBox->addItem(u"PointF"_s,
+ QVariant(QMetaType(QMetaType::QPointF)));
+ m_ui->m_comboBox->addItem(u"Rect"_s,
+ QVariant(QMetaType(QMetaType::QRect)));
+ m_ui->m_comboBox->addItem(u"RectF"_s,
+ QVariant(QMetaType(QMetaType::QRectF)));
+ m_ui->m_comboBox->addItem(u"Date"_s,
+ QVariant(QMetaType(QMetaType::QDate)));
+ m_ui->m_comboBox->addItem(u"Time"_s,
+ QVariant(QMetaType(QMetaType::QTime)));
+ m_ui->m_comboBox->addItem(u"DateTime"_s,
+ QVariant(QMetaType(QMetaType::QDateTime)));
+ m_ui->m_comboBox->addItem(u"Font"_s,
+ QVariant(QMetaType(QMetaType::QFont)));
+ m_ui->m_comboBox->addItem(u"Palette"_s,
+ QVariant(QMetaType(QMetaType::QPalette)));
+ m_ui->m_comboBox->addItem(u"Color"_s,
+ QVariant(QMetaType(QMetaType::QColor)));
+ m_ui->m_comboBox->addItem(u"Pixmap"_s,
+ QVariant(QMetaType(QMetaType::QPixmap)));
+ m_ui->m_comboBox->addItem(u"Icon"_s,
+ QVariant(QMetaType(QMetaType::QIcon)));
+ m_ui->m_comboBox->addItem(u"Cursor"_s,
+ QVariant(QMetaType(QMetaType::QCursor)));
+ m_ui->m_comboBox->addItem(u"SizePolicy"_s,
+ QVariant(QMetaType(QMetaType::QSizePolicy)));
+ m_ui->m_comboBox->addItem(u"KeySequence"_s,
+ QVariant(QMetaType(QMetaType::QKeySequence)));
m_ui->m_comboBox->setCurrentIndex(0); // String
setOkButtonEnabled(false);
@@ -96,9 +101,9 @@ void NewDynamicPropertyDialog::setReservedNames(const QStringList &names)
m_reservedNames = names;
}
-void NewDynamicPropertyDialog::setPropertyType(QVariant::Type t)
+void NewDynamicPropertyDialog::setPropertyType(int t)
{
- const int index = m_ui->m_comboBox->findData(QVariant(t));
+ const int index = m_ui->m_comboBox->findData(QVariant(QMetaType(t)));
if (index != -1)
m_ui->m_comboBox->setCurrentIndex(index);
}
@@ -132,14 +137,14 @@ bool NewDynamicPropertyDialog::validatePropertyName(const QString& name)
information(tr("The current object already has a property named '%1'.\nPlease select another, unique one.").arg(name));
return false;
}
- if (!QDesignerPropertySheet::internalDynamicPropertiesEnabled() && name.startsWith(QStringLiteral("_q_"))) {
+ if (!QDesignerPropertySheet::internalDynamicPropertiesEnabled() && name.startsWith("_q_"_L1)) {
information(tr("The '_q_' prefix is reserved for the Qt library.\nPlease select another name."));
return false;
}
return true;
}
-void NewDynamicPropertyDialog::on_m_buttonBox_clicked(QAbstractButton *btn)
+void NewDynamicPropertyDialog::buttonBoxClicked(QAbstractButton *btn)
{
const int role = m_ui->m_buttonBox->buttonRole(btn);
switch (role) {
diff --git a/src/designer/src/components/propertyeditor/newdynamicpropertydialog.h b/src/designer/src/components/propertyeditor/newdynamicpropertydialog.h
index 17daee4c3..0142e4482 100644
--- a/src/designer/src/components/propertyeditor/newdynamicpropertydialog.h
+++ b/src/designer/src/components/propertyeditor/newdynamicpropertydialog.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef NEWDYNAMICPROPERTYDIALOG_P_H
#define NEWDYNAMICPROPERTYDIALOG_P_H
@@ -64,14 +39,14 @@ public:
~NewDynamicPropertyDialog();
void setReservedNames(const QStringList &names);
- void setPropertyType(QVariant::Type t);
+ void setPropertyType(int t);
QString propertyName() const;
QVariant propertyValue() const;
private slots:
- void on_m_buttonBox_clicked(QAbstractButton *btn);
+ void buttonBoxClicked(QAbstractButton *btn);
void nameChanged(const QString &);
private:
diff --git a/src/designer/src/components/propertyeditor/paletteeditor.cpp b/src/designer/src/components/propertyeditor/paletteeditor.cpp
index 228213ee6..b51bd6895 100644
--- a/src/designer/src/components/propertyeditor/paletteeditor.cpp
+++ b/src/designer/src/components/propertyeditor/paletteeditor.cpp
@@ -1,33 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "paletteeditor.h"
+#include <qdesigner_utils_p.h>
#include <iconloader_p.h>
#include <qtcolorbutton.h>
@@ -44,6 +20,7 @@
#include <QtWidgets/qlabel.h>
#include <QtWidgets/qmenu.h>
#include <QtWidgets/qheaderview.h>
+#include <QtWidgets/qstyle.h>
#include <QtGui/qaction.h>
#if QT_CONFIG(clipboard)
@@ -60,6 +37,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
enum { BrushRole = 33 };
@@ -75,7 +54,21 @@ PaletteEditor::PaletteEditor(QDesignerFormEditorInterface *core, QWidget *parent
auto loadButton = ui.buttonBox->addButton(tr("Load..."), QDialogButtonBox::ActionRole);
connect(loadButton, &QPushButton::clicked, this, &PaletteEditor::load);
+ connect(ui.buildButton, &QtColorButton::colorChanged,
+ this, &PaletteEditor::buildButtonColorChanged);
+ connect(ui.activeRadio, &QAbstractButton::clicked,
+ this, &PaletteEditor::activeRadioClicked);
+ connect(ui.inactiveRadio, &QAbstractButton::clicked,
+ this, &PaletteEditor::inactiveRadioClicked);
+ connect(ui.disabledRadio, &QAbstractButton::clicked,
+ this, &PaletteEditor::disabledRadioClicked);
+ connect(ui.computeRadio, &QAbstractButton::clicked,
+ this, &PaletteEditor::computeRadioClicked);
+ connect(ui.detailsRadio, &QAbstractButton::clicked,
+ this, &PaletteEditor::detailsRadioClicked);
+
ui.paletteView->setModel(m_paletteModel);
+ ui.previewGroupBox->setTitle(tr("Preview (%1)").arg(style()->objectName()));
updatePreviewPalette();
updateStyledButton();
ui.paletteView->setModel(m_paletteModel);
@@ -110,18 +103,15 @@ QPalette PaletteEditor::palette() const
void PaletteEditor::setPalette(const QPalette &palette)
{
m_editPalette = palette;
- const uint mask = palette.resolveMask();
- for (int i = 0; i < static_cast<int>(QPalette::NColorRoles); ++i) {
- if (!(mask & (1 << i))) {
- m_editPalette.setBrush(QPalette::Active, static_cast<QPalette::ColorRole>(i),
- m_parentPalette.brush(QPalette::Active, static_cast<QPalette::ColorRole>(i)));
- m_editPalette.setBrush(QPalette::Inactive, static_cast<QPalette::ColorRole>(i),
- m_parentPalette.brush(QPalette::Inactive, static_cast<QPalette::ColorRole>(i)));
- m_editPalette.setBrush(QPalette::Disabled, static_cast<QPalette::ColorRole>(i),
- m_parentPalette.brush(QPalette::Disabled, static_cast<QPalette::ColorRole>(i)));
+ for (int r = 0; r < static_cast<int>(QPalette::NColorRoles); ++r) {
+ for (int g = 0; g < static_cast<int>(QPalette::NColorGroups); ++g) {
+ const auto role = static_cast<QPalette::ColorRole>(r);
+ const auto group = static_cast<QPalette::ColorGroup>(g);
+ if (!palette.isBrushSet(group, role))
+ m_editPalette.setBrush(group, role, m_parentPalette.brush(group, role));
}
}
- m_editPalette.setResolveMask(mask);
+ m_editPalette.setResolveMask(palette.resolveMask());
updatePreviewPalette();
updateStyledButton();
m_paletteUpdated = true;
@@ -136,30 +126,30 @@ void PaletteEditor::setPalette(const QPalette &palette, const QPalette &parentPa
setPalette(palette);
}
-void PaletteEditor::on_buildButton_colorChanged(const QColor &)
+void PaletteEditor::buildButtonColorChanged()
{
buildPalette();
}
-void PaletteEditor::on_activeRadio_clicked()
+void PaletteEditor::activeRadioClicked()
{
m_currentColorGroup = QPalette::Active;
updatePreviewPalette();
}
-void PaletteEditor::on_inactiveRadio_clicked()
+void PaletteEditor::inactiveRadioClicked()
{
m_currentColorGroup = QPalette::Inactive;
updatePreviewPalette();
}
-void PaletteEditor::on_disabledRadio_clicked()
+void PaletteEditor::disabledRadioClicked()
{
m_currentColorGroup = QPalette::Disabled;
updatePreviewPalette();
}
-void PaletteEditor::on_computeRadio_clicked()
+void PaletteEditor::computeRadioClicked()
{
if (m_compute)
return;
@@ -169,7 +159,7 @@ void PaletteEditor::on_computeRadio_clicked()
m_paletteModel->setCompute(true);
}
-void PaletteEditor::on_detailsRadio_clicked()
+void PaletteEditor::detailsRadioClicked()
{
if (!m_compute)
return;
@@ -229,15 +219,12 @@ QPalette PaletteEditor::getPalette(QDesignerFormEditorInterface *core, QWidget*
{
PaletteEditor dlg(core, parent);
QPalette parentPalette(parentPal);
- uint mask = init.resolveMask();
- for (int i = 0; i < static_cast<int>(QPalette::NColorRoles); ++i) {
- if (!(mask & (1 << i))) {
- parentPalette.setBrush(QPalette::Active, static_cast<QPalette::ColorRole>(i),
- init.brush(QPalette::Active, static_cast<QPalette::ColorRole>(i)));
- parentPalette.setBrush(QPalette::Inactive, static_cast<QPalette::ColorRole>(i),
- init.brush(QPalette::Inactive, static_cast<QPalette::ColorRole>(i)));
- parentPalette.setBrush(QPalette::Disabled, static_cast<QPalette::ColorRole>(i),
- init.brush(QPalette::Disabled, static_cast<QPalette::ColorRole>(i)));
+ for (int r = 0; r < static_cast<int>(QPalette::NColorRoles); ++r) {
+ for (int g = 0; g < static_cast<int>(QPalette::NColorGroups); ++g) {
+ const auto role = static_cast<QPalette::ColorRole>(r);
+ const auto group = static_cast<QPalette::ColorGroup>(g);
+ if (!init.isBrushSet(group, role))
+ parentPalette.setBrush(group, role, init.brush(group, role));
}
}
dlg.setPalette(init, parentPalette);
@@ -285,8 +272,6 @@ void PaletteEditor::viewContextMenuRequested(const QPoint &pos)
m_paletteModel->setData(index, QVariant(brush), BrushRole);
}
-static inline QString paletteSuffix() { return QStringLiteral("xml"); }
-
static inline QString paletteFilter()
{
return PaletteEditor::tr("QPalette UI file (*.xml)");
@@ -343,7 +328,7 @@ static bool loadPalette(const QString &fileName, QPalette *pal, QString *errorMe
*errorMessage = msgCannotReadPalette(fileName, reader);
return false;
}
- if (reader.name() != QLatin1String("palette")) {
+ if (reader.name() != "palette"_L1) {
const auto why = PaletteEditor::tr("Invalid element \"%1\", expected \"palette\".")
.arg(reader.name().toString());
*errorMessage = msgCannotReadPalette(fileName, reader, why);
@@ -363,7 +348,7 @@ void PaletteEditor::save()
{
QFileDialog dialog(this, tr("Save Palette"), QString(), paletteFilter());
dialog.setAcceptMode(QFileDialog::AcceptSave);
- dialog.setDefaultSuffix(paletteSuffix());
+ dialog.setDefaultSuffix(u"xml"_s);
while (dialog.exec() == QDialog::Accepted) {
QString errorMessage;
if (savePalette(dialog.selectedFiles().constFirst(), palette(), &errorMessage))
@@ -388,6 +373,11 @@ void PaletteEditor::load()
}
//////////////////////
+// Column 0: Role name and reset button. Uses a boolean value indicating
+// whether the role is modified for the edit role.
+// Column 1: Color group Active
+// Column 2: Color group Inactive (visibility depending on m_compute/detail radio group)
+// Column 3: Color group Disabled
PaletteModel::PaletteModel(QObject *parent) :
QAbstractTableModel(parent)
@@ -400,7 +390,7 @@ PaletteModel::PaletteModel(QObject *parent) :
for (int r = QPalette::WindowText; r < QPalette::NColorRoles; r++) {
const auto role = static_cast<QPalette::ColorRole>(r);
if (role != QPalette::NoRole)
- m_roleEntries.append({QLatin1String(e.key(r)), role});
+ m_roleEntries.append({QLatin1StringView(e.key(r)), role});
}
}
@@ -419,6 +409,12 @@ QBrush PaletteModel::brushAt(const QModelIndex &index) const
return m_palette.brush(columnToGroup(index.column()), roleAt(index.row()));
}
+// Palette resolve mask with all group bits for a row/role
+quint64 PaletteModel::rowMask(const QModelIndex &index) const
+{
+ return paletteResolveMask(roleAt(index.row()));
+}
+
QVariant PaletteModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
@@ -428,15 +424,11 @@ QVariant PaletteModel::data(const QModelIndex &index, int role) const
if (index.column() < 0 || index.column() >= 4)
return QVariant();
- if (index.column() == 0) {
+ if (index.column() == 0) { // Role name/bold print if changed
if (role == Qt::DisplayRole)
return m_roleEntries.at(index.row()).name;
- if (role == Qt::EditRole) {
- const uint mask = m_palette.resolveMask();
- if (mask & (1 << int(roleAt(index.row()))))
- return true;
- return false;
- }
+ if (role == Qt::EditRole)
+ return (rowMask(index) & m_palette.resolveMask()) != 0;
return QVariant();
}
if (role == Qt::ToolTipRole)
@@ -495,11 +487,12 @@ bool PaletteModel::setData(const QModelIndex &index, const QVariant &value, int
return true;
}
if (index.column() == 0 && role == Qt::EditRole) {
- uint mask = m_palette.resolveMask();
+ auto mask = m_palette.resolveMask();
const bool isMask = qvariant_cast<bool>(value);
- if (isMask)
- mask |= (1 << int(colorRole));
- else {
+ const auto bitMask = rowMask(index);
+ if (isMask) {
+ mask |= bitMask;
+ } else {
m_palette.setBrush(QPalette::Active, colorRole,
m_parentPalette.brush(QPalette::Active, colorRole));
m_palette.setBrush(QPalette::Inactive, colorRole,
@@ -507,7 +500,7 @@ bool PaletteModel::setData(const QModelIndex &index, const QVariant &value, int
m_palette.setBrush(QPalette::Disabled, colorRole,
m_parentPalette.brush(QPalette::Disabled, colorRole));
- mask &= ~(1 << int(colorRole));
+ mask &= ~bitMask;
}
m_palette.setResolveMask(mask);
emit paletteChanged(m_palette);
@@ -575,7 +568,7 @@ int PaletteModel::groupToColumn(QPalette::ColorGroup group) const
int PaletteModel::rowOf(QPalette::ColorRole role) const
{
- for (int row = 0, size = m_roleEntries.size(); row < size; ++row) {
+ for (qsizetype row = 0, size = m_roleEntries.size(); row < size; ++row) {
if (m_roleEntries.at(row).role == role)
return row;
}
@@ -635,7 +628,7 @@ RoleEditor::RoleEditor(QWidget *parent) :
QToolButton *button = new QToolButton(this);
button->setToolButtonStyle(Qt::ToolButtonIconOnly);
- button->setIcon(createIconSet(QStringLiteral("resetproperty.png")));
+ button->setIcon(createIconSet("resetproperty.png"_L1));
button->setIconSize(QSize(8,8));
button->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::MinimumExpanding));
layout->addWidget(button);
diff --git a/src/designer/src/components/propertyeditor/paletteeditor.h b/src/designer/src/components/propertyeditor/paletteeditor.h
index 8ff10c591..2f29bfd76 100644
--- a/src/designer/src/components/propertyeditor/paletteeditor.h
+++ b/src/designer/src/components/propertyeditor/paletteeditor.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PALETTEEDITOR_H
#define PALETTEEDITOR_H
@@ -59,12 +34,12 @@ public:
private slots:
- void on_buildButton_colorChanged(const QColor &);
- void on_activeRadio_clicked();
- void on_inactiveRadio_clicked();
- void on_disabledRadio_clicked();
- void on_computeRadio_clicked();
- void on_detailsRadio_clicked();
+ void buildButtonColorChanged();
+ void activeRadioClicked();
+ void inactiveRadioClicked();
+ void disabledRadioClicked();
+ void computeRadioClicked();
+ void detailsRadioClicked();
void paletteChanged(const QPalette &palette);
void viewContextMenuRequested(const QPoint &pos);
@@ -121,6 +96,9 @@ public:
QPalette::ColorRole colorRole() const { return QPalette::NoRole; }
void setCompute(bool on) { m_compute = on; }
+
+ quint64 rowMask(const QModelIndex &index) const;
+
signals:
void paletteChanged(const QPalette &palette);
private:
diff --git a/src/designer/src/components/propertyeditor/paletteeditor.ui b/src/designer/src/components/propertyeditor/paletteeditor.ui
index 2bb8cfedc..129165c73 100644
--- a/src/designer/src/components/propertyeditor/paletteeditor.ui
+++ b/src/designer/src/components/propertyeditor/paletteeditor.ui
@@ -1,32 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+ <comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+</comment>
<class>qdesigner_internal::PaletteEditor</class>
<widget class="QDialog" name="qdesigner_internal::PaletteEditor">
<property name="geometry">
@@ -133,7 +110,7 @@
</widget>
</item>
<item>
- <widget class="QGroupBox" name="GroupBox126">
+ <widget class="QGroupBox" name="previewGroupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
diff --git a/src/designer/src/components/propertyeditor/paletteeditorbutton.cpp b/src/designer/src/components/propertyeditor/paletteeditorbutton.cpp
index f3370a4aa..4f6661bdc 100644
--- a/src/designer/src/components/propertyeditor/paletteeditorbutton.cpp
+++ b/src/designer/src/components/propertyeditor/paletteeditorbutton.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "paletteeditorbutton.h"
#include "paletteeditor.h"
@@ -33,7 +8,7 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+namespace qdesigner_internal {
PaletteEditorButton::PaletteEditorButton(QDesignerFormEditorInterface *core, const QPalette &palette, QWidget *parent)
: QToolButton(parent),
@@ -69,4 +44,6 @@ void PaletteEditorButton::showPaletteEditor()
}
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/propertyeditor/paletteeditorbutton.h b/src/designer/src/components/propertyeditor/paletteeditorbutton.h
index 947d80edb..01b9c211a 100644
--- a/src/designer/src/components/propertyeditor/paletteeditorbutton.h
+++ b/src/designer/src/components/propertyeditor/paletteeditorbutton.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PALETTEEDITORBUTTON_H
#define PALETTEEDITORBUTTON_H
diff --git a/src/designer/src/components/propertyeditor/pixmapeditor.cpp b/src/designer/src/components/propertyeditor/pixmapeditor.cpp
new file mode 100644
index 000000000..312fd135c
--- /dev/null
+++ b/src/designer/src/components/propertyeditor/pixmapeditor.cpp
@@ -0,0 +1,420 @@
+// 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 "pixmapeditor.h"
+#include <iconloader_p.h>
+#include <iconselector_p.h>
+#include <qdesigner_utils_p.h>
+
+#include <QtDesigner/abstractformeditor.h>
+
+#include <QtWidgets/qapplication.h>
+#include <QtWidgets/qlabel.h>
+#include <QtWidgets/qtoolbutton.h>
+#include <QtWidgets/qboxlayout.h>
+#include <QtWidgets/qlineedit.h>
+#include <QtWidgets/qdialogbuttonbox.h>
+#include <QtWidgets/qpushbutton.h>
+#include <QtWidgets/qfiledialog.h>
+#include <QtWidgets/qmenu.h>
+
+#include <QtGui/qaction.h>
+#if QT_CONFIG(clipboard)
+#include <QtGui/qclipboard.h>
+#endif
+#include <QtGui/qevent.h>
+
+QT_BEGIN_NAMESPACE
+
+using namespace Qt::StringLiterals;
+
+static constexpr QSize ICON_SIZE{16, 16};
+
+namespace qdesigner_internal {
+
+static void createIconThemeDialog(QDialog *topLevel, const QString &labelText,
+ QWidget *themeEditor)
+{
+ QVBoxLayout *layout = new QVBoxLayout(topLevel);
+ QLabel *label = new QLabel(labelText, topLevel);
+ QDialogButtonBox *buttons = new QDialogButtonBox(topLevel);
+ buttons->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
+ QObject::connect(buttons, &QDialogButtonBox::accepted, topLevel, &QDialog::accept);
+ QObject::connect(buttons, &QDialogButtonBox::rejected, topLevel, &QDialog::reject);
+
+ layout->addWidget(label);
+ layout->addWidget(themeEditor);
+ layout->addWidget(buttons);
+}
+
+IconThemeDialog::IconThemeDialog(QWidget *parent)
+ : QDialog(parent)
+{
+ setWindowTitle(tr("Set Icon From XDG Theme"));
+ m_editor = new IconThemeEditor(this);
+ createIconThemeDialog(this, tr("Select icon name from XDG theme:"), m_editor);
+}
+
+std::optional<QString> IconThemeDialog::getTheme(QWidget *parent, const QString &theme)
+{
+ IconThemeDialog dlg(parent);
+ dlg.m_editor->setTheme(theme);
+ if (dlg.exec() == QDialog::Accepted)
+ return dlg.m_editor->theme();
+ return std::nullopt;
+}
+
+IconThemeEnumDialog::IconThemeEnumDialog(QWidget *parent)
+ : QDialog(parent)
+{
+ setWindowTitle(tr("Set Icon From Theme"));
+ m_editor = new IconThemeEnumEditor(this);
+ createIconThemeDialog(this, tr("Select icon name from theme:"), m_editor);
+}
+
+std::optional<int> IconThemeEnumDialog::getTheme(QWidget *parent, int theme)
+{
+ IconThemeEnumDialog dlg(parent);
+ dlg.m_editor->setThemeEnum(theme);
+ if (dlg.exec() == QDialog::Accepted)
+ return dlg.m_editor->themeEnum();
+ return std::nullopt;
+}
+
+PixmapEditor::PixmapEditor(QDesignerFormEditorInterface *core, QWidget *parent) :
+ QWidget(parent),
+ m_iconThemeModeEnabled(false),
+ m_core(core),
+ m_pixmapLabel(new QLabel(this)),
+ m_pathLabel(new QLabel(this)),
+ m_button(new QToolButton(this)),
+ m_resourceAction(new QAction(tr("Choose Resource..."), this)),
+ m_fileAction(new QAction(tr("Choose File..."), this)),
+ m_themeEnumAction(new QAction(tr("Set Icon From Theme..."), this)),
+ m_themeAction(new QAction(tr("Set Icon From XDG Theme..."), this)),
+ m_copyAction(new QAction(createIconSet(QIcon::ThemeIcon::EditCopy, "editcopy.png"_L1),
+ tr("Copy Path"), this)),
+ m_pasteAction(new QAction(createIconSet(QIcon::ThemeIcon::EditPaste, "editpaste.png"_L1),
+ tr("Paste Path"), this)),
+ m_layout(new QHBoxLayout(this)),
+ m_pixmapCache(nullptr)
+{
+ m_layout->addWidget(m_pixmapLabel);
+ m_layout->addWidget(m_pathLabel);
+ m_button->setText(tr("..."));
+ m_button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Ignored);
+ m_button->setFixedWidth(30);
+ m_button->setPopupMode(QToolButton::MenuButtonPopup);
+ m_layout->addWidget(m_button);
+ m_layout->setContentsMargins(QMargins());
+ m_layout->setSpacing(0);
+ m_pixmapLabel->setFixedWidth(ICON_SIZE.width());
+ m_pixmapLabel->setAlignment(Qt::AlignCenter);
+ m_pathLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed));
+ m_themeAction->setVisible(false);
+ m_themeEnumAction->setVisible(false);
+
+ QMenu *menu = new QMenu(this);
+ menu->addAction(m_resourceAction);
+ menu->addAction(m_fileAction);
+ menu->addAction(m_themeEnumAction);
+ menu->addAction(m_themeAction);
+
+ m_button->setMenu(menu);
+ m_button->setText(tr("..."));
+
+ connect(m_button, &QAbstractButton::clicked, this, &PixmapEditor::defaultActionActivated);
+ connect(m_resourceAction, &QAction::triggered, this, &PixmapEditor::resourceActionActivated);
+ connect(m_fileAction, &QAction::triggered, this, &PixmapEditor::fileActionActivated);
+ connect(m_themeEnumAction, &QAction::triggered, this, &PixmapEditor::themeEnumActionActivated);
+ connect(m_themeAction, &QAction::triggered, this, &PixmapEditor::themeActionActivated);
+#if QT_CONFIG(clipboard)
+ connect(m_copyAction, &QAction::triggered, this, &PixmapEditor::copyActionActivated);
+ connect(m_pasteAction, &QAction::triggered, this, &PixmapEditor::pasteActionActivated);
+#endif
+ setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Ignored));
+ setFocusProxy(m_button);
+
+#if QT_CONFIG(clipboard)
+ connect(QApplication::clipboard(), &QClipboard::dataChanged,
+ this, &PixmapEditor::clipboardDataChanged);
+ clipboardDataChanged();
+#endif
+}
+
+void PixmapEditor::setPixmapCache(DesignerPixmapCache *cache)
+{
+ m_pixmapCache = cache;
+}
+
+void PixmapEditor::setIconThemeModeEnabled(bool enabled)
+{
+ if (m_iconThemeModeEnabled == enabled)
+ return;
+ m_iconThemeModeEnabled = enabled;
+ m_themeAction->setVisible(enabled);
+ m_themeEnumAction->setVisible(enabled);
+}
+
+void PixmapEditor::setSpacing(int spacing)
+{
+ m_layout->setSpacing(spacing);
+}
+
+void PixmapEditor::setPath(const QString &path)
+{
+ m_path = path;
+ updateLabels();
+}
+
+void PixmapEditor::setTheme(const QString &theme)
+{
+ m_theme = theme;
+ updateLabels();
+}
+
+QString PixmapEditor::msgThemeIcon(const QString &t)
+{
+ return tr("[Theme] %1").arg(t);
+}
+
+QString PixmapEditor::msgMissingThemeIcon(const QString &t)
+{
+ return tr("[Theme] %1 (missing)").arg(t);
+}
+
+void PixmapEditor::setThemeEnum(int e)
+{
+ m_themeEnum = e;
+ updateLabels();
+}
+
+void PixmapEditor::updateLabels()
+{
+ m_pathLabel->setText(displayText(m_themeEnum, m_theme, m_path));
+ switch (state()) {
+ case State::Empty:
+ case State::MissingXdgTheme:
+ case State::MissingThemeEnum:
+ m_pixmapLabel->setPixmap(m_defaultPixmap);
+ m_copyAction->setEnabled(false);
+ break;
+ case State::ThemeEnum:
+ m_pixmapLabel->setPixmap(QIcon::fromTheme(static_cast<QIcon::ThemeIcon>(m_themeEnum)).pixmap(ICON_SIZE));
+ m_copyAction->setEnabled(true);
+ break;
+ case State::XdgTheme:
+ m_pixmapLabel->setPixmap(QIcon::fromTheme(m_theme).pixmap(ICON_SIZE));
+ m_copyAction->setEnabled(true);
+ break;
+ case State::Path:
+ case State::PathFallback:
+ if (m_pixmapCache) {
+ auto pixmap = m_pixmapCache->pixmap(PropertySheetPixmapValue(m_path));
+ m_pixmapLabel->setPixmap(QIcon(pixmap).pixmap(ICON_SIZE));
+ }
+ m_copyAction->setEnabled(true);
+ break;
+ }
+}
+
+void PixmapEditor::setDefaultPixmapIcon(const QIcon &icon)
+{
+ m_defaultPixmap = icon.pixmap(ICON_SIZE);
+ if (state() == State::Empty)
+ m_pixmapLabel->setPixmap(m_defaultPixmap);
+}
+
+void PixmapEditor::setDefaultPixmap(const QPixmap &pixmap)
+{
+ setDefaultPixmapIcon(QIcon(pixmap));
+}
+
+void PixmapEditor::contextMenuEvent(QContextMenuEvent *event)
+{
+ QMenu menu(this);
+ menu.addAction(m_copyAction);
+ menu.addAction(m_pasteAction);
+ menu.exec(event->globalPos());
+ event->accept();
+}
+
+void PixmapEditor::defaultActionActivated()
+{
+ if (m_iconThemeModeEnabled) {
+ themeEnumActionActivated();
+ return;
+ }
+ // Default to resource
+ const PropertySheetPixmapValue::PixmapSource ps = m_path.isEmpty()
+ ? PropertySheetPixmapValue::ResourcePixmap
+ : PropertySheetPixmapValue::getPixmapSource(m_core, m_path);
+ switch (ps) {
+ case PropertySheetPixmapValue::LanguageResourcePixmap:
+ case PropertySheetPixmapValue::ResourcePixmap:
+ resourceActionActivated();
+ break;
+ case PropertySheetPixmapValue::FilePixmap:
+ fileActionActivated();
+ break;
+ }
+}
+
+void PixmapEditor::resourceActionActivated()
+{
+ const QString oldPath = m_path;
+ const QString newPath = IconSelector::choosePixmapResource(m_core, m_core->resourceModel(),
+ oldPath, this);
+ if (!newPath.isEmpty() && newPath != oldPath) {
+ setTheme({});
+ setThemeEnum(-1);
+ setPath(newPath);
+ emit pathChanged(newPath);
+ }
+}
+
+void PixmapEditor::fileActionActivated()
+{
+ const QString newPath = IconSelector::choosePixmapFile(m_path, m_core->dialogGui(), this);
+ if (!newPath.isEmpty() && newPath != m_path) {
+ setTheme({});
+ setThemeEnum(-1);
+ setPath(newPath);
+ emit pathChanged(newPath);
+ }
+}
+
+void PixmapEditor::themeEnumActionActivated()
+{
+ const auto newThemeO = IconThemeEnumDialog::getTheme(this, {});
+ if (newThemeO.has_value()) {
+ const int newTheme = newThemeO.value();
+ if (newTheme != m_themeEnum) {
+ setThemeEnum(newTheme);
+ setTheme({});
+ setPath({});
+ emit themeEnumChanged(newTheme);
+ }
+ }
+}
+
+void PixmapEditor::themeActionActivated()
+{
+ const auto newThemeO = IconThemeDialog::getTheme(this, m_theme);
+ if (newThemeO.has_value()) {
+ const QString newTheme = newThemeO.value();
+ if (newTheme != m_theme) {
+ setTheme(newTheme);
+ setThemeEnum(-1);
+ setPath({});
+ emit themeChanged(newTheme);
+ }
+ }
+}
+
+PixmapEditor::State PixmapEditor::stateFromData(int themeEnum, const QString &xdgTheme,
+ const QString &path)
+{
+ if (themeEnum != -1) {
+ if (QIcon::hasThemeIcon(static_cast<QIcon::ThemeIcon>(themeEnum)))
+ return State::ThemeEnum;
+ return path.isEmpty() ? State::MissingThemeEnum : State::PathFallback;
+ }
+ if (!xdgTheme.isEmpty()) {
+ if (QIcon::hasThemeIcon(xdgTheme))
+ return State::XdgTheme;
+ return path.isEmpty() ? State::MissingXdgTheme : State::PathFallback;
+ }
+ return path.isEmpty() ? State::Empty : State::Path;
+}
+
+PixmapEditor::State PixmapEditor::state() const
+{
+ return stateFromData(m_themeEnum, m_theme, m_path);
+}
+
+QString PixmapEditor::displayText(int themeEnum, const QString &xdgTheme, const QString &path)
+{
+ switch (stateFromData(themeEnum, xdgTheme, path)) {
+ case State::ThemeEnum:
+ return msgThemeIcon(IconThemeEnumEditor::iconName(themeEnum));
+ case State::MissingThemeEnum:
+ return msgMissingThemeIcon(IconThemeEnumEditor::iconName(themeEnum));
+ case State::XdgTheme:
+ return msgThemeIcon(xdgTheme);
+ case State::MissingXdgTheme:
+ return msgMissingThemeIcon(xdgTheme);
+ case State::Path:
+ return QFileInfo(path).fileName();
+ case State::PathFallback:
+ return tr("%1 (fallback)").arg(QFileInfo(path).fileName());
+ case State::Empty:
+ break;
+ }
+ return {};
+}
+
+QString PixmapEditor::displayText(const PropertySheetIconValue &icon)
+{
+ const auto &paths = icon.paths();
+ const auto &it = paths.constFind({QIcon::Normal, QIcon::Off});
+ const QString path = it != paths.constEnd() ? it.value().path() : QString{};
+ return displayText(icon.themeEnum(), icon.theme(), path);
+}
+
+#if QT_CONFIG(clipboard)
+void PixmapEditor::copyActionActivated()
+{
+ QClipboard *clipboard = QApplication::clipboard();
+ switch (state()) {
+ case State::ThemeEnum:
+ case State::MissingThemeEnum:
+ clipboard->setText(IconThemeEnumEditor::iconName(m_themeEnum));
+ break;
+ case State::XdgTheme:
+ case State::MissingXdgTheme:
+ clipboard->setText(m_theme);
+ break;
+ case State::Path:
+ case State::PathFallback:
+ clipboard->setText(m_path);
+ break;
+ case State::Empty:
+ break;
+ }
+}
+
+void PixmapEditor::pasteActionActivated()
+{
+ QClipboard *clipboard = QApplication::clipboard();
+ QString subtype = u"plain"_s;
+ QString text = clipboard->text(subtype);
+ if (!text.isNull()) {
+ QStringList list = text.split(u'\n');
+ if (!list.isEmpty()) {
+ text = list.at(0);
+ if (m_iconThemeModeEnabled && QIcon::hasThemeIcon(text)) {
+ setTheme(text);
+ setPath(QString());
+ emit themeChanged(text);
+ } else {
+ setPath(text);
+ setTheme(QString());
+ emit pathChanged(text);
+ }
+ }
+ }
+}
+
+void PixmapEditor::clipboardDataChanged()
+{
+ QClipboard *clipboard = QApplication::clipboard();
+ QString subtype = u"plain"_s;
+ const QString text = clipboard->text(subtype);
+ m_pasteAction->setEnabled(!text.isNull());
+}
+#endif // QT_CONFIG(clipboard)
+
+} // qdesigner_internal
+
+QT_END_NAMESPACE
diff --git a/src/designer/src/components/propertyeditor/pixmapeditor.h b/src/designer/src/components/propertyeditor/pixmapeditor.h
new file mode 100644
index 000000000..9ca730595
--- /dev/null
+++ b/src/designer/src/components/propertyeditor/pixmapeditor.h
@@ -0,0 +1,128 @@
+// 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 PIXMAPEDITOR_H
+#define PIXMAPEDITOR_H
+
+#include <QtWidgets/qdialog.h>
+
+#include <QtGui/qpixmap.h>
+
+#include <optional>
+
+QT_BEGIN_NAMESPACE
+
+class QLabel;
+class QHBoxLayout;
+class QToolButton;
+
+class QDesignerFormEditorInterface;
+
+namespace qdesigner_internal {
+
+class DesignerPixmapCache;
+class IconThemeEditor;
+class IconThemeEnumEditor;
+class PropertySheetIconValue;
+
+class IconThemeDialog : public QDialog
+{
+ Q_OBJECT
+public:
+ static std::optional<QString> getTheme(QWidget *parent, const QString &theme);
+private:
+ explicit IconThemeDialog(QWidget *parent);
+ IconThemeEditor *m_editor;
+};
+
+class IconThemeEnumDialog : public QDialog
+{
+ Q_OBJECT
+public:
+ static std::optional<int> getTheme(QWidget *parent, int theme);
+
+private:
+ IconThemeEnumDialog(QWidget *parent);
+ IconThemeEnumEditor *m_editor;
+};
+
+class PixmapEditor : public QWidget
+{
+ Q_OBJECT
+public:
+ explicit PixmapEditor(QDesignerFormEditorInterface *core, QWidget *parent);
+
+ void setSpacing(int spacing);
+ void setPixmapCache(DesignerPixmapCache *cache);
+ void setIconThemeModeEnabled(bool enabled);
+
+ static QString msgThemeIcon(const QString &t);
+ static QString msgMissingThemeIcon(const QString &t);
+ static QString displayText(const PropertySheetIconValue &icon);
+
+public slots:
+ void setPath(const QString &path);
+ void setTheme(const QString &theme);
+ void setThemeEnum(int e);
+ void setDefaultPixmap(const QPixmap &pixmap);
+ void setDefaultPixmapIcon(const QIcon &icon);
+
+signals:
+ void pathChanged(const QString &path);
+ void themeEnumChanged(int themeEnum);
+ void themeChanged(const QString &theme);
+
+protected:
+ void contextMenuEvent(QContextMenuEvent *event) override;
+
+private slots:
+ void defaultActionActivated();
+ void resourceActionActivated();
+ void fileActionActivated();
+ void themeEnumActionActivated();
+ void themeActionActivated();
+#if QT_CONFIG(clipboard)
+ void copyActionActivated();
+ void pasteActionActivated();
+ void clipboardDataChanged();
+#endif
+private:
+ enum class State {
+ Empty,
+ ThemeEnum,
+ MissingThemeEnum,
+ XdgTheme,
+ MissingXdgTheme,
+ Path,
+ PathFallback // Non-existent theme icon, falling back to path
+ };
+
+ static State stateFromData(int themeEnum, const QString &xdgTheme, const QString &path);
+ State state() const;
+ static QString displayText(int themeEnum, const QString &xdgTheme, const QString &path);
+
+ void updateLabels();
+ bool m_iconThemeModeEnabled;
+ QDesignerFormEditorInterface *m_core;
+ QLabel *m_pixmapLabel;
+ QLabel *m_pathLabel;
+ QToolButton *m_button;
+ QAction *m_resourceAction;
+ QAction *m_fileAction;
+ QAction *m_themeEnumAction;
+ QAction *m_themeAction;
+ QAction *m_copyAction;
+ QAction *m_pasteAction;
+ QHBoxLayout *m_layout;
+ QPixmap m_defaultPixmap;
+ QString m_path;
+ QString m_theme;
+ int m_themeEnum = -1;
+ DesignerPixmapCache *m_pixmapCache;
+};
+
+} // namespace qdesigner_internal
+
+QT_END_NAMESPACE
+
+#endif // PIXMAPEDITOR_H
diff --git a/src/designer/src/components/propertyeditor/previewframe.cpp b/src/designer/src/components/propertyeditor/previewframe.cpp
index c093663e2..04a3141c2 100644
--- a/src/designer/src/components/propertyeditor/previewframe.cpp
+++ b/src/designer/src/components/propertyeditor/previewframe.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "previewframe.h"
#include "previewwidget.h"
diff --git a/src/designer/src/components/propertyeditor/previewframe.h b/src/designer/src/components/propertyeditor/previewframe.h
index 436c468a1..f368bb8d2 100644
--- a/src/designer/src/components/propertyeditor/previewframe.h
+++ b/src/designer/src/components/propertyeditor/previewframe.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PREVIEWFRAME_H
#define PREVIEWFRAME_H
diff --git a/src/designer/src/components/propertyeditor/previewwidget.cpp b/src/designer/src/components/propertyeditor/previewwidget.cpp
index c489fc09a..722338dd9 100644
--- a/src/designer/src/components/propertyeditor/previewwidget.cpp
+++ b/src/designer/src/components/propertyeditor/previewwidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "previewwidget.h"
@@ -36,7 +11,7 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+namespace qdesigner_internal {
PreviewWidget::PreviewWidget(QWidget *parent)
: QWidget(parent)
@@ -56,5 +31,6 @@ PreviewWidget::PreviewWidget(QWidget *parent)
PreviewWidget::~PreviewWidget() = default;
+} // namespace qdesigner_internal
QT_END_NAMESPACE
diff --git a/src/designer/src/components/propertyeditor/previewwidget.h b/src/designer/src/components/propertyeditor/previewwidget.h
index 36e5ef9fe..5b129ef82 100644
--- a/src/designer/src/components/propertyeditor/previewwidget.h
+++ b/src/designer/src/components/propertyeditor/previewwidget.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PREVIEWWIDGET_H
#define PREVIEWWIDGET_H
diff --git a/src/designer/src/components/propertyeditor/previewwidget.ui b/src/designer/src/components/propertyeditor/previewwidget.ui
index 077ff24b4..dcbf62723 100644
--- a/src/designer/src/components/propertyeditor/previewwidget.ui
+++ b/src/designer/src/components/propertyeditor/previewwidget.ui
@@ -1,32 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+</comment>
<class>qdesigner_internal::PreviewWidget</class>
<widget class="QWidget" name="qdesigner_internal::PreviewWidget">
<property name="geometry">
diff --git a/src/designer/src/components/propertyeditor/propertyeditor.cpp b/src/designer/src/components/propertyeditor/propertyeditor.cpp
index f42fba6b3..50ef8e1fc 100644
--- a/src/designer/src/components/propertyeditor/propertyeditor.cpp
+++ b/src/designer/src/components/propertyeditor/propertyeditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "propertyeditor.h"
@@ -70,17 +45,19 @@
#include <QtCore/qdebug.h>
#include <QtCore/qtextstream.h>
-static const char *SettingsGroupC = "PropertyEditor";
-static const char *ViewKeyC = "View";
-static const char *ColorKeyC = "Colored";
-static const char *SortedKeyC = "Sorted";
-static const char *ExpansionKeyC = "ExpandedItems";
-static const char *SplitterPositionKeyC = "SplitterPosition";
-
enum SettingsView { TreeView, ButtonView };
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
+static constexpr auto SettingsGroupC = "PropertyEditor"_L1;
+static constexpr auto ViewKeyC = "View"_L1;
+static constexpr auto ColorKeyC = "Colored"_L1;
+static constexpr auto SortedKeyC = "Sorted"_L1;
+static constexpr auto ExpansionKeyC = "ExpandedItems"_L1;
+static constexpr auto SplitterPositionKeyC = "SplitterPosition"_L1;
+
// ---------------------------------------------------------------------------------
namespace qdesigner_internal {
@@ -135,20 +112,20 @@ void ElidingLabel::paintEvent(QPaintEvent *) {
// ----------- PropertyEditor::Strings
PropertyEditor::Strings::Strings() :
- m_fontProperty(QStringLiteral("font")),
- m_qLayoutWidget(QStringLiteral("QLayoutWidget")),
- m_designerPrefix(QStringLiteral("QDesigner")),
- m_layout(QStringLiteral("Layout")),
- m_validationModeAttribute(QStringLiteral("validationMode")),
- m_fontAttribute(QStringLiteral("font")),
- m_superPaletteAttribute(QStringLiteral("superPalette")),
- m_enumNamesAttribute(QStringLiteral("enumNames")),
- m_resettableAttribute(QStringLiteral("resettable")),
- m_flagsAttribute(QStringLiteral("flags"))
+ m_alignmentProperties{u"alignment"_s,
+ u"layoutLabelAlignment"_s, // QFormLayout
+ u"layoutFormAlignment"_s},
+ m_fontProperty(u"font"_s),
+ m_qLayoutWidget(u"QLayoutWidget"_s),
+ m_designerPrefix(u"QDesigner"_s),
+ m_layout(u"Layout"_s),
+ m_validationModeAttribute(u"validationMode"_s),
+ m_fontAttribute(u"font"_s),
+ m_superPaletteAttribute(u"superPalette"_s),
+ m_enumNamesAttribute(u"enumNames"_s),
+ m_resettableAttribute(u"resettable"_s),
+ m_flagsAttribute(u"flags"_s)
{
- m_alignmentProperties.insert(QStringLiteral("alignment"));
- m_alignmentProperties.insert(QStringLiteral("layoutLabelAlignment")); // QFormLayout
- m_alignmentProperties.insert(QStringLiteral("layoutFormAlignment"));
}
// ----------- PropertyEditor
@@ -206,41 +183,33 @@ PropertyEditor::PropertyEditor(QDesignerFormEditorInterface *core, QWidget *pare
m_propertyManager(new DesignerPropertyManager(m_core, this)),
m_stackedWidget(new QStackedWidget),
m_filterWidget(new QLineEdit),
- m_addDynamicAction(new QAction(createIconSet(QStringLiteral("plus.png")), tr("Add Dynamic Property..."), this)),
- m_removeDynamicAction(new QAction(createIconSet(QStringLiteral("minus.png")), tr("Remove Dynamic Property"), this)),
- m_sortingAction(new QAction(createIconSet(QStringLiteral("sort.png")), tr("Sorting"), this)),
- m_coloringAction(new QAction(createIconSet(QStringLiteral("color.png")), tr("Color Groups"), this)),
+ m_addDynamicAction(new QAction(createIconSet("plus.png"_L1), tr("Add Dynamic Property..."), this)),
+ m_removeDynamicAction(new QAction(createIconSet("minus.png"_L1), tr("Remove Dynamic Property"), this)),
+ m_sortingAction(new QAction(createIconSet("sort.png"_L1), tr("Sorting"), this)),
+ m_coloringAction(new QAction(createIconSet("color.png"_L1), tr("Color Groups"), this)),
m_treeAction(new QAction(tr("Tree View"), this)),
m_buttonAction(new QAction(tr("Drop Down Button View"), this)),
m_classLabel(new ElidingLabel)
{
- QList<QColor> colors;
- colors.reserve(6);
- colors.push_back(QColor(255, 230, 191));
- colors.push_back(QColor(255, 255, 191));
- colors.push_back(QColor(191, 255, 191));
- colors.push_back(QColor(199, 255, 255));
- colors.push_back(QColor(234, 191, 255));
- colors.push_back(QColor(255, 191, 239));
- m_colors.reserve(colors.count());
+ const QColor colors[] = {{255, 230, 191}, {255, 255, 191}, {191, 255, 191},
+ {199, 255, 255}, {234, 191, 255}, {255, 191, 239}};
const int darknessFactor = 250;
- for (int i = 0; i < colors.count(); i++) {
- const QColor &c = colors.at(i);
- m_colors.push_back(qMakePair(c, c.darker(darknessFactor)));
- }
+ m_colors.reserve(std::size(colors));
+ for (const QColor &c : colors)
+ m_colors.append({c, c.darker(darknessFactor)});
QColor dynamicColor(191, 207, 255);
QColor layoutColor(255, 191, 191);
- m_dynamicColor = qMakePair(dynamicColor, dynamicColor.darker(darknessFactor));
- m_layoutColor = qMakePair(layoutColor, layoutColor.darker(darknessFactor));
+ m_dynamicColor = {dynamicColor, dynamicColor.darker(darknessFactor)};
+ m_layoutColor = {layoutColor, layoutColor.darker(darknessFactor)};
updateForegroundBrightness();
QActionGroup *actionGroup = new QActionGroup(this);
m_treeAction->setCheckable(true);
- m_treeAction->setIcon(createIconSet(QStringLiteral("widgets/listview.png")));
+ m_treeAction->setIcon(createIconSet("widgets/listview.png"_L1));
m_buttonAction->setCheckable(true);
- m_buttonAction->setIcon(createIconSet(QStringLiteral("dropdownbutton.png")));
+ m_buttonAction->setIcon(createIconSet("dropdownbutton.png"_L1));
actionGroup->addAction(m_treeAction);
actionGroup->addAction(m_buttonAction);
@@ -256,21 +225,21 @@ PropertyEditor::PropertyEditor(QDesignerFormEditorInterface *core, QWidget *pare
m_addDynamicAction->setMenu(addDynamicActionMenu);
m_addDynamicAction->setEnabled(false);
QAction *addDynamicAction = addDynamicActionGroup->addAction(tr("String..."));
- addDynamicAction->setData(static_cast<int>(QVariant::String));
+ addDynamicAction->setData(static_cast<int>(QMetaType::QString));
addDynamicActionMenu->addAction(addDynamicAction);
addDynamicAction = addDynamicActionGroup->addAction(tr("Bool..."));
- addDynamicAction->setData(static_cast<int>(QVariant::Bool));
+ addDynamicAction->setData(static_cast<int>(QMetaType::Bool));
addDynamicActionMenu->addAction(addDynamicAction);
addDynamicActionMenu->addSeparator();
addDynamicAction = addDynamicActionGroup->addAction(tr("Other..."));
- addDynamicAction->setData(static_cast<int>(QVariant::Invalid));
+ addDynamicAction->setData(static_cast<int>(QMetaType::UnknownType));
addDynamicActionMenu->addAction(addDynamicAction);
// remove
m_removeDynamicAction->setEnabled(false);
connect(m_removeDynamicAction, &QAction::triggered, this, &PropertyEditor::slotRemoveDynamicProperty);
// Configure
QAction *configureAction = new QAction(tr("Configure Property Editor"), this);
- configureAction->setIcon(createIconSet(QStringLiteral("configure.png")));
+ configureAction->setIcon(createIconSet("configure.png"_L1));
QMenu *configureMenu = new QMenu(this);
configureAction->setMenu(configureMenu);
@@ -339,13 +308,13 @@ PropertyEditor::PropertyEditor(QDesignerFormEditorInterface *core, QWidget *pare
// retrieve initial settings
QDesignerSettingsInterface *settings = m_core->settingsManager();
- settings->beginGroup(QLatin1String(SettingsGroupC));
- const SettingsView view = settings->value(QLatin1String(ViewKeyC), TreeView).toInt() == TreeView ? TreeView : ButtonView;
+ settings->beginGroup(SettingsGroupC);
+ const SettingsView view = settings->value(ViewKeyC, TreeView).toInt() == TreeView ? TreeView : ButtonView;
// Coloring not available unless treeview and not sorted
- m_sorting = settings->value(QLatin1String(SortedKeyC), false).toBool();
- m_coloring = settings->value(QLatin1String(ColorKeyC), true).toBool();
- const QVariantMap expansionState = settings->value(QLatin1String(ExpansionKeyC), QVariantMap()).toMap();
- const int splitterPosition = settings->value(QLatin1String(SplitterPositionKeyC), 150).toInt();
+ m_sorting = settings->value(SortedKeyC, false).toBool();
+ m_coloring = settings->value(ColorKeyC, true).toBool();
+ const QVariantMap expansionState = settings->value(ExpansionKeyC, QVariantMap()).toMap();
+ const int splitterPosition = settings->value(SplitterPositionKeyC, 150).toInt();
settings->endGroup();
// Apply settings
m_sortingAction->setChecked(m_sorting);
@@ -364,16 +333,17 @@ PropertyEditor::PropertyEditor(QDesignerFormEditorInterface *core, QWidget *pare
break;
}
// Restore expansionState from QVariant map
- if (!expansionState.isEmpty()) {
- const QVariantMap::const_iterator cend = expansionState.constEnd();
- for (QVariantMap::const_iterator it = expansionState.constBegin(); it != cend; ++it)
- m_expansionState.insert(it.key(), it.value().toBool());
- }
+ for (auto it = expansionState.cbegin(), cend = expansionState.cend(); it != cend; ++it)
+ m_expansionState.insert(it.key(), it.value().toBool());
+
updateActionsState();
}
PropertyEditor::~PropertyEditor()
{
+ // Prevent emission of QtTreePropertyBrowser::itemChanged() when deleting
+ // the current item, causing asserts.
+ m_treeBrowser->setCurrentItem(nullptr);
storeExpansionState();
saveSettings();
}
@@ -381,19 +351,16 @@ PropertyEditor::~PropertyEditor()
void PropertyEditor::saveSettings() const
{
QDesignerSettingsInterface *settings = m_core->settingsManager();
- settings->beginGroup(QLatin1String(SettingsGroupC));
- settings->setValue(QLatin1String(ViewKeyC), QVariant(m_treeAction->isChecked() ? TreeView : ButtonView));
- settings->setValue(QLatin1String(ColorKeyC), QVariant(m_coloring));
- settings->setValue(QLatin1String(SortedKeyC), QVariant(m_sorting));
+ settings->beginGroup(SettingsGroupC);
+ settings->setValue(ViewKeyC, QVariant(m_treeAction->isChecked() ? TreeView : ButtonView));
+ settings->setValue(ColorKeyC, QVariant(m_coloring));
+ settings->setValue(SortedKeyC, QVariant(m_sorting));
// Save last expansionState as QVariant map
QVariantMap expansionState;
- if (!m_expansionState.isEmpty()) {
- const QMap<QString, bool>::const_iterator cend = m_expansionState.constEnd();
- for (QMap<QString, bool>::const_iterator it = m_expansionState.constBegin(); it != cend; ++it)
- expansionState.insert(it.key(), QVariant(it.value()));
- }
- settings->setValue(QLatin1String(ExpansionKeyC), expansionState);
- settings->setValue(QLatin1String(SplitterPositionKeyC), m_treeBrowser->splitterPosition());
+ for (auto it = m_expansionState.cbegin(), cend = m_expansionState.cend(); it != cend; ++it)
+ expansionState.insert(it.key(), QVariant(it.value()));
+ settings->setValue(ExpansionKeyC, expansionState);
+ settings->setValue(SplitterPositionKeyC, m_treeBrowser->splitterPosition());
settings->endGroup();
}
@@ -435,16 +402,13 @@ bool PropertyEditor::isItemVisible(QtBrowserItem *item) const
void PropertyEditor::storePropertiesExpansionState(const QList<QtBrowserItem *> &items)
{
- const QChar bar = QLatin1Char('|');
for (QtBrowserItem *propertyItem : items) {
if (!propertyItem->children().isEmpty()) {
QtProperty *property = propertyItem->property();
const QString propertyName = property->propertyName();
- const QMap<QtProperty *, QString>::const_iterator itGroup = m_propertyToGroup.constFind(property);
+ const auto itGroup = m_propertyToGroup.constFind(property);
if (itGroup != m_propertyToGroup.constEnd()) {
- QString key = itGroup.value();
- key += bar;
- key += propertyName;
+ const QString key = itGroup.value() + u'|' + propertyName;
m_expansionState[key] = isExpanded(propertyItem);
}
}
@@ -478,17 +442,14 @@ void PropertyEditor::collapseAll()
void PropertyEditor::applyPropertiesExpansionState(const QList<QtBrowserItem *> &items)
{
- const QChar bar = QLatin1Char('|');
for (QtBrowserItem *propertyItem : items) {
- const QMap<QString, bool>::const_iterator excend = m_expansionState.constEnd();
+ const auto excend = m_expansionState.cend();
QtProperty *property = propertyItem->property();
const QString propertyName = property->propertyName();
- const QMap<QtProperty *, QString>::const_iterator itGroup = m_propertyToGroup.constFind(property);
+ const auto itGroup = m_propertyToGroup.constFind(property);
if (itGroup != m_propertyToGroup.constEnd()) {
- QString key = itGroup.value();
- key += bar;
- key += propertyName;
- const QMap<QString, bool>::const_iterator pit = m_expansionState.constFind(key);
+ const QString key = itGroup.value() + u'|' + propertyName;
+ const auto pit = m_expansionState.constFind(key);
if (pit != excend)
setExpanded(propertyItem, pit.value());
else
@@ -503,10 +464,10 @@ void PropertyEditor::applyExpansionState()
if (m_sorting) {
applyPropertiesExpansionState(items);
} else {
- const QMap<QString, bool>::const_iterator excend = m_expansionState.constEnd();
+ const auto excend = m_expansionState.cend();
for (QtBrowserItem *item : items) {
const QString groupName = item->property()->propertyName();
- const QMap<QString, bool>::const_iterator git = m_expansionState.constFind(groupName);
+ const auto git = m_expansionState.constFind(groupName);
if (git != excend)
setExpanded(item, git.value());
else
@@ -576,19 +537,19 @@ QColor PropertyEditor::propertyColor(QtProperty *property) const
QtProperty *groupProperty = property;
- QMap<QtProperty *, QString>::ConstIterator itProp = m_propertyToGroup.constFind(property);
+ const auto itProp = m_propertyToGroup.constFind(property);
if (itProp != m_propertyToGroup.constEnd())
groupProperty = m_nameToGroup.value(itProp.value());
const int groupIdx = m_groups.indexOf(groupProperty);
- QPair<QColor, QColor> pair;
+ std::pair<QColor, QColor> pair;
if (groupIdx != -1) {
if (groupProperty == m_dynamicGroup)
pair = m_dynamicColor;
else if (isLayoutGroup(groupProperty))
pair = m_layoutColor;
else
- pair = m_colors[groupIdx % m_colors.count()];
+ pair = m_colors[groupIdx % m_colors.size()];
}
if (!m_brightness)
return pair.first;
@@ -601,7 +562,7 @@ void PropertyEditor::fillView()
for (auto itProperty = m_nameToProperty.cbegin(), end = m_nameToProperty.cend(); itProperty != end; ++itProperty)
m_currentBrowser->addProperty(itProperty.value());
} else {
- for (QtProperty *group : qAsConst(m_groups)) {
+ for (QtProperty *group : std::as_const(m_groups)) {
QtBrowserItem *item = m_currentBrowser->addProperty(group);
if (m_currentBrowser == m_treeBrowser)
m_treeBrowser->setBackgroundColor(item, propertyColor(group));
@@ -695,9 +656,9 @@ void PropertyEditor::slotAddDynamicProperty(QAction *action)
QString newName;
QVariant newValue;
{ // Make sure the dialog is closed before the signal is emitted.
- const QVariant::Type type = static_cast<QVariant::Type>(action->data().toInt());
+ const int type = action->data().toInt();
NewDynamicPropertyDialog dlg(core()->dialogGui(), m_currentBrowser);
- if (type != QVariant::Invalid)
+ if (type != QMetaType::UnknownType)
dlg.setPropertyType(type);
QStringList reservedNames;
@@ -733,7 +694,7 @@ void PropertyEditor::setReadOnly(bool /*readOnly*/)
void PropertyEditor::setPropertyValue(const QString &name, const QVariant &value, bool changed)
{
- const QMap<QString, QtVariantProperty*>::const_iterator it = m_nameToProperty.constFind(name);
+ const auto it = m_nameToProperty.constFind(name);
if (it == m_nameToProperty.constEnd())
return;
QtVariantProperty *property = it.value();
@@ -751,10 +712,10 @@ void PropertyEditor::updatePropertySheet()
updateToolBarLabel();
const int propertyCount = m_propertySheet->count();
- const QMap<QString, QtVariantProperty*>::const_iterator npcend = m_nameToProperty.constEnd();
+ const auto npcend = m_nameToProperty.cend();
for (int i = 0; i < propertyCount; ++i) {
const QString propertyName = m_propertySheet->propertyName(i);
- QMap<QString, QtVariantProperty*>::const_iterator it = m_nameToProperty.constFind(propertyName);
+ const auto it = m_nameToProperty.constFind(propertyName);
if (it != npcend)
updateBrowserValue(it.value(), m_propertySheet->property(i));
}
@@ -784,7 +745,7 @@ void PropertyEditor::updateToolBarLabel()
QString classLabelText;
if (!objectName.isEmpty())
- classLabelText += objectName + QStringLiteral(" : ");
+ classLabelText += objectName + " : "_L1;
classLabelText += className;
m_classLabel->setText(classLabelText);
@@ -815,7 +776,7 @@ void PropertyEditor::updateBrowserValue(QtVariantProperty *property, const QVari
}
// Rich text string property with comment: Store/Update the font the rich text editor dialog starts out with
- if (type == QVariant::String && !property->subProperties().isEmpty()) {
+ if (type == QMetaType::QString && !property->subProperties().isEmpty()) {
const int fontIndex = m_propertySheet->indexOf(m_strings.m_fontProperty);
if (fontIndex != -1)
property->setAttribute(m_strings.m_fontAttribute, m_propertySheet->property(fontIndex));
@@ -824,7 +785,7 @@ void PropertyEditor::updateBrowserValue(QtVariantProperty *property, const QVari
m_updatingBrowser = true;
property->setValue(v);
if (sheet && sheet->isResourceProperty(index))
- property->setAttribute(QStringLiteral("defaultResource"), sheet->defaultResourceProperty(index));
+ property->setAttribute(u"defaultResource"_s, sheet->defaultResourceProperty(index));
m_updatingBrowser = false;
}
@@ -846,14 +807,14 @@ QString PropertyEditor::realClassName(QObject *object) const
if (!object)
return QString();
- QString className = QLatin1String(object->metaObject()->className());
+ QString className = QLatin1StringView(object->metaObject()->className());
const QDesignerWidgetDataBaseInterface *db = core()->widgetDataBase();
if (QDesignerWidgetDataBaseItemInterface *widgetItem = db->item(db->indexOfObject(object, true))) {
className = widgetItem->name();
if (object->isWidgetType() && className == m_strings.m_qLayoutWidget
&& static_cast<QWidget*>(object)->layout()) {
- className = QLatin1String(static_cast<QWidget*>(object)->layout()->metaObject()->className());
+ className = QLatin1StringView(static_cast<QWidget*>(object)->layout()->metaObject()->className());
}
}
@@ -866,8 +827,8 @@ QString PropertyEditor::realClassName(QObject *object) const
static const char *typeName(int type)
{
if (type == qMetaTypeId<PropertySheetStringValue>())
- type = QVariant::String;
- if (type < int(QVariant::UserType))
+ type = QMetaType::QString;
+ if (type < int(QMetaType::User))
return QMetaType(type).name();
if (type == qMetaTypeId<PropertySheetIconValue>())
return "QIcon";
@@ -879,9 +840,9 @@ static const char *typeName(int type)
return "QFlags";
if (type == qMetaTypeId<PropertySheetEnumValue>())
return "enum";
- if (type == QVariant::Invalid)
+ if (type == QMetaType::UnknownType)
return "invalid";
- if (type == QVariant::UserType)
+ if (type == QMetaType::User)
return "user type";
return nullptr;
}
@@ -948,7 +909,7 @@ void PropertyEditor::setObject(QObject *object)
if (m_propertySheet->indexOf(propertyName) != i)
continue;
const QString groupName = m_propertySheet->propertyGroup(i);
- const QMap<QString, QtVariantProperty *>::const_iterator rit = toRemove.constFind(propertyName);
+ const auto rit = toRemove.constFind(propertyName);
if (rit != toRemove.constEnd()) {
QtVariantProperty *property = rit.value();
const int propertyType = property->propertyType();
@@ -1012,10 +973,10 @@ void PropertyEditor::setObject(QObject *object)
m_updatingBrowser = false;
} else if (type == DesignerPropertyManager::designerFlagTypeId()) {
const PropertySheetFlagValue f = qvariant_cast<PropertySheetFlagValue>(value);
- QList<QPair<QString, uint> > flags;
+ QList<std::pair<QString, uint>> flags;
for (const QString &name : f.metaFlags.keys()) {
const uint val = f.metaFlags.keyToValue(name);
- flags.append(qMakePair(name, val));
+ flags.append({name, val});
}
m_updatingBrowser = true;
QVariant v;
@@ -1034,23 +995,23 @@ void PropertyEditor::setObject(QObject *object)
descriptionToolTip = customData.propertyToolTip(propertyName);
if (descriptionToolTip.isEmpty()) {
if (const char *typeS = typeName(type)) {
- descriptionToolTip = propertyName + QLatin1String(" (")
- + QLatin1String(typeS) + QLatin1Char(')');
+ descriptionToolTip = propertyName + " ("_L1
+ + QLatin1StringView(typeS) + ')'_L1;
}
}
if (!descriptionToolTip.isEmpty())
property->setDescriptionToolTip(descriptionToolTip);
switch (type) {
- case QVariant::Palette:
+ case QMetaType::QPalette:
setupPaletteProperty(property);
break;
- case QVariant::KeySequence:
+ case QMetaType::QKeySequence:
//addCommentProperty(property, propertyName);
break;
default:
break;
}
- if (type == QVariant::String || type == qMetaTypeId<PropertySheetStringValue>())
+ if (type == QMetaType::QString || type == qMetaTypeId<PropertySheetStringValue>())
setupStringProperty(property, isMainContainer);
property->setAttribute(m_strings.m_resettableAttribute, m_propertySheet->hasReset(i));
@@ -1058,16 +1019,16 @@ void PropertyEditor::setObject(QObject *object)
QtVariantProperty *groupProperty = nullptr;
if (newProperty) {
- QMap<QString, QtVariantProperty*>::const_iterator itPrev(m_nameToProperty.insert(propertyName, property));
+ auto itPrev = m_nameToProperty.insert(propertyName, property);
m_propertyToGroup[property] = groupName;
if (m_sorting) {
QtProperty *previous = nullptr;
- if (itPrev != m_nameToProperty.constBegin())
+ if (itPrev != m_nameToProperty.begin())
previous = (--itPrev).value();
m_currentBrowser->insertProperty(property, previous);
}
}
- const QMap<QString, QtVariantProperty*>::const_iterator gnit = m_nameToGroup.constFind(groupName);
+ const auto gnit = m_nameToGroup.constFind(groupName);
if (gnit != m_nameToGroup.constEnd()) {
groupProperty = gnit.value();
} else {
@@ -1108,11 +1069,11 @@ void PropertyEditor::setObject(QObject *object)
updateBrowserValue(property, value);
property->setModified(m_propertySheet->isChanged(i));
- if (propertyName == QStringLiteral("geometry") && type == QVariant::Rect) {
+ if (propertyName == "geometry"_L1 && type == QMetaType::QRect) {
const auto &subProperties = property->subProperties();
for (QtProperty *subProperty : subProperties) {
const QString subPropertyName = subProperty->propertyName();
- if (subPropertyName == QStringLiteral("X") || subPropertyName == QStringLiteral("Y"))
+ if (subPropertyName == "X"_L1 || subPropertyName == "Y"_L1)
subProperty->setEnabled(!isMainContainer);
}
}
@@ -1188,6 +1149,9 @@ void PropertyEditor::slotResetProperty(QtProperty *property)
if (m_propertyManager->resetIconSubProperty(property))
return;
+ if (m_propertyManager->resetTextAlignmentProperty(property))
+ return;
+
if (!m_propertyToGroup.contains(property))
return;
diff --git a/src/designer/src/components/propertyeditor/propertyeditor.h b/src/designer/src/components/propertyeditor/propertyeditor.h
index 331a72303..48cd03b25 100644
--- a/src/designer/src/components/propertyeditor/propertyeditor.h
+++ b/src/designer/src/components/propertyeditor/propertyeditor.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PROPERTYEDITOR_H
#define PROPERTYEDITOR_H
@@ -155,7 +130,7 @@ private:
DesignerEditorFactory *m_groupFactory;
QPointer<QObject> m_object;
QMap<QString, QtVariantProperty*> m_nameToProperty;
- QMap<QtProperty*, QString> m_propertyToGroup;
+ QHash<QtProperty *, QString> m_propertyToGroup;
QMap<QString, QtVariantProperty*> m_nameToGroup;
QList<QtProperty *> m_groups;
QtProperty *m_dynamicGroup = nullptr;
@@ -180,9 +155,9 @@ private:
QMap<QString, bool> m_expansionState;
QString m_filterPattern;
- QList<QPair<QColor, QColor> > m_colors;
- QPair<QColor, QColor> m_dynamicColor;
- QPair<QColor, QColor> m_layoutColor;
+ QList<std::pair<QColor, QColor> > m_colors;
+ std::pair<QColor, QColor> m_dynamicColor;
+ std::pair<QColor, QColor> m_layoutColor;
bool m_brightness = false;
};
diff --git a/src/designer/src/components/propertyeditor/propertyeditor.pri b/src/designer/src/components/propertyeditor/propertyeditor.pri
deleted file mode 100644
index 6b095632b..000000000
--- a/src/designer/src/components/propertyeditor/propertyeditor.pri
+++ /dev/null
@@ -1,48 +0,0 @@
-INCLUDEPATH += $$PWD
-
-# --- Property browser is also linked into the designer_shared library.
-# Avoid conflict when linking statically
-contains(CONFIG, static) {
- INCLUDEPATH *= ../../../../shared/qtpropertybrowser
- INCLUDEPATH *= ../../../../shared/qtgradienteditor
-} else {
- include(../../../../shared/qtpropertybrowser/qtpropertybrowser.pri)
- include(../../../../shared/qtgradienteditor/qtcolorbutton.pri)
-}
-
-FORMS += $$PWD/paletteeditor.ui \
- $$PWD/stringlisteditor.ui \
- $$PWD/previewwidget.ui \
- $$PWD/newdynamicpropertydialog.ui
-
-HEADERS += $$PWD/propertyeditor.h \
- $$PWD/designerpropertymanager.h \
- $$PWD/paletteeditor.h \
- $$PWD/paletteeditorbutton.h \
- $$PWD/stringlisteditor.h \
- $$PWD/stringlisteditorbutton.h \
- $$PWD/previewwidget.h \
- $$PWD/previewframe.h \
- $$PWD/newdynamicpropertydialog.h \
- $$PWD/brushpropertymanager.h \
- $$PWD/fontpropertymanager.h
-
-SOURCES += $$PWD/propertyeditor.cpp \
- $$PWD/designerpropertymanager.cpp \
- $$PWD/paletteeditor.cpp \
- $$PWD/paletteeditorbutton.cpp \
- $$PWD/stringlisteditor.cpp \
- $$PWD/stringlisteditorbutton.cpp \
- $$PWD/previewwidget.cpp \
- $$PWD/previewframe.cpp \
- $$PWD/newdynamicpropertydialog.cpp \
- $$PWD/brushpropertymanager.cpp \
- $$PWD/fontpropertymanager.cpp
-
-HEADERS += \
- $$PWD/propertyeditor_global.h \
- $$PWD/qlonglongvalidator.h
-
-SOURCES += $$PWD/qlonglongvalidator.cpp
-
-RESOURCES += $$PWD/propertyeditor.qrc
diff --git a/src/designer/src/components/propertyeditor/propertyeditor.qrc b/src/designer/src/components/propertyeditor/propertyeditor.qrc
deleted file mode 100644
index 6c0dc18ca..000000000
--- a/src/designer/src/components/propertyeditor/propertyeditor.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
- <qresource prefix="/qt-project.org/propertyeditor">
- <file>fontmapping.xml</file>
- </qresource>
-</RCC>
diff --git a/src/designer/src/components/propertyeditor/propertyeditor_global.h b/src/designer/src/components/propertyeditor/propertyeditor_global.h
index 174930115..7172218f8 100644
--- a/src/designer/src/components/propertyeditor/propertyeditor_global.h
+++ b/src/designer/src/components/propertyeditor/propertyeditor_global.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PROPERTYEDITOR_GLOBAL_H
#define PROPERTYEDITOR_GLOBAL_H
diff --git a/src/designer/src/components/propertyeditor/qlonglongvalidator.cpp b/src/designer/src/components/propertyeditor/qlonglongvalidator.cpp
index 9a780cf94..906ffdf80 100644
--- a/src/designer/src/components/propertyeditor/qlonglongvalidator.cpp
+++ b/src/designer/src/components/propertyeditor/qlonglongvalidator.cpp
@@ -1,36 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qlonglongvalidator.h"
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+using namespace Qt::StringLiterals;
+
+namespace qdesigner_internal {
// ----------------------------------------------------------------------------
QLongLongValidator::QLongLongValidator(QObject * parent)
@@ -49,9 +26,9 @@ QLongLongValidator::~QLongLongValidator() = default;
QValidator::State QLongLongValidator::validate(QString & input, int &) const
{
- if (input.contains(QLatin1Char(' ')))
+ if (input.contains(u' '))
return Invalid;
- if (input.isEmpty() || (b < 0 && input == QString(QLatin1Char('-'))))
+ if (input.isEmpty() || (b < 0 && input == "-"_L1))
return Intermediate;
bool ok;
qlonglong entered = input.toLongLong(&ok);
@@ -103,7 +80,7 @@ QValidator::State QULongLongValidator::validate(QString & input, int &) const
bool ok;
qulonglong entered = input.toULongLong(&ok);
- if (input.contains(QLatin1Char(' ')) || input.contains(QLatin1Char('-')) || !ok)
+ if (input.contains(u' ') || input.contains(u'-') || !ok)
return Invalid;
if (entered >= b && entered <= t)
@@ -128,4 +105,6 @@ void QULongLongValidator::setTop(qulonglong top)
setRange(bottom(), top);
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/propertyeditor/qlonglongvalidator.h b/src/designer/src/components/propertyeditor/qlonglongvalidator.h
index 3f1669448..4a70908e2 100644
--- a/src/designer/src/components/propertyeditor/qlonglongvalidator.h
+++ b/src/designer/src/components/propertyeditor/qlonglongvalidator.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QLONGLONGVALIDATOR_H
#define QLONGLONGVALIDATOR_H
diff --git a/src/designer/src/components/propertyeditor/stringlisteditor.cpp b/src/designer/src/components/propertyeditor/stringlisteditor.cpp
index 1cfdb1f3c..3e170ee69 100644
--- a/src/designer/src/components/propertyeditor/stringlisteditor.cpp
+++ b/src/designer/src/components/propertyeditor/stringlisteditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "stringlisteditor.h"
#include <iconloader_p.h>
@@ -32,13 +7,14 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+using namespace Qt::StringLiterals;
+
+namespace qdesigner_internal {
StringListEditor::StringListEditor(QWidget *parent)
: QDialog(parent), m_model(new QStringListModel(this))
{
setupUi(this);
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
listView->setModel(m_model);
connect(listView->selectionModel(),
@@ -48,10 +24,16 @@ StringListEditor::StringListEditor(QWidget *parent)
&QAbstractItemDelegate::closeEditor,
this, &StringListEditor::currentValueChanged);
- QIcon upIcon = createIconSet(QString::fromUtf8("up.png"));
- QIcon downIcon = createIconSet(QString::fromUtf8("down.png"));
- QIcon minusIcon = createIconSet(QString::fromUtf8("minus.png"));
- QIcon plusIcon = createIconSet(QString::fromUtf8("plus.png"));
+ connect(upButton, &QAbstractButton::clicked, this, &StringListEditor::upButtonClicked);
+ connect(downButton, &QAbstractButton::clicked, this, &StringListEditor::downButtonClicked);
+ connect(newButton, &QAbstractButton::clicked, this, &StringListEditor::newButtonClicked);
+ connect(deleteButton, &QAbstractButton::clicked, this, &StringListEditor::deleteButtonClicked);
+ connect(valueEdit, &QLineEdit::textEdited, this, &StringListEditor::valueEdited);
+
+ QIcon upIcon = createIconSet("up.png"_L1);
+ QIcon downIcon = createIconSet("down.png"_L1);
+ QIcon minusIcon = createIconSet("minus.png"_L1);
+ QIcon plusIcon = createIconSet("plus.png"_L1);
upButton->setIcon(upIcon);
downButton->setIcon(downIcon);
newButton->setIcon(plusIcon);
@@ -96,7 +78,7 @@ void StringListEditor::currentValueChanged()
updateUi();
}
-void StringListEditor::on_upButton_clicked()
+void StringListEditor::upButtonClicked()
{
int from = currentIndex();
int to = currentIndex() - 1;
@@ -107,7 +89,7 @@ void StringListEditor::on_upButton_clicked()
updateUi();
}
-void StringListEditor::on_downButton_clicked()
+void StringListEditor::downButtonClicked()
{
int from = currentIndex();
int to = currentIndex() + 1;
@@ -118,7 +100,7 @@ void StringListEditor::on_downButton_clicked()
updateUi();
}
-void StringListEditor::on_newButton_clicked()
+void StringListEditor::newButtonClicked()
{
int to = currentIndex();
if (to == -1)
@@ -130,14 +112,14 @@ void StringListEditor::on_newButton_clicked()
editString(to);
}
-void StringListEditor::on_deleteButton_clicked()
+void StringListEditor::deleteButtonClicked()
{
removeString(currentIndex());
setCurrentIndex(currentIndex());
updateUi();
}
-void StringListEditor::on_valueEdit_textEdited(const QString &text)
+void StringListEditor::valueEdited(const QString &text)
{
setStringAt(currentIndex(), text);
}
@@ -194,4 +176,6 @@ void StringListEditor::editString(int index)
listView->edit(m_model->index(index, 0));
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/propertyeditor/stringlisteditor.h b/src/designer/src/components/propertyeditor/stringlisteditor.h
index bb623d900..a64250fcc 100644
--- a/src/designer/src/components/propertyeditor/stringlisteditor.h
+++ b/src/designer/src/components/propertyeditor/stringlisteditor.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef STRINGLISTEDITOR_H
#define STRINGLISTEDITOR_H
@@ -49,11 +24,11 @@ public:
QWidget *parent, const QStringList &init = QStringList(), int *result = nullptr);
private slots:
- void on_upButton_clicked();
- void on_downButton_clicked();
- void on_newButton_clicked();
- void on_deleteButton_clicked();
- void on_valueEdit_textEdited(const QString &text);
+ void upButtonClicked();
+ void downButtonClicked();
+ void newButtonClicked();
+ void deleteButtonClicked();
+ void valueEdited(const QString &text);
void currentIndexChanged(const QModelIndex &current, const QModelIndex &previous);
void currentValueChanged();
diff --git a/src/designer/src/components/propertyeditor/stringlisteditor.ui b/src/designer/src/components/propertyeditor/stringlisteditor.ui
index 4a1540702..c7a718c9f 100644
--- a/src/designer/src/components/propertyeditor/stringlisteditor.ui
+++ b/src/designer/src/components/propertyeditor/stringlisteditor.ui
@@ -1,31 +1,8 @@
<ui version="4.0" >
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+</comment>
<class>qdesigner_internal::Dialog</class>
<widget class="QDialog" name="qdesigner_internal::Dialog" >
<property name="geometry" >
diff --git a/src/designer/src/components/propertyeditor/stringlisteditorbutton.cpp b/src/designer/src/components/propertyeditor/stringlisteditorbutton.cpp
index 110990b51..59323686c 100644
--- a/src/designer/src/components/propertyeditor/stringlisteditorbutton.cpp
+++ b/src/designer/src/components/propertyeditor/stringlisteditorbutton.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "stringlisteditorbutton.h"
#include "stringlisteditor.h"
@@ -33,7 +8,7 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+namespace qdesigner_internal {
StringListEditorButton::StringListEditorButton(
const QStringList &stringList, QWidget *parent)
@@ -63,4 +38,6 @@ void StringListEditorButton::showStringListEditor()
}
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/propertyeditor/stringlisteditorbutton.h b/src/designer/src/components/propertyeditor/stringlisteditorbutton.h
index f2e28f4bf..8a41c065d 100644
--- a/src/designer/src/components/propertyeditor/stringlisteditorbutton.h
+++ b/src/designer/src/components/propertyeditor/stringlisteditorbutton.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef STRINGLISTEDITORBUTTON_H
#define STRINGLISTEDITORBUTTON_H
diff --git a/src/designer/src/components/signalsloteditor/connectdialog.cpp b/src/designer/src/components/signalsloteditor/connectdialog.cpp
index bb59e0c1c..6f122b16c 100644
--- a/src/designer/src/components/signalsloteditor/connectdialog.cpp
+++ b/src/designer/src/components/signalsloteditor/connectdialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "connectdialog_p.h"
#include "signalslot_utils_p.h"
@@ -42,9 +17,11 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
static QString realClassName(QDesignerFormEditorInterface *core, QWidget *widget)
{
- QString class_name = QLatin1String(widget->metaObject()->className());
+ QString class_name = QLatin1StringView(widget->metaObject()->className());
const QDesignerWidgetDataBaseInterface *wdb = core->widgetDataBase();
const int idx = wdb->indexOfObject(widget);
if (idx != -1)
@@ -54,7 +31,7 @@ static QString realClassName(QDesignerFormEditorInterface *core, QWidget *widget
static QString widgetLabel(QDesignerFormEditorInterface *core, QWidget *widget)
{
- return QString::fromUtf8("%1 (%2)")
+ return "%1 (%2)"_L1
.arg(qdesigner_internal::realObjectName(core, widget),
realClassName(core, widget));
}
@@ -73,8 +50,6 @@ ConnectDialog::ConnectDialog(QDesignerFormWindowInterface *formWindow,
{
m_ui.setupUi(this);
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
-
connect(m_ui.signalList, &QListWidget::itemClicked,
this, &ConnectDialog::selectSignal);
connect(m_ui.slotList, &QListWidget::itemClicked,
@@ -220,9 +195,7 @@ void ConnectDialog::populateSlotList(const QString &signal)
QVariant variantFont = QVariant::fromValue(font);
QListWidgetItem *curr = nullptr;
- QMap<QString, QString>::ConstIterator itMember = memberToClassName.constBegin();
- const QMap<QString, QString>::ConstIterator itMemberEnd = memberToClassName.constEnd();
- while (itMember != itMemberEnd) {
+ for (auto itMember = memberToClassName.cbegin(), itMemberEnd = memberToClassName.cend(); itMember != itMemberEnd; ++itMember) {
const QString member = itMember.key();
QListWidgetItem *item = new QListWidgetItem(m_ui.slotList);
item->setText(member);
@@ -235,7 +208,6 @@ void ConnectDialog::populateSlotList(const QString &signal)
item->setData(Qt::FontRole, variantFont);
item->setData(Qt::ForegroundRole, QColor(Qt::red));
}
- ++itMember;
}
if (curr)
@@ -262,9 +234,7 @@ void ConnectDialog::populateSignalList()
QVariant variantFont = QVariant::fromValue(font);
QListWidgetItem *curr = nullptr;
- QMap<QString, QString>::ConstIterator itMember = memberToClassName.constBegin();
- const QMap<QString, QString>::ConstIterator itMemberEnd = memberToClassName.constEnd();
- while (itMember != itMemberEnd) {
+ for (auto itMember = memberToClassName.cbegin(), itMemberEnd = memberToClassName.cend(); itMember != itMemberEnd; ++itMember) {
const QString member = itMember.key();
QListWidgetItem *item = new QListWidgetItem(m_ui.signalList);
@@ -278,7 +248,6 @@ void ConnectDialog::populateSignalList()
item->setData(Qt::FontRole, variantFont);
item->setData(Qt::ForegroundRole, QColor(Qt::red));
}
- ++itMember;
}
if (curr) {
diff --git a/src/designer/src/components/signalsloteditor/connectdialog_p.h b/src/designer/src/components/signalsloteditor/connectdialog_p.h
index 0cd600557..fe9fae32d 100644
--- a/src/designer/src/components/signalsloteditor/connectdialog_p.h
+++ b/src/designer/src/components/signalsloteditor/connectdialog_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef CONNECTDIALOG_H
#define CONNECTDIALOG_H
@@ -86,7 +61,7 @@ private:
const WidgetMode m_sourceMode;
const WidgetMode m_destinationMode;
QDesignerFormWindowInterface *m_formWindow;
- Ui::ConnectDialog m_ui;
+ QT_PREPEND_NAMESPACE(Ui)::ConnectDialog m_ui;
};
}
diff --git a/src/designer/src/components/signalsloteditor/signalslot_utils.cpp b/src/designer/src/components/signalsloteditor/signalslot_utils.cpp
index c7a960ef3..f8db32ee3 100644
--- a/src/designer/src/components/signalsloteditor/signalslot_utils.cpp
+++ b/src/designer/src/components/signalsloteditor/signalslot_utils.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "signalslot_utils_p.h"
@@ -42,7 +17,7 @@
QT_BEGIN_NAMESPACE
-using ClassNameSignaturePair = QPair<QString, QString>;
+using ClassNameSignaturePair = std::pair<QString, QString>;
// Find all member functions that match a predicate on the signature string
// using the member sheet and the fake methods stored in the widget
diff --git a/src/designer/src/components/signalsloteditor/signalslot_utils_p.h b/src/designer/src/components/signalsloteditor/signalslot_utils_p.h
index 7ab98c3d4..e7441f855 100644
--- a/src/designer/src/components/signalsloteditor/signalslot_utils_p.h
+++ b/src/designer/src/components/signalsloteditor/signalslot_utils_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef SIGNALSLOTUTILS_P_H
#define SIGNALSLOTUTILS_P_H
diff --git a/src/designer/src/components/signalsloteditor/signalsloteditor.cpp b/src/designer/src/components/signalsloteditor/signalsloteditor.cpp
index 28bb2c736..76239f07e 100644
--- a/src/designer/src/components/signalsloteditor/signalsloteditor.cpp
+++ b/src/designer/src/components/signalsloteditor/signalsloteditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "signalsloteditor.h"
#include "signalsloteditor_p.h"
@@ -33,6 +8,7 @@
#include <metadatabase_p.h>
#include <qdesigner_formwindowcommand_p.h>
+#include <signalslotdialog_p.h>
#include <QtDesigner/private/ui4_p.h>
#include <QtDesigner/abstractformwindow.h>
@@ -49,6 +25,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
/*******************************************************************************
@@ -76,13 +54,13 @@ DomConnection *SignalSlotConnection::toUi() const
QPoint tp = endPointPos(EndPoint::Target);
DomConnectionHint *hint = new DomConnectionHint;
- hint->setAttributeType(QStringLiteral("sourcelabel"));
+ hint->setAttributeType(u"sourcelabel"_s);
hint->setElementX(sp.x());
hint->setElementY(sp.y());
list.append(hint);
hint = new DomConnectionHint;
- hint->setAttributeType(QStringLiteral("destinationlabel"));
+ hint->setAttributeType(u"destinationlabel"_s);
hint->setElementX(tp.x());
hint->setElementY(tp.y());
list.append(hint);
@@ -373,6 +351,21 @@ void SignalSlotEditor::fromUi(const DomConnections *connections, QWidget *parent
if (connections == nullptr)
return;
+ // For old forms, that were saved before Qt 4 times, there was no <slots>
+ // section inside ui file. Currently, when we specify custom signals or slots
+ // for the form, we add them into the <slots> section. For all signals / slots
+ // inside <slots> section uic creates string-based connections.
+ // In order to fix old forms, we detect if a signal or slot used inside connection
+ // is a custom (fake) one, like it's being done inside SignalSlotDialog.
+ // In case of a fake signal / slot we register it inside meta data base, so that
+ // the next save will add a missing <slots> section.
+ QStringList existingSlots, existingSignals;
+ SignalSlotDialog::existingMethodsFromMemberSheet(m_form_window->core(), parent,
+ existingSlots, existingSignals);
+ QStringList fakeSlots, fakeSignals;
+ SignalSlotDialog::fakeMethodsFromMetaDataBase(m_form_window->core(), parent,
+ fakeSlots, fakeSignals);
+
setBackground(parent);
clear();
const auto &list = connections->elementConnection();
@@ -397,33 +390,48 @@ void SignalSlotEditor::fromUi(const DomConnections *connections, QWidget *parent
for (DomConnectionHint *hint : hints) {
QString attr_type = hint->attributeType();
QPoint p = QPoint(hint->elementX(), hint->elementY());
- if (attr_type == QStringLiteral("sourcelabel"))
+ if (attr_type == "sourcelabel"_L1)
sp = p;
- else if (attr_type == QStringLiteral("destinationlabel"))
+ else if (attr_type == "destinationlabel"_L1)
tp = p;
}
}
+ const QString sourceSignal = dom_con->elementSignal();
+ if (source == parent && !existingSignals.contains(sourceSignal)
+ && !fakeSignals.contains(sourceSignal)) {
+ fakeSignals.append(sourceSignal);
+ }
+
+ const QString destSlot = dom_con->elementSlot();
+ if (destination == parent && !existingSlots.contains(destSlot)
+ && !fakeSlots.contains(destSlot)) {
+ fakeSlots.append(destSlot);
+ }
+
+
SignalSlotConnection *con = new SignalSlotConnection(this);
con->setEndPoint(EndPoint::Source, source, sp);
con->setEndPoint(EndPoint::Target, destination, tp);
- con->setSignal(dom_con->elementSignal());
- con->setSlot(dom_con->elementSlot());
+ con->setSignal(sourceSignal);
+ con->setSlot(destSlot);
addConnection(con);
}
+ SignalSlotDialog::fakeMethodsToMetaDataBase(m_form_window->core(), parent,
+ fakeSlots, fakeSignals);
}
static bool skipWidget(const QWidget *w)
{
- const QString name = QLatin1String(w->metaObject()->className());
- if (name == QStringLiteral("QDesignerWidget"))
+ const QString name = QLatin1StringView(w->metaObject()->className());
+ if (name == "QDesignerWidget"_L1)
return true;
- if (name == QStringLiteral("QLayoutWidget"))
+ if (name == "QLayoutWidget"_L1)
return true;
- if (name == QStringLiteral("qdesigner_internal::FormWindow"))
+ if (name == "qdesigner_internal::FormWindow"_L1)
return true;
- if (name == QStringLiteral("Spacer"))
+ if (name == "Spacer"_L1)
return true;
return false;
}
diff --git a/src/designer/src/components/signalsloteditor/signalsloteditor.h b/src/designer/src/components/signalsloteditor/signalsloteditor.h
index c235c1d94..6ce498908 100644
--- a/src/designer/src/components/signalsloteditor/signalsloteditor.h
+++ b/src/designer/src/components/signalsloteditor/signalsloteditor.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef SIGNALSLOTEDITOR_H
#define SIGNALSLOTEDITOR_H
diff --git a/src/designer/src/components/signalsloteditor/signalsloteditor.pri b/src/designer/src/components/signalsloteditor/signalsloteditor.pri
deleted file mode 100644
index f8d9d359c..000000000
--- a/src/designer/src/components/signalsloteditor/signalsloteditor.pri
+++ /dev/null
@@ -1,22 +0,0 @@
-
-INCLUDEPATH += $$PWD
-
-HEADERS += $$PWD/signalslot_utils_p.h \
- $$PWD/connectdialog_p.h \
- $$PWD/signalsloteditor.h \
- $$PWD/signalsloteditor_tool.h \
- $$PWD/signalsloteditor_plugin.h \
- $$PWD/signalsloteditor_global.h \
- $$PWD/signalsloteditor_p.h \
- $$PWD/signalsloteditorwindow.h
-
-SOURCES += $$PWD/signalslot_utils.cpp \
- $$PWD/connectdialog.cpp \
- $$PWD/signalsloteditor.cpp \
- $$PWD/signalsloteditor_tool.cpp \
- $$PWD/signalsloteditor_plugin.cpp \
- $$PWD/signalsloteditorwindow.cpp
-
-FORMS += $$PWD/connectdialog.ui
-
-OTHER_FILES += $$PWD/signalsloteditor.json
diff --git a/src/designer/src/components/signalsloteditor/signalsloteditor_global.h b/src/designer/src/components/signalsloteditor/signalsloteditor_global.h
index 4b087ac60..fbe025316 100644
--- a/src/designer/src/components/signalsloteditor/signalsloteditor_global.h
+++ b/src/designer/src/components/signalsloteditor/signalsloteditor_global.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef SIGNALSLOTEDITOR_GLOBAL_H
#define SIGNALSLOTEDITOR_GLOBAL_H
diff --git a/src/designer/src/components/signalsloteditor/signalsloteditor_p.h b/src/designer/src/components/signalsloteditor/signalsloteditor_p.h
index 1a44c101a..70157a3b4 100644
--- a/src/designer/src/components/signalsloteditor/signalsloteditor_p.h
+++ b/src/designer/src/components/signalsloteditor/signalsloteditor_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef SIGNALSLOTEDITOR_P_H
#define SIGNALSLOTEDITOR_P_H
diff --git a/src/designer/src/components/signalsloteditor/signalsloteditor_plugin.cpp b/src/designer/src/components/signalsloteditor/signalsloteditor_plugin.cpp
index 60cfdfa6a..8b0b1f75a 100644
--- a/src/designer/src/components/signalsloteditor/signalsloteditor_plugin.cpp
+++ b/src/designer/src/components/signalsloteditor/signalsloteditor_plugin.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "signalsloteditor_plugin.h"
#include "signalsloteditor_tool.h"
@@ -36,7 +11,9 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+using namespace Qt::StringLiterals;
+
+namespace qdesigner_internal {
SignalSlotEditorPlugin::SignalSlotEditorPlugin() = default;
@@ -52,10 +29,10 @@ void SignalSlotEditorPlugin::initialize(QDesignerFormEditorInterface *core)
Q_ASSERT(!isInitialized());
m_action = new QAction(tr("Edit Signals/Slots"), this);
- m_action->setObjectName(QStringLiteral("__qt_edit_signals_slots_action"));
+ m_action->setObjectName(u"__qt_edit_signals_slots_action"_s);
m_action->setShortcut(tr("F4"));
- QIcon icon = QIcon::fromTheme(QStringLiteral("designer-edit-signals"),
- QIcon(core->resourceLocation() + QStringLiteral("/signalslottool.png")));
+ QIcon icon = QIcon::fromTheme(u"designer-edit-signals"_s,
+ QIcon(core->resourceLocation() + "/signalslottool.png"_L1));
m_action->setIcon(icon);
m_action->setEnabled(false);
@@ -112,6 +89,8 @@ void SignalSlotEditorPlugin::activeFormWindowChanged(QDesignerFormWindowInterfac
m_action->setEnabled(formWindow != nullptr);
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
#include "moc_signalsloteditor_plugin.cpp"
diff --git a/src/designer/src/components/signalsloteditor/signalsloteditor_plugin.h b/src/designer/src/components/signalsloteditor/signalsloteditor_plugin.h
index fc4cabdcd..dc70c676d 100644
--- a/src/designer/src/components/signalsloteditor/signalsloteditor_plugin.h
+++ b/src/designer/src/components/signalsloteditor/signalsloteditor_plugin.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef SIGNALSLOTEDITOR_PLUGIN_H
#define SIGNALSLOTEDITOR_PLUGIN_H
diff --git a/src/designer/src/components/signalsloteditor/signalsloteditor_tool.cpp b/src/designer/src/components/signalsloteditor/signalsloteditor_tool.cpp
index ec828b017..9b5e72fbd 100644
--- a/src/designer/src/components/signalsloteditor/signalsloteditor_tool.cpp
+++ b/src/designer/src/components/signalsloteditor/signalsloteditor_tool.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "signalsloteditor_tool.h"
#include "signalsloteditor.h"
@@ -38,7 +13,7 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+namespace qdesigner_internal {
SignalSlotEditorTool::SignalSlotEditorTool(QDesignerFormWindowInterface *formWindow, QObject *parent)
: QDesignerFormWindowToolInterface(parent),
@@ -107,4 +82,6 @@ void SignalSlotEditorTool::loadFromDom(DomUI *ui, QWidget *mainContainer)
m_editor->fromUi(ui->elementConnections(), mainContainer);
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/signalsloteditor/signalsloteditor_tool.h b/src/designer/src/components/signalsloteditor/signalsloteditor_tool.h
index acd71f479..762738930 100644
--- a/src/designer/src/components/signalsloteditor/signalsloteditor_tool.h
+++ b/src/designer/src/components/signalsloteditor/signalsloteditor_tool.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef SIGNALSLOTEDITOR_TOOL_H
#define SIGNALSLOTEDITOR_TOOL_H
diff --git a/src/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp b/src/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp
index fd6a90eb2..1efc66064 100644
--- a/src/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp
+++ b/src/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "signalsloteditorwindow.h"
#include "signalsloteditor_p.h"
@@ -67,6 +42,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
// Add suitable form widgets to a list of objects for the signal slot
// editor. Prevent special widgets from showing up there.
static void addWidgetToObjectList(const QWidget *w, QStringList &r)
@@ -308,7 +285,7 @@ bool ConnectionModel::setData(const QModelIndex &index, const QVariant &data, in
{
if (!index.isValid() || !m_editor)
return false;
- if (data.type() != QVariant::String)
+ if (data.metaType().id() != QMetaType::QString)
return false;
SignalSlotConnection *con = static_cast<SignalSlotConnection*>(m_editor->connection(index.row()));
@@ -427,7 +404,7 @@ void InlineEditorModel::addTitle(const QString &title)
const int cnt = rowCount();
insertRows(cnt, 1);
QModelIndex cat_idx = index(cnt, 0);
- setData(cat_idx, QString(title + QLatin1Char(':')), Qt::DisplayRole);
+ setData(cat_idx, QString(title + u':'), Qt::DisplayRole);
setData(cat_idx, TitleItem, Qt::UserRole);
QFont font = QApplication::font();
font.setBold(true);
@@ -456,16 +433,13 @@ void InlineEditorModel::addTextList(const QMap<QString, bool> &text_list)
QFont font = QApplication::font();
font.setItalic(true);
QVariant fontVariant = QVariant::fromValue(font);
- QMap<QString, bool>::ConstIterator it = text_list.constBegin();
- const QMap<QString, bool>::ConstIterator itEnd = text_list.constEnd();
- while (it != itEnd) {
+ for (auto it = text_list.cbegin(), itEnd = text_list.cend(); it != itEnd; ++it) {
const QModelIndex text_idx = index(cnt++, 0);
setData(text_idx, it.key(), Qt::DisplayRole);
if (it.value()) {
setData(text_idx, fontVariant, Qt::FontRole);
setData(text_idx, QColor(Qt::red), Qt::ForegroundRole);
}
- ++it;
}
}
@@ -592,7 +566,7 @@ ConnectionDelegate::ConnectionDelegate(QWidget *parent)
factory = new QItemEditorFactory;
QItemEditorCreatorBase *creator
= new QItemEditorCreator<InlineEditor>("text");
- factory->registerEditor(QVariant::String, creator);
+ factory->registerEditor(QMetaType::QString, creator);
}
setItemEditorFactory(factory);
@@ -645,7 +619,7 @@ QWidget *ConnectionDelegate::createEditor(QWidget *parent,
continue;
// Mark deprecated members by passing bool=true.
QMap<QString, bool> markedMemberList;
- for (const QString &member : qAsConst(classInfo.m_memberList))
+ for (const QString &member : std::as_const(classInfo.m_memberList))
markedMemberList.insert(member, false);
inline_editor->addTitle(classInfo.m_className);
inline_editor->addTextList(markedMemberList);
@@ -707,11 +681,11 @@ SignalSlotEditorWindow::SignalSlotEditorWindow(QDesignerFormEditorInterface *cor
QToolBar *toolBar = new QToolBar;
toolBar->setIconSize(QSize(22, 22));
- m_add_button->setIcon(createIconSet(QStringLiteral("plus.png")));
+ m_add_button->setIcon(createIconSet("plus.png"_L1));
connect(m_add_button, &QAbstractButton::clicked, this, &SignalSlotEditorWindow::addConnection);
toolBar->addWidget(m_add_button);
- m_remove_button->setIcon(createIconSet(QStringLiteral("minus.png")));
+ m_remove_button->setIcon(createIconSet("minus.png"_L1));
connect(m_remove_button, &QAbstractButton::clicked, this, &SignalSlotEditorWindow::removeConnection);
toolBar->addWidget(m_remove_button);
@@ -743,7 +717,7 @@ void SignalSlotEditorWindow::setActiveFormWindow(QDesignerFormWindowInterface *f
}
}
- m_editor = form->findChild<SignalSlotEditor*>();
+ m_editor = form ? form->findChild<SignalSlotEditor*>() : nullptr;
m_model->setEditor(m_editor);
if (!m_editor.isNull()) {
ConnectionDelegate *delegate
diff --git a/src/designer/src/components/signalsloteditor/signalsloteditorwindow.h b/src/designer/src/components/signalsloteditor/signalsloteditorwindow.h
index 4d7af91f8..07891d0cd 100644
--- a/src/designer/src/components/signalsloteditor/signalsloteditorwindow.h
+++ b/src/designer/src/components/signalsloteditor/signalsloteditorwindow.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef SIGNALSLOTEDITORWINDOW_H
#define SIGNALSLOTEDITORWINDOW_H
diff --git a/src/designer/src/components/tabordereditor/tabordereditor.cpp b/src/designer/src/components/tabordereditor/tabordereditor.cpp
index fbebc89dc..e2869decc 100644
--- a/src/designer/src/components/tabordereditor/tabordereditor.cpp
+++ b/src/designer/src/components/tabordereditor/tabordereditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "tabordereditor.h"
@@ -50,6 +25,8 @@ Q_DECLARE_METATYPE(QWidgetList)
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace {
enum { VBOX_MARGIN = 1, HBOX_MARGIN = 4, BG_ALPHA = 32 };
}
@@ -155,7 +132,7 @@ void TabOrderEditor::paintEvent(QPaintEvent *e)
if (!m_beginning && cur < 0)
cur = m_tab_order_list.size() - 1;
- for (int i = 0; i < m_tab_order_list.size(); ++i) {
+ for (qsizetype i = 0; i < m_tab_order_list.size(); ++i) {
QWidget *widget = m_tab_order_list.at(i);
if (!isWidgetVisible(widget))
continue;
@@ -190,7 +167,7 @@ bool TabOrderEditor::skipWidget(QWidget *w) const
QExtensionManager *ext = formWindow()->core()->extensionManager();
if (const QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(ext, w)) {
- const int index = sheet->indexOf(QStringLiteral("focusPolicy"));
+ const int index = sheet->indexOf(u"focusPolicy"_s);
if (index != -1) {
bool ok = false;
Qt::FocusPolicy q = (Qt::FocusPolicy) Utils::valueOf(sheet->property(index), &ok);
@@ -212,7 +189,7 @@ void TabOrderEditor::initTabOrder()
}
// Remove any widgets that have been removed form the form
- for (int i = 0; i < m_tab_order_list.size(); ) {
+ for (qsizetype i = 0; i < m_tab_order_list.size(); ) {
QWidget *w = m_tab_order_list.at(i);
if (!formWindow()->mainContainer()->isAncestorOf(w) || skipWidget(w))
m_tab_order_list.removeAt(i);
@@ -247,7 +224,7 @@ void TabOrderEditor::initTabOrder()
}
m_indicator_region = QRegion();
- for (int i = 0; i < m_tab_order_list.size(); ++i) {
+ for (qsizetype i = 0; i < m_tab_order_list.size(); ++i) {
if (m_tab_order_list.at(i)->isVisible())
m_indicator_region |= indicatorRect(i);
}
@@ -272,7 +249,7 @@ void TabOrderEditor::mouseMoveEvent(QMouseEvent *e)
int TabOrderEditor::widgetIndexAt(const QPoint &pos) const
{
int target_index = -1;
- for (int i = 0; i < m_tab_order_list.size(); ++i) {
+ for (qsizetype i = 0; i < m_tab_order_list.size(); ++i) {
if (!m_tab_order_list.at(i)->isVisible())
continue;
if (indicatorRect(i).contains(pos)) {
@@ -294,14 +271,16 @@ void TabOrderEditor::mousePressEvent(QMouseEvent *e)
if (core->widgetFactory()->isPassiveInteractor(child)) {
QMouseEvent event(QEvent::MouseButtonPress,
- child->mapFromGlobal(e->globalPosition().toPoint()),
- e->button(), e->buttons(), e->modifiers());
+ child->mapFromGlobal(e->globalPosition().toPoint()),
+ e->globalPosition().toPoint(), e->button(), e->buttons(),
+ e->modifiers());
qApp->sendEvent(child, &event);
QMouseEvent event2(QEvent::MouseButtonRelease,
- child->mapFromGlobal(e->globalPosition().toPoint()),
- e->button(), e->buttons(), e->modifiers());
+ child->mapFromGlobal(e->globalPosition().toPoint()),
+ e->globalPosition().toPoint(), e->button(), e->buttons(),
+ e->modifiers());
qApp->sendEvent(child, &event2);
diff --git a/src/designer/src/components/tabordereditor/tabordereditor.h b/src/designer/src/components/tabordereditor/tabordereditor.h
index 3cfcba17b..37151249f 100644
--- a/src/designer/src/components/tabordereditor/tabordereditor.h
+++ b/src/designer/src/components/tabordereditor/tabordereditor.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef TABORDEREDITOR_H
#define TABORDEREDITOR_H
diff --git a/src/designer/src/components/tabordereditor/tabordereditor.pri b/src/designer/src/components/tabordereditor/tabordereditor.pri
deleted file mode 100644
index da1ecfbae..000000000
--- a/src/designer/src/components/tabordereditor/tabordereditor.pri
+++ /dev/null
@@ -1,17 +0,0 @@
-
-QT += xml
-
-INCLUDEPATH += $$PWD
-
-HEADERS += \
- $$PWD/tabordereditor.h \
- $$PWD/tabordereditor_plugin.h \
- $$PWD/tabordereditor_tool.h \
- $$PWD/tabordereditor_global.h
-
-SOURCES += \
- $$PWD/tabordereditor.cpp \
- $$PWD/tabordereditor_tool.cpp \
- $$PWD/tabordereditor_plugin.cpp
-
-OTHER_FILES += $$PWD/tabordereditor.json
diff --git a/src/designer/src/components/tabordereditor/tabordereditor_global.h b/src/designer/src/components/tabordereditor/tabordereditor_global.h
index 1ca5f2612..68d5c86ef 100644
--- a/src/designer/src/components/tabordereditor/tabordereditor_global.h
+++ b/src/designer/src/components/tabordereditor/tabordereditor_global.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef TABORDEREDITOR_GLOBAL_H
#define TABORDEREDITOR_GLOBAL_H
diff --git a/src/designer/src/components/tabordereditor/tabordereditor_plugin.cpp b/src/designer/src/components/tabordereditor/tabordereditor_plugin.cpp
index a95d1fe16..2fe3a4212 100644
--- a/src/designer/src/components/tabordereditor/tabordereditor_plugin.cpp
+++ b/src/designer/src/components/tabordereditor/tabordereditor_plugin.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QtGui/qaction.h>
@@ -37,7 +12,9 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+using namespace Qt::StringLiterals;
+
+namespace qdesigner_internal {
TabOrderEditorPlugin::TabOrderEditorPlugin() = default;
@@ -53,9 +30,9 @@ void TabOrderEditorPlugin::initialize(QDesignerFormEditorInterface *core)
Q_ASSERT(!isInitialized());
m_action = new QAction(tr("Edit Tab Order"), this);
- m_action->setObjectName(QStringLiteral("_qt_edit_tab_order_action"));
- QIcon icon = QIcon::fromTheme(QStringLiteral("designer-edit-tabs"),
- QIcon(core->resourceLocation() + QStringLiteral("/tabordertool.png")));
+ m_action->setObjectName(u"_qt_edit_tab_order_action"_s);
+ QIcon icon = QIcon::fromTheme(u"designer-edit-tabs"_s,
+ QIcon(core->resourceLocation() + "/tabordertool.png"_L1));
m_action->setIcon(icon);
m_action->setEnabled(false);
@@ -112,6 +89,8 @@ QAction *TabOrderEditorPlugin::action() const
return m_action;
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
#include "moc_tabordereditor_plugin.cpp"
diff --git a/src/designer/src/components/tabordereditor/tabordereditor_plugin.h b/src/designer/src/components/tabordereditor/tabordereditor_plugin.h
index cf7b28d56..99168099c 100644
--- a/src/designer/src/components/tabordereditor/tabordereditor_plugin.h
+++ b/src/designer/src/components/tabordereditor/tabordereditor_plugin.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef TABORDEREDITOR_PLUGIN_H
#define TABORDEREDITOR_PLUGIN_H
diff --git a/src/designer/src/components/tabordereditor/tabordereditor_tool.cpp b/src/designer/src/components/tabordereditor/tabordereditor_tool.cpp
index 64da96937..46270b007 100644
--- a/src/designer/src/components/tabordereditor/tabordereditor_tool.cpp
+++ b/src/designer/src/components/tabordereditor/tabordereditor_tool.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "tabordereditor_tool.h"
#include "tabordereditor.h"
@@ -37,7 +12,7 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+namespace qdesigner_internal {
TabOrderEditorTool::TabOrderEditorTool(QDesignerFormWindowInterface *formWindow, QObject *parent)
: QDesignerFormWindowToolInterface(parent),
@@ -95,4 +70,6 @@ QAction *TabOrderEditorTool::action() const
return m_action;
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/tabordereditor/tabordereditor_tool.h b/src/designer/src/components/tabordereditor/tabordereditor_tool.h
index 73792de43..bbd4f5c64 100644
--- a/src/designer/src/components/tabordereditor/tabordereditor_tool.h
+++ b/src/designer/src/components/tabordereditor/tabordereditor_tool.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef TABORDEREDITOR_TOOL_H
#define TABORDEREDITOR_TOOL_H
diff --git a/src/designer/src/components/taskmenu/button_taskmenu.cpp b/src/designer/src/components/taskmenu/button_taskmenu.cpp
index 5facfdad3..7edf6c04a 100644
--- a/src/designer/src/components/taskmenu/button_taskmenu.cpp
+++ b/src/designer/src/components/taskmenu/button_taskmenu.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "button_taskmenu.h"
#include "inplace_editor.h"
@@ -54,6 +29,8 @@ Q_DECLARE_METATYPE(QButtonGroup*)
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
enum { debugButtonMenu = 0 };
@@ -111,18 +88,16 @@ void ButtonGroupCommand::addButtonsToGroup()
{
if (debugButtonMenu)
qDebug() << "Adding " << m_buttonList << " to " << m_buttonGroup;
- const ButtonList::const_iterator cend = m_buttonList.constEnd();
- for (ButtonList::const_iterator it = m_buttonList.constBegin(); it != cend; ++it)
- m_buttonGroup->addButton(*it);
+ for (auto *b : std::as_const(m_buttonList))
+ m_buttonGroup->addButton(b);
}
void ButtonGroupCommand::removeButtonsFromGroup()
{
if (debugButtonMenu)
qDebug() << "Removing " << m_buttonList << " from " << m_buttonGroup;
- const ButtonList::const_iterator cend = m_buttonList.constEnd();
- for (ButtonList::const_iterator it = m_buttonList.constBegin(); it != cend; ++it)
- m_buttonGroup->removeButton(*it);
+ for (auto *b : std::as_const(m_buttonList))
+ m_buttonGroup->removeButton(b);
}
void ButtonGroupCommand::createButtonGroup()
@@ -148,9 +123,8 @@ void ButtonGroupCommand::breakButtonGroup()
// Button group was selected, that is, break was invoked via its context menu. Remove it from property editor, select the buttons
if (core->propertyEditor()->object() == m_buttonGroup) {
fw->clearSelection(false);
- const ButtonList::const_iterator cend = m_buttonList.constEnd();
- for (ButtonList::const_iterator it = m_buttonList.constBegin(); it != cend; ++it)
- fw->selectWidget(*it, true);
+ for (auto *b : std::as_const(m_buttonList))
+ fw->selectWidget(b, true);
}
// Now remove and refresh object inspector
removeButtonsFromGroup();
@@ -165,13 +139,12 @@ QString ButtonGroupCommand::nameList(const ButtonList& bl)
{
QString rc;
const QChar quote = QLatin1Char('\'');
- const QString separator = QStringLiteral(", ");
- const int size = bl.size();
- for (int i = 0; i < size; i++) {
+ const auto separator = ", "_L1;
+ for (qsizetype i = 0, size = bl.size(); i < size; ++i) {
if (i)
rc += separator;
rc += quote;
- rc += bl[i]->objectName();
+ rc += bl.at(i)->objectName();
rc += quote;
}
return rc;
@@ -183,13 +156,13 @@ ButtonGroupList ButtonGroupCommand::managedButtonGroups(const QDesignerFormWindo
const QDesignerMetaDataBaseInterface *mdb = formWindow->core()->metaDataBase();
ButtonGroupList bl;
// Check 1st order children for managed button groups
- const QObjectList children = formWindow->mainContainer()->children();
- const QObjectList::const_iterator cend = children.constEnd();
- for (QObjectList::const_iterator it = children.constBegin(); it != cend; ++it) {
- if (!(*it)->isWidgetType())
- if (QButtonGroup *bg = qobject_cast<QButtonGroup *>(*it))
+ for (auto *o : formWindow->mainContainer()->children()) {
+ if (!o->isWidgetType()) {
+ if (QButtonGroup *bg = qobject_cast<QButtonGroup *>(o)) {
if (mdb->item(bg))
bl.push_back(bg);
+ }
+ }
}
return bl;
}
@@ -217,7 +190,7 @@ bool CreateButtonGroupCommand::init(const ButtonList &bl)
return false;
QDesignerFormWindowInterface *fw = formWindow();
QButtonGroup *buttonGroup = new QButtonGroup(fw->mainContainer());
- buttonGroup->setObjectName(QStringLiteral("buttonGroup"));
+ buttonGroup->setObjectName(u"buttonGroup"_s);
fw->ensureUniqueObjectName(buttonGroup);
initialize(bl, buttonGroup);
return true;
@@ -328,10 +301,10 @@ void ButtonGroupMenu::selectGroup()
// Select and make current button "current" again by selecting it last (if there is any)
const ButtonList buttons = m_buttonGroup->buttons();
m_formWindow->clearSelection(false);
- const ButtonList::const_iterator cend = buttons.constEnd();
- for (ButtonList::const_iterator it = buttons.constBegin(); it != cend; ++it)
- if (*it != m_currentButton)
- m_formWindow->selectWidget(*it, true);
+ for (auto *b : buttons) {
+ if (b != m_currentButton)
+ m_formWindow->selectWidget(b, true);
+ }
if (m_currentButton)
m_formWindow->selectWidget(m_currentButton, true);
}
@@ -382,7 +355,7 @@ protected:
};
ButtonTextTaskMenuInlineEditor::ButtonTextTaskMenuInlineEditor(QAbstractButton *button, QObject *parent) :
- TaskMenuInlineEditor(button, ValidationMultiLine, QStringLiteral("text"), parent)
+ TaskMenuInlineEditor(button, ValidationMultiLine, u"text"_s, parent)
{
}
@@ -405,7 +378,7 @@ protected:
};
LinkDescriptionTaskMenuInlineEditor::LinkDescriptionTaskMenuInlineEditor(QAbstractButton *button, QObject *parent) :
- TaskMenuInlineEditor(button, ValidationMultiLine, QStringLiteral("description"), parent)
+ TaskMenuInlineEditor(button, ValidationMultiLine, u"description"_s, parent)
{
}
@@ -480,7 +453,7 @@ bool ButtonTaskMenu::refreshAssignMenu(const QDesignerFormWindowInterface *fw, i
// Assign to other
const ButtonGroupList bl = ButtonGroupCommand::managedButtonGroups(fw);
// Groups: Any groups to add to except the current?
- const int groupCount = bl.size();
+ const auto groupCount = bl.size();
const bool hasAddGroups = groupCount > 1 || (groupCount == 1 && !bl.contains(currentGroup));
if (hasAddGroups) {
if (!m_assignGroupSubMenu->isEmpty())
@@ -488,11 +461,8 @@ bool ButtonTaskMenu::refreshAssignMenu(const QDesignerFormWindowInterface *fw, i
// Create a new action group
m_assignActionGroup = new QActionGroup(this);
connect(m_assignActionGroup, &QActionGroup::triggered, this, &ButtonTaskMenu::addToGroup);
-
- const ButtonGroupList::const_iterator cend = bl.constEnd();
- for (ButtonGroupList::const_iterator it = bl.constBegin(); it != cend; ++it) {
- QButtonGroup *bg = *it;
- if (*it != currentGroup) {
+ for (auto *bg : bl) {
+ if (bg != currentGroup) {
QAction *a = new QAction(bg->objectName(), m_assignGroupSubMenu);
a->setData(QVariant::fromValue(bg));
m_assignActionGroup->addAction(a);
diff --git a/src/designer/src/components/taskmenu/button_taskmenu.h b/src/designer/src/components/taskmenu/button_taskmenu.h
index ab58c0630..9623bea14 100644
--- a/src/designer/src/components/taskmenu/button_taskmenu.h
+++ b/src/designer/src/components/taskmenu/button_taskmenu.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef BUTTON_TASKMENU_H
#define BUTTON_TASKMENU_H
diff --git a/src/designer/src/components/taskmenu/combobox_taskmenu.cpp b/src/designer/src/components/taskmenu/combobox_taskmenu.cpp
index 6613b03d2..75c1959b5 100644
--- a/src/designer/src/components/taskmenu/combobox_taskmenu.cpp
+++ b/src/designer/src/components/taskmenu/combobox_taskmenu.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "combobox_taskmenu.h"
#include "listwidgeteditor.h"
@@ -46,7 +21,7 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+namespace qdesigner_internal {
ComboBoxTaskMenu::ComboBoxTaskMenu(QComboBox *button, QObject *parent)
: QDesignerTaskMenu(button, parent),
@@ -116,4 +91,6 @@ void ComboBoxTaskMenu::updateSelection()
m_editor->deleteLater();
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/taskmenu/combobox_taskmenu.h b/src/designer/src/components/taskmenu/combobox_taskmenu.h
index 8ff36c1a8..47dad220d 100644
--- a/src/designer/src/components/taskmenu/combobox_taskmenu.h
+++ b/src/designer/src/components/taskmenu/combobox_taskmenu.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef COMBOBOX_TASKMENU_H
#define COMBOBOX_TASKMENU_H
diff --git a/src/designer/src/components/taskmenu/containerwidget_taskmenu.cpp b/src/designer/src/components/taskmenu/containerwidget_taskmenu.cpp
index 1bbca9d10..a9cec6eb2 100644
--- a/src/designer/src/components/taskmenu/containerwidget_taskmenu.cpp
+++ b/src/designer/src/components/taskmenu/containerwidget_taskmenu.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "containerwidget_taskmenu.h"
@@ -53,6 +28,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
ContainerWidgetTaskMenu::ContainerWidgetTaskMenu(QWidget *widget, ContainerType type, QObject *parent) :
@@ -292,7 +269,7 @@ ContainerWidgetTaskMenuFactory::ContainerWidgetTaskMenuFactory(QDesignerFormEdit
QObject *ContainerWidgetTaskMenuFactory::createExtension(QObject *object, const QString &iid, QObject *parent) const
{
- if (iid != QStringLiteral("QDesignerInternalTaskMenuExtension") || !object->isWidgetType())
+ if (iid != "QDesignerInternalTaskMenuExtension"_L1 || !object->isWidgetType())
return nullptr;
QWidget *widget = qobject_cast<QWidget*>(object);
diff --git a/src/designer/src/components/taskmenu/containerwidget_taskmenu.h b/src/designer/src/components/taskmenu/containerwidget_taskmenu.h
index b0f4127ee..e27cb29ca 100644
--- a/src/designer/src/components/taskmenu/containerwidget_taskmenu.h
+++ b/src/designer/src/components/taskmenu/containerwidget_taskmenu.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef CONTAINERWIDGER_TASKMENU_H
#define CONTAINERWIDGER_TASKMENU_H
diff --git a/src/designer/src/components/taskmenu/groupbox_taskmenu.cpp b/src/designer/src/components/taskmenu/groupbox_taskmenu.cpp
index bc6cb5524..f8818bdf0 100644
--- a/src/designer/src/components/taskmenu/groupbox_taskmenu.cpp
+++ b/src/designer/src/components/taskmenu/groupbox_taskmenu.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "groupbox_taskmenu.h"
#include "inplace_editor.h"
@@ -38,6 +13,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
// -------- GroupBoxTaskMenuInlineEditor
@@ -51,7 +28,7 @@ protected:
};
GroupBoxTaskMenuInlineEditor::GroupBoxTaskMenuInlineEditor(QGroupBox *w, QObject *parent) :
- TaskMenuInlineEditor(w, ValidationSingleLine, QStringLiteral("title"), parent)
+ TaskMenuInlineEditor(w, ValidationSingleLine, u"title"_s, parent)
{
}
diff --git a/src/designer/src/components/taskmenu/groupbox_taskmenu.h b/src/designer/src/components/taskmenu/groupbox_taskmenu.h
index e09a883a0..6217273c7 100644
--- a/src/designer/src/components/taskmenu/groupbox_taskmenu.h
+++ b/src/designer/src/components/taskmenu/groupbox_taskmenu.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef GROUPBOX_TASKMENU_H
#define GROUPBOX_TASKMENU_H
@@ -56,7 +31,7 @@ private:
QList<QAction*> m_taskActions;
};
-typedef ExtensionFactory<QDesignerTaskMenuExtension, QGroupBox, GroupBoxTaskMenu> GroupBoxTaskMenuFactory;
+using GroupBoxTaskMenuFactory = ExtensionFactory<QDesignerTaskMenuExtension, QGroupBox, GroupBoxTaskMenu>;
} // namespace qdesigner_internal
QT_END_NAMESPACE
diff --git a/src/designer/src/components/taskmenu/inplace_editor.cpp b/src/designer/src/components/taskmenu/inplace_editor.cpp
index e86a78792..5afbea3a4 100644
--- a/src/designer/src/components/taskmenu/inplace_editor.cpp
+++ b/src/designer/src/components/taskmenu/inplace_editor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "abstractformwindow.h"
#include "inplace_editor.h"
@@ -40,6 +15,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
// ----------------- InPlaceEditor
@@ -53,7 +30,7 @@ InPlaceEditor::InPlaceEditor(QWidget *widget,
m_InPlaceWidgetHelper(this, widget, fw)
{
setAlignment(m_InPlaceWidgetHelper.alignment());
- setObjectName(QStringLiteral("__qt__passive_m_editor"));
+ setObjectName(u"__qt__passive_m_editor"_s);
setText(text);
selectAll();
diff --git a/src/designer/src/components/taskmenu/inplace_editor.h b/src/designer/src/components/taskmenu/inplace_editor.h
index 8f87bf491..c8b28f0ba 100644
--- a/src/designer/src/components/taskmenu/inplace_editor.h
+++ b/src/designer/src/components/taskmenu/inplace_editor.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef INPLACE_EDITOR_H
#define INPLACE_EDITOR_H
@@ -62,9 +37,8 @@ private:
// To use it for a particular widget/property, overwrite the method
// returning the edit area.
-class TaskMenuInlineEditor : public QObject {
- TaskMenuInlineEditor(const TaskMenuInlineEditor&);
- TaskMenuInlineEditor &operator=(const TaskMenuInlineEditor&);
+class TaskMenuInlineEditor : public QObject
+{
Q_OBJECT
public slots:
diff --git a/src/designer/src/components/taskmenu/inplace_widget_helper.cpp b/src/designer/src/components/taskmenu/inplace_widget_helper.cpp
index 5b38e832f..0183076bd 100644
--- a/src/designer/src/components/taskmenu/inplace_widget_helper.cpp
+++ b/src/designer/src/components/taskmenu/inplace_widget_helper.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "abstractformwindow.h"
#include "inplace_widget_helper.h"
diff --git a/src/designer/src/components/taskmenu/inplace_widget_helper.h b/src/designer/src/components/taskmenu/inplace_widget_helper.h
index f74d39830..587f3a415 100644
--- a/src/designer/src/components/taskmenu/inplace_widget_helper.h
+++ b/src/designer/src/components/taskmenu/inplace_widget_helper.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef INPLACE_WIDGETHELPER_H
#define INPLACE_WIDGETHELPER_H
diff --git a/src/designer/src/components/taskmenu/itemlisteditor.cpp b/src/designer/src/components/taskmenu/itemlisteditor.cpp
index ffa793c17..893716565 100644
--- a/src/designer/src/components/taskmenu/itemlisteditor.cpp
+++ b/src/designer/src/components/taskmenu/itemlisteditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "itemlisteditor.h"
#include <abstractformbuilder.h>
@@ -41,6 +16,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
class ItemPropertyBrowser : public QtTreePropertyBrowser
@@ -53,7 +30,7 @@ public:
const QString widthSampleString = QCoreApplication::translate("ItemPropertyBrowser", "XX Icon Selected off");
m_width = fontMetrics().horizontalAdvance(widthSampleString);
setSplitterPosition(m_width);
- m_width += fontMetrics().horizontalAdvance(QStringLiteral("/this/is/some/random/path"));
+ m_width += fontMetrics().horizontalAdvance(u"/this/is/some/random/path"_s);
}
QSize sizeHint() const override
@@ -70,7 +47,6 @@ AbstractItemEditor::AbstractItemEditor(QDesignerFormWindowInterface *form, QWidg
: QWidget(parent),
m_iconCache(qobject_cast<FormWindowBase *>(form)->iconCache())
{
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
m_propertyManager = new DesignerPropertyManager(form->core(), this);
m_editorFactory = new DesignerEditorFactory(form->core(), this);
m_editorFactory->setSpacing(0);
@@ -116,24 +92,29 @@ static QStringList c2qStringList(const char * const in[])
return out;
}
-void AbstractItemEditor::setupProperties(PropertyDefinition *propList)
+void AbstractItemEditor::setupProperties(const PropertyDefinition *propList,
+ Qt::Alignment alignDefault)
{
for (int i = 0; propList[i].name; i++) {
int type = propList[i].typeFunc ? propList[i].typeFunc() : propList[i].type;
int role = propList[i].role;
- QtVariantProperty *prop = m_propertyManager->addProperty(type, QLatin1String(propList[i].name));
+ QtVariantProperty *prop = m_propertyManager->addProperty(type, QLatin1StringView(propList[i].name));
+ if (role == Qt::TextAlignmentRole) {
+ prop->setAttribute(DesignerPropertyManager::alignDefaultAttribute(),
+ QVariant(uint(alignDefault)));
+ }
Q_ASSERT(prop);
if (role == Qt::ToolTipPropertyRole || role == Qt::WhatsThisPropertyRole)
- prop->setAttribute(QStringLiteral("validationMode"), ValidationRichText);
+ prop->setAttribute(u"validationMode"_s, ValidationRichText);
else if (role == Qt::DisplayPropertyRole)
- prop->setAttribute(QStringLiteral("validationMode"), ValidationMultiLine);
+ prop->setAttribute(u"validationMode"_s, ValidationMultiLine);
else if (role == Qt::StatusTipPropertyRole)
- prop->setAttribute(QStringLiteral("validationMode"), ValidationSingleLine);
+ prop->setAttribute(u"validationMode"_s, ValidationSingleLine);
else if (role == ItemFlagsShadowRole)
- prop->setAttribute(QStringLiteral("flagNames"), c2qStringList(itemFlagNames));
+ prop->setAttribute(u"flagNames"_s, c2qStringList(itemFlagNames));
else if (role == Qt::CheckStateRole)
- prop->setAttribute(QStringLiteral("enumNames"), c2qStringList(checkStateNames));
- prop->setAttribute(QStringLiteral("resettable"), true);
+ prop->setAttribute(u"enumNames"_s, c2qStringList(checkStateNames));
+ prop->setAttribute(u"resettable"_s, true);
m_properties.append(prop);
m_rootProperties.append(prop);
m_propertyToRole.insert(prop, role);
@@ -148,9 +129,11 @@ void AbstractItemEditor::setupObject(QWidget *object)
m_editorFactory->setFormWindowBase(fwb);
}
-void AbstractItemEditor::setupEditor(QWidget *object, PropertyDefinition *propList)
+void AbstractItemEditor::setupEditor(QWidget *object,
+ const PropertyDefinition *propList,
+ Qt::Alignment alignDefault)
{
- setupProperties(propList);
+ setupProperties(propList, alignDefault);
setupObject(object);
}
@@ -208,6 +191,9 @@ void AbstractItemEditor::resetProperty(QtProperty *property)
if (m_propertyManager->resetIconSubProperty(property))
return;
+ if (m_propertyManager->resetTextAlignmentProperty(property))
+ return;
+
BoolBlocker block(m_updatingBrowser);
QtVariantProperty *prop = m_propertyManager->variantProperty(property);
@@ -240,23 +226,26 @@ void AbstractItemEditor::cacheReloaded()
void AbstractItemEditor::updateBrowser()
{
BoolBlocker block(m_updatingBrowser);
- for (QtVariantProperty *prop : qAsConst(m_properties)) {
+ for (QtVariantProperty *prop : std::as_const(m_properties)) {
int role = m_propertyToRole.value(prop);
QVariant val = getItemData(role);
+
+ bool modified = false;
if (!val.isValid()) {
if (role == ItemFlagsShadowRole)
val = QVariant::fromValue(defaultItemFlags());
else
val = QVariant(QMetaType(prop->value().userType()), nullptr);
- prop->setModified(false);
} else {
- prop->setModified(true);
+ modified = role != Qt::TextAlignmentRole
+ || val.toUInt() != DesignerPropertyManager::alignDefault(prop);
}
+ prop->setModified(modified);
prop->setValue(val);
}
if (m_propertyBrowser->topLevelItems().isEmpty()) {
- for (QtVariantProperty *prop : qAsConst(m_rootProperties))
+ for (QtVariantProperty *prop : std::as_const(m_rootProperties))
m_propertyBrowser->addProperty(prop);
}
}
@@ -282,12 +271,26 @@ ItemListEditor::ItemListEditor(QDesignerFormWindowInterface *form, QWidget *pare
injectPropertyBrowser(this, ui.widget);
connect(ui.showPropertiesButton, &QAbstractButton::clicked,
this, &ItemListEditor::togglePropertyBrowser);
+
+ connect(ui.newListItemButton, &QAbstractButton::clicked,
+ this, &ItemListEditor::newListItemButtonClicked);
+ connect(ui.deleteListItemButton, &QAbstractButton::clicked,
+ this, &ItemListEditor::deleteListItemButtonClicked);
+ connect(ui.moveListItemUpButton, &QAbstractButton::clicked,
+ this, &ItemListEditor::moveListItemUpButtonClicked);
+ connect(ui.moveListItemDownButton, &QAbstractButton::clicked,
+ this, &ItemListEditor::moveListItemDownButtonClicked);
+ connect(ui.listWidget, &QListWidget::currentRowChanged,
+ this, &ItemListEditor::listWidgetCurrentRowChanged);
+ connect(ui.listWidget, &QListWidget::itemChanged,
+ this, &ItemListEditor::listWidgetItemChanged);
+
setPropertyBrowserVisible(false);
- QIcon upIcon = createIconSet(QString::fromUtf8("up.png"));
- QIcon downIcon = createIconSet(QString::fromUtf8("down.png"));
- QIcon minusIcon = createIconSet(QString::fromUtf8("minus.png"));
- QIcon plusIcon = createIconSet(QString::fromUtf8("plus.png"));
+ QIcon upIcon = createIconSet("up.png"_L1);
+ QIcon downIcon = createIconSet("down.png"_L1);
+ QIcon minusIcon = createIconSet("minus.png"_L1);
+ QIcon plusIcon = createIconSet("plus.png"_L1);
ui.moveListItemUpButton->setIcon(upIcon);
ui.moveListItemDownButton->setIcon(downIcon);
ui.newListItemButton->setIcon(plusIcon);
@@ -296,9 +299,11 @@ ItemListEditor::ItemListEditor(QDesignerFormWindowInterface *form, QWidget *pare
connect(iconCache(), &DesignerIconCache::reloaded, this, &AbstractItemEditor::cacheReloaded);
}
-void ItemListEditor::setupEditor(QWidget *object, PropertyDefinition *propList)
+void ItemListEditor::setupEditor(QWidget *object,
+ const PropertyDefinition *propList,
+ Qt::Alignment alignDefault)
{
- AbstractItemEditor::setupEditor(object, propList);
+ AbstractItemEditor::setupEditor(object, propList, alignDefault);
if (ui.listWidget->count() > 0)
ui.listWidget->setCurrentRow(0);
@@ -313,12 +318,14 @@ void ItemListEditor::setCurrentIndex(int idx)
m_updating = false;
}
-void ItemListEditor::on_newListItemButton_clicked()
+void ItemListEditor::newListItemButtonClicked()
{
int row = ui.listWidget->currentRow() + 1;
QListWidgetItem *item = new QListWidgetItem(m_newItemText);
item->setData(Qt::DisplayPropertyRole, QVariant::fromValue(PropertySheetStringValue(m_newItemText)));
+ if (m_alignDefault != 0)
+ item->setTextAlignment(Qt::Alignment(m_alignDefault));
item->setFlags(item->flags() | Qt::ItemIsEditable);
if (row < ui.listWidget->count())
ui.listWidget->insertItem(row, item);
@@ -330,7 +337,7 @@ void ItemListEditor::on_newListItemButton_clicked()
ui.listWidget->editItem(item);
}
-void ItemListEditor::on_deleteListItemButton_clicked()
+void ItemListEditor::deleteListItemButtonClicked()
{
int row = ui.listWidget->currentRow();
@@ -347,7 +354,7 @@ void ItemListEditor::on_deleteListItemButton_clicked()
ui.listWidget->setCurrentRow(row);
}
-void ItemListEditor::on_moveListItemUpButton_clicked()
+void ItemListEditor::moveListItemUpButtonClicked()
{
int row = ui.listWidget->currentRow();
if (row <= 0)
@@ -358,7 +365,7 @@ void ItemListEditor::on_moveListItemUpButton_clicked()
emit itemMovedUp(row);
}
-void ItemListEditor::on_moveListItemDownButton_clicked()
+void ItemListEditor::moveListItemDownButtonClicked()
{
int row = ui.listWidget->currentRow();
if (row == -1 || row == ui.listWidget->count() - 1)
@@ -369,14 +376,14 @@ void ItemListEditor::on_moveListItemDownButton_clicked()
emit itemMovedDown(row);
}
-void ItemListEditor::on_listWidget_currentRowChanged()
+void ItemListEditor::listWidgetCurrentRowChanged()
{
updateEditor();
if (!m_updating)
emit indexChanged(ui.listWidget->currentRow());
}
-void ItemListEditor::on_listWidget_itemChanged(QListWidgetItem *item)
+void ItemListEditor::listWidgetItemChanged(QListWidgetItem *item)
{
if (m_updatingBrowser)
return;
@@ -408,11 +415,13 @@ void ItemListEditor::setItemData(int role, const QVariant &v)
{
QListWidgetItem *item = ui.listWidget->currentItem();
bool reLayout = false;
- if ((role == Qt::EditRole && (v.toString().count(QLatin1Char('\n')) != item->data(role).toString().count(QLatin1Char('\n'))))
- || role == Qt::FontRole)
+ if ((role == Qt::EditRole
+ && (v.toString().count(u'\n') != item->data(role).toString().count(u'\n')))
+ || role == Qt::FontRole) {
reLayout = true;
+ }
QVariant newValue = v;
- if (role == Qt::FontRole && newValue.type() == QVariant::Font) {
+ if (role == Qt::FontRole && newValue.metaType().id() == QMetaType::QFont) {
QFont oldFont = ui.listWidget->font();
QFont newFont = qvariant_cast<QFont>(newValue).resolve(oldFont);
newValue = QVariant::fromValue(newFont);
@@ -466,6 +475,16 @@ void ItemListEditor::updateEditor()
else
m_propertyBrowser->clear();
}
+
+uint ItemListEditor::alignDefault() const
+{
+ return m_alignDefault;
+}
+
+void ItemListEditor::setAlignDefault(uint newAlignDefault)
+{
+ m_alignDefault = newAlignDefault;
+}
} // namespace qdesigner_internal
QT_END_NAMESPACE
diff --git a/src/designer/src/components/taskmenu/itemlisteditor.h b/src/designer/src/components/taskmenu/itemlisteditor.h
index 97bcb19d9..084a32947 100644
--- a/src/designer/src/components/taskmenu/itemlisteditor.h
+++ b/src/designer/src/components/taskmenu/itemlisteditor.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ITEMLISTEDITOR_H
#define ITEMLISTEDITOR_H
@@ -53,8 +28,10 @@ class DesignerEditorFactory;
class BoolBlocker
{
public:
- inline BoolBlocker(bool &b):block(b), reset(b){block = true;}
- inline ~BoolBlocker(){block = reset; }
+ Q_DISABLE_COPY_MOVE(BoolBlocker);
+
+ inline explicit BoolBlocker(bool &b) noexcept : block(b), reset(b) { block = true; }
+ inline ~BoolBlocker() noexcept { block = reset; }
private:
bool &block;
bool reset;
@@ -86,9 +63,11 @@ private slots:
protected:
virtual int defaultItemFlags() const = 0;
- void setupProperties(PropertyDefinition *propDefs);
+ void setupProperties(const PropertyDefinition *propList,
+ Qt::Alignment alignDefault = Qt::AlignLeading | Qt::AlignVCenter);
void setupObject(QWidget *object);
- void setupEditor(QWidget *object, PropertyDefinition *propDefs);
+ void setupEditor(QWidget *object, const PropertyDefinition *propDefs,
+ Qt::Alignment alignDefault = Qt::AlignLeading | Qt::AlignVCenter);
void injectPropertyBrowser(QWidget *parent, QWidget *widget);
void updateBrowser();
virtual void setItemData(int role, const QVariant &v) = 0;
@@ -112,12 +91,16 @@ class ItemListEditor: public AbstractItemEditor
public:
explicit ItemListEditor(QDesignerFormWindowInterface *form, QWidget *parent);
- void setupEditor(QWidget *object, PropertyDefinition *propDefs);
+ void setupEditor(QWidget *object, const PropertyDefinition *propDefs,
+ Qt::Alignment alignDefault = Qt::AlignLeading | Qt::AlignVCenter);
QListWidget *listWidget() const { return ui.listWidget; }
void setNewItemText(const QString &tpl) { m_newItemText = tpl; }
QString newItemText() const { return m_newItemText; }
void setCurrentIndex(int idx);
+ uint alignDefault() const;
+ void setAlignDefault(uint newAlignDefault);
+
signals:
void indexChanged(int idx);
void itemChanged(int idx, int role, const QVariant &v);
@@ -127,12 +110,12 @@ signals:
void itemMovedDown(int idx);
private slots:
- void on_newListItemButton_clicked();
- void on_deleteListItemButton_clicked();
- void on_moveListItemUpButton_clicked();
- void on_moveListItemDownButton_clicked();
- void on_listWidget_currentRowChanged();
- void on_listWidget_itemChanged(QListWidgetItem * item);
+ void newListItemButtonClicked();
+ void deleteListItemButtonClicked();
+ void moveListItemUpButtonClicked();
+ void moveListItemDownButtonClicked();
+ void listWidgetCurrentRowChanged();
+ void listWidgetItemChanged(QListWidgetItem * item);
void togglePropertyBrowser();
void cacheReloaded();
@@ -145,6 +128,7 @@ private:
void setPropertyBrowserVisible(bool v);
void updateEditor();
Ui::ItemListEditor ui;
+ uint m_alignDefault = 0;
bool m_updating;
QString m_newItemText;
};
diff --git a/src/designer/src/components/taskmenu/itemlisteditor.ui b/src/designer/src/components/taskmenu/itemlisteditor.ui
index d016c4dd3..75394acf6 100644
--- a/src/designer/src/components/taskmenu/itemlisteditor.ui
+++ b/src/designer/src/components/taskmenu/itemlisteditor.ui
@@ -1,31 +1,8 @@
<ui version="4.0" >
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+</comment>
<class>qdesigner_internal::ItemListEditor</class>
<widget class="QWidget" name="qdesigner_internal::ItemListEditor" >
<property name="geometry" >
diff --git a/src/designer/src/components/taskmenu/label_taskmenu.cpp b/src/designer/src/components/taskmenu/label_taskmenu.cpp
index aaaa619a6..14a58d8ce 100644
--- a/src/designer/src/components/taskmenu/label_taskmenu.cpp
+++ b/src/designer/src/components/taskmenu/label_taskmenu.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "label_taskmenu.h"
#include "inplace_editor.h"
@@ -37,10 +12,12 @@
#include <QtGui/qaction.h>
#include <QtGui/qtextdocument.h>
-static const char *textPropertyC = "text";
-
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
+static constexpr auto textPropertyC = "text"_L1;
+
namespace qdesigner_internal {
// -------- LabelTaskMenuInlineEditor
@@ -54,7 +31,7 @@ protected:
};
LabelTaskMenuInlineEditor::LabelTaskMenuInlineEditor(QLabel *w, QObject *parent) :
- TaskMenuInlineEditor(w, ValidationRichText, QLatin1String(textPropertyC), parent)
+ TaskMenuInlineEditor(w, ValidationRichText, textPropertyC, parent)
{
}
@@ -98,7 +75,7 @@ QList<QAction*> LabelTaskMenu::taskActions() const
void LabelTaskMenu::editRichText()
{
- changeTextProperty(QLatin1String(textPropertyC), QString(), MultiSelectionMode, m_label->textFormat());
+ changeTextProperty(textPropertyC, QString(), MultiSelectionMode, m_label->textFormat());
}
}
diff --git a/src/designer/src/components/taskmenu/label_taskmenu.h b/src/designer/src/components/taskmenu/label_taskmenu.h
index a1744b583..b7aed921f 100644
--- a/src/designer/src/components/taskmenu/label_taskmenu.h
+++ b/src/designer/src/components/taskmenu/label_taskmenu.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef LABEL_TASKMENU_H
#define LABEL_TASKMENU_H
diff --git a/src/designer/src/components/taskmenu/layouttaskmenu.cpp b/src/designer/src/components/taskmenu/layouttaskmenu.cpp
index 39ea6df2e..256fd2912 100644
--- a/src/designer/src/components/taskmenu/layouttaskmenu.cpp
+++ b/src/designer/src/components/taskmenu/layouttaskmenu.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "layouttaskmenu.h"
#include <formlayoutmenu_p.h>
diff --git a/src/designer/src/components/taskmenu/layouttaskmenu.h b/src/designer/src/components/taskmenu/layouttaskmenu.h
index afd1afe0f..d0b37407e 100644
--- a/src/designer/src/components/taskmenu/layouttaskmenu.h
+++ b/src/designer/src/components/taskmenu/layouttaskmenu.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef LAYOUTTASKMENU_H
#define LAYOUTTASKMENU_H
diff --git a/src/designer/src/components/taskmenu/lineedit_taskmenu.cpp b/src/designer/src/components/taskmenu/lineedit_taskmenu.cpp
index f52a060e6..88dcf456a 100644
--- a/src/designer/src/components/taskmenu/lineedit_taskmenu.cpp
+++ b/src/designer/src/components/taskmenu/lineedit_taskmenu.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "lineedit_taskmenu.h"
#include "inplace_editor.h"
@@ -38,6 +13,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
// -------- LineEditTaskMenuInlineEditor
@@ -51,7 +28,7 @@ protected:
};
LineEditTaskMenuInlineEditor::LineEditTaskMenuInlineEditor(QLineEdit *w, QObject *parent) :
- TaskMenuInlineEditor(w, ValidationSingleLine, QStringLiteral("text"), parent)
+ TaskMenuInlineEditor(w, ValidationSingleLine, u"text"_s, parent)
{
}
diff --git a/src/designer/src/components/taskmenu/lineedit_taskmenu.h b/src/designer/src/components/taskmenu/lineedit_taskmenu.h
index e28ab7336..efc000275 100644
--- a/src/designer/src/components/taskmenu/lineedit_taskmenu.h
+++ b/src/designer/src/components/taskmenu/lineedit_taskmenu.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef LINEEDIT_TASKMENU_H
#define LINEEDIT_TASKMENU_H
diff --git a/src/designer/src/components/taskmenu/listwidget_taskmenu.cpp b/src/designer/src/components/taskmenu/listwidget_taskmenu.cpp
index d4b2cb71a..4bb08c4c2 100644
--- a/src/designer/src/components/taskmenu/listwidget_taskmenu.cpp
+++ b/src/designer/src/components/taskmenu/listwidget_taskmenu.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "listwidget_taskmenu.h"
#include "listwidgeteditor.h"
@@ -45,7 +20,7 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+namespace qdesigner_internal {
ListWidgetTaskMenu::ListWidgetTaskMenu(QListWidget *button, QObject *parent)
: QDesignerTaskMenu(button, parent),
@@ -100,4 +75,6 @@ void ListWidgetTaskMenu::updateSelection()
m_editor->deleteLater();
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/taskmenu/listwidget_taskmenu.h b/src/designer/src/components/taskmenu/listwidget_taskmenu.h
index 63708be61..a08d4b6c6 100644
--- a/src/designer/src/components/taskmenu/listwidget_taskmenu.h
+++ b/src/designer/src/components/taskmenu/listwidget_taskmenu.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef LISTWIDGET_TASKMENU_H
#define LISTWIDGET_TASKMENU_H
diff --git a/src/designer/src/components/taskmenu/listwidgeteditor.cpp b/src/designer/src/components/taskmenu/listwidgeteditor.cpp
index 098dac2cd..84e9b0a5d 100644
--- a/src/designer/src/components/taskmenu/listwidgeteditor.cpp
+++ b/src/designer/src/components/taskmenu/listwidgeteditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "listwidgeteditor.h"
#include <designerpropertymanager.h>
@@ -39,13 +14,12 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+namespace qdesigner_internal {
ListWidgetEditor::ListWidgetEditor(QDesignerFormWindowInterface *form,
QWidget *parent)
: QDialog(parent)
{
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
QDialogButtonBox *buttonBox = new QDialogButtonBox;
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
@@ -74,10 +48,10 @@ static AbstractItemEditor::PropertyDefinition listBoxPropList[] = {
{ Qt::ToolTipPropertyRole, 0, DesignerPropertyManager::designerStringTypeId, "toolTip" },
{ Qt::StatusTipPropertyRole, 0, DesignerPropertyManager::designerStringTypeId, "statusTip" },
{ Qt::WhatsThisPropertyRole, 0, DesignerPropertyManager::designerStringTypeId, "whatsThis" },
- { Qt::FontRole, QVariant::Font, nullptr, "font" },
+ { Qt::FontRole, QMetaType::QFont, nullptr, "font" },
{ Qt::TextAlignmentRole, 0, DesignerPropertyManager::designerAlignmentTypeId, "textAlignment" },
- { Qt::BackgroundRole, QVariant::Brush, nullptr, "background" },
- { Qt::ForegroundRole, QVariant::Brush, nullptr, "foreground" },
+ { Qt::BackgroundRole, QMetaType::QBrush, nullptr, "background" },
+ { Qt::ForegroundRole, QMetaType::QBrush, nullptr, "foreground" },
{ ItemFlagsShadowRole, 0, QtVariantPropertyManager::flagTypeId, "flags" },
{ Qt::CheckStateRole, 0, QtVariantPropertyManager::enumTypeId, "checkState" },
{ 0, 0, nullptr, nullptr }
@@ -122,4 +96,6 @@ ListContents ListWidgetEditor::contents() const
return retVal;
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/taskmenu/listwidgeteditor.h b/src/designer/src/components/taskmenu/listwidgeteditor.h
index 510dc0ef4..b16f63b1f 100644
--- a/src/designer/src/components/taskmenu/listwidgeteditor.h
+++ b/src/designer/src/components/taskmenu/listwidgeteditor.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef LISTWIDGETEDITOR_H
#define LISTWIDGETEDITOR_H
diff --git a/src/designer/src/components/taskmenu/menutaskmenu.cpp b/src/designer/src/components/taskmenu/menutaskmenu.cpp
index 87cd4bee5..6b95a1bf4 100644
--- a/src/designer/src/components/taskmenu/menutaskmenu.cpp
+++ b/src/designer/src/components/taskmenu/menutaskmenu.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "menutaskmenu.h"
diff --git a/src/designer/src/components/taskmenu/menutaskmenu.h b/src/designer/src/components/taskmenu/menutaskmenu.h
index 935836896..1d290d43b 100644
--- a/src/designer/src/components/taskmenu/menutaskmenu.h
+++ b/src/designer/src/components/taskmenu/menutaskmenu.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef MENUTASKMENU_H
#define MENUTASKMENU_H
diff --git a/src/designer/src/components/taskmenu/tablewidget_taskmenu.cpp b/src/designer/src/components/taskmenu/tablewidget_taskmenu.cpp
index e0d8d5c94..9ace1eacf 100644
--- a/src/designer/src/components/taskmenu/tablewidget_taskmenu.cpp
+++ b/src/designer/src/components/taskmenu/tablewidget_taskmenu.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "tablewidget_taskmenu.h"
#include "tablewidgeteditor.h"
@@ -44,7 +19,7 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+namespace qdesigner_internal {
TableWidgetTaskMenu::TableWidgetTaskMenu(QTableWidget *button, QObject *parent)
: QDesignerTaskMenu(button, parent),
@@ -98,4 +73,6 @@ void TableWidgetTaskMenu::updateSelection()
m_editor->deleteLater();
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/taskmenu/tablewidget_taskmenu.h b/src/designer/src/components/taskmenu/tablewidget_taskmenu.h
index b4d5462f2..6c3c79c3c 100644
--- a/src/designer/src/components/taskmenu/tablewidget_taskmenu.h
+++ b/src/designer/src/components/taskmenu/tablewidget_taskmenu.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef TABLEWIDGET_TASKMENU_H
#define TABLEWIDGET_TASKMENU_H
diff --git a/src/designer/src/components/taskmenu/tablewidgeteditor.cpp b/src/designer/src/components/taskmenu/tablewidgeteditor.cpp
index b5f41626c..725db1151 100644
--- a/src/designer/src/components/taskmenu/tablewidgeteditor.cpp
+++ b/src/designer/src/components/taskmenu/tablewidgeteditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "tablewidgeteditor.h"
#include <abstractformbuilder.h>
@@ -44,16 +19,19 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
TableWidgetEditor::TableWidgetEditor(QDesignerFormWindowInterface *form, QDialog *dialog)
: AbstractItemEditor(form, nullptr), m_updatingBrowser(false)
{
m_columnEditor = new ItemListEditor(form, this);
- m_columnEditor->setObjectName(QStringLiteral("columnEditor"));
+ m_columnEditor->setObjectName(u"columnEditor"_s);
+ m_columnEditor->setAlignDefault(Qt::AlignCenter);
m_columnEditor->setNewItemText(tr("New Column"));
m_rowEditor = new ItemListEditor(form, this);
- m_rowEditor->setObjectName(QStringLiteral("rowEditor"));
+ m_rowEditor->setObjectName(u"rowEditor"_s);
m_rowEditor->setNewItemText(tr("New Row"));
ui.setupUi(dialog);
@@ -65,41 +43,40 @@ TableWidgetEditor::TableWidgetEditor(QDesignerFormWindowInterface *form, QDialog
ui.tabWidget->insertTab(0, m_columnEditor, tr("&Columns"));
ui.tabWidget->insertTab(1, m_rowEditor, tr("&Rows"));
ui.tabWidget->setCurrentIndex(0);
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
ui.tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
connect(iconCache(), &DesignerIconCache::reloaded, this, &TableWidgetEditor::cacheReloaded);
connect(ui.tableWidget, &QTableWidget::currentCellChanged,
- this, &TableWidgetEditor::on_tableWidget_currentCellChanged);
+ this, &TableWidgetEditor::tableWidgetCurrentCellChanged);
connect(ui.tableWidget, &QTableWidget::itemChanged,
- this, &TableWidgetEditor::on_tableWidget_itemChanged);
+ this, &TableWidgetEditor::tableWidgetItemChanged);
connect(m_columnEditor, &ItemListEditor::indexChanged,
- this, &TableWidgetEditor::on_columnEditor_indexChanged);
+ this, &TableWidgetEditor::columnEditorIndexChanged);
connect(m_columnEditor, &ItemListEditor::itemChanged,
- this, &TableWidgetEditor::on_columnEditor_itemChanged);
+ this, &TableWidgetEditor::columnEditorItemChanged);
connect(m_columnEditor, &ItemListEditor::itemInserted,
- this, &TableWidgetEditor::on_columnEditor_itemInserted);
+ this, &TableWidgetEditor::columnEditorItemInserted);
connect(m_columnEditor, &ItemListEditor::itemDeleted,
- this, &TableWidgetEditor::on_columnEditor_itemDeleted);
+ this, &TableWidgetEditor::columnEditorItemDeleted);
connect(m_columnEditor, &ItemListEditor::itemMovedUp,
- this, &TableWidgetEditor::on_columnEditor_itemMovedUp);
+ this, &TableWidgetEditor::columnEditorItemMovedUp);
connect(m_columnEditor, &ItemListEditor::itemMovedDown,
- this, &TableWidgetEditor::on_columnEditor_itemMovedDown);
+ this, &TableWidgetEditor::columnEditorItemMovedDown);
connect(m_rowEditor, &ItemListEditor::indexChanged,
- this, &TableWidgetEditor::on_rowEditor_indexChanged);
+ this, &TableWidgetEditor::rowEditorIndexChanged);
connect(m_rowEditor, &ItemListEditor::itemChanged,
- this, &TableWidgetEditor::on_rowEditor_itemChanged);
+ this, &TableWidgetEditor::rowEditorItemChanged);
connect(m_rowEditor, &ItemListEditor::itemInserted,
- this, &TableWidgetEditor::on_rowEditor_itemInserted);
+ this, &TableWidgetEditor::rowEditorItemInserted);
connect(m_rowEditor, &ItemListEditor::itemDeleted,
- this, &TableWidgetEditor::on_rowEditor_itemDeleted);
+ this, &TableWidgetEditor::rowEditorItemDeleted);
connect(m_rowEditor, &ItemListEditor::itemMovedUp,
- this, &TableWidgetEditor::on_rowEditor_itemMovedUp);
+ this, &TableWidgetEditor::rowEditorItemMovedUp);
connect(m_rowEditor, &ItemListEditor::itemMovedDown,
- this, &TableWidgetEditor::on_rowEditor_itemMovedDown);
+ this, &TableWidgetEditor::rowEditorItemMovedDown);
}
static AbstractItemEditor::PropertyDefinition tableHeaderPropList[] = {
@@ -108,10 +85,10 @@ static AbstractItemEditor::PropertyDefinition tableHeaderPropList[] = {
{ Qt::ToolTipPropertyRole, 0, DesignerPropertyManager::designerStringTypeId, "toolTip" },
// { Qt::StatusTipPropertyRole, 0, DesignerPropertyManager::designerStringTypeId, "statusTip" },
{ Qt::WhatsThisPropertyRole, 0, DesignerPropertyManager::designerStringTypeId, "whatsThis" },
- { Qt::FontRole, QVariant::Font, nullptr, "font" },
+ { Qt::FontRole, QMetaType::QFont, nullptr, "font" },
{ Qt::TextAlignmentRole, 0, DesignerPropertyManager::designerAlignmentTypeId, "textAlignment" },
- { Qt::BackgroundRole, QVariant::Color, nullptr, "background" },
- { Qt::ForegroundRole, QVariant::Brush, nullptr, "foreground" },
+ { Qt::BackgroundRole, QMetaType::QColor, nullptr, "background" },
+ { Qt::ForegroundRole, QMetaType::QBrush, nullptr, "foreground" },
{ 0, 0, nullptr, nullptr }
};
@@ -121,10 +98,10 @@ static AbstractItemEditor::PropertyDefinition tableItemPropList[] = {
{ Qt::ToolTipPropertyRole, 0, DesignerPropertyManager::designerStringTypeId, "toolTip" },
// { Qt::StatusTipPropertyRole, 0, DesignerPropertyManager::designerStringTypeId, "statusTip" },
{ Qt::WhatsThisPropertyRole, 0, DesignerPropertyManager::designerStringTypeId, "whatsThis" },
- { Qt::FontRole, QVariant::Font, nullptr, "font" },
+ { Qt::FontRole, QMetaType::QFont, nullptr, "font" },
{ Qt::TextAlignmentRole, 0, DesignerPropertyManager::designerAlignmentTypeId, "textAlignment" },
- { Qt::BackgroundRole, QVariant::Brush, nullptr, "background" },
- { Qt::ForegroundRole, QVariant::Brush, nullptr, "foreground" },
+ { Qt::BackgroundRole, QMetaType::QBrush, nullptr, "background" },
+ { Qt::ForegroundRole, QMetaType::QBrush, nullptr, "foreground" },
{ ItemFlagsShadowRole, 0, QtVariantPropertyManager::flagTypeId, "flags" },
{ Qt::CheckStateRole, 0, QtVariantPropertyManager::enumTypeId, "checkState" },
{ 0, 0, nullptr, nullptr }
@@ -136,11 +113,19 @@ TableWidgetContents TableWidgetEditor::fillContentsFromTableWidget(QTableWidget
tblCont.fromTableWidget(tableWidget, false);
tblCont.applyToTableWidget(ui.tableWidget, iconCache(), true);
- tblCont.m_verticalHeader.applyToListWidget(m_rowEditor->listWidget(), iconCache(), true);
- m_rowEditor->setupEditor(tableWidget, tableHeaderPropList);
+ auto *header = tableWidget->verticalHeader();
+ auto headerAlignment = header != nullptr
+ ? header->defaultAlignment() : Qt::Alignment(Qt::AlignLeading | Qt::AlignVCenter);
+ tblCont.m_verticalHeader.applyToListWidget(m_rowEditor->listWidget(), iconCache(),
+ true, headerAlignment);
+ m_rowEditor->setupEditor(tableWidget, tableHeaderPropList, headerAlignment);
- tblCont.m_horizontalHeader.applyToListWidget(m_columnEditor->listWidget(), iconCache(), true);
- m_columnEditor->setupEditor(tableWidget, tableHeaderPropList);
+ header = tableWidget->horizontalHeader();
+ headerAlignment = header != nullptr
+ ? header->defaultAlignment() : Qt::Alignment(Qt::AlignCenter);
+ tblCont.m_horizontalHeader.applyToListWidget(m_columnEditor->listWidget(), iconCache(),
+ true, headerAlignment);
+ m_columnEditor->setupEditor(tableWidget, tableHeaderPropList, headerAlignment);
setupEditor(tableWidget, tableItemPropList);
if (ui.tableWidget->columnCount() > 0 && ui.tableWidget->rowCount() > 0)
@@ -167,7 +152,7 @@ void TableWidgetEditor::setItemData(int role, const QVariant &v)
ui.tableWidget->setItem(ui.tableWidget->currentRow(), ui.tableWidget->currentColumn(), item);
}
QVariant newValue = v;
- if (role == Qt::FontRole && newValue.type() == QVariant::Font) {
+ if (role == Qt::FontRole && newValue.metaType().id() == QMetaType::QFont) {
QFont oldFont = ui.tableWidget->font();
QFont newFont = qvariant_cast<QFont>(newValue).resolve(oldFont);
newValue = QVariant::fromValue(newFont);
@@ -190,14 +175,14 @@ int TableWidgetEditor::defaultItemFlags() const
return flags;
}
-void TableWidgetEditor::on_tableWidget_currentCellChanged(int currentRow, int currentCol, int, int /* XXX remove me */)
+void TableWidgetEditor::tableWidgetCurrentCellChanged(int currentRow, int currentCol)
{
m_rowEditor->setCurrentIndex(currentRow);
m_columnEditor->setCurrentIndex(currentCol);
updateBrowser();
}
-void TableWidgetEditor::on_tableWidget_itemChanged(QTableWidgetItem *item)
+void TableWidgetEditor::tableWidgetItemChanged(QTableWidgetItem *item)
{
if (m_updatingBrowser)
return;
@@ -210,22 +195,22 @@ void TableWidgetEditor::on_tableWidget_itemChanged(QTableWidgetItem *item)
updateBrowser();
}
-void TableWidgetEditor::on_columnEditor_indexChanged(int col)
+void TableWidgetEditor::columnEditorIndexChanged(int col)
{
ui.tableWidget->setCurrentCell(ui.tableWidget->currentRow(), col);
}
-void TableWidgetEditor::on_columnEditor_itemChanged(int idx, int role, const QVariant &v)
+void TableWidgetEditor::columnEditorItemChanged(int idx, int role, const QVariant &v)
{
ui.tableWidget->horizontalHeaderItem(idx)->setData(role, v);
}
-void TableWidgetEditor::on_rowEditor_indexChanged(int col)
+void TableWidgetEditor::rowEditorIndexChanged(int col)
{
ui.tableWidget->setCurrentCell(col, ui.tableWidget->currentColumn());
}
-void TableWidgetEditor::on_rowEditor_itemChanged(int idx, int role, const QVariant &v)
+void TableWidgetEditor::rowEditorItemChanged(int idx, int role, const QVariant &v)
{
ui.tableWidget->verticalHeaderItem(idx)->setData(role, v);
}
@@ -333,7 +318,7 @@ void TableWidgetEditor::moveRowsUp(int fromRow, int toRow)
}
}
-void TableWidgetEditor::on_columnEditor_itemInserted(int idx)
+void TableWidgetEditor::columnEditorItemInserted(int idx)
{
const int columnCount = ui.tableWidget->columnCount();
ui.tableWidget->setColumnCount(columnCount + 1);
@@ -351,7 +336,7 @@ void TableWidgetEditor::on_columnEditor_itemInserted(int idx)
updateEditor();
}
-void TableWidgetEditor::on_columnEditor_itemDeleted(int idx)
+void TableWidgetEditor::columnEditorItemDeleted(int idx)
{
const int columnCount = ui.tableWidget->columnCount();
@@ -361,21 +346,21 @@ void TableWidgetEditor::on_columnEditor_itemDeleted(int idx)
updateEditor();
}
-void TableWidgetEditor::on_columnEditor_itemMovedUp(int idx)
+void TableWidgetEditor::columnEditorItemMovedUp(int idx)
{
moveColumnsRight(idx - 1, idx);
ui.tableWidget->setCurrentCell(ui.tableWidget->currentRow(), idx - 1);
}
-void TableWidgetEditor::on_columnEditor_itemMovedDown(int idx)
+void TableWidgetEditor::columnEditorItemMovedDown(int idx)
{
moveColumnsLeft(idx, idx + 1);
ui.tableWidget->setCurrentCell(ui.tableWidget->currentRow(), idx + 1);
}
-void TableWidgetEditor::on_rowEditor_itemInserted(int idx)
+void TableWidgetEditor::rowEditorItemInserted(int idx)
{
const int rowCount = ui.tableWidget->rowCount();
ui.tableWidget->setRowCount(rowCount + 1);
@@ -393,7 +378,7 @@ void TableWidgetEditor::on_rowEditor_itemInserted(int idx)
updateEditor();
}
-void TableWidgetEditor::on_rowEditor_itemDeleted(int idx)
+void TableWidgetEditor::rowEditorItemDeleted(int idx)
{
const int rowCount = ui.tableWidget->rowCount();
@@ -403,14 +388,14 @@ void TableWidgetEditor::on_rowEditor_itemDeleted(int idx)
updateEditor();
}
-void TableWidgetEditor::on_rowEditor_itemMovedUp(int idx)
+void TableWidgetEditor::rowEditorItemMovedUp(int idx)
{
moveRowsUp(idx - 1, idx);
ui.tableWidget->setCurrentCell(idx - 1, ui.tableWidget->currentColumn());
}
-void TableWidgetEditor::on_rowEditor_itemMovedDown(int idx)
+void TableWidgetEditor::rowEditorItemMovedDown(int idx)
{
moveRowsDown(idx, idx + 1);
@@ -425,7 +410,6 @@ void TableWidgetEditor::cacheReloaded()
TableWidgetEditorDialog::TableWidgetEditorDialog(QDesignerFormWindowInterface *form, QWidget *parent) :
QDialog(parent), m_editor(form, this)
{
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
}
TableWidgetContents TableWidgetEditorDialog::fillContentsFromTableWidget(QTableWidget *tableWidget)
diff --git a/src/designer/src/components/taskmenu/tablewidgeteditor.h b/src/designer/src/components/taskmenu/tablewidgeteditor.h
index cedea521d..defc05f3c 100644
--- a/src/designer/src/components/taskmenu/tablewidgeteditor.h
+++ b/src/designer/src/components/taskmenu/tablewidgeteditor.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef TABLEWIDGETEDITOR_H
#define TABLEWIDGETEDITOR_H
@@ -56,24 +31,24 @@ public:
private slots:
- void on_tableWidget_currentCellChanged(int currentRow, int currentCol, int, int);
- void on_tableWidget_itemChanged(QTableWidgetItem *item);
+ void tableWidgetCurrentCellChanged(int currentRow, int currentCol);
+ void tableWidgetItemChanged(QTableWidgetItem *item);
- void on_columnEditor_indexChanged(int idx);
- void on_columnEditor_itemChanged(int idx, int role, const QVariant &v);
+ void columnEditorIndexChanged(int idx);
+ void columnEditorItemChanged(int idx, int role, const QVariant &v);
- void on_columnEditor_itemInserted(int idx);
- void on_columnEditor_itemDeleted(int idx);
- void on_columnEditor_itemMovedUp(int idx);
- void on_columnEditor_itemMovedDown(int idx);
+ void columnEditorItemInserted(int idx);
+ void columnEditorItemDeleted(int idx);
+ void columnEditorItemMovedUp(int idx);
+ void columnEditorItemMovedDown(int idx);
- void on_rowEditor_indexChanged(int idx);
- void on_rowEditor_itemChanged(int idx, int role, const QVariant &v);
+ void rowEditorIndexChanged(int idx);
+ void rowEditorItemChanged(int idx, int role, const QVariant &v);
- void on_rowEditor_itemInserted(int idx);
- void on_rowEditor_itemDeleted(int idx);
- void on_rowEditor_itemMovedUp(int idx);
- void on_rowEditor_itemMovedDown(int idx);
+ void rowEditorItemInserted(int idx);
+ void rowEditorItemDeleted(int idx);
+ void rowEditorItemMovedUp(int idx);
+ void rowEditorItemMovedDown(int idx);
void togglePropertyBrowser();
diff --git a/src/designer/src/components/taskmenu/tablewidgeteditor.ui b/src/designer/src/components/taskmenu/tablewidgeteditor.ui
index 7fbf2e2d8..ad067bae9 100644
--- a/src/designer/src/components/taskmenu/tablewidgeteditor.ui
+++ b/src/designer/src/components/taskmenu/tablewidgeteditor.ui
@@ -1,31 +1,8 @@
<ui version="4.0" >
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+</comment>
<class>qdesigner_internal::TableWidgetEditor</class>
<widget class="QDialog" name="qdesigner_internal::TableWidgetEditor" >
<property name="geometry" >
diff --git a/src/designer/src/components/taskmenu/taskmenu.pri b/src/designer/src/components/taskmenu/taskmenu.pri
deleted file mode 100644
index 7f8ceca96..000000000
--- a/src/designer/src/components/taskmenu/taskmenu.pri
+++ /dev/null
@@ -1,49 +0,0 @@
-INCLUDEPATH += $$PWD \
- ../propertyeditor \
- ../../../../shared/tools/shared/qtpropertybrowser
-
-FORMS += $$PWD/itemlisteditor.ui \
- $$PWD/treewidgeteditor.ui \
- $$PWD/tablewidgeteditor.ui
-
-HEADERS += $$PWD/button_taskmenu.h \
- $$PWD/groupbox_taskmenu.h \
- $$PWD/label_taskmenu.h \
- $$PWD/lineedit_taskmenu.h \
- $$PWD/listwidget_taskmenu.h \
- $$PWD/treewidget_taskmenu.h \
- $$PWD/tablewidget_taskmenu.h \
- $$PWD/combobox_taskmenu.h \
- $$PWD/textedit_taskmenu.h \
- $$PWD/toolbar_taskmenu.h \
- $$PWD/containerwidget_taskmenu.h \
- $$PWD/inplace_editor.h \
- $$PWD/taskmenu_component.h \
- $$PWD/itemlisteditor.h \
- $$PWD/listwidgeteditor.h \
- $$PWD/treewidgeteditor.h \
- $$PWD/tablewidgeteditor.h \
- $$PWD/inplace_widget_helper.h \
- $$PWD/menutaskmenu.h \
- $$PWD/layouttaskmenu.h
-
-SOURCES += $$PWD/button_taskmenu.cpp \
- $$PWD/groupbox_taskmenu.cpp \
- $$PWD/label_taskmenu.cpp \
- $$PWD/lineedit_taskmenu.cpp \
- $$PWD/listwidget_taskmenu.cpp \
- $$PWD/treewidget_taskmenu.cpp \
- $$PWD/tablewidget_taskmenu.cpp \
- $$PWD/combobox_taskmenu.cpp \
- $$PWD/textedit_taskmenu.cpp \
- $$PWD/toolbar_taskmenu.cpp \
- $$PWD/containerwidget_taskmenu.cpp \
- $$PWD/inplace_editor.cpp \
- $$PWD/taskmenu_component.cpp \
- $$PWD/itemlisteditor.cpp \
- $$PWD/listwidgeteditor.cpp \
- $$PWD/treewidgeteditor.cpp \
- $$PWD/tablewidgeteditor.cpp \
- $$PWD/inplace_widget_helper.cpp \
- $$PWD/menutaskmenu.cpp \
- $$PWD/layouttaskmenu.cpp
diff --git a/src/designer/src/components/taskmenu/taskmenu_component.cpp b/src/designer/src/components/taskmenu/taskmenu_component.cpp
index 39ac4bc90..8da00ee87 100644
--- a/src/designer/src/components/taskmenu/taskmenu_component.cpp
+++ b/src/designer/src/components/taskmenu/taskmenu_component.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "taskmenu_component.h"
#include "button_taskmenu.h"
@@ -46,7 +21,9 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+using namespace Qt::StringLiterals;
+
+namespace qdesigner_internal {
TaskMenuComponent::TaskMenuComponent(QDesignerFormEditorInterface *core, QObject *parent)
: QObject(parent),
@@ -55,7 +32,7 @@ TaskMenuComponent::TaskMenuComponent(QDesignerFormEditorInterface *core, QObject
Q_ASSERT(m_core != nullptr);
QExtensionManager *mgr = core->extensionManager();
- const QString taskMenuId = QStringLiteral("QDesignerInternalTaskMenuExtension");
+ const QString taskMenuId = u"QDesignerInternalTaskMenuExtension"_s;
ButtonTaskMenuFactory::registerExtension(mgr, taskMenuId);
CommandLinkButtonTaskMenuFactory::registerExtension(mgr, taskMenuId); // Order!
@@ -87,5 +64,8 @@ QDesignerFormEditorInterface *TaskMenuComponent::core() const
return m_core;
}
+
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/taskmenu/taskmenu_component.h b/src/designer/src/components/taskmenu/taskmenu_component.h
index f57d19848..c97eb3e94 100644
--- a/src/designer/src/components/taskmenu/taskmenu_component.h
+++ b/src/designer/src/components/taskmenu/taskmenu_component.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef TASKMENU_COMPONENT_H
#define TASKMENU_COMPONENT_H
diff --git a/src/designer/src/components/taskmenu/taskmenu_global.h b/src/designer/src/components/taskmenu/taskmenu_global.h
index 7aef031db..a8e6a3dda 100644
--- a/src/designer/src/components/taskmenu/taskmenu_global.h
+++ b/src/designer/src/components/taskmenu/taskmenu_global.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef TASKMENU_GLOBAL_H
#define TASKMENU_GLOBAL_H
diff --git a/src/designer/src/components/taskmenu/textedit_taskmenu.cpp b/src/designer/src/components/taskmenu/textedit_taskmenu.cpp
index 989458392..ed85cf792 100644
--- a/src/designer/src/components/taskmenu/textedit_taskmenu.cpp
+++ b/src/designer/src/components/taskmenu/textedit_taskmenu.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "textedit_taskmenu.h"
@@ -37,12 +12,14 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
TextEditTaskMenu::TextEditTaskMenu(QTextEdit *textEdit, QObject *parent) :
QDesignerTaskMenu(textEdit, parent),
m_format(Qt::RichText),
- m_property(QStringLiteral("html")),
+ m_property(u"html"_s),
m_windowTitle(tr("Edit HTML")),
m_editTextAction(new QAction(tr("Change HTML..."), this))
{
@@ -52,7 +29,7 @@ TextEditTaskMenu::TextEditTaskMenu(QTextEdit *textEdit, QObject *parent) :
TextEditTaskMenu::TextEditTaskMenu(QPlainTextEdit *textEdit, QObject *parent) :
QDesignerTaskMenu(textEdit, parent),
m_format(Qt::PlainText),
- m_property(QStringLiteral("plainText")),
+ m_property(u"plainText"_s),
m_windowTitle(tr("Edit Text")),
m_editTextAction(new QAction(tr("Change Plain Text..."), this))
{
diff --git a/src/designer/src/components/taskmenu/textedit_taskmenu.h b/src/designer/src/components/taskmenu/textedit_taskmenu.h
index 2e50b8ca1..38814f468 100644
--- a/src/designer/src/components/taskmenu/textedit_taskmenu.h
+++ b/src/designer/src/components/taskmenu/textedit_taskmenu.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef TEXTEDIT_TASKMENU_H
#define TEXTEDIT_TASKMENU_H
diff --git a/src/designer/src/components/taskmenu/toolbar_taskmenu.cpp b/src/designer/src/components/taskmenu/toolbar_taskmenu.cpp
index 3fc1b8b4d..3b230704a 100644
--- a/src/designer/src/components/taskmenu/toolbar_taskmenu.cpp
+++ b/src/designer/src/components/taskmenu/toolbar_taskmenu.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "toolbar_taskmenu.h"
#include "qdesigner_toolbar_p.h"
diff --git a/src/designer/src/components/taskmenu/toolbar_taskmenu.h b/src/designer/src/components/taskmenu/toolbar_taskmenu.h
index 3e8d5909b..ea6e1cf51 100644
--- a/src/designer/src/components/taskmenu/toolbar_taskmenu.h
+++ b/src/designer/src/components/taskmenu/toolbar_taskmenu.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef TOOLBAR_TASKMENU_H
#define TOOLBAR_TASKMENU_H
diff --git a/src/designer/src/components/taskmenu/treewidget_taskmenu.cpp b/src/designer/src/components/taskmenu/treewidget_taskmenu.cpp
index 6b4969c52..6ce0b3969 100644
--- a/src/designer/src/components/taskmenu/treewidget_taskmenu.cpp
+++ b/src/designer/src/components/taskmenu/treewidget_taskmenu.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "treewidget_taskmenu.h"
#include "treewidgeteditor.h"
@@ -43,7 +18,7 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+namespace qdesigner_internal {
TreeWidgetTaskMenu::TreeWidgetTaskMenu(QTreeWidget *button, QObject *parent)
: QDesignerTaskMenu(button, parent),
@@ -97,4 +72,6 @@ void TreeWidgetTaskMenu::updateSelection()
m_editor->deleteLater();
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/components/taskmenu/treewidget_taskmenu.h b/src/designer/src/components/taskmenu/treewidget_taskmenu.h
index 9a9c882df..5ad6c34c8 100644
--- a/src/designer/src/components/taskmenu/treewidget_taskmenu.h
+++ b/src/designer/src/components/taskmenu/treewidget_taskmenu.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef TREEWIDGET_TASKMENU_H
#define TREEWIDGET_TASKMENU_H
@@ -64,7 +39,7 @@ private:
QAction *m_editItemsAction;
};
-typedef ExtensionFactory<QDesignerTaskMenuExtension, QTreeWidget, TreeWidgetTaskMenu> TreeWidgetTaskMenuFactory;
+using TreeWidgetTaskMenuFactory = ExtensionFactory<QDesignerTaskMenuExtension, QTreeWidget, TreeWidgetTaskMenu>;
} // namespace qdesigner_internal
QT_END_NAMESPACE
diff --git a/src/designer/src/components/taskmenu/treewidgeteditor.cpp b/src/designer/src/components/taskmenu/treewidgeteditor.cpp
index 5e77939e5..bb89b0da1 100644
--- a/src/designer/src/components/taskmenu/treewidgeteditor.cpp
+++ b/src/designer/src/components/taskmenu/treewidgeteditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "treewidgeteditor.h"
#include <formwindowbase_p.h>
@@ -45,13 +20,15 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
TreeWidgetEditor::TreeWidgetEditor(QDesignerFormWindowInterface *form, QDialog *dialog)
: AbstractItemEditor(form, nullptr), m_updatingBrowser(false)
{
m_columnEditor = new ItemListEditor(form, this);
- m_columnEditor->setObjectName(QStringLiteral("columnEditor"));
+ m_columnEditor->setObjectName(u"columnEditor"_s);
m_columnEditor->setNewItemText(tr("New Column"));
ui.setupUi(dialog);
@@ -62,42 +39,48 @@ TreeWidgetEditor::TreeWidgetEditor(QDesignerFormWindowInterface *form, QDialog *
ui.tabWidget->insertTab(0, m_columnEditor, tr("&Columns"));
ui.tabWidget->setCurrentIndex(0);
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
- ui.newItemButton->setIcon(createIconSet(QString::fromUtf8("plus.png")));
- ui.newSubItemButton->setIcon(createIconSet(QString::fromUtf8("downplus.png")));
- ui.deleteItemButton->setIcon(createIconSet(QString::fromUtf8("minus.png")));
- ui.moveItemUpButton->setIcon(createIconSet(QString::fromUtf8("up.png")));
- ui.moveItemDownButton->setIcon(createIconSet(QString::fromUtf8("down.png")));
- ui.moveItemRightButton->setIcon(createIconSet(QString::fromUtf8("leveldown.png")));
- ui.moveItemLeftButton->setIcon(createIconSet(QString::fromUtf8("levelup.png")));
+ ui.newItemButton->setIcon(createIconSet("plus.png"_L1));
+ ui.newSubItemButton->setIcon(createIconSet("downplus.png"_L1));
+ ui.deleteItemButton->setIcon(createIconSet("minus.png"_L1));
+ ui.moveItemUpButton->setIcon(createIconSet("up.png"_L1));
+ ui.moveItemDownButton->setIcon(createIconSet("down.png"_L1));
+ ui.moveItemRightButton->setIcon(createIconSet("leveldown.png"_L1));
+ ui.moveItemLeftButton->setIcon(createIconSet("levelup.png"_L1));
ui.treeWidget->header()->setSectionsMovable(false);
- connect(ui.newItemButton, &QAbstractButton::clicked, this, &TreeWidgetEditor::on_newItemButton_clicked);
- connect(ui.newSubItemButton, &QAbstractButton::clicked, this, &TreeWidgetEditor::on_newSubItemButton_clicked);
- connect(ui.moveItemUpButton, &QAbstractButton::clicked, this, &TreeWidgetEditor::on_moveItemUpButton_clicked);
- connect(ui.moveItemDownButton, &QAbstractButton::clicked, this, &TreeWidgetEditor::on_moveItemDownButton_clicked);
- connect(ui.moveItemRightButton, &QAbstractButton::clicked, this, &TreeWidgetEditor::on_moveItemRightButton_clicked);
- connect(ui.moveItemLeftButton, &QAbstractButton::clicked, this, &TreeWidgetEditor::on_moveItemLeftButton_clicked);
- connect(ui.deleteItemButton, &QAbstractButton::clicked, this, &TreeWidgetEditor::on_deleteItemButton_clicked);
+ connect(ui.newItemButton, &QAbstractButton::clicked,
+ this, &TreeWidgetEditor::newItemButtonClicked);
+ connect(ui.newSubItemButton, &QAbstractButton::clicked,
+ this, &TreeWidgetEditor::newSubItemButtonClicked);
+ connect(ui.moveItemUpButton, &QAbstractButton::clicked,
+ this, &TreeWidgetEditor::moveItemUpButtonClicked);
+ connect(ui.moveItemDownButton, &QAbstractButton::clicked,
+ this, &TreeWidgetEditor::moveItemDownButtonClicked);
+ connect(ui.moveItemRightButton, &QAbstractButton::clicked,
+ this, &TreeWidgetEditor::moveItemRightButtonClicked);
+ connect(ui.moveItemLeftButton, &QAbstractButton::clicked,
+ this, &TreeWidgetEditor::moveItemLeftButtonClicked);
+ connect(ui.deleteItemButton, &QAbstractButton::clicked,
+ this, &TreeWidgetEditor::deleteItemButtonClicked);
connect(ui.treeWidget, &QTreeWidget::currentItemChanged,
- this, &TreeWidgetEditor::on_treeWidget_currentItemChanged);
+ this, &TreeWidgetEditor::treeWidgetCurrentItemChanged);
connect(ui.treeWidget, &QTreeWidget::itemChanged,
- this, &TreeWidgetEditor::on_treeWidget_itemChanged);
+ this, &TreeWidgetEditor::treeWidgetItemChanged);
connect(m_columnEditor, &ItemListEditor::indexChanged,
- this, &TreeWidgetEditor::on_columnEditor_indexChanged);
+ this, &TreeWidgetEditor::columnEditorIndexChanged);
connect(m_columnEditor, &ItemListEditor::itemChanged,
- this, &TreeWidgetEditor::on_columnEditor_itemChanged);
+ this, &TreeWidgetEditor::columnEditorItemChanged);
connect(m_columnEditor, &ItemListEditor::itemInserted,
- this, &TreeWidgetEditor::on_columnEditor_itemInserted);
+ this, &TreeWidgetEditor::columnEditorItemInserted);
connect(m_columnEditor, &ItemListEditor::itemDeleted,
- this, &TreeWidgetEditor::on_columnEditor_itemDeleted);
+ this, &TreeWidgetEditor::columnEditorItemDeleted);
connect(m_columnEditor, &ItemListEditor::itemMovedUp,
- this, &TreeWidgetEditor::on_columnEditor_itemMovedUp);
+ this, &TreeWidgetEditor::columnEditorItemMovedUp);
connect(m_columnEditor, &ItemListEditor::itemMovedDown,
- this, &TreeWidgetEditor::on_columnEditor_itemMovedDown);
+ this, &TreeWidgetEditor::columnEditorItemMovedDown);
connect(iconCache(), &DesignerIconCache::reloaded, this, &TreeWidgetEditor::cacheReloaded);
}
@@ -108,10 +91,10 @@ static AbstractItemEditor::PropertyDefinition treeHeaderPropList[] = {
{ Qt::ToolTipPropertyRole, 0, DesignerPropertyManager::designerStringTypeId, "toolTip" },
{ Qt::StatusTipPropertyRole, 0, DesignerPropertyManager::designerStringTypeId, "statusTip" },
{ Qt::WhatsThisPropertyRole, 0, DesignerPropertyManager::designerStringTypeId, "whatsThis" },
- { Qt::FontRole, QVariant::Font, nullptr, "font" },
+ { Qt::FontRole, QMetaType::QFont, nullptr, "font" },
{ Qt::TextAlignmentRole, 0, DesignerPropertyManager::designerAlignmentTypeId, "textAlignment" },
- { Qt::BackgroundRole, QVariant::Color, nullptr, "background" },
- { Qt::ForegroundRole, QVariant::Brush, nullptr, "foreground" },
+ { Qt::BackgroundRole, QMetaType::QColor, nullptr, "background" },
+ { Qt::ForegroundRole, QMetaType::QBrush, nullptr, "foreground" },
{ 0, 0, nullptr, nullptr }
};
@@ -121,10 +104,10 @@ static AbstractItemEditor::PropertyDefinition treeItemColumnPropList[] = {
{ Qt::ToolTipPropertyRole, 0, DesignerPropertyManager::designerStringTypeId, "toolTip" },
{ Qt::StatusTipPropertyRole, 0, DesignerPropertyManager::designerStringTypeId, "statusTip" },
{ Qt::WhatsThisPropertyRole, 0, DesignerPropertyManager::designerStringTypeId, "whatsThis" },
- { Qt::FontRole, QVariant::Font, nullptr, "font" },
+ { Qt::FontRole, QMetaType::QFont, nullptr, "font" },
{ Qt::TextAlignmentRole, 0, DesignerPropertyManager::designerAlignmentTypeId, "textAlignment" },
- { Qt::BackgroundRole, QVariant::Brush, nullptr, "background" },
- { Qt::ForegroundRole, QVariant::Brush, nullptr, "foreground" },
+ { Qt::BackgroundRole, QMetaType::QBrush, nullptr, "background" },
+ { Qt::ForegroundRole, QMetaType::QBrush, nullptr, "foreground" },
{ Qt::CheckStateRole, 0, QtVariantPropertyManager::enumTypeId, "checkState" },
{ 0, 0, nullptr, nullptr }
};
@@ -138,7 +121,7 @@ QtVariantProperty *TreeWidgetEditor::setupPropertyGroup(const QString &title, Pr
{
setupProperties(propDefs);
QtVariantProperty *groupProp = m_propertyManager->addProperty(QtVariantPropertyManager::groupTypeId(), title);
- for (QtVariantProperty *prop : qAsConst(m_rootProperties))
+ for (QtVariantProperty *prop : std::as_const(m_rootProperties))
groupProp->addSubProperty(prop);
m_rootProperties.clear();
return groupProp;
@@ -181,7 +164,7 @@ void TreeWidgetEditor::setItemData(int role, const QVariant &v)
const int col = (role == ItemFlagsShadowRole) ? 0 : ui.treeWidget->currentColumn();
QVariant newValue = v;
BoolBlocker block(m_updatingBrowser);
- if (role == Qt::FontRole && newValue.type() == QVariant::Font) {
+ if (role == Qt::FontRole && newValue.metaType().id() == QMetaType::QFont) {
QFont oldFont = ui.treeWidget->font();
QFont newFont = qvariant_cast<QFont>(newValue).resolve(oldFont);
newValue = QVariant::fromValue(newFont);
@@ -202,7 +185,7 @@ int TreeWidgetEditor::defaultItemFlags() const
return flags;
}
-void TreeWidgetEditor::on_newItemButton_clicked()
+void TreeWidgetEditor::newItemButtonClicked()
{
QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
QTreeWidgetItem *newItem = nullptr;
@@ -225,7 +208,7 @@ void TreeWidgetEditor::on_newItemButton_clicked()
ui.treeWidget->editItem(newItem, ui.treeWidget->currentColumn());
}
-void TreeWidgetEditor::on_newSubItemButton_clicked()
+void TreeWidgetEditor::newSubItemButtonClicked()
{
QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
if (!curItem)
@@ -244,7 +227,7 @@ void TreeWidgetEditor::on_newSubItemButton_clicked()
ui.treeWidget->editItem(newItem, ui.treeWidget->currentColumn());
}
-void TreeWidgetEditor::on_deleteItemButton_clicked()
+void TreeWidgetEditor::deleteItemButtonClicked()
{
QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
if (!curItem)
@@ -280,7 +263,7 @@ void TreeWidgetEditor::on_deleteItemButton_clicked()
updateEditor();
}
-void TreeWidgetEditor::on_moveItemUpButton_clicked()
+void TreeWidgetEditor::moveItemUpButtonClicked()
{
QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
if (!curItem)
@@ -310,7 +293,7 @@ void TreeWidgetEditor::on_moveItemUpButton_clicked()
updateEditor();
}
-void TreeWidgetEditor::on_moveItemDownButton_clicked()
+void TreeWidgetEditor::moveItemDownButtonClicked()
{
QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
if (!curItem)
@@ -343,7 +326,7 @@ void TreeWidgetEditor::on_moveItemDownButton_clicked()
updateEditor();
}
-void TreeWidgetEditor::on_moveItemLeftButton_clicked()
+void TreeWidgetEditor::moveItemLeftButtonClicked()
{
QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
if (!curItem)
@@ -368,7 +351,7 @@ void TreeWidgetEditor::on_moveItemLeftButton_clicked()
updateEditor();
}
-void TreeWidgetEditor::on_moveItemRightButton_clicked()
+void TreeWidgetEditor::moveItemRightButtonClicked()
{
QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
if (!curItem)
@@ -413,13 +396,13 @@ void TreeWidgetEditor::setPropertyBrowserVisible(bool v)
m_propertyBrowser->setVisible(v);
}
-void TreeWidgetEditor::on_treeWidget_currentItemChanged()
+void TreeWidgetEditor::treeWidgetCurrentItemChanged()
{
m_columnEditor->setCurrentIndex(ui.treeWidget->currentColumn());
updateEditor();
}
-void TreeWidgetEditor::on_treeWidget_itemChanged(QTreeWidgetItem *item, int column)
+void TreeWidgetEditor::treeWidgetItemChanged(QTreeWidgetItem *item, int column)
{
if (m_updatingBrowser)
return;
@@ -432,13 +415,13 @@ void TreeWidgetEditor::on_treeWidget_itemChanged(QTreeWidgetItem *item, int colu
updateBrowser();
}
-void TreeWidgetEditor::on_columnEditor_indexChanged(int idx)
+void TreeWidgetEditor::columnEditorIndexChanged(int idx)
{
if (QTreeWidgetItem *item = ui.treeWidget->currentItem())
ui.treeWidget->setCurrentItem(item, idx);
}
-void TreeWidgetEditor::on_columnEditor_itemChanged(int idx, int role, const QVariant &v)
+void TreeWidgetEditor::columnEditorItemChanged(int idx, int role, const QVariant &v)
{
if (role == Qt::DisplayPropertyRole)
ui.treeWidget->headerItem()->setData(idx, Qt::EditRole, qvariant_cast<PropertySheetStringValue>(v).value());
@@ -561,7 +544,7 @@ void TreeWidgetEditor::moveColumnsRight(int fromColumn, int toColumn)
moveColumns(toColumn, fromColumn, 1);
}
-void TreeWidgetEditor::on_columnEditor_itemInserted(int idx)
+void TreeWidgetEditor::columnEditorItemInserted(int idx)
{
int columnCount = ui.treeWidget->columnCount();
ui.treeWidget->setColumnCount(columnCount + 1);
@@ -571,7 +554,7 @@ void TreeWidgetEditor::on_columnEditor_itemInserted(int idx)
updateEditor();
}
-void TreeWidgetEditor::on_columnEditor_itemDeleted(int idx)
+void TreeWidgetEditor::columnEditorItemDeleted(int idx)
{
closeEditors();
@@ -585,7 +568,7 @@ void TreeWidgetEditor::on_columnEditor_itemDeleted(int idx)
updateEditor();
}
-void TreeWidgetEditor::on_columnEditor_itemMovedUp(int idx)
+void TreeWidgetEditor::columnEditorItemMovedUp(int idx)
{
moveColumnsRight(idx - 1, idx);
@@ -593,7 +576,7 @@ void TreeWidgetEditor::on_columnEditor_itemMovedUp(int idx)
updateEditor();
}
-void TreeWidgetEditor::on_columnEditor_itemMovedDown(int idx)
+void TreeWidgetEditor::columnEditorItemMovedDown(int idx)
{
moveColumnsLeft(idx, idx + 1);
@@ -618,7 +601,6 @@ void TreeWidgetEditor::cacheReloaded()
TreeWidgetEditorDialog::TreeWidgetEditorDialog(QDesignerFormWindowInterface *form, QWidget *parent) :
QDialog(parent), m_editor(form, this)
{
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
}
TreeWidgetContents TreeWidgetEditorDialog::fillContentsFromTreeWidget(QTreeWidget *treeWidget)
diff --git a/src/designer/src/components/taskmenu/treewidgeteditor.h b/src/designer/src/components/taskmenu/treewidgeteditor.h
index 9b1a607e4..b2d306f0a 100644
--- a/src/designer/src/components/taskmenu/treewidgeteditor.h
+++ b/src/designer/src/components/taskmenu/treewidgeteditor.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef TREEWIDGETEDITOR_H
#define TREEWIDGETEDITOR_H
@@ -55,24 +30,24 @@ public:
TreeWidgetContents contents() const;
private slots:
- void on_newItemButton_clicked();
- void on_newSubItemButton_clicked();
- void on_deleteItemButton_clicked();
- void on_moveItemUpButton_clicked();
- void on_moveItemDownButton_clicked();
- void on_moveItemRightButton_clicked();
- void on_moveItemLeftButton_clicked();
-
- void on_treeWidget_currentItemChanged();
- void on_treeWidget_itemChanged(QTreeWidgetItem *item, int column);
-
- void on_columnEditor_indexChanged(int idx);
- void on_columnEditor_itemChanged(int idx, int role, const QVariant &v);
-
- void on_columnEditor_itemInserted(int idx);
- void on_columnEditor_itemDeleted(int idx);
- void on_columnEditor_itemMovedUp(int idx);
- void on_columnEditor_itemMovedDown(int idx);
+ void newItemButtonClicked();
+ void newSubItemButtonClicked();
+ void deleteItemButtonClicked();
+ void moveItemUpButtonClicked();
+ void moveItemDownButtonClicked();
+ void moveItemRightButtonClicked();
+ void moveItemLeftButtonClicked();
+
+ void treeWidgetCurrentItemChanged();
+ void treeWidgetItemChanged(QTreeWidgetItem *item, int column);
+
+ void columnEditorIndexChanged(int idx);
+ void columnEditorItemChanged(int idx, int role, const QVariant &v);
+
+ void columnEditorItemInserted(int idx);
+ void columnEditorItemDeleted(int idx);
+ void columnEditorItemMovedUp(int idx);
+ void columnEditorItemMovedDown(int idx);
void togglePropertyBrowser();
void cacheReloaded();
diff --git a/src/designer/src/components/taskmenu/treewidgeteditor.ui b/src/designer/src/components/taskmenu/treewidgeteditor.ui
index ea72a444b..688b2f45a 100644
--- a/src/designer/src/components/taskmenu/treewidgeteditor.ui
+++ b/src/designer/src/components/taskmenu/treewidgeteditor.ui
@@ -1,31 +1,8 @@
<ui version="4.0" >
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+</comment>
<class>qdesigner_internal::TreeWidgetEditor</class>
<widget class="QDialog" name="qdesigner_internal::TreeWidgetEditor" >
<property name="geometry" >
diff --git a/src/designer/src/components/widgetbox/widgetbox.cpp b/src/designer/src/components/widgetbox/widgetbox.cpp
index bf42f2048..7294799f9 100644
--- a/src/designer/src/components/widgetbox/widgetbox.cpp
+++ b/src/designer/src/components/widgetbox/widgetbox.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "widgetbox.h"
#include "widgetboxtreewidget.h"
@@ -110,7 +85,7 @@ WidgetBox::WidgetBox(QDesignerFormEditorInterface *core, QWidget *parent, Qt::Wi
l->addWidget(toolBar);
// View
- connect(m_view, &WidgetBoxTreeWidget::pressed,
+ connect(m_view, &WidgetBoxTreeWidget::widgetBoxPressed,
this, &WidgetBox::handleMousePress);
l->addWidget(m_view);
diff --git a/src/designer/src/components/widgetbox/widgetbox.h b/src/designer/src/components/widgetbox/widgetbox.h
index 27e1b461a..cf43b63b4 100644
--- a/src/designer/src/components/widgetbox/widgetbox.h
+++ b/src/designer/src/components/widgetbox/widgetbox.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef WIDGETBOX_H
#define WIDGETBOX_H
diff --git a/src/designer/src/components/widgetbox/widgetbox.pri b/src/designer/src/components/widgetbox/widgetbox.pri
deleted file mode 100644
index dd8ad002e..000000000
--- a/src/designer/src/components/widgetbox/widgetbox.pri
+++ /dev/null
@@ -1,14 +0,0 @@
-
-INCLUDEPATH += $$PWD
-
-SOURCES += $$PWD/widgetboxcategorylistview.cpp \
- $$PWD/widgetboxtreewidget.cpp \
- $$PWD/widgetbox.cpp \
- $$PWD/widgetbox_dnditem.cpp
-HEADERS += $$PWD/widgetboxcategorylistview.h \
- $$PWD/widgetboxtreewidget.h \
- $$PWD/widgetbox.h \
- $$PWD/widgetbox_global.h \
- $$PWD/widgetbox_dnditem.h
-
-RESOURCES += $$PWD/widgetbox.qrc
diff --git a/src/designer/src/components/widgetbox/widgetbox.qrc b/src/designer/src/components/widgetbox/widgetbox.qrc
deleted file mode 100644
index 2cac8a95e..000000000
--- a/src/designer/src/components/widgetbox/widgetbox.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
- <qresource prefix="/qt-project.org/widgetbox">
- <file>widgetbox.xml</file>
- </qresource>
-</RCC>
diff --git a/src/designer/src/components/widgetbox/widgetbox.xml b/src/designer/src/components/widgetbox/widgetbox.xml
index 802c28f67..4cb29cd20 100644
--- a/src/designer/src/components/widgetbox/widgetbox.xml
+++ b/src/designer/src/components/widgetbox/widgetbox.xml
@@ -1,31 +1,7 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--/***************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************-->
+<!--
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+-->
<widgetbox version="4.2">
<category name="Layouts">
diff --git a/src/designer/src/components/widgetbox/widgetbox_dnditem.cpp b/src/designer/src/components/widgetbox/widgetbox_dnditem.cpp
index c44fa4169..afbfc0567 100644
--- a/src/designer/src/components/widgetbox/widgetbox_dnditem.cpp
+++ b/src/designer/src/components/widgetbox/widgetbox_dnditem.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "widgetbox_dnditem.h"
@@ -47,6 +22,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
/*******************************************************************************
** WidgetBoxResource
@@ -83,7 +60,7 @@ WidgetBoxResource::WidgetBoxResource(QDesignerFormEditorInterface *core) :
QWidget *WidgetBoxResource::createWidget(const QString &widgetName, QWidget *parentWidget, const QString &name)
{
- if (widgetName == QStringLiteral("Spacer")) {
+ if (widgetName == "Spacer"_L1) {
Spacer *spacer = new Spacer(parentWidget);
spacer->setObjectName(name);
return spacer;
@@ -124,9 +101,8 @@ void WidgetBoxResource::createCustomWidgets(DomCustomWidgets *dc)
static QSize geometryProp(const DomWidget *dw)
{
const auto &prop_list = dw->elementProperty();
- const QString geometry = QStringLiteral("geometry");
for (DomProperty *prop : prop_list) {
- if (prop->attributeName() != geometry)
+ if (prop->attributeName() != "geometry"_L1)
continue;
DomRect *dr = prop->elementRect();
if (dr == nullptr)
diff --git a/src/designer/src/components/widgetbox/widgetbox_dnditem.h b/src/designer/src/components/widgetbox/widgetbox_dnditem.h
index 1a5e3bade..f8f25d58e 100644
--- a/src/designer/src/components/widgetbox/widgetbox_dnditem.h
+++ b/src/designer/src/components/widgetbox/widgetbox_dnditem.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef WIDGETBOX_DNDITEM_H
#define WIDGETBOX_DNDITEM_H
diff --git a/src/designer/src/components/widgetbox/widgetbox_global.h b/src/designer/src/components/widgetbox/widgetbox_global.h
index 06f0e2b7c..68ebc3554 100644
--- a/src/designer/src/components/widgetbox/widgetbox_global.h
+++ b/src/designer/src/components/widgetbox/widgetbox_global.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef WIDGETBOX_GLOBAL_H
#define WIDGETBOX_GLOBAL_H
diff --git a/src/designer/src/components/widgetbox/widgetboxcategorylistview.cpp b/src/designer/src/components/widgetbox/widgetboxcategorylistview.cpp
index 9f44c5d00..1e90ef08e 100644
--- a/src/designer/src/components/widgetbox/widgetboxcategorylistview.cpp
+++ b/src/designer/src/components/widgetbox/widgetboxcategorylistview.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "widgetboxcategorylistview.h"
@@ -46,13 +21,15 @@
#include <QtCore/qtextstream.h>
#include <QtCore/qregularexpression.h>
-static const char *widgetElementC = "widget";
-static const char *nameAttributeC = "name";
-static const char *uiOpeningTagC = "<ui>";
-static const char *uiClosingTagC = "</ui>";
-
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
+static constexpr auto widgetElementC = "widget"_L1;
+static constexpr auto nameAttributeC = "name"_L1;
+static constexpr auto uiOpeningTagC = "<ui>"_L1;
+static constexpr auto uiClosingTagC = "</ui>"_L1;
+
enum { FilterRole = Qt::UserRole + 11 };
static QString domToString(const QDomElement &elt)
@@ -130,10 +107,8 @@ public:
bool removeCustomWidgets();
private:
- using WidgetBoxCategoryEntrys = QList<WidgetBoxCategoryEntry>;
-
QDesignerFormEditorInterface *m_core;
- WidgetBoxCategoryEntrys m_items;
+ QList<WidgetBoxCategoryEntry> m_items;
QListView::ViewMode m_viewMode;
};
@@ -163,8 +138,7 @@ void WidgetBoxCategoryModel::setViewMode(QListView::ViewMode vm)
int WidgetBoxCategoryModel::indexOfWidget(const QString &name)
{
- const int count = m_items.size();
- for (int i = 0; i < count; i++)
+ for (qsizetype i = 0, count = m_items.size(); i < count; ++i)
if (m_items.at(i).widget.name() == name)
return i;
return -1;
@@ -173,9 +147,8 @@ int WidgetBoxCategoryModel::indexOfWidget(const QString &name)
QDesignerWidgetBoxInterface::Category WidgetBoxCategoryModel::category() const
{
QDesignerWidgetBoxInterface::Category rc;
- const WidgetBoxCategoryEntrys::const_iterator cend = m_items.constEnd();
- for (WidgetBoxCategoryEntrys::const_iterator it = m_items.constBegin(); it != cend; ++it)
- rc.addWidget(it->widget);
+ for (const auto &c : m_items)
+ rc.addWidget(c.widget);
return rc;
}
@@ -184,7 +157,7 @@ bool WidgetBoxCategoryModel::removeCustomWidgets()
// Typically, we are a whole category of custom widgets, so, remove all
// and do reset.
bool changed = false;
- for (WidgetBoxCategoryEntrys::iterator it = m_items.begin(); it != m_items.end(); )
+ for (auto it = m_items.begin(); it != m_items.end(); )
if (it->widget.type() == QDesignerWidgetBoxInterface::Widget::Custom) {
if (!changed)
beginResetModel();
@@ -200,21 +173,21 @@ bool WidgetBoxCategoryModel::removeCustomWidgets()
void WidgetBoxCategoryModel::addWidget(const QDesignerWidgetBoxInterface::Widget &widget, const QIcon &icon,bool editable)
{
- // build item. Filter on name + class name if it is different and not a layout.
+ static const QRegularExpression classNameRegExp(QStringLiteral("<widget +class *= *\"([^\"]+)\""));
+ Q_ASSERT(classNameRegExp.isValid());
+ const auto match = classNameRegExp.match(widget.domXml());
+ const QString className = match.hasMatch() ? match.captured(1) : QString{};
+
+ // Filter on name + class name if it is different and not a layout.
QString filter = widget.name();
- if (!filter.contains(QStringLiteral("Layout"))) {
- static const QRegularExpression classNameRegExp(QStringLiteral("<widget +class *= *\"([^\"]+)\""));
- Q_ASSERT(classNameRegExp.isValid());
- const QRegularExpressionMatch match = classNameRegExp.match(widget.domXml());
- if (match.hasMatch()) {
- const QString className = match.captured(1);
- if (!filter.contains(className))
- filter += className;
- }
- }
+ if (!className.isEmpty() && !filter.contains("Layout"_L1) && !filter.contains(className))
+ filter += className;
+
WidgetBoxCategoryEntry item(widget, filter, icon, editable);
const QDesignerWidgetDataBaseInterface *db = m_core->widgetDataBase();
- const int dbIndex = db->indexOfClassName(widget.name());
+ int dbIndex = className.isEmpty() ? -1 : db->indexOfClassName(className);
+ if (dbIndex == -1)
+ dbIndex = db->indexOfClassName(widget.name());
if (dbIndex != -1) {
const QDesignerWidgetDataBaseItemInterface *dbItem = db->item(dbIndex);
const QString toolTip = dbItem->toolTip();
@@ -251,10 +224,8 @@ QVariant WidgetBoxCategoryModel::data(const QModelIndex &index, int role) const
return QVariant(item.toolTip);
// Icon mode tooltip should contain the class name
QString tt = item.widget.name();
- if (!item.toolTip.isEmpty()) {
- tt += QLatin1Char('\n');
- tt += item.toolTip;
- }
+ if (!item.toolTip.isEmpty())
+ tt += u'\n' + item.toolTip;
return QVariant(tt);
}
@@ -269,17 +240,19 @@ QVariant WidgetBoxCategoryModel::data(const QModelIndex &index, int role) const
bool WidgetBoxCategoryModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
const int row = index.row();
- if (role != Qt::EditRole || row < 0 || row >= m_items.size() || value.type() != QVariant::String)
+ if (role != Qt::EditRole || row < 0 || row >= m_items.size()
+ || value.metaType().id() != QMetaType::QString) {
return false;
+ }
// Set name and adapt Xml
WidgetBoxCategoryEntry &item = m_items[row];
const QString newName = value.toString();
item.widget.setName(newName);
const QDomDocument doc = stringToDom(WidgetBoxCategoryListView::widgetDomXml(item.widget));
- QDomElement widget_elt = doc.firstChildElement(QLatin1String(widgetElementC));
+ QDomElement widget_elt = doc.firstChildElement(widgetElementC);
if (!widget_elt.isNull()) {
- widget_elt.setAttribute(QLatin1String(nameAttributeC), newName);
+ widget_elt.setAttribute(nameAttributeC, newName);
item.widget.setDomXml(domToString(widget_elt));
}
emit dataChanged(index, index);
@@ -349,7 +322,7 @@ QWidget *WidgetBoxCategoryEntryDelegate::createEditor(QWidget *parent,
{
QWidget *result = QItemDelegate::createEditor(parent, option, index);
if (QLineEdit *line_edit = qobject_cast<QLineEdit*>(result)) {
- static const QRegularExpression re(QStringLiteral("^[_a-zA-Z][_a-zA-Z0-9]*$"));
+ static const QRegularExpression re(u"^[_a-zA-Z][_a-zA-Z0-9]*$"_s);
Q_ASSERT(re.isValid());
line_edit->setValidator(new QRegularExpressionValidator(re, line_edit));
}
@@ -407,7 +380,7 @@ void WidgetBoxCategoryListView::slotPressed(const QModelIndex &index)
const QDesignerWidgetBoxInterface::Widget wgt = m_model->widgetAt(m_proxyModel->mapToSource(index));
if (wgt.isNull())
return;
- emit pressed(wgt.name(), widgetDomXml(wgt), QCursor::pos());
+ emit widgetBoxPressed(wgt.name(), widgetDomXml(wgt), QCursor::pos());
}
void WidgetBoxCategoryListView::removeCurrentItem()
@@ -473,13 +446,8 @@ QString WidgetBoxCategoryListView::widgetDomXml(const QDesignerWidgetBoxInterfac
{
QString domXml = widget.domXml();
- if (domXml.isEmpty()) {
- domXml = QLatin1String(uiOpeningTagC);
- domXml += QStringLiteral("<widget class=\"");
- domXml += widget.name();
- domXml += QStringLiteral("\"/>");
- domXml += QLatin1String(uiClosingTagC);
- }
+ if (domXml.isEmpty())
+ domXml = uiOpeningTagC + "<widget class=\""_L1 + widget.name() +"\"/>"_L1 + uiClosingTagC;
return domXml;
}
diff --git a/src/designer/src/components/widgetbox/widgetboxcategorylistview.h b/src/designer/src/components/widgetbox/widgetboxcategorylistview.h
index 28db852f6..9223a2f49 100644
--- a/src/designer/src/components/widgetbox/widgetboxcategorylistview.h
+++ b/src/designer/src/components/widgetbox/widgetboxcategorylistview.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef WIDGETBOXCATEGORYLISTVIEW_H
#define WIDGETBOXCATEGORYLISTVIEW_H
@@ -79,7 +54,7 @@ public:
signals:
void scratchPadChanged();
- void pressed(const QString &name, const QString &xml, const QPoint &globalPos);
+ void widgetBoxPressed(const QString &name, const QString &xml, const QPoint &globalPos);
void itemRemoved();
void lastItemRemoved();
diff --git a/src/designer/src/components/widgetbox/widgetboxtreewidget.cpp b/src/designer/src/components/widgetbox/widgetboxtreewidget.cpp
index 4fe5881b6..4dca4a1d1 100644
--- a/src/designer/src/components/widgetbox/widgetboxtreewidget.cpp
+++ b/src/designer/src/components/widgetbox/widgetboxtreewidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "widgetboxtreewidget.h"
#include "widgetboxcategorylistview.h"
@@ -46,6 +21,7 @@
#include <QtWidgets/qapplication.h>
#include <QtWidgets/qheaderview.h>
#include <QtWidgets/qmenu.h>
+#include <QtWidgets/qscrollbar.h>
#include <QtWidgets/qtreewidget.h>
#include <QtGui/qaction.h>
@@ -56,23 +32,25 @@
#include <QtCore/qtimer.h>
#include <QtCore/qdebug.h>
-static const char *widgetBoxRootElementC = "widgetbox";
-static const char *widgetElementC = "widget";
-static const char *uiElementC = "ui";
-static const char *categoryElementC = "category";
-static const char *categoryEntryElementC = "categoryentry";
-static const char *nameAttributeC = "name";
-static const char *typeAttributeC = "type";
-static const char *iconAttributeC = "icon";
-static const char *defaultTypeValueC = "default";
-static const char *customValueC = "custom";
-static const char *iconPrefixC = "__qt_icon__";
-static const char *scratchPadValueC = "scratchpad";
-static const char *invisibleNameC = "[invisible]";
+QT_BEGIN_NAMESPACE
-enum TopLevelRole { NORMAL_ITEM, SCRATCHPAD_ITEM, CUSTOM_ITEM };
+using namespace Qt::StringLiterals;
+
+static constexpr auto widgetBoxRootElementC = "widgetbox"_L1;
+static constexpr auto wbWidgetElementC = "widget"_L1;
+static constexpr auto uiElementC = "ui"_L1;
+static constexpr auto categoryElementC = "category"_L1;
+static constexpr auto categoryEntryElementC = "categoryentry"_L1;
+static constexpr auto wbNameAttributeC = "name"_L1;
+static constexpr auto typeAttributeC = "type"_L1;
+static constexpr auto iconAttributeC = "icon"_L1;
+static constexpr auto defaultTypeValueC = "default"_L1;
+static constexpr auto customValueC = "custom"_L1;
+static constexpr auto iconPrefixC = "__qt_icon__"_L1;
+static constexpr auto scratchPadValueC = "scratchpad"_L1;
+static constexpr auto invisibleNameC = "[invisible]"_L1;
-QT_BEGIN_NAMESPACE
+enum TopLevelRole { NORMAL_ITEM, SCRATCHPAD_ITEM, CUSTOM_ITEM };
static void setTopLevelRole(TopLevelRole tlr, QTreeWidgetItem *item)
{
@@ -112,8 +90,8 @@ QIcon WidgetBoxTreeWidget::iconForWidget(const QString &iconName) const
if (iconName.isEmpty())
return qdesigner_internal::qtLogoIcon();
- if (iconName.startsWith(QLatin1String(iconPrefixC))) {
- const IconCache::const_iterator it = m_pluginIcons.constFind(iconName);
+ if (iconName.startsWith(iconPrefixC)) {
+ const auto it = m_pluginIcons.constFind(iconName);
if (it != m_pluginIcons.constEnd())
return it.value();
}
@@ -130,9 +108,9 @@ WidgetBoxCategoryListView *WidgetBoxTreeWidget::categoryViewAt(int idx) const
return rc;
}
-static const char widgetBoxSettingsGroupC[] = "WidgetBox";
-static const char widgetBoxExpandedKeyC[] = "Closed categories";
-static const char widgetBoxViewModeKeyC[] = "View mode";
+static constexpr auto widgetBoxSettingsGroupC = "WidgetBox"_L1;
+static constexpr auto widgetBoxExpandedKeyC = "Closed categories"_L1;
+static constexpr auto widgetBoxViewModeKeyC = "View mode"_L1;
void WidgetBoxTreeWidget::saveExpandedState() const
{
@@ -145,9 +123,9 @@ void WidgetBoxTreeWidget::saveExpandedState() const
}
}
QDesignerSettingsInterface *settings = m_core->settingsManager();
- settings->beginGroup(QLatin1String(widgetBoxSettingsGroupC));
- settings->setValue(QLatin1String(widgetBoxExpandedKeyC), closedCategories);
- settings->setValue(QLatin1String(widgetBoxViewModeKeyC), m_iconMode);
+ settings->beginGroup(widgetBoxSettingsGroupC);
+ settings->setValue(widgetBoxExpandedKeyC, closedCategories);
+ settings->setValue(widgetBoxViewModeKeyC, m_iconMode);
settings->endGroup();
}
@@ -155,10 +133,10 @@ void WidgetBoxTreeWidget::restoreExpandedState()
{
using StringSet = QSet<QString>;
QDesignerSettingsInterface *settings = m_core->settingsManager();
- const QString groupKey = QLatin1String(widgetBoxSettingsGroupC) + QLatin1Char('/');
- m_iconMode = settings->value(groupKey + QLatin1String(widgetBoxViewModeKeyC)).toBool();
+ const QString groupKey = widgetBoxSettingsGroupC + u'/';
+ m_iconMode = settings->value(groupKey + widgetBoxViewModeKeyC).toBool();
updateViewMode();
- const auto &closedCategoryList = settings->value(groupKey + QLatin1String(widgetBoxExpandedKeyC), QStringList()).toStringList();
+ const auto &closedCategoryList = settings->value(groupKey + widgetBoxExpandedKeyC, QStringList()).toStringList();
const StringSet closedCategories(closedCategoryList.cbegin(), closedCategoryList.cend());
expandAll();
if (closedCategories.isEmpty())
@@ -252,8 +230,8 @@ WidgetBoxCategoryListView *WidgetBoxTreeWidget::addCategoryView(QTreeWidgetItem
categoryView->setViewMode(iconMode ? QListView::IconMode : QListView::ListMode);
connect(categoryView, &WidgetBoxCategoryListView::scratchPadChanged,
this, &WidgetBoxTreeWidget::slotSave);
- connect(categoryView, &WidgetBoxCategoryListView::pressed,
- this, &WidgetBoxTreeWidget::pressed);
+ connect(categoryView, &WidgetBoxCategoryListView::widgetBoxPressed,
+ this, &WidgetBoxTreeWidget::widgetBoxPressed);
connect(categoryView, &WidgetBoxCategoryListView::itemRemoved,
this, &WidgetBoxTreeWidget::slotScratchPadItemDeleted);
connect(categoryView, &WidgetBoxCategoryListView::lastItemRemoved,
@@ -304,7 +282,15 @@ bool WidgetBoxTreeWidget::load(QDesignerWidgetBox::LoadMode loadMode)
return false;
const QString contents = QString::fromUtf8(f.readAll());
- return loadContents(contents);
+ if (!loadContents(contents))
+ return false;
+ if (topLevelItemCount() > 0) {
+ // QTBUG-93099: Set the single step to the item height to have some
+ // size-related value.
+ const auto itemHeight = visualItemRect(topLevelItem(0)).height();
+ verticalScrollBar()->setSingleStep(itemHeight);
+ }
+ return true;
}
bool WidgetBoxTreeWidget::loadContents(const QString &contents)
@@ -316,7 +302,7 @@ bool WidgetBoxTreeWidget::loadContents(const QString &contents)
return false;
}
- for (const Category &cat : qAsConst(cat_list))
+ for (const Category &cat : std::as_const(cat_list))
addCategory(cat);
addCustomCategories(false);
@@ -336,9 +322,8 @@ void WidgetBoxTreeWidget::addCustomCategories(bool replace)
}
// re-add
const CategoryList customList = loadCustomCategoryList();
- const CategoryList::const_iterator cend = customList.constEnd();
- for (CategoryList::const_iterator it = customList.constBegin(); it != cend; ++it)
- addCategory(*it);
+ for (const auto &c : customList)
+ addCategory(c);
}
static inline QString msgXmlError(const QString &fileName, const QXmlStreamReader &r)
@@ -368,33 +353,33 @@ bool WidgetBoxTreeWidget::readCategories(const QString &fileName, const QString
switch (reader.readNext()) {
case QXmlStreamReader::StartElement: {
const auto tag = reader.name();
- if (tag == QLatin1String(widgetBoxRootElementC)) {
+ if (tag == widgetBoxRootElementC) {
//<widgetbox version="4.5">
continue;
}
- if (tag == QLatin1String(categoryElementC)) {
+ if (tag == categoryElementC) {
// <category name="Layouts">
const QXmlStreamAttributes attributes = reader.attributes();
- const QString categoryName = attributes.value(QLatin1String(nameAttributeC)).toString();
- if (categoryName == QLatin1String(invisibleNameC)) {
+ const QString categoryName = attributes.value(wbNameAttributeC).toString();
+ if (categoryName == invisibleNameC) {
ignoreEntries = true;
} else {
Category category(categoryName);
- if (attributes.value(QLatin1String(typeAttributeC)) == QLatin1String(scratchPadValueC))
+ if (attributes.value(typeAttributeC) == scratchPadValueC)
category.setType(Category::Scratchpad);
cats->push_back(category);
}
continue;
}
- if (tag == QLatin1String(categoryEntryElementC)) {
+ if (tag == categoryEntryElementC) {
// <categoryentry name="Vertical Layout" icon="win/editvlayout.png" type="default">
if (!ignoreEntries) {
QXmlStreamAttributes attr = reader.attributes();
- const QString widgetName = attr.value(QLatin1String(nameAttributeC)).toString();
- const QString widgetIcon = attr.value(QLatin1String(iconAttributeC)).toString();
+ const QString widgetName = attr.value(wbNameAttributeC).toString();
+ const QString widgetIcon = attr.value(iconAttributeC).toString();
const WidgetBoxTreeWidget::Widget::Type widgetType =
- attr.value(QLatin1String(typeAttributeC)).toString()
- == QLatin1String(customValueC) ?
+ attr.value(typeAttributeC).toString()
+ == customValueC ?
WidgetBoxTreeWidget::Widget::Custom :
WidgetBoxTreeWidget::Widget::Default;
@@ -413,14 +398,14 @@ bool WidgetBoxTreeWidget::readCategories(const QString &fileName, const QString
}
case QXmlStreamReader::EndElement: {
const auto tag = reader.name();
- if (tag == QLatin1String(widgetBoxRootElementC)) {
+ if (tag == widgetBoxRootElementC) {
continue;
}
- if (tag == QLatin1String(categoryElementC)) {
+ if (tag == categoryElementC) {
ignoreEntries = false;
continue;
}
- if (tag == QLatin1String(categoryEntryElementC)) {
+ if (tag == categoryEntryElementC) {
continue;
}
break;
@@ -474,10 +459,10 @@ bool WidgetBoxTreeWidget::readWidget(Widget *w, const QString &xml, QXmlStreamRe
if (nesting++ == 0) {
// First element must be <ui> or (legacy) <widget>
const auto name = r.name();
- if (name == QLatin1String(uiElementC)) {
+ if (name == uiElementC) {
startTagPosition = currentPosition;
} else {
- if (name == QLatin1String(widgetElementC)) {
+ if (name == wbWidgetElementC) {
startTagPosition = currentPosition;
parsedWidgetTag = true;
} else {
@@ -487,7 +472,7 @@ bool WidgetBoxTreeWidget::readWidget(Widget *w, const QString &xml, QXmlStreamRe
}
} else {
// We are within <ui> looking for the first <widget> tag
- if (!parsedWidgetTag && r.name() == QLatin1String(widgetElementC)) {
+ if (!parsedWidgetTag && r.name() == wbWidgetElementC) {
parsedWidgetTag = true;
}
}
@@ -514,23 +499,22 @@ bool WidgetBoxTreeWidget::readWidget(Widget *w, const QString &xml, QXmlStreamRe
}
// Oddity: Startposition is 1 off
QString widgetXml = xml.mid(startTagPosition, endTagPosition - startTagPosition);
- const QChar lessThan = QLatin1Char('<');
- if (!widgetXml.startsWith(lessThan))
- widgetXml.prepend(lessThan);
+ if (!widgetXml.startsWith(u'<'))
+ widgetXml.prepend(u'<');
w->setDomXml(widgetXml);
return true;
}
void WidgetBoxTreeWidget::writeCategories(QXmlStreamWriter &writer, const CategoryList &cat_list) const
{
- const QString widgetbox = QLatin1String(widgetBoxRootElementC);
- const QString name = QLatin1String(nameAttributeC);
- const QString type = QLatin1String(typeAttributeC);
- const QString icon = QLatin1String(iconAttributeC);
- const QString defaultType = QLatin1String(defaultTypeValueC);
- const QString category = QLatin1String(categoryElementC);
- const QString categoryEntry = QLatin1String(categoryEntryElementC);
- const QString iconPrefix = QLatin1String(iconPrefixC);
+ const QString widgetbox = widgetBoxRootElementC;
+ const QString name = wbNameAttributeC;
+ const QString type = typeAttributeC;
+ const QString icon = iconAttributeC;
+ const QString defaultType = defaultTypeValueC;
+ const QString category = categoryElementC;
+ const QString categoryEntry = categoryEntryElementC;
+ const QString iconPrefix = iconPrefixC;
//
// <widgetbox>
@@ -552,7 +536,7 @@ void WidgetBoxTreeWidget::writeCategories(QXmlStreamWriter &writer, const Catego
writer.writeStartElement(category);
writer.writeAttribute(name, cat.name());
if (cat.type() == Category::Scratchpad)
- writer.writeAttribute(type, QLatin1String(scratchPadValueC));
+ writer.writeAttribute(type, scratchPadValueC);
const int widgetCount = cat.widgetCount();
for (int i = 0; i < widgetCount; ++i) {
@@ -611,8 +595,8 @@ WidgetBoxTreeWidget::CategoryList WidgetBoxTreeWidget::loadCustomCategoryList()
static const QString customCatName = tr("Custom Widgets");
- const QString invisible = QLatin1String(invisibleNameC);
- const QString iconPrefix = QLatin1String(iconPrefixC);
+ const QString invisible = invisibleNameC;
+ const QString iconPrefix = iconPrefixC;
for (QDesignerCustomWidgetInterface *c : customWidgets) {
const QString dom_xml = c->domXml();
@@ -954,13 +938,15 @@ void WidgetBoxTreeWidget::dropWidgets(const QList<QDesignerDnDItemInterface*> &i
if (added) {
save();
- QApplication::setActiveWindow(this);
+ activateWindow();
// Is the new item visible in filtered mode?
const WidgetBoxCategoryListView::AccessMode am = WidgetBoxCategoryListView::FilteredAccess;
if (const int count = categoryView->count(am))
categoryView->setCurrentItem(am, count - 1);
categoryView->adjustSize(); // XXX
adjustSubListSize(scratch_item);
+ doItemsLayout();
+ scrollToItem(scratch_item, PositionAtTop);
}
}
diff --git a/src/designer/src/components/widgetbox/widgetboxtreewidget.h b/src/designer/src/components/widgetbox/widgetboxtreewidget.h
index 0961e658d..f55708105 100644
--- a/src/designer/src/components/widgetbox/widgetboxtreewidget.h
+++ b/src/designer/src/components/widgetbox/widgetboxtreewidget.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef WIDGETBOXTREEWIDGET_H
#define WIDGETBOXTREEWIDGET_H
@@ -82,7 +57,8 @@ public:
QIcon iconForWidget(const QString &iconName) const;
signals:
- void pressed(const QString &name, const QString &dom_xml, const QPoint &global_mouse_pos);
+ void widgetBoxPressed(const QString &name, const QString &dom_xml,
+ const QPoint &global_mouse_pos);
public slots:
void filter(const QString &);
@@ -123,8 +99,7 @@ private:
QDesignerFormEditorInterface *m_core;
QString m_file_name;
- using IconCache = QHash<QString, QIcon>;
- mutable IconCache m_pluginIcons;
+ mutable QHash<QString, QIcon> m_pluginIcons;
bool m_iconMode;
QTimer *m_scratchPadDeleteTimer;
};
diff --git a/src/designer/src/designer/.prev_CMakeLists.txt b/src/designer/src/designer/.prev_CMakeLists.txt
deleted file mode 100644
index c1933a92f..000000000
--- a/src/designer/src/designer/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,158 +0,0 @@
-# Generated from designer.pro.
-
-#####################################################################
-## designer App:
-#####################################################################
-
-qt_internal_add_app(designer
- SOURCES
- ../../../shared/fontpanel/fontpanel.cpp ../../../shared/fontpanel/fontpanel.h
- ../../../shared/qttoolbardialog/qttoolbardialog.cpp ../../../shared/qttoolbardialog/qttoolbardialog.h ../../../shared/qttoolbardialog/qttoolbardialog.ui
- appfontdialog.cpp appfontdialog.h
- assistantclient.cpp assistantclient.h
- designer_enums.h
- main.cpp
- mainwindow.cpp mainwindow.h
- newform.cpp newform.h
- preferencesdialog.cpp preferencesdialog.h preferencesdialog.ui
- qdesigner.cpp qdesigner.h
- qdesigner_actions.cpp qdesigner_actions.h
- qdesigner_appearanceoptions.cpp qdesigner_appearanceoptions.h qdesigner_appearanceoptions.ui
- qdesigner_formwindow.cpp qdesigner_formwindow.h
- qdesigner_server.cpp qdesigner_server.h
- qdesigner_settings.cpp qdesigner_settings.h
- qdesigner_toolwindow.cpp qdesigner_toolwindow.h
- qdesigner_workbench.cpp qdesigner_workbench.h
- saveformastemplate.cpp saveformastemplate.h saveformastemplate.ui
- versiondialog.cpp versiondialog.h
- INCLUDE_DIRECTORIES
- ../../../shared/fontpanel
- ../../../shared/qttoolbardialog
- ../lib/extension
- ../lib/sdk
- ../lib/shared
- extra
- PUBLIC_LIBRARIES
- Qt::CorePrivate
- Qt::DesignerComponentsPrivate
- Qt::DesignerPrivate
- Qt::Gui
- Qt::Network
- Qt::Widgets
- Qt::Xml
- ENABLE_AUTOGEN_TOOLS
- uic
- PRECOMPILED_HEADER
- "qdesigner_pch.h"
-)
-
-# Resources:
-set(designer_resource_files
- "images/designer.png"
-)
-
-qt_add_resource(designer "designer"
- PREFIX
- "/qt-project.org/designer"
- FILES
- ${designer_resource_files}
-)
-set_source_files_properties("../../../shared/qttoolbardialog/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../../../shared/qttoolbardialog/images/down.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/down.png"
-)
-set_source_files_properties("../../../shared/qttoolbardialog/images/forward.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/forward.png"
-)
-set_source_files_properties("../../../shared/qttoolbardialog/images/minus.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/minus.png"
-)
-set_source_files_properties("../../../shared/qttoolbardialog/images/plus.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/plus.png"
-)
-set_source_files_properties("../../../shared/qttoolbardialog/images/up.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/up.png"
-)
-set(qttoolbardialog_resource_files
- "images/back.png"
- "images/down.png"
- "images/forward.png"
- "images/minus.png"
- "images/plus.png"
- "images/up.png"
-)
-
-qt_add_resource(designer "qttoolbardialog"
- PREFIX
- "/qt-project.org/qttoolbardialog"
- BASE
- "../../../shared/qttoolbardialog"
- FILES
- ${qttoolbardialog_resource_files}
-)
-
-set_target_properties(designer PROPERTIES
- QT_TARGET_DESCRIPTION "Qt Designer"
-)
-
-## Scopes:
-#####################################################################
-
-qt_extend_target(designer CONDITION TARGET Qt::PrintSupport
- PUBLIC_LIBRARIES
- Qt::PrintSupport
-)
-
-qt_extend_target(designer CONDITION QT_CONFIG___contains___static
- DEFINES
- QT_DESIGNER_STATIC
-)
-
-if(WIN32)
- set_target_properties(designer PROPERTIES
- QT_TARGET_RC_ICONS "${CMAKE_CURRENT_SOURCE_DIR}/designer.ico"
- )
-endif()
-
-if(WIN32)
- set_target_properties(designer PROPERTIES
- QT_TARGET_VERSION "${PROJECT_VERSION}.0"
- )
-endif()
-
-if(UNIX)
- set_target_properties(designer PROPERTIES
- QT_TARGET_VERSION "${PROJECT_VERSION}"
- )
-endif()
-
-if(APPLE)
- set_target_properties(designer PROPERTIES
- MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info_mac.plist"
- MACOSX_BUNDLE TRUE
- MACOSX_BUNDLE_ICON_FILE "designer.icns"
- OUTPUT_NAME "Designer"
- )
- set_source_files_properties(designer.icns PROPERTIES
- MACOSX_PACKAGE_LOCATION Resources
- )
- target_sources(designer PRIVATE
- designer.icns
- )
-endif()
-
-#### Keys ignored in scope 6:.:.:designer.pro:APPLE:
-# FILETYPES.files = "uifile.icns"
-# FILETYPES.path = "Contents/Resources"
-# QMAKE_BUNDLE_DATA = "FILETYPES"
-
-qt_extend_target(designer CONDITION UNIX AND NOT HAIKU AND NOT MACOS
- PUBLIC_LIBRARIES
- m
-)
-qt_add_docs(designer
- doc/qtdesigner.qdocconf
-)
-
diff --git a/src/designer/src/designer/CMakeLists.txt b/src/designer/src/designer/CMakeLists.txt
index cc938f58d..41ee89302 100644
--- a/src/designer/src/designer/CMakeLists.txt
+++ b/src/designer/src/designer/CMakeLists.txt
@@ -1,4 +1,6 @@
-# Generated from designer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## designer App:
@@ -32,7 +34,7 @@ qt_internal_add_app(designer
../lib/sdk
../lib/shared
extra
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::DesignerComponentsPrivate
Qt::DesignerPrivate
@@ -46,45 +48,30 @@ qt_internal_add_app(designer
"qdesigner_pch.h"
)
+# Due to QTBUG-110369, don't add designer as dependency to External Project examples.
+qt_internal_skip_dependency_for_examples(designer)
+
# Resources:
set(designer_resource_files
"images/designer.png"
)
-qt_add_resource(designer "designer"
+qt_internal_add_resource(designer "designer"
PREFIX
"/qt-project.org/designer"
FILES
${designer_resource_files}
)
-set_source_files_properties("../../../shared/qttoolbardialog/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../../../shared/qttoolbardialog/images/down.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/down.png"
-)
-set_source_files_properties("../../../shared/qttoolbardialog/images/forward.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/forward.png"
-)
-set_source_files_properties("../../../shared/qttoolbardialog/images/minus.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/minus.png"
-)
-set_source_files_properties("../../../shared/qttoolbardialog/images/plus.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/plus.png"
-)
-set_source_files_properties("../../../shared/qttoolbardialog/images/up.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/up.png"
-)
set(qttoolbardialog_resource_files
- "images/back.png"
- "images/down.png"
- "images/forward.png"
- "images/minus.png"
- "images/plus.png"
- "images/up.png"
+ "../../../shared/qttoolbardialog/images/back.png"
+ "../../../shared/qttoolbardialog/images/down.png"
+ "../../../shared/qttoolbardialog/images/forward.png"
+ "../../../shared/qttoolbardialog/images/minus.png"
+ "../../../shared/qttoolbardialog/images/plus.png"
+ "../../../shared/qttoolbardialog/images/up.png"
)
-qt_add_resource(designer "qttoolbardialog"
+qt_internal_add_resource(designer "qttoolbardialog"
PREFIX
"/qt-project.org/qttoolbardialog"
BASE
@@ -94,18 +81,18 @@ qt_add_resource(designer "qttoolbardialog"
)
set_target_properties(designer PROPERTIES
- QT_TARGET_DESCRIPTION "Qt Designer"
+ QT_TARGET_DESCRIPTION "Qt Widgets Designer"
)
## Scopes:
#####################################################################
-qt_extend_target(designer CONDITION TARGET Qt::PrintSupport
+qt_internal_extend_target(designer CONDITION TARGET Qt::PrintSupport
PUBLIC_LIBRARIES
Qt::PrintSupport
)
-qt_extend_target(designer CONDITION QT_CONFIG___contains___static
+qt_internal_extend_target(designer CONDITION NOT QT_BUILD_SHARED_LIBS
DEFINES
QT_DESIGNER_STATIC
)
@@ -151,16 +138,14 @@ if(APPLE)
# special case end
endif()
-#### Keys ignored in scope 6:.:.:designer.pro:APPLE:
# FILETYPES.files = "uifile.icns"
# FILETYPES.path = "Contents/Resources"
# QMAKE_BUNDLE_DATA = "FILETYPES"
-qt_extend_target(designer CONDITION UNIX AND NOT HAIKU AND NOT MACOS
+qt_internal_extend_target(designer CONDITION UNIX AND NOT HAIKU AND NOT MACOS
PUBLIC_LIBRARIES
m
)
-qt_add_docs(designer
+qt_internal_add_docs(designer
doc/qtdesigner.qdocconf
)
-
diff --git a/src/designer/src/designer/appfontdialog.cpp b/src/designer/src/designer/appfontdialog.cpp
index 7b40fb5b3..725e6d870 100644
--- a/src/designer/src/designer/appfontdialog.cpp
+++ b/src/designer/src/designer/appfontdialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "appfontdialog.h"
@@ -55,10 +30,12 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
enum {FileNameRole = Qt::UserRole + 1, IdRole = Qt::UserRole + 2 };
enum { debugAppFontWidget = 0 };
-static const char fontFileKeyC[] = "fontFiles";
+static constexpr auto fontFileKeyC = "fontFiles"_L1;
// AppFontManager: Singleton that maintains the mapping of loaded application font
// ids to the file names (which are not stored in QFontDatabase)
@@ -82,7 +59,7 @@ public:
bool removeAt(int index, QString *errorMessage);
// Store loaded fonts as pair of file name and Id
- using FileNameFontIdPair = QPair<QString,int>;
+ using FileNameFontIdPair = std::pair<QString, int>;
using FileNameFontIdPairs = QList<FileNameFontIdPair>;
const FileNameFontIdPairs &fonts() const;
@@ -102,12 +79,11 @@ void AppFontManager::save(QDesignerSettingsInterface *s, const QString &prefix)
{
// Store as list of file names
QStringList fontFiles;
- const FileNameFontIdPairs::const_iterator cend = m_fonts.constEnd();
- for (FileNameFontIdPairs::const_iterator it = m_fonts.constBegin(); it != cend; ++it)
- fontFiles.push_back(it->first);
+ for (const auto &fnp : m_fonts)
+ fontFiles.push_back(fnp.first);
s->beginGroup(prefix);
- s->setValue(QLatin1String(fontFileKeyC), fontFiles);
+ s->setValue(fontFileKeyC, fontFiles);
s->endGroup();
if (debugAppFontWidget)
@@ -116,19 +92,17 @@ void AppFontManager::save(QDesignerSettingsInterface *s, const QString &prefix)
void AppFontManager::restore(const QDesignerSettingsInterface *s, const QString &prefix)
{
- QString key = prefix;
- key += QLatin1Char('/');
- key += QLatin1String(fontFileKeyC);
+ const QString key = prefix + u'/' + fontFileKeyC;
const QStringList fontFiles = s->value(key, QStringList()).toStringList();
if (debugAppFontWidget)
qDebug() << "AppFontManager::restoring" << fontFiles.size() << "fonts from " << prefix;
if (!fontFiles.isEmpty()) {
QString errorMessage;
- const QStringList::const_iterator cend = fontFiles.constEnd();
- for (QStringList::const_iterator it = fontFiles.constBegin(); it != cend; ++it)
- if (add(*it, &errorMessage) == -1)
+ for (const auto &ff : fontFiles) {
+ if (add(ff, &errorMessage) == -1)
qWarning("%s", qPrintable(errorMessage));
+ }
}
}
@@ -145,9 +119,8 @@ int AppFontManager::add(const QString &fontFile, QString *errorMessage)
}
const QString fullPath = inf.absoluteFilePath();
// Check if already loaded
- const FileNameFontIdPairs::const_iterator cend = m_fonts.constEnd();
- for (FileNameFontIdPairs::const_iterator it = m_fonts.constBegin(); it != cend; ++it) {
- if (it->first == fullPath) {
+ for (const auto &fnp : std::as_const(m_fonts)) {
+ if (fnp.first == fullPath) {
*errorMessage = QCoreApplication::translate("AppFontManager", "The font file '%1' is already loaded.").arg(fontFile);
return -1;
}
@@ -167,9 +140,8 @@ int AppFontManager::add(const QString &fontFile, QString *errorMessage)
bool AppFontManager::remove(int id, QString *errorMessage)
{
- const int count = m_fonts.size();
- for (int i = 0; i < count; i++)
- if (m_fonts[i].second == id)
+ for (qsizetype i = 0, count = m_fonts.size(); i < count; ++i)
+ if (m_fonts.at(i).second == id)
return removeAt(i, errorMessage);
*errorMessage = QCoreApplication::translate("AppFontManager", "'%1' is not a valid font id.").arg(id);
@@ -178,9 +150,8 @@ bool AppFontManager::remove(int id, QString *errorMessage)
bool AppFontManager::remove(const QString &fontFile, QString *errorMessage)
{
- const int count = m_fonts.size();
- for (int i = 0; i < count; i++)
- if (m_fonts[i].first == fontFile)
+ for (qsizetype i = 0, count = m_fonts.size(); i < count; ++i)
+ if (m_fonts.at(i).first == fontFile)
return removeAt(i, errorMessage);
*errorMessage = QCoreApplication::translate("AppFontManager", "There is no loaded font matching the id '%1'.").arg(fontFile);
@@ -232,9 +203,8 @@ void AppFontModel::init(const AppFontManager &mgr)
using FileNameFontIdPairs = AppFontManager::FileNameFontIdPairs;
const FileNameFontIdPairs &fonts = mgr.fonts();
- const FileNameFontIdPairs::const_iterator cend = fonts.constEnd();
- for (FileNameFontIdPairs::const_iterator it = fonts.constBegin(); it != cend; ++it)
- add(it->first, it->second);
+ for (const auto &fnp : fonts)
+ add(fnp.first, fnp.second);
}
void AppFontModel::add(const QString &fontFile, int id)
@@ -250,11 +220,10 @@ void AppFontModel::add(const QString &fontFile, int id)
appendRow(fileItem);
const QStringList families = QFontDatabase::applicationFontFamilies(id);
- const QStringList::const_iterator cend = families.constEnd();
- for (QStringList::const_iterator it = families.constBegin(); it != cend; ++it) {
- QStandardItem *familyItem = new QStandardItem(*it);
+ for (const auto &fam : families) {
+ QStandardItem *familyItem = new QStandardItem(fam);
familyItem->setToolTip(fullPath);
- familyItem->setFont(QFont(*it));
+ familyItem->setFont(QFont(fam));
familyItem->setFlags(Qt::ItemIsEnabled);
fileItem->appendRow(familyItem);
}
@@ -283,16 +252,17 @@ AppFontWidget::AppFontWidget(QWidget *parent) :
connect(m_view->selectionModel(), &QItemSelectionModel::selectionChanged, this, &AppFontWidget::selectionChanged);
m_addButton->setToolTip(tr("Add font files"));
- m_addButton->setIcon(qdesigner_internal::createIconSet(QString::fromUtf8("plus.png")));
+ m_addButton->setIcon(qdesigner_internal::createIconSet("plus.png"_L1));
connect(m_addButton, &QAbstractButton::clicked, this, &AppFontWidget::addFiles);
m_removeButton->setEnabled(false);
m_removeButton->setToolTip(tr("Remove current font file"));
- m_removeButton->setIcon(qdesigner_internal::createIconSet(QString::fromUtf8("minus.png")));
+ m_removeButton->setIcon(qdesigner_internal::createIconSet("minus.png"_L1));
connect(m_removeButton, &QAbstractButton::clicked, this, &AppFontWidget::slotRemoveFiles);
m_removeAllButton->setToolTip(tr("Remove all font files"));
- m_removeAllButton->setIcon(qdesigner_internal::createIconSet(QString::fromUtf8("editdelete.png")));
+ m_removeAllButton->setIcon(qdesigner_internal::createIconSet(QIcon::ThemeIcon::EditDelete,
+ "editdelete.png"_L1));
connect(m_removeAllButton, &QAbstractButton::clicked, this, &AppFontWidget::slotRemoveAll);
QHBoxLayout *hLayout = new QHBoxLayout;
@@ -318,11 +288,10 @@ void AppFontWidget::addFiles()
QString errorMessage;
AppFontManager &fmgr = AppFontManager::instance();
- const QStringList::const_iterator cend = files.constEnd();
- for (QStringList::const_iterator it = files.constBegin(); it != cend; ++it) {
- const int id = fmgr.add(*it, &errorMessage);
+ for (const auto &f : files) {
+ const int id = fmgr.add(f, &errorMessage);
if (id != -1) {
- m_model->add(*it, id);
+ m_model->add(f, id);
} else {
QMessageBox::critical(this, tr("Error Adding Fonts"), errorMessage);
}
@@ -341,12 +310,11 @@ static void removeFonts(const QModelIndexList &selectedIndexes, AppFontModel *mo
rows.reserve(selectedIndexes.size());
QString errorMessage;
- const QModelIndexList::const_iterator cend = selectedIndexes.constEnd();
- for (QModelIndexList::const_iterator it = selectedIndexes.constBegin(); it != cend; ++it) {
- const int id = model->idAt(*it);
+ for (const auto &mi : selectedIndexes) {
+ const int id = model->idAt(mi);
if (id != -1) {
if (fmgr.remove(id, &errorMessage)) {
- rows.push_back(it->row());
+ rows.append(mi.row());
} else {
QMessageBox::critical(dialogParent, AppFontWidget::tr("Error Removing Fonts"), errorMessage);
}
@@ -354,8 +322,8 @@ static void removeFonts(const QModelIndexList &selectedIndexes, AppFontModel *mo
}
std::stable_sort(rows.begin(), rows.end());
- for (int i = rows.size() - 1; i >= 0; i--)
- model->removeRow(rows[i]);
+ for (qsizetype i = rows.size() - 1; i >= 0; --i)
+ model->removeRow(rows.at(i));
}
void AppFontWidget::slotRemoveFiles()
@@ -402,7 +370,6 @@ AppFontDialog::AppFontDialog(QWidget *parent) :
m_appFontWidget(new AppFontWidget)
{
setAttribute(Qt::WA_DeleteOnClose, true);
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
setWindowTitle(tr("Additional Fonts"));
setModal(false);
QVBoxLayout *vl = new QVBoxLayout;
diff --git a/src/designer/src/designer/appfontdialog.h b/src/designer/src/designer/appfontdialog.h
index 4a5b128af..5b33c4a5b 100644
--- a/src/designer/src/designer/appfontdialog.h
+++ b/src/designer/src/designer/appfontdialog.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QDESIGNER_APPFONTWIDGET_H
#define QDESIGNER_APPFONTWIDGET_H
diff --git a/src/designer/src/designer/assistantclient.cpp b/src/designer/src/designer/assistantclient.cpp
index 45fee4393..43934c13e 100644
--- a/src/designer/src/designer/assistantclient.cpp
+++ b/src/designer/src/designer/assistantclient.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "assistantclient.h"
@@ -40,6 +15,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
enum { debugAssistantClient = 0 };
AssistantClient::AssistantClient() = default;
@@ -55,22 +32,19 @@ AssistantClient::~AssistantClient()
bool AssistantClient::showPage(const QString &path, QString *errorMessage)
{
- QString cmd = QStringLiteral("SetSource ");
- cmd += path;
+ const QString cmd = "SetSource "_L1 + path;
return sendCommand(cmd, errorMessage);
}
bool AssistantClient::activateIdentifier(const QString &identifier, QString *errorMessage)
{
- QString cmd = QStringLiteral("ActivateIdentifier ");
- cmd += identifier;
+ const QString cmd = "ActivateIdentifier "_L1 + identifier;
return sendCommand(cmd, errorMessage);
}
bool AssistantClient::activateKeyword(const QString &keyword, QString *errorMessage)
{
- QString cmd = QStringLiteral("ActivateKeyword ");
- cmd += keyword;
+ const QString cmd = "ActivateKeyword "_L1 + keyword;
return sendCommand(cmd, errorMessage);
}
@@ -85,7 +59,7 @@ bool AssistantClient::sendCommand(const QString &cmd, QString *errorMessage)
return false;
}
QTextStream str(m_process);
- str << cmd << QLatin1Char('\n') << Qt::endl;
+ str << cmd << "\n\n";
return true;
}
@@ -98,13 +72,13 @@ QString AssistantClient::binary()
{
QString app = QLibraryInfo::path(QLibraryInfo::BinariesPath) + QDir::separator();
#if !defined(Q_OS_MACOS)
- app += QStringLiteral("assistant");
+ app += "assistant"_L1;
#else
- app += QStringLiteral("Assistant.app/Contents/MacOS/Assistant");
+ app += "Assistant.app/Contents/MacOS/Assistant"_L1;
#endif
#if defined(Q_OS_WIN)
- app += QStringLiteral(".exe");
+ app += ".exe"_L1;
#endif
return app;
@@ -147,7 +121,7 @@ bool AssistantClient::ensureRunning(QString *errorMessage)
if (debugAssistantClient)
qDebug() << "Running " << app;
// run
- QStringList args(QStringLiteral("-enableRemoteControl"));
+ QStringList args{u"-enableRemoteControl"_s};
m_process->start(app, args);
if (!m_process->waitForStarted()) {
*errorMessage = QCoreApplication::translate("AssistantClient", "Unable to launch assistant (%1).").arg(app);
@@ -169,12 +143,12 @@ QString AssistantClient::documentUrl(const QString &module, int qtVersion)
QString AssistantClient::designerManualUrl(int qtVersion)
{
- return documentUrl(QStringLiteral("qtdesigner"), qtVersion);
+ return documentUrl(u"qtdesigner"_s, qtVersion);
}
QString AssistantClient::qtReferenceManualUrl(int qtVersion)
{
- return documentUrl(QStringLiteral("qtdoc"), qtVersion);
+ return documentUrl(u"qtdoc"_s, qtVersion);
}
QT_END_NAMESPACE
diff --git a/src/designer/src/designer/assistantclient.h b/src/designer/src/designer/assistantclient.h
index 94618662a..b1ee033d5 100644
--- a/src/designer/src/designer/assistantclient.h
+++ b/src/designer/src/designer/assistantclient.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ASSISTANTCLIENT_H
#define ASSISTANTCLIENT_H
@@ -50,7 +25,7 @@ public:
bool isRunning() const;
static QString documentUrl(const QString &prefix, int qtVersion = 0);
- // Root of the Qt Designer documentation
+ // Root of the Qt Widgets Designer documentation
static QString designerManualUrl(int qtVersion = 0);
// Root of the Qt Reference documentation
static QString qtReferenceManualUrl(int qtVersion = 0);
diff --git a/src/designer/src/designer/designer.pro b/src/designer/src/designer/designer.pro
deleted file mode 100644
index 6a925202a..000000000
--- a/src/designer/src/designer/designer.pro
+++ /dev/null
@@ -1,82 +0,0 @@
-QT += core-private widgets xml network designer-private designercomponents-private
-qtHaveModule(printsupport): QT += printsupport
-
-INCLUDEPATH += \
- ../lib/sdk \
- ../lib/extension \
- ../lib/shared \
- extra
-
-RESOURCES += designer.qrc
-
-contains(QT_CONFIG, static) {
- DEFINES += QT_DESIGNER_STATIC
-}
-
-include(../../../shared/fontpanel/fontpanel.pri)
-include(../../../shared/qttoolbardialog/qttoolbardialog.pri)
-
-QMAKE_DOCS = $$PWD/doc/qtdesigner.qdocconf
-
-HEADERS += \
- qdesigner.h \
- qdesigner_toolwindow.h \
- qdesigner_formwindow.h \
- qdesigner_workbench.h \
- qdesigner_settings.h \
- qdesigner_actions.h \
- qdesigner_server.h \
- qdesigner_appearanceoptions.h \
- saveformastemplate.h \
- newform.h \
- versiondialog.h \
- designer_enums.h \
- appfontdialog.h \
- preferencesdialog.h \
- assistantclient.h \
- mainwindow.h
-
-SOURCES += main.cpp \
- qdesigner.cpp \
- qdesigner_toolwindow.cpp \
- qdesigner_formwindow.cpp \
- qdesigner_workbench.cpp \
- qdesigner_settings.cpp \
- qdesigner_server.cpp \
- qdesigner_actions.cpp \
- qdesigner_appearanceoptions.cpp \
- saveformastemplate.cpp \
- newform.cpp \
- versiondialog.cpp \
- appfontdialog.cpp \
- preferencesdialog.cpp \
- assistantclient.cpp \
- mainwindow.cpp
-
-PRECOMPILED_HEADER=qdesigner_pch.h
-
-FORMS += saveformastemplate.ui \
- preferencesdialog.ui \
- qdesigner_appearanceoptions.ui
-
-QMAKE_TARGET_DESCRIPTION = Qt Designer
-
-win32 {
- RC_ICONS = designer.ico
- VERSION = $${QT_VERSION}.0
-} else {
- VERSION = $${QT_VERSION}
-}
-
-mac {
- ICON = designer.icns
- QMAKE_INFO_PLIST = Info_mac.plist
- TARGET = Designer
- FILETYPES.files = uifile.icns
- FILETYPES.path = Contents/Resources
- QMAKE_BUNDLE_DATA += FILETYPES
-}
-
-unix:!osx:!haiku:LIBS += -lm
-
-load(qt_app)
diff --git a/src/designer/src/designer/designer.qrc b/src/designer/src/designer/designer.qrc
deleted file mode 100644
index 5de379c78..000000000
--- a/src/designer/src/designer/designer.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
- <qresource prefix="/qt-project.org/designer">
- <file>images/designer.png</file>
- </qresource>
-</RCC>
diff --git a/src/designer/src/designer/designer_enums.h b/src/designer/src/designer/designer_enums.h
index c8aeff8bd..87f67d103 100644
--- a/src/designer/src/designer/designer_enums.h
+++ b/src/designer/src/designer/designer_enums.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef DESIGNERENUMS_H
#define DESIGNERENUMS_H
diff --git a/src/designer/src/designer/doc/qtdesigner.qdocconf b/src/designer/src/designer/doc/qtdesigner.qdocconf
index f980f3474..fb0a67e8d 100644
--- a/src/designer/src/designer/doc/qtdesigner.qdocconf
+++ b/src/designer/src/designer/doc/qtdesigner.qdocconf
@@ -2,7 +2,7 @@ include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
include($QT_INSTALL_DOCS/config/exampleurl-qttools.qdocconf)
project = QtDesigner
-description = Qt Designer Manual
+description = Qt Widgets Designer Manual
examplesinstallpath = designer
qhp.projects = QtDesigner
@@ -10,32 +10,25 @@ qhp.projects = QtDesigner
qhp.QtDesigner.file = qtdesigner.qhp
qhp.QtDesigner.namespace = org.qt-project.qtdesigner.$QT_VERSION_TAG
qhp.QtDesigner.virtualFolder = qtdesigner
-qhp.QtDesigner.indexTitle = Qt Designer Manual
+qhp.QtDesigner.indexTitle = Qt Widgets Designer Manual
-qhp.QtDesigner.filterAttributes = qt $QT_VERSION tools designer
-qhp.QtDesigner.customFilters.QtDesigner.name = Qt Designer Manual
-qhp.QtDesigner.customFilters.QtDesigner.filterAttributes = qt tools designer
qhp.QtDesigner.subprojects = manual examples classes
qhp.QtDesigner.subprojects.manual.title = Manual
-qhp.QtDesigner.subprojects.manual.indexTitle = Qt Designer Manual
+qhp.QtDesigner.subprojects.manual.indexTitle = Qt Widgets Designer Manual
qhp.QtDesigner.subprojects.manual.selectors = fake:page
qhp.QtDesigner.subprojects.examples.title = Examples
-qhp.QtDesigner.subprojects.examples.indexTitle = Qt Designer Examples
+qhp.QtDesigner.subprojects.examples.indexTitle = Qt Widgets Designer Examples
qhp.QtDesigner.subprojects.examples.selectors = fake:example
qhp.QtDesigner.subprojects.examples.sortPages = true
qhp.QtDesigner.subprojects.classes.title = C++ Classes
-qhp.QtDesigner.subprojects.classes.indexTitle = Qt Designer C++ Classes
+qhp.QtDesigner.subprojects.classes.indexTitle = Qt Widgets Designer C++ Classes
qhp.QtDesigner.subprojects.classes.selectors = class fake:headerfile
qhp.QtDesigner.subprojects.classes.sortPages = true
language = Cpp
-headerdirs += .. \
- ../../uiplugin \
- ../../lib
-
-sourcedirs = .. \
- ../../uiplugin \
+{headerdirs,sourcedirs} += .. \
+ ../../../../uiplugin \
../../lib
exampledirs = ../../../../../examples/designer \
@@ -43,7 +36,8 @@ exampledirs = ../../../../../examples/designer \
imagedirs = images
-depends += qtdoc qtgui qtwidgets qtcore qtuitools qtquick qmake
+depends += qtdoc qtgui qtwidgets qtcore qtuitools qtquick qtcmake qmake
+
+navigation.landingpage = "Qt Widgets Designer Manual"
+navigation.cppclassespage = "Qt Widgets Designer C++ Classes"
-navigation.landingpage = "Qt Designer Manual"
-navigation.cppclassespage = "Qt Designer C++ Classes"
diff --git a/src/designer/src/designer/doc/snippets/CMakeLists.txt b/src/designer/src/designer/doc/snippets/CMakeLists.txt
new file mode 100644
index 000000000..974b43ffd
--- /dev/null
+++ b/src/designer/src/designer/doc/snippets/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+add_subdirectory(autoconnection)
+add_subdirectory(imagedialog)
+add_subdirectory(multipleinheritance)
+add_subdirectory(noautoconnection)
+
+add_subdirectory(singleinheritance)
+add_subdirectory(uitools/calculatorform)
diff --git a/src/designer/src/designer/doc/snippets/autoconnection/CMakeLists.txt b/src/designer/src/designer/doc/snippets/autoconnection/CMakeLists.txt
new file mode 100644
index 000000000..ba19d4501
--- /dev/null
+++ b/src/designer/src/designer/doc/snippets/autoconnection/CMakeLists.txt
@@ -0,0 +1,24 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(autoconnection LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTOUIC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_add_executable(autoconnection
+ imagedialog.cpp imagedialog.h imagedialog.ui main.cpp)
+
+set_target_properties(autoconnection PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(autoconnection PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::Widgets
+)
diff --git a/src/designer/src/designer/doc/snippets/autoconnection/autoconnection.pro b/src/designer/src/designer/doc/snippets/autoconnection/autoconnection.pro
index fba94debf..6937e8e54 100644
--- a/src/designer/src/designer/doc/snippets/autoconnection/autoconnection.pro
+++ b/src/designer/src/designer/doc/snippets/autoconnection/autoconnection.pro
@@ -1,4 +1,5 @@
TEMPLATE = app
+QT += widgets
FORMS = imagedialog.ui
HEADERS = imagedialog.h
SOURCES = imagedialog.cpp \
diff --git a/src/designer/src/designer/doc/snippets/autoconnection/imagedialog.cpp b/src/designer/src/designer/doc/snippets/autoconnection/imagedialog.cpp
index f561eaeda..8776e38cd 100644
--- a/src/designer/src/designer/doc/snippets/autoconnection/imagedialog.cpp
+++ b/src/designer/src/designer/doc/snippets/autoconnection/imagedialog.cpp
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include <QtGui>
+#include <QMessageBox>
#include "imagedialog.h"
@@ -66,14 +19,15 @@ ImageDialog::ImageDialog(QWidget *parent)
colorDepthCombo->addItem(tr("65536 colors (16 bits per pixel)"));
colorDepthCombo->addItem(tr("16 million colors (24 bits per pixel)"));
- connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
+ connect(cancelButton, &QAbstractButton::clicked, this, &QDialog::reject);
}
void ImageDialog::on_okButton_clicked()
{
- if (nameLineEdit->text().isEmpty())
- (void) QMessageBox::information(this, tr("No Image Name"),
+ if (nameLineEdit->text().isEmpty()) {
+ QMessageBox::information(this, tr("No Image Name"),
tr("Please supply a name for the image."), QMessageBox::Cancel);
- else
+ } else {
accept();
+ }
}
diff --git a/src/designer/src/designer/doc/snippets/autoconnection/imagedialog.h b/src/designer/src/designer/doc/snippets/autoconnection/imagedialog.h
index 665824921..64d6b4e88 100644
--- a/src/designer/src/designer/doc/snippets/autoconnection/imagedialog.h
+++ b/src/designer/src/designer/doc/snippets/autoconnection/imagedialog.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef IMAGEDIALOG_H
#define IMAGEDIALOG_H
@@ -59,7 +12,7 @@ class ImageDialog : public QDialog, private Ui::ImageDialog
Q_OBJECT
public:
- ImageDialog(QWidget *parent = 0);
+ explicit ImageDialog(QWidget *parent = nullptr);
private slots:
void on_okButton_clicked();
diff --git a/src/designer/src/designer/doc/snippets/autoconnection/main.cpp b/src/designer/src/designer/doc/snippets/autoconnection/main.cpp
index 95daf2dec..5c05efddb 100644
--- a/src/designer/src/designer/doc/snippets/autoconnection/main.cpp
+++ b/src/designer/src/designer/doc/snippets/autoconnection/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "imagedialog.h"
diff --git a/src/designer/src/designer/doc/snippets/imagedialog/CMakeLists.txt b/src/designer/src/designer/doc/snippets/imagedialog/CMakeLists.txt
new file mode 100644
index 000000000..3ba729065
--- /dev/null
+++ b/src/designer/src/designer/doc/snippets/imagedialog/CMakeLists.txt
@@ -0,0 +1,24 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(imagedialog LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTOUIC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_add_executable(imagedialog
+ imagedialog.ui main.cpp)
+
+set_target_properties(imagedialog PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(imagedialog PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::Widgets
+)
diff --git a/src/designer/src/designer/doc/snippets/imagedialog/imagedialog.pro b/src/designer/src/designer/doc/snippets/imagedialog/imagedialog.pro
index 164a7b2cb..c0afe036d 100644
--- a/src/designer/src/designer/doc/snippets/imagedialog/imagedialog.pro
+++ b/src/designer/src/designer/doc/snippets/imagedialog/imagedialog.pro
@@ -1,3 +1,4 @@
TEMPLATE = app
+QT += widgets
FORMS = imagedialog.ui
SOURCES = main.cpp
diff --git a/src/designer/src/designer/doc/snippets/imagedialog/main.cpp b/src/designer/src/designer/doc/snippets/imagedialog/main.cpp
index 545898688..83272df09 100644
--- a/src/designer/src/designer/doc/snippets/imagedialog/main.cpp
+++ b/src/designer/src/designer/doc/snippets/imagedialog/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "ui_imagedialog.h"
#include <QApplication>
diff --git a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_extension_default_extensionfactory.cpp b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_extension_default_extensionfactory.cpp
index 697f2a537..ab2b5d2d5 100644
--- a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_extension_default_extensionfactory.cpp
+++ b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_extension_default_extensionfactory.cpp
@@ -1,65 +1,17 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
QObject *ANewExtensionFactory::createExtension(QObject *object,
const QString &iid, QObject *parent) const
{
if (iid != Q_TYPEID(QDesignerContainerExtension))
- return 0;
+ return nullptr;
- if (MyCustomWidget *widget = qobject_cast<MyCustomWidget*>
- (object))
+ if (auto *widget = qobject_cast<MyCustomWidget*>(object))
return new MyContainerExtension(widget, parent);
- return 0;
+ return nullptr;
}
//! [0]
@@ -68,17 +20,17 @@
QObject *AGeneralExtensionFactory::createExtension(QObject *object,
const QString &iid, QObject *parent) const
{
- MyCustomWidget *widget = qobject_cast<MyCustomWidget*>(object);
+ auto *widget = qobject_cast<MyCustomWidget*>(object);
+ if (!widget)
+ return nullptr;
- if (widget && (iid == Q_TYPEID(QDesignerTaskMenuExtension))) {
+ if (iid == Q_TYPEID(QDesignerTaskMenuExtension))
return new MyTaskMenuExtension(widget, parent);
- } else if (widget && (iid == Q_TYPEID(QDesignerContainerExtension))) {
+ if (iid == Q_TYPEID(QDesignerContainerExtension))
return new MyContainerExtension(widget, parent);
- } else {
- return 0;
- }
+ return nullptr;
}
//! [1]
diff --git a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_extension_extension.cpp b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_extension_extension.cpp
index afe14ee52..b5ed7f4c4 100644
--- a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_extension_extension.cpp
+++ b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_extension_extension.cpp
@@ -1,58 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
- QDesignerPropertySheetExtension *propertySheet;
- QExtensionManager manager = formEditor->extensionManager();
+ auto *manager = formEditor->extensionManager();
- propertySheet = qt_extension<QDesignerPropertySheetExtension*>(manager, widget);
+ auto *propertySheet = qt_extension<QDesignerPropertySheetExtension*>(manager, widget);
if(propertySheet) {...}
//! [0]
diff --git a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_extension_qextensionmanager.cpp b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_extension_qextensionmanager.cpp
index f8059e9f0..0b79dd60d 100644
--- a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_extension_qextensionmanager.cpp
+++ b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_extension_qextensionmanager.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
void MyPlugin::initialize(QDesignerFormEditorInterface *formEditor)
@@ -54,8 +7,8 @@
if (initialized)
return;
- QExtensionManager *manager = formEditor->extensionManager();
- Q_ASSERT(manager != 0);
+ auto *manager = formEditor->extensionManager();
+ Q_ASSERT(manager != nullptr);
manager->registerExtensions(new MyExtensionFactory(manager),
Q_TYPEID(QDesignerTaskMenuExtension));
diff --git a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractformeditor.cpp b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractformeditor.cpp
deleted file mode 100644
index fd8968a55..000000000
--- a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractformeditor.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//! [0]
- QDesignerObjectInspectorInterface *objectInspector = 0;
- objectInspector = formEditor->objectInspector();
-
- QDesignerFormWindowManagerInterface *manager = 0;
- manager = formEditor->formWindowManager();
-
- objectInspector->setFormWindow(manager->formWindow(0));
-//! [0]
-
-
diff --git a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractformwindow.cpp b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractformwindow.cpp
index 259eb4668..4a8f5df6b 100644
--- a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractformwindow.cpp
+++ b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractformwindow.cpp
@@ -1,69 +1,18 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
- QDesignerFormWindowInterface *formWindow;
- formWindow = QDesignerFormWindowInterface::findFormWindow(myWidget);
+ auto *formWindow = QDesignerFormWindowInterface::findFormWindow(myWidget);
//! [0]
//! [1]
QList<QDesignerFormWindowInterface *> forms;
- QDesignerFormWindowInterface *formWindow;
- QDesignerFormWindowManagerInterface *manager = formEditor->formWindowManager();
+ auto *manager = formEditor->formWindowManager();
- for (int i = 0; i < manager->formWindowCount(); i++) {
- formWindow = manager->formWindow(i);
- forms.append(formWindow);
- }
+ for (int i = 0; i < manager->formWindowCount(); ++i)
+ forms.append(manager->formWindow(i));
//! [1]
diff --git a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractformwindowcursor.cpp b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractformwindowcursor.cpp
index af4c5f39e..c6552713b 100644
--- a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractformwindowcursor.cpp
+++ b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractformwindowcursor.cpp
@@ -1,56 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
- QDesignerFormWindowInterface *formWindow = 0;
- formWindow = QDesignerFormWindowInterface::findFormWindow(myWidget);
+ auto *formWindow = QDesignerFormWindowInterface::findFormWindow(myWidget);
formWindow->cursor()->setProperty(myWidget, myProperty, newValue);
//! [0]
diff --git a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractformwindowmanager.cpp b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractformwindowmanager.cpp
index 94694f669..9427dbdc3 100644
--- a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractformwindowmanager.cpp
+++ b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractformwindowmanager.cpp
@@ -1,59 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
- QDesignerFormWindowManagerInterface *manager = 0;
- QDesignerFormWindowInterface *formWindow = 0;
-
- manager = formEditor->formWindowManager();
- formWindow = manager->formWindow(0);
+ auto *manager = formEditor->formWindowManager();
+ auto *formWindow = manager->formWindow(0);
manager->setActiveFormWindow(formWindow);
//! [0]
diff --git a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractobjectinspector.cpp b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractobjectinspector.cpp
index fd8968a55..9d806a846 100644
--- a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractobjectinspector.cpp
+++ b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractobjectinspector.cpp
@@ -1,59 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
- QDesignerObjectInspectorInterface *objectInspector = 0;
- objectInspector = formEditor->objectInspector();
-
- QDesignerFormWindowManagerInterface *manager = 0;
- manager = formEditor->formWindowManager();
+ auto *objectInspector = formEditor->objectInspector();
+ auto *manager = formEditor->formWindowManager();
objectInspector->setFormWindow(manager->formWindow(0));
//! [0]
diff --git a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractpropertyeditor.cpp b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractpropertyeditor.cpp
index 571796031..347988365 100644
--- a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractpropertyeditor.cpp
+++ b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractpropertyeditor.cpp
@@ -1,69 +1,21 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
- QDesignerPropertyEditorInterface *propertyEditor = 0;
- propertyEditor = formEditor->propertyEditor();
+ auto *propertyEditor = formEditor->propertyEditor();
- connect(propertyEditor, SIGNAL(propertyChanged(QString,QVariant)),
- this, SLOT(checkProperty(QString,QVariant)));
+ connect(propertyEditor, &QDesignerPropertyEditorInterface::propertyChanged,
+ this, &MyClass::checkProperty);
//! [0]
//! [1]
- void checkProperty(QString property, QVariant value) {
- QDesignerPropertyEditorInterface *propertyEditor = 0;
- propertyEditor = formEditor->propertyEditor();
+ void checkProperty(const QString &property, const QVariant &value)
+ {
+ auto *propertyEditor = formEditor->propertyEditor();
- QObject *object = propertyeditor->object();
- MyCustomWidget *widget = qobject_cast<MyCustomWidget>(object);
+ auto *object = propertyeditor->object();
+ auto *widget = qobject_cast<MyCustomWidget *>(object);
if (widget && property == aProperty && value != expectedValue)
{...}
diff --git a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractwidgetbox.cpp b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractwidgetbox.cpp
index 850542211..a893306ea 100644
--- a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractwidgetbox.cpp
+++ b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_sdk_abstractwidgetbox.cpp
@@ -1,56 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
- QDesignerWidgetBoxInterface *widgetBox = 0:
- widgetBox = formEditor->widgetBox();
+ auto *widgetBox = formEditor->widgetBox();
widgetBox->load();
//! [0]
diff --git a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_uilib_abstractformbuilder.cpp b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_uilib_abstractformbuilder.cpp
deleted file mode 100644
index b7b9f5ec1..000000000
--- a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_uilib_abstractformbuilder.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//! [0]
- MyForm::MyForm(QWidget *parent)
- : QWidget(parent)
- {
- QFormBuilder builder;
- QFile file(":/forms/myWidget.ui");
- file.open(QFile::ReadOnly);
- QWidget *myWidget = builder.load(&file, this);
- file.close();
-
- QVBoxLayout *layout = new QVBoxLayout;
- layout->addWidget(myWidget);
- setLayout(layout);
- }
-//! [0]
-
-
diff --git a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_uilib_formbuilder.cpp b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_uilib_formbuilder.cpp
index c7fd41416..2120dcacb 100644
--- a/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_uilib_formbuilder.cpp
+++ b/src/designer/src/designer/doc/snippets/lib/tools_designer_src_lib_uilib_formbuilder.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
MyForm::MyForm(QWidget *parent)
@@ -58,9 +11,8 @@
QWidget *myWidget = builder.load(&file, this);
file.close();
- QVBoxLayout *layout = new QVBoxLayout;
+ auto *layout = new QVBoxLayout(this);
layout->addWidget(myWidget);
- setLayout(layout);
}
//! [0]
diff --git a/src/designer/src/designer/doc/snippets/manual/doc_src_designer-manual.cpp b/src/designer/src/designer/doc/snippets/manual/doc_src_designer-manual.cpp
index 3e077025d..f0483c05b 100644
--- a/src/designer/src/designer/doc/snippets/manual/doc_src_designer-manual.cpp
+++ b/src/designer/src/designer/doc/snippets/manual/doc_src_designer-manual.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [1]
#include <QtUiTools>
diff --git a/src/designer/src/designer/doc/snippets/manual/doc_src_designer-manual.js b/src/designer/src/designer/doc/snippets/manual/doc_src_designer-manual.js
index 949825cc5..da1ad350d 100644
--- a/src/designer/src/designer/doc/snippets/manual/doc_src_designer-manual.js
+++ b/src/designer/src/designer/doc/snippets/manual/doc_src_designer-manual.js
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [6]
widget.text = 'Hi - I was built ' + new Date().toString();
diff --git a/src/designer/src/designer/doc/snippets/manual/doc_src_designer-manual.pro b/src/designer/src/designer/doc/snippets/manual/doc_src_designer-manual.pro
index 26839e35a..f09f257e2 100644
--- a/src/designer/src/designer/doc/snippets/manual/doc_src_designer-manual.pro
+++ b/src/designer/src/designer/doc/snippets/manual/doc_src_designer-manual.pro
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#! [0]
QT += uitools
diff --git a/src/designer/src/designer/doc/snippets/multipleinheritance/CMakeLists.txt b/src/designer/src/designer/doc/snippets/multipleinheritance/CMakeLists.txt
new file mode 100644
index 000000000..c7e3d8aae
--- /dev/null
+++ b/src/designer/src/designer/doc/snippets/multipleinheritance/CMakeLists.txt
@@ -0,0 +1,24 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(multipleinheritance LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTOUIC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_add_executable(multipleinheritance
+ imagedialog.cpp imagedialog.h imagedialog.ui main.cpp)
+
+set_target_properties(multipleinheritance PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(multipleinheritance PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::Widgets
+)
diff --git a/src/designer/src/designer/doc/snippets/multipleinheritance/imagedialog.cpp b/src/designer/src/designer/doc/snippets/multipleinheritance/imagedialog.cpp
index 147c1cdf8..1c34df2bb 100644
--- a/src/designer/src/designer/doc/snippets/multipleinheritance/imagedialog.cpp
+++ b/src/designer/src/designer/doc/snippets/multipleinheritance/imagedialog.cpp
@@ -1,54 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtGui>
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "imagedialog.h"
@@ -64,6 +15,6 @@ ImageDialog::ImageDialog(QWidget *parent)
colorDepthCombo->addItem(tr("65536 colors (16 bits per pixel)"));
colorDepthCombo->addItem(tr("16 million colors (24 bits per pixel)"));
- connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
- connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
+ connect(okButton, &QAbstractButton::clicked, this, &QDialog::accept);
+ connect(cancelButton, &QAbstractButton::clicked, this, &QDialog::reject);
}
diff --git a/src/designer/src/designer/doc/snippets/multipleinheritance/imagedialog.h b/src/designer/src/designer/doc/snippets/multipleinheritance/imagedialog.h
index 9a4513b96..f6bc3b62c 100644
--- a/src/designer/src/designer/doc/snippets/multipleinheritance/imagedialog.h
+++ b/src/designer/src/designer/doc/snippets/multipleinheritance/imagedialog.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef IMAGEDIALOG_H
#define IMAGEDIALOG_H
@@ -58,7 +11,7 @@ class ImageDialog : public QDialog, private Ui::ImageDialog
Q_OBJECT
public:
- ImageDialog(QWidget *parent = 0);
+ explicit ImageDialog(QWidget *parent = nullptr);
};
#endif
diff --git a/src/designer/src/designer/doc/snippets/multipleinheritance/main.cpp b/src/designer/src/designer/doc/snippets/multipleinheritance/main.cpp
index 95daf2dec..5c05efddb 100644
--- a/src/designer/src/designer/doc/snippets/multipleinheritance/main.cpp
+++ b/src/designer/src/designer/doc/snippets/multipleinheritance/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "imagedialog.h"
diff --git a/src/designer/src/designer/doc/snippets/multipleinheritance/multipleinheritance.pro b/src/designer/src/designer/doc/snippets/multipleinheritance/multipleinheritance.pro
index fba94debf..6937e8e54 100644
--- a/src/designer/src/designer/doc/snippets/multipleinheritance/multipleinheritance.pro
+++ b/src/designer/src/designer/doc/snippets/multipleinheritance/multipleinheritance.pro
@@ -1,4 +1,5 @@
TEMPLATE = app
+QT += widgets
FORMS = imagedialog.ui
HEADERS = imagedialog.h
SOURCES = imagedialog.cpp \
diff --git a/src/designer/src/designer/doc/snippets/noautoconnection/CMakeLists.txt b/src/designer/src/designer/doc/snippets/noautoconnection/CMakeLists.txt
new file mode 100644
index 000000000..967bc640c
--- /dev/null
+++ b/src/designer/src/designer/doc/snippets/noautoconnection/CMakeLists.txt
@@ -0,0 +1,24 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(noautoconnection LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTOUIC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_add_executable(noautoconnection
+ imagedialog.cpp imagedialog.h imagedialog.ui main.cpp)
+
+set_target_properties(noautoconnection PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(noautoconnection PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::Widgets
+)
diff --git a/src/designer/src/designer/doc/snippets/noautoconnection/imagedialog.cpp b/src/designer/src/designer/doc/snippets/noautoconnection/imagedialog.cpp
index 4e7569af6..e29c41095 100644
--- a/src/designer/src/designer/doc/snippets/noautoconnection/imagedialog.cpp
+++ b/src/designer/src/designer/doc/snippets/noautoconnection/imagedialog.cpp
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include <QtGui>
+#include <QMessageBox>
#include "imagedialog.h"
@@ -68,19 +21,20 @@ ImageDialog::ImageDialog(QWidget *parent)
colorDepthCombo->addItem(tr("65536 colors (16 bits per pixel)"));
colorDepthCombo->addItem(tr("16 million colors (24 bits per pixel)"));
- connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
+ connect(cancelButton, &QAbstractButton::clicked, this, &QDialog::reject);
//! [1]
- connect(okButton, SIGNAL(clicked()), this, SLOT(checkValues()));
+ connect(okButton, &QAbstractButton::clicked, this, &ImageDialog::checkValues);
}
//! [1]
//! [2]
void ImageDialog::checkValues()
{
- if (nameLineEdit->text().isEmpty())
- (void) QMessageBox::information(this, tr("No Image Name"),
+ if (nameLineEdit->text().isEmpty()) {
+ QMessageBox::information(this, tr("No Image Name"),
tr("Please supply a name for the image."), QMessageBox::Cancel);
- else
+ } else {
accept();
+ }
}
//! [2]
diff --git a/src/designer/src/designer/doc/snippets/noautoconnection/imagedialog.h b/src/designer/src/designer/doc/snippets/noautoconnection/imagedialog.h
index d279be94e..611b90119 100644
--- a/src/designer/src/designer/doc/snippets/noautoconnection/imagedialog.h
+++ b/src/designer/src/designer/doc/snippets/noautoconnection/imagedialog.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef IMAGEDIALOG_H
#define IMAGEDIALOG_H
@@ -59,7 +12,7 @@ class ImageDialog : public QDialog, private Ui::ImageDialog
Q_OBJECT
public:
- ImageDialog(QWidget *parent = 0);
+ explicit ImageDialog(QWidget *parent = nullptr);
private slots:
void checkValues();
diff --git a/src/designer/src/designer/doc/snippets/noautoconnection/main.cpp b/src/designer/src/designer/doc/snippets/noautoconnection/main.cpp
index 95daf2dec..5c05efddb 100644
--- a/src/designer/src/designer/doc/snippets/noautoconnection/main.cpp
+++ b/src/designer/src/designer/doc/snippets/noautoconnection/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "imagedialog.h"
diff --git a/src/designer/src/designer/doc/snippets/noautoconnection/noautoconnection.pro b/src/designer/src/designer/doc/snippets/noautoconnection/noautoconnection.pro
index fba94debf..6937e8e54 100644
--- a/src/designer/src/designer/doc/snippets/noautoconnection/noautoconnection.pro
+++ b/src/designer/src/designer/doc/snippets/noautoconnection/noautoconnection.pro
@@ -1,4 +1,5 @@
TEMPLATE = app
+QT += widgets
FORMS = imagedialog.ui
HEADERS = imagedialog.h
SOURCES = imagedialog.cpp \
diff --git a/src/designer/src/designer/doc/snippets/plugins/doc_src_qtdesigner.cpp b/src/designer/src/designer/doc/snippets/plugins/doc_src_qtdesigner.cpp
index 1f76bc71d..6ac5db04f 100644
--- a/src/designer/src/designer/doc/snippets/plugins/doc_src_qtdesigner.cpp
+++ b/src/designer/src/designer/doc/snippets/plugins/doc_src_qtdesigner.cpp
@@ -1,60 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//! [0]
-#include <QtDesigner>
-//! [0]
-
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [2]
-QDesignerMemberSheetExtension *memberSheet = 0;
+QDesignerMemberSheetExtension *memberSheet = nullptr;
QExtensionManager manager = formEditor->extensionManager();
memberSheet = qt_extension<QDesignerMemberSheetExtension*>(manager, widget);
@@ -276,11 +224,11 @@ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetInterface")
//! [15]
-QDesignerPropertySheetExtension *propertySheet = 0;
+QDesignerPropertySheetExtension *propertySheet = nullptr;
QExtensionManager manager = formEditor->extensionManager();
propertySheet = qt_extension<QDesignerPropertySheetExtension*>(manager, widget);
-int index = propertySheet->indexOf(QLatin1String("margin"));
+int index = propertySheet->indexOf(u"margin"_s);
propertySheet->setProperty(index, 10);
propertySheet->setChanged(index, true);
diff --git a/src/designer/src/designer/doc/snippets/plugins/doc_src_qtdesigner.pro b/src/designer/src/designer/doc/snippets/plugins/doc_src_qtdesigner.pro
deleted file mode 100644
index 45f3af52f..000000000
--- a/src/designer/src/designer/doc/snippets/plugins/doc_src_qtdesigner.pro
+++ /dev/null
@@ -1,53 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#! [1]
-CONFIG += designer
-#! [1]
diff --git a/src/designer/src/designer/doc/snippets/singleinheritance/CMakeLists.txt b/src/designer/src/designer/doc/snippets/singleinheritance/CMakeLists.txt
new file mode 100644
index 000000000..ac5c2be1a
--- /dev/null
+++ b/src/designer/src/designer/doc/snippets/singleinheritance/CMakeLists.txt
@@ -0,0 +1,24 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(singleinheritanceinheritance LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTOUIC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_add_executable(singleinheritanceinheritance
+ imagedialog.cpp imagedialog.h imagedialog.ui main.cpp)
+
+set_target_properties(singleinheritanceinheritance PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(singleinheritanceinheritance PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::Widgets
+)
diff --git a/src/designer/src/designer/doc/snippets/singleinheritance/imagedialog.cpp b/src/designer/src/designer/doc/snippets/singleinheritance/imagedialog.cpp
index d6912dc7f..4cf642d17 100644
--- a/src/designer/src/designer/doc/snippets/singleinheritance/imagedialog.cpp
+++ b/src/designer/src/designer/doc/snippets/singleinheritance/imagedialog.cpp
@@ -1,54 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtGui>
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "imagedialog.h"
@@ -64,6 +15,6 @@ ImageDialog::ImageDialog(QWidget *parent)
ui.colorDepthCombo->addItem(tr("65536 colors (16 bits per pixel)"));
ui.colorDepthCombo->addItem(tr("16 million colors (24 bits per pixel)"));
- connect(ui.okButton, SIGNAL(clicked()), this, SLOT(accept()));
- connect(ui.cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
+ connect(ui.okButton, &QAbstractButton::clicked, this, &QDialog::accept);
+ connect(ui.cancelButton, &QAbstractButton::clicked, this, &QDialog::reject);
}
diff --git a/src/designer/src/designer/doc/snippets/singleinheritance/imagedialog.h b/src/designer/src/designer/doc/snippets/singleinheritance/imagedialog.h
index 53657df1a..6fd2df0e0 100644
--- a/src/designer/src/designer/doc/snippets/singleinheritance/imagedialog.h
+++ b/src/designer/src/designer/doc/snippets/singleinheritance/imagedialog.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef IMAGEDIALOG_H
#define IMAGEDIALOG_H
@@ -58,7 +11,7 @@ class ImageDialog : public QDialog
Q_OBJECT
public:
- ImageDialog(QWidget *parent = 0);
+ explicit ImageDialog(QWidget *parent = nullptr);
private:
Ui::ImageDialog ui;
diff --git a/src/designer/src/designer/doc/snippets/singleinheritance/main.cpp b/src/designer/src/designer/doc/snippets/singleinheritance/main.cpp
index 95daf2dec..5c05efddb 100644
--- a/src/designer/src/designer/doc/snippets/singleinheritance/main.cpp
+++ b/src/designer/src/designer/doc/snippets/singleinheritance/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "imagedialog.h"
diff --git a/src/designer/src/designer/doc/snippets/singleinheritance/singleinheritance.pro b/src/designer/src/designer/doc/snippets/singleinheritance/singleinheritance.pro
index fba94debf..6937e8e54 100644
--- a/src/designer/src/designer/doc/snippets/singleinheritance/singleinheritance.pro
+++ b/src/designer/src/designer/doc/snippets/singleinheritance/singleinheritance.pro
@@ -1,4 +1,5 @@
TEMPLATE = app
+QT += widgets
FORMS = imagedialog.ui
HEADERS = imagedialog.h
SOURCES = imagedialog.cpp \
diff --git a/src/designer/src/designer/doc/snippets/uitools/calculatorform/CMakeLists.txt b/src/designer/src/designer/doc/snippets/uitools/calculatorform/CMakeLists.txt
new file mode 100644
index 000000000..ace6f3d1d
--- /dev/null
+++ b/src/designer/src/designer/doc/snippets/uitools/calculatorform/CMakeLists.txt
@@ -0,0 +1,26 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#! [0]
+cmake_minimum_required(VERSION 3.16)
+project(calculatorform LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTOUIC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_add_executable(calculatorform
+ calculatorform.ui main.cpp)
+
+set_target_properties(calculatorform PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(calculatorform PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::Widgets
+)
+#! [0]
diff --git a/src/designer/src/designer/doc/snippets/uitools/calculatorform/main.cpp b/src/designer/src/designer/doc/snippets/uitools/calculatorform/main.cpp
index e34c812a3..8e9c32bb0 100644
--- a/src/designer/src/designer/doc/snippets/uitools/calculatorform/main.cpp
+++ b/src/designer/src/designer/doc/snippets/uitools/calculatorform/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
#include "ui_calculatorform.h"
diff --git a/src/designer/src/designer/doc/src/designer-custom-widgets.qdoc b/src/designer/src/designer/doc/src/designer-custom-widgets.qdoc
index 51c749c53..d7cc6a0fa 100644
--- a/src/designer/src/designer/doc/src/designer-custom-widgets.qdoc
+++ b/src/designer/src/designer/doc/src/designer-custom-widgets.qdoc
@@ -1,33 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\page qtdesigner-components.html
- \title Creating and Using Components for Qt Designer
+ \title Creating and Using Components for Qt Widgets Designer
\brief How to create and use custom widget plugins.
\ingroup best-practices
@@ -127,5 +103,5 @@
For a complete example using QUiLoader, see
the \l {calculatorbuilder}{Calculator Builder example}.
- \sa {Qt Designer Manual}, {Qt UI Tools}
+ \sa {Qt Widgets Designer Manual}, {Qt UI Tools}
*/
diff --git a/src/designer/src/designer/doc/src/designer-examples.qdoc b/src/designer/src/designer/doc/src/designer-examples.qdoc
index 72f7fb500..6eb9dc8a0 100644
--- a/src/designer/src/designer/doc/src/designer-examples.qdoc
+++ b/src/designer/src/designer/doc/src/designer-examples.qdoc
@@ -1,42 +1,18 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\group examples-designer
\ingroup all-examples
- \title Qt Designer Examples
- \brief Using Qt Designer to build your UI.
+ \title Qt Widgets Designer Examples
+ \brief Using \QD to build your UI.
- Qt Designer is a capable graphical user interface designer that lets you
+ \QD is a capable graphical user interface designer that lets you
create and configure forms without writing code. GUIs created with
- Qt Designer can be compiled into an application or created at run-time.
+ \QD can be compiled into an application or created at run-time.
- The following examples illustrate how to create and use Qt Designer forms
- and how to create Qt Designer custom widget plugins.
+ The following examples illustrate how to create and use \QD forms
+ and how to create \QD custom widget plugins.
*/
/*
@@ -44,11 +20,10 @@
\li \l{arthurplugin}{Arthur Plugin}
\li \l{calculatorbuilder}{Calculator Builder}\raisedaster
\li \l{calculatorform}{Calculator Form}\raisedaster
+ \li \l{calculatorform_mi}{Calculator Form/Multiple Inheritance}\raisedaster
\li \l{customwidgetplugin}{Custom Widget Plugin}\raisedaster
\li \l{taskmenuextension}{Task Menu Extension}\raisedaster
\li \l{containerextension}{Container Extension}\raisedaster
- \li \l{worldtimeclockbuilder}{World Time Clock Builder}\raisedaster
- \li \l{worldtimeclockplugin}{World Time Clock Plugin}\raisedaster
\endlist
Examples marked with an asterisk (*) are fully documented.
diff --git a/src/designer/src/designer/doc/src/designer-manual.qdoc b/src/designer/src/designer/doc/src/designer-manual.qdoc
index dc91e77ba..402c786ce 100644
--- a/src/designer/src/designer/doc/src/designer-manual.qdoc
+++ b/src/designer/src/designer/doc/src/designer-manual.qdoc
@@ -1,89 +1,68 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\page qtdesigner-manual.html
- \title Qt Designer Manual
+ \title Qt Widgets Designer Manual
\ingroup qttools
- \keyword Qt Designer
+ \keyword Qt Widgets Designer
\QD is the Qt tool for designing and building graphical user
- interfaces (GUIs) with \l {Qt Widgets}. You can compose and customize your
- windows or dialogs in a what-you-see-is-what-you-get (WYSIWYG) manner, and
- test them using different styles and resolutions.
-
- Widgets and forms created with \QD integrate seamlessly with programmed
- code, using Qt's signals and slots mechanism, so that you can easily assign
- behavior to graphical elements. All properties set in \QD can be changed
- dynamically within the code. Furthermore, features like widget promotion
- and custom plugins allow you to use your own components with \QD.
-
- \note You have the option of using \l {Qt Quick} for user interface
+ interfaces (GUIs) with \l {Qt Widgets}. For user interface design with
+ \l {Qt Quick}, see \l {Qt Design Studio Manual} {Qt Design Studio}.
+
+ You can compose and customize your windows or dialogs in a
+ what-you-see-is-what-you-get (WYSIWYG) manner, and test them using different
+ styles and resolutions. Widgets and forms created with \QD integrate
+ seamlessly with programmed code, using Qt's signals and slots mechanism, so
+ that you can easily assign behavior to graphical elements. All properties
+ set in \QD can be changed dynamically within the code. Furthermore, features
+ like widget promotion and custom plugins allow you to use your own
+ components with \QD.
+
+ \note You have the option of using \l {Qt Quick} and
+ \l {Qt Design Studio Manual}{Qt Design Studio} for user interface
design rather than widgets. It is a much easier way to write many kinds of
applications. It enables a completely customizable appearance,
- touch-reactive elements, and smooth animated transitions, backed up by the
- power of OpenGL graphics acceleration.
+ touch-reactive elements, and smooth animated transitions, taking advantage
+ of hardware acceleration.
If you are new to \QD, you can take a look at the
- \l{Getting To Know Qt Designer} document. For a quick tutorial on how to
- use \QD, refer to \l{A Quick Start to Qt Designer}.
+ \l{Getting To Know Qt Widgets Designer} document. For a quick tutorial on how to
+ use \QD, refer to \l{A Quick Start to Qt Widgets Designer}.
\image designer-multiple-screenshot.png
\section1 Table of Contents
\list
- \li \l{A Quick Start to Qt Designer}
- \li \l{Qt Designer's Editing Modes}
+ \li \l{A Quick Start to Qt Widgets Designer}
+ \li \l{Qt Widgets Designer's Editing Modes}
\list
- \li \l{Qt Designer's Widget Editing Mode}{Widget Editing Mode}
- \li \l{Qt Designer's Signals and Slots Editing Mode}
+ \li \l{Qt Widgets Designer's Widget Editing Mode}{Widget Editing Mode}
+ \li \l{Qt Widgets Designer's Signals and Slots Editing Mode}
{Signals and Slots Editing Mode}
- \li \l{Qt Designer's Buddy Editing Mode}
+ \li \l{Qt Widgets Designer's Buddy Editing Mode}
{Buddy Editing Mode}
- \li \l{Qt Designer's Tab Order Editing Mode}
+ \li \l{Qt Widgets Designer's Tab Order Editing Mode}
{Tab Order Editing Mode}
\endlist
- \li \l{Using Layouts in Qt Designer}
- \li \l{Saving, Previewing and Printing Forms in Qt Designer}
- \li \l{Using Containers in Qt Designer}
- \li \l{Creating Main Windows in Qt Designer}
- \li \l{Editing Resources with Qt Designer}
- \li \l{Using Stylesheets with Qt Designer}
+ \li \l{Using Layouts in Qt Widgets Designer}
+ \li \l{Saving, Previewing and Printing Forms in Qt Widgets Designer}
+ \li \l{Using Containers in Qt Widgets Designer}
+ \li \l{Creating Main Windows in Qt Widgets Designer}
+ \li \l{Editing Resources with Qt Widgets Designer}
+ \li \l{Using Stylesheets with Qt Widgets Designer}
\li \l{Using a Designer UI File in Your C++ Application}
\li \l{Using a Designer UI File in Your Qt for Python Application}
\li Advanced Use
\list
- \li \l{Customizing Qt Designer Forms}
- \li \l{Using Custom Widgets with Qt Designer}
- \li \l{Creating Custom Widgets for Qt Designer}
+ \li \l{Customizing Qt Widgets Designer Forms}
+ \li \l{Using Custom Widgets with Qt Widgets Designer}
+ \li \l{Creating Custom Widgets for Qt Widgets Designer}
\li \l{Creating Custom Widget Extensions}
- \li \l{Qt Designer's UI File Format}
+ \li \l{Qt Widgets Designer's UI File Format}
\endlist
\endlist
*/
@@ -93,7 +72,7 @@
\page designer-to-know.html
- \title Getting to Know Qt Designer
+ \title Getting to Know Qt Widgets Designer
\image designer-screenshot.png
@@ -129,7 +108,7 @@
\table
\row
\li \inlineimage designer-main-window.png
- \li \b{Qt Designer's Main Window}
+ \li \b{Qt Widgets Designer's Main Window}
The menu bar provides all the standard actions for managing forms,
using the clipboard, and accessing application-specific help.
@@ -153,7 +132,7 @@
\table
\row
\li \inlineimage designer-widget-box.png
- \li \b{Qt Designer's Widget Box}
+ \li \b{Qt Widgets Designer's Widget Box}
The widget box provides a selection of standard Qt widgets, layouts,
and other objects that can be used to create user interfaces on forms.
@@ -162,7 +141,7 @@
You can display all of the available objects in a category by clicking
on the handle next to the category label. When in
- \l{Qt Designer's Widget Editing Mode}{Widget Editing
+ \l{Qt Widgets Designer's Widget Editing Mode}{Widget Editing
Mode}, you can add objects to a form by dragging the appropriate items
from the widget box onto the form, and dropping them in the required
locations.
@@ -260,7 +239,7 @@
\page designer-quick-start.html
- \title A Quick Start to Qt Designer
+ \title A Quick Start to Qt Widgets Designer
Using \QD involves \b four basic steps:
@@ -396,15 +375,15 @@
/*!
\page designer-editing-mode.html
- \previouspage Getting to Know Qt Designer
- \nextpage Using Layouts in Qt Designer
+ \previouspage Getting to Know Qt Widgets Designer
+ \nextpage Using Layouts in Qt Widgets Designer
- \title Qt Designer's Editing Modes
+ \title Qt Widgets Designer's Editing Modes
- \QD provides four editing modes: \l{Qt Designer's Widget Editing Mode}
- {Widget Editing Mode}, \l{Qt Designer's Signals and Slots Editing Mode}
- {Signals and Slots Editing Mode}, \l{Qt Designer's Buddy Editing Mode}
- {Buddy Editing Mode} and \l{Qt Designer's Tab Order Editing Mode}
+ \QD provides four editing modes: \l{Qt Widgets Designer's Widget Editing Mode}
+ {Widget Editing Mode}, \l{Qt Widgets Designer's Signals and Slots Editing Mode}
+ {Signals and Slots Editing Mode}, \l{Qt Widgets Designer's Buddy Editing Mode}
+ {Buddy Editing Mode} and \l{Qt Widgets Designer's Tab Order Editing Mode}
{Tab Order Editing Mode}. When working with \QD, you will always be in one
of these four modes. To switch between modes, simply select it from the
\gui{Edit} menu or the toolbar. The table below describes these modes in
@@ -414,27 +393,27 @@
\header \li \li \b{Editing Modes}
\row
\li \inlineimage designer-widget-tool.png
- \li In \l{Qt Designer's Widget Editing Mode}{Edit} mode, we can
+ \li In \l{Qt Widgets Designer's Widget Editing Mode}{Edit} mode, we can
change the appearance of the form, add layouts, and edit the
properties of each widget. To switch to this mode, press
\key{F3}. This is \QD's default mode.
\row
\li \inlineimage designer-connection-tool.png
- \li In \l{Qt Designer's Signals and Slots Editing Mode}
+ \li In \l{Qt Widgets Designer's Signals and Slots Editing Mode}
{Signals and Slots} mode, we can connect widgets together using
Qt's signals and slots mechanism. To switch to this mode, press
\key{F4}.
\row
\li \inlineimage designer-buddy-tool.png
- \li In \l{Qt Designer's Buddy Editing Mode}{Buddy Editing Mode},
+ \li In \l{Qt Widgets Designer's Buddy Editing Mode}{Buddy Editing Mode},
buddy widgets can be assigned to label widgets to help them
handle keyboard focus correctly.
\row
\li \inlineimage designer-tab-order-tool.png
- \li In \l{Qt Designer's Tab Order Editing Mode}
+ \li In \l{Qt Widgets Designer's Tab Order Editing Mode}
{Tab Order Editing Mode}, we can set the order in which widgets
receive the keyboard focus.
\endtable
@@ -444,10 +423,10 @@
/*!
\page designer-widget-mode.html
- \previouspage Qt Designer's Editing Modes
- \nextpage Qt Designer's Signals and Slots Editing Mode
+ \previouspage Qt Widgets Designer's Editing Modes
+ \nextpage Qt Widgets Designer's Signals and Slots Editing Mode
- \title Qt Designer's Widget Editing Mode
+ \title Qt Widgets Designer's Widget Editing Mode
\image designer-editing-mode.png
@@ -490,7 +469,7 @@
The widget box contains objects in a number of different categories, all of
which can be placed on the form as required. The only objects that require
a little more preparation are the \gui Container widgets. These are
- described in further detail in the \l{Using Containers in Qt Designer}
+ described in further detail in the \l{Using Containers in Qt Widgets Designer}
chapter.
@@ -683,10 +662,10 @@
/*!
\page designer-layouts.html
- \previouspage Qt Designer's Widget Editing Mode
- \nextpage Qt Designer's Signals and Slots Editing Mode
+ \previouspage Qt Widgets Designer's Widget Editing Mode
+ \nextpage Qt Widgets Designer's Signals and Slots Editing Mode
- \title Using Layouts in Qt Designer
+ \title Using Layouts in Qt Widgets Designer
Before a form can be used, the objects on the form need to be placed into
layouts. This ensures that the objects will be displayed properly when the
@@ -829,7 +808,7 @@
Although QSplitter is a container widget, \QD treats splitter objects as
layouts that are applied to existing widgets. To place a group of widgets
into a splitter, select them
- \l{Qt Designer's Widget Editing Mode#SelectingObjects}{as described here}
+ \l{Qt Widgets Designer's Widget Editing Mode#SelectingObjects}{as described here}
then apply the splitter layout by using the appropriate toolbar button,
keyboard shortcut, or \gui{Lay out} context menu entry.
@@ -886,9 +865,9 @@
/*!
\page designer-preview.html
- \previouspage Using Layouts in Qt Designer
- \nextpage Qt Designer's Buddy Editing Mode
- \title Saving, Previewing and Printing Forms in Qt Designer
+ \previouspage Using Layouts in Qt Widgets Designer
+ \nextpage Qt Widgets Designer's Buddy Editing Mode
+ \title Saving, Previewing and Printing Forms in Qt Widgets Designer
Although \QD's forms are accurate representations of the components being
edited, it is useful to preview the final appearance while editing. This
@@ -966,11 +945,11 @@
/*!
\page designer-connection-mode.html
- \previouspage Using Layouts in Qt Designer
- \nextpage Qt Designer's Buddy Editing Mode
+ \previouspage Using Layouts in Qt Widgets Designer
+ \nextpage Qt Widgets Designer's Buddy Editing Mode
- \title Qt Designer's Signals and Slots Editing Mode
+ \title Qt Widgets Designer's Signals and Slots Editing Mode
\image designer-connection-mode.png
@@ -1099,10 +1078,10 @@
/*!
\page designer-buddy-mode.html
- \previouspage Qt Designer's Signals and Slots Editing Mode
- \nextpage Qt Designer's Tab Order Editing Mode
+ \previouspage Qt Widgets Designer's Signals and Slots Editing Mode
+ \nextpage Qt Widgets Designer's Tab Order Editing Mode
- \title Qt Designer's Buddy Editing Mode
+ \title Qt Widgets Designer's Buddy Editing Mode
\image designer-buddy-mode.png
@@ -1116,7 +1095,7 @@
To enter buddy editing mode, open the \gui Edit menu and select
\gui{Edit Buddies}. This mode presents the widgets on the form in a similar
- way to \l{Qt Designer's Signals and Slots Editing Mode}{signals and slots
+ way to \l{Qt Widgets Designer's Signals and Slots Editing Mode}{signals and slots
editing mode} but in this mode, connections must start at label widgets.
Ideally, you should connect each label widget that provides a shortcut with
a suitable input widget, such as a QLineEdit.
@@ -1152,10 +1131,10 @@
/*!
\page designer-tab-order.html
- \previouspage Qt Designer's Buddy Editing Mode
- \nextpage Using Containers in Qt Designer
+ \previouspage Qt Widgets Designer's Buddy Editing Mode
+ \nextpage Using Containers in Qt Widgets Designer
- \title Qt Designer's Tab Order Editing Mode
+ \title Qt Widgets Designer's Tab Order Editing Mode
\image designer-tab-order-mode.png
@@ -1200,11 +1179,11 @@
/*!
\page designer-using-containers.html
- \previouspage Qt Designer's Tab Order Editing Mode
- \nextpage Creating Main Windows in Qt Designer
+ \previouspage Qt Widgets Designer's Tab Order Editing Mode
+ \nextpage Creating Main Windows in Qt Widgets Designer
- \title Using Containers in Qt Designer
+ \title Using Containers in Qt Widgets Designer
Container widgets provide high level control over groups of objects on a
form. They can be used to perform a variety of functions, such as managing
@@ -1329,7 +1308,7 @@
Although dock widgets can be added to any type of form, they are
typically used with forms created from the
- \l{Creating Main Windows in Qt Designer}{main window template}.
+ \l{Creating Main Windows in Qt Widgets Designer}{main window template}.
\endtable
*/
@@ -1337,10 +1316,10 @@
/*!
\page designer-creating-mainwindows.html
- \previouspage Using Containers in Qt Designer
- \nextpage Editing Resources with Qt Designer
+ \previouspage Using Containers in Qt Widgets Designer
+ \nextpage Editing Resources with Qt Widgets Designer
- \title Creating Main Windows in Qt Designer
+ \title Creating Main Windows in Qt Widgets Designer
\QD can be used to create user interfaces for different purposes, and
it provides different kinds of form templates for each user interface. The
@@ -1372,9 +1351,9 @@
will not be displayed in the preview or in the finished window.
Once created, the properties of a menu can be accessed using the
- \l{Qt Designer's Widget Editing Mode#The Property Editor}{Property Editor},
+ \l{Qt Widgets Designer's Widget Editing Mode#The Property Editor}{Property Editor},
and each menu can be accessed for this purpose via the
- \l{Qt Designer's Widget Editing Mode#The Object Inspector}{The Object Inspector}.
+ \l{Qt Widgets Designer's Widget Editing Mode#The Object Inspector}{The Object Inspector}.
Existing menus can be removed by opening a context menu over the label in
the menu bar, and selecting \gui{Remove Menu 'menu_name'}.
@@ -1555,11 +1534,9 @@
\section1 Dock Widgets
- Since dock widgets are \l{Using Containers in Qt Designer}
- {container widgets}, they can be added to a form in the usual way. Once
- added to a form, dock widgets are not placed in any particular dock area by
- default; you need to set the \gui{docked} property to true for each widget
- and choose an appropriate value for its \gui{dockWidgetArea} property.
+ Dock widgets are \l{Using Containers in Qt Widgets Designer}{container widgets}
+ as well. They can be added to a form by dropping them onto the desired
+ dock area.
\target AddingADockWidget
@@ -1591,10 +1568,10 @@
/*!
\page designer-resources.html
- \previouspage Creating Main Windows in Qt Designer
- \nextpage Using Stylesheets with Qt Designer
+ \previouspage Creating Main Windows in Qt Widgets Designer
+ \nextpage Using Stylesheets with Qt Widgets Designer
- \title Editing Resources with Qt Designer
+ \title Editing Resources with Qt Widgets Designer
\image designer-resources-editing.png
@@ -1695,10 +1672,10 @@ pixmap property in the property editor.
/*!
\page designer-stylesheet.html
- \previouspage Editing Resources with Qt Designer
+ \previouspage Editing Resources with Qt Widgets Designer
\nextpage Using a Designer UI File in Your C++ Application
- \title Using Stylesheets with Qt Designer
+ \title Using Stylesheets with Qt Widgets Designer
Since Qt 4.2, it is possible to edit stylesheets in \QD with the stylesheet
editor.
@@ -1721,13 +1698,13 @@ pixmap property in the property editor.
/*!
\page designer-using-a-ui-file.html
- \previouspage Using Stylesheets with Qt Designer
+ \previouspage Using Stylesheets with Qt Widgets Designer
\nextpage Using a Designer UI File in Your Qt for Python Application
\keyword Using a Designer UI File in Your Application
\title Using a Designer UI File in Your C++ Application
- Qt Designer UI files represent the widget tree of the form in XML format. The
+ Qt Widgets Designer UI files represent the widget tree of the form in XML format. The
forms can be processed:
\list
@@ -1775,7 +1752,7 @@ pixmap property in the property editor.
\endlist
To demonstrate, we create a simple Calculator Form application. It is based on the
- original \l{Calculator Form Example}{Calculator Form} example.
+ original \l{Calculator Form} example.
The application consists of one source file, \c main.cpp and a UI
file.
@@ -1784,10 +1761,19 @@ pixmap property in the property editor.
\image directapproach-calculatorform.png
- We will use \c qmake to build the executable, so we need to write a
- \c{.pro} file:
+ When using \c CMake to build the executable, a \c{CMakeLists.txt}
+ file is required:
- \snippet calculatorform/calculatorform.pro 0
+ \snippet uitools/calculatorform/CMakeLists.txt 0
+
+ The form is listed among the C++ source files in \c qt_add_executable().
+ The option \c CMAKE_AUTOUIC tells \c CMake to run the \c uic tool
+ to create a \c ui_calculatorform.h file that can be used
+ by the source files.
+
+ When using \c qmake to build the executable, a \c{.pro} file is required:
+
+ \snippet uitools/calculatorform/calculatorform.pro 0
The special feature of this file is the \c FORMS declaration that tells
\c qmake which files to process with \c uic. In this case, the
@@ -1795,8 +1781,8 @@ pixmap property in the property editor.
that can be used by any file listed in the \c SOURCES declaration.
\note You can use Qt Creator to create the Calculator Form project. It
- automatically generates the main.cpp, UI, and .pro files, which you can
- then modify.
+ automatically generates the main.cpp, UI, and a project file for the
+ desired build tool, which you can modify.
\section2 The Direct Approach
@@ -1843,16 +1829,19 @@ pixmap property in the property editor.
interface and other objects in your application.
The generated \c{Ui::CalculatorForm} structure is a member of the class.
- This approach is used in the \l{Calculator Form Example}{Calculator Form}
- example.
+ This approach is used in the \l{Calculator Form} example.
To ensure that we can use the user interface, we need to include the header
file that \c uic generates before referring to \c{Ui::CalculatorForm}:
\snippet calculatorform/calculatorform.h 0
- This means that the \c{.pro} file must be updated to include
- \c{calculatorform.h}:
+ The project file must be updated to include \c{calculatorform.h}.
+ For \c CMake:
+
+ \snippet calculatorform/CMakeLists.txt 1
+
+ For \c qmake:
\snippet calculatorform/calculatorform.pro 0
@@ -1937,20 +1926,17 @@ pixmap property in the property editor.
and enables signal and slot connections to be made in the usual way with
the \l{QObject::connect()}{connect()} function.
- This approach is used in the \l{Multiple Inheritance Example}
- {Multiple Inheritance} example.
-
We need to include the header file that \c uic generates from the
\c calculatorform.ui file, as follows:
- \snippet ../uitools/multipleinheritance/calculatorform.h 0
+ \snippet ../designer/calculatorform_mi/calculatorform.h 0
The class is defined in a similar way to the one used in the
\l{The Single Inheritance Approach}{single inheritance approach}, except that
this time we inherit from \e{both} QWidget and \c{Ui::CalculatorForm},
as follows:
- \snippet ../uitools/multipleinheritance/calculatorform.h 1
+ \snippet ../designer/calculatorform_mi/calculatorform.h 1
We inherit \c{Ui::CalculatorForm} privately to ensure that the user
interface objects are private in our subclass. We can also inherit it with
@@ -1961,7 +1947,7 @@ pixmap property in the property editor.
constructor used in the \l{The Single Inheritance Approach}
{single inheritance} example:
- \snippet ../uitools/multipleinheritance/calculatorform.cpp 0
+ \snippet ../designer/calculatorform_mi/calculatorform.cpp 0
In this case, the widgets used in the user interface can be accessed in the
same say as a widget created in code by hand. We no longer require the
@@ -1999,10 +1985,15 @@ pixmap property in the property editor.
A resource file containing a UI file is required to process forms at
run time. Also, the application needs to be configured to use the QtUiTools
- module. This is done by including the following declaration in a \c qmake
+ module. This is done by including the following declarations in a \c CMake
project file, ensuring that the application is compiled and linked
appropriately.
+ \snippet ../uitools/textfinder/CMakeLists.txt 0
+ \snippet ../uitools/textfinder/CMakeLists.txt 1
+
+ For \c qmake:
+
\snippet manual/doc_src_designer-manual.pro 0
The QUiLoader class provides a form loader object to construct the user
@@ -2016,7 +2007,7 @@ pixmap property in the property editor.
\snippet manual/doc_src_designer-manual.cpp 1
The QUiLoader::load() function is invoked as shown in this code from the
- \l{Text Finder Example}{Text Finder} example:
+ \l{Text Finder} example:
\snippet ../uitools/textfinder/textfinder.cpp 4
@@ -2087,13 +2078,17 @@ pixmap property in the property editor.
\snippet manual/doc_src_designer-manual.cpp 2
+ \note When renaming widgets in the form, the slot names need to be
+ adapted accordingly, which can become a maintenance problem.
+ For this reason, we recommend against using this in new code.
+
Using this convention, we can define and implement a slot that responds to
mouse clicks on the \gui OK button:
\snippet autoconnection/imagedialog.h 0
Another example of automatic signal and slot connection would be the
- \l{Text Finder Example}{Text Finder} with its \c{on_findButton_clicked()}
+ \l{Text Finder} with its \c{on_findButton_clicked()}
slot.
We use QMetaObject's system to enable signal and slot connections:
@@ -2116,7 +2111,7 @@ pixmap property in the property editor.
/*!
\page designer-using-a-ui-file-python.html
\previouspage Using a Designer UI File in Your C++ Application
- \nextpage Using Custom Widgets with Qt Designer
+ \nextpage Using Custom Widgets with Qt Widgets Designer
\title Using a Designer UI File in Your Qt for Python Application
@@ -2198,14 +2193,78 @@ pixmap property in the property editor.
widget.show()
sys.exit(app.exec_())
\endcode
+
+ \section1 Resource imports
+
+ \section2 Single directory usage
+
+ When using icons from \l{The Qt Resource System}{resource files}, say
+ \c resources.qrc, \c uic will generate an import of the form:
+
+ \code
+ import resources_rc
+ \endcode
+
+ This assumes that a file \c resources_rc.py generated by calling the
+ \l {Resource Compiler (rcc)} tool (passing the \c {-g python}
+ command line option) exists in the same directory as the form source.
+
+ \c uic has a command line option \c --rc-prefix causing the \c rc indicator
+ to be prepended:
+
+ \code
+ import rc_resources
+ \endcode
+
+ The command line option \c --from-imports causes the imports to be generated
+ relative to '.':
+
+ \code
+ from . import resources_rc
+ \endcode
+
+ \section2 Directory trees
+
+ Some projects have more complicated directory trees, for example:
+
+ \badcode
+ project
+ resources (resources.qrc)
+ ui (.ui files)
+ \endcode
+
+ The resource file is then not in the same directory as the form source
+ and the \c .ui files typically have relative paths to the resource files:
+
+ \badcode
+ <include location="../resources/resources.qrc"/>
+ \endcode
+
+ In this case, the command line option \c --absolute-imports can be used
+ to generate an absolute import in Python, resulting in:
+
+ \code
+ import resources.resources_rc
+ \endcode
+
+ based on the assumption that \c .. is the root directory of the project
+ contained in the Python import path list.
+
+ For more deeply nested trees, it is possible to use the
+ command line option \c {--python-paths <path list>} to pass a Python
+ import path list. \c uic will then try to determine the project root
+ by matching the form file path against the path components.
+
+ If \c {--python-paths} is not given, the environment variable
+ \c PYTHONPATH is by default checked.
*/
/*!
\page designer-customizing-forms.html
\previouspage Using a Designer UI File in Your Qt for Python Application
- \nextpage Using Custom Widgets with Qt Designer
+ \nextpage Using Custom Widgets with Qt Widgets Designer
- \title Customizing Qt Designer Forms
+ \title Customizing Qt Widgets Designer Forms
\image designer-form-settings.png
@@ -2258,10 +2317,10 @@ pixmap property in the property editor.
/*!
\page designer-using-custom-widgets.html
- \previouspage Customizing Qt Designer Forms
- \nextpage Creating Custom Widgets for Qt Designer
+ \previouspage Customizing Qt Widgets Designer Forms
+ \nextpage Creating Custom Widgets for Qt Widgets Designer
- \title Using Custom Widgets with Qt Designer
+ \title Using Custom Widgets with Qt Widgets Designer
\QD can display custom widgets through its extensible plugin mechanism,
allowing the range of designable widgets to be extended by the user and
@@ -2332,19 +2391,17 @@ pixmap property in the property editor.
\section2 User Defined Custom Widgets
- \image worldtimeclockplugin-example.png
-
Custom widgets can be adapted for use with \QD, giving designers the
opportunity to configure the user interface using the actual widgets that
will be used in an application rather than placeholder widgets. The process
of creating a custom widget plugin is described in the
- \l{Creating Custom Widgets for Qt Designer} chapter of this manual.
+ \l{Creating Custom Widgets for Qt Widgets Designer} chapter of this manual.
To use a plugin created in this way, it is necessary to ensure that the
plugin is located on a path that \QD searches for plugins. Generally,
plugins stored in \c{$QTDIR/plugins/designer} will be loaded when \QD
starts. Further information on building and installing plugins can be found
- \l{Creating Custom Widgets for Qt Designer#BuildingandInstallingthePlugin}
+ \l{Creating Custom Widgets for Qt Widgets Designer#BuildingandInstallingthePlugin}
{here}. You can also refer to the \l{How to Create Qt Plugins}
{Plugins HOWTO} document for information about creating plugins.
*/
@@ -2352,10 +2409,10 @@ pixmap property in the property editor.
/*!
\page designer-creating-custom-widgets.html
- \previouspage Using Custom Widgets with Qt Designer
+ \previouspage Using Custom Widgets with Qt Widgets Designer
\nextpage Creating Custom Widget Extensions
- \title Creating Custom Widgets for Qt Designer
+ \title Creating Custom Widgets for Qt Widgets Designer
\QD's plugin-based architecture allows user-defined and third party custom
widgets to be edited just like you do with standard Qt widgets. All of the
@@ -2364,8 +2421,6 @@ pixmap property in the property editor.
design process, custom widgets will appear the same as they do when
previewed.
- \image worldtimeclockplugin-example.png
-
The \l QtDesigner module provides you with the ability to create custom
widgets in \QD.
@@ -2373,7 +2428,7 @@ pixmap property in the property editor.
\section1 Getting Started
To integrate a custom widget with \QD, you require a suitable description
- for the widget and an appropriate \c{.pro} file.
+ for the widget and an appropriate project file.
\section2 Providing an Interface Description
@@ -2614,28 +2669,39 @@ pixmap property in the property editor.
\section2 A Simple Plugin
- The \l{Custom Widget Plugin Example} demonstrates a simple \QD plugin.
+ The \l{Custom Widget Plugin} demonstrates a simple \QD plugin.
- The \c{.pro} file for a plugin must specify the headers and sources for
+ The project file for a plugin must specify the headers and sources for
both the custom widget and the plugin interface. Typically, this file only
- has to specify that the plugin's project is to be built as a library, but
- with specific plugin support for \QD. This is done with the following
- declarations:
+ has to specify that the plugin's project will be built as a library, but
+ with specific plugin support for \QD. For \c CMake, this is done with
+ the following declarations:
- \snippet customwidgetplugin/customwidgetplugin.pro 0
- \snippet customwidgetplugin/customwidgetplugin.pro 2
+ \snippet customwidgetplugin/CMakeLists.txt 0
+ \snippet customwidgetplugin/CMakeLists.txt 1
+ \snippet customwidgetplugin/CMakeLists.txt 2
- The \c QT variable contains the keyword \c uiplugin. It indicates that
+ The link libraries list specifies \c Qt::UiPlugin. This indicates that
the plugin uses the abstract interfaces QDesignerCustomWidgetInterface
and QDesignerCustomWidgetCollectionInterface only and has no linkage
to the \QD libraries. When accessing other interfaces of \QD that have
- linkage, \c designer should be used instead; this ensures that the plugin
+ linkage, \c Designer should be used instead; this ensures that the plugin
dynamically links to the \QD libraries and has a run-time dependency on
them.
- If plugins are built in a mode that is incompatible with \QD, they will
- not be loaded and installed. For more information about plugins, see the
- \l{plugins-howto.html}{Plugins HOWTO} document.
+ It is also necessary to ensure that the plugin is installed together with
+ other \QD widget plugins:
+
+ \snippet customwidgetplugin/CMakeLists.txt 3
+ \snippet customwidgetplugin/CMakeLists.txt 4
+
+ For \c qmake:
+
+ \snippet customwidgetplugin/customwidgetplugin.pro 0
+ \snippet customwidgetplugin/customwidgetplugin.pro 2
+
+ The \c QT variable contains the keyword \c uiplugin, which is
+ the equivalent of the \c Qt::UiPlugin library.
It is also necessary to ensure that the plugin is installed together with
other \QD widget plugins:
@@ -2652,19 +2718,24 @@ pixmap property in the property editor.
See QCoreApplication::libraryPaths() for more information about customizing
paths for libraries and plugins with Qt applications.
+ If plugins are built in a mode that is incompatible with \QD, they will
+ not be loaded and installed. For more information about plugins, see the
+ \l{plugins-howto.html}{Plugins HOWTO} document.
+
\section2 Splitting up the Plugin
- In a real world scenario, you do not want to have dependencies of the
- application making use of the custom widgets to the \QD headers and
- libraries as introduced by the simple approach explained above.
+ The simple approach explained above introduces a problem particularly
+ when using the other interfaces of \QD that have linkage:
+ The application using the custom widget will then depend on
+ \QD headers and libraries. In a real world scenario, this is not desired.
The following sections describe how to resolve this.
\section3 Linking the Widget into the Application
- The source and header file of the custom widget can be shared
- between the application and \QD by creating a \c{.pri} file for
- inclusion:
+ When using \c qmake, the source and header file of the custom widget
+ can be shared between the application and \QD by creating a \c{.pri}
+ file for inclusion:
\code
INCLUDEPATH += $$PWD
@@ -2679,6 +2750,9 @@ pixmap property in the property editor.
include(customwidget.pri)
\endcode
+ When using \c CMake, the source files of the widget can similarly be
+ added to the application project.
+
\section3 Sharing the Widget Using a Library
Another approach is to put the widget into a library that is linked to
@@ -2696,13 +2770,13 @@ pixmap property in the property editor.
(see QUiLoader::pluginPaths() and related functions). To avoid having
to deploy the \QD libraries onto the target device, those plugins should
have no linkage to the \QD libraries (\c {QT = uiplugin}, see
- \l{Creating Custom Widgets for Qt Designer#BuildingandInstallingthePlugin}).
+ \l{Creating Custom Widgets for Qt Widgets Designer#BuildingandInstallingthePlugin}).
\section1 Related Examples
For more information on using custom widgets in \QD, refer to the
\l{customwidgetplugin}{Custom Widget Plugin} and
- \l{worldtimeclockplugin}{World Time Clock Plugin} examples for more
+ \l{taskmenuextension}{Task Menu Extension} examples for more
information about using custom widgets in \QD. Also, you can use the
QDesignerCustomWidgetCollectionInterface class to combine several custom
widgets into a single library.
@@ -2711,8 +2785,8 @@ pixmap property in the property editor.
/*!
\page designer-creating-custom-widgets-extensions.html
- \previouspage Creating Custom Widgets for Qt Designer
- \nextpage Qt Designer's UI File Format
+ \previouspage Creating Custom Widgets for Qt Widgets Designer
+ \nextpage Qt Widgets Designer's UI File Format
\title Creating Custom Widget Extensions
@@ -2813,7 +2887,7 @@ pixmap property in the property editor.
interfaces using a QObject pointer only.
- \section1 Exposing an Extension to Qt Designer
+ \section1 Exposing an Extension to Qt Widgets Designer
In \QD the extensions are not created until they are required. For this
reason, when implementing extensions, you must subclass QExtensionFactory
@@ -2851,12 +2925,12 @@ pixmap property in the property editor.
\snippet manual/doc_src_designer-manual.cpp 9
- \section2 Accessing Qt Designer's Extension Manager
+ \section2 Accessing Qt Widgets Designer's Extension Manager
When implementing a custom widget plugin, you must subclass the
QDesignerCustomWidgetInterface to expose your plugin to \QD. This is
covered in more detail in the
- \l{Creating Custom Widgets for Qt Designer} section. The registration of
+ \l{Creating Custom Widgets for Qt Widgets Designer} section. The registration of
an extension factory is typically made in the
QDesignerCustomWidgetInterface::initialize() function:
@@ -2883,7 +2957,7 @@ pixmap property in the property editor.
\page designer-ui-file-format.html
\previouspage Creating Custom Widget Extensions
- \title Qt Designer's UI File Format
+ \title Qt Widgets Designer's UI File Format
The \c UI file format used by \QD is described by the
\l{http://www.w3.org/XML/Schema}{XML schema} presented below,
diff --git a/src/designer/src/designer/doc/src/qtdesigner-index.qdoc b/src/designer/src/designer/doc/src/qtdesigner-index.qdoc
index 4330cd308..469cb587f 100644
--- a/src/designer/src/designer/doc/src/qtdesigner-index.qdoc
+++ b/src/designer/src/designer/doc/src/qtdesigner-index.qdoc
@@ -1,58 +1,45 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\page qtdesigner-index.html
- \title Qt Designer
+ \title Qt Widgets Designer
\brief Provides classes to create your own custom widget plugins for
- Qt Designer and classes to access Qt Designer components.
+ \QD and classes to access \QD components.
In addition, the QFormBuilder class provides the possibility of
constructing user interfaces from UI files at run-time.
- \section1 Getting Started
+ \note This documentation covers the tool \QD and classes
+ related to building graphical user interfaces for Qt Widgets.
+ \l {Qt Design Studio Manual}{Qt Design Studio} is a UI composition tool
+ that covers all steps of UI design and implementation for Qt Quick user
+ interfaces.
- To use Qt Designer classes,add this directive into the C++ files:
+ \if !defined(qtforpython)
- \snippet plugins/doc_src_qtdesigner.cpp 0
+ \section1 Using the Module
- To link against the Qt Designer module, add this line to the project file:
+ \include {module-use.qdocinc} {using the c++ api}
- \snippet plugins/doc_src_qtdesigner.pro 1
+ \section2 Building with CMake
+
+ \include {module-use.qdocinc} {building with cmake} {Designer}
+
+ \section2 Building with qmake
+
+ \include {module-use.qdocinc} {building_with_qmake} {designer}
+ \endif
\section1 Articles and Guides
- These articles contain information about Qt Designer.
+ These articles contain information about \QD.
\list
- \li \l{Creating and Using Components for Qt Designer} - Creating and using
+ \li \l{Creating and Using Components for Qt Widgets Designer} - Creating and using
custom widget plugins
- \li \l{Qt Designer Manual} - Using Qt Designer
+ \li \l{Qt Widgets Designer Manual} - Using Qt Widgets Designer
\endlist
\section1 API Reference
@@ -60,7 +47,7 @@
These are links to the API reference material.
\list
- \li \l{Qt Designer C++ Classes}{C++ Classes}
+ \li \l{Qt Widgets Designer C++ Classes}{C++ Classes}
\endlist
*/
diff --git a/src/designer/src/designer/doc/src/qtdesigner-module.qdoc b/src/designer/src/designer/doc/src/qtdesigner-module.qdoc
index 814c65195..1e545de8b 100644
--- a/src/designer/src/designer/doc/src/qtdesigner-module.qdoc
+++ b/src/designer/src/designer/doc/src/qtdesigner-module.qdoc
@@ -1,51 +1,18 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\module QtDesigner
- \title Qt Designer C++ Classes
+ \title Qt Widgets Designer C++ Classes
\ingroup modules
\qtcmakepackage Designer
\qtvariable designer
\brief Provides classes to create your own custom widget plugins for
- Qt Designer and classes to access Qt Designer components.
+ \QD and classes to access \QD components.
In addition, the QFormBuilder class provides the possibility of
constructing user interfaces from UI files at run-time.
-
- To include the definitions of the module classes, use the following
- directive:
-
- \snippet plugins/doc_src_qtdesigner.cpp 0
-
- To link against the module, add this line to your \c qmake .pro file:
-
- \snippet plugins/doc_src_qtdesigner.pro 1
*/
/*!
diff --git a/src/designer/src/designer/images/mdi.png b/src/designer/src/designer/images/mdi.png
deleted file mode 100644
index 5012ab304..000000000
--- a/src/designer/src/designer/images/mdi.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/designer/images/sdi.png b/src/designer/src/designer/images/sdi.png
deleted file mode 100644
index 7fff6e8b6..000000000
--- a/src/designer/src/designer/images/sdi.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/designer/images/workbench.png b/src/designer/src/designer/images/workbench.png
deleted file mode 100644
index 06716a44f..000000000
--- a/src/designer/src/designer/images/workbench.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/designer/main.cpp b/src/designer/src/designer/main.cpp
index 50c586ccc..445996202 100644
--- a/src/designer/src/designer/main.cpp
+++ b/src/designer/src/designer/main.cpp
@@ -1,42 +1,24 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner.h"
#include <QtCore/qlibraryinfo.h>
#include <QtCore/qdir.h>
+#include <QtCore/qoperatingsystemversion.h>
#include <stdlib.h>
QT_USE_NAMESPACE
+static const char rhiBackEndVar[] = "QSG_RHI_BACKEND";
+
int main(int argc, char *argv[])
{
- Q_INIT_RESOURCE(designer);
+ // Enable the QWebEngineView, QQuickWidget plugins on Windows.
+ if (QOperatingSystemVersion::currentType() == QOperatingSystemVersion::Windows
+ && !qEnvironmentVariableIsSet(rhiBackEndVar)) {
+ qputenv(rhiBackEndVar, "gl");
+ }
// required for QWebEngineView
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
diff --git a/src/designer/src/designer/mainwindow.cpp b/src/designer/src/designer/mainwindow.cpp
index a11f148a4..44dbfd25e 100644
--- a/src/designer/src/designer/mainwindow.cpp
+++ b/src/designer/src/designer/mainwindow.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "mainwindow.h"
#include "qdesigner.h"
@@ -54,10 +29,10 @@
#include <algorithm>
-static const char *uriListMimeFormatC = "text/uri-list";
-
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
using ActionList = QList<QAction *>;
// Helpers for creating toolbars and menu
@@ -69,7 +44,9 @@ static void addActionsToToolBar(const ActionList &actions, QToolBar *t)
t->addAction(action);
}
}
-static QToolBar *createToolBar(const QString &title, const QString &objectName, const ActionList &actions)
+
+static QToolBar *createToolBar(const QString &title, const QString &objectName,
+ const ActionList &actions)
{
QToolBar *rc = new QToolBar;
rc->setObjectName(objectName);
@@ -107,23 +84,28 @@ QList<QToolBar *> MainWindowBase::createToolBars(const QDesignerActions *actions
QList<QToolBar *> rc;
if (singleToolBar) {
//: Not currently used (main tool bar)
- QToolBar *main = createToolBar(tr("Main"), QStringLiteral("mainToolBar"), actions->fileActions()->actions());
+ QToolBar *main = createToolBar(tr("Main"), u"mainToolBar"_s,
+ actions->fileActions()->actions());
addActionsToToolBar(actions->editActions()->actions(), main);
addActionsToToolBar(actions->toolActions()->actions(), main);
addActionsToToolBar(actions->formActions()->actions(), main);
rc.push_back(main);
} else {
- rc.push_back(createToolBar(tr("File"), QStringLiteral("fileToolBar"), actions->fileActions()->actions()));
- rc.push_back(createToolBar(tr("Edit"), QStringLiteral("editToolBar"), actions->editActions()->actions()));
- rc.push_back(createToolBar(tr("Tools"), QStringLiteral("toolsToolBar"), actions->toolActions()->actions()));
- rc.push_back(createToolBar(tr("Form"), QStringLiteral("formToolBar"), actions->formActions()->actions()));
+ rc.append(createToolBar(tr("File"), u"fileToolBar"_s,
+ actions->fileActions()->actions()));
+ rc.append(createToolBar(tr("Edit"), u"editToolBar"_s,
+ actions->editActions()->actions()));
+ rc.append(createToolBar(tr("Tools"), u"toolsToolBar"_s,
+ actions->toolActions()->actions()));
+ rc.append(createToolBar(tr("Form"), u"formToolBar"_s,
+ actions->formActions()->actions()));
}
return rc;
}
QString MainWindowBase::mainWindowTitle()
{
- return tr("Qt Designer");
+ return tr("Qt Widgets Designer");
}
// Use the minor Qt version as settings versions to avoid conflicts
@@ -150,7 +132,7 @@ QStringList DockedMdiArea::uiFiles(const QMimeData *d) const
{
// Extract dropped UI files from Mime data.
QStringList rc;
- if (!d->hasFormat(QLatin1String(uriListMimeFormatC)))
+ if (!d->hasFormat("text/uri-list"_L1))
return rc;
const auto urls = d->urls();
if (urls.isEmpty())
@@ -179,10 +161,8 @@ bool DockedMdiArea::event(QEvent *event)
case QEvent::Drop: {
QDropEvent *e = static_cast<QDropEvent*>(event);
const QStringList files = uiFiles(e->mimeData());
- const QStringList::const_iterator cend = files.constEnd();
- for (QStringList::const_iterator it = files.constBegin(); it != cend; ++it) {
- emit fileDropped(*it);
- }
+ for (const auto &f : files)
+ emit fileDropped(f);
e->acceptProposedAction();
return true;
}
@@ -216,12 +196,12 @@ ToolBarManager::ToolBarManager(QMainWindow *configureableMainWindow,
m_toolbars(toolbars)
{
m_configureAction->setMenuRole(QAction::NoRole);
- m_configureAction->setObjectName(QStringLiteral("__qt_configure_tool_bars_action"));
+ m_configureAction->setObjectName(u"__qt_configure_tool_bars_action"_s);
connect(m_configureAction, &QAction::triggered, this, &ToolBarManager::configureToolBars);
m_manager->setMainWindow(configureableMainWindow);
- for (QToolBar *tb : qAsConst(m_toolbars)) {
+ for (QToolBar *tb : std::as_const(m_toolbars)) {
const QString title = tb->windowTitle();
m_manager->addToolBar(tb, title);
addActionsToToolBarManager(tb->actions(), title, m_manager);
@@ -232,8 +212,8 @@ ToolBarManager::ToolBarManager(QMainWindow *configureableMainWindow,
// Filter out the device profile preview actions which have int data().
ActionList previewActions = actions->styleActions()->actions();
- ActionList::iterator it = previewActions.begin();
- for ( ; (*it)->isSeparator() || (*it)->data().type() == QVariant::Int; ++it) ;
+ auto it = previewActions.begin();
+ for ( ; (*it)->isSeparator() || (*it)->data().metaType().id() == QMetaType::Int; ++it) ;
previewActions.erase(previewActions.begin(), it);
addActionsToToolBarManager(previewActions, tr("Style"), m_manager);
@@ -265,7 +245,7 @@ void ToolBarManager::updateToolBarMenu()
std::stable_sort(m_toolbars.begin(), m_toolbars.end(), toolBarTitleLessThan);
// add to menu
m_toolBarMenu->clear();
- for (QToolBar *tb : qAsConst(m_toolbars))
+ for (QToolBar *tb : std::as_const(m_toolbars))
m_toolBarMenu->addAction(tb->toggleViewAction());
m_toolBarMenu->addAction(m_configureAction);
}
@@ -273,7 +253,6 @@ void ToolBarManager::updateToolBarMenu()
void ToolBarManager::configureToolBars()
{
QtToolBarDialog dlg(m_parent);
- dlg.setWindowFlags(dlg.windowFlags() & ~Qt::WindowContextHelpButtonHint);
dlg.setToolBarManager(m_manager);
dlg.exec();
updateToolBarMenu();
@@ -293,10 +272,9 @@ bool ToolBarManager::restoreState(const QByteArray &state, int version)
DockedMainWindow::DockedMainWindow(QDesignerWorkbench *wb,
QMenu *toolBarMenu,
- const QList<QDesignerToolWindow *> &toolWindows) :
- m_toolBarManager(nullptr)
+ const QList<QDesignerToolWindow *> &toolWindows)
{
- setObjectName(QStringLiteral("MDIWindow"));
+ setObjectName(u"MDIWindow"_s);
setWindowTitle(mainWindowTitle());
const QList<QToolBar *> toolbars = createToolBars(wb->actionManager(), false);
@@ -339,13 +317,10 @@ QMdiSubWindow *DockedMainWindow::createMdiSubWindow(QWidget *fw, Qt::WindowFlags
// designer menu actions
if (designerCloseActionShortCut == QKeySequence(QKeySequence::Close)) {
const ActionList systemMenuActions = rc->systemMenu()->actions();
- if (!systemMenuActions.isEmpty()) {
- const ActionList::const_iterator cend = systemMenuActions.constEnd();
- for (ActionList::const_iterator it = systemMenuActions.constBegin(); it != cend; ++it) {
- if ( (*it)->shortcut() == designerCloseActionShortCut) {
- (*it)->setShortcutContext(Qt::WidgetShortcut);
- break;
- }
+ for (auto *a : systemMenuActions) {
+ if (a->shortcut() == designerCloseActionShortCut) {
+ a->setShortcutContext(Qt::WidgetShortcut);
+ break;
}
}
}
@@ -357,7 +332,7 @@ DockedMainWindow::DockWidgetList DockedMainWindow::addToolWindows(const Designer
DockWidgetList rc;
for (QDesignerToolWindow *tw : tls) {
QDockWidget *dockWidget = new QDockWidget;
- dockWidget->setObjectName(tw->objectName() + QStringLiteral("_dock"));
+ dockWidget->setObjectName(tw->objectName() + "_dock"_L1);
dockWidget->setWindowTitle(tw->windowTitle());
addDockWidget(tw->dockWidgetAreaHint(), dockWidget);
dockWidget->setWidget(tw);
diff --git a/src/designer/src/designer/mainwindow.h b/src/designer/src/designer/mainwindow.h
index 756afd256..df41d6f34 100644
--- a/src/designer/src/designer/mainwindow.h
+++ b/src/designer/src/designer/mainwindow.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
@@ -167,7 +142,7 @@ private slots:
void slotSubWindowActivated(QMdiSubWindow*);
private:
- ToolBarManager *m_toolBarManager;
+ ToolBarManager *m_toolBarManager = nullptr;
};
QT_END_NAMESPACE
diff --git a/src/designer/src/designer/newform.cpp b/src/designer/src/designer/newform.cpp
index eea8c7813..3c77bc6a6 100644
--- a/src/designer/src/designer/newform.cpp
+++ b/src/designer/src/designer/newform.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "newform.h"
#include "qdesigner_workbench.h"
@@ -56,6 +31,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
NewForm::NewForm(QDesignerWorkbench *workbench, QWidget *parentWidget, const QString &fileName)
: QDialog(parentWidget, Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint),
m_fileName(fileName),
@@ -63,8 +40,7 @@ NewForm::NewForm(QDesignerWorkbench *workbench, QWidget *parentWidget, const QSt
m_workbench(workbench),
m_chkShowOnStartup(new QCheckBox(tr("Show this Dialog on Startup"))),
m_createButton(new QPushButton(QApplication::translate("NewForm", "C&reate", nullptr))),
- m_recentButton(new QPushButton(QApplication::translate("NewForm", "Recent", nullptr))),
- m_buttonBox(nullptr)
+ m_recentButton(new QPushButton(QApplication::translate("NewForm", "Recent", nullptr)))
{
setWindowTitle(tr("New Form"));
QDesignerSettings settings(m_workbench->core());
@@ -125,11 +101,8 @@ NewForm::~NewForm()
void NewForm::recentFileChosen()
{
QAction *action = qobject_cast<QAction *>(sender());
- if (!action)
- return;
- if (action->objectName() == QStringLiteral("__qt_action_clear_menu_"))
- return;
- close();
+ if (action && action->objectName() != "__qt_action_clear_menu_"_L1)
+ close();
}
void NewForm::slotCurrentTemplateChanged(bool templateSelected)
@@ -183,7 +156,7 @@ bool NewForm::openTemplate(QString *ptrToErrorMessage)
QString tempPattern = QDir::tempPath();
if (!tempPattern.endsWith(QDir::separator())) // platform-dependant
tempPattern += QDir::separator();
- tempPattern += QStringLiteral("XXXXXX.ui");
+ tempPattern += "XXXXXX.ui"_L1;
QTemporaryFile tempFormFile(tempPattern);
tempFormFile.setAutoRemove(true);
diff --git a/src/designer/src/designer/newform.h b/src/designer/src/designer/newform.h
index 79b99f7c5..e13f68571 100644
--- a/src/designer/src/designer/newform.h
+++ b/src/designer/src/designer/newform.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef NEWFORM_H
#define NEWFORM_H
@@ -83,7 +58,7 @@ private:
QCheckBox *m_chkShowOnStartup;
QPushButton *m_createButton;
QPushButton *m_recentButton;
- QDialogButtonBox *m_buttonBox;
+ QDialogButtonBox *m_buttonBox = nullptr;
};
QT_END_NAMESPACE
diff --git a/src/designer/src/designer/preferencesdialog.cpp b/src/designer/src/designer/preferencesdialog.cpp
index 439f0194b..6c597c6a0 100644
--- a/src/designer/src/designer/preferencesdialog.cpp
+++ b/src/designer/src/designer/preferencesdialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "preferencesdialog.h"
#include "ui_preferencesdialog.h"
@@ -43,13 +18,12 @@ PreferencesDialog::PreferencesDialog(QDesignerFormEditorInterface *core, QWidget
m_ui(new Ui::PreferencesDialog()),
m_core(core)
{
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
m_ui->setupUi(this);
m_optionsPages = core->optionsPages();
m_ui->m_optionTabWidget->clear();
- for (QDesignerOptionsPageInterface *optionsPage : qAsConst(m_optionsPages)) {
+ for (QDesignerOptionsPageInterface *optionsPage : std::as_const(m_optionsPages)) {
QWidget *page = optionsPage->createPage(this);
m_ui->m_optionTabWidget->addTab(page, optionsPage->name());
if (QDesignerAppearanceOptionsWidget *appearanceWidget = qobject_cast<QDesignerAppearanceOptionsWidget *>(page))
@@ -74,7 +48,7 @@ QPushButton *PreferencesDialog::applyButton() const
void PreferencesDialog::slotApply()
{
- for (QDesignerOptionsPageInterface *optionsPage : qAsConst(m_optionsPages))
+ for (QDesignerOptionsPageInterface *optionsPage : std::as_const(m_optionsPages))
optionsPage->apply();
}
@@ -99,7 +73,7 @@ void PreferencesDialog::slotUiModeChanged(bool modified)
void PreferencesDialog::closeOptionPages()
{
- for (QDesignerOptionsPageInterface *optionsPage : qAsConst(m_optionsPages))
+ for (QDesignerOptionsPageInterface *optionsPage : std::as_const(m_optionsPages))
optionsPage->finish();
}
diff --git a/src/designer/src/designer/preferencesdialog.h b/src/designer/src/designer/preferencesdialog.h
index 654e93388..5e25172e8 100644
--- a/src/designer/src/designer/preferencesdialog.h
+++ b/src/designer/src/designer/preferencesdialog.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PREFERENCESDIALOG_H
#define PREFERENCESDIALOG_H
diff --git a/src/designer/src/designer/qdesigner.cpp b/src/designer/src/designer/qdesigner.cpp
index bbd1451f0..0ec87e2b0 100644
--- a/src/designer/src/designer/qdesigner.cpp
+++ b/src/designer/src/designer/qdesigner.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
// designer
#include "qdesigner.h"
@@ -41,9 +16,11 @@
#include <QtGui/qicon.h>
#include <QtWidgets/qerrormessage.h>
#include <QtCore/qmetaobject.h>
+#include <QtCore/qdir.h>
#include <QtCore/qfile.h>
#include <QtCore/qlibraryinfo.h>
#include <QtCore/qlocale.h>
+#include <QtCore/qtextstream.h>
#include <QtCore/qtimer.h>
#include <QtCore/qtranslator.h>
#include <QtCore/qfileinfo.h>
@@ -55,16 +32,18 @@
QT_BEGIN_NAMESPACE
-static const char *designerApplicationName = "Designer";
-static const char designerDisplayName[] = "Qt Designer";
-static const char *designerWarningPrefix = "Designer: ";
+using namespace Qt::StringLiterals;
+
+static constexpr auto designerApplicationName = "Designer"_L1;
+static constexpr auto designerDisplayName = "Qt Widgets Designer"_L1;
+static constexpr auto designerWarningPrefix = "Designer: "_L1;
static QtMessageHandler previousMessageHandler = nullptr;
static void designerMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
// Only Designer warnings are displayed as box
QDesigner *designerApp = qDesigner;
- if (type != QtWarningMsg || !designerApp || !msg.startsWith(QLatin1String(designerWarningPrefix))) {
+ if (type != QtWarningMsg || !designerApp || !msg.startsWith(designerWarningPrefix)) {
previousMessageHandler(type, context, msg);
return;
}
@@ -72,18 +51,15 @@ static void designerMessageHandler(QtMsgType type, const QMessageLogContext &con
}
QDesigner::QDesigner(int &argc, char **argv)
- : QApplication(argc, argv),
- m_server(nullptr),
- m_client(nullptr),
- m_workbench(0), m_suppressNewFormShow(false)
+ : QApplication(argc, argv)
{
- setOrganizationName(QStringLiteral("QtProject"));
- QGuiApplication::setApplicationDisplayName(QLatin1String(designerDisplayName));
- setApplicationName(QLatin1String(designerApplicationName));
+ setOrganizationName(u"QtProject"_s);
+ QGuiApplication::setApplicationDisplayName(designerDisplayName);
+ setApplicationName(designerApplicationName);
QDesignerComponents::initializeResources();
-#if !defined(Q_OS_OSX) && !defined(Q_OS_WIN)
- setWindowIcon(QIcon(QStringLiteral(":/qt-project.org/designer/images/designer.png")));
+#if !defined(Q_OS_MACOS) && !defined(Q_OS_WIN)
+ setWindowIcon(QIcon(u":/qt-project.org/designer/images/designer.png"_s));
#endif
}
@@ -98,7 +74,7 @@ void QDesigner::showErrorMessage(const QString &message)
{
// strip the prefix
const QString qMessage =
- message.right(message.size() - int(qstrlen(designerWarningPrefix)));
+ message.right(message.size() - int(designerWarningPrefix.size()));
// If there is no main window yet, just store the message.
// The QErrorMessage would otherwise be hidden by the main window.
if (m_mainWindow) {
@@ -107,7 +83,7 @@ void QDesigner::showErrorMessage(const QString &message)
const QMessageLogContext emptyContext;
previousMessageHandler(QtWarningMsg, emptyContext, message); // just in case we crash
m_initializationErrors += qMessage;
- m_initializationErrors += QLatin1Char('\n');
+ m_initializationErrors += u'\n';
}
}
@@ -123,10 +99,9 @@ void QDesigner::showErrorMessageBox(const QString &msg)
if (!m_errorMessageDialog) {
m_lastErrorMessage.clear();
m_errorMessageDialog = new QErrorMessage(m_mainWindow);
- const QString title = QCoreApplication::translate("QDesigner", "%1 - warning").arg(QLatin1String(designerApplicationName));
+ const QString title = QCoreApplication::translate("QDesigner", "%1 - warning").arg(designerApplicationName);
m_errorMessageDialog->setWindowTitle(title);
m_errorMessageDialog->setMinimumSize(QSize(600, 250));
- m_errorMessageDialog->setWindowFlags(m_errorMessageDialog->windowFlags() & ~Qt::WindowContextHelpButtonHint);
}
m_errorMessageDialog->showMessage(msg);
m_lastErrorMessage = msg;
@@ -161,6 +136,7 @@ struct Options
{
QStringList files;
QString resourceDir{QLibraryInfo::path(QLibraryInfo::TranslationsPath)};
+ QStringList pluginPaths;
bool server{false};
quint16 clientPort{0};
bool enableInternalDynamicProperties{false};
@@ -170,28 +146,30 @@ static inline QDesigner::ParseArgumentsResult
parseDesignerCommandLineArguments(QCommandLineParser &parser, Options *options,
QString *errorMessage)
{
- parser.setApplicationDescription(QStringLiteral("Qt Designer ")
- + QLatin1String(QT_VERSION_STR)
- + QLatin1String("\n\nUI designer for QWidget-based applications."));
+ parser.setApplicationDescription(u"Qt Widgets Designer " QT_VERSION_STR "\n\nUI designer for QWidget-based applications."_s);
const QCommandLineOption helpOption = parser.addHelpOption();
parser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions);
- const QCommandLineOption serverOption(QStringLiteral("server"),
- QStringLiteral("Server mode"));
+ const QCommandLineOption serverOption(u"server"_s,
+ u"Server mode"_s);
parser.addOption(serverOption);
- const QCommandLineOption clientOption(QStringLiteral("client"),
- QStringLiteral("Client mode"),
- QStringLiteral("port"));
+ const QCommandLineOption clientOption(u"client"_s,
+ u"Client mode"_s,
+ u"port"_s);
parser.addOption(clientOption);
- const QCommandLineOption resourceDirOption(QStringLiteral("resourcedir"),
- QStringLiteral("Resource directory"),
- QStringLiteral("directory"));
+ const QCommandLineOption resourceDirOption(u"resourcedir"_s,
+ u"Resource directory"_s,
+ u"directory"_s);
parser.addOption(resourceDirOption);
- const QCommandLineOption internalDynamicPropertyOption(QStringLiteral("enableinternaldynamicproperties"),
- QStringLiteral("Enable internal dynamic properties"));
+ const QCommandLineOption internalDynamicPropertyOption(u"enableinternaldynamicproperties"_s,
+ u"Enable internal dynamic properties"_s);
parser.addOption(internalDynamicPropertyOption);
+ const QCommandLineOption pluginPathsOption(u"plugin-path"_s,
+ u"Default plugin path list"_s,
+ u"path"_s);
+ parser.addOption(pluginPathsOption);
- parser.addPositionalArgument(QStringLiteral("files"),
- QStringLiteral("The UI files to open."));
+ parser.addPositionalArgument(u"files"_s,
+ u"The UI files to open."_s);
if (!parser.parse(QCoreApplication::arguments())) {
*errorMessage = parser.errorText();
@@ -200,17 +178,25 @@ static inline QDesigner::ParseArgumentsResult
if (parser.isSet(helpOption))
return QDesigner::ParseArgumentsHelpRequested;
+ // There is no way to retrieve the complete help text from QCommandLineParser,
+ // so, call process() to display it.
+ if (parser.isSet(u"help-all"_s))
+ parser.process(QCoreApplication::arguments()); // exits
options->server = parser.isSet(serverOption);
if (parser.isSet(clientOption)) {
bool ok;
options->clientPort = parser.value(clientOption).toUShort(&ok);
if (!ok) {
- *errorMessage = QStringLiteral("Non-numeric argument specified for -client");
+ *errorMessage = u"Non-numeric argument specified for -client"_s;
return QDesigner::ParseArgumentsError;
}
}
if (parser.isSet(resourceDirOption))
options->resourceDir = parser.value(resourceDirOption);
+ const auto pluginPathValues = parser.values(pluginPathsOption);
+ for (const auto &pluginPath : pluginPathValues)
+ options->pluginPaths.append(pluginPath.split(QDir::listSeparator(), Qt::SkipEmptyParts));
+
options->enableInternalDynamicProperties = parser.isSet(internalDynamicPropertyOption);
options->files = parser.positionalArguments();
return QDesigner::ParseArgumentsSuccess;
@@ -237,40 +223,37 @@ QDesigner::ParseArgumentsResult QDesigner::parseCommandLineArguments()
if (options.enableInternalDynamicProperties)
QDesignerPropertySheet::setInternalDynamicPropertiesEnabled(true);
- QScopedPointer<QTranslator> designerTranslator(new QTranslator(this));
- if (designerTranslator->load(QLocale(), QStringLiteral("designer"), QStringLiteral("_"), options.resourceDir)) {
- installTranslator(designerTranslator.take());
- QScopedPointer<QTranslator> qtTranslator(new QTranslator(this));
- if (qtTranslator->load(QLocale(), QStringLiteral("qt"), QStringLiteral("_"), options.resourceDir))
- installTranslator(qtTranslator.take());
+ std::unique_ptr<QTranslator> designerTranslator(new QTranslator(this));
+ if (designerTranslator->load(QLocale(), u"designer"_s, u"_"_s, options.resourceDir)) {
+ installTranslator(designerTranslator.release());
+ std::unique_ptr<QTranslator> qtTranslator(new QTranslator(this));
+ if (qtTranslator->load(QLocale(), u"qt"_s, u"_"_s, options.resourceDir))
+ installTranslator(qtTranslator.release());
}
- m_workbench = new QDesignerWorkbench();
+ m_workbench = new QDesignerWorkbench(options.pluginPaths);
emit initialized();
previousMessageHandler = qInstallMessageHandler(designerMessageHandler); // Warn when loading faulty forms
Q_ASSERT(previousMessageHandler);
- m_suppressNewFormShow = m_workbench->readInBackup();
-
- if (!options.files.isEmpty()) {
- const QStringList::const_iterator cend = options.files.constEnd();
- for (QStringList::const_iterator it = options.files.constBegin(); it != cend; ++it) {
- // Ensure absolute paths for recent file list to be unique
- QString fileName = *it;
- const QFileInfo fi(fileName);
- if (fi.exists() && fi.isRelative())
- fileName = fi.absoluteFilePath();
- m_workbench->readInForm(fileName);
- }
+ bool suppressNewFormShow = m_workbench->readInBackup();
+
+ for (auto fileName : std::as_const(options.files)) {
+ // Ensure absolute paths for recent file list to be unique
+ const QFileInfo fi(fileName);
+ if (fi.exists() && fi.isRelative())
+ fileName = fi.absoluteFilePath();
+ m_workbench->readInForm(fileName);
}
- if ( m_workbench->formWindowCount())
- m_suppressNewFormShow = true;
+
+ if (m_workbench->formWindowCount() > 0)
+ suppressNewFormShow = true;
// Show up error box with parent now if something went wrong
if (m_initializationErrors.isEmpty()) {
- if (!m_suppressNewFormShow && QDesignerSettings(m_workbench->core()).showNewFormOnStartup())
- QTimer::singleShot(100, this, &QDesigner::callCreateForm); // won't show anything if suppressed
+ if (!suppressNewFormShow)
+ m_workbench->showNewForm();
} else {
showErrorMessageBox(m_initializationErrors);
m_initializationErrors.clear();
@@ -283,10 +266,7 @@ bool QDesigner::event(QEvent *ev)
bool eaten;
switch (ev->type()) {
case QEvent::FileOpen:
- // Set it true first since, if it's a Qt 3 form, the messagebox from convert will fire the timer.
- m_suppressNewFormShow = true;
- if (!m_workbench->readInForm(static_cast<QFileOpenEvent *>(ev)->file()))
- m_suppressNewFormShow = false;
+ m_workbench->readInForm(static_cast<QFileOpenEvent *>(ev)->file());
eaten = true;
break;
case QEvent::Close: {
@@ -318,10 +298,4 @@ MainWindowBase *QDesigner::mainWindow() const
return m_mainWindow;
}
-void QDesigner::callCreateForm()
-{
- if (!m_suppressNewFormShow)
- m_workbench->actionManager()->createForm();
-}
-
QT_END_NAMESPACE
diff --git a/src/designer/src/designer/qdesigner.h b/src/designer/src/designer/qdesigner.h
index 91f36c538..5b763d7a1 100644
--- a/src/designer/src/designer/qdesigner.h
+++ b/src/designer/src/designer/qdesigner.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QDESIGNER_H
#define QDESIGNER_H
@@ -75,21 +50,17 @@ signals:
public slots:
void showErrorMessage(const QString &message);
-private slots:
- void callCreateForm();
-
private:
void showErrorMessageBox(const QString &);
- QDesignerServer *m_server;
- QDesignerClient *m_client;
- QDesignerWorkbench *m_workbench;
+ QDesignerServer *m_server = nullptr;
+ QDesignerClient *m_client = nullptr;
+ QDesignerWorkbench *m_workbench = nullptr;
QPointer<MainWindowBase> m_mainWindow;
QPointer<QErrorMessage> m_errorMessageDialog;
QString m_initializationErrors;
QString m_lastErrorMessage;
- bool m_suppressNewFormShow;
};
QT_END_NAMESPACE
diff --git a/src/designer/src/designer/qdesigner_actions.cpp b/src/designer/src/designer/qdesigner_actions.cpp
index 4b98d6493..07f347093 100644
--- a/src/designer/src/designer/qdesigner_actions.cpp
+++ b/src/designer/src/designer/qdesigner_actions.cpp
@@ -1,40 +1,16 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_actions.h"
#include "designer_enums.h"
+#include <qdesigner_utils_p.h>
#include "qdesigner.h"
#include "qdesigner_workbench.h"
#include "qdesigner_formwindow.h"
+#include "mainwindow.h"
#include "newform.h"
#include "versiondialog.h"
#include "saveformastemplate.h"
-#include "qdesigner_toolwindow.h"
#include "preferencesdialog.h"
#include "appfontdialog.h"
@@ -87,21 +63,27 @@
#include <QtGui/qtransform.h>
#include <QtGui/qcursor.h>
+#include <QtCore/qdir.h>
#include <QtCore/qsize.h>
#include <QtCore/qlibraryinfo.h>
#include <QtCore/qbuffer.h>
#include <QtCore/qpluginloader.h>
#include <QtCore/qdebug.h>
#include <QtCore/qtimer.h>
+#include <QtCore/qtextstream.h>
#include <QtCore/qmetaobject.h>
#include <QtCore/qfileinfo.h>
#include <QtCore/qsavefile.h>
#include <QtCore/qscopedpointer.h>
#include <QtXml/qdom.h>
+#include <algorithm>
+
+#include <optional>
+
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+using namespace Qt::StringLiterals;
const char *QDesignerActions::defaultToolbarPropertyName = "__qt_defaultToolBarAction";
@@ -137,6 +119,21 @@ static QString fileDialogFilters(const QString &extension)
return QDesignerActions::tr("Designer UI files (*.%1);;All Files (*)").arg(extension);
}
+static QString fixResourceFileBackupPath(const QDesignerFormWindowInterface *fwi,
+ const QDir& backupDir);
+
+static QByteArray formWindowContents(const QDesignerFormWindowInterface *fw,
+ std::optional<QDir> alternativeDir = {})
+{
+ QString contents = alternativeDir.has_value()
+ ? fixResourceFileBackupPath(fw, alternativeDir.value()) : fw->contents();
+ if (auto *fwb = qobject_cast<const qdesigner_internal::FormWindowBase *>(fw)) {
+ if (fwb->lineTerminatorMode() == qdesigner_internal::FormWindowBase::CRLFLineTerminator)
+ contents.replace(u'\n', "\r\n"_L1);
+ }
+ return contents.toUtf8();
+}
+
QFileDialog *createSaveAsDialog(QWidget *parent, const QString &dir, const QString &extension)
{
auto result = new QFileDialog(parent, QDesignerActions::tr("Save Form As"),
@@ -160,16 +157,26 @@ QDesignerActions::QDesignerActions(QDesignerWorkbench *workbench)
m_windowActions(createActionGroup(this)),
m_toolActions(createActionGroup(this, true)),
m_editWidgetsAction(new QAction(tr("Edit Widgets"), this)),
- m_newFormAction(new QAction(qdesigner_internal::createIconSet(QStringLiteral("filenew.png")), tr("&New..."), this)),
- m_openFormAction(new QAction(qdesigner_internal::createIconSet(QStringLiteral("fileopen.png")), tr("&Open..."), this)),
- m_saveFormAction(new QAction(qdesigner_internal::createIconSet(QStringLiteral("filesave.png")), tr("&Save"), this)),
- m_saveFormAsAction(new QAction(tr("Save &As..."), this)),
+ m_newFormAction(new QAction(qdesigner_internal::createIconSet(QIcon::ThemeIcon::DocumentNew,
+ "filenew.png"_L1),
+ tr("&New..."), this)),
+ m_openFormAction(new QAction(qdesigner_internal::createIconSet(QIcon::ThemeIcon::DocumentOpen,
+ "fileopen.png"_L1),
+ tr("&Open..."), this)),
+ m_saveFormAction(new QAction(qdesigner_internal::createIconSet(QIcon::ThemeIcon::DocumentSave,
+ "filesave.png"_L1),
+ tr("&Save"), this)),
+ m_saveFormAsAction(new QAction(QIcon::fromTheme(QIcon::ThemeIcon::DocumentSaveAs),
+ tr("Save &As..."), this)),
m_saveAllFormsAction(new QAction(tr("Save A&ll"), this)),
m_saveFormAsTemplateAction(new QAction(tr("Save As &Template..."), this)),
- m_closeFormAction(new QAction(tr("&Close"), this)),
+ m_closeFormAction(new QAction(QIcon::fromTheme(QIcon::ThemeIcon::WindowClose),
+ tr("&Close"), this)),
m_savePreviewImageAction(new QAction(tr("Save &Image..."), this)),
- m_printPreviewAction(new QAction(tr("&Print..."), this)),
- m_quitAction(new QAction(tr("&Quit"), this)),
+ m_printPreviewAction(new QAction(QIcon::fromTheme(QIcon::ThemeIcon::DocumentPrint),
+ tr("&Print..."), this)),
+ m_quitAction(new QAction(QIcon::fromTheme(QIcon::ThemeIcon::ApplicationExit),
+ tr("&Quit"), this)),
m_viewCppCodeAction(new QAction(tr("View &C++ Code..."), this)),
m_viewPythonCodeAction(new QAction(tr("View &Python Code..."), this)),
m_minimizeAction(new QAction(tr("&Minimize"), this)),
@@ -179,16 +186,6 @@ QDesignerActions::QDesignerActions(QDesignerWorkbench *workbench)
m_preferencesAction(new QAction(tr("Preferences..."), this)),
m_appFontAction(new QAction(tr("Additional Fonts..."), this))
{
-#if defined (Q_OS_UNIX) && !defined(Q_OS_MACOS)
- m_newFormAction->setIcon(QIcon::fromTheme(QStringLiteral("document-new"), m_newFormAction->icon()));
- m_openFormAction->setIcon(QIcon::fromTheme(QStringLiteral("document-open"), m_openFormAction->icon()));
- m_saveFormAction->setIcon(QIcon::fromTheme(QStringLiteral("document-save"), m_saveFormAction->icon()));
- m_saveFormAsAction->setIcon(QIcon::fromTheme(QStringLiteral("document-save-as"), m_saveFormAsAction->icon()));
- m_printPreviewAction->setIcon(QIcon::fromTheme(QStringLiteral("document-print"), m_printPreviewAction->icon()));
- m_closeFormAction->setIcon(QIcon::fromTheme(QStringLiteral("window-close"), m_closeFormAction->icon()));
- m_quitAction->setIcon(QIcon::fromTheme(QStringLiteral("application-exit"), m_quitAction->icon()));
-#endif
-
Q_ASSERT(m_core != nullptr);
qdesigner_internal::QDesignerFormWindowManager *ifwm = qobject_cast<qdesigner_internal::QDesignerFormWindowManager *>(m_core->formWindowManager());
Q_ASSERT(ifwm);
@@ -198,21 +195,21 @@ QDesignerActions::QDesignerActions(QDesignerWorkbench *workbench)
connect(ifwm, &QDesignerFormWindowManagerInterface::formWindowSettingsChanged,
this, &QDesignerActions::formWindowSettingsChanged);
- m_editWidgetsAction->setObjectName(QStringLiteral("__qt_edit_widgets_action"));
- m_newFormAction->setObjectName(QStringLiteral("__qt_new_form_action"));
- m_openFormAction->setObjectName(QStringLiteral("__qt_open_form_action"));
- m_saveFormAction->setObjectName(QStringLiteral("__qt_save_form_action"));
- m_saveFormAsAction->setObjectName(QStringLiteral("__qt_save_form_as_action"));
- m_saveAllFormsAction->setObjectName(QStringLiteral("__qt_save_all_forms_action"));
- m_saveFormAsTemplateAction->setObjectName(QStringLiteral("__qt_save_form_as_template_action"));
- m_closeFormAction->setObjectName(QStringLiteral("__qt_close_form_action"));
- m_quitAction->setObjectName(QStringLiteral("__qt_quit_action"));
- m_previewFormAction->setObjectName(QStringLiteral("__qt_preview_form_action"));
- m_viewCppCodeAction->setObjectName(QStringLiteral("__qt_preview_cpp_code_action"));
- m_viewPythonCodeAction->setObjectName(QStringLiteral("__qt_preview_python_code_action"));
- m_minimizeAction->setObjectName(QStringLiteral("__qt_minimize_action"));
- m_bringAllToFrontAction->setObjectName(QStringLiteral("__qt_bring_all_to_front_action"));
- m_preferencesAction->setObjectName(QStringLiteral("__qt_preferences_action"));
+ m_editWidgetsAction->setObjectName(u"__qt_edit_widgets_action"_s);
+ m_newFormAction->setObjectName(u"__qt_new_form_action"_s);
+ m_openFormAction->setObjectName(u"__qt_open_form_action"_s);
+ m_saveFormAction->setObjectName(u"__qt_save_form_action"_s);
+ m_saveFormAsAction->setObjectName(u"__qt_save_form_as_action"_s);
+ m_saveAllFormsAction->setObjectName(u"__qt_save_all_forms_action"_s);
+ m_saveFormAsTemplateAction->setObjectName(u"__qt_save_form_as_template_action"_s);
+ m_closeFormAction->setObjectName(u"__qt_close_form_action"_s);
+ m_quitAction->setObjectName(u"__qt_quit_action"_s);
+ m_previewFormAction->setObjectName(u"__qt_preview_form_action"_s);
+ m_viewCppCodeAction->setObjectName(u"__qt_preview_cpp_code_action"_s);
+ m_viewPythonCodeAction->setObjectName(u"__qt_preview_python_code_action"_s);
+ m_minimizeAction->setObjectName(u"__qt_minimize_action"_s);
+ m_bringAllToFrontAction->setObjectName(u"__qt_bring_all_to_front_action"_s);
+ m_preferencesAction->setObjectName(u"__qt_preferences_action"_s);
m_helpActions = createHelpActions();
@@ -262,10 +259,10 @@ QDesignerActions::QDesignerActions(QDesignerWorkbench *workbench)
m_printPreviewAction->setShortcut(QKeySequence::Print);
connect(m_printPreviewAction, &QAction::triggered, this, &QDesignerActions::printPreviewImage);
m_fileActions->addAction(m_printPreviewAction);
- m_printPreviewAction->setObjectName(QStringLiteral("__qt_print_action"));
+ m_printPreviewAction->setObjectName(u"__qt_print_action"_s);
connect(m_savePreviewImageAction, &QAction::triggered, this, &QDesignerActions::savePreviewImage);
- m_savePreviewImageAction->setObjectName(QStringLiteral("__qt_saveimage_action"));
+ m_savePreviewImageAction->setObjectName(u"__qt_saveimage_action"_s);
m_fileActions->addAction(m_savePreviewImageAction);
m_fileActions->addAction(createSeparator(this));
@@ -285,12 +282,12 @@ QDesignerActions::QDesignerActions(QDesignerWorkbench *workbench)
// edit actions
//
QAction *undoAction = formWindowManager->action(QDesignerFormWindowManagerInterface::UndoAction);
- undoAction->setObjectName(QStringLiteral("__qt_undo_action"));
+ undoAction->setObjectName(u"__qt_undo_action"_s);
undoAction->setShortcut(QKeySequence::Undo);
m_editActions->addAction(undoAction);
QAction *redoAction = formWindowManager->action(QDesignerFormWindowManagerInterface::RedoAction);
- redoAction->setObjectName(QStringLiteral("__qt_redo_action"));
+ redoAction->setObjectName(u"__qt_redo_action"_s);
redoAction->setShortcut(QKeySequence::Redo);
m_editActions->addAction(redoAction);
@@ -322,8 +319,8 @@ QDesignerActions::QDesignerActions(QDesignerWorkbench *workbench)
shortcuts.append(QKeySequence(Qt::Key_F3));
shortcuts.append(QKeySequence(Qt::Key_Escape));
m_editWidgetsAction->setShortcuts(shortcuts);
- QIcon fallback(m_core->resourceLocation() + QStringLiteral("/widgettool.png"));
- m_editWidgetsAction->setIcon(QIcon::fromTheme(QStringLiteral("designer-edit-widget"),
+ QIcon fallback(m_core->resourceLocation() + "/widgettool.png"_L1);
+ m_editWidgetsAction->setIcon(QIcon::fromTheme(u"designer-edit-widget"_s,
fallback));
connect(m_editWidgetsAction, &QAction::triggered, this, &QDesignerActions::editWidgetsSlot);
m_editWidgetsAction->setChecked(true);
@@ -331,7 +328,7 @@ QDesignerActions::QDesignerActions(QDesignerWorkbench *workbench)
m_editWidgetsAction->setProperty(QDesignerActions::defaultToolbarPropertyName, true);
m_toolActions->addAction(m_editWidgetsAction);
- connect(formWindowManager, &QDesignerFormWindowManager::activeFormWindowChanged,
+ connect(formWindowManager, &qdesigner_internal::QDesignerFormWindowManager::activeFormWindowChanged,
this, &QDesignerActions::activeFormWindowChanged);
const QObjectList builtinPlugins = QPluginLoader::staticInstances()
@@ -441,15 +438,15 @@ QActionGroup *QDesignerActions::createHelpActions()
QActionGroup *helpActions = createActionGroup(this);
#ifndef QT_JAMBI_BUILD
- QAction *mainHelpAction = new QAction(tr("Qt Designer &Help"), this);
- mainHelpAction->setObjectName(QStringLiteral("__qt_designer_help_action"));
+ QAction *mainHelpAction = new QAction(tr("Qt Widgets Designer &Help"), this);
+ mainHelpAction->setObjectName(u"__qt_designer_help_action"_s);
connect(mainHelpAction, &QAction::triggered, this, &QDesignerActions::showDesignerHelp);
mainHelpAction->setShortcut(Qt::CTRL | Qt::Key_Question);
helpActions->addAction(mainHelpAction);
helpActions->addAction(createSeparator(this));
QAction *widgetHelp = new QAction(tr("Current Widget Help"), this);
- widgetHelp->setObjectName(QStringLiteral("__qt_current_widget_help_action"));
+ widgetHelp->setObjectName(u"__qt_current_widget_help_action"_s);
widgetHelp->setShortcut(Qt::Key_F1);
connect(widgetHelp, &QAction::triggered, this, &QDesignerActions::showWidgetSpecificHelp);
helpActions->addAction(widgetHelp);
@@ -458,21 +455,21 @@ QActionGroup *QDesignerActions::createHelpActions()
helpActions->addAction(createSeparator(this));
QAction *aboutPluginsAction = new QAction(tr("About Plugins"), this);
- aboutPluginsAction->setObjectName(QStringLiteral("__qt_about_plugins_action"));
+ aboutPluginsAction->setObjectName(u"__qt_about_plugins_action"_s);
aboutPluginsAction->setMenuRole(QAction::ApplicationSpecificRole);
connect(aboutPluginsAction, &QAction::triggered,
m_core->formWindowManager(), &QDesignerFormWindowManagerInterface::showPluginDialog);
helpActions->addAction(aboutPluginsAction);
- QAction *aboutDesignerAction = new QAction(tr("About Qt Designer"), this);
+ QAction *aboutDesignerAction = new QAction(tr("About Qt Widgets Designer"), this);
aboutDesignerAction->setMenuRole(QAction::AboutRole);
- aboutDesignerAction->setObjectName(QStringLiteral("__qt_about_designer_action"));
+ aboutDesignerAction->setObjectName(u"__qt_about_designer_action"_s);
connect(aboutDesignerAction, &QAction::triggered, this, &QDesignerActions::aboutDesigner);
helpActions->addAction(aboutDesignerAction);
QAction *aboutQtAction = new QAction(tr("About Qt"), this);
aboutQtAction->setMenuRole(QAction::AboutQtRole);
- aboutQtAction->setObjectName(QStringLiteral("__qt_about_qt_action"));
+ aboutQtAction->setObjectName(u"__qt_about_qt_action"_s);
connect(aboutQtAction, &QAction::triggered, qApp, &QApplication::aboutQt);
helpActions->addAction(aboutQtAction);
return helpActions;
@@ -491,12 +488,12 @@ QString QDesignerActions::uiExtension() const
= qt_extension<QDesignerLanguageExtension *>(m_core->extensionManager(), m_core);
if (lang)
return lang->uiExtension();
- return QStringLiteral("ui");
+ return u"ui"_s;
}
QAction *QDesignerActions::createRecentFilesMenu()
{
- QMenu *menu = new QMenu;
+ m_recentMenu.reset(new QMenu);
QAction *act;
// Need to insert this into the QAction.
for (int i = 0; i < MaxRecentFiles; ++i) {
@@ -504,20 +501,20 @@ QAction *QDesignerActions::createRecentFilesMenu()
act->setVisible(false);
connect(act, &QAction::triggered, this, &QDesignerActions::openRecentForm);
m_recentFilesActions->addAction(act);
- menu->addAction(act);
+ m_recentMenu->addAction(act);
}
updateRecentFileActions();
- menu->addSeparator();
- act = new QAction(QIcon::fromTheme(QStringLiteral("edit-clear")),
+ m_recentMenu->addSeparator();
+ act = new QAction(QIcon::fromTheme(QIcon::ThemeIcon::EditClear),
tr("Clear &Menu"), this);
- act->setObjectName(QStringLiteral("__qt_action_clear_menu_"));
+ act->setObjectName(u"__qt_action_clear_menu_"_s);
connect(act, &QAction::triggered, this, &QDesignerActions::clearRecentFiles);
m_recentFilesActions->addAction(act);
- menu->addAction(act);
+ m_recentMenu->addAction(act);
- act = new QAction(QIcon::fromTheme(QStringLiteral("document-open-recent")),
+ act = new QAction(QIcon::fromTheme(QIcon::ThemeIcon::DocumentOpenRecent),
tr("&Recent Forms"), this);
- act->setMenu(menu);
+ act->setMenu(m_recentMenu.get());
return act;
}
@@ -627,7 +624,7 @@ bool QDesignerActions::saveFormAs(QDesignerFormWindowInterface *fw)
dir = QDir::current().absolutePath();
} while (false);
dir += QDir::separator();
- dir += QStringLiteral("untitled.");
+ dir += "untitled."_L1;
dir += extension;
}
@@ -655,7 +652,7 @@ void QDesignerActions::saveAllForms()
QString fileNames;
QDesignerFormWindowManagerInterface *formWindowManager = core()->formWindowManager();
if (const int totalWindows = formWindowManager->formWindowCount()) {
- const QString separator = QStringLiteral(", ");
+ const auto separator = ", "_L1;
for (int i = 0; i < totalWindows; ++i) {
QDesignerFormWindowInterface *fw = formWindowManager->formWindow(i);
if (fw && fw->isDirty()) {
@@ -791,11 +788,8 @@ bool QDesignerActions::readInForm(const QString &fileName)
if (!fInfo.exists()) {
// Normalize file name
const QString directory = fInfo.absolutePath();
- if (QDir(directory).exists()) {
- newFormFileName = directory;
- newFormFileName += QLatin1Char('/');
- newFormFileName += fInfo.fileName();
- }
+ if (QDir(directory).exists())
+ newFormFileName = directory + u'/' + fInfo.fileName();
}
showNewFormDialog(newFormFileName);
return false;
@@ -812,14 +806,9 @@ bool QDesignerActions::writeOutForm(QDesignerFormWindowInterface *fw, const QStr
if (check) {
const QStringList problems = fw->checkContents();
if (!problems.isEmpty())
- QMessageBox::information(fw->window(), tr("Qt Designer"), problems.join(QLatin1String("<br>")));
+ QMessageBox::information(fw->window(), tr("Qt Widgets Designer"), problems.join("<br>"_L1));
}
- QString contents = fw->contents();
- if (qdesigner_internal::FormWindowBase *fwb = qobject_cast<qdesigner_internal::FormWindowBase *>(fw)) {
- if (fwb->lineTerminatorMode() == qdesigner_internal::FormWindowBase::CRLFLineTerminator)
- contents.replace(QLatin1Char('\n'), QStringLiteral("\r\n"));
- }
m_workbench->updateBackup(fw);
QSaveFile f(saveFile);
@@ -853,7 +842,7 @@ bool QDesignerActions::writeOutForm(QDesignerFormWindowInterface *fw, const QStr
}
// loop back around...
}
- f.write(contents.toUtf8());
+ f.write(formWindowContents(fw));
if (!f.commit()) {
QMessageBox box(QMessageBox::Warning, tr("Save Form"),
tr("Could not write file"),
@@ -911,32 +900,26 @@ void QDesignerActions::formWindowSettingsChanged(QDesignerFormWindowInterface *f
void QDesignerActions::updateRecentFileActions()
{
QStringList files = m_settings.recentFilesList();
- const int originalSize = files.size();
- int numRecentFiles = qMin(files.size(), int(MaxRecentFiles));
- const auto recentFilesActs = m_recentFilesActions->actions();
+ auto existingEnd = std::remove_if(files.begin(), files.end(),
+ [] (const QString &f) { return !QFileInfo::exists(f); });
+ if (existingEnd != files.end()) {
+ files.erase(existingEnd, files.end());
+ m_settings.setRecentFilesList(files);
+ }
- for (int i = 0; i < numRecentFiles; ++i) {
- const QFileInfo fi(files[i]);
- // If the file doesn't exist anymore, just remove it from the list so
- // people don't get confused.
- if (!fi.exists()) {
- files.removeAt(i);
- --i;
- numRecentFiles = qMin(files.size(), int(MaxRecentFiles));
- continue;
+ const auto recentFilesActs = m_recentFilesActions->actions();
+ qsizetype i = 0;
+ for (QAction *action : recentFilesActs) {
+ if (i < files.size()) {
+ const QString &file = files.at(i);
+ action->setText(QFileInfo(file).fileName());
+ action->setIconText(file);
+ action->setVisible(true);
+ } else {
+ action->setVisible(false);
}
- const QString text = fi.fileName();
- recentFilesActs[i]->setText(text);
- recentFilesActs[i]->setIconText(files[i]);
- recentFilesActs[i]->setVisible(true);
+ ++i;
}
-
- for (int j = numRecentFiles; j < MaxRecentFiles; ++j)
- recentFilesActs[j]->setVisible(false);
-
- // If there's been a change, right it back
- if (originalSize != files.size())
- m_settings.setRecentFilesList(files);
}
void QDesignerActions::openRecentForm()
@@ -988,7 +971,7 @@ QAction *QDesignerActions::minimizeAction() const
void QDesignerActions::showDesignerHelp()
{
QString url = AssistantClient::designerManualUrl();
- url += QStringLiteral("qtdesigner-manual.html");
+ url += "qtdesigner-manual.html"_L1;
showHelp(url);
}
@@ -1009,11 +992,11 @@ void QDesignerActions::showHelp(const QString &url)
void QDesignerActions::aboutDesigner()
{
VersionDialog mb(core()->topLevel());
- mb.setWindowTitle(tr("About Qt Designer"));
+ mb.setWindowTitle(tr("About Qt Widgets Designer"));
if (mb.exec()) {
- QMessageBox messageBox(QMessageBox::Information, QStringLiteral("Easter Egg"),
- QStringLiteral("Easter Egg"), QMessageBox::Ok, core()->topLevel());
- messageBox.setInformativeText(QStringLiteral("The Easter Egg has been removed."));
+ QMessageBox messageBox(QMessageBox::Information, u"Easter Egg"_s,
+ u"Easter Egg"_s, QMessageBox::Ok, core()->topLevel());
+ messageBox.setInformativeText(u"The Easter Egg has been removed."_s);
messageBox.exec();
}
}
@@ -1054,16 +1037,13 @@ void QDesignerActions::backupForms()
return;
- QStringList tmpFiles;
QMap<QString, QString> backupMap;
QDir backupDir(m_backupPath);
for (int i = 0; i < count; ++i) {
QDesignerFormWindow *fw = m_workbench->formWindow(i);
QDesignerFormWindowInterface *fwi = fw->editor();
- QString formBackupName;
- QTextStream(&formBackupName) << m_backupPath << QDir::separator()
- << QStringLiteral("backup") << i << QStringLiteral(".bak");
+ QString formBackupName = m_backupPath + "/backup"_L1 + QString::number(i) + ".bak"_L1;
QString fwn = QDir::toNativeSeparators(fwi->fileName());
if (fwn.isEmpty())
@@ -1071,49 +1051,33 @@ void QDesignerActions::backupForms()
backupMap.insert(fwn, formBackupName);
- QFile file(formBackupName.replace(m_backupPath, m_backupTmpPath));
- if (file.open(QFile::WriteOnly)){
- QString contents = fixResourceFileBackupPath(fwi, backupDir);
- if (qdesigner_internal::FormWindowBase *fwb = qobject_cast<qdesigner_internal::FormWindowBase *>(fwi)) {
- if (fwb->lineTerminatorMode() == qdesigner_internal::FormWindowBase::CRLFLineTerminator)
- contents.replace(QLatin1Char('\n'), QStringLiteral("\r\n"));
- }
- const QByteArray utf8Array = contents.toUtf8();
- if (file.write(utf8Array, utf8Array.size()) != utf8Array.size()) {
- backupMap.remove(fwn);
- qdesigner_internal::designerWarning(tr("The backup file %1 could not be written.").arg(file.fileName()));
- } else
- tmpFiles.append(formBackupName);
-
- file.close();
+ bool ok = false;
+ QSaveFile file(formBackupName);
+ if (file.open(QFile::WriteOnly)) {
+ file.write(formWindowContents(fw->editor(), backupDir));
+ ok = file.commit();
}
- }
- if(!tmpFiles.isEmpty()) {
- const QStringList backupFiles = backupDir.entryList(QDir::Files);
- for (const QString &backupFile : backupFiles)
- backupDir.remove(backupFile);
-
- for (const QString &tmpName : qAsConst(tmpFiles)) {
- QString name(tmpName);
- name.replace(m_backupTmpPath, m_backupPath);
- QFile tmpFile(tmpName);
- if (!tmpFile.copy(name))
- qdesigner_internal::designerWarning(tr("The backup file %1 could not be written.").arg(name));
- tmpFile.remove();
+ if (!ok) {
+ backupMap.remove(fwn);
+ qdesigner_internal::designerWarning(tr("The backup file %1 could not be written: %2").
+ arg(QDir::toNativeSeparators(file.fileName()),
+ file.errorString()));
}
+ }
+ if (!backupMap.isEmpty())
m_settings.setBackup(backupMap);
- }
}
-QString QDesignerActions::fixResourceFileBackupPath(QDesignerFormWindowInterface *fwi, const QDir& backupDir)
+static QString fixResourceFileBackupPath(const QDesignerFormWindowInterface *fwi,
+ const QDir& backupDir)
{
const QString content = fwi->contents();
- QDomDocument domDoc(QStringLiteral("backup"));
+ QDomDocument domDoc(u"backup"_s);
if(!domDoc.setContent(content))
return content;
- const QDomNodeList list = domDoc.elementsByTagName(QStringLiteral("resources"));
+ const QDomNodeList list = domDoc.elementsByTagName(u"resources"_s);
if (list.isEmpty())
return content;
@@ -1121,14 +1085,14 @@ QString QDesignerActions::fixResourceFileBackupPath(QDesignerFormWindowInterface
const QDomNode node = list.at(i);
if (!node.isNull()) {
const QDomElement element = node.toElement();
- if(!element.isNull() && element.tagName() == QStringLiteral("resources")) {
+ if (!element.isNull() && element.tagName() == "resources"_L1) {
QDomNode childNode = element.firstChild();
while (!childNode.isNull()) {
QDomElement childElement = childNode.toElement();
- if(!childElement.isNull() && childElement.tagName() == QStringLiteral("include")) {
- const QString attr = childElement.attribute(QStringLiteral("location"));
+ if (!childElement.isNull() && childElement.tagName() == "include"_L1) {
+ const QString attr = childElement.attribute(u"location"_s);
const QString path = fwi->absoluteDir().absoluteFilePath(attr);
- childElement.setAttribute(QStringLiteral("location"), backupDir.relativeFilePath(path));
+ childElement.setAttribute(u"location"_s, backupDir.relativeFilePath(path));
}
childNode = childNode.nextSibling();
}
@@ -1184,34 +1148,16 @@ void QDesignerActions::setWindowListSeparatorVisible(bool visible)
bool QDesignerActions::ensureBackupDirectories() {
- if (m_backupPath.isEmpty()) {
- // create names
- m_backupPath = QDir::homePath();
- m_backupPath += QDir::separator();
- m_backupPath += QStringLiteral(".designer");
- m_backupPath += QDir::separator();
- m_backupPath += QStringLiteral("backup");
- m_backupPath = QDir::toNativeSeparators(m_backupPath);
-
- m_backupTmpPath = m_backupPath;
- m_backupTmpPath += QDir::separator();
- m_backupTmpPath += QStringLiteral("tmp");
- m_backupTmpPath = QDir::toNativeSeparators(m_backupTmpPath);
- }
+ if (m_backupPath.isEmpty()) // create names
+ m_backupPath = qdesigner_internal::dataDirectory() + u"/backup"_s;
// ensure directories
const QDir backupDir(m_backupPath);
- const QDir backupTmpDir(m_backupTmpPath);
if (!backupDir.exists()) {
if (!backupDir.mkpath(m_backupPath)) {
- qdesigner_internal::designerWarning(tr("The backup directory %1 could not be created.").arg(m_backupPath));
- return false;
- }
- }
- if (!backupTmpDir.exists()) {
- if (!backupTmpDir.mkpath(m_backupTmpPath)) {
- qdesigner_internal::designerWarning(tr("The temporary backup directory %1 could not be created.").arg(m_backupTmpPath));
+ qdesigner_internal::designerWarning(tr("The backup directory %1 could not be created.")
+ .arg(QDir::toNativeSeparators(m_backupPath)));
return false;
}
}
@@ -1252,7 +1198,7 @@ QPixmap QDesignerActions::createPreviewPixmap(QDesignerFormWindowInterface *fw)
qdesigner_internal::PreviewConfiguration QDesignerActions::previewConfiguration()
{
qdesigner_internal::PreviewConfiguration pc;
- QDesignerSharedSettings settings(core());
+ qdesigner_internal::QDesignerSharedSettings settings(core());
if (settings.isCustomPreviewConfigurationEnabled())
pc = settings.customPreviewConfiguration();
return pc;
@@ -1271,11 +1217,8 @@ void QDesignerActions::savePreviewImage()
const QString filter = tr("Image files (*.%1)").arg(extension);
QString suggestion = fw->fileName();
- if (!suggestion.isEmpty()) {
- suggestion = QFileInfo(suggestion).baseName();
- suggestion += QLatin1Char('.');
- suggestion += extension;
- }
+ if (!suggestion.isEmpty())
+ suggestion = QFileInfo(suggestion).baseName() + u'.' + extension;
QFileDialog dialog(fw, tr("Save Image"), suggestion, filter);
dialog.setAcceptMode(QFileDialog::AcceptSave);
diff --git a/src/designer/src/designer/qdesigner_actions.h b/src/designer/src/designer/qdesigner_actions.h
index 4192a002b..e2efdfb52 100644
--- a/src/designer/src/designer/qdesigner_actions.h
+++ b/src/designer/src/designer/qdesigner_actions.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QDESIGNER_ACTIONS_H
#define QDESIGNER_ACTIONS_H
@@ -39,7 +14,6 @@ QT_BEGIN_NAMESPACE
class QDesignerWorkbench;
-class QDir;
class QTimer;
class QAction;
class QActionGroup;
@@ -146,7 +120,6 @@ private:
void showHelp(const QString &help);
void closePreview();
QRect fixDialogRect(const QRect &rect) const;
- QString fixResourceFileBackupPath(QDesignerFormWindowInterface *fwi, const QDir& backupDir);
void showStatusBarMessage(const QString &message) const;
QActionGroup *createHelpActions();
bool ensureBackupDirectories();
@@ -209,6 +182,8 @@ private:
QPrinter *m_printer = nullptr;
qdesigner_internal::PreviewManager *m_previewManager = nullptr;
+
+ std::unique_ptr<QMenu> m_recentMenu;
};
QT_END_NAMESPACE
diff --git a/src/designer/src/designer/qdesigner_appearanceoptions.cpp b/src/designer/src/designer/qdesigner_appearanceoptions.cpp
index 2c4437777..4c68a4445 100644
--- a/src/designer/src/designer/qdesigner_appearanceoptions.cpp
+++ b/src/designer/src/designer/qdesigner_appearanceoptions.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_appearanceoptions.h"
#include "ui_qdesigner_appearanceoptions.h"
@@ -39,11 +14,6 @@
QT_BEGIN_NAMESPACE
// ---------------- AppearanceOptions
-bool AppearanceOptions::equals(const AppearanceOptions &rhs) const
-{
- return uiMode == rhs.uiMode && toolWindowFontSettings == rhs.toolWindowFontSettings;
-}
-
void AppearanceOptions::toSettings(QDesignerSettings &settings) const
{
settings.setUiMode(uiMode);
diff --git a/src/designer/src/designer/qdesigner_appearanceoptions.h b/src/designer/src/designer/qdesigner_appearanceoptions.h
index b0b87c796..1b37750c6 100644
--- a/src/designer/src/designer/qdesigner_appearanceoptions.h
+++ b/src/designer/src/designer/qdesigner_appearanceoptions.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QDESIGNER_APPEARANCEOPTIONS_H
#define QDESIGNER_APPEARANCEOPTIONS_H
@@ -34,6 +9,7 @@
#include <QtDesigner/abstractoptionspage.h>
+#include <QtCore/qcompare.h>
#include <QtCore/qobject.h>
#include <QtCore/qpointer.h>
#include <QtWidgets/qwidget.h>
@@ -48,24 +24,22 @@ namespace Ui {
}
/* AppearanceOptions data */
-struct AppearanceOptions {
- bool equals(const AppearanceOptions&) const;
+struct AppearanceOptions
+{
void toSettings(QDesignerSettings &) const;
void fromSettings(const QDesignerSettings &);
UIMode uiMode{DockedMode};
ToolWindowFontSettings toolWindowFontSettings;
-};
-
-inline bool operator==(const AppearanceOptions &ao1, const AppearanceOptions &ao2)
-{
- return ao1.equals(ao2);
-}
-inline bool operator!=(const AppearanceOptions &ao1, const AppearanceOptions &ao2)
-{
- return !ao1.equals(ao2);
-}
+ friend bool comparesEqual(const AppearanceOptions &lhs,
+ const AppearanceOptions &rhs) noexcept
+ {
+ return lhs.uiMode == rhs.uiMode
+ && lhs.toolWindowFontSettings == rhs.toolWindowFontSettings;
+ }
+ Q_DECLARE_EQUALITY_COMPARABLE(AppearanceOptions)
+};
/* QDesignerAppearanceOptionsWidget: Let the user edit AppearanceOptions */
class QDesignerAppearanceOptionsWidget : public QWidget
diff --git a/src/designer/src/designer/qdesigner_formwindow.cpp b/src/designer/src/designer/qdesigner_formwindow.cpp
index 4ac104450..44db4df03 100644
--- a/src/designer/src/designer/qdesigner_formwindow.cpp
+++ b/src/designer/src/designer/qdesigner_formwindow.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_formwindow.h"
#include "qdesigner_workbench.h"
@@ -53,13 +28,13 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
QDesignerFormWindow::QDesignerFormWindow(QDesignerFormWindowInterface *editor, QDesignerWorkbench *workbench, QWidget *parent, Qt::WindowFlags flags)
: QWidget(parent, flags),
m_editor(editor),
m_workbench(workbench),
- m_action(new QAction(this)),
- m_initialized(false),
- m_windowTitleInitialized(false)
+ m_action(new QAction(this))
{
Q_ASSERT(workbench);
@@ -98,7 +73,7 @@ void QDesignerFormWindow::changeEvent(QEvent *e)
{
switch (e->type()) {
case QEvent::WindowTitleChange:
- m_action->setText(windowTitle().remove(QStringLiteral("[*]")));
+ m_action->setText(windowTitle().remove("[*]"_L1));
break;
case QEvent::WindowIconChange:
m_action->setIcon(windowIcon());
@@ -163,7 +138,7 @@ int QDesignerFormWindow::getNumberOfUntitledWindows() const
// Find the number of untitled windows excluding ourselves.
// Do not fall for 'untitled.ui', match with modified place holder.
// This will cause some problems with i18n, but for now I need the string to be "static"
- static const QRegularExpression rx(QStringLiteral("untitled( (\\d+))?\\[\\*\\]$"));
+ static const QRegularExpression rx(u"untitled( (\\d+))?\\[\\*\\]$"_s);
Q_ASSERT(rx.isValid());
for (int i = 0; i < totalWindows; ++i) {
QDesignerFormWindow *fw = m_workbench->formWindow(i);
@@ -195,10 +170,9 @@ void QDesignerFormWindow::updateWindowTitle(const QString &fileName)
QString fileNameTitle;
if (fileName.isEmpty()) {
- fileNameTitle = QStringLiteral("untitled");
+ fileNameTitle += "untitled"_L1;
if (const int maxUntitled = getNumberOfUntitledWindows()) {
- fileNameTitle += QLatin1Char(' ');
- fileNameTitle += QString::number(maxUntitled + 1);
+ fileNameTitle += u' ' + QString::number(maxUntitled + 1);
}
} else {
fileNameTitle = QFileInfo(fileName).fileName();
@@ -270,7 +244,7 @@ void QDesignerFormWindow::slotGeometryChanged()
QObject *object = core->propertyEditor()->object();
if (object == nullptr || !object->isWidgetType())
return;
- static const QString geometryProperty = QStringLiteral("geometry");
+ static const QString geometryProperty = u"geometry"_s;
const QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core->extensionManager(), object);
const int geometryIndex = sheet->indexOf(geometryProperty);
if (geometryIndex == -1)
diff --git a/src/designer/src/designer/qdesigner_formwindow.h b/src/designer/src/designer/qdesigner_formwindow.h
index da82f2495..6e509fcdd 100644
--- a/src/designer/src/designer/qdesigner_formwindow.h
+++ b/src/designer/src/designer/qdesigner_formwindow.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QDESIGNER_FORMWINDOW_H
#define QDESIGNER_FORMWINDOW_H
@@ -75,8 +50,8 @@ private:
QPointer<QDesignerFormWindowInterface> m_editor;
QPointer<QDesignerWorkbench> m_workbench;
QAction *m_action;
- bool m_initialized;
- bool m_windowTitleInitialized;
+ bool m_initialized = false;
+ bool m_windowTitleInitialized = false;
};
QT_END_NAMESPACE
diff --git a/src/designer/src/designer/qdesigner_pch.h b/src/designer/src/designer/qdesigner_pch.h
index 3615232c7..da4e03ddb 100644
--- a/src/designer/src/designer/qdesigner_pch.h
+++ b/src/designer/src/designer/qdesigner_pch.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#if defined __cplusplus
#include <QtCore/qobject.h>
diff --git a/src/designer/src/designer/qdesigner_server.cpp b/src/designer/src/designer/qdesigner_server.cpp
index e223f0b2c..5fd5c63ba 100644
--- a/src/designer/src/designer/qdesigner_server.cpp
+++ b/src/designer/src/designer/qdesigner_server.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QtCore/qfileinfo.h>
#include <QtCore/qstringlist.h>
@@ -40,12 +15,13 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
// ### review
QDesignerServer::QDesignerServer(QObject *parent)
: QObject(parent)
{
- m_socket = nullptr;
m_server = new QTcpServer(this);
if (m_server->listen(QHostAddress::LocalHost, 0)) {
connect(m_server, &QTcpServer::newConnection,
@@ -81,8 +57,8 @@ void QDesignerServer::readFromClient()
while (m_socket->canReadLine()) {
QString file = QString::fromUtf8(m_socket->readLine());
if (!file.isNull()) {
- file.remove(QLatin1Char('\n'));
- file.remove(QLatin1Char('\r'));
+ file.remove(u'\n');
+ file.remove(u'\r');
qDesigner->postEvent(qDesigner, new QFileOpenEvent(file));
}
}
@@ -127,8 +103,8 @@ void QDesignerClient::readFromSocket()
while (m_socket->canReadLine()) {
QString file = QString::fromUtf8(m_socket->readLine());
if (!file.isNull()) {
- file.remove(QLatin1Char('\n'));
- file.remove(QLatin1Char('\r'));
+ file.remove(u'\n');
+ file.remove(u'\r');
if (QFile::exists(file))
qDesigner->postEvent(qDesigner, new QFileOpenEvent(file));
}
diff --git a/src/designer/src/designer/qdesigner_server.h b/src/designer/src/designer/qdesigner_server.h
index 28eec7887..d45345599 100644
--- a/src/designer/src/designer/qdesigner_server.h
+++ b/src/designer/src/designer/qdesigner_server.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QDESIGNER_SERVER_H
#define QDESIGNER_SERVER_H
@@ -54,7 +29,7 @@ private slots:
private:
QTcpServer *m_server;
- QTcpSocket *m_socket;
+ QTcpSocket *m_socket = nullptr;
};
class QDesignerClient: public QObject
diff --git a/src/designer/src/designer/qdesigner_settings.cpp b/src/designer/src/designer/qdesigner_settings.cpp
index e8ac4be54..9a3010323 100644
--- a/src/designer/src/designer/qdesigner_settings.cpp
+++ b/src/designer/src/designer/qdesigner_settings.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner.h"
#include "qdesigner_settings.h"
@@ -49,15 +24,17 @@ enum { debugSettings = 0 };
QT_BEGIN_NAMESPACE
-static const char *newFormShowKey = "newFormDialog/ShowOnStartup";
+using namespace Qt::StringLiterals;
+
+static constexpr auto newFormShowKey = "newFormDialog/ShowOnStartup"_L1;
// Change the version whenever the arrangement changes significantly.
-static const char *mainWindowStateKey = "MainWindowState45";
-static const char *toolBarsStateKey = "ToolBarsState45";
+static constexpr auto mainWindowStateKey = "MainWindowState45"_L1;
+static constexpr auto toolBarsStateKey = "ToolBarsState45"_L1;
-static const char *backupOrgListKey = "backup/fileListOrg";
-static const char *backupBakListKey = "backup/fileListBak";
-static const char *recentFilesListKey = "recentFilesList";
+static constexpr auto backupOrgListKey = "backup/fileListOrg"_L1;
+static constexpr auto backupBakListKey = "backup/fileListBak"_L1;
+static constexpr auto recentFilesListKey = "recentFilesList"_L1;
QDesignerSettings::QDesignerSettings(QDesignerFormEditorInterface *core) :
qdesigner_internal::QDesignerSharedSettings(core)
@@ -87,8 +64,8 @@ void QDesignerSettings::saveGeometryFor(const QWidget *w)
if (debugSettings)
qDebug() << Q_FUNC_INFO << w << "visible=" << visible;
s->beginGroup(w->objectName());
- s->setValue(QStringLiteral("visible"), visible);
- s->setValue(QStringLiteral("geometry"), w->saveGeometry());
+ s->setValue(u"visible"_s, visible);
+ s->setValue(u"geometry"_s, w->saveGeometry());
s->endGroup();
}
@@ -96,8 +73,8 @@ void QDesignerSettings::restoreGeometry(QWidget *w, QRect fallBack) const
{
Q_ASSERT(w && !w->objectName().isEmpty());
const QString key = w->objectName();
- const QByteArray ba(settings()->value(key + QStringLiteral("/geometry")).toByteArray());
- const bool visible = settings()->value(key + QStringLiteral("/visible"), true).toBool();
+ const QByteArray ba(settings()->value(key + "/geometry"_L1).toByteArray());
+ const bool visible = settings()->value(key + "/visible"_L1, true).toBool();
if (debugSettings)
qDebug() << Q_FUNC_INFO << w << fallBack << "visible=" << visible;
@@ -121,44 +98,44 @@ void QDesignerSettings::restoreGeometry(QWidget *w, QRect fallBack) const
QStringList QDesignerSettings::recentFilesList() const
{
- return settings()->value(QLatin1String(recentFilesListKey)).toStringList();
+ return settings()->value(recentFilesListKey).toStringList();
}
void QDesignerSettings::setRecentFilesList(const QStringList &sl)
{
- settings()->setValue(QLatin1String(recentFilesListKey), sl);
+ settings()->setValue(recentFilesListKey, sl);
}
void QDesignerSettings::setShowNewFormOnStartup(bool showIt)
{
- settings()->setValue(QLatin1String(newFormShowKey), showIt);
+ settings()->setValue(newFormShowKey, showIt);
}
bool QDesignerSettings::showNewFormOnStartup() const
{
- return settings()->value(QLatin1String(newFormShowKey), true).toBool();
+ return settings()->value(newFormShowKey, true).toBool();
}
QByteArray QDesignerSettings::mainWindowState(UIMode mode) const
{
- return settings()->value(QLatin1String(mainWindowStateKey) + modeChar(mode)).toByteArray();
+ return settings()->value(mainWindowStateKey + modeChar(mode)).toByteArray();
}
void QDesignerSettings::setMainWindowState(UIMode mode, const QByteArray &mainWindowState)
{
- settings()->setValue(QLatin1String(mainWindowStateKey) + modeChar(mode), mainWindowState);
+ settings()->setValue(mainWindowStateKey + modeChar(mode), mainWindowState);
}
QByteArray QDesignerSettings::toolBarsState(UIMode mode) const
{
- QString key = QLatin1String(toolBarsStateKey);
+ QString key = toolBarsStateKey;
key += modeChar(mode);
return settings()->value(key).toByteArray();
}
void QDesignerSettings::setToolBarsState(UIMode mode, const QByteArray &toolBarsState)
{
- QString key = QLatin1String(toolBarsStateKey);
+ QString key = toolBarsStateKey;
key += modeChar(mode);
settings()->setValue(key, toolBarsState);
}
@@ -166,8 +143,8 @@ void QDesignerSettings::setToolBarsState(UIMode mode, const QByteArray &toolBars
void QDesignerSettings::clearBackup()
{
QDesignerSettingsInterface *s = settings();
- s->remove(QLatin1String(backupOrgListKey));
- s->remove(QLatin1String(backupBakListKey));
+ s->remove(backupOrgListKey);
+ s->remove(backupBakListKey);
}
void QDesignerSettings::setBackup(const QMap<QString, QString> &map)
@@ -176,18 +153,18 @@ void QDesignerSettings::setBackup(const QMap<QString, QString> &map)
const QStringList bak = map.values();
QDesignerSettingsInterface *s = settings();
- s->setValue(QLatin1String(backupOrgListKey), org);
- s->setValue(QLatin1String(backupBakListKey), bak);
+ s->setValue(backupOrgListKey, org);
+ s->setValue(backupBakListKey, bak);
}
QMap<QString, QString> QDesignerSettings::backup() const
{
- const QStringList org = settings()->value(QLatin1String(backupOrgListKey), QStringList()).toStringList();
- const QStringList bak = settings()->value(QLatin1String(backupBakListKey), QStringList()).toStringList();
+ const QStringList org = settings()->value(backupOrgListKey, QStringList()).toStringList();
+ const QStringList bak = settings()->value(backupBakListKey, QStringList()).toStringList();
QMap<QString, QString> map;
- const int orgCount = org.count();
- for (int i = 0; i < orgCount; ++i)
+ const qsizetype orgCount = org.size();
+ for (qsizetype i = 0; i < orgCount; ++i)
map.insert(org.at(i), bak.at(i));
return map;
@@ -196,8 +173,8 @@ QMap<QString, QString> QDesignerSettings::backup() const
void QDesignerSettings::setUiMode(UIMode mode)
{
QDesignerSettingsInterface *s = settings();
- s->beginGroup(QStringLiteral("UI"));
- s->setValue(QStringLiteral("currentMode"), mode);
+ s->beginGroup(u"UI"_s);
+ s->setValue(u"currentMode"_s, mode);
s->endGroup();
}
@@ -208,17 +185,17 @@ UIMode QDesignerSettings::uiMode() const
#else
const UIMode defaultMode = DockedMode;
#endif
- UIMode uiMode = static_cast<UIMode>(value(QStringLiteral("UI/currentMode"), defaultMode).toInt());
+ UIMode uiMode = static_cast<UIMode>(value(u"UI/currentMode"_s, defaultMode).toInt());
return uiMode;
}
void QDesignerSettings::setToolWindowFont(const ToolWindowFontSettings &fontSettings)
{
QDesignerSettingsInterface *s = settings();
- s->beginGroup(QStringLiteral("UI"));
- s->setValue(QStringLiteral("font"), fontSettings.m_font);
- s->setValue(QStringLiteral("useFont"), fontSettings.m_useFont);
- s->setValue(QStringLiteral("writingSystem"), fontSettings.m_writingSystem);
+ s->beginGroup(u"UI"_s);
+ s->setValue(u"font"_s, fontSettings.m_font);
+ s->setValue(u"useFont"_s, fontSettings.m_useFont);
+ s->setValue(u"writingSystem"_s, fontSettings.m_writingSystem);
s->endGroup();
}
@@ -226,11 +203,11 @@ ToolWindowFontSettings QDesignerSettings::toolWindowFont() const
{
ToolWindowFontSettings fontSettings;
fontSettings.m_writingSystem =
- static_cast<QFontDatabase::WritingSystem>(value(QStringLiteral("UI/writingSystem"),
+ static_cast<QFontDatabase::WritingSystem>(value(u"UI/writingSystem"_s,
QFontDatabase::Any).toInt());
- fontSettings.m_font = qvariant_cast<QFont>(value(QStringLiteral("UI/font")));
+ fontSettings.m_font = qvariant_cast<QFont>(value(u"UI/font"_s));
fontSettings.m_useFont =
- settings()->value(QStringLiteral("UI/useFont"), QVariant(false)).toBool();
+ settings()->value(u"UI/useFont"_s, QVariant(false)).toBool();
return fontSettings;
}
diff --git a/src/designer/src/designer/qdesigner_settings.h b/src/designer/src/designer/qdesigner_settings.h
index 52ef46b85..72895a52d 100644
--- a/src/designer/src/designer/qdesigner_settings.h
+++ b/src/designer/src/designer/qdesigner_settings.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QDESIGNER_SETTINGS_H
#define QDESIGNER_SETTINGS_H
diff --git a/src/designer/src/designer/qdesigner_toolwindow.cpp b/src/designer/src/designer/qdesigner_toolwindow.cpp
index 2a003bb25..3583a55e9 100644
--- a/src/designer/src/designer/qdesigner_toolwindow.cpp
+++ b/src/designer/src/designer/qdesigner_toolwindow.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner.h"
#include "qdesigner_toolwindow.h"
@@ -43,17 +18,13 @@
#include <QtCore/qdebug.h>
-enum { debugToolWindow = 0 };
+static constexpr bool debugToolWindow = false;
QT_BEGIN_NAMESPACE
-// ---------------- QDesignerToolWindowFontSettings
-bool ToolWindowFontSettings::equals(const ToolWindowFontSettings &rhs) const
-{
- return m_useFont == rhs.m_useFont &&
- m_writingSystem == rhs.m_writingSystem &&
- m_font == rhs.m_font;
-}
+using namespace Qt::StringLiterals;
+
+static constexpr int margin = 20;
// ---------------- QDesignerToolWindow
QDesignerToolWindow::QDesignerToolWindow(QDesignerWorkbench *workbench,
@@ -134,16 +105,6 @@ QDesignerWorkbench *QDesignerToolWindow::workbench() const
return m_workbench;
}
-QRect QDesignerToolWindow::geometryHint() const
-{
- return QRect();
-}
-
-QRect QDesignerToolWindow::availableToolWindowGeometry() const
-{
- return m_workbench->availableGeometry();
-}
-
// ---------------------- PropertyEditorToolWindow
static inline QWidget *createPropertyEditor(QDesignerFormEditorInterface *core, QWidget *parent = nullptr)
@@ -158,7 +119,7 @@ class PropertyEditorToolWindow : public QDesignerToolWindow
public:
explicit PropertyEditorToolWindow(QDesignerWorkbench *workbench);
- QRect geometryHint() const override;
+ QRect geometryHint(const QRect &) const override;
protected:
void showEvent(QShowEvent *event) override;
@@ -167,19 +128,17 @@ protected:
PropertyEditorToolWindow::PropertyEditorToolWindow(QDesignerWorkbench *workbench) :
QDesignerToolWindow(workbench,
createPropertyEditor(workbench->core()),
- QStringLiteral("qt_designer_propertyeditor"),
+ u"qt_designer_propertyeditor"_s,
QDesignerToolWindow::tr("Property Editor"),
- QStringLiteral("__qt_property_editor_action"),
+ u"__qt_property_editor_action"_s,
Qt::RightDockWidgetArea)
{
action()->setShortcut(Qt::CTRL | Qt::Key_I);
}
-QRect PropertyEditorToolWindow::geometryHint() const
+QRect PropertyEditorToolWindow::geometryHint(const QRect &g) const
{
- const QRect g = availableToolWindowGeometry();
- const int margin = workbench()->marginHint();
const int spacing = 40;
const QSize sz(g.width() * 1/4, g.height() * 4/6);
@@ -215,24 +174,21 @@ class ActionEditorToolWindow: public QDesignerToolWindow
public:
explicit ActionEditorToolWindow(QDesignerWorkbench *workbench);
- QRect geometryHint() const override;
+ QRect geometryHint(const QRect &g) const override;
};
ActionEditorToolWindow::ActionEditorToolWindow(QDesignerWorkbench *workbench) :
QDesignerToolWindow(workbench,
createActionEditor(workbench->core()),
- QStringLiteral("qt_designer_actioneditor"),
+ u"qt_designer_actioneditor"_s,
QDesignerToolWindow::tr("Action Editor"),
- QStringLiteral("__qt_action_editor_tool_action"),
+ u"__qt_action_editor_tool_action"_s,
Qt::RightDockWidgetArea)
{
}
-QRect ActionEditorToolWindow::geometryHint() const
+QRect ActionEditorToolWindow::geometryHint(const QRect &g) const
{
- const QRect g = availableToolWindowGeometry();
- const int margin = workbench()->marginHint();
-
const QSize sz(g.width() * 1/4, g.height() * 1/6);
const QRect rc = QRect((g.right() + 1 - sz.width() - margin),
@@ -257,24 +213,21 @@ class ObjectInspectorToolWindow: public QDesignerToolWindow
public:
explicit ObjectInspectorToolWindow(QDesignerWorkbench *workbench);
- QRect geometryHint() const override;
+ QRect geometryHint(const QRect &g) const override;
};
ObjectInspectorToolWindow::ObjectInspectorToolWindow(QDesignerWorkbench *workbench) :
QDesignerToolWindow(workbench,
createObjectInspector(workbench->core()),
- QStringLiteral("qt_designer_objectinspector"),
+ u"qt_designer_objectinspector"_s,
QDesignerToolWindow::tr("Object Inspector"),
- QStringLiteral("__qt_object_inspector_tool_action"),
+ u"__qt_object_inspector_tool_action"_s,
Qt::RightDockWidgetArea)
{
}
-QRect ObjectInspectorToolWindow::geometryHint() const
+QRect ObjectInspectorToolWindow::geometryHint(const QRect &g) const
{
- const QRect g = availableToolWindowGeometry();
- const int margin = workbench()->marginHint();
-
const QSize sz(g.width() * 1/4, g.height() * 1/6);
const QRect rc = QRect((g.right() + 1 - sz.width() - margin),
@@ -292,24 +245,21 @@ class ResourceEditorToolWindow: public QDesignerToolWindow
public:
explicit ResourceEditorToolWindow(QDesignerWorkbench *workbench);
- QRect geometryHint() const override;
+ QRect geometryHint(const QRect &g) const override;
};
ResourceEditorToolWindow::ResourceEditorToolWindow(QDesignerWorkbench *workbench) :
QDesignerToolWindow(workbench,
QDesignerComponents::createResourceEditor(workbench->core(), nullptr),
- QStringLiteral("qt_designer_resourceeditor"),
+ u"qt_designer_resourceeditor"_s,
QDesignerToolWindow::tr("Resource Browser"),
- QStringLiteral("__qt_resource_editor_tool_action"),
+ u"__qt_resource_editor_tool_action"_s,
Qt::RightDockWidgetArea)
{
}
-QRect ResourceEditorToolWindow::geometryHint() const
+QRect ResourceEditorToolWindow::geometryHint(const QRect &g) const
{
- const QRect g = availableToolWindowGeometry();
- const int margin = workbench()->marginHint();
-
const QSize sz(g.width() * 1/3, g.height() * 1/6);
QRect r(QPoint(0, 0), sz);
r.moveCenter(g.center());
@@ -326,24 +276,21 @@ class SignalSlotEditorToolWindow: public QDesignerToolWindow
public:
explicit SignalSlotEditorToolWindow(QDesignerWorkbench *workbench);
- QRect geometryHint() const override;
+ QRect geometryHint(const QRect &g) const override;
};
SignalSlotEditorToolWindow::SignalSlotEditorToolWindow(QDesignerWorkbench *workbench) :
QDesignerToolWindow(workbench,
QDesignerComponents::createSignalSlotEditor(workbench->core(), nullptr),
- QStringLiteral("qt_designer_signalsloteditor"),
+ u"qt_designer_signalsloteditor"_s,
QDesignerToolWindow::tr("Signal/Slot Editor"),
- QStringLiteral("__qt_signal_slot_editor_tool_action"),
+ u"__qt_signal_slot_editor_tool_action"_s,
Qt::RightDockWidgetArea)
{
}
-QRect SignalSlotEditorToolWindow::geometryHint() const
+QRect SignalSlotEditorToolWindow::geometryHint(const QRect &g) const
{
- const QRect g = availableToolWindowGeometry();
- const int margin = workbench()->marginHint();
-
const QSize sz(g.width() * 1/3, g.height() * 1/6);
QRect r(QPoint(0, 0), sz);
r.moveCenter(g.center());
@@ -367,23 +314,21 @@ class WidgetBoxToolWindow: public QDesignerToolWindow
public:
explicit WidgetBoxToolWindow(QDesignerWorkbench *workbench);
- QRect geometryHint() const override;
+ QRect geometryHint(const QRect &g) const override;
};
WidgetBoxToolWindow::WidgetBoxToolWindow(QDesignerWorkbench *workbench) :
QDesignerToolWindow(workbench,
createWidgetBox(workbench->core()),
- QStringLiteral("qt_designer_widgetbox"),
+ u"qt_designer_widgetbox"_s,
QDesignerToolWindow::tr("Widget Box"),
- QStringLiteral("__qt_widget_box_tool_action"),
+ u"__qt_widget_box_tool_action"_s,
Qt::LeftDockWidgetArea)
{
}
-QRect WidgetBoxToolWindow::geometryHint() const
+QRect WidgetBoxToolWindow::geometryHint(const QRect &g) const
{
- const QRect g = availableToolWindowGeometry();
- const int margin = workbench()->marginHint();
const QRect rc = QRect(g.left() + margin,
g.top() + margin,
g.width() * 1/4, g.height() * 5/6);
diff --git a/src/designer/src/designer/qdesigner_toolwindow.h b/src/designer/src/designer/qdesigner_toolwindow.h
index 88ea6bb00..7fec13981 100644
--- a/src/designer/src/designer/qdesigner_toolwindow.h
+++ b/src/designer/src/designer/qdesigner_toolwindow.h
@@ -1,59 +1,33 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QDESIGNER_TOOLWINDOW_H
#define QDESIGNER_TOOLWINDOW_H
#include "mainwindow.h"
+#include <QtCore/qcompare.h>
#include <QtCore/qpointer.h>
#include <QtGui/qfontdatabase.h>
#include <QtWidgets/qmainwindow.h>
QT_BEGIN_NAMESPACE
-struct ToolWindowFontSettings {
- bool equals(const ToolWindowFontSettings &) const;
-
+struct ToolWindowFontSettings
+{
QFont m_font;
QFontDatabase::WritingSystem m_writingSystem{QFontDatabase::Any};
bool m_useFont{false};
-};
-
-inline bool operator==(const ToolWindowFontSettings &tw1, const ToolWindowFontSettings &tw2)
-{
- return tw1.equals(tw2);
-}
-inline bool operator!=(const ToolWindowFontSettings &tw1, const ToolWindowFontSettings &tw2)
-{
- return !tw1.equals(tw2);
-}
+ friend bool comparesEqual(const ToolWindowFontSettings &lhs,
+ const ToolWindowFontSettings &rhs) noexcept
+ {
+ return lhs.m_useFont == rhs.m_useFont
+ && lhs.m_writingSystem == rhs.m_writingSystem
+ && lhs.m_font == rhs.m_font;
+ }
+ Q_DECLARE_EQUALITY_COMPARABLE(ToolWindowFontSettings)
+};
class QDesignerWorkbench;
@@ -86,7 +60,7 @@ public:
QAction *action() const;
Qt::DockWidgetArea dockWidgetAreaHint() const { return m_dockAreaHint; }
- virtual QRect geometryHint() const;
+ virtual QRect geometryHint(const QRect &availableGeometry) const = 0;
private slots:
void showMe(bool);
@@ -96,8 +70,6 @@ protected:
void hideEvent(QHideEvent *e) override;
void changeEvent(QEvent *e) override;
- QRect availableToolWindowGeometry() const;
-
private:
const Qt::DockWidgetArea m_dockAreaHint;
QDesignerWorkbench *m_workbench;
diff --git a/src/designer/src/designer/qdesigner_workbench.cpp b/src/designer/src/designer/qdesigner_workbench.cpp
index f94aa98bd..ff1b37030 100644
--- a/src/designer/src/designer/qdesigner_workbench.cpp
+++ b/src/designer/src/designer/qdesigner_workbench.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_workbench.h"
#include "qdesigner.h"
@@ -59,8 +34,10 @@
#include <QtWidgets/qlayout.h>
#include <QtGui/qactiongroup.h>
+#include <QtGui/qcursor.h>
#include <QtGui/qevent.h>
#include <QtGui/qscreen.h>
+#include <QtGui/qwindow.h>
#include <QtCore/qdir.h>
#include <QtCore/qfile.h>
@@ -71,13 +48,15 @@
QT_BEGIN_NAMESPACE
-static const char *appFontPrefixC = "AppFonts";
+using namespace Qt::StringLiterals;
+
+static constexpr auto appFontPrefixC = "AppFonts"_L1;
using ActionList = QList<QAction *>;
static QMdiSubWindow *mdiSubWindowOf(const QWidget *w)
{
- QMdiSubWindow *rc = qobject_cast<QMdiSubWindow *>(w->parentWidget());
+ auto *rc = qobject_cast<QMdiSubWindow *>(w->parentWidget());
Q_ASSERT(rc);
return rc;
}
@@ -85,7 +64,7 @@ static QMdiSubWindow *mdiSubWindowOf(const QWidget *w)
static QDockWidget *dockWidgetOf(const QWidget *w)
{
for (QWidget *parentWidget = w->parentWidget(); parentWidget ; parentWidget = parentWidget->parentWidget()) {
- if (QDockWidget *dw = qobject_cast<QDockWidget *>(parentWidget)) {
+ if (auto *dw = qobject_cast<QDockWidget *>(parentWidget)) {
return dw;
}
}
@@ -94,9 +73,9 @@ static QDockWidget *dockWidgetOf(const QWidget *w)
}
// ------------ QDesignerWorkbench::Position
-QDesignerWorkbench::Position::Position(const QMdiSubWindow *mdiSubWindow, const QPoint &mdiAreaOffset) :
+QDesignerWorkbench::Position::Position(const QMdiSubWindow *mdiSubWindow) :
m_minimized(mdiSubWindow->isShaded()),
- m_position(mdiSubWindow->pos() + mdiAreaOffset)
+ m_position(mdiSubWindow->pos() + mdiSubWindow->mdiArea()->pos())
{
}
@@ -106,12 +85,12 @@ QDesignerWorkbench::Position::Position(const QDockWidget *dockWidget) :
{
}
-QDesignerWorkbench::Position::Position(const QWidget *topLevelWindow, const QPoint &desktopTopLeft)
+QDesignerWorkbench::Position::Position(const QWidget *topLevelWindow)
{
- const QWidget *window =topLevelWindow->window ();
+ const QWidget *window = topLevelWindow->window();
Q_ASSERT(window);
m_minimized = window->isMinimized();
- m_position = window->pos() - desktopTopLeft;
+ m_position = window->pos() - window->screen()->availableGeometry().topLeft();
}
void QDesignerWorkbench::Position::applyTo(QMdiSubWindow *mdiSubWindow,
@@ -150,9 +129,8 @@ void QDesignerWorkbench::Position::applyTo(QDockWidget *dockWidget) const
static inline void addActionsToMenu(QMenu *m, const ActionList &al)
{
- const ActionList::const_iterator cend = al.constEnd();
- for (ActionList::const_iterator it = al.constBegin(); it != cend; ++it)
- m->addAction(*it);
+ for (auto *a : al)
+ m->addAction(a);
}
static inline QMenu *addMenu(QMenuBar *mb, const QString &title, const ActionList &al)
@@ -164,8 +142,8 @@ static inline QMenu *addMenu(QMenuBar *mb, const QString &title, const ActionLis
// -------- QDesignerWorkbench
-QDesignerWorkbench::QDesignerWorkbench() :
- m_core(QDesignerComponents::createFormEditor(this)),
+QDesignerWorkbench::QDesignerWorkbench(const QStringList &pluginPaths) :
+ m_core(QDesignerComponents::createFormEditorWithPluginPaths(pluginPaths, this)),
m_windowActions(new QActionGroup(this)),
m_globalMenuBar(new QMenuBar)
{
@@ -189,7 +167,7 @@ QDesignerWorkbench::QDesignerWorkbench() :
addActionsToMenu(editMenu, m_actionManager->toolActions()->actions());
QMenu *formMenu = addMenu(m_globalMenuBar, tr("F&orm"), m_actionManager->formActions()->actions());
- QMenu *previewSubMenu = new QMenu(tr("Preview in"), formMenu);
+ auto *previewSubMenu = new QMenu(tr("Preview in"), formMenu);
formMenu->insertMenu(m_actionManager->previewFormAction(), previewSubMenu);
addActionsToMenu(previewSubMenu, m_actionManager->styleActions()->actions());
@@ -202,7 +180,7 @@ QDesignerWorkbench::QDesignerWorkbench() :
addMenu(m_globalMenuBar, tr("&Help"), m_actionManager->helpActions()->actions());
// Add the tools in view menu order
- QActionGroup *viewActions = new QActionGroup(this);
+ auto *viewActions = new QActionGroup(this);
viewActions->setExclusive(false);
for (int i = 0; i < QDesignerToolWindow::StandardToolWindowCount; i++) {
@@ -242,7 +220,7 @@ QDesignerWorkbench::QDesignerWorkbench() :
}
restoreUISettings();
- AppFontWidget::restore(m_core->settingsManager(), QLatin1String(appFontPrefixC));
+ AppFontWidget::restore(m_core->settingsManager(), appFontPrefixC);
m_state = StateUp;
}
@@ -257,6 +235,9 @@ QDesignerWorkbench::~QDesignerWorkbench()
delete widgetBoxToolWindow();
break;
}
+ delete m_globalMenuBar;
+ m_windowMenu = nullptr;
+ delete m_dockedMainWindow;
}
void QDesignerWorkbench::saveGeometriesForModeChange()
@@ -266,19 +247,17 @@ void QDesignerWorkbench::saveGeometriesForModeChange()
case NeutralMode:
break;
case TopLevelMode: {
- const QPoint desktopOffset = QGuiApplication::primaryScreen()->availableGeometry().topLeft();
- for (QDesignerToolWindow *tw : qAsConst(m_toolWindows))
- m_Positions.insert(tw, Position(tw, desktopOffset));
- for (QDesignerFormWindow *fw : qAsConst(m_formWindows))
- m_Positions.insert(fw, Position(fw, desktopOffset));
+ for (QDesignerToolWindow *tw : std::as_const(m_toolWindows))
+ m_Positions.insert(tw, Position(tw));
+ for (QDesignerFormWindow *fw : std::as_const(m_formWindows))
+ m_Positions.insert(fw, Position(fw));
}
break;
case DockedMode: {
- const QPoint mdiAreaOffset = m_dockedMainWindow->mdiArea()->pos();
- for (QDesignerToolWindow *tw : qAsConst(m_toolWindows))
+ for (QDesignerToolWindow *tw : std::as_const(m_toolWindows))
m_Positions.insert(tw, Position(dockWidgetOf(tw)));
- for (QDesignerFormWindow *fw : qAsConst(m_formWindows))
- m_Positions.insert(fw, Position(mdiSubWindowOf(fw), mdiAreaOffset));
+ for (QDesignerFormWindow *fw : std::as_const(m_formWindows))
+ m_Positions.insert(fw, Position(mdiSubWindowOf(fw)));
}
break;
}
@@ -346,11 +325,12 @@ QWidget *QDesignerWorkbench::magicalParent(const QWidget *w) const
case DockedMode:
return m_dockedMainWindow->mdiArea();
case NeutralMode:
- return nullptr;
+ break;
default:
- Q_ASSERT(0);
- return 0;
+ Q_ASSERT(false);
+ break;
}
+ return nullptr;
}
void QDesignerWorkbench::switchToNeutralMode()
@@ -368,14 +348,23 @@ void QDesignerWorkbench::switchToNeutralMode()
m_mode = NeutralMode;
- for (QDesignerToolWindow *tw : qAsConst(m_toolWindows)) {
+ for (QDesignerToolWindow *tw : std::as_const(m_toolWindows)) {
tw->setCloseEventPolicy(MainWindowBase::AcceptCloseEvents);
tw->setParent(nullptr);
+ // Prevent unneeded native children when switching to docked
+ if (auto *handle = tw->windowHandle())
+ handle->destroy();
}
- for (QDesignerFormWindow *fw : qAsConst(m_formWindows)) {
+ if (m_dockedMainWindow != nullptr) // Prevent assert
+ m_dockedMainWindow->mdiArea()->setActiveSubWindow(nullptr);
+
+ for (QDesignerFormWindow *fw : std::as_const(m_formWindows)) {
fw->setParent(nullptr);
fw->setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
+ // Prevent unneeded native children when switching to docked
+ if (auto *handle = fw->windowHandle())
+ handle->destroy();
}
#ifndef Q_OS_MACOS
@@ -386,7 +375,6 @@ void QDesignerWorkbench::switchToNeutralMode()
qDesigner->setMainWindow(nullptr);
delete m_dockedMainWindow;
- m_dockedMainWindow = nullptr;
}
void QDesignerWorkbench::switchToDockedMode()
@@ -416,7 +404,9 @@ void QDesignerWorkbench::switchToDockedMode()
this, &QDesignerWorkbench::slotFileDropped);
connect(m_dockedMainWindow, &DockedMainWindow::formWindowActivated,
this, &QDesignerWorkbench::slotFormWindowActivated);
- m_dockedMainWindow->restoreSettings(settings, m_dockedMainWindow->addToolWindows(m_toolWindows), desktopGeometry());
+ m_dockedMainWindow->restoreSettings(settings,
+ m_dockedMainWindow->addToolWindows(m_toolWindows),
+ screen()->availableGeometry());
m_core->setTopLevel(m_dockedMainWindow);
@@ -426,7 +416,7 @@ void QDesignerWorkbench::switchToDockedMode()
#endif
qDesigner->setMainWindow(m_dockedMainWindow);
- for (QDesignerFormWindow *fw : qAsConst(m_formWindows)) {
+ for (QDesignerFormWindow *fw : std::as_const(m_formWindows)) {
QMdiSubWindow *subwin = m_dockedMainWindow->createMdiSubWindow(fw, magicalWindowFlags(fw),
m_actionManager->closeFormAction()->shortcut());
subwin->hide();
@@ -446,13 +436,22 @@ void QDesignerWorkbench::adjustMDIFormPositions()
{
const QPoint mdiAreaOffset = m_dockedMainWindow->mdiArea()->pos();
- for (QDesignerFormWindow *fw : qAsConst(m_formWindows)) {
- const PositionMap::const_iterator pit = m_Positions.constFind(fw);
+ for (QDesignerFormWindow *fw : std::as_const(m_formWindows)) {
+ const auto pit = m_Positions.constFind(fw);
if (pit != m_Positions.constEnd())
pit->applyTo(mdiSubWindowOf(fw), mdiAreaOffset);
}
}
+static QScreen *screenUnderMouse()
+{
+ const auto &screens = QGuiApplication::screens();
+ const auto pos = QCursor::pos();
+ auto pred = [pos](const QScreen *s) { return s->geometry().contains(pos); };
+ auto it = std::find_if(screens.cbegin(), screens.cend(), pred);
+ return it != screens.cend() ? *it : QGuiApplication::primaryScreen();
+}
+
void QDesignerWorkbench::switchToTopLevelMode()
{
if (m_mode == TopLevelMode)
@@ -463,8 +462,13 @@ void QDesignerWorkbench::switchToTopLevelMode()
Q_ASSERT(widgetBoxWrapper);
switchToNeutralMode();
- const QPoint desktopOffset = desktopGeometry().topLeft();
- m_mode = TopLevelMode;
+ m_mode = TopLevelMode; // Set new mode before calling screen()
+ const QDesignerSettings settings(m_core);
+ const QByteArray mainWindowState = settings.mainWindowState(m_mode);
+ // Open on screen where the mouse is when no settings exist
+ const auto *currentScreen = mainWindowState.isEmpty() ? screenUnderMouse() : screen();
+ const QRect availableGeometry = currentScreen->availableGeometry();
+ const QPoint desktopOffset = availableGeometry.topLeft();
// The widget box is special, it gets the menubar and gets to be the main widget.
@@ -485,37 +489,36 @@ void QDesignerWorkbench::switchToTopLevelMode()
widgetBoxWrapper->setWindowTitle(MainWindowBase::mainWindowTitle());
#endif // !Q_OS_MACOS
- const QDesignerSettings settings(m_core);
m_topLevelData.toolbars = MainWindowBase::createToolBars(m_actionManager, false);
m_topLevelData.toolbarManager = new ToolBarManager(widgetBoxWrapper, widgetBoxWrapper,
m_toolbarMenu, m_actionManager,
m_topLevelData.toolbars, m_toolWindows);
- const int toolBarCount = m_topLevelData.toolbars.size();
- for (int i = 0; i < toolBarCount; i++) {
+ const qsizetype toolBarCount = m_topLevelData.toolbars.size();
+ for (qsizetype i = 0; i < toolBarCount; ++i) {
widgetBoxWrapper->addToolBar(m_topLevelData.toolbars.at(i));
if (i == 3)
widgetBoxWrapper->insertToolBarBreak(m_topLevelData.toolbars.at(i));
}
m_topLevelData.toolbarManager->restoreState(settings.toolBarsState(m_mode), MainWindowBase::settingsVersion());
- widgetBoxWrapper->restoreState(settings.mainWindowState(m_mode), MainWindowBase::settingsVersion());
+ widgetBoxWrapper->restoreState(mainWindowState, MainWindowBase::settingsVersion());
bool found_visible_window = false;
- for (QDesignerToolWindow *tw : qAsConst(m_toolWindows)) {
+ for (QDesignerToolWindow *tw : std::as_const(m_toolWindows)) {
tw->setParent(magicalParent(tw), magicalWindowFlags(tw));
- settings.restoreGeometry(tw, tw->geometryHint());
+ settings.restoreGeometry(tw, tw->geometryHint(availableGeometry));
tw->action()->setChecked(tw->isVisible());
found_visible_window |= tw->isVisible();
}
if (!m_toolWindows.isEmpty() && !found_visible_window)
- m_toolWindows.first()->show();
+ m_toolWindows.constFirst()->show();
m_actionManager->setBringAllToFrontVisible(true);
- for (QDesignerFormWindow *fw : qAsConst(m_formWindows)) {
+ for (QDesignerFormWindow *fw : std::as_const(m_formWindows)) {
fw->setParent(magicalParent(fw), magicalWindowFlags(fw));
fw->setAttribute(Qt::WA_DeleteOnClose, true);
- const PositionMap::const_iterator pit = m_Positions.constFind(fw);
+ const auto pit = m_Positions.constFind(fw);
if (pit != m_Positions.constEnd()) pit->applyTo(fw, desktopOffset);
// Force an activate in order to refresh minimumSize, otherwise it will not be respected
if (QLayout *layout = fw->layout())
@@ -537,7 +540,7 @@ QDesignerFormEditorInterface *QDesignerWorkbench::core() const
int QDesignerWorkbench::toolWindowCount() const
{
- return m_toolWindows.count();
+ return m_toolWindows.size();
}
QDesignerToolWindow *QDesignerWorkbench::toolWindow(int index) const
@@ -547,7 +550,7 @@ QDesignerToolWindow *QDesignerWorkbench::toolWindow(int index) const
int QDesignerWorkbench::formWindowCount() const
{
- return m_formWindows.count();
+ return m_formWindows.size();
}
QDesignerFormWindow *QDesignerWorkbench::formWindow(int index) const
@@ -555,36 +558,20 @@ QDesignerFormWindow *QDesignerWorkbench::formWindow(int index) const
return m_formWindows.at(index);
}
-QRect QDesignerWorkbench::desktopGeometry() const
+QScreen *QDesignerWorkbench::screen() const
{
- // Return geometry of the desktop designer is running in.
- QWidget *widget = nullptr;
- switch (m_mode) {
- case DockedMode:
- widget = m_dockedMainWindow;
- break;
- case TopLevelMode:
- widget = widgetBoxToolWindow();
- break;
- case NeutralMode:
- break;
- }
- const auto screen = widget ? widget->screen() : QGuiApplication::primaryScreen();
- return screen ? screen->availableGeometry()
- : QGuiApplication::primaryScreen()->availableGeometry();
+ auto *widget = m_mode == DockedMode
+ ? static_cast<QWidget *>(m_dockedMainWindow.data())
+ : static_cast<QWidget *>(widgetBoxToolWindow());
+ return widget != nullptr
+ ? widget->screen() : QGuiApplication::primaryScreen();
}
-QRect QDesignerWorkbench::availableGeometry() const
+QRect QDesignerWorkbench::availableFormGeometry() const
{
- if (m_mode == DockedMode)
- return m_dockedMainWindow->mdiArea()->geometry();
-
- const auto screen = widgetBoxToolWindow()->screen();
- return screen ? screen->availableGeometry() : QGuiApplication::primaryScreen()->availableGeometry() ;
-}
-
-int QDesignerWorkbench::marginHint() const
-{ return 20;
+ // Return available geometry for forms
+ return m_mode == DockedMode
+ ? m_dockedMainWindow->mdiArea()->geometry() : screen()->availableGeometry();
}
void QDesignerWorkbench::slotFormWindowActivated(QDesignerFormWindow* fw)
@@ -604,25 +591,30 @@ void QDesignerWorkbench::removeFormWindow(QDesignerFormWindow *formWindow)
if (QAction *action = formWindow->action()) {
m_windowActions->removeAction(action);
- m_windowMenu->removeAction(action);
+ if (m_windowMenu)
+ m_windowMenu->removeAction(action);
}
if (m_formWindows.isEmpty()) {
m_actionManager->setWindowListSeparatorVisible(false);
// Show up new form dialog unless closing
- if (loadOk && m_state == StateUp
- && QDesignerSettings(m_core).showNewFormOnStartup()) {
- QTimer::singleShot(200, m_actionManager, &QDesignerActions::createForm);
- }
+ if (loadOk && m_state == StateUp)
+ showNewForm();
}
}
+void QDesignerWorkbench::showNewForm()
+{
+ if (!m_suppressNewFormShow && QDesignerSettings(m_core).showNewFormOnStartup())
+ QTimer::singleShot(100, m_actionManager, &QDesignerActions::createForm);
+}
+
void QDesignerWorkbench::initializeCorePlugins()
{
QObjectList plugins = QPluginLoader::staticInstances();
plugins += core()->pluginManager()->instances();
- for (QObject *plugin : qAsConst(plugins)) {
+ for (QObject *plugin : std::as_const(plugins)) {
if (QDesignerFormEditorPluginInterface *formEditorPlugin = qobject_cast<QDesignerFormEditorPluginInterface*>(plugin)) {
if (!formEditorPlugin->isInitialized())
formEditorPlugin->initialize(core());
@@ -635,7 +627,7 @@ void QDesignerWorkbench::saveSettings() const
QDesignerSettings settings(m_core);
settings.clearBackup();
saveGeometries(settings);
- AppFontWidget::save(m_core->settingsManager(), QLatin1String(appFontPrefixC));
+ AppFontWidget::save(m_core->settingsManager(), appFontPrefixC);
}
void QDesignerWorkbench::saveGeometries(QDesignerSettings &settings) const
@@ -689,12 +681,12 @@ bool QDesignerWorkbench::handleClose()
{
m_state = StateClosing;
QList<QDesignerFormWindow *> dirtyForms;
- for (QDesignerFormWindow *w : qAsConst(m_formWindows)) {
+ for (QDesignerFormWindow *w : std::as_const(m_formWindows)) {
if (w->editor()->isDirty())
dirtyForms << w;
}
- const int count = dirtyForms.size();
+ const auto count = dirtyForms.size();
if (count == 1) {
if (!dirtyForms.at(0)->close()) {
m_state = StateUp;
@@ -707,7 +699,7 @@ bool QDesignerWorkbench::handleClose()
QMessageBox::Cancel | QMessageBox::Discard | QMessageBox::Save);
box.setInformativeText(tr("If you do not review your documents, all your changes will be lost."));
box.button(QMessageBox::Discard)->setText(tr("Discard Changes"));
- QPushButton *save = static_cast<QPushButton *>(box.button(QMessageBox::Save));
+ auto *save = static_cast<QPushButton *>(box.button(QMessageBox::Save));
save->setText(tr("Review Changes"));
box.setDefaultButton(save);
switch (box.exec()) {
@@ -715,7 +707,7 @@ bool QDesignerWorkbench::handleClose()
m_state = StateUp;
return false;
case QMessageBox::Save:
- for (QDesignerFormWindow *fw : qAsConst(dirtyForms)) {
+ for (QDesignerFormWindow *fw : std::as_const(dirtyForms)) {
fw->show();
fw->raise();
if (!fw->close()) {
@@ -725,7 +717,7 @@ bool QDesignerWorkbench::handleClose()
}
break;
case QMessageBox::Discard:
- for (QDesignerFormWindow *fw : qAsConst(dirtyForms)) {
+ for (QDesignerFormWindow *fw : std::as_const(dirtyForms)) {
fw->editor()->setDirty(false);
fw->setWindowModified(false);
}
@@ -733,7 +725,7 @@ bool QDesignerWorkbench::handleClose()
}
}
- for (QDesignerFormWindow *fw : qAsConst(m_formWindows))
+ for (QDesignerFormWindow *fw : std::as_const(m_formWindows))
fw->close();
saveSettings();
@@ -764,20 +756,20 @@ void QDesignerWorkbench::updateWindowMenu(QDesignerFormWindowInterface *fwi)
m_actionManager->minimizeAction()->setEnabled(minimizeEnabled);
m_actionManager->minimizeAction()->setChecked(minimizeChecked);
- for (QDesignerFormWindow *fw : qAsConst(m_formWindows))
+ for (QDesignerFormWindow *fw : std::as_const(m_formWindows))
fw->action()->setChecked(fw == activeFormWindow);
}
void QDesignerWorkbench::formWindowActionTriggered(QAction *a)
{
- QDesignerFormWindow *fw = qobject_cast<QDesignerFormWindow *>(a->parentWidget());
+ auto *fw = qobject_cast<QDesignerFormWindow *>(a->parent());
Q_ASSERT(fw);
if (isFormWindowMinimized(fw))
setFormWindowMinimized(fw, false);
if (m_mode == DockedMode) {
- if (QMdiSubWindow *subWindow = qobject_cast<QMdiSubWindow *>(fw->parent())) {
+ if (auto *subWindow = qobject_cast<QMdiSubWindow *>(fw->parent())) {
m_dockedMainWindow->mdiArea()->setActiveSubWindow(subWindow);
}
} else {
@@ -788,7 +780,7 @@ void QDesignerWorkbench::formWindowActionTriggered(QAction *a)
void QDesignerWorkbench::closeAllToolWindows()
{
- for (QDesignerToolWindow *tw : qAsConst(m_toolWindows))
+ for (QDesignerToolWindow *tw : std::as_const(m_toolWindows))
tw->hide();
}
@@ -806,7 +798,7 @@ bool QDesignerWorkbench::readInBackup()
if (answer == QMessageBox::No)
return false;
- const QString modifiedPlaceHolder = QStringLiteral("[*]");
+ const auto modifiedPlaceHolder = "[*]"_L1;
for (auto it = backupFileMap.cbegin(), end = backupFileMap.cend(); it != end; ++it) {
QString fileName = it.key();
fileName.remove(modifiedPlaceHolder);
@@ -842,9 +834,9 @@ void QDesignerWorkbench::bringAllToFront()
{
if (m_mode != TopLevelMode)
return;
- for (QDesignerToolWindow *tw : qAsConst(m_toolWindows))
+ for (QDesignerToolWindow *tw : std::as_const(m_toolWindows))
raiseWindow(tw);
- for (QDesignerFormWindow *dfw : qAsConst(m_formWindows))
+ for (QDesignerFormWindow *dfw : std::as_const(m_formWindows))
raiseWindow(dfw);
}
@@ -863,7 +855,7 @@ void QDesignerWorkbench::resizeForm(QDesignerFormWindow *fw, const QWidget *main
return;
}
// get decorations and resize MDI
- QMdiSubWindow *mdiSubWindow = qobject_cast<QMdiSubWindow *>(fw->parent());
+ auto *mdiSubWindow = qobject_cast<QMdiSubWindow *>(fw->parent());
Q_ASSERT(mdiSubWindow);
const QSize decorationSize = mdiSubWindow->geometry().size() - mdiSubWindow->contentsRect().size();
mdiSubWindow->resize(containerSize + decorationSize);
@@ -896,8 +888,8 @@ QDesignerFormWindow * QDesignerWorkbench::loadForm(const QString &fileName,
const QString text = QString::fromUtf8(file.readLine());
file.close();
- const int lf = text.indexOf(QLatin1Char('\n'));
- if (lf > 0 && text.at(lf-1) == QLatin1Char('\r')) {
+ const auto lf = text.indexOf(u'\n');
+ if (lf > 0 && text.at(lf - 1) == u'\r') {
mode = qdesigner_internal::FormWindowBase::CRLFLineTerminator;
} else if (lf >= 0) {
mode = qdesigner_internal::FormWindowBase::LFLineTerminator;
@@ -913,7 +905,7 @@ QDesignerFormWindow * QDesignerWorkbench::loadForm(const QString &fileName,
// Create a form
QDesignerFormWindowManagerInterface *formWindowManager = m_core->formWindowManager();
- QDesignerFormWindow *formWindow = new QDesignerFormWindow(/*formWindow=*/ nullptr, this);
+ auto *formWindow = new QDesignerFormWindow(/*formWindow=*/ nullptr, this);
addFormWindow(formWindow);
QDesignerFormWindowInterface *editor = formWindow->editor();
Q_ASSERT(editor);
@@ -946,7 +938,7 @@ QDesignerFormWindow * QDesignerWorkbench::loadForm(const QString &fileName,
formWindow->setAttribute(Qt::WA_DeleteOnClose, true);
formWindow->setParent(magicalParent(formWindow), magicalWindowFlags(formWindow));
formWindow->resize(formWindowGeometryHint.size());
- formWindow->move(availableGeometry().center() - formWindowGeometryHint.center());
+ formWindow->move(availableFormGeometry().center() - formWindowGeometryHint.center());
}
break;
case NeutralMode:
@@ -1081,7 +1073,7 @@ void QDesignerWorkbench::restoreUISettings()
if (font == m_toolWindows.constFirst()->font())
return;
- for (QDesignerToolWindow *tw : qAsConst(m_toolWindows))
+ for (QDesignerToolWindow *tw : std::as_const(m_toolWindows))
tw->setFont(font);
}
diff --git a/src/designer/src/designer/qdesigner_workbench.h b/src/designer/src/designer/qdesigner_workbench.h
index e3435b915..171c5b6fe 100644
--- a/src/designer/src/designer/qdesigner_workbench.h
+++ b/src/designer/src/designer/qdesigner_workbench.h
@@ -1,41 +1,17 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QDESIGNER_WORKBENCH_H
#define QDESIGNER_WORKBENCH_H
#include "designer_enums.h"
-#include <QtCore/qobject.h>
#include <QtCore/qhash.h>
#include <QtCore/qlist.h>
-#include <QtCore/qset.h>
+#include <QtCore/qobject.h>
+#include <QtCore/qpointer.h>
#include <QtCore/qrect.h>
+#include <QtCore/qset.h>
QT_BEGIN_NAMESPACE
@@ -50,13 +26,10 @@ class QActionGroup;
class QDockWidget;
class QMenu;
class QMenuBar;
-class QMainWindow;
class QToolBar;
-class QMdiArea;
class QMdiSubWindow;
class QCloseEvent;
-class QFont;
-class QtToolBarManager;
+class QScreen;
class ToolBarManager;
class QDesignerFormEditorInterface;
@@ -69,7 +42,7 @@ class QDesignerWorkbench: public QObject
Q_OBJECT
public:
- QDesignerWorkbench();
+ explicit QDesignerWorkbench(const QStringList &pluginPaths);
~QDesignerWorkbench() override;
UIMode mode() const;
@@ -92,11 +65,6 @@ public:
QActionGroup *modeActionGroup() const;
- QRect availableGeometry() const;
- QRect desktopGeometry() const;
-
- int marginHint() const;
-
bool readInForm(const QString &fileName) const;
bool writeOutForm(QDesignerFormWindowInterface *formWindow, const QString &fileName) const;
bool saveForm(QDesignerFormWindowInterface *fw);
@@ -105,6 +73,9 @@ public:
void updateBackup(QDesignerFormWindowInterface* fwi);
void applyUiSettings();
+ bool suppressNewFormShow() const { return m_suppressNewFormShow; }
+ void setSuppressNewFormShow(bool v) { m_suppressNewFormShow = v; }
+
signals:
void modeChanged(UIMode mode);
void initialized();
@@ -114,6 +85,7 @@ public slots:
void removeFormWindow(QDesignerFormWindow *formWindow);
void bringAllToFront();
void toggleFormMinimizationState();
+ void showNewForm();
private slots:
void switchToNeutralMode();
@@ -132,6 +104,8 @@ private slots:
void slotFileDropped(const QString &f);
private:
+ QScreen *screen() const;
+ QRect availableFormGeometry() const;
QWidget *magicalParent(const QWidget *w) const;
Qt::WindowFlags magicalWindowFlags(const QWidget *widgetForFlags) const;
QDesignerFormWindowManagerInterface *formWindowManager() const;
@@ -154,7 +128,7 @@ private:
QMenu *m_windowMenu;
- QMenuBar *m_globalMenuBar;
+ QPointer<QMenuBar> m_globalMenuBar;
struct TopLevelData {
ToolBarManager *toolbarManager;
@@ -163,7 +137,7 @@ private:
TopLevelData m_topLevelData;
UIMode m_mode = NeutralMode;
- DockedMainWindow *m_dockedMainWindow = nullptr;
+ QPointer<DockedMainWindow> m_dockedMainWindow;
QList<QDesignerToolWindow *> m_toolWindows;
QList<QDesignerFormWindow *> m_formWindows;
@@ -174,9 +148,9 @@ private:
// interface modes.
class Position {
public:
- Position(const QDockWidget *dockWidget);
- Position(const QMdiSubWindow *mdiSubWindow, const QPoint &mdiAreaOffset);
- Position(const QWidget *topLevelWindow, const QPoint &desktopTopLeft);
+ explicit Position(const QDockWidget *dockWidget);
+ explicit Position(const QMdiSubWindow *mdiSubWindow);
+ explicit Position(const QWidget *topLevelWindow);
void applyTo(QMdiSubWindow *mdiSubWindow, const QPoint &mdiAreaOffset) const;
void applyTo(QWidget *topLevelWindow, const QPoint &desktopTopLeft) const;
@@ -195,6 +169,7 @@ private:
enum State { StateInitializing, StateUp, StateClosing };
State m_state = StateInitializing;
bool m_uiSettingsChanged = false; // UI mode changed in preference dialog, trigger delayed slot.
+ bool m_suppressNewFormShow = false;
};
QT_END_NAMESPACE
diff --git a/src/designer/src/designer/saveformastemplate.cpp b/src/designer/src/designer/saveformastemplate.cpp
index 15930aa63..e8bc64477 100644
--- a/src/designer/src/designer/saveformastemplate.cpp
+++ b/src/designer/src/designer/saveformastemplate.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "saveformastemplate.h"
#include "qdesigner_settings.h"
@@ -39,6 +14,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
SaveFormAsTemplate::SaveFormAsTemplate(QDesignerFormEditorInterface *core,
QDesignerFormWindowInterface *formWindow,
QWidget *parent)
@@ -47,7 +24,6 @@ SaveFormAsTemplate::SaveFormAsTemplate(QDesignerFormEditorInterface *core,
m_formWindow(formWindow)
{
ui.setupUi(this);
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
ui.templateNameEdit->setText(formWindow->mainContainer()->objectName());
ui.templateNameEdit->selectAll();
@@ -68,11 +44,9 @@ SaveFormAsTemplate::~SaveFormAsTemplate() = default;
void SaveFormAsTemplate::accept()
{
- QString templateFileName = ui.categoryCombo->currentText();
- templateFileName += QLatin1Char('/');
const QString name = ui.templateNameEdit->text();
- templateFileName += name;
- const QString extension = QStringLiteral(".ui");
+ QString templateFileName = ui.categoryCombo->currentText() + u'/' + name;
+ const auto extension = ".ui"_L1;
if (!templateFileName.endsWith(extension))
templateFileName.append(extension);
QFile file(templateFileName);
diff --git a/src/designer/src/designer/saveformastemplate.h b/src/designer/src/designer/saveformastemplate.h
index 7b8f8b8da..2a76306d8 100644
--- a/src/designer/src/designer/saveformastemplate.h
+++ b/src/designer/src/designer/saveformastemplate.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef SAVEFORMASTEMPLATE_H
#define SAVEFORMASTEMPLATE_H
diff --git a/src/designer/src/designer/saveformastemplate.ui b/src/designer/src/designer/saveformastemplate.ui
index 37ade8544..e77e4c246 100644
--- a/src/designer/src/designer/saveformastemplate.ui
+++ b/src/designer/src/designer/saveformastemplate.ui
@@ -1,31 +1,8 @@
<ui version="4.0" >
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+</comment>
<class>SaveFormAsTemplate</class>
<widget class="QDialog" name="SaveFormAsTemplate" >
<property name="windowTitle" >
diff --git a/src/designer/src/designer/versiondialog.cpp b/src/designer/src/designer/versiondialog.cpp
index 75c8ae988..7660de46c 100644
--- a/src/designer/src/designer/versiondialog.cpp
+++ b/src/designer/src/designer/versiondialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QtCore/qlist.h>
@@ -42,6 +17,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
class VersionLabel : public QLabel
{
Q_OBJECT
@@ -67,7 +44,9 @@ private:
VersionLabel::VersionLabel(QWidget *parent)
: QLabel(parent)
{
- setPixmap(QPixmap(QStringLiteral(":/qt-project.org/designer/images/designer.png")));
+ QPixmap pixmap(u":/qt-project.org/designer/images/designer.png"_s);
+ pixmap.setDevicePixelRatio(devicePixelRatioF());
+ setPixmap(pixmap);
hitPoints.append(QPoint(56, 25));
hitPoints.append(QPoint(29, 55));
hitPoints.append(QPoint(56, 87));
@@ -103,14 +82,14 @@ void VersionLabel::mouseReleaseEvent(QMouseEvent *me)
if (!secondStage) {
m_path.lineTo(me->pos());
bool gotIt = true;
- for (const QPoint &pt : qAsConst(hitPoints)) {
+ for (const QPoint &pt : std::as_const(hitPoints)) {
if (!m_path.contains(pt)) {
gotIt = false;
break;
}
}
if (gotIt) {
- for (const QPoint &pt : qAsConst(missPoints)) {
+ for (const QPoint &pt : std::as_const(missPoints)) {
if (m_path.contains(pt)) {
gotIt = false;
break;
@@ -153,22 +132,22 @@ VersionDialog::VersionDialog(QWidget *parent)
#endif
)
{
- setWindowFlags((windowFlags() & ~Qt::WindowContextHelpButtonHint) | Qt::MSWindowsFixedSizeDialogHint);
+ setWindowFlag(Qt::MSWindowsFixedSizeDialogHint, true);
QGridLayout *layout = new QGridLayout(this);
- VersionLabel *label = new VersionLabel;
- QLabel *lbl = new QLabel;
+ VersionLabel *label = new VersionLabel(this);
+ QLabel *lbl = new QLabel(this);
QString version = tr("<h3>%1</h3><br/><br/>Version %2");
- version = version.arg(tr("Qt Designer")).arg(QLatin1String(QT_VERSION_STR));
- version.append(tr("<br/>Qt Designer is a graphical user interface designer for Qt applications.<br/>"));
+ 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, QStringLiteral("2020")));
+ ).arg(version, QString()));
lbl->setWordWrap(true);
lbl->setOpenExternalLinks(true);
- QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Close);
+ QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Close, this);
connect(buttonBox , &QDialogButtonBox::rejected, this, &QDialog::reject);
connect(label, &VersionLabel::triggered, this, &QDialog::accept);
layout->addWidget(label, 0, 0, 1, 1);
diff --git a/src/designer/src/designer/versiondialog.h b/src/designer/src/designer/versiondialog.h
index ff26da292..4f7f8e4c3 100644
--- a/src/designer/src/designer/versiondialog.h
+++ b/src/designer/src/designer/versiondialog.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef VERSIONDIALOG_H
#define VERSIONDIALOG_H
diff --git a/src/designer/src/lib/CMakeLists.txt b/src/designer/src/lib/CMakeLists.txt
index 24df4582a..661e5a995 100644
--- a/src/designer/src/lib/CMakeLists.txt
+++ b/src/designer/src/lib/CMakeLists.txt
@@ -1,10 +1,12 @@
-# Generated from lib.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## Designer Module:
#####################################################################
-qt_add_module(Designer
+qt_internal_add_module(Designer
PLUGIN_TYPES designer
SOURCES
../../../shared/deviceskin/deviceskin.cpp ../../../shared/deviceskin/deviceskin.h
@@ -13,17 +15,18 @@ qt_add_module(Designer
../../../shared/findwidget/texteditfindwidget.cpp ../../../shared/findwidget/texteditfindwidget.h
../../../shared/qtgradienteditor/qtcolorbutton.cpp ../../../shared/qtgradienteditor/qtcolorbutton.h
../../../shared/qtgradienteditor/qtcolorline.cpp ../../../shared/qtgradienteditor/qtcolorline.h
- ../../../shared/qtgradienteditor/qtgradientdialog.cpp ../../../shared/qtgradienteditor/qtgradientdialog.h ../../../shared/qtgradienteditor/qtgradientdialog.ui
- ../../../shared/qtgradienteditor/qtgradienteditor.cpp ../../../shared/qtgradienteditor/qtgradienteditor.h ../../../shared/qtgradienteditor/qtgradienteditor.ui
+ ../../../shared/qtgradienteditor/qtgradientdialog.cpp ../../../shared/qtgradienteditor/qtgradientdialog.h
+ ../../../shared/qtgradienteditor/qtgradienteditor.cpp ../../../shared/qtgradienteditor/qtgradienteditor.h
../../../shared/qtgradienteditor/qtgradientmanager.cpp ../../../shared/qtgradienteditor/qtgradientmanager.h
../../../shared/qtgradienteditor/qtgradientstopscontroller.cpp ../../../shared/qtgradienteditor/qtgradientstopscontroller.h
../../../shared/qtgradienteditor/qtgradientstopsmodel.cpp ../../../shared/qtgradienteditor/qtgradientstopsmodel.h
../../../shared/qtgradienteditor/qtgradientstopswidget.cpp ../../../shared/qtgradienteditor/qtgradientstopswidget.h
../../../shared/qtgradienteditor/qtgradientutils.cpp ../../../shared/qtgradienteditor/qtgradientutils.h
- ../../../shared/qtgradienteditor/qtgradientview.cpp ../../../shared/qtgradienteditor/qtgradientview.h ../../../shared/qtgradienteditor/qtgradientview.ui
- ../../../shared/qtgradienteditor/qtgradientviewdialog.cpp ../../../shared/qtgradienteditor/qtgradientviewdialog.h ../../../shared/qtgradienteditor/qtgradientviewdialog.ui
+ ../../../shared/qtgradienteditor/qtgradientview.cpp ../../../shared/qtgradienteditor/qtgradientview.h
+ ../../../shared/qtgradienteditor/qtgradientviewdialog.cpp ../../../shared/qtgradienteditor/qtgradientviewdialog.h
../../../shared/qtgradienteditor/qtgradientwidget.cpp ../../../shared/qtgradienteditor/qtgradientwidget.h
extension/default_extensionfactory.cpp extension/default_extensionfactory.h
+ extension/extension_global.h
extension/extension.cpp extension/extension.h
extension/qextensionmanager.cpp extension/qextensionmanager.h
sdk/abstractactioneditor.cpp sdk/abstractactioneditor.h
@@ -55,11 +58,11 @@ qt_add_module(Designer
sdk/layoutdecoration.h
sdk/membersheet.h
sdk/propertysheet.h
- sdk/taskmenu.h
+ sdk/sdk_global.h
+ sdk/taskmenu.cpp sdk/taskmenu.h
shared/actioneditor.cpp shared/actioneditor_p.h
shared/actionprovider_p.h
shared/actionrepository.cpp shared/actionrepository_p.h
- shared/addlinkdialog.ui
shared/codedialog.cpp shared/codedialog_p.h
shared/connectionedit.cpp shared/connectionedit_p.h
shared/csshighlighter.cpp shared/csshighlighter_p.h
@@ -67,10 +70,9 @@ qt_add_module(Designer
shared/dialoggui.cpp shared/dialoggui_p.h
shared/extensionfactory_p.h
shared/formlayoutmenu.cpp shared/formlayoutmenu_p.h
- shared/formlayoutrowdialog.ui
shared/formwindowbase.cpp shared/formwindowbase_p.h
shared/grid.cpp shared/grid_p.h
- shared/gridpanel.cpp shared/gridpanel.ui shared/gridpanel_p.h
+ shared/gridpanel.cpp shared/gridpanel_p.h
shared/htmlhighlighter.cpp shared/htmlhighlighter_p.h
shared/iconloader.cpp shared/iconloader_p.h
shared/iconselector.cpp shared/iconselector_p.h
@@ -79,13 +81,13 @@ qt_add_module(Designer
shared/layoutinfo.cpp shared/layoutinfo_p.h
shared/metadatabase.cpp shared/metadatabase_p.h
shared/morphmenu.cpp shared/morphmenu_p.h
- shared/newactiondialog.cpp shared/newactiondialog.ui shared/newactiondialog_p.h
- shared/newformwidget.cpp shared/newformwidget.ui shared/newformwidget_p.h
- shared/orderdialog.cpp shared/orderdialog.ui shared/orderdialog_p.h
+ shared/newactiondialog.cpp shared/newactiondialog_p.h
+ shared/newformwidget.cpp shared/newformwidget_p.h
+ shared/orderdialog.cpp shared/orderdialog_p.h
shared/plaintexteditor.cpp shared/plaintexteditor_p.h
- shared/plugindialog.cpp shared/plugindialog.ui shared/plugindialog_p.h
+ shared/plugindialog.cpp shared/plugindialog_p.h
shared/pluginmanager.cpp shared/pluginmanager_p.h
- shared/previewconfigurationwidget.cpp shared/previewconfigurationwidget.ui shared/previewconfigurationwidget_p.h
+ shared/previewconfigurationwidget.cpp shared/previewconfigurationwidget_p.h
shared/previewmanager.cpp shared/previewmanager_p.h
shared/promotionmodel.cpp shared/promotionmodel_p.h
shared/promotiontaskmenu.cpp shared/promotiontaskmenu_p.h
@@ -120,23 +122,24 @@ qt_add_module(Designer
shared/qdesigner_widgetitem.cpp shared/qdesigner_widgetitem_p.h
shared/qlayout_widget.cpp shared/qlayout_widget_p.h
shared/qsimpleresource.cpp shared/qsimpleresource_p.h
- shared/qtresourceeditordialog.cpp shared/qtresourceeditordialog.ui shared/qtresourceeditordialog_p.h
+ shared/qtresourceeditordialog.cpp shared/qtresourceeditordialog_p.h
shared/qtresourcemodel.cpp shared/qtresourcemodel_p.h
shared/qtresourceview.cpp shared/qtresourceview_p.h
shared/rcc.cpp shared/rcc_p.h
shared/richtexteditor.cpp shared/richtexteditor_p.h
- shared/selectsignaldialog.cpp shared/selectsignaldialog.ui shared/selectsignaldialog_p.h
+ shared/selectsignaldialog.cpp shared/selectsignaldialog_p.h
shared/shared_enums_p.h
shared/shared_global_p.h
shared/shared_settings.cpp shared/shared_settings_p.h
shared/sheet_delegate.cpp shared/sheet_delegate_p.h
- shared/signalslotdialog.cpp shared/signalslotdialog.ui shared/signalslotdialog_p.h
+ shared/signalslotdialog.cpp shared/signalslotdialog_p.h
shared/spacer_widget.cpp shared/spacer_widget_p.h
shared/stylesheeteditor.cpp shared/stylesheeteditor_p.h
shared/textpropertyeditor.cpp shared/textpropertyeditor_p.h
shared/widgetdatabase.cpp shared/widgetdatabase_p.h
shared/widgetfactory.cpp shared/widgetfactory_p.h
shared/zoomwidget.cpp shared/zoomwidget_p.h
+ uilib/uilib_global.h
uilib/abstractformbuilder.cpp uilib/abstractformbuilder.h
uilib/formbuilder.cpp uilib/formbuilder.h
uilib/formbuilderextra.cpp uilib/formbuilderextra_p.h
@@ -144,6 +147,13 @@ qt_add_module(Designer
uilib/resourcebuilder.cpp uilib/resourcebuilder_p.h
uilib/textbuilder.cpp uilib/textbuilder_p.h
uilib/ui4.cpp uilib/ui4_p.h
+ components/qdesigner_components.h
+ components/qdesigner_components_global.h
+ NO_UNITY_BUILD_SOURCES
+ shared/qdesigner_command.cpp # redefinition of 'QMetaTypeId<QList<QWidget *>>' (from morphmenu.cpp)
+ # and recursiveUpdate (from formwindowbase.cpp)
+ uilib/abstractformbuilder.cpp # using namespace QFormInternal/redefinition of 'QMetaTypeId<QList<QWidget *>>' (from morphmenu.cpp)
+ uilib/ui4.cpp # using namespace QFormInternal
DEFINES
QDESIGNER_EXTENSION_LIBRARY
QDESIGNER_SDK_LIBRARY
@@ -178,17 +188,41 @@ qt_add_module(Designer
uic
PRECOMPILED_HEADER
"lib_pch.h"
+ NO_GENERATE_CPP_EXPORTS
)
-# Resources:
-set_source_files_properties("../../../shared/deviceskin/skins/ClamshellPhone.skin"
- PROPERTIES QT_RESOURCE_ALIAS "ClamshellPhone.skin"
+set(ui_sources
+ ../../../shared/qtgradienteditor/qtgradientdialog.ui
+ ../../../shared/qtgradienteditor/qtgradienteditor.ui
+ ../../../shared/qtgradienteditor/qtgradientview.ui
+ ../../../shared/qtgradienteditor/qtgradientviewdialog.ui
+ shared/addlinkdialog.ui
+ shared/formlayoutrowdialog.ui
+ shared/gridpanel.ui
+ shared/previewconfigurationwidget.ui
+ shared/newactiondialog.ui
+ shared/newformwidget.ui
+ shared/orderdialog.ui
+ shared/plugindialog.ui
+ shared/qtresourceeditordialog.ui
+ shared/selectsignaldialog.ui
+ shared/signalslotdialog.ui
)
+
+# Work around QTBUG-95305
+if(CMAKE_GENERATOR STREQUAL "Ninja Multi-Config" AND CMAKE_CROSS_CONFIGS)
+ qt6_wrap_ui(ui_sources_processed ${ui_sources})
+else()
+ set(ui_sources_processed ${ui_sources})
+endif()
+target_sources(Designer PRIVATE ${ui_sources_processed})
+
+# Resources:
set(ClamshellPhone_resource_files
- "ClamshellPhone.skin"
+ "../../../shared/deviceskin/skins/ClamshellPhone.skin"
)
-qt_add_resource(Designer "ClamshellPhone"
+qt_internal_add_resource(Designer "ClamshellPhone"
PREFIX
"/skins"
BASE
@@ -196,14 +230,11 @@ qt_add_resource(Designer "ClamshellPhone"
FILES
${ClamshellPhone_resource_files}
)
-set_source_files_properties("../../../shared/deviceskin/skins/SmartPhone2.skin"
- PROPERTIES QT_RESOURCE_ALIAS "SmartPhone2.skin"
-)
set(SmartPhone2_resource_files
- "SmartPhone2.skin"
+ "../../../shared/deviceskin/skins/SmartPhone2.skin"
)
-qt_add_resource(Designer "SmartPhone2"
+qt_internal_add_resource(Designer "SmartPhone2"
PREFIX
"/skins"
BASE
@@ -211,14 +242,11 @@ qt_add_resource(Designer "SmartPhone2"
FILES
${SmartPhone2_resource_files}
)
-set_source_files_properties("../../../shared/deviceskin/skins/SmartPhone.skin"
- PROPERTIES QT_RESOURCE_ALIAS "SmartPhone.skin"
-)
set(SmartPhone_resource_files
- "SmartPhone.skin"
+ "../../../shared/deviceskin/skins/SmartPhone.skin"
)
-qt_add_resource(Designer "SmartPhone"
+qt_internal_add_resource(Designer "SmartPhone"
PREFIX
"/skins"
BASE
@@ -226,14 +254,11 @@ qt_add_resource(Designer "SmartPhone"
FILES
${SmartPhone_resource_files}
)
-set_source_files_properties("../../../shared/deviceskin/skins/SmartPhoneWithButtons.skin"
- PROPERTIES QT_RESOURCE_ALIAS "SmartPhoneWithButtons.skin"
-)
set(SmartPhoneWithButtons_resource_files
- "SmartPhoneWithButtons.skin"
+ "../../../shared/deviceskin/skins/SmartPhoneWithButtons.skin"
)
-qt_add_resource(Designer "SmartPhoneWithButtons"
+qt_internal_add_resource(Designer "SmartPhoneWithButtons"
PREFIX
"/skins"
BASE
@@ -241,14 +266,11 @@ qt_add_resource(Designer "SmartPhoneWithButtons"
FILES
${SmartPhoneWithButtons_resource_files}
)
-set_source_files_properties("../../../shared/deviceskin/skins/TouchscreenPhone.skin"
- PROPERTIES QT_RESOURCE_ALIAS "TouchscreenPhone.skin"
-)
set(TouchscreenPhone_resource_files
- "TouchscreenPhone.skin"
+ "../../../shared/deviceskin/skins/TouchscreenPhone.skin"
)
-qt_add_resource(Designer "TouchscreenPhone"
+qt_internal_add_resource(Designer "TouchscreenPhone"
PREFIX
"/skins"
BASE
@@ -256,14 +278,11 @@ qt_add_resource(Designer "TouchscreenPhone"
FILES
${TouchscreenPhone_resource_files}
)
-set_source_files_properties("../../../shared/deviceskin/skins/PortableMedia.skin"
- PROPERTIES QT_RESOURCE_ALIAS "PortableMedia.skin"
-)
set(PortableMedia_resource_files
- "PortableMedia.skin"
+ "../../../shared/deviceskin/skins/PortableMedia.skin"
)
-qt_add_resource(Designer "PortableMedia"
+qt_internal_add_resource(Designer "PortableMedia"
PREFIX
"/skins"
BASE
@@ -271,14 +290,11 @@ qt_add_resource(Designer "PortableMedia"
FILES
${PortableMedia_resource_files}
)
-set_source_files_properties("../../../shared/deviceskin/skins/S60-QVGA-Candybar.skin"
- PROPERTIES QT_RESOURCE_ALIAS "S60-QVGA-Candybar.skin"
-)
set(S60-QVGA-Candybar_resource_files
- "S60-QVGA-Candybar.skin"
+ "../../../shared/deviceskin/skins/S60-QVGA-Candybar.skin"
)
-qt_add_resource(Designer "S60-QVGA-Candybar"
+qt_internal_add_resource(Designer "S60-QVGA-Candybar"
PREFIX
"/skins"
BASE
@@ -286,14 +302,11 @@ qt_add_resource(Designer "S60-QVGA-Candybar"
FILES
${S60-QVGA-Candybar_resource_files}
)
-set_source_files_properties("../../../shared/deviceskin/skins/S60-nHD-Touchscreen.skin"
- PROPERTIES QT_RESOURCE_ALIAS "S60-nHD-Touchscreen.skin"
-)
set(S60-nHD-Touchscreen_resource_files
- "S60-nHD-Touchscreen.skin"
+ "../../../shared/deviceskin/skins/S60-nHD-Touchscreen.skin"
)
-qt_add_resource(Designer "S60-nHD-Touchscreen"
+qt_internal_add_resource(Designer "S60-nHD-Touchscreen"
PREFIX
"/skins"
BASE
@@ -301,46 +314,19 @@ qt_add_resource(Designer "S60-nHD-Touchscreen"
FILES
${S60-nHD-Touchscreen_resource_files}
)
-set_source_files_properties("../../../shared/findwidget/images/mac/closetab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/closetab.png"
-)
-set_source_files_properties("../../../shared/findwidget/images/mac/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/next.png"
-)
-set_source_files_properties("../../../shared/findwidget/images/mac/previous.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/previous.png"
-)
-set_source_files_properties("../../../shared/findwidget/images/mac/searchfind.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/mac/searchfind.png"
-)
-set_source_files_properties("../../../shared/findwidget/images/win/closetab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/closetab.png"
-)
-set_source_files_properties("../../../shared/findwidget/images/win/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/next.png"
-)
-set_source_files_properties("../../../shared/findwidget/images/win/previous.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/previous.png"
-)
-set_source_files_properties("../../../shared/findwidget/images/win/searchfind.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/win/searchfind.png"
-)
-set_source_files_properties("../../../shared/findwidget/images/wrap.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/wrap.png"
-)
set(findwidget_resource_files
- "images/mac/closetab.png"
- "images/mac/next.png"
- "images/mac/previous.png"
- "images/mac/searchfind.png"
- "images/win/closetab.png"
- "images/win/next.png"
- "images/win/previous.png"
- "images/win/searchfind.png"
- "images/wrap.png"
+ "../../../shared/findwidget/images/mac/closetab.png"
+ "../../../shared/findwidget/images/mac/next.png"
+ "../../../shared/findwidget/images/mac/previous.png"
+ "../../../shared/findwidget/images/mac/searchfind.png"
+ "../../../shared/findwidget/images/win/closetab.png"
+ "../../../shared/findwidget/images/win/next.png"
+ "../../../shared/findwidget/images/win/previous.png"
+ "../../../shared/findwidget/images/win/searchfind.png"
+ "../../../shared/findwidget/images/wrap.png"
)
-qt_add_resource(Designer "findwidget"
+qt_internal_add_resource(Designer "findwidget"
PREFIX
"/qt-project.org/shared"
BASE
@@ -348,66 +334,24 @@ qt_add_resource(Designer "findwidget"
FILES
${findwidget_resource_files}
)
-set_source_files_properties("../../../shared/qtgradienteditor/images/down.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/down.png"
-)
-set_source_files_properties("../../../shared/qtgradienteditor/images/edit.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/edit.png"
-)
-set_source_files_properties("../../../shared/qtgradienteditor/images/editdelete.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/editdelete.png"
-)
-set_source_files_properties("../../../shared/qtgradienteditor/images/minus.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/minus.png"
-)
-set_source_files_properties("../../../shared/qtgradienteditor/images/plus.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/plus.png"
-)
-set_source_files_properties("../../../shared/qtgradienteditor/images/spreadpad.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/spreadpad.png"
-)
-set_source_files_properties("../../../shared/qtgradienteditor/images/spreadreflect.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/spreadreflect.png"
-)
-set_source_files_properties("../../../shared/qtgradienteditor/images/spreadrepeat.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/spreadrepeat.png"
-)
-set_source_files_properties("../../../shared/qtgradienteditor/images/typeconical.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/typeconical.png"
-)
-set_source_files_properties("../../../shared/qtgradienteditor/images/typelinear.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/typelinear.png"
-)
-set_source_files_properties("../../../shared/qtgradienteditor/images/typeradial.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/typeradial.png"
-)
-set_source_files_properties("../../../shared/qtgradienteditor/images/up.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/up.png"
-)
-set_source_files_properties("../../../shared/qtgradienteditor/images/zoomin.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/zoomin.png"
-)
-set_source_files_properties("../../../shared/qtgradienteditor/images/zoomout.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/zoomout.png"
-)
set(qtgradienteditor_resource_files
- "images/down.png"
- "images/edit.png"
- "images/editdelete.png"
- "images/minus.png"
- "images/plus.png"
- "images/spreadpad.png"
- "images/spreadreflect.png"
- "images/spreadrepeat.png"
- "images/typeconical.png"
- "images/typelinear.png"
- "images/typeradial.png"
- "images/up.png"
- "images/zoomin.png"
- "images/zoomout.png"
+ "../../../shared/qtgradienteditor/images/down.png"
+ "../../../shared/qtgradienteditor/images/edit.png"
+ "../../../shared/qtgradienteditor/images/editdelete.png"
+ "../../../shared/qtgradienteditor/images/minus.png"
+ "../../../shared/qtgradienteditor/images/plus.png"
+ "../../../shared/qtgradienteditor/images/spreadpad.png"
+ "../../../shared/qtgradienteditor/images/spreadreflect.png"
+ "../../../shared/qtgradienteditor/images/spreadrepeat.png"
+ "../../../shared/qtgradienteditor/images/typeconical.png"
+ "../../../shared/qtgradienteditor/images/typelinear.png"
+ "../../../shared/qtgradienteditor/images/typeradial.png"
+ "../../../shared/qtgradienteditor/images/up.png"
+ "../../../shared/qtgradienteditor/images/zoomin.png"
+ "../../../shared/qtgradienteditor/images/zoomout.png"
)
-qt_add_resource(Designer "qtgradienteditor"
+qt_internal_add_resource(Designer "qtgradienteditor"
PREFIX
"/qt-project.org/qtgradienteditor"
BASE
@@ -416,23 +360,24 @@ qt_add_resource(Designer "qtgradienteditor"
${qtgradienteditor_resource_files}
)
set(shared_resource_files
- "defaultgradients.xml"
- "templates/forms/240x320/Dialog_with_Buttons_Bottom.ui"
- "templates/forms/240x320/Dialog_with_Buttons_Right.ui"
- "templates/forms/320x240/Dialog_with_Buttons_Bottom.ui"
- "templates/forms/320x240/Dialog_with_Buttons_Right.ui"
- "templates/forms/480x640/Dialog_with_Buttons_Bottom.ui"
- "templates/forms/480x640/Dialog_with_Buttons_Right.ui"
- "templates/forms/640x480/Dialog_with_Buttons_Bottom.ui"
- "templates/forms/640x480/Dialog_with_Buttons_Right.ui"
- "templates/forms/Dialog_with_Buttons_Bottom.ui"
- "templates/forms/Dialog_with_Buttons_Right.ui"
- "templates/forms/Dialog_without_Buttons.ui"
- "templates/forms/Main_Window.ui"
- "templates/forms/Widget.ui"
+ "shared/defaultgradients.xml"
+ "shared/icon-naming-spec.txt"
+ "shared/templates/forms/240x320/Dialog_with_Buttons_Bottom.ui"
+ "shared/templates/forms/240x320/Dialog_with_Buttons_Right.ui"
+ "shared/templates/forms/320x240/Dialog_with_Buttons_Bottom.ui"
+ "shared/templates/forms/320x240/Dialog_with_Buttons_Right.ui"
+ "shared/templates/forms/480x640/Dialog_with_Buttons_Bottom.ui"
+ "shared/templates/forms/480x640/Dialog_with_Buttons_Right.ui"
+ "shared/templates/forms/640x480/Dialog_with_Buttons_Bottom.ui"
+ "shared/templates/forms/640x480/Dialog_with_Buttons_Right.ui"
+ "shared/templates/forms/Dialog_with_Buttons_Bottom.ui"
+ "shared/templates/forms/Dialog_with_Buttons_Right.ui"
+ "shared/templates/forms/Dialog_without_Buttons.ui"
+ "shared/templates/forms/Main_Window.ui"
+ "shared/templates/forms/Widget.ui"
)
-qt_add_resource(Designer "shared"
+qt_internal_add_resource(Designer "shared"
PREFIX
"/qt-project.org/designer"
BASE
@@ -441,24 +386,19 @@ qt_add_resource(Designer "shared"
${shared_resource_files}
)
-
-#### Keys ignored in scope 1:.:.:lib.pro:<TRUE>:
# MODULE = "designer"
## Scopes:
#####################################################################
-qt_extend_target(Designer CONDITION TARGET Qt::OpenGLWidgets
+qt_internal_extend_target(Designer CONDITION TARGET Qt::OpenGLWidgets
PUBLIC_LIBRARIES
Qt::OpenGLWidgets
)
-qt_extend_target(Designer CONDITION static
+qt_internal_extend_target(Designer CONDITION NOT QT_BUILD_SHARED_LIBS
DEFINES
QT_DESIGNER_STATIC
-)
-
-qt_extend_target(Designer CONDITION NOT QT_BUILD_SHARED_LIBS
SOURCES
../../../shared/qtpropertybrowser/qtbuttonpropertybrowser.cpp ../../../shared/qtpropertybrowser/qtbuttonpropertybrowser.h
../../../shared/qtpropertybrowser/qteditorfactory.cpp ../../../shared/qtpropertybrowser/qteditorfactory.h
@@ -472,84 +412,42 @@ qt_extend_target(Designer CONDITION NOT QT_BUILD_SHARED_LIBS
../../../shared/qtpropertybrowser
)
+if(TARGET zstd::libzstd_shared)
+ qt_internal_disable_find_package_global_promotion(zstd::libzstd_shared)
+endif()
+if(NOT TARGET WrapZSTD::WrapZSTD)
+ qt_find_package(WrapZSTD 1.3 PROVIDED_TARGETS WrapZSTD::WrapZSTD)
+endif()
+
+qt_internal_extend_target(Designer CONDITION QT_FEATURE_zstd
+ LIBRARIES
+ WrapZSTD::WrapZSTD
+)
+
if(NOT QT_BUILD_SHARED_LIBS)
# Resources:
- set_source_files_properties("../../../shared/qtpropertybrowser/images/cursor-arrow.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-arrow.png"
- )
- set_source_files_properties("../../../shared/qtpropertybrowser/images/cursor-busy.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-busy.png"
- )
- set_source_files_properties("../../../shared/qtpropertybrowser/images/cursor-closedhand.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-closedhand.png"
- )
- set_source_files_properties("../../../shared/qtpropertybrowser/images/cursor-cross.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-cross.png"
- )
- set_source_files_properties("../../../shared/qtpropertybrowser/images/cursor-forbidden.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-forbidden.png"
- )
- set_source_files_properties("../../../shared/qtpropertybrowser/images/cursor-hand.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-hand.png"
- )
- set_source_files_properties("../../../shared/qtpropertybrowser/images/cursor-hsplit.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-hsplit.png"
- )
- set_source_files_properties("../../../shared/qtpropertybrowser/images/cursor-ibeam.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-ibeam.png"
- )
- set_source_files_properties("../../../shared/qtpropertybrowser/images/cursor-openhand.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-openhand.png"
- )
- set_source_files_properties("../../../shared/qtpropertybrowser/images/cursor-sizeall.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-sizeall.png"
- )
- set_source_files_properties("../../../shared/qtpropertybrowser/images/cursor-sizeb.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-sizeb.png"
- )
- set_source_files_properties("../../../shared/qtpropertybrowser/images/cursor-sizef.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-sizef.png"
- )
- set_source_files_properties("../../../shared/qtpropertybrowser/images/cursor-sizeh.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-sizeh.png"
- )
- set_source_files_properties("../../../shared/qtpropertybrowser/images/cursor-sizev.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-sizev.png"
- )
- set_source_files_properties("../../../shared/qtpropertybrowser/images/cursor-uparrow.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-uparrow.png"
- )
- set_source_files_properties("../../../shared/qtpropertybrowser/images/cursor-vsplit.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-vsplit.png"
- )
- set_source_files_properties("../../../shared/qtpropertybrowser/images/cursor-wait.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-wait.png"
- )
- set_source_files_properties("../../../shared/qtpropertybrowser/images/cursor-whatsthis.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/cursor-whatsthis.png"
- )
set(qtpropertybrowser_resource_files
- "images/cursor-arrow.png"
- "images/cursor-busy.png"
- "images/cursor-closedhand.png"
- "images/cursor-cross.png"
- "images/cursor-forbidden.png"
- "images/cursor-hand.png"
- "images/cursor-hsplit.png"
- "images/cursor-ibeam.png"
- "images/cursor-openhand.png"
- "images/cursor-sizeall.png"
- "images/cursor-sizeb.png"
- "images/cursor-sizef.png"
- "images/cursor-sizeh.png"
- "images/cursor-sizev.png"
- "images/cursor-uparrow.png"
- "images/cursor-vsplit.png"
- "images/cursor-wait.png"
- "images/cursor-whatsthis.png"
+ "../../../shared/qtpropertybrowser/images/cursor-arrow.png"
+ "../../../shared/qtpropertybrowser/images/cursor-busy.png"
+ "../../../shared/qtpropertybrowser/images/cursor-closedhand.png"
+ "../../../shared/qtpropertybrowser/images/cursor-cross.png"
+ "../../../shared/qtpropertybrowser/images/cursor-forbidden.png"
+ "../../../shared/qtpropertybrowser/images/cursor-hand.png"
+ "../../../shared/qtpropertybrowser/images/cursor-hsplit.png"
+ "../../../shared/qtpropertybrowser/images/cursor-ibeam.png"
+ "../../../shared/qtpropertybrowser/images/cursor-openhand.png"
+ "../../../shared/qtpropertybrowser/images/cursor-sizeall.png"
+ "../../../shared/qtpropertybrowser/images/cursor-sizeb.png"
+ "../../../shared/qtpropertybrowser/images/cursor-sizef.png"
+ "../../../shared/qtpropertybrowser/images/cursor-sizeh.png"
+ "../../../shared/qtpropertybrowser/images/cursor-sizev.png"
+ "../../../shared/qtpropertybrowser/images/cursor-uparrow.png"
+ "../../../shared/qtpropertybrowser/images/cursor-vsplit.png"
+ "../../../shared/qtpropertybrowser/images/cursor-wait.png"
+ "../../../shared/qtpropertybrowser/images/cursor-whatsthis.png"
)
- qt_add_resource(Designer "qtpropertybrowser"
+ qt_internal_add_resource(Designer "qtpropertybrowser"
PREFIX
"/qt-project.org/qtpropertybrowser"
BASE
@@ -559,14 +457,17 @@ if(NOT QT_BUILD_SHARED_LIBS)
)
endif()
-qt_extend_target(Designer CONDITION QT_BUILD_SHARED_LIBS
+qt_internal_extend_target(Designer CONDITION QT_BUILD_SHARED_LIBS
SOURCES
../../../shared/qtpropertybrowser/qtpropertybrowserutils.cpp ../../../shared/qtpropertybrowser/qtpropertybrowserutils_p.h
INCLUDE_DIRECTORIES
../../../shared/qtpropertybrowser
)
-qt_extend_target(Designer CONDITION QT_FEATURE_opengl
+qt_internal_extend_target(Designer CONDITION QT_FEATURE_opengl
LIBRARIES
Qt::OpenGL
)
+
+# UiPlugin module generates deprecated header files for Designer.
+qt_internal_add_sync_header_dependencies(Designer UiPlugin)
diff --git a/src/designer/src/lib/components/qdesigner_components.h b/src/designer/src/lib/components/qdesigner_components.h
index bc716acdf..33ee90d20 100644
--- a/src/designer/src/lib/components/qdesigner_components.h
+++ b/src/designer/src/lib/components/qdesigner_components.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QDESIGNER_COMPONENTS_H
#define QDESIGNER_COMPONENTS_H
@@ -50,6 +25,9 @@ public:
static void initializePlugins(QDesignerFormEditorInterface *core);
static QDesignerFormEditorInterface *createFormEditor(QObject *parent);
+ static QDesignerFormEditorInterface *
+ createFormEditorWithPluginPaths(const QStringList &pluginPaths,
+ QObject *parent);
static QDesignerWidgetBoxInterface *createWidgetBox(QDesignerFormEditorInterface *core, QWidget *parent);
static QDesignerPropertyEditorInterface *createPropertyEditor(QDesignerFormEditorInterface *core, QWidget *parent);
static QDesignerObjectInspectorInterface *createObjectInspector(QDesignerFormEditorInterface *core, QWidget *parent);
@@ -58,6 +36,8 @@ public:
static QObject *createTaskMenu(QDesignerFormEditorInterface *core, QObject *parent);
static QWidget *createResourceEditor(QDesignerFormEditorInterface *core, QWidget *parent);
static QWidget *createSignalSlotEditor(QDesignerFormEditorInterface *core, QWidget *parent);
+
+ static QStringList defaultPluginPaths();
};
QT_END_NAMESPACE
diff --git a/src/designer/src/lib/components/qdesigner_components_global.h b/src/designer/src/lib/components/qdesigner_components_global.h
index bc647a4f1..ced3bd14a 100644
--- a/src/designer/src/lib/components/qdesigner_components_global.h
+++ b/src/designer/src/lib/components/qdesigner_components_global.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QDESIGNER_COMPONENTS_GLOBAL_H
#define QDESIGNER_COMPONENTS_GLOBAL_H
diff --git a/src/designer/src/lib/extension/default_extensionfactory.cpp b/src/designer/src/lib/extension/default_extensionfactory.cpp
index af1fe6f21..87a8d1520 100644
--- a/src/designer/src/lib/extension/default_extensionfactory.cpp
+++ b/src/designer/src/lib/extension/default_extensionfactory.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "default_extensionfactory.h"
#include "qextensionmanager.h"
@@ -49,7 +24,7 @@ QT_BEGIN_NAMESPACE
{QExtensionManager}{extension manager}.
The QExtensionManager class provides extension management
- facilities for Qt Designer. When an extension is required, Qt
+ facilities for \QD. When an extension is required, Qt
Designer's \l {QExtensionManager}{extension manager} will run
through all its registered factories calling
QExtensionFactory::createExtension() for each until the first one
@@ -57,7 +32,7 @@ QT_BEGIN_NAMESPACE
object, is found. This factory will then make an instance of the
extension.
- There are four available types of extensions in Qt Designer:
+ There are four available types of extensions in \QD:
QDesignerContainerExtension , QDesignerMemberSheetExtension,
QDesignerPropertySheetExtension and QDesignerTaskMenuExtension. Qt
Designer's behavior is the same whether the requested extension is
@@ -78,8 +53,8 @@ QT_BEGIN_NAMESPACE
For a complete example using the QExtensionFactory class, see the
\l {taskmenuextension}{Task Menu Extension example}. The
example shows how to create a custom widget plugin for Qt
- Designer, and how to to use the QDesignerTaskMenuExtension class
- to add custom items to Qt Designer's task menu.
+ Designer, and how to use the QDesignerTaskMenuExtension class
+ to add custom items to \QD's task menu.
\sa QExtensionManager, QAbstractExtensionFactory
*/
@@ -102,9 +77,9 @@ QObject *QExtensionFactory::extension(QObject *object, const QString &iid) const
{
if (!object)
return nullptr;
- const IdObjectKey key = qMakePair(iid, object);
+ const auto key = std::make_pair(iid, object);
- ExtensionMap::iterator it = m_extensions.find(key);
+ auto it = m_extensions.find(key);
if (it == m_extensions.end()) {
if (QObject *ext = createExtension(object, iid, const_cast<QExtensionFactory*>(this))) {
connect(ext, &QObject::destroyed, this, &QExtensionFactory::objectDestroyed);
diff --git a/src/designer/src/lib/extension/default_extensionfactory.h b/src/designer/src/lib/extension/default_extensionfactory.h
index f14c33361..825b9d5a1 100644
--- a/src/designer/src/lib/extension/default_extensionfactory.h
+++ b/src/designer/src/lib/extension/default_extensionfactory.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef DEFAULT_EXTENSIONFACTORY_H
#define DEFAULT_EXTENSIONFACTORY_H
@@ -57,11 +32,9 @@ protected:
virtual QObject *createExtension(QObject *object, const QString &iid, QObject *parent) const;
private:
- typedef QPair<QString,QObject*> IdObjectKey;
- typedef QMap< IdObjectKey, QObject*> ExtensionMap;
- mutable ExtensionMap m_extensions;
- typedef QHash<QObject*, bool> ExtendedSet;
- mutable ExtendedSet m_extended;
+ mutable QMap<std::pair<QString, QObject *>, QObject *> m_extensions;
+ // ### FIXME Qt 7: Use QSet, add out of line destructor.
+ mutable QHash<QObject*, bool> m_extended;
};
QT_END_NAMESPACE
diff --git a/src/designer/src/lib/extension/extension.cpp b/src/designer/src/lib/extension/extension.cpp
index f5d4059d1..d51b3917c 100644
--- a/src/designer/src/lib/extension/extension.cpp
+++ b/src/designer/src/lib/extension/extension.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QtDesigner/extension.h>
@@ -34,7 +9,7 @@ QT_BEGIN_NAMESPACE
\class QAbstractExtensionFactory
\brief The QAbstractExtensionFactory class provides an interface
- for extension factories in Qt Designer.
+ for extension factories in \QD.
\inmodule QtDesigner
@@ -59,10 +34,10 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QAbstractExtensionFactory::~QAbstractExtensionFactory()
-
Destroys the extension factory.
*/
+QAbstractExtensionFactory::~QAbstractExtensionFactory()
+ = default;
/*!
\fn QObject *QAbstractExtensionFactory::extension(QObject *object, const QString &iid) const
@@ -75,7 +50,7 @@ QT_BEGIN_NAMESPACE
\class QAbstractExtensionManager
\brief The QAbstractExtensionManager class provides an interface
- for extension managers in Qt Designer.
+ for extension managers in \QD.
\inmodule QtDesigner
@@ -99,10 +74,10 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QAbstractExtensionManager::~QAbstractExtensionManager()
-
Destroys the extension manager.
*/
+QAbstractExtensionManager::~QAbstractExtensionManager()
+ = default;
/*!
\fn void QAbstractExtensionManager::registerExtensions(QAbstractExtensionFactory *factory, const QString &iid)
diff --git a/src/designer/src/lib/extension/extension.h b/src/designer/src/lib/extension/extension.h
index 7d9244287..e9c9e24bd 100644
--- a/src/designer/src/lib/extension/extension.h
+++ b/src/designer/src/lib/extension/extension.h
@@ -1,54 +1,31 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef EXTENSION_H
#define EXTENSION_H
+#include <QtDesigner/extension_global.h>
+
#include <QtCore/qstring.h>
#include <QtCore/qobject.h>
QT_BEGIN_NAMESPACE
-#define Q_TYPEID(IFace) QLatin1String(IFace##_iid)
+#define Q_TYPEID(IFace) QLatin1StringView(IFace##_iid)
-class QAbstractExtensionFactory
+class QDESIGNER_EXTENSION_EXPORT QAbstractExtensionFactory
{
public:
- virtual ~QAbstractExtensionFactory() {}
+ virtual ~QAbstractExtensionFactory();
virtual QObject *extension(QObject *object, const QString &iid) const = 0;
};
Q_DECLARE_INTERFACE(QAbstractExtensionFactory, "org.qt-project.Qt.QAbstractExtensionFactory")
-class QAbstractExtensionManager
+class QDESIGNER_EXTENSION_EXPORT QAbstractExtensionManager
{
public:
- virtual ~QAbstractExtensionManager() {}
+ virtual ~QAbstractExtensionManager();
virtual void registerExtensions(QAbstractExtensionFactory *factory, const QString &iid) = 0;
virtual void unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid) = 0;
diff --git a/src/designer/src/lib/extension/extension.pri b/src/designer/src/lib/extension/extension.pri
deleted file mode 100644
index d8ef658f2..000000000
--- a/src/designer/src/lib/extension/extension.pri
+++ /dev/null
@@ -1,12 +0,0 @@
-# Input
-
-INCLUDEPATH += $$PWD
-
-HEADERS += $$PWD/default_extensionfactory.h \
- $$PWD/extension.h \
- $$PWD/qextensionmanager.h
-
-SOURCES += $$PWD/default_extensionfactory.cpp \
- $$PWD/extension.cpp \
- $$PWD/qextensionmanager.cpp
-
diff --git a/src/designer/src/lib/extension/extension_global.h b/src/designer/src/lib/extension/extension_global.h
index 87127087a..781974f6a 100644
--- a/src/designer/src/lib/extension/extension_global.h
+++ b/src/designer/src/lib/extension/extension_global.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef EXTENSION_GLOBAL_H
#define EXTENSION_GLOBAL_H
diff --git a/src/designer/src/lib/extension/qextensionmanager.cpp b/src/designer/src/lib/extension/qextensionmanager.cpp
index e6e0451c2..2d974c63a 100644
--- a/src/designer/src/lib/extension/qextensionmanager.cpp
+++ b/src/designer/src/lib/extension/qextensionmanager.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qextensionmanager.h"
@@ -34,7 +9,7 @@ QT_BEGIN_NAMESPACE
\class QExtensionManager
\brief The QExtensionManager class provides extension management
- facilities for Qt Designer.
+ facilities for \QD.
\inmodule QtDesigner
@@ -75,7 +50,7 @@ QT_BEGIN_NAMESPACE
For a complete example using the QExtensionManager class, see the
\l {taskmenuextension}{Task Menu Extension example}. The
example shows how to create a custom widget plugin for Qt
- Designer, and how to to use the QDesignerTaskMenuExtension class
+ Designer, and how to use the QDesignerTaskMenuExtension class
to add custom items to \QD's task menu.
\sa QExtensionFactory, QAbstractExtensionManager
@@ -106,7 +81,7 @@ void QExtensionManager::registerExtensions(QAbstractExtensionFactory *factory, c
return;
}
- FactoryMap::iterator it = m_extensions.find(iid);
+ auto it = m_extensions.find(iid);
if (it == m_extensions.end())
it = m_extensions.insert(iid, FactoryList());
@@ -124,7 +99,7 @@ void QExtensionManager::unregisterExtensions(QAbstractExtensionFactory *factory,
return;
}
- const FactoryMap::iterator it = m_extensions.find(iid);
+ const auto it = m_extensions.find(iid);
if (it == m_extensions.end())
return;
@@ -141,17 +116,18 @@ void QExtensionManager::unregisterExtensions(QAbstractExtensionFactory *factory,
*/
QObject *QExtensionManager::extension(QObject *object, const QString &iid) const
{
- const FactoryMap::const_iterator it = m_extensions.constFind(iid);
+ const auto it = m_extensions.constFind(iid);
if (it != m_extensions.constEnd()) {
- const FactoryList::const_iterator fcend = it.value().constEnd();
- for (FactoryList::const_iterator fit = it.value().constBegin(); fit != fcend; ++fit)
- if (QObject *ext = (*fit)->extension(object, iid))
+ for (const auto &f : it.value()) {
+ if (QObject *ext = f->extension(object, iid))
return ext;
+ }
}
- const FactoryList::const_iterator gfcend = m_globalExtension.constEnd();
- for (FactoryList::const_iterator git = m_globalExtension.constBegin(); git != gfcend; ++git)
- if (QObject *ext = (*git)->extension(object, iid))
+
+ for (const auto &gf : m_globalExtension) {
+ if (QObject *ext = gf->extension(object, iid))
return ext;
+ }
return nullptr;
}
diff --git a/src/designer/src/lib/extension/qextensionmanager.h b/src/designer/src/lib/extension/qextensionmanager.h
index 49dd56224..0fb2bcd9e 100644
--- a/src/designer/src/lib/extension/qextensionmanager.h
+++ b/src/designer/src/lib/extension/qextensionmanager.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QEXTENSIONMANAGER_H
#define QEXTENSIONMANAGER_H
@@ -52,8 +27,7 @@ public:
private:
using FactoryList = QList<QAbstractExtensionFactory *>;
- typedef QHash<QString, FactoryList> FactoryMap;
- FactoryMap m_extensions;
+ QHash<QString, FactoryList> m_extensions;
FactoryList m_globalExtension;
};
diff --git a/src/designer/src/lib/lib.pro b/src/designer/src/lib/lib.pro
deleted file mode 100644
index 870f752e8..000000000
--- a/src/designer/src/lib/lib.pro
+++ /dev/null
@@ -1,22 +0,0 @@
-TARGET = QtDesigner
-MODULE = designer
-
-QT = core-private gui-private widgets-private xml uiplugin
-qtHaveModule(openglwidgets): QT += openglwidgets
-
-DEFINES += \
- QDESIGNER_SDK_LIBRARY \
- QDESIGNER_EXTENSION_LIBRARY \
- QDESIGNER_UILIB_LIBRARY \
- QDESIGNER_SHARED_LIBRARY
-
-static:DEFINES += QT_DESIGNER_STATIC
-
-include(extension/extension.pri)
-include(sdk/sdk.pri)
-include(shared/shared.pri)
-include(uilib/uilib.pri)
-PRECOMPILED_HEADER=lib_pch.h
-
-MODULE_PLUGIN_TYPES = designer
-load(qt_module)
diff --git a/src/designer/src/lib/lib_pch.h b/src/designer/src/lib/lib_pch.h
index a40183535..f8dfc9947 100644
--- a/src/designer/src/lib/lib_pch.h
+++ b/src/designer/src/lib/lib_pch.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifdef __cplusplus
#include "shared_global_p.h"
diff --git a/src/designer/src/lib/sdk/abstractactioneditor.cpp b/src/designer/src/lib/sdk/abstractactioneditor.cpp
index badce0062..5b50a941b 100644
--- a/src/designer/src/lib/sdk/abstractactioneditor.cpp
+++ b/src/designer/src/lib/sdk/abstractactioneditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "abstractactioneditor.h"
@@ -34,7 +9,7 @@ QT_BEGIN_NAMESPACE
\class QDesignerActionEditorInterface
\brief The QDesignerActionEditorInterface class allows you to
- change the focus of Qt Designer's action editor.
+ change the focus of \QD's action editor.
\inmodule QtDesigner
diff --git a/src/designer/src/lib/sdk/abstractactioneditor.h b/src/designer/src/lib/sdk/abstractactioneditor.h
index abdc2397a..5ca6b2c38 100644
--- a/src/designer/src/lib/sdk/abstractactioneditor.h
+++ b/src/designer/src/lib/sdk/abstractactioneditor.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABSTRACTACTIONEDITOR_H
#define ABSTRACTACTIONEDITOR_H
diff --git a/src/designer/src/lib/sdk/abstractdialoggui.cpp b/src/designer/src/lib/sdk/abstractdialoggui.cpp
index 5907999e7..6c1eb6d99 100644
--- a/src/designer/src/lib/sdk/abstractdialoggui.cpp
+++ b/src/designer/src/lib/sdk/abstractdialoggui.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "abstractdialoggui_p.h"
diff --git a/src/designer/src/lib/sdk/abstractdialoggui_p.h b/src/designer/src/lib/sdk/abstractdialoggui_p.h
index d8f47dc8b..b230a5be0 100644
--- a/src/designer/src/lib/sdk/abstractdialoggui_p.h
+++ b/src/designer/src/lib/sdk/abstractdialoggui_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/sdk/abstractdnditem.h b/src/designer/src/lib/sdk/abstractdnditem.h
index 24fc3a977..44d1da16b 100644
--- a/src/designer/src/lib/sdk/abstractdnditem.h
+++ b/src/designer/src/lib/sdk/abstractdnditem.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABSTRACTDNDITEM_H
#define ABSTRACTDNDITEM_H
diff --git a/src/designer/src/lib/sdk/abstractdnditem.qdoc b/src/designer/src/lib/sdk/abstractdnditem.qdoc
index 47f2e9d9d..b3dd3d3ed 100644
--- a/src/designer/src/lib/sdk/abstractdnditem.qdoc
+++ b/src/designer/src/lib/sdk/abstractdnditem.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\class QDesignerDnDItemInterface
diff --git a/src/designer/src/lib/sdk/abstractformeditor.cpp b/src/designer/src/lib/sdk/abstractformeditor.cpp
index 2d4b20812..d66872ea7 100644
--- a/src/designer/src/lib/sdk/abstractformeditor.cpp
+++ b/src/designer/src/lib/sdk/abstractformeditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "abstractformeditor.h"
#include "abstractdialoggui_p.h"
@@ -72,6 +47,8 @@ static void initResources()
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
class QDesignerFormEditorInterfacePrivate {
public:
QDesignerFormEditorInterfacePrivate();
@@ -116,7 +93,7 @@ QDesignerFormEditorInterfacePrivate::~QDesignerFormEditorInterfacePrivate()
\class QDesignerFormEditorInterface
\brief The QDesignerFormEditorInterface class allows you to access
- Qt Designer's various components.
+ Qt Widgets Designer's various components.
\inmodule QtDesigner
@@ -128,7 +105,7 @@ QDesignerFormEditorInterfacePrivate::~QDesignerFormEditorInterfacePrivate()
these components. They are typically used to query (and
manipulate) the respective component. For example:
- \snippet lib/tools_designer_src_lib_sdk_abstractformeditor.cpp 0
+ \snippet lib/tools_designer_src_lib_sdk_abstractobjectinspector.cpp 0
QDesignerFormEditorInterface is not intended to be instantiated
directly. A pointer to \QD's current QDesignerFormEditorInterface
@@ -536,9 +513,9 @@ void QDesignerFormEditorInterface::setIntrospection(QDesignerIntrospectionInterf
QString QDesignerFormEditorInterface::resourceLocation() const
{
#ifdef Q_OS_MACOS
- return QStringLiteral(":/qt-project.org/formeditor/images/mac");
+ return u":/qt-project.org/formeditor/images/mac"_s;
#else
- return QStringLiteral(":/qt-project.org/formeditor/images/win");
+ return u":/qt-project.org/formeditor/images/win"_s;
#endif
}
diff --git a/src/designer/src/lib/sdk/abstractformeditor.h b/src/designer/src/lib/sdk/abstractformeditor.h
index 39f5054cc..6512f7c04 100644
--- a/src/designer/src/lib/sdk/abstractformeditor.h
+++ b/src/designer/src/lib/sdk/abstractformeditor.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABSTRACTFORMEDITOR_H
#define ABSTRACTFORMEDITOR_H
diff --git a/src/designer/src/lib/sdk/abstractformeditorplugin.cpp b/src/designer/src/lib/sdk/abstractformeditorplugin.cpp
index 7e55cb8c4..af4f49ecf 100644
--- a/src/designer/src/lib/sdk/abstractformeditorplugin.cpp
+++ b/src/designer/src/lib/sdk/abstractformeditorplugin.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QtDesigner/abstractformeditorplugin.h>
@@ -34,7 +9,7 @@ QT_BEGIN_NAMESPACE
\internal
\class QDesignerFormEditorPluginInterface
\brief The QDesignerFormEditorPluginInterface class provides an interface that is used to
- manage plugins for Qt Designer's form editor component.
+ manage plugins for \QD's form editor component.
\inmodule QtDesigner
\sa QDesignerFormEditorInterface
diff --git a/src/designer/src/lib/sdk/abstractformeditorplugin.h b/src/designer/src/lib/sdk/abstractformeditorplugin.h
index 008270f56..eab46768a 100644
--- a/src/designer/src/lib/sdk/abstractformeditorplugin.h
+++ b/src/designer/src/lib/sdk/abstractformeditorplugin.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABSTRACTFORMEDITORPLUGIN_H
#define ABSTRACTFORMEDITORPLUGIN_H
diff --git a/src/designer/src/lib/sdk/abstractformwindow.cpp b/src/designer/src/lib/sdk/abstractformwindow.cpp
index 0b24920aa..1835f81ea 100644
--- a/src/designer/src/lib/sdk/abstractformwindow.cpp
+++ b/src/designer/src/lib/sdk/abstractformwindow.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "abstractformwindow.h"
#include "qtresourcemodel_p.h"
@@ -48,7 +23,7 @@ QT_BEGIN_NAMESPACE
\class QDesignerFormWindowInterface
\brief The QDesignerFormWindowInterface class allows you to query
- and manipulate form windows appearing in Qt Designer's workspace.
+ and manipulate form windows appearing in \QD's workspace.
\inmodule QtDesigner
@@ -437,7 +412,7 @@ void QDesignerFormWindowInterface::activateResourceFilePaths(const QStringList &
displayed in the window. The export macro is used when the form
is compiled to create a widget plugin.
- \sa {Creating Custom Widgets for Qt Designer}
+ \sa {Creating Custom Widgets for Qt Widgets Designer}
*/
/*!
@@ -747,7 +722,7 @@ void QDesignerFormWindowInterface::activateResourceFilePaths(const QStringList &
Switches the form window into editing mode.
- \sa {Qt Designer's Form Editing Mode}
+ \sa {Qt Widgets Designer's Form Editing Mode}
\internal
*/
diff --git a/src/designer/src/lib/sdk/abstractformwindow.h b/src/designer/src/lib/sdk/abstractformwindow.h
index 63aeaada8..441ae3ab6 100644
--- a/src/designer/src/lib/sdk/abstractformwindow.h
+++ b/src/designer/src/lib/sdk/abstractformwindow.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABSTRACTFORMWINDOW_H
#define ABSTRACTFORMWINDOW_H
diff --git a/src/designer/src/lib/sdk/abstractformwindowcursor.cpp b/src/designer/src/lib/sdk/abstractformwindowcursor.cpp
index 246cbea0b..9c4c135d0 100644
--- a/src/designer/src/lib/sdk/abstractformwindowcursor.cpp
+++ b/src/designer/src/lib/sdk/abstractformwindowcursor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "abstractformwindowcursor.h"
diff --git a/src/designer/src/lib/sdk/abstractformwindowcursor.h b/src/designer/src/lib/sdk/abstractformwindowcursor.h
index 0ef900db1..c2afee8bc 100644
--- a/src/designer/src/lib/sdk/abstractformwindowcursor.h
+++ b/src/designer/src/lib/sdk/abstractformwindowcursor.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABSTRACTFORMWINDOWCURSOR_H
#define ABSTRACTFORMWINDOWCURSOR_H
diff --git a/src/designer/src/lib/sdk/abstractformwindowmanager.cpp b/src/designer/src/lib/sdk/abstractformwindowmanager.cpp
index b94e04672..9e8494ca4 100644
--- a/src/designer/src/lib/sdk/abstractformwindowmanager.cpp
+++ b/src/designer/src/lib/sdk/abstractformwindowmanager.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "abstractformwindowmanager.h"
@@ -36,8 +11,8 @@ QT_BEGIN_NAMESPACE
\class QDesignerFormWindowManagerInterface
\brief The QDesignerFormWindowManagerInterface class allows you to
- manipulate the collection of form windows in Qt Designer, and
- control Qt Designer's form editing actions.
+ manipulate the collection of form windows in \QD, and
+ control \QD's form editing actions.
\inmodule QtDesigner
@@ -55,7 +30,7 @@ QT_BEGIN_NAMESPACE
example above) is provided by the
QDesignerCustomWidgetInterface::initialize() function's parameter.
You must subclass the QDesignerCustomWidgetInterface to expose
- your plugin to Qt Designer.
+ your plugin to \QD.
The form window manager interface provides the createFormWindow()
function that enables you to create a new form window which you
@@ -143,7 +118,7 @@ QDesignerFormWindowManagerInterface::~QDesignerFormWindowManagerInterface() = de
returns the original action.
\sa QAction
- \obsolete
+ \deprecated
Use action() instead.
*/
@@ -159,7 +134,7 @@ QAction *QDesignerFormWindowManagerInterface::actionCut() const
function returns the original action.
\sa QAction
- \obsolete
+ \deprecated
Use action() instead.
*/
@@ -175,7 +150,7 @@ QAction *QDesignerFormWindowManagerInterface::actionCopy() const
function returns the original action.
\sa QAction
- \obsolete
+ \deprecated
Use action() instead.
*/
@@ -191,7 +166,7 @@ QAction *QDesignerFormWindowManagerInterface::actionPaste() const
returns the original action.
\sa QAction
- \obsolete
+ \deprecated
Use action() instead.
*/
@@ -205,7 +180,7 @@ QAction *QDesignerFormWindowManagerInterface::actionDelete() const
function returns the original action.
\sa QAction
- \obsolete
+ \deprecated
Use action() instead.
*/
@@ -220,7 +195,7 @@ QAction *QDesignerFormWindowManagerInterface::actionSelectAll() const
action.
\sa QAction
- \obsolete
+ \deprecated
Use action() instead.
*/
@@ -236,7 +211,7 @@ QAction *QDesignerFormWindowManagerInterface::actionLower() const
action.
\sa QAction
- \obsolete
+ \deprecated
Use action() instead.
*/
@@ -251,7 +226,7 @@ QAction *QDesignerFormWindowManagerInterface::actionRaise() const
the original action.
\sa QAction
- \obsolete
+ \deprecated
Use action() instead.
*/
@@ -266,7 +241,7 @@ QAction *QDesignerFormWindowManagerInterface::actionHorizontalLayout() const
original action.
\sa QAction
- \obsolete
+ \deprecated
Use action() instead.
*/
@@ -280,7 +255,7 @@ QAction *QDesignerFormWindowManagerInterface::actionVerticalLayout() const
action. The function returns the original action.
\sa QAction
- \obsolete
+ \deprecated
Use action() instead.
*/
@@ -294,7 +269,7 @@ QAction *QDesignerFormWindowManagerInterface::actionSplitHorizontal() const
action. The function returns the original action.
\sa QAction
- \obsolete
+ \deprecated
Use action() instead.
*/
@@ -309,7 +284,7 @@ QAction *QDesignerFormWindowManagerInterface::actionSplitVertical() const
original action.
\sa QAction
- \obsolete
+ \deprecated
Use action() instead.
*/
@@ -324,7 +299,7 @@ QAction *QDesignerFormWindowManagerInterface::actionGridLayout() const
\sa QAction
\since 4.4
- \obsolete
+ \deprecated
Use action() instead.
*/
@@ -339,7 +314,7 @@ QAction *QDesignerFormWindowManagerInterface::actionFormLayout() const
function returns the original action.
\sa QAction
- \obsolete
+ \deprecated
Use action() instead.
*/
@@ -353,7 +328,7 @@ QAction *QDesignerFormWindowManagerInterface::actionBreakLayout() const
function returns the original action.
\sa QAction
- \obsolete
+ \deprecated
Use action() instead.
*/
@@ -368,7 +343,7 @@ QAction *QDesignerFormWindowManagerInterface::actionAdjustSize() const
\sa QAction
\since 4.4
- \obsolete
+ \deprecated
Use action() instead.
*/
@@ -448,7 +423,7 @@ QAction *QDesignerFormWindowManagerInterface::actionSimplifyLayout() const
function returns the original action.
\sa QAction
- \obsolete
+ \deprecated
Use action() instead.
*/
@@ -462,7 +437,7 @@ QAction *QDesignerFormWindowManagerInterface::actionUndo() const
function returns the original action.
\sa QAction
- \obsolete
+ \deprecated
Use action() instead.
*/
diff --git a/src/designer/src/lib/sdk/abstractformwindowmanager.h b/src/designer/src/lib/sdk/abstractformwindowmanager.h
index 2f93fbde8..08e07f0cf 100644
--- a/src/designer/src/lib/sdk/abstractformwindowmanager.h
+++ b/src/designer/src/lib/sdk/abstractformwindowmanager.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABSTRACTFORMWINDOWMANAGER_H
#define ABSTRACTFORMWINDOWMANAGER_H
diff --git a/src/designer/src/lib/sdk/abstractformwindowtool.cpp b/src/designer/src/lib/sdk/abstractformwindowtool.cpp
index 62ca42375..4bb7db8ee 100644
--- a/src/designer/src/lib/sdk/abstractformwindowtool.cpp
+++ b/src/designer/src/lib/sdk/abstractformwindowtool.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "abstractformwindowtool.h"
diff --git a/src/designer/src/lib/sdk/abstractformwindowtool.h b/src/designer/src/lib/sdk/abstractformwindowtool.h
index d6fecf63a..93dee157d 100644
--- a/src/designer/src/lib/sdk/abstractformwindowtool.h
+++ b/src/designer/src/lib/sdk/abstractformwindowtool.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABSTRACTFORMWINDOWTOOL_H
#define ABSTRACTFORMWINDOWTOOL_H
diff --git a/src/designer/src/lib/sdk/abstractintegration.cpp b/src/designer/src/lib/sdk/abstractintegration.cpp
index 6e6100a79..ee0ff7f45 100644
--- a/src/designer/src/lib/sdk/abstractintegration.cpp
+++ b/src/designer/src/lib/sdk/abstractintegration.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "abstractintegration.h"
#include "abstractformwindow.h"
@@ -43,6 +18,7 @@
#include <qdesigner_propertycommand_p.h>
#include <qdesigner_propertyeditor_p.h>
#include <qdesigner_objectinspector_p.h>
+#include <qdesigner_utils_p.h>
#include <widgetdatabase_p.h>
#include <pluginmanager_p.h>
#include <widgetfactory_p.h>
@@ -59,6 +35,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
/*!
\class QDesignerIntegrationInterface
@@ -303,8 +281,6 @@ public:
void updateSelection();
void updateCustomWidgetPlugins();
- void updatePropertyPrivate(const QString &name, const QVariant &value);
-
void initialize();
void getSelection(qdesigner_internal::Selection &s);
QObject *propertyEditorObject();
@@ -320,7 +296,7 @@ public:
QDesignerIntegrationPrivate::QDesignerIntegrationPrivate(QDesignerIntegration *qq) :
q(qq),
- headerSuffix(QStringLiteral(".h")),
+ headerSuffix(u".h"_s),
headerLowercase(true),
m_features(QDesignerIntegrationInterface::DefaultFeature),
m_resourceFileWatcherBehaviour(QDesignerIntegrationInterface::PromptToReloadResourceFile),
@@ -342,12 +318,9 @@ void QDesignerIntegrationPrivate::initialize()
QObject::connect(designerPropertyEditor, &QDesignerPropertyEditor::resetProperty,
q, &QDesignerIntegration::resetProperty);
QObject::connect(designerPropertyEditor, &QDesignerPropertyEditor::addDynamicProperty,
- q, &QDesignerIntegration::addDynamicProperty);
+ q, &QDesignerIntegration::addDynamicProperty);
QObject::connect(designerPropertyEditor, &QDesignerPropertyEditor::removeDynamicProperty,
- q, &QDesignerIntegration::removeDynamicProperty);
- } else {
- QObject::connect(core->propertyEditor(), SIGNAL(propertyChanged(QString,QVariant)),
- q, SLOT(updatePropertyPrivate(QString,QVariant))); // ### fixme: VS Integration leftover?
+ q, &QDesignerIntegration::removeDynamicProperty);
}
QObject::connect(core->formWindowManager(), &QDesignerFormWindowManagerInterface::formWindowAdded,
@@ -359,19 +332,24 @@ void QDesignerIntegrationPrivate::initialize()
m_gradientManager = new QtGradientManager(q);
core->setGradientManager(m_gradientManager);
- QString designerFolder = QDir::homePath();
- designerFolder += QDir::separator();
- designerFolder += QStringLiteral(".designer");
- m_gradientsPath = designerFolder;
- m_gradientsPath += QDir::separator();
- m_gradientsPath += QStringLiteral("gradients.xml");
+ const QString gradientsFile = u"/gradients.xml"_s;
+ m_gradientsPath = dataDirectory() + gradientsFile;
+
+ // Migrate from legacy to standard data directory in Qt 7
+ // ### FIXME Qt 8: Remove (QTBUG-96005)
+#if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0)
+ const QString source = QFileInfo::exists(m_gradientsPath)
+ ? m_gradientsPath : legacyDataDirectory() + gradientsFile;
+#else
+ const QString source = m_gradientsPath;
+#endif
- QFile f(m_gradientsPath);
+ QFile f(source);
if (f.open(QIODevice::ReadOnly)) {
QtGradientUtils::restoreState(m_gradientManager, QString::fromLatin1(f.readAll()));
f.close();
} else {
- QFile defaultGradients(QStringLiteral(":/qt-project.org/designer/defaultgradients.xml"));
+ QFile defaultGradients(u":/qt-project.org/designer/defaultgradients.xml"_s);
if (defaultGradients.open(QIODevice::ReadOnly)) {
QtGradientUtils::restoreState(m_gradientManager, QString::fromLatin1(defaultGradients.readAll()));
defaultGradients.close();
@@ -587,12 +565,12 @@ void QDesignerIntegrationPrivate::updateCustomWidgetPlugins()
static QString fixHelpClassName(const QString &className)
{
// ### generalize using the Widget Data Base
- if (className == QStringLiteral("Line"))
- return QStringLiteral("QFrame");
- if (className == QStringLiteral("Spacer"))
- return QStringLiteral("QSpacerItem");
- if (className == QStringLiteral("QLayoutWidget"))
- return QStringLiteral("QLayout");
+ if (className == "Line"_L1)
+ return u"QFrame"_s;
+ if (className == "Spacer"_L1)
+ return u"QSpacerItem"_s;
+ if (className == "QLayoutWidget"_L1)
+ return u"QLayout"_s;
return className;
}
@@ -626,7 +604,7 @@ QString QDesignerIntegrationPrivate::contextHelpId() const
}
QString helpId = fixHelpClassName(className);
if (!currentPropertyName.isEmpty()) {
- helpId += QStringLiteral("::");
+ helpId += "::"_L1;
helpId += currentPropertyName;
}
return helpId;
diff --git a/src/designer/src/lib/sdk/abstractintegration.h b/src/designer/src/lib/sdk/abstractintegration.h
index c47e1f8cf..5e3e297c1 100644
--- a/src/designer/src/lib/sdk/abstractintegration.h
+++ b/src/designer/src/lib/sdk/abstractintegration.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABSTRACTINTEGRATION_H
#define ABSTRACTINTEGRATION_H
diff --git a/src/designer/src/lib/sdk/abstractintrospection.cpp b/src/designer/src/lib/sdk/abstractintrospection.cpp
index 405796cdc..6fc112f36 100644
--- a/src/designer/src/lib/sdk/abstractintrospection.cpp
+++ b/src/designer/src/lib/sdk/abstractintrospection.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "abstractintrospection_p.h"
@@ -203,9 +178,11 @@ QDesignerMetaPropertyInterface::~QDesignerMetaPropertyInterface() = default;
*/
/*!
- \fn QVariant::Type QDesignerMetaPropertyInterface::type() const
+ \fn int QDesignerMetaPropertyInterface::type() const
Returns the type of the property.
+
+ \sa QMetaType::Type
*/
/*!
diff --git a/src/designer/src/lib/sdk/abstractintrospection_p.h b/src/designer/src/lib/sdk/abstractintrospection_p.h
index 985bba830..8add3a4ec 100644
--- a/src/designer/src/lib/sdk/abstractintrospection_p.h
+++ b/src/designer/src/lib/sdk/abstractintrospection_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -59,6 +34,7 @@ public:
virtual int keyToValue(const QString &key) const = 0;
virtual int keysToValue(const QString &keys) const = 0;
virtual QString name() const = 0;
+ virtual QString enumName() const = 0;
virtual QString scope() const = 0;
virtual QString separator() const = 0;
virtual int value(int index) const = 0;
@@ -86,7 +62,7 @@ public:
virtual AccessFlags accessFlags() const = 0;
virtual Attributes attributes() const = 0;
- virtual QVariant::Type type() const = 0;
+ virtual int type() const = 0;
virtual QString name() const = 0;
virtual QString typeName() const = 0;
virtual int userType() const = 0;
diff --git a/src/designer/src/lib/sdk/abstractlanguage.h b/src/designer/src/lib/sdk/abstractlanguage.h
index 1ac58261f..0e0c4f60e 100644
--- a/src/designer/src/lib/sdk/abstractlanguage.h
+++ b/src/designer/src/lib/sdk/abstractlanguage.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/sdk/abstractmetadatabase.cpp b/src/designer/src/lib/sdk/abstractmetadatabase.cpp
index 3ba2d5804..46b0d967c 100644
--- a/src/designer/src/lib/sdk/abstractmetadatabase.cpp
+++ b/src/designer/src/lib/sdk/abstractmetadatabase.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
// sdk
#include "abstractmetadatabase.h"
@@ -33,7 +8,7 @@ QT_BEGIN_NAMESPACE
/*!
\class QDesignerMetaDataBaseInterface
- \brief The QDesignerMetaDataBaseInterface class provides an interface to Qt Designer's
+ \brief The QDesignerMetaDataBaseInterface class provides an interface to Qt Widgets Designer's
object meta database.
\inmodule QtDesigner
\internal
@@ -88,7 +63,7 @@ QDesignerMetaDataBaseInterface::~QDesignerMetaDataBaseInterface() = default;
/*!
\class QDesignerMetaDataBaseItemInterface
\brief The QDesignerMetaDataBaseItemInterface class provides an interface to individual
- items in Qt Designer's meta database.
+ items in \QD's meta database.
\inmodule QtDesigner
\internal
diff --git a/src/designer/src/lib/sdk/abstractmetadatabase.h b/src/designer/src/lib/sdk/abstractmetadatabase.h
index adeb6c7ee..46728ea66 100644
--- a/src/designer/src/lib/sdk/abstractmetadatabase.h
+++ b/src/designer/src/lib/sdk/abstractmetadatabase.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABSTRACTMETADATABASE_H
#define ABSTRACTMETADATABASE_H
diff --git a/src/designer/src/lib/sdk/abstractnewformwidget.cpp b/src/designer/src/lib/sdk/abstractnewformwidget.cpp
index 404c0c595..e4b0e7dc0 100644
--- a/src/designer/src/lib/sdk/abstractnewformwidget.cpp
+++ b/src/designer/src/lib/sdk/abstractnewformwidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "abstractnewformwidget.h"
#include <newformwidget_p.h>
diff --git a/src/designer/src/lib/sdk/abstractnewformwidget.h b/src/designer/src/lib/sdk/abstractnewformwidget.h
index b34d5ff0a..c63bcf38c 100644
--- a/src/designer/src/lib/sdk/abstractnewformwidget.h
+++ b/src/designer/src/lib/sdk/abstractnewformwidget.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABSTRACTNEWFORMWIDGET_H
#define ABSTRACTNEWFORMWIDGET_H
diff --git a/src/designer/src/lib/sdk/abstractobjectinspector.cpp b/src/designer/src/lib/sdk/abstractobjectinspector.cpp
index 61fbb6e25..fed91fe5d 100644
--- a/src/designer/src/lib/sdk/abstractobjectinspector.cpp
+++ b/src/designer/src/lib/sdk/abstractobjectinspector.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "abstractobjectinspector.h"
@@ -34,7 +9,7 @@ QT_BEGIN_NAMESPACE
\class QDesignerObjectInspectorInterface
\brief The QDesignerObjectInspectorInterface class allows you to
- change the focus of Qt Designer's object inspector.
+ change the focus of \QD's object inspector.
\inmodule QtDesigner
diff --git a/src/designer/src/lib/sdk/abstractobjectinspector.h b/src/designer/src/lib/sdk/abstractobjectinspector.h
index a71c2bfdd..1d7748c9a 100644
--- a/src/designer/src/lib/sdk/abstractobjectinspector.h
+++ b/src/designer/src/lib/sdk/abstractobjectinspector.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABSTRACTOBJECTINSPECTOR_H
#define ABSTRACTOBJECTINSPECTOR_H
diff --git a/src/designer/src/lib/sdk/abstractoptionspage.h b/src/designer/src/lib/sdk/abstractoptionspage.h
index 80607ffd0..f0ff5327b 100644
--- a/src/designer/src/lib/sdk/abstractoptionspage.h
+++ b/src/designer/src/lib/sdk/abstractoptionspage.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABSTRACTOPTIONSPAGE_P_H
#define ABSTRACTOPTIONSPAGE_P_H
diff --git a/src/designer/src/lib/sdk/abstractoptionspage.qdoc b/src/designer/src/lib/sdk/abstractoptionspage.qdoc
index 9fe94c1a4..75214edae 100644
--- a/src/designer/src/lib/sdk/abstractoptionspage.qdoc
+++ b/src/designer/src/lib/sdk/abstractoptionspage.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\class QDesignerOptionsPageInterface
diff --git a/src/designer/src/lib/sdk/abstractpromotioninterface.cpp b/src/designer/src/lib/sdk/abstractpromotioninterface.cpp
index a8e8ecdb6..d279145f9 100644
--- a/src/designer/src/lib/sdk/abstractpromotioninterface.cpp
+++ b/src/designer/src/lib/sdk/abstractpromotioninterface.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "abstractpromotioninterface.h"
diff --git a/src/designer/src/lib/sdk/abstractpromotioninterface.h b/src/designer/src/lib/sdk/abstractpromotioninterface.h
index 3ec2a3038..752d36bc7 100644
--- a/src/designer/src/lib/sdk/abstractpromotioninterface.h
+++ b/src/designer/src/lib/sdk/abstractpromotioninterface.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABSTRACTPROMOTIONINTERFACE_H
#define ABSTRACTPROMOTIONINTERFACE_H
diff --git a/src/designer/src/lib/sdk/abstractpropertyeditor.cpp b/src/designer/src/lib/sdk/abstractpropertyeditor.cpp
index b9cdeca63..c9e011e15 100644
--- a/src/designer/src/lib/sdk/abstractpropertyeditor.cpp
+++ b/src/designer/src/lib/sdk/abstractpropertyeditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "abstractpropertyeditor.h"
@@ -34,7 +9,7 @@ QT_BEGIN_NAMESPACE
\class QDesignerPropertyEditorInterface
\brief The QDesignerPropertyEditorInterface class allows you to
- query and manipulate the current state of Qt Designer's property
+ query and manipulate the current state of Qt Widgets Designer's property
editor.
\inmodule QtDesigner
diff --git a/src/designer/src/lib/sdk/abstractpropertyeditor.h b/src/designer/src/lib/sdk/abstractpropertyeditor.h
index 1da6227d5..8fe5d1cd9 100644
--- a/src/designer/src/lib/sdk/abstractpropertyeditor.h
+++ b/src/designer/src/lib/sdk/abstractpropertyeditor.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABSTRACTPROPERTYEDITOR_H
#define ABSTRACTPROPERTYEDITOR_H
diff --git a/src/designer/src/lib/sdk/abstractresourcebrowser.cpp b/src/designer/src/lib/sdk/abstractresourcebrowser.cpp
index 26a5b8dc3..516cc903f 100644
--- a/src/designer/src/lib/sdk/abstractresourcebrowser.cpp
+++ b/src/designer/src/lib/sdk/abstractresourcebrowser.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "abstractresourcebrowser.h"
diff --git a/src/designer/src/lib/sdk/abstractresourcebrowser.h b/src/designer/src/lib/sdk/abstractresourcebrowser.h
index d3b97e5ad..a0c9f62dd 100644
--- a/src/designer/src/lib/sdk/abstractresourcebrowser.h
+++ b/src/designer/src/lib/sdk/abstractresourcebrowser.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABSTRACTRESOURCEBROWSER_H
#define ABSTRACTRESOURCEBROWSER_H
diff --git a/src/designer/src/lib/sdk/abstractsettings.h b/src/designer/src/lib/sdk/abstractsettings.h
index 4540ef145..3f5b92a0a 100644
--- a/src/designer/src/lib/sdk/abstractsettings.h
+++ b/src/designer/src/lib/sdk/abstractsettings.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABSTRACTSETTINGS_P_H
#define ABSTRACTSETTINGS_P_H
diff --git a/src/designer/src/lib/sdk/abstractsettings.qdoc b/src/designer/src/lib/sdk/abstractsettings.qdoc
index 407048657..6a0ac2b04 100644
--- a/src/designer/src/lib/sdk/abstractsettings.qdoc
+++ b/src/designer/src/lib/sdk/abstractsettings.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\class QDesignerSettingsInterface
diff --git a/src/designer/src/lib/sdk/abstractwidgetbox.cpp b/src/designer/src/lib/sdk/abstractwidgetbox.cpp
index 9bdef3c5b..db559bdcc 100644
--- a/src/designer/src/lib/sdk/abstractwidgetbox.cpp
+++ b/src/designer/src/lib/sdk/abstractwidgetbox.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "abstractwidgetbox.h"
@@ -34,7 +9,7 @@ QT_BEGIN_NAMESPACE
\class QDesignerWidgetBoxInterface
\brief The QDesignerWidgetBoxInterface class allows you to control
- the contents of Qt Designer's widget box.
+ the contents of \QD's widget box.
\inmodule QtDesigner
@@ -207,7 +182,7 @@ int QDesignerWidgetBoxInterface::findOrInsertCategory(const QString &categoryNam
\class QDesignerWidgetBoxInterface::Widget
- \brief The Widget class specified a widget in Qt Designer's widget
+ \brief The Widget class specified a widget in \QD's widget
box component.
*/
@@ -261,7 +236,7 @@ int QDesignerWidgetBoxInterface::findOrInsertCategory(const QString &categoryNam
/*!
\class QDesignerWidgetBoxInterface::Category
- \brief The Category class specifies a category in Qt Designer's widget box component.
+ \brief The Category class specifies a category in \QD's widget box component.
\internal
*/
diff --git a/src/designer/src/lib/sdk/abstractwidgetbox.h b/src/designer/src/lib/sdk/abstractwidgetbox.h
index 6d038fc6a..6f6d9f495 100644
--- a/src/designer/src/lib/sdk/abstractwidgetbox.h
+++ b/src/designer/src/lib/sdk/abstractwidgetbox.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABSTRACTWIDGETBOX_H
#define ABSTRACTWIDGETBOX_H
@@ -84,7 +59,7 @@ public:
QString name() const { return m_name; }
void setName(const QString &aname) { m_name = aname; }
- int widgetCount() const { return m_widget_list.size(); }
+ int widgetCount() const { return int(m_widget_list.size()); }
Widget widget(int idx) const { return m_widget_list.at(idx); }
void removeWidget(int idx) { m_widget_list.removeAt(idx); }
void addWidget(const Widget &awidget) { m_widget_list.append(awidget); }
diff --git a/src/designer/src/lib/sdk/abstractwidgetdatabase.cpp b/src/designer/src/lib/sdk/abstractwidgetdatabase.cpp
index a348580ea..2147afeca 100644
--- a/src/designer/src/lib/sdk/abstractwidgetdatabase.cpp
+++ b/src/designer/src/lib/sdk/abstractwidgetdatabase.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "abstractwidgetdatabase.h"
#include <QtCore/qdebug.h>
@@ -32,14 +7,12 @@
QT_BEGIN_NAMESPACE
-namespace {
- enum { debugWidgetDataBase = 0 };
-}
+enum { debugAbstractWidgetDataBase = 0 };
/*!
\class QDesignerWidgetDataBaseInterface
\brief The QDesignerWidgetDataBaseInterface class provides an interface that is used to
- access and modify Qt Designer's widget database.
+ access and modify \QD's widget database.
\inmodule QtDesigner
\internal
*/
@@ -65,7 +38,7 @@ QDesignerWidgetDataBaseInterface::~QDesignerWidgetDataBaseInterface()
*/
int QDesignerWidgetDataBaseInterface::count() const
{
- return m_items.count();
+ return m_items.size();
}
/*!
@@ -86,7 +59,7 @@ int QDesignerWidgetDataBaseInterface::indexOf(QDesignerWidgetDataBaseItemInterfa
*/
void QDesignerWidgetDataBaseInterface::insert(int index, QDesignerWidgetDataBaseItemInterface *item)
{
- if (debugWidgetDataBase)
+ if (debugAbstractWidgetDataBase)
qDebug() << "insert at " << index << ' ' << item->name() << " derived from " << item->extends();
m_items.insert(index, item);
@@ -96,7 +69,7 @@ void QDesignerWidgetDataBaseInterface::insert(int index, QDesignerWidgetDataBase
*/
void QDesignerWidgetDataBaseInterface::append(QDesignerWidgetDataBaseItemInterface *item)
{
- if (debugWidgetDataBase)
+ if (debugAbstractWidgetDataBase)
qDebug() << "append " << item->name() << " derived from " << item->extends();
m_items.append(item);
}
@@ -163,7 +136,7 @@ bool QDesignerWidgetDataBaseInterface::isCustom(QObject *object, bool resolveNam
/*!
\class QDesignerWidgetDataBaseItemInterface
\brief The QDesignerWidgetDataBaseItemInterface class provides an interface that is used to
- access individual items in Qt Designer's widget database.
+ access individual items in \QD's widget database.
\inmodule QtDesigner
\internal
diff --git a/src/designer/src/lib/sdk/abstractwidgetdatabase.h b/src/designer/src/lib/sdk/abstractwidgetdatabase.h
index c162039fc..fbf88e7e2 100644
--- a/src/designer/src/lib/sdk/abstractwidgetdatabase.h
+++ b/src/designer/src/lib/sdk/abstractwidgetdatabase.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABSTRACTWIDGETDATABASE_H
#define ABSTRACTWIDGETDATABASE_H
diff --git a/src/designer/src/lib/sdk/abstractwidgetfactory.cpp b/src/designer/src/lib/sdk/abstractwidgetfactory.cpp
index 9b4f70680..52c41b6a7 100644
--- a/src/designer/src/lib/sdk/abstractwidgetfactory.cpp
+++ b/src/designer/src/lib/sdk/abstractwidgetfactory.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QtDesigner/abstractwidgetfactory.h>
#include "abstractformeditor.h"
@@ -35,7 +10,7 @@ QT_BEGIN_NAMESPACE
/*!
\class QDesignerWidgetFactoryInterface
\brief The QDesignerWidgetFactoryInterface class provides an interface that is used to control
- the widget factory used by Qt Designer.
+ the widget factory used by \QD.
\inmodule QtDesigner
\internal
*/
diff --git a/src/designer/src/lib/sdk/abstractwidgetfactory.h b/src/designer/src/lib/sdk/abstractwidgetfactory.h
index 2bec8ba3d..a8c5cd23c 100644
--- a/src/designer/src/lib/sdk/abstractwidgetfactory.h
+++ b/src/designer/src/lib/sdk/abstractwidgetfactory.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ABSTRACTWIDGETFACTORY_H
#define ABSTRACTWIDGETFACTORY_H
diff --git a/src/designer/src/lib/sdk/container.h b/src/designer/src/lib/sdk/container.h
index f1100c8b1..079e4d5c2 100644
--- a/src/designer/src/lib/sdk/container.h
+++ b/src/designer/src/lib/sdk/container.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef CONTAINER_H
#define CONTAINER_H
diff --git a/src/designer/src/lib/sdk/container.qdoc b/src/designer/src/lib/sdk/container.qdoc
index da45ab388..be3723cb3 100644
--- a/src/designer/src/lib/sdk/container.qdoc
+++ b/src/designer/src/lib/sdk/container.qdoc
@@ -1,37 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\class QDesignerContainerExtension
\brief The QDesignerContainerExtension class allows you to add pages to
- a custom multi-page container in Qt Designer's workspace.
+ a custom multi-page container in \QD's workspace.
\inmodule QtDesigner
- \image containerextension-example.png
+ \image containerextension-example.webp
QDesignerContainerExtension provide an interface for creating
custom container extensions. A container extension consists of a
diff --git a/src/designer/src/lib/sdk/dynamicpropertysheet.h b/src/designer/src/lib/sdk/dynamicpropertysheet.h
index 9c8cebf1a..9046d2e22 100644
--- a/src/designer/src/lib/sdk/dynamicpropertysheet.h
+++ b/src/designer/src/lib/sdk/dynamicpropertysheet.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/sdk/dynamicpropertysheet.qdoc b/src/designer/src/lib/sdk/dynamicpropertysheet.qdoc
index 4d34a1bb4..df457a450 100644
--- a/src/designer/src/lib/sdk/dynamicpropertysheet.qdoc
+++ b/src/designer/src/lib/sdk/dynamicpropertysheet.qdoc
@@ -1,35 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\class QDesignerDynamicPropertySheetExtension
\brief The QDesignerDynamicPropertySheetExtension class allows you to
- manipulate a widget's dynamic properties in Qt Designer's property editor.
+ manipulate a widget's dynamic properties in \QD's property editor.
\sa QDesignerPropertySheetExtension, {QObject#Dynamic Properties}{Dynamic Properties}
diff --git a/src/designer/src/lib/sdk/extrainfo.cpp b/src/designer/src/lib/sdk/extrainfo.cpp
index c276dc9f4..1b161c3b9 100644
--- a/src/designer/src/lib/sdk/extrainfo.cpp
+++ b/src/designer/src/lib/sdk/extrainfo.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "extrainfo.h"
@@ -33,7 +8,7 @@ QT_BEGIN_NAMESPACE
/*!
\class QDesignerExtraInfoExtension
\brief The QDesignerExtraInfoExtension class provides extra information about a widget in
- Qt Designer.
+ Qt Widgets Designer.
\inmodule QtDesigner
\internal
*/
diff --git a/src/designer/src/lib/sdk/extrainfo.h b/src/designer/src/lib/sdk/extrainfo.h
index 1b06c0347..0ce315e17 100644
--- a/src/designer/src/lib/sdk/extrainfo.h
+++ b/src/designer/src/lib/sdk/extrainfo.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef EXTRAINFO_H
#define EXTRAINFO_H
diff --git a/src/designer/src/lib/sdk/layoutdecoration.h b/src/designer/src/lib/sdk/layoutdecoration.h
index e893d1947..3808c5d61 100644
--- a/src/designer/src/lib/sdk/layoutdecoration.h
+++ b/src/designer/src/lib/sdk/layoutdecoration.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef LAYOUTDECORATION_H
#define LAYOUTDECORATION_H
diff --git a/src/designer/src/lib/sdk/layoutdecoration.qdoc b/src/designer/src/lib/sdk/layoutdecoration.qdoc
index 04beec341..8f98af168 100644
--- a/src/designer/src/lib/sdk/layoutdecoration.qdoc
+++ b/src/designer/src/lib/sdk/layoutdecoration.qdoc
@@ -1,29 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+// ### FIXME Qt 7: std::pair in QDesignerLayoutDecorationExtension (QTBUG-115841)
/*!
\class QDesignerLayoutDecorationExtension
diff --git a/src/designer/src/lib/sdk/membersheet.h b/src/designer/src/lib/sdk/membersheet.h
index a3a927538..06b773a93 100644
--- a/src/designer/src/lib/sdk/membersheet.h
+++ b/src/designer/src/lib/sdk/membersheet.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef MEMBERSHEET_H
#define MEMBERSHEET_H
diff --git a/src/designer/src/lib/sdk/membersheet.qdoc b/src/designer/src/lib/sdk/membersheet.qdoc
index 39fc0caa0..65e56cda1 100644
--- a/src/designer/src/lib/sdk/membersheet.qdoc
+++ b/src/designer/src/lib/sdk/membersheet.qdoc
@@ -1,36 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\class QDesignerMemberSheetExtension
\brief The QDesignerMemberSheetExtension class allows you to
manipulate a widget's member functions which is displayed when
- configuring connections using Qt Designer's mode for editing
+ configuring connections using \QD's mode for editing
signals and slots.
\inmodule QtDesigner
@@ -112,7 +88,7 @@
For a complete example using an extension class, see \l
{taskmenuextension}{Task Menu Extension example}. The
example shows how to create a custom widget plugin for Qt
- Designer, and how to to use the QDesignerTaskMenuExtension class
+ Designer, and how to use the QDesignerTaskMenuExtension class
to add custom items to \QD's task menu.
\sa QExtensionFactory, QExtensionManager, {Creating Custom Widget
diff --git a/src/designer/src/lib/sdk/propertysheet.h b/src/designer/src/lib/sdk/propertysheet.h
index 1f3a78d05..9aa49b8eb 100644
--- a/src/designer/src/lib/sdk/propertysheet.h
+++ b/src/designer/src/lib/sdk/propertysheet.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PROPERTYSHEET_H
#define PROPERTYSHEET_H
diff --git a/src/designer/src/lib/sdk/propertysheet.qdoc b/src/designer/src/lib/sdk/propertysheet.qdoc
index e5ab420f4..5804ecb1b 100644
--- a/src/designer/src/lib/sdk/propertysheet.qdoc
+++ b/src/designer/src/lib/sdk/propertysheet.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\class QDesignerPropertySheetExtension
@@ -129,7 +105,7 @@
Or you can use an existing factory, expanding the
QExtensionFactory::createExtension() function to make the factory
- able to create a property sheet extension extension as well. For
+ able to create a property sheet extension as well. For
example:
\snippet plugins/doc_src_qtdesigner.cpp 18
@@ -137,7 +113,7 @@
For a complete example using an extension class, see the \l
{taskmenuextension}{Task Menu Extension example}. The
example shows how to create a custom widget plugin for Qt
- Designer, and how to to use the QDesignerTaskMenuExtension class
+ Designer, and how to use the QDesignerTaskMenuExtension class
to add custom items to \QD's task menu.
\sa QExtensionFactory, QExtensionManager, {Creating Custom Widget
diff --git a/src/designer/src/lib/sdk/sdk.pri b/src/designer/src/lib/sdk/sdk.pri
deleted file mode 100644
index 4a72dd7d7..000000000
--- a/src/designer/src/lib/sdk/sdk.pri
+++ /dev/null
@@ -1,55 +0,0 @@
-# Input
-
-INCLUDEPATH += $$PWD
-
-HEADERS += $$PWD/abstractformeditor.h \
- $$PWD/abstractintrospection_p.h \
- $$PWD/abstractsettings.h \
- $$PWD/abstractformeditorplugin.h \
- $$PWD/abstractresourcebrowser.h \
- $$PWD/abstractintegration.h \
- $$PWD/abstractpropertyeditor.h \
- $$PWD/abstractformwindow.h \
- $$PWD/abstractformwindowtool.h \
- $$PWD/abstractformwindowcursor.h \
- $$PWD/abstractformwindowmanager.h \
- $$PWD/abstractwidgetdatabase.h \
- $$PWD/abstractmetadatabase.h \
- $$PWD/abstractwidgetfactory.h \
- $$PWD/abstractobjectinspector.h \
- $$PWD/abstractactioneditor.h \
- $$PWD/abstractlanguage.h \
- $$PWD/abstractoptionspage.h \
- $$PWD/propertysheet.h \
- $$PWD/container.h \
- $$PWD/dynamicpropertysheet.h \
- $$PWD/membersheet.h \
- $$PWD/taskmenu.h \
- $$PWD/extrainfo.h \
- $$PWD/abstractwidgetbox.h \
- $$PWD/layoutdecoration.h \
- $$PWD/abstractdnditem.h \
- $$PWD/abstractpromotioninterface.h \
- $$PWD/abstractdialoggui_p.h \
- $$PWD/abstractnewformwidget.h
-
-SOURCES += $$PWD/abstractformeditor.cpp \
- $$PWD/abstractintrospection.cpp \
- $$PWD/abstractformeditorplugin.cpp \
- $$PWD/abstractresourcebrowser.cpp \
- $$PWD/abstractintegration.cpp \
- $$PWD/abstractpropertyeditor.cpp \
- $$PWD/abstractformwindow.cpp \
- $$PWD/abstractformwindowtool.cpp \
- $$PWD/abstractformwindowcursor.cpp \
- $$PWD/abstractformwindowmanager.cpp \
- $$PWD/abstractwidgetdatabase.cpp \
- $$PWD/abstractmetadatabase.cpp \
- $$PWD/abstractwidgetfactory.cpp \
- $$PWD/abstractobjectinspector.cpp \
- $$PWD/abstractactioneditor.cpp \
- $$PWD/abstractwidgetbox.cpp \
- $$PWD/extrainfo.cpp \
- $$PWD/abstractpromotioninterface.cpp \
- $$PWD/abstractdialoggui.cpp \
- $$PWD/abstractnewformwidget.cpp
diff --git a/src/designer/src/lib/sdk/sdk_global.h b/src/designer/src/lib/sdk/sdk_global.h
index b24ae76ef..b3ab7e1bc 100644
--- a/src/designer/src/lib/sdk/sdk_global.h
+++ b/src/designer/src/lib/sdk/sdk_global.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef SDK_GLOBAL_H
#define SDK_GLOBAL_H
diff --git a/src/designer/src/lib/sdk/taskmenu.cpp b/src/designer/src/lib/sdk/taskmenu.cpp
new file mode 100644
index 000000000..3e41f43b7
--- /dev/null
+++ b/src/designer/src/lib/sdk/taskmenu.cpp
@@ -0,0 +1,13 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "taskmenu.h"
+
+QT_BEGIN_NAMESPACE
+
+QDesignerTaskMenuExtension::~QDesignerTaskMenuExtension() = default;
+
+QAction *QDesignerTaskMenuExtension::preferredEditAction() const
+{ return nullptr; }
+
+QT_END_NAMESPACE
diff --git a/src/designer/src/lib/sdk/taskmenu.h b/src/designer/src/lib/sdk/taskmenu.h
index fd588baf1..355e11deb 100644
--- a/src/designer/src/lib/sdk/taskmenu.h
+++ b/src/designer/src/lib/sdk/taskmenu.h
@@ -1,47 +1,23 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef TASKMENU_H
#define TASKMENU_H
+#include <QtDesigner/sdk_global.h>
#include <QtDesigner/extension.h>
QT_BEGIN_NAMESPACE
class QAction;
-class QDesignerTaskMenuExtension
+class QDESIGNER_SDK_EXPORT QDesignerTaskMenuExtension
{
public:
Q_DISABLE_COPY_MOVE(QDesignerTaskMenuExtension)
QDesignerTaskMenuExtension() = default;
- virtual ~QDesignerTaskMenuExtension() = default;
+ virtual ~QDesignerTaskMenuExtension();
virtual QAction *preferredEditAction() const;
@@ -49,10 +25,6 @@ public:
};
Q_DECLARE_EXTENSION_INTERFACE(QDesignerTaskMenuExtension, "org.qt-project.Qt.Designer.TaskMenu")
-
-inline QAction *QDesignerTaskMenuExtension::preferredEditAction() const
-{ return nullptr; }
-
QT_END_NAMESPACE
#endif // TASKMENU_H
diff --git a/src/designer/src/lib/sdk/taskmenu.qdoc b/src/designer/src/lib/sdk/taskmenu.qdoc
index b768fc5b2..78e76d9f1 100644
--- a/src/designer/src/lib/sdk/taskmenu.qdoc
+++ b/src/designer/src/lib/sdk/taskmenu.qdoc
@@ -1,34 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\class QDesignerTaskMenuExtension
\brief The QDesignerTaskMenuExtension class allows you to add custom
- menu entries to Qt Designer's task menu.
+ menu entries to \QD's task menu.
\inmodule QtDesigner
QDesignerTaskMenuExtension provides an interface for creating
@@ -39,7 +15,7 @@
menu. Whenever a task menu is requested, \QD will query
for the selected widget's task menu extension.
- \image taskmenuextension-example-faded.png
+ \image taskmenuextension-example.webp
A task menu extension is a collection of QActions. The actions
appear as entries in the task menu when the plugin with the
@@ -105,7 +81,7 @@
For a complete example using the QDesignerTaskMenuExtension class,
see the \l {taskmenuextension}{Task Menu Extension
example}. The example shows how to create a custom widget plugin
- for \QD, and how to to use the QDesignerTaskMenuExtension
+ for \QD, and how to use the QDesignerTaskMenuExtension
class to add custom items to \QD's task menu.
\sa QExtensionFactory, QExtensionManager, {Creating Custom Widget
diff --git a/src/designer/src/lib/shared/actioneditor.cpp b/src/designer/src/lib/shared/actioneditor.cpp
index 12cef9179..b6f3c778c 100644
--- a/src/designer/src/lib/shared/actioneditor.cpp
+++ b/src/designer/src/lib/shared/actioneditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "actioneditor_p.h"
#include "actionrepository_p.h"
@@ -70,18 +45,19 @@
#include <QtCore/qdebug.h>
#include <QtCore/qbuffer.h>
-Q_DECLARE_METATYPE(QAction*)
-
QT_BEGIN_NAMESPACE
-static const char *actionEditorViewModeKey = "ActionEditorViewMode";
+using namespace Qt::StringLiterals;
+
+static constexpr auto actionEditorViewModeKey = "ActionEditorViewMode"_L1;
-static const char *iconPropertyC = "icon";
-static const char *shortcutPropertyC = "shortcut";
-static const char *toolTipPropertyC = "toolTip";
-static const char *checkablePropertyC = "checkable";
-static const char *objectNamePropertyC = "objectName";
-static const char *textPropertyC = "text";
+static constexpr auto iconPropertyC = "icon"_L1;
+static constexpr auto shortcutPropertyC = "shortcut"_L1;
+static constexpr auto menuRolePropertyC = "menuRole"_L1;
+static constexpr auto toolTipPropertyC = "toolTip"_L1;
+static constexpr auto checkablePropertyC = "checkable"_L1;
+static constexpr auto objectNamePropertyC = "objectName"_L1;
+static constexpr auto textPropertyC = "text"_L1;
namespace qdesigner_internal {
//-------- ActionGroupDelegate
@@ -138,7 +114,8 @@ ActionEditor::ActionEditor(QDesignerFormEditorInterface *core, QWidget *parent,
toolbar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
l->addWidget(toolbar);
// edit actions
- QIcon documentNewIcon = QIcon::fromTheme(QStringLiteral("document-new"), createIconSet(QStringLiteral("filenew.png")));
+ QIcon documentNewIcon = createIconSet(QIcon::ThemeIcon::DocumentNew,
+ "filenew.png"_L1);
m_actionNew->setIcon(documentNewIcon);
m_actionNew->setEnabled(false);
connect(m_actionNew, &QAction::triggered, this, &ActionEditor::slotNewAction);
@@ -149,17 +126,20 @@ ActionEditor::ActionEditor(QDesignerFormEditorInterface *core, QWidget *parent,
#if QT_CONFIG(clipboard)
m_actionCut->setEnabled(false);
connect(m_actionCut, &QAction::triggered, this, &ActionEditor::slotCut);
- QIcon editCutIcon = QIcon::fromTheme(QStringLiteral("edit-cut"), createIconSet(QStringLiteral("editcut.png")));
+ QIcon editCutIcon = createIconSet(QIcon::ThemeIcon::EditCut,
+ "editcut.png"_L1);
m_actionCut->setIcon(editCutIcon);
m_actionCopy->setEnabled(false);
connect(m_actionCopy, &QAction::triggered, this, &ActionEditor::slotCopy);
- QIcon editCopyIcon = QIcon::fromTheme(QStringLiteral("edit-copy"), createIconSet(QStringLiteral("editcopy.png")));
+ QIcon editCopyIcon = createIconSet(QIcon::ThemeIcon::EditCopy,
+ "editcopy.png"_L1);
m_actionCopy->setIcon(editCopyIcon);
toolbar->addAction(m_actionCopy);
connect(m_actionPaste, &QAction::triggered, this, &ActionEditor::slotPaste);
- QIcon editPasteIcon = QIcon::fromTheme(QStringLiteral("edit-paste"), createIconSet(QStringLiteral("editpaste.png")));
+ QIcon editPasteIcon = createIconSet(QIcon::ThemeIcon::EditPaste,
+ "editpaste.png"_L1);
m_actionPaste->setIcon(editPasteIcon);
toolbar->addAction(m_actionPaste);
#endif
@@ -169,7 +149,8 @@ ActionEditor::ActionEditor(QDesignerFormEditorInterface *core, QWidget *parent,
connect(m_actionNavigateToSlot, &QAction::triggered, this, &ActionEditor::navigateToSlotCurrentAction);
- QIcon editDeleteIcon = QIcon::fromTheme(QStringLiteral("edit-delete"), createIconSet(QStringLiteral("editdelete.png")));
+ QIcon editDeleteIcon = createIconSet(QIcon::ThemeIcon::EditDelete,
+ "editdelete.png"_L1);
m_actionDelete->setIcon(editDeleteIcon);
m_actionDelete->setEnabled(false);
connect(m_actionDelete, &QAction::triggered, this, &ActionEditor::slotDelete);
@@ -248,9 +229,10 @@ QToolButton *ActionEditor::createConfigureMenuButton(const QString &t, QMenu **p
{
QToolButton *configureButton = new QToolButton;
QAction *configureAction = new QAction(t, configureButton);
- QIcon configureIcon = QIcon::fromTheme(QStringLiteral("document-properties"), createIconSet(QStringLiteral("configure.png")));
+ QIcon configureIcon = QIcon::fromTheme(QIcon::ThemeIcon::DocumentProperties,
+ createIconSet("configure.png"_L1));
configureAction->setIcon(configureIcon);
- QMenu *configureMenu = new QMenu;
+ QMenu *configureMenu = new QMenu(configureButton);
configureAction->setMenu(configureMenu);
configureButton->setDefaultAction(configureAction);
configureButton->setPopupMode(QToolButton::InstantPopup);
@@ -338,7 +320,7 @@ void ActionEditor::slotSelectionChanged(const QItemSelection& selected, const Q
void ActionEditor::slotCurrentItemChanged(QAction *action)
{
QDesignerFormWindowInterface *fw = formWindow();
- if (!fw)
+ if (m_withinSelectAction || fw == nullptr)
return;
const bool hasCurrentAction = action != nullptr;
@@ -351,7 +333,13 @@ void ActionEditor::slotCurrentItemChanged(QAction *action)
QDesignerObjectInspector *oi = qobject_cast<QDesignerObjectInspector *>(core()->objectInspector());
- if (action->associatedWidgets().isEmpty()) {
+ // Check if we have at least one associated QWidget:
+ const auto associatedObjects = action->associatedObjects();
+ auto it = std::find_if(associatedObjects.cbegin(), associatedObjects.cend(),
+ [](QObject *obj) {
+ return qobject_cast<QWidget *>(obj) != nullptr;
+ });
+ if (it == associatedObjects.cend()) {
// Special case: action not in object tree. Deselect all and set in property editor
fw->clearSelection(false);
if (oi)
@@ -400,7 +388,7 @@ void ActionEditor::setFilter(const QString &f)
// Set changed state of icon property, reset when icon is cleared
static void refreshIconPropertyChanged(const QAction *action, QDesignerPropertySheetExtension *sheet)
{
- sheet->setChanged(sheet->indexOf(QLatin1String(iconPropertyC)), !action->icon().isNull());
+ sheet->setChanged(sheet->indexOf(iconPropertyC), !action->icon().isNull());
}
void ActionEditor::manageAction(QAction *action)
@@ -412,8 +400,8 @@ void ActionEditor::manageAction(QAction *action)
return;
QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core()->extensionManager(), action);
- sheet->setChanged(sheet->indexOf(QLatin1String(objectNamePropertyC)), true);
- sheet->setChanged(sheet->indexOf(QLatin1String(textPropertyC)), true);
+ sheet->setChanged(sheet->indexOf(objectNamePropertyC), true);
+ sheet->setChanged(sheet->indexOf(textPropertyC), true);
refreshIconPropertyChanged(action, sheet);
m_actionView->setCurrentIndex(m_actionView->model()->addAction(action));
@@ -456,15 +444,17 @@ void ActionEditor::slotNewAction()
QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core()->extensionManager(), action);
if (!actionData.toolTip.isEmpty())
- setInitialProperty(sheet, QLatin1String(toolTipPropertyC), actionData.toolTip);
+ setInitialProperty(sheet, toolTipPropertyC, actionData.toolTip);
if (actionData.checkable)
- setInitialProperty(sheet, QLatin1String(checkablePropertyC), QVariant(true));
+ setInitialProperty(sheet, checkablePropertyC, QVariant(true));
if (!actionData.keysequence.value().isEmpty())
- setInitialProperty(sheet, QLatin1String(shortcutPropertyC), QVariant::fromValue(actionData.keysequence));
+ setInitialProperty(sheet, shortcutPropertyC, QVariant::fromValue(actionData.keysequence));
+
+ sheet->setProperty(sheet->indexOf(iconPropertyC), QVariant::fromValue(actionData.icon));
- sheet->setProperty(sheet->indexOf(QLatin1String(iconPropertyC)), QVariant::fromValue(actionData.icon));
+ setInitialProperty(sheet, menuRolePropertyC, QVariant::fromValue(actionData.menuRole));
AddActionCommand *cmd = new AddActionCommand(formWindow());
cmd->init(action);
@@ -477,7 +467,7 @@ void ActionEditor::slotNewAction()
static QDesignerFormWindowCommand *setIconPropertyCommand(const PropertySheetIconValue &newIcon, QAction *action, QDesignerFormWindowInterface *fw)
{
- const QString iconProperty = QLatin1String(iconPropertyC);
+ const QString iconProperty = iconPropertyC;
if (newIcon.isEmpty()) {
ResetPropertyCommand *cmd = new ResetPropertyCommand(fw);
cmd->init(action, iconProperty);
@@ -493,7 +483,7 @@ static QDesignerFormWindowCommand *setIconPropertyCommand(const PropertySheetIco
static QDesignerFormWindowCommand *setKeySequencePropertyCommand(const PropertySheetKeySequenceValue &ks, QAction *action, QDesignerFormWindowInterface *fw)
{
- const QString shortcutProperty = QLatin1String(shortcutPropertyC);
+ const QString shortcutProperty = shortcutPropertyC;
if (ks.value().isEmpty()) {
ResetPropertyCommand *cmd = new ResetPropertyCommand(fw);
cmd->init(action, shortcutProperty);
@@ -542,10 +532,11 @@ void ActionEditor::editAction(QAction *action, int column)
QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core()->extensionManager(), action);
oldActionData.name = action->objectName();
oldActionData.text = action->text();
- oldActionData.toolTip = textPropertyValue(sheet, QLatin1String(toolTipPropertyC));
- oldActionData.icon = qvariant_cast<PropertySheetIconValue>(sheet->property(sheet->indexOf(QLatin1String(iconPropertyC))));
+ oldActionData.toolTip = textPropertyValue(sheet, toolTipPropertyC);
+ oldActionData.icon = qvariant_cast<PropertySheetIconValue>(sheet->property(sheet->indexOf(iconPropertyC)));
oldActionData.keysequence = ActionModel::actionShortCut(sheet);
oldActionData.checkable = action->isCheckable();
+ oldActionData.menuRole.value = action->menuRole();
dlg.setActionData(oldActionData);
switch (column) {
@@ -564,6 +555,9 @@ void ActionEditor::editAction(QAction *action, int column)
case qdesigner_internal::ActionModel::ToolTipColumn:
dlg.focusTooltip();
break;
+ case qdesigner_internal::ActionModel::MenuRoleColumn:
+ dlg.focusMenuRole();
+ break;
}
if (!dlg.exec())
@@ -577,31 +571,35 @@ void ActionEditor::editAction(QAction *action, int column)
const bool severalChanges = (changeMask != ActionData::TextChanged) && (changeMask != ActionData::NameChanged)
&& (changeMask != ActionData::ToolTipChanged) && (changeMask != ActionData::IconChanged)
- && (changeMask != ActionData::CheckableChanged) && (changeMask != ActionData::KeysequenceChanged);
+ && (changeMask != ActionData::CheckableChanged) && (changeMask != ActionData::KeysequenceChanged)
+ && (changeMask != ActionData::MenuRoleChanged);
QDesignerFormWindowInterface *fw = formWindow();
QUndoStack *undoStack = fw->commandHistory();
if (severalChanges)
- fw->beginCommand(QStringLiteral("Edit action"));
+ fw->beginCommand(u"Edit action"_s);
if (changeMask & ActionData::NameChanged)
- undoStack->push(createTextPropertyCommand(QLatin1String(objectNamePropertyC), newActionData.name, action, fw));
+ undoStack->push(createTextPropertyCommand(objectNamePropertyC, newActionData.name, action, fw));
if (changeMask & ActionData::TextChanged)
- undoStack->push(createTextPropertyCommand(QLatin1String(textPropertyC), newActionData.text, action, fw));
+ undoStack->push(createTextPropertyCommand(textPropertyC, newActionData.text, action, fw));
if (changeMask & ActionData::ToolTipChanged)
- undoStack->push(createTextPropertyCommand(QLatin1String(toolTipPropertyC), newActionData.toolTip, action, fw));
+ undoStack->push(createTextPropertyCommand(toolTipPropertyC, newActionData.toolTip, action, fw));
if (changeMask & ActionData::IconChanged)
undoStack->push(setIconPropertyCommand(newActionData.icon, action, fw));
if (changeMask & ActionData::CheckableChanged)
- undoStack->push(setPropertyCommand(QLatin1String(checkablePropertyC), newActionData.checkable, false, action, fw));
+ undoStack->push(setPropertyCommand(checkablePropertyC, newActionData.checkable, false, action, fw));
if (changeMask & ActionData::KeysequenceChanged)
undoStack->push(setKeySequencePropertyCommand(newActionData.keysequence, action, fw));
+ if (changeMask & ActionData::MenuRoleChanged)
+ undoStack->push(setPropertyCommand(menuRolePropertyC, static_cast<QAction::MenuRole>(newActionData.menuRole.value), QAction::NoRole, action, fw));
+
if (severalChanges)
fw->endCommand();
}
@@ -615,7 +613,7 @@ void ActionEditor::editCurrentAction()
void ActionEditor::navigateToSlotCurrentAction()
{
if (QAction *a = m_actionView->currentAction())
- QDesignerTaskMenu::navigateToSlot(m_core, a, QStringLiteral("triggered()"));
+ QDesignerTaskMenu::navigateToSlot(m_core, a, u"triggered()"_s);
}
void ActionEditor::deleteActions(QDesignerFormWindowInterface *fw, const ActionList &actions)
@@ -674,14 +672,13 @@ void ActionEditor::slotDelete()
// UnderScore: "Open file" -> actionOpen_file
static QString underscore(QString text)
{
- const QString underscore = QString(QLatin1Char('_'));
- static const QRegularExpression nonAsciiPattern(QStringLiteral("[^a-zA-Z_0-9]"));
+ static const QRegularExpression nonAsciiPattern(u"[^a-zA-Z_0-9]"_s);
Q_ASSERT(nonAsciiPattern.isValid());
- text.replace(nonAsciiPattern, underscore);
- static const QRegularExpression multipleSpacePattern(QStringLiteral("__*"));
+ text.replace(nonAsciiPattern, "_"_L1);
+ static const QRegularExpression multipleSpacePattern(u"__*"_s);
Q_ASSERT(multipleSpacePattern.isValid());
- text.replace(multipleSpacePattern, underscore);
- if (text.endsWith(underscore.at(0)))
+ text.replace(multipleSpacePattern, "_"_L1);
+ if (text.endsWith(u'_'))
text.chop(1);
return text;
}
@@ -736,7 +733,7 @@ void ActionEditor::resourceImageDropped(const QString &path, QAction *action)
QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core()->extensionManager(), action);
const PropertySheetIconValue oldIcon =
- qvariant_cast<PropertySheetIconValue>(sheet->property(sheet->indexOf(QLatin1String(iconPropertyC))));
+ qvariant_cast<PropertySheetIconValue>(sheet->property(sheet->indexOf(iconPropertyC)));
PropertySheetIconValue newIcon;
newIcon.setPixmap(QIcon::Normal, QIcon::Off, PropertySheetPixmapValue(path));
if (newIcon.paths().isEmpty() || newIcon.paths() == oldIcon.paths())
@@ -752,6 +749,24 @@ void ActionEditor::mainContainerChanged()
setFormWindow(nullptr);
}
+void ActionEditor::clearSelection()
+{
+ // For use by the menu editor; block the syncing of the object inspector
+ // in slotCurrentItemChanged() since the menu editor updates it itself.
+ m_withinSelectAction = true;
+ m_actionView->clearSelection();
+ m_withinSelectAction = false;
+}
+
+void ActionEditor::selectAction(QAction *a)
+{
+ // For use by the menu editor; block the syncing of the object inspector
+ // in slotCurrentItemChanged() since the menu editor updates it itself.
+ m_withinSelectAction = true;
+ m_actionView->selectAction(a);
+ m_withinSelectAction = false;
+}
+
void ActionEditor::slotViewMode(QAction *a)
{
m_actionView->setViewMode(a->data().toInt());
@@ -775,14 +790,14 @@ void ActionEditor::slotSelectAssociatedWidget(QWidget *w)
void ActionEditor::restoreSettings()
{
QDesignerSettingsInterface *settings = m_core->settingsManager();
- m_actionView->setViewMode(settings->value(QLatin1String(actionEditorViewModeKey), 0).toInt());
+ m_actionView->setViewMode(settings->value(actionEditorViewModeKey, 0).toInt());
updateViewModeActions();
}
void ActionEditor::saveSettings()
{
QDesignerSettingsInterface *settings = m_core->settingsManager();
- settings->setValue(QLatin1String(actionEditorViewModeKey), m_actionView->viewMode());
+ settings->setValue(actionEditorViewModeKey, m_actionView->viewMode());
}
void ActionEditor::updateViewModeActions()
diff --git a/src/designer/src/lib/shared/actioneditor_p.h b/src/designer/src/lib/shared/actioneditor_p.h
index 2f78887ba..471d12d04 100644
--- a/src/designer/src/lib/shared/actioneditor_p.h
+++ b/src/designer/src/lib/shared/actioneditor_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -88,7 +63,7 @@ public:
static void setObjectNamingMode(ObjectNamingMode n) { m_objectNamingMode = n; }
static QString actionTextToName(const QString &text,
- const QString &prefix = QLatin1String("action"));
+ const QString &prefix = QLatin1StringView("action"));
// Utility to create a configure button with menu for usage on toolbars
static QToolButton *createConfigureMenuButton(const QString &t, QMenu **ptrToMenu);
@@ -96,6 +71,8 @@ public:
public slots:
void setFilter(const QString &filter);
void mainContainerChanged();
+ void clearSelection();
+ void selectAction(QAction *a); // For use by the menu editor
private slots:
void slotCurrentItemChanged(QAction *item);
@@ -158,6 +135,7 @@ private:
QString m_filter;
QWidget *m_filterWidget;
+ bool m_withinSelectAction = false;
};
} // namespace qdesigner_internal
diff --git a/src/designer/src/lib/shared/actionprovider_p.h b/src/designer/src/lib/shared/actionprovider_p.h
index 63d902951..16f987da9 100644
--- a/src/designer/src/lib/shared/actionprovider_p.h
+++ b/src/designer/src/lib/shared/actionprovider_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ACTIONPROVIDER_H
#define ACTIONPROVIDER_H
@@ -67,15 +42,14 @@ template <class Widget>
int actionIndexAt(const Widget *w, const QPoint &pos, Qt::Orientation orientation)
{
const auto actions = w->actions();
- const int actionCount = actions.count();
- if (actionCount == 0)
+ if (actions.isEmpty())
return -1;
// actionGeometry() can be wrong sometimes; it returns a geometry that
// stretches to the end of the toolbar/menu bar. So, check from the beginning
// in the case of a horizontal right-to-left orientation.
const bool checkTopRight = orientation == Qt::Horizontal && w->layoutDirection() == Qt::RightToLeft;
const QPoint topRight = QPoint(w->rect().width(), 0);
- for (int index = 0; index < actionCount; ++index) {
+ for (qsizetype index = 0, actionCount = actions.size(); index < actionCount; ++index) {
QRect g = w->actionGeometry(actions.at(index));
if (checkTopRight)
g.setTopRight(topRight);
@@ -83,7 +57,7 @@ template <class Widget>
g.setTopLeft(QPoint(0, 0));
if (g.contains(pos))
- return index;
+ return int(index);
}
return -1;
}
diff --git a/src/designer/src/lib/shared/actionrepository.cpp b/src/designer/src/lib/shared/actionrepository.cpp
index 35327ec7d..59d8fc6b7 100644
--- a/src/designer/src/lib/shared/actionrepository.cpp
+++ b/src/designer/src/lib/shared/actionrepository.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "actionrepository_p.h"
#include "qtresourceview_p.h"
@@ -48,17 +23,18 @@
#include <QtCore/qset.h>
#include <QtCore/qdebug.h>
-
-Q_DECLARE_METATYPE(QAction*)
+#include <QtCore/qmetaobject.h>
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace {
enum { listModeIconSize = 16, iconModeIconSize = 24 };
}
-static const char *actionMimeType = "action-repository/actions";
-static const char *plainTextMimeType = "text/plain";
+static constexpr auto actionMimeType = "action-repository/actions"_L1;
+static constexpr auto plainTextMimeType = "text/plain"_L1;
static inline QAction *actionOfItem(const QStandardItem* item)
{
@@ -79,6 +55,7 @@ ActionModel::ActionModel(QWidget *parent ) :
headers += tr("Shortcut");
headers += tr("Checkable");
headers += tr("ToolTip");
+ headers += tr("MenuRole");
Q_ASSERT(NumColumns == headers.size());
setHorizontalHeaderLabels(headers);
}
@@ -139,14 +116,16 @@ QModelIndex ActionModel::addAction(QAction *action)
// Find the associated menus and toolbars, ignore toolbuttons
QWidgetList ActionModel::associatedWidgets(const QAction *action)
{
- QWidgetList rc = action->associatedWidgets();
- for (QWidgetList::iterator it = rc.begin(); it != rc.end(); )
- if (qobject_cast<const QMenu *>(*it) || qobject_cast<const QToolBar *>(*it)) {
- ++it;
- } else {
- it = rc.erase(it);
+ const QObjectList rc = action->associatedObjects();
+ QWidgetList result;
+ result.reserve(rc.size());
+ for (QObject *obj : rc) {
+ if (QWidget *w = qobject_cast<QWidget *>(obj)) {
+ if (qobject_cast<const QMenu *>(w) || qobject_cast<const QToolBar *>(w))
+ result.push_back(w);
}
- return rc;
+ }
+ return result;
}
// shortcut is a fake property, need to retrieve it via property sheet.
@@ -160,7 +139,7 @@ PropertySheetKeySequenceValue ActionModel::actionShortCut(QDesignerFormEditorInt
PropertySheetKeySequenceValue ActionModel::actionShortCut(const QDesignerPropertySheetExtension *sheet)
{
- const int index = sheet->indexOf(QStringLiteral("shortcut"));
+ const int index = sheet->indexOf(u"shortcut"_s);
if (index == -1)
return PropertySheetKeySequenceValue();
return qvariant_cast<PropertySheetKeySequenceValue>(sheet->property(index));
@@ -174,10 +153,8 @@ void ActionModel::setItems(QDesignerFormEditorInterface *core, QAction *action,
// Tooltip, mostly for icon view mode
QString firstTooltip = action->objectName();
const QString text = action->text();
- if (!text.isEmpty()) {
- firstTooltip += QLatin1Char('\n');
- firstTooltip += text;
- }
+ if (!text.isEmpty())
+ firstTooltip += u'\n' + text;
Q_ASSERT(sl.size() == NumColumns);
@@ -196,7 +173,7 @@ void ActionModel::setItems(QDesignerFormEditorInterface *core, QAction *action,
item->setCheckState(used ? Qt::Checked : Qt::Unchecked);
if (used) {
QString usedToolTip;
- const QString separator = QStringLiteral(", ");
+ const auto separator = ", "_L1;
const int count = associatedDesignerWidgets.size();
for (int i = 0; i < count; i++) {
if (i)
@@ -222,7 +199,11 @@ void ActionModel::setItems(QDesignerFormEditorInterface *core, QAction *action,
QString toolTip = action->toolTip();
item = sl[ToolTipColumn];
item->setToolTip(toolTip);
- item->setText(toolTip.replace(QLatin1Char('\n'), QLatin1Char(' ')));
+ item->setText(toolTip.replace(u'\n', u' '));
+ // menuRole
+ const auto menuRole = action->menuRole();
+ item = sl[MenuRoleColumn];
+ item->setText(QLatin1StringView(QMetaEnum::fromType<QAction::MenuRole>().valueToKey(menuRole)));
}
QMimeData *ActionModel::mimeData(const QModelIndexList &indexes ) const
@@ -240,7 +221,7 @@ QMimeData *ActionModel::mimeData(const QModelIndexList &indexes ) const
// Resource images are plain text. The drag needs to be restricted, however.
QStringList ActionModel::mimeTypes() const
{
- return QStringList(QLatin1String(plainTextMimeType));
+ return QStringList(plainTextMimeType);
}
QString ActionModel::actionName(int row) const
@@ -277,6 +258,16 @@ QAction *ActionModel::actionAt(const QModelIndex &index) const
return actionOfItem(i);
}
+QModelIndex ActionModel::indexOf(QAction *a) const
+{
+ for (int r = rowCount() - 1; r >= 0; --r) {
+ QStandardItem *stdItem = item(r, 0);
+ if (actionOfItem(stdItem) == a)
+ return indexFromItem(stdItem);
+ }
+ return {};
+}
+
// helpers
static bool handleImageDragEnterMoveEvent(QDropEvent *event)
@@ -564,6 +555,13 @@ void ActionView::clearSelection()
m_actionTreeView->selectionModel()->clearSelection();
}
+void ActionView::selectAction(QAction *a)
+{
+ const QModelIndex index = m_model->indexOf(a);
+ if (index.isValid())
+ setCurrentIndex(index);
+}
+
void ActionView::setCurrentIndex(const QModelIndex &index)
{
m_actionTreeView->setCurrentIndex(index);
@@ -615,7 +613,7 @@ ActionRepositoryMimeData::ActionRepositoryMimeData(const ActionList &al, Qt::Dro
QStringList ActionRepositoryMimeData::formats() const
{
- return QStringList(QLatin1String(actionMimeType));
+ return QStringList(actionMimeType);
}
QPixmap ActionRepositoryMimeData::actionDragPixmap(const QAction *action)
@@ -626,9 +624,9 @@ QPixmap ActionRepositoryMimeData::actionDragPixmap(const QAction *action)
if (!icon.isNull())
return icon.pixmap(QSize(22, 22));
- const QWidgetList &associatedWidgets = action->associatedWidgets();
- for (QWidget *w : associatedWidgets) {
- if (QToolButton *tb = qobject_cast<QToolButton *>(w))
+ const QObjectList associatedObjects = action->associatedObjects();
+ for (QObject *o : associatedObjects) {
+ if (QToolButton *tb = qobject_cast<QToolButton *>(o))
return tb->grab(QRect(0, 0, -1, -1));
}
diff --git a/src/designer/src/lib/shared/actionrepository_p.h b/src/designer/src/lib/shared/actionrepository_p.h
index 333093a09..bc31ccd55 100644
--- a/src/designer/src/lib/shared/actionrepository_p.h
+++ b/src/designer/src/lib/shared/actionrepository_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -64,7 +39,7 @@ class QDESIGNER_SHARED_EXPORT ActionModel: public QStandardItemModel
{
Q_OBJECT
public:
- enum Columns { NameColumn, UsedColumn, TextColumn, ShortCutColumn, CheckedColumn, ToolTipColumn, NumColumns };
+ enum Columns { NameColumn, UsedColumn, TextColumn, ShortCutColumn, CheckedColumn, ToolTipColumn, MenuRoleColumn, NumColumns };
enum { ActionRole = Qt::UserRole + 1000 };
explicit ActionModel(QWidget *parent = nullptr);
@@ -82,6 +57,7 @@ public:
QString actionName(int row) const;
QAction *actionAt(const QModelIndex &index) const;
+ QModelIndex indexOf(QAction *a) const;
QMimeData *mimeData(const QModelIndexList &indexes) const override;
QStringList mimeTypes() const override;
@@ -211,6 +187,7 @@ public slots:
void filter(const QString &text);
void selectAll();
void clearSelection();
+ void selectAction(QAction *a);
signals:
void contextMenuRequested(QContextMenuEvent *event, QAction *);
diff --git a/src/designer/src/lib/shared/codedialog.cpp b/src/designer/src/lib/shared/codedialog.cpp
index 34bc56196..f11a2ac9b 100644
--- a/src/designer/src/lib/shared/codedialog.cpp
+++ b/src/designer/src/lib/shared/codedialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "codedialog_p.h"
#include "qdesigner_utils_p.h"
@@ -46,6 +21,8 @@
#include <QtGui/qaction.h>
#include <QtGui/qevent.h>
+#include <QtGui/qfontdatabase.h>
+#include <QtGui/qfontmetrics.h>
#include <QtGui/qicon.h>
#include <QtCore/qdebug.h>
@@ -55,6 +32,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
// ----------------- CodeDialogPrivate
struct CodeDialog::CodeDialogPrivate {
@@ -77,18 +56,19 @@ CodeDialog::CodeDialog(QWidget *parent) :
QDialog(parent),
m_impl(new CodeDialogPrivate)
{
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
QVBoxLayout *vBoxLayout = new QVBoxLayout;
// Edit tool bar
QToolBar *toolBar = new QToolBar;
- const QIcon saveIcon = createIconSet(QStringLiteral("filesave.png"));
+ const QIcon saveIcon = createIconSet(QIcon::ThemeIcon::DocumentSave,
+ "filesave.png"_L1);
QAction *saveAction = toolBar->addAction(saveIcon, tr("Save..."));
connect(saveAction, &QAction::triggered, this, &CodeDialog::slotSaveAs);
#if QT_CONFIG(clipboard)
- const QIcon copyIcon = createIconSet(QStringLiteral("editcopy.png"));
+ const QIcon copyIcon = createIconSet(QIcon::ThemeIcon::EditCopy,
+ "editcopy.png"_L1);
QAction *copyAction = toolBar->addAction(copyIcon, tr("Copy All"));
connect(copyAction, &QAction::triggered, this, &CodeDialog::copyAll);
#endif
@@ -99,8 +79,11 @@ CodeDialog::CodeDialog(QWidget *parent) :
// Edit
m_impl->m_textEdit->setReadOnly(true);
+ const auto font = QFontDatabase::systemFont(QFontDatabase::SystemFont::FixedFont);
+ const int editorWidth = QFontMetrics(font, this).averageCharWidth() * 100;
+ m_impl->m_textEdit->setFont(font);
m_impl->m_textEdit->setMinimumSize(QSize(
- m_impl->m_findWidget->minimumSize().width(),
+ qMax(editorWidth, m_impl->m_findWidget->minimumSize().width()),
500));
vBoxLayout->addWidget(m_impl->m_textEdit);
@@ -162,11 +145,11 @@ bool CodeDialog::generateCode(const QDesignerFormWindowInterface *fw,
tempPattern += QDir::separator();
const QString fileName = fw->fileName();
if (fileName.isEmpty()) {
- tempPattern += QStringLiteral("designer");
+ tempPattern += "designer"_L1;
} else {
tempPattern += QFileInfo(fileName).baseName();
}
- tempPattern += QStringLiteral("XXXXXX.ui");
+ tempPattern += "XXXXXX.ui"_L1;
// Write to temp file
QTemporaryFile tempFormFile(tempPattern);
@@ -204,15 +187,15 @@ bool CodeDialog::showCodeDialog(const QDesignerFormWindowInterface *fw,
dialog->setAttribute(Qt::WA_DeleteOnClose);
dialog->setCode(code);
dialog->setFormFileName(fw->fileName());
- QString languageName;
+ QLatin1StringView languageName;
switch (language) {
case UicLanguage::Cpp:
- languageName = QLatin1String("C++");
- dialog->setMimeType(QLatin1String("text/x-chdr"));
+ languageName = "C++"_L1;
+ dialog->setMimeType(u"text/x-chdr"_s);
break;
case UicLanguage::Python:
- languageName = QLatin1String("Python");
- dialog->setMimeType(QLatin1String("text/x-python"));
+ languageName = "Python"_L1;
+ dialog->setMimeType(u"text/x-python"_s);
break;
}
dialog->setWindowTitle(tr("%1 - [%2 Code]").
@@ -236,8 +219,8 @@ void CodeDialog::slotSaveAs()
if (!uiFile.isEmpty()) {
QFileInfo uiFi(uiFile);
fileDialog.setDirectory(uiFi.absolutePath());
- fileDialog.selectFile(QLatin1String("ui_") + uiFi.baseName()
- + QLatin1Char('.') + suffix);
+ fileDialog.selectFile("ui_"_L1 + uiFi.baseName()
+ + '.'_L1 + suffix);
}
while (true) {
diff --git a/src/designer/src/lib/shared/codedialog_p.h b/src/designer/src/lib/shared/codedialog_p.h
index 37f798c4f..e68f48a24 100644
--- a/src/designer/src/lib/shared/codedialog_p.h
+++ b/src/designer/src/lib/shared/codedialog_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/connectionedit.cpp b/src/designer/src/lib/shared/connectionedit.cpp
index 2382e154a..d92ca00e2 100644
--- a/src/designer/src/lib/shared/connectionedit.cpp
+++ b/src/designer/src/lib/shared/connectionedit.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "connectionedit_p.h"
@@ -205,7 +180,7 @@ DeleteConnectionsCommand::DeleteConnectionsCommand(ConnectionEdit *edit,
void DeleteConnectionsCommand::redo()
{
- for (Connection *con : qAsConst(m_con_list)) {
+ for (Connection *con : std::as_const(m_con_list)) {
const int idx = edit()->indexOfConnection(con);
emit edit()->aboutToRemoveConnection(con);
Q_ASSERT(edit()->m_con_list.contains(con));
@@ -219,7 +194,7 @@ void DeleteConnectionsCommand::redo()
void DeleteConnectionsCommand::undo()
{
- for (Connection *con : qAsConst(m_con_list)) {
+ for (Connection *con : std::as_const(m_con_list)) {
Q_ASSERT(!edit()->m_con_list.contains(con));
emit edit()->aboutToAddConnection(edit()->m_con_list.size());
edit()->m_con_list.append(con);
@@ -633,7 +608,7 @@ void Connection::trimLine()
{
if (m_source == nullptr || m_source_pos == QPoint(-1, -1) || m_target_pos == QPoint(-1, -1))
return;
- int cnt = m_knee_list.size();
+ auto cnt = m_knee_list.size();
if (cnt < 2)
return;
@@ -722,7 +697,7 @@ QRegion Connection::region() const
{
QRegion result;
- for (int i = 0; i < m_knee_list.size() - 1; ++i)
+ for (qsizetype i = 0; i < m_knee_list.size() - 1; ++i)
result = result.united(lineRect(m_knee_list.at(i), m_knee_list.at(i + 1)));
if (!m_arrow_head.isEmpty()) {
@@ -755,7 +730,7 @@ void Connection::update(bool update_widgets) const
void Connection::paint(QPainter *p) const
{
- for (int i = 0; i < m_knee_list.size() - 1; ++i)
+ for (qsizetype i = 0; i < m_knee_list.size() - 1; ++i)
p->drawLine(m_knee_list.at(i), m_knee_list.at(i + 1));
if (!m_arrow_head.isEmpty()) {
@@ -787,7 +762,7 @@ QRect Connection::endPointRect(EndPoint::Type type) const
CETypes::LineDir Connection::labelDir(EndPoint::Type type) const
{
- const int cnt = m_knee_list.size();
+ const auto cnt = m_knee_list.size();
if (cnt < 2)
return RightDir;
@@ -807,7 +782,7 @@ CETypes::LineDir Connection::labelDir(EndPoint::Type type) const
QRect Connection::labelRect(EndPoint::Type type) const
{
- const int cnt = m_knee_list.size();
+ const auto cnt = m_knee_list.size();
if (cnt < 2)
return QRect();
const QString text = label(type);
@@ -985,7 +960,7 @@ void ConnectionEdit::updateBackground()
if (!m_enable_update_background)
return;
- for (Connection *c : qAsConst(m_con_list))
+ for (Connection *c : std::as_const(m_con_list))
c->updateVisibility();
updateLines();
@@ -1063,7 +1038,7 @@ void ConnectionEdit::paintEvent(QPaintEvent *e)
WidgetSet heavy_highlight_set, light_highlight_set;
- for (Connection *con : qAsConst(m_con_list)) {
+ for (Connection *con : std::as_const(m_con_list)) {
if (!con->isVisible())
continue;
@@ -1081,7 +1056,7 @@ void ConnectionEdit::paintEvent(QPaintEvent *e)
c.setAlpha(BG_ALPHA);
p.setBrush(c);
- for (QWidget *w : qAsConst(heavy_highlight_set)) {
+ for (QWidget *w : std::as_const(heavy_highlight_set)) {
p.drawRect(fixRect(widgetRect(w)));
light_highlight_set.remove(w);
}
@@ -1091,12 +1066,12 @@ void ConnectionEdit::paintEvent(QPaintEvent *e)
c.setAlpha(BG_ALPHA);
p.setBrush(c);
- for (QWidget *w : qAsConst(light_highlight_set))
+ for (QWidget *w : std::as_const(light_highlight_set))
p.drawRect(fixRect(widgetRect(w)));
p.setBrush(palette().color(QPalette::Base));
p.setPen(palette().color(QPalette::Text));
- for (Connection *con : qAsConst(m_con_list)) {
+ for (Connection *con : std::as_const(m_con_list)) {
if (con->isVisible()) {
paintLabel(&p, EndPoint::Source, con);
paintLabel(&p, EndPoint::Target, con);
@@ -1106,7 +1081,7 @@ void ConnectionEdit::paintEvent(QPaintEvent *e)
p.setPen(m_active_color);
p.setBrush(m_active_color);
- for (Connection *con : qAsConst(m_con_list)) {
+ for (Connection *con : std::as_const(m_con_list)) {
if (!selected(con) || !con->isVisible())
continue;
@@ -1358,9 +1333,9 @@ static ConnectionEdit::ConnectionSet findConnectionsOf(const ConnectionEdit::Con
{
ConnectionEdit::ConnectionSet rc;
- const ConnectionEdit::ConnectionList::const_iterator ccend = cl.constEnd();
+ const auto ccend = cl.cend();
for ( ; oi1 != oi2; ++oi1) {
- for (ConnectionEdit::ConnectionList::const_iterator cit = cl.constBegin(); cit != ccend; ++cit) {
+ for (auto cit = cl.constBegin(); cit != ccend; ++cit) {
Connection *con = *cit;
if (con->object(ConnectionEdit::EndPoint::Source) == *oi1 || con->object(ConnectionEdit::EndPoint::Target) == *oi1)
rc.insert(con, con);
@@ -1427,7 +1402,7 @@ bool ConnectionEdit::selected(const Connection *con) const
void ConnectionEdit::selectNone()
{
- for (Connection *con : qAsConst(m_sel_con_set))
+ for (Connection *con : std::as_const(m_sel_con_set))
con->update();
m_sel_con_set.clear();
@@ -1437,7 +1412,7 @@ void ConnectionEdit::selectAll()
{
if (m_sel_con_set.size() == m_con_list.size())
return;
- for (Connection *con : qAsConst(m_con_list))
+ for (Connection *con : std::as_const(m_con_list))
setSelected(con, true);
}
@@ -1516,7 +1491,7 @@ void ConnectionEdit::addConnection(Connection *con)
void ConnectionEdit::updateLines()
{
- for (Connection *con : qAsConst(m_con_list))
+ for (Connection *con : std::as_const(m_con_list))
con->checkWidgets();
}
diff --git a/src/designer/src/lib/shared/connectionedit_p.h b/src/designer/src/lib/shared/connectionedit_p.h
index ca4560fda..3cfce754b 100644
--- a/src/designer/src/lib/shared/connectionedit_p.h
+++ b/src/designer/src/lib/shared/connectionedit_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/csshighlighter.cpp b/src/designer/src/lib/shared/csshighlighter.cpp
index 115b77c17..d34e7e4de 100644
--- a/src/designer/src/lib/shared/csshighlighter.cpp
+++ b/src/designer/src/lib/shared/csshighlighter.cpp
@@ -1,39 +1,17 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "csshighlighter_p.h"
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
-CssHighlighter::CssHighlighter(QTextDocument *document)
-: QSyntaxHighlighter(document)
+CssHighlighter::CssHighlighter(const CssHighlightColors &colors,
+ QTextDocument *document)
+ : QSyntaxHighlighter(document), m_colors(colors)
{
}
@@ -53,7 +31,7 @@ void CssHighlighter::highlightBlock(const QString& text)
{ Comment, Comment, Comment, Comment, Comment, Comment, Comment, -1, MaybeCommentEnd } // MaybeCommentEnd
};
- int lastIndex = 0;
+ qsizetype lastIndex = 0;
bool lastWasSlash = false;
int state = previousBlockState(), save_state;
if (state == -1) {
@@ -65,8 +43,8 @@ void CssHighlighter::highlightBlock(const QString& text)
// The initial state is based on the precense of a : and the absense of a {.
// This is because Qt style sheets support both a full stylesheet as well as
// an inline form with just properties.
- state = save_state = (text.indexOf(QLatin1Char(':')) > -1 &&
- text.indexOf(QLatin1Char('{')) == -1) ? Property : Selector;
+ state = save_state = (text.indexOf(u':') > -1 &&
+ text.indexOf(u'{') == -1) ? Property : Selector;
} else {
save_state = state>>16;
state &= 0x00ff;
@@ -78,7 +56,7 @@ void CssHighlighter::highlightBlock(const QString& text)
state = save_state;
}
- for (int i = 0; i < text.length(); i++) {
+ for (qsizetype i = 0; i < text.size(); ++i) {
int token = ALNUM;
const QChar c = text.at(i);
const char a = c.toLatin1();
@@ -130,39 +108,39 @@ void CssHighlighter::highlightBlock(const QString& text)
}
}
- highlight(text, lastIndex, text.length() - lastIndex, state);
+ highlight(text, lastIndex, text.size() - lastIndex, state);
setCurrentBlockState(state + (save_state<<16));
}
void CssHighlighter::highlight(const QString &text, int start, int length, int state)
{
- if (start >= text.length() || length <= 0)
+ if (start >= text.size() || length <= 0)
return;
QTextCharFormat format;
switch (state) {
case Selector:
- setFormat(start, length, Qt::darkRed);
+ setFormat(start, length, m_colors.selector);
break;
case Property:
- setFormat(start, length, Qt::blue);
+ setFormat(start, length, m_colors.property);
break;
case Value:
- setFormat(start, length, Qt::black);
+ setFormat(start, length, m_colors.value);
break;
case Pseudo1:
- setFormat(start, length, Qt::darkRed);
+ setFormat(start, length, m_colors.pseudo1);
break;
case Pseudo2:
- setFormat(start, length, Qt::darkRed);
+ setFormat(start, length, m_colors.pseudo2);
break;
case Quote:
- setFormat(start, length, Qt::darkMagenta);
+ setFormat(start, length, m_colors.quote);
break;
case Comment:
case MaybeCommentEnd:
- format.setForeground(Qt::darkGreen);
+ format.setForeground(m_colors.comment);
setFormat(start, length, format);
break;
default:
diff --git a/src/designer/src/lib/shared/csshighlighter_p.h b/src/designer/src/lib/shared/csshighlighter_p.h
index 8af8cd337..bad7e9f7d 100644
--- a/src/designer/src/lib/shared/csshighlighter_p.h
+++ b/src/designer/src/lib/shared/csshighlighter_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -41,17 +16,30 @@
#define CSSHIGHLIGHTER_H
#include <QtGui/qsyntaxhighlighter.h>
+#include <QtGui/qcolor.h>
#include "shared_global_p.h"
QT_BEGIN_NAMESPACE
namespace qdesigner_internal {
+struct CssHighlightColors
+{
+ QColor selector;
+ QColor property;
+ QColor value;
+ QColor pseudo1;
+ QColor pseudo2;
+ QColor quote;
+ QColor comment;
+};
+
class QDESIGNER_SHARED_EXPORT CssHighlighter : public QSyntaxHighlighter
{
Q_OBJECT
public:
- explicit CssHighlighter(QTextDocument *document);
+ explicit CssHighlighter(const CssHighlightColors &colors,
+ QTextDocument *document);
protected:
void highlightBlock(const QString&) override;
@@ -60,6 +48,8 @@ protected:
private:
enum State { Selector, Property, Value, Pseudo, Pseudo1, Pseudo2, Quote,
MaybeComment, Comment, MaybeCommentEnd };
+
+ const CssHighlightColors m_colors;
};
} // namespace qdesigner_internal
diff --git a/src/designer/src/lib/shared/deviceprofile.cpp b/src/designer/src/lib/shared/deviceprofile.cpp
index fbe65abaf..25148b526 100644
--- a/src/designer/src/lib/shared/deviceprofile.cpp
+++ b/src/designer/src/lib/shared/deviceprofile.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "deviceprofile_p.h"
@@ -46,18 +21,24 @@
#include <QtCore/qxmlstream.h>
-static const char *dpiXPropertyC = "_q_customDpiX";
-static const char *dpiYPropertyC = "_q_customDpiY";
+static const char dpiXPropertyC[] = "_q_customDpiX";
+static const char dpiYPropertyC[] = "_q_customDpiY";
+
+QT_BEGIN_NAMESPACE
+
+using namespace Qt::StringLiterals;
+
+namespace qdesigner_internal {
// XML serialization
static const char *xmlVersionC="1.0";
static const char *rootElementC="deviceprofile";
-static const char *nameElementC = "name";
-static const char *fontFamilyElementC = "fontfamily";
-static const char *fontPointSizeElementC = "fontpointsize";
-static const char *dPIXElementC = "dpix";
-static const char *dPIYElementC = "dpiy";
-static const char *styleElementC = "style";
+static constexpr auto nameElementC = "name"_L1;
+static constexpr auto fontFamilyElementC = "fontfamily"_L1;
+static constexpr auto fontPointSizeElementC = "fontpointsize"_L1;
+static constexpr auto dPIXElementC = "dpix"_L1;
+static constexpr auto dPIYElementC = "dpiy"_L1;
+static constexpr auto styleElementC = "style"_L1;
/* DeviceProfile:
* For preview purposes (preview, widget box, new form dialog), the
@@ -69,10 +50,6 @@ static const char *styleElementC = "style";
* In addition, the widgetfactory maintains the system settings style
* and applies it when creating widgets. */
-QT_BEGIN_NAMESPACE
-
-namespace qdesigner_internal {
-
// ---------------- DeviceProfileData
class DeviceProfileData : public QSharedData {
public:
@@ -286,9 +263,9 @@ void DeviceProfile::apply(const QDesignerFormEditorInterface *core, QWidget *wid
}
}
-bool DeviceProfile::equals(const DeviceProfile& rhs) const
+bool comparesEqual(const DeviceProfile &lhs, const DeviceProfile &rhs) noexcept
{
- const DeviceProfileData &d = *m_d;
+ const DeviceProfileData &d = *lhs.m_d;
const DeviceProfileData &rhs_d = *rhs.m_d;
return d.m_fontPointSize == rhs_d.m_fontPointSize &&
d.m_dpiX == rhs_d.m_dpiX && d.m_dpiY == rhs_d.m_dpiY && d.m_fontFamily == rhs_d.m_fontFamily &&
@@ -307,20 +284,20 @@ QString DeviceProfile::toXml() const
const DeviceProfileData &d = *m_d;
QString rc;
QXmlStreamWriter writer(&rc);
- writer.writeStartDocument(QLatin1String(xmlVersionC));
- writer.writeStartElement(QLatin1String(rootElementC));
- writeElement(writer, QLatin1String(nameElementC), d.m_name);
+ writer.writeStartDocument(QLatin1StringView(xmlVersionC));
+ writer.writeStartElement(QLatin1StringView(rootElementC));
+ writeElement(writer, nameElementC, d.m_name);
if (!d.m_fontFamily.isEmpty())
- writeElement(writer, QLatin1String(fontFamilyElementC), d.m_fontFamily);
+ writeElement(writer, fontFamilyElementC, d.m_fontFamily);
if (d.m_fontPointSize >= 0)
- writeElement(writer, QLatin1String(fontPointSizeElementC), QString::number(d.m_fontPointSize));
+ writeElement(writer, fontPointSizeElementC, QString::number(d.m_fontPointSize));
if (d.m_dpiX > 0)
- writeElement(writer, QLatin1String(dPIXElementC), QString::number(d.m_dpiX));
+ writeElement(writer, dPIXElementC, QString::number(d.m_dpiX));
if (d.m_dpiY > 0)
- writeElement(writer, QLatin1String(dPIYElementC), QString::number(d.m_dpiY));
+ writeElement(writer, dPIYElementC, QString::number(d.m_dpiY));
if (!d.m_style.isEmpty())
- writeElement(writer, QLatin1String(styleElementC), d.m_style);
+ writeElement(writer, styleElementC, d.m_style);
writer.writeEndElement();
writer.writeEndDocument();
@@ -336,7 +313,7 @@ static ParseStage nextStage(ParseStage currentStage, QStringView startElement)
{
switch (currentStage) {
case ParseBeginning:
- if (startElement == QLatin1String(rootElementC))
+ if (startElement == QLatin1StringView(rootElementC))
return ParseWithinRoot;
break;
case ParseWithinRoot:
@@ -346,17 +323,17 @@ static ParseStage nextStage(ParseStage currentStage, QStringView startElement)
case ParseDPIX:
case ParseDPIY:
case ParseStyle:
- if (startElement == QLatin1String(nameElementC))
+ if (startElement == nameElementC)
return ParseName;
- if (startElement == QLatin1String(fontFamilyElementC))
+ if (startElement == fontFamilyElementC)
return ParseFontFamily;
- if (startElement == QLatin1String(fontPointSizeElementC))
+ if (startElement == fontPointSizeElementC)
return ParseFontPointSize;
- if (startElement == QLatin1String(dPIXElementC))
+ if (startElement == dPIXElementC)
return ParseDPIX;
- if (startElement == QLatin1String(dPIYElementC))
+ if (startElement == dPIYElementC)
return ParseDPIY;
- if (startElement == QLatin1String(styleElementC))
+ if (startElement == styleElementC)
return ParseStyle;
break;
case ParseError:
diff --git a/src/designer/src/lib/shared/deviceprofile_p.h b/src/designer/src/lib/shared/deviceprofile_p.h
index 60b9518c5..273a1a1a2 100644
--- a/src/designer/src/lib/shared/deviceprofile_p.h
+++ b/src/designer/src/lib/shared/deviceprofile_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -42,6 +17,7 @@
#include "shared_global_p.h"
+#include <QtCore/qcompare.h>
#include <QtCore/qstring.h>
#include <QtCore/qshareddata.h>
@@ -101,8 +77,6 @@ public:
static void systemResolution(int *dpiX, int *dpiY);
static void widgetResolution(const QWidget *w, int *dpiX, int *dpiY);
- bool equals(const DeviceProfile& rhs) const;
-
// Apply to form/preview (using font inheritance)
enum ApplyMode {
/* Pre-Apply to parent widget of form being edited: Apply font
@@ -123,16 +97,14 @@ public:
bool fromXml(const QString &xml, QString *errorMessage);
private:
+ friend QDESIGNER_SHARED_EXPORT bool comparesEqual(const DeviceProfile &lhs,
+ const DeviceProfile &rhs) noexcept;
+ Q_DECLARE_EQUALITY_COMPARABLE(DeviceProfile)
+
QSharedDataPointer<DeviceProfileData> m_d;
};
-inline bool operator==(const DeviceProfile &s1, const DeviceProfile &s2)
- { return s1.equals(s2); }
-inline bool operator!=(const DeviceProfile &s1, const DeviceProfile &s2)
- { return !s1.equals(s2); }
-
-}
-
+} // namespace qdesigner_internal
QT_END_NAMESPACE
diff --git a/src/designer/src/lib/shared/dialoggui.cpp b/src/designer/src/lib/shared/dialoggui.cpp
index 613a42143..168462ad3 100644
--- a/src/designer/src/lib/shared/dialoggui.cpp
+++ b/src/designer/src/lib/shared/dialoggui.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "dialoggui_p.h"
diff --git a/src/designer/src/lib/shared/dialoggui_p.h b/src/designer/src/lib/shared/dialoggui_p.h
index 4b5f2829f..a60c90494 100644
--- a/src/designer/src/lib/shared/dialoggui_p.h
+++ b/src/designer/src/lib/shared/dialoggui_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef DIALOGGUI
#define DIALOGGUI
diff --git a/src/designer/src/lib/shared/extensionfactory_p.h b/src/designer/src/lib/shared/extensionfactory_p.h
index b1afaf66a..7c34728b6 100644
--- a/src/designer/src/lib/shared/extensionfactory_p.h
+++ b/src/designer/src/lib/shared/extensionfactory_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/formlayoutmenu.cpp b/src/designer/src/lib/shared/formlayoutmenu.cpp
index f4b9255ff..0c7313770 100644
--- a/src/designer/src/lib/shared/formlayoutmenu.cpp
+++ b/src/designer/src/lib/shared/formlayoutmenu.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "formlayoutmenu_p.h"
#include "layoutinfo_p.h"
@@ -56,14 +31,16 @@
#include <QtCore/qhash.h>
#include <QtCore/qdebug.h>
-static const char *buddyPropertyC = "buddy";
+QT_BEGIN_NAMESPACE
+
+using namespace Qt::StringLiterals;
+
+static constexpr auto buddyPropertyC = "buddy"_L1;
static const char *fieldWidgetBaseClasses[] = {
"QLineEdit", "QComboBox", "QSpinBox", "QDoubleSpinBox", "QCheckBox",
"QDateEdit", "QTimeEdit", "QDateTimeEdit", "QDial", "QWidget"
};
-QT_BEGIN_NAMESPACE
-
namespace qdesigner_internal {
// Struct that describes a row of controls (descriptive label and control) to
@@ -118,7 +95,7 @@ private:
// Check for buddy marker in string
const QRegularExpression m_buddyMarkerRegexp;
- Ui::FormLayoutRowDialog m_ui;
+ QT_PREPEND_NAMESPACE(Ui)::FormLayoutRowDialog m_ui;
bool m_labelNameEdited;
bool m_fieldNameEdited;
bool m_buddyClicked;
@@ -127,19 +104,18 @@ private:
FormLayoutRowDialog::FormLayoutRowDialog(QDesignerFormEditorInterface *core,
QWidget *parent) :
QDialog(parent),
- m_buddyMarkerRegexp(QStringLiteral("\\&[^&]")),
+ m_buddyMarkerRegexp(u"\\&[^&]"_s),
m_labelNameEdited(false),
m_fieldNameEdited(false),
m_buddyClicked(false)
{
Q_ASSERT(m_buddyMarkerRegexp.isValid());
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
setModal(true);
m_ui.setupUi(this);
connect(m_ui.labelTextLineEdit, &QLineEdit::textEdited, this, &FormLayoutRowDialog::labelTextEdited);
- QRegularExpressionValidator *nameValidator = new QRegularExpressionValidator(QRegularExpression(QStringLiteral("^[a-zA-Z0-9_]+$")), this);
+ auto *nameValidator = new QRegularExpressionValidator(QRegularExpression(u"^[a-zA-Z0-9_]+$"_s), this);
Q_ASSERT(nameValidator->regularExpression().isValid());
m_ui.labelNameLineEdit->setValidator(nameValidator);
@@ -240,11 +216,11 @@ void FormLayoutRowDialog::labelTextEdited(const QString &text)
// "namespace::QLineEdit"->"LineEdit"
static inline QString postFixFromClassName(QString className)
{
- const int index = className.lastIndexOf(QStringLiteral("::"));
+ const int index = className.lastIndexOf("::"_L1);
if (index != -1)
className.remove(0, index + 2);
if (className.size() > 2)
- if (className.at(0) == QLatin1Char('Q') || className.at(0) == QLatin1Char('K'))
+ if (className.at(0) == u'Q' || className.at(0) == u'K')
if (className.at(1).isUpper())
className.remove(0, 1);
return className;
@@ -290,10 +266,8 @@ static inline PrefixCharacterKind prefixCharacterKind(const QChar &c)
static QString prefixFromLabel(const QString &prefix)
{
QString rc;
- const int length = prefix.size();
bool lastWasAcceptable = false;
- for (int i = 0 ; i < length; i++) {
- const QChar c = prefix.at(i);
+ for (const QChar &c : prefix) {
const PrefixCharacterKind kind = prefixCharacterKind(c);
const bool acceptable = kind != PC_Invalid;
if (acceptable) {
@@ -323,7 +297,7 @@ void FormLayoutRowDialog::updateObjectNames(bool updateLabel, bool updateField)
const QString prefix = prefixFromLabel(labelText());
// Set names
if (doUpdateLabel)
- m_ui.labelNameLineEdit->setText(prefix + QStringLiteral("Label"));
+ m_ui.labelNameLineEdit->setText(prefix + "Label"_L1);
if (doUpdateField)
m_ui.fieldNameLineEdit->setText(prefix + postFixFromClassName(fieldClass()));
}
@@ -356,19 +330,16 @@ void FormLayoutRowDialog::buddyClicked()
* from them ("QLineEdit", "CustomLineEdit", "QComboBox"...). */
QStringList FormLayoutRowDialog::fieldWidgetClasses(QDesignerFormEditorInterface *core)
{
- // Base class -> custom widgets map
- typedef QMultiHash<QString, QString> ClassMap;
-
static QStringList rc;
if (rc.isEmpty()) {
// Turn known base classes into list
QStringList baseClasses;
for (auto fw : fieldWidgetBaseClasses)
- baseClasses.append(QLatin1String(fw));
+ baseClasses.append(QLatin1StringView(fw));
// Scan for custom widgets that inherit them and store them in a
// multimap of base class->custom widgets unless we have a language
// extension installed which might do funny things with custom widgets.
- ClassMap customClassMap;
+ QMultiHash<QString, QString> customClassMap; // Base class -> custom widgets map
if (qt_extension<QDesignerLanguageExtension *>(core->extensionManager(), core) == nullptr) {
const QDesignerWidgetDataBaseInterface *wdb = core->widgetDataBase();
const int wdbCount = wdb->count();
@@ -405,23 +376,23 @@ static QFormLayout *managedFormLayout(const QDesignerFormEditorInterface *core,
// Create the widgets of a control row and apply text properties contained
// in the struct, called by addFormLayoutRow()
-static QPair<QWidget *,QWidget *>
+static std::pair<QWidget *,QWidget *>
createWidgets(const FormLayoutRow &row, QWidget *parent,
QDesignerFormWindowInterface *formWindow)
{
QDesignerFormEditorInterface *core = formWindow->core();
QDesignerWidgetFactoryInterface *wf = core->widgetFactory();
- QPair<QWidget *,QWidget *> rc = QPair<QWidget *,QWidget *>(wf->createWidget(QStringLiteral("QLabel"), parent),
- wf->createWidget(row.fieldClassName, parent));
+ std::pair<QWidget *,QWidget *> rc{wf->createWidget(u"QLabel"_s, parent),
+ wf->createWidget(row.fieldClassName, parent)};
// Set up properties of the label
- const QString objectNameProperty = QStringLiteral("objectName");
+ const QString objectNameProperty = u"objectName"_s;
QDesignerPropertySheetExtension *labelSheet = qt_extension<QDesignerPropertySheetExtension*>(core->extensionManager(), rc.first);
int nameIndex = labelSheet->indexOf(objectNameProperty);
labelSheet->setProperty(nameIndex, QVariant::fromValue(PropertySheetStringValue(row.labelName)));
labelSheet->setChanged(nameIndex, true);
formWindow->ensureUniqueObjectName(rc.first);
- const int textIndex = labelSheet->indexOf(QStringLiteral("text"));
+ const int textIndex = labelSheet->indexOf(u"text"_s);
labelSheet->setProperty(textIndex, QVariant::fromValue(PropertySheetStringValue(row.labelText)));
labelSheet->setChanged(textIndex, true);
// Set up properties of the control
@@ -445,7 +416,7 @@ static void addFormLayoutRow(const FormLayoutRow &formLayoutRow, int row, QWidge
undoStack->beginMacro(macroName);
// Create a list of widget insertion commands and pass them a cell position
- const QPair<QWidget *,QWidget *> widgetPair = createWidgets(formLayoutRow, w, formWindow);
+ const auto widgetPair = createWidgets(formLayoutRow, w, formWindow);
InsertWidgetCommand *labelCmd = new InsertWidgetCommand(formWindow);
labelCmd->init(widgetPair.first, false, row, 0);
@@ -455,7 +426,7 @@ static void addFormLayoutRow(const FormLayoutRow &formLayoutRow, int row, QWidge
undoStack->push(controlCmd);
if (formLayoutRow.buddy) {
SetPropertyCommand *buddyCommand = new SetPropertyCommand(formWindow);
- buddyCommand->init(widgetPair.first, QLatin1String(buddyPropertyC), widgetPair.second->objectName());
+ buddyCommand->init(widgetPair.first, buddyPropertyC, widgetPair.second->objectName());
undoStack->push(buddyCommand);
}
undoStack->endMacro();
diff --git a/src/designer/src/lib/shared/formlayoutmenu_p.h b/src/designer/src/lib/shared/formlayoutmenu_p.h
index d4b56ac96..3f4bac070 100644
--- a/src/designer/src/lib/shared/formlayoutmenu_p.h
+++ b/src/designer/src/lib/shared/formlayoutmenu_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef FORMLAYOUTMENU
#define FORMLAYOUTMENU
diff --git a/src/designer/src/lib/shared/formwindowbase.cpp b/src/designer/src/lib/shared/formwindowbase.cpp
index 8a126c1a1..17dde0409 100644
--- a/src/designer/src/lib/shared/formwindowbase.cpp
+++ b/src/designer/src/lib/shared/formwindowbase.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "formwindowbase_p.h"
#include "connectionedit_p.h"
@@ -60,12 +35,15 @@
#include <QtGui/qaction.h>
#include <QtCore/qdebug.h>
+#include <QtCore/qhash.h>
#include <QtCore/qlist.h>
#include <QtCore/qset.h>
#include <QtCore/qtimer.h>
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
class FormWindowBasePrivate {
@@ -80,8 +58,8 @@ public:
DesignerPixmapCache *m_pixmapCache;
DesignerIconCache *m_iconCache;
QtResourceSet *m_resourceSet;
- QMap<QDesignerPropertySheet *, QMap<int, bool> > m_reloadableResources; // bool is dummy, QMap used as QSet
- QMap<QDesignerPropertySheet *, QObject *> m_reloadablePropertySheets;
+ QHash<QDesignerPropertySheet *, QSet<int>> m_reloadableResources;
+ QHash<QDesignerPropertySheet *, QObject *> m_reloadablePropertySheets;
const DeviceProfile m_deviceProfile;
FormWindowBase::LineTerminatorMode m_lineTerminatorMode;
FormWindowBase::ResourceFileSaveMode m_saveResourcesBehaviour;
@@ -157,13 +135,13 @@ void FormWindowBase::setResourceSet(QtResourceSet *resourceSet)
void FormWindowBase::addReloadableProperty(QDesignerPropertySheet *sheet, int index)
{
connectSheet(sheet);
- m_d->m_reloadableResources[sheet][index] = true;
+ m_d->m_reloadableResources[sheet].insert(index);
}
void FormWindowBase::removeReloadableProperty(QDesignerPropertySheet *sheet, int index)
{
m_d->m_reloadableResources[sheet].remove(index);
- if (!m_d->m_reloadableResources[sheet].count()) {
+ if (m_d->m_reloadableResources[sheet].isEmpty()) {
m_d->m_reloadableResources.remove(sheet);
disconnectSheet(sheet);
}
@@ -229,14 +207,13 @@ void FormWindowBase::reloadProperties()
iconCache()->clear();
for (auto it = m_d->m_reloadableResources.cbegin(), end = m_d->m_reloadableResources.cend(); it != end; ++it) {
QDesignerPropertySheet *sheet = it.key();
- for (auto jt = it.value().begin(), end = it.value().end(); jt != end; ++jt) {
- const int index = jt.key();
+ for (int index : it.value()) {
const QVariant newValue = sheet->property(index);
- if (qobject_cast<QLabel *>(sheet->object()) && sheet->propertyName(index) == QStringLiteral("text")) {
+ if (qobject_cast<QLabel *>(sheet->object()) && sheet->propertyName(index) == "text"_L1) {
const PropertySheetStringValue newString = qvariant_cast<PropertySheetStringValue>(newValue);
// optimize a bit, reset only if the text value might contain a reference to qt resources
// (however reloading of icons other than taken from resources might not work here)
- if (newString.value().contains(QStringLiteral(":/"))) {
+ if (newString.value().contains(":/"_L1)) {
const QVariant resetValue = QVariant::fromValue(PropertySheetStringValue());
sheet->setProperty(index, resetValue);
}
@@ -246,7 +223,7 @@ void FormWindowBase::reloadProperties()
if (QTabWidget *tabWidget = qobject_cast<QTabWidget *>(sheet->object())) {
const int count = tabWidget->count();
const int current = tabWidget->currentIndex();
- const QString currentTabIcon = QStringLiteral("currentTabIcon");
+ const QString currentTabIcon = u"currentTabIcon"_s;
for (int i = 0; i < count; i++) {
tabWidget->setCurrentIndex(i);
const int index = sheet->indexOf(currentTabIcon);
@@ -256,7 +233,7 @@ void FormWindowBase::reloadProperties()
} else if (QToolBox *toolBox = qobject_cast<QToolBox *>(sheet->object())) {
const int count = toolBox->count();
const int current = toolBox->currentIndex();
- const QString currentItemIcon = QStringLiteral("currentItemIcon");
+ const QString currentItemIcon = u"currentItemIcon"_s;
for (int i = 0; i < count; i++) {
toolBox->setCurrentIndex(i);
const int index = sheet->indexOf(currentItemIcon);
@@ -265,7 +242,7 @@ void FormWindowBase::reloadProperties()
toolBox->setCurrentIndex(current);
}
}
- for (QObject *object : qAsConst(m_d->m_reloadablePropertySheets)) {
+ for (QObject *object : std::as_const(m_d->m_reloadablePropertySheets)) {
reloadIconResources(iconCache(), object);
}
}
@@ -317,10 +294,8 @@ static void recursiveUpdate(QWidget *w)
{
w->update();
- const QObjectList &l = w->children();
- const QObjectList::const_iterator cend = l.constEnd();
- for (QObjectList::const_iterator it = l.constBegin(); it != cend; ++it) {
- if (QWidget *w = qobject_cast<QWidget*>(*it))
+ for (auto *child : w->children()) {
+ if (QWidget *w = qobject_cast<QWidget*>(child))
recursiveUpdate(w);
}
}
@@ -451,7 +426,7 @@ void FormWindowBase::deleteWidgetList(const QWidgetList &widget_list)
tr("Delete '%1'").arg(widget_list.constFirst()->objectName()) : tr("Delete");
commandHistory()->beginMacro(description);
- for (QWidget *w : qAsConst(widget_list)) {
+ for (QWidget *w : std::as_const(widget_list)) {
emit widgetRemoved(w);
DeleteWidgetCommand *cmd = new DeleteWidgetCommand(this);
cmd->init(w);
@@ -468,7 +443,7 @@ QMenu *FormWindowBase::createExtensionTaskMenu(QDesignerFormWindowInterface *fw,
QExtensionManager *em = fw->core()->extensionManager();
if (const QDesignerTaskMenuExtension *extTaskMenu = qt_extension<QDesignerTaskMenuExtension*>(em, o))
actions += extTaskMenu->taskActions();
- if (const QDesignerTaskMenuExtension *intTaskMenu = qobject_cast<QDesignerTaskMenuExtension *>(em->extension(o, QStringLiteral("QDesignerInternalTaskMenuExtension")))) {
+ if (const auto *intTaskMenu = qobject_cast<QDesignerTaskMenuExtension *>(em->extension(o, u"QDesignerInternalTaskMenuExtension"_s))) {
if (!actions.isEmpty()) {
QAction *a = new QAction(fw);
a->setSeparator(true);
@@ -484,9 +459,8 @@ QMenu *FormWindowBase::createExtensionTaskMenu(QDesignerFormWindowInterface *fw,
actions.push_back(a);
}
QMenu *rc = new QMenu;
- const ActionList::const_iterator cend = actions.constEnd();
- for (ActionList::const_iterator it = actions.constBegin(); it != cend; ++it)
- rc->addAction(*it);
+ for (auto *a : std::as_const(actions))
+ rc->addAction(a);
return rc;
}
diff --git a/src/designer/src/lib/shared/formwindowbase_p.h b/src/designer/src/lib/shared/formwindowbase_p.h
index b240aa521..77fd7b8c8 100644
--- a/src/designer/src/lib/shared/formwindowbase_p.h
+++ b/src/designer/src/lib/shared/formwindowbase_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/grid.cpp b/src/designer/src/lib/shared/grid.cpp
index 9f9ff7d65..f4906a113 100644
--- a/src/designer/src/lib/shared/grid.cpp
+++ b/src/designer/src/lib/shared/grid.cpp
@@ -1,35 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "grid_p.h"
#include <QtCore/qlist.h>
#include <QtCore/qstring.h>
+#include <QtCore/qvariant.h>
+#include <QtCore/qmap.h>
#include <QtGui/qevent.h>
#include <QtGui/qpainter.h>
@@ -57,7 +34,7 @@ template <class T>
// Obtain a value form QVariantMap
template <class T>
static inline bool valueFromVariantMap(const QVariantMap &v, const QString &key, T &value) {
- const QVariantMap::const_iterator it = v.constFind(key);
+ const auto it = v.constFind(key);
const bool found = it != v.constEnd();
if (found)
value = qvariant_cast<T>(it.value());
@@ -79,11 +56,11 @@ Grid::Grid() :
bool Grid::fromVariantMap(const QVariantMap& vm)
{
Grid grid;
- bool anyData = valueFromVariantMap(vm, QLatin1String(KEY_VISIBLE), grid.m_visible);
- anyData |= valueFromVariantMap(vm, QLatin1String(KEY_SNAPX), grid.m_snapX);
- anyData |= valueFromVariantMap(vm, QLatin1String(KEY_SNAPY), grid.m_snapY);
- anyData |= valueFromVariantMap(vm, QLatin1String(KEY_DELTAX), grid.m_deltaX);
- anyData |= valueFromVariantMap(vm, QLatin1String(KEY_DELTAY), grid.m_deltaY);
+ bool anyData = valueFromVariantMap(vm, QLatin1StringView(KEY_VISIBLE), grid.m_visible);
+ anyData |= valueFromVariantMap(vm, QLatin1StringView(KEY_SNAPX), grid.m_snapX);
+ anyData |= valueFromVariantMap(vm, QLatin1StringView(KEY_SNAPY), grid.m_snapY);
+ anyData |= valueFromVariantMap(vm, QLatin1StringView(KEY_DELTAX), grid.m_deltaX);
+ anyData |= valueFromVariantMap(vm, QLatin1StringView(KEY_DELTAY), grid.m_deltaY);
if (!anyData)
return false;
if (grid.m_deltaX == 0 || grid.m_deltaY == 0) {
@@ -103,11 +80,11 @@ QVariantMap Grid::toVariantMap(bool forceKeys) const
void Grid::addToVariantMap(QVariantMap& vm, bool forceKeys) const
{
- valueToVariantMap(m_visible, defaultVisible, QLatin1String(KEY_VISIBLE), vm, forceKeys);
- valueToVariantMap(m_snapX, defaultSnap, QLatin1String(KEY_SNAPX), vm, forceKeys);
- valueToVariantMap(m_snapY, defaultSnap, QLatin1String(KEY_SNAPY), vm, forceKeys);
- valueToVariantMap(m_deltaX, DEFAULT_GRID, QLatin1String(KEY_DELTAX), vm, forceKeys);
- valueToVariantMap(m_deltaY, DEFAULT_GRID, QLatin1String(KEY_DELTAY), vm, forceKeys);
+ valueToVariantMap(m_visible, defaultVisible, QLatin1StringView(KEY_VISIBLE), vm, forceKeys);
+ valueToVariantMap(m_snapX, defaultSnap, QLatin1StringView(KEY_SNAPX), vm, forceKeys);
+ valueToVariantMap(m_snapY, defaultSnap, QLatin1StringView(KEY_SNAPY), vm, forceKeys);
+ valueToVariantMap(m_deltaX, DEFAULT_GRID, QLatin1StringView(KEY_DELTAX), vm, forceKeys);
+ valueToVariantMap(m_deltaY, DEFAULT_GRID, QLatin1StringView(KEY_DELTAY), vm, forceKeys);
}
void Grid::paint(QWidget *widget, QPaintEvent *e) const
@@ -135,7 +112,7 @@ void Grid::paint(QPainter &p, const QWidget *widget, QPaintEvent *e) const
points.reserve((yend - ystart) / m_deltaY + 1);
for (int y = ystart; y <= yend; y += m_deltaY)
points.push_back(QPointF(x, y));
- p.drawPoints( &(*points.begin()), points.count());
+ p.drawPoints( &(*points.begin()), points.size());
points.clear();
}
}
@@ -170,14 +147,6 @@ int Grid::widgetHandleAdjustY(int y) const
return m_snapY ? (y / m_deltaY) * m_deltaY + 1 : y;
}
-bool Grid::equals(const Grid &rhs) const
-{
- return m_visible == rhs.m_visible &&
- m_snapX == rhs.m_snapX &&
- m_snapY == rhs.m_snapY &&
- m_deltaX == rhs.m_deltaX &&
- m_deltaY == rhs.m_deltaY;
-}
}
QT_END_NAMESPACE
diff --git a/src/designer/src/lib/shared/grid_p.h b/src/designer/src/lib/shared/grid_p.h
index ca80eba03..606732884 100644
--- a/src/designer/src/lib/shared/grid_p.h
+++ b/src/designer/src/lib/shared/grid_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -42,6 +17,7 @@
#include "shared_global_p.h"
+#include <QtCore/qcompare.h>
#include <QtCore/qvariant.h>
QT_BEGIN_NAMESPACE
@@ -86,11 +62,15 @@ public:
int widgetHandleAdjustX(int x) const;
int widgetHandleAdjustY(int y) const;
- inline bool operator==(const Grid &rhs) const { return equals(rhs); }
- inline bool operator!=(const Grid &rhs) const { return !equals(rhs); }
-
private:
- bool equals(const Grid &rhs) const;
+ friend bool comparesEqual(const Grid &lhs, const Grid &rhs) noexcept
+ {
+ return lhs.m_visible == rhs.m_visible
+ && lhs.m_snapX == rhs.m_snapX && lhs.m_snapY == rhs.m_snapY
+ && lhs.m_deltaX == rhs.m_deltaX && lhs.m_deltaY == rhs.m_deltaY;
+ }
+ Q_DECLARE_EQUALITY_COMPARABLE(Grid)
+
int snapValue(int value, int grid) const;
bool m_visible;
bool m_snapX;
diff --git a/src/designer/src/lib/shared/gridpanel.cpp b/src/designer/src/lib/shared/gridpanel.cpp
index 80485d0bc..645c79935 100644
--- a/src/designer/src/lib/shared/gridpanel.cpp
+++ b/src/designer/src/lib/shared/gridpanel.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "gridpanel_p.h"
#include "ui_gridpanel.h"
diff --git a/src/designer/src/lib/shared/gridpanel_p.h b/src/designer/src/lib/shared/gridpanel_p.h
index c468caaf8..000a250ad 100644
--- a/src/designer/src/lib/shared/gridpanel_p.h
+++ b/src/designer/src/lib/shared/gridpanel_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/htmlhighlighter.cpp b/src/designer/src/lib/shared/htmlhighlighter.cpp
index a3b7b3391..59e2a5efa 100644
--- a/src/designer/src/lib/shared/htmlhighlighter.cpp
+++ b/src/designer/src/lib/shared/htmlhighlighter.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QtCore/qtextstream.h>
#include <QtWidgets/qtextedit.h>
@@ -33,6 +8,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
HtmlHighlighter::HtmlHighlighter(QTextEdit *textEdit)
@@ -71,23 +48,13 @@ void HtmlHighlighter::setFormatFor(Construct construct,
void HtmlHighlighter::highlightBlock(const QString &text)
{
- static const QLatin1Char tab = QLatin1Char('\t');
- static const QLatin1Char space = QLatin1Char(' ');
- static const QLatin1Char amp = QLatin1Char('&');
- static const QLatin1Char startTag = QLatin1Char('<');
- static const QLatin1Char endTag = QLatin1Char('>');
- static const QLatin1Char quot = QLatin1Char('"');
- static const QLatin1Char apos = QLatin1Char('\'');
- static const QLatin1Char semicolon = QLatin1Char(';');
- static const QLatin1Char equals = QLatin1Char('=');
- static const QLatin1String startComment("<!--");
- static const QLatin1String endComment("-->");
- static const QLatin1String endElement("/>");
+ static const QChar tab = u'\t';
+ static const QChar space = u' ';
int state = previousBlockState();
- int len = text.length();
- int start = 0;
- int pos = 0;
+ qsizetype len = text.size();
+ qsizetype start = 0;
+ qsizetype pos = 0;
while (pos < len) {
switch (state) {
@@ -95,18 +62,19 @@ void HtmlHighlighter::highlightBlock(const QString &text)
default:
while (pos < len) {
QChar ch = text.at(pos);
- if (ch == startTag) {
- if (text.mid(pos, 4) == startComment) {
+ if (ch == u'<') {
+ if (QStringView{text}.sliced(pos).startsWith("<!--"_L1)) {
state = InComment;
} else {
state = InTag;
start = pos;
while (pos < len && text.at(pos) != space
- && text.at(pos) != endTag
+ && text.at(pos) != u'>'
&& text.at(pos) != tab
- && text.mid(pos, 2) != endElement)
+ && !QStringView{text}.sliced(pos).startsWith("/>"_L1)) {
++pos;
- if (text.mid(pos, 2) == endElement)
+ }
+ if (QStringView{text}.sliced(pos).startsWith("/>"_L1))
++pos;
setFormat(start, pos - start,
m_formats[Tag]);
@@ -114,9 +82,9 @@ void HtmlHighlighter::highlightBlock(const QString &text)
}
break;
}
- if (ch == amp) {
+ if (ch == u'&') {
start = pos;
- while (pos < len && text.at(pos++) != semicolon)
+ while (pos < len && text.at(pos++) != u';')
;
setFormat(start, pos - start,
m_formats[Entity]);
@@ -129,7 +97,7 @@ void HtmlHighlighter::highlightBlock(const QString &text)
case InComment:
start = pos;
for ( ; pos < len; ++pos) {
- if (text.mid(pos, 3) == endComment) {
+ if (QStringView{text}.sliced(pos).startsWith("-->"_L1)) {
pos += 3;
state = NormalState;
break;
@@ -143,14 +111,14 @@ void HtmlHighlighter::highlightBlock(const QString &text)
QChar ch = text.at(pos);
if (quote.isNull()) {
start = pos;
- if (ch == apos || ch == quot) {
+ if (ch == '\''_L1 || ch == u'"') {
quote = ch;
- } else if (ch == endTag) {
+ } else if (ch == u'>') {
++pos;
setFormat(start, pos - start, m_formats[Tag]);
state = NormalState;
break;
- } else if (text.mid(pos, 2) == endElement) {
+ } else if (QStringView{text}.sliced(pos).startsWith("/>"_L1)) {
pos += 2;
setFormat(start, pos - start, m_formats[Tag]);
state = NormalState;
@@ -161,7 +129,7 @@ void HtmlHighlighter::highlightBlock(const QString &text)
++pos;
while (pos < len && text.at(pos) != space
&& text.at(pos) != tab
- && text.at(pos) != equals)
+ && text.at(pos) != u'=')
++pos;
setFormat(start, pos - start, m_formats[Attribute]);
start = pos;
diff --git a/src/designer/src/lib/shared/htmlhighlighter_p.h b/src/designer/src/lib/shared/htmlhighlighter_p.h
index e63186166..e86bfce97 100644
--- a/src/designer/src/lib/shared/htmlhighlighter_p.h
+++ b/src/designer/src/lib/shared/htmlhighlighter_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/icon-naming-spec.txt b/src/designer/src/lib/shared/icon-naming-spec.txt
new file mode 100644
index 000000000..e9b854769
--- /dev/null
+++ b/src/designer/src/lib/shared/icon-naming-spec.txt
@@ -0,0 +1,309 @@
+# https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html
+
+# Table 2. Standard Action Icons
+address-book-new
+application-exit
+appointment-new
+call-start
+call-stop
+contact-new
+document-new
+document-open
+document-open-recent
+document-page-setup
+document-print
+document-print-preview
+document-properties
+document-revert
+document-save
+document-save-as
+document-send
+edit-clear
+edit-copy
+edit-cut
+edit-delete
+edit-find
+edit-find-replace
+edit-paste
+edit-redo
+edit-select-all
+edit-undo
+folder-new
+format-indent-less
+format-indent-more
+format-justify-center
+format-justify-fill
+format-justify-left
+format-justify-right
+format-text-direction-ltr
+format-text-direction-rtl
+format-text-bold
+format-text-italic
+format-text-underline
+format-text-strikethrough
+go-bottom
+go-down
+go-first
+go-home
+go-jump
+go-last
+go-next
+go-previous
+go-top
+go-up
+help-about
+help-contents
+help-faq
+insert-image
+insert-link
+insert-object
+insert-text
+list-add
+list-remove
+mail-forward
+mail-mark-important
+mail-mark-junk
+mail-mark-notjunk
+mail-mark-read
+mail-mark-unread
+mail-message-new
+mail-reply-all
+mail-reply-sender
+mail-send
+mail-send-receive
+media-eject
+media-playback-pause
+media-playback-start
+media-playback-stop
+media-record
+media-seek-backward
+media-seek-forward
+media-skip-backward
+media-skip-forward
+object-flip-horizontal
+object-flip-vertical
+object-rotate-left
+object-rotate-right
+process-stop
+system-lock-screen
+system-log-out
+system-run
+system-search
+system-reboot
+system-shutdown
+tools-check-spelling
+view-fullscreen
+view-refresh
+view-restore
+view-sort-ascending
+view-sort-descending
+window-close
+window-new
+zoom-fit-best
+zoom-in
+zoom-original
+zoom-out
+
+# Table 3. Standard Animation Icons
+process-working
+
+# Table 4. Standard Application Icons
+accessories-calculator
+accessories-character-map
+accessories-dictionary
+accessories-text-editor
+help-browser
+multimedia-volume-control
+preferences-desktop-accessibility
+preferences-desktop-font
+preferences-desktop-keyboard
+preferences-desktop-locale
+preferences-desktop-multimedia
+preferences-desktop-screensaver
+preferences-desktop-theme
+preferences-desktop-wallpaper
+system-file-manager
+system-software-install
+system-software-update
+utilities-system-monitor
+utilities-terminal
+
+# Table 5. Standard Category Icons
+applications-accessories
+applications-development
+applications-engineering
+applications-games
+applications-graphics
+applications-internet
+applications-multimedia
+applications-office
+applications-other
+applications-science
+applications-system
+applications-utilities
+preferences-desktop
+preferences-desktop-peripherals
+preferences-desktop-personal
+preferences-other
+preferences-system
+preferences-system-network
+system-help
+
+# Table 6. Standard Device Icons
+audio-card
+audio-input-microphone
+battery
+camera-photo
+camera-video
+camera-web
+computer
+drive-harddisk
+drive-optical
+drive-removable-media
+input-gaming
+input-keyboard
+input-mouse
+input-tablet
+media-flash
+media-floppy
+media-optical
+media-tape
+modem
+multimedia-player
+network-wired
+network-wireless
+pda
+phone
+printer
+scanner
+video-display
+
+# Table 7. Standard Emblem Icons
+emblem-default
+emblem-documents
+emblem-downloads
+emblem-favorite
+emblem-important
+emblem-mail
+emblem-photos
+emblem-readonly
+emblem-shared
+emblem-symbolic-link
+emblem-synchronized
+emblem-system
+emblem-unreadable
+
+# Table 8. Standard Emotion Icons
+face-angel
+face-angry
+face-cool
+face-crying
+face-devilish
+face-embarrassed
+face-kiss
+face-laugh
+face-monkey
+face-plain
+face-raspberry
+face-sad
+face-sick
+face-smile
+face-smile-big
+face-smirk
+face-surprise
+face-tired
+face-uncertain
+face-wink
+face-worried
+
+# Table 9. Standard International Icons
+flag-aa
+
+# Table 10. Standard MIME Type Icons
+application-x-executable
+audio-x-generic
+font-x-generic
+image-x-generic
+package-x-generic
+text-html
+text-x-generic
+text-x-generic-template
+text-x-script
+video-x-generic
+x-office-address-book
+x-office-calendar
+x-office-document
+x-office-presentation
+x-office-spreadsheet
+
+# Table 11. Standard Place Icons
+folder
+folder-remote
+network-server
+network-workgroup
+start-here
+user-bookmarks
+user-desktop
+user-home
+user-trash
+
+# Table 12. Standard Status Icons
+appointment-missed
+appointment-soon
+audio-volume-high
+audio-volume-low
+audio-volume-medium
+audio-volume-muted
+battery-caution
+battery-low
+dialog-error
+dialog-information
+dialog-password
+dialog-question
+dialog-warning
+folder-drag-accept
+folder-open
+folder-visiting
+image-loading
+image-missing
+mail-attachment
+mail-unread
+mail-read
+mail-replied
+mail-signed
+mail-signed-verified
+media-playlist-repeat
+media-playlist-shuffle
+network-error
+network-idle
+network-offline
+network-receive
+network-transmit
+network-transmit-receive
+printer-error
+printer-printing
+security-high
+security-medium
+security-low
+software-update-available
+software-update-urgent
+sync-error
+sync-synchronizing
+task-due
+task-past-due
+user-available
+user-away
+user-idle
+user-offline
+user-trash-full
+weather-clear
+weather-clear-night
+weather-few-clouds
+weather-few-clouds-night
+weather-fog
+weather-overcast
+weather-severe-alert
+weather-showers
+weather-showers-scattered
+weather-snow
+weather-storm
diff --git a/src/designer/src/lib/shared/iconloader.cpp b/src/designer/src/lib/shared/iconloader.cpp
index 13c9ad4f7..ecb97ba2b 100644
--- a/src/designer/src/lib/shared/iconloader.cpp
+++ b/src/designer/src/lib/shared/iconloader.cpp
@@ -1,63 +1,62 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "iconloader_p.h"
#include <QtCore/qfile.h>
+#include <QtCore/qoperatingsystemversion.h>
#include <QtGui/qicon.h>
#include <QtGui/qpixmap.h>
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
-QDESIGNER_SHARED_EXPORT QIcon createIconSet(const QString &name)
+QDESIGNER_SHARED_EXPORT QIcon createIconSet(QIcon::ThemeIcon themeIcon,
+ QLatin1StringView name)
{
- const QStringList candidates = QStringList()
- << (QString::fromUtf8(":/qt-project.org/formeditor/images/") + name)
+ return QOperatingSystemVersion::currentType() != QOperatingSystemVersion::MacOS
+ && QIcon::hasThemeIcon(themeIcon)
+ ? QIcon::fromTheme(themeIcon) : createIconSet(name);
+}
+
+template <class StringView>
+static inline QIcon createIconSetHelper(StringView name)
+{
+ constexpr QLatin1StringView prefixes[] = {
+ ":/qt-project.org/formeditor/images/"_L1,
#ifdef Q_OS_MACOS
- << (QString::fromUtf8(":/qt-project.org/formeditor/images/mac/") + name)
+ ":/qt-project.org/formeditor/images/mac/"_L1,
#else
- << (QString::fromUtf8(":/qt-project.org/formeditor/images/win/") + name)
+ ":/qt-project.org/formeditor/images/win/"_L1,
#endif
- << (QString::fromUtf8(":/qt-project.org/formeditor/images/designer_") + name);
+ ":/qt-project.org/formeditor/images/designer_"_L1
+ };
- for (const QString &f : candidates) {
+ for (QLatin1StringView prefix : prefixes) {
+ const QString f = prefix + name;
if (QFile::exists(f))
return QIcon(f);
}
- return QIcon();
+ return {};
+}
+
+QDESIGNER_SHARED_EXPORT QIcon createIconSet(QStringView name)
+{
+ return createIconSetHelper(name);
+}
+
+QDESIGNER_SHARED_EXPORT QIcon createIconSet(QLatin1StringView name)
+{
+ return createIconSetHelper(name);
}
QDESIGNER_SHARED_EXPORT QIcon emptyIcon()
{
- return QIcon(QStringLiteral(":/qt-project.org/formeditor/images/emptyicon.png"));
+ return QIcon(u":/qt-project.org/formeditor/images/emptyicon.png"_s);
}
static QIcon buildIcon(const QString &prefix, const int *sizes, size_t sizeCount)
@@ -65,7 +64,7 @@ static QIcon buildIcon(const QString &prefix, const int *sizes, size_t sizeCount
QIcon result;
for (size_t i = 0; i < sizeCount; ++i) {
const QString size = QString::number(sizes[i]);
- const QPixmap pixmap(prefix + size + QLatin1Char('x') + size + QStringLiteral(".png"));
+ const QPixmap pixmap(prefix + size + 'x'_L1 + size + ".png"_L1);
Q_ASSERT(!pixmap.size().isEmpty());
result.addPixmap(pixmap);
}
@@ -74,9 +73,9 @@ static QIcon buildIcon(const QString &prefix, const int *sizes, size_t sizeCount
QDESIGNER_SHARED_EXPORT QIcon qtLogoIcon()
{
- static const int sizes[] = {16, 24, 32, 64};
+ static const int sizes[] = {16, 24, 32, 64, 128};
static const QIcon result =
- buildIcon(QStringLiteral(":/qt-project.org/formeditor/images/qtlogo"),
+ buildIcon(u":/qt-project.org/formeditor/images/qtlogo"_s,
sizes, sizeof(sizes) / sizeof(sizes[0]));
return result;
}
diff --git a/src/designer/src/lib/shared/iconloader_p.h b/src/designer/src/lib/shared/iconloader_p.h
index 5932a18c1..c054d677c 100644
--- a/src/designer/src/lib/shared/iconloader_p.h
+++ b/src/designer/src/lib/shared/iconloader_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -42,6 +17,8 @@
#include "shared_global_p.h"
+#include <QtGui/qicon.h>
+
QT_BEGIN_NAMESPACE
class QString;
@@ -49,7 +26,10 @@ class QIcon;
namespace qdesigner_internal {
-QDESIGNER_SHARED_EXPORT QIcon createIconSet(const QString &name);
+QDESIGNER_SHARED_EXPORT QIcon createIconSet(QStringView name);
+QDESIGNER_SHARED_EXPORT QIcon createIconSet(QLatin1StringView name);
+QDESIGNER_SHARED_EXPORT QIcon createIconSet(QIcon::ThemeIcon themeIcon,
+ QLatin1StringView name);
QDESIGNER_SHARED_EXPORT QIcon emptyIcon();
QDESIGNER_SHARED_EXPORT QIcon qtLogoIcon();
diff --git a/src/designer/src/lib/shared/iconselector.cpp b/src/designer/src/lib/shared/iconselector.cpp
index 7b3c7a6b0..60c404423 100644
--- a/src/designer/src/lib/shared/iconselector.cpp
+++ b/src/designer/src/lib/shared/iconselector.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "iconselector_p.h"
#include "qdesigner_utils_p.h"
@@ -39,7 +14,9 @@
#include <QtDesigner/abstractlanguage.h>
#include <QtDesigner/abstractintegration.h>
#include <QtDesigner/qextensionmanager.h>
+#include <QtDesigner/private/resourcebuilder_p.h>
+#include <QtWidgets/qabstractitemview.h>
#include <QtWidgets/qtoolbutton.h>
#include <QtWidgets/qcombobox.h>
#include <QtWidgets/qdialogbuttonbox.h>
@@ -59,10 +36,53 @@
#include <QtCore/qdebug.h>
#include <QtCore/qlist.h>
+#include <utility>
+
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
+using ThemeIconEnumEntry = std::pair<QString, QIcon>;
+
+static const QList<ThemeIconEnumEntry> &themeEnumIcons()
+{
+ static QList<ThemeIconEnumEntry> result;
+ if (result.isEmpty()) {
+ const QStringList &names = QResourceBuilder::themeIconNames();
+ result.reserve(names.size());
+ for (qsizetype i = 0, size = names.size(); i < size; ++i)
+ result.append({names.at(i), QIcon::fromTheme(QIcon::ThemeIcon(i))});
+ }
+ return result;
+}
+
+static void initThemeCombo(QComboBox *cb)
+{
+ cb->view()->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
+
+ for (const auto &te : themeEnumIcons())
+ cb->addItem(te.second, te.first);
+
+ cb->setCurrentIndex(-1);
+}
+
+// Validator for theme line edit, accepts empty or non-blank strings.
+class BlankSuppressingValidator : public QValidator {
+public:
+ explicit BlankSuppressingValidator(QObject * parent = nullptr) : QValidator(parent) {}
+ State validate(QString &input, int &pos) const override
+ {
+ const auto blankPos = input.indexOf(u' ');
+ if (blankPos != -1) {
+ pos = blankPos;
+ return Invalid;
+ }
+ return Acceptable;
+ }
+};
+
// -------------------- LanguageResourceDialogPrivate
class LanguageResourceDialogPrivate {
LanguageResourceDialog *q_ptr;
@@ -100,13 +120,14 @@ void LanguageResourceDialogPrivate::init(LanguageResourceDialog *p)
QLayout *layout = new QVBoxLayout(p);
layout->addWidget(m_browser);
layout->addWidget(m_dialogButtonBox);
- QObject::connect(m_dialogButtonBox, SIGNAL(accepted()), p, SLOT(slotAccepted()));
+ QObject::connect(m_dialogButtonBox, &QDialogButtonBox::accepted, p, [this] { slotAccepted(); });
QObject::connect(m_dialogButtonBox, &QDialogButtonBox::rejected, p, &QDialog::reject);
- QObject::connect(m_browser, SIGNAL(currentPathChanged(QString)), p, SLOT(slotPathChanged(QString)));
- QObject::connect(m_browser, SIGNAL(pathActivated(QString)), p, SLOT(slotAccepted()));
+ QObject::connect(m_browser, &QDesignerResourceBrowserInterface::currentPathChanged,
+ p, [this](const QString &fileName) { slotPathChanged(fileName); });
+ QObject::connect(m_browser, &QDesignerResourceBrowserInterface::pathActivated,
+ p, [this] { slotAccepted(); });
p->setModal(true);
p->setWindowTitle(LanguageResourceDialog::tr("Choose Resource"));
- p->setWindowFlags(p->windowFlags() & ~Qt::WindowContextHelpButtonHint);
setOkButtonEnabled(false);
}
@@ -169,12 +190,24 @@ LanguageResourceDialog* LanguageResourceDialog::create(QDesignerFormEditorInterf
// ------------ IconSelectorPrivate
-static inline QPixmap emptyPixmap()
+struct QIconStateName
{
- QImage img(16, 16, QImage::Format_ARGB32_Premultiplied);
- img.fill(0);
- return QPixmap::fromImage(img);
-}
+ std::pair<QIcon::Mode, QIcon::State> state;
+ const char *name;
+};
+
+constexpr QIconStateName stateToName[] = {
+ {{QIcon::Normal, QIcon::Off}, QT_TRANSLATE_NOOP("IconSelector", "Normal Off")},
+ {{QIcon::Normal, QIcon::On}, QT_TRANSLATE_NOOP("IconSelector", "Normal On")},
+ {{QIcon::Disabled, QIcon::Off}, QT_TRANSLATE_NOOP("IconSelector", "Disabled Off")},
+ {{QIcon::Disabled, QIcon::On}, QT_TRANSLATE_NOOP("IconSelector", "Disabled On")},
+ {{QIcon::Active, QIcon::Off}, QT_TRANSLATE_NOOP("IconSelector", "Active Off")},
+ {{QIcon::Active, QIcon::On}, QT_TRANSLATE_NOOP("IconSelector", "Active On")},
+ {{QIcon::Selected, QIcon::Off}, QT_TRANSLATE_NOOP("IconSelector", "Selected Off")},
+ {{QIcon::Selected, QIcon::On}, QT_TRANSLATE_NOOP("IconSelector", "Selected On")}
+};
+
+constexpr int stateToNameSize = int(sizeof(stateToName) / sizeof(stateToName[0]));
class IconSelectorPrivate
{
@@ -191,10 +224,12 @@ public:
void slotResetAllActivated();
void slotUpdate();
- QList<QPair<QPair<QIcon::Mode, QIcon::State>, QString> > m_stateToName; // could be static map
-
- QMap<QPair<QIcon::Mode, QIcon::State>, int> m_stateToIndex;
- QMap<int, QPair<QIcon::Mode, QIcon::State> > m_indexToState;
+ std::pair<QIcon::Mode, QIcon::State> currentState() const
+ {
+ const int i = m_stateComboBox->currentIndex();
+ return i >= 0 && i < stateToNameSize
+ ? stateToName[i].state : std::pair<QIcon::Mode, QIcon::State>{};
+ }
const QIcon m_emptyIcon;
QComboBox *m_stateComboBox = nullptr;
@@ -214,12 +249,10 @@ void IconSelectorPrivate::slotUpdate()
if (m_iconCache)
icon = m_iconCache->icon(m_icon);
- QMap<QPair<QIcon::Mode, QIcon::State>, PropertySheetPixmapValue> paths = m_icon.paths();
- for (auto itIndex = m_stateToIndex.cbegin(), end = m_stateToIndex.cend(); itIndex != end; ++itIndex) {
- const QPair<QIcon::Mode, QIcon::State> state = itIndex.key();
+ const auto &paths = m_icon.paths();
+ for (int index = 0; index < stateToNameSize; ++index) {
+ const auto &state = stateToName[index].state;
const PropertySheetPixmapValue pixmap = paths.value(state);
- const int index = itIndex.value();
-
QIcon pixmapIcon = QIcon(icon.pixmap(16, 16, state.first, state.second));
if (pixmapIcon.isNull())
pixmapIcon = m_emptyIcon;
@@ -230,8 +263,7 @@ void IconSelectorPrivate::slotUpdate()
m_stateComboBox->setItemData(index, font, Qt::FontRole);
}
- QPair<QIcon::Mode, QIcon::State> state = m_indexToState.value(m_stateComboBox->currentIndex());
- PropertySheetPixmapValue currentPixmap = paths.value(state);
+ PropertySheetPixmapValue currentPixmap = paths.value(currentState());
m_resetAction->setEnabled(!currentPixmap.path().isEmpty());
m_resetAllAction->setEnabled(!paths.isEmpty());
m_stateComboBox->update();
@@ -244,7 +276,7 @@ void IconSelectorPrivate::slotStateActivated()
void IconSelectorPrivate::slotSetActivated()
{
- QPair<QIcon::Mode, QIcon::State> state = m_indexToState.value(m_stateComboBox->currentIndex());
+ const auto state = currentState();
const PropertySheetPixmapValue pixmap = m_icon.pixmap(state.first, state.second);
// Default to resource
const PropertySheetPixmapValue::PixmapSource ps = pixmap.path().isEmpty() ? PropertySheetPixmapValue::ResourcePixmap : pixmap.pixmapSource(m_core);
@@ -283,7 +315,7 @@ QString IconSelector::choosePixmapResource(QDesignerFormEditorInterface *core, Q
void IconSelectorPrivate::slotSetResourceActivated()
{
- const QPair<QIcon::Mode, QIcon::State> state = m_indexToState.value(m_stateComboBox->currentIndex());
+ const auto state = currentState();
PropertySheetPixmapValue pixmap = m_icon.pixmap(state.first, state.second);
const QString oldPath = pixmap.path();
@@ -332,19 +364,18 @@ static QString imageFilter()
{
QString filter = QApplication::translate("IconSelector", "All Pixmaps (");
const auto supportedImageFormats = QImageReader::supportedImageFormats();
- const QString jpeg = QStringLiteral("JPEG");
- const int count = supportedImageFormats.count();
- for (int i = 0; i< count; ++i) {
+ const qsizetype count = supportedImageFormats.size();
+ for (qsizetype i = 0; i < count; ++i) {
if (i)
- filter += QLatin1Char(' ');
- filter += QStringLiteral("*.");
+ filter += u' ';
+ filter += "*."_L1;
const QString outputFormat = QString::fromUtf8(supportedImageFormats.at(i));
- if (outputFormat != jpeg)
+ if (outputFormat != "JPEG"_L1)
filter += outputFormat.toLower();
else
- filter += QStringLiteral("jpg *.jpeg");
+ filter += "jpg *.jpeg"_L1;
}
- filter += QLatin1Char(')');
+ filter += u')';
return filter;
}
@@ -368,7 +399,7 @@ QString IconSelector::choosePixmapFile(const QString &directory, QDesignerDialog
void IconSelectorPrivate::slotSetFileActivated()
{
- QPair<QIcon::Mode, QIcon::State> state = m_indexToState.value(m_stateComboBox->currentIndex());
+ const auto state = currentState();
PropertySheetPixmapValue pixmap = m_icon.pixmap(state.first, state.second);
const QString newPath = IconSelector::choosePixmapFile(pixmap.path(), m_core->dialogGui(), q_ptr);
@@ -384,7 +415,7 @@ void IconSelectorPrivate::slotSetFileActivated()
void IconSelectorPrivate::slotResetActivated()
{
- QPair<QIcon::Mode, QIcon::State> state = m_indexToState.value(m_stateComboBox->currentIndex());
+ const auto state = currentState();
PropertySheetPixmapValue pixmap = m_icon.pixmap(state.first, state.second);
const PropertySheetPixmapValue newPixmap;
@@ -421,15 +452,6 @@ IconSelector::IconSelector(QWidget *parent) :
l->addWidget(d_ptr->m_iconButton);
l->setContentsMargins(QMargins());
- d_ptr->m_stateToName << qMakePair(qMakePair(QIcon::Normal, QIcon::Off), tr("Normal Off") );
- d_ptr->m_stateToName << qMakePair(qMakePair(QIcon::Normal, QIcon::On), tr("Normal On") );
- d_ptr->m_stateToName << qMakePair(qMakePair(QIcon::Disabled, QIcon::Off), tr("Disabled Off") );
- d_ptr->m_stateToName << qMakePair(qMakePair(QIcon::Disabled, QIcon::On), tr("Disabled On") );
- d_ptr->m_stateToName << qMakePair(qMakePair(QIcon::Active, QIcon::Off), tr("Active Off") );
- d_ptr->m_stateToName << qMakePair(qMakePair(QIcon::Active, QIcon::On), tr("Active On") );
- d_ptr->m_stateToName << qMakePair(qMakePair(QIcon::Selected, QIcon::Off), tr("Selected Off") );
- d_ptr->m_stateToName << qMakePair(qMakePair(QIcon::Selected, QIcon::On), tr("Selected On") );
-
QMenu *setMenu = new QMenu(this);
QAction *setResourceAction = new QAction(tr("Choose Resource..."), this);
@@ -438,7 +460,7 @@ IconSelector::IconSelector(QWidget *parent) :
d_ptr->m_resetAllAction = new QAction(tr("Reset All"), this);
d_ptr->m_resetAction->setEnabled(false);
d_ptr->m_resetAllAction->setEnabled(false);
- //d_ptr->m_resetAction->setIcon(createIconSet(QString::fromUtf8("resetproperty.png")));
+ //d_ptr->m_resetAction->setIcon(createIconSet("resetproperty.png"_L1));
setMenu->addAction(setResourceAction);
setMenu->addAction(setFileAction);
@@ -446,28 +468,23 @@ IconSelector::IconSelector(QWidget *parent) :
setMenu->addAction(d_ptr->m_resetAction);
setMenu->addAction(d_ptr->m_resetAllAction);
- int index = 0;
- QStringList items;
- for (const auto &item : qAsConst(d_ptr->m_stateToName)) {
- const QPair<QIcon::Mode, QIcon::State> state = item.first;
- const QString name = item.second;
-
- items.append(name);
- d_ptr->m_stateToIndex[state] = index;
- d_ptr->m_indexToState[index] = state;
- index++;
- }
- d_ptr->m_stateComboBox->addItems(items);
+ for (const auto &item : stateToName)
+ d_ptr->m_stateComboBox->addItem(tr(item.name));
d_ptr->m_iconButton->setMenu(setMenu);
- connect(d_ptr->m_stateComboBox, SIGNAL(activated(int)), this, SLOT(slotStateActivated()));
- connect(d_ptr->m_iconButton, SIGNAL(clicked()), this, SLOT(slotSetActivated()));
- connect(setResourceAction, SIGNAL(triggered()), this, SLOT(slotSetResourceActivated()));
- connect(setFileAction, SIGNAL(triggered()), this, SLOT(slotSetFileActivated()));
- connect(d_ptr->m_resetAction, SIGNAL(triggered()), this, SLOT(slotResetActivated()));
- connect(d_ptr->m_resetAllAction, SIGNAL(triggered()), this, SLOT(slotResetAllActivated()));
-
+ connect(d_ptr->m_stateComboBox, &QComboBox::activated,
+ this, [this] { d_ptr->slotStateActivated(); });
+ connect(d_ptr->m_iconButton, &QAbstractButton::clicked,
+ this, [this] { d_ptr->slotSetActivated(); });
+ connect(setResourceAction, &QAction::triggered,
+ this, [this] { d_ptr->slotSetResourceActivated(); });
+ connect(setFileAction, &QAction::triggered,
+ this, [this] { d_ptr->slotSetFileActivated(); });
+ connect(d_ptr->m_resetAction, &QAction::triggered,
+ this, [this] { d_ptr->slotResetActivated(); });
+ connect(d_ptr->m_resetAllAction, &QAction::triggered,
+ this, [this] { d_ptr->slotResetAllActivated(); });
d_ptr->slotUpdate();
}
@@ -497,117 +514,134 @@ void IconSelector::setFormEditor(QDesignerFormEditorInterface *core)
void IconSelector::setIconCache(DesignerIconCache *iconCache)
{
d_ptr->m_iconCache = iconCache;
- connect(iconCache, SIGNAL(reloaded()), this, SLOT(slotUpdate()));
+ connect(iconCache, &DesignerIconCache::reloaded, this, [this] { d_ptr->slotUpdate(); });
d_ptr->slotUpdate();
}
void IconSelector::setPixmapCache(DesignerPixmapCache *pixmapCache)
{
d_ptr->m_pixmapCache = pixmapCache;
- connect(pixmapCache, SIGNAL(reloaded()), this, SLOT(slotUpdate()));
+ connect(pixmapCache, &DesignerPixmapCache::reloaded, this, [this] { d_ptr->slotUpdate(); });
d_ptr->slotUpdate();
}
// --- IconThemeEditor
-// Validator for theme line edit, accepts empty or non-blank strings.
-class BlankSuppressingValidator : public QValidator {
-public:
- explicit BlankSuppressingValidator(QObject * parent = nullptr) : QValidator(parent) {}
-
- State validate(QString &input, int &pos) const override
- {
- const int blankPos = input.indexOf(QLatin1Char(' '));
- if (blankPos != -1) {
- pos = blankPos;
- return Invalid;
- }
- return Acceptable;
- }
-};
+static const QMap<QString, QIcon> &themeIcons()
+{
+ static QMap<QString, QIcon> result;
+ if (result.isEmpty()) {
+ QFile file(u":/qt-project.org/designer/icon-naming-spec.txt"_s);
+ if (file.open(QIODevice::ReadOnly)) {
+ while (!file.atEnd()) {
+ const auto line = file.readLine().trimmed();
+ if (line.isEmpty() || line.startsWith('#'))
+ continue;
+ const auto iconName = QString::fromUtf8(line);
+ result.insert(iconName, QIcon::fromTheme(iconName));
+ }
+ file.close();
+ }
+ }
+ return result;
+}
struct IconThemeEditorPrivate {
- IconThemeEditorPrivate();
+ void create(QWidget *topLevel, bool wantResetButton);
- const QPixmap m_emptyPixmap;
- QLineEdit *m_themeLineEdit;
- QLabel *m_themeLabel;
+ QComboBox *m_themeComboBox{};
+ QToolButton *m_themeResetButton{};
};
-IconThemeEditorPrivate::IconThemeEditorPrivate() :
- m_emptyPixmap(emptyPixmap()),
- m_themeLineEdit(new QLineEdit),
- m_themeLabel(new QLabel)
+void IconThemeEditorPrivate::create(QWidget *topLevel, bool wantResetButton)
{
+ m_themeComboBox = new QComboBox();
+ QHBoxLayout *mainHLayout = new QHBoxLayout(topLevel);
+ mainHLayout->setContentsMargins({});
+ mainHLayout->addWidget(m_themeComboBox);
+ if (wantResetButton) {
+ m_themeResetButton = new QToolButton;
+ m_themeResetButton->setIcon(createIconSet("resetproperty.png"_L1));
+ mainHLayout->addWidget(m_themeResetButton);
+ }
+ topLevel->setFocusProxy(m_themeComboBox);
}
IconThemeEditor::IconThemeEditor(QWidget *parent, bool wantResetButton) :
QWidget (parent), d(new IconThemeEditorPrivate)
{
- QHBoxLayout *mainHLayout = new QHBoxLayout;
- mainHLayout->setContentsMargins(QMargins());
+ d->create(this, wantResetButton);
+ d->m_themeComboBox->setEditable(true);
+
+ const auto icons = themeIcons();
+ for (auto i = icons.constBegin(); i != icons.constEnd(); ++i)
+ d->m_themeComboBox->addItem(i.value(), i.key());
+ d->m_themeComboBox->setCurrentIndex(-1);
+ d->m_themeComboBox->lineEdit()->setValidator(new BlankSuppressingValidator(this));
+ connect(d->m_themeComboBox, &QComboBox::currentTextChanged, this, &IconThemeEditor::edited);
+ if (wantResetButton)
+ connect(d->m_themeResetButton, &QAbstractButton::clicked, this, &IconThemeEditor::reset);
+}
+
+IconThemeEditor::~IconThemeEditor() = default;
- // Vertically center theme preview label
- d->m_themeLabel->setPixmap(d->m_emptyPixmap);
+void IconThemeEditor::reset()
+{
+ d->m_themeComboBox->setCurrentIndex(-1);
+ emit edited(QString());
+}
- QVBoxLayout *themeLabelVLayout = new QVBoxLayout;
- d->m_themeLabel->setMargin(1);
- themeLabelVLayout->setContentsMargins(QMargins());
- themeLabelVLayout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Ignored, QSizePolicy::MinimumExpanding));
- themeLabelVLayout->addWidget(d->m_themeLabel);
- themeLabelVLayout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Ignored, QSizePolicy::MinimumExpanding));
- mainHLayout->addLayout(themeLabelVLayout);
+QString IconThemeEditor::theme() const
+{
+ return d->m_themeComboBox->currentText();
+}
- d->m_themeLineEdit = new QLineEdit;
- d->m_themeLineEdit->setValidator(new BlankSuppressingValidator(d->m_themeLineEdit));
- connect(d->m_themeLineEdit, &QLineEdit::textChanged, this, &IconThemeEditor::slotChanged);
- connect(d->m_themeLineEdit, &QLineEdit::textEdited, this, &IconThemeEditor::edited);
- mainHLayout->addWidget(d->m_themeLineEdit);
+void IconThemeEditor::setTheme(const QString &t)
+{
+ d->m_themeComboBox->setCurrentText(t);
+}
- if (wantResetButton) {
- QToolButton *themeResetButton = new QToolButton;
- themeResetButton->setIcon(createIconSet(QStringLiteral("resetproperty.png")));
- connect(themeResetButton, &QAbstractButton::clicked, this, &IconThemeEditor::reset);
- mainHLayout->addWidget(themeResetButton);
- }
+IconThemeEnumEditor::IconThemeEnumEditor(QWidget *parent, bool wantResetButton) :
+ QWidget (parent), d(new IconThemeEditorPrivate)
+{
+ d->create(this, wantResetButton);
+ initThemeCombo(d->m_themeComboBox);
- setLayout(mainHLayout);
- setFocusProxy(d->m_themeLineEdit);
+ connect(d->m_themeComboBox, &QComboBox::currentIndexChanged,
+ this, &IconThemeEnumEditor::edited);
+ if (wantResetButton)
+ connect(d->m_themeResetButton, &QAbstractButton::clicked, this, &IconThemeEnumEditor::reset);
}
-IconThemeEditor::~IconThemeEditor() = default;
+IconThemeEnumEditor::~IconThemeEnumEditor() = default;
-void IconThemeEditor::reset()
+void IconThemeEnumEditor::reset()
{
- d->m_themeLineEdit->clear();
- emit edited(QString());
+ d->m_themeComboBox->setCurrentIndex(-1);
+ emit edited(-1);
}
-void IconThemeEditor::slotChanged(const QString &theme)
+int IconThemeEnumEditor::themeEnum() const
{
- updatePreview(theme);
+ return d->m_themeComboBox->currentIndex();
}
-void IconThemeEditor::updatePreview(const QString &t)
+void IconThemeEnumEditor::setThemeEnum(int t)
{
- // Update preview label with icon.
- if (t.isEmpty() || !QIcon::hasThemeIcon(t)) { // Empty
- if (d->m_themeLabel->pixmap(Qt::ReturnByValue).cacheKey() != d->m_emptyPixmap.cacheKey())
- d->m_themeLabel->setPixmap(d->m_emptyPixmap);
- } else {
- const QIcon icon = QIcon::fromTheme(t);
- d->m_themeLabel->setPixmap(icon.pixmap(d->m_emptyPixmap.size()));
- }
+ Q_ASSERT(t >= -1 && t < int(QIcon::ThemeIcon::NThemeIcons));
+ d->m_themeComboBox->setCurrentIndex(t);
}
-QString IconThemeEditor::theme() const
+QString IconThemeEnumEditor::iconName(int e)
{
- return d->m_themeLineEdit->text();
+ return QResourceBuilder::themeIconNames().value(e);
}
-void IconThemeEditor::setTheme(const QString &t)
+QComboBox *IconThemeEnumEditor::createComboBox(QWidget *parent)
{
- d->m_themeLineEdit->setText(t);
+ auto *result = new QComboBox(parent);
+ initThemeCombo(result);
+ return result;
}
} // qdesigner_internal
diff --git a/src/designer/src/lib/shared/iconselector_p.h b/src/designer/src/lib/shared/iconselector_p.h
index 40e38acdd..4a4238e66 100644
--- a/src/designer/src/lib/shared/iconselector_p.h
+++ b/src/designer/src/lib/shared/iconselector_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -50,6 +25,8 @@
QT_BEGIN_NAMESPACE
+class QComboBox;
+
class QtResourceModel;
class QDesignerFormEditorInterface;
class QDesignerDialogGuiInterface;
@@ -81,8 +58,6 @@ private:
QScopedPointer<class LanguageResourceDialogPrivate> d_ptr;
Q_DECLARE_PRIVATE(LanguageResourceDialog)
Q_DISABLE_COPY_MOVE(LanguageResourceDialog)
- Q_PRIVATE_SLOT(d_func(), void slotAccepted())
- Q_PRIVATE_SLOT(d_func(), void slotPathChanged(QString))
};
@@ -114,14 +89,6 @@ private:
QScopedPointer<class IconSelectorPrivate> d_ptr;
Q_DECLARE_PRIVATE(IconSelector)
Q_DISABLE_COPY_MOVE(IconSelector)
-
- Q_PRIVATE_SLOT(d_func(), void slotStateActivated())
- Q_PRIVATE_SLOT(d_func(), void slotSetActivated())
- Q_PRIVATE_SLOT(d_func(), void slotSetResourceActivated())
- Q_PRIVATE_SLOT(d_func(), void slotSetFileActivated())
- Q_PRIVATE_SLOT(d_func(), void slotResetActivated())
- Q_PRIVATE_SLOT(d_func(), void slotResetAllActivated())
- Q_PRIVATE_SLOT(d_func(), void slotUpdate())
};
// IconThemeEditor: Let's the user input theme icon names and shows a preview label.
@@ -142,12 +109,32 @@ signals:
public slots:
void reset();
-private slots:
- void slotChanged(const QString &);
-
private:
- void updatePreview(const QString &);
+ QScopedPointer<IconThemeEditorPrivate> d;
+};
+
+// IconThemeEnumEditor: Let's the user input theme icon enum values
+// (QIcon::ThemeIcon) and shows a preview label. -1 means nothing selected.
+class QDESIGNER_SHARED_EXPORT IconThemeEnumEditor : public QWidget
+{
+ Q_OBJECT
+public:
+ explicit IconThemeEnumEditor(QWidget *parent = nullptr, bool wantResetButton = true);
+ ~IconThemeEnumEditor() override;
+ int themeEnum() const;
+ void setThemeEnum(int);
+
+ static QString iconName(int e);
+ static QComboBox *createComboBox(QWidget *parent = nullptr);
+
+signals:
+ void edited(int);
+
+public slots:
+ void reset();
+
+private:
QScopedPointer<IconThemeEditorPrivate> d;
};
diff --git a/src/designer/src/lib/shared/invisible_widget.cpp b/src/designer/src/lib/shared/invisible_widget.cpp
index 78d8c77d6..7fec394ba 100644
--- a/src/designer/src/lib/shared/invisible_widget.cpp
+++ b/src/designer/src/lib/shared/invisible_widget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "invisible_widget_p.h"
diff --git a/src/designer/src/lib/shared/invisible_widget_p.h b/src/designer/src/lib/shared/invisible_widget_p.h
index 423e5d293..30a7970d4 100644
--- a/src/designer/src/lib/shared/invisible_widget_p.h
+++ b/src/designer/src/lib/shared/invisible_widget_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/layout.cpp b/src/designer/src/lib/shared/layout.cpp
index ce2351d65..b35361a38 100644
--- a/src/designer/src/lib/shared/layout.cpp
+++ b/src/designer/src/lib/shared/layout.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "layout_p.h"
#include "layoutdecoration.h"
@@ -43,6 +18,7 @@
#include <QtDesigner/qextensionmanager.h>
#include <QtCore/qdebug.h>
+#include <QtCore/qhash.h>
#include <QtCore/qlist.h>
#include <QtCore/qset.h>
@@ -63,7 +39,7 @@
QT_BEGIN_NAMESPACE
-enum { FormLayoutColumns = 2 };
+using namespace Qt::StringLiterals;
namespace qdesigner_internal {
@@ -140,7 +116,7 @@ void Layout::setup()
// Widgets which are already laid out are thrown away here too
QMultiMap<QWidget*, QWidget*> lists;
- for (QWidget *w : qAsConst(m_widgets)) {
+ for (QWidget *w : std::as_const(m_widgets)) {
QWidget *p = w->parentWidget();
if (p && LayoutInfo::layoutType(m_formWindow->core(), p) != LayoutInfo::NoLayout
@@ -153,7 +129,7 @@ void Layout::setup()
QWidgetList lastList;
const QWidgetList &parents = lists.keys();
for (QWidget *p : parents) {
- if (lists.count(p) > lastList.count())
+ if (lists.count(p) > lastList.size())
lastList = lists.values(p);
}
@@ -162,7 +138,7 @@ void Layout::setup()
// best list has only one entry and we do not layout a container,
// we leave here.
QDesignerWidgetDataBaseInterface *widgetDataBase = m_formWindow->core()->widgetDataBase();
- if (lastList.count() < 2 &&
+ if (lastList.size() < 2 &&
(!m_layoutBase ||
(!widgetDataBase->isContainer(m_layoutBase, false) &&
m_layoutBase != m_formWindow->mainContainer()))
@@ -184,7 +160,7 @@ void Layout::setup()
// be placed and connect to widgetDestroyed() signals of the
// widgets to get informed if one gets deleted to be able to
// handle that and do not crash in this case
- for (QWidget *w : qAsConst(m_widgets)) {
+ for (QWidget *w : std::as_const(m_widgets)) {
connect(w, &QObject::destroyed, this, &Layout::widgetDestroyed);
m_startPoint = QPoint(qMin(m_startPoint.x(), w->x()), qMin(m_startPoint.y(), w->y()));
const QRect rc(w->geometry());
@@ -209,7 +185,7 @@ void Layout::widgetDestroyed()
bool Layout::prepareLayout(bool &needMove, bool &needReparent)
{
- for (QWidget *widget : qAsConst(m_widgets))
+ for (QWidget *widget : std::as_const(m_widgets))
widget->raise();
needMove = !m_layoutBase;
@@ -220,10 +196,10 @@ bool Layout::prepareLayout(bool &needMove, bool &needReparent)
if (m_layoutBase == nullptr) {
const bool useSplitter = m_layoutType == LayoutInfo::HSplitter || m_layoutType == LayoutInfo::VSplitter;
- const QString baseWidgetClassName = useSplitter ? QLatin1String("QSplitter") : QLatin1String("QLayoutWidget");
+ const QString baseWidgetClassName = useSplitter ? u"QSplitter"_s : u"QLayoutWidget"_s;
m_layoutBase = widgetFactory->createWidget(baseWidgetClassName, widgetFactory->containerOfWidget(m_parentWidget));
if (useSplitter) {
- m_layoutBase->setObjectName(QStringLiteral("splitter"));
+ m_layoutBase->setObjectName(u"splitter"_s);
m_formWindow->ensureUniqueObjectName(m_layoutBase);
}
} else {
@@ -319,7 +295,7 @@ void Layout::finishLayout(bool needMove, QLayout *layout)
void Layout::undoLayout()
{
- if (!m_widgets.count())
+ if (m_widgets.isEmpty())
return;
m_formWindow->selectWidget(m_layoutBase, false);
@@ -365,14 +341,13 @@ void Layout::undoLayout()
void Layout::breakLayout()
{
- typedef QMap<QWidget *, QRect> WidgetRectMap;
- WidgetRectMap rects;
+ QHash<QWidget *, QRect> rects;
/* Store the geometry of the widgets. The idea is to give the user space
* to rearrange them, so, we do a adjustSize() on them, unless they want
* to grow (expanding widgets like QTextEdit), in which the geometry is
* preserved. Note that historically, geometries were re-applied
* only after breaking splitters. */
- for (QWidget *w : qAsConst(m_widgets)) {
+ for (QWidget *w : std::as_const(m_widgets)) {
const QRect geom = w->geometry();
const QSize sizeHint = w->sizeHint();
const bool restoreGeometry = sizeHint.isEmpty() || sizeHint.width() > geom.width() || sizeHint.height() > geom.height();
@@ -427,11 +402,11 @@ static QString suggestLayoutName(const char *className)
{
// Legacy
if (!qstrcmp(className, "QHBoxLayout"))
- return QStringLiteral("horizontalLayout");
+ return u"horizontalLayout"_s;
if (!qstrcmp(className, "QVBoxLayout"))
- return QStringLiteral("verticalLayout");
+ return u"verticalLayout"_s;
if (!qstrcmp(className, "QGridLayout"))
- return QStringLiteral("gridLayout");
+ return u"gridLayout"_s;
return qtify(QString::fromUtf8(className));
}
@@ -445,10 +420,10 @@ QLayout *Layout::createLayout(int type)
// QLayoutWidget
QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(m_formWindow->core()->extensionManager(), layout);
if (sheet && qobject_cast<QLayoutWidget*>(m_layoutBase)) {
- sheet->setProperty(sheet->indexOf(QStringLiteral("leftMargin")), 0);
- sheet->setProperty(sheet->indexOf(QStringLiteral("topMargin")), 0);
- sheet->setProperty(sheet->indexOf(QStringLiteral("rightMargin")), 0);
- sheet->setProperty(sheet->indexOf(QStringLiteral("bottomMargin")), 0);
+ sheet->setProperty(sheet->indexOf(u"leftMargin"_s), 0);
+ sheet->setProperty(sheet->indexOf(u"topMargin"_s), 0);
+ sheet->setProperty(sheet->indexOf(u"rightMargin"_s), 0);
+ sheet->setProperty(sheet->indexOf(u"bottomMargin"_s), 0);
}
return layout;
}
@@ -512,9 +487,7 @@ void BoxLayout::doLayout()
QDesignerWidgetItemInstaller wii; // Make sure we use QDesignerWidgetItem.
- const QWidgetList::const_iterator cend = widgets().constEnd();
- for (QWidgetList::const_iterator it = widgets().constBegin(); it != cend; ++it) {
- QWidget *w = *it;
+ for (auto *w : widgets()) {
if (needReparent)
reparentToLayoutBase(w);
@@ -564,10 +537,7 @@ void SplitterLayout::doLayout()
QSplitter *splitter = qobject_cast<QSplitter*>(layoutBaseWidget());
Q_ASSERT(splitter != nullptr);
-
- const QWidgetList::const_iterator cend = widgets().constEnd();
- for (QWidgetList::const_iterator it = widgets().constBegin(); it != cend; ++it) {
- QWidget *w = *it;
+ for (auto *w : widgets()) {
if (needReparent)
reparentToLayoutBase(w);
splitter->addWidget(w);
@@ -580,19 +550,21 @@ void SplitterLayout::doLayout()
// ---------- Grid: Helper for laying out grids
-class Grid
+class GridHelper
{
- Q_DISABLE_COPY_MOVE(Grid);
+ Q_DISABLE_COPY_MOVE(GridHelper);
public:
+ enum { FormLayoutColumns = 2 };
+
enum Mode {
GridLayout, // Arbitrary size/supports span
FormLayout // 2-column/no span
};
- Grid(Mode mode);
+ GridHelper(Mode mode);
void resize(int nrows, int ncols);
- ~Grid();
+ ~GridHelper();
QWidget* cell(int row, int col) const { return m_cells[ row * m_ncols + col]; }
@@ -631,7 +603,7 @@ private:
QWidget** m_cells; // widget matrix w11, w12, w21...
};
-Grid::Grid(Mode mode) :
+GridHelper::GridHelper(Mode mode) :
m_mode(mode),
m_nrows(0),
m_ncols(0),
@@ -639,12 +611,12 @@ Grid::Grid(Mode mode) :
{
}
-Grid::~Grid()
+GridHelper::~GridHelper()
{
delete [] m_cells;
}
-void Grid::resize(int nrows, int ncols)
+void GridHelper::resize(int nrows, int ncols)
{
delete [] m_cells;
m_cells = nullptr;
@@ -656,7 +628,7 @@ void Grid::resize(int nrows, int ncols)
}
}
-void Grid::setCells(const QRect &c, QWidget* w)
+void GridHelper::setCells(const QRect &c, QWidget* w)
{
const int bottom = c.top() + c.height();
const int width = c.width();
@@ -667,7 +639,7 @@ void Grid::setCells(const QRect &c, QWidget* w)
}
}
-int Grid::countRow(int r, int c) const
+int GridHelper::countRow(int r, int c) const
{
QWidget* w = cell(r, c);
int i = c + 1;
@@ -676,7 +648,7 @@ int Grid::countRow(int r, int c) const
return i - c;
}
-int Grid::countCol(int r, int c) const
+int GridHelper::countCol(int r, int c) const
{
QWidget* w = cell(r, c);
int i = r + 1;
@@ -685,19 +657,19 @@ int Grid::countCol(int r, int c) const
return i - r;
}
-void Grid::setCol(int r, int c, QWidget* w, int count)
+void GridHelper::setCol(int r, int c, QWidget* w, int count)
{
for (int i = 0; i < count; i++)
setCell(r + i, c, w);
}
-void Grid::setRow(int r, int c, QWidget* w, int count)
+void GridHelper::setRow(int r, int c, QWidget* w, int count)
{
for (int i = 0; i < count; i++)
setCell(r, c + i, w);
}
-bool Grid::isWidgetStartCol(int c) const
+bool GridHelper::isWidgetStartCol(int c) const
{
for (int r = 0; r < m_nrows; r++) {
if (cell(r, c) && ((c==0) || (cell(r, c) != cell(r, c-1)))) {
@@ -707,7 +679,7 @@ bool Grid::isWidgetStartCol(int c) const
return false;
}
-bool Grid::isWidgetEndCol(int c) const
+bool GridHelper::isWidgetEndCol(int c) const
{
for (int r = 0; r < m_nrows; r++) {
if (cell(r, c) && ((c == m_ncols-1) || (cell(r, c) != cell(r, c+1))))
@@ -716,7 +688,7 @@ bool Grid::isWidgetEndCol(int c) const
return false;
}
-bool Grid::isWidgetStartRow(int r) const
+bool GridHelper::isWidgetStartRow(int r) const
{
for ( int c = 0; c < m_ncols; c++) {
if (cell(r, c) && ((r==0) || (cell(r, c) != cell(r-1, c))))
@@ -725,7 +697,7 @@ bool Grid::isWidgetStartRow(int r) const
return false;
}
-bool Grid::isWidgetEndRow(int r) const
+bool GridHelper::isWidgetEndRow(int r) const
{
for (int c = 0; c < m_ncols; c++) {
if (cell(r, c) && ((r == m_nrows-1) || (cell(r, c) != cell(r+1, c))))
@@ -735,7 +707,7 @@ bool Grid::isWidgetEndRow(int r) const
}
-bool Grid::isWidgetTopLeft(int r, int c) const
+bool GridHelper::isWidgetTopLeft(int r, int c) const
{
QWidget* w = cell(r, c);
if (!w)
@@ -743,7 +715,7 @@ bool Grid::isWidgetTopLeft(int r, int c) const
return (!r || cell(r-1, c) != w) && (!c || cell(r, c-1) != w);
}
-void Grid::extendLeft()
+void GridHelper::extendLeft()
{
for (int c = 1; c < m_ncols; c++) {
for (int r = 0; r < m_nrows; r++) {
@@ -774,7 +746,7 @@ void Grid::extendLeft()
}
-void Grid::extendRight()
+void GridHelper::extendRight()
{
for (int c = m_ncols - 2; c >= 0; c--) {
for (int r = 0; r < m_nrows; r++) {
@@ -804,7 +776,7 @@ void Grid::extendRight()
}
-void Grid::extendUp()
+void GridHelper::extendUp()
{
for (int r = 1; r < m_nrows; r++) {
for (int c = 0; c < m_ncols; c++) {
@@ -833,7 +805,7 @@ void Grid::extendUp()
}
}
-void Grid::extendDown()
+void GridHelper::extendDown()
{
for (int r = m_nrows - 2; r >= 0; r--) {
for (int c = 0; c < m_ncols; c++) {
@@ -862,7 +834,7 @@ void Grid::extendDown()
}
}
-void Grid::simplify()
+void GridHelper::simplify()
{
switch (m_mode) {
case GridLayout:
@@ -892,7 +864,7 @@ void Grid::simplify()
}
-void Grid::shrink()
+void GridHelper::shrink()
{
// tick off the occupied cols/rows (bordering on widget edges)
QList<bool> columns(m_ncols, false);
@@ -928,7 +900,7 @@ void Grid::shrink()
m_ncols = simplifiedNCols;
}
-bool Grid::shrinkFormLayoutSpans()
+bool GridHelper::shrinkFormLayoutSpans()
{
bool shrunk = false;
using WidgetSet = QSet<QWidget *>;
@@ -940,9 +912,7 @@ bool Grid::shrinkFormLayoutSpans()
widgets.insert(w);
// Restrict the widget span: max horizontal span at column 0: 2, anything else: 1
const int maxRowSpan = 1;
- const WidgetSet::const_iterator cend = widgets.constEnd();
- for (WidgetSet::const_iterator it = widgets.constBegin(); it != cend ; ++it) {
- QWidget *w = *it;
+ for (auto *w : std::as_const(widgets)) {
int row, col, rowspan, colspan;
if (!locateWidget(w, row, col, rowspan, colspan)) {
qDebug("ooops, widget '%s' does not fit in layout", w->objectName().toUtf8().constData());
@@ -969,7 +939,7 @@ bool Grid::shrinkFormLayoutSpans()
return shrunk;
}
-void Grid::reallocFormLayout()
+void GridHelper::reallocFormLayout()
{
// Columns matching? -> happy!
if (m_ncols == FormLayoutColumns)
@@ -1033,7 +1003,7 @@ void Grid::reallocFormLayout()
m_ncols = FormLayoutColumns;
}
-bool Grid::locateWidget(QWidget *w, int &row, int &col, int &rowspan, int &colspan) const
+bool GridHelper::locateWidget(QWidget *w, int &row, int &col, int &rowspan, int &colspan) const
{
const int end = m_nrows * m_ncols;
const int startIndex = std::find(m_cells, m_cells + end, w) - m_cells;
@@ -1071,13 +1041,13 @@ public:
protected:
QWidgetList buildGrid(const QWidgetList &);
- Grid m_grid;
+ GridHelper m_grid;
};
template <class GridLikeLayout, int LayoutType, int GridMode>
GridLayout<GridLikeLayout, LayoutType, GridMode>::GridLayout(const QWidgetList &wl, QWidget *p, QDesignerFormWindowInterface *fw, QWidget *lb) :
Layout(wl, p, fw, lb, LayoutInfo::Grid),
- m_grid(static_cast<Grid::Mode>(GridMode))
+ m_grid(static_cast<GridHelper::Mode>(GridMode))
{
}
@@ -1095,9 +1065,7 @@ void GridLayout<GridLikeLayout, LayoutType, GridMode>::doLayout()
QDesignerWidgetItemInstaller wii; // Make sure we use QDesignerWidgetItem.
- const QWidgetList::const_iterator cend = widgets().constEnd();
- for (QWidgetList::const_iterator it = widgets().constBegin(); it != cend; ++it) {
- QWidget *w = *it;
+ for (auto *w : widgets()) {
int r = 0, c = 0, rs = 0, cs = 0;
if (m_grid.locateWidget(w, r, c, rs, cs)) {
@@ -1127,7 +1095,7 @@ void removeIntVecDuplicates(QList<int> &v)
if (v.size() < 2)
return;
- for (QList<int>::iterator current = v.begin() ; (current != v.end()) && ((current+1) != v.end()) ; )
+ for (auto current = v.begin() ; (current != v.end()) && ((current + 1) != v.end()) ; )
if ( *current == *(current+1) )
v.erase(current+1);
else
@@ -1153,14 +1121,14 @@ QWidgetList GridLayout<GridLikeLayout, LayoutType, GridMode>::buildGrid(const QW
// -----------------------------------------------------------------
// We need a list of both start and stop values for x- & y-axis
- const int widgetCount = widgetList.size();
+ const auto widgetCount = widgetList.size();
QList<int> x( widgetCount * 2 );
QList<int> y( widgetCount * 2 );
// Using push_back would look nicer, but operator[] is much faster
- int index = 0;
- for (int i = 0; i < widgetCount; ++i) {
- const QRect widgetPos = expandGeometry(widgetList.at(i)->geometry());
+ qsizetype index = 0;
+ for (const auto *w : widgetList) {
+ const QRect widgetPos = expandGeometry(w->geometry());
x[index] = widgetPos.left();
x[index+1] = widgetPos.right();
y[index] = widgetPos.top();
@@ -1179,9 +1147,7 @@ QWidgetList GridLayout<GridLikeLayout, LayoutType, GridMode>::buildGrid(const QW
// enough space
m_grid.resize(y.size(), x.size());
- const QWidgetList::const_iterator cend = widgetList.constEnd();
- for (QWidgetList::const_iterator it = widgetList.constBegin(); it != cend; ++it) {
- QWidget *w = *it;
+ for (auto *w : widgetList) {
// Mark the cells in the grid that contains a widget
const QRect widgetPos = expandGeometry(w->geometry());
QRect c(0, 0, 0, 0); // rect of columns/rows
@@ -1191,8 +1157,8 @@ QWidgetList GridLayout<GridLikeLayout, LayoutType, GridMode>::buildGrid(const QW
Q_ASSERT(leftIdx != -1);
c.setLeft(leftIdx);
c.setRight(leftIdx);
- for (int cw=leftIdx; cw<x.size(); cw++)
- if (x[cw] < widgetPos.right())
+ for (qsizetype cw = leftIdx; cw < x.size(); ++cw)
+ if (x.at(cw) < widgetPos.right())
c.setRight(cw);
else
break;
@@ -1201,8 +1167,8 @@ QWidgetList GridLayout<GridLikeLayout, LayoutType, GridMode>::buildGrid(const QW
Q_ASSERT(topIdx != -1);
c.setTop(topIdx);
c.setBottom(topIdx);
- for (int ch=topIdx; ch<y.size(); ch++)
- if (y[ch] < widgetPos.bottom())
+ for (qsizetype ch = topIdx; ch < y.size(); ++ch)
+ if (y.at(ch) < widgetPos.bottom())
c.setBottom(ch);
else
break;
@@ -1228,7 +1194,7 @@ Layout* Layout::createLayout(const QWidgetList &widgets, QWidget *parentWidget,
{
switch (layoutType) {
case LayoutInfo::Grid:
- return new GridLayout<QGridLayout, LayoutInfo::Grid, Grid::GridLayout>(widgets, parentWidget, fw, layoutBase);
+ return new GridLayout<QGridLayout, LayoutInfo::Grid, GridHelper::GridLayout>(widgets, parentWidget, fw, layoutBase);
case LayoutInfo::HBox:
case LayoutInfo::VBox: {
const Qt::Orientation orientation = layoutType == LayoutInfo::HBox ? Qt::Horizontal : Qt::Vertical;
@@ -1240,7 +1206,7 @@ Layout* Layout::createLayout(const QWidgetList &widgets, QWidget *parentWidget,
return new SplitterLayout(widgets, parentWidget, fw, layoutBase, orientation);
}
case LayoutInfo::Form:
- return new GridLayout<QFormLayout, LayoutInfo::Form, Grid::FormLayout>(widgets, parentWidget, fw, layoutBase);
+ return new GridLayout<QFormLayout, LayoutInfo::Form, GridHelper::FormLayout>(widgets, parentWidget, fw, layoutBase);
default:
break;
}
diff --git a/src/designer/src/lib/shared/layout_p.h b/src/designer/src/lib/shared/layout_p.h
index e6cd69a63..2dd8ee7e6 100644
--- a/src/designer/src/lib/shared/layout_p.h
+++ b/src/designer/src/lib/shared/layout_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -102,8 +77,7 @@ private slots:
private:
QWidgetList m_widgets;
QWidget *m_parentWidget;
- typedef QHash<QWidget *, QRect> WidgetGeometryHash;
- WidgetGeometryHash m_geometries;
+ QHash<QWidget *, QRect> m_geometries;
QWidget *m_layoutBase;
QDesignerFormWindowInterface *m_formWindow;
const LayoutInfo::Type m_layoutType;
diff --git a/src/designer/src/lib/shared/layoutinfo.cpp b/src/designer/src/lib/shared/layoutinfo.cpp
index 73651a36c..182e42f37 100644
--- a/src/designer/src/lib/shared/layoutinfo.cpp
+++ b/src/designer/src/lib/shared/layoutinfo.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "layoutinfo_p.h"
@@ -42,6 +17,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
/*!
\overload
@@ -64,13 +41,12 @@ LayoutInfo::Type LayoutInfo::layoutType(const QDesignerFormEditorInterface *core
static const QHash<QString, LayoutInfo::Type> &layoutNameTypeMap()
{
- static QHash<QString, LayoutInfo::Type> nameTypeMap;
- if (nameTypeMap.isEmpty()) {
- nameTypeMap.insert(QStringLiteral("QVBoxLayout"), LayoutInfo::VBox);
- nameTypeMap.insert(QStringLiteral("QHBoxLayout"), LayoutInfo::HBox);
- nameTypeMap.insert(QStringLiteral("QGridLayout"), LayoutInfo::Grid);
- nameTypeMap.insert(QStringLiteral("QFormLayout"), LayoutInfo::Form);
- }
+ static const QHash<QString, LayoutInfo::Type> nameTypeMap = {
+ {u"QVBoxLayout"_s, LayoutInfo::VBox},
+ {u"QHBoxLayout"_s, LayoutInfo::HBox},
+ {u"QGridLayout"_s, LayoutInfo::Grid},
+ {u"QFormLayout"_s, LayoutInfo::Form}
+ };
return nameTypeMap;
}
@@ -213,6 +189,9 @@ QLayout *LayoutInfo::managedLayout(const QDesignerFormEditorInterface *core, con
QLayout *LayoutInfo::managedLayout(const QDesignerFormEditorInterface *core, QLayout *layout)
{
+ if (!layout)
+ return nullptr;
+
QDesignerMetaDataBaseInterface *metaDataBase = core->metaDataBase();
if (!metaDataBase)
diff --git a/src/designer/src/lib/shared/layoutinfo_p.h b/src/designer/src/lib/shared/layoutinfo_p.h
index e5326203a..7ddb2129f 100644
--- a/src/designer/src/lib/shared/layoutinfo_p.h
+++ b/src/designer/src/lib/shared/layoutinfo_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/metadatabase.cpp b/src/designer/src/lib/shared/metadatabase.cpp
index ed0de8dd6..77d6aa23c 100644
--- a/src/designer/src/lib/shared/metadatabase.cpp
+++ b/src/designer/src/lib/shared/metadatabase.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "metadatabase_p.h"
#include "widgetdatabase_p.h"
@@ -170,8 +145,7 @@ QObjectList MetaDataBase::objects() const
{
QObjectList result;
- ItemMap::const_iterator it = m_items.begin();
- for (; it != m_items.end(); ++it) {
+ for (auto it = m_items.cbegin(), cend = m_items.cend(); it != cend; ++it) {
if (it.value()->enabled())
result.append(it.key());
}
diff --git a/src/designer/src/lib/shared/metadatabase_p.h b/src/designer/src/lib/shared/metadatabase_p.h
index 48dee4086..2117f5975 100644
--- a/src/designer/src/lib/shared/metadatabase_p.h
+++ b/src/designer/src/lib/shared/metadatabase_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -106,8 +81,7 @@ private slots:
private:
QDesignerFormEditorInterface *m_core;
- typedef QHash<QObject *, MetaDataBaseItem*> ItemMap;
- ItemMap m_items;
+ QHash<QObject *, MetaDataBaseItem *> m_items;
};
// promotion convenience
diff --git a/src/designer/src/lib/shared/morphmenu.cpp b/src/designer/src/lib/shared/morphmenu.cpp
index 976a27ded..3e7c053ca 100644
--- a/src/designer/src/lib/shared/morphmenu.cpp
+++ b/src/designer/src/lib/shared/morphmenu.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "morphmenu_p.h"
#include "formwindowbase_p.h"
@@ -73,9 +48,11 @@ Q_DECLARE_METATYPE(QWidgetList)
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
// Helpers for the dynamic properties that store Z/Widget order
-static const char *widgetOrderPropertyC = "_q_widgetOrder";
-static const char *zOrderPropertyC = "_q_zOrder";
+static const char widgetOrderPropertyC[] = "_q_widgetOrder";
+static const char zOrderPropertyC[] = "_q_zOrder";
/* Morphing in Designer:
* It is possible to morph:
@@ -147,9 +124,8 @@ static MorphCategory category(const QWidget *w)
static QStringList classesOfCategory(MorphCategory cat)
{
- typedef QMap<MorphCategory, QStringList> CandidateCache;
- static CandidateCache candidateCache;
- CandidateCache::iterator it = candidateCache.find(cat);
+ static QMap<MorphCategory, QStringList> candidateCache;
+ auto it = candidateCache.find(cat);
if (it == candidateCache.end()) {
it = candidateCache.insert(cat, QStringList());
QStringList &l = it.value();
@@ -159,29 +135,29 @@ static QStringList classesOfCategory(MorphCategory cat)
case MorphSimpleContainer:
// Do not generally allow to morph into a layout.
// This can be risky in case of container pages,etc.
- l << QStringLiteral("QWidget") << QStringLiteral("QFrame") << QStringLiteral("QGroupBox");
+ l << u"QWidget"_s << u"QFrame"_s << u"QGroupBox"_s;
break;
case MorphPageContainer:
- l << QStringLiteral("QTabWidget") << QStringLiteral("QStackedWidget") << QStringLiteral("QToolBox");
+ l << u"QTabWidget"_s << u"QStackedWidget"_s << u"QToolBox"_s;
break;
case MorphItemView:
- l << QStringLiteral("QListView") << QStringLiteral("QListWidget")
- << QStringLiteral("QTreeView") << QStringLiteral("QTreeWidget")
- << QStringLiteral("QTableView") << QStringLiteral("QTableWidget")
- << QStringLiteral("QColumnView");
+ l << u"QListView"_s << u"QListWidget"_s
+ << u"QTreeView"_s << u"QTreeWidget"_s
+ << u"QTableView"_s << u"QTableWidget"_s
+ << u"QColumnView"_s;
break;
case MorphButton:
- l << QStringLiteral("QCheckBox") << QStringLiteral("QRadioButton")
- << QStringLiteral("QPushButton") << QStringLiteral("QToolButton")
- << QStringLiteral("QCommandLinkButton");
+ l << u"QCheckBox"_s << u"QRadioButton"_s
+ << u"QPushButton"_s << u"QToolButton"_s
+ << u"QCommandLinkButton"_s;
break;
case MorphSpinBox:
- l << QStringLiteral("QDateTimeEdit") << QStringLiteral("QDateEdit")
- << QStringLiteral("QTimeEdit")
- << QStringLiteral("QSpinBox") << QStringLiteral("QDoubleSpinBox");
+ l << u"QDateTimeEdit"_s << u"QDateEdit"_s
+ << u"QTimeEdit"_s
+ << u"QSpinBox"_s << u"QDoubleSpinBox"_s;
break;
case MorphTextEdit:
- l << QStringLiteral("QTextEdit") << QStringLiteral("QPlainTextEdit") << QStringLiteral("QTextBrowser");
+ l << u"QTextEdit"_s << u"QPlainTextEdit"_s << u"QTextBrowser"_s;
break;
}
}
@@ -211,9 +187,9 @@ static QString suggestObjectName(const QString &oldClassName, const QString &new
{
QString oldClassPart = oldClassName;
QString newClassPart = newClassName;
- if (oldClassPart.startsWith(QLatin1Char('Q')))
+ if (oldClassPart.startsWith(u'Q'))
oldClassPart.remove(0, 1);
- if (newClassPart.startsWith(QLatin1Char('Q')))
+ if (newClassPart.startsWith(u'Q'))
newClassPart.remove(0, 1);
QString newName = oldName;
@@ -301,7 +277,7 @@ bool MorphWidgetCommand::addMorphMacro(QDesignerFormWindowInterface *fw, QWidget
// restore buddy using the QByteArray name.
if (buddyLabel) {
SetPropertyCommand *buddyCmd = new SetPropertyCommand(fw);
- buddyCmd->init(buddyLabel, QStringLiteral("buddy"), QVariant(newWidgetName.toUtf8()));
+ buddyCmd->init(buddyLabel, u"buddy"_s, QVariant(newWidgetName.toUtf8()));
us->push(buddyCmd);
}
us->endMacro();
@@ -341,14 +317,13 @@ bool MorphWidgetCommand::init(QWidget *widget, const QString &newClassName)
// If the target has a container extension, we add enough new pages to take
// up the children of the before widget
if (QDesignerContainerExtension* c = qt_extension<QDesignerContainerExtension*>(core->extensionManager(), m_afterWidget)) {
- if (const int pageCount = childContainers(core, m_beforeWidget).size()) {
- const QString qWidget = QStringLiteral("QWidget");
+ if (const auto pageCount = childContainers(core, m_beforeWidget).size()) {
const QString containerName = m_afterWidget->objectName();
- for (int i = 0; i < pageCount; i++) {
+ for (qsizetype i = 0; i < pageCount; ++i) {
QString name = containerName;
- name += QStringLiteral("Page");
+ name += "Page"_L1;
name += QString::number(i + 1);
- QWidget *page = core->widgetFactory()->createWidget(qWidget);
+ QWidget *page = core->widgetFactory()->createWidget(u"QWidget"_s);
page->setObjectName(name);
fw->ensureUniqueObjectName(page);
c->addWidget(page);
@@ -360,12 +335,11 @@ bool MorphWidgetCommand::init(QWidget *widget, const QString &newClassName)
// Copy over applicable properties
const QDesignerPropertySheetExtension *beforeSheet = qt_extension<QDesignerPropertySheetExtension*>(core->extensionManager(), widget);
QDesignerPropertySheetExtension *afterSheet = qt_extension<QDesignerPropertySheetExtension*>(core->extensionManager(), m_afterWidget);
- const QString objectNameProperty = QStringLiteral("objectName");
const int count = beforeSheet->count();
for (int i = 0; i < count; i++)
if (beforeSheet->isVisible(i) && beforeSheet->isChanged(i)) {
const QString name = beforeSheet->propertyName(i);
- if (name != objectNameProperty) {
+ if (name != "objectName"_L1) {
const int afterIndex = afterSheet->indexOf(name);
if (afterIndex != -1 && afterSheet->isVisible(afterIndex) && afterSheet->propertyGroup(afterIndex) == beforeSheet->propertyGroup(i)) {
afterSheet->setProperty(i, beforeSheet->property(i));
@@ -406,8 +380,8 @@ void MorphWidgetCommand::morph(QWidget *before, QWidget *after)
QWidgetList beforeChildContainers = childContainers(fw->core(), before);
QWidgetList afterChildContainers = childContainers(fw->core(), after);
Q_ASSERT(beforeChildContainers.size() == afterChildContainers.size());
- const int childContainerCount = beforeChildContainers.size();
- for (int i = 0; i < childContainerCount; i++) {
+ const auto childContainerCount = beforeChildContainers.size();
+ for (qsizetype i = 0; i < childContainerCount; ++i) {
QWidget *beforeChildContainer = beforeChildContainers.at(i);
QWidget *afterChildContainer = afterChildContainers.at(i);
if (QLayout *childLayout = beforeChildContainer->layout()) {
@@ -507,11 +481,11 @@ bool MorphWidgetCommand::canMorph(QDesignerFormWindowInterface *fw, QWidget *w,
return true;
// Check children. All child containers must be non-laid-out or have managed layouts
const QWidgetList pages = childContainers(core, w);
- const int pageCount = pages.size();
+ const auto pageCount = pages.size();
if (ptrToChildContainerCount)
*ptrToChildContainerCount = pageCount;
if (pageCount) {
- for (int i = 0; i < pageCount; i++)
+ for (qsizetype i = 0; i < pageCount; ++i)
if (QLayout *cl = pages.at(i)->layout())
if (!core->metaDataBase()->item(cl))
return false;
@@ -598,10 +572,8 @@ bool MorphMenu::populateMenu(QWidget *w, QDesignerFormWindowInterface *fw)
}
// Add actions
- const QStringList::const_iterator cend = c.constEnd();
- for (QStringList::const_iterator it = c.constBegin(); it != cend; ++it) {
- if (*it != oldClassName) {
- const QString className = *it;
+ for (const auto &className : c) {
+ if (className != oldClassName) {
m_menu->addAction(className,
this, [this, className] { this->slotMorph(className); });
}
diff --git a/src/designer/src/lib/shared/morphmenu_p.h b/src/designer/src/lib/shared/morphmenu_p.h
index eba1bdf3a..dbd94f6ea 100644
--- a/src/designer/src/lib/shared/morphmenu_p.h
+++ b/src/designer/src/lib/shared/morphmenu_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/newactiondialog.cpp b/src/designer/src/lib/shared/newactiondialog.cpp
index d5380bfcb..2aea8bb57 100644
--- a/src/designer/src/lib/shared/newactiondialog.cpp
+++ b/src/designer/src/lib/shared/newactiondialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "newactiondialog_p.h"
#include "ui_newactiondialog.h"
@@ -37,10 +12,13 @@
#include <QtDesigner/abstractformwindow.h>
#include <QtDesigner/abstractformeditor.h>
+#include <QtCore/QMetaEnum>
#include <QtWidgets/qpushbutton.h>
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
// Returns a combination of ChangeMask flags
unsigned ActionData::compare(const ActionData &rhs) const
@@ -58,6 +36,8 @@ unsigned ActionData::compare(const ActionData &rhs) const
rc |= CheckableChanged;
if (keysequence != rhs.keysequence)
rc |= KeysequenceChanged ;
+ if (menuRole.value != rhs.menuRole.value)
+ rc |= MenuRoleChanged ;
return rc;
}
@@ -72,12 +52,36 @@ NewActionDialog::NewActionDialog(ActionEditor *parent) :
m_ui->tooltipEditor->setTextPropertyValidationMode(ValidationRichText);
connect(m_ui->toolTipToolButton, &QAbstractButton::clicked, this, &NewActionDialog::slotEditToolTip);
+ connect(m_ui->editActionText, &QLineEdit::textEdited,
+ this, &NewActionDialog::onEditActionTextTextEdited);
+ connect(m_ui->editObjectName, &QLineEdit::textEdited,
+ this, &NewActionDialog::onEditObjectNameTextEdited);
- m_ui->keysequenceResetToolButton->setIcon(createIconSet(QStringLiteral("resetproperty.png")));
+ m_ui->keysequenceResetToolButton->setIcon(createIconSet("resetproperty.png"_L1));
connect(m_ui->keysequenceResetToolButton, &QAbstractButton::clicked,
this, &NewActionDialog::slotResetKeySequence);
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
+ // Clear XDG icon once a theme enum is chosen and vv.
+ auto *iconThemeEnumEditor = m_ui->iconThemeEnumEditor;
+ auto *iconThemeEditor = m_ui->iconThemeEditor;
+ connect(iconThemeEnumEditor, &IconThemeEnumEditor::edited,
+ this, [iconThemeEditor](int i) {
+ if (i >= 0)
+ iconThemeEditor->reset();
+ });
+ connect(iconThemeEditor, &IconThemeEditor::edited,
+ this, [iconThemeEnumEditor](const QString &t) {
+ if (!t.isEmpty())
+ iconThemeEnumEditor->reset();
+ });
+
+ const auto menuRoles = QMetaEnum::fromType<QAction::MenuRole>();
+ for (int i = 0; i < menuRoles.keyCount(); i++) {
+ const auto key = menuRoles.key(i);
+ const auto value = menuRoles.value(i);
+ m_ui->menuRole->addItem(QLatin1StringView(key), value);
+ }
+
focusText();
updateButtons();
@@ -121,6 +125,11 @@ void NewActionDialog::focusCheckable()
m_ui->checkableCheckBox->setFocus();
}
+void NewActionDialog::focusMenuRole()
+{
+ m_ui->menuRole->setFocus();
+}
+
QString NewActionDialog::actionText() const
{
return m_ui->editActionText->text();
@@ -138,9 +147,12 @@ ActionData NewActionDialog::actionData() const
rc.name = actionName();
rc.toolTip = m_ui->tooltipEditor->text();
rc.icon = m_ui->iconSelector->icon();
- rc.icon.setTheme(m_ui->iconThemeEditor->theme());
+ const int themeEnum = m_ui->iconThemeEnumEditor->themeEnum();
+ rc.icon.setThemeEnum(themeEnum);
+ rc.icon.setTheme(themeEnum == -1 ? m_ui->iconThemeEditor->theme() : QString{});
rc.checkable = m_ui->checkableCheckBox->checkState() == Qt::Checked;
rc.keysequence = PropertySheetKeySequenceValue(m_ui->keySequenceEdit->keySequence());
+ rc.menuRole.value = m_ui->menuRole->currentData().toInt();
return rc;
}
@@ -149,17 +161,19 @@ void NewActionDialog::setActionData(const ActionData &d)
m_ui->editActionText->setText(d.text);
m_ui->editObjectName->setText(d.name);
m_ui->iconSelector->setIcon(d.icon.unthemed());
+ m_ui->iconThemeEnumEditor->setThemeEnum(d.icon.themeEnum());
m_ui->iconThemeEditor->setTheme(d.icon.theme());
m_ui->tooltipEditor->setText(d.toolTip);
m_ui->keySequenceEdit->setKeySequence(d.keysequence.value());
m_ui->checkableCheckBox->setCheckState(d.checkable ? Qt::Checked : Qt::Unchecked);
+ m_ui->menuRole->setCurrentIndex(m_ui->menuRole->findData(d.menuRole.value));
// Suppress updating of the object name from the text for existing actions.
m_autoUpdateObjectName = d.name.isEmpty();
updateButtons();
}
-void NewActionDialog::on_editActionText_textEdited(const QString &text)
+void NewActionDialog::onEditActionTextTextEdited(const QString &text)
{
if (m_autoUpdateObjectName)
m_ui->editObjectName->setText(ActionEditor::actionTextToName(text));
@@ -167,7 +181,7 @@ void NewActionDialog::on_editActionText_textEdited(const QString &text)
updateButtons();
}
-void NewActionDialog::on_editObjectName_textEdited(const QString&)
+void NewActionDialog::onEditObjectNameTextEdited(const QString&)
{
updateButtons();
m_autoUpdateObjectName = false;
diff --git a/src/designer/src/lib/shared/newactiondialog.ui b/src/designer/src/lib/shared/newactiondialog.ui
index 005e6dc2d..7fd99842b 100644
--- a/src/designer/src/lib/shared/newactiondialog.ui
+++ b/src/designer/src/lib/shared/newactiondialog.ui
@@ -1,40 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+ <comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+</comment>
<class>qdesigner_internal::NewActionDialog</class>
<widget class="QDialog" name="qdesigner_internal::NewActionDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
- <width>366</width>
- <height>270</height>
+ <width>381</width>
+ <height>291</height>
</rect>
</property>
<property name="windowTitle">
@@ -110,20 +87,20 @@
</item>
</layout>
</item>
- <item row="3" column="0">
+ <item row="4" column="0">
<widget class="QLabel" name="iconThemeLabel">
<property name="text">
- <string>Icon th&amp;eme:</string>
+ <string>Icon &amp;XDG theme:</string>
</property>
<property name="buddy">
<cstring>iconThemeEditor</cstring>
</property>
</widget>
</item>
- <item row="3" column="1">
+ <item row="4" column="1">
<widget class="qdesigner_internal::IconThemeEditor" name="iconThemeEditor" native="true"/>
</item>
- <item row="4" column="0">
+ <item row="5" column="0">
<widget class="QLabel" name="iconLabel">
<property name="text">
<string>&amp;Icon:</string>
@@ -133,7 +110,7 @@
</property>
</widget>
</item>
- <item row="4" column="1">
+ <item row="5" column="1">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="qdesigner_internal::IconSelector" name="iconSelector" native="true"/>
@@ -153,14 +130,14 @@
</item>
</layout>
</item>
- <item row="5" column="1">
+ <item row="6" column="1">
<widget class="QCheckBox" name="checkableCheckBox">
<property name="text">
<string/>
</property>
</widget>
</item>
- <item row="5" column="0">
+ <item row="6" column="0">
<widget class="QLabel" name="checkableLabel">
<property name="text">
<string>&amp;Checkable:</string>
@@ -170,7 +147,7 @@
</property>
</widget>
</item>
- <item row="6" column="0">
+ <item row="7" column="0">
<widget class="QLabel" name="shortcutLabel">
<property name="text">
<string>&amp;Shortcut:</string>
@@ -180,10 +157,10 @@
</property>
</widget>
</item>
- <item row="6" column="1">
+ <item row="7" column="1">
<layout class="QHBoxLayout" name="keysequenceLayout">
<item>
- <widget class="QKeySequenceEdit" name="keySequenceEdit" native="true">
+ <widget class="QKeySequenceEdit" name="keySequenceEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
@@ -201,6 +178,32 @@
</item>
</layout>
</item>
+ <item row="8" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>&amp;Menu role:</string>
+ </property>
+ <property name="buddy">
+ <cstring>menuRole</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="1">
+ <widget class="QComboBox" name="menuRole"/>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="iconThemeEnumLabel">
+ <property name="text">
+ <string>Icon &amp;theme:</string>
+ </property>
+ <property name="buddy">
+ <cstring>iconThemeEnumEditor</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="qdesigner_internal::IconThemeEnumEditor" name="iconThemeEnumEditor" native="true"/>
+ </item>
</layout>
</item>
<item>
@@ -254,6 +257,12 @@
<header>iconselector_p.h</header>
<container>1</container>
</customwidget>
+ <customwidget>
+ <class>qdesigner_internal::IconThemeEnumEditor</class>
+ <extends>QWidget</extends>
+ <header>iconselector_p.h</header>
+ <container>1</container>
+ </customwidget>
</customwidgets>
<tabstops>
<tabstop>editActionText</tabstop>
diff --git a/src/designer/src/lib/shared/newactiondialog_p.h b/src/designer/src/lib/shared/newactiondialog_p.h
index f6e3b1dd7..de42d16f0 100644
--- a/src/designer/src/lib/shared/newactiondialog_p.h
+++ b/src/designer/src/lib/shared/newactiondialog_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef NEWACTIONDIALOG_P_H
#define NEWACTIONDIALOG_P_H
@@ -44,6 +19,7 @@
#include <QtWidgets/qdialog.h>
#include <QtGui/qkeysequence.h>
+#include <QtCore/qcompare.h>
QT_BEGIN_NAMESPACE
@@ -59,7 +35,8 @@ struct ActionData {
enum ChangeMask {
TextChanged = 0x1, NameChanged = 0x2, ToolTipChanged = 0x4,
- IconChanged = 0x8, CheckableChanged = 0x10, KeysequenceChanged = 0x20
+ IconChanged = 0x8, CheckableChanged = 0x10, KeysequenceChanged = 0x20,
+ MenuRoleChanged = 0x40
};
// Returns a combination of ChangeMask flags
@@ -71,10 +48,14 @@ struct ActionData {
PropertySheetIconValue icon;
bool checkable{false};
PropertySheetKeySequenceValue keysequence;
-};
+ PropertySheetFlagValue menuRole;
-inline bool operator==(const ActionData &a1, const ActionData &a2) { return a1.compare(a2) == 0u; }
-inline bool operator!=(const ActionData &a1, const ActionData &a2) { return a1.compare(a2) != 0u; }
+ friend bool comparesEqual(const ActionData &lhs, const ActionData &rhs) noexcept
+ {
+ return lhs.compare(rhs) == 0;
+ }
+ Q_DECLARE_EQUALITY_COMPARABLE(ActionData)
+};
class NewActionDialog: public QDialog
{
@@ -95,10 +76,12 @@ public slots:
void focusTooltip();
void focusShortcut();
void focusCheckable();
+ void focusMenuRole();
private slots:
- void on_editActionText_textEdited(const QString &text);
- void on_editObjectName_textEdited(const QString &text);
+ void onEditActionTextTextEdited(const QString &text);
+ void onEditObjectNameTextEdited(const QString &text);
+
void slotEditToolTip();
void slotResetKeySequence();
diff --git a/src/designer/src/lib/shared/newformwidget.cpp b/src/designer/src/lib/shared/newformwidget.cpp
index bef697266..1cf1c8bfb 100644
--- a/src/designer/src/lib/shared/newformwidget.cpp
+++ b/src/designer/src/lib/shared/newformwidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "newformwidget_p.h"
#include "ui_newformwidget.h"
@@ -57,6 +32,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
enum { profileComboIndexOffset = 1 };
enum { debugNewFormWidget = 0 };
@@ -67,14 +44,14 @@ enum NewForm_CustomRole {
ClassNameRole = Qt::UserRole + 101
};
-static const char *newFormObjectNameC = "Form";
+static constexpr auto newFormObjectNameC = "Form"_L1;
// Create a form name for an arbitrary class. If it is Qt, qtify it,
// else return "Form".
static QString formName(const QString &className)
{
- if (!className.startsWith(QLatin1Char('Q')))
- return QLatin1String(newFormObjectNameC);
+ if (!className.startsWith(u'Q'))
+ return newFormObjectNameC;
QString rc = className;
rc.remove(0, 1);
return rc;
@@ -129,19 +106,32 @@ NewFormWidget::NewFormWidget(QDesignerFormEditorInterface *core, QWidget *parent
m_currentItem(nullptr),
m_acceptedItem(nullptr)
{
+ // ### FIXME Qt 8: Remove (QTBUG-96005)
+#if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0)
+ QDesignerSharedSettings::migrateTemplates();
+#endif
+
m_ui->setupUi(this);
m_ui->treeWidget->setItemDelegate(new qdesigner_internal::SheetDelegate(m_ui->treeWidget, this));
m_ui->treeWidget->header()->hide();
m_ui->treeWidget->header()->setStretchLastSection(true);
m_ui->lblPreview->setBackgroundRole(QPalette::Base);
+
+ connect(m_ui->treeWidget, &QTreeWidget::itemActivated,
+ this, &NewFormWidget::treeWidgetItemActivated);
+ connect(m_ui->treeWidget, &QTreeWidget::currentItemChanged,
+ this, &NewFormWidget::treeWidgetCurrentItemChanged);
+ connect(m_ui->treeWidget, &QTreeWidget::itemPressed,
+ this, &NewFormWidget::treeWidgetItemPressed);
+
QDesignerSharedSettings settings(m_core);
- QString uiExtension = QStringLiteral("ui");
- QString templatePath = QStringLiteral(":/qt-project.org/designer/templates/forms");
+ QString uiExtension = u"ui"_s;
+ QString templatePath = u":/qt-project.org/designer/templates/forms"_s;
QDesignerLanguageExtension *lang = qt_extension<QDesignerLanguageExtension *>(core->extensionManager(), core);
if (lang) {
- templatePath = QStringLiteral(":/templates/forms");
+ templatePath = u":/templates/forms"_s;
uiExtension = lang->uiExtension();
}
@@ -151,9 +141,8 @@ NewFormWidget::NewFormWidget(QDesignerFormEditorInterface *core, QWidget *parent
loadFrom(templatePath, true, uiExtension, formTemplate, selectedItem);
// Additional template paths
const QStringList formTemplatePaths = settings.formTemplatePaths();
- const QStringList::const_iterator ftcend = formTemplatePaths.constEnd();
- for (QStringList::const_iterator it = formTemplatePaths.constBegin(); it != ftcend; ++it)
- loadFrom(*it, false, uiExtension, formTemplate, selectedItem);
+ for (const auto &ftp : formTemplatePaths)
+ loadFrom(ftp, false, uiExtension, formTemplate, selectedItem);
// Widgets/custom widgets
if (!lang) {
@@ -184,7 +173,7 @@ NewFormWidget::NewFormWidget(QDesignerFormEditorInterface *core, QWidget *parent
if (m_deviceProfiles.isEmpty()) {
m_ui->profileComboBox->setEnabled(false);
} else {
- for (const auto &deviceProfile : qAsConst(m_deviceProfiles))
+ for (const auto &deviceProfile : std::as_const(m_deviceProfiles))
m_ui->profileComboBox->addItem(deviceProfile.name());
const int ci = settings.currentDeviceProfileIndex();
if (ci >= 0)
@@ -210,7 +199,7 @@ NewFormWidget::~NewFormWidget()
delete m_ui;
}
-void NewFormWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *)
+void NewFormWidget::treeWidgetCurrentItemChanged(QTreeWidgetItem *current)
{
if (debugNewFormWidget)
qDebug() << Q_FUNC_INFO << current;
@@ -241,7 +230,7 @@ bool NewFormWidget::showCurrentItemPixmap()
return rc;
}
-void NewFormWidget::on_treeWidget_itemActivated(QTreeWidgetItem *item)
+void NewFormWidget::treeWidgetItemActivated(QTreeWidgetItem *item)
{
if (debugNewFormWidget)
qDebug() << Q_FUNC_INFO << item;
@@ -254,16 +243,16 @@ QPixmap NewFormWidget::formPreviewPixmap(const QTreeWidgetItem *item)
{
// Cache pixmaps per item/device profile
const ItemPixmapCacheKey cacheKey(item, profileComboIndex());
- ItemPixmapCache::iterator it = m_itemPixmapCache.find(cacheKey);
+ auto it = m_itemPixmapCache.find(cacheKey);
if (it == m_itemPixmapCache.end()) {
// file or string?
const QVariant fileName = item->data(0, TemplateNameRole);
QPixmap rc;
- if (fileName.type() == QVariant::String) {
+ if (fileName.metaType().id() == QMetaType::QString) {
rc = formPreviewPixmap(fileName.toString());
} else {
const QVariant classNameV = item->data(0, ClassNameRole);
- Q_ASSERT(classNameV.type() == QVariant::String);
+ Q_ASSERT(classNameV.metaType().id() == QMetaType::QString);
const QString className = classNameV.toString();
QByteArray data = qdesigner_internal::WidgetDataBase::formTemplate(m_core, className, formName(className)).toUtf8();
QBuffer buffer(&data);
@@ -399,13 +388,13 @@ void NewFormWidget::loadFrom(const QString &path, bool resourceFile, const QStri
return;
// Iterate through the directory and add the templates
- const QFileInfoList list = dir.entryInfoList(QStringList(QStringLiteral("*.") + uiExtension),
+ const QFileInfoList list = dir.entryInfoList(QStringList{"*."_L1 + uiExtension},
QDir::Files);
if (list.isEmpty())
return;
- const QChar separator = resourceFile ? QChar(QLatin1Char('/'))
+ const QChar separator = resourceFile ? QChar(u'/')
: QDir::separator();
QTreeWidgetItem *root = new QTreeWidgetItem(m_ui->treeWidget);
root->setFlags(root->flags() & ~Qt::ItemIsSelectable);
@@ -421,22 +410,19 @@ void NewFormWidget::loadFrom(const QString &path, bool resourceFile, const QStri
visiblePath = QDir::toNativeSeparators(visiblePath);
}
- const QChar underscore = QLatin1Char('_');
- const QChar blank = QLatin1Char(' ');
- root->setText(0, visiblePath.replace(underscore, blank));
+ root->setText(0, visiblePath.replace(u'_', u' '));
root->setToolTip(0, path);
- const QFileInfoList::const_iterator lcend = list.constEnd();
- for (QFileInfoList::const_iterator it = list.constBegin(); it != lcend; ++it) {
- if (!it->isFile())
+ for (const auto &fi : list) {
+ if (!fi.isFile())
continue;
QTreeWidgetItem *item = new QTreeWidgetItem(root);
- const QString text = it->baseName().replace(underscore, blank);
+ const QString text = fi.baseName().replace(u'_', u' ');
if (selectedItemFound == nullptr && text == selectedItem)
selectedItemFound = item;
item->setText(0, text);
- item->setData(0, TemplateNameRole, it->absoluteFilePath());
+ item->setData(0, TemplateNameRole, fi.absoluteFilePath());
}
}
@@ -448,18 +434,16 @@ void NewFormWidget::loadFrom(const QString &title, const QStringList &nameList,
QTreeWidgetItem *root = new QTreeWidgetItem(m_ui->treeWidget);
root->setFlags(root->flags() & ~Qt::ItemIsSelectable);
root->setText(0, title);
- const QStringList::const_iterator cend = nameList.constEnd();
- for (QStringList::const_iterator it = nameList.constBegin(); it != cend; ++it) {
- const QString text = *it;
+ for (const auto &text : nameList) {
QTreeWidgetItem *item = new QTreeWidgetItem(root);
item->setText(0, text);
if (selectedItemFound == nullptr && text == selectedItem)
selectedItemFound = item;
- item->setData(0, ClassNameRole, *it);
+ item->setData(0, ClassNameRole, text);
}
}
-void NewFormWidget::on_treeWidget_itemPressed(QTreeWidgetItem *item)
+void NewFormWidget::treeWidgetItemPressed(QTreeWidgetItem *item)
{
if (item && !item->parent())
item->setExpanded(!item->isExpanded());
@@ -492,7 +476,7 @@ QString NewFormWidget::itemToTemplate(const QTreeWidgetItem *item, QString *erro
const QSize size = templateSize();
// file name or string contents?
const QVariant templateFileName = item->data(0, TemplateNameRole);
- if (templateFileName.type() == QVariant::String) {
+ if (templateFileName.metaType().id() == QMetaType::QString) {
const QString fileName = templateFileName.toString();
// No fixed size: just open.
if (size.isNull())
@@ -501,7 +485,7 @@ QString NewFormWidget::itemToTemplate(const QTreeWidgetItem *item, QString *erro
const QFileInfo fiBase(fileName);
QString sizeFileName;
QTextStream(&sizeFileName) << fiBase.path() << QDir::separator()
- << size.width() << QLatin1Char('x') << size.height() << QDir::separator()
+ << size.width() << 'x' << size.height() << QDir::separator()
<< fiBase.fileName();
if (QFileInfo(sizeFileName).isFile())
return readAll(sizeFileName, errorMessage);
diff --git a/src/designer/src/lib/shared/newformwidget.ui b/src/designer/src/lib/shared/newformwidget.ui
index c45e2c00a..8cf6f638b 100644
--- a/src/designer/src/lib/shared/newformwidget.ui
+++ b/src/designer/src/lib/shared/newformwidget.ui
@@ -1,32 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+</comment>
<class>qdesigner_internal::NewFormWidget</class>
<widget class="QWidget" name="qdesigner_internal::NewFormWidget">
<property name="geometry">
diff --git a/src/designer/src/lib/shared/newformwidget_p.h b/src/designer/src/lib/shared/newformwidget_p.h
index c7a5e2a08..d9acbd2a3 100644
--- a/src/designer/src/lib/shared/newformwidget_p.h
+++ b/src/designer/src/lib/shared/newformwidget_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef NEWFORMWIDGET_H
#define NEWFORMWIDGET_H
@@ -86,9 +61,9 @@ public:
const qdesigner_internal::DeviceProfile &dp);
private slots:
- void on_treeWidget_itemActivated(QTreeWidgetItem *item);
- void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *);
- void on_treeWidget_itemPressed(QTreeWidgetItem *item);
+ void treeWidgetItemActivated(QTreeWidgetItem *item);
+ void treeWidgetCurrentItemChanged(QTreeWidgetItem *current);
+ void treeWidgetItemPressed(QTreeWidgetItem *item);
void slotDeviceProfileIndexChanged(int idx);
private:
@@ -112,7 +87,7 @@ private:
bool showCurrentItemPixmap();
// Pixmap cache (item, profile combo index)
- using ItemPixmapCacheKey = QPair<const QTreeWidgetItem *, int>;
+ using ItemPixmapCacheKey = std::pair<const QTreeWidgetItem *, int>;
using ItemPixmapCache = QMap<ItemPixmapCacheKey, QPixmap>;
ItemPixmapCache m_itemPixmapCache;
diff --git a/src/designer/src/lib/shared/orderdialog.cpp b/src/designer/src/lib/shared/orderdialog.cpp
index 51389a974..be94b512d 100644
--- a/src/designer/src/lib/shared/orderdialog.cpp
+++ b/src/designer/src/lib/shared/orderdialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "orderdialog_p.h"
#include "iconloader_p.h"
@@ -38,6 +13,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
// OrderDialog: Used to reorder the pages of QStackedWidget and QToolBox.
// Provides up and down buttons as well as DnD via QAbstractItemView::InternalMove mode
namespace qdesigner_internal {
@@ -48,9 +25,8 @@ OrderDialog::OrderDialog(QWidget *parent) :
m_format(PageOrderFormat)
{
m_ui->setupUi(this);
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
- m_ui->upButton->setIcon(createIconSet(QString::fromUtf8("up.png")));
- m_ui->downButton->setIcon(createIconSet(QString::fromUtf8("down.png")));
+ m_ui->upButton->setIcon(createIconSet("up.png"_L1));
+ m_ui->downButton->setIcon(createIconSet("down.png"_L1));
m_ui->buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
connect(m_ui->buttonBox->button(QDialogButtonBox::Reset), &QAbstractButton::clicked,
this, &OrderDialog::slotReset);
@@ -59,6 +35,11 @@ OrderDialog::OrderDialog(QWidget *parent) :
connect(m_ui->pageList->model(), &QAbstractItemModel::rowsRemoved,
this, &OrderDialog::slotEnableButtonsAfterDnD);
+ connect(m_ui->upButton, &QAbstractButton::clicked, this, &OrderDialog::upButtonClicked);
+ connect(m_ui->downButton, &QAbstractButton::clicked, this, &OrderDialog::downButtonClicked);
+ connect(m_ui->pageList, &QListWidget::currentRowChanged,
+ this, &OrderDialog::pageListCurrentRowChanged);
+
m_ui->upButton->setEnabled(false);
m_ui->downButton->setEnabled(false);
}
@@ -79,17 +60,16 @@ void OrderDialog::setPageList(const QWidgetList &pages)
// The old index is set as user data on the item instead of the QWidget*
// because DnD is enabled which requires the user data to serializable
m_orderMap.clear();
- const int count = pages.count();
- for (int i=0; i < count; ++i)
- m_orderMap.insert(i, pages.at(i));
+ const qsizetype count = pages.size();
+ for (qsizetype i = 0; i < count; ++i)
+ m_orderMap.insert(int(i), pages.at(i));
buildList();
}
void OrderDialog::buildList()
{
m_ui->pageList->clear();
- const OrderMap::const_iterator cend = m_orderMap.constEnd();
- for (OrderMap::const_iterator it = m_orderMap.constBegin(); it != cend; ++it) {
+ for (auto it = m_orderMap.cbegin(), cend = m_orderMap.cend(); it != cend; ++it) {
QListWidgetItem *item = new QListWidgetItem();
const int index = it.key();
switch (m_format) {
@@ -124,7 +104,7 @@ QWidgetList OrderDialog::pageList() const
return rc;
}
-void OrderDialog::on_upButton_clicked()
+void OrderDialog::upButtonClicked()
{
const int row = m_ui->pageList->currentRow();
if (row <= 0)
@@ -134,7 +114,7 @@ void OrderDialog::on_upButton_clicked()
m_ui->pageList->setCurrentRow(row - 1);
}
-void OrderDialog::on_downButton_clicked()
+void OrderDialog::downButtonClicked()
{
const int row = m_ui->pageList->currentRow();
if (row == -1 || row == m_ui->pageList->count() - 1)
@@ -149,7 +129,7 @@ void OrderDialog::slotEnableButtonsAfterDnD()
enableButtons(m_ui->pageList->currentRow());
}
-void OrderDialog::on_pageList_currentRowChanged(int r)
+void OrderDialog::pageListCurrentRowChanged(int r)
{
enableButtons(r);
}
diff --git a/src/designer/src/lib/shared/orderdialog.ui b/src/designer/src/lib/shared/orderdialog.ui
index d56cb65cd..0af976dfe 100644
--- a/src/designer/src/lib/shared/orderdialog.ui
+++ b/src/designer/src/lib/shared/orderdialog.ui
@@ -1,31 +1,8 @@
<ui version="4.0" >
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+</comment>
<class>qdesigner_internal::OrderDialog</class>
<widget class="QDialog" name="qdesigner_internal::OrderDialog" >
<property name="geometry" >
diff --git a/src/designer/src/lib/shared/orderdialog_p.h b/src/designer/src/lib/shared/orderdialog_p.h
index 5c28be6e5..2fb506f07 100644
--- a/src/designer/src/lib/shared/orderdialog_p.h
+++ b/src/designer/src/lib/shared/orderdialog_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -78,9 +53,9 @@ public:
Format format() const { return m_format; }
private slots:
- void on_upButton_clicked();
- void on_downButton_clicked();
- void on_pageList_currentRowChanged(int row);
+ void upButtonClicked();
+ void downButtonClicked();
+ void pageListCurrentRowChanged(int row);
void slotEnableButtonsAfterDnD();
void slotReset();
@@ -88,8 +63,7 @@ private:
void buildList();
void enableButtons(int r);
- typedef QMap<int, QWidget*> OrderMap;
- OrderMap m_orderMap;
+ QMap<int, QWidget *> m_orderMap;
Ui::OrderDialog* m_ui;
Format m_format;
};
diff --git a/src/designer/src/lib/shared/plaintexteditor.cpp b/src/designer/src/lib/shared/plaintexteditor.cpp
index 91f842f62..ad6708c9f 100644
--- a/src/designer/src/lib/shared/plaintexteditor.cpp
+++ b/src/designer/src/lib/shared/plaintexteditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "plaintexteditor_p.h"
@@ -38,9 +13,10 @@
QT_BEGIN_NAMESPACE
-static const char *PlainTextDialogC = "PlainTextDialog";
-static const char *Geometry = "Geometry";
+using namespace Qt::StringLiterals;
+static constexpr auto PlainTextDialogC = "PlainTextDialog"_L1;
+static constexpr auto PlainTextEditorGeometryC = "Geometry"_L1;
namespace qdesigner_internal {
@@ -50,7 +26,6 @@ PlainTextEditorDialog::PlainTextEditorDialog(QDesignerFormEditorInterface *core,
m_core(core)
{
setWindowTitle(tr("Edit text"));
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
QVBoxLayout *vlayout = new QVBoxLayout(this);
vlayout->addWidget(m_editor);
@@ -63,10 +38,10 @@ PlainTextEditorDialog::PlainTextEditorDialog(QDesignerFormEditorInterface *core,
vlayout->addWidget(buttonBox);
QDesignerSettingsInterface *settings = core->settingsManager();
- settings->beginGroup(QLatin1String(PlainTextDialogC));
+ settings->beginGroup(PlainTextDialogC);
- if (settings->contains(QLatin1String(Geometry)))
- restoreGeometry(settings->value(QLatin1String(Geometry)).toByteArray());
+ if (settings->contains(PlainTextEditorGeometryC))
+ restoreGeometry(settings->value(PlainTextEditorGeometryC).toByteArray());
settings->endGroup();
}
@@ -74,9 +49,9 @@ PlainTextEditorDialog::PlainTextEditorDialog(QDesignerFormEditorInterface *core,
PlainTextEditorDialog::~PlainTextEditorDialog()
{
QDesignerSettingsInterface *settings = m_core->settingsManager();
- settings->beginGroup(QLatin1String(PlainTextDialogC));
+ settings->beginGroup(PlainTextDialogC);
- settings->setValue(QLatin1String(Geometry), saveGeometry());
+ settings->setValue(PlainTextEditorGeometryC, saveGeometry());
settings->endGroup();
}
diff --git a/src/designer/src/lib/shared/plaintexteditor_p.h b/src/designer/src/lib/shared/plaintexteditor_p.h
index b628b8c0d..988a5f5cb 100644
--- a/src/designer/src/lib/shared/plaintexteditor_p.h
+++ b/src/designer/src/lib/shared/plaintexteditor_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/plugindialog.cpp b/src/designer/src/lib/shared/plugindialog.cpp
index cb6ac6219..fb4ec4e6a 100644
--- a/src/designer/src/lib/shared/plugindialog.cpp
+++ b/src/designer/src/lib/shared/plugindialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "plugindialog_p.h"
@@ -37,14 +12,26 @@
#include <QtUiPlugin/customwidget.h>
+#include <QtWidgets/qaction.h>
#include <QtWidgets/qstyle.h>
#include <QtWidgets/qheaderview.h>
+#include <QtWidgets/qmenu.h>
#include <QtWidgets/qpushbutton.h>
+
+#if QT_CONFIG(clipboard)
+# include <QtGui/QClipboard>
+#endif
+
+#include <QtCore/qdir.h>
#include <QtCore/qfileinfo.h>
#include <QtCore/qpluginloader.h>
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
+enum { ErrorItemRole = Qt::UserRole + 1 };
+
namespace qdesigner_internal {
PluginDialog::PluginDialog(QDesignerFormEditorInterface *core, QWidget *parent)
@@ -64,6 +51,9 @@ PluginDialog::PluginDialog(QDesignerFormEditorInterface *core, QWidget *parent)
ui.treeWidget->setSelectionMode(QAbstractItemView::NoSelection);
ui.treeWidget->setHeaderLabels(headerLabels);
ui.treeWidget->header()->hide();
+ ui.treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
+ connect(ui.treeWidget, &QWidget::customContextMenuRequested,
+ this, &PluginDialog::treeWidgetContextMenu);
interfaceIcon.addPixmap(style()->standardPixmap(QStyle::SP_DirOpenIcon),
QIcon::Normal, QIcon::On);
@@ -97,7 +87,7 @@ void PluginDialog::populateTreeWidget()
QPluginLoader loader(fileName);
const QFileInfo fileInfo(fileName);
- QTreeWidgetItem *pluginItem = setPluginItem(topLevelItem, fileInfo.fileName(), boldFont);
+ QTreeWidgetItem *pluginItem = setPluginItem(topLevelItem, fileInfo, boldFont);
if (QObject *plugin = loader.instance()) {
if (const QDesignerCustomWidgetCollectionInterface *c = qobject_cast<QDesignerCustomWidgetCollectionInterface*>(plugin)) {
@@ -118,16 +108,21 @@ void PluginDialog::populateTreeWidget()
const QFont boldFont = topLevelItem->font(0);
for (const QString &plugin : notLoadedPlugins) {
const QString failureReason = pluginManager->failureReason(plugin);
- QTreeWidgetItem *pluginItem = setPluginItem(topLevelItem, plugin, boldFont);
- setItem(pluginItem, failureReason, failureReason, QString(), QIcon());
+ const QString htmlFailureReason = "<html><head/><body><p>"_L1
+ + failureReason.toHtmlEscaped()
+ + "</p></body></html>"_L1;
+ QTreeWidgetItem *pluginItem = setPluginItem(topLevelItem, QFileInfo(plugin), boldFont);
+ auto errorItem = setItem(pluginItem, failureReason,
+ htmlFailureReason, QString(), QIcon());
+ errorItem->setData(0, ErrorItemRole, QVariant(true));
}
}
if (ui.treeWidget->topLevelItemCount() == 0) {
- ui.label->setText(tr("Qt Designer couldn't find any plugins"));
+ ui.label->setText(tr("Qt Widgets Designer couldn't find any plugins"));
ui.treeWidget->hide();
} else {
- ui.label->setText(tr("Qt Designer found the following plugins"));
+ ui.label->setText(tr("Qt Widgets Designer found the following plugins"));
}
}
@@ -146,25 +141,31 @@ QTreeWidgetItem* PluginDialog::setTopLevelItem(const QString &itemName)
}
QTreeWidgetItem* PluginDialog::setPluginItem(QTreeWidgetItem *topLevelItem,
- const QString &itemName, const QFont &font)
+ const QFileInfo &file, const QFont &font)
{
QTreeWidgetItem *pluginItem = new QTreeWidgetItem(topLevelItem);
+ QString toolTip = QDir::toNativeSeparators(file.absoluteFilePath());
+ if (file.exists())
+ toolTip += u'\n' + file.lastModified().toString();
pluginItem->setFont(0, font);
- pluginItem->setText(0, itemName);
+ pluginItem->setText(0, file.fileName());
+ pluginItem->setToolTip(0, toolTip);
pluginItem->setExpanded(true);
pluginItem->setIcon(0, style()->standardPixmap(QStyle::SP_DirOpenIcon));
return pluginItem;
}
-void PluginDialog::setItem(QTreeWidgetItem *pluginItem, const QString &name,
- const QString &toolTip, const QString &whatsThis, const QIcon &icon)
+QTreeWidgetItem *PluginDialog::setItem(QTreeWidgetItem *pluginItem, const QString &name,
+ const QString &toolTip, const QString &whatsThis,
+ const QIcon &icon)
{
QTreeWidgetItem *item = new QTreeWidgetItem(pluginItem);
item->setText(0, name);
item->setToolTip(0, toolTip);
item->setWhatsThis(0, whatsThis);
item->setIcon(0, icon.isNull() ? qtLogoIcon() : icon);
+ return item;
}
void PluginDialog::updateCustomWidgetPlugins()
@@ -181,8 +182,27 @@ void PluginDialog::updateCustomWidgetPlugins()
populateTreeWidget();
}
+void PluginDialog::treeWidgetContextMenu(const QPoint &pos)
+{
+#if QT_CONFIG(clipboard)
+ const QTreeWidgetItem *item = ui.treeWidget->itemAt(pos);
+ if (item == nullptr || !item->data(0, ErrorItemRole).toBool())
+ return;
+ QMenu menu;
+ //: Copy error text
+ auto copyAction = menu.addAction(tr("Copy"));
+ auto chosenAction = menu.exec(ui.treeWidget->mapToGlobal(pos));
+ if (chosenAction == nullptr)
+ return;
+ if (chosenAction == copyAction)
+ QGuiApplication::clipboard()->setText(item->text(0));
+#else
+ Q_UNUSED(pos);
+#endif
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
#include "moc_plugindialog_p.cpp"
diff --git a/src/designer/src/lib/shared/plugindialog.ui b/src/designer/src/lib/shared/plugindialog.ui
index a05199342..39cf22c8b 100644
--- a/src/designer/src/lib/shared/plugindialog.ui
+++ b/src/designer/src/lib/shared/plugindialog.ui
@@ -1,32 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+</comment>
<class>PluginDialog</class>
<widget class="QDialog" name="PluginDialog">
<property name="geometry">
diff --git a/src/designer/src/lib/shared/plugindialog_p.h b/src/designer/src/lib/shared/plugindialog_p.h
index f51d044f8..cbdad6019 100644
--- a/src/designer/src/lib/shared/plugindialog_p.h
+++ b/src/designer/src/lib/shared/plugindialog_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PLUGINDIALOG_H
#define PLUGINDIALOG_H
@@ -44,6 +19,8 @@
QT_BEGIN_NAMESPACE
+class QFileInfo;
+
class QDesignerFormEditorInterface;
namespace qdesigner_internal {
@@ -56,17 +33,19 @@ public:
private slots:
void updateCustomWidgetPlugins();
+ void treeWidgetContextMenu(const QPoint &pos);
private:
void populateTreeWidget();
QTreeWidgetItem* setTopLevelItem(const QString &itemName);
QTreeWidgetItem* setPluginItem(QTreeWidgetItem *topLevelItem,
- const QString &itemName, const QFont &font);
- void setItem(QTreeWidgetItem *pluginItem, const QString &name,
- const QString &toolTip, const QString &whatsThis, const QIcon &icon);
+ const QFileInfo &file, const QFont &font);
+ QTreeWidgetItem *setItem(QTreeWidgetItem *pluginItem, const QString &name,
+ const QString &toolTip, const QString &whatsThis,
+ const QIcon &icon);
QDesignerFormEditorInterface *m_core;
- Ui::PluginDialog ui;
+ QT_PREPEND_NAMESPACE(Ui)::PluginDialog ui;
QIcon interfaceIcon;
QIcon featureIcon;
};
diff --git a/src/designer/src/lib/shared/pluginmanager.cpp b/src/designer/src/lib/shared/pluginmanager.cpp
index 88b581862..cc520997c 100644
--- a/src/designer/src/lib/shared/pluginmanager.cpp
+++ b/src/designer/src/lib/shared/pluginmanager.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "pluginmanager_p.h"
#include "qdesigner_utils_p.h"
@@ -50,21 +25,23 @@
#include <QtCore/qxmlstream.h>
-static const char *uiElementC = "ui";
-static const char *languageAttributeC = "language";
-static const char *widgetElementC = "widget";
-static const char *displayNameAttributeC = "displayname";
-static const char *classAttributeC = "class";
-static const char *customwidgetElementC = "customwidget";
-static const char *extendsElementC = "extends";
-static const char *addPageMethodC = "addpagemethod";
-static const char *propertySpecsC = "propertyspecifications";
-static const char *stringPropertySpecC = "stringpropertyspecification";
-static const char propertyToolTipC[] = "tooltip";
-static const char *stringPropertyNameAttrC = "name";
-static const char *stringPropertyTypeAttrC = "type";
-static const char *stringPropertyNoTrAttrC = "notr";
-static const char *jambiLanguageC = "jambi";
+using namespace Qt::StringLiterals;
+
+static constexpr auto uiElementC = "ui"_L1;
+static constexpr auto languageAttributeC = "language"_L1;
+static constexpr auto widgetElementC = "widget"_L1;
+static constexpr auto displayNameAttributeC = "displayname"_L1;
+static constexpr auto classAttributeC = "class"_L1;
+static constexpr auto customwidgetElementC = "customwidget"_L1;
+static constexpr auto extendsElementC = "extends"_L1;
+static constexpr auto addPageMethodC = "addpagemethod"_L1;
+static constexpr auto propertySpecsC = "propertyspecifications"_L1;
+static constexpr auto stringPropertySpecC = "stringpropertyspecification"_L1;
+static constexpr auto propertyToolTipC = "tooltip"_L1;
+static constexpr auto stringPropertyNameAttrC = "name"_L1;
+static constexpr auto stringPropertyTypeAttrC = "type"_L1;
+static constexpr auto stringPropertyNoTrAttrC = "notr"_L1;
+static constexpr auto jambiLanguageC = "jambi"_L1;
enum { debugPluginManager = 0 };
@@ -98,21 +75,10 @@ QStringList QDesignerPluginManager::defaultPluginPaths()
const QStringList path_list = QCoreApplication::libraryPaths();
- const QString designer = QStringLiteral("designer");
- for (const QString &path : path_list) {
- QString libPath = path;
- libPath += QDir::separator();
- libPath += designer;
- result.append(libPath);
- }
-
- QString homeLibPath = QDir::homePath();
- homeLibPath += QDir::separator();
- homeLibPath += QStringLiteral(".designer");
- homeLibPath += QDir::separator();
- homeLibPath += QStringLiteral("plugins");
+ for (const QString &path : path_list)
+ result.append(path + "/designer"_L1);
- result.append(homeLibPath);
+ result.append(qdesigner_internal::dataDirectory() + "/plugins"_L1);
return result;
}
@@ -122,11 +88,11 @@ QStringList QDesignerPluginManager::defaultPluginPaths()
static inline QString getDesignerLanguage(QDesignerFormEditorInterface *core)
{
if (QDesignerLanguageExtension *lang = qt_extension<QDesignerLanguageExtension *>(core->extensionManager(), core)) {
- if (lang->uiExtension() == QStringLiteral("jui"))
- return QLatin1String(jambiLanguageC);
- return QStringLiteral("unknown");
+ if (lang->uiExtension() == "jui"_L1)
+ return jambiLanguageC;
+ return u"unknown"_s;
}
- return QStringLiteral("c++");
+ return u"c++"_s;
}
// ---------------- QDesignerCustomWidgetSharedData
@@ -134,9 +100,7 @@ static inline QString getDesignerLanguage(QDesignerFormEditorInterface *core)
class QDesignerCustomWidgetSharedData : public QSharedData {
public:
// Type of a string property
- using StringPropertyType = QPair<qdesigner_internal::TextPropertyValidationMode, bool>;
- using StringPropertyTypeMap = QHash<QString, StringPropertyType>;
- using PropertyToolTipMap = QHash<QString, QString>;
+ using StringPropertyType = std::pair<qdesigner_internal::TextPropertyValidationMode, bool>;
explicit QDesignerCustomWidgetSharedData(const QString &thePluginPath) : pluginPath(thePluginPath) {}
void clearXML();
@@ -149,8 +113,8 @@ public:
QString xmlAddPageMethod;
QString xmlExtends;
- StringPropertyTypeMap xmlStringPropertyTypeMap;
- PropertyToolTipMap propertyToolTipMap;
+ QHash<QString, StringPropertyType> xmlStringPropertyTypeMap;
+ QHash<QString, QString> propertyToolTipMap;
};
void QDesignerCustomWidgetSharedData::clearXML()
@@ -222,7 +186,7 @@ QString QDesignerCustomWidgetData::pluginPath() const
bool QDesignerCustomWidgetData::xmlStringPropertyType(const QString &name, StringPropertyType *type) const
{
- QDesignerCustomWidgetSharedData::StringPropertyTypeMap::const_iterator it = m_d->xmlStringPropertyTypeMap.constFind(name);
+ const auto it = m_d->xmlStringPropertyTypeMap.constFind(name);
if (it == m_d->xmlStringPropertyTypeMap.constEnd()) {
*type = StringPropertyType(qdesigner_internal::ValidationRichText, true);
return false;
@@ -273,19 +237,19 @@ static inline QString msgAttributeMissing(const QString &name)
static qdesigner_internal::TextPropertyValidationMode typeStringToType(const QString &v, bool *ok)
{
*ok = true;
- if (v == QStringLiteral("multiline"))
+ if (v == "multiline"_L1)
return qdesigner_internal::ValidationMultiLine;
- if (v == QStringLiteral("richtext"))
+ if (v == "richtext"_L1)
return qdesigner_internal::ValidationRichText;
- if (v == QStringLiteral("stylesheet"))
+ if (v == "stylesheet"_L1)
return qdesigner_internal::ValidationStyleSheet;
- if (v == QStringLiteral("singleline"))
+ if (v == "singleline"_L1)
return qdesigner_internal::ValidationSingleLine;
- if (v == QStringLiteral("objectname"))
+ if (v == "objectname"_L1)
return qdesigner_internal::ValidationObjectName;
- if (v == QStringLiteral("objectnamescope"))
+ if (v == "objectnamescope"_L1)
return qdesigner_internal::ValidationObjectNameScope;
- if (v == QStringLiteral("url"))
+ if (v == "url"_L1)
return qdesigner_internal::ValidationURL;
*ok = false;
return qdesigner_internal::ValidationRichText;
@@ -295,12 +259,12 @@ static bool parsePropertySpecs(QXmlStreamReader &sr,
QDesignerCustomWidgetSharedData *data,
QString *errorMessage)
{
- const QString propertySpecs = QLatin1String(propertySpecsC);
- const QString stringPropertySpec = QLatin1String(stringPropertySpecC);
- const QString propertyToolTip = QLatin1String(propertyToolTipC);
- const QString stringPropertyTypeAttr = QLatin1String(stringPropertyTypeAttrC);
- const QString stringPropertyNoTrAttr = QLatin1String(stringPropertyNoTrAttrC);
- const QString stringPropertyNameAttr = QLatin1String(stringPropertyNameAttrC);
+ const QString propertySpecs = propertySpecsC;
+ const QString stringPropertySpec = stringPropertySpecC;
+ const QString propertyToolTip = propertyToolTipC;
+ const QString stringPropertyTypeAttr = stringPropertyTypeAttrC;
+ const QString stringPropertyNoTrAttr = stringPropertyNoTrAttrC;
+ const QString stringPropertyNameAttr = stringPropertyNameAttrC;
while (!sr.atEnd()) {
switch(sr.readNext()) {
@@ -320,7 +284,7 @@ static bool parsePropertySpecs(QXmlStreamReader &sr,
return false;
}
bool typeOk;
- const bool noTr = notrS == QStringLiteral("true") || notrS == QStringLiteral("1");
+ const bool noTr = notrS == "true"_L1 || notrS == "1"_L1;
QDesignerCustomWidgetSharedData::StringPropertyType v(typeStringToType(type, &typeOk), !noTr);
if (!typeOk) {
*errorMessage = QDesignerPluginManager::tr("'%1' is not a valid string property specification.").arg(type);
@@ -343,6 +307,7 @@ static bool parsePropertySpecs(QXmlStreamReader &sr,
case QXmlStreamReader::EndElement: // Outer </stringproperties>
if (sr.name() == propertySpecs)
return true;
+ break;
default:
break;
}
@@ -366,8 +331,8 @@ QDesignerCustomWidgetData::ParseResult
ParseResult rc = ParseOk;
// Parse for the (optional) <ui> or the first <widget> element
QStringList elements;
- elements.push_back(QLatin1String(uiElementC));
- elements.push_back(QLatin1String(widgetElementC));
+ elements.push_back(uiElementC);
+ elements.push_back(widgetElementC);
for (int i = 0; i < 2 && !foundWidget; i++) {
switch (findElement(elements, sr)) {
case FindError:
@@ -378,13 +343,13 @@ QDesignerCustomWidgetData::ParseResult
return ParseError;
case 0: { // <ui>
const QXmlStreamAttributes attributes = sr.attributes();
- data.xmlLanguage = attributes.value(QLatin1String(languageAttributeC)).toString();
- data.xmlDisplayName = attributes.value(QLatin1String(displayNameAttributeC)).toString();
+ data.xmlLanguage = attributes.value(languageAttributeC).toString();
+ data.xmlDisplayName = attributes.value(displayNameAttributeC).toString();
foundUI = true;
}
break;
case 1: // <widget>: Do some sanity checks
- data.xmlClassName = sr.attributes().value(QLatin1String(classAttributeC)).toString();
+ data.xmlClassName = sr.attributes().value(classAttributeC).toString();
if (data.xmlClassName.isEmpty()) {
*errorMessage = QDesignerPluginManager::tr("The class attribute for the class %1 is missing.").arg(name);
rc = ParseWarning;
@@ -402,7 +367,7 @@ QDesignerCustomWidgetData::ParseResult
if (!foundUI)
return rc;
elements.clear();
- elements.push_back(QLatin1String(customwidgetElementC));
+ elements.push_back(customwidgetElementC);
switch (findElement(elements, sr)) {
case FindError:
*errorMessage = msgXmlError(name, sr.errorString());
@@ -413,10 +378,7 @@ QDesignerCustomWidgetData::ParseResult
break;
}
// Find <extends>, <addPageMethod>, <stringproperties>
- elements.clear();
- elements.push_back(QLatin1String(extendsElementC));
- elements.push_back(QLatin1String(addPageMethodC));
- elements.push_back(QLatin1String(propertySpecsC));
+ elements = {extendsElementC, addPageMethodC, propertySpecsC};
while (true) {
switch (findElement(elements, sr)) {
case FindError:
@@ -453,7 +415,7 @@ QDesignerCustomWidgetData::ParseResult
class QDesignerPluginManagerPrivate {
public:
- using ClassNamePropertyNameKey = QPair<QString, QString>;
+ using ClassNamePropertyNameKey = std::pair<QString, QString>;
QDesignerPluginManagerPrivate(QDesignerFormEditorInterface *core);
@@ -461,7 +423,7 @@ class QDesignerPluginManagerPrivate {
bool addCustomWidget(QDesignerCustomWidgetInterface *c,
const QString &pluginPath,
const QString &designerLanguage);
- void addCustomWidgets(const QObject *o,
+ void addCustomWidgets(QObject *o,
const QString &pluginPath,
const QString &designerLanguage);
@@ -471,8 +433,7 @@ class QDesignerPluginManagerPrivate {
// TODO: QPluginLoader also caches invalid plugins -> This seems to be dead code
QStringList m_disabledPlugins;
- typedef QMap<QString, QString> FailedPluginMap;
- FailedPluginMap m_failedPlugins;
+ QMap<QString, QString> m_failedPlugins;
// Synced lists of custom widgets and their data. Note that the list
// must be ordered for collections to appear in order.
@@ -535,7 +496,7 @@ bool QDesignerPluginManagerPrivate::addCustomWidget(QDesignerCustomWidgetInterfa
// Check the plugin interface for either a custom widget or a collection and
// add all contained custom widgets.
-void QDesignerPluginManagerPrivate::addCustomWidgets(const QObject *o,
+void QDesignerPluginManagerPrivate::addCustomWidgets(QObject *o,
const QString &pluginPath,
const QString &designerLanguage)
{
@@ -543,7 +504,7 @@ void QDesignerPluginManagerPrivate::addCustomWidgets(const QObject *o,
addCustomWidget(c, pluginPath, designerLanguage);
return;
}
- if (const QDesignerCustomWidgetCollectionInterface *coll = qobject_cast<QDesignerCustomWidgetCollectionInterface*>(o)) {
+ if (QDesignerCustomWidgetCollectionInterface *coll = qobject_cast<QDesignerCustomWidgetCollectionInterface*>(o)) {
const auto &collCustomWidgets = coll->customWidgets();
for (QDesignerCustomWidgetInterface *c : collCustomWidgets)
addCustomWidget(c, pluginPath, designerLanguage);
@@ -555,12 +516,18 @@ void QDesignerPluginManagerPrivate::addCustomWidgets(const QObject *o,
// As of 4.4, the header will be distributed with the Eclipse plugin.
QDesignerPluginManager::QDesignerPluginManager(QDesignerFormEditorInterface *core) :
+ QDesignerPluginManager(QStringList{}, core)
+{
+}
+
+QDesignerPluginManager::QDesignerPluginManager(const QStringList &pluginPaths,
+ QDesignerFormEditorInterface *core) :
QObject(core),
m_d(new QDesignerPluginManagerPrivate(core))
{
- m_d->m_pluginPaths = defaultPluginPaths();
+ m_d->m_pluginPaths = pluginPaths.isEmpty() ? defaultPluginPaths() : pluginPaths;
const QSettings settings(qApp->organizationName(), QDesignerQSettings::settingsApplicationName());
- m_d->m_disabledPlugins = unique(settings.value(QStringLiteral("PluginManager/DisabledPlugins")).toStringList());
+ m_d->m_disabledPlugins = unique(settings.value("PluginManager/DisabledPlugins").toStringList());
// Register plugins
updateRegisteredPlugins();
@@ -595,15 +562,14 @@ QStringList QDesignerPluginManager::findPlugins(const QString &path)
// Load symbolic links but make sure all file names are unique as not
// to fall for something like 'libplugin.so.1 -> libplugin.so'
QStringList result;
- const QFileInfoList::const_iterator icend = infoList.constEnd();
- for (QFileInfoList::const_iterator it = infoList.constBegin(); it != icend; ++it) {
+ for (const auto &fi : infoList) {
QString fileName;
- if (it->isSymLink()) {
- const QFileInfo linkTarget = QFileInfo(it->symLinkTarget());
+ if (fi.isSymLink()) {
+ const QFileInfo linkTarget = QFileInfo(fi.symLinkTarget());
if (linkTarget.exists() && linkTarget.isFile())
fileName = linkTarget.absoluteFilePath();
} else {
- fileName = it->absoluteFilePath();
+ fileName = fi.absoluteFilePath();
}
if (!fileName.isEmpty() && QLibrary::isLibrary(fileName) && !result.contains(fileName))
result += fileName;
@@ -662,7 +628,7 @@ void QDesignerPluginManager::updateRegisteredPlugins()
if (debugPluginManager)
qDebug() << Q_FUNC_INFO;
m_d->m_registeredPlugins.clear();
- for (const QString &path : qAsConst(m_d->m_pluginPaths))
+ for (const QString &path : std::as_const(m_d->m_pluginPaths))
registerPath(path);
}
@@ -672,7 +638,7 @@ bool QDesignerPluginManager::registerNewPlugins()
qDebug() << Q_FUNC_INFO;
const int before = m_d->m_registeredPlugins.size();
- for (const QString &path : qAsConst(m_d->m_pluginPaths))
+ for (const QString &path : std::as_const(m_d->m_pluginPaths))
registerPath(path);
const bool newPluginsFound = m_d->m_registeredPlugins.size() > before;
// We force a re-initialize as Jambi collection might return
@@ -704,7 +670,7 @@ void QDesignerPluginManager::registerPlugin(const QString &plugin)
QPluginLoader loader(plugin);
if (loader.isLoaded() || loader.load()) {
m_d->m_registeredPlugins += plugin;
- QDesignerPluginManagerPrivate::FailedPluginMap::iterator fit = m_d->m_failedPlugins.find(plugin);
+ const auto fit = m_d->m_failedPlugins.find(plugin);
if (fit != m_d->m_failedPlugins.end())
m_d->m_failedPlugins.erase(fit);
return;
@@ -719,8 +685,8 @@ void QDesignerPluginManager::registerPlugin(const QString &plugin)
bool QDesignerPluginManager::syncSettings()
{
QSettings settings(qApp->organizationName(), QDesignerQSettings::settingsApplicationName());
- settings.beginGroup(QStringLiteral("PluginManager"));
- settings.setValue(QStringLiteral("DisabledPlugins"), m_d->m_disabledPlugins);
+ settings.beginGroup("PluginManager");
+ settings.setValue("DisabledPlugins", m_d->m_disabledPlugins);
settings.endGroup();
return settings.status() == QSettings::NoError;
}
@@ -743,7 +709,7 @@ void QDesignerPluginManager::ensureInitialized()
for (QObject *o : staticPluginObjects)
m_d->addCustomWidgets(o, staticPluginPath, designerLanguage);
}
- for (const QString &plugin : qAsConst(m_d->m_registeredPlugins)) {
+ for (const QString &plugin : std::as_const(m_d->m_registeredPlugins)) {
if (QObject *o = instance(plugin))
m_d->addCustomWidgets(o, plugin, designerLanguage);
}
@@ -767,8 +733,7 @@ QDesignerCustomWidgetData QDesignerPluginManager::customWidgetData(QDesignerCust
QDesignerCustomWidgetData QDesignerPluginManager::customWidgetData(const QString &name) const
{
- const int count = m_d->m_customWidgets.size();
- for (int i = 0; i < count; i++)
+ for (qsizetype i = 0, count = m_d->m_customWidgets.size(); i < count; ++i)
if (m_d->m_customWidgets.at(i)->name() == name)
return m_d->m_customWidgetData.at(i);
return QDesignerCustomWidgetData();
diff --git a/src/designer/src/lib/shared/pluginmanager_p.h b/src/designer/src/lib/shared/pluginmanager_p.h
index 373d0fe51..be0f4bfd7 100644
--- a/src/designer/src/lib/shared/pluginmanager_p.h
+++ b/src/designer/src/lib/shared/pluginmanager_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -61,7 +36,7 @@ class QDesignerCustomWidgetSharedData;
class QDESIGNER_SHARED_EXPORT QDesignerCustomWidgetData {
public:
// StringPropertyType: validation mode and translatable flag.
- typedef QPair<qdesigner_internal::TextPropertyValidationMode, bool> StringPropertyType;
+ using StringPropertyType = std::pair<qdesigner_internal::TextPropertyValidationMode, bool>;
explicit QDesignerCustomWidgetData(const QString &pluginPath = QString());
@@ -102,6 +77,8 @@ public:
using CustomWidgetList = QList<QDesignerCustomWidgetInterface *>;
explicit QDesignerPluginManager(QDesignerFormEditorInterface *core);
+ explicit QDesignerPluginManager(const QStringList &pluginPaths,
+ QDesignerFormEditorInterface *core);
~QDesignerPluginManager() override;
QDesignerFormEditorInterface *core() const;
@@ -129,6 +106,8 @@ public:
bool registerNewPlugins();
+ static QStringList defaultPluginPaths();
+
public slots:
bool syncSettings();
void ensureInitialized();
@@ -139,8 +118,6 @@ private:
void registerPlugin(const QString &plugin);
private:
- static QStringList defaultPluginPaths();
-
QDesignerPluginManagerPrivate *m_d;
};
diff --git a/src/designer/src/lib/shared/previewconfigurationwidget.cpp b/src/designer/src/lib/shared/previewconfigurationwidget.cpp
index bf8d0b60e..49a654856 100644
--- a/src/designer/src/lib/shared/previewconfigurationwidget.cpp
+++ b/src/designer/src/lib/shared/previewconfigurationwidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "previewconfigurationwidget_p.h"
#include "ui_previewconfigurationwidget.h"
@@ -48,15 +23,15 @@
#include <QtCore/qfileinfo.h>
#include <QtCore/qshareddata.h>
-
-static const char *skinResourcePathC = ":/skins/";
-
QT_BEGIN_NAMESPACE
-static const char *skinExtensionC = "skin";
+using namespace Qt::StringLiterals;
+
+static constexpr auto skinResourcePathC = ":/skins/"_L1;
+static constexpr auto skinExtensionC = "skin"_L1;
// Pair of skin name, path
-typedef QPair<QString, QString> SkinNamePath;
+using SkinNamePath = std::pair<QString, QString>;
using Skins = QList<SkinNamePath>;
enum { SkinComboNoneIndex = 0 };
@@ -64,16 +39,12 @@ enum { SkinComboNoneIndex = 0 };
static const Skins &defaultSkins() {
static Skins rc;
if (rc.isEmpty()) {
- const QString skinPath = QLatin1String(skinResourcePathC);
- QString pattern = QStringLiteral("*.");
- pattern += QLatin1String(skinExtensionC);
- const QDir dir(skinPath, pattern);
+ const QDir dir(skinResourcePathC, "*."_L1 + skinExtensionC);
const QFileInfoList list = dir.entryInfoList(QDir::Dirs|QDir::NoDotAndDotDot, QDir::Name);
if (list.isEmpty())
return rc;
- const QFileInfoList::const_iterator lcend = list.constEnd();
- for (QFileInfoList::const_iterator it = list.constBegin(); it != lcend; ++it)
- rc.push_back(SkinNamePath(it->baseName(), it->filePath()));
+ for (const auto &fi : list)
+ rc.append(SkinNamePath(fi.baseName(), fi.filePath()));
}
return rc;
}
@@ -109,7 +80,7 @@ private:
const QString m_defaultStyle;
QGroupBox *m_parent;
- Ui::PreviewConfigurationWidget m_ui;
+ QT_PREPEND_NAMESPACE(Ui)::PreviewConfigurationWidget m_ui;
int m_firstUserSkinIndex;
int m_browseSkinIndex;
@@ -134,17 +105,18 @@ PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate::PreviewConfigurat
// sheet
m_ui.m_appStyleSheetLineEdit->setTextPropertyValidationMode(qdesigner_internal::ValidationStyleSheet);
- m_ui.m_appStyleSheetClearButton->setIcon(qdesigner_internal::createIconSet(QString::fromUtf8("resetproperty.png")));
+ m_ui.m_appStyleSheetClearButton->setIcon(qdesigner_internal::createIconSet("resetproperty.png"_L1));
QObject::connect(m_ui.m_appStyleSheetClearButton, &QAbstractButton::clicked,
m_ui.m_appStyleSheetLineEdit, &qdesigner_internal::TextPropertyEditor::clear);
- m_ui.m_skinRemoveButton->setIcon(qdesigner_internal::createIconSet(QString::fromUtf8("editdelete.png")));
+ m_ui.m_skinRemoveButton->setIcon(qdesigner_internal::createIconSet(QIcon::ThemeIcon::EditDelete,
+ "editdelete.png"_L1));
// skins: find default skins (resources)
m_ui.m_skinRemoveButton->setEnabled(false);
Skins skins = defaultSkins();
skins.push_front(SkinNamePath(PreviewConfigurationWidget::tr("None"), QString()));
- for (const auto &skin : qAsConst(skins))
+ for (const auto &skin : std::as_const(skins))
m_ui.m_skinCombo->addItem(skin.first, QVariant(skin.second));
m_browseSkinIndex = m_firstUserSkinIndex = skins.size();
m_ui.m_skinCombo->addItem(PreviewConfigurationWidget::tr("Browse..."), QString());
@@ -172,14 +144,12 @@ void PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate::addUserSkins
{
if (files.isEmpty())
return;
- const QStringList ::const_iterator fcend = files.constEnd();
- for (QStringList::const_iterator it = files.constBegin(); it != fcend; ++it) {
- const QFileInfo fi(*it);
- if (fi.isDir() && fi.isReadable()) {
- m_ui.m_skinCombo->insertItem(m_browseSkinIndex++, fi.baseName(), QVariant(*it));
- } else {
- qWarning() << "Unable to access the skin directory '" << *it << "'.";
- }
+ for (const auto &f : files) {
+ const QFileInfo fi(f);
+ if (fi.isDir() && fi.isReadable())
+ m_ui.m_skinCombo->insertItem(m_browseSkinIndex++, fi.baseName(), QVariant(f));
+ else
+ qWarning() << "Unable to access the skin directory '" << f << "'.";
}
}
@@ -268,7 +238,7 @@ int PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate::browseSkin()
dlg.setOption(QFileDialog::ShowDirsOnly);
const QString title = tr("Load Custom Device Skin");
dlg.setWindowTitle(title);
- dlg.setNameFilter(tr("All QVFB Skins (*.%1)").arg(QLatin1String(skinExtensionC)));
+ dlg.setNameFilter(tr("All QVFB Skins (*.%1)").arg(skinExtensionC));
int rc = m_lastSkinIndex;
do {
diff --git a/src/designer/src/lib/shared/previewconfigurationwidget_p.h b/src/designer/src/lib/shared/previewconfigurationwidget_p.h
index c469cef2d..ec5e2bed3 100644
--- a/src/designer/src/lib/shared/previewconfigurationwidget_p.h
+++ b/src/designer/src/lib/shared/previewconfigurationwidget_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/previewmanager.cpp b/src/designer/src/lib/shared/previewmanager.cpp
index 3d04346f3..ce9a58e72 100644
--- a/src/designer/src/lib/shared/previewmanager.cpp
+++ b/src/designer/src/lib/shared/previewmanager.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "formwindowbase_p.h"
#include "previewmanager_p.h"
@@ -58,10 +33,13 @@
#include <QtCore/qdebug.h>
#include <QtCore/qlist.h>
#include <QtCore/qmap.h>
+#include <QtCore/qpointer.h>
#include <QtCore/qshareddata.h>
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
static inline int compare(const qdesigner_internal::PreviewConfiguration &pc1, const qdesigner_internal::PreviewConfiguration &pc2)
{
int rc = pc1.style().compare(pc2.style());
@@ -73,7 +51,7 @@ static inline int compare(const qdesigner_internal::PreviewConfiguration &pc1, c
return pc1.deviceSkin().compare(pc2.deviceSkin());
}
-namespace {
+namespace qdesigner_internal {
// ------ PreviewData (data associated with a preview window)
struct PreviewData {
PreviewData(const QPointer<QWidget> &widget, const QDesignerFormWindowInterface *formWindow, const qdesigner_internal::PreviewConfiguration &pc);
@@ -90,9 +68,6 @@ namespace {
m_configuration(pc)
{
}
-}
-
-namespace qdesigner_internal {
/* In designer, we have the situation that laid-out maincontainers have
* a geometry set (which might differ from their sizeHint()). The QGraphicsItem
@@ -433,9 +408,9 @@ void ZoomablePreviewDeviceSkin::fitWidget(const QSize &size)
// ------------- PreviewConfiguration
-static const char *styleKey = "Style";
-static const char *appStyleSheetKey = "AppStyleSheet";
-static const char *skinKey = "Skin";
+static constexpr auto styleKey = "Style"_L1;
+static constexpr auto appStyleSheetKey = "AppStyleSheet"_L1;
+static constexpr auto skinKey = "Skin"_L1;
PreviewConfiguration::PreviewConfiguration() :
m_d(new PreviewConfigurationData)
@@ -503,30 +478,29 @@ void PreviewConfiguration::toSettings(const QString &prefix, QDesignerSettingsIn
{
const PreviewConfigurationData &d = *m_d;
settings->beginGroup(prefix);
- settings->setValue(QLatin1String(styleKey), d.m_style);
- settings->setValue(QLatin1String(appStyleSheetKey), d.m_applicationStyleSheet);
- settings->setValue(QLatin1String(skinKey), d.m_deviceSkin);
+ settings->setValue(styleKey, d.m_style);
+ settings->setValue(appStyleSheetKey, d.m_applicationStyleSheet);
+ settings->setValue(skinKey, d.m_deviceSkin);
settings->endGroup();
}
void PreviewConfiguration::fromSettings(const QString &prefix, const QDesignerSettingsInterface *settings)
{
clear();
- QString key = prefix;
- key += QLatin1Char('/');
- const int prefixSize = key.size();
+ QString key = prefix + u'/';
+ const auto prefixSize = key.size();
PreviewConfigurationData &d = *m_d;
const QVariant emptyString = QVariant(QString());
- key += QLatin1String(styleKey);
+ key += styleKey;
d.m_style = settings->value(key, emptyString).toString();
- key.replace(prefixSize, key.size() - prefixSize, QLatin1String(appStyleSheetKey));
+ key.replace(prefixSize, key.size() - prefixSize, appStyleSheetKey);
d.m_applicationStyleSheet = settings->value(key, emptyString).toString();
- key.replace(prefixSize, key.size() - prefixSize, QLatin1String(skinKey));
+ key.replace(prefixSize, key.size() - prefixSize, skinKey);
d.m_deviceSkin = settings->value(key, emptyString).toString();
}
@@ -559,8 +533,7 @@ public:
PreviewDataList m_previews;
- typedef QMap<QString, DeviceSkinParameters> DeviceSkinConfigCache;
- DeviceSkinConfigCache m_deviceSkinConfigCache;
+ QMap<QString, DeviceSkinParameters> m_deviceSkinConfigCache;
QDesignerFormEditorInterface *m_core;
bool m_updateBlocked;
@@ -703,7 +676,7 @@ QWidget *PreviewManager::createPreview(const QDesignerFormWindowInterface *fw,
return formWidget;
}
// Embed into skin. find config in cache
- PreviewManagerPrivate::DeviceSkinConfigCache::iterator it = d->m_deviceSkinConfigCache.find(deviceSkin);
+ auto it = d->m_deviceSkinConfigCache.find(deviceSkin);
if (it == d->m_deviceSkinConfigCache.end()) {
DeviceSkinParameters parameters;
if (!parameters.read(deviceSkin, DeviceSkinParameters::ReadAll, errorMessage)) {
@@ -796,15 +769,13 @@ QWidget *PreviewManager::showPreview(const QDesignerFormWindowInterface *fw,
QWidget *PreviewManager::raise(const QDesignerFormWindowInterface *fw, const PreviewConfiguration &pc)
{
- using PreviewDataList = PreviewManagerPrivate::PreviewDataList;
if (d->m_previews.isEmpty())
return nullptr;
// find matching window
- const PreviewDataList::const_iterator cend = d->m_previews.constEnd();
- for (PreviewDataList::const_iterator it = d->m_previews.constBegin(); it != cend ;++it) {
- QWidget * w = it->m_widget;
- if (w && it->m_formWindow == fw && it->m_configuration == pc) {
+ for (const auto &pd : std::as_const(d->m_previews)) {
+ QWidget *w = pd.m_widget;
+ if (w && pd.m_formWindow == fw && pd.m_configuration == pc) {
w->raise();
w->activateWindow();
return w;
@@ -818,9 +789,9 @@ void PreviewManager::closeAllPreviews()
if (!d->m_previews.isEmpty()) {
d->m_updateBlocked = true;
d->m_activePreview = nullptr;
- for (auto it = d->m_previews.constBegin(), cend = d->m_previews.constEnd(); it != cend ;++it) {
- if (it->m_widget)
- it->m_widget->close();
+ for (const auto &pd : std::as_const(d->m_previews)) {
+ if (pd.m_widget)
+ pd.m_widget->close();
}
d->m_previews.clear();
d->m_updateBlocked = false;
@@ -830,11 +801,10 @@ void PreviewManager::closeAllPreviews()
void PreviewManager::updatePreviewClosed(QWidget *w)
{
- using PreviewDataList = PreviewManagerPrivate::PreviewDataList;
if (d->m_updateBlocked)
return;
// Purge out all 0 or widgets to be deleted
- for (PreviewDataList::iterator it = d->m_previews.begin(); it != d->m_previews.end() ; ) {
+ for (auto it = d->m_previews.begin(); it != d->m_previews.end() ; ) {
QWidget *iw = it->m_widget; // Might be 0 when catching QEvent::Destroyed
if (iw == nullptr || iw == w) {
it = d->m_previews.erase(it);
diff --git a/src/designer/src/lib/shared/previewmanager_p.h b/src/designer/src/lib/shared/previewmanager_p.h
index 83c4ae7c0..aa17d384b 100644
--- a/src/designer/src/lib/shared/previewmanager_p.h
+++ b/src/designer/src/lib/shared/previewmanager_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/promotionmodel.cpp b/src/designer/src/lib/shared/promotionmodel.cpp
index 37136ced6..8d9851936 100644
--- a/src/designer/src/lib/shared/promotionmodel.cpp
+++ b/src/designer/src/lib/shared/promotionmodel.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "promotionmodel_p.h"
#include "widgetdatabase_p.h"
@@ -137,18 +112,18 @@ namespace qdesigner_internal {
QDesignerWidgetDataBaseItemInterface *baseClass = nullptr;
QStandardItem *baseItem = nullptr;
- const PromotedClasses::const_iterator bcend = promotedClasses.constEnd();
- for (PromotedClasses::const_iterator it = promotedClasses.constBegin(); it != bcend; ++it) {
+ for (auto &pi : promotedClasses) {
// Start a new base class?
- if (baseClass != it->baseItem) {
- baseClass = it->baseItem;
- const StandardItemList baseRow = baseModelRow(it->baseItem);
+ if (baseClass != pi.baseItem) {
+ baseClass = pi.baseItem;
+ const StandardItemList baseRow = baseModelRow(pi.baseItem);
baseItem = baseRow.constFirst();
appendRow(baseRow);
}
Q_ASSERT(baseItem);
// Append derived
- baseItem->appendRow(promotedModelRow(it->baseItem, it->promotedItem, usedPromotedClasses.contains(it->promotedItem->name())));
+ baseItem->appendRow(promotedModelRow(pi.baseItem, pi.promotedItem,
+ usedPromotedClasses.contains(pi.promotedItem->name())));
}
}
diff --git a/src/designer/src/lib/shared/promotionmodel_p.h b/src/designer/src/lib/shared/promotionmodel_p.h
index 3acd119ff..c92017b86 100644
--- a/src/designer/src/lib/shared/promotionmodel_p.h
+++ b/src/designer/src/lib/shared/promotionmodel_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/promotiontaskmenu.cpp b/src/designer/src/lib/shared/promotiontaskmenu.cpp
index c458d2604..7cedb226b 100644
--- a/src/designer/src/lib/shared/promotiontaskmenu.cpp
+++ b/src/designer/src/lib/shared/promotiontaskmenu.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "promotiontaskmenu_p.h"
#include "qdesigner_promotiondialog_p.h"
@@ -146,10 +121,9 @@ PromotionTaskMenu::PromotionState PromotionTaskMenu::createPromotionActions(QDe
QMenu *candidatesMenu = new QMenu();
// Create a sub menu
- const WidgetDataBaseItemList::const_iterator cend = candidates.constEnd();
// Set up actions and map class names
- for (WidgetDataBaseItemList::const_iterator it = candidates.constBegin(); it != cend; ++it) {
- const QString customClassName = (*it)->name();
+ for (auto *item : candidates) {
+ const QString customClassName = item->name();
candidatesMenu->addAction(customClassName,
this, [this, customClassName] { this->slotPromoteToCustomWidget(customClassName); });
}
@@ -169,7 +143,7 @@ void PromotionTaskMenu::addActions(QDesignerFormWindowInterface *fw, unsigned fl
ActionList &actionList)
{
Q_ASSERT(m_widget);
- const int previousSize = actionList.size();
+ const auto previousSize = actionList.size();
const PromotionState promotionState = createPromotionActions(fw);
// Promotion candidates/demote
@@ -290,9 +264,7 @@ PromotionTaskMenu::PromotionSelectionList PromotionTaskMenu::promotionSelectionL
designerObjectInspector->getSelection(s);
// Find objects of similar state
const QWidgetList &source = m_mode == ModeManagedMultiSelection ? s.managed : s.unmanaged;
- const QWidgetList::const_iterator cend = source.constEnd();
- for (QWidgetList::const_iterator it = source.constBegin(); it != cend; ++it) {
- QWidget *w = *it;
+ for (auto *w : source) {
if (w != m_widget) {
// Selection state mismatch
if (intro->metaObject(w)->className() != className || isPromoted(core, w) != promoted)
diff --git a/src/designer/src/lib/shared/promotiontaskmenu_p.h b/src/designer/src/lib/shared/promotiontaskmenu_p.h
index ee9f53db0..371d95d6d 100644
--- a/src/designer/src/lib/shared/promotiontaskmenu_p.h
+++ b/src/designer/src/lib/shared/promotiontaskmenu_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/propertylineedit.cpp b/src/designer/src/lib/shared/propertylineedit.cpp
index 6e5b68412..bea91010a 100644
--- a/src/designer/src/lib/shared/propertylineedit.cpp
+++ b/src/designer/src/lib/shared/propertylineedit.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "propertylineedit_p.h"
@@ -33,6 +8,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
PropertyLineEdit::PropertyLineEdit(QWidget *parent) :
QLineEdit(parent), m_wantNewLine(false)
@@ -55,14 +32,14 @@ namespace qdesigner_internal {
}
void PropertyLineEdit::insertNewLine() {
- insertText(QStringLiteral("\\n"));
+ insertText(u"\\n"_s);
}
void PropertyLineEdit::insertText(const QString &text) {
// position cursor after new text and grab focus
const int oldCursorPosition = cursorPosition ();
insert(text);
- setCursorPosition (oldCursorPosition + text.length());
+ setCursorPosition (oldCursorPosition + text.size());
setFocus(Qt::OtherFocusReason);
}
diff --git a/src/designer/src/lib/shared/propertylineedit_p.h b/src/designer/src/lib/shared/propertylineedit_p.h
index a408f8a9d..d1a1c9428 100644
--- a/src/designer/src/lib/shared/propertylineedit_p.h
+++ b/src/designer/src/lib/shared/propertylineedit_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/qdesigner_command.cpp b/src/designer/src/lib/shared/qdesigner_command.cpp
index 04cbfeff3..2633224e6 100644
--- a/src/designer/src/lib/shared/qdesigner_command.cpp
+++ b/src/designer/src/lib/shared/qdesigner_command.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_command_p.h"
#include "qdesigner_propertycommand_p.h"
@@ -75,10 +50,12 @@ Q_DECLARE_METATYPE(QWidgetList)
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
static inline void setPropertySheetWindowTitle(const QDesignerFormEditorInterface *core, QObject *o, const QString &t)
{
if (QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core->extensionManager(), o)) {
- const int idx = sheet->indexOf(QStringLiteral("windowTitle"));
+ const int idx = sheet->indexOf(u"windowTitle"_s);
if (idx != -1) {
sheet->setProperty(idx, t);
sheet->setChanged(idx, true);
@@ -89,8 +66,8 @@ static inline void setPropertySheetWindowTitle(const QDesignerFormEditorInterfac
namespace qdesigner_internal {
// Helpers for the dynamic properties that store Z/Widget order
-static const char *widgetOrderPropertyC = "_q_widgetOrder";
-static const char *zOrderPropertyC = "_q_zOrder";
+static const char widgetOrderPropertyC[] = "_q_widgetOrder";
+static const char zOrderPropertyC[] = "_q_zOrder";
static void addToWidgetListDynamicProperty(QWidget *parentWidget, QWidget *widget, const char *name, int index = -1)
{
@@ -144,7 +121,7 @@ void InsertWidgetCommand::init(QWidget *widget, bool already_in_form, int layout
m_cell.first = layoutRow;
m_cell.second = layoutColumn;
} else {
- m_cell = deco ? deco->currentCell() : qMakePair(0, 0);
+ m_cell = deco ? deco->currentCell() : std::make_pair(0, 0);
}
m_widgetWasManaged = already_in_form;
}
@@ -153,10 +130,8 @@ static void recursiveUpdate(QWidget *w)
{
w->update();
- const QObjectList &l = w->children();
- const QObjectList::const_iterator cend = l.end();
- for ( QObjectList::const_iterator it = l.begin(); it != cend; ++it) {
- if (QWidget *w = qobject_cast<QWidget*>(*it))
+ for (auto *child : w->children()) {
+ if (QWidget *w = qobject_cast<QWidget*>(child))
recursiveUpdate(w);
}
}
@@ -236,7 +211,7 @@ void InsertWidgetCommand::refreshBuddyLabels()
if (label_list.isEmpty())
return;
- const QString buddyProperty = QStringLiteral("buddy");
+ const QString buddyProperty = u"buddy"_s;
const QByteArray objectNameU8 = m_widget->objectName().toUtf8();
// Re-set the buddy (The sheet locates the object by name and sets it)
for (QLabel *label : label_list) {
@@ -266,8 +241,8 @@ void ChangeZOrderCommand::init(QWidget *widget)
setText(QApplication::translate("Command", "Change Z-order of '%1'").arg(widget->objectName()));
m_oldParentZOrder = qvariant_cast<QWidgetList>(widget->parentWidget()->property("_q_zOrder"));
- const int index = m_oldParentZOrder.indexOf(m_widget);
- if (index != -1 && index + 1 < m_oldParentZOrder.count())
+ const qsizetype index = m_oldParentZOrder.indexOf(m_widget);
+ if (index != -1 && index + 1 < m_oldParentZOrder.size())
m_oldPreceding = m_oldParentZOrder.at(index + 1);
}
@@ -347,17 +322,14 @@ void ManageWidgetCommandHelper::init(const QDesignerFormWindowInterface *fw, QWi
m_managedChildren.clear();
const QWidgetList children = m_widget->findChildren<QWidget *>();
- if (children.isEmpty())
- return;
-
m_managedChildren.reserve(children.size());
- const QWidgetList::const_iterator lcend = children.constEnd();
- for (QWidgetList::const_iterator it = children.constBegin(); it != lcend; ++it)
- if (fw->isManaged(*it))
- m_managedChildren.push_back(*it);
+ for (auto *w : children) {
+ if (fw->isManaged(w))
+ m_managedChildren.push_back(w);
+ }
}
-void ManageWidgetCommandHelper::init(QWidget *widget, const WidgetVector &managedChildren)
+void ManageWidgetCommandHelper::init(QWidget *widget, const QWidgetList &managedChildren)
{
m_widget = widget;
m_managedChildren = managedChildren;
@@ -367,21 +339,15 @@ void ManageWidgetCommandHelper::manage(QDesignerFormWindowInterface *fw)
{
// Manage the managed children after parent
fw->manageWidget(m_widget);
- if (!m_managedChildren.isEmpty()) {
- const WidgetVector::const_iterator lcend = m_managedChildren.constEnd();
- for (WidgetVector::const_iterator it = m_managedChildren.constBegin(); it != lcend; ++it)
- fw->manageWidget(*it);
- }
+ for (auto *w : std::as_const(m_managedChildren))
+ fw->manageWidget(w);
}
void ManageWidgetCommandHelper::unmanage(QDesignerFormWindowInterface *fw)
{
// Unmanage the managed children first
- if (!m_managedChildren.isEmpty()) {
- const WidgetVector::const_iterator lcend = m_managedChildren.constEnd();
- for (WidgetVector::const_iterator it = m_managedChildren.constBegin(); it != lcend; ++it)
- fw->unmanageWidget(*it);
- }
+ for (auto *w : std::as_const(m_managedChildren))
+ fw->unmanageWidget(w);
fw->unmanageWidget(m_widget);
}
@@ -625,7 +591,7 @@ void PromoteToCustomWidgetCommand::init(const WidgetPointerList &widgets,const Q
void PromoteToCustomWidgetCommand::redo()
{
- for (QWidget *w : qAsConst(m_widgets)) {
+ for (QWidget *w : std::as_const(m_widgets)) {
if (w)
promoteWidget(core(), w, m_customClassName);
}
@@ -644,7 +610,7 @@ void PromoteToCustomWidgetCommand::updateSelection()
void PromoteToCustomWidgetCommand::undo()
{
- for (QWidget *w : qAsConst(m_widgets)) {
+ for (QWidget *w : std::as_const(m_widgets)) {
if (w)
demoteWidget(core(), w);
}
@@ -697,11 +663,10 @@ void CursorSelectionState::restore(QDesignerFormWindowInterface *formWindow) con
} else {
// Select current as last
formWindow->clearSelection(false);
- const WidgetPointerList::const_iterator cend = m_selection.constEnd();
- for (WidgetPointerList::const_iterator it = m_selection.constBegin(); it != cend; ++it)
- if (QWidget *w = *it)
- if (w != m_current)
- formWindow->selectWidget(*it, true);
+ for (const auto &wp : m_selection) {
+ if (!wp.isNull() && wp.data() != m_current)
+ formWindow->selectWidget(wp.data(), true);
+ }
if (m_current)
formWindow->selectWidget(m_current, true);
}
@@ -857,7 +822,7 @@ void BreakLayoutCommand::redo()
m_layout->breakLayout();
delete deco; // release the extension
- for (QWidget *widget : qAsConst(m_widgets)) {
+ for (QWidget *widget : std::as_const(m_widgets)) {
widget->resize(widget->size().expandedTo(QSize(16, 16)));
}
// Update unless we are in an intermediate state of morphing layout
@@ -994,7 +959,7 @@ void ToolBoxCommand::addPage()
QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(formWindow()->core()->extensionManager(), m_toolBox);
if (sheet) {
qdesigner_internal::PropertySheetStringValue itemText(m_itemText);
- sheet->setProperty(sheet->indexOf(QStringLiteral("currentItemText")), QVariant::fromValue(itemText));
+ sheet->setProperty(sheet->indexOf(u"currentItemText"_s), QVariant::fromValue(itemText));
}
m_widget->show();
@@ -1085,7 +1050,7 @@ void AddToolBoxPageCommand::init(QToolBox *toolBox, InsertionMode mode)
m_widget = new QDesignerWidget(formWindow(), m_toolBox);
m_itemText = QApplication::translate("Command", "Page");
m_itemIcon = QIcon();
- m_widget->setObjectName(QStringLiteral("page"));
+ m_widget->setObjectName(u"page"_s);
formWindow()->ensureUniqueObjectName(m_widget);
setText(QApplication::translate("Command", "Insert Page"));
@@ -1146,7 +1111,8 @@ void TabWidgetCommand::addPage()
QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(formWindow()->core()->extensionManager(), m_tabWidget);
if (sheet) {
qdesigner_internal::PropertySheetStringValue itemText(m_itemText);
- sheet->setProperty(sheet->indexOf(QStringLiteral("currentTabText")), QVariant::fromValue(itemText));
+ sheet->setProperty(sheet->indexOf(u"currentTabText"_s),
+ QVariant::fromValue(itemText));
}
formWindow()->clearSelection();
@@ -1202,7 +1168,7 @@ void AddTabPageCommand::init(QTabWidget *tabWidget, InsertionMode mode)
m_widget = new QDesignerWidget(formWindow(), m_tabWidget);
m_itemText = QApplication::translate("Command", "Page");
m_itemIcon = QIcon();
- m_widget->setObjectName(QStringLiteral("tab"));
+ m_widget->setObjectName(u"tab"_s);
formWindow()->ensureUniqueObjectName(m_widget);
setText(QApplication::translate("Command", "Insert Page"));
@@ -1378,7 +1344,7 @@ void AddStackedWidgetPageCommand::init(QStackedWidget *stackedWidget, InsertionM
if (mode == InsertAfter)
m_index++;
m_widget = new QDesignerWidget(formWindow(), m_stackedWidget);
- m_widget->setObjectName(QStringLiteral("page"));
+ m_widget->setObjectName(u"page"_s);
formWindow()->ensureUniqueObjectName(m_widget);
setText(QApplication::translate("Command", "Insert Page"));
@@ -1437,7 +1403,7 @@ void CreateMenuBarCommand::init(QMainWindow *mainWindow)
{
m_mainWindow = mainWindow;
QDesignerFormEditorInterface *core = formWindow()->core();
- m_menuBar = qobject_cast<QMenuBar*>(core->widgetFactory()->createWidget(QStringLiteral("QMenuBar"), m_mainWindow));
+ m_menuBar = qobject_cast<QMenuBar*>(core->widgetFactory()->createWidget(u"QMenuBar"_s, m_mainWindow));
core->widgetFactory()->initialize(m_menuBar);
}
@@ -1448,7 +1414,7 @@ void CreateMenuBarCommand::redo()
c = qt_extension<QDesignerContainerExtension*>(core->extensionManager(), m_mainWindow);
c->addWidget(m_menuBar);
- m_menuBar->setObjectName(QStringLiteral("menuBar"));
+ m_menuBar->setObjectName(u"menuBar"_s);
formWindow()->ensureUniqueObjectName(m_menuBar);
core->metaDataBase()->add(m_menuBar);
formWindow()->emitSelectionChanged();
@@ -1528,7 +1494,7 @@ void CreateStatusBarCommand::init(QMainWindow *mainWindow)
{
m_mainWindow = mainWindow;
QDesignerFormEditorInterface *core = formWindow()->core();
- m_statusBar = qobject_cast<QStatusBar*>(core->widgetFactory()->createWidget(QStringLiteral("QStatusBar"), m_mainWindow));
+ m_statusBar = qobject_cast<QStatusBar*>(core->widgetFactory()->createWidget(u"QStatusBar"_s, m_mainWindow));
core->widgetFactory()->initialize(m_statusBar);
}
@@ -1539,7 +1505,7 @@ void CreateStatusBarCommand::redo()
c = qt_extension<QDesignerContainerExtension*>(core->extensionManager(), m_mainWindow);
c->addWidget(m_statusBar);
- m_statusBar->setObjectName(QStringLiteral("statusBar"));
+ m_statusBar->setObjectName(u"statusBar"_s);
formWindow()->ensureUniqueObjectName(m_statusBar);
core->metaDataBase()->add(m_statusBar);
formWindow()->emitSelectionChanged();
@@ -1616,7 +1582,7 @@ void AddToolBarCommand::init(QMainWindow *mainWindow, Qt::ToolBarArea area)
m_mainWindow = mainWindow;
QDesignerWidgetFactoryInterface * wf = formWindow()->core()->widgetFactory();
// Pass on 0 parent first to avoid reparenting flicker.
- m_toolBar = qobject_cast<QToolBar*>(wf->createWidget(QStringLiteral("QToolBar"), nullptr));
+ m_toolBar = qobject_cast<QToolBar*>(wf->createWidget(u"QToolBar"_s, nullptr));
m_toolBar->setProperty("_q_desiredArea", QVariant(area));
wf->initialize(m_toolBar);
m_toolBar->hide();
@@ -1630,7 +1596,7 @@ void AddToolBarCommand::redo()
QDesignerContainerExtension *c = qt_extension<QDesignerContainerExtension*>(core->extensionManager(), m_mainWindow);
c->addWidget(m_toolBar);
- m_toolBar->setObjectName(QStringLiteral("toolBar"));
+ m_toolBar->setObjectName(u"toolBar"_s);
formWindow()->ensureUniqueObjectName(m_toolBar);
setPropertySheetWindowTitle(core, m_toolBar, m_toolBar->objectName());
formWindow()->emitSelectionChanged();
@@ -1679,7 +1645,7 @@ void AddDockWidgetCommand::init(QMainWindow *mainWindow)
{
m_mainWindow = mainWindow;
QDesignerFormEditorInterface *core = formWindow()->core();
- m_dockWidget = qobject_cast<QDockWidget*>(core->widgetFactory()->createWidget(QStringLiteral("QDockWidget"), m_mainWindow));
+ m_dockWidget = qobject_cast<QDockWidget*>(core->widgetFactory()->createWidget(u"QDockWidget"_s, m_mainWindow));
}
void AddDockWidgetCommand::redo()
@@ -1688,7 +1654,7 @@ void AddDockWidgetCommand::redo()
QDesignerContainerExtension *c = qt_extension<QDesignerContainerExtension*>(core->extensionManager(), m_mainWindow);
c->addWidget(m_dockWidget);
- m_dockWidget->setObjectName(QStringLiteral("dockWidget"));
+ m_dockWidget->setObjectName(u"dockWidget"_s);
formWindow()->ensureUniqueObjectName(m_dockWidget);
formWindow()->manageWidget(m_dockWidget);
formWindow()->emitSelectionChanged();
@@ -1769,7 +1735,7 @@ void AdjustWidgetSizeCommand::updatePropertyEditor() const
{
if (QDesignerPropertyEditorInterface *propertyEditor = formWindow()->core()->propertyEditor()) {
if (propertyEditor->object() == m_widget)
- propertyEditor->setPropertyValue(QStringLiteral("geometry"), m_widget->geometry(), true);
+ propertyEditor->setPropertyValue(u"geometry"_s, m_widget->geometry(), true);
}
}
// ------------ ChangeFormLayoutItemRoleCommand
@@ -2043,16 +2009,16 @@ void AddContainerWidgetPageCommand::init(QWidget *containerWidget, ContainerType
case PageContainer:
setText(QApplication::translate("Command", "Insert Page"));
m_widget = new QDesignerWidget(formWindow(), m_containerWidget);
- m_widget->setObjectName(QStringLiteral("page"));
+ m_widget->setObjectName(u"page"_s);
break;
case MdiContainer:
setText(QApplication::translate("Command", "Insert Subwindow"));
m_widget = new QDesignerWidget(formWindow(), m_containerWidget);
- m_widget->setObjectName(QStringLiteral("subwindow"));
+ m_widget->setObjectName(u"subwindow"_s);
setPropertySheetWindowTitle(core, m_widget, QApplication::translate("Command", "Subwindow"));
break;
case WizardContainer: // Apply style, don't manage
- m_widget = core->widgetFactory()->createWidget(QStringLiteral("QWizardPage"), nullptr);
+ m_widget = core->widgetFactory()->createWidget(u"QWizardPage"_s, nullptr);
break;
}
formWindow()->ensureUniqueObjectName(m_widget);
@@ -2145,9 +2111,7 @@ static void copyRolesFromItem(ItemData *id, const T *item, bool editor)
template<class T>
static void copyRolesToItem(const ItemData *id, T *item, DesignerIconCache *iconCache, bool editor)
{
- QHash<int, QVariant>::const_iterator it = id->m_properties.constBegin(),
- end = id->m_properties.constEnd();
- for (; it != end; ++it)
+ for (auto it = id->m_properties.cbegin(), end = id->m_properties.cend(); it != end; ++it) {
if (it.value().isValid()) {
if (!editor && it.key() == ItemFlagsShadowRole) {
item->setFlags((Qt::ItemFlags)it.value().toInt());
@@ -2173,6 +2137,7 @@ static void copyRolesToItem(const ItemData *id, T *item, DesignerIconCache *icon
}
}
}
+ }
if (editor)
item->setFlags(item->flags() | Qt::ItemIsEditable);
@@ -2221,8 +2186,7 @@ ItemData::ItemData(const QTreeWidgetItem *item, int column)
void ItemData::fillTreeItemColumn(QTreeWidgetItem *item, int column, DesignerIconCache *iconCache) const
{
- QHash<int, QVariant>::const_iterator it = m_properties.constBegin(), end = m_properties.constEnd();
- for (; it != end; ++it)
+ for (auto it = m_properties.cbegin(), end = m_properties.cend(); it != end; ++it) {
if (it.value().isValid()) {
item->setData(column, it.key(), it.value());
switch (it.key()) {
@@ -2244,6 +2208,7 @@ void ItemData::fillTreeItemColumn(QTreeWidgetItem *item, int column, DesignerIco
break;
}
}
+ }
}
ListContents::ListContents(const QTreeWidgetItem *item)
@@ -2269,16 +2234,19 @@ void ListContents::createFromListWidget(const QListWidget *listWidget, bool edit
m_items.append(ItemData(listWidget->item(i), editor));
}
-void ListContents::applyToListWidget(QListWidget *listWidget, DesignerIconCache *iconCache, bool editor) const
+void ListContents::applyToListWidget(QListWidget *listWidget, DesignerIconCache *iconCache,
+ bool editor, Qt::Alignment alignmentDefault) const
{
listWidget->clear();
int i = 0;
for (const ItemData &entry : m_items) {
- if (!entry.isValid())
- new QListWidgetItem(TableWidgetContents::defaultHeaderText(i), listWidget);
- else
- listWidget->addItem(entry.createListItem(iconCache, editor));
+ auto *item = entry.isValid()
+ ? entry.createListItem(iconCache, editor)
+ : new QListWidgetItem(TableWidgetContents::defaultHeaderText(i));
+ if (item->textAlignment() == 0)
+ item->setTextAlignment(alignmentDefault);
+ listWidget->addItem(item);
i++;
}
}
@@ -2417,19 +2385,19 @@ void TableWidgetContents::applyToTableWidget(QTableWidget *tableWidget, Designer
row++;
}
// items
- const TableItemMap::const_iterator icend = m_items.constEnd();
- for (TableItemMap::const_iterator it = m_items.constBegin(); it != icend; ++ it)
- tableWidget->setItem(it.key().first, it.key().second, it.value().createTableItem(iconCache, editor));
+ for (auto it = m_items.cbegin(), icend = m_items.cend(); it != icend; ++ it) {
+ tableWidget->setItem(it.key().first, it.key().second,
+ it.value().createTableItem(iconCache, editor));
+ }
}
-bool TableWidgetContents::operator==(const TableWidgetContents &rhs) const
+bool comparesEqual(const TableWidgetContents &lhs,
+ const TableWidgetContents &rhs) noexcept
{
- if (m_columnCount != rhs.m_columnCount || m_rowCount != rhs.m_rowCount)
- return false;
-
- return m_horizontalHeader.m_items == rhs.m_horizontalHeader.m_items &&
- m_verticalHeader.m_items == rhs.m_verticalHeader.m_items &&
- m_items == rhs.m_items;
+ return lhs.m_columnCount == rhs.m_columnCount && lhs.m_rowCount == rhs.m_rowCount &&
+ lhs.m_horizontalHeader.m_items == rhs.m_horizontalHeader.m_items &&
+ lhs.m_verticalHeader.m_items == rhs.m_verticalHeader.m_items &&
+ lhs.m_items == rhs.m_items;
}
// ---- ChangeTableContentsCommand ----
@@ -2499,12 +2467,11 @@ QTreeWidgetItem *TreeWidgetContents::ItemContents::createTreeItem(DesignerIconCa
return item;
}
-bool TreeWidgetContents::ItemContents::operator==(const TreeWidgetContents::ItemContents &rhs) const
+bool comparesEqual(const TreeWidgetContents::ItemContents &lhs,
+ const TreeWidgetContents::ItemContents &rhs) noexcept
{
- return
- m_itemFlags == rhs.m_itemFlags &&
- m_items == rhs.m_items &&
- m_children == rhs.m_children;
+ return lhs.m_itemFlags == rhs.m_itemFlags && lhs.m_items == rhs.m_items
+ && lhs.m_children == rhs.m_children;
}
void TreeWidgetContents::clear()
@@ -2525,20 +2492,13 @@ void TreeWidgetContents::applyToTreeWidget(QTreeWidget *treeWidget, DesignerIcon
{
treeWidget->clear();
- treeWidget->setColumnCount(m_headerItem.m_items.count());
+ treeWidget->setColumnCount(m_headerItem.m_items.size());
treeWidget->setHeaderItem(m_headerItem.createTreeItem(iconCache));
for (const ItemContents &ic : m_rootItems)
treeWidget->addTopLevelItem(ic.createTreeItem(iconCache, editor));
treeWidget->expandAll();
}
-bool TreeWidgetContents::operator==(const TreeWidgetContents &rhs) const
-{
- return
- m_headerItem == rhs.m_headerItem &&
- m_rootItems == rhs.m_rootItems;
-}
-
// ---- ChangeTreeContentsCommand ----
ChangeTreeContentsCommand::ChangeTreeContentsCommand(QDesignerFormWindowInterface *formWindow)
: QDesignerFormWindowCommand(QApplication::translate("Command", "Change Tree Contents"), formWindow),
@@ -2650,19 +2610,19 @@ static RemoveActionCommand::ActionData findActionIn(QAction *action)
{
RemoveActionCommand::ActionData result;
// We only want menus and toolbars, no toolbuttons.
- const QWidgetList &associatedWidgets = action->associatedWidgets();
- for (QWidget *widget : associatedWidgets) {
- if (qobject_cast<const QMenu *>(widget) || qobject_cast<const QToolBar *>(widget)) {
- const auto actionList = widget->actions();
- const int size = actionList.size();
- for (int i = 0; i < size; ++i) {
- if (actionList.at(i) == action) {
- QAction *before = nullptr;
- if (i + 1 < size)
- before = actionList.at(i + 1);
- result.append(RemoveActionCommand::ActionDataItem(before, widget));
- break;
- }
+ const QObjectList associatedObjects = action->associatedObjects();
+ for (QObject *obj : associatedObjects) {
+ if (!qobject_cast<const QMenu *>(obj) && !qobject_cast<const QToolBar *>(obj))
+ continue;
+ QWidget *widget = static_cast<QWidget *>(obj);
+ const auto actionList = widget->actions();
+ for (qsizetype i = 0, size = actionList.size(); i < size; ++i) {
+ if (actionList.at(i) == action) {
+ QAction *before = nullptr;
+ if (i + 1 < size)
+ before = actionList.at(i + 1);
+ result.append(RemoveActionCommand::ActionDataItem(before, widget));
+ break;
}
}
}
@@ -2680,7 +2640,7 @@ void RemoveActionCommand::init(QAction *action)
void RemoveActionCommand::redo()
{
QDesignerFormWindowInterface *fw = formWindow();
- for (const ActionDataItem &item : qAsConst(m_actionData)) {
+ for (const ActionDataItem &item : std::as_const(m_actionData)) {
item.widget->removeAction(m_action);
}
// Notify components (for example, signal slot editor)
@@ -2697,7 +2657,7 @@ void RemoveActionCommand::undo()
{
core()->actionEditor()->setFormWindow(formWindow());
core()->actionEditor()->manageAction(m_action);
- for (const ActionDataItem &item : qAsConst(m_actionData))
+ for (const ActionDataItem &item : std::as_const(m_actionData))
item.widget->insertAction(item.before, m_action);
if (!m_actionData.isEmpty())
core()->objectInspector()->setFormWindow(formWindow());
diff --git a/src/designer/src/lib/shared/qdesigner_command2.cpp b/src/designer/src/lib/shared/qdesigner_command2.cpp
index ac035f6ec..cc8cff4f6 100644
--- a/src/designer/src/lib/shared/qdesigner_command2.cpp
+++ b/src/designer/src/lib/shared/qdesigner_command2.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_command2_p.h"
#include "formwindowbase_p.h"
diff --git a/src/designer/src/lib/shared/qdesigner_command2_p.h b/src/designer/src/lib/shared/qdesigner_command2_p.h
index 6d5fd00b9..bfe32cdd4 100644
--- a/src/designer/src/lib/shared/qdesigner_command2_p.h
+++ b/src/designer/src/lib/shared/qdesigner_command2_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/qdesigner_command_p.h b/src/designer/src/lib/shared/qdesigner_command_p.h
index 2e1299796..e3239ce5c 100644
--- a/src/designer/src/lib/shared/qdesigner_command_p.h
+++ b/src/designer/src/lib/shared/qdesigner_command_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -51,12 +26,14 @@
#include <QtGui/qicon.h>
+#include <QtCore/qcompare.h>
#include <QtCore/qhash.h>
#include <QtCore/qlist.h>
#include <QtCore/qmap.h>
#include <QtCore/qobject.h>
#include <QtCore/qpair.h>
#include <QtCore/qpoint.h>
+#include <QtCore/qpointer.h>
#include <QtCore/qrect.h>
QT_BEGIN_NAMESPACE
@@ -107,7 +84,7 @@ private:
QPointer<QWidget> m_widget;
QDesignerLayoutDecorationExtension::InsertMode m_insertMode;
- QPair<int, int> m_cell;
+ std::pair<int, int> m_cell;
LayoutHelper* m_layoutHelper;
bool m_widgetWasManaged;
};
@@ -181,19 +158,17 @@ private:
// Helper to correctly unmanage a widget and its children for delete operations
class QDESIGNER_SHARED_EXPORT ManageWidgetCommandHelper {
public:
- using WidgetVector = QList<QWidget *>;
-
ManageWidgetCommandHelper();
void init(const QDesignerFormWindowInterface *fw, QWidget *widget);
- void init(QWidget *widget, const WidgetVector &managedChildren);
+ void init(QWidget *widget, const QWidgetList &managedChildren);
void manage(QDesignerFormWindowInterface *fw);
void unmanage(QDesignerFormWindowInterface *fw);
- const WidgetVector &managedChildren() const { return m_managedChildren; }
+ const QWidgetList &managedChildren() const { return m_managedChildren; }
private:
QWidget *m_widget = nullptr;
- WidgetVector m_managedChildren;
+ QWidgetList m_managedChildren;
};
class QDESIGNER_SHARED_EXPORT DeleteWidgetCommand: public QDesignerFormWindowCommand
@@ -754,7 +729,7 @@ protected:
QPointer<QDockWidget> m_dockWidget;
};
-class AddDockWidgetCommand: public QDesignerFormWindowCommand
+class QDESIGNER_SHARED_EXPORT AddDockWidgetCommand: public QDesignerFormWindowCommand
{
public:
@@ -853,10 +828,14 @@ struct QDESIGNER_SHARED_EXPORT ItemData {
void fillTreeItemColumn(QTreeWidgetItem *item, int column, DesignerIconCache *iconCache) const;
bool isValid() const { return !m_properties.isEmpty(); }
- bool operator==(const ItemData &rhs) const { return m_properties == rhs.m_properties; }
- bool operator!=(const ItemData &rhs) const { return m_properties != rhs.m_properties; }
QHash<int, QVariant> m_properties;
+
+ friend bool comparesEqual(const ItemData &lhs, const ItemData &rhs) noexcept
+ {
+ return lhs.m_properties == rhs.m_properties;
+ }
+ Q_DECLARE_EQUALITY_COMPARABLE(ItemData)
};
struct QDESIGNER_SHARED_EXPORT ListContents {
@@ -866,22 +845,26 @@ struct QDESIGNER_SHARED_EXPORT ListContents {
QTreeWidgetItem *createTreeItem(DesignerIconCache *iconCache) const;
void createFromListWidget(const QListWidget *listWidget, bool editor);
- void applyToListWidget(QListWidget *listWidget, DesignerIconCache *iconCache, bool editor) const;
+ void applyToListWidget(QListWidget *listWidget, DesignerIconCache *iconCache,
+ bool editor,
+ Qt::Alignment alignmentDefault = Qt::AlignLeading | Qt::AlignVCenter) const;
void createFromComboBox(const QComboBox *listWidget);
void applyToComboBox(QComboBox *listWidget, DesignerIconCache *iconCache) const;
- bool operator==(const ListContents &rhs) const { return m_items == rhs.m_items; }
- bool operator!=(const ListContents &rhs) const { return m_items != rhs.m_items; }
-
QList<ItemData> m_items;
+
+ friend bool comparesEqual(const ListContents &lhs, const ListContents &rhs) noexcept
+ {
+ return lhs.m_items == rhs.m_items;
+ }
+ Q_DECLARE_EQUALITY_COMPARABLE(ListContents)
};
// Data structure representing the contents of a QTableWidget with
// methods to retrieve and apply for ChangeTableContentsCommand
struct QDESIGNER_SHARED_EXPORT TableWidgetContents {
- using CellRowColumnAddress = QPair<int, int>;
- using TableItemMap = QMap<CellRowColumnAddress, ItemData>;
+ using CellRowColumnAddress = std::pair<int, int>;
TableWidgetContents();
void clear();
@@ -889,9 +872,6 @@ struct QDESIGNER_SHARED_EXPORT TableWidgetContents {
void fromTableWidget(const QTableWidget *tableWidget, bool editor);
void applyToTableWidget(QTableWidget *tableWidget, DesignerIconCache *iconCache, bool editor) const;
- bool operator==(const TableWidgetContents &rhs) const;
- bool operator!=(const TableWidgetContents &rhs) const { return !(*this == rhs); }
-
static bool nonEmpty(const QTableWidgetItem *item, int headerColumn);
static QString defaultHeaderText(int i);
static void insertHeaderItem(const QTableWidgetItem *item, int i, ListContents *header, bool editor);
@@ -900,7 +880,12 @@ struct QDESIGNER_SHARED_EXPORT TableWidgetContents {
int m_rowCount = 0;
ListContents m_horizontalHeader;
ListContents m_verticalHeader;
- TableItemMap m_items;
+ QMap<CellRowColumnAddress, ItemData> m_items;
+
+ friend QDESIGNER_SHARED_EXPORT
+ bool comparesEqual(const TableWidgetContents &lhs,
+ const TableWidgetContents &rhs) noexcept;
+ Q_DECLARE_EQUALITY_COMPARABLE(TableWidgetContents)
};
class QDESIGNER_SHARED_EXPORT ChangeTableContentsCommand: public QDesignerFormWindowCommand
@@ -928,14 +913,16 @@ struct QDESIGNER_SHARED_EXPORT TreeWidgetContents {
ItemContents(const QTreeWidgetItem *item, bool editor);
QTreeWidgetItem *createTreeItem(DesignerIconCache *iconCache, bool editor) const;
- bool operator==(const ItemContents &rhs) const;
- bool operator!=(const ItemContents &rhs) const { return !(*this == rhs); }
-
int m_itemFlags = -1;
//bool m_firstColumnSpanned:1;
//bool m_hidden:1;
//bool m_expanded:1;
QList<ItemContents> m_children;
+
+ friend QDESIGNER_SHARED_EXPORT
+ bool comparesEqual(const ItemContents &lhs,
+ const ItemContents &rhs) noexcept;
+ Q_DECLARE_EQUALITY_COMPARABLE(ItemContents)
};
void clear();
@@ -943,11 +930,15 @@ struct QDESIGNER_SHARED_EXPORT TreeWidgetContents {
void fromTreeWidget(const QTreeWidget *treeWidget, bool editor);
void applyToTreeWidget(QTreeWidget *treeWidget, DesignerIconCache *iconCache, bool editor) const;
- bool operator==(const TreeWidgetContents &rhs) const;
- bool operator!=(const TreeWidgetContents &rhs) const { return !(*this == rhs); }
-
ListContents m_headerItem;
QList<ItemContents> m_rootItems;
+
+ friend bool comparesEqual(const TreeWidgetContents &lhs,
+ const TreeWidgetContents &rhs) noexcept
+ {
+ return lhs.m_headerItem == rhs.m_headerItem && lhs.m_rootItems == rhs.m_rootItems;
+ }
+ Q_DECLARE_EQUALITY_COMPARABLE(TreeWidgetContents)
};
class QDESIGNER_SHARED_EXPORT ChangeTreeContentsCommand: public QDesignerFormWindowCommand
diff --git a/src/designer/src/lib/shared/qdesigner_dnditem.cpp b/src/designer/src/lib/shared/qdesigner_dnditem.cpp
index 4a7864372..d7875f55c 100644
--- a/src/designer/src/lib/shared/qdesigner_dnditem.cpp
+++ b/src/designer/src/lib/shared/qdesigner_dnditem.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_dnditem_p.h"
#include "formwindowbase_p.h"
@@ -146,8 +121,8 @@ QDesignerMimeData::QDesignerMimeData(const QDesignerDnDItems &items, QDrag *drag
break;
default: {
// determine size of drag decoration by uniting all geometries
- const QDesignerDnDItems::const_iterator cend = m_items.constEnd();
- QDesignerDnDItems::const_iterator it =m_items.constBegin();
+ const auto cend = m_items.cend();
+ auto it = m_items.cbegin();
QRect unitedGeometry = (*it)->decoration()->geometry();
const qreal devicePixelRatio = (*it)->decoration()->devicePixelRatioF();
for (++it; it != cend; ++it )
@@ -165,8 +140,8 @@ QDesignerMimeData::QDesignerMimeData(const QDesignerDnDItems &items, QDrag *drag
QPainter painter(&image);
QPainter maskPainter(&mask);
decorationTopLeft = unitedGeometry.topLeft();
- for (it = m_items.constBegin() ; it != cend; ++it ) {
- QWidget *w = (*it)->decoration();
+ for (auto *item : std::as_const(m_items)) {
+ QWidget *w = item->decoration();
const QPixmap wp = w->grab(QRect(0, 0, -1, -1));
const QPoint pos = w->pos() - decorationTopLeft;
painter.drawPixmap(pos, wp);
@@ -194,9 +169,7 @@ QDesignerMimeData::QDesignerMimeData(const QDesignerDnDItems &items, QDrag *drag
QDesignerMimeData::~QDesignerMimeData()
{
- const QDesignerDnDItems::const_iterator cend = m_items.constEnd();
- for (QDesignerDnDItems::const_iterator it = m_items.constBegin(); it != cend; ++it )
- delete *it;
+ qDeleteAll(m_items);
}
Qt::DropAction QDesignerMimeData::proposedDropAction() const
@@ -214,16 +187,17 @@ Qt::DropAction QDesignerMimeData::execDrag(const QDesignerDnDItems &items, QWidg
// Store pointers to widgets that are to be re-shown if a move operation is canceled
QWidgetList reshowWidgets;
- const QDesignerDnDItems::const_iterator cend = items.constEnd();
- for (QDesignerDnDItems::const_iterator it = items.constBegin(); it != cend; ++it )
- if (QWidget *w = (*it)->widget())
- if ((*it)->type() == QDesignerDnDItemInterface::MoveDrop)
+ for (auto *item : items) {
+ if (QWidget *w = item->widget()) {
+ if (item->type() == QDesignerDnDItemInterface::MoveDrop)
reshowWidgets.push_back(w);
+ }
+ }
const Qt::DropAction executedAction = drag->exec(Qt::CopyAction|Qt::MoveAction, mimeData->proposedDropAction());
if (executedAction == Qt::IgnoreAction) {
- for (QWidget *w : qAsConst(reshowWidgets))
+ for (QWidget *w : std::as_const(reshowWidgets))
w->show();
}
@@ -234,24 +208,24 @@ Qt::DropAction QDesignerMimeData::execDrag(const QDesignerDnDItems &items, QWidg
void QDesignerMimeData::moveDecoration(const QPoint &globalPos) const
{
const QPoint relativeDistance = globalPos - m_globalStartPos;
- const QDesignerDnDItems::const_iterator cend = m_items.constEnd();
- for (QDesignerDnDItems::const_iterator it =m_items.constBegin(); it != cend; ++it ) {
- QWidget *w = (*it)->decoration();
+ for (auto *item : m_items) {
+ QWidget *w = item->decoration();
w->move(w->pos() + relativeDistance);
}
}
void QDesignerMimeData::removeMovedWidgetsFromSourceForm(const QDesignerDnDItems &items)
{
- typedef QMultiMap<FormWindowBase *, QWidget *> FormWidgetMap;
- FormWidgetMap formWidgetMap;
+ QMultiMap<FormWindowBase *, QWidget *> formWidgetMap;
// Find moved widgets per form
- const QDesignerDnDItems::const_iterator cend = items.constEnd();
- for (QDesignerDnDItems::const_iterator it = items.constBegin(); it != cend; ++it )
- if ((*it)->type() == QDesignerDnDItemInterface::MoveDrop)
- if (QWidget *w = (*it)->widget())
- if (FormWindowBase *fb = qobject_cast<FormWindowBase *>((*it)->source()))
+ for (auto *item : items) {
+ if (item->type() == QDesignerDnDItemInterface::MoveDrop) {
+ if (QWidget *w = item->widget()) {
+ if (FormWindowBase *fb = qobject_cast<FormWindowBase *>(item->source()))
formWidgetMap.insert(fb, w);
+ }
+ }
+ }
const auto &formWindows = formWidgetMap.uniqueKeys();
for (FormWindowBase *fb : formWindows)
diff --git a/src/designer/src/lib/shared/qdesigner_dnditem_p.h b/src/designer/src/lib/shared/qdesigner_dnditem_p.h
index 36419389b..aecd626a9 100644
--- a/src/designer/src/lib/shared/qdesigner_dnditem_p.h
+++ b/src/designer/src/lib/shared/qdesigner_dnditem_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/qdesigner_dockwidget.cpp b/src/designer/src/lib/shared/qdesigner_dockwidget.cpp
index d29fcaba2..9b857efff 100644
--- a/src/designer/src/lib/shared/qdesigner_dockwidget.cpp
+++ b/src/designer/src/lib/shared/qdesigner_dockwidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_dockwidget_p.h"
#include "layoutinfo_p.h"
@@ -42,12 +17,14 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
bool QDockWidgetPropertySheet::isEnabled(int index) const
{
const QString &name = propertyName(index);
- if (name == QLatin1String("dockWidgetArea"))
+ if (name == "dockWidgetArea"_L1)
return static_cast<const QDesignerDockWidget *>(object())->docked();
- if (name == QLatin1String("docked"))
+ if (name == "docked"_L1)
return static_cast<const QDesignerDockWidget *>(object())->inMainWindow();
return QDesignerPropertySheet::isEnabled(index);
}
diff --git a/src/designer/src/lib/shared/qdesigner_dockwidget_p.h b/src/designer/src/lib/shared/qdesigner_dockwidget_p.h
index a39ece90d..f8031c045 100644
--- a/src/designer/src/lib/shared/qdesigner_dockwidget_p.h
+++ b/src/designer/src/lib/shared/qdesigner_dockwidget_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/qdesigner_formbuilder.cpp b/src/designer/src/lib/shared/qdesigner_formbuilder.cpp
index 3b25125af..ff52bfd4b 100644
--- a/src/designer/src/lib/shared/qdesigner_formbuilder.cpp
+++ b/src/designer/src/lib/shared/qdesigner_formbuilder.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_formbuilder_p.h"
#include "dynamicpropertysheet.h"
@@ -69,6 +44,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
QDesignerFormBuilder::QDesignerFormBuilder(QDesignerFormEditorInterface *core,
@@ -123,11 +100,11 @@ QWidget *QDesignerFormBuilder::createWidget(const QString &widgetName, QWidget *
{
QWidget *widget = nullptr;
- if (widgetName == QStringLiteral("QToolBar")) {
+ if (widgetName == "QToolBar"_L1) {
widget = new QToolBar(parentWidget);
- } else if (widgetName == QStringLiteral("QMenu")) {
+ } else if (widgetName == "QMenu"_L1) {
widget = new QMenu(parentWidget);
- } else if (widgetName == QStringLiteral("QMenuBar")) {
+ } else if (widgetName == "QMenuBar"_L1) {
widget = new QMenuBar(parentWidget);
} else {
widget = core()->widgetFactory()->createWidget(widgetName, parentWidget);
@@ -231,7 +208,7 @@ void QDesignerFormBuilder::applyProperties(QObject *o, const QList<DomProperty*>
const QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core()->extensionManager(), o);
const QDesignerDynamicPropertySheetExtension *dynamicSheet = qt_extension<QDesignerDynamicPropertySheetExtension*>(core()->extensionManager(), o);
- const bool changingMetaObject = WidgetFactory::classNameOf(core(), o) == QStringLiteral("QAxWidget");
+ const bool changingMetaObject = WidgetFactory::classNameOf(core(), o) == "QAxWidget"_L1;
const QDesignerMetaObjectInterface *meta = core()->introspection()->metaObject(o);
const bool dynamicPropertiesAllowed = dynamicSheet && dynamicSheet->dynamicPropertiesAllowed();
@@ -267,7 +244,7 @@ void QDesignerFormBuilder::applyProperties(QObject *o, const QList<DomProperty*>
QObject *obj = o;
QAbstractScrollArea *scroll = qobject_cast<QAbstractScrollArea *>(o);
- if (scroll && attributeName == QStringLiteral("cursor") && scroll->viewport())
+ if (scroll && attributeName == "cursor"_L1 && scroll->viewport())
obj = scroll->viewport();
// a real property
@@ -346,12 +323,8 @@ QWidget *QDesignerFormBuilder::createPreview(const QDesignerFormWindowInterface
}
// Fake application style sheet by prepending. (If this doesn't work, fake by nesting
// into parent widget).
- if (!appStyleSheet.isEmpty()) {
- QString styleSheet = appStyleSheet;
- styleSheet += QLatin1Char('\n');
- styleSheet += widget->styleSheet();
- widget->setStyleSheet(styleSheet);
- }
+ if (!appStyleSheet.isEmpty())
+ widget->setStyleSheet(appStyleSheet + u'\n' + widget->styleSheet());
return widget;
}
diff --git a/src/designer/src/lib/shared/qdesigner_formbuilder_p.h b/src/designer/src/lib/shared/qdesigner_formbuilder_p.h
index ceaf1b395..a4652f60a 100644
--- a/src/designer/src/lib/shared/qdesigner_formbuilder_p.h
+++ b/src/designer/src/lib/shared/qdesigner_formbuilder_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/qdesigner_formeditorcommand.cpp b/src/designer/src/lib/shared/qdesigner_formeditorcommand.cpp
index 926bc0b3d..89727103f 100644
--- a/src/designer/src/lib/shared/qdesigner_formeditorcommand.cpp
+++ b/src/designer/src/lib/shared/qdesigner_formeditorcommand.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_formeditorcommand_p.h"
diff --git a/src/designer/src/lib/shared/qdesigner_formeditorcommand_p.h b/src/designer/src/lib/shared/qdesigner_formeditorcommand_p.h
index 071c090c6..8b7d8c9ac 100644
--- a/src/designer/src/lib/shared/qdesigner_formeditorcommand_p.h
+++ b/src/designer/src/lib/shared/qdesigner_formeditorcommand_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/qdesigner_formwindowcommand.cpp b/src/designer/src/lib/shared/qdesigner_formwindowcommand.cpp
index 190540db2..48687277e 100644
--- a/src/designer/src/lib/shared/qdesigner_formwindowcommand.cpp
+++ b/src/designer/src/lib/shared/qdesigner_formwindowcommand.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_formwindowcommand_p.h"
@@ -46,6 +21,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
// ---- QDesignerFormWindowCommand ----
@@ -104,7 +81,7 @@ void QDesignerFormWindowCommand::updateBuddies(QDesignerFormWindowInterface *for
if (label_list.isEmpty())
return;
- const QString buddyProperty = QStringLiteral("buddy");
+ const QString buddyProperty = u"buddy"_s;
const QByteArray oldNameU8 = old_name.toUtf8();
const QByteArray newNameU8 = new_name.toUtf8();
diff --git a/src/designer/src/lib/shared/qdesigner_formwindowcommand_p.h b/src/designer/src/lib/shared/qdesigner_formwindowcommand_p.h
index ff5328792..a2d2ad165 100644
--- a/src/designer/src/lib/shared/qdesigner_formwindowcommand_p.h
+++ b/src/designer/src/lib/shared/qdesigner_formwindowcommand_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/qdesigner_formwindowmanager.cpp b/src/designer/src/lib/shared/qdesigner_formwindowmanager.cpp
index 243a2cac7..449161993 100644
--- a/src/designer/src/lib/shared/qdesigner_formwindowmanager.cpp
+++ b/src/designer/src/lib/shared/qdesigner_formwindowmanager.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_formwindowmanager_p.h"
#include "plugindialog_p.h"
@@ -33,7 +8,7 @@
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+namespace qdesigner_internal {
/*!
\class qdesigner_internal::QDesignerFormWindowManager
@@ -71,4 +46,6 @@ void QDesignerFormWindowManager::showPluginDialog()
dlg.exec();
}
+} // namespace qdesigner_internal
+
QT_END_NAMESPACE
diff --git a/src/designer/src/lib/shared/qdesigner_formwindowmanager_p.h b/src/designer/src/lib/shared/qdesigner_formwindowmanager_p.h
index 5ee960fd8..e4864d710 100644
--- a/src/designer/src/lib/shared/qdesigner_formwindowmanager_p.h
+++ b/src/designer/src/lib/shared/qdesigner_formwindowmanager_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/qdesigner_introspection.cpp b/src/designer/src/lib/shared/qdesigner_introspection.cpp
index cdf896923..60a4272d7 100644
--- a/src/designer/src/lib/shared/qdesigner_introspection.cpp
+++ b/src/designer/src/lib/shared/qdesigner_introspection.cpp
@@ -1,39 +1,17 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_introspection_p.h"
+#include <QtCore/qobject.h>
#include <QtCore/qlist.h>
#include <QtCore/qmetaobject.h>
#include <QtCore/qstringlist.h>
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
// Qt Implementation
static QStringList byteArrayListToStringList(const QByteArrayList &l)
{
@@ -63,6 +41,7 @@ namespace {
int keyToValue(const QString &key) const override { return m_enum.keyToValue(key.toUtf8()); }
int keysToValue(const QString &keys) const override { return m_enum.keysToValue(keys.toUtf8()); }
QString name() const override { return m_name; }
+ QString enumName() const override { return charToQString(m_enum.enumName()); }
QString scope() const override { return m_scope; }
QString separator() const override;
int value(int index) const override { return m_enum.value(index); }
@@ -84,8 +63,7 @@ namespace {
QString QDesignerMetaEnum::separator() const
{
- static const QString rc = QStringLiteral("::");
- return rc;
+ return u"::"_s;
}
// ------- QDesignerMetaProperty
@@ -101,7 +79,7 @@ namespace {
AccessFlags accessFlags() const override { return m_access; }
Attributes attributes() const override;
- QVariant::Type type() const override { return m_property.type(); }
+ int type() const override { return m_property.metaType().id(); }
QString name() const override { return m_name; }
QString typeName() const override { return m_typeName; }
int userType() const override { return m_property.userType(); }
@@ -343,7 +321,7 @@ namespace qdesigner_internal {
const QDesignerMetaObjectInterface* QDesignerIntrospection::metaObjectForQMetaObject(const QMetaObject *metaObject) const
{
- MetaObjectMap::iterator it = m_metaObjectMap.find(metaObject);
+ auto it = m_metaObjectMap.find(metaObject);
if (it == m_metaObjectMap.end())
it = m_metaObjectMap.insert(metaObject, new QDesignerMetaObject(this, metaObject));
return it.value();
diff --git a/src/designer/src/lib/shared/qdesigner_introspection_p.h b/src/designer/src/lib/shared/qdesigner_introspection_p.h
index 6c4d37e4d..1cdf0aa4f 100644
--- a/src/designer/src/lib/shared/qdesigner_introspection_p.h
+++ b/src/designer/src/lib/shared/qdesigner_introspection_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -42,7 +17,7 @@
#include "shared_global_p.h"
#include <abstractintrospection_p.h>
-#include <QtCore/qmap.h>
+#include <QtCore/qhash.h>
QT_BEGIN_NAMESPACE
@@ -59,10 +34,9 @@ namespace qdesigner_internal {
const QDesignerMetaObjectInterface* metaObject(const QObject *object) const override;
const QDesignerMetaObjectInterface* metaObjectForQMetaObject(const QMetaObject *metaObject) const;
- private:
- using MetaObjectMap = QMap<const QMetaObject*, QDesignerMetaObjectInterface*>;
- mutable MetaObjectMap m_metaObjectMap;
+ private:
+ mutable QHash<const QMetaObject *, QDesignerMetaObjectInterface *> m_metaObjectMap;
};
}
diff --git a/src/designer/src/lib/shared/qdesigner_membersheet.cpp b/src/designer/src/lib/shared/qdesigner_membersheet.cpp
index 2e62aab7f..5451222fe 100644
--- a/src/designer/src/lib/shared/qdesigner_membersheet.cpp
+++ b/src/designer/src/lib/shared/qdesigner_membersheet.cpp
@@ -1,64 +1,26 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_membersheet_p.h"
+#include "qdesigner_propertysheet_p.h"
#include <QtDesigner/abstractformeditor.h>
#include <abstractintrospection_p.h>
#include <QtWidgets/qwidget.h>
+
QT_BEGIN_NAMESPACE
-static QList<QByteArray> stringListToByteArray(const QStringList &l)
+using namespace Qt::StringLiterals;
+
+static QByteArrayList stringListToByteArray(const QStringList &l)
{
- if (l.isEmpty())
- return QList<QByteArray>();
- QList<QByteArray> rc;
- const QStringList::const_iterator cend = l.constEnd();
- for (QStringList::const_iterator it = l.constBegin(); it != cend; ++it)
- rc += it->toUtf8();
+ QByteArrayList rc;
+ for (const auto &s : l)
+ rc += s.toUtf8();
return rc;
}
-// Find the form editor in the hierarchy.
-// We know that the parent of the sheet is the extension manager
-// whose parent is the core.
-
-static QDesignerFormEditorInterface *formEditorForObject(QObject *o) {
- do {
- if (QDesignerFormEditorInterface* core = qobject_cast<QDesignerFormEditorInterface*>(o))
- return core;
- o = o->parent();
- } while(o);
- Q_ASSERT(o);
- return nullptr;
-}
-
// ------------ QDesignerMemberSheetPrivate
class QDesignerMemberSheetPrivate {
public:
@@ -73,25 +35,22 @@ public:
bool visible{true};
};
- using InfoHash = QHash<int, Info>;
-
Info &ensureInfo(int index);
- InfoHash m_info;
+ QHash<int, Info> m_info;
};
QDesignerMemberSheetPrivate::QDesignerMemberSheetPrivate(QObject *object, QObject *sheetParent) :
- m_core(formEditorForObject(sheetParent)),
+ m_core(QDesignerPropertySheet::formEditorForObject(sheetParent)),
m_meta(m_core->introspection()->metaObject(object))
{
}
QDesignerMemberSheetPrivate::Info &QDesignerMemberSheetPrivate::ensureInfo(int index)
{
- InfoHash::iterator it = m_info.find(index);
- if (it == m_info.end()) {
+ auto it = m_info.find(index);
+ if (it == m_info.end())
it = m_info.insert(index, Info());
- }
return it.value();
}
@@ -183,7 +142,7 @@ bool QDesignerMemberSheet::isSlot(int index) const
bool QDesignerMemberSheet::inheritedFromWidget(int index) const
{
- return declaredInClass(index) == QStringLiteral("QWidget") || declaredInClass(index) == QStringLiteral("QObject");
+ return declaredInClass(index) == "QWidget"_L1 || declaredInClass(index) == "QObject"_L1;
}
@@ -202,24 +161,24 @@ bool QDesignerMemberSheet::signalMatchesSlot(const QString &signal, const QStrin
bool result = true;
do {
- int signal_idx = signal.indexOf(QLatin1Char('('));
- int slot_idx = slot.indexOf(QLatin1Char('('));
+ qsizetype signal_idx = signal.indexOf(u'(');
+ qsizetype slot_idx = slot.indexOf(u'(');
if (signal_idx == -1 || slot_idx == -1)
break;
++signal_idx; ++slot_idx;
- if (slot.at(slot_idx) == QLatin1Char(')'))
+ if (slot.at(slot_idx) == u')')
break;
while (signal_idx < signal.size() && slot_idx < slot.size()) {
const QChar signal_c = signal.at(signal_idx);
const QChar slot_c = slot.at(slot_idx);
- if (signal_c == QLatin1Char(',') && slot_c == QLatin1Char(')'))
+ if (signal_c == u',' && slot_c == u')')
break;
- if (signal_c == QLatin1Char(')') && slot_c == QLatin1Char(')'))
+ if (signal_c == u')' && slot_c == u')')
break;
if (signal_c != slot_c) {
diff --git a/src/designer/src/lib/shared/qdesigner_membersheet_p.h b/src/designer/src/lib/shared/qdesigner_membersheet_p.h
index b67ad3792..b8df5e2fb 100644
--- a/src/designer/src/lib/shared/qdesigner_membersheet_p.h
+++ b/src/designer/src/lib/shared/qdesigner_membersheet_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/qdesigner_menu.cpp b/src/designer/src/lib/shared/qdesigner_menu.cpp
index 5c056070c..c19f98dec 100644
--- a/src/designer/src/lib/shared/qdesigner_menu.cpp
+++ b/src/designer/src/lib/shared/qdesigner_menu.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_menu_p.h"
#include "qdesigner_menubar_p.h"
@@ -56,11 +31,9 @@
#include <QtCore/qtimer.h>
#include <QtCore/qdebug.h>
-Q_DECLARE_METATYPE(QAction*)
-
QT_BEGIN_NAMESPACE
-using namespace qdesigner_internal;
+using namespace Qt::StringLiterals;
// give the user a little more space to click on the sub menu rectangle
static inline void extendClickableArea(QRect *subMenuRect, Qt::LayoutDirection dir)
@@ -78,10 +51,10 @@ static inline void extendClickableArea(QRect *subMenuRect, Qt::LayoutDirection d
QDesignerMenu::QDesignerMenu(QWidget *parent) :
QMenu(parent),
- m_subMenuPixmap(QPixmap(QStringLiteral(":/qt-project.org/formeditor/images/submenu.png"))),
+ m_subMenuPixmap(QPixmap(u":/qt-project.org/formeditor/images/submenu.png"_s)),
m_currentIndex(0),
- m_addItem(new SpecialMenuAction(this)),
- m_addSeparator(new SpecialMenuAction(this)),
+ m_addItem(new qdesigner_internal::SpecialMenuAction(this)),
+ m_addSeparator(new qdesigner_internal::SpecialMenuAction(this)),
m_showSubMenuTimer(new QTimer(this)),
m_deactivateWindowTimer(new QTimer(this)),
m_adjustSizeTimer(new QTimer(this)),
@@ -104,7 +77,7 @@ QDesignerMenu::QDesignerMenu(QWidget *parent) :
connect(m_deactivateWindowTimer, &QTimer::timeout, this, &QDesignerMenu::slotDeactivateNow);
- m_editor->setObjectName(QStringLiteral("__qt__passive_editor"));
+ m_editor->setObjectName(u"__qt__passive_editor"_s);
m_editor->hide();
m_editor->installEventFilter(this);
@@ -152,6 +125,8 @@ bool QDesignerMenu::handleEvent(QWidget *widget, QEvent *event)
void QDesignerMenu::startDrag(const QPoint &pos, Qt::KeyboardModifiers modifiers)
{
+ using namespace qdesigner_internal;
+
const int index = findAction(pos);
if (index >= realActionCount())
return;
@@ -161,7 +136,7 @@ void QDesignerMenu::startDrag(const QPoint &pos, Qt::KeyboardModifiers modifiers
QDesignerFormWindowInterface *fw = formWindow();
const Qt::DropAction dropAction = (modifiers & Qt::ControlModifier) ? Qt::CopyAction : Qt::MoveAction;
if (dropAction == Qt::MoveAction) {
- RemoveActionFromCommand *cmd = new RemoveActionFromCommand(fw);
+ auto *cmd = new RemoveActionFromCommand(fw);
cmd->init(this, action, actions().at(index + 1));
fw->commandHistory()->push(cmd);
}
@@ -176,7 +151,7 @@ void QDesignerMenu::startDrag(const QPoint &pos, Qt::KeyboardModifiers modifiers
if (drag->exec(dropAction) == Qt::IgnoreAction) {
if (dropAction == Qt::MoveAction) {
QAction *previous = safeActionAt(index);
- InsertActionIntoCommand *cmd = new InsertActionIntoCommand(fw);
+ auto *cmd = new InsertActionIntoCommand(fw);
cmd->init(this, action, previous);
fw->commandHistory()->push(cmd);
}
@@ -224,7 +199,7 @@ bool QDesignerMenu::handleKeyPressEvent(QWidget * /*widget*/, QKeyEvent *e)
break;
case Qt::Key_PageDown:
- m_currentIndex = actions().count() - 1;
+ m_currentIndex = actions().size() - 1;
break;
case Qt::Key_Enter:
@@ -460,7 +435,7 @@ bool QDesignerMenu::handleContextMenuEvent(QWidget *, QContextMenuEvent *event)
const int index = findAction(mapFromGlobal(event->globalPos()));
QAction *action = safeActionAt(index);
- if (qobject_cast<SpecialMenuAction*>(action))
+ if (qobject_cast<qdesigner_internal::SpecialMenuAction*>(action))
return true;
QMenu menu;
@@ -502,14 +477,14 @@ void QDesignerMenu::slotAddSeparator()
fw->beginCommand(tr("Add separator"));
QAction *sep = createAction(QString(), true);
- InsertActionIntoCommand *cmd = new InsertActionIntoCommand(fw);
+ auto *cmd = new qdesigner_internal::InsertActionIntoCommand(fw);
cmd->init(this, sep, action_before);
fw->commandHistory()->push(cmd);
if (parentMenu()) {
QAction *parent_action = parentMenu()->currentAction();
if (parent_action->menu() == nullptr) {
- CreateSubmenuCommand *cmd = new CreateSubmenuCommand(fw);
+ auto *cmd = new qdesigner_internal::CreateSubmenuCommand(fw);
cmd->init(parentMenu(), parentMenu()->currentAction());
fw->commandHistory()->push(cmd);
}
@@ -533,7 +508,7 @@ void QDesignerMenu::deleteAction(QAction *a)
action_before = safeActionAt(pos + 1);
QDesignerFormWindowInterface *fw = formWindow();
- RemoveActionFromCommand *cmd = new RemoveActionFromCommand(fw);
+ auto *cmd = new qdesigner_internal::RemoveActionFromCommand(fw);
cmd->init(this, a, action_before);
fw->commandHistory()->push(cmd);
}
@@ -549,7 +524,7 @@ QRect QDesignerMenu::subMenuPixmapRect(QAction *action) const
bool QDesignerMenu::hasSubMenuPixmap(QAction *action) const
{
return action != nullptr
- && qobject_cast<SpecialMenuAction*>(action) == 0
+ && qobject_cast<qdesigner_internal::SpecialMenuAction*>(action) == nullptr
&& !action->isSeparator()
&& !action->menu()
&& canCreateSubMenu(action);
@@ -563,6 +538,8 @@ void QDesignerMenu::showEvent ( QShowEvent * event )
void QDesignerMenu::paintEvent(QPaintEvent *event)
{
+ using namespace qdesigner_internal;
+
QMenu::paintEvent(event);
QPainter p(this);
@@ -697,7 +674,7 @@ QDesignerMenu::ActionDragCheck QDesignerMenu::checkAction(QAction *action) const
if (!action || (action->menu() && action->menu()->parentWidget() != const_cast<QDesignerMenu*>(this)))
return NoActionDrag; // menu action!! nothing to do
- if (!Utils::isObjectAncestorOf(formWindow()->mainContainer(), action))
+ if (!qdesigner_internal::Utils::isObjectAncestorOf(formWindow()->mainContainer(), action))
return NoActionDrag; // the action belongs to another form window
if (actions().contains(action))
@@ -708,7 +685,7 @@ QDesignerMenu::ActionDragCheck QDesignerMenu::checkAction(QAction *action) const
void QDesignerMenu::dragEnterEvent(QDragEnterEvent *event)
{
- const ActionRepositoryMimeData *d = qobject_cast<const ActionRepositoryMimeData*>(event->mimeData());
+ auto *d = qobject_cast<const qdesigner_internal::ActionRepositoryMimeData*>(event->mimeData());
if (!d || d->actionList().isEmpty()) {
event->ignore();
return;
@@ -740,7 +717,7 @@ void QDesignerMenu::dragMoveEvent(QDragMoveEvent *event)
return;
}
- const ActionRepositoryMimeData *d = qobject_cast<const ActionRepositoryMimeData*>(event->mimeData());
+ auto *d = qobject_cast<const qdesigner_internal::ActionRepositoryMimeData*>(event->mimeData());
if (!d || d->actionList().isEmpty()) {
event->ignore();
return;
@@ -785,7 +762,7 @@ void QDesignerMenu::dropEvent(QDropEvent *event)
m_dragging = false;
QDesignerFormWindowInterface *fw = formWindow();
- const ActionRepositoryMimeData *d = qobject_cast<const ActionRepositoryMimeData*>(event->mimeData());
+ auto *d = qobject_cast<const qdesigner_internal::ActionRepositoryMimeData*>(event->mimeData());
if (!d || d->actionList().isEmpty()) {
event->ignore();
return;
@@ -794,10 +771,10 @@ void QDesignerMenu::dropEvent(QDropEvent *event)
if (action && checkAction(action) == AcceptActionDrag) {
event->acceptProposedAction();
int index = findAction(event->position().toPoint());
- index = qMin(index, actions().count() - 1);
+ index = qMin(index, actions().size() - 1);
fw->beginCommand(tr("Insert action"));
- InsertActionIntoCommand *cmd = new InsertActionIntoCommand(fw);
+ auto *cmd = new qdesigner_internal::InsertActionIntoCommand(fw);
cmd->init(this, action, safeActionAt(index));
fw->commandHistory()->push(cmd);
@@ -806,7 +783,7 @@ void QDesignerMenu::dropEvent(QDropEvent *event)
if (parentMenu()) {
QAction *parent_action = parentMenu()->currentAction();
if (parent_action->menu() == nullptr) {
- CreateSubmenuCommand *cmd = new CreateSubmenuCommand(fw);
+ auto *cmd = new qdesigner_internal::CreateSubmenuCommand(fw);
cmd->init(parentMenu(), parentMenu()->currentAction(), action);
fw->commandHistory()->push(cmd);
}
@@ -877,6 +854,8 @@ bool QDesignerMenu::hideSubMenuOnCursorKey()
// Return false to indicate the event must be propagated to the menu bar.
bool QDesignerMenu::showSubMenuOnCursorKey()
{
+ using namespace qdesigner_internal;
+
const QAction *action = currentAction();
if (qobject_cast<const SpecialMenuAction*>(action) || action->isSeparator()) {
@@ -924,7 +903,7 @@ void QDesignerMenu::moveUp(bool ctrl)
void QDesignerMenu::moveDown(bool ctrl)
{
- if (m_currentIndex == actions().count() - 1) {
+ if (m_currentIndex == actions().size() - 1) {
return;
}
@@ -932,7 +911,7 @@ void QDesignerMenu::moveDown(bool ctrl)
(void) swap(m_currentIndex + 1, m_currentIndex);
++m_currentIndex;
- m_currentIndex = qMin(actions().count() - 1, m_currentIndex);
+ m_currentIndex = qMin(actions().size() - 1, m_currentIndex);
update();
if (!ctrl)
selectCurrentAction();
@@ -940,7 +919,7 @@ void QDesignerMenu::moveDown(bool ctrl)
QAction *QDesignerMenu::currentAction() const
{
- if (m_currentIndex < 0 || m_currentIndex >= actions().count())
+ if (m_currentIndex < 0 || m_currentIndex >= actions().size())
return nullptr;
return safeActionAt(m_currentIndex);
@@ -948,31 +927,44 @@ QAction *QDesignerMenu::currentAction() const
int QDesignerMenu::realActionCount() const
{
- return actions().count() - 2; // 2 fake actions
+ return actions().size() - 2; // 2 fake actions
}
void QDesignerMenu::selectCurrentAction()
{
+ using namespace qdesigner_internal;
+
QAction *action = currentAction();
if (!action || action == m_addSeparator || action == m_addItem)
return;
QDesignerObjectInspector *oi = nullptr;
- if (QDesignerFormWindowInterface *fw = formWindow())
- oi = qobject_cast<QDesignerObjectInspector *>(fw->core()->objectInspector());
+ ActionEditor *ae = nullptr;
+ if (QDesignerFormWindowInterface *fw = formWindow()) {
+ auto core = fw->core();
+ oi = qobject_cast<QDesignerObjectInspector *>(core->objectInspector());
+ ae = qobject_cast<ActionEditor *>(core->actionEditor());
+ }
if (!oi)
return;
oi->clearSelection();
- if (QMenu *menu = action->menu())
+ if (QMenu *menu = action->menu()) {
oi->selectObject(menu);
- else
+ if (ae)
+ ae->clearSelection();
+ } else {
oi->selectObject(action);
+ if (ae)
+ ae->selectAction(action);
+ }
}
void QDesignerMenu::createRealMenuAction(QAction *action)
{
+ using namespace qdesigner_internal;
+
if (action->menu())
return; // nothing to do
@@ -989,7 +981,7 @@ void QDesignerMenu::createRealMenuAction(QAction *action)
core->widgetFactory()->initialize(menu);
- const QString niceObjectName = ActionEditor::actionTextToName(menu->title(), QStringLiteral("menu"));
+ const QString niceObjectName = ActionEditor::actionTextToName(menu->title(), u"menu"_s);
menu->setObjectName(niceObjectName);
core->metaDataBase()->add(menu);
@@ -1026,16 +1018,15 @@ QDesignerMenu *QDesignerMenu::findOrCreateSubMenu(QAction *action)
bool QDesignerMenu::canCreateSubMenu(QAction *action) const // ### improve it's a bit too slow
{
- const QWidgetList &associatedWidgets = action->associatedWidgets();
- for (const QWidget *aw : associatedWidgets) {
- if (aw != this) {
- if (const QMenu *m = qobject_cast<const QMenu *>(aw)) {
+ const QObjectList associatedObjects = action->associatedObjects();
+ for (const QObject *ao : associatedObjects) {
+ if (ao != this) {
+ if (const QMenu *m = qobject_cast<const QMenu *>(ao)) {
if (m->actions().contains(action))
return false; // sorry
- } else {
- if (const QToolBar *tb = qobject_cast<const QToolBar *>(aw))
- if (tb->actions().contains(action))
- return false; // sorry
+ } else if (const QToolBar *tb = qobject_cast<const QToolBar *>(ao)) {
+ if (tb->actions().contains(action))
+ return false; // sorry
}
}
}
@@ -1086,6 +1077,8 @@ void QDesignerMenu::slotShowSubMenuNow()
void QDesignerMenu::showSubMenu(QAction *action)
{
+ using namespace qdesigner_internal;
+
m_showSubMenuTimer->stop();
if (m_editor->isVisible() || !action || qobject_cast<SpecialMenuAction*>(action)
@@ -1139,14 +1132,14 @@ void QDesignerMenu::enterEditMode()
fw->beginCommand(tr("Add separator"));
QAction *sep = createAction(QString(), true);
- InsertActionIntoCommand *cmd = new InsertActionIntoCommand(fw);
+ auto *cmd = new qdesigner_internal::InsertActionIntoCommand(fw);
cmd->init(this, sep, safeActionAt(realActionCount()));
fw->commandHistory()->push(cmd);
if (parentMenu()) {
QAction *parent_action = parentMenu()->currentAction();
if (parent_action->menu() == nullptr) {
- CreateSubmenuCommand *cmd = new CreateSubmenuCommand(fw);
+ auto *cmd = new qdesigner_internal::CreateSubmenuCommand(fw);
cmd->init(parentMenu(), parentMenu()->currentAction());
fw->commandHistory()->push(cmd);
}
@@ -1161,6 +1154,8 @@ void QDesignerMenu::enterEditMode()
void QDesignerMenu::leaveEditMode(LeaveEditMode mode)
{
+ using namespace qdesigner_internal;
+
if (mode == Default)
return;
@@ -1174,19 +1169,19 @@ void QDesignerMenu::leaveEditMode(LeaveEditMode mode)
Q_ASSERT(fw != nullptr);
fw->beginCommand(QApplication::translate("Command", "Insert action"));
action = createAction(ActionEditor::actionTextToName(m_editor->text()));
- InsertActionIntoCommand *cmd = new InsertActionIntoCommand(fw);
+ auto *cmd = new qdesigner_internal::InsertActionIntoCommand(fw);
cmd->init(this, action, currentAction());
fw->commandHistory()->push(cmd);
}
- SetPropertyCommand *cmd = new SetPropertyCommand(fw);
- cmd->init(action, QStringLiteral("text"), m_editor->text());
+ auto *cmd = new qdesigner_internal::SetPropertyCommand(fw);
+ cmd->init(action, u"text"_s, m_editor->text());
fw->commandHistory()->push(cmd);
if (parentMenu()) {
QAction *parent_action = parentMenu()->currentAction();
if (parent_action->menu() == nullptr) {
- CreateSubmenuCommand *cmd = new CreateSubmenuCommand(fw);
+ auto *cmd = new qdesigner_internal::CreateSubmenuCommand(fw);
cmd->init(parentMenu(), parentMenu()->currentAction(), action);
fw->commandHistory()->push(cmd);
}
@@ -1237,12 +1232,14 @@ QAction *QDesignerMenu::createAction(const QString &objectName, bool separator)
{
QDesignerFormWindowInterface *fw = formWindow();
Q_ASSERT(fw);
- return ToolBarEventFilter::createAction(fw, objectName, separator);
+ return qdesigner_internal::ToolBarEventFilter::createAction(fw, objectName, separator);
}
// ### share with QDesignerMenu::swap
bool QDesignerMenu::swap(int a, int b)
{
+ using namespace qdesigner_internal;
+
const int left = qMin(a, b);
int right = qMax(a, b);
@@ -1265,21 +1262,21 @@ bool QDesignerMenu::swap(int a, int b)
QAction *action_b_before = safeActionAt(right + 1);
- RemoveActionFromCommand *cmd1 = new RemoveActionFromCommand(fw);
+ auto *cmd1 = new qdesigner_internal::RemoveActionFromCommand(fw);
cmd1->init(this, action_b, action_b_before, false);
fw->commandHistory()->push(cmd1);
QAction *action_a_before = safeActionAt(left + 1);
- InsertActionIntoCommand *cmd2 = new InsertActionIntoCommand(fw);
+ auto *cmd2 = new qdesigner_internal::InsertActionIntoCommand(fw);
cmd2->init(this, action_b, action_a_before, false);
fw->commandHistory()->push(cmd2);
- RemoveActionFromCommand *cmd3 = new RemoveActionFromCommand(fw);
+ auto *cmd3 = new qdesigner_internal::RemoveActionFromCommand(fw);
cmd3->init(this, action_a, action_b, false);
fw->commandHistory()->push(cmd3);
- InsertActionIntoCommand *cmd4 = new InsertActionIntoCommand(fw);
+ auto *cmd4 = new qdesigner_internal::InsertActionIntoCommand(fw);
cmd4->init(this, action_a, action_b_before, true);
fw->commandHistory()->push(cmd4);
@@ -1290,7 +1287,7 @@ bool QDesignerMenu::swap(int a, int b)
QAction *QDesignerMenu::safeActionAt(int index) const
{
- if (index < 0 || index >= actions().count())
+ if (index < 0 || index >= actions().size())
return nullptr;
return actions().at(index);
@@ -1313,7 +1310,7 @@ void QDesignerMenu::deleteAction()
action_before = safeActionAt(pos + 1);
QDesignerFormWindowInterface *fw = formWindow();
- RemoveActionFromCommand *cmd = new RemoveActionFromCommand(fw);
+ auto *cmd = new qdesigner_internal::RemoveActionFromCommand(fw);
cmd->init(this, action, action_before);
fw->commandHistory()->push(cmd);
diff --git a/src/designer/src/lib/shared/qdesigner_menu_p.h b/src/designer/src/lib/shared/qdesigner_menu_p.h
index 1093961eb..a3212ad69 100644
--- a/src/designer/src/lib/shared/qdesigner_menu_p.h
+++ b/src/designer/src/lib/shared/qdesigner_menu_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/qdesigner_menubar.cpp b/src/designer/src/lib/shared/qdesigner_menubar.cpp
index 51bab619e..7b442ed31 100644
--- a/src/designer/src/lib/shared/qdesigner_menubar.cpp
+++ b/src/designer/src/lib/shared/qdesigner_menubar.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_menubar_p.h"
#include "qdesigner_menu_p.h"
@@ -52,13 +27,11 @@
#include <QtGui/qpainter.h>
#include <QtGui/qevent.h>
-Q_DECLARE_METATYPE(QAction*)
-
QT_BEGIN_NAMESPACE
-using ActionList = QList<QAction *>;
+using namespace Qt::StringLiterals;
-using namespace qdesigner_internal;
+using ActionList = QList<QAction *>;
namespace qdesigner_internal
{
@@ -77,9 +50,9 @@ SpecialMenuAction::~SpecialMenuAction() = default;
/////////////////////////////////////////////////////////////////////////////////////////////////////////
QDesignerMenuBar::QDesignerMenuBar(QWidget *parent) :
QMenuBar(parent),
- m_addMenu(new SpecialMenuAction(this)),
+ m_addMenu(new qdesigner_internal::SpecialMenuAction(this)),
m_editor(new QLineEdit(this)),
- m_promotionTaskMenu(new PromotionTaskMenu(this, PromotionTaskMenu::ModeSingleWidget, this))
+ m_promotionTaskMenu(new qdesigner_internal::PromotionTaskMenu(this, qdesigner_internal::PromotionTaskMenu::ModeSingleWidget, this))
{
setContextMenuPolicy(Qt::DefaultContextMenu);
@@ -94,7 +67,7 @@ QDesignerMenuBar::QDesignerMenuBar(QWidget *parent) :
italic.setItalic(true);
m_addMenu->setFont(italic);
- m_editor->setObjectName(QStringLiteral("__qt__passive_editor"));
+ m_editor->setObjectName(u"__qt__passive_editor"_s);
m_editor->hide();
m_editor->installEventFilter(this);
installEventFilter(this);
@@ -110,7 +83,7 @@ void QDesignerMenuBar::paintEvent(QPaintEvent *event)
const auto &actionList = actions();
for (QAction *a : actionList) {
- if (qobject_cast<SpecialMenuAction*>(a)) {
+ if (qobject_cast<qdesigner_internal::SpecialMenuAction*>(a)) {
const QRect g = actionGeometry(a);
QLinearGradient lg(g.left(), g.top(), g.left(), g.bottom());
lg.setColorAt(0.0, Qt::transparent);
@@ -223,7 +196,7 @@ bool QDesignerMenuBar::handleKeyPressEvent(QWidget *, QKeyEvent *e)
break;
case Qt::Key_PageDown:
- m_currentIndex = actions().count() - 1;
+ m_currentIndex = actions().size() - 1;
break;
case Qt::Key_Enter:
@@ -287,6 +260,8 @@ bool QDesignerMenuBar::handleKeyPressEvent(QWidget *, QKeyEvent *e)
void QDesignerMenuBar::startDrag(const QPoint &pos)
{
+ using namespace qdesigner_internal;
+
const int index = findAction(pos);
if (m_currentIndex == -1 || index >= realActionCount())
return;
@@ -294,7 +269,7 @@ void QDesignerMenuBar::startDrag(const QPoint &pos)
QAction *action = safeActionAt(index);
QDesignerFormWindowInterface *fw = formWindow();
- RemoveActionFromCommand *cmd = new RemoveActionFromCommand(fw);
+ auto *cmd = new qdesigner_internal::RemoveActionFromCommand(fw);
cmd->init(this, action, actions().at(index + 1));
fw->commandHistory()->push(cmd);
@@ -310,7 +285,7 @@ void QDesignerMenuBar::startDrag(const QPoint &pos)
m_currentIndex = -1;
if (drag->exec(Qt::MoveAction) == Qt::IgnoreAction) {
- InsertActionIntoCommand *cmd = new InsertActionIntoCommand(fw);
+ auto *cmd = new qdesigner_internal::InsertActionIntoCommand(fw);
cmd->init(this, action, safeActionAt(index));
fw->commandHistory()->push(cmd);
@@ -365,7 +340,7 @@ bool QDesignerMenuBar::handleMouseMoveEvent(QWidget *, QMouseEvent *event)
return true;
const int index = actionIndexAt(this, m_startPosition, Qt::Horizontal);
- if (index < actions().count()) {
+ if (index < actions().size()) {
hideMenu(index);
update();
}
@@ -378,6 +353,8 @@ bool QDesignerMenuBar::handleMouseMoveEvent(QWidget *, QMouseEvent *event)
ActionList QDesignerMenuBar::contextMenuActions()
{
+ using namespace qdesigner_internal;
+
ActionList rc;
if (QAction *action = safeActionAt(m_currentIndex)) {
if (!qobject_cast<SpecialMenuAction*>(action)) {
@@ -412,9 +389,8 @@ bool QDesignerMenuBar::handleContextMenuEvent(QWidget *, QContextMenuEvent *even
QMenu menu;
const ActionList al = contextMenuActions();
- const ActionList::const_iterator acend = al.constEnd();
- for (ActionList::const_iterator it = al.constBegin(); it != acend; ++it)
- menu.addAction(*it);
+ for (auto *a : al)
+ menu.addAction(a);
menu.exec(event->globalPos());
return true;
}
@@ -425,7 +401,7 @@ void QDesignerMenuBar::slotRemoveMenuBar()
QDesignerFormWindowInterface *fw = formWindow();
- DeleteMenuBarCommand *cmd = new DeleteMenuBarCommand(fw);
+ auto *cmd = new qdesigner_internal::DeleteMenuBarCommand(fw);
cmd->init(this);
fw->commandHistory()->push(cmd);
}
@@ -444,6 +420,8 @@ void QDesignerMenuBar::enterEditMode()
void QDesignerMenuBar::leaveEditMode(LeaveEditMode mode)
{
+ using namespace qdesigner_internal;
+
m_editor->releaseKeyboard();
if (mode == Default)
@@ -462,20 +440,20 @@ void QDesignerMenuBar::leaveEditMode(LeaveEditMode mode)
fw->beginCommand(QApplication::translate("Command", "Change Title"));
} else {
fw->beginCommand(QApplication::translate("Command", "Insert Menu"));
- const QString niceObjectName = ActionEditor::actionTextToName(m_editor->text(), QStringLiteral("menu"));
- QMenu *menu = qobject_cast<QMenu*>(fw->core()->widgetFactory()->createWidget(QStringLiteral("QMenu"), this));
+ const QString niceObjectName = ActionEditor::actionTextToName(m_editor->text(), u"menu"_s);
+ QMenu *menu = qobject_cast<QMenu*>(fw->core()->widgetFactory()->createWidget(u"QMenu"_s, this));
fw->core()->widgetFactory()->initialize(menu);
menu->setObjectName(niceObjectName);
menu->setTitle(tr("Menu"));
fw->ensureUniqueObjectName(menu);
action = menu->menuAction();
- AddMenuActionCommand *cmd = new AddMenuActionCommand(fw);
+ auto *cmd = new qdesigner_internal::AddMenuActionCommand(fw);
cmd->init(action, m_addMenu, this, this);
fw->commandHistory()->push(cmd);
}
- SetPropertyCommand *cmd = new SetPropertyCommand(fw);
- cmd->init(action, QStringLiteral("text"), m_editor->text());
+ auto *cmd = new qdesigner_internal::SetPropertyCommand(fw);
+ cmd->init(action, u"text"_s, m_editor->text());
fw->commandHistory()->push(cmd);
fw->endCommand();
}
@@ -503,7 +481,7 @@ void QDesignerMenuBar::showLineEdit()
m_editor->selectAll();
m_editor->setGeometry(actionGeometry(action));
m_editor->show();
- qApp->setActiveWindow(m_editor);
+ m_editor->activateWindow();
m_editor->setFocus();
m_editor->grabKeyboard();
}
@@ -585,7 +563,7 @@ void QDesignerMenuBar::adjustIndicator(const QPoint &pos)
QDesignerMenuBar::ActionDragCheck QDesignerMenuBar::checkAction(QAction *action) const
{
// action belongs to another form
- if (!action || !Utils::isObjectAncestorOf(formWindow()->mainContainer(), action))
+ if (!action || !qdesigner_internal::Utils::isObjectAncestorOf(formWindow()->mainContainer(), action))
return NoActionDrag;
if (!action->menu())
@@ -603,7 +581,7 @@ QDesignerMenuBar::ActionDragCheck QDesignerMenuBar::checkAction(QAction *action)
void QDesignerMenuBar::dragEnterEvent(QDragEnterEvent *event)
{
- const ActionRepositoryMimeData *d = qobject_cast<const ActionRepositoryMimeData*>(event->mimeData());
+ auto *d = qobject_cast<const qdesigner_internal::ActionRepositoryMimeData*>(event->mimeData());
if (!d || d->actionList().isEmpty()) {
event->ignore();
return;
@@ -628,7 +606,7 @@ void QDesignerMenuBar::dragEnterEvent(QDragEnterEvent *event)
void QDesignerMenuBar::dragMoveEvent(QDragMoveEvent *event)
{
- const ActionRepositoryMimeData *d = qobject_cast<const ActionRepositoryMimeData*>(event->mimeData());
+ auto *d = qobject_cast<const qdesigner_internal::ActionRepositoryMimeData*>(event->mimeData());
if (!d || d->actionList().isEmpty()) {
event->ignore();
return;
@@ -661,16 +639,16 @@ void QDesignerMenuBar::dropEvent(QDropEvent *event)
{
m_dragging = false;
- if (const ActionRepositoryMimeData *d = qobject_cast<const ActionRepositoryMimeData*>(event->mimeData())) {
+ if (auto *d = qobject_cast<const qdesigner_internal::ActionRepositoryMimeData*>(event->mimeData())) {
QAction *action = d->actionList().first();
if (checkAction(action) == AcceptActionDrag) {
event->acceptProposedAction();
int index = findAction(event->position().toPoint());
- index = qMin(index, actions().count() - 1);
+ index = qMin(index, actions().size() - 1);
QDesignerFormWindowInterface *fw = formWindow();
- InsertActionIntoCommand *cmd = new InsertActionIntoCommand(fw);
+ auto *cmd = new qdesigner_internal::InsertActionIntoCommand(fw);
cmd->init(this, action, safeActionAt(index));
fw->commandHistory()->push(cmd);
@@ -705,7 +683,7 @@ QDesignerActionProviderExtension *QDesignerMenuBar::actionProvider()
QAction *QDesignerMenuBar::currentAction() const
{
- if (m_currentIndex < 0 || m_currentIndex >= actions().count())
+ if (m_currentIndex < 0 || m_currentIndex >= actions().size())
return nullptr;
return safeActionAt(m_currentIndex);
@@ -713,7 +691,7 @@ QAction *QDesignerMenuBar::currentAction() const
int QDesignerMenuBar::realActionCount() const
{
- return actions().count() - 1; // 1 fake actions
+ return actions().size() - 1; // 1 fake actions
}
bool QDesignerMenuBar::dragging() const
@@ -753,7 +731,7 @@ void QDesignerMenuBar::movePrevious(bool ctrl)
void QDesignerMenuBar::moveNext(bool ctrl)
{
const bool swapped = ctrl && swapActions(m_currentIndex + 1, m_currentIndex);
- const int newIndex = qMin(actions().count() - 1, m_currentIndex + 1);
+ const int newIndex = qMin(actions().size() - 1, m_currentIndex + 1);
if (swapped || newIndex != m_currentIndex) {
m_currentIndex = newIndex;
updateCurrentAction(!ctrl);
@@ -802,14 +780,14 @@ void QDesignerMenuBar::deleteMenu()
void QDesignerMenuBar::deleteMenuAction(QAction *action)
{
- if (action && !qobject_cast<SpecialMenuAction*>(action)) {
+ if (action && !qobject_cast<qdesigner_internal::SpecialMenuAction*>(action)) {
const int pos = actions().indexOf(action);
QAction *action_before = nullptr;
if (pos != -1)
action_before = safeActionAt(pos + 1);
QDesignerFormWindowInterface *fw = formWindow();
- RemoveMenuActionCommand *cmd = new RemoveMenuActionCommand(fw);
+ auto *cmd = new qdesigner_internal::RemoveMenuActionCommand(fw);
cmd->init(action, action_before, this, this);
fw->commandHistory()->push(cmd);
}
@@ -858,7 +836,7 @@ void QDesignerMenuBar::showMenu(int index)
QAction *QDesignerMenuBar::safeActionAt(int index) const
{
- if (index < 0 || index >= actions().count())
+ if (index < 0 || index >= actions().size())
return nullptr;
return actions().at(index);
@@ -866,6 +844,8 @@ QAction *QDesignerMenuBar::safeActionAt(int index) const
bool QDesignerMenuBar::swapActions(int a, int b)
{
+ using namespace qdesigner_internal;
+
const int left = qMin(a, b);
int right = qMax(a, b);
@@ -888,21 +868,21 @@ bool QDesignerMenuBar::swapActions(int a, int b)
QAction *action_b_before = safeActionAt(right + 1);
QDesignerFormWindowInterface *fw = formWindow();
- RemoveActionFromCommand *cmd1 = new RemoveActionFromCommand(fw);
+ auto *cmd1 = new qdesigner_internal::RemoveActionFromCommand(fw);
cmd1->init(this, action_b, action_b_before, false);
fw->commandHistory()->push(cmd1);
QAction *action_a_before = safeActionAt(left + 1);
- InsertActionIntoCommand *cmd2 = new InsertActionIntoCommand(fw);
+ auto *cmd2 = new qdesigner_internal::InsertActionIntoCommand(fw);
cmd2->init(this, action_b, action_a_before, false);
fw->commandHistory()->push(cmd2);
- RemoveActionFromCommand *cmd3 = new RemoveActionFromCommand(fw);
+ auto *cmd3 = new qdesigner_internal::RemoveActionFromCommand(fw);
cmd3->init(this, action_a, action_b, false);
fw->commandHistory()->push(cmd3);
- InsertActionIntoCommand *cmd4 = new InsertActionIntoCommand(fw);
+ auto *cmd4 = new qdesigner_internal::InsertActionIntoCommand(fw);
cmd4->init(this, action_a, action_b_before, true);
fw->commandHistory()->push(cmd4);
@@ -923,6 +903,8 @@ void QDesignerMenuBar::keyReleaseEvent(QKeyEvent *event)
void QDesignerMenuBar::updateCurrentAction(bool selectAction)
{
+ using namespace qdesigner_internal;
+
update();
if (!selectAction)
diff --git a/src/designer/src/lib/shared/qdesigner_menubar_p.h b/src/designer/src/lib/shared/qdesigner_menubar_p.h
index 8b6e5383e..e1d02e3fa 100644
--- a/src/designer/src/lib/shared/qdesigner_menubar_p.h
+++ b/src/designer/src/lib/shared/qdesigner_menubar_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/qdesigner_objectinspector.cpp b/src/designer/src/lib/shared/qdesigner_objectinspector.cpp
index c672dca70..9d5465031 100644
--- a/src/designer/src/lib/shared/qdesigner_objectinspector.cpp
+++ b/src/designer/src/lib/shared/qdesigner_objectinspector.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_objectinspector_p.h"
diff --git a/src/designer/src/lib/shared/qdesigner_objectinspector_p.h b/src/designer/src/lib/shared/qdesigner_objectinspector_p.h
index be7925d6e..e43954392 100644
--- a/src/designer/src/lib/shared/qdesigner_objectinspector_p.h
+++ b/src/designer/src/lib/shared/qdesigner_objectinspector_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/qdesigner_promotion.cpp b/src/designer/src/lib/shared/qdesigner_promotion.cpp
index 08b2848fd..eb78dd413 100644
--- a/src/designer/src/lib/shared/qdesigner_promotion.cpp
+++ b/src/designer/src/lib/shared/qdesigner_promotion.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_promotion_p.h"
#include "widgetdatabase_p.h"
@@ -44,19 +19,20 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace {
// Return a set of on-promotable classes
const QSet<QString> &nonPromotableClasses() {
- static QSet<QString> rc;
- if (rc.isEmpty()) {
- rc.insert(QStringLiteral("Line"));
- rc.insert(QStringLiteral("QAction"));
- rc.insert(QStringLiteral("Spacer"));
- rc.insert(QStringLiteral("QMainWindow"));
- rc.insert(QStringLiteral("QDialog"));
- rc.insert(QStringLiteral("QMdiArea"));
- rc.insert(QStringLiteral("QMdiSubWindow"));
- }
+ static const QSet<QString> rc = {
+ u"Line"_s,
+ u"QAction"_s,
+ u"Spacer"_s,
+ u"QMainWindow"_s,
+ u"QDialog"_s,
+ u"QMdiArea"_s,
+ u"QMdiSubWindow"_s
+ };
return rc;
}
@@ -84,13 +60,14 @@ namespace {
}
// extract class name from xml "<widget class="QWidget" ...>". Quite a hack.
- QString classNameFromXml(QString xml) {
- static const QString tag = QStringLiteral("class=\"");
+ QString classNameFromXml(QString xml)
+ {
+ constexpr auto tag = "class=\""_L1;
const int pos = xml.indexOf(tag);
if (pos == -1)
return QString();
xml.remove(0, pos + tag.size());
- const int closingPos = xml.indexOf(QLatin1Char('"'));
+ const auto closingPos = xml.indexOf(u'"');
if (closingPos == -1)
return QString();
xml.remove(closingPos, xml.size() - closingPos);
@@ -193,8 +170,7 @@ namespace qdesigner_internal {
if (nonPromotableClasses().contains(name))
return false;
- if (name.startsWith(QStringLiteral("QDesigner")) ||
- name.startsWith(QStringLiteral("QLayout")))
+ if (name.startsWith("QDesigner"_L1) || name.startsWith("QLayout"_L1))
return false;
return true;
@@ -204,9 +180,7 @@ namespace qdesigner_internal {
{
using ClassNameItemMap = QMap<QString, QDesignerWidgetDataBaseItemInterface *>;
// A map containing base classes and their promoted classes.
- using BaseClassPromotedMap = QMap<QString, ClassNameItemMap>;
-
- BaseClassPromotedMap baseClassPromotedMap;
+ QMap<QString, ClassNameItemMap> baseClassPromotedMap;
QDesignerWidgetDataBaseInterface *widgetDataBase = m_core->widgetDataBase();
// Look for promoted classes and insert into map according to base class.
@@ -215,7 +189,7 @@ namespace qdesigner_internal {
QDesignerWidgetDataBaseItemInterface *dbItem = widgetDataBase->item(i);
if (dbItem->isPromoted()) {
const QString baseClassName = dbItem->extends();
- BaseClassPromotedMap::iterator it = baseClassPromotedMap.find(baseClassName);
+ auto it = baseClassPromotedMap.find(baseClassName);
if (it == baseClassPromotedMap.end()) {
it = baseClassPromotedMap.insert(baseClassName, ClassNameItemMap());
}
@@ -228,14 +202,12 @@ namespace qdesigner_internal {
if (baseClassPromotedMap.isEmpty())
return rc;
- const BaseClassPromotedMap::const_iterator bcend = baseClassPromotedMap.constEnd();
- for (BaseClassPromotedMap::const_iterator bit = baseClassPromotedMap.constBegin(); bit != bcend; ++bit) {
+ for (auto bit = baseClassPromotedMap.cbegin(), bcend = baseClassPromotedMap.cend(); bit != bcend; ++bit) {
const int baseIndex = widgetDataBase->indexOfClassName(bit.key());
Q_ASSERT(baseIndex >= 0);
QDesignerWidgetDataBaseItemInterface *baseItem = widgetDataBase->item(baseIndex);
// promoted
- const ClassNameItemMap::const_iterator pcend = bit.value().constEnd();
- for (ClassNameItemMap::const_iterator pit = bit.value().constBegin(); pit != pcend; ++pit) {
+ for (auto pit = bit.value().cbegin(), pcend = bit.value().cend(); pit != pcend; ++pit) {
PromotedClass item;
item.baseItem = baseItem;
item.promotedItem = pit.value();
@@ -265,11 +237,10 @@ namespace qdesigner_internal {
if (!scratchPadClasses.isEmpty()) {
// Check whether these are actually promoted
QDesignerWidgetDataBaseInterface *widgetDataBase = m_core->widgetDataBase();
- QStringList::const_iterator cend = scratchPadClasses.constEnd();
- for (QStringList::const_iterator it = scratchPadClasses.constBegin(); it != cend; ++it ) {
- const int index = widgetDataBase->indexOfClassName(*it);
+ for (const auto &scItem : scratchPadClasses) {
+ const int index = widgetDataBase->indexOfClassName(scItem);
if (index != -1 && widgetDataBase->item(index)->isPromoted())
- rc += *it;
+ rc.insert(scItem);
}
}
}
@@ -301,12 +272,12 @@ namespace qdesigner_internal {
// class B will depend on it. When removing QWebView, the base class of B will
// be changed to that of QWebView by the below code.
const PromotedClasses promotedList = promotedClasses();
- for (PromotedClasses::const_iterator it = promotedList.constBegin(), end = promotedList.constEnd(); it != end; ++it) {
- if (it->baseItem->name() == className) {
+ for (const auto &pc : promotedList) {
+ if (pc.baseItem->name() == className) {
const QString extends = widgetDataBase->item(index)->extends();
- qWarning().nospace() << "Warning: Promoted class " << it->promotedItem->name()
+ qWarning().nospace() << "Warning: Promoted class " << pc.promotedItem->name()
<< " extends " << className << ", changing its base class to " << extends << '.';
- it->promotedItem->setExtends(extends);
+ pc.promotedItem->setExtends(extends);
}
}
widgetDataBase->remove(index);
diff --git a/src/designer/src/lib/shared/qdesigner_promotion_p.h b/src/designer/src/lib/shared/qdesigner_promotion_p.h
index 3448fd999..e268296ac 100644
--- a/src/designer/src/lib/shared/qdesigner_promotion_p.h
+++ b/src/designer/src/lib/shared/qdesigner_promotion_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/qdesigner_promotiondialog.cpp b/src/designer/src/lib/shared/qdesigner_promotiondialog.cpp
index 18261f640..286ee3538 100644
--- a/src/designer/src/lib/shared/qdesigner_promotiondialog.cpp
+++ b/src/designer/src/lib/shared/qdesigner_promotiondialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_promotiondialog_p.h"
#include "promotionmodel_p.h"
@@ -60,6 +35,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
// PromotionParameters
struct PromotionParameters {
@@ -83,7 +60,7 @@ namespace qdesigner_internal {
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Maximum);
QHBoxLayout *hboxLayout = new QHBoxLayout(this);
- m_classNameEdit->setValidator(new QRegularExpressionValidator(QRegularExpression(QStringLiteral("^[_a-zA-Z:][:_a-zA-Z0-9]*$")), m_classNameEdit));
+ m_classNameEdit->setValidator(new QRegularExpressionValidator(QRegularExpression(u"^[_a-zA-Z:][:_a-zA-Z0-9]*$"_s), m_classNameEdit));
connect(m_classNameEdit, &QLineEdit::textChanged,
this, &NewPromotedClassPanel::slotNameChanged);
connect(m_includeFileEdit, &QLineEdit::textChanged,
@@ -99,8 +76,19 @@ namespace qdesigner_internal {
formLayout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow); // Mac
formLayout->addRow(tr("Base class name:"), m_baseClassCombo);
formLayout->addRow(tr("Promoted class name:"), m_classNameEdit);
- formLayout->addRow(tr("Header file:"), m_includeFileEdit);
- formLayout->addRow(tr("Global include"), m_globalIncludeCheckBox);
+
+ QString toolTip = tr("Header file for C++ classes or module name for Qt for Python.");
+ auto *label = new QLabel(tr("Header file:"));
+ label->setToolTip(toolTip);
+ formLayout->addRow(label, m_includeFileEdit);
+ m_includeFileEdit->setToolTip(toolTip);
+
+ toolTip = tr("Indicates that the header file is a global header file. Does not have any effect on Qt for Python.");
+ label = new QLabel(tr("Global include"));
+ label->setToolTip(toolTip);
+ formLayout->addRow(label, m_globalIncludeCheckBox);
+ m_globalIncludeCheckBox->setToolTip(toolTip);
+
hboxLayout->addLayout(formLayout);
hboxLayout->addItem(new QSpacerItem(15, 0, QSizePolicy::Fixed, QSizePolicy::Ignored));
// Button box
@@ -143,12 +131,11 @@ namespace qdesigner_internal {
void NewPromotedClassPanel::slotNameChanged(const QString &className) {
// Suggest a name
if (!className.isEmpty()) {
- const QChar dot(QLatin1Char('.'));
QString suggestedHeader = m_promotedHeaderLowerCase ?
className.toLower() : className;
- suggestedHeader.replace(QStringLiteral("::"), QString(QLatin1Char('_')));
- if (!m_promotedHeaderSuffix.startsWith(dot))
- suggestedHeader += dot;
+ suggestedHeader.replace("::"_L1, "_"_L1);
+ if (!m_promotedHeaderSuffix.startsWith(u'.'))
+ suggestedHeader += u'.';
suggestedHeader += m_promotedHeaderSuffix;
const bool blocked = m_includeFileEdit->blockSignals(true);
@@ -197,12 +184,11 @@ namespace qdesigner_internal {
m_model(new PromotionModel(core)),
m_treeView(new QTreeView),
m_buttonBox(nullptr),
- m_removeButton(new QPushButton(createIconSet(QString::fromUtf8("minus.png")), QString()))
+ m_removeButton(new QPushButton(createIconSet("minus.png"_L1), QString()))
{
m_buttonBox = createButtonBox();
setModal(true);
setWindowTitle(tr("Promoted Widgets"));
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
QVBoxLayout *vboxLayout = new QVBoxLayout(this);
@@ -241,7 +227,7 @@ namespace qdesigner_internal {
preselectedBaseClass = baseClassNameList.indexOf(m_promotableWidgetClassName);
}
if (preselectedBaseClass == -1)
- preselectedBaseClass = baseClassNameList.indexOf(QStringLiteral("QFrame"));
+ preselectedBaseClass = baseClassNameList.indexOf("QFrame"_L1);
NewPromotedClassPanel *newPromotedClassPanel = new NewPromotedClassPanel(baseClassNameList, preselectedBaseClass);
newPromotedClassPanel->setPromotedHeaderSuffix(core->integration()->headerSuffix());
@@ -295,10 +281,8 @@ namespace qdesigner_internal {
if (rc.isEmpty()) {
// Convert the item list into a string list.
const WidgetDataBaseItemList dbItems = promotion->promotionBaseClasses();
- const WidgetDataBaseItemList::const_iterator cend = dbItems.constEnd();
- for (WidgetDataBaseItemList::const_iterator it = dbItems.constBegin() ; it != cend; ++it) {
- rc.push_back( (*it)->name());
- }
+ for (auto *item : dbItems)
+ rc.append(item->name());
}
return rc;
}
diff --git a/src/designer/src/lib/shared/qdesigner_promotiondialog_p.h b/src/designer/src/lib/shared/qdesigner_promotiondialog_p.h
index e9cb7d4fe..f39b2bd54 100644
--- a/src/designer/src/lib/shared/qdesigner_promotiondialog_p.h
+++ b/src/designer/src/lib/shared/qdesigner_promotiondialog_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/qdesigner_propertycommand.cpp b/src/designer/src/lib/shared/qdesigner_propertycommand.cpp
index 77b4dbf8c..f24675e7b 100644
--- a/src/designer/src/lib/shared/qdesigner_propertycommand.cpp
+++ b/src/designer/src/lib/shared/qdesigner_propertycommand.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_propertycommand_p.h"
#include "qdesigner_utils_p.h"
@@ -59,29 +34,33 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace {
enum { debugPropertyCommands = 0 };
+const unsigned QFontFamiliesResolved = (QFont::FamilyResolved | QFont::FamiliesResolved);
+
// Debug resolve mask of font
QString fontMask(unsigned m)
{
QString rc;
- if (m & QFont::FamilyResolved)
- rc += QStringLiteral("Family");
+ if (m & QFontFamiliesResolved)
+ rc += "Family"_L1;
if (m & QFont::SizeResolved)
- rc += QStringLiteral("Size ");
+ rc += "Size "_L1;
if (m & QFont::WeightResolved)
- rc += QStringLiteral("Bold ");
+ rc += "Bold "_L1;
if (m & QFont::StyleResolved)
- rc += QStringLiteral("Style ");
+ rc += "Style "_L1;
if (m & QFont::UnderlineResolved)
- rc += QStringLiteral("Underline ");
+ rc += "Underline "_L1;
if (m & QFont::StrikeOutResolved)
- rc += QStringLiteral("StrikeOut ");
+ rc += "StrikeOut "_L1;
if (m & QFont::KerningResolved)
- rc += QStringLiteral("Kerning ");
+ rc += "Kerning "_L1;
if (m & QFont::StyleStrategyResolved)
- rc += QStringLiteral("StyleStrategy");
+ rc += "StyleStrategy"_L1;
return rc;
}
@@ -89,22 +68,20 @@ QString fontMask(unsigned m)
QString fontString(const QFont &f)
{
QString rc; {
- const QChar comma = QLatin1Char(',');
QTextStream str(&rc);
- str << QStringLiteral("QFont(\"") << f.family() << comma <<
- f.pointSize();
+ str << "QFont(\"" << f.family() << ',' << f.pointSize();
if (f.bold())
- str << comma << QStringLiteral("bold");
+ str << ',' << "bold";
if (f.italic())
- str << comma << QStringLiteral("italic");
+ str << ',' << "italic";
if (f.underline())
- str << comma << QStringLiteral("underline");
+ str << ',' << "underline";
if (f.strikeOut())
- str << comma << QStringLiteral("strikeOut");
+ str << ',' << "strikeOut";
if (f.kerning())
- str << comma << QStringLiteral("kerning");
- str << comma << f.styleStrategy() << QStringLiteral(" resolve: ")
- << fontMask(f.resolveMask()) << QLatin1Char(')');
+ str << ',' << "kerning";
+ str << ',' << f.styleStrategy() << " resolve: "
+ << fontMask(f.resolveMask()) << ')';
}
return rc;
}
@@ -168,16 +145,16 @@ enum KeySequenceSubPropertyMask { SubPropertyKeySequenceValue = 1, SubPropertyKe
SubPropertyKeySequenceTranslatable = 4, SubPropertyKeySequenceDisambiguation = 8,
SubPropertyKeySequenceId = 16 };
-enum CommonSubPropertyMask { SubPropertyAll = 0xFFFFFFFF };
+enum CommonSubPropertyMask : quint64 { SubPropertyAll = quint64(-1) };
// Set the mask flag in mask if the properties do not match.
#define COMPARE_SUBPROPERTY(object1, object2, getter, mask, maskFlag) \
if (object1.getter() != object2.getter()) (mask) |= (maskFlag);
// find changed subproperties of a rectangle
-unsigned compareSubProperties(const QRect & r1, const QRect & r2)
+quint64 compareSubProperties(const QRect & r1, const QRect & r2)
{
- unsigned rc = 0;
+ quint64 rc = 0;
COMPARE_SUBPROPERTY(r1, r2, x, rc, SubPropertyX)
COMPARE_SUBPROPERTY(r1, r2, y, rc, SubPropertyY)
COMPARE_SUBPROPERTY(r1, r2, width, rc, SubPropertyWidth)
@@ -186,17 +163,17 @@ unsigned compareSubProperties(const QRect & r1, const QRect & r2)
}
// find changed subproperties of a QSize
-unsigned compareSubProperties(const QSize & r1, const QSize & r2)
+quint64 compareSubProperties(const QSize & r1, const QSize & r2)
{
- unsigned rc = 0;
+ quint64 rc = 0;
COMPARE_SUBPROPERTY(r1, r2, width, rc, SubPropertyWidth)
COMPARE_SUBPROPERTY(r1, r2, height, rc, SubPropertyHeight)
return rc;
}
// find changed subproperties of a QSizePolicy
-unsigned compareSubProperties(const QSizePolicy & sp1, const QSizePolicy & sp2)
+quint64 compareSubProperties(const QSizePolicy & sp1, const QSizePolicy & sp2)
{
- unsigned rc = 0;
+ quint64 rc = 0;
COMPARE_SUBPROPERTY(sp1, sp2, horizontalPolicy, rc, SubPropertyHSizePolicy)
COMPARE_SUBPROPERTY(sp1, sp2, horizontalStretch, rc, SubPropertyHStretch)
COMPARE_SUBPROPERTY(sp1, sp2, verticalPolicy, rc, SubPropertyVSizePolicy)
@@ -204,9 +181,9 @@ unsigned compareSubProperties(const QSizePolicy & sp1, const QSizePolicy & sp2)
return rc;
}
// find changed subproperties of qdesigner_internal::PropertySheetStringValue
-unsigned compareSubProperties(const qdesigner_internal::PropertySheetStringValue & str1, const qdesigner_internal::PropertySheetStringValue & str2)
+quint64 compareSubProperties(const qdesigner_internal::PropertySheetStringValue & str1, const qdesigner_internal::PropertySheetStringValue & str2)
{
- unsigned rc = 0;
+ quint64 rc = 0;
COMPARE_SUBPROPERTY(str1, str2, value, rc, SubPropertyStringValue)
COMPARE_SUBPROPERTY(str1, str2, comment, rc, SubPropertyStringComment)
COMPARE_SUBPROPERTY(str1, str2, translatable, rc, SubPropertyStringTranslatable)
@@ -215,9 +192,9 @@ unsigned compareSubProperties(const qdesigner_internal::PropertySheetStringValue
return rc;
}
// find changed subproperties of qdesigner_internal::PropertySheetStringListValue
-unsigned compareSubProperties(const qdesigner_internal::PropertySheetStringListValue & str1, const qdesigner_internal::PropertySheetStringListValue & str2)
+quint64 compareSubProperties(const qdesigner_internal::PropertySheetStringListValue & str1, const qdesigner_internal::PropertySheetStringListValue & str2)
{
- unsigned rc = 0;
+ quint64 rc = 0;
COMPARE_SUBPROPERTY(str1, str2, value, rc, SubPropertyStringListValue)
COMPARE_SUBPROPERTY(str1, str2, comment, rc, SubPropertyStringListComment)
COMPARE_SUBPROPERTY(str1, str2, translatable, rc, SubPropertyStringListTranslatable)
@@ -226,9 +203,9 @@ unsigned compareSubProperties(const qdesigner_internal::PropertySheetStringListV
return rc;
}
// find changed subproperties of qdesigner_internal::PropertySheetKeySequenceValue
-unsigned compareSubProperties(const qdesigner_internal::PropertySheetKeySequenceValue & str1, const qdesigner_internal::PropertySheetKeySequenceValue & str2)
+quint64 compareSubProperties(const qdesigner_internal::PropertySheetKeySequenceValue & str1, const qdesigner_internal::PropertySheetKeySequenceValue & str2)
{
- unsigned rc = 0;
+ quint64 rc = 0;
COMPARE_SUBPROPERTY(str1, str2, value, rc, SubPropertyKeySequenceValue)
COMPARE_SUBPROPERTY(str1, str2, comment, rc, SubPropertyKeySequenceComment)
COMPARE_SUBPROPERTY(str1, str2, translatable, rc, SubPropertyKeySequenceTranslatable)
@@ -243,8 +220,8 @@ template <class Property>
void compareFontSubProperty(const QFont & f1,
const QFont & f2,
Property (QFont::*getter) () const,
- unsigned maskBit,
- unsigned &mask)
+ quint64 maskBit,
+ quint64 &mask)
{
const bool f1Changed = f1.resolveMask() & maskBit;
const bool f2Changed = f2.resolveMask() & maskBit;
@@ -258,60 +235,55 @@ void compareFontSubProperty(const QFont & f1,
}
}
// find changed subproperties of a QFont
-unsigned compareSubProperties(const QFont & f1, const QFont & f2)
+quint64 compareSubProperties(const QFont & f1, const QFont & f2)
{
- unsigned rc = 0;
- compareFontSubProperty(f1, f2, &QFont::family, QFont::FamilyResolved, rc);
+ quint64 rc = 0;
+ compareFontSubProperty(f1, f2, &QFont::family, QFontFamiliesResolved, rc);
compareFontSubProperty(f1, f2, &QFont::pointSize, QFont::SizeResolved, rc);
- compareFontSubProperty(f1, f2, &QFont::bold, QFont::WeightResolved, rc);
+ compareFontSubProperty(f1, f2, &QFont::weight, QFont::WeightResolved, rc);
compareFontSubProperty(f1, f2, &QFont::italic, QFont::StyleResolved, rc);
compareFontSubProperty(f1, f2, &QFont::underline, QFont::UnderlineResolved, rc);
compareFontSubProperty(f1, f2, &QFont::strikeOut, QFont::StrikeOutResolved, rc);
compareFontSubProperty(f1, f2, &QFont::kerning, QFont::KerningResolved, rc);
compareFontSubProperty(f1, f2, &QFont::styleStrategy, QFont::StyleStrategyResolved, rc);
+ compareFontSubProperty(f1, f2, &QFont::hintingPreference, QFont::HintingPreferenceResolved, rc);
if (debugPropertyCommands)
qDebug() << "compareSubProperties " << fontString(f1) << fontString(f2) << "\n\treturns " << fontMask(rc);
return rc;
}
-// Compare colors of a role
-bool roleColorChanged(const QPalette & p1, const QPalette & p2, QPalette::ColorRole role)
-{
- for (int group = QPalette::Active; group < QPalette::NColorGroups; group++) {
- const QPalette::ColorGroup pgroup = static_cast<QPalette::ColorGroup>(group);
- if (p1.color(pgroup, role) != p2.color(pgroup, role))
- return true;
- }
- return false;
-}
// find changed subproperties of a QPalette taking the [undocumented] resolve flags into account
-unsigned compareSubProperties(const QPalette & p1, const QPalette & p2)
+quint64 compareSubProperties(const QPalette & p1, const QPalette & p2)
{
- unsigned rc = 0;
- unsigned maskBit = 1u;
+ quint64 rc = 0;
// generate a mask for each role
- const unsigned p1Changed = p1.resolveMask();
- const unsigned p2Changed = p2.resolveMask();
- for (int role = QPalette::WindowText; role < QPalette::NColorRoles; role++, maskBit <<= 1u) {
- const bool p1RoleChanged = p1Changed & maskBit;
- const bool p2RoleChanged = p2Changed & maskBit;
- // Role has been set/reset in editor
- if (p1RoleChanged != p2RoleChanged) {
- rc |= maskBit;
- } else {
- // Was modified in both palettes: Compare values.
- if (p1RoleChanged && p2RoleChanged && roleColorChanged(p1, p2, static_cast<QPalette::ColorRole>(role)))
+ const auto p1Changed = p1.resolveMask();
+ const auto p2Changed = p2.resolveMask();
+
+ for (int r = 0; r < static_cast<int>(QPalette::NColorRoles); ++r) {
+ for (int g = 0; g < static_cast<int>(QPalette::NColorGroups); ++g) {
+ const auto role = static_cast<QPalette::ColorRole>(r);
+ const auto group = static_cast<QPalette::ColorGroup>(g);
+ const auto maskBit = qdesigner_internal::paletteResolveMask(group, role);
+ const bool p1RoleChanged = p1Changed & maskBit;
+ const bool p2RoleChanged = p2Changed & maskBit;
+ if (p1RoleChanged != p2RoleChanged // Role has been set/reset in editor
+ // Was modified in both palettes: Compare values.
+ || (p1RoleChanged && p2RoleChanged
+ && p1.brush(group, role).color() != p2.brush(group, role).color())) {
rc |= maskBit;
+ }
}
}
+
return rc;
}
// find changed subproperties of a QAlignment which is a flag combination of vertical and horizontal
-unsigned compareSubProperties(Qt::Alignment a1, Qt::Alignment a2)
+quint64 compareSubProperties(Qt::Alignment a1, Qt::Alignment a2)
{
- unsigned rc = 0;
+ quint64 rc = 0;
if ((a1 & Qt::AlignHorizontal_Mask) != (a2 & Qt::AlignHorizontal_Mask))
rc |= SubPropertyHorizontalAlignment;
if ((a1 & Qt::AlignVertical_Mask) != (a2 & Qt::AlignVertical_Mask))
@@ -324,22 +296,24 @@ Qt::Alignment variantToAlignment(const QVariant & q)
return Qt::Alignment(qdesigner_internal::Utils::valueOf(q));
}
// find changed subproperties of a variant
-unsigned compareSubProperties(const QVariant & q1, const QVariant & q2, qdesigner_internal::SpecialProperty specialProperty)
+quint64 compareSubProperties(const QVariant & q1, const QVariant & q2, qdesigner_internal::SpecialProperty specialProperty)
{
// Do not clobber new value in the comparison function in
// case someone sets a QString on a PropertySheetStringValue.
- if (q1.type() != q2.type())
+ const int t1 = q1.metaType().id();
+ const int t2 = q2.metaType().id();
+ if (t1 != t2)
return SubPropertyAll;
- switch (q1.type()) {
- case QVariant::Rect:
+ switch (t1) {
+ case QMetaType::QRect:
return compareSubProperties(q1.toRect(), q2.toRect());
- case QVariant::Size:
+ case QMetaType::QSize:
return compareSubProperties(q1.toSize(), q2.toSize());
- case QVariant::SizePolicy:
+ case QMetaType::QSizePolicy:
return compareSubProperties(qvariant_cast<QSizePolicy>(q1), qvariant_cast<QSizePolicy>(q2));
- case QVariant::Font:
+ case QMetaType::QFont:
return compareSubProperties(qvariant_cast<QFont>(q1), qvariant_cast<QFont>(q2));
- case QVariant::Palette:
+ case QMetaType::QPalette:
return compareSubProperties(qvariant_cast<QPalette>(q1), qvariant_cast<QPalette>(q2));
default:
if (q1.userType() == qMetaTypeId<qdesigner_internal::PropertySheetIconValue>())
@@ -466,40 +440,42 @@ inline void setFontSubProperty(unsigned mask,
QFont applyFontSubProperty(const QFont &oldValue, const QFont &newValue, unsigned mask)
{
QFont rc = oldValue;
- setFontSubProperty(mask, newValue, QFont::FamilyResolved, &QFont::family, &QFont::setFamily, rc);
+ setFontSubProperty(mask, newValue, QFontFamiliesResolved, &QFont::family, &QFont::setFamily, rc);
setFontSubProperty(mask, newValue, QFont::SizeResolved, &QFont::pointSize, &QFont::setPointSize, rc);
- setFontSubProperty(mask, newValue, QFont::WeightResolved, &QFont::bold, &QFont::setBold, rc);
+ setFontSubProperty(mask, newValue, QFont::WeightResolved, &QFont::weight, &QFont::setWeight, rc);
setFontSubProperty(mask, newValue, QFont::StyleResolved, &QFont::italic, &QFont::setItalic, rc);
setFontSubProperty(mask, newValue, QFont::UnderlineResolved, &QFont::underline, &QFont::setUnderline, rc);
setFontSubProperty(mask, newValue, QFont::StrikeOutResolved, &QFont::strikeOut, &QFont::setStrikeOut, rc);
setFontSubProperty(mask, newValue, QFont::KerningResolved, &QFont::kerning, &QFont::setKerning, rc);
setFontSubProperty(mask, newValue, QFont::StyleStrategyResolved, &QFont::styleStrategy, &QFont::setStyleStrategy, rc);
+ setFontSubProperty(mask, newValue, QFont::HintingPreferenceResolved, &QFont::hintingPreference, &QFont::setHintingPreference, rc);
if (debugPropertyCommands)
qDebug() << "applyFontSubProperty old " << fontMask(oldValue.resolveMask()) << " new " << fontMask(newValue.resolveMask()) << " return: " << fontMask(rc.resolveMask());
return rc;
}
// apply changed subproperties to a QPalette
-QPalette applyPaletteSubProperty(const QPalette &oldValue, const QPalette &newValue, unsigned mask)
+QPalette applyPaletteSubProperty(const QPalette &oldValue, const QPalette &newValue,
+ quint64 mask)
{
QPalette rc = oldValue;
- // apply a mask for each role
- unsigned maskBit = 1u;
- for (int role = QPalette::WindowText; role < QPalette::NColorRoles; role++, maskBit <<= 1u) {
- if (mask & maskBit) {
- for (int group = QPalette::Active; group < QPalette::NColorGroups; group++) {
- const QPalette::ColorGroup pgroup = static_cast<QPalette::ColorGroup>(group);
- const QPalette::ColorRole prole = static_cast<QPalette::ColorRole>(role);
- rc.setColor(pgroup, prole, newValue.color(pgroup, prole));
+ // apply a mask for each role/group
+ for (int r = 0; r < static_cast<int>(QPalette::NColorRoles); ++r) {
+ for (int g = 0; g < static_cast<int>(QPalette::NColorGroups); ++g) {
+ const auto role = static_cast<QPalette::ColorRole>(r);
+ const auto group = static_cast<QPalette::ColorGroup>(g);
+ const auto maskBit = qdesigner_internal::paletteResolveMask(group, role);
+ if (mask & maskBit) {
+ rc.setColor(group, role, newValue.color(group, role));
+ // Set the resolve bit from NewValue in return value
+ auto resolveMask = rc.resolveMask();
+ const bool origFlag = newValue.resolveMask() & maskBit;
+ if (origFlag)
+ resolveMask |= maskBit;
+ else
+ resolveMask &= ~maskBit;
+ rc.setResolveMask(resolveMask);
}
- // Set the resolve bit from NewValue in return value
- uint r = rc.resolveMask();
- const bool origFlag = newValue.resolveMask() & maskBit;
- if (origFlag)
- r |= maskBit;
- else
- r &= ~maskBit;
- rc.setResolveMask(r);
}
}
return rc;
@@ -522,19 +498,21 @@ Qt::Alignment applyAlignmentSubProperty(Qt::Alignment oldValue, Qt::Alignment ne
namespace qdesigner_internal {
// apply changed subproperties to a variant
-PropertyHelper::Value applySubProperty(const QVariant &oldValue, const QVariant &newValue, qdesigner_internal::SpecialProperty specialProperty, unsigned mask, bool changed)
+PropertyHelper::Value applySubProperty(const QVariant &oldValue, const QVariant &newValue,
+ qdesigner_internal::SpecialProperty specialProperty,
+ quint64 mask, bool changed)
{
if (mask == SubPropertyAll)
return PropertyHelper::Value(newValue, changed);
- switch (oldValue.type()) {
- case QVariant::Rect:
+ switch (oldValue.metaType().id()) {
+ case QMetaType::QRect:
return PropertyHelper::Value(applyRectSubProperty(oldValue.toRect(), newValue.toRect(), mask), changed);
- case QVariant::Size:
+ case QMetaType::QSize:
return PropertyHelper::Value(applySizeSubProperty(oldValue.toSize(), newValue.toSize(), mask), changed);
- case QVariant::SizePolicy:
+ case QMetaType::QSizePolicy:
return PropertyHelper::Value(QVariant::fromValue(applySizePolicySubProperty(qvariant_cast<QSizePolicy>(oldValue), qvariant_cast<QSizePolicy>(newValue), mask)), changed);
- case QVariant::Font: {
+ case QMetaType::QFont: {
// Changed flag in case of font and palette depends on resolve mask only, not on the passed "changed" value.
// The first case: the user changed bold subproperty and then pressed reset button for this subproperty (not for
@@ -554,7 +532,7 @@ PropertyHelper::Value applySubProperty(const QVariant &oldValue, const QVariant
QFont font = applyFontSubProperty(qvariant_cast<QFont>(oldValue), qvariant_cast<QFont>(newValue), mask);
return PropertyHelper::Value(QVariant::fromValue(font), font.resolveMask());
}
- case QVariant::Palette: {
+ case QMetaType::QPalette: {
QPalette palette = applyPaletteSubProperty(qvariant_cast<QPalette>(oldValue), qvariant_cast<QPalette>(newValue), mask);
return PropertyHelper::Value(QVariant::fromValue(palette), palette.resolveMask());
}
@@ -599,35 +577,35 @@ PropertyHelper::Value applySubProperty(const QVariant &oldValue, const QVariant
// figure out special property
enum SpecialProperty getSpecialProperty(const QString& propertyName)
{
- if (propertyName == QStringLiteral("objectName"))
+ if (propertyName == "objectName"_L1)
return SP_ObjectName;
- if (propertyName == QStringLiteral("layoutName"))
+ if (propertyName == "layoutName"_L1)
return SP_LayoutName;
- if (propertyName == QStringLiteral("spacerName"))
+ if (propertyName == "spacerName"_L1)
return SP_SpacerName;
- if (propertyName == QStringLiteral("icon"))
+ if (propertyName == "icon"_L1)
return SP_Icon;
- if (propertyName == QStringLiteral("currentTabName"))
+ if (propertyName == "currentTabName"_L1)
return SP_CurrentTabName;
- if (propertyName == QStringLiteral("currentItemName"))
+ if (propertyName == "currentItemName"_L1)
return SP_CurrentItemName;
- if (propertyName == QStringLiteral("currentPageName"))
+ if (propertyName == "currentPageName"_L1)
return SP_CurrentPageName;
- if (propertyName == QStringLiteral("geometry"))
+ if (propertyName == "geometry"_L1)
return SP_Geometry;
- if (propertyName == QStringLiteral("windowTitle"))
+ if (propertyName == "windowTitle"_L1)
return SP_WindowTitle;
- if (propertyName == QStringLiteral("minimumSize"))
+ if (propertyName == "minimumSize"_L1)
return SP_MinimumSize;
- if (propertyName == QStringLiteral("maximumSize"))
+ if (propertyName == "maximumSize"_L1)
return SP_MaximumSize;
- if (propertyName == QStringLiteral("alignment"))
+ if (propertyName == "alignment"_L1)
return SP_Alignment;
- if (propertyName == QStringLiteral("autoDefault"))
+ if (propertyName == "autoDefault"_L1)
return SP_AutoDefault;
- if (propertyName == QStringLiteral("shortcut"))
+ if (propertyName == "shortcut"_L1)
return SP_Shortcut;
- if (propertyName == QStringLiteral("orientation"))
+ if (propertyName == "orientation"_L1)
return SP_Orientation;
return SP_None;
}
@@ -647,8 +625,14 @@ PropertyHelper::PropertyHelper(QObject* object,
m_parentWidget = (qobject_cast<QWidget*>(object))->parentWidget();
m_objectType = OT_Widget;
} else {
- if (const QAction *action = qobject_cast<const QAction *>(m_object))
- m_objectType = action->associatedWidgets().isEmpty() ? OT_FreeAction : OT_AssociatedAction;
+ if (const QAction *action = qobject_cast<const QAction *>(m_object)) {
+ const QObjectList associatedObjects = action->associatedObjects();
+ auto it = std::find_if(associatedObjects.cbegin(), associatedObjects.cend(),
+ [](QObject *obj) {
+ return qobject_cast<QWidget *>(obj) != nullptr;
+ });
+ m_objectType = (it == associatedObjects.cend()) ? OT_FreeAction : OT_AssociatedAction;
+ }
}
if(debugPropertyCommands)
@@ -824,7 +808,8 @@ void PropertyHelper::ensureUniqueObjectName(QDesignerFormWindowInterface *fw, QO
}
}
-PropertyHelper::Value PropertyHelper::setValue(QDesignerFormWindowInterface *fw, const QVariant &value, bool changed, unsigned subPropertyMask)
+PropertyHelper::Value PropertyHelper::setValue(QDesignerFormWindowInterface *fw, const QVariant &value,
+ bool changed, quint64 subPropertyMask)
{
// Set new whole value
if (subPropertyMask == SubPropertyAll)
@@ -887,7 +872,7 @@ QVariant PropertyHelper::findDefaultValue(QDesignerFormWindowInterface *fw) cons
if (m_index < default_prop_values.size())
return default_prop_values.at(m_index);
- if (m_oldValue.first.type() == QVariant::Color)
+ if (m_oldValue.first.metaType().id() == QMetaType::QColor)
return QColor();
return m_oldValue.first; // Again, we just don't know
@@ -896,7 +881,7 @@ QVariant PropertyHelper::findDefaultValue(QDesignerFormWindowInterface *fw) cons
PropertyHelper::Value PropertyHelper::restoreDefaultValue(QDesignerFormWindowInterface *fw)
{
- Value defaultValue = qMakePair(QVariant(), false);
+ Value defaultValue{{}, false};
const QVariant currentValue = m_propertySheet->property(m_index);
// try to reset sheet, else try to find default
if (m_propertySheet->reset(m_index)) {
@@ -935,7 +920,7 @@ PropertyListCommand::PropertyDescription::PropertyDescription(const QString &pro
int index) :
m_propertyName(propertyName),
m_propertyGroup(propertySheet->propertyGroup(index)),
- m_propertyType(propertySheet->property(index).type()),
+ m_propertyType(propertySheet->property(index).metaType().id()),
m_specialProperty(getSpecialProperty(propertyName))
{
}
@@ -984,7 +969,7 @@ bool PropertyListCommand::add(QObject *object, const QString &propertyName)
const PropertyDescription description(propertyName, sheet, index);
- if (m_propertyHelperList.isEmpty()) {
+ if (m_propertyHelperList.empty()) {
// first entry
m_propertyDescription = description;
} else {
@@ -994,21 +979,22 @@ bool PropertyListCommand::add(QObject *object, const QString &propertyName)
return false;
}
- const PropertyHelperPtr ph(createPropertyHelper(object, m_propertyDescription.m_specialProperty, sheet, index));
- m_propertyHelperList.push_back(ph);
+ auto ph = createPropertyHelper(object, m_propertyDescription.m_specialProperty, sheet, index);
+ m_propertyHelperList.push_back(std::move(ph));
return true;
}
-PropertyHelper *PropertyListCommand::createPropertyHelper(QObject *object, SpecialProperty sp,
- QDesignerPropertySheetExtension *sheet, int sheetIndex) const
+std::unique_ptr<PropertyHelper>
+PropertyListCommand::createPropertyHelper(QObject *object, SpecialProperty sp,
+ QDesignerPropertySheetExtension *sheet, int sheetIndex) const
{
- return new PropertyHelper(object, sp, sheet, sheetIndex);
+ return std::make_unique<PropertyHelper>(object, sp, sheet, sheetIndex);
}
// Init from a list and make sure referenceObject is added first to obtain the right property group
bool PropertyListCommand::initList(const QObjectList &list, const QString &apropertyName, QObject *referenceObject)
{
- propertyHelperList().clear();
+ m_propertyHelperList.clear();
// Ensure the referenceObject (property editor) is first, so the right property group is chosen.
if (referenceObject) {
@@ -1020,41 +1006,44 @@ bool PropertyListCommand::initList(const QObjectList &list, const QString &aprop
add(o, apropertyName);
}
- return !propertyHelperList().isEmpty();
+ return !m_propertyHelperList.empty();
}
QObject* PropertyListCommand::object(int index) const
{
- Q_ASSERT(index < m_propertyHelperList.size());
- return m_propertyHelperList.at(index)->object();
+ Q_ASSERT(size_t(index) < m_propertyHelperList.size());
+ return m_propertyHelperList[index]->object();
}
QVariant PropertyListCommand::oldValue(int index) const
{
- Q_ASSERT(index < m_propertyHelperList.size());
- return m_propertyHelperList.at(index)->oldValue();
+ Q_ASSERT(size_t(index) < m_propertyHelperList.size());
+ return m_propertyHelperList[index]->oldValue();
}
void PropertyListCommand::setOldValue(const QVariant &oldValue, int index)
{
- Q_ASSERT(index < m_propertyHelperList.size());
- m_propertyHelperList.at(index)->setOldValue(oldValue);
+ Q_ASSERT(size_t(index) < m_propertyHelperList.size());
+ m_propertyHelperList[index]->setOldValue(oldValue);
}
// ----- SetValueFunction: Set a new value when applied to a PropertyHelper.
class SetValueFunction {
public:
- SetValueFunction(QDesignerFormWindowInterface *formWindow, const PropertyHelper::Value &newValue, unsigned subPropertyMask);
+ SetValueFunction(QDesignerFormWindowInterface *formWindow, const PropertyHelper::Value &newValue,
+ quint64 subPropertyMask);
PropertyHelper::Value operator()(PropertyHelper&);
private:
QDesignerFormWindowInterface *m_formWindow;
const PropertyHelper::Value m_newValue;
- const unsigned m_subPropertyMask;
+ const quint64 m_subPropertyMask;
};
-SetValueFunction::SetValueFunction(QDesignerFormWindowInterface *formWindow, const PropertyHelper::Value &newValue, unsigned subPropertyMask) :
+SetValueFunction::SetValueFunction(QDesignerFormWindowInterface *formWindow,
+ const PropertyHelper::Value &newValue,
+ quint64 subPropertyMask) :
m_formWindow(formWindow),
m_newValue(newValue),
m_subPropertyMask(subPropertyMask)
@@ -1098,8 +1087,8 @@ template <class PropertyListIterator, class Function>
QDesignerPropertyEditorInterface *propertyEditor = core->propertyEditor();
bool updatedPropertyEditor = false;
- for (PropertyListIterator it = begin; it != end; ++it) {
- PropertyHelper *ph = it->data();
+ for (auto it = begin; it != end; ++it) {
+ PropertyHelper *ph = it->get();
if (QObject* object = ph->object()) { // Might have been deleted in the meantime
const PropertyHelper::Value newValue = function( *ph );
updateMask |= ph->updateMask();
@@ -1116,7 +1105,7 @@ template <class PropertyListIterator, class Function>
// set a new value, return update mask
-unsigned PropertyListCommand::setValue(const QVariant &value, bool changed, unsigned subPropertyMask)
+unsigned PropertyListCommand::setValue(const QVariant &value, bool changed, quint64 subPropertyMask)
{
if(debugPropertyCommands)
qDebug() << "PropertyListCommand::setValue(" << value
@@ -1180,10 +1169,10 @@ void PropertyListCommand::undo()
// check if lists are aequivalent for command merging (same widgets and props)
bool PropertyListCommand::canMergeLists(const PropertyHelperList& other) const
{
- if (m_propertyHelperList.size() != other.size())
+ if (m_propertyHelperList.size() != other.size())
return false;
- for (int i = 0; i < m_propertyHelperList.size(); i++) {
- if (!m_propertyHelperList.at(i)->canMerge(*other.at(i)))
+ for (size_t i = 0; i < m_propertyHelperList.size(); ++i) {
+ if (!m_propertyHelperList[i]->canMerge(*other[i]))
return false;
}
return true;
@@ -1229,7 +1218,7 @@ bool SetPropertyCommand::init(const QObjectList &list, const QString &apropertyN
return true;
}
-unsigned SetPropertyCommand::subPropertyMask(const QVariant &newValue, QObject *referenceObject)
+quint64 SetPropertyCommand::subPropertyMask(const QVariant &newValue, QObject *referenceObject)
{
// figure out the mask of changed sub properties when comparing newValue to the current value of the reference object.
if (!referenceObject)
@@ -1249,9 +1238,9 @@ void SetPropertyCommand::setDescription()
{
if (propertyHelperList().size() == 1) {
setText(QApplication::translate("Command", "Changed '%1' of '%2'")
- .arg(propertyName(), propertyHelperList().at(0)->object()->objectName()));
+ .arg(propertyName(), propertyHelperList().front()->object()->objectName()));
} else {
- int count = propertyHelperList().size();
+ int count = static_cast<int>(propertyHelperList().size());
setText(QCoreApplication::translate("Command", "Changed '%1' of %n objects", "", count).arg(propertyName()));
}
}
@@ -1349,9 +1338,9 @@ void ResetPropertyCommand::setDescription()
{
if (propertyHelperList().size() == 1) {
setText(QCoreApplication::translate("Command", "Reset '%1' of '%2'")
- .arg(propertyName(), propertyHelperList().at(0)->object()->objectName()));
+ .arg(propertyName(), propertyHelperList().front()->object()->objectName()));
} else {
- int count = propertyHelperList().size();
+ int count = static_cast<int>(propertyHelperList().size());
setText(QCoreApplication::translate("Command", "Reset '%1' of %n objects", "", count).arg(propertyName()));
}
}
@@ -1408,7 +1397,7 @@ bool AddDynamicPropertyCommand::init(const QObjectList &selection, QObject *curr
void AddDynamicPropertyCommand::redo()
{
QDesignerFormEditorInterface *core = formWindow()->core();
- for (QObject *obj : qAsConst(m_selection)) {
+ for (QObject *obj : std::as_const(m_selection)) {
QDesignerDynamicPropertySheetExtension *dynamicSheet = qt_extension<QDesignerDynamicPropertySheetExtension*>(core->extensionManager(), obj);
dynamicSheet->addDynamicProperty(m_propertyName, m_value);
if (QDesignerPropertyEditorInterface *propertyEditor = formWindow()->core()->propertyEditor()) {
@@ -1421,7 +1410,7 @@ void AddDynamicPropertyCommand::redo()
void AddDynamicPropertyCommand::undo()
{
QDesignerFormEditorInterface *core = formWindow()->core();
- for (QObject *obj : qAsConst(m_selection)) {
+ for (QObject *obj : std::as_const(m_selection)) {
QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core->extensionManager(), obj);
QDesignerDynamicPropertySheetExtension *dynamicSheet = qt_extension<QDesignerDynamicPropertySheetExtension*>(core->extensionManager(), obj);
dynamicSheet->removeDynamicProperty(sheet->indexOf(m_propertyName));
@@ -1469,7 +1458,8 @@ bool RemoveDynamicPropertyCommand::init(const QObjectList &selection, QObject *c
if (!dynamicSheet->isDynamicProperty(index))
return false;
- m_objectToValueAndChanged[current] = qMakePair(propertySheet->property(index), propertySheet->isChanged(index));
+ m_objectToValueAndChanged[current] = {propertySheet->property(index),
+ propertySheet->isChanged(index)};
for (QObject *obj : selection) {
if (m_objectToValueAndChanged.contains(obj))
@@ -1479,7 +1469,8 @@ bool RemoveDynamicPropertyCommand::init(const QObjectList &selection, QObject *c
dynamicSheet = qt_extension<QDesignerDynamicPropertySheetExtension*>(core->extensionManager(), obj);
const int idx = propertySheet->indexOf(m_propertyName);
if (dynamicSheet->isDynamicProperty(idx))
- m_objectToValueAndChanged[obj] = qMakePair(propertySheet->property(idx), propertySheet->isChanged(idx));
+ m_objectToValueAndChanged[obj] = {propertySheet->property(idx),
+ propertySheet->isChanged(idx)};
}
setDescription();
@@ -1489,8 +1480,7 @@ bool RemoveDynamicPropertyCommand::init(const QObjectList &selection, QObject *c
void RemoveDynamicPropertyCommand::redo()
{
QDesignerFormEditorInterface *core = formWindow()->core();
- QMap<QObject *, QPair<QVariant, bool> >::ConstIterator it = m_objectToValueAndChanged.constBegin();
- while (it != m_objectToValueAndChanged.constEnd()) {
+ for (auto it = m_objectToValueAndChanged.cbegin(), end = m_objectToValueAndChanged.cend(); it != end; ++it) {
QObject *obj = it.key();
QDesignerDynamicPropertySheetExtension *dynamicSheet = qt_extension<QDesignerDynamicPropertySheetExtension*>(core->extensionManager(), obj);
QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core->extensionManager(), obj);
@@ -1499,15 +1489,13 @@ void RemoveDynamicPropertyCommand::redo()
if (propertyEditor->object() == obj)
propertyEditor->setObject(obj);
}
- ++it;
}
}
void RemoveDynamicPropertyCommand::undo()
{
QDesignerFormEditorInterface *core = formWindow()->core();
- QMap<QObject *, QPair<QVariant, bool> >::ConstIterator it = m_objectToValueAndChanged.constBegin();
- while (it != m_objectToValueAndChanged.constEnd()) {
+ for (auto it = m_objectToValueAndChanged.cbegin(), end = m_objectToValueAndChanged.cend(); it != end; ++it) {
QObject *obj = it.key();
QDesignerPropertySheetExtension *propertySheet = qt_extension<QDesignerPropertySheetExtension*>(core->extensionManager(), obj);
QDesignerDynamicPropertySheetExtension *dynamicSheet = qt_extension<QDesignerDynamicPropertySheetExtension*>(core->extensionManager(), obj);
@@ -1517,7 +1505,6 @@ void RemoveDynamicPropertyCommand::undo()
if (propertyEditor->object() == obj)
propertyEditor->setObject(obj);
}
- ++it;
}
}
diff --git a/src/designer/src/lib/shared/qdesigner_propertycommand_p.h b/src/designer/src/lib/shared/qdesigner_propertycommand_p.h
index 1cc528a19..d069e76b1 100644
--- a/src/designer/src/lib/shared/qdesigner_propertycommand_p.h
+++ b/src/designer/src/lib/shared/qdesigner_propertycommand_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -43,8 +18,10 @@
#include "qdesigner_formwindowcommand_p.h"
#include <QtCore/qvariant.h>
+#include <QtCore/qhash.h>
#include <QtCore/qlist.h>
#include <QtCore/qpair.h>
+#include <QtCore/qpointer.h>
#include <QtCore/qsharedpointer.h>
QT_BEGIN_NAMESPACE
@@ -72,7 +49,7 @@ class QDESIGNER_SHARED_EXPORT PropertyHelper {
Q_DISABLE_COPY(PropertyHelper)
public:
// A pair of Value and changed flag
- using Value = QPair<QVariant, bool>;
+ using Value = std::pair<QVariant, bool>;
enum ObjectType {OT_Object, OT_FreeAction, OT_AssociatedAction, OT_Widget};
@@ -86,7 +63,8 @@ public:
SpecialProperty specialProperty() const { return m_specialProperty; }
// set a new value. Can be overwritten to perform a transformation (see
// handling of Arrow key move in FormWindow class).
- virtual Value setValue(QDesignerFormWindowInterface *fw, const QVariant &value, bool changed, unsigned subPropertyMask);
+ virtual Value setValue(QDesignerFormWindowInterface *fw, const QVariant &value,
+ bool changed, quint64 subPropertyMask);
// restore old value
Value restoreOldValue(QDesignerFormWindowInterface *fw);
@@ -147,8 +125,8 @@ public:
void undo() override;
protected:
- using PropertyHelperPtr = QSharedPointer<PropertyHelper>;
- using PropertyHelperList = QList<PropertyHelperPtr>;
+ using PropertyHelperPtr = std::unique_ptr<PropertyHelper>;
+ using PropertyHelperList = std::vector<PropertyHelperPtr>;
// add an object
bool add(QObject *object, const QString &propertyName);
@@ -157,7 +135,7 @@ protected:
bool initList(const QObjectList &list, const QString &apropertyName, QObject *referenceObject = nullptr);
// set a new value, return update mask
- unsigned setValue(const QVariant &value, bool changed, unsigned subPropertyMask);
+ unsigned setValue(const QVariant &value, bool changed, quint64 subPropertyMask);
// restore old value, return update mask
unsigned restoreOldValue();
@@ -187,14 +165,15 @@ protected:
QString m_propertyName;
QString m_propertyGroup;
- QVariant::Type m_propertyType = QVariant::Invalid;
+ int m_propertyType = QMetaType::UnknownType;
SpecialProperty m_specialProperty = SP_None;
};
const PropertyDescription &propertyDescription() const { return m_propertyDescription; }
protected:
- virtual PropertyHelper *createPropertyHelper(QObject *o, SpecialProperty sp,
- QDesignerPropertySheetExtension *sheet, int sheetIndex) const;
+ virtual std::unique_ptr<PropertyHelper>
+ createPropertyHelper(QObject *o, SpecialProperty sp,
+ QDesignerPropertySheetExtension *sheet, int sheetIndex) const;
private:
PropertyDescription m_propertyDescription;
@@ -227,10 +206,10 @@ protected:
virtual QVariant mergeValue(const QVariant &newValue);
private:
- unsigned subPropertyMask(const QVariant &newValue, QObject *referenceObject);
+ quint64 subPropertyMask(const QVariant &newValue, QObject *referenceObject);
void setDescription();
QVariant m_newValue;
- unsigned m_subPropertyMask;
+ quint64 m_subPropertyMask;
};
class QDESIGNER_SHARED_EXPORT ResetPropertyCommand: public PropertyListCommand
@@ -259,14 +238,14 @@ class QDESIGNER_SHARED_EXPORT AddDynamicPropertyCommand: public QDesignerFormWin
public:
explicit AddDynamicPropertyCommand(QDesignerFormWindowInterface *formWindow);
- bool init(const QList<QObject *> &selection, QObject *current, const QString &propertyName, const QVariant &value);
+ bool init(const QObjectList &selection, QObject *current, const QString &propertyName, const QVariant &value);
void redo() override;
void undo() override;
private:
void setDescription();
QString m_propertyName;
- QList<QObject *> m_selection;
+ QObjectList m_selection;
QVariant m_value;
};
@@ -276,14 +255,14 @@ class QDESIGNER_SHARED_EXPORT RemoveDynamicPropertyCommand: public QDesignerForm
public:
explicit RemoveDynamicPropertyCommand(QDesignerFormWindowInterface *formWindow);
- bool init(const QList<QObject *> &selection, QObject *current, const QString &propertyName);
+ bool init(const QObjectList &selection, QObject *current, const QString &propertyName);
void redo() override;
void undo() override;
private:
void setDescription();
QString m_propertyName;
- QMap<QObject *, QPair<QVariant, bool> > m_objectToValueAndChanged;
+ QHash<QObject *, std::pair<QVariant, bool> > m_objectToValueAndChanged;
};
} // namespace qdesigner_internal
diff --git a/src/designer/src/lib/shared/qdesigner_propertyeditor.cpp b/src/designer/src/lib/shared/qdesigner_propertyeditor.cpp
index a31b6ab08..42a04b753 100644
--- a/src/designer/src/lib/shared/qdesigner_propertyeditor.cpp
+++ b/src/designer/src/lib/shared/qdesigner_propertyeditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_propertyeditor_p.h"
#include "pluginmanager_p.h"
@@ -42,6 +17,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
using StringPropertyParameters = QDesignerPropertyEditor::StringPropertyParameters;
// A map of property name to type
@@ -54,31 +31,31 @@ static const PropertyNameTypeMap &stringPropertyTypes()
if (propertyNameTypeMap.isEmpty()) {
const StringPropertyParameters richtext(ValidationRichText, true);
// Accessibility. Both are texts the narrator reads
- propertyNameTypeMap.insert(QStringLiteral("accessibleDescription"), richtext);
- propertyNameTypeMap.insert(QStringLiteral("accessibleName"), richtext);
+ propertyNameTypeMap.insert(u"accessibleDescription"_s, richtext);
+ propertyNameTypeMap.insert(u"accessibleName"_s, richtext);
// object names
const StringPropertyParameters objectName(ValidationObjectName, false);
- propertyNameTypeMap.insert(QStringLiteral("buddy"), objectName);
- propertyNameTypeMap.insert(QStringLiteral("currentItemName"), objectName);
- propertyNameTypeMap.insert(QStringLiteral("currentPageName"), objectName);
- propertyNameTypeMap.insert(QStringLiteral("currentTabName"), objectName);
- propertyNameTypeMap.insert(QStringLiteral("layoutName"), objectName);
- propertyNameTypeMap.insert(QStringLiteral("spacerName"), objectName);
+ propertyNameTypeMap.insert(u"buddy"_s, objectName);
+ propertyNameTypeMap.insert(u"currentItemName"_s, objectName);
+ propertyNameTypeMap.insert(u"currentPageName"_s, objectName);
+ propertyNameTypeMap.insert(u"currentTabName"_s, objectName);
+ propertyNameTypeMap.insert(u"layoutName"_s, objectName);
+ propertyNameTypeMap.insert(u"spacerName"_s, objectName);
// Style sheet
- propertyNameTypeMap.insert(QStringLiteral("styleSheet"), StringPropertyParameters(ValidationStyleSheet, false));
+ propertyNameTypeMap.insert(u"styleSheet"_s, StringPropertyParameters(ValidationStyleSheet, false));
// Buttons/ QCommandLinkButton
const StringPropertyParameters multiline(ValidationMultiLine, true);
- propertyNameTypeMap.insert(QStringLiteral("description"), multiline);
- propertyNameTypeMap.insert(QStringLiteral("iconText"), multiline);
+ propertyNameTypeMap.insert(u"description"_s, multiline);
+ propertyNameTypeMap.insert(u"iconText"_s, multiline);
// Tooltips, etc.
- propertyNameTypeMap.insert(QStringLiteral("toolTip"), richtext);
- propertyNameTypeMap.insert(QStringLiteral("whatsThis"), richtext);
- propertyNameTypeMap.insert(QStringLiteral("windowIconText"), richtext);
- propertyNameTypeMap.insert(QStringLiteral("html"), richtext);
+ propertyNameTypeMap.insert(u"toolTip"_s, richtext);
+ propertyNameTypeMap.insert(u"whatsThis"_s, richtext);
+ propertyNameTypeMap.insert(u"windowIconText"_s, richtext);
+ propertyNameTypeMap.insert(u"html"_s, richtext);
// A QWizard page id
- propertyNameTypeMap.insert(QStringLiteral("pageId"), StringPropertyParameters(ValidationSingleLine, false));
+ propertyNameTypeMap.insert(u"pageId"_s, StringPropertyParameters(ValidationSingleLine, false));
// QPlainTextEdit
- propertyNameTypeMap.insert(QStringLiteral("plainText"), StringPropertyParameters(ValidationMultiLine, true));
+ propertyNameTypeMap.insert(u"plainText"_s, StringPropertyParameters(ValidationMultiLine, true));
}
return propertyNameTypeMap;
}
@@ -110,7 +87,7 @@ QDesignerPropertyEditor::StringPropertyParameters QDesignerPropertyEditor::textP
const QString &propertyName, bool isMainContainer)
{
// object name - no comment
- if (propertyName == QStringLiteral("objectName")) {
+ if (propertyName == "objectName"_L1) {
const TextPropertyValidationMode vm = isMainContainer ? ValidationObjectNameScope : ValidationObjectName;
return StringPropertyParameters(vm, false);
}
@@ -128,12 +105,12 @@ QDesignerPropertyEditor::StringPropertyParameters QDesignerPropertyEditor::textP
return StringPropertyParameters(ValidationMultiLine, true);
// Check hardcoded property ames
- const PropertyNameTypeMap::const_iterator hit = stringPropertyTypes().constFind(propertyName);
+ const auto hit = stringPropertyTypes().constFind(propertyName);
if (hit != stringPropertyTypes().constEnd())
return hit.value();
// text: Check according to widget type.
- if (propertyName == QStringLiteral("text")) {
+ if (propertyName == "text"_L1) {
if (qobject_cast<const QAction *>(object) || qobject_cast<const QLineEdit *>(object))
return StringPropertyParameters(ValidationSingleLine, true);
if (qobject_cast<const QAbstractButton *>(object))
@@ -142,14 +119,14 @@ QDesignerPropertyEditor::StringPropertyParameters QDesignerPropertyEditor::textP
}
// Fuzzy matching
- if (propertyName.endsWith(QStringLiteral("Name")))
+ if (propertyName.endsWith("Name"_L1))
return StringPropertyParameters(ValidationSingleLine, true);
- if (propertyName.endsWith(QStringLiteral("ToolTip")))
+ if (propertyName.endsWith("ToolTip"_L1))
return StringPropertyParameters(ValidationRichText, true);
#ifdef Q_OS_WIN // No translation for the active X "control" property
- if (propertyName == QStringLiteral("control") && className == QStringLiteral("QAxWidget"))
+ if (propertyName == "control"_L1 && className == "QAxWidget"_L1)
return StringPropertyParameters(ValidationSingleLine, false);
#endif
diff --git a/src/designer/src/lib/shared/qdesigner_propertyeditor_p.h b/src/designer/src/lib/shared/qdesigner_propertyeditor_p.h
index 5995cd21e..0aa1feb45 100644
--- a/src/designer/src/lib/shared/qdesigner_propertyeditor_p.h
+++ b/src/designer/src/lib/shared/qdesigner_propertyeditor_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -59,7 +34,7 @@ public:
explicit QDesignerPropertyEditor(QWidget *parent = nullptr, Qt::WindowFlags flags = {});
// A pair <ValidationMode, bool isTranslatable>.
- using StringPropertyParameters = QPair<TextPropertyValidationMode, bool>;
+ using StringPropertyParameters = std::pair<TextPropertyValidationMode, bool>;
// Return a pair of validation mode and flag indicating whether property is translatable
// for textual properties.
diff --git a/src/designer/src/lib/shared/qdesigner_propertysheet.cpp b/src/designer/src/lib/shared/qdesigner_propertysheet.cpp
index 2582a3a14..573cfed4a 100644
--- a/src/designer/src/lib/shared/qdesigner_propertysheet.cpp
+++ b/src/designer/src/lib/shared/qdesigner_propertysheet.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_propertysheet_p.h"
#include "qdesigner_utils_p.h"
@@ -51,13 +26,17 @@
#include <QtWidgets/qtoolbar.h>
#include <QtWidgets/qmainwindow.h>
#include <QtWidgets/qmenubar.h>
+#include <QtWidgets/qheaderview.h>
#include <QtGui/qaction.h>
#include <QtCore/qdebug.h>
+#include <QtCore/qhash.h>
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
#define USE_LAYOUT_SIZE_CONSTRAINT
static const QDesignerMetaObjectInterface *propertyIntroducedBy(const QDesignerMetaObjectInterface *meta, int index)
@@ -80,40 +59,26 @@ static const QDesignerMetaObjectInterface *propertyIntroducedBy(const QDesignerM
// old forms, QLayoutWidget will show up as ''; however, the uic code will
// still use 'verticalLayout' (in case someone accesses it). New Layouts get autogenerated names,
// legacy forms will keep their empty names (unless someone types in a new name).
-static const char *layoutObjectNameC = "layoutName";
-static const char *layoutLeftMarginC = "layoutLeftMargin";
-static const char *layoutTopMarginC = "layoutTopMargin";
-static const char *layoutRightMarginC = "layoutRightMargin";
-static const char *layoutBottomMarginC = "layoutBottomMargin";
-static const char *layoutSpacingC = "layoutSpacing";
-static const char *layoutHorizontalSpacingC = "layoutHorizontalSpacing";
-static const char *layoutVerticalSpacingC = "layoutVerticalSpacing";
-static const char *layoutSizeConstraintC = "layoutSizeConstraint";
+static constexpr auto layoutObjectNameC = "layoutName"_L1;
+static constexpr auto layoutLeftMarginC = "layoutLeftMargin"_L1;
+static constexpr auto layoutTopMarginC = "layoutTopMargin"_L1;
+static constexpr auto layoutRightMarginC = "layoutRightMargin"_L1;
+static constexpr auto layoutBottomMarginC = "layoutBottomMargin"_L1;
+static constexpr auto layoutSpacingC = "layoutSpacing"_L1;
+static constexpr auto layoutHorizontalSpacingC = "layoutHorizontalSpacing"_L1;
+static constexpr auto layoutVerticalSpacingC = "layoutVerticalSpacing"_L1;
+static constexpr auto layoutSizeConstraintC = "layoutSizeConstraint"_L1;
// form layout
-static const char *layoutFieldGrowthPolicyC = "layoutFieldGrowthPolicy";
-static const char *layoutRowWrapPolicyC = "layoutRowWrapPolicy";
-static const char *layoutLabelAlignmentC = "layoutLabelAlignment";
-static const char *layoutFormAlignmentC = "layoutFormAlignment";
+static constexpr auto layoutFieldGrowthPolicyC = "layoutFieldGrowthPolicy"_L1;
+static constexpr auto layoutRowWrapPolicyC = "layoutRowWrapPolicy"_L1;
+static constexpr auto layoutLabelAlignmentC = "layoutLabelAlignment"_L1;
+static constexpr auto layoutFormAlignmentC = "layoutFormAlignment"_L1;
// stretches
-static const char *layoutboxStretchPropertyC = "layoutStretch";
-static const char *layoutGridRowStretchPropertyC = "layoutRowStretch";
-static const char *layoutGridColumnStretchPropertyC = "layoutColumnStretch";
-static const char *layoutGridRowMinimumHeightC = "layoutRowMinimumHeight";
-static const char *layoutGridColumnMinimumWidthC = "layoutColumnMinimumWidth";
-
-// Find the form editor in the hierarchy.
-// We know that the parent of the sheet is the extension manager
-// whose parent is the core.
-
-static QDesignerFormEditorInterface *formEditorForObject(QObject *o) {
- do {
- if (QDesignerFormEditorInterface* core = qobject_cast<QDesignerFormEditorInterface*>(o))
- return core;
- o = o->parent();
- } while(o);
- Q_ASSERT(o);
- return nullptr;
-}
+static constexpr auto layoutboxStretchPropertyC = "layoutStretch"_L1;
+static constexpr auto layoutGridRowStretchPropertyC = "layoutRowStretch"_L1;
+static constexpr auto layoutGridColumnStretchPropertyC = "layoutColumnStretch"_L1;
+static constexpr auto layoutGridRowMinimumHeightC = "layoutRowMinimumHeight"_L1;
+static constexpr auto layoutGridColumnMinimumWidthC = "layoutColumnMinimumWidth"_L1;
static bool hasLayoutAttributes(QDesignerFormEditorInterface *core, QObject *object)
{
@@ -131,15 +96,14 @@ static bool hasLayoutAttributes(QDesignerFormEditorInterface *core, QObject *obj
// Cache DesignerMetaEnum by scope/name of a QMetaEnum
static const qdesigner_internal::DesignerMetaEnum &designerMetaEnumFor(const QDesignerMetaEnumInterface *me)
{
- using ScopeNameKey = QPair<QString, QString>;
- using DesignerMetaEnumCache = QMap<ScopeNameKey, qdesigner_internal::DesignerMetaEnum>;
- static DesignerMetaEnumCache cache;
+ using ScopeNameKey = std::pair<QString, QString>;
+ static QMap<ScopeNameKey, qdesigner_internal::DesignerMetaEnum> cache;
const QString name = me->name();
const QString scope = me->scope();
const ScopeNameKey key = ScopeNameKey(scope, name);
- DesignerMetaEnumCache::iterator it = cache.find(key);
+ auto it = cache.find(key);
if (it == cache.end()) {
qdesigner_internal::DesignerMetaEnum dme = qdesigner_internal::DesignerMetaEnum(name, scope, me->separator());
const int keyCount = me->keyCount();
@@ -153,17 +117,16 @@ static const qdesigner_internal::DesignerMetaEnum &designerMetaEnumFor(const QDe
// Cache DesignerMetaFlags by scope/name of a QMetaEnum
static const qdesigner_internal::DesignerMetaFlags &designerMetaFlagsFor(const QDesignerMetaEnumInterface *me)
{
- using ScopeNameKey = QPair<QString, QString>;
- using DesignerMetaFlagsCache = QMap<ScopeNameKey, qdesigner_internal::DesignerMetaFlags>;
- static DesignerMetaFlagsCache cache;
+ using ScopeNameKey = std::pair<QString, QString>;
+ static QMap<ScopeNameKey, qdesigner_internal::DesignerMetaFlags> cache;
const QString name = me->name();
const QString scope = me->scope();
const ScopeNameKey key = ScopeNameKey(scope, name);
- DesignerMetaFlagsCache::iterator it = cache.find(key);
+ auto it = cache.find(key);
if (it == cache.end()) {
- qdesigner_internal::DesignerMetaFlags dme = qdesigner_internal::DesignerMetaFlags(name, scope, me->separator());
+ auto dme = qdesigner_internal::DesignerMetaFlags(me->enumName(), scope, me->separator());
const int keyCount = me->keyCount();
for (int i=0; i < keyCount; ++i)
dme.addKey(me->value(i), me->key(i));
@@ -182,7 +145,7 @@ public:
explicit QDesignerPropertySheetPrivate(QDesignerPropertySheet *sheetPublic, QObject *object, QObject *sheetParent);
bool invalidIndex(const char *functionName, int index) const;
- inline int count() const { return m_meta->propertyCount() + m_addProperties.count(); }
+ inline int count() const { return m_meta->propertyCount() + m_addProperties.size(); }
PropertyType propertyType(int index) const;
QString transformLayoutPropertyName(int index) const;
@@ -191,7 +154,7 @@ public:
bool isReloadableProperty(int index) const;
bool isResourceProperty(int index) const;
- void addResourceProperty(int index, QVariant::Type type);
+ void addResourceProperty(int index, int type);
QVariant resourceProperty(int index) const;
void setResourceProperty(int index, const QVariant &value);
QVariant emptyResourceProperty(int index) const; // of type PropertySheetPixmapValue / PropertySheetIconValue
@@ -234,8 +197,7 @@ public:
const ObjectType m_objectType;
const ObjectFlags m_objectFlags;
- using InfoHash = QHash<int, Info>;
- InfoHash m_info;
+ QHash<int, Info> m_info;
QHash<int, QVariant> m_fakeProperties;
QHash<int, QVariant> m_addProperties;
QHash<QString, int> m_addIndex;
@@ -270,7 +232,7 @@ bool QDesignerPropertySheetPrivate::isReloadableProperty(int index) const
return isResourceProperty(index)
|| propertyType(index) == QDesignerPropertySheet::PropertyStyleSheet
|| propertyType(index) == QDesignerPropertySheet::PropertyText
- || q->property(index).type() == QVariant::Url;
+ || q->property(index).metaType().id() == QMetaType::QUrl;
}
/*
@@ -285,11 +247,11 @@ bool QDesignerPropertySheetPrivate::isResourceProperty(int index) const
return m_resourceProperties.contains(index);
}
-void QDesignerPropertySheetPrivate::addResourceProperty(int index, QVariant::Type type)
+void QDesignerPropertySheetPrivate::addResourceProperty(int index, int type)
{
- if (type == QVariant::Pixmap)
+ if (type == QMetaType::QPixmap)
m_resourceProperties.insert(index, QVariant::fromValue(qdesigner_internal::PropertySheetPixmapValue()));
- else if (type == QVariant::Icon)
+ else if (type == QMetaType::QIcon)
m_resourceProperties.insert(index, QVariant::fromValue(qdesigner_internal::PropertySheetIconValue()));
}
@@ -391,7 +353,7 @@ void QDesignerPropertySheetPrivate::setKeySequenceProperty(int index, const qdes
QDesignerPropertySheetPrivate::QDesignerPropertySheetPrivate(QDesignerPropertySheet *sheetPublic, QObject *object, QObject *sheetParent) :
q(sheetPublic),
- m_core(formEditorForObject(sheetParent)),
+ m_core(QDesignerPropertySheet::formEditorForObject(sheetParent)),
m_meta(m_core->introspection()->metaObject(object)),
m_objectType(QDesignerPropertySheet::objectTypeFromObject(object)),
m_objectFlags(QDesignerPropertySheet::objectFlagsFromObject(object)),
@@ -459,7 +421,7 @@ QLayout* QDesignerPropertySheetPrivate::layout(QDesignerPropertySheetExtension *
QDesignerPropertySheetPrivate::Info &QDesignerPropertySheetPrivate::ensureInfo(int index)
{
- InfoHash::iterator it = m_info.find(index);
+ auto it = m_info.find(index);
if (it == m_info.end())
it = m_info.insert(index, Info());
return it.value();
@@ -467,7 +429,7 @@ QDesignerPropertySheetPrivate::Info &QDesignerPropertySheetPrivate::ensureInfo(i
QDesignerPropertySheet::PropertyType QDesignerPropertySheetPrivate::propertyType(int index) const
{
- const InfoHash::const_iterator it = m_info.constFind(index);
+ const auto it = m_info.constFind(index);
if (it == m_info.constEnd())
return QDesignerPropertySheet::PropertyNone;
return it.value().propertyType;
@@ -476,28 +438,27 @@ QDesignerPropertySheet::PropertyType QDesignerPropertySheetPrivate::propertyType
QString QDesignerPropertySheetPrivate::transformLayoutPropertyName(int index) const
{
using TypeNameMap = QMap<QDesignerPropertySheet::PropertyType, QString>;
- static TypeNameMap typeNameMap;
- if (typeNameMap.isEmpty()) {
- typeNameMap.insert(QDesignerPropertySheet::PropertyLayoutObjectName, QStringLiteral("objectName"));
- typeNameMap.insert(QDesignerPropertySheet::PropertyLayoutLeftMargin, QStringLiteral("leftMargin"));
- typeNameMap.insert(QDesignerPropertySheet::PropertyLayoutTopMargin, QStringLiteral("topMargin"));
- typeNameMap.insert(QDesignerPropertySheet::PropertyLayoutRightMargin, QStringLiteral("rightMargin"));
- typeNameMap.insert(QDesignerPropertySheet::PropertyLayoutBottomMargin, QStringLiteral("bottomMargin"));
- typeNameMap.insert(QDesignerPropertySheet::PropertyLayoutSpacing, QStringLiteral("spacing"));
- typeNameMap.insert(QDesignerPropertySheet::PropertyLayoutHorizontalSpacing, QStringLiteral("horizontalSpacing"));
- typeNameMap.insert(QDesignerPropertySheet::PropertyLayoutVerticalSpacing, QStringLiteral("verticalSpacing"));
- typeNameMap.insert(QDesignerPropertySheet::PropertyLayoutSizeConstraint, QStringLiteral("sizeConstraint"));
- typeNameMap.insert(QDesignerPropertySheet::PropertyLayoutFieldGrowthPolicy, QStringLiteral("fieldGrowthPolicy"));
- typeNameMap.insert(QDesignerPropertySheet::PropertyLayoutRowWrapPolicy, QStringLiteral("rowWrapPolicy"));
- typeNameMap.insert(QDesignerPropertySheet::PropertyLayoutLabelAlignment, QStringLiteral("labelAlignment"));
- typeNameMap.insert(QDesignerPropertySheet::PropertyLayoutFormAlignment, QStringLiteral("formAlignment"));
- typeNameMap.insert(QDesignerPropertySheet::PropertyLayoutBoxStretch, QStringLiteral("stretch"));
- typeNameMap.insert(QDesignerPropertySheet::PropertyLayoutGridRowStretch, QStringLiteral("rowStretch"));
- typeNameMap.insert(QDesignerPropertySheet::PropertyLayoutGridColumnStretch, QStringLiteral("columnStretch"));
- typeNameMap.insert(QDesignerPropertySheet::PropertyLayoutGridRowMinimumHeight, QStringLiteral("rowMinimumHeight"));
- typeNameMap.insert(QDesignerPropertySheet::PropertyLayoutGridColumnMinimumWidth, QStringLiteral("columnMinimumWidth"));
- }
- const TypeNameMap::const_iterator it = typeNameMap.constFind(propertyType(index));
+ static const TypeNameMap typeNameMap = {
+ {QDesignerPropertySheet::PropertyLayoutObjectName, u"objectName"_s},
+ {QDesignerPropertySheet::PropertyLayoutLeftMargin, u"leftMargin"_s},
+ {QDesignerPropertySheet::PropertyLayoutTopMargin, u"topMargin"_s},
+ {QDesignerPropertySheet::PropertyLayoutRightMargin, u"rightMargin"_s},
+ {QDesignerPropertySheet::PropertyLayoutBottomMargin, u"bottomMargin"_s},
+ {QDesignerPropertySheet::PropertyLayoutSpacing, u"spacing"_s},
+ {QDesignerPropertySheet::PropertyLayoutHorizontalSpacing, u"horizontalSpacing"_s},
+ {QDesignerPropertySheet::PropertyLayoutVerticalSpacing, u"verticalSpacing"_s},
+ {QDesignerPropertySheet::PropertyLayoutSizeConstraint, u"sizeConstraint"_s},
+ {QDesignerPropertySheet::PropertyLayoutFieldGrowthPolicy, u"fieldGrowthPolicy"_s},
+ {QDesignerPropertySheet::PropertyLayoutRowWrapPolicy, u"rowWrapPolicy"_s},
+ {QDesignerPropertySheet::PropertyLayoutLabelAlignment, u"labelAlignment"_s},
+ {QDesignerPropertySheet::PropertyLayoutFormAlignment, u"formAlignment"_s},
+ {QDesignerPropertySheet::PropertyLayoutBoxStretch, u"stretch"_s},
+ {QDesignerPropertySheet::PropertyLayoutGridRowStretch, u"rowStretch"_s},
+ {QDesignerPropertySheet::PropertyLayoutGridColumnStretch, u"columnStretch"_s},
+ {QDesignerPropertySheet::PropertyLayoutGridRowMinimumHeight, u"rowMinimumHeight"_s},
+ {QDesignerPropertySheet::PropertyLayoutGridColumnMinimumWidth, u"columnMinimumWidth"_s}
+ };
+ const auto it = typeNameMap.constFind(propertyType(index));
if (it != typeNameMap.constEnd())
return it.value();
return QString();
@@ -535,43 +496,42 @@ QDesignerPropertySheet::ObjectFlags QDesignerPropertySheet::objectFlagsFromObjec
QDesignerPropertySheet::PropertyType QDesignerPropertySheet::propertyTypeFromName(const QString &name)
{
- typedef QHash<QString, PropertyType> PropertyTypeHash;
- static PropertyTypeHash propertyTypeHash;
- if (propertyTypeHash.isEmpty()) {
- propertyTypeHash.insert(QLatin1String(layoutObjectNameC), PropertyLayoutObjectName);
- propertyTypeHash.insert(QLatin1String(layoutLeftMarginC), PropertyLayoutLeftMargin);
- propertyTypeHash.insert(QLatin1String(layoutTopMarginC), PropertyLayoutTopMargin);
- propertyTypeHash.insert(QLatin1String(layoutRightMarginC), PropertyLayoutRightMargin);
- propertyTypeHash.insert(QLatin1String(layoutBottomMarginC), PropertyLayoutBottomMargin);
- propertyTypeHash.insert(QLatin1String(layoutSpacingC), PropertyLayoutSpacing);
- propertyTypeHash.insert(QLatin1String(layoutHorizontalSpacingC), PropertyLayoutHorizontalSpacing);
- propertyTypeHash.insert(QLatin1String(layoutVerticalSpacingC), PropertyLayoutVerticalSpacing);
- propertyTypeHash.insert(QLatin1String(layoutSizeConstraintC), PropertyLayoutSizeConstraint);
- propertyTypeHash.insert(QLatin1String(layoutFieldGrowthPolicyC), PropertyLayoutFieldGrowthPolicy);
- propertyTypeHash.insert(QLatin1String(layoutRowWrapPolicyC), PropertyLayoutRowWrapPolicy);
- propertyTypeHash.insert(QLatin1String(layoutLabelAlignmentC), PropertyLayoutLabelAlignment);
- propertyTypeHash.insert(QLatin1String(layoutFormAlignmentC), PropertyLayoutFormAlignment);
- propertyTypeHash.insert(QLatin1String(layoutboxStretchPropertyC), PropertyLayoutBoxStretch);
- propertyTypeHash.insert(QLatin1String(layoutGridRowStretchPropertyC), PropertyLayoutGridRowStretch);
- propertyTypeHash.insert(QLatin1String(layoutGridColumnStretchPropertyC), PropertyLayoutGridColumnStretch);
- propertyTypeHash.insert(QLatin1String(layoutGridRowMinimumHeightC), PropertyLayoutGridRowMinimumHeight);
- propertyTypeHash.insert(QLatin1String(layoutGridColumnMinimumWidthC), PropertyLayoutGridColumnMinimumWidth);
- propertyTypeHash.insert(QStringLiteral("buddy"), PropertyBuddy);
- propertyTypeHash.insert(QStringLiteral("geometry"), PropertyGeometry);
- propertyTypeHash.insert(QStringLiteral("checked"), PropertyChecked);
- propertyTypeHash.insert(QStringLiteral("checkable"), PropertyCheckable);
- propertyTypeHash.insert(QStringLiteral("accessibleName"), PropertyAccessibility);
- propertyTypeHash.insert(QStringLiteral("accessibleDescription"), PropertyAccessibility);
- propertyTypeHash.insert(QStringLiteral("windowTitle"), PropertyWindowTitle);
- propertyTypeHash.insert(QStringLiteral("windowIcon"), PropertyWindowIcon);
- propertyTypeHash.insert(QStringLiteral("windowFilePath"), PropertyWindowFilePath);
- propertyTypeHash.insert(QStringLiteral("windowOpacity"), PropertyWindowOpacity);
- propertyTypeHash.insert(QStringLiteral("windowIconText"), PropertyWindowIconText);
- propertyTypeHash.insert(QStringLiteral("windowModality"), PropertyWindowModality);
- propertyTypeHash.insert(QStringLiteral("windowModified"), PropertyWindowModified);
- propertyTypeHash.insert(QStringLiteral("styleSheet"), PropertyStyleSheet);
- propertyTypeHash.insert(QStringLiteral("text"), PropertyText);
- }
+ static const QHash<QString, PropertyType> propertyTypeHash = {
+ {layoutObjectNameC, PropertyLayoutObjectName},
+ {layoutLeftMarginC, PropertyLayoutLeftMargin},
+ {layoutTopMarginC, PropertyLayoutTopMargin},
+ {layoutRightMarginC, PropertyLayoutRightMargin},
+ {layoutBottomMarginC, PropertyLayoutBottomMargin},
+ {layoutSpacingC, PropertyLayoutSpacing},
+ {layoutHorizontalSpacingC, PropertyLayoutHorizontalSpacing},
+ {layoutVerticalSpacingC, PropertyLayoutVerticalSpacing},
+ {layoutSizeConstraintC, PropertyLayoutSizeConstraint},
+ {layoutFieldGrowthPolicyC, PropertyLayoutFieldGrowthPolicy},
+ {layoutRowWrapPolicyC, PropertyLayoutRowWrapPolicy},
+ {layoutLabelAlignmentC, PropertyLayoutLabelAlignment},
+ {layoutFormAlignmentC, PropertyLayoutFormAlignment},
+ {layoutboxStretchPropertyC, PropertyLayoutBoxStretch},
+ {layoutGridRowStretchPropertyC, PropertyLayoutGridRowStretch},
+ {layoutGridColumnStretchPropertyC, PropertyLayoutGridColumnStretch},
+ {layoutGridRowMinimumHeightC, PropertyLayoutGridRowMinimumHeight},
+ {layoutGridColumnMinimumWidthC, PropertyLayoutGridColumnMinimumWidth},
+ {u"buddy"_s, PropertyBuddy},
+ {u"geometry"_s, PropertyGeometry},
+ {u"checked"_s, PropertyChecked},
+ {u"checkable"_s, PropertyCheckable},
+ {u"accessibleName"_s, PropertyAccessibility},
+ {u"accessibleDescription"_s, PropertyAccessibility},
+ {u"visible"_s, PropertyVisible},
+ {u"windowTitle"_s, PropertyWindowTitle},
+ {u"windowIcon"_s, PropertyWindowIcon},
+ {u"windowFilePath"_s, PropertyWindowFilePath},
+ {u"windowOpacity"_s, PropertyWindowOpacity},
+ {u"windowIconText"_s, PropertyWindowIconText},
+ {u"windowModality"_s, PropertyWindowModality},
+ {u"windowModified"_s, PropertyWindowModified},
+ {u"styleSheet"_s, PropertyStyleSheet},
+ {u"text"_s, PropertyText}
+ };
return propertyTypeHash.value(name, PropertyNone);
}
@@ -582,7 +542,7 @@ QDesignerPropertySheet::QDesignerPropertySheet(QObject *object, QObject *parent)
using Info = QDesignerPropertySheetPrivate::Info;
const QDesignerMetaObjectInterface *baseMeta = d->m_meta;
- while (baseMeta &&baseMeta->className().startsWith(QStringLiteral("QDesigner"))) {
+ while (baseMeta &&baseMeta->className().startsWith("QDesigner"_L1)) {
baseMeta = baseMeta->superClass();
}
Q_ASSERT(baseMeta != nullptr);
@@ -598,7 +558,7 @@ QDesignerPropertySheet::QDesignerPropertySheet(QObject *object, QObject *parent)
for (int index=0; index<count(); ++index) {
const QDesignerMetaPropertyInterface *p = d->m_meta->property(index);
const QString name = p->name();
- if (p->type() == QVariant::KeySequence) {
+ if (p->type() == QMetaType::QKeySequence) {
createFakeProperty(name);
} else {
setVisible(index, false); // use the default for `real' properties
@@ -614,22 +574,22 @@ QDesignerPropertySheet::QDesignerPropertySheet(QObject *object, QObject *parent)
info.group = pgroup;
info.propertyType = propertyTypeFromName(name);
- const QVariant::Type type = p->type();
+ const int type = p->type();
switch (type) {
- case QVariant::Cursor:
- case QVariant::Icon:
- case QVariant::Pixmap:
+ case QMetaType::QCursor:
+ case QMetaType::QIcon:
+ case QMetaType::QPixmap:
info.defaultValue = p->read(d->m_object);
- if (type == QVariant::Icon || type == QVariant::Pixmap)
+ if (type == QMetaType::QIcon || type == QMetaType::QPixmap)
d->addResourceProperty(index, type);
break;
- case QVariant::String:
+ case QMetaType::QString:
d->addStringProperty(index);
break;
- case QVariant::StringList:
+ case QMetaType::QStringList:
d->addStringListProperty(index);
break;
- case QVariant::KeySequence:
+ case QMetaType::QKeySequence:
d->addKeySequenceProperty(index);
break;
default:
@@ -638,28 +598,28 @@ QDesignerPropertySheet::QDesignerPropertySheet(QObject *object, QObject *parent)
}
if (object->isWidgetType()) {
- createFakeProperty(QStringLiteral("focusPolicy"));
- createFakeProperty(QStringLiteral("cursor"));
- createFakeProperty(QStringLiteral("toolTip"));
- createFakeProperty(QStringLiteral("whatsThis"));
- createFakeProperty(QStringLiteral("acceptDrops"));
- createFakeProperty(QStringLiteral("dragEnabled"));
+ createFakeProperty(u"focusPolicy"_s);
+ createFakeProperty(u"cursor"_s);
+ createFakeProperty(u"toolTip"_s);
+ createFakeProperty(u"whatsThis"_s);
+ createFakeProperty(u"acceptDrops"_s);
+ createFakeProperty(u"dragEnabled"_s);
// windowModality/Opacity is visible only for the main container, in which case the form windows enables it on loading
- setVisible(createFakeProperty(QStringLiteral("windowModality")), false);
- setVisible(createFakeProperty(QStringLiteral("windowOpacity"), double(1.0)), false);
+ setVisible(createFakeProperty(u"windowModality"_s), false);
+ setVisible(createFakeProperty(u"windowOpacity"_s, double(1.0)), false);
if (qobject_cast<const QToolBar *>(d->m_object)) { // prevent toolbars from being dragged off
- createFakeProperty(QStringLiteral("floatable"), QVariant(true));
+ createFakeProperty(u"floatable"_s, QVariant(true));
} else {
if (qobject_cast<const QMenuBar *>(d->m_object)) {
// Keep the menu bar editable in the form even if a native menu bar is used.
const bool nativeMenuBarDefault =
!QCoreApplication::testAttribute(Qt::AA_DontUseNativeMenuBar);
- createFakeProperty(QStringLiteral("nativeMenuBar"), QVariant(nativeMenuBarDefault));
+ createFakeProperty(u"nativeMenuBar"_s, QVariant(nativeMenuBarDefault));
}
}
if (d->m_canHaveLayoutAttributes) {
- static const QString layoutGroup = QStringLiteral("Layout");
- const char* fakeLayoutProperties[] = {
+ const QString layoutGroup = u"Layout"_s;
+ static constexpr QLatin1StringView fakeLayoutProperties[] = {
layoutObjectNameC, layoutLeftMarginC, layoutTopMarginC, layoutRightMarginC, layoutBottomMarginC, layoutSpacingC, layoutHorizontalSpacingC, layoutVerticalSpacingC,
layoutFieldGrowthPolicyC, layoutRowWrapPolicyC, layoutLabelAlignmentC, layoutFormAlignmentC,
layoutboxStretchPropertyC, layoutGridRowStretchPropertyC, layoutGridColumnStretchPropertyC,
@@ -668,42 +628,37 @@ QDesignerPropertySheet::QDesignerPropertySheet(QObject *object, QObject *parent)
, layoutSizeConstraintC
#endif
};
- const int fakeLayoutPropertyCount = sizeof(fakeLayoutProperties)/sizeof(const char*);
+ static constexpr int fakeLayoutPropertyCount = sizeof(fakeLayoutProperties)/sizeof(fakeLayoutProperties[0]);
const int size = count();
for (int i = 0; i < fakeLayoutPropertyCount; i++) {
- createFakeProperty(QLatin1String(fakeLayoutProperties[i]), 0);
+ createFakeProperty(fakeLayoutProperties[i], 0);
setAttribute(size + i, true);
setPropertyGroup(size + i, layoutGroup);
}
}
if (d->m_objectType == ObjectLabel)
- createFakeProperty(QStringLiteral("buddy"), QVariant(QByteArray()));
+ createFakeProperty(u"buddy"_s, QVariant(QByteArray()));
/* We need to create a fake property since the property does not work
* for non-toplevel windows or on other systems than Mac and only if
* it is above a certain Mac OS version. */
if (qobject_cast<const QMainWindow *>(d->m_object))
- createFakeProperty(QStringLiteral("unifiedTitleAndToolBarOnMac"), false);
+ createFakeProperty(u"unifiedTitleAndToolBarOnMac"_s, false);
}
if (qobject_cast<const QDialog*>(object)) {
- createFakeProperty(QStringLiteral("modal"));
+ createFakeProperty(u"modal"_s);
}
if (qobject_cast<const QDockWidget*>(object)) {
- createFakeProperty(QStringLiteral("floating"));
+ createFakeProperty(u"floating"_s);
}
- using ByteArrayList = QList<QByteArray>;
- const ByteArrayList names = object->dynamicPropertyNames();
- if (!names.isEmpty()) {
- const ByteArrayList::const_iterator cend = names.constEnd();
- for (ByteArrayList::const_iterator it = names.constBegin(); it != cend; ++it) {
- const char* cName = it->constData();
- const QString name = QString::fromLatin1(cName);
- const int idx = addDynamicProperty(name, object->property(cName));
- if (idx != -1)
- d->ensureInfo(idx).kind = QDesignerPropertySheetPrivate::DefaultDynamicProperty;
- }
+ const QByteArrayList names = object->dynamicPropertyNames();
+ for (const auto &nameB : names) {
+ const QString name = QString::fromLatin1(nameB);
+ const int idx = addDynamicProperty(name, object->property(nameB.constData()));
+ if (idx != -1)
+ d->ensureInfo(idx).kind = QDesignerPropertySheetPrivate::DefaultDynamicProperty;
}
}
@@ -725,8 +680,7 @@ bool QDesignerPropertySheet::dynamicPropertiesAllowed() const
bool QDesignerPropertySheet::canAddDynamicProperty(const QString &propName) const
{
// used internally
- if (propName == QStringLiteral("database") ||
- propName == QStringLiteral("buttonGroupId"))
+ if (propName == "database"_L1 || propName == "buttonGroupId"_L1)
return false;
const int index = d->m_meta->indexOfProperty(propName);
if (index != -1)
@@ -736,7 +690,7 @@ bool QDesignerPropertySheet::canAddDynamicProperty(const QString &propName) cons
return !isVisible(idx); // dynamic property already exists
}
return QDesignerPropertySheet::internalDynamicPropertiesEnabled()
- || !propName.startsWith(QStringLiteral("_q_"));
+ || !propName.startsWith("_q_"_L1);
}
int QDesignerPropertySheet::addDynamicProperty(const QString &propName, const QVariant &value)
@@ -748,18 +702,25 @@ int QDesignerPropertySheet::addDynamicProperty(const QString &propName, const QV
return -1;
QVariant v = value;
- if (value.type() == QVariant::Icon)
+ switch (value.metaType().id()) {
+ case QMetaType::QIcon:
v = QVariant::fromValue(qdesigner_internal::PropertySheetIconValue());
- else if (value.type() == QVariant::Pixmap)
+ break;
+ case QMetaType::QPixmap:
v = QVariant::fromValue(qdesigner_internal::PropertySheetPixmapValue());
- else if (value.type() == QVariant::String)
+ break;
+ case QMetaType::QString:
v = QVariant::fromValue(qdesigner_internal::PropertySheetStringValue(value.toString()));
- else if (value.type() == QVariant::StringList)
+ break;
+ case QMetaType::QStringList:
v = QVariant::fromValue(qdesigner_internal::PropertySheetStringListValue(value.toStringList()));
- else if (value.type() == QVariant::KeySequence) {
+ break;
+ case QMetaType::QKeySequence: {
const QKeySequence keySequence = qvariant_cast<QKeySequence>(value);
v = QVariant::fromValue(qdesigner_internal::PropertySheetKeySequenceValue(keySequence));
}
+ break;
+ }
if (d->m_addIndex.contains(propName)) {
const int idx = d->m_addIndex.value(propName);
@@ -771,12 +732,18 @@ int QDesignerPropertySheet::addDynamicProperty(const QString &propName, const QV
Info &info = d->ensureInfo(index);
info.defaultValue = value;
info.kind = QDesignerPropertySheetPrivate::DynamicProperty;
- if (value.type() == QVariant::Icon || value.type() == QVariant::Pixmap)
- d->addResourceProperty(idx, value.type());
- else if (value.type() == QVariant::String)
+ switch (value.metaType().id()) {
+ case QMetaType::QIcon:
+ case QMetaType::QPixmap:
+ d->addResourceProperty(idx, value.metaType().id());
+ break;
+ case QMetaType::QString:
d->addStringProperty(idx);
- else if (value.type() == QVariant::KeySequence)
+ break;
+ case QMetaType::QKeySequence:
d->addKeySequenceProperty(idx);
+ break;
+ }
return idx;
}
@@ -789,18 +756,18 @@ int QDesignerPropertySheet::addDynamicProperty(const QString &propName, const QV
info.defaultValue = value;
info.kind = QDesignerPropertySheetPrivate::DynamicProperty;
setPropertyGroup(index, tr("Dynamic Properties"));
- switch (value.type()) {
- case QVariant::Icon:
- case QVariant::Pixmap:
- d->addResourceProperty(index, value.type());
+ switch (value.metaType().id()) {
+ case QMetaType::QIcon:
+ case QMetaType::QPixmap:
+ d->addResourceProperty(index, value.metaType().id());
break;
- case QVariant::String:
+ case QMetaType::QString:
d->addStringProperty(index);
break;
- case QVariant::StringList:
+ case QMetaType::QStringList:
d->addStringListProperty(index);
break;
- case QVariant::KeySequence:
+ case QMetaType::QKeySequence:
d->addKeySequenceProperty(index);
break;
default:
@@ -848,6 +815,7 @@ bool QDesignerPropertySheet::isDynamic(int index) const
case PropertyLayoutGridColumnMinimumWidth:
if (d->m_object->isWidgetType() && d->m_canHaveLayoutAttributes)
return false;
+ break;
default:
break;
}
@@ -912,12 +880,17 @@ int QDesignerPropertySheet::createFakeProperty(const QString &propertyName, cons
info.visible = false;
info.kind = QDesignerPropertySheetPrivate::FakeProperty;
QVariant v = value.isValid() ? value : metaProperty(index);
- if (v.type() == QVariant::String)
+ switch (v.metaType().id()) {
+ case QMetaType::QString:
v = QVariant::fromValue(qdesigner_internal::PropertySheetStringValue());
- if (v.type() == QVariant::StringList)
+ break;
+ case QMetaType::QStringList:
v = QVariant::fromValue(qdesigner_internal::PropertySheetStringListValue());
- if (v.type() == QVariant::KeySequence)
+ break;
+ case QMetaType::QKeySequence:
v = QVariant::fromValue(qdesigner_internal::PropertySheetKeySequenceValue());
+ break;
+ }
d->m_fakeProperties.insert(index, v);
return index;
}
@@ -995,7 +968,7 @@ QString QDesignerPropertySheet::propertyGroup(int index) const
return g;
if (propertyType(index) == PropertyAccessibility)
- return QString::fromUtf8("Accessibility");
+ return u"Accessibility"_s;
if (isAdditionalProperty(index))
return d->m_meta->className();
@@ -1067,7 +1040,22 @@ QVariant QDesignerPropertySheet::property(int index) const
return QVariant::fromValue(value);
}
- return metaProperty(index);
+ QVariant result = metaProperty(index);
+ // QTBUG-49591: "visible" is only exposed for QHeaderView as a fake
+ // property ("headerVisible") for the item view. If the item view is not
+ // visible (on a page based container), check the WA_WState_Hidden instead,
+ // since otherwise false is returned when saving.
+ if (result.typeId() == QMetaType::Bool && !result.toBool()
+ && d->m_object->isWidgetType()
+ && propertyType(index) == PropertyVisible) {
+ if (auto *hv = qobject_cast<QHeaderView *>(d->m_object)) {
+ if (auto *parent = hv->parentWidget()) {
+ if (!parent->isVisible())
+ result = QVariant(!hv->testAttribute(Qt::WA_WState_Hidden));
+ }
+ }
+ }
+ return result;
}
QVariant QDesignerPropertySheet::metaProperty(int index) const
@@ -1143,12 +1131,12 @@ void QDesignerPropertySheet::setFakeProperty(int index, const QVariant &value)
qdesigner_internal::PropertySheetFlagValue f = qvariant_cast<qdesigner_internal::PropertySheetFlagValue>(v);
f.value = value.toInt();
v.setValue(f);
- Q_ASSERT(value.type() == QVariant::Int);
+ Q_ASSERT(value.metaType().id() == QMetaType::Int);
} else if (v.canConvert<qdesigner_internal::PropertySheetEnumValue>()) {
qdesigner_internal::PropertySheetEnumValue e = qvariant_cast<qdesigner_internal::PropertySheetEnumValue>(v);
e.value = value.toInt();
v.setValue(e);
- Q_ASSERT(value.type() == QVariant::Int);
+ Q_ASSERT(value.metaType().id() == QMetaType::Int);
} else {
v = value;
}
@@ -1161,7 +1149,7 @@ void QDesignerPropertySheet::clearFakeProperties()
// Buddy needs to be byte array, else uic won't work
static QVariant toByteArray(const QVariant &value) {
- if (value.type() == QVariant::ByteArray)
+ if (value.metaType().id() == QMetaType::QByteArray)
return value;
const QByteArray ba = value.toString().toUtf8();
return QVariant(ba);
@@ -1220,7 +1208,7 @@ void QDesignerPropertySheet::setProperty(int index, const QVariant &value)
const QDesignerMetaPropertyInterface *p = d->m_meta->property(index);
p->write(d->m_object, resolvePropertyValue(index, value));
if (qobject_cast<QGroupBox *>(d->m_object) && propertyType(index) == PropertyCheckable) {
- const int idx = indexOf(QStringLiteral("focusPolicy"));
+ const int idx = indexOf(u"focusPolicy"_s);
if (!isChanged(idx)) {
qdesigner_internal::PropertySheetEnumValue e = qvariant_cast<qdesigner_internal::PropertySheetEnumValue>(property(idx));
if (value.toBool()) {
@@ -1257,7 +1245,7 @@ bool QDesignerPropertySheet::reset(int index)
if (d->isStringProperty(index)) {
qdesigner_internal::PropertySheetStringValue value;
// Main container: Reset to stored class name as not to change the file names generated by uic.
- if (propertyName(index) == QStringLiteral("objectName")) {
+ if (propertyName(index) == "objectName"_L1) {
const QVariant classNameDefaultV = d->m_object->property("_q_classname");
if (classNameDefaultV.isValid())
value.setValue(classNameDefaultV.toString());
@@ -1460,7 +1448,7 @@ bool QDesignerPropertySheet::isFakeLayoutProperty(int index) const
}
// Visible vs. Enabled: In Qt 5, it was possible to define a boolean function
-// for the DESIGNABLE attribute of Q_PROPERTY. Qt Designer would use that to
+// for the DESIGNABLE attribute of Q_PROPERTY. Qt Widgets Designer would use that to
// determine isEnabled() for the property and return isVisible() = false
// for properties that specified 'false' for DESIGNABLE.
// This was used for example for the "checked" property of QAbstractButton,
@@ -1622,6 +1610,20 @@ void QDesignerPropertySheet::setInternalDynamicPropertiesEnabled(bool v)
QDesignerPropertySheetPrivate::m_internalDynamicPropertiesEnabled = v;
}
+// Find the form editor in the hierarchy.
+// We know that the parent of the sheet is the extension manager
+// whose parent is the core.
+QDesignerFormEditorInterface *QDesignerPropertySheet::formEditorForObject(QObject *o)
+{
+ do {
+ if (auto *core = qobject_cast<QDesignerFormEditorInterface*>(o))
+ return core;
+ o = o->parent();
+ } while (o);
+ Q_ASSERT(o);
+ return nullptr;
+}
+
// ---------- QDesignerAbstractPropertySheetFactory
struct QDesignerAbstractPropertySheetFactory::PropertySheetFactoryPrivate {
@@ -1629,8 +1631,7 @@ struct QDesignerAbstractPropertySheetFactory::PropertySheetFactoryPrivate {
const QString m_propertySheetId;
const QString m_dynamicPropertySheetId;
- using ExtensionMap = QMap<QObject*, QObject*>;
- ExtensionMap m_extensions;
+ QHash<QObject *, QObject *> m_extensions;
};
QDesignerAbstractPropertySheetFactory::PropertySheetFactoryPrivate::PropertySheetFactoryPrivate() :
diff --git a/src/designer/src/lib/shared/qdesigner_propertysheet_p.h b/src/designer/src/lib/shared/qdesigner_propertysheet_p.h
index 49380e1ee..b9f88626f 100644
--- a/src/designer/src/lib/shared/qdesigner_propertysheet_p.h
+++ b/src/designer/src/lib/shared/qdesigner_propertysheet_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -119,6 +94,8 @@ public:
static bool internalDynamicPropertiesEnabled();
static void setInternalDynamicPropertiesEnabled(bool v);
+ static QDesignerFormEditorInterface *formEditorForObject(QObject *o);
+
protected:
bool isAdditionalProperty(int index) const;
bool isFakeProperty(int index) const;
@@ -157,6 +134,7 @@ public:
PropertyGeometry,
PropertyChecked,
PropertyCheckable,
+ PropertyVisible,
PropertyWindowTitle,
PropertyWindowIcon,
PropertyWindowFilePath,
@@ -253,7 +231,7 @@ void QDesignerPropertySheetFactory<Object, PropertySheet>::registerExtension(QEx
// Standard property sheet
-typedef QDesignerPropertySheetFactory<QObject, QDesignerPropertySheet> QDesignerDefaultPropertySheetFactory;
+using QDesignerDefaultPropertySheetFactory = QDesignerPropertySheetFactory<QObject, QDesignerPropertySheet>;
Q_DECLARE_OPERATORS_FOR_FLAGS(QDesignerPropertySheet::ObjectFlags)
diff --git a/src/designer/src/lib/shared/qdesigner_qsettings.cpp b/src/designer/src/lib/shared/qdesigner_qsettings.cpp
index 0fa7d676e..3105132a0 100644
--- a/src/designer/src/lib/shared/qdesigner_qsettings.cpp
+++ b/src/designer/src/lib/shared/qdesigner_qsettings.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_qsettings_p.h"
diff --git a/src/designer/src/lib/shared/qdesigner_qsettings_p.h b/src/designer/src/lib/shared/qdesigner_qsettings_p.h
index fe25142ea..12c6efd25 100644
--- a/src/designer/src/lib/shared/qdesigner_qsettings_p.h
+++ b/src/designer/src/lib/shared/qdesigner_qsettings_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/qdesigner_stackedbox.cpp b/src/designer/src/lib/shared/qdesigner_stackedbox.cpp
index c62b12972..993dd6089 100644
--- a/src/designer/src/lib/shared/qdesigner_stackedbox.cpp
+++ b/src/designer/src/lib/shared/qdesigner_stackedbox.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_stackedbox_p.h"
#include "qdesigner_command_p.h"
@@ -46,7 +21,10 @@
QT_BEGIN_NAMESPACE
-static QToolButton *createToolButton(QWidget *parent, Qt::ArrowType at, const QString &name) {
+using namespace Qt::StringLiterals;
+
+static QToolButton *createToolButton(QWidget *parent, Qt::ArrowType at, const QString &name)
+{
QToolButton *rc = new QToolButton();
rc->setAttribute(Qt::WA_NoChildEventsForParent, true);
rc->setParent(parent);
@@ -63,8 +41,8 @@ QStackedWidgetPreviewEventFilter::QStackedWidgetPreviewEventFilter(QStackedWidge
QObject(parent),
m_buttonToolTipEnabled(false), // Not on preview
m_stackedWidget(parent),
- m_prev(createToolButton(m_stackedWidget, Qt::LeftArrow, QStringLiteral("__qt__passive_prev"))),
- m_next(createToolButton(m_stackedWidget, Qt::RightArrow, QStringLiteral("__qt__passive_next")))
+ m_prev(createToolButton(m_stackedWidget, Qt::LeftArrow, u"__qt__passive_prev"_s)),
+ m_next(createToolButton(m_stackedWidget, Qt::RightArrow, u"__qt__passive_next"_s))
{
connect(m_prev, &QAbstractButton::clicked, this, &QStackedWidgetPreviewEventFilter::prevPage);
connect(m_next, &QAbstractButton::clicked, this, &QStackedWidgetPreviewEventFilter::nextPage);
@@ -158,7 +136,7 @@ static inline QString stackedClassName(QStackedWidget *w)
{
if (const QDesignerFormWindowInterface *fw = QDesignerFormWindowInterface::findFormWindow(w))
return qdesigner_internal::WidgetFactory::classNameOf(fw->core(), w);
- return QStringLiteral("Stacked widget");
+ return u"Stacked widget"_s;
}
void QStackedWidgetPreviewEventFilter::updateButtonToolTip(QObject *o)
@@ -290,7 +268,7 @@ void QStackedWidgetEventFilter::gotoPage(int page) {
// Are we on a form or in a preview?
if (QDesignerFormWindowInterface *fw = QDesignerFormWindowInterface::findFormWindow(stackedWidget())) {
qdesigner_internal::SetPropertyCommand *cmd = new qdesigner_internal::SetPropertyCommand(fw);
- cmd->init(stackedWidget(), QStringLiteral("currentIndex"), page);
+ cmd->init(stackedWidget(), u"currentIndex"_s, page);
fw->commandHistory()->push(cmd);
fw->emitSelectionChanged(); // Magically prevent an endless loop triggered by auto-repeat.
updateButtons();
@@ -335,25 +313,25 @@ QMenu *QStackedWidgetEventFilter::addContextMenuActions(QMenu *popup)
// -------- QStackedWidgetPropertySheet
-static const char *pagePropertyName = "currentPageName";
+static constexpr auto pagePropertyName = "currentPageName"_L1;
QStackedWidgetPropertySheet::QStackedWidgetPropertySheet(QStackedWidget *object, QObject *parent) :
QDesignerPropertySheet(object, parent),
m_stackedWidget(object)
{
- createFakeProperty(QLatin1String(pagePropertyName), QString());
+ createFakeProperty(pagePropertyName, QString());
}
bool QStackedWidgetPropertySheet::isEnabled(int index) const
{
- if (propertyName(index) != QLatin1String(pagePropertyName))
+ if (propertyName(index) != pagePropertyName)
return QDesignerPropertySheet::isEnabled(index);
return m_stackedWidget->currentWidget() != nullptr;
}
void QStackedWidgetPropertySheet::setProperty(int index, const QVariant &value)
{
- if (propertyName(index) == QLatin1String(pagePropertyName)) {
+ if (propertyName(index) == pagePropertyName) {
if (QWidget *w = m_stackedWidget->currentWidget())
w->setObjectName(value.toString());
} else {
@@ -363,7 +341,7 @@ void QStackedWidgetPropertySheet::setProperty(int index, const QVariant &value)
QVariant QStackedWidgetPropertySheet::property(int index) const
{
- if (propertyName(index) == QLatin1String(pagePropertyName)) {
+ if (propertyName(index) == pagePropertyName) {
if (const QWidget *w = m_stackedWidget->currentWidget())
return w->objectName();
return QString();
@@ -373,7 +351,7 @@ QVariant QStackedWidgetPropertySheet::property(int index) const
bool QStackedWidgetPropertySheet::reset(int index)
{
- if (propertyName(index) == QLatin1String(pagePropertyName)) {
+ if (propertyName(index) == pagePropertyName) {
setProperty(index, QString());
return true;
}
@@ -382,7 +360,7 @@ bool QStackedWidgetPropertySheet::reset(int index)
bool QStackedWidgetPropertySheet::checkProperty(const QString &propertyName)
{
- return propertyName != QLatin1String(pagePropertyName);
+ return propertyName != pagePropertyName;
}
QT_END_NAMESPACE
diff --git a/src/designer/src/lib/shared/qdesigner_stackedbox_p.h b/src/designer/src/lib/shared/qdesigner_stackedbox_p.h
index 36b876d78..9ef21fcfd 100644
--- a/src/designer/src/lib/shared/qdesigner_stackedbox_p.h
+++ b/src/designer/src/lib/shared/qdesigner_stackedbox_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/qdesigner_tabwidget.cpp b/src/designer/src/lib/shared/qdesigner_tabwidget.cpp
index 9325e386d..36d0c3798 100644
--- a/src/designer/src/lib/shared/qdesigner_tabwidget.cpp
+++ b/src/designer/src/lib/shared/qdesigner_tabwidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_tabwidget_p.h"
#include "qdesigner_command_p.h"
@@ -49,6 +24,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
// Store tab widget as drag source
class MyMimeData : public QMimeData
@@ -179,7 +156,7 @@ bool QTabWidgetEventFilter::eventFilter(QObject *o, QEvent *e)
if (tabbar->tabRect(i).contains(m_pressPoint)) {
if (i != tabbar->currentIndex()) {
qdesigner_internal::SetPropertyCommand *cmd = new qdesigner_internal::SetPropertyCommand(fw);
- cmd->init(m_tabWidget, QStringLiteral("currentIndex"), i);
+ cmd->init(m_tabWidget, u"currentIndex"_s, i);
fw->commandHistory()->push(cmd);
}
break;
@@ -381,39 +358,37 @@ QMenu *QTabWidgetEventFilter::addContextMenuActions(QMenu *popup)
// ----------- QTabWidgetPropertySheet
-static const char *currentTabTextKey = "currentTabText";
-static const char *currentTabNameKey = "currentTabName";
-static const char *currentTabIconKey = "currentTabIcon";
-static const char *currentTabToolTipKey = "currentTabToolTip";
-static const char *currentTabWhatsThisKey = "currentTabWhatsThis";
-static const char *tabMovableKey = "movable";
+static constexpr auto currentTabTextKey = "currentTabText"_L1;
+static constexpr auto currentTabNameKey = "currentTabName"_L1;
+static constexpr auto currentTabIconKey = "currentTabIcon"_L1;
+static constexpr auto currentTabToolTipKey = "currentTabToolTip"_L1;
+static constexpr auto currentTabWhatsThisKey = "currentTabWhatsThis"_L1;
+static constexpr auto tabMovableKey = "movable"_L1;
QTabWidgetPropertySheet::QTabWidgetPropertySheet(QTabWidget *object, QObject *parent) :
QDesignerPropertySheet(object, parent),
m_tabWidget(object)
{
- createFakeProperty(QLatin1String(currentTabTextKey), QVariant::fromValue(qdesigner_internal::PropertySheetStringValue()));
- createFakeProperty(QLatin1String(currentTabNameKey), QString());
- createFakeProperty(QLatin1String(currentTabIconKey), QVariant::fromValue(qdesigner_internal::PropertySheetIconValue()));
+ createFakeProperty(currentTabTextKey, QVariant::fromValue(qdesigner_internal::PropertySheetStringValue()));
+ createFakeProperty(currentTabNameKey, QString());
+ createFakeProperty(currentTabIconKey, QVariant::fromValue(qdesigner_internal::PropertySheetIconValue()));
if (formWindowBase())
- formWindowBase()->addReloadableProperty(this, indexOf(QLatin1String(currentTabIconKey)));
- createFakeProperty(QLatin1String(currentTabToolTipKey), QVariant::fromValue(qdesigner_internal::PropertySheetStringValue()));
- createFakeProperty(QLatin1String(currentTabWhatsThisKey), QVariant::fromValue(qdesigner_internal::PropertySheetStringValue()));
+ formWindowBase()->addReloadableProperty(this, indexOf(currentTabIconKey));
+ createFakeProperty(currentTabToolTipKey, QVariant::fromValue(qdesigner_internal::PropertySheetStringValue()));
+ createFakeProperty(currentTabWhatsThisKey, QVariant::fromValue(qdesigner_internal::PropertySheetStringValue()));
// Prevent the tab widget's drag and drop handling from interfering with Designer's
- createFakeProperty(QLatin1String(tabMovableKey), QVariant(false));
+ createFakeProperty(tabMovableKey, QVariant(false));
}
QTabWidgetPropertySheet::TabWidgetProperty QTabWidgetPropertySheet::tabWidgetPropertyFromName(const QString &name)
{
- using TabWidgetPropertyHash = QHash<QString, TabWidgetProperty>;
- static TabWidgetPropertyHash tabWidgetPropertyHash;
- if (tabWidgetPropertyHash.isEmpty()) {
- tabWidgetPropertyHash.insert(QLatin1String(currentTabTextKey), PropertyCurrentTabText);
- tabWidgetPropertyHash.insert(QLatin1String(currentTabNameKey), PropertyCurrentTabName);
- tabWidgetPropertyHash.insert(QLatin1String(currentTabIconKey), PropertyCurrentTabIcon);
- tabWidgetPropertyHash.insert(QLatin1String(currentTabToolTipKey), PropertyCurrentTabToolTip);
- tabWidgetPropertyHash.insert(QLatin1String(currentTabWhatsThisKey), PropertyCurrentTabWhatsThis);
- }
+ static const QHash<QString, TabWidgetProperty> tabWidgetPropertyHash = {
+ {currentTabTextKey, PropertyCurrentTabText},
+ {currentTabNameKey, PropertyCurrentTabName},
+ {currentTabIconKey, PropertyCurrentTabIcon},
+ {currentTabToolTipKey, PropertyCurrentTabToolTip},
+ {currentTabWhatsThisKey, PropertyCurrentTabWhatsThis}
+ };
return tabWidgetPropertyHash.value(name, PropertyTabWidgetNone);
}
diff --git a/src/designer/src/lib/shared/qdesigner_tabwidget_p.h b/src/designer/src/lib/shared/qdesigner_tabwidget_p.h
index 1a488fe69..c83d93aed 100644
--- a/src/designer/src/lib/shared/qdesigner_tabwidget_p.h
+++ b/src/designer/src/lib/shared/qdesigner_tabwidget_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -44,6 +19,7 @@
#include "qdesigner_propertysheet_p.h"
#include "qdesigner_utils_p.h"
+#include <QtCore/qhash.h>
#include <QtCore/qpointer.h>
#include <QtGui/qicon.h>
@@ -130,7 +106,7 @@ private:
qdesigner_internal::PropertySheetStringValue whatsthis;
qdesigner_internal::PropertySheetIconValue icon;
};
- QMap<QWidget *, PageData> m_pageToData;
+ QHash<QWidget *, PageData> m_pageToData;
};
using QTabWidgetPropertySheetFactory = QDesignerPropertySheetFactory<QTabWidget, QTabWidgetPropertySheet>;
diff --git a/src/designer/src/lib/shared/qdesigner_taskmenu.cpp b/src/designer/src/lib/shared/qdesigner_taskmenu.cpp
index e51cd3a73..8bdf01f37 100644
--- a/src/designer/src/lib/shared/qdesigner_taskmenu.cpp
+++ b/src/designer/src/lib/shared/qdesigner_taskmenu.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_taskmenu_p.h"
#include "qdesigner_command_p.h"
@@ -77,6 +52,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
static inline QAction *createSeparatorHelper(QObject *parent) {
QAction *rc = new QAction(parent);
rc->setSeparator(true);
@@ -88,8 +65,7 @@ static QString objName(const QDesignerFormEditorInterface *core, QObject *object
= qt_extension<QDesignerPropertySheetExtension*>(core->extensionManager(), object);
Q_ASSERT(sheet != nullptr);
- const QString objectNameProperty = QStringLiteral("objectName");
- const int index = sheet->indexOf(objectNameProperty);
+ const int index = sheet->indexOf(u"objectName"_s);
const QVariant v = sheet->property(index);
if (v.canConvert<qdesigner_internal::PropertySheetStringValue>())
return v.value<qdesigner_internal::PropertySheetStringValue>().value();
@@ -116,7 +92,6 @@ ObjectNameDialog::ObjectNameDialog(QWidget *parent, const QString &oldName)
qdesigner_internal::ValidationObjectName))
{
setWindowTitle(QCoreApplication::translate("ObjectNameDialog", "Change Object Name"));
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
QVBoxLayout *vboxLayout = new QVBoxLayout(this);
vboxLayout->addWidget(new QLabel(QCoreApplication::translate("ObjectNameDialog", "Object Name")));
@@ -146,20 +121,22 @@ namespace qdesigner_internal {
// Sub menu displaying the alignment options of a widget in a managed
// grid/box layout cell.
-class LayoutAlignmentMenu {
+class LayoutAlignmentMenu : public QObject {
+ Q_OBJECT
public:
explicit LayoutAlignmentMenu(QObject *parent);
QAction *subMenuAction() const { return m_subMenuAction; }
- void connect(QObject *receiver, const char *aSlot);
-
// Set up enabled state and checked actions according to widget (managed box/grid)
bool setAlignment(const QDesignerFormEditorInterface *core, QWidget *w);
// Return the currently checked alignment
Qt::Alignment alignment() const;
+signals:
+ void changed();
+
private:
enum Actions { HorizNone, Left, HorizCenter, Right, VerticalNone, Top, VerticalCenter, Bottom };
static QAction *createAction(const QString &text, int data, QMenu *menu, QActionGroup *ag);
@@ -180,13 +157,15 @@ QAction *LayoutAlignmentMenu::createAction(const QString &text, int data, QMenu
return a;
}
-LayoutAlignmentMenu::LayoutAlignmentMenu(QObject *parent) :
+LayoutAlignmentMenu::LayoutAlignmentMenu(QObject *parent) : QObject(parent),
m_subMenuAction(new QAction(QDesignerTaskMenu::tr("Layout Alignment"), parent)),
m_horizGroup(new QActionGroup(parent)),
m_verticalGroup(new QActionGroup(parent))
{
m_horizGroup->setExclusive(true);
m_verticalGroup->setExclusive(true);
+ connect(m_horizGroup, &QActionGroup::triggered, this, &LayoutAlignmentMenu::changed);
+ connect(m_verticalGroup, &QActionGroup::triggered, this, &LayoutAlignmentMenu::changed);
QMenu *menu = new QMenu;
m_subMenuAction->setMenu(menu);
@@ -202,18 +181,12 @@ LayoutAlignmentMenu::LayoutAlignmentMenu(QObject *parent) :
m_actions[Bottom] = createAction(QDesignerTaskMenu::tr("Bottom"), Qt::AlignBottom, menu, m_verticalGroup);
}
-void LayoutAlignmentMenu::connect(QObject *receiver, const char *aSlot)
-{
- QObject::connect(m_horizGroup, SIGNAL(triggered(QAction*)), receiver, aSlot);
- QObject::connect(m_verticalGroup, SIGNAL(triggered(QAction*)), receiver, aSlot);
-}
-
bool LayoutAlignmentMenu::setAlignment(const QDesignerFormEditorInterface *core, QWidget *w)
{
bool enabled;
const Qt::Alignment alignment = LayoutAlignmentCommand::alignmentOf(core, w, &enabled);
+ m_subMenuAction->setEnabled(enabled);
if (!enabled) {
- m_subMenuAction->setEnabled(false);
m_actions[HorizNone]->setChecked(true);
m_actions[VerticalNone]->setChecked(true);
return false;
@@ -370,18 +343,19 @@ QDesignerTaskMenu::QDesignerTaskMenu(QWidget *widget, QObject *parent) :
[this] () { this->addToolBar(Qt::TopToolBarArea); });
auto areaMenu = new QMenu;
d->m_addAreaSubMenu->setMenu(areaMenu);
- areaMenu->addAction(QDesignerTaskMenu::tr("Left"),
+ areaMenu->addAction(QDesignerTaskMenu::tr("Left"), this,
[this] () { this->addToolBar(Qt::LeftToolBarArea); });
- areaMenu->addAction(QDesignerTaskMenu::tr("Right"),
+ areaMenu->addAction(QDesignerTaskMenu::tr("Right"), this,
[this] () { this->addToolBar(Qt::RightToolBarArea); });
- areaMenu->addAction(QDesignerTaskMenu::tr("Bottom"),
+ areaMenu->addAction(QDesignerTaskMenu::tr("Bottom"), this,
[this] () { this->addToolBar(Qt::BottomToolBarArea); });
connect(d->m_addStatusBar, &QAction::triggered, this, &QDesignerTaskMenu::createStatusBar);
connect(d->m_removeStatusBar, &QAction::triggered, this, &QDesignerTaskMenu::removeStatusBar);
connect(d->m_containerFakeMethods, &QAction::triggered, this, &QDesignerTaskMenu::containerFakeMethods);
connect(d->m_navigateToSlot, &QAction::triggered, this, &QDesignerTaskMenu::slotNavigateToSlot);
connect(d->m_sizeActionGroup, &QActionGroup::triggered, this, &QDesignerTaskMenu::applySize);
- d->m_layoutAlignmentMenu.connect(this, SLOT(slotLayoutAlignment()));
+ connect(&d->m_layoutAlignmentMenu, &LayoutAlignmentMenu::changed,
+ this, &QDesignerTaskMenu::slotLayoutAlignment);
}
QDesignerTaskMenu::~QDesignerTaskMenu()
@@ -531,10 +505,10 @@ void QDesignerTaskMenu::changeObjectName()
if (dialog.exec() == QDialog::Accepted) {
const QString newObjectName = dialog.newObjectName();
if (!newObjectName.isEmpty() && newObjectName != oldObjectName ) {
- const QString objectNameProperty = QStringLiteral("objectName");
PropertySheetStringValue objectNameValue;
objectNameValue.setValue(newObjectName);
- setProperty(fw, CurrentWidgetMode, objectNameProperty, QVariant::fromValue(objectNameValue));
+ setProperty(fw, CurrentWidgetMode, u"objectName"_s,
+ QVariant::fromValue(objectNameValue));
}
}
}
@@ -590,12 +564,12 @@ void QDesignerTaskMenu::changeTextProperty(const QString &propertyName, const QS
void QDesignerTaskMenu::changeToolTip()
{
- changeTextProperty(QStringLiteral("toolTip"), tr("Edit ToolTip"), MultiSelectionMode, Qt::AutoText);
+ changeTextProperty(u"toolTip"_s, tr("Edit ToolTip"), MultiSelectionMode, Qt::AutoText);
}
void QDesignerTaskMenu::changeWhatsThis()
{
- changeTextProperty(QStringLiteral("whatsThis"), tr("Edit WhatsThis"), MultiSelectionMode, Qt::AutoText);
+ changeTextProperty(u"whatsThis"_s, tr("Edit WhatsThis"), MultiSelectionMode, Qt::AutoText);
}
void QDesignerTaskMenu::changeStyleSheet()
@@ -655,7 +629,7 @@ static void createSizeCommand(QDesignerFormWindowInterface *fw, QWidget *w, int
if (flags & ApplyMinimumHeight)
minimumSize.setHeight(size.height());
SetPropertyCommand* cmd = new SetPropertyCommand(fw);
- cmd->init(w, QStringLiteral("minimumSize"), minimumSize);
+ cmd->init(w, u"minimumSize"_s, minimumSize);
fw->commandHistory()->push(cmd);
}
if (flags & (ApplyMaximumWidth|ApplyMaximumHeight)) {
@@ -665,7 +639,7 @@ static void createSizeCommand(QDesignerFormWindowInterface *fw, QWidget *w, int
if (flags & ApplyMaximumHeight)
maximumSize.setHeight(size.height());
SetPropertyCommand* cmd = new SetPropertyCommand(fw);
- cmd->init(w, QStringLiteral("maximumSize"), maximumSize);
+ cmd->init(w, u"maximumSize"_s, maximumSize);
fw->commandHistory()->push(cmd);
}
}
@@ -681,10 +655,10 @@ void QDesignerTaskMenu::applySize(QAction *a)
return;
const int mask = a->data().toInt();
- const int size = selection.size();
- fw->commandHistory()->beginMacro(tr("Set size constraint on %n widget(s)", nullptr, size));
- for (int i = 0; i < size; i++)
- createSizeCommand(fw, selection.at(i), mask);
+ fw->commandHistory()->beginMacro(tr("Set size constraint on %n widget(s)", nullptr,
+ int(selection.size())));
+ for (auto *w : selection)
+ createSizeCommand(fw, w, mask);
fw->commandHistory()->endMacro();
}
@@ -703,10 +677,10 @@ template <class Container>
Selection s;
designerObjectInspector->getSelection(s);
const QWidgetList &source = fw->isManaged(current) ? s.managed : s.unmanaged;
- const QWidgetList::const_iterator cend = source.constEnd();
- for ( QWidgetList::const_iterator it = source.constBegin(); it != cend; ++it)
- if (*it != current) // was first
- c->push_back(*it);
+ for (auto *w : source) {
+ if (w != current) // was first
+ c->append(w);
+ }
}
QObjectList QDesignerTaskMenu::applicableObjects(const QDesignerFormWindowInterface *fw, PropertyMode pm) const
@@ -748,3 +722,5 @@ void QDesignerTaskMenu::slotLayoutAlignment()
} // namespace qdesigner_internal
QT_END_NAMESPACE
+
+#include "qdesigner_taskmenu.moc"
diff --git a/src/designer/src/lib/shared/qdesigner_taskmenu_p.h b/src/designer/src/lib/shared/qdesigner_taskmenu_p.h
index b4bc23da4..9c504f893 100644
--- a/src/designer/src/lib/shared/qdesigner_taskmenu_p.h
+++ b/src/designer/src/lib/shared/qdesigner_taskmenu_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/qdesigner_toolbar.cpp b/src/designer/src/lib/shared/qdesigner_toolbar.cpp
index 5e8eeccdd..a5d75d23f 100644
--- a/src/designer/src/lib/shared/qdesigner_toolbar.cpp
+++ b/src/designer/src/lib/shared/qdesigner_toolbar.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_toolbar_p.h"
#include "qdesigner_command_p.h"
@@ -52,10 +27,10 @@
#include <QtCore/qdebug.h>
-Q_DECLARE_METATYPE(QAction*)
-
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
using ActionList = QList<QAction *>;
namespace qdesigner_internal {
@@ -90,6 +65,7 @@ bool ToolBarEventFilter::eventFilter (QObject *watched, QEvent *event)
if (watched != m_toolBar)
return QObject::eventFilter (watched, event);
+ bool handled = false;
switch (event->type()) {
case QEvent::ChildAdded: {
// Children should not interact with the mouse
@@ -101,24 +77,32 @@ bool ToolBarEventFilter::eventFilter (QObject *watched, QEvent *event)
}
break;
case QEvent::ContextMenu:
- return handleContextMenuEvent(static_cast<QContextMenuEvent*>(event));
+ handled = handleContextMenuEvent(static_cast<QContextMenuEvent*>(event));
+ break;
case QEvent::DragEnter:
case QEvent::DragMove:
- return handleDragEnterMoveEvent(static_cast<QDragMoveEvent *>(event));
+ handled = handleDragEnterMoveEvent(static_cast<QDragMoveEvent *>(event));
+ break;
case QEvent::DragLeave:
- return handleDragLeaveEvent(static_cast<QDragLeaveEvent *>(event));
+ handled = handleDragLeaveEvent(static_cast<QDragLeaveEvent *>(event));
+ break;
case QEvent::Drop:
- return handleDropEvent(static_cast<QDropEvent *>(event));
+ handled = handleDropEvent(static_cast<QDropEvent *>(event));
+ break;
case QEvent::MouseButtonPress:
- return handleMousePressEvent(static_cast<QMouseEvent*>(event));
+ handled = handleMousePressEvent(static_cast<QMouseEvent*>(event));
+ break;
case QEvent::MouseButtonRelease:
- return handleMouseReleaseEvent(static_cast<QMouseEvent*>(event));
+ handled = handleMouseReleaseEvent(static_cast<QMouseEvent*>(event));
+ break;
case QEvent::MouseMove:
- return handleMouseMoveEvent(static_cast<QMouseEvent*>(event));
+ handled = handleMouseMoveEvent(static_cast<QMouseEvent*>(event));
+ break;
default:
break;
}
- return QObject::eventFilter (watched, event);
+
+ return handled || QObject::eventFilter(watched, event);
}
ActionList ToolBarEventFilter::contextMenuActions(const QPoint &globalPos)
@@ -173,9 +157,8 @@ bool ToolBarEventFilter::handleContextMenuEvent(QContextMenuEvent * event )
const ActionList al = contextMenuActions(event->globalPos());
QMenu menu(nullptr);
- const ActionList::const_iterator acend = al.constEnd();
- for (ActionList::const_iterator it = al.constBegin(); it != acend; ++it)
- menu.addAction(*it);
+ for (auto *a : al)
+ menu.addAction(a);
menu.exec(globalPos);
return true;
}
@@ -195,7 +178,7 @@ void ToolBarEventFilter::slotRemoveSelectedAction()
const ActionList actions = m_toolBar->actions();
const int pos = actions.indexOf(a);
QAction *action_before = nullptr;
- if (pos != -1 && actions.count() > pos + 1)
+ if (pos != -1 && actions.size() > pos + 1)
action_before = actions.at(pos + 1);
RemoveActionFromCommand *cmd = new RemoveActionFromCommand(fw);
@@ -218,7 +201,7 @@ void ToolBarEventFilter::slotInsertSeparator()
QAction *theSender = qobject_cast<QAction*>(sender());
QAction *previous = qvariant_cast<QAction *>(theSender->data());
fw->beginCommand(tr("Insert Separator"));
- QAction *action = createAction(fw, QStringLiteral("separator"), true);
+ QAction *action = createAction(fw, u"separator"_s, true);
InsertActionIntoCommand *cmd = new InsertActionIntoCommand(fw);
cmd->init(m_toolBar, action, previous);
fw->commandHistory()->push(cmd);
@@ -276,9 +259,13 @@ bool ToolBarEventFilter::handleMousePressEvent(QMouseEvent *event)
}
core->propertyEditor()->setObject(m_toolBar);
}
- m_startPosition = m_toolBar->mapFromGlobal(event->globalPosition().toPoint());
- event->accept();
- return true;
+ const auto pos = m_toolBar->mapFromGlobal(event->globalPosition().toPoint());
+ if (actionIndexAt(m_toolBar, pos, m_toolBar->orientation()) != -1) {
+ m_startPosition = pos;
+ event->accept();
+ return true;
+ }
+ return false;
}
bool ToolBarEventFilter::handleMouseReleaseEvent(QMouseEvent *event)
@@ -298,8 +285,8 @@ bool ToolBarEventFilter::handleMouseMoveEvent(QMouseEvent *event)
return false;
const QPoint pos = m_toolBar->mapFromGlobal(event->globalPosition().toPoint());
- if ((pos - m_startPosition).manhattanLength() > qApp->startDragDistance()) {
- startDrag(m_startPosition, event->modifiers());
+ if ((pos - m_startPosition).manhattanLength() > QApplication::startDragDistance()
+ && startDrag(m_startPosition, event->modifiers())) {
m_startPosition = QPoint();
event->accept();
return true;
@@ -381,11 +368,11 @@ bool ToolBarEventFilter::handleDropEvent(QDropEvent *event)
return true;
}
-void ToolBarEventFilter::startDrag(const QPoint &pos, Qt::KeyboardModifiers modifiers)
+bool ToolBarEventFilter::startDrag(const QPoint &pos, Qt::KeyboardModifiers modifiers)
{
const int index = actionIndexAt(m_toolBar, pos, m_toolBar->orientation());
if (index == - 1)
- return;
+ return false;
const ActionList actions = m_toolBar->actions();
QAction *action = actions.at(index);
@@ -416,6 +403,7 @@ void ToolBarEventFilter::startDrag(const QPoint &pos, Qt::KeyboardModifiers modi
fw->commandHistory()->push(cmd);
}
}
+ return true;
}
QAction *ToolBarEventFilter::actionAt(const QToolBar *tb, const QPoint &pos)
diff --git a/src/designer/src/lib/shared/qdesigner_toolbar_p.h b/src/designer/src/lib/shared/qdesigner_toolbar_p.h
index a3fa2c2ad..bd897ae0a 100644
--- a/src/designer/src/lib/shared/qdesigner_toolbar_p.h
+++ b/src/designer/src/lib/shared/qdesigner_toolbar_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -109,7 +84,7 @@ private:
QDesignerFormWindowInterface *formWindow() const;
void adjustDragIndicator(const QPoint &pos);
void hideDragIndicator();
- void startDrag(const QPoint &pos, Qt::KeyboardModifiers modifiers);
+ bool startDrag(const QPoint &pos, Qt::KeyboardModifiers modifiers);
bool withinHandleArea(const QPoint &pos) const;
QToolBar *m_toolBar;
diff --git a/src/designer/src/lib/shared/qdesigner_toolbox.cpp b/src/designer/src/lib/shared/qdesigner_toolbox.cpp
index 26b36c8f9..0295e4d07 100644
--- a/src/designer/src/lib/shared/qdesigner_toolbox.cpp
+++ b/src/designer/src/lib/shared/qdesigner_toolbox.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_toolbox_p.h"
#include "qdesigner_command_p.h"
@@ -46,6 +21,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
QToolBoxHelper::QToolBoxHelper(QToolBox *toolbox) :
QObject(toolbox),
m_toolbox(toolbox),
@@ -233,11 +210,11 @@ QMenu *QToolBoxHelper::addContextMenuActions(QMenu *popup) const
// -------- QToolBoxWidgetPropertySheet
-static const char *currentItemTextKey = "currentItemText";
-static const char *currentItemNameKey = "currentItemName";
-static const char *currentItemIconKey = "currentItemIcon";
-static const char *currentItemToolTipKey = "currentItemToolTip";
-static const char *tabSpacingKey = "tabSpacing";
+static constexpr auto currentItemTextKey = "currentItemText"_L1;
+static constexpr auto currentItemNameKey = "currentItemName"_L1;
+static constexpr auto currentItemIconKey = "currentItemIcon"_L1;
+static constexpr auto currentItemToolTipKey = "currentItemToolTip"_L1;
+static constexpr auto tabSpacingKey = "tabSpacing"_L1;
enum { tabSpacingDefault = -1 };
@@ -245,26 +222,24 @@ QToolBoxWidgetPropertySheet::QToolBoxWidgetPropertySheet(QToolBox *object, QObje
QDesignerPropertySheet(object, parent),
m_toolBox(object)
{
- createFakeProperty(QLatin1String(currentItemTextKey), QVariant::fromValue(qdesigner_internal::PropertySheetStringValue()));
- createFakeProperty(QLatin1String(currentItemNameKey), QString());
- createFakeProperty(QLatin1String(currentItemIconKey), QVariant::fromValue(qdesigner_internal::PropertySheetIconValue()));
+ createFakeProperty(currentItemTextKey, QVariant::fromValue(qdesigner_internal::PropertySheetStringValue()));
+ createFakeProperty(currentItemNameKey, QString());
+ createFakeProperty(currentItemIconKey, QVariant::fromValue(qdesigner_internal::PropertySheetIconValue()));
if (formWindowBase())
- formWindowBase()->addReloadableProperty(this, indexOf(QLatin1String(currentItemIconKey)));
- createFakeProperty(QLatin1String(currentItemToolTipKey), QVariant::fromValue(qdesigner_internal::PropertySheetStringValue()));
- createFakeProperty(QLatin1String(tabSpacingKey), QVariant(tabSpacingDefault));
+ formWindowBase()->addReloadableProperty(this, indexOf(currentItemIconKey));
+ createFakeProperty(currentItemToolTipKey, QVariant::fromValue(qdesigner_internal::PropertySheetStringValue()));
+ createFakeProperty(tabSpacingKey, QVariant(tabSpacingDefault));
}
QToolBoxWidgetPropertySheet::ToolBoxProperty QToolBoxWidgetPropertySheet::toolBoxPropertyFromName(const QString &name)
{
- using ToolBoxPropertyHash = QHash<QString, ToolBoxProperty>;
- static ToolBoxPropertyHash toolBoxPropertyHash;
- if (toolBoxPropertyHash.isEmpty()) {
- toolBoxPropertyHash.insert(QLatin1String(currentItemTextKey), PropertyCurrentItemText);
- toolBoxPropertyHash.insert(QLatin1String(currentItemNameKey), PropertyCurrentItemName);
- toolBoxPropertyHash.insert(QLatin1String(currentItemIconKey), PropertyCurrentItemIcon);
- toolBoxPropertyHash.insert(QLatin1String(currentItemToolTipKey), PropertyCurrentItemToolTip);
- toolBoxPropertyHash.insert(QLatin1String(tabSpacingKey), PropertyTabSpacing);
- }
+ static const QHash<QString, ToolBoxProperty> toolBoxPropertyHash = {
+ {currentItemTextKey, PropertyCurrentItemText},
+ {currentItemNameKey, PropertyCurrentItemName},
+ {currentItemIconKey, PropertyCurrentItemIcon},
+ {currentItemToolTipKey, PropertyCurrentItemToolTip},
+ {tabSpacingKey, PropertyTabSpacing}
+ };
return toolBoxPropertyHash.value(name, PropertyToolBoxNone);
}
diff --git a/src/designer/src/lib/shared/qdesigner_toolbox_p.h b/src/designer/src/lib/shared/qdesigner_toolbox_p.h
index 9828ff2c3..8a86e23e6 100644
--- a/src/designer/src/lib/shared/qdesigner_toolbox_p.h
+++ b/src/designer/src/lib/shared/qdesigner_toolbox_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -117,7 +92,7 @@ private:
qdesigner_internal::PropertySheetStringValue tooltip;
qdesigner_internal::PropertySheetIconValue icon;
};
- QMap<QWidget *, PageData> m_pageToData;
+ QHash<QWidget *, PageData> m_pageToData;
};
using QToolBoxWidgetPropertySheetFactory = QDesignerPropertySheetFactory<QToolBox, QToolBoxWidgetPropertySheet>;
diff --git a/src/designer/src/lib/shared/qdesigner_utils.cpp b/src/designer/src/lib/shared/qdesigner_utils.cpp
index 8ac1c4836..67ff4df2d 100644
--- a/src/designer/src/lib/shared/qdesigner_utils.cpp
+++ b/src/designer/src/lib/shared/qdesigner_utils.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_utils_p.h"
#include "qdesigner_propertycommand_p.h"
@@ -38,15 +13,20 @@
#include <QtDesigner/taskmenu.h>
#include <QtDesigner/qextensionmanager.h>
+#include <QtCore/qcoreapplication.h>
#include <QtCore/qdir.h>
+#include <QtCore/qfileinfo.h>
+#include <QtCore/qoperatingsystemversion.h>
#include <QtCore/qprocess.h>
#include <QtCore/qlibraryinfo.h>
#include <QtCore/qdebug.h>
#include <QtCore/qqueue.h>
#include <QtCore/qshareddata.h>
+#include <QtCore/qstandardpaths.h>
#include <QtWidgets/qapplication.h>
#include <QtGui/qicon.h>
+#include <QtGui/qpalette.h>
#include <QtGui/qpixmap.h>
#include <QtWidgets/qlistwidget.h>
#include <QtWidgets/qtreewidget.h>
@@ -55,8 +35,27 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal
{
+ // ### FIXME Qt 8: Remove (QTBUG-96005)
+ QString legacyDataDirectory()
+ {
+ return QDir::homePath() + u"/.designer"_s;
+ }
+
+ QString dataDirectory()
+ {
+#if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0)
+ return QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)
+ + u'/' + QCoreApplication::organizationName() + u"/Designer"_s;
+#else
+ return legacyDataDirectory();
+#endif
+ }
+
+
QDESIGNER_SHARED_EXPORT void designerWarning(const QString &message)
{
qWarning("Designer: %s", qPrintable(message));
@@ -159,18 +158,19 @@ namespace qdesigner_internal
{
return QCoreApplication::translate("DesignerMetaEnum",
"%1 is not a valid enumeration value of '%2'.")
- .arg(value).arg(name());
+ .arg(value).arg(enumName());
}
QString DesignerMetaEnum::messageParseFailed(const QString &s) const
{
return QCoreApplication::translate("DesignerMetaEnum",
"'%1' could not be converted to an enumeration value of type '%2'.")
- .arg(s, name());
+ .arg(s, enumName());
}
// -------------- DesignerMetaFlags
- DesignerMetaFlags::DesignerMetaFlags(const QString &name, const QString &scope, const QString &separator) :
- MetaEnum<uint>(name, scope, separator)
+ DesignerMetaFlags::DesignerMetaFlags(const QString &enumName, const QString &scope,
+ const QString &separator) :
+ MetaEnum<uint>(enumName, scope, separator)
{
}
@@ -178,18 +178,18 @@ namespace qdesigner_internal
{
QStringList rc;
const uint v = static_cast<uint>(ivalue);
- for (auto it = keyToValueMap().constBegin(), cend = keyToValueMap().constEnd(); it != cend; ++it ) {
- const uint itemValue = it.value();
+ for (auto it = keyToValueMap().begin(), end = keyToValueMap().end(); it != end; ++it) {
+ const uint itemValue = it->second;
// Check for equality first as flag values can be 0 or -1, too. Takes preference over a bitwise flag
if (v == itemValue) {
rc.clear();
- rc.push_back(it.key());
+ rc.push_back(it->first);
return rc;
}
// Do not add 0-flags (None-flags)
if (itemValue)
if ((v & itemValue) == itemValue)
- rc.push_back(it.key());
+ rc.push_back(it->first);
}
return rc;
}
@@ -201,16 +201,14 @@ namespace qdesigner_internal
if (flagIds.isEmpty())
return QString();
- const QChar delimiter = QLatin1Char('|');
QString rc;
- const QStringList::const_iterator cend = flagIds.constEnd();
- for (QStringList::const_iterator it = flagIds.constBegin(); it != cend; ++it) {
+ for (const auto &id : flagIds) {
if (!rc.isEmpty())
- rc += delimiter ;
+ rc += u'|';
if (sm == FullyQualified)
- appendQualifiedName(*it, rc);
+ appendQualifiedName(id, rc);
else
- rc += *it;
+ rc += id;
}
return rc;
}
@@ -225,9 +223,9 @@ namespace qdesigner_internal
}
uint flags = 0;
bool valueOk = true;
- QStringList keys = s.split(QString(QLatin1Char('|')));
- for (auto it = keys.constBegin(), cend = keys.constEnd(); it != cend; ++it) {
- const uint flagValue = keyToValue(*it, &valueOk);
+ const auto keys = QStringView{s}.split(u'|');
+ for (const auto &key : keys) {
+ const uint flagValue = keyToValue(key, &valueOk);
if (!valueOk) {
flags = 0;
break;
@@ -243,7 +241,7 @@ namespace qdesigner_internal
{
return QCoreApplication::translate("DesignerMetaFlags",
"'%1' could not be converted to a flag value of type '%2'.")
- .arg(s, name());
+ .arg(s, enumName());
}
// ---------- PropertySheetEnumValue
@@ -276,12 +274,7 @@ namespace qdesigner_internal
{
if (const QDesignerLanguageExtension *lang = qt_extension<QDesignerLanguageExtension *>(core->extensionManager(), core))
return lang->isLanguageResource(path) ? LanguageResourcePixmap : FilePixmap;
- return path.startsWith(QLatin1Char(':')) ? ResourcePixmap : FilePixmap;
- }
-
- int PropertySheetPixmapValue::compare(const PropertySheetPixmapValue &other) const
- {
- return m_path.compare(other.m_path);
+ return path.startsWith(u':') ? ResourcePixmap : FilePixmap;
}
QString PropertySheetPixmapValue::path() const
@@ -302,6 +295,7 @@ namespace qdesigner_internal
public:
PropertySheetIconValue::ModeStateToPixmapMap m_paths;
QString m_theme;
+ int m_themeEnum = -1;
};
PropertySheetIconValue::PropertySheetIconValue(const PropertySheetPixmapValue &pixmap) :
@@ -317,52 +311,37 @@ namespace qdesigner_internal
PropertySheetIconValue::~PropertySheetIconValue() = default;
- PropertySheetIconValue::PropertySheetIconValue(const PropertySheetIconValue &rhs) :
- m_data(rhs.m_data)
- {
- }
+ PropertySheetIconValue::PropertySheetIconValue(const PropertySheetIconValue &rhs) noexcept = default;
+ PropertySheetIconValue &PropertySheetIconValue::operator=(const PropertySheetIconValue &rhs) = default;
- PropertySheetIconValue &PropertySheetIconValue::operator=(const PropertySheetIconValue &rhs)
- {
- if (this != &rhs)
- m_data.operator=(rhs.m_data);
- return *this;
- }
+ PropertySheetIconValue::PropertySheetIconValue(PropertySheetIconValue &&) noexcept = default;
+ PropertySheetIconValue &PropertySheetIconValue::operator=(PropertySheetIconValue &&) noexcept = default;
+
+} // namespace qdesigner_internal
+
+namespace qdesigner_internal {
- bool PropertySheetIconValue::equals(const PropertySheetIconValue &rhs) const
+ size_t qHash(const PropertySheetIconValue &p, size_t seed) noexcept
{
- return m_data->m_theme == rhs.m_data->m_theme && m_data->m_paths == rhs.m_data->m_paths;
+ // qHash for paths making use of the existing QPair hash functions.
+ const auto *d = p.m_data.constData();
+ return qHashMulti(seed, d->m_paths, d->m_themeEnum, d->m_theme);
}
- bool PropertySheetIconValue::operator<(const PropertySheetIconValue &other) const
+ bool comparesEqual(const PropertySheetIconValue &lhs,
+ const PropertySheetIconValue &rhs) noexcept
{
- if (const int themeCmp = m_data->m_theme.compare(other.m_data->m_theme))
- return themeCmp < 0;
- auto itThis = m_data->m_paths.cbegin();
- auto itThisEnd = m_data->m_paths.cend();
- auto itOther = other.m_data->m_paths.cbegin();
- auto itOtherEnd = other.m_data->m_paths.cend();
- while (itThis != itThisEnd && itOther != itOtherEnd) {
- const ModeStateKey thisPair = itThis.key();
- const ModeStateKey otherPair = itOther.key();
- if (thisPair < otherPair)
- return true;
- if (otherPair < thisPair)
- return false;
- const int crc = itThis.value().compare(itOther.value());
- if (crc < 0)
- return true;
- if (crc > 0)
- return false;
- ++itThis;
- ++itOther;
- }
- return itOther != itOtherEnd;
+ const auto *lhsd = lhs.m_data.constData();
+ const auto *rhsd = rhs.m_data.constData();
+ return lhsd == rhsd
+ || (lhsd->m_themeEnum == rhsd->m_themeEnum
+ && lhsd->m_theme == rhsd->m_theme && lhsd->m_paths == rhsd->m_paths);
}
bool PropertySheetIconValue::isEmpty() const
{
- return m_data->m_theme.isEmpty() && m_data->m_paths.isEmpty();
+ return m_data->m_themeEnum == -1 && m_data->m_theme.isEmpty()
+ && m_data->m_paths.isEmpty();
}
QString PropertySheetIconValue::theme() const
@@ -375,15 +354,25 @@ namespace qdesigner_internal
m_data->m_theme = t;
}
+ int PropertySheetIconValue::themeEnum() const
+ {
+ return m_data->m_themeEnum;
+ }
+
+ void PropertySheetIconValue::setThemeEnum(int e)
+ {
+ m_data->m_themeEnum = e;
+ }
+
PropertySheetPixmapValue PropertySheetIconValue::pixmap(QIcon::Mode mode, QIcon::State state) const
{
- const ModeStateKey pair = qMakePair(mode, state);
+ const ModeStateKey pair{mode, state};
return m_data->m_paths.value(pair);
}
void PropertySheetIconValue::setPixmap(QIcon::Mode mode, QIcon::State state, const PropertySheetPixmapValue &pixmap)
{
- const ModeStateKey pair = qMakePair(mode, state);
+ const ModeStateKey pair{mode, state};
if (pixmap.path().isEmpty())
m_data->m_paths.remove(pair);
else
@@ -392,7 +381,7 @@ namespace qdesigner_internal
QPixmap DesignerPixmapCache::pixmap(const PropertySheetPixmapValue &value) const
{
- QMap<PropertySheetPixmapValue, QPixmap>::const_iterator it = m_cache.constFind(value);
+ const auto it = m_cache.constFind(value);
if (it != m_cache.constEnd())
return it.value();
@@ -418,6 +407,11 @@ namespace qdesigner_internal
return it.value();
// Match on the theme first if it is available.
+ if (value.themeEnum() != -1) {
+ const QIcon themeIcon = QIcon::fromTheme(static_cast<QIcon::ThemeIcon>(value.themeEnum()));
+ m_cache.insert(value, themeIcon);
+ return themeIcon;
+ }
if (!value.theme().isEmpty()) {
const QString theme = value.theme();
if (QIcon::hasThemeIcon(theme)) {
@@ -452,14 +446,6 @@ namespace qdesigner_internal
PropertySheetTranslatableData::PropertySheetTranslatableData(bool translatable, const QString &disambiguation, const QString &comment) :
m_translatable(translatable), m_disambiguation(disambiguation), m_comment(comment) { }
- bool PropertySheetTranslatableData::equals(const PropertySheetTranslatableData &rhs) const
- {
- return m_translatable == rhs.m_translatable
- && m_disambiguation == rhs.m_disambiguation
- && m_comment == rhs.m_comment
- && m_id == rhs.m_id;
- }
-
PropertySheetStringValue::PropertySheetStringValue(const QString &value,
bool translatable, const QString &disambiguation, const QString &comment) :
PropertySheetTranslatableData(translatable, disambiguation, comment), m_value(value) {}
@@ -474,11 +460,6 @@ namespace qdesigner_internal
m_value = value;
}
- bool PropertySheetStringValue::equals(const PropertySheetStringValue &rhs) const
- {
- return m_value == rhs.m_value && PropertySheetTranslatableData::equals(rhs);
- }
-
PropertySheetStringListValue::PropertySheetStringListValue(const QStringList &value,
bool translatable,
const QString &disambiguation,
@@ -497,11 +478,6 @@ namespace qdesigner_internal
m_value = value;
}
- bool PropertySheetStringListValue::equals(const PropertySheetStringListValue &rhs) const
- {
- return m_value == rhs.m_value && PropertySheetTranslatableData::equals(rhs);
- }
-
QStringList m_value;
@@ -542,12 +518,6 @@ namespace qdesigner_internal
return m_standardKey != QKeySequence::UnknownKey;
}
- bool PropertySheetKeySequenceValue::equals(const PropertySheetKeySequenceValue &rhs) const
- {
- return m_value == rhs.m_value && m_standardKey == rhs.m_standardKey
- && PropertySheetTranslatableData::equals(rhs);
- }
-
/* IconSubPropertyMask: Assign each icon sub-property (pixmaps for the
* various states/modes and the theme) a flag bit (see QFont) so that they
* can be handled individually when assigning property values to
@@ -564,7 +534,8 @@ namespace qdesigner_internal
ActiveOnIconMask = 0x20,
SelectedOffIconMask = 0x40,
SelectedOnIconMask = 0x80,
- ThemeIconMask = 0x10000
+ ThemeIconMask = 0x10000,
+ ThemeEnumIconMask = 0x20000
};
static inline uint iconStateToSubPropertyFlag(QIcon::Mode mode, QIcon::State state)
@@ -582,28 +553,28 @@ namespace qdesigner_internal
return state == QIcon::On ? NormalOnIconMask : NormalOffIconMask;
}
- static inline QPair<QIcon::Mode, QIcon::State> subPropertyFlagToIconModeState(unsigned flag)
+ static inline std::pair<QIcon::Mode, QIcon::State> subPropertyFlagToIconModeState(unsigned flag)
{
switch (flag) {
case NormalOnIconMask:
- return qMakePair(QIcon::Normal, QIcon::On);
+ return {QIcon::Normal, QIcon::On};
case DisabledOffIconMask:
- return qMakePair(QIcon::Disabled, QIcon::Off);
+ return {QIcon::Disabled, QIcon::Off};
case DisabledOnIconMask:
- return qMakePair(QIcon::Disabled, QIcon::On);
+ return {QIcon::Disabled, QIcon::On};
case ActiveOffIconMask:
- return qMakePair(QIcon::Active, QIcon::Off);
+ return {QIcon::Active, QIcon::Off};
case ActiveOnIconMask:
- return qMakePair(QIcon::Active, QIcon::On);
+ return {QIcon::Active, QIcon::On};
case SelectedOffIconMask:
- return qMakePair(QIcon::Selected, QIcon::Off);
+ return {QIcon::Selected, QIcon::Off};
case SelectedOnIconMask:
- return qMakePair(QIcon::Selected, QIcon::On);
+ return {QIcon::Selected, QIcon::On};
case NormalOffIconMask:
default:
break;
}
- return qMakePair(QIcon::Normal, QIcon::Off);
+ return {QIcon::Normal, QIcon::Off};
}
uint PropertySheetIconValue::mask() const
@@ -613,6 +584,8 @@ namespace qdesigner_internal
flags |= iconStateToSubPropertyFlag(it.key().first, it.key().second);
if (!m_data->m_theme.isEmpty())
flags |= ThemeIconMask;
+ if (m_data->m_themeEnum != -1)
+ flags |= ThemeEnumIconMask;
return flags;
}
@@ -622,13 +595,16 @@ namespace qdesigner_internal
for (int i = 0; i < 8; i++) {
const uint flag = 1 << i;
if (diffMask & flag) { // if state is set in both icons, compare the values
- const QPair<QIcon::Mode, QIcon::State> state = subPropertyFlagToIconModeState(flag);
+ const auto state = subPropertyFlagToIconModeState(flag);
if (pixmap(state.first, state.second) == other.pixmap(state.first, state.second))
diffMask &= ~flag;
}
}
if ((diffMask & ThemeIconMask) && theme() == other.theme())
diffMask &= ~ThemeIconMask;
+ if ((diffMask & ThemeEnumIconMask) && themeEnum() == other.themeEnum())
+ diffMask &= ~ThemeEnumIconMask;
+
return diffMask;
}
@@ -643,6 +619,7 @@ namespace qdesigner_internal
{
PropertySheetIconValue rc(*this);
rc.m_data->m_theme.clear();
+ rc.m_data->m_themeEnum = -1;
return rc;
}
@@ -657,6 +634,8 @@ namespace qdesigner_internal
}
if (mask & ThemeIconMask)
setTheme(other.theme());
+ if (mask & ThemeEnumIconMask)
+ setThemeEnum(other.themeEnum());
}
const PropertySheetIconValue::ModeStateToPixmapMap &PropertySheetIconValue::paths() const
@@ -664,17 +643,24 @@ namespace qdesigner_internal
return m_data->m_paths;
}
- QDESIGNER_SHARED_EXPORT QDebug operator<<(QDebug d, const PropertySheetIconValue &p)
+ QDESIGNER_SHARED_EXPORT QDebug operator<<(QDebug debug, const PropertySheetIconValue &p)
{
- QDebug nospace = d.nospace();
- nospace << "PropertySheetIconValue theme='" << p.theme() << "' ";
+ QDebugStateSaver saver(debug);
+ debug.nospace();
+ debug.noquote();
+ debug << "PropertySheetIconValue(mask=0x" << Qt::hex << p.mask() << Qt::dec << ", ";
+ if (p.themeEnum() != -1)
+ debug << "theme=" << p.themeEnum() << ", ";
+ if (!p.theme().isEmpty())
+ debug << "XDG theme=\"" << p.theme() << "\", ";
const PropertySheetIconValue::ModeStateToPixmapMap &paths = p.paths();
- for (auto it = paths.constBegin(), cend = paths.constEnd(); it != cend; ++it)
- nospace << " mode=" << it.key().first << ",state=" << it.key().second
- << ",'" << it.value().path() << '\'';
- nospace << " mask=0x" << QString::number(p.mask(), 16);
- return d;
+ for (auto it = paths.constBegin(), cend = paths.constEnd(); it != cend; ++it) {
+ debug << " mode=" << it.key().first << ",state=" << it.key().second
+ << ", \"" << it.value().path() << '"';
+ }
+ debug << ')';
+ return debug;
}
QDESIGNER_SHARED_EXPORT QDesignerFormWindowCommand *createTextPropertyCommand(const QString &propertyName, const QString &text, QObject *object, QDesignerFormWindowInterface *fw)
@@ -701,8 +687,8 @@ namespace qdesigner_internal
}
}
if (!action) {
- if (const QDesignerTaskMenuExtension *taskMenu = qobject_cast<QDesignerTaskMenuExtension *>(
- core->extensionManager()->extension(managedWidget, QStringLiteral("QDesignerInternalTaskMenuExtension")))) {
+ if (const auto *taskMenu = qobject_cast<QDesignerTaskMenuExtension *>(
+ core->extensionManager()->extension(managedWidget, u"QDesignerInternalTaskMenuExtension"_s))) {
action = taskMenu->preferredEditAction();
if (!action) {
const auto actions = taskMenu->taskActions();
@@ -719,12 +705,25 @@ namespace qdesigner_internal
{
QProcess uic;
QStringList arguments;
- QString binary = QLibraryInfo::path(QLibraryInfo::BinariesPath) + QStringLiteral("/uic");
+ static constexpr auto uicBinary =
+ QOperatingSystemVersion::currentType() != QOperatingSystemVersion::Windows
+ ? "/uic"_L1 : "/uic.exe"_L1;
+ QString binary = QLibraryInfo::path(QLibraryInfo::LibraryExecutablesPath) + uicBinary;
+ // In a PySide6 installation, there is no libexec directory; uic.exe is
+ // in the main wheel directory next to designer.exe.
+ if (!QFileInfo::exists(binary))
+ binary = QCoreApplication::applicationDirPath() + uicBinary;
+ if (!QFileInfo::exists(binary)) {
+ errorMessage = QApplication::translate("Designer", "%1 does not exist.").
+ arg(QDir::toNativeSeparators(binary));
+ return false;
+ }
+
switch (language) {
case UicLanguage::Cpp:
break;
case UicLanguage::Python:
- arguments << QLatin1String("-g") << QLatin1String("python");
+ arguments << u"-g"_s << u"python"_s;
break;
}
arguments << fileName;
@@ -754,14 +753,14 @@ namespace qdesigner_internal
Q_ASSERT(qname.isEmpty() == false);
- if (qname.count() > 1 && qname.at(1).isUpper()) {
+ if (qname.size() > 1 && qname.at(1).isUpper()) {
const QChar first = qname.at(0);
- if (first == QLatin1Char('Q') || first == QLatin1Char('K'))
+ if (first == u'Q' || first == u'K')
qname.remove(0, 1);
}
- const int len = qname.count();
- for (int i = 0; i < len && qname.at(i).isUpper(); i++)
+ const qsizetype len = qname.size();
+ for (qsizetype i = 0; i < len && qname.at(i).isUpper(); ++i)
qname[i] = qname.at(i).toLower();
return qname;
@@ -782,6 +781,24 @@ namespace qdesigner_internal
m_widget->setUpdatesEnabled(true);
}
+// from qpalette.cpp
+quint64 paletteResolveMask(QPalette::ColorGroup colorGroup,
+ QPalette::ColorRole colorRole)
+{
+ if (colorRole == QPalette::Accent)
+ colorRole = QPalette::NoRole; // See qtbase/17c589df94a2245ee92d45839c2cba73566d7310
+ const auto offset = quint64(QPalette::NColorRoles - 1) * quint64(colorGroup);
+ const auto bitPos = quint64(colorRole) + offset;
+ return 1ull << bitPos;
+}
+
+quint64 paletteResolveMask(QPalette::ColorRole colorRole)
+{
+ return paletteResolveMask(QPalette::Active, colorRole)
+ | paletteResolveMask(QPalette::Inactive, colorRole)
+ | paletteResolveMask(QPalette::Disabled, colorRole);
+}
+
} // namespace qdesigner_internal
QT_END_NAMESPACE
diff --git a/src/designer/src/lib/shared/qdesigner_utils_p.h b/src/designer/src/lib/shared/qdesigner_utils_p.h
index 38cb31c9d..223a12337 100644
--- a/src/designer/src/lib/shared/qdesigner_utils_p.h
+++ b/src/designer/src/lib/shared/qdesigner_utils_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -44,13 +19,16 @@
#include <QtDesigner/abstractformwindow.h>
+#include <QtCore/qcompare.h>
+#include <QtCore/qhash.h>
#include <QtCore/qvariant.h>
#include <QtCore/qshareddata.h>
-#include <QtCore/qmap.h>
#include <QtWidgets/qmainwindow.h>
#include <QtGui/qicon.h>
#include <QtGui/qpixmap.h>
+#include <map>
+
QT_BEGIN_NAMESPACE
class QDebug;
@@ -61,6 +39,10 @@ class DesignerIconCache;
class FormWindowBase;
+QDESIGNER_SHARED_EXPORT QString dataDirectory();
+
+QDESIGNER_SHARED_EXPORT QString legacyDataDirectory();
+
QDESIGNER_SHARED_EXPORT void designerWarning(const QString &message);
QDESIGNER_SHARED_EXPORT void reloadIconResources(DesignerIconCache *iconCache, QObject *object);
@@ -81,17 +63,17 @@ template <class IntType>
class MetaEnum
{
public:
- using KeyToValueMap = QMap<QString, IntType>;
+ using KeyToValueMap = std::map<QString, IntType, std::less<>>;
- MetaEnum(const QString &name, const QString &scope, const QString &separator);
+ MetaEnum(const QString &enumName, const QString &scope, const QString &separator);
MetaEnum() = default;
void addKey(IntType value, const QString &name);
QString valueToKey(IntType value, bool *ok = nullptr) const;
// Ignorant of scopes.
- IntType keyToValue(QString key, bool *ok = nullptr) const;
+ IntType keyToValue(QStringView key, bool *ok = nullptr) const;
- const QString &name() const { return m_name; }
+ const QString &enumName() const { return m_enumName; }
const QString &scope() const { return m_scope; }
const QString &separator() const { return m_separator; }
@@ -102,7 +84,7 @@ protected:
void appendQualifiedName(const QString &key, QString &target) const;
private:
- QString m_name;
+ QString m_enumName;
QString m_scope;
QString m_separator;
KeyToValueMap m_keyToValueMap;
@@ -110,8 +92,8 @@ private:
};
template <class IntType>
-MetaEnum<IntType>::MetaEnum(const QString &name, const QString &scope, const QString &separator) :
- m_name(name),
+MetaEnum<IntType>::MetaEnum(const QString &enumName, const QString &scope, const QString &separator) :
+ m_enumName(enumName),
m_scope(scope),
m_separator(separator)
{
@@ -120,29 +102,36 @@ MetaEnum<IntType>::MetaEnum(const QString &name, const QString &scope, const QSt
template <class IntType>
void MetaEnum<IntType>::addKey(IntType value, const QString &name)
{
- m_keyToValueMap.insert(name, value);
+ m_keyToValueMap.insert({name, value});
m_keys.append(name);
}
template <class IntType>
QString MetaEnum<IntType>::valueToKey(IntType value, bool *ok) const
{
- const QString rc = m_keyToValueMap.key(value);
+ QString rc;
+ for (auto it = m_keyToValueMap.begin(), end = m_keyToValueMap.end(); it != end; ++it) {
+ if (it->second == value) {
+ rc = it->first;
+ break;
+ }
+ }
if (ok)
*ok = !rc.isEmpty();
return rc;
}
template <class IntType>
-IntType MetaEnum<IntType>::keyToValue(QString key, bool *ok) const
+IntType MetaEnum<IntType>::keyToValue(QStringView key, bool *ok) const
{
- if (!m_scope.isEmpty() && key.startsWith(m_scope))
- key.remove(0, m_scope.size() + m_separator.size());
- const typename KeyToValueMap::const_iterator it = m_keyToValueMap.find(key);
- const bool found = it != m_keyToValueMap.constEnd();
+ const auto lastSep = key.lastIndexOf(m_separator);
+ if (lastSep != -1)
+ key = key.sliced(lastSep + m_separator.size());
+ const auto it = m_keyToValueMap.find(key);
+ const bool found = it != m_keyToValueMap.end();
if (ok)
*ok = found;
- return found ? it.value() : IntType(0);
+ return found ? it->second : IntType(0);
}
template <class IntType>
@@ -152,7 +141,7 @@ void MetaEnum<IntType>::appendQualifiedName(const QString &key, QString &target)
target += m_scope;
target += m_separator;
}
- target += key;
+ target += m_enumName + m_separator + key;
}
// -------------- DesignerMetaEnum: Meta type for enumerations
@@ -180,7 +169,8 @@ public:
class QDESIGNER_SHARED_EXPORT DesignerMetaFlags : public MetaEnum<uint>
{
public:
- DesignerMetaFlags(const QString &name, const QString &scope, const QString &separator);
+ explicit DesignerMetaFlags(const QString &enumName, const QString &scope,
+ const QString &separator);
DesignerMetaFlags() = default;
enum SerializationMode { FullyQualified, NameOnly };
@@ -221,10 +211,6 @@ public:
PropertySheetPixmapValue(const QString &path);
PropertySheetPixmapValue();
- bool operator==(const PropertySheetPixmapValue &other) const { return compare(other) == 0; }
- bool operator!=(const PropertySheetPixmapValue &other) const { return compare(other) != 0; }
- bool operator<(const PropertySheetPixmapValue &other) const { return compare(other) < 0; }
-
// Check where a pixmap comes from
enum PixmapSource { LanguageResourcePixmap , ResourcePixmap, FilePixmap };
static PixmapSource getPixmapSource(QDesignerFormEditorInterface *core, const QString & path);
@@ -234,9 +220,18 @@ public:
QString path() const;
void setPath(const QString &path); // passing the empty path resets the pixmap
- int compare(const PropertySheetPixmapValue &other) const;
-
private:
+ friend size_t qHash(const PropertySheetPixmapValue &p, size_t seed = 0) noexcept
+ {
+ return qHash(p.m_path, seed);
+ }
+ friend bool comparesEqual(const PropertySheetPixmapValue &lhs,
+ const PropertySheetPixmapValue &rhs) noexcept
+ {
+ return lhs.m_path == rhs.m_path;
+ }
+ Q_DECLARE_EQUALITY_COMPARABLE(PropertySheetPixmapValue)
+
QString m_path;
};
@@ -247,21 +242,22 @@ class PropertySheetIconValueData;
class QDESIGNER_SHARED_EXPORT PropertySheetIconValue
{
public:
- PropertySheetIconValue(const PropertySheetPixmapValue &pixmap);
+ explicit PropertySheetIconValue(const PropertySheetPixmapValue &pixmap);
PropertySheetIconValue();
~PropertySheetIconValue();
- PropertySheetIconValue(const PropertySheetIconValue &);
+ PropertySheetIconValue(const PropertySheetIconValue &) noexcept;
PropertySheetIconValue &operator=(const PropertySheetIconValue &);
-
- bool operator==(const PropertySheetIconValue &other) const { return equals(other); }
- bool operator!=(const PropertySheetIconValue &other) const { return !equals(other); }
- bool operator<(const PropertySheetIconValue &other) const;
+ PropertySheetIconValue(PropertySheetIconValue &&) noexcept;
+ PropertySheetIconValue &operator=(PropertySheetIconValue &&) noexcept;
bool isEmpty() const;
QString theme() const;
void setTheme(const QString &);
+ int themeEnum() const;
+ void setThemeEnum(int e);
+
PropertySheetPixmapValue pixmap(QIcon::Mode mode, QIcon::State state) const;
void setPixmap(QIcon::Mode mode, QIcon::State state, const PropertySheetPixmapValue &path); // passing the empty path resets the pixmap
@@ -273,13 +269,21 @@ class QDESIGNER_SHARED_EXPORT PropertySheetIconValue
PropertySheetIconValue themed() const;
PropertySheetIconValue unthemed() const;
- using ModeStateKey = QPair<QIcon::Mode, QIcon::State>;
+ using ModeStateKey = std::pair<QIcon::Mode, QIcon::State>;
using ModeStateToPixmapMap = QMap<ModeStateKey, PropertySheetPixmapValue>;
const ModeStateToPixmapMap &paths() const;
private:
- bool equals(const PropertySheetIconValue &rhs) const;
+ friend QDESIGNER_SHARED_EXPORT
+ size_t qHash(const PropertySheetIconValue &p, size_t seed) noexcept;
+ friend size_t qHash(const PropertySheetIconValue &p) noexcept
+ { return qHash(p, 0); }
+ friend QDESIGNER_SHARED_EXPORT
+ bool comparesEqual(const PropertySheetIconValue &lhs,
+ const PropertySheetIconValue &rhs) noexcept;
+ Q_DECLARE_EQUALITY_COMPARABLE(PropertySheetIconValue)
+
QSharedDataPointer<PropertySheetIconValueData> m_data;
};
@@ -295,7 +299,7 @@ public:
signals:
void reloaded();
private:
- mutable QMap<PropertySheetPixmapValue, QPixmap> m_cache;
+ mutable QHash<PropertySheetPixmapValue, QPixmap> m_cache;
friend class FormWindowBase;
};
@@ -309,7 +313,7 @@ public:
signals:
void reloaded();
private:
- mutable QMap<PropertySheetIconValue, QIcon> m_cache;
+ mutable QHash<PropertySheetIconValue, QIcon> m_cache;
DesignerPixmapCache *m_pixmapCache;
friend class FormWindowBase;
};
@@ -321,7 +325,6 @@ protected:
PropertySheetTranslatableData(bool translatable = true,
const QString &disambiguation = QString(),
const QString &comment = QString());
- bool equals(const PropertySheetTranslatableData &rhs) const;
public:
bool translatable() const { return m_translatable; }
@@ -334,6 +337,16 @@ public:
void setId(const QString &id) { m_id = id; }
private:
+ friend bool comparesEqual(const PropertySheetTranslatableData &lhs,
+ const PropertySheetTranslatableData &rhs) noexcept
+ {
+ return lhs.m_translatable == rhs.m_translatable
+ && lhs.m_disambiguation == rhs.m_disambiguation
+ && lhs.m_comment == rhs.m_comment
+ && lhs.m_id == rhs.m_id;
+ }
+ Q_DECLARE_EQUALITY_COMPARABLE(PropertySheetTranslatableData)
+
bool m_translatable;
QString m_disambiguation;
QString m_comment;
@@ -347,14 +360,18 @@ public:
PropertySheetStringValue(const QString &value = QString(), bool translatable = true,
const QString &disambiguation = QString(), const QString &comment = QString());
- bool operator==(const PropertySheetStringValue &other) const { return equals(other); }
- bool operator!=(const PropertySheetStringValue &other) const { return !equals(other); }
-
QString value() const;
void setValue(const QString &value);
private:
- bool equals(const PropertySheetStringValue &rhs) const;
+ friend bool comparesEqual(const PropertySheetStringValue &lhs,
+ const PropertySheetStringValue &rhs) noexcept
+ {
+ const PropertySheetTranslatableData &upLhs = lhs;
+ const PropertySheetTranslatableData &upRhs = rhs;
+ return lhs.m_value == rhs.m_value && upLhs == upRhs;
+ }
+ Q_DECLARE_EQUALITY_COMPARABLE(PropertySheetStringValue)
QString m_value;
};
@@ -368,14 +385,18 @@ public:
const QString &disambiguation = QString(),
const QString &comment = QString());
- bool operator==(const PropertySheetStringListValue &other) const { return equals(other); }
- bool operator!=(const PropertySheetStringListValue &other) const { return !equals(other); }
-
QStringList value() const;
void setValue(const QStringList &value);
private:
- bool equals(const PropertySheetStringListValue &rhs) const;
+ friend bool comparesEqual(const PropertySheetStringListValue &lhs,
+ const PropertySheetStringListValue &rhs) noexcept
+ {
+ const PropertySheetTranslatableData &upLhs = lhs;
+ const PropertySheetTranslatableData &upRhs = rhs;
+ return lhs.m_value == rhs.m_value && upLhs == upRhs;
+ }
+ Q_DECLARE_EQUALITY_COMPARABLE(PropertySheetStringListValue)
QStringList m_value;
};
@@ -393,9 +414,6 @@ public:
const QString &disambiguation = QString(),
const QString &comment = QString());
- bool operator==(const PropertySheetKeySequenceValue &other) const { return equals(other); }
- bool operator!=(const PropertySheetKeySequenceValue &other) const { return !equals(other); }
-
QKeySequence value() const;
void setValue(const QKeySequence &value);
QKeySequence::StandardKey standardKey() const;
@@ -403,7 +421,15 @@ public:
bool isStandardKey() const;
private:
- bool equals(const PropertySheetKeySequenceValue &rhs) const;
+ friend bool comparesEqual(const PropertySheetKeySequenceValue &lhs,
+ const PropertySheetKeySequenceValue &rhs) noexcept
+ {
+ const PropertySheetTranslatableData &upLhs = lhs;
+ const PropertySheetTranslatableData &upRhs = rhs;
+ return lhs.m_value == rhs.m_value && lhs.m_standardKey == rhs.m_standardKey
+ && upLhs == upRhs;
+ }
+ Q_DECLARE_EQUALITY_COMPARABLE(PropertySheetKeySequenceValue)
QKeySequence m_value;
QKeySequence::StandardKey m_standardKey;
@@ -464,6 +490,12 @@ private:
const bool m_enabled;
};
+// QPalette helpers: Mask for a single color role/group
+QDESIGNER_SHARED_EXPORT quint64 paletteResolveMask(QPalette::ColorGroup colorGroup,
+ QPalette::ColorRole colorRole);
+// Mask for the colors of a role in all groups (Active/Inactive/Disabled)
+QDESIGNER_SHARED_EXPORT quint64 paletteResolveMask(QPalette::ColorRole colorRole);
+
namespace Utils {
inline int valueOf(const QVariant &value, bool *ok = nullptr)
diff --git a/src/designer/src/lib/shared/qdesigner_widget.cpp b/src/designer/src/lib/shared/qdesigner_widget.cpp
index b4f885006..88f43d5ab 100644
--- a/src/designer/src/lib/shared/qdesigner_widget.cpp
+++ b/src/designer/src/lib/shared/qdesigner_widget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_widget_p.h"
#include "formwindowbase_p.h"
diff --git a/src/designer/src/lib/shared/qdesigner_widget_p.h b/src/designer/src/lib/shared/qdesigner_widget_p.h
index c12970692..4deeaaf83 100644
--- a/src/designer/src/lib/shared/qdesigner_widget_p.h
+++ b/src/designer/src/lib/shared/qdesigner_widget_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -80,7 +55,7 @@ public:
explicit QDesignerDialog(QDesignerFormWindowInterface *fw, QWidget *parent);
QSize minimumSizeHint() const override
- { return QWidget::minimumSizeHint().expandedTo(QSize(16, 16)); }
+ { return QDialog::minimumSizeHint().expandedTo(QSize(16, 16)); }
protected:
void paintEvent(QPaintEvent *e) override;
diff --git a/src/designer/src/lib/shared/qdesigner_widgetbox.cpp b/src/designer/src/lib/shared/qdesigner_widgetbox.cpp
index 03cd9a3ad..260f68a9c 100644
--- a/src/designer/src/lib/shared/qdesigner_widgetbox.cpp
+++ b/src/designer/src/lib/shared/qdesigner_widgetbox.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_widgetbox_p.h"
#include "qdesigner_utils_p.h"
@@ -38,6 +13,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
class QDesignerWidgetBoxWidgetData : public QSharedData
{
public:
@@ -86,7 +63,8 @@ QString QDesignerWidgetBoxInterface::Widget::name() const
void QDesignerWidgetBoxInterface::Widget::setName(const QString &aname)
{
- m_data->m_name = aname;
+ if (m_data->m_name != aname)
+ m_data->m_name = aname;
}
QString QDesignerWidgetBoxInterface::Widget::domXml() const
@@ -96,7 +74,8 @@ QString QDesignerWidgetBoxInterface::Widget::domXml() const
void QDesignerWidgetBoxInterface::Widget::setDomXml(const QString &xml)
{
- m_data->m_xml = xml;
+ if (m_data->m_xml != xml)
+ m_data->m_xml = xml;
}
QString QDesignerWidgetBoxInterface::Widget::iconName() const
@@ -106,7 +85,8 @@ QString QDesignerWidgetBoxInterface::Widget::iconName() const
void QDesignerWidgetBoxInterface::Widget::setIconName(const QString &icon_name)
{
- m_data->m_icon_name = icon_name;
+ if (m_data->m_icon_name != icon_name)
+ m_data->m_icon_name = icon_name;
}
QDesignerWidgetBoxInterface::Widget::Type QDesignerWidgetBoxInterface::Widget::type() const
@@ -116,7 +96,8 @@ QDesignerWidgetBoxInterface::Widget::Type QDesignerWidgetBoxInterface::Widget::t
void QDesignerWidgetBoxInterface::Widget::setType(Type atype)
{
- m_data->m_type = atype;
+ if (m_data->m_type != atype)
+ m_data->m_type = atype;
}
bool QDesignerWidgetBoxInterface::Widget::isNull() const
@@ -150,7 +131,6 @@ bool QDesignerWidgetBox::findWidget(const QDesignerWidgetBoxInterface *wbox,
// Note that entry names do not necessarily match the class name
// (at least, not for the standard widgets), so,
// look in the XML for the class name of the first widget to appear
- const QString widgetTag = QStringLiteral("<widget");
QString pattern = QStringLiteral("^<widget\\s+class\\s*=\\s*\"");
pattern += className;
pattern += QStringLiteral("\".*$");
@@ -164,7 +144,7 @@ bool QDesignerWidgetBox::findWidget(const QDesignerWidgetBoxInterface *wbox,
for (int w = 0; w < widgetCount; w++) {
const Widget widget = cat.widget(w);
QString xml = widget.domXml(); // Erase the <ui> tag that can be present starting from 4.4
- const int widgetTagIndex = xml.indexOf(widgetTag);
+ const auto widgetTagIndex = xml.indexOf("<widget"_L1);
if (widgetTagIndex != -1) {
xml.remove(0, widgetTagIndex);
if (regexp.match(xml).hasMatch()) {
@@ -196,12 +176,12 @@ DomUI *QDesignerWidgetBox::xmlToUi(const QString &name, const QString &xml, bool
continue;
}
- if (name.compare(QStringLiteral("widget"), Qt::CaseInsensitive) == 0) { // 4.3 legacy, wrap into DomUI
+ if (name.compare("widget"_L1, Qt::CaseInsensitive) == 0) { // 4.3 legacy, wrap into DomUI
ui = new DomUI;
DomWidget *widget = new DomWidget;
widget->read(reader);
ui->setElementWidget(widget);
- } else if (name.compare(QStringLiteral("ui"), Qt::CaseInsensitive) == 0) { // 4.4
+ } else if (name.compare("ui"_L1, Qt::CaseInsensitive) == 0) { // 4.4
ui = new DomUI;
ui->read(reader);
} else {
@@ -228,7 +208,7 @@ DomUI *QDesignerWidgetBox::xmlToUi(const QString &name, const QString &xml, bool
if (insertFakeTopLevel) {
DomWidget *fakeTopLevel = new DomWidget;
- fakeTopLevel->setAttributeClass(QStringLiteral("QWidget"));
+ fakeTopLevel->setAttributeClass(u"QWidget"_s);
QList<DomWidget *> children;
children.push_back(ui->takeElementWidget());
fakeTopLevel->setElementWidget(children);
diff --git a/src/designer/src/lib/shared/qdesigner_widgetbox_p.h b/src/designer/src/lib/shared/qdesigner_widgetbox_p.h
index cad8e04da..813d65893 100644
--- a/src/designer/src/lib/shared/qdesigner_widgetbox_p.h
+++ b/src/designer/src/lib/shared/qdesigner_widgetbox_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/qdesigner_widgetitem.cpp b/src/designer/src/lib/shared/qdesigner_widgetitem.cpp
index e6e6cd00a..b986aede8 100644
--- a/src/designer/src/lib/shared/qdesigner_widgetitem.cpp
+++ b/src/designer/src/lib/shared/qdesigner_widgetitem.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdesigner_widgetitem_p.h"
#include "qdesigner_widget_p.h"
diff --git a/src/designer/src/lib/shared/qdesigner_widgetitem_p.h b/src/designer/src/lib/shared/qdesigner_widgetitem_p.h
index 7b3ed395f..b7a533e08 100644
--- a/src/designer/src/lib/shared/qdesigner_widgetitem_p.h
+++ b/src/designer/src/lib/shared/qdesigner_widgetitem_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/qlayout_widget.cpp b/src/designer/src/lib/shared/qlayout_widget.cpp
index aa0502076..28b25ce84 100644
--- a/src/designer/src/lib/shared/qlayout_widget.cpp
+++ b/src/designer/src/lib/shared/qlayout_widget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qlayout_widget_p.h"
#include "qdesigner_utils_p.h"
@@ -48,6 +23,7 @@
#include <QtCore/qdebug.h>
#include <QtCore/qalgorithms.h>
+#include <QtCore/qhash.h>
#include <QtCore/qmap.h>
#include <QtCore/qstack.h>
#include <QtCore/qpair.h>
@@ -102,8 +78,10 @@ inline void getGridItemPosition(QFormLayout *formLayout, int index, int *row, in
QT_BEGIN_NAMESPACE
-static const char *objectNameC = "objectName";
-static const char *sizeConstraintC = "sizeConstraint";
+using namespace Qt::StringLiterals;
+
+static constexpr auto objectNameC = "objectName"_L1;
+static constexpr auto sizeConstraintC = "sizeConstraint"_L1;
/* A padding spacer element that is used to represent an empty form layout cell. It should grow with its cell.
* Should not be used on a grid as it causes resizing inconsistencies */
@@ -219,8 +197,9 @@ static bool removeEmptyCellsOnGrid(GridLikeLayout *grid, const QRect &area)
// remove, starting from last
if (!indexesToBeRemoved.isEmpty()) {
std::stable_sort(indexesToBeRemoved.begin(), indexesToBeRemoved.end());
- for (int i = indexesToBeRemoved.size() - 1; i >= 0; i--)
- delete grid->takeAt(indexesToBeRemoved[i]);
+ std::reverse(indexesToBeRemoved.begin(), indexesToBeRemoved.end());
+ for (auto i : std::as_const(indexesToBeRemoved))
+ delete grid->takeAt(i);
}
return true;
}
@@ -275,15 +254,15 @@ int LayoutProperties::visibleProperties(const QLayout *layout)
static const char *marginPropertyNamesC[] = {"leftMargin", "topMargin", "rightMargin", "bottomMargin"};
static const char *spacingPropertyNamesC[] = {"spacing", "horizontalSpacing", "verticalSpacing" };
-static const char *fieldGrowthPolicyPropertyC = "fieldGrowthPolicy";
-static const char *rowWrapPolicyPropertyC = "rowWrapPolicy";
-static const char *labelAlignmentPropertyC = "labelAlignment";
-static const char *formAlignmentPropertyC = "formAlignment";
-static const char *boxStretchPropertyC = "stretch";
-static const char *gridRowStretchPropertyC = "rowStretch";
-static const char *gridColumnStretchPropertyC = "columnStretch";
-static const char *gridRowMinimumHeightPropertyC = "rowMinimumHeight";
-static const char *gridColumnMinimumWidthPropertyC = "columnMinimumWidth";
+static constexpr auto fieldGrowthPolicyPropertyC = "fieldGrowthPolicy"_L1;
+static constexpr auto rowWrapPolicyPropertyC = "rowWrapPolicy"_L1;
+static constexpr auto labelAlignmentPropertyC = "labelAlignment"_L1;
+static constexpr auto formAlignmentPropertyC = "formAlignment"_L1;
+static constexpr auto boxStretchPropertyC = "stretch"_L1;
+static constexpr auto gridRowStretchPropertyC = "rowStretch"_L1;
+static constexpr auto gridColumnStretchPropertyC = "columnStretch"_L1;
+static constexpr auto gridRowMinimumHeightPropertyC = "rowMinimumHeight"_L1;
+static constexpr auto gridColumnMinimumWidthPropertyC = "columnMinimumWidth"_L1;
static bool intValueFromSheet(const QDesignerPropertySheetExtension *sheet, const QString &name, int *value, bool *changed)
{
@@ -315,7 +294,7 @@ int LayoutProperties::fromPropertySheet(const QDesignerFormEditorInterface *core
Q_ASSERT(sheet);
// name
if (mask & ObjectNameProperty) {
- const int nameIndex = sheet->indexOf(QLatin1String(objectNameC));
+ const int nameIndex = sheet->indexOf(objectNameC);
Q_ASSERT(nameIndex != -1);
m_objectName = sheet->property(nameIndex);
m_objectNameChanged = sheet->isChanged(nameIndex);
@@ -325,25 +304,25 @@ int LayoutProperties::fromPropertySheet(const QDesignerFormEditorInterface *core
const int marginFlags[MarginCount] = { LeftMarginProperty, TopMarginProperty, RightMarginProperty, BottomMarginProperty};
for (int i = 0; i < MarginCount; i++)
if (mask & marginFlags[i])
- if (intValueFromSheet(sheet, QLatin1String(marginPropertyNamesC[i]), m_margins + i, m_marginsChanged + i))
+ if (intValueFromSheet(sheet, QLatin1StringView(marginPropertyNamesC[i]), m_margins + i, m_marginsChanged + i))
rc |= marginFlags[i];
const int spacingFlags[] = { SpacingProperty, HorizSpacingProperty, VertSpacingProperty};
for (int i = 0; i < SpacingsCount; i++)
if (mask & spacingFlags[i])
- if (intValueFromSheet(sheet, QLatin1String(spacingPropertyNamesC[i]), m_spacings + i, m_spacingsChanged + i))
+ if (intValueFromSheet(sheet, QLatin1StringView(spacingPropertyNamesC[i]), m_spacings + i, m_spacingsChanged + i))
rc |= spacingFlags[i];
// sizeConstraint, flags
- variantPropertyFromSheet(mask, SizeConstraintProperty, sheet, QLatin1String(sizeConstraintC), &m_sizeConstraint, &m_sizeConstraintChanged, &rc);
- variantPropertyFromSheet(mask, FieldGrowthPolicyProperty, sheet, QLatin1String(fieldGrowthPolicyPropertyC), &m_fieldGrowthPolicy, &m_fieldGrowthPolicyChanged, &rc);
- variantPropertyFromSheet(mask, RowWrapPolicyProperty, sheet, QLatin1String(rowWrapPolicyPropertyC), &m_rowWrapPolicy, &m_rowWrapPolicyChanged, &rc);
- variantPropertyFromSheet(mask, LabelAlignmentProperty, sheet, QLatin1String(labelAlignmentPropertyC), &m_labelAlignment, &m_labelAlignmentChanged, &rc);
- variantPropertyFromSheet(mask, FormAlignmentProperty, sheet, QLatin1String(formAlignmentPropertyC), &m_formAlignment, &m_formAlignmentChanged, &rc);
- variantPropertyFromSheet(mask, BoxStretchProperty, sheet, QLatin1String(boxStretchPropertyC), &m_boxStretch, & m_boxStretchChanged, &rc);
- variantPropertyFromSheet(mask, GridRowStretchProperty, sheet, QLatin1String(gridRowStretchPropertyC), &m_gridRowStretch, &m_gridRowStretchChanged, &rc);
- variantPropertyFromSheet(mask, GridColumnStretchProperty, sheet, QLatin1String(gridColumnStretchPropertyC), &m_gridColumnStretch, &m_gridColumnStretchChanged, &rc);
- variantPropertyFromSheet(mask, GridRowMinimumHeightProperty, sheet, QLatin1String(gridRowMinimumHeightPropertyC), &m_gridRowMinimumHeight, &m_gridRowMinimumHeightChanged, &rc);
- variantPropertyFromSheet(mask, GridColumnMinimumWidthProperty, sheet, QLatin1String(gridColumnMinimumWidthPropertyC), &m_gridColumnMinimumWidth, &m_gridColumnMinimumWidthChanged, &rc);
+ variantPropertyFromSheet(mask, SizeConstraintProperty, sheet, sizeConstraintC, &m_sizeConstraint, &m_sizeConstraintChanged, &rc);
+ variantPropertyFromSheet(mask, FieldGrowthPolicyProperty, sheet, fieldGrowthPolicyPropertyC, &m_fieldGrowthPolicy, &m_fieldGrowthPolicyChanged, &rc);
+ variantPropertyFromSheet(mask, RowWrapPolicyProperty, sheet, rowWrapPolicyPropertyC, &m_rowWrapPolicy, &m_rowWrapPolicyChanged, &rc);
+ variantPropertyFromSheet(mask, LabelAlignmentProperty, sheet, labelAlignmentPropertyC, &m_labelAlignment, &m_labelAlignmentChanged, &rc);
+ variantPropertyFromSheet(mask, FormAlignmentProperty, sheet, formAlignmentPropertyC, &m_formAlignment, &m_formAlignmentChanged, &rc);
+ variantPropertyFromSheet(mask, BoxStretchProperty, sheet, boxStretchPropertyC, &m_boxStretch, & m_boxStretchChanged, &rc);
+ variantPropertyFromSheet(mask, GridRowStretchProperty, sheet, gridRowStretchPropertyC, &m_gridRowStretch, &m_gridRowStretchChanged, &rc);
+ variantPropertyFromSheet(mask, GridColumnStretchProperty, sheet, gridColumnStretchPropertyC, &m_gridColumnStretch, &m_gridColumnStretchChanged, &rc);
+ variantPropertyFromSheet(mask, GridRowMinimumHeightProperty, sheet, gridRowMinimumHeightPropertyC, &m_gridRowMinimumHeight, &m_gridRowMinimumHeightChanged, &rc);
+ variantPropertyFromSheet(mask, GridColumnMinimumWidthProperty, sheet, gridColumnMinimumWidthPropertyC, &m_gridColumnMinimumWidth, &m_gridColumnMinimumWidthChanged, &rc);
return rc;
}
@@ -383,7 +362,7 @@ int LayoutProperties::toPropertySheet(const QDesignerFormEditorInterface *core,
Q_ASSERT(sheet);
// name
if (mask & ObjectNameProperty) {
- const int nameIndex = sheet->indexOf(QLatin1String(objectNameC));
+ const int nameIndex = sheet->indexOf(objectNameC);
Q_ASSERT(nameIndex != -1);
sheet->setProperty(nameIndex, m_objectName);
if (applyChanged)
@@ -394,25 +373,25 @@ int LayoutProperties::toPropertySheet(const QDesignerFormEditorInterface *core,
const int marginFlags[MarginCount] = { LeftMarginProperty, TopMarginProperty, RightMarginProperty, BottomMarginProperty};
for (int i = 0; i < MarginCount; i++)
if (mask & marginFlags[i])
- if (intValueToSheet(sheet, QLatin1String(marginPropertyNamesC[i]), m_margins[i], m_marginsChanged[i], applyChanged))
+ if (intValueToSheet(sheet, QLatin1StringView(marginPropertyNamesC[i]), m_margins[i], m_marginsChanged[i], applyChanged))
rc |= marginFlags[i];
const int spacingFlags[] = { SpacingProperty, HorizSpacingProperty, VertSpacingProperty};
for (int i = 0; i < SpacingsCount; i++)
if (mask & spacingFlags[i])
- if (intValueToSheet(sheet, QLatin1String(spacingPropertyNamesC[i]), m_spacings[i], m_spacingsChanged[i], applyChanged))
+ if (intValueToSheet(sheet, QLatin1StringView(spacingPropertyNamesC[i]), m_spacings[i], m_spacingsChanged[i], applyChanged))
rc |= spacingFlags[i];
// sizeConstraint
- variantPropertyToSheet(mask, SizeConstraintProperty, applyChanged, sheet, QLatin1String(sizeConstraintC), m_sizeConstraint, m_sizeConstraintChanged, &rc);
- variantPropertyToSheet(mask, FieldGrowthPolicyProperty, applyChanged, sheet, QLatin1String(fieldGrowthPolicyPropertyC), m_fieldGrowthPolicy, m_fieldGrowthPolicyChanged, &rc);
- variantPropertyToSheet(mask, RowWrapPolicyProperty, applyChanged, sheet, QLatin1String(rowWrapPolicyPropertyC), m_rowWrapPolicy, m_rowWrapPolicyChanged, &rc);
- variantPropertyToSheet(mask, LabelAlignmentProperty, applyChanged, sheet, QLatin1String(labelAlignmentPropertyC), m_labelAlignment, m_labelAlignmentChanged, &rc);
- variantPropertyToSheet(mask, FormAlignmentProperty, applyChanged, sheet, QLatin1String(formAlignmentPropertyC), m_formAlignment, m_formAlignmentChanged, &rc);
- variantPropertyToSheet(mask, BoxStretchProperty, applyChanged, sheet, QLatin1String(boxStretchPropertyC), m_boxStretch, m_boxStretchChanged, &rc);
- variantPropertyToSheet(mask, GridRowStretchProperty, applyChanged, sheet, QLatin1String(gridRowStretchPropertyC), m_gridRowStretch, m_gridRowStretchChanged, &rc);
- variantPropertyToSheet(mask, GridColumnStretchProperty, applyChanged, sheet, QLatin1String(gridColumnStretchPropertyC), m_gridColumnStretch, m_gridColumnStretchChanged, &rc);
- variantPropertyToSheet(mask, GridRowMinimumHeightProperty, applyChanged, sheet, QLatin1String(gridRowMinimumHeightPropertyC), m_gridRowMinimumHeight, m_gridRowMinimumHeightChanged, &rc);
- variantPropertyToSheet(mask, GridColumnMinimumWidthProperty, applyChanged, sheet, QLatin1String(gridColumnMinimumWidthPropertyC), m_gridColumnMinimumWidth, m_gridColumnMinimumWidthChanged, &rc);
+ variantPropertyToSheet(mask, SizeConstraintProperty, applyChanged, sheet, sizeConstraintC, m_sizeConstraint, m_sizeConstraintChanged, &rc);
+ variantPropertyToSheet(mask, FieldGrowthPolicyProperty, applyChanged, sheet, fieldGrowthPolicyPropertyC, m_fieldGrowthPolicy, m_fieldGrowthPolicyChanged, &rc);
+ variantPropertyToSheet(mask, RowWrapPolicyProperty, applyChanged, sheet, rowWrapPolicyPropertyC, m_rowWrapPolicy, m_rowWrapPolicyChanged, &rc);
+ variantPropertyToSheet(mask, LabelAlignmentProperty, applyChanged, sheet, labelAlignmentPropertyC, m_labelAlignment, m_labelAlignmentChanged, &rc);
+ variantPropertyToSheet(mask, FormAlignmentProperty, applyChanged, sheet, formAlignmentPropertyC, m_formAlignment, m_formAlignmentChanged, &rc);
+ variantPropertyToSheet(mask, BoxStretchProperty, applyChanged, sheet, boxStretchPropertyC, m_boxStretch, m_boxStretchChanged, &rc);
+ variantPropertyToSheet(mask, GridRowStretchProperty, applyChanged, sheet, gridRowStretchPropertyC, m_gridRowStretch, m_gridRowStretchChanged, &rc);
+ variantPropertyToSheet(mask, GridColumnStretchProperty, applyChanged, sheet, gridColumnStretchPropertyC, m_gridColumnStretch, m_gridColumnStretchChanged, &rc);
+ variantPropertyToSheet(mask, GridRowMinimumHeightProperty, applyChanged, sheet, gridRowMinimumHeightPropertyC, m_gridRowMinimumHeight, m_gridRowMinimumHeightChanged, &rc);
+ variantPropertyToSheet(mask, GridColumnMinimumWidthProperty, applyChanged, sheet, gridColumnMinimumWidthPropertyC, m_gridColumnMinimumWidth, m_gridColumnMinimumWidthChanged, &rc);
return rc;
}
@@ -534,11 +513,10 @@ QRect LayoutHelper::itemInfo(QLayout *lt, const QWidget *widget) const
QLayoutItem *BoxLayoutHelper::findItemOfWidget(const LayoutItemVector &lv, QWidget *w)
{
- const LayoutItemVector::const_iterator cend = lv.constEnd();
- for (LayoutItemVector::const_iterator it = lv.constBegin(); it != cend; ++it)
- if ( (*it)->widget() == w)
- return *it;
-
+ for (auto *l : lv) {
+ if (l->widget() == w)
+ return l;
+ }
return nullptr;
}
@@ -567,12 +545,11 @@ QRect LayoutHelper::itemInfo(QLayout *lt, const QWidget *widget) const
if (savedState == state(boxLayout))
return;
- const int count = savedState.size();
- Q_ASSERT(count == currentState.size());
+ Q_ASSERT(savedState.size() == currentState.size());
// Take items and reassemble in saved order
const LayoutItemVector items = disassembleLayout(boxLayout);
- for (int i = 0; i < count; i++) {
- QLayoutItem *item = findItemOfWidget(items, savedState[i]);
+ for (auto *w : savedState) {
+ QLayoutItem *item = findItemOfWidget(items, w);
Q_ASSERT(item);
boxLayout->addItem(item);
}
@@ -603,18 +580,15 @@ QRect LayoutHelper::itemInfo(QLayout *lt, const QWidget *widget) const
Occupied // Item bordering on it
};
// Horiontal, Vertical pair of state
- typedef QPair<DimensionCellState, DimensionCellState> CellState;
+ using CellState = std::pair<DimensionCellState, DimensionCellState>;
using CellStates = QList<CellState>;
// Figure out states of a cell and return as a flat vector of
// [column1, column2,...] (address as row * columnCount + col)
static CellStates cellStates(const QList<QRect> &rects, int numRows, int numColumns);
- typedef QMap<QWidget *, QRect> WidgetItemMap;
- typedef QMap<QWidget *, Qt::Alignment> WidgetAlignmentMap;
-
- WidgetItemMap widgetItemMap;
- WidgetAlignmentMap widgetAlignmentMap;
+ QHash<QWidget *, QRect> widgetItemMap;
+ QHash<QWidget *, Qt::Alignment> widgetAlignmentMap;
int rowCount = 0;
int colCount = 0;
@@ -629,8 +603,8 @@ QRect LayoutHelper::itemInfo(QLayout *lt, const QWidget *widget) const
str << "GridLayoutState: " << gs.rowCount << " rows x " << gs.colCount
<< " cols " << gs.widgetItemMap.size() << " items\n";
- const GridLayoutState::WidgetItemMap::const_iterator wcend = gs.widgetItemMap.constEnd();
- for (GridLayoutState::WidgetItemMap::const_iterator it = gs.widgetItemMap.constBegin(); it != wcend; ++it)
+ const auto wcend = gs.widgetItemMap.constEnd();
+ for (auto it = gs.widgetItemMap.constBegin(); it != wcend; ++it)
str << "Item " << it.key() << it.value() << '\n';
return str;
}
@@ -690,19 +664,18 @@ QRect LayoutHelper::itemInfo(QLayout *lt, const QWidget *widget) const
void GridLayoutState::applyToLayout(const QDesignerFormEditorInterface *core, QWidget *w) const
{
- using LayoutItemRectMap =QHash<QLayoutItem *, QRect>;
QGridLayout *grid = qobject_cast<QGridLayout *>(LayoutInfo::managedLayout(core, w));
Q_ASSERT(grid);
if (debugLayout)
qDebug() << ">GridLayoutState::applyToLayout" << *this << *grid;
const bool shrink = grid->rowCount() > rowCount || grid->columnCount() > colCount;
// Build a map of existing items to rectangles via widget map, delete spacers
- LayoutItemRectMap itemMap;
+ QHash<QLayoutItem *, QRect> itemMap;
while (grid->count()) {
QLayoutItem *item = grid->takeAt(0);
if (!LayoutInfo::isEmptyItem(item)) {
QWidget *itemWidget = item->widget();
- const WidgetItemMap::const_iterator it = widgetItemMap.constFind(itemWidget);
+ const auto it = widgetItemMap.constFind(itemWidget);
if (it == widgetItemMap.constEnd())
qFatal("GridLayoutState::applyToLayout: Attempt to apply to a layout that has a widget '%s'/'%s' added after saving the state.",
itemWidget->metaObject()->className(), itemWidget->objectName().toUtf8().constData());
@@ -717,8 +690,7 @@ QRect LayoutHelper::itemInfo(QLayout *lt, const QWidget *widget) const
grid = static_cast<QGridLayout*>(recreateManagedLayout(core, w, grid));
// Add widgets items
- const LayoutItemRectMap::const_iterator icend = itemMap.constEnd();
- for (LayoutItemRectMap::const_iterator it = itemMap.constBegin(); it != icend; ++it) {
+ for (auto it = itemMap.cbegin(), icend = itemMap.cend(); it != icend; ++it) {
const QRect info = it.value();
const Qt::Alignment alignment = widgetAlignmentMap.value(it.key()->widget(), {});
grid->addItem(it.key(), info.y(), info.x(), info.height(), info.width(), alignment);
@@ -1009,8 +981,7 @@ QRect LayoutHelper::itemInfo(QLayout *lt, const QWidget *widget) const
// ---------------- FormLayoutHelper
class FormLayoutHelper : public LayoutHelper {
public:
- typedef QPair<QWidget *, QWidget *> WidgetPair;
- using FormLayoutState = QList<WidgetPair>;
+ using FormLayoutState = QList<std::pair<QWidget *, QWidget *>>;
FormLayoutHelper() = default;
@@ -1103,7 +1074,7 @@ QRect LayoutHelper::itemInfo(QLayout *lt, const QWidget *widget) const
const int rowCount = lt->rowCount();
if (rowCount == 0)
return FormLayoutState();
- FormLayoutState rc(rowCount, WidgetPair(0, 0));
+ FormLayoutState rc(rowCount, {nullptr, nullptr});
const int count = lt->count();
int row, column, colspan;
for (int i = 0; i < count; i++) {
@@ -1174,7 +1145,7 @@ QRect LayoutHelper::itemInfo(QLayout *lt, const QWidget *widget) const
void FormLayoutHelper::simplify(const QDesignerFormEditorInterface *core, QWidget *widgetWithManagedLayout, const QRect &restrictionArea)
{
- using LayoutItemPair = QPair<QLayoutItem*, QLayoutItem*>;
+ using LayoutItemPair = std::pair<QLayoutItem*, QLayoutItem*>;
using LayoutItemPairs = QList<LayoutItemPair>;
QFormLayout *formLayout = qobject_cast<QFormLayout *>(LayoutInfo::managedLayout(core, widgetWithManagedLayout));
@@ -1299,7 +1270,7 @@ void QLayoutSupport::setInsertMode(InsertMode im)
m_currentInsertMode = im;
}
-void QLayoutSupport::setCurrentCell(const QPair<int, int> &cell)
+void QLayoutSupport::setCurrentCell(const std::pair<int, int> &cell)
{
m_currentCell = cell;
}
@@ -1537,7 +1508,7 @@ class QBoxLayoutSupport: public QLayoutSupport
public:
QBoxLayoutSupport(QDesignerFormWindowInterface *formWindow, QWidget *widget, Qt::Orientation orientation, QObject *parent = nullptr);
- void insertWidget(QWidget *widget, const QPair<int, int> &cell) override;
+ void insertWidget(QWidget *widget, const std::pair<int, int> &cell) override;
void removeWidget(QWidget *widget) override;
void simplify() override {}
void insertRow(int /*row*/) override {}
@@ -1563,7 +1534,7 @@ void QBoxLayoutSupport::removeWidget(QWidget *widget)
// of higher index, which happens as follows:
// Drag start: The widget is hidden
// Drop: Current cell is stored, widget is removed and re-added, causing an index offset that needs to be compensated
- QPair<int, int> currCell = currentCell();
+ std::pair<int, int> currCell = currentCell();
switch (m_orientation) {
case Qt::Horizontal:
if (currCell.second > 0 && index < currCell.second ) {
@@ -1590,10 +1561,10 @@ QBoxLayoutSupport::QBoxLayoutSupport(QDesignerFormWindowInterface *formWindow, Q
void QBoxLayoutSupport::setCurrentCellFromIndicatorOnEmptyCell(int index)
{
qDebug() << "QBoxLayoutSupport::setCurrentCellFromIndicatorOnEmptyCell(): Warning: found a fake spacer inside a vbox layout at " << index;
- setCurrentCell(qMakePair(0, 0));
+ setCurrentCell({0, 0});
}
-void QBoxLayoutSupport::insertWidget(QWidget *widget, const QPair<int, int> &cell)
+void QBoxLayoutSupport::insertWidget(QWidget *widget, const std::pair<int, int> &cell)
{
switch (m_orientation) {
case Qt::Horizontal:
@@ -1607,11 +1578,10 @@ void QBoxLayoutSupport::insertWidget(QWidget *widget, const QPair<int, int> &cel
void QBoxLayoutSupport::setCurrentCellFromIndicator(Qt::Orientation indicatorOrientation, int index, int increment)
{
- if (m_orientation == Qt::Horizontal && indicatorOrientation == Qt::Vertical) {
- setCurrentCell(qMakePair(0, index + increment));
- } else if (m_orientation == Qt::Vertical && indicatorOrientation == Qt::Horizontal) {
- setCurrentCell(qMakePair(index + increment, 0));
- }
+ if (m_orientation == Qt::Horizontal && indicatorOrientation == Qt::Vertical)
+ setCurrentCell({0, index + increment});
+ else if (m_orientation == Qt::Vertical && indicatorOrientation == Qt::Horizontal)
+ setCurrentCell({index + increment, 0});
}
bool QBoxLayoutSupport::supportsIndicatorOrientation(Qt::Orientation indicatorOrientation) const
@@ -1669,7 +1639,7 @@ public:
GridLikeLayoutSupportBase(QDesignerFormWindowInterface *formWindow, QWidget *widget, LayoutHelper *helper, QObject *parent = nullptr) :
QLayoutSupport(formWindow, widget, helper, parent) {}
- void insertWidget(QWidget *widget, const QPair<int, int> &cell) override;
+ void insertWidget(QWidget *widget, const std::pair<int, int> &cell) override;
void removeWidget(QWidget *widget) override { helper()->removeWidget(layout(), widget); }
int findItemAt(int row, int column) const override;
using QLayoutSupport::findItemAt;
@@ -1701,7 +1671,7 @@ void GridLikeLayoutSupportBase<GridLikeLayout>::setCurrentCellFromIndicatorOnEmp
int row, column, rowspan, colspan;
getGridItemPosition(grid, index, &row, &column, &rowspan, &colspan);
- setCurrentCell(qMakePair(row, column));
+ setCurrentCell({row, column});
}
template <class GridLikeLayout>
@@ -1713,7 +1683,7 @@ void GridLikeLayoutSupportBase<GridLikeLayout>::setCurrentCellFromIndicator(Qt::
int row = info.top();
int column = increment ? info.right() + 1 : info.left();
checkCellForInsertion(&row, &column);
- setCurrentCell(qMakePair(row , column));
+ setCurrentCell({row, column});
}
break;
case Qt::Horizontal: {
@@ -1721,14 +1691,14 @@ void GridLikeLayoutSupportBase<GridLikeLayout>::setCurrentCellFromIndicator(Qt::
int row = increment ? info.bottom() + 1 : info.top();
int column = info.left();
checkCellForInsertion(&row, &column);
- setCurrentCell(qMakePair(row, column));
+ setCurrentCell({row, column});
}
break;
}
}
template <class GridLikeLayout>
-void GridLikeLayoutSupportBase<GridLikeLayout>::insertWidget(QWidget *widget, const QPair<int, int> &cell)
+void GridLikeLayoutSupportBase<GridLikeLayout>::insertWidget(QWidget *widget, const std::pair<int, int> &cell)
{
helper()->insertWidget(layout(), QRect(cell.second, cell.first, 1, 1), widget);
}
diff --git a/src/designer/src/lib/shared/qlayout_widget_p.h b/src/designer/src/lib/shared/qlayout_widget_p.h
index 1efe3a905..16185d5ec 100644
--- a/src/designer/src/lib/shared/qlayout_widget_p.h
+++ b/src/designer/src/lib/shared/qlayout_widget_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -182,7 +157,7 @@ public:
InsertMode currentInsertMode() const override { return m_currentInsertMode; }
- QPair<int, int> currentCell() const override { return m_currentCell; }
+ std::pair<int, int> currentCell() const override { return m_currentCell; }
int findItemAt(const QPoint &pos) const override;
int indexOf(QWidget *widget) const override;
@@ -201,6 +176,7 @@ public:
// grid helpers: find item index
static int findItemAt(QGridLayout *, int row, int column);
+ using QDesignerLayoutDecorationExtension::findItemAt;
// grid helpers: Quick check whether simplify should be enabled for grids. May return false positives.
static bool canSimplifyQuickCheck(const QGridLayout *);
static bool canSimplifyQuickCheck(const QFormLayout *fl);
@@ -224,7 +200,7 @@ protected:
QWidget *widget() const { return m_widget; }
void setInsertMode(InsertMode im);
- void setCurrentCell(const QPair<int, int> &cell);
+ void setCurrentCell(const std::pair<int, int> &cell);
private:
enum Indicator { LeftIndicator, TopIndicator, RightIndicator, BottomIndicator, NumIndicators };
@@ -239,7 +215,7 @@ private:
QPointer<QWidget> m_indicators[NumIndicators];
int m_currentIndex;
InsertMode m_currentInsertMode;
- QPair<int, int> m_currentCell;
+ std::pair<int, int> m_currentCell;
};
} // namespace qdesigner_internal
diff --git a/src/designer/src/lib/shared/qsimpleresource.cpp b/src/designer/src/lib/shared/qsimpleresource.cpp
index eca53c216..2b0ef4a07 100644
--- a/src/designer/src/lib/shared/qsimpleresource.cpp
+++ b/src/designer/src/lib/shared/qsimpleresource.cpp
@@ -1,34 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qsimpleresource_p.h"
#include "widgetfactory_p.h"
#include "widgetdatabase_p.h"
+#include <qdesigner_utils_p.h>
#include <QtDesigner/private/properties_p.h>
#include <QtDesigner/private/ui4_p.h>
@@ -50,6 +26,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace qdesigner_internal {
bool QSimpleResource::m_warningsEnabled = true;
@@ -58,10 +36,7 @@ QSimpleResource::QSimpleResource(QDesignerFormEditorInterface *core) :
QAbstractFormBuilder(),
m_core(core)
{
- QString workingDirectory = QDir::homePath();
- workingDirectory += QDir::separator();
- workingDirectory += QStringLiteral(".designer");
- setWorkingDirectory(QDir(workingDirectory));
+ setWorkingDirectory(QDir(dataDirectory()));
}
QSimpleResource::~QSimpleResource() = default;
@@ -160,16 +135,16 @@ void QSimpleResource::addCustomWidgetsToWidgetDatabase(const QDesignerFormEditor
QList<DomCustomWidget *> &custom_widget_list)
{
QDesignerWidgetDataBaseInterface *db = core->widgetDataBase();
- for (int i=0; i < custom_widget_list.size(); ) {
+ for (qsizetype i = 0; i < custom_widget_list.size(); ) {
bool classInserted = false;
- DomCustomWidget *custom_widget = custom_widget_list[i];
+ DomCustomWidget *custom_widget = custom_widget_list.at(i);
const QString customClassName = custom_widget->elementClass();
const QString base_class = custom_widget->elementExtends();
QString includeFile;
IncludeType includeType = IncludeLocal;
if (const DomHeader *header = custom_widget->elementHeader()) {
includeFile = header->text();
- if (header->hasAttributeLocation() && header->attributeLocation() == QStringLiteral("global"))
+ if (header->hasAttributeLocation() && header->attributeLocation() == "global"_L1)
includeType = IncludeGlobal;
}
const bool domIsContainer = custom_widget->elementContainer();
@@ -230,8 +205,8 @@ void QSimpleResource::handleDomCustomWidgets(const QDesignerFormEditorInterface
}
// Oops, there are classes left whose base class could not be found.
// Default them to QWidget with warnings.
- const QString fallBackBaseClass = QStringLiteral("QWidget");
- for (DomCustomWidget *custom_widget : qAsConst(custom_widget_list)) {
+ const QString fallBackBaseClass = u"QWidget"_s;
+ for (DomCustomWidget *custom_widget : std::as_const(custom_widget_list)) {
const QString customClassName = custom_widget->elementClass();
const QString base_class = custom_widget->elementExtends();
qDebug() << "** WARNING The base class " << base_class << " of the custom widget class " << customClassName
diff --git a/src/designer/src/lib/shared/qsimpleresource_p.h b/src/designer/src/lib/shared/qsimpleresource_p.h
index 2c8ae1456..37b9f5c04 100644
--- a/src/designer/src/lib/shared/qsimpleresource_p.h
+++ b/src/designer/src/lib/shared/qsimpleresource_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/qtresourceeditordialog.cpp b/src/designer/src/lib/shared/qtresourceeditordialog.cpp
index a1c15e708..589363e54 100644
--- a/src/designer/src/lib/shared/qtresourceeditordialog.cpp
+++ b/src/designer/src/lib/shared/qtresourceeditordialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qtresourceeditordialog_p.h"
#include "ui_qtresourceeditordialog.h"
@@ -36,6 +11,7 @@
#include <QtDesigner/abstractsettings.h>
#include <QtDesigner/abstractformeditor.h>
+#include <QtCore/qcompare.h>
#include <QtCore/qfileinfo.h>
#include <QtCore/qdir.h>
#include <QtCore/qcoreapplication.h>
@@ -49,15 +25,17 @@
QT_BEGIN_NAMESPACE
-static const char *rccRootTag = "RCC";
-static const char *rccTag = "qresource";
-static const char *rccFileTag = "file";
-static const char *rccAliasAttribute = "alias";
-static const char *rccPrefixAttribute = "prefix";
-static const char *rccLangAttribute = "lang";
-static const char *SplitterPosition = "SplitterPosition";
-static const char *Geometry = "Geometry";
-static const char *QrcDialogC = "QrcDialog";
+using namespace Qt::StringLiterals;
+
+static constexpr auto rccRootTag = "RCC"_L1;
+static constexpr auto rccTag = "qresource"_L1;
+static constexpr auto rccFileTag = "file"_L1;
+static constexpr auto rccAliasAttribute = "alias"_L1;
+static constexpr auto rccPrefixAttribute = "prefix"_L1;
+static constexpr auto rccLangAttribute = "lang"_L1;
+static constexpr auto SplitterPosition = "SplitterPosition"_L1;
+static constexpr auto ResourceEditorGeometry = "Geometry"_L1;
+static constexpr auto QrcDialogC = "QrcDialog"_L1;
static QString msgOverwrite(const QString &fname)
{
@@ -69,48 +47,71 @@ static QString msgTagMismatch(const QString &got, const QString &expected)
return QCoreApplication::translate("QtResourceEditorDialog", "The file does not appear to be a resource file; element '%1' was found where '%2' was expected.").arg(got, expected);
}
-namespace {
+namespace qdesigner_internal {
// below 3 data classes should be derived from QSharedData and made implicit shared class
-struct QtResourceFileData {
+struct QtResourceFileData
+{
QString path;
QString alias;
- bool operator==(const QtResourceFileData &other) const
- { return path == other.path && alias == other.alias; }
+
+ friend bool comparesEqual(const QtResourceFileData &lhs,
+ const QtResourceFileData &rhs) noexcept
+ {
+ return lhs.path == rhs.path && lhs.alias == rhs.alias;
+ }
+ Q_DECLARE_EQUALITY_COMPARABLE(QtResourceFileData)
};
-struct QtResourcePrefixData {
+struct QtResourcePrefixData
+{
QString prefix;
QString language;
QList<QtResourceFileData> resourceFileList;
- bool operator==(const QtResourcePrefixData &other) const
+
+ friend bool comparesEqual(const QtResourcePrefixData &lhs,
+ const QtResourcePrefixData &rhs) noexcept
{
- return prefix == other.prefix && language == other.language
- && resourceFileList == other.resourceFileList;
+ return lhs.prefix == rhs.prefix && lhs.language == rhs.language
+ && lhs.resourceFileList == rhs.resourceFileList;
}
+ Q_DECLARE_EQUALITY_COMPARABLE(QtResourcePrefixData)
};
-struct QtQrcFileData {
+struct QtQrcFileData
+{
QString qrcPath;
QList<QtResourcePrefixData> resourceList;
- bool operator==(const QtQrcFileData &other) const
- { return qrcPath == other.qrcPath && resourceList == other.resourceList; }
+
+ friend bool comparesEqual(const QtQrcFileData &lhs,
+ const QtQrcFileData &rhs) noexcept
+ {
+ return lhs.qrcPath == rhs.qrcPath && lhs.resourceList == rhs.resourceList;
+ }
+ Q_DECLARE_EQUALITY_COMPARABLE(QtQrcFileData)
};
-bool loadResourceFileData(const QDomElement &fileElem, QtResourceFileData *fileData, QString *errorMessage)
+} // namespace qdesigner_internal
+
+using QtResourcePrefixData = qdesigner_internal::QtResourcePrefixData;
+using QtResourceFileData = qdesigner_internal::QtResourceFileData;
+using QtQrcFileData = qdesigner_internal::QtQrcFileData;
+
+static bool loadResourceFileData(const QDomElement &fileElem, QtResourceFileData *fileData,
+ QString *errorMessage)
{
if (!fileData)
return false;
- if (fileElem.tagName() != QLatin1String(rccFileTag)) {
- *errorMessage = msgTagMismatch(fileElem.tagName(), QLatin1String(rccFileTag));
+ if (fileElem.tagName() != rccFileTag) {
+ *errorMessage = msgTagMismatch(fileElem.tagName(), rccFileTag);
return false;
}
QtResourceFileData &data = *fileData;
data.path = fileElem.text();
- data.alias = fileElem.attribute(QLatin1String(rccAliasAttribute));
+ data.alias = fileElem.attribute(rccAliasAttribute);
return true;
}
@@ -120,15 +121,15 @@ static bool loadResourcePrefixData(const QDomElement &prefixElem, QtResourcePref
if (!prefixData)
return false;
- if (prefixElem.tagName() != QLatin1String(rccTag)) {
- *errorMessage = msgTagMismatch(prefixElem.tagName(), QLatin1String(rccTag));
+ if (prefixElem.tagName() != rccTag) {
+ *errorMessage = msgTagMismatch(prefixElem.tagName(), rccTag);
return false;
}
QtResourcePrefixData &data = *prefixData;
- data.prefix = prefixElem.attribute(QLatin1String(rccPrefixAttribute));
- data.language = prefixElem.attribute(QLatin1String(rccLangAttribute));
+ data.prefix = prefixElem.attribute(rccPrefixAttribute);
+ data.language = prefixElem.attribute(rccLangAttribute);
QDomElement fileElem = prefixElem.firstChildElement();
while (!fileElem.isNull()) {
QtResourceFileData fileData;
@@ -148,8 +149,8 @@ static bool loadQrcFileData(const QDomDocument &doc, const QString &path, QtQrcF
QtQrcFileData &data = *qrcFileData;
QDomElement docElem = doc.documentElement();
- if (docElem.tagName() != QLatin1String(rccRootTag)) {
- *errorMessage = msgTagMismatch(docElem.tagName(), QLatin1String(rccRootTag));
+ if (docElem.tagName() != rccRootTag) {
+ *errorMessage = msgTagMismatch(docElem.tagName(), rccRootTag);
return false;
}
@@ -167,11 +168,11 @@ static bool loadQrcFileData(const QDomDocument &doc, const QString &path, QtQrcF
return true;
}
-QDomElement saveResourceFileData(QDomDocument &doc, const QtResourceFileData &fileData)
+static QDomElement saveResourceFileData(QDomDocument &doc, const QtResourceFileData &fileData)
{
- QDomElement fileElem = doc.createElement(QLatin1String(rccFileTag));
+ QDomElement fileElem = doc.createElement(rccFileTag);
if (!fileData.alias.isEmpty())
- fileElem.setAttribute(QLatin1String(rccAliasAttribute), fileData.alias);
+ fileElem.setAttribute(rccAliasAttribute, fileData.alias);
QDomText textElem = doc.createTextNode(fileData.path);
fileElem.appendChild(textElem);
@@ -179,13 +180,13 @@ QDomElement saveResourceFileData(QDomDocument &doc, const QtResourceFileData &fi
return fileElem;
}
-QDomElement saveResourcePrefixData(QDomDocument &doc, const QtResourcePrefixData &prefixData)
+static QDomElement saveResourcePrefixData(QDomDocument &doc, const QtResourcePrefixData &prefixData)
{
- QDomElement prefixElem = doc.createElement(QLatin1String(rccTag));
+ QDomElement prefixElem = doc.createElement(rccTag);
if (!prefixData.prefix.isEmpty())
- prefixElem.setAttribute(QLatin1String(rccPrefixAttribute), prefixData.prefix);
+ prefixElem.setAttribute(rccPrefixAttribute, prefixData.prefix);
if (!prefixData.language.isEmpty())
- prefixElem.setAttribute(QLatin1String(rccLangAttribute), prefixData.language);
+ prefixElem.setAttribute(rccLangAttribute, prefixData.language);
for (const QtResourceFileData &rfd : prefixData.resourceFileList) {
QDomElement fileElem = saveResourceFileData(doc, rfd);
@@ -195,10 +196,10 @@ QDomElement saveResourcePrefixData(QDomDocument &doc, const QtResourcePrefixData
return prefixElem;
}
-QDomDocument saveQrcFileData(const QtQrcFileData &qrcFileData)
+static QDomDocument saveQrcFileData(const QtQrcFileData &qrcFileData)
{
QDomDocument doc;
- QDomElement docElem = doc.createElement(QLatin1String(rccRootTag));
+ QDomElement docElem = doc.createElement(rccRootTag);
for (const QtResourcePrefixData &prefixData : qrcFileData.resourceList) {
QDomElement prefixElem = saveResourcePrefixData(doc, prefixData);
@@ -208,6 +209,9 @@ QDomDocument saveQrcFileData(const QtQrcFileData &qrcFileData)
return doc;
}
+
+namespace qdesigner_internal {
+
// --------------- QtResourceFile
class QtResourceFile {
public:
@@ -334,9 +338,9 @@ private:
QList<QtQrcFile *> m_qrcFiles;
QMap<QString, QtQrcFile *> m_pathToQrc;
- QMap<QtQrcFile *, bool> m_qrcFileToExists;
- QMap<QtResourcePrefix *, QtQrcFile *> m_prefixToQrc;
- QMap<QtResourceFile *, QtResourcePrefix *> m_fileToPrefix;
+ QHash<QtQrcFile *, bool> m_qrcFileToExists;
+ QHash<QtResourcePrefix *, QtQrcFile *> m_prefixToQrc;
+ QHash<QtResourceFile *, QtResourcePrefix *> m_fileToPrefix;
QMap<QString, QList<QtResourceFile *> > m_fullPathToResourceFiles;
QMap<QString, QIcon> m_fullPathToIcon;
QMap<QString, bool> m_fullPathToExists;
@@ -784,9 +788,12 @@ void QtQrcManager::removeResourceFile(QtResourceFile *resourceFile)
delete resourceFile;
}
+} // namespace qdesigner_internal
-
-}
+using QtResourceFile = qdesigner_internal::QtResourceFile;
+using QtResourcePrefix = qdesigner_internal::QtResourcePrefix;
+using QtQrcFile = qdesigner_internal::QtQrcFile;
+using QtQrcManager = qdesigner_internal::QtQrcManager;
// ----------------- QtResourceEditorDialogPrivate
class QtResourceEditorDialogPrivate
@@ -859,16 +866,16 @@ public:
QtQrcManager *m_qrcManager = nullptr;
QList<QtQrcFileData> m_initialState;
- QMap<QtQrcFile *, QListWidgetItem *> m_qrcFileToItem;
- QMap<QListWidgetItem *, QtQrcFile *> m_itemToQrcFile;
- QMap<QtResourcePrefix *, QStandardItem *> m_resourcePrefixToPrefixItem;
- QMap<QtResourcePrefix *, QStandardItem *> m_resourcePrefixToLanguageItem;
- QMap<QStandardItem *, QtResourcePrefix *> m_prefixItemToResourcePrefix;
- QMap<QStandardItem *, QtResourcePrefix *> m_languageItemToResourcePrefix;
- QMap<QtResourceFile *, QStandardItem *> m_resourceFileToPathItem;
- QMap<QtResourceFile *, QStandardItem *> m_resourceFileToAliasItem;
- QMap<QStandardItem *, QtResourceFile *> m_pathItemToResourceFile;
- QMap<QStandardItem *, QtResourceFile *> m_aliasItemToResourceFile;
+ QHash<QtQrcFile *, QListWidgetItem *> m_qrcFileToItem;
+ QHash<QListWidgetItem *, QtQrcFile *> m_itemToQrcFile;
+ QHash<QtResourcePrefix *, QStandardItem *> m_resourcePrefixToPrefixItem;
+ QHash<QtResourcePrefix *, QStandardItem *> m_resourcePrefixToLanguageItem;
+ QHash<QStandardItem *, QtResourcePrefix *> m_prefixItemToResourcePrefix;
+ QHash<QStandardItem *, QtResourcePrefix *> m_languageItemToResourcePrefix;
+ QHash<QtResourceFile *, QStandardItem *> m_resourceFileToPathItem;
+ QHash<QtResourceFile *, QStandardItem *> m_resourceFileToAliasItem;
+ QHash<QStandardItem *, QtResourceFile *> m_pathItemToResourceFile;
+ QHash<QStandardItem *, QtResourceFile *> m_aliasItemToResourceFile;
bool m_ignoreCurrentChanged = false;
bool m_firstQrcFileDialog = true;
@@ -1186,7 +1193,7 @@ void QtResourceEditorDialogPrivate::slotCurrentQrcFileChanged(QListWidgetItem *i
return;
if (m_currentQrcFile) {
- QMap<QtResourcePrefix *, QStandardItem *> currentPrefixList = m_resourcePrefixToPrefixItem;
+ QHash<QtResourcePrefix *, QStandardItem *> currentPrefixList = m_resourcePrefixToPrefixItem;
for (auto it = currentPrefixList.cbegin(), end = currentPrefixList.cend(); it != end; ++it) {
QtResourcePrefix *resourcePrefix = it.key();
const auto currentResourceFiles = resourcePrefix->resourceFiles();
@@ -1312,8 +1319,6 @@ void QtResourceEditorDialogPrivate::slotTreeViewItemChanged(QStandardItem *item)
QString QtResourceEditorDialogPrivate::getSaveFileNameWithExtension(QWidget *parent,
const QString &title, QString dir, const QString &filter, const QString &extension) const
{
- const QChar dot = QLatin1Char('.');
-
QString saveFile;
while (true) {
saveFile = m_dlgGui->getSaveFileName(parent, title, dir, filter, nullptr, QFileDialog::DontConfirmOverwrite);
@@ -1321,10 +1326,8 @@ QString QtResourceEditorDialogPrivate::getSaveFileNameWithExtension(QWidget *par
return saveFile;
const QFileInfo fInfo(saveFile);
- if (fInfo.suffix().isEmpty() && !fInfo.fileName().endsWith(dot)) {
- saveFile += dot;
- saveFile += extension;
- }
+ if (fInfo.suffix().isEmpty() && !fInfo.fileName().endsWith(u'.'))
+ saveFile += u'.' + extension;
const QFileInfo fi(saveFile);
if (!fi.exists())
@@ -1352,7 +1355,7 @@ void QtResourceEditorDialogPrivate::slotNewQrcFile()
QCoreApplication::translate("QtResourceEditorDialog", "New Resource File"),
m_firstQrcFileDialog ? qrcStartDirectory() : QString(),
QCoreApplication::translate("QtResourceEditorDialog", "Resource files (*.qrc)"),
- QStringLiteral("qrc"));
+ u"qrc"_s);
if (qrcPath.isEmpty())
return;
@@ -1543,7 +1546,7 @@ void QtResourceEditorDialogPrivate::slotAddFiles()
QtResourceFile *nextResourceFile = m_qrcManager->nextResourceFile(currentResourceFile);
if (!currentResourceFile) {
const auto resourceFiles = currentResourcePrefix->resourceFiles();
- if (resourceFiles.count() > 0)
+ if (!resourceFiles.isEmpty())
nextResourceFile = resourceFiles.first();
}
@@ -1552,7 +1555,7 @@ void QtResourceEditorDialogPrivate::slotAddFiles()
const QDir dir(fi.absolutePath());
for (QString resourcePath : resourcePaths) {
QString relativePath = dir.relativeFilePath(resourcePath);
- if (relativePath.startsWith(QStringLiteral(".."))) {
+ if (relativePath.startsWith(".."_L1)) {
QMessageBox msgBox(QMessageBox::Warning,
QCoreApplication::translate("QtResourceEditorDialog", "Incorrect Path"),
outOfPathWarning(relativePath), QMessageBox::Cancel);
@@ -1667,7 +1670,7 @@ void QtResourceEditorDialogPrivate::slotClonePrefix()
QDir dir(fi.dir());
QString oldSuffix = fi.completeSuffix();
if (!oldSuffix.isEmpty())
- oldSuffix = QLatin1Char('.') + oldSuffix;
+ oldSuffix = u'.' + oldSuffix;
const QString newBaseName = fi.baseName() + suffix + oldSuffix;
const QString newPath = QDir::cleanPath(dir.filePath(newBaseName));
m_qrcManager->insertResourceFile(newResourcePrefix, newPath,
@@ -1765,7 +1768,7 @@ QString QtResourceEditorDialogPrivate::browseForNewLocation(const QString &resou
QCoreApplication::translate("QtResourceEditorDialog", "Copy As"),
initialPath);
QString relativePath = rootDir.relativeFilePath(newPath);
- if (relativePath.startsWith(QStringLiteral(".."))) {
+ if (relativePath.startsWith(".."_L1)) {
if (warning(QCoreApplication::translate("QtResourceEditorDialog", "Copy As"),
QCoreApplication::translate("QtResourceEditorDialog", "<p>The selected file:</p>"
"<p>%1</p><p>is outside of the current resource file's directory:</p><p>%2</p>"
@@ -1827,16 +1830,15 @@ bool QtResourceEditorDialogPrivate::loadQrcFile(const QString &path, QtQrcFileDa
file.close();
QDomDocument doc;
- int errLine, errCol;
- if (!doc.setContent(dataArray, errorMessage, &errLine, &errCol)) {
+ if (QDomDocument::ParseResult result = doc.setContent(dataArray)) {
+ return loadQrcFileData(doc, path, qrcFileData, errorMessage);
+ } else {
*errorMessage =
QCoreApplication::translate("QtResourceEditorDialog",
"A parse error occurred at line %1, column %2 of %3:\n%4")
- .arg(errLine).arg(errCol).arg(path, *errorMessage);
+ .arg(result.errorLine).arg(result.errorColumn).arg(path, result.errorMessage);
return false;
}
-
- return loadQrcFileData(doc, path, qrcFileData, errorMessage);
}
bool QtResourceEditorDialogPrivate::saveQrcFile(const QtQrcFileData &qrcFileData)
@@ -1881,41 +1883,42 @@ QtResourceEditorDialog::QtResourceEditorDialog(QDesignerFormEditorInterface *cor
d_ptr->m_dlgGui = dlgGui;
d_ptr->m_core = core;
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
setWindowTitle(tr("Edit Resources"));
- connect(d_ptr->m_qrcManager, SIGNAL(qrcFileInserted(QtQrcFile*)),
- this, SLOT(slotQrcFileInserted(QtQrcFile*)));
- connect(d_ptr->m_qrcManager, SIGNAL(qrcFileMoved(QtQrcFile*,QtQrcFile*)),
- this, SLOT(slotQrcFileMoved(QtQrcFile*)));
- connect(d_ptr->m_qrcManager, SIGNAL(qrcFileRemoved(QtQrcFile*)),
- this, SLOT(slotQrcFileRemoved(QtQrcFile*)));
- connect(d_ptr->m_qrcManager, SIGNAL(resourcePrefixInserted(QtResourcePrefix*)),
- this, SLOT(slotResourcePrefixInserted(QtResourcePrefix*)));
- connect(d_ptr->m_qrcManager, SIGNAL(resourcePrefixMoved(QtResourcePrefix*,QtResourcePrefix*)),
- this, SLOT(slotResourcePrefixMoved(QtResourcePrefix*)));
- connect(d_ptr->m_qrcManager, SIGNAL(resourcePrefixChanged(QtResourcePrefix*,QString)),
- this, SLOT(slotResourcePrefixChanged(QtResourcePrefix*)));
- connect(d_ptr->m_qrcManager, SIGNAL(resourceLanguageChanged(QtResourcePrefix*,QString)),
- this, SLOT(slotResourceLanguageChanged(QtResourcePrefix*)));
- connect(d_ptr->m_qrcManager, SIGNAL(resourcePrefixRemoved(QtResourcePrefix*)),
- this, SLOT(slotResourcePrefixRemoved(QtResourcePrefix*)));
- connect(d_ptr->m_qrcManager, SIGNAL(resourceFileInserted(QtResourceFile*)),
- this, SLOT(slotResourceFileInserted(QtResourceFile*)));
- connect(d_ptr->m_qrcManager, SIGNAL(resourceFileMoved(QtResourceFile*,QtResourceFile*)),
- this, SLOT(slotResourceFileMoved(QtResourceFile*)));
- connect(d_ptr->m_qrcManager, SIGNAL(resourceAliasChanged(QtResourceFile*,QString)),
- this, SLOT(slotResourceAliasChanged(QtResourceFile*)));
- connect(d_ptr->m_qrcManager, SIGNAL(resourceFileRemoved(QtResourceFile*)),
- this, SLOT(slotResourceFileRemoved(QtResourceFile*)));
-
- QIcon upIcon = qdesigner_internal::createIconSet(QString::fromUtf8("up.png"));
- QIcon downIcon = qdesigner_internal::createIconSet(QString::fromUtf8("down.png"));
- QIcon minusIcon = qdesigner_internal::createIconSet(QString::fromUtf8("minus-16.png"));
- QIcon newIcon = qdesigner_internal::createIconSet(QString::fromUtf8("filenew-16.png"));
- QIcon openIcon = qdesigner_internal::createIconSet(QString::fromUtf8("fileopen-16.png"));
- QIcon removeIcon = qdesigner_internal::createIconSet(QString::fromUtf8("editdelete-16.png"));
- QIcon addPrefixIcon = qdesigner_internal::createIconSet(QString::fromUtf8("prefix-add.png"));
+ connect(d_ptr->m_qrcManager, &QtQrcManager::qrcFileInserted,
+ this, [this](QtQrcFile *file) { d_ptr->slotQrcFileInserted(file); });
+ connect(d_ptr->m_qrcManager, &QtQrcManager::qrcFileMoved,
+ this, [this](QtQrcFile *file) { d_ptr->slotQrcFileMoved(file); });
+ connect(d_ptr->m_qrcManager, &QtQrcManager::qrcFileRemoved,
+ this, [this](QtQrcFile *file) { d_ptr->slotQrcFileRemoved(file); });
+
+ connect(d_ptr->m_qrcManager, &QtQrcManager::resourcePrefixInserted,
+ this, [this](QtResourcePrefix *prefix) { d_ptr->slotResourcePrefixInserted(prefix); });
+ connect(d_ptr->m_qrcManager, &QtQrcManager::resourcePrefixMoved,
+ this, [this](QtResourcePrefix *prefix) { d_ptr->slotResourcePrefixMoved(prefix); });
+ connect(d_ptr->m_qrcManager, &QtQrcManager::resourcePrefixChanged,
+ this, [this](QtResourcePrefix *prefix) { d_ptr->slotResourcePrefixChanged(prefix); });
+ connect(d_ptr->m_qrcManager, &QtQrcManager::resourceLanguageChanged,
+ this, [this](QtResourcePrefix *prefix) { d_ptr->slotResourceLanguageChanged(prefix); });
+ connect(d_ptr->m_qrcManager, &QtQrcManager::resourcePrefixRemoved,
+ this, [this](QtResourcePrefix *prefix) { d_ptr->slotResourcePrefixRemoved(prefix); });
+
+ connect(d_ptr->m_qrcManager, &QtQrcManager::resourceFileInserted,
+ this, [this](QtResourceFile *file) { d_ptr->slotResourceFileInserted(file); });
+ connect(d_ptr->m_qrcManager, &QtQrcManager::resourceFileMoved,
+ this, [this](QtResourceFile *file) { d_ptr->slotResourceFileMoved(file); });
+ connect(d_ptr->m_qrcManager, &QtQrcManager::resourceAliasChanged,
+ this, [this](QtResourceFile *file) { d_ptr->slotResourceAliasChanged(file); });
+ connect(d_ptr->m_qrcManager, &QtQrcManager::resourceFileRemoved,
+ this, [this](QtResourceFile *file) { d_ptr->slotResourceFileRemoved(file); });
+
+ QIcon upIcon = qdesigner_internal::createIconSet("up.png"_L1);
+ QIcon downIcon = qdesigner_internal::createIconSet("down.png"_L1);
+ QIcon minusIcon = qdesigner_internal::createIconSet("minus-16.png"_L1);
+ QIcon newIcon = qdesigner_internal::createIconSet("filenew-16.png"_L1);
+ QIcon openIcon = qdesigner_internal::createIconSet("fileopen-16.png"_L1);
+ QIcon removeIcon = qdesigner_internal::createIconSet("editdelete-16.png"_L1);
+ QIcon addPrefixIcon = qdesigner_internal::createIconSet("prefix-add.png"_L1);
d_ptr->m_newQrcFileAction = new QAction(newIcon, tr("New..."), this);
d_ptr->m_newQrcFileAction->setToolTip(tr("New Resource File"));
@@ -1944,27 +1947,41 @@ QtResourceEditorDialog::QtResourceEditorDialog(QDesignerFormEditorInterface *cor
d_ptr->m_ui.addResourceButton->setDefaultAction(d_ptr->m_addResourceFileAction);
d_ptr->m_ui.removeResourceButton->setDefaultAction(d_ptr->m_removeAction);
- connect(d_ptr->m_newQrcFileAction, SIGNAL(triggered()), this, SLOT(slotNewQrcFile()));
- connect(d_ptr->m_importQrcFileAction, SIGNAL(triggered()), this, SLOT(slotImportQrcFile()));
- connect(d_ptr->m_removeQrcFileAction, SIGNAL(triggered()), this, SLOT(slotRemoveQrcFile()));
- connect(d_ptr->m_moveUpQrcFileAction, SIGNAL(triggered()), this, SLOT(slotMoveUpQrcFile()));
- connect(d_ptr->m_moveDownQrcFileAction, SIGNAL(triggered()), this, SLOT(slotMoveDownQrcFile()));
-
- connect(d_ptr->m_newPrefixAction, SIGNAL(triggered()), this, SLOT(slotNewPrefix()));
- connect(d_ptr->m_addResourceFileAction, SIGNAL(triggered()), this, SLOT(slotAddFiles()));
- connect(d_ptr->m_changePrefixAction, SIGNAL(triggered()), this, SLOT(slotChangePrefix()));
- connect(d_ptr->m_changeLanguageAction, SIGNAL(triggered()), this, SLOT(slotChangeLanguage()));
- connect(d_ptr->m_changeAliasAction, SIGNAL(triggered()), this, SLOT(slotChangeAlias()));
- connect(d_ptr->m_clonePrefixAction, SIGNAL(triggered()), this, SLOT(slotClonePrefix()));
- connect(d_ptr->m_removeAction, SIGNAL(triggered()), this, SLOT(slotRemove()));
- connect(d_ptr->m_moveUpAction, SIGNAL(triggered()), this, SLOT(slotMoveUp()));
- connect(d_ptr->m_moveDownAction, SIGNAL(triggered()), this, SLOT(slotMoveDown()));
+ connect(d_ptr->m_newQrcFileAction, &QAction::triggered,
+ this, [this] { d_ptr->slotNewQrcFile(); });
+ connect(d_ptr->m_importQrcFileAction, &QAction::triggered,
+ this, [this] { d_ptr->slotImportQrcFile(); });
+ connect(d_ptr->m_removeQrcFileAction, &QAction::triggered,
+ this, [this] { d_ptr->slotRemoveQrcFile(); });
+ connect(d_ptr->m_moveUpQrcFileAction, &QAction::triggered,
+ this, [this] { d_ptr->slotMoveUpQrcFile(); });
+ connect(d_ptr->m_moveDownQrcFileAction, &QAction::triggered,
+ this, [this] { d_ptr->slotMoveDownQrcFile(); });
+
+ connect(d_ptr->m_newPrefixAction, &QAction::triggered,
+ this, [this] { d_ptr->slotNewPrefix(); });
+ connect(d_ptr->m_addResourceFileAction, &QAction::triggered,
+ this, [this] { d_ptr->slotAddFiles(); });
+ connect(d_ptr->m_changePrefixAction, &QAction::triggered,
+ this, [this] { d_ptr->slotChangePrefix(); });
+ connect(d_ptr->m_changeLanguageAction, &QAction::triggered,
+ this, [this] { d_ptr->slotChangeLanguage(); });
+ connect(d_ptr->m_changeAliasAction, &QAction::triggered,
+ this, [this] { d_ptr->slotChangeAlias(); });
+ connect(d_ptr->m_clonePrefixAction, &QAction::triggered,
+ this, [this] { d_ptr->slotClonePrefix(); });
+ connect(d_ptr->m_removeAction, &QAction::triggered,
+ this, [this] { d_ptr->slotRemove(); });
+ connect(d_ptr->m_moveUpAction, &QAction::triggered,
+ this, [this] { d_ptr->slotMoveUp(); });
+ connect(d_ptr->m_moveDownAction, &QAction::triggered,
+ this, [this] { d_ptr->slotMoveDown(); });
d_ptr->m_ui.qrcFileList->setContextMenuPolicy(Qt::CustomContextMenu);
- connect(d_ptr->m_ui.qrcFileList, SIGNAL(customContextMenuRequested(QPoint)),
- this, SLOT(slotListWidgetContextMenuRequested(QPoint)));
- connect(d_ptr->m_ui.qrcFileList, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
- this, SLOT(slotCurrentQrcFileChanged(QListWidgetItem*)));
+ connect(d_ptr->m_ui.qrcFileList, &QListWidget::customContextMenuRequested,
+ this, [this](const QPoint &point) { d_ptr->slotListWidgetContextMenuRequested(point); });
+ connect(d_ptr->m_ui.qrcFileList, &QListWidget::currentItemChanged,
+ this, [this](QListWidgetItem *item) { d_ptr->slotCurrentQrcFileChanged(item); });
d_ptr->m_treeModel = new QStandardItemModel(this);
d_ptr->m_treeModel->setColumnCount(2);
@@ -1977,12 +1994,12 @@ QtResourceEditorDialog::QtResourceEditorDialog(QDesignerFormEditorInterface *cor
d_ptr->m_ui.resourceTreeView, &QTreeView::resizeColumnToContents);
d_ptr->m_ui.resourceTreeView->setTextElideMode(Qt::ElideLeft);
- connect(d_ptr->m_ui.resourceTreeView, SIGNAL(customContextMenuRequested(QPoint)),
- this, SLOT(slotTreeViewContextMenuRequested(QPoint)));
- connect(d_ptr->m_treeModel, SIGNAL(itemChanged(QStandardItem*)),
- this, SLOT(slotTreeViewItemChanged(QStandardItem*)));
- connect(d_ptr->m_treeSelection, SIGNAL(currentChanged(QModelIndex,QModelIndex)),
- this, SLOT(slotCurrentTreeViewItemChanged(QModelIndex)));
+ connect(d_ptr->m_ui.resourceTreeView, &QTreeView::customContextMenuRequested,
+ this, [this](const QPoint &point) { d_ptr->slotTreeViewContextMenuRequested(point); });
+ connect(d_ptr->m_treeModel, &QStandardItemModel::itemChanged,
+ this, [this](QStandardItem *item) { d_ptr->slotTreeViewItemChanged(item); });
+ connect(d_ptr->m_treeSelection, &QItemSelectionModel::currentChanged,
+ this, [this](const QModelIndex &index) { d_ptr->slotCurrentTreeViewItemChanged(index); });
d_ptr->m_ui.resourceTreeView->setColumnWidth(0, 200);
@@ -1992,11 +2009,11 @@ QtResourceEditorDialog::QtResourceEditorDialog(QDesignerFormEditorInterface *cor
d_ptr->m_moveDownQrcFileAction->setEnabled(false);
QDesignerSettingsInterface *settings = core->settingsManager();
- settings->beginGroup(QLatin1String(QrcDialogC));
+ settings->beginGroup(QrcDialogC);
- d_ptr->m_ui.splitter->restoreState(settings->value(QLatin1String(SplitterPosition)).toByteArray());
- const QVariant geometry = settings->value(QLatin1String(Geometry));
- if (geometry.type() == QVariant::ByteArray) // Used to be a QRect up until 5.4.0, QTBUG-43374
+ d_ptr->m_ui.splitter->restoreState(settings->value(SplitterPosition).toByteArray());
+ const QVariant geometry = settings->value(ResourceEditorGeometry);
+ if (geometry.metaType().id() == QMetaType::QByteArray) // Used to be a QRect up until 5.4.0, QTBUG-43374
restoreGeometry(geometry.toByteArray());
settings->endGroup();
@@ -2005,11 +2022,13 @@ QtResourceEditorDialog::QtResourceEditorDialog(QDesignerFormEditorInterface *cor
QtResourceEditorDialog::~QtResourceEditorDialog()
{
QDesignerSettingsInterface *settings = d_ptr->m_core->settingsManager();
- settings->beginGroup(QLatin1String(QrcDialogC));
+ settings->beginGroup(QrcDialogC);
- settings->setValue(QLatin1String(SplitterPosition), d_ptr->m_ui.splitter->saveState());
- settings->setValue(QLatin1String(Geometry), saveGeometry());
+ settings->setValue(SplitterPosition, d_ptr->m_ui.splitter->saveState());
+ settings->setValue(ResourceEditorGeometry, saveGeometry());
settings->endGroup();
+
+ disconnect(d_ptr->m_qrcManager, nullptr, this, nullptr);
}
QtResourceModel *QtResourceEditorDialog::model() const
@@ -2050,13 +2069,13 @@ QString QtResourceEditorDialog::selectedResource() const
if (!currentResourcePrefix)
return QString();
- const QChar slash(QLatin1Char('/'));
+ const QChar slash(u'/');
QString resource = currentResourcePrefix->prefix();
if (!resource.startsWith(slash))
resource.prepend(slash);
if (!resource.endsWith(slash))
resource.append(slash);
- resource.prepend(QLatin1Char(':'));
+ resource.prepend(u':');
QtResourceFile *currentResourceFile = d_ptr->getCurrentResourceFile();
if (!currentResourceFile)
@@ -2066,15 +2085,15 @@ QString QtResourceEditorDialog::selectedResource() const
if (!currentResourceFile->alias().isEmpty())
resourceEnding = currentResourceFile->alias();
- const QString dotSlash(QStringLiteral("./"));
- const QString dotDotSlash(QStringLiteral("../"));
+ const auto dotSlash = "./"_L1;
+ const auto dotDotSlash = "../"_L1;
while (true) {
if (resourceEnding.startsWith(slash))
resourceEnding = resourceEnding.mid(1);
else if (resourceEnding.startsWith(dotSlash))
- resourceEnding = resourceEnding.mid(dotSlash.count());
+ resourceEnding = resourceEnding.mid(dotSlash.size());
else if (resourceEnding.startsWith(dotDotSlash))
- resourceEnding = resourceEnding.mid(dotDotSlash.count());
+ resourceEnding = resourceEnding.mid(dotDotSlash.size());
else
break;
}
diff --git a/src/designer/src/lib/shared/qtresourceeditordialog_p.h b/src/designer/src/lib/shared/qtresourceeditordialog_p.h
index 5a6ea9755..cc832a881 100644
--- a/src/designer/src/lib/shared/qtresourceeditordialog_p.h
+++ b/src/designer/src/lib/shared/qtresourceeditordialog_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -74,41 +49,6 @@ private:
QScopedPointer<class QtResourceEditorDialogPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtResourceEditorDialog)
Q_DISABLE_COPY_MOVE(QtResourceEditorDialog)
-
- Q_PRIVATE_SLOT(d_func(), void slotQrcFileInserted(QtQrcFile *))
- Q_PRIVATE_SLOT(d_func(), void slotQrcFileMoved(QtQrcFile *))
- Q_PRIVATE_SLOT(d_func(), void slotQrcFileRemoved(QtQrcFile *))
- Q_PRIVATE_SLOT(d_func(), void slotResourcePrefixInserted(QtResourcePrefix *))
- Q_PRIVATE_SLOT(d_func(), void slotResourcePrefixMoved(QtResourcePrefix *))
- Q_PRIVATE_SLOT(d_func(), void slotResourcePrefixChanged(QtResourcePrefix *))
- Q_PRIVATE_SLOT(d_func(), void slotResourceLanguageChanged(QtResourcePrefix *))
- Q_PRIVATE_SLOT(d_func(), void slotResourcePrefixRemoved(QtResourcePrefix *))
- Q_PRIVATE_SLOT(d_func(), void slotResourceFileInserted(QtResourceFile *))
- Q_PRIVATE_SLOT(d_func(), void slotResourceFileMoved(QtResourceFile *))
- Q_PRIVATE_SLOT(d_func(), void slotResourceAliasChanged(QtResourceFile *))
- Q_PRIVATE_SLOT(d_func(), void slotResourceFileRemoved(QtResourceFile *))
-
- Q_PRIVATE_SLOT(d_func(), void slotCurrentQrcFileChanged(QListWidgetItem *))
- Q_PRIVATE_SLOT(d_func(), void slotCurrentTreeViewItemChanged(const QModelIndex &))
- Q_PRIVATE_SLOT(d_func(), void slotListWidgetContextMenuRequested(const QPoint &))
- Q_PRIVATE_SLOT(d_func(), void slotTreeViewContextMenuRequested(const QPoint &))
- Q_PRIVATE_SLOT(d_func(), void slotTreeViewItemChanged(QStandardItem *))
-
- Q_PRIVATE_SLOT(d_func(), void slotNewQrcFile())
- Q_PRIVATE_SLOT(d_func(), void slotImportQrcFile())
- Q_PRIVATE_SLOT(d_func(), void slotRemoveQrcFile())
- Q_PRIVATE_SLOT(d_func(), void slotMoveUpQrcFile())
- Q_PRIVATE_SLOT(d_func(), void slotMoveDownQrcFile())
-
- Q_PRIVATE_SLOT(d_func(), void slotNewPrefix())
- Q_PRIVATE_SLOT(d_func(), void slotAddFiles())
- Q_PRIVATE_SLOT(d_func(), void slotChangePrefix())
- Q_PRIVATE_SLOT(d_func(), void slotChangeLanguage())
- Q_PRIVATE_SLOT(d_func(), void slotChangeAlias())
- Q_PRIVATE_SLOT(d_func(), void slotClonePrefix())
- Q_PRIVATE_SLOT(d_func(), void slotRemove())
- Q_PRIVATE_SLOT(d_func(), void slotMoveUp())
- Q_PRIVATE_SLOT(d_func(), void slotMoveDown())
};
QT_END_NAMESPACE
diff --git a/src/designer/src/lib/shared/qtresourcemodel.cpp b/src/designer/src/lib/shared/qtresourcemodel.cpp
index 391cf49a3..acee5cc98 100644
--- a/src/designer/src/lib/shared/qtresourcemodel.cpp
+++ b/src/designer/src/lib/shared/qtresourcemodel.cpp
@@ -1,35 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qtresourcemodel_p.h"
#include "rcc_p.h"
#include <QtCore/qstringlist.h>
+#include <QtCore/qhash.h>
#include <QtCore/qmap.h>
#include <QtCore/qresource.h>
#include <QtCore/qfileinfo.h>
@@ -71,19 +47,18 @@ public:
void activate(QtResourceSet *resourceSet, const QStringList &newPaths, int *errorCount = nullptr, QString *errorMessages = nullptr);
void removeOldPaths(QtResourceSet *resourceSet, const QStringList &newPaths);
- QMap<QString, bool> m_pathToModified;
- QMap<QtResourceSet *, QStringList> m_resourceSetToPaths;
- QMap<QtResourceSet *, bool> m_resourceSetToReload; // while path is recreated it needs to be reregistered
- // (it is - in the new current resource set, but when the path was used in
- // other resource set
- // then later when that resource set is activated it needs to be reregistered)
- QMap<QtResourceSet *, bool> m_newlyCreated; // all created but not activated yet
- // (if was active at some point and it's not now it will not be on that map)
- QMap<QString, QList<QtResourceSet *> > m_pathToResourceSet;
- QtResourceSet *m_currentResourceSet = nullptr;
+ QMap<QString, bool> m_pathToModified;
+ QHash<QtResourceSet *, QStringList> m_resourceSetToPaths;
+ QHash<QtResourceSet *, bool> m_resourceSetToReload; // while path is recreated it needs to be reregistered
+ // (it is - in the new current resource set, but when the path was used in
+ // other resource set
+ // then later when that resource set is activated it needs to be reregistered)
+ QHash<QtResourceSet *, bool> m_newlyCreated; // all created but not activated yet
+ // (if was active at some point and it's not now it will not be on that map)
+ QMap<QString, QList<QtResourceSet *>> m_pathToResourceSet;
+ QtResourceSet *m_currentResourceSet = nullptr;
- typedef QMap<QString, const QByteArray *> PathDataMap;
- PathDataMap m_pathToData;
+ QMap<QString, const QByteArray *> m_pathToData;
QMap<QString, QStringList> m_pathToContents; // qrc path to its contents.
QMap<QString, QString> m_fileToQrc; // this map contains the content of active resource set only.
@@ -152,7 +127,7 @@ const QByteArray *QtResourceModelPrivate::createResource(const QString &path, QS
contents->clear();
do {
// run RCC
- RCCResourceLibrary library;
+ RCCResourceLibrary library(3);
library.setVerbose(true);
library.setInputFiles(QStringList(path));
library.setFormat(RCCResourceLibrary::Binary);
@@ -163,7 +138,7 @@ const QByteArray *QtResourceModelPrivate::createResource(const QString &path, QS
break;
// return code cannot be fully trusted, might still be empty
const ResourceDataFileMap resMap = library.resourceDataFileMap();
- if (!library.output(buffer, errorDevice))
+ if (!library.output(buffer, buffer /* tempfile, unused */, errorDevice))
break;
*errorCount = library.failedResources().size();
@@ -200,7 +175,7 @@ void QtResourceModelPrivate::registerResourceSet(QtResourceSet *resourceSet)
for (const QString &path : toRegister) {
if (debugResourceModel)
qDebug() << "registerResourceSet " << path;
- const PathDataMap::const_iterator itRcc = m_pathToData.constFind(path);
+ const auto itRcc = m_pathToData.constFind(path);
if (itRcc != m_pathToData.constEnd()) { // otherwise data was not created yet
const QByteArray *data = itRcc.value();
if (data) {
@@ -228,7 +203,7 @@ void QtResourceModelPrivate::unregisterResourceSet(QtResourceSet *resourceSet)
for (const QString &path : toUnregister) {
if (debugResourceModel)
qDebug() << "unregisterResourceSet " << path;
- const PathDataMap::const_iterator itRcc = m_pathToData.constFind(path);
+ const auto itRcc = m_pathToData.constFind(path);
if (itRcc != m_pathToData.constEnd()) { // otherwise data was not created yet
const QByteArray *data = itRcc.value();
if (data) {
@@ -259,12 +234,12 @@ void QtResourceModelPrivate::activate(QtResourceSet *resourceSet, const QStringL
if (resourceSet && resourceSet->activeResourceFilePaths() != newPaths && !m_newlyCreated.contains(resourceSet))
newResourceSetChanged = true;
- PathDataMap newPathToData = m_pathToData;
+ auto newPathToData = m_pathToData;
for (const QString &path : newPaths) {
if (resourceSet && !m_pathToResourceSet[path].contains(resourceSet))
m_pathToResourceSet[path].append(resourceSet);
- const QMap<QString, bool>::iterator itMod = m_pathToModified.find(path);
+ const auto itMod = m_pathToModified.find(path);
if (itMod == m_pathToModified.end() || itMod.value()) { // new path or path is already created, but needs to be recreated
QStringList contents;
int qrcErrorCount;
@@ -313,7 +288,7 @@ void QtResourceModelPrivate::activate(QtResourceSet *resourceSet, const QStringL
*errorMessages = stderrOutput;
}
// register
- const QMap<QtResourceSet *, bool>::iterator itReload = m_resourceSetToReload.find(resourceSet);
+ const auto itReload = m_resourceSetToReload.find(resourceSet);
if (itReload != m_resourceSetToReload.end()) {
if (itReload.value()) {
newResourceSetChanged = true;
@@ -327,7 +302,7 @@ void QtResourceModelPrivate::activate(QtResourceSet *resourceSet, const QStringL
const bool needReregister = (oldActivePaths != newPaths) || newResourceSetChanged;
- QMap<QtResourceSet *, bool>::iterator itNew = m_newlyCreated.find(resourceSet);
+ const auto itNew = m_newlyCreated.find(resourceSet);
if (itNew != m_newlyCreated.end()) {
m_newlyCreated.remove(resourceSet);
if (needReregister)
@@ -335,7 +310,7 @@ void QtResourceModelPrivate::activate(QtResourceSet *resourceSet, const QStringL
}
if (!newResourceSetChanged && !needReregister && (m_currentResourceSet == resourceSet)) {
- for (const QByteArray *data : qAsConst(toDelete))
+ for (const QByteArray *data : std::as_const(toDelete))
deleteResource(data);
return; // nothing changed
@@ -344,7 +319,7 @@ void QtResourceModelPrivate::activate(QtResourceSet *resourceSet, const QStringL
if (needReregister)
unregisterResourceSet(m_currentResourceSet);
- for (const QByteArray *data : qAsConst(toDelete))
+ for (const QByteArray *data : std::as_const(toDelete))
deleteResource(data);
m_pathToData = newPathToData;
@@ -378,8 +353,8 @@ void QtResourceModelPrivate::removeOldPaths(QtResourceSet *resourceSet, const QS
const int idx = itRemove.value().indexOf(resourceSet);
if (idx >= 0)
itRemove.value().removeAt(idx);
- if (itRemove.value().count() == 0) {
- PathDataMap::iterator it = m_pathToData.find(oldPath);
+ if (itRemove.value().isEmpty()) {
+ const auto it = m_pathToData.find(oldPath);
if (it != m_pathToData.end())
deleteResource(it.value());
m_pathToResourceSet.erase(itRemove);
@@ -409,7 +384,7 @@ void QtResourceModelPrivate::setWatcherEnabled(const QString &path, bool enable)
void QtResourceModelPrivate::addWatcher(const QString &path)
{
- QMap<QString, bool>::ConstIterator it = m_fileWatchedMap.constFind(path);
+ const auto it = m_fileWatchedMap.constFind(path);
if (it != m_fileWatchedMap.constEnd() && !it.value())
return;
@@ -445,8 +420,8 @@ QtResourceModel::QtResourceModel(QObject *parent) :
d_ptr->q_ptr = this;
d_ptr->m_fileWatcher = new QFileSystemWatcher(this);
- connect(d_ptr->m_fileWatcher, SIGNAL(fileChanged(QString)),
- this, SLOT(slotFileChanged(QString)));
+ connect(d_ptr->m_fileWatcher, &QFileSystemWatcher::fileChanged,
+ this, [this](const QString &fileName) { d_ptr->slotFileChanged(fileName); });
}
QtResourceModel::~QtResourceModel()
@@ -465,16 +440,12 @@ QStringList QtResourceModel::loadedQrcFiles() const
bool QtResourceModel::isModified(const QString &path) const
{
- QMap<QString, bool>::const_iterator it = d_ptr->m_pathToModified.constFind(path);
- if (it != d_ptr->m_pathToModified.constEnd())
- return it.value();
- return true;
+ return d_ptr->m_pathToModified.value(path, true);
}
void QtResourceModel::setModified(const QString &path)
{
- QMap<QString, bool>::const_iterator itMod = d_ptr->m_pathToModified.constFind(path);
- if (itMod == d_ptr->m_pathToModified.constEnd())
+ if (!d_ptr->m_pathToModified.contains(path))
return;
d_ptr->m_pathToModified[path] = true;
@@ -539,19 +510,12 @@ void QtResourceModel::reload(const QString &path, int *errorCount, QString *erro
void QtResourceModel::reload(int *errorCount, QString *errorMessages)
{
- QMap<QString, bool>::iterator it = d_ptr->m_pathToModified.begin();
- QMap<QString, bool>::iterator itEnd = d_ptr->m_pathToModified.end(); // will it be valid when I iterate the map and change it???
- while (it != itEnd) {
- it = d_ptr->m_pathToModified.insert(it.key(), true);
- ++it;
- }
+ for (auto it = d_ptr->m_pathToModified.begin(), end = d_ptr->m_pathToModified.end(); it != end; ++it)
+ it.value() = true;
- QMap<QtResourceSet *, bool>::iterator itReload = d_ptr->m_resourceSetToReload.begin();
- QMap<QtResourceSet *, bool>::iterator itReloadEnd = d_ptr->m_resourceSetToReload.end();
- while (itReload != itReloadEnd) {
- itReload = d_ptr->m_resourceSetToReload.insert(itReload.key(), true); // empty resourceSets could be omitted here
- ++itReload;
- }
+ // empty resourceSets could be omitted here
+ for (auto itReload = d_ptr->m_resourceSetToReload.begin(), end = d_ptr->m_resourceSetToReload.end(); itReload != end; ++itReload)
+ itReload.value() = true;
d_ptr->activate(d_ptr->m_currentResourceSet, d_ptr->m_resourceSetToPaths.value(d_ptr->m_currentResourceSet), errorCount, errorMessages);
}
@@ -584,7 +548,7 @@ bool QtResourceModel::isWatcherEnabled() const
void QtResourceModel::setWatcherEnabled(const QString &path, bool enable)
{
- QMap<QString, bool>::Iterator it = d_ptr->m_fileWatchedMap.find(path);
+ const auto it = d_ptr->m_fileWatchedMap.find(path);
if (it == d_ptr->m_fileWatchedMap.end())
return;
diff --git a/src/designer/src/lib/shared/qtresourcemodel_p.h b/src/designer/src/lib/shared/qtresourcemodel_p.h
index 65d615f52..43afe5c50 100644
--- a/src/designer/src/lib/shared/qtresourcemodel_p.h
+++ b/src/designer/src/lib/shared/qtresourcemodel_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -123,8 +98,6 @@ private:
QScopedPointer<class QtResourceModelPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtResourceModel)
Q_DISABLE_COPY_MOVE(QtResourceModel)
-
- Q_PRIVATE_SLOT(d_func(), void slotFileChanged(const QString &))
};
QT_END_NAMESPACE
diff --git a/src/designer/src/lib/shared/qtresourceview.cpp b/src/designer/src/lib/shared/qtresourceview.cpp
index 292329e2e..5663b0ddc 100644
--- a/src/designer/src/lib/shared/qtresourceview.cpp
+++ b/src/designer/src/lib/shared/qtresourceview.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qtresourceview_p.h"
#include "qtresourcemodel_p.h"
@@ -57,6 +32,7 @@
#include <QtCore/qmimedata.h>
#include <QtCore/qfileinfo.h>
#include <QtCore/qdir.h>
+#include <QtCore/qhash.h>
#include <QtCore/qqueue.h>
#include <QtXml/qdom.h>
@@ -65,15 +41,17 @@
QT_BEGIN_NAMESPACE
-static const char *elementResourceData = "resource";
-static const char *typeAttribute = "type";
-static const char *typeImage = "image";
-static const char *typeStyleSheet = "stylesheet";
-static const char *typeOther = "other";
-static const char *fileAttribute = "file";
-static const char *SplitterPosition = "SplitterPosition";
-static const char *Geometry = "Geometry";
-static const char *ResourceViewDialogC = "ResourceDialog";
+using namespace Qt::StringLiterals;
+
+static constexpr auto elementResourceData = "resource"_L1;
+static constexpr auto typeAttribute = "type"_L1;
+static constexpr auto typeImage = "image"_L1;
+static constexpr auto typeStyleSheet = "stylesheet"_L1;
+static constexpr auto typeOther = "other"_L1;
+static constexpr auto fileAttribute = "file"_L1;
+static constexpr auto qrvSplitterPosition = "SplitterPosition"_L1;
+static constexpr auto qrvGeometry = "Geometry"_L1;
+static constexpr auto ResourceViewDialogC = "ResourceDialog"_L1;
// ---------------- ResourceListWidget: A list widget that has drag enabled
class ResourceListWidget : public QListWidget {
@@ -160,13 +138,13 @@ public:
QTreeWidget *m_treeWidget;
QListWidget *m_listWidget;
QSplitter *m_splitter = nullptr;
- QMap<QString, QStringList> m_pathToContents; // full path to contents file names (full path to its resource filenames)
- QMap<QString, QString> m_pathToParentPath; // full path to full parent path
- QMap<QString, QStringList> m_pathToSubPaths; // full path to full sub paths
+ QMap<QString, QStringList> m_pathToContents; // full path to contents file names (full path to its resource filenames)
+ QMap<QString, QString> m_pathToParentPath; // full path to full parent path
+ QMap<QString, QStringList> m_pathToSubPaths; // full path to full sub paths
QMap<QString, QTreeWidgetItem *> m_pathToItem;
- QMap<QTreeWidgetItem *, QString> m_itemToPath;
+ QHash<QTreeWidgetItem *, QString> m_itemToPath;
QMap<QString, QListWidgetItem *> m_resourceToItem;
- QMap<QListWidgetItem *, QString> m_itemToResource;
+ QHash<QListWidgetItem *, QString> m_itemToResource;
QAction *m_editResourcesAction = nullptr;
QAction *m_reloadResourcesAction = nullptr;
QAction *m_copyResourcePathAction = nullptr;
@@ -196,7 +174,7 @@ void QtResourceViewPrivate::restoreSettings()
QDesignerSettingsInterface *settings = m_core->settingsManager();
settings->beginGroup(m_settingsKey);
- m_splitter->restoreState(settings->value(QLatin1String(SplitterPosition)).toByteArray());
+ m_splitter->restoreState(settings->value(qrvSplitterPosition).toByteArray());
settings->endGroup();
}
@@ -208,7 +186,7 @@ void QtResourceViewPrivate::saveSettings()
QDesignerSettingsInterface *settings = m_core->settingsManager();
settings->beginGroup(m_settingsKey);
- settings->setValue(QLatin1String(SplitterPosition), m_splitter->saveState());
+ settings->setValue(qrvSplitterPosition, m_splitter->saveState());
settings->endGroup();
}
@@ -362,7 +340,7 @@ void QtResourceViewPrivate::createPaths()
return;
// Resource root up until 4.6 was ':', changed to ":/" as of 4.7
- const QString root(QStringLiteral(":/"));
+ const QString root(u":/"_s);
QMap<QString, QString> contents = m_resourceModel->contents();
for (auto it = contents.cbegin(), end = contents.cend(); it != end; ++it) {
@@ -378,15 +356,15 @@ void QtResourceViewPrivate::createPaths()
}
}
- QQueue<QPair<QString, QTreeWidgetItem *> > pathToParentItemQueue;
- pathToParentItemQueue.enqueue(qMakePair(root, static_cast<QTreeWidgetItem *>(nullptr)));
+ QQueue<std::pair<QString, QTreeWidgetItem *>> pathToParentItemQueue;
+ pathToParentItemQueue.enqueue(std::make_pair(root, static_cast<QTreeWidgetItem *>(nullptr)));
while (!pathToParentItemQueue.isEmpty()) {
- QPair<QString, QTreeWidgetItem *> pathToParentItem = pathToParentItemQueue.dequeue();
+ std::pair<QString, QTreeWidgetItem *> pathToParentItem = pathToParentItemQueue.dequeue();
const QString path = pathToParentItem.first;
QTreeWidgetItem *item = createPath(path, pathToParentItem.second);
const QStringList subPaths = m_pathToSubPaths.value(path);
for (const QString &subPath : subPaths)
- pathToParentItemQueue.enqueue(qMakePair(subPath, item));
+ pathToParentItemQueue.enqueue(std::make_pair(subPath, item));
}
}
@@ -402,7 +380,7 @@ void QtResourceViewPrivate::filterOutResources()
// 3) we hide these items which has pathToVisible value false.
const bool matchAll = m_filterPattern.isEmpty();
- const QString root(QStringLiteral(":/"));
+ const QString root(u":/"_s);
QQueue<QString> pathQueue;
pathQueue.enqueue(root);
@@ -445,21 +423,18 @@ void QtResourceViewPrivate::filterOutResources()
bool searchForNewPathWithContents = true;
if (!currentPath.isEmpty()) { // if the currentPath is empty we will search for a new path too
- QMap<QString, bool>::ConstIterator it = pathToMatchingContents.constFind(currentPath);
+ const auto it = pathToMatchingContents.constFind(currentPath);
if (it != pathToMatchingContents.constEnd() && it.value()) // the current item has contents, we don't need to search for another path
searchForNewPathWithContents = false;
}
if (searchForNewPathWithContents) {
// we find the first path with the matching contents
- QMap<QString, bool>::ConstIterator itContents = pathToMatchingContents.constBegin();
- while (itContents != pathToMatchingContents.constEnd()) {
+ for (auto itContents = pathToMatchingContents.cbegin(), cend = pathToMatchingContents.cend(); itContents != cend; ++itContents) {
if (itContents.value()) {
newCurrentPath = itContents.key(); // the new path will be activated
break;
}
-
- itContents++;
}
}
@@ -510,7 +485,7 @@ QTreeWidgetItem *QtResourceViewPrivate::createPath(const QString &path, QTreeWid
QFileInfo di(path);
substPath = di.fileName();
} else {
- substPath = QStringLiteral("<resource root>");
+ substPath = u"<resource root>"_s;
}
item->setText(0, substPath);
item->setToolTip(0, path);
@@ -555,23 +530,29 @@ QtResourceView::QtResourceView(QDesignerFormEditorInterface *core, QWidget *pare
{
d_ptr->q_ptr = this;
- QIcon editIcon = QIcon::fromTheme(QStringLiteral("document-properties"), qdesigner_internal::createIconSet(QStringLiteral("edit.png")));
+ QIcon editIcon = qdesigner_internal::createIconSet(QIcon::ThemeIcon::DocumentProperties,
+ "edit.png"_L1);
d_ptr->m_editResourcesAction = new QAction(editIcon, tr("Edit Resources..."), this);
d_ptr->m_toolBar->addAction(d_ptr->m_editResourcesAction);
- connect(d_ptr->m_editResourcesAction, SIGNAL(triggered()), this, SLOT(slotEditResources()));
+ connect(d_ptr->m_editResourcesAction, &QAction::triggered,
+ this, [this] { d_ptr->slotEditResources(); });
d_ptr->m_editResourcesAction->setEnabled(false);
- QIcon refreshIcon = QIcon::fromTheme(QStringLiteral("view-refresh"), qdesigner_internal::createIconSet(QStringLiteral("reload.png")));
+ QIcon refreshIcon = qdesigner_internal::createIconSet(QIcon::ThemeIcon::ViewRefresh,
+ "reload.png"_L1);
d_ptr->m_reloadResourcesAction = new QAction(refreshIcon, tr("Reload"), this);
d_ptr->m_toolBar->addAction(d_ptr->m_reloadResourcesAction);
- connect(d_ptr->m_reloadResourcesAction, SIGNAL(triggered()), this, SLOT(slotReloadResources()));
+ connect(d_ptr->m_reloadResourcesAction, &QAction::triggered,
+ this, [this] { d_ptr->slotReloadResources(); });
d_ptr->m_reloadResourcesAction->setEnabled(false);
#if QT_CONFIG(clipboard)
- QIcon copyIcon = QIcon::fromTheme(QStringLiteral("edit-copy"), qdesigner_internal::createIconSet(QStringLiteral("editcopy.png")));
+ QIcon copyIcon = qdesigner_internal::createIconSet(QIcon::ThemeIcon::EditCopy,
+ "editcopy.png"_L1);
d_ptr->m_copyResourcePathAction = new QAction(copyIcon, tr("Copy Path"), this);
- connect(d_ptr->m_copyResourcePathAction, SIGNAL(triggered()), this, SLOT(slotCopyResourcePath()));
+ connect(d_ptr->m_copyResourcePathAction, &QAction::triggered,
+ this, [this] { d_ptr->slotCopyResourcePath(); });
d_ptr->m_copyResourcePathAction->setEnabled(false);
#endif
@@ -579,7 +560,8 @@ QtResourceView::QtResourceView(QDesignerFormEditorInterface *core, QWidget *pare
QHBoxLayout *filterLayout = new QHBoxLayout(d_ptr->m_filterWidget);
filterLayout->setContentsMargins(0, 0, 0, 0);
QLineEdit *filterLineEdit = new QLineEdit(d_ptr->m_filterWidget);
- connect(filterLineEdit, SIGNAL(textChanged(QString)), this, SLOT(slotFilterChanged(QString)));
+ connect(filterLineEdit, &QLineEdit::textChanged,
+ this, [this](const QString &text) { d_ptr->slotFilterChanged(text); });
filterLineEdit->setPlaceholderText(tr("Filter"));
filterLineEdit->setClearButtonEnabled(true);
filterLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::Ignored));
@@ -606,15 +588,15 @@ QtResourceView::QtResourceView(QDesignerFormEditorInterface *core, QWidget *pare
d_ptr->m_listWidget->setIconSize(QSize(48, 48));
d_ptr->m_listWidget->setGridSize(QSize(64, 64));
- connect(d_ptr->m_treeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),
- this, SLOT(slotCurrentPathChanged(QTreeWidgetItem*)));
- connect(d_ptr->m_listWidget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
- this, SLOT(slotCurrentResourceChanged(QListWidgetItem*)));
- connect(d_ptr->m_listWidget, SIGNAL(itemActivated(QListWidgetItem*)),
- this, SLOT(slotResourceActivated(QListWidgetItem*)));
+ connect(d_ptr->m_treeWidget, &QTreeWidget::currentItemChanged,
+ this, [this](QTreeWidgetItem *item) { d_ptr->slotCurrentPathChanged(item); });
+ connect(d_ptr->m_listWidget, &QListWidget::currentItemChanged,
+ this, [this](QListWidgetItem *item) { d_ptr->slotCurrentResourceChanged(item); });
+ connect(d_ptr->m_listWidget, &QListWidget::itemActivated,
+ this, [this](QListWidgetItem *item) { d_ptr->slotResourceActivated(item); });
d_ptr->m_listWidget->setContextMenuPolicy(Qt::CustomContextMenu);
- connect(d_ptr->m_listWidget, SIGNAL(customContextMenuRequested(QPoint)),
- this, SLOT(slotListWidgetContextMenuRequested(QPoint)));
+ connect(d_ptr->m_listWidget, &QListWidget::customContextMenuRequested,
+ this, [this](const QPoint &point) { d_ptr->slotListWidgetContextMenuRequested(point); });
}
QtResourceView::~QtResourceView()
@@ -693,10 +675,8 @@ void QtResourceView::setSettingsKey(const QString &key)
void QtResourceView::setResourceModel(QtResourceModel *model)
{
- if (d_ptr->m_resourceModel) {
- disconnect(d_ptr->m_resourceModel, SIGNAL(resourceSetActivated(QtResourceSet*,bool)),
- this, SLOT(slotResourceSetActivated(QtResourceSet*)));
- }
+ if (d_ptr->m_resourceModel)
+ disconnect(d_ptr->m_resourceModel, &QtResourceModel::resourceSetActivated, this, nullptr);
// clear here
d_ptr->m_treeWidget->clear();
@@ -707,8 +687,8 @@ void QtResourceView::setResourceModel(QtResourceModel *model)
if (!d_ptr->m_resourceModel)
return;
- connect(d_ptr->m_resourceModel, SIGNAL(resourceSetActivated(QtResourceSet*,bool)),
- this, SLOT(slotResourceSetActivated(QtResourceSet*)));
+ connect(d_ptr->m_resourceModel, &QtResourceModel::resourceSetActivated,
+ this, [this](QtResourceSet *resource) { d_ptr->slotResourceSetActivated(resource); });
// fill new here
d_ptr->slotResourceSetActivated(d_ptr->m_resourceModel->currentResourceSet());
@@ -738,19 +718,19 @@ bool QtResourceView::dragEnabled() const
QString QtResourceView::encodeMimeData(ResourceType resourceType, const QString &path)
{
QDomDocument doc;
- QDomElement elem = doc.createElement(QLatin1String(elementResourceData));
+ QDomElement elem = doc.createElement(elementResourceData);
switch (resourceType) {
case ResourceImage:
- elem.setAttribute(QLatin1String(typeAttribute), QLatin1String(typeImage));
+ elem.setAttribute(typeAttribute, typeImage);
break;
case ResourceStyleSheet:
- elem.setAttribute(QLatin1String(typeAttribute), QLatin1String(typeStyleSheet));
+ elem.setAttribute(typeAttribute, typeStyleSheet);
break;
case ResourceOther:
- elem.setAttribute(QLatin1String(typeAttribute), QLatin1String(typeOther));
+ elem.setAttribute(typeAttribute, typeOther);
break;
}
- elem.setAttribute(QLatin1String(fileAttribute), path);
+ elem.setAttribute(fileAttribute, path);
doc.appendChild(elem);
return doc.toString();
}
@@ -763,8 +743,8 @@ bool QtResourceView::decodeMimeData(const QMimeData *md, ResourceType *t, QStrin
bool QtResourceView::decodeMimeData(const QString &text, ResourceType *t, QString *file)
{
- const QString docElementName = QLatin1String(elementResourceData);
- static const QString docElementString = QLatin1Char('<') + docElementName;
+ static auto docElementName = elementResourceData;
+ static const QString docElementString = u'<' + docElementName;
if (text.isEmpty() || text.indexOf(docElementString) == -1)
return false;
@@ -778,18 +758,18 @@ bool QtResourceView::decodeMimeData(const QString &text, ResourceType *t, QStrin
return false;
if (t) {
- const QString typeAttr = QLatin1String(typeAttribute);
+ const QString typeAttr = typeAttribute;
if (domElement.hasAttribute (typeAttr)) {
- const QString typeValue = domElement.attribute(typeAttr, QLatin1String(typeOther));
- if (typeValue == QLatin1String(typeImage)) {
+ const QString typeValue = domElement.attribute(typeAttr, typeOther);
+ if (typeValue == typeImage) {
*t = ResourceImage;
} else {
- *t = typeValue == QLatin1String(typeStyleSheet) ? ResourceStyleSheet : ResourceOther;
+ *t = typeValue == typeStyleSheet ? ResourceStyleSheet : ResourceOther;
}
}
}
if (file) {
- const QString fileAttr = QLatin1String(fileAttribute);
+ const QString fileAttr = fileAttribute;
if (domElement.hasAttribute(fileAttr)) {
*file = domElement.attribute(fileAttr, QString());
} else {
@@ -822,7 +802,7 @@ QtResourceViewDialogPrivate::QtResourceViewDialogPrivate(QDesignerFormEditorInte
m_view(new QtResourceView(core)),
m_box(new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel))
{
- m_view->setSettingsKey(QLatin1String(ResourceViewDialogC));
+ m_view->setSettingsKey(ResourceViewDialogC);
}
// ------------ QtResourceViewDialog
@@ -831,7 +811,6 @@ QtResourceViewDialog::QtResourceViewDialog(QDesignerFormEditorInterface *core, Q
d_ptr(new QtResourceViewDialogPrivate(core))
{
setWindowTitle(tr("Select Resource"));
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
d_ptr->q_ptr = this;
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(d_ptr->m_view);
@@ -839,15 +818,16 @@ QtResourceViewDialog::QtResourceViewDialog(QDesignerFormEditorInterface *core, Q
connect(d_ptr->m_box, &QDialogButtonBox::accepted, this, &QDialog::accept);
connect(d_ptr->m_box, &QDialogButtonBox::rejected, this, &QDialog::reject);
connect(d_ptr->m_view, &QtResourceView::resourceActivated, this, &QDialog::accept);
- connect(d_ptr->m_view, SIGNAL(resourceSelected(QString)), this, SLOT(slotResourceSelected(QString)));
+ connect(d_ptr->m_view, &QtResourceView::resourceSelected,
+ this, [this](const QString &resource) { d_ptr->slotResourceSelected(resource); });
d_ptr->setOkButtonEnabled(false);
d_ptr->m_view->setResourceModel(core->resourceModel());
QDesignerSettingsInterface *settings = core->settingsManager();
- settings->beginGroup(QLatin1String(ResourceViewDialogC));
+ settings->beginGroup(ResourceViewDialogC);
- const QVariant geometry = settings->value(QLatin1String(Geometry));
- if (geometry.type() == QVariant::ByteArray) // Used to be a QRect up until 5.4.0, QTBUG-43374.
+ const QVariant geometry = settings->value(qrvGeometry);
+ if (geometry.metaType().id() == QMetaType::QByteArray) // Used to be a QRect up until 5.4.0, QTBUG-43374.
restoreGeometry(geometry.toByteArray());
settings->endGroup();
@@ -856,9 +836,9 @@ QtResourceViewDialog::QtResourceViewDialog(QDesignerFormEditorInterface *core, Q
QtResourceViewDialog::~QtResourceViewDialog()
{
QDesignerSettingsInterface *settings = d_ptr->m_core->settingsManager();
- settings->beginGroup(QLatin1String(ResourceViewDialogC));
+ settings->beginGroup(ResourceViewDialogC);
- settings->setValue(QLatin1String(Geometry), saveGeometry());
+ settings->setValue(qrvGeometry, saveGeometry());
settings->endGroup();
}
diff --git a/src/designer/src/lib/shared/qtresourceview_p.h b/src/designer/src/lib/shared/qtresourceview_p.h
index 17ec9c194..7d2ed6235 100644
--- a/src/designer/src/lib/shared/qtresourceview_p.h
+++ b/src/designer/src/lib/shared/qtresourceview_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -88,21 +63,9 @@ protected:
bool event(QEvent *event) override;
private:
-
QScopedPointer<class QtResourceViewPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtResourceView)
Q_DISABLE_COPY_MOVE(QtResourceView)
- Q_PRIVATE_SLOT(d_func(), void slotResourceSetActivated(QtResourceSet *))
- Q_PRIVATE_SLOT(d_func(), void slotCurrentPathChanged(QTreeWidgetItem *))
- Q_PRIVATE_SLOT(d_func(), void slotCurrentResourceChanged(QListWidgetItem *))
- Q_PRIVATE_SLOT(d_func(), void slotResourceActivated(QListWidgetItem *))
- Q_PRIVATE_SLOT(d_func(), void slotEditResources())
- Q_PRIVATE_SLOT(d_func(), void slotReloadResources())
-#if QT_CONFIG(clipboard)
- Q_PRIVATE_SLOT(d_func(), void slotCopyResourcePath())
-#endif
- Q_PRIVATE_SLOT(d_func(), void slotListWidgetContextMenuRequested(const QPoint &pos))
- Q_PRIVATE_SLOT(d_func(), void slotFilterChanged(const QString &pattern))
};
class QDESIGNER_SHARED_EXPORT QtResourceViewDialog : public QDialog
@@ -122,7 +85,6 @@ private:
QScopedPointer<class QtResourceViewDialogPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtResourceViewDialog)
Q_DISABLE_COPY_MOVE(QtResourceViewDialog)
- Q_PRIVATE_SLOT(d_func(), void slotResourceSelected(const QString &))
};
QT_END_NAMESPACE
diff --git a/src/designer/src/lib/shared/rcc.cpp b/src/designer/src/lib/shared/rcc.cpp
index 6d271bd8a..38772d8a1 100644
--- a/src/designer/src/lib/shared/rcc.cpp
+++ b/src/designer/src/lib/shared/rcc.cpp
@@ -1,62 +1,42 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// Copyright (C) 2018 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
/* Note: This is a copy of qtbase/src/tools/rcc/rcc.cpp. */
#include "rcc_p.h"
-#include <QtCore/qbytearray.h>
-#include <QtCore/qdatetime.h>
-#include <QtCore/qdebug.h>
-#include <QtCore/qdir.h>
-#include <QtCore/qdiriterator.h>
-#include <QtCore/qfile.h>
-#include <QtCore/qiodevice.h>
-#include <QtCore/qlocale.h>
-#include <QtCore/qstack.h>
-#include <QtCore/qxmlstream.h>
+#include <qbytearray.h>
+#include <qdatetime.h>
+#include <qdebug.h>
+#include <qdir.h>
+#include <qdiriterator.h>
+#include <qfile.h>
+#include <qiodevice.h>
+#include <qlocale.h>
+#include <qstack.h>
+#include <qxmlstream.h>
#include <algorithm>
+#if QT_CONFIG(zstd)
+# include <zstd.h>
+#endif
+
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
enum {
CONSTANT_USENAMESPACE = 1,
CONSTANT_COMPRESSLEVEL_DEFAULT = -1,
+ CONSTANT_ZSTDCOMPRESSLEVEL_CHECK = 1, // Zstd level to check if compressing is a good idea
+ CONSTANT_ZSTDCOMPRESSLEVEL_STORE = 14, // Zstd level to actually store the data
CONSTANT_COMPRESSTHRESHOLD_DEFAULT = 70
};
-
-#define writeString(s) write(s, sizeof(s))
-
void RCCResourceLibrary::write(const char *str, int len)
{
- --len; // trailing \0 on string literals...
int n = m_out.size();
m_out.resize(n + len);
memcpy(m_out.data() + n, str, len);
@@ -64,12 +44,16 @@ void RCCResourceLibrary::write(const char *str, int len)
void RCCResourceLibrary::writeByteArray(const QByteArray &other)
{
- m_out.append(other);
+ if (m_format == Pass2) {
+ m_outDevice->write(other);
+ } else {
+ m_out.append(other);
+ }
}
static inline QString msgOpenReadFailed(const QString &fname, const QString &why)
{
- return QString::fromUtf8("Unable to open %1 for reading: %2\n").arg(fname).arg(why);
+ return QString::fromLatin1("Unable to open %1 for reading: %2\n").arg(fname, why);
}
@@ -84,18 +68,25 @@ class RCCFileInfo
public:
enum Flags
{
+ // must match qresource.cpp
NoFlags = 0x00,
Compressed = 0x01,
- Directory = 0x02
+ Directory = 0x02,
+ CompressedZstd = 0x04
};
- RCCFileInfo(const QString &name = QString(), const QFileInfo &fileInfo = QFileInfo(),
- QLocale::Language language = QLocale::C,
- QLocale::Country country = QLocale::AnyCountry,
- uint flags = NoFlags,
- int compressLevel = CONSTANT_COMPRESSLEVEL_DEFAULT,
- int compressThreshold = CONSTANT_COMPRESSTHRESHOLD_DEFAULT);
+
+ RCCFileInfo() = default;
+ RCCFileInfo(const QString &name, const QFileInfo &fileInfo, QLocale::Language language,
+ QLocale::Territory territory, uint flags,
+ RCCResourceLibrary::CompressionAlgorithm compressAlgo, int compressLevel,
+ int compressThreshold, bool noZstd, bool isEmpty);
+
~RCCFileInfo();
+ RCCFileInfo(const RCCFileInfo &) = delete;
+ RCCFileInfo &operator=(const RCCFileInfo &) = delete;
+ RCCFileInfo(RCCFileInfo &&) = default;
+ RCCFileInfo &operator=(RCCFileInfo &&other) = delete;
QString resourceName() const;
@@ -104,36 +95,40 @@ public:
qint64 writeDataName(RCCResourceLibrary &, qint64 offset);
void writeDataInfo(RCCResourceLibrary &lib);
- int m_flags;
+ int m_flags = NoFlags;
+ QLocale::Language m_language = QLocale::C;
+ QLocale::Territory m_territory = QLocale::AnyTerritory;
QString m_name;
- QLocale::Language m_language;
- QLocale::Country m_country;
QFileInfo m_fileInfo;
- RCCFileInfo *m_parent;
- QHash<QString, RCCFileInfo*> m_children;
- int m_compressLevel;
- int m_compressThreshold;
-
- qint64 m_nameOffset;
- qint64 m_dataOffset;
- qint64 m_childOffset;
+ RCCFileInfo *m_parent = nullptr;
+ QMultiHash<QString, RCCFileInfo *> m_children;
+
+ RCCResourceLibrary::CompressionAlgorithm m_compressAlgo = RCCResourceLibrary::CompressionAlgorithm::Best;
+ int m_compressLevel = CONSTANT_COMPRESSLEVEL_DEFAULT;
+ int m_compressThreshold = CONSTANT_COMPRESSTHRESHOLD_DEFAULT;
+ bool m_noZstd = false;
+ bool m_isEmpty = false;
+
+ qint64 m_nameOffset = 0;
+ qint64 m_dataOffset = 0;
+ qint64 m_childOffset = 0;
};
-RCCFileInfo::RCCFileInfo(const QString &name, const QFileInfo &fileInfo,
- QLocale::Language language, QLocale::Country country, uint flags,
- int compressLevel, int compressThreshold)
+RCCFileInfo::RCCFileInfo(const QString &name, const QFileInfo &fileInfo, QLocale::Language language,
+ QLocale::Territory territory, uint flags,
+ RCCResourceLibrary::CompressionAlgorithm compressAlgo, int compressLevel,
+ int compressThreshold, bool noZstd, bool isEmpty)
+ : m_flags(flags),
+ m_language(language),
+ m_territory(territory),
+ m_name(name),
+ m_fileInfo(fileInfo),
+ m_compressAlgo(compressAlgo),
+ m_compressLevel(compressLevel),
+ m_compressThreshold(compressThreshold),
+ m_noZstd(noZstd),
+ m_isEmpty(isEmpty)
{
- m_name = name;
- m_fileInfo = fileInfo;
- m_language = language;
- m_country = country;
- m_flags = flags;
- m_parent = nullptr;
- m_nameOffset = 0;
- m_dataOffset = 0;
- m_childOffset = 0;
- m_compressLevel = compressLevel;
- m_compressThreshold = compressThreshold;
}
RCCFileInfo::~RCCFileInfo()
@@ -145,20 +140,23 @@ QString RCCFileInfo::resourceName() const
{
QString resource = m_name;
for (RCCFileInfo *p = m_parent; p; p = p->m_parent)
- resource = resource.prepend(p->m_name + QLatin1Char('/'));
- return QLatin1Char(':') + resource;
+ resource = resource.prepend(p->m_name + u'/');
+ resource.prepend(u':');
+ return resource;
}
void RCCFileInfo::writeDataInfo(RCCResourceLibrary &lib)
{
- const bool text = (lib.m_format == RCCResourceLibrary::C_Code);
+ const bool text = lib.m_format == RCCResourceLibrary::C_Code;
+ const bool pass1 = lib.m_format == RCCResourceLibrary::Pass1;
+ const bool python = lib.m_format == RCCResourceLibrary::Python_Code;
//some info
- if (text) {
+ if (text || pass1) {
if (m_language != QLocale::C) {
lib.writeString(" // ");
lib.writeByteArray(resourceName().toLocal8Bit());
lib.writeString(" [");
- lib.writeByteArray(QByteArray::number(m_country));
+ lib.writeByteArray(QByteArray::number(m_territory));
lib.writeString("::");
lib.writeByteArray(QByteArray::number(m_language));
lib.writeString("[\n ");
@@ -190,120 +188,228 @@ void RCCFileInfo::writeDataInfo(RCCResourceLibrary &lib)
lib.writeNumber2(m_flags);
// locale
- lib.writeNumber2(m_country);
+ lib.writeNumber2(m_territory);
lib.writeNumber2(m_language);
//data offset
lib.writeNumber4(m_dataOffset);
}
- if (text)
+ if (text || pass1)
lib.writeChar('\n');
+ else if (python)
+ lib.writeString("\\\n");
+
+ if (lib.formatVersion() >= 2) {
+ // last modified time stamp
+ const QDateTime lastModified = m_fileInfo.lastModified(QTimeZone::UTC);
+ quint64 lastmod = quint64(lastModified.isValid() ? lastModified.toMSecsSinceEpoch() : 0);
+ static const quint64 sourceDate = 1000 * qgetenv("QT_RCC_SOURCE_DATE_OVERRIDE").toULongLong();
+ if (sourceDate != 0)
+ lastmod = sourceDate;
+ static const quint64 sourceDate2 = 1000 * qgetenv("SOURCE_DATE_EPOCH").toULongLong();
+ if (sourceDate2 != 0)
+ lastmod = sourceDate2;
+ lib.writeNumber8(lastmod);
+ if (text || pass1)
+ lib.writeChar('\n');
+ else if (python)
+ lib.writeString("\\\n");
+ }
}
qint64 RCCFileInfo::writeDataBlob(RCCResourceLibrary &lib, qint64 offset,
QString *errorMessage)
{
- const bool text = (lib.m_format == RCCResourceLibrary::C_Code);
+ const bool text = lib.m_format == RCCResourceLibrary::C_Code;
+ const bool pass1 = lib.m_format == RCCResourceLibrary::Pass1;
+ const bool pass2 = lib.m_format == RCCResourceLibrary::Pass2;
+ const bool binary = lib.m_format == RCCResourceLibrary::Binary;
+ const bool python = lib.m_format == RCCResourceLibrary::Python_Code;
//capture the offset
m_dataOffset = offset;
+ QByteArray data;
+
+ if (!m_isEmpty) {
+ //find the data to be written
+ QFile file(m_fileInfo.absoluteFilePath());
+ if (!file.open(QFile::ReadOnly)) {
+ *errorMessage = msgOpenReadFailed(m_fileInfo.absoluteFilePath(), file.errorString());
+ return 0;
+ }
- //find the data to be written
- QFile file(m_fileInfo.absoluteFilePath());
- if (!file.open(QFile::ReadOnly)) {
- *errorMessage = msgOpenReadFailed(m_fileInfo.absoluteFilePath(), file.errorString());
- return 0;
+ data = file.readAll();
}
- QByteArray data = file.readAll();
-#ifndef QT_NO_COMPRESS
// Check if compression is useful for this file
- if (m_compressLevel != 0 && data.size() != 0) {
- QByteArray compressed =
- qCompress(reinterpret_cast<uchar *>(data.data()), data.size(), m_compressLevel);
-
- int compressRatio = int(100.0 * (data.size() - compressed.size()) / data.size());
- if (compressRatio >= m_compressThreshold) {
- data = compressed;
- m_flags |= Compressed;
+ if (data.size() != 0) {
+#if QT_CONFIG(zstd)
+ if (m_compressAlgo == RCCResourceLibrary::CompressionAlgorithm::Best && !m_noZstd) {
+ m_compressAlgo = RCCResourceLibrary::CompressionAlgorithm::Zstd;
+ m_compressLevel = 19; // not ZSTD_maxCLevel(), as 20+ are experimental
+ }
+ if (m_compressAlgo == RCCResourceLibrary::CompressionAlgorithm::Zstd && !m_noZstd) {
+ if (lib.m_zstdCCtx == nullptr)
+ lib.m_zstdCCtx = ZSTD_createCCtx();
+ qsizetype size = data.size();
+ size = ZSTD_COMPRESSBOUND(size);
+
+ int compressLevel = m_compressLevel;
+ if (compressLevel < 0)
+ compressLevel = CONSTANT_ZSTDCOMPRESSLEVEL_CHECK;
+
+ QByteArray compressed(size, Qt::Uninitialized);
+ char *dst = const_cast<char *>(compressed.constData());
+ size_t n = ZSTD_compressCCtx(lib.m_zstdCCtx, dst, size,
+ data.constData(), data.size(),
+ compressLevel);
+ if (n * 100.0 < data.size() * 1.0 * (100 - m_compressThreshold) ) {
+ // compressing is worth it
+ if (m_compressLevel < 0) {
+ // heuristic compression, so recompress
+ n = ZSTD_compressCCtx(lib.m_zstdCCtx, dst, size,
+ data.constData(), data.size(),
+ CONSTANT_ZSTDCOMPRESSLEVEL_STORE);
+ }
+ if (ZSTD_isError(n)) {
+ QString msg = QString::fromLatin1("%1: error: compression with zstd failed: %2\n")
+ .arg(m_name, QString::fromUtf8(ZSTD_getErrorName(n)));
+ lib.m_errorDevice->write(msg.toUtf8());
+ } else if (lib.verbose()) {
+ QString msg = QString::fromLatin1("%1: note: compressed using zstd (%2 -> %3)\n")
+ .arg(m_name).arg(data.size()).arg(n);
+ lib.m_errorDevice->write(msg.toUtf8());
+ }
+
+ lib.m_overallFlags |= CompressedZstd;
+ m_flags |= CompressedZstd;
+ data = std::move(compressed);
+ data.truncate(n);
+ } else if (lib.verbose()) {
+ QString msg = QString::fromLatin1("%1: note: not compressed\n").arg(m_name);
+ lib.m_errorDevice->write(msg.toUtf8());
+ }
+ }
+#endif
+#ifndef QT_NO_COMPRESS
+ if (m_compressAlgo == RCCResourceLibrary::CompressionAlgorithm::Best) {
+ m_compressAlgo = RCCResourceLibrary::CompressionAlgorithm::Zlib;
+ m_compressLevel = 9;
+ }
+ if (m_compressAlgo == RCCResourceLibrary::CompressionAlgorithm::Zlib) {
+ QByteArray compressed =
+ qCompress(reinterpret_cast<uchar *>(data.data()), data.size(), m_compressLevel);
+
+ int compressRatio = int(100.0 * (data.size() - compressed.size()) / data.size());
+ if (compressRatio >= m_compressThreshold) {
+ if (lib.verbose()) {
+ QString msg = QString::fromLatin1("%1: note: compressed using zlib (%2 -> %3)\n")
+ .arg(m_name).arg(data.size()).arg(compressed.size());
+ lib.m_errorDevice->write(msg.toUtf8());
+ }
+ data = compressed;
+ lib.m_overallFlags |= Compressed;
+ m_flags |= Compressed;
+ } else if (lib.verbose()) {
+ QString msg = QString::fromLatin1("%1: note: not compressed\n").arg(m_name);
+ lib.m_errorDevice->write(msg.toUtf8());
+ }
}
- }
#endif // QT_NO_COMPRESS
+ }
// some info
- if (text) {
+ if (text || pass1) {
lib.writeString(" // ");
lib.writeByteArray(m_fileInfo.absoluteFilePath().toLocal8Bit());
lib.writeString("\n ");
}
// write the length
-
- lib.writeNumber4(data.size());
- if (text)
+ if (text || binary || pass2 || python)
+ lib.writeNumber4(data.size());
+ if (text || pass1)
lib.writeString("\n ");
+ else if (python)
+ lib.writeString("\\\n");
offset += 4;
// write the payload
const char *p = data.constData();
- if (text) {
+ if (text || python) {
for (int i = data.size(), j = 0; --i >= 0; --j) {
lib.writeHex(*p++);
if (j == 0) {
- lib.writeString("\n ");
+ if (text)
+ lib.writeString("\n ");
+ else
+ lib.writeString("\\\n");
j = 16;
}
}
- } else {
- for (int i = data.size(); --i >= 0; )
- lib.writeChar(*p++);
+ } else if (binary || pass2) {
+ lib.writeByteArray(data);
}
offset += data.size();
// done
- if (text)
+ if (text || pass1)
lib.writeString("\n ");
+ else if (python)
+ lib.writeString("\\\n");
+
return offset;
}
qint64 RCCFileInfo::writeDataName(RCCResourceLibrary &lib, qint64 offset)
{
- const bool text = (lib.m_format == RCCResourceLibrary::C_Code);
+ const bool text = lib.m_format == RCCResourceLibrary::C_Code;
+ const bool pass1 = lib.m_format == RCCResourceLibrary::Pass1;
+ const bool python = lib.m_format == RCCResourceLibrary::Python_Code;
// capture the offset
m_nameOffset = offset;
// some info
- if (text) {
+ if (text || pass1) {
lib.writeString(" // ");
lib.writeByteArray(m_name.toLocal8Bit());
lib.writeString("\n ");
}
// write the length
- lib.writeNumber2(m_name.length());
- if (text)
+ lib.writeNumber2(m_name.size());
+ if (text || pass1)
lib.writeString("\n ");
+ else if (python)
+ lib.writeString("\\\n");
offset += 2;
// write the hash
lib.writeNumber4(qt_hash(m_name));
- if (text)
+ if (text || pass1)
lib.writeString("\n ");
+ else if (python)
+ lib.writeString("\\\n");
offset += 4;
// write the m_name
const QChar *unicode = m_name.unicode();
- for (int i = 0; i < m_name.length(); ++i) {
+ for (int i = 0; i < m_name.size(); ++i) {
lib.writeNumber2(unicode[i].unicode());
- if (text && i % 16 == 0)
+ if ((text || pass1) && i % 16 == 0)
lib.writeString("\n ");
+ else if (python && i % 16 == 0)
+ lib.writeString("\\\n");
}
- offset += m_name.length()*2;
+ offset += m_name.size()*2;
// done
- if (text)
+ if (text || pass1)
lib.writeString("\n ");
+ else if (python)
+ lib.writeString("\\\n");
+
return offset;
}
@@ -315,35 +421,48 @@ qint64 RCCFileInfo::writeDataName(RCCResourceLibrary &lib, qint64 offset)
///////////////////////////////////////////////////////////
RCCResourceLibrary::Strings::Strings() :
- TAG_RCC(QLatin1String("RCC")),
- TAG_RESOURCE(QLatin1String("qresource")),
- TAG_FILE(QLatin1String("file")),
- ATTRIBUTE_LANG(QLatin1String("lang")),
- ATTRIBUTE_PREFIX(QLatin1String("prefix")),
- ATTRIBUTE_ALIAS(QLatin1String("alias")),
- ATTRIBUTE_THRESHOLD(QLatin1String("threshold")),
- ATTRIBUTE_COMPRESS(QLatin1String("compress"))
+ TAG_RCC("RCC"_L1),
+ TAG_RESOURCE("qresource"_L1),
+ TAG_FILE("file"_L1),
+ ATTRIBUTE_LANG("lang"_L1),
+ ATTRIBUTE_PREFIX("prefix"_L1),
+ ATTRIBUTE_ALIAS("alias"_L1),
+ ATTRIBUTE_EMPTY("empty"_L1),
+ ATTRIBUTE_THRESHOLD("threshold"_L1),
+ ATTRIBUTE_COMPRESS("compress"_L1),
+ ATTRIBUTE_COMPRESSALGO(QStringLiteral("compression-algorithm"))
{
}
-RCCResourceLibrary::RCCResourceLibrary()
+RCCResourceLibrary::RCCResourceLibrary(quint8 formatVersion)
: m_root(nullptr),
m_format(C_Code),
m_verbose(false),
+ m_compressionAlgo(CompressionAlgorithm::Best),
m_compressLevel(CONSTANT_COMPRESSLEVEL_DEFAULT),
m_compressThreshold(CONSTANT_COMPRESSTHRESHOLD_DEFAULT),
m_treeOffset(0),
m_namesOffset(0),
m_dataOffset(0),
+ m_overallFlags(0),
m_useNameSpace(CONSTANT_USENAMESPACE),
- m_errorDevice(0)
+ m_errorDevice(nullptr),
+ m_outDevice(nullptr),
+ m_formatVersion(formatVersion),
+ m_noZstd(false)
{
m_out.reserve(30 * 1000 * 1000);
+#if QT_CONFIG(zstd)
+ m_zstdCCtx = nullptr;
+#endif
}
RCCResourceLibrary::~RCCResourceLibrary()
{
delete m_root;
+#if QT_CONFIG(zstd)
+ ZSTD_freeCCtx(m_zstdCCtx);
+#endif
}
enum RCCXmlTag {
@@ -351,12 +470,24 @@ enum RCCXmlTag {
ResourceTag,
FileTag
};
+Q_DECLARE_TYPEINFO(RCCXmlTag, Q_PRIMITIVE_TYPE);
+
+static bool parseBoolean(QStringView value, QString *errorMsg)
+{
+ if (value.compare("true"_L1, Qt::CaseInsensitive) == 0)
+ return true;
+ if (value.compare("false"_L1, Qt::CaseInsensitive) == 0)
+ return false;
+
+ *errorMsg = QString::fromLatin1("Invalid value for boolean attribute: '%1'").arg(value);
+ return false;
+}
bool RCCResourceLibrary::interpretResourceFile(QIODevice *inputDevice,
- const QString &fname, QString currentPath, bool ignoreErrors)
+ const QString &fname, QString currentPath, bool listMode)
{
Q_ASSERT(m_errorDevice);
- const QChar slash = QLatin1Char('/');
+ const QChar slash = u'/';
if (!currentPath.isEmpty() && !currentPath.endsWith(slash))
currentPath += slash;
@@ -365,8 +496,10 @@ bool RCCResourceLibrary::interpretResourceFile(QIODevice *inputDevice,
QString prefix;
QLocale::Language language = QLocale::c().language();
- QLocale::Country country = QLocale::c().country();
+ QLocale::Territory territory = QLocale::c().territory();
QString alias;
+ bool empty = false;
+ auto compressAlgo = m_compressionAlgo;
int compressLevel = m_compressLevel;
int compressThreshold = m_compressThreshold;
@@ -376,28 +509,28 @@ bool RCCResourceLibrary::interpretResourceFile(QIODevice *inputDevice,
case QXmlStreamReader::StartElement:
if (reader.name() == m_strings.TAG_RCC) {
if (!tokens.isEmpty())
- reader.raiseError(QLatin1String("expected <RCC> tag"));
+ reader.raiseError("expected <RCC> tag"_L1);
else
tokens.push(RccTag);
} else if (reader.name() == m_strings.TAG_RESOURCE) {
if (tokens.isEmpty() || tokens.top() != RccTag) {
- reader.raiseError(QLatin1String("unexpected <RESOURCE> tag"));
+ reader.raiseError("unexpected <RESOURCE> tag"_L1);
} else {
tokens.push(ResourceTag);
QXmlStreamAttributes attributes = reader.attributes();
language = QLocale::c().language();
- country = QLocale::c().country();
+ territory = QLocale::c().territory();
if (attributes.hasAttribute(m_strings.ATTRIBUTE_LANG)) {
QString attribute = attributes.value(m_strings.ATTRIBUTE_LANG).toString();
QLocale lang = QLocale(attribute);
language = lang.language();
- if (2 == attribute.length()) {
+ if (2 == attribute.size()) {
// Language only
- country = QLocale::AnyCountry;
+ territory = QLocale::AnyTerritory;
} else {
- country = lang.country();
+ territory = lang.territory();
}
}
@@ -411,7 +544,7 @@ bool RCCResourceLibrary::interpretResourceFile(QIODevice *inputDevice,
}
} else if (reader.name() == m_strings.TAG_FILE) {
if (tokens.isEmpty() || tokens.top() != ResourceTag) {
- reader.raiseError(QLatin1String("unexpected <FILE> tag"));
+ reader.raiseError("unexpected <FILE> tag"_L1);
} else {
tokens.push(FileTag);
@@ -420,20 +553,35 @@ bool RCCResourceLibrary::interpretResourceFile(QIODevice *inputDevice,
if (attributes.hasAttribute(m_strings.ATTRIBUTE_ALIAS))
alias = attributes.value(m_strings.ATTRIBUTE_ALIAS).toString();
+ compressAlgo = m_compressionAlgo;
compressLevel = m_compressLevel;
- if (attributes.hasAttribute(m_strings.ATTRIBUTE_COMPRESS))
- compressLevel = attributes.value(m_strings.ATTRIBUTE_COMPRESS).toString().toInt();
-
compressThreshold = m_compressThreshold;
+
+ QString errorString;
+ if (attributes.hasAttribute(m_strings.ATTRIBUTE_EMPTY))
+ empty = parseBoolean(attributes.value(m_strings.ATTRIBUTE_EMPTY), &errorString);
+ else
+ empty = false;
+
+ if (attributes.hasAttribute(m_strings.ATTRIBUTE_COMPRESSALGO))
+ compressAlgo = parseCompressionAlgorithm(attributes.value(m_strings.ATTRIBUTE_COMPRESSALGO), &errorString);
+ if (errorString.isEmpty() && attributes.hasAttribute(m_strings.ATTRIBUTE_COMPRESS)) {
+ QString value = attributes.value(m_strings.ATTRIBUTE_COMPRESS).toString();
+ compressLevel = parseCompressionLevel(compressAlgo, value, &errorString);
+ }
+
+ // Special case for -no-compress
+ if (m_compressLevel == -2)
+ compressAlgo = CompressionAlgorithm::None;
+
if (attributes.hasAttribute(m_strings.ATTRIBUTE_THRESHOLD))
compressThreshold = attributes.value(m_strings.ATTRIBUTE_THRESHOLD).toString().toInt();
- // Special case for -no-compress. Overrides all other settings.
- if (m_compressLevel == -2)
- compressLevel = 0;
+ if (!errorString.isEmpty())
+ reader.raiseError(errorString);
}
} else {
- reader.raiseError(QString(QLatin1String("unexpected tag: %1")).arg(reader.name().toString()));
+ reader.raiseError("unexpected tag: %1"_L1.arg(reader.name().toString()));
}
break;
@@ -442,17 +590,17 @@ bool RCCResourceLibrary::interpretResourceFile(QIODevice *inputDevice,
if (!tokens.isEmpty() && tokens.top() == RccTag)
tokens.pop();
else
- reader.raiseError(QLatin1String("unexpected closing tag"));
+ reader.raiseError("unexpected closing tag"_L1);
} else if (reader.name() == m_strings.TAG_RESOURCE) {
if (!tokens.isEmpty() && tokens.top() == ResourceTag)
tokens.pop();
else
- reader.raiseError(QLatin1String("unexpected closing tag"));
+ reader.raiseError("unexpected closing tag"_L1);
} else if (reader.name() == m_strings.TAG_FILE) {
if (!tokens.isEmpty() && tokens.top() == FileTag)
tokens.pop();
else
- reader.raiseError(QLatin1String("unexpected closing tag"));
+ reader.raiseError("unexpected closing tag"_L1);
}
break;
@@ -460,7 +608,7 @@ bool RCCResourceLibrary::interpretResourceFile(QIODevice *inputDevice,
if (reader.isWhitespace())
break;
if (tokens.isEmpty() || tokens.top() != FileTag) {
- reader.raiseError(QLatin1String("unexpected text"));
+ reader.raiseError("unexpected text"_L1);
} else {
QString fileName = reader.text().toString();
if (fileName.isEmpty()) {
@@ -472,7 +620,7 @@ bool RCCResourceLibrary::interpretResourceFile(QIODevice *inputDevice,
alias = fileName;
alias = QDir::cleanPath(alias);
- while (alias.startsWith(QLatin1String("../")))
+ while (alias.startsWith("../"_L1))
alias.remove(0, 3);
alias = QDir::cleanPath(m_resourceRoot) + prefix + alias;
@@ -480,58 +628,62 @@ bool RCCResourceLibrary::interpretResourceFile(QIODevice *inputDevice,
if (QDir::isRelativePath(absFileName))
absFileName.prepend(currentPath);
QFileInfo file(absFileName);
- if (!file.exists()) {
- m_failedResources.push_back(absFileName);
- const QString msg = QString::fromLatin1("RCC: Error in '%1': Cannot find file '%2'\n").arg(fname).arg(fileName);
- m_errorDevice->write(msg.toUtf8());
- if (ignoreErrors)
- continue;
- else
- return false;
- } else if (file.isFile()) {
+ if (file.isDir()) {
+ QDir dir(file.filePath());
+ if (!alias.endsWith(slash))
+ alias += slash;
+
+ QStringList filePaths;
+ QDirIterator it(dir, QDirIterator::FollowSymlinks|QDirIterator::Subdirectories);
+ while (it.hasNext()) {
+ it.next();
+ if (it.fileName() == "."_L1 || it.fileName() == ".."_L1)
+ continue;
+ filePaths.append(it.filePath());
+ }
+
+ // make rcc output deterministic
+ std::sort(filePaths.begin(), filePaths.end());
+
+ for (const QString &filePath : filePaths) {
+ QFileInfo child(filePath);
+ const bool arc =
+ addFile(alias + child.fileName(),
+ RCCFileInfo(child.fileName(), child, language, territory,
+ child.isDir() ? RCCFileInfo::Directory
+ : RCCFileInfo::NoFlags,
+ compressAlgo, compressLevel, compressThreshold,
+ m_noZstd, empty));
+ if (!arc)
+ m_failedResources.push_back(child.fileName());
+ }
+ } else if (listMode || file.isFile()) {
const bool arc =
addFile(alias,
RCCFileInfo(alias.section(slash, -1),
file,
language,
- country,
+ territory,
RCCFileInfo::NoFlags,
+ compressAlgo,
compressLevel,
- compressThreshold)
+ compressThreshold,
+ m_noZstd, empty)
);
if (!arc)
m_failedResources.push_back(absFileName);
+ } else if (file.exists()) {
+ m_failedResources.push_back(absFileName);
+ const QString msg = QString::fromLatin1("RCC: Error in '%1': Entry '%2' is neither a file nor a directory\n")
+ .arg(fname, fileName);
+ m_errorDevice->write(msg.toUtf8());
+ return false;
} else {
- QDir dir;
- if (file.isDir()) {
- dir.setPath(file.filePath());
- } else {
- dir.setPath(file.path());
- dir.setNameFilters(QStringList(file.fileName()));
- if (alias.endsWith(file.fileName()))
- alias = alias.left(alias.length()-file.fileName().length());
- }
- if (!alias.endsWith(slash))
- alias += slash;
- QDirIterator it(dir, QDirIterator::FollowSymlinks|QDirIterator::Subdirectories);
- while (it.hasNext()) {
- it.next();
- QFileInfo child(it.fileInfo());
- if (child.fileName() != QLatin1String(".") && child.fileName() != QLatin1String("..")) {
- const bool arc =
- addFile(alias + child.fileName(),
- RCCFileInfo(child.fileName(),
- child,
- language,
- country,
- RCCFileInfo::NoFlags,
- compressLevel,
- compressThreshold)
- );
- if (!arc)
- m_failedResources.push_back(child.fileName());
- }
- }
+ m_failedResources.push_back(absFileName);
+ const QString msg = QString::fromLatin1("RCC: Error in '%1': Cannot find file '%2'\n")
+ .arg(fname, fileName);
+ m_errorDevice->write(msg.toUtf8());
+ return false;
}
}
break;
@@ -542,8 +694,6 @@ bool RCCResourceLibrary::interpretResourceFile(QIODevice *inputDevice,
}
if (reader.hasError()) {
- if (ignoreErrors)
- return true;
int errorLine = reader.lineNumber();
int errorColumn = reader.columnNumber();
QString errorMessage = reader.errorString();
@@ -553,37 +703,41 @@ bool RCCResourceLibrary::interpretResourceFile(QIODevice *inputDevice,
}
if (m_root == nullptr) {
- const QString msg = QString::fromUtf8("RCC: Warning: No resources in '%1'.\n").arg(fname);
+ const QString msg = QString::fromLatin1("RCC: Warning: No resources in '%1'.\n").arg(fname);
m_errorDevice->write(msg.toUtf8());
- if (!ignoreErrors && m_format == Binary) {
+ if (!listMode && m_format == Binary) {
// create dummy entry, otherwise loading with QResource will crash
- m_root = new RCCFileInfo(QString(), QFileInfo(),
- QLocale::C, QLocale::AnyCountry, RCCFileInfo::Directory);
+ m_root = new RCCFileInfo{};
+ m_root->m_flags = RCCFileInfo::Directory;
}
}
return true;
}
-bool RCCResourceLibrary::addFile(const QString &alias, const RCCFileInfo &file)
+bool RCCResourceLibrary::addFile(const QString &alias, RCCFileInfo file)
{
Q_ASSERT(m_errorDevice);
if (file.m_fileInfo.size() > 0xffffffff) {
- const QString msg = QString::fromUtf8("File too big: %1\n").arg(file.m_fileInfo.absoluteFilePath());
+ const QString msg = QString::fromLatin1("File too big: %1\n").arg(file.m_fileInfo.absoluteFilePath());
m_errorDevice->write(msg.toUtf8());
return false;
}
- if (!m_root)
- m_root = new RCCFileInfo(QString(), QFileInfo(), QLocale::C, QLocale::AnyCountry, RCCFileInfo::Directory);
+ if (!m_root) {
+ m_root = new RCCFileInfo{};
+ m_root->m_flags = RCCFileInfo::Directory;
+ }
RCCFileInfo *parent = m_root;
- const QStringList nodes = alias.split(QLatin1Char('/'));
+ const QStringList nodes = alias.split(u'/');
for (int i = 1; i < nodes.size()-1; ++i) {
const QString node = nodes.at(i);
if (node.isEmpty())
continue;
if (!parent->m_children.contains(node)) {
- RCCFileInfo *s = new RCCFileInfo(node, QFileInfo(), QLocale::C, QLocale::AnyCountry, RCCFileInfo::Directory);
+ RCCFileInfo *s = new RCCFileInfo{};
+ s->m_name = node;
+ s->m_flags = RCCFileInfo::Directory;
s->m_parent = parent;
parent->m_children.insert(node, s);
parent = s;
@@ -593,12 +747,18 @@ bool RCCResourceLibrary::addFile(const QString &alias, const RCCFileInfo &file)
}
const QString filename = nodes.at(nodes.size()-1);
- RCCFileInfo *s = new RCCFileInfo(file);
+ RCCFileInfo *s = new RCCFileInfo(std::move(file));
s->m_parent = parent;
- if (parent->m_children.contains(filename)) {
- for (const QString &fileName : qAsConst(m_fileNames)) {
- qWarning("%s: Warning: potential duplicate alias detected: '%s'",
- qPrintable(fileName), qPrintable(filename));
+ auto cbegin = parent->m_children.constFind(filename);
+ auto cend = parent->m_children.constEnd();
+ for (auto it = cbegin; it != cend; ++it) {
+ if (it.key() == filename && it.value()->m_language == s->m_language &&
+ it.value()->m_territory == s->m_territory) {
+ for (const QString &name : std::as_const(m_fileNames)) {
+ qWarning("%s: Warning: potential duplicate alias detected: '%s'",
+ qPrintable(name), qPrintable(filename));
+ }
+ break;
}
}
parent->m_children.insert(filename, s);
@@ -616,22 +776,22 @@ void RCCResourceLibrary::reset()
}
-bool RCCResourceLibrary::readFiles(bool ignoreErrors, QIODevice &errorDevice)
+bool RCCResourceLibrary::readFiles(bool listMode, QIODevice &errorDevice)
{
reset();
m_errorDevice = &errorDevice;
//read in data
if (m_verbose) {
- const QString msg = QString::fromUtf8("Processing %1 files [%2]\n")
- .arg(m_fileNames.size()).arg(static_cast<int>(ignoreErrors));
+ const QString msg = QString::fromLatin1("Processing %1 files [listMode=%2]\n")
+ .arg(m_fileNames.size()).arg(static_cast<int>(listMode));
m_errorDevice->write(msg.toUtf8());
}
for (int i = 0; i < m_fileNames.size(); ++i) {
QFile fileIn;
QString fname = m_fileNames.at(i);
QString pwd;
- if (fname == QLatin1String("-")) {
- fname = QLatin1String("(stdin)");
+ if (fname == "-"_L1) {
+ fname = "(stdin)"_L1;
pwd = QDir::currentPath();
fileIn.setFileName(fname);
if (!fileIn.open(stdin, QIODevice::ReadOnly)) {
@@ -647,11 +807,11 @@ bool RCCResourceLibrary::readFiles(bool ignoreErrors, QIODevice &errorDevice)
}
}
if (m_verbose) {
- const QString msg = QString::fromUtf8("Interpreting %1\n").arg(fname);
+ const QString msg = QString::fromLatin1("Interpreting %1\n").arg(fname);
m_errorDevice->write(msg.toUtf8());
}
- if (!interpretResourceFile(&fileIn, fname, pwd, ignoreErrors))
+ if (!interpretResourceFile(&fileIn, fname, pwd, listMode))
return false;
}
return true;
@@ -667,12 +827,13 @@ QStringList RCCResourceLibrary::dataFiles() const
pending.push(m_root);
while (!pending.isEmpty()) {
RCCFileInfo *file = pending.pop();
- for (QHash<QString, RCCFileInfo*>::iterator it = file->m_children.begin();
+ for (auto it = file->m_children.begin();
it != file->m_children.end(); ++it) {
RCCFileInfo *child = it.value();
if (child->m_flags & RCCFileInfo::Directory)
pending.push(child);
- ret.append(child->m_fileInfo.filePath());
+ else
+ ret.append(child->m_fileInfo.filePath());
}
}
return ret;
@@ -681,12 +842,11 @@ QStringList RCCResourceLibrary::dataFiles() const
// Determine map of resource identifier (':/newPrefix/images/p1.png') to file via recursion
static void resourceDataFileMapRecursion(const RCCFileInfo *m_root, const QString &path, RCCResourceLibrary::ResourceDataFileMap &m)
{
- const QChar slash = QLatin1Char('/');
- for (auto it = m_root->m_children.constBegin(), cend = m_root->m_children.constEnd(); it != cend; ++it) {
+ const QChar slash = u'/';
+ const auto cend = m_root->m_children.constEnd();
+ for (auto it = m_root->m_children.constBegin(); it != cend; ++it) {
const RCCFileInfo *child = it.value();
- QString childName = path;
- childName += slash;
- childName += child->m_name;
+ const QString childName = path + slash + child->m_name;
if (child->m_flags & RCCFileInfo::Directory) {
resourceDataFileMapRecursion(child, childName, m);
} else {
@@ -699,13 +859,100 @@ RCCResourceLibrary::ResourceDataFileMap RCCResourceLibrary::resourceDataFileMap(
{
ResourceDataFileMap rc;
if (m_root)
- resourceDataFileMapRecursion(m_root, QString(QLatin1Char(':')), rc);
+ resourceDataFileMapRecursion(m_root, QString(u':'), rc);
return rc;
}
-bool RCCResourceLibrary::output(QIODevice &outDevice, QIODevice &errorDevice)
+RCCResourceLibrary::CompressionAlgorithm RCCResourceLibrary::parseCompressionAlgorithm(QStringView value, QString *errorMsg)
+{
+ if (value == "best"_L1)
+ return CompressionAlgorithm::Best;
+ if (value == "zlib"_L1) {
+#ifdef QT_NO_COMPRESS
+ *errorMsg = "zlib support not compiled in"_L1;
+#else
+ return CompressionAlgorithm::Zlib;
+#endif
+ } else if (value == "zstd"_L1) {
+#if QT_CONFIG(zstd)
+ return CompressionAlgorithm::Zstd;
+#else
+ *errorMsg = "Zstandard support not compiled in"_L1;
+#endif
+ } else if (value != "none"_L1) {
+ *errorMsg = QString::fromLatin1("Unknown compression algorithm '%1'").arg(value);
+ }
+
+ return CompressionAlgorithm::None;
+}
+
+int RCCResourceLibrary::parseCompressionLevel(CompressionAlgorithm algo, const QString &level, QString *errorMsg)
+{
+ bool ok;
+ int c = level.toInt(&ok);
+ if (ok) {
+ switch (algo) {
+ case CompressionAlgorithm::None:
+ case CompressionAlgorithm::Best:
+ return 0;
+ case CompressionAlgorithm::Zlib:
+ if (c >= 1 && c <= 9)
+ return c;
+ break;
+ case CompressionAlgorithm::Zstd:
+#if QT_CONFIG(zstd)
+ if (c >= 0 && c <= ZSTD_maxCLevel())
+ return c;
+#endif
+ break;
+ }
+ }
+
+ *errorMsg = QString::fromLatin1("invalid compression level '%1'").arg(level);
+ return 0;
+}
+
+bool RCCResourceLibrary::output(QIODevice &outDevice, QIODevice &tempDevice, QIODevice &errorDevice)
{
m_errorDevice = &errorDevice;
+
+ if (m_format == Pass2) {
+ const char pattern[] = { 'Q', 'R', 'C', '_', 'D', 'A', 'T', 'A' };
+ bool foundSignature = false;
+
+ while (true) {
+ char c;
+ for (int i = 0; i < 8; ) {
+ if (!tempDevice.getChar(&c)) {
+ if (foundSignature)
+ return true;
+ m_errorDevice->write("No data signature found\n");
+ return false;
+ }
+
+ if (c != pattern[i]) {
+ for (int k = 0; k < i; ++k)
+ outDevice.putChar(pattern[k]);
+ i = 0;
+ }
+
+ if (c == pattern[i]) {
+ ++i;
+ } else {
+ outDevice.putChar(c);
+ }
+ }
+
+ m_outDevice = &outDevice;
+ quint64 start = outDevice.pos();
+ writeDataBlobs();
+ quint64 len = outDevice.pos() - start;
+
+ tempDevice.seek(tempDevice.pos() + len - 8);
+ foundSignature = true;
+ }
+ }
+
//write out
if (m_verbose)
m_errorDevice->write("Outputting code\n");
@@ -735,18 +982,44 @@ bool RCCResourceLibrary::output(QIODevice &outDevice, QIODevice &errorDevice)
return true;
}
+void RCCResourceLibrary::writeDecimal(int value)
+{
+ Q_ASSERT(m_format != RCCResourceLibrary::Binary);
+ char buf[std::numeric_limits<int>::digits10 + 2];
+ int n = snprintf(buf, sizeof(buf), "%d", value);
+ write(buf, n);
+}
+
+static const char hexDigits[] = "0123456789abcdef";
+
+inline void RCCResourceLibrary::write2HexDigits(quint8 number)
+{
+ writeChar(hexDigits[number >> 4]);
+ writeChar(hexDigits[number & 0xf]);
+}
+
void RCCResourceLibrary::writeHex(quint8 tmp)
{
- const char digits[] = "0123456789abcdef";
- writeChar('0');
- writeChar('x');
- if (tmp < 16) {
- writeChar(digits[tmp]);
- } else {
- writeChar(digits[tmp >> 4]);
- writeChar(digits[tmp & 0xf]);
+ switch (m_format) {
+ case RCCResourceLibrary::Python_Code:
+ if (tmp >= 32 && tmp < 127 && tmp != '"' && tmp != '\\') {
+ writeChar(char(tmp));
+ } else {
+ writeChar('\\');
+ writeChar('x');
+ write2HexDigits(tmp);
+ }
+ break;
+ default:
+ writeChar('0');
+ writeChar('x');
+ if (tmp < 16)
+ writeChar(hexDigits[tmp]);
+ else
+ write2HexDigits(tmp);
+ writeChar(',');
+ break;
}
- writeChar(',');
}
void RCCResourceLibrary::writeNumber2(quint16 number)
@@ -762,12 +1035,49 @@ void RCCResourceLibrary::writeNumber2(quint16 number)
void RCCResourceLibrary::writeNumber4(quint32 number)
{
- if (m_format == RCCResourceLibrary::Binary) {
+ if (m_format == RCCResourceLibrary::Pass2) {
+ m_outDevice->putChar(char(number >> 24));
+ m_outDevice->putChar(char(number >> 16));
+ m_outDevice->putChar(char(number >> 8));
+ m_outDevice->putChar(char(number));
+ } else if (m_format == RCCResourceLibrary::Binary) {
+ writeChar(number >> 24);
+ writeChar(number >> 16);
+ writeChar(number >> 8);
+ writeChar(number);
+ } else {
+ writeHex(number >> 24);
+ writeHex(number >> 16);
+ writeHex(number >> 8);
+ writeHex(number);
+ }
+}
+
+void RCCResourceLibrary::writeNumber8(quint64 number)
+{
+ if (m_format == RCCResourceLibrary::Pass2) {
+ m_outDevice->putChar(char(number >> 56));
+ m_outDevice->putChar(char(number >> 48));
+ m_outDevice->putChar(char(number >> 40));
+ m_outDevice->putChar(char(number >> 32));
+ m_outDevice->putChar(char(number >> 24));
+ m_outDevice->putChar(char(number >> 16));
+ m_outDevice->putChar(char(number >> 8));
+ m_outDevice->putChar(char(number));
+ } else if (m_format == RCCResourceLibrary::Binary) {
+ writeChar(number >> 56);
+ writeChar(number >> 48);
+ writeChar(number >> 40);
+ writeChar(number >> 32);
writeChar(number >> 24);
writeChar(number >> 16);
writeChar(number >> 8);
writeChar(number);
} else {
+ writeHex(number >> 56);
+ writeHex(number >> 48);
+ writeHex(number >> 40);
+ writeHex(number >> 32);
writeHex(number >> 24);
writeHex(number >> 16);
writeHex(number >> 8);
@@ -777,24 +1087,40 @@ void RCCResourceLibrary::writeNumber4(quint32 number)
bool RCCResourceLibrary::writeHeader()
{
- if (m_format == C_Code) {
+ switch (m_format) {
+ case C_Code:
+ case Pass1:
writeString("/****************************************************************************\n");
writeString("** Resource object code\n");
writeString("**\n");
- writeString("** Created: ");
- writeByteArray(QDateTime::currentDateTime().toString().toLatin1());
- writeString("\n** by: The Resource Compiler for Qt version ");
+ writeString("** Created by: The Resource Compiler for Qt version ");
writeByteArray(QT_VERSION_STR);
writeString("\n**\n");
writeString("** WARNING! All changes made in this file will be lost!\n");
writeString( "*****************************************************************************/\n\n");
- writeString("#include <QtCore/qglobal.h>\n\n");
- } else if (m_format == Binary) {
+ break;
+ case Python_Code:
+ writeString("# Resource object code (Python 3)\n");
+ writeString("# Created by: object code\n");
+ writeString("# Created by: The Resource Compiler for Qt version ");
+ writeByteArray(QT_VERSION_STR);
+ writeString("\n");
+ writeString("# WARNING! All changes made in this file will be lost!\n\n");
+ writeString("from PySide");
+ writeByteArray(QByteArray::number(QT_VERSION_MAJOR));
+ writeString(" import QtCore\n\n");
+ break;
+ case Binary:
writeString("qres");
writeNumber4(0);
writeNumber4(0);
writeNumber4(0);
writeNumber4(0);
+ if (m_formatVersion >= 3)
+ writeNumber4(m_overallFlags);
+ break;
+ default:
+ break;
}
return true;
}
@@ -802,22 +1128,30 @@ bool RCCResourceLibrary::writeHeader()
bool RCCResourceLibrary::writeDataBlobs()
{
Q_ASSERT(m_errorDevice);
- if (m_format == C_Code)
+ switch (m_format) {
+ case C_Code:
writeString("static const unsigned char qt_resource_data[] = {\n");
- else if (m_format == Binary)
+ break;
+ case Python_Code:
+ writeString("qt_resource_data = b\"\\\n");
+ break;
+ case Binary:
m_dataOffset = m_out.size();
- QStack<RCCFileInfo*> pending;
+ break;
+ default:
+ break;
+ }
if (!m_root)
return false;
+ QStack<RCCFileInfo*> pending;
pending.push(m_root);
qint64 offset = 0;
QString errorMessage;
while (!pending.isEmpty()) {
RCCFileInfo *file = pending.pop();
- for (QHash<QString, RCCFileInfo*>::iterator it = file->m_children.begin();
- it != file->m_children.end(); ++it) {
+ for (auto it = file->m_children.cbegin(); it != file->m_children.cend(); ++it) {
RCCFileInfo *child = it.value();
if (child->m_flags & RCCFileInfo::Directory)
pending.push(child);
@@ -830,17 +1164,42 @@ bool RCCResourceLibrary::writeDataBlobs()
}
}
}
- if (m_format == C_Code)
+ switch (m_format) {
+ case C_Code:
writeString("\n};\n\n");
+ break;
+ case Python_Code:
+ writeString("\"\n\n");
+ break;
+ case Pass1:
+ if (offset < 8)
+ offset = 8;
+ writeString("\nstatic const unsigned char qt_resource_data[");
+ writeByteArray(QByteArray::number(offset));
+ writeString("] = { 'Q', 'R', 'C', '_', 'D', 'A', 'T', 'A' };\n\n");
+ break;
+ default:
+ break;
+ }
return true;
}
bool RCCResourceLibrary::writeDataNames()
{
- if (m_format == C_Code)
+ switch (m_format) {
+ case C_Code:
+ case Pass1:
writeString("static const unsigned char qt_resource_name[] = {\n");
- else if (m_format == Binary)
+ break;
+ case Python_Code:
+ writeString("qt_resource_name = b\"\\\n");
+ break;
+ case Binary:
m_namesOffset = m_out.size();
+ break;
+ default:
+ break;
+ }
QHash<QString, int> names;
QStack<RCCFileInfo*> pending;
@@ -852,8 +1211,7 @@ bool RCCResourceLibrary::writeDataNames()
qint64 offset = 0;
while (!pending.isEmpty()) {
RCCFileInfo *file = pending.pop();
- for (QHash<QString, RCCFileInfo*>::iterator it = file->m_children.begin();
- it != file->m_children.end(); ++it) {
+ for (auto it = file->m_children.cbegin(); it != file->m_children.cend(); ++it) {
RCCFileInfo *child = it.value();
if (child->m_flags & RCCFileInfo::Directory)
pending.push(child);
@@ -865,22 +1223,46 @@ bool RCCResourceLibrary::writeDataNames()
}
}
}
- if (m_format == C_Code)
+ switch (m_format) {
+ case C_Code:
+ case Pass1:
writeString("\n};\n\n");
+ break;
+ case Python_Code:
+ writeString("\"\n\n");
+ break;
+ default:
+ break;
+ }
return true;
}
-static bool qt_rcc_compare_hash(const RCCFileInfo *left, const RCCFileInfo *right)
+struct qt_rcc_compare_hash
{
- return qt_hash(left->m_name) < qt_hash(right->m_name);
-}
+ typedef bool result_type;
+ result_type operator()(const RCCFileInfo *left, const RCCFileInfo *right) const
+ {
+ return qt_hash(left->m_name) < qt_hash(right->m_name);
+ }
+};
bool RCCResourceLibrary::writeDataStructure()
{
- if (m_format == C_Code)
+ switch (m_format) {
+ case C_Code:
+ case Pass1:
writeString("static const unsigned char qt_resource_struct[] = {\n");
- else if (m_format == Binary)
+ break;
+ case Python_Code:
+ writeString("qt_resource_struct = b\"\\\n");
+ break;
+ case Binary:
m_treeOffset = m_out.size();
+ break;
+ default:
+ break;
+ }
+
QStack<RCCFileInfo*> pending;
if (!m_root)
@@ -894,11 +1276,12 @@ bool RCCResourceLibrary::writeDataStructure()
file->m_childOffset = offset;
//sort by hash value for binary lookup
- auto children = file->m_children.values();
- std::sort(children.begin(), children.end(), qt_rcc_compare_hash);
+ QList<RCCFileInfo*> m_children = file->m_children.values();
+ std::sort(m_children.begin(), m_children.end(), qt_rcc_compare_hash());
//write out the actual data now
- for (RCCFileInfo *child : children) {
+ for (int i = 0; i < m_children.size(); ++i) {
+ RCCFileInfo *child = m_children.at(i);
++offset;
if (child->m_flags & RCCFileInfo::Directory)
pending.push(child);
@@ -912,18 +1295,28 @@ bool RCCResourceLibrary::writeDataStructure()
RCCFileInfo *file = pending.pop();
//sort by hash value for binary lookup
- auto children = file->m_children.values();
- std::sort(children.begin(), children.end(), qt_rcc_compare_hash);
+ QList<RCCFileInfo*> m_children = file->m_children.values();
+ std::sort(m_children.begin(), m_children.end(), qt_rcc_compare_hash());
//write out the actual data now
- for (RCCFileInfo *child : children) {
+ for (int i = 0; i < m_children.size(); ++i) {
+ RCCFileInfo *child = m_children.at(i);
child->writeDataInfo(*this);
if (child->m_flags & RCCFileInfo::Directory)
pending.push(child);
}
}
- if (m_format == C_Code)
+ switch (m_format) {
+ case C_Code:
+ case Pass1:
writeString("\n};\n\n");
+ break;
+ case Python_Code:
+ writeString("\"\n\n");
+ break;
+ default:
+ break;
+ }
return true;
}
@@ -931,7 +1324,7 @@ bool RCCResourceLibrary::writeDataStructure()
void RCCResourceLibrary::writeMangleNamespaceFunction(const QByteArray &name)
{
if (m_useNameSpace) {
- writeString("QT_MANGLE_NAMESPACE(");
+ writeString("QT_RCC_MANGLE_NAMESPACE(");
writeByteArray(name);
writeChar(')');
} else {
@@ -942,7 +1335,7 @@ void RCCResourceLibrary::writeMangleNamespaceFunction(const QByteArray &name)
void RCCResourceLibrary::writeAddNamespaceFunction(const QByteArray &name)
{
if (m_useNameSpace) {
- writeString("QT_PREPEND_NAMESPACE(");
+ writeString("QT_RCC_PREPEND_NAMESPACE(");
writeByteArray(name);
writeChar(')');
} else {
@@ -950,82 +1343,173 @@ void RCCResourceLibrary::writeAddNamespaceFunction(const QByteArray &name)
}
}
-static bool unacceptableChar(QChar qc)
-{
- if (qc.isDigit())
- return false;
- if (!qc.isLetter())
- return true;
- auto c = qc.toLower().toLatin1();
- return c < 'a' || c > 'z';
-}
-
bool RCCResourceLibrary::writeInitializer()
{
- if (m_format == C_Code) {
+ if (m_format == C_Code || m_format == Pass1) {
//write("\nQT_BEGIN_NAMESPACE\n");
- QString initName = m_initName;
- if (!initName.isEmpty()) {
- initName.prepend(QLatin1Char('_'));
- std::replace_if(initName.begin(), initName.end(),
- unacceptableChar, QLatin1Char('_'));
+ QString initNameStr = m_initName;
+ if (!initNameStr.isEmpty()) {
+ initNameStr.prepend(u'_');
+ auto isAsciiLetterOrNumber = [] (QChar c) -> bool {
+ ushort ch = c.unicode();
+ return (ch >= '0' && ch <= '9') ||
+ (ch >= 'A' && ch <= 'Z') ||
+ (ch >= 'a' && ch <= 'z') ||
+ ch == '_';
+ };
+ for (QChar &c : initNameStr) {
+ if (!isAsciiLetterOrNumber(c))
+ c = u'_';
+ }
}
+ QByteArray initName = initNameStr.toLatin1();
//init
- if (m_useNameSpace)
- writeString("QT_BEGIN_NAMESPACE\n\n");
+ if (m_useNameSpace) {
+ writeString("#ifdef QT_NAMESPACE\n"
+ "# define QT_RCC_PREPEND_NAMESPACE(name) ::QT_NAMESPACE::name\n"
+ "# define QT_RCC_MANGLE_NAMESPACE0(x) x\n"
+ "# define QT_RCC_MANGLE_NAMESPACE1(a, b) a##_##b\n"
+ "# define QT_RCC_MANGLE_NAMESPACE2(a, b) QT_RCC_MANGLE_NAMESPACE1(a,b)\n"
+ "# define QT_RCC_MANGLE_NAMESPACE(name) QT_RCC_MANGLE_NAMESPACE2( \\\n"
+ " QT_RCC_MANGLE_NAMESPACE0(name), QT_RCC_MANGLE_NAMESPACE0(QT_NAMESPACE))\n"
+ "#else\n"
+ "# define QT_RCC_PREPEND_NAMESPACE(name) name\n"
+ "# define QT_RCC_MANGLE_NAMESPACE(name) name\n"
+ "#endif\n\n");
+
+ writeString("#ifdef QT_NAMESPACE\n"
+ "namespace QT_NAMESPACE {\n"
+ "#endif\n\n");
+ }
+
if (m_root) {
- writeString("extern Q_CORE_EXPORT bool qRegisterResourceData\n "
+ writeString("bool qRegisterResourceData"
"(int, const unsigned char *, "
- "const unsigned char *, const unsigned char *);\n\n");
- writeString("extern Q_CORE_EXPORT bool qUnregisterResourceData\n "
+ "const unsigned char *, const unsigned char *);\n");
+ writeString("bool qUnregisterResourceData"
"(int, const unsigned char *, "
"const unsigned char *, const unsigned char *);\n\n");
+
+ if (m_overallFlags & (RCCFileInfo::Compressed | RCCFileInfo::CompressedZstd)) {
+ // use variable relocations with ELF and Mach-O
+ writeString("#if defined(__ELF__) || defined(__APPLE__)\n");
+ if (m_overallFlags & RCCFileInfo::Compressed) {
+ writeString("static inline unsigned char qResourceFeatureZlib()\n"
+ "{\n"
+ " extern const unsigned char qt_resourceFeatureZlib;\n"
+ " return qt_resourceFeatureZlib;\n"
+ "}\n");
+ }
+ if (m_overallFlags & RCCFileInfo::CompressedZstd) {
+ writeString("static inline unsigned char qResourceFeatureZstd()\n"
+ "{\n"
+ " extern const unsigned char qt_resourceFeatureZstd;\n"
+ " return qt_resourceFeatureZstd;\n"
+ "}\n");
+ }
+ writeString("#else\n");
+ if (m_overallFlags & RCCFileInfo::Compressed)
+ writeString("unsigned char qResourceFeatureZlib();\n");
+ if (m_overallFlags & RCCFileInfo::CompressedZstd)
+ writeString("unsigned char qResourceFeatureZstd();\n");
+ writeString("#endif\n\n");
+ }
}
+
if (m_useNameSpace)
- writeString("QT_END_NAMESPACE\n\n\n");
- QString initResources = QLatin1String("qInitResources");
+ writeString("#ifdef QT_NAMESPACE\n}\n#endif\n\n");
+
+ QByteArray initResources = "qInitResources";
initResources += initName;
+
+ // Work around -Wmissing-declarations warnings.
writeString("int ");
- writeMangleNamespaceFunction(initResources.toLatin1());
+ writeMangleNamespaceFunction(initResources);
+ writeString("();\n");
+
+ writeString("int ");
+ writeMangleNamespaceFunction(initResources);
writeString("()\n{\n");
if (m_root) {
- writeString(" ");
+ writeString(" int version = ");
+ writeDecimal(m_formatVersion);
+ writeString(";\n ");
writeAddNamespaceFunction("qRegisterResourceData");
- writeString("\n (0x01, qt_resource_struct, "
- "qt_resource_name, qt_resource_data);\n");
+ writeString("\n (version, qt_resource_struct, "
+ "qt_resource_name, qt_resource_data);\n");
}
writeString(" return 1;\n");
writeString("}\n\n");
- writeString("Q_CONSTRUCTOR_FUNCTION(");
- writeMangleNamespaceFunction(initResources.toLatin1());
- writeString(")\n\n");
//cleanup
- QString cleanResources = QLatin1String("qCleanupResources");
+ QByteArray cleanResources = "qCleanupResources";
cleanResources += initName;
+
+ // Work around -Wmissing-declarations warnings.
writeString("int ");
- writeMangleNamespaceFunction(cleanResources.toLatin1());
+ writeMangleNamespaceFunction(cleanResources);
+ writeString("();\n");
+
+ writeString("int ");
+ writeMangleNamespaceFunction(cleanResources);
writeString("()\n{\n");
if (m_root) {
- writeString(" ");
+ writeString(" int version = ");
+ writeDecimal(m_formatVersion);
+ writeString(";\n ");
+
+ // ODR-use certain symbols from QtCore if we require optional features
+ if (m_overallFlags & RCCFileInfo::Compressed) {
+ writeString("version += ");
+ writeAddNamespaceFunction("qResourceFeatureZlib()");
+ writeString(";\n ");
+ }
+ if (m_overallFlags & RCCFileInfo::CompressedZstd) {
+ writeString("version += ");
+ writeAddNamespaceFunction("qResourceFeatureZstd()");
+ writeString(";\n ");
+ }
+
writeAddNamespaceFunction("qUnregisterResourceData");
- writeString("\n (0x01, qt_resource_struct, "
+ writeString("\n (version, qt_resource_struct, "
"qt_resource_name, qt_resource_data);\n");
}
writeString(" return 1;\n");
writeString("}\n\n");
- writeString("Q_DESTRUCTOR_FUNCTION(");
- writeMangleNamespaceFunction(cleanResources.toLatin1());
- writeString(")\n\n");
+
+ // -Wexit-time-destructors was added to clang 3.0.0 in 2011.
+ writeString("#ifdef __clang__\n"
+ "# pragma clang diagnostic push\n"
+ "# pragma clang diagnostic ignored \"-Wexit-time-destructors\"\n"
+ "#endif\n\n");
+
+ writeString("namespace {\n"
+ " struct initializer {\n");
+
+ if (m_useNameSpace) {
+ writeByteArray(" initializer() { QT_RCC_MANGLE_NAMESPACE(" + initResources + ")(); }\n"
+ " ~initializer() { QT_RCC_MANGLE_NAMESPACE(" + cleanResources + ")(); }\n");
+ } else {
+ writeByteArray(" initializer() { " + initResources + "(); }\n"
+ " ~initializer() { " + cleanResources + "(); }\n");
+ }
+ writeString(" } dummy;\n"
+ "}\n\n");
+
+ writeString("#ifdef __clang__\n"
+ "# pragma clang diagnostic pop\n"
+ "#endif\n");
+
+
} else if (m_format == Binary) {
int i = 4;
char *p = m_out.data();
- p[i++] = 0; // 0x01
p[i++] = 0;
p[i++] = 0;
- p[i++] = 1;
+ p[i++] = 0;
+ p[i++] = m_formatVersion;
p[i++] = (m_treeOffset >> 24) & 0xff;
p[i++] = (m_treeOffset >> 16) & 0xff;
@@ -1041,6 +1525,23 @@ bool RCCResourceLibrary::writeInitializer()
p[i++] = (m_namesOffset >> 16) & 0xff;
p[i++] = (m_namesOffset >> 8) & 0xff;
p[i++] = (m_namesOffset >> 0) & 0xff;
+
+ if (m_formatVersion >= 3) {
+ p[i++] = (m_overallFlags >> 24) & 0xff;
+ p[i++] = (m_overallFlags >> 16) & 0xff;
+ p[i++] = (m_overallFlags >> 8) & 0xff;
+ p[i++] = (m_overallFlags >> 0) & 0xff;
+ }
+ } else if (m_format == Python_Code) {
+ writeString("def qInitResources():\n");
+ writeString(" QtCore.qRegisterResourceData(0x");
+ write2HexDigits(m_formatVersion);
+ writeString(", qt_resource_struct, qt_resource_name, qt_resource_data)\n\n");
+ writeString("def qCleanupResources():\n");
+ writeString(" QtCore.qUnregisterResourceData(0x");
+ write2HexDigits(m_formatVersion);
+ writeString(", qt_resource_struct, qt_resource_name, qt_resource_data)\n\n");
+ writeString("qInitResources()\n");
}
return true;
}
diff --git a/src/designer/src/lib/shared/rcc_p.h b/src/designer/src/lib/shared/rcc_p.h
index bd7e1c44c..82d17c875 100644
--- a/src/designer/src/lib/shared/rcc_p.h
+++ b/src/designer/src/lib/shared/rcc_p.h
@@ -1,30 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// Copyright (C) 2018 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -40,9 +16,11 @@
#ifndef RCC_H
#define RCC_H
-#include <QtCore/qstringlist.h>
-#include <QtCore/qhash.h>
-#include <QtCore/qstring.h>
+#include <qstringlist.h>
+#include <qhash.h>
+#include <qstring.h>
+
+typedef struct ZSTD_CCtx_s ZSTD_CCtx;
QT_BEGIN_NAMESPACE
@@ -57,14 +35,14 @@ class RCCResourceLibrary
RCCResourceLibrary &operator=(const RCCResourceLibrary &);
public:
- RCCResourceLibrary();
+ RCCResourceLibrary(quint8 formatVersion);
~RCCResourceLibrary();
- bool output(QIODevice &out, QIODevice &errorDevice);
+ bool output(QIODevice &outDevice, QIODevice &tempDevice, QIODevice &errorDevice);
- bool readFiles(bool ignoreErrors, QIODevice &errorDevice);
+ bool readFiles(bool listMode, QIODevice &errorDevice);
- enum Format { Binary, C_Code };
+ enum Format { Binary, C_Code, Pass1, Pass2, Python_Code };
void setFormat(Format f) { m_format = f; }
Format format() const { return m_format; }
@@ -83,6 +61,22 @@ public:
void setInitName(const QString &name) { m_initName = name; }
QString initName() const { return m_initName; }
+ void setOutputName(const QString &name) { m_outputName = name; }
+ QString outputName() const { return m_outputName; }
+
+ enum class CompressionAlgorithm {
+ Zlib,
+ Zstd,
+
+ Best = 99,
+ None = -1
+ };
+
+ static CompressionAlgorithm parseCompressionAlgorithm(QStringView algo, QString *errorMsg);
+ void setCompressionAlgorithm(CompressionAlgorithm algo) { m_compressionAlgo = algo; }
+ CompressionAlgorithm compressionAlgorithm() const { return m_compressionAlgo; }
+
+ static int parseCompressionLevel(CompressionAlgorithm algo, const QString &level, QString *errorMsg);
void setCompressLevel(int c) { m_compressLevel = c; }
int compressLevel() const { return m_compressLevel; }
@@ -97,6 +91,11 @@ public:
QStringList failedResources() const { return m_failedResources; }
+ int formatVersion() const { return m_formatVersion; }
+
+ void setNoZstd(bool v) { m_noZstd = v; }
+ bool noZstd() const { return m_noZstd; }
+
private:
struct Strings {
Strings();
@@ -106,14 +105,16 @@ private:
const QString ATTRIBUTE_LANG;
const QString ATTRIBUTE_PREFIX;
const QString ATTRIBUTE_ALIAS;
+ const QString ATTRIBUTE_EMPTY;
const QString ATTRIBUTE_THRESHOLD;
const QString ATTRIBUTE_COMPRESS;
+ const QString ATTRIBUTE_COMPRESSALGO;
};
friend class RCCFileInfo;
void reset();
- bool addFile(const QString &alias, const RCCFileInfo &file);
+ bool addFile(const QString &alias, RCCFileInfo file);
bool interpretResourceFile(QIODevice *inputDevice, const QString &file,
- QString currentPath = QString(), bool ignoreErrors = false);
+ QString currentPath = QString(), bool listMode = false);
bool writeHeader();
bool writeDataBlobs();
bool writeDataNames();
@@ -121,29 +122,43 @@ private:
bool writeInitializer();
void writeMangleNamespaceFunction(const QByteArray &name);
void writeAddNamespaceFunction(const QByteArray &name);
+ void writeDecimal(int value);
void writeHex(quint8 number);
+ void write2HexDigits(quint8 number);
void writeNumber2(quint16 number);
void writeNumber4(quint32 number);
+ void writeNumber8(quint64 number);
void writeChar(char c) { m_out.append(c); }
void writeByteArray(const QByteArray &);
void write(const char *, int len);
+ void writeString(const char *s) { write(s, static_cast<int>(strlen(s))); }
+
+#if QT_CONFIG(zstd)
+ ZSTD_CCtx *m_zstdCCtx;
+#endif
const Strings m_strings;
RCCFileInfo *m_root;
QStringList m_fileNames;
QString m_resourceRoot;
QString m_initName;
+ QString m_outputName;
Format m_format;
bool m_verbose;
+ CompressionAlgorithm m_compressionAlgo;
int m_compressLevel;
int m_compressThreshold;
int m_treeOffset;
int m_namesOffset;
int m_dataOffset;
+ quint32 m_overallFlags;
bool m_useNameSpace;
QStringList m_failedResources;
QIODevice *m_errorDevice;
+ QIODevice *m_outDevice;
QByteArray m_out;
+ quint8 m_formatVersion;
+ bool m_noZstd;
};
QT_END_NAMESPACE
diff --git a/src/designer/src/lib/shared/richtexteditor.cpp b/src/designer/src/lib/shared/richtexteditor.cpp
index 3818de6f7..e6b414149 100644
--- a/src/designer/src/lib/shared/richtexteditor.cpp
+++ b/src/designer/src/lib/shared/richtexteditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "richtexteditor_p.h"
#include "htmlhighlighter_p.h"
@@ -61,11 +36,15 @@
#include <QtCore/qpointer.h>
#include <QtCore/qxmlstream.h>
+#include <algorithm>
+
QT_BEGIN_NAMESPACE
-static const char RichTextDialogGroupC[] = "RichTextDialog";
-static const char GeometryKeyC[] = "Geometry";
-static const char TabKeyC[] = "Tab";
+using namespace Qt::StringLiterals;
+
+static constexpr auto RichTextDialogGroupC = "RichTextDialog"_L1;
+static constexpr auto GeometryKeyC = "Geometry"_L1;
+static constexpr auto TabKeyC = "Tab"_L1;
const bool simplifyRichTextDefault = true;
@@ -74,7 +53,7 @@ namespace qdesigner_internal {
// Richtext simplification filter helpers: Elements to be discarded
static inline bool filterElement(QStringView name)
{
- return name != QStringLiteral("meta") && name != QStringLiteral("style");
+ return name != "meta"_L1 && name != "style"_L1;
}
// Richtext simplification filter helpers: Filter attributes of elements
@@ -86,15 +65,15 @@ static inline void filterAttributes(QStringView name,
return;
// No style attributes for <body>
- if (name == QStringLiteral("body")) {
+ if (name == "body"_L1) {
atts->clear();
return;
}
// Clean out everything except 'align' for 'p'
- if (name == QStringLiteral("p")) {
+ if (name == "p"_L1) {
for (auto it = atts->begin(); it != atts->end(); ) {
- if (it->name() == QStringLiteral("align")) {
+ if (it->name() == "align"_L1) {
++it;
*paragraphAlignmentFound = true;
} else {
@@ -108,11 +87,8 @@ static inline void filterAttributes(QStringView name,
// Richtext simplification filter helpers: Check for blank QStringView.
static inline bool isWhiteSpace(QStringView in)
{
- const int count = in.size();
- for (int i = 0; i < count; i++)
- if (!in.at(i).isSpace())
- return false;
- return true;
+ return std::all_of(in.cbegin(), in.cend(),
+ [](QChar c) { return c.isSpace(); });
}
// Richtext simplification filter: Remove hard-coded font settings,
@@ -169,6 +145,8 @@ public:
QToolBar *createToolBar(QDesignerFormEditorInterface *core, QWidget *parent = nullptr);
+ QString text(Qt::TextFormat format) const;
+
bool simplifyRichText() const { return m_simplifyRichText; }
public slots:
@@ -176,7 +154,6 @@ public slots:
void setFontPointSize(double);
void setText(const QString &text);
void setSimplifyRichText(bool v);
- QString text(Qt::TextFormat format) const;
signals:
void stateChanged();
@@ -201,17 +178,15 @@ public slots:
private:
RichTextEditor *m_editor;
- Ui::AddLinkDialog *m_ui;
+ QT_PREPEND_NAMESPACE(Ui)::AddLinkDialog *m_ui;
};
AddLinkDialog::AddLinkDialog(RichTextEditor *editor, QWidget *parent) :
QDialog(parent),
- m_ui(new Ui::AddLinkDialog)
+ m_ui(new QT_PREPEND_NAMESPACE(Ui)::AddLinkDialog)
{
m_ui->setupUi(this);
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
-
m_editor = editor;
}
@@ -240,12 +215,7 @@ void AddLinkDialog::accept()
const QString url = m_ui->urlInput->text();
if (!title.isEmpty()) {
- QString html = QStringLiteral("<a href=\"");
- html += url;
- html += QStringLiteral("\">");
- html += title;
- html += QStringLiteral("</a>");
-
+ const QString html = "<a href=\""_L1 + url + "\">"_L1 + title + "</a>"_L1;
m_editor->insertHtml(html);
}
@@ -290,9 +260,9 @@ void HtmlTextEdit::contextMenuEvent(QContextMenuEvent *event)
};
for (const Entry &e : entries) {
- QAction *entityAction = new QAction(QLatin1String(e.text),
+ QAction *entityAction = new QAction(QLatin1StringView(e.text),
htmlMenu);
- entityAction->setData(QLatin1String(e.entity));
+ entityAction->setData(QLatin1StringView(e.entity));
htmlMenu->addAction(entityAction);
}
@@ -401,7 +371,6 @@ private:
};
static QAction *createCheckableAction(const QIcon &icon, const QString &text,
- QObject *receiver, const char *slot,
QObject *parent = nullptr)
{
QAction *result = new QAction(parent);
@@ -409,8 +378,6 @@ static QAction *createCheckableAction(const QIcon &icon, const QString &text,
result->setText(text);
result->setCheckable(true);
result->setChecked(false);
- if (slot)
- QObject::connect(result, SIGNAL(triggered(bool)), receiver, slot);
return result;
}
@@ -440,20 +407,23 @@ RichTextEditorToolBar::RichTextEditorToolBar(QDesignerFormEditorInterface *core,
// Bold, italic and underline buttons
m_bold_action = createCheckableAction(
- createIconSet(QStringLiteral("textbold.png")),
- tr("Bold"), editor, SLOT(setFontBold(bool)), this);
+ createIconSet(QIcon::ThemeIcon::FormatTextBold,
+ "textbold.png"_L1), tr("Bold"), this);
+ connect(m_bold_action, &QAction::triggered, editor, &RichTextEditor::setFontBold);
m_bold_action->setShortcut(tr("CTRL+B"));
addAction(m_bold_action);
m_italic_action = createCheckableAction(
- createIconSet(QStringLiteral("textitalic.png")),
- tr("Italic"), editor, SLOT(setFontItalic(bool)), this);
+ createIconSet(QIcon::ThemeIcon::FormatTextItalic,
+ "textitalic.png"_L1), tr("Italic"), this);
+ connect(m_italic_action, &QAction::triggered, editor, &RichTextEditor::setFontItalic);
m_italic_action->setShortcut(tr("CTRL+I"));
addAction(m_italic_action);
m_underline_action = createCheckableAction(
- createIconSet(QStringLiteral("textunder.png")),
- tr("Underline"), editor, SLOT(setFontUnderline(bool)), this);
+ createIconSet(QIcon::ThemeIcon::FormatTextUnderline,
+ "textunder.png"_L1), tr("Underline"), this);
+ connect(m_underline_action, &QAction::triggered, editor, &RichTextEditor::setFontUnderline);
m_underline_action->setShortcut(tr("CTRL+U"));
addAction(m_underline_action);
@@ -466,28 +436,30 @@ RichTextEditorToolBar::RichTextEditorToolBar(QDesignerFormEditorInterface *core,
this, &RichTextEditorToolBar::alignmentActionTriggered);
m_align_left_action = createCheckableAction(
- createIconSet(QStringLiteral("textleft.png")),
- tr("Left Align"), editor, nullptr, alignment_group);
+ createIconSet(QIcon::ThemeIcon::FormatJustifyLeft,
+ "textleft.png"_L1), tr("Left Align"), alignment_group);
addAction(m_align_left_action);
m_align_center_action = createCheckableAction(
- createIconSet(QStringLiteral("textcenter.png")),
- tr("Center"), editor, nullptr, alignment_group);
+ createIconSet(QIcon::ThemeIcon::FormatJustifyCenter,
+ "textcenter.png"_L1), tr("Center"), alignment_group);
addAction(m_align_center_action);
m_align_right_action = createCheckableAction(
- createIconSet(QStringLiteral("textright.png")),
- tr("Right Align"), editor, nullptr, alignment_group);
+ createIconSet(QIcon::ThemeIcon::FormatJustifyRight,
+ "textright.png"_L1), tr("Right Align"), alignment_group);
addAction(m_align_right_action);
m_align_justify_action = createCheckableAction(
- createIconSet(QStringLiteral("textjustify.png")),
- tr("Justify"), editor, nullptr, alignment_group);
+ createIconSet(QIcon::ThemeIcon::FormatJustifyFill,
+ "textjustify.png"_L1), tr("Justify"), alignment_group);
addAction(m_align_justify_action);
m_layoutDirectionAction = createCheckableAction(
- createIconSet(QStringLiteral("righttoleft.png")),
- tr("Right to Left"), this, SLOT(layoutDirectionChanged()));
+ createIconSet(QIcon::ThemeIcon::FormatTextDirectionRtl,
+ "righttoleft.png"_L1), tr("Right to Left"));
+ connect(m_layoutDirectionAction, &QAction::triggered,
+ this, &RichTextEditorToolBar::layoutDirectionChanged);
addAction(m_layoutDirectionAction);
addSeparator();
@@ -495,27 +467,27 @@ RichTextEditorToolBar::RichTextEditorToolBar(QDesignerFormEditorInterface *core,
// Superscript and subscript buttons
m_valign_sup_action = createCheckableAction(
- createIconSet(QStringLiteral("textsuperscript.png")),
- tr("Superscript"),
- this, SLOT(setVAlignSuper(bool)), this);
+ createIconSet("textsuperscript.png"_L1), tr("Superscript"), this);
+ connect(m_valign_sup_action, &QAction::triggered,
+ this, &RichTextEditorToolBar::setVAlignSuper);
addAction(m_valign_sup_action);
m_valign_sub_action = createCheckableAction(
- createIconSet(QStringLiteral("textsubscript.png")),
- tr("Subscript"),
- this, SLOT(setVAlignSub(bool)), this);
+ createIconSet("textsubscript.png"_L1), tr("Subscript"), this);
+ connect(m_valign_sub_action, &QAction::triggered,
+ this, &RichTextEditorToolBar::setVAlignSub);
addAction(m_valign_sub_action);
addSeparator();
// Insert hyperlink and image buttons
- m_link_action->setIcon(createIconSet(QStringLiteral("textanchor.png")));
+ m_link_action->setIcon(createIconSet("textanchor.png"_L1));
m_link_action->setText(tr("Insert &Link"));
connect(m_link_action, &QAction::triggered, this, &RichTextEditorToolBar::insertLink);
addAction(m_link_action);
- m_image_action->setIcon(createIconSet(QStringLiteral("insertimage.png")));
+ m_image_action->setIcon(createIconSet("insertimage.png"_L1));
m_image_action->setText(tr("Insert &Image"));
connect(m_image_action, &QAction::triggered, this, &RichTextEditorToolBar::insertImage);
addAction(m_image_action);
@@ -531,8 +503,9 @@ RichTextEditorToolBar::RichTextEditorToolBar(QDesignerFormEditorInterface *core,
// Simplify rich text
m_simplify_richtext_action
- = createCheckableAction(createIconSet(QStringLiteral("simplifyrichtext.png")),
- tr("Simplify Rich Text"), m_editor, SLOT(setSimplifyRichText(bool)));
+ = createCheckableAction(createIconSet("simplifyrichtext.png"_L1), tr("Simplify Rich Text"));
+ connect(m_simplify_richtext_action, &QAction::triggered,
+ m_editor, &RichTextEditor::setSimplifyRichText);
m_simplify_richtext_action->setChecked(m_editor->simplifyRichText());
connect(m_editor.data(), &RichTextEditor::simplifyRichTextChanged,
m_simplify_richtext_action, &QAction::setChecked);
@@ -761,13 +734,12 @@ RichTextEditorDialog::RichTextEditorDialog(QDesignerFormEditorInterface *core, Q
m_initialTab(RichTextIndex)
{
setWindowTitle(tr("Edit text"));
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
// Read settings
const QDesignerSettingsInterface *settings = core->settingsManager();
- const QString rootKey = QLatin1String(RichTextDialogGroupC) + QLatin1Char('/');
- const QByteArray lastGeometry = settings->value(rootKey + QLatin1String(GeometryKeyC)).toByteArray();
- const int initialTab = settings->value(rootKey + QLatin1String(TabKeyC), QVariant(m_initialTab)).toInt();
+ const QString rootKey = RichTextDialogGroupC + u'/';
+ const QByteArray lastGeometry = settings->value(rootKey + GeometryKeyC).toByteArray();
+ const int initialTab = settings->value(rootKey + TabKeyC, QVariant(m_initialTab)).toInt();
if (initialTab == RichTextIndex || initialTab == SourceIndex)
m_initialTab = initialTab;
@@ -817,10 +789,10 @@ RichTextEditorDialog::RichTextEditorDialog(QDesignerFormEditorInterface *core, Q
RichTextEditorDialog::~RichTextEditorDialog()
{
QDesignerSettingsInterface *settings = m_core->settingsManager();
- settings->beginGroup(QLatin1String(RichTextDialogGroupC));
+ settings->beginGroup(RichTextDialogGroupC);
- settings->setValue(QLatin1String(GeometryKeyC), saveGeometry());
- settings->setValue(QLatin1String(TabKeyC), m_tab_widget->currentIndex());
+ settings->setValue(GeometryKeyC, saveGeometry());
+ settings->setValue(TabKeyC, m_tab_widget->currentIndex());
settings->endGroup();
}
diff --git a/src/designer/src/lib/shared/richtexteditor_p.h b/src/designer/src/lib/shared/richtexteditor_p.h
index 4fc166e3c..18a710a5c 100644
--- a/src/designer/src/lib/shared/richtexteditor_p.h
+++ b/src/designer/src/lib/shared/richtexteditor_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/selectsignaldialog.cpp b/src/designer/src/lib/shared/selectsignaldialog.cpp
index 576dd0bdb..1938046f4 100644
--- a/src/designer/src/lib/shared/selectsignaldialog.cpp
+++ b/src/designer/src/lib/shared/selectsignaldialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "selectsignaldialog_p.h"
@@ -59,10 +34,9 @@ using Methods = QList<SelectSignalDialog::Method>;
SelectSignalDialog::SelectSignalDialog(QWidget *parent)
: QDialog(parent)
- , m_ui(new Ui::SelectSignalDialog)
+ , m_ui(new QT_PREPEND_NAMESPACE(Ui)::SelectSignalDialog)
, m_model(new QStandardItemModel(0, 1, this))
{
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
m_ui->setupUi(this);
m_okButton = m_ui->buttonBox->button(QDialogButtonBox::Ok);
@@ -116,7 +90,7 @@ static void appendClass(const QString &className, Methods methods, QStandardItem
std::sort(methods.begin(), methods.end(), signatureLessThan);
QStandardItem *topLevelItem = createTopLevelItem(className);
model->appendRow(topLevelItem);
- for (const SelectSignalDialog::Method &m : qAsConst(methods)) {
+ for (const SelectSignalDialog::Method &m : std::as_const(methods)) {
QStandardItem *item = new QStandardItem(m.signature);
item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
item->setData(QVariant::fromValue(m), MethodRole);
diff --git a/src/designer/src/lib/shared/selectsignaldialog_p.h b/src/designer/src/lib/shared/selectsignaldialog_p.h
index ab94fb1ec..01f4afe25 100644
--- a/src/designer/src/lib/shared/selectsignaldialog_p.h
+++ b/src/designer/src/lib/shared/selectsignaldialog_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -84,7 +59,7 @@ private:
Method methodFromIndex(const QModelIndex &) const;
void populateModel(QDesignerFormEditorInterface *core, QObject *object);
- Ui::SelectSignalDialog *m_ui;
+ QT_PREPEND_NAMESPACE(Ui)::SelectSignalDialog *m_ui;
QPushButton *m_okButton;
QStandardItemModel *m_model;
};
diff --git a/src/designer/src/lib/shared/shared.pri b/src/designer/src/lib/shared/shared.pri
deleted file mode 100644
index 99d52a4bf..000000000
--- a/src/designer/src/lib/shared/shared.pri
+++ /dev/null
@@ -1,192 +0,0 @@
-
-INCLUDEPATH += $$PWD
-
-# When linking dynamically, use only the QKeySequenceEdit widget of
-# the property browser solution as the other symbols of the property
-# browser solution must not be duplicated (see e7762b60d51). When linking
-# statically, add the property browser solution to make the library self-contained
-# and use only the include path in the property editor (see propertyeditor.pri)
-
-contains(CONFIG, static) {
- include(../../../../shared/qtpropertybrowser/qtpropertybrowser.pri)
-} else {
- include(../../../../shared/qtpropertybrowser/qtpropertybrowserutils.pri)
-}
-
-include(../../../../shared/deviceskin/deviceskin.pri)
-include(../../../../shared/findwidget/findwidget.pri)
-include(../../../../shared/qtgradienteditor/qtgradienteditor.pri)
-
-# Input
-FORMS += $$PWD/addlinkdialog.ui \
- $$PWD/orderdialog.ui \
- $$PWD/newactiondialog.ui \
- $$PWD/gridpanel.ui \
- $$PWD/signalslotdialog.ui \
- $$PWD/previewconfigurationwidget.ui \
- $$PWD/qtresourceeditordialog.ui \
- $$PWD/newformwidget.ui \
- $$PWD/selectsignaldialog.ui \
- $$PWD/formlayoutrowdialog.ui \
- $$PWD/plugindialog.ui
-
-HEADERS += \
- $$PWD/shared_global_p.h \
- $$PWD/spacer_widget_p.h \
- $$PWD/layoutinfo_p.h \
- $$PWD/layout_p.h \
- $$PWD/connectionedit_p.h \
- $$PWD/pluginmanager_p.h \
- $$PWD/metadatabase_p.h \
- $$PWD/qdesigner_formeditorcommand_p.h \
- $$PWD/qdesigner_formwindowcommand_p.h \
- $$PWD/qdesigner_command_p.h \
- $$PWD/morphmenu_p.h \
- $$PWD/qdesigner_command2_p.h \
- $$PWD/qdesigner_formbuilder_p.h \
- $$PWD/qdesigner_taskmenu_p.h \
- $$PWD/formlayoutmenu_p.h \
- $$PWD/qdesigner_widget_p.h \
- $$PWD/qdesigner_propertysheet_p.h \
- $$PWD/qdesigner_membersheet_p.h \
- $$PWD/qdesigner_propertyeditor_p.h \
- $$PWD/qdesigner_objectinspector_p.h \
- $$PWD/invisible_widget_p.h \
- $$PWD/qlayout_widget_p.h \
- $$PWD/sheet_delegate_p.h \
- $$PWD/qdesigner_stackedbox_p.h \
- $$PWD/qdesigner_tabwidget_p.h \
- $$PWD/qdesigner_dockwidget_p.h \
- $$PWD/qdesigner_toolbox_p.h \
- $$PWD/qdesigner_dnditem_p.h \
- $$PWD/qsimpleresource_p.h \
- $$PWD/widgetfactory_p.h \
- $$PWD/widgetdatabase_p.h \
- $$PWD/qdesigner_promotion_p.h \
- $$PWD/qdesigner_introspection_p.h \
- $$PWD/promotionmodel_p.h \
- $$PWD/qdesigner_promotiondialog_p.h \
- $$PWD/iconloader_p.h \
- $$PWD/richtexteditor_p.h \
- $$PWD/plaintexteditor_p.h \
- $$PWD/actioneditor_p.h \
- $$PWD/actionrepository_p.h \
- $$PWD/qdesigner_toolbar_p.h \
- $$PWD/qdesigner_menubar_p.h \
- $$PWD/qdesigner_menu_p.h \
- $$PWD/actionprovider_p.h \
- $$PWD/orderdialog_p.h \
- $$PWD/newactiondialog_p.h \
- $$PWD/stylesheeteditor_p.h \
- $$PWD/csshighlighter_p.h \
- $$PWD/shared_enums_p.h \
- $$PWD/textpropertyeditor_p.h \
- $$PWD/propertylineedit_p.h \
- $$PWD/promotiontaskmenu_p.h \
- $$PWD/gridpanel_p.h \
- $$PWD/grid_p.h \
- $$PWD/formwindowbase_p.h \
- $$PWD/qdesigner_utils_p.h \
- $$PWD/qdesigner_widgetbox_p.h \
- $$PWD/signalslotdialog_p.h \
- $$PWD/extensionfactory_p.h \
- $$PWD/dialoggui_p.h \
- $$PWD/deviceprofile_p.h \
- $$PWD/zoomwidget_p.h \
- $$PWD/previewmanager_p.h \
- $$PWD/previewconfigurationwidget_p.h \
- $$PWD/codedialog_p.h \
- $$PWD/qtresourceeditordialog_p.h \
- $$PWD/qtresourcemodel_p.h \
- $$PWD/qtresourceview_p.h \
- $$PWD/iconselector_p.h \
- $$PWD/htmlhighlighter_p.h \
- $$PWD/qdesigner_widgetitem_p.h \
- $$PWD/qdesigner_qsettings_p.h \
- $$PWD/qdesigner_formwindowmanager_p.h \
- $$PWD/shared_settings_p.h \
- $$PWD/newformwidget_p.h \
- $$PWD/plugindialog_p.h \
- $$PWD/rcc_p.h \
- $$PWD/selectsignaldialog_p.h
-
-SOURCES += \
- $$PWD/spacer_widget.cpp \
- $$PWD/layoutinfo.cpp \
- $$PWD/layout.cpp \
- $$PWD/connectionedit.cpp \
- $$PWD/pluginmanager.cpp \
- $$PWD/qdesigner_formwindowcommand.cpp \
- $$PWD/qdesigner_formeditorcommand.cpp \
- $$PWD/qdesigner_command.cpp \
- $$PWD/morphmenu.cpp \
- $$PWD/qdesigner_command2.cpp \
- $$PWD/qdesigner_propertycommand.cpp \
- $$PWD/qdesigner_formbuilder.cpp \
- $$PWD/qdesigner_taskmenu.cpp \
- $$PWD/formlayoutmenu.cpp \
- $$PWD/qdesigner_widget.cpp \
- $$PWD/qdesigner_dockwidget.cpp \
- $$PWD/qdesigner_propertysheet.cpp \
- $$PWD/qdesigner_membersheet.cpp \
- $$PWD/qdesigner_propertyeditor.cpp \
- $$PWD/qdesigner_objectinspector.cpp \
- $$PWD/qdesigner_dnditem.cpp \
- $$PWD/qsimpleresource.cpp \
- $$PWD/invisible_widget.cpp \
- $$PWD/qlayout_widget.cpp \
- $$PWD/sheet_delegate.cpp \
- $$PWD/metadatabase.cpp \
- $$PWD/qdesigner_stackedbox.cpp \
- $$PWD/qdesigner_tabwidget.cpp \
- $$PWD/qdesigner_toolbox.cpp \
- $$PWD/widgetfactory.cpp \
- $$PWD/widgetdatabase.cpp \
- $$PWD/qdesigner_promotion.cpp \
- $$PWD/qdesigner_introspection.cpp \
- $$PWD/promotionmodel.cpp \
- $$PWD/qdesigner_promotiondialog.cpp \
- $$PWD/richtexteditor.cpp \
- $$PWD/plaintexteditor.cpp \
- $$PWD/actioneditor.cpp \
- $$PWD/actionrepository.cpp \
- $$PWD/qdesigner_toolbar.cpp \
- $$PWD/qdesigner_menubar.cpp \
- $$PWD/qdesigner_menu.cpp \
- $$PWD/orderdialog.cpp \
- $$PWD/newactiondialog.cpp \
- $$PWD/stylesheeteditor.cpp \
- $$PWD/csshighlighter.cpp \
- $$PWD/textpropertyeditor.cpp \
- $$PWD/propertylineedit.cpp \
- $$PWD/promotiontaskmenu.cpp \
- $$PWD/gridpanel.cpp \
- $$PWD/grid.cpp \
- $$PWD/formwindowbase.cpp \
- $$PWD/qdesigner_utils.cpp \
- $$PWD/qdesigner_widgetbox.cpp \
- $$PWD/iconloader.cpp \
- $$PWD/signalslotdialog.cpp \
- $$PWD/dialoggui.cpp \
- $$PWD/deviceprofile.cpp \
- $$PWD/zoomwidget.cpp \
- $$PWD/previewmanager.cpp \
- $$PWD/previewconfigurationwidget.cpp \
- $$PWD/codedialog.cpp \
- $$PWD/qtresourceeditordialog.cpp \
- $$PWD/qtresourcemodel.cpp \
- $$PWD/qtresourceview.cpp \
- $$PWD/iconselector.cpp \
- $$PWD/htmlhighlighter.cpp \
- $$PWD/qdesigner_widgetitem.cpp \
- $$PWD/qdesigner_qsettings.cpp \
- $$PWD/qdesigner_formwindowmanager.cpp \
- $$PWD/shared_settings.cpp \
- $$PWD/newformwidget.cpp \
- $$PWD/plugindialog.cpp \
- $$PWD/rcc.cpp \
- $$PWD/selectsignaldialog.cpp
-
-RESOURCES += $$PWD/shared.qrc
-
-TR_EXCLUDE += $$PWD/templates/*
diff --git a/src/designer/src/lib/shared/shared.qrc b/src/designer/src/lib/shared/shared.qrc
deleted file mode 100644
index 734ef391f..000000000
--- a/src/designer/src/lib/shared/shared.qrc
+++ /dev/null
@@ -1,20 +0,0 @@
-<RCC>
- <qresource prefix="/qt-project.org/designer">
- <file>defaultgradients.xml</file>
- <!-- Templates -->
- <file>templates/forms/Dialog_with_Buttons_Bottom.ui</file>
- <file>templates/forms/240x320/Dialog_with_Buttons_Bottom.ui</file>
- <file>templates/forms/320x240/Dialog_with_Buttons_Bottom.ui</file>
- <file>templates/forms/480x640/Dialog_with_Buttons_Bottom.ui</file>
- <file>templates/forms/640x480/Dialog_with_Buttons_Bottom.ui</file>
- <file>templates/forms/Dialog_with_Buttons_Right.ui</file>
- <file>templates/forms/240x320/Dialog_with_Buttons_Right.ui</file>
- <file>templates/forms/320x240/Dialog_with_Buttons_Right.ui</file>
- <file>templates/forms/480x640/Dialog_with_Buttons_Right.ui</file>
- <file>templates/forms/640x480/Dialog_with_Buttons_Right.ui</file>
- <file>templates/forms/Dialog_without_Buttons.ui</file>
- <file>templates/forms/Widget.ui</file>
- <file>templates/forms/Main_Window.ui</file>
- </qresource>
-</RCC>
-
diff --git a/src/designer/src/lib/shared/shared_enums_p.h b/src/designer/src/lib/shared/shared_enums_p.h
index d9c3dc007..246f202de 100644
--- a/src/designer/src/lib/shared/shared_enums_p.h
+++ b/src/designer/src/lib/shared/shared_enums_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/shared_global_p.h b/src/designer/src/lib/shared/shared_global_p.h
index 3609e5b87..0f1db097e 100644
--- a/src/designer/src/lib/shared/shared_global_p.h
+++ b/src/designer/src/lib/shared/shared_global_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/shared_settings.cpp b/src/designer/src/lib/shared/shared_settings.cpp
index 2800e89c5..aec4e59ca 100644
--- a/src/designer/src/lib/shared/shared_settings.cpp
+++ b/src/designer/src/lib/shared/shared_settings.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "shared_settings_p.h"
#include "grid_p.h"
@@ -44,23 +19,22 @@
QT_BEGIN_NAMESPACE
-static const char *designerPath = "/.designer";
-static const char *defaultGridKey = "defaultGrid";
-static const char *previewKey = "Preview";
-static const char *enabledKey = "Enabled";
-static const char *userDeviceSkinsKey= "UserDeviceSkins";
-static const char *zoomKey = "zoom";
-static const char *zoomEnabledKey = "zoomEnabled";
-static const char *deviceProfileIndexKey = "DeviceProfileIndex";
-static const char *deviceProfilesKey = "DeviceProfiles";
-static const char *formTemplatePathsKey = "FormTemplatePaths";
-static const char *formTemplateKey = "FormTemplate";
-static const char *newFormSizeKey = "NewFormSize";
-static inline QString namingModeKey() { return QStringLiteral("naming"); }
-static inline QString underScoreNamingMode() { return QStringLiteral("underscore"); }
-static inline QString camelCaseNamingMode() { return QStringLiteral("camelcase"); }
-
-using namespace qdesigner_internal;
+using namespace Qt::StringLiterals;
+
+static constexpr auto defaultGridKey = "defaultGrid"_L1;
+static constexpr auto previewKey = "Preview"_L1;
+static constexpr auto enabledKey = "Enabled"_L1;
+static constexpr auto userDeviceSkinsKey= "UserDeviceSkins"_L1;
+static constexpr auto zoomKey = "zoom"_L1;
+static constexpr auto zoomEnabledKey = "zoomEnabled"_L1;
+static constexpr auto deviceProfileIndexKey = "DeviceProfileIndex"_L1;
+static constexpr auto deviceProfilesKey = "DeviceProfiles"_L1;
+static constexpr auto formTemplatePathsKey = "FormTemplatePaths"_L1;
+static constexpr auto formTemplateKey = "FormTemplate"_L1;
+static constexpr auto newFormSizeKey = "NewFormSize"_L1;
+static constexpr auto namingModeKey = "naming"_L1;
+static constexpr auto underScoreNamingMode = "underscore"_L1;
+static constexpr auto camelCaseNamingMode = "camelcase"_L1;
static bool checkTemplatePath(const QString &path, bool create)
{
@@ -89,7 +63,7 @@ Grid QDesignerSharedSettings::defaultGrid() const
{
Grid grid;
const QVariantMap defaultGridMap
- = m_settings->value(QLatin1String(defaultGridKey), QVariantMap()).toMap();
+ = m_settings->value(defaultGridKey, QVariantMap()).toMap();
if (!defaultGridMap.isEmpty())
grid.fromVariantMap(defaultGridMap);
return grid;
@@ -97,7 +71,7 @@ Grid QDesignerSharedSettings::defaultGrid() const
void QDesignerSharedSettings::setDefaultGrid(const Grid &grid)
{
- m_settings->setValue(QLatin1String(defaultGridKey), grid.toVariantMap());
+ m_settings->setValue(defaultGridKey, grid.toVariantMap());
}
const QStringList &QDesignerSharedSettings::defaultFormTemplatePaths()
@@ -105,11 +79,9 @@ const QStringList &QDesignerSharedSettings::defaultFormTemplatePaths()
static QStringList rc;
if (rc.isEmpty()) {
// Ensure default form template paths
- const QString templatePath = QStringLiteral("/templates");
+ const auto templatePath = "/templates"_L1;
// home
- QString path = QDir::homePath();
- path += QLatin1String(designerPath);
- path += templatePath;
+ QString path = dataDirectory() + templatePath;
if (checkTemplatePath(path, true))
rc += path;
@@ -122,25 +94,45 @@ const QStringList &QDesignerSharedSettings::defaultFormTemplatePaths()
return rc;
}
+// Migrate templates from $HOME/.designer to standard paths in Qt 7
+// ### FIXME Qt 8: Remove (QTBUG-96005)
+void QDesignerSharedSettings::migrateTemplates()
+{
+ const QString templatePath = u"/templates"_s;
+ QString path = dataDirectory() + templatePath;
+ if (QFileInfo::exists(path))
+ return;
+ if (!QDir().mkpath(path))
+ return;
+ QString legacyPath = legacyDataDirectory() + templatePath;
+ if (!QFileInfo::exists(path))
+ return;
+ const auto &files = QDir(legacyPath).entryInfoList(QDir::Files | QDir::NoSymLinks | QDir::Readable);
+ for (const auto &file : files) {
+ const QString newPath = path + u'/' + file.fileName();
+ QFile::copy(file.absoluteFilePath(), newPath);
+ }
+}
+
QStringList QDesignerSharedSettings::formTemplatePaths() const
{
- return m_settings->value(QLatin1String(formTemplatePathsKey),
+ return m_settings->value(formTemplatePathsKey,
defaultFormTemplatePaths()).toStringList();
}
void QDesignerSharedSettings::setFormTemplatePaths(const QStringList &paths)
{
- m_settings->setValue(QLatin1String(formTemplatePathsKey), paths);
+ m_settings->setValue(formTemplatePathsKey, paths);
}
QString QDesignerSharedSettings::formTemplate() const
{
- return m_settings->value(QLatin1String(formTemplateKey)).toString();
+ return m_settings->value(formTemplateKey).toString();
}
void QDesignerSharedSettings::setFormTemplate(const QString &t)
{
- m_settings->setValue(QLatin1String(formTemplateKey), t);
+ m_settings->setValue(formTemplateKey, t);
}
void QDesignerSharedSettings::setAdditionalFormTemplatePaths(const QStringList &additionalPaths)
@@ -165,15 +157,15 @@ QStringList QDesignerSharedSettings::additionalFormTemplatePaths() const
QSize QDesignerSharedSettings::newFormSize() const
{
- return m_settings->value(QLatin1String(newFormSizeKey), QSize(0, 0)).toSize();
+ return m_settings->value(newFormSizeKey, QSize(0, 0)).toSize();
}
void QDesignerSharedSettings::setNewFormSize(const QSize &s)
{
if (s.isNull()) {
- m_settings->remove(QLatin1String(newFormSizeKey));
+ m_settings->remove(newFormSizeKey);
} else {
- m_settings->setValue(QLatin1String(newFormSizeKey), s);
+ m_settings->setValue(newFormSizeKey, s);
}
}
@@ -181,78 +173,78 @@ void QDesignerSharedSettings::setNewFormSize(const QSize &s)
PreviewConfiguration QDesignerSharedSettings::customPreviewConfiguration() const
{
PreviewConfiguration configuration;
- configuration.fromSettings(QLatin1String(previewKey), m_settings);
+ configuration.fromSettings(previewKey, m_settings);
return configuration;
}
void QDesignerSharedSettings::setCustomPreviewConfiguration(const PreviewConfiguration &configuration)
{
- configuration.toSettings(QLatin1String(previewKey), m_settings);
+ configuration.toSettings(previewKey, m_settings);
}
bool QDesignerSharedSettings::isCustomPreviewConfigurationEnabled() const
{
- m_settings->beginGroup(QLatin1String(previewKey));
- bool isEnabled = m_settings->value(QLatin1String(enabledKey), false).toBool();
+ m_settings->beginGroup(previewKey);
+ bool isEnabled = m_settings->value(enabledKey, false).toBool();
m_settings->endGroup();
return isEnabled;
}
void QDesignerSharedSettings::setCustomPreviewConfigurationEnabled(bool enabled)
{
- m_settings->beginGroup(QLatin1String(previewKey));
- m_settings->setValue(QLatin1String(enabledKey), enabled);
+ m_settings->beginGroup(previewKey);
+ m_settings->setValue(enabledKey, enabled);
m_settings->endGroup();
}
QStringList QDesignerSharedSettings::userDeviceSkins() const
{
- m_settings->beginGroup(QLatin1String(previewKey));
+ m_settings->beginGroup(previewKey);
QStringList userDeviceSkins
- = m_settings->value(QLatin1String(userDeviceSkinsKey), QStringList()).toStringList();
+ = m_settings->value(userDeviceSkinsKey, QStringList()).toStringList();
m_settings->endGroup();
return userDeviceSkins;
}
void QDesignerSharedSettings::setUserDeviceSkins(const QStringList &userDeviceSkins)
{
- m_settings->beginGroup(QLatin1String(previewKey));
- m_settings->setValue(QLatin1String(userDeviceSkinsKey), userDeviceSkins);
+ m_settings->beginGroup(previewKey);
+ m_settings->setValue(userDeviceSkinsKey, userDeviceSkins);
m_settings->endGroup();
}
int QDesignerSharedSettings::zoom() const
{
- return m_settings->value(QLatin1String(zoomKey), 100).toInt();
+ return m_settings->value(zoomKey, 100).toInt();
}
void QDesignerSharedSettings::setZoom(int z)
{
- m_settings->setValue(QLatin1String(zoomKey), QVariant(z));
+ m_settings->setValue(zoomKey, QVariant(z));
}
ObjectNamingMode QDesignerSharedSettings::objectNamingMode() const
{
- const QString value = m_settings->value(namingModeKey()).toString();
- return value == camelCaseNamingMode()
+ const QString value = m_settings->value(namingModeKey).toString();
+ return value == camelCaseNamingMode
? qdesigner_internal::CamelCase : qdesigner_internal::Underscore;
}
void QDesignerSharedSettings::setObjectNamingMode(ObjectNamingMode n)
{
const QString value = n == qdesigner_internal::CamelCase
- ? camelCaseNamingMode() : underScoreNamingMode();
- m_settings->setValue(namingModeKey(), QVariant(value));
+ ? camelCaseNamingMode : underScoreNamingMode;
+ m_settings->setValue(namingModeKey, QVariant(value));
}
bool QDesignerSharedSettings::zoomEnabled() const
{
- return m_settings->value(QLatin1String(zoomEnabledKey), false).toBool();
+ return m_settings->value(zoomEnabledKey, false).toBool();
}
void QDesignerSharedSettings::setZoomEnabled(bool v)
{
- m_settings->setValue(QLatin1String(zoomEnabledKey), v);
+ m_settings->setValue(zoomEnabledKey, v);
}
DeviceProfile QDesignerSharedSettings::currentDeviceProfile() const
@@ -262,12 +254,12 @@ DeviceProfile QDesignerSharedSettings::currentDeviceProfile() const
void QDesignerSharedSettings::setCurrentDeviceProfileIndex(int i)
{
- m_settings->setValue(QLatin1String(deviceProfileIndexKey), i);
+ m_settings->setValue(deviceProfileIndexKey, i);
}
int QDesignerSharedSettings::currentDeviceProfileIndex() const
{
- return m_settings->value(QLatin1String(deviceProfileIndexKey), -1).toInt();
+ return m_settings->value(deviceProfileIndexKey, -1).toInt();
}
static inline QString msgWarnDeviceProfileXml(const QString &msg)
@@ -293,7 +285,7 @@ DeviceProfile QDesignerSharedSettings::deviceProfileAt(int idx) const
QStringList QDesignerSharedSettings::deviceProfileXml() const
{
- return m_settings->value(QLatin1String(deviceProfilesKey), QStringList()).toStringList();
+ return m_settings->value(deviceProfilesKey, QStringList()).toStringList();
}
QDesignerSharedSettings::DeviceProfileList QDesignerSharedSettings::deviceProfiles() const
@@ -305,9 +297,8 @@ QDesignerSharedSettings::DeviceProfileList QDesignerSharedSettings::deviceProfil
// De-serialize
QString errorMessage;
DeviceProfile dp;
- const QStringList::const_iterator scend = xmls.constEnd();
- for (QStringList::const_iterator it = xmls.constBegin(); it != scend; ++it) {
- if (dp.fromXml(*it, &errorMessage)) {
+ for (const auto &xml : xmls) {
+ if (dp.fromXml(xml, &errorMessage)) {
rc.push_back(dp);
} else {
designerWarning(msgWarnDeviceProfileXml(errorMessage));
@@ -316,13 +307,12 @@ QDesignerSharedSettings::DeviceProfileList QDesignerSharedSettings::deviceProfil
return rc;
}
-void QDesignerSharedSettings::setDeviceProfiles(const DeviceProfileList &dp)
+void QDesignerSharedSettings::setDeviceProfiles(const DeviceProfileList &dpl)
{
QStringList l;
- const DeviceProfileList::const_iterator dcend = dp.constEnd();
- for (DeviceProfileList::const_iterator it = dp.constBegin(); it != dcend; ++it)
- l.push_back(it->toXml());
- m_settings->setValue(QLatin1String(deviceProfilesKey), l);
+ for (const auto &dp : dpl)
+ l.push_back(dp.toXml());
+ m_settings->setValue(deviceProfilesKey, l);
}
}
diff --git a/src/designer/src/lib/shared/shared_settings_p.h b/src/designer/src/lib/shared/shared_settings_p.h
index 7fded1218..7cf5b4c85 100644
--- a/src/designer/src/lib/shared/shared_settings_p.h
+++ b/src/designer/src/lib/shared/shared_settings_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -117,6 +92,7 @@ public:
void setDeviceProfiles(const DeviceProfileList &dp);
static const QStringList &defaultFormTemplatePaths();
+ static void migrateTemplates();
protected:
QDesignerSettingsInterface *settings() const { return m_settings; }
diff --git a/src/designer/src/lib/shared/sheet_delegate.cpp b/src/designer/src/lib/shared/sheet_delegate.cpp
index 31afad7f8..77a2a1b96 100644
--- a/src/designer/src/lib/shared/sheet_delegate.cpp
+++ b/src/designer/src/lib/shared/sheet_delegate.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "sheet_delegate_p.h"
diff --git a/src/designer/src/lib/shared/sheet_delegate_p.h b/src/designer/src/lib/shared/sheet_delegate_p.h
index f896643f0..c58ebc5c4 100644
--- a/src/designer/src/lib/shared/sheet_delegate_p.h
+++ b/src/designer/src/lib/shared/sheet_delegate_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/signalslotdialog.cpp b/src/designer/src/lib/shared/signalslotdialog.cpp
index 65297030d..f4857b416 100644
--- a/src/designer/src/lib/shared/signalslotdialog.cpp
+++ b/src/designer/src/lib/shared/signalslotdialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "signalslotdialog_p.h"
#include "ui_signalslotdialog.h"
@@ -53,19 +28,21 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
// Regexp to match a function signature, arguments potentially
// with namespace colons.
-static const char *signatureRegExp = "^[\\w+_]+\\(([\\w+:]\\*?,?)*\\)$";
-static const char *methodNameRegExp = "^[\\w+_]+$";
+static constexpr auto signatureRegExp = "^[\\w+_]+\\(([\\w+:]\\*?,?)*\\)$"_L1;
+static constexpr auto methodNameRegExp = "^[\\w+_]+$"_L1;
-static QStandardItem *createEditableItem(const QString &text)
+static QStandardItem *createEditableItem(const QString &text)
{
QStandardItem *rc = new QStandardItem(text);
rc->setFlags(Qt::ItemIsEnabled|Qt::ItemIsEditable|Qt::ItemIsSelectable);
return rc;
}
-static QStandardItem *createDisabledItem(const QString &text)
+static QStandardItem *createDisabledItem(const QString &text)
{
QStandardItem *rc = new QStandardItem(text);
Qt::ItemFlags flags = rc->flags();
@@ -73,48 +50,6 @@ static QStandardItem *createDisabledItem(const QString &text)
return rc;
}
-static void fakeMethodsFromMetaDataBase(QDesignerFormEditorInterface *core, QObject *o, QStringList &slotList, QStringList &signalList)
-{
- slotList.clear();
- signalList.clear();
- if (qdesigner_internal::MetaDataBase *metaDataBase = qobject_cast<qdesigner_internal::MetaDataBase *>(core->metaDataBase()))
- if (const qdesigner_internal::MetaDataBaseItem *item = metaDataBase->metaDataBaseItem(o)) {
- slotList = item->fakeSlots();
- signalList = item->fakeSignals();
- }
-}
-
-static void fakeMethodsToMetaDataBase(QDesignerFormEditorInterface *core, QObject *o, const QStringList &slotList, const QStringList &signalList)
-{
- if (qdesigner_internal::MetaDataBase *metaDataBase = qobject_cast<qdesigner_internal::MetaDataBase *>(core->metaDataBase())) {
- qdesigner_internal::MetaDataBaseItem *item = metaDataBase->metaDataBaseItem(o);
- Q_ASSERT(item);
- item->setFakeSlots(slotList);
- item->setFakeSignals(signalList);
- }
-}
-
-static void existingMethodsFromMemberSheet(QDesignerFormEditorInterface *core,
- QObject *o,
- QStringList &slotList, QStringList &signalList)
-{
- slotList.clear();
- signalList.clear();
-
- QDesignerMemberSheetExtension *msheet = qt_extension<QDesignerMemberSheetExtension*>(core->extensionManager(), o);
- if (!msheet)
- return;
-
- for (int i = 0, count = msheet->count(); i < count; ++i)
- if (msheet->isVisible(i)) {
- if (msheet->isSlot(i))
- slotList += msheet->signature(i);
- else
- if (msheet->isSignal(i))
- signalList += msheet->signature(i);
- }
-}
-
namespace {
// Internal helper class: A Delegate that validates using RegExps and additionally checks
// on closing (adds missing parentheses).
@@ -131,8 +66,8 @@ namespace {
SignatureDelegate::SignatureDelegate(QObject * parent) :
QItemDelegate(parent),
- m_signatureRegexp(QLatin1String(signatureRegExp)),
- m_methodNameRegexp(QLatin1String(methodNameRegExp))
+ m_signatureRegexp(signatureRegExp),
+ m_methodNameRegexp(methodNameRegExp)
{
Q_ASSERT(m_signatureRegexp.isValid());
Q_ASSERT(m_methodNameRegexp.isValid());
@@ -155,7 +90,7 @@ namespace {
QString signature = le->text();
if (!m_signatureRegexp.match(signature).hasMatch()) {
if (m_methodNameRegexp.match(signature).hasMatch()) {
- signature += QStringLiteral("()");
+ signature += "()"_L1;
le->setText(signature);
} else {
return;
@@ -175,9 +110,15 @@ namespace {
const QStringList &newFakeSlots, const QStringList &newFakeSignals);
void undo() override
- { fakeMethodsToMetaDataBase(core(), m_object, m_oldFakeSlots, m_oldFakeSignals); }
+ {
+ qdesigner_internal::SignalSlotDialog::fakeMethodsToMetaDataBase(core(), m_object,
+ m_oldFakeSlots, m_oldFakeSignals);
+ }
void redo() override
- { fakeMethodsToMetaDataBase(core(), m_object, m_newFakeSlots, m_newFakeSignals); }
+ {
+ qdesigner_internal::SignalSlotDialog::fakeMethodsToMetaDataBase(core(), m_object,
+ m_newFakeSlots, m_newFakeSignals);
+ }
private:
QObject *m_object;
@@ -266,12 +207,11 @@ void SignaturePanel::slotAdd()
m_listView->selectionModel()->clearSelection();
// find unique name
for (int i = 1; ; i++) {
- QString newSlot = m_newPrefix;
- newSlot += QString::number(i); // Always add number, Avoid setting 'slot' for first entry
- newSlot += QLatin1Char('(');
+ // Always add number, Avoid setting 'slot' for first entry
+ QString newSlot = m_newPrefix + QString::number(i) + u'(';
// check for function name independent of parameters
if (m_model->findItems(newSlot, Qt::MatchStartsWith, 0).isEmpty()) {
- newSlot += QLatin1Char(')');
+ newSlot += u')';
QStandardItem * item = createEditableItem(newSlot);
m_model->appendRow(item);
const QModelIndex index = m_model->indexFromItem (item);
@@ -298,8 +238,8 @@ void SignaturePanel::slotRemove()
if (const int row = selectedIndexes.constFirst().row())
m_listView->setCurrentIndex (selectedIndexes.constFirst().sibling(row - 1, 0));
- for (int i = selectedIndexes.size() - 1; i >= 0; i--)
- qDeleteAll(m_model->takeRow(selectedIndexes[i].row()));
+ for (auto i = selectedIndexes.size() - 1; i >= 0; --i)
+ qDeleteAll(m_model->takeRow(selectedIndexes.at(i).row()));
}
void SignaturePanel::slotSelectionChanged(const QItemSelection &selected, const QItemSelection &)
@@ -346,21 +286,23 @@ void SignaturePanel::closeEditor()
SignalSlotDialog::SignalSlotDialog(QDesignerDialogGuiInterface *dialogGui, QWidget *parent, FocusMode mode) :
QDialog(parent),
m_focusMode(mode),
- m_ui(new Ui::SignalSlotDialogClass),
+ m_ui(new QT_PREPEND_NAMESPACE(Ui)::SignalSlotDialogClass),
m_dialogGui(dialogGui)
{
setModal(true);
m_ui->setupUi(this);
- const QIcon plusIcon = qdesigner_internal::createIconSet(QString::fromUtf8("plus.png"));
- const QIcon minusIcon = qdesigner_internal::createIconSet(QString::fromUtf8("minus.png"));
+ const QIcon plusIcon = qdesigner_internal::createIconSet("plus.png"_L1);
+ const QIcon minusIcon = qdesigner_internal::createIconSet("minus.png"_L1);
m_ui->addSlotButton->setIcon(plusIcon);
m_ui->removeSlotButton->setIcon(minusIcon);
m_ui->addSignalButton->setIcon(plusIcon);
m_ui->removeSignalButton->setIcon(minusIcon);
- m_slotPanel = new SignaturePanel(this, m_ui->slotListView, m_ui->addSlotButton, m_ui->removeSlotButton, QStringLiteral("slot"));
- m_signalPanel = new SignaturePanel(this, m_ui->signalListView, m_ui->addSignalButton, m_ui->removeSignalButton, QStringLiteral("signal"));
+ m_slotPanel = new SignaturePanel(this, m_ui->slotListView, m_ui->addSlotButton,
+ m_ui->removeSlotButton, u"slot"_s);
+ m_signalPanel = new SignaturePanel(this, m_ui->signalListView, m_ui->addSignalButton,
+ m_ui->removeSignalButton, u"signal"_s);
connect(m_slotPanel, &SignaturePanel::checkSignature,
this, &SignalSlotDialog::slotCheckSignature);
connect(m_signalPanel, &SignaturePanel::checkSignature,
@@ -512,6 +454,51 @@ bool SignalSlotDialog::editPromotedClass(QDesignerFormEditorInterface *core, con
return true;
}
+void SignalSlotDialog::fakeMethodsFromMetaDataBase(QDesignerFormEditorInterface *core, QObject *o,
+ QStringList &slotList, QStringList &signalList)
+{
+ slotList.clear();
+ signalList.clear();
+ if (auto *metaDB = qobject_cast<qdesigner_internal::MetaDataBase *>(core->metaDataBase())) {
+ if (const auto *item = metaDB->metaDataBaseItem(o)) {
+ slotList = item->fakeSlots();
+ signalList = item->fakeSignals();
+ }
+ }
+}
+
+void SignalSlotDialog::fakeMethodsToMetaDataBase(QDesignerFormEditorInterface *core, QObject *o,
+ const QStringList &slotList,
+ const QStringList &signalList)
+{
+ if (auto *metaDB = qobject_cast<qdesigner_internal::MetaDataBase *>(core->metaDataBase())) {
+ if (auto *item = metaDB->metaDataBaseItem(o)) {
+ item->setFakeSlots(slotList);
+ item->setFakeSignals(signalList);
+ }
+ }
+}
+
+void SignalSlotDialog::existingMethodsFromMemberSheet(QDesignerFormEditorInterface *core, QObject *o,
+ QStringList &slotList, QStringList &signalList)
+{
+ slotList.clear();
+ signalList.clear();
+
+ auto *msheet = qt_extension<QDesignerMemberSheetExtension*>(core->extensionManager(), o);
+ if (!msheet)
+ return;
+
+ for (qsizetype i = 0, count = msheet->count(); i < count; ++i) {
+ if (msheet->isVisible(i)) {
+ if (msheet->isSlot(i))
+ slotList += msheet->signature(i);
+ else if (msheet->isSignal(i))
+ signalList += msheet->signature(i);
+ }
+ }
+}
+
}
QT_END_NAMESPACE
diff --git a/src/designer/src/lib/shared/signalslotdialog_p.h b/src/designer/src/lib/shared/signalslotdialog_p.h
index e0253bcc5..748123b9a 100644
--- a/src/designer/src/lib/shared/signalslotdialog_p.h
+++ b/src/designer/src/lib/shared/signalslotdialog_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -140,6 +115,14 @@ public:
// Edit fake methods of a promoted class stored in WidgetDataBase on a base class instance.
static bool editPromotedClass(QDesignerFormEditorInterface *core, QObject *baseObject, QWidget *parent = nullptr, FocusMode m = FocusSlots);
+ static void fakeMethodsFromMetaDataBase(QDesignerFormEditorInterface *core, QObject *o,
+ QStringList &slotList, QStringList &signalList);
+ static void fakeMethodsToMetaDataBase(QDesignerFormEditorInterface *core, QObject *o,
+ const QStringList &slotList, const QStringList &signalList);
+ static void existingMethodsFromMemberSheet(QDesignerFormEditorInterface *core, QObject *o,
+ QStringList &slotList, QStringList &signalList);
+
+
private slots:
void slotCheckSignature(const QString &signature, bool *ok);
@@ -148,7 +131,7 @@ private:
static bool editPromotedClass(QDesignerFormEditorInterface *core, const QString &promotedClassName, QObject *baseObject, QWidget *parent, FocusMode m);
const FocusMode m_focusMode;
- Ui::SignalSlotDialogClass *m_ui;
+ QT_PREPEND_NAMESPACE(Ui)::SignalSlotDialogClass *m_ui;
QDesignerDialogGuiInterface *m_dialogGui;
SignaturePanel *m_slotPanel;
SignaturePanel *m_signalPanel;
diff --git a/src/designer/src/lib/shared/spacer_widget.cpp b/src/designer/src/lib/shared/spacer_widget.cpp
index 15daa9d8c..ac08a67be 100644
--- a/src/designer/src/lib/shared/spacer_widget.cpp
+++ b/src/designer/src/lib/shared/spacer_widget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "spacer_widget_p.h"
#include "layoutinfo_p.h"
@@ -41,6 +16,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
// The Spacer widget is Designer representation of QLayoutItem.
// It uses QLayoutItem's sizeHint property as QWidget
// sizeHint and the QLayoutItem's sizeType property as QWidget size policy.
@@ -152,7 +129,7 @@ void Spacer::resizeEvent(QResizeEvent* e)
const QSize oldSize = e->oldSize();
if (oldSize.isNull() || oldSize.width() <= m_SizeOffset.width() || oldSize.height() <= m_SizeOffset.height())
if (QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(m_formWindow->core()->extensionManager(), this))
- sheet->setChanged(sheet->indexOf(QStringLiteral("sizeHint")), true);
+ sheet->setChanged(sheet->indexOf(u"sizeHint"_s), true);
}
updateMask();
diff --git a/src/designer/src/lib/shared/spacer_widget_p.h b/src/designer/src/lib/shared/spacer_widget_p.h
index cbb9dd6d7..fb99316b1 100644
--- a/src/designer/src/lib/shared/spacer_widget_p.h
+++ b/src/designer/src/lib/shared/spacer_widget_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/stylesheeteditor.cpp b/src/designer/src/lib/shared/stylesheeteditor.cpp
index 2956d1abc..da15f6bf1 100644
--- a/src/designer/src/lib/shared/stylesheeteditor.cpp
+++ b/src/designer/src/lib/shared/stylesheeteditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "stylesheeteditor_p.h"
#include "csshighlighter_p.h"
@@ -60,18 +35,36 @@
QT_BEGIN_NAMESPACE
-static const char *styleSheetProperty = "styleSheet";
-static const char *StyleSheetDialogC = "StyleSheetDialog";
-static const char *Geometry = "Geometry";
+using namespace Qt::StringLiterals;
+
+static constexpr auto styleSheetProperty = "styleSheet"_L1;
+static constexpr auto StyleSheetDialogC = "StyleSheetDialog"_L1;
+static constexpr auto seGeometry = "Geometry"_L1;
namespace qdesigner_internal {
StyleSheetEditor::StyleSheetEditor(QWidget *parent)
: QTextEdit(parent)
{
- setTabStopDistance(fontMetrics().horizontalAdvance(QLatin1Char(' ')) * 4);
+ enum : int { DarkThreshold = 200 }; // Observed 239 on KDE/Dark
+
+ setTabStopDistance(fontMetrics().horizontalAdvance(u' ') * 4);
setAcceptRichText(false);
- new CssHighlighter(document());
+
+ const QColor textColor = palette().color(QPalette::WindowText);
+ const bool darkMode = textColor.red() > DarkThreshold
+ && textColor.green() > DarkThreshold
+ && textColor.blue() > DarkThreshold;
+
+ CssHighlightColors colors;
+ colors.selector = darkMode ? QColor(Qt::red).lighter() : QColor(Qt::darkRed);
+ const QColor blue(Qt::blue);
+ colors.property = darkMode ? blue.lighter() : blue;
+ colors.pseudo1 = colors.pseudo2 = colors.value = textColor;
+ colors.quote = darkMode ? Qt::magenta : Qt::darkMagenta;
+ colors.comment = darkMode ? Qt::green : Qt::darkGreen;
+
+ new CssHighlighter(colors, document());
}
// --- StyleSheetEditorDialog
@@ -88,7 +81,6 @@ StyleSheetEditorDialog::StyleSheetEditorDialog(QDesignerFormEditorInterface *cor
m_addFontAction(new QAction(tr("Add Font..."), this))
{
setWindowTitle(tr("Edit Style Sheet"));
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
connect(m_buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
connect(m_buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
@@ -150,13 +142,13 @@ StyleSheetEditorDialog::StyleSheetEditorDialog(QDesignerFormEditorInterface *cor
QMenu *colorActionMenu = new QMenu(this);
for (int resourceProperty = 0; resourceProperties[resourceProperty]; ++resourceProperty) {
- const QString resourcePropertyName = QLatin1String(resourceProperties[resourceProperty]);
+ const QString resourcePropertyName = QLatin1StringView(resourceProperties[resourceProperty]);
resourceActionMenu->addAction(resourcePropertyName,
this, [this, resourcePropertyName] { this->slotAddResource(resourcePropertyName); });
}
for (int colorProperty = 0; colorProperties[colorProperty]; ++colorProperty) {
- const QString colorPropertyName = QLatin1String(colorProperties[colorProperty]);
+ const QString colorPropertyName = QLatin1StringView(colorProperties[colorProperty]);
colorActionMenu->addAction(colorPropertyName,
this, [this, colorPropertyName] { this->slotAddColor(colorPropertyName); });
gradientActionMenu->addAction(colorPropertyName,
@@ -178,10 +170,10 @@ StyleSheetEditorDialog::StyleSheetEditorDialog(QDesignerFormEditorInterface *cor
m_editor->setFocus();
QDesignerSettingsInterface *settings = core->settingsManager();
- settings->beginGroup(QLatin1String(StyleSheetDialogC));
+ settings->beginGroup(StyleSheetDialogC);
- if (settings->contains(QLatin1String(Geometry)))
- restoreGeometry(settings->value(QLatin1String(Geometry)).toByteArray());
+ if (settings->contains(seGeometry))
+ restoreGeometry(settings->value(seGeometry).toByteArray());
settings->endGroup();
}
@@ -189,9 +181,9 @@ StyleSheetEditorDialog::StyleSheetEditorDialog(QDesignerFormEditorInterface *cor
StyleSheetEditorDialog::~StyleSheetEditorDialog()
{
QDesignerSettingsInterface *settings = m_core->settingsManager();
- settings->beginGroup(QLatin1String(StyleSheetDialogC));
+ settings->beginGroup(StyleSheetDialogC);
- settings->setValue(QLatin1String(Geometry), saveGeometry());
+ settings->setValue(seGeometry, saveGeometry());
settings->endGroup();
}
@@ -218,7 +210,7 @@ void StyleSheetEditorDialog::slotAddResource(const QString &property)
{
const QString path = IconSelector::choosePixmapResource(m_core, m_core->resourceModel(), QString(), this);
if (!path.isEmpty())
- insertCssProperty(property, QString(QStringLiteral("url(%1)")).arg(path));
+ insertCssProperty(property, "url("_L1 + path + u')');
}
void StyleSheetEditorDialog::slotAddGradient(const QString &property)
@@ -238,11 +230,12 @@ void StyleSheetEditorDialog::slotAddColor(const QString &property)
QString colorStr;
if (color.alpha() == 255) {
- colorStr = QString(QStringLiteral("rgb(%1, %2, %3)")).arg(
- color.red()).arg(color.green()).arg(color.blue());
+ colorStr = QString::asprintf("rgb(%d, %d, %d)",
+ color.red(), color.green(), color.blue());
} else {
- colorStr = QString(QStringLiteral("rgba(%1, %2, %3, %4)")).arg(
- color.red()).arg(color.green()).arg(color.blue()).arg(color.alpha());
+ colorStr = QString::asprintf("rgba(%d, %d, %d, %d)",
+ color.red(), color.green(), color.blue(),
+ color.alpha());
}
insertCssProperty(property, colorStr);
@@ -254,36 +247,34 @@ void StyleSheetEditorDialog::slotAddFont()
QFont font = QFontDialog::getFont(&ok, this);
if (ok) {
QString fontStr;
- if (font.weight() != QFont::Normal) {
- fontStr += QString::number(font.weight());
- fontStr += QLatin1Char(' ');
- }
+ if (font.weight() != QFont::Normal)
+ fontStr += QString::number(font.weight()) + u' ';
switch (font.style()) {
case QFont::StyleItalic:
- fontStr += QStringLiteral("italic ");
+ fontStr += "italic "_L1;
break;
case QFont::StyleOblique:
- fontStr += QStringLiteral("oblique ");
+ fontStr += "oblique "_L1;
break;
default:
break;
}
fontStr += QString::number(font.pointSize());
- fontStr += QStringLiteral("pt \"");
+ fontStr += "pt \""_L1;
fontStr += font.family();
- fontStr += QLatin1Char('"');
+ fontStr += u'"';
- insertCssProperty(QStringLiteral("font"), fontStr);
+ insertCssProperty(u"font"_s, fontStr);
QString decoration;
if (font.underline())
- decoration += QStringLiteral("underline");
+ decoration += "underline"_L1;
if (font.strikeOut()) {
if (!decoration.isEmpty())
- decoration += QLatin1Char(' ');
- decoration += QStringLiteral("line-through");
+ decoration += u' ';
+ decoration += "line-through"_L1;
}
- insertCssProperty(QStringLiteral("text-decoration"), decoration);
+ insertCssProperty(u"text-decoration"_s, decoration);
}
}
@@ -298,19 +289,19 @@ void StyleSheetEditorDialog::insertCssProperty(const QString &name, const QStrin
// Simple check to see if we're in a selector scope
const QTextDocument *doc = m_editor->document();
- const QTextCursor closing = doc->find(QStringLiteral("}"), cursor, QTextDocument::FindBackward);
- const QTextCursor opening = doc->find(QStringLiteral("{"), cursor, QTextDocument::FindBackward);
+ const QTextCursor closing = doc->find(u"}"_s, cursor, QTextDocument::FindBackward);
+ const QTextCursor opening = doc->find(u"{"_s, cursor, QTextDocument::FindBackward);
const bool inSelector = !opening.isNull() && (closing.isNull() ||
closing.position() < opening.position());
QString insertion;
if (m_editor->textCursor().block().length() != 1)
- insertion += QLatin1Char('\n');
+ insertion += u'\n';
if (inSelector)
- insertion += QLatin1Char('\t');
+ insertion += u'\t';
insertion += name;
- insertion += QStringLiteral(": ");
+ insertion += ": "_L1;
insertion += value;
- insertion += QLatin1Char(';');
+ insertion += u';';
cursor.insertText(insertion);
cursor.endEditBlock();
} else {
@@ -321,8 +312,8 @@ void StyleSheetEditorDialog::insertCssProperty(const QString &name, const QStrin
void StyleSheetEditorDialog::slotRequestHelp()
{
- m_core->integration()->emitHelpRequested(QStringLiteral("qtwidgets"),
- QStringLiteral("stylesheet-reference.html"));
+ m_core->integration()->emitHelpRequested(u"qtwidgets"_s,
+ u"stylesheet-reference.html"_s);
}
// See QDialog::keyPressEvent()
@@ -363,10 +354,7 @@ bool StyleSheetEditorDialog::isStyleSheetValid(const QString &styleSheet)
QCss::StyleSheet sheet;
if (parser.parse(&sheet))
return true;
- QString fullSheet = QStringLiteral("* { ");
- fullSheet += styleSheet;
- fullSheet += QLatin1Char('}');
- QCss::Parser parser2(fullSheet);
+ QCss::Parser parser2("* { "_L1 + styleSheet + '}'_L1);
return parser2.parse(&sheet);
}
@@ -376,10 +364,10 @@ void StyleSheetEditorDialog::validateStyleSheet()
setOkButtonEnabled(valid);
if (valid) {
m_validityLabel->setText(tr("Valid Style Sheet"));
- m_validityLabel->setStyleSheet(QStringLiteral("color: green"));
+ m_validityLabel->setStyleSheet(u"color: green"_s);
} else {
m_validityLabel->setText(tr("Invalid Style Sheet"));
- m_validityLabel->setStyleSheet(QStringLiteral("color: red"));
+ m_validityLabel->setStyleSheet(u"color: red"_s);
}
}
@@ -402,7 +390,7 @@ StyleSheetPropertyEditorDialog::StyleSheetPropertyEditorDialog(QWidget *parent,
QDesignerPropertySheetExtension *sheet =
qt_extension<QDesignerPropertySheetExtension*>(m_fw->core()->extensionManager(), m_widget);
Q_ASSERT(sheet != nullptr);
- const int index = sheet->indexOf(QLatin1String(styleSheetProperty));
+ const int index = sheet->indexOf(styleSheetProperty);
const PropertySheetStringValue value = qvariant_cast<PropertySheetStringValue>(sheet->property(index));
setText(value.value());
}
@@ -410,7 +398,7 @@ StyleSheetPropertyEditorDialog::StyleSheetPropertyEditorDialog(QWidget *parent,
void StyleSheetPropertyEditorDialog::applyStyleSheet()
{
const PropertySheetStringValue value(text(), false);
- m_fw->cursor()->setWidgetProperty(m_widget, QLatin1String(styleSheetProperty), QVariant::fromValue(value));
+ m_fw->cursor()->setWidgetProperty(m_widget, styleSheetProperty, QVariant::fromValue(value));
}
} // namespace qdesigner_internal
diff --git a/src/designer/src/lib/shared/stylesheeteditor_p.h b/src/designer/src/lib/shared/stylesheeteditor_p.h
index ee6c3bc84..9943b4fa6 100644
--- a/src/designer/src/lib/shared/stylesheeteditor_p.h
+++ b/src/designer/src/lib/shared/stylesheeteditor_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/shared/textpropertyeditor.cpp b/src/designer/src/lib/shared/textpropertyeditor.cpp
index e78cb81b4..e345580ba 100644
--- a/src/designer/src/lib/shared/textpropertyeditor.cpp
+++ b/src/designer/src/lib/shared/textpropertyeditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "textpropertyeditor_p.h"
#include "propertylineedit_p.h"
@@ -42,9 +17,11 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace {
- const QChar NewLineChar(QLatin1Char('\n'));
- const QLatin1String EscapedNewLine("\\n");
+ const QChar NewLineChar(u'\n');
+ const auto EscapedNewLine = "\\n"_L1;
// A validator that replaces offending strings
class ReplacementValidator : public QValidator {
@@ -155,7 +132,7 @@ namespace {
QUrl UrlValidator::guessUrlFromString(const QString &string) const
{
const QString urlStr = string.trimmed();
- const QRegularExpression qualifiedUrl(QStringLiteral("^[a-zA-Z]+\\:.*$"));
+ const QRegularExpression qualifiedUrl(u"^[a-zA-Z]+\\:.*$"_s);
Q_ASSERT(qualifiedUrl.isValid());
// Check if it looks like a qualified URL. Try parsing it and see.
@@ -167,8 +144,8 @@ namespace {
}
// Might be a Qt resource
- if (string.startsWith(QStringLiteral(":/")))
- return QUrl(QStringLiteral("qrc") + string);
+ if (string.startsWith(":/"_L1))
+ return QUrl("qrc"_L1 + string);
// Might be a file.
if (QFile::exists(urlStr))
@@ -176,15 +153,15 @@ namespace {
// Might be a short url - try to detect the schema.
if (!hasSchema) {
- const int dotIndex = urlStr.indexOf(QLatin1Char('.'));
+ const int dotIndex = urlStr.indexOf(u'.');
if (dotIndex != -1) {
const QString prefix = urlStr.left(dotIndex).toLower();
QString urlString;
- if (prefix == QStringLiteral("ftp"))
+ if (prefix == "ftp"_L1)
urlString += prefix;
else
- urlString += QStringLiteral("http");
- urlString += QStringLiteral("://");
+ urlString += "http"_L1;
+ urlString += "://"_L1;
urlString += urlStr;
const QUrl url(urlString, QUrl::TolerantMode);
if (url.isValid())
@@ -246,30 +223,29 @@ namespace qdesigner_internal {
break;
case ValidationSingleLine:
// Set a validator that replaces newline characters by a blank.
- m_lineEdit->setValidator(new ReplacementValidator(m_lineEdit, NewLineChar, QString(QLatin1Char(' '))));
+ m_lineEdit->setValidator(new ReplacementValidator(m_lineEdit, NewLineChar, QString(u' ')));
m_lineEdit->setCompleter(nullptr);
break;
case ValidationObjectName:
- setRegularExpressionValidator(QStringLiteral("^[_a-zA-Z][_a-zA-Z0-9]{1,1023}$"));
+ setRegularExpressionValidator(u"^[_a-zA-Z][_a-zA-Z0-9]{1,1023}$"_s);
m_lineEdit->setCompleter(nullptr);
break;
case ValidationObjectNameScope:
- setRegularExpressionValidator(QStringLiteral("^[_a-zA-Z:][_a-zA-Z0-9:]{1,1023}$"));
+ setRegularExpressionValidator(u"^[_a-zA-Z:][_a-zA-Z0-9:]{1,1023}$"_s);
m_lineEdit->setCompleter(nullptr);
break;
case ValidationURL: {
- static QStringList urlCompletions;
- if (urlCompletions.isEmpty()) {
- urlCompletions.push_back(QStringLiteral("about:blank"));
- urlCompletions.push_back(QStringLiteral("http://"));
- urlCompletions.push_back(QStringLiteral("http://www."));
- urlCompletions.push_back(QStringLiteral("http://qt.io"));
- urlCompletions.push_back(QStringLiteral("file://"));
- urlCompletions.push_back(QStringLiteral("ftp://"));
- urlCompletions.push_back(QStringLiteral("data:"));
- urlCompletions.push_back(QStringLiteral("data:text/html,"));
- urlCompletions.push_back(QStringLiteral("qrc:/"));
- }
+ static const QStringList urlCompletions = {
+ u"about:blank"_s,
+ u"http://"_s,
+ u"http://www."_s,
+ u"http://qt.io"_s,
+ u"file://"_s,
+ u"ftp://"_s,
+ u"data:"_s,
+ u"data:text/html,"_s,
+ u"qrc:/"_s,
+ };
QCompleter *completer = new QCompleter(urlCompletions, m_lineEdit);
m_lineEdit->setCompleter(completer);
m_lineEdit->setValidator(new UrlValidator(completer, m_lineEdit));
@@ -376,9 +352,9 @@ namespace qdesigner_internal {
QString rc(s);
// protect backslashes
- rc.replace(QLatin1Char('\\'), QStringLiteral("\\\\"));
+ rc.replace('\\'_L1, "\\\\"_L1);
// escape newlines
- rc.replace(NewLineChar, QString(EscapedNewLine));
+ rc.replace(u'\n', EscapedNewLine);
return rc;
}
@@ -392,14 +368,14 @@ namespace qdesigner_internal {
return s;
QString rc(s);
- for (int pos = 0; (pos = rc.indexOf(QLatin1Char('\\'),pos)) >= 0 ; ) {
+ for (qsizetype pos = 0; (pos = rc.indexOf(u'\\', pos)) >= 0 ; ) {
// found an escaped character. If not a newline or at end of string, leave as is, else insert '\n'
- const int nextpos = pos + 1;
- if (nextpos >= rc.length()) // trailing '\\'
+ const qsizetype nextpos = pos + 1;
+ if (nextpos >= rc.size()) // trailing '\\'
break;
// Escaped NewLine
- if (rc.at(nextpos) == QChar(QLatin1Char('n')))
- rc[nextpos] = NewLineChar;
+ if (rc.at(nextpos) == u'n')
+ rc[nextpos] = u'\n';
// Remove escape, go past escaped
rc.remove(pos,1);
pos++;
diff --git a/src/designer/src/lib/shared/textpropertyeditor_p.h b/src/designer/src/lib/shared/textpropertyeditor_p.h
index fa899ed9e..3d32e9d6e 100644
--- a/src/designer/src/lib/shared/textpropertyeditor_p.h
+++ b/src/designer/src/lib/shared/textpropertyeditor_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -56,8 +31,6 @@ namespace qdesigner_internal {
// corresponds to that of QLineEdit.
class QDESIGNER_SHARED_EXPORT TextPropertyEditor : public QWidget
{
- TextPropertyEditor(const TextPropertyEditor &);
- TextPropertyEditor& operator=(const TextPropertyEditor &);
Q_OBJECT
Q_PROPERTY(QString text READ text WRITE setText USER true)
public:
diff --git a/src/designer/src/lib/shared/widgetdatabase.cpp b/src/designer/src/lib/shared/widgetdatabase.cpp
index 8621f2840..97df98f4d 100644
--- a/src/designer/src/lib/shared/widgetdatabase.cpp
+++ b/src/designer/src/lib/shared/widgetdatabase.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "widgetdatabase_p.h"
#include "widgetfactory_p.h"
@@ -40,23 +15,34 @@
#include <QtDesigner/abstractformeditor.h>
#include <QtUiPlugin/customwidget.h>
+#include <QtWidgets/QtWidgets>
+#ifdef QT_OPENGLWIDGETS_LIB
+#include <QtOpenGLWidgets/qopenglwidget.h>
+#endif
#include <QtCore/qxmlstream.h>
+#include <QtCore/qcoreapplication.h>
#include <QtCore/qscopedpointer.h>
#include <QtCore/qdebug.h>
#include <QtCore/qmetaobject.h>
+#include <QtCore/qset.h>
+#include <QtCore/qstring.h>
#include <QtCore/qtextstream.h>
#include <QtCore/qcoreapplication.h>
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace {
enum { debugWidgetDataBase = 0 };
}
namespace qdesigner_internal {
+using namespace Qt::StringLiterals;
+
// ----------------------------------------------------------
WidgetDataBaseItem::WidgetDataBaseItem(const QString &name, const QString &group)
: m_name(name),
@@ -247,6 +233,27 @@ WidgetDataBaseItem *WidgetDataBaseItem::clone(const QDesignerWidgetDataBaseItemI
return rc;
}
+QString WidgetDataBaseItem::baseClassName() const
+{
+ return m_extends.isEmpty() ? m_baseClassName : m_extends;
+}
+
+void WidgetDataBaseItem::setBaseClassName(const QString &b)
+{
+ m_baseClassName = b;
+}
+
+static void addWidgetItem(WidgetDataBase *wdb, const char *name, const QMetaObject &mo,
+ const char *comment)
+{
+ auto *item = new WidgetDataBaseItem(QString::fromUtf8(name));
+ if (auto *base = mo.superClass())
+ item->setBaseClassName(QString::fromUtf8(base->className()));
+ if (comment[0])
+ item->setToolTip(QString::fromUtf8(comment));
+ wdb->append(item);
+}
+
// ----------------------------------------------------------
WidgetDataBase::WidgetDataBase(QDesignerFormEditorInterface *core, QObject *parent)
: QDesignerWidgetDataBaseInterface(parent),
@@ -254,7 +261,7 @@ WidgetDataBase::WidgetDataBase(QDesignerFormEditorInterface *core, QObject *pare
{
#define DECLARE_LAYOUT(L, C)
#define DECLARE_COMPAT_WIDGET(W, C) DECLARE_WIDGET(W, C)
-#define DECLARE_WIDGET(W, C) append(new WidgetDataBaseItem(QString::fromUtf8(#W)));
+#define DECLARE_WIDGET(W, C) addWidgetItem(this, #W, W::staticMetaObject, C);
#include <widgets.table>
@@ -263,47 +270,65 @@ WidgetDataBase::WidgetDataBase(QDesignerFormEditorInterface *core, QObject *pare
#undef DECLARE_WIDGET
#undef DECLARE_WIDGET_1
- append(new WidgetDataBaseItem(QString::fromUtf8("Line")));
- append(new WidgetDataBaseItem(QString::fromUtf8("Spacer")));
- append(new WidgetDataBaseItem(QString::fromUtf8("QSplitter")));
- append(new WidgetDataBaseItem(QString::fromUtf8("QLayoutWidget")));
+ const QString msgAbstractClass =
+ QCoreApplication::translate("WidgetDataBase",
+ "Abstract base class that cannot be instantiated. For promotion/custom widget usage only.");
+
+#if QT_CONFIG(abstractbutton)
+ auto *abItem = new WidgetDataBaseItem(u"QAbstractButton"_s);
+ abItem->setToolTip(msgAbstractClass);
+ abItem->setBaseClassName(u"QWidget"_s);
+ append(abItem);
+#endif // QT_CONFIG(abstractbutton)
+
+#if QT_CONFIG(itemviews)
+ auto *aivItem = new WidgetDataBaseItem(u"QAbstractItemView"_s);
+ aivItem->setBaseClassName(u"QAbstractScrollArea"_s);
+ aivItem->setToolTip(msgAbstractClass);
+ append(aivItem);
+#endif // QT_CONFIG(itemviews)
+
+ append(new WidgetDataBaseItem(u"Line"_s));
+ append(new WidgetDataBaseItem(u"Spacer"_s));
+ append(new WidgetDataBaseItem(u"QSplitter"_s));
+ append(new WidgetDataBaseItem(u"QLayoutWidget"_s));
// QDesignerWidget is used as central widget and as container for tab widgets, etc.
- WidgetDataBaseItem *designerWidgetItem = new WidgetDataBaseItem(QString::fromUtf8("QDesignerWidget"));
+ WidgetDataBaseItem *designerWidgetItem = new WidgetDataBaseItem(u"QDesignerWidget"_s);
designerWidgetItem->setContainer(true);
append(designerWidgetItem);
- append(new WidgetDataBaseItem(QString::fromUtf8("QDesignerDialog")));
- append(new WidgetDataBaseItem(QString::fromUtf8("QDesignerMenu")));
- append(new WidgetDataBaseItem(QString::fromUtf8("QDesignerMenuBar")));
- append(new WidgetDataBaseItem(QString::fromUtf8("QDesignerDockWidget")));
- append(new WidgetDataBaseItem(QString::fromUtf8("QAction")));
- append(new WidgetDataBaseItem(QString::fromUtf8("QButtonGroup")));
+ append(new WidgetDataBaseItem(u"QDesignerDialog"_s));
+ append(new WidgetDataBaseItem(u"QDesignerMenu"_s));
+ append(new WidgetDataBaseItem(u"QDesignerMenuBar"_s));
+ append(new WidgetDataBaseItem(u"QDesignerDockWidget"_s));
+ append(new WidgetDataBaseItem(u"QAction"_s));
+ append(new WidgetDataBaseItem(u"QButtonGroup"_s));
// ### remove me
// ### check the casts
#if 0 // ### enable me after 4.1
- item(indexOfClassName(QStringLiteral("QToolBar")))->setContainer(true);
+ item(indexOfClassName(u"QToolBar"_s))->setContainer(true);
#endif
- item(indexOfClassName(QStringLiteral("QTabWidget")))->setContainer(true);
- item(indexOfClassName(QStringLiteral("QGroupBox")))->setContainer(true);
- item(indexOfClassName(QStringLiteral("QScrollArea")))->setContainer(true);
- item(indexOfClassName(QStringLiteral("QStackedWidget")))->setContainer(true);
- item(indexOfClassName(QStringLiteral("QToolBox")))->setContainer(true);
- item(indexOfClassName(QStringLiteral("QFrame")))->setContainer(true);
- item(indexOfClassName(QStringLiteral("QLayoutWidget")))->setContainer(true);
- item(indexOfClassName(QStringLiteral("QDesignerWidget")))->setContainer(true);
- item(indexOfClassName(QStringLiteral("QDesignerDialog")))->setContainer(true);
- item(indexOfClassName(QStringLiteral("QSplitter")))->setContainer(true);
- item(indexOfClassName(QStringLiteral("QMainWindow")))->setContainer(true);
- item(indexOfClassName(QStringLiteral("QDockWidget")))->setContainer(true);
- item(indexOfClassName(QStringLiteral("QDesignerDockWidget")))->setContainer(true);
- item(indexOfClassName(QStringLiteral("QMdiArea")))->setContainer(true);
- item(indexOfClassName(QStringLiteral("QWizard")))->setContainer(true);
- item(indexOfClassName(QStringLiteral("QWizardPage")))->setContainer(true);
-
- item(indexOfClassName(QStringLiteral("QWidget")))->setContainer(true);
- item(indexOfClassName(QStringLiteral("QDialog")))->setContainer(true);
+ item(indexOfClassName(u"QTabWidget"_s))->setContainer(true);
+ item(indexOfClassName(u"QGroupBox"_s))->setContainer(true);
+ item(indexOfClassName(u"QScrollArea"_s))->setContainer(true);
+ item(indexOfClassName(u"QStackedWidget"_s))->setContainer(true);
+ item(indexOfClassName(u"QToolBox"_s))->setContainer(true);
+ item(indexOfClassName(u"QFrame"_s))->setContainer(true);
+ item(indexOfClassName(u"QLayoutWidget"_s))->setContainer(true);
+ item(indexOfClassName(u"QDesignerWidget"_s))->setContainer(true);
+ item(indexOfClassName(u"QDesignerDialog"_s))->setContainer(true);
+ item(indexOfClassName(u"QSplitter"_s))->setContainer(true);
+ item(indexOfClassName(u"QMainWindow"_s))->setContainer(true);
+ item(indexOfClassName(u"QDockWidget"_s))->setContainer(true);
+ item(indexOfClassName(u"QDesignerDockWidget"_s))->setContainer(true);
+ item(indexOfClassName(u"QMdiArea"_s))->setContainer(true);
+ item(indexOfClassName(u"QWizard"_s))->setContainer(true);
+ item(indexOfClassName(u"QWizardPage"_s))->setContainer(true);
+
+ item(indexOfClassName(u"QWidget"_s))->setContainer(true);
+ item(indexOfClassName(u"QDialog"_s))->setContainer(true);
}
WidgetDataBase::~WidgetDataBase() = default;
@@ -347,22 +372,18 @@ static WidgetDataBaseItem *createCustomWidgetItem(const QDesignerCustomWidgetInt
void WidgetDataBase::loadPlugins()
{
- typedef QMap<QString, int> NameIndexMap;
- using ItemList = QList<QDesignerWidgetDataBaseItemInterface *>;
- using NameSet = QSet<QString>;
// 1) create a map of existing custom classes
- NameIndexMap existingCustomClasses;
- NameSet nonCustomClasses;
- const int count = m_items.size();
- for (int i = 0; i < count; i++) {
- const QDesignerWidgetDataBaseItemInterface* item = m_items[i];
+ QMap<QString, qsizetype> existingCustomClasses;
+ QSet<QString> nonCustomClasses;
+ for (qsizetype i = 0, count = m_items.size(); i < count; ++i) {
+ const QDesignerWidgetDataBaseItemInterface* item = m_items.at(i);
if (item->isCustom() && !item->isPromoted())
existingCustomClasses.insert(item->name(), i);
else
nonCustomClasses.insert(item->name());
}
// 2) create a list plugins
- ItemList pluginList;
+ QList<QDesignerWidgetDataBaseItemInterface *> pluginList;
const QDesignerPluginManager *pm = m_core->pluginManager();
const auto &customWidgets = pm->registeredCustomWidgets();
for (QDesignerCustomWidgetInterface* c : customWidgets)
@@ -374,10 +395,10 @@ void WidgetDataBase::loadPlugins()
unsigned addedPlugins = 0;
unsigned removedPlugins = 0;
if (!pluginList.isEmpty()) {
- for (QDesignerWidgetDataBaseItemInterface *pluginItem : qAsConst(pluginList)) {
+ for (QDesignerWidgetDataBaseItemInterface *pluginItem : std::as_const(pluginList)) {
const QString pluginName = pluginItem->name();
- NameIndexMap::iterator existingIt = existingCustomClasses.find(pluginName);
- if (existingIt == existingCustomClasses.end()) {
+ const auto existingIt = existingCustomClasses.constFind(pluginName);
+ if (existingIt == existingCustomClasses.cend()) {
// Add new class.
if (nonCustomClasses.contains(pluginName)) {
designerWarning(tr("A custom widget plugin whose class name (%1) matches that of an existing class has been found.").arg(pluginName));
@@ -387,7 +408,7 @@ void WidgetDataBase::loadPlugins()
}
} else {
// replace existing info
- const int existingIndex = existingIt.value();
+ const auto existingIndex = existingIt.value();
delete m_items[existingIndex];
m_items[existingIndex] = pluginItem;
existingCustomClasses.erase(existingIt);
@@ -397,16 +418,14 @@ void WidgetDataBase::loadPlugins()
}
}
// 4) remove classes that have not been matched. The stored indexes become invalid while deleting.
- if (!existingCustomClasses.isEmpty()) {
- NameIndexMap::const_iterator cend = existingCustomClasses.constEnd();
- for (NameIndexMap::const_iterator it = existingCustomClasses.constBegin();it != cend; ++it ) {
- const int index = indexOfClassName(it.key());
- if (index != -1) {
- remove(index);
- removedPlugins++;
- }
+ for (auto it = existingCustomClasses.cbegin(), cend = existingCustomClasses.cend(); it != cend; ++it ) {
+ const int index = indexOfClassName(it.key());
+ if (index != -1) {
+ remove(index);
+ removedPlugins++;
}
}
+
if (debugWidgetDataBase)
qDebug() << "WidgetDataBase::loadPlugins(): " << addedPlugins << " added, " << replacedPlugins << " replaced, " << removedPlugins << "deleted.";
}
@@ -456,7 +475,6 @@ void WidgetDataBase::grabStandardWidgetBoxIcons()
// At this point, grab the default icons for the non-custom widgets from
// the widget box. They will show up in the object inspector.
if (const QDesignerWidgetBox *wb = qobject_cast<const QDesignerWidgetBox *>(m_core->widgetBox())) {
- const QString qWidgetClass = QStringLiteral("QWidget");
const int itemCount = count();
for (int i = 0; i < itemCount; ++i) {
QDesignerWidgetDataBaseItemInterface *dbItem = item(i);
@@ -464,8 +482,8 @@ void WidgetDataBase::grabStandardWidgetBoxIcons()
// Careful not to catch the layout icons when looking for
// QWidget
const QString name = dbItem->name();
- if (name == qWidgetClass) {
- dbItem->setIcon(wb->iconForWidget(name, QStringLiteral("Containers")));
+ if (name == "QWidget"_L1) {
+ dbItem->setIcon(wb->iconForWidget(name, u"Containers"_s));
} else {
dbItem->setIcon(wb->iconForWidget(name));
}
@@ -481,7 +499,7 @@ enum { NewFormWidth = 400, NewFormHeight = 300 };
// Check if class is suitable to generate a form from
static inline bool isExistingTemplate(const QString &className)
{
- return className == QStringLiteral("QWidget") || className == QStringLiteral("QDialog") || className == QStringLiteral("QMainWindow");
+ return className == "QWidget"_L1 || className == "QDialog"_L1 || className == "QMainWindow"_L1;
}
// Check if class is suitable to generate a form from
@@ -489,9 +507,9 @@ static inline bool suitableForNewForm(const QString &className)
{
if (className.isEmpty()) // Missing custom widget information
return false;
- if (className == QStringLiteral("QSplitter"))
+ if (className == "QSplitter"_L1)
return false;
- if (className.startsWith(QStringLiteral("QDesigner")) || className.startsWith(QStringLiteral("QLayout")))
+ if (className.startsWith("QDesigner"_L1) || className.startsWith("QLayout"_L1))
return false;
return true;
}
@@ -537,8 +555,6 @@ QStringList WidgetDataBase::customFormWidgetClasses(const QDesignerFormEditorInt
// properties to be suitable for new forms
static QString xmlFromWidgetBox(const QDesignerFormEditorInterface *core, const QString &className, const QString &objectName)
{
- using PropertyList = QList<DomProperty *>;
-
QDesignerWidgetBoxInterface::Widget widget;
const bool found = QDesignerWidgetBox::findWidget(core->widgetBox(), className, QString(), &widget);
if (!found)
@@ -546,22 +562,20 @@ static QString xmlFromWidgetBox(const QDesignerFormEditorInterface *core, const
QScopedPointer<DomUI> domUI(QDesignerWidgetBox::xmlToUi(className, widget.domXml(), false));
if (domUI.isNull())
return QString();
- domUI->setAttributeVersion(QStringLiteral("4.0"));
+ domUI->setAttributeVersion(u"4.0"_s);
DomWidget *domWidget = domUI->elementWidget();
if (!domWidget)
return QString();
// Properties: Remove the "objectName" property in favour of the name attribute and check geometry.
domWidget->setAttributeName(objectName);
- const QString geometryProperty = QStringLiteral("geometry");
- const QString objectNameProperty = QStringLiteral("objectName");
- PropertyList properties = domWidget->elementProperty();
- for (PropertyList::iterator it = properties.begin(); it != properties.end(); ) {
+ QList<DomProperty *> properties = domWidget->elementProperty();
+ for (auto it = properties.begin(); it != properties.end(); ) {
DomProperty *property = *it;
- if (property->attributeName() == objectNameProperty) { // remove "objectName"
+ if (property->attributeName() == "objectName"_L1) { // remove "objectName"
it = properties.erase(it);
delete property;
} else {
- if (property->attributeName() == geometryProperty) { // Make sure form is at least 400, 300
+ if (property->attributeName() == "geometry"_L1) { // Make sure form is at least 400, 300
if (DomRect *geom = property->elementRect()) {
if (geom->elementWidth() < NewFormWidth)
geom->setElementWidth(NewFormWidth);
@@ -576,7 +590,7 @@ static QString xmlFromWidgetBox(const QDesignerFormEditorInterface *core, const
DomString *windowTitleString = new DomString;
windowTitleString->setText(objectName);
DomProperty *windowTitleProperty = new DomProperty;
- windowTitleProperty->setAttributeName(QStringLiteral("windowTitle"));
+ windowTitleProperty->setAttributeName(u"windowTitle"_s);
windowTitleProperty->setElementString(windowTitleString);
properties.push_back(windowTitleProperty);
// ------
@@ -607,11 +621,11 @@ static QString generateNewFormXML(const QString &className, const QString &simil
<< NewFormWidth << "</width><height>" << NewFormHeight << "</height></rect></property>"
<< R"(<property name="windowTitle"><string>)" << name << "</string></property>\n";
- if (similarClassName == QLatin1String("QMainWindow")) {
+ if (similarClassName == "QMainWindow"_L1) {
str << R"(<widget class="QWidget" name="centralwidget"/>)";
- } else if (similarClassName == QLatin1String("QWizard")) {
+ } else if (similarClassName == "QWizard"_L1) {
str << R"(<widget class="QWizardPage" name="wizardPage1"/><widget class="QWizardPage" name="wizardPage2"/>)";
- } else if (similarClassName == QLatin1String("QDockWidget")) {
+ } else if (similarClassName == "QDockWidget"_L1) {
str << R"(<widget class="QWidget" name="dockWidgetContents"/>)";
}
str << "</widget></ui>\n";
@@ -629,7 +643,7 @@ QString WidgetDataBase::formTemplate(const QDesignerFormEditorInterface *core, c
// 2) If that fails, only custom main windows, custom dialogs and unsupported Qt Widgets should
// be left over. Generate something that is similar to the default templates. Find a similar class.
const QDesignerWidgetDataBaseInterface *wdb = core->widgetDataBase();
- QString similarClass = QStringLiteral("QWidget");
+ QString similarClass = u"QWidget"_s;
const int index = wdb->indexOfClassName(className);
if (index != -1) {
const QDesignerWidgetDataBaseItemInterface *item = wdb->item(index);
@@ -643,16 +657,16 @@ QString WidgetDataBase::formTemplate(const QDesignerFormEditorInterface *core, c
// Set a fixed size on a XML template
QString WidgetDataBase::scaleFormTemplate(const QString &xml, const QSize &size, bool fixed)
{
- QScopedPointer<DomUI> domUI(QDesignerWidgetBox::xmlToUi(QStringLiteral("Form"), xml, false));
+ QScopedPointer<DomUI> domUI(QDesignerWidgetBox::xmlToUi(u"Form"_s, xml, false));
if (!domUI)
return QString();
DomWidget *domWidget = domUI->elementWidget();
if (!domWidget)
return QString();
// Properties: Find/Ensure the geometry, minimum and maximum sizes properties
- const QString geometryPropertyName = QStringLiteral("geometry");
- const QString minimumSizePropertyName = QStringLiteral("minimumSize");
- const QString maximumSizePropertyName = QStringLiteral("maximumSize");
+ const QString geometryPropertyName = u"geometry"_s;
+ const QString minimumSizePropertyName = u"minimumSize"_s;
+ const QString maximumSizePropertyName = u"maximumSize"_s;
DomProperty *geomProperty = nullptr;
DomProperty *minimumSizeProperty = nullptr;
DomProperty *maximumSizeProperty = nullptr;
@@ -662,13 +676,10 @@ QString WidgetDataBase::scaleFormTemplate(const QString &xml, const QSize &size,
const QString name = p->attributeName();
if (name == geometryPropertyName) {
geomProperty = p;
- } else {
- if (name == minimumSizePropertyName) {
- minimumSizeProperty = p;
- } else {
- if (name == maximumSizePropertyName)
- maximumSizeProperty = p;
- }
+ } else if (name == minimumSizePropertyName) {
+ minimumSizeProperty = p;
+ } else if (name == maximumSizePropertyName) {
+ maximumSizeProperty = p;
}
}
if (!geomProperty) {
@@ -727,20 +738,19 @@ QString WidgetDataBase::scaleFormTemplate(const QString &xml, const QSize &size,
// ---- free functions
QDESIGNER_SHARED_EXPORT IncludeSpecification includeSpecification(QString includeFile)
{
- const bool global = !includeFile.isEmpty() &&
- includeFile[0] == QLatin1Char('<') &&
- includeFile[includeFile.size() - 1] == QLatin1Char('>');
+ const bool global = includeFile.startsWith(u'<') && includeFile.endsWith(u'>');
if (global) {
- includeFile.remove(includeFile.size() - 1, 1);
+ includeFile.chop(1);
includeFile.remove(0, 1);
}
return IncludeSpecification(includeFile, global ? IncludeGlobal : IncludeLocal);
}
-QDESIGNER_SHARED_EXPORT QString buildIncludeFile(QString includeFile, IncludeType includeType) {
+QDESIGNER_SHARED_EXPORT QString buildIncludeFile(QString includeFile, IncludeType includeType)
+{
if (includeType == IncludeGlobal && !includeFile.isEmpty()) {
- includeFile.append(QLatin1Char('>'));
- includeFile.insert(0, QLatin1Char('<'));
+ includeFile.append(u'>');
+ includeFile.prepend(u'<');
}
return includeFile;
}
@@ -803,8 +813,7 @@ QDESIGNER_SHARED_EXPORT QDesignerWidgetDataBaseItemInterface *
derivedItem = WidgetDataBaseItem::clone(baseItem);
// Sort of hack: If base class is QWidget, we most likely
// do not want to inherit the container attribute.
- static const QString qWidgetName = QStringLiteral("QWidget");
- if (baseItem->name() == qWidgetName)
+ if (baseItem->name() == "QWidget"_L1)
derivedItem->setContainer(false);
// set new props
derivedItem->setName(className);
diff --git a/src/designer/src/lib/shared/widgetdatabase_p.h b/src/designer/src/lib/shared/widgetdatabase_p.h
index 73f00b6b6..10c3af61e 100644
--- a/src/designer/src/lib/shared/widgetdatabase_p.h
+++ b/src/designer/src/lib/shared/widgetdatabase_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -106,6 +81,9 @@ public:
static WidgetDataBaseItem *clone(const QDesignerWidgetDataBaseItemInterface *item);
+ QString baseClassName() const; // FIXME Qt 7: Move to QDesignerWidgetDataBaseItemInterface
+ void setBaseClassName(const QString &b);
+
QStringList fakeSlots() const;
void setFakeSlots(const QStringList &);
@@ -117,6 +95,7 @@ public:
private:
QString m_name;
+ QString m_baseClassName;
QString m_group;
QString m_toolTip;
QString m_whatsThis;
@@ -136,7 +115,7 @@ private:
enum IncludeType { IncludeLocal, IncludeGlobal };
-using IncludeSpecification = QPair<QString, IncludeType>;
+using IncludeSpecification = std::pair<QString, IncludeType>;
QDESIGNER_SHARED_EXPORT IncludeSpecification includeSpecification(QString includeFile);
QDESIGNER_SHARED_EXPORT QString buildIncludeFile(QString includeFile, IncludeType includeType);
diff --git a/src/designer/src/lib/shared/widgetfactory.cpp b/src/designer/src/lib/shared/widgetfactory.cpp
index 026fe1817..537ecf8a9 100644
--- a/src/designer/src/lib/shared/widgetfactory.cpp
+++ b/src/designer/src/lib/shared/widgetfactory.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "widgetfactory_p.h"
#include "widgetdatabase_p.h"
@@ -71,18 +46,28 @@
#include <QtCore/qmetaobject.h>
#include <QtCore/qpointer.h>
+#if QT_CONFIG(abstractbutton)
+# include <QtWidgets/qabstractbutton.h>
+#endif
+
+#if QT_CONFIG(itemviews)
+# include <QtWidgets/qabstractitemview.h>
+#endif
+
#ifdef QT_OPENGLWIDGETS_LIB
# include <QtOpenGLWidgets/qopenglwidget.h>
#endif
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
#ifdef Q_OS_WIN
static inline bool isAxWidget(const QObject *o)
{
// Is it one of QDesignerAxWidget/QDesignerAxPluginWidget?
- static const char *axWidgetName = "QDesignerAx";
- static const unsigned axWidgetNameLen = qstrlen(axWidgetName);
+ static const char axWidgetName[] = "QDesignerAx";
+ static const size_t axWidgetNameLen = qstrlen(axWidgetName);
return qstrncmp(o->metaObject()->className(), axWidgetName, axWidgetNameLen) == 0;
}
#endif
@@ -90,10 +75,63 @@ static inline bool isAxWidget(const QObject *o)
/* Dynamic boolean property indicating object was created by the factory
* for the form editor. */
-static const char *formEditorDynamicProperty = "_q_formEditorObject";
+static const char formEditorDynamicProperty[] = "_q_formEditorObject";
namespace qdesigner_internal {
+#if QT_CONFIG(abstractbutton)
+
+class QDesignerAbstractButton : public QAbstractButton
+{
+public:
+ using QAbstractButton::QAbstractButton;
+
+protected:
+ void paintEvent(QPaintEvent *) override {}
+};
+
+#endif
+
+#if QT_CONFIG(itemviews)
+
+class QDesignerAbstractItemView : public QAbstractItemView
+{
+public:
+ using QAbstractItemView::QAbstractItemView;
+
+ QRect visualRect(const QModelIndex &) const override
+ {
+ return QRect(QPoint(), QSize(10, 10));
+ }
+
+ void scrollTo(const QModelIndex &, ScrollHint = EnsureVisible) override {}
+
+ QModelIndex indexAt(const QPoint &) const override
+ {
+ return {};
+ }
+
+protected:
+ QModelIndex moveCursor(CursorAction, Qt::KeyboardModifiers) override
+ {
+ return {};
+ }
+
+ int horizontalOffset() const override { return 0; }
+ int verticalOffset() const override { return 0; }
+
+ bool isIndexHidden(const QModelIndex &) const override { return false; }
+
+ void setSelection(const QRect &, QItemSelectionModel::SelectionFlags) override {}
+
+ QRegion visualRegionForSelection(const QItemSelection &) const override
+ {
+ return QRegion(QRect(QPoint(), QSize(10, 10)));
+ }
+};
+
+#endif // QT_CONFIG(itemviews)
+
// A friendly SpinBox that grants access to its QLineEdit
class FriendlySpinBox : public QAbstractSpinBox {
public:
@@ -163,35 +201,6 @@ void WizardPageChangeWatcher::pageChanged()
}
}
-// ---------------- WidgetFactory::Strings
-WidgetFactory::Strings::Strings() :
- m_alignment(QStringLiteral("alignment")),
- m_bottomMargin(QStringLiteral("bottomMargin")),
- m_geometry(QStringLiteral("geometry")),
- m_leftMargin(QStringLiteral("leftMargin")),
- m_line(QStringLiteral("Line")),
- m_objectName(QStringLiteral("objectName")),
- m_spacerName(QStringLiteral("spacerName")),
- m_orientation(QStringLiteral("orientation")),
- m_qAction(QStringLiteral("QAction")),
- m_qButtonGroup(QStringLiteral("QButtonGroup")),
- m_qAxWidget(QStringLiteral("QAxWidget")),
- m_qDialog(QStringLiteral("QDialog")),
- m_qDockWidget(QStringLiteral("QDockWidget")),
- m_qLayoutWidget(QStringLiteral("QLayoutWidget")),
- m_qMenu(QStringLiteral("QMenu")),
- m_qMenuBar(QStringLiteral("QMenuBar")),
- m_qWidget(QStringLiteral("QWidget")),
- m_rightMargin(QStringLiteral("rightMargin")),
- m_sizeHint(QStringLiteral("sizeHint")),
- m_spacer(QStringLiteral("Spacer")),
- m_text(QStringLiteral("text")),
- m_title(QStringLiteral("title")),
- m_topMargin(QStringLiteral("topMargin")),
- m_windowIcon(QStringLiteral("windowIcon")),
- m_windowTitle(QStringLiteral("windowTitle"))
-{
-}
// ---------------- WidgetFactory
const char *WidgetFactory::disableStyleCustomPaintingPropertyC = "_q_custom_style_disabled";
@@ -228,9 +237,9 @@ QObject* WidgetFactory::createObject(const QString &className, QObject* parent)
qWarning("** WARNING %s called with an empty class name", Q_FUNC_INFO);
return nullptr;
}
- if (className == m_strings.m_qAction)
+ if (className == "QAction"_L1)
return new QAction(parent);
- if (className == m_strings.m_qButtonGroup)
+ if (className == "QButtonGroup"_L1)
return new QButtonGroup(parent);
return nullptr;
}
@@ -257,11 +266,11 @@ static bool classNameMatches(const QObject *created, const QString &className)
QWidget* WidgetFactory::createCustomWidget(const QString &className, QWidget *parentWidget, bool *creationError) const
{
*creationError = false;
- CustomWidgetFactoryMap::const_iterator it = m_customFactory.constFind(className);
- if (it == m_customFactory.constEnd())
+
+ auto *factory = m_customFactory.value(className, nullptr);
+ if (factory == nullptr)
return nullptr;
- QDesignerCustomWidgetInterface *factory = it.value();
QWidget *rc = factory->createWidget(parentWidget);
// shouldn't happen
if (!rc) {
@@ -332,25 +341,33 @@ QWidget *WidgetFactory::createWidget(const QString &widgetName, QWidget *parentW
return nullptr;
// 2) Special widgets
- if (widgetName == m_strings.m_line) {
+ if (widgetName == "Line"_L1) {
w = new Line(parentWidget);
- } else if (widgetName == m_strings.m_qDockWidget) {
+#if QT_CONFIG(abstractbutton)
+ } else if (widgetName == u"QAbstractButton") {
+ w = new QDesignerAbstractButton(parentWidget);
+#endif
+#if QT_CONFIG(itemviews)
+ } else if (widgetName == u"QAbstractItemView") {
+ w = new QDesignerAbstractItemView(parentWidget);
+#endif
+ } else if (widgetName == "QDockWidget"_L1) {
w = new QDesignerDockWidget(parentWidget);
- } else if (widgetName == m_strings.m_qMenuBar) {
+ } else if (widgetName == "QMenuBar"_L1) {
w = new QDesignerMenuBar(parentWidget);
- } else if (widgetName == m_strings.m_qMenu) {
+ } else if (widgetName == "QMenu"_L1) {
w = new QDesignerMenu(parentWidget);
- } else if (widgetName == m_strings.m_spacer) {
+ } else if (widgetName == "Spacer"_L1) {
w = new Spacer(parentWidget);
- } else if (widgetName == m_strings.m_qLayoutWidget) {
+ } else if (widgetName == "QLayoutWidget"_L1) {
w = fw ? new QLayoutWidget(fw, parentWidget) : new QWidget(parentWidget);
- } else if (widgetName == m_strings.m_qDialog) {
+ } else if (widgetName == "QDialog"_L1) {
if (fw) {
w = new QDesignerDialog(fw, parentWidget);
} else {
w = new QDialog(parentWidget);
}
- } else if (widgetName == m_strings.m_qWidget) {
+ } else if (widgetName == "QWidget"_L1) {
/* We want a 'QDesignerWidget' that draws a grid only for widget
* forms and container extension pages (not for preview and not
* for normal QWidget children on forms (legacy) */
@@ -390,13 +407,13 @@ QWidget *WidgetFactory::createWidget(const QString &widgetName, QWidget *parentW
if (w)
break;
// 4) fallBack
- const QString fallBackBaseClass = m_strings.m_qWidget;
+ const QString fallBackBaseClass = "QWidget"_L1;
QDesignerWidgetDataBaseInterface *db = core()->widgetDataBase();
QDesignerWidgetDataBaseItemInterface *item = db->item(db->indexOfClassName(widgetName));
if (item == nullptr) {
// Emergency: Create, derived from QWidget
QString includeFile = widgetName.toLower();
- includeFile += QStringLiteral(".h");
+ includeFile += ".h"_L1;
item = appendDerived(db,widgetName, tr("%1 Widget").arg(widgetName),fallBackBaseClass,
includeFile, true, true);
Q_ASSERT(item);
@@ -431,27 +448,27 @@ QString WidgetFactory::classNameOf(QDesignerFormEditorInterface *c, const QObjec
const char *className = o->metaObject()->className();
if (!o->isWidgetType())
- return QLatin1String(className);
+ return QLatin1StringView(className);
const QWidget *w = static_cast<const QWidget*>(o);
// check promoted before designer special
const QString customClassName = promotedCustomClassName(c, const_cast<QWidget*>(w));
if (!customClassName.isEmpty())
return customClassName;
if (qobject_cast<const QDesignerMenuBar*>(w))
- return QStringLiteral("QMenuBar");
+ return u"QMenuBar"_s;
if (qobject_cast<const QDesignerMenu*>(w))
- return QStringLiteral("QMenu");
+ return u"QMenu"_s;
if (qobject_cast<const QDesignerDockWidget*>(w))
- return QStringLiteral("QDockWidget");
+ return u"QDockWidget"_s;
if (qobject_cast<const QDesignerDialog*>(w))
- return QStringLiteral("QDialog");
+ return u"QDialog"_s;
if (qobject_cast<const QDesignerWidget*>(w))
- return QStringLiteral("QWidget");
+ return u"QWidget"_s;
#ifdef Q_OS_WIN
if (isAxWidget(w))
- return QStringLiteral("QAxWidget");
+ return u"QAxWidget"_s;
#endif
- return QLatin1String(className);
+ return QLatin1StringView(className);
}
QLayout *WidgetFactory::createUnmanagedLayout(QWidget *parentWidget, int type)
@@ -508,15 +525,15 @@ QLayout *WidgetFactory::createLayout(QWidget *widget, QLayout *parentLayout, int
QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core()->extensionManager(), layout);
if (sheet) {
- sheet->setChanged(sheet->indexOf(m_strings.m_objectName), true);
+ sheet->setChanged(sheet->indexOf(u"objectName"_s), true);
if (widget->inherits("QLayoutWidget")) {
- sheet->setProperty(sheet->indexOf(m_strings.m_leftMargin), 0);
- sheet->setProperty(sheet->indexOf(m_strings.m_topMargin), 0);
- sheet->setProperty(sheet->indexOf(m_strings.m_rightMargin), 0);
- sheet->setProperty(sheet->indexOf(m_strings.m_bottomMargin), 0);
+ sheet->setProperty(sheet->indexOf(u"leftMargin"_s), 0);
+ sheet->setProperty(sheet->indexOf(u"topMargin"_s), 0);
+ sheet->setProperty(sheet->indexOf(u"rightMargin"_s), 0);
+ sheet->setProperty(sheet->indexOf(u"bottomMargin"_s), 0);
}
- const int index = sheet->indexOf(m_strings.m_alignment);
+ const int index = sheet->indexOf(u"alignment"_s);
if (index != -1)
sheet->setChanged(index, true);
}
@@ -615,11 +632,11 @@ void WidgetFactory::initialize(QObject *object) const
if (!sheet)
return;
- sheet->setChanged(sheet->indexOf(m_strings.m_objectName), true);
+ sheet->setChanged(sheet->indexOf(u"objectName"_s), true);
if (!object->isWidgetType()) {
if (qobject_cast<QAction*>(object))
- sheet->setChanged(sheet->indexOf(m_strings.m_text), true);
+ sheet->setChanged(sheet->indexOf(u"text"_s), true);
return;
}
@@ -631,32 +648,32 @@ void WidgetFactory::initialize(QObject *object) const
widget->setFocusPolicy((isMenu || isMenuBar) ? Qt::StrongFocus : Qt::NoFocus);
if (!isMenu)
- sheet->setChanged(sheet->indexOf(m_strings.m_geometry), true);
+ sheet->setChanged(sheet->indexOf(u"geometry"_s), true);
if (qobject_cast<Spacer*>(widget)) {
- sheet->setChanged(sheet->indexOf(m_strings.m_spacerName), true);
+ sheet->setChanged(sheet->indexOf(u"spacerName"_s), true);
return;
}
- const int o = sheet->indexOf(m_strings.m_orientation);
+ const int o = sheet->indexOf(u"orientation"_s);
if (o != -1 && widget->inherits("QSplitter"))
sheet->setChanged(o, true);
if (QToolBar *toolBar = qobject_cast<QToolBar*>(widget)) {
ToolBarEventFilter::install(toolBar);
- sheet->setVisible(sheet->indexOf(m_strings.m_windowTitle), true);
+ sheet->setVisible(sheet->indexOf(u"windowTitle"_s), true);
toolBar->setFloatable(false); // prevent toolbars from being dragged off
return;
}
if (qobject_cast<QDockWidget*>(widget)) {
- sheet->setVisible(sheet->indexOf(m_strings.m_windowTitle), true);
- sheet->setVisible(sheet->indexOf(m_strings.m_windowIcon), true);
+ sheet->setVisible(sheet->indexOf(u"windowTitle"_s), true);
+ sheet->setVisible(sheet->indexOf(u"windowIcon"_s), true);
return;
}
if (isMenu) {
- sheet->setChanged(sheet->indexOf(m_strings.m_title), true);
+ sheet->setChanged(sheet->indexOf(u"title"_s), true);
return;
}
// helpers
@@ -694,7 +711,7 @@ void WidgetFactory::initialize(QObject *object) const
static inline QString classNameOfStyle(const QStyle *s)
{
- return QLatin1String(s->metaObject()->className());
+ return QLatin1StringView(s->metaObject()->className());
}
QString WidgetFactory::styleName() const
@@ -722,7 +739,7 @@ QStyle *WidgetFactory::getStyle(const QString &styleName)
if (isApplicationStyle(styleName))
return qApp->style();
- StyleCache::iterator it = m_styleCache.find(styleName);
+ auto it = m_styleCache.find(styleName);
if (it == m_styleCache.end()) {
QStyle *style = QStyleFactory::create(styleName);
if (!style) {
@@ -752,9 +769,8 @@ void WidgetFactory::applyStyleToTopLevel(QStyle *style, QWidget *widget)
widget->setStyle(style);
widget->setPalette(standardPalette);
const QWidgetList lst = widget->findChildren<QWidget*>();
- const QWidgetList::const_iterator cend = lst.constEnd();
- for (QWidgetList::const_iterator it = lst.constBegin(); it != cend; ++it)
- (*it)->setStyle(style);
+ for (auto *w : lst)
+ w->setStyle(style);
}
// Check for 'interactor' click on a tab bar,
@@ -791,9 +807,6 @@ static bool isTabBarInteractor(const QTabBar *tabBar)
static bool isPassiveInteractorHelper(const QWidget *widget)
{
- static const QString qtPassive = QStringLiteral("__qt__passive_");
- static const QString qtMainWindowSplitter = QStringLiteral("qt_qmainwindow_extended_splitter");
-
if (qobject_cast<const QMenuBar*>(widget)
#if QT_CONFIG(sizegrip)
|| qobject_cast<const QSizeGrip*>(widget)
@@ -813,10 +826,8 @@ static bool isPassiveInteractorHelper(const QWidget *widget)
} else if (qobject_cast<const QScrollBar*>(widget)) {
// A scroll bar is an interactor on a QAbstractScrollArea only.
if (auto parent = widget->parentWidget()) {
- const QString objectName = parent->objectName();
- static const QString scrollAreaVContainer = QStringLiteral("qt_scrollarea_vcontainer");
- static const QString scrollAreaHContainer = QStringLiteral("qt_scrollarea_hcontainer");
- if (objectName == scrollAreaVContainer || objectName == scrollAreaHContainer)
+ const QString &objectName = parent->objectName();
+ if (objectName == "qt_scrollarea_vcontainer"_L1 || objectName == "qt_scrollarea_hcontainer"_L1)
return true;
}
} else if (qstrcmp(widget->metaObject()->className(), "QDockWidgetTitle") == 0) {
@@ -825,7 +836,8 @@ static bool isPassiveInteractorHelper(const QWidget *widget)
return true;
}
const QString &name = widget->objectName();
- return name.startsWith(qtPassive) || name == qtMainWindowSplitter;
+ return name.startsWith("__qt__passive_"_L1)
+ || name == "qt_qmainwindow_extended_splitter"_L1;
}
bool WidgetFactory::isPassiveInteractor(QWidget *widget)
diff --git a/src/designer/src/lib/shared/widgetfactory_p.h b/src/designer/src/lib/shared/widgetfactory_p.h
index e9fd4bfe6..6844ed578 100644
--- a/src/designer/src/lib/shared/widgetfactory_p.h
+++ b/src/designer/src/lib/shared/widgetfactory_p.h
@@ -1,30 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+
+
+
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
@@ -119,49 +97,17 @@ public slots:
void formWindowAdded(QDesignerFormWindowInterface *formWindow);
private:
- struct Strings { // Reduce string allocations by storing predefined strings
- Strings();
- const QString m_alignment;
- const QString m_bottomMargin;
- const QString m_geometry;
- const QString m_leftMargin;
- const QString m_line;
- const QString m_objectName;
- const QString m_spacerName;
- const QString m_orientation;
- const QString m_qAction;
- const QString m_qButtonGroup;
- const QString m_qAxWidget;
- const QString m_qDialog;
- const QString m_qDockWidget;
- const QString m_qLayoutWidget;
- const QString m_qMenu;
- const QString m_qMenuBar;
- const QString m_qWidget;
- const QString m_rightMargin;
- const QString m_sizeHint;
- const QString m_spacer;
- const QString m_text;
- const QString m_title;
- const QString m_topMargin;
- const QString m_windowIcon;
- const QString m_windowTitle;
- };
-
QWidget* createCustomWidget(const QString &className, QWidget *parentWidget, bool *creationError) const;
QDesignerFormWindowInterface *findFormWindow(QWidget *parentWidget) const;
void setFormWindowStyle(QDesignerFormWindowInterface *formWindow);
- const Strings m_strings;
QDesignerFormEditorInterface *m_core;
- using CustomWidgetFactoryMap = QMap<QString, QDesignerCustomWidgetInterface*>;
- CustomWidgetFactoryMap m_customFactory;
+ QMap<QString, QDesignerCustomWidgetInterface *> m_customFactory;
QDesignerFormWindowInterface *m_formWindow;
// Points to the cached style or 0 if the default (qApp) is active
QStyle *m_currentStyle;
- using StyleCache = QHash<QString, QStyle *>;
- StyleCache m_styleCache;
+ QHash<QString, QStyle *> m_styleCache;
};
} // namespace qdesigner_internal
diff --git a/src/designer/src/lib/shared/zoomwidget.cpp b/src/designer/src/lib/shared/zoomwidget.cpp
index 6c947f4ac..57968920c 100644
--- a/src/designer/src/lib/shared/zoomwidget.cpp
+++ b/src/designer/src/lib/shared/zoomwidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "zoomwidget_p.h"
@@ -44,6 +19,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
enum { debugZoomWidget = 0 };
static const int menuZoomList[] = { 100, 25, 50, 75, 125, 150 , 175, 200 };
@@ -249,7 +226,7 @@ QVariant ZoomProxyWidget::itemChange(GraphicsItemChange change, const QVariant &
* It redirects the events to another handler of ZoomWidget as its
* base class QScrollArea also implements eventFilter() for its viewport. */
-static const char *zoomedEventFilterRedirectorNameC = "__qt_ZoomedEventFilterRedirector";
+static constexpr auto zoomedEventFilterRedirectorNameC = "__qt_ZoomedEventFilterRedirector"_L1;
class ZoomedEventFilterRedirector : public QObject {
Q_DISABLE_COPY_MOVE(ZoomedEventFilterRedirector)
@@ -266,7 +243,7 @@ ZoomedEventFilterRedirector::ZoomedEventFilterRedirector(ZoomWidget *zw, QObject
QObject(parent),
m_zw(zw)
{
- setObjectName(QLatin1String(zoomedEventFilterRedirectorNameC));
+ setObjectName(zoomedEventFilterRedirectorNameC);
}
bool ZoomedEventFilterRedirector::eventFilter(QObject *watched, QEvent *event)
@@ -293,7 +270,7 @@ void ZoomWidget::setWidget(QWidget *w, Qt::WindowFlags wFlags)
scene().removeItem(m_proxy);
if (QWidget *w = m_proxy->widget()) {
// remove the event filter
- if (QObject *evf = w->findChild<QObject*>(QLatin1String(zoomedEventFilterRedirectorNameC)))
+ if (QObject *evf = w->findChild<QObject*>(zoomedEventFilterRedirectorNameC))
w->removeEventFilter(evf);
}
m_proxy->deleteLater();
diff --git a/src/designer/src/lib/shared/zoomwidget_p.h b/src/designer/src/lib/shared/zoomwidget_p.h
index 1830be4be..0e8a602eb 100644
--- a/src/designer/src/lib/shared/zoomwidget_p.h
+++ b/src/designer/src/lib/shared/zoomwidget_p.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
//
// W A R N I N G
diff --git a/src/designer/src/lib/uilib/abstractformbuilder.cpp b/src/designer/src/lib/uilib/abstractformbuilder.cpp
index 8711e1349..01feb1a7c 100644
--- a/src/designer/src/lib/uilib/abstractformbuilder.cpp
+++ b/src/designer/src/lib/uilib/abstractformbuilder.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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 "abstractformbuilder.h"
#include "formbuilderextra_p.h"
@@ -92,14 +56,23 @@
Q_DECLARE_METATYPE(QWidgetList)
-static const char *buttonGroupPropertyC = "buttonGroup";
-
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
+static constexpr auto buttonGroupPropertyC = "buttonGroup"_L1;
+
#ifdef QFORMINTERNAL_NAMESPACE
using namespace QFormInternal;
#endif
+using QFBE = QFormBuilderExtra;
+
+static inline DomProperty *currentIndexProperty(const QList<DomProperty*> &properties)
+{
+ return QFBE::propertyByName(properties, "currentIndex");
+}
+
class QFriendlyLayout: public QLayout
{
public:
@@ -127,7 +100,7 @@ public:
QFormBuilder class to create user interfaces from UI files at
run-time. For example:
- \snippet lib/tools_designer_src_lib_uilib_abstractformbuilder.cpp 0
+ \snippet lib/tools_designer_src_lib_uilib_formbuilder.cpp 0
To override certain aspects of the form builder's behavior,
subclass QAbstractFormBuilder and reimplement the relevant virtual
@@ -188,8 +161,6 @@ QWidget *QAbstractFormBuilder::load(QIODevice *dev, QWidget *parentWidget)
*/
QWidget *QAbstractFormBuilder::create(DomUI *ui, QWidget *parentWidget)
{
- using ButtonGroupHash = QFormBuilderExtra::ButtonGroupHash;
-
d->clear();
if (const DomLayoutDefault *def = ui->elementLayoutDefault()) {
d->m_defaultMargin = def->hasAttributeMargin() ? def->attributeMargin() : INT_MIN;
@@ -207,12 +178,9 @@ QWidget *QAbstractFormBuilder::create(DomUI *ui, QWidget *parentWidget)
if (QWidget *widget = create(ui_widget, parentWidget)) {
// Reparent button groups that were actually created to main container for them to be found in the signal/slot part
- const ButtonGroupHash &buttonGroups = d->buttonGroups();
- if (!buttonGroups.isEmpty()) {
- const ButtonGroupHash::const_iterator cend = buttonGroups.constEnd();
- for (ButtonGroupHash::const_iterator it = buttonGroups.constBegin(); it != cend; ++it)
- if (it.value().second)
- it.value().second->setParent(widget);
+ for (const auto &bg : std::as_const(d->buttonGroups())) {
+ if (bg.second)
+ bg.second->setParent(widget);
}
createConnections(ui->elementConnections(), widget);
createResources(ui->elementResources()); // maybe this should go first, before create()...
@@ -287,10 +255,9 @@ QWidget *QAbstractFormBuilder::create(DomWidget *ui_widget, QWidget *parentWidge
const auto &addActions = ui_widget->elementAddAction();
if (!addActions.isEmpty()) {
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
for (DomActionRef *ui_action_ref : addActions) {
const QString name = ui_action_ref->attributeName();
- if (name == strings.separator) {
+ if (name == "separator"_L1) {
QAction *sep = new QAction(w);
sep->setSeparator(true);
w->addAction(sep);
@@ -372,8 +339,9 @@ QActionGroup *QAbstractFormBuilder::create(DomActionGroup *ui_action_group, QObj
// figure out the toolbar area of a DOM attrib list.
// By legacy, it is stored as an integer. As of 4.3.0, it is the enumeration value.
-Qt::ToolBarArea QAbstractFormBuilder::toolbarAreaFromDOMAttributes(const DomPropertyHash &attributes) {
- const DomProperty *attr = attributes.value(QFormBuilderStrings::instance().toolBarAreaAttribute);
+Qt::ToolBarArea QAbstractFormBuilder::toolbarAreaFromDOMAttributes(const DomPropertyHash &attributes)
+{
+ const DomProperty *attr = attributes.value("toolBarArea"_L1);
if (!attr)
return Qt::TopToolBarArea;
switch(attr->kind()) {
@@ -393,13 +361,12 @@ Qt::ToolBarArea QAbstractFormBuilder::toolbarAreaFromDOMAttributes(const DomProp
*/
bool QAbstractFormBuilder::addItem(DomWidget *ui_widget, QWidget *widget, QWidget *parentWidget)
{
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
const DomPropertyHash attributes = propertyMap(ui_widget->elementAttribute());
if (parentWidget == nullptr)
return true;
// Check special cases. First: Custom container
- const QString className = QLatin1String(parentWidget->metaObject()->className());
+ const QString className = QLatin1StringView(parentWidget->metaObject()->className());
const QString addPageMethod = d->customWidgetAddPageMethod(className);
if (!addPageMethod.isEmpty()) {
// If this fails ( non-existent or non-slot), use ContainerExtension in Designer, else it can't be helped
@@ -421,8 +388,8 @@ bool QAbstractFormBuilder::addItem(DomWidget *ui_widget, QWidget *widget, QWidge
if (QToolBar *toolBar = qobject_cast<QToolBar*>(widget)) {
mw->addToolBar(toolbarAreaFromDOMAttributes(attributes), toolBar);
// check break
- if (const DomProperty *attr = attributes.value(strings.toolBarBreakAttribute))
- if (attr->elementBool() == strings.trueValue)
+ if (const DomProperty *attr = attributes.value("toolBarBreak"_L1))
+ if (attr->elementBool() == "true"_L1)
mw->insertToolBarBreak (toolBar);
return true;
@@ -440,7 +407,7 @@ bool QAbstractFormBuilder::addItem(DomWidget *ui_widget, QWidget *widget, QWidge
#if QT_CONFIG(dockwidget)
// apply the dockwidget's attributes
if (QDockWidget *dockWidget = qobject_cast<QDockWidget*>(widget)) {
- if (const DomProperty *attr = attributes.value(strings.dockWidgetAreaAttribute)) {
+ if (const DomProperty *attr = attributes.value("dockWidgetArea"_L1)) {
Qt::DockWidgetArea area = static_cast<Qt::DockWidgetArea>(attr->elementNumber());
if (!dockWidget->isAreaAllowed(area)) {
if (dockWidget->isAreaAllowed(Qt::LeftDockWidgetArea))
@@ -471,25 +438,25 @@ bool QAbstractFormBuilder::addItem(DomWidget *ui_widget, QWidget *widget, QWidge
widget->setParent(nullptr);
const int tabIndex = tabWidget->count();
- if (const DomProperty *titleP = attributes.value(strings.titleAttribute, 0))
+ if (auto *titleP = attributes.value(QFormBuilderStrings::titleAttribute))
tabWidget->addTab(widget, toString(titleP->elementString()));
else
- tabWidget->addTab(widget, strings.defaultTitle);
+ tabWidget->addTab(widget, "Page"_L1);
- if (DomProperty *picon = attributes.value(strings.iconAttribute)) {
+ if (const auto *picon = attributes.value(QFormBuilderStrings::iconAttribute)) {
QVariant v = resourceBuilder()->loadResource(workingDirectory(), picon);
QVariant nativeValue = resourceBuilder()->toNativeValue(v);
tabWidget->setTabIcon(tabIndex, qvariant_cast<QIcon>(nativeValue));
}
#if QT_CONFIG(tooltip)
- if (const DomProperty *ptoolTip = attributes.value(strings.toolTipAttribute)) {
+ if (const auto *ptoolTip = attributes.value(QFormBuilderStrings::toolTipAttribute)) {
tabWidget->setTabToolTip(tabIndex, toString(ptoolTip->elementString()));
}
#endif
#if QT_CONFIG(whatsthis)
- if (const DomProperty *pwhatsThis = attributes.value(strings.whatsThisAttribute)) {
+ if (const auto *pwhatsThis = attributes.value(QFormBuilderStrings::whatsThisAttribute)) {
tabWidget->setTabWhatsThis(tabIndex, toString(pwhatsThis->elementString()));
}
#endif
@@ -501,19 +468,19 @@ bool QAbstractFormBuilder::addItem(DomWidget *ui_widget, QWidget *widget, QWidge
#if QT_CONFIG(toolbox)
else if (QToolBox *toolBox = qobject_cast<QToolBox*>(parentWidget)) {
const int tabIndex = toolBox->count();
- if (const DomProperty *labelP = attributes.value(strings.labelAttribute, 0))
+ if (const auto *labelP = attributes.value(QFormBuilderStrings::labelAttribute))
toolBox->addItem(widget, toString(labelP->elementString()));
else
- toolBox->addItem(widget, strings.defaultTitle);
+ toolBox->addItem(widget, "Page"_L1);
- if (DomProperty *picon = attributes.value(strings.iconAttribute)) {
+ if (const auto *picon = attributes.value(QFormBuilderStrings::iconAttribute)) {
QVariant v = resourceBuilder()->loadResource(workingDirectory(), picon);
QVariant nativeValue = resourceBuilder()->toNativeValue(v);
toolBox->setItemIcon(tabIndex, qvariant_cast<QIcon>(nativeValue));
}
#if QT_CONFIG(tooltip)
- if (const DomProperty *ptoolTip = attributes.value(strings.toolTipAttribute)) {
+ if (const auto *ptoolTip = attributes.value(QFormBuilderStrings::toolTipAttribute)) {
toolBox->setItemToolTip(tabIndex, toString(ptoolTip->elementString()));
}
#endif
@@ -577,15 +544,13 @@ bool QAbstractFormBuilder::addItem(DomWidget *ui_widget, QWidget *widget, QWidge
void QAbstractFormBuilder::layoutInfo(DomLayout *ui_layout, QObject *parent, int *margin, int *spacing)
{
Q_UNUSED(parent);
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
- const DomPropertyHash properties = propertyMap(ui_layout->elementProperty());
+ auto properties = ui_layout->elementProperty();
int mar = INT_MIN;
int spac = INT_MIN;
- if (const DomProperty *p = properties.value(strings.marginProperty, 0))
+ if (const DomProperty *p = QFBE::propertyByName(properties, "margin"))
mar = p->elementNumber();
-
- if (const DomProperty *p = properties.value(strings.spacingProperty, 0))
+ if (const DomProperty *p = QFBE::propertyByName(properties, "spacing"))
spac = p->elementNumber();
#ifdef Q_OS_MACOS
@@ -598,11 +563,10 @@ void QAbstractFormBuilder::layoutInfo(DomLayout *ui_layout, QObject *parent, int
spac = INT_MIN;
if (mar == INT_MIN || spac == INT_MIN) {
- auto properties = ui_layout->elementProperty();
for (auto it = properties.begin(); it != properties.end(); ) {
DomProperty *prop = *it;
- if ((mar == INT_MIN && prop->attributeName() == strings.marginProperty)
- || (spac == INT_MIN && prop->attributeName() == strings.spacingProperty)) {
+ if ((mar == INT_MIN && prop->attributeName() == "margin"_L1)
+ || (spac == INT_MIN && prop->attributeName() == "spacing"_L1)) {
delete prop;
it = properties.erase(it);
} else {
@@ -663,25 +627,10 @@ QLayout *QAbstractFormBuilder::create(DomLayout *ui_layout, QLayout *parentLayou
if (margin != INT_MIN) {
layout->setContentsMargins(margin, margin, margin, margin);
} else {
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
- int left, top, right, bottom;
- left = top = right = bottom = -1;
+ int left = -1, top = -1, right = -1, bottom = -1;
layout->getContentsMargins(&left, &top, &right, &bottom);
-
- const DomPropertyHash properties = propertyMap(ui_layout->elementProperty());
-
- if (const DomProperty *p = properties.value(strings.leftMarginProperty, 0))
- left = p->elementNumber();
-
- if (const DomProperty *p = properties.value(strings.topMarginProperty, 0))
- top = p->elementNumber();
-
- if (const DomProperty *p = properties.value(strings.rightMarginProperty, 0))
- right = p->elementNumber();
-
- if (const DomProperty *p = properties.value(strings.bottomMarginProperty, 0))
- bottom = p->elementNumber();
-
+ QFormBuilderExtra::getLayoutMargins(ui_layout->elementProperty(),
+ &left, &top, &right, &bottom);
layout->setContentsMargins(left, top, right, bottom);
}
@@ -690,12 +639,10 @@ QLayout *QAbstractFormBuilder::create(DomLayout *ui_layout, QLayout *parentLayou
} else {
QGridLayout *grid = qobject_cast<QGridLayout *>(layout);
if (grid) {
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
- const DomPropertyHash properties = propertyMap(ui_layout->elementProperty());
-
- if (const DomProperty *p = properties.value(strings.horizontalSpacingProperty, 0))
+ const auto &properties = ui_layout->elementProperty();
+ if (const auto *p = QFBE::propertyByName(properties, "horizontalSpacing"))
grid->setHorizontalSpacing(p->elementNumber());
- if (const DomProperty *p = properties.value(strings.verticalSpacingProperty, 0))
+ if (const auto *p = QFBE::propertyByName(properties, "verticalSpacing"))
grid->setVerticalSpacing(p->elementNumber());
}
}
@@ -745,61 +692,55 @@ static inline QFormLayout::ItemRole formLayoutRole(int column, int colspan)
static inline QString alignmentValue(Qt::Alignment a)
{
- QString h,v;
+ QLatin1StringView h;
+ QLatin1StringView v;
switch (a & Qt::AlignHorizontal_Mask) {
case Qt::AlignLeft:
- h = QStringLiteral("Qt::AlignLeft");
+ h = "Qt::AlignmentFlag::AlignLeft"_L1;
break;
case Qt::AlignRight:
- h = QStringLiteral("Qt::AlignRight");
+ h = "Qt::AlignmentFlag::AlignRight"_L1;
break;
case Qt::AlignHCenter:
- h = QStringLiteral("Qt::AlignHCenter");
+ h = "Qt::AlignmentFlag::AlignHCenter"_L1;
break;
case Qt::AlignJustify:
- h = QStringLiteral("Qt::AlignJustify");
+ h = "Qt::AlignmentFlag::AlignJustify"_L1;
break;
}
switch (a & Qt::AlignVertical_Mask) {
case Qt::AlignTop:
- v = QStringLiteral("Qt::AlignTop");
+ v = "Qt::AlignmentFlag::AlignTop"_L1;
break;
case Qt::AlignBottom:
- v = QStringLiteral("Qt::AlignBottom");
+ v = "Qt::AlignmentFlag::AlignBottom"_L1;
break;
case Qt::AlignVCenter:
- v = QStringLiteral("Qt::AlignVCenter");
+ v = "Qt::AlignmentFlag::AlignVCenter"_L1;
break;
}
- if (h.isEmpty() && v.isEmpty())
- return QString();
- if (!v.isEmpty()) {
- if (!h.isEmpty())
- h += QLatin1Char('|');
- h += v;
- }
- return h;
+
+ return h + (v.isEmpty() || h.isEmpty() ? ""_L1 : "|"_L1) + v;
}
static inline Qt::Alignment alignmentFromDom(const QString &in)
{
Qt::Alignment rc;
if (!in.isEmpty()) {
- const auto flags = QStringView{in}.split(QLatin1Char('|'));
- for (const auto &f : flags) {
- if (f == QStringLiteral("Qt::AlignLeft")) {
+ for (const auto &f : qTokenize(in, u'|')) {
+ if (f.endsWith("::AlignLeft"_L1)) {
rc |= Qt::AlignLeft;
- } else if (f == QStringLiteral("Qt::AlignRight")) {
+ } else if (f.endsWith("::AlignRight"_L1)) {
rc |= Qt::AlignRight;
- } else if (f == QStringLiteral("Qt::AlignHCenter")) {
+ } else if (f.endsWith("::AlignHCenter"_L1)) {
rc |= Qt::AlignHCenter;
- } else if (f == QStringLiteral("Qt::AlignJustify")) {
+ } else if (f.endsWith("::AlignJustify"_L1)) {
rc |= Qt::AlignJustify;
- } else if (f == QStringLiteral("Qt::AlignTop")) {
+ } else if (f.endsWith("::AlignTop"_L1)) {
rc |= Qt::AlignTop;
- } else if (f == QStringLiteral("Qt::AlignBottom")) {
+ } else if (f.endsWith("::AlignBottom"_L1)) {
rc |= Qt::AlignBottom;
- } else if (f == QStringLiteral("Qt::AlignVCenter")) {
+ } else if (f.endsWith("::AlignVCenter"_L1)) {
rc |= Qt::AlignVCenter;
}
}
@@ -871,16 +812,15 @@ QLayoutItem *QAbstractFormBuilder::create(DomLayoutItem *ui_layoutItem, QLayout
const DomSpacer *ui_spacer = ui_layoutItem->elementSpacer();
const auto &spacerProperties = ui_spacer->elementProperty();
if (!spacerProperties.isEmpty()) {
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
for (DomProperty *p : spacerProperties) {
const QVariant v = toVariant(&QAbstractFormBuilderGadget::staticMetaObject, p); // ### remove me
if (v.isNull())
continue;
- if (p->attributeName() == strings.sizeHintProperty && p->kind() == DomProperty::Size) {
+ if (p->attributeName() == "sizeHint"_L1 && p->kind() == DomProperty::Size) {
size = v.toSize(); // ### remove me
- } else if (p->attributeName() == strings.sizeTypeProperty && p->kind() == DomProperty::Enum) {
+ } else if (p->attributeName() == "sizeType"_L1 && p->kind() == DomProperty::Enum) {
sizeType = static_cast<QSizePolicy::Policy>(v.toInt());
- } else if (p->attributeName() == strings.orientationProperty && p->kind() == DomProperty::Enum) {
+ } else if (p->attributeName() == "orientation"_L1 && p->kind() == DomProperty::Enum) {
const Qt::Orientation o = static_cast<Qt::Orientation>(v.toInt());
isVspacer = (o == Qt::Vertical);
}
@@ -913,8 +853,8 @@ void QAbstractFormBuilder::applyProperties(QObject *o, const QList<DomProperty*>
const QVariant v = toVariant(o->metaObject(), p);
if (!v.isNull()) {
QString attributeName = p->attributeName();
- if (attributeName == QLatin1String("numDigits") && o->inherits("QLCDNumber")) // Deprecated in Qt 4, removed in Qt 5.
- attributeName = QLatin1String("digitCount");
+ if (attributeName == "numDigits"_L1 && o->inherits("QLCDNumber")) // Deprecated in Qt 4, removed in Qt 5.
+ attributeName = u"digitCount"_s;
if (!d->applyPropertyInternally(o, attributeName, v))
o->setProperty(attributeName.toUtf8(), v);
}
@@ -1021,7 +961,7 @@ QActionGroup *QAbstractFormBuilder::createActionGroup(QObject *parent, const QSt
Saves an XML representation of the given \a widget to the
specified \a device in the standard UI file format.
- \note Unlike when saving a form in Qt Designer, all property values are
+ \note Unlike when saving a form in \QD, all property values are
written. This is because, the state of whether a property value was
modified or not isn't stored in the Qt property system. The widget that
is being saved, could have been created dynamically, not loaded via
@@ -1044,7 +984,7 @@ void QAbstractFormBuilder::save(QIODevice *dev, QWidget *widget)
Q_ASSERT( ui_widget != nullptr );
DomUI *ui = new DomUI();
- ui->setAttributeVersion(QStringLiteral("4.0"));
+ ui->setAttributeVersion(u"4.0"_s);
ui->setElementWidget(ui_widget);
saveDom(ui, widget);
@@ -1102,7 +1042,9 @@ DomConnections *QAbstractFormBuilder::saveConnections()
DomWidget *QAbstractFormBuilder::createDom(QWidget *widget, DomWidget *ui_parentWidget, bool recursive)
{
DomWidget *ui_widget = new DomWidget();
- ui_widget->setAttributeClass(QLatin1String(widget->metaObject()->className()));
+ ui_widget->setAttributeClass(QLatin1StringView(widget->metaObject()->className()));
+ ui_widget->setAttributeName(widget->objectName());
+
ui_widget->setElementProperty(computeProperties(widget));
if (recursive) {
@@ -1155,7 +1097,7 @@ DomWidget *QAbstractFormBuilder::createDom(QWidget *widget, DomWidget *ui_parent
}
}
- for (QObject *obj : qAsConst(children)) {
+ for (QObject *obj : std::as_const(children)) {
if (QWidget *childWidget = qobject_cast<QWidget*>(obj)) {
if (d->m_laidout.contains(childWidget) || !recursive)
continue;
@@ -1215,16 +1157,14 @@ DomWidget *QAbstractFormBuilder::createDom(QWidget *widget, DomWidget *ui_parent
*/
DomActionRef *QAbstractFormBuilder::createActionRefDom(QAction *action)
{
- QString name = action->objectName();
-
- if (action->menu() != nullptr)
- name = action->menu()->objectName();
-
DomActionRef *ui_action_ref = new DomActionRef();
- if (action->isSeparator())
- ui_action_ref->setAttributeName(QFormBuilderStrings::instance().separator);
- else
- ui_action_ref->setAttributeName(name);
+ if (action->isSeparator()) {
+ ui_action_ref->setAttributeName("separator"_L1);
+ } else {
+ ui_action_ref->setAttributeName(action->menu() != nullptr
+ ? action->menu()->objectName()
+ : action->objectName());
+ }
return ui_action_ref;
}
@@ -1326,7 +1266,7 @@ DomLayout *QAbstractFormBuilder::createDom(QLayout *layout, DomLayout *ui_layout
{
Q_UNUSED(ui_layout);
DomLayout *lay = new DomLayout();
- lay->setAttributeClass(QLatin1String(layout->metaObject()->className()));
+ lay->setAttributeClass(QLatin1StringView(layout->metaObject()->className()));
const QString objectName = layout->objectName();
if (!objectName.isEmpty())
lay->setAttributeName(objectName);
@@ -1345,7 +1285,7 @@ DomLayout *QAbstractFormBuilder::createDom(QLayout *layout, DomLayout *ui_layout
QList<DomLayoutItem *> ui_items;
ui_items.reserve(newList.size());
- for (const FormBuilderSaveLayoutEntry &item : qAsConst(newList)) {
+ for (const FormBuilderSaveLayoutEntry &item : std::as_const(newList)) {
if (DomLayoutItem *ui_item = createDom(item.item, lay, ui_parentWidget)) {
if (item.row >= 0)
ui_item->setAttributeRow(item.row);
@@ -1397,10 +1337,9 @@ DomSpacer *QAbstractFormBuilder::createDom(QSpacerItem *spacer, DomLayout *ui_la
QList<DomProperty*> properties;
DomProperty *prop = nullptr;
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
// sizeHint property
prop = new DomProperty();
- prop->setAttributeName(strings.sizeHintProperty);
+ prop->setAttributeName("sizeHint"_L1);
prop->setElementSize(new DomSize());
prop->elementSize()->setElementWidth(spacer->sizeHint().width());
prop->elementSize()->setElementHeight(spacer->sizeHint().height());
@@ -1408,8 +1347,9 @@ DomSpacer *QAbstractFormBuilder::createDom(QSpacerItem *spacer, DomLayout *ui_la
// orientation property
prop = new DomProperty(); // ### we don't implemented the case where expandingDirections() is both Vertical and Horizontal
- prop->setAttributeName(strings.orientationProperty);
- prop->setElementEnum((spacer->expandingDirections() & Qt::Horizontal) ? strings.qtHorizontal : strings.qtVertical);
+ prop->setAttributeName("orientation"_L1);
+ prop->setElementEnum((spacer->expandingDirections() & Qt::Horizontal) != 0 ?
+ "Qt:::Orientation::Horizontal"_L1 : "Qt:::Orientation::Vertical"_L1);
properties.append(prop);
ui_spacer->setElementProperty(properties);
@@ -1448,13 +1388,13 @@ QList<DomProperty*> QAbstractFormBuilder::computeProperties(QObject *obj)
const QString pname = QString::fromUtf8(propertyNames.at(i));
const QMetaProperty prop = meta->property(meta->indexOfProperty(pname.toUtf8()));
- if (!prop.isWritable() || !checkProperty(obj, QLatin1String(prop.name())))
+ if (!prop.isWritable() || !checkProperty(obj, QLatin1StringView(prop.name())))
continue;
const QVariant v = prop.read(obj);
DomProperty *dom_prop = nullptr;
- if (v.type() == QVariant::Int) {
+ if (v.metaType().id() == QMetaType::Int) {
dom_prop = new DomProperty();
if (prop.isFlagType())
@@ -1463,7 +1403,7 @@ QList<DomProperty*> QAbstractFormBuilder::computeProperties(QObject *obj)
if (prop.isEnumType()) {
QString scope = QString::fromUtf8(prop.enumerator().scope());
if (scope.size())
- scope += QString::fromUtf8("::");
+ scope += "::"_L1;
const QString e = QString::fromUtf8(prop.enumerator().valueToKey(v.toInt()));
if (e.size())
dom_prop->setElementEnum(scope + e);
@@ -1609,13 +1549,12 @@ public:
template<class T>
static void storeItemFlags(const T *item, QList<DomProperty*> *properties)
{
- static const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
static const Qt::ItemFlags defaultFlags = T().flags();
static const QMetaEnum itemFlags_enum = metaEnum<QAbstractFormBuilderGadget>("itemFlags");
if (item->flags() != defaultFlags) {
DomProperty *p = new DomProperty;
- p->setAttributeName(strings.flagsAttribute);
+ p->setAttributeName(QFormBuilderStrings::flagsAttribute);
p->setElementSet(QString::fromLatin1(itemFlags_enum.valueToKeys(item->flags())));
properties->append(p);
}
@@ -1623,24 +1562,28 @@ static void storeItemFlags(const T *item, QList<DomProperty*> *properties)
template<class T>
static void storeItemProps(QAbstractFormBuilder *abstractFormBuilder, const T *item,
- QList<DomProperty*> *properties)
+ QList<DomProperty*> *properties,
+ Qt::Alignment defaultAlign = Qt::AlignLeading | Qt::AlignVCenter)
{
static const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
FriendlyFB * const formBuilder = static_cast<FriendlyFB *>(abstractFormBuilder);
DomProperty *p;
- QVariant v;
for (const QFormBuilderStrings::TextRoleNName &it : strings.itemTextRoles)
if ((p = formBuilder->saveText(it.second, item->data(it.first.second))))
properties->append(p);
- for (const QFormBuilderStrings::RoleNName &it : strings.itemRoles)
- if ((v = item->data(it.first)).isValid() &&
- (p = variantToDomProperty(abstractFormBuilder,
- static_cast<const QMetaObject *>(&QAbstractFormBuilderGadget::staticMetaObject),
- it.second, v)))
+ auto *mo = static_cast<const QMetaObject *>(&QAbstractFormBuilderGadget::staticMetaObject);
+ for (const QFormBuilderStrings::RoleNName &it : strings.itemRoles) {
+ const QVariant v = item->data(it.first);
+ const bool isModified = v.isValid()
+ && (it.first != Qt::TextAlignmentRole || v.toUInt() != uint(defaultAlign));
+ if (isModified &&
+ (p = variantToDomProperty(abstractFormBuilder, mo, it.second, v))) {
properties->append(p);
+ }
+ }
if ((p = formBuilder->saveResource(item->data(Qt::DecorationPropertyRole))))
properties->append(p);
@@ -1689,13 +1632,12 @@ template<class T>
static void loadItemPropsNFlags(QAbstractFormBuilder *abstractFormBuilder, T *item,
const QHash<QString, DomProperty*> &properties)
{
- static const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
static const QMetaEnum itemFlags_enum = metaEnum<QAbstractFormBuilderGadget>("itemFlags");
loadItemProps<T>(abstractFormBuilder, item, properties);
- DomProperty *p;
- if ((p = properties.value(strings.flagsAttribute)) && p->kind() == DomProperty::Set)
+ DomProperty *p = properties.value(QFormBuilderStrings::flagsAttribute);
+ if (p != nullptr && p->kind() == DomProperty::Set)
item->setFlags(enumKeysToValue<Qt::ItemFlags>(itemFlags_enum, p->elementSet().toLatin1()));
}
@@ -1719,10 +1661,10 @@ void QAbstractFormBuilder::saveTreeWidgetExtraInfo(QTreeWidget *treeWidget, DomW
for (const QFormBuilderStrings::TextRoleNName &it : strings.itemTextRoles) {
p = saveText(it.second, treeWidget->headerItem()->data(c, it.first.second));
// Prevent uic 4.4.X from crashing if it cannot find a column text
- if (!p && it.first.first == Qt::EditRole && it.second == QStringLiteral("text")) {
+ if (!p && it.first.first == Qt::EditRole && it.second == "text"_L1) {
DomString *defaultHeader = new DomString;
defaultHeader->setText(QString::number(c + 1));
- defaultHeader->setAttributeNotr(QStringLiteral("true"));
+ defaultHeader->setAttributeNotr(u"true"_s);
p = new DomProperty;
p->setAttributeName(it.second);
p->setElementString(defaultHeader);
@@ -1747,12 +1689,12 @@ void QAbstractFormBuilder::saveTreeWidgetExtraInfo(QTreeWidget *treeWidget, DomW
auto items = ui_widget->elementItem();
- QQueue<QPair<QTreeWidgetItem *, DomItem *> > pendingQueue;
+ QQueue<std::pair<QTreeWidgetItem *, DomItem *> > pendingQueue;
for (int i = 0; i < treeWidget->topLevelItemCount(); i++)
- pendingQueue.enqueue(qMakePair(treeWidget->topLevelItem(i), nullptr));
+ pendingQueue.enqueue(std::make_pair(treeWidget->topLevelItem(i), nullptr));
while (!pendingQueue.isEmpty()) {
- const QPair<QTreeWidgetItem *, DomItem *> pair = pendingQueue.dequeue();
+ const std::pair<QTreeWidgetItem *, DomItem *> pair = pendingQueue.dequeue();
QTreeWidgetItem *item = pair.first;
DomItem *parentDomItem = pair.second;
@@ -1783,7 +1725,7 @@ void QAbstractFormBuilder::saveTreeWidgetExtraInfo(QTreeWidget *treeWidget, DomW
items.append(currentDomItem);
for (int i = 0; i < item->childCount(); i++)
- pendingQueue.enqueue(qMakePair(item->child(i), currentDomItem));
+ pendingQueue.enqueue(std::make_pair(item->child(i), currentDomItem));
}
ui_widget->setElementItem(items);
@@ -1798,11 +1740,12 @@ void QAbstractFormBuilder::saveTableWidgetExtraInfo(QTableWidget *tableWidget, D
// save the horizontal header
QList<DomColumn *> columns;
+ auto *header = tableWidget->horizontalHeader();
for (int c = 0; c < tableWidget->columnCount(); c++) {
QList<DomProperty*> properties;
QTableWidgetItem *item = tableWidget->horizontalHeaderItem(c);
if (item)
- storeItemProps(this, item, &properties);
+ storeItemProps(this, item, &properties, header->defaultAlignment());
DomColumn *column = new DomColumn;
column->setElementProperty(properties);
@@ -1812,11 +1755,12 @@ void QAbstractFormBuilder::saveTableWidgetExtraInfo(QTableWidget *tableWidget, D
// save the vertical header
QList<DomRow *> rows;
+ header = tableWidget->verticalHeader();
for (int r = 0; r < tableWidget->rowCount(); r++) {
QList<DomProperty*> properties;
QTableWidgetItem *item = tableWidget->verticalHeaderItem(r);
if (item)
- storeItemProps(this, item, &properties);
+ storeItemProps(this, item, &properties, header->defaultAlignment());
DomRow *row = new DomRow;
row->setElementProperty(properties);
@@ -1875,7 +1819,7 @@ void QAbstractFormBuilder::saveComboBoxExtraInfo(QComboBox *comboBox, DomWidget
for (int i=0; i < count; ++i) {
// We might encounter items for which both builders return 0 in Designer
// (indicating a custom combo adding items in the constructor). Ignore those.
- DomProperty *textProperty = saveText(QFormBuilderStrings::instance().textAttribute,
+ DomProperty *textProperty = saveText(QFormBuilderStrings::textAttribute,
comboBox->itemData(i, Qt::DisplayPropertyRole));
DomProperty *iconProperty = saveResource(comboBox->itemData(i, Qt::DecorationPropertyRole));
if (textProperty || iconProperty) {
@@ -1906,15 +1850,32 @@ void QAbstractFormBuilder::saveButtonExtraInfo(const QAbstractButton *widget, Do
DomPropertyList attributes = ui_widget->elementAttribute();
DomString *domString = new DomString();
domString->setText(buttonGroup->objectName());
- domString->setAttributeNotr(QStringLiteral("true"));
+ domString->setAttributeNotr(u"true"_s);
DomProperty *domProperty = new DomProperty();
- domProperty->setAttributeName(QLatin1String(buttonGroupPropertyC));
+ domProperty->setAttributeName(buttonGroupPropertyC);
domProperty->setElementString(domString);
attributes += domProperty;
ui_widget->setElementAttribute(attributes);
}
}
+static const QLatin1StringView tableHeaderPrefixes[] = {
+ "horizontalHeader"_L1,
+ "verticalHeader"_L1,
+};
+
+static constexpr QLatin1StringView itemViewHeaderRealPropertyNames[] =
+{
+ // Special handling for qtableview/qtreeview fake header attributes
+ "visible"_L1,
+ "cascadingSectionResizes"_L1,
+ "minimumSectionSize"_L1, // before defaultSectionSize
+ "defaultSectionSize"_L1,
+ "highlightSections"_L1,
+ "showSortIndicator"_L1,
+ "stretchLastSection"_L1
+};
+
/*!
\internal
\since 4.5
@@ -1922,26 +1883,13 @@ void QAbstractFormBuilder::saveButtonExtraInfo(const QAbstractButton *widget, Do
void QAbstractFormBuilder::saveItemViewExtraInfo(const QAbstractItemView *itemView,
DomWidget *ui_widget, DomWidget *)
{
- //
- // Special handling for qtableview/qtreeview fake header attributes
- //
- static const QLatin1String realPropertyNames[] = {
- QLatin1String("visible"),
- QLatin1String("cascadingSectionResizes"),
- QLatin1String("minimumSectionSize"), // before defaultSectionSize
- QLatin1String("defaultSectionSize"),
- QLatin1String("highlightSections"),
- QLatin1String("showSortIndicator"),
- QLatin1String("stretchLastSection"),
- };
-
if (const QTreeView *treeView = qobject_cast<const QTreeView*>(itemView)) {
auto viewProperties = ui_widget->elementAttribute();
const auto &headerProperties = computeProperties(treeView->header());
- for (QString realPropertyName : realPropertyNames) {
- const QString upperPropertyName = realPropertyName.at(0).toUpper()
+ for (const QLatin1StringView realPropertyName : itemViewHeaderRealPropertyNames) {
+ const QString upperPropertyName = QChar(realPropertyName.at(0)).toUpper()
+ realPropertyName.mid(1);
- const QString fakePropertyName = QStringLiteral("header") + upperPropertyName;
+ const QString fakePropertyName = "header"_L1 + upperPropertyName;
for (DomProperty *property : headerProperties) {
if (property->attributeName() == realPropertyName) {
property->setAttributeName(fakePropertyName);
@@ -1951,20 +1899,16 @@ void QAbstractFormBuilder::saveItemViewExtraInfo(const QAbstractItemView *itemVi
}
ui_widget->setElementAttribute(viewProperties);
} else if (const QTableView *tableView = qobject_cast<const QTableView*>(itemView)) {
- static const QStringList headerPrefixes =
- (QStringList() << QStringLiteral("horizontalHeader")
- << QStringLiteral("verticalHeader"));
-
auto viewProperties = ui_widget->elementAttribute();
- for (const QString &headerPrefix : headerPrefixes) {
- const auto &headerProperties = headerPrefix == QStringLiteral("horizontalHeader")
+ for (QLatin1StringView headerPrefix : tableHeaderPrefixes) {
+ const auto &headerProperties = headerPrefix == "horizontalHeader"_L1
? computeProperties(tableView->horizontalHeader())
: computeProperties(tableView->verticalHeader());
- for (QString realPropertyName : realPropertyNames) {
- const QString upperPropertyName = realPropertyName.at(0).toUpper()
+ for (const QLatin1StringView realPropertyName : itemViewHeaderRealPropertyNames) {
+ const QString upperPropertyName = QChar(realPropertyName.at(0)).toUpper()
+ realPropertyName.mid(1);
const QString fakePropertyName = headerPrefix + upperPropertyName;
- for (DomProperty *property : qAsConst(headerProperties)) {
+ for (DomProperty *property : std::as_const(headerProperties)) {
if (property->attributeName() == realPropertyName) {
property->setAttributeName(fakePropertyName);
viewProperties << property;
@@ -2045,8 +1989,6 @@ void QAbstractFormBuilder::saveExtraInfo(QWidget *widget, DomWidget *ui_widget,
void QAbstractFormBuilder::loadListWidgetExtraInfo(DomWidget *ui_widget, QListWidget *listWidget, QWidget *parentWidget)
{
Q_UNUSED(parentWidget);
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
-
const auto &elementItem = ui_widget->elementItem();
for (DomItem *ui_item : elementItem) {
const DomPropertyHash properties = propertyMap(ui_item->elementProperty());
@@ -2054,8 +1996,7 @@ void QAbstractFormBuilder::loadListWidgetExtraInfo(DomWidget *ui_widget, QListWi
loadItemPropsNFlags<QListWidgetItem>(this, item, properties);
}
- DomProperty *currentRow = propertyMap(ui_widget->elementProperty()).value(strings.currentRowProperty);
- if (currentRow)
+ if (auto *currentRow = QFBE::propertyByName(ui_widget->elementProperty(), "currentRow"))
listWidget->setCurrentRow(currentRow->elementNumber());
}
@@ -2068,10 +2009,10 @@ void QAbstractFormBuilder::loadTreeWidgetExtraInfo(DomWidget *ui_widget, QTreeWi
const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
const QMetaEnum itemFlags_enum = metaEnum<QAbstractFormBuilderGadget>("itemFlags");
const auto &columns = ui_widget->elementColumn();
- if (columns.count() > 0)
- treeWidget->setColumnCount(columns.count());
+ if (!columns.isEmpty())
+ treeWidget->setColumnCount(columns.size());
- for (int i = 0; i<columns.count(); ++i) {
+ for (qsizetype i = 0, size = columns.size(); i < size; ++i) {
const DomColumn *c = columns.at(i);
const DomPropertyHash properties = propertyMap(c->elementProperty());
@@ -2091,7 +2032,7 @@ void QAbstractFormBuilder::loadTreeWidgetExtraInfo(DomWidget *ui_widget, QTreeWi
treeWidget->headerItem()->setData(i, it.first.second, v);
}
- if ((p = properties.value(strings.iconAttribute))) {
+ if ((p = properties.value(QFormBuilderStrings::iconAttribute))) {
v = resourceBuilder()->loadResource(workingDirectory(), p);
QVariant nativeValue = resourceBuilder()->toNativeValue(v);
treeWidget->headerItem()->setIcon(i, qvariant_cast<QIcon>(nativeValue));
@@ -2099,13 +2040,13 @@ void QAbstractFormBuilder::loadTreeWidgetExtraInfo(DomWidget *ui_widget, QTreeWi
}
}
- QQueue<QPair<DomItem *, QTreeWidgetItem *> > pendingQueue;
+ QQueue<std::pair<DomItem *, QTreeWidgetItem *> > pendingQueue;
const auto &widgetElementItem = ui_widget->elementItem();
for (DomItem *ui_item : widgetElementItem)
- pendingQueue.enqueue(qMakePair(ui_item, nullptr));
+ pendingQueue.enqueue(std::make_pair(ui_item, nullptr));
while (!pendingQueue.isEmpty()) {
- const QPair<DomItem *, QTreeWidgetItem *> pair = pendingQueue.dequeue();
+ const std::pair<DomItem *, QTreeWidgetItem *> pair = pendingQueue.dequeue();
const DomItem *domItem = pair.first;
QTreeWidgetItem *parentItem = pair.second;
@@ -2119,16 +2060,18 @@ void QAbstractFormBuilder::loadTreeWidgetExtraInfo(DomWidget *ui_widget, QTreeWi
const auto &properties = domItem->elementProperty();
int col = -1;
for (DomProperty *property : properties) {
- if (property->attributeName() == strings.flagsAttribute && !property->elementSet().isEmpty()) {
+ if (property->attributeName() == QFormBuilderStrings::flagsAttribute
+ && !property->elementSet().isEmpty()) {
currentItem->setFlags(enumKeysToValue<Qt::ItemFlags>(itemFlags_enum, property->elementSet().toLatin1()));
- } else if (property->attributeName() == strings.textAttribute && property->elementString()) {
+ } else if (property->attributeName() == QFormBuilderStrings::textAttribute
+ && property->elementString()) {
col++;
QVariant textV = textBuilder()->loadText(property);
QVariant nativeValue = textBuilder()->toNativeValue(textV);
currentItem->setText(col, qvariant_cast<QString>(nativeValue));
currentItem->setData(col, Qt::DisplayPropertyRole, textV);
} else if (col >= 0) {
- if (property->attributeName() == strings.iconAttribute) {
+ if (property->attributeName() == QFormBuilderStrings::iconAttribute) {
QVariant v = resourceBuilder()->loadResource(workingDirectory(), property);
if (v.isValid()) {
QVariant nativeValue = resourceBuilder()->toNativeValue(v);
@@ -2142,9 +2085,9 @@ void QAbstractFormBuilder::loadTreeWidgetExtraInfo(DomWidget *ui_widget, QTreeWi
if ((v = toVariant(&QAbstractFormBuilderGadget::staticMetaObject, property)).isValid())
currentItem->setData(col, role, v);
} else {
- QPair<Qt::ItemDataRole, Qt::ItemDataRole> rolePair =
+ std::pair<Qt::ItemDataRole, Qt::ItemDataRole> rolePair =
strings.treeItemTextRoleHash.value(property->attributeName(),
- qMakePair((Qt::ItemDataRole)-1, (Qt::ItemDataRole)-1));
+ std::make_pair((Qt::ItemDataRole)-1, (Qt::ItemDataRole)-1));
if (rolePair.first >= 0) {
QVariant textV = textBuilder()->loadText(property);
QVariant nativeValue = textBuilder()->toNativeValue(textV);
@@ -2158,7 +2101,7 @@ void QAbstractFormBuilder::loadTreeWidgetExtraInfo(DomWidget *ui_widget, QTreeWi
const auto &elementItem = domItem->elementItem();
for (DomItem *childItem : elementItem)
- pendingQueue.enqueue(qMakePair(childItem, currentItem));
+ pendingQueue.enqueue(std::make_pair(childItem, currentItem));
}
}
@@ -2171,9 +2114,9 @@ void QAbstractFormBuilder::loadTableWidgetExtraInfo(DomWidget *ui_widget, QTable
Q_UNUSED(parentWidget);
const auto &columns = ui_widget->elementColumn();
- if (columns.count() > 0)
- tableWidget->setColumnCount(columns.count());
- for (int i = 0; i< columns.count(); i++) {
+ if (!columns.isEmpty())
+ tableWidget->setColumnCount(columns.size());
+ for (qsizetype i = 0, size = columns.size(); i < size; ++i) {
DomColumn *c = columns.at(i);
const DomPropertyHash properties = propertyMap(c->elementProperty());
@@ -2185,9 +2128,9 @@ void QAbstractFormBuilder::loadTableWidgetExtraInfo(DomWidget *ui_widget, QTable
}
const auto &rows = ui_widget->elementRow();
- if (rows.count() > 0)
- tableWidget->setRowCount(rows.count());
- for (int i = 0; i< rows.count(); i++) {
+ if (!rows.isEmpty())
+ tableWidget->setRowCount(rows.size());
+ for (qsizetype i = 0, size = rows.size(); i < size; ++i) {
const DomRow *r = rows.at(i);
const DomPropertyHash properties = propertyMap(r->elementProperty());
@@ -2215,24 +2158,21 @@ void QAbstractFormBuilder::loadTableWidgetExtraInfo(DomWidget *ui_widget, QTable
void QAbstractFormBuilder::loadComboBoxExtraInfo(DomWidget *ui_widget, QComboBox *comboBox, QWidget *parentWidget)
{
Q_UNUSED(parentWidget);
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
const auto &elementItem = ui_widget->elementItem();
for (DomItem *ui_item : elementItem) {
- const DomPropertyHash properties = propertyMap(ui_item->elementProperty());
+ const auto &properties = ui_item->elementProperty();
QString text;
QIcon icon;
QVariant textData;
QVariant iconData;
- DomProperty *p = nullptr;
-
- p = properties.value(strings.textAttribute);
+ DomProperty *p = QFBE::propertyByName(properties, QFormBuilderStrings::textAttribute);
if (p && p->elementString()) {
textData = textBuilder()->loadText(p);
text = qvariant_cast<QString>(textBuilder()->toNativeValue(textData));
}
- p = properties.value(strings.iconAttribute);
+ p = QFBE::propertyByName(properties, QFormBuilderStrings::iconAttribute);
if (p) {
iconData = resourceBuilder()->loadResource(workingDirectory(), p);
icon = qvariant_cast<QIcon>(resourceBuilder()->toNativeValue(iconData));
@@ -2243,8 +2183,7 @@ void QAbstractFormBuilder::loadComboBoxExtraInfo(DomWidget *ui_widget, QComboBox
comboBox->setItemData((comboBox->count()-1), textData, Qt::DisplayPropertyRole);
}
- DomProperty *currentIndex = propertyMap(ui_widget->elementProperty()).value(strings.currentIndexProperty);
- if (currentIndex)
+ if (auto *currentIndex = currentIndexProperty(ui_widget->elementProperty()))
comboBox->setCurrentIndex(currentIndex->elementNumber());
}
@@ -2254,7 +2193,7 @@ static QString buttonGroupName(const DomWidget *ui_widget)
const auto &attributes = ui_widget->elementAttribute();
if (attributes.isEmpty())
return QString();
- const QString buttonGroupProperty = QLatin1String(buttonGroupPropertyC);
+ const QString buttonGroupProperty = buttonGroupPropertyC;
for (const DomProperty *p : attributes) {
if (p->attributeName() == buttonGroupProperty)
return p->elementString()->text();
@@ -2276,7 +2215,7 @@ void QAbstractFormBuilder::loadButtonExtraInfo(const DomWidget *ui_widget, QAbst
return;
// Find entry
ButtonGroupHash &buttonGroups = d->buttonGroups();
- ButtonGroupHash::iterator it = buttonGroups.find(groupName);
+ const auto it = buttonGroups.find(groupName);
if (it == buttonGroups.end()) {
#ifdef QFORMINTERNAL_NAMESPACE // Suppress the warning when copying in Designer
uiLibWarning(QCoreApplication::translate("QAbstractFormBuilder", "Invalid QButtonGroup reference '%1' referenced by '%2'.").arg(groupName, button->objectName()));
@@ -2300,26 +2239,13 @@ void QAbstractFormBuilder::loadButtonExtraInfo(const DomWidget *ui_widget, QAbst
void QAbstractFormBuilder::loadItemViewExtraInfo(DomWidget *ui_widget, QAbstractItemView *itemView,
QWidget *)
{
- //
- // Special handling for qtableview/qtreeview fake header attributes
- //
- static const QLatin1String realPropertyNames[] = {
- QLatin1String("visible"),
- QLatin1String("cascadingSectionResizes"),
- QLatin1String("minimumSectionSize"), // before defaultSectionSize
- QLatin1String("defaultSectionSize"),
- QLatin1String("highlightSections"),
- QLatin1String("showSortIndicator"),
- QLatin1String("stretchLastSection"),
- };
-
if (QTreeView *treeView = qobject_cast<QTreeView*>(itemView)) {
const auto &allAttributes = ui_widget->elementAttribute();
QList<DomProperty *> headerProperties;
- for (QString realPropertyName : realPropertyNames) {
- const QString upperPropertyName = realPropertyName.at(0).toUpper()
+ for (QLatin1StringView realPropertyName : itemViewHeaderRealPropertyNames) {
+ const QString upperPropertyName = QChar(realPropertyName.at(0)).toUpper()
+ realPropertyName.mid(1);
- const QString fakePropertyName = QStringLiteral("header") + upperPropertyName;
+ const QString fakePropertyName = "header"_L1 + upperPropertyName;
for (DomProperty *attr : allAttributes) {
if (attr->attributeName() == fakePropertyName) {
attr->setAttributeName(realPropertyName);
@@ -2329,15 +2255,11 @@ void QAbstractFormBuilder::loadItemViewExtraInfo(DomWidget *ui_widget, QAbstract
}
applyProperties(treeView->header(), headerProperties);
} else if (QTableView *tableView = qobject_cast<QTableView*>(itemView)) {
- static const QStringList headerPrefixes =
- (QStringList() << QStringLiteral("horizontalHeader")
- << QStringLiteral("verticalHeader"));
-
const auto &allAttributes = ui_widget->elementAttribute();
- for (const QString &headerPrefix : headerPrefixes) {
+ for (QLatin1StringView headerPrefix : tableHeaderPrefixes) {
QList<DomProperty*> headerProperties;
- for (QString realPropertyName : realPropertyNames) {
- const QString upperPropertyName = realPropertyName.at(0).toUpper()
+ for (QLatin1StringView realPropertyName : itemViewHeaderRealPropertyNames) {
+ const QString upperPropertyName = QChar(realPropertyName.at(0)).toUpper()
+ realPropertyName.mid(1);
const QString fakePropertyName = headerPrefix + upperPropertyName;
for (DomProperty *attr : allAttributes) {
@@ -2347,7 +2269,7 @@ void QAbstractFormBuilder::loadItemViewExtraInfo(DomWidget *ui_widget, QAbstract
}
}
}
- if (headerPrefix == QStringLiteral("horizontalHeader"))
+ if (headerPrefix == "horizontalHeader"_L1)
applyProperties(tableView->horizontalHeader(), headerProperties);
else
applyProperties(tableView->verticalHeader(), headerProperties);
@@ -2360,7 +2282,6 @@ void QAbstractFormBuilder::loadItemViewExtraInfo(DomWidget *ui_widget, QAbstract
*/
void QAbstractFormBuilder::loadExtraInfo(DomWidget *ui_widget, QWidget *widget, QWidget *parentWidget)
{
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
if (false) {
#if QT_CONFIG(listwidget)
} else if (QListWidget *listWidget = qobject_cast<QListWidget*>(widget)) {
@@ -2381,23 +2302,19 @@ void QAbstractFormBuilder::loadExtraInfo(DomWidget *ui_widget, QWidget *widget,
#endif
#if QT_CONFIG(tabwidget)
} else if (QTabWidget *tabWidget = qobject_cast<QTabWidget*>(widget)) {
- const DomProperty *currentIndex = propertyMap(ui_widget->elementProperty()).value(strings.currentIndexProperty);
- if (currentIndex)
+ if (auto *currentIndex = currentIndexProperty(ui_widget->elementProperty()))
tabWidget->setCurrentIndex(currentIndex->elementNumber());
#endif
#if QT_CONFIG(stackedwidget)
} else if (QStackedWidget *stackedWidget = qobject_cast<QStackedWidget*>(widget)) {
- const DomProperty *currentIndex = propertyMap(ui_widget->elementProperty()).value(strings.currentIndexProperty);
- if (currentIndex)
+ if (auto *currentIndex = currentIndexProperty(ui_widget->elementProperty()))
stackedWidget->setCurrentIndex(currentIndex->elementNumber());
#endif
#if QT_CONFIG(toolbox)
} else if (QToolBox *toolBox = qobject_cast<QToolBox*>(widget)) {
- const DomProperty *currentIndex = propertyMap(ui_widget->elementProperty()).value(strings.currentIndexProperty);
- if (currentIndex)
+ if (auto *currentIndex = currentIndexProperty(ui_widget->elementProperty()))
toolBox->setCurrentIndex(currentIndex->elementNumber());
- const DomProperty *tabSpacing = propertyMap(ui_widget->elementProperty()).value(strings.tabSpacingProperty);
- if (tabSpacing)
+ if (auto *tabSpacing = QFBE::propertyByName(ui_widget->elementProperty(), "tabSpacing"))
toolBox->layout()->setSpacing(tabSpacing->elementNumber());
#endif
} else if (QAbstractButton *ab = qobject_cast<QAbstractButton *>(widget)) {
@@ -2434,7 +2351,7 @@ void QAbstractFormBuilder::setWorkingDirectory(const QDir &directory)
*/
DomAction *QAbstractFormBuilder::createDom(QAction *action)
{
- if (action->parentWidget() == action->menu() || action->isSeparator())
+ if (action->parent() == action->menu() || action->isSeparator())
return nullptr;
DomAction *ui_action = new DomAction;
@@ -2452,7 +2369,7 @@ DomAction *QAbstractFormBuilder::createDom(QAction *action)
DomButtonGroup *QAbstractFormBuilder::createDom(QButtonGroup *buttonGroup)
{
- if (buttonGroup->buttons().count() == 0) // Empty group left over on form?
+ if (buttonGroup->buttons().isEmpty()) // Empty group left over on form?
return nullptr;
DomButtonGroup *domButtonGroup = new DomButtonGroup;
domButtonGroup->setAttributeName(buttonGroup->objectName());
@@ -2516,34 +2433,6 @@ QMetaEnum QAbstractFormBuilder::toolBarAreaMetaEnum()
return metaEnum<QAbstractFormBuilderGadget>("toolBarArea");
}
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
-
-/*!
- \internal
- Return paths of an icon.
-*/
-
-QAbstractFormBuilder::IconPaths QAbstractFormBuilder::iconPaths(const QIcon &icon) const
-{
- Q_UNUSED(icon);
- qWarning() << "QAbstractFormBuilder::iconPaths() is obsoleted";
- return IconPaths();
-}
-
-/*!
- \internal
- Return paths of a pixmap.
-*/
-
-QAbstractFormBuilder::IconPaths QAbstractFormBuilder::pixmapPaths(const QPixmap &pixmap) const
-{
- Q_UNUSED(pixmap);
- qWarning() << "QAbstractFormBuilder::pixmapPaths() is obsoleted";
- return IconPaths();
-}
-
-#endif // < Qt 6
-
/*!
\internal
Set up a DOM property with icon.
@@ -2559,7 +2448,7 @@ void QAbstractFormBuilder::setIconProperty(DomProperty &p, const IconPaths &ip)
*/
dpi->setText(ip.first);
- p.setAttributeName(QFormBuilderStrings::instance().iconAttribute);
+ p.setAttributeName(QFormBuilderStrings::iconAttribute);
p.setElementIconSet(dpi);
}
@@ -2573,22 +2462,6 @@ void QAbstractFormBuilder::setPixmapProperty(DomProperty &p, const IconPaths &ip
QFormBuilderExtra::setPixmapProperty(&p, ip);
}
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
-
-/*!
- \internal
- Convenience. Return DOM property for icon; 0 if icon.isNull().
-*/
-
-DomProperty* QAbstractFormBuilder::iconToDomProperty(const QIcon &icon) const
-{
- Q_UNUSED(icon);
- qWarning() << "QAbstractFormBuilder::iconToDomProperty() is obsoleted";
- return nullptr;
-}
-
-#endif // < Qt 6
-
/*!
\internal
\since 4.4
@@ -2601,7 +2474,7 @@ DomProperty *QAbstractFormBuilder::saveResource(const QVariant &v) const
DomProperty *p = resourceBuilder()->saveResource(workingDirectory(), v);
if (p)
- p->setAttributeName(QFormBuilderStrings::instance().iconAttribute);
+ p->setAttributeName(QFormBuilderStrings::iconAttribute);
return p;
}
@@ -2640,64 +2513,6 @@ const DomResourcePixmap *QAbstractFormBuilder::domPixmap(const DomProperty* p) {
return nullptr;
}
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
-
-/*!
- \internal
- Create icon from DOM.
- From 4.4 - unused
-*/
-
-QIcon QAbstractFormBuilder::domPropertyToIcon(const DomResourcePixmap *icon)
-{
- Q_UNUSED(icon);
- qWarning() << "QAbstractFormBuilder::domPropertyToIcon() is obsoleted";
- return QIcon();
-}
-
-/*!
- \internal
- Create icon from DOM. Assert if !domPixmap
- From 4.4 - unused
-*/
-
-QIcon QAbstractFormBuilder::domPropertyToIcon(const DomProperty* p)
-{
- Q_UNUSED(p);
- qWarning() << "QAbstractFormBuilder::domPropertyToIcon() is obsoleted";
- return QIcon();
-}
-
-
-/*!
- \internal
- Create pixmap from DOM.
- From 4.4 - unused
-*/
-
-QPixmap QAbstractFormBuilder::domPropertyToPixmap(const DomResourcePixmap* pixmap)
-{
- Q_UNUSED(pixmap);
- qWarning() << "QAbstractFormBuilder::domPropertyToPixmap() is obsoleted";
- return QPixmap();
-}
-
-
-/*!
- \internal
- Create pixmap from DOM. Assert if !domPixmap
- From 4.4 - unused
-*/
-
-QPixmap QAbstractFormBuilder::domPropertyToPixmap(const DomProperty* p)
-{
- Q_UNUSED(p);
- qWarning() << "QAbstractFormBuilder::domPropertyToPixmap() is obsoleted";
- return QPixmap();
-}
-
-#endif // < Qt 6
-
/*!
\fn void QAbstractFormBuilder::createConnections ( DomConnections *, QWidget * )
\internal
diff --git a/src/designer/src/lib/uilib/abstractformbuilder.h b/src/designer/src/lib/uilib/abstractformbuilder.h
index d33ceb76c..e5073e6fc 100644
--- a/src/designer/src/lib/uilib/abstractformbuilder.h
+++ b/src/designer/src/lib/uilib/abstractformbuilder.h
@@ -1,45 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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 ABSTRACTFORMBUILDER_H
#define ABSTRACTFORMBUILDER_H
+#if 0
+# pragma qt_sync_skip_header_check
+#endif
+
#include "uilib_global.h"
#include <QtCore/qlist.h>
@@ -230,23 +198,13 @@ protected:
// Icon/pixmap stuff
//
// A Pair of icon path/qrc path.
- using IconPaths = QPair<QString, QString>;
+ using IconPaths = std::pair<QString, QString>;
void setIconProperty(DomProperty &, const IconPaths &) const;
void setPixmapProperty(DomProperty &, const IconPaths &) const;
static const DomResourcePixmap *domPixmap(const DomProperty* p);
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
- IconPaths iconPaths(const QIcon &) const;
- IconPaths pixmapPaths(const QPixmap &) const;
- DomProperty* iconToDomProperty(const QIcon &) const;
- QIcon domPropertyToIcon(const DomResourcePixmap *);
- QIcon domPropertyToIcon(const DomProperty* p);
- QPixmap domPropertyToPixmap(const DomResourcePixmap* p);
- QPixmap domPropertyToPixmap(const DomProperty* p);
-#endif
-
private:
//
// utils
diff --git a/src/designer/src/lib/uilib/formbuilder.cpp b/src/designer/src/lib/uilib/formbuilder.cpp
index 4b5e99c69..ca1c1ee54 100644
--- a/src/designer/src/lib/uilib/formbuilder.cpp
+++ b/src/designer/src/lib/uilib/formbuilder.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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 "formbuilder.h"
#include "formbuilderextra_p.h"
@@ -50,6 +14,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
#ifdef QFORMINTERNAL_NAMESPACE
namespace QFormInternal {
#endif
@@ -122,7 +88,7 @@ QWidget *QFormBuilder::create(DomWidget *ui_widget, QWidget *parentWidget)
// Is this a QLayoutWidget with a margin of 0: Not a known page-based
// container and no method for adding pages registered.
d->setProcessingLayoutWidget(false);
- if (ui_widget->attributeClass() == QFormBuilderStrings::instance().qWidgetClass && !ui_widget->hasAttributeNative()
+ if (ui_widget->attributeClass() == "QWidget"_L1 && !ui_widget->hasAttributeNative()
&& parentWidget
#if QT_CONFIG(mainwindow)
&& !qobject_cast<QMainWindow *>(parentWidget)
@@ -146,7 +112,7 @@ QWidget *QFormBuilder::create(DomWidget *ui_widget, QWidget *parentWidget)
&& !qobject_cast<QDockWidget *>(parentWidget)
#endif
) {
- const QString parentClassName = QLatin1String(parentWidget->metaObject()->className());
+ const QString parentClassName = QLatin1StringView(parentWidget->metaObject()->className());
if (!d->isCustomWidgetContainer(parentClassName))
d->setProcessingLayoutWidget(true);
}
@@ -182,7 +148,7 @@ QWidget *QFormBuilder::createWidget(const QString &widgetName, QWidget *parentWi
// ### special-casing for Line (QFrame) -- fix for 4.2
do {
- if (widgetName == QFormBuilderStrings::instance().lineClass) {
+ if (widgetName == "Line"_L1) {
w = new QFrame(parentWidget);
static_cast<QFrame*>(w)->setFrameStyle(QFrame::HLine | QFrame::Sunken);
break;
@@ -250,7 +216,7 @@ QLayout *QFormBuilder::createLayout(const QString &layoutName, QObject *parent,
#define DECLARE_COMPAT_WIDGET(W, C)
#define DECLARE_LAYOUT(L, C) \
- if (layoutName == QLatin1String(#L)) { \
+ if (layoutName == QLatin1StringView(#L)) { \
Q_ASSERT(l == 0); \
l = parentLayout \
? new L() \
@@ -352,23 +318,9 @@ QLayout *QFormBuilder::create(DomLayout *ui_layout, QLayout *layout, QWidget *pa
bool layoutWidget = d->processingLayoutWidget();
QLayout *l = QAbstractFormBuilder::create(ui_layout, layout, parentWidget);
if (layoutWidget) {
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
- int left, top, right, bottom;
- left = top = right = bottom = 0;
- const DomPropertyHash properties = propertyMap(ui_layout->elementProperty());
-
- if (DomProperty *prop = properties.value(strings.leftMarginProperty))
- left = prop->elementNumber();
-
- if (DomProperty *prop = properties.value(strings.topMarginProperty))
- top = prop->elementNumber();
-
- if (DomProperty *prop = properties.value(strings.rightMarginProperty))
- right = prop->elementNumber();
-
- if (DomProperty *prop = properties.value(strings.bottomMarginProperty))
- bottom = prop->elementNumber();
-
+ int left = 0, top = 0, right = 0, bottom = 0;
+ QFormBuilderExtra::getLayoutMargins(ui_layout->elementProperty(),
+ &left, &top, &right, &bottom);
l->setContentsMargins(left, top, right, bottom);
d->setProcessingLayoutWidget(false);
}
@@ -468,7 +420,7 @@ void QFormBuilder::updateCustomWidgets()
d->m_customWidgets.clear();
#if QT_CONFIG(library)
- for (const QString &path : qAsConst(d->m_pluginPaths)) {
+ for (const QString &path : std::as_const(d->m_pluginPaths)) {
const QDir dir(path);
const QStringList candidates = dir.entryList(QDir::Files);
@@ -476,11 +428,7 @@ void QFormBuilder::updateCustomWidgets()
if (!QLibrary::isLibrary(plugin))
continue;
- QString loaderPath = path;
- loaderPath += QLatin1Char('/');
- loaderPath += plugin;
-
- QPluginLoader loader(loaderPath);
+ QPluginLoader loader(path + u'/' + plugin);
if (loader.load())
insertPlugins(loader.instance(), &d->m_customWidgets);
}
@@ -513,8 +461,6 @@ void QFormBuilder::applyProperties(QObject *o, const QList<DomProperty*> &proper
if (properties.isEmpty())
return;
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
-
for (DomProperty *p : properties) {
const QVariant v = toVariant(o->metaObject(), p);
if (!v.isValid()) // QTBUG-33130, do not fall for QVariant(QString()).isNull() == true.
@@ -522,11 +468,12 @@ void QFormBuilder::applyProperties(QObject *o, const QList<DomProperty*> &proper
const QString attributeName = p->attributeName();
const bool isWidget = o->isWidgetType();
- if (isWidget && o->parent() == d->parentWidget() && attributeName == strings.geometryProperty) {
+ if (isWidget && o->parent() == d->parentWidget() && attributeName == "geometry"_L1) {
// apply only the size part of a geometry for the root widget
static_cast<QWidget*>(o)->resize(qvariant_cast<QRect>(v).size());
} else if (d->applyPropertyInternally(o, attributeName, v)) {
- } else if (isWidget && !qstrcmp("QFrame", o->metaObject()->className ()) && attributeName == strings.orientationProperty) {
+ } else if (isWidget && qstrcmp("QFrame", o->metaObject()->className()) == 0
+ && attributeName == "orientation"_L1) {
// ### special-casing for Line (QFrame) -- try to fix me
o->setProperty("frameShape", v); // v is of QFrame::Shape enum
} else {
diff --git a/src/designer/src/lib/uilib/formbuilder.h b/src/designer/src/lib/uilib/formbuilder.h
index 79013d221..7b4f8e1fd 100644
--- a/src/designer/src/lib/uilib/formbuilder.h
+++ b/src/designer/src/lib/uilib/formbuilder.h
@@ -1,54 +1,18 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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 FORMBUILDER_H
#define FORMBUILDER_H
+#if 0
+# pragma qt_class(QFormBuilder)
+# pragma qt_sync_skip_header_check
+#endif
+
#include "uilib_global.h"
#include "abstractformbuilder.h"
QT_BEGIN_NAMESPACE
-#if 0
-// pragma for syncqt, don't remove.
-
-#pragma qt_class(QFormBuilder)
-#endif
class QDesignerCustomWidgetInterface;
diff --git a/src/designer/src/lib/uilib/formbuilderextra.cpp b/src/designer/src/lib/uilib/formbuilderextra.cpp
index 1dbed5348..aae8ec0a0 100644
--- a/src/designer/src/lib/uilib/formbuilderextra.cpp
+++ b/src/designer/src/lib/uilib/formbuilderextra.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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 "formbuilderextra_p.h"
#include "abstractformbuilder.h"
@@ -59,6 +23,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
#ifdef QFORMINTERNAL_NAMESPACE
namespace QFormInternal {
#endif
@@ -80,7 +46,7 @@ QFormBuilderExtra::CustomWidgetData::CustomWidgetData(const DomCustomWidget *dcw
QFormBuilderExtra::QFormBuilderExtra() :
m_defaultMargin(INT_MIN),
m_defaultSpacing(INT_MIN),
- m_language(QStringLiteral("c++"))
+ m_language(u"c++"_s)
{
}
@@ -112,7 +78,6 @@ static inline QString msgXmlError(const QXmlStreamReader &reader)
static bool inline readUiAttributes(QXmlStreamReader &reader, const QString &language,
QString *errorMessage)
{
- const QString uiElement = QStringLiteral("ui");
// Read up to first element
while (!reader.atEnd()) {
switch (reader.readNext()) {
@@ -120,9 +85,9 @@ static bool inline readUiAttributes(QXmlStreamReader &reader, const QString &lan
*errorMessage = msgXmlError(reader);
return false;
case QXmlStreamReader::StartElement:
- if (reader.name().compare(uiElement, Qt::CaseInsensitive) == 0) {
- const QString versionAttribute = QStringLiteral("version");
- const QString languageAttribute = QStringLiteral("language");
+ if (reader.name().compare("ui"_L1, Qt::CaseInsensitive) == 0) {
+ const QString versionAttribute = u"version"_s;
+ const QString languageAttribute = u"language"_s;
const QXmlStreamAttributes attributes = reader.attributes();
if (attributes.hasAttribute(versionAttribute)) {
const QVersionNumber version =
@@ -187,7 +152,7 @@ bool QFormBuilderExtra::applyPropertyInternally(QObject *o, const QString &prope
{
// Store buddies and apply them later on as the widgets might not exist yet.
QLabel *label = qobject_cast<QLabel*>(o);
- if (!label || propertyName != QFormBuilderStrings::instance().buddyProperty)
+ if (label == nullptr || propertyName != "buddy"_L1)
return false;
m_buddies.insert(label, value.toString());
@@ -196,11 +161,7 @@ bool QFormBuilderExtra::applyPropertyInternally(QObject *o, const QString &prope
void QFormBuilderExtra::applyInternalProperties() const
{
- if (m_buddies.isEmpty())
- return;
-
- const BuddyHash::const_iterator cend = m_buddies.constEnd();
- for (BuddyHash::const_iterator it = m_buddies.constBegin(); it != cend; ++it )
+ for (auto it = m_buddies.cbegin(), cend = m_buddies.cend(); it != cend; ++it )
applyBuddy(it.value(), BuddyApplyAll, it.key());
}
@@ -217,10 +178,9 @@ bool QFormBuilderExtra::applyBuddy(const QString &buddyName, BuddyMode applyMode
return false;
}
- const QWidgetList::const_iterator cend = widgets.constEnd();
- for ( QWidgetList::const_iterator it = widgets.constBegin(); it != cend; ++it) {
- if (applyMode == BuddyApplyAll || !(*it)->isHidden()) {
- label->setBuddy(*it);
+ for (auto *w : widgets) {
+ if (applyMode == BuddyApplyAll || !w->isHidden()) {
+ label->setBuddy(w);
return true;
}
}
@@ -254,15 +214,15 @@ void QFormBuilderExtra::storeCustomWidgetData(const QString &className, const Do
QString QFormBuilderExtra::customWidgetBaseClass(const QString &className) const
{
- const QHash<QString, CustomWidgetData>::const_iterator it = m_customWidgetDataHash.constFind(className);
+ const auto it = m_customWidgetDataHash.constFind(className);
if (it != m_customWidgetDataHash.constEnd())
- return it.value().baseClass;
+ return it.value().baseClass;
return QString();
}
QString QFormBuilderExtra::customWidgetAddPageMethod(const QString &className) const
{
- const QHash<QString, CustomWidgetData>::const_iterator it = m_customWidgetDataHash.constFind(className);
+ const auto it = m_customWidgetDataHash.constFind(className);
if (it != m_customWidgetDataHash.constEnd())
return it.value().addPageMethod;
return QString();
@@ -270,7 +230,7 @@ QString QFormBuilderExtra::customWidgetAddPageMethod(const QString &className) c
bool QFormBuilderExtra::isCustomWidgetContainer(const QString &className) const
{
- const QHash<QString, CustomWidgetData>::const_iterator it = m_customWidgetDataHash.constFind(className);
+ const auto it = m_customWidgetDataHash.constFind(className);
if (it != m_customWidgetDataHash.constEnd())
return it.value().isContainer;
return false;
@@ -350,7 +310,7 @@ inline QString perCellPropertyToString(const Layout *l, int count, int (Layout::
QTextStream str(&rc);
for (int i = 0; i < count; i++) {
if (i)
- str << QLatin1Char(',');
+ str << ',';
str << (l->*getter)(i);
}
}
@@ -375,7 +335,7 @@ inline bool parsePerCellProperty(Layout *l, int count, void (Layout::*setter)(in
clearPerCellValue(l, count, setter, defaultValue);
return true;
}
- const auto list = QStringView{s}.split(QLatin1Char(','));
+ const auto list = QStringView{s}.split(u',');
if (list.isEmpty()) {
clearPerCellValue(l, count, setter, defaultValue);
return true;
@@ -403,6 +363,19 @@ static QString msgInvalidStretch(const QString &objectName, const QString &stret
return QCoreApplication::translate("FormBuilder", "Invalid stretch value for '%1': '%2'").arg(objectName, stretch);
}
+void QFormBuilderExtra::getLayoutMargins(const QList<DomProperty*> &properties,
+ int *left, int *top, int *right, int *bottom)
+{
+ if (const auto *p = propertyByName(properties, "leftMargin"))
+ *left = p->elementNumber();
+ if (const auto *p = propertyByName(properties, "topMargin"))
+ *top = p->elementNumber();
+ if (const auto *p = propertyByName(properties, "rightMargin"))
+ *right = p->elementNumber();
+ if (const auto *p = propertyByName(properties, "bottomMargin"))
+ *bottom = p->elementNumber();
+}
+
QString QFormBuilderExtra::boxLayoutStretch(const QBoxLayout *box)
{
return perCellPropertyToString(box, box->count(), &QBoxLayout::stretch);
@@ -501,7 +474,7 @@ void QFormBuilderExtra::clearGridLayoutColumnMinimumWidth(QGridLayout *grid)
clearPerCellValue(grid, grid->columnCount(), &QGridLayout::setColumnMinimumWidth);
}
-void QFormBuilderExtra::setPixmapProperty(DomProperty *p, const QPair<QString, QString> &ip)
+void QFormBuilderExtra::setPixmapProperty(DomProperty *p, const std::pair<QString, QString> &ip)
{
DomResourcePixmap *pix = new DomResourcePixmap;
if (!ip.second.isEmpty())
@@ -509,7 +482,7 @@ void QFormBuilderExtra::setPixmapProperty(DomProperty *p, const QPair<QString, Q
pix->setText(ip.first);
- p->setAttributeName(QFormBuilderStrings::instance().pixmapAttribute);
+ p->setAttributeName("pixmap"_L1);
p->setElementPixmap(pix);
}
@@ -548,14 +521,13 @@ DomColorGroup *QFormBuilderExtra::saveColorGroup(const QPalette &palette,
DomColorGroup *group = new DomColorGroup();
QList<DomColorRole *> colorRoles;
- const uint mask = palette.resolveMask();
- for (int role = QPalette::WindowText; role < QPalette::NColorRoles; ++role) {
- if (mask & (1 << role)) {
- const QBrush &br = palette.brush(colorGroup, QPalette::ColorRole(role));
-
+ for (int r = QPalette::WindowText; r < QPalette::NColorRoles; ++r) {
+ const auto role = static_cast<QPalette::ColorRole>(r);
+ if (palette.isBrushSet(colorGroup, role)) {
+ const QBrush &br = palette.brush(colorGroup, role);
DomColorRole *colorRole = new DomColorRole();
colorRole->setElementBrush(saveBrush(br));
- colorRole->setAttributeRole(QLatin1String(colorRole_enum.valueToKey(role)));
+ colorRole->setAttributeRole(QLatin1StringView(colorRole_enum.valueToKey(role)));
colorRoles.append(colorRole);
}
}
@@ -661,7 +633,7 @@ DomBrush *QFormBuilderExtra::saveBrush(const QBrush &br)
DomBrush *brush = new DomBrush();
const Qt::BrushStyle style = br.style();
- brush->setAttributeBrushStyle(QLatin1String(brushStyle_enum.valueToKey(style)));
+ brush->setAttributeBrushStyle(QLatin1StringView(brushStyle_enum.valueToKey(style)));
if (style == Qt::LinearGradientPattern ||
style == Qt::RadialGradientPattern ||
style == Qt::ConicalGradientPattern) {
@@ -672,9 +644,9 @@ DomBrush *QFormBuilderExtra::saveBrush(const QBrush &br)
DomGradient *gradient = new DomGradient();
const QGradient *gr = br.gradient();
const QGradient::Type type = gr->type();
- gradient->setAttributeType(QLatin1String(gradientType_enum.valueToKey(type)));
- gradient->setAttributeSpread(QLatin1String(gradientSpread_enum.valueToKey(gr->spread())));
- gradient->setAttributeCoordinateMode(QLatin1String(gradientCoordinate_enum.valueToKey(gr->coordinateMode())));
+ gradient->setAttributeType(QLatin1StringView(gradientType_enum.valueToKey(type)));
+ gradient->setAttributeSpread(QLatin1StringView(gradientSpread_enum.valueToKey(gr->spread())));
+ gradient->setAttributeCoordinateMode(QLatin1StringView(gradientCoordinate_enum.valueToKey(gr->coordinateMode())));
QList<DomGradientStop *> stops;
const QGradientStops st = gr->stops();
for (const QGradientStop &pair : st) {
@@ -729,69 +701,35 @@ DomBrush *QFormBuilderExtra::saveBrush(const QBrush &br)
return brush;
}
+DomProperty *QFormBuilderExtra::propertyByName(const QList<DomProperty*> &properties,
+ QAnyStringView needle)
+{
+ auto it = std::find_if(properties.cbegin(), properties.cend(),
+ [needle](const DomProperty *p) {
+ return p->attributeName() == needle; });
+ return it != properties.cend() ? *it : nullptr;
+}
+
// ------------ QFormBuilderStrings
QFormBuilderStrings::QFormBuilderStrings() :
- buddyProperty(QStringLiteral("buddy")),
- cursorProperty(QStringLiteral("cursor")),
- objectNameProperty(QStringLiteral("objectName")),
- trueValue(QStringLiteral("true")),
- falseValue(QStringLiteral("false")),
- horizontalPostFix(QStringLiteral("Horizontal")),
- separator(QStringLiteral("separator")),
- defaultTitle(QStringLiteral("Page")),
- titleAttribute(QStringLiteral("title")),
- labelAttribute(QStringLiteral("label")),
- toolTipAttribute(QStringLiteral("toolTip")),
- whatsThisAttribute(QStringLiteral("whatsThis")),
- flagsAttribute(QStringLiteral("flags")),
- iconAttribute(QStringLiteral("icon")),
- pixmapAttribute(QStringLiteral("pixmap")),
- textAttribute(QStringLiteral("text")),
- currentIndexProperty(QStringLiteral("currentIndex")),
- toolBarAreaAttribute(QStringLiteral("toolBarArea")),
- toolBarBreakAttribute(QStringLiteral("toolBarBreak")),
- dockWidgetAreaAttribute(QStringLiteral("dockWidgetArea")),
- marginProperty(QStringLiteral("margin")),
- spacingProperty(QStringLiteral("spacing")),
- leftMarginProperty(QStringLiteral("leftMargin")),
- topMarginProperty(QStringLiteral("topMargin")),
- rightMarginProperty(QStringLiteral("rightMargin")),
- bottomMarginProperty(QStringLiteral("bottomMargin")),
- horizontalSpacingProperty(QStringLiteral("horizontalSpacing")),
- verticalSpacingProperty(QStringLiteral("verticalSpacing")),
- sizeHintProperty(QStringLiteral("sizeHint")),
- sizeTypeProperty(QStringLiteral("sizeType")),
- orientationProperty(QStringLiteral("orientation")),
- styleSheetProperty(QStringLiteral("styleSheet")),
- qtHorizontal(QStringLiteral("Qt::Horizontal")),
- qtVertical(QStringLiteral("Qt::Vertical")),
- currentRowProperty(QStringLiteral("currentRow")),
- tabSpacingProperty(QStringLiteral("tabSpacing")),
- qWidgetClass(QStringLiteral("QWidget")),
- lineClass(QStringLiteral("Line")),
- geometryProperty(QStringLiteral("geometry")),
- scriptWidgetVariable(QStringLiteral("widget")),
- scriptChildWidgetsVariable(QStringLiteral("childWidgets"))
-{
- itemRoles.append(qMakePair(Qt::FontRole, QString::fromLatin1("font")));
- itemRoles.append(qMakePair(Qt::TextAlignmentRole, QString::fromLatin1("textAlignment")));
- itemRoles.append(qMakePair(Qt::BackgroundRole, QString::fromLatin1("background")));
- itemRoles.append(qMakePair(Qt::ForegroundRole, QString::fromLatin1("foreground")));
- itemRoles.append(qMakePair(Qt::CheckStateRole, QString::fromLatin1("checkState")));
-
- for (const RoleNName &it : qAsConst(itemRoles))
+ itemRoles {
+ {Qt::FontRole, "font"_L1},
+ {Qt::TextAlignmentRole, "textAlignment"_L1},
+ {Qt::BackgroundRole, "background"_L1},
+ {Qt::ForegroundRole, "foreground"_L1},
+ {Qt::CheckStateRole, "checkState"_L1}
+ },
+ itemTextRoles { // This must be first for the loop below
+ { {Qt::EditRole, Qt::DisplayPropertyRole}, textAttribute},
+ { {Qt::ToolTipRole, Qt::ToolTipPropertyRole}, toolTipAttribute},
+ { {Qt::StatusTipRole, Qt::StatusTipPropertyRole}, "statusTip"_L1},
+ { {Qt::WhatsThisRole, Qt::WhatsThisPropertyRole}, whatsThisAttribute}
+ }
+{
+ for (const RoleNName &it : std::as_const(itemRoles))
treeItemRoleHash.insert(it.second, it.first);
- itemTextRoles.append(qMakePair(qMakePair(Qt::EditRole, Qt::DisplayPropertyRole),
- textAttribute)); // This must be first for the loop below
- itemTextRoles.append(qMakePair(qMakePair(Qt::ToolTipRole, Qt::ToolTipPropertyRole),
- toolTipAttribute));
- itemTextRoles.append(qMakePair(qMakePair(Qt::StatusTipRole, Qt::StatusTipPropertyRole),
- QString::fromLatin1("statusTip")));
- itemTextRoles.append(qMakePair(qMakePair(Qt::WhatsThisRole, Qt::WhatsThisPropertyRole),
- whatsThisAttribute));
-
// Note: this skips the first item!
auto it = itemTextRoles.constBegin();
const auto end = itemTextRoles.constEnd();
diff --git a/src/designer/src/lib/uilib/formbuilderextra_p.h b/src/designer/src/lib/uilib/formbuilderextra_p.h
index 94b0c2231..f55945e81 100644
--- a/src/designer/src/lib/uilib/formbuilderextra_p.h
+++ b/src/designer/src/lib/uilib/formbuilderextra_p.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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 ABSTRACTFORMBUILDERPRIVATE_H
#define ABSTRACTFORMBUILDERPRIVATE_H
@@ -95,6 +59,8 @@ class QTextBuilder;
class QDESIGNER_UILIB_EXPORT QFormBuilderExtra
{
public:
+ Q_DISABLE_COPY_MOVE(QFormBuilderExtra);
+
QFormBuilderExtra();
~QFormBuilderExtra();
@@ -141,11 +107,14 @@ public:
// --- Hash used in creating button groups on demand. Store a map of name and pair of dom group and real group
void registerButtonGroups(const DomButtonGroups *groups);
- using ButtonGroupEntry = QPair<DomButtonGroup *, QButtonGroup*>;
+ using ButtonGroupEntry = std::pair<DomButtonGroup *, QButtonGroup *>;
using ButtonGroupHash = QHash<QString, ButtonGroupEntry>;
const ButtonGroupHash &buttonGroups() const { return m_buttonGroups; }
ButtonGroupHash &buttonGroups() { return m_buttonGroups; }
+ static void getLayoutMargins(const QList<DomProperty*> &properties,
+ int *left, int *top, int *right, int *bottom);
+
// return stretch as a comma-separated list
static QString boxLayoutStretch(const QBoxLayout*);
// apply stretch
@@ -169,7 +138,7 @@ public:
static bool setGridLayoutColumnMinimumWidth(const QString &, QGridLayout *);
static void clearGridLayoutColumnMinimumWidth(QGridLayout *);
- static void setPixmapProperty(DomProperty *p, const QPair<QString, QString> &ip);
+ static void setPixmapProperty(DomProperty *p, const std::pair<QString, QString> &ip);
static QPalette loadPalette(const DomPalette *dom);
static void setupColorGroup(QPalette *palette, QPalette::ColorGroup colorGroup,
const DomColorGroup *group);
@@ -179,6 +148,9 @@ public:
static QBrush setupBrush(const DomBrush *brush);
static DomBrush *saveBrush(const QBrush &br);
+ static DomProperty *propertyByName(const QList<DomProperty*> &properties,
+ QAnyStringView needle);
+
QStringList m_pluginPaths;
QMap<QString, QDesignerCustomWidgetInterface*> m_customWidgets;
@@ -195,8 +167,7 @@ private:
void clearResourceBuilder();
void clearTextBuilder();
- using BuddyHash = QHash<QLabel*, QString>;
- BuddyHash m_buddies;
+ QHash<QLabel *, QString> m_buddies;
QHash<QString, CustomWidgetData> m_customWidgetDataHash;
@@ -218,58 +189,24 @@ struct QDESIGNER_UILIB_EXPORT QFormBuilderStrings {
static const QFormBuilderStrings &instance();
- const QString buddyProperty;
- const QString cursorProperty;
- const QString objectNameProperty;
- const QString trueValue;
- const QString falseValue;
- const QString horizontalPostFix;
- const QString separator;
- const QString defaultTitle;
- const QString titleAttribute;
- const QString labelAttribute;
- const QString toolTipAttribute;
- const QString whatsThisAttribute;
- const QString flagsAttribute;
- const QString iconAttribute;
- const QString pixmapAttribute;
- const QString textAttribute;
- const QString currentIndexProperty;
- const QString toolBarAreaAttribute;
- const QString toolBarBreakAttribute;
- const QString dockWidgetAreaAttribute;
- const QString marginProperty;
- const QString spacingProperty;
- const QString leftMarginProperty;
- const QString topMarginProperty;
- const QString rightMarginProperty;
- const QString bottomMarginProperty;
- const QString horizontalSpacingProperty;
- const QString verticalSpacingProperty;
- const QString sizeHintProperty;
- const QString sizeTypeProperty;
- const QString orientationProperty;
- const QString styleSheetProperty;
- const QString qtHorizontal;
- const QString qtVertical;
- const QString currentRowProperty;
- const QString tabSpacingProperty;
- const QString qWidgetClass;
- const QString lineClass;
- const QString geometryProperty;
- const QString scriptWidgetVariable;
- const QString scriptChildWidgetsVariable;
-
- using RoleNName = QPair<Qt::ItemDataRole, QString>;
+ static constexpr auto titleAttribute = QLatin1StringView("title");
+ static constexpr auto labelAttribute = QLatin1StringView("label");
+ static constexpr auto toolTipAttribute = QLatin1StringView("toolTip");
+ static constexpr auto whatsThisAttribute = QLatin1StringView("whatsThis");
+ static constexpr auto flagsAttribute = QLatin1StringView("flags");
+ static constexpr auto iconAttribute = QLatin1StringView("icon");
+ static constexpr auto textAttribute = QLatin1StringView("text") ;
+
+ using RoleNName = std::pair<Qt::ItemDataRole, QString>;
QList<RoleNName> itemRoles;
QHash<QString, Qt::ItemDataRole> treeItemRoleHash;
// first.first is primary role, first.second is shadow role.
// Shadow is used for either the translation source or the designer
// representation of the string value.
- using TextRoleNName = QPair<QPair<Qt::ItemDataRole, Qt::ItemDataRole>, QString>;
+ using TextRoleNName = std::pair<std::pair<Qt::ItemDataRole, Qt::ItemDataRole>, QString>;
QList<TextRoleNName> itemTextRoles;
- QHash<QString, QPair<Qt::ItemDataRole, Qt::ItemDataRole> > treeItemTextRoleHash;
+ QHash<QString, std::pair<Qt::ItemDataRole, Qt::ItemDataRole> > treeItemTextRoleHash;
};
#ifdef QFORMINTERNAL_NAMESPACE
}
diff --git a/src/designer/src/lib/uilib/properties.cpp b/src/designer/src/lib/uilib/properties.cpp
index 253196f2f..872e8975f 100644
--- a/src/designer/src/lib/uilib/properties.cpp
+++ b/src/designer/src/lib/uilib/properties.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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 "properties_p.h"
#include "ui4_p.h"
@@ -53,21 +17,17 @@
#include <QtWidgets/qframe.h>
#include <QtWidgets/qabstractscrollarea.h>
+#include <limits>
+
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
#ifdef QFORMINTERNAL_NAMESPACE
namespace QFormInternal
{
#endif
-static inline void fixEnum(QString &s)
-{
- int qualifierIndex = s.lastIndexOf(QLatin1Char(':'));
- if (qualifierIndex == -1)
- qualifierIndex = s.lastIndexOf(QLatin1Char('.'));
- if (qualifierIndex != -1)
- s.remove(0, qualifierIndex + 1);
-}
// Convert complex DOM types with the help of QAbstractFormBuilder
QVariant domPropertyToVariant(QAbstractFormBuilder *afb,const QMetaObject *meta,const DomProperty *p)
{
@@ -75,7 +35,7 @@ QVariant domPropertyToVariant(QAbstractFormBuilder *afb,const QMetaObject *meta,
switch(p->kind()) {
case DomProperty::String: {
const int index = meta->indexOfProperty(p->attributeName().toUtf8());
- if (index != -1 && meta->property(index).type() == QVariant::KeySequence)
+ if (index != -1 && meta->property(index).metaType().id() == QMetaType::QKeySequence)
return QVariant::fromValue(QKeySequence(p->elementString()->text()));
}
break;
@@ -107,29 +67,44 @@ QVariant domPropertyToVariant(QAbstractFormBuilder *afb,const QMetaObject *meta,
const QMetaEnum e = meta->property(index).enumerator();
Q_ASSERT(e.isFlag() == true);
- return QVariant(e.keysToValue(p->elementSet().toUtf8()));
+ bool ok{};
+ QVariant result(e.keysToValue(p->elementSet().toUtf8().constData(), &ok));
+ if (!ok) {
+ uiLibWarning(QCoreApplication::translate("QFormBuilder",
+ "The value \"%1\" of the set-type property %2 could not be read.").
+ arg(p->attributeName(), p->elementSet()));
+ return {};
+ }
+ return result;
}
case DomProperty::Enum: {
const QByteArray pname = p->attributeName().toUtf8();
const int index = meta->indexOfProperty(pname);
- QString enumValue = p->elementEnum();
+ const auto &enumValue = p->elementEnum();
// Triggers in case of objects in Designer like Spacer/Line for which properties
// are serialized using language introspection. On preview, however, these objects are
// emulated by hacks in the formbuilder (size policy/orientation)
- fixEnum(enumValue);
if (index == -1) {
// ### special-casing for Line (QFrame) -- fix for 4.2. Jambi hack for enumerations
if (!qstrcmp(meta->className(), "QFrame")
&& (pname == QByteArray("orientation"))) {
- return QVariant(enumValue == QFormBuilderStrings::instance().horizontalPostFix ? QFrame::HLine : QFrame::VLine);
+ return QVariant(enumValue.endsWith("Horizontal"_L1) ? QFrame::HLine : QFrame::VLine);
}
uiLibWarning(QCoreApplication::translate("QFormBuilder", "The enumeration-type property %1 could not be read.").arg(p->attributeName()));
return QVariant();
}
const QMetaEnum e = meta->property(index).enumerator();
- return QVariant(e.keyToValue(enumValue.toUtf8()));
+ bool ok{};
+ QVariant result(e.keyToValue(enumValue.toUtf8().constData(), &ok));
+ if (!ok) {
+ uiLibWarning(QCoreApplication::translate("QFormBuilder",
+ "The value \"%1\" of the enum-type property %2 could not be read.").
+ arg(p->attributeName(), enumValue));
+ return {};
+ }
+ return result;
}
case DomProperty::Brush:
return QVariant::fromValue(afb->setupBrush(p->elementBrush()));
@@ -145,13 +120,22 @@ QVariant domPropertyToVariant(QAbstractFormBuilder *afb,const QMetaObject *meta,
return domPropertyToVariant(p);
}
+// Convert a legacy Qt 4 integer font weight to the closes enumeration value
+
+static inline QMetaEnum fontWeightMetaEnum()
+{
+ const QMetaEnum result = metaEnum<QAbstractFormBuilderGadget>("fontWeight");
+ Q_ASSERT(result.isValid());
+ return result;
+}
+
// Convert simple DOM types
QVariant domPropertyToVariant(const DomProperty *p)
{
// requires non-const virtual nameToIcon, etc.
switch(p->kind()) {
case DomProperty::Bool:
- return QVariant(p->elementBool() == QFormBuilderStrings::instance().trueValue);
+ return QVariant(p->elementBool() == "true"_L1);
case DomProperty::Cstring:
return QVariant(p->elementCstring().toUtf8());
@@ -230,8 +214,6 @@ QVariant domPropertyToVariant(const DomProperty *p)
f.setPointSize(font->elementPointSize());
if (font->hasElementItalic())
f.setItalic(font->elementItalic());
- if (font->hasElementBold())
- f.setBold(font->elementBold());
if (font->hasElementUnderline())
f.setUnderline(font->elementUnderline());
if (font->hasElementStrikeOut())
@@ -244,6 +226,19 @@ QVariant domPropertyToVariant(const DomProperty *p)
f.setStyleStrategy(enumKeyOfObjectToValue<QAbstractFormBuilderGadget, QFont::StyleStrategy>("styleStrategy",
font->elementStyleStrategy().toLatin1().constData()));
}
+ if (font->hasElementHintingPreference()) {
+ f.setHintingPreference(enumKeyOfObjectToValue<QAbstractFormBuilderGadget, QFont::HintingPreference>("hintingPreference",
+ font->elementHintingPreference().toLatin1().constData()));
+ }
+
+ if (font->hasElementFontWeight()) {
+ f.setWeight(enumKeyOfObjectToValue<QAbstractFormBuilderGadget, QFont::Weight>(
+ "fontWeight",
+ font->elementFontWeight().toLatin1().constData()));
+ } else if (font->hasElementBold()) {
+ f.setBold(font->elementBold());
+ }
+
return QVariant::fromValue(f);
}
@@ -282,8 +277,8 @@ QVariant domPropertyToVariant(const DomProperty *p)
const DomLocale *locale = p->elementLocale();
return QVariant::fromValue(QLocale(enumKeyOfObjectToValue<QAbstractFormBuilderGadget, QLocale::Language>("language",
locale->attributeLanguage().toLatin1().constData()),
- enumKeyOfObjectToValue<QAbstractFormBuilderGadget, QLocale::Country>("country",
- locale->attributeCountry().toLatin1().constData())));
+ enumKeyOfObjectToValue<QAbstractFormBuilderGadget, QLocale::Territory>("country",
+ locale->attributeCountry().toLatin1().constData())));
}
case DomProperty::SizePolicy: {
const DomSizePolicy *sizep = p->elementSizePolicy();
@@ -325,45 +320,45 @@ QVariant domPropertyToVariant(const DomProperty *p)
// Apply a simple variant type to a DOM property
static bool applySimpleProperty(const QVariant &v, bool translateString, DomProperty *dom_prop)
{
- switch (v.type()) {
- case QVariant::String: {
+ switch (v.metaType().id()) {
+ case QMetaType::QString: {
DomString *str = new DomString();
str->setText(v.toString());
if (!translateString)
- str->setAttributeNotr(QStringLiteral("true"));
+ str->setAttributeNotr(u"true"_s);
dom_prop->setElementString(str);
}
return true;
- case QVariant::ByteArray:
+ case QMetaType::QByteArray:
dom_prop->setElementCstring(QString::fromUtf8(v.toByteArray()));
return true;
- case QVariant::Int:
+ case QMetaType::Int:
dom_prop->setElementNumber(v.toInt());
return true;
- case QVariant::UInt:
+ case QMetaType::UInt:
dom_prop->setElementUInt(v.toUInt());
return true;
- case QVariant::LongLong:
+ case QMetaType::LongLong:
dom_prop->setElementLongLong(v.toLongLong());
return true;
- case QVariant::ULongLong:
+ case QMetaType::ULongLong:
dom_prop->setElementULongLong(v.toULongLong());
return true;
- case QVariant::Double:
+ case QMetaType::Double:
dom_prop->setElementDouble(v.toDouble());
return true;
- case QVariant::Bool:
- dom_prop->setElementBool(v.toBool() ? QFormBuilderStrings::instance().trueValue : QFormBuilderStrings::instance().falseValue);
+ case QMetaType::Bool:
+ dom_prop->setElementBool(v.toBool() ? "true"_L1 : "false"_L1);
return true;
- case QVariant::Char: {
+ case QMetaType::QChar: {
DomChar *ch = new DomChar();
const QChar character = v.toChar();
ch->setElementUnicode(character.unicode());
@@ -371,7 +366,7 @@ static bool applySimpleProperty(const QVariant &v, bool translateString, DomProp
}
return true;
- case QVariant::Point: {
+ case QMetaType::QPoint: {
DomPoint *pt = new DomPoint();
const QPoint point = v.toPoint();
pt->setElementX(point.x());
@@ -380,7 +375,7 @@ static bool applySimpleProperty(const QVariant &v, bool translateString, DomProp
}
return true;
- case QVariant::PointF: {
+ case QMetaType::QPointF: {
DomPointF *ptf = new DomPointF();
const QPointF pointf = v.toPointF();
ptf->setElementX(pointf.x());
@@ -389,7 +384,7 @@ static bool applySimpleProperty(const QVariant &v, bool translateString, DomProp
}
return true;
- case QVariant::Color: {
+ case QMetaType::QColor: {
DomColor *clr = new DomColor();
const QColor color = qvariant_cast<QColor>(v);
clr->setElementRed(color.red());
@@ -402,7 +397,7 @@ static bool applySimpleProperty(const QVariant &v, bool translateString, DomProp
}
return true;
- case QVariant::Size: {
+ case QMetaType::QSize: {
DomSize *sz = new DomSize();
const QSize size = v.toSize();
sz->setElementWidth(size.width());
@@ -411,7 +406,7 @@ static bool applySimpleProperty(const QVariant &v, bool translateString, DomProp
}
return true;
- case QVariant::SizeF: {
+ case QMetaType::QSizeF: {
DomSizeF *szf = new DomSizeF();
const QSizeF sizef = v.toSizeF();
szf->setElementWidth(sizef.width());
@@ -420,7 +415,7 @@ static bool applySimpleProperty(const QVariant &v, bool translateString, DomProp
}
return true;
- case QVariant::Rect: {
+ case QMetaType::QRect: {
DomRect *rc = new DomRect();
const QRect rect = v.toRect();
rc->setElementX(rect.x());
@@ -431,7 +426,7 @@ static bool applySimpleProperty(const QVariant &v, bool translateString, DomProp
}
return true;
- case QVariant::RectF: {
+ case QMetaType::QRectF: {
DomRectF *rcf = new DomRectF();
const QRectF rectf = v.toRectF();
rcf->setElementX(rectf.x());
@@ -442,13 +437,27 @@ static bool applySimpleProperty(const QVariant &v, bool translateString, DomProp
}
return true;
- case QVariant::Font: {
+ case QMetaType::QFont: {
DomFont *fnt = new DomFont();
const QFont font = qvariant_cast<QFont>(v);
const uint mask = font.resolveMask();
- if (mask & QFont::WeightResolved)
- fnt->setElementBold(font.bold());
- if (mask & QFont::FamilyResolved)
+ if (mask & QFont::WeightResolved) {
+ switch (font.weight()) {
+ case QFont::Normal:
+ fnt->setElementBold(false);
+ break;
+ case QFont::Bold:
+ fnt->setElementBold(true);
+ break;
+ default: {
+ const QMetaEnum me = fontWeightMetaEnum();
+ const QString ws = QLatin1StringView(me.valueToKey(font.weight()));
+ fnt->setElementFontWeight(ws);
+ }
+ break;
+ }
+ }
+ if ((mask & (QFont::FamilyResolved | QFont::FamiliesResolved)) != 0)
fnt->setElementFamily(font.family());
if (mask & QFont::StyleResolved)
fnt->setElementItalic(font.italic());
@@ -462,42 +471,47 @@ static bool applySimpleProperty(const QVariant &v, bool translateString, DomProp
fnt->setElementKerning(font.kerning());
if (mask & QFont::StyleStrategyResolved) {
const QMetaEnum styleStrategy_enum = metaEnum<QAbstractFormBuilderGadget>("styleStrategy");
- fnt->setElementStyleStrategy(QLatin1String(styleStrategy_enum.valueToKey(font.styleStrategy())));
+ fnt->setElementStyleStrategy(QLatin1StringView(styleStrategy_enum.valueToKey(font.styleStrategy())));
+ }
+ if (mask & QFont::HintingPreferenceResolved) {
+ const QMetaEnum hintingPreference_enum = metaEnum<QAbstractFormBuilderGadget>("hintingPreference");
+ fnt->setElementHintingPreference(QLatin1StringView(hintingPreference_enum.valueToKey(font.hintingPreference())));
}
+
dom_prop->setElementFont(fnt);
}
return true;
#if QT_CONFIG(cursor)
- case QVariant::Cursor: {
+ case QMetaType::QCursor: {
const QMetaEnum cursorShape_enum = metaEnum<QAbstractFormBuilderGadget>("cursorShape");
- dom_prop->setElementCursorShape(QLatin1String(cursorShape_enum.valueToKey(qvariant_cast<QCursor>(v).shape())));
+ dom_prop->setElementCursorShape(QLatin1StringView(cursorShape_enum.valueToKey(qvariant_cast<QCursor>(v).shape())));
}
return true;
#endif
- case QVariant::KeySequence: {
+ case QMetaType::QKeySequence: {
DomString *s = new DomString();
s->setText(qvariant_cast<QKeySequence>(v).toString(QKeySequence::PortableText));
dom_prop->setElementString(s);
}
return true;
- case QVariant::Locale: {
+ case QMetaType::QLocale: {
DomLocale *dom = new DomLocale();
const QLocale locale = qvariant_cast<QLocale>(v);
const QMetaEnum language_enum = metaEnum<QAbstractFormBuilderGadget>("language");
- const QMetaEnum country_enum = metaEnum<QAbstractFormBuilderGadget>("country");
+ const QMetaEnum territory_enum = metaEnum<QAbstractFormBuilderGadget>("country");
- dom->setAttributeLanguage(QLatin1String(language_enum.valueToKey(locale.language())));
- dom->setAttributeCountry(QLatin1String(country_enum.valueToKey(locale.country())));
+ dom->setAttributeLanguage(QLatin1StringView(language_enum.valueToKey(locale.language())));
+ dom->setAttributeCountry(QLatin1StringView(territory_enum.valueToKey(locale.territory())));
dom_prop->setElementLocale(dom);
}
return true;
- case QVariant::SizePolicy: {
+ case QMetaType::QSizePolicy: {
DomSizePolicy *dom = new DomSizePolicy();
const QSizePolicy sizePolicy = qvariant_cast<QSizePolicy>(v);
@@ -506,14 +520,14 @@ static bool applySimpleProperty(const QVariant &v, bool translateString, DomProp
const QMetaEnum sizeType_enum = metaEnum<QAbstractFormBuilderGadget>("sizeType");
- dom->setAttributeHSizeType(QLatin1String(sizeType_enum.valueToKey(sizePolicy.horizontalPolicy())));
- dom->setAttributeVSizeType(QLatin1String(sizeType_enum.valueToKey(sizePolicy.verticalPolicy())));
+ dom->setAttributeHSizeType(QLatin1StringView(sizeType_enum.valueToKey(sizePolicy.horizontalPolicy())));
+ dom->setAttributeVSizeType(QLatin1StringView(sizeType_enum.valueToKey(sizePolicy.verticalPolicy())));
dom_prop->setElementSizePolicy(dom);
}
return true;
- case QVariant::Date: {
+ case QMetaType::QDate: {
DomDate *dom = new DomDate();
const QDate date = qvariant_cast<QDate>(v);
@@ -525,7 +539,7 @@ static bool applySimpleProperty(const QVariant &v, bool translateString, DomProp
}
return true;
- case QVariant::Time: {
+ case QMetaType::QTime: {
DomTime *dom = new DomTime();
const QTime time = qvariant_cast<QTime>(v);
@@ -537,7 +551,7 @@ static bool applySimpleProperty(const QVariant &v, bool translateString, DomProp
}
return true;
- case QVariant::DateTime: {
+ case QMetaType::QDateTime: {
DomDateTime *dom = new DomDateTime();
const QDateTime dateTime = qvariant_cast<QDateTime>(v);
@@ -552,7 +566,7 @@ static bool applySimpleProperty(const QVariant &v, bool translateString, DomProp
}
return true;
- case QVariant::Url: {
+ case QMetaType::QUrl: {
DomUrl *dom = new DomUrl();
const QUrl url = v.toUrl();
@@ -564,7 +578,7 @@ static bool applySimpleProperty(const QVariant &v, bool translateString, DomProp
}
return true;
- case QVariant::StringList: {
+ case QMetaType::QStringList: {
DomStringList *sl = new DomStringList;
sl->setElementString(qvariant_cast<QStringList>(v));
dom_prop->setElementStringList(sl);
@@ -580,7 +594,7 @@ static bool applySimpleProperty(const QVariant &v, bool translateString, DomProp
static QString msgCannotWriteProperty(const QString &pname, const QVariant &v)
{
return QCoreApplication::translate("QFormBuilder", "The property %1 could not be written. The type %2 is not supported yet.").
- arg(pname).arg(QLatin1String(v.typeName()));
+ arg(pname).arg(QLatin1StringView(v.typeName()));
}
@@ -595,11 +609,12 @@ static bool isOfType(const QMetaObject *what, const QMetaObject *type)
static bool isTranslatable(const QString &pname, const QVariant &v, const QMetaObject *meta)
{
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
- if (pname == strings.objectNameProperty)
+ if (pname == "objectName"_L1)
return false;
- if (pname == strings.styleSheetProperty && v.type() == QVariant::String && isOfType(meta, &QWidget::staticMetaObject))
+ if (pname == "styleSheet"_L1 && v.metaType().id() == QMetaType::QString
+ && isOfType(meta, &QWidget::staticMetaObject)) {
return false;
+ }
return true;
}
@@ -608,15 +623,13 @@ static bool isTranslatable(const QString &pname, const QVariant &v, const QMetaO
DomProperty *variantToDomProperty(QAbstractFormBuilder *afb, const QMetaObject *meta,
const QString &pname, const QVariant &v)
{
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
-
DomProperty *dom_prop = new DomProperty();
dom_prop->setAttributeName(pname);
const int pindex = meta->indexOfProperty(pname.toLatin1());
if (pindex != -1) {
QMetaProperty meta_property = meta->property(pindex);
- if ((v.type() == QVariant::Int || v.type() == QVariant::UInt) && meta_property.isEnumType()) {
+ if ((v.metaType().id() == QMetaType::Int || v.metaType().id() == QMetaType::UInt) && meta_property.isEnumType()) {
const QMetaEnum e = meta_property.enumerator();
if (e.isFlag())
dom_prop->setElementSet(QString::fromLatin1(e.valueToKeys(v.toInt())));
@@ -624,8 +637,11 @@ DomProperty *variantToDomProperty(QAbstractFormBuilder *afb, const QMetaObject *
dom_prop->setElementEnum(QString::fromLatin1(e.valueToKey(v.toInt())));
return dom_prop;
}
- if (!meta_property.hasStdCppSet() || (isOfType(meta, &QAbstractScrollArea::staticMetaObject) && pname == strings.cursorProperty))
+ if (!meta_property.hasStdCppSet()
+ || (isOfType(meta, &QAbstractScrollArea::staticMetaObject)
+ && pname == "cursor"_L1)) {
dom_prop->setAttributeStdset(0);
+ }
}
// Try simple properties
@@ -633,8 +649,8 @@ DomProperty *variantToDomProperty(QAbstractFormBuilder *afb, const QMetaObject *
return dom_prop;
// Complex properties
- switch (v.type()) {
- case QVariant::Palette: {
+ switch (v.metaType().id()) {
+ case QMetaType::QPalette: {
DomPalette *dom = new DomPalette();
QPalette palette = qvariant_cast<QPalette>(v);
@@ -649,7 +665,7 @@ DomProperty *variantToDomProperty(QAbstractFormBuilder *afb, const QMetaObject *
dom_prop->setElementPalette(dom);
} break;
- case QVariant::Brush:
+ case QMetaType::QBrush:
dom_prop->setElementBrush(afb->saveBrush(qvariant_cast<QBrush>(v)));
break;
default: {
diff --git a/src/designer/src/lib/uilib/properties_p.h b/src/designer/src/lib/uilib/properties_p.h
index 7fa8e052f..3b94253a4 100644
--- a/src/designer/src/lib/uilib/properties_p.h
+++ b/src/designer/src/lib/uilib/properties_p.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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
//
// W A R N I N G
@@ -91,6 +55,8 @@ class QAbstractFormBuilderGadget: public QWidget
Q_PROPERTY(QPalette::ColorRole colorRole READ fakeColorRole)
Q_PROPERTY(QPalette::ColorGroup colorGroup READ fakeColorGroup)
Q_PROPERTY(QFont::StyleStrategy styleStrategy READ fakeStyleStrategy)
+ Q_PROPERTY(QFont::HintingPreference hintingPreference READ fakeHintingPreference)
+ Q_PROPERTY(QFont::Weight fontWeight READ fakeFontWeight)
Q_PROPERTY(Qt::CursorShape cursorShape READ fakeCursorShape)
Q_PROPERTY(Qt::BrushStyle brushStyle READ fakeBrushStyle)
Q_PROPERTY(Qt::ToolBarArea toolBarArea READ fakeToolBarArea)
@@ -107,6 +73,8 @@ public:
QPalette::ColorGroup fakeColorGroup() const { Q_ASSERT(0); return static_cast<QPalette::ColorGroup>(0); }
QPalette::ColorRole fakeColorRole() const { Q_ASSERT(0); return static_cast<QPalette::ColorRole>(0); }
QFont::StyleStrategy fakeStyleStrategy() const { Q_ASSERT(0); return QFont::PreferDefault; }
+ QFont::HintingPreference fakeHintingPreference() const { Q_ASSERT(0); return QFont::PreferDefaultHinting; }
+ QFont::Weight fakeFontWeight() const { Q_ASSERT(0); return QFont::Weight::Normal; }
Qt::CursorShape fakeCursorShape() const { Q_ASSERT(0); return Qt::ArrowCursor; }
Qt::BrushStyle fakeBrushStyle() const { Q_ASSERT(0); return Qt::NoBrush; }
Qt::ToolBarArea fakeToolBarArea() const { Q_ASSERT(0); return Qt::NoToolBarArea; }
@@ -128,7 +96,7 @@ inline EnumType enumKeyToValue(const QMetaEnum &metaEnum,const char *key, const
if (val == -1) {
uiLibWarning(QCoreApplication::translate("QFormBuilder", "The enumeration-value '%1' is invalid. The default value '%2' will be used instead.")
- .arg(QString::fromUtf8(key)).arg(QString::fromUtf8(metaEnum.key(0))));
+ .arg(QString::fromUtf8(key), QString::fromUtf8(metaEnum.key(0))));
val = metaEnum.value(0);
}
return static_cast<EnumType>(val);
diff --git a/src/designer/src/lib/uilib/resourcebuilder.cpp b/src/designer/src/lib/uilib/resourcebuilder.cpp
index 78960fce8..5afd25439 100644
--- a/src/designer/src/lib/uilib/resourcebuilder.cpp
+++ b/src/designer/src/lib/uilib/resourcebuilder.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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 "resourcebuilder_p.h"
#include "ui4_p.h"
@@ -48,6 +12,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
#ifdef QFORMINTERNAL_NAMESPACE
namespace QFormInternal {
#endif
@@ -61,7 +27,8 @@ QResourceBuilder::~QResourceBuilder() = default;
int QResourceBuilder::iconStateFlags(const DomResourceIcon *dpi)
{
int rc = 0;
- if (dpi->hasElementNormalOff())
+ // Fix form files broken by QTBUG-115465
+ if (dpi->hasElementNormalOff() && dpi->elementNormalOff()->text() != "."_L1)
rc |= NormalOff;
if (dpi->hasElementNormalOn())
rc |= NormalOn;
@@ -92,11 +59,17 @@ QVariant QResourceBuilder::loadResource(const QDir &workingDirectory, const DomP
const DomResourceIcon *dpi = property->elementIconSet();
if (!dpi->attributeTheme().isEmpty()) {
const QString theme = dpi->attributeTheme();
+ const qsizetype themeEnum = theme.at(0).isUpper()
+ ? themeIconNames().indexOf(theme) : -1;
+ if (themeEnum != -1) {
+ const auto themeEnumE = static_cast<QIcon::ThemeIcon>(themeEnum);
+ return QVariant::fromValue(QIcon::fromTheme(themeEnumE));
+ }
const bool known = QIcon::hasThemeIcon(theme);
if (themeDebug)
qDebug("Theme %s known %d", qPrintable(theme), known);
if (known)
- return QVariant::fromValue(QIcon::fromTheme(dpi->attributeTheme()));
+ return QVariant::fromValue(QIcon::fromTheme(theme));
} // non-empty theme
if (const int flags = iconStateFlags(dpi)) { // new, post 4.4 format
QIcon icon;
@@ -155,9 +128,9 @@ bool QResourceBuilder::isResourceProperty(const DomProperty *p) const
bool QResourceBuilder::isResourceType(const QVariant &value) const
{
- switch (value.type()) {
- case QVariant::Pixmap:
- case QVariant::Icon:
+ switch (value.metaType().id()) {
+ case QMetaType::QPixmap:
+ case QMetaType::QIcon:
return true;
default:
break;
@@ -165,6 +138,96 @@ bool QResourceBuilder::isResourceType(const QVariant &value) const
return false;
}
+const QStringList &QResourceBuilder::themeIconNames()
+{
+ static const QStringList result = {
+ "AddressBookNew"_L1, "ApplicationExit"_L1, "AppointmentNew"_L1,
+ "CallStart"_L1, "CallStop"_L1, "ContactNew"_L1,
+ "DocumentNew"_L1, "DocumentOpen"_L1, "DocumentOpenRecent"_L1,
+ "DocumentPageSetup"_L1, "DocumentPrint"_L1, "DocumentPrintPreview"_L1,
+ "DocumentProperties"_L1, "DocumentRevert"_L1, "DocumentSave"_L1,
+ "DocumentSaveAs"_L1, "DocumentSend"_L1,
+ "EditClear"_L1, "EditCopy"_L1, "EditCut"_L1, "EditDelete"_L1,
+ "EditFind"_L1, "EditPaste"_L1,
+ "EditRedo"_L1, "EditSelectAll"_L1, "EditUndo"_L1,
+ "FolderNew"_L1,
+ "FormatIndentLess"_L1, "FormatIndentMore"_L1,
+ "FormatJustifyCenter"_L1, "FormatJustifyFill"_L1,
+ "FormatJustifyLeft"_L1, "FormatJustifyRight"_L1,
+ "FormatTextDirectionLtr"_L1, "FormatTextDirectionRtl"_L1,
+ "FormatTextBold"_L1, "FormatTextItalic"_L1,
+ "FormatTextUnderline"_L1, "FormatTextStrikethrough"_L1,
+ "GoDown"_L1, "GoHome"_L1, "GoNext"_L1, "GoPrevious"_L1, "GoUp"_L1,
+ "HelpAbout"_L1, "HelpFaq"_L1,
+ "InsertImage"_L1, "InsertLink"_L1, "InsertText"_L1,
+ "ListAdd"_L1, "ListRemove"_L1,
+ "MailForward"_L1, "MailMarkImportant"_L1, "MailMarkRead"_L1, "MailMarkUnread"_L1,
+ "MailMessageNew"_L1, "MailReplyAll"_L1, "MailReplySender"_L1,
+ "MailSend"_L1,
+ "MediaEject"_L1, "MediaPlaybackPause"_L1, "MediaPlaybackStart"_L1,
+ "MediaPlaybackStop"_L1, "MediaRecord"_L1, "MediaSeekBackward"_L1,
+ "MediaSeekForward"_L1, "MediaSkipBackward"_L1,
+ "MediaSkipForward"_L1,
+ "ObjectRotateLeft"_L1, "ObjectRotateRight"_L1,
+ "ProcessStop"_L1,
+ "SystemLockScreen"_L1, "SystemLogOut"_L1,
+ "SystemSearch"_L1, "SystemReboot"_L1, "SystemShutdown"_L1,
+ "ToolsCheckSpelling"_L1,
+ "ViewFullscreen"_L1, "ViewRefresh"_L1, "ViewRestore"_L1,
+ "WindowClose"_L1, "WindowNew"_L1,
+ "ZoomFitBest"_L1, "ZoomIn"_L1, "ZoomOut"_L1,
+ "AudioCard"_L1, "AudioInputMicrophone"_L1,
+ "Battery"_L1,
+ "CameraPhoto"_L1, "CameraVideo"_L1, "CameraWeb"_L1,
+ "Computer"_L1, "DriveHarddisk"_L1, "DriveOptical"_L1,
+ "InputGaming"_L1, "InputKeyboard"_L1, "InputMouse"_L1,
+ "InputTablet"_L1,
+ "MediaFlash"_L1, "MediaOptical"_L1,
+ "MediaTape"_L1,
+ "MultimediaPlayer"_L1,
+ "NetworkWired"_L1, "NetworkWireless"_L1,
+ "Phone"_L1, "Printer"_L1, "Scanner"_L1, "VideoDisplay"_L1,
+ "AppointmentMissed"_L1, "AppointmentSoon"_L1,
+ "AudioVolumeHigh"_L1, "AudioVolumeLow"_L1, "AudioVolumeMedium"_L1,
+ "AudioVolumeMuted"_L1,
+ "BatteryCaution"_L1, "BatteryLow"_L1,
+ "DialogError"_L1, "DialogInformation"_L1, "DialogPassword"_L1,
+ "DialogQuestion"_L1, "DialogWarning"_L1,
+ "FolderDragAccept"_L1, "FolderOpen"_L1, "FolderVisiting"_L1,
+ "ImageLoading"_L1, "ImageMissing"_L1,
+ "MailAttachment"_L1, "MailUnread"_L1, "MailRead"_L1,
+ "MailReplied"_L1,
+ "MediaPlaylistRepeat"_L1, "MediaPlaylistShuffle"_L1,
+ "NetworkOffline"_L1,
+ "PrinterPrinting"_L1,
+ "SecurityHigh"_L1, "SecurityLow"_L1,
+ "SoftwareUpdateAvailable"_L1, "SoftwareUpdateUrgent"_L1,
+ "SyncError"_L1, "SyncSynchronizing"_L1,
+ "UserAvailable"_L1,
+ "UserOffline"_L1,
+ "WeatherClear"_L1, "WeatherClearNight"_L1, "WeatherFewClouds"_L1,
+ "WeatherFewCloudsNight"_L1, "WeatherFog"_L1, "WeatherShowers"_L1,
+ "WeatherSnow"_L1, "WeatherStorm"_L1
+ };
+
+ return result;
+};
+
+int QResourceBuilder::themeIconIndex(QStringView name)
+{
+ const auto lastQual = name.lastIndexOf("::"_L1);
+ const auto result = lastQual != -1
+ ? themeIconNames().indexOf(name.sliced(lastQual + 2))
+ : themeIconNames().indexOf(name);
+ return int(result);
+}
+
+QString QResourceBuilder::fullyQualifiedThemeIconName(int i)
+{
+ return i >= 0 && i < themeIconNames().size()
+ ? "QIcon::ThemeIcon::"_L1 + themeIconNames().at(i) : QString{};
+}
+
#ifdef QFORMINTERNAL_NAMESPACE
} // namespace QFormInternal
#endif
diff --git a/src/designer/src/lib/uilib/resourcebuilder_p.h b/src/designer/src/lib/uilib/resourcebuilder_p.h
index a5fb6b37c..721a92541 100644
--- a/src/designer/src/lib/uilib/resourcebuilder_p.h
+++ b/src/designer/src/lib/uilib/resourcebuilder_p.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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 RESOURCEBUILDER_H
#define RESOURCEBUILDER_H
@@ -79,6 +43,11 @@ public:
QResourceBuilder();
virtual ~QResourceBuilder();
+ // Icon names matching QIcon::ThemeIcon
+ static const QStringList &themeIconNames();
+ static int themeIconIndex(QStringView name);
+ static QString fullyQualifiedThemeIconName(int i);
+
virtual QVariant loadResource(const QDir &workingDirectory, const DomProperty *property) const;
virtual QVariant toNativeValue(const QVariant &value) const;
diff --git a/src/designer/src/lib/uilib/textbuilder.cpp b/src/designer/src/lib/uilib/textbuilder.cpp
index 96d453ee3..b2bd20008 100644
--- a/src/designer/src/lib/uilib/textbuilder.cpp
+++ b/src/designer/src/lib/uilib/textbuilder.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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 "textbuilder_p.h"
#include "ui4_p.h"
diff --git a/src/designer/src/lib/uilib/textbuilder_p.h b/src/designer/src/lib/uilib/textbuilder_p.h
index 7944c6f7e..541c4583d 100644
--- a/src/designer/src/lib/uilib/textbuilder_p.h
+++ b/src/designer/src/lib/uilib/textbuilder_p.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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 TEXTBUILDER_H
#define TEXTBUILDER_H
diff --git a/src/designer/src/lib/uilib/ui4.cpp b/src/designer/src/lib/uilib/ui4.cpp
index 1a3738ce1..fcff2ea9d 100644
--- a/src/designer/src/lib/uilib/ui4.cpp
+++ b/src/designer/src/lib/uilib/ui4.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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
// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT!
@@ -43,6 +7,9 @@
QT_BEGIN_NAMESPACE
+
+using namespace Qt::StringLiterals;
+
#ifdef QFORMINTERNAL_NAMESPACE
using namespace QFormInternal;
#endif
@@ -71,133 +38,133 @@ void DomUI::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("version")) {
+ if (name == u"version"_s) {
setAttributeVersion(attribute.value().toString());
continue;
}
- if (name == QLatin1String("language")) {
+ if (name == u"language"_s) {
setAttributeLanguage(attribute.value().toString());
continue;
}
- if (name == QLatin1String("displayname")) {
+ if (name == u"displayname"_s) {
setAttributeDisplayname(attribute.value().toString());
continue;
}
- if (name == QLatin1String("idbasedtr")) {
- setAttributeIdbasedtr(attribute.value() == QLatin1String("true"));
+ if (name == u"idbasedtr"_s) {
+ setAttributeIdbasedtr(attribute.value() == u"true"_s);
continue;
}
- if (name == QLatin1String("connectslotsbyname")) {
- setAttributeConnectslotsbyname(attribute.value() == QLatin1String("true"));
+ if (name == u"connectslotsbyname"_s) {
+ setAttributeConnectslotsbyname(attribute.value() == u"true"_s);
continue;
}
- if (name == QLatin1String("stdsetdef")) {
+ if (name == u"stdsetdef"_s) {
setAttributeStdsetdef(attribute.value().toInt());
continue;
}
- if (name == QLatin1String("stdSetDef")) {
+ if (name == u"stdSetDef"_s) {
setAttributeStdSetDef(attribute.value().toInt());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("author"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"author"_s, Qt::CaseInsensitive)) {
setElementAuthor(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("comment"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"comment"_s, Qt::CaseInsensitive)) {
setElementComment(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("exportmacro"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"exportmacro"_s, Qt::CaseInsensitive)) {
setElementExportMacro(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("class"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"class"_s, Qt::CaseInsensitive)) {
setElementClass(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("widget"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"widget"_s, Qt::CaseInsensitive)) {
auto *v = new DomWidget();
v->read(reader);
setElementWidget(v);
continue;
}
- if (!tag.compare(QLatin1String("layoutdefault"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"layoutdefault"_s, Qt::CaseInsensitive)) {
auto *v = new DomLayoutDefault();
v->read(reader);
setElementLayoutDefault(v);
continue;
}
- if (!tag.compare(QLatin1String("layoutfunction"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"layoutfunction"_s, Qt::CaseInsensitive)) {
auto *v = new DomLayoutFunction();
v->read(reader);
setElementLayoutFunction(v);
continue;
}
- if (!tag.compare(QLatin1String("pixmapfunction"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"pixmapfunction"_s, Qt::CaseInsensitive)) {
setElementPixmapFunction(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("customwidgets"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"customwidgets"_s, Qt::CaseInsensitive)) {
auto *v = new DomCustomWidgets();
v->read(reader);
setElementCustomWidgets(v);
continue;
}
- if (!tag.compare(QLatin1String("tabstops"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"tabstops"_s, Qt::CaseInsensitive)) {
auto *v = new DomTabStops();
v->read(reader);
setElementTabStops(v);
continue;
}
- if (!tag.compare(QLatin1String("images"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"images"_s, Qt::CaseInsensitive)) {
qWarning("Omitting deprecated element <images>.");
reader.skipCurrentElement();
continue;
}
- if (!tag.compare(QLatin1String("includes"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"includes"_s, Qt::CaseInsensitive)) {
auto *v = new DomIncludes();
v->read(reader);
setElementIncludes(v);
continue;
}
- if (!tag.compare(QLatin1String("resources"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"resources"_s, Qt::CaseInsensitive)) {
auto *v = new DomResources();
v->read(reader);
setElementResources(v);
continue;
}
- if (!tag.compare(QLatin1String("connections"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"connections"_s, Qt::CaseInsensitive)) {
auto *v = new DomConnections();
v->read(reader);
setElementConnections(v);
continue;
}
- if (!tag.compare(QLatin1String("designerdata"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"designerdata"_s, Qt::CaseInsensitive)) {
auto *v = new DomDesignerData();
v->read(reader);
setElementDesignerdata(v);
continue;
}
- if (!tag.compare(QLatin1String("slots"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"slots"_s, Qt::CaseInsensitive)) {
auto *v = new DomSlots();
v->read(reader);
setElementSlots(v);
continue;
}
- if (!tag.compare(QLatin1String("buttongroups"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"buttongroups"_s, Qt::CaseInsensitive)) {
auto *v = new DomButtonGroups();
v->read(reader);
setElementButtonGroups(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -213,73 +180,73 @@ void DomUI::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("ui") : tagName.toLower());
if (hasAttributeVersion())
- writer.writeAttribute(QStringLiteral("version"), attributeVersion());
+ writer.writeAttribute(u"version"_s, attributeVersion());
if (hasAttributeLanguage())
- writer.writeAttribute(QStringLiteral("language"), attributeLanguage());
+ writer.writeAttribute(u"language"_s, attributeLanguage());
if (hasAttributeDisplayname())
- writer.writeAttribute(QStringLiteral("displayname"), attributeDisplayname());
+ writer.writeAttribute(u"displayname"_s, attributeDisplayname());
if (hasAttributeIdbasedtr())
- writer.writeAttribute(QStringLiteral("idbasedtr"), (attributeIdbasedtr() ? QLatin1String("true") : QLatin1String("false")));
+ writer.writeAttribute(u"idbasedtr"_s, (attributeIdbasedtr() ? u"true"_s : u"false"_s));
if (hasAttributeConnectslotsbyname())
- writer.writeAttribute(QStringLiteral("connectslotsbyname"), (attributeConnectslotsbyname() ? QLatin1String("true") : QLatin1String("false")));
+ writer.writeAttribute(u"connectslotsbyname"_s, (attributeConnectslotsbyname() ? u"true"_s : u"false"_s));
if (hasAttributeStdsetdef())
- writer.writeAttribute(QStringLiteral("stdsetdef"), QString::number(attributeStdsetdef()));
+ writer.writeAttribute(u"stdsetdef"_s, QString::number(attributeStdsetdef()));
if (hasAttributeStdSetDef())
- writer.writeAttribute(QStringLiteral("stdsetdef"), QString::number(attributeStdSetDef()));
+ writer.writeAttribute(u"stdsetdef"_s, QString::number(attributeStdSetDef()));
if (m_children & Author)
- writer.writeTextElement(QStringLiteral("author"), m_author);
+ writer.writeTextElement(u"author"_s, m_author);
if (m_children & Comment)
- writer.writeTextElement(QStringLiteral("comment"), m_comment);
+ writer.writeTextElement(u"comment"_s, m_comment);
if (m_children & ExportMacro)
- writer.writeTextElement(QStringLiteral("exportmacro"), m_exportMacro);
+ writer.writeTextElement(u"exportmacro"_s, m_exportMacro);
if (m_children & Class)
- writer.writeTextElement(QStringLiteral("class"), m_class);
+ writer.writeTextElement(u"class"_s, m_class);
if (m_children & Widget)
- m_widget->write(writer, QStringLiteral("widget"));
+ m_widget->write(writer, u"widget"_s);
if (m_children & LayoutDefault)
- m_layoutDefault->write(writer, QStringLiteral("layoutdefault"));
+ m_layoutDefault->write(writer, u"layoutdefault"_s);
if (m_children & LayoutFunction)
- m_layoutFunction->write(writer, QStringLiteral("layoutfunction"));
+ m_layoutFunction->write(writer, u"layoutfunction"_s);
if (m_children & PixmapFunction)
- writer.writeTextElement(QStringLiteral("pixmapfunction"), m_pixmapFunction);
+ writer.writeTextElement(u"pixmapfunction"_s, m_pixmapFunction);
if (m_children & CustomWidgets)
- m_customWidgets->write(writer, QStringLiteral("customwidgets"));
+ m_customWidgets->write(writer, u"customwidgets"_s);
if (m_children & TabStops)
- m_tabStops->write(writer, QStringLiteral("tabstops"));
+ m_tabStops->write(writer, u"tabstops"_s);
if (m_children & Includes)
- m_includes->write(writer, QStringLiteral("includes"));
+ m_includes->write(writer, u"includes"_s);
if (m_children & Resources)
- m_resources->write(writer, QStringLiteral("resources"));
+ m_resources->write(writer, u"resources"_s);
if (m_children & Connections)
- m_connections->write(writer, QStringLiteral("connections"));
+ m_connections->write(writer, u"connections"_s);
if (m_children & Designerdata)
- m_designerdata->write(writer, QStringLiteral("designerdata"));
+ m_designerdata->write(writer, u"designerdata"_s);
if (m_children & Slots)
- m_slots->write(writer, QStringLiteral("slots"));
+ m_slots->write(writer, u"slots"_s);
if (m_children & ButtonGroups)
- m_buttonGroups->write(writer, QStringLiteral("buttongroups"));
+ m_buttonGroups->write(writer, u"buttongroups"_s);
writer.writeEndElement();
}
@@ -593,13 +560,13 @@ void DomIncludes::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("include"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"include"_s, Qt::CaseInsensitive)) {
auto *v = new DomInclude();
v->read(reader);
m_include.append(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -615,7 +582,7 @@ void DomIncludes::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("includes") : tagName.toLower());
for (DomInclude *v : m_include)
- v->write(writer, QStringLiteral("include"));
+ v->write(writer, u"include"_s);
writer.writeEndElement();
}
@@ -633,22 +600,22 @@ void DomInclude::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("location")) {
+ if (name == u"location"_s) {
setAttributeLocation(attribute.value().toString());
continue;
}
- if (name == QLatin1String("impldecl")) {
+ if (name == u"impldecl"_s) {
setAttributeImpldecl(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -668,10 +635,10 @@ void DomInclude::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("include") : tagName.toLower());
if (hasAttributeLocation())
- writer.writeAttribute(QStringLiteral("location"), attributeLocation());
+ writer.writeAttribute(u"location"_s, attributeLocation());
if (hasAttributeImpldecl())
- writer.writeAttribute(QStringLiteral("impldecl"), attributeImpldecl());
+ writer.writeAttribute(u"impldecl"_s, attributeImpldecl());
if (!m_text.isEmpty())
writer.writeCharacters(m_text);
@@ -690,24 +657,24 @@ void DomResources::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("name")) {
+ if (name == u"name"_s) {
setAttributeName(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("include"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"include"_s, Qt::CaseInsensitive)) {
auto *v = new DomResource();
v->read(reader);
m_include.append(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -723,10 +690,10 @@ void DomResources::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("resources") : tagName.toLower());
if (hasAttributeName())
- writer.writeAttribute(QStringLiteral("name"), attributeName());
+ writer.writeAttribute(u"name"_s, attributeName());
for (DomResource *v : m_include)
- v->write(writer, QStringLiteral("include"));
+ v->write(writer, u"include"_s);
writer.writeEndElement();
}
@@ -744,18 +711,18 @@ void DomResource::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("location")) {
+ if (name == u"location"_s) {
setAttributeLocation(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -771,7 +738,7 @@ void DomResource::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("resource") : tagName.toLower());
if (hasAttributeLocation())
- writer.writeAttribute(QStringLiteral("location"), attributeLocation());
+ writer.writeAttribute(u"location"_s, attributeLocation());
writer.writeEndElement();
}
@@ -793,42 +760,42 @@ void DomActionGroup::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("name")) {
+ if (name == u"name"_s) {
setAttributeName(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("action"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"action"_s, Qt::CaseInsensitive)) {
auto *v = new DomAction();
v->read(reader);
m_action.append(v);
continue;
}
- if (!tag.compare(QLatin1String("actiongroup"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"actiongroup"_s, Qt::CaseInsensitive)) {
auto *v = new DomActionGroup();
v->read(reader);
m_actionGroup.append(v);
continue;
}
- if (!tag.compare(QLatin1String("property"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"property"_s, Qt::CaseInsensitive)) {
auto *v = new DomProperty();
v->read(reader);
m_property.append(v);
continue;
}
- if (!tag.compare(QLatin1String("attribute"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"attribute"_s, Qt::CaseInsensitive)) {
auto *v = new DomProperty();
v->read(reader);
m_attribute.append(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -844,19 +811,19 @@ void DomActionGroup::write(QXmlStreamWriter &writer, const QString &tagName) con
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("actiongroup") : tagName.toLower());
if (hasAttributeName())
- writer.writeAttribute(QStringLiteral("name"), attributeName());
+ writer.writeAttribute(u"name"_s, attributeName());
for (DomAction *v : m_action)
- v->write(writer, QStringLiteral("action"));
+ v->write(writer, u"action"_s);
for (DomActionGroup *v : m_actionGroup)
- v->write(writer, QStringLiteral("actiongroup"));
+ v->write(writer, u"actiongroup"_s);
for (DomProperty *v : m_property)
- v->write(writer, QStringLiteral("property"));
+ v->write(writer, u"property"_s);
for (DomProperty *v : m_attribute)
- v->write(writer, QStringLiteral("attribute"));
+ v->write(writer, u"attribute"_s);
writer.writeEndElement();
}
@@ -898,34 +865,34 @@ void DomAction::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("name")) {
+ if (name == u"name"_s) {
setAttributeName(attribute.value().toString());
continue;
}
- if (name == QLatin1String("menu")) {
+ if (name == u"menu"_s) {
setAttributeMenu(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("property"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"property"_s, Qt::CaseInsensitive)) {
auto *v = new DomProperty();
v->read(reader);
m_property.append(v);
continue;
}
- if (!tag.compare(QLatin1String("attribute"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"attribute"_s, Qt::CaseInsensitive)) {
auto *v = new DomProperty();
v->read(reader);
m_attribute.append(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -941,16 +908,16 @@ void DomAction::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("action") : tagName.toLower());
if (hasAttributeName())
- writer.writeAttribute(QStringLiteral("name"), attributeName());
+ writer.writeAttribute(u"name"_s, attributeName());
if (hasAttributeMenu())
- writer.writeAttribute(QStringLiteral("menu"), attributeMenu());
+ writer.writeAttribute(u"menu"_s, attributeMenu());
for (DomProperty *v : m_property)
- v->write(writer, QStringLiteral("property"));
+ v->write(writer, u"property"_s);
for (DomProperty *v : m_attribute)
- v->write(writer, QStringLiteral("attribute"));
+ v->write(writer, u"attribute"_s);
writer.writeEndElement();
}
@@ -974,18 +941,18 @@ void DomActionRef::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("name")) {
+ if (name == u"name"_s) {
setAttributeName(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -1001,7 +968,7 @@ void DomActionRef::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("actionref") : tagName.toLower());
if (hasAttributeName())
- writer.writeAttribute(QStringLiteral("name"), attributeName());
+ writer.writeAttribute(u"name"_s, attributeName());
writer.writeEndElement();
}
@@ -1019,30 +986,30 @@ void DomButtonGroup::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("name")) {
+ if (name == u"name"_s) {
setAttributeName(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("property"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"property"_s, Qt::CaseInsensitive)) {
auto *v = new DomProperty();
v->read(reader);
m_property.append(v);
continue;
}
- if (!tag.compare(QLatin1String("attribute"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"attribute"_s, Qt::CaseInsensitive)) {
auto *v = new DomProperty();
v->read(reader);
m_attribute.append(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -1058,13 +1025,13 @@ void DomButtonGroup::write(QXmlStreamWriter &writer, const QString &tagName) con
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("buttongroup") : tagName.toLower());
if (hasAttributeName())
- writer.writeAttribute(QStringLiteral("name"), attributeName());
+ writer.writeAttribute(u"name"_s, attributeName());
for (DomProperty *v : m_property)
- v->write(writer, QStringLiteral("property"));
+ v->write(writer, u"property"_s);
for (DomProperty *v : m_attribute)
- v->write(writer, QStringLiteral("attribute"));
+ v->write(writer, u"attribute"_s);
writer.writeEndElement();
}
@@ -1093,13 +1060,13 @@ void DomButtonGroups::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("buttongroup"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"buttongroup"_s, Qt::CaseInsensitive)) {
auto *v = new DomButtonGroup();
v->read(reader);
m_buttonGroup.append(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -1115,7 +1082,7 @@ void DomButtonGroups::write(QXmlStreamWriter &writer, const QString &tagName) co
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("buttongroups") : tagName.toLower());
for (DomButtonGroup *v : m_buttonGroup)
- v->write(writer, QStringLiteral("buttongroup"));
+ v->write(writer, u"buttongroup"_s);
writer.writeEndElement();
}
@@ -1138,13 +1105,13 @@ void DomCustomWidgets::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("customwidget"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"customwidget"_s, Qt::CaseInsensitive)) {
auto *v = new DomCustomWidget();
v->read(reader);
m_customWidget.append(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -1160,7 +1127,7 @@ void DomCustomWidgets::write(QXmlStreamWriter &writer, const QString &tagName) c
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("customwidgets") : tagName.toLower());
for (DomCustomWidget *v : m_customWidget)
- v->write(writer, QStringLiteral("customwidget"));
+ v->write(writer, u"customwidget"_s);
writer.writeEndElement();
}
@@ -1178,18 +1145,18 @@ void DomHeader::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("location")) {
+ if (name == u"location"_s) {
setAttributeLocation(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -1209,7 +1176,7 @@ void DomHeader::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("header") : tagName.toLower());
if (hasAttributeLocation())
- writer.writeAttribute(QStringLiteral("location"), attributeLocation());
+ writer.writeAttribute(u"location"_s, attributeLocation());
if (!m_text.isEmpty())
writer.writeCharacters(m_text);
@@ -1231,66 +1198,66 @@ void DomCustomWidget::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("class"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"class"_s, Qt::CaseInsensitive)) {
setElementClass(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("extends"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"extends"_s, Qt::CaseInsensitive)) {
setElementExtends(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("header"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"header"_s, Qt::CaseInsensitive)) {
auto *v = new DomHeader();
v->read(reader);
setElementHeader(v);
continue;
}
- if (!tag.compare(QLatin1String("sizehint"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"sizehint"_s, Qt::CaseInsensitive)) {
auto *v = new DomSize();
v->read(reader);
setElementSizeHint(v);
continue;
}
- if (!tag.compare(QLatin1String("addpagemethod"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"addpagemethod"_s, Qt::CaseInsensitive)) {
setElementAddPageMethod(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("container"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"container"_s, Qt::CaseInsensitive)) {
setElementContainer(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("sizepolicy"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"sizepolicy"_s, Qt::CaseInsensitive)) {
qWarning("Omitting deprecated element <sizepolicy>.");
reader.skipCurrentElement();
continue;
}
- if (!tag.compare(QLatin1String("pixmap"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"pixmap"_s, Qt::CaseInsensitive)) {
setElementPixmap(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("script"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"script"_s, Qt::CaseInsensitive)) {
qWarning("Omitting deprecated element <script>.");
reader.skipCurrentElement();
continue;
}
- if (!tag.compare(QLatin1String("properties"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"properties"_s, Qt::CaseInsensitive)) {
qWarning("Omitting deprecated element <properties>.");
reader.skipCurrentElement();
continue;
}
- if (!tag.compare(QLatin1String("slots"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"slots"_s, Qt::CaseInsensitive)) {
auto *v = new DomSlots();
v->read(reader);
setElementSlots(v);
continue;
}
- if (!tag.compare(QLatin1String("propertyspecifications"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"propertyspecifications"_s, Qt::CaseInsensitive)) {
auto *v = new DomPropertySpecifications();
v->read(reader);
setElementPropertyspecifications(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -1306,31 +1273,31 @@ void DomCustomWidget::write(QXmlStreamWriter &writer, const QString &tagName) co
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("customwidget") : tagName.toLower());
if (m_children & Class)
- writer.writeTextElement(QStringLiteral("class"), m_class);
+ writer.writeTextElement(u"class"_s, m_class);
if (m_children & Extends)
- writer.writeTextElement(QStringLiteral("extends"), m_extends);
+ writer.writeTextElement(u"extends"_s, m_extends);
if (m_children & Header)
- m_header->write(writer, QStringLiteral("header"));
+ m_header->write(writer, u"header"_s);
if (m_children & SizeHint)
- m_sizeHint->write(writer, QStringLiteral("sizehint"));
+ m_sizeHint->write(writer, u"sizehint"_s);
if (m_children & AddPageMethod)
- writer.writeTextElement(QStringLiteral("addpagemethod"), m_addPageMethod);
+ writer.writeTextElement(u"addpagemethod"_s, m_addPageMethod);
if (m_children & Container)
- writer.writeTextElement(QStringLiteral("container"), QString::number(m_container));
+ writer.writeTextElement(u"container"_s, QString::number(m_container));
if (m_children & Pixmap)
- writer.writeTextElement(QStringLiteral("pixmap"), m_pixmap);
+ writer.writeTextElement(u"pixmap"_s, m_pixmap);
if (m_children & Slots)
- m_slots->write(writer, QStringLiteral("slots"));
+ m_slots->write(writer, u"slots"_s);
if (m_children & Propertyspecifications)
- m_propertyspecifications->write(writer, QStringLiteral("propertyspecifications"));
+ m_propertyspecifications->write(writer, u"propertyspecifications"_s);
writer.writeEndElement();
}
@@ -1485,22 +1452,22 @@ void DomLayoutDefault::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("spacing")) {
+ if (name == u"spacing"_s) {
setAttributeSpacing(attribute.value().toInt());
continue;
}
- if (name == QLatin1String("margin")) {
+ if (name == u"margin"_s) {
setAttributeMargin(attribute.value().toInt());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -1516,10 +1483,10 @@ void DomLayoutDefault::write(QXmlStreamWriter &writer, const QString &tagName) c
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("layoutdefault") : tagName.toLower());
if (hasAttributeSpacing())
- writer.writeAttribute(QStringLiteral("spacing"), QString::number(attributeSpacing()));
+ writer.writeAttribute(u"spacing"_s, QString::number(attributeSpacing()));
if (hasAttributeMargin())
- writer.writeAttribute(QStringLiteral("margin"), QString::number(attributeMargin()));
+ writer.writeAttribute(u"margin"_s, QString::number(attributeMargin()));
writer.writeEndElement();
}
@@ -1531,22 +1498,22 @@ void DomLayoutFunction::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("spacing")) {
+ if (name == u"spacing"_s) {
setAttributeSpacing(attribute.value().toString());
continue;
}
- if (name == QLatin1String("margin")) {
+ if (name == u"margin"_s) {
setAttributeMargin(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -1562,10 +1529,10 @@ void DomLayoutFunction::write(QXmlStreamWriter &writer, const QString &tagName)
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("layoutfunction") : tagName.toLower());
if (hasAttributeSpacing())
- writer.writeAttribute(QStringLiteral("spacing"), attributeSpacing());
+ writer.writeAttribute(u"spacing"_s, attributeSpacing());
if (hasAttributeMargin())
- writer.writeAttribute(QStringLiteral("margin"), attributeMargin());
+ writer.writeAttribute(u"margin"_s, attributeMargin());
writer.writeEndElement();
}
@@ -1581,11 +1548,11 @@ void DomTabStops::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("tabstop"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"tabstop"_s, Qt::CaseInsensitive)) {
m_tabStop.append(reader.readElementText());
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -1601,7 +1568,7 @@ void DomTabStops::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("tabstops") : tagName.toLower());
for (const QString &v : m_tabStop)
- writer.writeTextElement(QStringLiteral("tabstop"), v);
+ writer.writeTextElement(u"tabstop"_s, v);
writer.writeEndElement();
}
@@ -1627,60 +1594,60 @@ void DomLayout::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("class")) {
+ if (name == u"class"_s) {
setAttributeClass(attribute.value().toString());
continue;
}
- if (name == QLatin1String("name")) {
+ if (name == u"name"_s) {
setAttributeName(attribute.value().toString());
continue;
}
- if (name == QLatin1String("stretch")) {
+ if (name == u"stretch"_s) {
setAttributeStretch(attribute.value().toString());
continue;
}
- if (name == QLatin1String("rowstretch")) {
+ if (name == u"rowstretch"_s) {
setAttributeRowStretch(attribute.value().toString());
continue;
}
- if (name == QLatin1String("columnstretch")) {
+ if (name == u"columnstretch"_s) {
setAttributeColumnStretch(attribute.value().toString());
continue;
}
- if (name == QLatin1String("rowminimumheight")) {
+ if (name == u"rowminimumheight"_s) {
setAttributeRowMinimumHeight(attribute.value().toString());
continue;
}
- if (name == QLatin1String("columnminimumwidth")) {
+ if (name == u"columnminimumwidth"_s) {
setAttributeColumnMinimumWidth(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("property"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"property"_s, Qt::CaseInsensitive)) {
auto *v = new DomProperty();
v->read(reader);
m_property.append(v);
continue;
}
- if (!tag.compare(QLatin1String("attribute"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"attribute"_s, Qt::CaseInsensitive)) {
auto *v = new DomProperty();
v->read(reader);
m_attribute.append(v);
continue;
}
- if (!tag.compare(QLatin1String("item"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"item"_s, Qt::CaseInsensitive)) {
auto *v = new DomLayoutItem();
v->read(reader);
m_item.append(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -1696,34 +1663,34 @@ void DomLayout::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("layout") : tagName.toLower());
if (hasAttributeClass())
- writer.writeAttribute(QStringLiteral("class"), attributeClass());
+ writer.writeAttribute(u"class"_s, attributeClass());
if (hasAttributeName())
- writer.writeAttribute(QStringLiteral("name"), attributeName());
+ writer.writeAttribute(u"name"_s, attributeName());
if (hasAttributeStretch())
- writer.writeAttribute(QStringLiteral("stretch"), attributeStretch());
+ writer.writeAttribute(u"stretch"_s, attributeStretch());
if (hasAttributeRowStretch())
- writer.writeAttribute(QStringLiteral("rowstretch"), attributeRowStretch());
+ writer.writeAttribute(u"rowstretch"_s, attributeRowStretch());
if (hasAttributeColumnStretch())
- writer.writeAttribute(QStringLiteral("columnstretch"), attributeColumnStretch());
+ writer.writeAttribute(u"columnstretch"_s, attributeColumnStretch());
if (hasAttributeRowMinimumHeight())
- writer.writeAttribute(QStringLiteral("rowminimumheight"), attributeRowMinimumHeight());
+ writer.writeAttribute(u"rowminimumheight"_s, attributeRowMinimumHeight());
if (hasAttributeColumnMinimumWidth())
- writer.writeAttribute(QStringLiteral("columnminimumwidth"), attributeColumnMinimumWidth());
+ writer.writeAttribute(u"columnminimumwidth"_s, attributeColumnMinimumWidth());
for (DomProperty *v : m_property)
- v->write(writer, QStringLiteral("property"));
+ v->write(writer, u"property"_s);
for (DomProperty *v : m_attribute)
- v->write(writer, QStringLiteral("attribute"));
+ v->write(writer, u"attribute"_s);
for (DomLayoutItem *v : m_item)
- v->write(writer, QStringLiteral("item"));
+ v->write(writer, u"item"_s);
writer.writeEndElement();
}
@@ -1771,52 +1738,52 @@ void DomLayoutItem::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("row")) {
+ if (name == u"row"_s) {
setAttributeRow(attribute.value().toInt());
continue;
}
- if (name == QLatin1String("column")) {
+ if (name == u"column"_s) {
setAttributeColumn(attribute.value().toInt());
continue;
}
- if (name == QLatin1String("rowspan")) {
+ if (name == u"rowspan"_s) {
setAttributeRowSpan(attribute.value().toInt());
continue;
}
- if (name == QLatin1String("colspan")) {
+ if (name == u"colspan"_s) {
setAttributeColSpan(attribute.value().toInt());
continue;
}
- if (name == QLatin1String("alignment")) {
+ if (name == u"alignment"_s) {
setAttributeAlignment(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("widget"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"widget"_s, Qt::CaseInsensitive)) {
auto *v = new DomWidget();
v->read(reader);
setElementWidget(v);
continue;
}
- if (!tag.compare(QLatin1String("layout"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"layout"_s, Qt::CaseInsensitive)) {
auto *v = new DomLayout();
v->read(reader);
setElementLayout(v);
continue;
}
- if (!tag.compare(QLatin1String("spacer"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"spacer"_s, Qt::CaseInsensitive)) {
auto *v = new DomSpacer();
v->read(reader);
setElementSpacer(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -1832,34 +1799,34 @@ void DomLayoutItem::write(QXmlStreamWriter &writer, const QString &tagName) cons
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("layoutitem") : tagName.toLower());
if (hasAttributeRow())
- writer.writeAttribute(QStringLiteral("row"), QString::number(attributeRow()));
+ writer.writeAttribute(u"row"_s, QString::number(attributeRow()));
if (hasAttributeColumn())
- writer.writeAttribute(QStringLiteral("column"), QString::number(attributeColumn()));
+ writer.writeAttribute(u"column"_s, QString::number(attributeColumn()));
if (hasAttributeRowSpan())
- writer.writeAttribute(QStringLiteral("rowspan"), QString::number(attributeRowSpan()));
+ writer.writeAttribute(u"rowspan"_s, QString::number(attributeRowSpan()));
if (hasAttributeColSpan())
- writer.writeAttribute(QStringLiteral("colspan"), QString::number(attributeColSpan()));
+ writer.writeAttribute(u"colspan"_s, QString::number(attributeColSpan()));
if (hasAttributeAlignment())
- writer.writeAttribute(QStringLiteral("alignment"), attributeAlignment());
+ writer.writeAttribute(u"alignment"_s, attributeAlignment());
switch (kind()) {
case Widget:
if (m_widget != nullptr)
- m_widget->write(writer, QStringLiteral("widget"));
+ m_widget->write(writer, u"widget"_s);
break;
case Layout:
if (m_layout != nullptr)
- m_layout->write(writer, QStringLiteral("layout"));
+ m_layout->write(writer, u"layout"_s);
break;
case Spacer:
if (m_spacer != nullptr)
- m_spacer->write(writer, QStringLiteral("spacer"));
+ m_spacer->write(writer, u"spacer"_s);
break;
default:
@@ -1922,13 +1889,13 @@ void DomRow::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("property"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"property"_s, Qt::CaseInsensitive)) {
auto *v = new DomProperty();
v->read(reader);
m_property.append(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -1944,7 +1911,7 @@ void DomRow::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("row") : tagName.toLower());
for (DomProperty *v : m_property)
- v->write(writer, QStringLiteral("property"));
+ v->write(writer, u"property"_s);
writer.writeEndElement();
}
@@ -1967,13 +1934,13 @@ void DomColumn::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("property"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"property"_s, Qt::CaseInsensitive)) {
auto *v = new DomProperty();
v->read(reader);
m_property.append(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -1989,7 +1956,7 @@ void DomColumn::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("column") : tagName.toLower());
for (DomProperty *v : m_property)
- v->write(writer, QStringLiteral("property"));
+ v->write(writer, u"property"_s);
writer.writeEndElement();
}
@@ -2013,34 +1980,34 @@ void DomItem::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("row")) {
+ if (name == u"row"_s) {
setAttributeRow(attribute.value().toInt());
continue;
}
- if (name == QLatin1String("column")) {
+ if (name == u"column"_s) {
setAttributeColumn(attribute.value().toInt());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("property"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"property"_s, Qt::CaseInsensitive)) {
auto *v = new DomProperty();
v->read(reader);
m_property.append(v);
continue;
}
- if (!tag.compare(QLatin1String("item"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"item"_s, Qt::CaseInsensitive)) {
auto *v = new DomItem();
v->read(reader);
m_item.append(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -2056,16 +2023,16 @@ void DomItem::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("item") : tagName.toLower());
if (hasAttributeRow())
- writer.writeAttribute(QStringLiteral("row"), QString::number(attributeRow()));
+ writer.writeAttribute(u"row"_s, QString::number(attributeRow()));
if (hasAttributeColumn())
- writer.writeAttribute(QStringLiteral("column"), QString::number(attributeColumn()));
+ writer.writeAttribute(u"column"_s, QString::number(attributeColumn()));
for (DomProperty *v : m_property)
- v->write(writer, QStringLiteral("property"));
+ v->write(writer, u"property"_s);
for (DomItem *v : m_item)
- v->write(writer, QStringLiteral("item"));
+ v->write(writer, u"item"_s);
writer.writeEndElement();
}
@@ -2113,104 +2080,104 @@ void DomWidget::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("class")) {
+ if (name == u"class"_s) {
setAttributeClass(attribute.value().toString());
continue;
}
- if (name == QLatin1String("name")) {
+ if (name == u"name"_s) {
setAttributeName(attribute.value().toString());
continue;
}
- if (name == QLatin1String("native")) {
- setAttributeNative(attribute.value() == QLatin1String("true"));
+ if (name == u"native"_s) {
+ setAttributeNative(attribute.value() == u"true"_s);
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("class"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"class"_s, Qt::CaseInsensitive)) {
m_class.append(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("property"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"property"_s, Qt::CaseInsensitive)) {
auto *v = new DomProperty();
v->read(reader);
m_property.append(v);
continue;
}
- if (!tag.compare(QLatin1String("script"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"script"_s, Qt::CaseInsensitive)) {
qWarning("Omitting deprecated element <script>.");
reader.skipCurrentElement();
continue;
}
- if (!tag.compare(QLatin1String("widgetdata"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"widgetdata"_s, Qt::CaseInsensitive)) {
qWarning("Omitting deprecated element <widgetdata>.");
reader.skipCurrentElement();
continue;
}
- if (!tag.compare(QLatin1String("attribute"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"attribute"_s, Qt::CaseInsensitive)) {
auto *v = new DomProperty();
v->read(reader);
m_attribute.append(v);
continue;
}
- if (!tag.compare(QLatin1String("row"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"row"_s, Qt::CaseInsensitive)) {
auto *v = new DomRow();
v->read(reader);
m_row.append(v);
continue;
}
- if (!tag.compare(QLatin1String("column"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"column"_s, Qt::CaseInsensitive)) {
auto *v = new DomColumn();
v->read(reader);
m_column.append(v);
continue;
}
- if (!tag.compare(QLatin1String("item"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"item"_s, Qt::CaseInsensitive)) {
auto *v = new DomItem();
v->read(reader);
m_item.append(v);
continue;
}
- if (!tag.compare(QLatin1String("layout"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"layout"_s, Qt::CaseInsensitive)) {
auto *v = new DomLayout();
v->read(reader);
m_layout.append(v);
continue;
}
- if (!tag.compare(QLatin1String("widget"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"widget"_s, Qt::CaseInsensitive)) {
auto *v = new DomWidget();
v->read(reader);
m_widget.append(v);
continue;
}
- if (!tag.compare(QLatin1String("action"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"action"_s, Qt::CaseInsensitive)) {
auto *v = new DomAction();
v->read(reader);
m_action.append(v);
continue;
}
- if (!tag.compare(QLatin1String("actiongroup"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"actiongroup"_s, Qt::CaseInsensitive)) {
auto *v = new DomActionGroup();
v->read(reader);
m_actionGroup.append(v);
continue;
}
- if (!tag.compare(QLatin1String("addaction"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"addaction"_s, Qt::CaseInsensitive)) {
auto *v = new DomActionRef();
v->read(reader);
m_addAction.append(v);
continue;
}
- if (!tag.compare(QLatin1String("zorder"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"zorder"_s, Qt::CaseInsensitive)) {
m_zOrder.append(reader.readElementText());
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -2226,49 +2193,49 @@ void DomWidget::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("widget") : tagName.toLower());
if (hasAttributeClass())
- writer.writeAttribute(QStringLiteral("class"), attributeClass());
+ writer.writeAttribute(u"class"_s, attributeClass());
if (hasAttributeName())
- writer.writeAttribute(QStringLiteral("name"), attributeName());
+ writer.writeAttribute(u"name"_s, attributeName());
if (hasAttributeNative())
- writer.writeAttribute(QStringLiteral("native"), (attributeNative() ? QLatin1String("true") : QLatin1String("false")));
+ writer.writeAttribute(u"native"_s, (attributeNative() ? u"true"_s : u"false"_s));
for (const QString &v : m_class)
- writer.writeTextElement(QStringLiteral("class"), v);
+ writer.writeTextElement(u"class"_s, v);
for (DomProperty *v : m_property)
- v->write(writer, QStringLiteral("property"));
+ v->write(writer, u"property"_s);
for (DomProperty *v : m_attribute)
- v->write(writer, QStringLiteral("attribute"));
+ v->write(writer, u"attribute"_s);
for (DomRow *v : m_row)
- v->write(writer, QStringLiteral("row"));
+ v->write(writer, u"row"_s);
for (DomColumn *v : m_column)
- v->write(writer, QStringLiteral("column"));
+ v->write(writer, u"column"_s);
for (DomItem *v : m_item)
- v->write(writer, QStringLiteral("item"));
+ v->write(writer, u"item"_s);
for (DomLayout *v : m_layout)
- v->write(writer, QStringLiteral("layout"));
+ v->write(writer, u"layout"_s);
for (DomWidget *v : m_widget)
- v->write(writer, QStringLiteral("widget"));
+ v->write(writer, u"widget"_s);
for (DomAction *v : m_action)
- v->write(writer, QStringLiteral("action"));
+ v->write(writer, u"action"_s);
for (DomActionGroup *v : m_actionGroup)
- v->write(writer, QStringLiteral("actiongroup"));
+ v->write(writer, u"actiongroup"_s);
for (DomActionRef *v : m_addAction)
- v->write(writer, QStringLiteral("addaction"));
+ v->write(writer, u"addaction"_s);
for (const QString &v : m_zOrder)
- writer.writeTextElement(QStringLiteral("zorder"), v);
+ writer.writeTextElement(u"zorder"_s, v);
writer.writeEndElement();
}
@@ -2356,24 +2323,24 @@ void DomSpacer::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("name")) {
+ if (name == u"name"_s) {
setAttributeName(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("property"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"property"_s, Qt::CaseInsensitive)) {
auto *v = new DomProperty();
v->read(reader);
m_property.append(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -2389,10 +2356,10 @@ void DomSpacer::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("spacer") : tagName.toLower());
if (hasAttributeName())
- writer.writeAttribute(QStringLiteral("name"), attributeName());
+ writer.writeAttribute(u"name"_s, attributeName());
for (DomProperty *v : m_property)
- v->write(writer, QStringLiteral("property"));
+ v->write(writer, u"property"_s);
writer.writeEndElement();
}
@@ -2410,30 +2377,30 @@ void DomColor::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("alpha")) {
+ if (name == u"alpha"_s) {
setAttributeAlpha(attribute.value().toInt());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("red"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"red"_s, Qt::CaseInsensitive)) {
setElementRed(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("green"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"green"_s, Qt::CaseInsensitive)) {
setElementGreen(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("blue"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"blue"_s, Qt::CaseInsensitive)) {
setElementBlue(reader.readElementText().toInt());
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -2449,16 +2416,16 @@ void DomColor::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("color") : tagName.toLower());
if (hasAttributeAlpha())
- writer.writeAttribute(QStringLiteral("alpha"), QString::number(attributeAlpha()));
+ writer.writeAttribute(u"alpha"_s, QString::number(attributeAlpha()));
if (m_children & Red)
- writer.writeTextElement(QStringLiteral("red"), QString::number(m_red));
+ writer.writeTextElement(u"red"_s, QString::number(m_red));
if (m_children & Green)
- writer.writeTextElement(QStringLiteral("green"), QString::number(m_green));
+ writer.writeTextElement(u"green"_s, QString::number(m_green));
if (m_children & Blue)
- writer.writeTextElement(QStringLiteral("blue"), QString::number(m_blue));
+ writer.writeTextElement(u"blue"_s, QString::number(m_blue));
writer.writeEndElement();
}
@@ -2506,24 +2473,24 @@ void DomGradientStop::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("position")) {
+ if (name == u"position"_s) {
setAttributePosition(attribute.value().toDouble());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("color"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"color"_s, Qt::CaseInsensitive)) {
auto *v = new DomColor();
v->read(reader);
setElementColor(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -2539,10 +2506,10 @@ void DomGradientStop::write(QXmlStreamWriter &writer, const QString &tagName) co
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("gradientstop") : tagName.toLower());
if (hasAttributePosition())
- writer.writeAttribute(QStringLiteral("position"), QString::number(attributePosition(), 'f', 15));
+ writer.writeAttribute(u"position"_s, QString::number(attributePosition(), 'f', 15));
if (m_children & Color)
- m_color->write(writer, QStringLiteral("color"));
+ m_color->write(writer, u"color"_s);
writer.writeEndElement();
}
@@ -2580,72 +2547,72 @@ void DomGradient::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("startx")) {
+ if (name == u"startx"_s) {
setAttributeStartX(attribute.value().toDouble());
continue;
}
- if (name == QLatin1String("starty")) {
+ if (name == u"starty"_s) {
setAttributeStartY(attribute.value().toDouble());
continue;
}
- if (name == QLatin1String("endx")) {
+ if (name == u"endx"_s) {
setAttributeEndX(attribute.value().toDouble());
continue;
}
- if (name == QLatin1String("endy")) {
+ if (name == u"endy"_s) {
setAttributeEndY(attribute.value().toDouble());
continue;
}
- if (name == QLatin1String("centralx")) {
+ if (name == u"centralx"_s) {
setAttributeCentralX(attribute.value().toDouble());
continue;
}
- if (name == QLatin1String("centraly")) {
+ if (name == u"centraly"_s) {
setAttributeCentralY(attribute.value().toDouble());
continue;
}
- if (name == QLatin1String("focalx")) {
+ if (name == u"focalx"_s) {
setAttributeFocalX(attribute.value().toDouble());
continue;
}
- if (name == QLatin1String("focaly")) {
+ if (name == u"focaly"_s) {
setAttributeFocalY(attribute.value().toDouble());
continue;
}
- if (name == QLatin1String("radius")) {
+ if (name == u"radius"_s) {
setAttributeRadius(attribute.value().toDouble());
continue;
}
- if (name == QLatin1String("angle")) {
+ if (name == u"angle"_s) {
setAttributeAngle(attribute.value().toDouble());
continue;
}
- if (name == QLatin1String("type")) {
+ if (name == u"type"_s) {
setAttributeType(attribute.value().toString());
continue;
}
- if (name == QLatin1String("spread")) {
+ if (name == u"spread"_s) {
setAttributeSpread(attribute.value().toString());
continue;
}
- if (name == QLatin1String("coordinatemode")) {
+ if (name == u"coordinatemode"_s) {
setAttributeCoordinateMode(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("gradientstop"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"gradientstop"_s, Qt::CaseInsensitive)) {
auto *v = new DomGradientStop();
v->read(reader);
m_gradientStop.append(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -2661,46 +2628,46 @@ void DomGradient::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("gradient") : tagName.toLower());
if (hasAttributeStartX())
- writer.writeAttribute(QStringLiteral("startx"), QString::number(attributeStartX(), 'f', 15));
+ writer.writeAttribute(u"startx"_s, QString::number(attributeStartX(), 'f', 15));
if (hasAttributeStartY())
- writer.writeAttribute(QStringLiteral("starty"), QString::number(attributeStartY(), 'f', 15));
+ writer.writeAttribute(u"starty"_s, QString::number(attributeStartY(), 'f', 15));
if (hasAttributeEndX())
- writer.writeAttribute(QStringLiteral("endx"), QString::number(attributeEndX(), 'f', 15));
+ writer.writeAttribute(u"endx"_s, QString::number(attributeEndX(), 'f', 15));
if (hasAttributeEndY())
- writer.writeAttribute(QStringLiteral("endy"), QString::number(attributeEndY(), 'f', 15));
+ writer.writeAttribute(u"endy"_s, QString::number(attributeEndY(), 'f', 15));
if (hasAttributeCentralX())
- writer.writeAttribute(QStringLiteral("centralx"), QString::number(attributeCentralX(), 'f', 15));
+ writer.writeAttribute(u"centralx"_s, QString::number(attributeCentralX(), 'f', 15));
if (hasAttributeCentralY())
- writer.writeAttribute(QStringLiteral("centraly"), QString::number(attributeCentralY(), 'f', 15));
+ writer.writeAttribute(u"centraly"_s, QString::number(attributeCentralY(), 'f', 15));
if (hasAttributeFocalX())
- writer.writeAttribute(QStringLiteral("focalx"), QString::number(attributeFocalX(), 'f', 15));
+ writer.writeAttribute(u"focalx"_s, QString::number(attributeFocalX(), 'f', 15));
if (hasAttributeFocalY())
- writer.writeAttribute(QStringLiteral("focaly"), QString::number(attributeFocalY(), 'f', 15));
+ writer.writeAttribute(u"focaly"_s, QString::number(attributeFocalY(), 'f', 15));
if (hasAttributeRadius())
- writer.writeAttribute(QStringLiteral("radius"), QString::number(attributeRadius(), 'f', 15));
+ writer.writeAttribute(u"radius"_s, QString::number(attributeRadius(), 'f', 15));
if (hasAttributeAngle())
- writer.writeAttribute(QStringLiteral("angle"), QString::number(attributeAngle(), 'f', 15));
+ writer.writeAttribute(u"angle"_s, QString::number(attributeAngle(), 'f', 15));
if (hasAttributeType())
- writer.writeAttribute(QStringLiteral("type"), attributeType());
+ writer.writeAttribute(u"type"_s, attributeType());
if (hasAttributeSpread())
- writer.writeAttribute(QStringLiteral("spread"), attributeSpread());
+ writer.writeAttribute(u"spread"_s, attributeSpread());
if (hasAttributeCoordinateMode())
- writer.writeAttribute(QStringLiteral("coordinatemode"), attributeCoordinateMode());
+ writer.writeAttribute(u"coordinatemode"_s, attributeCoordinateMode());
for (DomGradientStop *v : m_gradientStop)
- v->write(writer, QStringLiteral("gradientstop"));
+ v->write(writer, u"gradientstop"_s);
writer.writeEndElement();
}
@@ -2736,36 +2703,36 @@ void DomBrush::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("brushstyle")) {
+ if (name == u"brushstyle"_s) {
setAttributeBrushStyle(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("color"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"color"_s, Qt::CaseInsensitive)) {
auto *v = new DomColor();
v->read(reader);
setElementColor(v);
continue;
}
- if (!tag.compare(QLatin1String("texture"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"texture"_s, Qt::CaseInsensitive)) {
auto *v = new DomProperty();
v->read(reader);
setElementTexture(v);
continue;
}
- if (!tag.compare(QLatin1String("gradient"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"gradient"_s, Qt::CaseInsensitive)) {
auto *v = new DomGradient();
v->read(reader);
setElementGradient(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -2781,22 +2748,22 @@ void DomBrush::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("brush") : tagName.toLower());
if (hasAttributeBrushStyle())
- writer.writeAttribute(QStringLiteral("brushstyle"), attributeBrushStyle());
+ writer.writeAttribute(u"brushstyle"_s, attributeBrushStyle());
switch (kind()) {
case Color:
if (m_color != nullptr)
- m_color->write(writer, QStringLiteral("color"));
+ m_color->write(writer, u"color"_s);
break;
case Texture:
if (m_texture != nullptr)
- m_texture->write(writer, QStringLiteral("texture"));
+ m_texture->write(writer, u"texture"_s);
break;
case Gradient:
if (m_gradient != nullptr)
- m_gradient->write(writer, QStringLiteral("gradient"));
+ m_gradient->write(writer, u"gradient"_s);
break;
default:
@@ -2857,24 +2824,24 @@ void DomColorRole::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("role")) {
+ if (name == u"role"_s) {
setAttributeRole(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("brush"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"brush"_s, Qt::CaseInsensitive)) {
auto *v = new DomBrush();
v->read(reader);
setElementBrush(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -2890,10 +2857,10 @@ void DomColorRole::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("colorrole") : tagName.toLower());
if (hasAttributeRole())
- writer.writeAttribute(QStringLiteral("role"), attributeRole());
+ writer.writeAttribute(u"role"_s, attributeRole());
if (m_children & Brush)
- m_brush->write(writer, QStringLiteral("brush"));
+ m_brush->write(writer, u"brush"_s);
writer.writeEndElement();
}
@@ -2934,19 +2901,19 @@ void DomColorGroup::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("colorrole"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"colorrole"_s, Qt::CaseInsensitive)) {
auto *v = new DomColorRole();
v->read(reader);
m_colorRole.append(v);
continue;
}
- if (!tag.compare(QLatin1String("color"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"color"_s, Qt::CaseInsensitive)) {
auto *v = new DomColor();
v->read(reader);
m_color.append(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -2962,10 +2929,10 @@ void DomColorGroup::write(QXmlStreamWriter &writer, const QString &tagName) cons
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("colorgroup") : tagName.toLower());
for (DomColorRole *v : m_colorRole)
- v->write(writer, QStringLiteral("colorrole"));
+ v->write(writer, u"colorrole"_s);
for (DomColor *v : m_color)
- v->write(writer, QStringLiteral("color"));
+ v->write(writer, u"color"_s);
writer.writeEndElement();
}
@@ -2995,25 +2962,25 @@ void DomPalette::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("active"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"active"_s, Qt::CaseInsensitive)) {
auto *v = new DomColorGroup();
v->read(reader);
setElementActive(v);
continue;
}
- if (!tag.compare(QLatin1String("inactive"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"inactive"_s, Qt::CaseInsensitive)) {
auto *v = new DomColorGroup();
v->read(reader);
setElementInactive(v);
continue;
}
- if (!tag.compare(QLatin1String("disabled"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"disabled"_s, Qt::CaseInsensitive)) {
auto *v = new DomColorGroup();
v->read(reader);
setElementDisabled(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -3029,13 +2996,13 @@ void DomPalette::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("palette") : tagName.toLower());
if (m_children & Active)
- m_active->write(writer, QStringLiteral("active"));
+ m_active->write(writer, u"active"_s);
if (m_children & Inactive)
- m_inactive->write(writer, QStringLiteral("inactive"));
+ m_inactive->write(writer, u"inactive"_s);
if (m_children & Disabled)
- m_disabled->write(writer, QStringLiteral("disabled"));
+ m_disabled->write(writer, u"disabled"_s);
writer.writeEndElement();
}
@@ -3114,47 +3081,55 @@ void DomFont::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("family"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"family"_s, Qt::CaseInsensitive)) {
setElementFamily(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("pointsize"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"pointsize"_s, Qt::CaseInsensitive)) {
setElementPointSize(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("weight"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"weight"_s, Qt::CaseInsensitive)) {
setElementWeight(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("italic"), Qt::CaseInsensitive)) {
- setElementItalic(reader.readElementText() == QLatin1String("true"));
+ if (!tag.compare(u"italic"_s, Qt::CaseInsensitive)) {
+ setElementItalic(reader.readElementText() == u"true"_s);
continue;
}
- if (!tag.compare(QLatin1String("bold"), Qt::CaseInsensitive)) {
- setElementBold(reader.readElementText() == QLatin1String("true"));
+ if (!tag.compare(u"bold"_s, Qt::CaseInsensitive)) {
+ setElementBold(reader.readElementText() == u"true"_s);
continue;
}
- if (!tag.compare(QLatin1String("underline"), Qt::CaseInsensitive)) {
- setElementUnderline(reader.readElementText() == QLatin1String("true"));
+ if (!tag.compare(u"underline"_s, Qt::CaseInsensitive)) {
+ setElementUnderline(reader.readElementText() == u"true"_s);
continue;
}
- if (!tag.compare(QLatin1String("strikeout"), Qt::CaseInsensitive)) {
- setElementStrikeOut(reader.readElementText() == QLatin1String("true"));
+ if (!tag.compare(u"strikeout"_s, Qt::CaseInsensitive)) {
+ setElementStrikeOut(reader.readElementText() == u"true"_s);
continue;
}
- if (!tag.compare(QLatin1String("antialiasing"), Qt::CaseInsensitive)) {
- setElementAntialiasing(reader.readElementText() == QLatin1String("true"));
+ if (!tag.compare(u"antialiasing"_s, Qt::CaseInsensitive)) {
+ setElementAntialiasing(reader.readElementText() == u"true"_s);
continue;
}
- if (!tag.compare(QLatin1String("stylestrategy"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"stylestrategy"_s, Qt::CaseInsensitive)) {
setElementStyleStrategy(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("kerning"), Qt::CaseInsensitive)) {
- setElementKerning(reader.readElementText() == QLatin1String("true"));
+ if (!tag.compare(u"kerning"_s, Qt::CaseInsensitive)) {
+ setElementKerning(reader.readElementText() == u"true"_s);
+ continue;
+ }
+ if (!tag.compare(u"hintingpreference"_s, Qt::CaseInsensitive)) {
+ setElementHintingPreference(reader.readElementText());
+ continue;
+ }
+ if (!tag.compare(u"fontweight"_s, Qt::CaseInsensitive)) {
+ setElementFontWeight(reader.readElementText());
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -3170,34 +3145,40 @@ void DomFont::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("font") : tagName.toLower());
if (m_children & Family)
- writer.writeTextElement(QStringLiteral("family"), m_family);
+ writer.writeTextElement(u"family"_s, m_family);
if (m_children & PointSize)
- writer.writeTextElement(QStringLiteral("pointsize"), QString::number(m_pointSize));
+ writer.writeTextElement(u"pointsize"_s, QString::number(m_pointSize));
if (m_children & Weight)
- writer.writeTextElement(QStringLiteral("weight"), QString::number(m_weight));
+ writer.writeTextElement(u"weight"_s, QString::number(m_weight));
if (m_children & Italic)
- writer.writeTextElement(QStringLiteral("italic"), (m_italic ? QLatin1String("true") : QLatin1String("false")));
+ writer.writeTextElement(u"italic"_s, (m_italic ? u"true"_s : u"false"_s));
if (m_children & Bold)
- writer.writeTextElement(QStringLiteral("bold"), (m_bold ? QLatin1String("true") : QLatin1String("false")));
+ writer.writeTextElement(u"bold"_s, (m_bold ? u"true"_s : u"false"_s));
if (m_children & Underline)
- writer.writeTextElement(QStringLiteral("underline"), (m_underline ? QLatin1String("true") : QLatin1String("false")));
+ writer.writeTextElement(u"underline"_s, (m_underline ? u"true"_s : u"false"_s));
if (m_children & StrikeOut)
- writer.writeTextElement(QStringLiteral("strikeout"), (m_strikeOut ? QLatin1String("true") : QLatin1String("false")));
+ writer.writeTextElement(u"strikeout"_s, (m_strikeOut ? u"true"_s : u"false"_s));
if (m_children & Antialiasing)
- writer.writeTextElement(QStringLiteral("antialiasing"), (m_antialiasing ? QLatin1String("true") : QLatin1String("false")));
+ writer.writeTextElement(u"antialiasing"_s, (m_antialiasing ? u"true"_s : u"false"_s));
if (m_children & StyleStrategy)
- writer.writeTextElement(QStringLiteral("stylestrategy"), m_styleStrategy);
+ writer.writeTextElement(u"stylestrategy"_s, m_styleStrategy);
if (m_children & Kerning)
- writer.writeTextElement(QStringLiteral("kerning"), (m_kerning ? QLatin1String("true") : QLatin1String("false")));
+ writer.writeTextElement(u"kerning"_s, (m_kerning ? u"true"_s : u"false"_s));
+
+ if (m_children & HintingPreference)
+ writer.writeTextElement(u"hintingpreference"_s, m_hintingPreference);
+
+ if (m_children & FontWeight)
+ writer.writeTextElement(u"fontweight"_s, m_fontWeight);
writer.writeEndElement();
}
@@ -3262,6 +3243,18 @@ void DomFont::setElementKerning(bool a)
m_kerning = a;
}
+void DomFont::setElementHintingPreference(const QString &a)
+{
+ m_children |= HintingPreference;
+ m_hintingPreference = a;
+}
+
+void DomFont::setElementFontWeight(const QString &a)
+{
+ m_children |= FontWeight;
+ m_fontWeight = a;
+}
+
void DomFont::clearElementFamily()
{
m_children &= ~Family;
@@ -3312,6 +3305,16 @@ void DomFont::clearElementKerning()
m_children &= ~Kerning;
}
+void DomFont::clearElementHintingPreference()
+{
+ m_children &= ~HintingPreference;
+}
+
+void DomFont::clearElementFontWeight()
+{
+ m_children &= ~FontWeight;
+}
+
DomPoint::~DomPoint() = default;
void DomPoint::read(QXmlStreamReader &reader)
@@ -3320,15 +3323,15 @@ void DomPoint::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("x"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"x"_s, Qt::CaseInsensitive)) {
setElementX(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("y"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"y"_s, Qt::CaseInsensitive)) {
setElementY(reader.readElementText().toInt());
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -3344,10 +3347,10 @@ void DomPoint::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("point") : tagName.toLower());
if (m_children & X)
- writer.writeTextElement(QString(QLatin1Char('x')), QString::number(m_x));
+ writer.writeTextElement(u"x"_s, QString::number(m_x));
if (m_children & Y)
- writer.writeTextElement(QString(QLatin1Char('y')), QString::number(m_y));
+ writer.writeTextElement(u"y"_s, QString::number(m_y));
writer.writeEndElement();
}
@@ -3382,23 +3385,23 @@ void DomRect::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("x"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"x"_s, Qt::CaseInsensitive)) {
setElementX(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("y"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"y"_s, Qt::CaseInsensitive)) {
setElementY(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("width"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"width"_s, Qt::CaseInsensitive)) {
setElementWidth(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("height"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"height"_s, Qt::CaseInsensitive)) {
setElementHeight(reader.readElementText().toInt());
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -3414,16 +3417,16 @@ void DomRect::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("rect") : tagName.toLower());
if (m_children & X)
- writer.writeTextElement(QString(QLatin1Char('x')), QString::number(m_x));
+ writer.writeTextElement(u"x"_s, QString::number(m_x));
if (m_children & Y)
- writer.writeTextElement(QString(QLatin1Char('y')), QString::number(m_y));
+ writer.writeTextElement(u"y"_s, QString::number(m_y));
if (m_children & Width)
- writer.writeTextElement(QStringLiteral("width"), QString::number(m_width));
+ writer.writeTextElement(u"width"_s, QString::number(m_width));
if (m_children & Height)
- writer.writeTextElement(QStringLiteral("height"), QString::number(m_height));
+ writer.writeTextElement(u"height"_s, QString::number(m_height));
writer.writeEndElement();
}
@@ -3479,22 +3482,22 @@ void DomLocale::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("language")) {
+ if (name == u"language"_s) {
setAttributeLanguage(attribute.value().toString());
continue;
}
- if (name == QLatin1String("country")) {
+ if (name == u"country"_s) {
setAttributeCountry(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -3510,10 +3513,10 @@ void DomLocale::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("locale") : tagName.toLower());
if (hasAttributeLanguage())
- writer.writeAttribute(QStringLiteral("language"), attributeLanguage());
+ writer.writeAttribute(u"language"_s, attributeLanguage());
if (hasAttributeCountry())
- writer.writeAttribute(QStringLiteral("country"), attributeCountry());
+ writer.writeAttribute(u"country"_s, attributeCountry());
writer.writeEndElement();
}
@@ -3525,38 +3528,38 @@ void DomSizePolicy::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("hsizetype")) {
+ if (name == u"hsizetype"_s) {
setAttributeHSizeType(attribute.value().toString());
continue;
}
- if (name == QLatin1String("vsizetype")) {
+ if (name == u"vsizetype"_s) {
setAttributeVSizeType(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("hsizetype"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"hsizetype"_s, Qt::CaseInsensitive)) {
setElementHSizeType(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("vsizetype"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"vsizetype"_s, Qt::CaseInsensitive)) {
setElementVSizeType(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("horstretch"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"horstretch"_s, Qt::CaseInsensitive)) {
setElementHorStretch(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("verstretch"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"verstretch"_s, Qt::CaseInsensitive)) {
setElementVerStretch(reader.readElementText().toInt());
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -3572,22 +3575,22 @@ void DomSizePolicy::write(QXmlStreamWriter &writer, const QString &tagName) cons
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("sizepolicy") : tagName.toLower());
if (hasAttributeHSizeType())
- writer.writeAttribute(QStringLiteral("hsizetype"), attributeHSizeType());
+ writer.writeAttribute(u"hsizetype"_s, attributeHSizeType());
if (hasAttributeVSizeType())
- writer.writeAttribute(QStringLiteral("vsizetype"), attributeVSizeType());
+ writer.writeAttribute(u"vsizetype"_s, attributeVSizeType());
if (m_children & HSizeType)
- writer.writeTextElement(QStringLiteral("hsizetype"), QString::number(m_hSizeType));
+ writer.writeTextElement(u"hsizetype"_s, QString::number(m_hSizeType));
if (m_children & VSizeType)
- writer.writeTextElement(QStringLiteral("vsizetype"), QString::number(m_vSizeType));
+ writer.writeTextElement(u"vsizetype"_s, QString::number(m_vSizeType));
if (m_children & HorStretch)
- writer.writeTextElement(QStringLiteral("horstretch"), QString::number(m_horStretch));
+ writer.writeTextElement(u"horstretch"_s, QString::number(m_horStretch));
if (m_children & VerStretch)
- writer.writeTextElement(QStringLiteral("verstretch"), QString::number(m_verStretch));
+ writer.writeTextElement(u"verstretch"_s, QString::number(m_verStretch));
writer.writeEndElement();
}
@@ -3644,15 +3647,15 @@ void DomSize::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("width"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"width"_s, Qt::CaseInsensitive)) {
setElementWidth(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("height"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"height"_s, Qt::CaseInsensitive)) {
setElementHeight(reader.readElementText().toInt());
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -3668,10 +3671,10 @@ void DomSize::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("size") : tagName.toLower());
if (m_children & Width)
- writer.writeTextElement(QStringLiteral("width"), QString::number(m_width));
+ writer.writeTextElement(u"width"_s, QString::number(m_width));
if (m_children & Height)
- writer.writeTextElement(QStringLiteral("height"), QString::number(m_height));
+ writer.writeTextElement(u"height"_s, QString::number(m_height));
writer.writeEndElement();
}
@@ -3706,19 +3709,19 @@ void DomDate::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("year"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"year"_s, Qt::CaseInsensitive)) {
setElementYear(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("month"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"month"_s, Qt::CaseInsensitive)) {
setElementMonth(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("day"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"day"_s, Qt::CaseInsensitive)) {
setElementDay(reader.readElementText().toInt());
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -3734,13 +3737,13 @@ void DomDate::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("date") : tagName.toLower());
if (m_children & Year)
- writer.writeTextElement(QStringLiteral("year"), QString::number(m_year));
+ writer.writeTextElement(u"year"_s, QString::number(m_year));
if (m_children & Month)
- writer.writeTextElement(QStringLiteral("month"), QString::number(m_month));
+ writer.writeTextElement(u"month"_s, QString::number(m_month));
if (m_children & Day)
- writer.writeTextElement(QStringLiteral("day"), QString::number(m_day));
+ writer.writeTextElement(u"day"_s, QString::number(m_day));
writer.writeEndElement();
}
@@ -3786,19 +3789,19 @@ void DomTime::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("hour"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"hour"_s, Qt::CaseInsensitive)) {
setElementHour(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("minute"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"minute"_s, Qt::CaseInsensitive)) {
setElementMinute(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("second"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"second"_s, Qt::CaseInsensitive)) {
setElementSecond(reader.readElementText().toInt());
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -3814,13 +3817,13 @@ void DomTime::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("time") : tagName.toLower());
if (m_children & Hour)
- writer.writeTextElement(QStringLiteral("hour"), QString::number(m_hour));
+ writer.writeTextElement(u"hour"_s, QString::number(m_hour));
if (m_children & Minute)
- writer.writeTextElement(QStringLiteral("minute"), QString::number(m_minute));
+ writer.writeTextElement(u"minute"_s, QString::number(m_minute));
if (m_children & Second)
- writer.writeTextElement(QStringLiteral("second"), QString::number(m_second));
+ writer.writeTextElement(u"second"_s, QString::number(m_second));
writer.writeEndElement();
}
@@ -3866,31 +3869,31 @@ void DomDateTime::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("hour"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"hour"_s, Qt::CaseInsensitive)) {
setElementHour(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("minute"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"minute"_s, Qt::CaseInsensitive)) {
setElementMinute(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("second"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"second"_s, Qt::CaseInsensitive)) {
setElementSecond(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("year"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"year"_s, Qt::CaseInsensitive)) {
setElementYear(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("month"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"month"_s, Qt::CaseInsensitive)) {
setElementMonth(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("day"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"day"_s, Qt::CaseInsensitive)) {
setElementDay(reader.readElementText().toInt());
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -3906,22 +3909,22 @@ void DomDateTime::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("datetime") : tagName.toLower());
if (m_children & Hour)
- writer.writeTextElement(QStringLiteral("hour"), QString::number(m_hour));
+ writer.writeTextElement(u"hour"_s, QString::number(m_hour));
if (m_children & Minute)
- writer.writeTextElement(QStringLiteral("minute"), QString::number(m_minute));
+ writer.writeTextElement(u"minute"_s, QString::number(m_minute));
if (m_children & Second)
- writer.writeTextElement(QStringLiteral("second"), QString::number(m_second));
+ writer.writeTextElement(u"second"_s, QString::number(m_second));
if (m_children & Year)
- writer.writeTextElement(QStringLiteral("year"), QString::number(m_year));
+ writer.writeTextElement(u"year"_s, QString::number(m_year));
if (m_children & Month)
- writer.writeTextElement(QStringLiteral("month"), QString::number(m_month));
+ writer.writeTextElement(u"month"_s, QString::number(m_month));
if (m_children & Day)
- writer.writeTextElement(QStringLiteral("day"), QString::number(m_day));
+ writer.writeTextElement(u"day"_s, QString::number(m_day));
writer.writeEndElement();
}
@@ -4002,34 +4005,34 @@ void DomStringList::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("notr")) {
+ if (name == u"notr"_s) {
setAttributeNotr(attribute.value().toString());
continue;
}
- if (name == QLatin1String("comment")) {
+ if (name == u"comment"_s) {
setAttributeComment(attribute.value().toString());
continue;
}
- if (name == QLatin1String("extracomment")) {
+ if (name == u"extracomment"_s) {
setAttributeExtraComment(attribute.value().toString());
continue;
}
- if (name == QLatin1String("id")) {
+ if (name == u"id"_s) {
setAttributeId(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("string"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"string"_s, Qt::CaseInsensitive)) {
m_string.append(reader.readElementText());
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -4045,19 +4048,19 @@ void DomStringList::write(QXmlStreamWriter &writer, const QString &tagName) cons
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("stringlist") : tagName.toLower());
if (hasAttributeNotr())
- writer.writeAttribute(QStringLiteral("notr"), attributeNotr());
+ writer.writeAttribute(u"notr"_s, attributeNotr());
if (hasAttributeComment())
- writer.writeAttribute(QStringLiteral("comment"), attributeComment());
+ writer.writeAttribute(u"comment"_s, attributeComment());
if (hasAttributeExtraComment())
- writer.writeAttribute(QStringLiteral("extracomment"), attributeExtraComment());
+ writer.writeAttribute(u"extracomment"_s, attributeExtraComment());
if (hasAttributeId())
- writer.writeAttribute(QStringLiteral("id"), attributeId());
+ writer.writeAttribute(u"id"_s, attributeId());
for (const QString &v : m_string)
- writer.writeTextElement(QStringLiteral("string"), v);
+ writer.writeTextElement(u"string"_s, v);
writer.writeEndElement();
}
@@ -4075,22 +4078,22 @@ void DomResourcePixmap::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("resource")) {
+ if (name == u"resource"_s) {
setAttributeResource(attribute.value().toString());
continue;
}
- if (name == QLatin1String("alias")) {
+ if (name == u"alias"_s) {
setAttributeAlias(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -4110,10 +4113,10 @@ void DomResourcePixmap::write(QXmlStreamWriter &writer, const QString &tagName)
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("resourcepixmap") : tagName.toLower());
if (hasAttributeResource())
- writer.writeAttribute(QStringLiteral("resource"), attributeResource());
+ writer.writeAttribute(u"resource"_s, attributeResource());
if (hasAttributeAlias())
- writer.writeAttribute(QStringLiteral("alias"), attributeAlias());
+ writer.writeAttribute(u"alias"_s, attributeAlias());
if (!m_text.isEmpty())
writer.writeCharacters(m_text);
@@ -4138,70 +4141,70 @@ void DomResourceIcon::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("theme")) {
+ if (name == u"theme"_s) {
setAttributeTheme(attribute.value().toString());
continue;
}
- if (name == QLatin1String("resource")) {
+ if (name == u"resource"_s) {
setAttributeResource(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("normaloff"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"normaloff"_s, Qt::CaseInsensitive)) {
auto *v = new DomResourcePixmap();
v->read(reader);
setElementNormalOff(v);
continue;
}
- if (!tag.compare(QLatin1String("normalon"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"normalon"_s, Qt::CaseInsensitive)) {
auto *v = new DomResourcePixmap();
v->read(reader);
setElementNormalOn(v);
continue;
}
- if (!tag.compare(QLatin1String("disabledoff"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"disabledoff"_s, Qt::CaseInsensitive)) {
auto *v = new DomResourcePixmap();
v->read(reader);
setElementDisabledOff(v);
continue;
}
- if (!tag.compare(QLatin1String("disabledon"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"disabledon"_s, Qt::CaseInsensitive)) {
auto *v = new DomResourcePixmap();
v->read(reader);
setElementDisabledOn(v);
continue;
}
- if (!tag.compare(QLatin1String("activeoff"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"activeoff"_s, Qt::CaseInsensitive)) {
auto *v = new DomResourcePixmap();
v->read(reader);
setElementActiveOff(v);
continue;
}
- if (!tag.compare(QLatin1String("activeon"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"activeon"_s, Qt::CaseInsensitive)) {
auto *v = new DomResourcePixmap();
v->read(reader);
setElementActiveOn(v);
continue;
}
- if (!tag.compare(QLatin1String("selectedoff"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"selectedoff"_s, Qt::CaseInsensitive)) {
auto *v = new DomResourcePixmap();
v->read(reader);
setElementSelectedOff(v);
continue;
}
- if (!tag.compare(QLatin1String("selectedon"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"selectedon"_s, Qt::CaseInsensitive)) {
auto *v = new DomResourcePixmap();
v->read(reader);
setElementSelectedOn(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -4221,34 +4224,34 @@ void DomResourceIcon::write(QXmlStreamWriter &writer, const QString &tagName) co
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("resourceicon") : tagName.toLower());
if (hasAttributeTheme())
- writer.writeAttribute(QStringLiteral("theme"), attributeTheme());
+ writer.writeAttribute(u"theme"_s, attributeTheme());
if (hasAttributeResource())
- writer.writeAttribute(QStringLiteral("resource"), attributeResource());
+ writer.writeAttribute(u"resource"_s, attributeResource());
if (m_children & NormalOff)
- m_normalOff->write(writer, QStringLiteral("normaloff"));
+ m_normalOff->write(writer, u"normaloff"_s);
if (m_children & NormalOn)
- m_normalOn->write(writer, QStringLiteral("normalon"));
+ m_normalOn->write(writer, u"normalon"_s);
if (m_children & DisabledOff)
- m_disabledOff->write(writer, QStringLiteral("disabledoff"));
+ m_disabledOff->write(writer, u"disabledoff"_s);
if (m_children & DisabledOn)
- m_disabledOn->write(writer, QStringLiteral("disabledon"));
+ m_disabledOn->write(writer, u"disabledon"_s);
if (m_children & ActiveOff)
- m_activeOff->write(writer, QStringLiteral("activeoff"));
+ m_activeOff->write(writer, u"activeoff"_s);
if (m_children & ActiveOn)
- m_activeOn->write(writer, QStringLiteral("activeon"));
+ m_activeOn->write(writer, u"activeon"_s);
if (m_children & SelectedOff)
- m_selectedOff->write(writer, QStringLiteral("selectedoff"));
+ m_selectedOff->write(writer, u"selectedoff"_s);
if (m_children & SelectedOn)
- m_selectedOn->write(writer, QStringLiteral("selectedon"));
+ m_selectedOn->write(writer, u"selectedon"_s);
if (!m_text.isEmpty())
writer.writeCharacters(m_text);
@@ -4439,30 +4442,30 @@ void DomString::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("notr")) {
+ if (name == u"notr"_s) {
setAttributeNotr(attribute.value().toString());
continue;
}
- if (name == QLatin1String("comment")) {
+ if (name == u"comment"_s) {
setAttributeComment(attribute.value().toString());
continue;
}
- if (name == QLatin1String("extracomment")) {
+ if (name == u"extracomment"_s) {
setAttributeExtraComment(attribute.value().toString());
continue;
}
- if (name == QLatin1String("id")) {
+ if (name == u"id"_s) {
setAttributeId(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -4482,16 +4485,16 @@ void DomString::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("string") : tagName.toLower());
if (hasAttributeNotr())
- writer.writeAttribute(QStringLiteral("notr"), attributeNotr());
+ writer.writeAttribute(u"notr"_s, attributeNotr());
if (hasAttributeComment())
- writer.writeAttribute(QStringLiteral("comment"), attributeComment());
+ writer.writeAttribute(u"comment"_s, attributeComment());
if (hasAttributeExtraComment())
- writer.writeAttribute(QStringLiteral("extracomment"), attributeExtraComment());
+ writer.writeAttribute(u"extracomment"_s, attributeExtraComment());
if (hasAttributeId())
- writer.writeAttribute(QStringLiteral("id"), attributeId());
+ writer.writeAttribute(u"id"_s, attributeId());
if (!m_text.isEmpty())
writer.writeCharacters(m_text);
@@ -4507,15 +4510,15 @@ void DomPointF::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("x"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"x"_s, Qt::CaseInsensitive)) {
setElementX(reader.readElementText().toDouble());
continue;
}
- if (!tag.compare(QLatin1String("y"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"y"_s, Qt::CaseInsensitive)) {
setElementY(reader.readElementText().toDouble());
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -4531,10 +4534,10 @@ void DomPointF::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("pointf") : tagName.toLower());
if (m_children & X)
- writer.writeTextElement(QString(QLatin1Char('x')), QString::number(m_x, 'f', 15));
+ writer.writeTextElement(u"x"_s, QString::number(m_x, 'f', 15));
if (m_children & Y)
- writer.writeTextElement(QString(QLatin1Char('y')), QString::number(m_y, 'f', 15));
+ writer.writeTextElement(u"y"_s, QString::number(m_y, 'f', 15));
writer.writeEndElement();
}
@@ -4569,23 +4572,23 @@ void DomRectF::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("x"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"x"_s, Qt::CaseInsensitive)) {
setElementX(reader.readElementText().toDouble());
continue;
}
- if (!tag.compare(QLatin1String("y"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"y"_s, Qt::CaseInsensitive)) {
setElementY(reader.readElementText().toDouble());
continue;
}
- if (!tag.compare(QLatin1String("width"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"width"_s, Qt::CaseInsensitive)) {
setElementWidth(reader.readElementText().toDouble());
continue;
}
- if (!tag.compare(QLatin1String("height"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"height"_s, Qt::CaseInsensitive)) {
setElementHeight(reader.readElementText().toDouble());
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -4601,16 +4604,16 @@ void DomRectF::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("rectf") : tagName.toLower());
if (m_children & X)
- writer.writeTextElement(QString(QLatin1Char('x')), QString::number(m_x, 'f', 15));
+ writer.writeTextElement(u"x"_s, QString::number(m_x, 'f', 15));
if (m_children & Y)
- writer.writeTextElement(QString(QLatin1Char('y')), QString::number(m_y, 'f', 15));
+ writer.writeTextElement(u"y"_s, QString::number(m_y, 'f', 15));
if (m_children & Width)
- writer.writeTextElement(QStringLiteral("width"), QString::number(m_width, 'f', 15));
+ writer.writeTextElement(u"width"_s, QString::number(m_width, 'f', 15));
if (m_children & Height)
- writer.writeTextElement(QStringLiteral("height"), QString::number(m_height, 'f', 15));
+ writer.writeTextElement(u"height"_s, QString::number(m_height, 'f', 15));
writer.writeEndElement();
}
@@ -4667,15 +4670,15 @@ void DomSizeF::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("width"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"width"_s, Qt::CaseInsensitive)) {
setElementWidth(reader.readElementText().toDouble());
continue;
}
- if (!tag.compare(QLatin1String("height"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"height"_s, Qt::CaseInsensitive)) {
setElementHeight(reader.readElementText().toDouble());
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -4691,10 +4694,10 @@ void DomSizeF::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("sizef") : tagName.toLower());
if (m_children & Width)
- writer.writeTextElement(QStringLiteral("width"), QString::number(m_width, 'f', 15));
+ writer.writeTextElement(u"width"_s, QString::number(m_width, 'f', 15));
if (m_children & Height)
- writer.writeTextElement(QStringLiteral("height"), QString::number(m_height, 'f', 15));
+ writer.writeTextElement(u"height"_s, QString::number(m_height, 'f', 15));
writer.writeEndElement();
}
@@ -4729,11 +4732,11 @@ void DomChar::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("unicode"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"unicode"_s, Qt::CaseInsensitive)) {
setElementUnicode(reader.readElementText().toInt());
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -4749,7 +4752,7 @@ void DomChar::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("char") : tagName.toLower());
if (m_children & Unicode)
- writer.writeTextElement(QStringLiteral("unicode"), QString::number(m_unicode));
+ writer.writeTextElement(u"unicode"_s, QString::number(m_unicode));
writer.writeEndElement();
}
@@ -4776,13 +4779,13 @@ void DomUrl::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("string"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"string"_s, Qt::CaseInsensitive)) {
auto *v = new DomString();
v->read(reader);
setElementString(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -4798,7 +4801,7 @@ void DomUrl::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("url") : tagName.toLower());
if (m_children & String)
- m_string->write(writer, QStringLiteral("string"));
+ m_string->write(writer, u"string"_s);
writer.writeEndElement();
}
@@ -4911,196 +4914,196 @@ void DomProperty::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("name")) {
+ if (name == u"name"_s) {
setAttributeName(attribute.value().toString());
continue;
}
- if (name == QLatin1String("stdset")) {
+ if (name == u"stdset"_s) {
setAttributeStdset(attribute.value().toInt());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("bool"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"bool"_s, Qt::CaseInsensitive)) {
setElementBool(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("color"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"color"_s, Qt::CaseInsensitive)) {
auto *v = new DomColor();
v->read(reader);
setElementColor(v);
continue;
}
- if (!tag.compare(QLatin1String("cstring"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"cstring"_s, Qt::CaseInsensitive)) {
setElementCstring(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("cursor"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"cursor"_s, Qt::CaseInsensitive)) {
setElementCursor(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("cursorshape"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"cursorshape"_s, Qt::CaseInsensitive)) {
setElementCursorShape(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("enum"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"enum"_s, Qt::CaseInsensitive)) {
setElementEnum(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("font"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"font"_s, Qt::CaseInsensitive)) {
auto *v = new DomFont();
v->read(reader);
setElementFont(v);
continue;
}
- if (!tag.compare(QLatin1String("iconset"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"iconset"_s, Qt::CaseInsensitive)) {
auto *v = new DomResourceIcon();
v->read(reader);
setElementIconSet(v);
continue;
}
- if (!tag.compare(QLatin1String("pixmap"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"pixmap"_s, Qt::CaseInsensitive)) {
auto *v = new DomResourcePixmap();
v->read(reader);
setElementPixmap(v);
continue;
}
- if (!tag.compare(QLatin1String("palette"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"palette"_s, Qt::CaseInsensitive)) {
auto *v = new DomPalette();
v->read(reader);
setElementPalette(v);
continue;
}
- if (!tag.compare(QLatin1String("point"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"point"_s, Qt::CaseInsensitive)) {
auto *v = new DomPoint();
v->read(reader);
setElementPoint(v);
continue;
}
- if (!tag.compare(QLatin1String("rect"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"rect"_s, Qt::CaseInsensitive)) {
auto *v = new DomRect();
v->read(reader);
setElementRect(v);
continue;
}
- if (!tag.compare(QLatin1String("set"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"set"_s, Qt::CaseInsensitive)) {
setElementSet(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("locale"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"locale"_s, Qt::CaseInsensitive)) {
auto *v = new DomLocale();
v->read(reader);
setElementLocale(v);
continue;
}
- if (!tag.compare(QLatin1String("sizepolicy"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"sizepolicy"_s, Qt::CaseInsensitive)) {
auto *v = new DomSizePolicy();
v->read(reader);
setElementSizePolicy(v);
continue;
}
- if (!tag.compare(QLatin1String("size"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"size"_s, Qt::CaseInsensitive)) {
auto *v = new DomSize();
v->read(reader);
setElementSize(v);
continue;
}
- if (!tag.compare(QLatin1String("string"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"string"_s, Qt::CaseInsensitive)) {
auto *v = new DomString();
v->read(reader);
setElementString(v);
continue;
}
- if (!tag.compare(QLatin1String("stringlist"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"stringlist"_s, Qt::CaseInsensitive)) {
auto *v = new DomStringList();
v->read(reader);
setElementStringList(v);
continue;
}
- if (!tag.compare(QLatin1String("number"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"number"_s, Qt::CaseInsensitive)) {
setElementNumber(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("float"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"float"_s, Qt::CaseInsensitive)) {
setElementFloat(reader.readElementText().toFloat());
continue;
}
- if (!tag.compare(QLatin1String("double"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"double"_s, Qt::CaseInsensitive)) {
setElementDouble(reader.readElementText().toDouble());
continue;
}
- if (!tag.compare(QLatin1String("date"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"date"_s, Qt::CaseInsensitive)) {
auto *v = new DomDate();
v->read(reader);
setElementDate(v);
continue;
}
- if (!tag.compare(QLatin1String("time"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"time"_s, Qt::CaseInsensitive)) {
auto *v = new DomTime();
v->read(reader);
setElementTime(v);
continue;
}
- if (!tag.compare(QLatin1String("datetime"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"datetime"_s, Qt::CaseInsensitive)) {
auto *v = new DomDateTime();
v->read(reader);
setElementDateTime(v);
continue;
}
- if (!tag.compare(QLatin1String("pointf"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"pointf"_s, Qt::CaseInsensitive)) {
auto *v = new DomPointF();
v->read(reader);
setElementPointF(v);
continue;
}
- if (!tag.compare(QLatin1String("rectf"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"rectf"_s, Qt::CaseInsensitive)) {
auto *v = new DomRectF();
v->read(reader);
setElementRectF(v);
continue;
}
- if (!tag.compare(QLatin1String("sizef"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"sizef"_s, Qt::CaseInsensitive)) {
auto *v = new DomSizeF();
v->read(reader);
setElementSizeF(v);
continue;
}
- if (!tag.compare(QLatin1String("longlong"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"longlong"_s, Qt::CaseInsensitive)) {
setElementLongLong(reader.readElementText().toLongLong());
continue;
}
- if (!tag.compare(QLatin1String("char"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"char"_s, Qt::CaseInsensitive)) {
auto *v = new DomChar();
v->read(reader);
setElementChar(v);
continue;
}
- if (!tag.compare(QLatin1String("url"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"url"_s, Qt::CaseInsensitive)) {
auto *v = new DomUrl();
v->read(reader);
setElementUrl(v);
continue;
}
- if (!tag.compare(QLatin1String("uint"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"uint"_s, Qt::CaseInsensitive)) {
setElementUInt(reader.readElementText().toUInt());
continue;
}
- if (!tag.compare(QLatin1String("ulonglong"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"ulonglong"_s, Qt::CaseInsensitive)) {
setElementULongLong(reader.readElementText().toULongLong());
continue;
}
- if (!tag.compare(QLatin1String("brush"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"brush"_s, Qt::CaseInsensitive)) {
auto *v = new DomBrush();
v->read(reader);
setElementBrush(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -5116,163 +5119,163 @@ void DomProperty::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("property") : tagName.toLower());
if (hasAttributeName())
- writer.writeAttribute(QStringLiteral("name"), attributeName());
+ writer.writeAttribute(u"name"_s, attributeName());
if (hasAttributeStdset())
- writer.writeAttribute(QStringLiteral("stdset"), QString::number(attributeStdset()));
+ writer.writeAttribute(u"stdset"_s, QString::number(attributeStdset()));
switch (kind()) {
case Bool:
- writer.writeTextElement(QStringLiteral("bool"), elementBool());
+ writer.writeTextElement(u"bool"_s, elementBool());
break;
case Color:
if (m_color != nullptr)
- m_color->write(writer, QStringLiteral("color"));
+ m_color->write(writer, u"color"_s);
break;
case Cstring:
- writer.writeTextElement(QStringLiteral("cstring"), elementCstring());
+ writer.writeTextElement(u"cstring"_s, elementCstring());
break;
case Cursor:
- writer.writeTextElement(QStringLiteral("cursor"), QString::number(elementCursor()));
+ writer.writeTextElement(u"cursor"_s, QString::number(elementCursor()));
break;
case CursorShape:
- writer.writeTextElement(QStringLiteral("cursorShape"), elementCursorShape());
+ writer.writeTextElement(u"cursorShape"_s, elementCursorShape());
break;
case Enum:
- writer.writeTextElement(QStringLiteral("enum"), elementEnum());
+ writer.writeTextElement(u"enum"_s, elementEnum());
break;
case Font:
if (m_font != nullptr)
- m_font->write(writer, QStringLiteral("font"));
+ m_font->write(writer, u"font"_s);
break;
case IconSet:
if (m_iconSet != nullptr)
- m_iconSet->write(writer, QStringLiteral("iconset"));
+ m_iconSet->write(writer, u"iconset"_s);
break;
case Pixmap:
if (m_pixmap != nullptr)
- m_pixmap->write(writer, QStringLiteral("pixmap"));
+ m_pixmap->write(writer, u"pixmap"_s);
break;
case Palette:
if (m_palette != nullptr)
- m_palette->write(writer, QStringLiteral("palette"));
+ m_palette->write(writer, u"palette"_s);
break;
case Point:
if (m_point != nullptr)
- m_point->write(writer, QStringLiteral("point"));
+ m_point->write(writer, u"point"_s);
break;
case Rect:
if (m_rect != nullptr)
- m_rect->write(writer, QStringLiteral("rect"));
+ m_rect->write(writer, u"rect"_s);
break;
case Set:
- writer.writeTextElement(QStringLiteral("set"), elementSet());
+ writer.writeTextElement(u"set"_s, elementSet());
break;
case Locale:
if (m_locale != nullptr)
- m_locale->write(writer, QStringLiteral("locale"));
+ m_locale->write(writer, u"locale"_s);
break;
case SizePolicy:
if (m_sizePolicy != nullptr)
- m_sizePolicy->write(writer, QStringLiteral("sizepolicy"));
+ m_sizePolicy->write(writer, u"sizepolicy"_s);
break;
case Size:
if (m_size != nullptr)
- m_size->write(writer, QStringLiteral("size"));
+ m_size->write(writer, u"size"_s);
break;
case String:
if (m_string != nullptr)
- m_string->write(writer, QStringLiteral("string"));
+ m_string->write(writer, u"string"_s);
break;
case StringList:
if (m_stringList != nullptr)
- m_stringList->write(writer, QStringLiteral("stringlist"));
+ m_stringList->write(writer, u"stringlist"_s);
break;
case Number:
- writer.writeTextElement(QStringLiteral("number"), QString::number(elementNumber()));
+ writer.writeTextElement(u"number"_s, QString::number(elementNumber()));
break;
case Float:
- writer.writeTextElement(QStringLiteral("float"), QString::number(elementFloat(), 'f', 8));
+ writer.writeTextElement(u"float"_s, QString::number(elementFloat(), 'f', 8));
break;
case Double:
- writer.writeTextElement(QStringLiteral("double"), QString::number(elementDouble(), 'f', 15));
+ writer.writeTextElement(u"double"_s, QString::number(elementDouble(), 'f', 15));
break;
case Date:
if (m_date != nullptr)
- m_date->write(writer, QStringLiteral("date"));
+ m_date->write(writer, u"date"_s);
break;
case Time:
if (m_time != nullptr)
- m_time->write(writer, QStringLiteral("time"));
+ m_time->write(writer, u"time"_s);
break;
case DateTime:
if (m_dateTime != nullptr)
- m_dateTime->write(writer, QStringLiteral("datetime"));
+ m_dateTime->write(writer, u"datetime"_s);
break;
case PointF:
if (m_pointF != nullptr)
- m_pointF->write(writer, QStringLiteral("pointf"));
+ m_pointF->write(writer, u"pointf"_s);
break;
case RectF:
if (m_rectF != nullptr)
- m_rectF->write(writer, QStringLiteral("rectf"));
+ m_rectF->write(writer, u"rectf"_s);
break;
case SizeF:
if (m_sizeF != nullptr)
- m_sizeF->write(writer, QStringLiteral("sizef"));
+ m_sizeF->write(writer, u"sizef"_s);
break;
case LongLong:
- writer.writeTextElement(QStringLiteral("longLong"), QString::number(elementLongLong()));
+ writer.writeTextElement(u"longLong"_s, QString::number(elementLongLong()));
break;
case Char:
if (m_char != nullptr)
- m_char->write(writer, QStringLiteral("char"));
+ m_char->write(writer, u"char"_s);
break;
case Url:
if (m_url != nullptr)
- m_url->write(writer, QStringLiteral("url"));
+ m_url->write(writer, u"url"_s);
break;
case UInt:
- writer.writeTextElement(QStringLiteral("UInt"), QString::number(elementUInt()));
+ writer.writeTextElement(u"UInt"_s, QString::number(elementUInt()));
break;
case ULongLong:
- writer.writeTextElement(QStringLiteral("uLongLong"), QString::number(elementULongLong()));
+ writer.writeTextElement(u"uLongLong"_s, QString::number(elementULongLong()));
break;
case Brush:
if (m_brush != nullptr)
- m_brush->write(writer, QStringLiteral("brush"));
+ m_brush->write(writer, u"brush"_s);
break;
default:
@@ -5671,13 +5674,13 @@ void DomConnections::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("connection"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"connection"_s, Qt::CaseInsensitive)) {
auto *v = new DomConnection();
v->read(reader);
m_connection.append(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -5693,7 +5696,7 @@ void DomConnections::write(QXmlStreamWriter &writer, const QString &tagName) con
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("connections") : tagName.toLower());
for (DomConnection *v : m_connection)
- v->write(writer, QStringLiteral("connection"));
+ v->write(writer, u"connection"_s);
writer.writeEndElement();
}
@@ -5715,29 +5718,29 @@ void DomConnection::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("sender"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"sender"_s, Qt::CaseInsensitive)) {
setElementSender(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("signal"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"signal"_s, Qt::CaseInsensitive)) {
setElementSignal(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("receiver"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"receiver"_s, Qt::CaseInsensitive)) {
setElementReceiver(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("slot"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"slot"_s, Qt::CaseInsensitive)) {
setElementSlot(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("hints"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"hints"_s, Qt::CaseInsensitive)) {
auto *v = new DomConnectionHints();
v->read(reader);
setElementHints(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -5753,19 +5756,19 @@ void DomConnection::write(QXmlStreamWriter &writer, const QString &tagName) cons
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("connection") : tagName.toLower());
if (m_children & Sender)
- writer.writeTextElement(QStringLiteral("sender"), m_sender);
+ writer.writeTextElement(u"sender"_s, m_sender);
if (m_children & Signal)
- writer.writeTextElement(QStringLiteral("signal"), m_signal);
+ writer.writeTextElement(u"signal"_s, m_signal);
if (m_children & Receiver)
- writer.writeTextElement(QStringLiteral("receiver"), m_receiver);
+ writer.writeTextElement(u"receiver"_s, m_receiver);
if (m_children & Slot)
- writer.writeTextElement(QStringLiteral("slot"), m_slot);
+ writer.writeTextElement(u"slot"_s, m_slot);
if (m_children & Hints)
- m_hints->write(writer, QStringLiteral("hints"));
+ m_hints->write(writer, u"hints"_s);
writer.writeEndElement();
}
@@ -5848,13 +5851,13 @@ void DomConnectionHints::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("hint"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"hint"_s, Qt::CaseInsensitive)) {
auto *v = new DomConnectionHint();
v->read(reader);
m_hint.append(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -5870,7 +5873,7 @@ void DomConnectionHints::write(QXmlStreamWriter &writer, const QString &tagName)
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("connectionhints") : tagName.toLower());
for (DomConnectionHint *v : m_hint)
- v->write(writer, QStringLiteral("hint"));
+ v->write(writer, u"hint"_s);
writer.writeEndElement();
}
@@ -5888,26 +5891,26 @@ void DomConnectionHint::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("type")) {
+ if (name == u"type"_s) {
setAttributeType(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("x"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"x"_s, Qt::CaseInsensitive)) {
setElementX(reader.readElementText().toInt());
continue;
}
- if (!tag.compare(QLatin1String("y"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"y"_s, Qt::CaseInsensitive)) {
setElementY(reader.readElementText().toInt());
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -5923,13 +5926,13 @@ void DomConnectionHint::write(QXmlStreamWriter &writer, const QString &tagName)
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("connectionhint") : tagName.toLower());
if (hasAttributeType())
- writer.writeAttribute(QStringLiteral("type"), attributeType());
+ writer.writeAttribute(u"type"_s, attributeType());
if (m_children & X)
- writer.writeTextElement(QString(QLatin1Char('x')), QString::number(m_x));
+ writer.writeTextElement(u"x"_s, QString::number(m_x));
if (m_children & Y)
- writer.writeTextElement(QString(QLatin1Char('y')), QString::number(m_y));
+ writer.writeTextElement(u"y"_s, QString::number(m_y));
writer.writeEndElement();
}
@@ -5968,13 +5971,13 @@ void DomDesignerData::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("property"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"property"_s, Qt::CaseInsensitive)) {
auto *v = new DomProperty();
v->read(reader);
m_property.append(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -5990,7 +5993,7 @@ void DomDesignerData::write(QXmlStreamWriter &writer, const QString &tagName) co
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("designerdata") : tagName.toLower());
for (DomProperty *v : m_property)
- v->write(writer, QStringLiteral("property"));
+ v->write(writer, u"property"_s);
writer.writeEndElement();
}
@@ -6013,15 +6016,15 @@ void DomSlots::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("signal"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"signal"_s, Qt::CaseInsensitive)) {
m_signal.append(reader.readElementText());
continue;
}
- if (!tag.compare(QLatin1String("slot"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"slot"_s, Qt::CaseInsensitive)) {
m_slot.append(reader.readElementText());
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -6037,10 +6040,10 @@ void DomSlots::write(QXmlStreamWriter &writer, const QString &tagName) const
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("slots") : tagName.toLower());
for (const QString &v : m_signal)
- writer.writeTextElement(QStringLiteral("signal"), v);
+ writer.writeTextElement(u"signal"_s, v);
for (const QString &v : m_slot)
- writer.writeTextElement(QStringLiteral("slot"), v);
+ writer.writeTextElement(u"slot"_s, v);
writer.writeEndElement();
}
@@ -6071,19 +6074,19 @@ void DomPropertySpecifications::read(QXmlStreamReader &reader)
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- if (!tag.compare(QLatin1String("tooltip"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"tooltip"_s, Qt::CaseInsensitive)) {
auto *v = new DomPropertyToolTip();
v->read(reader);
m_tooltip.append(v);
continue;
}
- if (!tag.compare(QLatin1String("stringpropertyspecification"), Qt::CaseInsensitive)) {
+ if (!tag.compare(u"stringpropertyspecification"_s, Qt::CaseInsensitive)) {
auto *v = new DomStringPropertySpecification();
v->read(reader);
m_stringpropertyspecification.append(v);
continue;
}
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -6099,10 +6102,10 @@ void DomPropertySpecifications::write(QXmlStreamWriter &writer, const QString &t
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("propertyspecifications") : tagName.toLower());
for (DomPropertyToolTip *v : m_tooltip)
- v->write(writer, QStringLiteral("tooltip"));
+ v->write(writer, u"tooltip"_s);
for (DomStringPropertySpecification *v : m_stringpropertyspecification)
- v->write(writer, QStringLiteral("stringpropertyspecification"));
+ v->write(writer, u"stringpropertyspecification"_s);
writer.writeEndElement();
}
@@ -6126,18 +6129,18 @@ void DomPropertyToolTip::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("name")) {
+ if (name == u"name"_s) {
setAttributeName(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -6153,7 +6156,7 @@ void DomPropertyToolTip::write(QXmlStreamWriter &writer, const QString &tagName)
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("propertytooltip") : tagName.toLower());
if (hasAttributeName())
- writer.writeAttribute(QStringLiteral("name"), attributeName());
+ writer.writeAttribute(u"name"_s, attributeName());
writer.writeEndElement();
}
@@ -6165,26 +6168,26 @@ void DomStringPropertySpecification::read(QXmlStreamReader &reader)
const QXmlStreamAttributes &attributes = reader.attributes();
for (const QXmlStreamAttribute &attribute : attributes) {
const auto name = attribute.name();
- if (name == QLatin1String("name")) {
+ if (name == u"name"_s) {
setAttributeName(attribute.value().toString());
continue;
}
- if (name == QLatin1String("type")) {
+ if (name == u"type"_s) {
setAttributeType(attribute.value().toString());
continue;
}
- if (name == QLatin1String("notr")) {
+ if (name == u"notr"_s) {
setAttributeNotr(attribute.value().toString());
continue;
}
- reader.raiseError(QLatin1String("Unexpected attribute ") + name);
+ reader.raiseError("Unexpected attribute "_L1 + name);
}
while (!reader.hasError()) {
switch (reader.readNext()) {
case QXmlStreamReader::StartElement : {
const auto tag = reader.name();
- reader.raiseError(QLatin1String("Unexpected element ") + tag);
+ reader.raiseError("Unexpected element "_L1 + tag);
}
break;
case QXmlStreamReader::EndElement :
@@ -6200,13 +6203,13 @@ void DomStringPropertySpecification::write(QXmlStreamWriter &writer, const QStri
writer.writeStartElement(tagName.isEmpty() ? QStringLiteral("stringpropertyspecification") : tagName.toLower());
if (hasAttributeName())
- writer.writeAttribute(QStringLiteral("name"), attributeName());
+ writer.writeAttribute(u"name"_s, attributeName());
if (hasAttributeType())
- writer.writeAttribute(QStringLiteral("type"), attributeType());
+ writer.writeAttribute(u"type"_s, attributeType());
if (hasAttributeNotr())
- writer.writeAttribute(QStringLiteral("notr"), attributeNotr());
+ writer.writeAttribute(u"notr"_s, attributeNotr());
writer.writeEndElement();
}
diff --git a/src/designer/src/lib/uilib/ui4_p.h b/src/designer/src/lib/uilib/ui4_p.h
index 531f53abd..9f4816ec8 100644
--- a/src/designer/src/lib/uilib/ui4_p.h
+++ b/src/designer/src/lib/uilib/ui4_p.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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
//
// W A R N I N G
@@ -1681,6 +1645,16 @@ public:
inline bool hasElementKerning() const { return m_children & Kerning; }
void clearElementKerning();
+ inline QString elementHintingPreference() const { return m_hintingPreference; }
+ void setElementHintingPreference(const QString &a);
+ inline bool hasElementHintingPreference() const { return m_children & HintingPreference; }
+ void clearElementHintingPreference();
+
+ inline QString elementFontWeight() const { return m_fontWeight; }
+ void setElementFontWeight(const QString &a);
+ inline bool hasElementFontWeight() const { return m_children & FontWeight; }
+ void clearElementFontWeight();
+
private:
// child element data
@@ -1695,6 +1669,8 @@ private:
bool m_antialiasing = false;
QString m_styleStrategy;
bool m_kerning = false;
+ QString m_hintingPreference;
+ QString m_fontWeight;
enum Child {
Family = 1,
@@ -1706,7 +1682,9 @@ private:
StrikeOut = 64,
Antialiasing = 128,
StyleStrategy = 256,
- Kerning = 512
+ Kerning = 512,
+ HintingPreference = 1024,
+ FontWeight = 2048
};
};
diff --git a/src/designer/src/lib/uilib/uilib.pri b/src/designer/src/lib/uilib/uilib.pri
deleted file mode 100644
index 4d668eebe..000000000
--- a/src/designer/src/lib/uilib/uilib.pri
+++ /dev/null
@@ -1,32 +0,0 @@
-
-INCLUDEPATH += $$PWD
-
-DEFINES += QT_DESIGNER QT_USE_QSTRINGBUILDER
-
-QT += widgets
-qtHaveModule(openglwidgets): QT += openglwidgets
-QT_PRIVATE += uiplugin
-
-qtConfig(opengl): \
- QT_PRIVATE += opengl
-
-# Input
-HEADERS += \
- $$PWD/ui4_p.h \
- $$PWD/abstractformbuilder.h \
- $$PWD/formbuilder.h \
- $$PWD/properties_p.h \
- $$PWD/formbuilderextra_p.h \
- $$PWD/resourcebuilder_p.h \
- $$PWD/textbuilder_p.h
-
-SOURCES += \
- $$PWD/abstractformbuilder.cpp \
- $$PWD/formbuilder.cpp \
- $$PWD/ui4.cpp \
- $$PWD/properties.cpp \
- $$PWD/formbuilderextra.cpp \
- $$PWD/resourcebuilder.cpp \
- $$PWD/textbuilder.cpp
-
-OTHER_FILES += $$PWD/widgets.table
diff --git a/src/designer/src/lib/uilib/uilib_global.h b/src/designer/src/lib/uilib/uilib_global.h
index 8630b0af0..be40d96dd 100644
--- a/src/designer/src/lib/uilib/uilib_global.h
+++ b/src/designer/src/lib/uilib/uilib_global.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 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 UILIB_GLOBAL_H
#define UILIB_GLOBAL_H
diff --git a/src/designer/src/lib/uilib/widgets.table b/src/designer/src/lib/uilib/widgets.table
index 546197ebc..d1f9bea9d 100644
--- a/src/designer/src/lib/uilib/widgets.table
+++ b/src/designer/src/lib/uilib/widgets.table
@@ -27,8 +27,12 @@ DECLARE_WIDGET(QFrame, "")
DECLARE_WIDGET(QGroupBox, "")
#endif
#if QT_CONFIG(scrollarea)
+DECLARE_WIDGET(QAbstractScrollArea, "")
DECLARE_WIDGET(QScrollArea, "")
#endif
+#if QT_CONFIG(abstractslider)
+DECLARE_WIDGET(QAbstractSlider, "")
+#endif
#if QT_CONFIG(lcdnumber)
DECLARE_WIDGET(QLCDNumber, "")
#endif
@@ -73,6 +77,7 @@ DECLARE_WIDGET(QScrollBar, "")
DECLARE_WIDGET(QSlider, "")
#endif
#if QT_CONFIG(spinbox)
+DECLARE_WIDGET(QAbstractSpinBox, "")
DECLARE_WIDGET(QSpinBox, "")
DECLARE_WIDGET(QDoubleSpinBox, "")
#endif
diff --git a/src/designer/src/plugins/CMakeLists.txt b/src/designer/src/plugins/CMakeLists.txt
index 9534009be..35e549c3e 100644
--- a/src/designer/src/plugins/CMakeLists.txt
+++ b/src/designer/src/plugins/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from plugins.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
if(TARGET Qt::WebKitWidgets)
add_subdirectory(qwebview)
diff --git a/src/designer/src/plugins/activeqt/CMakeLists.txt b/src/designer/src/plugins/activeqt/CMakeLists.txt
index 0ac285f18..18b98a885 100644
--- a/src/designer/src/plugins/activeqt/CMakeLists.txt
+++ b/src/designer/src/plugins/activeqt/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from activeqt.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## QAxWidgetPlugin Plugin:
@@ -6,14 +7,14 @@
qt_internal_add_plugin(QAxWidgetPlugin
OUTPUT_NAME qaxwidget
- TYPE designer
+ PLUGIN_TYPE designer
SOURCES
qaxwidgetextrainfo.cpp qaxwidgetextrainfo.h
qaxwidgetplugin.cpp qaxwidgetplugin.h
qaxwidgetpropertysheet.cpp qaxwidgetpropertysheet.h
qaxwidgettaskmenu.cpp qaxwidgettaskmenu.h
qdesigneraxwidget.cpp qdesigneraxwidget.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::AxContainer
Qt::Core
Qt::Designer
@@ -22,5 +23,4 @@ qt_internal_add_plugin(QAxWidgetPlugin
Qt::Widgets
)
-#### Keys ignored in scope 1:.:.:activeqt.pro:<TRUE>:
# OTHER_FILES = "activeqt.json"
diff --git a/src/designer/src/plugins/activeqt/activeqt.pro b/src/designer/src/plugins/activeqt/activeqt.pro
deleted file mode 100644
index fb0928246..000000000
--- a/src/designer/src/plugins/activeqt/activeqt.pro
+++ /dev/null
@@ -1,19 +0,0 @@
-TARGET = qaxwidget
-QT += widgets designer-private axcontainer
-
-PLUGIN_CLASS_NAME = QAxWidgetPlugin
-include(../plugins.pri)
-
-SOURCES += qaxwidgetextrainfo.cpp \
-qaxwidgetplugin.cpp \
-qdesigneraxwidget.cpp \
-qaxwidgetpropertysheet.cpp \
-qaxwidgettaskmenu.cpp
-
-HEADERS += qaxwidgetextrainfo.h \
-qaxwidgetplugin.h \
-qdesigneraxwidget.h \
-qaxwidgetpropertysheet.h \
-qaxwidgettaskmenu.h
-
-OTHER_FILES += activeqt.json
diff --git a/src/designer/src/plugins/activeqt/qaxwidgetextrainfo.cpp b/src/designer/src/plugins/activeqt/qaxwidgetextrainfo.cpp
index 299fb466c..33cee7a36 100644
--- a/src/designer/src/plugins/activeqt/qaxwidgetextrainfo.cpp
+++ b/src/designer/src/plugins/activeqt/qaxwidgetextrainfo.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qaxwidgetextrainfo.h"
#include "qdesigneraxwidget.h"
@@ -65,11 +40,10 @@ bool QAxWidgetExtraInfo::saveWidgetExtraInfo(DomWidget *ui_widget)
/* Turn off standard setters and make sure "control" is in front,
* otherwise, previews will not work as the properties are not applied via
* the caching property sheet, them. */
- typedef QList<DomProperty *> DomPropertyList;
- DomPropertyList props = ui_widget->elementProperty();
- const int size = props.size();
+ QList<DomProperty *> props = ui_widget->elementProperty();
+ const qsizetype size = props.size();
const QString controlProperty = QLatin1String(QAxWidgetPropertySheet::controlPropertyName);
- for (int i = 0; i < size; i++) {
+ for (qsizetype i = 0; i < size; ++i) {
props.at(i)->setAttributeStdset(false);
if (i > 0 && props.at(i)->attributeName() == controlProperty) {
qSwap(props[0], props[i]);
diff --git a/src/designer/src/plugins/activeqt/qaxwidgetextrainfo.h b/src/designer/src/plugins/activeqt/qaxwidgetextrainfo.h
index 1f5369595..2ab390715 100644
--- a/src/designer/src/plugins/activeqt/qaxwidgetextrainfo.h
+++ b/src/designer/src/plugins/activeqt/qaxwidgetextrainfo.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 ACTIVEQT_EXTRAINFO_H
#define ACTIVEQT_EXTRAINFO_H
diff --git a/src/designer/src/plugins/activeqt/qaxwidgetplugin.cpp b/src/designer/src/plugins/activeqt/qaxwidgetplugin.cpp
index 9d28392c9..095305dee 100644
--- a/src/designer/src/plugins/activeqt/qaxwidgetplugin.cpp
+++ b/src/designer/src/plugins/activeqt/qaxwidgetplugin.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qaxwidgetplugin.h"
#include "qaxwidgetextrainfo.h"
@@ -41,6 +16,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
QAxWidgetPlugin::QAxWidgetPlugin(QObject *parent) :
QObject(parent)
{
@@ -48,12 +25,12 @@ QAxWidgetPlugin::QAxWidgetPlugin(QObject *parent) :
QString QAxWidgetPlugin::name() const
{
- return QStringLiteral("QAxWidget");
+ return u"QAxWidget"_s;
}
QString QAxWidgetPlugin::group() const
{
- return QStringLiteral("Containers");
+ return u"Containers"_s;
}
QString QAxWidgetPlugin::toolTip() const
@@ -68,7 +45,7 @@ QString QAxWidgetPlugin::whatsThis() const
QString QAxWidgetPlugin::includeFile() const
{
- return QStringLiteral("qaxwidget.h");
+ return u"qaxwidget.h"_s;
}
QIcon QAxWidgetPlugin::icon() const
diff --git a/src/designer/src/plugins/activeqt/qaxwidgetplugin.h b/src/designer/src/plugins/activeqt/qaxwidgetplugin.h
index 2d0cef249..1e2936c08 100644
--- a/src/designer/src/plugins/activeqt/qaxwidgetplugin.h
+++ b/src/designer/src/plugins/activeqt/qaxwidgetplugin.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 ACTIVEXPLUGIN_H
#define ACTIVEXPLUGIN_H
diff --git a/src/designer/src/plugins/activeqt/qaxwidgetpropertysheet.cpp b/src/designer/src/plugins/activeqt/qaxwidgetpropertysheet.cpp
index f6e2e2639..0762ba927 100644
--- a/src/designer/src/plugins/activeqt/qaxwidgetpropertysheet.cpp
+++ b/src/designer/src/plugins/activeqt/qaxwidgetpropertysheet.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qaxwidgetpropertysheet.h"
#include "qdesigneraxwidget.h"
@@ -39,10 +14,10 @@
#include <QtCore/qdebug.h>
#include <QtCore/qtimer.h>
-static const char *geometryPropertyC = "geometry";
-
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
const char *QAxWidgetPropertySheet::controlPropertyName = "control";
static QString designerPropertyToString(const QVariant &value)
@@ -55,7 +30,7 @@ static QString designerPropertyToString(const QVariant &value)
QAxWidgetPropertySheet::QAxWidgetPropertySheet(QDesignerAxWidget *object, QObject *parent) :
QDesignerPropertySheet(object, parent),
m_controlProperty(controlPropertyName),
- m_propertyGroup(QStringLiteral("QAxWidget"))
+ m_propertyGroup(u"QAxWidget"_s)
{
if (!axWidget()->loaded()) { // For some obscure reason....
const int controlIndex = QDesignerPropertySheet::indexOf(m_controlProperty);
@@ -73,7 +48,7 @@ bool QAxWidgetPropertySheet::isEnabled(int index) const
bool QAxWidgetPropertySheet::isVisible(int index) const
{
// classContext is ulong, which the property editor does not support
- return propertyName(index) != QLatin1String("classContext");
+ return propertyName(index) != "classContext"_L1;
}
bool QAxWidgetPropertySheet::dynamicPropertiesAllowed() const
@@ -90,7 +65,7 @@ QDesignerAxWidget *QAxWidgetPropertySheet::axWidget() const
bool QAxWidgetPropertySheet::reset(int index)
{
const QString name = propertyName(index);
- QMap<QString, QVariant>::iterator it = m_currentProperties.changedProperties.find(name);
+ const auto it = m_currentProperties.changedProperties.find(name);
if (it != m_currentProperties.changedProperties.end())
m_currentProperties.changedProperties.erase(it);
if (name != m_controlProperty)
@@ -166,7 +141,7 @@ void QAxWidgetPropertySheet::reloadPropertySheet(const struct SavedProperties &p
properties.widget);
bool foundGeometry = false;
- const QString geometryProperty = QLatin1String(geometryPropertyC);
+ const QString geometryProperty = "geometry"_L1;
for (auto i = properties.changedProperties.cbegin(), cend = properties.changedProperties.cend();
i != cend; ++i) {
const QString name = i.key();
diff --git a/src/designer/src/plugins/activeqt/qaxwidgetpropertysheet.h b/src/designer/src/plugins/activeqt/qaxwidgetpropertysheet.h
index 8bea29a4e..fcb769e33 100644
--- a/src/designer/src/plugins/activeqt/qaxwidgetpropertysheet.h
+++ b/src/designer/src/plugins/activeqt/qaxwidgetpropertysheet.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QACTIVEXPROPERTYSHEET_H
#define QACTIVEXPROPERTYSHEET_H
@@ -72,8 +47,7 @@ private:
const QString m_propertyGroup;
int m_controlIndex;
struct SavedProperties {
- typedef QMap<QString, QVariant> NamePropertyMap;
- NamePropertyMap changedProperties;
+ QVariantMap changedProperties;
QWidget *widget;
QString clsid;
} m_currentProperties;
@@ -81,7 +55,7 @@ private:
static void reloadPropertySheet(const struct SavedProperties &properties, QDesignerFormWindowInterface *formWin);
};
-typedef QDesignerPropertySheetFactory<QDesignerAxWidget, QAxWidgetPropertySheet> ActiveXPropertySheetFactory;
+using ActiveXPropertySheetFactory = QDesignerPropertySheetFactory<QDesignerAxWidget, QAxWidgetPropertySheet>;
QT_END_NAMESPACE
diff --git a/src/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp b/src/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp
index 3aecb74ab..03e2bcc8b 100644
--- a/src/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp
+++ b/src/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qaxwidgettaskmenu.h"
#include "qdesigneraxwidget.h"
@@ -49,6 +24,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
/* SetControlCommand: An undo commands that sets a control bypassing
Designer's property system which cannot handle the changing
of the 'control' property's index and other cached information
@@ -59,8 +36,8 @@ class SetControlCommand : public QUndoCommand
public:
SetControlCommand(QDesignerAxWidget *ax, QDesignerFormWindowInterface *core, const QString &newClsid = QString());
- virtual void redo() { apply(m_newClsid); }
- virtual void undo() { apply(m_oldClsid); }
+ virtual void redo() override { apply(m_newClsid); }
+ virtual void undo() override { apply(m_oldClsid); }
private:
bool apply(const QString &clsid);
@@ -139,7 +116,7 @@ void QAxWidgetTaskMenu::setActiveXControl()
if (dialog.exec() != QDialog::Accepted)
return;
- QUuid clsid = dialog.clsid();
+ const auto clsid = QUuid::fromString(dialog.clsid());
QString key;
IClassFactory2 *cf2 = nullptr;
@@ -163,10 +140,8 @@ void QAxWidgetTaskMenu::setActiveXControl()
Q_ASSERT(formWin != nullptr);
QString value = clsid.toString();
- if (!key.isEmpty()) {
- value += QLatin1Char(':');
- value += key;
- }
+ if (!key.isEmpty())
+ value += u':' + key;
formWin->commandHistory()->push(new SetControlCommand(m_axwidget, formWin, value));
}
diff --git a/src/designer/src/plugins/activeqt/qaxwidgettaskmenu.h b/src/designer/src/plugins/activeqt/qaxwidgettaskmenu.h
index ea76dcd5a..144a4a573 100644
--- a/src/designer/src/plugins/activeqt/qaxwidgettaskmenu.h
+++ b/src/designer/src/plugins/activeqt/qaxwidgettaskmenu.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QACTIVEXTASKMENU_H
#define QACTIVEXTASKMENU_H
@@ -56,7 +31,7 @@ private:
QList<QAction*> m_taskActions;
};
-typedef qdesigner_internal::ExtensionFactory<QDesignerTaskMenuExtension, QDesignerAxWidget, QAxWidgetTaskMenu> ActiveXTaskMenuFactory;
+using ActiveXTaskMenuFactory = qdesigner_internal::ExtensionFactory<QDesignerTaskMenuExtension, QDesignerAxWidget, QAxWidgetTaskMenu>;
QT_END_NAMESPACE
diff --git a/src/designer/src/plugins/activeqt/qdesigneraxwidget.cpp b/src/designer/src/plugins/activeqt/qdesigneraxwidget.cpp
index a787c0852..4b6b1ca8b 100644
--- a/src/designer/src/plugins/activeqt/qdesigneraxwidget.cpp
+++ b/src/designer/src/plugins/activeqt/qdesigneraxwidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qdesigneraxwidget.h"
diff --git a/src/designer/src/plugins/activeqt/qdesigneraxwidget.h b/src/designer/src/plugins/activeqt/qdesigneraxwidget.h
index 8f74bfaea..ba0a8a53a 100644
--- a/src/designer/src/plugins/activeqt/qdesigneraxwidget.h
+++ b/src/designer/src/plugins/activeqt/qdesigneraxwidget.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QACTIVEXPLUGINOBJECT_H
#define QACTIVEXPLUGINOBJECT_H
@@ -67,8 +42,8 @@ public:
void setControl(const QString &clsid);
QString control() const;
- QSize sizeHint() const;
- QSize minimumSizeHint() const;
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override;
bool loaded() { return (m_axobject != 0); }
@@ -80,7 +55,7 @@ public:
void setDrawFlags(unsigned f) { m_drawFlags = f; }
protected:
- void paintEvent(QPaintEvent *event);
+ void paintEvent(QPaintEvent *event) override;
QAxWidget *axobject() const { return m_axobject; }
private:
diff --git a/src/designer/src/plugins/plugins.pri b/src/designer/src/plugins/plugins.pri
deleted file mode 100644
index c4613d1a6..000000000
--- a/src/designer/src/plugins/plugins.pri
+++ /dev/null
@@ -1,5 +0,0 @@
-QT += designer
-
-PLUGIN_TYPE = designer
-CONFIG += tool_plugin
-load(qt_plugin)
diff --git a/src/designer/src/plugins/plugins.pro b/src/designer/src/plugins/plugins.pro
deleted file mode 100644
index 500a15345..000000000
--- a/src/designer/src/plugins/plugins.pro
+++ /dev/null
@@ -1,6 +0,0 @@
-TEMPLATE = subdirs
-
-# qtHaveModule(opengl): SUBDIRS += tools/view3d
-qtHaveModule(webkitwidgets): SUBDIRS += qwebview
-win32: qtHaveModule(axcontainer): SUBDIRS += activeqt
-qtHaveModule(quickwidgets): SUBDIRS += qquickwidget
diff --git a/src/designer/src/plugins/qquickwidget/CMakeLists.txt b/src/designer/src/plugins/qquickwidget/CMakeLists.txt
index 42363b1f5..1832a4e49 100644
--- a/src/designer/src/plugins/qquickwidget/CMakeLists.txt
+++ b/src/designer/src/plugins/qquickwidget/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qquickwidget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## QQuickWidgetPlugin Plugin:
@@ -6,10 +7,10 @@
qt_internal_add_plugin(QQuickWidgetPlugin
OUTPUT_NAME qquickwidget
- TYPE designer
+ PLUGIN_TYPE designer
SOURCES
qquickwidget_plugin.cpp qquickwidget_plugin.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::Designer
Qt::Gui
@@ -22,10 +23,9 @@ set(qquickwidget_plugin_resource_files
"images/qquickwidget.png"
)
-qt_add_resource(QQuickWidgetPlugin "qquickwidget_plugin"
+qt_internal_add_resource(QQuickWidgetPlugin "qquickwidget_plugin"
PREFIX
"/qt-project.org/qquickwidget"
FILES
${qquickwidget_plugin_resource_files}
)
-
diff --git a/src/designer/src/plugins/qquickwidget/qquickwidget.pro b/src/designer/src/plugins/qquickwidget/qquickwidget.pro
deleted file mode 100644
index bfdade7de..000000000
--- a/src/designer/src/plugins/qquickwidget/qquickwidget.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-TARGET = qquickwidget
-QT += widgets quickwidgets
-
-PLUGIN_CLASS_NAME = QQuickWidgetPlugin
-include(../plugins.pri)
-
-SOURCES += qquickwidget_plugin.cpp
-HEADERS += qquickwidget_plugin.h
-RESOURCES += qquickwidget_plugin.qrc
diff --git a/src/designer/src/plugins/qquickwidget/qquickwidget_plugin.cpp b/src/designer/src/plugins/qquickwidget/qquickwidget_plugin.cpp
index 8e1721a93..cfdf9d0e4 100644
--- a/src/designer/src/plugins/qquickwidget/qquickwidget_plugin.cpp
+++ b/src/designer/src/plugins/qquickwidget/qquickwidget_plugin.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qquickwidget_plugin.h"
@@ -35,8 +10,13 @@
#include <QtCore/qdebug.h>
#include <QtQuickWidgets/qquickwidget.h>
+#include <QtQuick/QQuickWindow>
+
+
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
QQuickWidgetPlugin::QQuickWidgetPlugin(QObject *parent)
: QObject(parent)
{
@@ -44,17 +24,17 @@ QQuickWidgetPlugin::QQuickWidgetPlugin(QObject *parent)
QString QQuickWidgetPlugin::name() const
{
- return QStringLiteral("QQuickWidget");
+ return u"QQuickWidget"_s;
}
QString QQuickWidgetPlugin::group() const
{
- return QStringLiteral("Display Widgets");
+ return u"Display Widgets"_s;
}
QString QQuickWidgetPlugin::toolTip() const
{
- return QStringLiteral("A widget for displaying a Qt Quick 2 user interface.");
+ return u"A widget for displaying a Qt Quick 2 user interface."_s;
}
QString QQuickWidgetPlugin::whatsThis() const
@@ -64,12 +44,12 @@ QString QQuickWidgetPlugin::whatsThis() const
QString QQuickWidgetPlugin::includeFile() const
{
- return QStringLiteral("<QtQuickWidgets/QQuickWidget>");
+ return u"<QtQuickWidgets/QQuickWidget>"_s;
}
QIcon QQuickWidgetPlugin::icon() const
{
- return QIcon(QStringLiteral(":/qt-project.org/qquickwidget/images/qquickwidget.png"));
+ return QIcon(u":/qt-project.org/qquickwidget/images/qquickwidget.png"_s);
}
bool QQuickWidgetPlugin::isContainer() const
@@ -100,22 +80,23 @@ void QQuickWidgetPlugin::initialize(QDesignerFormEditorInterface * /*core*/)
QString QQuickWidgetPlugin::domXml() const
{
- return QStringLiteral("\
- <ui language=\"c++\">\
- <widget class=\"QQuickWidget\" name=\"quickWidget\">\
- <property name=\"resizeMode\">\
- <enum>QQuickWidget::SizeRootObjectToView</enum>\
- </property>\
- <property name=\"geometry\">\
- <rect>\
- <x>0</x>\
- <y>0</y>\
- <width>300</width>\
- <height>200</height>\
- </rect>\
- </property>\
- </widget>\
- </ui>");
+ return QStringLiteral(R"(
+<ui language="c++">
+ <widget class="QQuickWidget" name="quickWidget">
+ <property name="resizeMode">
+ <enum>QQuickWidget::SizeRootObjectToView</enum>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>300</width>
+ <height>200</height>
+ </rect>
+ </property>
+ </widget>
+</ui>
+)");
}
void QQuickWidgetPlugin::sceneGraphError(QQuickWindow::SceneGraphError, const QString &message)
diff --git a/src/designer/src/plugins/qquickwidget/qquickwidget_plugin.h b/src/designer/src/plugins/qquickwidget/qquickwidget_plugin.h
index 009492547..464deb361 100644
--- a/src/designer/src/plugins/qquickwidget/qquickwidget_plugin.h
+++ b/src/designer/src/plugins/qquickwidget/qquickwidget_plugin.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QQUICKWIDGET_PLUGIN_H
#define QQUICKWIDGET_PLUGIN_H
diff --git a/src/designer/src/plugins/qquickwidget/qquickwidget_plugin.qrc b/src/designer/src/plugins/qquickwidget/qquickwidget_plugin.qrc
deleted file mode 100644
index e518aa2d9..000000000
--- a/src/designer/src/plugins/qquickwidget/qquickwidget_plugin.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
- <qresource prefix="/qt-project.org/qquickwidget">
- <file>images/qquickwidget.png</file>
- </qresource>
-</RCC>
diff --git a/src/designer/src/plugins/qwebview/CMakeLists.txt b/src/designer/src/plugins/qwebview/CMakeLists.txt
index b87a1c05c..f6eeb16e1 100644
--- a/src/designer/src/plugins/qwebview/CMakeLists.txt
+++ b/src/designer/src/plugins/qwebview/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qwebview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## QWebViewPlugin Plugin:
@@ -6,10 +7,10 @@
qt_internal_add_plugin(QWebViewPlugin
OUTPUT_NAME qwebview
- TYPE designer
+ PLUGIN_TYPE designer
SOURCES
qwebview_plugin.cpp qwebview_plugin.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::Designer
Qt::Gui
@@ -22,13 +23,9 @@ set(qwebview_plugin_resource_files
"images/qwebview.png"
)
-qt_add_resource(QWebViewPlugin "qwebview_plugin"
+qt_internal_add_resource(QWebViewPlugin "qwebview_plugin"
PREFIX
"/qt-project.org/qwebview"
FILES
${qwebview_plugin_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:qwebview.pro:<TRUE>:
-# OTHER_FILES = "qwebview.json"
diff --git a/src/designer/src/plugins/qwebview/qwebview.pro b/src/designer/src/plugins/qwebview/qwebview.pro
deleted file mode 100644
index e9268b559..000000000
--- a/src/designer/src/plugins/qwebview/qwebview.pro
+++ /dev/null
@@ -1,10 +0,0 @@
-TARGET = qwebview
-QT += widgets webkitwidgets
-
-PLUGIN_CLASS_NAME = QWebViewPlugin
-include(../plugins.pri)
-
-SOURCES += qwebview_plugin.cpp
-HEADERS += qwebview_plugin.h
-RESOURCES += qwebview_plugin.qrc
-OTHER_FILES += qwebview.json
diff --git a/src/designer/src/plugins/qwebview/qwebview_plugin.cpp b/src/designer/src/plugins/qwebview/qwebview_plugin.cpp
index 5f72a6185..123771497 100644
--- a/src/designer/src/plugins/qwebview/qwebview_plugin.cpp
+++ b/src/designer/src/plugins/qwebview/qwebview_plugin.cpp
@@ -1,40 +1,17 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qwebview_plugin.h"
#include <QtCore/qplugin.h>
#include <QWebView>
-static const char *toolTipC = "A widget for displaying a web page, from the Qt WebKit Widgets module.";
-
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
+static constexpr auto toolTipC = "A widget for displaying a web page, from the Qt WebKit Widgets module."_L1;
+
QWebViewPlugin::QWebViewPlugin(QObject *parent) :
QObject(parent),
m_initialized(false)
@@ -43,12 +20,12 @@ QWebViewPlugin::QWebViewPlugin(QObject *parent) :
QString QWebViewPlugin::name() const
{
- return QStringLiteral("QWebView");
+ return u"QWebView"_s;
}
QString QWebViewPlugin::group() const
{
- return QStringLiteral("Display Widgets");
+ return u"Display Widgets"_s;
}
QString QWebViewPlugin::toolTip() const
@@ -63,12 +40,12 @@ QString QWebViewPlugin::whatsThis() const
QString QWebViewPlugin::includeFile() const
{
- return QStringLiteral("<QtWebKitWidgets/QWebView>");
+ return u"<QtWebKitWidgets/QWebView>"_s;
}
QIcon QWebViewPlugin::icon() const
{
- return QIcon(QStringLiteral(":/qt-project.org/qwebview/images/qwebview.png"));
+ return QIcon(u":/qt-project.org/qwebview/images/qwebview.png"_s);
}
bool QWebViewPlugin::isContainer() const
@@ -96,24 +73,25 @@ void QWebViewPlugin::initialize(QDesignerFormEditorInterface * /*core*/)
QString QWebViewPlugin::domXml() const
{
- return QStringLiteral("\
- <ui language=\"c++\">\
- <widget class=\"QWebView\" name=\"webView\">\
- <property name=\"url\">\
- <url>\
- <string>about:blank</string>\
- </url>\
- </property>\
- <property name=\"geometry\">\
- <rect>\
- <x>0</x>\
- <y>0</y>\
- <width>300</width>\
- <height>200</height>\
- </rect>\
- </property>\
- </widget>\
- </ui>");
+ return QStringLiteral(R"(
+<ui language="c++">
+ <widget class="QWebView" name="webView">
+ <property name="url">
+ <url>
+ <string>about:blank</string>
+ </url>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>300</width>
+ <height>200</height>
+ </rect>
+ </property>
+ </widget>
+</ui>
+)");
}
QT_END_NAMESPACE
diff --git a/src/designer/src/plugins/qwebview/qwebview_plugin.h b/src/designer/src/plugins/qwebview/qwebview_plugin.h
index 53d6c9af7..80e983fe9 100644
--- a/src/designer/src/plugins/qwebview/qwebview_plugin.h
+++ b/src/designer/src/plugins/qwebview/qwebview_plugin.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QWEBPAGE_PLUGIN_H
#define QWEBPAGE_PLUGIN_H
diff --git a/src/designer/src/plugins/qwebview/qwebview_plugin.qrc b/src/designer/src/plugins/qwebview/qwebview_plugin.qrc
deleted file mode 100644
index 828cab03c..000000000
--- a/src/designer/src/plugins/qwebview/qwebview_plugin.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
- <qresource prefix="/qt-project.org/qwebview">
- <file>images/qwebview.png</file>
- </qresource>
-</RCC>
diff --git a/src/designer/src/plugins/tools/view3d/CMakeLists.txt b/src/designer/src/plugins/tools/view3d/CMakeLists.txt
index d7d43a5ac..aa6140519 100644
--- a/src/designer/src/plugins/tools/view3d/CMakeLists.txt
+++ b/src/designer/src/plugins/tools/view3d/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from view3d.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## QView3DPlugin Plugin:
@@ -6,13 +7,13 @@
qt_internal_add_plugin(QView3DPlugin
OUTPUT_NAME view3d
- TYPE designer
+ PLUGIN_TYPE designer
SOURCES
view3d.cpp view3d.h
view3d_global.h
view3d_plugin.cpp view3d_plugin.h
view3d_tool.cpp view3d_tool.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::Designer
Qt::Gui
diff --git a/src/designer/src/plugins/tools/view3d/view3d.cpp b/src/designer/src/plugins/tools/view3d/view3d.cpp
index 3ae8bdf47..e25880e7f 100644
--- a/src/designer/src/plugins/tools/view3d/view3d.cpp
+++ b/src/designer/src/plugins/tools/view3d/view3d.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "abstractformeditor.h"
#include "abstractmetadatabase.h"
@@ -152,7 +127,7 @@ void QView3DWidget::addTexture(QWidget *w, const QPixmap &pm)
void QView3DWidget::addWidget(int depth, QWidget *widget)
{
- TextureMap::const_iterator it = m_texture_map.find(widget);
+ const auto it = m_texture_map.find(widget);
Q_ASSERT(it != m_texture_map.end());
makeCurrent();
@@ -188,7 +163,7 @@ void QView3DWidget::clear()
{
makeCurrent();
glDeleteLists(m_form_list_id, 1);
- for (TextureMap::iterator it = m_texture_map.begin(), end = m_texture_map.end(); it != end; ++it)
+ for (auto it = m_texture_map.begin(), end = m_texture_map.end(); it != end; ++it)
glDeleteTextures(1, &(it.value()));
m_texture_map.clear();
m_widget_name_map.clear();
@@ -399,9 +374,8 @@ static void grabWidget_helper(QWidget *widget, QPixmap &res, QPixmap &buf,
pt.drawPixmap(offset.x(), offset.y(), buf, 0, 0, r.width(), r.height());
}
- const QObjectList children = widget->children();
- for (int i = 0; i < children.size(); ++i) {
- QWidget *child = qobject_cast<QWidget*>(children.at(i));
+ for (auto *o : widget->children()) {
+ QWidget *child = qobject_cast<QWidget*>(o);
if (child == 0 || child->isWindow())
continue;
if (child->isHidden() || !child->geometry().intersects(r))
diff --git a/src/designer/src/plugins/tools/view3d/view3d.h b/src/designer/src/plugins/tools/view3d/view3d.h
index e46a7dedf..8dd0318df 100644
--- a/src/designer/src/plugins/tools/view3d/view3d.h
+++ b/src/designer/src/plugins/tools/view3d/view3d.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 VIEW3D_H
#define VIEW3D_H
diff --git a/src/designer/src/plugins/tools/view3d/view3d.pro b/src/designer/src/plugins/tools/view3d/view3d.pro
deleted file mode 100644
index 81f6a9384..000000000
--- a/src/designer/src/plugins/tools/view3d/view3d.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-QT += opengl widgets
-TARGET = view3d
-
-PLUGIN_CLASS_NAME = QView3DPlugin
-include(../../plugins.pri)
-
-SOURCES += view3d.cpp view3d_tool.cpp view3d_plugin.cpp
-HEADERS += view3d.h view3d_tool.h view3d_plugin.h view3d_global.h
diff --git a/src/designer/src/plugins/tools/view3d/view3d_global.h b/src/designer/src/plugins/tools/view3d/view3d_global.h
index 2f4c892d0..3d516744a 100644
--- a/src/designer/src/plugins/tools/view3d/view3d_global.h
+++ b/src/designer/src/plugins/tools/view3d/view3d_global.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 VIEW3D_GLOBAL_H
#define VIEW3D_GLOBAL_H
@@ -43,6 +18,6 @@ QT_BEGIN_NAMESPACE
#define VIEW3D_EXPORT
#endif
-#endif // VIEW3D_GLOBAL_H
-
QT_END_NAMESPACE
+
+#endif // VIEW3D_GLOBAL_H
diff --git a/src/designer/src/plugins/tools/view3d/view3d_plugin.cpp b/src/designer/src/plugins/tools/view3d/view3d_plugin.cpp
index 3bf356e56..c530c88c7 100644
--- a/src/designer/src/plugins/tools/view3d/view3d_plugin.cpp
+++ b/src/designer/src/plugins/tools/view3d/view3d_plugin.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "view3d_plugin.h"
#include "view3d_tool.h"
diff --git a/src/designer/src/plugins/tools/view3d/view3d_plugin.h b/src/designer/src/plugins/tools/view3d/view3d_plugin.h
index 9678609a1..cec8ea7fc 100644
--- a/src/designer/src/plugins/tools/view3d/view3d_plugin.h
+++ b/src/designer/src/plugins/tools/view3d/view3d_plugin.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 Q3VIEW3D_PLUGIN_H
#define Q3VIEW3D_PLUGIN_H
@@ -68,6 +43,6 @@ private:
QAction *m_action;
};
-#endif // QVIEW3D_PLUGIN_H
-
QT_END_NAMESPACE
+
+#endif // QVIEW3D_PLUGIN_H
diff --git a/src/designer/src/plugins/tools/view3d/view3d_tool.cpp b/src/designer/src/plugins/tools/view3d/view3d_tool.cpp
index fe52d6aed..56c5d773d 100644
--- a/src/designer/src/plugins/tools/view3d/view3d_tool.cpp
+++ b/src/designer/src/plugins/tools/view3d/view3d_tool.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "view3d_tool.h"
diff --git a/src/designer/src/plugins/tools/view3d/view3d_tool.h b/src/designer/src/plugins/tools/view3d/view3d_tool.h
index c91719822..6c408dd81 100644
--- a/src/designer/src/plugins/tools/view3d/view3d_tool.h
+++ b/src/designer/src/plugins/tools/view3d/view3d_tool.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 VIEW3D_TOOL_H
#define VIEW3D_TOOL_H
@@ -60,6 +35,6 @@ private:
QAction *m_action;
};
-#endif // VIEW3D_TOOL_H
-
QT_END_NAMESPACE
+
+#endif // VIEW3D_TOOL_H
diff --git a/src/designer/src/src.pro b/src/designer/src/src.pro
deleted file mode 100644
index 79e9e64ee..000000000
--- a/src/designer/src/src.pro
+++ /dev/null
@@ -1,28 +0,0 @@
-TEMPLATE = subdirs
-
-SUBDIRS = \
- uiplugin \
- uitools
-
-qtConfig(process) {
- SUBDIRS += \
- lib \
- components \
- designer
-
- lib.depends = uiplugin
- components.depends = lib
- designer.depends = components
- plugins.depends = lib
-
- contains(QT_CONFIG, shared): SUBDIRS += plugins
-}
-
-uitools.depends = uiplugin
-
-qtNomakeTools( \
- lib \
- components \
- designer \
- plugins \
-)
diff --git a/src/designer/src/uiplugin/.prev_CMakeLists.txt b/src/designer/src/uiplugin/.prev_CMakeLists.txt
deleted file mode 100644
index 01cddfea5..000000000
--- a/src/designer/src/uiplugin/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated from uiplugin.pro.
-
-#####################################################################
-## UiPlugin Module:
-#####################################################################
-
-qt_add_module(UiPlugin
- NO_PRIVATE_MODULE
- HEADER_MODULE
- QMAKE_MODULE_CONFIG designer_defines
- PUBLIC_LIBRARIES
- Qt::Core
- Qt::Gui
- Qt::Widgets
-)
-
-#### Keys ignored in scope 1:.:.:uiplugin.pro:<TRUE>:
-# MODULE_CONFIG = "designer_defines"
diff --git a/src/designer/src/uiplugin/CMakeLists.txt b/src/designer/src/uiplugin/CMakeLists.txt
deleted file mode 100644
index fb5740ed6..000000000
--- a/src/designer/src/uiplugin/CMakeLists.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-# Generated from uiplugin.pro.
-
-#####################################################################
-## UiPlugin Module:
-#####################################################################
-
-qt_add_module(UiPlugin
- NO_PRIVATE_MODULE
- HEADER_MODULE
- QMAKE_MODULE_CONFIG designer_defines
- PUBLIC_LIBRARIES
- Qt::Core
- Qt::Gui
- Qt::Widgets
-)
-
-# special case begin
-set(is_plugin "$<TARGET_PROPERTY:QT_PLUGIN_CLASS_NAME>")
-target_compile_definitions(
- UiPlugin
- INTERFACE
- $<$<BOOL:${is_plugin}>:QDESIGNER_EXPORT_WIDGETS>
-)
-# special case end
-
-#### Keys ignored in scope 1:.:.:uiplugin.pro:<TRUE>:
-# MODULE_CONFIG = "designer_defines"
diff --git a/src/designer/src/uiplugin/customwidget.h b/src/designer/src/uiplugin/customwidget.h
deleted file mode 100644
index efb392009..000000000
--- a/src/designer/src/uiplugin/customwidget.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef CUSTOMWIDGET_H
-#define CUSTOMWIDGET_H
-
-#include <QtCore/qobject.h>
-#include <QtCore/qstring.h>
-#include <QtGui/qicon.h>
-
-QT_BEGIN_NAMESPACE
-
-class QWidget;
-class QDesignerFormEditorInterface;
-
-class QDesignerCustomWidgetInterface
-{
-public:
- virtual ~QDesignerCustomWidgetInterface() {}
-
- virtual QString name() const = 0;
- virtual QString group() const = 0;
- virtual QString toolTip() const = 0;
- virtual QString whatsThis() const = 0;
- virtual QString includeFile() const = 0;
- virtual QIcon icon() const = 0;
-
- virtual bool isContainer() const = 0;
-
- virtual QWidget *createWidget(QWidget *parent) = 0;
-
- virtual bool isInitialized() const { return false; }
- virtual void initialize(QDesignerFormEditorInterface *core) { Q_UNUSED(core); }
-
- virtual QString domXml() const
- {
- return QString::fromUtf8("<widget class=\"%1\" name=\"%2\"/>")
- .arg(name()).arg(name().toLower());
- }
-
- virtual QString codeTemplate() const { return QString(); }
-};
-
-#define QDesignerCustomWidgetInterface_iid "org.qt-project.QDesignerCustomWidgetInterface"
-
-Q_DECLARE_INTERFACE(QDesignerCustomWidgetInterface, QDesignerCustomWidgetInterface_iid)
-
-class QDesignerCustomWidgetCollectionInterface
-{
-public:
- virtual ~QDesignerCustomWidgetCollectionInterface() {}
-
- virtual QList<QDesignerCustomWidgetInterface*> customWidgets() const = 0;
-};
-
-#define QDesignerCustomWidgetCollectionInterface_iid "org.qt-project.Qt.QDesignerCustomWidgetCollectionInterface"
-
-Q_DECLARE_INTERFACE(QDesignerCustomWidgetCollectionInterface, QDesignerCustomWidgetCollectionInterface_iid)
-
-QT_END_NAMESPACE
-
-#endif // CUSTOMWIDGET_H
diff --git a/src/designer/src/uiplugin/customwidget.qdoc b/src/designer/src/uiplugin/customwidget.qdoc
deleted file mode 100644
index a63e0db7c..000000000
--- a/src/designer/src/uiplugin/customwidget.qdoc
+++ /dev/null
@@ -1,293 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \class QDesignerCustomWidgetInterface
-
- \brief The QDesignerCustomWidgetInterface class enables Qt Designer
- to access and construct custom widgets.
-
- \inmodule QtDesigner
-
- QDesignerCustomWidgetInterface provides a custom widget with an
- interface. The class contains a set of functions that must be subclassed
- to return basic information about the widget, such as its class name and
- the name of its header file. Other functions must be implemented to
- initialize the plugin when it is loaded, and to construct instances of
- the custom widget for \QD to use.
-
- When implementing a custom widget you must subclass
- QDesignerCustomWidgetInterface to expose your widget to \QD. For
- example, this is the declaration for the plugin used in the
- \l{Custom Widget Plugin Example}{Custom Widget Plugin example} that
- enables an analog clock custom widget to be used by \QD:
-
- \snippet customwidgetplugin/customwidgetplugin.h 0
-
- Note that the only part of the class definition that is specific
- to this particular custom widget is the class name. In addition,
- since we are implementing an interface, we must ensure that it's
- made known to the meta object system using the Q_INTERFACES()
- macro. This enables \QD to use the qobject_cast() function to
- query for supported interfaces using nothing but a QObject
- pointer.
-
- After \QD loads a custom widget plugin, it calls the interface's
- initialize() function to enable it to set up any resources that it
- may need. This function is called with a QDesignerFormEditorInterface
- parameter that provides the plugin with a gateway to all of \QD's API.
-
- \QD constructs instances of the custom widget by calling the plugin's
- createWidget() function with a suitable parent widget. Plugins must
- construct and return an instance of a custom widget with the specified
- parent widget.
-
- Exporting your custom widget plugin to \QD using the Q_PLUGIN_METADATA()
- macro. For example, if a library called \c libcustomwidgetplugin.so
- (on Unix) or \c libcustomwidget.dll (on Windows) contains a widget
- class called \c MyCustomWidget, we can export it by adding the
- following line to the file containing the plugin header:
-
- \snippet plugins/doc_src_qtdesigner.cpp 14
-
- This macro ensures that \QD can access and construct the custom widget.
- Without this macro, there is no way for \QD to use it.
-
- When implementing a custom widget plugin, you build it as a
- separate library. If you want to include several custom widget
- plugins in the same library, you must in addition subclass
- QDesignerCustomWidgetCollectionInterface.
-
- \warning If your custom widget plugin contains QVariant
- properties, be aware that only the following \l
- {QVariant::Type}{types} are supported:
-
- \list
- \li QVariant::ByteArray
- \li QVariant::Bool
- \li QVariant::Color
- \li QVariant::Cursor
- \li QVariant::Date
- \li QVariant::DateTime
- \li QVariant::Double
- \li QVariant::Int
- \li QVariant::Point
- \li QVariant::Rect
- \li QVariant::Size
- \li QVariant::SizePolicy
- \li QVariant::String
- \li QVariant::Time
- \li QVariant::UInt
- \endlist
-
- For a complete example using the QDesignerCustomWidgetInterface
- class, see the \l {customwidgetplugin}{Custom Widget
- Example}. The example shows how to create a custom widget plugin
- for \QD.
-
- \sa QDesignerCustomWidgetCollectionInterface, {Creating Custom Widgets for Qt Designer}
-*/
-
-/*!
- \fn QDesignerCustomWidgetInterface::~QDesignerCustomWidgetInterface()
-
- Destroys the custom widget interface.
-*/
-
-/*!
- \fn QString QDesignerCustomWidgetInterface::name() const
-
- Returns the class name of the custom widget supplied by the interface.
-
- The name returned \e must be identical to the class name used for the
- custom widget.
-*/
-
-/*!
- \fn QString QDesignerCustomWidgetInterface::group() const
-
- Returns the name of the group to which the custom widget belongs.
-*/
-
-/*!
- \fn QString QDesignerCustomWidgetInterface::toolTip() const
-
- Returns a short description of the widget that can be used by \QD
- in a tool tip.
-*/
-
-/*!
- \fn QString QDesignerCustomWidgetInterface::whatsThis() const
-
- Returns a description of the widget that can be used by \QD in
- "What's This?" help for the widget.
-*/
-
-/*!
- \fn QString QDesignerCustomWidgetInterface::includeFile() const
-
- Returns the path to the include file that \l uic uses when
- creating code for the custom widget.
-*/
-
-/*!
- \fn QIcon QDesignerCustomWidgetInterface::icon() const
-
- Returns the icon used to represent the custom widget in \QD's
- widget box.
-*/
-
-/*!
- \fn bool QDesignerCustomWidgetInterface::isContainer() const
-
- Returns true if the custom widget is intended to be used as a
- container; otherwise returns false.
-
- Most custom widgets are not used to hold other widgets, so their
- implementations of this function will return false, but custom
- containers will return true to ensure that they behave correctly
- in \QD.
-*/
-
-/*!
- \fn QWidget *QDesignerCustomWidgetInterface::createWidget(QWidget *parent)
-
- Returns a new instance of the custom widget, with the given \a
- parent.
-*/
-
-/*!
- \fn bool QDesignerCustomWidgetInterface::isInitialized() const
-
- Returns true if the widget has been initialized; otherwise returns
- false.
-
- \sa initialize()
-*/
-
-/*!
- \fn void QDesignerCustomWidgetInterface::initialize(QDesignerFormEditorInterface *formEditor)
-
- Initializes the widget for use with the specified \a formEditor
- interface.
-
- \sa isInitialized()
-*/
-
-/*!
- \fn QString QDesignerCustomWidgetInterface::domXml() const
-
- Returns the XML that is used to describe the custom widget's
- properties to \QD.
-*/
-
-/*!
- \fn QString QDesignerCustomWidgetInterface::codeTemplate() const
-
- This function is reserved for future use by \QD.
-
- \omit
- Returns the code template that \QD includes in forms that contain
- the custom widget when they are saved.
- \endomit
-*/
-
-/*!
- \macro QDESIGNER_WIDGET_EXPORT
- \relates QDesignerCustomWidgetInterface
- \since 4.1
-
- This macro is used when defining custom widgets to ensure that they are
- correctly exported from plugins for use with \QD.
-
- On some platforms, the symbols required by \QD to create new widgets
- are removed from plugins by the build system, making them unusable.
- Using this macro ensures that the symbols are retained on those platforms,
- and has no side effects on other platforms.
-
- For example, the \l{worldtimeclockplugin}{World Time Clock Plugin}
- example exports a custom widget class with the following declaration:
-
- \snippet worldtimeclockplugin/worldtimeclock.h 0
- \dots
- \snippet worldtimeclockplugin/worldtimeclock.h 2
-
- \sa {Creating Custom Widgets for Qt Designer}
-*/
-
-
-
-
-
-/*!
- \class QDesignerCustomWidgetCollectionInterface
-
- \brief The QDesignerCustomWidgetCollectionInterface class allows
- you to include several custom widgets in one single library.
-
- \inmodule QtDesigner
-
- When implementing a custom widget plugin, you build it as a
- separate library. If you want to include several custom widget
- plugins in the same library, you must in addition subclass
- QDesignerCustomWidgetCollectionInterface.
-
- QDesignerCustomWidgetCollectionInterface contains one single
- function returning a list of the collection's
- QDesignerCustomWidgetInterface objects. For example, if you have
- several custom widgets \c CustomWidgetOne, \c CustomWidgetTwo and
- \c CustomWidgetThree, the class definition may look like this:
-
- \snippet plugins/doc_src_qtdesigner.cpp 12
-
- In the class constructor you add the interfaces to your custom
- widgets to the list which you return in the customWidgets()
- function:
-
- \snippet plugins/doc_src_qtdesigner.cpp 13
-
- Note that instead of exporting each custom widget plugin using the
- Q_PLUGIN_METADATA() macro, you export the entire collection. The
- Q_PLUGIN_METADATA() macro ensures that \QD can access and construct
- the custom widgets. Without this macro, there is no way for \QD to
- use them.
-
- \sa QDesignerCustomWidgetInterface, {Creating Custom Widgets for
- Qt Designer}
-*/
-
-/*!
- \fn QDesignerCustomWidgetCollectionInterface::~QDesignerCustomWidgetCollectionInterface() {
-
- Destroys the custom widget collection interface.
-*/
-
-/*!
- \fn QList<QDesignerCustomWidgetInterface*> QDesignerCustomWidgetCollectionInterface::customWidgets() const
-
- Returns a list of interfaces to the collection's custom widgets.
-*/
diff --git a/src/designer/src/uiplugin/qdesignerexportwidget.h b/src/designer/src/uiplugin/qdesignerexportwidget.h
deleted file mode 100644
index ea62450ff..000000000
--- a/src/designer/src/uiplugin/qdesignerexportwidget.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Designer of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDESIGNEREXPORTWIDGET_H
-#define QDESIGNEREXPORTWIDGET_H
-
-#include <QtCore/qglobal.h>
-
-QT_BEGIN_NAMESPACE
-
-#if 0
-// pragma for syncqt, don't remove.
-#pragma qt_class(QDesignerExportWidget)
-#endif
-
-#if defined(QDESIGNER_EXPORT_WIDGETS)
-# define QDESIGNER_WIDGET_EXPORT Q_DECL_EXPORT
-#else
-# define QDESIGNER_WIDGET_EXPORT Q_DECL_IMPORT
-#endif
-
-QT_END_NAMESPACE
-
-#endif //QDESIGNEREXPORTWIDGET_H
diff --git a/src/designer/src/uiplugin/uiplugin.pro b/src/designer/src/uiplugin/uiplugin.pro
deleted file mode 100644
index 7c41ea78c..000000000
--- a/src/designer/src/uiplugin/uiplugin.pro
+++ /dev/null
@@ -1,6 +0,0 @@
-TARGET = QtUiPlugin
-CONFIG += no_private_module header_module
-QT += widgets
-
-MODULE_CONFIG = designer_defines
-load(qt_module)
diff --git a/src/designer/src/uitools/CMakeLists.txt b/src/designer/src/uitools/CMakeLists.txt
deleted file mode 100644
index c377da211..000000000
--- a/src/designer/src/uitools/CMakeLists.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-# Generated from uitools.pro.
-
-#####################################################################
-## UiTools Module:
-#####################################################################
-
-qt_add_module(UiTools
- SOURCES
- ../lib/uilib/abstractformbuilder.cpp ../lib/uilib/abstractformbuilder.h
- ../lib/uilib/formbuilder.cpp ../lib/uilib/formbuilder.h
- ../lib/uilib/formbuilderextra.cpp ../lib/uilib/formbuilderextra_p.h
- ../lib/uilib/properties.cpp ../lib/uilib/properties_p.h
- ../lib/uilib/resourcebuilder.cpp ../lib/uilib/resourcebuilder_p.h
- ../lib/uilib/textbuilder.cpp ../lib/uilib/textbuilder_p.h
- ../lib/uilib/ui4.cpp ../lib/uilib/ui4_p.h
- quiloader.cpp quiloader.h
- DEFINES
- QFORMINTERNAL_NAMESPACE
- QT_DESIGNER
- QT_DESIGNER_STATIC
- QT_USE_QSTRINGBUILDER
- INCLUDE_DIRECTORIES
- ../lib/uilib
- LIBRARIES
- Qt::UiPlugin
- PUBLIC_LIBRARIES
- Qt::Core
- Qt::Gui
- Qt::Widgets
-)
-
-## Scopes:
-#####################################################################
-
-qt_extend_target(UiTools CONDITION TARGET Qt::OpenGLWidgets
- PUBLIC_LIBRARIES
- Qt::OpenGLWidgets
-)
-
-qt_extend_target(UiTools CONDITION QT_FEATURE_opengl
- LIBRARIES
- Qt::OpenGL
-)
-qt_add_docs(UiTools
- doc/qtuitools.qdocconf
-)
-
diff --git a/src/designer/src/uitools/doc/images/textfinder-example-find.png b/src/designer/src/uitools/doc/images/textfinder-example-find.png
deleted file mode 100644
index 886bbc110..000000000
--- a/src/designer/src/uitools/doc/images/textfinder-example-find.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/uitools/doc/images/textfinder-example-find2.png b/src/designer/src/uitools/doc/images/textfinder-example-find2.png
deleted file mode 100644
index 908f11409..000000000
--- a/src/designer/src/uitools/doc/images/textfinder-example-find2.png
+++ /dev/null
Binary files differ
diff --git a/src/designer/src/uitools/doc/qtuitools.qdocconf b/src/designer/src/uitools/doc/qtuitools.qdocconf
deleted file mode 100644
index a6223a548..000000000
--- a/src/designer/src/uitools/doc/qtuitools.qdocconf
+++ /dev/null
@@ -1,43 +0,0 @@
-include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
-include($QT_INSTALL_DOCS/config/exampleurl-qttools.qdocconf)
-
-project = QtUiTools
-description = Qt UI Tools Reference Documentation
-version = $QT_VERSION
-
-examplesinstallpath = uitools
-
-qhp.projects = QtUiTools
-
-qhp.QtUiTools.file = qtuitools.qhp
-qhp.QtUiTools.namespace = org.qt-project.qtuitools.$QT_VERSION_TAG
-qhp.QtUiTools.virtualFolder = qtuitools
-qhp.QtUiTools.indexTitle = Qt UI Tools
-qhp.QtHelp.indexRoot =
-
-qhp.QtUiTools.filterAttributes = qtuitools $QT_VERSION tools designer qtrefdoc
-qhp.QtUiTools.customFilters.QtUiTools.name = QtUiTools $QT_VERSION
-qhp.QtUiTools.customFilters.QtUiTools.filterAttributes = qtuitools $QT_VERSION
-qhp.QtUiTools.subprojects = classes
-qhp.QtUiTools.subprojects.classes.title = C++ Classes
-qhp.QtUiTools.subprojects.classes.indexTitle = Qt UI Tools C++ Classes
-qhp.QtUiTools.subprojects.classes.selectors = class fake:headerfile
-qhp.QtUiTools.subprojects.classes.sortPages = true
-
-language = Cpp
-
-headerdirs += ..
-
-sourcedirs = ..
-
-exampledirs = ../../../../../examples/uitools \
- snippets
-
-imagedirs = images
-
-outputdir = $QT_INSTALL_DOCS/qtuitools
-
-depends += qtdoc qtdesigner qtcore qtwidgets
-
-navigation.landingpage = "Qt UI Tools"
-navigation.cppclassespage = "Qt UI Tools C++ Classes"
diff --git a/src/designer/src/uitools/doc/snippets/quiloader/doc_src_qtuiloader.cpp b/src/designer/src/uitools/doc/snippets/quiloader/doc_src_qtuiloader.cpp
deleted file mode 100644
index 74d4ef622..000000000
--- a/src/designer/src/uitools/doc/snippets/quiloader/doc_src_qtuiloader.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//! [1]
-#include <QtUiTools>
-//! [1]
diff --git a/src/designer/src/uitools/doc/snippets/quiloader/doc_src_qtuiloader.pro b/src/designer/src/uitools/doc/snippets/quiloader/doc_src_qtuiloader.pro
deleted file mode 100644
index f0ee13a10..000000000
--- a/src/designer/src/uitools/doc/snippets/quiloader/doc_src_qtuiloader.pro
+++ /dev/null
@@ -1,53 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#! [0]
-QT += uitools
-#! [0]
diff --git a/src/designer/src/uitools/doc/snippets/quiloader/main.cpp b/src/designer/src/uitools/doc/snippets/quiloader/main.cpp
deleted file mode 100644
index 73b66a891..000000000
--- a/src/designer/src/uitools/doc/snippets/quiloader/main.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtGui>
-#include <QtUiTools>
-
-#include "mywidget.h"
-
-//! [0]
-QWidget *loadCustomWidget(QWidget *parent)
-{
- QUiLoader loader;
- QWidget *myWidget;
-
- QStringList availableWidgets = loader.availableWidgets();
-
- if (availableWidgets.contains("AnalogClock"))
- myWidget = loader.createWidget("AnalogClock", parent);
-
- return myWidget;
-}
-//! [0]
-
-int main(int argc, char *argv[])
-{
- QApplication app(argc, argv);
- MyWidget widget;
- widget.show();
-
- QWidget *customWidget = loadCustomWidget(0);
- customWidget->show();
- return app.exec();
-}
diff --git a/src/designer/src/uitools/doc/snippets/quiloader/mywidget.cpp b/src/designer/src/uitools/doc/snippets/quiloader/mywidget.cpp
deleted file mode 100644
index f03fabd77..000000000
--- a/src/designer/src/uitools/doc/snippets/quiloader/mywidget.cpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtGui>
-#include <QtUiTools>
-
-#include "mywidget.h"
-
-//! [0]
-MyWidget::MyWidget(QWidget *parent)
- : QWidget(parent)
-{
- QUiLoader loader;
- QFile file(":/forms/myform.ui");
- file.open(QFile::ReadOnly);
- QWidget *myWidget = loader.load(&file, this);
- file.close();
-
- QVBoxLayout *layout = new QVBoxLayout;
- layout->addWidget(myWidget);
- setLayout(layout);
-}
-//! [0]
diff --git a/src/designer/src/uitools/doc/snippets/quiloader/mywidget.h b/src/designer/src/uitools/doc/snippets/quiloader/mywidget.h
deleted file mode 100644
index 4bcfe5dea..000000000
--- a/src/designer/src/uitools/doc/snippets/quiloader/mywidget.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef MYWIDGET_H
-#define MYWIDGET_H
-
-#include <QWidget>
-
-class MyWidget : public QWidget
-{
-public:
- MyWidget(QWidget *parent = 0);
-};
-
-#endif
diff --git a/src/designer/src/uitools/doc/src/qtuitools-examples.qdoc b/src/designer/src/uitools/doc/src/qtuitools-examples.qdoc
deleted file mode 100644
index f1e1dae53..000000000
--- a/src/designer/src/uitools/doc/src/qtuitools-examples.qdoc
+++ /dev/null
@@ -1,51 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \group examples-qtuitools
- \ingroup all-examples
- \title Qt UI Tools Examples
- \brief Using Qt UI Tools to process UI forms.
-
- \image uitools-examples.png UiTools
-
- The \l{Qt UI Tools} module provides classes to handle UI forms created with
- Qt Designer. The forms are processed at run-time to dynamically generate
- user interfaces.
-
- The following examples illustrate how to use Qt UI Tools to process UI
- forms.
-*/
-
-/*
- \list
- \li \l{Multiple Inheritance Example}\raisedaster
- \li \l{Text Finder Example}\raisedaster
- \endlist
-
- Examples marked with an asterisk (*) are fully documented.
-*/
diff --git a/src/designer/src/uitools/doc/src/qtuitools-index.qdoc b/src/designer/src/uitools/doc/src/qtuitools-index.qdoc
deleted file mode 100644
index a63de0e50..000000000
--- a/src/designer/src/uitools/doc/src/qtuitools-index.qdoc
+++ /dev/null
@@ -1,76 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \page qtuitools-index.html
- \title Qt UI Tools
-
- \brief Provides classes to handle forms created with Qt Designer.
-
- \section1 Getting Started
-
- Qt Designer forms are processed at run-time to produce dynamically-generated
- user interfaces. In order to generate a form at run-time, a resource
- file containing a UI file is needed. Applications that use the
- form handling classes need to be configured to be built against the
- Qt UI Tools module. This is done by including the following declaration
- in a \c qmake project file to ensure that the application is compiled
- and linked appropriately.
-
- \snippet quiloader/doc_src_qtuiloader.pro 0
-
- A form loader object, provided by the QUiLoader class, is used to construct
- the user interface. This user interface can be retrieved from any QIODevice.
- For example, a QFile object can be used to obtain a form stored in a
- project's resources. The QUiLoader::load() function takes the user interface
- description contained in the file and constructs the form widget.
-
- To include the definitions of the module's classes, use the following
- directive:
-
- \snippet quiloader/doc_src_qtuiloader.cpp 1
-
- \section1 Licenses and Attributions
-
- Qt UI Tools is available under commercial licenses from \l{The Qt Company}.
- In addition, it is available under free software licenses. Since Qt 6.0,
- these free software licenses are
- \l{GNU Lesser General Public License, version 3}, or
- the \l{GNU General Public License, version 2}.
- See \l{Qt Licensing} for further details.
-
- \section1 API Reference
- These are links to the API reference materials.
- \list
- \li \l{Qt UI Tools C++ Classes}{C++ Classes}
- \endlist
-
- \section1 Examples
- \list
- \li \l{Qt UI Tools Examples}
- \endlist
-*/
diff --git a/src/designer/src/uitools/doc/src/qtuitools-module.qdoc b/src/designer/src/uitools/doc/src/qtuitools-module.qdoc
deleted file mode 100644
index b65bd918e..000000000
--- a/src/designer/src/uitools/doc/src/qtuitools-module.qdoc
+++ /dev/null
@@ -1,62 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \module QtUiTools
- \title Qt UI Tools C++ Classes
- \since 4.1
- \ingroup modules
- \qtcmakepackage UiTools
- \qtvariable uitools
-
- \brief Provides classes to handle forms created with Qt Designer.
-
- These forms are processed at run-time to produce dynamically-generated
- user interfaces. In order to generate a form at run-time, a resource
- file containing a UI file is needed. Applications that use the
- form handling classes need to be configured to be built against the
- QtUiTools module. This is done by including the following declaration
- in a \c qmake project file to ensure that the application is compiled
- and linked appropriately.
-
- \if !defined(qtforpython)
- \snippet quiloader/doc_src_qtuiloader.pro 0
- \endif
-
- A form loader object, provided by the QUiLoader class, is used to
- construct the user interface. This user interface can
- be retrieved from any QIODevice; for example, a QFile object can be
- used to obtain a form stored in a project's resources. The
- QUiLoader::load() function takes the user interface description
- contained in the file and constructs the form widget.
-
- To include the definitions of the module's classes, use the following
- directive:
-
- \snippet quiloader/doc_src_qtuiloader.cpp 1
-
-*/
diff --git a/src/designer/src/uitools/qtuitoolsglobal.h b/src/designer/src/uitools/qtuitoolsglobal.h
deleted file mode 100644
index 40827b3ab..000000000
--- a/src/designer/src/uitools/qtuitoolsglobal.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt UI Tools library of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QTUITOOLSGLOBAL_H
-#define QTUITOOLSGLOBAL_H
-
-#include <QtCore/qglobal.h>
-
-QT_BEGIN_NAMESPACE
-
-#ifndef QT_STATIC
-# if defined(QT_BUILD_UITOOLS_LIB)
-# define Q_UITOOLS_EXPORT Q_DECL_EXPORT
-# else
-# define Q_UITOOLS_EXPORT Q_DECL_IMPORT
-# endif
-#else
-# define Q_UITOOLS_EXPORT
-#endif
-
-QT_END_NAMESPACE
-
-#endif // QTUITOOLSGLOBAL_H
-
diff --git a/src/designer/src/uitools/quiloader.cpp b/src/designer/src/uitools/quiloader.cpp
deleted file mode 100644
index e0ba98a1e..000000000
--- a/src/designer/src/uitools/quiloader.cpp
+++ /dev/null
@@ -1,949 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt UI Tools library of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#include "quiloader.h"
-#include "quiloader_p.h"
-
-#include <QtUiPlugin/customwidget.h>
-
-#include <formbuilder.h>
-#include <formbuilderextra_p.h>
-#include <textbuilder_p.h>
-#include <ui4_p.h>
-
-#include <QtWidgets/qapplication.h>
-#include <QtWidgets/qlayout.h>
-#include <QtWidgets/qwidget.h>
-#include <QtWidgets/qtabwidget.h>
-#include <QtWidgets/qtreewidget.h>
-#include <QtWidgets/qlistwidget.h>
-#include <QtWidgets/qtablewidget.h>
-#include <QtWidgets/qtoolbox.h>
-#include <QtWidgets/qcombobox.h>
-#include <QtWidgets/qfontcombobox.h>
-
-#include <QtGui/qaction.h>
-#include <QtGui/qactiongroup.h>
-
-#include <QtCore/qdebug.h>
-#include <QtCore/qdatastream.h>
-#include <QtCore/qmap.h>
-#include <QtCore/qdir.h>
-#include <QtCore/qlibraryinfo.h>
-
-QT_BEGIN_NAMESPACE
-
-typedef QMap<QString, bool> widget_map;
-Q_GLOBAL_STATIC(widget_map, g_widgets)
-
-class QUiLoader;
-class QUiLoaderPrivate;
-
-#ifndef QT_NO_DATASTREAM
-// QUiTranslatableStringValue must be streamable since they become part of the QVariant-based
-// mime data when dragging items in views with QAbstractItemView::InternalMove.
-QDataStream &operator<<(QDataStream &out, const QUiTranslatableStringValue &s)
-{
- out << s.qualifier() << s.value();
- return out;
-}
-
-QDataStream &operator>>(QDataStream &in, QUiTranslatableStringValue &s)
-{
- QByteArray qualifier, value;
- in >> qualifier >> value;
- s.setQualifier(qualifier);
- s.setValue(value);
- return in;
-}
-#endif // QT_NO_DATASTREAM
-
-QString QUiTranslatableStringValue::translate(const QByteArray &className, bool idBased) const
-{
- return idBased
- ? qtTrId(m_qualifier.constData())
- : QCoreApplication::translate(className.constData(), m_value.constData(), m_qualifier.constData());
-}
-
-#ifdef QFORMINTERNAL_NAMESPACE
-namespace QFormInternal
-{
-#endif
-
-class TranslatingTextBuilder : public QTextBuilder
-{
-public:
- explicit TranslatingTextBuilder(bool idBased, bool trEnabled, const QByteArray &className) :
- m_idBased(idBased), m_trEnabled(trEnabled), m_className(className) {}
-
- QVariant loadText(const DomProperty *icon) const override;
-
- QVariant toNativeValue(const QVariant &value) const override;
-
- bool idBased() const { return m_idBased; }
-
-private:
- bool m_idBased;
- bool m_trEnabled;
- QByteArray m_className;
-};
-
-QVariant TranslatingTextBuilder::loadText(const DomProperty *text) const
-{
- const DomString *str = text->elementString();
- if (!str)
- return QVariant();
- if (str->hasAttributeNotr()) {
- const QString notr = str->attributeNotr();
- if (notr == QStringLiteral("true") || notr == QStringLiteral("yes"))
- return QVariant::fromValue(str->text());
- }
- QUiTranslatableStringValue strVal;
- strVal.setValue(str->text().toUtf8());
- if (m_idBased)
- strVal.setQualifier(str->attributeId().toUtf8());
- else if (str->hasAttributeComment())
- strVal.setQualifier(str->attributeComment().toUtf8());
- return QVariant::fromValue(strVal);
-}
-
-QVariant TranslatingTextBuilder::toNativeValue(const QVariant &value) const
-{
- if (value.canConvert<QUiTranslatableStringValue>()) {
- QUiTranslatableStringValue tsv = qvariant_cast<QUiTranslatableStringValue>(value);
- if (!m_trEnabled)
- return QString::fromUtf8(tsv.value().constData());
- return QVariant::fromValue(tsv.translate(m_className, m_idBased));
- }
- if (value.canConvert<QString>())
- return QVariant::fromValue(qvariant_cast<QString>(value));
- return value;
-}
-
-// This is "exported" to linguist
-const QUiItemRolePair qUiItemRoles[] = {
- { Qt::DisplayRole, Qt::DisplayPropertyRole },
-#if QT_CONFIG(tooltip)
- { Qt::ToolTipRole, Qt::ToolTipPropertyRole },
-#endif
-#if QT_CONFIG(statustip)
- { Qt::StatusTipRole, Qt::StatusTipPropertyRole },
-#endif
-#if QT_CONFIG(whatsthis)
- { Qt::WhatsThisRole, Qt::WhatsThisPropertyRole },
-#endif
- { -1 , -1 }
-};
-
-static void recursiveReTranslate(QTreeWidgetItem *item, const QByteArray &class_name, bool idBased)
-{
- const QUiItemRolePair *irs = qUiItemRoles;
-
- int cnt = item->columnCount();
- for (int i = 0; i < cnt; ++i) {
- for (unsigned j = 0; irs[j].shadowRole >= 0; j++) {
- QVariant v = item->data(i, irs[j].shadowRole);
- if (v.isValid()) {
- QUiTranslatableStringValue tsv = qvariant_cast<QUiTranslatableStringValue>(v);
- item->setData(i, irs[j].realRole, tsv.translate(class_name, idBased));
- }
- }
- }
-
- cnt = item->childCount();
- for (int i = 0; i < cnt; ++i)
- recursiveReTranslate(item->child(i), class_name, idBased);
-}
-
-template<typename T>
-static void reTranslateWidgetItem(T *item, const QByteArray &class_name, bool idBased)
-{
- const QUiItemRolePair *irs = qUiItemRoles;
-
- for (unsigned j = 0; irs[j].shadowRole >= 0; j++) {
- QVariant v = item->data(irs[j].shadowRole);
- if (v.isValid()) {
- QUiTranslatableStringValue tsv = qvariant_cast<QUiTranslatableStringValue>(v);
- item->setData(irs[j].realRole, tsv.translate(class_name, idBased));
- }
- }
-}
-
-static void reTranslateTableItem(QTableWidgetItem *item, const QByteArray &class_name, bool idBased)
-{
- if (item)
- reTranslateWidgetItem(item, class_name, idBased);
-}
-
-#define RETRANSLATE_SUBWIDGET_PROP(mainWidget, setter, propName) \
- do { \
- QVariant v = mainWidget->widget(i)->property(propName); \
- if (v.isValid()) { \
- QUiTranslatableStringValue tsv = qvariant_cast<QUiTranslatableStringValue>(v); \
- mainWidget->setter(i, tsv.translate(m_className, m_idBased)); \
- } \
- } while (0)
-
-class TranslationWatcher: public QObject
-{
- Q_OBJECT
-
-public:
- explicit TranslationWatcher(QObject *parent, const QByteArray &className, bool idBased):
- QObject(parent),
- m_className(className),
- m_idBased(idBased)
- {
- }
-
- bool eventFilter(QObject *o, QEvent *event) override
- {
- if (event->type() == QEvent::LanguageChange) {
- const auto &dynamicPropertyNames = o->dynamicPropertyNames();
- for (const QByteArray &prop : dynamicPropertyNames) {
- if (prop.startsWith(PROP_GENERIC_PREFIX)) {
- const QByteArray propName = prop.mid(sizeof(PROP_GENERIC_PREFIX) - 1);
- const QUiTranslatableStringValue tsv =
- qvariant_cast<QUiTranslatableStringValue>(o->property(prop));
- o->setProperty(propName, tsv.translate(m_className, m_idBased));
- }
- }
- if (0) {
-#if QT_CONFIG(tabwidget)
- } else if (QTabWidget *tabw = qobject_cast<QTabWidget*>(o)) {
- const int cnt = tabw->count();
- for (int i = 0; i < cnt; ++i) {
- RETRANSLATE_SUBWIDGET_PROP(tabw, setTabText, PROP_TABPAGETEXT);
-#if QT_CONFIG(tooltip)
- RETRANSLATE_SUBWIDGET_PROP(tabw, setTabToolTip, PROP_TABPAGETOOLTIP);
-# endif
-#if QT_CONFIG(whatsthis)
- RETRANSLATE_SUBWIDGET_PROP(tabw, setTabWhatsThis, PROP_TABPAGEWHATSTHIS);
-# endif
- }
-#endif
-#if QT_CONFIG(listwidget)
- } else if (QListWidget *listw = qobject_cast<QListWidget*>(o)) {
- const int cnt = listw->count();
- for (int i = 0; i < cnt; ++i)
- reTranslateWidgetItem(listw->item(i), m_className, m_idBased);
-#endif
-#if QT_CONFIG(treewidget)
- } else if (QTreeWidget *treew = qobject_cast<QTreeWidget*>(o)) {
- if (QTreeWidgetItem *item = treew->headerItem())
- recursiveReTranslate(item, m_className, m_idBased);
- const int cnt = treew->topLevelItemCount();
- for (int i = 0; i < cnt; ++i) {
- QTreeWidgetItem *item = treew->topLevelItem(i);
- recursiveReTranslate(item, m_className, m_idBased);
- }
-#endif
-#if QT_CONFIG(tablewidget)
- } else if (QTableWidget *tablew = qobject_cast<QTableWidget*>(o)) {
- const int row_cnt = tablew->rowCount();
- const int col_cnt = tablew->columnCount();
- for (int j = 0; j < col_cnt; ++j)
- reTranslateTableItem(tablew->horizontalHeaderItem(j), m_className, m_idBased);
- for (int i = 0; i < row_cnt; ++i) {
- reTranslateTableItem(tablew->verticalHeaderItem(i), m_className, m_idBased);
- for (int j = 0; j < col_cnt; ++j)
- reTranslateTableItem(tablew->item(i, j), m_className, m_idBased);
- }
-#endif
-#if QT_CONFIG(combobox)
- } else if (QComboBox *combow = qobject_cast<QComboBox*>(o)) {
- if (!qobject_cast<QFontComboBox*>(o)) {
- const int cnt = combow->count();
- for (int i = 0; i < cnt; ++i) {
- const QVariant v = combow->itemData(i, Qt::DisplayPropertyRole);
- if (v.isValid()) {
- QUiTranslatableStringValue tsv = qvariant_cast<QUiTranslatableStringValue>(v);
- combow->setItemText(i, tsv.translate(m_className, m_idBased));
- }
- }
- }
-#endif
-#if QT_CONFIG(toolbox)
- } else if (QToolBox *toolw = qobject_cast<QToolBox*>(o)) {
- const int cnt = toolw->count();
- for (int i = 0; i < cnt; ++i) {
- RETRANSLATE_SUBWIDGET_PROP(toolw, setItemText, PROP_TOOLITEMTEXT);
-#if QT_CONFIG(tooltip)
- RETRANSLATE_SUBWIDGET_PROP(toolw, setItemToolTip, PROP_TOOLITEMTOOLTIP);
-# endif
- }
-#endif
- }
- }
- return false;
- }
-
-private:
- QByteArray m_className;
- bool m_idBased;
-};
-
-class FormBuilderPrivate: public QFormBuilder
-{
- friend class QT_PREPEND_NAMESPACE(QUiLoader);
- friend class QT_PREPEND_NAMESPACE(QUiLoaderPrivate);
- using ParentClass = QFormBuilder;
-
-public:
- QUiLoader *loader = nullptr;
-
- bool dynamicTr = false;
- bool trEnabled = true;
-
- FormBuilderPrivate() = default;
-
- QWidget *defaultCreateWidget(const QString &className, QWidget *parent, const QString &name)
- {
- return ParentClass::createWidget(className, parent, name);
- }
-
- QLayout *defaultCreateLayout(const QString &className, QObject *parent, const QString &name)
- {
- return ParentClass::createLayout(className, parent, name);
- }
-
- QAction *defaultCreateAction(QObject *parent, const QString &name)
- {
- return ParentClass::createAction(parent, name);
- }
-
- QActionGroup *defaultCreateActionGroup(QObject *parent, const QString &name)
- {
- return ParentClass::createActionGroup(parent, name);
- }
-
- QWidget *createWidget(const QString &className, QWidget *parent, const QString &name) override
- {
- if (QWidget *widget = loader->createWidget(className, parent, name)) {
- widget->setObjectName(name);
- return widget;
- }
-
- return nullptr;
- }
-
- QLayout *createLayout(const QString &className, QObject *parent, const QString &name) override
- {
- if (QLayout *layout = loader->createLayout(className, parent, name)) {
- layout->setObjectName(name);
- return layout;
- }
-
- return nullptr;
- }
-
- QActionGroup *createActionGroup(QObject *parent, const QString &name) override
- {
- if (QActionGroup *actionGroup = loader->createActionGroup(parent, name)) {
- actionGroup->setObjectName(name);
- return actionGroup;
- }
-
- return nullptr;
- }
-
- QAction *createAction(QObject *parent, const QString &name) override
- {
- if (QAction *action = loader->createAction(parent, name)) {
- action->setObjectName(name);
- return action;
- }
-
- return nullptr;
- }
-
- void applyProperties(QObject *o, const QList<DomProperty*> &properties) override;
- QWidget *create(DomUI *ui, QWidget *parentWidget) override;
- QWidget *create(DomWidget *ui_widget, QWidget *parentWidget) override;
- bool addItem(DomWidget *ui_widget, QWidget *widget, QWidget *parentWidget) override;
-
-private:
- QByteArray m_class;
- TranslationWatcher *m_trwatch = nullptr;
- bool m_idBased = false;
-};
-
-static QString convertTranslatable(const DomProperty *p, const QByteArray &className,
- bool idBased, QUiTranslatableStringValue *strVal)
-{
- if (p->kind() != DomProperty::String)
- return QString();
- const DomString *dom_str = p->elementString();
- if (!dom_str)
- return QString();
- if (dom_str->hasAttributeNotr()) {
- const QString notr = dom_str->attributeNotr();
- if (notr == QStringLiteral("yes") || notr == QStringLiteral("true"))
- return QString();
- }
- strVal->setValue(dom_str->text().toUtf8());
- strVal->setQualifier(idBased ? dom_str->attributeId().toUtf8() : dom_str->attributeComment().toUtf8());
- if (strVal->value().isEmpty() && strVal->qualifier().isEmpty())
- return QString();
- return strVal->translate(className, idBased);
-}
-
-void FormBuilderPrivate::applyProperties(QObject *o, const QList<DomProperty*> &properties)
-{
- QFormBuilder::applyProperties(o, properties);
-
- if (!m_trwatch)
- m_trwatch = new TranslationWatcher(o, m_class, m_idBased);
-
- if (properties.isEmpty())
- return;
-
- // Unlike string item roles, string properties are not loaded via the textBuilder
- // (as they are "shadowed" by the property sheets in designer). So do the initial
- // translation here.
- bool anyTrs = false;
- for (const DomProperty *p : properties) {
- QUiTranslatableStringValue strVal;
- const QString text = convertTranslatable(p, m_class, m_idBased, &strVal);
- if (text.isEmpty())
- continue;
- const QByteArray name = p->attributeName().toUtf8();
- if (dynamicTr) {
- const QByteArray dynname = QByteArray(PROP_GENERIC_PREFIX + name);
- o->setProperty(dynname, QVariant::fromValue(strVal));
- anyTrs = trEnabled;
- }
- o->setProperty(name, text);
- }
- if (anyTrs)
- o->installEventFilter(m_trwatch);
-}
-
-QWidget *FormBuilderPrivate::create(DomUI *ui, QWidget *parentWidget)
-{
- m_class = ui->elementClass().toUtf8();
- m_trwatch = nullptr;
- m_idBased = ui->attributeIdbasedtr();
- setTextBuilder(new TranslatingTextBuilder(m_idBased, trEnabled, m_class));
- return QFormBuilder::create(ui, parentWidget);
-}
-
-QWidget *FormBuilderPrivate::create(DomWidget *ui_widget, QWidget *parentWidget)
-{
- QWidget *w = QFormBuilder::create(ui_widget, parentWidget);
- if (w == nullptr)
- return nullptr;
-
- if (0) {
-#if QT_CONFIG(tabwidget)
- } else if (qobject_cast<QTabWidget*>(w)) {
-#endif
-#if QT_CONFIG(listwidget)
- } else if (qobject_cast<QListWidget*>(w)) {
-#endif
-#if QT_CONFIG(treewidget)
- } else if (qobject_cast<QTreeWidget*>(w)) {
-#endif
-#if QT_CONFIG(tablewidget)
- } else if (qobject_cast<QTableWidget*>(w)) {
-#endif
-#if QT_CONFIG(combobox)
- } else if (qobject_cast<QComboBox*>(w)) {
- if (qobject_cast<QFontComboBox*>(w))
- return w;
-#endif
-#if QT_CONFIG(toolbox)
- } else if (qobject_cast<QToolBox*>(w)) {
-#endif
- } else {
- return w;
- }
- if (dynamicTr && trEnabled)
- w->installEventFilter(m_trwatch);
- return w;
-}
-
-#define TRANSLATE_SUBWIDGET_PROP(mainWidget, attribute, setter, propName) \
- do { \
- if (const DomProperty *p##attribute = attributes.value(strings.attribute)) { \
- QUiTranslatableStringValue strVal; \
- const QString text = convertTranslatable(p##attribute, m_class, m_idBased, &strVal); \
- if (!text.isEmpty()) { \
- if (dynamicTr) \
- mainWidget->widget(i)->setProperty(propName, QVariant::fromValue(strVal)); \
- mainWidget->setter(i, text); \
- } \
- } \
- } while (0)
-
-bool FormBuilderPrivate::addItem(DomWidget *ui_widget, QWidget *widget, QWidget *parentWidget)
-{
- if (parentWidget == nullptr)
- return true;
-
- if (!ParentClass::addItem(ui_widget, widget, parentWidget))
- return false;
-
- // Check special cases. First: Custom container
- const QString className = QLatin1String(parentWidget->metaObject()->className());
- if (!d->customWidgetAddPageMethod(className).isEmpty())
- return true;
-
- const QFormBuilderStrings &strings = QFormBuilderStrings::instance();
-
- if (0) {
-#if QT_CONFIG(tabwidget)
- } else if (QTabWidget *tabWidget = qobject_cast<QTabWidget*>(parentWidget)) {
- const DomPropertyHash attributes = propertyMap(ui_widget->elementAttribute());
- const int i = tabWidget->count() - 1;
- TRANSLATE_SUBWIDGET_PROP(tabWidget, titleAttribute, setTabText, PROP_TABPAGETEXT);
-#if QT_CONFIG(tooltip)
- TRANSLATE_SUBWIDGET_PROP(tabWidget, toolTipAttribute, setTabToolTip, PROP_TABPAGETOOLTIP);
-# endif
-#if QT_CONFIG(whatsthis)
- TRANSLATE_SUBWIDGET_PROP(tabWidget, whatsThisAttribute, setTabWhatsThis, PROP_TABPAGEWHATSTHIS);
-# endif
-#endif
-#if QT_CONFIG(toolbox)
- } else if (QToolBox *toolBox = qobject_cast<QToolBox*>(parentWidget)) {
- const DomPropertyHash attributes = propertyMap(ui_widget->elementAttribute());
- const int i = toolBox->count() - 1;
- TRANSLATE_SUBWIDGET_PROP(toolBox, labelAttribute, setItemText, PROP_TOOLITEMTEXT);
-#if QT_CONFIG(tooltip)
- TRANSLATE_SUBWIDGET_PROP(toolBox, toolTipAttribute, setItemToolTip, PROP_TOOLITEMTOOLTIP);
-# endif
-#endif
- }
-
- return true;
-}
-
-#ifdef QFORMINTERNAL_NAMESPACE
-}
-#endif
-
-class QUiLoaderPrivate
-{
-public:
-#ifdef QFORMINTERNAL_NAMESPACE
- QFormInternal::FormBuilderPrivate builder;
-#else
- FormBuilderPrivate builder;
-#endif
-
- void setupWidgetMap() const;
-};
-
-void QUiLoaderPrivate::setupWidgetMap() const
-{
- if (!g_widgets()->isEmpty())
- return;
-
-#define DECLARE_WIDGET(a, b) g_widgets()->insert(QLatin1String(#a), true);
-#define DECLARE_LAYOUT(a, b)
-
-#include "widgets.table"
-
-#undef DECLARE_WIDGET
-#undef DECLARE_WIDGET_1
-#undef DECLARE_LAYOUT
-}
-
-/*!
- \class QUiLoader
- \inmodule QtUiTools
-
- \brief The QUiLoader class enables standalone applications to
- dynamically create user interfaces at run-time using the
- information stored in UI files or specified in plugin paths.
-
- In addition, you can customize or create your own user interface by
- deriving your own loader class.
-
- If you have a custom component or an application that embeds \QD, you can
- also use the QFormBuilder class provided by the QtDesigner module to create
- user interfaces from UI files.
-
- The QUiLoader class provides a collection of functions allowing you to
- create widgets based on the information stored in UI files (created
- with \QD) or available in the specified plugin paths. The specified plugin
- paths can be retrieved using the pluginPaths() function. Similarly, the
- contents of a UI file can be retrieved using the load() function. For
- example:
-
- \snippet quiloader/mywidget.cpp 0
-
- \if !defined(qtforpython)
- By including the user interface in the form's resources (\c myform.qrc), we
- ensure that it will be present at run-time:
-
- \quotefile quiloader/mywidget.qrc
- \endif
-
- The availableWidgets() function returns a QStringList with the class names
- of the widgets available in the specified plugin paths. To create these
- widgets, simply use the createWidget() function. For example:
-
- \snippet quiloader/main.cpp 0
-
- To make a custom widget available to the loader, you can use the
- addPluginPath() function; to remove all available widgets, you can call
- the clearPluginPaths() function.
-
- The createAction(), createActionGroup(), createLayout(), and createWidget()
- functions are used internally by the QUiLoader class whenever it has to
- create an action, action group, layout, or widget respectively. For that
- reason, you can subclass the QUiLoader class and reimplement these
- functions to intervene the process of constructing a user interface. For
- example, you might want to have a list of the actions created when loading
- a form or creating a custom widget.
-
- For a complete example using the QUiLoader class, see the
- \l{Calculator Builder Example}.
-
- \sa {Qt UI Tools}, QFormBuilder
-*/
-
-/*!
- Creates a form loader with the given \a parent.
-*/
-QUiLoader::QUiLoader(QObject *parent)
- : QObject(parent), d_ptr(new QUiLoaderPrivate)
-{
- Q_D(QUiLoader);
-
-#ifndef QT_NO_DATASTREAM
- static int metaTypeId = 0;
- if (!metaTypeId) {
- metaTypeId = qRegisterMetaType<QUiTranslatableStringValue>("QUiTranslatableStringValue");
- }
-#endif // QT_NO_DATASTREAM
- d->builder.loader = this;
-
-#if QT_CONFIG(library)
- QStringList paths;
- const QStringList &libraryPaths = QApplication::libraryPaths();
- for (const QString &path : libraryPaths) {
- QString libPath = path;
- libPath += QDir::separator();
- libPath += QStringLiteral("designer");
- paths.append(libPath);
- }
-
- d->builder.setPluginPath(paths);
-#endif // QT_CONFIG(library)
-}
-
-/*!
- Destroys the loader.
-*/
-QUiLoader::~QUiLoader() = default;
-
-/*!
- Loads a form from the given \a device and creates a new widget with the
- given \a parentWidget to hold its contents.
-
- \sa createWidget(), errorString()
-*/
-QWidget *QUiLoader::load(QIODevice *device, QWidget *parentWidget)
-{
- Q_D(QUiLoader);
- // QXmlStreamReader will report errors on open failure.
- if (!device->isOpen())
- device->open(QIODevice::ReadOnly|QIODevice::Text);
- return d->builder.load(device, parentWidget);
-}
-
-/*!
- Returns a list naming the paths in which the loader will search when
- locating custom widget plugins.
-
- \sa addPluginPath(), clearPluginPaths()
-*/
-QStringList QUiLoader::pluginPaths() const
-{
- Q_D(const QUiLoader);
- return d->builder.pluginPaths();
-}
-
-/*!
- Clears the list of paths in which the loader will search when locating
- plugins.
-
- \sa addPluginPath(), pluginPaths()
-*/
-void QUiLoader::clearPluginPaths()
-{
- Q_D(QUiLoader);
- d->builder.clearPluginPaths();
-}
-
-/*!
- Adds the given \a path to the list of paths in which the loader will search
- when locating plugins.
-
- \sa pluginPaths(), clearPluginPaths()
-*/
-void QUiLoader::addPluginPath(const QString &path)
-{
- Q_D(QUiLoader);
- d->builder.addPluginPath(path);
-}
-
-/*!
- Creates a new widget with the given \a parent and \a name using the class
- specified by \a className. You can use this function to create any of the
- widgets returned by the availableWidgets() function.
-
- The function is also used internally by the QUiLoader class whenever it
- creates a widget. Hence, you can subclass QUiLoader and reimplement this
- function to intervene process of constructing a user interface or widget.
- However, in your implementation, ensure that you call QUiLoader's version
- first.
-
- \sa availableWidgets(), load()
-*/
-QWidget *QUiLoader::createWidget(const QString &className, QWidget *parent, const QString &name)
-{
- Q_D(QUiLoader);
- return d->builder.defaultCreateWidget(className, parent, name);
-}
-
-/*!
- Creates a new layout with the given \a parent and \a name using the class
- specified by \a className.
-
- The function is also used internally by the QUiLoader class whenever it
- creates a widget. Hence, you can subclass QUiLoader and reimplement this
- function to intervene process of constructing a user interface or widget.
- However, in your implementation, ensure that you call QUiLoader's version
- first.
-
- \sa createWidget(), load()
-*/
-QLayout *QUiLoader::createLayout(const QString &className, QObject *parent, const QString &name)
-{
- Q_D(QUiLoader);
- return d->builder.defaultCreateLayout(className, parent, name);
-}
-
-/*!
- Creates a new action group with the given \a parent and \a name.
-
- The function is also used internally by the QUiLoader class whenever it
- creates a widget. Hence, you can subclass QUiLoader and reimplement this
- function to intervene process of constructing a user interface or widget.
- However, in your implementation, ensure that you call QUiLoader's version
- first.
-
- \sa createAction(), createWidget(), load()
- */
-QActionGroup *QUiLoader::createActionGroup(QObject *parent, const QString &name)
-{
- Q_D(QUiLoader);
- return d->builder.defaultCreateActionGroup(parent, name);
-}
-
-/*!
- Creates a new action with the given \a parent and \a name.
-
- The function is also used internally by the QUiLoader class whenever it
- creates a widget. Hence, you can subclass QUiLoader and reimplement this
- function to intervene process of constructing a user interface or widget.
- However, in your implementation, ensure that you call QUiLoader's version
- first.
-
- \sa createActionGroup(), createWidget(), load()
-*/
-QAction *QUiLoader::createAction(QObject *parent, const QString &name)
-{
- Q_D(QUiLoader);
- return d->builder.defaultCreateAction(parent, name);
-}
-
-/*!
- Returns a list naming all available widgets that can be built using the
- createWidget() function, i.e all the widgets specified within the given
- plugin paths.
-
- \sa pluginPaths(), createWidget()
-
-*/
-QStringList QUiLoader::availableWidgets() const
-{
- Q_D(const QUiLoader);
-
- d->setupWidgetMap();
- widget_map available = *g_widgets();
-
- const auto &customWidgets = d->builder.customWidgets();
- for (QDesignerCustomWidgetInterface *plugin : customWidgets)
- available.insert(plugin->name(), true);
-
- return available.keys();
-}
-
-
-/*!
- \since 4.5
- Returns a list naming all available layouts that can be built using the
- createLayout() function
-
- \sa createLayout()
-*/
-
-QStringList QUiLoader::availableLayouts() const
-{
- QStringList rc;
-#define DECLARE_WIDGET(a, b)
-#define DECLARE_LAYOUT(a, b) rc.push_back(QLatin1String(#a));
-
-#include "widgets.table"
-
-#undef DECLARE_WIDGET
-#undef DECLARE_LAYOUT
- return rc;
-}
-
-/*!
- Sets the working directory of the loader to \a dir. The loader will look
- for other resources, such as icons and resource files, in paths relative to
- this directory.
-
- \sa workingDirectory()
-*/
-
-void QUiLoader::setWorkingDirectory(const QDir &dir)
-{
- Q_D(QUiLoader);
- d->builder.setWorkingDirectory(dir);
-}
-
-/*!
- Returns the working directory of the loader.
-
- \sa setWorkingDirectory()
-*/
-
-QDir QUiLoader::workingDirectory() const
-{
- Q_D(const QUiLoader);
- return d->builder.workingDirectory();
-}
-/*!
- \since 4.5
-
- If \a enabled is true, user interfaces loaded by this loader will
- automatically retranslate themselves upon receiving a language change
- event. Otherwise, the user interfaces will not be retranslated.
-
- \sa isLanguageChangeEnabled()
-*/
-
-void QUiLoader::setLanguageChangeEnabled(bool enabled)
-{
- Q_D(QUiLoader);
- d->builder.dynamicTr = enabled;
-}
-
-/*!
- \since 4.5
-
- Returns true if dynamic retranslation on language change is enabled;
- returns false otherwise.
-
- \sa setLanguageChangeEnabled()
-*/
-
-bool QUiLoader::isLanguageChangeEnabled() const
-{
- Q_D(const QUiLoader);
- return d->builder.dynamicTr;
-}
-
-/*!
- \internal
- \since 4.5
-
- If \a enabled is true, user interfaces loaded by this loader will be
- translated. Otherwise, the user interfaces will not be translated.
-
- \note This is orthogonal to languageChangeEnabled.
-
- \sa isLanguageChangeEnabled(), setLanguageChangeEnabled()
-*/
-
-void QUiLoader::setTranslationEnabled(bool enabled)
-{
- Q_D(QUiLoader);
- d->builder.trEnabled = enabled;
-}
-
-/*!
- \internal
- \since 4.5
-
- Returns true if translation is enabled; returns false otherwise.
-
- \sa setTranslationEnabled()
-*/
-
-bool QUiLoader::isTranslationEnabled() const
-{
- Q_D(const QUiLoader);
- return d->builder.trEnabled;
-}
-
-/*!
- Returns a human-readable description of the last error occurred in load().
-
- \since 5.0
- \sa load()
-*/
-
-QString QUiLoader::errorString() const
-{
- Q_D(const QUiLoader);
- return d->builder.errorString();
-}
-
-QT_END_NAMESPACE
-
-#include "quiloader.moc"
diff --git a/src/designer/src/uitools/quiloader.h b/src/designer/src/uitools/quiloader.h
deleted file mode 100644
index 7d632ab0b..000000000
--- a/src/designer/src/uitools/quiloader.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt UI Tools library of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QUILOADER_H
-#define QUILOADER_H
-
-#include <QtUiTools/qtuitoolsglobal.h>
-#include <QtCore/qobject.h>
-#include <QtCore/qscopedpointer.h>
-
-QT_BEGIN_NAMESPACE
-
-class QWidget;
-class QLayout;
-class QAction;
-class QActionGroup;
-class QString;
-class QIODevice;
-class QDir;
-
-class QUiLoaderPrivate;
-class Q_UITOOLS_EXPORT QUiLoader : public QObject
-{
- Q_OBJECT
-public:
- explicit QUiLoader(QObject *parent = nullptr);
- ~QUiLoader() override;
-
- QStringList pluginPaths() const;
- void clearPluginPaths();
- void addPluginPath(const QString &path);
-
- QWidget *load(QIODevice *device, QWidget *parentWidget = nullptr);
- QStringList availableWidgets() const;
- QStringList availableLayouts() const;
-
- virtual QWidget *createWidget(const QString &className, QWidget *parent = nullptr, const QString &name = QString());
- virtual QLayout *createLayout(const QString &className, QObject *parent = nullptr, const QString &name = QString());
- virtual QActionGroup *createActionGroup(QObject *parent = nullptr, const QString &name = QString());
- virtual QAction *createAction(QObject *parent = nullptr, const QString &name = QString());
-
- void setWorkingDirectory(const QDir &dir);
- QDir workingDirectory() const;
-
- void setLanguageChangeEnabled(bool enabled);
- bool isLanguageChangeEnabled() const;
-
- void setTranslationEnabled(bool enabled);
- bool isTranslationEnabled() const;
-
- QString errorString() const;
-
-private:
- QScopedPointer<QUiLoaderPrivate> d_ptr;
- Q_DECLARE_PRIVATE(QUiLoader)
- Q_DISABLE_COPY_MOVE(QUiLoader)
-};
-
-QT_END_NAMESPACE
-
-#endif // QUILOADER_H
diff --git a/src/designer/src/uitools/quiloader_p.h b/src/designer/src/uitools/quiloader_p.h
deleted file mode 100644
index 0febc88c2..000000000
--- a/src/designer/src/uitools/quiloader_p.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt UI Tools library of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QUILOADER_P_H
-#define QUILOADER_P_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 <QtUiTools/qtuitoolsglobal.h>
-#include <QtCore/qbytearray.h>
-#include <QtCore/qmetatype.h>
-
-QT_FORWARD_DECLARE_CLASS(QDataStream)
-
-// This file is here for use by the form preview in Linguist. If you change anything
-// here or in the code which uses it, remember to adapt Linguist accordingly.
-
-#define PROP_GENERIC_PREFIX "_q_notr_"
-#define PROP_TOOLITEMTEXT "_q_toolItemText_notr"
-#define PROP_TOOLITEMTOOLTIP "_q_toolItemToolTip_notr"
-#define PROP_TABPAGETEXT "_q_tabPageText_notr"
-#define PROP_TABPAGETOOLTIP "_q_tabPageToolTip_notr"
-#define PROP_TABPAGEWHATSTHIS "_q_tabPageWhatsThis_notr"
-
-QT_BEGIN_NAMESPACE
-
-class Q_UITOOLS_EXPORT QUiTranslatableStringValue
-{
-public:
- QByteArray value() const { return m_value; }
- void setValue(const QByteArray &value) { m_value = value; }
- QByteArray qualifier() const { return m_qualifier; }
- void setQualifier(const QByteArray &qualifier) { m_qualifier = qualifier; }
-
- QString translate(const QByteArray &className, bool idBased) const;
-
-private:
- QByteArray m_value;
- QByteArray m_qualifier; // Comment or ID for id-based tr().
-};
-
-#ifndef QT_NO_DATASTREAM
-Q_UITOOLS_EXPORT QDataStream &operator<<(QDataStream &out, const QUiTranslatableStringValue &s);
-Q_UITOOLS_EXPORT QDataStream &operator>>(QDataStream &in, QUiTranslatableStringValue &s);
-#endif // QT_NO_DATASTREAM
-
-struct QUiItemRolePair {
- int realRole;
- int shadowRole;
-};
-
-#ifdef QFORMINTERNAL_NAMESPACE
-namespace QFormInternal
-{
-#endif
-
-extern const Q_UITOOLS_EXPORT QUiItemRolePair qUiItemRoles[];
-
-#ifdef QFORMINTERNAL_NAMESPACE
-}
-#endif
-
-QT_END_NAMESPACE
-
-Q_DECLARE_METATYPE(QUiTranslatableStringValue)
-
-
-#endif // QUILOADER_P_H
diff --git a/src/designer/src/uitools/uitools.pro b/src/designer/src/uitools/uitools.pro
deleted file mode 100644
index 169211f9e..000000000
--- a/src/designer/src/uitools/uitools.pro
+++ /dev/null
@@ -1,19 +0,0 @@
-TARGET = QtUiTools
-
-include(../lib/uilib/uilib.pri)
-
-QMAKE_DOCS = $$PWD/doc/qtuitools.qdocconf
-
-HEADERS += quiloader.h
-SOURCES += quiloader.cpp
-
-DEFINES += \
- QFORMINTERNAL_NAMESPACE \
- QT_DESIGNER_STATIC
-
-# QtUiPlugins end up in designer for historical reasons. However, if
-# designer isn't actually built, we need to claim the plugin type here.
-!qtBuildPart(tools): \
- MODULE_PLUGIN_TYPES = designer
-
-load(qt_module)
diff --git a/src/distancefieldgenerator/CMakeLists.txt b/src/distancefieldgenerator/CMakeLists.txt
index 606ef5378..04edc6eef 100644
--- a/src/distancefieldgenerator/CMakeLists.txt
+++ b/src/distancefieldgenerator/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from distancefieldgenerator.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qdistancefieldgenerator App:
@@ -14,7 +15,7 @@ qt_internal_add_app(qdistancefieldgenerator
QT_NO_CAST_FROM_ASCII
QT_NO_CAST_TO_ASCII
QT_NO_FOREACH
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
@@ -27,10 +28,7 @@ set_target_properties(qdistancefieldgenerator PROPERTIES
QT_TARGET_DESCRIPTION "Qt Distance Field Generator"
)
-#### Keys ignored in scope 1:.:.:distancefieldgenerator.pro:<TRUE>:
-# QT_FOR_CONFIG = "tools-private"
-# _REQUIREMENTS = "qtConfig(distancefieldgenerator)"
-qt_add_docs(qdistancefieldgenerator
+qt_internal_add_docs(qdistancefieldgenerator
doc/qtdistancefieldgenerator.qdocconf
)
diff --git a/src/distancefieldgenerator/distancefieldgenerator.pro b/src/distancefieldgenerator/distancefieldgenerator.pro
deleted file mode 100644
index e934716b8..000000000
--- a/src/distancefieldgenerator/distancefieldgenerator.pro
+++ /dev/null
@@ -1,30 +0,0 @@
-include($$OUT_PWD/../../src/global/qttools-config.pri)
-QT_FOR_CONFIG += tools-private
-requires(qtConfig(distancefieldgenerator))
-
-TARGET = qdistancefieldgenerator
-
-QT += gui widgets gui-private core-private quick-private
-
-SOURCES += \
- main.cpp \
- mainwindow.cpp \
- distancefieldmodel.cpp \
- distancefieldmodelworker.cpp
-
-DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII
-DEFINES += QT_NO_FOREACH
-
-FORMS += \
- mainwindow.ui
-
-HEADERS += \
- mainwindow.h \
- distancefieldmodel.h \
- distancefieldmodelworker.h
-
-QMAKE_DOCS = $$PWD/doc/qtdistancefieldgenerator.qdocconf
-
-QMAKE_TARGET_DESCRIPTION = "Qt Distance Field Generator"
-
-load(qt_app)
diff --git a/src/distancefieldgenerator/distancefieldmodel.cpp b/src/distancefieldgenerator/distancefieldmodel.cpp
index e529e65ba..c6fe18d6a 100644
--- a/src/distancefieldgenerator/distancefieldmodel.cpp
+++ b/src/distancefieldgenerator/distancefieldmodel.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "distancefieldmodel.h"
#include "distancefieldmodelworker.h"
diff --git a/src/distancefieldgenerator/distancefieldmodel.h b/src/distancefieldgenerator/distancefieldmodel.h
index 174021301..c742861b4 100644
--- a/src/distancefieldgenerator/distancefieldmodel.h
+++ b/src/distancefieldgenerator/distancefieldmodel.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef DISTANCEFIELDMODEL_H
#define DISTANCEFIELDMODEL_H
diff --git a/src/distancefieldgenerator/distancefieldmodelworker.cpp b/src/distancefieldgenerator/distancefieldmodelworker.cpp
index b76f3b707..e459a955d 100644
--- a/src/distancefieldgenerator/distancefieldmodelworker.cpp
+++ b/src/distancefieldgenerator/distancefieldmodelworker.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "distancefieldmodelworker.h"
diff --git a/src/distancefieldgenerator/distancefieldmodelworker.h b/src/distancefieldgenerator/distancefieldmodelworker.h
index 85b82f096..8872eee63 100644
--- a/src/distancefieldgenerator/distancefieldmodelworker.h
+++ b/src/distancefieldgenerator/distancefieldmodelworker.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef DISTANCEFIELDMODELWORKER_H
#define DISTANCEFIELDMODELWORKER_H
diff --git a/src/distancefieldgenerator/doc/distancefieldgenerator.qdocconf b/src/distancefieldgenerator/doc/distancefieldgenerator.qdocconf
deleted file mode 100644
index 62282238c..000000000
--- a/src/distancefieldgenerator/doc/distancefieldgenerator.qdocconf
+++ /dev/null
@@ -1,27 +0,0 @@
-include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
-
-project = QtDistanceFieldGenerator
-description = Qt Distance Field Generator Manual
-
-qhp.projects = QtDistanceFieldGenerator
-
-qhp.QtDistanceFieldGenerator.file = qtdistancefieldgenerator.qhp
-qhp.QtDistanceFieldGenerator.namespace = org.qt-project.qtdistancefieldgenerator.$QT_VERSION_TAG
-qhp.QtDistanceFieldGenerator.virtualFolder = qtdistancefieldgenerator
-qhp.QtDistanceFieldGenerator.indexTitle = Qt Distance Field Generator Manual
-
-qhp.QtDistanceFieldGenerator.filterAttributes = qt $QT_VERSION tools qtdistancefieldgenerator
-qhp.QtDistanceFieldGenerator.customFilters.QtDistanceFieldGenerator.name = Qt Distance Field Generator Manual
-qhp.QtDistanceFieldGenerator.customFilters.QtDistanceFieldGenerator.filterAttributes = qt tools qtdistancefieldgenerator
-qhp.QtDistanceFieldGenerator.subprojects = manual
-qhp.QtDistanceFieldGenerator.subprojects.manual.title = Manual
-qhp.QtDistanceFieldGenerator.subprojects.manual.indexTitle = Qt Distance Field Generator Manual
-qhp.QtDistanceFieldGenerator.subprojects.manual.type = manual
-
-language = Cpp
-sourcedirs = ..
-imagedirs = images
-
-depends += qtdoc qtqml qtquick qtcore qtgui qmake
-
-navigation.landingpage = "Qt Distance Field Generator Manual"
diff --git a/src/distancefieldgenerator/doc/qtdistancefieldgenerator.qdocconf b/src/distancefieldgenerator/doc/qtdistancefieldgenerator.qdocconf
index 21094c065..a74452d9c 100644
--- a/src/distancefieldgenerator/doc/qtdistancefieldgenerator.qdocconf
+++ b/src/distancefieldgenerator/doc/qtdistancefieldgenerator.qdocconf
@@ -12,9 +12,6 @@ qhp.QtDistanceFieldGenerator.namespace = org.qt-project.qtdistancefiel
qhp.QtDistanceFieldGenerator.virtualFolder = qtdistancefieldgenerator
qhp.QtDistanceFieldGenerator.indexTitle = Qt Distance Field Generator Manual
-qhp.QtDistanceFieldGenerator.filterAttributes = qt $QT_VERSION tools qtdistancefieldgenerator
-qhp.QtDistanceFieldGenerator.customFilters.QtDistanceFieldGenerator.name = Qt Distance Field Generator Manual
-qhp.QtDistanceFieldGenerator.customFilters.QtDistanceFieldGenerator.filterAttributes = qt tools qtdistancefieldgenerator
qhp.QtDistanceFieldGenerator.subprojects = manual
qhp.QtDistanceFieldGenerator.subprojects.manual.title = Manual
qhp.QtDistanceFieldGenerator.subprojects.manual.indexTitle = Qt Distance Field Generator Manual
@@ -27,3 +24,4 @@ imagedirs = images
depends += qtdoc qtqml qtquick qtcore qtgui qmake
navigation.landingpage = "Qt Distance Field Generator Manual"
+
diff --git a/src/distancefieldgenerator/doc/src/distancefieldgenerator-manual.qdoc b/src/distancefieldgenerator/doc/src/distancefieldgenerator-manual.qdoc
index 68a37ddbc..0faa8b50e 100644
--- a/src/distancefieldgenerator/doc/src/distancefieldgenerator-manual.qdoc
+++ b/src/distancefieldgenerator/doc/src/distancefieldgenerator-manual.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\page qtdistancefieldgenerator-index.html
diff --git a/src/distancefieldgenerator/main.cpp b/src/distancefieldgenerator/main.cpp
index 8fdcaba30..bb852c9cb 100644
--- a/src/distancefieldgenerator/main.cpp
+++ b/src/distancefieldgenerator/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "mainwindow.h"
diff --git a/src/distancefieldgenerator/mainwindow.cpp b/src/distancefieldgenerator/mainwindow.cpp
index 2f0820ae7..703e73857 100644
--- a/src/distancefieldgenerator/mainwindow.cpp
+++ b/src/distancefieldgenerator/mainwindow.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "mainwindow.h"
#include "ui_mainwindow.h"
@@ -52,7 +27,10 @@ QT_BEGIN_NAMESPACE
static void openHelp()
{
- QDesktopServices::openUrl(QUrl(QLatin1String("http://doc.qt.io/qt-5/qtdistancefieldgenerator-index.html")));
+ const int qtVersion = QT_VERSION;
+ QString url;
+ QTextStream(&url) << "https://doc.qt.io/qt-" << (qtVersion >> 16) << "/qtdistancefieldgenerator-index.html";
+ QDesktopServices::openUrl(QUrl(url));
}
MainWindow::MainWindow(QWidget *parent)
@@ -313,7 +291,7 @@ void MainWindow::save()
outBuffer.write(reinterpret_cast<char *>(&fontDirectoryHeader),
sizeof(FontDirectoryHeader));
- QVarLengthArray<QPair<quint32, quint32>> offsetLengthPairs;
+ QVarLengthArray<std::pair<quint32, quint32>> offsetLengthPairs;
offsetLengthPairs.reserve(numTables - 1);
// Copy the offset table, updating offsets
@@ -324,8 +302,8 @@ void MainWindow::save()
quint32 originalOffset = qFromBigEndian(offsetTable->offset);
quint32 length = qFromBigEndian(offsetTable->length);
- offsetLengthPairs.append(qMakePair(originalOffset, length));
- if (offsetTable->tag == qToBigEndian(MAKE_TAG('h', 'e', 'a', 'd')))
+ offsetLengthPairs.append({originalOffset, length});
+ if (offsetTable->tag == qFromBigEndian(QFont::Tag("head").value()))
headOffset = currentOffset;
TableRecord newTableRecord;
@@ -354,11 +332,11 @@ void MainWindow::save()
TableRecord qtdfRecord;
qtdfRecord.offset = qToBigEndian(currentOffset);
- qtdfRecord.length = qToBigEndian(qtdf.length());
- qtdfRecord.tag = qToBigEndian(MAKE_TAG('q', 't', 'd', 'f'));
+ qtdfRecord.length = qToBigEndian(qtdf.size());
+ qtdfRecord.tag = qFromBigEndian(QFont::Tag("qtdf").value());
quint32 checkSum = 0;
const quint32 *start = reinterpret_cast<const quint32 *>(qtdf.constData());
- const quint32 *end = reinterpret_cast<const quint32 *>(qtdf.constData() + qtdf.length());
+ const quint32 *end = reinterpret_cast<const quint32 *>(qtdf.constData() + qtdf.size());
while (start < end)
checkSum += *(start++);
qtdfRecord.checkSum = qToBigEndian(checkSum);
@@ -368,7 +346,7 @@ void MainWindow::save()
}
// Copy all font tables
- for (const QPair<quint32, quint32> &offsetLengthPair : offsetLengthPairs) {
+ for (const std::pair<quint32, quint32> &offsetLengthPair : offsetLengthPairs) {
PAD_BUFFER(outBuffer, output.size())
outBuffer.write(reinterpret_cast<char *>(inData + offsetLengthPair.first),
offsetLengthPair.second);
@@ -384,7 +362,7 @@ void MainWindow::save()
quint32 checkSum = 0;
const quint32 *start = reinterpret_cast<const quint32 *>(output.constData());
- const quint32 *end = reinterpret_cast<const quint32 *>(output.constData() + output.length());
+ const quint32 *end = reinterpret_cast<const quint32 *>(output.constData() + output.size());
while (start < end)
checkSum += *(start++);
@@ -768,7 +746,7 @@ void MainWindow::about()
"to prepare a font cache for Qt applications.</p>"
"<p>Copyright (C) %2 The Qt Company Ltd.</p>")
.arg(QLatin1String(QT_VERSION_STR))
- .arg(QLatin1String("2019")));
+ .arg(QString()));
msgBox->show();
}
diff --git a/src/distancefieldgenerator/mainwindow.h b/src/distancefieldgenerator/mainwindow.h
index 89a83db52..c65d21820 100644
--- a/src/distancefieldgenerator/mainwindow.h
+++ b/src/distancefieldgenerator/mainwindow.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
diff --git a/src/global/.prev_CMakeLists.txt b/src/global/.prev_CMakeLists.txt
deleted file mode 100644
index d97f5a202..000000000
--- a/src/global/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated from global.pro.
-
-#####################################################################
-## Tools Module:
-#####################################################################
-
-qt_add_module(Tools
- INTERNAL_MODULE
- HEADER_MODULE
-)
-
-#### Keys ignored in scope 1:.:.:global.pro:<TRUE>:
-# MODULE = "tools"
diff --git a/src/global/CMakeLists.txt b/src/global/CMakeLists.txt
index 961b35699..b540d974c 100644
--- a/src/global/CMakeLists.txt
+++ b/src/global/CMakeLists.txt
@@ -1,16 +1,17 @@
-# Generated from global.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## Tools Module:
#####################################################################
-qt_add_module(Tools
+qt_internal_add_module(Tools
INTERNAL_MODULE
HEADER_MODULE
# special case begin
CONFIGURE_FILE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../configure.cmake"
# special case end
+ MODULE_INTERFACE_NAME Tools # Specify the 'Tools' name explicitly to avoid warning
+ # related to the expected name of internal module.
+ NO_GENERATE_CPP_EXPORTS
)
-
-#### Keys ignored in scope 1:.:.:global.pro:<TRUE>:
-# MODULE = "tools"
diff --git a/src/global/global.pro b/src/global/global.pro
deleted file mode 100644
index 42473fb8b..000000000
--- a/src/global/global.pro
+++ /dev/null
@@ -1,6 +0,0 @@
-TARGET = QtTools
-MODULE = tools
-CONFIG += internal_module header_module
-QT =
-
-load(qt_module)
diff --git a/src/kmap2qmap/CMakeLists.txt b/src/kmap2qmap/CMakeLists.txt
index 3dcf76641..040992ce3 100644
--- a/src/kmap2qmap/CMakeLists.txt
+++ b/src/kmap2qmap/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from kmap2qmap.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## kmap2qmap App:
@@ -13,7 +14,3 @@ qt_internal_add_app(kmap2qmap
set_target_properties(kmap2qmap PROPERTIES
WIN32_EXECUTABLE FALSE
)
-
-#### Keys ignored in scope 1:.:.:kmap2qmap.pro:<TRUE>:
-# QT_FOR_CONFIG = "tools-private"
-# _REQUIREMENTS = "qtConfig(kmap2qmap)"
diff --git a/src/kmap2qmap/kmap2qmap.pro b/src/kmap2qmap/kmap2qmap.pro
deleted file mode 100644
index 18e38dece..000000000
--- a/src/kmap2qmap/kmap2qmap.pro
+++ /dev/null
@@ -1,10 +0,0 @@
-include($$OUT_PWD/../../src/global/qttools-config.pri)
-QT_FOR_CONFIG += tools-private
-requires(qtConfig(kmap2qmap))
-
-QT = core input_support-private
-CONFIG += console
-
-SOURCES += main.cpp
-
-load(qt_app)
diff --git a/src/kmap2qmap/main.cpp b/src/kmap2qmap/main.cpp
index 57cfdd9ff..0a73d3c2c 100644
--- a/src/kmap2qmap/main.cpp
+++ b/src/kmap2qmap/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtGui module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <cstdio>
@@ -134,7 +109,8 @@ static const struct symbol_map_t symbol_map[] = {
{ "twosuperior", Qt::Key_twosuperior },
{ "threesuperior", Qt::Key_threesuperior },
{ "acute", Qt::Key_acute },
- { "mu", Qt::Key_mu },
+ { "micro", Qt::Key_micro },
+ { "mu", Qt::Key_micro }, // Old name, deprecated since Qt 6.6
{ "paragraph", Qt::Key_paragraph },
{ "periodcentered", Qt::Key_periodcentered },
{ "cedilla", Qt::Key_cedilla },
@@ -641,7 +617,7 @@ bool KeymapParser::parseKmap(QFile *f)
searchpath << d;
searchpath << QDir::current();
- for (const QDir &path : qAsConst(searchpath)) {
+ for (const QDir &path : std::as_const(searchpath)) {
QFile f2(path.filePath(incname));
//qWarning(" -- trying to include %s", qPrintable(f2.fileName()));
if (f2.open(QIODevice::ReadOnly)) {
diff --git a/src/linguist/.prev_CMakeLists.txt b/src/linguist/.prev_CMakeLists.txt
deleted file mode 100644
index ea22351ea..000000000
--- a/src/linguist/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-# Generated from linguist.pro.
-
-
-qt_exclude_tool_directories_from_default_target(
- linguist
-)
-
-if(NOT QT_FEATURE_linguist)
- return()
-endif()
-add_subdirectory(lconvert)
-add_subdirectory(lprodump)
-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)
- add_subdirectory(linguist)
-endif()
diff --git a/src/linguist/CMakeLists.txt b/src/linguist/CMakeLists.txt
index 6116d3bb4..ef28c0ff3 100644
--- a/src/linguist/CMakeLists.txt
+++ b/src/linguist/CMakeLists.txt
@@ -1,5 +1,5 @@
-# Generated from linguist.pro.
-
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
qt_exclude_tool_directories_from_default_target(
linguist
@@ -18,7 +18,10 @@ if(QT_FEATURE_process AND QT_FEATURE_pushbutton AND QT_FEATURE_toolbutton AND TA
add_subdirectory(linguist)
endif()
-# special case begin
# Create a fake module that would emulate the Qt5::LinguistTools CMake Config package
-add_qt_module(Linguist NO_MODULE_HEADERS HEADER_MODULE)
-# special case end
+qt_internal_add_module(Linguist
+ HEADER_MODULE
+ NO_MODULE_HEADERS
+ NO_PRIVATE_MODULE
+ NO_GENERATE_CPP_EXPORTS
+)
diff --git a/src/linguist/GenerateLUpdateProject.cmake b/src/linguist/GenerateLUpdateProject.cmake
new file mode 100644
index 000000000..e359708c5
--- /dev/null
+++ b/src/linguist/GenerateLUpdateProject.cmake
@@ -0,0 +1,152 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+# Generate an lupdate project file in JSON format.
+#
+# This file is to be used in CMake script mode with the following variables set:
+#
+# IN_FILE: .cmake file that sets lupdate_* variables
+# OUT_FILE: lupdate project .json file
+
+include("${IN_FILE}")
+
+# Converts a CMake list into a string containing a JSON array
+# a,b,c -> [ "a", "b", "c" ]
+function(list_to_json_array srcList jsonList)
+ set(quotedList "")
+ foreach(entry ${srcList})
+ list(APPEND quotedList "\"${entry}\"")
+ endforeach()
+ list(JOIN quotedList ", " joinedList)
+ set(${jsonList} "[ ${joinedList} ]" PARENT_SCOPE)
+endfunction()
+
+# Remove all nonexistent files from ARGN and store the result in out_var.
+# filter_nonexistent_files(existing_files foo.txt bar.cpp)
+# -> foo.txt (if foo.txt exists and bar.cpp does not)
+function(filter_nonexistent_files out_var)
+ # Filter out non-existent (generated) source files
+ set(existing_sources "")
+ foreach(path IN LISTS ARGN)
+ if(EXISTS "${path}")
+ list(APPEND existing_sources "${path}")
+ endif()
+ endforeach()
+ set("${out_var}" "${existing_sources}" PARENT_SCOPE)
+endfunction()
+
+# Remove source files that are unsuitable input for lupdate.
+# filter_unsuitable_lupdate_input(sources main.cpp foo_de.qm bar.qml whatever_metatypes.json)
+# -> main.cpp bar.qml
+function(filter_unsuitable_lupdate_input out_var)
+ set(result ${ARGN})
+ list(FILTER result EXCLUDE REGEX "\\.(qm|json)$")
+ set("${out_var}" "${result}" PARENT_SCOPE)
+endfunction()
+
+# Remove files from SOURCES that are in EXCLUDED_DIR.
+# filter_files_in_directory(existing_files
+# EXCLUDED_DIR .../target_autogen
+# SOURCES .../src/foo.ui .../target_autogen/include/ui_foo.h)
+# -> .../src/foo.ui
+function(filter_files_in_directory out_var)
+ set(no_value_options "")
+ set(single_value_options EXCLUDED_DIR)
+ set(multi_value_options SOURCES)
+ cmake_parse_arguments(PARSE_ARGV 1 arg
+ "${no_value_options}" "${single_value_options}" "${multi_value_options}"
+ )
+
+ set(result "")
+ foreach(source_file IN LISTS arg_SOURCES)
+ file(RELATIVE_PATH relative_path "${arg_EXCLUDED_DIR}" "${source_file}")
+ if(IS_ABSOLUTE "${relative_path}" OR (relative_path MATCHES "^\\.\\."))
+ list(APPEND result "${source_file}")
+ endif()
+ endforeach()
+ set("${out_var}" "${result}" PARENT_SCOPE)
+endfunction()
+
+function(prepare_json_sources out_var)
+ set(no_value_options "")
+ set(single_value_options AUTOGEN_DIR)
+ set(multi_value_options SOURCES)
+ cmake_parse_arguments(PARSE_ARGV 1 arg
+ "${no_value_options}" "${single_value_options}" "${multi_value_options}"
+ )
+
+ filter_nonexistent_files(sources ${arg_SOURCES})
+ filter_unsuitable_lupdate_input(sources ${sources})
+ if(DEFINED arg_AUTOGEN_DIR)
+ filter_files_in_directory(sources EXCLUDED_DIR ${arg_AUTOGEN_DIR} SOURCES ${sources})
+ endif()
+ list_to_json_array("${sources}" result)
+ set("${out_var}" "${result}" PARENT_SCOPE)
+endfunction()
+
+get_filename_component(project_root "${lupdate_project_file}" DIRECTORY)
+
+# Make relative paths absolute to the project root
+set(path_variables sources include_paths translations)
+if(lupdate_subproject_count GREATER 0)
+ foreach(i RANGE 1 ${lupdate_subproject_count})
+ list(APPEND path_variables
+ subproject${i}_include_paths
+ subproject${i}_sources
+ subproject${i}_excluded
+ )
+ endforeach()
+endif()
+foreach(path_var IN LISTS path_variables)
+ set(absolute_${path_var} "")
+ foreach(path IN LISTS lupdate_${path_var})
+ if(path STREQUAL "")
+ continue()
+ endif()
+ if(NOT IS_ABSOLUTE "${path}")
+ if(path_var MATCHES "^subproject[0-9]+_")
+ set(base_dir "${lupdate_${CMAKE_MATCH_0}source_dir}")
+ else()
+ set(base_dir "${project_root}")
+ endif()
+ get_filename_component(path "${path}" ABSOLUTE BASE_DIR "${base_dir}")
+ endif()
+ list(APPEND absolute_${path_var} "${path}")
+ endforeach()
+endforeach()
+
+prepare_json_sources(json_sources SOURCES ${absolute_sources})
+list_to_json_array("${absolute_include_paths}" json_include_paths)
+list_to_json_array("${absolute_translations}" json_translations)
+
+set(content "{
+ \"projectFile\": \"${lupdate_project_file}\",
+ \"includePaths\": ${json_include_paths},
+ \"sources\": ${json_sources},
+ \"translations\": ${json_translations},
+ \"subProjects\": [
+")
+if(lupdate_subproject_count GREATER 0)
+ foreach(i RANGE 1 ${lupdate_subproject_count})
+ prepare_json_sources(json_sources
+ AUTOGEN_DIR ${lupdate_subproject${i}_autogen_dir}
+ SOURCES ${absolute_subproject${i}_sources}
+ )
+ list_to_json_array("${absolute_subproject${i}_include_paths}" json_include_paths)
+ list_to_json_array("${absolute_subproject${i}_excluded}" json_sources_exclusions)
+ string(APPEND content " {
+ \"projectFile\": \"${lupdate_subproject${i}_source_dir}/CMakeLists.txt\",
+ \"includePaths\": ${json_include_paths},
+ \"sources\": ${json_sources},
+ \"excluded\": ${json_sources_exclusions}
+ }")
+ if(i LESS lupdate_subproject_count)
+ string(APPEND content ",")
+ endif()
+ string(APPEND content "\n")
+ endforeach()
+endif()
+string(APPEND content " ]
+}
+")
+file(WRITE "${OUT_FILE}" "${content}")
diff --git a/src/linguist/Qt5LinguistToolsConfig.cmake.in b/src/linguist/Qt5LinguistToolsConfig.cmake.in
deleted file mode 100644
index 2e99bc762..000000000
--- a/src/linguist/Qt5LinguistToolsConfig.cmake.in
+++ /dev/null
@@ -1,103 +0,0 @@
-
-if (CMAKE_VERSION VERSION_LESS 2.8.3)
- message(FATAL_ERROR \"Qt 5 requires at least CMake version 2.8.3\")
-endif()
-
-!!IF !isEmpty(CMAKE_USR_MOVE_WORKAROUND)
-!!IF !isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
-set(_qt5_linguisttools_install_prefix \"$$[QT_INSTALL_PREFIX]\")
-!!ELSE
-get_filename_component(_IMPORT_PREFIX \"${CMAKE_CURRENT_LIST_FILE}\" PATH)
-# Use original install prefix when loaded through a
-# cross-prefix symbolic link such as /lib -> /usr/lib.
-get_filename_component(_realCurr \"${_IMPORT_PREFIX}\" REALPATH)
-get_filename_component(_realOrig \"$$CMAKE_INSTALL_LIBS_DIR/cmake/Qt5LinguistTools\" REALPATH)
-if(_realCurr STREQUAL _realOrig)
- get_filename_component(_qt5_linguisttools_install_prefix \"$$CMAKE_INSTALL_LIBS_DIR/$${CMAKE_RELATIVE_INSTALL_LIBS_DIR}\" ABSOLUTE)
-else()
- get_filename_component(_qt5_linguisttools_install_prefix \"${CMAKE_CURRENT_LIST_DIR}/$${CMAKE_RELATIVE_INSTALL_DIR}\" ABSOLUTE)
-endif()
-unset(_realOrig)
-unset(_realCurr)
-unset(_IMPORT_PREFIX)
-!!ENDIF
-!!ELIF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
-get_filename_component(_qt5_linguisttools_install_prefix \"${CMAKE_CURRENT_LIST_DIR}/$${CMAKE_RELATIVE_INSTALL_DIR}\" ABSOLUTE)
-!!ELSE
-set(_qt5_linguisttools_install_prefix \"$$[QT_INSTALL_PREFIX]\")
-!!ENDIF
-
-macro(_qt5_LinguistTools_check_file_exists file)
- if(NOT EXISTS \"${file}\" )
- message(FATAL_ERROR \"The package \\\"Qt5LinguistTools\\\" references the file
- \\\"${file}\\\"
-but this file does not exist. Possible reasons include:
-* The file was deleted, renamed, or moved to another location.
-* An install or uninstall procedure did not complete successfully.
-* The installation package was faulty and contained
- \\\"${CMAKE_CURRENT_LIST_FILE}\\\"
-but not all the files it references.
-\")
- endif()
-endmacro()
-
-if (NOT TARGET Qt5::lrelease)
- add_executable(Qt5::lrelease IMPORTED)
-
-!!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
- set(imported_location \"${_qt5_linguisttools_install_prefix}/$${CMAKE_BIN_DIR}lrelease$$CMAKE_BIN_SUFFIX\")
-!!ELSE
- set(imported_location \"$${CMAKE_BIN_DIR}lrelease$$CMAKE_BIN_SUFFIX\")
-!!ENDIF
- _qt5_LinguistTools_check_file_exists(${imported_location})
-
- set_target_properties(Qt5::lrelease PROPERTIES
- IMPORTED_LOCATION ${imported_location}
- )
-endif()
-
-if (NOT TARGET Qt5::lupdate)
- add_executable(Qt5::lupdate IMPORTED)
-
-!!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
- set(imported_location \"${_qt5_linguisttools_install_prefix}/$${CMAKE_BIN_DIR}lupdate$$CMAKE_BIN_SUFFIX\")
-!!ELSE
- set(imported_location \"$${CMAKE_BIN_DIR}lupdate$$CMAKE_BIN_SUFFIX\")
-!!ENDIF
- _qt5_LinguistTools_check_file_exists(${imported_location})
-
- set_target_properties(Qt5::lupdate PROPERTIES
- IMPORTED_LOCATION ${imported_location}
- )
-endif()
-
-if (NOT TARGET Qt5::lconvert)
- add_executable(Qt5::lconvert IMPORTED)
-
-!!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
- set(imported_location \"${_qt5_linguisttools_install_prefix}/$${CMAKE_BIN_DIR}lconvert$$CMAKE_BIN_SUFFIX\")
-!!ELSE
- set(imported_location \"$${CMAKE_BIN_DIR}lconvert$$CMAKE_BIN_SUFFIX\")
-!!ENDIF
- _qt5_LinguistTools_check_file_exists(${imported_location})
-
- set_target_properties(Qt5::lconvert PROPERTIES
- IMPORTED_LOCATION ${imported_location}
- )
-endif()
-
-set(Qt5_LRELEASE_EXECUTABLE Qt5::lrelease)
-set(Qt5_LUPDATE_EXECUTABLE Qt5::lupdate)
-
-# Create versionless tool targets.
-foreach(__qt_tool lrelease lupdate lconvert)
- if(NOT \"${QT_NO_CREATE_VERSIONLESS_TARGETS}\" AND NOT TARGET Qt::${__qt_tool}
- AND TARGET Qt5::${__qt_tool})
- add_executable(Qt::${__qt_tool} IMPORTED)
- get_target_property(__qt_imported_location Qt5::${__qt_tool} IMPORTED_LOCATION)
- set_target_properties(Qt::${__qt_tool}
- PROPERTIES IMPORTED_LOCATION \"${__qt_imported_location}\")
- endif()
-endforeach()
-
-include(\"${CMAKE_CURRENT_LIST_DIR}/Qt5LinguistToolsMacros.cmake\")
diff --git a/src/linguist/Qt5LinguistToolsMacros.cmake b/src/linguist/Qt5LinguistToolsMacros.cmake
deleted file mode 100644
index ab271d56a..000000000
--- a/src/linguist/Qt5LinguistToolsMacros.cmake
+++ /dev/null
@@ -1,136 +0,0 @@
-#=============================================================================
-# Copyright 2005-2011 Kitware, Inc.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# * Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# * Neither the name of Kitware, Inc. nor the names of its
-# contributors may be used to endorse or promote products derived
-# from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#=============================================================================
-
-include(CMakeParseArguments)
-
-function(QT5_CREATE_TRANSLATION _qm_files)
- set(options)
- set(oneValueArgs)
- set(multiValueArgs OPTIONS)
-
- cmake_parse_arguments(_LUPDATE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
- set(_lupdate_files ${_LUPDATE_UNPARSED_ARGUMENTS})
- set(_lupdate_options ${_LUPDATE_OPTIONS})
-
- set(_my_sources)
- set(_my_tsfiles)
- foreach(_file ${_lupdate_files})
- get_filename_component(_ext ${_file} EXT)
- get_filename_component(_abs_FILE ${_file} ABSOLUTE)
- if(_ext MATCHES "ts")
- list(APPEND _my_tsfiles ${_abs_FILE})
- else()
- list(APPEND _my_sources ${_abs_FILE})
- endif()
- endforeach()
- foreach(_ts_file ${_my_tsfiles})
- if(_my_sources)
- # make a list file to call lupdate on, so we don't make our commands too
- # long for some systems
- get_filename_component(_ts_name ${_ts_file} NAME)
- set(_ts_lst_file "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_ts_name}_lst_file")
- set(_lst_file_srcs)
- foreach(_lst_file_src ${_my_sources})
- set(_lst_file_srcs "${_lst_file_src}\n${_lst_file_srcs}")
- endforeach()
-
- get_directory_property(_inc_DIRS INCLUDE_DIRECTORIES)
- foreach(_pro_include ${_inc_DIRS})
- get_filename_component(_abs_include "${_pro_include}" ABSOLUTE)
- set(_lst_file_srcs "-I${_pro_include}\n${_lst_file_srcs}")
- endforeach()
-
- file(WRITE ${_ts_lst_file} "${_lst_file_srcs}")
- endif()
- add_custom_command(OUTPUT ${_ts_file}
- COMMAND ${Qt5_LUPDATE_EXECUTABLE}
- ARGS ${_lupdate_options} "@${_ts_lst_file}" -ts ${_ts_file}
- DEPENDS ${_my_sources}
- BYPRODUCTS ${_ts_lst_file} VERBATIM)
- endforeach()
- qt5_add_translation(${_qm_files} ${_my_tsfiles})
- set(${_qm_files} ${${_qm_files}} PARENT_SCOPE)
-endfunction()
-
-if(NOT QT_NO_CREATE_VERSIONLESS_FUNCTIONS)
- function(qt_create_translation _qm_files)
- if(QT_DEFAULT_MAJOR_VERSION EQUAL 5)
- qt5_create_translation("${_qm_files}" ${ARGN})
- elseif(QT_DEFAULT_MAJOR_VERSION EQUAL 6)
- qt6_create_translation("${_qm_files}" ${ARGN})
- endif()
- set("${_qm_files}" "${${_qm_files}}" PARENT_SCOPE)
- endfunction()
-endif()
-
-
-function(QT5_ADD_TRANSLATION _qm_files)
- set(options)
- set(oneValueArgs)
- set(multiValueArgs OPTIONS)
-
- cmake_parse_arguments(_LRELEASE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
- set(_lrelease_files ${_LRELEASE_UNPARSED_ARGUMENTS})
-
- foreach(_current_FILE ${_lrelease_files})
- get_filename_component(_abs_FILE ${_current_FILE} ABSOLUTE)
- get_filename_component(qm ${_abs_FILE} NAME)
- # everything before the last dot has to be considered the file name (including other dots)
- string(REGEX REPLACE "\\.[^.]*$" "" FILE_NAME ${qm})
- get_source_file_property(output_location ${_abs_FILE} OUTPUT_LOCATION)
- if(output_location)
- file(MAKE_DIRECTORY "${output_location}")
- set(qm "${output_location}/${FILE_NAME}.qm")
- else()
- set(qm "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.qm")
- endif()
-
- add_custom_command(OUTPUT ${qm}
- COMMAND ${Qt5_LRELEASE_EXECUTABLE}
- ARGS ${_LRELEASE_OPTIONS} ${_abs_FILE} -qm ${qm}
- DEPENDS ${_abs_FILE} VERBATIM
- )
- list(APPEND ${_qm_files} ${qm})
- endforeach()
- set(${_qm_files} ${${_qm_files}} PARENT_SCOPE)
-endfunction()
-
-if(NOT QT_NO_CREATE_VERSIONLESS_FUNCTIONS)
- function(qt_add_translation _qm_files)
- if(QT_DEFAULT_MAJOR_VERSION EQUAL 5)
- qt5_add_translation("${_qm_files}" ${ARGN})
- elseif(QT_DEFAULT_MAJOR_VERSION EQUAL 6)
- qt6_add_translation("${_qm_files}" ${ARGN})
- endif()
- set("${_qm_files}" "${${_qm_files}}" PARENT_SCOPE)
- endfunction()
-endif()
diff --git a/src/linguist/Qt6LinguistToolsMacros.cmake b/src/linguist/Qt6LinguistToolsMacros.cmake
new file mode 100644
index 000000000..b9c924c9c
--- /dev/null
+++ b/src/linguist/Qt6LinguistToolsMacros.cmake
@@ -0,0 +1,774 @@
+# Copyright (C) 2020 The Qt Company Ltd.
+# Copyright 2005-2011 Kitware, Inc.
+# SPDX-License-Identifier: BSD-3-Clause
+
+include(CMakeParseArguments)
+
+function(qt6_create_translation _qm_files)
+ set(options)
+ set(oneValueArgs)
+ set(multiValueArgs OPTIONS)
+
+ cmake_parse_arguments(_LUPDATE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+ set(_lupdate_files ${_LUPDATE_UNPARSED_ARGUMENTS})
+ set(_lupdate_options ${_LUPDATE_OPTIONS})
+
+ list(FIND _lupdate_options "-extensions" _extensions_index)
+ if(_extensions_index GREATER -1)
+ math(EXPR _extensions_index "${_extensions_index} + 1")
+ list(GET _lupdate_options ${_extensions_index} _extensions_list)
+ string(REPLACE "," ";" _extensions_list "${_extensions_list}")
+ list(TRANSFORM _extensions_list STRIP)
+ list(TRANSFORM _extensions_list REPLACE "^\\." "")
+ list(TRANSFORM _extensions_list PREPEND "*.")
+ else()
+ set(_extensions_list "*.java;*.jui;*.ui;*.c;*.c++;*.cc;*.cpp;*.cxx;*.ch;*.h;*.h++;*.hh;*.hpp;*.hxx;*.js;*.qs;*.qml;*.qrc")
+ endif()
+ set(_my_sources)
+ set(_my_tsfiles)
+ foreach(_file ${_lupdate_files})
+ get_filename_component(_ext ${_file} EXT)
+ get_filename_component(_abs_FILE ${_file} ABSOLUTE)
+ if(_ext MATCHES "ts")
+ list(APPEND _my_tsfiles ${_abs_FILE})
+ else()
+ list(APPEND _my_sources ${_abs_FILE})
+ endif()
+ endforeach()
+ set(stamp_file_dir "${CMAKE_CURRENT_BINARY_DIR}/.lupdate")
+ if(NOT EXISTS "${stamp_file_dir}")
+ file(MAKE_DIRECTORY "${stamp_file_dir}")
+ endif()
+ set(stamp_files "")
+ foreach(_ts_file ${_my_tsfiles})
+ get_filename_component(_ts_name ${_ts_file} NAME)
+ if(_my_sources)
+ # make a list file to call lupdate on, so we don't make our commands too
+ # long for some systems
+ set(_ts_lst_file "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_ts_name}_lst_file")
+ set(_lst_file_srcs)
+ set(_dependencies)
+ foreach(_lst_file_src ${_my_sources})
+ set(_lst_file_srcs "${_lst_file_src}\n${_lst_file_srcs}")
+ if(IS_DIRECTORY ${_lst_file_src})
+ list(TRANSFORM _extensions_list PREPEND "${_lst_file_src}/" OUTPUT_VARIABLE _directory_glob)
+ file(GLOB_RECURSE _directory_contents CONFIGURE_DEPENDS ${_directory_glob})
+ list(APPEND _dependencies ${_directory_contents})
+ else()
+ list(APPEND _dependencies "${_lst_file_src}")
+ endif()
+ endforeach()
+
+ get_directory_property(_inc_DIRS INCLUDE_DIRECTORIES)
+ foreach(_pro_include ${_inc_DIRS})
+ get_filename_component(_abs_include "${_pro_include}" ABSOLUTE)
+ set(_lst_file_srcs "-I${_pro_include}\n${_lst_file_srcs}")
+ endforeach()
+
+ file(WRITE ${_ts_lst_file} "${_lst_file_srcs}")
+ endif()
+ file(RELATIVE_PATH _ts_relative_path ${CMAKE_CURRENT_SOURCE_DIR} ${_ts_file})
+ string(REPLACE "../" "__/" _ts_relative_path "${_ts_relative_path}")
+ set(stamp_file "${stamp_file_dir}/${_ts_relative_path}.stamp")
+ list(APPEND stamp_files ${stamp_file})
+ get_filename_component(full_stamp_file_dir "${stamp_file}" DIRECTORY)
+ if(NOT EXISTS "${full_stamp_file_dir}")
+ file(MAKE_DIRECTORY "${full_stamp_file_dir}")
+ endif()
+ add_custom_command(OUTPUT ${stamp_file}
+ COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::lupdate
+ ARGS ${_lupdate_options} "@${_ts_lst_file}" -ts ${_ts_file}
+ COMMAND ${CMAKE_COMMAND} -E touch "${stamp_file}"
+ DEPENDS ${_dependencies}
+ VERBATIM)
+ endforeach()
+ qt6_add_translation(${_qm_files} ${_my_tsfiles} __QT_INTERNAL_TIMESTAMP_FILES ${stamp_files})
+ set(${_qm_files} ${${_qm_files}} PARENT_SCOPE)
+endfunction()
+
+function(qt6_add_translation _qm_files)
+ set(options)
+ set(oneValueArgs)
+ set(multiValueArgs OPTIONS __QT_INTERNAL_TIMESTAMP_FILES)
+
+ cmake_parse_arguments(_LRELEASE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+ set(_lrelease_files ${_LRELEASE_UNPARSED_ARGUMENTS})
+
+ set(idx 0)
+ foreach(_current_FILE ${_lrelease_files})
+ get_filename_component(_abs_FILE ${_current_FILE} ABSOLUTE)
+ get_filename_component(qm ${_abs_FILE} NAME)
+ # everything before the last dot has to be considered the file name (including other dots)
+ string(REGEX REPLACE "\\.[^.]*$" "" FILE_NAME ${qm})
+ get_source_file_property(output_location ${_abs_FILE} OUTPUT_LOCATION)
+ if(output_location)
+ file(MAKE_DIRECTORY "${output_location}")
+ set(qm "${output_location}/${FILE_NAME}.qm")
+ else()
+ set(qm "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.qm")
+ endif()
+
+ if(_LRELEASE___QT_INTERNAL_TIMESTAMP_FILES)
+ list(GET _LRELEASE___QT_INTERNAL_TIMESTAMP_FILES ${idx} qm_dep)
+ math(EXPR idx "${idx} + 1")
+ else()
+ set(qm_dep "${_abs_FILE}")
+ endif()
+
+ add_custom_command(OUTPUT ${qm}
+ COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::lrelease
+ ARGS ${_LRELEASE_OPTIONS} ${_abs_FILE} -qm ${qm}
+ DEPENDS ${qm_dep} VERBATIM
+ )
+ list(APPEND ${_qm_files} ${qm})
+ endforeach()
+ set(${_qm_files} ${${_qm_files}} PARENT_SCOPE)
+endfunction()
+
+function(_qt_internal_collect_translation_source_targets out_var dir)
+ set(result "")
+ get_property(excluded DIRECTORY "${dir}" PROPERTY QT_EXCLUDE_FROM_TRANSLATION)
+ if(NOT excluded)
+ get_property(subdirs DIRECTORY "${dir}" PROPERTY SUBDIRECTORIES)
+ foreach(subdir IN LISTS subdirs)
+ _qt_internal_collect_translation_source_targets(subresult "${subdir}")
+ list(APPEND result ${subresult})
+ endforeach()
+ get_property(dir_targets DIRECTORY "${dir}" PROPERTY BUILDSYSTEM_TARGETS)
+ foreach(target IN LISTS dir_targets)
+ get_target_property(target_type ${target} TYPE)
+ if(CMAKE_VERSION VERSION_LESS "3.19" AND target_type STREQUAL "INTERFACE_LIBRARY")
+ # Skip INTERFACE libraries with CMake < 3.19 to avoid an error about
+ # QT_EXCLUDE_FROM_TRANSLATION not being whitelisted.
+ continue()
+ endif()
+ get_target_property(excluded ${target} QT_EXCLUDE_FROM_TRANSLATION)
+ if(NOT excluded AND NOT target_type STREQUAL "UTILITY")
+ list(APPEND result ${target})
+ endif()
+ endforeach()
+ endif()
+ set("${out_var}" "${result}" PARENT_SCOPE)
+endfunction()
+
+function(qt6_collect_translation_source_targets out_var)
+ set(no_value_options "")
+ set(single_value_options DIRECTORY)
+ set(multi_value_options "")
+ cmake_parse_arguments(PARSE_ARGV 1 arg
+ "${no_value_options}" "${single_value_options}" "${multi_value_options}"
+ )
+
+ set(dir "${arg_DIRECTORY}")
+ if(dir STREQUAL "")
+ set(dir "${CMAKE_CURRENT_SOURCE_DIR}")
+ endif()
+
+ _qt_internal_collect_translation_source_targets(result "${dir}")
+ set("${out_var}" "${result}" PARENT_SCOPE)
+endfunction()
+
+# Makes the paths in the unparsed arguments absolute and stores them in out_var.
+function(qt_internal_make_paths_absolute out_var)
+ set(result "")
+ foreach(path IN LISTS ARGN)
+ get_filename_component(abs_path "${path}" ABSOLUTE)
+ list(APPEND result "${abs_path}")
+ endforeach()
+ set("${out_var}" "${result}" PARENT_SCOPE)
+endfunction()
+
+# If the given TS_FILE does not exist, write an initial .ts file that can be read by lrelease and
+# updated by lupdate.
+function(_qt_internal_ensure_ts_file)
+ set(no_value_options "")
+ set(single_value_options TS_FILE)
+ set(multi_value_options "")
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ "${no_value_options}" "${single_value_options}" "${multi_value_options}"
+ )
+
+ if(EXISTS "${arg_TS_FILE}")
+ return()
+ endif()
+
+ file(WRITE "${arg_TS_FILE}"
+ [[<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS/>
+]])
+endfunction()
+
+# Needed to locate Qt6LupdateProject.json.in file inside functions
+set(_Qt6_LINGUIST_TOOLS_DIR ${CMAKE_CURRENT_LIST_DIR} CACHE INTERNAL "")
+
+function(qt6_add_lupdate)
+ set(options
+ NO_GLOBAL_TARGET)
+ set(oneValueArgs
+ PLURALS_TS_FILE
+ LUPDATE_TARGET)
+ set(multiValueArgs
+ SOURCE_TARGETS
+ TS_FILES
+ SOURCES
+ INCLUDE_DIRECTORIES
+ OPTIONS)
+ cmake_parse_arguments(arg "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+ # Set up the list of targets. Support the old command signature that takes one target as first
+ # argument.
+ set(targets "${arg_SOURCE_TARGETS}")
+ if("${targets}" STREQUAL "")
+ list(POP_FRONT arg_UNPARSED_ARGUMENTS target)
+ if(TARGET "${target}")
+ list(APPEND targets ${target})
+ endif()
+ unset(target)
+ endif()
+
+ if("${targets}" STREQUAL "" AND "${arg_SOURCES}" STREQUAL "")
+ message(FATAL_ERROR "No SOURCE_TARGETS nor SOURCES were given.")
+ endif()
+
+ # Set up the name of the custom target.
+ set(lupdate_target "${arg_LUPDATE_TARGET}")
+ if("${lupdate_target}" STREQUAL "")
+ set(lupdate_target "${PROJECT_NAME}_lupdate")
+ set(lupdate_target_orig "${lupdate_target}")
+ set(n 1)
+ while(TARGET "${lupdate_target}")
+ set(lupdate_target "${lupdate_target_orig}${n}")
+ math(EXPR n "${n} + 1")
+ endwhile()
+ endif()
+
+ set(includePaths "")
+ set(sources "")
+ list(LENGTH targets targets_length)
+
+ if(arg_INCLUDE_DIRECTORIES)
+ qt_internal_make_paths_absolute(additionalIncludePaths "${arg_INCLUDE_DIRECTORIES}")
+ endif()
+ if(arg_SOURCES)
+ qt_internal_make_paths_absolute(additionalSources "${arg_SOURCES}")
+ endif()
+
+ set(lupdate_work_dir "${CMAKE_CURRENT_BINARY_DIR}/.lupdate")
+ qt_internal_make_paths_absolute(ts_files "${arg_TS_FILES}")
+ set(plurals_ts_file "")
+ set(raw_plurals_ts_file "")
+ if(NOT "${arg_PLURALS_TS_FILE}" STREQUAL "")
+ qt_internal_make_paths_absolute(plurals_ts_file "${arg_PLURALS_TS_FILE}")
+ _qt_internal_ensure_ts_file(TS_FILE "${plurals_ts_file}")
+ get_filename_component(raw_plurals_ts_file "${plurals_ts_file}" NAME)
+ string(PREPEND raw_plurals_ts_file "${lupdate_work_dir}/")
+ list(APPEND ts_files "${raw_plurals_ts_file}")
+ endif()
+
+ set(lupdate_project_base "${lupdate_work_dir}/${lupdate_target}_project")
+ set(lupdate_project_cmake "${lupdate_project_base}")
+ get_property(multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
+ if(multi_config)
+ string(APPEND lupdate_project_cmake ".$<CONFIG>")
+ endif()
+ string(APPEND lupdate_project_cmake ".cmake")
+ set(lupdate_project_json "${lupdate_project_base}.json")
+ set(content "set(lupdate_project_file \"${CMAKE_CURRENT_LIST_FILE}\")
+set(lupdate_translations \"${ts_files}\")
+set(lupdate_include_paths \"${additionalIncludePaths}\")
+set(lupdate_sources \"${additionalSources}\")
+set(lupdate_subproject_count ${targets_length})
+")
+ set(exclude_ts "\\.ts$")
+ set(n 1)
+ foreach(target IN LISTS targets)
+ set(includePaths "$<TARGET_PROPERTY:${target},INCLUDE_DIRECTORIES>")
+ set(sources "$<FILTER:$<TARGET_PROPERTY:${target},SOURCES>,EXCLUDE,${exclude_ts}>")
+ set(excluded "$<TARGET_PROPERTY:${target},QT_EXCLUDE_SOURCES_FROM_TRANSLATION>")
+ set(autogen_build_dir_genex "$<TARGET_PROPERTY:${target},AUTOGEN_BUILD_DIR>")
+ set(default_autogen_build_dir "$<TARGET_PROPERTY:${target},BINARY_DIR>/${target}_autogen")
+ set(autogen_dir "$<IF:$<BOOL:${autogen_build_dir_genex}>,${autogen_build_dir_genex},${default_autogen_build_dir}>")
+ string(APPEND content "
+set(lupdate_subproject${n}_source_dir \"$<TARGET_PROPERTY:${target},SOURCE_DIR>\")
+set(lupdate_subproject${n}_include_paths \"${includePaths}\")
+set(lupdate_subproject${n}_sources \"${sources}\")
+set(lupdate_subproject${n}_excluded \"${excluded}\")
+set(lupdate_subproject${n}_autogen_dir \"${autogen_dir}\")
+")
+ math(EXPR n "${n} + 1")
+ endforeach()
+ file(GENERATE OUTPUT "${lupdate_project_cmake}" CONTENT "${content}")
+
+ _qt_internal_get_tool_wrapper_script_path(tool_wrapper)
+ set(lupdate_command
+ COMMAND
+ "${tool_wrapper}"
+ $<TARGET_FILE:${QT_CMAKE_EXPORT_NAMESPACE}::lupdate>)
+ set(prepare_native_ts_command "")
+ set(finish_native_ts_command "")
+ if(NOT plurals_ts_file STREQUAL "")
+ # Copy the existing .ts file to preserve already translated strings.
+ set(prepare_native_ts_command
+ COMMAND
+ "${CMAKE_COMMAND}" -E copy "${plurals_ts_file}" "${raw_plurals_ts_file}"
+ )
+
+ # Filter out the non-numerus forms with lconvert.
+ set(finish_native_ts_command
+ COMMAND
+ "${tool_wrapper}"
+ $<TARGET_FILE:${QT_CMAKE_EXPORT_NAMESPACE}::lconvert>
+ -pluralonly
+ -i "${raw_plurals_ts_file}"
+ -o "${plurals_ts_file}"
+ )
+ endif()
+ add_custom_target(${lupdate_target}
+ COMMAND "${CMAKE_COMMAND}" "-DIN_FILE=${lupdate_project_cmake}"
+ "-DOUT_FILE=${lupdate_project_json}"
+ -P "${_Qt6_LINGUIST_TOOLS_DIR}/GenerateLUpdateProject.cmake"
+ ${prepare_native_ts_command}
+ ${lupdate_command} -project "${lupdate_project_json}" ${arg_OPTIONS}
+ ${finish_native_ts_command}
+ DEPENDS ${QT_CMAKE_EXPORT_NAMESPACE}::lupdate
+ VERBATIM)
+
+ if(NOT DEFINED QT_GLOBAL_LUPDATE_TARGET)
+ set(QT_GLOBAL_LUPDATE_TARGET update_translations)
+ endif()
+
+ if(NOT arg_NO_GLOBAL_TARGET)
+ _qt_internal_add_phony_target(${QT_GLOBAL_LUPDATE_TARGET}
+ WARNING_VARIABLE QT_NO_GLOBAL_LUPDATE_TARGET_CREATION_WARNING
+ )
+ _qt_internal_add_phony_target_dependencies(${QT_GLOBAL_LUPDATE_TARGET}
+ ${lupdate_target}
+ )
+ endif()
+endfunction()
+
+function(_qt_internal_store_languages_from_ts_files_in_targets targets ts_files)
+ if(NOT APPLE)
+ return()
+ endif()
+ set(supported_languages "")
+ foreach(ts_file IN LISTS ts_files)
+ execute_process(COMMAND /usr/bin/xmllint --xpath "string(/TS/@language)" ${ts_file}
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ OUTPUT_VARIABLE language_code
+ ERROR_VARIABLE xmllint_error)
+ if(NOT language_code OR xmllint_error)
+ message(WARNING "Failed to resolve language code for ${ts_file}. "
+ "Please update CFBundleLocalizations in your Info.plist manually.")
+ endif()
+ endforeach()
+ foreach(target IN LISTS targets)
+ set_property(TARGET "${target}" APPEND PROPERTY
+ _qt_apple_supported_languages "${supported_languages}"
+ )
+ endforeach()
+endfunction()
+
+# Store in ${out_var} the file path to the .qm file that will be generated from the given .ts file.
+function(_qt_internal_generated_qm_file_path out_var ts_file default_out_dir)
+ get_filename_component(qm ${ts_file} NAME_WLE)
+ string(APPEND qm ".qm")
+ get_source_file_property(output_location ${ts_file} OUTPUT_LOCATION)
+ if(output_location)
+ if(NOT IS_ABSOLUTE "${output_location}")
+ get_filename_component(output_location "${output_location}" ABSOLUTE
+ BASE_DIR "${default_out_dir}")
+ endif()
+ string(PREPEND qm "${output_location}/")
+ else()
+ string(PREPEND qm "${default_out_dir}/")
+ endif()
+ set("${out_var}" "${qm}" PARENT_SCOPE)
+endfunction()
+
+function(qt6_add_lrelease)
+ set(options
+ NO_TARGET_DEPENDENCY ### Qt7: remove together with legacy signature
+ EXCLUDE_FROM_ALL
+ NO_GLOBAL_TARGET)
+ set(oneValueArgs
+ __QT_INTERNAL_DEFAULT_QM_OUT_DIR
+ LRELEASE_TARGET
+ QM_FILES_OUTPUT_VARIABLE)
+ set(multiValueArgs
+ TS_FILES
+ OPTIONS)
+ cmake_parse_arguments(arg "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+ qt_internal_make_paths_absolute(ts_files "${arg_TS_FILES}")
+
+ # Support the old command signature that takes one target as first argument.
+ set(legacy_signature_used FALSE)
+ set(legacy_target "")
+ list(LENGTH arg_UNPARSED_ARGUMENTS unparsed_arguments_count)
+ if(unparsed_arguments_count GREATER 0)
+ list(POP_FRONT arg_UNPARSED_ARGUMENTS legacy_target)
+ if(TARGET "${legacy_target}")
+ set(legacy_signature_used TRUE)
+ else()
+ set(legacy_target "")
+ endif()
+ endif()
+
+ # Set up the driving target.
+ set(lrelease_target "${arg_LRELEASE_TARGET}")
+ if("${lrelease_target}" STREQUAL "")
+ set(lrelease_target "${PROJECT_NAME}_lrelease")
+ set(lrelease_target_orig "${lrelease_target}")
+ set(n 1)
+ while(TARGET "${lrelease_target}")
+ set(lrelease_target "${lrelease_target_orig}${n}")
+ math(EXPR n "${n} + 1")
+ endwhile()
+ endif()
+
+ _qt_internal_get_tool_wrapper_script_path(tool_wrapper)
+ set(lrelease_command
+ COMMAND
+ "${tool_wrapper}"
+ $<TARGET_FILE:${QT_CMAKE_EXPORT_NAMESPACE}::lrelease>)
+
+ set(default_qm_out_dir "${CMAKE_CURRENT_BINARY_DIR}")
+ if(NOT "${arg___QT_INTERNAL_DEFAULT_QM_OUT_DIR}" STREQUAL "")
+ set(default_qm_out_dir "${arg___QT_INTERNAL_DEFAULT_QM_OUT_DIR}")
+ endif()
+
+ set(qm_files "")
+ foreach(ts_file ${ts_files})
+ if(NOT EXISTS "${ts_file}")
+ message(WARNING "Translation file '${ts_file}' does not exist. "
+ "Consider building the target 'update_translations' to create an initial "
+ "version of that file.")
+ _qt_internal_ensure_ts_file(TS_FILE "${ts_file}")
+ endif()
+
+ _qt_internal_generated_qm_file_path(qm "${ts_file}" "${default_qm_out_dir}")
+ get_filename_component(qm_dir "${qm}" DIRECTORY)
+ add_custom_command(OUTPUT ${qm}
+ COMMAND "${CMAKE_COMMAND}" -E make_directory "${qm_dir}"
+ ${lrelease_command} ${arg_OPTIONS} ${ts_file} -qm ${qm}
+ DEPENDS ${QT_CMAKE_EXPORT_NAMESPACE}::lrelease "${ts_file}"
+ VERBATIM)
+ list(APPEND qm_files "${qm}")
+
+ # QTBUG-103470: Save the target responsible for driving the build of the custom command
+ # into an internal source file property. It will be added as a dependency for targets
+ # created by _qt_internal_process_resource, to avoid the Xcode issue of not allowing
+ # multiple targets depending on the output, without having a common target ancestor.
+ set(scope_args "")
+ if(legacy_signature_used AND CMAKE_VERSION VERSION_GREATER_EQUAL "3.18")
+ set(scope_args TARGET_DIRECTORY ${legacy_target})
+ endif()
+ set_source_files_properties("${qm}" ${scope_args} PROPERTIES
+ _qt_resource_target_dependency "${lrelease_target}"
+ )
+ endforeach()
+
+ if(legacy_signature_used)
+ _qt_internal_store_languages_from_ts_files_in_targets("${legacy_target}" "${ts_files}")
+ endif()
+
+ if(legacy_signature_used)
+ add_custom_target(${lrelease_target} DEPENDS ${qm_files})
+ if(NOT arg_NO_TARGET_DEPENDENCY)
+ add_dependencies(${legacy_target} ${lrelease_target})
+ endif()
+ else()
+ set(maybe_all ALL)
+ if(arg_EXCLUDE_FROM_ALL)
+ set(maybe_all "")
+ endif()
+ add_custom_target(${lrelease_target} ${maybe_all} DEPENDS ${qm_files})
+ endif()
+
+ if(NOT DEFINED QT_GLOBAL_LRELEASE_TARGET)
+ set(QT_GLOBAL_LRELEASE_TARGET release_translations)
+ endif()
+
+ if(NOT arg_NO_GLOBAL_TARGET)
+ if(NOT TARGET ${QT_GLOBAL_LRELEASE_TARGET})
+ add_custom_target(${QT_GLOBAL_LRELEASE_TARGET})
+ endif()
+ add_dependencies(${QT_GLOBAL_LRELEASE_TARGET} ${lrelease_target})
+ endif()
+
+ if(NOT "${arg_QM_FILES_OUTPUT_VARIABLE}" STREQUAL "")
+ set("${arg_QM_FILES_OUTPUT_VARIABLE}" "${qm_files}" PARENT_SCOPE)
+ endif()
+endfunction()
+
+function(qt6_add_translations)
+ set(options
+ IMMEDIATE_CALL
+ NO_GENERATE_PLURALS_TS_FILE)
+ set(oneValueArgs
+ __QT_INTERNAL_DEFAULT_QM_OUT_DIR
+ LUPDATE_TARGET
+ LRELEASE_TARGET
+ QM_FILES_OUTPUT_VARIABLE
+ RESOURCE_PREFIX
+ OUTPUT_TARGETS)
+ set(multiValueArgs
+ TARGETS
+ SOURCE_TARGETS
+ TS_FILES
+ TS_FILE_BASE
+ TS_FILE_DIR
+ PLURALS_TS_FILE
+ SOURCES
+ INCLUDE_DIRECTORIES
+ LUPDATE_OPTIONS
+ LRELEASE_OPTIONS)
+ cmake_parse_arguments(arg "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+ set(targets "${arg_TARGETS}")
+ if(NOT "${arg_UNPARSED_ARGUMENTS}" STREQUAL "")
+ list(POP_FRONT arg_UNPARSED_ARGUMENTS target)
+ list(PREPEND targets "${target}")
+ unset(target)
+ set(arg_TARGETS ${targets}) # to forward this argument
+ endif()
+ if(targets STREQUAL "")
+ message(FATAL_ERROR "No targets provided.")
+ endif()
+ if(DEFINED arg_RESOURCE_PREFIX AND DEFINED arg_QM_FILES_OUTPUT_VARIABLE)
+ message(FATAL_ERROR "QM_FILES_OUTPUT_VARIABLE cannot be specified "
+ "together with RESOURCE_PREFIX.")
+ endif()
+ if(DEFINED arg_QM_FILES_OUTPUT_VARIABLE AND DEFINED arg_OUTPUT_TARGETS)
+ message(FATAL_ERROR "OUTPUT_TARGETS cannot be specified "
+ "together with QM_FILES_OUTPUT_VARIABLE.")
+ endif()
+ if(NOT DEFINED arg_RESOURCE_PREFIX AND NOT DEFINED arg_QM_FILES_OUTPUT_VARIABLE)
+ set(arg_RESOURCE_PREFIX "/i18n")
+ endif()
+
+ # Determine the .ts file paths if necessary. This must happen before function deferral.
+ if(NOT DEFINED arg_TS_FILES)
+ if(NOT DEFINED arg_TS_FILE_DIR)
+ set(arg_TS_FILE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
+ endif()
+ if(NOT DEFINED arg_TS_FILE_BASE)
+ set(arg_TS_FILE_BASE "${PROJECT_NAME}")
+ string(REPLACE " " "-" arg_TS_FILE_BASE "${arg_TS_FILE_BASE}")
+ endif()
+ set(arg_TS_FILES "")
+ foreach(lang IN LISTS QT_I18N_TRANSLATED_LANGUAGES)
+ list(APPEND arg_TS_FILES "${arg_TS_FILE_DIR}/${arg_TS_FILE_BASE}_${lang}.ts")
+ endforeach()
+
+ # Default the source language to "en" in case the user doesn't use
+ # qt_standard_project_setup.
+ set(source_lang en)
+ if(NOT "${QT_I18N_SOURCE_LANGUAGE}" STREQUAL "")
+ set(source_lang ${QT_I18N_SOURCE_LANGUAGE})
+ endif()
+
+ # Determine the path to the plurals-only .ts file if necessary.
+ if(NOT arg_NO_GENERATE_PLURALS_TS_FILE
+ AND NOT DEFINED arg_PLURALS_TS_FILE
+ AND NOT "${source_lang}" IN_LIST QT_I18N_TRANSLATED_LANGUAGES)
+ set(arg_PLURALS_TS_FILE
+ "${arg_TS_FILE_DIR}/${arg_TS_FILE_BASE}_${source_lang}.ts")
+ endif()
+ endif()
+
+ # Defer the actual function call if SOURCE_TARGETS was not given and an immediate call was not
+ # requested.
+ set(source_targets "${arg_SOURCE_TARGETS}")
+ if(source_targets STREQUAL "" AND NOT arg_IMMEDIATE_CALL)
+ if(DEFINED arg_OUTPUT_TARGETS)
+ # We don't have the infrastructure to predict the resource target names.
+ message(FATAL_ERROR "Deferring qt6_add_translations is not supported with "
+ "OUTPUT_TARGETS. Pass IMMEDIATE_CALL or specify SOURCE_TARGETS.")
+ endif()
+ if(CMAKE_VERSION VERSION_LESS "3.19")
+ message(WARNING
+ "qt6_add_translations cannot defer function calls with this CMake version. "
+ "Only targets created prior to the qt6_add_translations call are used for i18n. "
+ "To avoid this warning, make sure this command is called at the end of the "
+ "top-level directory scope and pass the IMMEDIATE_CALL keyword. "
+ "Alternatively, upgrade to CMake 3.19 or newer."
+ )
+ qt6_add_translations(IMMEDIATE_CALL ${ARGV})
+ else()
+ # Predict the names of generated .qm files.
+ if(DEFINED arg_QM_FILES_OUTPUT_VARIABLE)
+ set(qm_files "")
+ foreach(ts_file IN LISTS arg_TS_FILES arg_PLURALS_TS_FILE)
+ _qt_internal_generated_qm_file_path(qm_file "${ts_file}"
+ "${CMAKE_CURRENT_BINARY_DIR}")
+ list(APPEND qm_files "${qm_file}")
+ endforeach()
+ set("${arg_QM_FILES_OUTPUT_VARIABLE}" "${qm_files}" PARENT_SCOPE)
+ endif()
+
+ # Forward options.
+ set(forwarded_args
+ IMMEDIATE_CALL
+ __QT_INTERNAL_DEFAULT_QM_OUT_DIR "${CMAKE_CURRENT_BINARY_DIR}"
+ )
+ foreach(keyword IN LISTS options)
+ if(arg_${keyword})
+ list(APPEND forwarded_args ${keyword})
+ endif()
+ endforeach()
+
+ # Forward one-value and multi-value arguments.
+ # Filter path variables. We will forward those separately.
+ set(to_forward ${oneValueArgs} ${multiValueArgs})
+ set(path_variables
+ TS_FILES
+ PLURALS_TS_FILE
+ SOURCES
+ INCLUDE_DIRECTORIES
+ )
+ set(ignored_variables
+ TS_FILE_BASE
+ TS_FILE_DIR
+ )
+ list(REMOVE_ITEM to_forward ${path_variables} ${ignored_variables})
+ foreach(keyword IN LISTS to_forward)
+ if(DEFINED arg_${keyword})
+ list(APPEND forwarded_args ${keyword} ${arg_${keyword}})
+ endif()
+ endforeach()
+
+ # Make variables that specify paths absolute.
+ # Relative paths are considered to be relative to the current source dir.
+ foreach(var IN LISTS path_variables)
+ qt_internal_make_paths_absolute(absolute_paths ${arg_${var}})
+ if(NOT "${absolute_paths}" STREQUAL "")
+ list(APPEND forwarded_args ${var} ${absolute_paths})
+ endif()
+ endforeach()
+
+ # Schedule this command to be called at the end of the project's source dir.
+ cmake_language(EVAL CODE
+ "cmake_language(DEFER
+ DIRECTORY \"${PROJECT_SOURCE_DIR}\"
+ CALL qt6_add_translations ${forwarded_args})")
+ endif()
+ return()
+ endif()
+
+ if(source_targets STREQUAL "")
+ qt6_collect_translation_source_targets(source_targets)
+ endif()
+ qt6_add_lupdate(
+ SOURCE_TARGETS "${source_targets}"
+ LUPDATE_TARGET "${arg_LUPDATE_TARGET}"
+ TS_FILES "${arg_TS_FILES}"
+ PLURALS_TS_FILE "${arg_PLURALS_TS_FILE}"
+ SOURCES "${arg_SOURCES}"
+ INCLUDE_DIRECTORIES "${arg_INCLUDE_DIRECTORIES}"
+ OPTIONS "${arg_LUPDATE_OPTIONS}"
+ )
+ qt6_add_lrelease(
+ LRELEASE_TARGET "${arg_LRELEASE_TARGET}"
+ TS_FILES "${arg_TS_FILES}" ${arg_PLURALS_TS_FILE}
+ QM_FILES_OUTPUT_VARIABLE qm_files
+ OPTIONS "${arg_LRELEASE_OPTIONS}"
+ __QT_INTERNAL_DEFAULT_QM_OUT_DIR "${arg___QT_INTERNAL_DEFAULT_QM_OUT_DIR}"
+ )
+
+ if("${QT_I18N_TRANSLATED_LANGUAGES}" STREQUAL "")
+ _qt_internal_store_languages_from_ts_files_in_targets("${targets}" "${arg_TS_FILES}")
+ endif()
+
+ # Mark .qm files as GENERATED, so that calling _qt_internal_expose_deferred_files_to_ide
+ # doesn't cause an error at generation time saying "Cannot find source file:" when
+ # qt6_add_lrelease is called from a subdirectory different than the target.
+ # The issue happend when the user project called cmake_minimum_required(VERSION)
+ # with a version less than 3.20 or set the CMP0118 policy value to OLD.
+ set(scope_args "")
+ if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.18")
+ set(scope_args TARGET_DIRECTORY ${targets})
+ endif()
+ set_source_files_properties(${qm_files}
+ ${scope_args}
+ PROPERTIES GENERATED TRUE
+ )
+
+ if(NOT "${arg_RESOURCE_PREFIX}" STREQUAL "")
+ set(accumulated_out_targets "")
+ foreach(target IN LISTS targets)
+ qt6_add_resources(${target} "${target}_translations"
+ PREFIX "${arg_RESOURCE_PREFIX}"
+ BASE "${CMAKE_CURRENT_BINARY_DIR}"
+ OUTPUT_TARGETS out_targets
+ FILES ${qm_files})
+ list(APPEND accumulated_out_targets ${out_targets})
+ endforeach()
+ if(DEFINED arg_OUTPUT_TARGETS)
+ set("${arg_OUTPUT_TARGETS}" "${accumulated_out_targets}" PARENT_SCOPE)
+ endif()
+ endif()
+ if(NOT "${arg_QM_FILES_OUTPUT_VARIABLE}" STREQUAL "")
+ set("${arg_QM_FILES_OUTPUT_VARIABLE}" "${qm_files}" PARENT_SCOPE)
+ endif()
+endfunction()
+
+if(NOT QT_NO_CREATE_VERSIONLESS_FUNCTIONS)
+ function(qt_create_translation _qm_files)
+ if(QT_DEFAULT_MAJOR_VERSION EQUAL 5)
+ qt5_create_translation("${_qm_files}" ${ARGN})
+ elseif(QT_DEFAULT_MAJOR_VERSION EQUAL 6)
+ qt6_create_translation("${_qm_files}" ${ARGN})
+ endif()
+ set("${_qm_files}" "${${_qm_files}}" PARENT_SCOPE)
+ endfunction()
+ function(qt_add_translation _qm_files)
+ if(QT_DEFAULT_MAJOR_VERSION EQUAL 5)
+ qt5_add_translation("${_qm_files}" ${ARGN})
+ elseif(QT_DEFAULT_MAJOR_VERSION EQUAL 6)
+ qt6_add_translation("${_qm_files}" ${ARGN})
+ endif()
+ set("${_qm_files}" "${${_qm_files}}" PARENT_SCOPE)
+ endfunction()
+ function(qt_collect_translation_source_targets out_var)
+ if(QT_DEFAULT_MAJOR_VERSION EQUAL 6)
+ qt6_collect_translation_source_targets("${out_var}" ${ARGN})
+ else()
+ message(FATAL_ERROR "qt_collect_translation_source_targets() is only available in Qt 6.")
+ endif()
+ set("${out_var}" "${${out_var}}" PARENT_SCOPE)
+ endfunction()
+ function(qt_add_lupdate)
+ if(QT_DEFAULT_MAJOR_VERSION EQUAL 6)
+ qt6_add_lupdate(${ARGN})
+ else()
+ message(FATAL_ERROR "qt_add_lupdate() is only available in Qt 6.")
+ endif()
+ endfunction()
+ function(qt_add_lrelease)
+ if(QT_DEFAULT_MAJOR_VERSION EQUAL 6)
+ qt6_add_lrelease(${ARGN})
+ cmake_parse_arguments(PARSE_ARGV 1 arg "" "QM_FILES_OUTPUT_VARIABLE" "")
+ if(arg_QM_FILES_OUTPUT_VARIABLE)
+ set(${arg_QM_FILES_OUTPUT_VARIABLE} ${${arg_QM_FILES_OUTPUT_VARIABLE}} PARENT_SCOPE)
+ endif()
+ else()
+ message(FATAL_ERROR "qt_add_lrelease() is only available in Qt 6.")
+ endif()
+ endfunction()
+ function(qt_add_translations)
+ if(QT_DEFAULT_MAJOR_VERSION EQUAL 6)
+ qt6_add_translations(${ARGN})
+ cmake_parse_arguments(PARSE_ARGV 1 arg "" "OUTPUT_TARGETS;QM_FILES_OUTPUT_VARIABLE" "")
+ if(arg_OUTPUT_TARGETS)
+ set(${arg_OUTPUT_TARGETS} ${${arg_OUTPUT_TARGETS}} PARENT_SCOPE)
+ endif()
+ if(arg_QM_FILES_OUTPUT_VARIABLE)
+ set(${arg_QM_FILES_OUTPUT_VARIABLE} ${${arg_QM_FILES_OUTPUT_VARIABLE}} PARENT_SCOPE)
+ endif()
+ else()
+ message(FATAL_ERROR "qt_add_translations() is only available in Qt 6.")
+ endif()
+ endfunction()
+endif()
diff --git a/src/linguist/lconvert/.prev_CMakeLists.txt b/src/linguist/lconvert/.prev_CMakeLists.txt
deleted file mode 100644
index f01e77dad..000000000
--- a/src/linguist/lconvert/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-# Generated from lconvert.pro.
-
-#####################################################################
-## lconvert Tool:
-#####################################################################
-
-qt_get_tool_target_name(target_name lconvert)
-qt_add_tool(${target_name}
- TARGET_DESCRIPTION "Qt Translation File Converter"
- SOURCES
- ../shared/numerus.cpp
- ../shared/po.cpp
- ../shared/qm.cpp
- ../shared/qph.cpp
- ../shared/translator.cpp ../shared/translator.h
- ../shared/translatormessage.cpp ../shared/translatormessage.h
- ../shared/ts.cpp
- ../shared/xliff.cpp
- ../shared/xmlparser.cpp ../shared/xmlparser.h
- main.cpp
- DEFINES
- QT_NO_CAST_FROM_ASCII
- QT_NO_CAST_TO_ASCII
- INCLUDE_DIRECTORIES
- ../shared
- PUBLIC_LIBRARIES
- Qt::CorePrivate
-)
-
-#### Keys ignored in scope 1:.:.:lconvert.pro:<TRUE>:
-# QMAKE_TARGET_DESCRIPTION = "Qt Translation File Converter"
-# _OPTION = "host_build"
diff --git a/src/linguist/lconvert/CMakeLists.txt b/src/linguist/lconvert/CMakeLists.txt
index aba946404..8f7b03a77 100644
--- a/src/linguist/lconvert/CMakeLists.txt
+++ b/src/linguist/lconvert/CMakeLists.txt
@@ -1,13 +1,14 @@
-# Generated from lconvert.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## lconvert Tool:
#####################################################################
qt_get_tool_target_name(target_name lconvert)
-qt_add_tool(${target_name}
+qt_internal_add_tool(${target_name}
TARGET_DESCRIPTION "Qt Translation File Converter"
- TOOLS_TARGET Linguist # special case
+ TOOLS_TARGET Linguist
SOURCES
../shared/numerus.cpp
../shared/po.cpp
@@ -24,10 +25,7 @@ qt_add_tool(${target_name}
QT_NO_CAST_TO_ASCII
INCLUDE_DIRECTORIES
../shared
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
-
-#### Keys ignored in scope 1:.:.:lconvert.pro:<TRUE>:
-# QMAKE_TARGET_DESCRIPTION = "Qt Translation File Converter"
-# _OPTION = "host_build"
+qt_internal_return_unless_building_tools()
diff --git a/src/linguist/lconvert/lconvert.pro b/src/linguist/lconvert/lconvert.pro
deleted file mode 100644
index d1e49bc20..000000000
--- a/src/linguist/lconvert/lconvert.pro
+++ /dev/null
@@ -1,10 +0,0 @@
-option(host_build)
-QT = core-private
-DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII
-
-SOURCES += main.cpp
-
-include(../shared/formats.pri)
-
-QMAKE_TARGET_DESCRIPTION = "Qt Translation File Converter"
-load(qt_tool)
diff --git a/src/linguist/lconvert/main.cpp b/src/linguist/lconvert/main.cpp
index 816453bb4..4af584ecf 100644
--- a/src/linguist/lconvert/main.cpp
+++ b/src/linguist/lconvert/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "translator.h"
@@ -39,20 +14,16 @@
QT_USE_NAMESPACE
-class LC {
- Q_DECLARE_TR_FUNCTIONS(LConvert)
-};
-
static int usage(const QStringList &args)
{
Q_UNUSED(args);
QString loaders;
QString line(QLatin1String(" %1 - %2\n"));
- for (const Translator::FileFormat &format : qAsConst(Translator::registeredFileFormats()))
+ for (const Translator::FileFormat &format : std::as_const(Translator::registeredFileFormats()))
loaders += line.arg(format.extension, -5).arg(format.description());
- std::cout << qPrintable(LC::tr("\nUsage:\n"
+ std::cout << qPrintable(QStringLiteral("\nUsage:\n"
" lconvert [options] <infile> [<infile>...]\n\n"
"lconvert is part of Qt's Linguist tool chain. It can be used as a\n"
"stand-alone tool to convert and filter translation data files.\n"
@@ -103,6 +74,8 @@ static int usage(const QStringList &args)
" Default is absolute.\n\n"
" -no-ui-lines\n"
" Drop line numbers from references to UI files.\n\n"
+ " -pluralonly\n"
+ " Drop non-plural form messages.\n\n"
" -verbose\n"
" be a bit more verbose\n\n"
"Long options can be specified with only one leading dash, too.\n\n"
@@ -150,6 +123,7 @@ int main(int argc, char *argv[])
bool noUntranslated = false;
bool verbose = false;
bool noUiLines = false;
+ bool pluralOnly = false;
Translator::LocationsType locations = Translator::DefaultLocations;
ConversionData cd;
@@ -219,6 +193,8 @@ int main(int argc, char *argv[])
return usage(args);
} else if (args[i] == QLatin1String("-no-ui-lines")) {
noUiLines = true;
+ } else if (args[i] == QLatin1String("-pluralonly")) {
+ pluralOnly = true;
} else if (args[i] == QLatin1String("-verbose")) {
verbose = true;
} else if (args[i].startsWith(QLatin1Char('-'))) {
@@ -267,6 +243,8 @@ int main(int argc, char *argv[])
tr.dropTranslations();
if (noUiLines)
tr.dropUiLines();
+ if (pluralOnly)
+ tr.stripNonPluralForms();
if (locations != Translator::DefaultLocations)
tr.setLocationsType(locations);
diff --git a/src/linguist/linguist.pro b/src/linguist/linguist.pro
deleted file mode 100644
index 341334239..000000000
--- a/src/linguist/linguist.pro
+++ /dev/null
@@ -1,62 +0,0 @@
-include($$OUT_PWD/../../src/global/qttools-config.pri)
-QT_FOR_CONFIG += tools-private
-requires(qtConfig(linguist))
-
-TEMPLATE = subdirs
-SUBDIRS = \
- lconvert \
- lprodump \
- lrelease \
- lrelease-pro \
- lupdate \
- lupdate-pro
-!no-png:qtHaveModule(widgets) {
- QT_FOR_CONFIG += widgets
- qtConfig(process):qtConfig(pushbutton):qtConfig(toolbutton) {
- SUBDIRS += linguist
- }
-}
-
-qtNomakeTools( \
- linguist \
-)
-
-equals(QMAKE_HOST.os, Windows): CMAKE_BIN_SUFFIX = ".exe"
-
-load(cmake_functions)
-
-CMAKE_INSTALL_LIBS_DIR = $$cmakeTargetPath($$[QT_INSTALL_LIBS])
-contains(CMAKE_INSTALL_LIBS_DIR, ^(/usr)?/lib(64)?.*): CMAKE_USR_MOVE_WORKAROUND = $$CMAKE_INSTALL_LIBS_DIR
-
-CMAKE_LIB_DIR = $$cmakeRelativePath($$[QT_INSTALL_LIBS], $$[QT_INSTALL_PREFIX])
-!contains(CMAKE_LIB_DIR,"^\\.\\./.*") {
- CMAKE_RELATIVE_INSTALL_LIBS_DIR = $$cmakeRelativePath($$[QT_INSTALL_PREFIX], $$[QT_INSTALL_LIBS])
- # We need to go up another two levels because the CMake files are
- # installed in $${CMAKE_LIB_DIR}/cmake/Qt5$${CMAKE_MODULE_NAME}
- CMAKE_RELATIVE_INSTALL_DIR = "$${CMAKE_RELATIVE_INSTALL_LIBS_DIR}../../"
-} else {
- CMAKE_LIB_DIR_IS_ABSOLUTE = True
-}
-
-CMAKE_BIN_DIR = $$cmakeRelativePath($$[QT_HOST_BINS], $$[QT_INSTALL_PREFIX])
-contains(CMAKE_BIN_DIR, "^\\.\\./.*") {
- CMAKE_BIN_DIR = $$[QT_HOST_BINS]/
- CMAKE_BIN_DIR_IS_ABSOLUTE = True
-}
-
-load(qt_build_paths)
-
-cmake_linguist_config_file.input = $$PWD/Qt5LinguistToolsConfig.cmake.in
-cmake_linguist_config_version_file.input = $$[QT_HOST_DATA/src]/mkspecs/features/data/cmake/Qt5ConfigVersion.cmake.in
-cmake_linguist_macros_file.input = $$PWD/Qt5LinguistToolsMacros.cmake
-CMAKE_PACKAGE_VERSION = $$MODULE_VERSION
-cmake_linguist_config_file.output = $$MODULE_BASE_OUTDIR/lib/cmake/Qt5LinguistTools/Qt5LinguistToolsConfig.cmake
-cmake_linguist_config_version_file.output = $$MODULE_BASE_OUTDIR/lib/cmake/Qt5LinguistTools/Qt5LinguistToolsConfigVersion.cmake
-cmake_linguist_macros_file.output = $$MODULE_BASE_OUTDIR/lib/cmake/Qt5LinguistTools/Qt5LinguistToolsMacros.cmake
-cmake_linguist_macros_file.CONFIG = verbatim
-QMAKE_SUBSTITUTES += cmake_linguist_config_file cmake_linguist_config_version_file cmake_linguist_macros_file
-
-cmake_linguist_tools_files.files += $$cmake_linguist_config_file.output $$cmake_linguist_config_version_file.output $$cmake_linguist_macros_file.output
-cmake_linguist_tools_files.path = $$[QT_INSTALL_LIBS]/cmake/Qt5LinguistTools
-cmake_linguist_tools_files.CONFIG = no_check_exist
-INSTALLS += cmake_linguist_tools_files
diff --git a/src/linguist/linguist/CMakeLists.txt b/src/linguist/linguist/CMakeLists.txt
index e1ebe96cc..edb6e3ae6 100644
--- a/src/linguist/linguist/CMakeLists.txt
+++ b/src/linguist/linguist/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from linguist.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## linguist App:
@@ -46,7 +47,7 @@ qt_internal_add_app(linguist
QT_NO_CAST_TO_ASCII
INCLUDE_DIRECTORIES
../shared
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
@@ -118,7 +119,7 @@ set(linguist_resource_files
"images/win/whatsthis.png"
)
-qt_add_resource(linguist "linguist"
+qt_internal_add_resource(linguist "linguist"
PREFIX
"/"
FILES
@@ -129,16 +130,10 @@ set_target_properties(linguist PROPERTIES
QT_TARGET_DESCRIPTION "Qt Linguist"
)
-#### Keys ignored in scope 1:.:.:linguist.pro:<TRUE>:
-# INSTALLS = "phrasebooks"
-# PROJECTNAME = "Qt" "Linguist"
-# phrasebooks.files = "$$PWD/../phrasebooks/*"
-# phrasebooks.path = "$$[QT_INSTALL_DATA]/phrasebooks"
+file(GLOB phrasebooks_files "${CMAKE_CURRENT_SOURCE_DIR}/../phrasebooks/*")
+qt_install(FILES ${phrasebooks_files} DESTINATION "${INSTALL_DATADIR}/phrasebooks")
-## Scopes:
-#####################################################################
-
-qt_extend_target(linguist CONDITION QT_PRODUCT___contains___OpenSource._x_
+qt_internal_extend_target(linguist CONDITION QT_PRODUCT___contains___OpenSource._x_
DEFINES
QT_OPENSOURCE
)
@@ -174,8 +169,10 @@ if(APPLE)
target_sources(linguist PRIVATE
linguist.icns
)
+else()
+ set_property(SOURCE main.cpp PROPERTY SKIP_AUTOMOC ON)
endif()
-qt_add_docs(linguist
+qt_internal_add_docs(linguist
doc/qtlinguist.qdocconf
)
diff --git a/src/linguist/linguist/batchtranslation.ui b/src/linguist/linguist/batchtranslation.ui
index d91fd6d09..783f5593b 100644
--- a/src/linguist/linguist/batchtranslation.ui
+++ b/src/linguist/linguist/batchtranslation.ui
@@ -1,34 +1,10 @@
-<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+</comment>
<class>BatchTranslationDialog</class>
- <widget class="QDialog" name="batchTranslationDialog">
+ <widget class="QDialog" name="BatchTranslationDialog">
<property name="geometry">
<rect>
<x>0</x>
@@ -230,7 +206,7 @@
<connection>
<sender>cancelButton</sender>
<signal>clicked()</signal>
- <receiver>batchTranslationDialog</receiver>
+ <receiver>BatchTranslationDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
diff --git a/src/linguist/linguist/batchtranslationdialog.cpp b/src/linguist/linguist/batchtranslationdialog.cpp
index 2543ed736..0bc7431fa 100644
--- a/src/linguist/linguist/batchtranslationdialog.cpp
+++ b/src/linguist/linguist/batchtranslationdialog.cpp
@@ -1,35 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "batchtranslationdialog.h"
#include "phrase.h"
#include "messagemodel.h"
+#include <QtCore/QMap>
#include <QtWidgets/QMessageBox>
#include <QtWidgets/QProgressDialog>
@@ -71,7 +47,7 @@ void BatchTranslationDialog::setPhraseBooks(const QList<PhraseBook *> &phraseboo
m_model.insertColumn(0);
m_phrasebooks = phrasebooks;
m_modelIndex = modelIndex;
- int count = phrasebooks.count();
+ int count = phrasebooks.size();
m_model.insertRows(0, count);
for (int i = 0; i < count; ++i) {
QModelIndex idx(m_model.index(i, 0));
@@ -82,8 +58,8 @@ void BatchTranslationDialog::setPhraseBooks(const QList<PhraseBook *> &phraseboo
if (phrasebooks[i]->language() != m_dataModel->language(m_modelIndex))
sortOrder = 3;
else
- sortOrder = (phrasebooks[i]->country()
- == m_dataModel->model(m_modelIndex)->country()) ? 0 : 1;
+ sortOrder = (phrasebooks[i]->territory()
+ == m_dataModel->model(m_modelIndex)->territory()) ? 0 : 1;
} else {
sortOrder = 2;
}
@@ -153,7 +129,7 @@ void BatchTranslationDialog::startTranslation()
void BatchTranslationDialog::movePhraseBookUp()
{
QModelIndexList indexes = m_ui.phrasebookList->selectionModel()->selectedIndexes();
- if (indexes.count() <= 0) return;
+ if (indexes.size() <= 0) return;
QModelIndex sel = indexes[0];
int row = sel.row();
@@ -169,7 +145,7 @@ void BatchTranslationDialog::movePhraseBookUp()
void BatchTranslationDialog::movePhraseBookDown()
{
QModelIndexList indexes = m_ui.phrasebookList->selectionModel()->selectedIndexes();
- if (indexes.count() <= 0) return;
+ if (indexes.size() <= 0) return;
QModelIndex sel = indexes[0];
int row = sel.row();
diff --git a/src/linguist/linguist/batchtranslationdialog.h b/src/linguist/linguist/batchtranslationdialog.h
index 3bfc00020..cff9566b9 100644
--- a/src/linguist/linguist/batchtranslationdialog.h
+++ b/src/linguist/linguist/batchtranslationdialog.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef BATCHTRANSLATIONDIALOG_H
#define BATCHTRANSLATIONDIALOG_H
diff --git a/src/linguist/linguist/doc/cmake-macros.qdoc b/src/linguist/linguist/doc/cmake-macros.qdoc
index 68eb849f5..13056f570 100644
--- a/src/linguist/linguist/doc/cmake-macros.qdoc
+++ b/src/linguist/linguist/doc/cmake-macros.qdoc
@@ -1,45 +1,43 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
-\page qtlinguist-cmake-qt5-add-translation.html
-\ingroup cmake-macros-qtlinguisttools
+\group cmake-commands-qtlinguisttools
+\title CMake Commands in Qt6 LinguistTools
-\title qt5_add_translation
+The following CMake commands are defined when Qt6::LinguistTools is loaded, for instance
+with
-\brief Compiles Qt Linguist .ts files into .qm files.
+\code
+find_package(Qt6 REQUIRED COMPONENTS LinguistTools)
+\endcode
+
+\sa{CMake Command Reference}
+*/
+
+/*!
+\page qtlinguist-cmake-qt-add-translation.html
+\ingroup cmake-commands-qtlinguisttools
+
+\title qt_add_translation
+\target qt6_add_translation
+
+\summary {Compiles Qt Linguist .ts files into .qm files.}
+
+\include cmake-find-package-linguisttools.qdocinc
+
+\warning This function is deprecated. Consider using the target-based
+functions \l{qt6_add_lrelease} or \l{qt6_add_translations} instead.
\section1 Synopsis
\badcode
-qt5_add_translation(<VAR> file1.ts [file2.ts ...]
+qt_add_translation(<VAR> file1.ts [file2.ts ...]
[OPTIONS ...])
\endcode
+\versionlessCMakeCommandsNote qt6_add_translation
+
\section1 Description
Calls \c{lrelease} on each \c{.ts} file passed as an argument, generating
@@ -50,38 +48,51 @@ Calls \c{lrelease} on each \c{.ts} file passed as an argument, generating
You can set additional \c{OPTIONS} that should be passed when \c{lrelease} is
invoked. You can find possible options in the \l{lrelease}{lrelease documentation}.
-By default, the \c{qm} files will be placed in the root level of the build
-directory. To change this, you can set \c{OUTPUT_LOCATION} as a property
-of the source \c{.ts} file.
+By default, the \c{qm} files will be placed in the current build directory
+(\c{CMAKE_CURRENT_BINARY_DIR}). To change this, you can set \c{OUTPUT_LOCATION}
+as a property of the source \c{.ts} file.
+
+For example, with the following code, the \c{.qm} files are generated
+in a \c{translations} directory below the current build directory.
+
+\snippet cmake-macros/examples.cmake set_output_location_on_ts_file
\section1 Examples
Generating \c{helloworld_en.qm}, \c{helloworld_de.qm} in the build
directory:
-\snippet cmake-macros/examples.cmake qt5_add_translation
+\snippet cmake-macros/examples.cmake qt_add_translation
Generating \c{helloworld_en.qm}, \c{helloworld_de.qm} in a \c{l10n}
sub-directory:
-\snippet cmake-macros/examples.cmake qt5_add_translation_output_location
+\snippet cmake-macros/examples.cmake qt_add_translation_output_location
*/
/*!
-\page qtlinguist-cmake-qt5-create-translation.html
-\ingroup cmake-macros-qtlinguisttools
+\page qtlinguist-cmake-qt-create-translation.html
+\ingroup cmake-commands-qtlinguisttools
-\title qt5_create_translation
+\title qt_create_translation
+\target qt6_create_translation
-\brief Sets up the Qt Linguist translation toolchain.
+\summary {Sets up the Qt Linguist translation toolchain.}
+
+\include cmake-find-package-linguisttools.qdocinc
+
+\warning This function is deprecated. Consider using the target-based
+functions \l{qt6_add_lupdate} or \l{qt6_add_translations} instead.
\section1 Synopsis
\badcode
-qt5_create_translation(<VAR> ts-file-or-sources [ts-file-or-sources2 ...]
- [OPTIONS ...])
+qt_create_translation(<VAR> ts-file-or-sources [ts-file-or-sources2 ...]
+ [OPTIONS ...])
\endcode
+\versionlessCMakeCommandsNote qt6_create_translation
+
\section1 Description
Processes given sources (directories or individual files) to generate
@@ -110,5 +121,633 @@ generate or update \c{helloworld_en.ts} and \c{helloworld_de.ts} file using
\c{lupdate}. Compile said files into \c{helloworld_en.qm} and \c{helloworld.de.qm}
files in the build directory:
-\snippet cmake-macros/examples.cmake qt5_create_translation
+\snippet cmake-macros/examples.cmake qt_create_translation
+*/
+
+/*!
+\page qtlinguist-cmake-qt-add-lupdate.html
+\ingroup cmake-commands-qtlinguisttools
+
+\title qt_add_lupdate
+\target qt6_add_lupdate
+
+\summary {Add targets to generate or update Qt Linguist .ts files.}
+
+\include cmake-find-package-linguisttools.qdocinc
+
+\cmakecommandsince 6.2
+
+\section1 Synopsis
+
+Since 6.7:
+\badcode
+qt_add_lupdate(TS_FILES file1.ts [file2.ts ...]
+ [PLURALS_TS_FILE file.ts]
+ [SOURCE_TARGETS target1 [target2 ...]]
+ [SOURCES source1.cpp [sources2.cpp ...]]
+ [INCLUDE_DIRECTORIES directory1 [directory2 ...]]
+ [LUPDATE_TARGET target-name]
+ [NO_GLOBAL_TARGET]
+ [OPTIONS ...])
+\endcode
+
+Since 6.2 (deprecated):
+\badcode
+qt_add_lupdate(target TS_FILES file1.ts [file2.ts ...]
+ [SOURCES source1.cpp [sources2.cpp ...]]
+ [INCLUDE_DIRECTORIES directory1 [directory2 ...]]
+ [NO_GLOBAL_TARGET]
+ [OPTIONS ...])
+\endcode
+
+\versionlessCMakeCommandsNote qt6_add_lupdate()
+
+\section1 Description
+
+Creates a custom target to generate or update Qt Linguist \c{.ts}
+files with \l{lupdate}.
+
+The name of that custom target defaults to \c{${PROJECT_NAME}_lupdate}. Further
+calls of \c qt_add_lupdate will create target names with an increasing number
+appended. The custom target name can be specified with the \c LUPDATE_TARGET
+option.
+
+With the \c{SOURCE_TARGETS} argument you can specify a list of targets that
+contain sources with translatable strings. If \c{SOURCE_TARGETS} is not
+specified, you can specify \c{SOURCES}, which is described below. If neither
+\c{SOURCE_TARGETS} nor \c{SOURCES} is given, the command
+\l{qt6_collect_translation_source_targets}{qt_collect_translation_source_targets}
+is called to retrieve the list of targets.
+
+The \c{.ts} files must be specified with the argument \c{TS_FILES}.
+
+This function is designed to be used in conjunction with
+\l{qt6_add_lrelease}{qt_add_lrelease}. See also the convenience wrapper
+\l{qt6_add_translations}{qt_add_translations}.
+
+//! [sources-and-include-dirs]
+\section1 Sources and Include Directories
+
+With \c{SOURCES} you can explicitly specify additional source files that contain
+translatable strings.
+
+You can use \c{INCLUDE_DIRECTORIES} to explicitly specify include directories
+for those source files.
+//! [sources-and-include-dirs]
+
+\section1 Options
+
+You can set additional \c{OPTIONS} that should be passed when \c{lupdate} is
+invoked. You can find possible options in the \l{lupdate}{lupdate
+documentation}.
+
+\section1 Umbrella Target
+
+In addition to the target \c{${target}_lupdate}, an umbrella target
+\c{update_translations} is created. This target will build all
+\c{${target}_lupdate} targets that were created with \c{qt_add_lupdate}.
+
+Pass \c{NO_GLOBAL_TARGET} to \c{qt_add_lupdate} to prevent this behavior.
+
+The name of this target can be overridden by setting the variable
+\c{QT_GLOBAL_LUPDATE_TARGET} before calling \c{qt_add_lupdate}.
+
+//! [plurals-ts-file]
+\section1 Plural Forms
+
+\l QT_I18N_SOURCE_LANGUAGE specifies the language in which the source code
+strings are written. For handling plural forms correctly, create an additional
+\c{.ts} file for that language that only contains translatable strings for
+plural forms. See \l{Handle Plural Forms} for details.
+
+With \c PLURALS_TS_FILE you can specify the \c{.ts} file for the source
+language. This file will only contain plural forms.
+//! [plurals-ts-file]
+
+\section1 Deprecated Command Signature
+
+Older versions of \c qt_add_lupdate took a target as the first argument. This is
+deprecated. Use the \c SOURCE_TARGETS argument instead.
+
+\section1 Examples
+
+Add the targets \c{myapp_lupdate} and \c{update_translations} for updating the
+\c{.ts} file of an application \c{myapp}.
+
+\snippet cmake-macros/examples.cmake qt_add_lupdate
+
+You can specify the name of the created target by passing the \c LUPDATE_TARGET
+argument:
+
+\badcode
+qt_add_lupdate(
+ LUPDATE_TARGET update_application_translations
+ TS_FILES myapp_de.ts
+ PLURALS_TS_FILE myapp_en.ts
+)
+\endcode
+*/
+
+/*!
+\page qtlinguist-cmake-qt-add-lrelease.html
+\ingroup cmake-commands-qtlinguisttools
+
+\title qt_add_lrelease
+\target qt6_add_lrelease
+
+\summary {Add targets to transform Qt Linguist .ts files into .qm files.}
+
+\include cmake-find-package-linguisttools.qdocinc
+
+\cmakecommandsince 6.2
+
+\section1 Synopsis
+
+Since 6.7:
+\badcode
+qt_add_lrelease(TS_FILES file1.ts [file2.ts ...]
+ [LRELEASE_TARGET target-name]
+ [EXCLUDE_FROM_ALL]
+ [NO_GLOBAL_TARGET]
+ [QM_FILES_OUTPUT_VARIABLE variable-name]
+ [OPTIONS ...])
+\endcode
+
+Since 6.2 (deprecated):
+\badcode
+qt_add_lrelease(target TS_FILES file1.ts [file2.ts ...]
+ [NO_TARGET_DEPENDENCY]
+ [NO_GLOBAL_TARGET]
+ [QM_FILES_OUTPUT_VARIABLE variable-name]
+ [OPTIONS ...])
+\endcode
+
+\versionlessCMakeCommandsNote qt6_add_lrelease()
+
+\warning Calling \c qt_add_lrelease in a directory scope different than the
+target directory scope requires at least CMake version 3.18.
+
+\section1 Description
+
+Creates a custom command to transform \c{.ts} files into \c{.qm} files with
+\l{lrelease}.
+
+The execution of the custom command is driven by a custom target that is built
+by default. The name of that custom target defaults to
+\c{${PROJECT_NAME}_lrelease}. Further calls of \c qt_add_lrelease will create
+target names with an increasing number appended. The custom target name can be
+specified with the \c LRELEASE_TARGET option.
+
+The \c{.ts} files must be specified with the argument \c{TS_FILES}.
+
+This function is designed to be used in conjunction with
+\l{qt6_add_lupdate}{qt_add_lupdate}. See also the convenience wrapper
+\l{qt6_add_translations}{qt_add_translations}.
+
+\section1 Options
+
+You can set additional \c{OPTIONS} that should be passed when \c{lrelease} is
+invoked. You can find possible options in the \l{lrelease}{lrelease
+documentation}.
+
+By default, the \c{.qm} files will be placed in the current build directory
+(\c{CMAKE_CURRENT_BINARY_DIR}). To change this, you can set \c{OUTPUT_LOCATION}
+as a property of the source \c{.ts} file.
+
+For example, with the following code, the \c{.qm} files are generated
+in a \c{translations} directory below the current build directory.
+
+\snippet cmake-macros/examples.cmake set_output_location_on_ts_file
+
+\section1 Processing Generated .qm Files
+
+To further process the generated \c{.qm} files, for example to create install
+rules, \c{qt_add_lrelease} can store the paths of the \c{.qm} files in a
+variable. Pass \c{QM_FILES_OUTPUT_VARIABLE <variable-name>} to the function for
+that.
+
+\section1 Build by Default
+
+By default, the command creates a custom target that is added to the default
+build target. This ensures that the \c{.qm} files are always up-to-date when the
+project is built. This behavior can be turned off with the \c{EXCLUDE_FROM_ALL}
+argument. In this case, the user must build the \c{${PROJECT_NAME}_lrelease}
+target manually.
+
+\section1 Umbrella Target
+
+In addition to the target \c{${target}_lrelease}, an umbrella target
+\c{release_translations} is created. This target will build all
+\c{${target}_lrelease} targets that were created with \c{qt_add_lrelease}.
+
+Pass \c{NO_GLOBAL_TARGET} to \c{qt_add_lrelease} to prevent this behavior.
+
+The name of this target can be overridden by setting the variable
+\c{QT_GLOBAL_LRELEASE_TARGET} before calling \c{qt_add_lrelease}.
+
+\section1 Deprecated Command Signature
+
+Older versions of \c qt_add_lrelease took a target as the first argument. This
+is still possible but deprecated.
+
+\section1 Examples
+
+Add the targets \c{myapp_lrelease} and \c{release_translations} for transforming
+the given \c{.ts} files into \c{.qm} files. Also, install the generated \c{.qm}
+files. The target \c{myapp_lrelease} is built by default.
+
+\badcode
+project(myapp)
+...
+qt_add_lrelease(
+ TS_FILES myapp_de.ts myapp_fr.ts
+ QM_FILES_OUTPUT_VARIABLE qm_files
+)
+install(FILES ${qm_files} DESTINATION "translations")
+\endcode
+
+You can specify the name of the created target by passing the \c LRELEASE_TARGET
+argument:
+
+\badcode
+qt_add_lrelease(
+ LRELEASE_TARGET create_myapp_qm_files
+ TS_FILES myapp_de.ts myapp_fr.ts
+ QM_FILES_OUTPUT_VARIABLE qm_files
+)
+\endcode
+*/
+
+/*!
+\page qtlinguist-cmake-qt-add-translations.html
+\ingroup cmake-commands-qtlinguisttools
+
+\title qt_add_translations
+\target qt6_add_translations
+
+\summary {Add targets to update and transform Qt Linguist .ts files into .qm files.}
+
+\include cmake-find-package-linguisttools.qdocinc
+
+\cmakecommandsince 6.2
+
+\section1 Synopsis
+
+Since Qt 6.7:
+\badcode
+qt_add_translations([target]
+ [TARGETS target1 [target2...]]
+ [SOURCE_TARGETS target1 [target2...]]
+ [TS_FILE_BASE name]
+ [TS_FILE_DIR directory]
+ [TS_FILES file1.ts [file2.ts ...]]
+ [PLURALS_TS_FILE file.ts]
+ [NO_GENERATE_PLURALS_TS_FILE]
+ [RESOURCE_PREFIX prefix]
+ [OUTPUT_TARGETS variable-name]
+ [QM_FILES_OUTPUT_VARIABLE variable-name]
+ [SOURCES source1.cpp [sources2.cpp ...]]
+ [INCLUDE_DIRECTORIES directory1 [directory2 ...]]
+ [LUPDATE_TARGET target-name]
+ [LUPDATE_OPTIONS ...]
+ [LRELEASE_TARGET target-name]
+ [LRELEASE_OPTIONS ...]
+ [IMMEDIATE_CALL])
+\endcode
+
+Since Qt 6.2 (deprecated):
+\badcode
+qt_add_translations(target TS_FILES file1.ts [file2.ts ...]
+ [RESOURCE_PREFIX prefix]
+ [OUTPUT_TARGETS variable-name]
+ [QM_FILES_OUTPUT_VARIABLE variable-name]
+ [SOURCES source1.cpp [sources2.cpp ...]]
+ [INCLUDE_DIRECTORIES directory1 [directory2 ...]]
+ [LUPDATE_OPTIONS ...]
+ [LRELEASE_OPTIONS ...])
+\endcode
+
+\versionlessCMakeCommandsNote qt6_add_translations()
+
+\warning Calling \c qt_add_translations in a directory scope different than the
+target directory scope requires at least CMake version 3.18.
+
+\section1 Description
+
+Creates targets for updating Qt Linguist \c{.ts} files and for transforming them
+into \c{.qm} files. This function is a convenience wrapper around
+\l{qt6_add_lupdate}{qt_add_lupdate} and \l{qt6_add_lrelease}{qt_add_lrelease}
+and aims to offer the most common usage of both functions with one call.
+
+The parameter \c TARGETS specifies a list of targets that intend to load the
+generated \c{.qm} files at run time. If there's only one such target, you may
+directly pass the target's name as the first argument.
+
+The parameter \c SOURCE_TARGETS specifies a list of executable or library
+targets that contain sources with translatable strings. From the sources of
+these targets, \c{.ts} files will be created.
+
+If \c SOURCE_TARGETS is not given, targets are automatically gathered by calling
+\l{qt6_collect_translation_source_targets}{qt_collect_translation_source_targets}
+at the end of the directory scope of \c{PROJECT_SOURCE_DIR}. This functionality
+requires CMake 3.19 or newer. This functionality can be turned off with the
+argument \c{IMMEDIATE_CALL}.
+
+This function will create the target \c{update_translations} that scans all
+source files with \c lupdate and creates and updates the \c{.ts} files.
+
+This function will create the target \c{release_translations} that generates the
+\c{.qm} files from the \c{.ts} files. This target is built by default.
+
+The \c{.ts} files may be specified with the argument \c{TS_FILES}, but it's more
+convenient to let \c qt_add_translations figure out the file paths
+automatically. See \l{Automatic Determination of .ts File Paths} for
+details.
+
+\include cmake-macros.qdoc sources-and-include-dirs
+
+\section1 Automatic Determination of .ts File Paths
+
+The paths of the \c{.ts} files that are used as input for \c qt_add_translations
+can be automatically determined if \l{QT_I18N_TRANSLATED_LANGUAGES} has been
+set. This variable can be conveniently set with \l qt_standard_project_setup.
+
+The following project setup is usually enough:
+
+\snippet cmake-macros/examples.cmake auto_determine_ts_file_paths
+
+This will create the files \c{myproject_de.ts} and \c{myproject_fr.ts} in the
+project's source directory.
+
+By default, the \c{.ts} files are created in \c{CMAKE_CURRENT_SOURCE_DIR}. You
+can change the location by passing a different directory with the \c TS_FILE_DIR
+argument.
+
+By default, the \c{.ts} file names are constructed from \c{PROJECT_NAME}. You
+can specify a different base name with the \c{TS_FILE_BASE} argument.
+
+\include cmake-macros.qdoc plurals-ts-file
+
+A plurals-only \c{.ts} is automatically generated unless the option \c
+NO_GENERATE_PLURALS_TS_FILE is specified.
+
+For example,
+\badcode
+project(myapp)
+qt_standard_project_setup(
+ I18N_SOURCE_LANGUAGE en # optional - this is the default
+ I18N_TRANSLATED_LANGUAGES de
+)
+qt_add_executable(myapp ...)
+...
+qt_add_translations(myapp)
+\endcode
+creates the full translation file \c{myapp_de.ts} and the plurals-only file
+\c{myapp_en.ts}.
+
+If you need a full translation of the source language, add it to
+\l{QT_I18N_TRANSLATED_LANGUAGES}
+
+For example,
+\badcode
+project(myapp)
+qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES en de)
+qt_add_executable(myapp ...)
+...
+qt_add_translations(myapp)
+\endcode
+creates the full translation files
+\list
+\li \c{myapp_en.ts}
+\li \c{myapp_de.ts}
+\endlist
+
+\section1 Options
+
+You can specify the name of the custom target that calls lupdate with the \c
+LUPDATE_TARGET option. Likewise, \c LRELEASE_TARGET controls the name of the
+custom target that drives the call to \c lrelease.
+
+You can set additional options for \l{lupdate} and \l{lrelease} with
+\c{LUPDATE_OPTIONS} and \c{LRELEASE_OPTIONS}. You can find possible options in
+the \l{lupdate options} and \l{lrelease options}.
+
+For example, to use \l{Text ID based translations}{ID based translations}, you
+need to pass \c{LRELEASE_OPTIONS -idbased} to \c qt_add_translations.
+
+By default, the \c{.qm} files will be placed in the current build directory
+(\c{CMAKE_CURRENT_BINARY_DIR}). To change this, you can set \c{OUTPUT_LOCATION}
+as a property of the source \c{.ts} file.
+
+For example, with the following code, the \c{.qm} files are generated
+in a \c{translations} directory below the current build directory.
+
+\snippet cmake-macros/examples.cmake set_output_location_on_ts_file
+
+\section1 Embedding Generated .qm Files in Resources
+
+By default, the generated \c{.qm} files are embedded in a Qt resource that will
+be linked into the targets passed with \c{TARGETS}. The files in the resource
+are accessible under the resource prefix \c{"/i18n"}.
+
+You can set the resource prefix with \c{RESOURCE_PREFIX}.
+
+In a static Qt build, when a resource target is created, additional targets can
+be created. You can instruct \c{qt_add_translations} to store these targets in a
+variable, by passing \c{OUTPUT_TARGETS <variable-name>}.
+
+If \c OUTPUT_TARGETS is used, either \c IMMEDIATE_CALL or \c SOURCE_TARGETS must
+be specified.
+
+The automatic resource embedding can be turned off by giving the
+\c{QM_FILES_OUTPUT_VARIABLE} option, followed by the name of a variable in which
+the command should store the list of generated \c{.qm} files.
+
+\section1 \c{qt_add_translations} before Qt 6.7
+
+Before Qt 6.7, this command accepted only one target as the first argument. This
+target was used for both, extracting translatable sources and embedding \c{.qm}
+files.
+
+Since Qt 6.7, the target in the first argument is not used for source extraction
+anymore.
+
+\section1 Examples
+
+Add a German and a French translation to the target \c{frogger} using
+\c{qt_add_translations}:
+
+\snippet cmake-macros/examples.cmake qt_add_translations_default
+
+This will create the \c{.ts} files \c{frogger_de.ts} and \c{frogger_fr.ts} in
+the source directory. \l lupdate sees the source files of all targets that are
+eligible for translation, according to the rules of \l
+qt_collect_translation_source_targets.
+
+The \c{.qm} files that are created from the \c{.ts} files
+are embedded in the \c frogger_game target under the resource prefix \c{"i18n"}.
+
+The \c qt_add_translations call in the above example is roughly equivalent to
+the following:
+
+\snippet cmake-macros/examples.cmake qt_lupdate_lrelease
+
+\section2 Excluding directories, targets, and sources
+
+You can exclude targets and directories from the automatic collection of source
+targets. The following excludes the target \c helper_lib and everything under
+the \c tests directory. See the \l{directory property
+QT_EXCLUDE_FROM_TRANSLATION} and the \l{target property
+QT_EXCLUDE_FROM_TRANSLATION}.
+
+\badcode
+# <project_root>/CMakeLists.txt
+qt_add_translations(frogger_game)
+\endcode
+
+\badcode
+# <project_root>/src/helper_lib/CMakeLists.txt
+qt_add_library(helper_lib STATIC helpers.cpp)
+set_property(TARGET helper_lib PROPERTY QT_EXCLUDE_FROM_TRANSLATION ON)
+\endcode
+
+\badcode
+# <project_root>/tests/CMakeLists.txt
+add_subdirectory(behavior_tests)
+add_subdirectory(physics_tests)
+set_directory_properties(PROPERTIES QT_EXCLUDE_FROM_TRANSLATION ON)
+\endcode
+
+In the following example, we exclude source files that are part of the \c
+frogger_game target using the \l QT_EXCLUDE_SOURCES_FROM_TRANSLATION target
+property:
+
+\badcode
+qt_add_executable(frogger_game
+ main.cpp
+ 3rdparty/jumpsim.cpp
+ 3rdparty/frogmath.cpp
+)
+set_property(TARGET frogger_game
+ PROPERTY QT_EXCLUDE_SOURCES_FROM_TRANSLATION "3rdparty/*"
+)
+\endcode
+
+\section2 Explicit specification of source targets
+
+If you don't want to use the automatic collection of source targets you can
+specify the source targets explicitly:
+
+\snippet cmake-macros/examples.cmake qt_add_translations_explicit_source_targets
+
+\section2 Custom resource prefix
+
+Now, let's embed the \c{.qm} files in \c frogger_game and \c
+frogger_level_editor and set a custom resource prefix.
+
+\snippet cmake-macros/examples.cmake qt_add_translations_resource_prefix
+
+\section2 Installing .qm files
+
+Instead of embedding the \c{.qm} files we can install them as regular files:
+
+\snippet cmake-macros/examples.cmake qt_add_translations_install
+
+\section2 Influencing the names of the .ts files
+
+Place the \c{.ts} files in a \c translations directory and change the base name
+to \c frogger_i18n:
+
+\badcode
+qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES de fr)
+...
+qt_add_translations(frogger
+ TS_FILE_BASE froggo
+ TS_FILE_DIR translations
+)
+\endcode
+
+This creates the following files
+\list
+\li \c translations/froggo_de.ts
+\li \c translations/froggo_fr.ts
+\endlist
+
+You can also specify the paths explicitly:
+\badcode
+qt_add_translations(frogger
+ TS_FILES translations/froggo_de.ts translations/froggo_fr.ts
+)
+\endcode
+
+*/
+
+/*!
+\page qtlinguist-cmake-qt-collect-targets-for-translation.html
+\ingroup cmake-commands-qtlinguisttools
+
+\title qt_collect_translation_source_targets
+\target qt6_collect_translation_source_targets
+
+\summary {Collects targets that are eligible for translation.}
+
+\include cmake-find-package-linguisttools.qdocinc
+
+\cmakecommandsince 6.7
+
+\section1 Synopsis
+
+\badcode
+qt_collect_translation_source_targets(out_var [DIRECTORY path])
+\endcode
+
+\versionlessCMakeCommandsNote qt6_collect_translation_source_targets()
+
+\section1 Description
+
+Collect targets that are eligible for translation in the given \c DIRECTORY and
+all subdirectories. If \c DIRECTORY is not specified, start the target
+collection at \c{CMAKE_CURRENT_SOURCE_DIR}.
+
+The command stores the list of targets in the variable that is specified as
+first argument.
+
+\section1 Excluding targets from translation
+
+By default, all non-imported executable and library targets are eligible for
+translation.
+
+Single targets can be excluded by setting the \l{target property
+QT_EXCLUDE_FROM_TRANSLATION}.
+
+Targets below a certain directory can be excluded by setting the \l{directory
+property QT_EXCLUDE_FROM_TRANSLATION}.
+
+\section1 When to call this command
+
+The \c qt_collect_translation_source_targets command reads the
+\l{https://cmake.org/cmake/help/latest/prop_dir/BUILDSYSTEM_TARGETS.html}{BUILDSYSTEM_TARGETS}
+directory properties. As a consequence, it only collects targets that already
+have been created. Targets that are created after \c
+qt_collect_translation_source_targets has been called are not collected.
+
+To collect all targets of the build system, call \c
+qt_collect_translation_source_targets at the end of the top-level \c
+CMakeLists.txt or use \c{cmake_language(DEFER CALL)} to set up i18n at the end
+of the top-level directory scope.
+
+\section1 Examples
+
+Use the result of \c qt_collect_translation_source_targets as input for \c
+qt_add_lupdate.
+
+\snippet cmake-macros/examples.cmake qt_collect_translation_source_targets
+
+With CMake 3.19 and above, you can collect the source targets at the end of the
+directory scope. This way, \c qt_collect_translation_source_targets can be
+called before all targets have been defined. However, you need to exclude the
+tests by setting the directory property \l{directory property
+QT_EXCLUDE_FROM_TRANSLATION}{QT_EXCLUDE_FROM_TRANSLATION} to \c{ON}.
+
+\snippet cmake-macros/examples.cmake qt_collect_translation_source_targets_deferred
*/
diff --git a/src/linguist/linguist/doc/cmake-properties.qdoc b/src/linguist/linguist/doc/cmake-properties.qdoc
new file mode 100644
index 000000000..ee518f7a7
--- /dev/null
+++ b/src/linguist/linguist/doc/cmake-properties.qdoc
@@ -0,0 +1,131 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+\group cmake-directory-properties-qtlinguisttools
+\title CMake Directory Properties in Qt6 LinguistTools
+
+\l{CMake Command Reference#Qt6::LinguistTools}{CMake Commands} know about the
+following CMake directory properties:
+
+\sa{CMake Property Reference}
+*/
+
+
+/*!
+\page cmake-directory-property-qt-exclude-from-translation.html
+\ingroup cmake-properties-qtlinguisttools
+\ingroup cmake-directory-properties-qtlinguisttools
+\keyword directory property QT_EXCLUDE_FROM_TRANSLATION
+
+\title QT_EXCLUDE_FROM_TRANSLATION
+
+\brief Marks the directory as excluded from translation
+
+\cmakepropertysince 6.7
+
+Set this directory property to \c ON to exclude all targets in the directory and
+its subdirectories from translation. The command
+\l{qt6_collect_translation_source_targets}{qt_collect_translation_source_targets}
+will skip such targets.
+
+To exclude a single target, use the target property \l{target property
+QT_EXCLUDE_FROM_TRANSLATION}{QT_EXCLUDE_FROM_TRANSLATION}.
+
+\section1 Examples
+
+In the following example, translatable strings will not be extracted from
+targets that are defined in the \c tests directory.
+
+\badcode
+add_subdirectory(app)
+add_subdirectory(tests)
+set_property(DIRECTORY tests PROPERTY QT_EXCLUDE_FROM_TRANSLATION ON)
+qt_add_translations(myapp)
+\endcode
+
+Alternatively, you can set the directory property in the \c{CMakeLists.txt} of
+the \c tests subdirectory.
+
+\badcode
+# tests/CMakeLists.txt
+qt_add_executable(...)
+add_test(...)
+set_directory_properties(PROPERTIES QT_EXCLUDE_FROM_TRANSLATION ON)
+\endcode
+
+\sa QT_EXCLUDE_SOURCES_FROM_TRANSLATION
+*/
+
+
+/*!
+\group cmake-target-properties-qtlinguisttools
+\title CMake Target Properties in Qt6 LinguistTools
+
+\l{CMake Command Reference#Qt6::LinguistTools}{CMake Commands} know about the
+following CMake target properties:
+
+\sa{CMake Property Reference}
+*/
+
+
+/*!
+\page cmake-target-property-qt-exclude-from-translation.html
+\ingroup cmake-properties-qtlinguisttools
+\ingroup cmake-target-properties-qtlinguisttools
+\keyword target property QT_EXCLUDE_FROM_TRANSLATION
+
+\title QT_EXCLUDE_FROM_TRANSLATION
+
+\brief Marks the target as excluded from translation
+
+\cmakepropertysince 6.7
+
+Set this target property to \c ON to exclude it from translation. The command
+\l{qt6_collect_translation_source_targets}{qt_collect_translation_source_targets}
+will skip such targets.
+
+To exclude all targets under a subdirectory, use the directory property
+\l{directory property QT_EXCLUDE_FROM_TRANSLATION}{QT_EXCLUDE_FROM_TRANSLATION}.
+
+\section1 Examples
+
+In the following example, translatable strings will not be extracted from the \c
+mytest target.
+
+\badcode
+qt_add_executable(myapp main.cpp)
+qt_add_executable(mytest test.cpp)
+set_property(TARGET mytest PROPERTY QT_EXCLUDE_FROM_TRANSLATION ON)
+qt_add_translations(myapp)
+\endcode
+
+\sa QT_EXCLUDE_SOURCES_FROM_TRANSLATION
+*/
+
+
+/*!
+\page cmake-target-property-qt-exclude-sources-from-translation.html
+\ingroup cmake-properties-qtlinguisttools
+\ingroup cmake-target-properties-qtlinguisttools
+
+\title QT_EXCLUDE_SOURCES_FROM_TRANSLATION
+
+\brief List of source file paths that shall be excluded from translation
+
+\cmakepropertysince 6.7
+
+This target property specifies a list of source file paths that are excluded
+from translation. Source files that match the patterns in this exclusion list
+are ignored by \c{lupdate}.
+
+The paths may be absolute or relative to \c{CMAKE_CURRENT_SOURCE_DIR}. The paths
+may contain wildcards in a format that is accepted by
+\l{QRegularExpression::wildcardToRegularExpression}.
+
+\snippet cmake-macros/examples.cmake exclude sources from i18n
+
+\sa qt_add_lupdate
+\sa {target property QT_EXCLUDE_FROM_TRANSLATION}
+\sa {directory property QT_EXCLUDE_FROM_TRANSLATION}
+*/
diff --git a/src/linguist/linguist/doc/images/front-coding.png b/src/linguist/linguist/doc/images/front-coding.png
new file mode 100644
index 000000000..edfc5509c
--- /dev/null
+++ b/src/linguist/linguist/doc/images/front-coding.png
Binary files differ
diff --git a/src/linguist/linguist/doc/images/front-publishing.png b/src/linguist/linguist/doc/images/front-publishing.png
new file mode 100644
index 000000000..d6bf65821
--- /dev/null
+++ b/src/linguist/linguist/doc/images/front-publishing.png
Binary files differ
diff --git a/src/linguist/linguist/doc/images/front-ui.png b/src/linguist/linguist/doc/images/front-ui.png
new file mode 100644
index 000000000..d413b52db
--- /dev/null
+++ b/src/linguist/linguist/doc/images/front-ui.png
Binary files differ
diff --git a/src/linguist/linguist/doc/images/linguist-auxlanguages.png b/src/linguist/linguist/doc/images/linguist-auxlanguages.png
deleted file mode 100644
index 98727bbf2..000000000
--- a/src/linguist/linguist/doc/images/linguist-auxlanguages.png
+++ /dev/null
Binary files differ
diff --git a/src/linguist/linguist/doc/images/linguist-context-view.webp b/src/linguist/linguist/doc/images/linguist-context-view.webp
new file mode 100644
index 000000000..73f987b0d
--- /dev/null
+++ b/src/linguist/linguist/doc/images/linguist-context-view.webp
Binary files differ
diff --git a/src/linguist/linguist/doc/images/linguist-finddialog.png b/src/linguist/linguist/doc/images/linguist-finddialog.png
deleted file mode 100644
index d4949d243..000000000
--- a/src/linguist/linguist/doc/images/linguist-finddialog.png
+++ /dev/null
Binary files differ
diff --git a/src/linguist/linguist/doc/images/linguist-strings-view.webp b/src/linguist/linguist/doc/images/linguist-strings-view.webp
new file mode 100644
index 000000000..5dfe1407b
--- /dev/null
+++ b/src/linguist/linguist/doc/images/linguist-strings-view.webp
Binary files differ
diff --git a/src/linguist/linguist/doc/images/linguist-ui.webp b/src/linguist/linguist/doc/images/linguist-ui.webp
new file mode 100644
index 000000000..d154b1cfb
--- /dev/null
+++ b/src/linguist/linguist/doc/images/linguist-ui.webp
Binary files differ
diff --git a/src/linguist/linguist/doc/images/next.png b/src/linguist/linguist/doc/images/next.png
new file mode 100644
index 000000000..8df4127a0
--- /dev/null
+++ b/src/linguist/linguist/doc/images/next.png
Binary files differ
diff --git a/src/linguist/linguist/doc/images/nextunfinished.png b/src/linguist/linguist/doc/images/nextunfinished.png
new file mode 100644
index 000000000..636b9213b
--- /dev/null
+++ b/src/linguist/linguist/doc/images/nextunfinished.png
Binary files differ
diff --git a/src/linguist/linguist/doc/images/xNIz78IPBu0.jpg b/src/linguist/linguist/doc/images/xNIz78IPBu0.jpg
new file mode 100644
index 000000000..cabc31e53
--- /dev/null
+++ b/src/linguist/linguist/doc/images/xNIz78IPBu0.jpg
Binary files differ
diff --git a/src/linguist/linguist/doc/includes/cmake-find-package-linguisttools.qdocinc b/src/linguist/linguist/doc/includes/cmake-find-package-linguisttools.qdocinc
new file mode 100644
index 000000000..25e98107b
--- /dev/null
+++ b/src/linguist/linguist/doc/includes/cmake-find-package-linguisttools.qdocinc
@@ -0,0 +1,6 @@
+The command is defined in the \c LinguistTools component of the \c Qt6 package.
+Load the package with:
+
+\code
+find_package(Qt6 REQUIRED COMPONENTS LinguistTools)
+\endcode
diff --git a/src/linguist/linguist/doc/qtlinguist.qdocconf b/src/linguist/linguist/doc/qtlinguist.qdocconf
index b082f1e62..f18b8a8c1 100644
--- a/src/linguist/linguist/doc/qtlinguist.qdocconf
+++ b/src/linguist/linguist/doc/qtlinguist.qdocconf
@@ -13,12 +13,9 @@ qhp.QtLinguist.namespace = org.qt-project.qtlinguist.$QT_VERSION_TAG
qhp.QtLinguist.virtualFolder = qtlinguist
qhp.QtLinguist.indexTitle = Qt Linguist Manual
-qhp.QtLinguist.filterAttributes = qt $QT_VERSION tools qtlinguist
-qhp.QtLinguist.customFilters.QtLinguist.name = Qt Linguist Manual
-qhp.QtLinguist.customFilters.QtLinguist.filterAttributes = qt tools qtlinguist
qhp.QtLinguist.subprojects = manual examples
qhp.QtLinguist.subprojects.manual.title = Manual
-qhp.QtLinguist.subprojects.manual.indexTitle = Qt Linguist Manual
+qhp.QtLinguist.subprojects.manual.indexTitle = All topics
qhp.QtLinguist.subprojects.manual.type = manual
qhp.QtLinguist.subprojects.examples.title = Examples
qhp.QtLinguist.subprojects.examples.indexTitle = Qt Linguist Examples
@@ -27,13 +24,26 @@ qhp.QtLinguist.subprojects.examples.sortPages = true
language = Cpp
-sourcedirs = ..
+sourcedirs = .
exampledirs = ../../../../examples/linguist \
snippets
imagedirs = images
-depends += qtdoc qtqml qtquick qtcore qtgui qmake
+# Add thumbnails for YouTube links
+{HTML.extraimages,DocBook.extraimages,qhp.QtDoc.extraFiles} += images/xNIz78IPBu0.jpg
+
+depends += qtdoc qtqml qtquick qtcore qtgui qmake qtcmake
navigation.landingpage = "Qt Linguist Manual"
+navigation.toctitles = \
+ "Release managers" \
+ "Translators" \
+ "Developers" \
+ "Examples" \
+
+navigation.toctitles.inclusive = true
+
+# Enforce zero documentation warnings
+warninglimit = 0
diff --git a/src/linguist/linguist/doc/snippets/cmake-macros/examples.cmake b/src/linguist/linguist/doc/snippets/cmake-macros/examples.cmake
index 542ba7a6f..0f72cc7cc 100644
--- a/src/linguist/linguist/doc/snippets/cmake-macros/examples.cmake
+++ b/src/linguist/linguist/doc/snippets/cmake-macros/examples.cmake
@@ -1,13 +1,127 @@
-#! [qt5_add_translation]
-qt5_add_translation(qmFiles helloworld_en.ts helloworld_de.ts)
-#! [qt5_add_translation]
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#! [qt5_add_translation_output_location]
+#! [qt_add_translation]
+qt_add_translation(qmFiles helloworld_en.ts helloworld_de.ts)
+#! [qt_add_translation]
+
+#! [qt_add_translation_output_location]
set(TS_FILES helloworld_en.ts helloworld_de.ts)
set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION "l10n")
-qt5_add_translation(qmFiles ${TS_FILES})
-#! [qt5_add_translation_output_location]
+qt_add_translation(qmFiles ${TS_FILES})
+#! [qt_add_translation_output_location]
+
+#! [qt_create_translation]
+qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} helloworld_en.ts helloworld_de.ts)
+#! [qt_create_translation]
+
+#! [auto_determine_ts_file_paths]
+project(myproject)
+cmake_minimum_required(VERSION 3.19)
+qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES de fr)
+
+add_subdirectory(libs)
+add_subdirectory(apps)
+
+qt_add_translations(TARGETS myapp)
+#! [auto_determine_ts_file_paths]
+
+#! [set_output_location_on_ts_file]
+set_source_files_properties(app_en.ts app_de.ts
+ PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/translations")
+#! [set_output_location_on_ts_file]
+
+#! [qt_add_lupdate]
+qt_add_lupdate(
+ SOURCE_TARGETS myapp
+ TS_FILES myapp_de.ts
+ PLURALS_TS_FILE myapp_en.ts
+)
+#! [qt_add_lupdate]
+
+#! [qt_add_translations_default]
+cmake_minimum_required(VERSION 3.28)
+project(frogger)
+find_package(Qt6 COMPONENTS OpenGLWidgets)
+qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES de fr)
+
+# The CMake files in the 'src' subdirectory create
+# the targets 'frogger_game' and 'frogger_level_editor'.
+add_subdirectory(src)
+
+# Add translations to the 'frogger_game' target.
+qt_add_translations(frogger_game)
+#! [qt_add_translations_default]
+
+#! [qt_lupdate_lrelease]
+qt_collect_translation_source_targets(i18n_targets)
+qt_add_lupdate(
+ SOURCE_TARGETS ${i18n_targets}
+ TS_FILES frogger_de.ts frogger_fr.ts)
+qt_add_lrelease(
+ TS_FILES frogger_de.ts frogger_fr.ts
+ QM_FILES_OUTPUT_VARIABLE qm_files)
+qt_add_resources(frogger_game "translations"
+ PREFIX "/i18n"
+ BASE "${CMAKE_CURRENT_BINARY_DIR}"
+ FILES "${qm_files}"
+)
+#! [qt_lupdate_lrelease]
+
+#! [qt_add_translations_explicit_source_targets]
+qt_add_translations(frogger_game
+ SOURCE_TARGETS frogger_game
+)
+#! [qt_add_translations_explicit_source_targets]
+
+#! [qt_add_translations_resource_prefix]
+qt_add_translations(
+ TARGETS frogger_game frogger_level_editor
+ RESOURCE_PREFIX "/translations"
+)
+#! [qt_add_translations_resource_prefix]
+
+#! [qt_add_translations_install]
+qt_add_translations(
+ TARGETS frogger_game frogger_level_editor
+ QM_FILES_OUTPUT_VARIABLE qm_files
+)
+install(FILES ${qm_files} DESTINATION "translations")
+#! [qt_add_translations_install]
+
+#! [qt_collect_translation_source_targets]
+add_subdirectory(src) # The actual application is defined here.
+
+# All targets that have been defined up to this point will be in i18n_targets.
+qt_collect_translation_source_targets(i18n_targets)
+qt_add_lupdate(SOURCE_TARGETS ${i18n_targets})
+
+# No targets from this directory are in i18n_targets.
+add_subdirectory(tests) # Unit tests - we don't want to translate those.
+#! [qt_collect_translation_source_targets]
+
+#! [qt_collect_translation_source_targets_deferred]
+function(set_up_translations)
+ qt_collect_translation_source_targets(i18n_targets)
+ qt_add_lupdate(SOURCE_TARGETS ${i18n_targets})
+endfunction()
+
+cmake_language(DEFER CALL set_up_translations)
+
+add_subdirectory(src) # The actual application is defined here.
+add_subdirectory(tests) # Unit tests - we don't want to translate those.
+set_property(DIRECTORY tests PROPERTY QT_EXCLUDE_FROM_TRANSLATION ON)
+#! [qt_collect_translation_source_targets_deferred]
-#! [qt5_create_translation]
-qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} helloworld_en.ts helloworld_de.ts)
-#! [qt5_create_translation]
+#! [exclude sources from i18n]
+qt_add_executable(myapp
+ main.cpp
+ untranslatable.cpp
+ 3rdparty/sqlite3.h
+ 3rdparty/sqlite3.c
+)
+set_property(TARGET myapp PROPERTY QT_EXCLUDE_SOURCES_FROM_TRANSLATION
+ untranslatable.cpp
+ 3rdparty/*
+)
+#! [exclude sources from i18n]
diff --git a/src/linguist/linguist/doc/snippets/doc_src_linguist-manual.cpp b/src/linguist/linguist/doc/snippets/doc_src_linguist-manual.cpp
index f2064a8bb..fbe6319a7 100644
--- a/src/linguist/linguist/doc/snippets/doc_src_linguist-manual.cpp
+++ b/src/linguist/linguist/doc/snippets/doc_src_linguist-manual.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [3]
label->setText(tr("F\374r \310lise"));
diff --git a/src/linguist/linguist/doc/snippets/doc_src_linguist-manual.pro b/src/linguist/linguist/doc/snippets/doc_src_linguist-manual.pro
index ccb27f421..db3241d2c 100644
--- a/src/linguist/linguist/doc/snippets/doc_src_linguist-manual.pro
+++ b/src/linguist/linguist/doc/snippets/doc_src_linguist-manual.pro
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#! [0]
HEADERS = main-dlg.h \
diff --git a/src/linguist/linguist/doc/src/linguist-examples.qdoc b/src/linguist/linguist/doc/src/linguist-examples.qdoc
index aa99522f6..3a8f5d967 100644
--- a/src/linguist/linguist/doc/src/linguist-examples.qdoc
+++ b/src/linguist/linguist/doc/src/linguist-examples.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\group examples-linguist
diff --git a/src/linguist/linguist/doc/src/linguist-manual.qdoc b/src/linguist/linguist/doc/src/linguist-manual.qdoc
index 5407b03ee..32caa80f2 100644
--- a/src/linguist/linguist/doc/src/linguist-manual.qdoc
+++ b/src/linguist/linguist/doc/src/linguist-manual.qdoc
@@ -1,567 +1,848 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\page qtlinguist-index.html
\title Qt Linguist Manual
\ingroup qttools
\ingroup internationalization
+ \brief Using Qt translation tools: lupdate, lrelease, and \QL.
\startpage {index.html}{Qt Reference Documentation}
- \nextpage Overview of the Translation Process
+ \nextpage Release managers
\keyword Qt Linguist
- Qt provides excellent support for translating Qt C++ and Qt Quick
- applications into local languages. Release managers, translators, and
- developers can use Qt tools to accomplish their tasks.
+ Release managers, translators, and developers can use Qt tools to translate
+ Qt C++ and Qt Quick applications into local languages.
- \l{linguist-manager.html}{Release managers} bear the overall responsibility
- for the release of the application. Typically, they coordinate the work of
- developers and translators. They can use the \e lupdate tool to synchronize
- source code and translations and the \e lrelease tool to create
- run-time translation files for use by the released application.
+ In addition to the Qt translation file (TS) format, \QL and \c lupdate
+ support XML Localization Interchange File Format (XLIFF).
- \l{linguist-translators.html}{Translators} can use the \QL tool to
- translate text in applications.
- No computer knowledge beyond the ability to start a program and
- use a text editor or word processor is required.
+ \table
+ \row
+ \li \inlineimage front-publishing.png
+ \li \inlineimage front-ui.png
+ \li \inlineimage front-coding.png
+ \row
+ \li \l{Release managers}
+ \li \l{Translators}
+ \li \l{Developers}
+ \row
+ \li
+ \list
+ \li \l {Creating translation files}
+ \li \l {Using lupdate}
+ \li \l {Using lrelease}
+ \endlist
+ \li
+ \list
+ \li \l {Qt Linguist user interface}
+ \li \l {Translating strings}
+ \li \l {Selecting context to translate}
+ \li \l {Selecting strings to translate}
+ \li \l {Viewing strings in context}
+ \li \l {Reusing translations}
+ \li \l {Validating translations}
+ \li \l {Translating multiple languages simultaneously}
+ \endlist
+ \li
+ \list
+ \li \l{TS file format}
+ \li \l{Text ID based translations}
+ \li \l{CMake Commands in Qt6 LinguistTools}{CMake commands}
+ \li \l{Examples}
+ \endlist
+ \endtable
- \l{linguist-programmers.html}{Developers} must create Qt applications that are
- able to use translated text. They should also help translators identify
- the context in which phrases appear. Developers can use tutorials to learn
- about their tasks.
+ The following video shows how to internationalize and localize a simple
+ example application:
- For more information about the supported languages and writing systems, see
- \l{Internationalization with Qt}.
+ \youtube xNIz78IPBu0
+*/
- \section1 Table of Contents
+/*!
+ \page linguist-toc.html
+ \title All topics
\list
- \li \l{Overview of the Translation Process}
- \li \l{Qt Linguist Manual: Release Manager}{Release Manager}
- \li \l{Qt Linguist Manual: Translators}{Translators}
- \li \l{Qt Linguist Manual: Developers}{Developers}
- \li \l{Qt Linguist Manual: TS File Format}{TS File Format}
- \li \l{Qt Linguist Manual: Text ID Based Translations}{Text ID Based Translations}
+ \li \l{Release managers}
+ \list
+ \li \l {Creating translation files}
+ \li \l {Using lupdate}
+ \li \l {Using lrelease}
+ \endlist
+ \li \l{Translators}
+ \list
+ \li \l {Qt Linguist user interface}
+ \li \l {Translating strings}
+ \li \l {Selecting context to translate}
+ \li \l {Selecting strings to translate}
+ \li \l {Viewing strings in context}
+ \li \l {Reusing translations}
+ \li \l {Validating translations}
+ \li \l {Translating multiple languages simultaneously}
+ \endlist
+ \li \l{Developers}
+ \list
+ \li \l{TS file format}
+ \li \l{Text ID based translations}
+ \li \l{CMake Commands in Qt6 LinguistTools}{CMake commands}
+ \li \l{Examples}
+ \endlist
\endlist
-
-*/
+ */
/*!
- \page linguist-overview.html
- \title Overview of the Translation Process
- \ingroup internationalization
+ \page linguist-manager.html
+ \title Release managers
\previouspage Qt Linguist Manual
- \nextpage Qt Linguist Manual: Release Manager
-
- Most of the text that must be translated in an application
- consists of either single words or short phrases. These typically
- appear as window titles, menu items, tooltips,
- and labels to buttons, check boxes, and radio buttons.
-
- The phrases are entered into the source code by the developer in
- their native language using a simple but special syntax to identify
- that the phrases require translation. The Qt tools provide context
- information for each of the phrases to help the translator, and the
- developer is able to add additional context information to phrases
- when necessary.
-
- The release manager generates a set of translation
- files that are produced from the source files and passes these to the
- translator. The translator opens the translation files using \QL,
- enters their translations, and saves the results back into
- the translation files, which they pass back to the release manager.
- The release manager then generates fast compact versions of these
- translation files ready for use by the application.
-
- The tools are designed to be used in repeated cycles as applications
- change and evolve, preserving existing translations and making it
- easy to identify which new translations are required. \QL also
- provides a phrase book facility to help ensure consistent
- translations across multiple applications and projects.
-
- Translators and developers must address a number of issues because
- of the subtleties and complexities of human language:
+ \nextpage Creating translation files
- \list
+ \image front-publishing.png
- \li A single phrase may need to be translated into several
- different forms depending on context. For example, \e open in English
- might become \e{\ouml}\e{ffnen}, "open file", or \e aufbauen,
- "open internet connection", in German.
-
- \li Keyboard accelerators may need to be changed but without
- introducing conflicts. For example, "\&Quit" in English becomes
- "Avslutt" in Norwegian which does not contain a "Q". We cannot
- use a letter that is already in use - unless we change several
- accelerators.
-
- \li Phrases that contain variables, for example, "The 25 files
- selected will take 63 seconds to process", where the two numbers
- are inserted programmatically at runtime, may need to be rephrased.
- The word order in the other language may be different, so the
- variables will have to be put in another place in the sentence.
+ Release managers use \c lupdate to generate a set of translation source (TS)
+ files from the application source files (QML and C++) and pass them to
+ translators. The translators use \QL to translate the strings and pass the
+ TS files back to the release managers. They use \c lrelease to generate
+ compact versions of the TS files, called Qt message (QM) files, that are
+ ready for use by the application.
+ \list
+ \li \l {Creating translation files}
+ \li \l {Using lupdate}
+ \li \l {Using lrelease}
\endlist
- The Qt translation tools provide clear and simple solutions to these
- issues.
+ You can use the tools in repeated cycles as applications change and evolve.
+ They preserve existing translations and make it easy to identify new strings.
+ In addition, you can use the \QL phrase books to consistently translate
+ multiple applications and projects.
- \QL and lupdate are able to import and export XML Localization
- Interchange File Format (XLIFF) files, making it possible to take
- advantage of tools and translation services that work with this
- format. For more information on working with these files, see
- \l{Qt Linguist Manual: Translators}{Translators}.
+ You can configure CMake projects to automatically run \c lupdate and
+ \c lrelease when you build a project and generate TS and QM files for you.
+
+ You can use the Qt Design Studio
+ \l{https://doc-snapshots.qt.io/qtdesignstudio/studio-translations.html}
+ {Translations} view to test and manage \l {Text ID based translations}
+ {ID-based translations}.
*/
/*!
- \page linguist-manager.html
- \title Qt Linguist Manual: Release Manager
- \ingroup internationalization
+ \page linguist-creating-ts-files.html
+
+ \previouspage Release managers
+ \nextpage Using lupdate
- \previouspage Overview of the Translation Process
- \nextpage Qt Linguist Manual: Translators
+ \title Creating translation files
- Two tools are provided for the release manager: \c lupdate and
- \c lrelease. These tools can process \l {qmake Manual}{qmake} project files,
- or operate directly on the file system.
+ Most of the text to translate in an application consists of either single
+ words or short phrases. These typically appear as window titles, menu
+ items, tooltips, and labels to buttons, check boxes, and radio buttons.
- \section1 Creating Translation Files
+ Developers mark the phrases as translatable in the QML and C++ source code.
+ The Qt tools provide context information for each of the phrases to help the
+ translator understand their meaning. The developer can add comments to the
+ phrases.
- Translation files consist of all the user-visible text and Ctrl key
- accelerators in an application and translations of that text.
+ Translation files consist of all the user-visible text and \key Ctrl key
+ shortcuts in an application and translations of that text.
To create translation files:
\list 1
- \li Run lupdate to generate the first set of translation source (TS) files
- with all the user-visible text but no translations.
+ \li Run \c lupdate to generate the first set of translation source (TS)
+ files with all the user-visible text but no translations.
- \li Give the TS files to the translator who adds translations using \QL. \QL
- takes care of any changed or deleted source text.
+ \li Give the TS files to translators who add translations using \QL.
+ \QL indicates changed and deleted source text.
- \li Run lupdate to incorporate any new text added to the application.
- lupdate synchronizes the user-visible text from the application with the
- translations. It does not destroy any data.
+ \li Run \c lupdate to incorporate any new text added to the application.
+ \c lupdate synchronizes the user-visible text from the application
+ with the translations. It does not destroy any data.
- \li To release the application, run lrelease to read the TS files and
- produce the QM files used by the application at runtime.
+ \li Run \c lrelease to read the TS files and produce the QM files used
+ by the application at runtime.
\endlist
For \c lupdate to work successfully, it must know which translation files to
- produce. The files are listed in the application's \c .pro Qt project file.
+ produce. Specify the files in the application's Qt project file.
+ When building with CMake, you use \l{CMake Commands in Qt6 LinguistTools}
+ {CMake commands} to add targets that create or update TS files and transform
+ them into QM files. The translation files are generated when you build the
+ targets.
+*/
+
+/*!
+ \page linguist-lupdate.html
\target lupdate
- \section1 Using lupdate
- Usage: \c {lupdate myproject.pro}
+ \previouspage Release managers
+ \nextpage Using lrelease
+
+ \title Using lupdate
+
+ The \c lupdate command line tool finds translatable strings in C++ source,
+ C++ header, Java, Python, QML, and UI files and generates or updates TS
+ files.
+
+ When building with qmake, specify the files to process at the command line
+ or in a .pro file.
+
+ When building with CMake, use \l{CMake Commands in Qt6 LinguistTools}
+ {CMake commands} to add targets that create or update TS files and transform
+ them into QM files. The \c lupdate tool is run with the \l {lupdate options}
+ {options} you pass to the commands when you build the target.
+
+ For more information about specifying translations in project files, see
+ \l{Localizing Applications}.
+
+ \section1 lupdate syntax
+
+ \badcode
+ lupdate [options] [project-file]...
+ lupdate [options] [source-file|path|@lst-file]... -ts ts-files|@lst-file
+ \endcode
- The lupdate command line tool finds the translatable
- strings in the specified source, header and \e {Qt Designer}
- interface files, and produces or updates \c .ts translation
- files. The files to process and the files to update can be set at
- the command line, or provided in a \c .pro file specified as a
- command line argument. The developer creates the .pro file, as
- described in \l{Qt Linguist Manual: Developers}.
+ Where:
+
+ \list
+ \li \c options means one or several \l {lupdate options}.
+ \li \c project-file is the project configuration file.
+ \li \c source-file is a file that contains translatable strings.
+ \li \c path is the path to a folder that contains translation
+ source files.
+ \li \c @lst-file reads additional file names (one per line) or
+ includepaths (one per line and prefixed with \c -I) from \e lst-file.
+ \li \c ts-files are the TS files to generate or update.
+ \endlist
- You can generate the translation file for a single QML file in
- the following way:
+ To view the latest help, enter:
\badcode
- lupdate main.qml -ts main_en.ts
+ lupdate -help
+ \endcode
+
+ \section2 lupdate options
+
+ \table
+ \header
+ \li Option
+ \li Action
+ \row
+ \li \c {-help}
+ \li Display up-to-date help information and exit.
+ \row
+ \li \c {-no-obsolete}
+ \li Drop all obsolete and vanished strings.
+ \row
+ \li \c {-extensions <ext>[,<ext>]...}
+ \li Process files with the given extensions, only. Use commas to
+ separate extensions in the list. Do not use whitespace. The default
+ value is:
+ \c {java,jui,ui,c,c++,cc,cpp,cxx,ch,h,h++,hh,hpp,hxx,js,qs,qml,qrc}.
+ \row
+ \li \c {-pluralonly}
+ \li Only include plural form messages.
+ \row
+ \li \c {-silent}
+ \li Do not explain what is being done.
+ \row
+ \li \c {-no-sort}
+ \li Do not sort contexts in TS files.
+ \row
+ \li \c {-no-recursive}
+ \li Do not recursively scan directories.
+ \row
+ \li \c {-recursive}
+ \li Recursively scan directories (default).
+ \row
+ \li \c {-I <includepath> or -I<includepath>}
+ \li Look for include files in this additional location. You can specify
+ multiple paths.
+ \row
+ \li \c {-locations {absolute|relative|none}}
+ \li Specify or override the way to save source code references in TS
+ files.
+ \list
+ \li \c absolute means that the source file path is relative to
+ the target file, but the line number is absolute.
+ \li \c relative means that the source file path is relative to
+ the target file. The line number is relative to other
+ entries in the same source file.
+ \li \c none stores no information about source location.
+ \endlist
+ If you do not specify the location, \c lupdate determines it from
+ existing TS files. The default value for new files is \c absolute.
+ \row
+ \li \c {-no-ui-lines}
+ \li Do not record line numbers in references to UI files.
+ \row
+ \li \c {-disable-heuristic {sametext|similartext}}
+ \li Disable the named merge heuristic. Can be specified multiple times.
+ \row
+ \li \c {-project <filename>}
+ \li Name of a file containing the project's description in JSON format.
+ You can use the \c lprodump tool to generate the file from a .pro
+ file.
+ \row
+ \li \c {-pro <filename>}
+ \li Name of a .pro file. Useful for files with the .pro file syntax but
+ some other file suffix. Projects are recursed into and merged.
+ This option is deprecated. Use the \c lupdate-pro tool instead.
+ \row
+ \li \c {-pro-out <directory>}
+ \li Virtual output directory for processing subsequent .pro files.
+ \row
+ \li \c {-pro-debug}
+ \li Trace processing .pro files. Specify twice for more verbosity.
+ \row
+ \li \c {-source-language <language>[_<region>]}
+ \li Specify the language of the source strings for new files.
+ Defaults to POSIX if not specified.
+ \row
+ \li \c {-target-language <language>[_<region>]}
+ \li Specify the language of the translations for new files.
+ If you do not specify the language, \c lupdate determines it from
+ the file name.
+ \row
+ \li \c {-tr-function-alias <function>{+=,=}<alias>[,<function>{+=,=}<alias>]...}
+ \li With \c {+=}, recognize \c <alias> as an alternative spelling of
+ \c <function>.
+ With \c {=,} recognize \c <alias> as the only spelling of
+ \c <function>.
+
+ Available \c <function> values (with their currently defined aliases)
+ are:
+ \list
+ \li \c {Q_DECLARE_TR_FUNCTIONS} (\c {=Q_DECLARE_TR_FUNCTIONS})
+ \li \c {QT_TR_N_NOOP} (\c {=QT_TR_N_NOOP})
+ \li \c {QT_TRID_N_NOOP} (\c {=QT_TRID_N_NOOP})
+ \li \c {QT_TRANSLATE_N_NOOP} (\c {=QT_TRANSLATE_N_NOOP})
+ \li \c {QT_TRANSLATE_N_NOOP3} (\c {=QT_TRANSLATE_N_NOOP3})
+ \li \c {QT_TR_NOOP} (\c {=QT_TR_NOOP})
+ \li \c {QT_TRID_NOOP} (\c {=QT_TRID_NOOP})
+ \li \c {QT_TRANSLATE_NOOP} (\c {=QT_TRANSLATE_NOOP})
+ \li \c {QT_TRANSLATE_NOOP3} (\c {=QT_TRANSLATE_NOOP3})
+ \li \c {QT_TR_NOOP_UTF8} (\c {=QT_TR_NOOP_UTF8})
+ \li \c {QT_TRANSLATE_NOOP_UTF8} (\c {=QT_TRANSLATE_NOOP_UTF8})
+ \li \c {QT_TRANSLATE_NOOP3_UTF8} (\c {=QT_TRANSLATE_NOOP3_UTF8})
+ \li \c {findMessage} (\c {=findMessage})
+ \li \c {qtTrId} (\c {=qtTrId})
+ \li \c {tr} (\c {=tr})
+ \li \c {trUtf8} (\c {=trUtf8})
+ \li \c {translate} (\c {=translate})
+ \li \c {qsTr} (\c {=qsTr})
+ \li \c {qsTrId} (\c {=qsTrId})
+ \li \c {qsTranslate} (\c {=qsTranslate})
+ \endlist
+ \row
+ \li \c {-ts <ts-file>...}
+ \li Specify the output files. This overrides \c TRANSLATIONS.
+ \row
+ \li \c {-version}
+ \li Display the version of \c lupdate and exit.
+ \row
+ \li \c {-clang-parser [compilation-database-dir]}
+ \li Use clang to parse .cpp files. Otherwise, use a custom
+ parser. This option needs a clang compilation database
+ (\c compile_commands.json) for the files to be parsed.
+ Specify the path to the directory containing this file
+ on the command line, directly after the \c -clang-parser
+ option, or in the project file.
+
+ When using qmake, set the \c LUPDATE_COMPILE_COMMANDS_PATH
+ variable in the .pro file.
+
+ A directory specified on the command line takes precedence. If you
+ do not specify a path, \c lupdate searches for the compilation
+ database from all parent paths of the first input file.
+ \row
+ \li \c {-project-roots <directory>...}
+ \li Specify one or more project root directories. Only files
+ below a project root are considered for translation when
+ using the \c -clang-parser option.
+ \endtable
+
+ \section1 Examples
+
+ \section2 Using lupdate with CMake
+
+ When building with CMake, use \l{CMake Commands in Qt6 LinguistTools}
+ {CMake commands} to add translations on targets to the CMakeLists.txt
+ file, and then build the targets.
+
+ Select one of the following options:
+
+ \list
+ \li Use \l qt_add_translations on a target, such as \e app.
+ This calls \l qt_add_lupdate and \l qt_add_lrelease.
+ \li Use \c qt_add_lupdate on a target.
+ \endlist
+
+ Build a target (for example, \c app_lupdate) to update the .ts
+ files for it. To update the .ts files for all targets, build the
+ target \c {update_translations}.
+
+ \section2 Using lupdate with qmake
+
+ To generate a translation file for a single QML file:
+
+ \badcode
+ lupdate main.qml -ts main_en.ts
\endcode
To make a translation file for another language, for example French,
- you copy main_en.ts to main_fr.ts, and translate the strings in the
+ copy main_en.ts to main_fr.ts, and translate the strings in the
French TS file.
\c lupdate processes QML files that are listed in the \c .qrc file:
\badcode
- RESOURCES += qml.qrc
+ RESOURCES += qml.qrc
\endcode
To have all QML files processed by \c lupdate:
\badcode
- lupdate application.qrc -ts myapp_en.ts
+ lupdate application.qrc -ts myapp_en.ts
\endcode
- You can also process all QML files without using a \c .qrc file:
+ To process all QML files without using a \c .qrc file:
\badcode
- lupdate -extensions qml -ts myapp_en.ts
+ lupdate -extensions qml -ts myapp_en.ts
\endcode
- If you are mostly processing QML files, but also have C++ code
- that contains strings to be translated, you can add it in the same command:
+ To check for translatable strings in both QML and C++ source files:
\badcode
- lupdate qml.qrc filevalidator.cpp -ts myapp_en.ts
+ lupdate qml.qrc filevalidator.cpp -ts myapp_en.ts
\endcode
- The translation files can be mentioned in the .pro file, but it
- is also possible to do without it, and just specify the translation
- file on the command line.
-
- For example, to generate .ts files that will be used for English and
- French:
+ To generate .ts files that will be used for English and French without
+ specifying the languages in the project file:
\badcode
- lupdate qml.qrc filevalidator.cpp -ts myapp_en.ts myapp_fr.ts
+ lupdate qml.qrc filevalidator.cpp -ts myapp_en.ts myapp_fr.ts
\endcode
- The produced translation files are given to the translator who
- uses \QL to read the files and insert the translations.
+ Give the TS files to the translator who uses \QL to read the files and
+ insert the translations.
- Companies that have their own translators in-house may find it
- useful to run lupdate regularly, perhaps monthly, as the
- application develops. This will lead to a fairly low volume of
- translation work spread evenly over the life of the project and
- will allow the translators to support a number of projects
- simultaneously.
+ \section1 XLIFF format files
- Companies that hire in translators as required may prefer to run
- lupdate only a few times during the application life cycle. The
- first time might be just before the first test phase. This will
- provide the translator with a substantial single block of work and
- any bugs that the translator detects may easily be included with
- those found during the initial test phase. The second and any
- subsequent lupdate runs would probably take place during the
- final beta phase.
+ The TS file format is a simple human-readable XML format that you
+ can use with version control systems. In addition, \c lupdate can
+ process Localization Interchange File Format (XLIFF) files (\c .xlf).
+
+ \note Only XLIFF versions 1.1 and 1.2 are currently supported.
+
+ You can open and edit XLIFF files in \QL.
+*/
- The TS file format is a simple human-readable XML format that
- can be used with version control systems if required. \c lupdate
- can also process Localization Interchange File Format (XLIFF)
- format files; files in this format typically have file names that
- end with the \c .xlf suffix.
+/*!
+ \page linguist-lrelease.html
+ \target lrelease
- \note The minimum supported version for XLIFF format files is
- 1.1. XLIFF 1.0 version files are not supported.
+ \previouspage Using lupdate
+ \nextpage Translators
- Pass the \c -help option to \c lupdate to view supported options.
+ \title Using lrelease
- \QL is also able to import and export XLIFF files. See the
- \l{Qt Linguist Manual: Translators}{Translators} section for more
- information.
+ The \c lrelease command line tool produces QM files out of TS files. The
+ QM file format is a compact binary format that the localized application
+ uses. It provides extremely fast lookup for translations.
- \target lrelease
- \section1 Using lrelease
+ When building with qmake, specify the files to process at the command line
+ or in a .pro file.
- Usage: \c {lrelease myproject.pro}
+ When building with CMake, use \l{CMake Commands in Qt6 LinguistTools}
+ {CMake commands} to add targets that create or update TS files and
+ transform them into QM files. The \c lrelease tool is run with the
+ \l {lrelease options}{options} you pass to the commands when you build
+ the target.
- The lrelease command line tool produces QM files out
- of TS files. The QM file format is a compact binary format
- that is used by the localized application. It provides extremely
- fast lookups for translations. The TS files lrelease
- processes can be specified at the command line, or given
- indirectly by a Qt \c .pro project file.
+ Run \c lrelease whenever you want to release the application, from the
+ initial test version through to the final release version. The application
+ does not need QM files to run, but if they are available, the application
+ detects them and uses them automatically.
- This tool is run whenever a release of the application is to be
- made, from initial test version through to final release
- version. If the QM files are not created, for example because an
- alpha release is required before any translation has been
- undertaken, the application will run perfectly well using the text
- the developers placed in the source files. Once the QM files
- are available the application will detect them and use them
- automatically.
+ \note The \c lrelease tool only incorporates translations that you
+ mark as \e finished. Otherwise, it uses the original text instead.
- \c lrelease can be also be run without specifying a \.pro file:
+ \section1 lrelease syntax
\badcode
- lrelease.exe main_en.ts languages\main_fr.ts
+ lrelease [options] -project project-file
+ lrelease [options] ts-files [-qm qm-file]
\endcode
- \note The lrelease tool only incorporates translations that are
- marked as "finished". Otherwise the original text is used
- instead.
+ Where:
- Pass the \c -help option to \c lrelease to view supported options.
+ \list
+ \li \c options means one or several \l {lrelease options}.
+ \li \c project-file is the project configuration file.
+ \li \c ts-files are the TS files to use as input for the QM files.
+ \li \c qm-file is the name of the QM file to generate.
+ \endlist
- \section1 Missing Translations
+ \note Passing .pro files to \c lrelease is deprecated. Use the
+ \c lrelease-pro tool or the \c lrelease.prf feature when using qmake.
- Both lupdate and lrelease may be used with TS
- translation source files which are incomplete. Missing
- translations will be replaced with the native language phrases at
- runtime.
+ To view the latest help, enter:
+
+ \badcode
+ lrelease -help
+ \endcode
+
+ \section2 lrelease options
+
+ \table
+ \header
+ \li Option
+ \li Action
+ \row
+ \li \c {-help}
+ \li Display up-to-date help information and exit.
+ \row
+ \li \c {-idbased}
+ \li Use IDs instead of source strings for message keying.
+ \row
+ \li \c {-compress}
+ \li Compress the QM files.
+ \row
+ \li \c {-nounfinished}
+ \li Do not include unfinished translations.
+ \row
+ \li \c {-removeidentical}
+ \li If the translated text is the same as the source text, exclude the
+ message.
+ \row
+ \li \c {-markuntranslated <prefix>}
+ \li If a message has no real translation, use the source text
+ prefixed with the given string instead.
+ \row
+ \li \c {-project <filename>}
+ \li Name of a file containing the project's description in JSON format.
+ You can use the \c lprodump tool to generate the file from a .pro
+ file.
+ \row
+ \li \c {-silent}
+ \li Do not explain what is being done.
+ \row
+ \li \c {-version}
+ \li Display the version of \c lrelease and exit.
+ \endtable
+
+ \section1 Examples
+
+ \section2 Using lrelease with CMake
+
+ When building with CMake, use \l{CMake Commands in Qt6 LinguistTools}
+ {CMake commands} to add translations on targets to the CMakeLists.txt
+ file, and then build the targets.
+
+ Select one of the following options:
+
+ \list
+ \li Use \l qt_add_translations on a target, such as \e app.
+ This calls \l qt_add_lupdate and \l qt_add_lrelease.
+ \li Use \c qt_add_lrelease on a target.
+ \endlist
+
+ Build a target (for example, \c app_lrelease) to update the .qm
+ files for it. To update the .qm files for all targets, build the
+ target \c {release_translations}.
+
+ \section2 Using lrelease with qmake
+
+ To run \c lrelease without specifying a project file:
+
+ \badcode
+ lrelease.exe main_en.ts languages\main_fr.ts
+ \endcode
*/
/*!
\page linguist-translators.html
- \title Qt Linguist Manual: Translators
- \ingroup internationalization
- \previouspage Qt Linguist Manual: Release Manager
- \nextpage Qt Linguist Manual: Developers
+ \previouspage Using lrelease
+ \nextpage Qt Linguist user interface
+
+ \title Translators
- \QL is a tool for adding translations to Qt applications. Once you have
+ \image front-ui.png
+
+ \QL is a tool for translating strings in Qt applications. Once you have
installed Qt, you can start \QL in the same way as any other application on
the development host.
+ To address issues that arise from the subtleties and complexities of
+ human language, translators and developers may need to:
+
+ \list
+ \li Translate a single phrase into several different forms depending on
+ context. For example, \e open in English might become \e{\ouml}\e{ffnen},
+ \e {open file}, or \e aufbauen, \e {open internet connection}, in German.
+
+ \li Change the mnemonic characters in keyboard shortcuts without introducing
+ conflicts. For example, \c \&Quit in English becomes \e Avslutt in
+ Norwegian, which does not contain the letter \e Q. You cannot use a
+ letter that is already in use unless you change several shortcuts.
+
+ \li Rephrase strings that contain variables. For example, you might need to
+ place the variables in a different order when you translate the string
+ \e {The 25 files selected will take 63 seconds to process}, where the
+ two numbers are inserted programmatically at runtime.
+ \endlist
+
+ For more information about how to use \QL to translate applications, see:
+
+ \list
+ \li \l {Qt Linguist user interface}
+ \li \l {Translating strings}
+ \li \l {Selecting context to translate}
+ \li \l {Selecting strings to translate}
+ \li \l {Viewing strings in context}
+ \li \l {Reusing translations}
+ \li \l {Validating translations}
+ \li \l {Translating multiple languages simultaneously}
+ \endlist
+*/
+
+/*!
+ \page linguist-ui.html
+
+ \previouspage Translators
+ \nextpage Translating strings
+
+ \title Qt Linguist user interface
+
The \QL main window contains a menu bar and the following views:
\list
- \li \gui Context (\key F6) for selecting from a list of contexts in
- which strings to be translated appear.
+ \li \uicontrol Context (\key F6) lists translation contexts.
- \li \gui Strings (\key F7) for viewing translatable strings found in a
- context.
+ \li \uicontrol Strings (\key F7) lists translatable strings in the
+ selected context.
- \li \gui {Sources and Forms} (\key F9) for viewing the context where the
- current string is used if the source code for the context is
- accessible.
+ \li \uicontrol {Sources and Forms} (\key F9) displays the selected
+ string in the source code.
- \li Translation area for translating strings.
+ \li Translation area displays the selected string and enables you to
+ enter a translation for it.
- \li \gui {Phrases and Guesses} (\key F10) for viewing possible
+ \li \uicontrol {Phrases and guesses} (\key F10) lists possible
translations for the current string.
- \li \gui Warnings (\key F8) for viewing translated strings that fail
+ \li \uicontrol Warnings (\key F8) lists translated strings that fail
validation tests.
\endlist
- \image linguist-linguist.png "Qt Linguist UI"
+ \image linguist-linguist.png {Qt Linguist UI}
The translation area (1) is always visible. To show or hide the other views,
- select \gui View > \gui Views, or use the keyboard shortcuts listed above.
+ select \uicontrol View > \uicontrol Views, or use keyboard shortcuts.
You can drag the views by their title bars and arrange them around the
translation area or even outside the main window.
+*/
+
+/*!
+ \page linguist-translating-strings.html
- \section1 Translating Strings
+ \previouspage Qt Linguist user interface
+ \nextpage Selecting context to translate
- You open translation source (TS) files in \QL for translation. TS files are
+ \title Translating strings
+
+ Open translation source (TS) files in \QL for translation. TS files are
human-readable XML files containing source phrases and their translations.
- TS files are usually created and updated by lupdate. If you do not have a TS
- file, see \l {Qt Linguist Manual: Release Manager} {Release Manager} to
- learn how to generate one.
+ TS files are usually created and updated by \c lupdate. If you do not have
+ a TS file, see \l {Creating translation files} to learn how to generate one.
You can use \QL also to translate files in the international XML
Localization Interchange File Format (XLIFF) that are generated by other
programs. However, for standard Qt projects, only the TS file format is
- used. The minimum supported version for XLIFF format files is 1.1.
+ used. Only XLIFF versions 1.1 and 1.2 are currently supported.
\QL displays the target language in the translation area, and adapts the
number of input fields for plural forms accordingly. When you open several
- TS files to translate simultaneously, the \gui Translator and
- \gui {Translator comment} fields are displayed for each language.
+ TS files to translate simultaneously, the \uicontrol Translator and
+ \uicontrol {Translator comment} fields are displayed for each language.
For more information about setting the location information, see
- \l{Changing the Target Locale}.
+ \l{Changing the target locale}.
- If the developer provides a \l{QObject::tr()} {disambiguating
- comment}, it is displayed in the \gui {Developer comments} field.
+ If the developer provides a disambiguating comment, you can see it in the
+ \uicontrol {Developer comments} field.
To translate strings:
\list 1
- \li Select \gui File > \gui Open to load a TS file.
+ \li Select \uicontrol File > \uicontrol Open to load a TS file.
+
+ \li Select a context in the \uicontrol Context view to display translatable
+ strings in the \uicontrol Strings view.
- \li Select a context in the \gui Context view to load the translatable
- strings found in that context into the \gui Strings view.
+ \image linguist-ui.webp {Two TS files open in Qt Linguist}
- \li Select a string to copy it as the \gui {Source text} in the
- translation area. The whitespace within the source text is
- visualized so that you can see the spacing required within the text.
+ \li Select a string to display it in the \uicontrol {Source text} field
+ in the translation area. The whitespace within the source text is
+ visualized.
- \li Enter the translation of the current string in the \gui Translation
+ \li Enter the translation of the current string in the \uicontrol Translation
field.
- You can also select an existing translation from the
- \gui {Phrases and Guesses} view by double-clicking it. The phrases
- are read from phrase books and the guesses are existing translations
- of similar phrases in the TS file.
+ Double-click an existing translation in the
+ \uicontrol {Phrases and guesses} field to use it as the translation
+ for the current string. \QL reads the phrases from phrase books and
+ bases the guesses on existing translations of similar phrases in the
+ TS file.
- \li Optionally, enter a comment to be read by other translators in the
- \gui {Translator comment} field.
+ \li Optionally, enter a comment for other translators in the
+ \uicontrol {Translator comment} field.
\li To accept the translation, press \key {Ctrl+Enter}, select
\inlineimage linguist-doneandnext.png
, or click the icon to the left of the selected source string in the
string list.
- \li Select \gui File > \gui Save to save your work.
+ \li Select \uicontrol File > \uicontrol Save to save your work.
\endlist
Repeat this process until all strings in the string list are marked with
\inlineimage linguist-check-on.png
- (\gui {Accepted/Correct}) or
+ (\uicontrol {Accepted/Correct}) or
\inlineimage linguist-check-warning.png
- (\gui {Accepted/Warnings}). Then select the next context and continue.
+ (\uicontrol {Accepted/Warnings}). Then select the next context and continue.
To view the number of words and characters in the source text and in the
- translated text, select \gui View > \gui Statistics.
+ translated text, select \uicontrol View > \uicontrol Statistics.
- Select \gui File > \gui Release to create a Qt message QM file with the same
- base name as the current translation source file. The release manager's
- command line tool lrelease performs the same function on \e all of an
+ Select \uicontrol File > \uicontrol Release to create a QM
+ file with the same base name as the current translation source file.
+ The \c lrelease tool performs the same function on \e all of an
application's translation source files.
- To print the translation source and the translations, select \gui File >
- \gui Print.
-
- To quit \QL, select \gui File > \gui Exit.
-
- \section2 Leaving a Translation for Later
-
- If you wish to leave a translation, press \key{Ctrl+L} (Next
- Unfinished) to move to the next unfinished translation. To move to
- the next translation (whether finished or unfinished) press
- \key{Shift+Ctrl+L}. You can also navigate using the \gui Translation
- menu. If you want to go to a different context entirely, click the
- context you want to work on in the \gui Context list, then click the
- source text in the \gui Strings view.
-
- \section2 Phrases That Require Multiple Translations Depending on Context
-
- The same phrase may occur in two or more contexts without conflict. Once
- a phrase has been translated in one context, \QL notes that the translation
- has been made and when the translator reaches a later occurrence of the same
- phrase, \QL provides
- the previous translation as a possible translation candidate in the
- \gui {Phrases and Guesses} view.
-
- If a phrase occurs more than once in a particular context it is shown only
- once in the \gui Context view and the translation is applied to every
- occurrence within the context. If the same phrase needs to be translated
- differently within the same context, the developer must provide a
- distinguishing comment for each occurrence of the phrase. If such comments
- are used, the duplicate phrases appear in the \gui Context view. The
- developer's comments appear in the translation area on a light blue
- background.
-
- \section2 Changing Keyboard Accelerators
-
- A keyboard accelerator is a key combination that, when pressed,
- causes an application to perform an action. There are two kinds of
- keyboard accelerators: Alt key and Ctrl key accelerators.
-
- \section3 Alt Key Accelerators
-
- Alt key accelerators are used in menu selection and on buttons.
- The underlined character in a menu item or button label signifies
- that pressing the Alt key with the underlined character will
- perform the same action as clicking the menu item or pressing the
- button. For example, most applications have a \e{File} menu with
- the "F" in the word "File" underlined. In these applications the
- \e{File} menu can be invoked either by clicking the word "File" on
- the menu bar or by pressing \e{Alt+F}. To identify an accelerator
- key in the translation text ("File") precede it with an ampersand:
- \e{\&File}. If a string to be translated has an ampersand in
- it, then the translation for that string should also have an
- ampersand in it, preferably in front of the same character.
-
- The meaning of an Alt key accelerator can be determined from the
- phrase in which the ampersand is embedded. The translator can
- change the character part of the Alt key accelerator, if the
- translated phrase does not contain the same character or if that
- character has already been used in the translation of some other
- Alt key accelerator. Conflicts with other Alt key accelerators
- must be avoided within a context. Note that some Alt key
- accelerators, usually those on the menu bar, may apply in other
- contexts.
-
- \section3 Ctrl Key Accelerators
-
- Ctrl key accelerators can exist independently of any visual
- control. They are often used to invoke actions in menus that would
- otherwise require multiple keystrokes or mouse clicks. They may
- also be used to perform actions that do not appear in any menu or
- on any button. For example, most applications that have a \e{File}
- menu have a \e{New} submenu item in the \e{File} menu. The \e{New}
- item might appear as "\underline{N}ew Ctrl+N" in the \e{File}
- menu, meaning the \e{New} menu can be invoked by simply pressing
- \key{Ctrl+N}, instead of either clicking \e{File} with the mouse
- and then clicking \e{New} with the mouse, or by entering \e{Alt+F}
- and \e{N}.
-
- Each Ctrl key accelerator is shown in the \gui Strings view
- as a separate string, for example \key{Ctrl+Enter}. Since
+ To print the translation source and the translations, select \uicontrol File >
+ \uicontrol Print.
+
+ To quit \QL, select \uicontrol File > \uicontrol Exit.
+
+ \section1 Moving between translatable strings
+
+ To move to the next unfinished translation, select
+ \inlineimage nextunfinished.png
+ (\uicontrol {Next Unfinished}) or press \key{Ctrl+J}.
+
+ To move to the next source text, select \inlineimage next.png
+ , press \key{Ctrl+Shift+J}, or select \uicontrol Translation >
+ \uicontrol Next.
+
+ \section1 Phrases that require multiple translations depending on context
+
+ The same phrase may occur in more than one context without conflict. When
+ you reach another occurrence of a translated phrase, \QL provides
+ the previous translation as a possible translation in the
+ \uicontrol {Phrases and guesses} view.
+
+ If a phrase occurs more than once within a particular context, it appears
+ only once in the \uicontrol Context view, and the translation is applied
+ to every occurrence within the context. If the same phrase means different
+ things within the same context, the developer must provide a comment for
+ each occurrence of the phrase. The duplicate phrases appear in the
+ \uicontrol Context view. The developer's comments appear in the translation
+ area on a light blue background.
+
+ \section1 Changing keyboard shortcuts
+
+ A keyboard shortcut is a key combination that performs an action.
+
+ \section2 Alt key shortcuts
+
+ In menu item and button text, a \e mnemonic character (marked by underlining)
+ indicates that pressing \key Alt or \key Ctrl with the underlined character
+ performs the same action as clicking the menu item or pressing the button.
+
+ For example, applications often use \e F as the mnemonic character in the
+ \uicontrol {File} menu, so you can either click the menu item or press
+ \key {Alt+F} to open the menu. The mnemonic character in the translatable
+ string is prefixed with an ampersand: \c {\&File}. The translation for the
+ string should also have an ampersand in it, preferably in front of the same
+ character.
+
+ You can determine the meaning of an \key Alt key shortcut from the phrase
+ that contains the ampersand. You can use another mnemonic character if the
+ translated phrase does not contain the current one or if it is used in
+ the translation of some other shortcut in the context. Some key shortcuts,
+ usually those on the menu bar, may apply in other contexts.
+
+ \section2 Ctrl key shortcuts
+
+ \key Ctrl key shortcuts can exist independently of any visual control.
+ Typically, they invoke actions in menus that would require multiple
+ keystrokes or mouse clicks or actions that do not appear in any menu
+ or on any button. For example, the \uicontrol {File} menu might contain a
+ \uicontrol {\underline{N}ew Ctrl+N} item that you can invoke by pressing
+ \key {Ctrl+N} even when the \uicontrol {File} menu is closed.
+
+ Each \key Ctrl key shortcut appears in the \uicontrol Strings view
+ as a separate string. For example, \key{Ctrl+Enter}. Since
the string does not have a context to give it meaning, such as
- the context of the phrase in which an Alt key accelerator appears,
- the translator must rely on the UI developer to include a
- \l{QObject::tr()} {disambiguation comment} to explain the action
- the Ctrl key accelerator is meant to perform. This disambiguating
- comment (if provided by the developer) will appear under
- \gui {Developer comments} in the translation area below the
- \gui {Source text} field.
-
- Ideally, translations for Ctrl key accelerators are simply copied by
- selecting \gui Translation > \gui {Copy from source text}. However, in some
- cases the character will
- not make sense in the target language, and it must be
- changed. Whichever character (alpha or digit) is chosen, the
- translation must be in the form "Ctrl+" followed by the upper case
- character. Qt will automatically display the correct name at
- run-time. As with Alt key accelerators, if the translator changes
- the character, the new character must not conflict with any other
- Ctrl key accelerator.
-
- \warning Do not translate the "Alt", "Ctrl" or "Shift" parts of
- the accelerators. Qt relies on these strings being there. For
- supported languages, Qt automatically translates these strings.
-
- \section2 Handling Numbered Arguments and Plurals
-
- Some phrases contain numbered arguments. A numbered argument is a
- placeholder that will be replaced with text at run-time. A numbered
- argument appears in a source string as a percent sign followed by
- a digit. Consider an example: \c{After processing file %1, file %2
- is next in line}. In this string to be translated, \c{%1} and
- \c{%2} are numbered arguments. At run-time, \c{%1} and \c{%2} will
- be replaced with the first and second file names respectively. The
+ the context of the phrase in which an \key Alt key shortcut appears,
+ you must rely on the developer to include a \l{QObject::tr()}
+ {disambiguation comment} to explain the action the \key Ctrl key
+ shortcut performs. The comment appears under \uicontrol {Developer comments}
+ in the translation area below the \uicontrol {Source text} field.
+
+ Ideally, you can copy translations for \key Ctrl key shortcuts by
+ selecting \uicontrol Translation > \uicontrol {Copy from source text}.
+ However, if the character does not make sense in the target language,
+ change it. Whichever character (alpha or digit) you choose, use the form
+ \key {Ctrl+} followed by the upper case character. Qt automatically displays
+ the correct name at runtime. As with \key Alt key shortcuts, if you change
+ the character, make sure that it does not conflict with any other
+ \key Ctrl key shortcut.
+
+ \note Do not translate the \key Alt, \key Ctrl or \key Shift parts of
+ the shortcuts, as Qt recognizes them and automatically translates them
+ for supported languages.
+
+ \section1 Handling numbered arguments and plural forms
+
+ A numbered argument is a placeholder that will be replaced with text at
+ runtime. It appears in a source string as a percent sign followed by
+ a digit. For example, in the \c{After processing file %1, file %2
+ is next in line} string, \c{%1} and \c{%2} are numbered arguments that
+ are replaced with the first and second file names at runtime. The
same numbered arguments must appear in the translation, but not
necessarily in the same order. A German translation of the string
might reverse the phrases, for example \c{Datei %2 wird bearbeitet, wenn
Datei %1 fertig ist}. Both numbered arguments appear in the
- translation, but in the reverse order. \c{%i} will always be
- replaced by the same text in the translation strings, regardless
- of where argument \e{i} appears in the argument sequence in the
- source string.
+ translation, but in the reverse order. A numbered argument is always
+ replaced by the same text in the translations, regardless of the position
+ in the argument sequence in the source string.
The use of numbered arguments is often accompanied by the use of
- plurals in the source text. In many languages, the form of the
+ plural forms in the source text. In many languages, the form of the
text will depend on the value shown, and more than one translation
is required. If the developers have marked up the source text in
correct way, fields for each of the possible plural forms will be
available in the translation area. For more information, see
- \l{Writing Source Code for Translation#Handling Plurals}
- {Writing Source Code for Translation}.
+ \l{Writing Source Code for Translation}.
- \section2 Changing the Target Locale
+ \section1 Changing the target locale
- You can set the locale information explicitly in \gui Edit >
- \gui {Translation File Settings}. If the target language and country
+ You can set the locale information explicitly in \uicontrol Edit >
+ \uicontrol {Translation File Settings}. If the target language and country
are not explicitly set when you open a translation source file, \QL
attempts to deduct them from the translation source file name. This
requires that the translation files adhere to the following file name
@@ -574,25 +855,37 @@
\endlist
If this attempt to resolve the target language and country fails, the
- \gui {Translation File Settings} window opens.
+ \uicontrol {Translation File Settings} window opens.
For example, \c app_de.ts sets the
- target language to German, and \c app_de_ch.ts sets the target language to
+ target language to German, and \c app_de_CH.ts sets the target language to
German and the target country to Switzerland. This also helps loading
translations for the current locale automatically. For more information, see
- \l{linguist-programmers.html}{Developers}.
+ \l{Enable Translation}.
\image linguist-translationfilesettings.png
+*/
+
+/*!
+ \page linguist-selecting-context.html
+
+ \previouspage Translating strings
+ \nextpage Selecting strings to translate
+
+ \title Selecting context to translate
+
+ The \uicontrol Context view lists the contexts in which strings to be translated
+ appear. The column labeled \uicontrol Context lists the context names in
+ alphabetical order. Each context is the name of a QML type or a subclass of
+ QObject.
+
+ \image linguist-context-view.webp {Context view}
- \section1 Selecting Context to Translate
+ A context for QObject itself contains strings passed to the static function
+ QObject::tr().
- The \gui Context view lists the contexts in which strings to be translated
- appear. The column labeled \gui Context lists the context names in
- alphabetical order. Each context is the name of a subclass of
- QObject. There can also be a context for QObject itself, which
- contains strings passed to the static function QObject::tr().
- There can also be an \e{<unnamed context>}, which contains strings
- that are not in a subclass of QObject.
+ An \e{<unnamed context>} contains strings that are not in a subclass of
+ QObject.
The following icons indicate the current translation state for each context:
@@ -605,7 +898,7 @@
\row
\li Accepted/Correct
\li \inlineimage linguist-check-on.png
- \li All strings in the context have been translated, and all the
+ \li All strings in the context have been translated, and all the
translations passed the \l{Validating Translations}{validation tests}.
\row
@@ -613,7 +906,7 @@
\li \inlineimage linguist-check-warning.png
\li All strings in the context have been translated or marked as translated,
but at least one translation failed the validation tests.
- In the \gui Strings view, you can see which string failed the test.
+ In the \uicontrol Strings view, you can see which string failed the test.
\row
\li Not Accepted
@@ -625,25 +918,33 @@
\li Obsolete
\li \inlineimage linguist-check-obsolete.png
\li None of the translated strings appears in the context any more. This
- usually means the context itself no longer exists in the application.
+ usually means the context no longer exists in the application.
\endtable
- The \gui Items column displays the total number of translatable strings in
+ The \uicontrol Items column displays the total number of translatable strings in
the context and the number of translated strings, separated by a slash (/).
If the numbers are equal, all the translatable strings in the context have
translations.
+*/
+
+/*!
+ \page linguist-selecting-strings.html
+
+ \previouspage Selecting context to translate
+ \nextpage Viewing strings in context
- \section1 Selecting String to Translate
+ \title Selecting strings to translate
- The \gui Strings view lists all the translatable strings found in the
- current context and their translation acceptance state. Selecting a string
- makes that string the current string in the translation area.
+ The \uicontrol Strings view lists all the translatable strings in the
+ current context and their translation acceptance state. Select a string
+ to view and edit it in the translation area.
+
+ \image linguist-strings-view.webp {Strings view}
Click the icon in front of a string to change its translation acceptance
- state. A tick mark, green or yellow, means the string has been translated
- and the translation has been accepted. A question mark means either that the
- translation has not been accepted or that the string does not have a
- translation.
+ state. A tick mark, green or yellow, means the string has an accepted
+ translation. A question mark means either that the translation does not
+ exist or you have not accepted it.
The following icons indicate the current translation state for each string:
@@ -658,154 +959,160 @@
\row
\li Accepted/Correct
\li \inlineimage linguist-check-on.png
- \li The source string has a translation (possibly empty). The user
- has accepted the translation, and the translation passes all the
- \l{Validating Translations} {validation tests}. If the translation is
- empty, the user has chosen to leave it empty. Click the icon to
- revoke acceptance of the translation and decrement the number of
- accepted translations in the \gui Items column of the \ gui Context view
- by 1. The state is reset to \gui {Not Accepted} if the string has a
- translation, or to \gui {No Translation} if the string's translation is
+ \li The source string has a translation (possibly empty). You accepted
+ the translation, and it passes all the \l{Validating Translations}
+ {validation tests}. Click the icon to revoke acceptance of the
+ translation. The state becomes \uicontrol {Not Accepted} if the string
+ has a translation or \uicontrol {No Translation} if the translation is
empty. If \c{lupdate} changes the contents of a string, its acceptance
- state is automatically reset to \gui {Not Accepted}.
+ state becomes \uicontrol {Not Accepted}.
\row
\li Accepted/Warnings
\li \inlineimage linguist-check-warning.png
- \li The user has accepted the translation, but the translation does
- not pass all the validation tests. The validation test failures are
- shown in the \gui Warnings view. Click the icon to revoke acceptance of
- the translation. The state is reset to \gui {Validation Failures}, and
- the number of accepted translations in the \gui Items column of the
- \gui Context view is decremented by 1.
+ \li You accepted the translation, but it does not pass all the validation
+ tests. The \uicontrol Warnings view shows where it failed. If you click
+ the icon to revoke acceptance of the translation, the state becomes
+ \uicontrol {Validation Failures}.
\row
\li Not Accepted
\li \inlineimage linguist-check-off.png
\li The string has a translation that passes all the validation tests, but
- the user has not yet accepted the translation. Click the icon or press
- \key{Ctrl+Enter} to accept the translation. The state is reset to
- \gui {Accepted/Correct}, and the number of accepted translations in the
- \gui Items column of the \gui Context view is incremented by 1.
+ you have not yet accepted the translation. Click the icon or press
+ \key{Ctrl+Enter} to accept the translation. The state becomes
+ \uicontrol {Accepted/Correct}.
\row
\li No Translation
\li \inlineimage linguist-check-empty.png
- \li The string does not have a translation. Click the icon to
- accept the empty translation anyway. The state is reset to
- \gui {Accepted/Correct}, and the number of accepted translations in the
- \gui Items column of the \gui Context view is incremented by 1.
+ \li The string does not have a translation. If you click the icon to accept
+ the empty translation, the state becomes \uicontrol {Accepted/Correct}.
\row
\li Validation Failures
\li \inlineimage linguist-danger.png
\li The string has a translation, but the translation does not pass all the
- validation tests. Validation test failures are shown in the
- \gui Warnings view. Click on the icon or press \key{Ctrl+Return} to
- accept the translation even with validation failures. The state is
- reset to \gui {Accepted/Warnings}. We recommended editing the
- translation to fix the causes of the validation failures. The state will
- reset automatically to \gui {Not Accepted}, when all the failures have
- been fixed.
+ validation tests. The \uicontrol Warnings view shows the validation test
+ failures. Click on the icon or press \key{Ctrl+Enter} to
+ accept the translation even with validation failures. The state becomes
+ \uicontrol {Accepted/Warnings}. Usually, you should fix the causes of the
+ validation failures. The state will automatically become
+ \uicontrol {Not Accepted} when you fix all failures.
\row
\li Obsolete
\li \inlineimage linguist-check-obsolete.png
\li The string is obsolete. It is no longer used in the context.
- See the \l{Qt Linguist Manual: Release Manager} {Release Manager}
- for instructions on how to remove obsolete messages from the file.
+ See \l{Using lupdate} for instructions on how to remove obsolete
+ messages from the file.
\endtable
+*/
- \section1 Viewing Strings in Context
+/*!
+ \page linguist-viewing-strings-in-context.html
+
+ \previouspage Selecting strings to translate
+ \nextpage Reusing translations
+
+ \title Viewing strings in context
+
+ If \QL can access the source files containing the translatable strings, the
+ \uicontrol {Sources and Forms} view shows the source context of the current
+ string in the \uicontrol Strings view. It highlights the source code line
+ that contains the current string. If \QL cannot find the source file, it
+ shows the expected absolute file path.
- If the source files containing the translatable strings are
- available to \QL, the \gui {Sources and Forms} view shows the source context
- of the current string in the \gui Strings view. The source
- code line containing the current string should be shown and
- highlighted. If the file containing the source string is not
- found, the expected absolute file path is shown.
+ If the source context shows the wrong source line, the translation file might
+ be out of sync with the source files. For more information about how to sync
+ the files, see \l{Using lupdate}.
- If the source context shows the wrong source line, it probably
- means the translation file is out of sync with the source files.
- For more information about how to re-sync the translation file with the
- source files, see \l{Using lupdate}.
+ \QD stores UI forms in special UI files (.ui). \QL attempts to show the
+ translations in the forms.
+*/
+
+/*!
+ \page linguist-reusing-translations.html
- Forms created by \QD are stored in special UI files. \QL can make use of
- these UI files to show the translations done so far on the form itself if
- the UI files are available to it during the translation process.
+ \previouspage Viewing strings in context
+ \nextpage Validating translations
- \section1 Reusing Translations
+ \title Reusing translations
If the translated text is similar to the source text, select
- \gui Translation > \gui {Copy from source text} (or press \key{Ctrl+B}) to
- copy the source text into the translation area.
+ \uicontrol Translation > \uicontrol {Copy from source text}
+ (or press \key{Ctrl+B}) to copy the source text into the
+ translation area.
- In \QL, \e {phrase books} are used to provide a common set of translations
+ \e {Phrase books} provide a common set of translations
to help ensure consistency. A phrase book is a set of source phrases, target
(translated) phrases, and optional definitions. Typically, one phrase book
- is created per language and family of applications. Phrase books can also be
- used to avoid duplication of effort since the translations for a family of
- applications can be produced once in the phrase book.
-
- If the current string in the \gui Strings view appears in one or more of the
- phrase books that have been loaded, the current string and its phrase book
- translations are listed in the \gui {Phrases and Guesses} view. If the
- current string is the same as, or similar to, another string that has
- already been translated, that other string and its translation
- are also listed in this view.
-
- To copy a translation from the \gui {Phrases and Guesses} view to the
+ is created per language and family of applications. Phrase books avoid
+ duplication of effort since they contain translations for a family of
+ applications.
+
+ The \uicontrol {Phrases and guesses} view displays the current string and its
+ phrase book translations. If the current string is the same as or similar to
+ a translated string, the view also lists the string and its translation.
+
+ To copy a translation from the \uicontrol {Phrases and guesses} view to the
translation area, double-click it or select it and press \key Enter.
- \section2 Batch Translation
+ \section1 Batch translation
\image linguist-batchtranslation.png
- Use the batch translation feature of \QL to automatically translate source
+ Use the batch translation feature to automatically translate source
texts that are also in a phrase book. To configure which phrase books to use
- in what order during the batch translation process, select \gui Edit >
- \gui {Batch Translation}. You can specify whether only entries with no
- current translation should be considered, and whether batch translated
- entries should be marked as \gui Accepted.
+ in what order during the batch translation process, select \uicontrol Edit >
+ \uicontrol {Batch Translation}. You can include only entries with no
+ current translation and mark batch translated entries as \uicontrol Accepted.
- \section2 Creating and Editing Phrase Books
+ \section1 Creating and editing phrase books
Phrase book files are human-readable XML files containing standard phrases
- and their translations. These files are created and updated by \QL and may
- be used by any number of projects and applications.
+ and their translations. \QL creates and update the files. You can use them
+ for any number of projects and applications.
- To create a new phrase book, select \gui Phrases > \gui {New Phrase Book}.
+ To create a new phrase book, select \uicontrol Phrases > \uicontrol {New Phrase Book}.
\image linguist-phrasebookdialog.png
- To open a phrase book, select \gui Phrases > \gui {Open Phrase Book}, and
+ To open a phrase book, select \uicontrol Phrases > \uicontrol {Open Phrase Book}, and
then select the Qt phrase book file (.qph) to open.
- To view and change open phrase books, select \gui Phrases >
- \gui {Edit Phrase Book}.
+ To view and change open phrase books, select \uicontrol Phrases >
+ \uicontrol {Edit Phrase Book}.
- To add a new phrase, select \gui {New Entry} (or press \key {Alt+N}) and
- type in a new source phrase, the translation, and an optinal definition.
+ To add a new phrase, select \uicontrol {New Entry} (or press \key {Alt+N}) and
+ type in a new source phrase, the translation, and an optional definition.
This is useful to distinguish different translations of the same source
phrase.
To add the translation you are working on to the current phrase book, select
- \gui Phrases > \gui {Add to Phrase Book} or press \key{Ctrl+T}. If multiple
+ \uicontrol Phrases > \uicontrol {Add to Phrase Book} or press \key{Ctrl+T}. If multiple
phrase books are loaded, you have to select one.
- If you detect an error in a phrase book entry that is shown in the
- \gui {Phrases and Guesses} view, you can also edit it in place by right
- clicking on the entry, and selecting \gui Edit. After fixing the error
- press \key{Return} to leave the editing mode.
+ If you detect an error in a phrase book entry in the
+ \uicontrol {Phrases and guesses} view, you can edit by right
+ clicking it and selecting \uicontrol Edit. After fixing the
+ error press \key{Enter} to leave the editing mode.
+
+ To delete a phrase, select it in the \uicontrol {Source phrase} list, and then
+ select \uicontrol {Remove Entry}.
+
+ To print an open phrase book, select \uicontrol Phrases >
+ \uicontrol {Print Phrase Book}.
+*/
- To delete a phrase, select it in the \gui {Source phrase} list, and then
- select \gui {Remove Entry}.
+/*!
+ \page linguist-validating-translations.html
- To print an open phrase book, select \gui Phrases >
- \gui {Print Phrase Book}.
+ \previouspage Reusing translations
+ \nextpage Translating multiple languages simultaneously
- \section1 Validating Translations
+ \title Validating translations
\QL provides the following validation tests for translations:
@@ -820,32 +1127,37 @@
translated phrase does not, and vice versa.
\li \e {Phrases validation} detects source phrases that are
also in the phrase book but whose translation differs from that
- given in the phrase book.
+ in the phrase book.
\li \e {Place marker validation} detects whether the same variables
- (like \c %1, \c %2) are used both in the source text and in the
+ (like \c %1, \c %2) appear both in the source text and in the
translation.
\endlist
- To switch validation tests on or off, select \gui Validation or use the
+ To switch validation tests on or off, select \uicontrol Validation or use the
toolbar buttons.
Not accepted strings that fail validation tests are marked with the
- \gui {Validation Failures} icon in the \gui Strings view. Accepted strings
- are marked with \gui {Accepted/Warnings}.
+ \uicontrol {Validation Failures} icon in the \uicontrol Strings view.
+ Accepted strings are marked with \uicontrol {Accepted/Warnings}.
If you switch validation off and then switch it on later,
\QL rechecks all phrases and marks any that fail validation.
- If the translation you enter for the current string fails any of
- the active validation tests, the failures
- are listed in the \gui Warnings view. The first of these failure
- messages is also shown in the status bar at the bottom of the main
- window.
+ The \uicontrol Warnings view lists the strings that fail the active
+ validation tests. The first warning is also shown in the status bar
+ at the bottom of the main window.
\note Only results of \e{active} validation tests are reported.
+*/
+/*!
+ \page linguist-translating-multiple-languages.html
\target multiple languages
- \section1 Translating Multiple Languages Simultaneously
+
+ \previouspage Validating translations
+ \nextpage Developers
+
+ \title Translating multiple languages simultaneously
You can load and edit multiple translation files simultaneously.
The following screen shot displays \e{Polish} and \e{Japanese} translation
@@ -853,231 +1165,119 @@
\image linguist-linguist_2.png
- The translation area has text editing areas for both Polish and Japanese,
- and these are color-coded for easier separation. The \gui Context view and
- the \gui Strings view both have two status columns instead of one,
- color-coded with the same colors. The left-most column
- is related to the top-most language area (Polish above)
- in the translation area, and the right-most column is related to the bottom
- language area.
+ The translation area has color-coded text editing areas for both Polish and
+ Japanese. The \uicontrol Context view and the \uicontrol Strings view have
+ color-coded status columns for each language.
- The \gui Items column in the \gui Context view combines the values
+ The \uicontrol Items column in the \uicontrol Context view combines the values
for both languages. If the number of translatable strings does not match the
- number of accepted strings, either or both languages have strings that need
- to be translated or accepted. The \gui Strings view shows the translation
+ number of accepted strings, either or both languages have strings that you
+ need to translate or accept. The \uicontrol Strings view shows the translation
acceptance state of each string for each language.
*/
/*!
\page linguist-programmers.html
- \title Qt Linguist Manual: Developers
- \ingroup internationalization
-
- \previouspage Qt Linguist Manual: Translators
- \nextpage Qt Linguist Manual: TS File Format
-
- Support for multiple languages is extremely simple in Qt
- applications, and adds little overhead to the developer's workload.
-
- Qt minimizes the performance cost of using translations by
- translating the phrases for each window as they are created. In most
- applications the main window is created just once. Dialogs are often
- created once and then shown and hidden as required. Once the initial
- translation has taken place there is no further runtime overhead for
- the translated windows. Only those windows that are created,
- destroyed and subsequently created will have a translation
- performance cost.
-
- Creating applications that can switch language at runtime is possible
- with Qt, but requires a certain amount of developer intervention and
- will of course incur some runtime performance cost.
+ \title Developers
- \section1 Specifying Translation Sources in Qt Project Files
+ \previouspage Translating multiple languages simultaneously
+ \nextpage TS File Format
- To enable release managers to use lupdate and lrelease, specify
- a \c .pro Qt project file. There must be an entry in the \c TRANSLATIONS
- section of the project file for each language that is additional to
- the native language. A typical entry looks like this:
-
- \snippet arrowpad/arrowpad.pro 1
-
- Using a locale within the translation file name is useful for
- determining which language to load at runtime. For more information, see
- QLocale.
-
- The \c lupdate tool extracts user interface strings from your application.
- It reads the application .pro file to identify which source files
- contain text to be translated. This means your source files must be listed
- in the \c SOURCES or \c HEADERS entry in the .pro file, or in resource
- files listed in the \c RESOURCE entry. If your files are
- not listed, the text in them will not be found.
-
- An example of a complete \c .pro file with four translation source
- files:
-
- \snippet doc_src_linguist-manual.pro 0
-
- \c lupdate expects all source code to be encoded in UTF-8 by default.
- Files that feature a BOM (Byte Order Mark) can also be encoded in
- UTF-16 or UTF-32. Set the qmake variable \c CODECFORSRC to
- \c UTF-16 to parse files without a BOM as UTF-16.
-
- Some editors, such as Visual Studio, however use a different
- encoding by default. One way to avoid encoding issues is to limit any
- source code to ASCII, and use escape sequences for translatable strings
- with other characters, for example:
-
- \snippet doc_src_linguist-manual.cpp 3
-
- \section1 Internationalizing Applications
+ \image front-coding.png
Design your application so that it can be adapted to various languages and
- regions without engineering changes. Qt tries to make internationalization
- as painless as possible for you. All input controls and text drawing methods
- in Qt offer built-in support for all supported languages. But you still need
- to keep the following things in mind when writing source code for your
- application:
+ regions without engineering changes.
\list
+ \li \l{TS file format}
+ \li \l{Text ID based translations}
+ \li \l{CMake Commands in Qt6 LinguistTools}{CMake commands}
+ \li \l{Examples}
+ \endlist
- \li Make your application look for and load the appropriate translation
- file.
-
- \li Mark user-visible text and Ctrl keyboard accelerators as targets for
- translation.
-
- \li Provide context for text to be translated.
-
- \li Disambiguate identical texts.
-
- \li Use numbered arguments (%n) as placeholders for parameters that are
- replaced with text or numbers at run-time.
-
- \li Internationalize numbers, dates, times, and currencies.
+ For more information, see also:
+ \list
+ \li \l {Internationalization with Qt}
+ \li \l {Writing Source Code for Translation}
+ \li \l {Localizing Applications}.
+ \endlist
- \li Mark data text strings outside functions translatable.
+ You can use Qt Creator wizard templates to create Qt widget-based projects
+ with translation support. For more information, see
+ \l {Qt Creator: Creating Projects}.
- \endlist
+ The following video shows how to internationalize and localize a simple
+ example application:
- You can develop applications that use both C++ and QML sources in the same
- application and even have user interface strings in both sources. The tools
- create a single combined translation file and the strings are accessible
- from C++ and QML.
-
- The classes that support internationalizing of Qt applications are described
- in \l{Internationalization with Qt}. The process of making source code
- translatable is described in \l{Writing Source Code for Translation} and in
- \l{Internationalization and Localization with Qt Quick}.
-
- Each piece of text that requires translating requires context to help
- the translator identify where in the program the text appears. In the
- case of multiple identical texts that require different translations,
- the translator also requires some information to disambiguate the
- source texts. Marking text for translation will automatically cause
- the class name to be used as basic context information. In some cases
- the developer may be required to add additional information to help
- the translator.
-
- \section1 Deploying Translations
-
- The \c .qm files required for the application should be placed in a
- location where the loader code using \l QTranslator can locate them.
- Typically, this is done by specifying a path relative to
- \l QCoreApplication::applicationDirPath().
-
- Usually, there are \c .qm files for the application, and, if a version of
- Qt is used that is not installed on the system, Qt's .qm files need to be
- deployed as well.
-
- In Qt 4, there is one big, monolithic \c .qm file per locale. For example,
- the file \c qt_de.qm contains the German translation of all libraries.
-
- In Qt 5, the \c .qm files were split up by module and there is a so-called
- meta catalog file which includes the \c .qm files of all modules. The
- name of the meta catalog file is identical to the name of Qt 4's monolithic
- \c .qm file so that existing loader code works as before provided
- all included \c .qm files are found.
-
- However, it is not necessary to always deploy all of Qt 5's \c .qm files.
- We recommend concatenating the \c .qm files of the modules required to
- one file matching the meta catalog file name using the tool \c lconvert in
- the deploy step. For example, to create a German translation file for an
- application using the modules \l{Qt Core}, \l {Qt GUI}, and \l {Qt Quick},
- run:
+ \youtube xNIz78IPBu0
+*/
- \code
- lconvert -o installation_folder/qt_de.qm qtbase_de.qm qtdeclarative_de.qm
- \endcode
+/*!
+ \page linguist-programmers-examples.html
+ \title Examples
- \section1 Tutorials
+ \nextpage Developers
- The following tutorials illustrate how to prepare Qt applications for
+ The following examples illustrate how to prepare Qt applications for
translation:
\list
\li \l{hellotr}{Hello tr()} is a C++ application that demonstrates the
- creation of a \l QTranslator object. It also shows the simplest use of
- the \c tr() function to mark user-visible source text for
- translation.
+ creation of a \l QTranslator object. It also shows the simplest use of
+ the \c tr() function to mark user-visible source text for
+ translation.
\li \l{arrowpad}{Arrow Pad} is a C++ application that demonstrates how to
- make the application load the
- translation file applicable to the current locale. It also shows the
- use of the two-argument form of \c tr() which provides additional
- information to the translator.
+ make the application load translations depending on the current locale.
+ It also shows the use of the two-argument form of \c tr() which provides
+ additional information to the translator.
\li \l{trollprint}{Troll Print} is a C++ application that demonstrates how
- identical source texts can be distinguished even when they occur in
- the same context. This tutorial also discusses how the translation
- tools help minimize the translator's work when an application is
- upgraded.
-
- \li \l{QML Examples - Internationalization}{Internationalization} is a
- Qt Quick application that demonstrates how to internationalize Qt Quick
- applications.
+ to distinguish identical source text in the same context. It also shows
+ how minimize the translator's work when an application is upgraded.
+
+ \li \l{Qt Quick I18N} demonstrates how to internationalize Qt Quick
+ applications.
\endlist
*/
/*!
\page linguist-ts-file-format.html
- \title Qt Linguist Manual: TS File Format
- \ingroup internationalization
+ \title TS file format
+
+ \previouspage Developers
- \previouspage Qt Linguist Manual: Developers
- \nextpage Qt Linguist Manual: Text ID Based Translations
+ \brief TS file format.
The TS file format used by \QL is described by the
- \l{http://www.w3.org/TR/1998/REC-xml-19980210}{DTD} presented below,
+ \l{http://www.w3.org/2001/XMLSchema}{XSD} presented below,
which we include for your convenience. Be aware that the format
may change in future Qt releases.
- \quotefile ../../../shared/ts.dtd
+ \quotefile ../../../shared/ts.xsd
*/
/*!
\page linguist-id-based-i18n.html
- \title Qt Linguist Manual: Text ID Based Translations
+ \title Text ID based translations
\ingroup internationalization
- \previouspage Qt Linguist Manual: TS File Format
\brief Text ID based internationalization provides support for large scale
projects with many target locales and many texts to translate.
- The text ID translation mechanism is an "industrial strength" system for
- internationalization and localization. Each text in the application is assigned
- a unique identifier (text ID) and these identifiers are used directly in the
- source code in place of the plain texts. This requires a little more work for
- the user interface developers but makes it much easier to manage large numbers
- of translated texts.
+ The text ID translation mechanism is an \e {industrial strength} system for
+ internationalization and localization. Each text in the application has a
+ unique identifier (text ID) that you use in the source code instead of text.
+ This makes it much easier to manage large numbers of translated texts.
\note You must use only plain-text-based or only text-ID-based functions in
one application. If you mix them, you will end up with an incomplete set of
texts to be translated.
- \section1 Internationalizing With Text IDs
+ \section1 Internationalizing with text IDs
When using text IDs instead of plain text, the general method of
internationalizing an application is the same but the details are a bit
@@ -1086,20 +1286,21 @@
\list 1
\li The functions and macros for the text-ID-based translation system are
- different to the plain-text system. You use the \c qsTrId() function instead
- of qsTr(), and the \c QT_TRID_NOOP() macro instead of QT_TR_NOOP().
+ different from the plain-text system. You use the \c qsTrId() function instead
+ of qsTr(), the \c QT_TRID_NOOP() macro instead of QT_TR_NOOP(),
+ and \c QT_TRID_N_NOOP() macro instead of QT_TR_N_NOOP()).
\li Use text IDs as user interface strings rather than plain text
strings. For example, \c {qsTrId("id-back-not-front")}
- \li You cannot specify a context parameter with a text ID. If there are
- identically spelled words with different meanings, these need separate
- text IDs. For example, \c {qsTrId("id-back-backstep")} will
- differentiate the back-step "Back" from the back-of-the-object "Back".
+ \li You cannot specify a context parameter with a text ID, and therefore
+ identically spelled words with different meanings need separate
+ text IDs. For example, \c {qsTrId("id-back-backstep")} differentiates
+ the back-step \e {Back} from the \c id-back-not-front \e {Back}.
- \li The "Engineering English" text that you see in the user interface for
+ \li The \e {engineering English} text that you see in the user interface for
development builds is indicated with a \c {//%} comment. If you do not
- include this, the text ID will be shown in the user interface. This is
+ include this, the text ID is shown in the user interface. This is
especially important when you have texts with parameters. The \c {//%}
comment needs to include the parameters indicators in the string. For
example, \c {//% "Number of files: %1"}
@@ -1143,21 +1344,15 @@
\endcode
\endtable
- \section1 Localizing With Text IDs
+ \section1 Localizing with text IDs
Localizing with text IDs follows much the same process as for plain text.
- The \c lupdate tool is used the same way and translations are made into
- the .ts files:
-
- \code
- lupdate <myapp>.pro
- \endcode
-
- Note that the source values in the translation files will be text IDs rather
- than plain text. This means you need very descriptive text IDs, or good
- additional comments, or both to ensure that the translator makes a correct
- translation.
+ You use the \l{Using lupdate}{lupdate} tool to generate the TS files where
+ you add the translations. The source values in the translation files will be
+ text IDs rather than plain text, and therefore you need either descriptive
+ text IDs or good additional comments, or both to ensure that the translations
+ are accurate.
The example text-ID-based user interface text from above results in the following
content in the .ts file:
@@ -1171,39 +1366,41 @@
</message>
\endcode
- When using \c lrelease, you need to specify that the keys for translated
- texts are based on text IDs, rather than plain texts. If strings in the code
- are specified with \c qsTr() there is no "id" attribute set so they are
- ignored by \c lrelease.
-
- This command produces all the compiled translation .qm files for your
- application:
-
- \code
- lrelease -idbased <myapp>.pro
- \endcode
+ When using \l{Using lrelease}{lrelease}, you need to specify that the keys
+ for translated texts are based on text IDs, rather than plain text. If you
+ use \c qsTr() to mark the strings as translatable in the code, the \c id
+ attribute is not set and \c lrelease ignores them.
However, if there is no translation available for a given text (which is
generally the case until late in development), the text ID will be shown in
the user interface rather than a proper text. In order to make the application
- more usable for testing, you can make \c lrelease use the "Engineering English"
+ more usable for testing, you can make \c lrelease use the \e {Engineering English}
source text (from the \c {//%} comments) as the translated text and mark it with
- some indicator so you can see texts that are not yet translated.
+ some indicator, such as an exclamation mark (!), so you can see texts that
+ are not yet translated.
- For example, this command builds the .qm files and puts a "!" in front of the
- untranslated texts:
-
- \code
- lrelease -idbased -markuntranslated ! <myapp>.pro
- \endcode
+ \section1 CMake configuration
+ When building with CMake, use the prefix \c qml_ for .ts files.
+ For example, \c qml_en.ts. In the CMakeLists.txt file, add the
+ \l qt_add_translations function, where you list the *.ts files
+ as values of \c TS_FILES, set the value of RESOURCE_PREFIX to the
+ URI of the main.qml file for the project followed by /i18n, and
+ set the value of \c LRELEASE_OPTIONS to \c -idbased:
+ \badcode
+ qt_add_translations(${CMAKE_PROJECT_NAME}
+ TS_FILES i18n/qml_de_DE.ts i18n/qml_en_US.ts
+ RESOURCE_PREFIX Main/i18n
+ LRELEASE_OPTIONS -idbased
+ )
+ \endcode
- \section1 Advanced Usage
+ \section1 Advanced use with qmake
For projects that target a large number of locales, you can remove the
TRANSLATIONS info from the .pro file and, instead, manage the translations
- with a separate script. The script can call lrelease and lupdate for each of
+ with a separate script. The script can call \c lrelease and \c lupdate for each of
the desired targets.
The updates could be scripted something like this:
diff --git a/src/linguist/linguist/errorsview.cpp b/src/linguist/linguist/errorsview.cpp
index 5d56fd5ac..8af7fa737 100644
--- a/src/linguist/linguist/errorsview.cpp
+++ b/src/linguist/linguist/errorsview.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "errorsview.h"
diff --git a/src/linguist/linguist/errorsview.h b/src/linguist/linguist/errorsview.h
index 1134e0231..8d44f049b 100644
--- a/src/linguist/linguist/errorsview.h
+++ b/src/linguist/linguist/errorsview.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ERRORSVIEW_H
#define ERRORSVIEW_H
diff --git a/src/linguist/linguist/finddialog.cpp b/src/linguist/linguist/finddialog.cpp
index e2ca9f38e..f86954948 100644
--- a/src/linguist/linguist/finddialog.cpp
+++ b/src/linguist/linguist/finddialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
/* TRANSLATOR FindDialog
@@ -41,14 +16,20 @@ FindDialog::FindDialog(QWidget *parent)
{
setupUi(this);
+ statusFilter->addItem(tr("All"), -1);
+ statusFilter->addItem(tr("Finished"), TranslatorMessage::Finished);
+ statusFilter->addItem(tr("Unfinished"), TranslatorMessage::Unfinished);
+
findNxt->setEnabled(false);
connect(findNxt, &QAbstractButton::clicked,
this, &FindDialog::emitFindNext);
- connect(useRegExp, &QCheckBox::stateChanged,
+ connect(useRegExp, &QCheckBox::checkStateChanged,
this, &FindDialog::verify);
connect(led, &QLineEdit::textChanged,
this, &FindDialog::verify);
+ connect(statusFilter, &QComboBox::currentIndexChanged,
+ this, &FindDialog::statusFilterChanged);
led->setFocus();
}
@@ -68,6 +49,21 @@ void FindDialog::verify()
findNxt->setEnabled(!led->text().isEmpty() && validRegExp);
}
+void FindDialog::statusFilterChanged()
+{
+ int newStateFilter = statusFilter->currentData().toInt();
+ if (newStateFilter != -1) {
+ if (m_lastStateFilter == -1)
+ m_storedSkipObsolete = skipObsolete->isChecked();
+ skipObsolete->setEnabled(false);
+ skipObsolete->setChecked(true);
+ } else {
+ skipObsolete->setEnabled(true);
+ skipObsolete->setChecked(m_storedSkipObsolete);
+ }
+ m_lastStateFilter = newStateFilter;
+}
+
void FindDialog::emitFindNext()
{
DataModel::FindLocation where;
@@ -79,8 +75,12 @@ void FindDialog::emitFindNext()
(comments->isChecked() ? DataModel::Comments : 0));
else
where = DataModel::Translations;
- emit findNext(led->text(), where, matchCase->isChecked(), ignoreAccelerators->isChecked(),
- skipObsolete->isChecked(), useRegExp->isChecked());
+
+ FindOptions options((matchCase->isChecked() ? FindOption::MatchCase : 0) |
+ (ignoreAccelerators->isChecked() ? FindDialog::IgnoreAccelerators : 0) |
+ (skipObsolete->isChecked() ? FindDialog::SkipObsolete : 0) |
+ (useRegExp->isChecked() ? FindDialog::UseRegExp : 0));
+ emit findNext(led->text(), where, options, statusFilter->currentData().toInt());
led->selectAll();
}
diff --git a/src/linguist/linguist/finddialog.h b/src/linguist/linguist/finddialog.h
index 529b343fd..d42a4596e 100644
--- a/src/linguist/linguist/finddialog.h
+++ b/src/linguist/linguist/finddialog.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef FINDDIALOG_H
#define FINDDIALOG_H
@@ -41,12 +16,19 @@ class FindDialog : public QDialog, public Ui::FindDialog
{
Q_OBJECT
public:
+ enum FindOption {
+ MatchCase = 0x1,
+ IgnoreAccelerators = 0x2,
+ SkipObsolete = 0x4,
+ UseRegExp = 0x8
+ };
+ Q_DECLARE_FLAGS(FindOptions, FindOption)
FindDialog(QWidget *parent = 0);
QRegularExpression &getRegExp() { return m_regExp; }
signals:
void findNext(const QString& text, DataModel::FindLocation where,
- bool matchCase, bool ignoreAccelerators, bool skipObsolete, bool useRegExp);
+ FindDialog::FindOptions options, int statusFilter);
public slots:
void find();
@@ -54,10 +36,13 @@ public slots:
private slots:
void emitFindNext();
void verify();
+ void statusFilterChanged();
private:
QRegularExpression m_regExp;
bool m_redText = false;
+ int m_lastStateFilter = -1;
+ bool m_storedSkipObsolete = false;
};
QT_END_NAMESPACE
diff --git a/src/linguist/linguist/finddialog.ui b/src/linguist/linguist/finddialog.ui
index 20dceb7e1..7b3c0898f 100644
--- a/src/linguist/linguist/finddialog.ui
+++ b/src/linguist/linguist/finddialog.ui
@@ -1,40 +1,16 @@
-<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+</comment>
<class>FindDialog</class>
<widget class="QDialog" name="FindDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
- <width>414</width>
- <height>175</height>
+ <width>454</width>
+ <height>263</height>
</rect>
</property>
<property name="sizePolicy">
@@ -101,13 +77,13 @@
</property>
</widget>
</item>
- <item row="0" column="1">
- <widget class="QCheckBox" name="matchCase">
+ <item row="3" column="1">
+ <widget class="QCheckBox" name="skipObsolete">
<property name="whatsThis">
- <string>Texts such as 'TeX' and 'tex' are considered as different when checked.</string>
+ <string>Obsoleted messages are skipped when checked.</string>
</property>
<property name="text">
- <string>&amp;Match case</string>
+ <string>Skip &amp;obsolete</string>
</property>
</widget>
</item>
@@ -124,13 +100,13 @@
</property>
</widget>
</item>
- <item row="3" column="1">
- <widget class="QCheckBox" name="skipObsolete">
- <property name="whatsThis">
- <string>Obsoleted messages are skipped when checked.</string>
- </property>
+ <item row="5" column="0">
+ <widget class="QLabel" name="labelState">
<property name="text">
- <string>Skip &amp;obsolete</string>
+ <string>T&amp;ranslation status:</string>
+ </property>
+ <property name="buddy">
+ <cstring>statusFilter</cstring>
</property>
</widget>
</item>
@@ -147,6 +123,23 @@
</property>
</widget>
</item>
+ <item row="0" column="1">
+ <widget class="QCheckBox" name="matchCase">
+ <property name="whatsThis">
+ <string>Texts such as 'TeX' and 'tex' are considered as different when checked.</string>
+ </property>
+ <property name="text">
+ <string>&amp;Match case</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="0">
+ <widget class="QComboBox" name="statusFilter">
+ <property name="toolTip">
+ <string>Lets you filter the search target by translation status</string>
+ </property>
+ </widget>
+ </item>
<item row="2" column="1">
<widget class="QCheckBox" name="ignoreAccelerators">
<property name="text">
@@ -170,6 +163,19 @@
</property>
</widget>
</item>
+ <item row="7" column="0">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
</layout>
</widget>
</item>
diff --git a/src/linguist/linguist/formpreviewview.cpp b/src/linguist/linguist/formpreviewview.cpp
index 8aed545da..49e58b813 100644
--- a/src/linguist/linguist/formpreviewview.cpp
+++ b/src/linguist/linguist/formpreviewview.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "formpreviewview.h"
#include "messagemodel.h"
@@ -207,7 +182,7 @@ static void buildTargets(QObject *o, TargetsHash *targets)
static void destroyTargets(TargetsHash *targets)
{
- for (const auto &targetList : qAsConst(*targets))
+ for (const auto &targetList : std::as_const(*targets))
for (const TranslatableEntry &target : targetList)
if (target.type == TranslatableProperty)
delete target.prop.name;
@@ -377,8 +352,10 @@ static void highlightAction(QAction *a, bool on)
a->setProperty(FONT_BACKUP_PROP, QVariant());
}
}
- for (QWidget *w : a->associatedWidgets())
- highlightWidget(w, on);
+ for (QObject *o : a->associatedObjects()) {
+ if (QWidget *w = qobject_cast<QWidget *>(o))
+ highlightWidget(w, on);
+ }
}
static void highlightWidget(QWidget *w, bool on)
diff --git a/src/linguist/linguist/formpreviewview.h b/src/linguist/linguist/formpreviewview.h
index ec6245883..aaad46111 100644
--- a/src/linguist/linguist/formpreviewview.h
+++ b/src/linguist/linguist/formpreviewview.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef FORMPREVIEWVIEW_H
#define FORMPREVIEWVIEW_H
diff --git a/src/linguist/linguist/globals.cpp b/src/linguist/linguist/globals.cpp
index 93e70e778..3893dfe29 100644
--- a/src/linguist/linguist/globals.cpp
+++ b/src/linguist/linguist/globals.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "globals.h"
diff --git a/src/linguist/linguist/globals.h b/src/linguist/linguist/globals.h
index 6d3e5ca0a..094be2766 100644
--- a/src/linguist/linguist/globals.h
+++ b/src/linguist/linguist/globals.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef GLOBALS_H
#define GLOBALS_H
diff --git a/src/linguist/linguist/images/icons/linguist-128-8.png b/src/linguist/linguist/images/icons/linguist-128-8.png
deleted file mode 100644
index 6678dd2ae..000000000
--- a/src/linguist/linguist/images/icons/linguist-128-8.png
+++ /dev/null
Binary files differ
diff --git a/src/linguist/linguist/images/icons/linguist-16-32.png b/src/linguist/linguist/images/icons/linguist-16-32.png
deleted file mode 100644
index bc5d8acb6..000000000
--- a/src/linguist/linguist/images/icons/linguist-16-32.png
+++ /dev/null
Binary files differ
diff --git a/src/linguist/linguist/images/icons/linguist-16-8.png b/src/linguist/linguist/images/icons/linguist-16-8.png
deleted file mode 100644
index 4f4e83955..000000000
--- a/src/linguist/linguist/images/icons/linguist-16-8.png
+++ /dev/null
Binary files differ
diff --git a/src/linguist/linguist/images/icons/linguist-32-32.png b/src/linguist/linguist/images/icons/linguist-32-32.png
deleted file mode 100644
index daee42dbc..000000000
--- a/src/linguist/linguist/images/icons/linguist-32-32.png
+++ /dev/null
Binary files differ
diff --git a/src/linguist/linguist/images/icons/linguist-32-8.png b/src/linguist/linguist/images/icons/linguist-32-8.png
deleted file mode 100644
index 3db4bc5c0..000000000
--- a/src/linguist/linguist/images/icons/linguist-32-8.png
+++ /dev/null
Binary files differ
diff --git a/src/linguist/linguist/images/icons/linguist-48-32.png b/src/linguist/linguist/images/icons/linguist-48-32.png
deleted file mode 100644
index 1ab7c8a63..000000000
--- a/src/linguist/linguist/images/icons/linguist-48-32.png
+++ /dev/null
Binary files differ
diff --git a/src/linguist/linguist/images/icons/linguist-48-8.png b/src/linguist/linguist/images/icons/linguist-48-8.png
deleted file mode 100644
index 9a13c201d..000000000
--- a/src/linguist/linguist/images/icons/linguist-48-8.png
+++ /dev/null
Binary files differ
diff --git a/src/linguist/linguist/images/icons/linguist-64-32.png b/src/linguist/linguist/images/icons/linguist-64-32.png
deleted file mode 100644
index 6ff551b3c..000000000
--- a/src/linguist/linguist/images/icons/linguist-64-32.png
+++ /dev/null
Binary files differ
diff --git a/src/linguist/linguist/images/icons/linguist-64-8.png b/src/linguist/linguist/images/icons/linguist-64-8.png
deleted file mode 100644
index 05c833dc9..000000000
--- a/src/linguist/linguist/images/icons/linguist-64-8.png
+++ /dev/null
Binary files differ
diff --git a/src/linguist/linguist/images/mac/fileprint.png b/src/linguist/linguist/images/mac/fileprint.png
deleted file mode 100644
index 808c97ea3..000000000
--- a/src/linguist/linguist/images/mac/fileprint.png
+++ /dev/null
Binary files differ
diff --git a/src/linguist/linguist/linguist.pro b/src/linguist/linguist/linguist.pro
deleted file mode 100644
index d083896c3..000000000
--- a/src/linguist/linguist/linguist.pro
+++ /dev/null
@@ -1,93 +0,0 @@
-QT += core-private gui-private widgets uitools-private printsupport
-
-DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII
-
-include(../shared/formats.pri)
-
-QMAKE_DOCS = $$PWD/doc/qtlinguist.qdocconf
-
-DEFINES += QFORMINTERNAL_NAMESPACE
-
-SOURCES += \
- batchtranslationdialog.cpp \
- errorsview.cpp \
- finddialog.cpp \
- formpreviewview.cpp \
- globals.cpp \
- main.cpp \
- mainwindow.cpp \
- messageeditor.cpp \
- messageeditorwidgets.cpp \
- messagehighlighter.cpp \
- messagemodel.cpp \
- phrasebookbox.cpp \
- phrase.cpp \
- phrasemodel.cpp \
- phraseview.cpp \
- printout.cpp \
- recentfiles.cpp \
- sourcecodeview.cpp \
- statistics.cpp \
- translatedialog.cpp \
- translationsettingsdialog.cpp \
- ../shared/simtexth.cpp
-
-HEADERS += \
- batchtranslationdialog.h \
- errorsview.h \
- finddialog.h \
- formpreviewview.h \
- globals.h \
- mainwindow.h \
- messageeditor.h \
- messageeditorwidgets.h \
- messagehighlighter.h \
- messagemodel.h \
- phrasebookbox.h \
- phrase.h \
- phrasemodel.h \
- phraseview.h \
- printout.h \
- recentfiles.h \
- sourcecodeview.h \
- statistics.h \
- translatedialog.h \
- translationsettingsdialog.h \
- ../shared/simtexth.h
-
-contains(QT_PRODUCT, OpenSource.*):DEFINES *= QT_OPENSOURCE
-DEFINES += QT_KEYWORDS
-TARGET = linguist
-
-QMAKE_TARGET_DESCRIPTION = Qt Linguist
-
-win32 {
- RC_ICONS = linguist.ico
- VERSION = $${QT_VERSION}.0
-} else {
- VERSION = $${QT_VERSION}
-}
-mac {
- static:CONFIG -= global_init_link_order
- ICON = linguist.icns
- TARGET = Linguist
- QMAKE_INFO_PLIST=Info_mac.plist
-}
-PROJECTNAME = Qt \
- Linguist
-
-phrasebooks.path = $$[QT_INSTALL_DATA]/phrasebooks
-# ## will this work on windows?
-phrasebooks.files = $$PWD/../phrasebooks/*
-INSTALLS += phrasebooks
-
-FORMS += statistics.ui \
- phrasebookbox.ui \
- batchtranslation.ui \
- translatedialog.ui \
- mainwindow.ui \
- translationsettings.ui \
- finddialog.ui
-RESOURCES += linguist.qrc
-
-load(qt_app)
diff --git a/src/linguist/linguist/linguist.qrc b/src/linguist/linguist/linguist.qrc
deleted file mode 100644
index d3b6dcfc0..000000000
--- a/src/linguist/linguist/linguist.qrc
+++ /dev/null
@@ -1,61 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>images/appicon.png</file>
- <file>images/mac/accelerator.png</file>
- <file>images/mac/book.png</file>
- <file>images/mac/done.png</file>
- <file>images/mac/doneandnext.png</file>
- <file>images/mac/editcopy.png</file>
- <file>images/mac/editcut.png</file>
- <file>images/mac/editpaste.png</file>
- <file>images/mac/fileopen.png</file>
- <file>images/mac/filesave.png</file>
- <file>images/mac/next.png</file>
- <file>images/mac/nextunfinished.png</file>
- <file>images/mac/phrase.png</file>
- <file>images/mac/prev.png</file>
- <file>images/mac/prevunfinished.png</file>
- <file>images/mac/print.png</file>
- <file>images/mac/surroundingwhitespace.png</file>
- <file>images/mac/punctuation.png</file>
- <file>images/mac/redo.png</file>
- <file>images/mac/searchfind.png</file>
- <file>images/mac/undo.png</file>
- <file>images/mac/validateplacemarkers.png</file>
- <file>images/mac/whatsthis.png</file>
- <file>images/s_check_danger.png</file>
- <file>images/s_check_empty.png</file>
- <file>images/s_check_obsolete.png</file>
- <file>images/s_check_off.png</file>
- <file>images/s_check_on.png</file>
- <file>images/s_check_warning.png</file>
- <file>images/up.png</file>
- <file>images/down.png</file>
- <file>images/editdelete.png</file>
- <file>images/minus.png</file>
- <file>images/plus.png</file>
- <file>images/win/accelerator.png</file>
- <file>images/win/book.png</file>
- <file>images/win/done.png</file>
- <file>images/win/doneandnext.png</file>
- <file>images/win/editcopy.png</file>
- <file>images/win/editcut.png</file>
- <file>images/win/editpaste.png</file>
- <file>images/win/fileopen.png</file>
- <file>images/win/filesave.png</file>
- <file>images/win/next.png</file>
- <file>images/win/nextunfinished.png</file>
- <file>images/win/phrase.png</file>
- <file>images/win/prev.png</file>
- <file>images/win/prevunfinished.png</file>
- <file>images/win/print.png</file>
- <file>images/win/surroundingwhitespace.png</file>
- <file>images/win/punctuation.png</file>
- <file>images/win/redo.png</file>
- <file>images/win/searchfind.png</file>
- <file>images/win/undo.png</file>
- <file>images/win/validateplacemarkers.png</file>
- <file>images/win/whatsthis.png</file>
- <file>images/icons/linguist-128-32.png</file>
- </qresource>
-</RCC>
diff --git a/src/linguist/linguist/main.cpp b/src/linguist/linguist/main.cpp
index 311344385..38cb55671 100644
--- a/src/linguist/linguist/main.cpp
+++ b/src/linguist/linguist/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "mainwindow.h"
#include "globals.h"
@@ -87,8 +62,6 @@ private:
int main(int argc, char **argv)
{
- Q_INIT_RESOURCE(linguist);
-
QApplication app(argc, argv);
QApplication::setOverrideCursor(Qt::WaitCursor);
@@ -101,10 +74,10 @@ int main(int argc, char **argv)
QString resourceDir = QLibraryInfo::path(QLibraryInfo::TranslationsPath);
QStringList args = app.arguments();
- for (int i = 1; i < args.count(); ++i) {
+ for (int i = 1; i < args.size(); ++i) {
QString argument = args.at(i);
if (argument == QLatin1String("-resourcedir")) {
- if (i + 1 < args.count()) {
+ if (i + 1 < args.size()) {
resourceDir = QFile::decodeName(args.at(++i).toLocal8Bit());
} else {
// issue a warning
diff --git a/src/linguist/linguist/mainwindow.cpp b/src/linguist/linguist/mainwindow.cpp
index 9fc83e482..ce3c80f9f 100644
--- a/src/linguist/linguist/mainwindow.cpp
+++ b/src/linguist/linguist/mainwindow.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
/* TRANSLATOR MainWindow
@@ -73,6 +48,7 @@
#include <QProcess>
#include <QRegularExpression>
#include <QScreen>
+#include <QShortcut>
#include <QSettings>
#include <QSortFilterProxyModel>
#include <QStackedWidget>
@@ -130,7 +106,7 @@ static Ending ending(QString str, QLocale::Language lang)
if (str.isEmpty())
return End_None;
- switch (str.at(str.length() - 1).unicode()) {
+ switch (str.at(str.size() - 1).unicode()) {
case 0x002e: // full stop
if (str.endsWith(QLatin1String("...")))
return End_Ellipsis;
@@ -274,10 +250,6 @@ MainWindow::MainWindow()
: QMainWindow(0, Qt::Window),
m_assistantProcess(0),
m_printer(0),
- m_findMatchCase(Qt::CaseInsensitive),
- m_findIgnoreAccelerators(true),
- m_findSkipObsolete(false),
- m_findUseRegExp(false),
m_findWhere(DataModel::NoLocation),
m_translationSettingsDialog(0),
m_settingCurrentMessage(false),
@@ -288,7 +260,7 @@ MainWindow::MainWindow()
setUnifiedTitleAndToolBarOnMac(true);
m_ui.setupUi(this);
-#if !defined(Q_OS_OSX) && !defined(Q_OS_WIN)
+#if !defined(Q_OS_MACOS) && !defined(Q_OS_WIN)
setWindowIcon(QPixmap(QLatin1String(":/images/appicon.png") ));
#endif
@@ -572,6 +544,7 @@ void MainWindow::modelCountChanged()
m_ui.actionFind->setEnabled(m_dataModel->contextCount() > 0);
m_ui.actionFindNext->setEnabled(false);
+ m_ui.actionFindPrev->setEnabled(false);
m_formPreviewView->setSourceContext(-1, 0);
}
@@ -626,9 +599,7 @@ bool MainWindow::openFiles(const QStringList &names, bool globalReadWrite)
tr("The file '%1' does not seem to be related to the currently open file(s) '%2'.\n\n"
"Close the open file(s) first?")
.arg(DataModel::prettifyPlainFileName(name), m_dataModel->condensedSrcFileNames(true)),
- QMessageBox::Yes | QMessageBox::Default,
- QMessageBox::No,
- QMessageBox::Cancel | QMessageBox::Escape))
+ QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, QMessageBox::Yes))
{
case QMessageBox::Cancel:
delete dm;
@@ -636,7 +607,7 @@ bool MainWindow::openFiles(const QStringList &names, bool globalReadWrite)
case QMessageBox::Yes:
closeOld = true;
break;
- case QMessageBox::No:
+ default:
break;
}
}
@@ -649,19 +620,17 @@ bool MainWindow::openFiles(const QStringList &names, bool globalReadWrite)
" which is being loaded as well.\n\n"
"Skip loading the first named file?")
.arg(DataModel::prettifyPlainFileName(name), opened.first().dataModel->srcFileName(true)),
- QMessageBox::Yes | QMessageBox::Default,
- QMessageBox::No,
- QMessageBox::Cancel | QMessageBox::Escape))
+ QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, QMessageBox::Yes))
{
case QMessageBox::Cancel:
delete dm;
- for (const OpenedFile &op : qAsConst(opened))
+ for (const OpenedFile &op : std::as_const(opened))
delete op.dataModel;
return false;
case QMessageBox::Yes:
delete dm;
continue;
- case QMessageBox::No:
+ default:
break;
}
}
@@ -675,13 +644,13 @@ bool MainWindow::openFiles(const QStringList &names, bool globalReadWrite)
waitCursor = false;
}
if (!closeAll()) {
- for (const OpenedFile &op : qAsConst(opened))
+ for (const OpenedFile &op : std::as_const(opened))
delete op.dataModel;
return false;
}
}
- for (const OpenedFile &op : qAsConst(opened)) {
+ for (const OpenedFile &op : std::as_const(opened)) {
if (op.langGuessed) {
if (waitCursor) {
QApplication::restoreOverrideCursor();
@@ -699,7 +668,7 @@ bool MainWindow::openFiles(const QStringList &names, bool globalReadWrite)
m_contextView->setUpdatesEnabled(false);
m_messageView->setUpdatesEnabled(false);
int totalCount = 0;
- for (const OpenedFile &op : qAsConst(opened)) {
+ for (const OpenedFile &op : std::as_const(opened)) {
m_phraseDict.append(QHash<QString, QList<Phrase *> >());
m_dataModel->append(op.dataModel, op.readWrite);
if (op.readWrite)
@@ -763,7 +732,7 @@ static QString fileFilters(bool allFirst)
static const QString pattern(QLatin1String("%1 (*.%2);;"));
QStringList allExtensions;
QString filter;
- for (const Translator::FileFormat &format : qAsConst(Translator::registeredFileFormats())) {
+ for (const Translator::FileFormat &format : std::as_const(Translator::registeredFileFormats())) {
if (format.fileType == Translator::FileFormat::TranslationSource && format.priority >= 0) {
filter.append(pattern.arg(format.description(), format.extension));
allExtensions.append(QLatin1String("*.") + format.extension);
@@ -982,23 +951,26 @@ bool MainWindow::searchItem(DataModel::FindLocation where, const QString &search
QString text = searchWhat;
- if (m_findIgnoreAccelerators)
+ if (m_findOptions.testFlag(FindDialog::IgnoreAccelerators))
// FIXME: This removes too much. The proper solution might be too slow, though.
text.remove(QLatin1Char('&'));
- if (m_findUseRegExp)
+ if (m_findOptions.testFlag(FindDialog::UseRegExp))
return m_findDialog->getRegExp().match(text).hasMatch();
else
- return text.indexOf(m_findText, 0, m_findMatchCase) >= 0;
+ return text.indexOf(m_findText, 0, m_findOptions.testFlag(FindDialog::MatchCase)
+ ? Qt::CaseSensitive : Qt::CaseInsensitive) >= 0;
}
-void MainWindow::findAgain()
+void MainWindow::findAgain(FindDirection direction)
{
if (m_dataModel->contextCount() == 0)
return;
const QModelIndex &startIndex = m_messageView->currentIndex();
- QModelIndex index = nextMessage(startIndex);
+ QModelIndex index = (direction == FindNext
+ ? nextMessage(startIndex)
+ : prevMessage(startIndex));
while (index.isValid()) {
QModelIndex realIndex = m_sortedMessagesModel->mapToSource(index);
@@ -1006,8 +978,13 @@ void MainWindow::findAgain()
bool hadMessage = false;
for (int i = 0; i < m_dataModel->modelCount(); ++i) {
if (MessageItem *m = m_dataModel->messageItem(dataIndex, i)) {
- if (m_findSkipObsolete && m->isObsolete())
+ if (m_findStatusFilter != -1 && m_findStatusFilter != m->type())
continue;
+
+ if (m_findOptions.testFlag(FindDialog::SkipObsolete)
+ && m->isObsolete())
+ continue;
+
bool found = true;
do {
if (!hadMessage) {
@@ -1053,7 +1030,9 @@ void MainWindow::findAgain()
if (index == startIndex)
break;
- index = nextMessage(index);
+ index = (direction == FindNext
+ ? nextMessage(index)
+ : prevMessage(index));
}
qApp->beep();
@@ -1184,7 +1163,7 @@ void MainWindow::newPhraseBook()
bool MainWindow::isPhraseBookOpen(const QString &name)
{
- for (const PhraseBook *pb : qAsConst(m_phraseBooks)) {
+ for (const PhraseBook *pb : std::as_const(m_phraseBooks)) {
if (pb->fileName() == name)
return true;
}
@@ -1201,7 +1180,7 @@ void MainWindow::openPhraseBook()
m_phraseBookDir = QFileInfo(name).absolutePath();
if (!isPhraseBookOpen(name)) {
if (PhraseBook *phraseBook = doOpenPhraseBook(name)) {
- int n = phraseBook->phrases().count();
+ int n = phraseBook->phrases().size();
statusBar()->showMessage(tr("%n phrase(s) loaded.", 0, n), MessageMS);
}
}
@@ -1281,11 +1260,11 @@ void MainWindow::addToPhraseBook()
{
QStringList phraseBookList;
QHash<QString, PhraseBook *> phraseBookHash;
- for (PhraseBook *pb : qAsConst(m_phraseBooks)) {
+ for (PhraseBook *pb : std::as_const(m_phraseBooks)) {
if (pb->language() != QLocale::C && m_dataModel->language(m_currentIndex.model()) != QLocale::C) {
if (pb->language() != m_dataModel->language(m_currentIndex.model()))
continue;
- if (pb->country() == m_dataModel->model(m_currentIndex.model())->country())
+ if (pb->territory() == m_dataModel->model(m_currentIndex.model())->territory())
phraseBookList.prepend(pb->friendlyPhraseBookName());
else
phraseBookList.append(pb->friendlyPhraseBookName());
@@ -1310,9 +1289,9 @@ void MainWindow::addToPhraseBook()
return;
} else {
bool okPressed = false;
- QString selectedPhraseBook = QInputDialog::getItem(this, tr("Add to phrase book"),
- tr("Select phrase book to add to"),
- phraseBookList, 0, false, &okPressed);
+ selectedPhraseBook = QInputDialog::getItem(this, tr("Add to phrase book"),
+ tr("Select phrase book to add to"),
+ phraseBookList, 0, false, &okPressed);
if (!okPressed)
return;
}
@@ -1367,11 +1346,9 @@ void MainWindow::about()
const QString description
= tr("Qt Linguist is a tool for adding translations to Qt applications.");
- const QString copyright
- = tr("Copyright (C) %1 The Qt Company Ltd.").arg(QStringLiteral("2020"));
box.setText(QStringLiteral("<center><img src=\":/images/icons/linguist-128-32.png\"/></img><p>%1</p></center>"
"<p>%2</p>"
- "<p>%3</p>").arg(version, description, copyright));
+ "<p>Copyright (C) The Qt Company Ltd.</p>").arg(version, description));
box.setWindowTitle(QApplication::translate("AboutDialog", "Qt Linguist"));
box.setIcon(QMessageBox::NoIcon);
@@ -1406,16 +1383,14 @@ bool MainWindow::maybeSaveAll()
switch (QMessageBox::information(this, tr("Qt Linguist"),
tr("Do you want to save the modified files?"),
- QMessageBox::Yes | QMessageBox::Default,
- QMessageBox::No,
- QMessageBox::Cancel | QMessageBox::Escape))
+ QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, QMessageBox::Yes))
{
case QMessageBox::Cancel:
return false;
case QMessageBox::Yes:
saveAll();
return !m_dataModel->isModified();
- case QMessageBox::No:
+ default:
break;
}
return true;
@@ -1428,16 +1403,14 @@ bool MainWindow::maybeSave(int model)
switch (QMessageBox::information(this, tr("Qt Linguist"),
tr("Do you want to save '%1'?").arg(m_dataModel->srcFileName(model, true)),
- QMessageBox::Yes | QMessageBox::Default,
- QMessageBox::No,
- QMessageBox::Cancel | QMessageBox::Escape))
+ QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, QMessageBox::Yes))
{
case QMessageBox::Cancel:
return false;
case QMessageBox::Yes:
saveInternal(model);
return !m_dataModel->isModified(model);
- case QMessageBox::No:
+ default:
break;
}
return true;
@@ -1508,7 +1481,7 @@ void MainWindow::selectedMessageChanged(const QModelIndex &sortedIndex, const QM
}
int model = -1;
- MessageItem *m = 0;
+ MessageItem *m = nullptr;
QModelIndex index = m_sortedMessagesModel->mapToSource(sortedIndex);
if (index.isValid()) {
model = (index.column() && (index.column() - 1 < m_dataModel->modelCount())) ?
@@ -1783,22 +1756,21 @@ bool MainWindow::doNext(bool checkUnfinished)
}
void MainWindow::findNext(const QString &text, DataModel::FindLocation where,
- bool matchCase, bool ignoreAccelerators, bool skipObsolete, bool useRegExp)
+ FindDialog::FindOptions options, int statusFilter)
{
if (text.isEmpty())
return;
m_findText = text;
m_findWhere = where;
- m_findMatchCase = matchCase ? Qt::CaseSensitive : Qt::CaseInsensitive;
- m_findIgnoreAccelerators = ignoreAccelerators;
- m_findSkipObsolete = skipObsolete;
- m_findUseRegExp = useRegExp;
- if (m_findUseRegExp) {
- m_findDialog->getRegExp().setPatternOptions(matchCase
+ m_findOptions = options;
+ m_findStatusFilter = statusFilter;
+ if (options.testFlag(FindDialog::UseRegExp)) {
+ m_findDialog->getRegExp().setPatternOptions(options.testFlag(FindDialog::MatchCase)
? QRegularExpression::NoPatternOption
: QRegularExpression::CaseInsensitiveOption);
}
m_ui.actionFindNext->setEnabled(true);
+ m_ui.actionFindPrev->setEnabled(true);
findAgain();
}
@@ -1822,39 +1794,36 @@ QString MainWindow::friendlyString(const QString& str)
void MainWindow::setupMenuBar()
{
- const bool hasThemeIcons = !QApplication::platformName().compare(QStringLiteral("xcb"), Qt::CaseInsensitive);
- if (hasThemeIcons) { // There are no fallback icons for these
- m_ui.menuRecentlyOpenedFiles->setIcon(QIcon::fromTheme(QStringLiteral("document-open-recent")));
- m_ui.actionCloseAll->setIcon(QIcon::fromTheme(QStringLiteral("window-close")));
- m_ui.actionExit->setIcon(QIcon::fromTheme(QStringLiteral("application-exit")));
- m_ui.actionSelectAll->setIcon(QIcon::fromTheme(QStringLiteral("edit-select-all")));
- }
+ m_ui.menuRecentlyOpenedFiles->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::DocumentOpenRecent));
+ m_ui.actionCloseAll->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::WindowClose));
+ m_ui.actionExit->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::ApplicationExit));
+ m_ui.actionSelectAll->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::EditSelectAll));
// Prefer theme icons when available for these actions
const QString prefix = QApplication::platformName().compare(QStringLiteral("cocoa"), Qt::CaseInsensitive) ?
QStringLiteral(":/images/win") : QStringLiteral(":/images/mac");
- m_ui.actionOpen->setIcon(QIcon::fromTheme(QStringLiteral("document-open"),
+ m_ui.actionOpen->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::DocumentOpen,
QIcon(prefix + QStringLiteral("/fileopen.png"))));
- m_ui.actionOpenAux->setIcon(QIcon::fromTheme(QStringLiteral("document-open"),
+ m_ui.actionOpenAux->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::DocumentOpen,
QIcon(prefix + QStringLiteral("/fileopen.png"))));
- m_ui.actionSave->setIcon(QIcon::fromTheme(QStringLiteral("document-save"),
+ m_ui.actionSave->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::DocumentSave,
QIcon(prefix + QStringLiteral("/filesave.png"))));
- m_ui.actionSaveAll->setIcon(QIcon::fromTheme(QStringLiteral("document-save"),
+ m_ui.actionSaveAll->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::DocumentSave,
QIcon(prefix + QStringLiteral("/filesave.png"))));
- m_ui.actionPrint->setIcon(QIcon::fromTheme(QStringLiteral("document-print"),
+ m_ui.actionPrint->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::DocumentPrint,
QIcon(prefix + QStringLiteral("/print.png"))));
- m_ui.actionRedo->setIcon(QIcon::fromTheme(QStringLiteral("edit-redo"),
+ m_ui.actionRedo->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::EditRedo,
QIcon(prefix + QStringLiteral("/redo.png"))));
- m_ui.actionUndo->setIcon(QIcon::fromTheme(QStringLiteral("edit-undo"),
+ m_ui.actionUndo->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::EditUndo,
QIcon(prefix + QStringLiteral("/undo.png"))));
- m_ui.actionCut->setIcon(QIcon::fromTheme(QStringLiteral("edit-cut"),
+ m_ui.actionCut->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::EditCut,
QIcon(prefix + QStringLiteral("/editcut.png"))));
- m_ui.actionCopy->setIcon(QIcon::fromTheme(QStringLiteral("edit-copy"),
+ m_ui.actionCopy->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::EditCopy,
QIcon(prefix + QStringLiteral("/editcopy.png"))));
- m_ui.actionPaste->setIcon(QIcon::fromTheme(QStringLiteral("edit-paste"),
+ m_ui.actionPaste->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::EditPaste,
QIcon(prefix + QStringLiteral("/editpaste.png"))));
- m_ui.actionFind->setIcon(QIcon::fromTheme(QStringLiteral("edit-find"),
+ m_ui.actionFind->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::EditFind,
QIcon(prefix + QStringLiteral("/searchfind.png"))));
// No well defined theme icons for these actions
@@ -1912,7 +1881,9 @@ void MainWindow::setupMenuBar()
connect(m_ui.actionFind, &QAction::triggered,
m_findDialog, &FindDialog::find);
connect(m_ui.actionFindNext, &QAction::triggered,
- this, &MainWindow::findAgain);
+ this, [this] {findAgain(FindNext);});
+ connect(m_ui.actionFindPrev, &QAction::triggered,
+ this, [this] {findAgain(FindPrev);});
connect(m_ui.actionSearchAndTranslate, &QAction::triggered,
this, &MainWindow::showTranslateDialog);
connect(m_ui.actionBatchTranslation, &QAction::triggered,
@@ -1989,8 +1960,8 @@ void MainWindow::setupMenuBar()
// Window menu
QMenu *windowMenu = new QMenu(tr("&Window"), this);
menuBar()->insertMenu(m_ui.menuHelp->menuAction(), windowMenu);
- windowMenu->addAction(tr("Minimize"), this,
- &QWidget::showMinimized, QKeySequence(tr("Ctrl+M")));
+ windowMenu->addAction(tr("Minimize"), QKeySequence(tr("Ctrl+M")),
+ this, &QWidget::showMinimized);
#endif
// Help
@@ -2036,7 +2007,7 @@ void MainWindow::doUpdateLatestModel(int model)
m_currentIndex = MultiDataIndex(model, m_currentIndex.context(), m_currentIndex.message());
bool enable = false;
bool enableRw = false;
- MessageItem *item = 0;
+ MessageItem *item = nullptr;
if (model >= 0) {
enable = true;
if (m_dataModel->isModelWritable(model))
@@ -2362,9 +2333,7 @@ bool MainWindow::maybeSavePhraseBook(PhraseBook *pb)
if (pb->isModified())
switch (QMessageBox::information(this, tr("Qt Linguist"),
tr("Do you want to save phrase book '%1'?").arg(pb->friendlyPhraseBookName()),
- QMessageBox::Yes | QMessageBox::Default,
- QMessageBox::No,
- QMessageBox::Cancel | QMessageBox::Escape))
+ QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, QMessageBox::Yes))
{
case QMessageBox::Cancel:
return false;
@@ -2372,7 +2341,7 @@ bool MainWindow::maybeSavePhraseBook(PhraseBook *pb)
if (!pb->save(pb->fileName()))
return false;
break;
- case QMessageBox::No:
+ default:
break;
}
return true;
@@ -2380,7 +2349,7 @@ bool MainWindow::maybeSavePhraseBook(PhraseBook *pb)
bool MainWindow::maybeSavePhraseBooks()
{
- for (PhraseBook *phraseBook : qAsConst(m_phraseBooks))
+ for (PhraseBook *phraseBook : std::as_const(m_phraseBooks))
if (!maybeSavePhraseBook(phraseBook))
return false;
return true;
@@ -2421,19 +2390,19 @@ void MainWindow::updatePhraseDictInternal(int model)
QHash<QString, QList<Phrase *> > &pd = m_phraseDict[model];
pd.clear();
- for (PhraseBook *pb : qAsConst(m_phraseBooks)) {
+ for (PhraseBook *pb : std::as_const(m_phraseBooks)) {
bool before;
if (pb->language() != QLocale::C && m_dataModel->language(model) != QLocale::C) {
if (pb->language() != m_dataModel->language(model))
continue;
- before = (pb->country() == m_dataModel->model(model)->country());
+ before = (pb->territory() == m_dataModel->model(model)->territory());
} else {
before = false;
}
const auto phrases = pb->phrases();
for (Phrase *p : phrases) {
QString f = friendlyString(p->source());
- if (f.length() > 0) {
+ if (f.size() > 0) {
f = f.split(QLatin1Char(' ')).first();
if (!pd.contains(f)) {
pd.insert(f, QList<Phrase *>());
@@ -2514,7 +2483,7 @@ void MainWindow::updateDanger(const MultiDataIndex &index, bool verbose)
QStringList translations = m->translations();
// Truncated variants are permitted to be "denormalized"
- for (int i = 0; i < translations.count(); ++i) {
+ for (int i = 0; i < translations.size(); ++i) {
int sep = translations.at(i).indexOf(QChar(Translator::BinaryVariantSeparator));
if (sep >= 0)
translations[i].truncate(sep);
@@ -2523,7 +2492,7 @@ void MainWindow::updateDanger(const MultiDataIndex &index, bool verbose)
if (m_ui.actionAccelerators->isChecked()) {
bool sk = haveMnemonic(source);
bool tk = true;
- for (int i = 0; i < translations.count() && tk; ++i) {
+ for (int i = 0; i < translations.size() && tk; ++i) {
tk &= haveMnemonic(translations[i]);
}
@@ -2539,7 +2508,7 @@ void MainWindow::updateDanger(const MultiDataIndex &index, bool verbose)
}
if (m_ui.actionSurroundingWhitespace->isChecked()) {
bool whitespaceok = true;
- for (int i = 0; i < translations.count() && whitespaceok; ++i) {
+ for (int i = 0; i < translations.size() && whitespaceok; ++i) {
whitespaceok &= (leadingWhitespace(source) == leadingWhitespace(translations[i]));
whitespaceok &= (trailingWhitespace(source) == trailingWhitespace(translations[i]));
}
@@ -2552,7 +2521,7 @@ void MainWindow::updateDanger(const MultiDataIndex &index, bool verbose)
}
if (m_ui.actionEndingPunctuation->isChecked()) {
bool endingok = true;
- for (int i = 0; i < translations.count() && endingok; ++i) {
+ for (int i = 0; i < translations.size() && endingok; ++i) {
endingok &= (ending(source, m_dataModel->sourceLanguage(mi)) ==
ending(translations[i], m_dataModel->language(mi)));
}
@@ -2569,7 +2538,7 @@ void MainWindow::updateDanger(const MultiDataIndex &index, bool verbose)
QStringList lookupWords = fsource.split(QLatin1Char(' '));
bool phraseFound;
- for (const QString &s : qAsConst(lookupWords)) {
+ for (const QString &s : std::as_const(lookupWords)) {
if (m_phraseDict[mi].contains(s)) {
phraseFound = true;
const auto phrases = m_phraseDict[mi].value(s);
@@ -2603,14 +2572,14 @@ void MainWindow::updateDanger(const MultiDataIndex &index, bool verbose)
// between place markers in the source text and the translation text.
QHash<int, int> placeMarkerIndexes;
QString translation;
- int numTranslations = translations.count();
+ int numTranslations = translations.size();
for (int pass = 0; pass < numTranslations + 1; ++pass) {
const QChar *uc_begin = source.unicode();
- const QChar *uc_end = uc_begin + source.length();
+ const QChar *uc_end = uc_begin + source.size();
if (pass >= 1) {
translation = translations[pass - 1];
uc_begin = translation.unicode();
- uc_end = uc_begin + translation.length();
+ uc_end = uc_begin + translation.size();
}
const QChar *c = uc_begin;
while (c < uc_end) {
@@ -2624,12 +2593,13 @@ void MainWindow::updateDanger(const MultiDataIndex &index, bool verbose)
escape_start, escape_end - escape_start).toInt(&ok);
if (ok)
placeMarkerIndexes[markerIndex] += (pass == 0 ? numTranslations : -1);
+ } else {
+ ++c;
}
- ++c;
}
}
- for (int i : qAsConst(placeMarkerIndexes)) {
+ for (int i : std::as_const(placeMarkerIndexes)) {
if (i != 0) {
if (verbose)
m_errorsView->addError(mi, ErrorsView::PlaceMarkersDiffer);
diff --git a/src/linguist/linguist/mainwindow.h b/src/linguist/linguist/mainwindow.h
index e6313898f..f46b66656 100644
--- a/src/linguist/linguist/mainwindow.h
+++ b/src/linguist/linguist/mainwindow.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
@@ -33,8 +8,10 @@
#include "ui_mainwindow.h"
#include "recentfiles.h"
#include "messagemodel.h"
+#include "finddialog.h"
#include <QtCore/QHash>
+#include <QtCore/QMap>
#include <QtCore/QLocale>
#include <QtWidgets/QMainWindow>
@@ -56,7 +33,6 @@ class QTreeView;
class BatchTranslationDialog;
class ErrorsView;
-class FindDialog;
class FocusWatcher;
class FormPreviewView;
class MessageEditor;
@@ -71,6 +47,7 @@ class MainWindow : public QMainWindow
Q_OBJECT
public:
enum {PhraseCloseMenu, PhraseEditMenu, PhrasePrintMenu};
+ enum FindDirection {FindNext, FindPrev};
MainWindow();
~MainWindow();
@@ -106,7 +83,6 @@ private slots:
void print();
void closeFile();
bool closeAll();
- void findAgain();
void showTranslateDialog();
void showBatchTranslateDialog();
void showTranslationSettings();
@@ -154,7 +130,7 @@ private slots:
void prevUnfinished();
void nextUnfinished();
void findNext(const QString &text, DataModel::FindLocation where,
- bool matchCase, bool ignoreAccelerators, bool skipObsolete, bool regularExp);
+ FindDialog::FindOptions options, int statusFilter);
void revalidate();
void toggleStatistics();
void toggleVisualizeWhitespace();
@@ -169,6 +145,7 @@ private:
QModelIndex prevMessage(const QModelIndex &currentIndex, bool checkUnfinished = false) const;
bool doNext(bool checkUnfinished);
bool doPrev(bool checkUnfinished);
+ void findAgain(FindDirection direction = FindNext);
void updateStatistics();
void initViewHeaders();
@@ -226,10 +203,8 @@ private:
FindDialog *m_findDialog;
QString m_findText;
- Qt::CaseSensitivity m_findMatchCase;
- bool m_findIgnoreAccelerators;
- bool m_findSkipObsolete;
- bool m_findUseRegExp;
+ FindDialog::FindOptions m_findOptions;
+ int m_findStatusFilter = -1;
DataModel::FindLocation m_findWhere;
TranslateDialog *m_translateDialog;
diff --git a/src/linguist/linguist/mainwindow.ui b/src/linguist/linguist/mainwindow.ui
index 3c6ba951a..253d240cb 100644
--- a/src/linguist/linguist/mainwindow.ui
+++ b/src/linguist/linguist/mainwindow.ui
@@ -1,32 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+</comment>
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
@@ -192,6 +168,7 @@
<addaction name="actionSelectAll"/>
<addaction name="separator"/>
<addaction name="actionFind"/>
+ <addaction name="actionFindPrev"/>
<addaction name="actionFindNext"/>
<addaction name="actionSearchAndTranslate"/>
<addaction name="actionBatchTranslation"/>
@@ -978,6 +955,17 @@
<enum>QAction::NoRole</enum>
</property>
</action>
+ <action name="actionFindPrev">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Find P&amp;revious</string>
+ </property>
+ <property name="shortcut">
+ <string>Shift+F3</string>
+ </property>
+ </action>
</widget>
<resources/>
<connections/>
diff --git a/src/linguist/linguist/messageeditor.cpp b/src/linguist/linguist/messageeditor.cpp
index 1a126da7a..ee4a5c70b 100644
--- a/src/linguist/linguist/messageeditor.cpp
+++ b/src/linguist/linguist/messageeditor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
/* TRANSLATOR MessageEditor
@@ -107,6 +82,12 @@ MessageEditor::MessageEditor(MultiDataModel *dataModel, QMainWindow *parent)
showNothing();
}
+MessageEditor::~MessageEditor()
+{
+ if (FormatTextEdit *fte = qobject_cast<FormatTextEdit *>(m_selectionHolder))
+ disconnect(fte, &FormatTextEdit::editorDestroyed, this, &MessageEditor::editorDestroyed);
+}
+
void MessageEditor::setupEditorPage()
{
QFrame *editorPage = new QFrame;
@@ -211,7 +192,7 @@ void MessageEditor::messageModelAppended()
void MessageEditor::allModelsDeleted()
{
- for (const MessageEditorData &med : qAsConst(m_editors))
+ for (const MessageEditorData &med : std::as_const(m_editors))
med.container->deleteLater();
m_editors.clear();
m_currentModel = -1;
@@ -255,7 +236,7 @@ void MessageEditor::addPluralForm(int model, const QString &label, bool writable
transEditor->setVisible(false);
transEditor->setMultiEnabled(m_lengthVariants);
static_cast<QBoxLayout *>(m_editors[model].container->layout())->insertWidget(
- m_editors[model].transTexts.count(), transEditor);
+ m_editors[model].transTexts.size(), transEditor);
connect(transEditor, &FormMultiWidget::selectionChanged,
this, &MessageEditor::selectionChanged);
@@ -312,7 +293,7 @@ void MessageEditor::fixTabOrder()
void MessageEditor::reallyFixTabOrder()
{
QWidget *prev = this;
- for (const MessageEditorData &med : qAsConst(m_editors)) {
+ for (const MessageEditorData &med : std::as_const(m_editors)) {
for (FormMultiWidget *fmw : med.transTexts)
for (QTextEdit *te : fmw->getEditors()) {
setTabOrder(prev, te);
@@ -334,7 +315,7 @@ void MessageEditor::reallyFixTabOrder()
QStringList MessageEditor::translations(int model) const
{
QStringList translations;
- for (int i = 0; i < m_editors[model].transTexts.count() &&
+ for (int i = 0; i < m_editors[model].transTexts.size() &&
m_editors[model].transTexts.at(i)->isVisible(); ++i)
translations << m_editors[model].transTexts[i]->getTranslation();
return translations;
@@ -386,7 +367,7 @@ void MessageEditor::resetSelection()
disconnect(fte, &FormatTextEdit::editorDestroyed,
this, &MessageEditor::editorDestroyed);
}
- m_selectionHolder = 0;
+ m_selectionHolder = nullptr;
#ifndef QT_NO_CLIPBOARD
updateCanCutCopy();
#endif
@@ -395,8 +376,8 @@ void MessageEditor::resetSelection()
void MessageEditor::activeModelAndNumerus(int *model, int *numerus) const
{
- for (int j = 0; j < m_editors.count(); ++j) {
- for (int i = 0; i < m_editors[j].transTexts.count(); ++i)
+ for (int j = 0; j < m_editors.size(); ++j) {
+ for (int i = 0; i < m_editors[j].transTexts.size(); ++i)
for (QTextEdit *te : m_editors[j].transTexts[i]->getEditors())
if (m_focusWidget == te) {
*model = j;
@@ -462,11 +443,11 @@ void MessageEditor::setTargetLanguage(int model)
{
const QStringList &numerusForms = m_dataModel->model(model)->numerusForms();
const QString &langLocalized = m_dataModel->model(model)->localizedLanguage();
- for (int i = 0; i < numerusForms.count(); ++i) {
+ for (int i = 0; i < numerusForms.size(); ++i) {
const QString &label = tr("Translation to %1 (%2)").arg(langLocalized, numerusForms[i]);
if (!i)
m_editors[model].firstForm = label;
- if (i >= m_editors[model].transTexts.count())
+ if (i >= m_editors[model].transTexts.size())
addPluralForm(model, label, m_dataModel->isModelWritable(model));
else
m_editors[model].transTexts[i]->setLabel(label);
@@ -475,7 +456,7 @@ void MessageEditor::setTargetLanguage(int model)
tr("This is where you can enter or modify"
" the translation of the above source text.") );
}
- for (int j = m_editors[model].transTexts.count() - numerusForms.count(); j > 0; --j)
+ for (int j = m_editors[model].transTexts.size() - numerusForms.size(); j > 0; --j)
delete m_editors[model].transTexts.takeLast();
m_editors[model].invariantForm = tr("Translation to %1").arg(langLocalized);
m_editors[model].transCommentText->setLabel(tr("Translator comments for %1").arg(langLocalized));
@@ -483,8 +464,8 @@ void MessageEditor::setTargetLanguage(int model)
MessageEditorData *MessageEditor::modelForWidget(const QObject *o)
{
- for (int j = 0; j < m_editors.count(); ++j) {
- for (int i = 0; i < m_editors[j].transTexts.count(); ++i)
+ for (int j = 0; j < m_editors.size(); ++j) {
+ for (int i = 0; i < m_editors[j].transTexts.size(); ++i)
for (QTextEdit *te : m_editors[j].transTexts[i]->getEditors())
if (te == o)
return &m_editors[j];
@@ -566,9 +547,9 @@ void MessageEditor::showNothing()
m_source->clearTranslation();
m_pluralSource->clearTranslation();
m_commentText->clearTranslation();
- for (int j = 0; j < m_editors.count(); ++j) {
+ for (int j = 0; j < m_editors.size(); ++j) {
setEditingEnabled(j, false);
- for (FormMultiWidget *widget : qAsConst(m_editors[j].transTexts))
+ for (FormMultiWidget *widget : std::as_const(m_editors[j].transTexts))
widget->clearTranslation();
m_editors[j].transCommentText->clearTranslation();
}
@@ -627,7 +608,7 @@ void MessageEditor::showMessage(const MultiDataIndex &index)
&& item->message().type() != TranslatorMessage::Vanished);
// Translation label
- ed.pluralEditMode = item->translations().count() > 1;
+ ed.pluralEditMode = item->translations().size() > 1;
ed.transTexts.first()->setLabel(ed.pluralEditMode ? ed.firstForm : ed.invariantForm);
// Translation forms
@@ -638,7 +619,7 @@ void MessageEditor::showMessage(const MultiDataIndex &index)
QStringList normalizedTranslations =
m_dataModel->model(j)->normalizedTranslations(*item);
for (int i = 0; i < ed.transTexts.size(); ++i) {
- bool shouldShow = (i < normalizedTranslations.count());
+ bool shouldShow = (i < normalizedTranslations.size());
if (shouldShow)
setNumerusTranslation(j, normalizedTranslations.at(i), i);
else
@@ -656,7 +637,7 @@ void MessageEditor::showMessage(const MultiDataIndex &index)
void MessageEditor::setNumerusTranslation(int model, const QString &translation, int numerus)
{
MessageEditorData &ed = m_editors[model];
- if (numerus >= ed.transTexts.count())
+ if (numerus >= ed.transTexts.size())
numerus = 0;
FormMultiWidget *transForm = ed.transTexts[numerus];
transForm->setTranslation(translation, false);
@@ -683,7 +664,7 @@ void MessageEditor::setTranslation(int latestModel, const QString &translation)
void MessageEditor::setEditingEnabled(int model, bool enabled)
{
MessageEditorData &ed = m_editors[model];
- for (FormMultiWidget *widget : qAsConst(ed.transTexts))
+ for (FormMultiWidget *widget : std::as_const(ed.transTexts))
widget->setEditingEnabled(enabled);
ed.transCommentText->setEditingEnabled(enabled);
@@ -695,7 +676,7 @@ void MessageEditor::setEditingEnabled(int model, bool enabled)
void MessageEditor::setLengthVariants(bool on)
{
m_lengthVariants = on;
- for (const MessageEditorData &ed : qAsConst(m_editors))
+ for (const MessageEditorData &ed : std::as_const(m_editors))
for (FormMultiWidget *widget : ed.transTexts)
widget->setMultiEnabled(on);
}
@@ -855,7 +836,7 @@ void MessageEditor::setEditorFocusForModel(int model)
bool MessageEditor::focusNextUnfinished(int start)
{
- for (int j = start; j < m_editors.count(); ++j)
+ for (int j = start; j < m_editors.size(); ++j)
if (m_dataModel->isModelWritable(j))
if (MessageItem *item = m_dataModel->messageItem(m_currentIndex, j))
if (item->type() == TranslatorMessage::Unfinished) {
@@ -882,7 +863,7 @@ void MessageEditor::setVisualizeWhitespace(bool value)
m_pluralSource->getEditor()->setVisualizeWhitespace(value);
m_commentText->getEditor()->setVisualizeWhitespace(value);
- for (const MessageEditorData &med : qAsConst(m_editors)) {
+ for (const MessageEditorData &med : std::as_const(m_editors)) {
med.transCommentText->getEditor()->setVisualizeWhitespace(value);
for (FormMultiWidget *widget : med.transTexts)
for (FormatTextEdit *te : widget->getEditors())
@@ -912,7 +893,7 @@ void MessageEditor::applyFontSize()
m_pluralSource->getEditor()->setFont(font);
m_commentText->getEditor()->setFont(font);
- for (const MessageEditorData &med : qAsConst(m_editors)) {
+ for (const MessageEditorData &med : std::as_const(m_editors)) {
for (FormMultiWidget *fmw : med.transTexts)
for (QTextEdit *te : fmw->getEditors())
te->setFont(font);
diff --git a/src/linguist/linguist/messageeditor.h b/src/linguist/linguist/messageeditor.h
index 1a16ff1d5..6f2442e74 100644
--- a/src/linguist/linguist/messageeditor.h
+++ b/src/linguist/linguist/messageeditor.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef MESSAGEEDITOR_H
#define MESSAGEEDITOR_H
@@ -64,13 +39,14 @@ class MessageEditor : public QScrollArea
public:
MessageEditor(MultiDataModel *dataModel, QMainWindow *parent = 0);
+ ~MessageEditor();
void showNothing();
void showMessage(const MultiDataIndex &index);
void setNumerusForms(int model, const QStringList &numerusForms);
bool eventFilter(QObject *, QEvent *) override;
void setNumerusTranslation(int model, const QString &translation, int numerus);
- int activeModel() const { return (m_editors.count() != 1) ? m_currentModel : 0; }
+ int activeModel() const { return (m_editors.size() != 1) ? m_currentModel : 0; }
void setEditorFocusForModel(int model);
void setUnfinishedEditorFocus();
bool focusNextUnfinished();
diff --git a/src/linguist/linguist/messageeditorwidgets.cpp b/src/linguist/linguist/messageeditorwidgets.cpp
index d869fe31a..25969ca68 100644
--- a/src/linguist/linguist/messageeditorwidgets.cpp
+++ b/src/linguist/linguist/messageeditorwidgets.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "messageeditorwidgets.h"
#include "messagehighlighter.h"
@@ -298,7 +273,7 @@ bool FormMultiWidget::eventFilter(QObject *watched, QEvent *event)
{
int i = 0;
while (m_editors.at(i) != watched)
- if (++i >= m_editors.count()) // Happens when deleting an editor
+ if (++i >= m_editors.size()) // Happens when deleting an editor
return false;
if (event->type() == QEvent::FocusOut) {
m_minusButtons.at(i)->setToolTip(QString());
@@ -340,7 +315,7 @@ void FormMultiWidget::updateLayout()
if (variants) {
QVBoxLayout *layoutForPlusButtons = new QVBoxLayout;
layoutForPlusButtons->setContentsMargins(QMargins());
- for (int i = 0; i < m_plusButtons.count(); ++i)
+ for (int i = 0; i < m_plusButtons.size(); ++i)
layoutForPlusButtons->addWidget(m_plusButtons.at(i), Qt::AlignTop);
layout->addLayout(layoutForPlusButtons, 1, 0, Qt::AlignTop);
@@ -348,20 +323,20 @@ void FormMultiWidget::updateLayout()
QGridLayout *layoutForLabels = new QGridLayout;
layoutForLabels->setContentsMargins(QMargins());
layoutForLabels->setRowMinimumHeight(0, minimumRowHeight);
- for (int j = 0; j < m_editors.count(); ++j) {
+ for (int j = 0; j < m_editors.size(); ++j) {
layoutForLabels->addWidget(m_editors.at(j), 1 + j, 0, Qt::AlignVCenter);
layoutForLabels->addWidget(m_minusButtons.at(j), 1 + j, 1, Qt::AlignVCenter);
}
- layoutForLabels->setRowMinimumHeight(m_editors.count() + 1, minimumRowHeight);
+ layoutForLabels->setRowMinimumHeight(m_editors.size() + 1, minimumRowHeight);
layout->addLayout(layoutForLabels, 1, 1, Qt::AlignTop);
} else {
- for (int k = 0; k < m_editors.count(); ++k)
+ for (int k = 0; k < m_editors.size(); ++k)
layout->addWidget(m_editors.at(k), 1 + k, 0, Qt::AlignVCenter);
}
- for (int i = 0; i < m_plusButtons.count(); ++i)
+ for (int i = 0; i < m_plusButtons.size(); ++i)
m_plusButtons.at(i)->setVisible(variants);
- for (int j = 0; j < m_minusButtons.count(); ++j)
+ for (int j = 0; j < m_minusButtons.size(); ++j)
m_minusButtons.at(j)->setVisible(variants);
updateGeometry();
@@ -381,16 +356,16 @@ void FormMultiWidget::setTranslation(const QString &text, bool userAction)
{
QStringList texts = text.split(QChar(Translator::BinaryVariantSeparator), Qt::KeepEmptyParts);
- while (m_editors.count() > texts.count()) {
+ while (m_editors.size() > texts.size()) {
delete m_minusButtons.takeLast();
delete m_plusButtons.takeLast();
delete m_editors.takeLast();
}
- while (m_editors.count() < texts.count())
- addEditor(m_editors.count());
+ while (m_editors.size() < texts.size())
+ addEditor(m_editors.size());
updateLayout();
- for (int i = 0; i < texts.count(); ++i)
+ for (int i = 0; i < texts.size(); ++i)
// XXX this will emit n textChanged signals
m_editors.at(i)->setPlainText(texts.at(i), userAction);
@@ -422,7 +397,7 @@ QString toPlainText(const QString &text)
QString FormMultiWidget::getTranslation() const
{
QString ret;
- for (int i = 0; i < m_editors.count(); ++i) {
+ for (int i = 0; i < m_editors.size(); ++i) {
if (i)
ret += QChar(Translator::BinaryVariantSeparator);
ret += toPlainText(m_editors.at(i)->document()->toRawText());
@@ -433,7 +408,7 @@ QString FormMultiWidget::getTranslation() const
void FormMultiWidget::setEditingEnabled(bool enable)
{
// Use read-only state so that the text can still be copied
- for (int i = 0; i < m_editors.count(); ++i)
+ for (int i = 0; i < m_editors.size(); ++i)
m_editors.at(i)->setReadOnly(!enable);
m_label->setEnabled(enable);
if (m_multiEnabled)
@@ -466,7 +441,7 @@ void FormMultiWidget::plusButtonClicked()
void FormMultiWidget::deleteEditor(int idx)
{
- if (m_editors.count() == 1) {
+ if (m_editors.size() == 1) {
// Don't just clear(), so the undo history is not lost
QTextCursor c = m_editors.first()->textCursor();
c.select(QTextCursor::Document);
@@ -483,7 +458,7 @@ void FormMultiWidget::deleteEditor(int idx)
delete m_minusButtons.takeAt(idx);
delete m_plusButtons.takeAt(idx + 1);
updateLayout();
- emit textChanged(m_editors.at((m_editors.count() == idx) ? idx - 1 : idx));
+ emit textChanged(m_editors.at((m_editors.size() == idx) ? idx - 1 : idx));
}
}
diff --git a/src/linguist/linguist/messageeditorwidgets.h b/src/linguist/linguist/messageeditorwidgets.h
index 508021b60..f6ffa4a93 100644
--- a/src/linguist/linguist/messageeditorwidgets.h
+++ b/src/linguist/linguist/messageeditorwidgets.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef MESSAGEEDITORWIDGETS_H
#define MESSAGEEDITORWIDGETS_H
diff --git a/src/linguist/linguist/messagehighlighter.cpp b/src/linguist/linguist/messagehighlighter.cpp
index 63f9591bd..1812b6bfa 100644
--- a/src/linguist/linguist/messagehighlighter.cpp
+++ b/src/linguist/linguist/messagehighlighter.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "messagehighlighter.h"
@@ -85,7 +60,7 @@ void MessageHighlighter::highlightBlock(const QString &text)
static const QLatin1String endElement = QLatin1String("/>");
int state = previousBlockState();
- int len = text.length();
+ int len = text.size();
int start = 0;
int pos = 0;
diff --git a/src/linguist/linguist/messagehighlighter.h b/src/linguist/linguist/messagehighlighter.h
index 861ee844b..c44e122b1 100644
--- a/src/linguist/linguist/messagehighlighter.h
+++ b/src/linguist/linguist/messagehighlighter.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef MESSAGEHIGHLIGHTER_H
#define MESSAGEHIGHLIGHTER_H
diff --git a/src/linguist/linguist/messagemodel.cpp b/src/linguist/linguist/messagemodel.cpp
index faa4b2a0a..0910527af 100644
--- a/src/linguist/linguist/messagemodel.cpp
+++ b/src/linguist/linguist/messagemodel.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "messagemodel.h"
#include "statistics.h"
@@ -89,9 +64,9 @@ void ContextItem::appendToComment(const QString &str)
MessageItem *ContextItem::messageItem(int i) const
{
- if (i >= 0 && i < msgItemList.count())
+ if (i >= 0 && i < msgItemList.size())
return const_cast<MessageItem *>(&msgItemList[i]);
- Q_ASSERT(i >= 0 && i < msgItemList.count());
+ Q_ASSERT(i >= 0 && i < msgItemList.size());
return 0;
}
@@ -120,20 +95,20 @@ DataModel::DataModel(QObject *parent)
m_srcCharsSpc(0),
m_language(QLocale::Language(-1)),
m_sourceLanguage(QLocale::Language(-1)),
- m_country(QLocale::Country(-1)),
- m_sourceCountry(QLocale::Country(-1))
+ m_territory(QLocale::Territory(-1)),
+ m_sourceTerritory(QLocale::Territory(-1))
{}
QStringList DataModel::normalizedTranslations(const MessageItem &m) const
{
- return Translator::normalizedTranslations(m.message(), m_numerusForms.count());
+ return Translator::normalizedTranslations(m.message(), m_numerusForms.size());
}
ContextItem *DataModel::contextItem(int context) const
{
- if (context >= 0 && context < m_contextList.count())
+ if (context >= 0 && context < m_contextList.size())
return const_cast<ContextItem *>(&m_contextList[context]);
- Q_ASSERT(context >= 0 && context < m_contextList.count());
+ Q_ASSERT(context >= 0 && context < m_contextList.size());
return 0;
}
@@ -146,7 +121,7 @@ MessageItem *DataModel::messageItem(const DataIndex &index) const
ContextItem *DataModel::findContext(const QString &context) const
{
- for (int c = 0; c < m_contextList.count(); ++c) {
+ for (int c = 0; c < m_contextList.size(); ++c) {
ContextItem *ctx = contextItem(c);
if (ctx->context() == context)
return ctx;
@@ -207,15 +182,15 @@ bool DataModel::load(const QString &fileName, bool *langGuessed, QWidget *parent
if (!dupes.byId.isEmpty() || !dupes.byContents.isEmpty()) {
QString err = tr("<qt>Duplicate messages found in '%1':").arg(fileName.toHtmlEscaped());
int numdups = 0;
- for (int i : dupes.byId) {
+ for (auto it = dupes.byId.begin(); it != dupes.byId.end(); ++it) {
if (++numdups >= 5) {
err += tr("<p>[more duplicates omitted]");
goto doWarn;
}
- err += tr("<p>* ID: %1").arg(tor.message(i).id().toHtmlEscaped());
+ err += tr("<p>* ID: %1").arg(tor.message(it.key()).id().toHtmlEscaped());
}
- for (int j : dupes.byContents) {
- const TranslatorMessage &msg = tor.message(j);
+ for (auto it = dupes.byContents.begin(); it != dupes.byContents.end(); ++it) {
+ const TranslatorMessage &msg = tor.message(it.key());
if (++numdups >= 5) {
err += tr("<p>[more duplicates omitted]");
break;
@@ -283,15 +258,15 @@ bool DataModel::load(const QString &fileName, bool *langGuessed, QWidget *parent
*langGuessed = true;
}
QLocale::Language l;
- QLocale::Country c;
- Translator::languageAndCountry(lang, &l, &c);
+ QLocale::Territory c;
+ Translator::languageAndTerritory(lang, &l, &c);
if (l == QLocale::C) {
QLocale sys;
l = sys.language();
- c = sys.country();
+ c = sys.territory();
*langGuessed = true;
}
- if (!setLanguageAndCountry(l, c))
+ if (!setLanguageAndTerritory(l, c))
QMessageBox::warning(parent, QObject::tr("Qt Linguist"),
tr("Linguist does not know the plural rules for '%1'.\n"
"Will assume a single universal form.")
@@ -303,11 +278,11 @@ bool DataModel::load(const QString &fileName, bool *langGuessed, QWidget *parent
lang = tor.sourceLanguageCode();
if (lang.isEmpty()) {
l = QLocale::C;
- c = QLocale::AnyCountry;
+ c = QLocale::AnyTerritory;
} else {
- Translator::languageAndCountry(lang, &l, &c);
+ Translator::languageAndTerritory(lang, &l, &c);
}
- setSourceLanguageAndCountry(l, c);
+ setSourceLanguageAndTerritory(l, c);
setModified(false);
@@ -320,8 +295,8 @@ bool DataModel::save(const QString &fileName, QWidget *parent)
for (DataModelIterator it(this); it.isValid(); ++it)
tor.append(it.current()->message());
- tor.setLanguageCode(Translator::makeLanguageCode(m_language, m_country));
- tor.setSourceLanguageCode(Translator::makeLanguageCode(m_sourceLanguage, m_sourceCountry));
+ tor.setLanguageCode(Translator::makeLanguageCode(m_language, m_territory));
+ tor.setSourceLanguageCode(Translator::makeLanguageCode(m_sourceLanguage, m_sourceTerritory));
tor.setLocationsType(m_relativeLocations ? Translator::RelativeLocations
: Translator::AbsoluteLocations);
tor.setExtras(m_extra);
@@ -353,7 +328,7 @@ bool DataModel::release(const QString &fileName, bool verbose, bool ignoreUnfini
return false;
}
Translator tor;
- QLocale locale(m_language, m_country);
+ QLocale locale(m_language, m_territory);
tor.setLanguageCode(locale.name());
for (DataModelIterator it(this); it.isValid(); ++it)
tor.append(it.current()->message());
@@ -361,6 +336,9 @@ bool DataModel::release(const QString &fileName, bool verbose, bool ignoreUnfini
cd.m_verbose = verbose;
cd.m_ignoreUnfinished = ignoreUnfinished;
cd.m_saveMode = mode;
+ cd.m_idBased =
+ std::all_of(tor.messages().begin(), tor.messages().end(),
+ [](const TranslatorMessage &message) { return !message.id().isEmpty(); });
bool ok = saveQM(tor, file, cd);
if (!ok)
QMessageBox::warning(parent, QObject::tr("Qt Linguist"), cd.error());
@@ -369,9 +347,9 @@ bool DataModel::release(const QString &fileName, bool verbose, bool ignoreUnfini
void DataModel::doCharCounting(const QString &text, int &trW, int &trC, int &trCS)
{
- trCS += text.length();
+ trCS += text.size();
bool inWord = false;
- for (int i = 0; i < text.length(); ++i) {
+ for (int i = 0; i < text.size(); ++i) {
if (text[i].isLetterOrNumber() || text[i] == QLatin1Char('_')) {
if (!inWord) {
++trW;
@@ -385,21 +363,30 @@ void DataModel::doCharCounting(const QString &text, int &trW, int &trC, int &trC
}
}
-bool DataModel::setLanguageAndCountry(QLocale::Language lang, QLocale::Country country)
+bool DataModel::setLanguageAndTerritory(QLocale::Language lang, QLocale::Territory territory)
{
- if (m_language == lang && m_country == country)
+ if (m_language == lang && m_territory == territory)
return true;
m_language = lang;
- m_country = country;
+ m_territory = territory;
if (lang == QLocale::C || uint(lang) > uint(QLocale::LastLanguage)) // XXX does this make any sense?
lang = QLocale::English;
QByteArray rules;
- bool ok = getNumerusInfo(lang, country, &rules, &m_numerusForms, 0);
- QLocale loc(lang, country);
- m_localizedLanguage = QLocale::countriesForLanguage(lang).size() > 1
- //: <language> (<country>)
- ? tr("%1 (%2)").arg(loc.nativeLanguageName(), loc.nativeCountryName())
+ bool ok = getNumerusInfo(lang, territory, &rules, &m_numerusForms, 0);
+ QLocale loc(lang, territory);
+ // Add territory name if we couldn't match the (lang, territory) combination,
+ // or if the language is used in more than one territory.
+ const bool mentionTerritory = (loc.territory() != territory) || [lang, territory]() {
+ const auto locales = QLocale::matchingLocales(lang, QLocale::AnyScript,
+ QLocale::AnyTerritory);
+ return std::any_of(locales.cbegin(), locales.cend(), [territory](const QLocale &locale) {
+ return locale.territory() != territory;
+ });
+ }();
+ m_localizedLanguage = mentionTerritory
+ //: <language> (<territory>)
+ ? tr("%1 (%2)").arg(loc.nativeLanguageName(), loc.nativeTerritoryName())
: loc.nativeLanguageName();
m_countRefNeeds.clear();
for (int i = 0; i < rules.size(); ++i) {
@@ -416,12 +403,12 @@ bool DataModel::setLanguageAndCountry(QLocale::Language lang, QLocale::Country c
return ok;
}
-void DataModel::setSourceLanguageAndCountry(QLocale::Language lang, QLocale::Country country)
+void DataModel::setSourceLanguageAndTerritory(QLocale::Language lang, QLocale::Territory territory)
{
- if (m_sourceLanguage == lang && m_sourceCountry == country)
+ if (m_sourceLanguage == lang && m_sourceTerritory == territory)
return;
m_sourceLanguage = lang;
- m_sourceCountry = country;
+ m_sourceTerritory = territory;
setModified(true);
}
@@ -472,7 +459,7 @@ QString DataModel::prettifyPlainFileName(const QString &fn)
{
static QString workdir = QDir::currentPath() + QLatin1Char('/');
- return QDir::toNativeSeparators(fn.startsWith(workdir) ? fn.mid(workdir.length()) : fn);
+ return QDir::toNativeSeparators(fn.startsWith(workdir) ? fn.mid(workdir.size()) : fn);
}
QString DataModel::prettifyFileName(const QString &fn)
@@ -496,7 +483,7 @@ DataModelIterator::DataModelIterator(DataModel *model, int context, int message)
bool DataModelIterator::isValid() const
{
- return m_context < m_model->m_contextList.count();
+ return m_context < m_model->m_contextList.size();
}
void DataModelIterator::operator++()
@@ -604,9 +591,9 @@ void MultiContextItem::putMessageItem(int pos, MessageItem *m)
void MultiContextItem::appendMessageItems(const QList<MessageItem *> &m)
{
QList<MessageItem *> nullItems = m; // Basically, just a reservation
- for (int i = 0; i < nullItems.count(); ++i)
+ for (int i = 0; i < nullItems.size(); ++i)
nullItems[i] = 0;
- for (int i = 0; i < m_messageLists.count() - 1; ++i)
+ for (int i = 0; i < m_messageLists.size() - 1; ++i)
m_messageLists[i] += nullItems;
m_messageLists.last() += m;
for (MessageItem *mi : m)
@@ -615,7 +602,7 @@ void MultiContextItem::appendMessageItems(const QList<MessageItem *> &m)
void MultiContextItem::removeMultiMessageItem(int pos)
{
- for (int i = 0; i < m_messageLists.count(); ++i)
+ for (int i = 0; i < m_messageLists.size(); ++i)
m_messageLists[i].removeAt(pos);
m_multiMessageList.removeAt(pos);
}
@@ -798,7 +785,7 @@ void MultiDataModel::append(DataModel *dm, bool readWrite)
void MultiDataModel::close(int model)
{
- if (m_dataModels.count() == 1) {
+ if (m_dataModels.size() == 1) {
closeAll();
} else {
updateCountsOnRemove(model, isModelWritable(model));
@@ -870,34 +857,34 @@ QString MultiDataModel::condenseFileNames(const QStringList &names)
if (names.isEmpty())
return QString();
- if (names.count() < 2)
+ if (names.size() < 2)
return names.first();
QString prefix = names.first();
if (prefix.startsWith(QLatin1Char('=')))
prefix.remove(0, 1);
QString suffix = prefix;
- for (int i = 1; i < names.count(); ++i) {
+ for (int i = 1; i < names.size(); ++i) {
QString fn = names[i];
if (fn.startsWith(QLatin1Char('=')))
fn.remove(0, 1);
- for (int j = 0; j < prefix.length(); ++j)
+ for (int j = 0; j < prefix.size(); ++j)
if (fn[j] != prefix[j]) {
- if (j < prefix.length()) {
+ if (j < prefix.size()) {
while (j > 0 && prefix[j - 1].isLetterOrNumber())
--j;
prefix.truncate(j);
}
break;
}
- int fnl = fn.length() - 1;
- int sxl = suffix.length() - 1;
+ int fnl = fn.size() - 1;
+ int sxl = suffix.size() - 1;
for (int k = 0; k <= sxl; ++k)
if (fn[fnl - k] != suffix[sxl - k]) {
if (k < sxl) {
while (k > 0 && suffix[sxl - k + 1].isLetterOrNumber())
--k;
- if (prefix.length() + k > fnl)
+ if (prefix.size() + k > fnl)
--k;
suffix.remove(0, sxl - k + 1);
}
@@ -905,9 +892,9 @@ QString MultiDataModel::condenseFileNames(const QStringList &names)
}
}
QString ret = prefix + QLatin1Char('{');
- int pxl = prefix.length();
- int sxl = suffix.length();
- for (int j = 0; j < names.count(); ++j) {
+ int pxl = prefix.size();
+ int sxl = suffix.size();
+ for (int j = 0; j < names.size(); ++j) {
if (j)
ret += QLatin1Char(',');
int off = pxl;
@@ -916,7 +903,7 @@ QString MultiDataModel::condenseFileNames(const QStringList &names)
ret += QLatin1Char('=');
++off;
}
- ret += fn.mid(off, fn.length() - sxl - off);
+ ret += fn.mid(off, fn.size() - sxl - off);
}
ret += QLatin1Char('}') + suffix;
return ret;
@@ -1184,7 +1171,7 @@ void MultiDataModelIterator::operator++()
bool MultiDataModelIterator::isValid() const
{
- return m_context < m_dataModel->m_multiContextList.count();
+ return m_context < m_dataModel->m_multiContextList.size();
}
MessageItem *MultiDataModelIterator::current() const
diff --git a/src/linguist/linguist/messagemodel.h b/src/linguist/linguist/messagemodel.h
index 3eadf5193..487ef9dc2 100644
--- a/src/linguist/linguist/messagemodel.h
+++ b/src/linguist/linguist/messagemodel.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef MESSAGEMODEL_H
#define MESSAGEMODEL_H
@@ -109,7 +84,7 @@ public:
bool isFinished() const { return unfinishedCount() == 0; }
MessageItem *messageItem(int i) const;
- int messageCount() const { return msgItemList.count(); }
+ int messageCount() const { return msgItemList.size(); }
MessageItem *findMessage(const QString &sourcetext, const QString &comment) const;
@@ -172,7 +147,7 @@ public:
enum FindLocation { NoLocation = 0, SourceText = 0x1, Translations = 0x2, Comments = 0x4 };
// Specializations
- int contextCount() const { return m_contextList.count(); }
+ int contextCount() const { return m_contextList.size(); }
ContextItem *findContext(const QString &context) const;
MessageItem *findMessage(const QString &context, const QString &sourcetext,
const QString &comment) const;
@@ -199,12 +174,12 @@ public:
static QString prettifyPlainFileName(const QString &fn);
static QString prettifyFileName(const QString &fn);
- bool setLanguageAndCountry(QLocale::Language lang, QLocale::Country country);
+ bool setLanguageAndTerritory(QLocale::Language lang, QLocale::Territory territory);
QLocale::Language language() const { return m_language; }
- QLocale::Country country() const { return m_country; }
- void setSourceLanguageAndCountry(QLocale::Language lang, QLocale::Country country);
+ QLocale::Territory territory() const { return m_territory; }
+ void setSourceLanguageAndTerritory(QLocale::Language lang, QLocale::Territory territory);
QLocale::Language sourceLanguage() const { return m_sourceLanguage; }
- QLocale::Country sourceCountry() const { return m_sourceCountry; }
+ QLocale::Territory sourceTerritory() const { return m_sourceTerritory; }
const QString &localizedLanguage() const { return m_localizedLanguage; }
const QStringList &numerusForms() const { return m_numerusForms; }
@@ -244,8 +219,8 @@ private:
QString m_srcFileName;
QLocale::Language m_language;
QLocale::Language m_sourceLanguage;
- QLocale::Country m_country;
- QLocale::Country m_sourceCountry;
+ QLocale::Territory m_territory;
+ QLocale::Territory m_sourceTerritory;
bool m_relativeLocations;
Translator::ExtraData m_extra;
@@ -309,7 +284,7 @@ public:
QString context() const { return m_context; }
QString comment() const { return m_comment; }
- int messageCount() const { return m_messageLists.isEmpty() ? 0 : m_messageLists[0].count(); }
+ int messageCount() const { return m_messageLists.isEmpty() ? 0 : m_messageLists[0].size(); }
// For item count in context list
int getNumFinished() const { return m_finishedCount; }
int getNumEditable() const { return m_editableCount; }
@@ -402,8 +377,8 @@ public:
void moveModel(int oldPos, int newPos); // newPos is *before* removing at oldPos; note that this does not emit update signals
// Entire multi-model
- int modelCount() const { return m_dataModels.count(); }
- int contextCount() const { return m_multiContextList.count(); }
+ int modelCount() const { return m_dataModels.size(); }
+ int contextCount() const { return m_multiContextList.size(); }
int messageCount() const { return m_numMessages; }
// Next two needed for progress indicator in main window
int getNumFinished() const { return m_numFinished; }
diff --git a/src/linguist/linguist/phrase.cpp b/src/linguist/linguist/phrase.cpp
index 1d4688d4d..7bf594118 100644
--- a/src/linguist/linguist/phrase.cpp
+++ b/src/linguist/linguist/phrase.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "phrase.h"
#include "translator.h"
@@ -39,7 +14,7 @@
QT_BEGIN_NAMESPACE
-static QString protect(const QString & str)
+static QString xmlProtect(const QString & str)
{
QString p = str;
p.replace(QLatin1Char('&'), QLatin1String("&amp;"));
@@ -189,8 +164,8 @@ PhraseBook::PhraseBook() :
m_changed(false),
m_language(QLocale::C),
m_sourceLanguage(QLocale::C),
- m_country(QLocale::AnyCountry),
- m_sourceCountry(QLocale::AnyCountry)
+ m_territory(QLocale::AnyTerritory),
+ m_sourceTerritory(QLocale::AnyTerritory)
{
}
@@ -199,21 +174,21 @@ PhraseBook::~PhraseBook()
qDeleteAll(m_phrases);
}
-void PhraseBook::setLanguageAndCountry(QLocale::Language lang, QLocale::Country country)
+void PhraseBook::setLanguageAndTerritory(QLocale::Language lang, QLocale::Territory territory)
{
- if (m_language == lang && m_country == country)
+ if (m_language == lang && m_territory == territory)
return;
m_language = lang;
- m_country = country;
+ m_territory = territory;
setModified(true);
}
-void PhraseBook::setSourceLanguageAndCountry(QLocale::Language lang, QLocale::Country country)
+void PhraseBook::setSourceLanguageAndTerritory(QLocale::Language lang, QLocale::Territory territory)
{
- if (m_sourceLanguage == lang && m_sourceCountry == country)
+ if (m_sourceLanguage == lang && m_sourceTerritory == territory)
return;
m_sourceLanguage = lang;
- m_sourceCountry = country;
+ m_sourceTerritory = territory;
setModified(true);
}
@@ -230,21 +205,21 @@ bool PhraseBook::load(const QString &fileName, bool *langGuessed)
reader.setNamespaceProcessing(false);
bool ok = hand->parse();
- Translator::languageAndCountry(hand->language(), &m_language, &m_country);
+ Translator::languageAndTerritory(hand->language(), &m_language, &m_territory);
*langGuessed = false;
if (m_language == QLocale::C) {
QLocale sys;
m_language = sys.language();
- m_country = sys.country();
+ m_territory = sys.territory();
*langGuessed = true;
}
QString lang = hand->sourceLanguage();
if (lang.isEmpty()) {
m_sourceLanguage = QLocale::C;
- m_sourceCountry = QLocale::AnyCountry;
+ m_sourceTerritory = QLocale::AnyTerritory;
} else {
- Translator::languageAndCountry(lang, &m_sourceLanguage, &m_sourceCountry);
+ Translator::languageAndTerritory(lang, &m_sourceLanguage, &m_sourceTerritory);
}
delete hand;
@@ -272,16 +247,16 @@ bool PhraseBook::save(const QString &fileName)
t << "<!DOCTYPE QPH>\n<QPH";
if (sourceLanguage() != QLocale::C)
t << " sourcelanguage=\""
- << Translator::makeLanguageCode(sourceLanguage(), sourceCountry()) << '"';
+ << Translator::makeLanguageCode(sourceLanguage(), sourceTerritory()) << '"';
if (language() != QLocale::C)
- t << " language=\"" << Translator::makeLanguageCode(language(), country()) << '"';
+ t << " language=\"" << Translator::makeLanguageCode(language(), territory()) << '"';
t << ">\n";
- for (Phrase *p : qAsConst(m_phrases)) {
+ for (Phrase *p : std::as_const(m_phrases)) {
t << "<phrase>\n";
- t << " <source>" << protect( p->source() ) << "</source>\n";
- t << " <target>" << protect( p->target() ) << "</target>\n";
+ t << " <source>" << xmlProtect( p->source() ) << "</source>\n";
+ t << " <target>" << xmlProtect( p->target() ) << "</target>\n";
if (!p->definition().isEmpty())
- t << " <definition>" << protect( p->definition() )
+ t << " <definition>" << xmlProtect( p->definition() )
<< "</definition>\n";
t << "</phrase>\n";
}
diff --git a/src/linguist/linguist/phrase.h b/src/linguist/linguist/phrase.h
index 19c6a21b4..9744ae670 100644
--- a/src/linguist/linguist/phrase.h
+++ b/src/linguist/linguist/phrase.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PHRASE_H
#define PHRASE_H
@@ -92,12 +67,12 @@ public:
QString friendlyPhraseBookName() const;
bool isModified() const { return m_changed; }
- void setLanguageAndCountry(QLocale::Language lang, QLocale::Country country);
+ void setLanguageAndTerritory(QLocale::Language lang, QLocale::Territory territory);
QLocale::Language language() const { return m_language; }
- QLocale::Country country() const { return m_country; }
- void setSourceLanguageAndCountry(QLocale::Language lang, QLocale::Country country);
+ QLocale::Territory territory() const { return m_territory; }
+ void setSourceLanguageAndTerritory(QLocale::Language lang, QLocale::Territory territory);
QLocale::Language sourceLanguage() const { return m_sourceLanguage; }
- QLocale::Country sourceCountry() const { return m_sourceCountry; }
+ QLocale::Territory sourceTerritory() const { return m_sourceTerritory; }
signals:
void modifiedChanged(bool changed);
@@ -117,8 +92,8 @@ private:
QLocale::Language m_language;
QLocale::Language m_sourceLanguage;
- QLocale::Country m_country;
- QLocale::Country m_sourceCountry;
+ QLocale::Territory m_territory;
+ QLocale::Territory m_sourceTerritory;
friend class QphHandler;
friend class Phrase;
diff --git a/src/linguist/linguist/phrasebookbox.cpp b/src/linguist/linguist/phrasebookbox.cpp
index 60f8f25c4..2f8d54d3e 100644
--- a/src/linguist/linguist/phrasebookbox.cpp
+++ b/src/linguist/linguist/phrasebookbox.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
/* TRANSLATOR PhraseBookBox
diff --git a/src/linguist/linguist/phrasebookbox.h b/src/linguist/linguist/phrasebookbox.h
index 85a71d835..6421f1bd8 100644
--- a/src/linguist/linguist/phrasebookbox.h
+++ b/src/linguist/linguist/phrasebookbox.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PHRASEBOOKBOX_H
#define PHRASEBOOKBOX_H
diff --git a/src/linguist/linguist/phrasebookbox.ui b/src/linguist/linguist/phrasebookbox.ui
index 426b069d3..ba1f66b87 100644
--- a/src/linguist/linguist/phrasebookbox.ui
+++ b/src/linguist/linguist/phrasebookbox.ui
@@ -1,32 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+</comment>
<class>PhraseBookBox</class>
<widget class="QDialog" name="PhraseBookBox">
<property name="geometry">
diff --git a/src/linguist/linguist/phrasemodel.cpp b/src/linguist/linguist/phrasemodel.cpp
index 8a820e1ce..60e1256d7 100644
--- a/src/linguist/linguist/phrasemodel.cpp
+++ b/src/linguist/linguist/phrasemodel.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "phrasemodel.h"
@@ -32,7 +7,7 @@ QT_BEGIN_NAMESPACE
void PhraseModel::removePhrases()
{
- int r = plist.count();
+ int r = plist.size();
if (r > 0) {
beginResetModel();
plist.clear();
@@ -59,7 +34,7 @@ void PhraseModel::setPhrase(const QModelIndex &indx, Phrase *ph)
QModelIndex PhraseModel::addPhrase(Phrase *p)
{
- int r = plist.count();
+ int r = plist.size();
plist.append(p);
@@ -89,7 +64,7 @@ QModelIndex PhraseModel::index(Phrase * const phr) const
int PhraseModel::rowCount(const QModelIndex &) const
{
- return plist.count();
+ return plist.size();
}
int PhraseModel::columnCount(const QModelIndex &) const
@@ -130,7 +105,7 @@ bool PhraseModel::setData(const QModelIndex & index, const QVariant & value, int
int row = index.row();
int column = index.column();
- if (!index.isValid() || row >= plist.count() || role != Qt::EditRole)
+ if (!index.isValid() || row >= plist.size() || role != Qt::EditRole)
return false;
Phrase *phrase = plist.at(row);
@@ -158,7 +133,7 @@ QVariant PhraseModel::data(const QModelIndex &index, int role) const
int row = index.row();
int column = index.column();
- if (row >= plist.count() || !index.isValid())
+ if (row >= plist.size() || !index.isValid())
return QVariant();
Phrase *phrase = plist.at(row);
diff --git a/src/linguist/linguist/phrasemodel.h b/src/linguist/linguist/phrasemodel.h
index 8fc165386..0b289f97f 100644
--- a/src/linguist/linguist/phrasemodel.h
+++ b/src/linguist/linguist/phrasemodel.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PHRASEMODEL_H
#define PHRASEMODEL_H
diff --git a/src/linguist/linguist/phraseview.cpp b/src/linguist/linguist/phraseview.cpp
index 9c7a4f966..81e7d49de 100644
--- a/src/linguist/linguist/phraseview.cpp
+++ b/src/linguist/linguist/phraseview.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "globals.h"
#include "mainwindow.h"
@@ -37,6 +12,7 @@
#include <QHeaderView>
#include <QKeyEvent>
#include <QSettings>
+#include <QShortcut>
#include <QTreeView>
#include <QWidget>
#include <QDebug>
@@ -67,8 +43,12 @@ PhraseView::PhraseView(MultiDataModel *model, QList<QHash<QString, QList<Phrase
setRootIsDecorated(false);
setItemsExpandable(false);
- for (int i = 0; i < 10; i++)
- (void) new GuessShortcut(i, this, &PhraseView::guessShortcut);
+ for (int i = 0; i < 9; ++i) {
+ const auto key = static_cast<Qt::Key>(int(Qt::Key_1) + i);
+ auto shortCut = new QShortcut(Qt::CTRL | key, this);
+ connect(shortCut, &QShortcut::activated, this,
+ [i, this]() { this->guessShortcut(i); });
+ }
header()->setSectionResizeMode(QHeaderView::Interactive);
header()->setSectionsClickable(true);
@@ -214,9 +194,9 @@ static CandidateList similarTextHeuristicCandidates(MultiDataModel *model, int m
int score = stringmatcher.getSimilarityScore(s);
- if (candidates.count() == maxCandidates && score > scores[maxCandidates - 1])
+ if (candidates.size() == maxCandidates && score > scores[maxCandidates - 1])
candidates.removeLast();
- if (candidates.count() < maxCandidates && score >= textSimilarityThreshold ) {
+ if (candidates.size() < maxCandidates && score >= textSimilarityThreshold ) {
Candidate cand(mtm.context(), s, mtm.comment(), mtm.translation());
int i;
diff --git a/src/linguist/linguist/phraseview.h b/src/linguist/linguist/phraseview.h
index 118bc250a..3b23c93bd 100644
--- a/src/linguist/linguist/phraseview.h
+++ b/src/linguist/linguist/phraseview.h
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PHRASEVIEW_H
#define PHRASEVIEW_H
#include <QList>
-#include <QShortcut>
#include <QTreeView>
#include "phrase.h"
@@ -41,32 +15,6 @@ static const int DefaultMaxCandidates = 5;
class MultiDataModel;
class PhraseModel;
-class GuessShortcut : public QShortcut
-{
- Q_OBJECT
-public:
- template<class Obj, typename Func>
- GuessShortcut(int nkey, Obj *parent, Func member)
- : QShortcut(parent), nrkey(nkey)
- {
- const auto key = static_cast<Qt::Key>(int(Qt::Key_1) + nrkey);
- setKey(Qt::CTRL | key);
- connect(this, &GuessShortcut::activated,
- this, &GuessShortcut::keyActivated);
- connect(this, &GuessShortcut::activated,
- parent, member);
- }
-
-private slots:
- void keyActivated() { emit activated(nrkey); }
-
-signals:
- void activated(int nkey);
-
-private:
- int nrkey;
-};
-
class PhraseView : public QTreeView
{
Q_OBJECT
diff --git a/src/linguist/linguist/printout.cpp b/src/linguist/linguist/printout.cpp
index 471aab6df..e1a096ccc 100644
--- a/src/linguist/linguist/printout.cpp
+++ b/src/linguist/linguist/printout.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "printout.h"
@@ -33,11 +8,13 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
PrintOut::PrintOut(QPrinter *printer)
: pr(printer), nextRule(NoRule), page(0)
{
p.begin(pr);
- QFont f(QLatin1String("Arial"));
+ QFont f(QStringList{u"Arial"_s});
f8 = f;
f8.setPointSize(8);
f10 = f;
@@ -84,7 +61,7 @@ void PrintOut::flushLine(bool /* mayBreak */)
else if (!firstParagraph)
drawRule(nextRule);
- for (int i = 0; i < cp.boxes.count(); ++i) {
+ for (int i = 0; i < cp.boxes.size(); ++i) {
Box b = cp.boxes[i];
b.rect.translate(0, voffset);
QRect r = b.rect;
diff --git a/src/linguist/linguist/printout.h b/src/linguist/linguist/printout.h
index f8e174195..e579e80ed 100644
--- a/src/linguist/linguist/printout.h
+++ b/src/linguist/linguist/printout.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PRINTOUT_H
#define PRINTOUT_H
diff --git a/src/linguist/linguist/recentfiles.cpp b/src/linguist/linguist/recentfiles.cpp
index 703fdf2d7..cd6088a58 100644
--- a/src/linguist/linguist/recentfiles.cpp
+++ b/src/linguist/linguist/recentfiles.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "recentfiles.h"
#include "globals.h"
@@ -96,7 +71,7 @@ void RecentFiles::addFiles(const QStringList &names)
m_strLists.removeAt(index);
m_clone1st = true;
} else {
- if (m_strLists.count() >= m_maxEntries)
+ if (m_strLists.size() >= m_maxEntries)
m_strLists.removeLast();
m_clone1st = false;
}
@@ -115,11 +90,7 @@ void RecentFiles::readConfig()
{
m_strLists.clear();
QVariant val = QSettings().value(configKey());
- if (val.type() == QVariant::StringList) { // Backwards compat to Qt < 4.5
- const auto stringList = val.toStringList();
- for (const QString &s : stringList)
- m_strLists << QStringList(QFileInfo(s).canonicalFilePath());
- } else {
+ if (val.metaType().id() == QMetaType::QVariantList) {
const auto list = val.toList();
for (const QVariant &v : list)
m_strLists << v.toStringList();
diff --git a/src/linguist/linguist/recentfiles.h b/src/linguist/linguist/recentfiles.h
index bb72221de..3554d8dd6 100644
--- a/src/linguist/linguist/recentfiles.h
+++ b/src/linguist/linguist/recentfiles.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef RECENTFILES_H
#define RECENTFILES_H
diff --git a/src/linguist/linguist/sourcecodeview.cpp b/src/linguist/linguist/sourcecodeview.cpp
index 0384a9db6..a693d420d 100644
--- a/src/linguist/linguist/sourcecodeview.cpp
+++ b/src/linguist/linguist/sourcecodeview.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "sourcecodeview.h"
diff --git a/src/linguist/linguist/sourcecodeview.h b/src/linguist/linguist/sourcecodeview.h
index 11f8da147..0416afd26 100644
--- a/src/linguist/linguist/sourcecodeview.h
+++ b/src/linguist/linguist/sourcecodeview.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef SOURCECODEVIEW_H
#define SOURCECODEVIEW_H
diff --git a/src/linguist/linguist/statistics.cpp b/src/linguist/linguist/statistics.cpp
index 24dfeea2e..d3a15cbe0 100644
--- a/src/linguist/linguist/statistics.cpp
+++ b/src/linguist/linguist/statistics.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "statistics.h"
diff --git a/src/linguist/linguist/statistics.h b/src/linguist/linguist/statistics.h
index 8f8939201..9d169f218 100644
--- a/src/linguist/linguist/statistics.h
+++ b/src/linguist/linguist/statistics.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef STATISTICS_H
#define STATISTICS_H
diff --git a/src/linguist/linguist/statistics.ui b/src/linguist/linguist/statistics.ui
index 68798c43a..2cd1c1993 100644
--- a/src/linguist/linguist/statistics.ui
+++ b/src/linguist/linguist/statistics.ui
@@ -1,34 +1,10 @@
-<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+</comment>
<class>Statistics</class>
- <widget class="QDialog" name="linguist_stats">
+ <widget class="QDialog" name="Statistics">
<property name="geometry">
<rect>
<x>0</x>
@@ -351,7 +327,7 @@
<connection>
<sender>closeBtn</sender>
<signal>clicked()</signal>
- <receiver>linguist_stats</receiver>
+ <receiver>Statistics</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
diff --git a/src/linguist/linguist/translatedialog.cpp b/src/linguist/linguist/translatedialog.cpp
index bb52be371..36be31d79 100644
--- a/src/linguist/linguist/translatedialog.cpp
+++ b/src/linguist/linguist/translatedialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "translatedialog.h"
diff --git a/src/linguist/linguist/translatedialog.h b/src/linguist/linguist/translatedialog.h
index fb086c8a4..f76dcf248 100644
--- a/src/linguist/linguist/translatedialog.h
+++ b/src/linguist/linguist/translatedialog.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef TRANSLATEDIALOG_H
#define TRANSLATEDIALOG_H
diff --git a/src/linguist/linguist/translatedialog.ui b/src/linguist/linguist/translatedialog.ui
index 326a8d957..ee4af31b0 100644
--- a/src/linguist/linguist/translatedialog.ui
+++ b/src/linguist/linguist/translatedialog.ui
@@ -1,34 +1,10 @@
-<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+</comment>
<class>TranslateDialog</class>
- <widget class="QDialog" name="translateDialog">
+ <widget class="QDialog" name="TranslateDialog">
<property name="geometry">
<rect>
<x>0</x>
@@ -230,7 +206,7 @@
<connection>
<sender>cancel</sender>
<signal>clicked()</signal>
- <receiver>translateDialog</receiver>
+ <receiver>TranslateDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
diff --git a/src/linguist/linguist/translationsettings.ui b/src/linguist/linguist/translationsettings.ui
index c868360e6..341fe498b 100644
--- a/src/linguist/linguist/translationsettings.ui
+++ b/src/linguist/linguist/translationsettings.ui
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TranslationSettingsDialog</class>
- <widget class="QDialog" name="translationSettingsDialog">
+ <widget class="QDialog" name="TranslationSettingsDialog">
<property name="geometry">
<rect>
<x>0</x>
@@ -120,7 +120,7 @@
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
- <receiver>translationSettingsDialog</receiver>
+ <receiver>TranslationSettingsDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
diff --git a/src/linguist/linguist/translationsettingsdialog.cpp b/src/linguist/linguist/translationsettingsdialog.cpp
index 919258c6e..b75c8c4ac 100644
--- a/src/linguist/linguist/translationsettingsdialog.cpp
+++ b/src/linguist/linguist/translationsettingsdialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "translationsettingsdialog.h"
@@ -41,14 +16,16 @@ TranslationSettingsDialog::TranslationSettingsDialog(QWidget *parent)
m_ui.setupUi(this);
for (int i = QLocale::C + 1; i < QLocale::LastLanguage; ++i) {
- QString lang = QLocale::languageToString(QLocale::Language(i));
- auto loc = QLocale(QLocale::Language(i));
- if (loc.language() != QLocale::English) {
- QString nln = loc.nativeLanguageName();
- if (!nln.isEmpty()) {
- //: <english> (<endonym>) (language and country names)
- lang = tr("%1 (%2)").arg(lang, nln);
- }
+ const auto language = QLocale::Language(i);
+ QString lang = QLocale::languageToString(language);
+ const auto loc = QLocale(language);
+ // Languages for which we have no data get mapped to the default locale;
+ // its endonym is unrelated to the language requested. For English, the
+ // endonym is the name we already have; don't repeat it.
+ if (loc.language() == language && language != QLocale::English) {
+ const QString native = loc.nativeLanguageName();
+ if (!native.isEmpty()) //: <english> (<endonym>) (language names)
+ lang = tr("%1 (%2)").arg(lang, native);
}
m_ui.srcCbLanguageList->addItem(lang, QVariant(i));
}
@@ -74,35 +51,37 @@ void TranslationSettingsDialog::setPhraseBook(PhraseBook *phraseBook)
setWindowTitle(tr("Settings for '%1' - Qt Linguist").arg(fn));
}
-static void fillCountryCombo(const QVariant &lng, QComboBox *combo)
+static void fillTerritoryCombo(const QVariant &lng, QComboBox *combo)
{
combo->clear();
QLocale::Language lang = QLocale::Language(lng.toInt());
if (lang != QLocale::C) {
- for (QLocale::Country cntr : QLocale::countriesForLanguage(lang)) {
- QString country = QLocale::countryToString(cntr);
- auto loc = QLocale(lang, cntr);
+ const auto matches = QLocale::matchingLocales(lang, QLocale::AnyScript,
+ QLocale::AnyTerritory);
+ for (const auto &loc : matches) {
+ QString name = QLocale::territoryToString(loc.territory());
if (loc.language() != QLocale::English) {
- QString ncn = loc.nativeCountryName();
- if (!ncn.isEmpty())
- country = TranslationSettingsDialog::tr("%1 (%2)").arg(country, ncn);
+ QString endonym = loc.nativeTerritoryName();
+ if (!endonym.isEmpty())
+ name = TranslationSettingsDialog::tr("%1 (%2)").arg(name, endonym);
}
- combo->addItem(country, QVariant(cntr));
+ combo->addItem(name, QVariant(loc.territory()));
}
combo->model()->sort(0, Qt::AscendingOrder);
}
- combo->insertItem(0, TranslationSettingsDialog::tr("Any Country"), QVariant(QLocale::AnyCountry));
+ combo->insertItem(0, TranslationSettingsDialog::tr("Any Territory"),
+ QVariant(QLocale::AnyTerritory));
combo->setCurrentIndex(0);
}
void TranslationSettingsDialog::on_srcCbLanguageList_currentIndexChanged(int idx)
{
- fillCountryCombo(m_ui.srcCbLanguageList->itemData(idx), m_ui.srcCbCountryList);
+ fillTerritoryCombo(m_ui.srcCbLanguageList->itemData(idx), m_ui.srcCbCountryList);
}
void TranslationSettingsDialog::on_tgtCbLanguageList_currentIndexChanged(int idx)
{
- fillCountryCombo(m_ui.tgtCbLanguageList->itemData(idx), m_ui.tgtCbCountryList);
+ fillTerritoryCombo(m_ui.tgtCbLanguageList->itemData(idx), m_ui.tgtCbCountryList);
}
void TranslationSettingsDialog::on_buttonBox_accepted()
@@ -113,7 +92,7 @@ void TranslationSettingsDialog::on_buttonBox_accepted()
itemindex = m_ui.tgtCbCountryList->currentIndex();
var = m_ui.tgtCbCountryList->itemData(itemindex);
- QLocale::Country country = QLocale::Country(var.toInt());
+ QLocale::Territory territory = QLocale::Territory(var.toInt());
itemindex = m_ui.srcCbLanguageList->currentIndex();
var = m_ui.srcCbLanguageList->itemData(itemindex);
@@ -121,14 +100,14 @@ void TranslationSettingsDialog::on_buttonBox_accepted()
itemindex = m_ui.srcCbCountryList->currentIndex();
var = m_ui.srcCbCountryList->itemData(itemindex);
- QLocale::Country country2 = QLocale::Country(var.toInt());
+ QLocale::Territory territory2 = QLocale::Territory(var.toInt());
if (m_phraseBook) {
- m_phraseBook->setLanguageAndCountry(lang, country);
- m_phraseBook->setSourceLanguageAndCountry(lang2, country2);
+ m_phraseBook->setLanguageAndTerritory(lang, territory);
+ m_phraseBook->setSourceLanguageAndTerritory(lang2, territory2);
} else {
- m_dataModel->setLanguageAndCountry(lang, country);
- m_dataModel->setSourceLanguageAndCountry(lang2, country2);
+ m_dataModel->setLanguageAndTerritory(lang, territory);
+ m_dataModel->setSourceLanguageAndTerritory(lang2, territory2);
}
accept();
@@ -137,30 +116,30 @@ void TranslationSettingsDialog::on_buttonBox_accepted()
void TranslationSettingsDialog::showEvent(QShowEvent *)
{
QLocale::Language lang, lang2;
- QLocale::Country country, country2;
+ QLocale::Territory territory, territory2;
if (m_phraseBook) {
lang = m_phraseBook->language();
- country = m_phraseBook->country();
+ territory = m_phraseBook->territory();
lang2 = m_phraseBook->sourceLanguage();
- country2 = m_phraseBook->sourceCountry();
+ territory2 = m_phraseBook->sourceTerritory();
} else {
lang = m_dataModel->language();
- country = m_dataModel->country();
+ territory = m_dataModel->territory();
lang2 = m_dataModel->sourceLanguage();
- country2 = m_dataModel->sourceCountry();
+ territory2 = m_dataModel->sourceTerritory();
}
int itemindex = m_ui.tgtCbLanguageList->findData(QVariant(int(lang)));
m_ui.tgtCbLanguageList->setCurrentIndex(itemindex == -1 ? 0 : itemindex);
- itemindex = m_ui.tgtCbCountryList->findData(QVariant(int(country)));
+ itemindex = m_ui.tgtCbCountryList->findData(QVariant(int(territory)));
m_ui.tgtCbCountryList->setCurrentIndex(itemindex == -1 ? 0 : itemindex);
itemindex = m_ui.srcCbLanguageList->findData(QVariant(int(lang2)));
m_ui.srcCbLanguageList->setCurrentIndex(itemindex == -1 ? 0 : itemindex);
- itemindex = m_ui.srcCbCountryList->findData(QVariant(int(country2)));
+ itemindex = m_ui.srcCbCountryList->findData(QVariant(int(territory2)));
m_ui.srcCbCountryList->setCurrentIndex(itemindex == -1 ? 0 : itemindex);
}
diff --git a/src/linguist/linguist/translationsettingsdialog.h b/src/linguist/linguist/translationsettingsdialog.h
index 33340ea6f..28e8f418c 100644
--- a/src/linguist/linguist/translationsettingsdialog.h
+++ b/src/linguist/linguist/translationsettingsdialog.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef TRANSLATIONSETTINGSDIALOG_H
#define TRANSLATIONSETTINGSDIALOG_H
diff --git a/src/linguist/lprodump/.prev_CMakeLists.txt b/src/linguist/lprodump/.prev_CMakeLists.txt
deleted file mode 100644
index 705b39980..000000000
--- a/src/linguist/lprodump/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-# Generated from lprodump.pro.
-
-#####################################################################
-## lprodump Tool:
-#####################################################################
-
-qt_get_tool_target_name(target_name lprodump)
-qt_add_tool(${target_name}
- TARGET_DESCRIPTION "Qt Linguist QMake Project Dump Tool"
- SOURCES
- ../shared/ioutils.cpp ../shared/ioutils.h
- ../shared/profileevaluator.cpp ../shared/profileevaluator.h
- ../shared/proitems.cpp ../shared/proitems.h
- ../shared/qmake_global.h
- ../shared/qmakebuiltins.cpp
- ../shared/qmakeevaluator.cpp ../shared/qmakeevaluator.h ../shared/qmakeevaluator_p.h
- ../shared/qmakeglobals.cpp ../shared/qmakeglobals.h
- ../shared/qmakeparser.cpp ../shared/qmakeparser.h
- ../shared/qmakevfs.cpp ../shared/qmakevfs.h
- ../shared/qrcreader.cpp ../shared/qrcreader.h
- main.cpp
- DEFINES
- PROEVALUATOR_CUMULATIVE
- PROEVALUATOR_DEBUG
- PROEVALUATOR_INIT_PROPS
- QMAKE_BUILTIN_PRFS
- QMAKE_OVERRIDE_PRFS
- QT_NO_CAST_FROM_ASCII
- QT_NO_CAST_TO_ASCII
- INCLUDE_DIRECTORIES
- ../shared
-)
-
-# Resources:
-set_source_files_properties("../shared/exclusive_builds.prf"
- PROPERTIES QT_RESOURCE_ALIAS "exclusive_builds.prf"
-)
-set(proparser_resource_files
- "exclusive_builds.prf"
-)
-
-qt_add_resource(${target_name} "proparser"
- PREFIX
- "/qmake/override_features"
- BASE
- "../shared"
- FILES
- ${proparser_resource_files}
-)
-
-
-#### Keys ignored in scope 1:.:.:lprodump.pro:<TRUE>:
-# QMAKE_TARGET_DESCRIPTION = "Qt Linguist QMake Project Dump Tool"
-# QT_TOOL_ENV = "qmake"
-# _OPTION = "host_build"
-# qmake.name = "QMAKE"
-# qmake.value = "$$shell_path($$QMAKE_QMAKE)"
diff --git a/src/linguist/lprodump/CMakeLists.txt b/src/linguist/lprodump/CMakeLists.txt
index a2ed6ba99..7a7308e54 100644
--- a/src/linguist/lprodump/CMakeLists.txt
+++ b/src/linguist/lprodump/CMakeLists.txt
@@ -1,13 +1,15 @@
-# Generated from lprodump.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## lprodump Tool:
#####################################################################
qt_get_tool_target_name(target_name lprodump)
-qt_add_tool(${target_name}
+qt_internal_add_tool(${target_name}
TARGET_DESCRIPTION "Qt Linguist QMake Project Dump Tool"
- TOOLS_TARGET Linguist # special case
+ TOOLS_TARGET Linguist
+ INSTALL_DIR "${INSTALL_LIBEXECDIR}"
SOURCES
../shared/ioutils.cpp ../shared/ioutils.h
../shared/profileevaluator.cpp ../shared/profileevaluator.h
@@ -30,17 +32,20 @@ qt_add_tool(${target_name}
QT_NO_CAST_TO_ASCII
INCLUDE_DIRECTORIES
../shared
+ LIBRARIES
+ Qt::CorePrivate
)
+set_source_files_properties(../shared/qmakeparser.cpp PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
+
+qt_internal_return_unless_building_tools()
+
# Resources:
-set_source_files_properties("../shared/exclusive_builds.prf"
- PROPERTIES QT_RESOURCE_ALIAS "exclusive_builds.prf"
-)
set(proparser_resource_files
- "exclusive_builds.prf"
+ "../shared/exclusive_builds.prf"
)
-qt_add_resource(${target_name} "proparser"
+qt_internal_add_resource(${target_name} "proparser"
PREFIX
"/qmake/override_features"
BASE
@@ -49,10 +54,10 @@ qt_add_resource(${target_name} "proparser"
${proparser_resource_files}
)
-
-#### Keys ignored in scope 1:.:.:lprodump.pro:<TRUE>:
-# QMAKE_TARGET_DESCRIPTION = "Qt Linguist QMake Project Dump Tool"
-# QT_TOOL_ENV = "qmake"
-# _OPTION = "host_build"
-# qmake.name = "QMAKE"
-# qmake.value = "$$shell_path($$QMAKE_QMAKE)"
+qt_internal_extend_target(${target_name} CONDITION WIN32
+ SOURCES
+ ../shared/registry.cpp
+ ../shared/registry_p.h
+ DEFINES
+ _SCL_SECURE_NO_WARNINGS
+)
diff --git a/src/linguist/lprodump/lprodump.pro b/src/linguist/lprodump/lprodump.pro
deleted file mode 100644
index a1bcace55..000000000
--- a/src/linguist/lprodump/lprodump.pro
+++ /dev/null
@@ -1,22 +0,0 @@
-option(host_build)
-QT = core
-
-DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII
-
-include(../shared/proparser.pri)
-
-DEFINES += PROEVALUATOR_DEBUG
-
-HEADERS += \
- ../shared/qrcreader.h
-
-SOURCES += \
- ../shared/qrcreader.cpp \
- main.cpp
-
-qmake.name = QMAKE
-qmake.value = $$shell_path($$QMAKE_QMAKE)
-QT_TOOL_ENV += qmake
-
-QMAKE_TARGET_DESCRIPTION = "Qt Linguist QMake Project Dump Tool"
-load(qt_tool)
diff --git a/src/linguist/lprodump/main.cpp b/src/linguist/lprodump/main.cpp
index 9ef5faa9c..3d30e4a63 100644
--- a/src/linguist/lprodump/main.cpp
+++ b/src/linguist/lprodump/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <profileevaluator.h>
#include <profileutils.h>
@@ -38,6 +13,7 @@
#include <QtCore/QDirIterator>
#include <QtCore/QFile>
#include <QtCore/QFileInfo>
+#include <QtCore/QLibraryInfo>
#include <QtCore/QRegularExpression>
#include <QtCore/QString>
#include <QtCore/QStringList>
@@ -48,6 +24,8 @@
#include <iostream>
+using namespace Qt::StringLiterals;
+
static void printOut(const QString &out)
{
std::cout << qPrintable(out);
@@ -79,34 +57,32 @@ void setValue(QJsonObject &obj, const char *key, T value)
obj[QLatin1String(key)] = toJsonValue(value);
}
-class LD {
- Q_DECLARE_TR_FUNCTIONS(LProDump)
-};
-
static void printUsage()
{
- printOut(LD::tr(
- "Usage:\n"
- " lprodump [options] project-file...\n"
- "lprodump is part of Qt's Linguist tool chain. It extracts information\n"
- "from qmake projects to a .json file. This file can be passed to\n"
- "lupdate/lrelease using the -project option.\n\n"
- "Options:\n"
- " -help Display this information and exit.\n"
- " -silent\n"
- " Do not explain what is being done.\n"
- " -pro <filename>\n"
- " Name of a .pro file. Useful for files with .pro file syntax but\n"
- " different file suffix. Projects are recursed into and merged.\n"
- " -pro-out <directory>\n"
- " Virtual output directory for processing subsequent .pro files.\n"
- " -pro-debug\n"
- " Trace processing .pro files. Specify twice for more verbosity.\n"
- " -out <filename>\n"
- " Name of the output file.\n"
- " -version\n"
- " Display the version of lprodump and exit.\n"
- ));
+ printOut(uR"(Usage:
+ lprodump [options] project-file...
+lprodump is part of Qt's Linguist tool chain. It extracts information
+from qmake projects to a .json file. This file can be passed to
+lupdate/lrelease using the -project option.
+
+Options:
+ -help Display this information and exit.
+ -silent
+ Do not explain what is being done.
+ -pro <filename>
+ Name of a .pro file. Useful for files with .pro file syntax but
+ different file suffix. Projects are recursed into and merged.
+ -pro-out <directory>
+ Virtual output directory for processing subsequent .pro files.
+ -pro-debug
+ Trace processing .pro files. Specify twice for more verbosity.
+ -out <filename>
+ Name of the output file.
+ -translations-variables <variable_1>[,<variable_2>,...]
+ Comma-separated list of QMake variables containing .ts files.
+ -version
+ Display the version of lprodump and exit.
+)"_s);
}
static void print(const QString &fileName, int lineNo, const QString &msg)
@@ -143,13 +119,6 @@ public:
static EvalHandler evalHandler;
-static bool isSupportedExtension(const QString &ext)
-{
- return ext == QLatin1String("qml")
- || ext == QLatin1String("js") || ext == QLatin1String("qs")
- || ext == QLatin1String("ui") || ext == QLatin1String("jui");
-}
-
static QStringList getResources(const QString &resourceFile, QMakeVfs *vfs)
{
Q_ASSERT(vfs);
@@ -159,12 +128,12 @@ static QStringList getResources(const QString &resourceFile, QMakeVfs *vfs)
QString errStr;
if (vfs->readFile(vfs->idForFileName(resourceFile, QMakeVfs::VfsCumulative),
&content, &errStr) != QMakeVfs::ReadOk) {
- printErr(LD::tr("lprodump error: Cannot read %1: %2\n").arg(resourceFile, errStr));
+ printErr(QStringLiteral("lprodump error: Cannot read %1: %2\n").arg(resourceFile, errStr));
return QStringList();
}
const ReadQrcResult rqr = readQrcFile(resourceFile, content);
if (rqr.hasError()) {
- printErr(LD::tr("lprodump error: %1:%2: %3\n")
+ printErr(QStringLiteral("lprodump error: %1:%2: %3\n")
.arg(resourceFile, QString::number(rqr.line), rqr.errorString));
}
return rqr.files;
@@ -180,7 +149,7 @@ static QStringList getSources(const char *var, const char *vvar, const QStringLi
}
static QStringList getSources(const ProFileEvaluator &visitor, const QString &projectDir,
- const QStringList &excludes, QMakeVfs *vfs)
+ QMakeVfs *vfs)
{
QStringList baseVPaths;
baseVPaths += visitor.absolutePathValues(QLatin1String("VPATH"), projectDir);
@@ -203,7 +172,7 @@ static QStringList getSources(const ProFileEvaluator &visitor, const QString &pr
+ visitor.values(QLatin1String("DEPLOYMENT"));
installs.removeDuplicates();
QDir baseDir(projectDir);
- for (const QString &inst : qAsConst(installs)) {
+ for (const QString &inst : std::as_const(installs)) {
for (const QString &file : visitor.values(inst + QLatin1String(".files"))) {
QFileInfo info(file);
if (!info.isAbsolute())
@@ -232,18 +201,6 @@ static QStringList getSources(const ProFileEvaluator &visitor, const QString &pr
sourceFiles.removeDuplicates();
sourceFiles.sort();
-
- for (const QString &ex : excludes) {
- // TODO: take advantage of the file list being sorted
- QRegularExpression rx(QRegularExpression::wildcardToRegularExpression(ex));
- for (auto it = sourceFiles.begin(); it != sourceFiles.end(); ) {
- if (rx.match(*it).hasMatch())
- it = sourceFiles.erase(it);
- else
- ++it;
- }
- }
-
return sourceFiles;
}
@@ -272,11 +229,13 @@ static void excludeProjects(const ProFileEvaluator &visitor, QStringList *subPro
}
static QJsonArray processProjects(bool topLevel, const QStringList &proFiles,
+ const QStringList &translationsVariables,
const QHash<QString, QString> &outDirMap,
ProFileGlobals *option, QMakeVfs *vfs, QMakeParser *parser,
bool *fail);
-static QJsonObject processProject(const QString &proFile, ProFileGlobals *option, QMakeVfs *vfs,
+static QJsonObject processProject(const QString &proFile, const QStringList &translationsVariables,
+ ProFileGlobals *option, QMakeVfs *vfs,
QMakeParser *parser, ProFileEvaluator &visitor)
{
QJsonObject result;
@@ -289,7 +248,7 @@ static QJsonObject processProject(const QString &proFile, ProFileGlobals *option
excludeProjects(visitor, &subProjects);
QStringList subProFiles;
QDir proDir(proPath);
- for (const QString &subdir : qAsConst(subProjects)) {
+ for (const QString &subdir : std::as_const(subProjects)) {
QString realdir = visitor.value(subdir + QLatin1String(".subdir"));
if (realdir.isEmpty())
realdir = visitor.value(subdir + QLatin1String(".file"));
@@ -304,23 +263,23 @@ static QJsonObject processProject(const QString &proFile, ProFileGlobals *option
subProFiles << subPro;
}
}
- QJsonArray subResults = processProjects(false, subProFiles,
+ QJsonArray subResults = processProjects(false, subProFiles, translationsVariables,
QHash<QString, QString>(), option, vfs, parser,
nullptr);
if (!subResults.isEmpty())
setValue(result, "subProjects", subResults);
} else {
- const QStringList excludes = getExcludes(visitor, proPath);
- const QStringList sourceFiles = getSources(visitor, proPath, excludes, vfs);
+ const QStringList sourceFiles = getSources(visitor, proPath, vfs);
setValue(result, "includePaths",
visitor.absolutePathValues(QLatin1String("INCLUDEPATH"), proPath));
- setValue(result, "excluded", excludes);
+ setValue(result, "excluded", getExcludes(visitor, proPath));
setValue(result, "sources", sourceFiles);
}
return result;
}
static QJsonArray processProjects(bool topLevel, const QStringList &proFiles,
+ const QStringList &translationsVariables,
const QHash<QString, QString> &outDirMap,
ProFileGlobals *option, QMakeVfs *vfs, QMakeParser *parser, bool *fail)
{
@@ -346,16 +305,20 @@ static QJsonArray processProjects(bool topLevel, const QStringList &proFiles,
continue;
}
- QJsonObject prj = processProject(proFile, option, vfs, parser, visitor);
+ QJsonObject prj = processProject(proFile, translationsVariables, option, vfs, parser,
+ visitor);
setValue(prj, "projectFile", proFile);
- if (visitor.contains(QLatin1String("TRANSLATIONS"))) {
- QStringList tsFiles;
+ QStringList tsFiles;
+ for (const QString &varName : translationsVariables) {
+ if (!visitor.contains(varName))
+ continue;
QDir proDir(QFileInfo(proFile).path());
- const QStringList translations = visitor.values(QLatin1String("TRANSLATIONS"));
+ const QStringList translations = visitor.values(varName);
for (const QString &tsFile : translations)
tsFiles << proDir.filePath(tsFile);
- setValue(prj, "translations", tsFiles);
}
+ if (!tsFiles.isEmpty())
+ setValue(prj, "translations", tsFiles);
if (visitor.contains(QLatin1String("LUPDATE_COMPILE_COMMANDS_PATH"))) {
const QStringList thepathjson = visitor.values(
QLatin1String("LUPDATE_COMPILE_COMMANDS_PATH"));
@@ -372,6 +335,7 @@ int main(int argc, char **argv)
QCoreApplication app(argc, argv);
QStringList args = app.arguments();
QStringList proFiles;
+ QStringList translationsVariables = { u"TRANSLATIONS"_s };
QString outDir = QDir::currentPath();
QHash<QString, QString> outDirMap;
QString outputFilePath;
@@ -387,7 +351,7 @@ int main(int argc, char **argv)
} else if (arg == QLatin1String("-out")) {
++i;
if (i == argc) {
- printErr(LD::tr("The option -out requires a parameter.\n"));
+ printErr(u"The option -out requires a parameter.\n"_s);
return 1;
}
outputFilePath = args[i];
@@ -396,12 +360,12 @@ int main(int argc, char **argv)
} else if (arg == QLatin1String("-pro-debug")) {
proDebug++;
} else if (arg == QLatin1String("-version")) {
- printOut(LD::tr("lprodump version %1\n").arg(QLatin1String(QT_VERSION_STR)));
+ printOut(QStringLiteral("lprodump version %1\n").arg(QLatin1String(QT_VERSION_STR)));
return 0;
} else if (arg == QLatin1String("-pro")) {
++i;
if (i == argc) {
- printErr(LD::tr("The -pro option should be followed by a filename of .pro file.\n"));
+ printErr(QStringLiteral("The -pro option should be followed by a filename of .pro file.\n"));
return 1;
}
QString file = QDir::cleanPath(QFileInfo(args[i]).absoluteFilePath());
@@ -410,21 +374,29 @@ int main(int argc, char **argv)
} else if (arg == QLatin1String("-pro-out")) {
++i;
if (i == argc) {
- printErr(LD::tr("The -pro-out option should be followed by a directory name.\n"));
+ printErr(QStringLiteral("The -pro-out option should be followed by a directory name.\n"));
return 1;
}
outDir = QDir::cleanPath(QFileInfo(args[i]).absoluteFilePath());
+ } else if (arg == u"-translations-variables"_s) {
+ ++i;
+ if (i == argc) {
+ printErr(u"The -translations-variables option must be followed by a "_s
+ u"comma-separated list of variable names.\n"_s);
+ return 1;
+ }
+ translationsVariables = args.at(i).split(QLatin1Char(','));
} else if (arg.startsWith(QLatin1String("-")) && arg != QLatin1String("-")) {
- printErr(LD::tr("Unrecognized option '%1'.\n").arg(arg));
+ printErr(QStringLiteral("Unrecognized option '%1'.\n").arg(arg));
return 1;
} else {
QFileInfo fi(arg);
if (!fi.exists()) {
- printErr(LD::tr("lprodump error: File '%1' does not exist.\n").arg(arg));
+ printErr(QStringLiteral("lprodump error: File '%1' does not exist.\n").arg(arg));
return 1;
}
if (!isProOrPriFile(arg)) {
- printErr(LD::tr("lprodump error: '%1' is neither a .pro nor a .pri file.\n")
+ printErr(QStringLiteral("lprodump error: '%1' is neither a .pro nor a .pri file.\n")
.arg(arg));
return 1;
}
@@ -442,8 +414,10 @@ int main(int argc, char **argv)
bool fail = false;
ProFileGlobals option;
option.qmake_abslocation = QString::fromLocal8Bit(qgetenv("QMAKE"));
- if (option.qmake_abslocation.isEmpty())
- option.qmake_abslocation = app.applicationDirPath() + QLatin1String("/qmake");
+ if (option.qmake_abslocation.isEmpty()) {
+ option.qmake_abslocation = QLibraryInfo::path(QLibraryInfo::BinariesPath)
+ + QLatin1String("/qmake");
+ }
option.debugLevel = proDebug;
option.initProperties();
option.setCommandLineArguments(QDir::currentPath(),
@@ -451,8 +425,8 @@ int main(int argc, char **argv)
QMakeVfs vfs;
QMakeParser parser(0, &vfs, &evalHandler);
- QJsonArray results = processProjects(true, proFiles, outDirMap, &option, &vfs,
- &parser, &fail);
+ QJsonArray results = processProjects(true, proFiles, translationsVariables, outDirMap, &option,
+ &vfs, &parser, &fail);
if (fail)
return 1;
@@ -462,7 +436,7 @@ int main(int argc, char **argv)
} else {
QFile f(outputFilePath);
if (!f.open(QIODevice::WriteOnly)) {
- printErr(LD::tr("lprodump error: Cannot open %1 for writing.\n").arg(outputFilePath));
+ printErr(QStringLiteral("lprodump error: Cannot open %1 for writing.\n").arg(outputFilePath));
return 1;
}
f.write(output);
diff --git a/src/linguist/lrelease-pro/.prev_CMakeLists.txt b/src/linguist/lrelease-pro/.prev_CMakeLists.txt
deleted file mode 100644
index 9669234ad..000000000
--- a/src/linguist/lrelease-pro/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-# Generated from lrelease-pro.pro.
-
-#####################################################################
-## lrelease-pro Tool:
-#####################################################################
-
-qt_get_tool_target_name(target_name lrelease-pro)
-qt_add_tool(${target_name}
- TARGET_DESCRIPTION "Qt Translation File Compiler for QMake Projects"
- SOURCES
- ../shared/runqttool.cpp ../shared/runqttool.h
- main.cpp
- DEFINES
- QT_NO_CAST_FROM_ASCII
- QT_NO_CAST_TO_ASCII
- INCLUDE_DIRECTORIES
- ../shared
-)
-
-#### Keys ignored in scope 1:.:.:lrelease-pro.pro:<TRUE>:
-# QMAKE_TARGET_DESCRIPTION = "Qt Translation File Compiler for QMake Projects"
-# QT_TOOL_ENV = "qmake"
-# _OPTION = "host_build"
-# qmake.name = "QMAKE"
-# qmake.value = "$$shell_path($$QMAKE_QMAKE)"
diff --git a/src/linguist/lrelease-pro/CMakeLists.txt b/src/linguist/lrelease-pro/CMakeLists.txt
index e77fdd3d3..437e26381 100644
--- a/src/linguist/lrelease-pro/CMakeLists.txt
+++ b/src/linguist/lrelease-pro/CMakeLists.txt
@@ -1,13 +1,15 @@
-# Generated from lrelease-pro.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## lrelease-pro Tool:
#####################################################################
qt_get_tool_target_name(target_name lrelease-pro)
-qt_add_tool(${target_name}
+qt_internal_add_tool(${target_name}
TARGET_DESCRIPTION "Qt Translation File Compiler for QMake Projects"
- TOOLS_TARGET Linguist # special case
+ TOOLS_TARGET Linguist
+ INSTALL_DIR "${INSTALL_LIBEXECDIR}"
SOURCES
../shared/runqttool.cpp ../shared/runqttool.h
main.cpp
@@ -17,10 +19,4 @@ qt_add_tool(${target_name}
INCLUDE_DIRECTORIES
../shared
)
-
-#### Keys ignored in scope 1:.:.:lrelease-pro.pro:<TRUE>:
-# QMAKE_TARGET_DESCRIPTION = "Qt Translation File Compiler for QMake Projects"
-# QT_TOOL_ENV = "qmake"
-# _OPTION = "host_build"
-# qmake.name = "QMAKE"
-# qmake.value = "$$shell_path($$QMAKE_QMAKE)"
+qt_internal_return_unless_building_tools()
diff --git a/src/linguist/lrelease-pro/lrelease-pro.pro b/src/linguist/lrelease-pro/lrelease-pro.pro
deleted file mode 100644
index 76b896d75..000000000
--- a/src/linguist/lrelease-pro/lrelease-pro.pro
+++ /dev/null
@@ -1,19 +0,0 @@
-option(host_build)
-QT = core
-DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII
-
-HEADERS += \
- ../shared/runqttool.h
-
-SOURCES += \
- ../shared/runqttool.cpp \
- main.cpp
-
-INCLUDEPATH += ../shared
-
-qmake.name = QMAKE
-qmake.value = $$shell_path($$QMAKE_QMAKE)
-QT_TOOL_ENV += qmake
-
-QMAKE_TARGET_DESCRIPTION = "Qt Translation File Compiler for QMake Projects"
-load(qt_tool)
diff --git a/src/linguist/lrelease-pro/main.cpp b/src/linguist/lrelease-pro/main.cpp
index bd20eea59..b9d48bf0a 100644
--- a/src/linguist/lrelease-pro/main.cpp
+++ b/src/linguist/lrelease-pro/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <profileutils.h>
#include <runqttool.h>
@@ -38,18 +13,7 @@
QT_USE_NAMESPACE
-#ifdef QT_BOOTSTRAPPED
-struct LR {
- static inline QString tr(const char *sourceText, const char *comment = 0)
- {
- return QCoreApplication::translate("LRelease", sourceText, comment);
- }
-};
-#else
-class LR {
- Q_DECLARE_TR_FUNCTIONS(LRelease)
-};
-#endif
+using namespace Qt::StringLiterals;
static void printOut(const QString &out)
{
@@ -63,21 +27,22 @@ static void printErr(const QString &out)
static void printUsage()
{
- printOut(LR::tr(
- "Usage:\n"
- " lrelease-pro [options] [project-file]...\n"
- "lrelease-pro is part of Qt's Linguist tool chain. It extracts project\n"
- "information from qmake projects and passes it to lrelease.\n"
- "All command line options that are not consumed by lrelease-pro are\n"
- "passed to lrelease.\n\n"
- "Options:\n"
- " -help Display this information and exit\n"
- " -keep Keep the temporary project dump around\n"
- " -silent\n"
- " Do not explain what is being done\n"
- " -version\n"
- " Display the version of lrelease-pro and exit\n"
- ));
+ printOut(uR"(
+Usage:
+ lrelease-pro [options] [project-file]...
+lrelease-pro is part of Qt's Linguist tool chain. It extracts project
+information from qmake projects and passes it to lrelease.
+All command line options that are not consumed by lrelease-pro are
+passed to lrelease.
+
+Options:
+ -help Display this information and exit
+ -keep Keep the temporary project dump around
+ -silent
+ Do not explain what is being done
+ -version
+ Display the version of lrelease-pro and exit
+)"_s);
}
int main(int argc, char **argv)
@@ -110,7 +75,8 @@ int main(int argc, char **argv)
lprodumpOptions << arg;
lreleaseOptions << arg;
} else if (!strcmp(argv[i], "-version")) {
- printOut(LR::tr("lrelease-pro version %1\n").arg(QLatin1String(QT_VERSION_STR)));
+ printOut(QStringLiteral("lrelease-pro version %1\n")
+ .arg(QLatin1String(QT_VERSION_STR)));
return 0;
} else if (!strcmp(argv[i], "-help")) {
printUsage();
@@ -127,14 +93,17 @@ int main(int argc, char **argv)
return 1;
}
+ lprodumpOptions << QStringLiteral("-translations-variables")
+ << QStringLiteral("TRANSLATIONS,EXTRA_TRANSLATIONS");
+
const QStringList proFiles = extractProFiles(&inputFiles);
if (proFiles.isEmpty()) {
- printErr(LR::tr("lrelease-pro: No .pro/.pri files given.\n"));
+ printErr(u"lrelease-pro: No .pro/.pri files given.\n"_s);
return 1;
}
if (!inputFiles.isEmpty()) {
- printErr(LR::tr("lrelease-pro: Only .pro/.pri files are supported. "
- "Offending files:\n %1\n")
+ printErr(QStringLiteral("lrelease-pro: Only .pro/.pri files are supported. "
+ "Offending files:\n %1\n")
.arg(inputFiles.join(QLatin1String("\n "))));
return 1;
}
diff --git a/src/linguist/lrelease/.prev_CMakeLists.txt b/src/linguist/lrelease/.prev_CMakeLists.txt
deleted file mode 100644
index 238b0e43a..000000000
--- a/src/linguist/lrelease/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-# Generated from lrelease.pro.
-
-#####################################################################
-## lrelease Tool:
-#####################################################################
-
-qt_get_tool_target_name(target_name lrelease)
-qt_add_tool(${target_name}
- TARGET_DESCRIPTION "Qt Translation File Compiler"
- SOURCES
- ../shared/numerus.cpp
- ../shared/po.cpp
- ../shared/projectdescriptionreader.cpp ../shared/projectdescriptionreader.h
- ../shared/qm.cpp
- ../shared/qph.cpp
- ../shared/runqttool.cpp ../shared/runqttool.h
- ../shared/translator.cpp ../shared/translator.h
- ../shared/translatormessage.cpp ../shared/translatormessage.h
- ../shared/ts.cpp
- ../shared/xliff.cpp
- ../shared/xmlparser.cpp ../shared/xmlparser.h
- main.cpp
- DEFINES
- QT_NO_CAST_FROM_ASCII
- QT_NO_CAST_TO_ASCII
- INCLUDE_DIRECTORIES
- ../shared
- PUBLIC_LIBRARIES
- Qt::CorePrivate
-)
-
-#### Keys ignored in scope 1:.:.:lrelease.pro:<TRUE>:
-# QMAKE_TARGET_DESCRIPTION = "Qt Translation File Compiler"
-# QT_TOOL_ENV = "qmake"
-# _OPTION = "host_build"
-# qmake.name = "QMAKE"
-# qmake.value = "$$shell_path($$QMAKE_QMAKE)"
diff --git a/src/linguist/lrelease/CMakeLists.txt b/src/linguist/lrelease/CMakeLists.txt
index 6c3542cec..8d22c2db4 100644
--- a/src/linguist/lrelease/CMakeLists.txt
+++ b/src/linguist/lrelease/CMakeLists.txt
@@ -1,13 +1,14 @@
-# Generated from lrelease.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## lrelease Tool:
#####################################################################
qt_get_tool_target_name(target_name lrelease)
-qt_add_tool(${target_name}
+qt_internal_add_tool(${target_name}
TARGET_DESCRIPTION "Qt Translation File Compiler"
- TOOLS_TARGET Linguist # special case
+ TOOLS_TARGET Linguist
SOURCES
../shared/numerus.cpp
../shared/po.cpp
@@ -26,13 +27,13 @@ qt_add_tool(${target_name}
QT_NO_CAST_TO_ASCII
INCLUDE_DIRECTORIES
../shared
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
+ # special case begin
+ EXTRA_CMAKE_FILES
+ "${CMAKE_CURRENT_SOURCE_DIR}/../${QT_CMAKE_EXPORT_NAMESPACE}LinguistToolsMacros.cmake"
+ EXTRA_CMAKE_INCLUDES
+ "${QT_CMAKE_EXPORT_NAMESPACE}LinguistToolsMacros.cmake"
+ # special case end
)
-
-#### Keys ignored in scope 1:.:.:lrelease.pro:<TRUE>:
-# QMAKE_TARGET_DESCRIPTION = "Qt Translation File Compiler"
-# QT_TOOL_ENV = "qmake"
-# _OPTION = "host_build"
-# qmake.name = "QMAKE"
-# qmake.value = "$$shell_path($$QMAKE_QMAKE)"
+qt_internal_return_unless_building_tools()
diff --git a/src/linguist/lrelease/lrelease.1 b/src/linguist/lrelease/lrelease.1
index a82531ef5..fdda20afe 100644
--- a/src/linguist/lrelease/lrelease.1
+++ b/src/linguist/lrelease/lrelease.1
@@ -1,28 +1,7 @@
.TH lrelease 1 "18 October 2001" "Digia Plc and/or its subsidiary(-ies)" \" -*- nroff -*-
.\"
.\" Copyright (C) 2016 The Qt Company Ltd.
-.\" Contact: https://www.qt.io/licensing/
-.\"
-.\" This file is part of the QtGui module of the Qt Toolkit.
-.\"
-.\" $QT_BEGIN_LICENSE:GPL-EXCEPT$
-.\" Commercial License Usage
-.\" Licensees holding valid commercial Qt licenses may use this file in
-.\" accordance with the commercial license agreement provided with the
-.\" Software or, alternatively, in accordance with the terms contained in
-.\" a written agreement between you and The Qt Company. For licensing terms
-.\" and conditions see https://www.qt.io/terms-conditions. For further
-.\" information use the contact form at https://www.qt.io/contact-us.
-.\"
-.\" GNU General Public License Usage
-.\" Alternatively, this file may be used under the terms of the GNU
-.\" General Public License version 3 as published by the Free Software
-.\" Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-.\" included in the packaging of this file. Please review the following
-.\" information to ensure the GNU General Public License requirements will
-.\" be met: https://www.gnu.org/licenses/gpl-3.0.html.
-.\"
-.\" $QT_END_LICENSE$
+.\" SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
.\"
.SH NAME
lrelease \- generate Qt message files from Qt Linguist translation files
diff --git a/src/linguist/lrelease/lrelease.pro b/src/linguist/lrelease/lrelease.pro
deleted file mode 100644
index fb457ac05..000000000
--- a/src/linguist/lrelease/lrelease.pro
+++ /dev/null
@@ -1,21 +0,0 @@
-option(host_build)
-QT = core-private
-DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII
-
-HEADERS += \
- ../shared/projectdescriptionreader.h \
- ../shared/runqttool.h
-
-SOURCES += \
- ../shared/projectdescriptionreader.cpp \
- ../shared/runqttool.cpp \
- main.cpp
-
-include(../shared/formats.pri)
-
-qmake.name = QMAKE
-qmake.value = $$shell_path($$QMAKE_QMAKE)
-QT_TOOL_ENV += qmake
-
-QMAKE_TARGET_DESCRIPTION = "Qt Translation File Compiler"
-load(qt_tool)
diff --git a/src/linguist/lrelease/main.cpp b/src/linguist/lrelease/main.cpp
index 202a6de7f..86fc7066d 100644
--- a/src/linguist/lrelease/main.cpp
+++ b/src/linguist/lrelease/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "translator.h"
@@ -47,18 +22,7 @@
QT_USE_NAMESPACE
-#ifdef QT_BOOTSTRAPPED
-struct LR {
- static inline QString tr(const char *sourceText, const char *comment = 0)
- {
- return QCoreApplication::translate("LRelease", sourceText, comment);
- }
-};
-#else
-class LR {
- Q_DECLARE_TR_FUNCTIONS(LRelease)
-};
-#endif
+using namespace Qt::StringLiterals;
static void printOut(const QString & out)
{
@@ -74,38 +38,40 @@ static void printErr(const QString & out)
static void printUsage()
{
- printOut(LR::tr(
- "Usage:\n"
- " lrelease [options] -project project-file\n"
- " lrelease [options] ts-files [-qm qm-file]\n\n"
- "lrelease is part of Qt's Linguist tool chain. It can be used as a\n"
- "stand-alone tool to convert XML-based translations files in the TS\n"
- "format into the 'compiled' QM format used by QTranslator objects.\n\n"
- "Passing .pro files to lrelease is deprecated.\n"
- "Please use the lrelease-pro tool instead, or use qmake's lrelease.prf\n"
- "feature.\n\n"
- "Options:\n"
- " -help Display this information and exit\n"
- " -idbased\n"
- " Use IDs instead of source strings for message keying\n"
- " -compress\n"
- " Compress the QM files\n"
- " -nounfinished\n"
- " Do not include unfinished translations\n"
- " -removeidentical\n"
- " If the translated text is the same as\n"
- " the source text, do not include the message\n"
- " -markuntranslated <prefix>\n"
- " If a message has no real translation, use the source text\n"
- " prefixed with the given string instead\n"
- " -project <filename>\n"
- " Name of a file containing the project's description in JSON format.\n"
- " Such a file may be generated from a .pro file using the lprodump tool.\n"
- " -silent\n"
- " Do not explain what is being done\n"
- " -version\n"
- " Display the version of lrelease and exit\n"
- ));
+ printOut(uR"(Usage:
+ lrelease [options] -project project-file
+ lrelease [options] ts-files [-qm qm-file]
+
+lrelease is part of Qt's Linguist tool chain. It can be used as a
+stand-alone tool to convert XML-based translations files in the TS
+format into the 'compiled' QM format used by QTranslator objects.
+
+Passing .pro files to lrelease is deprecated.
+Please use the lrelease-pro tool instead, or use qmake's lrelease.prf
+feature.
+
+Options:
+ -help Display this information and exit
+ -idbased
+ Use IDs instead of source strings for message keying
+ -compress
+ Compress the QM files
+ -nounfinished
+ Do not include unfinished translations
+ -removeidentical
+ If the translated text is the same as
+ the source text, do not include the message
+ -markuntranslated <prefix>
+ If a message has no real translation, use the source text
+ prefixed with the given string instead
+ -project <filename>
+ Name of a file containing the project's description in JSON format.
+ Such a file may be generated from a .pro file using the lprodump tool.
+ -silent
+ Do not explain what is being done
+ -version
+ Display the version of lrelease and exit
+)"_s);
}
static bool loadTsFile(Translator &tor, const QString &tsFileName, bool /* verbose */)
@@ -113,7 +79,7 @@ static bool loadTsFile(Translator &tor, const QString &tsFileName, bool /* verbo
ConversionData cd;
bool ok = tor.load(tsFileName, cd, QLatin1String("auto"));
if (!ok) {
- printErr(LR::tr("lrelease error: %1").arg(cd.error()));
+ printErr(QLatin1String("lrelease error: %1").arg(cd.error()));
} else {
if (!cd.errors().isEmpty())
printOut(cd.error());
@@ -128,17 +94,18 @@ static bool releaseTranslator(Translator &tor, const QString &qmFileName,
tor.reportDuplicates(tor.resolveDuplicates(), qmFileName, cd.isVerbose());
if (cd.isVerbose())
- printOut(LR::tr("Updating '%1'...\n").arg(qmFileName));
+ printOut(QLatin1String("Updating '%1'...\n").arg(qmFileName));
if (removeIdentical) {
if (cd.isVerbose())
- printOut(LR::tr("Removing translations equal to source text in '%1'...\n").arg(qmFileName));
+ printOut(QLatin1String("Removing translations equal to source text in '%1'...\n")
+ .arg(qmFileName));
tor.stripIdenticalSourceTranslations();
}
QFile file(qmFileName);
if (!file.open(QIODevice::WriteOnly)) {
- printErr(LR::tr("lrelease error: cannot create '%1': %2\n")
- .arg(qmFileName, file.errorString()));
+ printErr(QLatin1String("lrelease error: cannot create '%1': %2\n")
+ .arg(qmFileName, file.errorString()));
return false;
}
@@ -147,8 +114,7 @@ static bool releaseTranslator(Translator &tor, const QString &qmFileName,
file.close();
if (!ok) {
- printErr(LR::tr("lrelease error: cannot save '%1': %2")
- .arg(qmFileName, cd.error()));
+ printErr(QLatin1String("lrelease error: cannot save '%1': %2").arg(qmFileName, cd.error()));
} else if (!cd.errors().isEmpty()) {
printOut(cd.error());
}
@@ -164,9 +130,9 @@ static bool releaseTsFile(const QString& tsFileName,
return false;
QString qmFileName = tsFileName;
- for (const Translator::FileFormat &fmt : qAsConst(Translator::registeredFileFormats())) {
+ for (const Translator::FileFormat &fmt : std::as_const(Translator::registeredFileFormats())) {
if (qmFileName.endsWith(QLatin1Char('.') + fmt.extension)) {
- qmFileName.chop(fmt.extension.length() + 1);
+ qmFileName.chop(fmt.extension.size() + 1);
break;
}
}
@@ -184,8 +150,9 @@ static QStringList translationsFromProject(const Project &project, bool topLevel
result = *project.translations;
result << translationsFromProjects(project.subProjects, false);
if (topLevel && result.isEmpty()) {
- printErr(LR::tr("lrelease warning: Met no 'TRANSLATIONS' entry in project file '%1'\n")
- .arg(project.filePath));
+ printErr(
+ QLatin1String("lrelease warning: Met no 'TRANSLATIONS' entry in project file '%1'\n")
+ .arg(project.filePath));
}
return result;
}
@@ -201,19 +168,6 @@ static QStringList translationsFromProjects(const Projects &projects, bool topLe
int main(int argc, char **argv)
{
QCoreApplication app(argc, argv);
-#ifndef QT_BOOTSTRAPPED
-#ifndef Q_OS_WIN32
- QTranslator translator;
- QTranslator qtTranslator;
- QString sysLocale = QLocale::system().name();
- QString resourceDir = QLibraryInfo::path(QLibraryInfo::TranslationsPath);
- if (translator.load(QLatin1String("linguist_") + sysLocale, resourceDir)
- && qtTranslator.load(QLatin1String("qt_") + sysLocale, resourceDir)) {
- app.installTranslator(&translator);
- app.installTranslator(&qtTranslator);
- }
-#endif // Q_OS_WIN32
-#endif // QT_BOOTSTRAPPED
ConversionData cd;
cd.m_verbose = true; // the default is true starting with Qt 4.2
@@ -247,11 +201,11 @@ int main(int argc, char **argv)
cd.m_unTrPrefix = QString::fromLocal8Bit(argv[++i]);
} else if (!strcmp(argv[i], "-project")) {
if (i == argc - 1) {
- printErr(LR::tr("The option -project requires a parameter.\n"));
+ printErr(QLatin1String("The option -project requires a parameter.\n"));
return 1;
}
if (!projectDescriptionFile.isEmpty()) {
- printErr(LR::tr("The option -project must appear only once.\n"));
+ printErr(QLatin1String("The option -project must appear only once.\n"));
return 1;
}
projectDescriptionFile = QString::fromLocal8Bit(argv[++i]);
@@ -262,7 +216,7 @@ int main(int argc, char **argv)
cd.m_verbose = true;
continue;
} else if (!strcmp(argv[i], "-version")) {
- printOut(LR::tr("lrelease version %1\n").arg(QLatin1String(QT_VERSION_STR)));
+ printOut(QLatin1String("lrelease version %1\n").arg(QLatin1String(QT_VERSION_STR)));
return 0;
} else if (!strcmp(argv[i], "-qm")) {
if (i == argc - 1) {
@@ -288,24 +242,25 @@ int main(int argc, char **argv)
QString errorString;
if (!extractProFiles(&inputFiles).isEmpty()) {
- runQtTool(QStringLiteral("lrelease-pro"), app.arguments().mid(1));
+ runInternalQtTool(QLatin1String("lrelease-pro"), app.arguments().mid(1));
return 0;
}
if (!projectDescriptionFile.isEmpty()) {
if (!inputFiles.isEmpty()) {
- printErr(LR::tr("lrelease error: Do not specify TS files if -project is given.\n"));
+ printErr(QLatin1String(
+ "lrelease error: Do not specify TS files if -project is given.\n"));
return 1;
}
Projects projectDescription = readProjectDescription(projectDescriptionFile, &errorString);
if (!errorString.isEmpty()) {
- printErr(LR::tr("lrelease error: %1\n").arg(errorString));
+ printErr(QLatin1String("lrelease error: %1\n").arg(errorString));
return 1;
}
inputFiles = translationsFromProjects(projectDescription);
}
- for (const QString &inputFile : qAsConst(inputFiles)) {
+ for (const QString &inputFile : std::as_const(inputFiles)) {
if (outputFile.isEmpty()) {
if (!releaseTsFile(inputFile, cd, removeIdentical))
return 1;
diff --git a/src/linguist/lupdate-pro/.prev_CMakeLists.txt b/src/linguist/lupdate-pro/.prev_CMakeLists.txt
deleted file mode 100644
index 51f7b8c89..000000000
--- a/src/linguist/lupdate-pro/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-# Generated from lupdate-pro.pro.
-
-#####################################################################
-## lupdate-pro Tool:
-#####################################################################
-
-qt_get_tool_target_name(target_name lupdate-pro)
-qt_add_tool(${target_name}
- TARGET_DESCRIPTION "Qt Translation File Update Tool for QMake Projects"
- SOURCES
- ../shared/runqttool.cpp ../shared/runqttool.h
- main.cpp
- DEFINES
- QT_NO_CAST_FROM_ASCII
- QT_NO_CAST_TO_ASCII
- INCLUDE_DIRECTORIES
- ../shared
-)
-
-#### Keys ignored in scope 1:.:.:lupdate-pro.pro:<TRUE>:
-# QMAKE_TARGET_DESCRIPTION = "Qt Translation File Update Tool for QMake Projects"
-# QT_TOOL_ENV = "qmake"
-# _OPTION = "host_build"
-# qmake.name = "QMAKE"
-# qmake.value = "$$shell_path($$QMAKE_QMAKE)"
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 2:.:.:lupdate-pro.pro:MINGW:
-# RC_FILE = "lupdate-pro.rc"
diff --git a/src/linguist/lupdate-pro/CMakeLists.txt b/src/linguist/lupdate-pro/CMakeLists.txt
index 8df52b7fa..6711d0008 100644
--- a/src/linguist/lupdate-pro/CMakeLists.txt
+++ b/src/linguist/lupdate-pro/CMakeLists.txt
@@ -1,13 +1,15 @@
-# Generated from lupdate-pro.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## lupdate-pro Tool:
#####################################################################
qt_get_tool_target_name(target_name lupdate-pro)
-qt_add_tool(${target_name}
+qt_internal_add_tool(${target_name}
TARGET_DESCRIPTION "Qt Translation File Update Tool for QMake Projects"
- TOOLS_TARGET Linguist # special case
+ TOOLS_TARGET Linguist
+ INSTALL_DIR "${INSTALL_LIBEXECDIR}"
SOURCES
../shared/runqttool.cpp ../shared/runqttool.h
main.cpp
@@ -17,16 +19,4 @@ qt_add_tool(${target_name}
INCLUDE_DIRECTORIES
../shared
)
-
-#### Keys ignored in scope 1:.:.:lupdate-pro.pro:<TRUE>:
-# QMAKE_TARGET_DESCRIPTION = "Qt Translation File Update Tool for QMake Projects"
-# QT_TOOL_ENV = "qmake"
-# _OPTION = "host_build"
-# qmake.name = "QMAKE"
-# qmake.value = "$$shell_path($$QMAKE_QMAKE)"
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 2:.:.:lupdate-pro.pro:MINGW:
-# RC_FILE = "lupdate-pro.rc"
+qt_internal_return_unless_building_tools()
diff --git a/src/linguist/lupdate-pro/lupdate-pro.pro b/src/linguist/lupdate-pro/lupdate-pro.pro
deleted file mode 100644
index 49dac11c7..000000000
--- a/src/linguist/lupdate-pro/lupdate-pro.pro
+++ /dev/null
@@ -1,23 +0,0 @@
-option(host_build)
-QT = core
-DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII
-
-INCLUDEPATH += ../shared
-
-HEADERS += \
- ../shared/runqttool.h
-
-SOURCES += \
- ../shared/runqttool.cpp \
- main.cpp
-
-mingw {
- RC_FILE = lupdate-pro.rc
-}
-
-qmake.name = QMAKE
-qmake.value = $$shell_path($$QMAKE_QMAKE)
-QT_TOOL_ENV += qmake
-
-QMAKE_TARGET_DESCRIPTION = "Qt Translation File Update Tool for QMake Projects"
-load(qt_tool)
diff --git a/src/linguist/lupdate-pro/main.cpp b/src/linguist/lupdate-pro/main.cpp
index 1910467f4..b33d7015a 100644
--- a/src/linguist/lupdate-pro/main.cpp
+++ b/src/linguist/lupdate-pro/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <profileutils.h>
#include <runqttool.h>
@@ -42,6 +17,8 @@
#include <iostream>
+using namespace Qt::StringLiterals;
+
static void printOut(const QString & out)
{
std::cout << qPrintable(out);
@@ -52,33 +29,30 @@ static void printErr(const QString & out)
std::cerr << qPrintable(out);
}
-class LU {
- Q_DECLARE_TR_FUNCTIONS(LUpdate)
-};
-
static void printUsage()
{
- printOut(LU::tr(
- "Usage:\n"
- " lupdate-pro [options] [project-file]... [-ts ts-files...]\n"
- "lupdate-pro is part of Qt's Linguist tool chain. It extracts project\n"
- "information from qmake projects and passes it to lupdate.\n"
- "All command line options that are not consumed by lupdate-pro are\n"
- "passed to lupdate.\n\n"
- "Options:\n"
- " -help Display this information and exit.\n"
- " -silent\n"
- " Do not explain what is being done.\n"
- " -pro <filename>\n"
- " Name of a .pro file. Useful for files with .pro file syntax but\n"
- " different file suffix. Projects are recursed into and merged.\n"
- " -pro-out <directory>\n"
- " Virtual output directory for processing subsequent .pro files.\n"
- " -pro-debug\n"
- " Trace processing .pro files. Specify twice for more verbosity.\n"
- " -version\n"
- " Display the version of lupdate-pro and exit.\n"
- ));
+ printOut(
+ uR"(Usage:
+lupdate-pro [options] [project-file]... [-ts ts-files...]
+lupdate-pro is part of Qt's Linguist tool chain. It extracts project
+information from qmake projects and passes it to lupdate.
+All command line options that are not consumed by lupdate-pro are
+passed to lupdate.
+
+Options:
+ -help Display this information and exit.
+ -silent
+ Do not explain what is being done.
+ -pro <filename>
+ Name of a .pro file. Useful for files with .pro file syntax but
+ different file suffix. Projects are recursed into and merged.
+ -pro-out <directory>
+ Virtual output directory for processing subsequent .pro files.
+ -pro-debug
+ Trace processing .pro files. Specify twice for more verbosity.
+ -version
+ Display the version of lupdate-pro and exit.
+)"_s);
}
int main(int argc, char **argv)
@@ -119,12 +93,12 @@ int main(int argc, char **argv)
} else if (arg == QLatin1String("-pro-debug")) {
lprodumpOptions << arg;
} else if (arg == QLatin1String("-version")) {
- printOut(LU::tr("lupdate-pro version %1\n").arg(QLatin1String(QT_VERSION_STR)));
+ printOut(QStringLiteral("lupdate-pro version %1\n").arg(QLatin1String(QT_VERSION_STR)));
return 0;
} else if (arg == QLatin1String("-pro")) {
++i;
if (i == argc) {
- printErr(LU::tr("The -pro option should be followed by a filename of .pro file.\n"));
+ printErr(u"The -pro option should be followed by a filename of .pro file.\n"_s);
return 1;
}
lprodumpOptions << arg << args[i];
@@ -132,7 +106,7 @@ int main(int argc, char **argv)
} else if (arg == QLatin1String("-pro-out")) {
++i;
if (i == argc) {
- printErr(LU::tr("The -pro-out option should be followed by a directory name.\n"));
+ printErr(u"The -pro-out option should be followed by a directory name.\n"_s);
return 1;
}
lprodumpOptions << arg << args[i];
@@ -145,7 +119,7 @@ int main(int argc, char **argv)
} // for args
if (!hasProFiles) {
- printErr(LU::tr("lupdate-pro: No .pro/.pri files given.\n"));
+ printErr(u"lupdate-pro: No .pro/.pri files given.\n"_s);
return 1;
}
diff --git a/src/linguist/lupdate/.prev_CMakeLists.txt b/src/linguist/lupdate/.prev_CMakeLists.txt
deleted file mode 100644
index 4df4d3895..000000000
--- a/src/linguist/lupdate/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-# Generated from lupdate.pro.
-
-#####################################################################
-## lupdate Tool:
-#####################################################################
-
-qt_get_tool_target_name(target_name lupdate)
-qt_add_tool(${target_name}
- TARGET_DESCRIPTION "Qt Translation File Update Tool"
- SOURCES
- ../shared/numerus.cpp
- ../shared/po.cpp
- ../shared/projectdescriptionreader.cpp ../shared/projectdescriptionreader.h
- ../shared/qm.cpp
- ../shared/qph.cpp
- ../shared/qrcreader.cpp ../shared/qrcreader.h
- ../shared/runqttool.cpp ../shared/runqttool.h
- ../shared/simtexth.cpp ../shared/simtexth.h
- ../shared/translator.cpp ../shared/translator.h
- ../shared/translatormessage.cpp ../shared/translatormessage.h
- ../shared/ts.cpp
- ../shared/xliff.cpp
- ../shared/xmlparser.cpp ../shared/xmlparser.h
- cpp.cpp cpp.h
- java.cpp
- lupdate.h
- main.cpp
- merge.cpp
- ui.cpp
- DEFINES
- QT_NO_CAST_FROM_ASCII
- QT_NO_CAST_TO_ASCII
- INCLUDE_DIRECTORIES
- ../shared
- PUBLIC_LIBRARIES
- Qt::CorePrivate
- Qt::ToolsPrivate
-)
-
-#### Keys ignored in scope 1:.:.:lupdate.pro:<TRUE>:
-# QMAKE_TARGET_DESCRIPTION = "Qt Translation File Update Tool"
-# QT_TOOL_ENV = "qmake"
-# _OPTION = "host_build"
-# qmake.name = "QMAKE"
-# qmake.value = "$$shell_path($$QMAKE_QMAKE)"
-
-## Scopes:
-#####################################################################
-
-qt_extend_target(${target_name} CONDITION TARGET Qt::QmlDevToolsPrivate
- SOURCES
- qdeclarative.cpp
- PUBLIC_LIBRARIES
- Qt::QmlDevToolsPrivate
-)
-
-qt_extend_target(${target_name} CONDITION NOT TARGET Qt::QmlDevToolsPrivate
- DEFINES
- QT_NO_QML
-)
-
-qt_extend_target(${target_name} CONDITION QT_FEATURE_clangcpp
- SOURCES
- clangtoolastreader.cpp clangtoolastreader.h
- cpp_clang.cpp cpp_clang.h
- lupdatepreprocessoraction.cpp lupdatepreprocessoraction.h
- synchronized.h
- DEFINES
- (CLANG_RESOURCE_DIR=\"/clang//include\")
- (LUPDATE_CLANG_VERSION_STR=\"\")
- LUPDATE_CLANG_VERSION_MAJOR=
- LUPDATE_CLANG_VERSION_MINOR=
- LUPDATE_CLANG_VERSION_PATCH=
-)
-
-#### Keys ignored in scope 6:.:.:lupdate.pro:NOT QMAKE_DEFAULT_LIBDIRS___contains____ss_CLANG_LIBDIR AND NOT disable_external_rpath:
-# QMAKE_RPATHDIR = "$$CLANG_LIBDIR"
-
-#### Keys ignored in scope 9:.:.:lupdate.pro:MINGW:
-# RC_FILE = "lupdate.rc"
diff --git a/src/linguist/lupdate/CMakeLists.txt b/src/linguist/lupdate/CMakeLists.txt
index 8daef1590..56d4ad301 100644
--- a/src/linguist/lupdate/CMakeLists.txt
+++ b/src/linguist/lupdate/CMakeLists.txt
@@ -1,20 +1,25 @@
-# Generated from lupdate.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
-# special case begin
if(CMAKE_VERSION VERSION_LESS "3.19" AND MSVC AND CMAKE_GENERATOR STREQUAL "Ninja Multi-Config")
message(WARNING "lupdate will not be built in this configuration.")
return()
endif()
-# special case end
+
+if (MINGW)
+ set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" PROPERTY _qt_skip_separate_debug_info ON)
+endif()
#####################################################################
## lupdate Tool:
#####################################################################
qt_get_tool_target_name(target_name lupdate)
-qt_add_tool(${target_name}
+qt_internal_add_tool(${target_name}
TARGET_DESCRIPTION "Qt Translation File Update Tool"
- TOOLS_TARGET Linguist # special case
+ TOOLS_TARGET Linguist
+ EXTRA_CMAKE_FILES "${CMAKE_CURRENT_LIST_DIR}/../GenerateLUpdateProject.cmake"
SOURCES
../shared/numerus.cpp
../shared/po.cpp
@@ -31,6 +36,7 @@ qt_add_tool(${target_name}
../shared/xmlparser.cpp ../shared/xmlparser.h
cpp.cpp cpp.h
java.cpp
+ python.cpp
lupdate.h
main.cpp
merge.cpp
@@ -40,37 +46,35 @@ qt_add_tool(${target_name}
QT_NO_CAST_TO_ASCII
INCLUDE_DIRECTORIES
../shared
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
- Qt::ToolsPrivate
+ Qt::Tools
)
-#### Keys ignored in scope 1:.:.:lupdate.pro:<TRUE>:
-# QMAKE_TARGET_DESCRIPTION = "Qt Translation File Update Tool"
-# QT_TOOL_ENV = "qmake"
-# _OPTION = "host_build"
-# qmake.name = "QMAKE"
-# qmake.value = "$$shell_path($$QMAKE_QMAKE)"
+set_source_files_properties(python.cpp PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
+
+qt_internal_return_unless_building_tools()
## Scopes:
#####################################################################
-qt_extend_target(${target_name} CONDITION TARGET Qt::QmlDevToolsPrivate
+qt_internal_extend_target(${target_name} CONDITION TARGET Qt::QmlPrivate
SOURCES
qdeclarative.cpp
- PUBLIC_LIBRARIES
- Qt::QmlDevToolsPrivate
+ LIBRARIES
+ Qt::QmlPrivate
)
-qt_extend_target(${target_name} CONDITION NOT TARGET Qt::QmlDevToolsPrivate
+qt_internal_extend_target(${target_name} CONDITION NOT TARGET Qt::QmlPrivate
DEFINES
QT_NO_QML
)
-qt_extend_target(${target_name} CONDITION QT_FEATURE_clangcpp
+qt_internal_extend_target(${target_name} CONDITION QT_FEATURE_clangcpp
SOURCES
clangtoolastreader.cpp clangtoolastreader.h
cpp_clang.cpp cpp_clang.h
+ filesignificancecheck.cpp filesignificancecheck.h
lupdatepreprocessoraction.cpp lupdatepreprocessoraction.h
synchronized.h
DEFINES
@@ -82,18 +86,24 @@ qt_extend_target(${target_name} CONDITION QT_FEATURE_clangcpp
#LUPDATE_CLANG_VERSION_MINOR=
#LUPDATE_CLANG_VERSION_PATCH=
# in favor of these
- CLANG_RESOURCE_DIR="${QT_LIB_CLANG_LIBDIR}/clang/${QT_LIB_CLANG_VERSION}"
LUPDATE_CLANG_VERSION_STR="\"${QT_LIB_CLANG_VERSION}\""
LUPDATE_CLANG_VERSION_MAJOR=${QT_LIB_CLANG_VERSION_MAJOR}
LUPDATE_CLANG_VERSION_MINOR=${QT_LIB_CLANG_VERSION_MINOR}
LUPDATE_CLANG_VERSION_PATCH=${QT_LIB_CLANG_VERSION_PATCH}
# special case end
- LIBRARIES # special case
- WrapLibClang::WrapLibClang # special case
+ LIBRARIES
+ WrapLibClang::WrapLibClang
)
-#### Keys ignored in scope 6:.:.:lupdate.pro:NOT QMAKE_DEFAULT_LIBDIRS___contains____ss_CLANG_LIBDIR AND NOT disable_external_rpath:
-# QMAKE_RPATHDIR = "$$CLANG_LIBDIR"
+if(QT_FEATURE_clangcpp)
+ # If libclangTooling.a is not built with -fPIE enabled we cannot link it to lupdate.
+ # TODO: Re-enable PIE once clang is built with PIE in provisioning.
+ set_target_properties(${target_name} PROPERTIES POSITION_INDEPENDENT_CODE FALSE)
+endif()
+
+qt_internal_extend_target(${target_name} CONDITION MSVC
+ DEFINES _SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING)
-#### Keys ignored in scope 9:.:.:lupdate.pro:MINGW:
-# RC_FILE = "lupdate.rc"
+if(QT_FEATURE_clangcpp)
+ set_property(SOURCE clangtoolastreader.cpp PROPERTY SKIP_AUTOMOC ON)
+endif()
diff --git a/src/linguist/lupdate/clangtoolastreader.cpp b/src/linguist/lupdate/clangtoolastreader.cpp
index 64c8ad431..6b85c6ccb 100644
--- a/src/linguist/lupdate/clangtoolastreader.cpp
+++ b/src/linguist/lupdate/clangtoolastreader.cpp
@@ -1,66 +1,192 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "clangtoolastreader.h"
+#include "filesignificancecheck.h"
#include "translator.h"
+#include <QLibraryInfo>
+
QT_BEGIN_NAMESPACE
namespace LupdatePrivate
{
- /*
- Retrieves the context for the NOOP macros using the context of
- the NamedDeclaration within which the Macro is.
- The context is stripped of the function or method part as it used not to be retrieved
- in the previous cpp parser.
- */
- QString contextForNoopMacro(clang::NamedDecl *namedDecl)
+ void exploreChildrenForFirstStringLiteral(clang::Stmt* stmt, QString &context)
{
- QStringList context;
- const clang::DeclContext *decl = namedDecl->getDeclContext();
- while (decl) {
- if (clang::isa<clang::NamedDecl>(decl) && !decl->isFunctionOrMethod()) {
- if (const auto *namespaceDecl = clang::dyn_cast<clang::NamespaceDecl>(decl)) {
- context.prepend(namespaceDecl->isAnonymousNamespace()
- ? QStringLiteral("(anonymous namespace)")
- : QString::fromStdString(namespaceDecl->getDeclName().getAsString()));
- } else if (const auto *recordDecl = clang::dyn_cast<clang::RecordDecl>(decl)) {
- static const QString anonymous = QStringLiteral("(anonymous %1)");
- context.prepend(recordDecl->getIdentifier()
- ? QString::fromStdString(recordDecl->getDeclName().getAsString())
- : anonymous.arg(QLatin1String(recordDecl->getKindName().data())));
+ // only exploring the children until the context has been found.
+ if (!stmt || !context.isEmpty())
+ return;
+
+ for (auto it = stmt->child_begin() ; it !=stmt->child_end() ; it++) {
+ if (!context.isEmpty())
+ break;
+ clang::Stmt *child = *it;
+ clang::StringLiteral *stringLit = llvm::dyn_cast_or_null<clang::StringLiteral>(child);
+ if (stringLit) {
+ context = toQt(stringLit->getString());
+ return;
+ }
+ exploreChildrenForFirstStringLiteral(child, context);
+ }
+ return;
+ }
+
+ // Checks if the tr method is supported by the CXXRecordDecl
+ // Either because Q_OBJECT or Q_DECLARE_FUNCTIONS(MyContext) is declared with this CXXRecordDecl
+ // In case of Q_DECLARE_FUNCTIONS the context is read in the tr Method children with function exploreChildrenForFirstStringLiteral
+ // Q_DECLARE_FUNCTIONS trace in the AST is:
+ // - a public AccessSpecDecl pointing to src/corelib/kernel/qcoreapplication.h
+ // - a CXXMethodDecl called tr with a children that is a StringLiteral. This is the context
+ // Q_OBJECT trace in the AST is:
+ // - a public AccessSpecDecl pointing to src/corelib/kernel/qtmetamacros.h
+ // - a CXXMethodDecl called tr WITHOUT a StringLiteral among its children.
+ bool isQObjectOrQDeclareTrFunctionMacroDeclared(clang::CXXRecordDecl *recordDecl, QString &context, const clang::SourceManager &sm)
+ {
+ if (!recordDecl)
+ return false;
+
+ bool tr_method_present = false;
+ bool access_for_qobject = false;
+ bool access_for_qdeclaretrfunction = false;
+
+ for (auto decl : recordDecl->decls()) {
+ clang::AccessSpecDecl *accessSpec = llvm::dyn_cast<clang::AccessSpecDecl>(decl);
+ clang::CXXMethodDecl *method = llvm::dyn_cast<clang::CXXMethodDecl>(decl);
+
+ if (!accessSpec && !method)
+ continue;
+ if (method) {
+ // Look for method with name 'tr'
+ std::string name = method->getNameAsString();
+ if (name == "tr") {
+ tr_method_present = true;
+ // if nothing is found and the context remains empty, it's ok, it's probably a Q_OBJECT.
+ exploreChildrenForFirstStringLiteral(method->getBody(), context);
+ }
+ } else if (accessSpec) {
+ if (!accessSpec->getBeginLoc().isValid())
+ continue;
+ QString location = QString::fromStdString(
+ sm.getSpellingLoc(accessSpec->getBeginLoc()).printToString(sm));
+ qsizetype indexLast = location.lastIndexOf(QLatin1String(":"));
+ qsizetype indexBeforeLast = location.lastIndexOf(QLatin1String(":"), indexLast-1);
+ location.truncate(indexBeforeLast);
+ const QString qtInstallDirPath = QLibraryInfo::path(QLibraryInfo::PrefixPath);
+ const QString accessForQDeclareTrFunctions = QStringLiteral("qcoreapplication.h");
+ const QString accessForQObject = QStringLiteral("qtmetamacros.h");
+ // Qt::CaseInsensitive because of potential discrepancy in Windows with D:/ and d:/
+ if (location.startsWith(qtInstallDirPath, Qt::CaseInsensitive)) {
+ if (location.endsWith(accessForQDeclareTrFunctions))
+ access_for_qdeclaretrfunction = true;
+ if (location.endsWith(accessForQObject))
+ access_for_qobject = true;
}
}
- decl = decl->getParent();
}
- return context.join(QStringLiteral("::"));
+
+ bool access_to_qtbase = false;
+ // if the context is still empty then it cannot be a Q_DECLARE_TR_FUNCTION.
+ if (context.isEmpty())
+ access_to_qtbase = access_for_qobject;
+ else
+ access_to_qtbase = access_for_qdeclaretrfunction;
+
+ return tr_method_present && access_to_qtbase;
}
+ QString exploreBases(clang::CXXRecordDecl *recordDecl, const clang::SourceManager &sm);
+ QString lookForContext(clang::CXXRecordDecl *recordDecl, const clang::SourceManager &sm)
+ {
+ QString context;
+ if (isQObjectOrQDeclareTrFunctionMacroDeclared(recordDecl, context, sm)) {
+ return context.isEmpty() ? QString::fromStdString(recordDecl->getQualifiedNameAsString()) : context;
+ } else {
+ // explore the bases of this CXXRecordDecl
+ // the base class AA takes precedent over B (reproducing tr context behavior)
+ /*
+ class AA {Q_OBJECT};
+ class A : public AA {};
+ class B {
+ Q_OBJECT
+ class C : public A
+ {
+ QString c_tr = tr("context is AA");
+ const char * c_noop = QT_TR_NOOP("context should be AA");
+ }
+ };
+ */
+ // For recordDecl corresponding to class C, the following gives access to class A
+ return exploreBases(recordDecl, sm);
+ }
+ }
+
+ // Gives access to the class or struct the CXXRecordDecl is inheriting from
+ QString exploreBases(clang::CXXRecordDecl *recordDecl, const clang::SourceManager &sm)
+ {
+ QString context;
+ for (auto base : recordDecl->bases()) {
+ const clang::Type *type = base.getType().getTypePtrOrNull();
+ if (!type) continue;
+ clang::CXXRecordDecl *baseDecl = type->getAsCXXRecordDecl();
+ if (!baseDecl)
+ continue;
+ context = lookForContext(baseDecl, sm);
+ if (!context.isEmpty())
+ return context;
+ }
+ return context;
+ }
+
+ // QT_TR_NOOP location is within the the NamedDecl range
+ // Look for the RecordDecl (class or struct) the NamedDecl belongs to
+ // and the related classes until Q_OBJECT macro declaration or Q_DECLARE_TR_FUNCTIONS is found.
+ // The first class where Q_OBJECT or Q_DECLARE_TR_FUNCTIONS is declared is the context.
+ // The goal is to reproduce the behavior exibited by the new parser for tr function.
+ // tr function and QT_TR_NOOP, when next to each other in code, should always have the same context!
+ //
+ // The old parser does not do this.
+ // If a Q_OBJECT macro cannot be found in the first class
+ // a warning is emitted and the class is used as context regardless.
+ // This is the behavior for tr function and QT_TR_NOOP
+ // This is not correct.
+ QString contextForNoopMacro(clang::NamedDecl *namedDecl, const clang::SourceManager &sm)
+ {
+ QString context;
+ clang::DeclContext *decl = namedDecl->getDeclContext();
+ if (!decl)
+ return context;
+ while (decl) {
+ qCDebug(lcClang) << "--------------------- decl kind name: " << decl->getDeclKindName();
+ if (clang::isa<clang::CXXRecordDecl>(decl)) {
+ clang::CXXRecordDecl *recordDecl = llvm::dyn_cast<clang::CXXRecordDecl>(decl);
+
+ context = lookForContext(recordDecl, sm);
+
+ if (!context.isEmpty())
+ return context;
+ }
+ decl = decl->getParent(); // Brings to the class or struct decl is nested in, if it exists.
+ }
+
+ // If no context has been found: do not emit a warning here.
+ // because more than one NamedDecl can include the QT_TR_NOOP macro location
+ // in the following, class A and class B and c_noop will.
+ /*
+ class A {
+ class B
+ {
+ Q_OBJECT
+ const char * c_noop = QT_TR_NOOP("context is B");
+ }
+ };
+ */
+ // calling contextForNoopMacro on NamedDecl corresponding to class A
+ // no context will be found, but it's ok because the context will be found
+ // when the function is called on c_noop.
+ return context;
+ }
+
+
QString contextForFunctionDecl(clang::FunctionDecl *func, const std::string &funcName)
{
std::string context;
@@ -141,6 +267,24 @@ namespace LupdatePrivate
return point == start || point == end || (sm.isBeforeInTranslationUnit(start, point)
&& sm.isBeforeInTranslationUnit(point, end));
}
+
+ class BeforeThanCompare
+ {
+ const clang::SourceManager &SM;
+
+ public:
+ explicit BeforeThanCompare(const clang::SourceManager &SM) : SM(SM) { }
+
+ bool operator()(const clang::RawComment &LHS, const clang::RawComment &RHS)
+ {
+ return SM.isBeforeInTranslationUnit(LHS.getBeginLoc(), RHS.getBeginLoc());
+ }
+
+ bool operator()(const clang::RawComment *LHS, const clang::RawComment *RHS)
+ {
+ return operator()(*LHS, *RHS);
+ }
+ };
}
/*
@@ -179,7 +323,8 @@ bool LupdateVisitor::VisitCallExpr(clang::CallExpr *callExpression)
const auto fileLoc = sm.getFileLoc(callExpression->getBeginLoc());
if (fileLoc.isInvalid() || !fileLoc.isFileID())
return true;
- auto presumedLoc = sm.getPresumedLoc(fileLoc);
+ // not using line directive (# line)
+ auto presumedLoc = sm.getPresumedLoc(fileLoc, false);
if (presumedLoc.isInvalid())
return true;
info = { presumedLoc.getLine(), presumedLoc.getFilename() };
@@ -189,7 +334,7 @@ bool LupdateVisitor::VisitCallExpr(clang::CallExpr *callExpression)
}
// Checking that the CallExpression is from the input file we're interested in
- if (info.Filename != m_inputFile)
+ if (!LupdatePrivate::isFileSignificant(info.Filename))
return true;
qCDebug(lcClang) << "************************** VisitCallExpr ****************";
@@ -268,17 +413,22 @@ bool LupdateVisitor::VisitCallExpr(clang::CallExpr *callExpression)
return true;
}
+void LupdateVisitor::processIsolatedComments()
+{
+ auto &sourceMgr = m_context->getSourceManager();
+ processIsolatedComments(sourceMgr.getMainFileID()) ;
+}
+
/*
Retrieve the comments not associated with tr calls.
*/
-void LupdateVisitor::processIsolatedComments()
+void LupdateVisitor::processIsolatedComments(const clang::FileID file)
{
qCDebug(lcClang) << "==== processIsolatedComments ====";
auto &sourceMgr = m_context->getSourceManager();
#if (LUPDATE_CLANG_VERSION >= LUPDATE_CLANG_VERSION_CHECK(10,0,0))
- const clang::FileID file = sourceMgr.getMainFileID();
- const auto commentsInThisFile = m_context->getRawCommentList().getCommentsInFile(file);
+ const auto commentsInThisFile = m_context->Comments.getCommentsInFile(file);
if (!commentsInThisFile)
return;
@@ -287,6 +437,7 @@ void LupdateVisitor::processIsolatedComments()
tmp.emplace_back(commentInFile.second);
clang::ArrayRef<clang::RawComment *> rawComments = tmp;
#else
+ Q_UNUSED(file);
clang::ArrayRef<clang::RawComment *> rawComments = m_context->getRawCommentList().getComments();
#endif
@@ -300,16 +451,18 @@ void LupdateVisitor::processIsolatedComments()
// They are not associated to any tr calls
// Each one needs its own entry in the m_stores->AST translation store
for (const auto &rawComment : rawComments) {
- if (sourceMgr.getFilename(rawComment->getBeginLoc()).str() != m_inputFile)
+ if (!LupdatePrivate::isFileSignificant(sourceMgr.getFilename(rawComment->getBeginLoc()).str()))
continue;
// Comments not separated by an empty line will be part of the same Raw comments
// Each one needs to be saved with its line number.
// The store is used here only to pass this information.
TranslationRelatedStore store;
- store.lupdateLocationLine = sourceMgr.getPresumedLoc(rawComment->getBeginLoc()).getLine();
- qCDebug(lcClang) << " raw Comment : \n"
- << QString::fromStdString(rawComment->getRawText(sourceMgr));
- setInfoFromRawComment(QString::fromStdString(rawComment->getRawText(sourceMgr)), &store);
+ store.lupdateLocationLine = sourceMgr.getPresumedLoc(rawComment->getBeginLoc(), false).getLine();
+ store.lupdateLocationFile = QString::fromStdString(
+ sourceMgr.getPresumedLoc(rawComment->getBeginLoc(), false).getFilename());
+ QString comment = toQt(rawComment->getRawText(sourceMgr));
+ qCDebug(lcClang) << " raw Comment : \n" << comment;
+ setInfoFromRawComment(comment, &store);
}
}
@@ -337,7 +490,7 @@ std::vector<QString> LupdateVisitor::rawCommentsFromSourceLocation(
#if (LUPDATE_CLANG_VERSION >= LUPDATE_CLANG_VERSION_CHECK(10,0,0))
const clang::FileID file = sourceMgr.getDecomposedLoc(sourceLocation).first;
- const auto commentsInThisFile = m_context->getRawCommentList().getCommentsInFile(file);
+ const auto commentsInThisFile = m_context->Comments.getCommentsInFile(file);
if (!commentsInThisFile)
return {};
@@ -358,7 +511,7 @@ std::vector<QString> LupdateVisitor::rawCommentsFromSourceLocation(
clang::SourceRange(sourceLocation), m_context->getLangOpts().CommentOpts, false);
// Create a functor object to compare the source location of the comment and the declaration.
- const clang::BeforeThanCompare<clang::RawComment> compareSourceLocation(sourceMgr);
+ const LupdatePrivate::BeforeThanCompare compareSourceLocation(sourceMgr);
// Find the comment that occurs just after or within this declaration. Possible findings:
// QObject::tr(/* comment 1 */ "test"); //: comment 2 -> finds "//: comment 1"
// QObject::tr("test"); //: comment 1 -> finds "//: comment 1"
@@ -380,7 +533,7 @@ std::vector<QString> LupdateVisitor::rawCommentsFromSourceLocation(
const char *buffer = sourceMgr.getBufferData(declLocDecomp.first, &invalid).data();
if (invalid) {
qCDebug(lcClang).nospace() << "An error occurred fetching the source buffer of file: "
- << sourceMgr.getFilename(sourceLocation);
+ << toQt(sourceMgr.getFilename(sourceLocation));
return {};
}
@@ -397,7 +550,7 @@ std::vector<QString> LupdateVisitor::rawCommentsFromSourceLocation(
// If the comment and the declaration aren't in the same file, then they aren't related.
if (declLocDecomp.first != commentEndDecomp.first) {
qCDebug(lcClang) << "Comment and the declaration aren't in the same file. Comment '"
- << (*comment)->getRawText(sourceMgr) << "' is ignored, return.";
+ << toQt((*comment)->getRawText(sourceMgr)) << "' is ignored, return.";
return retrievedRawComments;
}
@@ -420,8 +573,9 @@ std::vector<QString> LupdateVisitor::rawCommentsFromSourceLocation(
}
if (sameLineComment && text.find_first_of(",") != llvm::StringRef::npos) {
qCDebug(lcClang) << "Comment ends on same line as the declaration and is separated "
- "from the tr call by a ','. Comment '"
- << (*comment)->getRawText(sourceMgr) << "' is ignored, continue.";
+ "from the tr call by a ','. Comment '"
+ << toQt((*comment)->getRawText(sourceMgr))
+ << "' is ignored, continue.";
continue; // if there is a comment on the previous line it should be picked up
}
@@ -433,7 +587,7 @@ std::vector<QString> LupdateVisitor::rawCommentsFromSourceLocation(
}
retrievedRawComments.emplace(retrievedRawComments.begin(),
- QString::fromStdString((*comment)->getRawText(sourceMgr)));
+ toQt((*comment)->getRawText(sourceMgr)));
lastDecompLoc = sourceMgr.getDecomposedLoc((*comment)->getSourceRange().getBegin()).second;
} while (comment != rawComments.begin());
@@ -549,7 +703,7 @@ void LupdateVisitor::setInfoFromRawComment(const QString &commentString,
newStore.contextArg = comment.left(index).trimmed();
newStore.lupdateComment = comment.mid(index).trimmed();
}
- newStore.lupdateLocationFile = QString::fromStdString(m_inputFile);
+ newStore.lupdateLocationFile = store->lupdateLocationFile;
newStore.lupdateLocationLine = storeLine;
newStore.locationCol = 0;
newStore.printStore();
@@ -564,18 +718,53 @@ void LupdateVisitor::setInfoFromRawComment(const QString &commentString,
void LupdateVisitor::processPreprocessorCalls()
{
- m_macro = (m_stores->Preprocessor.size() > 0);
- for (const auto &store : m_stores->Preprocessor)
- processPreprocessorCall(store);
+ QString inputFile = toQt(m_inputFile);
+ for (const auto &store : m_stores->Preprocessor) {
+ if (store.lupdateInputFile == inputFile)
+ processPreprocessorCall(store);
+ }
+
+ // Processing the isolated comments (TRANSLATOR) in the files included in the main input file.
+#if (LUPDATE_CLANG_VERSION >= LUPDATE_CLANG_VERSION_CHECK(14,0,0))
+ for (const clang::FileEntry *file : m_preprocessor->getIncludedFiles()) {
+ auto &sourceMgr = m_context->getSourceManager();
+
+ clang::StringRef fileNameRealPath = file->tryGetRealPathName();
+ if (!LupdatePrivate::isFileSignificant(fileNameRealPath.str())
+ || fileNameRealPath.str() == m_inputFile)
+ continue;
+
+ auto sourceFile = sourceMgr.getFileManager()
+ .getFile(fileNameRealPath);
+ auto sourceLocation = sourceMgr.translateFileLineCol(sourceFile.get(), 1, 1);
+ const clang::FileID fileId = sourceMgr.getDecomposedLoc(sourceLocation).first;
+ processIsolatedComments(fileId);
+ }
+#endif
+
+ if (m_qDeclareTrMacroAll.size() > 0 || m_noopTranslationMacroAll.size() > 0)
+ m_macro = true;
}
void LupdateVisitor::processPreprocessorCall(TranslationRelatedStore store)
{
+ // To get the comments around the macros
const std::vector<QString> rawComments = rawCommentsFromSourceLocation(store
.callLocation(m_context->getSourceManager()));
+ // to pick up the raw comments in the files collected from the preprocessing.
for (const auto &rawComment : rawComments)
setInfoFromRawComment(rawComment, &store);
+ // Processing the isolated comments (TRANSLATOR) in the files included in the main input file.
+#if (LUPDATE_CLANG_VERSION < LUPDATE_CLANG_VERSION_CHECK(14,0,0))
+ if (store.callType.contains(QStringLiteral("InclusionDirective"))) {
+ auto &sourceMgr = m_context->getSourceManager();
+ const clang::FileID file = sourceMgr.getDecomposedLoc(store.callLocation(sourceMgr)).first;
+ processIsolatedComments(file);
+ return;
+ }
+#endif
+
if (store.isValid()) {
if (store.funcName.contains(QStringLiteral("Q_DECLARE_TR_FUNCTIONS")))
m_qDeclareTrMacroAll.emplace_back(std::move(store));
@@ -593,12 +782,12 @@ bool LupdateVisitor::VisitNamedDecl(clang::NamedDecl *namedDeclaration)
if (!fullLocation.isValid() || !fullLocation.getFileEntry())
return true;
- if (fullLocation.getFileEntry()->getName() != m_inputFile)
+ if (!LupdatePrivate::isFileSignificant(fullLocation.getFileEntry()->getName().str()))
return true;
- qCDebug(lcClang) << "NamedDecl Name: " << namedDeclaration->getQualifiedNameAsString();
- qCDebug(lcClang) << "NamedDecl source: " << namedDeclaration->getSourceRange().printToString(
- m_context->getSourceManager());
+ qCDebug(lcClang) << "NamedDecl Name: " << QString::fromStdString(namedDeclaration->getQualifiedNameAsString());
+ qCDebug(lcClang) << "NamedDecl source: " << QString::fromStdString(namedDeclaration->getSourceRange().printToString(
+ m_context->getSourceManager()));
// Checks if there is a macro located within the range of this NamedDeclaration
// in order to find a context for the macro
findContextForTranslationStoresFromPP(namedDeclaration);
@@ -623,29 +812,21 @@ void LupdateVisitor::findContextForTranslationStoresFromPP(clang::NamedDecl *nam
if (!sourceLoc.isValid())
continue;
if (LupdatePrivate::isPointWithin(namedDeclaration->getSourceRange(), sourceLoc, sm)) {
- /*
- void N3::C1::C12::C121::f2()
- {
- const char test_NOOP[] = QT_TR_NOOP("A QT_TR_NOOP N3::C1::C13");
- }
- In such case namedDeclaration->getQualifiedNameAsString() will give only
- test_NOOP as context.
- This is why the following function is needed
- */
- store.contextRetrievedTempNOOP = LupdatePrivate::contextForNoopMacro(namedDeclaration);
+
+ store.contextRetrieved = LupdatePrivate::contextForNoopMacro(namedDeclaration, sm);
qCDebug(lcClang) << "------------------------------------------NOOP Macro in range ---";
- qCDebug(lcClang) << "Range " << namedDeclaration->getSourceRange().printToString(sm);
- qCDebug(lcClang) << "Point " << sourceLoc.printToString(sm);
+ qCDebug(lcClang) << "Range " << QString::fromStdString(namedDeclaration->getSourceRange().printToString(sm));
+ qCDebug(lcClang) << "Point " << QString::fromStdString(sourceLoc.printToString(sm));
qCDebug(lcClang) << "=========== Visit Named Declaration =============================";
qCDebug(lcClang) << " Declaration Location " <<
- namedDeclaration->getSourceRange().printToString(sm);
+ QString::fromStdString(namedDeclaration->getSourceRange().printToString(sm));
qCDebug(lcClang) << " Macro Location "
- << sourceLoc.printToString(sm);
+ << QString::fromStdString(sourceLoc.printToString(sm));
qCDebug(lcClang) << " Context namedDeclaration->getQualifiedNameAsString() "
- << namedDeclaration->getQualifiedNameAsString();
+ << QString::fromStdString(namedDeclaration->getQualifiedNameAsString());
qCDebug(lcClang) << " Context LupdatePrivate::contextForNoopMacro "
- << store.contextRetrievedTempNOOP;
- qCDebug(lcClang) << " Context Retrieved " << store.contextRetrievedTempNOOP;
+ << store.contextRetrieved;
+ qCDebug(lcClang) << " Context Retrieved " << store.contextRetrieved;
qCDebug(lcClang) << "=================================================================";
store.printStore();
}
@@ -659,17 +840,15 @@ void LupdateVisitor::findContextForTranslationStoresFromPP(clang::NamedDecl *nam
store.contextRetrieved = QString::fromStdString(
namedDeclaration->getQualifiedNameAsString());
qCDebug(lcClang) << "------------------------------------------DECL Macro in range ---";
- qCDebug(lcClang) << "Range " << namedDeclaration->getSourceRange().printToString(sm);
- qCDebug(lcClang) << "Point " << sourceLoc.printToString(sm);
+ qCDebug(lcClang) << "Range " << QString::fromStdString(namedDeclaration->getSourceRange().printToString(sm));
+ qCDebug(lcClang) << "Point " << QString::fromStdString(sourceLoc.printToString(sm));
qCDebug(lcClang) << "=========== Visit Named Declaration =============================";
qCDebug(lcClang) << " Declaration Location " <<
- namedDeclaration->getSourceRange().printToString(sm);
+ QString::fromStdString(namedDeclaration->getSourceRange().printToString(sm));
qCDebug(lcClang) << " Macro Location "
- << sourceLoc.printToString(sm);
+ << QString::fromStdString(sourceLoc.printToString(sm));
qCDebug(lcClang) << " Context namedDeclaration->getQualifiedNameAsString() "
<< store.contextRetrieved;
- qCDebug(lcClang) << " Context LupdatePrivate::contextForNoopMacro "
- << LupdatePrivate::contextForNoopMacro(namedDeclaration);
qCDebug(lcClang) << " Context Retrieved " << store.contextRetrieved;
qCDebug(lcClang) << "=================================================================";
store.printStore();
@@ -677,13 +856,18 @@ void LupdateVisitor::findContextForTranslationStoresFromPP(clang::NamedDecl *nam
}
}
-void LupdateVisitor::generateOuput()
+void LupdateVisitor::generateOutput()
{
- qCDebug(lcClang) << "=================m_trCallserateOuput============================";
+ qCDebug(lcClang) << "=================generateOutput============================";
m_noopTranslationMacroAll.erase(std::remove_if(m_noopTranslationMacroAll.begin(),
- m_noopTranslationMacroAll.end(), [](const TranslationRelatedStore &store) {
- // only fill if a context has been retrieved in the file we're currently visiting
- return store.contextRetrievedTempNOOP.isEmpty() && store.contextArg.isEmpty();
+ m_noopTranslationMacroAll.end(), [](const TranslationRelatedStore &store) {
+ // Macros not located in the currently visited file are missing context (and it's normal),
+ // so an output is only generated for macros present in the currently visited file.
+ // If context could not be found, it is warned against in ClangCppParser::collectMessages
+ // (where it is possible to order the warnings and print them consistantly)
+ if (!LupdatePrivate::isFileSignificant(store.lupdateLocationFile.toStdString()))
+ return true;
+ return false;
}), m_noopTranslationMacroAll.end());
m_stores->QNoopTranlsationWithContext.emplace_bulk(std::move(m_noopTranslationMacroAll));
diff --git a/src/linguist/lupdate/clangtoolastreader.h b/src/linguist/lupdate/clangtoolastreader.h
index 124c5d77e..a8483219d 100644
--- a/src/linguist/lupdate/clangtoolastreader.h
+++ b/src/linguist/lupdate/clangtoolastreader.h
@@ -1,53 +1,26 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef CLANG_TOOL_AST_READER_H
#define CLANG_TOOL_AST_READER_H
#include "cpp_clang.h"
-#if defined(Q_CC_MSVC)
-# pragma warning(push)
-# pragma warning(disable: 4100)
-# pragma warning(disable: 4146)
-# pragma warning(disable: 4267)
-# pragma warning(disable: 4624)
-#endif
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_MSVC(4100)
+QT_WARNING_DISABLE_MSVC(4146)
+QT_WARNING_DISABLE_MSVC(4267)
+QT_WARNING_DISABLE_MSVC(4624)
+QT_WARNING_DISABLE_GCC("-Wnonnull")
#include <clang/AST/RecursiveASTVisitor.h>
#include <clang/Frontend/CompilerInstance.h>
#include <clang/Frontend/FrontendActions.h>
#include <clang/Tooling/Tooling.h>
-#if defined(Q_CC_MSVC)
-# pragma warning(pop)
-#endif
+QT_WARNING_POP
+#include <iostream>
#include <memory>
QT_BEGIN_NAMESPACE
@@ -57,11 +30,19 @@ class Translator;
class LupdateVisitor : public clang::RecursiveASTVisitor<LupdateVisitor>
{
public:
+#if (LUPDATE_CLANG_VERSION >= LUPDATE_CLANG_VERSION_CHECK(14,0,0))
+ explicit LupdateVisitor(clang::ASTContext *context,
+ clang::Preprocessor *preprocessor, Stores *stores)
+ : m_context(context)
+ , m_preprocessor(preprocessor)
+ , m_stores(stores)
+#else
explicit LupdateVisitor(clang::ASTContext *context, Stores *stores)
: m_context(context)
, m_stores(stores)
+#endif
{
- m_inputFile = m_context->getSourceManager().getFileEntryForID(
+ m_inputFile = m_context->getSourceManager().getFileEntryRefForID(
m_context->getSourceManager().getMainFileID())->getName();
}
@@ -69,7 +50,7 @@ public:
void processPreprocessorCalls();
bool VisitNamedDecl(clang::NamedDecl *namedDeclaration);
void findContextForTranslationStoresFromPP(clang::NamedDecl *namedDeclaration);
- void generateOuput();
+ void generateOutput();
private:
std::vector<QString> rawCommentsForCallExpr(const clang::CallExpr *callExpr) const;
@@ -79,8 +60,12 @@ private:
void processPreprocessorCall(TranslationRelatedStore store);
void processIsolatedComments();
+ void processIsolatedComments(const clang::FileID file);
clang::ASTContext *m_context = nullptr;
+#if (LUPDATE_CLANG_VERSION >= LUPDATE_CLANG_VERSION_CHECK(14,0,0))
+ clang::Preprocessor *m_preprocessor = nullptr;
+#endif
std::string m_inputFile;
Stores *m_stores = nullptr;
@@ -94,8 +79,14 @@ private:
class LupdateASTConsumer : public clang::ASTConsumer
{
public:
+#if (LUPDATE_CLANG_VERSION >= LUPDATE_CLANG_VERSION_CHECK(14,0,0))
+ explicit LupdateASTConsumer(clang::ASTContext *context, clang::Preprocessor *preprocessor,
+ Stores *stores)
+ : m_visitor(context, preprocessor, stores)
+#else
explicit LupdateASTConsumer(clang::ASTContext *context, Stores *stores)
: m_visitor(context, stores)
+#endif
{}
// This method is called when the ASTs for entire translation unit have been
@@ -105,7 +96,7 @@ public:
m_visitor.processPreprocessorCalls();
bool traverse = m_visitor.TraverseAST(context);
qCDebug(lcClang) << "TraverseAST: " << traverse;
- m_visitor.generateOuput();
+ m_visitor.generateOutput();
}
private:
@@ -122,7 +113,12 @@ public:
std::unique_ptr<clang::ASTConsumer> CreateASTConsumer(
clang::CompilerInstance &compiler, llvm::StringRef /* inFile */) override
{
- auto consumer = new LupdateASTConsumer(&compiler.getASTContext(), m_stores);
+ #if (LUPDATE_CLANG_VERSION >= LUPDATE_CLANG_VERSION_CHECK(14,0,0))
+ auto consumer = new LupdateASTConsumer(&compiler.getASTContext(),
+ &compiler.getPreprocessor(), m_stores);
+ #else
+ auto consumer = new LupdateASTConsumer(&compiler.getASTContext(), m_stores);
+ #endif
return std::unique_ptr<clang::ASTConsumer>(consumer);
}
diff --git a/src/linguist/lupdate/cpp.cpp b/src/linguist/lupdate/cpp.cpp
index ede034353..00c36d9fa 100644
--- a/src/linguist/lupdate/cpp.cpp
+++ b/src/linguist/lupdate/cpp.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "cpp.h"
@@ -39,11 +14,9 @@ QT_BEGIN_NAMESPACE
/* qmake ignore Q_OBJECT */
-static QString MagicComment(QLatin1String("TRANSLATOR"));
+using namespace Qt::StringLiterals;
-#define STRING(s) static QString str##s(QLatin1String(#s))
-
-//#define DIAGNOSE_RETRANSLATABILITY // FIXME: should make a runtime option of this
+static const QString CppMagicComment = u"TRANSLATOR"_s;
size_t qHash(const HashString &str)
{
@@ -84,7 +57,16 @@ private:
QBitArray m_ba;
};
-class CppParser {
+struct CppParserState
+{
+ NamespaceList namespaces;
+ QStack<qsizetype> namespaceDepths;
+ NamespaceList functionContext;
+ QString functionContextUnresolved;
+ QString pendingContext;
+};
+
+class CppParser : private CppParserState {
public:
CppParser(ParseResults *results = 0);
@@ -96,14 +78,6 @@ public:
const ParseResults *recordResults(bool isHeader);
void deleteResults() { delete results; }
- struct SavedState {
- NamespaceList namespaces;
- QStack<int> namespaceDepths;
- NamespaceList functionContext;
- QString functionContextUnresolved;
- QString pendingContext;
- };
-
private:
struct IfdefState {
IfdefState() {}
@@ -114,7 +88,7 @@ private:
elseLine(-1)
{}
- SavedState state;
+ CppParserState state;
int bracketDepth, bracketDepth1st;
int braceDepth, braceDepth1st;
int parenDepth, parenDepth1st;
@@ -122,14 +96,13 @@ private:
};
enum TokenType {
- Tok_Eof, Tok_class, Tok_friend, Tok_namespace, Tok_using, Tok_return,
- Tok_Q_OBJECT, Tok_Access, Tok_Cancel,
+ Tok_Eof, Tok_class, Tok_enum, Tok_friend, Tok_namespace, Tok_using, Tok_return,
+ Tok_decltype, Tok_Q_OBJECT, Tok_Access, Tok_Cancel,
Tok_Ident, Tok_String, Tok_RawString, Tok_Arrow, Tok_Colon, Tok_ColonColon,
- Tok_Equals, Tok_LeftBracket, Tok_RightBracket, Tok_QuestionMark,
+ Tok_Equals, Tok_LeftBracket, Tok_RightBracket, Tok_AngleBracket, Tok_QuestionMark,
Tok_LeftBrace, Tok_RightBrace, Tok_LeftParen, Tok_RightParen, Tok_Comma, Tok_Semicolon,
Tok_Null, Tok_Integer,
- Tok_QuotedInclude, Tok_AngledInclude,
- Tok_Other
+ Tok_QuotedInclude, Tok_AngledInclude
};
std::ostream &yyMsg(int line = 0);
@@ -159,8 +132,8 @@ private:
void processInclude(const QString &file, ConversionData &cd,
const QStringList &includeStack, QSet<QString> &inclusions);
- void saveState(SavedState *state);
- void loadState(const SavedState *state);
+ void saveState(CppParserState *state);
+ void loadState(const CppParserState &state);
static QString stringifyNamespace(int start, const NamespaceList &namespaces);
static QString stringifyNamespace(const NamespaceList &namespaces)
@@ -198,6 +171,7 @@ private:
int yyCh;
bool yyAtNewline;
QString yyWord;
+ qsizetype yyWordInitialCapacity = 0;
QStack<IfdefState> yyIfdefStack;
int yyBracketDepth;
int yyBraceDepth;
@@ -225,17 +199,12 @@ private:
QString sourcetext;
TranslatorMessage::ExtraData extra;
- NamespaceList namespaces;
- QStack<int> namespaceDepths;
- NamespaceList functionContext;
- QString functionContextUnresolved;
QString prospectiveContext;
- QString pendingContext;
ParseResults *results;
Translator *tor;
bool directInclude;
- SavedState savedState;
+ CppParserState savedState;
int yyMinBraceDepth;
bool inDefine;
};
@@ -363,31 +332,50 @@ CppParser::TokenType CppParser::lookAheadToSemicolonOrLeftBrace()
}
}
-STRING(Q_OBJECT);
-STRING(class);
-STRING(final);
-STRING(friend);
-STRING(namespace);
-STRING(nullptr);
-STRING(Q_NULLPTR);
-STRING(NULL);
-STRING(operator);
-STRING(return);
-STRING(struct);
-STRING(using);
-STRING(private);
-STRING(protected);
-STRING(public);
-STRING(slots);
-STRING(signals);
-STRING(Q_SLOTS);
-STRING(Q_SIGNALS);
+static bool isStringLiteralPrefix(const QStringView s)
+{
+ return s == u"L"_s
+ || s == u"U"_s
+ || s == u"u"_s
+ || s == u"u8"_s;
+}
+
+static bool isRawStringLiteralPrefix(QStringView s)
+{
+ if (s.endsWith(u'R')) {
+ s.chop(1);
+ return s.isEmpty() || isStringLiteralPrefix(s);
+ }
+ return false;
+}
+
+static const QString strQ_OBJECT = u"Q_OBJECT"_s;
+static const QString strclass = u"class"_s;
+static const QString strdecltype = u"decltype"_s;
+static const QString strenum = u"enum"_s;
+static const QString strfinal = u"final"_s;
+static const QString strfriend = u"friend"_s;
+static const QString strnamespace = u"namespace"_s;
+static const QString strnullptr = u"nullptr"_s;
+static const QString strQ_NULLPTR = u"Q_NULLPTR"_s;
+static const QString strNULL = u"NULL"_s;
+static const QString stroperator = u"operator"_s;
+static const QString strreturn = u"return"_s;
+static const QString strstruct = u"struct"_s;
+static const QString strusing = u"using"_s;
+static const QString strprivate = u"private"_s;
+static const QString strprotected = u"protected"_s;
+static const QString strpublic = u"public"_s;
+static const QString strslots = u"slots"_s;
+static const QString strsignals = u"signals"_s;
+static const QString strQ_SLOTS = u"Q_SLOTS"_s;
+static const QString strQ_SIGNALS = u"Q_SIGNALS"_s;
CppParser::TokenType CppParser::getToken()
{
restart:
// Failing this assertion would mean losing the preallocated buffer.
- Q_ASSERT(yyWord.isDetached());
+ Q_ASSERT(yyWord.capacity() == yyWordInitialCapacity);
while (yyCh != EOF) {
yyLineNo = yyCurLineNo;
@@ -511,8 +499,8 @@ CppParser::TokenType CppParser::getToken()
|| yyBraceDepth != is.braceDepth1st
|| yyParenDepth != is.parenDepth1st)
yyMsg(is.elseLine)
- << qPrintable(LU::tr("Parenthesis/bracket/brace mismatch between "
- "#if and #else branches; using #if branch\n"));
+ << "Parenthesis/bracket/brace mismatch between "
+ "#if and #else branches; using #if branch\n";
} else {
is.bracketDepth1st = yyBracketDepth;
is.braceDepth1st = yyBraceDepth;
@@ -534,12 +522,12 @@ CppParser::TokenType CppParser::getToken()
|| yyBraceDepth != is.braceDepth1st
|| yyParenDepth != is.parenDepth1st)
yyMsg(is.elseLine)
- << qPrintable(LU::tr("Parenthesis/brace mismatch between "
- "#if and #else branches; using #if branch\n"));
+ << "Parenthesis/brace mismatch between "
+ "#if and #else branches; using #if branch\n";
yyBracketDepth = is.bracketDepth1st;
yyBraceDepth = is.braceDepth1st;
yyParenDepth = is.parenDepth1st;
- loadState(&is.state);
+ loadState(is.state);
}
}
yyCh = getChar();
@@ -561,7 +549,7 @@ CppParser::TokenType CppParser::getToken()
forever {
yyCh = getChar();
if (yyCh == EOF) {
- yyMsg() << qPrintable(LU::tr("Unterminated C++ comment\n"));
+ yyMsg() << "Unterminated C++ comment\n";
break;
}
@@ -591,6 +579,11 @@ CppParser::TokenType CppParser::getToken()
//qDebug() << "IDENT: " << yyWord;
+ if (yyCh == '"' && isStringLiteralPrefix(yyWord)) {
+ // Handle prefixed string literals as ordinary string literals.
+ continue;
+ }
+
switch (yyWord.unicode()[0].unicode()) {
case 'N':
if (yyWord == strNULL)
@@ -608,6 +601,14 @@ CppParser::TokenType CppParser::getToken()
if (yyWord == strclass)
return Tok_class;
break;
+ case 'd':
+ if (yyWord == strdecltype)
+ return Tok_decltype;
+ break;
+ case 'e':
+ if (yyWord == strenum)
+ return Tok_enum;
+ break;
case 'f':
if (yyWord == strfriend)
return Tok_friend;
@@ -653,10 +654,7 @@ CppParser::TokenType CppParser::getToken()
}
// a C++11 raw string literal?
- if (yyCh == '"' && (
- yyWord == QLatin1String("R") || yyWord == QLatin1String("LR") || yyWord == QLatin1String("u8R") ||
- yyWord == QLatin1String("uR") || yyWord == QLatin1String("UR")
- )) {
+ if (yyCh == '"' && isRawStringLiteralPrefix(yyWord)) {
ptr = reinterpret_cast<ushort *>(const_cast<QChar *>(yyWord.unicode()));
//get delimiter
QString delimiter;
@@ -700,7 +698,7 @@ CppParser::TokenType CppParser::getToken()
else
yyWord.resize(ptr - reinterpret_cast<const ushort *>(yyWord.unicode()));
if (yyCh != '"')
- yyMsg() << qPrintable(LU::tr("Unterminated/mismatched C++ Raw string\n"));
+ yyMsg() << "Unterminated/mismatched C++ Raw string\n";
else
yyCh = getChar();
return Tok_RawString;
@@ -711,7 +709,7 @@ CppParser::TokenType CppParser::getToken()
switch (yyCh) {
case '\n':
if (inDefine) {
- loadState(&savedState);
+ loadState(savedState);
prospectiveContext.clear();
yyBraceDepth = yyMinBraceDepth;
yyMinBraceDepth = 0;
@@ -741,7 +739,7 @@ CppParser::TokenType CppParser::getToken()
forever {
yyCh = getChar();
if (yyCh == EOF) {
- yyMsg() << qPrintable(LU::tr("Unterminated C++ comment\n"));
+ yyMsg() << "Unterminated C++ comment\n";
break;
}
*ptr++ = yyCh;
@@ -775,7 +773,7 @@ CppParser::TokenType CppParser::getToken()
yyWord.resize(ptr - (ushort *)yyWord.unicode());
if (yyCh != '"')
- yyMsg() << qPrintable(LU::tr("Unterminated C++ string\n"));
+ yyMsg() << "Unterminated C++ string\n";
else
yyCh = getChar();
return Tok_String;
@@ -804,7 +802,7 @@ CppParser::TokenType CppParser::getToken()
case '>':
case '<':
yyCh = getChar();
- return Tok_Other;
+ return Tok_AngleBracket;
case '\'':
yyCh = getChar();
if (yyCh == '\\')
@@ -812,7 +810,7 @@ CppParser::TokenType CppParser::getToken()
forever {
if (yyCh == EOF || yyCh == '\n') {
- yyMsg() << qPrintable(LU::tr("Unterminated C++ character\n"));
+ yyMsg() << "Unterminated C++ character\n";
break;
}
yyCh = getChar();
@@ -832,8 +830,8 @@ CppParser::TokenType CppParser::getToken()
if (yyBraceDepth == yyMinBraceDepth) {
if (!inDefine)
yyMsg(yyCurLineNo)
- << qPrintable(LU::tr("Excess closing brace in C++ code"
- " (or abuse of the C++ preprocessor)\n"));
+ << "Excess closing brace in C++ code"
+ " (or abuse of the C++ preprocessor)\n";
// Avoid things getting messed up even more
yyCh = getChar();
return Tok_Semicolon;
@@ -850,8 +848,8 @@ CppParser::TokenType CppParser::getToken()
case ')':
if (yyParenDepth == 0)
yyMsg(yyCurLineNo)
- << qPrintable(LU::tr("Excess closing parenthesis in C++ code"
- " (or abuse of the C++ preprocessor)\n"));
+ << "Excess closing parenthesis in C++ code"
+ " (or abuse of the C++ preprocessor)\n";
else
yyParenDepth--;
yyCh = getChar();
@@ -865,8 +863,8 @@ CppParser::TokenType CppParser::getToken()
case ']':
if (yyBracketDepth == 0)
yyMsg(yyCurLineNo)
- << qPrintable(LU::tr("Excess closing bracket in C++ code"
- " (or abuse of the C++ preprocessor)\n"));
+ << "Excess closing bracket in C++ code"
+ " (or abuse of the C++ preprocessor)\n";
else
yyBracketDepth--;
yyCh = getChar();
@@ -882,10 +880,10 @@ CppParser::TokenType CppParser::getToken()
return Tok_QuestionMark;
case '0':
yyCh = getChar();
- if (yyCh == 'x') {
+ if (yyCh == 'x' || yyCh == 'X') {
do {
yyCh = getChar();
- } while ((yyCh >= '0' && yyCh <= '9')
+ } while ((yyCh >= '0' && yyCh <= '9') || yyCh == '\''
|| (yyCh >= 'a' && yyCh <= 'f') || (yyCh >= 'A' && yyCh <= 'F'));
return Tok_Integer;
}
@@ -903,7 +901,7 @@ CppParser::TokenType CppParser::getToken()
case '9':
do {
yyCh = getChar();
- } while (yyCh >= '0' && yyCh <= '9');
+ } while ((yyCh >= '0' && yyCh <= '9') || yyCh == '\'');
return Tok_Integer;
default:
yyCh = getChar();
@@ -919,38 +917,30 @@ CppParser::TokenType CppParser::getToken()
utilities for the third part.
*/
-void CppParser::saveState(SavedState *state)
+void CppParser::saveState(CppParserState *state)
{
- state->namespaces = namespaces;
- state->namespaceDepths = namespaceDepths;
- state->functionContext = functionContext;
- state->functionContextUnresolved = functionContextUnresolved;
- state->pendingContext = pendingContext;
+ *state = *this;
}
-void CppParser::loadState(const SavedState *state)
+void CppParser::loadState(const CppParserState &state)
{
- namespaces = state->namespaces;
- namespaceDepths = state->namespaceDepths;
- functionContext = state->functionContext;
- functionContextUnresolved = state->functionContextUnresolved;
- pendingContext = state->pendingContext;
+ *static_cast<CppParserState *>(this) = state;
}
Namespace *CppParser::modifyNamespace(NamespaceList *namespaces, bool haveLast)
{
Namespace *pns, *ns = &results->rootNamespace;
- for (int i = 1; i < namespaces->count(); ++i) {
+ for (int i = 1; i < namespaces->size(); ++i) {
pns = ns;
if (!(ns = pns->children.value(namespaces->at(i)))) {
do {
ns = new Namespace;
- if (haveLast || i < namespaces->count() - 1)
+ if (haveLast || i < namespaces->size() - 1)
if (const Namespace *ons = findNamespace(*namespaces, i + 1))
ns->classDef = ons->classDef;
pns->children.insert(namespaces->at(i), ns);
pns = ns;
- } while (++i < namespaces->count());
+ } while (++i < namespaces->size());
break;
}
}
@@ -961,10 +951,10 @@ QString CppParser::stringifyNamespace(int start, const NamespaceList &namespaces
{
QString ret;
int l = 0;
- for (int j = start; j < namespaces.count(); ++j)
- l += namespaces.at(j).value().length();
- ret.reserve(l + qMax(0, (namespaces.count() - start - 1)) * 2);
- for (int i = start; i < namespaces.count(); ++i) {
+ for (int j = start; j < namespaces.size(); ++j)
+ l += namespaces.at(j).value().size();
+ ret.reserve(l + qMax(0, (namespaces.size() - start - 1)) * 2);
+ for (int i = start; i < namespaces.size(); ++i) {
if (i > start)
ret += QLatin1String("::");
ret += namespaces.at(i).value();
@@ -1048,7 +1038,7 @@ bool CppParser::qualifyOneCallbackUsing(const Namespace *ns, void *context) cons
for (const HashStringList &use : ns->usings)
if (!data->visitedUsings->contains(use)) {
data->visitedUsings->insert(use);
- if (qualifyOne(use.value(), use.value().count(), data->segment, data->resolved,
+ if (qualifyOne(use.value(), use.value().size(), data->segment, data->resolved,
data->visitedUsings))
return true;
}
@@ -1083,7 +1073,7 @@ bool CppParser::fullyQualify(const NamespaceList &namespaces, int nsCnt,
if (segments.first().value().isEmpty()) {
// fully qualified
- if (segments.count() == 1) {
+ if (segments.size() == 1) {
resolved->clear();
*resolved << HashString(QString());
return true;
@@ -1098,8 +1088,8 @@ bool CppParser::fullyQualify(const NamespaceList &namespaces, int nsCnt,
do {
if (qualifyOne(namespaces, nsIdx + 1, segments[initSegIdx], resolved)) {
int segIdx = initSegIdx;
- while (++segIdx < segments.count()) {
- if (!qualifyOne(*resolved, resolved->count(), segments[segIdx], resolved)) {
+ while (++segIdx < segments.size()) {
+ if (!qualifyOne(*resolved, resolved->size(), segments[segIdx], resolved)) {
if (unresolved)
*unresolved = segments.mid(segIdx);
return false;
@@ -1119,7 +1109,7 @@ bool CppParser::fullyQualify(const NamespaceList &namespaces,
const NamespaceList &segments, bool isDeclaration,
NamespaceList *resolved, NamespaceList *unresolved) const
{
- return fullyQualify(namespaces, namespaces.count(),
+ return fullyQualify(namespaces, namespaces.size(),
segments, isDeclaration, resolved, unresolved);
}
@@ -1145,7 +1135,7 @@ const Namespace *CppParser::findNamespace(const NamespaceList &namespaces, int n
{
const Namespace *ns = 0;
if (nsCount == -1)
- nsCount = namespaces.count();
+ nsCount = namespaces.size();
visitNamespace(namespaces, nsCount, &CppParser::findNamespaceCallback, &ns);
return ns;
}
@@ -1159,10 +1149,11 @@ void CppParser::enterNamespace(NamespaceList *namespaces, const HashString &name
void CppParser::truncateNamespaces(NamespaceList *namespaces, int length)
{
- if (namespaces->count() > length)
+ if (namespaces->size() > length)
namespaces->erase(namespaces->begin() + length, namespaces->end());
}
+
/*
Functions for processing include files.
*/
@@ -1249,7 +1240,7 @@ void CppFiles::addIncludeCycle(const QSet<QString> &fileNames)
}
qDeleteAll(intersectingCycles);
- for (const QString &fileName : qAsConst(cycle->fileNames))
+ for (const QString &fileName : std::as_const(cycle->fileNames))
includeCycles().insert(fileName, cycle);
}
@@ -1264,7 +1255,7 @@ void CppParser::processInclude(const QString &file, ConversionData &cd, const QS
{
QString cleanFile = QDir::cleanPath(file);
- for (const QString &ex : qAsConst(cd.m_excludes)) {
+ for (const QString &ex : std::as_const(cd.m_excludes)) {
QRegularExpression rx(QRegularExpression::wildcardToRegularExpression(ex));
if (rx.match(cleanFile).hasMatch())
return;
@@ -1281,7 +1272,7 @@ void CppParser::processInclude(const QString &file, ConversionData &cd, const QS
// it. Otherwise it is safe to process it stand-alone and re-use the parsed
// namespace data for inclusion into other files.
bool isIndirect = false;
- if (namespaces.count() == 1 && functionContext.count() == 1
+ if (namespaces.size() == 1 && functionContext.size() == 1
&& functionContextUnresolved.isEmpty() && pendingContext.isEmpty()
&& !CppFiles::isBlacklisted(cleanFile)
&& isHeader(cleanFile)) {
@@ -1297,7 +1288,8 @@ void CppParser::processInclude(const QString &file, ConversionData &cd, const QS
QFile f(cleanFile);
if (!f.open(QIODevice::ReadOnly)) {
- yyMsg() << qPrintable(LU::tr("Cannot open %1: %2\n").arg(cleanFile, f.errorString()));
+ yyMsg() << qPrintable(
+ QStringLiteral("Cannot open %1: %2\n").arg(cleanFile, f.errorString()));
return;
}
@@ -1308,7 +1300,7 @@ void CppParser::processInclude(const QString &file, ConversionData &cd, const QS
inclusions.insert(cleanFile);
if (isIndirect) {
CppParser parser;
- for (const QString &projectRoot : qAsConst(cd.m_projectRoots))
+ for (const QString &projectRoot : std::as_const(cd.m_projectRoots))
if (cleanFile.startsWith(projectRoot)) {
parser.setTranslator(new Translator);
break;
@@ -1372,12 +1364,12 @@ bool CppParser::matchString(QString *s)
}
}
-STRING(QApplication);
-STRING(QCoreApplication);
-STRING(UnicodeUTF8);
-STRING(DefaultCodec);
-STRING(CodecForTr);
-STRING(Latin1);
+static const QString strQApplication = u"QApplication"_s;
+static const QString strQCoreApplication = u"QCoreApplication"_s;
+static const QString strUnicodeUTF8 = u"UnicodeUTF8"_s;
+static const QString strDefaultCodec = u"DefaultCodec"_s;
+static const QString strCodecForTr = u"CodecForTr"_s;
+static const QString strLatin1 = u"Latin1"_s;
bool CppParser::matchEncoding()
{
@@ -1393,7 +1385,7 @@ bool CppParser::matchEncoding()
return true;
}
if (yyWord == strLatin1 || yyWord == strDefaultCodec || yyWord == strCodecForTr)
- yyMsg() << qPrintable(LU::tr("Unsupported encoding Latin1/DefaultCodec/CodecForTr\n"));
+ yyMsg() << "Unsupported encoding Latin1/DefaultCodec/CodecForTr\n";
return false;
}
@@ -1461,7 +1453,7 @@ void CppParser::recordMessage(int line, const QString &context, const QString &t
void CppParser::handleTr(QString &prefix, bool plural)
{
if (!sourcetext.isEmpty())
- yyMsg() << qPrintable(LU::tr("//% cannot be used with tr() / QT_TR_NOOP(). Ignoring\n"));
+ yyMsg() << "//% cannot be used with tr() / QT_TR_NOOP(). Ignoring\n";
int line = yyLineNo;
yyTok = getToken();
if (matchString(&text) && !text.isEmpty()) {
@@ -1480,16 +1472,17 @@ void CppParser::handleTr(QString &prefix, bool plural)
NamespaceList unresolved;
if (!fullyQualify(namespaces, pendingContext, true, &functionContext, &unresolved)) {
functionContextUnresolved = stringifyNamespace(0, unresolved);
- yyMsg() << qPrintable(LU::tr("Qualifying with unknown namespace/class %1::%2\n")
- .arg(stringifyNamespace(functionContext)).arg(unresolved.first().value()));
+ yyMsg() << qPrintable(
+ QStringLiteral("Qualifying with unknown namespace/class %1::%2\n")
+ .arg(stringifyNamespace(functionContext)).arg(unresolved.first().value()));
}
pendingContext.clear();
}
if (prefix.isEmpty()) {
if (functionContextUnresolved.isEmpty()) {
- int idx = functionContext.length();
+ int idx = functionContext.size();
if (idx < 2) {
- yyMsg() << qPrintable(LU::tr("tr() cannot be called without context\n"));
+ yyMsg() << "tr() cannot be called without context\n";
return;
}
Namespace *fctx;
@@ -1498,8 +1491,8 @@ void CppParser::handleTr(QString &prefix, bool plural)
context = stringifyNamespace(functionContext);
fctx = findNamespace(functionContext)->classDef;
if (!fctx->complained) {
- yyMsg() << qPrintable(LU::tr("Class '%1' lacks Q_OBJECT macro\n")
- .arg(context));
+ yyMsg() << qPrintable(
+ QStringLiteral("Class '%1' lacks Q_OBJECT macro\n").arg(context));
fctx->complained = true;
}
goto gotctx;
@@ -1522,14 +1515,6 @@ void CppParser::handleTr(QString &prefix, bool plural)
context = joinNamespaces(stringifyNamespace(functionContext), functionContextUnresolved);
}
} else {
-#ifdef DIAGNOSE_RETRANSLATABILITY
- int last = prefix.lastIndexOf(QLatin1String("::"));
- QString className = prefix.mid(last == -1 ? 0 : last + 2);
- if (!className.isEmpty() && className == functionName) {
- yyMsg() << qPrintable(LU::tr("It is not recommended to call tr() from within a constructor '%1::%2'\n")
- .arg(className).arg(functionName));
- }
-#endif
prefix.chop(2);
NamespaceList nsl;
NamespaceList unresolved;
@@ -1542,7 +1527,8 @@ void CppParser::handleTr(QString &prefix, bool plural)
context = fctx->trQualification;
}
if (!fctx->hasTrFunctions && !fctx->complained) {
- yyMsg() << qPrintable(LU::tr("Class '%1' lacks Q_OBJECT macro\n").arg(context));
+ yyMsg() << qPrintable(QStringLiteral("Class '%1' lacks Q_OBJECT macro\n")
+ .arg(context));
fctx->complained = true;
}
} else {
@@ -1564,7 +1550,7 @@ void CppParser::handleTr(QString &prefix, bool plural)
void CppParser::handleTranslate(bool plural)
{
if (!sourcetext.isEmpty())
- yyMsg() << qPrintable(LU::tr("//% cannot be used with translate() / QT_TRANSLATE_NOOP(). Ignoring\n"));
+ yyMsg() << "//% cannot be used with translate() / QT_TRANSLATE_NOOP(). Ignoring\n";
int line = yyLineNo;
yyTok = getToken();
if (matchString(&context)
@@ -1617,7 +1603,7 @@ void CppParser::handleTranslate(bool plural)
void CppParser::handleTrId(bool plural)
{
if (!msgid.isEmpty())
- yyMsg() << qPrintable(LU::tr("//= cannot be used with qtTrId() / QT_TRID_NOOP(). Ignoring\n"));
+ yyMsg() << "//= cannot be used with qtTrId() / QT_TRID_NOOP(). Ignoring\n";
int line = yyLineNo;
yyTok = getToken();
if (matchString(&msgid) && !msgid.isEmpty()) {
@@ -1669,17 +1655,16 @@ void CppParser::parseInternal(ConversionData &cd, const QStringList &includeStac
static QString strColons(QLatin1String("::"));
QString prefix;
-#ifdef DIAGNOSE_RETRANSLATABILITY
- QString functionName;
-#endif
bool yyTokColonSeen = false; // Start of c'tor's initializer list
bool yyTokIdentSeen = false; // Start of initializer (member or base class)
+ bool maybeInTrailingReturnType = false;
metaExpected = true;
prospectiveContext.clear();
pendingContext.clear();
yyWord.reserve(yyInStr.size()); // Rather insane. That's because we do no length checking.
+ yyWordInitialCapacity = yyWord.capacity();
yyInPtr = (const ushort *)yyInStr.unicode();
yyCh = getChar();
yyTok = getToken();
@@ -1688,7 +1673,7 @@ void CppParser::parseInternal(ConversionData &cd, const QStringList &includeStac
// so they don't confuse our scoping of static initializers.
// we enter the loop by either reading a left bracket or by an
// #else popping the state.
- if (yyBracketDepth && yyBraceDepth == namespaceDepths.count()) {
+ if (yyBracketDepth && yyBraceDepth == namespaceDepths.size()) {
yyTok = getToken();
continue;
}
@@ -1711,7 +1696,7 @@ void CppParser::parseInternal(ConversionData &cd, const QStringList &includeStac
processInclude(cSource, cd, includeStack, inclusions);
goto incOk;
}
- for (const QString &incPath : qAsConst(cd.m_includePath)) {
+ for (const QString &incPath : std::as_const(cd.m_includePath)) {
text = QDir(incPath).absoluteFilePath(yyWord);
text.detach();
if (QFileInfo(text).isFile()) {
@@ -1734,7 +1719,7 @@ void CppParser::parseInternal(ConversionData &cd, const QStringList &includeStac
Partial support for inlined functions.
*/
yyTok = getToken();
- if (yyBraceDepth == namespaceDepths.count() && yyParenDepth == 0) {
+ if (yyBraceDepth == namespaceDepths.size() && yyParenDepth == 0) {
NamespaceList quali;
HashString fct;
@@ -1764,7 +1749,7 @@ void CppParser::parseInternal(ConversionData &cd, const QStringList &includeStac
}
}
- if (yyTok == Tok_Colon || yyTok == Tok_Other) {
+ if (yyTok == Tok_Colon || yyTok == Tok_AngleBracket) {
// Skip any token until '{' or ';' since we might do things wrong if we find
// a '::' or ':' token here.
do {
@@ -1786,13 +1771,13 @@ void CppParser::parseInternal(ConversionData &cd, const QStringList &includeStac
// Forward-declared class definitions can be namespaced.
NamespaceList nsl;
if (!fullyQualify(namespaces, quali, true, &nsl, 0)) {
- yyMsg() << qPrintable(LU::tr("Ignoring definition of undeclared qualified class\n"));
+ yyMsg() << "Ignoring definition of undeclared qualified class\n";
break;
}
- namespaceDepths.push(namespaces.count());
+ namespaceDepths.push(namespaces.size());
namespaces = nsl;
} else {
- namespaceDepths.push(namespaces.count());
+ namespaceDepths.push(namespaces.size());
}
enterNamespace(&namespaces, fct);
@@ -1825,7 +1810,7 @@ void CppParser::parseInternal(ConversionData &cd, const QStringList &includeStac
ns = HashString(text);
}
if (yyTok == Tok_LeftBrace) {
- namespaceDepths.push(namespaces.count());
+ namespaceDepths.push(namespaces.size());
for (const auto &nns : nestedNamespaces)
enterNamespace(&namespaces, nns);
enterNamespace(&namespaces, ns);
@@ -1858,7 +1843,7 @@ void CppParser::parseInternal(ConversionData &cd, const QStringList &includeStac
}
} else if (yyTok == Tok_LeftBrace) {
// Anonymous namespace
- namespaceDepths.push(namespaces.count());
+ namespaceDepths.push(namespaces.size());
metaExpected = true;
yyTok = getToken();
}
@@ -1911,7 +1896,7 @@ void CppParser::parseInternal(ConversionData &cd, const QStringList &includeStac
break;
case Tok_Ident:
if (yyTokColonSeen &&
- yyBraceDepth == namespaceDepths.count() && yyParenDepth == 0) {
+ yyBraceDepth == namespaceDepths.size() && yyParenDepth == 0) {
// member or base class identifier
yyTokIdentSeen = true;
}
@@ -1959,52 +1944,46 @@ void CppParser::parseInternal(ConversionData &cd, const QStringList &includeStac
yyTok = getToken();
break;
}
- if (yyTok == Tok_ColonColon) {
+ if (yyTok == Tok_ColonColon && !maybeInTrailingReturnType) {
prefix += yyWord;
prefix.detach();
} else {
notrfunc:
prefix.clear();
- if (yyTok == Tok_Ident && !yyParenDepth)
- prospectiveContext.clear();
}
metaExpected = false;
break;
case Tok_Arrow:
+ if (yyParenDepth == 0 && yyBraceDepth == namespaceDepths.size())
+ maybeInTrailingReturnType = true;
yyTok = getToken();
if (yyTok == Tok_Ident) {
switch (trFunctionAliasManager.trFunctionByName(yyWord)) {
case TrFunctionAliasManager::Function_tr:
case TrFunctionAliasManager::Function_trUtf8:
- yyMsg() << qPrintable(LU::tr("Cannot invoke tr() like this\n"));
+ yyMsg() << "Cannot invoke tr() like this\n";
break;
}
}
break;
case Tok_ColonColon:
- if (yyTokIdentSeen) {
+ if (yyTokIdentSeen || maybeInTrailingReturnType) {
// member or base class identifier
yyTok = getToken();
break;
}
- if (yyBraceDepth == namespaceDepths.count() && yyParenDepth == 0 && !yyTokColonSeen)
+ if (yyBraceDepth == namespaceDepths.size() && yyParenDepth == 0 && !yyTokColonSeen)
prospectiveContext = prefix;
prefix += strColons;
yyTok = getToken();
-#ifdef DIAGNOSE_RETRANSLATABILITY
- if (yyTok == Tok_Ident && yyBraceDepth == namespaceDepths.count() && yyParenDepth == 0) {
- functionName = yyWord;
- functionName.detach();
- }
-#endif
break;
case Tok_RightBrace:
if (!yyTokColonSeen) {
- if (yyBraceDepth + 1 == namespaceDepths.count()) {
+ if (yyBraceDepth + 1 == namespaceDepths.size()) {
// class or namespace
truncateNamespaces(&namespaces, namespaceDepths.pop());
}
- if (yyBraceDepth == namespaceDepths.count()) {
+ if (yyBraceDepth == namespaceDepths.size()) {
// function, class or namespace
if (!yyBraceDepth && !directInclude)
truncateNamespaces(&functionContext, 1);
@@ -2016,10 +1995,11 @@ void CppParser::parseInternal(ConversionData &cd, const QStringList &includeStac
}
Q_FALLTHROUGH();
case Tok_Semicolon:
+ maybeInTrailingReturnType = false;
prospectiveContext.clear();
prefix.clear();
if (!sourcetext.isEmpty() || !extracomment.isEmpty() || !msgid.isEmpty() || !extra.isEmpty()) {
- yyMsg() << qPrintable(LU::tr("Discarding unconsumed meta data\n"));
+ yyMsg() << "Discarding unconsumed meta data\n";
sourcetext.clear();
extracomment.clear();
msgid.clear();
@@ -2039,7 +2019,7 @@ void CppParser::parseInternal(ConversionData &cd, const QStringList &includeStac
break;
case Tok_Colon:
case Tok_Equals:
- if (yyBraceDepth == namespaceDepths.count() && yyParenDepth == 0) {
+ if (yyBraceDepth == namespaceDepths.size() && yyParenDepth == 0) {
if (!prospectiveContext.isEmpty()) {
pendingContext = prospectiveContext;
prospectiveContext.clear();
@@ -2054,7 +2034,7 @@ void CppParser::parseInternal(ConversionData &cd, const QStringList &includeStac
yyTok = getToken();
break;
case Tok_LeftBrace:
- if (yyBraceDepth == namespaceDepths.count() + 1 && yyParenDepth == 0) {
+ if (yyBraceDepth == namespaceDepths.size() + 1 && yyParenDepth == 0) {
if (!prospectiveContext.isEmpty()) {
pendingContext = prospectiveContext;
prospectiveContext.clear();
@@ -2064,24 +2044,61 @@ void CppParser::parseInternal(ConversionData &cd, const QStringList &includeStac
yyTokColonSeen = false;
}
}
- Q_FALLTHROUGH();
+ maybeInTrailingReturnType = false;
+ yyTokIdentSeen = false;
+ metaExpected = true;
+ yyTok = getToken();
+ break;
case Tok_LeftParen:
+ if (!yyTokColonSeen && yyBraceDepth == namespaceDepths.size() && yyParenDepth == 1
+ && !prospectiveContext.isEmpty()) {
+ pendingContext = prospectiveContext;
+ prospectiveContext.clear();
+ }
yyTokIdentSeen = false;
- Q_FALLTHROUGH();
+ metaExpected = true;
+ yyTok = getToken();
+ break;
case Tok_Comma:
case Tok_QuestionMark:
metaExpected = true;
yyTok = getToken();
break;
case Tok_RightParen:
- if (yyParenDepth == 0)
+ if (yyParenDepth == 0) {
+ if (!yyTokColonSeen && !pendingContext.isEmpty()
+ && yyBraceDepth == namespaceDepths.size()) {
+ // Demote the pendingContext to prospectiveContext.
+ prospectiveContext = pendingContext;
+ pendingContext.clear();
+ }
metaExpected = true;
- else
+ } else {
metaExpected = false;
+ }
+ yyTok = getToken();
+ break;
+ case Tok_decltype:
+ {
+ // Save the parentheses depth outside the 'decltype' specifier.
+ auto initialParenDepth = yyParenDepth;
+
+ // Eat the opening parenthesis that follows 'decltype'.
+ yyTok = getToken();
+
+ // Skip over everything within the parentheses that follow 'decltype'.
+ while (yyParenDepth != initialParenDepth && yyTok != Tok_Eof)
+ yyTok = getToken();
+ }
+ break;
+ case Tok_enum:
yyTok = getToken();
+ // If it is an enum class then ignore
+ if (yyTok == Tok_class)
+ yyTok = getToken();
break;
default:
- if (!yyParenDepth)
+ if (!yyParenDepth && !maybeInTrailingReturnType)
prospectiveContext.clear();
Q_FALLTHROUGH();
case Tok_RightBracket: // ignoring indexing; for static initializers
@@ -2094,16 +2111,15 @@ void CppParser::parseInternal(ConversionData &cd, const QStringList &includeStac
goteof:
if (yyBraceDepth != 0)
yyMsg(yyBraceLineNo)
- << qPrintable(LU::tr("Unbalanced opening brace in C++ code"
- " (or abuse of the C++ preprocessor)\n"));
+ << "Unbalanced opening brace in C++ code (or abuse of the C++ preprocessor)\n";
else if (yyParenDepth != 0)
yyMsg(yyParenLineNo)
- << qPrintable(LU::tr("Unbalanced opening parenthesis in C++ code"
- " (or abuse of the C++ preprocessor)\n"));
+ << "Unbalanced opening parenthesis in C++ code"
+ " (or abuse of the C++ preprocessor)\n";
else if (yyBracketDepth != 0)
yyMsg(yyBracketLineNo)
- << qPrintable(LU::tr("Unbalanced opening bracket in C++ code"
- " (or abuse of the C++ preprocessor)\n"));
+ << "Unbalanced opening bracket in C++ code"
+ " (or abuse of the C++ preprocessor)\n";
}
void CppParser::processComment()
@@ -2124,34 +2140,40 @@ void CppParser::processComment()
yyWord.remove(0, 2);
text = yyWord.trimmed();
int k = text.indexOf(QLatin1Char(' '));
- if (k > -1)
- extra.insert(text.left(k), text.mid(k + 1).trimmed());
+ if (k > -1) {
+ QString commentvalue = text.mid(k + 1).trimmed();
+ if (commentvalue.startsWith(QLatin1Char('"')) && commentvalue.endsWith(QLatin1Char('"'))
+ && commentvalue.size() != 1) {
+ commentvalue = commentvalue.sliced(1, commentvalue.size() - 2);
+ }
+ extra.insert(text.left(k), commentvalue);
+ }
text.clear();
} else if (*ptr == QLatin1Char('%') && ptr[1].isSpace()) {
- sourcetext.reserve(sourcetext.length() + yyWord.length() - 2);
- ushort *ptr = (ushort *)sourcetext.data() + sourcetext.length();
+ sourcetext.reserve(sourcetext.size() + yyWord.size() - 2);
+ ushort *ptr = (ushort *)sourcetext.data() + sourcetext.size();
int p = 2, c;
forever {
- if (p >= yyWord.length())
+ if (p >= yyWord.size())
break;
c = yyWord.unicode()[p++].unicode();
if (isspace(c))
continue;
if (c != '"') {
- yyMsg() << qPrintable(LU::tr("Unexpected character in meta string\n"));
+ yyMsg() << "Unexpected character in meta string\n";
break;
}
forever {
- if (p >= yyWord.length()) {
+ if (p >= yyWord.size()) {
whoops:
- yyMsg() << qPrintable(LU::tr("Unterminated meta string\n"));
+ yyMsg() << "Unterminated meta string\n";
break;
}
c = yyWord.unicode()[p++].unicode();
if (c == '"')
break;
if (c == '\\') {
- if (p >= yyWord.length())
+ if (p >= yyWord.size())
goto whoops;
c = yyWord.unicode()[p++].unicode();
if (c == '\n')
@@ -2168,10 +2190,10 @@ void CppParser::processComment()
ushort c;
while ((c = uc[idx]) == ' ' || c == '\t' || c == '\n')
++idx;
- if (!memcmp(uc + idx, MagicComment.unicode(), MagicComment.length() * 2)) {
- idx += MagicComment.length();
+ if (!memcmp(uc + idx, CppMagicComment.unicode(), CppMagicComment.size() * 2)) {
+ idx += CppMagicComment.size();
comment = QString::fromRawData(yyWord.unicode() + idx,
- yyWord.length() - idx).simplified();
+ yyWord.size() - idx).simplified();
int k = comment.indexOf(QLatin1Char(' '));
if (k == -1) {
context = comment;
@@ -2205,7 +2227,7 @@ const ParseResults *CppParser::recordResults(bool isHeader)
}
if (isHeader) {
const ParseResults *pr;
- if (!tor && results->includes.count() == 1
+ if (!tor && results->includes.size() == 1
&& results->rootNamespace.children.isEmpty()
&& results->rootNamespace.aliases.isEmpty()
&& results->rootNamespace.usings.isEmpty()) {
@@ -2234,7 +2256,8 @@ void loadCPP(Translator &translator, const QStringList &filenames, ConversionDat
QFile file(filename);
if (!file.open(QIODevice::ReadOnly)) {
- cd.appendError(LU::tr("Cannot open %1: %2").arg(filename, file.errorString()));
+ cd.appendError(QStringLiteral("Cannot open %1: %2").arg(filename,
+ file.errorString()));
continue;
}
diff --git a/src/linguist/lupdate/cpp.h b/src/linguist/lupdate/cpp.h
index d12c5e924..ca3cd72f9 100644
--- a/src/linguist/lupdate/cpp.h
+++ b/src/linguist/lupdate/cpp.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef CPP_H
#define CPP_H
diff --git a/src/linguist/lupdate/cpp_clang.cpp b/src/linguist/lupdate/cpp_clang.cpp
index 951714c7d..180bbb4cb 100644
--- a/src/linguist/lupdate/cpp_clang.cpp
+++ b/src/linguist/lupdate/cpp_clang.cpp
@@ -1,71 +1,284 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "cpp_clang.h"
#include "clangtoolastreader.h"
+#include "filesignificancecheck.h"
#include "lupdatepreprocessoraction.h"
#include "synchronized.h"
#include "translator.h"
+#include <QLibraryInfo>
+#include <QtCore/qdir.h>
+#include <QtCore/qfileinfo.h>
+#include <QtCore/qjsonarray.h>
+#include <QtCore/qjsondocument.h>
+#include <QtCore/qjsonobject.h>
+#include <QtCore/qscopeguard.h>
+#include <QtCore/QProcess>
+#include <QStandardPaths>
+#include <QtTools/private/qttools-config_p.h>
+
+#include <clang/Tooling/CompilationDatabase.h>
+
+#include <algorithm>
+#include <limits>
#include <thread>
+#include <iostream>
+#include <cstdlib>
-#include <clang/Tooling/CommonOptionsParser.h>
-#include <llvm/Option/Option.h>
+#include <cstdio>
+#include <memory>
+#include <stdexcept>
+#include <string>
+#include <array>
+
+using clang::tooling::CompilationDatabase;
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
Q_LOGGING_CATEGORY(lcClang, "qt.lupdate.clang");
-// This is a way to add options related to the customized clang tool
-// Needed as one of the arguments to create the OptionParser.
-static llvm::cl::OptionCategory MyToolCategory("my-tool options");
+static QString getSysCompiler()
+{
+ QStringList candidates;
+ if (const char* local_compiler = std::getenv("CXX")) {
+ candidates.push_back(QLatin1String(local_compiler));
+ } else {
+ candidates = {
+#ifdef Q_OS_WIN
+ QStringLiteral("cl"),
+#endif
+ QStringLiteral("clang++"),
+ QStringLiteral("gcc")
+ };
+ }
+ QString sysCompiler;
+ for (const QString &comp : candidates) {
+
+ sysCompiler = QStandardPaths::findExecutable(comp);
+ if (!sysCompiler.isEmpty())
+ break;
+ }
+ return sysCompiler;
+}
+
+static QByteArrayList getMSVCIncludePathsFromEnvironment()
+{
+ QList<QByteArray> pathList;
+ if (const char* includeEnv = std::getenv("INCLUDE")) {
+ QByteArray includeList = QByteArray::fromRawData(includeEnv, strlen(includeEnv));
+ pathList = includeList.split(';');
+ }
+ for (auto it = pathList.begin(); it != pathList.end(); ++it) {
+ it->prepend("-isystem");
+ }
+ return pathList;
+}
+
+static QStringList getProjectDirsFromEnvironment()
+{
+ QList<QByteArray> dirList;
+ QStringList rootdirs;
+ if (const char* includeEnv = std::getenv("LUPDATE_ROOT_DIRS")) {
+ QByteArray includeList = QByteArray::fromRawData(includeEnv, strlen(includeEnv));
+ dirList = includeList.split(';');
+
+ for (auto dir : dirList) {
+ rootdirs.append(QString::fromStdString(dir.toStdString()));
+ }
+ }
+ return rootdirs;
+}
+
+
+static QByteArray frameworkSuffix()
+{
+ return QByteArrayLiteral(" (framework directory)");
+}
+
+QByteArrayList getIncludePathsFromCompiler()
+{
+
+ QList<QByteArray> pathList;
+ QString compiler = getSysCompiler();
+ if (compiler.isEmpty()) {
+ qWarning("lupdate: Could not determine system compiler.");
+ return pathList;
+ }
+
+ const QFileInfo fiCompiler(compiler);
+ const QString compilerName
-// Makes sure all the comments will be parsed and part of the AST
-// Clang will run with the flag -fparse-all-comments
-clang::tooling::ArgumentsAdjuster getClangArgumentAdjuster()
+#ifdef Q_OS_WIN
+ = fiCompiler.completeBaseName();
+#else
+ = fiCompiler.fileName();
+#endif
+
+ if (compilerName == QLatin1String("cl"))
+ return getMSVCIncludePathsFromEnvironment();
+
+ if (compilerName != QLatin1String("gcc") && compilerName != QLatin1String("clang++")) {
+ qWarning("lupdate: Unknown compiler %s", qPrintable(compiler));
+ return pathList;
+ }
+
+ const QStringList compilerFlags = {
+ QStringLiteral("-E"), QStringLiteral("-x"), QStringLiteral("c++"),
+ QStringLiteral("-"), QStringLiteral("-v")
+ };
+
+ QProcess proc;
+ proc.setStandardInputFile(proc.nullDevice());
+ proc.start(compiler, compilerFlags);
+ proc.waitForFinished(30000);
+ QByteArray buffer = proc.readAllStandardError();
+ proc.kill();
+
+ // ### TODO: Merge this with qdoc's getInternalIncludePaths()
+ const QByteArrayList stdErrLines = buffer.split('\n');
+ bool isIncludeDir = false;
+ for (const QByteArray &line : stdErrLines) {
+ if (isIncludeDir) {
+ if (line.startsWith(QByteArrayLiteral("End of search list"))) {
+ isIncludeDir = false;
+ } else {
+ QByteArray prefix("-isystem");
+ QByteArray headerPath{line.trimmed()};
+ if (headerPath.endsWith(frameworkSuffix())) {
+ headerPath.truncate(headerPath.size() - frameworkSuffix().size());
+ prefix = QByteArrayLiteral("-F");
+ }
+ pathList.append(prefix + headerPath);
+ }
+ } else if (line.startsWith(QByteArrayLiteral("#include <...> search starts here"))) {
+ isIncludeDir = true;
+ }
+ }
+
+ return pathList;
+}
+
+std::vector<std::string> ClangCppParser::getAliasFunctionDefinition()
+{
+ QStringList aliases = trFunctionAliasManager.listAliases();
+ std::vector<std::string> results;
+ for (QString alias : aliases) {
+ std::string definition = "-D" + alias.toStdString();
+ switch (trFunctionAliasManager.trFunctionByName(alias)) {
+ case TrFunctionAliasManager::Function_QT_TR_N_NOOP:
+ definition += "(x)=QT_TR_N_NOOP(x)";
+ results.push_back(definition);
+ break;
+ case TrFunctionAliasManager::Function_trUtf8:
+ case TrFunctionAliasManager::Function_tr:
+ definition += "=tr";
+ results.push_back(definition);
+ break;
+ case TrFunctionAliasManager::Function_QT_TR_NOOP:
+ definition += "(x)=QT_TR_NOOP(x)";
+ results.push_back(definition);
+ break;
+ case TrFunctionAliasManager::Function_QT_TR_NOOP_UTF8:
+ definition += "(x)=QT_TR_NOOP_UTF8(x)";
+ results.push_back(definition);
+ break;
+ case TrFunctionAliasManager::Function_QT_TRANSLATE_N_NOOP:
+ definition += "(scope,x)=QT_TRANSLATE_N_NOOP(scope,x)";
+ results.push_back(definition);
+ break;
+ case TrFunctionAliasManager::Function_QT_TRANSLATE_N_NOOP3:
+ definition += "(scope, x, comment)=QT_TRANSLATE_N_NOOP3(scope, x, comment)";
+ results.push_back(definition);
+ break;
+ case TrFunctionAliasManager::Function_translate:
+ definition += "=QCoreApplication::translate";
+ results.push_back(definition);
+ break;
+ case TrFunctionAliasManager::Function_findMessage:
+ definition += "=findMessage";
+ results.push_back(definition);
+ break;
+ case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP:
+ definition += "(scope,x)=QT_TRANSLATE_NOOP(scope,x)";
+ results.push_back(definition);
+ break;
+ case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP_UTF8:
+ definition += "(scope,x)=QT_TRANSLATE_NOOP_UTF8(scope,x)";
+ results.push_back(definition);
+ break;
+ case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP3:
+ definition += "(scope, x, comment)=QT_TRANSLATE_NOOP3(scope, x, comment)";
+ results.push_back(definition);
+ break;
+ case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP3_UTF8:
+ definition += "(scope, x, comment)=QT_TRANSLATE_NOOP3_UTF8(scope, x, comment)";
+ results.push_back(definition);
+ break;
+ case TrFunctionAliasManager::Function_qtTrId:
+ definition += "=qtTrId";
+ results.push_back(definition);
+ break;
+ case TrFunctionAliasManager::Function_QT_TRID_N_NOOP:
+ case TrFunctionAliasManager::Function_QT_TRID_NOOP:
+ definition += "(id)=QT_TRID_NOOP(id)";
+ results.push_back(definition);
+ break;
+ case TrFunctionAliasManager::Function_Q_DECLARE_TR_FUNCTIONS:
+ definition += "(context)=Q_DECLARE_TR_FUNCTIONS(context)";
+ results.push_back(definition);
+ break;
+ default:
+ break;
+ }
+ }
+ return results;
+}
+
+static std::vector<std::string> aliasDefinition;
+
+static clang::tooling::ArgumentsAdjuster getClangArgumentAdjuster()
{
- return [](const clang::tooling::CommandLineArguments &args, llvm::StringRef /*unused*/) {
- clang::tooling::CommandLineArguments adjustedArgs;
- for (size_t i = 0, e = args.size(); i < e; ++i) {
- llvm::StringRef arg = args[i];
- // FIXME: Remove options that generate output.
- if (!arg.startswith("-fcolor-diagnostics") && !arg.startswith("-fdiagnostics-color"))
- adjustedArgs.push_back(args[i]);
+ const QByteArrayList compilerIncludeFlags = getIncludePathsFromCompiler();
+ return [=](const clang::tooling::CommandLineArguments &args, llvm::StringRef /*unused*/) {
+ clang::tooling::CommandLineArguments adjustedArgs(args);
+ clang::tooling::CommandLineArguments adjustedArgsTemp;
+
+ adjustedArgsTemp.push_back("-fparse-all-comments");
+ adjustedArgsTemp.push_back("-nostdinc");
+
+ // Turn off SSE support to avoid usage of gcc builtins.
+ // TODO: Look into what Qt Creator does.
+ // Pointers: HeaderPathFilter::removeGccInternalIncludePaths()
+ // and gccInstallDir() in gcctoolchain.cpp
+ // Also needed for Mac, No need for CLANG_RESOURCE_DIR when this is part of the argument.
+ adjustedArgsTemp.push_back("-mno-sse");
+
+#ifdef Q_OS_WIN
+ adjustedArgsTemp.push_back("-fms-compatibility-version=19");
+ adjustedArgsTemp.push_back("-DQ_COMPILER_UNIFORM_INIT"); // qtbase + clang-cl hack
+ // avoid constexpr error connected with offsetof (QTBUG-97380)
+ adjustedArgsTemp.push_back("-D_CRT_USE_BUILTIN_OFFSETOF");
+#endif
+ adjustedArgsTemp.push_back("-Wno-everything");
+
+ for (const QByteArray &flag : compilerIncludeFlags)
+ adjustedArgsTemp.push_back(flag.data());
+
+ for (auto alias : aliasDefinition) {
+ adjustedArgsTemp.push_back(alias);
}
- adjustedArgs.push_back("-fparse-all-comments");
- adjustedArgs.push_back("-I");
- adjustedArgs.push_back(CLANG_RESOURCE_DIR);
- adjustedArgs.push_back("-fsyntax-only");
+
+ clang::tooling::CommandLineArguments::iterator it = llvm::find(adjustedArgs, "--");
+ adjustedArgs.insert(it, adjustedArgsTemp.begin(), adjustedArgsTemp.end());
return adjustedArgs;
};
}
-bool ClangCppParser::containsTranslationInformation(llvm::StringRef ba)
+bool ClangCppParser::stringContainsTranslationInformation(llvm::StringRef ba)
{
// pre-process the files by a simple text search if there is any occurrence
// of things we are interested in
@@ -102,55 +315,161 @@ bool ClangCppParser::containsTranslationInformation(llvm::StringRef ba)
|| ba.contains(trUtf8) || ba.contains(translate))
return true;
+ for (QString alias : trFunctionAliasManager.listAliases()) {
+ if (ba.contains(qPrintable(alias)))
+ return true;
+ }
+
+
return false;
}
-void ClangCppParser::loadCPP(Translator &translator, const QStringList &files, ConversionData &cd)
+static bool generateCompilationDatabase(const QString &outputFilePath, const ConversionData &cd)
{
+ QJsonArray commandObjects;
+ const QString buildDir = QDir::currentPath();
+ const QString fakefileName = QLatin1String("dummmy.cpp");
+ QJsonObject obj;
+ obj[QLatin1String("file")] = fakefileName;
+ obj[QLatin1String("directory")] = buildDir;
+ QJsonArray args = {
+ QLatin1String("clang++"),
+ QLatin1String("-std=gnu++17"),
+ #ifndef Q_OS_WIN
+ QLatin1String("-fPIC"),
+ #endif
+ };
+
+#if defined(Q_OS_MACOS) && QT_CONFIG(framework)
+ const QString installPath = QLibraryInfo::path(QLibraryInfo::LibrariesPath);
+ QString arg = QLatin1String("-F") + installPath;
+ args.push_back(arg);
+#endif
+
+ for (const QString &path : cd.m_includePath) {
+ QString arg = QLatin1String("-I") + path;
+ args.push_back(std::move(arg));
+ }
+
+ obj[QLatin1String("arguments")] = args;
+ commandObjects.append(obj);
+
+ QJsonDocument doc(commandObjects);
+ QFile file(outputFilePath);
+ if (!file.open(QIODevice::WriteOnly))
+ return false;
+ file.write(doc.toJson());
+ return true;
+}
+
+// Sort messages in such a way that they appear in the same order like in the given file list.
+static void sortMessagesByFileOrder(ClangCppParser::TranslatorMessageVector &messages,
+ const QStringList &files)
+{
+ // first sort messages by line number
+ std::stable_sort(messages.begin(), messages.end(),
+ [&](const TranslatorMessage &lhs, const TranslatorMessage &rhs) {
+ auto i = lhs.lineNumber();
+ auto k = rhs.lineNumber();
+ return i < k;
+ });
+
+ QHash<QString, QStringList::size_type> indexByPath;
+ for (const TranslatorMessage &m : messages)
+ indexByPath[m.fileName()] = std::numeric_limits<QStringList::size_type>::max();
+
+ for (QStringList::size_type i = 0; i < files.size(); ++i)
+ indexByPath[files[i]] = i;
+
+ std::stable_sort(messages.begin(), messages.end(),
+ [&](const TranslatorMessage &lhs, const TranslatorMessage &rhs) {
+ auto i = indexByPath.value(lhs.fileName());
+ auto k = indexByPath.value(rhs.fileName());
+ return i < k;
+ });
+}
+
+bool ClangCppParser::hasAliases()
+{
+ QStringList listAlias = trFunctionAliasManager.listAliases();
+ if (listAlias.size() > 0)
+ return true;
+ return false;
+}
+
+void ClangCppParser::loadCPP(Translator &translator, const QStringList &files, ConversionData &cd,
+ bool *fail)
+{
+ FileSignificanceCheck::create();
+ auto cleanup = qScopeGuard(FileSignificanceCheck::destroy);
+ FileSignificanceCheck::the()->setExclusionPatterns(cd.m_excludes);
+ if (cd.m_rootDirs.size() > 0)
+ FileSignificanceCheck::the()->setRootDirectories(cd.m_rootDirs);
+ else
+ FileSignificanceCheck::the()->setRootDirectories(getProjectDirsFromEnvironment());
+
+ if (hasAliases())
+ aliasDefinition = getAliasFunctionDefinition();
+
// pre-process the files by a simple text search if there is any occurrence
// of things we are interested in
- std::vector<std::string> sources, sourcesAst, sourcesPP;
+ qCDebug(lcClang) << "Load CPP \n";
+ std::vector<std::string> sources;
for (const QString &filename : files) {
- QFile file(filename);
- if (file.open(QIODevice::ReadOnly)) {
- if (const uchar *memory = file.map(0, file.size())) {
- const auto ba = llvm::StringRef((const char*) (memory), file.size());
- if (containsTranslationInformation(ba)) {
- sourcesPP.emplace_back(filename.toStdString());
- sourcesAst.emplace_back(sourcesPP.back());
- }
- } else {
- // mmap did not succeed, remember it anyway
- sources.push_back(filename.toStdString());
- }
- } else {
- // we could not open the file, remember it anyway
- sources.push_back(filename.toStdString());
+ qCDebug(lcClang) << "File: " << filename << " \n";
+ sources.emplace_back(filename.toStdString());
+ }
+
+ std::string errorMessage;
+ std::unique_ptr<CompilationDatabase> db;
+ if (cd.m_compilationDatabaseDir.isEmpty()) {
+ db = CompilationDatabase::autoDetectFromDirectory(".", errorMessage);
+ if (!db && !files.isEmpty()) {
+ db = CompilationDatabase::autoDetectFromSource(files.first().toStdString(),
+ errorMessage);
}
+ } else {
+ db = CompilationDatabase::autoDetectFromDirectory(cd.m_compilationDatabaseDir.toStdString(),
+ errorMessage);
}
- sourcesPP.insert(sourcesPP.cend(), sources.cbegin(), sources.cend());
- sourcesAst.insert(sourcesAst.cend(), sources.cbegin(), sources.cend());
- int argc = 4;
- // NEED 2 empty one to start!!! otherwise: LLVM::ERROR
- const QByteArray jsonPath = cd.m_compileCommandsPath.toLocal8Bit();
- const char *argv[4] = { "", "", "-p", jsonPath.constData() };
- clang::tooling::CommonOptionsParser optionsParser(argc, argv, MyToolCategory);
+ if (!db) {
+ const QString dbFilePath = QStringLiteral("compile_commands.json");
+ qCDebug(lcClang) << "Generating compilation database" << dbFilePath;
+ if (!generateCompilationDatabase(dbFilePath, cd)) {
+ *fail = true;
+ cd.appendError(u"Cannot generate compilation database."_s);
+ return;
+ }
+ errorMessage.clear();
+ db = CompilationDatabase::loadFromDirectory(".", errorMessage);
+ }
+
+ if (!db) {
+ *fail = true;
+ cd.appendError(QString::fromStdString(errorMessage));
+ return;
+ }
TranslationStores ast, qdecl, qnoop;
Stores stores(ast, qdecl, qnoop);
std::vector<std::thread> producers;
- ReadSynchronizedRef<std::string> ppSources(sourcesPP);
+ ReadSynchronizedRef<std::string> ppSources(sources);
WriteSynchronizedRef<TranslationRelatedStore> ppStore(stores.Preprocessor);
- int idealProducerCount = std::min(int(sourcesPP.size()), int(std::thread::hardware_concurrency()));
-
- for (int i = 0; i < idealProducerCount; ++i) {
- std::thread producer([&ppSources, &optionsParser, &ppStore]() {
+ size_t idealProducerCount = std::min(ppSources.size(), size_t(std::thread::hardware_concurrency()));
+ clang::tooling::ArgumentsAdjuster argumentsAdjusterSyntaxOnly =
+ clang::tooling::getClangSyntaxOnlyAdjuster();
+ clang::tooling::ArgumentsAdjuster argumentsAdjusterLocal = getClangArgumentAdjuster();
+ clang::tooling::ArgumentsAdjuster argumentsAdjuster =
+ clang::tooling::combineAdjusters(argumentsAdjusterLocal, argumentsAdjusterSyntaxOnly);
+
+ for (size_t i = 0; i < idealProducerCount; ++i) {
+ std::thread producer([&ppSources, &db, &ppStore, &argumentsAdjuster]() {
std::string file;
while (ppSources.next(&file)) {
- clang::tooling::ClangTool tool(optionsParser.getCompilations(), file);
- tool.appendArgumentsAdjuster(getClangArgumentAdjuster());
+ clang::tooling::ClangTool tool(*db, file);
+ tool.appendArgumentsAdjuster(argumentsAdjuster);
tool.run(new LupdatePreprocessorActionFactory(&ppStore));
}
});
@@ -160,14 +479,14 @@ void ClangCppParser::loadCPP(Translator &translator, const QStringList &files, C
producer.join();
producers.clear();
- ReadSynchronizedRef<std::string> astSources(sourcesAst);
- idealProducerCount = std::min(int(sourcesAst.size()), int(std::thread::hardware_concurrency()));
- for (int i = 0; i < idealProducerCount; ++i) {
- std::thread producer([&astSources, &optionsParser, &stores]() {
+ ReadSynchronizedRef<std::string> astSources(sources);
+ idealProducerCount = std::min(astSources.size(), size_t(std::thread::hardware_concurrency()));
+ for (size_t i = 0; i < idealProducerCount; ++i) {
+ std::thread producer([&astSources, &db, &stores, &argumentsAdjuster]() {
std::string file;
while (astSources.next(&file)) {
- clang::tooling::ClangTool tool(optionsParser.getCompilations(), file);
- tool.appendArgumentsAdjuster(getClangArgumentAdjuster());
+ clang::tooling::ClangTool tool(*db, file);
+ tool.appendArgumentsAdjuster(argumentsAdjuster);
tool.run(new LupdateToolActionFactory(&stores));
}
});
@@ -183,18 +502,43 @@ void ClangCppParser::loadCPP(Translator &translator, const QStringList &files, C
ReadSynchronizedRef<TranslationRelatedStore> rsv(ast);
ClangCppParser::correctAstTranslationContext(rsv, wsv, qdecl);
- rsv.reset(qnoop);
- ClangCppParser::correctNoopTanslationContext(rsv, wsv, qdecl);
+ ReadSynchronizedRef<TranslationRelatedStore> rsvQNoop(qnoop);
+ //unlike ast translation context, qnoop context don't need to be corrected
+ //(because Q_DECLARE_TR_FUNCTION context is already applied).
+ ClangCppParser::finalize(rsvQNoop, wsv);
+
+ TranslatorMessageVector messages;
+ for (auto &store : finalStores)
+ ClangCppParser::collectMessages(messages, store);
- for (const auto &store : finalStores)
- ClangCppParser::fillTranslator(store, translator, cd);
+ sortMessagesByFileOrder(messages, files);
+
+ for (TranslatorMessage &msg : messages) {
+ if (!msg.warning().isEmpty()) {
+ std::cerr << qPrintable(msg.warning());
+ if (msg.warningOnly() == true)
+ continue;
+ }
+ translator.extend(std::move(msg), cd);
+ }
}
-void ClangCppParser::fillTranslator(const TranslationRelatedStore &store, Translator &translator,
- ConversionData &cd)
+void ClangCppParser::collectMessages(TranslatorMessageVector &result,
+ TranslationRelatedStore &store)
{
- if (!store.isValid())
+ if (!store.isValid(true)) {
+ if (store.lupdateWarning.isEmpty())
+ return;
+ // The message needs to be added to the results so that the warning can be ordered
+ // and printed in a consistent way.
+ // the message won't appear in the .ts file
+ result.push_back(translatorMessage(store, store.lupdateIdMetaData, false, false, true));
return;
+ }
+
+ qCDebug(lcClang) << "---------------------------------------------------------------Filling translator for " << store.funcName;
+ qCDebug(lcClang) << " contextRetrieved " << store.contextRetrieved;
+ qCDebug(lcClang) << " source " << store.lupdateSource;
bool plural = false;
switch (trFunctionAliasManager.trFunctionByName(store.funcName)) {
@@ -206,12 +550,30 @@ void ClangCppParser::fillTranslator(const TranslationRelatedStore &store, Transl
case TrFunctionAliasManager::Function_trUtf8:
case TrFunctionAliasManager::Function_QT_TR_NOOP:
case TrFunctionAliasManager::Function_QT_TR_NOOP_UTF8:
- if (!store.lupdateSourceWhenId.isEmpty())
+ if (!store.lupdateSourceWhenId.isEmpty()) {
+ std::stringstream warning;
+ warning << qPrintable(store.lupdateLocationFile) << ":"
+ << store.lupdateLocationLine << ":"
+ << store.locationCol << ": "
+ << "//% cannot be used with tr() / QT_TR_NOOP(). Ignoring\n";
+ store.lupdateWarning.append(QString::fromStdString(warning.str()));
qCDebug(lcClang) << "//% is ignored when using tr function\n";
- if (store.contextRetrieved.isEmpty() && store.contextArg.isEmpty())
+ }
+ if (store.contextRetrieved.isEmpty() && store.contextArg.isEmpty()) {
+ std::stringstream warning;
+ warning << qPrintable(store.lupdateLocationFile) << ":"
+ << store.lupdateLocationLine << ":"
+ << store.locationCol << ": "
+ << qPrintable(store.funcName) << " cannot be called without context."
+ << " The call is ignored (missing Q_OBJECT maybe?)\n";
+ store.lupdateWarning.append(QString::fromStdString(warning.str()));
qCDebug(lcClang) << "tr() cannot be called without context \n";
- else
- translator.extend(translatorMessage(store, store.lupdateIdMetaData, plural, false), cd);
+ // The message need to be added to the results so that the warning can be ordered
+ // and printed in a consistent way.
+ // the message won't appear in the .ts file
+ result.push_back(translatorMessage(store, store.lupdateIdMetaData, plural, false, true));
+ } else
+ result.push_back(translatorMessage(store, store.lupdateIdMetaData, plural, false));
break;
// handle translate and findMessage
@@ -225,9 +587,16 @@ void ClangCppParser::fillTranslator(const TranslationRelatedStore &store, Transl
case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP_UTF8:
case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP3:
case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP3_UTF8:
- if (!store.lupdateSourceWhenId.isEmpty())
+ if (!store.lupdateSourceWhenId.isEmpty()) {
+ std::stringstream warning;
+ warning << qPrintable(store.lupdateLocationFile) << ":"
+ << store.lupdateLocationLine << ":"
+ << store.locationCol << ": "
+ << "//% cannot be used with translate() / QT_TRANSLATE_NOOP(). Ignoring\n";
+ store.lupdateWarning.append(QString::fromStdString(warning.str()));
qCDebug(lcClang) << "//% is ignored when using translate function\n";
- translator.extend(translatorMessage(store, store.lupdateIdMetaData, plural, false), cd);
+ }
+ result.push_back(translatorMessage(store, store.lupdateIdMetaData, plural, false));
break;
// handle qtTrId
@@ -236,19 +605,44 @@ void ClangCppParser::fillTranslator(const TranslationRelatedStore &store, Transl
Q_FALLTHROUGH();
case TrFunctionAliasManager::Function_qtTrId:
case TrFunctionAliasManager::Function_QT_TRID_NOOP:
- if (!store.lupdateIdMetaData.isEmpty())
+ if (!store.lupdateIdMetaData.isEmpty()) {
+ std::stringstream warning;
+ warning << qPrintable(store.lupdateLocationFile) << ":"
+ << store.lupdateLocationLine << ":"
+ << store.locationCol << ": "
+ << "//= cannot be used with qtTrId() / QT_TRID_NOOP(). Ignoring\n";
+ store.lupdateWarning.append(QString::fromStdString(warning.str()));
qCDebug(lcClang) << "//= is ignored when using qtTrId function \n";
- translator.extend(translatorMessage(store, store.lupdateId, plural, true), cd);
+ }
+ result.push_back(translatorMessage(store, store.lupdateId, plural, true));
break;
default:
if (store.funcName == QStringLiteral("TRANSLATOR"))
- translator.extend(translatorMessage(store, store.lupdateIdMetaData, plural, false), cd);
+ result.push_back(translatorMessage(store, store.lupdateIdMetaData, plural, false));
}
}
+static QString ensureCanonicalPath(const QString &filePath)
+{
+ QFileInfo fi(filePath);
+ if (fi.isRelative())
+ fi.setFile(QDir::current().absoluteFilePath(filePath));
+ return fi.canonicalFilePath();
+}
+
TranslatorMessage ClangCppParser::translatorMessage(const TranslationRelatedStore &store,
- const QString &id, bool plural, bool isId)
+ const QString &id, bool plural, bool isId, bool isWarningOnly)
{
+ if (isWarningOnly) {
+ TranslatorMessage msg;
+ // msg filled with file name and line number should be enough for the message ordering
+ msg.setFileName(ensureCanonicalPath(store.lupdateLocationFile));
+ msg.setLineNumber(store.lupdateLocationLine);
+ msg.setWarning(store.lupdateWarning);
+ msg.setWarningOnly(isWarningOnly);
+ return msg;
+ }
+
QString context;
if (!isId) {
context = ParserTool::transcode(store.contextArg.isEmpty() ? store.contextRetrieved
@@ -260,7 +654,7 @@ TranslatorMessage ClangCppParser::translatorMessage(const TranslationRelatedStor
: store.lupdateSource),
ParserTool::transcode(store.lupdateComment),
QString(),
- store.lupdateLocationFile,
+ ensureCanonicalPath(store.lupdateLocationFile),
store.lupdateLocationLine,
QStringList(),
TranslatorMessage::Type::Unfinished,
@@ -270,14 +664,16 @@ TranslatorMessage ClangCppParser::translatorMessage(const TranslationRelatedStor
msg.setExtras(store.lupdateAllMagicMetaData);
msg.setExtraComment(ParserTool::transcode(store.lupdateExtraComment));
msg.setId(ParserTool::transcode(id));
+ if (!store.lupdateWarning.isEmpty())
+ msg.setWarning(store.lupdateWarning);
return msg;
}
#define START_THREADS(RSV, WSV) \
std::vector<std::thread> producers; \
- const int idealProducerCount = std::min(RSV.size(), int(std::thread::hardware_concurrency())); \
+ const size_t idealProducerCount = std::min(RSV.size(), size_t(std::thread::hardware_concurrency())); \
\
- for (int i = 0; i < idealProducerCount; ++i) { \
+ for (size_t i = 0; i < idealProducerCount; ++i) { \
std::thread producer([&]() { \
TranslationRelatedStore store; \
while (RSV.next(&store)) { \
@@ -296,6 +692,13 @@ TranslatorMessage ClangCppParser::translatorMessage(const TranslationRelatedStor
for (auto &producer : producers) \
producer.join();
+void ClangCppParser::finalize(ReadSynchronizedRef<TranslationRelatedStore> &ast,
+ WriteSynchronizedRef<TranslationRelatedStore> &newAst)
+{
+ START_THREADS(ast, newAst)
+ JOIN_THREADS(newAst)
+}
+
void ClangCppParser::correctAstTranslationContext(ReadSynchronizedRef<TranslationRelatedStore> &ast,
WriteSynchronizedRef<TranslationRelatedStore> &newAst, const TranslationStores &qDecl)
{
@@ -316,49 +719,20 @@ void ClangCppParser::correctAstTranslationContext(ReadSynchronizedRef<Translatio
continue;
if (!declareStore.contextRetrieved.startsWith(store.contextRetrieved))
continue;
- if (store.contextRetrieved.size() == declareStore.contextRetrieved.size()) {
+ if (store.contextRetrieved == declareStore.contextRetrieved) {
qCDebug(lcClang) << "* Tr call context retrieved " << store.contextRetrieved;
+ qCDebug(lcClang) << "* Tr call source " << store.lupdateSource;
qCDebug(lcClang) << "* DECLARE context retrieved " << declareStore.contextRetrieved;
qCDebug(lcClang) << "* DECLARE context Arg " << declareStore.contextArg;
- store.contextArg = declareStore.contextArg;
+ store.contextRetrieved = declareStore.contextArg;
+ // store.contextArg should never be overwritten.
+ break;
}
}
JOIN_THREADS(newAst)
}
-void ClangCppParser::correctNoopTanslationContext(ReadSynchronizedRef<TranslationRelatedStore> &qNoop,
- WriteSynchronizedRef<TranslationRelatedStore> &newQNoop, const TranslationStores &qDecl)
-{
- START_THREADS(qNoop, newQNoop)
-
- qCDebug(lcClang) << "----------------------------";
- qCDebug(lcClang) << "NOOP call context retrieved Temp" << store.contextRetrievedTempNOOP;
- qCDebug(lcClang) << "NOOP call source " << store.lupdateSource;
-
- for (const auto &qDeclare : qDecl) {
- bool firstCheck = false;
- bool secondCheck = false;
- qCDebug(lcClang) << "- DECLARE context retrieved " << qDeclare.contextRetrieved;
- qCDebug(lcClang) << "- DECLARE context Arg " << qDeclare.contextArg;
- if (store.contextRetrievedTempNOOP.startsWith(qDeclare.contextRetrieved)) {
- firstCheck = (store.contextRetrievedTempNOOP.size() == qDeclare.contextRetrieved.size()
- || (store.contextRetrievedTempNOOP.at(qDeclare.contextRetrieved.size() + 1)
- == QLatin1Char(':')));
- secondCheck = qDeclare.contextRetrieved.size() > store.contextRetrieved.size();
- if (firstCheck && secondCheck) {
- store.contextRetrieved = qDeclare.contextRetrieved;
- store.contextArg = qDeclare.contextArg;
- qCDebug(lcClang) << "* NOOP call context retrieved " << store.contextRetrieved;
- qCDebug(lcClang) << "* DECLARE context retrieved " << qDeclare.contextRetrieved;
- qCDebug(lcClang) << "* DECLARE context Arg " << qDeclare.contextArg;
- }
- }
- }
-
- JOIN_THREADS(newQNoop)
-}
-
#undef START_THREADS
#undef JOIN_THREADS
diff --git a/src/linguist/lupdate/cpp_clang.h b/src/linguist/lupdate/cpp_clang.h
index 45cb86605..88e25facd 100644
--- a/src/linguist/lupdate/cpp_clang.h
+++ b/src/linguist/lupdate/cpp_clang.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef CLANG_CPP_H
#define CLANG_CPP_H
@@ -34,32 +9,34 @@
#include <QtCore/qloggingcategory.h>
#include <QtCore/qregularexpression.h>
+#include <QtCore/qstring.h>
-#if defined(Q_CC_MSVC)
-# pragma warning(push)
-# pragma warning(disable: 4100)
-# pragma warning(disable: 4146)
-# pragma warning(disable: 4267)
-# pragma warning(disable: 4624)
-#endif
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_MSVC(4100)
+QT_WARNING_DISABLE_MSVC(4146)
+QT_WARNING_DISABLE_MSVC(4267)
+QT_WARNING_DISABLE_MSVC(4624)
+QT_WARNING_DISABLE_GCC("-Wnonnull")
+#include <llvm/ADT/StringRef.h>
#include <clang/Basic/SourceLocation.h>
#include <clang/Basic/SourceManager.h>
+#include <clang/Basic/FileManager.h>
-#if defined(Q_CC_MSVC)
-# pragma warning(pop)
-#endif
+QT_WARNING_POP
#include <vector>
+#include <iostream>
+#include <sstream>
QT_BEGIN_NAMESPACE
-inline QDebug operator<<(QDebug out, const std::string& str)
+Q_DECLARE_LOGGING_CATEGORY(lcClang)
+
+inline QString toQt(llvm::StringRef str)
{
- out << QString::fromStdString(str);
- return out;
+ return QString::fromUtf8(str.data(), str.size());
}
-Q_DECLARE_LOGGING_CATEGORY(lcClang)
#define LUPDATE_CLANG_VERSION_CHECK(major, minor, patch) ((major<<16)|(minor<<8)|(patch))
#define LUPDATE_CLANG_VERSION LUPDATE_CLANG_VERSION_CHECK(LUPDATE_CLANG_VERSION_MAJOR, \
@@ -74,9 +51,9 @@ struct TranslationRelatedStore
qint64 locationCol = -1;
QString contextArg;
QString contextRetrieved;
- QString contextRetrievedTempNOOP;
QString lupdateSource;
QString lupdateLocationFile;
+ QString lupdateInputFile; // file associated to the running of the tool
qint64 lupdateLocationLine = -1;
QString lupdateId;
QString lupdateSourceWhenId;
@@ -86,20 +63,43 @@ struct TranslationRelatedStore
QString lupdateComment;
QString lupdateExtraComment;
QString lupdatePlural;
+ QString lupdateWarning;
clang::SourceLocation sourceLocation;
- bool isValid() const
+ bool isValid(bool printwarning = false)
{
switch (trFunctionAliasManager.trFunctionByName(funcName)) {
// only one argument: the source
case TrFunctionAliasManager::Function_Q_DECLARE_TR_FUNCTIONS:
- if (contextArg.isEmpty())
+ if (contextArg.isEmpty()) {
+ if (printwarning) {
+ std::stringstream warning;
+ warning << qPrintable(lupdateLocationFile) << ":"
+ << lupdateLocationLine << ":"
+ << locationCol << ": "
+ << " \'" << qPrintable(funcName)
+ << "\' cannot be called without context."
+ << " The call is ignored." <<std::endl;
+ lupdateWarning.append(QString::fromStdString(warning.str()));
+ }
return false;
+ }
break;
case TrFunctionAliasManager::Function_tr:
case TrFunctionAliasManager::Function_trUtf8:
- if (lupdateSource.isEmpty())
+ if (lupdateSource.isEmpty()) {
+ if (printwarning) {
+ std::stringstream warning;
+ warning << qPrintable(lupdateLocationFile) << ":"
+ << lupdateLocationLine << ":"
+ << locationCol << ": "
+ << " \'" << qPrintable(funcName)
+ << "\' cannot be called without source."
+ << " The call is ignored." << std::endl;
+ lupdateWarning.append(QString::fromStdString(warning.str()));
+ }
return false;
+ }
break;
// two arguments: the context and the source
case TrFunctionAliasManager::Function_QT_TRANSLATE_N_NOOP:
@@ -109,20 +109,53 @@ struct TranslationRelatedStore
case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP_UTF8:
case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP3:
case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP3_UTF8:
- if (contextArg.isEmpty() || lupdateSource.isEmpty())
+ if (contextArg.isEmpty() || lupdateSource.isEmpty()) {
+ if (printwarning) {
+ std::stringstream warning;
+ warning << qPrintable(lupdateLocationFile) << ":"
+ << lupdateLocationLine << ":"
+ << locationCol << ": "
+ << " \'" << qPrintable(funcName)
+ << "\' cannot be called without context or source."
+ << " The call is ignored." << std::endl;
+ lupdateWarning.append(QString::fromStdString(warning.str()));
+ }
return false;
+ }
// not sure if the third argument is compulsory
break;
// only one argument (?) the message Id
case TrFunctionAliasManager::Function_QT_TRID_N_NOOP:
case TrFunctionAliasManager::Function_qtTrId:
case TrFunctionAliasManager::Function_QT_TRID_NOOP:
- if (lupdateId.isEmpty())
+ if (lupdateId.isEmpty()) {
+ if (printwarning) {
+ std::stringstream warning;
+ warning << qPrintable(lupdateLocationFile) << ":"
+ << lupdateLocationLine << ":"
+ << locationCol << ": "
+ << " \'" << qPrintable(funcName)
+ << "\' cannot be called without Id."
+ << " The call is ignored." << std::endl;
+ lupdateWarning.append(QString::fromStdString(warning.str()));
+ }
return false;
+ }
break;
default:
- if (funcName == QStringLiteral("TRANSLATOR") && lupdateComment.isEmpty())
+ if (funcName == QStringLiteral("TRANSLATOR") && lupdateComment.isEmpty()) {
+ if (printwarning) {
+ std::stringstream warning;
+ warning << qPrintable(lupdateLocationFile) << ":"
+ << lupdateLocationLine << ":"
+ << locationCol << ": "
+ << qPrintable(funcName)
+ << " cannot be called without comment."
+ << " The call is ignored." << std::endl;
+ lupdateWarning.append(QString::fromStdString(warning.str()));
+ }
return false;
+ }
}
return !lupdateLocationFile.isEmpty() && (lupdateLocationLine > -1) && (locationCol > -1);
}
@@ -178,11 +211,23 @@ struct Stores
TranslationStores Preprocessor;
WriteSynchronizedRef<TranslationRelatedStore> AST;
WriteSynchronizedRef<TranslationRelatedStore> QDeclareTrWithContext;
- WriteSynchronizedRef<TranslationRelatedStore> QNoopTranlsationWithContext;
+ WriteSynchronizedRef<TranslationRelatedStore> QNoopTranlsationWithContext; // or with warnings that need to be
+ //displayed in the same order, always
};
namespace LupdatePrivate
{
+ inline QString fixedLineEndings(const QString &s)
+ {
+#ifdef Q_OS_WIN
+ QString result = s;
+ result.replace(QLatin1String("\r\n"), QLatin1String("\n"));
+ return result;
+#else
+ return s;
+#endif
+ }
+
enum QuoteCompulsary
{
None = 0x01,
@@ -197,7 +242,7 @@ namespace LupdatePrivate
Depending on the given compulsory option, quotes can be unbalanced and
still some text is returned. This is to mimic the old lupdate behavior.
*/
- static QString cleanQuote(llvm::StringRef s, QuoteCompulsary quote)
+ inline QString cleanQuote(llvm::StringRef s, QuoteCompulsary quote)
{
if (s.empty())
return {};
@@ -206,7 +251,7 @@ namespace LupdatePrivate
return {};
if (!s.consume_back("\"") && ((quote & Right) != 0))
return {};
- return QString::fromStdString(s);
+ return fixedLineEndings(toQt(s));
}
/*
@@ -214,12 +259,12 @@ namespace LupdatePrivate
for a given string literal coming from the source code. Do not use
to clean the quotes around the lupdate translator specific comments.
*/
- static QString cleanQuote(const std::string &token)
+ inline QString cleanQuote(const std::string &token)
{
if (token.empty())
return {};
- const QString string = QString::fromStdString(token).trimmed();
+ const QString string = fixedLineEndings(QString::fromStdString(token).trimmed());
const int index = string.indexOf(QLatin1Char('"'));
if (index <= 0)
return LupdatePrivate::cleanQuote(token, QuoteCompulsary::LeftAndRight);
@@ -247,18 +292,23 @@ namespace LupdatePrivate
namespace ClangCppParser
{
- void loadCPP(Translator &translator, const QStringList &filenames, ConversionData &cd);
+ void loadCPP(Translator &translator, const QStringList &filenames, ConversionData &cd,
+ bool *fail);
- void fillTranslator(const TranslationRelatedStore &store, Translator &tor, ConversionData &cd);
+ using TranslatorMessageVector = std::vector<TranslatorMessage>;
+ void collectMessages(TranslatorMessageVector &result, TranslationRelatedStore &store);
TranslatorMessage translatorMessage(const TranslationRelatedStore &store,
- const QString &id, bool plural, bool isID);
+ const QString &id, bool plural, bool isID, bool isWarningOnly = false);
void correctAstTranslationContext(ReadSynchronizedRef<TranslationRelatedStore> &ast,
WriteSynchronizedRef<TranslationRelatedStore> &newAst, const TranslationStores &qDecl);
- void correctNoopTanslationContext(ReadSynchronizedRef<TranslationRelatedStore> &qNoop,
- WriteSynchronizedRef<TranslationRelatedStore> &newQNoop, const TranslationStores &qDecl);
+ void finalize(ReadSynchronizedRef<TranslationRelatedStore> &ast,
+ WriteSynchronizedRef<TranslationRelatedStore> &newAst);
+
+ bool stringContainsTranslationInformation(llvm::StringRef ba);
+ bool hasAliases();
+ std::vector<std::string> getAliasFunctionDefinition();
- bool containsTranslationInformation(llvm::StringRef ba);
}
QT_END_NAMESPACE
diff --git a/src/linguist/lupdate/filesignificancecheck.cpp b/src/linguist/lupdate/filesignificancecheck.cpp
new file mode 100644
index 000000000..9babe6898
--- /dev/null
+++ b/src/linguist/lupdate/filesignificancecheck.cpp
@@ -0,0 +1,70 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "filesignificancecheck.h"
+
+#include <mutex>
+
+QT_BEGIN_NAMESPACE
+
+FileSignificanceCheck *FileSignificanceCheck::m_instance = nullptr;
+
+void FileSignificanceCheck::setRootDirectories(const QStringList &paths)
+{
+ const size_t pathsSize = static_cast<size_t>(paths.size());
+ m_rootDirs.resize(pathsSize);
+ for (size_t i = 0; i < pathsSize; ++i)
+ m_rootDirs[i].setPath(paths.at(i));
+}
+
+void FileSignificanceCheck::setExclusionPatterns(const QStringList &patterns)
+{
+ const size_t patternsSize = static_cast<size_t>(patterns.size());
+ m_exclusionRegExes.resize(patternsSize);
+ for (size_t i = 0; i < patternsSize; ++i)
+ m_exclusionRegExes[i] = QRegularExpression::fromWildcard(patterns.at(i));
+}
+
+/*
+ * Return true if the given source file is significant for lupdate.
+ * A file is considered insignificant if
+ * - it's not within any project root
+ * - it's excluded
+ *
+ * This method is called from multiple threads.
+ * Results are cached.
+ */
+bool FileSignificanceCheck::isFileSignificant(const std::string &filePath) const
+{
+ // cache lookup
+ std::shared_lock<std::shared_mutex> readLock(m_cacheMutex);
+ auto it = m_cache.find(filePath);
+ if (it != m_cache.end())
+ return it->second;
+
+ // cache miss
+ readLock.unlock();
+ std::unique_lock<std::shared_mutex> writeLock(m_cacheMutex);
+ QString file = QString::fromUtf8(filePath);
+ QString cleanFile = QDir::cleanPath(file);
+ for (const QRegularExpression &rx : m_exclusionRegExes) {
+ if (rx.match(cleanFile).hasMatch()) {
+ m_cache.insert({filePath, false});
+ return false;
+ }
+ }
+
+ for (const QDir &rootDir : m_rootDirs) {
+ QString relativeFilePath = rootDir.relativeFilePath(file);
+ if (!relativeFilePath.startsWith(QLatin1String("../"))
+ && QFileInfo(relativeFilePath).isRelative()) {
+ m_cache.insert({filePath, true});
+ return true;
+ }
+ }
+
+ m_cache.insert({filePath, false});
+ return false;
+}
+
+QT_END_NAMESPACE
diff --git a/src/linguist/lupdate/filesignificancecheck.h b/src/linguist/lupdate/filesignificancecheck.h
new file mode 100644
index 000000000..15a947133
--- /dev/null
+++ b/src/linguist/lupdate/filesignificancecheck.h
@@ -0,0 +1,63 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef FILESIGNIFICANCECHECK_H
+#define FILESIGNIFICANCECHECK_H
+
+#include <QtCore/qdir.h>
+#include <QtCore/qregularexpression.h>
+#include <QtCore/qstringlist.h>
+
+#include <shared_mutex>
+#include <string>
+#include <unordered_map>
+#include <vector>
+
+QT_BEGIN_NAMESPACE
+
+class FileSignificanceCheck
+{
+public:
+ FileSignificanceCheck() = default;
+
+ static void create()
+ {
+ m_instance = new FileSignificanceCheck;
+ }
+
+ static void destroy()
+ {
+ delete m_instance;
+ m_instance = nullptr;
+ }
+
+ static FileSignificanceCheck *the()
+ {
+ return m_instance;
+ }
+
+ void setRootDirectories(const QStringList &paths);
+ void setExclusionPatterns(const QStringList &patterns);
+
+ bool isFileSignificant(const std::string &filePath) const;
+
+private:
+ static FileSignificanceCheck *m_instance;
+ std::vector<QDir> m_rootDirs;
+ std::vector<QRegularExpression> m_exclusionRegExes;
+ mutable std::unordered_map<std::string, bool> m_cache;
+ mutable std::shared_mutex m_cacheMutex;
+};
+
+namespace LupdatePrivate {
+
+inline bool isFileSignificant(const std::string &filePath)
+{
+ return FileSignificanceCheck::the()->isFileSignificant(filePath);
+}
+
+} // namespace LupdatePrivate
+
+QT_END_NAMESPACE
+
+#endif // header guard
diff --git a/src/linguist/lupdate/java.cpp b/src/linguist/lupdate/java.cpp
index 14ba926a8..22a226200 100644
--- a/src/linguist/lupdate/java.cpp
+++ b/src/linguist/lupdate/java.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "lupdate.h"
@@ -36,6 +11,8 @@
#include <QtCore/QStack>
#include <QtCore/QString>
#include <QtCore/QCoreApplication>
+#include <QtCore/QStringConverter>
+#include <QtCore/QTextStream>
#include <iostream>
@@ -77,7 +54,7 @@ static QChar yyCh;
static QString yyIdent;
static QString yyComment;
static QString yyString;
-
+static bool yyEOF = false;
static qlonglong yyInteger;
static int yyParenDepth;
@@ -101,8 +78,10 @@ std::ostream &yyMsg(int line = 0)
static QChar getChar()
{
- if (yyInPos >= yyInStr.size())
- return QChar(EOF);
+ if (yyInPos >= yyInStr.size()) {
+ yyEOF = true;
+ return QChar();
+ }
QChar c = yyInStr[yyInPos++];
if (c == QLatin1Char('\n'))
++yyCurLineNo;
@@ -118,7 +97,7 @@ static int getToken()
yyComment.clear();
yyString.clear();
- while (yyCh != QChar(EOF)) {
+ while (!yyEOF) {
yyLineNo = yyCurLineNo;
if ( yyCh.isLetter() || yyCh.toLatin1() == '_' ) {
@@ -163,7 +142,7 @@ static int getToken()
if ( yyCh == QLatin1Char('/') ) {
do {
yyCh = getChar();
- if (yyCh == QChar(EOF))
+ if (yyEOF)
break;
yyComment.append(yyCh);
} while (yyCh != QLatin1Char('\n'));
@@ -175,8 +154,8 @@ static int getToken()
while ( !metAsterSlash ) {
yyCh = getChar();
- if (yyCh == QChar(EOF)) {
- yyMsg() << qPrintable(LU::tr("Unterminated Java comment.\n"));
+ if (yyEOF) {
+ yyMsg() << "Unterminated Java comment.\n";
return Tok_Comment;
}
@@ -198,7 +177,8 @@ static int getToken()
case '"':
yyCh = getChar();
- while (yyCh != QChar(EOF) && yyCh != QLatin1Char('\n') && yyCh != QLatin1Char('"')) {
+ while (!yyEOF && yyCh != QLatin1Char('\n') && yyCh != QLatin1Char('"')) {
+
if ( yyCh == QLatin1Char('\\') ) {
yyCh = getChar();
if ( yyCh == QLatin1Char('u') ) {
@@ -212,7 +192,7 @@ static int getToken()
else {
int sub(yyCh.toLower().toLatin1() - 87);
if( sub > 15 || sub < 10) {
- yyMsg() << qPrintable(LU::tr("Invalid Unicode value.\n"));
+ yyMsg() << "Invalid Unicode value.\n";
break;
}
unicode += sub;
@@ -235,7 +215,7 @@ static int getToken()
}
if ( yyCh != QLatin1Char('"') )
- yyMsg() << qPrintable(LU::tr("Unterminated string.\n"));
+ yyMsg() << "Unterminated string.\n";
yyCh = getChar();
@@ -251,7 +231,7 @@ static int getToken()
yyCh = getChar();
do {
yyCh = getChar();
- } while (yyCh != QChar(EOF) && yyCh != QLatin1Char('\''));
+ } while (!yyEOF && yyCh != QLatin1Char('\''));
yyCh = getChar();
break;
case '{':
@@ -348,9 +328,9 @@ static bool matchString( QString &s )
if (yyTok == Tok_String)
s += yyString;
else {
- yyMsg() << qPrintable(LU::tr(
+ yyMsg() <<
"String used in translation can contain only literals"
- " concatenated with other literals, not expressions or numbers.\n"));
+ " concatenated with other literals, not expressions or numbers.\n";
return false;
}
yyTok = getToken();
@@ -447,6 +427,7 @@ static void parse(Translator *tor, ConversionData &cd)
QString com;
QString extracomment;
+ yyEOF = false;
yyCh = getChar();
yyTok = getToken();
@@ -458,7 +439,7 @@ static void parse(Translator *tor, ConversionData &cd)
yyScope.push(new Scope(yyIdent, Scope::Clazz, yyLineNo));
}
else {
- yyMsg() << qPrintable(LU::tr("'class' must be followed by a class name.\n"));
+ yyMsg() << "'class' must be followed by a class name.\n";
break;
}
while (!match(Tok_LeftBrace)) {
@@ -530,7 +511,7 @@ static void parse(Translator *tor, ConversionData &cd)
case Tok_RightBrace:
if ( yyScope.isEmpty() ) {
- yyMsg() << qPrintable(LU::tr("Excess closing brace.\n"));
+ yyMsg() << "Excess closing brace.\n";
}
else
delete (yyScope.pop());
@@ -559,7 +540,7 @@ static void parse(Translator *tor, ConversionData &cd)
yyPackage.append(QLatin1String("."));
break;
default:
- yyMsg() << qPrintable(LU::tr("'package' must be followed by package name.\n"));
+ yyMsg() << "'package' must be followed by package name.\n";
break;
}
yyTok = getToken();
@@ -572,9 +553,9 @@ static void parse(Translator *tor, ConversionData &cd)
}
if ( !yyScope.isEmpty() )
- yyMsg(yyScope.top()->line) << qPrintable(LU::tr("Unbalanced opening brace.\n"));
+ yyMsg(yyScope.top()->line) << "Unbalanced opening brace.\n";
else if ( yyParenDepth != 0 )
- yyMsg(yyParenLineNo) << qPrintable(LU::tr("Unbalanced opening parenthesis.\n"));
+ yyMsg(yyParenLineNo) << "Unbalanced opening parenthesis.\n";
}
@@ -582,7 +563,7 @@ bool loadJava(Translator &translator, const QString &filename, ConversionData &c
{
QFile file(filename);
if (!file.open(QIODevice::ReadOnly)) {
- cd.appendError(LU::tr("Cannot open %1: %2").arg(filename, file.errorString()));
+ cd.appendError(QStringLiteral("Cannot open %1: %2").arg(filename, file.errorString()));
return false;
}
diff --git a/src/linguist/lupdate/lupdate.1 b/src/linguist/lupdate/lupdate.1
index 1eaf03aed..a866965ca 100644
--- a/src/linguist/lupdate/lupdate.1
+++ b/src/linguist/lupdate/lupdate.1
@@ -1,28 +1,7 @@
.TH lupdate 1 "18 October 2001" "Digia Plc and/or its subsidiary(-ies)" \" -*- nroff -*-
.\"
.\" Copyright (C) 2016 The Qt Company Ltd.
-.\" Contact: https://www.qt.io/licensing/
-.\"
-.\" This file is part of the QtGui module of the Qt Toolkit.
-.\"
-.\" $QT_BEGIN_LICENSE:GPL-EXCEPT$
-.\" Commercial License Usage
-.\" Licensees holding valid commercial Qt licenses may use this file in
-.\" accordance with the commercial license agreement provided with the
-.\" Software or, alternatively, in accordance with the terms contained in
-.\" a written agreement between you and The Qt Company. For licensing terms
-.\" and conditions see https://www.qt.io/terms-conditions. For further
-.\" information use the contact form at https://www.qt.io/contact-us.
-.\"
-.\" GNU General Public License Usage
-.\" Alternatively, this file may be used under the terms of the GNU
-.\" General Public License version 3 as published by the Free Software
-.\" Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-.\" included in the packaging of this file. Please review the following
-.\" information to ensure the GNU General Public License requirements will
-.\" be met: https://www.gnu.org/licenses/gpl-3.0.html.
-.\"
-.\" $QT_END_LICENSE$
+.\" SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
.\"
.SH NAME
lupdate \- update Qt Linguist translation files
@@ -49,7 +28,7 @@ used with version control systems if required.
.PP
.SH OPTIONS
.TP
-.I "-disable-heuristic {sametext|similartext|number}"
+.I "-disable-heuristic {sametext|similartext}"
Disable the named merge heuristic. Can be specified multiple times.
.TP
.I "-extensions <ext>[,<ext>...]"
diff --git a/src/linguist/lupdate/lupdate.h b/src/linguist/lupdate/lupdate.h
index 44336d9f5..5cc0f8c2b 100644
--- a/src/linguist/lupdate/lupdate.h
+++ b/src/linguist/lupdate/lupdate.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef LUPDATE_H
#define LUPDATE_H
@@ -52,7 +27,6 @@ enum UpdateOption {
NoSort = 8,
HeuristicSameText = 16,
HeuristicSimilarText = 32,
- HeuristicNumber = 64,
AbsoluteLocations = 256,
RelativeLocations = 512,
NoLocations = 1024,
@@ -69,6 +43,7 @@ Translator merge(
void loadCPP(Translator &translator, const QStringList &filenames, ConversionData &cd);
bool loadJava(Translator &translator, const QString &filename, ConversionData &cd);
+bool loadPython(Translator &translator, const QString &fileName, ConversionData &cd);
bool loadUI(Translator &translator, const QString &filename, ConversionData &cd);
#ifndef QT_NO_QML
@@ -120,6 +95,8 @@ public:
NumTrFunctions
};
+ using NameToTrFunctionMap = QHash<QString, TrFunction>;
+
enum Operation { AddAlias, SetAlias };
int trFunctionByName(const QString &trFunctionName) const;
@@ -130,17 +107,16 @@ public:
{ return m_trFunctionAliases[trFunction].contains(identifier); }
QStringList availableFunctionsWithAliases() const;
+ QStringList listAliases() const;
+
+ const NameToTrFunctionMap &nameToTrFunctionMap() const;
private:
void ensureTrFunctionHashUpdated() const;
private:
QStringList m_trFunctionAliases[NumTrFunctions];
- mutable QHash<QString,TrFunction> m_nameToTrFunctionMap;
-};
-
-class LU {
- Q_DECLARE_TR_FUNCTIONS(LUpdate)
+ mutable NameToTrFunctionMap m_nameToTrFunctionMap;
};
QT_END_NAMESPACE
diff --git a/src/linguist/lupdate/lupdate.pro b/src/linguist/lupdate/lupdate.pro
deleted file mode 100644
index 48761dc62..000000000
--- a/src/linguist/lupdate/lupdate.pro
+++ /dev/null
@@ -1,76 +0,0 @@
-option(host_build)
-QT = core-private tools-private
-
-# Needed to get access to all the CLANG_FOO assignments.
-include($$OUT_PWD/../../../src/global/qttools-config.pri)
-
-qtHaveModule(qmldevtools-private) {
- QT += qmldevtools-private
-} else {
- DEFINES += QT_NO_QML
-}
-
-qtConfig(clangcpp) {
- LIBS += $$CLANGCPP_LIBS $$CLANG_LIBS
-
- !contains(QMAKE_DEFAULT_INCDIRS, $$CLANG_INCLUDEPATH): INCLUDEPATH += $$CLANG_INCLUDEPATH
- DEFINES += $$CLANG_DEFINES
-
- !contains(QMAKE_DEFAULT_LIBDIRS, $$CLANG_LIBDIR):!disable_external_rpath: QMAKE_RPATHDIR += $$CLANG_LIBDIR
- DEFINES += $$shell_quote(CLANG_RESOURCE_DIR=\"$${CLANG_LIBDIR}/clang/$${CLANG_VERSION}/include\")
-
- DEFINES += $$shell_quote(LUPDATE_CLANG_VERSION_STR=\"$${CLANG_VERSION}\") \
- LUPDATE_CLANG_VERSION_MAJOR=$${CLANG_MAJOR_VERSION} \
- LUPDATE_CLANG_VERSION_MINOR=$${CLANG_MINOR_VERSION} \
- LUPDATE_CLANG_VERSION_PATCH=$${CLANG_PATCH_VERSION}
-}
-
-CONFIG += rtti_off
-
-DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII
-
-include(../shared/formats.pri)
-
-SOURCES += \
- main.cpp \
- merge.cpp \
- ../shared/projectdescriptionreader.cpp \
- ../shared/runqttool.cpp \
- ../shared/qrcreader.cpp \
- ../shared/simtexth.cpp \
- cpp.cpp \
- java.cpp \
- ui.cpp
-
-qtHaveModule(qmldevtools-private): SOURCES += qdeclarative.cpp
-
-HEADERS += \
- lupdate.h \
- cpp.h \
- ../shared/projectdescriptionreader.h \
- ../shared/qrcreader.h \
- ../shared/runqttool.h \
- ../shared/simtexth.h
-
-qtConfig(clangcpp) {
- SOURCES += \
- cpp_clang.cpp \
- clangtoolastreader.cpp \
- lupdatepreprocessoraction.cpp
- HEADERS += \
- cpp_clang.h \
- clangtoolastreader.h \
- lupdatepreprocessoraction.h \
- synchronized.h
-}
-
-mingw {
- RC_FILE = lupdate.rc
-}
-
-qmake.name = QMAKE
-qmake.value = $$shell_path($$QMAKE_QMAKE)
-QT_TOOL_ENV += qmake
-
-QMAKE_TARGET_DESCRIPTION = "Qt Translation File Update Tool"
-load(qt_tool)
diff --git a/src/linguist/lupdate/lupdatepreprocessoraction.cpp b/src/linguist/lupdate/lupdatepreprocessoraction.cpp
index 78bcbb721..4d5b9a3b4 100644
--- a/src/linguist/lupdate/lupdatepreprocessoraction.cpp
+++ b/src/linguist/lupdate/lupdatepreprocessoraction.cpp
@@ -1,32 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "lupdatepreprocessoraction.h"
+#include "filesignificancecheck.h"
#include <clang/Lex/MacroArgs.h>
#include <clang/Basic/TokenKinds.h>
@@ -37,9 +13,11 @@ void LupdatePPCallbacks::MacroExpands(const clang::Token &token,
const clang::MacroDefinition &macroDefinition, clang::SourceRange sourceRange,
const clang::MacroArgs *macroArgs)
{
+ Q_UNUSED(macroDefinition);
+
const auto &sm = m_preprocessor.getSourceManager();
llvm::StringRef fileName = sm.getFilename(sourceRange.getBegin());
- if (fileName != m_inputFile)
+ if (!LupdatePrivate::isFileSignificant(fileName.str()))
return;
const QString funcName = QString::fromStdString(m_preprocessor.getSpelling(token));
@@ -54,6 +32,9 @@ void LupdatePPCallbacks::MacroExpands(const clang::Token &token,
case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP3:
case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP_UTF8:
case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP3_UTF8:
+ case TrFunctionAliasManager::Function_QT_TR_NOOP:
+ case TrFunctionAliasManager::Function_QT_TR_NOOP_UTF8:
+ case TrFunctionAliasManager::Function_QT_TR_N_NOOP:
qCDebug(lcClang) << "MacroExpands: Function name:" << funcName;
break;
}
@@ -61,7 +42,8 @@ void LupdatePPCallbacks::MacroExpands(const clang::Token &token,
TranslationRelatedStore store;
store.callType = QStringLiteral("MacroExpands");
store.funcName = funcName;
- store.lupdateLocationFile = QString::fromStdString(fileName);
+ store.lupdateLocationFile = toQt(fileName);
+ store.lupdateInputFile = toQt(m_inputFile);
store.lupdateLocationLine = sm.getExpansionLineNumber(sourceRange.getBegin());
store.locationCol = sm.getExpansionColumnNumber(sourceRange.getBegin());
@@ -84,6 +66,9 @@ void LupdatePPCallbacks::MacroExpands(const clang::Token &token,
case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP3:
case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP_UTF8:
case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP3_UTF8:
+ case TrFunctionAliasManager::Function_QT_TR_NOOP_UTF8:
+ case TrFunctionAliasManager::Function_QT_TR_NOOP:
+ case TrFunctionAliasManager::Function_QT_TR_N_NOOP:
if (!clang::tok::isStringLiteral(kind))
errorArgument = true;
break;
@@ -96,6 +81,7 @@ void LupdatePPCallbacks::MacroExpands(const clang::Token &token,
temp += QString::fromStdString(m_preprocessor.getSpelling(preExpArgument));
}
arguments[i] = temp;
+ qCDebug(lcClang) << "*********** macro argument : " << temp;
}
storeMacroArguments(arguments, &store);
}
@@ -112,10 +98,14 @@ void LupdatePPCallbacks::storeMacroArguments(const std::vector<QString> &args,
if (args.size() == 1)
store->contextArg = args[0];
break;
- // two arguments: the context and the source
+ case TrFunctionAliasManager::Function_QT_TR_NOOP_UTF8:
+ case TrFunctionAliasManager::Function_QT_TR_NOOP:
+ case TrFunctionAliasManager::Function_QT_TR_N_NOOP:
+ if (args.size() >= 1)
+ store->lupdateSource = args[0];
+ break;
case TrFunctionAliasManager::Function_QT_TRANSLATE_N_NOOP:
case TrFunctionAliasManager::Function_QT_TRANSLATE_N_NOOP3:
- Q_FALLTHROUGH();
case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP:
case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP_UTF8:
case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP3:
@@ -129,7 +119,6 @@ void LupdatePPCallbacks::storeMacroArguments(const std::vector<QString> &args,
break;
// only one argument (?) the message Id
case TrFunctionAliasManager::Function_QT_TRID_N_NOOP:
- Q_FALLTHROUGH();
case TrFunctionAliasManager::Function_qtTrId:
case TrFunctionAliasManager::Function_QT_TRID_NOOP:
if (args.size() == 1)
@@ -143,22 +132,66 @@ void LupdatePPCallbacks::storeMacroArguments(const std::vector<QString> &args,
void LupdatePPCallbacks::SourceRangeSkipped(clang::SourceRange sourceRange,
clang::SourceLocation endifLoc)
{
+ Q_UNUSED(endifLoc);
+
const auto &sm = m_preprocessor.getSourceManager();
llvm::StringRef fileName = sm.getFilename(sourceRange.getBegin());
- if (fileName != m_inputFile)
+
+ if (!LupdatePrivate::isFileSignificant(fileName.str()))
return;
+
const char *begin = sm.getCharacterData(sourceRange.getBegin());
const char *end = sm.getCharacterData(sourceRange.getEnd());
llvm::StringRef skippedText = llvm::StringRef(begin, end - begin);
- if (ClangCppParser::containsTranslationInformation(skippedText)) {
- qCDebug(lcClang) << "SourceRangeSkipped: skipped text:" << skippedText;
+ if (ClangCppParser::stringContainsTranslationInformation(skippedText)) {
+ qCDebug(lcClang) << "SourceRangeSkipped: skipped text:" << QString::fromStdString(skippedText.str());
unsigned int beginLine = sm.getExpansionLineNumber(sourceRange.getBegin());
unsigned int endLine = sm.getExpansionLineNumber(sourceRange.getEnd());
- qWarning("Code with translation information has been skipped "
- "in file %s between lines %d and %d",
- m_inputFile.c_str(), beginLine, endLine);
+ qWarning("%s Code with translation information has been skipped "
+ "between lines %d and %d",
+ fileName.str().c_str(), beginLine, endLine);
}
+}
+// To list the included files
+#if (LUPDATE_CLANG_VERSION < LUPDATE_CLANG_VERSION_CHECK(14,0,0))
+void LupdatePPCallbacks::InclusionDirective(clang::SourceLocation /*hashLoc*/,
+ const clang::Token & /*includeTok*/, clang::StringRef /*fileName*/, bool /*isAngled*/,
+ clang::CharSourceRange /*filenameRange*/,
+#if (LUPDATE_CLANG_VERSION >= LUPDATE_CLANG_VERSION_CHECK(16,0,0))
+ const clang::OptionalFileEntryRef file,
+#elif (LUPDATE_CLANG_VERSION >= LUPDATE_CLANG_VERSION_CHECK(15,0,0))
+ const clang::Optional<clang::FileEntryRef> file,
+#else
+ const clang::FileEntry *file,
+#endif
+ clang::StringRef /*searchPath*/, clang::StringRef /*relativePath*/,
+ const clang::Module */*imported*/, clang::SrcMgr::CharacteristicKind /*fileType*/)
+{
+ if (!file)
+ return;
+
+ clang::StringRef fileNameRealPath = file->
+#if (LUPDATE_CLANG_VERSION >= LUPDATE_CLANG_VERSION_CHECK(15,0,0))
+ getFileEntry().
+#endif
+ tryGetRealPathName();
+ if (!LupdatePrivate::isFileSignificant(fileNameRealPath.str()))
+ return;
+
+ TranslationRelatedStore store;
+ store.callType = QStringLiteral("InclusionDirective");
+ store.lupdateLocationFile = toQt(fileNameRealPath);
+ store.lupdateLocationLine = 1;
+ store.locationCol = 1;
+ store.lupdateInputFile = toQt(m_inputFile);
+ // do not fill the store.funcName. There is no function at this point
+ // the information is retrieved here to look for TRANSLATOR comments in header files
+ // when traversing the AST
+
+ if (store.isValid())
+ m_ppStores.emplace_back(std::move(store));
}
+#endif
QT_END_NAMESPACE
diff --git a/src/linguist/lupdate/lupdatepreprocessoraction.h b/src/linguist/lupdate/lupdatepreprocessoraction.h
index 0f07a8d6f..f373248b3 100644
--- a/src/linguist/lupdate/lupdatepreprocessoraction.h
+++ b/src/linguist/lupdate/lupdatepreprocessoraction.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef LUPDATEPREPROCESSORACTION_H
#define LUPDATEPREPROCESSORACTION_H
@@ -32,13 +7,12 @@
#include "cpp_clang.h"
#include "synchronized.h"
-#if defined(Q_CC_MSVC)
-# pragma warning(push)
-# pragma warning(disable: 4100)
-# pragma warning(disable: 4146)
-# pragma warning(disable: 4267)
-# pragma warning(disable: 4624)
-#endif
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_MSVC(4100)
+QT_WARNING_DISABLE_MSVC(4146)
+QT_WARNING_DISABLE_MSVC(4267)
+QT_WARNING_DISABLE_MSVC(4624)
+QT_WARNING_DISABLE_GCC("-Wnonnull")
#include <clang/Frontend/CompilerInstance.h>
#include <clang/Frontend/FrontendActions.h>
@@ -46,9 +20,7 @@
#include <clang/Lex/PPCallbacks.h>
#include <clang/Lex/Preprocessor.h>
-#if defined(Q_CC_MSVC)
-# pragma warning(pop)
-#endif
+QT_WARNING_POP
#include <memory>
@@ -62,7 +34,7 @@ public:
, m_stores(stores)
{
const auto &sm = m_preprocessor.getSourceManager();
- m_inputFile = sm.getFileEntryForID(sm.getMainFileID())->getName();
+ m_inputFile = sm.getFileEntryRefForID(sm.getMainFileID())->getName();
}
~LupdatePPCallbacks() override
@@ -76,7 +48,22 @@ private:
void storeMacroArguments(const std::vector<QString> &args, TranslationRelatedStore *store);
- void SourceRangeSkipped(clang::SourceRange sourceRange, clang::SourceLocation endifLoc);
+ void SourceRangeSkipped(clang::SourceRange sourceRange, clang::SourceLocation endifLoc) override;
+#if (LUPDATE_CLANG_VERSION < LUPDATE_CLANG_VERSION_CHECK(14,0,0))
+ void InclusionDirective(clang::SourceLocation /*hashLoc*/, const clang::Token &/*includeTok*/,
+ clang::StringRef /*fileName*/, bool /*isAngled*/,
+ clang::CharSourceRange /*filenameRange*/,
+#if (LUPDATE_CLANG_VERSION >= LUPDATE_CLANG_VERSION_CHECK(16,0,0))
+ const clang::OptionalFileEntryRef file,
+#elif (LUPDATE_CLANG_VERSION >= LUPDATE_CLANG_VERSION_CHECK(15,0,0))
+ const clang::Optional<clang::FileEntryRef> file,
+#else
+ const clang::FileEntry *file,
+#endif
+ clang::StringRef /*searchPath*/, clang::StringRef /*relativePath*/,
+ const clang::Module */*imported*/,
+ clang::SrcMgr::CharacteristicKind /*fileType*/) override;
+#endif
std::string m_inputFile;
clang::Preprocessor &m_preprocessor;
diff --git a/src/linguist/lupdate/main.cpp b/src/linguist/lupdate/main.cpp
index 055a1b7ed..820f750de 100644
--- a/src/linguist/lupdate/main.cpp
+++ b/src/linguist/lupdate/main.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "lupdate.h"
#if QT_CONFIG(clangcpp)
@@ -43,15 +18,19 @@
#include <QtCore/QFile>
#include <QtCore/QFileInfo>
#include <QtCore/QLibraryInfo>
+#include <QtCore/QRegularExpression>
#include <QtCore/QString>
#include <QtCore/QStringList>
#include <QtCore/QTranslator>
#include <iostream>
+using namespace Qt::StringLiterals;
+
bool useClangToParseCpp = false;
-QString commandLineCompileCommands; // for the path to the json file passed as a command line argument.
+QString commandLineCompilationDatabaseDir; // for the path to the json file passed as a command line argument.
// Has priority over what is in the .pro file and passed to the project.
+QStringList rootDirs;
// Can't have an array of QStaticStringData<N> for different N, so
// use QString, which requires constructor calls. Doesn't matter
@@ -108,7 +87,7 @@ void TrFunctionAliasManager::ensureTrFunctionHashUpdated() const
if (!m_nameToTrFunctionMap.empty())
return;
- QHash<QString, TrFunction> nameToTrFunctionMap;
+ NameToTrFunctionMap nameToTrFunctionMap;
for (int i = 0; i < NumTrFunctions; ++i)
for (const QString &alias : m_trFunctionAliases[i])
nameToTrFunctionMap[alias] = TrFunction(i);
@@ -116,6 +95,12 @@ void TrFunctionAliasManager::ensureTrFunctionHashUpdated() const
m_nameToTrFunctionMap.swap(nameToTrFunctionMap);
}
+const TrFunctionAliasManager::NameToTrFunctionMap &TrFunctionAliasManager::nameToTrFunctionMap() const
+{
+ ensureTrFunctionHashUpdated();
+ return m_nameToTrFunctionMap;
+}
+
static QStringList availableFunctions()
{
QStringList result;
@@ -137,6 +122,19 @@ QStringList TrFunctionAliasManager::availableFunctionsWithAliases() const
return result;
}
+QStringList TrFunctionAliasManager::listAliases() const
+{
+ QStringList result;
+ result.reserve(NumTrFunctions);
+ for (int i = 0; i < NumTrFunctions; ++i) {
+ for (int ii = 1; ii < m_trFunctionAliases[i].size() ; ii++) {
+ // ii = 0 is the default name. Not listed here
+ result.push_back(m_trFunctionAliases[i][ii]);
+ }
+ }
+ return result;
+}
+
TrFunctionAliasManager trFunctionAliasManager;
QString ParserTool::transcode(const QString &str)
@@ -147,11 +145,11 @@ QString ParserTool::transcode(const QString &str)
const QByteArray in = str.toUtf8();
QByteArray out;
- out.reserve(in.length());
- for (int i = 0; i < in.length();) {
+ out.reserve(in.size());
+ for (int i = 0; i < in.size();) {
uchar c = in[i++];
if (c == '\\') {
- if (i >= in.length())
+ if (i >= in.size())
break;
c = in[i++];
@@ -161,7 +159,7 @@ QString ParserTool::transcode(const QString &str)
if (c == 'x' || c == 'u' || c == 'U') {
const bool unicode = (c != 'x');
QByteArray hex;
- while (i < in.length() && isxdigit((c = in[i]))) {
+ while (i < in.size() && isxdigit((c = in[i]))) {
hex += c;
i++;
}
@@ -173,7 +171,7 @@ QString ParserTool::transcode(const QString &str)
QByteArray oct;
int n = 0;
oct += c;
- while (n < 2 && i < in.length() && (c = in[i]) >= '0' && c < '8') {
+ while (n < 2 && i < in.size() && (c = in[i]) >= '0' && c < '8') {
i++;
n++;
oct += c;
@@ -187,7 +185,7 @@ QString ParserTool::transcode(const QString &str)
out += c;
}
}
- return QString::fromUtf8(out.constData(), out.length());
+ return QString::fromUtf8(out.constData(), out.size());
}
static QString m_defaultExtensions;
@@ -215,7 +213,7 @@ static void recursiveFileInfoList(const QDir &dir,
static void printUsage()
{
- printOut(LU::tr(
+ printOut(QStringLiteral(
"Usage:\n"
" lupdate [options] [project-file]...\n"
" lupdate [options] [source-file|path|@lst-file]... -ts ts-files|@lst-file\n\n"
@@ -248,11 +246,16 @@ static void printUsage()
" May be specified multiple times.\n"
" -locations {absolute|relative|none}\n"
" Specify/override how source code references are saved in TS files.\n"
+ " absolute: Source file path is relative to target file. Absolute line\n"
+ " number is stored.\n"
+ " relative: Source file path is relative to target file. Line number is\n"
+ " relative to other entries in the same source file.\n"
+ " none: no information about source location is stored.\n"
" Guessed from existing TS files if not specified.\n"
" Default is absolute for new files.\n"
" -no-ui-lines\n"
" Do not record line numbers in references to UI files.\n"
- " -disable-heuristic {sametext|similartext|number}\n"
+ " -disable-heuristic {sametext|similartext}\n"
" Disable the named merge heuristic. Can be specified multiple times.\n"
" -project <filename>\n"
" Name of a file containing the project's description in JSON format.\n"
@@ -280,13 +283,20 @@ static void printUsage()
" Specify the output file(s). This will override the TRANSLATIONS.\n"
" -version\n"
" Display the version of lupdate and exit.\n"
- " -clang-parser \n"
+ " -clang-parser [compilation-database-dir]\n"
" Use clang to parse cpp files. Otherwise a custom parser is used.\n"
- " Need a compile_commands.json for the files that needs to be parsed.\n"
- " The path to this file can be given in the .pro file\n"
- " under LUPDATE_COMPILE_COMMANDS_PATH.\n"
- " If no path is given search for compile_commands.json will be attempted\n"
- " through all parent paths of the first input file.\n"
+ " This option needs a clang compilation database (compile_commands.json)\n"
+ " for the files that needs to be parsed.\n"
+ " The path to the directory containing this file can be specified on the \n"
+ " command line, directly after the -clang-parser option, or in the .pro file\n"
+ " by setting the variable LUPDATE_COMPILE_COMMANDS_PATH.\n"
+ " A directory specified on the command line takes precedence.\n"
+ " If no path is given, the compilation database will be searched\n"
+ " in all parent paths of the first input file.\n"
+ " -project-roots <directory>...\n"
+ " Specify one or more project root directories.\n"
+ " Only files below a project root are considered for translation when using\n"
+ " the -clang-parser option.\n"
" @lst-file\n"
" Read additional file names (one per line) or includepaths (one per\n"
" line, and prefixed with -I) from lst-file.\n"
@@ -300,7 +310,7 @@ static bool handleTrFunctionAliases(const QString &arg)
for (const QString &pair : arg.split(QLatin1Char(','), Qt::SkipEmptyParts)) {
const int equalSign = pair.indexOf(QLatin1Char('='));
if (equalSign < 0) {
- printErr(LU::tr("tr-function mapping '%1' in -tr-function-alias is missing the '='.\n").arg(pair));
+ printErr(QStringLiteral("tr-function mapping '%1' in -tr-function-alias is missing the '='.\n").arg(pair));
return false;
}
const bool plusEqual = equalSign > 0 && pair[equalSign-1] == QLatin1Char('+');
@@ -309,13 +319,13 @@ static bool handleTrFunctionAliases(const QString &arg)
const QString alias = pair.mid(equalSign+1).trimmed();
const int trFunction = trFunctionByDefaultName(trFunctionName);
if (trFunction < 0) {
- printErr(LU::tr("Unknown tr-function '%1' in -tr-function-alias option.\n"
+ printErr(QStringLiteral("Unknown tr-function '%1' in -tr-function-alias option.\n"
"Available tr-functions are: %2")
.arg(trFunctionName, availableFunctions().join(QLatin1Char(','))));
return false;
}
if (alias.isEmpty()) {
- printErr(LU::tr("Empty alias for tr-function '%1' in -tr-function-alias option.\n")
+ printErr(QStringLiteral("Empty alias for tr-function '%1' in -tr-function-alias option.\n")
.arg(trFunctionName));
return false;
}
@@ -333,7 +343,7 @@ static void updateTsFiles(const Translator &fetchedTor, const QStringList &tsFil
for (int i = 0; i < fetchedTor.messageCount(); i++) {
const TranslatorMessage &msg = fetchedTor.constMessage(i);
if (!msg.id().isEmpty() && msg.sourceText().isEmpty())
- printErr(LU::tr("lupdate warning: Message with id '%1' has no source.\n")
+ printErr(QStringLiteral("lupdate warning: Message with id '%1' has no source.\n")
.arg(msg.id()));
}
@@ -366,22 +376,22 @@ static void updateTsFiles(const Translator &fetchedTor, const QStringList &tsFil
tor.resolveDuplicates();
cd.clearErrors();
if (!targetLanguage.isEmpty() && targetLanguage != tor.languageCode())
- printErr(LU::tr("lupdate warning: Specified target language '%1' disagrees with"
+ printErr(QStringLiteral("lupdate warning: Specified target language '%1' disagrees with"
" existing file's language '%2'. Ignoring.\n")
.arg(targetLanguage, tor.languageCode()));
if (!sourceLanguage.isEmpty() && sourceLanguage != tor.sourceLanguageCode())
- printErr(LU::tr("lupdate warning: Specified source language '%1' disagrees with"
+ printErr(QStringLiteral("lupdate warning: Specified source language '%1' disagrees with"
" existing file's language '%2'. Ignoring.\n")
.arg(sourceLanguage, tor.sourceLanguageCode()));
// If there is translation in the file, the language should be recognized
// (when the language is not recognized, plural translations are lost)
if (tor.translationsExist()) {
QLocale::Language l;
- QLocale::Country c;
- tor.languageAndCountry(tor.languageCode(), &l, &c);
+ QLocale::Territory c;
+ tor.languageAndTerritory(tor.languageCode(), &l, &c);
QStringList forms;
if (!getNumerusInfo(l, c, 0, &forms, 0)) {
- printErr(LU::tr("File %1 won't be updated: it contains translation but the"
+ printErr(QStringLiteral("File %1 won't be updated: it contains translation but the"
" target language is not recognized\n").arg(fileName));
continue;
}
@@ -402,7 +412,7 @@ static void updateTsFiles(const Translator &fetchedTor, const QStringList &tsFil
else if (options & AbsoluteLocations)
tor.setLocationsType(Translator::AbsoluteLocations);
if (options & Verbose)
- printOut(LU::tr("Updating '%1'...\n").arg(fn));
+ printOut(QStringLiteral("Updating '%1'...\n").arg(fn));
UpdateOptions theseOptions = options;
if (tor.locationsType() == Translator::NoLocations) // Could be set from file
@@ -415,7 +425,7 @@ static void updateTsFiles(const Translator &fetchedTor, const QStringList &tsFil
}
if (options & PluralOnly) {
if (options & Verbose)
- printOut(LU::tr("Stripping non plural forms in '%1'...\n").arg(fn));
+ printOut(QStringLiteral("Stripping non plural forms in '%1'...\n").arg(fn));
out.stripNonPluralForms();
}
if (options & NoObsolete)
@@ -454,6 +464,22 @@ static bool readFileContent(const QString &filePath, QString *content, QString *
return true;
}
+static void removeExcludedSources(Projects &projects)
+{
+ for (Project &project : projects) {
+ for (const QString &ex : project.excluded) {
+ QRegularExpression rx(QRegularExpression::wildcardToRegularExpression(ex));
+ for (auto it = project.sources.begin(); it != project.sources.end(); ) {
+ if (rx.match(*it).hasMatch())
+ it = project.sources.erase(it);
+ else
+ ++it;
+ }
+ }
+ removeExcludedSources(project.subProjects);
+ }
+}
+
static QStringList getResources(const QString &resourceFile)
{
if (!QFile::exists(resourceFile))
@@ -461,20 +487,45 @@ static QStringList getResources(const QString &resourceFile)
QString content;
QString errStr;
if (!readFileContent(resourceFile, &content, &errStr)) {
- printErr(LU::tr("lupdate error: Can not read %1: %2\n").arg(resourceFile, errStr));
+ printErr(QStringLiteral("lupdate error: Can not read %1: %2\n").arg(resourceFile, errStr));
return QStringList();
}
ReadQrcResult rqr = readQrcFile(resourceFile, content);
if (rqr.hasError()) {
- printErr(LU::tr("lupdate error: %1:%2: %3\n")
+ printErr(QStringLiteral("lupdate error: %1:%2: %3\n")
.arg(resourceFile, QString::number(rqr.line), rqr.errorString));
}
return rqr.files;
}
+// Remove .qrc files from the project and return them as absolute paths.
+static QStringList extractQrcFiles(Project &project)
+{
+ auto it = project.sources.begin();
+ QStringList qrcFiles;
+ while (it != project.sources.end()) {
+ QFileInfo fi(*it);
+ QString fn = QDir::cleanPath(fi.absoluteFilePath());
+ if (fn.endsWith(QLatin1String(".qrc"), Qt::CaseInsensitive)) {
+ qrcFiles += fn;
+ it = project.sources.erase(it);
+ } else {
+ ++it;
+ }
+ }
+ return qrcFiles;
+}
+
+// Replace all .qrc files in the project with their content.
+static void expandQrcFiles(Project &project)
+{
+ for (const QString &qrcFile : extractQrcFiles(project))
+ project.sources << getResources(qrcFile);
+}
+
static bool processTs(Translator &fetchedTor, const QString &file, ConversionData &cd)
{
- for (const Translator::FileFormat &fmt : qAsConst(Translator::registeredFileFormats())) {
+ for (const Translator::FileFormat &fmt : std::as_const(Translator::registeredFileFormats())) {
if (file.endsWith(QLatin1Char('.') + fmt.extension, Qt::CaseInsensitive)) {
Translator tor;
if (tor.load(file, cd, fmt.extension)) {
@@ -492,7 +543,7 @@ static bool processTs(Translator &fetchedTor, const QString &file, ConversionDat
}
static void processSources(Translator &fetchedTor,
- const QStringList &sourceFiles, ConversionData &cd)
+ const QStringList &sourceFiles, ConversionData &cd, bool *fail)
{
#ifdef QT_NO_QML
bool requireQmlSupport = false;
@@ -516,18 +567,23 @@ static void processSources(Translator &fetchedTor,
|| sourceFile.endsWith(QLatin1String(".qs"), Qt::CaseInsensitive))
requireQmlSupport = true;
#endif // QT_NO_QML
+ else if (sourceFile.endsWith(u".py", Qt::CaseInsensitive))
+ loadPython(fetchedTor, sourceFile, cd);
else if (!processTs(fetchedTor, sourceFile, cd))
sourceFilesCpp << sourceFile;
}
#ifdef QT_NO_QML
if (requireQmlSupport)
- printErr(LU::tr("lupdate warning: Some files have been ignored due to missing qml/javascript support\n"));
+ printErr(QStringLiteral("lupdate warning: Some files have been ignored due to missing qml/javascript support\n"));
#endif
if (useClangToParseCpp) {
#if QT_CONFIG(clangcpp)
- ClangCppParser::loadCPP(fetchedTor, sourceFilesCpp, cd);
+ ClangCppParser::loadCPP(fetchedTor, sourceFilesCpp, cd, fail);
+#else
+ *fail = true;
+ printErr(QStringLiteral("lupdate error: lupdate was built without clang support."));
#endif
}
else
@@ -546,7 +602,7 @@ static QSet<QString> projectRoots(const QString &projectFile, const QStringList
sourceDirs.insert(sf.left(sf.lastIndexOf(QLatin1Char('/')) + 1));
QStringList rootList = sourceDirs.values();
rootList.sort();
- for (int prev = 0, curr = 1; curr < rootList.length(); )
+ for (int prev = 0, curr = 1; curr < rootList.size(); )
if (rootList.at(curr).startsWith(rootList.at(prev)))
rootList.removeAt(curr);
else
@@ -584,7 +640,7 @@ private:
|| codecForSource == QLatin1String("utf8")) {
options &= ~SourceIsUtf16;
} else {
- printErr(LU::tr("lupdate warning: Codec for source '%1' is invalid."
+ printErr(QStringLiteral("lupdate warning: Codec for source '%1' is invalid."
" Falling back to UTF-8.\n").arg(codecForSource));
options &= ~SourceIsUtf16;
}
@@ -595,24 +651,28 @@ private:
ConversionData cd;
cd.m_noUiLines = options & NoUiLines;
cd.m_projectRoots = projectRoots(projectFile, sources);
+ QStringList projectRootDirs;
+ for (auto dir : cd.m_projectRoots)
+ projectRootDirs.append(dir);
+ cd.m_rootDirs = projectRootDirs;
cd.m_includePath = prj.includePaths;
cd.m_excludes = prj.excluded;
cd.m_sourceIsUtf16 = options & SourceIsUtf16;
- if (commandLineCompileCommands.isEmpty())
- cd.m_compileCommandsPath = prj.compileCommands;
+ if (commandLineCompilationDatabaseDir.isEmpty())
+ cd.m_compilationDatabaseDir = prj.compileCommands;
else
- cd.m_compileCommandsPath = commandLineCompileCommands;
+ cd.m_compilationDatabaseDir = commandLineCompilationDatabaseDir;
QStringList tsFiles;
- if (hasTranslations(prj)) {
+ if (prj.translations) {
tsFiles = *prj.translations;
if (parentTor) {
if (topLevel) {
- printErr(LU::tr("lupdate warning: TS files from command line "
+ printErr(QStringLiteral("lupdate warning: TS files from command line "
"will override TRANSLATIONS in %1.\n").arg(projectFile));
goto noTrans;
} else if (nestComplain) {
- printErr(LU::tr("lupdate warning: TS files from command line "
+ printErr(QStringLiteral("lupdate warning: TS files from command line "
"prevent recursing into %1.\n").arg(projectFile));
return;
}
@@ -625,7 +685,7 @@ private:
}
Translator tor;
processProjects(false, options, prj.subProjects, false, &tor, fail);
- processSources(tor, sources, cd);
+ processSources(tor, sources, cd, fail);
updateTsFiles(tor, tsFiles, QStringList(), m_sourceLanguage, m_targetLanguage,
options, fail);
return;
@@ -634,15 +694,15 @@ private:
noTrans:
if (!parentTor) {
if (topLevel) {
- printErr(LU::tr("lupdate warning: no TS files specified. Only diagnostics "
+ printErr(QStringLiteral("lupdate warning: no TS files specified. Only diagnostics "
"will be produced for '%1'.\n").arg(projectFile));
}
Translator tor;
processProjects(false, options, prj.subProjects, nestComplain, &tor, fail);
- processSources(tor, sources, cd);
+ processSources(tor, sources, cd, fail);
} else {
processProjects(false, options, prj.subProjects, nestComplain, parentTor, fail);
- processSources(*parentTor, sources, cd);
+ processSources(*parentTor, sources, cd, fail);
}
}
@@ -685,8 +745,7 @@ int main(int argc, char **argv)
UpdateOptions options =
Verbose | // verbose is on by default starting with Qt 4.2
- HeuristicSameText | HeuristicSimilarText | HeuristicNumber;
- int proDebug = 0;
+ HeuristicSameText | HeuristicSimilarText;
int numFiles = 0;
bool metTsFlag = false;
bool metXTsFlag = false;
@@ -716,16 +775,15 @@ int main(int argc, char **argv)
options &= ~Verbose;
continue;
} else if (arg == QLatin1String("-pro-debug")) {
- proDebug++;
continue;
} else if (arg == QLatin1String("-project")) {
++i;
if (i == argc) {
- printErr(LU::tr("The option -project requires a parameter.\n"));
+ printErr(u"The option -project requires a parameter.\n"_s);
return 1;
}
if (!projectDescriptionFile.isEmpty()) {
- printErr(LU::tr("The option -project must appear only once.\n"));
+ printErr(u"The option -project must appear only once.\n"_s);
return 1;
}
projectDescriptionFile = args[i];
@@ -734,7 +792,7 @@ int main(int argc, char **argv)
} else if (arg == QLatin1String("-target-language")) {
++i;
if (i == argc) {
- printErr(LU::tr("The option -target-language requires a parameter.\n"));
+ printErr(u"The option -target-language requires a parameter.\n"_s);
return 1;
}
targetLanguage = args[i];
@@ -742,7 +800,7 @@ int main(int argc, char **argv)
} else if (arg == QLatin1String("-source-language")) {
++i;
if (i == argc) {
- printErr(LU::tr("The option -source-language requires a parameter.\n"));
+ printErr(u"The option -source-language requires a parameter.\n"_s);
return 1;
}
sourceLanguage = args[i];
@@ -750,7 +808,7 @@ int main(int argc, char **argv)
} else if (arg == QLatin1String("-disable-heuristic")) {
++i;
if (i == argc) {
- printErr(LU::tr("The option -disable-heuristic requires a parameter.\n"));
+ printErr(u"The option -disable-heuristic requires a parameter.\n"_s);
return 1;
}
arg = args[i];
@@ -758,17 +816,15 @@ int main(int argc, char **argv)
options &= ~HeuristicSameText;
} else if (arg == QLatin1String("similartext")) {
options &= ~HeuristicSimilarText;
- } else if (arg == QLatin1String("number")) {
- options &= ~HeuristicNumber;
} else {
- printErr(LU::tr("Invalid heuristic name passed to -disable-heuristic.\n"));
+ printErr(u"Invalid heuristic name passed to -disable-heuristic.\n"_s);
return 1;
}
continue;
} else if (arg == QLatin1String("-locations")) {
++i;
if (i == argc) {
- printErr(LU::tr("The option -locations requires a parameter.\n"));
+ printErr(u"The option -locations requires a parameter.\n"_s);
return 1;
}
if (args[i] == QLatin1String("none")) {
@@ -778,7 +834,7 @@ int main(int argc, char **argv)
} else if (args[i] == QLatin1String("absolute")) {
options |= AbsoluteLocations;
} else {
- printErr(LU::tr("Invalid parameter passed to -locations.\n"));
+ printErr(u"Invalid parameter passed to -locations.\n"_s);
return 1;
}
continue;
@@ -799,7 +855,7 @@ int main(int argc, char **argv)
options |= NoSort;
continue;
} else if (arg == QLatin1String("-version")) {
- printOut(LU::tr("lupdate version %1\n").arg(QLatin1String(QT_VERSION_STR)));
+ printOut(QStringLiteral("lupdate version %1\n").arg(QLatin1String(QT_VERSION_STR)));
return 0;
} else if (arg == QLatin1String("-ts")) {
metTsFlag = true;
@@ -812,7 +868,7 @@ int main(int argc, char **argv)
} else if (arg == QLatin1String("-extensions")) {
++i;
if (i == argc) {
- printErr(LU::tr("The -extensions option should be followed by an extension list.\n"));
+ printErr(u"The -extensions option should be followed by an extension list.\n"_s);
return 1;
}
extensions = args[i];
@@ -820,7 +876,7 @@ int main(int argc, char **argv)
} else if (arg == QLatin1String("-tr-function-alias")) {
++i;
if (i == argc) {
- printErr(LU::tr("The -tr-function-alias option should be followed by a list of function=alias mappings.\n"));
+ printErr(u"The -tr-function-alias option should be followed by a list of function=alias mappings.\n"_s);
return 1;
}
if (!handleTrFunctionAliases(args[i]))
@@ -829,7 +885,7 @@ int main(int argc, char **argv)
} else if (arg == QLatin1String("-pro")) {
++i;
if (i == argc) {
- printErr(LU::tr("The -pro option should be followed by a filename of .pro file.\n"));
+ printErr(u"The -pro option should be followed by a filename of .pro file.\n"_s);
return 1;
}
QString file = QDir::cleanPath(QFileInfo(args[i]).absoluteFilePath());
@@ -839,16 +895,16 @@ int main(int argc, char **argv)
} else if (arg == QLatin1String("-pro-out")) {
++i;
if (i == argc) {
- printErr(LU::tr("The -pro-out option should be followed by a directory name.\n"));
+ printErr(u"The -pro-out option should be followed by a directory name.\n"_s);
return 1;
}
outDir = QDir::cleanPath(QFileInfo(args[i]).absoluteFilePath());
continue;
} else if (arg.startsWith(QLatin1String("-I"))) {
- if (arg.length() == 2) {
+ if (arg.size() == 2) {
++i;
if (i == argc) {
- printErr(LU::tr("The -I option should be followed by a path.\n"));
+ printErr(u"The -I option should be followed by a path.\n"_s);
return 1;
}
includePath += args[i];
@@ -863,13 +919,21 @@ int main(int argc, char **argv)
// the option after -clang-parser is optional
if ((i + 1) != argc && !args[i + 1].startsWith(QLatin1String("-"))) {
i++;
- commandLineCompileCommands = args[i];
+ commandLineCompilationDatabaseDir = args[i];
}
continue;
}
+ else if (arg == QLatin1String("-project-roots")) {
+ while ((i + 1) != argc && !args[i + 1].startsWith(QLatin1String("-"))) {
+ i++;
+ rootDirs << args[i];
+ }
+ rootDirs.removeDuplicates();
+ continue;
+ }
#endif
else if (arg.startsWith(QLatin1String("-")) && arg != QLatin1String("-")) {
- printErr(LU::tr("Unrecognized option '%1'.\n").arg(arg));
+ printErr(QStringLiteral("Unrecognized option '%1'.\n").arg(arg));
return 1;
}
@@ -877,7 +941,7 @@ int main(int argc, char **argv)
if (arg.startsWith(QLatin1String("@"))) {
QFile lstFile(arg.mid(1));
if (!lstFile.open(QIODevice::ReadOnly)) {
- printErr(LU::tr("lupdate error: List file '%1' is not readable.\n")
+ printErr(QStringLiteral("lupdate error: List file '%1' is not readable.\n")
.arg(lstFile.fileName()));
return 1;
}
@@ -885,8 +949,8 @@ int main(int argc, char **argv)
QString lineContent = QString::fromLocal8Bit(lstFile.readLine().trimmed());
if (lineContent.startsWith(QLatin1String("-I"))) {
- if (lineContent.length() == 2) {
- printErr(LU::tr("The -I option should be followed by a path.\n"));
+ if (lineContent.size() == 2) {
+ printErr(u"The -I option should be followed by a path.\n"_s);
return 1;
}
includePath += lineContent.mid(2);
@@ -898,15 +962,15 @@ int main(int argc, char **argv)
files << arg;
}
if (metTsFlag) {
- for (const QString &file : qAsConst(files)) {
+ for (const QString &file : std::as_const(files)) {
bool found = false;
- for (const Translator::FileFormat &fmt : qAsConst(Translator::registeredFileFormats())) {
+ for (const Translator::FileFormat &fmt : std::as_const(Translator::registeredFileFormats())) {
if (file.endsWith(QLatin1Char('.') + fmt.extension, Qt::CaseInsensitive)) {
QFileInfo fi(file);
if (!fi.exists() || fi.isWritable()) {
tsFileNames.append(QFileInfo(file).absoluteFilePath());
} else {
- printErr(LU::tr("lupdate warning: For some reason, '%1' is not writable.\n")
+ printErr(QStringLiteral("lupdate warning: For some reason, '%1' is not writable.\n")
.arg(file));
}
found = true;
@@ -914,7 +978,7 @@ int main(int argc, char **argv)
}
}
if (!found) {
- printErr(LU::tr("lupdate error: File '%1' has no recognized extension.\n")
+ printErr(QStringLiteral("lupdate error: File '%1' has no recognized extension.\n")
.arg(file));
return 1;
}
@@ -923,10 +987,10 @@ int main(int argc, char **argv)
} else if (metXTsFlag) {
alienFiles += files;
} else {
- for (const QString &file : qAsConst(files)) {
+ for (const QString &file : std::as_const(files)) {
QFileInfo fi(file);
if (!fi.exists()) {
- printErr(LU::tr("lupdate error: File '%1' does not exist.\n").arg(file));
+ printErr(QStringLiteral("lupdate error: File '%1' does not exist.\n").arg(file));
return 1;
}
if (isProOrPriFile(file)) {
@@ -934,7 +998,7 @@ int main(int argc, char **argv)
proFiles << cleanFile;
} else if (fi.isDir()) {
if (options & Verbose)
- printOut(LU::tr("Scanning directory '%1'...\n").arg(file));
+ printOut(QStringLiteral("Scanning directory '%1'...\n").arg(file));
QDir dir = QDir(fi.filePath());
projectRoots.insert(dir.absolutePath() + QLatin1Char('/'));
if (extensionsNameFilters.isEmpty()) {
@@ -950,8 +1014,8 @@ int main(int argc, char **argv)
filters |= QDir::AllDirs | QDir::NoDotAndDotDot;
QFileInfoList fileinfolist;
recursiveFileInfoList(dir, extensionsNameFilters, filters, &fileinfolist);
- int scanRootLen = dir.absolutePath().length();
- for (const QFileInfo &fi : qAsConst(fileinfolist)) {
+ int scanRootLen = dir.absolutePath().size();
+ for (const QFileInfo &fi : std::as_const(fileinfolist)) {
QString fn = QDir::cleanPath(fi.absoluteFilePath());
if (fn.endsWith(QLatin1String(".qrc"), Qt::CaseInsensitive)) {
resourceFiles << fn;
@@ -992,13 +1056,21 @@ int main(int argc, char **argv)
return 1;
}
- if (!targetLanguage.isEmpty() && tsFileNames.count() != 1)
- printErr(LU::tr("lupdate warning: -target-language usually only"
- " makes sense with exactly one TS file.\n"));
+ if (!targetLanguage.isEmpty() && tsFileNames.size() != 1)
+ printErr(u"lupdate warning: -target-language usually only"
+ " makes sense with exactly one TS file.\n"_s);
+
+ if (proFiles.isEmpty() && resourceFiles.isEmpty() && sourceFiles.size() == 1
+ && QFileInfo(sourceFiles.first()).fileName() == u"CMakeLists.txt"_s) {
+ printErr(u"lupdate error: Passing a CMakeLists.txt as project file is not supported.\n"_s
+ u"Please use the 'qt_add_lupdate' CMake command and build the "_s
+ u"'update_translations' target.\n"_s);
+ return 1;
+ }
QString errorString;
if (!proFiles.isEmpty()) {
- runQtTool(QStringLiteral("lupdate-pro"), app.arguments().mid(1));
+ runInternalQtTool(u"lupdate-pro"_s, app.arguments().mid(1));
return 0;
}
@@ -1006,22 +1078,25 @@ int main(int argc, char **argv)
if (!projectDescriptionFile.isEmpty()) {
projectDescription = readProjectDescription(projectDescriptionFile, &errorString);
if (!errorString.isEmpty()) {
- printErr(LU::tr("lupdate error: %1\n").arg(errorString));
+ printErr(QStringLiteral("lupdate error: %1\n").arg(errorString));
return 1;
}
if (projectDescription.empty()) {
- printErr(LU::tr("lupdate error:"
+ printErr(QStringLiteral("lupdate error:"
" Could not find project descriptions in %1.\n")
.arg(projectDescriptionFile));
return 1;
}
+ removeExcludedSources(projectDescription);
+ for (Project &project : projectDescription)
+ expandQrcFiles(project);
}
bool fail = false;
if (projectDescription.empty()) {
if (tsFileNames.isEmpty())
- printErr(LU::tr("lupdate warning:"
- " no TS files specified. Only diagnostics will be produced.\n"));
+ printErr(u"lupdate warning:"
+ " no TS files specified. Only diagnostics will be produced.\n"_s);
Translator fetchedTor;
ConversionData cd;
@@ -1030,15 +1105,16 @@ int main(int argc, char **argv)
cd.m_projectRoots = projectRoots;
cd.m_includePath = includePath;
cd.m_allCSources = allCSources;
- cd.m_compileCommandsPath = commandLineCompileCommands;
- for (const QString &resource : qAsConst(resourceFiles))
+ cd.m_compilationDatabaseDir = commandLineCompilationDatabaseDir;
+ cd.m_rootDirs = rootDirs;
+ for (const QString &resource : std::as_const(resourceFiles))
sourceFiles << getResources(resource);
- processSources(fetchedTor, sourceFiles, cd);
+ processSources(fetchedTor, sourceFiles, cd, &fail);
updateTsFiles(fetchedTor, tsFileNames, alienFiles,
sourceLanguage, targetLanguage, options, &fail);
} else {
if (!sourceFiles.isEmpty() || !resourceFiles.isEmpty() || !includePath.isEmpty()) {
- printErr(LU::tr("lupdate error:"
+ printErr(QStringLiteral("lupdate error:"
" Both project and source files / include paths specified.\n"));
return 1;
}
diff --git a/src/linguist/lupdate/merge.cpp b/src/linguist/lupdate/merge.cpp
index 9db8826c8..f204fc73d 100644
--- a/src/linguist/lupdate/merge.cpp
+++ b/src/linguist/lupdate/merge.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "lupdate.h"
@@ -39,210 +14,6 @@
QT_BEGIN_NAMESPACE
-static bool isDigitFriendly(QChar c)
-{
- return c.isPunct() || c.isSpace();
-}
-
-static int numberLength(const QString &s, int i)
-{
- if (i >= s.size() || !s.at(i).isDigit())
- return 0;
-
- int pos = i;
- do {
- ++i;
- } while (i < s.size()
- && (s.at(i).isDigit()
- || (isDigitFriendly(s[i])
- && i + 1 < s.size()
- && (s[i + 1].isDigit()
- || (isDigitFriendly(s[i + 1])
- && i + 2 < s.size()
- && s[i + 2].isDigit())))));
- return i - pos;
-}
-
-
-/*
- Returns a version of 'key' where all numbers have been replaced by zeroes. If
- there were none, returns "".
-*/
-static QString zeroKey(const QString &key)
-{
- QString zeroed;
- bool metSomething = false;
-
- for (int i = 0; i < key.size(); ++i) {
- int len = numberLength(key, i);
- if (len > 0) {
- i += len;
- zeroed.append(QLatin1Char('0'));
- metSomething = true;
- } else {
- zeroed.append(key.at(i));
- }
- }
- return metSomething ? zeroed : QString();
-}
-
-static QString translationAttempt(const QString &oldTranslation,
- const QString &oldSource, const QString &newSource)
-{
- int p = zeroKey(oldSource).count(QLatin1Char('0'));
- QString attempt;
- QStringList oldNumbers;
- QStringList newNumbers;
- QList<bool> met(p);
- QList<int> matchedYet(p);
- int i, j;
- int k = 0, ell, best;
- int m, n;
- int pass;
-
- /*
- This algorithm is hard to follow, so we'll consider an example
- all along: oldTranslation is "XeT 3.0", oldSource is "TeX 3.0"
- and newSource is "XeT 3.1".
-
- First, we set up two tables: oldNumbers and newNumbers. In our
- example, oldNumber[0] is "3.0" and newNumber[0] is "3.1".
- */
- for (i = 0, j = 0; i < oldSource.size(); i++, j++) {
- m = numberLength(oldSource, i);
- n = numberLength(newSource, j);
- if (m > 0) {
- oldNumbers.append(oldSource.mid(i, m + 1));
- newNumbers.append(newSource.mid(j, n + 1));
- i += m;
- j += n;
- met[k] = false;
- matchedYet[k] = 0;
- k++;
- }
- }
-
- /*
- We now go over the old translation, "XeT 3.0", one letter at a
- time, looking for numbers found in oldNumbers. Whenever such a
- number is met, it is replaced with its newNumber equivalent. In
- our example, the "3.0" of "XeT 3.0" becomes "3.1".
- */
- for (i = 0; i < oldTranslation.length(); i++) {
- attempt += oldTranslation[i];
- for (k = 0; k < p; k++) {
- if (oldTranslation[i] == oldNumbers[k][matchedYet[k]])
- matchedYet[k]++;
- else
- matchedYet[k] = 0;
- }
-
- /*
- Let's find out if the last character ended a match. We make
- two passes over the data. In the first pass, we try to
- match only numbers that weren't matched yet; if that fails,
- the second pass does the trick. This is useful in some
- suspicious cases, flagged below.
- */
- for (pass = 0; pass < 2; pass++) {
- best = p; // an impossible value
- for (k = 0; k < p; k++) {
- if ((!met[k] || pass > 0) &&
- matchedYet[k] == oldNumbers[k].length() &&
- numberLength(oldTranslation, i + 1 - matchedYet[k]) == matchedYet[k]) {
- // the longer the better
- if (best == p || matchedYet[k] > matchedYet[best])
- best = k;
- }
- }
- if (best != p) {
- attempt.truncate(attempt.length() - matchedYet[best]);
- attempt += newNumbers[best];
- met[best] = true;
- for (k = 0; k < p; k++)
- matchedYet[k] = 0;
- break;
- }
- }
- }
-
- /*
- We flag two kinds of suspicious cases. They are identified as
- such with comments such as "{2000?}" at the end.
-
- Example of the first kind: old source text "TeX 3.0" translated
- as "XeT 2.0" is flagged "TeX 2.0 {3.0?}", no matter what the
- new text is.
- */
- for (k = 0; k < p; k++) {
- if (!met[k])
- attempt += QLatin1String(" {") + newNumbers[k] + QLatin1String("?}");
- }
-
- /*
- Example of the second kind: "1 of 1" translated as "1 af 1",
- with new source text "1 of 2", generates "1 af 2 {1 or 2?}"
- because it's not clear which of "1 af 2" and "2 af 1" is right.
- */
- for (k = 0; k < p; k++) {
- for (ell = 0; ell < p; ell++) {
- if (k != ell && oldNumbers[k] == oldNumbers[ell] &&
- newNumbers[k] < newNumbers[ell])
- attempt += QLatin1String(" {") + newNumbers[k] + QLatin1String(" or ") +
- newNumbers[ell] + QLatin1String("?}");
- }
- }
- return attempt;
-}
-
-
-/*
- Augments a Translator with translations easily derived from
- similar existing (probably obsolete) translations.
-
- For example, if "TeX 3.0" is translated as "XeT 3.0" and "TeX 3.1"
- has no translation, "XeT 3.1" is added to the translator and is
- marked Unfinished.
-
- Returns the number of additional messages that this heuristic translated.
-*/
-int applyNumberHeuristic(Translator &tor)
-{
- QMap<QString, QPair<QString, QString> > translated;
- QList<bool> untranslated(tor.messageCount());
- int inserted = 0;
-
- for (int i = 0; i < tor.messageCount(); ++i) {
- const TranslatorMessage &msg = tor.message(i);
- bool hasTranslation = msg.isTranslated();
- if (msg.type() == TranslatorMessage::Unfinished) {
- if (!hasTranslation)
- untranslated[i] = true;
- } else if (hasTranslation && msg.translations().count() == 1) {
- const QString &key = zeroKey(msg.sourceText());
- if (!key.isEmpty())
- translated.insert(key, qMakePair(msg.sourceText(), msg.translation()));
- }
- }
-
- for (int i = 0; i < tor.messageCount(); ++i) {
- if (untranslated[i]) {
- TranslatorMessage &msg = tor.message(i);
- const QString &key = zeroKey(msg.sourceText());
- if (!key.isEmpty()) {
- const auto t = translated.constFind(key);
- if (t != translated.constEnd() && t->first != msg.sourceText()) {
- msg.setTranslation(translationAttempt(t->second, t->first,
- msg.sourceText()));
- inserted++;
- }
- }
- }
- }
- return inserted;
-}
-
-
/*
Augments a Translator with trivially derived translations.
@@ -516,34 +287,25 @@ Translator merge(
*/
int sameTextHeuristicCount = (options & HeuristicSameText) ? applySameTextHeuristic(outTor) : 0;
- /*
- The number heuristic handles cases where a message has an
- obsolete counterpart with mostly numbers differing in the
- source text.
- */
- int sameNumberHeuristicCount = (options & HeuristicNumber) ? applyNumberHeuristic(outTor) : 0;
-
if (options & Verbose) {
int totalFound = neww + known;
- err += LU::tr(" Found %n source text(s) (%1 new and %2 already existing)\n", 0, totalFound).arg(neww).arg(known);
+ err += QStringLiteral(" Found %1 source text(s) (%2 new and %3 already existing)\n")
+ .arg(totalFound).arg(neww).arg(known);
if (obsoleted) {
if (options & NoObsolete) {
- err += LU::tr(" Removed %n obsolete entries\n", 0, obsoleted);
+ err += QStringLiteral(" Removed %1 obsolete entries\n").arg(obsoleted);
} else {
- err += LU::tr(" Kept %n obsolete entries\n", 0, obsoleted);
+ err += QStringLiteral(" Kept %1 obsolete entries\n").arg(obsoleted);
}
}
- if (sameNumberHeuristicCount)
- err += LU::tr(" Number heuristic provided %n translation(s)\n",
- 0, sameNumberHeuristicCount);
if (sameTextHeuristicCount)
- err += LU::tr(" Same-text heuristic provided %n translation(s)\n",
- 0, sameTextHeuristicCount);
+ err += QStringLiteral(" Same-text heuristic provided %1 translation(s)\n")
+ .arg(sameTextHeuristicCount);
if (similarTextHeuristicCount)
- err += LU::tr(" Similar-text heuristic provided %n translation(s)\n",
- 0, similarTextHeuristicCount);
+ err += QStringLiteral(" Similar-text heuristic provided %1 translation(s)\n")
+ .arg(similarTextHeuristicCount);
}
return outTor;
}
diff --git a/src/linguist/lupdate/python.cpp b/src/linguist/lupdate/python.cpp
new file mode 100644
index 000000000..0bc3bf5e8
--- /dev/null
+++ b/src/linguist/lupdate/python.cpp
@@ -0,0 +1,777 @@
+// Copyright (C) 2002-2007 Detlev Offenbach <detlev@die-offenbachs.de>
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include <translator.h>
+#include "lupdate.h"
+
+#include <QtCore/qhash.h>
+#include <QtCore/qstring.h>
+#include <QtCore/qtextstream.h>
+#include <QtCore/qstack.h>
+
+#include <cctype>
+#include <cerrno>
+#include <cstdio>
+#include <cstring>
+
+QT_BEGIN_NAMESPACE
+
+static const char PythonMagicComment[] = "TRANSLATOR ";
+
+/*
+ The first part of this source file is the Python tokenizer. We skip
+ most of Python; the only tokens that interest us are defined here.
+*/
+
+enum Token { Tok_Eof, Tok_class, Tok_def, Tok_return, Tok_tr,
+ Tok_trUtf8, Tok_translate, Tok_Ident,
+ Tok_Comment, Tok_Dot, Tok_String,
+ Tok_LeftParen, Tok_RightParen,
+ Tok_Comma, Tok_None, Tok_Integer};
+
+enum class StringType
+{
+ NoString,
+ String,
+ FormatString,
+ RawString
+};
+
+/*
+ The tokenizer maintains the following global variables. The names
+ should be self-explanatory.
+*/
+static QString yyFileName;
+static int yyCh;
+static QByteArray yyIdent;
+static char yyComment[65536];
+static size_t yyCommentLen;
+static char yyString[65536];
+static size_t yyStringLen;
+static int yyParenDepth;
+static int yyLineNo;
+static int yyCurLineNo;
+
+static QByteArray extraComment;
+static QByteArray id;
+
+QHash<QByteArray, Token> tokens = {
+ {"None", Tok_None},
+ {"class", Tok_class},
+ {"def", Tok_def},
+ {"return", Tok_return},
+ {"__tr", Tok_tr}, // Legacy?
+ {"__trUtf8", Tok_trUtf8}
+};
+
+// the file to read from (if reading from a file)
+static FILE *yyInFile;
+
+// the string to read from and current position in the string (otherwise)
+static int yyInPos;
+static int buf;
+
+static int (*getChar)();
+static int (*peekChar)();
+
+static int yyIndentationSize;
+static int yyContinuousSpaceCount;
+static bool yyCountingIndentation;
+
+// (Context, indentation level) pair.
+using ContextPair = QPair<QByteArray, int>;
+// Stack of (Context, indentation level) pairs.
+using ContextStack = QStack<ContextPair>;
+static ContextStack yyContextStack;
+
+static int getCharFromFile()
+{
+ int c;
+
+ if (buf < 0) {
+ c = getc(yyInFile);
+ } else {
+ c = buf;
+ buf = -1;
+ }
+ if (c == '\n') {
+ yyCurLineNo++;
+ yyCountingIndentation = true;
+ yyContinuousSpaceCount = 0;
+ } else if (yyCountingIndentation && (c == 32 || c == 9)) {
+ yyContinuousSpaceCount++;
+ } else {
+ yyCountingIndentation = false;
+ }
+ return c;
+}
+
+static int peekCharFromFile()
+{
+ int c = getc(yyInFile);
+ buf = c;
+ return c;
+}
+
+static void startTokenizer(const QString &fileName, int (*getCharFunc)(),
+ int (*peekCharFunc)())
+{
+ yyInPos = 0;
+ buf = -1;
+ getChar = getCharFunc;
+ peekChar = peekCharFunc;
+
+ yyFileName = fileName;
+ yyCh = getChar();
+ yyParenDepth = 0;
+ yyCurLineNo = 1;
+
+ yyIndentationSize = -1;
+ yyContinuousSpaceCount = 0;
+ yyCountingIndentation = false;
+ yyContextStack.clear();
+}
+
+static bool parseStringEscape(int quoteChar, StringType stringType)
+{
+ static const char tab[] = "abfnrtv";
+ static const char backTab[] = "\a\b\f\n\r\t\v";
+
+ yyCh = getChar();
+ if (yyCh == EOF)
+ return false;
+
+ if (stringType == StringType::RawString) {
+ if (yyCh != quoteChar) // Only quotes can be escaped in raw strings
+ yyString[yyStringLen++] = '\\';
+ yyString[yyStringLen++] = yyCh;
+ yyCh = getChar();
+ return true;
+ }
+
+ if (yyCh == 'x') {
+ QByteArray hex = "0";
+ yyCh = getChar();
+ if (yyCh == EOF)
+ return false;
+ while (std::isxdigit(yyCh)) {
+ hex += char(yyCh);
+ yyCh = getChar();
+ if (yyCh == EOF)
+ return false;
+ }
+ uint n;
+#ifdef Q_CC_MSVC
+ sscanf_s(hex, "%x", &n);
+#else
+ std::sscanf(hex, "%x", &n);
+#endif
+ if (yyStringLen < sizeof(yyString) - 1)
+ yyString[yyStringLen++] = char(n);
+ return true;
+ }
+
+ if (yyCh >= '0' && yyCh < '8') {
+ QByteArray oct;
+ int n = 0;
+ do {
+ oct += char(yyCh);
+ ++n;
+ yyCh = getChar();
+ if (yyCh == EOF)
+ return false;
+ } while (yyCh >= '0' && yyCh < '8' && n < 3);
+#ifdef Q_CC_MSVC
+ sscanf_s(oct, "%o", &n);
+#else
+ std::sscanf(oct, "%o", &n);
+#endif
+ if (yyStringLen < sizeof(yyString) - 1)
+ yyString[yyStringLen++] = char(n);
+ return true;
+ }
+
+ const char *p = std::strchr(tab, yyCh);
+ if (yyStringLen < sizeof(yyString) - 1) {
+ yyString[yyStringLen++] = p == nullptr
+ ? char(yyCh) : backTab[p - tab];
+ }
+ yyCh = getChar();
+ return true;
+}
+
+static Token parseString(StringType stringType = StringType::NoString)
+{
+ int quoteChar = yyCh;
+ bool tripleQuote = false;
+ bool singleQuote = true;
+ bool in = false;
+
+ yyCh = getChar();
+
+ while (yyCh != EOF) {
+ if (singleQuote && (yyCh == '\n' || (in && yyCh == quoteChar)))
+ break;
+
+ if (yyCh == quoteChar) {
+ if (peekChar() == quoteChar) {
+ yyCh = getChar();
+ if (!tripleQuote) {
+ tripleQuote = true;
+ singleQuote = false;
+ in = true;
+ yyCh = getChar();
+ } else {
+ yyCh = getChar();
+ if (yyCh == quoteChar) {
+ tripleQuote = false;
+ break;
+ }
+ }
+ } else if (tripleQuote) {
+ if (yyStringLen < sizeof(yyString) - 1)
+ yyString[yyStringLen++] = char(yyCh);
+ yyCh = getChar();
+ continue;
+ } else {
+ break;
+ }
+ } else {
+ in = true;
+ }
+
+ if (yyCh == '\\') {
+ if (!parseStringEscape(quoteChar, stringType))
+ return Tok_Eof;
+ } else {
+ char *yStart = yyString + yyStringLen;
+ char *yp = yStart;
+ while (yyCh != EOF && (tripleQuote || yyCh != '\n') && yyCh != quoteChar
+ && yyCh != '\\') {
+ *yp++ = char(yyCh);
+ yyCh = getChar();
+ }
+ yyStringLen += yp - yStart;
+ }
+ }
+ yyString[yyStringLen] = '\0';
+
+ if (yyCh != quoteChar) {
+ printf("%c\n", yyCh);
+
+ qWarning("%s:%d: Unterminated string",
+ qPrintable(yyFileName), yyLineNo);
+ }
+
+ if (yyCh == EOF)
+ return Tok_Eof;
+ yyCh = getChar();
+ return Tok_String;
+}
+
+static QByteArray readLine()
+{
+ QByteArray result;
+ while (true) {
+ yyCh = getChar();
+ if (yyCh == EOF || yyCh == '\n')
+ break;
+ result.append(char(yyCh));
+ }
+ return result;
+}
+
+static Token getToken(StringType stringType = StringType::NoString)
+{
+ yyIdent.clear();
+ yyCommentLen = 0;
+ yyStringLen = 0;
+ while (yyCh != EOF) {
+ yyLineNo = yyCurLineNo;
+
+ if (std::isalpha(yyCh) || yyCh == '_') {
+ do {
+ yyIdent.append(char(yyCh));
+ yyCh = getChar();
+ } while (std::isalnum(yyCh) || yyCh == '_');
+
+ return tokens.value(yyIdent, Tok_Ident);
+ }
+ switch (yyCh) {
+ case '#':
+ switch (getChar()) {
+ case ':':
+ extraComment = readLine().trimmed();
+ break;
+ case '=':
+ id = readLine().trimmed();
+ break;
+ case EOF:
+ return Tok_Eof;
+ case '\n':
+ break;
+ default:
+ do {
+ yyCh = getChar();
+ } while (yyCh != EOF && yyCh != '\n');
+ break;
+ }
+ break;
+ case '"':
+ case '\'':
+ return parseString(stringType);
+ case '(':
+ yyParenDepth++;
+ yyCh = getChar();
+ return Tok_LeftParen;
+ case ')':
+ yyParenDepth--;
+ yyCh = getChar();
+ return Tok_RightParen;
+ case ',':
+ yyCh = getChar();
+ return Tok_Comma;
+ case '.':
+ yyCh = getChar();
+ return Tok_Dot;
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': {
+ QByteArray ba;
+ ba += char(yyCh);
+ yyCh = getChar();
+ const bool hex = yyCh == 'x';
+ if (hex) {
+ ba += char(yyCh);
+ yyCh = getChar();
+ }
+ while ((hex ? std::isxdigit(yyCh) : std::isdigit(yyCh))) {
+ ba += char(yyCh);
+ yyCh = getChar();
+ }
+ bool ok;
+ auto v = ba.toLongLong(&ok);
+ Q_UNUSED(v);
+ if (ok)
+ return Tok_Integer;
+ break;
+ }
+ default:
+ yyCh = getChar();
+ }
+ }
+ return Tok_Eof;
+}
+
+/*
+ The second part of this source file is the parser. It accomplishes
+ a very easy task: It finds all strings inside a tr() or translate()
+ call, and possibly finds out the context of the call. It supports
+ three cases:
+ (1) the context is specified, as in FunnyDialog.tr("Hello") or
+ translate("FunnyDialog", "Hello");
+ (2) the call appears within an inlined function;
+ (3) the call appears within a function defined outside the class definition.
+*/
+
+static Token yyTok;
+
+static bool match(Token t)
+{
+ const bool matches = (yyTok == t);
+ if (matches)
+ yyTok = getToken();
+ return matches;
+}
+
+static bool matchStringStart()
+{
+ if (yyTok == Tok_String)
+ return true;
+ // Check for f"bla{var}" and raw strings r"bla".
+ if (yyTok == Tok_Ident && yyIdent.size() == 1) {
+ switch (yyIdent.at(0)) {
+ case 'r':
+ yyTok = getToken(StringType::RawString);
+ return yyTok == Tok_String;
+ case 'f':
+ yyTok = getToken(StringType::FormatString);
+ return yyTok == Tok_String;
+ }
+ }
+ return false;
+}
+
+static bool matchString(QByteArray *s)
+{
+ s->clear();
+ bool ok = false;
+ while (matchStringStart()) {
+ *s += yyString;
+ yyTok = getToken();
+ ok = true;
+ }
+ return ok;
+}
+
+static bool matchEncoding(bool *utf8)
+{
+ // Remove any leading module paths.
+ if (yyTok == Tok_Ident && std::strcmp(yyIdent, "PySide6") == 0) {
+ yyTok = getToken();
+
+ if (yyTok != Tok_Dot)
+ return false;
+
+ yyTok = getToken();
+ }
+
+ if (yyTok == Tok_Ident && (std::strcmp(yyIdent, "QtGui") == 0
+ || std::strcmp(yyIdent, "QtCore") == 0)) {
+ yyTok = getToken();
+
+ if (yyTok != Tok_Dot)
+ return false;
+
+ yyTok = getToken();
+ }
+
+ if (yyTok == Tok_Ident) {
+ if (std::strcmp(yyIdent, "QApplication") == 0
+ || std::strcmp(yyIdent, "QGuiApplication") == 0
+ || std::strcmp(yyIdent, "QCoreApplication") == 0) {
+ yyTok = getToken();
+
+ if (yyTok == Tok_Dot)
+ yyTok = getToken();
+ }
+
+ *utf8 = QByteArray(yyIdent).endsWith("UTF8");
+ yyTok = getToken();
+ return true;
+ }
+ return false;
+}
+
+static bool matchStringOrNone(QByteArray *s)
+{
+ bool matches = matchString(s);
+
+ if (!matches)
+ matches = match(Tok_None);
+
+ return matches;
+}
+
+/*
+ * match any expression that can return a number, which can be
+ * 1. Literal number (e.g. '11')
+ * 2. simple identifier (e.g. 'm_count')
+ * 3. simple function call (e.g. 'size()')
+ * 4. function call on an object (e.g. 'list.size()')
+ *
+ * Other cases:
+ * size(2,4)
+ * list().size()
+ * list(a,b).size(2,4)
+ * etc...
+ */
+static bool matchExpression()
+{
+ if (match(Tok_Integer))
+ return true;
+
+ int parenlevel = 0;
+ while (match(Tok_Ident) || parenlevel > 0) {
+ if (yyTok == Tok_RightParen) {
+ if (parenlevel == 0)
+ break;
+ --parenlevel;
+ yyTok = getToken();
+ } else if (yyTok == Tok_LeftParen) {
+ yyTok = getToken();
+ if (yyTok == Tok_RightParen) {
+ yyTok = getToken();
+ } else {
+ ++parenlevel;
+ }
+ } else if (yyTok == Tok_Ident) {
+ continue;
+ } else if (parenlevel == 0) {
+ return false;
+ }
+ }
+ return true;
+}
+
+static bool parseTranslate(QByteArray *text, QByteArray *context, QByteArray *comment,
+ bool *utf8, bool *plural)
+{
+ text->clear();
+ context->clear();
+ comment->clear();
+ *utf8 = false;
+ *plural = false;
+
+ yyTok = getToken();
+ if (!match(Tok_LeftParen) || !matchString(context) || !match(Tok_Comma)
+ || !matchString(text)) {
+ return false;
+ }
+
+ if (match(Tok_RightParen))
+ return true;
+
+ // not a comma or a right paren, illegal syntax
+ if (!match(Tok_Comma))
+ return false;
+
+ // python accepts trailing commas within parenthesis, so allow a comma with nothing after
+ if (match(Tok_RightParen))
+ return true;
+
+ // check for comment
+ if (!matchStringOrNone(comment))
+ return false; // not a comment, or a trailing comma... something is wrong
+
+ if (match(Tok_RightParen))
+ return true;
+
+ // not a comma or a right paren, illegal syntax
+ if (!match(Tok_Comma))
+ return false;
+
+ // python accepts trailing commas within parenthesis, so allow a comma with nothing after
+ if (match(Tok_RightParen))
+ return true;
+
+ // look for optional encoding information
+ if (matchEncoding(utf8)) {
+ if (match(Tok_RightParen))
+ return true;
+
+ // not a comma or a right paren, illegal syntax
+ if (!match(Tok_Comma))
+ return false;
+
+ // python accepts trailing commas within parenthesis, so allow a comma with nothing after
+ if (match(Tok_RightParen))
+ return true;
+ }
+
+ // Must be a plural expression
+ if (!matchExpression())
+ return false;
+
+ *plural = true;
+
+ // Ignore any trailing comma here
+ match(Tok_Comma);
+
+ // This must be the end, or there are too many parameters
+ if (match(Tok_RightParen))
+ return true;
+
+ return false;
+}
+
+static inline void setMessageParameters(TranslatorMessage *message)
+{
+ if (!extraComment.isEmpty()) {
+ message->setExtraComment(QString::fromUtf8(extraComment));
+ extraComment.clear();
+ }
+ if (!id.isEmpty()) {
+ message->setId(QString::fromUtf8(id));
+ id.clear();
+ }
+}
+
+static void parse(Translator &tor, ConversionData &cd,
+ const QByteArray &initialContext = {},
+ const QByteArray &defaultContext = {})
+{
+ QByteArray context;
+ QByteArray text;
+ QByteArray comment;
+ QByteArray prefix;
+ bool utf8 = false;
+
+ yyTok = getToken();
+ while (yyTok != Tok_Eof) {
+
+ switch (yyTok) {
+ case Tok_class: {
+ if (yyIndentationSize < 0 && yyContinuousSpaceCount > 0)
+ yyIndentationSize = yyContinuousSpaceCount; // First indented "class"
+ const int indent = yyIndentationSize > 0
+ ? yyContinuousSpaceCount / yyIndentationSize : 0;
+ while (!yyContextStack.isEmpty() && yyContextStack.top().second >= indent)
+ yyContextStack.pop();
+ yyTok = getToken();
+ yyContextStack.push({yyIdent, indent});
+ yyTok = getToken();
+ }
+ break;
+ case Tok_def:
+ if (yyIndentationSize < 0 && yyContinuousSpaceCount > 0)
+ yyIndentationSize = yyContinuousSpaceCount; // First indented "def"
+ if (!yyContextStack.isEmpty()) {
+ // Pop classes if the function is further outdented than the class on the top
+ // (end of a nested class).
+ const int classIndent = yyIndentationSize > 0
+ ? yyContinuousSpaceCount / yyIndentationSize - 1 : 0;
+ while (!yyContextStack.isEmpty() && yyContextStack.top().second > classIndent)
+ yyContextStack.pop();
+ }
+ yyTok = getToken();
+ break;
+ case Tok_tr:
+ case Tok_trUtf8:
+ utf8 = true;
+ yyTok = getToken();
+ if (match(Tok_LeftParen) && matchString(&text)) {
+ comment.clear();
+ bool plural = false;
+
+ if (match(Tok_RightParen)) {
+ // There is no comment or plural arguments.
+ } else if (match(Tok_Comma) && matchStringOrNone(&comment)) {
+ // There is a comment argument.
+ if (match(Tok_RightParen)) {
+ // There is no plural argument.
+ } else if (match(Tok_Comma)) {
+ // There is a plural argument.
+ plural = true;
+ }
+ }
+
+ if (prefix.isEmpty())
+ context = defaultContext;
+ else if (prefix == "self")
+ context = yyContextStack.isEmpty()
+ ? initialContext : yyContextStack.top().first;
+ else
+ context = prefix;
+
+ prefix.clear();
+
+ if (!text.isEmpty()) {
+ TranslatorMessage message(QString::fromUtf8(context),
+ QString::fromUtf8(text),
+ QString::fromUtf8(comment),
+ {}, yyFileName, yyLineNo,
+ {}, TranslatorMessage::Unfinished, plural);
+ setMessageParameters(&message);
+ tor.extend(message, cd);
+ }
+ }
+ break;
+ case Tok_translate: {
+ bool plural{};
+ if (parseTranslate(&text, &context, &comment, &utf8, &plural)
+ && !text.isEmpty()) {
+ TranslatorMessage message(QString::fromUtf8(context),
+ QString::fromUtf8(text),
+ QString::fromUtf8(comment),
+ {}, yyFileName, yyLineNo,
+ {}, TranslatorMessage::Unfinished, plural);
+ setMessageParameters(&message);
+ tor.extend(message, cd);
+ }
+ }
+ break;
+ case Tok_Ident:
+ if (!prefix.isEmpty())
+ prefix += '.';
+ prefix += yyIdent;
+ yyTok = getToken();
+ if (yyTok != Tok_Dot)
+ prefix.clear();
+ break;
+ case Tok_Comment:
+ comment = yyComment;
+ comment = comment.simplified();
+ if (comment.left(sizeof(PythonMagicComment) - 1) == PythonMagicComment) {
+ comment.remove(0, sizeof(PythonMagicComment) - 1);
+ int k = comment.indexOf(' ');
+ if (k == -1) {
+ context = comment;
+ } else {
+ context = comment.left(k);
+ comment.remove( 0, k + 1);
+ TranslatorMessage message(QString::fromUtf8(context),
+ {}, QString::fromUtf8(comment), {},
+ yyFileName, yyLineNo, {});
+ tor.extend(message, cd);
+ }
+ }
+ yyTok = getToken();
+ break;
+ default:
+ yyTok = getToken();
+ }
+ }
+
+ if (yyParenDepth != 0) {
+ qWarning("%s: Unbalanced parentheses in Python code",
+ qPrintable(yyFileName));
+ }
+}
+
+bool loadPython(Translator &translator, const QString &fileName, ConversionData &cd)
+{
+ // Match the function aliases to our tokens
+ static bool firstTime = true;
+ if (firstTime) {
+ firstTime = false;
+ const auto &nameMap = trFunctionAliasManager.nameToTrFunctionMap();
+ for (auto it = nameMap.cbegin(), end = nameMap.cend(); it != end; ++it) {
+ switch (it.value()) {
+ case TrFunctionAliasManager::Function_tr:
+ case TrFunctionAliasManager::Function_QT_TR_NOOP:
+ tokens.insert(it.key().toUtf8(), Tok_tr);
+ break;
+ case TrFunctionAliasManager::Function_trUtf8:
+ tokens.insert(it.key().toUtf8(), Tok_trUtf8);
+ break;
+ case TrFunctionAliasManager::Function_translate:
+ case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP:
+ // QTranslator::findMessage() has the same parameters as QApplication::translate().
+ case TrFunctionAliasManager::Function_findMessage:
+ tokens.insert(it.key().toUtf8(), Tok_translate);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+#ifdef Q_CC_MSVC
+ const auto *fileNameC = reinterpret_cast<const wchar_t *>(fileName.utf16());
+ const bool ok = _wfopen_s(&yyInFile, fileNameC, L"r") == 0;
+#else
+ const QByteArray fileNameC = QFile::encodeName(fileName);
+ yyInFile = std::fopen( fileNameC.constData(), "r");
+ const bool ok = yyInFile != nullptr;
+#endif
+ if (!ok) {
+ cd.appendError(QStringLiteral("Cannot open %1").arg(fileName));
+ return false;
+ }
+
+ startTokenizer(fileName, getCharFromFile, peekCharFromFile);
+ parse(translator, cd);
+ std::fclose(yyInFile);
+ return true;
+}
+
+QT_END_NAMESPACE
diff --git a/src/linguist/lupdate/qdeclarative.cpp b/src/linguist/lupdate/qdeclarative.cpp
index 753c239ad..e62cfec15 100644
--- a/src/linguist/lupdate/qdeclarative.cpp
+++ b/src/linguist/lupdate/qdeclarative.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "lupdate.h"
@@ -33,13 +8,13 @@
#include <QtCore/QDebug>
#include <QtCore/QFile>
#include <QtCore/QString>
+#include <QtCore/QTextStream>
#include <private/qqmljsengine_p.h>
#include <private/qqmljsparser_p.h>
#include <private/qqmljslexer_p.h>
#include <private/qqmljsastvisitor_p.h>
#include <private/qqmljsast_p.h>
-#include <private/qqmlapiversion_p.h>
#include <QCoreApplication>
#include <QFile>
@@ -53,15 +28,9 @@
QT_BEGIN_NAMESPACE
-#if Q_QML_PRIVATE_API_VERSION < 8
-namespace QQmlJS {
- using SourceLocation = AST::SourceLocation;
-}
-#endif
-
using namespace QQmlJS;
-static QString MagicComment(QLatin1String("TRANSLATOR"));
+using namespace Qt::StringLiterals;
class FindTrCalls: protected AST::Visitor
{
@@ -89,7 +58,17 @@ protected:
using AST::Visitor::endVisit;
void accept(AST::Node *node)
- { AST::Node::acceptChild(node, this); }
+ { AST::Node::accept(node, this); }
+
+ bool visit(AST::UiPragma *node) override
+ {
+ if (!node->name.isNull()) {
+ if (node->name == "Translator"_L1) {
+ m_component = node->values->value.toString();
+ }
+ }
+ return false;
+ }
void endVisit(AST::CallExpression *node) override
{
@@ -112,11 +91,9 @@ protected:
case TrFunctionAliasManager::Function_qsTr:
case TrFunctionAliasManager::Function_QT_TR_NOOP: {
if (!node->arguments) {
- yyMsg(identLineNo) << qPrintable(LU::tr("%1() requires at least one argument.\n").arg(name));
- return;
- }
- if (AST::cast<AST::TemplateLiteral *>(node->arguments->expression)) {
- yyMsg(identLineNo) << qPrintable(LU::tr("%1() cannot be used with template literals. Ignoring\n").arg(name));
+ yyMsg(identLineNo)
+ << qPrintable(QStringLiteral("%1() requires at least one argument.\n")
+ .arg(name));
return;
}
@@ -135,7 +112,7 @@ protected:
}
if (!sourcetext.isEmpty())
- yyMsg(identLineNo) << qPrintable(LU::tr("//% cannot be used with %1(). Ignoring\n").arg(name));
+ yyMsg(identLineNo) << qPrintable(QStringLiteral("//% cannot be used with %1(). Ignoring\n").arg(name));
TranslatorMessage msg(m_component, ParserTool::transcode(source),
comment, QString(), m_fileName,
@@ -150,7 +127,7 @@ protected:
case TrFunctionAliasManager::Function_qsTranslate:
case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP: {
if (! (node->arguments && node->arguments->next)) {
- yyMsg(identLineNo) << qPrintable(LU::tr("%1() requires at least two arguments.\n").arg(name));
+ yyMsg(identLineNo) << qPrintable(QStringLiteral("%1() requires at least two arguments.\n").arg(name));
return;
}
@@ -165,7 +142,7 @@ protected:
return;
if (!sourcetext.isEmpty())
- yyMsg(identLineNo) << qPrintable(LU::tr("//% cannot be used with %1(). Ignoring\n").arg(name));
+ yyMsg(identLineNo) << qPrintable(QStringLiteral("//% cannot be used with %1(). Ignoring\n").arg(name));
QString comment;
bool plural = false;
@@ -191,7 +168,7 @@ protected:
case TrFunctionAliasManager::Function_qsTrId:
case TrFunctionAliasManager::Function_QT_TRID_NOOP: {
if (!node->arguments) {
- yyMsg(identLineNo) << qPrintable(LU::tr("%1() requires at least one argument.\n").arg(name));
+ yyMsg(identLineNo) << qPrintable(QStringLiteral("%1() requires at least one argument.\n").arg(name));
return;
}
@@ -200,7 +177,7 @@ protected:
return;
if (!msgid.isEmpty()) {
- yyMsg(identLineNo) << qPrintable(LU::tr("//= cannot be used with %1(). Ignoring\n").arg(name));
+ yyMsg(identLineNo) << qPrintable(QStringLiteral("//= cannot be used with %1(). Ignoring\n").arg(name));
return;
}
@@ -231,7 +208,7 @@ private:
void throwRecursionDepthError() final
{
std::cerr << qPrintable(m_fileName) << ": "
- << qPrintable(LU::tr("Maximum statement or expression depth exceeded"));
+ << "Maximum statement or expression depth exceeded";
}
@@ -249,6 +226,9 @@ private:
if (createString(binop->right, out))
return true;
}
+ } else if (AST::TemplateLiteral *templit = AST::cast<AST::TemplateLiteral *>(ast)) {
+ out->append(templit->value);
+ return true;
}
return false;
@@ -282,20 +262,15 @@ QString createErrorString(const QString &filename, const QString &code, Parser &
if (m.isWarning())
continue;
-#if Q_QML_PRIVATE_API_VERSION >= 8
const int line = m.loc.startLine;
const int column = m.loc.startColumn;
-#else
- const int line = m.line;
- const int column = m.column;
-#endif
QString error = filename + QLatin1Char(':')
+ QString::number(line) + QLatin1Char(':') + QString::number(column)
+ QLatin1String(": error: ") + m.message + QLatin1Char('\n');
const QString textLine = lines.at(line > 0 ? line - 1 : 0);
error += textLine + QLatin1Char('\n');
- for (int i = 0, end = qMin(column > 0 ? column - 1 : 0, textLine.length()); i < end; ++i) {
+ for (int i = 0, end = qMin(column > 0 ? column - 1 : 0, textLine.size()); i < end; ++i) {
const QChar ch = textLine.at(i);
if (ch.isSpace())
error += ch;
@@ -314,7 +289,7 @@ void FindTrCalls::postVisit(AST::Node *node)
processComments(node->lastSourceLocation().end());
if (!sourcetext.isEmpty() || !extracomment.isEmpty() || !msgid.isEmpty() || !extra.isEmpty()) {
- yyMsg(node->lastSourceLocation().startLine) << qPrintable(LU::tr("Discarding unconsumed meta data\n"));
+ yyMsg(node->lastSourceLocation().startLine) << "Discarding unconsumed meta data\n";
consumeComment();
}
}
@@ -347,7 +322,7 @@ void FindTrCalls::processComment(const SourceLocation &loc)
const QStringView commentStr = engine->midRef(loc.begin(), loc.length);
const QChar *chars = commentStr.constData();
- const int length = commentStr.length();
+ const int length = commentStr.size();
// Try to match the logic of the C++ parser.
if (*chars == QLatin1Char(':') && chars[1].isSpace()) {
@@ -359,11 +334,17 @@ void FindTrCalls::processComment(const SourceLocation &loc)
} else if (*chars == QLatin1Char('~') && chars[1].isSpace()) {
QString text = QString(chars+2, length-2).trimmed();
int k = text.indexOf(QLatin1Char(' '));
- if (k > -1)
- extra.insert(text.left(k), text.mid(k + 1).trimmed());
+ if (k > -1) {
+ QString commentvalue = text.mid(k + 1).trimmed();
+ if (commentvalue.startsWith(QLatin1Char('"')) && commentvalue.endsWith(QLatin1Char('"'))
+ && commentvalue.size() != 1) {
+ commentvalue = commentvalue.sliced(1, commentvalue.size() - 2);
+ }
+ extra.insert(text.left(k), commentvalue);
+ }
} else if (*chars == QLatin1Char('%') && chars[1].isSpace()) {
- sourcetext.reserve(sourcetext.length() + length-2);
- ushort *ptr = (ushort *)sourcetext.data() + sourcetext.length();
+ sourcetext.reserve(sourcetext.size() + length-2);
+ ushort *ptr = (ushort *)sourcetext.data() + sourcetext.size();
int p = 2, c;
forever {
if (p >= length)
@@ -372,13 +353,13 @@ void FindTrCalls::processComment(const SourceLocation &loc)
if (std::isspace(c))
continue;
if (c != '"') {
- yyMsg(loc.startLine) << qPrintable(LU::tr("Unexpected character in meta string\n"));
+ yyMsg(loc.startLine) << "Unexpected character in meta string\n";
break;
}
forever {
if (p >= length) {
whoops:
- yyMsg(loc.startLine) << qPrintable(LU::tr("Unterminated meta string\n"));
+ yyMsg(loc.startLine) << "Unterminated meta string\n";
break;
}
c = chars[p++].unicode();
@@ -401,29 +382,6 @@ void FindTrCalls::processComment(const SourceLocation &loc)
ushort c;
while ((c = chars[idx].unicode()) == ' ' || c == '\t' || c == '\r' || c == '\n')
++idx;
- if (!memcmp(chars + idx, MagicComment.unicode(), MagicComment.length() * 2)) {
- idx += MagicComment.length();
- QString comment = QString(chars + idx, length - idx).simplified();
- int k = comment.indexOf(QLatin1Char(' '));
- if (k == -1) {
- trcontext = comment;
- } else {
- trcontext = comment.left(k);
- comment.remove(0, k + 1);
- TranslatorMessage msg(
- trcontext, QString(),
- comment, QString(),
- m_fileName, loc.startLine, QStringList(),
- TranslatorMessage::Finished, /*plural=*/false);
- msg.setExtraComment(extracomment.simplified());
- extracomment.clear();
- m_translator->append(msg);
- m_translator->setExtras(extra);
- extra.clear();
- }
-
- m_component = trcontext;
- }
}
}
@@ -461,7 +419,7 @@ static bool load(Translator &translator, const QString &filename, ConversionData
cd.m_sourceFileName = filename;
QFile file(filename);
if (!file.open(QIODevice::ReadOnly)) {
- cd.appendError(LU::tr("Cannot open %1: %2").arg(filename, file.errorString()));
+ cd.appendError(QStringLiteral("Cannot open %1: %2").arg(filename, file.errorString()));
return false;
}
diff --git a/src/linguist/lupdate/synchronized.h b/src/linguist/lupdate/synchronized.h
index 5bf621a30..65bef5463 100644
--- a/src/linguist/lupdate/synchronized.h
+++ b/src/linguist/lupdate/synchronized.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef SYNCHRONIZED_H
#define SYNCHRONIZED_H
@@ -45,10 +20,10 @@ public:
: m_vector(vector)
{}
- void emplace_back(T && value)
+ void emplace_back(T &&value)
{
QMutexLocker lock(&m_mutex);
- m_vector.emplace_back(value);
+ m_vector.push_back(std::move(value));
}
void emplace_back(const T &value)
@@ -78,34 +53,27 @@ template<typename T> class ReadSynchronizedRef
Q_DISABLE_COPY_MOVE(ReadSynchronizedRef)
public:
- ReadSynchronizedRef(const std::vector<T> &vector) Q_DECL_NOEXCEPT
- : m_vector(const_cast<std::vector<T> &>(vector))
+ ReadSynchronizedRef(const std::vector<T> &v) noexcept
+ : m_vector(v)
{}
- int size() const
+ size_t size() const
{
- return int(m_vector.size());
- }
-
- /* Unsafe, do not use inside threads. */
- void reset(const std::vector<T> &vector)
- {
- m_next = -1;
- m_vector = const_cast<std::vector<T> &>(vector);
+ return m_vector.size();
}
bool next(T *value) const
{
- m_next.fetch_add(1, std::memory_order_acquire);
- const bool hasNext = m_next < m_vector.size();
+ const auto idx = m_next.fetch_add(1, std::memory_order_acquire);
+ const bool hasNext = idx < m_vector.size();
if (hasNext)
- *value = m_vector[m_next];
+ *value = m_vector[idx];
return hasNext;
}
private:
- std::vector<T> &m_vector;
- mutable std::atomic<int> m_next { -1 };
+ const std::vector<T> &m_vector;
+ mutable std::atomic<size_t> m_next = 0;
};
QT_END_NAMESPACE
diff --git a/src/linguist/lupdate/ui.cpp b/src/linguist/lupdate/ui.cpp
index 5f84a92fc..1092035ae 100644
--- a/src/linguist/lupdate/ui.cpp
+++ b/src/linguist/lupdate/ui.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "lupdate.h"
@@ -39,6 +14,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
class UiReader : public XmlParser
{
public:
@@ -135,7 +112,7 @@ bool UiReader::characters(QStringView ch)
bool UiReader::fatalError(qint64 line, qint64 column, const QString &message)
{
- QString msg = LU::tr("XML error: Parse error at line %1, column %2 (%3).")
+ QString msg = QStringLiteral("XML error: Parse error at line %1, column %2 (%3).")
.arg(line)
.arg(column)
.arg(message);
@@ -182,7 +159,7 @@ bool loadUI(Translator &translator, const QString &filename, ConversionData &cd)
cd.m_sourceFileName = filename;
QFile file(filename);
if (!file.open(QIODevice::ReadOnly)) {
- cd.appendError(LU::tr("Cannot open %1: %2").arg(filename, file.errorString()));
+ cd.appendError(QStringLiteral("Cannot open %1: %2").arg(filename, file.errorString()));
return false;
}
@@ -192,7 +169,7 @@ bool loadUI(Translator &translator, const QString &filename, ConversionData &cd)
UiReader uiReader(translator, cd, reader);
bool result = uiReader.parse();
if (!result)
- cd.appendError(LU::tr("Parse error in UI file"));
+ cd.appendError(u"Parse error in UI file"_s);
return result;
}
diff --git a/src/linguist/shared/fmt.h b/src/linguist/shared/fmt.h
new file mode 100644
index 000000000..b40cdd308
--- /dev/null
+++ b/src/linguist/shared/fmt.h
@@ -0,0 +1,17 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef FMT_H
+#define FMT_H
+
+#include <QtCore/qcoreapplication.h>
+
+QT_BEGIN_NAMESPACE
+
+class FMT {
+ Q_DECLARE_TR_FUNCTIONS(Linguist)
+};
+
+QT_END_NAMESPACE
+
+#endif // FMT_H
diff --git a/src/linguist/shared/formats.pri b/src/linguist/shared/formats.pri
deleted file mode 100644
index 876fe50cc..000000000
--- a/src/linguist/shared/formats.pri
+++ /dev/null
@@ -1,20 +0,0 @@
-INCLUDEPATH *= $$PWD
-
-SOURCES += \
- $$PWD/numerus.cpp \
- $$PWD/translator.cpp \
- $$PWD/translatormessage.cpp \
- $$PWD/xmlparser.cpp
-
-HEADERS += \
- $$PWD/translator.h \
- $$PWD/translatormessage.h \
- $$PWD/xmlparser.h
-
-# "real" formats readers and writers
-SOURCES += \
- $$PWD/qm.cpp \
- $$PWD/qph.cpp \
- $$PWD/po.cpp \
- $$PWD/ts.cpp \
- $$PWD/xliff.cpp
diff --git a/src/linguist/shared/ioutils.cpp b/src/linguist/shared/ioutils.cpp
index d94348440..71bf0020c 100644
--- a/src/linguist/shared/ioutils.cpp
+++ b/src/linguist/shared/ioutils.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "ioutils.h"
@@ -33,7 +8,7 @@
#include <qregularexpression.h>
#ifdef Q_OS_WIN
-# include <windows.h>
+# include <qt_windows.h>
#else
# include <sys/types.h>
# include <sys/stat.h>
@@ -49,6 +24,40 @@ QT_BEGIN_NAMESPACE
using namespace QMakeInternal;
+QString IoUtils::binaryAbsLocation(const QString &argv0)
+{
+ QString ret;
+ if (!argv0.isEmpty() && isAbsolutePath(argv0)) {
+ ret = argv0;
+ } else if (argv0.contains(QLatin1Char('/'))
+#ifdef Q_OS_WIN
+ || argv0.contains(QLatin1Char('\\'))
+#endif
+ ) { // relative PWD
+ ret = QDir::current().absoluteFilePath(argv0);
+ } else { // in the PATH
+ QByteArray pEnv = qgetenv("PATH");
+ QDir currentDir = QDir::current();
+#ifdef Q_OS_WIN
+ QStringList paths = QString::fromLocal8Bit(pEnv).split(QLatin1String(";"));
+ paths.prepend(QLatin1String("."));
+#else
+ QStringList paths = QString::fromLocal8Bit(pEnv).split(QLatin1String(":"));
+#endif
+ for (QStringList::const_iterator p = paths.constBegin(); p != paths.constEnd(); ++p) {
+ if ((*p).isEmpty())
+ continue;
+ QString candidate = currentDir.absoluteFilePath(*p + QLatin1Char('/') + argv0);
+ if (QFile::exists(candidate)) {
+ ret = candidate;
+ break;
+ }
+ }
+ }
+
+ return QDir::cleanPath(ret);
+}
+
IoUtils::FileType IoUtils::fileType(const QString &fileName)
{
Q_ASSERT(fileName.isEmpty() || isAbsolutePath(fileName));
@@ -78,7 +87,12 @@ bool IoUtils::isRelativePath(const QString &path)
&& (path.at(2) == QLatin1Char('/') || path.at(2) == QLatin1Char('\\'))) {
return false;
}
- // (... unless, of course, they're UNC, which qmake fails on anyway)
+ // ... unless, of course, they're UNC:
+ if (path.length() >= 2
+ && (path.at(0).unicode() == '\\' || path.at(0).unicode() == '/')
+ && path.at(1) == path.at(0)) {
+ return false;
+ }
#else
if (path.startsWith(QLatin1Char('/')))
return false;
@@ -86,14 +100,14 @@ bool IoUtils::isRelativePath(const QString &path)
return true;
}
-QStringView IoUtils::pathName(QStringView fileName)
+QStringView IoUtils::pathName(const QString &fileName)
{
- return fileName.left(fileName.lastIndexOf(QLatin1Char('/')) + 1);
+ return QStringView{fileName}.left(fileName.lastIndexOf(QLatin1Char('/')) + 1);
}
-QStringView IoUtils::fileName(QStringView fileName)
+QStringView IoUtils::fileName(const QString &fileName)
{
- return fileName.mid(fileName.lastIndexOf(QLatin1Char('/')) + 1);
+ return QStringView(fileName).mid(fileName.lastIndexOf(QLatin1Char('/')) + 1);
}
QString IoUtils::resolvePath(const QString &baseDir, const QString &fileName)
@@ -122,7 +136,7 @@ bool isSpecialChar(ushort c, const uchar (&iqm)[16])
inline static
bool hasSpecialChars(const QString &arg, const uchar (&iqm)[16])
{
- for (int x = arg.length() - 1; x >= 0; --x) {
+ for (int x = arg.size() - 1; x >= 0; --x) {
if (isSpecialChar(arg.unicode()[x].unicode(), iqm))
return true;
}
@@ -137,7 +151,7 @@ QString IoUtils::shellQuoteUnix(const QString &arg)
0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x78
}; // 0-32 \'"$`<>|;&(){}*?#!~[]
- if (!arg.length())
+ if (!arg.size())
return QString::fromLatin1("''");
QString ret(arg);
@@ -165,7 +179,7 @@ QString IoUtils::shellQuoteWin(const QString &arg)
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10
}; // &()<>^|
- if (!arg.length())
+ if (!arg.size())
return QString::fromLatin1("\"\"");
QString ret(arg);
@@ -181,7 +195,7 @@ QString IoUtils::shellQuoteWin(const QString &arg)
// to the called process verbatim. In the unquoted state, the circumflex escapes
// meta chars (including itself and quotes), and is removed from the command.
bool quoted = true;
- for (int i = 0; i < ret.length(); i++) {
+ for (int i = 0; i < ret.size(); i++) {
QChar c = ret.unicode()[i];
if (c.unicode() == '"')
quoted = !quoted;
diff --git a/src/linguist/shared/ioutils.h b/src/linguist/shared/ioutils.h
index 8726a35c3..2f288e543 100644
--- a/src/linguist/shared/ioutils.h
+++ b/src/linguist/shared/ioutils.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef IOUTILS_H
#define IOUTILS_H
@@ -49,12 +24,13 @@ public:
FileIsDir = 2
};
+ static QString binaryAbsLocation(const QString &argv0);
static FileType fileType(const QString &fileName);
static bool exists(const QString &fileName) { return fileType(fileName) != FileNotFound; }
static bool isRelativePath(const QString &fileName);
static bool isAbsolutePath(const QString &fileName) { return !isRelativePath(fileName); }
- static QStringView pathName(QStringView fileName); // Requires normalized path
- static QStringView fileName(QStringView fileName); // Requires normalized path
+ static QStringView pathName(const QString &fileName); // Requires normalized path
+ static QStringView fileName(const QString &fileName); // Requires normalized path
static QString resolvePath(const QString &baseDir, const QString &fileName);
static QString shellQuoteUnix(const QString &arg);
static QString shellQuoteWin(const QString &arg);
diff --git a/src/linguist/shared/numerus.cpp b/src/linguist/shared/numerus.cpp
index 6a1ca8130..ef52bcdb6 100644
--- a/src/linguist/shared/numerus.cpp
+++ b/src/linguist/shared/numerus.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "translator.h"
@@ -162,7 +137,6 @@ static const QLocale::Language englishStyleLanguages[] = {
QLocale::Bashkir,
QLocale::Basque,
QLocale::Bengali,
- QLocale::Bihari,
QLocale::Bulgarian,
QLocale::Catalan,
QLocale::Cornish,
@@ -206,7 +180,7 @@ static const QLocale::Language englishStyleLanguages[] = {
// Missing: Nahuatl,
QLocale::Nepali,
QLocale::NorthernSotho,
- QLocale::NorwegianBokmal, // same as Norwegian
+ QLocale::NorwegianBokmal,
QLocale::NorwegianNynorsk,
QLocale::Occitan,
QLocale::Oriya,
@@ -232,7 +206,6 @@ static const QLocale::Language englishStyleLanguages[] = {
QLocale::Tsonga,
QLocale::Tswana,
QLocale::Turkmen,
- // QLocale::Twi, // mapped to Akan
QLocale::Uigur,
QLocale::Urdu,
QLocale::Uzbek,
@@ -278,13 +251,11 @@ static const QLocale::Language russianStyleLanguages[] = {
QLocale::Croatian,
QLocale::Russian,
QLocale::Serbian,
- // QLocale::SerboCroatian, // deprecated, mapped to Serbian
QLocale::Ukrainian,
EOL
};
static const QLocale::Language polishLanguage[] = { QLocale::Polish, EOL };
static const QLocale::Language romanianLanguages[] = {
- // QLocale::Moldavian, // deprecated, mapped to Romanian
QLocale::Romanian,
EOL
};
@@ -292,24 +263,24 @@ static const QLocale::Language slovenianLanguage[] = { QLocale::Slovenian, EOL }
static const QLocale::Language malteseLanguage[] = { QLocale::Maltese, EOL };
static const QLocale::Language welshLanguage[] = { QLocale::Welsh, EOL };
static const QLocale::Language arabicLanguage[] = { QLocale::Arabic, EOL };
-static const QLocale::Language tagalogLanguage[] = { QLocale::Tagalog, EOL };
+static const QLocale::Language tagalogLanguage[] = { QLocale::Filipino, EOL };
-static const QLocale::Country frenchStyleCountries[] = {
+static const QLocale::Territory frenchStyleCountries[] = {
// keep synchronized with frenchStyleLanguages
- QLocale::AnyCountry,
- QLocale::AnyCountry,
- QLocale::AnyCountry,
+ QLocale::AnyTerritory,
+ QLocale::AnyTerritory,
+ QLocale::AnyTerritory,
QLocale::Brazil,
- QLocale::AnyCountry,
- QLocale::AnyCountry,
- QLocale::AnyCountry
+ QLocale::AnyTerritory,
+ QLocale::AnyTerritory,
+ QLocale::AnyTerritory
};
struct NumerusTableEntry {
const uchar *rules;
int rulesSize;
const char * const *forms;
const QLocale::Language *languages;
- const QLocale::Country *countries;
+ const QLocale::Territory *countries;
const char * const gettextRules;
};
@@ -353,7 +324,7 @@ static const NumerusTableEntry numerusTable[] = {
static const int NumerusTableSize = sizeof(numerusTable) / sizeof(numerusTable[0]);
-bool getNumerusInfo(QLocale::Language language, QLocale::Country country,
+bool getNumerusInfo(QLocale::Language language, QLocale::Territory country,
QByteArray *rules, QStringList *forms, const char **gettextRules)
{
while (true) {
@@ -361,7 +332,7 @@ bool getNumerusInfo(QLocale::Language language, QLocale::Country country,
const NumerusTableEntry &entry = numerusTable[i];
for (int j = 0; entry.languages[j] != EOL; ++j) {
if (entry.languages[j] == language
- && ((!entry.countries && country == QLocale::AnyCountry)
+ && ((!entry.countries && country == QLocale::AnyTerritory)
|| (entry.countries && entry.countries[j] == country))) {
if (rules) {
*rules = QByteArray::fromRawData(reinterpret_cast<const char *>(entry.rules),
@@ -379,9 +350,9 @@ bool getNumerusInfo(QLocale::Language language, QLocale::Country country,
}
}
- if (country == QLocale::AnyCountry)
+ if (country == QLocale::AnyTerritory)
break;
- country = QLocale::AnyCountry;
+ country = QLocale::AnyTerritory;
}
return false;
}
@@ -393,14 +364,15 @@ QString getNumerusInfoString()
for (int i = 0; i < NumerusTableSize; ++i) {
const NumerusTableEntry &entry = numerusTable[i];
for (int j = 0; entry.languages[j] != EOL; ++j) {
- QLocale loc(entry.languages[j], entry.countries ? entry.countries[j] : QLocale::AnyCountry);
+ QLocale loc(entry.languages[j], entry.countries ? entry.countries[j]
+ : QLocale::AnyTerritory);
QString lang = QLocale::languageToString(entry.languages[j]);
if (loc.language() == QLocale::C)
lang += QLatin1String(" (!!!)");
- else if (entry.countries && entry.countries[j] != QLocale::AnyCountry)
- lang += QLatin1String(" (") + QLocale::countryToString(loc.country()) + QLatin1Char(')');
+ else if (entry.countries && entry.countries[j] != QLocale::AnyTerritory)
+ lang += QLatin1String(" (%1)").arg(QLocale::territoryToString(loc.territory()));
else
- lang += QLatin1String(" [") + QLocale::countryToString(loc.country()) + QLatin1Char(']');
+ lang += QLatin1String(" [%1]").arg(QLocale::territoryToString(loc.territory()));
langs << QString::fromLatin1("%1 %2 %3\n").arg(lang, -40).arg(loc.name(), -8)
.arg(QString::fromLatin1(entry.gettextRules));
}
diff --git a/src/linguist/shared/po.cpp b/src/linguist/shared/po.cpp
index d9aa24bbd..1da8b95d2 100644
--- a/src/linguist/shared/po.cpp
+++ b/src/linguist/shared/po.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "translator.h"
@@ -52,7 +27,7 @@ static QString poEscapedString(const QString &prefix, const QString &keyword,
QStringList lines;
int off = 0;
QString res;
- while (off < ba.length()) {
+ while (off < ba.size()) {
ushort c = ba[off++].unicode();
switch (c) {
case '\n':
@@ -88,7 +63,7 @@ static QString poEscapedString(const QString &prefix, const QString &keyword,
if (c < 32) {
res += QLatin1String("\\x");
res += QString::number(c, 16);
- if (off < ba.length() && isxdigit(ba[off].unicode()))
+ if (off < ba.size() && isxdigit(ba[off].unicode()))
res += QLatin1String("\"\"");
} else {
res += QChar(c);
@@ -100,15 +75,15 @@ static QString poEscapedString(const QString &prefix, const QString &keyword,
lines.append(res);
if (!lines.isEmpty()) {
if (!noWrap) {
- if (lines.count() != 1 ||
- lines.first().length() > MAX_LEN - keyword.length() - prefix.length() - 3)
+ if (lines.size() != 1 ||
+ lines.first().size() > MAX_LEN - keyword.size() - prefix.size() - 3)
{
const QStringList olines = lines;
lines = QStringList(QString());
- const int maxlen = MAX_LEN - prefix.length() - 2;
+ const int maxlen = MAX_LEN - prefix.size() - 2;
for (const QString &line : olines) {
int off = 0;
- while (off + maxlen < line.length()) {
+ while (off + maxlen < line.size()) {
int idx = line.lastIndexOf(QLatin1Char(' '), off + maxlen - 1) + 1;
if (idx == off) {
#ifdef HARD_WRAP_LONG_WORDS
@@ -126,7 +101,7 @@ static QString poEscapedString(const QString &prefix, const QString &keyword,
lines.append(line.mid(off));
}
}
- } else if (lines.count() > 1) {
+ } else if (lines.size() > 1) {
lines.prepend(QString());
}
}
@@ -158,10 +133,10 @@ static QString poEscapedLines(const QString &prefix, bool addSpace, const QStrin
static QString poWrappedEscapedLines(const QString &prefix, bool addSpace, const QString &line)
{
- const int maxlen = MAX_LEN - prefix.length() - addSpace;
+ const int maxlen = MAX_LEN - prefix.size() - addSpace;
QStringList lines;
int off = 0;
- while (off + maxlen < line.length()) {
+ while (off + maxlen < line.size()) {
int idx = line.lastIndexOf(QLatin1Char(' '), off + maxlen - 1);
if (idx < off) {
#if 0 //def HARD_WRAP_LONG_WORDS
@@ -227,11 +202,11 @@ static QByteArray slurpEscapedString(const QList<QByteArray> &lines, int &l,
break;
offset++;
forever {
- if (offset == line.length())
+ if (offset == line.size())
goto premature_eol;
uchar c = line[offset++];
if (c == '"') {
- if (offset == line.length())
+ if (offset == line.size())
break;
while (isspace(line[offset]))
offset++;
@@ -244,7 +219,7 @@ static QByteArray slurpEscapedString(const QList<QByteArray> &lines, int &l,
continue;
}
if (c == '\\') {
- if (offset == line.length())
+ if (offset == line.size())
goto premature_eol;
c = line[offset++];
switch (c) {
@@ -285,14 +260,14 @@ static QByteArray slurpEscapedString(const QList<QByteArray> &lines, int &l,
case '7':
stoff = offset - 1;
while ((c = line[offset]) >= '0' && c <= '7')
- if (++offset == line.length())
+ if (++offset == line.size())
goto premature_eol;
msg += line.mid(stoff, offset - stoff).toUInt(0, 8);
break;
case 'x':
stoff = offset;
while (isxdigit(line[offset]))
- if (++offset == line.length())
+ if (++offset == line.size())
goto premature_eol;
msg += line.mid(stoff, offset - stoff).toUInt(0, 16);
break;
@@ -435,7 +410,7 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd)
bool isObsolete = line.startsWith("#~ msgstr");
const QByteArray prefix = isObsolete ? "#~ " : "";
while (true) {
- int idx = line.indexOf(' ', prefix.length());
+ int idx = line.indexOf(' ', prefix.size());
QByteArray str = slurpEscapedString(lines, l, idx, prefix, cd);
item.msgStr.append(str);
if (l + 1 >= lines.size() || !isTranslationLine(lines.at(l + 1)))
@@ -476,7 +451,7 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd)
.arg(QString::fromLatin1(hdrValue)));
error = true;
// This will avoid a flood of conversion errors.
- toUnicode = QStringConverter::Latin1;
+ toUnicode = QStringDecoder(QStringConverter::Latin1);
} else {
QByteArray cod = hdrValue.mid(20);
auto enc = QStringConverter::encodingForName(cod);
@@ -485,9 +460,9 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd)
.arg(QString::fromLatin1(cod)));
error = true;
// This will avoid a flood of conversion errors.
- toUnicode = QStringConverter::Latin1;
+ toUnicode = QStringDecoder(QStringConverter::Latin1);
} else {
- toUnicode = *enc;
+ toUnicode = QStringDecoder(*enc);
}
}
} else if (hdrName == "Content-Transfer-Encoding") {
@@ -516,7 +491,7 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd)
"Plural-Forms", "X-Language", "X-Source-Language", "X-Qt-Contexts"
};
uint cdh = 0;
- for (int cho = 0; cho < hdrOrder.length(); cho++) {
+ for (int cho = 0; cho < hdrOrder.size(); cho++) {
for (;; cdh++) {
if (cdh == sizeof(dfltHdrs)/sizeof(dfltHdrs[0])) {
extras[QLatin1String("po-headers")] =
@@ -573,7 +548,7 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd)
msg.setTranslatorComment(toUnicode(item.translatorComments));
msg.setPlural(item.isPlural || item.msgStr.size() > 1);
QStringList translations;
- for (const QByteArray &bstr : qAsConst(item.msgStr)) {
+ for (const QByteArray &bstr : std::as_const(item.msgStr)) {
QString str = toUnicode(bstr);
str.replace(QChar(Translator::TextVariantSeparator),
QChar(Translator::BinaryVariantSeparator));
@@ -754,8 +729,8 @@ bool savePO(const Translator &translator, QIODevice &dev, ConversionData &)
addPoHeader(headers, hdrOrder, "Content-Transfer-Encoding", QLatin1String("8bit"));
if (!translator.languageCode().isEmpty()) {
QLocale::Language l;
- QLocale::Country c;
- Translator::languageAndCountry(translator.languageCode(), &l, &c);
+ QLocale::Territory c;
+ Translator::languageAndTerritory(translator.languageCode(), &l, &c);
const char *gettextRules;
if (getNumerusInfo(l, c, 0, 0, &gettextRules))
addPoHeader(headers, hdrOrder, "Plural-Forms", QLatin1String(gettextRules));
@@ -766,7 +741,7 @@ bool savePO(const Translator &translator, QIODevice &dev, ConversionData &)
if (qtContexts)
addPoHeader(headers, hdrOrder, "X-Qt-Contexts", QLatin1String("true"));
QString hdrStr;
- for (const QString &hdr : qAsConst(hdrOrder)) {
+ for (const QString &hdr : std::as_const(hdrOrder)) {
hdrStr += hdr;
hdrStr += QLatin1String(": ");
hdrStr += headers.value(makePoHeader(hdr));
@@ -820,7 +795,7 @@ bool savePO(const Translator &translator, QIODevice &dev, ConversionData &)
// This is fuzzy logic, as we don't know whether the string is
// actually used with QString::arg().
for (int off = 0; (off = source.indexOf(QLatin1Char('%'), off)) >= 0; ) {
- if (++off >= source.length())
+ if (++off >= source.size())
break;
if (source.at(off) == QLatin1Char('n') || source.at(off).isDigit()) {
flags.append(QLatin1String("qt-format"));
diff --git a/src/linguist/shared/profileevaluator.cpp b/src/linguist/shared/profileevaluator.cpp
index 77059fa94..a22a45672 100644
--- a/src/linguist/shared/profileevaluator.cpp
+++ b/src/linguist/shared/profileevaluator.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "profileevaluator.h"
@@ -152,7 +127,7 @@ QStringList ProFileEvaluator::absoluteFileValues(
// because no sane project would add generated files by wildcard.
if (IoUtils::fileType(absDir) == IoUtils::FileIsDir) {
QString wildcard = d->m_tmp2.setRawData(absEl.constData() + nameOff + 1,
- absEl.length() - nameOff - 1);
+ absEl.size() - nameOff - 1);
if (wildcard.contains(QLatin1Char('*')) || wildcard.contains(QLatin1Char('?'))) {
QDir theDir(absDir);
for (const QString &fn : theDir.entryList(QStringList(wildcard)))
@@ -169,7 +144,7 @@ QStringList ProFileEvaluator::absoluteFileValues(
ProFileEvaluator::TemplateType ProFileEvaluator::templateType() const
{
const ProStringList &templ = d->values(ProKey("TEMPLATE"));
- if (templ.count() >= 1) {
+ if (templ.size() >= 1) {
const QString &t = templ.at(0).toQString();
if (!t.compare(QLatin1String("app"), Qt::CaseInsensitive))
return TT_Application;
diff --git a/src/linguist/shared/profileevaluator.h b/src/linguist/shared/profileevaluator.h
index 1280d182d..1e8a50205 100644
--- a/src/linguist/shared/profileevaluator.h
+++ b/src/linguist/shared/profileevaluator.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PROFILEEVALUATOR_H
#define PROFILEEVALUATOR_H
diff --git a/src/linguist/shared/profileutils.h b/src/linguist/shared/profileutils.h
index a4ffb7389..de4555976 100644
--- a/src/linguist/shared/profileutils.h
+++ b/src/linguist/shared/profileutils.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PROFILEUTILS_H
#define PROFILEUTILS_H
diff --git a/src/linguist/shared/proitems.cpp b/src/linguist/shared/proitems.cpp
index 685078c10..2edd40a35 100644
--- a/src/linguist/shared/proitems.cpp
+++ b/src/linguist/shared/proitems.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "proitems.h"
@@ -32,13 +7,14 @@
#include <qset.h>
#include <qstringlist.h>
#include <qtextstream.h>
+#include <private/qduplicatetracker_p.h>
QT_BEGIN_NAMESPACE
// from qhash.cpp
-uint ProString::hash(const QChar *p, int n)
+size_t ProString::hash(const QChar *p, int n)
{
- uint h = 0;
+ size_t h = 0;
while (n--) {
h = (h << 4) + (*p++).unicode();
@@ -64,13 +40,13 @@ ProString::ProString(const ProString &other, OmitPreHashing) :
}
ProString::ProString(const QString &str, DoPreHashing) :
- m_string(str), m_offset(0), m_length(str.length()), m_file(0)
+ m_string(str), m_offset(0), m_length(str.size()), m_file(0)
{
updatedHash();
}
ProString::ProString(const QString &str) :
- m_string(str), m_offset(0), m_length(str.length()), m_file(0), m_hash(0x80000000)
+ m_string(str), m_offset(0), m_length(str.size()), m_file(0), m_hash(0x80000000)
{
}
@@ -80,13 +56,13 @@ ProString::ProString(QStringView str) :
}
ProString::ProString(const char *str, DoPreHashing) :
- m_string(QString::fromLatin1(str)), m_offset(0), m_length(qstrlen(str)), m_file(0)
+ m_string(QString::fromLatin1(str)), m_offset(0), m_length(int(qstrlen(str))), m_file(0)
{
updatedHash();
}
ProString::ProString(const char *str) :
- m_string(QString::fromLatin1(str)), m_offset(0), m_length(qstrlen(str)), m_file(0), m_hash(0x80000000)
+ m_string(QString::fromLatin1(str)), m_offset(0), m_length(int(qstrlen(str))), m_file(0), m_hash(0x80000000)
{
}
@@ -108,10 +84,10 @@ ProString::ProString(const QString &str, int offset, int length) :
void ProString::setValue(const QString &str)
{
- m_string = str, m_offset = 0, m_length = str.length(), m_hash = 0x80000000;
+ m_string = str, m_offset = 0, m_length = str.size(), m_hash = 0x80000000;
}
-uint ProString::updatedHash() const
+size_t ProString::updatedHash() const
{
return (m_hash = hash(m_string.constData() + m_offset, m_length));
}
@@ -145,7 +121,7 @@ ProKey::ProKey(const QString &str, int off, int len, uint hash) :
void ProKey::setValue(const QString &str)
{
- m_string = str, m_offset = 0, m_length = str.length();
+ m_string = str, m_offset = 0, m_length = str.size();
updatedHash();
}
@@ -160,51 +136,18 @@ QString &ProString::toQString(QString &tmp) const
return tmp;
}
-/*!
- * \brief ProString::prepareExtend
- * \param extraLen number of new characters to be added
- * \param thisTarget offset to which current contents should be moved
- * \param extraTarget offset at which new characters will be added
- * \return pointer to storage location for new characters
- *
- * Prepares the string for adding new characters.
- * If the string is detached and has enough space, it will be changed in place.
- * Otherwise, it will be replaced with a new string object, thus detaching.
- * In either case, the hash will be reset.
- */
-QChar *ProString::prepareExtend(int extraLen, int thisTarget, int extraTarget)
-{
- if (m_string.isDetached() && m_length + extraLen <= m_string.capacity()) {
- m_string.reserve(0); // Prevent the resize() below from reallocating
- QChar *ptr = (QChar *)m_string.constData();
- if (m_offset != thisTarget)
- memmove(ptr + thisTarget, ptr + m_offset, m_length * 2);
- ptr += extraTarget;
- m_offset = 0;
- m_length += extraLen;
- m_string.resize(m_length);
- m_hash = 0x80000000;
- return ptr;
- } else {
- QString neu(m_length + extraLen, Qt::Uninitialized);
- QChar *ptr = (QChar *)neu.constData();
- memcpy(ptr + thisTarget, m_string.constData() + m_offset, m_length * 2);
- ptr += extraTarget;
- *this = ProString(neu);
- return ptr;
- }
-}
-
ProString &ProString::prepend(const ProString &other)
{
if (other.m_length) {
if (!m_length) {
*this = other;
} else {
- QChar *ptr = prepareExtend(other.m_length, other.m_length, 0);
- memcpy(ptr, other.constData(), other.m_length * 2);
+ m_string = other.toQStringView() + toQStringView();
+ m_offset = 0;
+ m_length = m_string.size();
if (!m_file)
m_file = other.m_file;
+ m_hash = 0x80000000;
}
}
return *this;
@@ -212,20 +155,33 @@ ProString &ProString::prepend(const ProString &other)
ProString &ProString::append(const QLatin1String other)
{
- const char *latin1 = other.latin1();
- int size = other.size();
- if (size) {
- QChar *ptr = prepareExtend(size, 0, m_length);
- for (int i = 0; i < size; i++)
- *ptr++ = QLatin1Char(latin1[i]);
+ if (other.size()) {
+ if (m_length != m_string.size()) {
+ m_string = toQStringView() + other;
+ m_offset = 0;
+ m_length = m_string.size();
+ } else {
+ Q_ASSERT(m_offset == 0);
+ m_string.append(other);
+ m_length += other.size();
+ }
+ m_hash = 0x80000000;
}
return *this;
}
ProString &ProString::append(QChar other)
{
- QChar *ptr = prepareExtend(1, 0, m_length);
- *ptr = other;
+ if (m_length != m_string.size()) {
+ m_string = toQStringView() + other;
+ m_offset = 0;
+ m_length = m_string.size();
+ } else {
+ Q_ASSERT(m_offset == 0);
+ m_string.append(other);
+ ++m_length;
+ }
+ m_hash = 0x80000000;
return *this;
}
@@ -236,16 +192,18 @@ ProString &ProString::append(const ProString &other, bool *pending)
if (!m_length) {
*this = other;
} else {
- QChar *ptr;
+ if (m_length != m_string.size())
+ m_string = toQString();
if (pending && !*pending) {
- ptr = prepareExtend(1 + other.m_length, 0, m_length);
- *ptr++ = 32;
+ m_string += QLatin1Char(' ') + other.toQStringView();
} else {
- ptr = prepareExtend(other.m_length, 0, m_length);
+ m_string += other.toQStringView();
}
- memcpy(ptr, other.m_string.constData() + other.m_offset, other.m_length * 2);
+ m_length = m_string.size();
+ m_offset = 0;
if (other.m_file)
m_file = other.m_file;
+ m_hash = 0x80000000;
}
if (pending)
*pending = true;
@@ -265,27 +223,24 @@ ProString &ProString::append(const ProStringList &other, bool *pending, bool ski
if (!m_length && sz == startIdx + 1) {
*this = other.at(startIdx);
} else {
- int totalLength = sz - startIdx;
- for (int i = startIdx; i < sz; ++i)
- totalLength += other.at(i).size();
bool putSpace = false;
if (pending && !*pending && m_length)
putSpace = true;
- else
- totalLength--;
- QChar *ptr = prepareExtend(totalLength, 0, m_length);
+ m_string = toQString();
+ m_offset = 0;
for (int i = startIdx; i < sz; ++i) {
if (putSpace)
- *ptr++ = 32;
+ m_string += QLatin1Char(' ');
else
putSpace = true;
const ProString &str = other.at(i);
- memcpy(ptr, str.m_string.constData() + str.m_offset, str.m_length * 2);
- ptr += str.m_length;
+ m_string += str.toQStringView();
}
+ m_length = m_string.size();
if (other.last().m_file)
m_file = other.last().m_file;
+ m_hash = 0x80000000;
}
if (pending)
*pending = true;
@@ -419,21 +374,8 @@ void ProStringList::removeEmpty()
void ProStringList::removeDuplicates()
{
- int n = size();
- int j = 0;
- QSet<ProString> seen;
- seen.reserve(n);
- for (int i = 0; i < n; ++i) {
- const ProString &s = at(i);
- if (seen.contains(s))
- continue;
- seen.insert(s);
- if (j != i)
- (*this)[j] = s;
- ++j;
- }
- if (n != j)
- erase(begin() + j, end());
+ QDuplicateTracker<ProString> seen(size());
+ removeIf([&](const ProString &s) { return seen.hasSeen(s); });
}
void ProStringList::insertUnique(const ProStringList &value)
@@ -518,4 +460,9 @@ ProKey ProFile::getHashStr(const ushort *&tPtr)
return ret;
}
+QDebug operator<<(QDebug debug, const ProString &str)
+{
+ return debug << str.toQString();
+}
+
QT_END_NAMESPACE
diff --git a/src/linguist/shared/proitems.h b/src/linguist/shared/proitems.h
index d9c79e05e..23339a145 100644
--- a/src/linguist/shared/proitems.h
+++ b/src/linguist/shared/proitems.h
@@ -1,36 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PROITEMS_H
#define PROITEMS_H
#include "qmake_global.h"
+#include <qdebug.h>
#include <qhash.h>
#include <qlist.h>
#include <qmap.h>
@@ -69,9 +45,16 @@ public:
ProString();
ProString(const ProString &other);
ProString &operator=(const ProString &) = default;
- PROITEM_EXPLICIT ProString(const QString &str);
+ template<typename A, typename B>
+ ProString &operator=(const QStringBuilder<A, B> &str)
+ { return *this = QString(str); }
+ ProString(const QString &str);
PROITEM_EXPLICIT ProString(QStringView str);
PROITEM_EXPLICIT ProString(const char *str);
+ template<typename A, typename B>
+ ProString(const QStringBuilder<A, B> &str)
+ : ProString(QString(str))
+ {}
ProString(const QString &str, int offset, int length);
void setValue(const QString &str);
void clear() { m_string.clear(); m_length = 0; }
@@ -82,12 +65,16 @@ public:
ProString &prepend(const ProString &other);
ProString &append(const ProString &other, bool *pending = nullptr);
ProString &append(const QString &other) { return append(ProString(other)); }
+ template<typename A, typename B>
+ ProString &append(const QStringBuilder<A, B> &other) { return append(QString(other)); }
ProString &append(const QLatin1String other);
ProString &append(const char *other) { return append(QLatin1String(other)); }
ProString &append(QChar other);
ProString &append(const ProStringList &other, bool *pending = nullptr, bool skipEmpty1st = false);
ProString &operator+=(const ProString &other) { return append(other); }
ProString &operator+=(const QString &other) { return append(other); }
+ template<typename A, typename B>
+ ProString &operator+=(const QStringBuilder<A, B> &other) { return append(QString(other)); }
ProString &operator+=(const QLatin1String other) { return append(other); }
ProString &operator+=(const char *other) { return append(other); }
ProString &operator+=(QChar other) { return append(other); }
@@ -122,9 +109,13 @@ public:
bool startsWith(const QString &sub, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringView().startsWith(sub, cs); }
bool startsWith(const char *sub, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringView().startsWith(QLatin1String(sub), cs); }
bool startsWith(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringView().startsWith(c, cs); }
+ template<typename A, typename B>
+ bool startsWith(const QStringBuilder<A, B> &str) { return startsWith(QString(str)); }
bool endsWith(const ProString &sub, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringView().endsWith(sub.toQStringView(), cs); }
bool endsWith(const QString &sub, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringView().endsWith(sub, cs); }
bool endsWith(const char *sub, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringView().endsWith(QLatin1String(sub), cs); }
+ template<typename A, typename B>
+ bool endsWith(const QStringBuilder<A, B> &str) { return endsWith(QString(str)); }
bool endsWith(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringView().endsWith(c, cs); }
int indexOf(const QString &s, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringView().indexOf(s, from, cs); }
int indexOf(const char *s, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringView().indexOf(QLatin1String(s), from, cs); }
@@ -135,12 +126,12 @@ public:
bool contains(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return indexOf(s, 0, cs) >= 0; }
bool contains(const char *s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return indexOf(QLatin1String(s), 0, cs) >= 0; }
bool contains(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return indexOf(c, 0, cs) >= 0; }
- int toLongLong(bool *ok = nullptr, int base = 10) const { return toQStringView().toLongLong(ok, base); }
+ qlonglong toLongLong(bool *ok = nullptr, int base = 10) const { return toQStringView().toLongLong(ok, base); }
int toInt(bool *ok = nullptr, int base = 10) const { return toQStringView().toInt(ok, base); }
short toShort(bool *ok = nullptr, int base = 10) const { return toQStringView().toShort(ok, base); }
- uint hash() const { return m_hash; }
- static uint hash(const QChar *p, int n);
+ size_t hash() const { return m_hash; }
+ static size_t hash(const QChar *p, int n);
ALWAYS_INLINE QStringView toQStringView() const { return QStringView(m_string).mid(m_offset, m_length); }
@@ -168,19 +159,23 @@ private:
QString m_string;
int m_offset, m_length;
int m_file;
- mutable uint m_hash;
- QChar *prepareExtend(int extraLen, int thisTarget, int extraTarget);
- uint updatedHash() const;
+ mutable size_t m_hash;
+ size_t updatedHash() const;
friend size_t qHash(const ProString &str);
friend QString operator+(const ProString &one, const ProString &two);
friend class ProKey;
};
-Q_DECLARE_TYPEINFO(ProString, Q_MOVABLE_TYPE);
+Q_DECLARE_TYPEINFO(ProString, Q_RELOCATABLE_TYPE);
+
class ProKey : public ProString {
public:
ALWAYS_INLINE ProKey() : ProString() {}
explicit ProKey(const QString &str);
+ template<typename A, typename B>
+ ProKey(const QStringBuilder<A, B> &str)
+ : ProString(str)
+ {}
PROITEM_EXPLICIT ProKey(const char *str);
ProKey(const QString &str, int off, int len);
ProKey(const QString &str, int off, int len, uint hash);
@@ -202,33 +197,49 @@ public:
private:
ProKey(const ProString &other);
};
-Q_DECLARE_TYPEINFO(ProKey, Q_MOVABLE_TYPE);
+Q_DECLARE_TYPEINFO(ProKey, Q_RELOCATABLE_TYPE);
+
+template <> struct QConcatenable<ProString>
+{
+ typedef ProString type;
+ typedef QString ConvertTo;
+ enum { ExactSize = true };
+ static int size(const ProString &a) { return a.length(); }
+ static inline void appendTo(const ProString &a, QChar *&out)
+ {
+ const auto n = a.size();
+ if (!n)
+ return;
+ memcpy(out, a.toQStringView().data(), sizeof(QChar) * n);
+ out += n;
+ }
+};
+
+template <> struct QConcatenable<ProKey>
+{
+ typedef ProKey type;
+ typedef QString ConvertTo;
+ enum { ExactSize = true };
+ static int size(const ProKey &a) { return a.length(); }
+ static inline void appendTo(const ProKey &a, QChar *&out)
+ {
+ const auto n = a.size();
+ if (!n)
+ return;
+ memcpy(out, a.toQStringView().data(), sizeof(QChar) * n);
+ out += n;
+ }
+};
+
size_t qHash(const ProString &str);
-QString operator+(const ProString &one, const ProString &two);
-inline QString operator+(const ProString &one, const QString &two)
- { return one.toQStringView() + two; }
-inline QString operator+(const QString &one, const ProString &two)
- { return one + two.toQStringView(); }
-
-inline QString operator+(const ProString &one, const char *two)
- { return one.toQStringView() + QLatin1String(two); }
-inline QString operator+(const char *one, const ProString &two)
- { return QLatin1String(one) + two.toQStringView(); }
-inline QString operator+(const ProString &one, QChar two)
- { return one.toQStringView() + two; }
-inline QString operator+(QChar one, const ProString &two)
- { return one + two.toQStringView(); }
inline QString &operator+=(QString &that, const ProString &other)
{ return that += other.toQStringView(); }
-inline bool operator==(const QString &that, const ProString &other)
- { return other == that; }
-inline bool operator!=(const QString &that, const ProString &other)
- { return !(other == that); }
-
QTextStream &operator<<(QTextStream &t, const ProString &str);
+template<typename A, typename B>
+QTextStream &operator<<(QTextStream &t, const QStringBuilder<A, B> &str) { return t << QString(str); }
// This class manages read-only access to a ProString via a raw data QString
// temporary, ensuring that the latter is accessed exclusively.
@@ -246,7 +257,7 @@ public:
}
// No destructor, as a RAII pattern cannot be used: references to the
// temporary string can legitimately outlive instances of this class
- // (if they are held by Qt, e.g. in QRegularExpression).
+ // (if they are held by Qt, e.g. in QRegExp).
QString &set(const ProString &ps) { return ps.toQString(*m_rs); }
QString &str() { return *m_rs; }
@@ -293,6 +304,8 @@ public:
QString join(const ProString &sep) const;
QString join(const QString &sep) const;
QString join(QChar sep) const;
+ template<typename A, typename B>
+ QString join(const QStringBuilder<A, B> &str) { return join(QString(str)); }
void insertUnique(const ProStringList &value);
@@ -309,7 +322,7 @@ public:
{ return contains(ProString(str), cs); }
bool contains(const char *str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
};
-Q_DECLARE_TYPEINFO(ProStringList, Q_MOVABLE_TYPE);
+Q_DECLARE_TYPEINFO(ProStringList, Q_RELOCATABLE_TYPE);
inline ProStringList operator+(const ProStringList &one, const ProStringList &two)
{ ProStringList ret = one; ret += two; return ret; }
@@ -429,7 +442,7 @@ class ProFunctionDef {
public:
ProFunctionDef(ProFile *pro, int offset) : m_pro(pro), m_offset(offset) { m_pro->ref(); }
ProFunctionDef(const ProFunctionDef &o) : m_pro(o.m_pro), m_offset(o.m_offset) { m_pro->ref(); }
- ProFunctionDef(ProFunctionDef &&other) Q_DECL_NOTHROW
+ ProFunctionDef(ProFunctionDef &&other) noexcept
: m_pro(other.m_pro), m_offset(other.m_offset) { other.m_pro = nullptr; }
~ProFunctionDef() { if (m_pro) m_pro->deref(); }
ProFunctionDef &operator=(const ProFunctionDef &o)
@@ -443,13 +456,13 @@ public:
}
return *this;
}
- ProFunctionDef &operator=(ProFunctionDef &&other) Q_DECL_NOTHROW
+ ProFunctionDef &operator=(ProFunctionDef &&other) noexcept
{
ProFunctionDef moved(std::move(other));
swap(moved);
return *this;
}
- void swap(ProFunctionDef &other) Q_DECL_NOTHROW
+ void swap(ProFunctionDef &other) noexcept
{
qSwap(m_pro, other.m_pro);
qSwap(m_offset, other.m_offset);
@@ -462,13 +475,15 @@ private:
int m_offset;
};
-Q_DECLARE_TYPEINFO(ProFunctionDef, Q_MOVABLE_TYPE);
+Q_DECLARE_TYPEINFO(ProFunctionDef, Q_RELOCATABLE_TYPE);
struct ProFunctionDefs {
QHash<ProKey, ProFunctionDef> testFunctions;
QHash<ProKey, ProFunctionDef> replaceFunctions;
};
+QDebug operator<<(QDebug debug, const ProString &str);
+
QT_END_NAMESPACE
#endif // PROITEMS_H
diff --git a/src/linguist/shared/projectdescriptionreader.cpp b/src/linguist/shared/projectdescriptionreader.cpp
index 57fa39efc..eded3a650 100644
--- a/src/linguist/shared/projectdescriptionreader.cpp
+++ b/src/linguist/shared/projectdescriptionreader.cpp
@@ -1,32 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "projectdescriptionreader.h"
+#include "fmt.h"
#include <QtCore/qcoreapplication.h>
#include <QtCore/qfile.h>
@@ -40,10 +16,6 @@
using std::placeholders::_1;
-class FMT {
- Q_DECLARE_TR_FUNCTIONS(Linguist)
-};
-
class Validator
{
public:
@@ -140,7 +112,7 @@ public:
{
Projects result;
result.reserve(rawProjects.size());
- for (const QJsonValue &rawProject : rawProjects) {
+ for (const QJsonValue rawProject : rawProjects) {
Project project = convertProject(rawProject);
if (!m_errorString.isEmpty())
break;
@@ -163,7 +135,7 @@ private:
result.includePaths = stringListValue(obj, QLatin1String("includePaths"));
result.sources = stringListValue(obj, QLatin1String("sources"));
if (obj.contains(QLatin1String("translations")))
- result.translations.reset(new QStringList(stringListValue(obj, QLatin1String("translations"))));
+ result.translations = stringListValue(obj, QLatin1String("translations"));
result.subProjects = convertProjects(obj.value(QLatin1String("subProjects")).toArray());
return result;
}
@@ -228,7 +200,7 @@ private:
QStringList result;
const QJsonArray a = v.toArray();
result.reserve(a.count());
- for (const QJsonValue &v : a) {
+ for (const QJsonValue v : a) {
if (!v.isString()) {
m_errorString = FMT::tr("Unexpected type %1 in string array in key %2.")
.arg(jsonTypeName(v.type()), key);
diff --git a/src/linguist/shared/projectdescriptionreader.h b/src/linguist/shared/projectdescriptionreader.h
index f3d2ddf23..0222bdb42 100644
--- a/src/linguist/shared/projectdescriptionreader.h
+++ b/src/linguist/shared/projectdescriptionreader.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PROJECTDESCRIPTIONREADER_H
#define PROJECTDESCRIPTIONREADER_H
@@ -32,7 +7,7 @@
#include <QtCore/qstring.h>
#include <QtCore/qstringlist.h>
-#include <memory>
+#include <optional>
#include <vector>
struct Project;
@@ -48,15 +23,9 @@ struct Project
QStringList includePaths;
QStringList sources;
Projects subProjects;
- // ### Change type of translations to std::optional<QStringList> once we can.
- std::unique_ptr<QStringList> translations;
+ std::optional<QStringList> translations;
};
-inline bool hasTranslations(const Project &project)
-{
- return (bool)project.translations;
-}
-
Projects readProjectDescription(const QString &filePath, QString *errorString);
#endif // PROJECTDESCRIPTIONREADER_H
diff --git a/src/linguist/shared/proparser.pri b/src/linguist/shared/proparser.pri
deleted file mode 100644
index f3fcad515..000000000
--- a/src/linguist/shared/proparser.pri
+++ /dev/null
@@ -1,28 +0,0 @@
-
-INCLUDEPATH *= $$PWD
-
-DEFINES += PROEVALUATOR_CUMULATIVE PROEVALUATOR_INIT_PROPS
-
-HEADERS += \
- $$PWD/qmake_global.h \
- $$PWD/ioutils.h \
- $$PWD/qmakevfs.h \
- $$PWD/proitems.h \
- $$PWD/qmakeglobals.h \
- $$PWD/qmakeparser.h \
- $$PWD/qmakeevaluator.h \
- $$PWD/qmakeevaluator_p.h \
- $$PWD/profileevaluator.h
-
-SOURCES += \
- $$PWD/ioutils.cpp \
- $$PWD/qmakevfs.cpp \
- $$PWD/proitems.cpp \
- $$PWD/qmakeglobals.cpp \
- $$PWD/qmakeparser.cpp \
- $$PWD/qmakeevaluator.cpp \
- $$PWD/qmakebuiltins.cpp \
- $$PWD/profileevaluator.cpp
-
-RESOURCES += $$PWD/proparser.qrc
-DEFINES += QMAKE_BUILTIN_PRFS QMAKE_OVERRIDE_PRFS
diff --git a/src/linguist/shared/proparser.qrc b/src/linguist/shared/proparser.qrc
deleted file mode 100644
index 77ffd258a..000000000
--- a/src/linguist/shared/proparser.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
- <qresource prefix="/qmake/override_features" >
- <file>exclusive_builds.prf</file>
- </qresource>
-</RCC>
diff --git a/src/linguist/shared/qm.cpp b/src/linguist/shared/qm.cpp
index 6eb9c874d..82605f492 100644
--- a/src/linguist/shared/qm.cpp
+++ b/src/linguist/shared/qm.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "translator.h"
@@ -38,6 +13,7 @@
#include <QtCore/QFileInfo>
#include <QtCore/QMap>
#include <QtCore/QString>
+#include <QtCore/QStringDecoder>
QT_BEGIN_NAMESPACE
@@ -118,7 +94,7 @@ private:
QStringList m_translations;
};
-Q_DECLARE_TYPEINFO(ByteTranslatorMessage, Q_MOVABLE_TYPE);
+Q_DECLARE_TYPEINFO(ByteTranslatorMessage, Q_RELOCATABLE_TYPE);
bool ByteTranslatorMessage::operator<(const ByteTranslatorMessage& m) const
{
@@ -220,7 +196,7 @@ Prefix Releaser::commonPrefix(const ByteTranslatorMessage &m1, const ByteTransla
void Releaser::writeMessage(const ByteTranslatorMessage &msg, QDataStream &stream,
TranslatorSaveMode mode, Prefix prefix) const
{
- for (int i = 0; i < msg.translations().count(); ++i)
+ for (int i = 0; i < msg.translations().size(); ++i)
stream << quint8(Tag_Translation) << msg.translations().at(i);
if (mode == SaveEverything)
@@ -287,7 +263,7 @@ void Releaser::squeeze(TranslatorSaveMode mode)
{
m_dependencyArray.clear();
QDataStream depstream(&m_dependencyArray, QIODevice::WriteOnly);
- for (const QString &dep : qAsConst(m_dependencies))
+ for (const QString &dep : std::as_const(m_dependencies))
depstream << dep;
if (m_messages.isEmpty() && mode == SaveEverything)
@@ -381,7 +357,7 @@ void Releaser::squeeze(TranslatorSaveMode mode)
do {
const char *con = entry.value().constData();
- uint len = uint(entry.value().length());
+ uint len = uint(entry.value().size());
len = qMin(len, 255u);
t << quint8(len);
t.writeRawData(con, len);
@@ -452,7 +428,7 @@ static quint32 read32(const uchar *data)
static void fromBytes(const char *str, int len, QString *out, bool *utf8Fail)
{
QStringDecoder toUnicode(QStringDecoder::Utf8, QStringDecoder::Flag::Stateless);
- *out = toUnicode(str, len);
+ *out = toUnicode(QByteArrayView(str, len));
*utf8Fail = toUnicode.hasError();
}
@@ -469,8 +445,8 @@ bool loadQM(Translator &translator, QIODevice &dev, ConversionData &cd)
enum { Contexts = 0x2f, Hashes = 0x42, Messages = 0x69, NumerusRules = 0x88, Dependencies = 0x96, Language = 0xa7 };
// for squeezed but non-file data, this is what needs to be deleted
- const uchar *messageArray = 0;
- const uchar *offsetArray = 0;
+ const uchar *messageArray = nullptr;
+ const uchar *offsetArray = nullptr;
uint offsetLength = 0;
bool ok = true;
@@ -522,12 +498,12 @@ bool loadQM(Translator &translator, QIODevice &dev, ConversionData &cd)
QString strProN = QLatin1String("%n");
QLocale::Language l;
- QLocale::Country c;
- Translator::languageAndCountry(translator.languageCode(), &l, &c);
+ QLocale::Territory c;
+ Translator::languageAndTerritory(translator.languageCode(), &l, &c);
QStringList numerusForms;
bool guessPlurals = true;
if (getNumerusInfo(l, c, 0, &numerusForms, 0))
- guessPlurals = (numerusForms.count() == 1);
+ guessPlurals = (numerusForms.size() == 1);
QString context, sourcetext, comment;
QStringList translations;
@@ -546,14 +522,19 @@ bool loadQM(Translator &translator, QIODevice &dev, ConversionData &cd)
goto end;
case Tag_Translation: {
int len = read32(m);
- if (len % 1) {
+ m += 4;
+
+ // -1 indicates an empty string
+ // Otherwise streaming format is UTF-16 -> 2 bytes per character
+ if ((len != -1) && (len & 1)) {
cd.appendError(QLatin1String("QM-Format error"));
return false;
}
- m += 4;
- QString str = QString((const QChar *)m, len/2);
+ QString str;
+ if (len != -1)
+ str = QString((const QChar *)m, len / 2);
if (QSysInfo::ByteOrder == QSysInfo::LittleEndian) {
- for (int i = 0; i < str.length(); ++i)
+ for (int i = 0; i < str.size(); ++i)
str[i] = QChar((str.at(i).unicode() >> 8) +
((str.at(i).unicode() << 8) & 0xff00));
}
@@ -600,7 +581,7 @@ bool loadQM(Translator &translator, QIODevice &dev, ConversionData &cd)
end:;
TranslatorMessage msg;
msg.setType(TranslatorMessage::Finished);
- if (translations.count() > 1) {
+ if (translations.size() > 1) {
// If guessPlurals is not false here, plural form discard messages
// will be spewn out later.
msg.setPlural(true);
@@ -639,8 +620,8 @@ bool saveQM(const Translator &translator, QIODevice &dev, ConversionData &cd)
{
Releaser releaser(translator.languageCode());
QLocale::Language l;
- QLocale::Country c;
- Translator::languageAndCountry(translator.languageCode(), &l, &c);
+ QLocale::Territory c;
+ Translator::languageAndTerritory(translator.languageCode(), &l, &c);
QByteArray rules;
if (getNumerusInfo(l, c, &rules, 0, 0))
releaser.setNumerusRules(rules);
diff --git a/src/linguist/shared/qmake_global.h b/src/linguist/shared/qmake_global.h
index 36d768f0f..612de43e9 100644
--- a/src/linguist/shared/qmake_global.h
+++ b/src/linguist/shared/qmake_global.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QMAKE_GLOBAL_H
#define QMAKE_GLOBAL_H
diff --git a/src/linguist/shared/qmakebuiltins.cpp b/src/linguist/shared/qmakebuiltins.cpp
index c0d1346a7..358176658 100644
--- a/src/linguist/shared/qmakebuiltins.cpp
+++ b/src/linguist/shared/qmakebuiltins.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qmakeevaluator.h"
@@ -38,20 +13,22 @@
#include <qdir.h>
#include <qfile.h>
#include <qfileinfo.h>
+#include <qjsonarray.h>
+#include <qjsondocument.h>
+#include <qjsonobject.h>
#include <qlist.h>
#include <qregularexpression.h>
#include <qset.h>
#include <qstringlist.h>
#include <qtextstream.h>
-#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
-# include <qjsondocument.h>
-# include <qjsonobject.h>
-# include <qjsonarray.h>
-#endif
+
#ifdef PROEVALUATOR_THREAD_SAFE
# include <qthreadpool.h>
#endif
#include <qversionnumber.h>
+#ifdef Q_OS_WIN
+# include <registry_p.h>
+#endif
#include <algorithm>
@@ -64,7 +41,7 @@
#include <sys/stat.h>
#include <sys/utsname.h>
#else
-#include <windows.h>
+#include <qt_windows.h>
#endif
#include <stdio.h>
#include <stdlib.h>
@@ -93,7 +70,7 @@ enum ExpandFunc {
E_UPPER, E_LOWER, E_TITLE, E_FILES, E_PROMPT, E_RE_ESCAPE, E_VAL_ESCAPE,
E_REPLACE, E_SORT_DEPENDS, E_RESOLVE_DEPENDS, E_ENUMERATE_VARS,
E_SHADOWED, E_ABSOLUTE_PATH, E_RELATIVE_PATH, E_CLEAN_PATH,
- E_SYSTEM_PATH, E_SHELL_PATH, E_SYSTEM_QUOTE, E_SHELL_QUOTE, E_GETENV
+ E_SYSTEM_PATH, E_SHELL_PATH, E_SYSTEM_QUOTE, E_SHELL_QUOTE, E_GETENV, E_READ_REGISTRY
};
enum TestFunc {
@@ -190,6 +167,7 @@ void QMakeEvaluator::initFunctionStatics()
{ "system_quote", E_SYSTEM_QUOTE, -1, 1, "arg" },
{ "shell_quote", E_SHELL_QUOTE, -1, 1, "arg" },
{ "getenv", E_GETENV, 1, 1, "arg" },
+ { "read_registry", E_READ_REGISTRY, 2, 3, "tree, key, [wow64]" },
};
statics.expands.reserve((int)(sizeof(expandInits)/sizeof(expandInits[0])));
for (unsigned i = 0; i < sizeof(expandInits)/sizeof(expandInits[0]); ++i)
@@ -218,9 +196,7 @@ void QMakeEvaluator::initFunctionStatics()
{ "infile", T_INFILE, 2, 3, "file, var, [values]" },
{ "count", T_COUNT, 2, 3, "var, count, [op=operator]" },
{ "isEmpty", T_ISEMPTY, 1, 1, "var" },
-#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
{ "parseJson", T_PARSE_JSON, 2, 2, "var, into" },
-#endif
{ "load", T_LOAD, 1, 2, "feature, [ignore_errors=false]" },
{ "include", T_INCLUDE, 1, 3, "file, [into, [silent]]" },
{ "debug", T_DEBUG, 2, 2, "level, message" },
@@ -249,12 +225,12 @@ QMakeEvaluator::getMemberArgs(const ProKey &func, int srclen, const ProStringLis
int *start, int *end)
{
*start = 0, *end = 0;
- if (args.count() >= 2) {
+ if (args.size() >= 2) {
bool ok = true;
const ProString &start_str = args.at(1);
*start = start_str.toInt(&ok);
if (!ok) {
- if (args.count() == 2) {
+ if (args.size() == 2) {
int dotdot = start_str.indexOf(statics.strDotDot);
if (dotdot != -1) {
*start = start_str.left(dotdot).toInt(&ok);
@@ -270,7 +246,7 @@ QMakeEvaluator::getMemberArgs(const ProKey &func, int srclen, const ProStringLis
}
} else {
*end = *start;
- if (args.count() == 3)
+ if (args.size() == 3)
*end = args.at(2).toInt(&ok);
if (!ok) {
ProStringRoUser u1(func, m_tmp1);
@@ -358,7 +334,6 @@ QMakeEvaluator::quoteValue(const ProString &val)
return ret;
}
-#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
static void addJsonValue(const QJsonValue &value, const QString &keyPrefix, ProValueMap *map);
static void insertJsonKeyValue(const QString &key, const QStringList &values, ProValueMap *map)
@@ -470,7 +445,6 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::parseJsonInto(const QByteArray &json
return QMakeEvaluator::ReturnTrue;
}
-#endif
QMakeEvaluator::VisitReturn
QMakeEvaluator::writeFile(const QString &ctx, const QString &fn, QIODevice::OpenMode mode,
@@ -572,7 +546,7 @@ void QMakeEvaluator::populateDeps(
if (depends.isEmpty()) {
rootSet.insert(first(ProKey(prefix + item + priosfx)).toInt(), item);
} else {
- for (const ProString &dep : qAsConst(depends)) {
+ for (const ProString &dep : std::as_const(depends)) {
dset.insert(dep.toKey());
dependees[dep.toKey()] << item;
}
@@ -621,7 +595,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
var = args[0];
sep = args.at(1).toQString();
beg = args.at(2).toInt();
- if (args.count() == 4)
+ if (args.size() == 4)
end = args.at(3).toInt();
} else {
var = args[0];
@@ -656,7 +630,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
case E_SPRINTF: {
ProStringRwUser u1(args.at(0), m_tmp1);
QString tmp = u1.str();
- for (int i = 1; i < args.count(); ++i)
+ for (int i = 1; i < args.size(); ++i)
tmp = tmp.arg(args.at(i).toQStringView());
ret << u1.extract(tmp);
break;
@@ -668,7 +642,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
bool zeropad = false;
bool leftalign = false;
enum { DefaultSign, PadSign, AlwaysSign } sign = DefaultSign;
- if (args.count() >= 2) {
+ if (args.size() >= 2) {
const auto opts = split_value_list(args.at(1).toQStringView());
for (const ProString &opt : opts) {
if (opt.startsWith(QLatin1String("ibase="))) {
@@ -713,7 +687,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
outstr = QLatin1Char(' ');
}
QString numstr = QString::number(num, obase);
- int space = width - outstr.length() - numstr.length();
+ int space = width - outstr.size() - numstr.size();
if (space <= 0) {
outstr += numstr;
} else if (leftalign) {
@@ -729,7 +703,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
}
case E_NUM_ADD: {
qlonglong sum = 0;
- for (const ProString &arg : qAsConst(args)) {
+ for (const ProString &arg : std::as_const(args)) {
if (arg.contains(QLatin1Char('.'))) {
evalError(fL1S("num_add(): floats are currently not supported."));
goto allfail;
@@ -748,11 +722,11 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
}
case E_JOIN: {
ProString glue, before, after;
- if (args.count() >= 2)
+ if (args.size() >= 2)
glue = args.at(1);
- if (args.count() >= 3)
+ if (args.size() >= 3)
before = args[2];
- if (args.count() == 4)
+ if (args.size() == 4)
after = args[3];
const ProStringList &var = values(map(args.at(0)));
if (!var.isEmpty()) {
@@ -768,7 +742,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
}
case E_SPLIT: {
ProStringRoUser u1(m_tmp1);
- const QString &sep = (args.count() == 2) ? u1.set(args.at(1)) : statics.field_sep;
+ const QString &sep = (args.size() == 2) ? u1.set(args.at(1)) : statics.field_sep;
const auto vars = values(map(args.at(0)));
for (const ProString &var : vars) {
// FIXME: this is inconsistent with the "there are no empty strings" dogma.
@@ -842,7 +816,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
bool blob = false;
bool lines = false;
bool singleLine = true;
- if (args.count() > 1) {
+ if (args.size() > 1) {
if (!args.at(1).compare(QLatin1String("false"), Qt::CaseInsensitive))
singleLine = false;
else if (!args.at(1).compare(QLatin1String("blob"), Qt::CaseInsensitive))
@@ -882,7 +856,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
ret += values(map(args.at(0)));
break;
case E_LIST: {
- QString tmp = QString::asprintf(".QMAKE_INTERNAL_TMP_variableName_%d", m_listCount++);
+ QString tmp(QString::asprintf(".QMAKE_INTERNAL_TMP_variableName_%d", m_listCount++));
ret = ProStringList(ProString(tmp));
ProStringList lst;
for (const ProString &arg : args)
@@ -909,7 +883,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
bool blob = false;
bool lines = false;
bool singleLine = true;
- if (args.count() > 1) {
+ if (args.size() > 1) {
if (!args.at(1).compare(QLatin1String("false"), Qt::CaseInsensitive))
singleLine = false;
else if (!args.at(1).compare(QLatin1String("blob"), Qt::CaseInsensitive))
@@ -919,7 +893,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
}
int exitCode;
QByteArray bytes = getCommandOutput(args.at(0).toQString(), &exitCode);
- if (args.count() > 2 && !args.at(2).isEmpty()) {
+ if (args.size() > 2 && !args.at(2).isEmpty()) {
m_valuemapStack.top()[args.at(2).toKey()] =
ProStringList(ProString(QString::number(exitCode)));
}
@@ -962,7 +936,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
for (int i = 0; i < args.size(); ++i) {
QString str = args.at(i).toQString();
QChar *i_data = str.data();
- int i_len = str.length();
+ int i_len = str.size();
for (int x = 0; x < i_len; ++x) {
if (*(i_data+x) == QLatin1Char('\\') && x < i_len-1) {
if (*(i_data+x+1) == QLatin1Char('\\')) {
@@ -1007,14 +981,14 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
case E_UPPER:
case E_LOWER:
case E_TITLE:
- for (int i = 0; i < args.count(); ++i) {
+ for (int i = 0; i < args.size(); ++i) {
ProStringRwUser u1(args.at(i), m_tmp1);
QString rstr = u1.str();
if (func_t == E_UPPER) {
rstr = rstr.toUpper();
} else {
rstr = rstr.toLower();
- if (func_t == E_TITLE && rstr.length() > 0)
+ if (func_t == E_TITLE && rstr.size() > 0)
rstr[0] = rstr.at(0).toTitleCase();
}
ret << u1.extract(rstr);
@@ -1022,7 +996,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
break;
case E_FILES: {
bool recursive = false;
- if (args.count() == 2)
+ if (args.size() == 2)
recursive = isTrue(args.at(1));
QStringList dirs;
ProStringRoUser u1(args.at(0), m_tmp1);
@@ -1048,10 +1022,10 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
evalError(fL1S("section(): Encountered invalid wildcard expression '%1'.").arg(pattern));
goto allfail;
}
- for (int d = 0; d < dirs.count(); d++) {
+ for (int d = 0; d < dirs.size(); d++) {
QString dir = dirs[d];
QDir qdir(pfx + dir);
- for (int i = 0; i < (int)qdir.count(); ++i) {
+ for (int i = 0, count = int(qdir.count()); i < count; ++i) {
if (qdir[i] == statics.strDot || qdir[i] == statics.strDotDot)
continue;
QString fname = dir + qdir[i];
@@ -1117,10 +1091,10 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
ProValueMap dependees;
QMultiMap<int, ProString> rootSet;
ProStringList orgList = values(args.at(0).toKey());
- ProString prefix = args.count() < 2 ? ProString() : args.at(1);
- ProString priosfx = args.count() < 4 ? ProString(".priority") : args.at(3);
+ ProString prefix = args.size() < 2 ? ProString() : args.at(1);
+ ProString priosfx = args.size() < 4 ? ProString(".priority") : args.at(3);
populateDeps(orgList, prefix,
- args.count() < 3 ? ProStringList(ProString(".depends"))
+ args.size() < 3 ? ProStringList(ProString(".depends"))
: split_value_list(args.at(2).toQStringView()),
priosfx, dependencies, dependees, rootSet);
while (!rootSet.isEmpty()) {
@@ -1129,7 +1103,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
rootSet.erase(it);
if ((func_t == E_RESOLVE_DEPENDS) || orgList.contains(item))
ret.prepend(item);
- for (const ProString &dep : qAsConst(dependees[item.toKey()])) {
+ for (const ProString &dep : std::as_const(dependees[item.toKey()])) {
QSet<ProKey> &dset = dependencies[dep.toKey()];
dset.remove(item.toKey());
if (dset.isEmpty())
@@ -1140,11 +1114,11 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
}
case E_ENUMERATE_VARS: {
QSet<ProString> keys;
- for (const ProValueMap &vmap : qAsConst(m_valuemapStack))
+ for (const ProValueMap &vmap : std::as_const(m_valuemapStack))
for (ProValueMap::ConstIterator it = vmap.constBegin(); it != vmap.constEnd(); ++it)
keys.insert(it.key());
ret.reserve(keys.size());
- for (const ProString &key : qAsConst(keys))
+ for (const ProString &key : std::as_const(keys))
ret << key;
break; }
case E_SHADOWED: {
@@ -1157,7 +1131,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
case E_ABSOLUTE_PATH: {
ProStringRwUser u1(args.at(0), m_tmp1);
ProStringRwUser u2(m_tmp2);
- QString baseDir = args.count() > 1
+ QString baseDir = args.size() > 1
? IoUtils::resolvePath(currentDirectory(), u2.set(args.at(1)))
: currentDirectory();
QString rstr = u1.str().isEmpty() ? baseDir : IoUtils::resolvePath(baseDir, u1.str());
@@ -1167,7 +1141,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
case E_RELATIVE_PATH: {
ProStringRwUser u1(args.at(0), m_tmp1);
ProStringRoUser u2(m_tmp2);
- QString baseDir = args.count() > 1
+ QString baseDir = args.size() > 1
? IoUtils::resolvePath(currentDirectory(), u2.set(args.at(1)))
: currentDirectory();
QString absArg = u1.str().isEmpty() ? baseDir : IoUtils::resolvePath(baseDir, u1.str());
@@ -1229,6 +1203,40 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
ret << ProString(m_option->getEnv(u1.str()));
break;
}
+#ifdef Q_OS_WIN
+ case E_READ_REGISTRY: {
+ HKEY tree;
+ const auto par = args.at(0);
+ if (!par.compare(QLatin1String("HKCU"), Qt::CaseInsensitive)
+ || !par.compare(QLatin1String("HKEY_CURRENT_USER"), Qt::CaseInsensitive)) {
+ tree = HKEY_CURRENT_USER;
+ } else if (!par.compare(QLatin1String("HKLM"), Qt::CaseInsensitive)
+ || !par.compare(QLatin1String("HKEY_LOCAL_MACHINE"), Qt::CaseInsensitive)) {
+ tree = HKEY_LOCAL_MACHINE;
+ } else {
+ evalError(fL1S("read_registry(): invalid or unsupported registry tree %1.")
+ .arg(par.toQStringView()));
+ goto allfail;
+ }
+ int flags = 0;
+ if (args.count() > 2) {
+ const auto opt = args.at(2);
+ if (opt == "32"
+ || !opt.compare(QLatin1String("wow64_32key"), Qt::CaseInsensitive)) {
+ flags = KEY_WOW64_32KEY;
+ } else if (opt == "64"
+ || !opt.compare(QLatin1String("wow64_64key"), Qt::CaseInsensitive)) {
+ flags = KEY_WOW64_64KEY;
+ } else {
+ evalError(fL1S("read_registry(): invalid option %1.")
+ .arg(opt.toQStringView()));
+ goto allfail;
+ }
+ }
+ ret << ProString(qt_readRegistryKey(tree, args.at(1).toQString(m_tmp1), flags));
+ break;
+ }
+#endif
default:
evalError(fL1S("Function '%1' is not implemented.").arg(func.toQStringView()));
break;
@@ -1244,7 +1252,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::testFunc_cache(const ProStringList &
enum { TargetStash, TargetCache, TargetSuper } target = TargetCache;
enum { CacheSet, CacheAdd, CacheSub } mode = CacheSet;
ProKey srcvar;
- if (args.count() >= 2) {
+ if (args.size() >= 2) {
const auto opts = split_value_list(args.at(1).toQStringView());
for (const ProString &opt : opts) {
if (opt == QLatin1String("transient")) {
@@ -1264,7 +1272,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::testFunc_cache(const ProStringList &
return ReturnFalse;
}
}
- if (args.count() >= 3) {
+ if (args.size() >= 3) {
srcvar = args.at(2).toKey();
} else if (mode != CacheSet) {
evalError(fL1S("cache(): modes other than 'set' require a source variable."));
@@ -1359,7 +1367,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::testFunc_cache(const ProStringList &
varstr += QLatin1String(" -=");
else
varstr += QLatin1String(" =");
- if (diffval.count() == 1) {
+ if (diffval.size() == 1) {
varstr += QLatin1Char(' ');
varstr += quoteValue(diffval.at(0));
} else if (!diffval.isEmpty()) {
@@ -1417,7 +1425,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
switch (func_t) {
case T_DEFINED: {
const ProKey &var = args.at(0).toKey();
- if (args.count() > 1) {
+ if (args.size() > 1) {
if (args[1] == QLatin1String("test")) {
return returnBool(m_functionDefs.testFunctions.contains(var));
} else if (args[1] == QLatin1String("replace")) {
@@ -1470,7 +1478,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
auto isFrom = [pro](const ProString &s) {
return s.sourceFile() == pro;
};
- vit->erase(std::remove_if(vit->begin(), vit->end(), isFrom), vit->end());
+ vit->removeIf(isFrom);
if (vit->isEmpty()) {
// When an initially non-empty variable becomes entirely empty,
// undefine it altogether.
@@ -1504,7 +1512,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
VisitReturn ok = evaluateFileInto(fn, &vars, LoadProOnly);
if (ok != ReturnTrue)
return ok;
- if (args.count() == 2)
+ if (args.size() == 2)
return returnBool(vars.contains(map(args.at(1))));
QRegularExpression regx;
regx.setPatternOptions(QRegularExpression::DotMatchesEverythingOption);
@@ -1554,14 +1562,14 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
m_current.pro->fileName(), m_current.line);
}
case T_CONFIG: {
- if (args.count() == 1)
+ if (args.size() == 1)
return returnBool(isActiveConfig(args.at(0).toQStringView()));
- const auto &mutuals = args.at(1).toQStringView().split(QLatin1Char('|'),
- Qt::SkipEmptyParts);
+ const auto mutuals = args.at(1).toQStringView().split(QLatin1Char('|'),
+ Qt::SkipEmptyParts);
const ProStringList &configs = values(statics.strCONFIG);
for (int i = configs.size() - 1; i >= 0; i--) {
- for (int mut = 0; mut < mutuals.count(); mut++) {
+ for (int mut = 0; mut < mutuals.size(); mut++) {
if (configs[i].toQStringView() == mutuals[mut].trimmed())
return returnBool(configs[i] == args[0]);
}
@@ -1581,7 +1589,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
}
}
const ProStringList &l = values(map(args.at(0)));
- if (args.count() == 2) {
+ if (args.size() == 2) {
for (int i = 0; i < l.size(); ++i) {
const ProString &val = l[i];
if (val == qry)
@@ -1597,7 +1605,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
Qt::SkipEmptyParts);
for (int i = l.size() - 1; i >= 0; i--) {
const ProString &val = l[i];
- for (int mut = 0; mut < mutuals.count(); mut++) {
+ for (int mut = 0; mut < mutuals.size(); mut++) {
if (val.toQStringView() == mutuals[mut].trimmed()) {
if (val == qry)
return ReturnTrue;
@@ -1614,9 +1622,9 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
return ReturnFalse;
}
case T_COUNT: {
- int cnt = values(map(args.at(0))).count();
+ int cnt = values(map(args.at(0))).size();
int val = args.at(1).toInt();
- if (args.count() == 3) {
+ if (args.size() == 3) {
const ProString &comp = args.at(2);
if (comp == QLatin1String(">") || comp == QLatin1String("greaterThan")) {
return returnBool(cnt > val);
@@ -1691,23 +1699,21 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
m_valuemapStack.top()[var] = statics.fakeValue;
return ReturnTrue;
}
-#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
case T_PARSE_JSON: {
QByteArray json = values(args.at(0).toKey()).join(QLatin1Char(' ')).toUtf8();
ProStringRoUser u1(args.at(1), m_tmp2);
QString parseInto = u1.str();
return parseJsonInto(json, parseInto, &m_valuemapStack.top());
}
-#endif
case T_INCLUDE: {
QString parseInto;
LoadFlags flags;
if (m_cumulative)
flags = LoadSilent;
- if (args.count() >= 2) {
+ if (args.size() >= 2) {
if (!args.at(1).isEmpty())
parseInto = args.at(1) + QLatin1Char('.');
- if (args.count() >= 3 && isTrue(args.at(2)))
+ if (args.size() >= 3 && isTrue(args.at(2)))
flags = LoadSilent;
}
QString fn = filePathEnvArg0(args);
@@ -1739,7 +1745,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
return ok;
}
case T_LOAD: {
- bool ignore_error = (args.count() == 2 && isTrue(args.at(1)));
+ bool ignore_error = (args.size() == 2 && isTrue(args.at(1)));
VisitReturn ok = evaluateFeatureFile(m_option->expandEnvVars(args.at(0).toQString()),
ignore_error);
if (ok == ReturnFalse && ignore_error)
@@ -1838,11 +1844,11 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
QIODevice::OpenMode mode = QIODevice::Truncate;
QMakeVfs::VfsFlags flags = (m_cumulative ? QMakeVfs::VfsCumulative : QMakeVfs::VfsExact);
QString contents;
- if (args.count() >= 2) {
+ if (args.size() >= 2) {
const ProStringList &vals = values(args.at(1).toKey());
if (!vals.isEmpty())
contents = vals.join(QLatin1Char('\n')) + QLatin1Char('\n');
- if (args.count() >= 3) {
+ if (args.size() >= 3) {
const auto opts = split_value_list(args.at(2).toQStringView());
for (const ProString &opt : opts) {
if (opt == QLatin1String("append")) {
@@ -1874,10 +1880,6 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
return ReturnTrue;
}
case T_CACHE:
- if (args.count() > 3) {
- evalError(fL1S("cache(var, [set|add|sub] [transient] [super|stash], [srcvar]) requires one to three arguments."));
- return ReturnFalse;
- }
return testFunc_cache(args);
case T_RELOAD_PROPERTIES:
#ifdef QT_BUILD_QMAKE
diff --git a/src/linguist/shared/qmakeevaluator.cpp b/src/linguist/shared/qmakeevaluator.cpp
index 37601b388..d4cb8aad7 100644
--- a/src/linguist/shared/qmakeevaluator.cpp
+++ b/src/linguist/shared/qmakeevaluator.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qmakeevaluator.h"
#include "qmakeevaluator_p.h"
@@ -57,7 +32,7 @@
# include <sys/sysctl.h>
# endif
#else
-#include <windows.h>
+#include <qt_windows.h>
#endif
#include <stdio.h>
#include <stdlib.h>
@@ -281,11 +256,11 @@ ProStringList QMakeEvaluator::split_value_list(QStringView vals, int source)
source = currentFileId();
const QChar *vals_data = vals.data();
- const int vals_len = vals.length();
- ushort quote = 0;
+ const int vals_len = vals.size();
+ char16_t quote = 0;
bool hadWord = false;
for (int x = 0; x < vals_len; x++) {
- ushort unicode = vals_data[x].unicode();
+ char16_t unicode = vals_data[x].unicode();
if (unicode == quote) {
quote = 0;
hadWord = true;
@@ -313,7 +288,7 @@ ProStringList QMakeEvaluator::split_value_list(QStringView vals, int source)
break;
case '\\':
if (x + 1 != vals_len) {
- ushort next = vals_data[++x].unicode();
+ char16_t next = vals_data[++x].unicode();
if (next == '\'' || next == '"' || next == '\\') {
build += QChar(unicode);
unicode = next;
@@ -826,7 +801,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::visitProLoop(
} else {
ProString val;
do {
- if (index >= list.count())
+ if (index >= list.size())
goto do_break;
val = list.at(index++);
} while (val.isEmpty()); // stupid, but qmake is like that
@@ -878,19 +853,19 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::visitProVariable(
if (expandVariableReferences(tokPtr, sizeHint, &varVal, true) == ReturnError)
return ReturnError;
QStringView val = varVal.at(0).toQStringView();
- if (val.length() < 4 || val.at(0) != QLatin1Char('s')) {
+ if (val.size() < 4 || val.at(0) != QLatin1Char('s')) {
evalError(fL1S("The ~= operator can handle only the s/// function."));
return ReturnTrue;
}
QChar sep = val.at(1);
auto func = val.split(sep, Qt::KeepEmptyParts);
- if (func.count() < 3 || func.count() > 4) {
+ if (func.size() < 3 || func.size() > 4) {
evalError(fL1S("The s/// function expects 3 or 4 arguments."));
return ReturnTrue;
}
bool global = false, quote = false, case_sense = false;
- if (func.count() == 4) {
+ if (func.size() == 4) {
global = func[3].indexOf(QLatin1Char('g')) != -1;
case_sense = func[3].indexOf(QLatin1Char('i')) == -1;
quote = func[3].indexOf(QLatin1Char('q')) != -1;
@@ -900,9 +875,8 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::visitProVariable(
if (quote)
pattern = QRegularExpression::escape(pattern);
- QRegularExpression regexp(pattern, case_sense ?
- QRegularExpression::NoPatternOption :
- QRegularExpression::CaseInsensitiveOption);
+ QRegularExpression regexp(pattern, case_sense ? QRegularExpression::NoPatternOption :
+ QRegularExpression::CaseInsensitiveOption);
// We could make a union of modified and unmodified values,
// but this will break just as much as it fixes, so leave it as is.
@@ -1259,7 +1233,7 @@ bool QMakeEvaluator::loadSpec()
qmakespec = m_hostBuild ? QLatin1String("default-host") : QLatin1String("default");
#endif
if (IoUtils::isRelativePath(qmakespec)) {
- for (const QString &root : qAsConst(m_mkspecPaths)) {
+ for (const QString &root : std::as_const(m_mkspecPaths)) {
QString mkspec = root + QLatin1Char('/') + qmakespec;
if (IoUtils::exists(mkspec)) {
qmakespec = mkspec;
@@ -1501,7 +1475,7 @@ void QMakeEvaluator::updateMkspecPaths()
for (const QString &it : paths)
ret << it + concat;
- for (const QString &it : qAsConst(m_qmakepath))
+ for (const QString &it : std::as_const(m_qmakepath))
ret << it + concat;
if (!m_buildRoot.isEmpty())
@@ -1542,7 +1516,7 @@ void QMakeEvaluator::updateFeaturePaths()
for (const QString &item : items)
feature_bases << (item + mkspecs_concat);
- for (const QString &item : qAsConst(m_qmakepath))
+ for (const QString &item : std::as_const(m_qmakepath))
feature_bases << (item + mkspecs_concat);
if (!m_qmakespec.isEmpty()) {
@@ -1564,21 +1538,21 @@ void QMakeEvaluator::updateFeaturePaths()
feature_bases << (m_option->propertyValue(ProKey("QT_HOST_DATA/get")) + mkspecs_concat);
feature_bases << (m_option->propertyValue(ProKey("QT_HOST_DATA/src")) + mkspecs_concat);
- for (const QString &fb : qAsConst(feature_bases)) {
+ for (const QString &fb : std::as_const(feature_bases)) {
const auto sfxs = values(ProKey("QMAKE_PLATFORM"));
for (const ProString &sfx : sfxs)
feature_roots << (fb + features_concat + sfx + QLatin1Char('/'));
feature_roots << (fb + features_concat);
}
- for (int i = 0; i < feature_roots.count(); ++i)
- if (!feature_roots.at(i).endsWith((ushort)'/'))
- feature_roots[i].append((ushort)'/');
+ for (int i = 0; i < feature_roots.size(); ++i)
+ if (!feature_roots.at(i).endsWith(QLatin1Char('/')))
+ feature_roots[i].append(QLatin1Char('/'));
feature_roots.removeDuplicates();
QStringList ret;
- for (const QString &root : qAsConst(feature_roots))
+ for (const QString &root : std::as_const(feature_roots))
if (IoUtils::exists(root))
ret << root;
m_featureRoots = new QMakeFeatureRoots(ret);
@@ -1596,7 +1570,7 @@ ProString QMakeEvaluator::propertyValue(const ProKey &name) const
ProFile *QMakeEvaluator::currentProFile() const
{
- if (m_profileStack.count() > 0)
+ if (m_profileStack.size() > 0)
return m_profileStack.top();
return nullptr;
}
@@ -1637,7 +1611,7 @@ bool QMakeEvaluator::isActiveConfig(QStringView config, bool regex)
return m_hostBuild;
if (regex && (config.contains(QLatin1Char('*')) || config.contains(QLatin1Char('?')))) {
- QRegularExpression re(QRegularExpression::wildcardToRegularExpression(config.toString()));
+ auto re = QRegularExpression::fromWildcard(config.toString());
// mkspecs
if (re.match(m_qmakespecName).hasMatch())
@@ -1713,18 +1687,18 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateFunction(
if (m_valuemapStack.size() >= 100) {
evalError(fL1S("Ran into infinite recursion (depth > 100)."));
- vr = ReturnFalse;
+ vr = ReturnError;
} else {
m_valuemapStack.push(ProValueMap());
m_locationStack.push(m_current);
ProStringList args;
- for (int i = 0; i < argumentsList.count(); ++i) {
+ for (int i = 0; i < argumentsList.size(); ++i) {
args += argumentsList[i];
m_valuemapStack.top()[ProKey(QString::number(i+1))] = argumentsList[i];
}
m_valuemapStack.top()[statics.strARGS] = args;
- m_valuemapStack.top()[statics.strARGC] = ProStringList(ProString(QString::number(argumentsList.count())));
+ m_valuemapStack.top()[statics.strARGC] = ProStringList(ProString(QString::number(argumentsList.size())));
vr = visitProBlock(func.pro(), func.tokPtr());
if (vr == ReturnReturn)
vr = ReturnTrue;
diff --git a/src/linguist/shared/qmakeevaluator.h b/src/linguist/shared/qmakeevaluator.h
index 5079173a9..2889ac0be 100644
--- a/src/linguist/shared/qmakeevaluator.h
+++ b/src/linguist/shared/qmakeevaluator.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QMAKEEVALUATOR_H
#define QMAKEEVALUATOR_H
diff --git a/src/linguist/shared/qmakeevaluator_p.h b/src/linguist/shared/qmakeevaluator_p.h
index 073d33989..ea18c3b45 100644
--- a/src/linguist/shared/qmakeevaluator_p.h
+++ b/src/linguist/shared/qmakeevaluator_p.h
@@ -1,38 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QMAKEEVALUATOR_P_H
#define QMAKEEVALUATOR_P_H
#include "proitems.h"
-#include <qregularexpression.h>
-
#define debugMsg if (!m_debugLevel) {} else debugMsgInternal
#define traceMsg if (!m_debugLevel) {} else traceMsgInternal
#ifdef PROEVALUATOR_DEBUG
@@ -109,7 +82,7 @@ extern QMakeStatics statics;
}
-Q_DECLARE_TYPEINFO(QMakeInternal::QMakeBuiltin, Q_MOVABLE_TYPE);
+Q_DECLARE_TYPEINFO(QMakeInternal::QMakeBuiltin, Q_RELOCATABLE_TYPE);
QT_END_NAMESPACE
diff --git a/src/linguist/shared/qmakeglobals.cpp b/src/linguist/shared/qmakeglobals.cpp
index f6aad6f2c..e05d33c7c 100644
--- a/src/linguist/shared/qmakeglobals.cpp
+++ b/src/linguist/shared/qmakeglobals.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qmakeglobals.h"
@@ -51,7 +26,7 @@
#include <unistd.h>
#include <sys/utsname.h>
#else
-#include <windows.h>
+#include <qt_windows.h>
#endif
#include <stdio.h>
#include <stdlib.h>
@@ -103,11 +78,18 @@ QString QMakeGlobals::cleanSpec(QMakeCmdLineParserState &state, const QString &s
return ret;
}
+/*
+ * Return value meanings:
+ * ArgumentUnknown The argument at *pos was not handled by this function.
+ * Leave it to the caller to handle this argument.
+ * ArgumentMalformed There was an error detected.
+ * ArgumentsOk All arguments were known. There are no arguments left to handle.
+ */
QMakeGlobals::ArgumentReturn QMakeGlobals::addCommandLineArguments(
QMakeCmdLineParserState &state, QStringList &args, int *pos)
{
enum { ArgNone, ArgConfig, ArgSpec, ArgXSpec, ArgTmpl, ArgTmplPfx, ArgCache, ArgQtConf } argState = ArgNone;
- for (; *pos < args.count(); (*pos)++) {
+ for (; *pos < args.size(); (*pos)++) {
QString arg = args.at(*pos);
switch (argState) {
case ArgConfig:
@@ -186,7 +168,7 @@ void QMakeGlobals::commitCommandLineArguments(QMakeCmdLineParserState &state)
{
if (!state.extraargs.isEmpty()) {
QString extra = fL1S("QMAKE_EXTRA_ARGS =");
- for (const QString &ea : qAsConst(state.extraargs))
+ for (const QString &ea : std::as_const(state.extraargs))
extra += QLatin1Char(' ') + QMakeEvaluator::quoteValue(ProString(ea));
state.cmds[QMakeEvalBefore] << extra;
}
@@ -231,8 +213,8 @@ void QMakeGlobals::setDirectories(const QString &input_dir, const QString &outpu
QString dstpath = output_dir;
if (!dstpath.endsWith(QLatin1Char('/')))
dstpath += QLatin1Char('/');
- int srcLen = srcpath.length();
- int dstLen = dstpath.length();
+ int srcLen = srcpath.size();
+ int dstLen = dstpath.size();
int lastSl = -1;
while (++lastSl, --srcLen, --dstLen,
srcLen && dstLen && srcpath.at(srcLen) == dstpath.at(dstLen))
@@ -248,9 +230,9 @@ QString QMakeGlobals::shadowedPath(const QString &fileName) const
if (source_root.isEmpty())
return fileName;
if (fileName.startsWith(source_root)
- && (fileName.length() == source_root.length()
- || fileName.at(source_root.length()) == QLatin1Char('/'))) {
- return build_root + fileName.mid(source_root.length());
+ && (fileName.size() == source_root.size()
+ || fileName.at(source_root.size()) == QLatin1Char('/'))) {
+ return build_root + fileName.mid(source_root.size());
}
return QString();
}
@@ -261,7 +243,7 @@ QStringList QMakeGlobals::splitPathList(const QString &val) const
if (!val.isEmpty()) {
QString cwd(QDir::currentPath());
const QStringList vals = val.split(dirlist_sep, Qt::SkipEmptyParts);
- ret.reserve(vals.length());
+ ret.reserve(vals.size());
for (const QString &it : vals)
ret << IoUtils::resolvePath(cwd, it);
}
@@ -290,7 +272,7 @@ QString QMakeGlobals::expandEnvVars(const QString &str) const
startIndex = string.indexOf(QLatin1Char('$'), startIndex);
if (startIndex < 0)
break;
- if (string.length() < startIndex + 3)
+ if (string.size() < startIndex + 3)
break;
if (string.at(startIndex + 1) != QLatin1Char('(')) {
startIndex++;
@@ -301,7 +283,7 @@ QString QMakeGlobals::expandEnvVars(const QString &str) const
break;
QString value = getEnv(string.mid(startIndex + 2, endIndex - startIndex - 2));
string.replace(startIndex, endIndex - startIndex + 1, value);
- startIndex += value.length();
+ startIndex += value.size();
}
return string;
}
diff --git a/src/linguist/shared/qmakeglobals.h b/src/linguist/shared/qmakeglobals.h
index 3b6299a1b..437f13178 100644
--- a/src/linguist/shared/qmakeglobals.h
+++ b/src/linguist/shared/qmakeglobals.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QMAKEGLOBALS_H
#define QMAKEGLOBALS_H
diff --git a/src/linguist/shared/qmakeparser.cpp b/src/linguist/shared/qmakeparser.cpp
index 5ebda399f..5b799b5eb 100644
--- a/src/linguist/shared/qmakeparser.cpp
+++ b/src/linguist/shared/qmakeparser.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qmakeparser.h"
@@ -52,7 +27,7 @@ ProFileCache::ProFileCache()
ProFileCache::~ProFileCache()
{
- for (const Entry &ent : qAsConst(parsed_files))
+ for (const Entry &ent : std::as_const(parsed_files))
if (ent.pro)
ent.pro->deref();
QMakeVfs::deref();
@@ -291,7 +266,7 @@ void QMakeParser::putBlock(ushort *&tokPtr, const ushort *buf, uint len)
void QMakeParser::putHashStr(ushort *&pTokPtr, const ushort *buf, uint len)
{
- uint hash = ProString::hash((const QChar *)buf, len);
+ const size_t hash = ProString::hash((const QChar *)buf, len);
ushort *tokPtr = pTokPtr;
*tokPtr++ = (ushort)hash;
*tokPtr++ = (ushort)(hash >> 16);
@@ -305,7 +280,7 @@ void QMakeParser::finalizeHashStr(ushort *buf, uint len)
{
buf[-4] = TokHashLiteral;
buf[-1] = len;
- uint hash = ProString::hash((const QChar *)buf, len);
+ const size_t hash = ProString::hash((const QChar *)buf, len);
buf[-3] = (ushort)hash;
buf[-2] = (ushort)(hash >> 16);
}
@@ -359,7 +334,7 @@ void QMakeParser::read(ProFile *pro, QStringView in, int line, SubGrammar gramma
xprStack.reserve(10);
const ushort *cur = (const ushort *)in.data();
- const ushort *inend = cur + in.length();
+ const ushort *inend = cur + in.size();
m_canElse = false;
freshLine:
m_state = StNew;
@@ -372,9 +347,9 @@ void QMakeParser::read(ProFile *pro, QStringView in, int line, SubGrammar gramma
int wordCount = 0; // Number of words in currently accumulated expression
int lastIndent = 0; // Previous line's indentation, to detect accidental continuation abuse
bool lineMarked = true; // For in-expression markers
- ushort needSep = TokNewStr; // Met unquoted whitespace
- ushort quote = 0;
- ushort term = 0;
+ char16_t needSep = TokNewStr; // Met unquoted whitespace
+ char16_t quote = 0;
+ char16_t term = 0;
Context context;
ushort *ptr;
@@ -450,7 +425,7 @@ void QMakeParser::read(ProFile *pro, QStringView in, int line, SubGrammar gramma
}
forever {
- ushort c;
+ char16_t c;
// First, skip leading whitespace
for (indent = 0; ; ++cur, ++indent) {
@@ -581,7 +556,7 @@ void QMakeParser::read(ProFile *pro, QStringView in, int line, SubGrammar gramma
&buf, &xprBuff, &tokPtr, &tokBuff, cur, in)) {
if (rtok == TokVariable || rtok == TokProperty) {
xprPtr[-4] = tok;
- uint hash = ProString::hash((const QChar *)xprPtr, tlen);
+ const size_t hash = ProString::hash((const QChar *)xprPtr, tlen);
xprPtr[-3] = (ushort)hash;
xprPtr[-2] = (ushort)(hash >> 16);
xprPtr[-1] = tlen;
@@ -621,7 +596,7 @@ void QMakeParser::read(ProFile *pro, QStringView in, int line, SubGrammar gramma
if (c != term) {
parseError(fL1S("Missing %1 terminator [found %2]")
.arg(QChar(term))
- .arg(c ? QString(c) : QString::fromLatin1("end-of-line")));
+ .arg(c ? QString(QChar(c)) : QString::fromLatin1("end-of-line")));
m_inError = true;
// Just parse on, as if there was a terminator ...
} else {
@@ -636,7 +611,7 @@ void QMakeParser::read(ProFile *pro, QStringView in, int line, SubGrammar gramma
}
} else if (c == '\\') {
static const char symbols[] = "[]{}()$\\'\"";
- ushort c2;
+ char16_t c2;
if (cur != end && !((c2 = *cur) & 0xff00) && strchr(symbols, c2)) {
c = c2;
cur++;
@@ -757,7 +732,7 @@ void QMakeParser::read(ProFile *pro, QStringView in, int line, SubGrammar gramma
if (!m_blockstack.top().braceLevel) {
parseError(fL1S("Excess closing brace."));
} else if (!--m_blockstack.top().braceLevel
- && m_blockstack.count() != 1) {
+ && m_blockstack.size() != 1) {
leaveScope(tokPtr);
m_state = StNew;
m_canElse = false;
@@ -1271,7 +1246,7 @@ bool QMakeParser::resolveVariable(ushort *xprPtr, int tlen, int needSep, ushort
// The string is typically longer than the variable reference, so we need
// to ensure that there is enough space in the output buffer - as unlikely
// as an overflow is to actually happen in practice.
- int need = (in.length() - (cur - (const ushort *)in.constData()) + 2) * 5 + out.length();
+ int need = (in.size() - (cur - (const ushort *)in.constData()) + 2) * 5 + out.size();
int tused = *tokPtr - (ushort *)tokBuff->constData();
int xused;
int total;
@@ -1302,9 +1277,9 @@ bool QMakeParser::resolveVariable(ushort *xprPtr, int tlen, int needSep, ushort
}
xprPtr -= 2; // Was set up for variable reference
xprPtr[-2] = TokLiteral | needSep;
- xprPtr[-1] = out.length();
- memcpy(xprPtr, out.constData(), out.length() * 2);
- *ptr = xprPtr + out.length();
+ xprPtr[-1] = out.size();
+ memcpy(xprPtr, out.constData(), out.size() * 2);
+ *ptr = xprPtr + out.size();
return true;
}
@@ -1549,7 +1524,8 @@ static bool getBlock(const ushort *tokens, int limit, int &offset, QString *outS
ok = getSubBlock(tokens, limit, offset, outStr, indent, "block");
break;
default:
- Q_ASSERT(!"unhandled token");
+ // unhandled token
+ Q_UNREACHABLE();
}
}
if (!ok)
diff --git a/src/linguist/shared/qmakeparser.h b/src/linguist/shared/qmakeparser.h
index 39daf2bbd..a5a1192ec 100644
--- a/src/linguist/shared/qmakeparser.h
+++ b/src/linguist/shared/qmakeparser.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QMAKEPARSER_H
#define QMAKEPARSER_H
@@ -230,7 +205,7 @@ private:
};
#if !defined(__GNUC__) || __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 3)
-Q_DECLARE_TYPEINFO(QMakeParser::BlockScope, Q_MOVABLE_TYPE);
+Q_DECLARE_TYPEINFO(QMakeParser::BlockScope, Q_RELOCATABLE_TYPE);
Q_DECLARE_TYPEINFO(QMakeParser::Context, Q_PRIMITIVE_TYPE);
#endif
diff --git a/src/linguist/shared/qmakevfs.cpp b/src/linguist/shared/qmakevfs.cpp
index 241cd4ee6..a8517de0f 100644
--- a/src/linguist/shared/qmakevfs.cpp
+++ b/src/linguist/shared/qmakevfs.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qmakevfs.h"
@@ -102,10 +77,10 @@ int QMakeVfs::idForFileName(const QString &fn, VfsFlags flags)
return id;
}
#endif
- if (!(flags & VfsAccessedOnly)) {
#ifdef PROPARSER_THREAD_SAFE
- QMutexLocker locker(&s_mutex);
+ QMutexLocker locker(&s_mutex);
#endif
+ if (!(flags & VfsAccessedOnly)) {
int &id = s_fileIdMap[fn];
if (!id) {
id = ++s_fileIdCounter;
diff --git a/src/linguist/shared/qmakevfs.h b/src/linguist/shared/qmakevfs.h
index 0fbe8461d..56bda3d0a 100644
--- a/src/linguist/shared/qmakevfs.h
+++ b/src/linguist/shared/qmakevfs.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QMAKEVFS_H
#define QMAKEVFS_H
diff --git a/src/linguist/shared/qph.cpp b/src/linguist/shared/qph.cpp
index 9f1b0f2b4..6ecc518bc 100644
--- a/src/linguist/shared/qph.cpp
+++ b/src/linguist/shared/qph.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "translator.h"
@@ -111,10 +86,10 @@ static bool loadQPH(Translator &translator, QIODevice &dev, ConversionData &)
return reader.read(translator);
}
-static QString protect(const QString &str)
+static QString qphProtect(const QString &str)
{
QString result;
- result.reserve(str.length() * 12 / 10);
+ result.reserve(str.size() * 12 / 10);
for (int i = 0; i != str.size(); ++i) {
uint c = str.at(i).unicode();
switch (c) {
@@ -156,14 +131,14 @@ static bool saveQPH(const Translator &translator, QIODevice &dev, ConversionData
t << ">\n";
for (const TranslatorMessage &msg : translator.messages()) {
t << "<phrase>\n";
- t << " <source>" << protect(msg.sourceText()) << "</source>\n";
+ t << " <source>" << qphProtect(msg.sourceText()) << "</source>\n";
QString str = msg.translations().join(QLatin1Char('@'));
str.replace(QChar(Translator::BinaryVariantSeparator),
QChar(Translator::TextVariantSeparator));
- t << " <target>" << protect(str)
+ t << " <target>" << qphProtect(str)
<< "</target>\n";
if (!msg.comment().isEmpty())
- t << " <definition>" << protect(msg.comment()) << "</definition>\n";
+ t << " <definition>" << qphProtect(msg.comment()) << "</definition>\n";
t << "</phrase>\n";
}
t << "</QPH>\n";
diff --git a/src/linguist/shared/qrcreader.cpp b/src/linguist/shared/qrcreader.cpp
index ce729a7ff..2f450106f 100644
--- a/src/linguist/shared/qrcreader.cpp
+++ b/src/linguist/shared/qrcreader.cpp
@@ -1,42 +1,14 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qrcreader.h"
+#include "fmt.h"
#include <QtCore/qcoreapplication.h>
#include <QtCore/qfileinfo.h>
#include <QtCore/qxmlstream.h>
-class FMT {
- Q_DECLARE_TR_FUNCTIONS(Linguist)
-};
-
-static bool isSupportedExtension(const QString &ext)
+bool isSupportedExtension(const QString &ext)
{
return ext == QLatin1String("qml")
|| ext == QLatin1String("js") || ext == QLatin1String("qs")
@@ -56,13 +28,13 @@ ReadQrcResult readQrcFile(const QString &resourceFile, const QString &content)
QXmlStreamReader::TokenType t = reader.readNext();
switch (t) {
case QXmlStreamReader::StartElement:
- if (curDepth >= tagStack.count() || reader.name() != tagStack.at(curDepth)) {
+ if (curDepth >= tagStack.size() || reader.name() != tagStack.at(curDepth)) {
result.errorString = FMT::tr("unexpected <%1> tag\n")
.arg(reader.name().toString());
result.line = reader.lineNumber();
return result;
}
- if (++curDepth == tagStack.count())
+ if (++curDepth == tagStack.size())
isFileTag = true;
break;
diff --git a/src/linguist/shared/qrcreader.h b/src/linguist/shared/qrcreader.h
index 8508b377e..6a0886c9c 100644
--- a/src/linguist/shared/qrcreader.h
+++ b/src/linguist/shared/qrcreader.h
@@ -1,30 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef QRCREADER_H
+#define QRCREADER_H
#include <QtCore/qstring.h>
#include <QtCore/qstringlist.h>
@@ -40,3 +18,7 @@ public:
};
ReadQrcResult readQrcFile(const QString &resourceFile, const QString &content);
+
+bool isSupportedExtension(const QString &ext);
+
+#endif // QRCREADER_H
diff --git a/src/linguist/shared/registry.cpp b/src/linguist/shared/registry.cpp
new file mode 100644
index 000000000..7ab0c71fe
--- /dev/null
+++ b/src/linguist/shared/registry.cpp
@@ -0,0 +1,133 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include <QtCore/qstringlist.h>
+#include "registry_p.h"
+
+QT_BEGIN_NAMESPACE
+
+#ifdef Q_OS_WIN32
+/*
+ Returns the path part of a registry key.
+ e.g.
+ For a key
+ "Software\\Microsoft\\VisualStudio\\8.0\\Setup\\VC\\ProductDir"
+ it returns
+ "Software\\Microsoft\\VisualStudio\\8.0\\Setup\\VC\\"
+*/
+static QString keyPath(const QString &rKey)
+{
+ int idx = rKey.lastIndexOf(QLatin1Char('\\'));
+ if (idx == -1)
+ return QString();
+ return rKey.left(idx + 1);
+}
+
+/*
+ Returns the name part of a registry key.
+ e.g.
+ For a key
+ "Software\\Microsoft\\VisualStudio\\8.0\\Setup\\VC\\ProductDir"
+ it returns
+ "ProductDir"
+*/
+static QString keyName(const QString &rKey)
+{
+ int idx = rKey.lastIndexOf(QLatin1Char('\\'));
+ if (idx == -1)
+ return rKey;
+
+ QString res(rKey.mid(idx + 1));
+ if (res == QLatin1String("Default") || res == QLatin1String("."))
+ res = QString();
+ return res;
+}
+#endif
+
+QString qt_readRegistryKey(HKEY parentHandle, const QString &rSubkey, unsigned long options)
+{
+ QString result;
+
+#ifdef Q_OS_WIN32
+ QString rSubkeyName = keyName(rSubkey);
+ QString rSubkeyPath = keyPath(rSubkey);
+
+ HKEY handle = nullptr;
+ LONG res = RegOpenKeyEx(parentHandle, (wchar_t*)rSubkeyPath.utf16(), 0,
+ KEY_READ | options, &handle);
+
+ if (res != ERROR_SUCCESS)
+ return QString();
+
+ // get the size and type of the value
+ DWORD dataType;
+ DWORD dataSize;
+ res = RegQueryValueEx(handle, (wchar_t*)rSubkeyName.utf16(), nullptr, &dataType, nullptr, &dataSize);
+ if (res != ERROR_SUCCESS) {
+ RegCloseKey(handle);
+ return QString();
+ }
+
+ // get the value
+ QByteArray data(dataSize, 0);
+ res = RegQueryValueEx(handle, (wchar_t*)rSubkeyName.utf16(), nullptr, nullptr,
+ reinterpret_cast<unsigned char*>(data.data()), &dataSize);
+ if (res != ERROR_SUCCESS) {
+ RegCloseKey(handle);
+ return QString();
+ }
+
+ switch (dataType) {
+ case REG_EXPAND_SZ:
+ case REG_SZ: {
+ result = QString::fromWCharArray(((const wchar_t *)data.constData()));
+ break;
+ }
+
+ case REG_MULTI_SZ: {
+ QStringList l;
+ int i = 0;
+ for (;;) {
+ QString s = QString::fromWCharArray((const wchar_t *)data.constData() + i);
+ i += s.length() + 1;
+
+ if (s.isEmpty())
+ break;
+ l.append(s);
+ }
+ result = l.join(QLatin1String(", "));
+ break;
+ }
+
+ case REG_NONE:
+ case REG_BINARY: {
+ result = QString::fromWCharArray((const wchar_t *)data.constData(), data.size() / 2);
+ break;
+ }
+
+ case REG_DWORD_BIG_ENDIAN:
+ case REG_DWORD: {
+ Q_ASSERT(data.size() == sizeof(int));
+ int i;
+ memcpy((char*)&i, data.constData(), sizeof(int));
+ result = QString::number(i);
+ break;
+ }
+
+ default:
+ qWarning("QSettings: unknown data %u type in windows registry", quint32(dataType));
+ break;
+ }
+
+ RegCloseKey(handle);
+#else
+ Q_UNUSED(parentHandle);
+ Q_UNUSED(rSubkey);
+ Q_UNUSED(options);
+#endif
+
+ return result;
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/linguist/shared/registry_p.h b/src/linguist/shared/registry_p.h
new file mode 100644
index 000000000..00f2431f6
--- /dev/null
+++ b/src/linguist/shared/registry_p.h
@@ -0,0 +1,48 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef QT_WINDOWS_REGISTRY_H
+#define QT_WINDOWS_REGISTRY_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/qglobal.h>
+
+#ifdef Q_OS_WIN32
+ #include <QtCore/qt_windows.h>
+#else
+ typedef void* HKEY;
+#endif
+
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+/**
+ * Read a value from the Windows registry.
+ *
+ * If the key is not found, or the registry cannot be accessed (for example
+ * if this code is compiled for a platform other than Windows), a null
+ * string is returned.
+ *
+ * 32-bit code reads from the registry's 32 bit view (Wow6432Node),
+ * 64 bit code reads from the 64 bit view.
+ * Pass KEY_WOW64_32KEY to access the 32 bit view regardless of the
+ * application's architecture, KEY_WOW64_64KEY respectively.
+ */
+QString qt_readRegistryKey(HKEY parentHandle, const QString &rSubkey,
+ unsigned long options = 0);
+
+QT_END_NAMESPACE
+
+#endif // QT_WINDOWS_REGISTRY_H
+
diff --git a/src/linguist/shared/runqttool.cpp b/src/linguist/shared/runqttool.cpp
index 1bf043a3e..f0be67c8d 100644
--- a/src/linguist/shared/runqttool.cpp
+++ b/src/linguist/shared/runqttool.cpp
@@ -1,32 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "runqttool.h"
+#include "fmt.h"
#include "profileutils.h"
@@ -41,21 +17,16 @@
#include <sys/wait.h>
#endif
-class FMT {
- Q_DECLARE_TR_FUNCTIONS(Linguist)
-};
-
-static QString qtToolFilePath(const QString &toolName)
+static QString qtToolFilePath(const QString &toolName, QLibraryInfo::LibraryPath location)
{
- QString filePath = QCoreApplication::instance()->applicationDirPath()
- + QLatin1Char('/') + toolName;
+ QString filePath = QLibraryInfo::path(location) + QLatin1Char('/') + toolName;
#ifdef Q_OS_WIN
filePath.append(QLatin1String(".exe"));
#endif
return QDir::cleanPath(filePath);
}
-static void printErr(const QString &out)
+static void rtPrintErr(const QString &out)
{
std::cerr << qUtf8Printable(out);
}
@@ -89,10 +60,11 @@ static QString commandLineForSystem(const QString &program,
+ shellQuoted(arguments).join(QLatin1Char(' '));
}
-void runQtTool(const QString &toolName, const QStringList &arguments)
+static int runQtToolHelper(const QString &toolName, const QStringList &arguments,
+ QLibraryInfo::LibraryPath location)
{
int exitCode = 0;
- const QString commandLine = commandLineForSystem(qtToolFilePath(toolName), arguments);
+ const QString commandLine = commandLineForSystem(qtToolFilePath(toolName, location), arguments);
#if defined(Q_OS_WIN)
exitCode = _wsystem(reinterpret_cast<const wchar_t *>(commandLine.utf16()));
#elif defined(Q_OS_UNIX)
@@ -101,6 +73,25 @@ void runQtTool(const QString &toolName, const QStringList &arguments)
#else
exitCode = std::system(qPrintable(commandLine));
#endif
+ return exitCode;
+}
+
+void runQtTool(const QString &toolName, const QStringList &arguments,
+ QLibraryInfo::LibraryPath location)
+{
+ const int exitCode = runQtToolHelper(toolName, arguments, location);
+ if (exitCode != 0)
+ exit(exitCode);
+}
+
+static int runInternalQtToolHelper(const QString &toolName, const QStringList &arguments)
+{
+ return runQtToolHelper(toolName, arguments, QLibraryInfo::LibraryExecutablesPath);
+}
+
+void runInternalQtTool(const QString &toolName, const QStringList &arguments)
+{
+ const int exitCode = runInternalQtToolHelper(toolName, arguments);
if (exitCode != 0)
exit(exitCode);
}
@@ -109,11 +100,15 @@ std::unique_ptr<QTemporaryFile> createProjectDescription(QStringList args)
{
std::unique_ptr<QTemporaryFile> file(new QTemporaryFile(QStringLiteral("XXXXXX.json")));
if (!file->open()) {
- printErr(FMT::tr("Cannot create temporary file: %1\n").arg(file->errorString()));
+ rtPrintErr(FMT::tr("Cannot create temporary file: %1\n").arg(file->errorString()));
exit(1);
}
file->close();
args << QStringLiteral("-out") << file->fileName();
- runQtTool(QStringLiteral("lprodump"), args);
+ const int exitCode = runInternalQtToolHelper(QStringLiteral("lprodump"), args);
+ if (exitCode != 0) {
+ file.reset();
+ exit(exitCode);
+ }
return file;
}
diff --git a/src/linguist/shared/runqttool.h b/src/linguist/shared/runqttool.h
index 16fe54fde..b8553c334 100644
--- a/src/linguist/shared/runqttool.h
+++ b/src/linguist/shared/runqttool.h
@@ -1,41 +1,19 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef RUNQTTOOL_H
#define RUNQTTOOL_H
+#include <QtCore/qlibraryinfo.h>
#include <QtCore/qstring.h>
#include <QtCore/qstringlist.h>
#include <QtCore/qtemporaryfile.h>
#include <memory>
-void runQtTool(const QString &toolName, const QStringList &arguments);
+void runQtTool(const QString &toolName, const QStringList &arguments,
+ QLibraryInfo::LibraryPath location = QLibraryInfo::BinariesPath);
+void runInternalQtTool(const QString &toolName, const QStringList &arguments);
std::unique_ptr<QTemporaryFile> createProjectDescription(QStringList args);
#endif // RUNQTTOOL_H
diff --git a/src/linguist/shared/simtexth.cpp b/src/linguist/shared/simtexth.cpp
index feb570178..7d978f475 100644
--- a/src/linguist/shared/simtexth.cpp
+++ b/src/linguist/shared/simtexth.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "simtexth.h"
#include "translator.h"
@@ -171,7 +146,7 @@ static inline CoMatrix intersection(const CoMatrix &m, const CoMatrix &n)
StringSimilarityMatcher::StringSimilarityMatcher(const QString &stringToMatch)
: m_cm(stringToMatch)
{
- m_length = stringToMatch.length();
+ m_length = stringToMatch.size();
}
int StringSimilarityMatcher::getSimilarityScore(const QString &strCandidate)
diff --git a/src/linguist/shared/simtexth.h b/src/linguist/shared/simtexth.h
index 70c889662..1d0ebcb07 100644
--- a/src/linguist/shared/simtexth.h
+++ b/src/linguist/shared/simtexth.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef SIMTEXTH_H
#define SIMTEXTH_H
diff --git a/src/linguist/shared/translator.cpp b/src/linguist/shared/translator.cpp
index ced5df322..156208b3f 100644
--- a/src/linguist/shared/translator.cpp
+++ b/src/linguist/shared/translator.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "translator.h"
@@ -43,10 +18,10 @@
#include <QtCore/QDir>
#include <QtCore/QFile>
#include <QtCore/QFileInfo>
+#include <QtCore/QLocale>
#include <QtCore/QRegularExpression>
#include <QtCore/QTextStream>
-#include <private/qlocale_p.h>
#include <private/qtranslator_p.h>
QT_BEGIN_NAMESPACE
@@ -105,7 +80,7 @@ void Translator::ensureIndexed() const
m_ctxCmtIdx.clear();
m_idMsgIdx.clear();
m_msgIdx.clear();
- for (int i = 0; i < m_messages.count(); i++)
+ for (int i = 0; i < m_messages.size(); i++)
addIndex(i, m_messages.at(i));
}
}
@@ -124,7 +99,7 @@ void Translator::replaceSorted(const TranslatorMessage &msg)
static QString elidedId(const QString &id, int len)
{
- return id.length() <= len ? id : id.left(len - 5) + QLatin1String("[...]");
+ return id.size() <= len ? id : id.left(len - 5) + QLatin1String("[...]");
}
static QString makeMsgId(const TranslatorMessage &msg)
@@ -180,7 +155,7 @@ void Translator::extend(const TranslatorMessage &msg, ConversionData &cd)
void Translator::insert(int idx, const TranslatorMessage &msg)
{
if (m_indexOk) {
- if (idx == m_messages.count())
+ if (idx == m_messages.size())
addIndex(idx, msg);
else
m_indexOk = false;
@@ -190,7 +165,7 @@ void Translator::insert(int idx, const TranslatorMessage &msg)
void Translator::append(const TranslatorMessage &msg)
{
- insert(m_messages.count(), msg);
+ insert(m_messages.size(), msg);
}
void Translator::appendSorted(const TranslatorMessage &msg)
@@ -212,7 +187,7 @@ void Translator::appendSorted(const TranslatorMessage &msg)
// Working vars
int prevLine = 0;
int curIdx = 0;
- for (const TranslatorMessage &mit : qAsConst(m_messages)) {
+ for (const TranslatorMessage &mit : std::as_const(m_messages)) {
bool sameFile = mit.fileName() == msg.fileName() && mit.context() == msg.context();
int curLine;
if (sameFile && (curLine = mit.lineNumber()) >= prevLine) {
@@ -257,7 +232,7 @@ static QString guessFormat(const QString &filename, const QString &format)
if (format != QLatin1String("auto"))
return format;
- for (const Translator::FileFormat &fmt : qAsConst(Translator::registeredFileFormats())) {
+ for (const Translator::FileFormat &fmt : std::as_const(Translator::registeredFileFormats())) {
if (filename.endsWith(QLatin1Char('.') + fmt.extension, Qt::CaseInsensitive))
return fmt.extension;
}
@@ -294,7 +269,7 @@ bool Translator::load(const QString &filename, ConversionData &cd, const QString
QString fmt = guessFormat(filename, format);
- for (const FileFormat &format : qAsConst(registeredFileFormats())) {
+ for (const FileFormat &format : std::as_const(registeredFileFormats())) {
if (fmt == format.extension) {
if (format.loader)
return (*format.loader)(*this, file, cd);
@@ -335,7 +310,7 @@ bool Translator::save(const QString &filename, ConversionData &cd, const QString
QString fmt = guessFormat(filename, format);
cd.m_targetDir = QFileInfo(filename).absoluteDir();
- for (const FileFormat &format : qAsConst(registeredFileFormats())) {
+ for (const FileFormat &format : std::as_const(registeredFileFormats())) {
if (fmt == format.extension) {
if (format.saver)
return (*format.saver)(*this, file, cd);
@@ -349,21 +324,34 @@ bool Translator::save(const QString &filename, ConversionData &cd, const QString
return false;
}
-QString Translator::makeLanguageCode(QLocale::Language language, QLocale::Country country)
+QString Translator::makeLanguageCode(QLocale::Language language, QLocale::Territory territory)
{
- QString result = QLocalePrivate::languageToCode(language);
- if (language != QLocale::C && country != QLocale::AnyCountry) {
+ QString result = QLocale::languageToCode(language);
+ if (language != QLocale::C && territory != QLocale::AnyTerritory) {
result.append(QLatin1Char('_'));
- result.append(QLocalePrivate::countryToCode(country));
+ result.append(QLocale::territoryToCode(territory));
}
return result;
}
-void Translator::languageAndCountry(const QString &languageCode,
- QLocale::Language *lang, QLocale::Country *country)
+void Translator::languageAndTerritory(QStringView languageCode, QLocale::Language *langPtr,
+ QLocale::Territory *territoryPtr)
{
- QLocale::Script script;
- QLocalePrivate::getLangAndCountry(languageCode, *lang, script, *country);
+ 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));
+ } else {
+ language = QLocale::codeToLanguage(languageCode);
+ territory = QLocale(language).territory();
+ }
+
+ if (langPtr)
+ *langPtr = language;
+ if (territoryPtr)
+ *territoryPtr = territory;
}
int Translator::find(const TranslatorMessage &msg) const
@@ -466,7 +454,7 @@ void Translator::stripIdenticalSourceTranslations()
{
for (auto it = m_messages.begin(); it != m_messages.end(); ) {
// we need to have just one translation, and it be equal to the source
- if (it->translations().count() == 1 && it->translation() == it->sourceText())
+ if (it->translations().size() == 1 && it->translation() == it->sourceText())
it = m_messages.erase(it);
else
++it;
@@ -503,21 +491,30 @@ void Translator::dropUiLines()
}
}
-struct TranslatorMessageIdPtr {
- explicit TranslatorMessageIdPtr(const TranslatorMessage &tm)
+class TranslatorMessagePtrBase
+{
+public:
+ explicit TranslatorMessagePtrBase(const Translator *tor, int messageIndex)
+ : tor(tor), messageIndex(messageIndex)
{
- ptr = &tm;
}
inline const TranslatorMessage *operator->() const
{
- return ptr;
+ return &tor->message(messageIndex);
}
- const TranslatorMessage *ptr;
+ const Translator *tor;
+ const int messageIndex;
};
-Q_DECLARE_TYPEINFO(TranslatorMessageIdPtr, Q_MOVABLE_TYPE);
+class TranslatorMessageIdPtr : public TranslatorMessagePtrBase
+{
+public:
+ using TranslatorMessagePtrBase::TranslatorMessagePtrBase;
+};
+
+Q_DECLARE_TYPEINFO(TranslatorMessageIdPtr, Q_RELOCATABLE_TYPE);
inline size_t qHash(TranslatorMessageIdPtr tmp)
{
@@ -529,21 +526,13 @@ inline bool operator==(TranslatorMessageIdPtr tmp1, TranslatorMessageIdPtr tmp2)
return tmp1->id() == tmp2->id();
}
-struct TranslatorMessageContentPtr {
- explicit TranslatorMessageContentPtr(const TranslatorMessage &tm)
- {
- ptr = &tm;
- }
-
- inline const TranslatorMessage *operator->() const
- {
- return ptr;
- }
-
- const TranslatorMessage *ptr;
+class TranslatorMessageContentPtr : public TranslatorMessagePtrBase
+{
+public:
+ using TranslatorMessagePtrBase::TranslatorMessagePtrBase;
};
-Q_DECLARE_TYPEINFO(TranslatorMessageContentPtr, Q_MOVABLE_TYPE);
+Q_DECLARE_TYPEINFO(TranslatorMessageContentPtr, Q_RELOCATABLE_TYPE);
inline size_t qHash(TranslatorMessageContentPtr tmp)
{
@@ -566,33 +555,32 @@ inline bool operator==(TranslatorMessageContentPtr tmp1, TranslatorMessageConten
Translator::Duplicates Translator::resolveDuplicates()
{
- QList<int> duplicateIndices;
Duplicates dups;
- QHash<TranslatorMessageIdPtr, int> idRefs;
- QHash<TranslatorMessageContentPtr, int> contentRefs;
- for (int i = 0; i < m_messages.count(); ++i) {
+ QSet<TranslatorMessageIdPtr> idRefs;
+ QSet<TranslatorMessageContentPtr> contentRefs;
+ for (int i = 0; i < m_messages.size();) {
const TranslatorMessage &msg = m_messages.at(i);
TranslatorMessage *omsg;
int oi;
- QSet<int> *pDup;
+ DuplicateEntries *pDup;
if (!msg.id().isEmpty()) {
- const auto it = idRefs.constFind(TranslatorMessageIdPtr(msg));
+ const auto it = idRefs.constFind(TranslatorMessageIdPtr(this, i));
if (it != idRefs.constEnd()) {
- oi = *it;
+ oi = it->messageIndex;
omsg = &m_messages[oi];
pDup = &dups.byId;
goto gotDupe;
}
}
{
- const auto it = contentRefs.constFind(TranslatorMessageContentPtr(msg));
+ const auto it = contentRefs.constFind(TranslatorMessageContentPtr(this, i));
if (it != contentRefs.constEnd()) {
- oi = *it;
+ oi = it->messageIndex;
omsg = &m_messages[oi];
if (msg.id().isEmpty() || omsg->id().isEmpty()) {
if (!msg.id().isEmpty() && omsg->id().isEmpty()) {
omsg->setId(msg.id());
- idRefs[TranslatorMessageIdPtr(*omsg)] = oi;
+ idRefs.insert(TranslatorMessageIdPtr(this, oi));
}
pDup = &dups.byContents;
goto gotDupe;
@@ -601,21 +589,17 @@ Translator::Duplicates Translator::resolveDuplicates()
}
}
if (!msg.id().isEmpty())
- idRefs[TranslatorMessageIdPtr(msg)] = i;
- contentRefs[TranslatorMessageContentPtr(msg)] = i;
+ idRefs.insert(TranslatorMessageIdPtr(this, i));
+ contentRefs.insert(TranslatorMessageContentPtr(this, i));
+ ++i;
continue;
gotDupe:
- pDup->insert(oi);
+ (*pDup)[oi].append(msg.tsLineNumber());
if (!omsg->isTranslated() && msg.isTranslated())
omsg->setTranslations(msg.translations());
m_indexOk = false;
- // don't remove the duplicate entries yet to not mess up the pointers that
- // are in the hashes
- duplicateIndices.append(i);
+ m_messages.removeAt(i);
}
- // now remove the duplicates from the messages
- for (int i = duplicateIndices.size() - 1; i >= 0; --i)
- m_messages.removeAt(duplicateIndices.at(i));
return dups;
}
@@ -628,20 +612,36 @@ void Translator::reportDuplicates(const Duplicates &dupes,
std::cerr << "'\n(try -verbose for more info).\n";
} else {
std::cerr << "':\n";
- for (int i : dupes.byId)
- std::cerr << "\n* ID: " << qPrintable(message(i).id()) << std::endl;
- for (int j : dupes.byContents) {
- const TranslatorMessage &msg = message(j);
+ for (auto it = dupes.byId.begin(); it != dupes.byId.end(); ++it) {
+ const TranslatorMessage &msg = message(it.key());
+ std::cerr << "\n* ID: " << qPrintable(msg.id()) << std::endl;
+ reportDuplicatesLines(msg, it.value());
+ }
+ for (auto it = dupes.byContents.begin(); it != dupes.byContents.end(); ++it) {
+ const TranslatorMessage &msg = message(it.key());
std::cerr << "\n* Context: " << qPrintable(msg.context())
<< "\n* Source: " << qPrintable(msg.sourceText()) << std::endl;
if (!msg.comment().isEmpty())
std::cerr << "* Comment: " << qPrintable(msg.comment()) << std::endl;
+ reportDuplicatesLines(msg, it.value());
}
std::cerr << std::endl;
}
}
}
+void Translator::reportDuplicatesLines(const TranslatorMessage &msg,
+ const DuplicateEntries::value_type &dups) const
+{
+ if (msg.tsLineNumber() >= 0) {
+ std::cerr << "* Line in .ts file: " << msg.tsLineNumber() << std::endl;
+ for (int tsLineNumber : dups) {
+ if (tsLineNumber >= 0)
+ std::cerr << "* Duplicate at line: " << tsLineNumber << std::endl;
+ }
+ }
+}
+
// Used by lupdate to be able to search using absolute paths during merging
void Translator::makeFileNamesAbsolute(const QDir &originalPath)
{
@@ -670,11 +670,11 @@ QStringList Translator::normalizedTranslations(const TranslatorMessage &msg, int
// make sure that the stringlist always have the size of the
// language's current numerus, or 1 if its not plural
- if (translations.count() > numTranslations) {
- for (int i = translations.count(); i > numTranslations; --i)
+ if (translations.size() > numTranslations) {
+ for (int i = translations.size(); i > numTranslations; --i)
translations.removeLast();
- } else if (translations.count() < numTranslations) {
- for (int i = translations.count(); i < numTranslations; ++i)
+ } else if (translations.size() < numTranslations) {
+ for (int i = translations.size(); i < numTranslations; ++i)
translations.append(QString());
}
return translations;
@@ -684,22 +684,22 @@ void Translator::normalizeTranslations(ConversionData &cd)
{
bool truncated = false;
QLocale::Language l;
- QLocale::Country c;
- languageAndCountry(languageCode(), &l, &c);
+ QLocale::Territory c;
+ languageAndTerritory(languageCode(), &l, &c);
int numPlurals = 1;
if (l != QLocale::C) {
QStringList forms;
if (getNumerusInfo(l, c, 0, &forms, 0))
- numPlurals = forms.count(); // includes singular
+ numPlurals = forms.size(); // includes singular
}
- for (int i = 0; i < m_messages.count(); ++i) {
+ for (int i = 0; i < m_messages.size(); ++i) {
const TranslatorMessage &msg = m_messages.at(i);
QStringList tlns = msg.translations();
int ccnt = msg.isPlural() ? numPlurals : 1;
- if (tlns.count() != ccnt) {
- while (tlns.count() < ccnt)
+ if (tlns.size() != ccnt) {
+ while (tlns.size() < ccnt)
tlns.append(QString());
- while (tlns.count() > ccnt) {
+ while (tlns.size() > ccnt) {
tlns.removeLast();
truncated = true;
}
@@ -716,7 +716,7 @@ void Translator::normalizeTranslations(ConversionData &cd)
QString Translator::guessLanguageCodeFromFileName(const QString &filename)
{
QString str = filename;
- for (const FileFormat &format : qAsConst(registeredFileFormats())) {
+ for (const FileFormat &format : std::as_const(registeredFileFormats())) {
if (str.endsWith(format.extension)) {
str = str.left(str.size() - format.extension.size() - 1);
break;
diff --git a/src/linguist/shared/translator.h b/src/linguist/shared/translator.h
index 80bb201e1..8a0957fd2 100644
--- a/src/linguist/shared/translator.h
+++ b/src/linguist/shared/translator.h
@@ -1,35 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef METATRANSLATOR_H
#define METATRANSLATOR_H
#include "translatormessage.h"
+#include "fmt.h"
#include <QCoreApplication>
#include <QDir>
@@ -42,10 +18,6 @@
QT_BEGIN_NAMESPACE
-class FMT {
- Q_DECLARE_TR_FUNCTIONS(Linguist)
-};
-
class QIODevice;
// A struct of "interesting" data passed to and from the load and save routines
@@ -80,7 +52,7 @@ public:
QString m_unTrPrefix; // QM specific
QString m_sourceFileName;
QString m_targetFileName;
- QString m_compileCommandsPath;
+ QString m_compilationDatabaseDir;
QStringList m_excludes;
QDir m_sourceDir;
QDir m_targetDir; // FIXME: TS specific
@@ -95,6 +67,7 @@ public:
bool m_noUiLines;
bool m_idBased;
TranslatorSaveMode m_saveMode;
+ QStringList m_rootDirs;
};
class TMMKey {
@@ -105,7 +78,7 @@ public:
{ return context == o.context && source == o.source && comment == o.comment; }
QString context, source, comment;
};
-Q_DECLARE_TYPEINFO(TMMKey, Q_MOVABLE_TYPE);
+Q_DECLARE_TYPEINFO(TMMKey, Q_RELOCATABLE_TYPE);
inline size_t qHash(const TMMKey &key)
{
return qHash(key.context) ^ qHash(key.source) ^ qHash(key.comment);
@@ -141,9 +114,15 @@ public:
void makeFileNamesAbsolute(const QDir &originalPath);
bool translationsExist() const;
- struct Duplicates { QSet<int> byId, byContents; };
+ using DuplicateEntries = QHash<int, QVector<int>>;
+ struct Duplicates
+ {
+ DuplicateEntries byId, byContents;
+ };
Duplicates resolveDuplicates();
void reportDuplicates(const Duplicates &dupes, const QString &fileName, bool verbose);
+ void reportDuplicatesLines(const TranslatorMessage &msg,
+ const DuplicateEntries::value_type &dups) const;
QString languageCode() const { return m_language; }
QString sourceLanguageCode() const { return m_sourceLanguage; }
@@ -152,9 +131,9 @@ public:
void setLocationsType(LocationsType lt) { m_locationsType = lt; }
LocationsType locationsType() const { return m_locationsType; }
- static QString makeLanguageCode(QLocale::Language language, QLocale::Country country);
- static void languageAndCountry(const QString &languageCode,
- QLocale::Language *lang, QLocale::Country *country);
+ static QString makeLanguageCode(QLocale::Language language, QLocale::Territory territory);
+ static void languageAndTerritory(QStringView languageCode, QLocale::Language *langPtr,
+ QLocale::Territory *territoryPtr);
void setLanguageCode(const QString &languageCode) { m_language = languageCode; }
void setSourceLanguageCode(const QString &languageCode) { m_sourceLanguage = languageCode; }
static QString guessLanguageCodeFromFileName(const QString &fileName);
@@ -216,9 +195,9 @@ private:
LocationsType m_locationsType;
// A string beginning with a 2 or 3 letter language code (ISO 639-1
- // or ISO-639-2), followed by the optional country variant to distinguish
- // between country-specific variations of the language. The language code
- // and country code are always separated by '_'
+ // or ISO-639-2), followed by the optional territory variant to distinguish
+ // between territory-specific variations of the language. The language code
+ // and territory code are always separated by '_'
// Note that the language part can also be a 3-letter ISO 639-2 code.
// Legal examples:
// 'pt' portuguese, assumes portuguese from portugal
@@ -235,8 +214,8 @@ private:
mutable QHash<TMMKey, int> m_msgIdx;
};
-bool getNumerusInfo(QLocale::Language language, QLocale::Country country,
- QByteArray *rules, QStringList *forms, const char **gettextRules);
+bool getNumerusInfo(QLocale::Language language, QLocale::Territory territory, QByteArray *rules,
+ QStringList *forms, const char **gettextRules);
QString getNumerusInfoString();
diff --git a/src/linguist/shared/translatormessage.cpp b/src/linguist/shared/translatormessage.cpp
index fbdb88b31..95fbb0aac 100644
--- a/src/linguist/shared/translatormessage.cpp
+++ b/src/linguist/shared/translatormessage.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "translatormessage.h"
@@ -74,7 +49,7 @@ void TranslatorMessage::addReferenceUniq(const QString &fileName, int lineNumber
if (fileName == m_fileName && lineNumber == m_lineNumber)
return;
if (!m_extraRefs.isEmpty()) { // Rather common case, so special-case it
- for (const Reference &ref : qAsConst(m_extraRefs)) {
+ for (const Reference &ref : std::as_const(m_extraRefs)) {
if (fileName == ref.fileName() && lineNumber == ref.lineNumber())
return;
}
diff --git a/src/linguist/shared/translatormessage.h b/src/linguist/shared/translatormessage.h
index 3c3726d2a..53c739e29 100644
--- a/src/linguist/shared/translatormessage.h
+++ b/src/linguist/shared/translatormessage.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef TRANSLATORMESSAGE_H
#define TRANSLATORMESSAGE_H
@@ -98,6 +73,8 @@ public:
void setFileName(const QString &fileName) { m_fileName = fileName; }
int lineNumber() const { return m_lineNumber; }
void setLineNumber(int lineNumber) { m_lineNumber = lineNumber; }
+ int tsLineNumber() const { return m_tsLineNumber; }
+ void setTsLineNumber(int lineNumber) { m_tsLineNumber = lineNumber; }
void clearReferences();
void setReferences(const References &refs);
void addReference(const QString &fileName, int lineNumber);
@@ -111,6 +88,9 @@ public:
void setExtraComment(const QString &extraComment) { m_extraComment = extraComment; }
QString translatorComment() const { return m_translatorComment; }
void setTranslatorComment(const QString &translatorComment) { m_translatorComment = translatorComment; }
+ QString warning() const {return m_warning;}
+ void setWarning(const QString &warning) {m_warning = warning;}
+
bool isNull() const { return m_sourcetext.isNull() && m_lineNumber == -1 && m_translations.isEmpty(); }
@@ -128,6 +108,9 @@ public:
void setExtras(const ExtraData &extras) { m_extra = extras; }
void unsetExtra(const QString &key);
+ bool warningOnly() const { return m_warningOnly; }
+ void setWarningOnly(bool isWarningOnly) { m_warningOnly = isWarningOnly; }
+
void dump() const;
private:
@@ -141,16 +124,19 @@ private:
ExtraData m_extra; // PO flags, PO plurals
QString m_extraComment;
QString m_translatorComment;
+ QString m_warning;
QStringList m_translations;
QString m_fileName;
int m_lineNumber;
+ int m_tsLineNumber = -1;
References m_extraRefs;
+ bool m_warningOnly = false;
Type m_type;
bool m_plural;
};
-Q_DECLARE_TYPEINFO(TranslatorMessage, Q_MOVABLE_TYPE);
+Q_DECLARE_TYPEINFO(TranslatorMessage, Q_RELOCATABLE_TYPE);
QT_END_NAMESPACE
diff --git a/src/linguist/shared/ts.cpp b/src/linguist/shared/ts.cpp
index a5daf7c90..36ef0f7d8 100644
--- a/src/linguist/shared/ts.cpp
+++ b/src/linguist/shared/ts.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "translator.h"
@@ -37,9 +12,7 @@
#include <algorithm>
-#define STRINGIFY_INTERNAL(x) #x
-#define STRINGIFY(x) STRINGIFY_INTERNAL(x)
-#define STRING(s) static QString str##s(QLatin1String(STRINGIFY(s)))
+using namespace Qt::StringLiterals;
QT_BEGIN_NAMESPACE
@@ -102,7 +75,7 @@ void TSReader::handleError()
case Characters:
{
QString tok = text().toString();
- if (tok.length() > 30)
+ if (tok.size() > 30)
tok = tok.left(30) + QLatin1String("[...]");
raiseError(QString::fromLatin1("Unexpected characters '%1' %2").arg(tok, loc));
}
@@ -129,8 +102,8 @@ static QString byteValue(QString value)
QString TSReader::readContents()
{
- STRING(byte);
- STRING(value);
+ static const QString strbyte = u"byte"_s;
+ static const QString strvalue = u"value"_s;
QString result;
while (!atEnd()) {
@@ -158,9 +131,9 @@ QString TSReader::readContents()
QString TSReader::readTransContents()
{
- STRING(lengthvariant);
- STRING(variants);
- STRING(yes);
+ static const QString strlengthvariant = u"lengthvariant"_s;
+ static const QString strvariants = u"variants"_s;
+ static const QString stryes = u"yes"_s;
if (attributes().value(strvariants) == stryes) {
QString result;
@@ -187,35 +160,35 @@ QString TSReader::readTransContents()
bool TSReader::read(Translator &translator)
{
- STRING(catalog);
- STRING(comment);
- STRING(context);
- STRING(dependencies);
- STRING(dependency);
- STRING(extracomment);
- STRING(filename);
- STRING(id);
- STRING(language);
- STRING(line);
- STRING(location);
- STRING(message);
- STRING(name);
- STRING(numerus);
- STRING(numerusform);
- STRING(obsolete);
- STRING(oldcomment);
- STRING(oldsource);
- STRING(source);
- STRING(sourcelanguage);
- STRING(translation);
- STRING(translatorcomment);
- STRING(TS);
- STRING(type);
- STRING(unfinished);
- STRING(userdata);
- STRING(vanished);
- //STRING(version);
- STRING(yes);
+ static const QString strcatalog = u"catalog"_s;
+ static const QString strcomment = u"comment"_s;
+ static const QString strcontext = u"context"_s;
+ static const QString strdependencies = u"dependencies"_s;
+ static const QString strdependency = u"dependency"_s;
+ static const QString strextracomment = u"extracomment"_s;
+ static const QString strfilename = u"filename"_s;
+ static const QString strid = u"id"_s;
+ static const QString strlanguage = u"language"_s;
+ static const QString strline = u"line"_s;
+ static const QString strlocation = u"location"_s;
+ static const QString strmessage = u"message"_s;
+ static const QString strname = u"name"_s;
+ static const QString strnumerus = u"numerus"_s;
+ static const QString strnumerusform = u"numerusform"_s;
+ static const QString strobsolete = u"obsolete"_s;
+ static const QString stroldcomment = u"oldcomment"_s;
+ static const QString stroldsource = u"oldsource"_s;
+ static const QString strsource = u"source"_s;
+ static const QString strsourcelanguage = u"sourcelanguage"_s;
+ static const QString strtranslation = u"translation"_s;
+ static const QString strtranslatorcomment = u"translatorcomment"_s;
+ static const QString strTS = u"TS"_s;
+ static const QString strtype = u"type"_s;
+ static const QString strunfinished = u"unfinished"_s;
+ static const QString struserdata = u"userdata"_s;
+ static const QString strvanished = u"vanished"_s;
+ //static const QString strversion = u"version"_s;
+ static const QString stryes = u"yes"_s;
static const QString strextrans(QLatin1String("extra-"));
@@ -305,6 +278,7 @@ bool TSReader::read(Translator &translator)
msg.setContext(context);
msg.setType(TranslatorMessage::Finished);
msg.setPlural(attributes().value(strnumerus) == stryes);
+ msg.setTsLineNumber(lineNumber());
while (!atEnd()) {
readNext();
if (isEndElement()) {
@@ -412,6 +386,9 @@ bool TSReader::read(Translator &translator)
} else {
handleError();
}
+ // if the file is empty adopt AbsoluteLocation (default location type for Translator)
+ if (translator.messageCount() == 0)
+ maybeAbsolute = true;
translator.setLocationsType(maybeRelative ? Translator::RelativeLocations :
maybeAbsolute ? Translator::AbsoluteLocations :
Translator::NoLocations);
@@ -427,16 +404,16 @@ bool TSReader::read(Translator &translator)
return true;
}
-static QString numericEntity(int ch)
+static QString tsNumericEntity(int ch)
{
return QString(ch <= 0x20 ? QLatin1String("<byte value=\"x%1\"/>")
: QLatin1String("&#x%1;")) .arg(ch, 0, 16);
}
-static QString protect(const QString &str)
+static QString tsProtect(const QString &str)
{
QString result;
- result.reserve(str.length() * 12 / 10);
+ result.reserve(str.size() * 12 / 10);
for (int i = 0; i != str.size(); ++i) {
const QChar ch = str[i];
uint c = ch.unicode();
@@ -458,7 +435,7 @@ static QString protect(const QString &str)
break;
default:
if ((c < 0x20 || (ch > QChar(0x7f) && ch.isSpace())) && c != '\n' && c != '\t')
- result += numericEntity(c);
+ result += tsNumericEntity(c);
else // this also covers surrogates
result += QChar(c);
}
@@ -473,12 +450,12 @@ static void writeExtras(QTextStream &t, const char *indent,
for (auto it = extras.cbegin(), end = extras.cend(); it != end; ++it) {
if (!drops.match(it.key()).hasMatch()) {
outs << (QStringLiteral("<extra-") + it.key() + QLatin1Char('>')
- + protect(it.value())
+ + tsProtect(it.value())
+ QStringLiteral("</extra-") + it.key() + QLatin1Char('>'));
}
}
outs.sort();
- for (const QString &out : qAsConst(outs))
+ for (const QString &out : std::as_const(outs))
t << indent << out << Qt::endl;
}
@@ -490,18 +467,18 @@ static void writeVariants(QTextStream &t, const char *indent, const QString &inp
int start = 0;
forever {
t << "\n " << indent << "<lengthvariant>"
- << protect(input.mid(start, offset - start))
+ << tsProtect(input.mid(start, offset - start))
<< "</lengthvariant>";
- if (offset == input.length())
+ if (offset == input.size())
break;
start = offset + 1;
offset = input.indexOf(QChar(Translator::BinaryVariantSeparator), start);
if (offset < 0)
- offset = input.length();
+ offset = input.size();
}
t << "\n" << indent;
} else {
- t << ">" << protect(input);
+ t << ">" << tsProtect(input);
}
}
@@ -554,17 +531,17 @@ bool saveTS(const Translator &translator, QIODevice &dev, ConversionData &cd)
QHash<QString, int> currentLine;
QString currentFile;
- for (const QString &context : qAsConst(contextOrder)) {
+ for (const QString &context : std::as_const(contextOrder)) {
t << "<context>\n"
" <name>"
- << protect(context)
+ << tsProtect(context)
<< "</name>\n";
- for (const TranslatorMessage &msg : qAsConst(messageOrder[context])) {
+ for (const TranslatorMessage &msg : std::as_const(messageOrder[context])) {
//msg.dump();
t << " <message";
if (!msg.id().isEmpty())
- t << " id=\"" << msg.id() << "\"";
+ t << " id=\"" << tsProtect(msg.id()) << "\"";
if (msg.isPlural())
t << " numerus=\"yes\"";
t << ">\n";
@@ -607,27 +584,27 @@ bool saveTS(const Translator &translator, QIODevice &dev, ConversionData &cd)
}
t << " <source>"
- << protect(msg.sourceText())
+ << tsProtect(msg.sourceText())
<< "</source>\n";
if (!msg.oldSourceText().isEmpty())
- t << " <oldsource>" << protect(msg.oldSourceText()) << "</oldsource>\n";
+ t << " <oldsource>" << tsProtect(msg.oldSourceText()) << "</oldsource>\n";
if (!msg.comment().isEmpty()) {
t << " <comment>"
- << protect(msg.comment())
+ << tsProtect(msg.comment())
<< "</comment>\n";
}
if (!msg.oldComment().isEmpty())
- t << " <oldcomment>" << protect(msg.oldComment()) << "</oldcomment>\n";
+ t << " <oldcomment>" << tsProtect(msg.oldComment()) << "</oldcomment>\n";
if (!msg.extraComment().isEmpty())
- t << " <extracomment>" << protect(msg.extraComment())
+ t << " <extracomment>" << tsProtect(msg.extraComment())
<< "</extracomment>\n";
if (!msg.translatorComment().isEmpty())
- t << " <translatorcomment>" << protect(msg.translatorComment())
+ t << " <translatorcomment>" << tsProtect(msg.translatorComment())
<< "</translatorcomment>\n";
t << " <translation";
@@ -640,7 +617,7 @@ bool saveTS(const Translator &translator, QIODevice &dev, ConversionData &cd)
if (msg.isPlural()) {
t << ">";
const QStringList &translns = msg.translations();
- for (int j = 0; j < translns.count(); ++j) {
+ for (int j = 0; j < translns.size(); ++j) {
t << "\n <numerusform";
writeVariants(t, " ", translns[j]);
t << "</numerusform>";
diff --git a/src/linguist/shared/ts.dtd b/src/linguist/shared/ts.dtd
deleted file mode 100644
index f1c6d3d33..000000000
--- a/src/linguist/shared/ts.dtd
+++ /dev/null
@@ -1,104 +0,0 @@
-<!--
- !
- ! Some notes to the DTD:
- !
- ! The location element is set as optional since it was introduced first in Qt 4.2.
- ! The userdata element is set as optional since it was introduced first in Qt 4.4.
- ! The vanished message type was introduced first in Qt 5.2.
- !
- -->
-<!--
- ! Macro used in order to escape byte entities not allowed in an xml document
- ! for instance, only #x9, #xA and #xD are allowed characters below #x20.
- -->
-<!ENTITY % evilstring '(#PCDATA | byte)*' >
-<!ELEMENT byte EMPTY>
-<!-- value contains decimal (e.g. 1000) or hex (e.g. x3e8) unicode encoding of one char -->
-<!ATTLIST byte
- value CDATA #REQUIRED>
-<!--
- ! This element wildcard is no valid DTD. No better solution available.
- ! extra elements may appear in TS and message elements. Each element may appear
- ! only once within each scope. The contents are preserved verbatim; any
- ! attributes are dropped. Currently recognized extra tags include:
- ! extra-po-msgid_plural, extra-po-old_msgid_plural
- ! extra-po-flags (comma-space separated list)
- ! extra-loc-layout_id
- ! extra-loc-feature
- ! extra-loc-blank
- -->
-<!ELEMENT extra-* %evilstring; >
-<!ELEMENT TS (defaultcodec?, extra-**, dependencies?, (context|message)+) >
-<!ATTLIST TS
- version CDATA #IMPLIED
- sourcelanguage CDATA #IMPLIED
- language CDATA #IMPLIED>
-<!-- The encoding to use in the QM file by default. Default is ISO-8859-1. -->
-<!ELEMENT defaultcodec (#PCDATA) >
-<!ELEMENT context (name, comment?, (context|message)+) >
-<!ATTLIST context
- encoding CDATA #IMPLIED>
-<!ELEMENT dependencies (dependency+) >
-<!ATTLIST dependency
- catalog CDATA #IMPLIED>
-<!ELEMENT name %evilstring; >
-<!-- This is "disambiguation" in the (new) API, or "msgctxt" in gettext speak -->
-<!ELEMENT comment %evilstring; >
-<!-- Previous content of comment (result of merge) -->
-<!ELEMENT oldcomment %evilstring; >
-<!-- The real comment (added by developer/designer) -->
-<!ELEMENT extracomment %evilstring; >
-<!-- Comment added by translator -->
-<!ELEMENT translatorcomment %evilstring; >
-<!ELEMENT message (location*, source?, oldsource?, comment?, oldcomment?, extracomment?, translatorcomment?, translation?, userdata?, extra-**) >
-<!--
- ! If utf8 is "true", the defaultcodec is overridden and the message is encoded
- ! in UTF-8 in the QM file. If it is "both", both source encodings are stored
- ! in the QM file.
- -->
-<!ATTLIST message
- id CDATA #IMPLIED
- utf8 (true|false|both) "false"
- numerus (yes|no) "no">
-<!ELEMENT location EMPTY>
-<!--
- ! If the line is omitted, the location specifies only a file.
- !
- ! location supports relative specifications as well. Line numbers are
- ! relative (explicitly positive or negative) to the last reference to a
- ! given filename; each file starts with current line 0. If the filename
- ! is omitted, the "current" one is used. For the 1st location in a message,
- ! "current" is the filename used for the 1st location of the previous message.
- ! For subsequent locations, it is the filename used for the previous location.
- ! A single TS file has either all absolute or all relative locations.
- -->
-<!ATTLIST location
- filename CDATA #IMPLIED
- line CDATA #IMPLIED>
-<!ELEMENT source %evilstring;>
-<!-- Previous content of source (result of merge) -->
-<!ELEMENT oldsource %evilstring;>
-<!--
- ! The following should really say one evilstring macro or several
- ! numerusform or lengthvariant elements, but the DTD can't express this.
- -->
-<!ELEMENT translation (#PCDATA|byte|numerusform|lengthvariant)* >
-<!--
- ! If no type is set, the message is "finished".
- ! Length variants must be ordered by falling display length.
- ! variants may not be yes if the message has numerus yes.
- -->
-<!ATTLIST translation
- type (unfinished|vanished|obsolete) #IMPLIED
- variants (yes|no) "no">
-<!-- Deprecated. Use extra-* -->
-<!ELEMENT userdata (#PCDATA)* >
-<!--
- ! The following should really say one evilstring macro or several
- ! lengthvariant elements, but the DTD can't express this.
- ! Length variants must be ordered by falling display length.
- -->
-<!ELEMENT numerusform (#PCDATA|byte|lengthvariant)* >
-<!ATTLIST numerusform
- variants (yes|no) "no">
-<!ELEMENT lengthvariant %evilstring; >
diff --git a/src/linguist/shared/ts.xsd b/src/linguist/shared/ts.xsd
new file mode 100644
index 000000000..a7c29b3f5
--- /dev/null
+++ b/src/linguist/shared/ts.xsd
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ !
+ ! Some notes to the XSD:
+ !
+ ! The location element is set as optional since it was introduced first in Qt 4.2.
+ ! The userdata element is set as optional since it was introduced first in Qt 4.4.
+ ! The vanished message type was introduced first in Qt 5.2.
+ !
+ -->
+<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <!-- value contains decimal (e.g. 1000) or hex (e.g. x3e8) unicode encoding of one char -->
+ <xs:element name="byte">
+ <xs:complexType>
+ <xs:attribute name="value" type="xs:string" use="required" />
+ </xs:complexType>
+ </xs:element>
+ <!--
+ ! Type used in order to escape byte entities not allowed in an xml document
+ ! for instance, only #x9, #xA and #xD are allowed characters below #x20.
+ -->
+ <xs:complexType name="byte-type" mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="byte" />
+ </xs:choice>
+ </xs:complexType>
+ <!--
+ ! extra-something should be described as extra-* but wildcard is not valid in XSD. No better solution found.
+ ! extra elements may appear in TS and message elements. Each element may appear
+ ! only once within each scope. The contents are preserved verbatim; any
+ ! attributes are dropped. Currently recognized extra tags include:
+ ! extra-po-msgid_plural, extra-po-old_msgid_plural
+ ! extra-po-flags (comma-space separated list)
+ ! extra-loc-layout_id
+ ! extra-loc-feature
+ ! extra-loc-blank
+ -->
+ <xs:element name="extra-something" type= "byte-type"/>
+ <xs:element name="TS">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="extra-something" />
+ <xs:element minOccurs="0" maxOccurs="1" ref="dependencies" />
+ <xs:choice minOccurs="1" maxOccurs="unbounded">
+ <xs:element ref="context" />
+ <xs:element ref="message" />
+ </xs:choice>
+ </xs:sequence>
+ <xs:attribute name="version" type="xs:string" />
+ <xs:attribute name="sourcelanguage" type="xs:string" />
+ <xs:attribute name="language" type="xs:string" />
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="context">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="name" />
+ <xs:element minOccurs="0" maxOccurs="1" ref="comment" />
+ <xs:element minOccurs="1" maxOccurs="unbounded" ref="message"/>
+ </xs:sequence>
+ <xs:attribute name="encoding" type="xs:string" />
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="dependencies">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="1" maxOccurs="unbounded" ref="dependency" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="dependency">
+ <xs:complexType>
+ <xs:attribute name="catalog" type="xs:string" />
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="name" type= "byte-type"/>
+ <!-- This is "disambiguation" in the (new) API, or "msgctxt" in gettext speak -->
+ <xs:element name="comment" type= "byte-type"/>
+ <!-- Previous content of comment (result of merge) -->
+ <xs:element name="oldcomment" type= "byte-type"/>
+ <!-- The real comment (added by developer/designer) -->
+ <xs:element name="extracomment" type= "byte-type"/>
+ <!-- Comment added by translator -->
+ <xs:element name="translatorcomment" type= "byte-type"/>
+ <xs:element name="message">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="location" />
+ <xs:element minOccurs="0" maxOccurs="1" ref="source" />
+ <xs:element minOccurs="0" maxOccurs="1" ref="oldsource" />
+ <xs:element minOccurs="0" maxOccurs="1" ref="comment" />
+ <xs:element minOccurs="0" maxOccurs="1" ref="oldcomment" />
+ <xs:element minOccurs="0" maxOccurs="1" ref="extracomment" />
+ <xs:element minOccurs="0" maxOccurs="1" ref="translatorcomment" />
+ <xs:element minOccurs="0" maxOccurs="1" ref="translation" />
+ <xs:element minOccurs="0" maxOccurs="1" ref="userdata" />
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="extra-something" />
+ </xs:sequence>
+ <xs:attribute name="id" type="xs:string" />
+ <xs:attribute default="no" name="numerus">
+ <xs:simpleType>
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="yes" />
+ <xs:enumeration value="no" />
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+ <!--
+ ! If the line is omitted, the location specifies only a file.
+ !
+ ! location supports relative specifications as well. Line numbers are
+ ! relative (explicitly positive or negative) to the last reference to a
+ ! given filename; each file starts with current line 0. If the filename
+ ! is omitted, the "current" one is used. For the 1st location in a message,
+ ! "current" is the filename used for the 1st location of the previous message.
+ ! For subsequent locations, it is the filename used for the previous location.
+ ! A single TS file has either all absolute or all relative locations.
+ -->
+ <xs:element name="location">
+ <xs:complexType>
+ <xs:attribute name="filename" type="xs:string" />
+ <xs:attribute name="line" type="xs:string" />
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="source" type= "byte-type"/>
+ <!-- Previous content of source (result of merge) -->
+ <xs:element name="oldsource" type= "byte-type"/>
+ <!--
+ ! The following should really say one byte-type or several
+ ! numerusform or lengthvariant elements.
+ -->
+ <xs:element name="translation">
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="byte" />
+ <xs:element ref="numerusform" />
+ <xs:element ref="lengthvariant" />
+ </xs:choice>
+ <!--
+ ! If no type is set, the message is "finished".
+ ! Length variants must be ordered by falling display length.
+ ! variants may not be yes if the message has numerus yes.
+ -->
+ <xs:attribute name="type">
+ <xs:simpleType>
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="unfinished" />
+ <xs:enumeration value="vanished" />
+ <xs:enumeration value="obsolete" />
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute default="no" name="variants">
+ <xs:simpleType>
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="yes" />
+ <xs:enumeration value="no" />
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+ <!-- Deprecated. Use extra-something -->
+ <xs:element name="userdata" type="xs:string" />
+ <!--
+ ! The following should really say one byte-type or several
+ ! lengthvariant elements.
+ ! Length variants must be ordered by falling display length.
+ -->
+ <xs:element name="numerusform">
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="byte" />
+ <xs:element ref="lengthvariant" />
+ </xs:choice>
+ <xs:attribute default="no" name="variants">
+ <xs:simpleType>
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="yes" />
+ <xs:enumeration value="no" />
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="lengthvariant" type= "byte-type"/>
+</xs:schema>
diff --git a/src/linguist/shared/xliff.cpp b/src/linguist/shared/xliff.cpp
index ef380939e..ceda53994 100644
--- a/src/linguist/shared/xliff.cpp
+++ b/src/linguist/shared/xliff.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "translator.h"
#include "xmlparser.h"
@@ -65,7 +40,7 @@ static QString dataType(const TranslatorMessage &m)
{
QByteArray fileName = m.fileName().toLatin1();
unsigned int extHash = 0;
- int pos = fileName.count() - 1;
+ int pos = fileName.size() - 1;
for (int pass = 0; pass < 4 && pos >=0; ++pass, --pos) {
if (fileName.at(pos) == '.')
break;
@@ -126,7 +101,7 @@ static char charFromEscape(char escape)
return escape;
}
-static QString numericEntity(int ch, bool makePhs)
+static QString xlNumericEntity(int ch, bool makePhs)
{
// ### This needs to be reviewed, to reflect the updated XLIFF-PO spec.
if (!makePhs || ch < 7 || ch > 0x0d)
@@ -141,7 +116,7 @@ static QString numericEntity(int ch, bool makePhs)
.arg(++id) .arg(name) .arg(escapechar);
}
-static QString protect(const QString &str, bool makePhs = true)
+static QString xlProtect(const QString &str, bool makePhs = true)
{
QString result;
int len = str.size();
@@ -165,7 +140,7 @@ static QString protect(const QString &str, bool makePhs = true)
break;
default:
if (c < 0x20 && c != '\r' && c != '\n' && c != '\t')
- result += numericEntity(c, makePhs);
+ result += xlNumericEntity(c, makePhs);
else // this also covers surrogates
result += QChar(c);
}
@@ -181,7 +156,7 @@ static void writeExtras(QTextStream &ts, int indent,
if (!drops.match(it.key()).hasMatch()) {
writeIndent(ts, indent);
ts << "<trolltech:" << it.key() << '>'
- << protect(it.value())
+ << xlProtect(it.value())
<< "</trolltech:" << it.key() << ">\n";
}
}
@@ -210,25 +185,25 @@ static void writeComment(QTextStream &ts, const TranslatorMessage &msg, const QR
if (!msg.comment().isEmpty()) {
writeIndent(ts, indent);
ts << "<context-group><context context-type=\"" << contextMsgctxt << "\">"
- << protect(msg.comment(), false)
+ << xlProtect(msg.comment(), false)
<< "</context></context-group>\n";
}
if (!msg.oldComment().isEmpty()) {
writeIndent(ts, indent);
ts << "<context-group><context context-type=\"" << contextOldMsgctxt << "\">"
- << protect(msg.oldComment(), false)
+ << xlProtect(msg.oldComment(), false)
<< "</context></context-group>\n";
}
writeExtras(ts, indent, msg.extras(), drops);
if (!msg.extraComment().isEmpty()) {
writeIndent(ts, indent);
ts << "<note annotates=\"source\" from=\"developer\">"
- << protect(msg.extraComment()) << "</note>\n";
+ << xlProtect(msg.extraComment()) << "</note>\n";
}
if (!msg.translatorComment().isEmpty()) {
writeIndent(ts, indent);
ts << "<note from=\"translator\">"
- << protect(msg.translatorComment()) << "</note>\n";
+ << xlProtect(msg.translatorComment()) << "</note>\n";
}
}
@@ -249,7 +224,7 @@ static void writeTransUnits(QTextStream &ts, const TranslatorMessage &msg, const
oldsources.append(msg.oldSourceText());
if (const auto it = extras.constFind(QString::fromLatin1("po-old_msgid_plural")); it != extrasEnd) {
if (oldsources.isEmpty()) {
- if (sources.count() == 2)
+ if (sources.size() == 2)
oldsources.append(QString());
else
pluralStr = QLatin1Char(' ') + QLatin1String(attribPlural) + QLatin1String("=\"yes\"");
@@ -289,7 +264,7 @@ static void writeTransUnits(QTextStream &ts, const TranslatorMessage &msg, const
source = *srcit;
++srcit;
} // else just repeat last element
- ts << "<source xml:space=\"preserve\">" << protect(source) << "</source>\n";
+ ts << "<source xml:space=\"preserve\">" << xlProtect(source) << "</source>\n";
bool puttrans = false;
QString translation;
@@ -306,7 +281,7 @@ static void writeTransUnits(QTextStream &ts, const TranslatorMessage &msg, const
ts << "<alt-trans>\n";
++indent;
writeIndent(ts, indent);
- ts << "<source xml:space=\"preserve\"" << pluralStr << '>' << protect(*oldsrcit) << "</source>\n";
+ ts << "<source xml:space=\"preserve\"" << pluralStr << '>' << xlProtect(*oldsrcit) << "</source>\n";
if (!puttrans) {
writeIndent(ts, indent);
ts << "<target restype=\"" << restypeDummy << "\"/>\n";
@@ -315,7 +290,7 @@ static void writeTransUnits(QTextStream &ts, const TranslatorMessage &msg, const
if (puttrans) {
writeIndent(ts, indent);
- ts << "<target xml:space=\"preserve\"" << state << ">" << protect(translation) << "</target>\n";
+ ts << "<target xml:space=\"preserve\"" << state << ">" << xlProtect(translation) << "</target>\n";
}
if (oldsrcit != oldsrcend) {
@@ -397,6 +372,7 @@ private:
XC_translator_comment,
XC_restype_context,
XC_restype_translation,
+ XC_mtype_seg_translation,
XC_restype_plurals,
XC_alt_trans
};
@@ -476,7 +452,7 @@ XLIFFHandler::XliffContext XLIFFHandler::currentContext() const
// traverses to the top to check all of the parent contexes.
bool XLIFFHandler::hasContext(XliffContext ctx) const
{
- for (int i = m_contextStack.count() - 1; i >= 0; --i) {
+ for (int i = m_contextStack.size() - 1; i >= 0; --i) {
if (m_contextStack.at(i) == ctx)
return true;
}
@@ -538,6 +514,11 @@ bool XLIFFHandler::startElement(QStringView namespaceURI, QStringView localName,
} else if (localName == QLatin1String("target")) {
if (atts.value(QLatin1String("restype")) != QLatin1String(restypeDummy))
pushContext(XC_restype_translation);
+ } else if (localName == QLatin1String("mrk")) {
+ if (atts.value(QLatin1String("mtype")) == QLatin1String("seg")) {
+ if (currentContext() == XC_restype_translation)
+ pushContext(XC_mtype_seg_translation);
+ }
} else if (localName == QLatin1String("context-group")) {
if (atts.value(QLatin1String("purpose")) == QLatin1String("location"))
pushContext(XC_context_group);
@@ -568,7 +549,7 @@ bool XLIFFHandler::startElement(QStringView namespaceURI, QStringView localName,
pushContext(XC_ph);
}
bail:
- if (currentContext() != XC_ph)
+ if (currentContext() != XC_ph && currentContext() != XC_mtype_seg_translation)
accum.clear();
return true;
}
@@ -606,6 +587,8 @@ bool XLIFFHandler::endElement(QStringView namespaceURI, QStringView localName,
QChar(Translator::BinaryVariantSeparator));
m_translations.append(accum);
}
+ } else if (localName == QLatin1String("mrk")) {
+ popContext(XC_mtype_seg_translation);
} else if (localName == QLatin1String("context-group")) {
if (popContext(XC_context_group)) {
m_refs.append(TranslatorMessage::Reference(
@@ -709,12 +692,12 @@ bool XLIFFHandler::finalizeMessage(bool isPlural)
msg.setOldComment(m_oldComment);
msg.setExtraComment(m_extraComment);
msg.setTranslatorComment(m_translatorComment);
- if (m_sources.count() > 1 && m_sources[1] != m_sources[0])
+ if (m_sources.size() > 1 && m_sources[1] != m_sources[0])
m_extra.insert(QLatin1String("po-msgid_plural"), m_sources[1]);
if (!m_oldSources.isEmpty()) {
if (!m_oldSources[0].isEmpty())
msg.setOldSourceText(m_oldSources[0]);
- if (m_oldSources.count() > 1 && m_oldSources[1] != m_oldSources[0])
+ if (m_oldSources.size() > 1 && m_oldSources[1] != m_oldSources[0])
m_extra.insert(QLatin1String("po-old_msgid_plural"), m_oldSources[1]);
}
msg.setExtras(m_extra);
@@ -792,7 +775,7 @@ bool saveXLIFF(const Translator &translator, QIODevice &dev, ConversionData &cd)
sourceLanguageCode.replace(QLatin1Char('_'), QLatin1Char('-'));
QString languageCode = translator.languageCode();
languageCode.replace(QLatin1Char('_'), QLatin1Char('-'));
- for (const QString &fn : qAsConst(fileOrder)) {
+ for (const QString &fn : std::as_const(fileOrder)) {
writeIndent(ts, indent);
ts << "<file original=\"" << fn << "\""
<< " datatype=\"" << dataType(messageOrder[fn].cbegin()->first()) << "\""
@@ -801,15 +784,15 @@ bool saveXLIFF(const Translator &translator, QIODevice &dev, ConversionData &cd)
<< "><body>\n";
++indent;
- for (const QString &ctx : qAsConst(contextOrder[fn])) {
+ for (const QString &ctx : std::as_const(contextOrder[fn])) {
if (!ctx.isEmpty()) {
writeIndent(ts, indent);
ts << "<group restype=\"" << restypeContext << "\""
- << " resname=\"" << protect(ctx) << "\">\n";
+ << " resname=\"" << xlProtect(ctx) << "\">\n";
++indent;
}
- for (const TranslatorMessage &msg : qAsConst(messageOrder[fn][ctx]))
+ for (const TranslatorMessage &msg : std::as_const(messageOrder[fn][ctx]))
writeMessage(ts, msg, drops, indent);
if (!ctx.isEmpty()) {
diff --git a/src/linguist/shared/xmlparser.cpp b/src/linguist/shared/xmlparser.cpp
index 35216386c..654d4e0dc 100644
--- a/src/linguist/shared/xmlparser.cpp
+++ b/src/linguist/shared/xmlparser.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "xmlparser.h"
diff --git a/src/linguist/shared/xmlparser.h b/src/linguist/shared/xmlparser.h
index 960b42230..891e46527 100644
--- a/src/linguist/shared/xmlparser.h
+++ b/src/linguist/shared/xmlparser.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef XMLPARSER_H
#define XMLPARSER_H
diff --git a/src/macdeployqt/CMakeLists.txt b/src/macdeployqt/CMakeLists.txt
deleted file mode 100644
index e7f8e753e..000000000
--- a/src/macdeployqt/CMakeLists.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-# Generated from macdeployqt.pro.
-
-if(NOT QT_FEATURE_macdeployqt)
- return()
-endif()
-add_subdirectory(macdeployqt)
-add_subdirectory(macchangeqt)
diff --git a/src/macdeployqt/macchangeqt/CMakeLists.txt b/src/macdeployqt/macchangeqt/CMakeLists.txt
deleted file mode 100644
index d6fe040d0..000000000
--- a/src/macdeployqt/macchangeqt/CMakeLists.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated from macchangeqt.pro.
-
-#####################################################################
-## macchangeqt App:
-#####################################################################
-
-qt_internal_add_app(macchangeqt
- SOURCES
- ../shared/shared.cpp
- main.cpp
- PUBLIC_LIBRARIES
- ${FWCoreFoundation}
-)
diff --git a/src/macdeployqt/macchangeqt/macchangeqt.pro b/src/macdeployqt/macchangeqt/macchangeqt.pro
deleted file mode 100644
index bf195f89a..000000000
--- a/src/macdeployqt/macchangeqt/macchangeqt.pro
+++ /dev/null
@@ -1,5 +0,0 @@
-SOURCES += main.cpp ../shared/shared.cpp
-QT = core
-LIBS += -framework CoreFoundation
-
-load(qt_app)
diff --git a/src/macdeployqt/macchangeqt/main.cpp b/src/macdeployqt/macchangeqt/main.cpp
deleted file mode 100644
index 803012383..000000000
--- a/src/macdeployqt/macchangeqt/main.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "../shared/shared.h"
-
-int main(int argc, char **argv)
-{
- // useDebugLibs should always be false because even if set all Qt
- // libraries inside a binary to point to debug versions, as soon as
- // one of them loads a Qt plugin, the plugin itself will load the
- // release version of Qt, and as such, the app will crash.
- bool useDebugLibs = false;
-
- int optionsSpecified = 0;
- for (int i = 2; i < argc; ++i) {
- QByteArray argument = QByteArray(argv[i]);
- if (argument.startsWith(QByteArray("-verbose="))) {
- LogDebug() << "Argument found:" << argument;
- optionsSpecified++;
- int index = argument.indexOf("=");
- bool ok = false;
- int number = argument.mid(index+1).toInt(&ok);
- if (!ok)
- LogError() << "Could not parse verbose level";
- else
- logLevel = number;
- }
- }
-
- if (argc != (3 + optionsSpecified)) {
- qDebug() << "Changeqt: changes which Qt frameworks an application links against.";
- qDebug() << "Usage: changeqt app-bundle qt-dir <-verbose=[0-3]>";
- return 0;
- }
-
- const QString appPath = QString::fromLocal8Bit(argv[1]);
- const QString qtPath = QString::fromLocal8Bit(argv[2]);
- changeQtFrameworks(appPath, qtPath, useDebugLibs);
-}
diff --git a/src/macdeployqt/macdeployqt.pro b/src/macdeployqt/macdeployqt.pro
deleted file mode 100644
index eb2c8dbd7..000000000
--- a/src/macdeployqt/macdeployqt.pro
+++ /dev/null
@@ -1,6 +0,0 @@
-include($$OUT_PWD/../../src/global/qttools-config.pri)
-QT_FOR_CONFIG += tools-private
-requires(qtConfig(macdeployqt))
-
-TEMPLATE = subdirs
-SUBDIRS = macdeployqt macchangeqt
diff --git a/src/macdeployqt/macdeployqt/CMakeLists.txt b/src/macdeployqt/macdeployqt/CMakeLists.txt
deleted file mode 100644
index 0c63a877f..000000000
--- a/src/macdeployqt/macdeployqt/CMakeLists.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated from macdeployqt.pro.
-
-#####################################################################
-## macdeployqt App:
-#####################################################################
-
-qt_internal_add_app(macdeployqt
- SOURCES
- ../shared/shared.cpp
- main.cpp
- PUBLIC_LIBRARIES
- ${FWCoreFoundation}
-)
diff --git a/src/macdeployqt/macdeployqt/macdeployqt.pro b/src/macdeployqt/macdeployqt/macdeployqt.pro
deleted file mode 100644
index bf195f89a..000000000
--- a/src/macdeployqt/macdeployqt/macdeployqt.pro
+++ /dev/null
@@ -1,5 +0,0 @@
-SOURCES += main.cpp ../shared/shared.cpp
-QT = core
-LIBS += -framework CoreFoundation
-
-load(qt_app)
diff --git a/src/macdeployqt/macdeployqt/main.cpp b/src/macdeployqt/macdeployqt/main.cpp
deleted file mode 100644
index 8914e835b..000000000
--- a/src/macdeployqt/macdeployqt/main.cpp
+++ /dev/null
@@ -1,260 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include <QCoreApplication>
-#include <QDir>
-
-#include "../shared/shared.h"
-
-int main(int argc, char **argv)
-{
- QCoreApplication app(argc, argv);
-
- QString appBundlePath;
- if (argc > 1)
- appBundlePath = QString::fromLocal8Bit(argv[1]);
-
- if (argc < 2 || appBundlePath.startsWith("-")) {
- qDebug() << "Usage: macdeployqt app-bundle [options]";
- qDebug() << "";
- qDebug() << "Options:";
- qDebug() << " -verbose=<0-3> : 0 = no output, 1 = error/warning (default), 2 = normal, 3 = debug";
- qDebug() << " -no-plugins : Skip plugin deployment";
- qDebug() << " -dmg : Create a .dmg disk image";
- qDebug() << " -no-strip : Don't run 'strip' on the binaries";
- qDebug() << " -use-debug-libs : Deploy with debug versions of frameworks and plugins (implies -no-strip)";
- qDebug() << " -executable=<path> : Let the given executable use the deployed frameworks too";
- qDebug() << " -qmldir=<path> : Scan for QML imports in the given path";
- qDebug() << " -qmlimport=<path> : Add the given path to the QML module search locations";
- qDebug() << " -always-overwrite : Copy files even if the target file exists";
- qDebug() << " -codesign=<ident> : Run codesign with the given identity on all executables";
- qDebug() << " -hardened-runtime : Enable Hardened Runtime when code signing";
- qDebug() << " -timestamp : Include a secure timestamp when code signing (requires internet connection)";
- qDebug() << " -sign-for-notarization=<ident>: Activate the necessary options for notarization (requires internet connection)";
- qDebug() << " -appstore-compliant : Skip deployment of components that use private API";
- qDebug() << " -libpath=<path> : Add the given path to the library search path";
- qDebug() << " -fs=<filesystem> : Set the filesystem used for the .dmg disk image (defaults to HFS+)";
- qDebug() << "";
- qDebug() << "macdeployqt takes an application bundle as input and makes it";
- qDebug() << "self-contained by copying in the Qt frameworks and plugins that";
- qDebug() << "the application uses.";
- qDebug() << "";
- qDebug() << "Plugins related to a framework are copied in with the";
- qDebug() << "framework. The accessibility, image formats, and text codec";
- qDebug() << "plugins are always copied, unless \"-no-plugins\" is specified.";
- qDebug() << "";
- qDebug() << "Qt plugins may use private API and will cause the app to be";
- qDebug() << "rejected from the Mac App store. MacDeployQt will print a warning";
- qDebug() << "when known incompatible plugins are deployed. Use -appstore-compliant ";
- qDebug() << "to skip these plugins. Currently two SQL plugins are known to";
- qDebug() << "be incompatible: qsqlodbc and qsqlpsql.";
- qDebug() << "";
- qDebug() << "See the \"Deploying Applications on OS X\" topic in the";
- qDebug() << "documentation for more information about deployment on OS X.";
-
- return 1;
- }
-
- appBundlePath = QDir::cleanPath(appBundlePath);
-
- if (QDir().exists(appBundlePath) == false) {
- qDebug() << "Error: Could not find app bundle" << appBundlePath;
- return 1;
- }
-
- bool plugins = true;
- bool dmg = false;
- QByteArray filesystem("HFS+");
- bool useDebugLibs = false;
- extern bool runStripEnabled;
- extern bool alwaysOwerwriteEnabled;
- extern QStringList librarySearchPath;
- QStringList additionalExecutables;
- bool qmldirArgumentUsed = false;
- QStringList qmlDirs;
- QStringList qmlImportPaths;
- extern bool runCodesign;
- extern QString codesignIdentiy;
- extern bool hardenedRuntime;
- extern bool appstoreCompliant;
- extern bool deployFramework;
- extern bool secureTimestamp;
-
- for (int i = 2; i < argc; ++i) {
- QByteArray argument = QByteArray(argv[i]);
- if (argument == QByteArray("-no-plugins")) {
- LogDebug() << "Argument found:" << argument;
- plugins = false;
- } else if (argument == QByteArray("-dmg")) {
- LogDebug() << "Argument found:" << argument;
- dmg = true;
- } else if (argument == QByteArray("-no-strip")) {
- LogDebug() << "Argument found:" << argument;
- runStripEnabled = false;
- } else if (argument == QByteArray("-use-debug-libs")) {
- LogDebug() << "Argument found:" << argument;
- useDebugLibs = true;
- runStripEnabled = false;
- } else if (argument.startsWith(QByteArray("-verbose"))) {
- LogDebug() << "Argument found:" << argument;
- int index = argument.indexOf("=");
- bool ok = false;
- int number = argument.mid(index+1).toInt(&ok);
- if (!ok)
- LogError() << "Could not parse verbose level";
- else
- logLevel = number;
- } else if (argument.startsWith(QByteArray("-executable"))) {
- LogDebug() << "Argument found:" << argument;
- int index = argument.indexOf('=');
- if (index == -1)
- LogError() << "Missing executable path";
- else
- additionalExecutables << argument.mid(index+1);
- } else if (argument.startsWith(QByteArray("-qmldir"))) {
- LogDebug() << "Argument found:" << argument;
- qmldirArgumentUsed = true;
- int index = argument.indexOf('=');
- if (index == -1)
- LogError() << "Missing qml directory path";
- else
- qmlDirs << argument.mid(index+1);
- } else if (argument.startsWith(QByteArray("-qmlimport"))) {
- LogDebug() << "Argument found:" << argument;
- int index = argument.indexOf('=');
- if (index == -1)
- LogError() << "Missing qml import path";
- else
- qmlImportPaths << argument.mid(index+1);
- } else if (argument.startsWith(QByteArray("-libpath"))) {
- LogDebug() << "Argument found:" << argument;
- int index = argument.indexOf('=');
- if (index == -1)
- LogError() << "Missing library search path";
- else
- librarySearchPath << argument.mid(index+1);
- } else if (argument == QByteArray("-always-overwrite")) {
- LogDebug() << "Argument found:" << argument;
- alwaysOwerwriteEnabled = true;
- } else if (argument.startsWith(QByteArray("-codesign"))) {
- LogDebug() << "Argument found:" << argument;
- int index = argument.indexOf("=");
- if (index < 0 || index >= argument.size()) {
- LogError() << "Missing code signing identity";
- } else {
- runCodesign = true;
- codesignIdentiy = argument.mid(index+1);
- }
- } else if (argument.startsWith(QByteArray("-sign-for-notarization"))) {
- LogDebug() << "Argument found:" << argument;
- int index = argument.indexOf("=");
- if (index < 0 || index >= argument.size()) {
- LogError() << "Missing code signing identity";
- } else {
- runCodesign = true;
- hardenedRuntime = true;
- secureTimestamp = true;
- codesignIdentiy = argument.mid(index+1);
- }
- } else if (argument.startsWith(QByteArray("-hardened-runtime"))) {
- LogDebug() << "Argument found:" << argument;
- hardenedRuntime = true;
- } else if (argument.startsWith(QByteArray("-timestamp"))) {
- LogDebug() << "Argument found:" << argument;
- secureTimestamp = true;
- } else if (argument == QByteArray("-appstore-compliant")) {
- LogDebug() << "Argument found:" << argument;
- appstoreCompliant = true;
-
- // Undocumented option, may not work as intented
- } else if (argument == QByteArray("-deploy-framework")) {
- LogDebug() << "Argument found:" << argument;
- deployFramework = true;
-
- } else if (argument.startsWith(QByteArray("-fs"))) {
- LogDebug() << "Argument found:" << argument;
- int index = argument.indexOf('=');
- if (index == -1)
- LogError() << "Missing filesystem type";
- else
- filesystem = argument.mid(index+1);
- } else if (argument.startsWith("-")) {
- LogError() << "Unknown argument" << argument << "\n";
- return 1;
- }
- }
-
- DeploymentInfo deploymentInfo = deployQtFrameworks(appBundlePath, additionalExecutables, useDebugLibs);
-
- if (deploymentInfo.isDebug)
- useDebugLibs = true;
-
- if (deployFramework && deploymentInfo.isFramework)
- fixupFramework(appBundlePath);
-
- // Convenience: Look for .qml files in the current directoty if no -qmldir specified.
- if (qmlDirs.isEmpty()) {
- QDir dir;
- if (!dir.entryList(QStringList() << QStringLiteral("*.qml")).isEmpty()) {
- qmlDirs += QStringLiteral(".");
- }
- }
-
- if (!qmlDirs.isEmpty()) {
- bool ok = deployQmlImports(appBundlePath, deploymentInfo, qmlDirs, qmlImportPaths);
- if (!ok && qmldirArgumentUsed)
- return 1; // exit if the user explicitly asked for qml import deployment
-
- // Update deploymentInfo.deployedFrameworks - the QML imports
- // may have brought in extra frameworks as dependencies.
- deploymentInfo.deployedFrameworks += findAppFrameworkNames(appBundlePath);
- deploymentInfo.deployedFrameworks =
- QSet<QString>(deploymentInfo.deployedFrameworks.begin(),
- deploymentInfo.deployedFrameworks.end()).values();
- }
-
- if (plugins && !deploymentInfo.qtPath.isEmpty()) {
- deploymentInfo.pluginPath = deploymentInfo.qtPath + "/plugins";
- LogNormal();
- deployPlugins(appBundlePath, deploymentInfo, useDebugLibs);
- createQtConf(appBundlePath);
- }
-
- if (runStripEnabled)
- stripAppBinary(appBundlePath);
-
- if (runCodesign)
- codesign(codesignIdentiy, appBundlePath);
-
- if (dmg) {
- LogNormal();
- createDiskImage(appBundlePath, filesystem);
- }
-
- return 0;
-}
-
diff --git a/src/macdeployqt/shared/shared.cpp b/src/macdeployqt/shared/shared.cpp
deleted file mode 100644
index aaf66d2a8..000000000
--- a/src/macdeployqt/shared/shared.cpp
+++ /dev/null
@@ -1,1619 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include <QCoreApplication>
-#include <QString>
-#include <QStringList>
-#include <QDebug>
-#include <iostream>
-#include <QProcess>
-#include <QDir>
-#include <QSet>
-#include <QStack>
-#include <QDirIterator>
-#include <QLibraryInfo>
-#include <QJsonDocument>
-#include <QJsonObject>
-#include <QJsonArray>
-#include <QJsonValue>
-#include <QRegularExpression>
-#include "shared.h"
-
-#ifdef Q_OS_DARWIN
-#include <CoreFoundation/CoreFoundation.h>
-#endif
-
-bool runStripEnabled = true;
-bool alwaysOwerwriteEnabled = false;
-bool runCodesign = false;
-QStringList librarySearchPath;
-QString codesignIdentiy;
-QString extraEntitlements;
-bool hardenedRuntime = false;
-bool secureTimestamp = false;
-bool appstoreCompliant = false;
-int logLevel = 1;
-bool deployFramework = false;
-
-using std::cout;
-using std::endl;
-
-bool operator==(const FrameworkInfo &a, const FrameworkInfo &b)
-{
- return ((a.frameworkPath == b.frameworkPath) && (a.binaryPath == b.binaryPath));
-}
-
-QDebug operator<<(QDebug debug, const FrameworkInfo &info)
-{
- debug << "Framework name" << info.frameworkName << "\n";
- debug << "Framework directory" << info.frameworkDirectory << "\n";
- debug << "Framework path" << info.frameworkPath << "\n";
- debug << "Binary directory" << info.binaryDirectory << "\n";
- debug << "Binary name" << info.binaryName << "\n";
- debug << "Binary path" << info.binaryPath << "\n";
- debug << "Version" << info.version << "\n";
- debug << "Install name" << info.installName << "\n";
- debug << "Deployed install name" << info.deployedInstallName << "\n";
- debug << "Source file Path" << info.sourceFilePath << "\n";
- debug << "Framework Destination Directory (relative to bundle)" << info.frameworkDestinationDirectory << "\n";
- debug << "Binary Destination Directory (relative to bundle)" << info.binaryDestinationDirectory << "\n";
-
- return debug;
-}
-
-const QString bundleFrameworkDirectory = "Contents/Frameworks";
-
-inline QDebug operator<<(QDebug debug, const ApplicationBundleInfo &info)
-{
- debug << "Application bundle path" << info.path << "\n";
- debug << "Binary path" << info.binaryPath << "\n";
- debug << "Additional libraries" << info.libraryPaths << "\n";
- return debug;
-}
-
-bool copyFilePrintStatus(const QString &from, const QString &to)
-{
- if (QFile(to).exists()) {
- if (alwaysOwerwriteEnabled) {
- QFile(to).remove();
- } else {
- qDebug() << "File exists, skip copy:" << to;
- return false;
- }
- }
-
- if (QFile::copy(from, to)) {
- QFile dest(to);
- dest.setPermissions(dest.permissions() | QFile::WriteOwner | QFile::WriteUser);
- LogNormal() << " copied:" << from;
- LogNormal() << " to" << to;
-
- // The source file might not have write permissions set. Set the
- // write permission on the target file to make sure we can use
- // install_name_tool on it later.
- QFile toFile(to);
- if (toFile.permissions() & QFile::WriteOwner)
- return true;
-
- if (!toFile.setPermissions(toFile.permissions() | QFile::WriteOwner)) {
- LogError() << "Failed to set u+w permissions on target file: " << to;
- return false;
- }
-
- return true;
- } else {
- LogError() << "file copy failed from" << from;
- LogError() << " to" << to;
- return false;
- }
-}
-
-bool linkFilePrintStatus(const QString &file, const QString &link)
-{
- if (QFile(link).exists()) {
- if (QFile(link).symLinkTarget().isEmpty())
- LogError() << link << "exists but it's a file.";
- else
- LogNormal() << "Symlink exists, skipping:" << link;
- return false;
- } else if (QFile::link(file, link)) {
- LogNormal() << " symlink" << link;
- LogNormal() << " points to" << file;
- return true;
- } else {
- LogError() << "failed to symlink" << link;
- LogError() << " to" << file;
- return false;
- }
-}
-
-void patch_debugInInfoPlist(const QString &infoPlistPath)
-{
- // Older versions of qmake may have the "_debug" binary as
- // the value for CFBundleExecutable. Remove it.
- QFile infoPlist(infoPlistPath);
- infoPlist.open(QIODevice::ReadOnly);
- QByteArray contents = infoPlist.readAll();
- infoPlist.close();
- infoPlist.open(QIODevice::WriteOnly | QIODevice::Truncate);
- contents.replace("_debug", ""); // surely there are no legit uses of "_debug" in an Info.plist
- infoPlist.write(contents);
-}
-
-OtoolInfo findDependencyInfo(const QString &binaryPath)
-{
- OtoolInfo info;
- info.binaryPath = binaryPath;
-
- LogDebug() << "Using otool:";
- LogDebug() << " inspecting" << binaryPath;
- QProcess otool;
- otool.start("otool", QStringList() << "-L" << binaryPath);
- otool.waitForFinished();
-
- if (otool.exitStatus() != QProcess::NormalExit || otool.exitCode() != 0) {
- LogError() << otool.readAllStandardError();
- return info;
- }
-
- static const QRegularExpression regexp(QStringLiteral(
- "^\\t(.+) \\(compatibility version (\\d+\\.\\d+\\.\\d+), "
- "current version (\\d+\\.\\d+\\.\\d+)(, weak)?\\)$"));
-
- QString output = otool.readAllStandardOutput();
- QStringList outputLines = output.split("\n", Qt::SkipEmptyParts);
- if (outputLines.size() < 2) {
- LogError() << "Could not parse otool output:" << output;
- return info;
- }
-
- outputLines.removeFirst(); // remove line containing the binary path
- if (binaryPath.contains(".framework/") || binaryPath.endsWith(".dylib")) {
- const auto match = regexp.match(outputLines.first());
- if (match.hasMatch()) {
- info.installName = match.captured(1);
- info.compatibilityVersion = QVersionNumber::fromString(match.captured(2));
- info.currentVersion = QVersionNumber::fromString(match.captured(3));
- } else {
- LogError() << "Could not parse otool output line:" << outputLines.first();
- }
- outputLines.removeFirst();
- }
-
- for (const QString &outputLine : outputLines) {
- const auto match = regexp.match(outputLine);
- if (match.hasMatch()) {
- DylibInfo dylib;
- dylib.binaryPath = match.captured(1);
- dylib.compatibilityVersion = QVersionNumber::fromString(match.captured(2));
- dylib.currentVersion = QVersionNumber::fromString(match.captured(3));
- info.dependencies << dylib;
- } else {
- LogError() << "Could not parse otool output line:" << outputLine;
- }
- }
-
- return info;
-}
-
-FrameworkInfo parseOtoolLibraryLine(const QString &line, const QString &appBundlePath, const QSet<QString> &rpaths, bool useDebugLibs)
-{
- FrameworkInfo info;
- QString trimmed = line.trimmed();
-
- if (trimmed.isEmpty())
- return info;
-
- // Don't deploy system libraries.
- if (trimmed.startsWith("/System/Library/") ||
- (trimmed.startsWith("/usr/lib/") && trimmed.contains("libQt") == false) // exception for libQtuitools and libQtlucene
- || trimmed.startsWith("@executable_path") || trimmed.startsWith("@loader_path"))
- return info;
-
- // Resolve rpath relative libraries.
- if (trimmed.startsWith("@rpath/")) {
- QString rpathRelativePath = trimmed.mid(QStringLiteral("@rpath/").length());
- bool foundInsideBundle = false;
- foreach (const QString &rpath, rpaths) {
- QString path = QDir::cleanPath(rpath + "/" + rpathRelativePath);
- // Skip paths already inside the bundle.
- if (!appBundlePath.isEmpty()) {
- if (QDir::isAbsolutePath(appBundlePath)) {
- if (path.startsWith(QDir::cleanPath(appBundlePath) + "/")) {
- foundInsideBundle = true;
- continue;
- }
- } else {
- if (path.startsWith(QDir::cleanPath(QDir::currentPath() + "/" + appBundlePath) + "/")) {
- foundInsideBundle = true;
- continue;
- }
- }
- }
- // Try again with substituted rpath.
- FrameworkInfo resolvedInfo = parseOtoolLibraryLine(path, appBundlePath, rpaths, useDebugLibs);
- if (!resolvedInfo.frameworkName.isEmpty() && QFile::exists(resolvedInfo.frameworkPath)) {
- resolvedInfo.rpathUsed = rpath;
- resolvedInfo.installName = trimmed;
- return resolvedInfo;
- }
- }
- if (!rpaths.isEmpty() && !foundInsideBundle) {
- LogError() << "Cannot resolve rpath" << trimmed;
- LogError() << " using" << rpaths;
- }
- return info;
- }
-
- enum State {QtPath, FrameworkName, DylibName, Version, FrameworkBinary, End};
- State state = QtPath;
- int part = 0;
- QString name;
- QString qtPath;
- QString suffix = useDebugLibs ? "_debug" : "";
-
- // Split the line into [Qt-path]/lib/qt[Module].framework/Versions/[Version]/
- QStringList parts = trimmed.split("/");
- while (part < parts.count()) {
- const QString currentPart = parts.at(part).simplified() ;
- ++part;
- if (currentPart == "")
- continue;
-
- if (state == QtPath) {
- // Check for library name part
- if (part < parts.count() && parts.at(part).contains(".dylib")) {
- info.frameworkDirectory += "/" + (qtPath + currentPart + "/").simplified();
- state = DylibName;
- continue;
- } else if (part < parts.count() && parts.at(part).endsWith(".framework")) {
- info.frameworkDirectory += "/" + (qtPath + "lib/").simplified();
- state = FrameworkName;
- continue;
- } else if (trimmed.startsWith("/") == false) { // If the line does not contain a full path, the app is using a binary Qt package.
- QStringList partsCopy = parts;
- partsCopy.removeLast();
- foreach (QString path, librarySearchPath) {
- if (!path.endsWith("/"))
- path += '/';
- QString nameInPath = path + parts.join(QLatin1Char('/'));
- if (QFile::exists(nameInPath)) {
- info.frameworkDirectory = path + partsCopy.join(QLatin1Char('/'));
- break;
- }
- }
- if (currentPart.contains(".framework")) {
- if (info.frameworkDirectory.isEmpty())
- info.frameworkDirectory = "/Library/Frameworks/" + partsCopy.join(QLatin1Char('/'));
- if (!info.frameworkDirectory.endsWith("/"))
- info.frameworkDirectory += "/";
- state = FrameworkName;
- --part;
- continue;
- } else if (currentPart.contains(".dylib")) {
- if (info.frameworkDirectory.isEmpty())
- info.frameworkDirectory = "/usr/lib/" + partsCopy.join(QLatin1Char('/'));
- if (!info.frameworkDirectory.endsWith("/"))
- info.frameworkDirectory += "/";
- state = DylibName;
- --part;
- continue;
- }
- }
- qtPath += (currentPart + "/");
-
- } if (state == FrameworkName) {
- // remove ".framework"
- name = currentPart;
- name.chop(QString(".framework").length());
- info.isDylib = false;
- info.frameworkName = currentPart;
- state = Version;
- ++part;
- continue;
- } if (state == DylibName) {
- name = currentPart;
- info.isDylib = true;
- info.frameworkName = name;
- info.binaryName = name.contains(suffix) ? name : name.left(name.indexOf('.')) + suffix + name.mid(name.indexOf('.'));
- info.deployedInstallName = "@executable_path/../Frameworks/" + info.binaryName;
- info.frameworkPath = info.frameworkDirectory + info.binaryName;
- info.sourceFilePath = info.frameworkPath;
- info.frameworkDestinationDirectory = bundleFrameworkDirectory + "/";
- info.binaryDestinationDirectory = info.frameworkDestinationDirectory;
- info.binaryDirectory = info.frameworkDirectory;
- info.binaryPath = info.frameworkPath;
- state = End;
- ++part;
- continue;
- } else if (state == Version) {
- info.version = currentPart;
- info.binaryDirectory = "Versions/" + info.version;
- info.frameworkPath = info.frameworkDirectory + info.frameworkName;
- info.frameworkDestinationDirectory = bundleFrameworkDirectory + "/" + info.frameworkName;
- info.binaryDestinationDirectory = info.frameworkDestinationDirectory + "/" + info.binaryDirectory;
- state = FrameworkBinary;
- } else if (state == FrameworkBinary) {
- info.binaryName = currentPart.contains(suffix) ? currentPart : currentPart + suffix;
- info.binaryPath = "/" + info.binaryDirectory + "/" + info.binaryName;
- info.deployedInstallName = "@executable_path/../Frameworks/" + info.frameworkName + info.binaryPath;
- info.sourceFilePath = info.frameworkPath + info.binaryPath;
- state = End;
- } else if (state == End) {
- break;
- }
- }
-
- if (!info.sourceFilePath.isEmpty() && QFile::exists(info.sourceFilePath)) {
- info.installName = findDependencyInfo(info.sourceFilePath).installName;
- if (info.installName.startsWith("@rpath/"))
- info.deployedInstallName = info.installName;
- }
-
- return info;
-}
-
-QString findAppBinary(const QString &appBundlePath)
-{
- QString binaryPath;
-
-#ifdef Q_OS_DARWIN
- CFStringRef bundlePath = appBundlePath.toCFString();
- CFURLRef bundleURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, bundlePath,
- kCFURLPOSIXPathStyle, true);
- CFRelease(bundlePath);
- CFBundleRef bundle = CFBundleCreate(kCFAllocatorDefault, bundleURL);
- if (bundle) {
- CFURLRef executableURL = CFBundleCopyExecutableURL(bundle);
- if (executableURL) {
- CFURLRef absoluteExecutableURL = CFURLCopyAbsoluteURL(executableURL);
- if (absoluteExecutableURL) {
- CFStringRef executablePath = CFURLCopyFileSystemPath(absoluteExecutableURL,
- kCFURLPOSIXPathStyle);
- if (executablePath) {
- binaryPath = QString::fromCFString(executablePath);
- CFRelease(executablePath);
- }
- CFRelease(absoluteExecutableURL);
- }
- CFRelease(executableURL);
- }
- CFRelease(bundle);
- }
- CFRelease(bundleURL);
-#endif
-
- if (QFile::exists(binaryPath))
- return binaryPath;
- LogError() << "Could not find bundle binary for" << appBundlePath;
- return QString();
-}
-
-QStringList findAppFrameworkNames(const QString &appBundlePath)
-{
- QStringList frameworks;
-
- // populate the frameworks list with QtFoo.framework etc,
- // as found in /Contents/Frameworks/
- QString searchPath = appBundlePath + "/Contents/Frameworks/";
- QDirIterator iter(searchPath, QStringList() << QString::fromLatin1("*.framework"),
- QDir::Dirs | QDir::NoSymLinks);
- while (iter.hasNext()) {
- iter.next();
- frameworks << iter.fileInfo().fileName();
- }
-
- return frameworks;
-}
-
-QStringList findAppFrameworkPaths(const QString &appBundlePath)
-{
- QStringList frameworks;
- QString searchPath = appBundlePath + "/Contents/Frameworks/";
- QDirIterator iter(searchPath, QStringList() << QString::fromLatin1("*.framework"),
- QDir::Dirs | QDir::NoSymLinks);
- while (iter.hasNext()) {
- iter.next();
- frameworks << iter.fileInfo().filePath();
- }
-
- return frameworks;
-}
-
-QStringList findAppLibraries(const QString &appBundlePath)
-{
- QStringList result;
- // dylibs
- QDirIterator iter(appBundlePath, QStringList() << QString::fromLatin1("*.dylib"),
- QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories);
- while (iter.hasNext()) {
- iter.next();
- result << iter.fileInfo().filePath();
- }
- return result;
-}
-
-QStringList findAppBundleFiles(const QString &appBundlePath, bool absolutePath = false)
-{
- QStringList result;
-
- QDirIterator iter(appBundlePath, QStringList() << QString::fromLatin1("*"),
- QDir::Files, QDirIterator::Subdirectories);
-
- while (iter.hasNext()) {
- iter.next();
- if (iter.fileInfo().isSymLink())
- continue;
- result << (absolutePath ? iter.fileInfo().absoluteFilePath() : iter.fileInfo().filePath());
- }
-
- return result;
-}
-
-QString findEntitlementsFile(const QString& path)
-{
- QDirIterator iter(path, QStringList() << QString::fromLatin1("*.entitlements"),
- QDir::Files, QDirIterator::Subdirectories);
-
- while (iter.hasNext()) {
- iter.next();
- if (iter.fileInfo().isSymLink())
- continue;
-
- //return the first entitlements file - only one is used for signing anyway
- return iter.fileInfo().absoluteFilePath();
- }
-
- return QString();
-}
-
-QList<FrameworkInfo> getQtFrameworks(const QList<DylibInfo> &dependencies, const QString &appBundlePath, const QSet<QString> &rpaths, bool useDebugLibs)
-{
- QList<FrameworkInfo> libraries;
- for (const DylibInfo &dylibInfo : dependencies) {
- FrameworkInfo info = parseOtoolLibraryLine(dylibInfo.binaryPath, appBundlePath, rpaths, useDebugLibs);
- if (info.frameworkName.isEmpty() == false) {
- LogDebug() << "Adding framework:";
- LogDebug() << info;
- libraries.append(info);
- }
- }
- return libraries;
-}
-
-QString resolveDyldPrefix(const QString &path, const QString &loaderPath, const QString &executablePath)
-{
- if (path.startsWith("@")) {
- if (path.startsWith(QStringLiteral("@executable_path/"))) {
- // path relative to bundle executable dir
- if (QDir::isAbsolutePath(executablePath)) {
- return QDir::cleanPath(QFileInfo(executablePath).path() + path.mid(QStringLiteral("@executable_path").length()));
- } else {
- return QDir::cleanPath(QDir::currentPath() + "/" +
- QFileInfo(executablePath).path() + path.mid(QStringLiteral("@executable_path").length()));
- }
- } else if (path.startsWith(QStringLiteral("@loader_path"))) {
- // path relative to loader dir
- if (QDir::isAbsolutePath(loaderPath)) {
- return QDir::cleanPath(QFileInfo(loaderPath).path() + path.mid(QStringLiteral("@loader_path").length()));
- } else {
- return QDir::cleanPath(QDir::currentPath() + "/" +
- QFileInfo(loaderPath).path() + path.mid(QStringLiteral("@loader_path").length()));
- }
- } else {
- LogError() << "Unexpected prefix" << path;
- }
- }
- return path;
-}
-
-QSet<QString> getBinaryRPaths(const QString &path, bool resolve = true, QString executablePath = QString())
-{
- QSet<QString> rpaths;
-
- QProcess otool;
- otool.start("otool", QStringList() << "-l" << path);
- otool.waitForFinished();
-
- if (otool.exitCode() != 0) {
- LogError() << otool.readAllStandardError();
- }
-
- if (resolve && executablePath.isEmpty()) {
- executablePath = path;
- }
-
- QString output = otool.readAllStandardOutput();
- QStringList outputLines = output.split("\n");
-
- for (auto i = outputLines.cbegin(), end = outputLines.cend(); i != end; ++i) {
- if (i->contains("cmd LC_RPATH") && ++i != end &&
- i->contains("cmdsize") && ++i != end) {
- const QString &rpathCmd = *i;
- int pathStart = rpathCmd.indexOf("path ");
- int pathEnd = rpathCmd.indexOf(" (");
- if (pathStart >= 0 && pathEnd >= 0 && pathStart < pathEnd) {
- QString rpath = rpathCmd.mid(pathStart + 5, pathEnd - pathStart - 5);
- if (resolve) {
- rpaths << resolveDyldPrefix(rpath, path, executablePath);
- } else {
- rpaths << rpath;
- }
- }
- }
- }
-
- return rpaths;
-}
-
-QList<FrameworkInfo> getQtFrameworks(const QString &path, const QString &appBundlePath, const QSet<QString> &rpaths, bool useDebugLibs)
-{
- const OtoolInfo info = findDependencyInfo(path);
- return getQtFrameworks(info.dependencies, appBundlePath, rpaths + getBinaryRPaths(path), useDebugLibs);
-}
-
-QList<FrameworkInfo> getQtFrameworksForPaths(const QStringList &paths, const QString &appBundlePath, const QSet<QString> &rpaths, bool useDebugLibs)
-{
- QList<FrameworkInfo> result;
- QSet<QString> existing;
- foreach (const QString &path, paths) {
- foreach (const FrameworkInfo &info, getQtFrameworks(path, appBundlePath, rpaths, useDebugLibs)) {
- if (!existing.contains(info.frameworkPath)) { // avoid duplicates
- existing.insert(info.frameworkPath);
- result << info;
- }
- }
- }
- return result;
-}
-
-QStringList getBinaryDependencies(const QString executablePath,
- const QString &path,
- const QList<QString> &additionalBinariesContainingRpaths)
-{
- QStringList binaries;
-
- const auto dependencies = findDependencyInfo(path).dependencies;
-
- bool rpathsLoaded = false;
- QSet<QString> rpaths;
-
- // return bundle-local dependencies. (those starting with @executable_path)
- foreach (const DylibInfo &info, dependencies) {
- QString trimmedLine = info.binaryPath;
- if (trimmedLine.startsWith("@executable_path/")) {
- QString binary = QDir::cleanPath(executablePath + trimmedLine.mid(QStringLiteral("@executable_path/").length()));
- if (binary != path)
- binaries.append(binary);
- } else if (trimmedLine.startsWith("@rpath/")) {
- if (!rpathsLoaded) {
- rpaths = getBinaryRPaths(path, true, executablePath);
- foreach (const QString &binaryPath, additionalBinariesContainingRpaths) {
- QSet<QString> binaryRpaths = getBinaryRPaths(binaryPath, true);
- rpaths += binaryRpaths;
- }
- rpathsLoaded = true;
- }
- bool resolved = false;
- foreach (const QString &rpath, rpaths) {
- QString binary = QDir::cleanPath(rpath + "/" + trimmedLine.mid(QStringLiteral("@rpath/").length()));
- LogDebug() << "Checking for" << binary;
- if (QFile::exists(binary)) {
- binaries.append(binary);
- resolved = true;
- break;
- }
- }
- if (!resolved && !rpaths.isEmpty()) {
- LogError() << "Cannot resolve rpath" << trimmedLine;
- LogError() << " using" << rpaths;
- }
- }
- }
-
- return binaries;
-}
-
-// copies everything _inside_ sourcePath to destinationPath
-bool recursiveCopy(const QString &sourcePath, const QString &destinationPath)
-{
- if (!QDir(sourcePath).exists())
- return false;
- QDir().mkpath(destinationPath);
-
- LogNormal() << "copy:" << sourcePath << destinationPath;
-
- QStringList files = QDir(sourcePath).entryList(QStringList() << "*", QDir::Files | QDir::NoDotAndDotDot);
- foreach (QString file, files) {
- const QString fileSourcePath = sourcePath + "/" + file;
- const QString fileDestinationPath = destinationPath + "/" + file;
- copyFilePrintStatus(fileSourcePath, fileDestinationPath);
- }
-
- QStringList subdirs = QDir(sourcePath).entryList(QStringList() << "*", QDir::Dirs | QDir::NoDotAndDotDot);
- foreach (QString dir, subdirs) {
- recursiveCopy(sourcePath + "/" + dir, destinationPath + "/" + dir);
- }
- return true;
-}
-
-void recursiveCopyAndDeploy(const QString &appBundlePath, const QSet<QString> &rpaths, const QString &sourcePath, const QString &destinationPath)
-{
- QDir().mkpath(destinationPath);
-
- LogNormal() << "copy:" << sourcePath << destinationPath;
- const bool isDwarfPath = sourcePath.endsWith("DWARF");
-
- QStringList files = QDir(sourcePath).entryList(QStringList() << QStringLiteral("*"), QDir::Files | QDir::NoDotAndDotDot);
- foreach (QString file, files) {
- const QString fileSourcePath = sourcePath + QLatin1Char('/') + file;
-
- if (file.endsWith("_debug.dylib")) {
- continue; // Skip debug versions
- } else if (!isDwarfPath && file.endsWith(QStringLiteral(".dylib"))) {
- // App store code signing rules forbids code binaries in Contents/Resources/,
- // which poses a problem for deploying mixed .qml/.dylib Qt Quick imports.
- // Solve this by placing the dylibs in Contents/PlugIns/quick, and then
- // creting a symlink to there from the Qt Quick import in Contents/Resources/.
- //
- // Example:
- // MyApp.app/Contents/Resources/qml/QtQuick/Controls/libqtquickcontrolsplugin.dylib ->
- // ../../../../PlugIns/quick/libqtquickcontrolsplugin.dylib
- //
-
- // The .dylib destination path:
- QString fileDestinationDir = appBundlePath + QStringLiteral("/Contents/PlugIns/quick/");
- QDir().mkpath(fileDestinationDir);
- QString fileDestinationPath = fileDestinationDir + file;
-
- // The .dylib symlink destination path:
- QString linkDestinationPath = destinationPath + QLatin1Char('/') + file;
-
- // The (relative) link; with a correct number of "../"'s.
- QString linkPath = QStringLiteral("PlugIns/quick/") + file;
- int cdupCount = linkDestinationPath.count(QStringLiteral("/")) - appBundlePath.count(QStringLiteral("/"));
- for (int i = 0; i < cdupCount - 2; ++i)
- linkPath.prepend("../");
-
- if (copyFilePrintStatus(fileSourcePath, fileDestinationPath)) {
- linkFilePrintStatus(linkPath, linkDestinationPath);
-
- runStrip(fileDestinationPath);
- bool useDebugLibs = false;
- bool useLoaderPath = false;
- QList<FrameworkInfo> frameworks = getQtFrameworks(fileDestinationPath, appBundlePath, rpaths, useDebugLibs);
- deployQtFrameworks(frameworks, appBundlePath, QStringList(fileDestinationPath), useDebugLibs, useLoaderPath);
- }
- } else {
- QString fileDestinationPath = destinationPath + QLatin1Char('/') + file;
- copyFilePrintStatus(fileSourcePath, fileDestinationPath);
- }
- }
-
- QStringList subdirs = QDir(sourcePath).entryList(QStringList() << QStringLiteral("*"), QDir::Dirs | QDir::NoDotAndDotDot);
- foreach (QString dir, subdirs) {
- recursiveCopyAndDeploy(appBundlePath, rpaths, sourcePath + QLatin1Char('/') + dir, destinationPath + QLatin1Char('/') + dir);
- }
-}
-
-QString copyDylib(const FrameworkInfo &framework, const QString path)
-{
- if (!QFile::exists(framework.sourceFilePath)) {
- LogError() << "no file at" << framework.sourceFilePath;
- return QString();
- }
-
- // Construct destination paths. The full path typically looks like
- // MyApp.app/Contents/Frameworks/libfoo.dylib
- QString dylibDestinationDirectory = path + QLatin1Char('/') + framework.frameworkDestinationDirectory;
- QString dylibDestinationBinaryPath = dylibDestinationDirectory + QLatin1Char('/') + framework.binaryName;
-
- // Create destination directory
- if (!QDir().mkpath(dylibDestinationDirectory)) {
- LogError() << "could not create destination directory" << dylibDestinationDirectory;
- return QString();
- }
-
- // Retrun if the dylib has aleardy been deployed
- if (QFileInfo(dylibDestinationBinaryPath).exists() && !alwaysOwerwriteEnabled)
- return dylibDestinationBinaryPath;
-
- // Copy dylib binary
- copyFilePrintStatus(framework.sourceFilePath, dylibDestinationBinaryPath);
- return dylibDestinationBinaryPath;
-}
-
-QString copyFramework(const FrameworkInfo &framework, const QString path)
-{
- if (!QFile::exists(framework.sourceFilePath)) {
- LogError() << "no file at" << framework.sourceFilePath;
- return QString();
- }
-
- // Construct destination paths. The full path typically looks like
- // MyApp.app/Contents/Frameworks/Foo.framework/Versions/5/QtFoo
- QString frameworkDestinationDirectory = path + QLatin1Char('/') + framework.frameworkDestinationDirectory;
- QString frameworkBinaryDestinationDirectory = frameworkDestinationDirectory + QLatin1Char('/') + framework.binaryDirectory;
- QString frameworkDestinationBinaryPath = frameworkBinaryDestinationDirectory + QLatin1Char('/') + framework.binaryName;
-
- // Return if the framework has aleardy been deployed
- if (QDir(frameworkDestinationDirectory).exists() && !alwaysOwerwriteEnabled)
- return QString();
-
- // Create destination directory
- if (!QDir().mkpath(frameworkBinaryDestinationDirectory)) {
- LogError() << "could not create destination directory" << frameworkBinaryDestinationDirectory;
- return QString();
- }
-
- // Now copy the framework. Some parts should be left out (headers/, .prl files).
- // Some parts should be included (Resources/, symlink structure). We want this
- // function to make as few assumtions about the framework as possible while at
- // the same time producing a codesign-compatible framework.
-
- // Copy framework binary
- copyFilePrintStatus(framework.sourceFilePath, frameworkDestinationBinaryPath);
-
- // Copy Resouces/, Libraries/ and Helpers/
- const QString resourcesSourcePath = framework.frameworkPath + "/Resources";
- const QString resourcesDestianationPath = frameworkDestinationDirectory + "/Versions/" + framework.version + "/Resources";
- recursiveCopy(resourcesSourcePath, resourcesDestianationPath);
- const QString librariesSourcePath = framework.frameworkPath + "/Libraries";
- const QString librariesDestianationPath = frameworkDestinationDirectory + "/Versions/" + framework.version + "/Libraries";
- bool createdLibraries = recursiveCopy(librariesSourcePath, librariesDestianationPath);
- const QString helpersSourcePath = framework.frameworkPath + "/Helpers";
- const QString helpersDestianationPath = frameworkDestinationDirectory + "/Versions/" + framework.version + "/Helpers";
- bool createdHelpers = recursiveCopy(helpersSourcePath, helpersDestianationPath);
-
- // Create symlink structure. Links at the framework root point to Versions/Current/
- // which again points to the actual version:
- // QtFoo.framework/QtFoo -> Versions/Current/QtFoo
- // QtFoo.framework/Resources -> Versions/Current/Resources
- // QtFoo.framework/Versions/Current -> 5
- linkFilePrintStatus("Versions/Current/" + framework.binaryName, frameworkDestinationDirectory + "/" + framework.binaryName);
- linkFilePrintStatus("Versions/Current/Resources", frameworkDestinationDirectory + "/Resources");
- if (createdLibraries)
- linkFilePrintStatus("Versions/Current/Libraries", frameworkDestinationDirectory + "/Libraries");
- if (createdHelpers)
- linkFilePrintStatus("Versions/Current/Helpers", frameworkDestinationDirectory + "/Helpers");
- linkFilePrintStatus(framework.version, frameworkDestinationDirectory + "/Versions/Current");
-
- // Correct Info.plist location for frameworks produced by older versions of qmake
- // Contents/Info.plist should be Versions/5/Resources/Info.plist
- const QString legacyInfoPlistPath = framework.frameworkPath + "/Contents/Info.plist";
- const QString correctInfoPlistPath = frameworkDestinationDirectory + "/Resources/Info.plist";
- if (QFile(legacyInfoPlistPath).exists()) {
- copyFilePrintStatus(legacyInfoPlistPath, correctInfoPlistPath);
- patch_debugInInfoPlist(correctInfoPlistPath);
- }
- return frameworkDestinationBinaryPath;
-}
-
-void runInstallNameTool(QStringList options)
-{
- QProcess installNametool;
- installNametool.start("install_name_tool", options);
- installNametool.waitForFinished();
- if (installNametool.exitCode() != 0) {
- LogError() << installNametool.readAllStandardError();
- LogError() << installNametool.readAllStandardOutput();
- }
-}
-
-void changeIdentification(const QString &id, const QString &binaryPath)
-{
- LogDebug() << "Using install_name_tool:";
- LogDebug() << " change identification in" << binaryPath;
- LogDebug() << " to" << id;
- runInstallNameTool(QStringList() << "-id" << id << binaryPath);
-}
-
-void changeInstallName(const QString &bundlePath, const FrameworkInfo &framework, const QStringList &binaryPaths, bool useLoaderPath)
-{
- const QString absBundlePath = QFileInfo(bundlePath).absoluteFilePath();
- foreach (const QString &binary, binaryPaths) {
- QString deployedInstallName;
- if (useLoaderPath) {
- deployedInstallName = QLatin1String("@loader_path/")
- + QFileInfo(binary).absoluteDir().relativeFilePath(absBundlePath + QLatin1Char('/') + framework.binaryDestinationDirectory + QLatin1Char('/') + framework.binaryName);
- } else {
- deployedInstallName = framework.deployedInstallName;
- }
- changeInstallName(framework.installName, deployedInstallName, binary);
- // Workaround for the case when the library ID name is a symlink, while the dependencies
- // specified using the canonical path to the library (QTBUG-56814)
- QString canonicalInstallName = QFileInfo(framework.installName).canonicalFilePath();
- if (!canonicalInstallName.isEmpty() && canonicalInstallName != framework.installName) {
- changeInstallName(canonicalInstallName, deployedInstallName, binary);
- }
- }
-}
-
-void addRPath(const QString &rpath, const QString &binaryPath)
-{
- runInstallNameTool(QStringList() << "-add_rpath" << rpath << binaryPath);
-}
-
-void deployRPaths(const QString &bundlePath, const QSet<QString> &rpaths, const QString &binaryPath, bool useLoaderPath)
-{
- const QString absFrameworksPath = QFileInfo(bundlePath).absoluteFilePath()
- + QLatin1String("/Contents/Frameworks");
- const QString relativeFrameworkPath = QFileInfo(binaryPath).absoluteDir().relativeFilePath(absFrameworksPath);
- const QString loaderPathToFrameworks = QLatin1String("@loader_path/") + relativeFrameworkPath;
- bool rpathToFrameworksFound = false;
- QStringList args;
- foreach (const QString &rpath, getBinaryRPaths(binaryPath, false)) {
- if (rpath == "@executable_path/../Frameworks" ||
- rpath == loaderPathToFrameworks) {
- rpathToFrameworksFound = true;
- continue;
- }
- if (rpaths.contains(resolveDyldPrefix(rpath, binaryPath, binaryPath))) {
- args << "-delete_rpath" << rpath;
- }
- }
- if (!args.length()) {
- return;
- }
- if (!rpathToFrameworksFound) {
- if (!useLoaderPath) {
- args << "-add_rpath" << "@executable_path/../Frameworks";
- } else {
- args << "-add_rpath" << loaderPathToFrameworks;
- }
- }
- LogDebug() << "Using install_name_tool:";
- LogDebug() << " change rpaths in" << binaryPath;
- LogDebug() << " using" << args;
- runInstallNameTool(QStringList() << args << binaryPath);
-}
-
-void deployRPaths(const QString &bundlePath, const QSet<QString> &rpaths, const QStringList &binaryPaths, bool useLoaderPath)
-{
- foreach (const QString &binary, binaryPaths) {
- deployRPaths(bundlePath, rpaths, binary, useLoaderPath);
- }
-}
-
-void changeInstallName(const QString &oldName, const QString &newName, const QString &binaryPath)
-{
- LogDebug() << "Using install_name_tool:";
- LogDebug() << " in" << binaryPath;
- LogDebug() << " change reference" << oldName;
- LogDebug() << " to" << newName;
- runInstallNameTool(QStringList() << "-change" << oldName << newName << binaryPath);
-}
-
-void runStrip(const QString &binaryPath)
-{
- if (runStripEnabled == false)
- return;
-
- LogDebug() << "Using strip:";
- LogDebug() << " stripped" << binaryPath;
- QProcess strip;
- strip.start("strip", QStringList() << "-x" << binaryPath);
- strip.waitForFinished();
- if (strip.exitCode() != 0) {
- LogError() << strip.readAllStandardError();
- LogError() << strip.readAllStandardOutput();
- }
-}
-
-void stripAppBinary(const QString &bundlePath)
-{
- runStrip(findAppBinary(bundlePath));
-}
-
-bool DeploymentInfo::containsModule(const QString &module, const QString &libInFix) const
-{
- // Check for framework first
- if (deployedFrameworks.contains(QLatin1String("Qt") + module + libInFix +
- QLatin1String(".framework"))) {
- return true;
- }
- // Check for dylib
- const QRegularExpression dylibRegExp(QLatin1String("libQt[0-9]+") + module +
- libInFix + QLatin1String(".[0-9]+.dylib"));
- return deployedFrameworks.filter(dylibRegExp).size() > 0;
-}
-
-/*
- Deploys the the listed frameworks listed into an app bundle.
- The frameworks are searched for dependencies, which are also deployed.
- (deploying Qt3Support will also deploy QtNetwork and QtSql for example.)
- Returns a DeploymentInfo structure containing the Qt path used and a
- a list of actually deployed frameworks.
-*/
-DeploymentInfo deployQtFrameworks(QList<FrameworkInfo> frameworks,
- const QString &bundlePath, const QStringList &binaryPaths, bool useDebugLibs,
- bool useLoaderPath)
-{
- LogNormal();
- LogNormal() << "Deploying Qt frameworks found inside:" << binaryPaths;
- QStringList copiedFrameworks;
- DeploymentInfo deploymentInfo;
- deploymentInfo.useLoaderPath = useLoaderPath;
- deploymentInfo.isFramework = bundlePath.contains(".framework");
- deploymentInfo.isDebug = false;
- QSet<QString> rpathsUsed;
-
- while (frameworks.isEmpty() == false) {
- const FrameworkInfo framework = frameworks.takeFirst();
- copiedFrameworks.append(framework.frameworkName);
-
- // If a single dependency has the _debug suffix, we treat that as
- // the whole deployment being a debug deployment, including deploying
- // the debug version of plugins.
- if (framework.isDebugLibrary())
- deploymentInfo.isDebug = true;
-
- if (deploymentInfo.qtPath.isNull())
- deploymentInfo.qtPath = QLibraryInfo::location(QLibraryInfo::PrefixPath);
-
- if (framework.frameworkDirectory.startsWith(bundlePath)) {
- LogError() << framework.frameworkName << "already deployed, skipping.";
- continue;
- }
-
- if (!framework.rpathUsed.isEmpty())
- rpathsUsed << framework.rpathUsed;
-
- // Copy the framework/dylib to the app bundle.
- const QString deployedBinaryPath = framework.isDylib ? copyDylib(framework, bundlePath)
- : copyFramework(framework, bundlePath);
-
- // Install_name_tool the new id into the binaries
- changeInstallName(bundlePath, framework, binaryPaths, useLoaderPath);
-
- // Skip the rest if already was deployed.
- if (deployedBinaryPath.isNull())
- continue;
-
- runStrip(deployedBinaryPath);
-
- // Install_name_tool it a new id.
- if (!framework.rpathUsed.length()) {
- changeIdentification(framework.deployedInstallName, deployedBinaryPath);
- }
-
- // Check for framework dependencies
- QList<FrameworkInfo> dependencies = getQtFrameworks(deployedBinaryPath, bundlePath, rpathsUsed, useDebugLibs);
-
- foreach (FrameworkInfo dependency, dependencies) {
- if (dependency.rpathUsed.isEmpty()) {
- changeInstallName(bundlePath, dependency, QStringList() << deployedBinaryPath, useLoaderPath);
- } else {
- rpathsUsed << dependency.rpathUsed;
- }
-
- // Deploy framework if necessary.
- if (copiedFrameworks.contains(dependency.frameworkName) == false && frameworks.contains(dependency) == false) {
- frameworks.append(dependency);
- }
- }
- }
- deploymentInfo.deployedFrameworks = copiedFrameworks;
- deployRPaths(bundlePath, rpathsUsed, binaryPaths, useLoaderPath);
- deploymentInfo.rpathsUsed += rpathsUsed;
- return deploymentInfo;
-}
-
-DeploymentInfo deployQtFrameworks(const QString &appBundlePath, const QStringList &additionalExecutables, bool useDebugLibs)
-{
- ApplicationBundleInfo applicationBundle;
- applicationBundle.path = appBundlePath;
- applicationBundle.binaryPath = findAppBinary(appBundlePath);
- applicationBundle.libraryPaths = findAppLibraries(appBundlePath);
- QStringList allBinaryPaths = QStringList() << applicationBundle.binaryPath << applicationBundle.libraryPaths
- << additionalExecutables;
- QSet<QString> allLibraryPaths = getBinaryRPaths(applicationBundle.binaryPath, true);
- allLibraryPaths.insert(QLibraryInfo::location(QLibraryInfo::LibrariesPath));
- QList<FrameworkInfo> frameworks = getQtFrameworksForPaths(allBinaryPaths, appBundlePath, allLibraryPaths, useDebugLibs);
- if (frameworks.isEmpty() && !alwaysOwerwriteEnabled) {
- LogWarning();
- LogWarning() << "Could not find any external Qt frameworks to deploy in" << appBundlePath;
- LogWarning() << "Perhaps macdeployqt was already used on" << appBundlePath << "?";
- LogWarning() << "If so, you will need to rebuild" << appBundlePath << "before trying again.";
- return DeploymentInfo();
- } else {
- return deployQtFrameworks(frameworks, applicationBundle.path, allBinaryPaths, useDebugLibs, !additionalExecutables.isEmpty());
- }
-}
-
-QString getLibInfix(const QStringList &deployedFrameworks)
-{
- QString libInfix;
- foreach (const QString &framework, deployedFrameworks) {
- if (framework.startsWith(QStringLiteral("QtCore")) && framework.endsWith(QStringLiteral(".framework"))) {
- Q_ASSERT(framework.length() >= 16);
- // 16 == "QtCore" + ".framework"
- const int lengthOfLibInfix = framework.length() - 16;
- if (lengthOfLibInfix)
- libInfix = framework.mid(6, lengthOfLibInfix);
- break;
- }
- }
- return libInfix;
-}
-
-void deployPlugins(const ApplicationBundleInfo &appBundleInfo, const QString &pluginSourcePath,
- const QString pluginDestinationPath, DeploymentInfo deploymentInfo, bool useDebugLibs)
-{
- LogNormal() << "Deploying plugins from" << pluginSourcePath;
-
- if (!pluginSourcePath.contains(deploymentInfo.pluginPath))
- return;
-
- // Plugin white list:
- QStringList pluginList;
-
- const auto addPlugins = [&pluginSourcePath,&pluginList,useDebugLibs](const QString &subDirectory,
- const std::function<bool(QString)> &predicate = std::function<bool(QString)>()) {
- const QStringList libs = QDir(pluginSourcePath + QLatin1Char('/') + subDirectory)
- .entryList({QStringLiteral("*.dylib")});
- for (const QString &lib : libs) {
- if (lib.endsWith(QStringLiteral("_debug.dylib")) != useDebugLibs)
- continue;
- if (!predicate || predicate(lib))
- pluginList.append(subDirectory + QLatin1Char('/') + lib);
- }
- };
-
- // Platform plugin:
- addPlugins(QStringLiteral("platforms"), [](const QString &lib) {
- // Ignore minimal and offscreen platform plugins
- if (!lib.contains(QStringLiteral("cocoa")))
- return false;
- return true;
- });
-
- // Cocoa print support
- addPlugins(QStringLiteral("printsupport"));
-
- // Styles
- addPlugins(QStringLiteral("styles"));
-
- // Check if Qt was configured with -libinfix
- const QString libInfix = getLibInfix(deploymentInfo.deployedFrameworks);
-
- // Network
- if (deploymentInfo.containsModule("Network", libInfix))
- addPlugins(QStringLiteral("bearer"));
-
- // All image formats (svg if QtSvg is used)
- const bool usesSvg = deploymentInfo.containsModule("Svg", libInfix);
- addPlugins(QStringLiteral("imageformats"), [usesSvg](const QString &lib) {
- if (lib.contains(QStringLiteral("qsvg")) && !usesSvg)
- return false;
- return true;
- });
-
- addPlugins(QStringLiteral("iconengines"));
-
- // Platforminputcontext plugins if QtGui is in use
- if (deploymentInfo.containsModule("Gui", libInfix)) {
- addPlugins(QStringLiteral("platforminputcontexts"), [&addPlugins](const QString &lib) {
- // Deploy the virtual keyboard plugins if we have deployed virtualkeyboard
- if (lib.startsWith(QStringLiteral("libqtvirtualkeyboard")))
- addPlugins(QStringLiteral("virtualkeyboard"));
- return true;
- });
- }
-
- // Sql plugins if QtSql is in use
- if (deploymentInfo.containsModule("Sql", libInfix)) {
- addPlugins(QStringLiteral("sqldrivers"), [](const QString &lib) {
- if (lib.startsWith(QStringLiteral("libqsqlodbc")) || lib.startsWith(QStringLiteral("libqsqlpsql"))) {
- LogWarning() << "Plugin" << lib << "uses private API and is not Mac App store compliant.";
- if (appstoreCompliant) {
- LogWarning() << "Skip plugin" << lib;
- return false;
- }
- }
- return true;
- });
- }
-
- // WebView plugins if QtWebView is in use
- if (deploymentInfo.containsModule("WebView", libInfix)) {
- addPlugins(QStringLiteral("webview"), [](const QString &lib) {
- if (lib.startsWith(QStringLiteral("libqtwebview_webengine"))) {
- LogWarning() << "Plugin" << lib << "uses QtWebEngine and is not Mac App store compliant.";
- if (appstoreCompliant) {
- LogWarning() << "Skip plugin" << lib;
- return false;
- }
- }
- return true;
- });
- }
-
- static const std::map<QString, std::vector<QString>> map {
- {QStringLiteral("Multimedia"), {QStringLiteral("mediaservice"), QStringLiteral("audio")}},
- {QStringLiteral("3DRender"), {QStringLiteral("sceneparsers"), QStringLiteral("geometryloaders"), QStringLiteral("renderers")}},
- {QStringLiteral("3DQuickRender"), {QStringLiteral("renderplugins")}},
- {QStringLiteral("Positioning"), {QStringLiteral("position")}},
- {QStringLiteral("Location"), {QStringLiteral("geoservices")}},
- {QStringLiteral("TextToSpeech"), {QStringLiteral("texttospeech")}}
- };
-
- for (const auto &it : map) {
- if (deploymentInfo.containsModule(it.first, libInfix)) {
- for (const auto &pluginType : it.second) {
- addPlugins(pluginType);
- }
- }
- }
-
- foreach (const QString &plugin, pluginList) {
- QString sourcePath = pluginSourcePath + "/" + plugin;
- const QString destinationPath = pluginDestinationPath + "/" + plugin;
- QDir dir;
- dir.mkpath(QFileInfo(destinationPath).path());
-
- if (copyFilePrintStatus(sourcePath, destinationPath)) {
- runStrip(destinationPath);
- QList<FrameworkInfo> frameworks = getQtFrameworks(destinationPath, appBundleInfo.path, deploymentInfo.rpathsUsed, useDebugLibs);
- deployQtFrameworks(frameworks, appBundleInfo.path, QStringList() << destinationPath, useDebugLibs, deploymentInfo.useLoaderPath);
- }
- }
-}
-
-void createQtConf(const QString &appBundlePath)
-{
- // Set Plugins and imports paths. These are relative to App.app/Contents.
- QByteArray contents = "[Paths]\n"
- "Plugins = PlugIns\n"
- "Imports = Resources/qml\n"
- "Qml2Imports = Resources/qml\n";
-
- QString filePath = appBundlePath + "/Contents/Resources/";
- QString fileName = filePath + "qt.conf";
-
- QDir().mkpath(filePath);
-
- QFile qtconf(fileName);
- if (qtconf.exists() && !alwaysOwerwriteEnabled) {
- LogWarning();
- LogWarning() << fileName << "already exists, will not overwrite.";
- LogWarning() << "To make sure the plugins are loaded from the correct location,";
- LogWarning() << "please make sure qt.conf contains the following lines:";
- LogWarning() << "[Paths]";
- LogWarning() << " Plugins = PlugIns";
- return;
- }
-
- qtconf.open(QIODevice::WriteOnly);
- if (qtconf.write(contents) != -1) {
- LogNormal() << "Created configuration file:" << fileName;
- LogNormal() << "This file sets the plugin search path to" << appBundlePath + "/Contents/PlugIns";
- }
-}
-
-void deployPlugins(const QString &appBundlePath, DeploymentInfo deploymentInfo, bool useDebugLibs)
-{
- ApplicationBundleInfo applicationBundle;
- applicationBundle.path = appBundlePath;
- applicationBundle.binaryPath = findAppBinary(appBundlePath);
-
- const QString pluginDestinationPath = appBundlePath + "/" + "Contents/PlugIns";
- deployPlugins(applicationBundle, deploymentInfo.pluginPath, pluginDestinationPath, deploymentInfo, useDebugLibs);
-}
-
-void deployQmlImport(const QString &appBundlePath, const QSet<QString> &rpaths, const QString &importSourcePath, const QString &importName)
-{
- QString importDestinationPath = appBundlePath + "/Contents/Resources/qml/" + importName;
-
- // Skip already deployed imports. This can happen in cases like "QtQuick.Controls.Styles",
- // where deploying QtQuick.Controls will also deploy the "Styles" sub-import.
- if (QDir().exists(importDestinationPath))
- return;
-
- recursiveCopyAndDeploy(appBundlePath, rpaths, importSourcePath, importDestinationPath);
-}
-
-static bool importLessThan(const QVariant &v1, const QVariant &v2)
-{
- QVariantMap import1 = v1.toMap();
- QVariantMap import2 = v2.toMap();
- QString path1 = import1["path"].toString();
- QString path2 = import2["path"].toString();
- return path1 < path2;
-}
-
-// Scan qml files in qmldirs for import statements, deploy used imports from Qml2ImportsPath to Contents/Resources/qml.
-bool deployQmlImports(const QString &appBundlePath, DeploymentInfo deploymentInfo, QStringList &qmlDirs, QStringList &qmlImportPaths)
-{
- LogNormal() << "";
- LogNormal() << "Deploying QML imports ";
- LogNormal() << "Application QML file path(s) is" << qmlDirs;
- LogNormal() << "QML module search path(s) is" << qmlImportPaths;
-
- // Use qmlimportscanner from QLibraryInfo::BinariesPath
- QString qmlImportScannerPath = QDir::cleanPath(QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qmlimportscanner");
-
- // Fallback: Look relative to the macdeployqt binary
- if (!QFile(qmlImportScannerPath).exists())
- qmlImportScannerPath = QCoreApplication::applicationDirPath() + "/qmlimportscanner";
-
- // Verify that we found a qmlimportscanner binary
- if (!QFile(qmlImportScannerPath).exists()) {
- LogError() << "qmlimportscanner not found at" << qmlImportScannerPath;
- LogError() << "Rebuild qtdeclarative/tools/qmlimportscanner";
- return false;
- }
-
- // build argument list for qmlimportsanner: "-rootPath foo/ -rootPath bar/ -importPath path/to/qt/qml"
- // ("rootPath" points to a directory containing app qml, "importPath" is where the Qt imports are installed)
- QStringList argumentList;
- foreach (const QString &qmlDir, qmlDirs) {
- argumentList.append("-rootPath");
- argumentList.append(qmlDir);
- }
- for (const QString &importPath : qmlImportPaths)
- argumentList << "-importPath" << importPath;
- QString qmlImportsPath = QLibraryInfo::location(QLibraryInfo::Qml2ImportsPath);
- argumentList.append( "-importPath");
- argumentList.append(qmlImportsPath);
-
- // run qmlimportscanner
- QProcess qmlImportScanner;
- qmlImportScanner.start(qmlImportScannerPath, argumentList);
- if (!qmlImportScanner.waitForStarted()) {
- LogError() << "Could not start qmlimpoortscanner. Process error is" << qmlImportScanner.errorString();
- return false;
- }
- qmlImportScanner.waitForFinished();
-
- // log qmlimportscanner errors
- qmlImportScanner.setReadChannel(QProcess::StandardError);
- QByteArray errors = qmlImportScanner.readAll();
- if (!errors.isEmpty()) {
- LogWarning() << "QML file parse error (deployment will continue):";
- LogWarning() << errors;
- }
-
- // parse qmlimportscanner json
- qmlImportScanner.setReadChannel(QProcess::StandardOutput);
- QByteArray json = qmlImportScanner.readAll();
- QJsonDocument doc = QJsonDocument::fromJson(json);
- if (!doc.isArray()) {
- LogError() << "qmlimportscanner output error. Expected json array, got:";
- LogError() << json;
- return false;
- }
-
- // sort imports to deploy a module before its sub-modules (otherwise
- // deployQmlImports can consider the module deployed if it has already
- // deployed one of its sub-module)
- QVariantList array = doc.array().toVariantList();
- std::sort(array.begin(), array.end(), importLessThan);
-
- // deploy each import
- foreach (const QVariant &importValue, array) {
- QVariantMap import = importValue.toMap();
- QString name = import["name"].toString();
- QString path = import["path"].toString();
- QString type = import["type"].toString();
-
- LogNormal() << "Deploying QML import" << name;
-
- // Skip imports with missing info - path will be empty if the import is not found.
- if (name.isEmpty() || path.isEmpty()) {
- LogNormal() << " Skip import: name or path is empty";
- LogNormal() << "";
- continue;
- }
-
- // Deploy module imports only, skip directory (local/remote) and js imports. These
- // should be deployed as a part of the application build.
- if (type != QStringLiteral("module")) {
- LogNormal() << " Skip non-module import";
- LogNormal() << "";
- continue;
- }
-
- // Create the destination path from the name
- // and version (grabbed from the source path)
- // ### let qmlimportscanner provide this.
- name.replace(QLatin1Char('.'), QLatin1Char('/'));
- int secondTolast = path.length() - 2;
- QString version = path.mid(secondTolast);
- if (version.startsWith(QLatin1Char('.')))
- name.append(version);
-
- deployQmlImport(appBundlePath, deploymentInfo.rpathsUsed, path, name);
- LogNormal() << "";
- }
- return true;
-}
-
-void changeQtFrameworks(const QList<FrameworkInfo> frameworks, const QStringList &binaryPaths, const QString &absoluteQtPath)
-{
- LogNormal() << "Changing" << binaryPaths << "to link against";
- LogNormal() << "Qt in" << absoluteQtPath;
- QString finalQtPath = absoluteQtPath;
-
- if (!absoluteQtPath.startsWith("/Library/Frameworks"))
- finalQtPath += "/lib/";
-
- foreach (FrameworkInfo framework, frameworks) {
- const QString oldBinaryId = framework.installName;
- const QString newBinaryId = finalQtPath + framework.frameworkName + framework.binaryPath;
- foreach (const QString &binary, binaryPaths)
- changeInstallName(oldBinaryId, newBinaryId, binary);
- }
-}
-
-void changeQtFrameworks(const QString appPath, const QString &qtPath, bool useDebugLibs)
-{
- const QString appBinaryPath = findAppBinary(appPath);
- const QStringList libraryPaths = findAppLibraries(appPath);
- const QList<FrameworkInfo> frameworks = getQtFrameworksForPaths(QStringList() << appBinaryPath << libraryPaths, appPath, getBinaryRPaths(appBinaryPath, true), useDebugLibs);
- if (frameworks.isEmpty()) {
- LogWarning();
- LogWarning() << "Could not find any _external_ Qt frameworks to change in" << appPath;
- return;
- } else {
- const QString absoluteQtPath = QDir(qtPath).absolutePath();
- changeQtFrameworks(frameworks, QStringList() << appBinaryPath << libraryPaths, absoluteQtPath);
- }
-}
-
-void codesignFile(const QString &identity, const QString &filePath)
-{
- if (!runCodesign)
- return;
-
- QString codeSignLogMessage = "codesign";
- if (hardenedRuntime)
- codeSignLogMessage += ", enable hardened runtime";
- if (secureTimestamp)
- codeSignLogMessage += ", include secure timestamp";
- LogNormal() << codeSignLogMessage << filePath;
-
- QStringList codeSignOptions = { "--preserve-metadata=identifier,entitlements", "--force", "-s",
- identity, filePath };
- if (hardenedRuntime)
- codeSignOptions << "-o" << "runtime";
-
- if (secureTimestamp)
- codeSignOptions << "--timestamp";
-
- if (!extraEntitlements.isEmpty())
- codeSignOptions << "--entitlements" << extraEntitlements;
-
- QProcess codesign;
- codesign.start("codesign", codeSignOptions);
- codesign.waitForFinished(-1);
-
- QByteArray err = codesign.readAllStandardError();
- if (codesign.exitCode() > 0) {
- LogError() << "Codesign signing error:";
- LogError() << err;
- } else if (!err.isEmpty()) {
- LogDebug() << err;
- }
-}
-
-QSet<QString> codesignBundle(const QString &identity,
- const QString &appBundlePath,
- QList<QString> additionalBinariesContainingRpaths)
-{
- // Code sign all binaries in the app bundle. This needs to
- // be done inside-out, e.g sign framework dependencies
- // before the main app binary. The codesign tool itself has
- // a "--deep" option to do this, but usage when signing is
- // not recommended: "Signing with --deep is for emergency
- // repairs and temporary adjustments only."
-
- LogNormal() << "";
- LogNormal() << "Signing" << appBundlePath << "with identity" << identity;
-
- QStack<QString> pendingBinaries;
- QSet<QString> pendingBinariesSet;
- QSet<QString> signedBinaries;
-
- // Create the root code-binary set. This set consists of the application
- // executable(s) and the plugins.
- QString appBundleAbsolutePath = QFileInfo(appBundlePath).absoluteFilePath();
- QString rootBinariesPath = appBundleAbsolutePath + "/Contents/MacOS/";
- QStringList foundRootBinaries = QDir(rootBinariesPath).entryList(QStringList() << "*", QDir::Files);
- foreach (const QString &binary, foundRootBinaries) {
- QString binaryPath = rootBinariesPath + binary;
- pendingBinaries.push(binaryPath);
- pendingBinariesSet.insert(binaryPath);
- additionalBinariesContainingRpaths.append(binaryPath);
- }
-
- bool getAbsoltuePath = true;
- QStringList foundPluginBinaries = findAppBundleFiles(appBundlePath + "/Contents/PlugIns/", getAbsoltuePath);
- foreach (const QString &binary, foundPluginBinaries) {
- pendingBinaries.push(binary);
- pendingBinariesSet.insert(binary);
- }
-
- // Add frameworks for processing.
- QStringList frameworkPaths = findAppFrameworkPaths(appBundlePath);
- foreach (const QString &frameworkPath, frameworkPaths) {
-
- // Prioritise first to sign any additional inner bundles found in the Helpers folder (e.g
- // used by QtWebEngine).
- QDirIterator helpersIterator(frameworkPath, QStringList() << QString::fromLatin1("Helpers"), QDir::Dirs | QDir::NoSymLinks, QDirIterator::Subdirectories);
- while (helpersIterator.hasNext()) {
- helpersIterator.next();
- QString helpersPath = helpersIterator.filePath();
- QStringList innerBundleNames = QDir(helpersPath).entryList(QStringList() << "*.app", QDir::Dirs);
- foreach (const QString &innerBundleName, innerBundleNames)
- signedBinaries += codesignBundle(identity,
- helpersPath + "/" + innerBundleName,
- additionalBinariesContainingRpaths);
- }
-
- // Also make sure to sign any libraries that will not be found by otool because they
- // are not linked and won't be seen as a dependency.
- QDirIterator librariesIterator(frameworkPath, QStringList() << QString::fromLatin1("Libraries"), QDir::Dirs | QDir::NoSymLinks, QDirIterator::Subdirectories);
- while (librariesIterator.hasNext()) {
- librariesIterator.next();
- QString librariesPath = librariesIterator.filePath();
- QStringList bundleFiles = findAppBundleFiles(librariesPath, getAbsoltuePath);
- foreach (const QString &binary, bundleFiles) {
- pendingBinaries.push(binary);
- pendingBinariesSet.insert(binary);
- }
- }
- }
-
- // Sign all binaries; use otool to find and sign dependencies first.
- while (!pendingBinaries.isEmpty()) {
- QString binary = pendingBinaries.pop();
- if (signedBinaries.contains(binary))
- continue;
-
- // Check if there are unsigned dependencies, sign these first.
- QStringList dependencies = getBinaryDependencies(rootBinariesPath, binary,
- additionalBinariesContainingRpaths);
- dependencies = QSet<QString>(dependencies.begin(), dependencies.end())
- .subtract(signedBinaries)
- .subtract(pendingBinariesSet)
- .values();
-
- if (!dependencies.isEmpty()) {
- pendingBinaries.push(binary);
- pendingBinariesSet.insert(binary);
- int dependenciesSkipped = 0;
- foreach (const QString &dependency, dependencies) {
- // Skip dependencies that are outside the current app bundle, because this might
- // cause a codesign error if the current bundle is part of the dependency (e.g.
- // a bundle is part of a framework helper, and depends on that framework).
- // The dependencies will be taken care of after the current bundle is signed.
- if (!dependency.startsWith(appBundleAbsolutePath)) {
- ++dependenciesSkipped;
- LogNormal() << "Skipping outside dependency: " << dependency;
- continue;
- }
- pendingBinaries.push(dependency);
- pendingBinariesSet.insert(dependency);
- }
-
- // If all dependencies were skipped, make sure the binary is actually signed, instead
- // of going into an infinite loop.
- if (dependenciesSkipped == dependencies.size()) {
- pendingBinaries.pop();
- } else {
- continue;
- }
- }
-
- // Look for an entitlements file in the bundle to include when signing
- extraEntitlements = findEntitlementsFile(appBundleAbsolutePath + "/Contents/Resources/");
-
- // All dependencies are signed, now sign this binary.
- codesignFile(identity, binary);
- signedBinaries.insert(binary);
- pendingBinariesSet.remove(binary);
- }
-
- LogNormal() << "Finished codesigning " << appBundlePath << "with identity" << identity;
-
- // Verify code signature
- QProcess codesign;
- codesign.start("codesign", QStringList() << "--deep" << "-v" << appBundlePath);
- codesign.waitForFinished(-1);
- QByteArray err = codesign.readAllStandardError();
- if (codesign.exitCode() > 0) {
- LogError() << "codesign verification error:";
- LogError() << err;
- } else if (!err.isEmpty()) {
- LogDebug() << err;
- }
-
- return signedBinaries;
-}
-
-void codesign(const QString &identity, const QString &appBundlePath) {
- codesignBundle(identity, appBundlePath, QList<QString>());
-}
-
-void createDiskImage(const QString &appBundlePath, const QString &filesystemType)
-{
- QString appBaseName = appBundlePath;
- appBaseName.chop(4); // remove ".app" from end
-
- QString dmgName = appBaseName + ".dmg";
-
- QFile dmg(dmgName);
-
- if (dmg.exists() && alwaysOwerwriteEnabled)
- dmg.remove();
-
- if (dmg.exists()) {
- LogNormal() << "Disk image already exists, skipping .dmg creation for" << dmg.fileName();
- } else {
- LogNormal() << "Creating disk image (.dmg) for" << appBundlePath;
- }
-
- LogNormal() << "Image will use" << filesystemType;
-
- // More dmg options can be found in the hdiutil man page.
- QStringList options = QStringList()
- << "create" << dmgName
- << "-srcfolder" << appBundlePath
- << "-format" << "UDZO"
- << "-fs" << filesystemType
- << "-volname" << appBaseName;
-
- QProcess hdutil;
- hdutil.start("hdiutil", options);
- hdutil.waitForFinished(-1);
- if (hdutil.exitCode() != 0) {
- LogError() << "Bundle creation error:" << hdutil.readAllStandardError();
- }
-}
-
-void fixupFramework(const QString &frameworkName)
-{
- // Expected framework name looks like "Foo.framework"
- QStringList parts = frameworkName.split(".");
- if (parts.count() < 2) {
- LogError() << "fixupFramework: Unexpected framework name" << frameworkName;
- return;
- }
-
- // Assume framework binary path is Foo.framework/Foo
- QString frameworkBinary = frameworkName + QStringLiteral("/") + parts[0];
-
- // Xcode expects to find Foo.framework/Versions/A when code
- // signing, while qmake typically generates numeric versions.
- // Create symlink to the actual version in the framework.
- linkFilePrintStatus("Current", frameworkName + "/Versions/A");
-
- // Set up @rpath structure.
- changeIdentification("@rpath/" + frameworkBinary, frameworkBinary);
- addRPath("@loader_path/../../Contents/Frameworks/", frameworkBinary);
-}
diff --git a/src/macdeployqt/shared/shared.h b/src/macdeployqt/shared/shared.h
deleted file mode 100644
index ab28360d5..000000000
--- a/src/macdeployqt/shared/shared.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef MAC_DEPLOMYMENT_SHARED_H
-#define MAC_DEPLOMYMENT_SHARED_H
-
-#include <QString>
-#include <QStringList>
-#include <QDebug>
-#include <QSet>
-#include <QVersionNumber>
-
-extern int logLevel;
-#define LogError() if (logLevel < 0) {} else qDebug() << "ERROR:"
-#define LogWarning() if (logLevel < 1) {} else qDebug() << "WARNING:"
-#define LogNormal() if (logLevel < 2) {} else qDebug() << "Log:"
-#define LogDebug() if (logLevel < 3) {} else qDebug() << "Log:"
-
-extern bool runStripEnabled;
-
-class FrameworkInfo
-{
-public:
- bool isDylib;
- QString frameworkDirectory;
- QString frameworkName;
- QString frameworkPath;
- QString binaryDirectory;
- QString binaryName;
- QString binaryPath;
- QString rpathUsed;
- QString version;
- QString installName;
- QString deployedInstallName;
- QString sourceFilePath;
- QString frameworkDestinationDirectory;
- QString binaryDestinationDirectory;
-
- bool isDebugLibrary() const
- {
- return binaryName.contains(QLatin1String("_debug"));
- }
-};
-
-class DylibInfo
-{
-public:
- QString binaryPath;
- QVersionNumber currentVersion;
- QVersionNumber compatibilityVersion;
-};
-
-class OtoolInfo
-{
-public:
- QString installName;
- QString binaryPath;
- QVersionNumber currentVersion;
- QVersionNumber compatibilityVersion;
- QList<DylibInfo> dependencies;
-};
-
-bool operator==(const FrameworkInfo &a, const FrameworkInfo &b);
-QDebug operator<<(QDebug debug, const FrameworkInfo &info);
-
-class ApplicationBundleInfo
-{
- public:
- QString path;
- QString binaryPath;
- QStringList libraryPaths;
-};
-
-class DeploymentInfo
-{
-public:
- QString qtPath;
- QString pluginPath;
- QStringList deployedFrameworks;
- QSet<QString> rpathsUsed;
- bool useLoaderPath;
- bool isFramework;
- bool isDebug;
-
- bool containsModule(const QString &module, const QString &libInFix) const;
-};
-
-inline QDebug operator<<(QDebug debug, const ApplicationBundleInfo &info);
-
-void changeQtFrameworks(const QString appPath, const QString &qtPath, bool useDebugLibs);
-void changeQtFrameworks(const QList<FrameworkInfo> frameworks, const QStringList &binaryPaths, const QString &qtPath);
-
-OtoolInfo findDependencyInfo(const QString &binaryPath);
-FrameworkInfo parseOtoolLibraryLine(const QString &line, const QString &appBundlePath, const QSet<QString> &rpaths, bool useDebugLibs);
-QString findAppBinary(const QString &appBundlePath);
-QList<FrameworkInfo> getQtFrameworks(const QString &path, const QString &appBundlePath, const QSet<QString> &rpaths, bool useDebugLibs);
-QList<FrameworkInfo> getQtFrameworks(const QStringList &otoolLines, const QString &appBundlePath, const QSet<QString> &rpaths, bool useDebugLibs);
-QString copyFramework(const FrameworkInfo &framework, const QString path);
-DeploymentInfo deployQtFrameworks(const QString &appBundlePath, const QStringList &additionalExecutables, bool useDebugLibs);
-DeploymentInfo deployQtFrameworks(QList<FrameworkInfo> frameworks,const QString &bundlePath, const QStringList &binaryPaths, bool useDebugLibs, bool useLoaderPath);
-void createQtConf(const QString &appBundlePath);
-void deployPlugins(const QString &appBundlePath, DeploymentInfo deploymentInfo, bool useDebugLibs);
-bool deployQmlImports(const QString &appBundlePath, DeploymentInfo deploymentInfo, QStringList &qmlDirs, QStringList &qmlImportPaths);
-void changeIdentification(const QString &id, const QString &binaryPath);
-void changeInstallName(const QString &oldName, const QString &newName, const QString &binaryPath);
-void runStrip(const QString &binaryPath);
-void stripAppBinary(const QString &bundlePath);
-QString findAppBinary(const QString &appBundlePath);
-QStringList findAppFrameworkNames(const QString &appBundlePath);
-QStringList findAppFrameworkPaths(const QString &appBundlePath);
-void codesignFile(const QString &identity, const QString &filePath);
-QSet<QString> codesignBundle(const QString &identity,
- const QString &appBundlePath,
- QList<QString> additionalBinariesContainingRpaths);
-void codesign(const QString &identity, const QString &appBundlePath);
-void createDiskImage(const QString &appBundlePath, const QString &filesystemType);
-void fixupFramework(const QString &appBundlePath);
-
-
-#endif
diff --git a/src/pixeltool/CMakeLists.txt b/src/pixeltool/CMakeLists.txt
index eaf3f7a02..b430d3efb 100644
--- a/src/pixeltool/CMakeLists.txt
+++ b/src/pixeltool/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from pixeltool.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## pixeltool App:
@@ -8,17 +9,13 @@ qt_internal_add_app(pixeltool
SOURCES
main.cpp
qpixeltool.cpp qpixeltool.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
)
-#### Keys ignored in scope 1:.:.:pixeltool.pro:<TRUE>:
-# QT_FOR_CONFIG = "tools-private"
-# _REQUIREMENTS = "qtConfig(pixeltool)"
-
## Scopes:
#####################################################################
diff --git a/src/pixeltool/main.cpp b/src/pixeltool/main.cpp
index c4250d367..c8010d4e4 100644
--- a/src/pixeltool/main.cpp
+++ b/src/pixeltool/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qpixeltool.h"
@@ -35,18 +10,20 @@
QT_USE_NAMESPACE
+using namespace Qt::StringLiterals;
+
int main(int argc, char **argv)
{
QApplication app(argc, argv);
- QCoreApplication::setApplicationName(QLatin1String("PixelTool"));
- QCoreApplication::setApplicationVersion(QLatin1String(QT_VERSION_STR));
- QCoreApplication::setOrganizationName(QLatin1String("QtProject"));
+ QCoreApplication::setApplicationName("PixelTool"_L1);
+ QCoreApplication::setApplicationVersion(QLatin1StringView(qVersion()));
+ QCoreApplication::setOrganizationName("QtProject"_L1);
QCommandLineParser parser;
parser.addHelpOption();
parser.addVersionOption();
- parser.addPositionalArgument(QLatin1String("preview"),
- QLatin1String("The preview image to show."));
+ parser.addPositionalArgument("preview"_L1,
+ "The preview image to show."_L1);
parser.process(app);
@@ -54,7 +31,7 @@ int main(int argc, char **argv)
if (!parser.positionalArguments().isEmpty()) {
const QString previewImageFileName = parser.positionalArguments().constFirst();
- if (QFileInfo(previewImageFileName).exists()) {
+ if (QFileInfo::exists(previewImageFileName)) {
QImage previewImage(previewImageFileName);
if (!previewImage.size().isEmpty())
pixelTool.setPreviewImage(previewImage);
@@ -66,5 +43,5 @@ int main(int argc, char **argv)
QObject::connect(&app, &QApplication::lastWindowClosed,
&app, &QCoreApplication::quit);
- return app.exec();
+ return QCoreApplication::exec();
}
diff --git a/src/pixeltool/pixeltool.pro b/src/pixeltool/pixeltool.pro
deleted file mode 100644
index 86a632a2e..000000000
--- a/src/pixeltool/pixeltool.pro
+++ /dev/null
@@ -1,14 +0,0 @@
-include($$OUT_PWD/../../src/global/qttools-config.pri)
-QT_FOR_CONFIG += tools-private
-requires(qtConfig(pixeltool))
-
-QT += core-private gui-private widgets
-
-mac {
- QMAKE_INFO_PLIST=Info_mac.plist
-}
-
-SOURCES += main.cpp qpixeltool.cpp
-HEADERS += qpixeltool.h
-
-load(qt_app)
diff --git a/src/pixeltool/qpixeltool.cpp b/src/pixeltool/qpixeltool.cpp
index 745fd5933..9142d387e 100644
--- a/src/pixeltool/qpixeltool.cpp
+++ b/src/pixeltool/qpixeltool.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qpixeltool.h"
#include <qapplication.h>
#include <qdir.h>
-#include <qapplication.h>
#include <qscreen.h>
#if QT_CONFIG(clipboard)
#include <qclipboard.h>
@@ -43,7 +17,6 @@
#include <qmenu.h>
#include <qactiongroup.h>
#include <qimagewriter.h>
-#include <qscreen.h>
#include <qstandardpaths.h>
#include <qtextstream.h>
#include <qwindow.h>
@@ -51,14 +24,28 @@
#include <qdebug.h>
+#include <cmath>
+
QT_BEGIN_NAMESPACE
-static QPoint initialPos(const QSettings &settings, const QSize &initialSize)
+using namespace Qt::StringLiterals;
+
+static constexpr auto settingsGroup = "QPixelTool"_L1;
+static constexpr auto organization = "QtProject"_L1;
+static constexpr auto autoUpdateKey = "autoUpdate"_L1;
+static constexpr auto gridSizeKey = "gridSize"_L1;
+static constexpr auto gridActiveKey = "gridActive"_L1;
+static constexpr auto zoomKey = "zoom"_L1;
+static constexpr auto initialSizeKey = "initialSize"_L1;
+static constexpr auto positionKey = "position"_L1;
+static constexpr auto lcdModeKey = "lcdMode"_L1;
+
+static QPoint initialPos(const QSettings &settings, QSize initialSize)
{
const QPoint defaultPos = QGuiApplication::primaryScreen()->availableGeometry().topLeft();
const QPoint savedPos =
- settings.value(QLatin1String("position"), QVariant(defaultPos)).toPoint();
- auto savedScreen = QGuiApplication::screenAt(savedPos);
+ settings.value(positionKey, QVariant(defaultPos)).toPoint();
+ auto *savedScreen = QGuiApplication::screenAt(savedPos);
return savedScreen != nullptr
&& savedScreen->availableGeometry().intersects(QRect(savedPos, initialSize))
? savedPos : defaultPos;
@@ -68,13 +55,13 @@ QPixelTool::QPixelTool(QWidget *parent)
: QWidget(parent)
{
setWindowTitle(QCoreApplication::applicationName());
- QSettings settings(QLatin1String("QtProject"), QLatin1String("QPixelTool"));
- m_autoUpdate = settings.value(QLatin1String("autoUpdate"), 0).toBool();
- m_gridSize = settings.value(QLatin1String("gridSize"), 1).toInt();
- m_gridActive = settings.value(QLatin1String("gridActive"), 1).toInt();
- m_zoom = settings.value(QLatin1String("zoom"), 4).toInt();
- m_initialSize = settings.value(QLatin1String("initialSize"), QSize(250, 200)).toSize();
- m_lcdMode = settings.value(QLatin1String("lcdMode"), 0).toInt();
+ QSettings settings(organization, settingsGroup);
+ m_autoUpdate = settings.value(autoUpdateKey, 0).toBool();
+ m_gridSize = settings.value(gridSizeKey, 1).toInt();
+ m_gridActive = settings.value(gridActiveKey, 1).toInt();
+ m_zoom = settings.value(zoomKey, 4).toInt();
+ m_initialSize = settings.value(initialSizeKey, QSize(250, 200)).toSize();
+ m_lcdMode = settings.value(lcdModeKey, 0).toInt();
move(initialPos(settings, m_initialSize));
@@ -85,14 +72,14 @@ QPixelTool::QPixelTool(QWidget *parent)
QPixelTool::~QPixelTool()
{
- QSettings settings(QLatin1String("QtProject"), QLatin1String("QPixelTool"));
- settings.setValue(QLatin1String("autoUpdate"), int(m_autoUpdate));
- settings.setValue(QLatin1String("gridSize"), m_gridSize);
- settings.setValue(QLatin1String("gridActive"), m_gridActive);
- settings.setValue(QLatin1String("zoom"), m_zoom);
- settings.setValue(QLatin1String("initialSize"), size());
- settings.setValue(QLatin1String("position"), pos());
- settings.setValue(QLatin1String("lcdMode"), m_lcdMode);
+ QSettings settings(organization, settingsGroup);
+ settings.setValue(autoUpdateKey, int(m_autoUpdate));
+ settings.setValue(gridSizeKey, m_gridSize);
+ settings.setValue(gridActiveKey, m_gridActive);
+ settings.setValue(zoomKey, m_zoom);
+ settings.setValue(initialSizeKey, size());
+ settings.setValue(positionKey, pos());
+ settings.setValue(lcdModeKey, m_lcdMode);
}
void QPixelTool::setPreviewImage(const QImage &image)
@@ -108,9 +95,11 @@ void QPixelTool::timerEvent(QTimerEvent *event)
grabScreen();
} else if (event->timerId() == m_displayZoomId) {
killTimer(m_displayZoomId);
+ m_displayZoomId = 0;
setZoomVisible(false);
} else if (event->timerId() == m_displayGridSizeId) {
killTimer(m_displayGridSizeId);
+ m_displayGridSizeId = 0;
m_displayGridSize = false;
}
}
@@ -229,19 +218,18 @@ void QPixelTool::paintEvent(QPaintEvent *)
}
}
- QFont f(QLatin1String("courier"));
- f.setBold(true);
+ QFont f(QStringList{u"courier"_s}, -1, QFont::Bold);
p.setFont(f);
if (m_displayZoom) {
render_string(&p, w, h,
- QLatin1String("Zoom: x") + QString::number(m_zoom),
+ "Zoom: x"_L1 + QString::number(m_zoom),
Qt::AlignTop | Qt::AlignRight);
}
if (m_displayGridSize) {
render_string(&p, w, h,
- QLatin1String("Grid size: ") + QString::number(m_gridSize),
+ "Grid size: "_L1 + QString::number(m_gridSize),
Qt::AlignBottom | Qt::AlignLeft);
}
@@ -313,7 +301,7 @@ void QPixelTool::keyPressEvent(QKeyEvent *e)
break;
#endif // QT_CONFIG(clipboard)
case Qt::Key_S:
- if (e->modifiers() & Qt::ControlModifier) {
+ if (e->modifiers().testFlag(Qt::ControlModifier)) {
releaseKeyboard();
saveToFile();
}
@@ -397,66 +385,66 @@ void QPixelTool::contextMenuEvent(QContextMenuEvent *e)
m_freeze = true;
QMenu menu;
- menu.addAction(QLatin1String("Qt Pixel Zooming Tool"))->setEnabled(false);
+ menu.addAction("Qt Pixel Zooming Tool"_L1)->setEnabled(false);
menu.addSeparator();
// Grid color options...
- QActionGroup *gridGroup = new QActionGroup(&menu);
- addCheckableAction(menu, QLatin1String("White grid"), m_gridActive == 2,
+ auto *gridGroup = new QActionGroup(&menu);
+ addCheckableAction(menu, "White grid"_L1, m_gridActive == 2,
Qt::Key_W, gridGroup);
- QAction *blackGrid = addCheckableAction(menu, QLatin1String("Black grid"),
+ QAction *blackGrid = addCheckableAction(menu, "Black grid"_L1,
m_gridActive == 1, Qt::Key_B, gridGroup);
- QAction *noGrid = addCheckableAction(menu, QLatin1String("No grid"), m_gridActive == 0,
+ QAction *noGrid = addCheckableAction(menu, "No grid"_L1, m_gridActive == 0,
Qt::Key_N, gridGroup);
menu.addSeparator();
// Grid size options
- menu.addAction(QLatin1String("Increase grid size"),
- this, &QPixelTool::increaseGridSize, Qt::Key_PageUp);
- menu.addAction(QLatin1String("Decrease grid size"),
- this, &QPixelTool::decreaseGridSize, Qt::Key_PageDown);
+ menu.addAction("Increase grid size"_L1, Qt::Key_PageUp,
+ this, &QPixelTool::increaseGridSize);
+ menu.addAction("Decrease grid size"_L1, Qt::Key_PageDown,
+ this, &QPixelTool::decreaseGridSize);
menu.addSeparator();
- QActionGroup *lcdGroup = new QActionGroup(&menu);
- addCheckableAction(menu, QLatin1String("No subpixels"), m_lcdMode == 0,
+ auto *lcdGroup = new QActionGroup(&menu);
+ addCheckableAction(menu, "No subpixels"_L1, m_lcdMode == 0,
QKeySequence(), lcdGroup);
- QAction *rgbPixels = addCheckableAction(menu, QLatin1String("RGB subpixels"),
+ QAction *rgbPixels = addCheckableAction(menu, "RGB subpixels"_L1,
m_lcdMode == 1, QKeySequence(), lcdGroup);
- QAction *bgrPixels = addCheckableAction(menu, QLatin1String("BGR subpixels"),
+ QAction *bgrPixels = addCheckableAction(menu, "BGR subpixels"_L1,
m_lcdMode == 2, QKeySequence(), lcdGroup);
- QAction *vrgbPixels = addCheckableAction(menu, QLatin1String("VRGB subpixels"),
+ QAction *vrgbPixels = addCheckableAction(menu, "VRGB subpixels"_L1,
m_lcdMode == 3, QKeySequence(), lcdGroup);
- QAction *vbgrPixels = addCheckableAction(menu, QLatin1String("VBGR subpixels"),
+ QAction *vbgrPixels = addCheckableAction(menu, "VBGR subpixels"_L1,
m_lcdMode == 4, QKeySequence(), lcdGroup);
menu.addSeparator();
// Zoom options
- menu.addAction(QLatin1String("Zoom in"),
- this, &QPixelTool::increaseZoom, Qt::Key_Plus);
- menu.addAction(QLatin1String("Zoom out"),
- this, &QPixelTool::decreaseZoom, Qt::Key_Minus);
+ menu.addAction("Zoom in"_L1, Qt::Key_Plus,
+ this, &QPixelTool::increaseZoom);
+ menu.addAction("Zoom out"_L1, Qt::Key_Minus,
+ this, &QPixelTool::decreaseZoom);
menu.addSeparator();
// Freeze / Autoupdate
- QAction *freeze = addCheckableAction(menu, QLatin1String("Frozen"),
+ QAction *freeze = addCheckableAction(menu, "Frozen"_L1,
tmpFreeze, Qt::Key_Space);
- QAction *autoUpdate = addCheckableAction(menu, QLatin1String("Continuous update"),
+ QAction *autoUpdate = addCheckableAction(menu, "Continuous update"_L1,
m_autoUpdate, Qt::Key_A);
menu.addSeparator();
// Copy to clipboard / save
- menu.addAction(QLatin1String("Save as image..."),
- this, &QPixelTool::saveToFile, QKeySequence::SaveAs);
+ menu.addAction("Save as image..."_L1, QKeySequence::SaveAs,
+ this, &QPixelTool::saveToFile);
#if QT_CONFIG(clipboard)
- menu.addAction(QLatin1String("Copy to clipboard"),
- this, &QPixelTool::copyToClipboard, QKeySequence::Copy);
- menu.addAction(QLatin1String("Copy color value to clipboard"),
- this, &QPixelTool::copyColorToClipboard, Qt::Key_C);
+ menu.addAction("Copy to clipboard"_L1, QKeySequence::Copy,
+ this, &QPixelTool::copyToClipboard);
+ menu.addAction("Copy color value to clipboard"_L1, Qt::Key_C,
+ this, &QPixelTool::copyColorToClipboard);
#endif // QT_CONFIG(clipboard)
menu.addSeparator();
- menu.addAction(QLatin1String("About Qt"), qApp, &QApplication::aboutQt);
- menu.addAction(QLatin1String("About Qt Pixeltool"), this, &QPixelTool::aboutPixelTool);
+ menu.addAction("About Qt"_L1, qApp, &QApplication::aboutQt);
+ menu.addAction("About Qt Pixeltool"_L1, this, &QPixelTool::aboutPixelTool);
menu.exec(mapToGlobal(e->pos()));
@@ -484,7 +472,7 @@ void QPixelTool::contextMenuEvent(QContextMenuEvent *e)
m_freeze = freeze->isChecked();
// LCD mode looks off unless zoom is dividable by 3
- if (m_lcdMode && m_zoom % 3)
+ if (m_lcdMode && (m_zoom % 3) != 0)
setZoom(qMax(3, (m_zoom + 1) / 3));
}
@@ -493,15 +481,13 @@ QSize QPixelTool::sizeHint() const
return m_initialSize;
}
-static inline QString pixelToolTitle(QPoint pos, const QColor &currentColor)
+static inline QString pixelToolTitle(QPoint pos, const QScreen *screen, const QColor &currentColor)
{
- if (QHighDpiScaling::isActive()) {
- if (auto screen = QGuiApplication::screenAt(pos))
- pos = QHighDpi::toNativePixels(pos, screen);
- }
- return QCoreApplication::applicationName() + QLatin1String(" [")
+ if (screen != nullptr)
+ pos = QHighDpi::toNativePixels(pos, screen);
+ return QCoreApplication::applicationName() + " ["_L1
+ QString::number(pos.x())
- + QLatin1String(", ") + QString::number(pos.y()) + QLatin1String("] ")
+ + ", "_L1 + QString::number(pos.y()) + "] "_L1
+ currentColor.name();
}
@@ -519,37 +505,38 @@ void QPixelTool::grabScreen()
if (mousePos == m_lastMousePos && !m_autoUpdate)
return;
- if (m_lastMousePos != mousePos)
- setWindowTitle(pixelToolTitle(mousePos, m_currentColor));
-
- int w = int(width() / float(m_zoom));
- int h = int(height() / float(m_zoom));
+ QScreen *screen = QGuiApplication::screenAt(mousePos);
- if (width() % m_zoom > 0)
- ++w;
- if (height() % m_zoom > 0)
- ++h;
+ if (m_lastMousePos != mousePos)
+ setWindowTitle(pixelToolTitle(mousePos, screen, m_currentColor));
- int x = mousePos.x() - w/2;
- int y = mousePos.y() - h/2;
+ const auto widgetDpr = devicePixelRatioF();
+ const auto screenDpr = screen != nullptr ? screen->devicePixelRatio() : widgetDpr;
+ // When grabbing from another screen, we grab an area fitting our size using our DPR.
+ const auto factor = widgetDpr / screenDpr / qreal(m_zoom);
+ const QSize size{int(std::ceil(width() * factor)), int(std::ceil(height() * factor))};
+ const QPoint pos = mousePos - QPoint{size.width(), size.height()} / 2;
const QBrush darkBrush = palette().color(QPalette::Dark);
- if (QScreen *screen = this->screen()) {
- m_buffer = screen->grabWindow(0, x, y, w, h);
+ if (screen != nullptr) {
+ const QPoint screenPos = pos - screen->geometry().topLeft();
+ m_buffer = screen->grabWindow(0, screenPos.x(), screenPos.y(), size.width(), size.height());
} else {
- m_buffer = QPixmap(w, h);
+ m_buffer = QPixmap(size);
m_buffer.fill(darkBrush.color());
}
- QRegion geom(x, y, w, h);
+ m_buffer.setDevicePixelRatio(widgetDpr);
+
+ QRegion geom(QRect{pos, size});
QRect screenRect;
const auto screens = QGuiApplication::screens();
- for (auto screen : screens)
+ for (auto *screen : screens)
screenRect |= screen->geometry();
geom -= screenRect;
const auto rectsInRegion = geom.rectCount();
- if (rectsInRegion > 0) {
+ if (!geom.isEmpty()) {
QPainter p(&m_buffer);
- p.translate(-x, -y);
+ p.translate(-pos);
p.setPen(Qt::NoPen);
p.setBrush(darkBrush);
p.drawRects(geom.begin(), rectsInRegion);
@@ -563,9 +550,8 @@ void QPixelTool::grabScreen()
void QPixelTool::startZoomVisibleTimer()
{
- if (m_displayZoomId > 0) {
+ if (m_displayZoomId > 0)
killTimer(m_displayZoomId);
- }
m_displayZoomId = startTimer(5000);
setZoomVisible(true);
}
@@ -657,7 +643,7 @@ void QPixelTool::saveToFile()
m_freeze = true;
QFileDialog fileDialog(this);
- fileDialog.setWindowTitle(QLatin1String("Save as image"));
+ fileDialog.setWindowTitle("Save as image"_L1);
fileDialog.setAcceptMode(QFileDialog::AcceptSave);
fileDialog.setDirectory(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation));
QStringList mimeTypes;
@@ -665,17 +651,17 @@ void QPixelTool::saveToFile()
for (const QByteArray &mimeTypeB : supportedMimeTypes)
mimeTypes.append(QString::fromLatin1(mimeTypeB));
fileDialog.setMimeTypeFilters(mimeTypes);
- const QString pngType = QLatin1String("image/png");
+ const QString pngType = "image/png"_L1;
if (mimeTypes.contains(pngType)) {
fileDialog.selectMimeTypeFilter(pngType);
- fileDialog.setDefaultSuffix(QLatin1String("png"));
+ fileDialog.setDefaultSuffix("png"_L1);
}
while (fileDialog.exec() == QDialog::Accepted
&& !m_buffer.save(fileDialog.selectedFiles().constFirst())) {
- QMessageBox::warning(this, QLatin1String("Unable to write image"),
- QLatin1String("Unable to write ")
- + QDir::toNativeSeparators(fileDialog.selectedFiles().first()));
+ QMessageBox::warning(this, "Unable to write image"_L1,
+ "Unable to write "_L1
+ + QDir::toNativeSeparators(fileDialog.selectedFiles().constFirst()));
}
m_freeze = oldFreeze;
}
@@ -700,11 +686,11 @@ QString QPixelTool::aboutText() const
QString result;
QTextStream str(&result);
- str << "<html></head><body><h2>Qt Pixeltool</h2><p>Qt " << QT_VERSION_STR
+ str << "<html><head></head><body><h2>Qt Pixeltool</h2><p>Qt " << QT_VERSION_STR
<< "</p><p>Copyright (C) 2017 The Qt Company Ltd.</p><h3>Screens</h3><ul>";
for (const QScreen *screen : screens)
str << "<li>" << (screen == windowScreen ? "* " : " ") << screen << "</li>";
- str << "<ul></body></html>";
+ str << "</ul></body></html>";
return result;
}
diff --git a/src/pixeltool/qpixeltool.h b/src/pixeltool/qpixeltool.h
index 3fa9f1e7e..ee042cea9 100644
--- a/src/pixeltool/qpixeltool.h
+++ b/src/pixeltool/qpixeltool.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QPIXELTOOL_H
#define QPIXELTOOL_H
@@ -91,8 +66,8 @@ private:
int m_gridSize;
int m_lcdMode;
- int m_updateId;
- int m_displayZoomId;
+ int m_updateId = 0;
+ int m_displayZoomId = 0;
int m_displayGridSizeId = 0;
QRgb m_currentColor = 0;
diff --git a/src/qdbus/CMakeLists.txt b/src/qdbus/CMakeLists.txt
index 9bbbc51db..5504a4ca9 100644
--- a/src/qdbus/CMakeLists.txt
+++ b/src/qdbus/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qdbus.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
if(NOT QT_FEATURE_qdbus)
return()
diff --git a/src/qdbus/qdbus.pro b/src/qdbus/qdbus.pro
deleted file mode 100644
index 225c7efff..000000000
--- a/src/qdbus/qdbus.pro
+++ /dev/null
@@ -1,13 +0,0 @@
-include($$OUT_PWD/../../src/global/qttools-config.pri)
-QT_FOR_CONFIG += tools-private
-requires(qtConfig(qdbus))
-
-TEMPLATE = subdirs
-QT_FOR_CONFIG += xml
-qtConfig(dom): SUBDIRS = qdbus
-qtHaveModule(widgets) {
- QT_FOR_CONFIG += widgets
- qtConfig(dialogbuttonbox):qtConfig(inputdialog):qtConfig(messagebox):qtConfig(menu) {
- SUBDIRS += qdbusviewer
- }
-}
diff --git a/src/qdbus/qdbus/CMakeLists.txt b/src/qdbus/qdbus/CMakeLists.txt
index 4fcbf5f39..2a4b56463 100644
--- a/src/qdbus/qdbus/CMakeLists.txt
+++ b/src/qdbus/qdbus/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qdbus.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qdbus App:
@@ -7,7 +8,7 @@
qt_internal_add_app(qdbus
SOURCES
qdbus.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBusPrivate
Qt::Xml
)
diff --git a/src/qdbus/qdbus/qdbus.cpp b/src/qdbus/qdbus/qdbus.cpp
index a4993de8d..f18fdca3a 100644
--- a/src/qdbus/qdbus/qdbus.cpp
+++ b/src/qdbus/qdbus/qdbus.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <stdio.h>
#include <stdlib.h>
@@ -77,24 +52,24 @@ static void printArg(const QVariant &v)
return;
}
- if (v.userType() == QVariant::StringList) {
+ if (v.metaType() == QMetaType::fromType<QStringList>()) {
const QStringList sl = v.toStringList();
for (const QString &s : sl)
printf("%s\n", qPrintable(s));
- } else if (v.userType() == QVariant::List) {
+ } else if (v.metaType() == QMetaType::fromType<QVariantList>()) {
const QVariantList vl = v.toList();
for (const QVariant &var : vl)
printArg(var);
- } else if (v.userType() == QVariant::Map) {
+ } else if (v.metaType() == QMetaType::fromType<QVariantMap>()) {
const QVariantMap map = v.toMap();
QVariantMap::ConstIterator it = map.constBegin();
for ( ; it != map.constEnd(); ++it) {
printf("%s: ", qPrintable(it.key()));
printArg(it.value());
}
- } else if (v.userType() == qMetaTypeId<QDBusVariant>()) {
+ } else if (v.metaType() == QMetaType::fromType<QDBusVariant>()) {
printArg(qvariant_cast<QDBusVariant>(v).variant());
- } else if (v.userType() == qMetaTypeId<QDBusArgument>()) {
+ } else if (v.metaType() == QMetaType::fromType<QDBusArgument>()) {
QDBusArgument arg = qvariant_cast<QDBusArgument>(v);
if (arg.currentSignature() == QLatin1String("av"))
printArg(qdbus_cast<QVariantList>(arg));
@@ -103,7 +78,7 @@ static void printArg(const QVariant &v)
else
printf("qdbus: I don't know how to display an argument of type '%s', run with --literal.\n",
qPrintable(arg.currentSignature()));
- } else if (v.userType() != QVariant::Invalid) {
+ } else if (v.metaType().isValid()) {
printf("%s\n", qPrintable(v.toString()));
}
}
@@ -134,7 +109,7 @@ static void listObjects(const QString &service, const QString &path)
}
QDomDocument doc;
- doc.setContent(xml);
+ doc.setContent(xml.value());
QDomElement node = doc.documentElement();
QDomElement child = node.firstChildElement();
while (!child.isNull()) {
@@ -189,7 +164,7 @@ static void listInterface(const QString &service, const QString &path, const QSt
QList<QByteArray> types = mm.parameterTypes();
QList<QByteArray> names = mm.parameterNames();
bool first = true;
- for (int i = 0; i < types.count(); ++i) {
+ for (int i = 0; i < types.size(); ++i) {
printf("%s%s",
first ? "" : ", ",
types.at(i).constData());
@@ -219,7 +194,7 @@ static void listAllInterfaces(const QString &service, const QString &path)
}
QDomDocument doc;
- doc.setContent(xml);
+ doc.setContent(xml.value());
QDomElement node = doc.documentElement();
QDomElement child = node.firstChildElement();
while (!child.isNull()) {
@@ -299,41 +274,40 @@ static int placeCall(const QString &service, const QString &path, const QString
QMetaMethod mm = mo->method(knownIds.takeFirst());
QList<QByteArray> types = mm.parameterTypes();
- for (int i = 0; i < types.count(); ++i) {
+ for (int i = 0; i < types.size(); ++i) {
if (types.at(i).endsWith('&')) {
// reference (and not a reference to const): output argument
// we're done with the inputs
- while (types.count() > i)
+ while (types.size() > i)
types.removeLast();
break;
}
}
- for (int i = 0; !args.isEmpty() && i < types.count(); ++i) {
- int id = QVariant::nameToType(types.at(i));
- if (id == QVariant::UserType)
- id = QMetaType::type(types.at(i));
- if (!id) {
+ for (int i = 0; !args.isEmpty() && i < types.size(); ++i) {
+ const QMetaType metaType = QMetaType::fromName(types.at(i));
+ if (!metaType.isValid()) {
fprintf(stderr, "Cannot call method '%s' because type '%s' is unknown to this tool\n",
qPrintable(member), types.at(i).constData());
return 1;
}
+ const int id = metaType.id();
QVariant p;
QString argument;
- if ((id == QVariant::List || id == QVariant::StringList)
+ if ((id == QMetaType::QVariantList || id == QMetaType::QStringList)
&& args.at(0) == QLatin1String("("))
p = readList(args);
else
p = argument = args.takeFirst();
- if (id == int(QMetaType::UChar)) {
+ if (id == QMetaType::UChar) {
// special case: QVariant::convert doesn't convert to/from
// UChar because it can't decide if it's a character or a number
p = QVariant::fromValue<uchar>(p.toUInt());
- } else if (id < int(QMetaType::User) && id != int(QVariant::Map)) {
- p.convert(QMetaType(id));
- if (p.type() == QVariant::Invalid) {
+ } else if (id < QMetaType::User && id != QMetaType::QVariantMap) {
+ p.convert(metaType);
+ if (!p.isValid()) {
fprintf(stderr, "Could not convert '%s' to type '%s'.\n",
qPrintable(argument), types.at(i).constData());
return 1 ;
@@ -364,7 +338,7 @@ static int placeCall(const QString &service, const QString &path, const QString
}
params += p;
}
- if (params.count() == types.count() && args.isEmpty())
+ if (params.size() == types.size() && args.isEmpty())
matchFound = true;
else if (knownIds.isEmpty()) {
fprintf(stderr, "Invalid number of parameters\n");
@@ -412,7 +386,7 @@ static bool globServices(QDBusConnectionInterface *bus, const QString &glob)
QStringList names = bus->registeredServiceNames();
names.sort();
- for (const QString &name : qAsConst(names))
+ for (const QString &name : std::as_const(names))
if (pattern.match(name).hasMatch())
printf("%s\n", qPrintable(name));
diff --git a/src/qdbus/qdbus/qdbus.pro b/src/qdbus/qdbus/qdbus.pro
deleted file mode 100644
index 10a709e98..000000000
--- a/src/qdbus/qdbus/qdbus.pro
+++ /dev/null
@@ -1,5 +0,0 @@
-SOURCES = qdbus.cpp
-QT = core dbus-private xml
-win32:CONFIG += console
-
-load(qt_app)
diff --git a/src/qdbus/qdbusviewer/.prev_CMakeLists.txt b/src/qdbus/qdbusviewer/.prev_CMakeLists.txt
deleted file mode 100644
index 9ffa4a2f7..000000000
--- a/src/qdbus/qdbusviewer/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-# Generated from qdbusviewer.pro.
-
-#####################################################################
-## qdbusviewer App:
-#####################################################################
-
-qt_internal_add_app(qdbusviewer
- SOURCES
- logviewer.cpp logviewer.h
- main.cpp
- mainwindow.cpp mainwindow.h
- propertydialog.cpp propertydialog.h
- qdbusmodel.cpp qdbusmodel.h
- qdbusviewer.cpp qdbusviewer.h
- servicesproxymodel.cpp servicesproxymodel.h
- PUBLIC_LIBRARIES
- Qt::DBusPrivate
- Qt::Gui
- Qt::Widgets
- Qt::Xml
-)
-
-# Resources:
-set(qdbusviewer_resource_files
- "images/qdbusviewer-128.png"
- "images/qdbusviewer.png"
-)
-
-qt_add_resource(qdbusviewer "qdbusviewer"
- PREFIX
- "/qt-project.org/qdbusviewer"
- FILES
- ${qdbusviewer_resource_files}
-)
-
-
-## Scopes:
-#####################################################################
-
-if(APPLE)
- set_target_properties(qdbusviewer PROPERTIES
- MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info_mac.plist"
- MACOSX_BUNDLE TRUE
- MACOSX_BUNDLE_ICON_FILE "qdbusviewer.icns"
- )
- set_source_files_properties(images/qdbusviewer.icns PROPERTIES
- MACOSX_PACKAGE_LOCATION Resources
- )
- target_sources(qdbusviewer PRIVATE
- images/qdbusviewer.icns
- )
-endif()
-
-if(WIN32)
- set_target_properties(qdbusviewer PROPERTIES
- QT_TARGET_WINDOWS_RC_FILE "${CMAKE_CURRENT_SOURCE_DIR}/qdbusviewer.rc"
- )
-endif()
diff --git a/src/qdbus/qdbusviewer/CMakeLists.txt b/src/qdbus/qdbusviewer/CMakeLists.txt
index 2006d3921..9bd959bd1 100644
--- a/src/qdbus/qdbusviewer/CMakeLists.txt
+++ b/src/qdbus/qdbusviewer/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qdbusviewer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qdbusviewer App:
@@ -13,7 +14,7 @@ qt_internal_add_app(qdbusviewer
qdbusmodel.cpp qdbusmodel.h
qdbusviewer.cpp qdbusviewer.h
servicesproxymodel.cpp servicesproxymodel.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBusPrivate
Qt::Gui
Qt::Widgets
@@ -26,7 +27,7 @@ set(qdbusviewer_resource_files
"images/qdbusviewer.png"
)
-qt_add_resource(qdbusviewer "qdbusviewer"
+qt_internal_add_resource(qdbusviewer "qdbusviewer"
PREFIX
"/qt-project.org/qdbusviewer"
FILES
@@ -49,15 +50,13 @@ if(APPLE)
target_sources(qdbusviewer PRIVATE
images/qdbusviewer.icns
)
- # special case end
# Set values to be replaced in the custom Info_mac.plist.
set(ICON "qdbusviewer.icns")
set(EXECUTABLE "qdbusviewer")
- # special case end
endif()
if(WIN32)
set_target_properties(qdbusviewer PROPERTIES
- QT_TARGET_WINDOWS_RC_FILE "${CMAKE_CURRENT_SOURCE_DIR}/qdbusviewer.rc"
+ QT_TARGET_RC_ICONS "${CMAKE_CURRENT_SOURCE_DIR}/images/qdbusviewer.ico"
)
endif()
diff --git a/src/qdbus/qdbusviewer/logviewer.cpp b/src/qdbus/qdbusviewer/logviewer.cpp
index 7dd1ba6d6..f1fc43d15 100644
--- a/src/qdbus/qdbusviewer/logviewer.cpp
+++ b/src/qdbus/qdbusviewer/logviewer.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Tasuku Suzuki <stasuku@gmail.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 Tasuku Suzuki <stasuku@gmail.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "logviewer.h"
diff --git a/src/qdbus/qdbusviewer/logviewer.h b/src/qdbus/qdbusviewer/logviewer.h
index 4f56387bb..b9f18b0a5 100644
--- a/src/qdbus/qdbusviewer/logviewer.h
+++ b/src/qdbus/qdbusviewer/logviewer.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Tasuku Suzuki <stasuku@gmail.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 Tasuku Suzuki <stasuku@gmail.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef LOGVIEWER_H
#define LOGVIEWER_H
diff --git a/src/qdbus/qdbusviewer/main.cpp b/src/qdbus/qdbusviewer/main.cpp
index 9040c8375..4fd24b2d9 100644
--- a/src/qdbus/qdbusviewer/main.cpp
+++ b/src/qdbus/qdbusviewer/main.cpp
@@ -1,56 +1,31 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QtWidgets/qapplication.h>
#include "mainwindow.h"
-#include <stdio.h>
+using namespace Qt::StringLiterals;
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
- QCoreApplication::setOrganizationName(QStringLiteral("QtProject"));
- QCoreApplication::setApplicationName(QStringLiteral("QDBusViewer"));
+ QCoreApplication::setOrganizationName(u"QtProject"_s);
+ QCoreApplication::setApplicationName(u"QDBusViewer"_s);
MainWindow mw;
-#if !defined(Q_OS_OSX) && !defined(Q_OS_WIN)
- app.setWindowIcon(QIcon(QLatin1String(":/qt-project.org/qdbusviewer/images/qdbusviewer.png")));
+#if !defined(Q_OS_MACOS) && !defined(Q_OS_WIN)
+ app.setWindowIcon(QIcon(":/qt-project.org/qdbusviewer/images/qdbusviewer.png"_L1));
#endif
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
mw.setWindowTitle(qApp->translate("QtDBusViewer", "Qt D-Bus Viewer"));
#endif
QStringList args = app.arguments();
- while (args.count()) {
+ while (args.size()) {
QString arg = args.takeFirst();
- if (arg == QLatin1String("--bus"))
+ if (arg == "--bus"_L1)
mw.addCustomBusTab(args.takeFirst());
}
diff --git a/src/qdbus/qdbusviewer/mainwindow.cpp b/src/qdbus/qdbusviewer/mainwindow.cpp
index 1f0a7d6b9..ef75dbeb7 100644
--- a/src/qdbus/qdbusviewer/mainwindow.cpp
+++ b/src/qdbus/qdbusviewer/mainwindow.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd and/or its subsidiary(-ies).
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd and/or its subsidiary(-ies).
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "mainwindow.h"
@@ -40,8 +15,11 @@
#include <QtDBus/QDBusConnection>
#include <QtCore/QSettings>
+using namespace Qt::StringLiterals;
+
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
+ , systemBusViewer(nullptr)
{
QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
QAction *quitAction = fileMenu->addAction(tr("&Quit"), this, &QWidget::close);
@@ -61,9 +39,13 @@ MainWindow::MainWindow(QWidget *parent)
setCentralWidget(tabWidget);
sessionBusViewer = new QDBusViewer(QDBusConnection::sessionBus());
- systemBusViewer = new QDBusViewer(QDBusConnection::systemBus());
tabWidget->addTab(sessionBusViewer, tr("Session Bus"));
- tabWidget->addTab(systemBusViewer, tr("System Bus"));
+
+ QDBusConnection connection = QDBusConnection::systemBus();
+ if (connection.isConnected()) {
+ systemBusViewer = new QDBusViewer(connection);
+ tabWidget->addTab(systemBusViewer, tr("System Bus"));
+ }
restoreSettings();
}
@@ -86,18 +68,29 @@ void MainWindow::about()
{
QMessageBox box(this);
- box.setText(QString::fromLatin1("<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), QStringLiteral("2020")));
+ 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()));
box.setWindowTitle(tr("D-Bus Viewer"));
box.exec();
}
-static inline QString windowGeometryKey() { return QStringLiteral("WindowGeometry"); }
-static inline QString sessionTabGroup() { return QStringLiteral("SessionTab"); }
-static inline QString systemTabGroup() { return QStringLiteral("SystemTab"); }
+static inline QString windowGeometryKey()
+{
+ return u"WindowGeometry"_s;
+}
+
+static inline QString sessionTabGroup()
+{
+ return u"SessionTab"_s;
+}
+
+static inline QString systemTabGroup()
+{
+ return u"SystemTab"_s;
+}
void MainWindow::saveSettings()
{
@@ -109,9 +102,11 @@ void MainWindow::saveSettings()
sessionBusViewer->saveState(&settings);
settings.endGroup();
- settings.beginGroup(systemTabGroup());
- systemBusViewer->saveState(&settings);
- settings.endGroup();
+ if (systemBusViewer) {
+ settings.beginGroup(systemTabGroup());
+ systemBusViewer->saveState(&settings);
+ settings.endGroup();
+ }
}
void MainWindow::restoreSettings()
@@ -124,7 +119,9 @@ void MainWindow::restoreSettings()
sessionBusViewer->restoreState(&settings);
settings.endGroup();
- settings.beginGroup(systemTabGroup());
- systemBusViewer->restoreState(&settings);
- settings.endGroup();
+ if (systemBusViewer) {
+ settings.beginGroup(systemTabGroup());
+ systemBusViewer->restoreState(&settings);
+ settings.endGroup();
+ }
}
diff --git a/src/qdbus/qdbusviewer/mainwindow.h b/src/qdbus/qdbusviewer/mainwindow.h
index d01027c5e..5159881f2 100644
--- a/src/qdbus/qdbusviewer/mainwindow.h
+++ b/src/qdbus/qdbusviewer/mainwindow.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd and/or its subsidiary(-ies).
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd and/or its subsidiary(-ies).
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
diff --git a/src/qdbus/qdbusviewer/propertydialog.cpp b/src/qdbus/qdbusviewer/propertydialog.cpp
index fb3949379..5fbfd94bc 100644
--- a/src/qdbus/qdbusviewer/propertydialog.cpp
+++ b/src/qdbus/qdbusviewer/propertydialog.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "propertydialog.h"
@@ -32,6 +7,8 @@
#include <QLayout>
#include <QDebug>
+using namespace Qt::StringLiterals;
+
PropertyDialog::PropertyDialog(QWidget *parent, Qt::WindowFlags f)
: QDialog(parent, f)
{
@@ -41,7 +18,7 @@ PropertyDialog::PropertyDialog(QWidget *parent, Qt::WindowFlags f)
buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
propertyTable->setColumnCount(2);
- const QStringList labels = QStringList() << QLatin1String("Name") << QLatin1String("Value");
+ const QStringList labels = QStringList() << tr("Name") << tr("Value");
propertyTable->setHorizontalHeaderLabels(labels);
propertyTable->horizontalHeader()->setStretchLastSection(true);
propertyTable->setEditTriggers(QAbstractItemView::AllEditTriggers);
@@ -67,10 +44,10 @@ void PropertyDialog::addProperty(const QString &aname, int type)
QString name = aname;
if (name.isEmpty())
- name = QLatin1String("argument ") + QString::number(rowCount + 1);
- name += QLatin1String(" (");
+ name = tr("argument %1").arg(rowCount + 1);
+ name += " ("_L1;
name += QLatin1String(QMetaType(type).name());
- name += QLatin1String(")");
+ name += ")"_L1;
QTableWidgetItem *nameItem = new QTableWidgetItem(name);
nameItem->setFlags(nameItem->flags() &
~(Qt::ItemIsEditable | Qt::ItemIsSelectable));
diff --git a/src/qdbus/qdbusviewer/propertydialog.h b/src/qdbus/qdbusviewer/propertydialog.h
index 086a3e130..84381b220 100644
--- a/src/qdbus/qdbusviewer/propertydialog.h
+++ b/src/qdbus/qdbusviewer/propertydialog.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PROPERTYDIALOG_H
#define PROPERTYDIALOG_H
diff --git a/src/qdbus/qdbusviewer/qdbusmodel.cpp b/src/qdbus/qdbusviewer/qdbusmodel.cpp
index 8f47b5bc5..97c0094e6 100644
--- a/src/qdbus/qdbusviewer/qdbusmodel.cpp
+++ b/src/qdbus/qdbusviewer/qdbusmodel.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdbusmodel.h"
@@ -37,6 +12,8 @@
#include <QtXml/QDomDocument>
+using namespace Qt::StringLiterals;
+
struct QDBusItem
{
inline QDBusItem(QDBusModel::Type aType, const QString &aName, QDBusItem *aParent = 0)
@@ -57,7 +34,7 @@ struct QDBusItem
s.prepend(item->name);
item = item->parent;
}
- if (s.length() > 1)
+ if (s.size() > 1)
s.chop(1); // remove tailing slash
return s;
}
@@ -75,29 +52,34 @@ QDomDocument QDBusModel::introspect(const QString &path)
{
QDomDocument doc;
- QDBusInterface iface(service, path, QLatin1String("org.freedesktop.DBus.Introspectable"), c);
+ QDBusInterface iface(service, path, "org.freedesktop.DBus.Introspectable"_L1, c);
if (!iface.isValid()) {
QDBusError err(iface.lastError());
- emit busError(QString::fromLatin1("Cannot introspect object %1 at %2:\n %3 (%4)\n").arg(path).arg(
- service).arg(err.name()).arg(err.message()));
+ emit busError(tr("Cannot introspect object %1 at %2:\n %3 (%4)\n")
+ .arg(path)
+ .arg(service)
+ .arg(err.name())
+ .arg(err.message()));
return doc;
}
- QDBusReply<QString> xml = iface.call(QLatin1String("Introspect"));
+ QDBusReply<QString> xml = iface.call("Introspect"_L1);
if (!xml.isValid()) {
QDBusError err(xml.error());
if (err.isValid()) {
- emit busError(QString::fromLatin1("Call to object %1 at %2:\n %3 (%4) failed\n").arg(
- path).arg(service).arg(err.name()).arg(err.message()));
+ emit busError(tr("Call to object %1 at %2:\n %3 (%4) failed\n")
+ .arg(path)
+ .arg(service)
+ .arg(err.name())
+ .arg(err.message()));
} else {
- emit busError(QString::fromLatin1("Invalid XML received from object %1 at %2\n").arg(
- path).arg(service));
+ emit busError(tr("Invalid XML received from object %1 at %2\n").arg(path).arg(service));
}
return doc;
}
- doc.setContent(xml);
+ doc.setContent(xml.value());
return doc;
}
@@ -107,26 +89,23 @@ void QDBusModel::addMethods(QDBusItem *parent, const QDomElement &iface)
QDomElement child = iface.firstChildElement();
while (!child.isNull()) {
- QDBusItem *item = 0;
- if (child.tagName() == QLatin1String("method")) {
- item = new QDBusItem(QDBusModel::MethodItem,
- child.attribute(QLatin1String("name")), parent);
- item->caption = QLatin1String("Method: ") + item->name;
+ QDBusItem *item = nullptr;
+ if (child.tagName() == "method"_L1) {
+ item = new QDBusItem(QDBusModel::MethodItem, child.attribute("name"_L1), parent);
+ item->caption = tr("Method: %1").arg(item->name);
//get "type" from <arg> where "direction" is "in"
QDomElement n = child.firstChildElement();
while (!n.isNull()) {
- if (n.attribute(QLatin1String("direction")) == QLatin1String("in"))
- item->typeSignature += n.attribute(QLatin1String("type"));
+ if (n.attribute("direction"_L1) == "in"_L1)
+ item->typeSignature += n.attribute("type"_L1);
n = n.nextSiblingElement();
}
- } else if (child.tagName() == QLatin1String("signal")) {
- item = new QDBusItem(QDBusModel::SignalItem,
- child.attribute(QLatin1String("name")), parent);
- item->caption = QLatin1String("Signal: ") + item->name;
- } else if (child.tagName() == QLatin1String("property")) {
- item = new QDBusItem(QDBusModel::PropertyItem,
- child.attribute(QLatin1String("name")), parent);
- item->caption = QLatin1String("Property: ") + item->name;
+ } else if (child.tagName() == "signal"_L1) {
+ item = new QDBusItem(QDBusModel::SignalItem, child.attribute("name"_L1), parent);
+ item->caption = tr("Signal: %1").arg(item->name);
+ } else if (child.tagName() == "property"_L1) {
+ item = new QDBusItem(QDBusModel::PropertyItem, child.attribute("name"_L1), parent);
+ item->caption = tr("Property: %1").arg(item->name);
} else {
qDebug() << "addMethods: unknown tag:" << child.tagName();
}
@@ -147,15 +126,15 @@ void QDBusModel::addPath(QDBusItem *parent)
QDomElement node = doc.documentElement();
QDomElement child = node.firstChildElement();
while (!child.isNull()) {
- if (child.tagName() == QLatin1String("node")) {
+ if (child.tagName() == "node"_L1) {
QDBusItem *item = new QDBusItem(QDBusModel::PathItem,
- child.attribute(QLatin1String("name")) + QLatin1Char('/'), parent);
+ child.attribute("name"_L1) + '/'_L1, parent);
parent->children.append(item);
addMethods(item, child);
- } else if (child.tagName() == QLatin1String("interface")) {
- QDBusItem *item = new QDBusItem(QDBusModel::InterfaceItem,
- child.attribute(QLatin1String("name")), parent);
+ } else if (child.tagName() == "interface"_L1) {
+ QDBusItem *item =
+ new QDBusItem(QDBusModel::InterfaceItem, child.attribute("name"_L1), parent);
parent->children.append(item);
addMethods(item, child);
@@ -171,7 +150,7 @@ void QDBusModel::addPath(QDBusItem *parent)
QDBusModel::QDBusModel(const QString &aService, const QDBusConnection &connection)
: service(aService), c(connection), root(0)
{
- root = new QDBusItem(QDBusModel::PathItem, QLatin1String("/"));
+ root = new QDBusItem(QDBusModel::PathItem, "/"_L1);
}
QDBusModel::~QDBusModel()
@@ -185,7 +164,7 @@ QModelIndex QDBusModel::index(int row, int column, const QModelIndex &parent) co
if (!item)
item = root;
- if (column != 0 || row < 0 || row >= item->children.count())
+ if (column != 0 || row < 0 || row >= item->children.size())
return QModelIndex();
return createIndex(row, 0, item->children.at(row));
@@ -208,7 +187,7 @@ int QDBusModel::rowCount(const QModelIndex &parent) const
if (!item->isPrefetched)
const_cast<QDBusModel *>(this)->addPath(item);
- return item->children.count();
+ return item->children.size();
}
int QDBusModel::columnCount(const QModelIndex &) const
@@ -233,7 +212,7 @@ QVariant QDBusModel::headerData(int section, Qt::Orientation orientation, int ro
if (role != Qt::DisplayRole || orientation == Qt::Vertical || section != 0)
return QVariant();
- return QLatin1String("Methods");
+ return tr("Methods");
}
QDBusModel::Type QDBusModel::itemType(const QModelIndex &index) const
@@ -254,7 +233,7 @@ void QDBusModel::refresh(const QModelIndex &aIndex)
item = root;
if (!item->children.isEmpty()) {
- beginRemoveRows(index, 0, item->children.count() - 1);
+ beginRemoveRows(index, 0, item->children.size() - 1);
qDeleteAll(item->children);
item->children.clear();
endRemoveRows();
@@ -262,7 +241,7 @@ void QDBusModel::refresh(const QModelIndex &aIndex)
addPath(item);
if (!item->children.isEmpty()) {
- beginInsertRows(index, 0, item->children.count() - 1);
+ beginInsertRows(index, 0, item->children.size() - 1);
endInsertRows();
}
}
@@ -307,16 +286,16 @@ QString QDBusModel::dBusTypeSignature(const QModelIndex &index) const
QModelIndex QDBusModel::findObject(const QDBusObjectPath &objectPath)
{
- QStringList path = objectPath.path().split(QLatin1Char('/'), Qt::SkipEmptyParts);
+ QStringList path = objectPath.path().split('/'_L1, Qt::SkipEmptyParts);
QDBusItem *item = root;
int childIdx = -1;
while (item && !path.isEmpty()) {
- const QString branch = path.takeFirst() + QLatin1Char('/');
+ const QString branch = path.takeFirst() + '/'_L1;
childIdx = -1;
// do a linear search over all the children
- for (int i = 0; i < item->children.count(); ++i) {
+ for (int i = 0; i < item->children.size(); ++i) {
QDBusItem *child = item->children.at(i);
if (child->type == PathItem && child->name == branch) {
item = child;
diff --git a/src/qdbus/qdbusviewer/qdbusmodel.h b/src/qdbus/qdbusviewer/qdbusmodel.h
index 44b9fdad8..22ec6fc8c 100644
--- a/src/qdbus/qdbusviewer/qdbusmodel.h
+++ b/src/qdbus/qdbusviewer/qdbusmodel.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QDBUSMODEL_H
#define QDBUSMODEL_H
diff --git a/src/qdbus/qdbusviewer/qdbusviewer.cpp b/src/qdbus/qdbusviewer/qdbusviewer.cpp
index 3613d2db6..5bfb0a4c7 100644
--- a/src/qdbus/qdbusviewer/qdbusviewer.cpp
+++ b/src/qdbus/qdbusviewer/qdbusviewer.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdbusviewer.h"
#include "qdbusmodel.h"
@@ -45,6 +20,7 @@
#include <QtDBus/QDBusConnectionInterface>
#include <QtDBus/QDBusInterface>
#include <QtDBus/QDBusMetaType>
+#include <QtDBus/QDBusServiceWatcher>
#include <QtGui/QAction>
#include <QtGui/QKeyEvent>
@@ -56,6 +32,8 @@
#include <private/qdbusutil_p.h>
+using namespace Qt::StringLiterals;
+
class QDBusViewModel: public QDBusModel
{
public:
@@ -87,10 +65,8 @@ public:
}
};
-QDBusViewer::QDBusViewer(const QDBusConnection &connection, QWidget *parent) :
- QWidget(parent),
- c(connection),
- objectPathRegExp(QLatin1String("\\[ObjectPath: (.*)\\]"))
+QDBusViewer::QDBusViewer(const QDBusConnection &connection, QWidget *parent)
+ : QWidget(parent), c(connection), objectPathRegExp("\\[ObjectPath: (.*)\\]"_L1)
{
serviceFilterLine = new QLineEdit(this);
serviceFilterLine->setPlaceholderText(tr("Search..."));
@@ -141,6 +117,7 @@ QDBusViewer::QDBusViewer(const QDBusConnection &connection, QWidget *parent) :
QWidget *servicesWidget = new QWidget;
QVBoxLayout *servicesLayout = new QVBoxLayout(servicesWidget);
+ servicesLayout->setContentsMargins(QMargins());
servicesLayout->addWidget(serviceFilterLine);
servicesLayout->addWidget(servicesView);
splitter->addWidget(servicesWidget);
@@ -152,23 +129,30 @@ QDBusViewer::QDBusViewer(const QDBusConnection &connection, QWidget *parent) :
connect(servicesView->selectionModel(), &QItemSelectionModel::currentChanged, this, &QDBusViewer::serviceChanged);
connect(tree, &QWidget::customContextMenuRequested, this, &QDBusViewer::showContextMenu);
- QMetaObject::invokeMethod(this, "refresh", Qt::QueuedConnection);
+ QMetaObject::invokeMethod(this, &QDBusViewer::refresh, Qt::QueuedConnection);
if (c.isConnected()) {
- logMessage(QLatin1String("Connected to D-Bus."));
- QDBusConnectionInterface *iface = c.interface();
- connect(iface, &QDBusConnectionInterface::serviceRegistered, this, &QDBusViewer::serviceRegistered);
- connect(iface, &QDBusConnectionInterface::serviceUnregistered, this, &QDBusViewer::serviceUnregistered);
- connect(iface, &QDBusConnectionInterface::serviceOwnerChanged, this, &QDBusViewer::serviceOwnerChanged);
+ QDBusServiceWatcher *watcher =
+ new QDBusServiceWatcher("*", c, QDBusServiceWatcher::WatchForOwnerChange, this);
+ connect(watcher, &QDBusServiceWatcher::serviceOwnerChanged, this,
+ &QDBusViewer::serviceOwnerChanged);
+ logMessage(tr("Connected to D-Bus."));
} else {
- logError(QLatin1String("Cannot connect to D-Bus: ") + c.lastError().message());
+ logError(tr("Cannot connect to D-Bus: %1").arg(c.lastError().message()));
}
objectPathRegExp.setPatternOptions(QRegularExpression::InvertedGreedinessOption);
}
-static inline QString topSplitterStateKey() { return QStringLiteral("topSplitterState"); }
-static inline QString splitterStateKey() { return QStringLiteral("splitterState"); }
+static inline QString topSplitterStateKey()
+{
+ return u"topSplitterState"_s;
+}
+
+static inline QString splitterStateKey()
+{
+ return u"splitterState"_s;
+}
void QDBusViewer::saveState(QSettings *settings) const
{
@@ -184,7 +168,7 @@ void QDBusViewer::restoreState(const QSettings *settings)
void QDBusViewer::logMessage(const QString &msg)
{
- log->append(msg + QLatin1Char('\n'));
+ log->append(msg + '\n'_L1);
}
void QDBusViewer::showEvent(QShowEvent *)
@@ -209,7 +193,7 @@ bool QDBusViewer::eventFilter(QObject *obj, QEvent *event)
void QDBusViewer::logError(const QString &msg)
{
- log->append(QLatin1String("<font color=\"red\">Error: </font>") + msg.toHtmlEscaped() + QLatin1String("<br>"));
+ log->append(tr("<font color=\"red\">Error: </font>%1<br>").arg(msg.toHtmlEscaped()));
}
void QDBusViewer::refresh()
@@ -253,11 +237,12 @@ void QDBusViewer::activate(const QModelIndex &item)
void QDBusViewer::getProperty(const BusSignature &sig)
{
- QDBusMessage message = QDBusMessage::createMethodCall(sig.mService, sig.mPath, QLatin1String("org.freedesktop.DBus.Properties"), QLatin1String("Get"));
+ QDBusMessage message = QDBusMessage::createMethodCall(
+ sig.mService, sig.mPath, "org.freedesktop.DBus.Properties"_L1, "Get"_L1);
QList<QVariant> arguments;
arguments << sig.mInterface << sig.mName;
message.setArguments(arguments);
- c.callWithCallback(message, this, SLOT(dumpMessage(QDBusMessage)));
+ c.callWithCallback(message, this, SLOT(dumpMessage(QDBusMessage)), SLOT(dumpError(QDBusError)));
}
void QDBusViewer::setProperty(const BusSignature &sig)
@@ -280,22 +265,20 @@ void QDBusViewer::setProperty(const BusSignature &sig)
return;
}
- QDBusMessage message = QDBusMessage::createMethodCall(sig.mService, sig.mPath, QLatin1String("org.freedesktop.DBus.Properties"), QLatin1String("Set"));
+ QDBusMessage message = QDBusMessage::createMethodCall(
+ sig.mService, sig.mPath, "org.freedesktop.DBus.Properties"_L1, "Set"_L1);
QList<QVariant> arguments;
arguments << sig.mInterface << sig.mName << QVariant::fromValue(QDBusVariant(value));
message.setArguments(arguments);
- c.callWithCallback(message, this, SLOT(dumpMessage(QDBusMessage)));
-
+ c.callWithCallback(message, this, SLOT(dumpMessage(QDBusMessage)), SLOT(dumpError(QDBusError)));
}
static QString getDbusSignature(const QMetaMethod& method)
{
// create a D-Bus type signature from QMetaMethod's parameters
QString sig;
- for (int i = 0; i < method.parameterTypes().count(); ++i) {
- const int type = QMetaType::fromName(method.parameterTypes().at(i)).id();
- sig.append(QString::fromLatin1(QDBusMetaType::typeToSignature(type)));
- }
+ for (const auto &type : method.parameterTypes())
+ sig.append(QString::fromLatin1(QDBusMetaType::typeToSignature(QMetaType::fromName(type))));
return sig;
}
@@ -308,7 +291,7 @@ void QDBusViewer::callMethod(const BusSignature &sig)
QMetaMethod method;
for (int i = 0; i < mo->methodCount(); ++i) {
const QString signature = QString::fromLatin1(mo->method(i).methodSignature());
- if (signature.startsWith(sig.mName) && signature.at(sig.mName.length()) == QLatin1Char('('))
+ if (signature.startsWith(sig.mName) && signature.at(sig.mName.size()) == '('_L1)
if (getDbusSignature(mo->method(i)) == sig.mTypeSig)
method = mo->method(i);
}
@@ -325,7 +308,7 @@ void QDBusViewer::callMethod(const BusSignature &sig)
const QList<QByteArray> paramTypes = method.parameterTypes();
const QList<QByteArray> paramNames = method.parameterNames();
QList<int> types; // remember the low-level D-Bus type
- for (int i = 0; i < paramTypes.count(); ++i) {
+ for (int i = 0; i < paramTypes.size(); ++i) {
const QByteArray paramType = paramTypes.at(i);
if (paramType.endsWith('&'))
continue; // ignore OUT parameters
@@ -346,10 +329,10 @@ void QDBusViewer::callMethod(const BusSignature &sig)
// Try to convert the values we got as closely as possible to the
// dbus signature. This is especially important for those input as strings
- for (int i = 0; i < args.count(); ++i) {
+ for (int i = 0; i < args.size(); ++i) {
QVariant a = args.at(i);
int desttype = types.at(i);
- if (desttype < int(QMetaType::User) && desttype != int(QVariant::Map)) {
+ if (desttype < int(QMetaType::User) && desttype != qMetaTypeId<QVariantMap>()) {
const QMetaType metaType(desttype);
if (a.canConvert(metaType))
args[i].convert(metaType);
@@ -363,7 +346,7 @@ void QDBusViewer::callMethod(const BusSignature &sig)
QDBusMessage message = QDBusMessage::createMethodCall(sig.mService, sig.mPath, sig.mInterface,
sig.mName);
message.setArguments(args);
- c.callWithCallback(message, this, SLOT(dumpMessage(QDBusMessage)));
+ c.callWithCallback(message, this, SLOT(dumpMessage(QDBusMessage)), SLOT(dumpError(QDBusError)));
}
void QDBusViewer::showContextMenu(const QPoint &point)
@@ -396,9 +379,13 @@ void QDBusViewer::showContextMenu(const QPoint &point)
menu.addAction(action);
break; }
case QDBusModel::PropertyItem: {
+ QDBusInterface iface(sig.mService, sig.mPath, sig.mInterface, c);
+ QMetaProperty prop = iface.metaObject()->property(iface.metaObject()->indexOfProperty(sig.mName.toLatin1()));
QAction *actionSet = new QAction(tr("&Set value"), &menu);
actionSet->setData(3);
+ actionSet->setEnabled(prop.isWritable());
QAction *actionGet = new QAction(tr("&Get value"), &menu);
+ actionGet->setEnabled(prop.isReadable());
actionGet->setData(4);
menu.addAction(actionSet);
menu.addAction(actionGet);
@@ -429,61 +416,68 @@ void QDBusViewer::showContextMenu(const QPoint &point)
void QDBusViewer::connectionRequested(const BusSignature &sig)
{
- if (!c.connect(sig.mService, QString(), sig.mInterface, sig.mName, this,
+ if (c.connect(sig.mService, QString(), sig.mInterface, sig.mName, this,
SLOT(dumpMessage(QDBusMessage)))) {
+ logMessage(tr("Connected to service %1, path %2, interface %3, signal %4").arg(
+ sig.mService, sig.mPath, sig.mInterface, sig.mName));
+ } else {
logError(tr("Unable to connect to service %1, path %2, interface %3, signal %4").arg(
- sig.mService).arg(sig.mPath).arg(sig.mInterface).arg(sig.mName));
+ sig.mService, sig.mPath, sig.mInterface, sig.mName));
}
}
void QDBusViewer::dumpMessage(const QDBusMessage &message)
{
QList<QVariant> args = message.arguments();
- QString out = QLatin1String("Received ");
+ QString messageType;
switch (message.type()) {
case QDBusMessage::SignalMessage:
- out += QLatin1String("signal ");
+ messageType = tr("signal");
break;
case QDBusMessage::ErrorMessage:
- out += QLatin1String("error message ");
+ messageType = tr("error message");
break;
case QDBusMessage::ReplyMessage:
- out += QLatin1String("reply ");
+ messageType = tr("reply");
break;
default:
- out += QLatin1String("message ");
+ messageType = tr("message");
break;
}
- out += QLatin1String("from ");
- out += message.service();
+ QString out = tr("Received %1 from %2").arg(messageType).arg(message.service());
+
if (!message.path().isEmpty())
- out += QLatin1String(", path ") + message.path();
+ out += tr(", path %1").arg(message.path());
if (!message.interface().isEmpty())
- out += QLatin1String(", interface <i>") + message.interface() + QLatin1String("</i>");
+ out += tr(", interface <i>%1</i>").arg(message.interface());
if (!message.member().isEmpty())
- out += QLatin1String(", member ") + message.member();
- out += QLatin1String("<br>");
+ out += tr(", member %1").arg(message.member());
+ out += "<br>"_L1;
if (args.isEmpty()) {
- out += QLatin1String("&nbsp;&nbsp;(no arguments)");
+ out += tr("&nbsp;&nbsp;(no arguments)");
} else {
- out += QLatin1String("&nbsp;&nbsp;Arguments: ");
- for (const QVariant &arg : qAsConst(args)) {
+ QStringList argStrings;
+ for (const QVariant &arg : std::as_const(args)) {
QString str = QDBusUtil::argumentToString(arg).toHtmlEscaped();
// turn object paths into clickable links
- str.replace(objectPathRegExp, QLatin1String("[ObjectPath: <a href=\"qdbus://bus\\1\">\\1</a>]"));
+ str.replace(objectPathRegExp, tr("[ObjectPath: <a href=\"qdbus://bus\\1\">\\1</a>]"));
// convert new lines from command to proper HTML line breaks
- str.replace(QStringLiteral("\n"), QStringLiteral("<br/>"));
- out += str;
- out += QLatin1String(", ");
+ str.replace("\n"_L1, "<br/>"_L1);
+ argStrings.append(str);
}
- out.chop(2);
+ out += tr("&nbsp;&nbsp;Arguments: %1").arg(argStrings.join(tr(", ")));
}
log->append(out);
}
+void QDBusViewer::dumpError(const QDBusError &error)
+{
+ logError(error.message());
+}
+
void QDBusViewer::serviceChanged(const QModelIndex &index)
{
delete tree->model();
@@ -516,14 +510,6 @@ static QModelIndex findItem(QStringListModel *servicesModel, const QString &name
return hits.first();
}
-void QDBusViewer::serviceUnregistered(const QString &name)
-{
- QModelIndex hit = findItem(servicesModel, name);
- if (!hit.isValid())
- return;
- servicesModel->removeRows(hit.row(), 1);
-}
-
void QDBusViewer::serviceOwnerChanged(const QString &name, const QString &oldOwner,
const QString &newOwner)
{
@@ -558,7 +544,7 @@ void QDBusViewer::refreshChildren()
void QDBusViewer::anchorClicked(const QUrl &url)
{
- if (url.scheme() != QLatin1String("qdbus"))
+ if (url.scheme() != "qdbus"_L1)
// not ours
return;
diff --git a/src/qdbus/qdbusviewer/qdbusviewer.h b/src/qdbus/qdbusviewer/qdbusviewer.h
index 1b7faefd2..4272d6957 100644
--- a/src/qdbus/qdbusviewer/qdbusviewer.h
+++ b/src/qdbus/qdbusviewer/qdbusviewer.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QDBUSVIEWER_H
#define QDBUSVIEWER_H
@@ -72,10 +47,9 @@ private slots:
void getProperty(const BusSignature &sig);
void setProperty(const BusSignature &sig);
void dumpMessage(const QDBusMessage &msg);
+ void dumpError(const QDBusError &error);
void refreshChildren();
- void serviceRegistered(const QString &service);
- void serviceUnregistered(const QString &service);
void serviceOwnerChanged(const QString &name, const QString &oldOwner, const QString &newOwner);
void serviceFilterReturnPressed();
@@ -85,6 +59,7 @@ private slots:
void anchorClicked(const QUrl &url);
private:
+ void serviceRegistered(const QString &service);
void logMessage(const QString &msg);
void showEvent(QShowEvent *) override;
bool eventFilter(QObject *obj, QEvent *event) override;
diff --git a/src/qdbus/qdbusviewer/qdbusviewer.pro b/src/qdbus/qdbusviewer/qdbusviewer.pro
deleted file mode 100644
index 02ec7a2d2..000000000
--- a/src/qdbus/qdbusviewer/qdbusviewer.pro
+++ /dev/null
@@ -1,29 +0,0 @@
-HEADERS = qdbusviewer.h \
- qdbusmodel.h \
- servicesproxymodel.h \
- propertydialog.h \
- logviewer.h \
- mainwindow.h
-
-SOURCES = qdbusviewer.cpp \
- qdbusmodel.cpp \
- servicesproxymodel.cpp \
- propertydialog.cpp \
- logviewer.cpp \
- mainwindow.cpp \
- main.cpp \
-
-RESOURCES += qdbusviewer.qrc
-
-QT += widgets dbus-private xml
-
-mac {
- ICON = images/qdbusviewer.icns
- QMAKE_INFO_PLIST = Info_mac.plist
-}
-
-win32 {
- RC_FILE = qdbusviewer.rc
-}
-
-load(qt_app)
diff --git a/src/qdbus/qdbusviewer/qdbusviewer.qrc b/src/qdbus/qdbusviewer/qdbusviewer.qrc
deleted file mode 100644
index 8be6643bc..000000000
--- a/src/qdbus/qdbusviewer/qdbusviewer.qrc
+++ /dev/null
@@ -1,6 +0,0 @@
-<RCC>
- <qresource prefix="/qt-project.org/qdbusviewer" >
- <file>images/qdbusviewer-128.png</file>
- <file>images/qdbusviewer.png</file>
- </qresource>
-</RCC>
diff --git a/src/qdbus/qdbusviewer/qdbusviewer.rc b/src/qdbus/qdbusviewer/qdbusviewer.rc
deleted file mode 100644
index c4b1d60b8..000000000
--- a/src/qdbus/qdbusviewer/qdbusviewer.rc
+++ /dev/null
@@ -1 +0,0 @@
-IDI_ICON1 ICON DISCARDABLE "images/qdbusviewer.ico"
diff --git a/src/qdbus/qdbusviewer/servicesproxymodel.cpp b/src/qdbus/qdbusviewer/servicesproxymodel.cpp
index fff348e14..f79c6dfa5 100644
--- a/src/qdbus/qdbusviewer/servicesproxymodel.cpp
+++ b/src/qdbus/qdbusviewer/servicesproxymodel.cpp
@@ -1,33 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "servicesproxymodel.h"
+using namespace Qt::StringLiterals;
+
ServicesProxyModel::ServicesProxyModel(QObject *parent)
: QSortFilterProxyModel(parent)
{
@@ -48,8 +25,8 @@ bool ServicesProxyModel::lessThan(const QModelIndex &left,
QString s1 = sourceModel()->data(left).toString();
QString s2 = sourceModel()->data(right).toString();
- const bool isNumber1 = s1.startsWith(QLatin1String(":1."));
- const bool isNumber2 = s2.startsWith(QLatin1String(":1."));
+ const bool isNumber1 = s1.startsWith(":1."_L1);
+ const bool isNumber2 = s2.startsWith(":1."_L1);
if (isNumber1 == isNumber2) {
if (isNumber1) {
int number1 = QStringView{s1}.mid(3).toInt();
diff --git a/src/qdbus/qdbusviewer/servicesproxymodel.h b/src/qdbus/qdbusviewer/servicesproxymodel.h
index 966b92d11..08d2fd6bd 100644
--- a/src/qdbus/qdbusviewer/servicesproxymodel.h
+++ b/src/qdbus/qdbusviewer/servicesproxymodel.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef SERVICESFILTERPROXYMODEL_H
#define SERVICESFILTERPROXYMODEL_H
diff --git a/src/qdoc/.prev_CMakeLists.txt b/src/qdoc/.prev_CMakeLists.txt
deleted file mode 100644
index 5baa6beb9..000000000
--- a/src/qdoc/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,148 +0,0 @@
-# Generated from qdoc.pro.
-
-#####################################################################
-## qdoc Tool:
-#####################################################################
-
-qt_get_tool_target_name(target_name qdoc)
-qt_add_tool(${target_name}
- TARGET_DESCRIPTION "Qt Documentation Compiler"
- SOURCES
- access.h
- aggregate.cpp aggregate.h
- atom.cpp atom.h
- clangcodeparser.cpp clangcodeparser.h
- classnode.cpp classnode.h
- codechunk.cpp codechunk.h
- codemarker.cpp codemarker.h
- codeparser.cpp codeparser.h
- collectionnode.cpp collectionnode.h
- config.cpp config.h
- cppcodemarker.cpp cppcodemarker.h
- cppcodeparser.cpp cppcodeparser.h
- doc.cpp doc.h
- docbookgenerator.cpp docbookgenerator.h
- docparser.cpp docparser.h
- docprivate.cpp docprivate.h
- docutilities.h
- editdistance.cpp editdistance.h
- enumitem.h
- enumnode.cpp enumnode.h
- examplenode.h
- externalpagenode.cpp externalpagenode.h
- functionnode.cpp functionnode.h
- generator.cpp generator.h
- headernode.cpp headernode.h
- helpprojectwriter.cpp helpprojectwriter.h
- htmlgenerator.cpp htmlgenerator.h
- importrec.h
- jscodemarker.cpp jscodemarker.h
- location.cpp location.h
- loggingcategory.h
- macro.h
- main.cpp
- manifestwriter.cpp manifestwriter.h
- namespacenode.cpp namespacenode.h
- node.cpp node.h
- openedlist.cpp openedlist.h
- pagenode.cpp pagenode.h
- parameters.cpp parameters.h
- propertynode.cpp propertynode.h
- proxynode.cpp proxynode.h
- puredocparser.cpp puredocparser.h
- qdoccommandlineparser.cpp qdoccommandlineparser.h
- qdocdatabase.cpp qdocdatabase.h
- qdocindexfiles.cpp qdocindexfiles.h
- qdoctagfiles.cpp qdoctagfiles.h
- qmlcodemarker.cpp qmlcodemarker.h
- qmlcodeparser.cpp qmlcodeparser.h
- qmlmarkupvisitor.cpp qmlmarkupvisitor.h
- qmlpropertynode.cpp qmlpropertynode.h
- qmltypenode.cpp qmltypenode.h
- qmlvisitor.cpp qmlvisitor.h
- quoter.cpp quoter.h
- relatedclass.cpp relatedclass.h
- sections.cpp sections.h
- separator.cpp separator.h
- sharedcommentnode.cpp sharedcommentnode.h
- singleton.h
- text.cpp text.h
- tokenizer.cpp tokenizer.h
- topic.h
- tree.cpp tree.h
- typedefnode.cpp typedefnode.h
- usingclause.cpp usingclause.h
- utilities.cpp utilities.h
- variablenode.cpp variablenode.h
- webxmlgenerator.cpp webxmlgenerator.h
- xmlgenerator.cpp xmlgenerator.h
- DEFINES
- (CLANG_RESOURCE_DIR=\"/clang//include\")
- QT_NO_FOREACH
- INCLUDE_DIRECTORIES
- ${QT_SOURCE_TREE}/src/tools/qdoc
- ${QT_SOURCE_TREE}/src/tools/qdoc/qmlparser
-)
-
-#### Keys ignored in scope 1:.:.:qdoc.pro:<TRUE>:
-# CMAKE_BIN_DIR = "$$cmakeRelativePath($$[QT_HOST_BINS], $$[QT_INSTALL_PREFIX])"
-# CMAKE_INSTALL_LIBS_DIR = "$$cmakeTargetPath($$[QT_INSTALL_LIBS])"
-# CMAKE_LIB_DIR = "$$cmakeRelativePath($$[QT_INSTALL_LIBS], $$[QT_INSTALL_PREFIX])"
-# CMAKE_PACKAGE_VERSION = "$$MODULE_VERSION"
-# INSTALLS = "cmake_qdoc_tools_files"
-# QMAKE_SUBSTITUTES = "cmake_qdoc_config_file" "cmake_qdoc_config_version_file"
-# QMAKE_TARGET_DESCRIPTION = "Qt Documentation Compiler"
-# TR_EXCLUDE = "$$PWD/*"
-# _OPTION = "host_build"
-# cmake_qdoc_config_file.input = "$$PWD/Qt5DocToolsConfig.cmake.in"
-# cmake_qdoc_config_file.output = "$$MODULE_BASE_OUTDIR/lib/cmake/Qt5DocTools/Qt5DocToolsConfig.cmake"
-# cmake_qdoc_config_version_file.input = "$$[QT_HOST_DATA/src]/mkspecs/features/data/cmake/Qt5ConfigVersion.cmake.in"
-# cmake_qdoc_config_version_file.output = "$$MODULE_BASE_OUTDIR/lib/cmake/Qt5DocTools/Qt5DocToolsConfigVersion.cmake"
-# cmake_qdoc_tools_files.CONFIG = "no_check_exist"
-# cmake_qdoc_tools_files.files = "$$cmake_qdoc_config_file.output" "$$cmake_qdoc_config_version_file.output"
-# cmake_qdoc_tools_files.path = "$$[QT_INSTALL_LIBS]/cmake/Qt5DocTools"
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 2:.:.:qdoc.pro:NOT force_bootstrap:
-# _REQUIREMENTS = "qtConfig(xmlstreamwriter)"
-
-qt_extend_target(${target_name} CONDITION TARGET Qt::QmlDevToolsPrivate
- PUBLIC_LIBRARIES
- Qt::QmlDevToolsPrivate
-)
-
-qt_extend_target(${target_name} CONDITION NOT TARGET Qt::QmlDevToolsPrivate
- DEFINES
- QT_NO_DECLARATIVE
-)
-
-#### Keys ignored in scope 6:.:.:qdoc.pro:NOT QMAKE_DEFAULT_LIBDIRS___contains____ss_CLANG_LIBDIR AND NOT disable_external_rpath:
-# QMAKE_RPATHDIR = "$$CLANG_LIBDIR"
-
-qt_extend_target(${target_name} CONDITION win32-icc_x_ OR win32-msvc_x_
- LINK_OPTIONS
- "/STACK:4194304"
-)
-
-#### Keys ignored in scope 8:.:.:qdoc.pro:CMAKE_INSTALL_LIBS_DIR___contains___^(/usr?/lib(64)?._x_):
-# CMAKE_USR_MOVE_WORKAROUND = "$$CMAKE_INSTALL_LIBS_DIR"
-
-#### Keys ignored in scope 9:.:.:qdoc.pro:NOT CMAKE_LIB_DIR___contains___^\\.\\./._x_:
-# CMAKE_RELATIVE_INSTALL_DIR = "$${CMAKE_RELATIVE_INSTALL_LIBS_DIR}../../"
-# CMAKE_RELATIVE_INSTALL_LIBS_DIR = "$$cmakeRelativePath($$[QT_INSTALL_PREFIX], $$[QT_INSTALL_LIBS])"
-
-#### Keys ignored in scope 10:.:.:qdoc.pro:else:
-# CMAKE_LIB_DIR_IS_ABSOLUTE = "True"
-
-#### Keys ignored in scope 11:.:.:qdoc.pro:CMAKE_BIN_DIR___contains___^\\.\\./._x_:
-# CMAKE_BIN_DIR = "$$[QT_HOST_BINS]/"
-# CMAKE_BIN_DIR_IS_ABSOLUTE = "True"
-
-#### Keys ignored in scope 12:.:.:qdoc.pro:QMAKE_HOST.os___equals___Windows:
-# CMAKE_BIN_SUFFIX = ".exe"
-qt_add_docs(${target_name}
- doc/config/qdoc.qdocconf
-)
-
diff --git a/src/qdoc/CMakeLists.txt b/src/qdoc/CMakeLists.txt
index ffd4e4eb1..9662b34c6 100644
--- a/src/qdoc/CMakeLists.txt
+++ b/src/qdoc/CMakeLists.txt
@@ -1,159 +1,10 @@
-# Generated from qdoc.pro.
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-# special case begin
-if(CMAKE_VERSION VERSION_LESS "3.19" AND MSVC AND CMAKE_GENERATOR STREQUAL "Ninja Multi-Config")
- message(WARNING "qdoc will not be built in this configuration.")
- return()
-endif()
-# special case end
-
-#####################################################################
-## qdoc Tool:
-#####################################################################
-
-qt_get_tool_target_name(target_name qdoc)
-qt_add_tool(${target_name}
- TARGET_DESCRIPTION "Qt Documentation Compiler"
- TOOLS_TARGET Tools # special case
- SOURCES
- access.h
- aggregate.cpp aggregate.h
- atom.cpp atom.h
- clangcodeparser.cpp clangcodeparser.h
- classnode.cpp classnode.h
- codechunk.cpp codechunk.h
- codemarker.cpp codemarker.h
- codeparser.cpp codeparser.h
- collectionnode.cpp collectionnode.h
- config.cpp config.h
- cppcodemarker.cpp cppcodemarker.h
- cppcodeparser.cpp cppcodeparser.h
- doc.cpp doc.h
- docbookgenerator.cpp docbookgenerator.h
- docparser.cpp docparser.h
- docprivate.cpp docprivate.h
- docutilities.h
- editdistance.cpp editdistance.h
- enumitem.h
- enumnode.cpp enumnode.h
- examplenode.h
- externalpagenode.cpp externalpagenode.h
- functionnode.cpp functionnode.h
- generator.cpp generator.h
- headernode.cpp headernode.h
- helpprojectwriter.cpp helpprojectwriter.h
- htmlgenerator.cpp htmlgenerator.h
- importrec.h
- jscodemarker.cpp jscodemarker.h
- location.cpp location.h
- loggingcategory.h
- macro.h
- main.cpp
- manifestwriter.cpp manifestwriter.h
- namespacenode.cpp namespacenode.h
- node.cpp node.h
- openedlist.cpp openedlist.h
- pagenode.cpp pagenode.h
- parameters.cpp parameters.h
- propertynode.cpp propertynode.h
- proxynode.cpp proxynode.h
- puredocparser.cpp puredocparser.h
- qdoccommandlineparser.cpp qdoccommandlineparser.h
- qdocdatabase.cpp qdocdatabase.h
- qdocindexfiles.cpp qdocindexfiles.h
- qdoctagfiles.cpp qdoctagfiles.h
- qmlcodemarker.cpp qmlcodemarker.h
- qmlcodeparser.cpp qmlcodeparser.h
- qmlmarkupvisitor.cpp qmlmarkupvisitor.h
- qmlpropertynode.cpp qmlpropertynode.h
- qmltypenode.cpp qmltypenode.h
- qmlvisitor.cpp qmlvisitor.h
- quoter.cpp quoter.h
- relatedclass.cpp relatedclass.h
- sections.cpp sections.h
- separator.cpp separator.h
- sharedcommentnode.cpp sharedcommentnode.h
- singleton.h
- text.cpp text.h
- tokenizer.cpp tokenizer.h
- topic.h
- tree.cpp tree.h
- typedefnode.cpp typedefnode.h
- usingclause.cpp usingclause.h
- utilities.cpp utilities.h
- variablenode.cpp variablenode.h
- webxmlgenerator.cpp webxmlgenerator.h
- xmlgenerator.cpp xmlgenerator.h
- LIBRARIES # special case
- WrapLibClang::WrapLibClang # special case
- DEFINES
- #(CLANG_RESOURCE_DIR=\"/clang//include\") # special case remove
- CLANG_RESOURCE_DIR=${QT_LIBCLANG_RESOURCE_DIR} # special case
- QDOC2_COMPAT
- INCLUDE_DIRECTORIES
- ${QT_SOURCE_TREE}/src/tools/qdoc
- ${QT_SOURCE_TREE}/src/tools/qdoc/qmlparser
-)
-
-#### Keys ignored in scope 1:.:.:qdoc.pro:<TRUE>:
-# CMAKE_BIN_DIR = "$$cmakeRelativePath($$[QT_HOST_BINS], $$[QT_INSTALL_PREFIX])"
-# CMAKE_INSTALL_LIBS_DIR = "$$cmakeTargetPath($$[QT_INSTALL_LIBS])"
-# CMAKE_LIB_DIR = "$$cmakeRelativePath($$[QT_INSTALL_LIBS], $$[QT_INSTALL_PREFIX])"
-# CMAKE_PACKAGE_VERSION = "$$MODULE_VERSION"
-# INSTALLS = "cmake_qdoc_tools_files"
-# QMAKE_SUBSTITUTES = "cmake_qdoc_config_file" "cmake_qdoc_config_version_file"
-# QMAKE_TARGET_DESCRIPTION = "Qt Documentation Compiler"
-# TR_EXCLUDE = "$$PWD/*"
-# _OPTION = "host_build"
-# cmake_qdoc_config_file.input = "$$PWD/Qt5DocToolsConfig.cmake.in"
-# cmake_qdoc_config_file.output = "$$MODULE_BASE_OUTDIR/lib/cmake/Qt5DocTools/Qt5DocToolsConfig.cmake"
-# cmake_qdoc_config_version_file.input = "$$[QT_HOST_DATA/src]/mkspecs/features/data/cmake/Qt5ConfigVersion.cmake.in"
-# cmake_qdoc_config_version_file.output = "$$MODULE_BASE_OUTDIR/lib/cmake/Qt5DocTools/Qt5DocToolsConfigVersion.cmake"
-# cmake_qdoc_tools_files.CONFIG = "no_check_exist"
-# cmake_qdoc_tools_files.files = "$$cmake_qdoc_config_file.output" "$$cmake_qdoc_config_version_file.output"
-# cmake_qdoc_tools_files.path = "$$[QT_INSTALL_LIBS]/cmake/Qt5DocTools"
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 2:.:.:qdoc.pro:NOT force_bootstrap:
-# _REQUIREMENTS = "qtConfig(xmlstreamwriter)"
-
-qt_extend_target(${target_name} CONDITION TARGET Qt::QmlDevToolsPrivate
- PUBLIC_LIBRARIES
- Qt::QmlDevToolsPrivate
-)
-
-qt_extend_target(${target_name} CONDITION NOT TARGET Qt::QmlDevToolsPrivate
- DEFINES
- QT_NO_DECLARATIVE
-)
-
-#### Keys ignored in scope 6:.:.:qdoc.pro:NOT QMAKE_DEFAULT_LIBDIRS___contains____ss_CLANG_LIBDIR AND NOT disable_external_rpath:
-# QMAKE_RPATHDIR = "$$CLANG_LIBDIR"
-
-qt_extend_target(${target_name} CONDITION win32-icc_x_ OR win32-msvc_x_
- LINK_OPTIONS
- "/STACK:4194304"
-)
-
-#### Keys ignored in scope 8:.:.:qdoc.pro:CMAKE_INSTALL_LIBS_DIR___contains___^(/usr?/lib(64)?._x_):
-# CMAKE_USR_MOVE_WORKAROUND = "$$CMAKE_INSTALL_LIBS_DIR"
-
-#### Keys ignored in scope 9:.:.:qdoc.pro:NOT CMAKE_LIB_DIR___contains___^\\.\\./._x_:
-# CMAKE_RELATIVE_INSTALL_DIR = "$${CMAKE_RELATIVE_INSTALL_LIBS_DIR}../../"
-# CMAKE_RELATIVE_INSTALL_LIBS_DIR = "$$cmakeRelativePath($$[QT_INSTALL_PREFIX], $$[QT_INSTALL_LIBS])"
-
-#### Keys ignored in scope 10:.:.:qdoc.pro:else:
-# CMAKE_LIB_DIR_IS_ABSOLUTE = "True"
-
-#### Keys ignored in scope 11:.:.:qdoc.pro:CMAKE_BIN_DIR___contains___^\\.\\./._x_:
-# CMAKE_BIN_DIR = "$$[QT_HOST_BINS]/"
-# CMAKE_BIN_DIR_IS_ABSOLUTE = "True"
-
-#### Keys ignored in scope 12:.:.:qdoc.pro:QMAKE_HOST.os___equals___Windows:
-# CMAKE_BIN_SUFFIX = ".exe"
-qt_add_docs(${target_name}
- doc/config/qdoc.qdocconf
-)
+add_subdirectory(catch)
+add_subdirectory(catch_conversions)
+add_subdirectory(catch_generators)
+if(QT_FEATURE_qdoc)
+ add_subdirectory(qdoc)
+endif()
diff --git a/src/qdoc/Qt5DocToolsConfig.cmake.in b/src/qdoc/Qt5DocToolsConfig.cmake.in
deleted file mode 100644
index 2a252bb31..000000000
--- a/src/qdoc/Qt5DocToolsConfig.cmake.in
+++ /dev/null
@@ -1,67 +0,0 @@
-if (CMAKE_VERSION VERSION_LESS 2.8.3)
- message(FATAL_ERROR \"Qt 5 requires at least CMake version 2.8.3\")
-endif()
-
-!!IF !isEmpty(CMAKE_USR_MOVE_WORKAROUND)
-!!IF !isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
-set(_qt5_qdoctools_install_prefix \"$$[QT_INSTALL_PREFIX]\")
-!!ELSE
-get_filename_component(_IMPORT_PREFIX \"${CMAKE_CURRENT_LIST_FILE}\" PATH)
-# Use original install prefix when loaded through a
-# cross-prefix symbolic link such as /lib -> /usr/lib.
-get_filename_component(_realCurr \"${_IMPORT_PREFIX}\" REALPATH)
-get_filename_component(_realOrig \"$$CMAKE_INSTALL_LIBS_DIR/cmake/Qt5DocTools\" REALPATH)
-if(_realCurr STREQUAL _realOrig)
- get_filename_component(_qt5_qdoctools_install_prefix \"$$CMAKE_INSTALL_LIBS_DIR/$${CMAKE_RELATIVE_INSTALL_LIBS_DIR}\" ABSOLUTE)
-else()
- get_filename_component(_qt5_qdoctools_install_prefix \"${CMAKE_CURRENT_LIST_DIR}/$${CMAKE_RELATIVE_INSTALL_DIR}\" ABSOLUTE)
-endif()
-unset(_realOrig)
-unset(_realCurr)
-unset(_IMPORT_PREFIX)
-!!ENDIF
-!!ELIF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
-get_filename_component(_qt5_qdoctools_install_prefix \"${CMAKE_CURRENT_LIST_DIR}/$${CMAKE_RELATIVE_INSTALL_DIR}\" ABSOLUTE)
-!!ELSE
-set(_qt5_qdoctools_install_prefix \"$$[QT_INSTALL_PREFIX]\")
-!!ENDIF
-
-macro(_qt5_DocTools_check_file_exists file)
- if(NOT EXISTS \"${file}\" )
- message(FATAL_ERROR \"The package \\\"Qt5DocTools\\\" references the file
- \\\"${file}\\\"
-but this file does not exist. Possible reasons include:
-* The file was deleted, renamed, or moved to another location.
-* An install or uninstall procedure did not complete successfully.
-* The installation package was faulty and contained
- \\\"${CMAKE_CURRENT_LIST_FILE}\\\"
-but not all the files it references.
-\")
- endif()
-endmacro()
-
-if (NOT TARGET Qt5::qdoc)
- add_executable(Qt5::qdoc IMPORTED)
-
-!!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
- set(imported_location \"${_qt5_qdoctools_install_prefix}/$${CMAKE_BIN_DIR}qdoc$$CMAKE_BIN_SUFFIX\")
-!!ELSE
- set(imported_location \"$${CMAKE_BIN_DIR}qdoc$$CMAKE_BIN_SUFFIX\")
-!!ENDIF
- _qt5_DocTools_check_file_exists(${imported_location})
-
- set_target_properties(Qt5::qdoc PROPERTIES
- IMPORTED_LOCATION ${imported_location}
- )
-endif()
-
-# Create versionless tool targets.
-foreach(__qt_tool qdoc)
- if(NOT \"${QT_NO_CREATE_VERSIONLESS_TARGETS}\" AND NOT TARGET Qt::${__qt_tool}
- AND TARGET Qt5::${__qt_tool})
- add_executable(Qt::${__qt_tool} IMPORTED)
- get_target_property(__qt_imported_location Qt5::${__qt_tool} IMPORTED_LOCATION)
- set_target_properties(Qt::${__qt_tool}
- PROPERTIES IMPORTED_LOCATION \"${__qt_imported_location}\")
- endif()
-endforeach()
diff --git a/src/qdoc/access.h b/src/qdoc/access.h
deleted file mode 100644
index 668b0239e..000000000
--- a/src/qdoc/access.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtCore/qglobal.h>
-
-#ifndef ACCESS_H
-#define ACCESS_H
-
-QT_BEGIN_NAMESPACE
-
-enum class Access : unsigned char { Public, Protected, Private };
-
-QT_END_NAMESPACE
-
-#endif // ACCESS_H
diff --git a/src/qdoc/aggregate.cpp b/src/qdoc/aggregate.cpp
deleted file mode 100644
index adbb7d1ca..000000000
--- a/src/qdoc/aggregate.cpp
+++ /dev/null
@@ -1,1037 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "aggregate.h"
-
-#include "functionnode.h"
-#include "parameters.h"
-#include "typedefnode.h"
-#include "qdocdatabase.h"
-#include "qmlpropertynode.h"
-#include "qmltypenode.h"
-#include "sharedcommentnode.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class Aggregate
- */
-
-/*! \fn Aggregate::Aggregate(NodeType type, Aggregate *parent, const QString &name)
- The constructor should never be called directly. It is only called
- by the constructors of subclasses of Aggregate. Those constructors
- pass the node \a type they want to create, the \a parent of the new
- node, and its \a name.
- */
-
-/*!
- The destructor calls delete for each child of this Aggregate
- that has this Aggregate as its parent. A child node that has
- some other Aggregate as its parent is deleted by that
- Aggregate's destructor. This is a fail-safe test.
-
- The destructor no longer deletes the collection of children
- by calling qDeleteAll() because the child list can contain
- pointers to children that have some other Aggregate as their
- parent. This is because of how the \e{\\relates} command is
- processed. An Aggregate can have a pointer to, for example,
- a FunctionNode in its child list, but that FunctionNode has
- a differen Aggregate as its parent because a \e{\\relates}
- command was used to relate it to that parent. In that case,
- the other Aggregate's destructor must delete that node.
-
- \note This function is the \b only place where delete is
- called to delete any subclass of Node.
-
- \note This strategy depends on the node tree being destroyed
- by calling delete on the root node of the tree. This happens
- in the destructor of class Tree.
- */
-Aggregate::~Aggregate()
-{
- m_enumChildren.clear();
- m_nonfunctionMap.clear();
- m_functionMap.clear();
- for (int i = 0; i < m_children.size(); ++i) {
- if ((m_children[i] != nullptr) && (m_children[i]->parent() == this))
- delete m_children[i];
- m_children[i] = nullptr;
- }
- m_children.clear();
-}
-
-/*!
- If \a genus is \c{Node::DontCare}, find the first node in
- this node's child list that has the given \a name. If this
- node is a QML type, be sure to also look in the children
- of its property group nodes. Return the matching node or 0.
-
- If \a genus is either \c{Node::CPP} or \c {Node::QML}, then
- find all this node's children that have the given \a name,
- and return the one that satisfies the \a genus requirement.
- */
-Node *Aggregate::findChildNode(const QString &name, Node::Genus genus, int findFlags) const
-{
- if (genus == Node::DontCare) {
- Node *node = m_nonfunctionMap.value(name);
- if (node)
- return node;
- } else {
- NodeList nodes = m_nonfunctionMap.values(name);
- if (!nodes.isEmpty()) {
- for (int i = 0; i < nodes.size(); ++i) {
- Node *node = nodes.at(i);
- if (genus == node->genus()) {
- if (findFlags & TypesOnly) {
- if (!node->isTypedef() && !node->isClassNode() && !node->isQmlType()
- && !node->isQmlBasicType() && !node->isJsType()
- && !node->isJsBasicType() && !node->isEnumType())
- continue;
- } else if (findFlags & IgnoreModules && node->isModule())
- continue;
- return node;
- }
- }
- }
- }
- if (genus != Node::DontCare && this->genus() != genus)
- return nullptr;
- return m_functionMap.value(name);
-}
-
-/*!
- Find all the child nodes of this node that are named
- \a name and return them in \a nodes.
- */
-void Aggregate::findChildren(const QString &name, NodeVector &nodes) const
-{
- nodes.clear();
- int nonfunctionCount = m_nonfunctionMap.count(name);
- auto it = m_functionMap.find(name);
- if (it != m_functionMap.end()) {
- int functionCount = 0;
- FunctionNode *fn = it.value();
- while (fn != nullptr) {
- ++functionCount;
- fn = fn->nextOverload();
- }
- nodes.reserve(nonfunctionCount + functionCount);
- fn = it.value();
- while (fn != nullptr) {
- nodes.append(fn);
- fn = fn->nextOverload();
- }
- } else {
- nodes.reserve(nonfunctionCount);
- }
- if (nonfunctionCount > 0) {
- for (auto it = m_nonfunctionMap.find(name);
- it != m_nonfunctionMap.end() && it.key() == name; ++it) {
- nodes.append(it.value());
- }
- }
-}
-
-/*!
- This function searches for a child node of this Aggregate,
- such that the child node has the spacified \a name and the
- function \a isMatch returns true for the node. The function
- passed must be one of the isXxx() functions in class Node
- that tests the node type.
- */
-Node *Aggregate::findNonfunctionChild(const QString &name, bool (Node::*isMatch)() const)
-{
- NodeList nodes = m_nonfunctionMap.values(name);
- for (int i = 0; i < nodes.size(); ++i) {
- Node *node = nodes.at(i);
- if ((node->*(isMatch))())
- return node;
- }
- return nullptr;
-}
-
-/*!
- Find a function node that is a child of this node, such that
- the function node has the specified \a name and \a parameters.
- If \a parameters is empty but no matching function is found
- that has no parameters, return the first non-internal primary
- function or overload, whether it has parameters or not.
- */
-FunctionNode *Aggregate::findFunctionChild(const QString &name, const Parameters &parameters)
-{
- auto it = m_functionMap.find(name);
- if (it == m_functionMap.end())
- return nullptr;
- FunctionNode *fn = it.value();
-
- if (parameters.isEmpty() && fn->parameters().isEmpty() && !fn->isInternal())
- return fn;
-
- while (fn != nullptr) {
- if (parameters.count() == fn->parameters().count() && !fn->isInternal()) {
- if (parameters.isEmpty())
- return fn;
- bool matched = true;
- for (int i = 0; i < parameters.count(); i++) {
- if (parameters.at(i).type() != fn->parameters().at(i).type()) {
- matched = false;
- break;
- }
- }
- if (matched)
- return fn;
- }
- fn = fn->nextOverload();
- }
-
- if (parameters.isEmpty()) {
- for (fn = it.value(); fn != nullptr; fn = fn->nextOverload())
- if (!fn->isInternal())
- return fn;
- return it.value();
- }
- return nullptr;
-}
-
-/*!
- Find the function node that is a child of this node, such
- that the function described has the same name and signature
- as the function described by the function node \a clone.
- */
-FunctionNode *Aggregate::findFunctionChild(const FunctionNode *clone)
-{
- FunctionNode *fn = m_functionMap.value(clone->name());
- while (fn != nullptr) {
- if (isSameSignature(clone, fn))
- return fn;
- fn = fn->nextOverload();
- }
- return nullptr;
-}
-
-/*!
- Returns the list of keys from the primary function map.
- */
-QStringList Aggregate::primaryKeys()
-{
- return m_functionMap.keys();
-}
-
-/*!
- Mark all child nodes that have no documentation as having
- private access and internal status. qdoc will then ignore
- them for documentation purposes.
- */
-void Aggregate::markUndocumentedChildrenInternal()
-{
- for (auto *child : qAsConst(m_children)) {
- if (!child->isSharingComment() && !child->hasDoc() && !child->isDontDocument()) {
- if (!child->docMustBeGenerated()) {
- if (child->isFunction()) {
- if (static_cast<FunctionNode *>(child)->hasAssociatedProperties())
- continue;
- } else if (child->isTypedef()) {
- if (static_cast<TypedefNode *>(child)->hasAssociatedEnum())
- continue;
- }
- child->setAccess(Access::Private);
- child->setStatus(Node::Internal);
- }
- }
- if (child->isAggregate()) {
- static_cast<Aggregate *>(child)->markUndocumentedChildrenInternal();
- }
- }
-}
-
-/*!
- This is where we set the overload numbers for function nodes.
- \note Overload numbers for related non-members are handled
- separately.
- */
-void Aggregate::normalizeOverloads()
-{
- /*
- Ensure that none of the primary functions is inactive, private,
- or marked \e {overload}.
- */
- for (auto it = m_functionMap.begin(); it != m_functionMap.end(); ++it) {
- FunctionNode *fn = it.value();
- if (fn->isOverload()) {
- FunctionNode *primary = fn->findPrimaryFunction();
- if (primary) {
- primary->setNextOverload(fn);
- it.value() = primary;
- fn = primary;
- } else {
- fn->clearOverloadFlag();
- }
- }
- int count = 0;
- fn->setOverloadNumber(0);
- FunctionNode *internalFn = nullptr;
- while (fn != nullptr) {
- FunctionNode *next = fn->nextOverload();
- if (next) {
- if (next->isInternal()) {
- // internal overloads are moved to a separate list
- // and processed last
- fn->setNextOverload(next->nextOverload());
- next->setNextOverload(internalFn);
- internalFn = next;
- } else {
- next->setOverloadNumber(++count);
- }
- fn = fn->nextOverload();
- } else {
- fn->setNextOverload(internalFn);
- break;
- }
- }
- while (internalFn) {
- internalFn->setOverloadNumber(++count);
- internalFn = internalFn->nextOverload();
- }
- // process next function in function map.
- }
- /*
- Recursive part.
- */
- for (auto *node : qAsConst(m_children)) {
- if (node->isAggregate())
- static_cast<Aggregate *>(node)->normalizeOverloads();
- }
-}
-
-/*!
- Returns a const reference to the list of child nodes of this
- aggregate that are not function nodes. Duplicate nodes are
- removed from the list.
- */
-const NodeList &Aggregate::nonfunctionList()
-{
- m_nonfunctionList = m_nonfunctionMap.values();
- std::sort(m_nonfunctionList.begin(), m_nonfunctionList.end(), Node::nodeNameLessThan);
- m_nonfunctionList.erase(std::unique(m_nonfunctionList.begin(), m_nonfunctionList.end()),
- m_nonfunctionList.end());
- return m_nonfunctionList;
-}
-
-/*! \fn bool Aggregate::isAggregate() const
- Returns \c true because this node is an instance of Aggregate,
- which means it can have children.
- */
-
-/*!
- Finds the enum type node that has \a enumValue as one of
- its enum values and returns a pointer to it. Returns 0 if
- no enum type node is found that has \a enumValue as one
- of its values.
- */
-const EnumNode *Aggregate::findEnumNodeForValue(const QString &enumValue) const
-{
- for (const auto *node : m_enumChildren) {
- const EnumNode *en = static_cast<const EnumNode *>(node);
- if (en->hasItem(enumValue))
- return en;
- }
- return nullptr;
-}
-
-/*!
- Appends \a includeFile file to the list of include files.
- */
-void Aggregate::addIncludeFile(const QString &includeFile)
-{
- m_includeFiles.append(includeFile);
-}
-
-/*!
- Sets the list of include files to \a includeFiles.
- */
-void Aggregate::setIncludeFiles(const QStringList &includeFiles)
-{
- m_includeFiles = includeFiles;
-}
-
-/*!
- Compare \a f1 to \a f2 and return \c true if they have the same
- signature. Otherwise return \c false. They must have the same
- number of parameters, and all the parameter types must be the
- same. The functions must have the same constness and refness.
- This is a private function.
- */
-bool Aggregate::isSameSignature(const FunctionNode *f1, const FunctionNode *f2)
-{
- if (f1->parameters().count() != f2->parameters().count())
- return false;
- if (f1->isConst() != f2->isConst())
- return false;
- if (f1->isRef() != f2->isRef())
- return false;
- if (f1->isRefRef() != f2->isRefRef())
- return false;
-
- const Parameters &p1 = f1->parameters();
- const Parameters &p2 = f2->parameters();
- for (int i = 0; i < p1.count(); i++) {
- if (p1.at(i).hasType() && p2.at(i).hasType()) {
- QString t1 = p1.at(i).type();
- QString t2 = p2.at(i).type();
-
- if (t1.length() < t2.length())
- qSwap(t1, t2);
-
- /*
- ### hack for C++ to handle superfluous
- "Foo::" prefixes gracefully
- */
- if (t1 != t2 && t1 != (f2->parent()->name() + "::" + t2)) {
- // Accept a difference in the template parametters of the type if one
- // is omited (eg. "QAtomicInteger" == "QAtomicInteger<T>")
- auto ltLoc = t1.indexOf('<');
- auto gtLoc = t1.indexOf('>', ltLoc);
- if (ltLoc < 0 || gtLoc < ltLoc)
- return false;
- t1.remove(ltLoc, gtLoc - ltLoc + 1);
- if (t1 != t2)
- return false;
- }
- }
- }
- return true;
-}
-
-/*!
- This function is only called by addChild(), when the child is a
- FunctionNode. If the function map does not contain a function with
- the name in \a fn, \a fn is inserted into the function map. If the
- map already contains a function by that name, \a fn is appended to
- that function's linked list of overloads.
-
- \note A function's overloads appear in the linked list in the same
- order they were created. The first overload in the list is the first
- overload created. This order is maintained in the numbering of
- overloads. In other words, the first overload in the linked list has
- overload number 1, and the last overload in the list has overload
- number n, where n is the number of overloads not including the
- function in the function map.
-
- \not Adding a function increments the aggregate's function count,
- which is the total number of function nodes in the function map,
- including the overloads. The overloads are not inserted into the map
- but are in a linked list using the FunctionNode's m_nextOverload
- pointer.
-
- \note The function's overload number and overload flag are set in
- normalizeOverloads().
-
- \note This is a private function.
-
- \sa normalizeOverloads()
- */
-void Aggregate::addFunction(FunctionNode *fn)
-{
- auto it = m_functionMap.find(fn->name());
- if (it == m_functionMap.end())
- m_functionMap.insert(fn->name(), fn);
- else
- it.value()->appendOverload(fn);
- m_functionCount++;
-}
-
-/*!
- When an Aggregate adopts a function that is a child of
- another Aggregate, the function is inserted into this
- Aggregate's function map, if the function's name is not
- already in the function map. If the function's name is
- already in the function map, do nothing. The overload
- link is already set correctly.
-
- \note This is a private function.
- */
-void Aggregate::adoptFunction(FunctionNode *fn)
-{
- auto it = m_functionMap.find(fn->name());
- if (it == m_functionMap.end())
- m_functionMap.insert(fn->name(), fn);
- ++m_functionCount;
-}
-
-/*!
- Adds the \a child to this node's child map using \a title
- as the key. The \a child is not added to the child list
- again, because it is presumed to already be there. We just
- want to be able to find the child by its \a title.
- */
-void Aggregate::addChildByTitle(Node *child, const QString &title)
-{
- m_nonfunctionMap.insert(title, child);
-}
-
-/*!
- Adds the \a child to this node's child list and sets the child's
- parent pointer to this Aggregate. It then mounts the child with
- mountChild().
-
- The \a child is then added to this Aggregate's searchable maps
- and lists.
-
- \note This function does not test the child's parent pointer
- for null before changing it. If the child's parent pointer
- is not null, then it is being reparented. The child becomes
- a child of this Aggregate, but it also remains a child of
- the Aggregate that is it's old parent. But the child will
- only have one parent, and it will be this Aggregate. The is
- because of the \c relates command.
-
- \sa mountChild(), dismountChild()
- */
-void Aggregate::addChild(Node *child)
-{
- m_children.append(child);
- child->setParent(this);
- child->setOutputSubdirectory(this->outputSubdirectory());
- child->setUrl(QString());
- child->setIndexNodeFlag(isIndexNode());
-
- if (child->isFunction()) {
- addFunction(static_cast<FunctionNode *>(child));
- } else if (!child->name().isEmpty()) {
- m_nonfunctionMap.insert(child->name(), child);
- if (child->isEnumType())
- m_enumChildren.append(child);
- }
-}
-
-/*!
- This Aggregate becomes the adoptive parent of \a child. The
- \a child knows this Aggregate as its parent, but its former
- parent continues to have pointers to the child in its child
- list and in its searchable data structures. But the child is
- also added to the child list and searchable data structures
- of this Aggregate.
-
- The one caveat is that if the child being adopted is a function
- node, it's next overload pointer is not altered.
- */
-void Aggregate::adoptChild(Node *child)
-{
- if (child->parent() != this) {
- m_children.append(child);
- child->setParent(this);
- if (child->isFunction()) {
- adoptFunction(static_cast<FunctionNode *>(child));
- } else if (!child->name().isEmpty()) {
- m_nonfunctionMap.insert(child->name(), child);
- if (child->isEnumType())
- m_enumChildren.append(child);
- }
- if (child->isSharedCommentNode()) {
- SharedCommentNode *scn = static_cast<SharedCommentNode *>(child);
- for (Node *n : scn->collective())
- adoptChild(n);
- }
- }
-}
-
-/*!
- Recursively sets the output subdirectory for children
- */
-void Aggregate::setOutputSubdirectory(const QString &t)
-{
- Node::setOutputSubdirectory(t);
- for (auto *node : qAsConst(m_children))
- node->setOutputSubdirectory(t);
-}
-
-/*!
- If this node has a child that is a QML property or JS property
- named \a n, return a pointer to that child. Otherwise, return \nullptr.
- */
-QmlPropertyNode *Aggregate::hasQmlProperty(const QString &n) const
-{
- NodeType goal = Node::QmlProperty;
- if (isJsNode())
- goal = Node::JsProperty;
- for (auto *child : qAsConst(m_children)) {
- if (child->nodeType() == goal) {
- if (child->name() == n)
- return static_cast<QmlPropertyNode *>(child);
- }
- }
- return nullptr;
-}
-
-/*!
- If this node has a child that is a QML property or JS property
- named \a n and that also matches \a attached, return a pointer
- to that child.
- */
-QmlPropertyNode *Aggregate::hasQmlProperty(const QString &n, bool attached) const
-{
- NodeType goal = Node::QmlProperty;
- if (isJsNode())
- goal = Node::JsProperty;
- for (auto *child : qAsConst(m_children)) {
- if (child->nodeType() == goal) {
- if (child->name() == n && child->isAttached() == attached)
- return static_cast<QmlPropertyNode *>(child);
- }
- }
- return nullptr;
-}
-
-/*!
- The FunctionNode \a fn is assumed to be a member function
- of this Aggregate. The function's name is looked up in the
- Aggregate's function map. It should be found because it is
- assumed that \a fn is in this Aggregate's function map. But
- in case it is not found, \c false is returned.
-
- Normally, the name will be found in the function map, and
- the value of the iterator is used to get the value, which
- is a pointer to another FunctionNode, which is not itself
- an overload. If that function has a non-null overload
- pointer, true is returned. Otherwise false is returned.
-
- This is a convenience function that you should not need to
- use.
- */
-bool Aggregate::hasOverloads(const FunctionNode *fn) const
-{
- auto it = m_functionMap.find(fn->name());
- return (it == m_functionMap.end() ? false : (it.value()->nextOverload() != nullptr));
-}
-
-/*!
- Prints the inner node's list of children.
- For debugging only.
- */
-void Aggregate::printChildren(const QString &title)
-{
- qDebug() << title << name() << m_children.size();
- if (m_children.size() > 0) {
- for (int i = 0; i < m_children.size(); ++i) {
- Node *n = m_children.at(i);
- qDebug() << " CHILD:" << n->name() << n->nodeTypeString();
- }
- }
-}
-
-/*!
- Removes \a fn from this aggregate's function map. That's
- all it does. If \a fn is in the function map index and it
- has an overload, the value pointer in the function map
- index is set to the the overload pointer. If the function
- has no overload pointer, the function map entry is erased.
-
- \note When removing a function node from the function map,
- it is important to set the removed function node's next
- overload pointer to null because the function node might
- be added as a child to some other aggregate.
-
- \note This is a protected function.
- */
-void Aggregate::removeFunctionNode(FunctionNode *fn)
-{
- auto it = m_functionMap.find(fn->name());
- if (it != m_functionMap.end()) {
- if (it.value() == fn) {
- if (fn->nextOverload() != nullptr) {
- it.value() = fn->nextOverload();
- fn->setNextOverload(nullptr);
- fn->setOverloadNumber(0);
- } else {
- m_functionMap.erase(it);
- }
- } else {
- FunctionNode *current = it.value();
- while (current != nullptr) {
- if (current->nextOverload() == fn) {
- current->setNextOverload(fn->nextOverload());
- fn->setNextOverload(nullptr);
- fn->setOverloadNumber(0);
- break;
- }
- current = current->nextOverload();
- }
- }
- }
-}
-
-/*
- When deciding whether to include a function in the function
- index, if the function is marked private, don't include it.
- If the function is marked obsolete, don't include it. If the
- function is marked internal, don't include it. Or if the
- function is a destructor or any kind of constructor, don't
- include it. Otherwise include it.
- */
-static bool keep(FunctionNode *fn)
-{
- if (fn->isPrivate() || fn->isObsolete() || fn->isInternal() || fn->isSomeCtor() || fn->isDtor())
- return false;
- return true;
-}
-
-/*!
- Insert all functions declared in this aggregate into the
- \a functionIndex. Call the function recursively for each
- child that is an aggregate.
-
- Only include functions that are in the public API and
- that are not constructors or destructors.
- */
-void Aggregate::findAllFunctions(NodeMapMap &functionIndex)
-{
- for (auto it = m_functionMap.constBegin(); it != m_functionMap.constEnd(); ++it) {
- FunctionNode *fn = it.value();
- if (keep(fn))
- functionIndex[fn->name()].insert(fn->parent()->fullDocumentName(), fn);
- fn = fn->nextOverload();
- while (fn != nullptr) {
- if (keep(fn))
- functionIndex[fn->name()].insert(fn->parent()->fullDocumentName(), fn);
- fn = fn->nextOverload();
- }
- }
- for (Node *node : qAsConst(m_children)) {
- if (node->isAggregate() && !node->isPrivate())
- static_cast<Aggregate *>(node)->findAllFunctions(functionIndex);
- }
-}
-
-/*!
- For each child of this node, if the child is a namespace node,
- insert the child into the \a namespaces multimap. If the child
- is an aggregate, call this function recursively for that child.
-
- When the function called with the root node of a tree, it finds
- all the namespace nodes in that tree and inserts them into the
- \a namespaces multimap.
-
- The root node of a tree is a namespace, but it has no name, so
- it is not inserted into the map. So, if this function is called
- for each tree in the qdoc database, it finds all the namespace
- nodes in the database.
- */
-void Aggregate::findAllNamespaces(NodeMultiMap &namespaces)
-{
- for (auto *node : qAsConst(m_children)) {
- if (node->isAggregate() && !node->isPrivate()) {
- if (node->isNamespace() && !node->name().isEmpty())
- namespaces.insert(node->name(), node);
- static_cast<Aggregate *>(node)->findAllNamespaces(namespaces);
- }
- }
-}
-
-/*!
- Returns true if this aggregate contains at least one child
- that is marked obsolete. Otherwise returns false.
- */
-bool Aggregate::hasObsoleteMembers() const
-{
- for (const auto *node : m_children) {
- if (!node->isPrivate() && node->isObsolete()) {
- if (node->isFunction() || node->isProperty() || node->isEnumType() || node->isTypedef()
- || node->isTypeAlias() || node->isVariable() || node->isQmlProperty()
- || node->isJsProperty())
- return true;
- }
- }
- return false;
-}
-
-/*!
- Finds all the obsolete C++ classes and QML types in this
- aggregate and all the C++ classes and QML types with obsolete
- members, and inserts them into maps used elsewhere for
- generating documentation.
- */
-void Aggregate::findAllObsoleteThings()
-{
- for (auto *node : qAsConst(m_children)) {
- if (!node->isPrivate()) {
- QString name = node->name();
- if (node->isObsolete()) {
- if (node->isClassNode())
- QDocDatabase::obsoleteClasses().insert(node->qualifyCppName(), node);
- else if (node->isQmlType() || node->isJsType())
- QDocDatabase::obsoleteQmlTypes().insert(node->qualifyQmlName(), node);
- } else if (node->isClassNode()) {
- Aggregate *a = static_cast<Aggregate *>(node);
- if (a->hasObsoleteMembers())
- QDocDatabase::classesWithObsoleteMembers().insert(node->qualifyCppName(), node);
- } else if (node->isQmlType() || node->isJsType()) {
- Aggregate *a = static_cast<Aggregate *>(node);
- if (a->hasObsoleteMembers())
- QDocDatabase::qmlTypesWithObsoleteMembers().insert(node->qualifyQmlName(),
- node);
- } else if (node->isAggregate()) {
- static_cast<Aggregate *>(node)->findAllObsoleteThings();
- }
- }
- }
-}
-
-/*!
- Finds all the C++ classes, QML types, JS types, QML and JS
- basic types, and examples in this aggregate and inserts them
- into appropriate maps for later use in generating documentation.
- */
-void Aggregate::findAllClasses()
-{
- for (auto *node : qAsConst(m_children)) {
- if (!node->isPrivate() && !node->isInternal() && !node->isDontDocument()
- && node->tree()->camelCaseModuleName() != QString("QDoc")) {
- if (node->isClassNode()) {
- QDocDatabase::cppClasses().insert(node->qualifyCppName().toLower(), node);
- } else if (node->isQmlType() || node->isQmlBasicType() || node->isJsType()
- || node->isJsBasicType()) {
- QString name = node->unqualifyQmlName();
- QDocDatabase::qmlTypes().insert(name, node);
- // also add to the QML basic type map
- if (node->isQmlBasicType() || node->isJsBasicType())
- QDocDatabase::qmlBasicTypes().insert(name, node);
- } else if (node->isExample()) {
- // use the module index title as key for the example map
- QString title = node->tree()->indexTitle();
- if (!QDocDatabase::examples().contains(title, node))
- QDocDatabase::examples().insert(title, node);
- } else if (node->isAggregate()) {
- static_cast<Aggregate *>(node)->findAllClasses();
- }
- }
- }
-}
-
-/*!
- Find all the attribution pages in this node and insert them
- into \a attributions.
- */
-void Aggregate::findAllAttributions(NodeMultiMap &attributions)
-{
- for (auto *node : qAsConst(m_children)) {
- if (!node->isPrivate()) {
- if (node->pageType() == Node::AttributionPage)
- attributions.insert(node->tree()->indexTitle(), node);
- else if (node->isAggregate())
- static_cast<Aggregate *>(node)->findAllAttributions(attributions);
- }
- }
-}
-
-/*!
- Finds all the nodes in this node where a \e{since} command appeared
- in the qdoc comment and sorts them into maps according to the kind
- of node.
-
- This function is used for generating the "New Classes... in x.y"
- section on the \e{What's New in Qt x.y} page.
- */
-void Aggregate::findAllSince()
-{
- for (auto *node : qAsConst(m_children)) {
- QString sinceString = node->since();
- // Insert a new entry into each map for each new since string found.
- if (!node->isPrivate() && !sinceString.isEmpty()) {
- auto nsmap = QDocDatabase::newSinceMaps().find(sinceString);
- if (nsmap == QDocDatabase::newSinceMaps().end())
- nsmap = QDocDatabase::newSinceMaps().insert(sinceString, {});
-
- auto ncmap = QDocDatabase::newClassMaps().find(sinceString);
- if (ncmap == QDocDatabase::newClassMaps().end())
- ncmap = QDocDatabase::newClassMaps().insert(sinceString, {});
-
- auto nqcmap = QDocDatabase::newQmlTypeMaps().find(sinceString);
- if (nqcmap == QDocDatabase::newQmlTypeMaps().end())
- nqcmap = QDocDatabase::newQmlTypeMaps().insert(sinceString, {});
-
- if (node->isFunction()) {
- // Insert functions into the general since map.
- FunctionNode *fn = static_cast<FunctionNode *>(node);
- if (!fn->isObsolete() && !fn->isSomeCtor() && !fn->isDtor())
- nsmap.value().insert(fn->name(), fn);
- } else if (node->isClassNode()) {
- // Insert classes into the since and class maps.
- QString name = node->qualifyWithParentName();
- nsmap.value().insert(name, node);
- ncmap.value().insert(name, node);
- } else if (node->isQmlType() || node->isJsType()) {
- // Insert QML elements into the since and element maps.
- QString name = node->qualifyWithParentName();
- nsmap.value().insert(name, node);
- nqcmap.value().insert(name, node);
- } else if (node->isQmlProperty() || node->isJsProperty()) {
- // Insert QML properties into the since map.
- nsmap.value().insert(node->name(), node);
- } else {
- // Insert external documents into the general since map.
- QString name = node->qualifyWithParentName();
- nsmap.value().insert(name, node);
- }
- }
- // Recursively find child nodes with since commands.
- if (node->isAggregate())
- static_cast<Aggregate *>(node)->findAllSince();
- }
-}
-
-/*!
- For each QML Type node in this aggregate's children, if the
- QML type has a QML base type name but its QML base type node
- pointer is nullptr, use the QML base type name to look up the
- base type node. If the node is found, set the node's QML base
- type node pointer to that node.
- */
-void Aggregate::resolveQmlInheritance()
-{
- NodeMap previousSearches;
- // Do we need recursion?
- for (auto *child : qAsConst(m_children)) {
- if (!child->isQmlType() && !child->isJsType())
- continue;
- QmlTypeNode *type = static_cast<QmlTypeNode *>(child);
- if (type->qmlBaseNode() != nullptr)
- continue;
- if (type->qmlBaseName().isEmpty())
- continue;
- QmlTypeNode *base = static_cast<QmlTypeNode *>(previousSearches.value(type->qmlBaseName()));
- if (base && (base != type)) {
- type->setQmlBaseNode(base);
- QmlTypeNode::addInheritedBy(base, type);
- } else {
- if (!type->importList().isEmpty()) {
- const ImportList &imports = type->importList();
- for (int i = 0; i < imports.size(); ++i) {
- base = QDocDatabase::qdocDB()->findQmlType(imports[i], type->qmlBaseName());
- if (base && (base != type)) {
- if (base->logicalModuleVersion()[0] != imports[i].m_majorMinorVersion[0])
- base = nullptr; // Safeguard for QTBUG-53529
- break;
- }
- }
- }
- if (base == nullptr) {
- base = QDocDatabase::qdocDB()->findQmlType(QString(), type->qmlBaseName());
- }
- if (base && (base != type)) {
- type->setQmlBaseNode(base);
- QmlTypeNode::addInheritedBy(base, type);
- previousSearches.insert(type->qmlBaseName(), base);
- }
- }
- }
-}
-
-/*!
- Returns a word representing the kind of Aggregate this node is.
- Currently only works for class, struct, and union, but it can
- easily be extended. If \a cap is true, the word is capitalised.
- */
-QString Aggregate::typeWord(bool cap) const
-{
- if (cap) {
- switch (nodeType()) {
- case Node::Class:
- return QLatin1String("Class");
- case Node::Struct:
- return QLatin1String("Struct");
- case Node::Union:
- return QLatin1String("Union");
- default:
- break;
- }
- } else {
- switch (nodeType()) {
- case Node::Class:
- return QLatin1String("class");
- case Node::Struct:
- return QLatin1String("struct");
- case Node::Union:
- return QLatin1String("union");
- default:
- break;
- }
- }
- return QString();
-}
-
-/*! \fn int Aggregate::count() const
- Returns the number of children in the child list.
- */
-
-/*! \fn const NodeList &Aggregate::childNodes() const
- Returns a const reference to the child list.
- */
-
-/*! \fn NodeList::ConstIterator Aggregate::constBegin() const
- Returns a const iterator pointing at the beginning of the child list.
- */
-
-/*! \fn NodeList::ConstIterator Aggregate::constEnd() const
- Returns a const iterator pointing at the end of the child list.
- */
-
-/*! \fn const QStringList &Aggregate::includeFiles() const
- This function returns a const reference to a list of strings, but
- I no longer know what they are.
- */
-
-/*! \fn QmlTypeNode *Aggregate::qmlBaseNode() const
- If this Aggregate is a QmlTypeNode, this function returns a pointer to
- the QmlTypeNode that is its base type. Otherwise it returns \c nullptr.
- A QmlTypeNode doesn't always have a base type, so even when this Aggregate
- is aQmlTypeNode, the pointer returned can be \c nullptr.
- */
-
-/*! \fn FunctionMap &Aggregate::functionMap()
- Returns a reference to this Aggregate's function map, which
- is a map of all the children of this Aggregate that are
- FunctionNodes.
- */
-
-/*! \fn void Aggregate::appendToRelatedByProxy(const NodeList &t)
- Appends the list of node pointers to the list of elements that are
- related to this Aggregate but are documented in a different module.
-
- \sa relatedByProxy()
- */
-
-/*! \fn NodeList &Aggregate::relatedByProxy()
- Returns a reference to a list of node pointers where each element
- points to a node in an index file for some other module, such that
- whatever the node represents was documented in that other module,
- but it is related to this Aggregate, so when the documentation for
- this Aggregate is written, it will contain links to elements in the
- other module.
- */
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/aggregate.h b/src/qdoc/aggregate.h
deleted file mode 100644
index 6a720a368..000000000
--- a/src/qdoc/aggregate.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef AGGREGATE_H
-#define AGGREGATE_H
-
-#include "pagenode.h"
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qstringlist.h>
-
-QT_BEGIN_NAMESPACE
-
-class FunctionNode;
-class QmlTypeNode;
-class QmlPropertyNode;
-
-class Aggregate : public PageNode
-{
-public:
- Node *findChildNode(const QString &name, Node::Genus genus, int findFlags = 0) const;
- Node *findNonfunctionChild(const QString &name, bool (Node::*)() const);
- void findChildren(const QString &name, NodeVector &nodes) const;
- FunctionNode *findFunctionChild(const QString &name, const Parameters &parameters);
- FunctionNode *findFunctionChild(const FunctionNode *clone);
-
- void normalizeOverloads();
- void markUndocumentedChildrenInternal();
-
- bool isAggregate() const override { return true; }
- const EnumNode *findEnumNodeForValue(const QString &enumValue) const;
-
- int count() const { return m_children.size(); }
- const NodeList &childNodes() const { return m_children; }
- const NodeList &nonfunctionList();
- NodeList::ConstIterator constBegin() const { return m_children.constBegin(); }
- NodeList::ConstIterator constEnd() const { return m_children.constEnd(); }
-
- void addIncludeFile(const QString &includeFile);
- void setIncludeFiles(const QStringList &includeFiles);
- const QStringList &includeFiles() const { return m_includeFiles; }
-
- QStringList primaryKeys();
- QmlPropertyNode *hasQmlProperty(const QString &) const;
- QmlPropertyNode *hasQmlProperty(const QString &, bool attached) const;
- virtual QmlTypeNode *qmlBaseNode() const { return nullptr; }
- void addChildByTitle(Node *child, const QString &title);
- void printChildren(const QString &title);
- void addChild(Node *child);
- void adoptChild(Node *child);
- void setOutputSubdirectory(const QString &t) override;
-
- FunctionMap &functionMap() { return m_functionMap; }
- void findAllFunctions(NodeMapMap &functionIndex);
- void findAllNamespaces(NodeMultiMap &namespaces);
- void findAllAttributions(NodeMultiMap &attributions);
- bool hasObsoleteMembers() const;
- void findAllObsoleteThings();
- void findAllClasses();
- void findAllSince();
- void resolveQmlInheritance();
- bool hasOverloads(const FunctionNode *fn) const;
- void appendToRelatedByProxy(const NodeList &t) { m_relatedByProxy.append(t); }
- NodeList &relatedByProxy() { return m_relatedByProxy; }
- QString typeWord(bool cap) const;
-
-protected:
- Aggregate(NodeType type, Aggregate *parent, const QString &name)
- : PageNode(type, parent, name), m_functionCount(0)
- {
- }
- ~Aggregate() override;
- void removeFunctionNode(FunctionNode *fn);
-
-private:
- friend class Node;
- void addFunction(FunctionNode *fn);
- void adoptFunction(FunctionNode *fn);
- static bool isSameSignature(const FunctionNode *f1, const FunctionNode *f2);
-
-protected:
- NodeList m_children {};
- NodeList m_relatedByProxy {};
- int m_functionCount {};
- FunctionMap m_functionMap {};
-
-private:
- QStringList m_includeFiles {};
- NodeList m_enumChildren {};
- NodeMultiMap m_nonfunctionMap {};
- NodeList m_nonfunctionList {};
-};
-
-QT_END_NAMESPACE
-
-#endif // AGGREGATE_H
diff --git a/src/qdoc/atom.cpp b/src/qdoc/atom.cpp
deleted file mode 100644
index f0a7c63f2..000000000
--- a/src/qdoc/atom.cpp
+++ /dev/null
@@ -1,483 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "atom.h"
-
-#include "location.h"
-#include "proxynode.h"
-#include "qdocdatabase.h"
-
-#include <QtCore/qregularexpression.h>
-
-#include <cstdio>
-
-QT_BEGIN_NAMESPACE
-
-/*! \class Atom
- \brief The Atom class is the fundamental unit for representing
- documents internally.
-
- Atoms have a \i type and are completed by a \i string whose
- meaning depends on the \i type. For example, the string
- \quotation
- \i italic text looks nicer than \bold bold text
- \endquotation
- is represented by the following atoms:
- \quotation
- (FormattingLeft, ATOM_FORMATTING_ITALIC)
- (String, "italic")
- (FormattingRight, ATOM_FORMATTING_ITALIC)
- (String, " text is more attractive than ")
- (FormattingLeft, ATOM_FORMATTING_BOLD)
- (String, "bold")
- (FormattingRight, ATOM_FORMATTING_BOLD)
- (String, " text")
- \endquotation
-
- \also Text
-*/
-
-/*! \enum Atom::AtomType
-
- \value AnnotatedList
- \value AutoLink
- \value BaseName
- \value BriefLeft
- \value BriefRight
- \value C
- \value CaptionLeft
- \value CaptionRight
- \value Code
- \value CodeBad
- \value CodeNew
- \value CodeOld
- \value CodeQuoteArgument
- \value CodeQuoteCommand
- \value DivLeft
- \value DivRight
- \value EndQmlText
- \value ExampleFileLink
- \value ExampleImageLink
- \value FormatElse
- \value FormatEndif
- \value FormatIf
- \value FootnoteLeft
- \value FootnoteRight
- \value FormattingLeft
- \value FormattingRight
- \value GeneratedList
- \value Image
- \value ImageText
- \value ImportantNote
- \value InlineImage
- \value JavaScript
- \value EndJavaScript
- \value Keyword
- \value LineBreak
- \value Link
- \value LinkNode
- \value ListLeft
- \value ListItemNumber
- \value ListTagLeft
- \value ListTagRight
- \value ListItemLeft
- \value ListItemRight
- \value ListRight
- \value NavAutoLink
- \value NavLink
- \value Nop
- \value Note
- \value ParaLeft
- \value ParaRight
- \value Qml
- \value QmlText
- \value QuotationLeft
- \value QuotationRight
- \value RawString
- \value SectionLeft
- \value SectionRight
- \value SectionHeadingLeft
- \value SectionHeadingRight
- \value SidebarLeft
- \value SidebarRight
- \value SinceList
- \value SinceTagLeft
- \value SinceTagRight
- \value String
- \value TableLeft
- \value TableRight
- \value TableHeaderLeft
- \value TableHeaderRight
- \value TableRowLeft
- \value TableRowRight
- \value TableItemLeft
- \value TableItemRight
- \value TableOfContents
- \value Target
- \value UnhandledFormat
- \value UnknownCommand
-*/
-
-QString Atom::noError_ = QString();
-
-static const struct
-{
- const char *english;
- int no;
-} atms[] = { { "AnnotatedList", Atom::AnnotatedList },
- { "AutoLink", Atom::AutoLink },
- { "BaseName", Atom::BaseName },
- { "br", Atom::BR },
- { "BriefLeft", Atom::BriefLeft },
- { "BriefRight", Atom::BriefRight },
- { "C", Atom::C },
- { "CaptionLeft", Atom::CaptionLeft },
- { "CaptionRight", Atom::CaptionRight },
- { "Code", Atom::Code },
- { "CodeBad", Atom::CodeBad },
- { "CodeNew", Atom::CodeNew },
- { "CodeOld", Atom::CodeOld },
- { "CodeQuoteArgument", Atom::CodeQuoteArgument },
- { "CodeQuoteCommand", Atom::CodeQuoteCommand },
- { "DivLeft", Atom::DivLeft },
- { "DivRight", Atom::DivRight },
- { "EndQmlText", Atom::EndQmlText },
- { "ExampleFileLink", Atom::ExampleFileLink },
- { "ExampleImageLink", Atom::ExampleImageLink },
- { "FootnoteLeft", Atom::FootnoteLeft },
- { "FootnoteRight", Atom::FootnoteRight },
- { "FormatElse", Atom::FormatElse },
- { "FormatEndif", Atom::FormatEndif },
- { "FormatIf", Atom::FormatIf },
- { "FormattingLeft", Atom::FormattingLeft },
- { "FormattingRight", Atom::FormattingRight },
- { "GeneratedList", Atom::GeneratedList },
- { "hr", Atom::HR },
- { "Image", Atom::Image },
- { "ImageText", Atom::ImageText },
- { "ImportantLeft", Atom::ImportantLeft },
- { "ImportantRight", Atom::ImportantRight },
- { "InlineImage", Atom::InlineImage },
- { "JavaScript", Atom::JavaScript },
- { "EndJavaScript", Atom::EndJavaScript },
- { "Keyword", Atom::Keyword },
- { "LegaleseLeft", Atom::LegaleseLeft },
- { "LegaleseRight", Atom::LegaleseRight },
- { "LineBreak", Atom::LineBreak },
- { "Link", Atom::Link },
- { "LinkNode", Atom::LinkNode },
- { "ListLeft", Atom::ListLeft },
- { "ListItemNumber", Atom::ListItemNumber },
- { "ListTagLeft", Atom::ListTagLeft },
- { "ListTagRight", Atom::ListTagRight },
- { "ListItemLeft", Atom::ListItemLeft },
- { "ListItemRight", Atom::ListItemRight },
- { "ListRight", Atom::ListRight },
- { "NavAutoLink", Atom::NavAutoLink },
- { "NavLink", Atom::NavLink },
- { "Nop", Atom::Nop },
- { "NoteLeft", Atom::NoteLeft },
- { "NoteRight", Atom::NoteRight },
- { "ParaLeft", Atom::ParaLeft },
- { "ParaRight", Atom::ParaRight },
- { "Qml", Atom::Qml },
- { "QmlText", Atom::QmlText },
- { "QuotationLeft", Atom::QuotationLeft },
- { "QuotationRight", Atom::QuotationRight },
- { "RawString", Atom::RawString },
- { "SectionLeft", Atom::SectionLeft },
- { "SectionRight", Atom::SectionRight },
- { "SectionHeadingLeft", Atom::SectionHeadingLeft },
- { "SectionHeadingRight", Atom::SectionHeadingRight },
- { "SidebarLeft", Atom::SidebarLeft },
- { "SidebarRight", Atom::SidebarRight },
- { "SinceList", Atom::SinceList },
- { "SinceTagLeft", Atom::SinceTagLeft },
- { "SinceTagRight", Atom::SinceTagRight },
- { "SnippetCommand", Atom::SnippetCommand },
- { "SnippetIdentifier", Atom::SnippetIdentifier },
- { "SnippetLocation", Atom::SnippetLocation },
- { "String", Atom::String },
- { "TableLeft", Atom::TableLeft },
- { "TableRight", Atom::TableRight },
- { "TableHeaderLeft", Atom::TableHeaderLeft },
- { "TableHeaderRight", Atom::TableHeaderRight },
- { "TableRowLeft", Atom::TableRowLeft },
- { "TableRowRight", Atom::TableRowRight },
- { "TableItemLeft", Atom::TableItemLeft },
- { "TableItemRight", Atom::TableItemRight },
- { "TableOfContents", Atom::TableOfContents },
- { "Target", Atom::Target },
- { "UnhandledFormat", Atom::UnhandledFormat },
- { "UnknownCommand", Atom::UnknownCommand },
- { nullptr, 0 } };
-
-/*! \fn Atom::Atom(AtomType type, const QString &string)
-
- Constructs an atom of the specified \a type with the single
- parameter \a string and does not put the new atom in a list.
-*/
-
-/*! \fn Atom::Atom(AtomType type, const QString &p1, const QString &p2)
-
- Constructs an atom of the specified \a type with the two
- parameters \a p1 and \a p2 and does not put the new atom
- in a list.
-*/
-
-/*! \fn Atom(Atom *previous, AtomType type, const QString &string)
-
- Constructs an atom of the specified \a type with the single
- parameter \a string and inserts the new atom into the list
- after the \a previous atom.
-*/
-
-/*! \fn Atom::Atom(Atom *previous, AtomType type, const QString &p1, const QString &p2)
-
- Constructs an atom of the specified \a type with the two
- parameters \a p1 and \a p2 and inserts the new atom into
- the list after the \a previous atom.
-*/
-
-/*! \fn void Atom::appendChar(QChar ch)
-
- Appends \a ch to the string parameter of this atom.
-
- \also string()
-*/
-
-/*! \fn void Atom::appendString(const QString &string)
-
- Appends \a string to the string parameter of this atom.
-
- \also string()
-*/
-
-/*! \fn void Atom::chopString()
-
- \also string()
-*/
-
-/*! \fn Atom *Atom::next()
- Return the next atom in the atom list.
- \also type(), string()
-*/
-
-/*!
- Return the next Atom in the list if it is of AtomType \a t.
- Otherwise return 0.
- */
-const Atom *Atom::next(AtomType t) const
-{
- return (next_ && (next_->type() == t)) ? next_ : nullptr;
-}
-
-/*!
- Return the next Atom in the list if it is of AtomType \a t
- and its string part is \a s. Otherwise return 0.
- */
-const Atom *Atom::next(AtomType t, const QString &s) const
-{
- return (next_ && (next_->type() == t) && (next_->string() == s)) ? next_ : nullptr;
-}
-
-/*! \fn const Atom *Atom::next() const
- Return the next atom in the atom list.
- \also type(), string()
-*/
-
-/*! \fn AtomType Atom::type() const
- Return the type of this atom.
- \also string(), next()
-*/
-
-/*!
- Return the type of this atom as a string. Return "Invalid" if
- type() returns an impossible value.
-
- This is only useful for debugging.
-
- \also type()
-*/
-QString Atom::typeString() const
-{
- static bool deja = false;
-
- if (!deja) {
- int i = 0;
- while (atms[i].english != nullptr) {
- if (atms[i].no != i)
- Location::internalError(
- QCoreApplication::translate("QDoc::Atom", "atom %1 missing").arg(i));
- ++i;
- }
- deja = true;
- }
-
- int i = static_cast<int>(type());
- if (i < 0 || i > static_cast<int>(Last))
- return QLatin1String("Invalid");
- return QLatin1String(atms[i].english);
-}
-
-/*! \fn const QString &Atom::string() const
-
- Returns the string parameter that together with the type
- characterizes this atom.
-
- \also type(), next()
-*/
-
-/*!
- Dumps this Atom to stderr in printer friendly form.
- */
-void Atom::dump() const
-{
- QString str = string();
- str.replace(QLatin1String("\\"), QLatin1String("\\\\"));
- str.replace(QLatin1String("\""), QLatin1String("\\\""));
- str.replace(QLatin1String("\n"), QLatin1String("\\n"));
- str.replace(QRegularExpression(QLatin1String("[^\x20-\x7e]")), QLatin1String("?"));
- if (!str.isEmpty())
- str = QLatin1String(" \"") + str + QLatin1Char('"');
- fprintf(stderr, " %-15s%s\n", typeString().toLatin1().data(), str.toLatin1().data());
-}
-
-/*!
- For a link atom, returns the string representing the link text
- if one exist in the list of atoms.
-*/
-QString Atom::linkText() const
-{
- Q_ASSERT(type_ == Atom::Link);
- QString result;
-
- if (next() && next()->string() == ATOM_FORMATTING_LINK) {
- auto *atom = next()->next();
- while (atom && atom->type() != Atom::FormattingRight) {
- result += atom->string();
- atom = atom->next();
- }
- return result;
- }
-
- return string();
-}
-
-/*!
- The only constructor for LinkAtom. It creates an Atom of
- type Atom::Link. \a p1 being the link target. \a p2 is the
- parameters in square brackets. Normally there is just one
- word in the square brackets, but there can be up to three
- words separated by spaces. The constructor splits \a p2 on
- the space character.
- */
-LinkAtom::LinkAtom(const QString &p1, const QString &p2)
- : Atom(Atom::Link, p1),
- resolved_(false),
- genus_(Node::DontCare),
- goal_(Node::NoType),
- domain_(nullptr),
- squareBracketParams_(p2)
-{
- // nada.
-}
-
-/*!
- This function resolves the parameters that were enclosed in
- square brackets. If the parameters have already been resolved,
- it does nothing and returns immediately.
- */
-void LinkAtom::resolveSquareBracketParams()
-{
- if (resolved_)
- return;
- const QStringList params = squareBracketParams_.toLower().split(QLatin1Char(' '));
- for (const auto &param : params) {
- if (!domain_) {
- domain_ = QDocDatabase::qdocDB()->findTree(param);
- if (domain_) {
- continue;
- }
- }
- if (goal_ == Node::NoType) {
- goal_ = Node::goal(param);
- if (goal_ != Node::NoType)
- continue;
- }
- if (param == "qml") {
- genus_ = Node::QML;
- continue;
- }
- if (param == "cpp") {
- genus_ = Node::CPP;
- continue;
- }
- if (param == "doc") {
- genus_ = Node::DOC;
- continue;
- }
- error_ = squareBracketParams_;
- break;
- }
- resolved_ = true;
-}
-
-/*!
- Standard copy constructor of LinkAtom \a t.
- */
-LinkAtom::LinkAtom(const LinkAtom &t)
- : Atom(Link, t.string()),
- resolved_(t.resolved_),
- genus_(t.genus_),
- goal_(t.goal_),
- domain_(t.domain_),
- error_(t.error_),
- squareBracketParams_(t.squareBracketParams_)
-{
- // nothing
-}
-
-/*!
- Special copy constructor of LinkAtom \a t, where
- where the new LinkAtom will not be the first one
- in the list.
- */
-LinkAtom::LinkAtom(Atom *previous, const LinkAtom &t)
- : Atom(previous, Link, t.string()),
- resolved_(t.resolved_),
- genus_(t.genus_),
- goal_(t.goal_),
- domain_(t.domain_),
- error_(t.error_),
- squareBracketParams_(t.squareBracketParams_)
-{
- previous->next_ = this;
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/atom.h b/src/qdoc/atom.h
deleted file mode 100644
index b6d1a8840..000000000
--- a/src/qdoc/atom.h
+++ /dev/null
@@ -1,259 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef ATOM_H
-#define ATOM_H
-
-#include "node.h"
-
-#include <QtCore/qdebug.h>
-#include <QtCore/qstringlist.h>
-
-QT_BEGIN_NAMESPACE
-
-class Tree;
-class LinkAtom;
-
-class Atom
-{
-public:
- enum AtomType {
- AnnotatedList,
- AutoLink,
- BaseName,
- BR,
- BriefLeft,
- BriefRight,
- C,
- CaptionLeft,
- CaptionRight,
- Code,
- CodeBad,
- CodeNew,
- CodeOld,
- CodeQuoteArgument,
- CodeQuoteCommand,
- DivLeft,
- DivRight,
- EndQmlText,
- ExampleFileLink,
- ExampleImageLink,
- FootnoteLeft,
- FootnoteRight,
- FormatElse,
- FormatEndif,
- FormatIf,
- FormattingLeft,
- FormattingRight,
- GeneratedList,
- HR,
- Image,
- ImageText,
- ImportantLeft,
- ImportantRight,
- InlineImage,
- JavaScript,
- EndJavaScript,
- Keyword,
- LegaleseLeft,
- LegaleseRight,
- LineBreak,
- Link,
- LinkNode,
- ListLeft,
- ListItemNumber,
- ListTagLeft,
- ListTagRight,
- ListItemLeft,
- ListItemRight,
- ListRight,
- NavAutoLink,
- NavLink,
- Nop,
- NoteLeft,
- NoteRight,
- ParaLeft,
- ParaRight,
- Qml,
- QmlText,
- QuotationLeft,
- QuotationRight,
- RawString,
- SectionLeft,
- SectionRight,
- SectionHeadingLeft,
- SectionHeadingRight,
- SidebarLeft,
- SidebarRight,
- SinceList,
- SinceTagLeft,
- SinceTagRight,
- SnippetCommand,
- SnippetIdentifier,
- SnippetLocation,
- String,
- TableLeft,
- TableRight,
- TableHeaderLeft,
- TableHeaderRight,
- TableRowLeft,
- TableRowRight,
- TableItemLeft,
- TableItemRight,
- TableOfContents,
- Target,
- UnhandledFormat,
- UnknownCommand,
- Last = UnknownCommand
- };
-
- friend class LinkAtom;
-
- explicit Atom(AtomType type, const QString &string = "") : type_(type), strs(string) {}
-
- Atom(AtomType type, const QString &p1, const QString &p2) : type_(type), strs(p1)
- {
- if (!p2.isEmpty())
- strs << p2;
- }
-
- Atom(Atom *previous, AtomType type, const QString &string)
- : next_(previous->next_), type_(type), strs(string)
- {
- previous->next_ = this;
- }
-
- Atom(Atom *previous, AtomType type, const QString &p1, const QString &p2)
- : next_(previous->next_), type_(type), strs(p1)
- {
- if (!p2.isEmpty())
- strs << p2;
- previous->next_ = this;
- }
-
- virtual ~Atom() = default;
-
- void appendChar(QChar ch) { strs[0] += ch; }
- void appendString(const QString &string) { strs[0] += string; }
- void chopString() { strs[0].chop(1); }
- void setString(const QString &string) { strs[0] = string; }
- Atom *next() { return next_; }
- void setNext(Atom *newNext) { next_ = newNext; }
-
- const Atom *next() const { return next_; }
- const Atom *next(AtomType t) const;
- const Atom *next(AtomType t, const QString &s) const;
- AtomType type() const { return type_; }
- QString typeString() const;
- const QString &string() const { return strs[0]; }
- const QString &string(int i) const { return strs[i]; }
- int count() const { return strs.size(); }
- void dump() const;
- QString linkText() const;
- const QStringList &strings() const { return strs; }
-
- virtual bool isLinkAtom() const { return false; }
- virtual Node::Genus genus() { return Node::DontCare; }
- virtual bool specifiesDomain() { return false; }
- virtual Tree *domain() { return nullptr; }
- virtual Node::NodeType goal() { return Node::NoType; }
- virtual const QString &error() { return noError_; }
- virtual void resolveSquareBracketParams() {}
-
-protected:
- static QString noError_;
- Atom *next_ = nullptr;
- AtomType type_;
- QStringList strs;
-};
-
-class LinkAtom : public Atom
-{
-public:
- LinkAtom(const QString &p1, const QString &p2);
- LinkAtom(const LinkAtom &t);
- LinkAtom(Atom *previous, const LinkAtom &t);
- ~LinkAtom() override = default;
-
- bool isLinkAtom() const override { return true; }
- Node::Genus genus() override
- {
- resolveSquareBracketParams();
- return genus_;
- }
- bool specifiesDomain() override
- {
- resolveSquareBracketParams();
- return (domain_ != nullptr);
- }
- Tree *domain() override
- {
- resolveSquareBracketParams();
- return domain_;
- }
- Node::NodeType goal() override
- {
- resolveSquareBracketParams();
- return goal_;
- }
- const QString &error() override { return error_; }
- void resolveSquareBracketParams() override;
-
-protected:
- bool resolved_;
- Node::Genus genus_;
- Node::NodeType goal_;
- Tree *domain_;
- QString error_;
- QString squareBracketParams_;
-};
-
-#define ATOM_FORMATTING_BOLD "bold"
-#define ATOM_FORMATTING_INDEX "index"
-#define ATOM_FORMATTING_ITALIC "italic"
-#define ATOM_FORMATTING_LINK "link"
-#define ATOM_FORMATTING_PARAMETER "parameter"
-#define ATOM_FORMATTING_SPAN "span "
-#define ATOM_FORMATTING_SUBSCRIPT "subscript"
-#define ATOM_FORMATTING_SUPERSCRIPT "superscript"
-#define ATOM_FORMATTING_TELETYPE "teletype"
-#define ATOM_FORMATTING_UICONTROL "uicontrol"
-#define ATOM_FORMATTING_UNDERLINE "underline"
-
-#define ATOM_LIST_BULLET "bullet"
-#define ATOM_LIST_TAG "tag"
-#define ATOM_LIST_VALUE "value"
-#define ATOM_LIST_LOWERALPHA "loweralpha"
-#define ATOM_LIST_LOWERROMAN "lowerroman"
-#define ATOM_LIST_NUMERIC "numeric"
-#define ATOM_LIST_UPPERALPHA "upperalpha"
-#define ATOM_LIST_UPPERROMAN "upperroman"
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/catch/CATCH_LICENSE.txt b/src/qdoc/catch/CATCH_LICENSE.txt
new file mode 100644
index 000000000..36b7cd93c
--- /dev/null
+++ b/src/qdoc/catch/CATCH_LICENSE.txt
@@ -0,0 +1,23 @@
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/src/qdoc/catch/CMakeLists.txt b/src/qdoc/catch/CMakeLists.txt
new file mode 100644
index 000000000..3f933a1dd
--- /dev/null
+++ b/src/qdoc/catch/CMakeLists.txt
@@ -0,0 +1,9 @@
+qt_internal_add_3rdparty_header_module(QDocCatchPrivate
+ EXTERNAL_HEADERS_DIR include
+)
+
+qt_internal_extend_target(QDocCatchPrivate
+ PUBLIC_INCLUDE_DIRECTORIES
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/QtQDocCatch>
+)
diff --git a/src/qdoc/catch/include/catch/catch.hpp b/src/qdoc/catch/include/catch/catch.hpp
new file mode 100644
index 000000000..9b309bddc
--- /dev/null
+++ b/src/qdoc/catch/include/catch/catch.hpp
@@ -0,0 +1,17976 @@
+/*
+ * Catch v2.13.10
+ * Generated: 2022-10-16 11:01:23.452308
+ * ----------------------------------------------------------
+ * This file has been merged from multiple headers. Please don't edit it directly
+ * Copyright (c) 2022 Two Blue Cubes Ltd. All rights reserved.
+ *
+ * Distributed under the Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ */
+#ifndef TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED
+#define TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED
+// start catch.hpp
+
+
+#define CATCH_VERSION_MAJOR 2
+#define CATCH_VERSION_MINOR 13
+#define CATCH_VERSION_PATCH 10
+
+#ifdef __clang__
+# pragma clang system_header
+#elif defined __GNUC__
+# pragma GCC system_header
+#endif
+
+// start catch_suppress_warnings.h
+
+#ifdef __clang__
+# ifdef __ICC // icpc defines the __clang__ macro
+# pragma warning(push)
+# pragma warning(disable: 161 1682)
+# else // __ICC
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wpadded"
+# pragma clang diagnostic ignored "-Wswitch-enum"
+# pragma clang diagnostic ignored "-Wcovered-switch-default"
+# endif
+#elif defined __GNUC__
+ // Because REQUIREs trigger GCC's -Wparentheses, and because still
+ // supported version of g++ have only buggy support for _Pragmas,
+ // Wparentheses have to be suppressed globally.
+# pragma GCC diagnostic ignored "-Wparentheses" // See #674 for details
+
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wunused-variable"
+# pragma GCC diagnostic ignored "-Wpadded"
+#endif
+// end catch_suppress_warnings.h
+#if defined(CATCH_CONFIG_MAIN) || defined(CATCH_CONFIG_RUNNER)
+# define CATCH_IMPL
+# define CATCH_CONFIG_ALL_PARTS
+#endif
+
+// In the impl file, we want to have access to all parts of the headers
+// Can also be used to sanely support PCHs
+#if defined(CATCH_CONFIG_ALL_PARTS)
+# define CATCH_CONFIG_EXTERNAL_INTERFACES
+# if defined(CATCH_CONFIG_DISABLE_MATCHERS)
+# undef CATCH_CONFIG_DISABLE_MATCHERS
+# endif
+# if !defined(CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER)
+# define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER
+# endif
+#endif
+
+#if !defined(CATCH_CONFIG_IMPL_ONLY)
+// start catch_platform.h
+
+// See e.g.:
+// https://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/TargetConditionals.h.auto.html
+#ifdef __APPLE__
+# include <TargetConditionals.h>
+# if (defined(TARGET_OS_OSX) && TARGET_OS_OSX == 1) || \
+ (defined(TARGET_OS_MAC) && TARGET_OS_MAC == 1)
+# define CATCH_PLATFORM_MAC
+# elif (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE == 1)
+# define CATCH_PLATFORM_IPHONE
+# endif
+
+#elif defined(linux) || defined(__linux) || defined(__linux__)
+# define CATCH_PLATFORM_LINUX
+
+#elif defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) || defined(__MINGW32__)
+# define CATCH_PLATFORM_WINDOWS
+#endif
+
+// end catch_platform.h
+
+#ifdef CATCH_IMPL
+# ifndef CLARA_CONFIG_MAIN
+# define CLARA_CONFIG_MAIN_NOT_DEFINED
+# define CLARA_CONFIG_MAIN
+# endif
+#endif
+
+// start catch_user_interfaces.h
+
+namespace Catch {
+ unsigned int rngSeed();
+}
+
+// end catch_user_interfaces.h
+// start catch_tag_alias_autoregistrar.h
+
+// start catch_common.h
+
+// start catch_compiler_capabilities.h
+
+// Detect a number of compiler features - by compiler
+// The following features are defined:
+//
+// CATCH_CONFIG_COUNTER : is the __COUNTER__ macro supported?
+// CATCH_CONFIG_WINDOWS_SEH : is Windows SEH supported?
+// CATCH_CONFIG_POSIX_SIGNALS : are POSIX signals supported?
+// CATCH_CONFIG_DISABLE_EXCEPTIONS : Are exceptions enabled?
+// ****************
+// Note to maintainers: if new toggles are added please document them
+// in configuration.md, too
+// ****************
+
+// In general each macro has a _NO_<feature name> form
+// (e.g. CATCH_CONFIG_NO_POSIX_SIGNALS) which disables the feature.
+// Many features, at point of detection, define an _INTERNAL_ macro, so they
+// can be combined, en-mass, with the _NO_ forms later.
+
+#ifdef __cplusplus
+
+# if (__cplusplus >= 201402L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201402L)
+# define CATCH_CPP14_OR_GREATER
+# endif
+
+# if (__cplusplus >= 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L)
+# define CATCH_CPP17_OR_GREATER
+# endif
+
+#endif
+
+// Only GCC compiler should be used in this block, so other compilers trying to
+// mask themselves as GCC should be ignored.
+#if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC) && !defined(__CUDACC__) && !defined(__LCC__)
+# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic push" )
+# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic pop" )
+
+# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__)
+
+#endif
+
+#if defined(__clang__)
+
+# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic push" )
+# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic pop" )
+
+// As of this writing, IBM XL's implementation of __builtin_constant_p has a bug
+// which results in calls to destructors being emitted for each temporary,
+// without a matching initialization. In practice, this can result in something
+// like `std::string::~string` being called on an uninitialized value.
+//
+// For example, this code will likely segfault under IBM XL:
+// ```
+// REQUIRE(std::string("12") + "34" == "1234")
+// ```
+//
+// Therefore, `CATCH_INTERNAL_IGNORE_BUT_WARN` is not implemented.
+# if !defined(__ibmxl__) && !defined(__CUDACC__)
+# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__) /* NOLINT(cppcoreguidelines-pro-type-vararg, hicpp-vararg) */
+# endif
+
+# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ _Pragma( "clang diagnostic ignored \"-Wexit-time-destructors\"" ) \
+ _Pragma( "clang diagnostic ignored \"-Wglobal-constructors\"")
+
+# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \
+ _Pragma( "clang diagnostic ignored \"-Wparentheses\"" )
+
+# define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS \
+ _Pragma( "clang diagnostic ignored \"-Wunused-variable\"" )
+
+# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
+ _Pragma( "clang diagnostic ignored \"-Wgnu-zero-variadic-macro-arguments\"" )
+
+# define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ _Pragma( "clang diagnostic ignored \"-Wunused-template\"" )
+
+#endif // __clang__
+
+////////////////////////////////////////////////////////////////////////////////
+// Assume that non-Windows platforms support posix signals by default
+#if !defined(CATCH_PLATFORM_WINDOWS)
+ #define CATCH_INTERNAL_CONFIG_POSIX_SIGNALS
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// We know some environments not to support full POSIX signals
+#if defined(__CYGWIN__) || defined(__QNX__) || defined(__EMSCRIPTEN__) || defined(__DJGPP__)
+ #define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS
+#endif
+
+#ifdef __OS400__
+# define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS
+# define CATCH_CONFIG_COLOUR_NONE
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// Android somehow still does not support std::to_string
+#if defined(__ANDROID__)
+# define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING
+# define CATCH_INTERNAL_CONFIG_ANDROID_LOGWRITE
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// Not all Windows environments support SEH properly
+#if defined(__MINGW32__)
+# define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// PS4
+#if defined(__ORBIS__)
+# define CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// Cygwin
+#ifdef __CYGWIN__
+
+// Required for some versions of Cygwin to declare gettimeofday
+// see: http://stackoverflow.com/questions/36901803/gettimeofday-not-declared-in-this-scope-cygwin
+# define _BSD_SOURCE
+// some versions of cygwin (most) do not support std::to_string. Use the libstd check.
+// https://gcc.gnu.org/onlinedocs/gcc-4.8.2/libstdc++/api/a01053_source.html line 2812-2813
+# if !((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
+ && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
+
+# define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING
+
+# endif
+#endif // __CYGWIN__
+
+////////////////////////////////////////////////////////////////////////////////
+// Visual C++
+#if defined(_MSC_VER)
+
+// Universal Windows platform does not support SEH
+// Or console colours (or console at all...)
+# if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP)
+# define CATCH_CONFIG_COLOUR_NONE
+# else
+# define CATCH_INTERNAL_CONFIG_WINDOWS_SEH
+# endif
+
+# if !defined(__clang__) // Handle Clang masquerading for msvc
+
+// MSVC traditional preprocessor needs some workaround for __VA_ARGS__
+// _MSVC_TRADITIONAL == 0 means new conformant preprocessor
+// _MSVC_TRADITIONAL == 1 means old traditional non-conformant preprocessor
+# if !defined(_MSVC_TRADITIONAL) || (defined(_MSVC_TRADITIONAL) && _MSVC_TRADITIONAL)
+# define CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+# endif // MSVC_TRADITIONAL
+
+// Only do this if we're not using clang on Windows, which uses `diagnostic push` & `diagnostic pop`
+# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION __pragma( warning(push) )
+# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION __pragma( warning(pop) )
+# endif // __clang__
+
+#endif // _MSC_VER
+
+#if defined(_REENTRANT) || defined(_MSC_VER)
+// Enable async processing, as -pthread is specified or no additional linking is required
+# define CATCH_INTERNAL_CONFIG_USE_ASYNC
+#endif // _MSC_VER
+
+////////////////////////////////////////////////////////////////////////////////
+// Check if we are compiled with -fno-exceptions or equivalent
+#if defined(__EXCEPTIONS) || defined(__cpp_exceptions) || defined(_CPPUNWIND)
+# define CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// DJGPP
+#ifdef __DJGPP__
+# define CATCH_INTERNAL_CONFIG_NO_WCHAR
+#endif // __DJGPP__
+
+////////////////////////////////////////////////////////////////////////////////
+// Embarcadero C++Build
+#if defined(__BORLANDC__)
+ #define CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+
+// Use of __COUNTER__ is suppressed during code analysis in
+// CLion/AppCode 2017.2.x and former, because __COUNTER__ is not properly
+// handled by it.
+// Otherwise all supported compilers support COUNTER macro,
+// but user still might want to turn it off
+#if ( !defined(__JETBRAINS_IDE__) || __JETBRAINS_IDE__ >= 20170300L )
+ #define CATCH_INTERNAL_CONFIG_COUNTER
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+
+// RTX is a special version of Windows that is real time.
+// This means that it is detected as Windows, but does not provide
+// the same set of capabilities as real Windows does.
+#if defined(UNDER_RTSS) || defined(RTX64_BUILD)
+ #define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH
+ #define CATCH_INTERNAL_CONFIG_NO_ASYNC
+ #define CATCH_CONFIG_COLOUR_NONE
+#endif
+
+#if !defined(_GLIBCXX_USE_C99_MATH_TR1)
+#define CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER
+#endif
+
+// Various stdlib support checks that require __has_include
+#if defined(__has_include)
+ // Check if string_view is available and usable
+ #if __has_include(<string_view>) && defined(CATCH_CPP17_OR_GREATER)
+ # define CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW
+ #endif
+
+ // Check if optional is available and usable
+ # if __has_include(<optional>) && defined(CATCH_CPP17_OR_GREATER)
+ # define CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL
+ # endif // __has_include(<optional>) && defined(CATCH_CPP17_OR_GREATER)
+
+ // Check if byte is available and usable
+ # if __has_include(<cstddef>) && defined(CATCH_CPP17_OR_GREATER)
+ # include <cstddef>
+ # if defined(__cpp_lib_byte) && (__cpp_lib_byte > 0)
+ # define CATCH_INTERNAL_CONFIG_CPP17_BYTE
+ # endif
+ # endif // __has_include(<cstddef>) && defined(CATCH_CPP17_OR_GREATER)
+
+ // Check if variant is available and usable
+ # if __has_include(<variant>) && defined(CATCH_CPP17_OR_GREATER)
+ # if defined(__clang__) && (__clang_major__ < 8)
+ // work around clang bug with libstdc++ https://bugs.llvm.org/show_bug.cgi?id=31852
+ // fix should be in clang 8, workaround in libstdc++ 8.2
+ # include <ciso646>
+ # if defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9)
+ # define CATCH_CONFIG_NO_CPP17_VARIANT
+ # else
+ # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT
+ # endif // defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9)
+ # else
+ # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT
+ # endif // defined(__clang__) && (__clang_major__ < 8)
+ # endif // __has_include(<variant>) && defined(CATCH_CPP17_OR_GREATER)
+#endif // defined(__has_include)
+
+#if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER)
+# define CATCH_CONFIG_COUNTER
+#endif
+#if defined(CATCH_INTERNAL_CONFIG_WINDOWS_SEH) && !defined(CATCH_CONFIG_NO_WINDOWS_SEH) && !defined(CATCH_CONFIG_WINDOWS_SEH) && !defined(CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH)
+# define CATCH_CONFIG_WINDOWS_SEH
+#endif
+// This is set by default, because we assume that unix compilers are posix-signal-compatible by default.
+#if defined(CATCH_INTERNAL_CONFIG_POSIX_SIGNALS) && !defined(CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_POSIX_SIGNALS)
+# define CATCH_CONFIG_POSIX_SIGNALS
+#endif
+// This is set by default, because we assume that compilers with no wchar_t support are just rare exceptions.
+#if !defined(CATCH_INTERNAL_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_WCHAR)
+# define CATCH_CONFIG_WCHAR
+#endif
+
+#if !defined(CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_CPP11_TO_STRING)
+# define CATCH_CONFIG_CPP11_TO_STRING
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_NO_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_CPP17_OPTIONAL)
+# define CATCH_CONFIG_CPP17_OPTIONAL
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_NO_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_CPP17_STRING_VIEW)
+# define CATCH_CONFIG_CPP17_STRING_VIEW
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_CPP17_VARIANT) && !defined(CATCH_CONFIG_NO_CPP17_VARIANT) && !defined(CATCH_CONFIG_CPP17_VARIANT)
+# define CATCH_CONFIG_CPP17_VARIANT
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_CPP17_BYTE) && !defined(CATCH_CONFIG_NO_CPP17_BYTE) && !defined(CATCH_CONFIG_CPP17_BYTE)
+# define CATCH_CONFIG_CPP17_BYTE
+#endif
+
+#if defined(CATCH_CONFIG_EXPERIMENTAL_REDIRECT)
+# define CATCH_INTERNAL_CONFIG_NEW_CAPTURE
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_NEW_CAPTURE) && !defined(CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NEW_CAPTURE)
+# define CATCH_CONFIG_NEW_CAPTURE
+#endif
+
+#if !defined(CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED) && !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+# define CATCH_CONFIG_DISABLE_EXCEPTIONS
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_NO_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_POLYFILL_ISNAN)
+# define CATCH_CONFIG_POLYFILL_ISNAN
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_USE_ASYNC) && !defined(CATCH_INTERNAL_CONFIG_NO_ASYNC) && !defined(CATCH_CONFIG_NO_USE_ASYNC) && !defined(CATCH_CONFIG_USE_ASYNC)
+# define CATCH_CONFIG_USE_ASYNC
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_ANDROID_LOGWRITE) && !defined(CATCH_CONFIG_NO_ANDROID_LOGWRITE) && !defined(CATCH_CONFIG_ANDROID_LOGWRITE)
+# define CATCH_CONFIG_ANDROID_LOGWRITE
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_NO_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_GLOBAL_NEXTAFTER)
+# define CATCH_CONFIG_GLOBAL_NEXTAFTER
+#endif
+
+// Even if we do not think the compiler has that warning, we still have
+// to provide a macro that can be used by the code.
+#if !defined(CATCH_INTERNAL_START_WARNINGS_SUPPRESSION)
+# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION
+#endif
+#if !defined(CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION)
+# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+#endif
+#if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS)
+# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS
+#endif
+#if !defined(CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS)
+# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS
+#endif
+#if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS)
+# define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS
+#endif
+#if !defined(CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS)
+# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS
+#endif
+
+// The goal of this macro is to avoid evaluation of the arguments, but
+// still have the compiler warn on problems inside...
+#if !defined(CATCH_INTERNAL_IGNORE_BUT_WARN)
+# define CATCH_INTERNAL_IGNORE_BUT_WARN(...)
+#endif
+
+#if defined(__APPLE__) && defined(__apple_build_version__) && (__clang_major__ < 10)
+# undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS
+#elif defined(__clang__) && (__clang_major__ < 5)
+# undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS
+#endif
+
+#if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS)
+# define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS
+#endif
+
+#if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+#define CATCH_TRY if ((true))
+#define CATCH_CATCH_ALL if ((false))
+#define CATCH_CATCH_ANON(type) if ((false))
+#else
+#define CATCH_TRY try
+#define CATCH_CATCH_ALL catch (...)
+#define CATCH_CATCH_ANON(type) catch (type)
+#endif
+
+#if defined(CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_NO_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR)
+#define CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#endif
+
+// end catch_compiler_capabilities.h
+#define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line
+#define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line )
+#ifdef CATCH_CONFIG_COUNTER
+# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __COUNTER__ )
+#else
+# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ )
+#endif
+
+#include <iosfwd>
+#include <string>
+#include <cstdint>
+
+// We need a dummy global operator<< so we can bring it into Catch namespace later
+struct Catch_global_namespace_dummy {};
+std::ostream& operator<<(std::ostream&, Catch_global_namespace_dummy);
+
+namespace Catch {
+
+ struct CaseSensitive { enum Choice {
+ Yes,
+ No
+ }; };
+
+ class NonCopyable {
+ NonCopyable( NonCopyable const& ) = delete;
+ NonCopyable( NonCopyable && ) = delete;
+ NonCopyable& operator = ( NonCopyable const& ) = delete;
+ NonCopyable& operator = ( NonCopyable && ) = delete;
+
+ protected:
+ NonCopyable();
+ virtual ~NonCopyable();
+ };
+
+ struct SourceLineInfo {
+
+ SourceLineInfo() = delete;
+ SourceLineInfo( char const* _file, std::size_t _line ) noexcept
+ : file( _file ),
+ line( _line )
+ {}
+
+ SourceLineInfo( SourceLineInfo const& other ) = default;
+ SourceLineInfo& operator = ( SourceLineInfo const& ) = default;
+ SourceLineInfo( SourceLineInfo&& ) noexcept = default;
+ SourceLineInfo& operator = ( SourceLineInfo&& ) noexcept = default;
+
+ bool empty() const noexcept { return file[0] == '\0'; }
+ bool operator == ( SourceLineInfo const& other ) const noexcept;
+ bool operator < ( SourceLineInfo const& other ) const noexcept;
+
+ char const* file;
+ std::size_t line;
+ };
+
+ std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info );
+
+ // Bring in operator<< from global namespace into Catch namespace
+ // This is necessary because the overload of operator<< above makes
+ // lookup stop at namespace Catch
+ using ::operator<<;
+
+ // Use this in variadic streaming macros to allow
+ // >> +StreamEndStop
+ // as well as
+ // >> stuff +StreamEndStop
+ struct StreamEndStop {
+ std::string operator+() const;
+ };
+ template<typename T>
+ T const& operator + ( T const& value, StreamEndStop ) {
+ return value;
+ }
+}
+
+#define CATCH_INTERNAL_LINEINFO \
+ ::Catch::SourceLineInfo( __FILE__, static_cast<std::size_t>( __LINE__ ) )
+
+// end catch_common.h
+namespace Catch {
+
+ struct RegistrarForTagAliases {
+ RegistrarForTagAliases( char const* alias, char const* tag, SourceLineInfo const& lineInfo );
+ };
+
+} // end namespace Catch
+
+#define CATCH_REGISTER_TAG_ALIAS( alias, spec ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ Catch::RegistrarForTagAliases INTERNAL_CATCH_UNIQUE_NAME( AutoRegisterTagAlias )( alias, spec, CATCH_INTERNAL_LINEINFO ); } \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+// end catch_tag_alias_autoregistrar.h
+// start catch_test_registry.h
+
+// start catch_interfaces_testcase.h
+
+#include <vector>
+
+namespace Catch {
+
+ class TestSpec;
+
+ struct ITestInvoker {
+ virtual void invoke () const = 0;
+ virtual ~ITestInvoker();
+ };
+
+ class TestCase;
+ struct IConfig;
+
+ struct ITestCaseRegistry {
+ virtual ~ITestCaseRegistry();
+ virtual std::vector<TestCase> const& getAllTests() const = 0;
+ virtual std::vector<TestCase> const& getAllTestsSorted( IConfig const& config ) const = 0;
+ };
+
+ bool isThrowSafe( TestCase const& testCase, IConfig const& config );
+ bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config );
+ std::vector<TestCase> filterTests( std::vector<TestCase> const& testCases, TestSpec const& testSpec, IConfig const& config );
+ std::vector<TestCase> const& getAllTestCasesSorted( IConfig const& config );
+
+}
+
+// end catch_interfaces_testcase.h
+// start catch_stringref.h
+
+#include <cstddef>
+#include <string>
+#include <iosfwd>
+#include <cassert>
+
+namespace Catch {
+
+ /// A non-owning string class (similar to the forthcoming std::string_view)
+ /// Note that, because a StringRef may be a substring of another string,
+ /// it may not be null terminated.
+ class StringRef {
+ public:
+ using size_type = std::size_t;
+ using const_iterator = const char*;
+
+ private:
+ static constexpr char const* const s_empty = "";
+
+ char const* m_start = s_empty;
+ size_type m_size = 0;
+
+ public: // construction
+ constexpr StringRef() noexcept = default;
+
+ StringRef( char const* rawChars ) noexcept;
+
+ constexpr StringRef( char const* rawChars, size_type size ) noexcept
+ : m_start( rawChars ),
+ m_size( size )
+ {}
+
+ StringRef( std::string const& stdString ) noexcept
+ : m_start( stdString.c_str() ),
+ m_size( stdString.size() )
+ {}
+
+ explicit operator std::string() const {
+ return std::string(m_start, m_size);
+ }
+
+ public: // operators
+ auto operator == ( StringRef const& other ) const noexcept -> bool;
+ auto operator != (StringRef const& other) const noexcept -> bool {
+ return !(*this == other);
+ }
+
+ auto operator[] ( size_type index ) const noexcept -> char {
+ assert(index < m_size);
+ return m_start[index];
+ }
+
+ public: // named queries
+ constexpr auto empty() const noexcept -> bool {
+ return m_size == 0;
+ }
+ constexpr auto size() const noexcept -> size_type {
+ return m_size;
+ }
+
+ // Returns the current start pointer. If the StringRef is not
+ // null-terminated, throws std::domain_exception
+ auto c_str() const -> char const*;
+
+ public: // substrings and searches
+ // Returns a substring of [start, start + length).
+ // If start + length > size(), then the substring is [start, size()).
+ // If start > size(), then the substring is empty.
+ auto substr( size_type start, size_type length ) const noexcept -> StringRef;
+
+ // Returns the current start pointer. May not be null-terminated.
+ auto data() const noexcept -> char const*;
+
+ constexpr auto isNullTerminated() const noexcept -> bool {
+ return m_start[m_size] == '\0';
+ }
+
+ public: // iterators
+ constexpr const_iterator begin() const { return m_start; }
+ constexpr const_iterator end() const { return m_start + m_size; }
+ };
+
+ auto operator += ( std::string& lhs, StringRef const& sr ) -> std::string&;
+ auto operator << ( std::ostream& os, StringRef const& sr ) -> std::ostream&;
+
+ constexpr auto operator "" _sr( char const* rawChars, std::size_t size ) noexcept -> StringRef {
+ return StringRef( rawChars, size );
+ }
+} // namespace Catch
+
+constexpr auto operator "" _catch_sr( char const* rawChars, std::size_t size ) noexcept -> Catch::StringRef {
+ return Catch::StringRef( rawChars, size );
+}
+
+// end catch_stringref.h
+// start catch_preprocessor.hpp
+
+
+#define CATCH_RECURSION_LEVEL0(...) __VA_ARGS__
+#define CATCH_RECURSION_LEVEL1(...) CATCH_RECURSION_LEVEL0(CATCH_RECURSION_LEVEL0(CATCH_RECURSION_LEVEL0(__VA_ARGS__)))
+#define CATCH_RECURSION_LEVEL2(...) CATCH_RECURSION_LEVEL1(CATCH_RECURSION_LEVEL1(CATCH_RECURSION_LEVEL1(__VA_ARGS__)))
+#define CATCH_RECURSION_LEVEL3(...) CATCH_RECURSION_LEVEL2(CATCH_RECURSION_LEVEL2(CATCH_RECURSION_LEVEL2(__VA_ARGS__)))
+#define CATCH_RECURSION_LEVEL4(...) CATCH_RECURSION_LEVEL3(CATCH_RECURSION_LEVEL3(CATCH_RECURSION_LEVEL3(__VA_ARGS__)))
+#define CATCH_RECURSION_LEVEL5(...) CATCH_RECURSION_LEVEL4(CATCH_RECURSION_LEVEL4(CATCH_RECURSION_LEVEL4(__VA_ARGS__)))
+
+#ifdef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define INTERNAL_CATCH_EXPAND_VARGS(...) __VA_ARGS__
+// MSVC needs more evaluations
+#define CATCH_RECURSION_LEVEL6(...) CATCH_RECURSION_LEVEL5(CATCH_RECURSION_LEVEL5(CATCH_RECURSION_LEVEL5(__VA_ARGS__)))
+#define CATCH_RECURSE(...) CATCH_RECURSION_LEVEL6(CATCH_RECURSION_LEVEL6(__VA_ARGS__))
+#else
+#define CATCH_RECURSE(...) CATCH_RECURSION_LEVEL5(__VA_ARGS__)
+#endif
+
+#define CATCH_REC_END(...)
+#define CATCH_REC_OUT
+
+#define CATCH_EMPTY()
+#define CATCH_DEFER(id) id CATCH_EMPTY()
+
+#define CATCH_REC_GET_END2() 0, CATCH_REC_END
+#define CATCH_REC_GET_END1(...) CATCH_REC_GET_END2
+#define CATCH_REC_GET_END(...) CATCH_REC_GET_END1
+#define CATCH_REC_NEXT0(test, next, ...) next CATCH_REC_OUT
+#define CATCH_REC_NEXT1(test, next) CATCH_DEFER ( CATCH_REC_NEXT0 ) ( test, next, 0)
+#define CATCH_REC_NEXT(test, next) CATCH_REC_NEXT1(CATCH_REC_GET_END test, next)
+
+#define CATCH_REC_LIST0(f, x, peek, ...) , f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1) ) ( f, peek, __VA_ARGS__ )
+#define CATCH_REC_LIST1(f, x, peek, ...) , f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST0) ) ( f, peek, __VA_ARGS__ )
+#define CATCH_REC_LIST2(f, x, peek, ...) f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1) ) ( f, peek, __VA_ARGS__ )
+
+#define CATCH_REC_LIST0_UD(f, userdata, x, peek, ...) , f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1_UD) ) ( f, userdata, peek, __VA_ARGS__ )
+#define CATCH_REC_LIST1_UD(f, userdata, x, peek, ...) , f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST0_UD) ) ( f, userdata, peek, __VA_ARGS__ )
+#define CATCH_REC_LIST2_UD(f, userdata, x, peek, ...) f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1_UD) ) ( f, userdata, peek, __VA_ARGS__ )
+
+// Applies the function macro `f` to each of the remaining parameters, inserts commas between the results,
+// and passes userdata as the first parameter to each invocation,
+// e.g. CATCH_REC_LIST_UD(f, x, a, b, c) evaluates to f(x, a), f(x, b), f(x, c)
+#define CATCH_REC_LIST_UD(f, userdata, ...) CATCH_RECURSE(CATCH_REC_LIST2_UD(f, userdata, __VA_ARGS__, ()()(), ()()(), ()()(), 0))
+
+#define CATCH_REC_LIST(f, ...) CATCH_RECURSE(CATCH_REC_LIST2(f, __VA_ARGS__, ()()(), ()()(), ()()(), 0))
+
+#define INTERNAL_CATCH_EXPAND1(param) INTERNAL_CATCH_EXPAND2(param)
+#define INTERNAL_CATCH_EXPAND2(...) INTERNAL_CATCH_NO## __VA_ARGS__
+#define INTERNAL_CATCH_DEF(...) INTERNAL_CATCH_DEF __VA_ARGS__
+#define INTERNAL_CATCH_NOINTERNAL_CATCH_DEF
+#define INTERNAL_CATCH_STRINGIZE(...) INTERNAL_CATCH_STRINGIZE2(__VA_ARGS__)
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define INTERNAL_CATCH_STRINGIZE2(...) #__VA_ARGS__
+#define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param))
+#else
+// MSVC is adding extra space and needs another indirection to expand INTERNAL_CATCH_NOINTERNAL_CATCH_DEF
+#define INTERNAL_CATCH_STRINGIZE2(...) INTERNAL_CATCH_STRINGIZE3(__VA_ARGS__)
+#define INTERNAL_CATCH_STRINGIZE3(...) #__VA_ARGS__
+#define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) (INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param)) + 1)
+#endif
+
+#define INTERNAL_CATCH_MAKE_NAMESPACE2(...) ns_##__VA_ARGS__
+#define INTERNAL_CATCH_MAKE_NAMESPACE(name) INTERNAL_CATCH_MAKE_NAMESPACE2(name)
+
+#define INTERNAL_CATCH_REMOVE_PARENS(...) INTERNAL_CATCH_EXPAND1(INTERNAL_CATCH_DEF __VA_ARGS__)
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) decltype(get_wrapper<INTERNAL_CATCH_REMOVE_PARENS_GEN(__VA_ARGS__)>())
+#define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__))
+#else
+#define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) INTERNAL_CATCH_EXPAND_VARGS(decltype(get_wrapper<INTERNAL_CATCH_REMOVE_PARENS_GEN(__VA_ARGS__)>()))
+#define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__)))
+#endif
+
+#define INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(...)\
+ CATCH_REC_LIST(INTERNAL_CATCH_MAKE_TYPE_LIST,__VA_ARGS__)
+
+#define INTERNAL_CATCH_REMOVE_PARENS_1_ARG(_0) INTERNAL_CATCH_REMOVE_PARENS(_0)
+#define INTERNAL_CATCH_REMOVE_PARENS_2_ARG(_0, _1) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_1_ARG(_1)
+#define INTERNAL_CATCH_REMOVE_PARENS_3_ARG(_0, _1, _2) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_2_ARG(_1, _2)
+#define INTERNAL_CATCH_REMOVE_PARENS_4_ARG(_0, _1, _2, _3) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_3_ARG(_1, _2, _3)
+#define INTERNAL_CATCH_REMOVE_PARENS_5_ARG(_0, _1, _2, _3, _4) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_4_ARG(_1, _2, _3, _4)
+#define INTERNAL_CATCH_REMOVE_PARENS_6_ARG(_0, _1, _2, _3, _4, _5) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_5_ARG(_1, _2, _3, _4, _5)
+#define INTERNAL_CATCH_REMOVE_PARENS_7_ARG(_0, _1, _2, _3, _4, _5, _6) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_6_ARG(_1, _2, _3, _4, _5, _6)
+#define INTERNAL_CATCH_REMOVE_PARENS_8_ARG(_0, _1, _2, _3, _4, _5, _6, _7) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_7_ARG(_1, _2, _3, _4, _5, _6, _7)
+#define INTERNAL_CATCH_REMOVE_PARENS_9_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_8_ARG(_1, _2, _3, _4, _5, _6, _7, _8)
+#define INTERNAL_CATCH_REMOVE_PARENS_10_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_9_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9)
+#define INTERNAL_CATCH_REMOVE_PARENS_11_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_10_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10)
+
+#define INTERNAL_CATCH_VA_NARGS_IMPL(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N
+
+#define INTERNAL_CATCH_TYPE_GEN\
+ template<typename...> struct TypeList {};\
+ template<typename...Ts>\
+ constexpr auto get_wrapper() noexcept -> TypeList<Ts...> { return {}; }\
+ template<template<typename...> class...> struct TemplateTypeList{};\
+ template<template<typename...> class...Cs>\
+ constexpr auto get_wrapper() noexcept -> TemplateTypeList<Cs...> { return {}; }\
+ template<typename...>\
+ struct append;\
+ template<typename...>\
+ struct rewrap;\
+ template<template<typename...> class, typename...>\
+ struct create;\
+ template<template<typename...> class, typename>\
+ struct convert;\
+ \
+ template<typename T> \
+ struct append<T> { using type = T; };\
+ template< template<typename...> class L1, typename...E1, template<typename...> class L2, typename...E2, typename...Rest>\
+ struct append<L1<E1...>, L2<E2...>, Rest...> { using type = typename append<L1<E1...,E2...>, Rest...>::type; };\
+ template< template<typename...> class L1, typename...E1, typename...Rest>\
+ struct append<L1<E1...>, TypeList<mpl_::na>, Rest...> { using type = L1<E1...>; };\
+ \
+ template< template<typename...> class Container, template<typename...> class List, typename...elems>\
+ struct rewrap<TemplateTypeList<Container>, List<elems...>> { using type = TypeList<Container<elems...>>; };\
+ template< template<typename...> class Container, template<typename...> class List, class...Elems, typename...Elements>\
+ struct rewrap<TemplateTypeList<Container>, List<Elems...>, Elements...> { using type = typename append<TypeList<Container<Elems...>>, typename rewrap<TemplateTypeList<Container>, Elements...>::type>::type; };\
+ \
+ template<template <typename...> class Final, template< typename...> class...Containers, typename...Types>\
+ struct create<Final, TemplateTypeList<Containers...>, TypeList<Types...>> { using type = typename append<Final<>, typename rewrap<TemplateTypeList<Containers>, Types...>::type...>::type; };\
+ template<template <typename...> class Final, template <typename...> class List, typename...Ts>\
+ struct convert<Final, List<Ts...>> { using type = typename append<Final<>,TypeList<Ts>...>::type; };
+
+#define INTERNAL_CATCH_NTTP_1(signature, ...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)> struct Nttp{};\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ constexpr auto get_wrapper() noexcept -> Nttp<__VA_ARGS__> { return {}; } \
+ template<template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class...> struct NttpTemplateTypeList{};\
+ template<template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class...Cs>\
+ constexpr auto get_wrapper() noexcept -> NttpTemplateTypeList<Cs...> { return {}; } \
+ \
+ template< template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class Container, template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class List, INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ struct rewrap<NttpTemplateTypeList<Container>, List<__VA_ARGS__>> { using type = TypeList<Container<__VA_ARGS__>>; };\
+ template< template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class Container, template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class List, INTERNAL_CATCH_REMOVE_PARENS(signature), typename...Elements>\
+ struct rewrap<NttpTemplateTypeList<Container>, List<__VA_ARGS__>, Elements...> { using type = typename append<TypeList<Container<__VA_ARGS__>>, typename rewrap<NttpTemplateTypeList<Container>, Elements...>::type>::type; };\
+ template<template <typename...> class Final, template<INTERNAL_CATCH_REMOVE_PARENS(signature)> class...Containers, typename...Types>\
+ struct create<Final, NttpTemplateTypeList<Containers...>, TypeList<Types...>> { using type = typename append<Final<>, typename rewrap<NttpTemplateTypeList<Containers>, Types...>::type...>::type; };
+
+#define INTERNAL_CATCH_DECLARE_SIG_TEST0(TestName)
+#define INTERNAL_CATCH_DECLARE_SIG_TEST1(TestName, signature)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ static void TestName()
+#define INTERNAL_CATCH_DECLARE_SIG_TEST_X(TestName, signature, ...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ static void TestName()
+
+#define INTERNAL_CATCH_DEFINE_SIG_TEST0(TestName)
+#define INTERNAL_CATCH_DEFINE_SIG_TEST1(TestName, signature)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ static void TestName()
+#define INTERNAL_CATCH_DEFINE_SIG_TEST_X(TestName, signature,...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ static void TestName()
+
+#define INTERNAL_CATCH_NTTP_REGISTER0(TestFunc, signature)\
+ template<typename Type>\
+ void reg_test(TypeList<Type>, Catch::NameAndTags nameAndTags)\
+ {\
+ Catch::AutoReg( Catch::makeTestInvoker(&TestFunc<Type>), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), nameAndTags);\
+ }
+
+#define INTERNAL_CATCH_NTTP_REGISTER(TestFunc, signature, ...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ void reg_test(Nttp<__VA_ARGS__>, Catch::NameAndTags nameAndTags)\
+ {\
+ Catch::AutoReg( Catch::makeTestInvoker(&TestFunc<__VA_ARGS__>), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), nameAndTags);\
+ }
+
+#define INTERNAL_CATCH_NTTP_REGISTER_METHOD0(TestName, signature, ...)\
+ template<typename Type>\
+ void reg_test(TypeList<Type>, Catch::StringRef className, Catch::NameAndTags nameAndTags)\
+ {\
+ Catch::AutoReg( Catch::makeTestInvoker(&TestName<Type>::test), CATCH_INTERNAL_LINEINFO, className, nameAndTags);\
+ }
+
+#define INTERNAL_CATCH_NTTP_REGISTER_METHOD(TestName, signature, ...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)>\
+ void reg_test(Nttp<__VA_ARGS__>, Catch::StringRef className, Catch::NameAndTags nameAndTags)\
+ {\
+ Catch::AutoReg( Catch::makeTestInvoker(&TestName<__VA_ARGS__>::test), CATCH_INTERNAL_LINEINFO, className, nameAndTags);\
+ }
+
+#define INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD0(TestName, ClassName)
+#define INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD1(TestName, ClassName, signature)\
+ template<typename TestType> \
+ struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName)<TestType> { \
+ void test();\
+ }
+
+#define INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X(TestName, ClassName, signature, ...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)> \
+ struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName)<__VA_ARGS__> { \
+ void test();\
+ }
+
+#define INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD0(TestName)
+#define INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD1(TestName, signature)\
+ template<typename TestType> \
+ void INTERNAL_CATCH_MAKE_NAMESPACE(TestName)::TestName<TestType>::test()
+#define INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X(TestName, signature, ...)\
+ template<INTERNAL_CATCH_REMOVE_PARENS(signature)> \
+ void INTERNAL_CATCH_MAKE_NAMESPACE(TestName)::TestName<__VA_ARGS__>::test()
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define INTERNAL_CATCH_NTTP_0
+#define INTERNAL_CATCH_NTTP_GEN(...) INTERNAL_CATCH_VA_NARGS_IMPL(__VA_ARGS__, INTERNAL_CATCH_NTTP_1(__VA_ARGS__), INTERNAL_CATCH_NTTP_1(__VA_ARGS__), INTERNAL_CATCH_NTTP_1(__VA_ARGS__), INTERNAL_CATCH_NTTP_1(__VA_ARGS__), INTERNAL_CATCH_NTTP_1(__VA_ARGS__), INTERNAL_CATCH_NTTP_1( __VA_ARGS__), INTERNAL_CATCH_NTTP_1( __VA_ARGS__), INTERNAL_CATCH_NTTP_1( __VA_ARGS__), INTERNAL_CATCH_NTTP_1( __VA_ARGS__),INTERNAL_CATCH_NTTP_1( __VA_ARGS__), INTERNAL_CATCH_NTTP_0)
+#define INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD(TestName, ...) INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD1, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD0)(TestName, __VA_ARGS__)
+#define INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD(TestName, ClassName, ...) INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD1, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD0)(TestName, ClassName, __VA_ARGS__)
+#define INTERNAL_CATCH_NTTP_REG_METHOD_GEN(TestName, ...) INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD0, INTERNAL_CATCH_NTTP_REGISTER_METHOD0)(TestName, __VA_ARGS__)
+#define INTERNAL_CATCH_NTTP_REG_GEN(TestFunc, ...) INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER0, INTERNAL_CATCH_NTTP_REGISTER0)(TestFunc, __VA_ARGS__)
+#define INTERNAL_CATCH_DEFINE_SIG_TEST(TestName, ...) INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X,INTERNAL_CATCH_DEFINE_SIG_TEST_X,INTERNAL_CATCH_DEFINE_SIG_TEST1, INTERNAL_CATCH_DEFINE_SIG_TEST0)(TestName, __VA_ARGS__)
+#define INTERNAL_CATCH_DECLARE_SIG_TEST(TestName, ...) INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DECLARE_SIG_TEST_X,INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X,INTERNAL_CATCH_DECLARE_SIG_TEST_X,INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST1, INTERNAL_CATCH_DECLARE_SIG_TEST0)(TestName, __VA_ARGS__)
+#define INTERNAL_CATCH_REMOVE_PARENS_GEN(...) INTERNAL_CATCH_VA_NARGS_IMPL(__VA_ARGS__, INTERNAL_CATCH_REMOVE_PARENS_11_ARG,INTERNAL_CATCH_REMOVE_PARENS_10_ARG,INTERNAL_CATCH_REMOVE_PARENS_9_ARG,INTERNAL_CATCH_REMOVE_PARENS_8_ARG,INTERNAL_CATCH_REMOVE_PARENS_7_ARG,INTERNAL_CATCH_REMOVE_PARENS_6_ARG,INTERNAL_CATCH_REMOVE_PARENS_5_ARG,INTERNAL_CATCH_REMOVE_PARENS_4_ARG,INTERNAL_CATCH_REMOVE_PARENS_3_ARG,INTERNAL_CATCH_REMOVE_PARENS_2_ARG,INTERNAL_CATCH_REMOVE_PARENS_1_ARG)(__VA_ARGS__)
+#else
+#define INTERNAL_CATCH_NTTP_0(signature)
+#define INTERNAL_CATCH_NTTP_GEN(...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL(__VA_ARGS__, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_1,INTERNAL_CATCH_NTTP_1, INTERNAL_CATCH_NTTP_0)( __VA_ARGS__))
+#define INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD(TestName, ...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD1, INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD0)(TestName, __VA_ARGS__))
+#define INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD(TestName, ClassName, ...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X,INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD_X, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD1, INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD0)(TestName, ClassName, __VA_ARGS__))
+#define INTERNAL_CATCH_NTTP_REG_METHOD_GEN(TestName, ...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD, INTERNAL_CATCH_NTTP_REGISTER_METHOD0, INTERNAL_CATCH_NTTP_REGISTER_METHOD0)(TestName, __VA_ARGS__))
+#define INTERNAL_CATCH_NTTP_REG_GEN(TestFunc, ...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER, INTERNAL_CATCH_NTTP_REGISTER0, INTERNAL_CATCH_NTTP_REGISTER0)(TestFunc, __VA_ARGS__))
+#define INTERNAL_CATCH_DEFINE_SIG_TEST(TestName, ...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X,INTERNAL_CATCH_DEFINE_SIG_TEST_X,INTERNAL_CATCH_DEFINE_SIG_TEST1, INTERNAL_CATCH_DEFINE_SIG_TEST0)(TestName, __VA_ARGS__))
+#define INTERNAL_CATCH_DECLARE_SIG_TEST(TestName, ...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL( "dummy", __VA_ARGS__, INTERNAL_CATCH_DECLARE_SIG_TEST_X,INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DEFINE_SIG_TEST_X,INTERNAL_CATCH_DECLARE_SIG_TEST_X,INTERNAL_CATCH_DECLARE_SIG_TEST_X, INTERNAL_CATCH_DECLARE_SIG_TEST1, INTERNAL_CATCH_DECLARE_SIG_TEST0)(TestName, __VA_ARGS__))
+#define INTERNAL_CATCH_REMOVE_PARENS_GEN(...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_VA_NARGS_IMPL(__VA_ARGS__, INTERNAL_CATCH_REMOVE_PARENS_11_ARG,INTERNAL_CATCH_REMOVE_PARENS_10_ARG,INTERNAL_CATCH_REMOVE_PARENS_9_ARG,INTERNAL_CATCH_REMOVE_PARENS_8_ARG,INTERNAL_CATCH_REMOVE_PARENS_7_ARG,INTERNAL_CATCH_REMOVE_PARENS_6_ARG,INTERNAL_CATCH_REMOVE_PARENS_5_ARG,INTERNAL_CATCH_REMOVE_PARENS_4_ARG,INTERNAL_CATCH_REMOVE_PARENS_3_ARG,INTERNAL_CATCH_REMOVE_PARENS_2_ARG,INTERNAL_CATCH_REMOVE_PARENS_1_ARG)(__VA_ARGS__))
+#endif
+
+// end catch_preprocessor.hpp
+// start catch_meta.hpp
+
+
+#include <type_traits>
+
+namespace Catch {
+ template<typename T>
+ struct always_false : std::false_type {};
+
+ template <typename> struct true_given : std::true_type {};
+ struct is_callable_tester {
+ template <typename Fun, typename... Args>
+ true_given<decltype(std::declval<Fun>()(std::declval<Args>()...))> static test(int);
+ template <typename...>
+ std::false_type static test(...);
+ };
+
+ template <typename T>
+ struct is_callable;
+
+ template <typename Fun, typename... Args>
+ struct is_callable<Fun(Args...)> : decltype(is_callable_tester::test<Fun, Args...>(0)) {};
+
+#if defined(__cpp_lib_is_invocable) && __cpp_lib_is_invocable >= 201703
+ // std::result_of is deprecated in C++17 and removed in C++20. Hence, it is
+ // replaced with std::invoke_result here.
+ template <typename Func, typename... U>
+ using FunctionReturnType = std::remove_reference_t<std::remove_cv_t<std::invoke_result_t<Func, U...>>>;
+#else
+ // Keep ::type here because we still support C++11
+ template <typename Func, typename... U>
+ using FunctionReturnType = typename std::remove_reference<typename std::remove_cv<typename std::result_of<Func(U...)>::type>::type>::type;
+#endif
+
+} // namespace Catch
+
+namespace mpl_{
+ struct na;
+}
+
+// end catch_meta.hpp
+namespace Catch {
+
+template<typename C>
+class TestInvokerAsMethod : public ITestInvoker {
+ void (C::*m_testAsMethod)();
+public:
+ TestInvokerAsMethod( void (C::*testAsMethod)() ) noexcept : m_testAsMethod( testAsMethod ) {}
+
+ void invoke() const override {
+ C obj;
+ (obj.*m_testAsMethod)();
+ }
+};
+
+auto makeTestInvoker( void(*testAsFunction)() ) noexcept -> ITestInvoker*;
+
+template<typename C>
+auto makeTestInvoker( void (C::*testAsMethod)() ) noexcept -> ITestInvoker* {
+ return new(std::nothrow) TestInvokerAsMethod<C>( testAsMethod );
+}
+
+struct NameAndTags {
+ NameAndTags( StringRef const& name_ = StringRef(), StringRef const& tags_ = StringRef() ) noexcept;
+ StringRef name;
+ StringRef tags;
+};
+
+struct AutoReg : NonCopyable {
+ AutoReg( ITestInvoker* invoker, SourceLineInfo const& lineInfo, StringRef const& classOrMethod, NameAndTags const& nameAndTags ) noexcept;
+ ~AutoReg();
+};
+
+} // end namespace Catch
+
+#if defined(CATCH_CONFIG_DISABLE)
+ #define INTERNAL_CATCH_TESTCASE_NO_REGISTRATION( TestName, ... ) \
+ static void TestName()
+ #define INTERNAL_CATCH_TESTCASE_METHOD_NO_REGISTRATION( TestName, ClassName, ... ) \
+ namespace{ \
+ struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName) { \
+ void test(); \
+ }; \
+ } \
+ void TestName::test()
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION_2( TestName, TestFunc, Name, Tags, Signature, ... ) \
+ INTERNAL_CATCH_DEFINE_SIG_TEST(TestFunc, INTERNAL_CATCH_REMOVE_PARENS(Signature))
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION_2( TestNameClass, TestName, ClassName, Name, Tags, Signature, ... ) \
+ namespace{ \
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName) { \
+ INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD(TestName, ClassName, INTERNAL_CATCH_REMOVE_PARENS(Signature));\
+ } \
+ } \
+ INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD(TestName, INTERNAL_CATCH_REMOVE_PARENS(Signature))
+
+ #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(Name, Tags, ...) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, typename TestType, __VA_ARGS__ )
+ #else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(Name, Tags, ...) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, typename TestType, __VA_ARGS__ ) )
+ #endif
+
+ #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(Name, Tags, Signature, ...) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, Signature, __VA_ARGS__ )
+ #else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(Name, Tags, Signature, ...) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, Signature, __VA_ARGS__ ) )
+ #endif
+
+ #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION( ClassName, Name, Tags,... ) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_C_L_A_S_S_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ) , ClassName, Name, Tags, typename T, __VA_ARGS__ )
+ #else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION( ClassName, Name, Tags,... ) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_C_L_A_S_S_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ) , ClassName, Name, Tags, typename T, __VA_ARGS__ ) )
+ #endif
+
+ #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION( ClassName, Name, Tags, Signature, ... ) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_C_L_A_S_S_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ) , ClassName, Name, Tags, Signature, __VA_ARGS__ )
+ #else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION( ClassName, Name, Tags, Signature, ... ) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_C_L_A_S_S_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ) , ClassName, Name, Tags, Signature, __VA_ARGS__ ) )
+ #endif
+#endif
+
+ ///////////////////////////////////////////////////////////////////////////////
+ #define INTERNAL_CATCH_TESTCASE2( TestName, ... ) \
+ static void TestName(); \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( Catch::makeTestInvoker( &TestName ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), Catch::NameAndTags{ __VA_ARGS__ } ); } /* NOLINT */ \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ static void TestName()
+ #define INTERNAL_CATCH_TESTCASE( ... ) \
+ INTERNAL_CATCH_TESTCASE2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ), __VA_ARGS__ )
+
+ ///////////////////////////////////////////////////////////////////////////////
+ #define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, ... ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( Catch::makeTestInvoker( &QualifiedMethod ), CATCH_INTERNAL_LINEINFO, "&" #QualifiedMethod, Catch::NameAndTags{ __VA_ARGS__ } ); } /* NOLINT */ \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+ ///////////////////////////////////////////////////////////////////////////////
+ #define INTERNAL_CATCH_TEST_CASE_METHOD2( TestName, ClassName, ... )\
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ \
+ struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName) { \
+ void test(); \
+ }; \
+ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( Catch::makeTestInvoker( &TestName::test ), CATCH_INTERNAL_LINEINFO, #ClassName, Catch::NameAndTags{ __VA_ARGS__ } ); /* NOLINT */ \
+ } \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ void TestName::test()
+ #define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, ... ) \
+ INTERNAL_CATCH_TEST_CASE_METHOD2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ), ClassName, __VA_ARGS__ )
+
+ ///////////////////////////////////////////////////////////////////////////////
+ #define INTERNAL_CATCH_REGISTER_TESTCASE( Function, ... ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( Catch::makeTestInvoker( Function ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), Catch::NameAndTags{ __VA_ARGS__ } ); /* NOLINT */ \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+ ///////////////////////////////////////////////////////////////////////////////
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_2(TestName, TestFunc, Name, Tags, Signature, ... )\
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ INTERNAL_CATCH_DECLARE_SIG_TEST(TestFunc, INTERNAL_CATCH_REMOVE_PARENS(Signature));\
+ namespace {\
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){\
+ INTERNAL_CATCH_TYPE_GEN\
+ INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature))\
+ INTERNAL_CATCH_NTTP_REG_GEN(TestFunc,INTERNAL_CATCH_REMOVE_PARENS(Signature))\
+ template<typename...Types> \
+ struct TestName{\
+ TestName(){\
+ int index = 0; \
+ constexpr char const* tmpl_types[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, __VA_ARGS__)};\
+ using expander = int[];\
+ (void)expander{(reg_test(Types{}, Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index]), Tags } ), index++)... };/* NOLINT */ \
+ }\
+ };\
+ static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
+ TestName<INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(__VA_ARGS__)>();\
+ return 0;\
+ }();\
+ }\
+ }\
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ INTERNAL_CATCH_DEFINE_SIG_TEST(TestFunc,INTERNAL_CATCH_REMOVE_PARENS(Signature))
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE(Name, Tags, ...) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, typename TestType, __VA_ARGS__ )
+#else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE(Name, Tags, ...) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, typename TestType, __VA_ARGS__ ) )
+#endif
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG(Name, Tags, Signature, ...) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, Signature, __VA_ARGS__ )
+#else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG(Name, Tags, Signature, ...) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, Signature, __VA_ARGS__ ) )
+#endif
+
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE2(TestName, TestFuncName, Name, Tags, Signature, TmplTypes, TypesList) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ template<typename TestType> static void TestFuncName(); \
+ namespace {\
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName) { \
+ INTERNAL_CATCH_TYPE_GEN \
+ INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature)) \
+ template<typename... Types> \
+ struct TestName { \
+ void reg_tests() { \
+ int index = 0; \
+ using expander = int[]; \
+ constexpr char const* tmpl_types[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TmplTypes))};\
+ constexpr char const* types_list[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TypesList))};\
+ constexpr auto num_types = sizeof(types_list) / sizeof(types_list[0]);\
+ (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestFuncName<Types> ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + "<" + std::string(types_list[index % num_types]) + ">", Tags } ), index++)... };/* NOLINT */\
+ } \
+ }; \
+ static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){ \
+ using TestInit = typename create<TestName, decltype(get_wrapper<INTERNAL_CATCH_REMOVE_PARENS(TmplTypes)>()), TypeList<INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(INTERNAL_CATCH_REMOVE_PARENS(TypesList))>>::type; \
+ TestInit t; \
+ t.reg_tests(); \
+ return 0; \
+ }(); \
+ } \
+ } \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ template<typename TestType> \
+ static void TestFuncName()
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE(Name, Tags, ...)\
+ INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE2(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, typename T,__VA_ARGS__)
+#else
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE(Name, Tags, ...)\
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, typename T, __VA_ARGS__ ) )
+#endif
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG(Name, Tags, Signature, ...)\
+ INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE2(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, Signature, __VA_ARGS__)
+#else
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG(Name, Tags, Signature, ...)\
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, Signature, __VA_ARGS__ ) )
+#endif
+
+ #define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_2(TestName, TestFunc, Name, Tags, TmplList)\
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ template<typename TestType> static void TestFunc(); \
+ namespace {\
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){\
+ INTERNAL_CATCH_TYPE_GEN\
+ template<typename... Types> \
+ struct TestName { \
+ void reg_tests() { \
+ int index = 0; \
+ using expander = int[]; \
+ (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestFunc<Types> ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), Catch::NameAndTags{ Name " - " + std::string(INTERNAL_CATCH_STRINGIZE(TmplList)) + " - " + std::to_string(index), Tags } ), index++)... };/* NOLINT */\
+ } \
+ };\
+ static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){ \
+ using TestInit = typename convert<TestName, TmplList>::type; \
+ TestInit t; \
+ t.reg_tests(); \
+ return 0; \
+ }(); \
+ }}\
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ template<typename TestType> \
+ static void TestFunc()
+
+ #define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE(Name, Tags, TmplList) \
+ INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), Name, Tags, TmplList )
+
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_2( TestNameClass, TestName, ClassName, Name, Tags, Signature, ... ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ namespace {\
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){ \
+ INTERNAL_CATCH_TYPE_GEN\
+ INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature))\
+ INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD(TestName, ClassName, INTERNAL_CATCH_REMOVE_PARENS(Signature));\
+ INTERNAL_CATCH_NTTP_REG_METHOD_GEN(TestName, INTERNAL_CATCH_REMOVE_PARENS(Signature))\
+ template<typename...Types> \
+ struct TestNameClass{\
+ TestNameClass(){\
+ int index = 0; \
+ constexpr char const* tmpl_types[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, __VA_ARGS__)};\
+ using expander = int[];\
+ (void)expander{(reg_test(Types{}, #ClassName, Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index]), Tags } ), index++)... };/* NOLINT */ \
+ }\
+ };\
+ static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
+ TestNameClass<INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(__VA_ARGS__)>();\
+ return 0;\
+ }();\
+ }\
+ }\
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD(TestName, INTERNAL_CATCH_REMOVE_PARENS(Signature))
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( ClassName, Name, Tags,... ) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_C_L_A_S_S_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ) , ClassName, Name, Tags, typename T, __VA_ARGS__ )
+#else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( ClassName, Name, Tags,... ) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_C_L_A_S_S_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ) , ClassName, Name, Tags, typename T, __VA_ARGS__ ) )
+#endif
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( ClassName, Name, Tags, Signature, ... ) \
+ INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_C_L_A_S_S_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ) , ClassName, Name, Tags, Signature, __VA_ARGS__ )
+#else
+ #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( ClassName, Name, Tags, Signature, ... ) \
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_C_L_A_S_S_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ) , ClassName, Name, Tags, Signature, __VA_ARGS__ ) )
+#endif
+
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2(TestNameClass, TestName, ClassName, Name, Tags, Signature, TmplTypes, TypesList)\
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ template<typename TestType> \
+ struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName <TestType>) { \
+ void test();\
+ };\
+ namespace {\
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestNameClass) {\
+ INTERNAL_CATCH_TYPE_GEN \
+ INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature))\
+ template<typename...Types>\
+ struct TestNameClass{\
+ void reg_tests(){\
+ int index = 0;\
+ using expander = int[];\
+ constexpr char const* tmpl_types[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TmplTypes))};\
+ constexpr char const* types_list[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TypesList))};\
+ constexpr auto num_types = sizeof(types_list) / sizeof(types_list[0]);\
+ (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + "<" + std::string(types_list[index % num_types]) + ">", Tags } ), index++)... };/* NOLINT */ \
+ }\
+ };\
+ static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
+ using TestInit = typename create<TestNameClass, decltype(get_wrapper<INTERNAL_CATCH_REMOVE_PARENS(TmplTypes)>()), TypeList<INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(INTERNAL_CATCH_REMOVE_PARENS(TypesList))>>::type;\
+ TestInit t;\
+ t.reg_tests();\
+ return 0;\
+ }(); \
+ }\
+ }\
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ template<typename TestType> \
+ void TestName<TestType>::test()
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( ClassName, Name, Tags, ... )\
+ INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), ClassName, Name, Tags, typename T, __VA_ARGS__ )
+#else
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( ClassName, Name, Tags, ... )\
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), ClassName, Name, Tags, typename T,__VA_ARGS__ ) )
+#endif
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( ClassName, Name, Tags, Signature, ... )\
+ INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), ClassName, Name, Tags, Signature, __VA_ARGS__ )
+#else
+ #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( ClassName, Name, Tags, Signature, ... )\
+ INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), ClassName, Name, Tags, Signature,__VA_ARGS__ ) )
+#endif
+
+ #define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD_2( TestNameClass, TestName, ClassName, Name, Tags, TmplList) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
+ template<typename TestType> \
+ struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName <TestType>) { \
+ void test();\
+ };\
+ namespace {\
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){ \
+ INTERNAL_CATCH_TYPE_GEN\
+ template<typename...Types>\
+ struct TestNameClass{\
+ void reg_tests(){\
+ int index = 0;\
+ using expander = int[];\
+ (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, Catch::NameAndTags{ Name " - " + std::string(INTERNAL_CATCH_STRINGIZE(TmplList)) + " - " + std::to_string(index), Tags } ), index++)... };/* NOLINT */ \
+ }\
+ };\
+ static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
+ using TestInit = typename convert<TestNameClass, TmplList>::type;\
+ TestInit t;\
+ t.reg_tests();\
+ return 0;\
+ }(); \
+ }}\
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ template<typename TestType> \
+ void TestName<TestType>::test()
+
+#define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD(ClassName, Name, Tags, TmplList) \
+ INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_ ), INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_M_P_L_A_T_E_T_E_S_T_F_U_N_C_ ), ClassName, Name, Tags, TmplList )
+
+// end catch_test_registry.h
+// start catch_capture.hpp
+
+// start catch_assertionhandler.h
+
+// start catch_assertioninfo.h
+
+// start catch_result_type.h
+
+namespace Catch {
+
+ // ResultWas::OfType enum
+ struct ResultWas { enum OfType {
+ Unknown = -1,
+ Ok = 0,
+ Info = 1,
+ Warning = 2,
+
+ FailureBit = 0x10,
+
+ ExpressionFailed = FailureBit | 1,
+ ExplicitFailure = FailureBit | 2,
+
+ Exception = 0x100 | FailureBit,
+
+ ThrewException = Exception | 1,
+ DidntThrowException = Exception | 2,
+
+ FatalErrorCondition = 0x200 | FailureBit
+
+ }; };
+
+ bool isOk( ResultWas::OfType resultType );
+ bool isJustInfo( int flags );
+
+ // ResultDisposition::Flags enum
+ struct ResultDisposition { enum Flags {
+ Normal = 0x01,
+
+ ContinueOnFailure = 0x02, // Failures fail test, but execution continues
+ FalseTest = 0x04, // Prefix expression with !
+ SuppressFail = 0x08 // Failures are reported but do not fail the test
+ }; };
+
+ ResultDisposition::Flags operator | ( ResultDisposition::Flags lhs, ResultDisposition::Flags rhs );
+
+ bool shouldContinueOnFailure( int flags );
+ inline bool isFalseTest( int flags ) { return ( flags & ResultDisposition::FalseTest ) != 0; }
+ bool shouldSuppressFailure( int flags );
+
+} // end namespace Catch
+
+// end catch_result_type.h
+namespace Catch {
+
+ struct AssertionInfo
+ {
+ StringRef macroName;
+ SourceLineInfo lineInfo;
+ StringRef capturedExpression;
+ ResultDisposition::Flags resultDisposition;
+
+ // We want to delete this constructor but a compiler bug in 4.8 means
+ // the struct is then treated as non-aggregate
+ //AssertionInfo() = delete;
+ };
+
+} // end namespace Catch
+
+// end catch_assertioninfo.h
+// start catch_decomposer.h
+
+// start catch_tostring.h
+
+#include <vector>
+#include <cstddef>
+#include <type_traits>
+#include <string>
+// start catch_stream.h
+
+#include <iosfwd>
+#include <cstddef>
+#include <ostream>
+
+namespace Catch {
+
+ std::ostream& cout();
+ std::ostream& cerr();
+ std::ostream& clog();
+
+ class StringRef;
+
+ struct IStream {
+ virtual ~IStream();
+ virtual std::ostream& stream() const = 0;
+ };
+
+ auto makeStream( StringRef const &filename ) -> IStream const*;
+
+ class ReusableStringStream : NonCopyable {
+ std::size_t m_index;
+ std::ostream* m_oss;
+ public:
+ ReusableStringStream();
+ ~ReusableStringStream();
+
+ auto str() const -> std::string;
+
+ template<typename T>
+ auto operator << ( T const& value ) -> ReusableStringStream& {
+ *m_oss << value;
+ return *this;
+ }
+ auto get() -> std::ostream& { return *m_oss; }
+ };
+}
+
+// end catch_stream.h
+// start catch_interfaces_enum_values_registry.h
+
+#include <vector>
+
+namespace Catch {
+
+ namespace Detail {
+ struct EnumInfo {
+ StringRef m_name;
+ std::vector<std::pair<int, StringRef>> m_values;
+
+ ~EnumInfo();
+
+ StringRef lookup( int value ) const;
+ };
+ } // namespace Detail
+
+ struct IMutableEnumValuesRegistry {
+ virtual ~IMutableEnumValuesRegistry();
+
+ virtual Detail::EnumInfo const& registerEnum( StringRef enumName, StringRef allEnums, std::vector<int> const& values ) = 0;
+
+ template<typename E>
+ Detail::EnumInfo const& registerEnum( StringRef enumName, StringRef allEnums, std::initializer_list<E> values ) {
+ static_assert(sizeof(int) >= sizeof(E), "Cannot serialize enum to int");
+ std::vector<int> intValues;
+ intValues.reserve( values.size() );
+ for( auto enumValue : values )
+ intValues.push_back( static_cast<int>( enumValue ) );
+ return registerEnum( enumName, allEnums, intValues );
+ }
+ };
+
+} // Catch
+
+// end catch_interfaces_enum_values_registry.h
+
+#ifdef CATCH_CONFIG_CPP17_STRING_VIEW
+#include <string_view>
+#endif
+
+#ifdef __OBJC__
+// start catch_objc_arc.hpp
+
+#import <Foundation/Foundation.h>
+
+#ifdef __has_feature
+#define CATCH_ARC_ENABLED __has_feature(objc_arc)
+#else
+#define CATCH_ARC_ENABLED 0
+#endif
+
+void arcSafeRelease( NSObject* obj );
+id performOptionalSelector( id obj, SEL sel );
+
+#if !CATCH_ARC_ENABLED
+inline void arcSafeRelease( NSObject* obj ) {
+ [obj release];
+}
+inline id performOptionalSelector( id obj, SEL sel ) {
+ if( [obj respondsToSelector: sel] )
+ return [obj performSelector: sel];
+ return nil;
+}
+#define CATCH_UNSAFE_UNRETAINED
+#define CATCH_ARC_STRONG
+#else
+inline void arcSafeRelease( NSObject* ){}
+inline id performOptionalSelector( id obj, SEL sel ) {
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
+#endif
+ if( [obj respondsToSelector: sel] )
+ return [obj performSelector: sel];
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+ return nil;
+}
+#define CATCH_UNSAFE_UNRETAINED __unsafe_unretained
+#define CATCH_ARC_STRONG __strong
+#endif
+
+// end catch_objc_arc.hpp
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable:4180) // We attempt to stream a function (address) by const&, which MSVC complains about but is harmless
+#endif
+
+namespace Catch {
+ namespace Detail {
+
+ extern const std::string unprintableString;
+
+ std::string rawMemoryToString( const void *object, std::size_t size );
+
+ template<typename T>
+ std::string rawMemoryToString( const T& object ) {
+ return rawMemoryToString( &object, sizeof(object) );
+ }
+
+ template<typename T>
+ class IsStreamInsertable {
+ template<typename Stream, typename U>
+ static auto test(int)
+ -> decltype(std::declval<Stream&>() << std::declval<U>(), std::true_type());
+
+ template<typename, typename>
+ static auto test(...)->std::false_type;
+
+ public:
+ static const bool value = decltype(test<std::ostream, const T&>(0))::value;
+ };
+
+ template<typename E>
+ std::string convertUnknownEnumToString( E e );
+
+ template<typename T>
+ typename std::enable_if<
+ !std::is_enum<T>::value && !std::is_base_of<std::exception, T>::value,
+ std::string>::type convertUnstreamable( T const& ) {
+ return Detail::unprintableString;
+ }
+ template<typename T>
+ typename std::enable_if<
+ !std::is_enum<T>::value && std::is_base_of<std::exception, T>::value,
+ std::string>::type convertUnstreamable(T const& ex) {
+ return ex.what();
+ }
+
+ template<typename T>
+ typename std::enable_if<
+ std::is_enum<T>::value
+ , std::string>::type convertUnstreamable( T const& value ) {
+ return convertUnknownEnumToString( value );
+ }
+
+#if defined(_MANAGED)
+ //! Convert a CLR string to a utf8 std::string
+ template<typename T>
+ std::string clrReferenceToString( T^ ref ) {
+ if (ref == nullptr)
+ return std::string("null");
+ auto bytes = System::Text::Encoding::UTF8->GetBytes(ref->ToString());
+ cli::pin_ptr<System::Byte> p = &bytes[0];
+ return std::string(reinterpret_cast<char const *>(p), bytes->Length);
+ }
+#endif
+
+ } // namespace Detail
+
+ // If we decide for C++14, change these to enable_if_ts
+ template <typename T, typename = void>
+ struct StringMaker {
+ template <typename Fake = T>
+ static
+ typename std::enable_if<::Catch::Detail::IsStreamInsertable<Fake>::value, std::string>::type
+ convert(const Fake& value) {
+ ReusableStringStream rss;
+ // NB: call using the function-like syntax to avoid ambiguity with
+ // user-defined templated operator<< under clang.
+ rss.operator<<(value);
+ return rss.str();
+ }
+
+ template <typename Fake = T>
+ static
+ typename std::enable_if<!::Catch::Detail::IsStreamInsertable<Fake>::value, std::string>::type
+ convert( const Fake& value ) {
+#if !defined(CATCH_CONFIG_FALLBACK_STRINGIFIER)
+ return Detail::convertUnstreamable(value);
+#else
+ return CATCH_CONFIG_FALLBACK_STRINGIFIER(value);
+#endif
+ }
+ };
+
+ namespace Detail {
+
+ // This function dispatches all stringification requests inside of Catch.
+ // Should be preferably called fully qualified, like ::Catch::Detail::stringify
+ template <typename T>
+ std::string stringify(const T& e) {
+ return ::Catch::StringMaker<typename std::remove_cv<typename std::remove_reference<T>::type>::type>::convert(e);
+ }
+
+ template<typename E>
+ std::string convertUnknownEnumToString( E e ) {
+ return ::Catch::Detail::stringify(static_cast<typename std::underlying_type<E>::type>(e));
+ }
+
+#if defined(_MANAGED)
+ template <typename T>
+ std::string stringify( T^ e ) {
+ return ::Catch::StringMaker<T^>::convert(e);
+ }
+#endif
+
+ } // namespace Detail
+
+ // Some predefined specializations
+
+ template<>
+ struct StringMaker<std::string> {
+ static std::string convert(const std::string& str);
+ };
+
+#ifdef CATCH_CONFIG_CPP17_STRING_VIEW
+ template<>
+ struct StringMaker<std::string_view> {
+ static std::string convert(std::string_view str);
+ };
+#endif
+
+ template<>
+ struct StringMaker<char const *> {
+ static std::string convert(char const * str);
+ };
+ template<>
+ struct StringMaker<char *> {
+ static std::string convert(char * str);
+ };
+
+#ifdef CATCH_CONFIG_WCHAR
+ template<>
+ struct StringMaker<std::wstring> {
+ static std::string convert(const std::wstring& wstr);
+ };
+
+# ifdef CATCH_CONFIG_CPP17_STRING_VIEW
+ template<>
+ struct StringMaker<std::wstring_view> {
+ static std::string convert(std::wstring_view str);
+ };
+# endif
+
+ template<>
+ struct StringMaker<wchar_t const *> {
+ static std::string convert(wchar_t const * str);
+ };
+ template<>
+ struct StringMaker<wchar_t *> {
+ static std::string convert(wchar_t * str);
+ };
+#endif
+
+ // TBD: Should we use `strnlen` to ensure that we don't go out of the buffer,
+ // while keeping string semantics?
+ template<int SZ>
+ struct StringMaker<char[SZ]> {
+ static std::string convert(char const* str) {
+ return ::Catch::Detail::stringify(std::string{ str });
+ }
+ };
+ template<int SZ>
+ struct StringMaker<signed char[SZ]> {
+ static std::string convert(signed char const* str) {
+ return ::Catch::Detail::stringify(std::string{ reinterpret_cast<char const *>(str) });
+ }
+ };
+ template<int SZ>
+ struct StringMaker<unsigned char[SZ]> {
+ static std::string convert(unsigned char const* str) {
+ return ::Catch::Detail::stringify(std::string{ reinterpret_cast<char const *>(str) });
+ }
+ };
+
+#if defined(CATCH_CONFIG_CPP17_BYTE)
+ template<>
+ struct StringMaker<std::byte> {
+ static std::string convert(std::byte value);
+ };
+#endif // defined(CATCH_CONFIG_CPP17_BYTE)
+ template<>
+ struct StringMaker<int> {
+ static std::string convert(int value);
+ };
+ template<>
+ struct StringMaker<long> {
+ static std::string convert(long value);
+ };
+ template<>
+ struct StringMaker<long long> {
+ static std::string convert(long long value);
+ };
+ template<>
+ struct StringMaker<unsigned int> {
+ static std::string convert(unsigned int value);
+ };
+ template<>
+ struct StringMaker<unsigned long> {
+ static std::string convert(unsigned long value);
+ };
+ template<>
+ struct StringMaker<unsigned long long> {
+ static std::string convert(unsigned long long value);
+ };
+
+ template<>
+ struct StringMaker<bool> {
+ static std::string convert(bool b);
+ };
+
+ template<>
+ struct StringMaker<char> {
+ static std::string convert(char c);
+ };
+ template<>
+ struct StringMaker<signed char> {
+ static std::string convert(signed char c);
+ };
+ template<>
+ struct StringMaker<unsigned char> {
+ static std::string convert(unsigned char c);
+ };
+
+ template<>
+ struct StringMaker<std::nullptr_t> {
+ static std::string convert(std::nullptr_t);
+ };
+
+ template<>
+ struct StringMaker<float> {
+ static std::string convert(float value);
+ static int precision;
+ };
+
+ template<>
+ struct StringMaker<double> {
+ static std::string convert(double value);
+ static int precision;
+ };
+
+ template <typename T>
+ struct StringMaker<T*> {
+ template <typename U>
+ static std::string convert(U* p) {
+ if (p) {
+ return ::Catch::Detail::rawMemoryToString(p);
+ } else {
+ return "nullptr";
+ }
+ }
+ };
+
+ template <typename R, typename C>
+ struct StringMaker<R C::*> {
+ static std::string convert(R C::* p) {
+ if (p) {
+ return ::Catch::Detail::rawMemoryToString(p);
+ } else {
+ return "nullptr";
+ }
+ }
+ };
+
+#if defined(_MANAGED)
+ template <typename T>
+ struct StringMaker<T^> {
+ static std::string convert( T^ ref ) {
+ return ::Catch::Detail::clrReferenceToString(ref);
+ }
+ };
+#endif
+
+ namespace Detail {
+ template<typename InputIterator, typename Sentinel = InputIterator>
+ std::string rangeToString(InputIterator first, Sentinel last) {
+ ReusableStringStream rss;
+ rss << "{ ";
+ if (first != last) {
+ rss << ::Catch::Detail::stringify(*first);
+ for (++first; first != last; ++first)
+ rss << ", " << ::Catch::Detail::stringify(*first);
+ }
+ rss << " }";
+ return rss.str();
+ }
+ }
+
+#ifdef __OBJC__
+ template<>
+ struct StringMaker<NSString*> {
+ static std::string convert(NSString * nsstring) {
+ if (!nsstring)
+ return "nil";
+ return std::string("@") + [nsstring UTF8String];
+ }
+ };
+ template<>
+ struct StringMaker<NSObject*> {
+ static std::string convert(NSObject* nsObject) {
+ return ::Catch::Detail::stringify([nsObject description]);
+ }
+
+ };
+ namespace Detail {
+ inline std::string stringify( NSString* nsstring ) {
+ return StringMaker<NSString*>::convert( nsstring );
+ }
+
+ } // namespace Detail
+#endif // __OBJC__
+
+} // namespace Catch
+
+//////////////////////////////////////////////////////
+// Separate std-lib types stringification, so it can be selectively enabled
+// This means that we do not bring in
+
+#if defined(CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS)
+# define CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER
+# define CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER
+# define CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER
+# define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER
+# define CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER
+#endif
+
+// Separate std::pair specialization
+#if defined(CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER)
+#include <utility>
+namespace Catch {
+ template<typename T1, typename T2>
+ struct StringMaker<std::pair<T1, T2> > {
+ static std::string convert(const std::pair<T1, T2>& pair) {
+ ReusableStringStream rss;
+ rss << "{ "
+ << ::Catch::Detail::stringify(pair.first)
+ << ", "
+ << ::Catch::Detail::stringify(pair.second)
+ << " }";
+ return rss.str();
+ }
+ };
+}
+#endif // CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER
+
+#if defined(CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER) && defined(CATCH_CONFIG_CPP17_OPTIONAL)
+#include <optional>
+namespace Catch {
+ template<typename T>
+ struct StringMaker<std::optional<T> > {
+ static std::string convert(const std::optional<T>& optional) {
+ ReusableStringStream rss;
+ if (optional.has_value()) {
+ rss << ::Catch::Detail::stringify(*optional);
+ } else {
+ rss << "{ }";
+ }
+ return rss.str();
+ }
+ };
+}
+#endif // CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER
+
+// Separate std::tuple specialization
+#if defined(CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER)
+#include <tuple>
+namespace Catch {
+ namespace Detail {
+ template<
+ typename Tuple,
+ std::size_t N = 0,
+ bool = (N < std::tuple_size<Tuple>::value)
+ >
+ struct TupleElementPrinter {
+ static void print(const Tuple& tuple, std::ostream& os) {
+ os << (N ? ", " : " ")
+ << ::Catch::Detail::stringify(std::get<N>(tuple));
+ TupleElementPrinter<Tuple, N + 1>::print(tuple, os);
+ }
+ };
+
+ template<
+ typename Tuple,
+ std::size_t N
+ >
+ struct TupleElementPrinter<Tuple, N, false> {
+ static void print(const Tuple&, std::ostream&) {}
+ };
+
+ }
+
+ template<typename ...Types>
+ struct StringMaker<std::tuple<Types...>> {
+ static std::string convert(const std::tuple<Types...>& tuple) {
+ ReusableStringStream rss;
+ rss << '{';
+ Detail::TupleElementPrinter<std::tuple<Types...>>::print(tuple, rss.get());
+ rss << " }";
+ return rss.str();
+ }
+ };
+}
+#endif // CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER
+
+#if defined(CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER) && defined(CATCH_CONFIG_CPP17_VARIANT)
+#include <variant>
+namespace Catch {
+ template<>
+ struct StringMaker<std::monostate> {
+ static std::string convert(const std::monostate&) {
+ return "{ }";
+ }
+ };
+
+ template<typename... Elements>
+ struct StringMaker<std::variant<Elements...>> {
+ static std::string convert(const std::variant<Elements...>& variant) {
+ if (variant.valueless_by_exception()) {
+ return "{valueless variant}";
+ } else {
+ return std::visit(
+ [](const auto& value) {
+ return ::Catch::Detail::stringify(value);
+ },
+ variant
+ );
+ }
+ }
+ };
+}
+#endif // CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER
+
+namespace Catch {
+ // Import begin/ end from std here
+ using std::begin;
+ using std::end;
+
+ namespace detail {
+ template <typename...>
+ struct void_type {
+ using type = void;
+ };
+
+ template <typename T, typename = void>
+ struct is_range_impl : std::false_type {
+ };
+
+ template <typename T>
+ struct is_range_impl<T, typename void_type<decltype(begin(std::declval<T>()))>::type> : std::true_type {
+ };
+ } // namespace detail
+
+ template <typename T>
+ struct is_range : detail::is_range_impl<T> {
+ };
+
+#if defined(_MANAGED) // Managed types are never ranges
+ template <typename T>
+ struct is_range<T^> {
+ static const bool value = false;
+ };
+#endif
+
+ template<typename Range>
+ std::string rangeToString( Range const& range ) {
+ return ::Catch::Detail::rangeToString( begin( range ), end( range ) );
+ }
+
+ // Handle vector<bool> specially
+ template<typename Allocator>
+ std::string rangeToString( std::vector<bool, Allocator> const& v ) {
+ ReusableStringStream rss;
+ rss << "{ ";
+ bool first = true;
+ for( bool b : v ) {
+ if( first )
+ first = false;
+ else
+ rss << ", ";
+ rss << ::Catch::Detail::stringify( b );
+ }
+ rss << " }";
+ return rss.str();
+ }
+
+ template<typename R>
+ struct StringMaker<R, typename std::enable_if<is_range<R>::value && !::Catch::Detail::IsStreamInsertable<R>::value>::type> {
+ static std::string convert( R const& range ) {
+ return rangeToString( range );
+ }
+ };
+
+ template <typename T, int SZ>
+ struct StringMaker<T[SZ]> {
+ static std::string convert(T const(&arr)[SZ]) {
+ return rangeToString(arr);
+ }
+ };
+
+} // namespace Catch
+
+// Separate std::chrono::duration specialization
+#if defined(CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER)
+#include <ctime>
+#include <ratio>
+#include <chrono>
+
+namespace Catch {
+
+template <class Ratio>
+struct ratio_string {
+ static std::string symbol();
+};
+
+template <class Ratio>
+std::string ratio_string<Ratio>::symbol() {
+ Catch::ReusableStringStream rss;
+ rss << '[' << Ratio::num << '/'
+ << Ratio::den << ']';
+ return rss.str();
+}
+template <>
+struct ratio_string<std::atto> {
+ static std::string symbol();
+};
+template <>
+struct ratio_string<std::femto> {
+ static std::string symbol();
+};
+template <>
+struct ratio_string<std::pico> {
+ static std::string symbol();
+};
+template <>
+struct ratio_string<std::nano> {
+ static std::string symbol();
+};
+template <>
+struct ratio_string<std::micro> {
+ static std::string symbol();
+};
+template <>
+struct ratio_string<std::milli> {
+ static std::string symbol();
+};
+
+ ////////////
+ // std::chrono::duration specializations
+ template<typename Value, typename Ratio>
+ struct StringMaker<std::chrono::duration<Value, Ratio>> {
+ static std::string convert(std::chrono::duration<Value, Ratio> const& duration) {
+ ReusableStringStream rss;
+ rss << duration.count() << ' ' << ratio_string<Ratio>::symbol() << 's';
+ return rss.str();
+ }
+ };
+ template<typename Value>
+ struct StringMaker<std::chrono::duration<Value, std::ratio<1>>> {
+ static std::string convert(std::chrono::duration<Value, std::ratio<1>> const& duration) {
+ ReusableStringStream rss;
+ rss << duration.count() << " s";
+ return rss.str();
+ }
+ };
+ template<typename Value>
+ struct StringMaker<std::chrono::duration<Value, std::ratio<60>>> {
+ static std::string convert(std::chrono::duration<Value, std::ratio<60>> const& duration) {
+ ReusableStringStream rss;
+ rss << duration.count() << " m";
+ return rss.str();
+ }
+ };
+ template<typename Value>
+ struct StringMaker<std::chrono::duration<Value, std::ratio<3600>>> {
+ static std::string convert(std::chrono::duration<Value, std::ratio<3600>> const& duration) {
+ ReusableStringStream rss;
+ rss << duration.count() << " h";
+ return rss.str();
+ }
+ };
+
+ ////////////
+ // std::chrono::time_point specialization
+ // Generic time_point cannot be specialized, only std::chrono::time_point<system_clock>
+ template<typename Clock, typename Duration>
+ struct StringMaker<std::chrono::time_point<Clock, Duration>> {
+ static std::string convert(std::chrono::time_point<Clock, Duration> const& time_point) {
+ return ::Catch::Detail::stringify(time_point.time_since_epoch()) + " since epoch";
+ }
+ };
+ // std::chrono::time_point<system_clock> specialization
+ template<typename Duration>
+ struct StringMaker<std::chrono::time_point<std::chrono::system_clock, Duration>> {
+ static std::string convert(std::chrono::time_point<std::chrono::system_clock, Duration> const& time_point) {
+ auto converted = std::chrono::system_clock::to_time_t(time_point);
+
+#ifdef _MSC_VER
+ std::tm timeInfo = {};
+ gmtime_s(&timeInfo, &converted);
+#else
+ std::tm* timeInfo = std::gmtime(&converted);
+#endif
+
+ auto const timeStampSize = sizeof("2017-01-16T17:06:45Z");
+ char timeStamp[timeStampSize];
+ const char * const fmt = "%Y-%m-%dT%H:%M:%SZ";
+
+#ifdef _MSC_VER
+ std::strftime(timeStamp, timeStampSize, fmt, &timeInfo);
+#else
+ std::strftime(timeStamp, timeStampSize, fmt, timeInfo);
+#endif
+ return std::string(timeStamp);
+ }
+ };
+}
+#endif // CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER
+
+#define INTERNAL_CATCH_REGISTER_ENUM( enumName, ... ) \
+namespace Catch { \
+ template<> struct StringMaker<enumName> { \
+ static std::string convert( enumName value ) { \
+ static const auto& enumInfo = ::Catch::getMutableRegistryHub().getMutableEnumValuesRegistry().registerEnum( #enumName, #__VA_ARGS__, { __VA_ARGS__ } ); \
+ return static_cast<std::string>(enumInfo.lookup( static_cast<int>( value ) )); \
+ } \
+ }; \
+}
+
+#define CATCH_REGISTER_ENUM( enumName, ... ) INTERNAL_CATCH_REGISTER_ENUM( enumName, __VA_ARGS__ )
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+// end catch_tostring.h
+#include <iosfwd>
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable:4389) // '==' : signed/unsigned mismatch
+#pragma warning(disable:4018) // more "signed/unsigned mismatch"
+#pragma warning(disable:4312) // Converting int to T* using reinterpret_cast (issue on x64 platform)
+#pragma warning(disable:4180) // qualifier applied to function type has no meaning
+#pragma warning(disable:4800) // Forcing result to true or false
+#endif
+
+namespace Catch {
+
+ struct ITransientExpression {
+ auto isBinaryExpression() const -> bool { return m_isBinaryExpression; }
+ auto getResult() const -> bool { return m_result; }
+ virtual void streamReconstructedExpression( std::ostream &os ) const = 0;
+
+ ITransientExpression( bool isBinaryExpression, bool result )
+ : m_isBinaryExpression( isBinaryExpression ),
+ m_result( result )
+ {}
+
+ // We don't actually need a virtual destructor, but many static analysers
+ // complain if it's not here :-(
+ virtual ~ITransientExpression();
+
+ bool m_isBinaryExpression;
+ bool m_result;
+
+ };
+
+ void formatReconstructedExpression( std::ostream &os, std::string const& lhs, StringRef op, std::string const& rhs );
+
+ template<typename LhsT, typename RhsT>
+ class BinaryExpr : public ITransientExpression {
+ LhsT m_lhs;
+ StringRef m_op;
+ RhsT m_rhs;
+
+ void streamReconstructedExpression( std::ostream &os ) const override {
+ formatReconstructedExpression
+ ( os, Catch::Detail::stringify( m_lhs ), m_op, Catch::Detail::stringify( m_rhs ) );
+ }
+
+ public:
+ BinaryExpr( bool comparisonResult, LhsT lhs, StringRef op, RhsT rhs )
+ : ITransientExpression{ true, comparisonResult },
+ m_lhs( lhs ),
+ m_op( op ),
+ m_rhs( rhs )
+ {}
+
+ template<typename T>
+ auto operator && ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator || ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator == ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator != ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator > ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator < ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator >= ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename T>
+ auto operator <= ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<T>::value,
+ "chained comparisons are not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+ };
+
+ template<typename LhsT>
+ class UnaryExpr : public ITransientExpression {
+ LhsT m_lhs;
+
+ void streamReconstructedExpression( std::ostream &os ) const override {
+ os << Catch::Detail::stringify( m_lhs );
+ }
+
+ public:
+ explicit UnaryExpr( LhsT lhs )
+ : ITransientExpression{ false, static_cast<bool>(lhs) },
+ m_lhs( lhs )
+ {}
+ };
+
+ // Specialised comparison functions to handle equality comparisons between ints and pointers (NULL deduces as an int)
+ template<typename LhsT, typename RhsT>
+ auto compareEqual( LhsT const& lhs, RhsT const& rhs ) -> bool { return static_cast<bool>(lhs == rhs); }
+ template<typename T>
+ auto compareEqual( T* const& lhs, int rhs ) -> bool { return lhs == reinterpret_cast<void const*>( rhs ); }
+ template<typename T>
+ auto compareEqual( T* const& lhs, long rhs ) -> bool { return lhs == reinterpret_cast<void const*>( rhs ); }
+ template<typename T>
+ auto compareEqual( int lhs, T* const& rhs ) -> bool { return reinterpret_cast<void const*>( lhs ) == rhs; }
+ template<typename T>
+ auto compareEqual( long lhs, T* const& rhs ) -> bool { return reinterpret_cast<void const*>( lhs ) == rhs; }
+
+ template<typename LhsT, typename RhsT>
+ auto compareNotEqual( LhsT const& lhs, RhsT&& rhs ) -> bool { return static_cast<bool>(lhs != rhs); }
+ template<typename T>
+ auto compareNotEqual( T* const& lhs, int rhs ) -> bool { return lhs != reinterpret_cast<void const*>( rhs ); }
+ template<typename T>
+ auto compareNotEqual( T* const& lhs, long rhs ) -> bool { return lhs != reinterpret_cast<void const*>( rhs ); }
+ template<typename T>
+ auto compareNotEqual( int lhs, T* const& rhs ) -> bool { return reinterpret_cast<void const*>( lhs ) != rhs; }
+ template<typename T>
+ auto compareNotEqual( long lhs, T* const& rhs ) -> bool { return reinterpret_cast<void const*>( lhs ) != rhs; }
+
+ template<typename LhsT>
+ class ExprLhs {
+ LhsT m_lhs;
+ public:
+ explicit ExprLhs( LhsT lhs ) : m_lhs( lhs ) {}
+
+ template<typename RhsT>
+ auto operator == ( RhsT const& rhs ) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { compareEqual( m_lhs, rhs ), m_lhs, "==", rhs };
+ }
+ auto operator == ( bool rhs ) -> BinaryExpr<LhsT, bool> const {
+ return { m_lhs == rhs, m_lhs, "==", rhs };
+ }
+
+ template<typename RhsT>
+ auto operator != ( RhsT const& rhs ) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { compareNotEqual( m_lhs, rhs ), m_lhs, "!=", rhs };
+ }
+ auto operator != ( bool rhs ) -> BinaryExpr<LhsT, bool> const {
+ return { m_lhs != rhs, m_lhs, "!=", rhs };
+ }
+
+ template<typename RhsT>
+ auto operator > ( RhsT const& rhs ) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs > rhs), m_lhs, ">", rhs };
+ }
+ template<typename RhsT>
+ auto operator < ( RhsT const& rhs ) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs < rhs), m_lhs, "<", rhs };
+ }
+ template<typename RhsT>
+ auto operator >= ( RhsT const& rhs ) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs >= rhs), m_lhs, ">=", rhs };
+ }
+ template<typename RhsT>
+ auto operator <= ( RhsT const& rhs ) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs <= rhs), m_lhs, "<=", rhs };
+ }
+ template <typename RhsT>
+ auto operator | (RhsT const& rhs) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs | rhs), m_lhs, "|", rhs };
+ }
+ template <typename RhsT>
+ auto operator & (RhsT const& rhs) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs & rhs), m_lhs, "&", rhs };
+ }
+ template <typename RhsT>
+ auto operator ^ (RhsT const& rhs) -> BinaryExpr<LhsT, RhsT const&> const {
+ return { static_cast<bool>(m_lhs ^ rhs), m_lhs, "^", rhs };
+ }
+
+ template<typename RhsT>
+ auto operator && ( RhsT const& ) -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<RhsT>::value,
+ "operator&& is not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ template<typename RhsT>
+ auto operator || ( RhsT const& ) -> BinaryExpr<LhsT, RhsT const&> const {
+ static_assert(always_false<RhsT>::value,
+ "operator|| is not supported inside assertions, "
+ "wrap the expression inside parentheses, or decompose it");
+ }
+
+ auto makeUnaryExpr() const -> UnaryExpr<LhsT> {
+ return UnaryExpr<LhsT>{ m_lhs };
+ }
+ };
+
+ void handleExpression( ITransientExpression const& expr );
+
+ template<typename T>
+ void handleExpression( ExprLhs<T> const& expr ) {
+ handleExpression( expr.makeUnaryExpr() );
+ }
+
+ struct Decomposer {
+ template<typename T>
+ auto operator <= ( T const& lhs ) -> ExprLhs<T const&> {
+ return ExprLhs<T const&>{ lhs };
+ }
+
+ auto operator <=( bool value ) -> ExprLhs<bool> {
+ return ExprLhs<bool>{ value };
+ }
+ };
+
+} // end namespace Catch
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+// end catch_decomposer.h
+// start catch_interfaces_capture.h
+
+#include <string>
+#include <chrono>
+
+namespace Catch {
+
+ class AssertionResult;
+ struct AssertionInfo;
+ struct SectionInfo;
+ struct SectionEndInfo;
+ struct MessageInfo;
+ struct MessageBuilder;
+ struct Counts;
+ struct AssertionReaction;
+ struct SourceLineInfo;
+
+ struct ITransientExpression;
+ struct IGeneratorTracker;
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ struct BenchmarkInfo;
+ template <typename Duration = std::chrono::duration<double, std::nano>>
+ struct BenchmarkStats;
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ struct IResultCapture {
+
+ virtual ~IResultCapture();
+
+ virtual bool sectionStarted( SectionInfo const& sectionInfo,
+ Counts& assertions ) = 0;
+ virtual void sectionEnded( SectionEndInfo const& endInfo ) = 0;
+ virtual void sectionEndedEarly( SectionEndInfo const& endInfo ) = 0;
+
+ virtual auto acquireGeneratorTracker( StringRef generatorName, SourceLineInfo const& lineInfo ) -> IGeneratorTracker& = 0;
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ virtual void benchmarkPreparing( std::string const& name ) = 0;
+ virtual void benchmarkStarting( BenchmarkInfo const& info ) = 0;
+ virtual void benchmarkEnded( BenchmarkStats<> const& stats ) = 0;
+ virtual void benchmarkFailed( std::string const& error ) = 0;
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ virtual void pushScopedMessage( MessageInfo const& message ) = 0;
+ virtual void popScopedMessage( MessageInfo const& message ) = 0;
+
+ virtual void emplaceUnscopedMessage( MessageBuilder const& builder ) = 0;
+
+ virtual void handleFatalErrorCondition( StringRef message ) = 0;
+
+ virtual void handleExpr
+ ( AssertionInfo const& info,
+ ITransientExpression const& expr,
+ AssertionReaction& reaction ) = 0;
+ virtual void handleMessage
+ ( AssertionInfo const& info,
+ ResultWas::OfType resultType,
+ StringRef const& message,
+ AssertionReaction& reaction ) = 0;
+ virtual void handleUnexpectedExceptionNotThrown
+ ( AssertionInfo const& info,
+ AssertionReaction& reaction ) = 0;
+ virtual void handleUnexpectedInflightException
+ ( AssertionInfo const& info,
+ std::string const& message,
+ AssertionReaction& reaction ) = 0;
+ virtual void handleIncomplete
+ ( AssertionInfo const& info ) = 0;
+ virtual void handleNonExpr
+ ( AssertionInfo const &info,
+ ResultWas::OfType resultType,
+ AssertionReaction &reaction ) = 0;
+
+ virtual bool lastAssertionPassed() = 0;
+ virtual void assertionPassed() = 0;
+
+ // Deprecated, do not use:
+ virtual std::string getCurrentTestName() const = 0;
+ virtual const AssertionResult* getLastResult() const = 0;
+ virtual void exceptionEarlyReported() = 0;
+ };
+
+ IResultCapture& getResultCapture();
+}
+
+// end catch_interfaces_capture.h
+namespace Catch {
+
+ struct TestFailureException{};
+ struct AssertionResultData;
+ struct IResultCapture;
+ class RunContext;
+
+ class LazyExpression {
+ friend class AssertionHandler;
+ friend struct AssertionStats;
+ friend class RunContext;
+
+ ITransientExpression const* m_transientExpression = nullptr;
+ bool m_isNegated;
+ public:
+ LazyExpression( bool isNegated );
+ LazyExpression( LazyExpression const& other );
+ LazyExpression& operator = ( LazyExpression const& ) = delete;
+
+ explicit operator bool() const;
+
+ friend auto operator << ( std::ostream& os, LazyExpression const& lazyExpr ) -> std::ostream&;
+ };
+
+ struct AssertionReaction {
+ bool shouldDebugBreak = false;
+ bool shouldThrow = false;
+ };
+
+ class AssertionHandler {
+ AssertionInfo m_assertionInfo;
+ AssertionReaction m_reaction;
+ bool m_completed = false;
+ IResultCapture& m_resultCapture;
+
+ public:
+ AssertionHandler
+ ( StringRef const& macroName,
+ SourceLineInfo const& lineInfo,
+ StringRef capturedExpression,
+ ResultDisposition::Flags resultDisposition );
+ ~AssertionHandler() {
+ if ( !m_completed ) {
+ m_resultCapture.handleIncomplete( m_assertionInfo );
+ }
+ }
+
+ template<typename T>
+ void handleExpr( ExprLhs<T> const& expr ) {
+ handleExpr( expr.makeUnaryExpr() );
+ }
+ void handleExpr( ITransientExpression const& expr );
+
+ void handleMessage(ResultWas::OfType resultType, StringRef const& message);
+
+ void handleExceptionThrownAsExpected();
+ void handleUnexpectedExceptionNotThrown();
+ void handleExceptionNotThrownAsExpected();
+ void handleThrowingCallSkipped();
+ void handleUnexpectedInflightException();
+
+ void complete();
+ void setCompleted();
+
+ // query
+ auto allowThrows() const -> bool;
+ };
+
+ void handleExceptionMatchExpr( AssertionHandler& handler, std::string const& str, StringRef const& matcherString );
+
+} // namespace Catch
+
+// end catch_assertionhandler.h
+// start catch_message.h
+
+#include <string>
+#include <vector>
+
+namespace Catch {
+
+ struct MessageInfo {
+ MessageInfo( StringRef const& _macroName,
+ SourceLineInfo const& _lineInfo,
+ ResultWas::OfType _type );
+
+ StringRef macroName;
+ std::string message;
+ SourceLineInfo lineInfo;
+ ResultWas::OfType type;
+ unsigned int sequence;
+
+ bool operator == ( MessageInfo const& other ) const;
+ bool operator < ( MessageInfo const& other ) const;
+ private:
+ static unsigned int globalCount;
+ };
+
+ struct MessageStream {
+
+ template<typename T>
+ MessageStream& operator << ( T const& value ) {
+ m_stream << value;
+ return *this;
+ }
+
+ ReusableStringStream m_stream;
+ };
+
+ struct MessageBuilder : MessageStream {
+ MessageBuilder( StringRef const& macroName,
+ SourceLineInfo const& lineInfo,
+ ResultWas::OfType type );
+
+ template<typename T>
+ MessageBuilder& operator << ( T const& value ) {
+ m_stream << value;
+ return *this;
+ }
+
+ MessageInfo m_info;
+ };
+
+ class ScopedMessage {
+ public:
+ explicit ScopedMessage( MessageBuilder const& builder );
+ ScopedMessage( ScopedMessage& duplicate ) = delete;
+ ScopedMessage( ScopedMessage&& old );
+ ~ScopedMessage();
+
+ MessageInfo m_info;
+ bool m_moved;
+ };
+
+ class Capturer {
+ std::vector<MessageInfo> m_messages;
+ IResultCapture& m_resultCapture = getResultCapture();
+ size_t m_captured = 0;
+ public:
+ Capturer( StringRef macroName, SourceLineInfo const& lineInfo, ResultWas::OfType resultType, StringRef names );
+ ~Capturer();
+
+ void captureValue( size_t index, std::string const& value );
+
+ template<typename T>
+ void captureValues( size_t index, T const& value ) {
+ captureValue( index, Catch::Detail::stringify( value ) );
+ }
+
+ template<typename T, typename... Ts>
+ void captureValues( size_t index, T const& value, Ts const&... values ) {
+ captureValue( index, Catch::Detail::stringify(value) );
+ captureValues( index+1, values... );
+ }
+ };
+
+} // end namespace Catch
+
+// end catch_message.h
+#if !defined(CATCH_CONFIG_DISABLE)
+
+#if !defined(CATCH_CONFIG_DISABLE_STRINGIFICATION)
+ #define CATCH_INTERNAL_STRINGIFY(...) #__VA_ARGS__
+#else
+ #define CATCH_INTERNAL_STRINGIFY(...) "Disabled by CATCH_CONFIG_DISABLE_STRINGIFICATION"
+#endif
+
+#if defined(CATCH_CONFIG_FAST_COMPILE) || defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+
+///////////////////////////////////////////////////////////////////////////////
+// Another way to speed-up compilation is to omit local try-catch for REQUIRE*
+// macros.
+#define INTERNAL_CATCH_TRY
+#define INTERNAL_CATCH_CATCH( capturer )
+
+#else // CATCH_CONFIG_FAST_COMPILE
+
+#define INTERNAL_CATCH_TRY try
+#define INTERNAL_CATCH_CATCH( handler ) catch(...) { handler.handleUnexpectedInflightException(); }
+
+#endif
+
+#define INTERNAL_CATCH_REACT( handler ) handler.complete();
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_TEST( macroName, resultDisposition, ... ) \
+ do { \
+ CATCH_INTERNAL_IGNORE_BUT_WARN(__VA_ARGS__); \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__), resultDisposition ); \
+ INTERNAL_CATCH_TRY { \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \
+ catchAssertionHandler.handleExpr( Catch::Decomposer() <= __VA_ARGS__ ); \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ } INTERNAL_CATCH_CATCH( catchAssertionHandler ) \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( (void)0, (false) && static_cast<bool>( !!(__VA_ARGS__) ) )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_IF( macroName, resultDisposition, ... ) \
+ INTERNAL_CATCH_TEST( macroName, resultDisposition, __VA_ARGS__ ); \
+ if( Catch::getResultCapture().lastAssertionPassed() )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_ELSE( macroName, resultDisposition, ... ) \
+ INTERNAL_CATCH_TEST( macroName, resultDisposition, __VA_ARGS__ ); \
+ if( !Catch::getResultCapture().lastAssertionPassed() )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_NO_THROW( macroName, resultDisposition, ... ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__), resultDisposition ); \
+ try { \
+ static_cast<void>(__VA_ARGS__); \
+ catchAssertionHandler.handleExceptionNotThrownAsExpected(); \
+ } \
+ catch( ... ) { \
+ catchAssertionHandler.handleUnexpectedInflightException(); \
+ } \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_THROWS( macroName, resultDisposition, ... ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__), resultDisposition); \
+ if( catchAssertionHandler.allowThrows() ) \
+ try { \
+ static_cast<void>(__VA_ARGS__); \
+ catchAssertionHandler.handleUnexpectedExceptionNotThrown(); \
+ } \
+ catch( ... ) { \
+ catchAssertionHandler.handleExceptionThrownAsExpected(); \
+ } \
+ else \
+ catchAssertionHandler.handleThrowingCallSkipped(); \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_THROWS_AS( macroName, exceptionType, resultDisposition, expr ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(expr) ", " CATCH_INTERNAL_STRINGIFY(exceptionType), resultDisposition ); \
+ if( catchAssertionHandler.allowThrows() ) \
+ try { \
+ static_cast<void>(expr); \
+ catchAssertionHandler.handleUnexpectedExceptionNotThrown(); \
+ } \
+ catch( exceptionType const& ) { \
+ catchAssertionHandler.handleExceptionThrownAsExpected(); \
+ } \
+ catch( ... ) { \
+ catchAssertionHandler.handleUnexpectedInflightException(); \
+ } \
+ else \
+ catchAssertionHandler.handleThrowingCallSkipped(); \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_MSG( macroName, messageType, resultDisposition, ... ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, Catch::StringRef(), resultDisposition ); \
+ catchAssertionHandler.handleMessage( messageType, ( Catch::MessageStream() << __VA_ARGS__ + ::Catch::StreamEndStop() ).m_stream.str() ); \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_CAPTURE( varName, macroName, ... ) \
+ auto varName = Catch::Capturer( macroName, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info, #__VA_ARGS__ ); \
+ varName.captureValues( 0, __VA_ARGS__ )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_INFO( macroName, log ) \
+ Catch::ScopedMessage INTERNAL_CATCH_UNIQUE_NAME( scopedMessage )( Catch::MessageBuilder( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log );
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_UNSCOPED_INFO( macroName, log ) \
+ Catch::getResultCapture().emplaceUnscopedMessage( Catch::MessageBuilder( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log )
+
+///////////////////////////////////////////////////////////////////////////////
+// Although this is matcher-based, it can be used with just a string
+#define INTERNAL_CATCH_THROWS_STR_MATCHES( macroName, resultDisposition, matcher, ... ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__) ", " CATCH_INTERNAL_STRINGIFY(matcher), resultDisposition ); \
+ if( catchAssertionHandler.allowThrows() ) \
+ try { \
+ static_cast<void>(__VA_ARGS__); \
+ catchAssertionHandler.handleUnexpectedExceptionNotThrown(); \
+ } \
+ catch( ... ) { \
+ Catch::handleExceptionMatchExpr( catchAssertionHandler, matcher, #matcher##_catch_sr ); \
+ } \
+ else \
+ catchAssertionHandler.handleThrowingCallSkipped(); \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+#endif // CATCH_CONFIG_DISABLE
+
+// end catch_capture.hpp
+// start catch_section.h
+
+// start catch_section_info.h
+
+// start catch_totals.h
+
+#include <cstddef>
+
+namespace Catch {
+
+ struct Counts {
+ Counts operator - ( Counts const& other ) const;
+ Counts& operator += ( Counts const& other );
+
+ std::size_t total() const;
+ bool allPassed() const;
+ bool allOk() const;
+
+ std::size_t passed = 0;
+ std::size_t failed = 0;
+ std::size_t failedButOk = 0;
+ };
+
+ struct Totals {
+
+ Totals operator - ( Totals const& other ) const;
+ Totals& operator += ( Totals const& other );
+
+ Totals delta( Totals const& prevTotals ) const;
+
+ int error = 0;
+ Counts assertions;
+ Counts testCases;
+ };
+}
+
+// end catch_totals.h
+#include <string>
+
+namespace Catch {
+
+ struct SectionInfo {
+ SectionInfo
+ ( SourceLineInfo const& _lineInfo,
+ std::string const& _name );
+
+ // Deprecated
+ SectionInfo
+ ( SourceLineInfo const& _lineInfo,
+ std::string const& _name,
+ std::string const& ) : SectionInfo( _lineInfo, _name ) {}
+
+ std::string name;
+ std::string description; // !Deprecated: this will always be empty
+ SourceLineInfo lineInfo;
+ };
+
+ struct SectionEndInfo {
+ SectionInfo sectionInfo;
+ Counts prevAssertions;
+ double durationInSeconds;
+ };
+
+} // end namespace Catch
+
+// end catch_section_info.h
+// start catch_timer.h
+
+#include <cstdint>
+
+namespace Catch {
+
+ auto getCurrentNanosecondsSinceEpoch() -> uint64_t;
+ auto getEstimatedClockResolution() -> uint64_t;
+
+ class Timer {
+ uint64_t m_nanoseconds = 0;
+ public:
+ void start();
+ auto getElapsedNanoseconds() const -> uint64_t;
+ auto getElapsedMicroseconds() const -> uint64_t;
+ auto getElapsedMilliseconds() const -> unsigned int;
+ auto getElapsedSeconds() const -> double;
+ };
+
+} // namespace Catch
+
+// end catch_timer.h
+#include <string>
+
+namespace Catch {
+
+ class Section : NonCopyable {
+ public:
+ Section( SectionInfo const& info );
+ ~Section();
+
+ // This indicates whether the section should be executed or not
+ explicit operator bool() const;
+
+ private:
+ SectionInfo m_info;
+
+ std::string m_name;
+ Counts m_assertions;
+ bool m_sectionIncluded;
+ Timer m_timer;
+ };
+
+} // end namespace Catch
+
+#define INTERNAL_CATCH_SECTION( ... ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS \
+ if( Catch::Section const& INTERNAL_CATCH_UNIQUE_NAME( catch_internal_Section ) = Catch::SectionInfo( CATCH_INTERNAL_LINEINFO, __VA_ARGS__ ) ) \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+#define INTERNAL_CATCH_DYNAMIC_SECTION( ... ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS \
+ if( Catch::Section const& INTERNAL_CATCH_UNIQUE_NAME( catch_internal_Section ) = Catch::SectionInfo( CATCH_INTERNAL_LINEINFO, (Catch::ReusableStringStream() << __VA_ARGS__).str() ) ) \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+// end catch_section.h
+// start catch_interfaces_exception.h
+
+// start catch_interfaces_registry_hub.h
+
+#include <string>
+#include <memory>
+
+namespace Catch {
+
+ class TestCase;
+ struct ITestCaseRegistry;
+ struct IExceptionTranslatorRegistry;
+ struct IExceptionTranslator;
+ struct IReporterRegistry;
+ struct IReporterFactory;
+ struct ITagAliasRegistry;
+ struct IMutableEnumValuesRegistry;
+
+ class StartupExceptionRegistry;
+
+ using IReporterFactoryPtr = std::shared_ptr<IReporterFactory>;
+
+ struct IRegistryHub {
+ virtual ~IRegistryHub();
+
+ virtual IReporterRegistry const& getReporterRegistry() const = 0;
+ virtual ITestCaseRegistry const& getTestCaseRegistry() const = 0;
+ virtual ITagAliasRegistry const& getTagAliasRegistry() const = 0;
+ virtual IExceptionTranslatorRegistry const& getExceptionTranslatorRegistry() const = 0;
+
+ virtual StartupExceptionRegistry const& getStartupExceptionRegistry() const = 0;
+ };
+
+ struct IMutableRegistryHub {
+ virtual ~IMutableRegistryHub();
+ virtual void registerReporter( std::string const& name, IReporterFactoryPtr const& factory ) = 0;
+ virtual void registerListener( IReporterFactoryPtr const& factory ) = 0;
+ virtual void registerTest( TestCase const& testInfo ) = 0;
+ virtual void registerTranslator( const IExceptionTranslator* translator ) = 0;
+ virtual void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) = 0;
+ virtual void registerStartupException() noexcept = 0;
+ virtual IMutableEnumValuesRegistry& getMutableEnumValuesRegistry() = 0;
+ };
+
+ IRegistryHub const& getRegistryHub();
+ IMutableRegistryHub& getMutableRegistryHub();
+ void cleanUp();
+ std::string translateActiveException();
+
+}
+
+// end catch_interfaces_registry_hub.h
+#if defined(CATCH_CONFIG_DISABLE)
+ #define INTERNAL_CATCH_TRANSLATE_EXCEPTION_NO_REG( translatorName, signature) \
+ static std::string translatorName( signature )
+#endif
+
+#include <exception>
+#include <string>
+#include <vector>
+
+namespace Catch {
+ using exceptionTranslateFunction = std::string(*)();
+
+ struct IExceptionTranslator;
+ using ExceptionTranslators = std::vector<std::unique_ptr<IExceptionTranslator const>>;
+
+ struct IExceptionTranslator {
+ virtual ~IExceptionTranslator();
+ virtual std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const = 0;
+ };
+
+ struct IExceptionTranslatorRegistry {
+ virtual ~IExceptionTranslatorRegistry();
+
+ virtual std::string translateActiveException() const = 0;
+ };
+
+ class ExceptionTranslatorRegistrar {
+ template<typename T>
+ class ExceptionTranslator : public IExceptionTranslator {
+ public:
+
+ ExceptionTranslator( std::string(*translateFunction)( T& ) )
+ : m_translateFunction( translateFunction )
+ {}
+
+ std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const override {
+#if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ return "";
+#else
+ try {
+ if( it == itEnd )
+ std::rethrow_exception(std::current_exception());
+ else
+ return (*it)->translate( it+1, itEnd );
+ }
+ catch( T& ex ) {
+ return m_translateFunction( ex );
+ }
+#endif
+ }
+
+ protected:
+ std::string(*m_translateFunction)( T& );
+ };
+
+ public:
+ template<typename T>
+ ExceptionTranslatorRegistrar( std::string(*translateFunction)( T& ) ) {
+ getMutableRegistryHub().registerTranslator
+ ( new ExceptionTranslator<T>( translateFunction ) );
+ }
+ };
+}
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_TRANSLATE_EXCEPTION2( translatorName, signature ) \
+ static std::string translatorName( signature ); \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ Catch::ExceptionTranslatorRegistrar INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionRegistrar )( &translatorName ); } \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+ static std::string translatorName( signature )
+
+#define INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION2( INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ), signature )
+
+// end catch_interfaces_exception.h
+// start catch_approx.h
+
+#include <type_traits>
+
+namespace Catch {
+namespace Detail {
+
+ class Approx {
+ private:
+ bool equalityComparisonImpl(double other) const;
+ // Validates the new margin (margin >= 0)
+ // out-of-line to avoid including stdexcept in the header
+ void setMargin(double margin);
+ // Validates the new epsilon (0 < epsilon < 1)
+ // out-of-line to avoid including stdexcept in the header
+ void setEpsilon(double epsilon);
+
+ public:
+ explicit Approx ( double value );
+
+ static Approx custom();
+
+ Approx operator-() const;
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ Approx operator()( T const& value ) const {
+ Approx approx( static_cast<double>(value) );
+ approx.m_epsilon = m_epsilon;
+ approx.m_margin = m_margin;
+ approx.m_scale = m_scale;
+ return approx;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ explicit Approx( T const& value ): Approx(static_cast<double>(value))
+ {}
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator == ( const T& lhs, Approx const& rhs ) {
+ auto lhs_v = static_cast<double>(lhs);
+ return rhs.equalityComparisonImpl(lhs_v);
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator == ( Approx const& lhs, const T& rhs ) {
+ return operator==( rhs, lhs );
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator != ( T const& lhs, Approx const& rhs ) {
+ return !operator==( lhs, rhs );
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator != ( Approx const& lhs, T const& rhs ) {
+ return !operator==( rhs, lhs );
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator <= ( T const& lhs, Approx const& rhs ) {
+ return static_cast<double>(lhs) < rhs.m_value || lhs == rhs;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator <= ( Approx const& lhs, T const& rhs ) {
+ return lhs.m_value < static_cast<double>(rhs) || lhs == rhs;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator >= ( T const& lhs, Approx const& rhs ) {
+ return static_cast<double>(lhs) > rhs.m_value || lhs == rhs;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ friend bool operator >= ( Approx const& lhs, T const& rhs ) {
+ return lhs.m_value > static_cast<double>(rhs) || lhs == rhs;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ Approx& epsilon( T const& newEpsilon ) {
+ double epsilonAsDouble = static_cast<double>(newEpsilon);
+ setEpsilon(epsilonAsDouble);
+ return *this;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ Approx& margin( T const& newMargin ) {
+ double marginAsDouble = static_cast<double>(newMargin);
+ setMargin(marginAsDouble);
+ return *this;
+ }
+
+ template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ Approx& scale( T const& newScale ) {
+ m_scale = static_cast<double>(newScale);
+ return *this;
+ }
+
+ std::string toString() const;
+
+ private:
+ double m_epsilon;
+ double m_margin;
+ double m_scale;
+ double m_value;
+ };
+} // end namespace Detail
+
+namespace literals {
+ Detail::Approx operator "" _a(long double val);
+ Detail::Approx operator "" _a(unsigned long long val);
+} // end namespace literals
+
+template<>
+struct StringMaker<Catch::Detail::Approx> {
+ static std::string convert(Catch::Detail::Approx const& value);
+};
+
+} // end namespace Catch
+
+// end catch_approx.h
+// start catch_string_manip.h
+
+#include <string>
+#include <iosfwd>
+#include <vector>
+
+namespace Catch {
+
+ bool startsWith( std::string const& s, std::string const& prefix );
+ bool startsWith( std::string const& s, char prefix );
+ bool endsWith( std::string const& s, std::string const& suffix );
+ bool endsWith( std::string const& s, char suffix );
+ bool contains( std::string const& s, std::string const& infix );
+ void toLowerInPlace( std::string& s );
+ std::string toLower( std::string const& s );
+ //! Returns a new string without whitespace at the start/end
+ std::string trim( std::string const& str );
+ //! Returns a substring of the original ref without whitespace. Beware lifetimes!
+ StringRef trim(StringRef ref);
+
+ // !!! Be aware, returns refs into original string - make sure original string outlives them
+ std::vector<StringRef> splitStringRef( StringRef str, char delimiter );
+ bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis );
+
+ struct pluralise {
+ pluralise( std::size_t count, std::string const& label );
+
+ friend std::ostream& operator << ( std::ostream& os, pluralise const& pluraliser );
+
+ std::size_t m_count;
+ std::string m_label;
+ };
+}
+
+// end catch_string_manip.h
+#ifndef CATCH_CONFIG_DISABLE_MATCHERS
+// start catch_capture_matchers.h
+
+// start catch_matchers.h
+
+#include <string>
+#include <vector>
+
+namespace Catch {
+namespace Matchers {
+ namespace Impl {
+
+ template<typename ArgT> struct MatchAllOf;
+ template<typename ArgT> struct MatchAnyOf;
+ template<typename ArgT> struct MatchNotOf;
+
+ class MatcherUntypedBase {
+ public:
+ MatcherUntypedBase() = default;
+ MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
+ MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = delete;
+ std::string toString() const;
+
+ protected:
+ virtual ~MatcherUntypedBase();
+ virtual std::string describe() const = 0;
+ mutable std::string m_cachedToString;
+ };
+
+#ifdef __clang__
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wnon-virtual-dtor"
+#endif
+
+ template<typename ObjectT>
+ struct MatcherMethod {
+ virtual bool match( ObjectT const& arg ) const = 0;
+ };
+
+#if defined(__OBJC__)
+ // Hack to fix Catch GH issue #1661. Could use id for generic Object support.
+ // use of const for Object pointers is very uncommon and under ARC it causes some kind of signature mismatch that breaks compilation
+ template<>
+ struct MatcherMethod<NSString*> {
+ virtual bool match( NSString* arg ) const = 0;
+ };
+#endif
+
+#ifdef __clang__
+# pragma clang diagnostic pop
+#endif
+
+ template<typename T>
+ struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
+
+ MatchAllOf<T> operator && ( MatcherBase const& other ) const;
+ MatchAnyOf<T> operator || ( MatcherBase const& other ) const;
+ MatchNotOf<T> operator ! () const;
+ };
+
+ template<typename ArgT>
+ struct MatchAllOf : MatcherBase<ArgT> {
+ bool match( ArgT const& arg ) const override {
+ for( auto matcher : m_matchers ) {
+ if (!matcher->match(arg))
+ return false;
+ }
+ return true;
+ }
+ std::string describe() const override {
+ std::string description;
+ description.reserve( 4 + m_matchers.size()*32 );
+ description += "( ";
+ bool first = true;
+ for( auto matcher : m_matchers ) {
+ if( first )
+ first = false;
+ else
+ description += " and ";
+ description += matcher->toString();
+ }
+ description += " )";
+ return description;
+ }
+
+ MatchAllOf<ArgT> operator && ( MatcherBase<ArgT> const& other ) {
+ auto copy(*this);
+ copy.m_matchers.push_back( &other );
+ return copy;
+ }
+
+ std::vector<MatcherBase<ArgT> const*> m_matchers;
+ };
+ template<typename ArgT>
+ struct MatchAnyOf : MatcherBase<ArgT> {
+
+ bool match( ArgT const& arg ) const override {
+ for( auto matcher : m_matchers ) {
+ if (matcher->match(arg))
+ return true;
+ }
+ return false;
+ }
+ std::string describe() const override {
+ std::string description;
+ description.reserve( 4 + m_matchers.size()*32 );
+ description += "( ";
+ bool first = true;
+ for( auto matcher : m_matchers ) {
+ if( first )
+ first = false;
+ else
+ description += " or ";
+ description += matcher->toString();
+ }
+ description += " )";
+ return description;
+ }
+
+ MatchAnyOf<ArgT> operator || ( MatcherBase<ArgT> const& other ) {
+ auto copy(*this);
+ copy.m_matchers.push_back( &other );
+ return copy;
+ }
+
+ std::vector<MatcherBase<ArgT> const*> m_matchers;
+ };
+
+ template<typename ArgT>
+ struct MatchNotOf : MatcherBase<ArgT> {
+
+ MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_underlyingMatcher( underlyingMatcher ) {}
+
+ bool match( ArgT const& arg ) const override {
+ return !m_underlyingMatcher.match( arg );
+ }
+
+ std::string describe() const override {
+ return "not " + m_underlyingMatcher.toString();
+ }
+ MatcherBase<ArgT> const& m_underlyingMatcher;
+ };
+
+ template<typename T>
+ MatchAllOf<T> MatcherBase<T>::operator && ( MatcherBase const& other ) const {
+ return MatchAllOf<T>() && *this && other;
+ }
+ template<typename T>
+ MatchAnyOf<T> MatcherBase<T>::operator || ( MatcherBase const& other ) const {
+ return MatchAnyOf<T>() || *this || other;
+ }
+ template<typename T>
+ MatchNotOf<T> MatcherBase<T>::operator ! () const {
+ return MatchNotOf<T>( *this );
+ }
+
+ } // namespace Impl
+
+} // namespace Matchers
+
+using namespace Matchers;
+using Matchers::Impl::MatcherBase;
+
+} // namespace Catch
+
+// end catch_matchers.h
+// start catch_matchers_exception.hpp
+
+namespace Catch {
+namespace Matchers {
+namespace Exception {
+
+class ExceptionMessageMatcher : public MatcherBase<std::exception> {
+ std::string m_message;
+public:
+
+ ExceptionMessageMatcher(std::string const& message):
+ m_message(message)
+ {}
+
+ bool match(std::exception const& ex) const override;
+
+ std::string describe() const override;
+};
+
+} // namespace Exception
+
+Exception::ExceptionMessageMatcher Message(std::string const& message);
+
+} // namespace Matchers
+} // namespace Catch
+
+// end catch_matchers_exception.hpp
+// start catch_matchers_floating.h
+
+namespace Catch {
+namespace Matchers {
+
+ namespace Floating {
+
+ enum class FloatingPointKind : uint8_t;
+
+ struct WithinAbsMatcher : MatcherBase<double> {
+ WithinAbsMatcher(double target, double margin);
+ bool match(double const& matchee) const override;
+ std::string describe() const override;
+ private:
+ double m_target;
+ double m_margin;
+ };
+
+ struct WithinUlpsMatcher : MatcherBase<double> {
+ WithinUlpsMatcher(double target, uint64_t ulps, FloatingPointKind baseType);
+ bool match(double const& matchee) const override;
+ std::string describe() const override;
+ private:
+ double m_target;
+ uint64_t m_ulps;
+ FloatingPointKind m_type;
+ };
+
+ // Given IEEE-754 format for floats and doubles, we can assume
+ // that float -> double promotion is lossless. Given this, we can
+ // assume that if we do the standard relative comparison of
+ // |lhs - rhs| <= epsilon * max(fabs(lhs), fabs(rhs)), then we get
+ // the same result if we do this for floats, as if we do this for
+ // doubles that were promoted from floats.
+ struct WithinRelMatcher : MatcherBase<double> {
+ WithinRelMatcher(double target, double epsilon);
+ bool match(double const& matchee) const override;
+ std::string describe() const override;
+ private:
+ double m_target;
+ double m_epsilon;
+ };
+
+ } // namespace Floating
+
+ // The following functions create the actual matcher objects.
+ // This allows the types to be inferred
+ Floating::WithinUlpsMatcher WithinULP(double target, uint64_t maxUlpDiff);
+ Floating::WithinUlpsMatcher WithinULP(float target, uint64_t maxUlpDiff);
+ Floating::WithinAbsMatcher WithinAbs(double target, double margin);
+ Floating::WithinRelMatcher WithinRel(double target, double eps);
+ // defaults epsilon to 100*numeric_limits<double>::epsilon()
+ Floating::WithinRelMatcher WithinRel(double target);
+ Floating::WithinRelMatcher WithinRel(float target, float eps);
+ // defaults epsilon to 100*numeric_limits<float>::epsilon()
+ Floating::WithinRelMatcher WithinRel(float target);
+
+} // namespace Matchers
+} // namespace Catch
+
+// end catch_matchers_floating.h
+// start catch_matchers_generic.hpp
+
+#include <functional>
+#include <string>
+
+namespace Catch {
+namespace Matchers {
+namespace Generic {
+
+namespace Detail {
+ std::string finalizeDescription(const std::string& desc);
+}
+
+template <typename T>
+class PredicateMatcher : public MatcherBase<T> {
+ std::function<bool(T const&)> m_predicate;
+ std::string m_description;
+public:
+
+ PredicateMatcher(std::function<bool(T const&)> const& elem, std::string const& descr)
+ :m_predicate(std::move(elem)),
+ m_description(Detail::finalizeDescription(descr))
+ {}
+
+ bool match( T const& item ) const override {
+ return m_predicate(item);
+ }
+
+ std::string describe() const override {
+ return m_description;
+ }
+};
+
+} // namespace Generic
+
+ // The following functions create the actual matcher objects.
+ // The user has to explicitly specify type to the function, because
+ // inferring std::function<bool(T const&)> is hard (but possible) and
+ // requires a lot of TMP.
+ template<typename T>
+ Generic::PredicateMatcher<T> Predicate(std::function<bool(T const&)> const& predicate, std::string const& description = "") {
+ return Generic::PredicateMatcher<T>(predicate, description);
+ }
+
+} // namespace Matchers
+} // namespace Catch
+
+// end catch_matchers_generic.hpp
+// start catch_matchers_string.h
+
+#include <string>
+
+namespace Catch {
+namespace Matchers {
+
+ namespace StdString {
+
+ struct CasedString
+ {
+ CasedString( std::string const& str, CaseSensitive::Choice caseSensitivity );
+ std::string adjustString( std::string const& str ) const;
+ std::string caseSensitivitySuffix() const;
+
+ CaseSensitive::Choice m_caseSensitivity;
+ std::string m_str;
+ };
+
+ struct StringMatcherBase : MatcherBase<std::string> {
+ StringMatcherBase( std::string const& operation, CasedString const& comparator );
+ std::string describe() const override;
+
+ CasedString m_comparator;
+ std::string m_operation;
+ };
+
+ struct EqualsMatcher : StringMatcherBase {
+ EqualsMatcher( CasedString const& comparator );
+ bool match( std::string const& source ) const override;
+ };
+ struct ContainsMatcher : StringMatcherBase {
+ ContainsMatcher( CasedString const& comparator );
+ bool match( std::string const& source ) const override;
+ };
+ struct StartsWithMatcher : StringMatcherBase {
+ StartsWithMatcher( CasedString const& comparator );
+ bool match( std::string const& source ) const override;
+ };
+ struct EndsWithMatcher : StringMatcherBase {
+ EndsWithMatcher( CasedString const& comparator );
+ bool match( std::string const& source ) const override;
+ };
+
+ struct RegexMatcher : MatcherBase<std::string> {
+ RegexMatcher( std::string regex, CaseSensitive::Choice caseSensitivity );
+ bool match( std::string const& matchee ) const override;
+ std::string describe() const override;
+
+ private:
+ std::string m_regex;
+ CaseSensitive::Choice m_caseSensitivity;
+ };
+
+ } // namespace StdString
+
+ // The following functions create the actual matcher objects.
+ // This allows the types to be inferred
+
+ StdString::EqualsMatcher Equals( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes );
+ StdString::ContainsMatcher Contains( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes );
+ StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes );
+ StdString::StartsWithMatcher StartsWith( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes );
+ StdString::RegexMatcher Matches( std::string const& regex, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes );
+
+} // namespace Matchers
+} // namespace Catch
+
+// end catch_matchers_string.h
+// start catch_matchers_vector.h
+
+#include <algorithm>
+
+namespace Catch {
+namespace Matchers {
+
+ namespace Vector {
+ template<typename T, typename Alloc>
+ struct ContainsElementMatcher : MatcherBase<std::vector<T, Alloc>> {
+
+ ContainsElementMatcher(T const &comparator) : m_comparator( comparator) {}
+
+ bool match(std::vector<T, Alloc> const &v) const override {
+ for (auto const& el : v) {
+ if (el == m_comparator) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ std::string describe() const override {
+ return "Contains: " + ::Catch::Detail::stringify( m_comparator );
+ }
+
+ T const& m_comparator;
+ };
+
+ template<typename T, typename AllocComp, typename AllocMatch>
+ struct ContainsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
+
+ ContainsMatcher(std::vector<T, AllocComp> const &comparator) : m_comparator( comparator ) {}
+
+ bool match(std::vector<T, AllocMatch> const &v) const override {
+ // !TBD: see note in EqualsMatcher
+ if (m_comparator.size() > v.size())
+ return false;
+ for (auto const& comparator : m_comparator) {
+ auto present = false;
+ for (const auto& el : v) {
+ if (el == comparator) {
+ present = true;
+ break;
+ }
+ }
+ if (!present) {
+ return false;
+ }
+ }
+ return true;
+ }
+ std::string describe() const override {
+ return "Contains: " + ::Catch::Detail::stringify( m_comparator );
+ }
+
+ std::vector<T, AllocComp> const& m_comparator;
+ };
+
+ template<typename T, typename AllocComp, typename AllocMatch>
+ struct EqualsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
+
+ EqualsMatcher(std::vector<T, AllocComp> const &comparator) : m_comparator( comparator ) {}
+
+ bool match(std::vector<T, AllocMatch> const &v) const override {
+ // !TBD: This currently works if all elements can be compared using !=
+ // - a more general approach would be via a compare template that defaults
+ // to using !=. but could be specialised for, e.g. std::vector<T, Alloc> etc
+ // - then just call that directly
+ if (m_comparator.size() != v.size())
+ return false;
+ for (std::size_t i = 0; i < v.size(); ++i)
+ if (m_comparator[i] != v[i])
+ return false;
+ return true;
+ }
+ std::string describe() const override {
+ return "Equals: " + ::Catch::Detail::stringify( m_comparator );
+ }
+ std::vector<T, AllocComp> const& m_comparator;
+ };
+
+ template<typename T, typename AllocComp, typename AllocMatch>
+ struct ApproxMatcher : MatcherBase<std::vector<T, AllocMatch>> {
+
+ ApproxMatcher(std::vector<T, AllocComp> const& comparator) : m_comparator( comparator ) {}
+
+ bool match(std::vector<T, AllocMatch> const &v) const override {
+ if (m_comparator.size() != v.size())
+ return false;
+ for (std::size_t i = 0; i < v.size(); ++i)
+ if (m_comparator[i] != approx(v[i]))
+ return false;
+ return true;
+ }
+ std::string describe() const override {
+ return "is approx: " + ::Catch::Detail::stringify( m_comparator );
+ }
+ template <typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ ApproxMatcher& epsilon( T const& newEpsilon ) {
+ approx.epsilon(newEpsilon);
+ return *this;
+ }
+ template <typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ ApproxMatcher& margin( T const& newMargin ) {
+ approx.margin(newMargin);
+ return *this;
+ }
+ template <typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
+ ApproxMatcher& scale( T const& newScale ) {
+ approx.scale(newScale);
+ return *this;
+ }
+
+ std::vector<T, AllocComp> const& m_comparator;
+ mutable Catch::Detail::Approx approx = Catch::Detail::Approx::custom();
+ };
+
+ template<typename T, typename AllocComp, typename AllocMatch>
+ struct UnorderedEqualsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
+ UnorderedEqualsMatcher(std::vector<T, AllocComp> const& target) : m_target(target) {}
+ bool match(std::vector<T, AllocMatch> const& vec) const override {
+ if (m_target.size() != vec.size()) {
+ return false;
+ }
+ return std::is_permutation(m_target.begin(), m_target.end(), vec.begin());
+ }
+
+ std::string describe() const override {
+ return "UnorderedEquals: " + ::Catch::Detail::stringify(m_target);
+ }
+ private:
+ std::vector<T, AllocComp> const& m_target;
+ };
+
+ } // namespace Vector
+
+ // The following functions create the actual matcher objects.
+ // This allows the types to be inferred
+
+ template<typename T, typename AllocComp = std::allocator<T>, typename AllocMatch = AllocComp>
+ Vector::ContainsMatcher<T, AllocComp, AllocMatch> Contains( std::vector<T, AllocComp> const& comparator ) {
+ return Vector::ContainsMatcher<T, AllocComp, AllocMatch>( comparator );
+ }
+
+ template<typename T, typename Alloc = std::allocator<T>>
+ Vector::ContainsElementMatcher<T, Alloc> VectorContains( T const& comparator ) {
+ return Vector::ContainsElementMatcher<T, Alloc>( comparator );
+ }
+
+ template<typename T, typename AllocComp = std::allocator<T>, typename AllocMatch = AllocComp>
+ Vector::EqualsMatcher<T, AllocComp, AllocMatch> Equals( std::vector<T, AllocComp> const& comparator ) {
+ return Vector::EqualsMatcher<T, AllocComp, AllocMatch>( comparator );
+ }
+
+ template<typename T, typename AllocComp = std::allocator<T>, typename AllocMatch = AllocComp>
+ Vector::ApproxMatcher<T, AllocComp, AllocMatch> Approx( std::vector<T, AllocComp> const& comparator ) {
+ return Vector::ApproxMatcher<T, AllocComp, AllocMatch>( comparator );
+ }
+
+ template<typename T, typename AllocComp = std::allocator<T>, typename AllocMatch = AllocComp>
+ Vector::UnorderedEqualsMatcher<T, AllocComp, AllocMatch> UnorderedEquals(std::vector<T, AllocComp> const& target) {
+ return Vector::UnorderedEqualsMatcher<T, AllocComp, AllocMatch>( target );
+ }
+
+} // namespace Matchers
+} // namespace Catch
+
+// end catch_matchers_vector.h
+namespace Catch {
+
+ template<typename ArgT, typename MatcherT>
+ class MatchExpr : public ITransientExpression {
+ ArgT const& m_arg;
+ MatcherT m_matcher;
+ StringRef m_matcherString;
+ public:
+ MatchExpr( ArgT const& arg, MatcherT const& matcher, StringRef const& matcherString )
+ : ITransientExpression{ true, matcher.match( arg ) },
+ m_arg( arg ),
+ m_matcher( matcher ),
+ m_matcherString( matcherString )
+ {}
+
+ void streamReconstructedExpression( std::ostream &os ) const override {
+ auto matcherAsString = m_matcher.toString();
+ os << Catch::Detail::stringify( m_arg ) << ' ';
+ if( matcherAsString == Detail::unprintableString )
+ os << m_matcherString;
+ else
+ os << matcherAsString;
+ }
+ };
+
+ using StringMatcher = Matchers::Impl::MatcherBase<std::string>;
+
+ void handleExceptionMatchExpr( AssertionHandler& handler, StringMatcher const& matcher, StringRef const& matcherString );
+
+ template<typename ArgT, typename MatcherT>
+ auto makeMatchExpr( ArgT const& arg, MatcherT const& matcher, StringRef const& matcherString ) -> MatchExpr<ArgT, MatcherT> {
+ return MatchExpr<ArgT, MatcherT>( arg, matcher, matcherString );
+ }
+
+} // namespace Catch
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CHECK_THAT( macroName, matcher, resultDisposition, arg ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(arg) ", " CATCH_INTERNAL_STRINGIFY(matcher), resultDisposition ); \
+ INTERNAL_CATCH_TRY { \
+ catchAssertionHandler.handleExpr( Catch::makeMatchExpr( arg, matcher, #matcher##_catch_sr ) ); \
+ } INTERNAL_CATCH_CATCH( catchAssertionHandler ) \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+///////////////////////////////////////////////////////////////////////////////
+#define INTERNAL_CATCH_THROWS_MATCHES( macroName, exceptionType, resultDisposition, matcher, ... ) \
+ do { \
+ Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__) ", " CATCH_INTERNAL_STRINGIFY(exceptionType) ", " CATCH_INTERNAL_STRINGIFY(matcher), resultDisposition ); \
+ if( catchAssertionHandler.allowThrows() ) \
+ try { \
+ static_cast<void>(__VA_ARGS__ ); \
+ catchAssertionHandler.handleUnexpectedExceptionNotThrown(); \
+ } \
+ catch( exceptionType const& ex ) { \
+ catchAssertionHandler.handleExpr( Catch::makeMatchExpr( ex, matcher, #matcher##_catch_sr ) ); \
+ } \
+ catch( ... ) { \
+ catchAssertionHandler.handleUnexpectedInflightException(); \
+ } \
+ else \
+ catchAssertionHandler.handleThrowingCallSkipped(); \
+ INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+ } while( false )
+
+// end catch_capture_matchers.h
+#endif
+// start catch_generators.hpp
+
+// start catch_interfaces_generatortracker.h
+
+
+#include <memory>
+
+namespace Catch {
+
+ namespace Generators {
+ class GeneratorUntypedBase {
+ public:
+ GeneratorUntypedBase() = default;
+ virtual ~GeneratorUntypedBase();
+ // Attempts to move the generator to the next element
+ //
+ // Returns true iff the move succeeded (and a valid element
+ // can be retrieved).
+ virtual bool next() = 0;
+ };
+ using GeneratorBasePtr = std::unique_ptr<GeneratorUntypedBase>;
+
+ } // namespace Generators
+
+ struct IGeneratorTracker {
+ virtual ~IGeneratorTracker();
+ virtual auto hasGenerator() const -> bool = 0;
+ virtual auto getGenerator() const -> Generators::GeneratorBasePtr const& = 0;
+ virtual void setGenerator( Generators::GeneratorBasePtr&& generator ) = 0;
+ };
+
+} // namespace Catch
+
+// end catch_interfaces_generatortracker.h
+// start catch_enforce.h
+
+#include <exception>
+
+namespace Catch {
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ template <typename Ex>
+ [[noreturn]]
+ void throw_exception(Ex const& e) {
+ throw e;
+ }
+#else // ^^ Exceptions are enabled // Exceptions are disabled vv
+ [[noreturn]]
+ void throw_exception(std::exception const& e);
+#endif
+
+ [[noreturn]]
+ void throw_logic_error(std::string const& msg);
+ [[noreturn]]
+ void throw_domain_error(std::string const& msg);
+ [[noreturn]]
+ void throw_runtime_error(std::string const& msg);
+
+} // namespace Catch;
+
+#define CATCH_MAKE_MSG(...) \
+ (Catch::ReusableStringStream() << __VA_ARGS__).str()
+
+#define CATCH_INTERNAL_ERROR(...) \
+ Catch::throw_logic_error(CATCH_MAKE_MSG( CATCH_INTERNAL_LINEINFO << ": Internal Catch2 error: " << __VA_ARGS__))
+
+#define CATCH_ERROR(...) \
+ Catch::throw_domain_error(CATCH_MAKE_MSG( __VA_ARGS__ ))
+
+#define CATCH_RUNTIME_ERROR(...) \
+ Catch::throw_runtime_error(CATCH_MAKE_MSG( __VA_ARGS__ ))
+
+#define CATCH_ENFORCE( condition, ... ) \
+ do{ if( !(condition) ) CATCH_ERROR( __VA_ARGS__ ); } while(false)
+
+// end catch_enforce.h
+#include <memory>
+#include <vector>
+#include <cassert>
+
+#include <utility>
+#include <exception>
+
+namespace Catch {
+
+class GeneratorException : public std::exception {
+ const char* const m_msg = "";
+
+public:
+ GeneratorException(const char* msg):
+ m_msg(msg)
+ {}
+
+ const char* what() const noexcept override final;
+};
+
+namespace Generators {
+
+ // !TBD move this into its own location?
+ namespace pf{
+ template<typename T, typename... Args>
+ std::unique_ptr<T> make_unique( Args&&... args ) {
+ return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
+ }
+ }
+
+ template<typename T>
+ struct IGenerator : GeneratorUntypedBase {
+ virtual ~IGenerator() = default;
+
+ // Returns the current element of the generator
+ //
+ // \Precondition The generator is either freshly constructed,
+ // or the last call to `next()` returned true
+ virtual T const& get() const = 0;
+ using type = T;
+ };
+
+ template<typename T>
+ class SingleValueGenerator final : public IGenerator<T> {
+ T m_value;
+ public:
+ SingleValueGenerator(T&& value) : m_value(std::move(value)) {}
+
+ T const& get() const override {
+ return m_value;
+ }
+ bool next() override {
+ return false;
+ }
+ };
+
+ template<typename T>
+ class FixedValuesGenerator final : public IGenerator<T> {
+ static_assert(!std::is_same<T, bool>::value,
+ "FixedValuesGenerator does not support bools because of std::vector<bool>"
+ "specialization, use SingleValue Generator instead.");
+ std::vector<T> m_values;
+ size_t m_idx = 0;
+ public:
+ FixedValuesGenerator( std::initializer_list<T> values ) : m_values( values ) {}
+
+ T const& get() const override {
+ return m_values[m_idx];
+ }
+ bool next() override {
+ ++m_idx;
+ return m_idx < m_values.size();
+ }
+ };
+
+ template <typename T>
+ class GeneratorWrapper final {
+ std::unique_ptr<IGenerator<T>> m_generator;
+ public:
+ GeneratorWrapper(std::unique_ptr<IGenerator<T>> generator):
+ m_generator(std::move(generator))
+ {}
+ T const& get() const {
+ return m_generator->get();
+ }
+ bool next() {
+ return m_generator->next();
+ }
+ };
+
+ template <typename T>
+ GeneratorWrapper<T> value(T&& value) {
+ return GeneratorWrapper<T>(pf::make_unique<SingleValueGenerator<T>>(std::forward<T>(value)));
+ }
+ template <typename T>
+ GeneratorWrapper<T> values(std::initializer_list<T> values) {
+ return GeneratorWrapper<T>(pf::make_unique<FixedValuesGenerator<T>>(values));
+ }
+
+ template<typename T>
+ class Generators : public IGenerator<T> {
+ std::vector<GeneratorWrapper<T>> m_generators;
+ size_t m_current = 0;
+
+ void populate(GeneratorWrapper<T>&& generator) {
+ m_generators.emplace_back(std::move(generator));
+ }
+ void populate(T&& val) {
+ m_generators.emplace_back(value(std::forward<T>(val)));
+ }
+ template<typename U>
+ void populate(U&& val) {
+ populate(T(std::forward<U>(val)));
+ }
+ template<typename U, typename... Gs>
+ void populate(U&& valueOrGenerator, Gs &&... moreGenerators) {
+ populate(std::forward<U>(valueOrGenerator));
+ populate(std::forward<Gs>(moreGenerators)...);
+ }
+
+ public:
+ template <typename... Gs>
+ Generators(Gs &&... moreGenerators) {
+ m_generators.reserve(sizeof...(Gs));
+ populate(std::forward<Gs>(moreGenerators)...);
+ }
+
+ T const& get() const override {
+ return m_generators[m_current].get();
+ }
+
+ bool next() override {
+ if (m_current >= m_generators.size()) {
+ return false;
+ }
+ const bool current_status = m_generators[m_current].next();
+ if (!current_status) {
+ ++m_current;
+ }
+ return m_current < m_generators.size();
+ }
+ };
+
+ template<typename... Ts>
+ GeneratorWrapper<std::tuple<Ts...>> table( std::initializer_list<std::tuple<typename std::decay<Ts>::type...>> tuples ) {
+ return values<std::tuple<Ts...>>( tuples );
+ }
+
+ // Tag type to signal that a generator sequence should convert arguments to a specific type
+ template <typename T>
+ struct as {};
+
+ template<typename T, typename... Gs>
+ auto makeGenerators( GeneratorWrapper<T>&& generator, Gs &&... moreGenerators ) -> Generators<T> {
+ return Generators<T>(std::move(generator), std::forward<Gs>(moreGenerators)...);
+ }
+ template<typename T>
+ auto makeGenerators( GeneratorWrapper<T>&& generator ) -> Generators<T> {
+ return Generators<T>(std::move(generator));
+ }
+ template<typename T, typename... Gs>
+ auto makeGenerators( T&& val, Gs &&... moreGenerators ) -> Generators<T> {
+ return makeGenerators( value( std::forward<T>( val ) ), std::forward<Gs>( moreGenerators )... );
+ }
+ template<typename T, typename U, typename... Gs>
+ auto makeGenerators( as<T>, U&& val, Gs &&... moreGenerators ) -> Generators<T> {
+ return makeGenerators( value( T( std::forward<U>( val ) ) ), std::forward<Gs>( moreGenerators )... );
+ }
+
+ auto acquireGeneratorTracker( StringRef generatorName, SourceLineInfo const& lineInfo ) -> IGeneratorTracker&;
+
+ template<typename L>
+ // Note: The type after -> is weird, because VS2015 cannot parse
+ // the expression used in the typedef inside, when it is in
+ // return type. Yeah.
+ auto generate( StringRef generatorName, SourceLineInfo const& lineInfo, L const& generatorExpression ) -> decltype(std::declval<decltype(generatorExpression())>().get()) {
+ using UnderlyingType = typename decltype(generatorExpression())::type;
+
+ IGeneratorTracker& tracker = acquireGeneratorTracker( generatorName, lineInfo );
+ if (!tracker.hasGenerator()) {
+ tracker.setGenerator(pf::make_unique<Generators<UnderlyingType>>(generatorExpression()));
+ }
+
+ auto const& generator = static_cast<IGenerator<UnderlyingType> const&>( *tracker.getGenerator() );
+ return generator.get();
+ }
+
+} // namespace Generators
+} // namespace Catch
+
+#define GENERATE( ... ) \
+ Catch::Generators::generate( INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_UNIQUE_NAME(generator)), \
+ CATCH_INTERNAL_LINEINFO, \
+ [ ]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) //NOLINT(google-build-using-namespace)
+#define GENERATE_COPY( ... ) \
+ Catch::Generators::generate( INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_UNIQUE_NAME(generator)), \
+ CATCH_INTERNAL_LINEINFO, \
+ [=]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) //NOLINT(google-build-using-namespace)
+#define GENERATE_REF( ... ) \
+ Catch::Generators::generate( INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_UNIQUE_NAME(generator)), \
+ CATCH_INTERNAL_LINEINFO, \
+ [&]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) //NOLINT(google-build-using-namespace)
+
+// end catch_generators.hpp
+// start catch_generators_generic.hpp
+
+namespace Catch {
+namespace Generators {
+
+ template <typename T>
+ class TakeGenerator : public IGenerator<T> {
+ GeneratorWrapper<T> m_generator;
+ size_t m_returned = 0;
+ size_t m_target;
+ public:
+ TakeGenerator(size_t target, GeneratorWrapper<T>&& generator):
+ m_generator(std::move(generator)),
+ m_target(target)
+ {
+ assert(target != 0 && "Empty generators are not allowed");
+ }
+ T const& get() const override {
+ return m_generator.get();
+ }
+ bool next() override {
+ ++m_returned;
+ if (m_returned >= m_target) {
+ return false;
+ }
+
+ const auto success = m_generator.next();
+ // If the underlying generator does not contain enough values
+ // then we cut short as well
+ if (!success) {
+ m_returned = m_target;
+ }
+ return success;
+ }
+ };
+
+ template <typename T>
+ GeneratorWrapper<T> take(size_t target, GeneratorWrapper<T>&& generator) {
+ return GeneratorWrapper<T>(pf::make_unique<TakeGenerator<T>>(target, std::move(generator)));
+ }
+
+ template <typename T, typename Predicate>
+ class FilterGenerator : public IGenerator<T> {
+ GeneratorWrapper<T> m_generator;
+ Predicate m_predicate;
+ public:
+ template <typename P = Predicate>
+ FilterGenerator(P&& pred, GeneratorWrapper<T>&& generator):
+ m_generator(std::move(generator)),
+ m_predicate(std::forward<P>(pred))
+ {
+ if (!m_predicate(m_generator.get())) {
+ // It might happen that there are no values that pass the
+ // filter. In that case we throw an exception.
+ auto has_initial_value = nextImpl();
+ if (!has_initial_value) {
+ Catch::throw_exception(GeneratorException("No valid value found in filtered generator"));
+ }
+ }
+ }
+
+ T const& get() const override {
+ return m_generator.get();
+ }
+
+ bool next() override {
+ return nextImpl();
+ }
+
+ private:
+ bool nextImpl() {
+ bool success = m_generator.next();
+ if (!success) {
+ return false;
+ }
+ while (!m_predicate(m_generator.get()) && (success = m_generator.next()) == true);
+ return success;
+ }
+ };
+
+ template <typename T, typename Predicate>
+ GeneratorWrapper<T> filter(Predicate&& pred, GeneratorWrapper<T>&& generator) {
+ return GeneratorWrapper<T>(std::unique_ptr<IGenerator<T>>(pf::make_unique<FilterGenerator<T, Predicate>>(std::forward<Predicate>(pred), std::move(generator))));
+ }
+
+ template <typename T>
+ class RepeatGenerator : public IGenerator<T> {
+ static_assert(!std::is_same<T, bool>::value,
+ "RepeatGenerator currently does not support bools"
+ "because of std::vector<bool> specialization");
+ GeneratorWrapper<T> m_generator;
+ mutable std::vector<T> m_returned;
+ size_t m_target_repeats;
+ size_t m_current_repeat = 0;
+ size_t m_repeat_index = 0;
+ public:
+ RepeatGenerator(size_t repeats, GeneratorWrapper<T>&& generator):
+ m_generator(std::move(generator)),
+ m_target_repeats(repeats)
+ {
+ assert(m_target_repeats > 0 && "Repeat generator must repeat at least once");
+ }
+
+ T const& get() const override {
+ if (m_current_repeat == 0) {
+ m_returned.push_back(m_generator.get());
+ return m_returned.back();
+ }
+ return m_returned[m_repeat_index];
+ }
+
+ bool next() override {
+ // There are 2 basic cases:
+ // 1) We are still reading the generator
+ // 2) We are reading our own cache
+
+ // In the first case, we need to poke the underlying generator.
+ // If it happily moves, we are left in that state, otherwise it is time to start reading from our cache
+ if (m_current_repeat == 0) {
+ const auto success = m_generator.next();
+ if (!success) {
+ ++m_current_repeat;
+ }
+ return m_current_repeat < m_target_repeats;
+ }
+
+ // In the second case, we need to move indices forward and check that we haven't run up against the end
+ ++m_repeat_index;
+ if (m_repeat_index == m_returned.size()) {
+ m_repeat_index = 0;
+ ++m_current_repeat;
+ }
+ return m_current_repeat < m_target_repeats;
+ }
+ };
+
+ template <typename T>
+ GeneratorWrapper<T> repeat(size_t repeats, GeneratorWrapper<T>&& generator) {
+ return GeneratorWrapper<T>(pf::make_unique<RepeatGenerator<T>>(repeats, std::move(generator)));
+ }
+
+ template <typename T, typename U, typename Func>
+ class MapGenerator : public IGenerator<T> {
+ // TBD: provide static assert for mapping function, for friendly error message
+ GeneratorWrapper<U> m_generator;
+ Func m_function;
+ // To avoid returning dangling reference, we have to save the values
+ T m_cache;
+ public:
+ template <typename F2 = Func>
+ MapGenerator(F2&& function, GeneratorWrapper<U>&& generator) :
+ m_generator(std::move(generator)),
+ m_function(std::forward<F2>(function)),
+ m_cache(m_function(m_generator.get()))
+ {}
+
+ T const& get() const override {
+ return m_cache;
+ }
+ bool next() override {
+ const auto success = m_generator.next();
+ if (success) {
+ m_cache = m_function(m_generator.get());
+ }
+ return success;
+ }
+ };
+
+ template <typename Func, typename U, typename T = FunctionReturnType<Func, U>>
+ GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<U>&& generator) {
+ return GeneratorWrapper<T>(
+ pf::make_unique<MapGenerator<T, U, Func>>(std::forward<Func>(function), std::move(generator))
+ );
+ }
+
+ template <typename T, typename U, typename Func>
+ GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<U>&& generator) {
+ return GeneratorWrapper<T>(
+ pf::make_unique<MapGenerator<T, U, Func>>(std::forward<Func>(function), std::move(generator))
+ );
+ }
+
+ template <typename T>
+ class ChunkGenerator final : public IGenerator<std::vector<T>> {
+ std::vector<T> m_chunk;
+ size_t m_chunk_size;
+ GeneratorWrapper<T> m_generator;
+ bool m_used_up = false;
+ public:
+ ChunkGenerator(size_t size, GeneratorWrapper<T> generator) :
+ m_chunk_size(size), m_generator(std::move(generator))
+ {
+ m_chunk.reserve(m_chunk_size);
+ if (m_chunk_size != 0) {
+ m_chunk.push_back(m_generator.get());
+ for (size_t i = 1; i < m_chunk_size; ++i) {
+ if (!m_generator.next()) {
+ Catch::throw_exception(GeneratorException("Not enough values to initialize the first chunk"));
+ }
+ m_chunk.push_back(m_generator.get());
+ }
+ }
+ }
+ std::vector<T> const& get() const override {
+ return m_chunk;
+ }
+ bool next() override {
+ m_chunk.clear();
+ for (size_t idx = 0; idx < m_chunk_size; ++idx) {
+ if (!m_generator.next()) {
+ return false;
+ }
+ m_chunk.push_back(m_generator.get());
+ }
+ return true;
+ }
+ };
+
+ template <typename T>
+ GeneratorWrapper<std::vector<T>> chunk(size_t size, GeneratorWrapper<T>&& generator) {
+ return GeneratorWrapper<std::vector<T>>(
+ pf::make_unique<ChunkGenerator<T>>(size, std::move(generator))
+ );
+ }
+
+} // namespace Generators
+} // namespace Catch
+
+// end catch_generators_generic.hpp
+// start catch_generators_specific.hpp
+
+// start catch_context.h
+
+#include <memory>
+
+namespace Catch {
+
+ struct IResultCapture;
+ struct IRunner;
+ struct IConfig;
+ struct IMutableContext;
+
+ using IConfigPtr = std::shared_ptr<IConfig const>;
+
+ struct IContext
+ {
+ virtual ~IContext();
+
+ virtual IResultCapture* getResultCapture() = 0;
+ virtual IRunner* getRunner() = 0;
+ virtual IConfigPtr const& getConfig() const = 0;
+ };
+
+ struct IMutableContext : IContext
+ {
+ virtual ~IMutableContext();
+ virtual void setResultCapture( IResultCapture* resultCapture ) = 0;
+ virtual void setRunner( IRunner* runner ) = 0;
+ virtual void setConfig( IConfigPtr const& config ) = 0;
+
+ private:
+ static IMutableContext *currentContext;
+ friend IMutableContext& getCurrentMutableContext();
+ friend void cleanUpContext();
+ static void createContext();
+ };
+
+ inline IMutableContext& getCurrentMutableContext()
+ {
+ if( !IMutableContext::currentContext )
+ IMutableContext::createContext();
+ // NOLINTNEXTLINE(clang-analyzer-core.uninitialized.UndefReturn)
+ return *IMutableContext::currentContext;
+ }
+
+ inline IContext& getCurrentContext()
+ {
+ return getCurrentMutableContext();
+ }
+
+ void cleanUpContext();
+
+ class SimplePcg32;
+ SimplePcg32& rng();
+}
+
+// end catch_context.h
+// start catch_interfaces_config.h
+
+// start catch_option.hpp
+
+namespace Catch {
+
+ // An optional type
+ template<typename T>
+ class Option {
+ public:
+ Option() : nullableValue( nullptr ) {}
+ Option( T const& _value )
+ : nullableValue( new( storage ) T( _value ) )
+ {}
+ Option( Option const& _other )
+ : nullableValue( _other ? new( storage ) T( *_other ) : nullptr )
+ {}
+
+ ~Option() {
+ reset();
+ }
+
+ Option& operator= ( Option const& _other ) {
+ if( &_other != this ) {
+ reset();
+ if( _other )
+ nullableValue = new( storage ) T( *_other );
+ }
+ return *this;
+ }
+ Option& operator = ( T const& _value ) {
+ reset();
+ nullableValue = new( storage ) T( _value );
+ return *this;
+ }
+
+ void reset() {
+ if( nullableValue )
+ nullableValue->~T();
+ nullableValue = nullptr;
+ }
+
+ T& operator*() { return *nullableValue; }
+ T const& operator*() const { return *nullableValue; }
+ T* operator->() { return nullableValue; }
+ const T* operator->() const { return nullableValue; }
+
+ T valueOr( T const& defaultValue ) const {
+ return nullableValue ? *nullableValue : defaultValue;
+ }
+
+ bool some() const { return nullableValue != nullptr; }
+ bool none() const { return nullableValue == nullptr; }
+
+ bool operator !() const { return nullableValue == nullptr; }
+ explicit operator bool() const {
+ return some();
+ }
+
+ private:
+ T *nullableValue;
+ alignas(alignof(T)) char storage[sizeof(T)];
+ };
+
+} // end namespace Catch
+
+// end catch_option.hpp
+#include <chrono>
+#include <iosfwd>
+#include <string>
+#include <vector>
+#include <memory>
+
+namespace Catch {
+
+ enum class Verbosity {
+ Quiet = 0,
+ Normal,
+ High
+ };
+
+ struct WarnAbout { enum What {
+ Nothing = 0x00,
+ NoAssertions = 0x01,
+ NoTests = 0x02
+ }; };
+
+ struct ShowDurations { enum OrNot {
+ DefaultForReporter,
+ Always,
+ Never
+ }; };
+ struct RunTests { enum InWhatOrder {
+ InDeclarationOrder,
+ InLexicographicalOrder,
+ InRandomOrder
+ }; };
+ struct UseColour { enum YesOrNo {
+ Auto,
+ Yes,
+ No
+ }; };
+ struct WaitForKeypress { enum When {
+ Never,
+ BeforeStart = 1,
+ BeforeExit = 2,
+ BeforeStartAndExit = BeforeStart | BeforeExit
+ }; };
+
+ class TestSpec;
+
+ struct IConfig : NonCopyable {
+
+ virtual ~IConfig();
+
+ virtual bool allowThrows() const = 0;
+ virtual std::ostream& stream() const = 0;
+ virtual std::string name() const = 0;
+ virtual bool includeSuccessfulResults() const = 0;
+ virtual bool shouldDebugBreak() const = 0;
+ virtual bool warnAboutMissingAssertions() const = 0;
+ virtual bool warnAboutNoTests() const = 0;
+ virtual int abortAfter() const = 0;
+ virtual bool showInvisibles() const = 0;
+ virtual ShowDurations::OrNot showDurations() const = 0;
+ virtual double minDuration() const = 0;
+ virtual TestSpec const& testSpec() const = 0;
+ virtual bool hasTestFilters() const = 0;
+ virtual std::vector<std::string> const& getTestsOrTags() const = 0;
+ virtual RunTests::InWhatOrder runOrder() const = 0;
+ virtual unsigned int rngSeed() const = 0;
+ virtual UseColour::YesOrNo useColour() const = 0;
+ virtual std::vector<std::string> const& getSectionsToRun() const = 0;
+ virtual Verbosity verbosity() const = 0;
+
+ virtual bool benchmarkNoAnalysis() const = 0;
+ virtual int benchmarkSamples() const = 0;
+ virtual double benchmarkConfidenceInterval() const = 0;
+ virtual unsigned int benchmarkResamples() const = 0;
+ virtual std::chrono::milliseconds benchmarkWarmupTime() const = 0;
+ };
+
+ using IConfigPtr = std::shared_ptr<IConfig const>;
+}
+
+// end catch_interfaces_config.h
+// start catch_random_number_generator.h
+
+#include <cstdint>
+
+namespace Catch {
+
+ // This is a simple implementation of C++11 Uniform Random Number
+ // Generator. It does not provide all operators, because Catch2
+ // does not use it, but it should behave as expected inside stdlib's
+ // distributions.
+ // The implementation is based on the PCG family (http://pcg-random.org)
+ class SimplePcg32 {
+ using state_type = std::uint64_t;
+ public:
+ using result_type = std::uint32_t;
+ static constexpr result_type (min)() {
+ return 0;
+ }
+ static constexpr result_type (max)() {
+ return static_cast<result_type>(-1);
+ }
+
+ // Provide some default initial state for the default constructor
+ SimplePcg32():SimplePcg32(0xed743cc4U) {}
+
+ explicit SimplePcg32(result_type seed_);
+
+ void seed(result_type seed_);
+ void discard(uint64_t skip);
+
+ result_type operator()();
+
+ private:
+ friend bool operator==(SimplePcg32 const& lhs, SimplePcg32 const& rhs);
+ friend bool operator!=(SimplePcg32 const& lhs, SimplePcg32 const& rhs);
+
+ // In theory we also need operator<< and operator>>
+ // In practice we do not use them, so we will skip them for now
+
+ std::uint64_t m_state;
+ // This part of the state determines which "stream" of the numbers
+ // is chosen -- we take it as a constant for Catch2, so we only
+ // need to deal with seeding the main state.
+ // Picked by reading 8 bytes from `/dev/random` :-)
+ static const std::uint64_t s_inc = (0x13ed0cc53f939476ULL << 1ULL) | 1ULL;
+ };
+
+} // end namespace Catch
+
+// end catch_random_number_generator.h
+#include <random>
+
+namespace Catch {
+namespace Generators {
+
+template <typename Float>
+class RandomFloatingGenerator final : public IGenerator<Float> {
+ Catch::SimplePcg32& m_rng;
+ std::uniform_real_distribution<Float> m_dist;
+ Float m_current_number;
+public:
+
+ RandomFloatingGenerator(Float a, Float b):
+ m_rng(rng()),
+ m_dist(a, b) {
+ static_cast<void>(next());
+ }
+
+ Float const& get() const override {
+ return m_current_number;
+ }
+ bool next() override {
+ m_current_number = m_dist(m_rng);
+ return true;
+ }
+};
+
+template <typename Integer>
+class RandomIntegerGenerator final : public IGenerator<Integer> {
+ Catch::SimplePcg32& m_rng;
+ std::uniform_int_distribution<Integer> m_dist;
+ Integer m_current_number;
+public:
+
+ RandomIntegerGenerator(Integer a, Integer b):
+ m_rng(rng()),
+ m_dist(a, b) {
+ static_cast<void>(next());
+ }
+
+ Integer const& get() const override {
+ return m_current_number;
+ }
+ bool next() override {
+ m_current_number = m_dist(m_rng);
+ return true;
+ }
+};
+
+// TODO: Ideally this would be also constrained against the various char types,
+// but I don't expect users to run into that in practice.
+template <typename T>
+typename std::enable_if<std::is_integral<T>::value && !std::is_same<T, bool>::value,
+GeneratorWrapper<T>>::type
+random(T a, T b) {
+ return GeneratorWrapper<T>(
+ pf::make_unique<RandomIntegerGenerator<T>>(a, b)
+ );
+}
+
+template <typename T>
+typename std::enable_if<std::is_floating_point<T>::value,
+GeneratorWrapper<T>>::type
+random(T a, T b) {
+ return GeneratorWrapper<T>(
+ pf::make_unique<RandomFloatingGenerator<T>>(a, b)
+ );
+}
+
+template <typename T>
+class RangeGenerator final : public IGenerator<T> {
+ T m_current;
+ T m_end;
+ T m_step;
+ bool m_positive;
+
+public:
+ RangeGenerator(T const& start, T const& end, T const& step):
+ m_current(start),
+ m_end(end),
+ m_step(step),
+ m_positive(m_step > T(0))
+ {
+ assert(m_current != m_end && "Range start and end cannot be equal");
+ assert(m_step != T(0) && "Step size cannot be zero");
+ assert(((m_positive && m_current <= m_end) || (!m_positive && m_current >= m_end)) && "Step moves away from end");
+ }
+
+ RangeGenerator(T const& start, T const& end):
+ RangeGenerator(start, end, (start < end) ? T(1) : T(-1))
+ {}
+
+ T const& get() const override {
+ return m_current;
+ }
+
+ bool next() override {
+ m_current += m_step;
+ return (m_positive) ? (m_current < m_end) : (m_current > m_end);
+ }
+};
+
+template <typename T>
+GeneratorWrapper<T> range(T const& start, T const& end, T const& step) {
+ static_assert(std::is_arithmetic<T>::value && !std::is_same<T, bool>::value, "Type must be numeric");
+ return GeneratorWrapper<T>(pf::make_unique<RangeGenerator<T>>(start, end, step));
+}
+
+template <typename T>
+GeneratorWrapper<T> range(T const& start, T const& end) {
+ static_assert(std::is_integral<T>::value && !std::is_same<T, bool>::value, "Type must be an integer");
+ return GeneratorWrapper<T>(pf::make_unique<RangeGenerator<T>>(start, end));
+}
+
+template <typename T>
+class IteratorGenerator final : public IGenerator<T> {
+ static_assert(!std::is_same<T, bool>::value,
+ "IteratorGenerator currently does not support bools"
+ "because of std::vector<bool> specialization");
+
+ std::vector<T> m_elems;
+ size_t m_current = 0;
+public:
+ template <typename InputIterator, typename InputSentinel>
+ IteratorGenerator(InputIterator first, InputSentinel last):m_elems(first, last) {
+ if (m_elems.empty()) {
+ Catch::throw_exception(GeneratorException("IteratorGenerator received no valid values"));
+ }
+ }
+
+ T const& get() const override {
+ return m_elems[m_current];
+ }
+
+ bool next() override {
+ ++m_current;
+ return m_current != m_elems.size();
+ }
+};
+
+template <typename InputIterator,
+ typename InputSentinel,
+ typename ResultType = typename std::iterator_traits<InputIterator>::value_type>
+GeneratorWrapper<ResultType> from_range(InputIterator from, InputSentinel to) {
+ return GeneratorWrapper<ResultType>(pf::make_unique<IteratorGenerator<ResultType>>(from, to));
+}
+
+template <typename Container,
+ typename ResultType = typename Container::value_type>
+GeneratorWrapper<ResultType> from_range(Container const& cnt) {
+ return GeneratorWrapper<ResultType>(pf::make_unique<IteratorGenerator<ResultType>>(cnt.begin(), cnt.end()));
+}
+
+} // namespace Generators
+} // namespace Catch
+
+// end catch_generators_specific.hpp
+
+// These files are included here so the single_include script doesn't put them
+// in the conditionally compiled sections
+// start catch_test_case_info.h
+
+#include <string>
+#include <vector>
+#include <memory>
+
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wpadded"
+#endif
+
+namespace Catch {
+
+ struct ITestInvoker;
+
+ struct TestCaseInfo {
+ enum SpecialProperties{
+ None = 0,
+ IsHidden = 1 << 1,
+ ShouldFail = 1 << 2,
+ MayFail = 1 << 3,
+ Throws = 1 << 4,
+ NonPortable = 1 << 5,
+ Benchmark = 1 << 6
+ };
+
+ TestCaseInfo( std::string const& _name,
+ std::string const& _className,
+ std::string const& _description,
+ std::vector<std::string> const& _tags,
+ SourceLineInfo const& _lineInfo );
+
+ friend void setTags( TestCaseInfo& testCaseInfo, std::vector<std::string> tags );
+
+ bool isHidden() const;
+ bool throws() const;
+ bool okToFail() const;
+ bool expectedToFail() const;
+
+ std::string tagsAsString() const;
+
+ std::string name;
+ std::string className;
+ std::string description;
+ std::vector<std::string> tags;
+ std::vector<std::string> lcaseTags;
+ SourceLineInfo lineInfo;
+ SpecialProperties properties;
+ };
+
+ class TestCase : public TestCaseInfo {
+ public:
+
+ TestCase( ITestInvoker* testCase, TestCaseInfo&& info );
+
+ TestCase withName( std::string const& _newName ) const;
+
+ void invoke() const;
+
+ TestCaseInfo const& getTestCaseInfo() const;
+
+ bool operator == ( TestCase const& other ) const;
+ bool operator < ( TestCase const& other ) const;
+
+ private:
+ std::shared_ptr<ITestInvoker> test;
+ };
+
+ TestCase makeTestCase( ITestInvoker* testCase,
+ std::string const& className,
+ NameAndTags const& nameAndTags,
+ SourceLineInfo const& lineInfo );
+}
+
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+
+// end catch_test_case_info.h
+// start catch_interfaces_runner.h
+
+namespace Catch {
+
+ struct IRunner {
+ virtual ~IRunner();
+ virtual bool aborting() const = 0;
+ };
+}
+
+// end catch_interfaces_runner.h
+
+#ifdef __OBJC__
+// start catch_objc.hpp
+
+#import <objc/runtime.h>
+
+#include <string>
+
+// NB. Any general catch headers included here must be included
+// in catch.hpp first to make sure they are included by the single
+// header for non obj-usage
+
+///////////////////////////////////////////////////////////////////////////////
+// This protocol is really only here for (self) documenting purposes, since
+// all its methods are optional.
+@protocol OcFixture
+
+@optional
+
+-(void) setUp;
+-(void) tearDown;
+
+@end
+
+namespace Catch {
+
+ class OcMethod : public ITestInvoker {
+
+ public:
+ OcMethod( Class cls, SEL sel ) : m_cls( cls ), m_sel( sel ) {}
+
+ virtual void invoke() const {
+ id obj = [[m_cls alloc] init];
+
+ performOptionalSelector( obj, @selector(setUp) );
+ performOptionalSelector( obj, m_sel );
+ performOptionalSelector( obj, @selector(tearDown) );
+
+ arcSafeRelease( obj );
+ }
+ private:
+ virtual ~OcMethod() {}
+
+ Class m_cls;
+ SEL m_sel;
+ };
+
+ namespace Detail{
+
+ inline std::string getAnnotation( Class cls,
+ std::string const& annotationName,
+ std::string const& testCaseName ) {
+ NSString* selStr = [[NSString alloc] initWithFormat:@"Catch_%s_%s", annotationName.c_str(), testCaseName.c_str()];
+ SEL sel = NSSelectorFromString( selStr );
+ arcSafeRelease( selStr );
+ id value = performOptionalSelector( cls, sel );
+ if( value )
+ return [(NSString*)value UTF8String];
+ return "";
+ }
+ }
+
+ inline std::size_t registerTestMethods() {
+ std::size_t noTestMethods = 0;
+ int noClasses = objc_getClassList( nullptr, 0 );
+
+ Class* classes = (CATCH_UNSAFE_UNRETAINED Class *)malloc( sizeof(Class) * noClasses);
+ objc_getClassList( classes, noClasses );
+
+ for( int c = 0; c < noClasses; c++ ) {
+ Class cls = classes[c];
+ {
+ u_int count;
+ Method* methods = class_copyMethodList( cls, &count );
+ for( u_int m = 0; m < count ; m++ ) {
+ SEL selector = method_getName(methods[m]);
+ std::string methodName = sel_getName(selector);
+ if( startsWith( methodName, "Catch_TestCase_" ) ) {
+ std::string testCaseName = methodName.substr( 15 );
+ std::string name = Detail::getAnnotation( cls, "Name", testCaseName );
+ std::string desc = Detail::getAnnotation( cls, "Description", testCaseName );
+ const char* className = class_getName( cls );
+
+ getMutableRegistryHub().registerTest( makeTestCase( new OcMethod( cls, selector ), className, NameAndTags( name.c_str(), desc.c_str() ), SourceLineInfo("",0) ) );
+ noTestMethods++;
+ }
+ }
+ free(methods);
+ }
+ }
+ return noTestMethods;
+ }
+
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+
+ namespace Matchers {
+ namespace Impl {
+ namespace NSStringMatchers {
+
+ struct StringHolder : MatcherBase<NSString*>{
+ StringHolder( NSString* substr ) : m_substr( [substr copy] ){}
+ StringHolder( StringHolder const& other ) : m_substr( [other.m_substr copy] ){}
+ StringHolder() {
+ arcSafeRelease( m_substr );
+ }
+
+ bool match( NSString* str ) const override {
+ return false;
+ }
+
+ NSString* CATCH_ARC_STRONG m_substr;
+ };
+
+ struct Equals : StringHolder {
+ Equals( NSString* substr ) : StringHolder( substr ){}
+
+ bool match( NSString* str ) const override {
+ return (str != nil || m_substr == nil ) &&
+ [str isEqualToString:m_substr];
+ }
+
+ std::string describe() const override {
+ return "equals string: " + Catch::Detail::stringify( m_substr );
+ }
+ };
+
+ struct Contains : StringHolder {
+ Contains( NSString* substr ) : StringHolder( substr ){}
+
+ bool match( NSString* str ) const override {
+ return (str != nil || m_substr == nil ) &&
+ [str rangeOfString:m_substr].location != NSNotFound;
+ }
+
+ std::string describe() const override {
+ return "contains string: " + Catch::Detail::stringify( m_substr );
+ }
+ };
+
+ struct StartsWith : StringHolder {
+ StartsWith( NSString* substr ) : StringHolder( substr ){}
+
+ bool match( NSString* str ) const override {
+ return (str != nil || m_substr == nil ) &&
+ [str rangeOfString:m_substr].location == 0;
+ }
+
+ std::string describe() const override {
+ return "starts with: " + Catch::Detail::stringify( m_substr );
+ }
+ };
+ struct EndsWith : StringHolder {
+ EndsWith( NSString* substr ) : StringHolder( substr ){}
+
+ bool match( NSString* str ) const override {
+ return (str != nil || m_substr == nil ) &&
+ [str rangeOfString:m_substr].location == [str length] - [m_substr length];
+ }
+
+ std::string describe() const override {
+ return "ends with: " + Catch::Detail::stringify( m_substr );
+ }
+ };
+
+ } // namespace NSStringMatchers
+ } // namespace Impl
+
+ inline Impl::NSStringMatchers::Equals
+ Equals( NSString* substr ){ return Impl::NSStringMatchers::Equals( substr ); }
+
+ inline Impl::NSStringMatchers::Contains
+ Contains( NSString* substr ){ return Impl::NSStringMatchers::Contains( substr ); }
+
+ inline Impl::NSStringMatchers::StartsWith
+ StartsWith( NSString* substr ){ return Impl::NSStringMatchers::StartsWith( substr ); }
+
+ inline Impl::NSStringMatchers::EndsWith
+ EndsWith( NSString* substr ){ return Impl::NSStringMatchers::EndsWith( substr ); }
+
+ } // namespace Matchers
+
+ using namespace Matchers;
+
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+
+} // namespace Catch
+
+///////////////////////////////////////////////////////////////////////////////
+#define OC_MAKE_UNIQUE_NAME( root, uniqueSuffix ) root##uniqueSuffix
+#define OC_TEST_CASE2( name, desc, uniqueSuffix ) \
++(NSString*) OC_MAKE_UNIQUE_NAME( Catch_Name_test_, uniqueSuffix ) \
+{ \
+return @ name; \
+} \
++(NSString*) OC_MAKE_UNIQUE_NAME( Catch_Description_test_, uniqueSuffix ) \
+{ \
+return @ desc; \
+} \
+-(void) OC_MAKE_UNIQUE_NAME( Catch_TestCase_test_, uniqueSuffix )
+
+#define OC_TEST_CASE( name, desc ) OC_TEST_CASE2( name, desc, __LINE__ )
+
+// end catch_objc.hpp
+#endif
+
+// Benchmarking needs the externally-facing parts of reporters to work
+#if defined(CATCH_CONFIG_EXTERNAL_INTERFACES) || defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+// start catch_external_interfaces.h
+
+// start catch_reporter_bases.hpp
+
+// start catch_interfaces_reporter.h
+
+// start catch_config.hpp
+
+// start catch_test_spec_parser.h
+
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wpadded"
+#endif
+
+// start catch_test_spec.h
+
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wpadded"
+#endif
+
+// start catch_wildcard_pattern.h
+
+namespace Catch
+{
+ class WildcardPattern {
+ enum WildcardPosition {
+ NoWildcard = 0,
+ WildcardAtStart = 1,
+ WildcardAtEnd = 2,
+ WildcardAtBothEnds = WildcardAtStart | WildcardAtEnd
+ };
+
+ public:
+
+ WildcardPattern( std::string const& pattern, CaseSensitive::Choice caseSensitivity );
+ virtual ~WildcardPattern() = default;
+ virtual bool matches( std::string const& str ) const;
+
+ private:
+ std::string normaliseString( std::string const& str ) const;
+ CaseSensitive::Choice m_caseSensitivity;
+ WildcardPosition m_wildcard = NoWildcard;
+ std::string m_pattern;
+ };
+}
+
+// end catch_wildcard_pattern.h
+#include <string>
+#include <vector>
+#include <memory>
+
+namespace Catch {
+
+ struct IConfig;
+
+ class TestSpec {
+ class Pattern {
+ public:
+ explicit Pattern( std::string const& name );
+ virtual ~Pattern();
+ virtual bool matches( TestCaseInfo const& testCase ) const = 0;
+ std::string const& name() const;
+ private:
+ std::string const m_name;
+ };
+ using PatternPtr = std::shared_ptr<Pattern>;
+
+ class NamePattern : public Pattern {
+ public:
+ explicit NamePattern( std::string const& name, std::string const& filterString );
+ bool matches( TestCaseInfo const& testCase ) const override;
+ private:
+ WildcardPattern m_wildcardPattern;
+ };
+
+ class TagPattern : public Pattern {
+ public:
+ explicit TagPattern( std::string const& tag, std::string const& filterString );
+ bool matches( TestCaseInfo const& testCase ) const override;
+ private:
+ std::string m_tag;
+ };
+
+ class ExcludedPattern : public Pattern {
+ public:
+ explicit ExcludedPattern( PatternPtr const& underlyingPattern );
+ bool matches( TestCaseInfo const& testCase ) const override;
+ private:
+ PatternPtr m_underlyingPattern;
+ };
+
+ struct Filter {
+ std::vector<PatternPtr> m_patterns;
+
+ bool matches( TestCaseInfo const& testCase ) const;
+ std::string name() const;
+ };
+
+ public:
+ struct FilterMatch {
+ std::string name;
+ std::vector<TestCase const*> tests;
+ };
+ using Matches = std::vector<FilterMatch>;
+ using vectorStrings = std::vector<std::string>;
+
+ bool hasFilters() const;
+ bool matches( TestCaseInfo const& testCase ) const;
+ Matches matchesByFilter( std::vector<TestCase> const& testCases, IConfig const& config ) const;
+ const vectorStrings & getInvalidArgs() const;
+
+ private:
+ std::vector<Filter> m_filters;
+ std::vector<std::string> m_invalidArgs;
+ friend class TestSpecParser;
+ };
+}
+
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+
+// end catch_test_spec.h
+// start catch_interfaces_tag_alias_registry.h
+
+#include <string>
+
+namespace Catch {
+
+ struct TagAlias;
+
+ struct ITagAliasRegistry {
+ virtual ~ITagAliasRegistry();
+ // Nullptr if not present
+ virtual TagAlias const* find( std::string const& alias ) const = 0;
+ virtual std::string expandAliases( std::string const& unexpandedTestSpec ) const = 0;
+
+ static ITagAliasRegistry const& get();
+ };
+
+} // end namespace Catch
+
+// end catch_interfaces_tag_alias_registry.h
+namespace Catch {
+
+ class TestSpecParser {
+ enum Mode{ None, Name, QuotedName, Tag, EscapedName };
+ Mode m_mode = None;
+ Mode lastMode = None;
+ bool m_exclusion = false;
+ std::size_t m_pos = 0;
+ std::size_t m_realPatternPos = 0;
+ std::string m_arg;
+ std::string m_substring;
+ std::string m_patternName;
+ std::vector<std::size_t> m_escapeChars;
+ TestSpec::Filter m_currentFilter;
+ TestSpec m_testSpec;
+ ITagAliasRegistry const* m_tagAliases = nullptr;
+
+ public:
+ TestSpecParser( ITagAliasRegistry const& tagAliases );
+
+ TestSpecParser& parse( std::string const& arg );
+ TestSpec testSpec();
+
+ private:
+ bool visitChar( char c );
+ void startNewMode( Mode mode );
+ bool processNoneChar( char c );
+ void processNameChar( char c );
+ bool processOtherChar( char c );
+ void endMode();
+ void escape();
+ bool isControlChar( char c ) const;
+ void saveLastMode();
+ void revertBackToLastMode();
+ void addFilter();
+ bool separate();
+
+ // Handles common preprocessing of the pattern for name/tag patterns
+ std::string preprocessPattern();
+ // Adds the current pattern as a test name
+ void addNamePattern();
+ // Adds the current pattern as a tag
+ void addTagPattern();
+
+ inline void addCharToPattern(char c) {
+ m_substring += c;
+ m_patternName += c;
+ m_realPatternPos++;
+ }
+
+ };
+ TestSpec parseTestSpec( std::string const& arg );
+
+} // namespace Catch
+
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+
+// end catch_test_spec_parser.h
+// Libstdc++ doesn't like incomplete classes for unique_ptr
+
+#include <memory>
+#include <vector>
+#include <string>
+
+#ifndef CATCH_CONFIG_CONSOLE_WIDTH
+#define CATCH_CONFIG_CONSOLE_WIDTH 80
+#endif
+
+namespace Catch {
+
+ struct IStream;
+
+ struct ConfigData {
+ bool listTests = false;
+ bool listTags = false;
+ bool listReporters = false;
+ bool listTestNamesOnly = false;
+
+ bool showSuccessfulTests = false;
+ bool shouldDebugBreak = false;
+ bool noThrow = false;
+ bool showHelp = false;
+ bool showInvisibles = false;
+ bool filenamesAsTags = false;
+ bool libIdentify = false;
+
+ int abortAfter = -1;
+ unsigned int rngSeed = 0;
+
+ bool benchmarkNoAnalysis = false;
+ unsigned int benchmarkSamples = 100;
+ double benchmarkConfidenceInterval = 0.95;
+ unsigned int benchmarkResamples = 100000;
+ std::chrono::milliseconds::rep benchmarkWarmupTime = 100;
+
+ Verbosity verbosity = Verbosity::Normal;
+ WarnAbout::What warnings = WarnAbout::Nothing;
+ ShowDurations::OrNot showDurations = ShowDurations::DefaultForReporter;
+ double minDuration = -1;
+ RunTests::InWhatOrder runOrder = RunTests::InDeclarationOrder;
+ UseColour::YesOrNo useColour = UseColour::Auto;
+ WaitForKeypress::When waitForKeypress = WaitForKeypress::Never;
+
+ std::string outputFilename;
+ std::string name;
+ std::string processName;
+#ifndef CATCH_CONFIG_DEFAULT_REPORTER
+#define CATCH_CONFIG_DEFAULT_REPORTER "console"
+#endif
+ std::string reporterName = CATCH_CONFIG_DEFAULT_REPORTER;
+#undef CATCH_CONFIG_DEFAULT_REPORTER
+
+ std::vector<std::string> testsOrTags;
+ std::vector<std::string> sectionsToRun;
+ };
+
+ class Config : public IConfig {
+ public:
+
+ Config() = default;
+ Config( ConfigData const& data );
+ virtual ~Config() = default;
+
+ std::string const& getFilename() const;
+
+ bool listTests() const;
+ bool listTestNamesOnly() const;
+ bool listTags() const;
+ bool listReporters() const;
+
+ std::string getProcessName() const;
+ std::string const& getReporterName() const;
+
+ std::vector<std::string> const& getTestsOrTags() const override;
+ std::vector<std::string> const& getSectionsToRun() const override;
+
+ TestSpec const& testSpec() const override;
+ bool hasTestFilters() const override;
+
+ bool showHelp() const;
+
+ // IConfig interface
+ bool allowThrows() const override;
+ std::ostream& stream() const override;
+ std::string name() const override;
+ bool includeSuccessfulResults() const override;
+ bool warnAboutMissingAssertions() const override;
+ bool warnAboutNoTests() const override;
+ ShowDurations::OrNot showDurations() const override;
+ double minDuration() const override;
+ RunTests::InWhatOrder runOrder() const override;
+ unsigned int rngSeed() const override;
+ UseColour::YesOrNo useColour() const override;
+ bool shouldDebugBreak() const override;
+ int abortAfter() const override;
+ bool showInvisibles() const override;
+ Verbosity verbosity() const override;
+ bool benchmarkNoAnalysis() const override;
+ int benchmarkSamples() const override;
+ double benchmarkConfidenceInterval() const override;
+ unsigned int benchmarkResamples() const override;
+ std::chrono::milliseconds benchmarkWarmupTime() const override;
+
+ private:
+
+ IStream const* openStream();
+ ConfigData m_data;
+
+ std::unique_ptr<IStream const> m_stream;
+ TestSpec m_testSpec;
+ bool m_hasTestFilters = false;
+ };
+
+} // end namespace Catch
+
+// end catch_config.hpp
+// start catch_assertionresult.h
+
+#include <string>
+
+namespace Catch {
+
+ struct AssertionResultData
+ {
+ AssertionResultData() = delete;
+
+ AssertionResultData( ResultWas::OfType _resultType, LazyExpression const& _lazyExpression );
+
+ std::string message;
+ mutable std::string reconstructedExpression;
+ LazyExpression lazyExpression;
+ ResultWas::OfType resultType;
+
+ std::string reconstructExpression() const;
+ };
+
+ class AssertionResult {
+ public:
+ AssertionResult() = delete;
+ AssertionResult( AssertionInfo const& info, AssertionResultData const& data );
+
+ bool isOk() const;
+ bool succeeded() const;
+ ResultWas::OfType getResultType() const;
+ bool hasExpression() const;
+ bool hasMessage() const;
+ std::string getExpression() const;
+ std::string getExpressionInMacro() const;
+ bool hasExpandedExpression() const;
+ std::string getExpandedExpression() const;
+ std::string getMessage() const;
+ SourceLineInfo getSourceInfo() const;
+ StringRef getTestMacroName() const;
+
+ //protected:
+ AssertionInfo m_info;
+ AssertionResultData m_resultData;
+ };
+
+} // end namespace Catch
+
+// end catch_assertionresult.h
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+// start catch_estimate.hpp
+
+ // Statistics estimates
+
+
+namespace Catch {
+ namespace Benchmark {
+ template <typename Duration>
+ struct Estimate {
+ Duration point;
+ Duration lower_bound;
+ Duration upper_bound;
+ double confidence_interval;
+
+ template <typename Duration2>
+ operator Estimate<Duration2>() const {
+ return { point, lower_bound, upper_bound, confidence_interval };
+ }
+ };
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_estimate.hpp
+// start catch_outlier_classification.hpp
+
+// Outlier information
+
+namespace Catch {
+ namespace Benchmark {
+ struct OutlierClassification {
+ int samples_seen = 0;
+ int low_severe = 0; // more than 3 times IQR below Q1
+ int low_mild = 0; // 1.5 to 3 times IQR below Q1
+ int high_mild = 0; // 1.5 to 3 times IQR above Q3
+ int high_severe = 0; // more than 3 times IQR above Q3
+
+ int total() const {
+ return low_severe + low_mild + high_mild + high_severe;
+ }
+ };
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_outlier_classification.hpp
+
+#include <iterator>
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+#include <string>
+#include <iosfwd>
+#include <map>
+#include <set>
+#include <memory>
+#include <algorithm>
+
+namespace Catch {
+
+ struct ReporterConfig {
+ explicit ReporterConfig( IConfigPtr const& _fullConfig );
+
+ ReporterConfig( IConfigPtr const& _fullConfig, std::ostream& _stream );
+
+ std::ostream& stream() const;
+ IConfigPtr fullConfig() const;
+
+ private:
+ std::ostream* m_stream;
+ IConfigPtr m_fullConfig;
+ };
+
+ struct ReporterPreferences {
+ bool shouldRedirectStdOut = false;
+ bool shouldReportAllAssertions = false;
+ };
+
+ template<typename T>
+ struct LazyStat : Option<T> {
+ LazyStat& operator=( T const& _value ) {
+ Option<T>::operator=( _value );
+ used = false;
+ return *this;
+ }
+ void reset() {
+ Option<T>::reset();
+ used = false;
+ }
+ bool used = false;
+ };
+
+ struct TestRunInfo {
+ TestRunInfo( std::string const& _name );
+ std::string name;
+ };
+ struct GroupInfo {
+ GroupInfo( std::string const& _name,
+ std::size_t _groupIndex,
+ std::size_t _groupsCount );
+
+ std::string name;
+ std::size_t groupIndex;
+ std::size_t groupsCounts;
+ };
+
+ struct AssertionStats {
+ AssertionStats( AssertionResult const& _assertionResult,
+ std::vector<MessageInfo> const& _infoMessages,
+ Totals const& _totals );
+
+ AssertionStats( AssertionStats const& ) = default;
+ AssertionStats( AssertionStats && ) = default;
+ AssertionStats& operator = ( AssertionStats const& ) = delete;
+ AssertionStats& operator = ( AssertionStats && ) = delete;
+ virtual ~AssertionStats();
+
+ AssertionResult assertionResult;
+ std::vector<MessageInfo> infoMessages;
+ Totals totals;
+ };
+
+ struct SectionStats {
+ SectionStats( SectionInfo const& _sectionInfo,
+ Counts const& _assertions,
+ double _durationInSeconds,
+ bool _missingAssertions );
+ SectionStats( SectionStats const& ) = default;
+ SectionStats( SectionStats && ) = default;
+ SectionStats& operator = ( SectionStats const& ) = default;
+ SectionStats& operator = ( SectionStats && ) = default;
+ virtual ~SectionStats();
+
+ SectionInfo sectionInfo;
+ Counts assertions;
+ double durationInSeconds;
+ bool missingAssertions;
+ };
+
+ struct TestCaseStats {
+ TestCaseStats( TestCaseInfo const& _testInfo,
+ Totals const& _totals,
+ std::string const& _stdOut,
+ std::string const& _stdErr,
+ bool _aborting );
+
+ TestCaseStats( TestCaseStats const& ) = default;
+ TestCaseStats( TestCaseStats && ) = default;
+ TestCaseStats& operator = ( TestCaseStats const& ) = default;
+ TestCaseStats& operator = ( TestCaseStats && ) = default;
+ virtual ~TestCaseStats();
+
+ TestCaseInfo testInfo;
+ Totals totals;
+ std::string stdOut;
+ std::string stdErr;
+ bool aborting;
+ };
+
+ struct TestGroupStats {
+ TestGroupStats( GroupInfo const& _groupInfo,
+ Totals const& _totals,
+ bool _aborting );
+ TestGroupStats( GroupInfo const& _groupInfo );
+
+ TestGroupStats( TestGroupStats const& ) = default;
+ TestGroupStats( TestGroupStats && ) = default;
+ TestGroupStats& operator = ( TestGroupStats const& ) = default;
+ TestGroupStats& operator = ( TestGroupStats && ) = default;
+ virtual ~TestGroupStats();
+
+ GroupInfo groupInfo;
+ Totals totals;
+ bool aborting;
+ };
+
+ struct TestRunStats {
+ TestRunStats( TestRunInfo const& _runInfo,
+ Totals const& _totals,
+ bool _aborting );
+
+ TestRunStats( TestRunStats const& ) = default;
+ TestRunStats( TestRunStats && ) = default;
+ TestRunStats& operator = ( TestRunStats const& ) = default;
+ TestRunStats& operator = ( TestRunStats && ) = default;
+ virtual ~TestRunStats();
+
+ TestRunInfo runInfo;
+ Totals totals;
+ bool aborting;
+ };
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ struct BenchmarkInfo {
+ std::string name;
+ double estimatedDuration;
+ int iterations;
+ int samples;
+ unsigned int resamples;
+ double clockResolution;
+ double clockCost;
+ };
+
+ template <class Duration>
+ struct BenchmarkStats {
+ BenchmarkInfo info;
+
+ std::vector<Duration> samples;
+ Benchmark::Estimate<Duration> mean;
+ Benchmark::Estimate<Duration> standardDeviation;
+ Benchmark::OutlierClassification outliers;
+ double outlierVariance;
+
+ template <typename Duration2>
+ operator BenchmarkStats<Duration2>() const {
+ std::vector<Duration2> samples2;
+ samples2.reserve(samples.size());
+ std::transform(samples.begin(), samples.end(), std::back_inserter(samples2), [](Duration d) { return Duration2(d); });
+ return {
+ info,
+ std::move(samples2),
+ mean,
+ standardDeviation,
+ outliers,
+ outlierVariance,
+ };
+ }
+ };
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ struct IStreamingReporter {
+ virtual ~IStreamingReporter() = default;
+
+ // Implementing class must also provide the following static methods:
+ // static std::string getDescription();
+ // static std::set<Verbosity> getSupportedVerbosities()
+
+ virtual ReporterPreferences getPreferences() const = 0;
+
+ virtual void noMatchingTestCases( std::string const& spec ) = 0;
+
+ virtual void reportInvalidArguments(std::string const&) {}
+
+ virtual void testRunStarting( TestRunInfo const& testRunInfo ) = 0;
+ virtual void testGroupStarting( GroupInfo const& groupInfo ) = 0;
+
+ virtual void testCaseStarting( TestCaseInfo const& testInfo ) = 0;
+ virtual void sectionStarting( SectionInfo const& sectionInfo ) = 0;
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ virtual void benchmarkPreparing( std::string const& ) {}
+ virtual void benchmarkStarting( BenchmarkInfo const& ) {}
+ virtual void benchmarkEnded( BenchmarkStats<> const& ) {}
+ virtual void benchmarkFailed( std::string const& ) {}
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ virtual void assertionStarting( AssertionInfo const& assertionInfo ) = 0;
+
+ // The return value indicates if the messages buffer should be cleared:
+ virtual bool assertionEnded( AssertionStats const& assertionStats ) = 0;
+
+ virtual void sectionEnded( SectionStats const& sectionStats ) = 0;
+ virtual void testCaseEnded( TestCaseStats const& testCaseStats ) = 0;
+ virtual void testGroupEnded( TestGroupStats const& testGroupStats ) = 0;
+ virtual void testRunEnded( TestRunStats const& testRunStats ) = 0;
+
+ virtual void skipTest( TestCaseInfo const& testInfo ) = 0;
+
+ // Default empty implementation provided
+ virtual void fatalErrorEncountered( StringRef name );
+
+ virtual bool isMulti() const;
+ };
+ using IStreamingReporterPtr = std::unique_ptr<IStreamingReporter>;
+
+ struct IReporterFactory {
+ virtual ~IReporterFactory();
+ virtual IStreamingReporterPtr create( ReporterConfig const& config ) const = 0;
+ virtual std::string getDescription() const = 0;
+ };
+ using IReporterFactoryPtr = std::shared_ptr<IReporterFactory>;
+
+ struct IReporterRegistry {
+ using FactoryMap = std::map<std::string, IReporterFactoryPtr>;
+ using Listeners = std::vector<IReporterFactoryPtr>;
+
+ virtual ~IReporterRegistry();
+ virtual IStreamingReporterPtr create( std::string const& name, IConfigPtr const& config ) const = 0;
+ virtual FactoryMap const& getFactories() const = 0;
+ virtual Listeners const& getListeners() const = 0;
+ };
+
+} // end namespace Catch
+
+// end catch_interfaces_reporter.h
+#include <algorithm>
+#include <cstring>
+#include <cfloat>
+#include <cstdio>
+#include <cassert>
+#include <memory>
+#include <ostream>
+
+namespace Catch {
+ void prepareExpandedExpression(AssertionResult& result);
+
+ // Returns double formatted as %.3f (format expected on output)
+ std::string getFormattedDuration( double duration );
+
+ //! Should the reporter show
+ bool shouldShowDuration( IConfig const& config, double duration );
+
+ std::string serializeFilters( std::vector<std::string> const& container );
+
+ template<typename DerivedT>
+ struct StreamingReporterBase : IStreamingReporter {
+
+ StreamingReporterBase( ReporterConfig const& _config )
+ : m_config( _config.fullConfig() ),
+ stream( _config.stream() )
+ {
+ m_reporterPrefs.shouldRedirectStdOut = false;
+ if( !DerivedT::getSupportedVerbosities().count( m_config->verbosity() ) )
+ CATCH_ERROR( "Verbosity level not supported by this reporter" );
+ }
+
+ ReporterPreferences getPreferences() const override {
+ return m_reporterPrefs;
+ }
+
+ static std::set<Verbosity> getSupportedVerbosities() {
+ return { Verbosity::Normal };
+ }
+
+ ~StreamingReporterBase() override = default;
+
+ void noMatchingTestCases(std::string const&) override {}
+
+ void reportInvalidArguments(std::string const&) override {}
+
+ void testRunStarting(TestRunInfo const& _testRunInfo) override {
+ currentTestRunInfo = _testRunInfo;
+ }
+
+ void testGroupStarting(GroupInfo const& _groupInfo) override {
+ currentGroupInfo = _groupInfo;
+ }
+
+ void testCaseStarting(TestCaseInfo const& _testInfo) override {
+ currentTestCaseInfo = _testInfo;
+ }
+ void sectionStarting(SectionInfo const& _sectionInfo) override {
+ m_sectionStack.push_back(_sectionInfo);
+ }
+
+ void sectionEnded(SectionStats const& /* _sectionStats */) override {
+ m_sectionStack.pop_back();
+ }
+ void testCaseEnded(TestCaseStats const& /* _testCaseStats */) override {
+ currentTestCaseInfo.reset();
+ }
+ void testGroupEnded(TestGroupStats const& /* _testGroupStats */) override {
+ currentGroupInfo.reset();
+ }
+ void testRunEnded(TestRunStats const& /* _testRunStats */) override {
+ currentTestCaseInfo.reset();
+ currentGroupInfo.reset();
+ currentTestRunInfo.reset();
+ }
+
+ void skipTest(TestCaseInfo const&) override {
+ // Don't do anything with this by default.
+ // It can optionally be overridden in the derived class.
+ }
+
+ IConfigPtr m_config;
+ std::ostream& stream;
+
+ LazyStat<TestRunInfo> currentTestRunInfo;
+ LazyStat<GroupInfo> currentGroupInfo;
+ LazyStat<TestCaseInfo> currentTestCaseInfo;
+
+ std::vector<SectionInfo> m_sectionStack;
+ ReporterPreferences m_reporterPrefs;
+ };
+
+ template<typename DerivedT>
+ struct CumulativeReporterBase : IStreamingReporter {
+ template<typename T, typename ChildNodeT>
+ struct Node {
+ explicit Node( T const& _value ) : value( _value ) {}
+ virtual ~Node() {}
+
+ using ChildNodes = std::vector<std::shared_ptr<ChildNodeT>>;
+ T value;
+ ChildNodes children;
+ };
+ struct SectionNode {
+ explicit SectionNode(SectionStats const& _stats) : stats(_stats) {}
+ virtual ~SectionNode() = default;
+
+ bool operator == (SectionNode const& other) const {
+ return stats.sectionInfo.lineInfo == other.stats.sectionInfo.lineInfo;
+ }
+ bool operator == (std::shared_ptr<SectionNode> const& other) const {
+ return operator==(*other);
+ }
+
+ SectionStats stats;
+ using ChildSections = std::vector<std::shared_ptr<SectionNode>>;
+ using Assertions = std::vector<AssertionStats>;
+ ChildSections childSections;
+ Assertions assertions;
+ std::string stdOut;
+ std::string stdErr;
+ };
+
+ struct BySectionInfo {
+ BySectionInfo( SectionInfo const& other ) : m_other( other ) {}
+ BySectionInfo( BySectionInfo const& other ) : m_other( other.m_other ) {}
+ bool operator() (std::shared_ptr<SectionNode> const& node) const {
+ return ((node->stats.sectionInfo.name == m_other.name) &&
+ (node->stats.sectionInfo.lineInfo == m_other.lineInfo));
+ }
+ void operator=(BySectionInfo const&) = delete;
+
+ private:
+ SectionInfo const& m_other;
+ };
+
+ using TestCaseNode = Node<TestCaseStats, SectionNode>;
+ using TestGroupNode = Node<TestGroupStats, TestCaseNode>;
+ using TestRunNode = Node<TestRunStats, TestGroupNode>;
+
+ CumulativeReporterBase( ReporterConfig const& _config )
+ : m_config( _config.fullConfig() ),
+ stream( _config.stream() )
+ {
+ m_reporterPrefs.shouldRedirectStdOut = false;
+ if( !DerivedT::getSupportedVerbosities().count( m_config->verbosity() ) )
+ CATCH_ERROR( "Verbosity level not supported by this reporter" );
+ }
+ ~CumulativeReporterBase() override = default;
+
+ ReporterPreferences getPreferences() const override {
+ return m_reporterPrefs;
+ }
+
+ static std::set<Verbosity> getSupportedVerbosities() {
+ return { Verbosity::Normal };
+ }
+
+ void testRunStarting( TestRunInfo const& ) override {}
+ void testGroupStarting( GroupInfo const& ) override {}
+
+ void testCaseStarting( TestCaseInfo const& ) override {}
+
+ void sectionStarting( SectionInfo const& sectionInfo ) override {
+ SectionStats incompleteStats( sectionInfo, Counts(), 0, false );
+ std::shared_ptr<SectionNode> node;
+ if( m_sectionStack.empty() ) {
+ if( !m_rootSection )
+ m_rootSection = std::make_shared<SectionNode>( incompleteStats );
+ node = m_rootSection;
+ }
+ else {
+ SectionNode& parentNode = *m_sectionStack.back();
+ auto it =
+ std::find_if( parentNode.childSections.begin(),
+ parentNode.childSections.end(),
+ BySectionInfo( sectionInfo ) );
+ if( it == parentNode.childSections.end() ) {
+ node = std::make_shared<SectionNode>( incompleteStats );
+ parentNode.childSections.push_back( node );
+ }
+ else
+ node = *it;
+ }
+ m_sectionStack.push_back( node );
+ m_deepestSection = std::move(node);
+ }
+
+ void assertionStarting(AssertionInfo const&) override {}
+
+ bool assertionEnded(AssertionStats const& assertionStats) override {
+ assert(!m_sectionStack.empty());
+ // AssertionResult holds a pointer to a temporary DecomposedExpression,
+ // which getExpandedExpression() calls to build the expression string.
+ // Our section stack copy of the assertionResult will likely outlive the
+ // temporary, so it must be expanded or discarded now to avoid calling
+ // a destroyed object later.
+ prepareExpandedExpression(const_cast<AssertionResult&>( assertionStats.assertionResult ) );
+ SectionNode& sectionNode = *m_sectionStack.back();
+ sectionNode.assertions.push_back(assertionStats);
+ return true;
+ }
+ void sectionEnded(SectionStats const& sectionStats) override {
+ assert(!m_sectionStack.empty());
+ SectionNode& node = *m_sectionStack.back();
+ node.stats = sectionStats;
+ m_sectionStack.pop_back();
+ }
+ void testCaseEnded(TestCaseStats const& testCaseStats) override {
+ auto node = std::make_shared<TestCaseNode>(testCaseStats);
+ assert(m_sectionStack.size() == 0);
+ node->children.push_back(m_rootSection);
+ m_testCases.push_back(node);
+ m_rootSection.reset();
+
+ assert(m_deepestSection);
+ m_deepestSection->stdOut = testCaseStats.stdOut;
+ m_deepestSection->stdErr = testCaseStats.stdErr;
+ }
+ void testGroupEnded(TestGroupStats const& testGroupStats) override {
+ auto node = std::make_shared<TestGroupNode>(testGroupStats);
+ node->children.swap(m_testCases);
+ m_testGroups.push_back(node);
+ }
+ void testRunEnded(TestRunStats const& testRunStats) override {
+ auto node = std::make_shared<TestRunNode>(testRunStats);
+ node->children.swap(m_testGroups);
+ m_testRuns.push_back(node);
+ testRunEndedCumulative();
+ }
+ virtual void testRunEndedCumulative() = 0;
+
+ void skipTest(TestCaseInfo const&) override {}
+
+ IConfigPtr m_config;
+ std::ostream& stream;
+ std::vector<AssertionStats> m_assertions;
+ std::vector<std::vector<std::shared_ptr<SectionNode>>> m_sections;
+ std::vector<std::shared_ptr<TestCaseNode>> m_testCases;
+ std::vector<std::shared_ptr<TestGroupNode>> m_testGroups;
+
+ std::vector<std::shared_ptr<TestRunNode>> m_testRuns;
+
+ std::shared_ptr<SectionNode> m_rootSection;
+ std::shared_ptr<SectionNode> m_deepestSection;
+ std::vector<std::shared_ptr<SectionNode>> m_sectionStack;
+ ReporterPreferences m_reporterPrefs;
+ };
+
+ template<char C>
+ char const* getLineOfChars() {
+ static char line[CATCH_CONFIG_CONSOLE_WIDTH] = {0};
+ if( !*line ) {
+ std::memset( line, C, CATCH_CONFIG_CONSOLE_WIDTH-1 );
+ line[CATCH_CONFIG_CONSOLE_WIDTH-1] = 0;
+ }
+ return line;
+ }
+
+ struct TestEventListenerBase : StreamingReporterBase<TestEventListenerBase> {
+ TestEventListenerBase( ReporterConfig const& _config );
+
+ static std::set<Verbosity> getSupportedVerbosities();
+
+ void assertionStarting(AssertionInfo const&) override;
+ bool assertionEnded(AssertionStats const&) override;
+ };
+
+} // end namespace Catch
+
+// end catch_reporter_bases.hpp
+// start catch_console_colour.h
+
+namespace Catch {
+
+ struct Colour {
+ enum Code {
+ None = 0,
+
+ White,
+ Red,
+ Green,
+ Blue,
+ Cyan,
+ Yellow,
+ Grey,
+
+ Bright = 0x10,
+
+ BrightRed = Bright | Red,
+ BrightGreen = Bright | Green,
+ LightGrey = Bright | Grey,
+ BrightWhite = Bright | White,
+ BrightYellow = Bright | Yellow,
+
+ // By intention
+ FileName = LightGrey,
+ Warning = BrightYellow,
+ ResultError = BrightRed,
+ ResultSuccess = BrightGreen,
+ ResultExpectedFailure = Warning,
+
+ Error = BrightRed,
+ Success = Green,
+
+ OriginalExpression = Cyan,
+ ReconstructedExpression = BrightYellow,
+
+ SecondaryText = LightGrey,
+ Headers = White
+ };
+
+ // Use constructed object for RAII guard
+ Colour( Code _colourCode );
+ Colour( Colour&& other ) noexcept;
+ Colour& operator=( Colour&& other ) noexcept;
+ ~Colour();
+
+ // Use static method for one-shot changes
+ static void use( Code _colourCode );
+
+ private:
+ bool m_moved = false;
+ };
+
+ std::ostream& operator << ( std::ostream& os, Colour const& );
+
+} // end namespace Catch
+
+// end catch_console_colour.h
+// start catch_reporter_registrars.hpp
+
+
+namespace Catch {
+
+ template<typename T>
+ class ReporterRegistrar {
+
+ class ReporterFactory : public IReporterFactory {
+
+ IStreamingReporterPtr create( ReporterConfig const& config ) const override {
+ return std::unique_ptr<T>( new T( config ) );
+ }
+
+ std::string getDescription() const override {
+ return T::getDescription();
+ }
+ };
+
+ public:
+
+ explicit ReporterRegistrar( std::string const& name ) {
+ getMutableRegistryHub().registerReporter( name, std::make_shared<ReporterFactory>() );
+ }
+ };
+
+ template<typename T>
+ class ListenerRegistrar {
+
+ class ListenerFactory : public IReporterFactory {
+
+ IStreamingReporterPtr create( ReporterConfig const& config ) const override {
+ return std::unique_ptr<T>( new T( config ) );
+ }
+ std::string getDescription() const override {
+ return std::string();
+ }
+ };
+
+ public:
+
+ ListenerRegistrar() {
+ getMutableRegistryHub().registerListener( std::make_shared<ListenerFactory>() );
+ }
+ };
+}
+
+#if !defined(CATCH_CONFIG_DISABLE)
+
+#define CATCH_REGISTER_REPORTER( name, reporterType ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ Catch::ReporterRegistrar<reporterType> catch_internal_RegistrarFor##reporterType( name ); } \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+#define CATCH_REGISTER_LISTENER( listenerType ) \
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+ namespace{ Catch::ListenerRegistrar<listenerType> catch_internal_RegistrarFor##listenerType; } \
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+#else // CATCH_CONFIG_DISABLE
+
+#define CATCH_REGISTER_REPORTER(name, reporterType)
+#define CATCH_REGISTER_LISTENER(listenerType)
+
+#endif // CATCH_CONFIG_DISABLE
+
+// end catch_reporter_registrars.hpp
+// Allow users to base their work off existing reporters
+// start catch_reporter_compact.h
+
+namespace Catch {
+
+ struct CompactReporter : StreamingReporterBase<CompactReporter> {
+
+ using StreamingReporterBase::StreamingReporterBase;
+
+ ~CompactReporter() override;
+
+ static std::string getDescription();
+
+ void noMatchingTestCases(std::string const& spec) override;
+
+ void assertionStarting(AssertionInfo const&) override;
+
+ bool assertionEnded(AssertionStats const& _assertionStats) override;
+
+ void sectionEnded(SectionStats const& _sectionStats) override;
+
+ void testRunEnded(TestRunStats const& _testRunStats) override;
+
+ };
+
+} // end namespace Catch
+
+// end catch_reporter_compact.h
+// start catch_reporter_console.h
+
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4061) // Not all labels are EXPLICITLY handled in switch
+ // Note that 4062 (not all labels are handled
+ // and default is missing) is enabled
+#endif
+
+namespace Catch {
+ // Fwd decls
+ struct SummaryColumn;
+ class TablePrinter;
+
+ struct ConsoleReporter : StreamingReporterBase<ConsoleReporter> {
+ std::unique_ptr<TablePrinter> m_tablePrinter;
+
+ ConsoleReporter(ReporterConfig const& config);
+ ~ConsoleReporter() override;
+ static std::string getDescription();
+
+ void noMatchingTestCases(std::string const& spec) override;
+
+ void reportInvalidArguments(std::string const&arg) override;
+
+ void assertionStarting(AssertionInfo const&) override;
+
+ bool assertionEnded(AssertionStats const& _assertionStats) override;
+
+ void sectionStarting(SectionInfo const& _sectionInfo) override;
+ void sectionEnded(SectionStats const& _sectionStats) override;
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void benchmarkPreparing(std::string const& name) override;
+ void benchmarkStarting(BenchmarkInfo const& info) override;
+ void benchmarkEnded(BenchmarkStats<> const& stats) override;
+ void benchmarkFailed(std::string const& error) override;
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ void testCaseEnded(TestCaseStats const& _testCaseStats) override;
+ void testGroupEnded(TestGroupStats const& _testGroupStats) override;
+ void testRunEnded(TestRunStats const& _testRunStats) override;
+ void testRunStarting(TestRunInfo const& _testRunInfo) override;
+ private:
+
+ void lazyPrint();
+
+ void lazyPrintWithoutClosingBenchmarkTable();
+ void lazyPrintRunInfo();
+ void lazyPrintGroupInfo();
+ void printTestCaseAndSectionHeader();
+
+ void printClosedHeader(std::string const& _name);
+ void printOpenHeader(std::string const& _name);
+
+ // if string has a : in first line will set indent to follow it on
+ // subsequent lines
+ void printHeaderString(std::string const& _string, std::size_t indent = 0);
+
+ void printTotals(Totals const& totals);
+ void printSummaryRow(std::string const& label, std::vector<SummaryColumn> const& cols, std::size_t row);
+
+ void printTotalsDivider(Totals const& totals);
+ void printSummaryDivider();
+ void printTestFilters();
+
+ private:
+ bool m_headerPrinted = false;
+ };
+
+} // end namespace Catch
+
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+// end catch_reporter_console.h
+// start catch_reporter_junit.h
+
+// start catch_xmlwriter.h
+
+#include <vector>
+
+namespace Catch {
+ enum class XmlFormatting {
+ None = 0x00,
+ Indent = 0x01,
+ Newline = 0x02,
+ };
+
+ XmlFormatting operator | (XmlFormatting lhs, XmlFormatting rhs);
+ XmlFormatting operator & (XmlFormatting lhs, XmlFormatting rhs);
+
+ class XmlEncode {
+ public:
+ enum ForWhat { ForTextNodes, ForAttributes };
+
+ XmlEncode( std::string const& str, ForWhat forWhat = ForTextNodes );
+
+ void encodeTo( std::ostream& os ) const;
+
+ friend std::ostream& operator << ( std::ostream& os, XmlEncode const& xmlEncode );
+
+ private:
+ std::string m_str;
+ ForWhat m_forWhat;
+ };
+
+ class XmlWriter {
+ public:
+
+ class ScopedElement {
+ public:
+ ScopedElement( XmlWriter* writer, XmlFormatting fmt );
+
+ ScopedElement( ScopedElement&& other ) noexcept;
+ ScopedElement& operator=( ScopedElement&& other ) noexcept;
+
+ ~ScopedElement();
+
+ ScopedElement& writeText( std::string const& text, XmlFormatting fmt = XmlFormatting::Newline | XmlFormatting::Indent );
+
+ template<typename T>
+ ScopedElement& writeAttribute( std::string const& name, T const& attribute ) {
+ m_writer->writeAttribute( name, attribute );
+ return *this;
+ }
+
+ private:
+ mutable XmlWriter* m_writer = nullptr;
+ XmlFormatting m_fmt;
+ };
+
+ XmlWriter( std::ostream& os = Catch::cout() );
+ ~XmlWriter();
+
+ XmlWriter( XmlWriter const& ) = delete;
+ XmlWriter& operator=( XmlWriter const& ) = delete;
+
+ XmlWriter& startElement( std::string const& name, XmlFormatting fmt = XmlFormatting::Newline | XmlFormatting::Indent);
+
+ ScopedElement scopedElement( std::string const& name, XmlFormatting fmt = XmlFormatting::Newline | XmlFormatting::Indent);
+
+ XmlWriter& endElement(XmlFormatting fmt = XmlFormatting::Newline | XmlFormatting::Indent);
+
+ XmlWriter& writeAttribute( std::string const& name, std::string const& attribute );
+
+ XmlWriter& writeAttribute( std::string const& name, bool attribute );
+
+ template<typename T>
+ XmlWriter& writeAttribute( std::string const& name, T const& attribute ) {
+ ReusableStringStream rss;
+ rss << attribute;
+ return writeAttribute( name, rss.str() );
+ }
+
+ XmlWriter& writeText( std::string const& text, XmlFormatting fmt = XmlFormatting::Newline | XmlFormatting::Indent);
+
+ XmlWriter& writeComment(std::string const& text, XmlFormatting fmt = XmlFormatting::Newline | XmlFormatting::Indent);
+
+ void writeStylesheetRef( std::string const& url );
+
+ XmlWriter& writeBlankLine();
+
+ void ensureTagClosed();
+
+ private:
+
+ void applyFormatting(XmlFormatting fmt);
+
+ void writeDeclaration();
+
+ void newlineIfNecessary();
+
+ bool m_tagIsOpen = false;
+ bool m_needsNewline = false;
+ std::vector<std::string> m_tags;
+ std::string m_indent;
+ std::ostream& m_os;
+ };
+
+}
+
+// end catch_xmlwriter.h
+namespace Catch {
+
+ class JunitReporter : public CumulativeReporterBase<JunitReporter> {
+ public:
+ JunitReporter(ReporterConfig const& _config);
+
+ ~JunitReporter() override;
+
+ static std::string getDescription();
+
+ void noMatchingTestCases(std::string const& /*spec*/) override;
+
+ void testRunStarting(TestRunInfo const& runInfo) override;
+
+ void testGroupStarting(GroupInfo const& groupInfo) override;
+
+ void testCaseStarting(TestCaseInfo const& testCaseInfo) override;
+ bool assertionEnded(AssertionStats const& assertionStats) override;
+
+ void testCaseEnded(TestCaseStats const& testCaseStats) override;
+
+ void testGroupEnded(TestGroupStats const& testGroupStats) override;
+
+ void testRunEndedCumulative() override;
+
+ void writeGroup(TestGroupNode const& groupNode, double suiteTime);
+
+ void writeTestCase(TestCaseNode const& testCaseNode);
+
+ void writeSection( std::string const& className,
+ std::string const& rootName,
+ SectionNode const& sectionNode,
+ bool testOkToFail );
+
+ void writeAssertions(SectionNode const& sectionNode);
+ void writeAssertion(AssertionStats const& stats);
+
+ XmlWriter xml;
+ Timer suiteTimer;
+ std::string stdOutForSuite;
+ std::string stdErrForSuite;
+ unsigned int unexpectedExceptions = 0;
+ bool m_okToFail = false;
+ };
+
+} // end namespace Catch
+
+// end catch_reporter_junit.h
+// start catch_reporter_xml.h
+
+namespace Catch {
+ class XmlReporter : public StreamingReporterBase<XmlReporter> {
+ public:
+ XmlReporter(ReporterConfig const& _config);
+
+ ~XmlReporter() override;
+
+ static std::string getDescription();
+
+ virtual std::string getStylesheetRef() const;
+
+ void writeSourceInfo(SourceLineInfo const& sourceInfo);
+
+ public: // StreamingReporterBase
+
+ void noMatchingTestCases(std::string const& s) override;
+
+ void testRunStarting(TestRunInfo const& testInfo) override;
+
+ void testGroupStarting(GroupInfo const& groupInfo) override;
+
+ void testCaseStarting(TestCaseInfo const& testInfo) override;
+
+ void sectionStarting(SectionInfo const& sectionInfo) override;
+
+ void assertionStarting(AssertionInfo const&) override;
+
+ bool assertionEnded(AssertionStats const& assertionStats) override;
+
+ void sectionEnded(SectionStats const& sectionStats) override;
+
+ void testCaseEnded(TestCaseStats const& testCaseStats) override;
+
+ void testGroupEnded(TestGroupStats const& testGroupStats) override;
+
+ void testRunEnded(TestRunStats const& testRunStats) override;
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void benchmarkPreparing(std::string const& name) override;
+ void benchmarkStarting(BenchmarkInfo const&) override;
+ void benchmarkEnded(BenchmarkStats<> const&) override;
+ void benchmarkFailed(std::string const&) override;
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ private:
+ Timer m_testCaseTimer;
+ XmlWriter m_xml;
+ int m_sectionDepth = 0;
+ };
+
+} // end namespace Catch
+
+// end catch_reporter_xml.h
+
+// end catch_external_interfaces.h
+#endif
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+// start catch_benchmarking_all.hpp
+
+// A proxy header that includes all of the benchmarking headers to allow
+// concise include of the benchmarking features. You should prefer the
+// individual includes in standard use.
+
+// start catch_benchmark.hpp
+
+ // Benchmark
+
+// start catch_chronometer.hpp
+
+// User-facing chronometer
+
+
+// start catch_clock.hpp
+
+// Clocks
+
+
+#include <chrono>
+#include <ratio>
+
+namespace Catch {
+ namespace Benchmark {
+ template <typename Clock>
+ using ClockDuration = typename Clock::duration;
+ template <typename Clock>
+ using FloatDuration = std::chrono::duration<double, typename Clock::period>;
+
+ template <typename Clock>
+ using TimePoint = typename Clock::time_point;
+
+ using default_clock = std::chrono::steady_clock;
+
+ template <typename Clock>
+ struct now {
+ TimePoint<Clock> operator()() const {
+ return Clock::now();
+ }
+ };
+
+ using fp_seconds = std::chrono::duration<double, std::ratio<1>>;
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_clock.hpp
+// start catch_optimizer.hpp
+
+ // Hinting the optimizer
+
+
+#if defined(_MSC_VER)
+# include <atomic> // atomic_thread_fence
+#endif
+
+namespace Catch {
+ namespace Benchmark {
+#if defined(__GNUC__) || defined(__clang__)
+ template <typename T>
+ inline void keep_memory(T* p) {
+ asm volatile("" : : "g"(p) : "memory");
+ }
+ inline void keep_memory() {
+ asm volatile("" : : : "memory");
+ }
+
+ namespace Detail {
+ inline void optimizer_barrier() { keep_memory(); }
+ } // namespace Detail
+#elif defined(_MSC_VER)
+
+#pragma optimize("", off)
+ template <typename T>
+ inline void keep_memory(T* p) {
+ // thanks @milleniumbug
+ *reinterpret_cast<char volatile*>(p) = *reinterpret_cast<char const volatile*>(p);
+ }
+ // TODO equivalent keep_memory()
+#pragma optimize("", on)
+
+ namespace Detail {
+ inline void optimizer_barrier() {
+ std::atomic_thread_fence(std::memory_order_seq_cst);
+ }
+ } // namespace Detail
+
+#endif
+
+ template <typename T>
+ inline void deoptimize_value(T&& x) {
+ keep_memory(&x);
+ }
+
+ template <typename Fn, typename... Args>
+ inline auto invoke_deoptimized(Fn&& fn, Args&&... args) -> typename std::enable_if<!std::is_same<void, decltype(fn(args...))>::value>::type {
+ deoptimize_value(std::forward<Fn>(fn) (std::forward<Args...>(args...)));
+ }
+
+ template <typename Fn, typename... Args>
+ inline auto invoke_deoptimized(Fn&& fn, Args&&... args) -> typename std::enable_if<std::is_same<void, decltype(fn(args...))>::value>::type {
+ std::forward<Fn>(fn) (std::forward<Args...>(args...));
+ }
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_optimizer.hpp
+// start catch_complete_invoke.hpp
+
+// Invoke with a special case for void
+
+
+#include <type_traits>
+#include <utility>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename T>
+ struct CompleteType { using type = T; };
+ template <>
+ struct CompleteType<void> { struct type {}; };
+
+ template <typename T>
+ using CompleteType_t = typename CompleteType<T>::type;
+
+ template <typename Result>
+ struct CompleteInvoker {
+ template <typename Fun, typename... Args>
+ static Result invoke(Fun&& fun, Args&&... args) {
+ return std::forward<Fun>(fun)(std::forward<Args>(args)...);
+ }
+ };
+ template <>
+ struct CompleteInvoker<void> {
+ template <typename Fun, typename... Args>
+ static CompleteType_t<void> invoke(Fun&& fun, Args&&... args) {
+ std::forward<Fun>(fun)(std::forward<Args>(args)...);
+ return {};
+ }
+ };
+
+ // invoke and not return void :(
+ template <typename Fun, typename... Args>
+ CompleteType_t<FunctionReturnType<Fun, Args...>> complete_invoke(Fun&& fun, Args&&... args) {
+ return CompleteInvoker<FunctionReturnType<Fun, Args...>>::invoke(std::forward<Fun>(fun), std::forward<Args>(args)...);
+ }
+
+ const std::string benchmarkErrorMsg = "a benchmark failed to run successfully";
+ } // namespace Detail
+
+ template <typename Fun>
+ Detail::CompleteType_t<FunctionReturnType<Fun>> user_code(Fun&& fun) {
+ CATCH_TRY{
+ return Detail::complete_invoke(std::forward<Fun>(fun));
+ } CATCH_CATCH_ALL{
+ getResultCapture().benchmarkFailed(translateActiveException());
+ CATCH_RUNTIME_ERROR(Detail::benchmarkErrorMsg);
+ }
+ }
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_complete_invoke.hpp
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ struct ChronometerConcept {
+ virtual void start() = 0;
+ virtual void finish() = 0;
+ virtual ~ChronometerConcept() = default;
+ };
+ template <typename Clock>
+ struct ChronometerModel final : public ChronometerConcept {
+ void start() override { started = Clock::now(); }
+ void finish() override { finished = Clock::now(); }
+
+ ClockDuration<Clock> elapsed() const { return finished - started; }
+
+ TimePoint<Clock> started;
+ TimePoint<Clock> finished;
+ };
+ } // namespace Detail
+
+ struct Chronometer {
+ public:
+ template <typename Fun>
+ void measure(Fun&& fun) { measure(std::forward<Fun>(fun), is_callable<Fun(int)>()); }
+
+ int runs() const { return k; }
+
+ Chronometer(Detail::ChronometerConcept& meter, int k)
+ : impl(&meter)
+ , k(k) {}
+
+ private:
+ template <typename Fun>
+ void measure(Fun&& fun, std::false_type) {
+ measure([&fun](int) { return fun(); }, std::true_type());
+ }
+
+ template <typename Fun>
+ void measure(Fun&& fun, std::true_type) {
+ Detail::optimizer_barrier();
+ impl->start();
+ for (int i = 0; i < k; ++i) invoke_deoptimized(fun, i);
+ impl->finish();
+ Detail::optimizer_barrier();
+ }
+
+ Detail::ChronometerConcept* impl;
+ int k;
+ };
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_chronometer.hpp
+// start catch_environment.hpp
+
+// Environment information
+
+
+namespace Catch {
+ namespace Benchmark {
+ template <typename Duration>
+ struct EnvironmentEstimate {
+ Duration mean;
+ OutlierClassification outliers;
+
+ template <typename Duration2>
+ operator EnvironmentEstimate<Duration2>() const {
+ return { mean, outliers };
+ }
+ };
+ template <typename Clock>
+ struct Environment {
+ using clock_type = Clock;
+ EnvironmentEstimate<FloatDuration<Clock>> clock_resolution;
+ EnvironmentEstimate<FloatDuration<Clock>> clock_cost;
+ };
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_environment.hpp
+// start catch_execution_plan.hpp
+
+ // Execution plan
+
+
+// start catch_benchmark_function.hpp
+
+ // Dumb std::function implementation for consistent call overhead
+
+
+#include <cassert>
+#include <type_traits>
+#include <utility>
+#include <memory>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename T>
+ using Decay = typename std::decay<T>::type;
+ template <typename T, typename U>
+ struct is_related
+ : std::is_same<Decay<T>, Decay<U>> {};
+
+ /// We need to reinvent std::function because every piece of code that might add overhead
+ /// in a measurement context needs to have consistent performance characteristics so that we
+ /// can account for it in the measurement.
+ /// Implementations of std::function with optimizations that aren't always applicable, like
+ /// small buffer optimizations, are not uncommon.
+ /// This is effectively an implementation of std::function without any such optimizations;
+ /// it may be slow, but it is consistently slow.
+ struct BenchmarkFunction {
+ private:
+ struct callable {
+ virtual void call(Chronometer meter) const = 0;
+ virtual callable* clone() const = 0;
+ virtual ~callable() = default;
+ };
+ template <typename Fun>
+ struct model : public callable {
+ model(Fun&& fun) : fun(std::move(fun)) {}
+ model(Fun const& fun) : fun(fun) {}
+
+ model<Fun>* clone() const override { return new model<Fun>(*this); }
+
+ void call(Chronometer meter) const override {
+ call(meter, is_callable<Fun(Chronometer)>());
+ }
+ void call(Chronometer meter, std::true_type) const {
+ fun(meter);
+ }
+ void call(Chronometer meter, std::false_type) const {
+ meter.measure(fun);
+ }
+
+ Fun fun;
+ };
+
+ struct do_nothing { void operator()() const {} };
+
+ template <typename T>
+ BenchmarkFunction(model<T>* c) : f(c) {}
+
+ public:
+ BenchmarkFunction()
+ : f(new model<do_nothing>{ {} }) {}
+
+ template <typename Fun,
+ typename std::enable_if<!is_related<Fun, BenchmarkFunction>::value, int>::type = 0>
+ BenchmarkFunction(Fun&& fun)
+ : f(new model<typename std::decay<Fun>::type>(std::forward<Fun>(fun))) {}
+
+ BenchmarkFunction(BenchmarkFunction&& that)
+ : f(std::move(that.f)) {}
+
+ BenchmarkFunction(BenchmarkFunction const& that)
+ : f(that.f->clone()) {}
+
+ BenchmarkFunction& operator=(BenchmarkFunction&& that) {
+ f = std::move(that.f);
+ return *this;
+ }
+
+ BenchmarkFunction& operator=(BenchmarkFunction const& that) {
+ f.reset(that.f->clone());
+ return *this;
+ }
+
+ void operator()(Chronometer meter) const { f->call(meter); }
+
+ private:
+ std::unique_ptr<callable> f;
+ };
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_benchmark_function.hpp
+// start catch_repeat.hpp
+
+// repeat algorithm
+
+
+#include <type_traits>
+#include <utility>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename Fun>
+ struct repeater {
+ void operator()(int k) const {
+ for (int i = 0; i < k; ++i) {
+ fun();
+ }
+ }
+ Fun fun;
+ };
+ template <typename Fun>
+ repeater<typename std::decay<Fun>::type> repeat(Fun&& fun) {
+ return { std::forward<Fun>(fun) };
+ }
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_repeat.hpp
+// start catch_run_for_at_least.hpp
+
+// Run a function for a minimum amount of time
+
+
+// start catch_measure.hpp
+
+// Measure
+
+
+// start catch_timing.hpp
+
+// Timing
+
+
+#include <tuple>
+#include <type_traits>
+
+namespace Catch {
+ namespace Benchmark {
+ template <typename Duration, typename Result>
+ struct Timing {
+ Duration elapsed;
+ Result result;
+ int iterations;
+ };
+ template <typename Clock, typename Func, typename... Args>
+ using TimingOf = Timing<ClockDuration<Clock>, Detail::CompleteType_t<FunctionReturnType<Func, Args...>>>;
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_timing.hpp
+#include <utility>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename Clock, typename Fun, typename... Args>
+ TimingOf<Clock, Fun, Args...> measure(Fun&& fun, Args&&... args) {
+ auto start = Clock::now();
+ auto&& r = Detail::complete_invoke(fun, std::forward<Args>(args)...);
+ auto end = Clock::now();
+ auto delta = end - start;
+ return { delta, std::forward<decltype(r)>(r), 1 };
+ }
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_measure.hpp
+#include <utility>
+#include <type_traits>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename Clock, typename Fun>
+ TimingOf<Clock, Fun, int> measure_one(Fun&& fun, int iters, std::false_type) {
+ return Detail::measure<Clock>(fun, iters);
+ }
+ template <typename Clock, typename Fun>
+ TimingOf<Clock, Fun, Chronometer> measure_one(Fun&& fun, int iters, std::true_type) {
+ Detail::ChronometerModel<Clock> meter;
+ auto&& result = Detail::complete_invoke(fun, Chronometer(meter, iters));
+
+ return { meter.elapsed(), std::move(result), iters };
+ }
+
+ template <typename Clock, typename Fun>
+ using run_for_at_least_argument_t = typename std::conditional<is_callable<Fun(Chronometer)>::value, Chronometer, int>::type;
+
+ struct optimized_away_error : std::exception {
+ const char* what() const noexcept override {
+ return "could not measure benchmark, maybe it was optimized away";
+ }
+ };
+
+ template <typename Clock, typename Fun>
+ TimingOf<Clock, Fun, run_for_at_least_argument_t<Clock, Fun>> run_for_at_least(ClockDuration<Clock> how_long, int seed, Fun&& fun) {
+ auto iters = seed;
+ while (iters < (1 << 30)) {
+ auto&& Timing = measure_one<Clock>(fun, iters, is_callable<Fun(Chronometer)>());
+
+ if (Timing.elapsed >= how_long) {
+ return { Timing.elapsed, std::move(Timing.result), iters };
+ }
+ iters *= 2;
+ }
+ Catch::throw_exception(optimized_away_error{});
+ }
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_run_for_at_least.hpp
+#include <algorithm>
+#include <iterator>
+
+namespace Catch {
+ namespace Benchmark {
+ template <typename Duration>
+ struct ExecutionPlan {
+ int iterations_per_sample;
+ Duration estimated_duration;
+ Detail::BenchmarkFunction benchmark;
+ Duration warmup_time;
+ int warmup_iterations;
+
+ template <typename Duration2>
+ operator ExecutionPlan<Duration2>() const {
+ return { iterations_per_sample, estimated_duration, benchmark, warmup_time, warmup_iterations };
+ }
+
+ template <typename Clock>
+ std::vector<FloatDuration<Clock>> run(const IConfig &cfg, Environment<FloatDuration<Clock>> env) const {
+ // warmup a bit
+ Detail::run_for_at_least<Clock>(std::chrono::duration_cast<ClockDuration<Clock>>(warmup_time), warmup_iterations, Detail::repeat(now<Clock>{}));
+
+ std::vector<FloatDuration<Clock>> times;
+ times.reserve(cfg.benchmarkSamples());
+ std::generate_n(std::back_inserter(times), cfg.benchmarkSamples(), [this, env] {
+ Detail::ChronometerModel<Clock> model;
+ this->benchmark(Chronometer(model, iterations_per_sample));
+ auto sample_time = model.elapsed() - env.clock_cost.mean;
+ if (sample_time < FloatDuration<Clock>::zero()) sample_time = FloatDuration<Clock>::zero();
+ return sample_time / iterations_per_sample;
+ });
+ return times;
+ }
+ };
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_execution_plan.hpp
+// start catch_estimate_clock.hpp
+
+ // Environment measurement
+
+
+// start catch_stats.hpp
+
+// Statistical analysis tools
+
+
+#include <algorithm>
+#include <functional>
+#include <vector>
+#include <iterator>
+#include <numeric>
+#include <tuple>
+#include <cmath>
+#include <utility>
+#include <cstddef>
+#include <random>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ using sample = std::vector<double>;
+
+ double weighted_average_quantile(int k, int q, std::vector<double>::iterator first, std::vector<double>::iterator last);
+
+ template <typename Iterator>
+ OutlierClassification classify_outliers(Iterator first, Iterator last) {
+ std::vector<double> copy(first, last);
+
+ auto q1 = weighted_average_quantile(1, 4, copy.begin(), copy.end());
+ auto q3 = weighted_average_quantile(3, 4, copy.begin(), copy.end());
+ auto iqr = q3 - q1;
+ auto los = q1 - (iqr * 3.);
+ auto lom = q1 - (iqr * 1.5);
+ auto him = q3 + (iqr * 1.5);
+ auto his = q3 + (iqr * 3.);
+
+ OutlierClassification o;
+ for (; first != last; ++first) {
+ auto&& t = *first;
+ if (t < los) ++o.low_severe;
+ else if (t < lom) ++o.low_mild;
+ else if (t > his) ++o.high_severe;
+ else if (t > him) ++o.high_mild;
+ ++o.samples_seen;
+ }
+ return o;
+ }
+
+ template <typename Iterator>
+ double mean(Iterator first, Iterator last) {
+ auto count = last - first;
+ double sum = std::accumulate(first, last, 0.);
+ return sum / count;
+ }
+
+ template <typename URng, typename Iterator, typename Estimator>
+ sample resample(URng& rng, int resamples, Iterator first, Iterator last, Estimator& estimator) {
+ auto n = last - first;
+ std::uniform_int_distribution<decltype(n)> dist(0, n - 1);
+
+ sample out;
+ out.reserve(resamples);
+ std::generate_n(std::back_inserter(out), resamples, [n, first, &estimator, &dist, &rng] {
+ std::vector<double> resampled;
+ resampled.reserve(n);
+ std::generate_n(std::back_inserter(resampled), n, [first, &dist, &rng] { return first[dist(rng)]; });
+ return estimator(resampled.begin(), resampled.end());
+ });
+ std::sort(out.begin(), out.end());
+ return out;
+ }
+
+ template <typename Estimator, typename Iterator>
+ sample jackknife(Estimator&& estimator, Iterator first, Iterator last) {
+ auto n = last - first;
+ auto second = std::next(first);
+ sample results;
+ results.reserve(n);
+
+ for (auto it = first; it != last; ++it) {
+ std::iter_swap(it, first);
+ results.push_back(estimator(second, last));
+ }
+
+ return results;
+ }
+
+ inline double normal_cdf(double x) {
+ return std::erfc(-x / std::sqrt(2.0)) / 2.0;
+ }
+
+ double erfc_inv(double x);
+
+ double normal_quantile(double p);
+
+ template <typename Iterator, typename Estimator>
+ Estimate<double> bootstrap(double confidence_level, Iterator first, Iterator last, sample const& resample, Estimator&& estimator) {
+ auto n_samples = last - first;
+
+ double point = estimator(first, last);
+ // Degenerate case with a single sample
+ if (n_samples == 1) return { point, point, point, confidence_level };
+
+ sample jack = jackknife(estimator, first, last);
+ double jack_mean = mean(jack.begin(), jack.end());
+ double sum_squares, sum_cubes;
+ std::tie(sum_squares, sum_cubes) = std::accumulate(jack.begin(), jack.end(), std::make_pair(0., 0.), [jack_mean](std::pair<double, double> sqcb, double x) -> std::pair<double, double> {
+ auto d = jack_mean - x;
+ auto d2 = d * d;
+ auto d3 = d2 * d;
+ return { sqcb.first + d2, sqcb.second + d3 };
+ });
+
+ double accel = sum_cubes / (6 * std::pow(sum_squares, 1.5));
+ int n = static_cast<int>(resample.size());
+ double prob_n = std::count_if(resample.begin(), resample.end(), [point](double x) { return x < point; }) / (double)n;
+ // degenerate case with uniform samples
+ if (prob_n == 0) return { point, point, point, confidence_level };
+
+ double bias = normal_quantile(prob_n);
+ double z1 = normal_quantile((1. - confidence_level) / 2.);
+
+ auto cumn = [n](double x) -> int {
+ return std::lround(normal_cdf(x) * n); };
+ auto a = [bias, accel](double b) { return bias + b / (1. - accel * b); };
+ double b1 = bias + z1;
+ double b2 = bias - z1;
+ double a1 = a(b1);
+ double a2 = a(b2);
+ auto lo = (std::max)(cumn(a1), 0);
+ auto hi = (std::min)(cumn(a2), n - 1);
+
+ return { point, resample[lo], resample[hi], confidence_level };
+ }
+
+ double outlier_variance(Estimate<double> mean, Estimate<double> stddev, int n);
+
+ struct bootstrap_analysis {
+ Estimate<double> mean;
+ Estimate<double> standard_deviation;
+ double outlier_variance;
+ };
+
+ bootstrap_analysis analyse_samples(double confidence_level, int n_resamples, std::vector<double>::iterator first, std::vector<double>::iterator last);
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_stats.hpp
+#include <algorithm>
+#include <iterator>
+#include <tuple>
+#include <vector>
+#include <cmath>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename Clock>
+ std::vector<double> resolution(int k) {
+ std::vector<TimePoint<Clock>> times;
+ times.reserve(k + 1);
+ std::generate_n(std::back_inserter(times), k + 1, now<Clock>{});
+
+ std::vector<double> deltas;
+ deltas.reserve(k);
+ std::transform(std::next(times.begin()), times.end(), times.begin(),
+ std::back_inserter(deltas),
+ [](TimePoint<Clock> a, TimePoint<Clock> b) { return static_cast<double>((a - b).count()); });
+
+ return deltas;
+ }
+
+ const auto warmup_iterations = 10000;
+ const auto warmup_time = std::chrono::milliseconds(100);
+ const auto minimum_ticks = 1000;
+ const auto warmup_seed = 10000;
+ const auto clock_resolution_estimation_time = std::chrono::milliseconds(500);
+ const auto clock_cost_estimation_time_limit = std::chrono::seconds(1);
+ const auto clock_cost_estimation_tick_limit = 100000;
+ const auto clock_cost_estimation_time = std::chrono::milliseconds(10);
+ const auto clock_cost_estimation_iterations = 10000;
+
+ template <typename Clock>
+ int warmup() {
+ return run_for_at_least<Clock>(std::chrono::duration_cast<ClockDuration<Clock>>(warmup_time), warmup_seed, &resolution<Clock>)
+ .iterations;
+ }
+ template <typename Clock>
+ EnvironmentEstimate<FloatDuration<Clock>> estimate_clock_resolution(int iterations) {
+ auto r = run_for_at_least<Clock>(std::chrono::duration_cast<ClockDuration<Clock>>(clock_resolution_estimation_time), iterations, &resolution<Clock>)
+ .result;
+ return {
+ FloatDuration<Clock>(mean(r.begin(), r.end())),
+ classify_outliers(r.begin(), r.end()),
+ };
+ }
+ template <typename Clock>
+ EnvironmentEstimate<FloatDuration<Clock>> estimate_clock_cost(FloatDuration<Clock> resolution) {
+ auto time_limit = (std::min)(
+ resolution * clock_cost_estimation_tick_limit,
+ FloatDuration<Clock>(clock_cost_estimation_time_limit));
+ auto time_clock = [](int k) {
+ return Detail::measure<Clock>([k] {
+ for (int i = 0; i < k; ++i) {
+ volatile auto ignored = Clock::now();
+ (void)ignored;
+ }
+ }).elapsed;
+ };
+ time_clock(1);
+ int iters = clock_cost_estimation_iterations;
+ auto&& r = run_for_at_least<Clock>(std::chrono::duration_cast<ClockDuration<Clock>>(clock_cost_estimation_time), iters, time_clock);
+ std::vector<double> times;
+ int nsamples = static_cast<int>(std::ceil(time_limit / r.elapsed));
+ times.reserve(nsamples);
+ std::generate_n(std::back_inserter(times), nsamples, [time_clock, &r] {
+ return static_cast<double>((time_clock(r.iterations) / r.iterations).count());
+ });
+ return {
+ FloatDuration<Clock>(mean(times.begin(), times.end())),
+ classify_outliers(times.begin(), times.end()),
+ };
+ }
+
+ template <typename Clock>
+ Environment<FloatDuration<Clock>> measure_environment() {
+ static Environment<FloatDuration<Clock>>* env = nullptr;
+ if (env) {
+ return *env;
+ }
+
+ auto iters = Detail::warmup<Clock>();
+ auto resolution = Detail::estimate_clock_resolution<Clock>(iters);
+ auto cost = Detail::estimate_clock_cost<Clock>(resolution.mean);
+
+ env = new Environment<FloatDuration<Clock>>{ resolution, cost };
+ return *env;
+ }
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_estimate_clock.hpp
+// start catch_analyse.hpp
+
+ // Run and analyse one benchmark
+
+
+// start catch_sample_analysis.hpp
+
+// Benchmark results
+
+
+#include <algorithm>
+#include <vector>
+#include <string>
+#include <iterator>
+
+namespace Catch {
+ namespace Benchmark {
+ template <typename Duration>
+ struct SampleAnalysis {
+ std::vector<Duration> samples;
+ Estimate<Duration> mean;
+ Estimate<Duration> standard_deviation;
+ OutlierClassification outliers;
+ double outlier_variance;
+
+ template <typename Duration2>
+ operator SampleAnalysis<Duration2>() const {
+ std::vector<Duration2> samples2;
+ samples2.reserve(samples.size());
+ std::transform(samples.begin(), samples.end(), std::back_inserter(samples2), [](Duration d) { return Duration2(d); });
+ return {
+ std::move(samples2),
+ mean,
+ standard_deviation,
+ outliers,
+ outlier_variance,
+ };
+ }
+ };
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_sample_analysis.hpp
+#include <algorithm>
+#include <iterator>
+#include <vector>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename Duration, typename Iterator>
+ SampleAnalysis<Duration> analyse(const IConfig &cfg, Environment<Duration>, Iterator first, Iterator last) {
+ if (!cfg.benchmarkNoAnalysis()) {
+ std::vector<double> samples;
+ samples.reserve(last - first);
+ std::transform(first, last, std::back_inserter(samples), [](Duration d) { return d.count(); });
+
+ auto analysis = Catch::Benchmark::Detail::analyse_samples(cfg.benchmarkConfidenceInterval(), cfg.benchmarkResamples(), samples.begin(), samples.end());
+ auto outliers = Catch::Benchmark::Detail::classify_outliers(samples.begin(), samples.end());
+
+ auto wrap_estimate = [](Estimate<double> e) {
+ return Estimate<Duration> {
+ Duration(e.point),
+ Duration(e.lower_bound),
+ Duration(e.upper_bound),
+ e.confidence_interval,
+ };
+ };
+ std::vector<Duration> samples2;
+ samples2.reserve(samples.size());
+ std::transform(samples.begin(), samples.end(), std::back_inserter(samples2), [](double d) { return Duration(d); });
+ return {
+ std::move(samples2),
+ wrap_estimate(analysis.mean),
+ wrap_estimate(analysis.standard_deviation),
+ outliers,
+ analysis.outlier_variance,
+ };
+ } else {
+ std::vector<Duration> samples;
+ samples.reserve(last - first);
+
+ Duration mean = Duration(0);
+ int i = 0;
+ for (auto it = first; it < last; ++it, ++i) {
+ samples.push_back(Duration(*it));
+ mean += Duration(*it);
+ }
+ mean /= i;
+
+ return {
+ std::move(samples),
+ Estimate<Duration>{mean, mean, mean, 0.0},
+ Estimate<Duration>{Duration(0), Duration(0), Duration(0), 0.0},
+ OutlierClassification{},
+ 0.0
+ };
+ }
+ }
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+// end catch_analyse.hpp
+#include <algorithm>
+#include <functional>
+#include <string>
+#include <vector>
+#include <cmath>
+
+namespace Catch {
+ namespace Benchmark {
+ struct Benchmark {
+ Benchmark(std::string &&name)
+ : name(std::move(name)) {}
+
+ template <class FUN>
+ Benchmark(std::string &&name, FUN &&func)
+ : fun(std::move(func)), name(std::move(name)) {}
+
+ template <typename Clock>
+ ExecutionPlan<FloatDuration<Clock>> prepare(const IConfig &cfg, Environment<FloatDuration<Clock>> env) const {
+ auto min_time = env.clock_resolution.mean * Detail::minimum_ticks;
+ auto run_time = std::max(min_time, std::chrono::duration_cast<decltype(min_time)>(cfg.benchmarkWarmupTime()));
+ auto&& test = Detail::run_for_at_least<Clock>(std::chrono::duration_cast<ClockDuration<Clock>>(run_time), 1, fun);
+ int new_iters = static_cast<int>(std::ceil(min_time * test.iterations / test.elapsed));
+ return { new_iters, test.elapsed / test.iterations * new_iters * cfg.benchmarkSamples(), fun, std::chrono::duration_cast<FloatDuration<Clock>>(cfg.benchmarkWarmupTime()), Detail::warmup_iterations };
+ }
+
+ template <typename Clock = default_clock>
+ void run() {
+ IConfigPtr cfg = getCurrentContext().getConfig();
+
+ auto env = Detail::measure_environment<Clock>();
+
+ getResultCapture().benchmarkPreparing(name);
+ CATCH_TRY{
+ auto plan = user_code([&] {
+ return prepare<Clock>(*cfg, env);
+ });
+
+ BenchmarkInfo info {
+ name,
+ plan.estimated_duration.count(),
+ plan.iterations_per_sample,
+ cfg->benchmarkSamples(),
+ cfg->benchmarkResamples(),
+ env.clock_resolution.mean.count(),
+ env.clock_cost.mean.count()
+ };
+
+ getResultCapture().benchmarkStarting(info);
+
+ auto samples = user_code([&] {
+ return plan.template run<Clock>(*cfg, env);
+ });
+
+ auto analysis = Detail::analyse(*cfg, env, samples.begin(), samples.end());
+ BenchmarkStats<FloatDuration<Clock>> stats{ info, analysis.samples, analysis.mean, analysis.standard_deviation, analysis.outliers, analysis.outlier_variance };
+ getResultCapture().benchmarkEnded(stats);
+
+ } CATCH_CATCH_ALL{
+ if (translateActiveException() != Detail::benchmarkErrorMsg) // benchmark errors have been reported, otherwise rethrow.
+ std::rethrow_exception(std::current_exception());
+ }
+ }
+
+ // sets lambda to be used in fun *and* executes benchmark!
+ template <typename Fun,
+ typename std::enable_if<!Detail::is_related<Fun, Benchmark>::value, int>::type = 0>
+ Benchmark & operator=(Fun func) {
+ fun = Detail::BenchmarkFunction(func);
+ run();
+ return *this;
+ }
+
+ explicit operator bool() {
+ return true;
+ }
+
+ private:
+ Detail::BenchmarkFunction fun;
+ std::string name;
+ };
+ }
+} // namespace Catch
+
+#define INTERNAL_CATCH_GET_1_ARG(arg1, arg2, ...) arg1
+#define INTERNAL_CATCH_GET_2_ARG(arg1, arg2, ...) arg2
+
+#define INTERNAL_CATCH_BENCHMARK(BenchmarkName, name, benchmarkIndex)\
+ if( Catch::Benchmark::Benchmark BenchmarkName{name} ) \
+ BenchmarkName = [&](int benchmarkIndex)
+
+#define INTERNAL_CATCH_BENCHMARK_ADVANCED(BenchmarkName, name)\
+ if( Catch::Benchmark::Benchmark BenchmarkName{name} ) \
+ BenchmarkName = [&]
+
+// end catch_benchmark.hpp
+// start catch_constructor.hpp
+
+// Constructor and destructor helpers
+
+
+#include <type_traits>
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+ template <typename T, bool Destruct>
+ struct ObjectStorage
+ {
+ ObjectStorage() : data() {}
+
+ ObjectStorage(const ObjectStorage& other)
+ {
+ new(&data) T(other.stored_object());
+ }
+
+ ObjectStorage(ObjectStorage&& other)
+ {
+ new(&data) T(std::move(other.stored_object()));
+ }
+
+ ~ObjectStorage() { destruct_on_exit<T>(); }
+
+ template <typename... Args>
+ void construct(Args&&... args)
+ {
+ new (&data) T(std::forward<Args>(args)...);
+ }
+
+ template <bool AllowManualDestruction = !Destruct>
+ typename std::enable_if<AllowManualDestruction>::type destruct()
+ {
+ stored_object().~T();
+ }
+
+ private:
+ // If this is a constructor benchmark, destruct the underlying object
+ template <typename U>
+ void destruct_on_exit(typename std::enable_if<Destruct, U>::type* = 0) { destruct<true>(); }
+ // Otherwise, don't
+ template <typename U>
+ void destruct_on_exit(typename std::enable_if<!Destruct, U>::type* = 0) { }
+
+ T& stored_object() {
+ return *static_cast<T*>(static_cast<void*>(&data));
+ }
+
+ T const& stored_object() const {
+ return *static_cast<T*>(static_cast<void*>(&data));
+ }
+
+ struct { alignas(T) unsigned char data[sizeof(T)]; } data;
+ };
+ }
+
+ template <typename T>
+ using storage_for = Detail::ObjectStorage<T, true>;
+
+ template <typename T>
+ using destructable_object = Detail::ObjectStorage<T, false>;
+ }
+}
+
+// end catch_constructor.hpp
+// end catch_benchmarking_all.hpp
+#endif
+
+#endif // ! CATCH_CONFIG_IMPL_ONLY
+
+#ifdef CATCH_IMPL
+// start catch_impl.hpp
+
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wweak-vtables"
+#endif
+
+// Keep these here for external reporters
+// start catch_test_case_tracker.h
+
+#include <string>
+#include <vector>
+#include <memory>
+
+namespace Catch {
+namespace TestCaseTracking {
+
+ struct NameAndLocation {
+ std::string name;
+ SourceLineInfo location;
+
+ NameAndLocation( std::string const& _name, SourceLineInfo const& _location );
+ friend bool operator==(NameAndLocation const& lhs, NameAndLocation const& rhs) {
+ return lhs.name == rhs.name
+ && lhs.location == rhs.location;
+ }
+ };
+
+ class ITracker;
+
+ using ITrackerPtr = std::shared_ptr<ITracker>;
+
+ class ITracker {
+ NameAndLocation m_nameAndLocation;
+
+ public:
+ ITracker(NameAndLocation const& nameAndLoc) :
+ m_nameAndLocation(nameAndLoc)
+ {}
+
+ // static queries
+ NameAndLocation const& nameAndLocation() const {
+ return m_nameAndLocation;
+ }
+
+ virtual ~ITracker();
+
+ // dynamic queries
+ virtual bool isComplete() const = 0; // Successfully completed or failed
+ virtual bool isSuccessfullyCompleted() const = 0;
+ virtual bool isOpen() const = 0; // Started but not complete
+ virtual bool hasChildren() const = 0;
+ virtual bool hasStarted() const = 0;
+
+ virtual ITracker& parent() = 0;
+
+ // actions
+ virtual void close() = 0; // Successfully complete
+ virtual void fail() = 0;
+ virtual void markAsNeedingAnotherRun() = 0;
+
+ virtual void addChild( ITrackerPtr const& child ) = 0;
+ virtual ITrackerPtr findChild( NameAndLocation const& nameAndLocation ) = 0;
+ virtual void openChild() = 0;
+
+ // Debug/ checking
+ virtual bool isSectionTracker() const = 0;
+ virtual bool isGeneratorTracker() const = 0;
+ };
+
+ class TrackerContext {
+
+ enum RunState {
+ NotStarted,
+ Executing,
+ CompletedCycle
+ };
+
+ ITrackerPtr m_rootTracker;
+ ITracker* m_currentTracker = nullptr;
+ RunState m_runState = NotStarted;
+
+ public:
+
+ ITracker& startRun();
+ void endRun();
+
+ void startCycle();
+ void completeCycle();
+
+ bool completedCycle() const;
+ ITracker& currentTracker();
+ void setCurrentTracker( ITracker* tracker );
+ };
+
+ class TrackerBase : public ITracker {
+ protected:
+ enum CycleState {
+ NotStarted,
+ Executing,
+ ExecutingChildren,
+ NeedsAnotherRun,
+ CompletedSuccessfully,
+ Failed
+ };
+
+ using Children = std::vector<ITrackerPtr>;
+ TrackerContext& m_ctx;
+ ITracker* m_parent;
+ Children m_children;
+ CycleState m_runState = NotStarted;
+
+ public:
+ TrackerBase( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent );
+
+ bool isComplete() const override;
+ bool isSuccessfullyCompleted() const override;
+ bool isOpen() const override;
+ bool hasChildren() const override;
+ bool hasStarted() const override {
+ return m_runState != NotStarted;
+ }
+
+ void addChild( ITrackerPtr const& child ) override;
+
+ ITrackerPtr findChild( NameAndLocation const& nameAndLocation ) override;
+ ITracker& parent() override;
+
+ void openChild() override;
+
+ bool isSectionTracker() const override;
+ bool isGeneratorTracker() const override;
+
+ void open();
+
+ void close() override;
+ void fail() override;
+ void markAsNeedingAnotherRun() override;
+
+ private:
+ void moveToParent();
+ void moveToThis();
+ };
+
+ class SectionTracker : public TrackerBase {
+ std::vector<std::string> m_filters;
+ std::string m_trimmed_name;
+ public:
+ SectionTracker( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent );
+
+ bool isSectionTracker() const override;
+
+ bool isComplete() const override;
+
+ static SectionTracker& acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation );
+
+ void tryOpen();
+
+ void addInitialFilters( std::vector<std::string> const& filters );
+ void addNextFilters( std::vector<std::string> const& filters );
+ //! Returns filters active in this tracker
+ std::vector<std::string> const& getFilters() const;
+ //! Returns whitespace-trimmed name of the tracked section
+ std::string const& trimmedName() const;
+ };
+
+} // namespace TestCaseTracking
+
+using TestCaseTracking::ITracker;
+using TestCaseTracking::TrackerContext;
+using TestCaseTracking::SectionTracker;
+
+} // namespace Catch
+
+// end catch_test_case_tracker.h
+
+// start catch_leak_detector.h
+
+namespace Catch {
+
+ struct LeakDetector {
+ LeakDetector();
+ ~LeakDetector();
+ };
+
+}
+// end catch_leak_detector.h
+// Cpp files will be included in the single-header file here
+// start catch_stats.cpp
+
+// Statistical analysis tools
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+
+#include <cassert>
+#include <random>
+
+#if defined(CATCH_CONFIG_USE_ASYNC)
+#include <future>
+#endif
+
+namespace {
+ double erf_inv(double x) {
+ // Code accompanying the article "Approximating the erfinv function" in GPU Computing Gems, Volume 2
+ double w, p;
+
+ w = -log((1.0 - x) * (1.0 + x));
+
+ if (w < 6.250000) {
+ w = w - 3.125000;
+ p = -3.6444120640178196996e-21;
+ p = -1.685059138182016589e-19 + p * w;
+ p = 1.2858480715256400167e-18 + p * w;
+ p = 1.115787767802518096e-17 + p * w;
+ p = -1.333171662854620906e-16 + p * w;
+ p = 2.0972767875968561637e-17 + p * w;
+ p = 6.6376381343583238325e-15 + p * w;
+ p = -4.0545662729752068639e-14 + p * w;
+ p = -8.1519341976054721522e-14 + p * w;
+ p = 2.6335093153082322977e-12 + p * w;
+ p = -1.2975133253453532498e-11 + p * w;
+ p = -5.4154120542946279317e-11 + p * w;
+ p = 1.051212273321532285e-09 + p * w;
+ p = -4.1126339803469836976e-09 + p * w;
+ p = -2.9070369957882005086e-08 + p * w;
+ p = 4.2347877827932403518e-07 + p * w;
+ p = -1.3654692000834678645e-06 + p * w;
+ p = -1.3882523362786468719e-05 + p * w;
+ p = 0.0001867342080340571352 + p * w;
+ p = -0.00074070253416626697512 + p * w;
+ p = -0.0060336708714301490533 + p * w;
+ p = 0.24015818242558961693 + p * w;
+ p = 1.6536545626831027356 + p * w;
+ } else if (w < 16.000000) {
+ w = sqrt(w) - 3.250000;
+ p = 2.2137376921775787049e-09;
+ p = 9.0756561938885390979e-08 + p * w;
+ p = -2.7517406297064545428e-07 + p * w;
+ p = 1.8239629214389227755e-08 + p * w;
+ p = 1.5027403968909827627e-06 + p * w;
+ p = -4.013867526981545969e-06 + p * w;
+ p = 2.9234449089955446044e-06 + p * w;
+ p = 1.2475304481671778723e-05 + p * w;
+ p = -4.7318229009055733981e-05 + p * w;
+ p = 6.8284851459573175448e-05 + p * w;
+ p = 2.4031110387097893999e-05 + p * w;
+ p = -0.0003550375203628474796 + p * w;
+ p = 0.00095328937973738049703 + p * w;
+ p = -0.0016882755560235047313 + p * w;
+ p = 0.0024914420961078508066 + p * w;
+ p = -0.0037512085075692412107 + p * w;
+ p = 0.005370914553590063617 + p * w;
+ p = 1.0052589676941592334 + p * w;
+ p = 3.0838856104922207635 + p * w;
+ } else {
+ w = sqrt(w) - 5.000000;
+ p = -2.7109920616438573243e-11;
+ p = -2.5556418169965252055e-10 + p * w;
+ p = 1.5076572693500548083e-09 + p * w;
+ p = -3.7894654401267369937e-09 + p * w;
+ p = 7.6157012080783393804e-09 + p * w;
+ p = -1.4960026627149240478e-08 + p * w;
+ p = 2.9147953450901080826e-08 + p * w;
+ p = -6.7711997758452339498e-08 + p * w;
+ p = 2.2900482228026654717e-07 + p * w;
+ p = -9.9298272942317002539e-07 + p * w;
+ p = 4.5260625972231537039e-06 + p * w;
+ p = -1.9681778105531670567e-05 + p * w;
+ p = 7.5995277030017761139e-05 + p * w;
+ p = -0.00021503011930044477347 + p * w;
+ p = -0.00013871931833623122026 + p * w;
+ p = 1.0103004648645343977 + p * w;
+ p = 4.8499064014085844221 + p * w;
+ }
+ return p * x;
+ }
+
+ double standard_deviation(std::vector<double>::iterator first, std::vector<double>::iterator last) {
+ auto m = Catch::Benchmark::Detail::mean(first, last);
+ double variance = std::accumulate(first, last, 0., [m](double a, double b) {
+ double diff = b - m;
+ return a + diff * diff;
+ }) / (last - first);
+ return std::sqrt(variance);
+ }
+
+}
+
+namespace Catch {
+ namespace Benchmark {
+ namespace Detail {
+
+ double weighted_average_quantile(int k, int q, std::vector<double>::iterator first, std::vector<double>::iterator last) {
+ auto count = last - first;
+ double idx = (count - 1) * k / static_cast<double>(q);
+ int j = static_cast<int>(idx);
+ double g = idx - j;
+ std::nth_element(first, first + j, last);
+ auto xj = first[j];
+ if (g == 0) return xj;
+
+ auto xj1 = *std::min_element(first + (j + 1), last);
+ return xj + g * (xj1 - xj);
+ }
+
+ double erfc_inv(double x) {
+ return erf_inv(1.0 - x);
+ }
+
+ double normal_quantile(double p) {
+ static const double ROOT_TWO = std::sqrt(2.0);
+
+ double result = 0.0;
+ assert(p >= 0 && p <= 1);
+ if (p < 0 || p > 1) {
+ return result;
+ }
+
+ result = -erfc_inv(2.0 * p);
+ // result *= normal distribution standard deviation (1.0) * sqrt(2)
+ result *= /*sd * */ ROOT_TWO;
+ // result += normal disttribution mean (0)
+ return result;
+ }
+
+ double outlier_variance(Estimate<double> mean, Estimate<double> stddev, int n) {
+ double sb = stddev.point;
+ double mn = mean.point / n;
+ double mg_min = mn / 2.;
+ double sg = (std::min)(mg_min / 4., sb / std::sqrt(n));
+ double sg2 = sg * sg;
+ double sb2 = sb * sb;
+
+ auto c_max = [n, mn, sb2, sg2](double x) -> double {
+ double k = mn - x;
+ double d = k * k;
+ double nd = n * d;
+ double k0 = -n * nd;
+ double k1 = sb2 - n * sg2 + nd;
+ double det = k1 * k1 - 4 * sg2 * k0;
+ return (int)(-2. * k0 / (k1 + std::sqrt(det)));
+ };
+
+ auto var_out = [n, sb2, sg2](double c) {
+ double nc = n - c;
+ return (nc / n) * (sb2 - nc * sg2);
+ };
+
+ return (std::min)(var_out(1), var_out((std::min)(c_max(0.), c_max(mg_min)))) / sb2;
+ }
+
+ bootstrap_analysis analyse_samples(double confidence_level, int n_resamples, std::vector<double>::iterator first, std::vector<double>::iterator last) {
+ CATCH_INTERNAL_START_WARNINGS_SUPPRESSION
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS
+ static std::random_device entropy;
+ CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+
+ auto n = static_cast<int>(last - first); // seriously, one can't use integral types without hell in C++
+
+ auto mean = &Detail::mean<std::vector<double>::iterator>;
+ auto stddev = &standard_deviation;
+
+#if defined(CATCH_CONFIG_USE_ASYNC)
+ auto Estimate = [=](double(*f)(std::vector<double>::iterator, std::vector<double>::iterator)) {
+ auto seed = entropy();
+ return std::async(std::launch::async, [=] {
+ std::mt19937 rng(seed);
+ auto resampled = resample(rng, n_resamples, first, last, f);
+ return bootstrap(confidence_level, first, last, resampled, f);
+ });
+ };
+
+ auto mean_future = Estimate(mean);
+ auto stddev_future = Estimate(stddev);
+
+ auto mean_estimate = mean_future.get();
+ auto stddev_estimate = stddev_future.get();
+#else
+ auto Estimate = [=](double(*f)(std::vector<double>::iterator, std::vector<double>::iterator)) {
+ auto seed = entropy();
+ std::mt19937 rng(seed);
+ auto resampled = resample(rng, n_resamples, first, last, f);
+ return bootstrap(confidence_level, first, last, resampled, f);
+ };
+
+ auto mean_estimate = Estimate(mean);
+ auto stddev_estimate = Estimate(stddev);
+#endif // CATCH_USE_ASYNC
+
+ double outlier_variance = Detail::outlier_variance(mean_estimate, stddev_estimate, n);
+
+ return { mean_estimate, stddev_estimate, outlier_variance };
+ }
+ } // namespace Detail
+ } // namespace Benchmark
+} // namespace Catch
+
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+// end catch_stats.cpp
+// start catch_approx.cpp
+
+#include <cmath>
+#include <limits>
+
+namespace {
+
+// Performs equivalent check of std::fabs(lhs - rhs) <= margin
+// But without the subtraction to allow for INFINITY in comparison
+bool marginComparison(double lhs, double rhs, double margin) {
+ return (lhs + margin >= rhs) && (rhs + margin >= lhs);
+}
+
+}
+
+namespace Catch {
+namespace Detail {
+
+ Approx::Approx ( double value )
+ : m_epsilon( std::numeric_limits<float>::epsilon()*100 ),
+ m_margin( 0.0 ),
+ m_scale( 0.0 ),
+ m_value( value )
+ {}
+
+ Approx Approx::custom() {
+ return Approx( 0 );
+ }
+
+ Approx Approx::operator-() const {
+ auto temp(*this);
+ temp.m_value = -temp.m_value;
+ return temp;
+ }
+
+ std::string Approx::toString() const {
+ ReusableStringStream rss;
+ rss << "Approx( " << ::Catch::Detail::stringify( m_value ) << " )";
+ return rss.str();
+ }
+
+ bool Approx::equalityComparisonImpl(const double other) const {
+ // First try with fixed margin, then compute margin based on epsilon, scale and Approx's value
+ // Thanks to Richard Harris for his help refining the scaled margin value
+ return marginComparison(m_value, other, m_margin)
+ || marginComparison(m_value, other, m_epsilon * (m_scale + std::fabs(std::isinf(m_value)? 0 : m_value)));
+ }
+
+ void Approx::setMargin(double newMargin) {
+ CATCH_ENFORCE(newMargin >= 0,
+ "Invalid Approx::margin: " << newMargin << '.'
+ << " Approx::Margin has to be non-negative.");
+ m_margin = newMargin;
+ }
+
+ void Approx::setEpsilon(double newEpsilon) {
+ CATCH_ENFORCE(newEpsilon >= 0 && newEpsilon <= 1.0,
+ "Invalid Approx::epsilon: " << newEpsilon << '.'
+ << " Approx::epsilon has to be in [0, 1]");
+ m_epsilon = newEpsilon;
+ }
+
+} // end namespace Detail
+
+namespace literals {
+ Detail::Approx operator "" _a(long double val) {
+ return Detail::Approx(val);
+ }
+ Detail::Approx operator "" _a(unsigned long long val) {
+ return Detail::Approx(val);
+ }
+} // end namespace literals
+
+std::string StringMaker<Catch::Detail::Approx>::convert(Catch::Detail::Approx const& value) {
+ return value.toString();
+}
+
+} // end namespace Catch
+// end catch_approx.cpp
+// start catch_assertionhandler.cpp
+
+// start catch_debugger.h
+
+namespace Catch {
+ bool isDebuggerActive();
+}
+
+#ifdef CATCH_PLATFORM_MAC
+
+ #if defined(__i386__) || defined(__x86_64__)
+ #define CATCH_TRAP() __asm__("int $3\n" : : ) /* NOLINT */
+ #elif defined(__aarch64__)
+ #define CATCH_TRAP() __asm__(".inst 0xd43e0000")
+ #endif
+
+#elif defined(CATCH_PLATFORM_IPHONE)
+
+ // use inline assembler
+ #if defined(__i386__) || defined(__x86_64__)
+ #define CATCH_TRAP() __asm__("int $3")
+ #elif defined(__aarch64__)
+ #define CATCH_TRAP() __asm__(".inst 0xd4200000")
+ #elif defined(__arm__) && !defined(__thumb__)
+ #define CATCH_TRAP() __asm__(".inst 0xe7f001f0")
+ #elif defined(__arm__) && defined(__thumb__)
+ #define CATCH_TRAP() __asm__(".inst 0xde01")
+ #endif
+
+#elif defined(CATCH_PLATFORM_LINUX)
+ // If we can use inline assembler, do it because this allows us to break
+ // directly at the location of the failing check instead of breaking inside
+ // raise() called from it, i.e. one stack frame below.
+ #if defined(__GNUC__) && (defined(__i386) || defined(__x86_64))
+ #define CATCH_TRAP() asm volatile ("int $3") /* NOLINT */
+ #else // Fall back to the generic way.
+ #include <signal.h>
+
+ #define CATCH_TRAP() raise(SIGTRAP)
+ #endif
+#elif defined(_MSC_VER)
+ #define CATCH_TRAP() __debugbreak()
+#elif defined(__MINGW32__)
+ extern "C" __declspec(dllimport) void __stdcall DebugBreak();
+ #define CATCH_TRAP() DebugBreak()
+#endif
+
+#ifndef CATCH_BREAK_INTO_DEBUGGER
+ #ifdef CATCH_TRAP
+ #define CATCH_BREAK_INTO_DEBUGGER() []{ if( Catch::isDebuggerActive() ) { CATCH_TRAP(); } }()
+ #else
+ #define CATCH_BREAK_INTO_DEBUGGER() []{}()
+ #endif
+#endif
+
+// end catch_debugger.h
+// start catch_run_context.h
+
+// start catch_fatal_condition.h
+
+#include <cassert>
+
+namespace Catch {
+
+ // Wrapper for platform-specific fatal error (signals/SEH) handlers
+ //
+ // Tries to be cooperative with other handlers, and not step over
+ // other handlers. This means that unknown structured exceptions
+ // are passed on, previous signal handlers are called, and so on.
+ //
+ // Can only be instantiated once, and assumes that once a signal
+ // is caught, the binary will end up terminating. Thus, there
+ class FatalConditionHandler {
+ bool m_started = false;
+
+ // Install/disengage implementation for specific platform.
+ // Should be if-defed to work on current platform, can assume
+ // engage-disengage 1:1 pairing.
+ void engage_platform();
+ void disengage_platform();
+ public:
+ // Should also have platform-specific implementations as needed
+ FatalConditionHandler();
+ ~FatalConditionHandler();
+
+ void engage() {
+ assert(!m_started && "Handler cannot be installed twice.");
+ m_started = true;
+ engage_platform();
+ }
+
+ void disengage() {
+ assert(m_started && "Handler cannot be uninstalled without being installed first");
+ m_started = false;
+ disengage_platform();
+ }
+ };
+
+ //! Simple RAII guard for (dis)engaging the FatalConditionHandler
+ class FatalConditionHandlerGuard {
+ FatalConditionHandler* m_handler;
+ public:
+ FatalConditionHandlerGuard(FatalConditionHandler* handler):
+ m_handler(handler) {
+ m_handler->engage();
+ }
+ ~FatalConditionHandlerGuard() {
+ m_handler->disengage();
+ }
+ };
+
+} // end namespace Catch
+
+// end catch_fatal_condition.h
+#include <string>
+
+namespace Catch {
+
+ struct IMutableContext;
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ class RunContext : public IResultCapture, public IRunner {
+
+ public:
+ RunContext( RunContext const& ) = delete;
+ RunContext& operator =( RunContext const& ) = delete;
+
+ explicit RunContext( IConfigPtr const& _config, IStreamingReporterPtr&& reporter );
+
+ ~RunContext() override;
+
+ void testGroupStarting( std::string const& testSpec, std::size_t groupIndex, std::size_t groupsCount );
+ void testGroupEnded( std::string const& testSpec, Totals const& totals, std::size_t groupIndex, std::size_t groupsCount );
+
+ Totals runTest(TestCase const& testCase);
+
+ IConfigPtr config() const;
+ IStreamingReporter& reporter() const;
+
+ public: // IResultCapture
+
+ // Assertion handlers
+ void handleExpr
+ ( AssertionInfo const& info,
+ ITransientExpression const& expr,
+ AssertionReaction& reaction ) override;
+ void handleMessage
+ ( AssertionInfo const& info,
+ ResultWas::OfType resultType,
+ StringRef const& message,
+ AssertionReaction& reaction ) override;
+ void handleUnexpectedExceptionNotThrown
+ ( AssertionInfo const& info,
+ AssertionReaction& reaction ) override;
+ void handleUnexpectedInflightException
+ ( AssertionInfo const& info,
+ std::string const& message,
+ AssertionReaction& reaction ) override;
+ void handleIncomplete
+ ( AssertionInfo const& info ) override;
+ void handleNonExpr
+ ( AssertionInfo const &info,
+ ResultWas::OfType resultType,
+ AssertionReaction &reaction ) override;
+
+ bool sectionStarted( SectionInfo const& sectionInfo, Counts& assertions ) override;
+
+ void sectionEnded( SectionEndInfo const& endInfo ) override;
+ void sectionEndedEarly( SectionEndInfo const& endInfo ) override;
+
+ auto acquireGeneratorTracker( StringRef generatorName, SourceLineInfo const& lineInfo ) -> IGeneratorTracker& override;
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void benchmarkPreparing( std::string const& name ) override;
+ void benchmarkStarting( BenchmarkInfo const& info ) override;
+ void benchmarkEnded( BenchmarkStats<> const& stats ) override;
+ void benchmarkFailed( std::string const& error ) override;
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ void pushScopedMessage( MessageInfo const& message ) override;
+ void popScopedMessage( MessageInfo const& message ) override;
+
+ void emplaceUnscopedMessage( MessageBuilder const& builder ) override;
+
+ std::string getCurrentTestName() const override;
+
+ const AssertionResult* getLastResult() const override;
+
+ void exceptionEarlyReported() override;
+
+ void handleFatalErrorCondition( StringRef message ) override;
+
+ bool lastAssertionPassed() override;
+
+ void assertionPassed() override;
+
+ public:
+ // !TBD We need to do this another way!
+ bool aborting() const final;
+
+ private:
+
+ void runCurrentTest( std::string& redirectedCout, std::string& redirectedCerr );
+ void invokeActiveTestCase();
+
+ void resetAssertionInfo();
+ bool testForMissingAssertions( Counts& assertions );
+
+ void assertionEnded( AssertionResult const& result );
+ void reportExpr
+ ( AssertionInfo const &info,
+ ResultWas::OfType resultType,
+ ITransientExpression const *expr,
+ bool negated );
+
+ void populateReaction( AssertionReaction& reaction );
+
+ private:
+
+ void handleUnfinishedSections();
+
+ TestRunInfo m_runInfo;
+ IMutableContext& m_context;
+ TestCase const* m_activeTestCase = nullptr;
+ ITracker* m_testCaseTracker = nullptr;
+ Option<AssertionResult> m_lastResult;
+
+ IConfigPtr m_config;
+ Totals m_totals;
+ IStreamingReporterPtr m_reporter;
+ std::vector<MessageInfo> m_messages;
+ std::vector<ScopedMessage> m_messageScopes; /* Keeps owners of so-called unscoped messages. */
+ AssertionInfo m_lastAssertionInfo;
+ std::vector<SectionEndInfo> m_unfinishedSections;
+ std::vector<ITracker*> m_activeSections;
+ TrackerContext m_trackerContext;
+ FatalConditionHandler m_fatalConditionhandler;
+ bool m_lastAssertionPassed = false;
+ bool m_shouldReportUnexpected = true;
+ bool m_includeSuccessfulResults;
+ };
+
+ void seedRng(IConfig const& config);
+ unsigned int rngSeed();
+} // end namespace Catch
+
+// end catch_run_context.h
+namespace Catch {
+
+ namespace {
+ auto operator <<( std::ostream& os, ITransientExpression const& expr ) -> std::ostream& {
+ expr.streamReconstructedExpression( os );
+ return os;
+ }
+ }
+
+ LazyExpression::LazyExpression( bool isNegated )
+ : m_isNegated( isNegated )
+ {}
+
+ LazyExpression::LazyExpression( LazyExpression const& other ) : m_isNegated( other.m_isNegated ) {}
+
+ LazyExpression::operator bool() const {
+ return m_transientExpression != nullptr;
+ }
+
+ auto operator << ( std::ostream& os, LazyExpression const& lazyExpr ) -> std::ostream& {
+ if( lazyExpr.m_isNegated )
+ os << "!";
+
+ if( lazyExpr ) {
+ if( lazyExpr.m_isNegated && lazyExpr.m_transientExpression->isBinaryExpression() )
+ os << "(" << *lazyExpr.m_transientExpression << ")";
+ else
+ os << *lazyExpr.m_transientExpression;
+ }
+ else {
+ os << "{** error - unchecked empty expression requested **}";
+ }
+ return os;
+ }
+
+ AssertionHandler::AssertionHandler
+ ( StringRef const& macroName,
+ SourceLineInfo const& lineInfo,
+ StringRef capturedExpression,
+ ResultDisposition::Flags resultDisposition )
+ : m_assertionInfo{ macroName, lineInfo, capturedExpression, resultDisposition },
+ m_resultCapture( getResultCapture() )
+ {}
+
+ void AssertionHandler::handleExpr( ITransientExpression const& expr ) {
+ m_resultCapture.handleExpr( m_assertionInfo, expr, m_reaction );
+ }
+ void AssertionHandler::handleMessage(ResultWas::OfType resultType, StringRef const& message) {
+ m_resultCapture.handleMessage( m_assertionInfo, resultType, message, m_reaction );
+ }
+
+ auto AssertionHandler::allowThrows() const -> bool {
+ return getCurrentContext().getConfig()->allowThrows();
+ }
+
+ void AssertionHandler::complete() {
+ setCompleted();
+ if( m_reaction.shouldDebugBreak ) {
+
+ // If you find your debugger stopping you here then go one level up on the
+ // call-stack for the code that caused it (typically a failed assertion)
+
+ // (To go back to the test and change execution, jump over the throw, next)
+ CATCH_BREAK_INTO_DEBUGGER();
+ }
+ if (m_reaction.shouldThrow) {
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ throw Catch::TestFailureException();
+#else
+ CATCH_ERROR( "Test failure requires aborting test!" );
+#endif
+ }
+ }
+ void AssertionHandler::setCompleted() {
+ m_completed = true;
+ }
+
+ void AssertionHandler::handleUnexpectedInflightException() {
+ m_resultCapture.handleUnexpectedInflightException( m_assertionInfo, Catch::translateActiveException(), m_reaction );
+ }
+
+ void AssertionHandler::handleExceptionThrownAsExpected() {
+ m_resultCapture.handleNonExpr(m_assertionInfo, ResultWas::Ok, m_reaction);
+ }
+ void AssertionHandler::handleExceptionNotThrownAsExpected() {
+ m_resultCapture.handleNonExpr(m_assertionInfo, ResultWas::Ok, m_reaction);
+ }
+
+ void AssertionHandler::handleUnexpectedExceptionNotThrown() {
+ m_resultCapture.handleUnexpectedExceptionNotThrown( m_assertionInfo, m_reaction );
+ }
+
+ void AssertionHandler::handleThrowingCallSkipped() {
+ m_resultCapture.handleNonExpr(m_assertionInfo, ResultWas::Ok, m_reaction);
+ }
+
+ // This is the overload that takes a string and infers the Equals matcher from it
+ // The more general overload, that takes any string matcher, is in catch_capture_matchers.cpp
+ void handleExceptionMatchExpr( AssertionHandler& handler, std::string const& str, StringRef const& matcherString ) {
+ handleExceptionMatchExpr( handler, Matchers::Equals( str ), matcherString );
+ }
+
+} // namespace Catch
+// end catch_assertionhandler.cpp
+// start catch_assertionresult.cpp
+
+namespace Catch {
+ AssertionResultData::AssertionResultData(ResultWas::OfType _resultType, LazyExpression const & _lazyExpression):
+ lazyExpression(_lazyExpression),
+ resultType(_resultType) {}
+
+ std::string AssertionResultData::reconstructExpression() const {
+
+ if( reconstructedExpression.empty() ) {
+ if( lazyExpression ) {
+ ReusableStringStream rss;
+ rss << lazyExpression;
+ reconstructedExpression = rss.str();
+ }
+ }
+ return reconstructedExpression;
+ }
+
+ AssertionResult::AssertionResult( AssertionInfo const& info, AssertionResultData const& data )
+ : m_info( info ),
+ m_resultData( data )
+ {}
+
+ // Result was a success
+ bool AssertionResult::succeeded() const {
+ return Catch::isOk( m_resultData.resultType );
+ }
+
+ // Result was a success, or failure is suppressed
+ bool AssertionResult::isOk() const {
+ return Catch::isOk( m_resultData.resultType ) || shouldSuppressFailure( m_info.resultDisposition );
+ }
+
+ ResultWas::OfType AssertionResult::getResultType() const {
+ return m_resultData.resultType;
+ }
+
+ bool AssertionResult::hasExpression() const {
+ return !m_info.capturedExpression.empty();
+ }
+
+ bool AssertionResult::hasMessage() const {
+ return !m_resultData.message.empty();
+ }
+
+ std::string AssertionResult::getExpression() const {
+ // Possibly overallocating by 3 characters should be basically free
+ std::string expr; expr.reserve(m_info.capturedExpression.size() + 3);
+ if (isFalseTest(m_info.resultDisposition)) {
+ expr += "!(";
+ }
+ expr += m_info.capturedExpression;
+ if (isFalseTest(m_info.resultDisposition)) {
+ expr += ')';
+ }
+ return expr;
+ }
+
+ std::string AssertionResult::getExpressionInMacro() const {
+ std::string expr;
+ if( m_info.macroName.empty() )
+ expr = static_cast<std::string>(m_info.capturedExpression);
+ else {
+ expr.reserve( m_info.macroName.size() + m_info.capturedExpression.size() + 4 );
+ expr += m_info.macroName;
+ expr += "( ";
+ expr += m_info.capturedExpression;
+ expr += " )";
+ }
+ return expr;
+ }
+
+ bool AssertionResult::hasExpandedExpression() const {
+ return hasExpression() && getExpandedExpression() != getExpression();
+ }
+
+ std::string AssertionResult::getExpandedExpression() const {
+ std::string expr = m_resultData.reconstructExpression();
+ return expr.empty()
+ ? getExpression()
+ : expr;
+ }
+
+ std::string AssertionResult::getMessage() const {
+ return m_resultData.message;
+ }
+ SourceLineInfo AssertionResult::getSourceInfo() const {
+ return m_info.lineInfo;
+ }
+
+ StringRef AssertionResult::getTestMacroName() const {
+ return m_info.macroName;
+ }
+
+} // end namespace Catch
+// end catch_assertionresult.cpp
+// start catch_capture_matchers.cpp
+
+namespace Catch {
+
+ using StringMatcher = Matchers::Impl::MatcherBase<std::string>;
+
+ // This is the general overload that takes a any string matcher
+ // There is another overload, in catch_assertionhandler.h/.cpp, that only takes a string and infers
+ // the Equals matcher (so the header does not mention matchers)
+ void handleExceptionMatchExpr( AssertionHandler& handler, StringMatcher const& matcher, StringRef const& matcherString ) {
+ std::string exceptionMessage = Catch::translateActiveException();
+ MatchExpr<std::string, StringMatcher const&> expr( exceptionMessage, matcher, matcherString );
+ handler.handleExpr( expr );
+ }
+
+} // namespace Catch
+// end catch_capture_matchers.cpp
+// start catch_commandline.cpp
+
+// start catch_commandline.h
+
+// start catch_clara.h
+
+// Use Catch's value for console width (store Clara's off to the side, if present)
+#ifdef CLARA_CONFIG_CONSOLE_WIDTH
+#define CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH
+#undef CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH
+#endif
+#define CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH CATCH_CONFIG_CONSOLE_WIDTH-1
+
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wweak-vtables"
+#pragma clang diagnostic ignored "-Wexit-time-destructors"
+#pragma clang diagnostic ignored "-Wshadow"
+#endif
+
+// start clara.hpp
+// Copyright 2017 Two Blue Cubes Ltd. All rights reserved.
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See https://github.com/philsquared/Clara for more details
+
+// Clara v1.1.5
+
+
+#ifndef CATCH_CLARA_CONFIG_CONSOLE_WIDTH
+#define CATCH_CLARA_CONFIG_CONSOLE_WIDTH 80
+#endif
+
+#ifndef CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH
+#define CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH CATCH_CLARA_CONFIG_CONSOLE_WIDTH
+#endif
+
+#ifndef CLARA_CONFIG_OPTIONAL_TYPE
+#ifdef __has_include
+#if __has_include(<optional>) && __cplusplus >= 201703L
+#include <optional>
+#define CLARA_CONFIG_OPTIONAL_TYPE std::optional
+#endif
+#endif
+#endif
+
+// ----------- #included from clara_textflow.hpp -----------
+
+// TextFlowCpp
+//
+// A single-header library for wrapping and laying out basic text, by Phil Nash
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// This project is hosted at https://github.com/philsquared/textflowcpp
+
+
+#include <cassert>
+#include <ostream>
+#include <sstream>
+#include <vector>
+
+#ifndef CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH
+#define CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH 80
+#endif
+
+namespace Catch {
+namespace clara {
+namespace TextFlow {
+
+inline auto isWhitespace(char c) -> bool {
+ static std::string chars = " \t\n\r";
+ return chars.find(c) != std::string::npos;
+}
+inline auto isBreakableBefore(char c) -> bool {
+ static std::string chars = "[({<|";
+ return chars.find(c) != std::string::npos;
+}
+inline auto isBreakableAfter(char c) -> bool {
+ static std::string chars = "])}>.,:;*+-=&/\\";
+ return chars.find(c) != std::string::npos;
+}
+
+class Columns;
+
+class Column {
+ std::vector<std::string> m_strings;
+ size_t m_width = CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH;
+ size_t m_indent = 0;
+ size_t m_initialIndent = std::string::npos;
+
+public:
+ class iterator {
+ friend Column;
+
+ Column const& m_column;
+ size_t m_stringIndex = 0;
+ size_t m_pos = 0;
+
+ size_t m_len = 0;
+ size_t m_end = 0;
+ bool m_suffix = false;
+
+ iterator(Column const& column, size_t stringIndex)
+ : m_column(column),
+ m_stringIndex(stringIndex) {}
+
+ auto line() const -> std::string const& { return m_column.m_strings[m_stringIndex]; }
+
+ auto isBoundary(size_t at) const -> bool {
+ assert(at > 0);
+ assert(at <= line().size());
+
+ return at == line().size() ||
+ (isWhitespace(line()[at]) && !isWhitespace(line()[at - 1])) ||
+ isBreakableBefore(line()[at]) ||
+ isBreakableAfter(line()[at - 1]);
+ }
+
+ void calcLength() {
+ assert(m_stringIndex < m_column.m_strings.size());
+
+ m_suffix = false;
+ auto width = m_column.m_width - indent();
+ m_end = m_pos;
+ if (line()[m_pos] == '\n') {
+ ++m_end;
+ }
+ while (m_end < line().size() && line()[m_end] != '\n')
+ ++m_end;
+
+ if (m_end < m_pos + width) {
+ m_len = m_end - m_pos;
+ } else {
+ size_t len = width;
+ while (len > 0 && !isBoundary(m_pos + len))
+ --len;
+ while (len > 0 && isWhitespace(line()[m_pos + len - 1]))
+ --len;
+
+ if (len > 0) {
+ m_len = len;
+ } else {
+ m_suffix = true;
+ m_len = width - 1;
+ }
+ }
+ }
+
+ auto indent() const -> size_t {
+ auto initial = m_pos == 0 && m_stringIndex == 0 ? m_column.m_initialIndent : std::string::npos;
+ return initial == std::string::npos ? m_column.m_indent : initial;
+ }
+
+ auto addIndentAndSuffix(std::string const &plain) const -> std::string {
+ return std::string(indent(), ' ') + (m_suffix ? plain + "-" : plain);
+ }
+
+ public:
+ using difference_type = std::ptrdiff_t;
+ using value_type = std::string;
+ using pointer = value_type * ;
+ using reference = value_type & ;
+ using iterator_category = std::forward_iterator_tag;
+
+ explicit iterator(Column const& column) : m_column(column) {
+ assert(m_column.m_width > m_column.m_indent);
+ assert(m_column.m_initialIndent == std::string::npos || m_column.m_width > m_column.m_initialIndent);
+ calcLength();
+ if (m_len == 0)
+ m_stringIndex++; // Empty string
+ }
+
+ auto operator *() const -> std::string {
+ assert(m_stringIndex < m_column.m_strings.size());
+ assert(m_pos <= m_end);
+ return addIndentAndSuffix(line().substr(m_pos, m_len));
+ }
+
+ auto operator ++() -> iterator& {
+ m_pos += m_len;
+ if (m_pos < line().size() && line()[m_pos] == '\n')
+ m_pos += 1;
+ else
+ while (m_pos < line().size() && isWhitespace(line()[m_pos]))
+ ++m_pos;
+
+ if (m_pos == line().size()) {
+ m_pos = 0;
+ ++m_stringIndex;
+ }
+ if (m_stringIndex < m_column.m_strings.size())
+ calcLength();
+ return *this;
+ }
+ auto operator ++(int) -> iterator {
+ iterator prev(*this);
+ operator++();
+ return prev;
+ }
+
+ auto operator ==(iterator const& other) const -> bool {
+ return
+ m_pos == other.m_pos &&
+ m_stringIndex == other.m_stringIndex &&
+ &m_column == &other.m_column;
+ }
+ auto operator !=(iterator const& other) const -> bool {
+ return !operator==(other);
+ }
+ };
+ using const_iterator = iterator;
+
+ explicit Column(std::string const& text) { m_strings.push_back(text); }
+
+ auto width(size_t newWidth) -> Column& {
+ assert(newWidth > 0);
+ m_width = newWidth;
+ return *this;
+ }
+ auto indent(size_t newIndent) -> Column& {
+ m_indent = newIndent;
+ return *this;
+ }
+ auto initialIndent(size_t newIndent) -> Column& {
+ m_initialIndent = newIndent;
+ return *this;
+ }
+
+ auto width() const -> size_t { return m_width; }
+ auto begin() const -> iterator { return iterator(*this); }
+ auto end() const -> iterator { return { *this, m_strings.size() }; }
+
+ inline friend std::ostream& operator << (std::ostream& os, Column const& col) {
+ bool first = true;
+ for (auto line : col) {
+ if (first)
+ first = false;
+ else
+ os << "\n";
+ os << line;
+ }
+ return os;
+ }
+
+ auto operator + (Column const& other)->Columns;
+
+ auto toString() const -> std::string {
+ std::ostringstream oss;
+ oss << *this;
+ return oss.str();
+ }
+};
+
+class Spacer : public Column {
+
+public:
+ explicit Spacer(size_t spaceWidth) : Column("") {
+ width(spaceWidth);
+ }
+};
+
+class Columns {
+ std::vector<Column> m_columns;
+
+public:
+
+ class iterator {
+ friend Columns;
+ struct EndTag {};
+
+ std::vector<Column> const& m_columns;
+ std::vector<Column::iterator> m_iterators;
+ size_t m_activeIterators;
+
+ iterator(Columns const& columns, EndTag)
+ : m_columns(columns.m_columns),
+ m_activeIterators(0) {
+ m_iterators.reserve(m_columns.size());
+
+ for (auto const& col : m_columns)
+ m_iterators.push_back(col.end());
+ }
+
+ public:
+ using difference_type = std::ptrdiff_t;
+ using value_type = std::string;
+ using pointer = value_type * ;
+ using reference = value_type & ;
+ using iterator_category = std::forward_iterator_tag;
+
+ explicit iterator(Columns const& columns)
+ : m_columns(columns.m_columns),
+ m_activeIterators(m_columns.size()) {
+ m_iterators.reserve(m_columns.size());
+
+ for (auto const& col : m_columns)
+ m_iterators.push_back(col.begin());
+ }
+
+ auto operator ==(iterator const& other) const -> bool {
+ return m_iterators == other.m_iterators;
+ }
+ auto operator !=(iterator const& other) const -> bool {
+ return m_iterators != other.m_iterators;
+ }
+ auto operator *() const -> std::string {
+ std::string row, padding;
+
+ for (size_t i = 0; i < m_columns.size(); ++i) {
+ auto width = m_columns[i].width();
+ if (m_iterators[i] != m_columns[i].end()) {
+ std::string col = *m_iterators[i];
+ row += padding + col;
+ if (col.size() < width)
+ padding = std::string(width - col.size(), ' ');
+ else
+ padding = "";
+ } else {
+ padding += std::string(width, ' ');
+ }
+ }
+ return row;
+ }
+ auto operator ++() -> iterator& {
+ for (size_t i = 0; i < m_columns.size(); ++i) {
+ if (m_iterators[i] != m_columns[i].end())
+ ++m_iterators[i];
+ }
+ return *this;
+ }
+ auto operator ++(int) -> iterator {
+ iterator prev(*this);
+ operator++();
+ return prev;
+ }
+ };
+ using const_iterator = iterator;
+
+ auto begin() const -> iterator { return iterator(*this); }
+ auto end() const -> iterator { return { *this, iterator::EndTag() }; }
+
+ auto operator += (Column const& col) -> Columns& {
+ m_columns.push_back(col);
+ return *this;
+ }
+ auto operator + (Column const& col) -> Columns {
+ Columns combined = *this;
+ combined += col;
+ return combined;
+ }
+
+ inline friend std::ostream& operator << (std::ostream& os, Columns const& cols) {
+
+ bool first = true;
+ for (auto line : cols) {
+ if (first)
+ first = false;
+ else
+ os << "\n";
+ os << line;
+ }
+ return os;
+ }
+
+ auto toString() const -> std::string {
+ std::ostringstream oss;
+ oss << *this;
+ return oss.str();
+ }
+};
+
+inline auto Column::operator + (Column const& other) -> Columns {
+ Columns cols;
+ cols += *this;
+ cols += other;
+ return cols;
+}
+}
+
+}
+}
+
+// ----------- end of #include from clara_textflow.hpp -----------
+// ........... back in clara.hpp
+
+#include <cctype>
+#include <string>
+#include <memory>
+#include <set>
+#include <algorithm>
+
+#if !defined(CATCH_PLATFORM_WINDOWS) && ( defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) )
+#define CATCH_PLATFORM_WINDOWS
+#endif
+
+namespace Catch { namespace clara {
+namespace detail {
+
+ // Traits for extracting arg and return type of lambdas (for single argument lambdas)
+ template<typename L>
+ struct UnaryLambdaTraits : UnaryLambdaTraits<decltype( &L::operator() )> {};
+
+ template<typename ClassT, typename ReturnT, typename... Args>
+ struct UnaryLambdaTraits<ReturnT( ClassT::* )( Args... ) const> {
+ static const bool isValid = false;
+ };
+
+ template<typename ClassT, typename ReturnT, typename ArgT>
+ struct UnaryLambdaTraits<ReturnT( ClassT::* )( ArgT ) const> {
+ static const bool isValid = true;
+ using ArgType = typename std::remove_const<typename std::remove_reference<ArgT>::type>::type;
+ using ReturnType = ReturnT;
+ };
+
+ class TokenStream;
+
+ // Transport for raw args (copied from main args, or supplied via init list for testing)
+ class Args {
+ friend TokenStream;
+ std::string m_exeName;
+ std::vector<std::string> m_args;
+
+ public:
+ Args( int argc, char const* const* argv )
+ : m_exeName(argv[0]),
+ m_args(argv + 1, argv + argc) {}
+
+ Args( std::initializer_list<std::string> args )
+ : m_exeName( *args.begin() ),
+ m_args( args.begin()+1, args.end() )
+ {}
+
+ auto exeName() const -> std::string {
+ return m_exeName;
+ }
+ };
+
+ // Wraps a token coming from a token stream. These may not directly correspond to strings as a single string
+ // may encode an option + its argument if the : or = form is used
+ enum class TokenType {
+ Option, Argument
+ };
+ struct Token {
+ TokenType type;
+ std::string token;
+ };
+
+ inline auto isOptPrefix( char c ) -> bool {
+ return c == '-'
+#ifdef CATCH_PLATFORM_WINDOWS
+ || c == '/'
+#endif
+ ;
+ }
+
+ // Abstracts iterators into args as a stream of tokens, with option arguments uniformly handled
+ class TokenStream {
+ using Iterator = std::vector<std::string>::const_iterator;
+ Iterator it;
+ Iterator itEnd;
+ std::vector<Token> m_tokenBuffer;
+
+ void loadBuffer() {
+ m_tokenBuffer.resize( 0 );
+
+ // Skip any empty strings
+ while( it != itEnd && it->empty() )
+ ++it;
+
+ if( it != itEnd ) {
+ auto const &next = *it;
+ if( isOptPrefix( next[0] ) ) {
+ auto delimiterPos = next.find_first_of( " :=" );
+ if( delimiterPos != std::string::npos ) {
+ m_tokenBuffer.push_back( { TokenType::Option, next.substr( 0, delimiterPos ) } );
+ m_tokenBuffer.push_back( { TokenType::Argument, next.substr( delimiterPos + 1 ) } );
+ } else {
+ if( next[1] != '-' && next.size() > 2 ) {
+ std::string opt = "- ";
+ for( size_t i = 1; i < next.size(); ++i ) {
+ opt[1] = next[i];
+ m_tokenBuffer.push_back( { TokenType::Option, opt } );
+ }
+ } else {
+ m_tokenBuffer.push_back( { TokenType::Option, next } );
+ }
+ }
+ } else {
+ m_tokenBuffer.push_back( { TokenType::Argument, next } );
+ }
+ }
+ }
+
+ public:
+ explicit TokenStream( Args const &args ) : TokenStream( args.m_args.begin(), args.m_args.end() ) {}
+
+ TokenStream( Iterator it, Iterator itEnd ) : it( it ), itEnd( itEnd ) {
+ loadBuffer();
+ }
+
+ explicit operator bool() const {
+ return !m_tokenBuffer.empty() || it != itEnd;
+ }
+
+ auto count() const -> size_t { return m_tokenBuffer.size() + (itEnd - it); }
+
+ auto operator*() const -> Token {
+ assert( !m_tokenBuffer.empty() );
+ return m_tokenBuffer.front();
+ }
+
+ auto operator->() const -> Token const * {
+ assert( !m_tokenBuffer.empty() );
+ return &m_tokenBuffer.front();
+ }
+
+ auto operator++() -> TokenStream & {
+ if( m_tokenBuffer.size() >= 2 ) {
+ m_tokenBuffer.erase( m_tokenBuffer.begin() );
+ } else {
+ if( it != itEnd )
+ ++it;
+ loadBuffer();
+ }
+ return *this;
+ }
+ };
+
+ class ResultBase {
+ public:
+ enum Type {
+ Ok, LogicError, RuntimeError
+ };
+
+ protected:
+ ResultBase( Type type ) : m_type( type ) {}
+ virtual ~ResultBase() = default;
+
+ virtual void enforceOk() const = 0;
+
+ Type m_type;
+ };
+
+ template<typename T>
+ class ResultValueBase : public ResultBase {
+ public:
+ auto value() const -> T const & {
+ enforceOk();
+ return m_value;
+ }
+
+ protected:
+ ResultValueBase( Type type ) : ResultBase( type ) {}
+
+ ResultValueBase( ResultValueBase const &other ) : ResultBase( other ) {
+ if( m_type == ResultBase::Ok )
+ new( &m_value ) T( other.m_value );
+ }
+
+ ResultValueBase( Type, T const &value ) : ResultBase( Ok ) {
+ new( &m_value ) T( value );
+ }
+
+ auto operator=( ResultValueBase const &other ) -> ResultValueBase & {
+ if( m_type == ResultBase::Ok )
+ m_value.~T();
+ ResultBase::operator=(other);
+ if( m_type == ResultBase::Ok )
+ new( &m_value ) T( other.m_value );
+ return *this;
+ }
+
+ ~ResultValueBase() override {
+ if( m_type == Ok )
+ m_value.~T();
+ }
+
+ union {
+ T m_value;
+ };
+ };
+
+ template<>
+ class ResultValueBase<void> : public ResultBase {
+ protected:
+ using ResultBase::ResultBase;
+ };
+
+ template<typename T = void>
+ class BasicResult : public ResultValueBase<T> {
+ public:
+ template<typename U>
+ explicit BasicResult( BasicResult<U> const &other )
+ : ResultValueBase<T>( other.type() ),
+ m_errorMessage( other.errorMessage() )
+ {
+ assert( type() != ResultBase::Ok );
+ }
+
+ template<typename U>
+ static auto ok( U const &value ) -> BasicResult { return { ResultBase::Ok, value }; }
+ static auto ok() -> BasicResult { return { ResultBase::Ok }; }
+ static auto logicError( std::string const &message ) -> BasicResult { return { ResultBase::LogicError, message }; }
+ static auto runtimeError( std::string const &message ) -> BasicResult { return { ResultBase::RuntimeError, message }; }
+
+ explicit operator bool() const { return m_type == ResultBase::Ok; }
+ auto type() const -> ResultBase::Type { return m_type; }
+ auto errorMessage() const -> std::string { return m_errorMessage; }
+
+ protected:
+ void enforceOk() const override {
+
+ // Errors shouldn't reach this point, but if they do
+ // the actual error message will be in m_errorMessage
+ assert( m_type != ResultBase::LogicError );
+ assert( m_type != ResultBase::RuntimeError );
+ if( m_type != ResultBase::Ok )
+ std::abort();
+ }
+
+ std::string m_errorMessage; // Only populated if resultType is an error
+
+ BasicResult( ResultBase::Type type, std::string const &message )
+ : ResultValueBase<T>(type),
+ m_errorMessage(message)
+ {
+ assert( m_type != ResultBase::Ok );
+ }
+
+ using ResultValueBase<T>::ResultValueBase;
+ using ResultBase::m_type;
+ };
+
+ enum class ParseResultType {
+ Matched, NoMatch, ShortCircuitAll, ShortCircuitSame
+ };
+
+ class ParseState {
+ public:
+
+ ParseState( ParseResultType type, TokenStream const &remainingTokens )
+ : m_type(type),
+ m_remainingTokens( remainingTokens )
+ {}
+
+ auto type() const -> ParseResultType { return m_type; }
+ auto remainingTokens() const -> TokenStream { return m_remainingTokens; }
+
+ private:
+ ParseResultType m_type;
+ TokenStream m_remainingTokens;
+ };
+
+ using Result = BasicResult<void>;
+ using ParserResult = BasicResult<ParseResultType>;
+ using InternalParseResult = BasicResult<ParseState>;
+
+ struct HelpColumns {
+ std::string left;
+ std::string right;
+ };
+
+ template<typename T>
+ inline auto convertInto( std::string const &source, T& target ) -> ParserResult {
+ std::stringstream ss;
+ ss << source;
+ ss >> target;
+ if( ss.fail() )
+ return ParserResult::runtimeError( "Unable to convert '" + source + "' to destination type" );
+ else
+ return ParserResult::ok( ParseResultType::Matched );
+ }
+ inline auto convertInto( std::string const &source, std::string& target ) -> ParserResult {
+ target = source;
+ return ParserResult::ok( ParseResultType::Matched );
+ }
+ inline auto convertInto( std::string const &source, bool &target ) -> ParserResult {
+ std::string srcLC = source;
+ std::transform( srcLC.begin(), srcLC.end(), srcLC.begin(), []( unsigned char c ) { return static_cast<char>( std::tolower(c) ); } );
+ if (srcLC == "y" || srcLC == "1" || srcLC == "true" || srcLC == "yes" || srcLC == "on")
+ target = true;
+ else if (srcLC == "n" || srcLC == "0" || srcLC == "false" || srcLC == "no" || srcLC == "off")
+ target = false;
+ else
+ return ParserResult::runtimeError( "Expected a boolean value but did not recognise: '" + source + "'" );
+ return ParserResult::ok( ParseResultType::Matched );
+ }
+#ifdef CLARA_CONFIG_OPTIONAL_TYPE
+ template<typename T>
+ inline auto convertInto( std::string const &source, CLARA_CONFIG_OPTIONAL_TYPE<T>& target ) -> ParserResult {
+ T temp;
+ auto result = convertInto( source, temp );
+ if( result )
+ target = std::move(temp);
+ return result;
+ }
+#endif // CLARA_CONFIG_OPTIONAL_TYPE
+
+ struct NonCopyable {
+ NonCopyable() = default;
+ NonCopyable( NonCopyable const & ) = delete;
+ NonCopyable( NonCopyable && ) = delete;
+ NonCopyable &operator=( NonCopyable const & ) = delete;
+ NonCopyable &operator=( NonCopyable && ) = delete;
+ };
+
+ struct BoundRef : NonCopyable {
+ virtual ~BoundRef() = default;
+ virtual auto isContainer() const -> bool { return false; }
+ virtual auto isFlag() const -> bool { return false; }
+ };
+ struct BoundValueRefBase : BoundRef {
+ virtual auto setValue( std::string const &arg ) -> ParserResult = 0;
+ };
+ struct BoundFlagRefBase : BoundRef {
+ virtual auto setFlag( bool flag ) -> ParserResult = 0;
+ virtual auto isFlag() const -> bool { return true; }
+ };
+
+ template<typename T>
+ struct BoundValueRef : BoundValueRefBase {
+ T &m_ref;
+
+ explicit BoundValueRef( T &ref ) : m_ref( ref ) {}
+
+ auto setValue( std::string const &arg ) -> ParserResult override {
+ return convertInto( arg, m_ref );
+ }
+ };
+
+ template<typename T>
+ struct BoundValueRef<std::vector<T>> : BoundValueRefBase {
+ std::vector<T> &m_ref;
+
+ explicit BoundValueRef( std::vector<T> &ref ) : m_ref( ref ) {}
+
+ auto isContainer() const -> bool override { return true; }
+
+ auto setValue( std::string const &arg ) -> ParserResult override {
+ T temp;
+ auto result = convertInto( arg, temp );
+ if( result )
+ m_ref.push_back( temp );
+ return result;
+ }
+ };
+
+ struct BoundFlagRef : BoundFlagRefBase {
+ bool &m_ref;
+
+ explicit BoundFlagRef( bool &ref ) : m_ref( ref ) {}
+
+ auto setFlag( bool flag ) -> ParserResult override {
+ m_ref = flag;
+ return ParserResult::ok( ParseResultType::Matched );
+ }
+ };
+
+ template<typename ReturnType>
+ struct LambdaInvoker {
+ static_assert( std::is_same<ReturnType, ParserResult>::value, "Lambda must return void or clara::ParserResult" );
+
+ template<typename L, typename ArgType>
+ static auto invoke( L const &lambda, ArgType const &arg ) -> ParserResult {
+ return lambda( arg );
+ }
+ };
+
+ template<>
+ struct LambdaInvoker<void> {
+ template<typename L, typename ArgType>
+ static auto invoke( L const &lambda, ArgType const &arg ) -> ParserResult {
+ lambda( arg );
+ return ParserResult::ok( ParseResultType::Matched );
+ }
+ };
+
+ template<typename ArgType, typename L>
+ inline auto invokeLambda( L const &lambda, std::string const &arg ) -> ParserResult {
+ ArgType temp{};
+ auto result = convertInto( arg, temp );
+ return !result
+ ? result
+ : LambdaInvoker<typename UnaryLambdaTraits<L>::ReturnType>::invoke( lambda, temp );
+ }
+
+ template<typename L>
+ struct BoundLambda : BoundValueRefBase {
+ L m_lambda;
+
+ static_assert( UnaryLambdaTraits<L>::isValid, "Supplied lambda must take exactly one argument" );
+ explicit BoundLambda( L const &lambda ) : m_lambda( lambda ) {}
+
+ auto setValue( std::string const &arg ) -> ParserResult override {
+ return invokeLambda<typename UnaryLambdaTraits<L>::ArgType>( m_lambda, arg );
+ }
+ };
+
+ template<typename L>
+ struct BoundFlagLambda : BoundFlagRefBase {
+ L m_lambda;
+
+ static_assert( UnaryLambdaTraits<L>::isValid, "Supplied lambda must take exactly one argument" );
+ static_assert( std::is_same<typename UnaryLambdaTraits<L>::ArgType, bool>::value, "flags must be boolean" );
+
+ explicit BoundFlagLambda( L const &lambda ) : m_lambda( lambda ) {}
+
+ auto setFlag( bool flag ) -> ParserResult override {
+ return LambdaInvoker<typename UnaryLambdaTraits<L>::ReturnType>::invoke( m_lambda, flag );
+ }
+ };
+
+ enum class Optionality { Optional, Required };
+
+ struct Parser;
+
+ class ParserBase {
+ public:
+ virtual ~ParserBase() = default;
+ virtual auto validate() const -> Result { return Result::ok(); }
+ virtual auto parse( std::string const& exeName, TokenStream const &tokens) const -> InternalParseResult = 0;
+ virtual auto cardinality() const -> size_t { return 1; }
+
+ auto parse( Args const &args ) const -> InternalParseResult {
+ return parse( args.exeName(), TokenStream( args ) );
+ }
+ };
+
+ template<typename DerivedT>
+ class ComposableParserImpl : public ParserBase {
+ public:
+ template<typename T>
+ auto operator|( T const &other ) const -> Parser;
+
+ template<typename T>
+ auto operator+( T const &other ) const -> Parser;
+ };
+
+ // Common code and state for Args and Opts
+ template<typename DerivedT>
+ class ParserRefImpl : public ComposableParserImpl<DerivedT> {
+ protected:
+ Optionality m_optionality = Optionality::Optional;
+ std::shared_ptr<BoundRef> m_ref;
+ std::string m_hint;
+ std::string m_description;
+
+ explicit ParserRefImpl( std::shared_ptr<BoundRef> const &ref ) : m_ref( ref ) {}
+
+ public:
+ template<typename T>
+ ParserRefImpl( T &ref, std::string const &hint )
+ : m_ref( std::make_shared<BoundValueRef<T>>( ref ) ),
+ m_hint( hint )
+ {}
+
+ template<typename LambdaT>
+ ParserRefImpl( LambdaT const &ref, std::string const &hint )
+ : m_ref( std::make_shared<BoundLambda<LambdaT>>( ref ) ),
+ m_hint(hint)
+ {}
+
+ auto operator()( std::string const &description ) -> DerivedT & {
+ m_description = description;
+ return static_cast<DerivedT &>( *this );
+ }
+
+ auto optional() -> DerivedT & {
+ m_optionality = Optionality::Optional;
+ return static_cast<DerivedT &>( *this );
+ };
+
+ auto required() -> DerivedT & {
+ m_optionality = Optionality::Required;
+ return static_cast<DerivedT &>( *this );
+ };
+
+ auto isOptional() const -> bool {
+ return m_optionality == Optionality::Optional;
+ }
+
+ auto cardinality() const -> size_t override {
+ if( m_ref->isContainer() )
+ return 0;
+ else
+ return 1;
+ }
+
+ auto hint() const -> std::string { return m_hint; }
+ };
+
+ class ExeName : public ComposableParserImpl<ExeName> {
+ std::shared_ptr<std::string> m_name;
+ std::shared_ptr<BoundValueRefBase> m_ref;
+
+ template<typename LambdaT>
+ static auto makeRef(LambdaT const &lambda) -> std::shared_ptr<BoundValueRefBase> {
+ return std::make_shared<BoundLambda<LambdaT>>( lambda) ;
+ }
+
+ public:
+ ExeName() : m_name( std::make_shared<std::string>( "<executable>" ) ) {}
+
+ explicit ExeName( std::string &ref ) : ExeName() {
+ m_ref = std::make_shared<BoundValueRef<std::string>>( ref );
+ }
+
+ template<typename LambdaT>
+ explicit ExeName( LambdaT const& lambda ) : ExeName() {
+ m_ref = std::make_shared<BoundLambda<LambdaT>>( lambda );
+ }
+
+ // The exe name is not parsed out of the normal tokens, but is handled specially
+ auto parse( std::string const&, TokenStream const &tokens ) const -> InternalParseResult override {
+ return InternalParseResult::ok( ParseState( ParseResultType::NoMatch, tokens ) );
+ }
+
+ auto name() const -> std::string { return *m_name; }
+ auto set( std::string const& newName ) -> ParserResult {
+
+ auto lastSlash = newName.find_last_of( "\\/" );
+ auto filename = ( lastSlash == std::string::npos )
+ ? newName
+ : newName.substr( lastSlash+1 );
+
+ *m_name = filename;
+ if( m_ref )
+ return m_ref->setValue( filename );
+ else
+ return ParserResult::ok( ParseResultType::Matched );
+ }
+ };
+
+ class Arg : public ParserRefImpl<Arg> {
+ public:
+ using ParserRefImpl::ParserRefImpl;
+
+ auto parse( std::string const &, TokenStream const &tokens ) const -> InternalParseResult override {
+ auto validationResult = validate();
+ if( !validationResult )
+ return InternalParseResult( validationResult );
+
+ auto remainingTokens = tokens;
+ auto const &token = *remainingTokens;
+ if( token.type != TokenType::Argument )
+ return InternalParseResult::ok( ParseState( ParseResultType::NoMatch, remainingTokens ) );
+
+ assert( !m_ref->isFlag() );
+ auto valueRef = static_cast<detail::BoundValueRefBase*>( m_ref.get() );
+
+ auto result = valueRef->setValue( remainingTokens->token );
+ if( !result )
+ return InternalParseResult( result );
+ else
+ return InternalParseResult::ok( ParseState( ParseResultType::Matched, ++remainingTokens ) );
+ }
+ };
+
+ inline auto normaliseOpt( std::string const &optName ) -> std::string {
+#ifdef CATCH_PLATFORM_WINDOWS
+ if( optName[0] == '/' )
+ return "-" + optName.substr( 1 );
+ else
+#endif
+ return optName;
+ }
+
+ class Opt : public ParserRefImpl<Opt> {
+ protected:
+ std::vector<std::string> m_optNames;
+
+ public:
+ template<typename LambdaT>
+ explicit Opt( LambdaT const &ref ) : ParserRefImpl( std::make_shared<BoundFlagLambda<LambdaT>>( ref ) ) {}
+
+ explicit Opt( bool &ref ) : ParserRefImpl( std::make_shared<BoundFlagRef>( ref ) ) {}
+
+ template<typename LambdaT>
+ Opt( LambdaT const &ref, std::string const &hint ) : ParserRefImpl( ref, hint ) {}
+
+ template<typename T>
+ Opt( T &ref, std::string const &hint ) : ParserRefImpl( ref, hint ) {}
+
+ auto operator[]( std::string const &optName ) -> Opt & {
+ m_optNames.push_back( optName );
+ return *this;
+ }
+
+ auto getHelpColumns() const -> std::vector<HelpColumns> {
+ std::ostringstream oss;
+ bool first = true;
+ for( auto const &opt : m_optNames ) {
+ if (first)
+ first = false;
+ else
+ oss << ", ";
+ oss << opt;
+ }
+ if( !m_hint.empty() )
+ oss << " <" << m_hint << ">";
+ return { { oss.str(), m_description } };
+ }
+
+ auto isMatch( std::string const &optToken ) const -> bool {
+ auto normalisedToken = normaliseOpt( optToken );
+ for( auto const &name : m_optNames ) {
+ if( normaliseOpt( name ) == normalisedToken )
+ return true;
+ }
+ return false;
+ }
+
+ using ParserBase::parse;
+
+ auto parse( std::string const&, TokenStream const &tokens ) const -> InternalParseResult override {
+ auto validationResult = validate();
+ if( !validationResult )
+ return InternalParseResult( validationResult );
+
+ auto remainingTokens = tokens;
+ if( remainingTokens && remainingTokens->type == TokenType::Option ) {
+ auto const &token = *remainingTokens;
+ if( isMatch(token.token ) ) {
+ if( m_ref->isFlag() ) {
+ auto flagRef = static_cast<detail::BoundFlagRefBase*>( m_ref.get() );
+ auto result = flagRef->setFlag( true );
+ if( !result )
+ return InternalParseResult( result );
+ if( result.value() == ParseResultType::ShortCircuitAll )
+ return InternalParseResult::ok( ParseState( result.value(), remainingTokens ) );
+ } else {
+ auto valueRef = static_cast<detail::BoundValueRefBase*>( m_ref.get() );
+ ++remainingTokens;
+ if( !remainingTokens )
+ return InternalParseResult::runtimeError( "Expected argument following " + token.token );
+ auto const &argToken = *remainingTokens;
+ if( argToken.type != TokenType::Argument )
+ return InternalParseResult::runtimeError( "Expected argument following " + token.token );
+ auto result = valueRef->setValue( argToken.token );
+ if( !result )
+ return InternalParseResult( result );
+ if( result.value() == ParseResultType::ShortCircuitAll )
+ return InternalParseResult::ok( ParseState( result.value(), remainingTokens ) );
+ }
+ return InternalParseResult::ok( ParseState( ParseResultType::Matched, ++remainingTokens ) );
+ }
+ }
+ return InternalParseResult::ok( ParseState( ParseResultType::NoMatch, remainingTokens ) );
+ }
+
+ auto validate() const -> Result override {
+ if( m_optNames.empty() )
+ return Result::logicError( "No options supplied to Opt" );
+ for( auto const &name : m_optNames ) {
+ if( name.empty() )
+ return Result::logicError( "Option name cannot be empty" );
+#ifdef CATCH_PLATFORM_WINDOWS
+ if( name[0] != '-' && name[0] != '/' )
+ return Result::logicError( "Option name must begin with '-' or '/'" );
+#else
+ if( name[0] != '-' )
+ return Result::logicError( "Option name must begin with '-'" );
+#endif
+ }
+ return ParserRefImpl::validate();
+ }
+ };
+
+ struct Help : Opt {
+ Help( bool &showHelpFlag )
+ : Opt([&]( bool flag ) {
+ showHelpFlag = flag;
+ return ParserResult::ok( ParseResultType::ShortCircuitAll );
+ })
+ {
+ static_cast<Opt &>( *this )
+ ("display usage information")
+ ["-?"]["-h"]["--help"]
+ .optional();
+ }
+ };
+
+ struct Parser : ParserBase {
+
+ mutable ExeName m_exeName;
+ std::vector<Opt> m_options;
+ std::vector<Arg> m_args;
+
+ auto operator|=( ExeName const &exeName ) -> Parser & {
+ m_exeName = exeName;
+ return *this;
+ }
+
+ auto operator|=( Arg const &arg ) -> Parser & {
+ m_args.push_back(arg);
+ return *this;
+ }
+
+ auto operator|=( Opt const &opt ) -> Parser & {
+ m_options.push_back(opt);
+ return *this;
+ }
+
+ auto operator|=( Parser const &other ) -> Parser & {
+ m_options.insert(m_options.end(), other.m_options.begin(), other.m_options.end());
+ m_args.insert(m_args.end(), other.m_args.begin(), other.m_args.end());
+ return *this;
+ }
+
+ template<typename T>
+ auto operator|( T const &other ) const -> Parser {
+ return Parser( *this ) |= other;
+ }
+
+ // Forward deprecated interface with '+' instead of '|'
+ template<typename T>
+ auto operator+=( T const &other ) -> Parser & { return operator|=( other ); }
+ template<typename T>
+ auto operator+( T const &other ) const -> Parser { return operator|( other ); }
+
+ auto getHelpColumns() const -> std::vector<HelpColumns> {
+ std::vector<HelpColumns> cols;
+ for (auto const &o : m_options) {
+ auto childCols = o.getHelpColumns();
+ cols.insert( cols.end(), childCols.begin(), childCols.end() );
+ }
+ return cols;
+ }
+
+ void writeToStream( std::ostream &os ) const {
+ if (!m_exeName.name().empty()) {
+ os << "usage:\n" << " " << m_exeName.name() << " ";
+ bool required = true, first = true;
+ for( auto const &arg : m_args ) {
+ if (first)
+ first = false;
+ else
+ os << " ";
+ if( arg.isOptional() && required ) {
+ os << "[";
+ required = false;
+ }
+ os << "<" << arg.hint() << ">";
+ if( arg.cardinality() == 0 )
+ os << " ... ";
+ }
+ if( !required )
+ os << "]";
+ if( !m_options.empty() )
+ os << " options";
+ os << "\n\nwhere options are:" << std::endl;
+ }
+
+ auto rows = getHelpColumns();
+ size_t consoleWidth = CATCH_CLARA_CONFIG_CONSOLE_WIDTH;
+ size_t optWidth = 0;
+ for( auto const &cols : rows )
+ optWidth = (std::max)(optWidth, cols.left.size() + 2);
+
+ optWidth = (std::min)(optWidth, consoleWidth/2);
+
+ for( auto const &cols : rows ) {
+ auto row =
+ TextFlow::Column( cols.left ).width( optWidth ).indent( 2 ) +
+ TextFlow::Spacer(4) +
+ TextFlow::Column( cols.right ).width( consoleWidth - 7 - optWidth );
+ os << row << std::endl;
+ }
+ }
+
+ friend auto operator<<( std::ostream &os, Parser const &parser ) -> std::ostream& {
+ parser.writeToStream( os );
+ return os;
+ }
+
+ auto validate() const -> Result override {
+ for( auto const &opt : m_options ) {
+ auto result = opt.validate();
+ if( !result )
+ return result;
+ }
+ for( auto const &arg : m_args ) {
+ auto result = arg.validate();
+ if( !result )
+ return result;
+ }
+ return Result::ok();
+ }
+
+ using ParserBase::parse;
+
+ auto parse( std::string const& exeName, TokenStream const &tokens ) const -> InternalParseResult override {
+
+ struct ParserInfo {
+ ParserBase const* parser = nullptr;
+ size_t count = 0;
+ };
+ const size_t totalParsers = m_options.size() + m_args.size();
+ assert( totalParsers < 512 );
+ // ParserInfo parseInfos[totalParsers]; // <-- this is what we really want to do
+ ParserInfo parseInfos[512];
+
+ {
+ size_t i = 0;
+ for (auto const &opt : m_options) parseInfos[i++].parser = &opt;
+ for (auto const &arg : m_args) parseInfos[i++].parser = &arg;
+ }
+
+ m_exeName.set( exeName );
+
+ auto result = InternalParseResult::ok( ParseState( ParseResultType::NoMatch, tokens ) );
+ while( result.value().remainingTokens() ) {
+ bool tokenParsed = false;
+
+ for( size_t i = 0; i < totalParsers; ++i ) {
+ auto& parseInfo = parseInfos[i];
+ if( parseInfo.parser->cardinality() == 0 || parseInfo.count < parseInfo.parser->cardinality() ) {
+ result = parseInfo.parser->parse(exeName, result.value().remainingTokens());
+ if (!result)
+ return result;
+ if (result.value().type() != ParseResultType::NoMatch) {
+ tokenParsed = true;
+ ++parseInfo.count;
+ break;
+ }
+ }
+ }
+
+ if( result.value().type() == ParseResultType::ShortCircuitAll )
+ return result;
+ if( !tokenParsed )
+ return InternalParseResult::runtimeError( "Unrecognised token: " + result.value().remainingTokens()->token );
+ }
+ // !TBD Check missing required options
+ return result;
+ }
+ };
+
+ template<typename DerivedT>
+ template<typename T>
+ auto ComposableParserImpl<DerivedT>::operator|( T const &other ) const -> Parser {
+ return Parser() | static_cast<DerivedT const &>( *this ) | other;
+ }
+} // namespace detail
+
+// A Combined parser
+using detail::Parser;
+
+// A parser for options
+using detail::Opt;
+
+// A parser for arguments
+using detail::Arg;
+
+// Wrapper for argc, argv from main()
+using detail::Args;
+
+// Specifies the name of the executable
+using detail::ExeName;
+
+// Convenience wrapper for option parser that specifies the help option
+using detail::Help;
+
+// enum of result types from a parse
+using detail::ParseResultType;
+
+// Result type for parser operation
+using detail::ParserResult;
+
+}} // namespace Catch::clara
+
+// end clara.hpp
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+
+// Restore Clara's value for console width, if present
+#ifdef CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH
+#define CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH
+#undef CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH
+#endif
+
+// end catch_clara.h
+namespace Catch {
+
+ clara::Parser makeCommandLineParser( ConfigData& config );
+
+} // end namespace Catch
+
+// end catch_commandline.h
+#include <fstream>
+#include <ctime>
+
+namespace Catch {
+
+ clara::Parser makeCommandLineParser( ConfigData& config ) {
+
+ using namespace clara;
+
+ auto const setWarning = [&]( std::string const& warning ) {
+ auto warningSet = [&]() {
+ if( warning == "NoAssertions" )
+ return WarnAbout::NoAssertions;
+
+ if ( warning == "NoTests" )
+ return WarnAbout::NoTests;
+
+ return WarnAbout::Nothing;
+ }();
+
+ if (warningSet == WarnAbout::Nothing)
+ return ParserResult::runtimeError( "Unrecognised warning: '" + warning + "'" );
+ config.warnings = static_cast<WarnAbout::What>( config.warnings | warningSet );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const loadTestNamesFromFile = [&]( std::string const& filename ) {
+ std::ifstream f( filename.c_str() );
+ if( !f.is_open() )
+ return ParserResult::runtimeError( "Unable to load input file: '" + filename + "'" );
+
+ std::string line;
+ while( std::getline( f, line ) ) {
+ line = trim(line);
+ if( !line.empty() && !startsWith( line, '#' ) ) {
+ if( !startsWith( line, '"' ) )
+ line = '"' + line + '"';
+ config.testsOrTags.push_back( line );
+ config.testsOrTags.emplace_back( "," );
+ }
+ }
+ //Remove comma in the end
+ if(!config.testsOrTags.empty())
+ config.testsOrTags.erase( config.testsOrTags.end()-1 );
+
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const setTestOrder = [&]( std::string const& order ) {
+ if( startsWith( "declared", order ) )
+ config.runOrder = RunTests::InDeclarationOrder;
+ else if( startsWith( "lexical", order ) )
+ config.runOrder = RunTests::InLexicographicalOrder;
+ else if( startsWith( "random", order ) )
+ config.runOrder = RunTests::InRandomOrder;
+ else
+ return clara::ParserResult::runtimeError( "Unrecognised ordering: '" + order + "'" );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const setRngSeed = [&]( std::string const& seed ) {
+ if( seed != "time" )
+ return clara::detail::convertInto( seed, config.rngSeed );
+ config.rngSeed = static_cast<unsigned int>( std::time(nullptr) );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const setColourUsage = [&]( std::string const& useColour ) {
+ auto mode = toLower( useColour );
+
+ if( mode == "yes" )
+ config.useColour = UseColour::Yes;
+ else if( mode == "no" )
+ config.useColour = UseColour::No;
+ else if( mode == "auto" )
+ config.useColour = UseColour::Auto;
+ else
+ return ParserResult::runtimeError( "colour mode must be one of: auto, yes or no. '" + useColour + "' not recognised" );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const setWaitForKeypress = [&]( std::string const& keypress ) {
+ auto keypressLc = toLower( keypress );
+ if (keypressLc == "never")
+ config.waitForKeypress = WaitForKeypress::Never;
+ else if( keypressLc == "start" )
+ config.waitForKeypress = WaitForKeypress::BeforeStart;
+ else if( keypressLc == "exit" )
+ config.waitForKeypress = WaitForKeypress::BeforeExit;
+ else if( keypressLc == "both" )
+ config.waitForKeypress = WaitForKeypress::BeforeStartAndExit;
+ else
+ return ParserResult::runtimeError( "keypress argument must be one of: never, start, exit or both. '" + keypress + "' not recognised" );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const setVerbosity = [&]( std::string const& verbosity ) {
+ auto lcVerbosity = toLower( verbosity );
+ if( lcVerbosity == "quiet" )
+ config.verbosity = Verbosity::Quiet;
+ else if( lcVerbosity == "normal" )
+ config.verbosity = Verbosity::Normal;
+ else if( lcVerbosity == "high" )
+ config.verbosity = Verbosity::High;
+ else
+ return ParserResult::runtimeError( "Unrecognised verbosity, '" + verbosity + "'" );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+ auto const setReporter = [&]( std::string const& reporter ) {
+ IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories();
+
+ auto lcReporter = toLower( reporter );
+ auto result = factories.find( lcReporter );
+
+ if( factories.end() != result )
+ config.reporterName = lcReporter;
+ else
+ return ParserResult::runtimeError( "Unrecognized reporter, '" + reporter + "'. Check available with --list-reporters" );
+ return ParserResult::ok( ParseResultType::Matched );
+ };
+
+ auto cli
+ = ExeName( config.processName )
+ | Help( config.showHelp )
+ | Opt( config.listTests )
+ ["-l"]["--list-tests"]
+ ( "list all/matching test cases" )
+ | Opt( config.listTags )
+ ["-t"]["--list-tags"]
+ ( "list all/matching tags" )
+ | Opt( config.showSuccessfulTests )
+ ["-s"]["--success"]
+ ( "include successful tests in output" )
+ | Opt( config.shouldDebugBreak )
+ ["-b"]["--break"]
+ ( "break into debugger on failure" )
+ | Opt( config.noThrow )
+ ["-e"]["--nothrow"]
+ ( "skip exception tests" )
+ | Opt( config.showInvisibles )
+ ["-i"]["--invisibles"]
+ ( "show invisibles (tabs, newlines)" )
+ | Opt( config.outputFilename, "filename" )
+ ["-o"]["--out"]
+ ( "output filename" )
+ | Opt( setReporter, "name" )
+ ["-r"]["--reporter"]
+ ( "reporter to use (defaults to console)" )
+ | Opt( config.name, "name" )
+ ["-n"]["--name"]
+ ( "suite name" )
+ | Opt( [&]( bool ){ config.abortAfter = 1; } )
+ ["-a"]["--abort"]
+ ( "abort at first failure" )
+ | Opt( [&]( int x ){ config.abortAfter = x; }, "no. failures" )
+ ["-x"]["--abortx"]
+ ( "abort after x failures" )
+ | Opt( setWarning, "warning name" )
+ ["-w"]["--warn"]
+ ( "enable warnings" )
+ | Opt( [&]( bool flag ) { config.showDurations = flag ? ShowDurations::Always : ShowDurations::Never; }, "yes|no" )
+ ["-d"]["--durations"]
+ ( "show test durations" )
+ | Opt( config.minDuration, "seconds" )
+ ["-D"]["--min-duration"]
+ ( "show test durations for tests taking at least the given number of seconds" )
+ | Opt( loadTestNamesFromFile, "filename" )
+ ["-f"]["--input-file"]
+ ( "load test names to run from a file" )
+ | Opt( config.filenamesAsTags )
+ ["-#"]["--filenames-as-tags"]
+ ( "adds a tag for the filename" )
+ | Opt( config.sectionsToRun, "section name" )
+ ["-c"]["--section"]
+ ( "specify section to run" )
+ | Opt( setVerbosity, "quiet|normal|high" )
+ ["-v"]["--verbosity"]
+ ( "set output verbosity" )
+ | Opt( config.listTestNamesOnly )
+ ["--list-test-names-only"]
+ ( "list all/matching test cases names only" )
+ | Opt( config.listReporters )
+ ["--list-reporters"]
+ ( "list all reporters" )
+ | Opt( setTestOrder, "decl|lex|rand" )
+ ["--order"]
+ ( "test case order (defaults to decl)" )
+ | Opt( setRngSeed, "'time'|number" )
+ ["--rng-seed"]
+ ( "set a specific seed for random numbers" )
+ | Opt( setColourUsage, "yes|no" )
+ ["--use-colour"]
+ ( "should output be colourised" )
+ | Opt( config.libIdentify )
+ ["--libidentify"]
+ ( "report name and version according to libidentify standard" )
+ | Opt( setWaitForKeypress, "never|start|exit|both" )
+ ["--wait-for-keypress"]
+ ( "waits for a keypress before exiting" )
+ | Opt( config.benchmarkSamples, "samples" )
+ ["--benchmark-samples"]
+ ( "number of samples to collect (default: 100)" )
+ | Opt( config.benchmarkResamples, "resamples" )
+ ["--benchmark-resamples"]
+ ( "number of resamples for the bootstrap (default: 100000)" )
+ | Opt( config.benchmarkConfidenceInterval, "confidence interval" )
+ ["--benchmark-confidence-interval"]
+ ( "confidence interval for the bootstrap (between 0 and 1, default: 0.95)" )
+ | Opt( config.benchmarkNoAnalysis )
+ ["--benchmark-no-analysis"]
+ ( "perform only measurements; do not perform any analysis" )
+ | Opt( config.benchmarkWarmupTime, "benchmarkWarmupTime" )
+ ["--benchmark-warmup-time"]
+ ( "amount of time in milliseconds spent on warming up each test (default: 100)" )
+ | Arg( config.testsOrTags, "test name|pattern|tags" )
+ ( "which test or tests to use" );
+
+ return cli;
+ }
+
+} // end namespace Catch
+// end catch_commandline.cpp
+// start catch_common.cpp
+
+#include <cstring>
+#include <ostream>
+
+namespace Catch {
+
+ bool SourceLineInfo::operator == ( SourceLineInfo const& other ) const noexcept {
+ return line == other.line && (file == other.file || std::strcmp(file, other.file) == 0);
+ }
+ bool SourceLineInfo::operator < ( SourceLineInfo const& other ) const noexcept {
+ // We can assume that the same file will usually have the same pointer.
+ // Thus, if the pointers are the same, there is no point in calling the strcmp
+ return line < other.line || ( line == other.line && file != other.file && (std::strcmp(file, other.file) < 0));
+ }
+
+ std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ) {
+#ifndef __GNUG__
+ os << info.file << '(' << info.line << ')';
+#else
+ os << info.file << ':' << info.line;
+#endif
+ return os;
+ }
+
+ std::string StreamEndStop::operator+() const {
+ return std::string();
+ }
+
+ NonCopyable::NonCopyable() = default;
+ NonCopyable::~NonCopyable() = default;
+
+}
+// end catch_common.cpp
+// start catch_config.cpp
+
+namespace Catch {
+
+ Config::Config( ConfigData const& data )
+ : m_data( data ),
+ m_stream( openStream() )
+ {
+ // We need to trim filter specs to avoid trouble with superfluous
+ // whitespace (esp. important for bdd macros, as those are manually
+ // aligned with whitespace).
+
+ for (auto& elem : m_data.testsOrTags) {
+ elem = trim(elem);
+ }
+ for (auto& elem : m_data.sectionsToRun) {
+ elem = trim(elem);
+ }
+
+ TestSpecParser parser(ITagAliasRegistry::get());
+ if (!m_data.testsOrTags.empty()) {
+ m_hasTestFilters = true;
+ for (auto const& testOrTags : m_data.testsOrTags) {
+ parser.parse(testOrTags);
+ }
+ }
+ m_testSpec = parser.testSpec();
+ }
+
+ std::string const& Config::getFilename() const {
+ return m_data.outputFilename ;
+ }
+
+ bool Config::listTests() const { return m_data.listTests; }
+ bool Config::listTestNamesOnly() const { return m_data.listTestNamesOnly; }
+ bool Config::listTags() const { return m_data.listTags; }
+ bool Config::listReporters() const { return m_data.listReporters; }
+
+ std::string Config::getProcessName() const { return m_data.processName; }
+ std::string const& Config::getReporterName() const { return m_data.reporterName; }
+
+ std::vector<std::string> const& Config::getTestsOrTags() const { return m_data.testsOrTags; }
+ std::vector<std::string> const& Config::getSectionsToRun() const { return m_data.sectionsToRun; }
+
+ TestSpec const& Config::testSpec() const { return m_testSpec; }
+ bool Config::hasTestFilters() const { return m_hasTestFilters; }
+
+ bool Config::showHelp() const { return m_data.showHelp; }
+
+ // IConfig interface
+ bool Config::allowThrows() const { return !m_data.noThrow; }
+ std::ostream& Config::stream() const { return m_stream->stream(); }
+ std::string Config::name() const { return m_data.name.empty() ? m_data.processName : m_data.name; }
+ bool Config::includeSuccessfulResults() const { return m_data.showSuccessfulTests; }
+ bool Config::warnAboutMissingAssertions() const { return !!(m_data.warnings & WarnAbout::NoAssertions); }
+ bool Config::warnAboutNoTests() const { return !!(m_data.warnings & WarnAbout::NoTests); }
+ ShowDurations::OrNot Config::showDurations() const { return m_data.showDurations; }
+ double Config::minDuration() const { return m_data.minDuration; }
+ RunTests::InWhatOrder Config::runOrder() const { return m_data.runOrder; }
+ unsigned int Config::rngSeed() const { return m_data.rngSeed; }
+ UseColour::YesOrNo Config::useColour() const { return m_data.useColour; }
+ bool Config::shouldDebugBreak() const { return m_data.shouldDebugBreak; }
+ int Config::abortAfter() const { return m_data.abortAfter; }
+ bool Config::showInvisibles() const { return m_data.showInvisibles; }
+ Verbosity Config::verbosity() const { return m_data.verbosity; }
+
+ bool Config::benchmarkNoAnalysis() const { return m_data.benchmarkNoAnalysis; }
+ int Config::benchmarkSamples() const { return m_data.benchmarkSamples; }
+ double Config::benchmarkConfidenceInterval() const { return m_data.benchmarkConfidenceInterval; }
+ unsigned int Config::benchmarkResamples() const { return m_data.benchmarkResamples; }
+ std::chrono::milliseconds Config::benchmarkWarmupTime() const { return std::chrono::milliseconds(m_data.benchmarkWarmupTime); }
+
+ IStream const* Config::openStream() {
+ return Catch::makeStream(m_data.outputFilename);
+ }
+
+} // end namespace Catch
+// end catch_config.cpp
+// start catch_console_colour.cpp
+
+#if defined(__clang__)
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wexit-time-destructors"
+#endif
+
+// start catch_errno_guard.h
+
+namespace Catch {
+
+ class ErrnoGuard {
+ public:
+ ErrnoGuard();
+ ~ErrnoGuard();
+ private:
+ int m_oldErrno;
+ };
+
+}
+
+// end catch_errno_guard.h
+// start catch_windows_h_proxy.h
+
+
+#if defined(CATCH_PLATFORM_WINDOWS)
+
+#if !defined(NOMINMAX) && !defined(CATCH_CONFIG_NO_NOMINMAX)
+# define CATCH_DEFINED_NOMINMAX
+# define NOMINMAX
+#endif
+#if !defined(WIN32_LEAN_AND_MEAN) && !defined(CATCH_CONFIG_NO_WIN32_LEAN_AND_MEAN)
+# define CATCH_DEFINED_WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+#endif
+
+#ifdef __AFXDLL
+#include <AfxWin.h>
+#else
+#include <windows.h>
+#endif
+
+#ifdef CATCH_DEFINED_NOMINMAX
+# undef NOMINMAX
+#endif
+#ifdef CATCH_DEFINED_WIN32_LEAN_AND_MEAN
+# undef WIN32_LEAN_AND_MEAN
+#endif
+
+#endif // defined(CATCH_PLATFORM_WINDOWS)
+
+// end catch_windows_h_proxy.h
+#include <sstream>
+
+namespace Catch {
+ namespace {
+
+ struct IColourImpl {
+ virtual ~IColourImpl() = default;
+ virtual void use( Colour::Code _colourCode ) = 0;
+ };
+
+ struct NoColourImpl : IColourImpl {
+ void use( Colour::Code ) override {}
+
+ static IColourImpl* instance() {
+ static NoColourImpl s_instance;
+ return &s_instance;
+ }
+ };
+
+ } // anon namespace
+} // namespace Catch
+
+#if !defined( CATCH_CONFIG_COLOUR_NONE ) && !defined( CATCH_CONFIG_COLOUR_WINDOWS ) && !defined( CATCH_CONFIG_COLOUR_ANSI )
+# ifdef CATCH_PLATFORM_WINDOWS
+# define CATCH_CONFIG_COLOUR_WINDOWS
+# else
+# define CATCH_CONFIG_COLOUR_ANSI
+# endif
+#endif
+
+#if defined ( CATCH_CONFIG_COLOUR_WINDOWS ) /////////////////////////////////////////
+
+namespace Catch {
+namespace {
+
+ class Win32ColourImpl : public IColourImpl {
+ public:
+ Win32ColourImpl() : stdoutHandle( GetStdHandle(STD_OUTPUT_HANDLE) )
+ {
+ CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
+ GetConsoleScreenBufferInfo( stdoutHandle, &csbiInfo );
+ originalForegroundAttributes = csbiInfo.wAttributes & ~( BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_INTENSITY );
+ originalBackgroundAttributes = csbiInfo.wAttributes & ~( FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY );
+ }
+
+ void use( Colour::Code _colourCode ) override {
+ switch( _colourCode ) {
+ case Colour::None: return setTextAttribute( originalForegroundAttributes );
+ case Colour::White: return setTextAttribute( FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE );
+ case Colour::Red: return setTextAttribute( FOREGROUND_RED );
+ case Colour::Green: return setTextAttribute( FOREGROUND_GREEN );
+ case Colour::Blue: return setTextAttribute( FOREGROUND_BLUE );
+ case Colour::Cyan: return setTextAttribute( FOREGROUND_BLUE | FOREGROUND_GREEN );
+ case Colour::Yellow: return setTextAttribute( FOREGROUND_RED | FOREGROUND_GREEN );
+ case Colour::Grey: return setTextAttribute( 0 );
+
+ case Colour::LightGrey: return setTextAttribute( FOREGROUND_INTENSITY );
+ case Colour::BrightRed: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_RED );
+ case Colour::BrightGreen: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_GREEN );
+ case Colour::BrightWhite: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE );
+ case Colour::BrightYellow: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN );
+
+ case Colour::Bright: CATCH_INTERNAL_ERROR( "not a colour" );
+
+ default:
+ CATCH_ERROR( "Unknown colour requested" );
+ }
+ }
+
+ private:
+ void setTextAttribute( WORD _textAttribute ) {
+ SetConsoleTextAttribute( stdoutHandle, _textAttribute | originalBackgroundAttributes );
+ }
+ HANDLE stdoutHandle;
+ WORD originalForegroundAttributes;
+ WORD originalBackgroundAttributes;
+ };
+
+ IColourImpl* platformColourInstance() {
+ static Win32ColourImpl s_instance;
+
+ IConfigPtr config = getCurrentContext().getConfig();
+ UseColour::YesOrNo colourMode = config
+ ? config->useColour()
+ : UseColour::Auto;
+ if( colourMode == UseColour::Auto )
+ colourMode = UseColour::Yes;
+ return colourMode == UseColour::Yes
+ ? &s_instance
+ : NoColourImpl::instance();
+ }
+
+} // end anon namespace
+} // end namespace Catch
+
+#elif defined( CATCH_CONFIG_COLOUR_ANSI ) //////////////////////////////////////
+
+#include <unistd.h>
+
+namespace Catch {
+namespace {
+
+ // use POSIX/ ANSI console terminal codes
+ // Thanks to Adam Strzelecki for original contribution
+ // (http://github.com/nanoant)
+ // https://github.com/philsquared/Catch/pull/131
+ class PosixColourImpl : public IColourImpl {
+ public:
+ void use( Colour::Code _colourCode ) override {
+ switch( _colourCode ) {
+ case Colour::None:
+ case Colour::White: return setColour( "[0m" );
+ case Colour::Red: return setColour( "[0;31m" );
+ case Colour::Green: return setColour( "[0;32m" );
+ case Colour::Blue: return setColour( "[0;34m" );
+ case Colour::Cyan: return setColour( "[0;36m" );
+ case Colour::Yellow: return setColour( "[0;33m" );
+ case Colour::Grey: return setColour( "[1;30m" );
+
+ case Colour::LightGrey: return setColour( "[0;37m" );
+ case Colour::BrightRed: return setColour( "[1;31m" );
+ case Colour::BrightGreen: return setColour( "[1;32m" );
+ case Colour::BrightWhite: return setColour( "[1;37m" );
+ case Colour::BrightYellow: return setColour( "[1;33m" );
+
+ case Colour::Bright: CATCH_INTERNAL_ERROR( "not a colour" );
+ default: CATCH_INTERNAL_ERROR( "Unknown colour requested" );
+ }
+ }
+ static IColourImpl* instance() {
+ static PosixColourImpl s_instance;
+ return &s_instance;
+ }
+
+ private:
+ void setColour( const char* _escapeCode ) {
+ getCurrentContext().getConfig()->stream()
+ << '\033' << _escapeCode;
+ }
+ };
+
+ bool useColourOnPlatform() {
+ return
+#if defined(CATCH_PLATFORM_MAC) || defined(CATCH_PLATFORM_IPHONE)
+ !isDebuggerActive() &&
+#endif
+#if !(defined(__DJGPP__) && defined(__STRICT_ANSI__))
+ isatty(STDOUT_FILENO)
+#else
+ false
+#endif
+ ;
+ }
+ IColourImpl* platformColourInstance() {
+ ErrnoGuard guard;
+ IConfigPtr config = getCurrentContext().getConfig();
+ UseColour::YesOrNo colourMode = config
+ ? config->useColour()
+ : UseColour::Auto;
+ if( colourMode == UseColour::Auto )
+ colourMode = useColourOnPlatform()
+ ? UseColour::Yes
+ : UseColour::No;
+ return colourMode == UseColour::Yes
+ ? PosixColourImpl::instance()
+ : NoColourImpl::instance();
+ }
+
+} // end anon namespace
+} // end namespace Catch
+
+#else // not Windows or ANSI ///////////////////////////////////////////////
+
+namespace Catch {
+
+ static IColourImpl* platformColourInstance() { return NoColourImpl::instance(); }
+
+} // end namespace Catch
+
+#endif // Windows/ ANSI/ None
+
+namespace Catch {
+
+ Colour::Colour( Code _colourCode ) { use( _colourCode ); }
+ Colour::Colour( Colour&& other ) noexcept {
+ m_moved = other.m_moved;
+ other.m_moved = true;
+ }
+ Colour& Colour::operator=( Colour&& other ) noexcept {
+ m_moved = other.m_moved;
+ other.m_moved = true;
+ return *this;
+ }
+
+ Colour::~Colour(){ if( !m_moved ) use( None ); }
+
+ void Colour::use( Code _colourCode ) {
+ static IColourImpl* impl = platformColourInstance();
+ // Strictly speaking, this cannot possibly happen.
+ // However, under some conditions it does happen (see #1626),
+ // and this change is small enough that we can let practicality
+ // triumph over purity in this case.
+ if (impl != nullptr) {
+ impl->use( _colourCode );
+ }
+ }
+
+ std::ostream& operator << ( std::ostream& os, Colour const& ) {
+ return os;
+ }
+
+} // end namespace Catch
+
+#if defined(__clang__)
+# pragma clang diagnostic pop
+#endif
+
+// end catch_console_colour.cpp
+// start catch_context.cpp
+
+namespace Catch {
+
+ class Context : public IMutableContext, NonCopyable {
+
+ public: // IContext
+ IResultCapture* getResultCapture() override {
+ return m_resultCapture;
+ }
+ IRunner* getRunner() override {
+ return m_runner;
+ }
+
+ IConfigPtr const& getConfig() const override {
+ return m_config;
+ }
+
+ ~Context() override;
+
+ public: // IMutableContext
+ void setResultCapture( IResultCapture* resultCapture ) override {
+ m_resultCapture = resultCapture;
+ }
+ void setRunner( IRunner* runner ) override {
+ m_runner = runner;
+ }
+ void setConfig( IConfigPtr const& config ) override {
+ m_config = config;
+ }
+
+ friend IMutableContext& getCurrentMutableContext();
+
+ private:
+ IConfigPtr m_config;
+ IRunner* m_runner = nullptr;
+ IResultCapture* m_resultCapture = nullptr;
+ };
+
+ IMutableContext *IMutableContext::currentContext = nullptr;
+
+ void IMutableContext::createContext()
+ {
+ currentContext = new Context();
+ }
+
+ void cleanUpContext() {
+ delete IMutableContext::currentContext;
+ IMutableContext::currentContext = nullptr;
+ }
+ IContext::~IContext() = default;
+ IMutableContext::~IMutableContext() = default;
+ Context::~Context() = default;
+
+ SimplePcg32& rng() {
+ static SimplePcg32 s_rng;
+ return s_rng;
+ }
+
+}
+// end catch_context.cpp
+// start catch_debug_console.cpp
+
+// start catch_debug_console.h
+
+#include <string>
+
+namespace Catch {
+ void writeToDebugConsole( std::string const& text );
+}
+
+// end catch_debug_console.h
+#if defined(CATCH_CONFIG_ANDROID_LOGWRITE)
+#include <android/log.h>
+
+ namespace Catch {
+ void writeToDebugConsole( std::string const& text ) {
+ __android_log_write( ANDROID_LOG_DEBUG, "Catch", text.c_str() );
+ }
+ }
+
+#elif defined(CATCH_PLATFORM_WINDOWS)
+
+ namespace Catch {
+ void writeToDebugConsole( std::string const& text ) {
+ ::OutputDebugStringA( text.c_str() );
+ }
+ }
+
+#else
+
+ namespace Catch {
+ void writeToDebugConsole( std::string const& text ) {
+ // !TBD: Need a version for Mac/ XCode and other IDEs
+ Catch::cout() << text;
+ }
+ }
+
+#endif // Platform
+// end catch_debug_console.cpp
+// start catch_debugger.cpp
+
+#if defined(CATCH_PLATFORM_MAC) || defined(CATCH_PLATFORM_IPHONE)
+
+# include <cassert>
+# include <sys/types.h>
+# include <unistd.h>
+# include <cstddef>
+# include <ostream>
+
+#ifdef __apple_build_version__
+ // These headers will only compile with AppleClang (XCode)
+ // For other compilers (Clang, GCC, ... ) we need to exclude them
+# include <sys/sysctl.h>
+#endif
+
+ namespace Catch {
+ #ifdef __apple_build_version__
+ // The following function is taken directly from the following technical note:
+ // https://developer.apple.com/library/archive/qa/qa1361/_index.html
+
+ // Returns true if the current process is being debugged (either
+ // running under the debugger or has a debugger attached post facto).
+ bool isDebuggerActive(){
+ int mib[4];
+ struct kinfo_proc info;
+ std::size_t size;
+
+ // Initialize the flags so that, if sysctl fails for some bizarre
+ // reason, we get a predictable result.
+
+ info.kp_proc.p_flag = 0;
+
+ // Initialize mib, which tells sysctl the info we want, in this case
+ // we're looking for information about a specific process ID.
+
+ mib[0] = CTL_KERN;
+ mib[1] = KERN_PROC;
+ mib[2] = KERN_PROC_PID;
+ mib[3] = getpid();
+
+ // Call sysctl.
+
+ size = sizeof(info);
+ if( sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, nullptr, 0) != 0 ) {
+ Catch::cerr() << "\n** Call to sysctl failed - unable to determine if debugger is active **\n" << std::endl;
+ return false;
+ }
+
+ // We're being debugged if the P_TRACED flag is set.
+
+ return ( (info.kp_proc.p_flag & P_TRACED) != 0 );
+ }
+ #else
+ bool isDebuggerActive() {
+ // We need to find another way to determine this for non-appleclang compilers on macOS
+ return false;
+ }
+ #endif
+ } // namespace Catch
+
+#elif defined(CATCH_PLATFORM_LINUX)
+ #include <fstream>
+ #include <string>
+
+ namespace Catch{
+ // The standard POSIX way of detecting a debugger is to attempt to
+ // ptrace() the process, but this needs to be done from a child and not
+ // this process itself to still allow attaching to this process later
+ // if wanted, so is rather heavy. Under Linux we have the PID of the
+ // "debugger" (which doesn't need to be gdb, of course, it could also
+ // be strace, for example) in /proc/$PID/status, so just get it from
+ // there instead.
+ bool isDebuggerActive(){
+ // Libstdc++ has a bug, where std::ifstream sets errno to 0
+ // This way our users can properly assert over errno values
+ ErrnoGuard guard;
+ std::ifstream in("/proc/self/status");
+ for( std::string line; std::getline(in, line); ) {
+ static const int PREFIX_LEN = 11;
+ if( line.compare(0, PREFIX_LEN, "TracerPid:\t") == 0 ) {
+ // We're traced if the PID is not 0 and no other PID starts
+ // with 0 digit, so it's enough to check for just a single
+ // character.
+ return line.length() > PREFIX_LEN && line[PREFIX_LEN] != '0';
+ }
+ }
+
+ return false;
+ }
+ } // namespace Catch
+#elif defined(_MSC_VER)
+ extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent();
+ namespace Catch {
+ bool isDebuggerActive() {
+ return IsDebuggerPresent() != 0;
+ }
+ }
+#elif defined(__MINGW32__)
+ extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent();
+ namespace Catch {
+ bool isDebuggerActive() {
+ return IsDebuggerPresent() != 0;
+ }
+ }
+#else
+ namespace Catch {
+ bool isDebuggerActive() { return false; }
+ }
+#endif // Platform
+// end catch_debugger.cpp
+// start catch_decomposer.cpp
+
+namespace Catch {
+
+ ITransientExpression::~ITransientExpression() = default;
+
+ void formatReconstructedExpression( std::ostream &os, std::string const& lhs, StringRef op, std::string const& rhs ) {
+ if( lhs.size() + rhs.size() < 40 &&
+ lhs.find('\n') == std::string::npos &&
+ rhs.find('\n') == std::string::npos )
+ os << lhs << " " << op << " " << rhs;
+ else
+ os << lhs << "\n" << op << "\n" << rhs;
+ }
+}
+// end catch_decomposer.cpp
+// start catch_enforce.cpp
+
+#include <stdexcept>
+
+namespace Catch {
+#if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) && !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER)
+ [[noreturn]]
+ void throw_exception(std::exception const& e) {
+ Catch::cerr() << "Catch will terminate because it needed to throw an exception.\n"
+ << "The message was: " << e.what() << '\n';
+ std::terminate();
+ }
+#endif
+
+ [[noreturn]]
+ void throw_logic_error(std::string const& msg) {
+ throw_exception(std::logic_error(msg));
+ }
+
+ [[noreturn]]
+ void throw_domain_error(std::string const& msg) {
+ throw_exception(std::domain_error(msg));
+ }
+
+ [[noreturn]]
+ void throw_runtime_error(std::string const& msg) {
+ throw_exception(std::runtime_error(msg));
+ }
+
+} // namespace Catch;
+// end catch_enforce.cpp
+// start catch_enum_values_registry.cpp
+// start catch_enum_values_registry.h
+
+#include <vector>
+#include <memory>
+
+namespace Catch {
+
+ namespace Detail {
+
+ std::unique_ptr<EnumInfo> makeEnumInfo( StringRef enumName, StringRef allValueNames, std::vector<int> const& values );
+
+ class EnumValuesRegistry : public IMutableEnumValuesRegistry {
+
+ std::vector<std::unique_ptr<EnumInfo>> m_enumInfos;
+
+ EnumInfo const& registerEnum( StringRef enumName, StringRef allEnums, std::vector<int> const& values) override;
+ };
+
+ std::vector<StringRef> parseEnums( StringRef enums );
+
+ } // Detail
+
+} // Catch
+
+// end catch_enum_values_registry.h
+
+#include <map>
+#include <cassert>
+
+namespace Catch {
+
+ IMutableEnumValuesRegistry::~IMutableEnumValuesRegistry() {}
+
+ namespace Detail {
+
+ namespace {
+ // Extracts the actual name part of an enum instance
+ // In other words, it returns the Blue part of Bikeshed::Colour::Blue
+ StringRef extractInstanceName(StringRef enumInstance) {
+ // Find last occurrence of ":"
+ size_t name_start = enumInstance.size();
+ while (name_start > 0 && enumInstance[name_start - 1] != ':') {
+ --name_start;
+ }
+ return enumInstance.substr(name_start, enumInstance.size() - name_start);
+ }
+ }
+
+ std::vector<StringRef> parseEnums( StringRef enums ) {
+ auto enumValues = splitStringRef( enums, ',' );
+ std::vector<StringRef> parsed;
+ parsed.reserve( enumValues.size() );
+ for( auto const& enumValue : enumValues ) {
+ parsed.push_back(trim(extractInstanceName(enumValue)));
+ }
+ return parsed;
+ }
+
+ EnumInfo::~EnumInfo() {}
+
+ StringRef EnumInfo::lookup( int value ) const {
+ for( auto const& valueToName : m_values ) {
+ if( valueToName.first == value )
+ return valueToName.second;
+ }
+ return "{** unexpected enum value **}"_sr;
+ }
+
+ std::unique_ptr<EnumInfo> makeEnumInfo( StringRef enumName, StringRef allValueNames, std::vector<int> const& values ) {
+ std::unique_ptr<EnumInfo> enumInfo( new EnumInfo );
+ enumInfo->m_name = enumName;
+ enumInfo->m_values.reserve( values.size() );
+
+ const auto valueNames = Catch::Detail::parseEnums( allValueNames );
+ assert( valueNames.size() == values.size() );
+ std::size_t i = 0;
+ for( auto value : values )
+ enumInfo->m_values.emplace_back(value, valueNames[i++]);
+
+ return enumInfo;
+ }
+
+ EnumInfo const& EnumValuesRegistry::registerEnum( StringRef enumName, StringRef allValueNames, std::vector<int> const& values ) {
+ m_enumInfos.push_back(makeEnumInfo(enumName, allValueNames, values));
+ return *m_enumInfos.back();
+ }
+
+ } // Detail
+} // Catch
+
+// end catch_enum_values_registry.cpp
+// start catch_errno_guard.cpp
+
+#include <cerrno>
+
+namespace Catch {
+ ErrnoGuard::ErrnoGuard():m_oldErrno(errno){}
+ ErrnoGuard::~ErrnoGuard() { errno = m_oldErrno; }
+}
+// end catch_errno_guard.cpp
+// start catch_exception_translator_registry.cpp
+
+// start catch_exception_translator_registry.h
+
+#include <vector>
+#include <string>
+#include <memory>
+
+namespace Catch {
+
+ class ExceptionTranslatorRegistry : public IExceptionTranslatorRegistry {
+ public:
+ ~ExceptionTranslatorRegistry();
+ virtual void registerTranslator( const IExceptionTranslator* translator );
+ std::string translateActiveException() const override;
+ std::string tryTranslators() const;
+
+ private:
+ std::vector<std::unique_ptr<IExceptionTranslator const>> m_translators;
+ };
+}
+
+// end catch_exception_translator_registry.h
+#ifdef __OBJC__
+#import "Foundation/Foundation.h"
+#endif
+
+namespace Catch {
+
+ ExceptionTranslatorRegistry::~ExceptionTranslatorRegistry() {
+ }
+
+ void ExceptionTranslatorRegistry::registerTranslator( const IExceptionTranslator* translator ) {
+ m_translators.push_back( std::unique_ptr<const IExceptionTranslator>( translator ) );
+ }
+
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ std::string ExceptionTranslatorRegistry::translateActiveException() const {
+ try {
+#ifdef __OBJC__
+ // In Objective-C try objective-c exceptions first
+ @try {
+ return tryTranslators();
+ }
+ @catch (NSException *exception) {
+ return Catch::Detail::stringify( [exception description] );
+ }
+#else
+ // Compiling a mixed mode project with MSVC means that CLR
+ // exceptions will be caught in (...) as well. However, these
+ // do not fill-in std::current_exception and thus lead to crash
+ // when attempting rethrow.
+ // /EHa switch also causes structured exceptions to be caught
+ // here, but they fill-in current_exception properly, so
+ // at worst the output should be a little weird, instead of
+ // causing a crash.
+ if (std::current_exception() == nullptr) {
+ return "Non C++ exception. Possibly a CLR exception.";
+ }
+ return tryTranslators();
+#endif
+ }
+ catch( TestFailureException& ) {
+ std::rethrow_exception(std::current_exception());
+ }
+ catch( std::exception& ex ) {
+ return ex.what();
+ }
+ catch( std::string& msg ) {
+ return msg;
+ }
+ catch( const char* msg ) {
+ return msg;
+ }
+ catch(...) {
+ return "Unknown exception";
+ }
+ }
+
+ std::string ExceptionTranslatorRegistry::tryTranslators() const {
+ if (m_translators.empty()) {
+ std::rethrow_exception(std::current_exception());
+ } else {
+ return m_translators[0]->translate(m_translators.begin() + 1, m_translators.end());
+ }
+ }
+
+#else // ^^ Exceptions are enabled // Exceptions are disabled vv
+ std::string ExceptionTranslatorRegistry::translateActiveException() const {
+ CATCH_INTERNAL_ERROR("Attempted to translate active exception under CATCH_CONFIG_DISABLE_EXCEPTIONS!");
+ }
+
+ std::string ExceptionTranslatorRegistry::tryTranslators() const {
+ CATCH_INTERNAL_ERROR("Attempted to use exception translators under CATCH_CONFIG_DISABLE_EXCEPTIONS!");
+ }
+#endif
+
+}
+// end catch_exception_translator_registry.cpp
+// start catch_fatal_condition.cpp
+
+#include <algorithm>
+
+#if !defined( CATCH_CONFIG_WINDOWS_SEH ) && !defined( CATCH_CONFIG_POSIX_SIGNALS )
+
+namespace Catch {
+
+ // If neither SEH nor signal handling is required, the handler impls
+ // do not have to do anything, and can be empty.
+ void FatalConditionHandler::engage_platform() {}
+ void FatalConditionHandler::disengage_platform() {}
+ FatalConditionHandler::FatalConditionHandler() = default;
+ FatalConditionHandler::~FatalConditionHandler() = default;
+
+} // end namespace Catch
+
+#endif // !CATCH_CONFIG_WINDOWS_SEH && !CATCH_CONFIG_POSIX_SIGNALS
+
+#if defined( CATCH_CONFIG_WINDOWS_SEH ) && defined( CATCH_CONFIG_POSIX_SIGNALS )
+#error "Inconsistent configuration: Windows' SEH handling and POSIX signals cannot be enabled at the same time"
+#endif // CATCH_CONFIG_WINDOWS_SEH && CATCH_CONFIG_POSIX_SIGNALS
+
+#if defined( CATCH_CONFIG_WINDOWS_SEH ) || defined( CATCH_CONFIG_POSIX_SIGNALS )
+
+namespace {
+ //! Signals fatal error message to the run context
+ void reportFatal( char const * const message ) {
+ Catch::getCurrentContext().getResultCapture()->handleFatalErrorCondition( message );
+ }
+
+ //! Minimal size Catch2 needs for its own fatal error handling.
+ //! Picked anecdotally, so it might not be sufficient on all
+ //! platforms, and for all configurations.
+ constexpr std::size_t minStackSizeForErrors = 32 * 1024;
+} // end unnamed namespace
+
+#endif // CATCH_CONFIG_WINDOWS_SEH || CATCH_CONFIG_POSIX_SIGNALS
+
+#if defined( CATCH_CONFIG_WINDOWS_SEH )
+
+namespace Catch {
+
+ struct SignalDefs { DWORD id; const char* name; };
+
+ // There is no 1-1 mapping between signals and windows exceptions.
+ // Windows can easily distinguish between SO and SigSegV,
+ // but SigInt, SigTerm, etc are handled differently.
+ static SignalDefs signalDefs[] = {
+ { static_cast<DWORD>(EXCEPTION_ILLEGAL_INSTRUCTION), "SIGILL - Illegal instruction signal" },
+ { static_cast<DWORD>(EXCEPTION_STACK_OVERFLOW), "SIGSEGV - Stack overflow" },
+ { static_cast<DWORD>(EXCEPTION_ACCESS_VIOLATION), "SIGSEGV - Segmentation violation signal" },
+ { static_cast<DWORD>(EXCEPTION_INT_DIVIDE_BY_ZERO), "Divide by zero error" },
+ };
+
+ static LONG CALLBACK handleVectoredException(PEXCEPTION_POINTERS ExceptionInfo) {
+ for (auto const& def : signalDefs) {
+ if (ExceptionInfo->ExceptionRecord->ExceptionCode == def.id) {
+ reportFatal(def.name);
+ }
+ }
+ // If its not an exception we care about, pass it along.
+ // This stops us from eating debugger breaks etc.
+ return EXCEPTION_CONTINUE_SEARCH;
+ }
+
+ // Since we do not support multiple instantiations, we put these
+ // into global variables and rely on cleaning them up in outlined
+ // constructors/destructors
+ static PVOID exceptionHandlerHandle = nullptr;
+
+ // For MSVC, we reserve part of the stack memory for handling
+ // memory overflow structured exception.
+ FatalConditionHandler::FatalConditionHandler() {
+ ULONG guaranteeSize = static_cast<ULONG>(minStackSizeForErrors);
+ if (!SetThreadStackGuarantee(&guaranteeSize)) {
+ // We do not want to fully error out, because needing
+ // the stack reserve should be rare enough anyway.
+ Catch::cerr()
+ << "Failed to reserve piece of stack."
+ << " Stack overflows will not be reported successfully.";
+ }
+ }
+
+ // We do not attempt to unset the stack guarantee, because
+ // Windows does not support lowering the stack size guarantee.
+ FatalConditionHandler::~FatalConditionHandler() = default;
+
+ void FatalConditionHandler::engage_platform() {
+ // Register as first handler in current chain
+ exceptionHandlerHandle = AddVectoredExceptionHandler(1, handleVectoredException);
+ if (!exceptionHandlerHandle) {
+ CATCH_RUNTIME_ERROR("Could not register vectored exception handler");
+ }
+ }
+
+ void FatalConditionHandler::disengage_platform() {
+ if (!RemoveVectoredExceptionHandler(exceptionHandlerHandle)) {
+ CATCH_RUNTIME_ERROR("Could not unregister vectored exception handler");
+ }
+ exceptionHandlerHandle = nullptr;
+ }
+
+} // end namespace Catch
+
+#endif // CATCH_CONFIG_WINDOWS_SEH
+
+#if defined( CATCH_CONFIG_POSIX_SIGNALS )
+
+#include <signal.h>
+
+namespace Catch {
+
+ struct SignalDefs {
+ int id;
+ const char* name;
+ };
+
+ static SignalDefs signalDefs[] = {
+ { SIGINT, "SIGINT - Terminal interrupt signal" },
+ { SIGILL, "SIGILL - Illegal instruction signal" },
+ { SIGFPE, "SIGFPE - Floating point error signal" },
+ { SIGSEGV, "SIGSEGV - Segmentation violation signal" },
+ { SIGTERM, "SIGTERM - Termination request signal" },
+ { SIGABRT, "SIGABRT - Abort (abnormal termination) signal" }
+ };
+
+// Older GCCs trigger -Wmissing-field-initializers for T foo = {}
+// which is zero initialization, but not explicit. We want to avoid
+// that.
+#if defined(__GNUC__)
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+#endif
+
+ static char* altStackMem = nullptr;
+ static std::size_t altStackSize = 0;
+ static stack_t oldSigStack{};
+ static struct sigaction oldSigActions[sizeof(signalDefs) / sizeof(SignalDefs)]{};
+
+ static void restorePreviousSignalHandlers() {
+ // We set signal handlers back to the previous ones. Hopefully
+ // nobody overwrote them in the meantime, and doesn't expect
+ // their signal handlers to live past ours given that they
+ // installed them after ours..
+ for (std::size_t i = 0; i < sizeof(signalDefs) / sizeof(SignalDefs); ++i) {
+ sigaction(signalDefs[i].id, &oldSigActions[i], nullptr);
+ }
+ // Return the old stack
+ sigaltstack(&oldSigStack, nullptr);
+ }
+
+ static void handleSignal( int sig ) {
+ char const * name = "<unknown signal>";
+ for (auto const& def : signalDefs) {
+ if (sig == def.id) {
+ name = def.name;
+ break;
+ }
+ }
+ // We need to restore previous signal handlers and let them do
+ // their thing, so that the users can have the debugger break
+ // when a signal is raised, and so on.
+ restorePreviousSignalHandlers();
+ reportFatal( name );
+ raise( sig );
+ }
+
+ FatalConditionHandler::FatalConditionHandler() {
+ assert(!altStackMem && "Cannot initialize POSIX signal handler when one already exists");
+ if (altStackSize == 0) {
+ altStackSize = std::max(static_cast<size_t>(SIGSTKSZ), minStackSizeForErrors);
+ }
+ altStackMem = new char[altStackSize]();
+ }
+
+ FatalConditionHandler::~FatalConditionHandler() {
+ delete[] altStackMem;
+ // We signal that another instance can be constructed by zeroing
+ // out the pointer.
+ altStackMem = nullptr;
+ }
+
+ void FatalConditionHandler::engage_platform() {
+ stack_t sigStack;
+ sigStack.ss_sp = altStackMem;
+ sigStack.ss_size = altStackSize;
+ sigStack.ss_flags = 0;
+ sigaltstack(&sigStack, &oldSigStack);
+ struct sigaction sa = { };
+
+ sa.sa_handler = handleSignal;
+ sa.sa_flags = SA_ONSTACK;
+ for (std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i) {
+ sigaction(signalDefs[i].id, &sa, &oldSigActions[i]);
+ }
+ }
+
+#if defined(__GNUC__)
+# pragma GCC diagnostic pop
+#endif
+
+ void FatalConditionHandler::disengage_platform() {
+ restorePreviousSignalHandlers();
+ }
+
+} // end namespace Catch
+
+#endif // CATCH_CONFIG_POSIX_SIGNALS
+// end catch_fatal_condition.cpp
+// start catch_generators.cpp
+
+#include <limits>
+#include <set>
+
+namespace Catch {
+
+IGeneratorTracker::~IGeneratorTracker() {}
+
+const char* GeneratorException::what() const noexcept {
+ return m_msg;
+}
+
+namespace Generators {
+
+ GeneratorUntypedBase::~GeneratorUntypedBase() {}
+
+ auto acquireGeneratorTracker( StringRef generatorName, SourceLineInfo const& lineInfo ) -> IGeneratorTracker& {
+ return getResultCapture().acquireGeneratorTracker( generatorName, lineInfo );
+ }
+
+} // namespace Generators
+} // namespace Catch
+// end catch_generators.cpp
+// start catch_interfaces_capture.cpp
+
+namespace Catch {
+ IResultCapture::~IResultCapture() = default;
+}
+// end catch_interfaces_capture.cpp
+// start catch_interfaces_config.cpp
+
+namespace Catch {
+ IConfig::~IConfig() = default;
+}
+// end catch_interfaces_config.cpp
+// start catch_interfaces_exception.cpp
+
+namespace Catch {
+ IExceptionTranslator::~IExceptionTranslator() = default;
+ IExceptionTranslatorRegistry::~IExceptionTranslatorRegistry() = default;
+}
+// end catch_interfaces_exception.cpp
+// start catch_interfaces_registry_hub.cpp
+
+namespace Catch {
+ IRegistryHub::~IRegistryHub() = default;
+ IMutableRegistryHub::~IMutableRegistryHub() = default;
+}
+// end catch_interfaces_registry_hub.cpp
+// start catch_interfaces_reporter.cpp
+
+// start catch_reporter_listening.h
+
+namespace Catch {
+
+ class ListeningReporter : public IStreamingReporter {
+ using Reporters = std::vector<IStreamingReporterPtr>;
+ Reporters m_listeners;
+ IStreamingReporterPtr m_reporter = nullptr;
+ ReporterPreferences m_preferences;
+
+ public:
+ ListeningReporter();
+
+ void addListener( IStreamingReporterPtr&& listener );
+ void addReporter( IStreamingReporterPtr&& reporter );
+
+ public: // IStreamingReporter
+
+ ReporterPreferences getPreferences() const override;
+
+ void noMatchingTestCases( std::string const& spec ) override;
+
+ void reportInvalidArguments(std::string const&arg) override;
+
+ static std::set<Verbosity> getSupportedVerbosities();
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void benchmarkPreparing(std::string const& name) override;
+ void benchmarkStarting( BenchmarkInfo const& benchmarkInfo ) override;
+ void benchmarkEnded( BenchmarkStats<> const& benchmarkStats ) override;
+ void benchmarkFailed(std::string const&) override;
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ void testRunStarting( TestRunInfo const& testRunInfo ) override;
+ void testGroupStarting( GroupInfo const& groupInfo ) override;
+ void testCaseStarting( TestCaseInfo const& testInfo ) override;
+ void sectionStarting( SectionInfo const& sectionInfo ) override;
+ void assertionStarting( AssertionInfo const& assertionInfo ) override;
+
+ // The return value indicates if the messages buffer should be cleared:
+ bool assertionEnded( AssertionStats const& assertionStats ) override;
+ void sectionEnded( SectionStats const& sectionStats ) override;
+ void testCaseEnded( TestCaseStats const& testCaseStats ) override;
+ void testGroupEnded( TestGroupStats const& testGroupStats ) override;
+ void testRunEnded( TestRunStats const& testRunStats ) override;
+
+ void skipTest( TestCaseInfo const& testInfo ) override;
+ bool isMulti() const override;
+
+ };
+
+} // end namespace Catch
+
+// end catch_reporter_listening.h
+namespace Catch {
+
+ ReporterConfig::ReporterConfig( IConfigPtr const& _fullConfig )
+ : m_stream( &_fullConfig->stream() ), m_fullConfig( _fullConfig ) {}
+
+ ReporterConfig::ReporterConfig( IConfigPtr const& _fullConfig, std::ostream& _stream )
+ : m_stream( &_stream ), m_fullConfig( _fullConfig ) {}
+
+ std::ostream& ReporterConfig::stream() const { return *m_stream; }
+ IConfigPtr ReporterConfig::fullConfig() const { return m_fullConfig; }
+
+ TestRunInfo::TestRunInfo( std::string const& _name ) : name( _name ) {}
+
+ GroupInfo::GroupInfo( std::string const& _name,
+ std::size_t _groupIndex,
+ std::size_t _groupsCount )
+ : name( _name ),
+ groupIndex( _groupIndex ),
+ groupsCounts( _groupsCount )
+ {}
+
+ AssertionStats::AssertionStats( AssertionResult const& _assertionResult,
+ std::vector<MessageInfo> const& _infoMessages,
+ Totals const& _totals )
+ : assertionResult( _assertionResult ),
+ infoMessages( _infoMessages ),
+ totals( _totals )
+ {
+ assertionResult.m_resultData.lazyExpression.m_transientExpression = _assertionResult.m_resultData.lazyExpression.m_transientExpression;
+
+ if( assertionResult.hasMessage() ) {
+ // Copy message into messages list.
+ // !TBD This should have been done earlier, somewhere
+ MessageBuilder builder( assertionResult.getTestMacroName(), assertionResult.getSourceInfo(), assertionResult.getResultType() );
+ builder << assertionResult.getMessage();
+ builder.m_info.message = builder.m_stream.str();
+
+ infoMessages.push_back( builder.m_info );
+ }
+ }
+
+ AssertionStats::~AssertionStats() = default;
+
+ SectionStats::SectionStats( SectionInfo const& _sectionInfo,
+ Counts const& _assertions,
+ double _durationInSeconds,
+ bool _missingAssertions )
+ : sectionInfo( _sectionInfo ),
+ assertions( _assertions ),
+ durationInSeconds( _durationInSeconds ),
+ missingAssertions( _missingAssertions )
+ {}
+
+ SectionStats::~SectionStats() = default;
+
+ TestCaseStats::TestCaseStats( TestCaseInfo const& _testInfo,
+ Totals const& _totals,
+ std::string const& _stdOut,
+ std::string const& _stdErr,
+ bool _aborting )
+ : testInfo( _testInfo ),
+ totals( _totals ),
+ stdOut( _stdOut ),
+ stdErr( _stdErr ),
+ aborting( _aborting )
+ {}
+
+ TestCaseStats::~TestCaseStats() = default;
+
+ TestGroupStats::TestGroupStats( GroupInfo const& _groupInfo,
+ Totals const& _totals,
+ bool _aborting )
+ : groupInfo( _groupInfo ),
+ totals( _totals ),
+ aborting( _aborting )
+ {}
+
+ TestGroupStats::TestGroupStats( GroupInfo const& _groupInfo )
+ : groupInfo( _groupInfo ),
+ aborting( false )
+ {}
+
+ TestGroupStats::~TestGroupStats() = default;
+
+ TestRunStats::TestRunStats( TestRunInfo const& _runInfo,
+ Totals const& _totals,
+ bool _aborting )
+ : runInfo( _runInfo ),
+ totals( _totals ),
+ aborting( _aborting )
+ {}
+
+ TestRunStats::~TestRunStats() = default;
+
+ void IStreamingReporter::fatalErrorEncountered( StringRef ) {}
+ bool IStreamingReporter::isMulti() const { return false; }
+
+ IReporterFactory::~IReporterFactory() = default;
+ IReporterRegistry::~IReporterRegistry() = default;
+
+} // end namespace Catch
+// end catch_interfaces_reporter.cpp
+// start catch_interfaces_runner.cpp
+
+namespace Catch {
+ IRunner::~IRunner() = default;
+}
+// end catch_interfaces_runner.cpp
+// start catch_interfaces_testcase.cpp
+
+namespace Catch {
+ ITestInvoker::~ITestInvoker() = default;
+ ITestCaseRegistry::~ITestCaseRegistry() = default;
+}
+// end catch_interfaces_testcase.cpp
+// start catch_leak_detector.cpp
+
+#ifdef CATCH_CONFIG_WINDOWS_CRTDBG
+#include <crtdbg.h>
+
+namespace Catch {
+
+ LeakDetector::LeakDetector() {
+ int flag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
+ flag |= _CRTDBG_LEAK_CHECK_DF;
+ flag |= _CRTDBG_ALLOC_MEM_DF;
+ _CrtSetDbgFlag(flag);
+ _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
+ _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
+ // Change this to leaking allocation's number to break there
+ _CrtSetBreakAlloc(-1);
+ }
+}
+
+#else
+
+ Catch::LeakDetector::LeakDetector() {}
+
+#endif
+
+Catch::LeakDetector::~LeakDetector() {
+ Catch::cleanUp();
+}
+// end catch_leak_detector.cpp
+// start catch_list.cpp
+
+// start catch_list.h
+
+#include <set>
+
+namespace Catch {
+
+ std::size_t listTests( Config const& config );
+
+ std::size_t listTestsNamesOnly( Config const& config );
+
+ struct TagInfo {
+ void add( std::string const& spelling );
+ std::string all() const;
+
+ std::set<std::string> spellings;
+ std::size_t count = 0;
+ };
+
+ std::size_t listTags( Config const& config );
+
+ std::size_t listReporters();
+
+ Option<std::size_t> list( std::shared_ptr<Config> const& config );
+
+} // end namespace Catch
+
+// end catch_list.h
+// start catch_text.h
+
+namespace Catch {
+ using namespace clara::TextFlow;
+}
+
+// end catch_text.h
+#include <limits>
+#include <algorithm>
+#include <iomanip>
+
+namespace Catch {
+
+ std::size_t listTests( Config const& config ) {
+ TestSpec const& testSpec = config.testSpec();
+ if( config.hasTestFilters() )
+ Catch::cout() << "Matching test cases:\n";
+ else {
+ Catch::cout() << "All available test cases:\n";
+ }
+
+ auto matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config );
+ for( auto const& testCaseInfo : matchedTestCases ) {
+ Colour::Code colour = testCaseInfo.isHidden()
+ ? Colour::SecondaryText
+ : Colour::None;
+ Colour colourGuard( colour );
+
+ Catch::cout() << Column( testCaseInfo.name ).initialIndent( 2 ).indent( 4 ) << "\n";
+ if( config.verbosity() >= Verbosity::High ) {
+ Catch::cout() << Column( Catch::Detail::stringify( testCaseInfo.lineInfo ) ).indent(4) << std::endl;
+ std::string description = testCaseInfo.description;
+ if( description.empty() )
+ description = "(NO DESCRIPTION)";
+ Catch::cout() << Column( description ).indent(4) << std::endl;
+ }
+ if( !testCaseInfo.tags.empty() )
+ Catch::cout() << Column( testCaseInfo.tagsAsString() ).indent( 6 ) << "\n";
+ }
+
+ if( !config.hasTestFilters() )
+ Catch::cout() << pluralise( matchedTestCases.size(), "test case" ) << '\n' << std::endl;
+ else
+ Catch::cout() << pluralise( matchedTestCases.size(), "matching test case" ) << '\n' << std::endl;
+ return matchedTestCases.size();
+ }
+
+ std::size_t listTestsNamesOnly( Config const& config ) {
+ TestSpec const& testSpec = config.testSpec();
+ std::size_t matchedTests = 0;
+ std::vector<TestCase> matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config );
+ for( auto const& testCaseInfo : matchedTestCases ) {
+ matchedTests++;
+ if( startsWith( testCaseInfo.name, '#' ) )
+ Catch::cout() << '"' << testCaseInfo.name << '"';
+ else
+ Catch::cout() << testCaseInfo.name;
+ if ( config.verbosity() >= Verbosity::High )
+ Catch::cout() << "\t@" << testCaseInfo.lineInfo;
+ Catch::cout() << std::endl;
+ }
+ return matchedTests;
+ }
+
+ void TagInfo::add( std::string const& spelling ) {
+ ++count;
+ spellings.insert( spelling );
+ }
+
+ std::string TagInfo::all() const {
+ size_t size = 0;
+ for (auto const& spelling : spellings) {
+ // Add 2 for the brackes
+ size += spelling.size() + 2;
+ }
+
+ std::string out; out.reserve(size);
+ for (auto const& spelling : spellings) {
+ out += '[';
+ out += spelling;
+ out += ']';
+ }
+ return out;
+ }
+
+ std::size_t listTags( Config const& config ) {
+ TestSpec const& testSpec = config.testSpec();
+ if( config.hasTestFilters() )
+ Catch::cout() << "Tags for matching test cases:\n";
+ else {
+ Catch::cout() << "All available tags:\n";
+ }
+
+ std::map<std::string, TagInfo> tagCounts;
+
+ std::vector<TestCase> matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config );
+ for( auto const& testCase : matchedTestCases ) {
+ for( auto const& tagName : testCase.getTestCaseInfo().tags ) {
+ std::string lcaseTagName = toLower( tagName );
+ auto countIt = tagCounts.find( lcaseTagName );
+ if( countIt == tagCounts.end() )
+ countIt = tagCounts.insert( std::make_pair( lcaseTagName, TagInfo() ) ).first;
+ countIt->second.add( tagName );
+ }
+ }
+
+ for( auto const& tagCount : tagCounts ) {
+ ReusableStringStream rss;
+ rss << " " << std::setw(2) << tagCount.second.count << " ";
+ auto str = rss.str();
+ auto wrapper = Column( tagCount.second.all() )
+ .initialIndent( 0 )
+ .indent( str.size() )
+ .width( CATCH_CONFIG_CONSOLE_WIDTH-10 );
+ Catch::cout() << str << wrapper << '\n';
+ }
+ Catch::cout() << pluralise( tagCounts.size(), "tag" ) << '\n' << std::endl;
+ return tagCounts.size();
+ }
+
+ std::size_t listReporters() {
+ Catch::cout() << "Available reporters:\n";
+ IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories();
+ std::size_t maxNameLen = 0;
+ for( auto const& factoryKvp : factories )
+ maxNameLen = (std::max)( maxNameLen, factoryKvp.first.size() );
+
+ for( auto const& factoryKvp : factories ) {
+ Catch::cout()
+ << Column( factoryKvp.first + ":" )
+ .indent(2)
+ .width( 5+maxNameLen )
+ + Column( factoryKvp.second->getDescription() )
+ .initialIndent(0)
+ .indent(2)
+ .width( CATCH_CONFIG_CONSOLE_WIDTH - maxNameLen-8 )
+ << "\n";
+ }
+ Catch::cout() << std::endl;
+ return factories.size();
+ }
+
+ Option<std::size_t> list( std::shared_ptr<Config> const& config ) {
+ Option<std::size_t> listedCount;
+ getCurrentMutableContext().setConfig( config );
+ if( config->listTests() )
+ listedCount = listedCount.valueOr(0) + listTests( *config );
+ if( config->listTestNamesOnly() )
+ listedCount = listedCount.valueOr(0) + listTestsNamesOnly( *config );
+ if( config->listTags() )
+ listedCount = listedCount.valueOr(0) + listTags( *config );
+ if( config->listReporters() )
+ listedCount = listedCount.valueOr(0) + listReporters();
+ return listedCount;
+ }
+
+} // end namespace Catch
+// end catch_list.cpp
+// start catch_matchers.cpp
+
+namespace Catch {
+namespace Matchers {
+ namespace Impl {
+
+ std::string MatcherUntypedBase::toString() const {
+ if( m_cachedToString.empty() )
+ m_cachedToString = describe();
+ return m_cachedToString;
+ }
+
+ MatcherUntypedBase::~MatcherUntypedBase() = default;
+
+ } // namespace Impl
+} // namespace Matchers
+
+using namespace Matchers;
+using Matchers::Impl::MatcherBase;
+
+} // namespace Catch
+// end catch_matchers.cpp
+// start catch_matchers_exception.cpp
+
+namespace Catch {
+namespace Matchers {
+namespace Exception {
+
+bool ExceptionMessageMatcher::match(std::exception const& ex) const {
+ return ex.what() == m_message;
+}
+
+std::string ExceptionMessageMatcher::describe() const {
+ return "exception message matches \"" + m_message + "\"";
+}
+
+}
+Exception::ExceptionMessageMatcher Message(std::string const& message) {
+ return Exception::ExceptionMessageMatcher(message);
+}
+
+// namespace Exception
+} // namespace Matchers
+} // namespace Catch
+// end catch_matchers_exception.cpp
+// start catch_matchers_floating.cpp
+
+// start catch_polyfills.hpp
+
+namespace Catch {
+ bool isnan(float f);
+ bool isnan(double d);
+}
+
+// end catch_polyfills.hpp
+// start catch_to_string.hpp
+
+#include <string>
+
+namespace Catch {
+ template <typename T>
+ std::string to_string(T const& t) {
+#if defined(CATCH_CONFIG_CPP11_TO_STRING)
+ return std::to_string(t);
+#else
+ ReusableStringStream rss;
+ rss << t;
+ return rss.str();
+#endif
+ }
+} // end namespace Catch
+
+// end catch_to_string.hpp
+#include <algorithm>
+#include <cmath>
+#include <cstdlib>
+#include <cstdint>
+#include <cstring>
+#include <sstream>
+#include <type_traits>
+#include <iomanip>
+#include <limits>
+
+namespace Catch {
+namespace {
+
+ int32_t convert(float f) {
+ static_assert(sizeof(float) == sizeof(int32_t), "Important ULP matcher assumption violated");
+ int32_t i;
+ std::memcpy(&i, &f, sizeof(f));
+ return i;
+ }
+
+ int64_t convert(double d) {
+ static_assert(sizeof(double) == sizeof(int64_t), "Important ULP matcher assumption violated");
+ int64_t i;
+ std::memcpy(&i, &d, sizeof(d));
+ return i;
+ }
+
+ template <typename FP>
+ bool almostEqualUlps(FP lhs, FP rhs, uint64_t maxUlpDiff) {
+ // Comparison with NaN should always be false.
+ // This way we can rule it out before getting into the ugly details
+ if (Catch::isnan(lhs) || Catch::isnan(rhs)) {
+ return false;
+ }
+
+ auto lc = convert(lhs);
+ auto rc = convert(rhs);
+
+ if ((lc < 0) != (rc < 0)) {
+ // Potentially we can have +0 and -0
+ return lhs == rhs;
+ }
+
+ // static cast as a workaround for IBM XLC
+ auto ulpDiff = std::abs(static_cast<FP>(lc - rc));
+ return static_cast<uint64_t>(ulpDiff) <= maxUlpDiff;
+ }
+
+#if defined(CATCH_CONFIG_GLOBAL_NEXTAFTER)
+
+ float nextafter(float x, float y) {
+ return ::nextafterf(x, y);
+ }
+
+ double nextafter(double x, double y) {
+ return ::nextafter(x, y);
+ }
+
+#endif // ^^^ CATCH_CONFIG_GLOBAL_NEXTAFTER ^^^
+
+template <typename FP>
+FP step(FP start, FP direction, uint64_t steps) {
+ for (uint64_t i = 0; i < steps; ++i) {
+#if defined(CATCH_CONFIG_GLOBAL_NEXTAFTER)
+ start = Catch::nextafter(start, direction);
+#else
+ start = std::nextafter(start, direction);
+#endif
+ }
+ return start;
+}
+
+// Performs equivalent check of std::fabs(lhs - rhs) <= margin
+// But without the subtraction to allow for INFINITY in comparison
+bool marginComparison(double lhs, double rhs, double margin) {
+ return (lhs + margin >= rhs) && (rhs + margin >= lhs);
+}
+
+template <typename FloatingPoint>
+void write(std::ostream& out, FloatingPoint num) {
+ out << std::scientific
+ << std::setprecision(std::numeric_limits<FloatingPoint>::max_digits10 - 1)
+ << num;
+}
+
+} // end anonymous namespace
+
+namespace Matchers {
+namespace Floating {
+
+ enum class FloatingPointKind : uint8_t {
+ Float,
+ Double
+ };
+
+ WithinAbsMatcher::WithinAbsMatcher(double target, double margin)
+ :m_target{ target }, m_margin{ margin } {
+ CATCH_ENFORCE(margin >= 0, "Invalid margin: " << margin << '.'
+ << " Margin has to be non-negative.");
+ }
+
+ // Performs equivalent check of std::fabs(lhs - rhs) <= margin
+ // But without the subtraction to allow for INFINITY in comparison
+ bool WithinAbsMatcher::match(double const& matchee) const {
+ return (matchee + m_margin >= m_target) && (m_target + m_margin >= matchee);
+ }
+
+ std::string WithinAbsMatcher::describe() const {
+ return "is within " + ::Catch::Detail::stringify(m_margin) + " of " + ::Catch::Detail::stringify(m_target);
+ }
+
+ WithinUlpsMatcher::WithinUlpsMatcher(double target, uint64_t ulps, FloatingPointKind baseType)
+ :m_target{ target }, m_ulps{ ulps }, m_type{ baseType } {
+ CATCH_ENFORCE(m_type == FloatingPointKind::Double
+ || m_ulps < (std::numeric_limits<uint32_t>::max)(),
+ "Provided ULP is impossibly large for a float comparison.");
+ }
+
+#if defined(__clang__)
+#pragma clang diagnostic push
+// Clang <3.5 reports on the default branch in the switch below
+#pragma clang diagnostic ignored "-Wunreachable-code"
+#endif
+
+ bool WithinUlpsMatcher::match(double const& matchee) const {
+ switch (m_type) {
+ case FloatingPointKind::Float:
+ return almostEqualUlps<float>(static_cast<float>(matchee), static_cast<float>(m_target), m_ulps);
+ case FloatingPointKind::Double:
+ return almostEqualUlps<double>(matchee, m_target, m_ulps);
+ default:
+ CATCH_INTERNAL_ERROR( "Unknown FloatingPointKind value" );
+ }
+ }
+
+#if defined(__clang__)
+#pragma clang diagnostic pop
+#endif
+
+ std::string WithinUlpsMatcher::describe() const {
+ std::stringstream ret;
+
+ ret << "is within " << m_ulps << " ULPs of ";
+
+ if (m_type == FloatingPointKind::Float) {
+ write(ret, static_cast<float>(m_target));
+ ret << 'f';
+ } else {
+ write(ret, m_target);
+ }
+
+ ret << " ([";
+ if (m_type == FloatingPointKind::Double) {
+ write(ret, step(m_target, static_cast<double>(-INFINITY), m_ulps));
+ ret << ", ";
+ write(ret, step(m_target, static_cast<double>( INFINITY), m_ulps));
+ } else {
+ // We have to cast INFINITY to float because of MinGW, see #1782
+ write(ret, step(static_cast<float>(m_target), static_cast<float>(-INFINITY), m_ulps));
+ ret << ", ";
+ write(ret, step(static_cast<float>(m_target), static_cast<float>( INFINITY), m_ulps));
+ }
+ ret << "])";
+
+ return ret.str();
+ }
+
+ WithinRelMatcher::WithinRelMatcher(double target, double epsilon):
+ m_target(target),
+ m_epsilon(epsilon){
+ CATCH_ENFORCE(m_epsilon >= 0., "Relative comparison with epsilon < 0 does not make sense.");
+ CATCH_ENFORCE(m_epsilon < 1., "Relative comparison with epsilon >= 1 does not make sense.");
+ }
+
+ bool WithinRelMatcher::match(double const& matchee) const {
+ const auto relMargin = m_epsilon * (std::max)(std::fabs(matchee), std::fabs(m_target));
+ return marginComparison(matchee, m_target,
+ std::isinf(relMargin)? 0 : relMargin);
+ }
+
+ std::string WithinRelMatcher::describe() const {
+ Catch::ReusableStringStream sstr;
+ sstr << "and " << m_target << " are within " << m_epsilon * 100. << "% of each other";
+ return sstr.str();
+ }
+
+}// namespace Floating
+
+Floating::WithinUlpsMatcher WithinULP(double target, uint64_t maxUlpDiff) {
+ return Floating::WithinUlpsMatcher(target, maxUlpDiff, Floating::FloatingPointKind::Double);
+}
+
+Floating::WithinUlpsMatcher WithinULP(float target, uint64_t maxUlpDiff) {
+ return Floating::WithinUlpsMatcher(target, maxUlpDiff, Floating::FloatingPointKind::Float);
+}
+
+Floating::WithinAbsMatcher WithinAbs(double target, double margin) {
+ return Floating::WithinAbsMatcher(target, margin);
+}
+
+Floating::WithinRelMatcher WithinRel(double target, double eps) {
+ return Floating::WithinRelMatcher(target, eps);
+}
+
+Floating::WithinRelMatcher WithinRel(double target) {
+ return Floating::WithinRelMatcher(target, std::numeric_limits<double>::epsilon() * 100);
+}
+
+Floating::WithinRelMatcher WithinRel(float target, float eps) {
+ return Floating::WithinRelMatcher(target, eps);
+}
+
+Floating::WithinRelMatcher WithinRel(float target) {
+ return Floating::WithinRelMatcher(target, std::numeric_limits<float>::epsilon() * 100);
+}
+
+} // namespace Matchers
+} // namespace Catch
+// end catch_matchers_floating.cpp
+// start catch_matchers_generic.cpp
+
+std::string Catch::Matchers::Generic::Detail::finalizeDescription(const std::string& desc) {
+ if (desc.empty()) {
+ return "matches undescribed predicate";
+ } else {
+ return "matches predicate: \"" + desc + '"';
+ }
+}
+// end catch_matchers_generic.cpp
+// start catch_matchers_string.cpp
+
+#include <regex>
+
+namespace Catch {
+namespace Matchers {
+
+ namespace StdString {
+
+ CasedString::CasedString( std::string const& str, CaseSensitive::Choice caseSensitivity )
+ : m_caseSensitivity( caseSensitivity ),
+ m_str( adjustString( str ) )
+ {}
+ std::string CasedString::adjustString( std::string const& str ) const {
+ return m_caseSensitivity == CaseSensitive::No
+ ? toLower( str )
+ : str;
+ }
+ std::string CasedString::caseSensitivitySuffix() const {
+ return m_caseSensitivity == CaseSensitive::No
+ ? " (case insensitive)"
+ : std::string();
+ }
+
+ StringMatcherBase::StringMatcherBase( std::string const& operation, CasedString const& comparator )
+ : m_comparator( comparator ),
+ m_operation( operation ) {
+ }
+
+ std::string StringMatcherBase::describe() const {
+ std::string description;
+ description.reserve(5 + m_operation.size() + m_comparator.m_str.size() +
+ m_comparator.caseSensitivitySuffix().size());
+ description += m_operation;
+ description += ": \"";
+ description += m_comparator.m_str;
+ description += "\"";
+ description += m_comparator.caseSensitivitySuffix();
+ return description;
+ }
+
+ EqualsMatcher::EqualsMatcher( CasedString const& comparator ) : StringMatcherBase( "equals", comparator ) {}
+
+ bool EqualsMatcher::match( std::string const& source ) const {
+ return m_comparator.adjustString( source ) == m_comparator.m_str;
+ }
+
+ ContainsMatcher::ContainsMatcher( CasedString const& comparator ) : StringMatcherBase( "contains", comparator ) {}
+
+ bool ContainsMatcher::match( std::string const& source ) const {
+ return contains( m_comparator.adjustString( source ), m_comparator.m_str );
+ }
+
+ StartsWithMatcher::StartsWithMatcher( CasedString const& comparator ) : StringMatcherBase( "starts with", comparator ) {}
+
+ bool StartsWithMatcher::match( std::string const& source ) const {
+ return startsWith( m_comparator.adjustString( source ), m_comparator.m_str );
+ }
+
+ EndsWithMatcher::EndsWithMatcher( CasedString const& comparator ) : StringMatcherBase( "ends with", comparator ) {}
+
+ bool EndsWithMatcher::match( std::string const& source ) const {
+ return endsWith( m_comparator.adjustString( source ), m_comparator.m_str );
+ }
+
+ RegexMatcher::RegexMatcher(std::string regex, CaseSensitive::Choice caseSensitivity): m_regex(std::move(regex)), m_caseSensitivity(caseSensitivity) {}
+
+ bool RegexMatcher::match(std::string const& matchee) const {
+ auto flags = std::regex::ECMAScript; // ECMAScript is the default syntax option anyway
+ if (m_caseSensitivity == CaseSensitive::Choice::No) {
+ flags |= std::regex::icase;
+ }
+ auto reg = std::regex(m_regex, flags);
+ return std::regex_match(matchee, reg);
+ }
+
+ std::string RegexMatcher::describe() const {
+ return "matches " + ::Catch::Detail::stringify(m_regex) + ((m_caseSensitivity == CaseSensitive::Choice::Yes)? " case sensitively" : " case insensitively");
+ }
+
+ } // namespace StdString
+
+ StdString::EqualsMatcher Equals( std::string const& str, CaseSensitive::Choice caseSensitivity ) {
+ return StdString::EqualsMatcher( StdString::CasedString( str, caseSensitivity) );
+ }
+ StdString::ContainsMatcher Contains( std::string const& str, CaseSensitive::Choice caseSensitivity ) {
+ return StdString::ContainsMatcher( StdString::CasedString( str, caseSensitivity) );
+ }
+ StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSensitive::Choice caseSensitivity ) {
+ return StdString::EndsWithMatcher( StdString::CasedString( str, caseSensitivity) );
+ }
+ StdString::StartsWithMatcher StartsWith( std::string const& str, CaseSensitive::Choice caseSensitivity ) {
+ return StdString::StartsWithMatcher( StdString::CasedString( str, caseSensitivity) );
+ }
+
+ StdString::RegexMatcher Matches(std::string const& regex, CaseSensitive::Choice caseSensitivity) {
+ return StdString::RegexMatcher(regex, caseSensitivity);
+ }
+
+} // namespace Matchers
+} // namespace Catch
+// end catch_matchers_string.cpp
+// start catch_message.cpp
+
+// start catch_uncaught_exceptions.h
+
+namespace Catch {
+ bool uncaught_exceptions();
+} // end namespace Catch
+
+// end catch_uncaught_exceptions.h
+#include <cassert>
+#include <stack>
+
+namespace Catch {
+
+ MessageInfo::MessageInfo( StringRef const& _macroName,
+ SourceLineInfo const& _lineInfo,
+ ResultWas::OfType _type )
+ : macroName( _macroName ),
+ lineInfo( _lineInfo ),
+ type( _type ),
+ sequence( ++globalCount )
+ {}
+
+ bool MessageInfo::operator==( MessageInfo const& other ) const {
+ return sequence == other.sequence;
+ }
+
+ bool MessageInfo::operator<( MessageInfo const& other ) const {
+ return sequence < other.sequence;
+ }
+
+ // This may need protecting if threading support is added
+ unsigned int MessageInfo::globalCount = 0;
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ Catch::MessageBuilder::MessageBuilder( StringRef const& macroName,
+ SourceLineInfo const& lineInfo,
+ ResultWas::OfType type )
+ :m_info(macroName, lineInfo, type) {}
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ ScopedMessage::ScopedMessage( MessageBuilder const& builder )
+ : m_info( builder.m_info ), m_moved()
+ {
+ m_info.message = builder.m_stream.str();
+ getResultCapture().pushScopedMessage( m_info );
+ }
+
+ ScopedMessage::ScopedMessage( ScopedMessage&& old )
+ : m_info( old.m_info ), m_moved()
+ {
+ old.m_moved = true;
+ }
+
+ ScopedMessage::~ScopedMessage() {
+ if ( !uncaught_exceptions() && !m_moved ){
+ getResultCapture().popScopedMessage(m_info);
+ }
+ }
+
+ Capturer::Capturer( StringRef macroName, SourceLineInfo const& lineInfo, ResultWas::OfType resultType, StringRef names ) {
+ auto trimmed = [&] (size_t start, size_t end) {
+ while (names[start] == ',' || isspace(static_cast<unsigned char>(names[start]))) {
+ ++start;
+ }
+ while (names[end] == ',' || isspace(static_cast<unsigned char>(names[end]))) {
+ --end;
+ }
+ return names.substr(start, end - start + 1);
+ };
+ auto skipq = [&] (size_t start, char quote) {
+ for (auto i = start + 1; i < names.size() ; ++i) {
+ if (names[i] == quote)
+ return i;
+ if (names[i] == '\\')
+ ++i;
+ }
+ CATCH_INTERNAL_ERROR("CAPTURE parsing encountered unmatched quote");
+ };
+
+ size_t start = 0;
+ std::stack<char> openings;
+ for (size_t pos = 0; pos < names.size(); ++pos) {
+ char c = names[pos];
+ switch (c) {
+ case '[':
+ case '{':
+ case '(':
+ // It is basically impossible to disambiguate between
+ // comparison and start of template args in this context
+// case '<':
+ openings.push(c);
+ break;
+ case ']':
+ case '}':
+ case ')':
+// case '>':
+ openings.pop();
+ break;
+ case '"':
+ case '\'':
+ pos = skipq(pos, c);
+ break;
+ case ',':
+ if (start != pos && openings.empty()) {
+ m_messages.emplace_back(macroName, lineInfo, resultType);
+ m_messages.back().message = static_cast<std::string>(trimmed(start, pos));
+ m_messages.back().message += " := ";
+ start = pos;
+ }
+ }
+ }
+ assert(openings.empty() && "Mismatched openings");
+ m_messages.emplace_back(macroName, lineInfo, resultType);
+ m_messages.back().message = static_cast<std::string>(trimmed(start, names.size() - 1));
+ m_messages.back().message += " := ";
+ }
+ Capturer::~Capturer() {
+ if ( !uncaught_exceptions() ){
+ assert( m_captured == m_messages.size() );
+ for( size_t i = 0; i < m_captured; ++i )
+ m_resultCapture.popScopedMessage( m_messages[i] );
+ }
+ }
+
+ void Capturer::captureValue( size_t index, std::string const& value ) {
+ assert( index < m_messages.size() );
+ m_messages[index].message += value;
+ m_resultCapture.pushScopedMessage( m_messages[index] );
+ m_captured++;
+ }
+
+} // end namespace Catch
+// end catch_message.cpp
+// start catch_output_redirect.cpp
+
+// start catch_output_redirect.h
+#ifndef TWOBLUECUBES_CATCH_OUTPUT_REDIRECT_H
+#define TWOBLUECUBES_CATCH_OUTPUT_REDIRECT_H
+
+#include <cstdio>
+#include <iosfwd>
+#include <string>
+
+namespace Catch {
+
+ class RedirectedStream {
+ std::ostream& m_originalStream;
+ std::ostream& m_redirectionStream;
+ std::streambuf* m_prevBuf;
+
+ public:
+ RedirectedStream( std::ostream& originalStream, std::ostream& redirectionStream );
+ ~RedirectedStream();
+ };
+
+ class RedirectedStdOut {
+ ReusableStringStream m_rss;
+ RedirectedStream m_cout;
+ public:
+ RedirectedStdOut();
+ auto str() const -> std::string;
+ };
+
+ // StdErr has two constituent streams in C++, std::cerr and std::clog
+ // This means that we need to redirect 2 streams into 1 to keep proper
+ // order of writes
+ class RedirectedStdErr {
+ ReusableStringStream m_rss;
+ RedirectedStream m_cerr;
+ RedirectedStream m_clog;
+ public:
+ RedirectedStdErr();
+ auto str() const -> std::string;
+ };
+
+ class RedirectedStreams {
+ public:
+ RedirectedStreams(RedirectedStreams const&) = delete;
+ RedirectedStreams& operator=(RedirectedStreams const&) = delete;
+ RedirectedStreams(RedirectedStreams&&) = delete;
+ RedirectedStreams& operator=(RedirectedStreams&&) = delete;
+
+ RedirectedStreams(std::string& redirectedCout, std::string& redirectedCerr);
+ ~RedirectedStreams();
+ private:
+ std::string& m_redirectedCout;
+ std::string& m_redirectedCerr;
+ RedirectedStdOut m_redirectedStdOut;
+ RedirectedStdErr m_redirectedStdErr;
+ };
+
+#if defined(CATCH_CONFIG_NEW_CAPTURE)
+
+ // Windows's implementation of std::tmpfile is terrible (it tries
+ // to create a file inside system folder, thus requiring elevated
+ // privileges for the binary), so we have to use tmpnam(_s) and
+ // create the file ourselves there.
+ class TempFile {
+ public:
+ TempFile(TempFile const&) = delete;
+ TempFile& operator=(TempFile const&) = delete;
+ TempFile(TempFile&&) = delete;
+ TempFile& operator=(TempFile&&) = delete;
+
+ TempFile();
+ ~TempFile();
+
+ std::FILE* getFile();
+ std::string getContents();
+
+ private:
+ std::FILE* m_file = nullptr;
+ #if defined(_MSC_VER)
+ char m_buffer[L_tmpnam] = { 0 };
+ #endif
+ };
+
+ class OutputRedirect {
+ public:
+ OutputRedirect(OutputRedirect const&) = delete;
+ OutputRedirect& operator=(OutputRedirect const&) = delete;
+ OutputRedirect(OutputRedirect&&) = delete;
+ OutputRedirect& operator=(OutputRedirect&&) = delete;
+
+ OutputRedirect(std::string& stdout_dest, std::string& stderr_dest);
+ ~OutputRedirect();
+
+ private:
+ int m_originalStdout = -1;
+ int m_originalStderr = -1;
+ TempFile m_stdoutFile;
+ TempFile m_stderrFile;
+ std::string& m_stdoutDest;
+ std::string& m_stderrDest;
+ };
+
+#endif
+
+} // end namespace Catch
+
+#endif // TWOBLUECUBES_CATCH_OUTPUT_REDIRECT_H
+// end catch_output_redirect.h
+#include <cstdio>
+#include <cstring>
+#include <fstream>
+#include <sstream>
+#include <stdexcept>
+
+#if defined(CATCH_CONFIG_NEW_CAPTURE)
+ #if defined(_MSC_VER)
+ #include <io.h> //_dup and _dup2
+ #define dup _dup
+ #define dup2 _dup2
+ #define fileno _fileno
+ #else
+ #include <unistd.h> // dup and dup2
+ #endif
+#endif
+
+namespace Catch {
+
+ RedirectedStream::RedirectedStream( std::ostream& originalStream, std::ostream& redirectionStream )
+ : m_originalStream( originalStream ),
+ m_redirectionStream( redirectionStream ),
+ m_prevBuf( m_originalStream.rdbuf() )
+ {
+ m_originalStream.rdbuf( m_redirectionStream.rdbuf() );
+ }
+
+ RedirectedStream::~RedirectedStream() {
+ m_originalStream.rdbuf( m_prevBuf );
+ }
+
+ RedirectedStdOut::RedirectedStdOut() : m_cout( Catch::cout(), m_rss.get() ) {}
+ auto RedirectedStdOut::str() const -> std::string { return m_rss.str(); }
+
+ RedirectedStdErr::RedirectedStdErr()
+ : m_cerr( Catch::cerr(), m_rss.get() ),
+ m_clog( Catch::clog(), m_rss.get() )
+ {}
+ auto RedirectedStdErr::str() const -> std::string { return m_rss.str(); }
+
+ RedirectedStreams::RedirectedStreams(std::string& redirectedCout, std::string& redirectedCerr)
+ : m_redirectedCout(redirectedCout),
+ m_redirectedCerr(redirectedCerr)
+ {}
+
+ RedirectedStreams::~RedirectedStreams() {
+ m_redirectedCout += m_redirectedStdOut.str();
+ m_redirectedCerr += m_redirectedStdErr.str();
+ }
+
+#if defined(CATCH_CONFIG_NEW_CAPTURE)
+
+#if defined(_MSC_VER)
+ TempFile::TempFile() {
+ if (tmpnam_s(m_buffer)) {
+ CATCH_RUNTIME_ERROR("Could not get a temp filename");
+ }
+ if (fopen_s(&m_file, m_buffer, "w+")) {
+ char buffer[100];
+ if (strerror_s(buffer, errno)) {
+ CATCH_RUNTIME_ERROR("Could not translate errno to a string");
+ }
+ CATCH_RUNTIME_ERROR("Could not open the temp file: '" << m_buffer << "' because: " << buffer);
+ }
+ }
+#else
+ TempFile::TempFile() {
+ m_file = std::tmpfile();
+ if (!m_file) {
+ CATCH_RUNTIME_ERROR("Could not create a temp file.");
+ }
+ }
+
+#endif
+
+ TempFile::~TempFile() {
+ // TBD: What to do about errors here?
+ std::fclose(m_file);
+ // We manually create the file on Windows only, on Linux
+ // it will be autodeleted
+#if defined(_MSC_VER)
+ std::remove(m_buffer);
+#endif
+ }
+
+ FILE* TempFile::getFile() {
+ return m_file;
+ }
+
+ std::string TempFile::getContents() {
+ std::stringstream sstr;
+ char buffer[100] = {};
+ std::rewind(m_file);
+ while (std::fgets(buffer, sizeof(buffer), m_file)) {
+ sstr << buffer;
+ }
+ return sstr.str();
+ }
+
+ OutputRedirect::OutputRedirect(std::string& stdout_dest, std::string& stderr_dest) :
+ m_originalStdout(dup(1)),
+ m_originalStderr(dup(2)),
+ m_stdoutDest(stdout_dest),
+ m_stderrDest(stderr_dest) {
+ dup2(fileno(m_stdoutFile.getFile()), 1);
+ dup2(fileno(m_stderrFile.getFile()), 2);
+ }
+
+ OutputRedirect::~OutputRedirect() {
+ Catch::cout() << std::flush;
+ fflush(stdout);
+ // Since we support overriding these streams, we flush cerr
+ // even though std::cerr is unbuffered
+ Catch::cerr() << std::flush;
+ Catch::clog() << std::flush;
+ fflush(stderr);
+
+ dup2(m_originalStdout, 1);
+ dup2(m_originalStderr, 2);
+
+ m_stdoutDest += m_stdoutFile.getContents();
+ m_stderrDest += m_stderrFile.getContents();
+ }
+
+#endif // CATCH_CONFIG_NEW_CAPTURE
+
+} // namespace Catch
+
+#if defined(CATCH_CONFIG_NEW_CAPTURE)
+ #if defined(_MSC_VER)
+ #undef dup
+ #undef dup2
+ #undef fileno
+ #endif
+#endif
+// end catch_output_redirect.cpp
+// start catch_polyfills.cpp
+
+#include <cmath>
+
+namespace Catch {
+
+#if !defined(CATCH_CONFIG_POLYFILL_ISNAN)
+ bool isnan(float f) {
+ return std::isnan(f);
+ }
+ bool isnan(double d) {
+ return std::isnan(d);
+ }
+#else
+ // For now we only use this for embarcadero
+ bool isnan(float f) {
+ return std::_isnan(f);
+ }
+ bool isnan(double d) {
+ return std::_isnan(d);
+ }
+#endif
+
+} // end namespace Catch
+// end catch_polyfills.cpp
+// start catch_random_number_generator.cpp
+
+namespace Catch {
+
+namespace {
+
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4146) // we negate uint32 during the rotate
+#endif
+ // Safe rotr implementation thanks to John Regehr
+ uint32_t rotate_right(uint32_t val, uint32_t count) {
+ const uint32_t mask = 31;
+ count &= mask;
+ return (val >> count) | (val << (-count & mask));
+ }
+
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+}
+
+ SimplePcg32::SimplePcg32(result_type seed_) {
+ seed(seed_);
+ }
+
+ void SimplePcg32::seed(result_type seed_) {
+ m_state = 0;
+ (*this)();
+ m_state += seed_;
+ (*this)();
+ }
+
+ void SimplePcg32::discard(uint64_t skip) {
+ // We could implement this to run in O(log n) steps, but this
+ // should suffice for our use case.
+ for (uint64_t s = 0; s < skip; ++s) {
+ static_cast<void>((*this)());
+ }
+ }
+
+ SimplePcg32::result_type SimplePcg32::operator()() {
+ // prepare the output value
+ const uint32_t xorshifted = static_cast<uint32_t>(((m_state >> 18u) ^ m_state) >> 27u);
+ const auto output = rotate_right(xorshifted, m_state >> 59u);
+
+ // advance state
+ m_state = m_state * 6364136223846793005ULL + s_inc;
+
+ return output;
+ }
+
+ bool operator==(SimplePcg32 const& lhs, SimplePcg32 const& rhs) {
+ return lhs.m_state == rhs.m_state;
+ }
+
+ bool operator!=(SimplePcg32 const& lhs, SimplePcg32 const& rhs) {
+ return lhs.m_state != rhs.m_state;
+ }
+}
+// end catch_random_number_generator.cpp
+// start catch_registry_hub.cpp
+
+// start catch_test_case_registry_impl.h
+
+#include <vector>
+#include <set>
+#include <algorithm>
+#include <ios>
+
+namespace Catch {
+
+ class TestCase;
+ struct IConfig;
+
+ std::vector<TestCase> sortTests( IConfig const& config, std::vector<TestCase> const& unsortedTestCases );
+
+ bool isThrowSafe( TestCase const& testCase, IConfig const& config );
+ bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config );
+
+ void enforceNoDuplicateTestCases( std::vector<TestCase> const& functions );
+
+ std::vector<TestCase> filterTests( std::vector<TestCase> const& testCases, TestSpec const& testSpec, IConfig const& config );
+ std::vector<TestCase> const& getAllTestCasesSorted( IConfig const& config );
+
+ class TestRegistry : public ITestCaseRegistry {
+ public:
+ virtual ~TestRegistry() = default;
+
+ virtual void registerTest( TestCase const& testCase );
+
+ std::vector<TestCase> const& getAllTests() const override;
+ std::vector<TestCase> const& getAllTestsSorted( IConfig const& config ) const override;
+
+ private:
+ std::vector<TestCase> m_functions;
+ mutable RunTests::InWhatOrder m_currentSortOrder = RunTests::InDeclarationOrder;
+ mutable std::vector<TestCase> m_sortedFunctions;
+ std::size_t m_unnamedCount = 0;
+ std::ios_base::Init m_ostreamInit; // Forces cout/ cerr to be initialised
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ class TestInvokerAsFunction : public ITestInvoker {
+ void(*m_testAsFunction)();
+ public:
+ TestInvokerAsFunction( void(*testAsFunction)() ) noexcept;
+
+ void invoke() const override;
+ };
+
+ std::string extractClassName( StringRef const& classOrQualifiedMethodName );
+
+ ///////////////////////////////////////////////////////////////////////////
+
+} // end namespace Catch
+
+// end catch_test_case_registry_impl.h
+// start catch_reporter_registry.h
+
+#include <map>
+
+namespace Catch {
+
+ class ReporterRegistry : public IReporterRegistry {
+
+ public:
+
+ ~ReporterRegistry() override;
+
+ IStreamingReporterPtr create( std::string const& name, IConfigPtr const& config ) const override;
+
+ void registerReporter( std::string const& name, IReporterFactoryPtr const& factory );
+ void registerListener( IReporterFactoryPtr const& factory );
+
+ FactoryMap const& getFactories() const override;
+ Listeners const& getListeners() const override;
+
+ private:
+ FactoryMap m_factories;
+ Listeners m_listeners;
+ };
+}
+
+// end catch_reporter_registry.h
+// start catch_tag_alias_registry.h
+
+// start catch_tag_alias.h
+
+#include <string>
+
+namespace Catch {
+
+ struct TagAlias {
+ TagAlias(std::string const& _tag, SourceLineInfo _lineInfo);
+
+ std::string tag;
+ SourceLineInfo lineInfo;
+ };
+
+} // end namespace Catch
+
+// end catch_tag_alias.h
+#include <map>
+
+namespace Catch {
+
+ class TagAliasRegistry : public ITagAliasRegistry {
+ public:
+ ~TagAliasRegistry() override;
+ TagAlias const* find( std::string const& alias ) const override;
+ std::string expandAliases( std::string const& unexpandedTestSpec ) const override;
+ void add( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo );
+
+ private:
+ std::map<std::string, TagAlias> m_registry;
+ };
+
+} // end namespace Catch
+
+// end catch_tag_alias_registry.h
+// start catch_startup_exception_registry.h
+
+#include <vector>
+#include <exception>
+
+namespace Catch {
+
+ class StartupExceptionRegistry {
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ public:
+ void add(std::exception_ptr const& exception) noexcept;
+ std::vector<std::exception_ptr> const& getExceptions() const noexcept;
+ private:
+ std::vector<std::exception_ptr> m_exceptions;
+#endif
+ };
+
+} // end namespace Catch
+
+// end catch_startup_exception_registry.h
+// start catch_singletons.hpp
+
+namespace Catch {
+
+ struct ISingleton {
+ virtual ~ISingleton();
+ };
+
+ void addSingleton( ISingleton* singleton );
+ void cleanupSingletons();
+
+ template<typename SingletonImplT, typename InterfaceT = SingletonImplT, typename MutableInterfaceT = InterfaceT>
+ class Singleton : SingletonImplT, public ISingleton {
+
+ static auto getInternal() -> Singleton* {
+ static Singleton* s_instance = nullptr;
+ if( !s_instance ) {
+ s_instance = new Singleton;
+ addSingleton( s_instance );
+ }
+ return s_instance;
+ }
+
+ public:
+ static auto get() -> InterfaceT const& {
+ return *getInternal();
+ }
+ static auto getMutable() -> MutableInterfaceT& {
+ return *getInternal();
+ }
+ };
+
+} // namespace Catch
+
+// end catch_singletons.hpp
+namespace Catch {
+
+ namespace {
+
+ class RegistryHub : public IRegistryHub, public IMutableRegistryHub,
+ private NonCopyable {
+
+ public: // IRegistryHub
+ RegistryHub() = default;
+ IReporterRegistry const& getReporterRegistry() const override {
+ return m_reporterRegistry;
+ }
+ ITestCaseRegistry const& getTestCaseRegistry() const override {
+ return m_testCaseRegistry;
+ }
+ IExceptionTranslatorRegistry const& getExceptionTranslatorRegistry() const override {
+ return m_exceptionTranslatorRegistry;
+ }
+ ITagAliasRegistry const& getTagAliasRegistry() const override {
+ return m_tagAliasRegistry;
+ }
+ StartupExceptionRegistry const& getStartupExceptionRegistry() const override {
+ return m_exceptionRegistry;
+ }
+
+ public: // IMutableRegistryHub
+ void registerReporter( std::string const& name, IReporterFactoryPtr const& factory ) override {
+ m_reporterRegistry.registerReporter( name, factory );
+ }
+ void registerListener( IReporterFactoryPtr const& factory ) override {
+ m_reporterRegistry.registerListener( factory );
+ }
+ void registerTest( TestCase const& testInfo ) override {
+ m_testCaseRegistry.registerTest( testInfo );
+ }
+ void registerTranslator( const IExceptionTranslator* translator ) override {
+ m_exceptionTranslatorRegistry.registerTranslator( translator );
+ }
+ void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) override {
+ m_tagAliasRegistry.add( alias, tag, lineInfo );
+ }
+ void registerStartupException() noexcept override {
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ m_exceptionRegistry.add(std::current_exception());
+#else
+ CATCH_INTERNAL_ERROR("Attempted to register active exception under CATCH_CONFIG_DISABLE_EXCEPTIONS!");
+#endif
+ }
+ IMutableEnumValuesRegistry& getMutableEnumValuesRegistry() override {
+ return m_enumValuesRegistry;
+ }
+
+ private:
+ TestRegistry m_testCaseRegistry;
+ ReporterRegistry m_reporterRegistry;
+ ExceptionTranslatorRegistry m_exceptionTranslatorRegistry;
+ TagAliasRegistry m_tagAliasRegistry;
+ StartupExceptionRegistry m_exceptionRegistry;
+ Detail::EnumValuesRegistry m_enumValuesRegistry;
+ };
+ }
+
+ using RegistryHubSingleton = Singleton<RegistryHub, IRegistryHub, IMutableRegistryHub>;
+
+ IRegistryHub const& getRegistryHub() {
+ return RegistryHubSingleton::get();
+ }
+ IMutableRegistryHub& getMutableRegistryHub() {
+ return RegistryHubSingleton::getMutable();
+ }
+ void cleanUp() {
+ cleanupSingletons();
+ cleanUpContext();
+ }
+ std::string translateActiveException() {
+ return getRegistryHub().getExceptionTranslatorRegistry().translateActiveException();
+ }
+
+} // end namespace Catch
+// end catch_registry_hub.cpp
+// start catch_reporter_registry.cpp
+
+namespace Catch {
+
+ ReporterRegistry::~ReporterRegistry() = default;
+
+ IStreamingReporterPtr ReporterRegistry::create( std::string const& name, IConfigPtr const& config ) const {
+ auto it = m_factories.find( name );
+ if( it == m_factories.end() )
+ return nullptr;
+ return it->second->create( ReporterConfig( config ) );
+ }
+
+ void ReporterRegistry::registerReporter( std::string const& name, IReporterFactoryPtr const& factory ) {
+ m_factories.emplace(name, factory);
+ }
+ void ReporterRegistry::registerListener( IReporterFactoryPtr const& factory ) {
+ m_listeners.push_back( factory );
+ }
+
+ IReporterRegistry::FactoryMap const& ReporterRegistry::getFactories() const {
+ return m_factories;
+ }
+ IReporterRegistry::Listeners const& ReporterRegistry::getListeners() const {
+ return m_listeners;
+ }
+
+}
+// end catch_reporter_registry.cpp
+// start catch_result_type.cpp
+
+namespace Catch {
+
+ bool isOk( ResultWas::OfType resultType ) {
+ return ( resultType & ResultWas::FailureBit ) == 0;
+ }
+ bool isJustInfo( int flags ) {
+ return flags == ResultWas::Info;
+ }
+
+ ResultDisposition::Flags operator | ( ResultDisposition::Flags lhs, ResultDisposition::Flags rhs ) {
+ return static_cast<ResultDisposition::Flags>( static_cast<int>( lhs ) | static_cast<int>( rhs ) );
+ }
+
+ bool shouldContinueOnFailure( int flags ) { return ( flags & ResultDisposition::ContinueOnFailure ) != 0; }
+ bool shouldSuppressFailure( int flags ) { return ( flags & ResultDisposition::SuppressFail ) != 0; }
+
+} // end namespace Catch
+// end catch_result_type.cpp
+// start catch_run_context.cpp
+
+#include <cassert>
+#include <algorithm>
+#include <sstream>
+
+namespace Catch {
+
+ namespace Generators {
+ struct GeneratorTracker : TestCaseTracking::TrackerBase, IGeneratorTracker {
+ GeneratorBasePtr m_generator;
+
+ GeneratorTracker( TestCaseTracking::NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent )
+ : TrackerBase( nameAndLocation, ctx, parent )
+ {}
+ ~GeneratorTracker();
+
+ static GeneratorTracker& acquire( TrackerContext& ctx, TestCaseTracking::NameAndLocation const& nameAndLocation ) {
+ std::shared_ptr<GeneratorTracker> tracker;
+
+ ITracker& currentTracker = ctx.currentTracker();
+ // Under specific circumstances, the generator we want
+ // to acquire is also the current tracker. If this is
+ // the case, we have to avoid looking through current
+ // tracker's children, and instead return the current
+ // tracker.
+ // A case where this check is important is e.g.
+ // for (int i = 0; i < 5; ++i) {
+ // int n = GENERATE(1, 2);
+ // }
+ //
+ // without it, the code above creates 5 nested generators.
+ if (currentTracker.nameAndLocation() == nameAndLocation) {
+ auto thisTracker = currentTracker.parent().findChild(nameAndLocation);
+ assert(thisTracker);
+ assert(thisTracker->isGeneratorTracker());
+ tracker = std::static_pointer_cast<GeneratorTracker>(thisTracker);
+ } else if ( TestCaseTracking::ITrackerPtr childTracker = currentTracker.findChild( nameAndLocation ) ) {
+ assert( childTracker );
+ assert( childTracker->isGeneratorTracker() );
+ tracker = std::static_pointer_cast<GeneratorTracker>( childTracker );
+ } else {
+ tracker = std::make_shared<GeneratorTracker>( nameAndLocation, ctx, &currentTracker );
+ currentTracker.addChild( tracker );
+ }
+
+ if( !tracker->isComplete() ) {
+ tracker->open();
+ }
+
+ return *tracker;
+ }
+
+ // TrackerBase interface
+ bool isGeneratorTracker() const override { return true; }
+ auto hasGenerator() const -> bool override {
+ return !!m_generator;
+ }
+ void close() override {
+ TrackerBase::close();
+ // If a generator has a child (it is followed by a section)
+ // and none of its children have started, then we must wait
+ // until later to start consuming its values.
+ // This catches cases where `GENERATE` is placed between two
+ // `SECTION`s.
+ // **The check for m_children.empty cannot be removed**.
+ // doing so would break `GENERATE` _not_ followed by `SECTION`s.
+ const bool should_wait_for_child = [&]() {
+ // No children -> nobody to wait for
+ if ( m_children.empty() ) {
+ return false;
+ }
+ // If at least one child started executing, don't wait
+ if ( std::find_if(
+ m_children.begin(),
+ m_children.end(),
+ []( TestCaseTracking::ITrackerPtr tracker ) {
+ return tracker->hasStarted();
+ } ) != m_children.end() ) {
+ return false;
+ }
+
+ // No children have started. We need to check if they _can_
+ // start, and thus we should wait for them, or they cannot
+ // start (due to filters), and we shouldn't wait for them
+ auto* parent = m_parent;
+ // This is safe: there is always at least one section
+ // tracker in a test case tracking tree
+ while ( !parent->isSectionTracker() ) {
+ parent = &( parent->parent() );
+ }
+ assert( parent &&
+ "Missing root (test case) level section" );
+
+ auto const& parentSection =
+ static_cast<SectionTracker&>( *parent );
+ auto const& filters = parentSection.getFilters();
+ // No filters -> no restrictions on running sections
+ if ( filters.empty() ) {
+ return true;
+ }
+
+ for ( auto const& child : m_children ) {
+ if ( child->isSectionTracker() &&
+ std::find( filters.begin(),
+ filters.end(),
+ static_cast<SectionTracker&>( *child )
+ .trimmedName() ) !=
+ filters.end() ) {
+ return true;
+ }
+ }
+ return false;
+ }();
+
+ // This check is a bit tricky, because m_generator->next()
+ // has a side-effect, where it consumes generator's current
+ // value, but we do not want to invoke the side-effect if
+ // this generator is still waiting for any child to start.
+ if ( should_wait_for_child ||
+ ( m_runState == CompletedSuccessfully &&
+ m_generator->next() ) ) {
+ m_children.clear();
+ m_runState = Executing;
+ }
+ }
+
+ // IGeneratorTracker interface
+ auto getGenerator() const -> GeneratorBasePtr const& override {
+ return m_generator;
+ }
+ void setGenerator( GeneratorBasePtr&& generator ) override {
+ m_generator = std::move( generator );
+ }
+ };
+ GeneratorTracker::~GeneratorTracker() {}
+ }
+
+ RunContext::RunContext(IConfigPtr const& _config, IStreamingReporterPtr&& reporter)
+ : m_runInfo(_config->name()),
+ m_context(getCurrentMutableContext()),
+ m_config(_config),
+ m_reporter(std::move(reporter)),
+ m_lastAssertionInfo{ StringRef(), SourceLineInfo("",0), StringRef(), ResultDisposition::Normal },
+ m_includeSuccessfulResults( m_config->includeSuccessfulResults() || m_reporter->getPreferences().shouldReportAllAssertions )
+ {
+ m_context.setRunner(this);
+ m_context.setConfig(m_config);
+ m_context.setResultCapture(this);
+ m_reporter->testRunStarting(m_runInfo);
+ }
+
+ RunContext::~RunContext() {
+ m_reporter->testRunEnded(TestRunStats(m_runInfo, m_totals, aborting()));
+ }
+
+ void RunContext::testGroupStarting(std::string const& testSpec, std::size_t groupIndex, std::size_t groupsCount) {
+ m_reporter->testGroupStarting(GroupInfo(testSpec, groupIndex, groupsCount));
+ }
+
+ void RunContext::testGroupEnded(std::string const& testSpec, Totals const& totals, std::size_t groupIndex, std::size_t groupsCount) {
+ m_reporter->testGroupEnded(TestGroupStats(GroupInfo(testSpec, groupIndex, groupsCount), totals, aborting()));
+ }
+
+ Totals RunContext::runTest(TestCase const& testCase) {
+ Totals prevTotals = m_totals;
+
+ std::string redirectedCout;
+ std::string redirectedCerr;
+
+ auto const& testInfo = testCase.getTestCaseInfo();
+
+ m_reporter->testCaseStarting(testInfo);
+
+ m_activeTestCase = &testCase;
+
+ ITracker& rootTracker = m_trackerContext.startRun();
+ assert(rootTracker.isSectionTracker());
+ static_cast<SectionTracker&>(rootTracker).addInitialFilters(m_config->getSectionsToRun());
+ do {
+ m_trackerContext.startCycle();
+ m_testCaseTracker = &SectionTracker::acquire(m_trackerContext, TestCaseTracking::NameAndLocation(testInfo.name, testInfo.lineInfo));
+ runCurrentTest(redirectedCout, redirectedCerr);
+ } while (!m_testCaseTracker->isSuccessfullyCompleted() && !aborting());
+
+ Totals deltaTotals = m_totals.delta(prevTotals);
+ if (testInfo.expectedToFail() && deltaTotals.testCases.passed > 0) {
+ deltaTotals.assertions.failed++;
+ deltaTotals.testCases.passed--;
+ deltaTotals.testCases.failed++;
+ }
+ m_totals.testCases += deltaTotals.testCases;
+ m_reporter->testCaseEnded(TestCaseStats(testInfo,
+ deltaTotals,
+ redirectedCout,
+ redirectedCerr,
+ aborting()));
+
+ m_activeTestCase = nullptr;
+ m_testCaseTracker = nullptr;
+
+ return deltaTotals;
+ }
+
+ IConfigPtr RunContext::config() const {
+ return m_config;
+ }
+
+ IStreamingReporter& RunContext::reporter() const {
+ return *m_reporter;
+ }
+
+ void RunContext::assertionEnded(AssertionResult const & result) {
+ if (result.getResultType() == ResultWas::Ok) {
+ m_totals.assertions.passed++;
+ m_lastAssertionPassed = true;
+ } else if (!result.isOk()) {
+ m_lastAssertionPassed = false;
+ if( m_activeTestCase->getTestCaseInfo().okToFail() )
+ m_totals.assertions.failedButOk++;
+ else
+ m_totals.assertions.failed++;
+ }
+ else {
+ m_lastAssertionPassed = true;
+ }
+
+ // We have no use for the return value (whether messages should be cleared), because messages were made scoped
+ // and should be let to clear themselves out.
+ static_cast<void>(m_reporter->assertionEnded(AssertionStats(result, m_messages, m_totals)));
+
+ if (result.getResultType() != ResultWas::Warning)
+ m_messageScopes.clear();
+
+ // Reset working state
+ resetAssertionInfo();
+ m_lastResult = result;
+ }
+ void RunContext::resetAssertionInfo() {
+ m_lastAssertionInfo.macroName = StringRef();
+ m_lastAssertionInfo.capturedExpression = "{Unknown expression after the reported line}"_sr;
+ }
+
+ bool RunContext::sectionStarted(SectionInfo const & sectionInfo, Counts & assertions) {
+ ITracker& sectionTracker = SectionTracker::acquire(m_trackerContext, TestCaseTracking::NameAndLocation(sectionInfo.name, sectionInfo.lineInfo));
+ if (!sectionTracker.isOpen())
+ return false;
+ m_activeSections.push_back(&sectionTracker);
+
+ m_lastAssertionInfo.lineInfo = sectionInfo.lineInfo;
+
+ m_reporter->sectionStarting(sectionInfo);
+
+ assertions = m_totals.assertions;
+
+ return true;
+ }
+ auto RunContext::acquireGeneratorTracker( StringRef generatorName, SourceLineInfo const& lineInfo ) -> IGeneratorTracker& {
+ using namespace Generators;
+ GeneratorTracker& tracker = GeneratorTracker::acquire(m_trackerContext,
+ TestCaseTracking::NameAndLocation( static_cast<std::string>(generatorName), lineInfo ) );
+ m_lastAssertionInfo.lineInfo = lineInfo;
+ return tracker;
+ }
+
+ bool RunContext::testForMissingAssertions(Counts& assertions) {
+ if (assertions.total() != 0)
+ return false;
+ if (!m_config->warnAboutMissingAssertions())
+ return false;
+ if (m_trackerContext.currentTracker().hasChildren())
+ return false;
+ m_totals.assertions.failed++;
+ assertions.failed++;
+ return true;
+ }
+
+ void RunContext::sectionEnded(SectionEndInfo const & endInfo) {
+ Counts assertions = m_totals.assertions - endInfo.prevAssertions;
+ bool missingAssertions = testForMissingAssertions(assertions);
+
+ if (!m_activeSections.empty()) {
+ m_activeSections.back()->close();
+ m_activeSections.pop_back();
+ }
+
+ m_reporter->sectionEnded(SectionStats(endInfo.sectionInfo, assertions, endInfo.durationInSeconds, missingAssertions));
+ m_messages.clear();
+ m_messageScopes.clear();
+ }
+
+ void RunContext::sectionEndedEarly(SectionEndInfo const & endInfo) {
+ if (m_unfinishedSections.empty())
+ m_activeSections.back()->fail();
+ else
+ m_activeSections.back()->close();
+ m_activeSections.pop_back();
+
+ m_unfinishedSections.push_back(endInfo);
+ }
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void RunContext::benchmarkPreparing(std::string const& name) {
+ m_reporter->benchmarkPreparing(name);
+ }
+ void RunContext::benchmarkStarting( BenchmarkInfo const& info ) {
+ m_reporter->benchmarkStarting( info );
+ }
+ void RunContext::benchmarkEnded( BenchmarkStats<> const& stats ) {
+ m_reporter->benchmarkEnded( stats );
+ }
+ void RunContext::benchmarkFailed(std::string const & error) {
+ m_reporter->benchmarkFailed(error);
+ }
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ void RunContext::pushScopedMessage(MessageInfo const & message) {
+ m_messages.push_back(message);
+ }
+
+ void RunContext::popScopedMessage(MessageInfo const & message) {
+ m_messages.erase(std::remove(m_messages.begin(), m_messages.end(), message), m_messages.end());
+ }
+
+ void RunContext::emplaceUnscopedMessage( MessageBuilder const& builder ) {
+ m_messageScopes.emplace_back( builder );
+ }
+
+ std::string RunContext::getCurrentTestName() const {
+ return m_activeTestCase
+ ? m_activeTestCase->getTestCaseInfo().name
+ : std::string();
+ }
+
+ const AssertionResult * RunContext::getLastResult() const {
+ return &(*m_lastResult);
+ }
+
+ void RunContext::exceptionEarlyReported() {
+ m_shouldReportUnexpected = false;
+ }
+
+ void RunContext::handleFatalErrorCondition( StringRef message ) {
+ // First notify reporter that bad things happened
+ m_reporter->fatalErrorEncountered(message);
+
+ // Don't rebuild the result -- the stringification itself can cause more fatal errors
+ // Instead, fake a result data.
+ AssertionResultData tempResult( ResultWas::FatalErrorCondition, { false } );
+ tempResult.message = static_cast<std::string>(message);
+ AssertionResult result(m_lastAssertionInfo, tempResult);
+
+ assertionEnded(result);
+
+ handleUnfinishedSections();
+
+ // Recreate section for test case (as we will lose the one that was in scope)
+ auto const& testCaseInfo = m_activeTestCase->getTestCaseInfo();
+ SectionInfo testCaseSection(testCaseInfo.lineInfo, testCaseInfo.name);
+
+ Counts assertions;
+ assertions.failed = 1;
+ SectionStats testCaseSectionStats(testCaseSection, assertions, 0, false);
+ m_reporter->sectionEnded(testCaseSectionStats);
+
+ auto const& testInfo = m_activeTestCase->getTestCaseInfo();
+
+ Totals deltaTotals;
+ deltaTotals.testCases.failed = 1;
+ deltaTotals.assertions.failed = 1;
+ m_reporter->testCaseEnded(TestCaseStats(testInfo,
+ deltaTotals,
+ std::string(),
+ std::string(),
+ false));
+ m_totals.testCases.failed++;
+ testGroupEnded(std::string(), m_totals, 1, 1);
+ m_reporter->testRunEnded(TestRunStats(m_runInfo, m_totals, false));
+ }
+
+ bool RunContext::lastAssertionPassed() {
+ return m_lastAssertionPassed;
+ }
+
+ void RunContext::assertionPassed() {
+ m_lastAssertionPassed = true;
+ ++m_totals.assertions.passed;
+ resetAssertionInfo();
+ m_messageScopes.clear();
+ }
+
+ bool RunContext::aborting() const {
+ return m_totals.assertions.failed >= static_cast<std::size_t>(m_config->abortAfter());
+ }
+
+ void RunContext::runCurrentTest(std::string & redirectedCout, std::string & redirectedCerr) {
+ auto const& testCaseInfo = m_activeTestCase->getTestCaseInfo();
+ SectionInfo testCaseSection(testCaseInfo.lineInfo, testCaseInfo.name);
+ m_reporter->sectionStarting(testCaseSection);
+ Counts prevAssertions = m_totals.assertions;
+ double duration = 0;
+ m_shouldReportUnexpected = true;
+ m_lastAssertionInfo = { "TEST_CASE"_sr, testCaseInfo.lineInfo, StringRef(), ResultDisposition::Normal };
+
+ seedRng(*m_config);
+
+ Timer timer;
+ CATCH_TRY {
+ if (m_reporter->getPreferences().shouldRedirectStdOut) {
+#if !defined(CATCH_CONFIG_EXPERIMENTAL_REDIRECT)
+ RedirectedStreams redirectedStreams(redirectedCout, redirectedCerr);
+
+ timer.start();
+ invokeActiveTestCase();
+#else
+ OutputRedirect r(redirectedCout, redirectedCerr);
+ timer.start();
+ invokeActiveTestCase();
+#endif
+ } else {
+ timer.start();
+ invokeActiveTestCase();
+ }
+ duration = timer.getElapsedSeconds();
+ } CATCH_CATCH_ANON (TestFailureException&) {
+ // This just means the test was aborted due to failure
+ } CATCH_CATCH_ALL {
+ // Under CATCH_CONFIG_FAST_COMPILE, unexpected exceptions under REQUIRE assertions
+ // are reported without translation at the point of origin.
+ if( m_shouldReportUnexpected ) {
+ AssertionReaction dummyReaction;
+ handleUnexpectedInflightException( m_lastAssertionInfo, translateActiveException(), dummyReaction );
+ }
+ }
+ Counts assertions = m_totals.assertions - prevAssertions;
+ bool missingAssertions = testForMissingAssertions(assertions);
+
+ m_testCaseTracker->close();
+ handleUnfinishedSections();
+ m_messages.clear();
+ m_messageScopes.clear();
+
+ SectionStats testCaseSectionStats(testCaseSection, assertions, duration, missingAssertions);
+ m_reporter->sectionEnded(testCaseSectionStats);
+ }
+
+ void RunContext::invokeActiveTestCase() {
+ FatalConditionHandlerGuard _(&m_fatalConditionhandler);
+ m_activeTestCase->invoke();
+ }
+
+ void RunContext::handleUnfinishedSections() {
+ // If sections ended prematurely due to an exception we stored their
+ // infos here so we can tear them down outside the unwind process.
+ for (auto it = m_unfinishedSections.rbegin(),
+ itEnd = m_unfinishedSections.rend();
+ it != itEnd;
+ ++it)
+ sectionEnded(*it);
+ m_unfinishedSections.clear();
+ }
+
+ void RunContext::handleExpr(
+ AssertionInfo const& info,
+ ITransientExpression const& expr,
+ AssertionReaction& reaction
+ ) {
+ m_reporter->assertionStarting( info );
+
+ bool negated = isFalseTest( info.resultDisposition );
+ bool result = expr.getResult() != negated;
+
+ if( result ) {
+ if (!m_includeSuccessfulResults) {
+ assertionPassed();
+ }
+ else {
+ reportExpr(info, ResultWas::Ok, &expr, negated);
+ }
+ }
+ else {
+ reportExpr(info, ResultWas::ExpressionFailed, &expr, negated );
+ populateReaction( reaction );
+ }
+ }
+ void RunContext::reportExpr(
+ AssertionInfo const &info,
+ ResultWas::OfType resultType,
+ ITransientExpression const *expr,
+ bool negated ) {
+
+ m_lastAssertionInfo = info;
+ AssertionResultData data( resultType, LazyExpression( negated ) );
+
+ AssertionResult assertionResult{ info, data };
+ assertionResult.m_resultData.lazyExpression.m_transientExpression = expr;
+
+ assertionEnded( assertionResult );
+ }
+
+ void RunContext::handleMessage(
+ AssertionInfo const& info,
+ ResultWas::OfType resultType,
+ StringRef const& message,
+ AssertionReaction& reaction
+ ) {
+ m_reporter->assertionStarting( info );
+
+ m_lastAssertionInfo = info;
+
+ AssertionResultData data( resultType, LazyExpression( false ) );
+ data.message = static_cast<std::string>(message);
+ AssertionResult assertionResult{ m_lastAssertionInfo, data };
+ assertionEnded( assertionResult );
+ if( !assertionResult.isOk() )
+ populateReaction( reaction );
+ }
+ void RunContext::handleUnexpectedExceptionNotThrown(
+ AssertionInfo const& info,
+ AssertionReaction& reaction
+ ) {
+ handleNonExpr(info, Catch::ResultWas::DidntThrowException, reaction);
+ }
+
+ void RunContext::handleUnexpectedInflightException(
+ AssertionInfo const& info,
+ std::string const& message,
+ AssertionReaction& reaction
+ ) {
+ m_lastAssertionInfo = info;
+
+ AssertionResultData data( ResultWas::ThrewException, LazyExpression( false ) );
+ data.message = message;
+ AssertionResult assertionResult{ info, data };
+ assertionEnded( assertionResult );
+ populateReaction( reaction );
+ }
+
+ void RunContext::populateReaction( AssertionReaction& reaction ) {
+ reaction.shouldDebugBreak = m_config->shouldDebugBreak();
+ reaction.shouldThrow = aborting() || (m_lastAssertionInfo.resultDisposition & ResultDisposition::Normal);
+ }
+
+ void RunContext::handleIncomplete(
+ AssertionInfo const& info
+ ) {
+ m_lastAssertionInfo = info;
+
+ AssertionResultData data( ResultWas::ThrewException, LazyExpression( false ) );
+ data.message = "Exception translation was disabled by CATCH_CONFIG_FAST_COMPILE";
+ AssertionResult assertionResult{ info, data };
+ assertionEnded( assertionResult );
+ }
+ void RunContext::handleNonExpr(
+ AssertionInfo const &info,
+ ResultWas::OfType resultType,
+ AssertionReaction &reaction
+ ) {
+ m_lastAssertionInfo = info;
+
+ AssertionResultData data( resultType, LazyExpression( false ) );
+ AssertionResult assertionResult{ info, data };
+ assertionEnded( assertionResult );
+
+ if( !assertionResult.isOk() )
+ populateReaction( reaction );
+ }
+
+ IResultCapture& getResultCapture() {
+ if (auto* capture = getCurrentContext().getResultCapture())
+ return *capture;
+ else
+ CATCH_INTERNAL_ERROR("No result capture instance");
+ }
+
+ void seedRng(IConfig const& config) {
+ if (config.rngSeed() != 0) {
+ std::srand(config.rngSeed());
+ rng().seed(config.rngSeed());
+ }
+ }
+
+ unsigned int rngSeed() {
+ return getCurrentContext().getConfig()->rngSeed();
+ }
+
+}
+// end catch_run_context.cpp
+// start catch_section.cpp
+
+namespace Catch {
+
+ Section::Section( SectionInfo const& info )
+ : m_info( info ),
+ m_sectionIncluded( getResultCapture().sectionStarted( m_info, m_assertions ) )
+ {
+ m_timer.start();
+ }
+
+ Section::~Section() {
+ if( m_sectionIncluded ) {
+ SectionEndInfo endInfo{ m_info, m_assertions, m_timer.getElapsedSeconds() };
+ if( uncaught_exceptions() )
+ getResultCapture().sectionEndedEarly( endInfo );
+ else
+ getResultCapture().sectionEnded( endInfo );
+ }
+ }
+
+ // This indicates whether the section should be executed or not
+ Section::operator bool() const {
+ return m_sectionIncluded;
+ }
+
+} // end namespace Catch
+// end catch_section.cpp
+// start catch_section_info.cpp
+
+namespace Catch {
+
+ SectionInfo::SectionInfo
+ ( SourceLineInfo const& _lineInfo,
+ std::string const& _name )
+ : name( _name ),
+ lineInfo( _lineInfo )
+ {}
+
+} // end namespace Catch
+// end catch_section_info.cpp
+// start catch_session.cpp
+
+// start catch_session.h
+
+#include <memory>
+
+namespace Catch {
+
+ class Session : NonCopyable {
+ public:
+
+ Session();
+ ~Session() override;
+
+ void showHelp() const;
+ void libIdentify();
+
+ int applyCommandLine( int argc, char const * const * argv );
+ #if defined(CATCH_CONFIG_WCHAR) && defined(_WIN32) && defined(UNICODE)
+ int applyCommandLine( int argc, wchar_t const * const * argv );
+ #endif
+
+ void useConfigData( ConfigData const& configData );
+
+ template<typename CharT>
+ int run(int argc, CharT const * const argv[]) {
+ if (m_startupExceptions)
+ return 1;
+ int returnCode = applyCommandLine(argc, argv);
+ if (returnCode == 0)
+ returnCode = run();
+ return returnCode;
+ }
+
+ int run();
+
+ clara::Parser const& cli() const;
+ void cli( clara::Parser const& newParser );
+ ConfigData& configData();
+ Config& config();
+ private:
+ int runInternal();
+
+ clara::Parser m_cli;
+ ConfigData m_configData;
+ std::shared_ptr<Config> m_config;
+ bool m_startupExceptions = false;
+ };
+
+} // end namespace Catch
+
+// end catch_session.h
+// start catch_version.h
+
+#include <iosfwd>
+
+namespace Catch {
+
+ // Versioning information
+ struct Version {
+ Version( Version const& ) = delete;
+ Version& operator=( Version const& ) = delete;
+ Version( unsigned int _majorVersion,
+ unsigned int _minorVersion,
+ unsigned int _patchNumber,
+ char const * const _branchName,
+ unsigned int _buildNumber );
+
+ unsigned int const majorVersion;
+ unsigned int const minorVersion;
+ unsigned int const patchNumber;
+
+ // buildNumber is only used if branchName is not null
+ char const * const branchName;
+ unsigned int const buildNumber;
+
+ friend std::ostream& operator << ( std::ostream& os, Version const& version );
+ };
+
+ Version const& libraryVersion();
+}
+
+// end catch_version.h
+#include <cstdlib>
+#include <iomanip>
+#include <set>
+#include <iterator>
+
+namespace Catch {
+
+ namespace {
+ const int MaxExitCode = 255;
+
+ IStreamingReporterPtr createReporter(std::string const& reporterName, IConfigPtr const& config) {
+ auto reporter = Catch::getRegistryHub().getReporterRegistry().create(reporterName, config);
+ CATCH_ENFORCE(reporter, "No reporter registered with name: '" << reporterName << "'");
+
+ return reporter;
+ }
+
+ IStreamingReporterPtr makeReporter(std::shared_ptr<Config> const& config) {
+ if (Catch::getRegistryHub().getReporterRegistry().getListeners().empty()) {
+ return createReporter(config->getReporterName(), config);
+ }
+
+ // On older platforms, returning std::unique_ptr<ListeningReporter>
+ // when the return type is std::unique_ptr<IStreamingReporter>
+ // doesn't compile without a std::move call. However, this causes
+ // a warning on newer platforms. Thus, we have to work around
+ // it a bit and downcast the pointer manually.
+ auto ret = std::unique_ptr<IStreamingReporter>(new ListeningReporter);
+ auto& multi = static_cast<ListeningReporter&>(*ret);
+ auto const& listeners = Catch::getRegistryHub().getReporterRegistry().getListeners();
+ for (auto const& listener : listeners) {
+ multi.addListener(listener->create(Catch::ReporterConfig(config)));
+ }
+ multi.addReporter(createReporter(config->getReporterName(), config));
+ return ret;
+ }
+
+ class TestGroup {
+ public:
+ explicit TestGroup(std::shared_ptr<Config> const& config)
+ : m_config{config}
+ , m_context{config, makeReporter(config)}
+ {
+ auto const& allTestCases = getAllTestCasesSorted(*m_config);
+ m_matches = m_config->testSpec().matchesByFilter(allTestCases, *m_config);
+ auto const& invalidArgs = m_config->testSpec().getInvalidArgs();
+
+ if (m_matches.empty() && invalidArgs.empty()) {
+ for (auto const& test : allTestCases)
+ if (!test.isHidden())
+ m_tests.emplace(&test);
+ } else {
+ for (auto const& match : m_matches)
+ m_tests.insert(match.tests.begin(), match.tests.end());
+ }
+ }
+
+ Totals execute() {
+ auto const& invalidArgs = m_config->testSpec().getInvalidArgs();
+ Totals totals;
+ m_context.testGroupStarting(m_config->name(), 1, 1);
+ for (auto const& testCase : m_tests) {
+ if (!m_context.aborting())
+ totals += m_context.runTest(*testCase);
+ else
+ m_context.reporter().skipTest(*testCase);
+ }
+
+ for (auto const& match : m_matches) {
+ if (match.tests.empty()) {
+ m_context.reporter().noMatchingTestCases(match.name);
+ totals.error = -1;
+ }
+ }
+
+ if (!invalidArgs.empty()) {
+ for (auto const& invalidArg: invalidArgs)
+ m_context.reporter().reportInvalidArguments(invalidArg);
+ }
+
+ m_context.testGroupEnded(m_config->name(), totals, 1, 1);
+ return totals;
+ }
+
+ private:
+ using Tests = std::set<TestCase const*>;
+
+ std::shared_ptr<Config> m_config;
+ RunContext m_context;
+ Tests m_tests;
+ TestSpec::Matches m_matches;
+ };
+
+ void applyFilenamesAsTags(Catch::IConfig const& config) {
+ auto& tests = const_cast<std::vector<TestCase>&>(getAllTestCasesSorted(config));
+ for (auto& testCase : tests) {
+ auto tags = testCase.tags;
+
+ std::string filename = testCase.lineInfo.file;
+ auto lastSlash = filename.find_last_of("\\/");
+ if (lastSlash != std::string::npos) {
+ filename.erase(0, lastSlash);
+ filename[0] = '#';
+ }
+ else
+ {
+ filename.insert(0, "#");
+ }
+
+ auto lastDot = filename.find_last_of('.');
+ if (lastDot != std::string::npos) {
+ filename.erase(lastDot);
+ }
+
+ tags.push_back(std::move(filename));
+ setTags(testCase, tags);
+ }
+ }
+
+ } // anon namespace
+
+ Session::Session() {
+ static bool alreadyInstantiated = false;
+ if( alreadyInstantiated ) {
+ CATCH_TRY { CATCH_INTERNAL_ERROR( "Only one instance of Catch::Session can ever be used" ); }
+ CATCH_CATCH_ALL { getMutableRegistryHub().registerStartupException(); }
+ }
+
+ // There cannot be exceptions at startup in no-exception mode.
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ const auto& exceptions = getRegistryHub().getStartupExceptionRegistry().getExceptions();
+ if ( !exceptions.empty() ) {
+ config();
+ getCurrentMutableContext().setConfig(m_config);
+
+ m_startupExceptions = true;
+ Colour colourGuard( Colour::Red );
+ Catch::cerr() << "Errors occurred during startup!" << '\n';
+ // iterate over all exceptions and notify user
+ for ( const auto& ex_ptr : exceptions ) {
+ try {
+ std::rethrow_exception(ex_ptr);
+ } catch ( std::exception const& ex ) {
+ Catch::cerr() << Column( ex.what() ).indent(2) << '\n';
+ }
+ }
+ }
+#endif
+
+ alreadyInstantiated = true;
+ m_cli = makeCommandLineParser( m_configData );
+ }
+ Session::~Session() {
+ Catch::cleanUp();
+ }
+
+ void Session::showHelp() const {
+ Catch::cout()
+ << "\nCatch v" << libraryVersion() << "\n"
+ << m_cli << std::endl
+ << "For more detailed usage please see the project docs\n" << std::endl;
+ }
+ void Session::libIdentify() {
+ Catch::cout()
+ << std::left << std::setw(16) << "description: " << "A Catch2 test executable\n"
+ << std::left << std::setw(16) << "category: " << "testframework\n"
+ << std::left << std::setw(16) << "framework: " << "Catch Test\n"
+ << std::left << std::setw(16) << "version: " << libraryVersion() << std::endl;
+ }
+
+ int Session::applyCommandLine( int argc, char const * const * argv ) {
+ if( m_startupExceptions )
+ return 1;
+
+ auto result = m_cli.parse( clara::Args( argc, argv ) );
+ if( !result ) {
+ config();
+ getCurrentMutableContext().setConfig(m_config);
+ Catch::cerr()
+ << Colour( Colour::Red )
+ << "\nError(s) in input:\n"
+ << Column( result.errorMessage() ).indent( 2 )
+ << "\n\n";
+ Catch::cerr() << "Run with -? for usage\n" << std::endl;
+ return MaxExitCode;
+ }
+
+ if( m_configData.showHelp )
+ showHelp();
+ if( m_configData.libIdentify )
+ libIdentify();
+ m_config.reset();
+ return 0;
+ }
+
+#if defined(CATCH_CONFIG_WCHAR) && defined(_WIN32) && defined(UNICODE)
+ int Session::applyCommandLine( int argc, wchar_t const * const * argv ) {
+
+ char **utf8Argv = new char *[ argc ];
+
+ for ( int i = 0; i < argc; ++i ) {
+ int bufSize = WideCharToMultiByte( CP_UTF8, 0, argv[i], -1, nullptr, 0, nullptr, nullptr );
+
+ utf8Argv[ i ] = new char[ bufSize ];
+
+ WideCharToMultiByte( CP_UTF8, 0, argv[i], -1, utf8Argv[i], bufSize, nullptr, nullptr );
+ }
+
+ int returnCode = applyCommandLine( argc, utf8Argv );
+
+ for ( int i = 0; i < argc; ++i )
+ delete [] utf8Argv[ i ];
+
+ delete [] utf8Argv;
+
+ return returnCode;
+ }
+#endif
+
+ void Session::useConfigData( ConfigData const& configData ) {
+ m_configData = configData;
+ m_config.reset();
+ }
+
+ int Session::run() {
+ if( ( m_configData.waitForKeypress & WaitForKeypress::BeforeStart ) != 0 ) {
+ Catch::cout() << "...waiting for enter/ return before starting" << std::endl;
+ static_cast<void>(std::getchar());
+ }
+ int exitCode = runInternal();
+ if( ( m_configData.waitForKeypress & WaitForKeypress::BeforeExit ) != 0 ) {
+ Catch::cout() << "...waiting for enter/ return before exiting, with code: " << exitCode << std::endl;
+ static_cast<void>(std::getchar());
+ }
+ return exitCode;
+ }
+
+ clara::Parser const& Session::cli() const {
+ return m_cli;
+ }
+ void Session::cli( clara::Parser const& newParser ) {
+ m_cli = newParser;
+ }
+ ConfigData& Session::configData() {
+ return m_configData;
+ }
+ Config& Session::config() {
+ if( !m_config )
+ m_config = std::make_shared<Config>( m_configData );
+ return *m_config;
+ }
+
+ int Session::runInternal() {
+ if( m_startupExceptions )
+ return 1;
+
+ if (m_configData.showHelp || m_configData.libIdentify) {
+ return 0;
+ }
+
+ CATCH_TRY {
+ config(); // Force config to be constructed
+
+ seedRng( *m_config );
+
+ if( m_configData.filenamesAsTags )
+ applyFilenamesAsTags( *m_config );
+
+ // Handle list request
+ if( Option<std::size_t> listed = list( m_config ) )
+ return (std::min) (MaxExitCode, static_cast<int>(*listed));
+
+ TestGroup tests { m_config };
+ auto const totals = tests.execute();
+
+ if( m_config->warnAboutNoTests() && totals.error == -1 )
+ return 2;
+
+ // Note that on unices only the lower 8 bits are usually used, clamping
+ // the return value to 255 prevents false negative when some multiple
+ // of 256 tests has failed
+ return (std::min) (MaxExitCode, (std::max) (totals.error, static_cast<int>(totals.assertions.failed)));
+ }
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ catch( std::exception& ex ) {
+ Catch::cerr() << ex.what() << std::endl;
+ return MaxExitCode;
+ }
+#endif
+ }
+
+} // end namespace Catch
+// end catch_session.cpp
+// start catch_singletons.cpp
+
+#include <vector>
+
+namespace Catch {
+
+ namespace {
+ static auto getSingletons() -> std::vector<ISingleton*>*& {
+ static std::vector<ISingleton*>* g_singletons = nullptr;
+ if( !g_singletons )
+ g_singletons = new std::vector<ISingleton*>();
+ return g_singletons;
+ }
+ }
+
+ ISingleton::~ISingleton() {}
+
+ void addSingleton(ISingleton* singleton ) {
+ getSingletons()->push_back( singleton );
+ }
+ void cleanupSingletons() {
+ auto& singletons = getSingletons();
+ for( auto singleton : *singletons )
+ delete singleton;
+ delete singletons;
+ singletons = nullptr;
+ }
+
+} // namespace Catch
+// end catch_singletons.cpp
+// start catch_startup_exception_registry.cpp
+
+#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+namespace Catch {
+void StartupExceptionRegistry::add( std::exception_ptr const& exception ) noexcept {
+ CATCH_TRY {
+ m_exceptions.push_back(exception);
+ } CATCH_CATCH_ALL {
+ // If we run out of memory during start-up there's really not a lot more we can do about it
+ std::terminate();
+ }
+ }
+
+ std::vector<std::exception_ptr> const& StartupExceptionRegistry::getExceptions() const noexcept {
+ return m_exceptions;
+ }
+
+} // end namespace Catch
+#endif
+// end catch_startup_exception_registry.cpp
+// start catch_stream.cpp
+
+#include <cstdio>
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <vector>
+#include <memory>
+
+namespace Catch {
+
+ Catch::IStream::~IStream() = default;
+
+ namespace Detail { namespace {
+ template<typename WriterF, std::size_t bufferSize=256>
+ class StreamBufImpl : public std::streambuf {
+ char data[bufferSize];
+ WriterF m_writer;
+
+ public:
+ StreamBufImpl() {
+ setp( data, data + sizeof(data) );
+ }
+
+ ~StreamBufImpl() noexcept {
+ StreamBufImpl::sync();
+ }
+
+ private:
+ int overflow( int c ) override {
+ sync();
+
+ if( c != EOF ) {
+ if( pbase() == epptr() )
+ m_writer( std::string( 1, static_cast<char>( c ) ) );
+ else
+ sputc( static_cast<char>( c ) );
+ }
+ return 0;
+ }
+
+ int sync() override {
+ if( pbase() != pptr() ) {
+ m_writer( std::string( pbase(), static_cast<std::string::size_type>( pptr() - pbase() ) ) );
+ setp( pbase(), epptr() );
+ }
+ return 0;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ struct OutputDebugWriter {
+
+ void operator()( std::string const&str ) {
+ writeToDebugConsole( str );
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ class FileStream : public IStream {
+ mutable std::ofstream m_ofs;
+ public:
+ FileStream( StringRef filename ) {
+ m_ofs.open( filename.c_str() );
+ CATCH_ENFORCE( !m_ofs.fail(), "Unable to open file: '" << filename << "'" );
+ }
+ ~FileStream() override = default;
+ public: // IStream
+ std::ostream& stream() const override {
+ return m_ofs;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ class CoutStream : public IStream {
+ mutable std::ostream m_os;
+ public:
+ // Store the streambuf from cout up-front because
+ // cout may get redirected when running tests
+ CoutStream() : m_os( Catch::cout().rdbuf() ) {}
+ ~CoutStream() override = default;
+
+ public: // IStream
+ std::ostream& stream() const override { return m_os; }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ class DebugOutStream : public IStream {
+ std::unique_ptr<StreamBufImpl<OutputDebugWriter>> m_streamBuf;
+ mutable std::ostream m_os;
+ public:
+ DebugOutStream()
+ : m_streamBuf( new StreamBufImpl<OutputDebugWriter>() ),
+ m_os( m_streamBuf.get() )
+ {}
+
+ ~DebugOutStream() override = default;
+
+ public: // IStream
+ std::ostream& stream() const override { return m_os; }
+ };
+
+ }} // namespace anon::detail
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ auto makeStream( StringRef const &filename ) -> IStream const* {
+ if( filename.empty() )
+ return new Detail::CoutStream();
+ else if( filename[0] == '%' ) {
+ if( filename == "%debug" )
+ return new Detail::DebugOutStream();
+ else
+ CATCH_ERROR( "Unrecognised stream: '" << filename << "'" );
+ }
+ else
+ return new Detail::FileStream( filename );
+ }
+
+ // This class encapsulates the idea of a pool of ostringstreams that can be reused.
+ struct StringStreams {
+ std::vector<std::unique_ptr<std::ostringstream>> m_streams;
+ std::vector<std::size_t> m_unused;
+ std::ostringstream m_referenceStream; // Used for copy state/ flags from
+
+ auto add() -> std::size_t {
+ if( m_unused.empty() ) {
+ m_streams.push_back( std::unique_ptr<std::ostringstream>( new std::ostringstream ) );
+ return m_streams.size()-1;
+ }
+ else {
+ auto index = m_unused.back();
+ m_unused.pop_back();
+ return index;
+ }
+ }
+
+ void release( std::size_t index ) {
+ m_streams[index]->copyfmt( m_referenceStream ); // Restore initial flags and other state
+ m_unused.push_back(index);
+ }
+ };
+
+ ReusableStringStream::ReusableStringStream()
+ : m_index( Singleton<StringStreams>::getMutable().add() ),
+ m_oss( Singleton<StringStreams>::getMutable().m_streams[m_index].get() )
+ {}
+
+ ReusableStringStream::~ReusableStringStream() {
+ static_cast<std::ostringstream*>( m_oss )->str("");
+ m_oss->clear();
+ Singleton<StringStreams>::getMutable().release( m_index );
+ }
+
+ auto ReusableStringStream::str() const -> std::string {
+ return static_cast<std::ostringstream*>( m_oss )->str();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+
+#ifndef CATCH_CONFIG_NOSTDOUT // If you #define this you must implement these functions
+ std::ostream& cout() { return std::cout; }
+ std::ostream& cerr() { return std::cerr; }
+ std::ostream& clog() { return std::clog; }
+#endif
+}
+// end catch_stream.cpp
+// start catch_string_manip.cpp
+
+#include <algorithm>
+#include <ostream>
+#include <cstring>
+#include <cctype>
+#include <vector>
+
+namespace Catch {
+
+ namespace {
+ char toLowerCh(char c) {
+ return static_cast<char>( std::tolower( static_cast<unsigned char>(c) ) );
+ }
+ }
+
+ bool startsWith( std::string const& s, std::string const& prefix ) {
+ return s.size() >= prefix.size() && std::equal(prefix.begin(), prefix.end(), s.begin());
+ }
+ bool startsWith( std::string const& s, char prefix ) {
+ return !s.empty() && s[0] == prefix;
+ }
+ bool endsWith( std::string const& s, std::string const& suffix ) {
+ return s.size() >= suffix.size() && std::equal(suffix.rbegin(), suffix.rend(), s.rbegin());
+ }
+ bool endsWith( std::string const& s, char suffix ) {
+ return !s.empty() && s[s.size()-1] == suffix;
+ }
+ bool contains( std::string const& s, std::string const& infix ) {
+ return s.find( infix ) != std::string::npos;
+ }
+ void toLowerInPlace( std::string& s ) {
+ std::transform( s.begin(), s.end(), s.begin(), toLowerCh );
+ }
+ std::string toLower( std::string const& s ) {
+ std::string lc = s;
+ toLowerInPlace( lc );
+ return lc;
+ }
+ std::string trim( std::string const& str ) {
+ static char const* whitespaceChars = "\n\r\t ";
+ std::string::size_type start = str.find_first_not_of( whitespaceChars );
+ std::string::size_type end = str.find_last_not_of( whitespaceChars );
+
+ return start != std::string::npos ? str.substr( start, 1+end-start ) : std::string();
+ }
+
+ StringRef trim(StringRef ref) {
+ const auto is_ws = [](char c) {
+ return c == ' ' || c == '\t' || c == '\n' || c == '\r';
+ };
+ size_t real_begin = 0;
+ while (real_begin < ref.size() && is_ws(ref[real_begin])) { ++real_begin; }
+ size_t real_end = ref.size();
+ while (real_end > real_begin && is_ws(ref[real_end - 1])) { --real_end; }
+
+ return ref.substr(real_begin, real_end - real_begin);
+ }
+
+ bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis ) {
+ bool replaced = false;
+ std::size_t i = str.find( replaceThis );
+ while( i != std::string::npos ) {
+ replaced = true;
+ str = str.substr( 0, i ) + withThis + str.substr( i+replaceThis.size() );
+ if( i < str.size()-withThis.size() )
+ i = str.find( replaceThis, i+withThis.size() );
+ else
+ i = std::string::npos;
+ }
+ return replaced;
+ }
+
+ std::vector<StringRef> splitStringRef( StringRef str, char delimiter ) {
+ std::vector<StringRef> subStrings;
+ std::size_t start = 0;
+ for(std::size_t pos = 0; pos < str.size(); ++pos ) {
+ if( str[pos] == delimiter ) {
+ if( pos - start > 1 )
+ subStrings.push_back( str.substr( start, pos-start ) );
+ start = pos+1;
+ }
+ }
+ if( start < str.size() )
+ subStrings.push_back( str.substr( start, str.size()-start ) );
+ return subStrings;
+ }
+
+ pluralise::pluralise( std::size_t count, std::string const& label )
+ : m_count( count ),
+ m_label( label )
+ {}
+
+ std::ostream& operator << ( std::ostream& os, pluralise const& pluraliser ) {
+ os << pluraliser.m_count << ' ' << pluraliser.m_label;
+ if( pluraliser.m_count != 1 )
+ os << 's';
+ return os;
+ }
+
+}
+// end catch_string_manip.cpp
+// start catch_stringref.cpp
+
+#include <algorithm>
+#include <ostream>
+#include <cstring>
+#include <cstdint>
+
+namespace Catch {
+ StringRef::StringRef( char const* rawChars ) noexcept
+ : StringRef( rawChars, static_cast<StringRef::size_type>(std::strlen(rawChars) ) )
+ {}
+
+ auto StringRef::c_str() const -> char const* {
+ CATCH_ENFORCE(isNullTerminated(), "Called StringRef::c_str() on a non-null-terminated instance");
+ return m_start;
+ }
+ auto StringRef::data() const noexcept -> char const* {
+ return m_start;
+ }
+
+ auto StringRef::substr( size_type start, size_type size ) const noexcept -> StringRef {
+ if (start < m_size) {
+ return StringRef(m_start + start, (std::min)(m_size - start, size));
+ } else {
+ return StringRef();
+ }
+ }
+ auto StringRef::operator == ( StringRef const& other ) const noexcept -> bool {
+ return m_size == other.m_size
+ && (std::memcmp( m_start, other.m_start, m_size ) == 0);
+ }
+
+ auto operator << ( std::ostream& os, StringRef const& str ) -> std::ostream& {
+ return os.write(str.data(), str.size());
+ }
+
+ auto operator+=( std::string& lhs, StringRef const& rhs ) -> std::string& {
+ lhs.append(rhs.data(), rhs.size());
+ return lhs;
+ }
+
+} // namespace Catch
+// end catch_stringref.cpp
+// start catch_tag_alias.cpp
+
+namespace Catch {
+ TagAlias::TagAlias(std::string const & _tag, SourceLineInfo _lineInfo): tag(_tag), lineInfo(_lineInfo) {}
+}
+// end catch_tag_alias.cpp
+// start catch_tag_alias_autoregistrar.cpp
+
+namespace Catch {
+
+ RegistrarForTagAliases::RegistrarForTagAliases(char const* alias, char const* tag, SourceLineInfo const& lineInfo) {
+ CATCH_TRY {
+ getMutableRegistryHub().registerTagAlias(alias, tag, lineInfo);
+ } CATCH_CATCH_ALL {
+ // Do not throw when constructing global objects, instead register the exception to be processed later
+ getMutableRegistryHub().registerStartupException();
+ }
+ }
+
+}
+// end catch_tag_alias_autoregistrar.cpp
+// start catch_tag_alias_registry.cpp
+
+#include <sstream>
+
+namespace Catch {
+
+ TagAliasRegistry::~TagAliasRegistry() {}
+
+ TagAlias const* TagAliasRegistry::find( std::string const& alias ) const {
+ auto it = m_registry.find( alias );
+ if( it != m_registry.end() )
+ return &(it->second);
+ else
+ return nullptr;
+ }
+
+ std::string TagAliasRegistry::expandAliases( std::string const& unexpandedTestSpec ) const {
+ std::string expandedTestSpec = unexpandedTestSpec;
+ for( auto const& registryKvp : m_registry ) {
+ std::size_t pos = expandedTestSpec.find( registryKvp.first );
+ if( pos != std::string::npos ) {
+ expandedTestSpec = expandedTestSpec.substr( 0, pos ) +
+ registryKvp.second.tag +
+ expandedTestSpec.substr( pos + registryKvp.first.size() );
+ }
+ }
+ return expandedTestSpec;
+ }
+
+ void TagAliasRegistry::add( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) {
+ CATCH_ENFORCE( startsWith(alias, "[@") && endsWith(alias, ']'),
+ "error: tag alias, '" << alias << "' is not of the form [@alias name].\n" << lineInfo );
+
+ CATCH_ENFORCE( m_registry.insert(std::make_pair(alias, TagAlias(tag, lineInfo))).second,
+ "error: tag alias, '" << alias << "' already registered.\n"
+ << "\tFirst seen at: " << find(alias)->lineInfo << "\n"
+ << "\tRedefined at: " << lineInfo );
+ }
+
+ ITagAliasRegistry::~ITagAliasRegistry() {}
+
+ ITagAliasRegistry const& ITagAliasRegistry::get() {
+ return getRegistryHub().getTagAliasRegistry();
+ }
+
+} // end namespace Catch
+// end catch_tag_alias_registry.cpp
+// start catch_test_case_info.cpp
+
+#include <cctype>
+#include <exception>
+#include <algorithm>
+#include <sstream>
+
+namespace Catch {
+
+ namespace {
+ TestCaseInfo::SpecialProperties parseSpecialTag( std::string const& tag ) {
+ if( startsWith( tag, '.' ) ||
+ tag == "!hide" )
+ return TestCaseInfo::IsHidden;
+ else if( tag == "!throws" )
+ return TestCaseInfo::Throws;
+ else if( tag == "!shouldfail" )
+ return TestCaseInfo::ShouldFail;
+ else if( tag == "!mayfail" )
+ return TestCaseInfo::MayFail;
+ else if( tag == "!nonportable" )
+ return TestCaseInfo::NonPortable;
+ else if( tag == "!benchmark" )
+ return static_cast<TestCaseInfo::SpecialProperties>( TestCaseInfo::Benchmark | TestCaseInfo::IsHidden );
+ else
+ return TestCaseInfo::None;
+ }
+ bool isReservedTag( std::string const& tag ) {
+ return parseSpecialTag( tag ) == TestCaseInfo::None && tag.size() > 0 && !std::isalnum( static_cast<unsigned char>(tag[0]) );
+ }
+ void enforceNotReservedTag( std::string const& tag, SourceLineInfo const& _lineInfo ) {
+ CATCH_ENFORCE( !isReservedTag(tag),
+ "Tag name: [" << tag << "] is not allowed.\n"
+ << "Tag names starting with non alphanumeric characters are reserved\n"
+ << _lineInfo );
+ }
+ }
+
+ TestCase makeTestCase( ITestInvoker* _testCase,
+ std::string const& _className,
+ NameAndTags const& nameAndTags,
+ SourceLineInfo const& _lineInfo )
+ {
+ bool isHidden = false;
+
+ // Parse out tags
+ std::vector<std::string> tags;
+ std::string desc, tag;
+ bool inTag = false;
+ for (char c : nameAndTags.tags) {
+ if( !inTag ) {
+ if( c == '[' )
+ inTag = true;
+ else
+ desc += c;
+ }
+ else {
+ if( c == ']' ) {
+ TestCaseInfo::SpecialProperties prop = parseSpecialTag( tag );
+ if( ( prop & TestCaseInfo::IsHidden ) != 0 )
+ isHidden = true;
+ else if( prop == TestCaseInfo::None )
+ enforceNotReservedTag( tag, _lineInfo );
+
+ // Merged hide tags like `[.approvals]` should be added as
+ // `[.][approvals]`. The `[.]` is added at later point, so
+ // we only strip the prefix
+ if (startsWith(tag, '.') && tag.size() > 1) {
+ tag.erase(0, 1);
+ }
+ tags.push_back( tag );
+ tag.clear();
+ inTag = false;
+ }
+ else
+ tag += c;
+ }
+ }
+ if( isHidden ) {
+ // Add all "hidden" tags to make them behave identically
+ tags.insert( tags.end(), { ".", "!hide" } );
+ }
+
+ TestCaseInfo info( static_cast<std::string>(nameAndTags.name), _className, desc, tags, _lineInfo );
+ return TestCase( _testCase, std::move(info) );
+ }
+
+ void setTags( TestCaseInfo& testCaseInfo, std::vector<std::string> tags ) {
+ std::sort(begin(tags), end(tags));
+ tags.erase(std::unique(begin(tags), end(tags)), end(tags));
+ testCaseInfo.lcaseTags.clear();
+
+ for( auto const& tag : tags ) {
+ std::string lcaseTag = toLower( tag );
+ testCaseInfo.properties = static_cast<TestCaseInfo::SpecialProperties>( testCaseInfo.properties | parseSpecialTag( lcaseTag ) );
+ testCaseInfo.lcaseTags.push_back( lcaseTag );
+ }
+ testCaseInfo.tags = std::move(tags);
+ }
+
+ TestCaseInfo::TestCaseInfo( std::string const& _name,
+ std::string const& _className,
+ std::string const& _description,
+ std::vector<std::string> const& _tags,
+ SourceLineInfo const& _lineInfo )
+ : name( _name ),
+ className( _className ),
+ description( _description ),
+ lineInfo( _lineInfo ),
+ properties( None )
+ {
+ setTags( *this, _tags );
+ }
+
+ bool TestCaseInfo::isHidden() const {
+ return ( properties & IsHidden ) != 0;
+ }
+ bool TestCaseInfo::throws() const {
+ return ( properties & Throws ) != 0;
+ }
+ bool TestCaseInfo::okToFail() const {
+ return ( properties & (ShouldFail | MayFail ) ) != 0;
+ }
+ bool TestCaseInfo::expectedToFail() const {
+ return ( properties & (ShouldFail ) ) != 0;
+ }
+
+ std::string TestCaseInfo::tagsAsString() const {
+ std::string ret;
+ // '[' and ']' per tag
+ std::size_t full_size = 2 * tags.size();
+ for (const auto& tag : tags) {
+ full_size += tag.size();
+ }
+ ret.reserve(full_size);
+ for (const auto& tag : tags) {
+ ret.push_back('[');
+ ret.append(tag);
+ ret.push_back(']');
+ }
+
+ return ret;
+ }
+
+ TestCase::TestCase( ITestInvoker* testCase, TestCaseInfo&& info ) : TestCaseInfo( std::move(info) ), test( testCase ) {}
+
+ TestCase TestCase::withName( std::string const& _newName ) const {
+ TestCase other( *this );
+ other.name = _newName;
+ return other;
+ }
+
+ void TestCase::invoke() const {
+ test->invoke();
+ }
+
+ bool TestCase::operator == ( TestCase const& other ) const {
+ return test.get() == other.test.get() &&
+ name == other.name &&
+ className == other.className;
+ }
+
+ bool TestCase::operator < ( TestCase const& other ) const {
+ return name < other.name;
+ }
+
+ TestCaseInfo const& TestCase::getTestCaseInfo() const
+ {
+ return *this;
+ }
+
+} // end namespace Catch
+// end catch_test_case_info.cpp
+// start catch_test_case_registry_impl.cpp
+
+#include <algorithm>
+#include <sstream>
+
+namespace Catch {
+
+ namespace {
+ struct TestHasher {
+ using hash_t = uint64_t;
+
+ explicit TestHasher( hash_t hashSuffix ):
+ m_hashSuffix{ hashSuffix } {}
+
+ uint32_t operator()( TestCase const& t ) const {
+ // FNV-1a hash with multiplication fold.
+ const hash_t prime = 1099511628211u;
+ hash_t hash = 14695981039346656037u;
+ for ( const char c : t.name ) {
+ hash ^= c;
+ hash *= prime;
+ }
+ hash ^= m_hashSuffix;
+ hash *= prime;
+ const uint32_t low{ static_cast<uint32_t>( hash ) };
+ const uint32_t high{ static_cast<uint32_t>( hash >> 32 ) };
+ return low * high;
+ }
+
+ private:
+ hash_t m_hashSuffix;
+ };
+ } // end unnamed namespace
+
+ std::vector<TestCase> sortTests( IConfig const& config, std::vector<TestCase> const& unsortedTestCases ) {
+ switch( config.runOrder() ) {
+ case RunTests::InDeclarationOrder:
+ // already in declaration order
+ break;
+
+ case RunTests::InLexicographicalOrder: {
+ std::vector<TestCase> sorted = unsortedTestCases;
+ std::sort( sorted.begin(), sorted.end() );
+ return sorted;
+ }
+
+ case RunTests::InRandomOrder: {
+ seedRng( config );
+ TestHasher h{ config.rngSeed() };
+
+ using hashedTest = std::pair<TestHasher::hash_t, TestCase const*>;
+ std::vector<hashedTest> indexed_tests;
+ indexed_tests.reserve( unsortedTestCases.size() );
+
+ for (auto const& testCase : unsortedTestCases) {
+ indexed_tests.emplace_back(h(testCase), &testCase);
+ }
+
+ std::sort(indexed_tests.begin(), indexed_tests.end(),
+ [](hashedTest const& lhs, hashedTest const& rhs) {
+ if (lhs.first == rhs.first) {
+ return lhs.second->name < rhs.second->name;
+ }
+ return lhs.first < rhs.first;
+ });
+
+ std::vector<TestCase> sorted;
+ sorted.reserve( indexed_tests.size() );
+
+ for (auto const& hashed : indexed_tests) {
+ sorted.emplace_back(*hashed.second);
+ }
+
+ return sorted;
+ }
+ }
+ return unsortedTestCases;
+ }
+
+ bool isThrowSafe( TestCase const& testCase, IConfig const& config ) {
+ return !testCase.throws() || config.allowThrows();
+ }
+
+ bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config ) {
+ return testSpec.matches( testCase ) && isThrowSafe( testCase, config );
+ }
+
+ void enforceNoDuplicateTestCases( std::vector<TestCase> const& functions ) {
+ std::set<TestCase> seenFunctions;
+ for( auto const& function : functions ) {
+ auto prev = seenFunctions.insert( function );
+ CATCH_ENFORCE( prev.second,
+ "error: TEST_CASE( \"" << function.name << "\" ) already defined.\n"
+ << "\tFirst seen at " << prev.first->getTestCaseInfo().lineInfo << "\n"
+ << "\tRedefined at " << function.getTestCaseInfo().lineInfo );
+ }
+ }
+
+ std::vector<TestCase> filterTests( std::vector<TestCase> const& testCases, TestSpec const& testSpec, IConfig const& config ) {
+ std::vector<TestCase> filtered;
+ filtered.reserve( testCases.size() );
+ for (auto const& testCase : testCases) {
+ if ((!testSpec.hasFilters() && !testCase.isHidden()) ||
+ (testSpec.hasFilters() && matchTest(testCase, testSpec, config))) {
+ filtered.push_back(testCase);
+ }
+ }
+ return filtered;
+ }
+ std::vector<TestCase> const& getAllTestCasesSorted( IConfig const& config ) {
+ return getRegistryHub().getTestCaseRegistry().getAllTestsSorted( config );
+ }
+
+ void TestRegistry::registerTest( TestCase const& testCase ) {
+ std::string name = testCase.getTestCaseInfo().name;
+ if( name.empty() ) {
+ ReusableStringStream rss;
+ rss << "Anonymous test case " << ++m_unnamedCount;
+ return registerTest( testCase.withName( rss.str() ) );
+ }
+ m_functions.push_back( testCase );
+ }
+
+ std::vector<TestCase> const& TestRegistry::getAllTests() const {
+ return m_functions;
+ }
+ std::vector<TestCase> const& TestRegistry::getAllTestsSorted( IConfig const& config ) const {
+ if( m_sortedFunctions.empty() )
+ enforceNoDuplicateTestCases( m_functions );
+
+ if( m_currentSortOrder != config.runOrder() || m_sortedFunctions.empty() ) {
+ m_sortedFunctions = sortTests( config, m_functions );
+ m_currentSortOrder = config.runOrder();
+ }
+ return m_sortedFunctions;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ TestInvokerAsFunction::TestInvokerAsFunction( void(*testAsFunction)() ) noexcept : m_testAsFunction( testAsFunction ) {}
+
+ void TestInvokerAsFunction::invoke() const {
+ m_testAsFunction();
+ }
+
+ std::string extractClassName( StringRef const& classOrQualifiedMethodName ) {
+ std::string className(classOrQualifiedMethodName);
+ if( startsWith( className, '&' ) )
+ {
+ std::size_t lastColons = className.rfind( "::" );
+ std::size_t penultimateColons = className.rfind( "::", lastColons-1 );
+ if( penultimateColons == std::string::npos )
+ penultimateColons = 1;
+ className = className.substr( penultimateColons, lastColons-penultimateColons );
+ }
+ return className;
+ }
+
+} // end namespace Catch
+// end catch_test_case_registry_impl.cpp
+// start catch_test_case_tracker.cpp
+
+#include <algorithm>
+#include <cassert>
+#include <stdexcept>
+#include <memory>
+#include <sstream>
+
+#if defined(__clang__)
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wexit-time-destructors"
+#endif
+
+namespace Catch {
+namespace TestCaseTracking {
+
+ NameAndLocation::NameAndLocation( std::string const& _name, SourceLineInfo const& _location )
+ : name( _name ),
+ location( _location )
+ {}
+
+ ITracker::~ITracker() = default;
+
+ ITracker& TrackerContext::startRun() {
+ m_rootTracker = std::make_shared<SectionTracker>( NameAndLocation( "{root}", CATCH_INTERNAL_LINEINFO ), *this, nullptr );
+ m_currentTracker = nullptr;
+ m_runState = Executing;
+ return *m_rootTracker;
+ }
+
+ void TrackerContext::endRun() {
+ m_rootTracker.reset();
+ m_currentTracker = nullptr;
+ m_runState = NotStarted;
+ }
+
+ void TrackerContext::startCycle() {
+ m_currentTracker = m_rootTracker.get();
+ m_runState = Executing;
+ }
+ void TrackerContext::completeCycle() {
+ m_runState = CompletedCycle;
+ }
+
+ bool TrackerContext::completedCycle() const {
+ return m_runState == CompletedCycle;
+ }
+ ITracker& TrackerContext::currentTracker() {
+ return *m_currentTracker;
+ }
+ void TrackerContext::setCurrentTracker( ITracker* tracker ) {
+ m_currentTracker = tracker;
+ }
+
+ TrackerBase::TrackerBase( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent ):
+ ITracker(nameAndLocation),
+ m_ctx( ctx ),
+ m_parent( parent )
+ {}
+
+ bool TrackerBase::isComplete() const {
+ return m_runState == CompletedSuccessfully || m_runState == Failed;
+ }
+ bool TrackerBase::isSuccessfullyCompleted() const {
+ return m_runState == CompletedSuccessfully;
+ }
+ bool TrackerBase::isOpen() const {
+ return m_runState != NotStarted && !isComplete();
+ }
+ bool TrackerBase::hasChildren() const {
+ return !m_children.empty();
+ }
+
+ void TrackerBase::addChild( ITrackerPtr const& child ) {
+ m_children.push_back( child );
+ }
+
+ ITrackerPtr TrackerBase::findChild( NameAndLocation const& nameAndLocation ) {
+ auto it = std::find_if( m_children.begin(), m_children.end(),
+ [&nameAndLocation]( ITrackerPtr const& tracker ){
+ return
+ tracker->nameAndLocation().location == nameAndLocation.location &&
+ tracker->nameAndLocation().name == nameAndLocation.name;
+ } );
+ return( it != m_children.end() )
+ ? *it
+ : nullptr;
+ }
+ ITracker& TrackerBase::parent() {
+ assert( m_parent ); // Should always be non-null except for root
+ return *m_parent;
+ }
+
+ void TrackerBase::openChild() {
+ if( m_runState != ExecutingChildren ) {
+ m_runState = ExecutingChildren;
+ if( m_parent )
+ m_parent->openChild();
+ }
+ }
+
+ bool TrackerBase::isSectionTracker() const { return false; }
+ bool TrackerBase::isGeneratorTracker() const { return false; }
+
+ void TrackerBase::open() {
+ m_runState = Executing;
+ moveToThis();
+ if( m_parent )
+ m_parent->openChild();
+ }
+
+ void TrackerBase::close() {
+
+ // Close any still open children (e.g. generators)
+ while( &m_ctx.currentTracker() != this )
+ m_ctx.currentTracker().close();
+
+ switch( m_runState ) {
+ case NeedsAnotherRun:
+ break;
+
+ case Executing:
+ m_runState = CompletedSuccessfully;
+ break;
+ case ExecutingChildren:
+ if( std::all_of(m_children.begin(), m_children.end(), [](ITrackerPtr const& t){ return t->isComplete(); }) )
+ m_runState = CompletedSuccessfully;
+ break;
+
+ case NotStarted:
+ case CompletedSuccessfully:
+ case Failed:
+ CATCH_INTERNAL_ERROR( "Illogical state: " << m_runState );
+
+ default:
+ CATCH_INTERNAL_ERROR( "Unknown state: " << m_runState );
+ }
+ moveToParent();
+ m_ctx.completeCycle();
+ }
+ void TrackerBase::fail() {
+ m_runState = Failed;
+ if( m_parent )
+ m_parent->markAsNeedingAnotherRun();
+ moveToParent();
+ m_ctx.completeCycle();
+ }
+ void TrackerBase::markAsNeedingAnotherRun() {
+ m_runState = NeedsAnotherRun;
+ }
+
+ void TrackerBase::moveToParent() {
+ assert( m_parent );
+ m_ctx.setCurrentTracker( m_parent );
+ }
+ void TrackerBase::moveToThis() {
+ m_ctx.setCurrentTracker( this );
+ }
+
+ SectionTracker::SectionTracker( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent )
+ : TrackerBase( nameAndLocation, ctx, parent ),
+ m_trimmed_name(trim(nameAndLocation.name))
+ {
+ if( parent ) {
+ while( !parent->isSectionTracker() )
+ parent = &parent->parent();
+
+ SectionTracker& parentSection = static_cast<SectionTracker&>( *parent );
+ addNextFilters( parentSection.m_filters );
+ }
+ }
+
+ bool SectionTracker::isComplete() const {
+ bool complete = true;
+
+ if (m_filters.empty()
+ || m_filters[0] == ""
+ || std::find(m_filters.begin(), m_filters.end(), m_trimmed_name) != m_filters.end()) {
+ complete = TrackerBase::isComplete();
+ }
+ return complete;
+ }
+
+ bool SectionTracker::isSectionTracker() const { return true; }
+
+ SectionTracker& SectionTracker::acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation ) {
+ std::shared_ptr<SectionTracker> section;
+
+ ITracker& currentTracker = ctx.currentTracker();
+ if( ITrackerPtr childTracker = currentTracker.findChild( nameAndLocation ) ) {
+ assert( childTracker );
+ assert( childTracker->isSectionTracker() );
+ section = std::static_pointer_cast<SectionTracker>( childTracker );
+ }
+ else {
+ section = std::make_shared<SectionTracker>( nameAndLocation, ctx, &currentTracker );
+ currentTracker.addChild( section );
+ }
+ if( !ctx.completedCycle() )
+ section->tryOpen();
+ return *section;
+ }
+
+ void SectionTracker::tryOpen() {
+ if( !isComplete() )
+ open();
+ }
+
+ void SectionTracker::addInitialFilters( std::vector<std::string> const& filters ) {
+ if( !filters.empty() ) {
+ m_filters.reserve( m_filters.size() + filters.size() + 2 );
+ m_filters.emplace_back(""); // Root - should never be consulted
+ m_filters.emplace_back(""); // Test Case - not a section filter
+ m_filters.insert( m_filters.end(), filters.begin(), filters.end() );
+ }
+ }
+ void SectionTracker::addNextFilters( std::vector<std::string> const& filters ) {
+ if( filters.size() > 1 )
+ m_filters.insert( m_filters.end(), filters.begin()+1, filters.end() );
+ }
+
+ std::vector<std::string> const& SectionTracker::getFilters() const {
+ return m_filters;
+ }
+
+ std::string const& SectionTracker::trimmedName() const {
+ return m_trimmed_name;
+ }
+
+} // namespace TestCaseTracking
+
+using TestCaseTracking::ITracker;
+using TestCaseTracking::TrackerContext;
+using TestCaseTracking::SectionTracker;
+
+} // namespace Catch
+
+#if defined(__clang__)
+# pragma clang diagnostic pop
+#endif
+// end catch_test_case_tracker.cpp
+// start catch_test_registry.cpp
+
+namespace Catch {
+
+ auto makeTestInvoker( void(*testAsFunction)() ) noexcept -> ITestInvoker* {
+ return new(std::nothrow) TestInvokerAsFunction( testAsFunction );
+ }
+
+ NameAndTags::NameAndTags( StringRef const& name_ , StringRef const& tags_ ) noexcept : name( name_ ), tags( tags_ ) {}
+
+ AutoReg::AutoReg( ITestInvoker* invoker, SourceLineInfo const& lineInfo, StringRef const& classOrMethod, NameAndTags const& nameAndTags ) noexcept {
+ CATCH_TRY {
+ getMutableRegistryHub()
+ .registerTest(
+ makeTestCase(
+ invoker,
+ extractClassName( classOrMethod ),
+ nameAndTags,
+ lineInfo));
+ } CATCH_CATCH_ALL {
+ // Do not throw when constructing global objects, instead register the exception to be processed later
+ getMutableRegistryHub().registerStartupException();
+ }
+ }
+
+ AutoReg::~AutoReg() = default;
+}
+// end catch_test_registry.cpp
+// start catch_test_spec.cpp
+
+#include <algorithm>
+#include <string>
+#include <vector>
+#include <memory>
+
+namespace Catch {
+
+ TestSpec::Pattern::Pattern( std::string const& name )
+ : m_name( name )
+ {}
+
+ TestSpec::Pattern::~Pattern() = default;
+
+ std::string const& TestSpec::Pattern::name() const {
+ return m_name;
+ }
+
+ TestSpec::NamePattern::NamePattern( std::string const& name, std::string const& filterString )
+ : Pattern( filterString )
+ , m_wildcardPattern( toLower( name ), CaseSensitive::No )
+ {}
+
+ bool TestSpec::NamePattern::matches( TestCaseInfo const& testCase ) const {
+ return m_wildcardPattern.matches( testCase.name );
+ }
+
+ TestSpec::TagPattern::TagPattern( std::string const& tag, std::string const& filterString )
+ : Pattern( filterString )
+ , m_tag( toLower( tag ) )
+ {}
+
+ bool TestSpec::TagPattern::matches( TestCaseInfo const& testCase ) const {
+ return std::find(begin(testCase.lcaseTags),
+ end(testCase.lcaseTags),
+ m_tag) != end(testCase.lcaseTags);
+ }
+
+ TestSpec::ExcludedPattern::ExcludedPattern( PatternPtr const& underlyingPattern )
+ : Pattern( underlyingPattern->name() )
+ , m_underlyingPattern( underlyingPattern )
+ {}
+
+ bool TestSpec::ExcludedPattern::matches( TestCaseInfo const& testCase ) const {
+ return !m_underlyingPattern->matches( testCase );
+ }
+
+ bool TestSpec::Filter::matches( TestCaseInfo const& testCase ) const {
+ return std::all_of( m_patterns.begin(), m_patterns.end(), [&]( PatternPtr const& p ){ return p->matches( testCase ); } );
+ }
+
+ std::string TestSpec::Filter::name() const {
+ std::string name;
+ for( auto const& p : m_patterns )
+ name += p->name();
+ return name;
+ }
+
+ bool TestSpec::hasFilters() const {
+ return !m_filters.empty();
+ }
+
+ bool TestSpec::matches( TestCaseInfo const& testCase ) const {
+ return std::any_of( m_filters.begin(), m_filters.end(), [&]( Filter const& f ){ return f.matches( testCase ); } );
+ }
+
+ TestSpec::Matches TestSpec::matchesByFilter( std::vector<TestCase> const& testCases, IConfig const& config ) const
+ {
+ Matches matches( m_filters.size() );
+ std::transform( m_filters.begin(), m_filters.end(), matches.begin(), [&]( Filter const& filter ){
+ std::vector<TestCase const*> currentMatches;
+ for( auto const& test : testCases )
+ if( isThrowSafe( test, config ) && filter.matches( test ) )
+ currentMatches.emplace_back( &test );
+ return FilterMatch{ filter.name(), currentMatches };
+ } );
+ return matches;
+ }
+
+ const TestSpec::vectorStrings& TestSpec::getInvalidArgs() const{
+ return (m_invalidArgs);
+ }
+
+}
+// end catch_test_spec.cpp
+// start catch_test_spec_parser.cpp
+
+namespace Catch {
+
+ TestSpecParser::TestSpecParser( ITagAliasRegistry const& tagAliases ) : m_tagAliases( &tagAliases ) {}
+
+ TestSpecParser& TestSpecParser::parse( std::string const& arg ) {
+ m_mode = None;
+ m_exclusion = false;
+ m_arg = m_tagAliases->expandAliases( arg );
+ m_escapeChars.clear();
+ m_substring.reserve(m_arg.size());
+ m_patternName.reserve(m_arg.size());
+ m_realPatternPos = 0;
+
+ for( m_pos = 0; m_pos < m_arg.size(); ++m_pos )
+ //if visitChar fails
+ if( !visitChar( m_arg[m_pos] ) ){
+ m_testSpec.m_invalidArgs.push_back(arg);
+ break;
+ }
+ endMode();
+ return *this;
+ }
+ TestSpec TestSpecParser::testSpec() {
+ addFilter();
+ return m_testSpec;
+ }
+ bool TestSpecParser::visitChar( char c ) {
+ if( (m_mode != EscapedName) && (c == '\\') ) {
+ escape();
+ addCharToPattern(c);
+ return true;
+ }else if((m_mode != EscapedName) && (c == ',') ) {
+ return separate();
+ }
+
+ switch( m_mode ) {
+ case None:
+ if( processNoneChar( c ) )
+ return true;
+ break;
+ case Name:
+ processNameChar( c );
+ break;
+ case EscapedName:
+ endMode();
+ addCharToPattern(c);
+ return true;
+ default:
+ case Tag:
+ case QuotedName:
+ if( processOtherChar( c ) )
+ return true;
+ break;
+ }
+
+ m_substring += c;
+ if( !isControlChar( c ) ) {
+ m_patternName += c;
+ m_realPatternPos++;
+ }
+ return true;
+ }
+ // Two of the processing methods return true to signal the caller to return
+ // without adding the given character to the current pattern strings
+ bool TestSpecParser::processNoneChar( char c ) {
+ switch( c ) {
+ case ' ':
+ return true;
+ case '~':
+ m_exclusion = true;
+ return false;
+ case '[':
+ startNewMode( Tag );
+ return false;
+ case '"':
+ startNewMode( QuotedName );
+ return false;
+ default:
+ startNewMode( Name );
+ return false;
+ }
+ }
+ void TestSpecParser::processNameChar( char c ) {
+ if( c == '[' ) {
+ if( m_substring == "exclude:" )
+ m_exclusion = true;
+ else
+ endMode();
+ startNewMode( Tag );
+ }
+ }
+ bool TestSpecParser::processOtherChar( char c ) {
+ if( !isControlChar( c ) )
+ return false;
+ m_substring += c;
+ endMode();
+ return true;
+ }
+ void TestSpecParser::startNewMode( Mode mode ) {
+ m_mode = mode;
+ }
+ void TestSpecParser::endMode() {
+ switch( m_mode ) {
+ case Name:
+ case QuotedName:
+ return addNamePattern();
+ case Tag:
+ return addTagPattern();
+ case EscapedName:
+ revertBackToLastMode();
+ return;
+ case None:
+ default:
+ return startNewMode( None );
+ }
+ }
+ void TestSpecParser::escape() {
+ saveLastMode();
+ m_mode = EscapedName;
+ m_escapeChars.push_back(m_realPatternPos);
+ }
+ bool TestSpecParser::isControlChar( char c ) const {
+ switch( m_mode ) {
+ default:
+ return false;
+ case None:
+ return c == '~';
+ case Name:
+ return c == '[';
+ case EscapedName:
+ return true;
+ case QuotedName:
+ return c == '"';
+ case Tag:
+ return c == '[' || c == ']';
+ }
+ }
+
+ void TestSpecParser::addFilter() {
+ if( !m_currentFilter.m_patterns.empty() ) {
+ m_testSpec.m_filters.push_back( m_currentFilter );
+ m_currentFilter = TestSpec::Filter();
+ }
+ }
+
+ void TestSpecParser::saveLastMode() {
+ lastMode = m_mode;
+ }
+
+ void TestSpecParser::revertBackToLastMode() {
+ m_mode = lastMode;
+ }
+
+ bool TestSpecParser::separate() {
+ if( (m_mode==QuotedName) || (m_mode==Tag) ){
+ //invalid argument, signal failure to previous scope.
+ m_mode = None;
+ m_pos = m_arg.size();
+ m_substring.clear();
+ m_patternName.clear();
+ m_realPatternPos = 0;
+ return false;
+ }
+ endMode();
+ addFilter();
+ return true; //success
+ }
+
+ std::string TestSpecParser::preprocessPattern() {
+ std::string token = m_patternName;
+ for (std::size_t i = 0; i < m_escapeChars.size(); ++i)
+ token = token.substr(0, m_escapeChars[i] - i) + token.substr(m_escapeChars[i] - i + 1);
+ m_escapeChars.clear();
+ if (startsWith(token, "exclude:")) {
+ m_exclusion = true;
+ token = token.substr(8);
+ }
+
+ m_patternName.clear();
+ m_realPatternPos = 0;
+
+ return token;
+ }
+
+ void TestSpecParser::addNamePattern() {
+ auto token = preprocessPattern();
+
+ if (!token.empty()) {
+ TestSpec::PatternPtr pattern = std::make_shared<TestSpec::NamePattern>(token, m_substring);
+ if (m_exclusion)
+ pattern = std::make_shared<TestSpec::ExcludedPattern>(pattern);
+ m_currentFilter.m_patterns.push_back(pattern);
+ }
+ m_substring.clear();
+ m_exclusion = false;
+ m_mode = None;
+ }
+
+ void TestSpecParser::addTagPattern() {
+ auto token = preprocessPattern();
+
+ if (!token.empty()) {
+ // If the tag pattern is the "hide and tag" shorthand (e.g. [.foo])
+ // we have to create a separate hide tag and shorten the real one
+ if (token.size() > 1 && token[0] == '.') {
+ token.erase(token.begin());
+ TestSpec::PatternPtr pattern = std::make_shared<TestSpec::TagPattern>(".", m_substring);
+ if (m_exclusion) {
+ pattern = std::make_shared<TestSpec::ExcludedPattern>(pattern);
+ }
+ m_currentFilter.m_patterns.push_back(pattern);
+ }
+
+ TestSpec::PatternPtr pattern = std::make_shared<TestSpec::TagPattern>(token, m_substring);
+
+ if (m_exclusion) {
+ pattern = std::make_shared<TestSpec::ExcludedPattern>(pattern);
+ }
+ m_currentFilter.m_patterns.push_back(pattern);
+ }
+ m_substring.clear();
+ m_exclusion = false;
+ m_mode = None;
+ }
+
+ TestSpec parseTestSpec( std::string const& arg ) {
+ return TestSpecParser( ITagAliasRegistry::get() ).parse( arg ).testSpec();
+ }
+
+} // namespace Catch
+// end catch_test_spec_parser.cpp
+// start catch_timer.cpp
+
+#include <chrono>
+
+static const uint64_t nanosecondsInSecond = 1000000000;
+
+namespace Catch {
+
+ auto getCurrentNanosecondsSinceEpoch() -> uint64_t {
+ return std::chrono::duration_cast<std::chrono::nanoseconds>( std::chrono::high_resolution_clock::now().time_since_epoch() ).count();
+ }
+
+ namespace {
+ auto estimateClockResolution() -> uint64_t {
+ uint64_t sum = 0;
+ static const uint64_t iterations = 1000000;
+
+ auto startTime = getCurrentNanosecondsSinceEpoch();
+
+ for( std::size_t i = 0; i < iterations; ++i ) {
+
+ uint64_t ticks;
+ uint64_t baseTicks = getCurrentNanosecondsSinceEpoch();
+ do {
+ ticks = getCurrentNanosecondsSinceEpoch();
+ } while( ticks == baseTicks );
+
+ auto delta = ticks - baseTicks;
+ sum += delta;
+
+ // If we have been calibrating for over 3 seconds -- the clock
+ // is terrible and we should move on.
+ // TBD: How to signal that the measured resolution is probably wrong?
+ if (ticks > startTime + 3 * nanosecondsInSecond) {
+ return sum / ( i + 1u );
+ }
+ }
+
+ // We're just taking the mean, here. To do better we could take the std. dev and exclude outliers
+ // - and potentially do more iterations if there's a high variance.
+ return sum/iterations;
+ }
+ }
+ auto getEstimatedClockResolution() -> uint64_t {
+ static auto s_resolution = estimateClockResolution();
+ return s_resolution;
+ }
+
+ void Timer::start() {
+ m_nanoseconds = getCurrentNanosecondsSinceEpoch();
+ }
+ auto Timer::getElapsedNanoseconds() const -> uint64_t {
+ return getCurrentNanosecondsSinceEpoch() - m_nanoseconds;
+ }
+ auto Timer::getElapsedMicroseconds() const -> uint64_t {
+ return getElapsedNanoseconds()/1000;
+ }
+ auto Timer::getElapsedMilliseconds() const -> unsigned int {
+ return static_cast<unsigned int>(getElapsedMicroseconds()/1000);
+ }
+ auto Timer::getElapsedSeconds() const -> double {
+ return getElapsedMicroseconds()/1000000.0;
+ }
+
+} // namespace Catch
+// end catch_timer.cpp
+// start catch_tostring.cpp
+
+#if defined(__clang__)
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wexit-time-destructors"
+# pragma clang diagnostic ignored "-Wglobal-constructors"
+#endif
+
+// Enable specific decls locally
+#if !defined(CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER)
+#define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER
+#endif
+
+#include <cmath>
+#include <iomanip>
+
+namespace Catch {
+
+namespace Detail {
+
+ const std::string unprintableString = "{?}";
+
+ namespace {
+ const int hexThreshold = 255;
+
+ struct Endianness {
+ enum Arch { Big, Little };
+
+ static Arch which() {
+ int one = 1;
+ // If the lowest byte we read is non-zero, we can assume
+ // that little endian format is used.
+ auto value = *reinterpret_cast<char*>(&one);
+ return value ? Little : Big;
+ }
+ };
+ }
+
+ std::string rawMemoryToString( const void *object, std::size_t size ) {
+ // Reverse order for little endian architectures
+ int i = 0, end = static_cast<int>( size ), inc = 1;
+ if( Endianness::which() == Endianness::Little ) {
+ i = end-1;
+ end = inc = -1;
+ }
+
+ unsigned char const *bytes = static_cast<unsigned char const *>(object);
+ ReusableStringStream rss;
+ rss << "0x" << std::setfill('0') << std::hex;
+ for( ; i != end; i += inc )
+ rss << std::setw(2) << static_cast<unsigned>(bytes[i]);
+ return rss.str();
+ }
+}
+
+template<typename T>
+std::string fpToString( T value, int precision ) {
+ if (Catch::isnan(value)) {
+ return "nan";
+ }
+
+ ReusableStringStream rss;
+ rss << std::setprecision( precision )
+ << std::fixed
+ << value;
+ std::string d = rss.str();
+ std::size_t i = d.find_last_not_of( '0' );
+ if( i != std::string::npos && i != d.size()-1 ) {
+ if( d[i] == '.' )
+ i++;
+ d = d.substr( 0, i+1 );
+ }
+ return d;
+}
+
+//// ======================================================= ////
+//
+// Out-of-line defs for full specialization of StringMaker
+//
+//// ======================================================= ////
+
+std::string StringMaker<std::string>::convert(const std::string& str) {
+ if (!getCurrentContext().getConfig()->showInvisibles()) {
+ return '"' + str + '"';
+ }
+
+ std::string s("\"");
+ for (char c : str) {
+ switch (c) {
+ case '\n':
+ s.append("\\n");
+ break;
+ case '\t':
+ s.append("\\t");
+ break;
+ default:
+ s.push_back(c);
+ break;
+ }
+ }
+ s.append("\"");
+ return s;
+}
+
+#ifdef CATCH_CONFIG_CPP17_STRING_VIEW
+std::string StringMaker<std::string_view>::convert(std::string_view str) {
+ return ::Catch::Detail::stringify(std::string{ str });
+}
+#endif
+
+std::string StringMaker<char const*>::convert(char const* str) {
+ if (str) {
+ return ::Catch::Detail::stringify(std::string{ str });
+ } else {
+ return{ "{null string}" };
+ }
+}
+std::string StringMaker<char*>::convert(char* str) {
+ if (str) {
+ return ::Catch::Detail::stringify(std::string{ str });
+ } else {
+ return{ "{null string}" };
+ }
+}
+
+#ifdef CATCH_CONFIG_WCHAR
+std::string StringMaker<std::wstring>::convert(const std::wstring& wstr) {
+ std::string s;
+ s.reserve(wstr.size());
+ for (auto c : wstr) {
+ s += (c <= 0xff) ? static_cast<char>(c) : '?';
+ }
+ return ::Catch::Detail::stringify(s);
+}
+
+# ifdef CATCH_CONFIG_CPP17_STRING_VIEW
+std::string StringMaker<std::wstring_view>::convert(std::wstring_view str) {
+ return StringMaker<std::wstring>::convert(std::wstring(str));
+}
+# endif
+
+std::string StringMaker<wchar_t const*>::convert(wchar_t const * str) {
+ if (str) {
+ return ::Catch::Detail::stringify(std::wstring{ str });
+ } else {
+ return{ "{null string}" };
+ }
+}
+std::string StringMaker<wchar_t *>::convert(wchar_t * str) {
+ if (str) {
+ return ::Catch::Detail::stringify(std::wstring{ str });
+ } else {
+ return{ "{null string}" };
+ }
+}
+#endif
+
+#if defined(CATCH_CONFIG_CPP17_BYTE)
+#include <cstddef>
+std::string StringMaker<std::byte>::convert(std::byte value) {
+ return ::Catch::Detail::stringify(std::to_integer<unsigned long long>(value));
+}
+#endif // defined(CATCH_CONFIG_CPP17_BYTE)
+
+std::string StringMaker<int>::convert(int value) {
+ return ::Catch::Detail::stringify(static_cast<long long>(value));
+}
+std::string StringMaker<long>::convert(long value) {
+ return ::Catch::Detail::stringify(static_cast<long long>(value));
+}
+std::string StringMaker<long long>::convert(long long value) {
+ ReusableStringStream rss;
+ rss << value;
+ if (value > Detail::hexThreshold) {
+ rss << " (0x" << std::hex << value << ')';
+ }
+ return rss.str();
+}
+
+std::string StringMaker<unsigned int>::convert(unsigned int value) {
+ return ::Catch::Detail::stringify(static_cast<unsigned long long>(value));
+}
+std::string StringMaker<unsigned long>::convert(unsigned long value) {
+ return ::Catch::Detail::stringify(static_cast<unsigned long long>(value));
+}
+std::string StringMaker<unsigned long long>::convert(unsigned long long value) {
+ ReusableStringStream rss;
+ rss << value;
+ if (value > Detail::hexThreshold) {
+ rss << " (0x" << std::hex << value << ')';
+ }
+ return rss.str();
+}
+
+std::string StringMaker<bool>::convert(bool b) {
+ return b ? "true" : "false";
+}
+
+std::string StringMaker<signed char>::convert(signed char value) {
+ if (value == '\r') {
+ return "'\\r'";
+ } else if (value == '\f') {
+ return "'\\f'";
+ } else if (value == '\n') {
+ return "'\\n'";
+ } else if (value == '\t') {
+ return "'\\t'";
+ } else if ('\0' <= value && value < ' ') {
+ return ::Catch::Detail::stringify(static_cast<unsigned int>(value));
+ } else {
+ char chstr[] = "' '";
+ chstr[1] = value;
+ return chstr;
+ }
+}
+std::string StringMaker<char>::convert(char c) {
+ return ::Catch::Detail::stringify(static_cast<signed char>(c));
+}
+std::string StringMaker<unsigned char>::convert(unsigned char c) {
+ return ::Catch::Detail::stringify(static_cast<char>(c));
+}
+
+std::string StringMaker<std::nullptr_t>::convert(std::nullptr_t) {
+ return "nullptr";
+}
+
+int StringMaker<float>::precision = 5;
+
+std::string StringMaker<float>::convert(float value) {
+ return fpToString(value, precision) + 'f';
+}
+
+int StringMaker<double>::precision = 10;
+
+std::string StringMaker<double>::convert(double value) {
+ return fpToString(value, precision);
+}
+
+std::string ratio_string<std::atto>::symbol() { return "a"; }
+std::string ratio_string<std::femto>::symbol() { return "f"; }
+std::string ratio_string<std::pico>::symbol() { return "p"; }
+std::string ratio_string<std::nano>::symbol() { return "n"; }
+std::string ratio_string<std::micro>::symbol() { return "u"; }
+std::string ratio_string<std::milli>::symbol() { return "m"; }
+
+} // end namespace Catch
+
+#if defined(__clang__)
+# pragma clang diagnostic pop
+#endif
+
+// end catch_tostring.cpp
+// start catch_totals.cpp
+
+namespace Catch {
+
+ Counts Counts::operator - ( Counts const& other ) const {
+ Counts diff;
+ diff.passed = passed - other.passed;
+ diff.failed = failed - other.failed;
+ diff.failedButOk = failedButOk - other.failedButOk;
+ return diff;
+ }
+
+ Counts& Counts::operator += ( Counts const& other ) {
+ passed += other.passed;
+ failed += other.failed;
+ failedButOk += other.failedButOk;
+ return *this;
+ }
+
+ std::size_t Counts::total() const {
+ return passed + failed + failedButOk;
+ }
+ bool Counts::allPassed() const {
+ return failed == 0 && failedButOk == 0;
+ }
+ bool Counts::allOk() const {
+ return failed == 0;
+ }
+
+ Totals Totals::operator - ( Totals const& other ) const {
+ Totals diff;
+ diff.assertions = assertions - other.assertions;
+ diff.testCases = testCases - other.testCases;
+ return diff;
+ }
+
+ Totals& Totals::operator += ( Totals const& other ) {
+ assertions += other.assertions;
+ testCases += other.testCases;
+ return *this;
+ }
+
+ Totals Totals::delta( Totals const& prevTotals ) const {
+ Totals diff = *this - prevTotals;
+ if( diff.assertions.failed > 0 )
+ ++diff.testCases.failed;
+ else if( diff.assertions.failedButOk > 0 )
+ ++diff.testCases.failedButOk;
+ else
+ ++diff.testCases.passed;
+ return diff;
+ }
+
+}
+// end catch_totals.cpp
+// start catch_uncaught_exceptions.cpp
+
+// start catch_config_uncaught_exceptions.hpp
+
+// Copyright Catch2 Authors
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// https://www.boost.org/LICENSE_1_0.txt)
+
+// SPDX-License-Identifier: BSL-1.0
+
+#ifndef CATCH_CONFIG_UNCAUGHT_EXCEPTIONS_HPP
+#define CATCH_CONFIG_UNCAUGHT_EXCEPTIONS_HPP
+
+#if defined(_MSC_VER)
+# if _MSC_VER >= 1900 // Visual Studio 2015 or newer
+# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
+# endif
+#endif
+
+#include <exception>
+
+#if defined(__cpp_lib_uncaught_exceptions) \
+ && !defined(CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS)
+
+# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
+#endif // __cpp_lib_uncaught_exceptions
+
+#if defined(CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) \
+ && !defined(CATCH_CONFIG_NO_CPP17_UNCAUGHT_EXCEPTIONS) \
+ && !defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS)
+
+# define CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
+#endif
+
+#endif // CATCH_CONFIG_UNCAUGHT_EXCEPTIONS_HPP
+// end catch_config_uncaught_exceptions.hpp
+#include <exception>
+
+namespace Catch {
+ bool uncaught_exceptions() {
+#if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)
+ return false;
+#elif defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS)
+ return std::uncaught_exceptions() > 0;
+#else
+ return std::uncaught_exception();
+#endif
+ }
+} // end namespace Catch
+// end catch_uncaught_exceptions.cpp
+// start catch_version.cpp
+
+#include <ostream>
+
+namespace Catch {
+
+ Version::Version
+ ( unsigned int _majorVersion,
+ unsigned int _minorVersion,
+ unsigned int _patchNumber,
+ char const * const _branchName,
+ unsigned int _buildNumber )
+ : majorVersion( _majorVersion ),
+ minorVersion( _minorVersion ),
+ patchNumber( _patchNumber ),
+ branchName( _branchName ),
+ buildNumber( _buildNumber )
+ {}
+
+ std::ostream& operator << ( std::ostream& os, Version const& version ) {
+ os << version.majorVersion << '.'
+ << version.minorVersion << '.'
+ << version.patchNumber;
+ // branchName is never null -> 0th char is \0 if it is empty
+ if (version.branchName[0]) {
+ os << '-' << version.branchName
+ << '.' << version.buildNumber;
+ }
+ return os;
+ }
+
+ Version const& libraryVersion() {
+ static Version version( 2, 13, 10, "", 0 );
+ return version;
+ }
+
+}
+// end catch_version.cpp
+// start catch_wildcard_pattern.cpp
+
+namespace Catch {
+
+ WildcardPattern::WildcardPattern( std::string const& pattern,
+ CaseSensitive::Choice caseSensitivity )
+ : m_caseSensitivity( caseSensitivity ),
+ m_pattern( normaliseString( pattern ) )
+ {
+ if( startsWith( m_pattern, '*' ) ) {
+ m_pattern = m_pattern.substr( 1 );
+ m_wildcard = WildcardAtStart;
+ }
+ if( endsWith( m_pattern, '*' ) ) {
+ m_pattern = m_pattern.substr( 0, m_pattern.size()-1 );
+ m_wildcard = static_cast<WildcardPosition>( m_wildcard | WildcardAtEnd );
+ }
+ }
+
+ bool WildcardPattern::matches( std::string const& str ) const {
+ switch( m_wildcard ) {
+ case NoWildcard:
+ return m_pattern == normaliseString( str );
+ case WildcardAtStart:
+ return endsWith( normaliseString( str ), m_pattern );
+ case WildcardAtEnd:
+ return startsWith( normaliseString( str ), m_pattern );
+ case WildcardAtBothEnds:
+ return contains( normaliseString( str ), m_pattern );
+ default:
+ CATCH_INTERNAL_ERROR( "Unknown enum" );
+ }
+ }
+
+ std::string WildcardPattern::normaliseString( std::string const& str ) const {
+ return trim( m_caseSensitivity == CaseSensitive::No ? toLower( str ) : str );
+ }
+}
+// end catch_wildcard_pattern.cpp
+// start catch_xmlwriter.cpp
+
+#include <iomanip>
+#include <type_traits>
+
+namespace Catch {
+
+namespace {
+
+ size_t trailingBytes(unsigned char c) {
+ if ((c & 0xE0) == 0xC0) {
+ return 2;
+ }
+ if ((c & 0xF0) == 0xE0) {
+ return 3;
+ }
+ if ((c & 0xF8) == 0xF0) {
+ return 4;
+ }
+ CATCH_INTERNAL_ERROR("Invalid multibyte utf-8 start byte encountered");
+ }
+
+ uint32_t headerValue(unsigned char c) {
+ if ((c & 0xE0) == 0xC0) {
+ return c & 0x1F;
+ }
+ if ((c & 0xF0) == 0xE0) {
+ return c & 0x0F;
+ }
+ if ((c & 0xF8) == 0xF0) {
+ return c & 0x07;
+ }
+ CATCH_INTERNAL_ERROR("Invalid multibyte utf-8 start byte encountered");
+ }
+
+ void hexEscapeChar(std::ostream& os, unsigned char c) {
+ std::ios_base::fmtflags f(os.flags());
+ os << "\\x"
+ << std::uppercase << std::hex << std::setfill('0') << std::setw(2)
+ << static_cast<int>(c);
+ os.flags(f);
+ }
+
+ bool shouldNewline(XmlFormatting fmt) {
+ return !!(static_cast<std::underlying_type<XmlFormatting>::type>(fmt & XmlFormatting::Newline));
+ }
+
+ bool shouldIndent(XmlFormatting fmt) {
+ return !!(static_cast<std::underlying_type<XmlFormatting>::type>(fmt & XmlFormatting::Indent));
+ }
+
+} // anonymous namespace
+
+ XmlFormatting operator | (XmlFormatting lhs, XmlFormatting rhs) {
+ return static_cast<XmlFormatting>(
+ static_cast<std::underlying_type<XmlFormatting>::type>(lhs) |
+ static_cast<std::underlying_type<XmlFormatting>::type>(rhs)
+ );
+ }
+
+ XmlFormatting operator & (XmlFormatting lhs, XmlFormatting rhs) {
+ return static_cast<XmlFormatting>(
+ static_cast<std::underlying_type<XmlFormatting>::type>(lhs) &
+ static_cast<std::underlying_type<XmlFormatting>::type>(rhs)
+ );
+ }
+
+ XmlEncode::XmlEncode( std::string const& str, ForWhat forWhat )
+ : m_str( str ),
+ m_forWhat( forWhat )
+ {}
+
+ void XmlEncode::encodeTo( std::ostream& os ) const {
+ // Apostrophe escaping not necessary if we always use " to write attributes
+ // (see: http://www.w3.org/TR/xml/#syntax)
+
+ for( std::size_t idx = 0; idx < m_str.size(); ++ idx ) {
+ unsigned char c = m_str[idx];
+ switch (c) {
+ case '<': os << "&lt;"; break;
+ case '&': os << "&amp;"; break;
+
+ case '>':
+ // See: http://www.w3.org/TR/xml/#syntax
+ if (idx > 2 && m_str[idx - 1] == ']' && m_str[idx - 2] == ']')
+ os << "&gt;";
+ else
+ os << c;
+ break;
+
+ case '\"':
+ if (m_forWhat == ForAttributes)
+ os << "&quot;";
+ else
+ os << c;
+ break;
+
+ default:
+ // Check for control characters and invalid utf-8
+
+ // Escape control characters in standard ascii
+ // see http://stackoverflow.com/questions/404107/why-are-control-characters-illegal-in-xml-1-0
+ if (c < 0x09 || (c > 0x0D && c < 0x20) || c == 0x7F) {
+ hexEscapeChar(os, c);
+ break;
+ }
+
+ // Plain ASCII: Write it to stream
+ if (c < 0x7F) {
+ os << c;
+ break;
+ }
+
+ // UTF-8 territory
+ // Check if the encoding is valid and if it is not, hex escape bytes.
+ // Important: We do not check the exact decoded values for validity, only the encoding format
+ // First check that this bytes is a valid lead byte:
+ // This means that it is not encoded as 1111 1XXX
+ // Or as 10XX XXXX
+ if (c < 0xC0 ||
+ c >= 0xF8) {
+ hexEscapeChar(os, c);
+ break;
+ }
+
+ auto encBytes = trailingBytes(c);
+ // Are there enough bytes left to avoid accessing out-of-bounds memory?
+ if (idx + encBytes - 1 >= m_str.size()) {
+ hexEscapeChar(os, c);
+ break;
+ }
+ // The header is valid, check data
+ // The next encBytes bytes must together be a valid utf-8
+ // This means: bitpattern 10XX XXXX and the extracted value is sane (ish)
+ bool valid = true;
+ uint32_t value = headerValue(c);
+ for (std::size_t n = 1; n < encBytes; ++n) {
+ unsigned char nc = m_str[idx + n];
+ valid &= ((nc & 0xC0) == 0x80);
+ value = (value << 6) | (nc & 0x3F);
+ }
+
+ if (
+ // Wrong bit pattern of following bytes
+ (!valid) ||
+ // Overlong encodings
+ (value < 0x80) ||
+ (0x80 <= value && value < 0x800 && encBytes > 2) ||
+ (0x800 < value && value < 0x10000 && encBytes > 3) ||
+ // Encoded value out of range
+ (value >= 0x110000)
+ ) {
+ hexEscapeChar(os, c);
+ break;
+ }
+
+ // If we got here, this is in fact a valid(ish) utf-8 sequence
+ for (std::size_t n = 0; n < encBytes; ++n) {
+ os << m_str[idx + n];
+ }
+ idx += encBytes - 1;
+ break;
+ }
+ }
+ }
+
+ std::ostream& operator << ( std::ostream& os, XmlEncode const& xmlEncode ) {
+ xmlEncode.encodeTo( os );
+ return os;
+ }
+
+ XmlWriter::ScopedElement::ScopedElement( XmlWriter* writer, XmlFormatting fmt )
+ : m_writer( writer ),
+ m_fmt(fmt)
+ {}
+
+ XmlWriter::ScopedElement::ScopedElement( ScopedElement&& other ) noexcept
+ : m_writer( other.m_writer ),
+ m_fmt(other.m_fmt)
+ {
+ other.m_writer = nullptr;
+ other.m_fmt = XmlFormatting::None;
+ }
+ XmlWriter::ScopedElement& XmlWriter::ScopedElement::operator=( ScopedElement&& other ) noexcept {
+ if ( m_writer ) {
+ m_writer->endElement();
+ }
+ m_writer = other.m_writer;
+ other.m_writer = nullptr;
+ m_fmt = other.m_fmt;
+ other.m_fmt = XmlFormatting::None;
+ return *this;
+ }
+
+ XmlWriter::ScopedElement::~ScopedElement() {
+ if (m_writer) {
+ m_writer->endElement(m_fmt);
+ }
+ }
+
+ XmlWriter::ScopedElement& XmlWriter::ScopedElement::writeText( std::string const& text, XmlFormatting fmt ) {
+ m_writer->writeText( text, fmt );
+ return *this;
+ }
+
+ XmlWriter::XmlWriter( std::ostream& os ) : m_os( os )
+ {
+ writeDeclaration();
+ }
+
+ XmlWriter::~XmlWriter() {
+ while (!m_tags.empty()) {
+ endElement();
+ }
+ newlineIfNecessary();
+ }
+
+ XmlWriter& XmlWriter::startElement( std::string const& name, XmlFormatting fmt ) {
+ ensureTagClosed();
+ newlineIfNecessary();
+ if (shouldIndent(fmt)) {
+ m_os << m_indent;
+ m_indent += " ";
+ }
+ m_os << '<' << name;
+ m_tags.push_back( name );
+ m_tagIsOpen = true;
+ applyFormatting(fmt);
+ return *this;
+ }
+
+ XmlWriter::ScopedElement XmlWriter::scopedElement( std::string const& name, XmlFormatting fmt ) {
+ ScopedElement scoped( this, fmt );
+ startElement( name, fmt );
+ return scoped;
+ }
+
+ XmlWriter& XmlWriter::endElement(XmlFormatting fmt) {
+ m_indent = m_indent.substr(0, m_indent.size() - 2);
+
+ if( m_tagIsOpen ) {
+ m_os << "/>";
+ m_tagIsOpen = false;
+ } else {
+ newlineIfNecessary();
+ if (shouldIndent(fmt)) {
+ m_os << m_indent;
+ }
+ m_os << "</" << m_tags.back() << ">";
+ }
+ m_os << std::flush;
+ applyFormatting(fmt);
+ m_tags.pop_back();
+ return *this;
+ }
+
+ XmlWriter& XmlWriter::writeAttribute( std::string const& name, std::string const& attribute ) {
+ if( !name.empty() && !attribute.empty() )
+ m_os << ' ' << name << "=\"" << XmlEncode( attribute, XmlEncode::ForAttributes ) << '"';
+ return *this;
+ }
+
+ XmlWriter& XmlWriter::writeAttribute( std::string const& name, bool attribute ) {
+ m_os << ' ' << name << "=\"" << ( attribute ? "true" : "false" ) << '"';
+ return *this;
+ }
+
+ XmlWriter& XmlWriter::writeText( std::string const& text, XmlFormatting fmt) {
+ if( !text.empty() ){
+ bool tagWasOpen = m_tagIsOpen;
+ ensureTagClosed();
+ if (tagWasOpen && shouldIndent(fmt)) {
+ m_os << m_indent;
+ }
+ m_os << XmlEncode( text );
+ applyFormatting(fmt);
+ }
+ return *this;
+ }
+
+ XmlWriter& XmlWriter::writeComment( std::string const& text, XmlFormatting fmt) {
+ ensureTagClosed();
+ if (shouldIndent(fmt)) {
+ m_os << m_indent;
+ }
+ m_os << "<!--" << text << "-->";
+ applyFormatting(fmt);
+ return *this;
+ }
+
+ void XmlWriter::writeStylesheetRef( std::string const& url ) {
+ m_os << "<?xml-stylesheet type=\"text/xsl\" href=\"" << url << "\"?>\n";
+ }
+
+ XmlWriter& XmlWriter::writeBlankLine() {
+ ensureTagClosed();
+ m_os << '\n';
+ return *this;
+ }
+
+ void XmlWriter::ensureTagClosed() {
+ if( m_tagIsOpen ) {
+ m_os << '>' << std::flush;
+ newlineIfNecessary();
+ m_tagIsOpen = false;
+ }
+ }
+
+ void XmlWriter::applyFormatting(XmlFormatting fmt) {
+ m_needsNewline = shouldNewline(fmt);
+ }
+
+ void XmlWriter::writeDeclaration() {
+ m_os << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+ }
+
+ void XmlWriter::newlineIfNecessary() {
+ if( m_needsNewline ) {
+ m_os << std::endl;
+ m_needsNewline = false;
+ }
+ }
+}
+// end catch_xmlwriter.cpp
+// start catch_reporter_bases.cpp
+
+#include <cstring>
+#include <cfloat>
+#include <cstdio>
+#include <cassert>
+#include <memory>
+
+namespace Catch {
+ void prepareExpandedExpression(AssertionResult& result) {
+ result.getExpandedExpression();
+ }
+
+ // Because formatting using c++ streams is stateful, drop down to C is required
+ // Alternatively we could use stringstream, but its performance is... not good.
+ std::string getFormattedDuration( double duration ) {
+ // Max exponent + 1 is required to represent the whole part
+ // + 1 for decimal point
+ // + 3 for the 3 decimal places
+ // + 1 for null terminator
+ const std::size_t maxDoubleSize = DBL_MAX_10_EXP + 1 + 1 + 3 + 1;
+ char buffer[maxDoubleSize];
+
+ // Save previous errno, to prevent sprintf from overwriting it
+ ErrnoGuard guard;
+#ifdef _MSC_VER
+ sprintf_s(buffer, "%.3f", duration);
+#else
+ std::sprintf(buffer, "%.3f", duration);
+#endif
+ return std::string(buffer);
+ }
+
+ bool shouldShowDuration( IConfig const& config, double duration ) {
+ if ( config.showDurations() == ShowDurations::Always ) {
+ return true;
+ }
+ if ( config.showDurations() == ShowDurations::Never ) {
+ return false;
+ }
+ const double min = config.minDuration();
+ return min >= 0 && duration >= min;
+ }
+
+ std::string serializeFilters( std::vector<std::string> const& container ) {
+ ReusableStringStream oss;
+ bool first = true;
+ for (auto&& filter : container)
+ {
+ if (!first)
+ oss << ' ';
+ else
+ first = false;
+
+ oss << filter;
+ }
+ return oss.str();
+ }
+
+ TestEventListenerBase::TestEventListenerBase(ReporterConfig const & _config)
+ :StreamingReporterBase(_config) {}
+
+ std::set<Verbosity> TestEventListenerBase::getSupportedVerbosities() {
+ return { Verbosity::Quiet, Verbosity::Normal, Verbosity::High };
+ }
+
+ void TestEventListenerBase::assertionStarting(AssertionInfo const &) {}
+
+ bool TestEventListenerBase::assertionEnded(AssertionStats const &) {
+ return false;
+ }
+
+} // end namespace Catch
+// end catch_reporter_bases.cpp
+// start catch_reporter_compact.cpp
+
+namespace {
+
+#ifdef CATCH_PLATFORM_MAC
+ const char* failedString() { return "FAILED"; }
+ const char* passedString() { return "PASSED"; }
+#else
+ const char* failedString() { return "failed"; }
+ const char* passedString() { return "passed"; }
+#endif
+
+ // Colour::LightGrey
+ Catch::Colour::Code dimColour() { return Catch::Colour::FileName; }
+
+ std::string bothOrAll( std::size_t count ) {
+ return count == 1 ? std::string() :
+ count == 2 ? "both " : "all " ;
+ }
+
+} // anon namespace
+
+namespace Catch {
+namespace {
+// Colour, message variants:
+// - white: No tests ran.
+// - red: Failed [both/all] N test cases, failed [both/all] M assertions.
+// - white: Passed [both/all] N test cases (no assertions).
+// - red: Failed N tests cases, failed M assertions.
+// - green: Passed [both/all] N tests cases with M assertions.
+void printTotals(std::ostream& out, const Totals& totals) {
+ if (totals.testCases.total() == 0) {
+ out << "No tests ran.";
+ } else if (totals.testCases.failed == totals.testCases.total()) {
+ Colour colour(Colour::ResultError);
+ const std::string qualify_assertions_failed =
+ totals.assertions.failed == totals.assertions.total() ?
+ bothOrAll(totals.assertions.failed) : std::string();
+ out <<
+ "Failed " << bothOrAll(totals.testCases.failed)
+ << pluralise(totals.testCases.failed, "test case") << ", "
+ "failed " << qualify_assertions_failed <<
+ pluralise(totals.assertions.failed, "assertion") << '.';
+ } else if (totals.assertions.total() == 0) {
+ out <<
+ "Passed " << bothOrAll(totals.testCases.total())
+ << pluralise(totals.testCases.total(), "test case")
+ << " (no assertions).";
+ } else if (totals.assertions.failed) {
+ Colour colour(Colour::ResultError);
+ out <<
+ "Failed " << pluralise(totals.testCases.failed, "test case") << ", "
+ "failed " << pluralise(totals.assertions.failed, "assertion") << '.';
+ } else {
+ Colour colour(Colour::ResultSuccess);
+ out <<
+ "Passed " << bothOrAll(totals.testCases.passed)
+ << pluralise(totals.testCases.passed, "test case") <<
+ " with " << pluralise(totals.assertions.passed, "assertion") << '.';
+ }
+}
+
+// Implementation of CompactReporter formatting
+class AssertionPrinter {
+public:
+ AssertionPrinter& operator= (AssertionPrinter const&) = delete;
+ AssertionPrinter(AssertionPrinter const&) = delete;
+ AssertionPrinter(std::ostream& _stream, AssertionStats const& _stats, bool _printInfoMessages)
+ : stream(_stream)
+ , result(_stats.assertionResult)
+ , messages(_stats.infoMessages)
+ , itMessage(_stats.infoMessages.begin())
+ , printInfoMessages(_printInfoMessages) {}
+
+ void print() {
+ printSourceInfo();
+
+ itMessage = messages.begin();
+
+ switch (result.getResultType()) {
+ case ResultWas::Ok:
+ printResultType(Colour::ResultSuccess, passedString());
+ printOriginalExpression();
+ printReconstructedExpression();
+ if (!result.hasExpression())
+ printRemainingMessages(Colour::None);
+ else
+ printRemainingMessages();
+ break;
+ case ResultWas::ExpressionFailed:
+ if (result.isOk())
+ printResultType(Colour::ResultSuccess, failedString() + std::string(" - but was ok"));
+ else
+ printResultType(Colour::Error, failedString());
+ printOriginalExpression();
+ printReconstructedExpression();
+ printRemainingMessages();
+ break;
+ case ResultWas::ThrewException:
+ printResultType(Colour::Error, failedString());
+ printIssue("unexpected exception with message:");
+ printMessage();
+ printExpressionWas();
+ printRemainingMessages();
+ break;
+ case ResultWas::FatalErrorCondition:
+ printResultType(Colour::Error, failedString());
+ printIssue("fatal error condition with message:");
+ printMessage();
+ printExpressionWas();
+ printRemainingMessages();
+ break;
+ case ResultWas::DidntThrowException:
+ printResultType(Colour::Error, failedString());
+ printIssue("expected exception, got none");
+ printExpressionWas();
+ printRemainingMessages();
+ break;
+ case ResultWas::Info:
+ printResultType(Colour::None, "info");
+ printMessage();
+ printRemainingMessages();
+ break;
+ case ResultWas::Warning:
+ printResultType(Colour::None, "warning");
+ printMessage();
+ printRemainingMessages();
+ break;
+ case ResultWas::ExplicitFailure:
+ printResultType(Colour::Error, failedString());
+ printIssue("explicitly");
+ printRemainingMessages(Colour::None);
+ break;
+ // These cases are here to prevent compiler warnings
+ case ResultWas::Unknown:
+ case ResultWas::FailureBit:
+ case ResultWas::Exception:
+ printResultType(Colour::Error, "** internal error **");
+ break;
+ }
+ }
+
+private:
+ void printSourceInfo() const {
+ Colour colourGuard(Colour::FileName);
+ stream << result.getSourceInfo() << ':';
+ }
+
+ void printResultType(Colour::Code colour, std::string const& passOrFail) const {
+ if (!passOrFail.empty()) {
+ {
+ Colour colourGuard(colour);
+ stream << ' ' << passOrFail;
+ }
+ stream << ':';
+ }
+ }
+
+ void printIssue(std::string const& issue) const {
+ stream << ' ' << issue;
+ }
+
+ void printExpressionWas() {
+ if (result.hasExpression()) {
+ stream << ';';
+ {
+ Colour colour(dimColour());
+ stream << " expression was:";
+ }
+ printOriginalExpression();
+ }
+ }
+
+ void printOriginalExpression() const {
+ if (result.hasExpression()) {
+ stream << ' ' << result.getExpression();
+ }
+ }
+
+ void printReconstructedExpression() const {
+ if (result.hasExpandedExpression()) {
+ {
+ Colour colour(dimColour());
+ stream << " for: ";
+ }
+ stream << result.getExpandedExpression();
+ }
+ }
+
+ void printMessage() {
+ if (itMessage != messages.end()) {
+ stream << " '" << itMessage->message << '\'';
+ ++itMessage;
+ }
+ }
+
+ void printRemainingMessages(Colour::Code colour = dimColour()) {
+ if (itMessage == messages.end())
+ return;
+
+ const auto itEnd = messages.cend();
+ const auto N = static_cast<std::size_t>(std::distance(itMessage, itEnd));
+
+ {
+ Colour colourGuard(colour);
+ stream << " with " << pluralise(N, "message") << ':';
+ }
+
+ while (itMessage != itEnd) {
+ // If this assertion is a warning ignore any INFO messages
+ if (printInfoMessages || itMessage->type != ResultWas::Info) {
+ printMessage();
+ if (itMessage != itEnd) {
+ Colour colourGuard(dimColour());
+ stream << " and";
+ }
+ continue;
+ }
+ ++itMessage;
+ }
+ }
+
+private:
+ std::ostream& stream;
+ AssertionResult const& result;
+ std::vector<MessageInfo> messages;
+ std::vector<MessageInfo>::const_iterator itMessage;
+ bool printInfoMessages;
+};
+
+} // anon namespace
+
+ std::string CompactReporter::getDescription() {
+ return "Reports test results on a single line, suitable for IDEs";
+ }
+
+ void CompactReporter::noMatchingTestCases( std::string const& spec ) {
+ stream << "No test cases matched '" << spec << '\'' << std::endl;
+ }
+
+ void CompactReporter::assertionStarting( AssertionInfo const& ) {}
+
+ bool CompactReporter::assertionEnded( AssertionStats const& _assertionStats ) {
+ AssertionResult const& result = _assertionStats.assertionResult;
+
+ bool printInfoMessages = true;
+
+ // Drop out if result was successful and we're not printing those
+ if( !m_config->includeSuccessfulResults() && result.isOk() ) {
+ if( result.getResultType() != ResultWas::Warning )
+ return false;
+ printInfoMessages = false;
+ }
+
+ AssertionPrinter printer( stream, _assertionStats, printInfoMessages );
+ printer.print();
+
+ stream << std::endl;
+ return true;
+ }
+
+ void CompactReporter::sectionEnded(SectionStats const& _sectionStats) {
+ double dur = _sectionStats.durationInSeconds;
+ if ( shouldShowDuration( *m_config, dur ) ) {
+ stream << getFormattedDuration( dur ) << " s: " << _sectionStats.sectionInfo.name << std::endl;
+ }
+ }
+
+ void CompactReporter::testRunEnded( TestRunStats const& _testRunStats ) {
+ printTotals( stream, _testRunStats.totals );
+ stream << '\n' << std::endl;
+ StreamingReporterBase::testRunEnded( _testRunStats );
+ }
+
+ CompactReporter::~CompactReporter() {}
+
+ CATCH_REGISTER_REPORTER( "compact", CompactReporter )
+
+} // end namespace Catch
+// end catch_reporter_compact.cpp
+// start catch_reporter_console.cpp
+
+#include <cfloat>
+#include <cstdio>
+
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4061) // Not all labels are EXPLICITLY handled in switch
+ // Note that 4062 (not all labels are handled and default is missing) is enabled
+#endif
+
+#if defined(__clang__)
+# pragma clang diagnostic push
+// For simplicity, benchmarking-only helpers are always enabled
+# pragma clang diagnostic ignored "-Wunused-function"
+#endif
+
+namespace Catch {
+
+namespace {
+
+// Formatter impl for ConsoleReporter
+class ConsoleAssertionPrinter {
+public:
+ ConsoleAssertionPrinter& operator= (ConsoleAssertionPrinter const&) = delete;
+ ConsoleAssertionPrinter(ConsoleAssertionPrinter const&) = delete;
+ ConsoleAssertionPrinter(std::ostream& _stream, AssertionStats const& _stats, bool _printInfoMessages)
+ : stream(_stream),
+ stats(_stats),
+ result(_stats.assertionResult),
+ colour(Colour::None),
+ message(result.getMessage()),
+ messages(_stats.infoMessages),
+ printInfoMessages(_printInfoMessages) {
+ switch (result.getResultType()) {
+ case ResultWas::Ok:
+ colour = Colour::Success;
+ passOrFail = "PASSED";
+ //if( result.hasMessage() )
+ if (_stats.infoMessages.size() == 1)
+ messageLabel = "with message";
+ if (_stats.infoMessages.size() > 1)
+ messageLabel = "with messages";
+ break;
+ case ResultWas::ExpressionFailed:
+ if (result.isOk()) {
+ colour = Colour::Success;
+ passOrFail = "FAILED - but was ok";
+ } else {
+ colour = Colour::Error;
+ passOrFail = "FAILED";
+ }
+ if (_stats.infoMessages.size() == 1)
+ messageLabel = "with message";
+ if (_stats.infoMessages.size() > 1)
+ messageLabel = "with messages";
+ break;
+ case ResultWas::ThrewException:
+ colour = Colour::Error;
+ passOrFail = "FAILED";
+ messageLabel = "due to unexpected exception with ";
+ if (_stats.infoMessages.size() == 1)
+ messageLabel += "message";
+ if (_stats.infoMessages.size() > 1)
+ messageLabel += "messages";
+ break;
+ case ResultWas::FatalErrorCondition:
+ colour = Colour::Error;
+ passOrFail = "FAILED";
+ messageLabel = "due to a fatal error condition";
+ break;
+ case ResultWas::DidntThrowException:
+ colour = Colour::Error;
+ passOrFail = "FAILED";
+ messageLabel = "because no exception was thrown where one was expected";
+ break;
+ case ResultWas::Info:
+ messageLabel = "info";
+ break;
+ case ResultWas::Warning:
+ messageLabel = "warning";
+ break;
+ case ResultWas::ExplicitFailure:
+ passOrFail = "FAILED";
+ colour = Colour::Error;
+ if (_stats.infoMessages.size() == 1)
+ messageLabel = "explicitly with message";
+ if (_stats.infoMessages.size() > 1)
+ messageLabel = "explicitly with messages";
+ break;
+ // These cases are here to prevent compiler warnings
+ case ResultWas::Unknown:
+ case ResultWas::FailureBit:
+ case ResultWas::Exception:
+ passOrFail = "** internal error **";
+ colour = Colour::Error;
+ break;
+ }
+ }
+
+ void print() const {
+ printSourceInfo();
+ if (stats.totals.assertions.total() > 0) {
+ printResultType();
+ printOriginalExpression();
+ printReconstructedExpression();
+ } else {
+ stream << '\n';
+ }
+ printMessage();
+ }
+
+private:
+ void printResultType() const {
+ if (!passOrFail.empty()) {
+ Colour colourGuard(colour);
+ stream << passOrFail << ":\n";
+ }
+ }
+ void printOriginalExpression() const {
+ if (result.hasExpression()) {
+ Colour colourGuard(Colour::OriginalExpression);
+ stream << " ";
+ stream << result.getExpressionInMacro();
+ stream << '\n';
+ }
+ }
+ void printReconstructedExpression() const {
+ if (result.hasExpandedExpression()) {
+ stream << "with expansion:\n";
+ Colour colourGuard(Colour::ReconstructedExpression);
+ stream << Column(result.getExpandedExpression()).indent(2) << '\n';
+ }
+ }
+ void printMessage() const {
+ if (!messageLabel.empty())
+ stream << messageLabel << ':' << '\n';
+ for (auto const& msg : messages) {
+ // If this assertion is a warning ignore any INFO messages
+ if (printInfoMessages || msg.type != ResultWas::Info)
+ stream << Column(msg.message).indent(2) << '\n';
+ }
+ }
+ void printSourceInfo() const {
+ Colour colourGuard(Colour::FileName);
+ stream << result.getSourceInfo() << ": ";
+ }
+
+ std::ostream& stream;
+ AssertionStats const& stats;
+ AssertionResult const& result;
+ Colour::Code colour;
+ std::string passOrFail;
+ std::string messageLabel;
+ std::string message;
+ std::vector<MessageInfo> messages;
+ bool printInfoMessages;
+};
+
+std::size_t makeRatio(std::size_t number, std::size_t total) {
+ std::size_t ratio = total > 0 ? CATCH_CONFIG_CONSOLE_WIDTH * number / total : 0;
+ return (ratio == 0 && number > 0) ? 1 : ratio;
+}
+
+std::size_t& findMax(std::size_t& i, std::size_t& j, std::size_t& k) {
+ if (i > j && i > k)
+ return i;
+ else if (j > k)
+ return j;
+ else
+ return k;
+}
+
+struct ColumnInfo {
+ enum Justification { Left, Right };
+ std::string name;
+ int width;
+ Justification justification;
+};
+struct ColumnBreak {};
+struct RowBreak {};
+
+class Duration {
+ enum class Unit {
+ Auto,
+ Nanoseconds,
+ Microseconds,
+ Milliseconds,
+ Seconds,
+ Minutes
+ };
+ static const uint64_t s_nanosecondsInAMicrosecond = 1000;
+ static const uint64_t s_nanosecondsInAMillisecond = 1000 * s_nanosecondsInAMicrosecond;
+ static const uint64_t s_nanosecondsInASecond = 1000 * s_nanosecondsInAMillisecond;
+ static const uint64_t s_nanosecondsInAMinute = 60 * s_nanosecondsInASecond;
+
+ double m_inNanoseconds;
+ Unit m_units;
+
+public:
+ explicit Duration(double inNanoseconds, Unit units = Unit::Auto)
+ : m_inNanoseconds(inNanoseconds),
+ m_units(units) {
+ if (m_units == Unit::Auto) {
+ if (m_inNanoseconds < s_nanosecondsInAMicrosecond)
+ m_units = Unit::Nanoseconds;
+ else if (m_inNanoseconds < s_nanosecondsInAMillisecond)
+ m_units = Unit::Microseconds;
+ else if (m_inNanoseconds < s_nanosecondsInASecond)
+ m_units = Unit::Milliseconds;
+ else if (m_inNanoseconds < s_nanosecondsInAMinute)
+ m_units = Unit::Seconds;
+ else
+ m_units = Unit::Minutes;
+ }
+
+ }
+
+ auto value() const -> double {
+ switch (m_units) {
+ case Unit::Microseconds:
+ return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMicrosecond);
+ case Unit::Milliseconds:
+ return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMillisecond);
+ case Unit::Seconds:
+ return m_inNanoseconds / static_cast<double>(s_nanosecondsInASecond);
+ case Unit::Minutes:
+ return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMinute);
+ default:
+ return m_inNanoseconds;
+ }
+ }
+ auto unitsAsString() const -> std::string {
+ switch (m_units) {
+ case Unit::Nanoseconds:
+ return "ns";
+ case Unit::Microseconds:
+ return "us";
+ case Unit::Milliseconds:
+ return "ms";
+ case Unit::Seconds:
+ return "s";
+ case Unit::Minutes:
+ return "m";
+ default:
+ return "** internal error **";
+ }
+
+ }
+ friend auto operator << (std::ostream& os, Duration const& duration) -> std::ostream& {
+ return os << duration.value() << ' ' << duration.unitsAsString();
+ }
+};
+} // end anon namespace
+
+class TablePrinter {
+ std::ostream& m_os;
+ std::vector<ColumnInfo> m_columnInfos;
+ std::ostringstream m_oss;
+ int m_currentColumn = -1;
+ bool m_isOpen = false;
+
+public:
+ TablePrinter( std::ostream& os, std::vector<ColumnInfo> columnInfos )
+ : m_os( os ),
+ m_columnInfos( std::move( columnInfos ) ) {}
+
+ auto columnInfos() const -> std::vector<ColumnInfo> const& {
+ return m_columnInfos;
+ }
+
+ void open() {
+ if (!m_isOpen) {
+ m_isOpen = true;
+ *this << RowBreak();
+
+ Columns headerCols;
+ Spacer spacer(2);
+ for (auto const& info : m_columnInfos) {
+ headerCols += Column(info.name).width(static_cast<std::size_t>(info.width - 2));
+ headerCols += spacer;
+ }
+ m_os << headerCols << '\n';
+
+ m_os << Catch::getLineOfChars<'-'>() << '\n';
+ }
+ }
+ void close() {
+ if (m_isOpen) {
+ *this << RowBreak();
+ m_os << std::endl;
+ m_isOpen = false;
+ }
+ }
+
+ template<typename T>
+ friend TablePrinter& operator << (TablePrinter& tp, T const& value) {
+ tp.m_oss << value;
+ return tp;
+ }
+
+ friend TablePrinter& operator << (TablePrinter& tp, ColumnBreak) {
+ auto colStr = tp.m_oss.str();
+ const auto strSize = colStr.size();
+ tp.m_oss.str("");
+ tp.open();
+ if (tp.m_currentColumn == static_cast<int>(tp.m_columnInfos.size() - 1)) {
+ tp.m_currentColumn = -1;
+ tp.m_os << '\n';
+ }
+ tp.m_currentColumn++;
+
+ auto colInfo = tp.m_columnInfos[tp.m_currentColumn];
+ auto padding = (strSize + 1 < static_cast<std::size_t>(colInfo.width))
+ ? std::string(colInfo.width - (strSize + 1), ' ')
+ : std::string();
+ if (colInfo.justification == ColumnInfo::Left)
+ tp.m_os << colStr << padding << ' ';
+ else
+ tp.m_os << padding << colStr << ' ';
+ return tp;
+ }
+
+ friend TablePrinter& operator << (TablePrinter& tp, RowBreak) {
+ if (tp.m_currentColumn > 0) {
+ tp.m_os << '\n';
+ tp.m_currentColumn = -1;
+ }
+ return tp;
+ }
+};
+
+ConsoleReporter::ConsoleReporter(ReporterConfig const& config)
+ : StreamingReporterBase(config),
+ m_tablePrinter(new TablePrinter(config.stream(),
+ [&config]() -> std::vector<ColumnInfo> {
+ if (config.fullConfig()->benchmarkNoAnalysis())
+ {
+ return{
+ { "benchmark name", CATCH_CONFIG_CONSOLE_WIDTH - 43, ColumnInfo::Left },
+ { " samples", 14, ColumnInfo::Right },
+ { " iterations", 14, ColumnInfo::Right },
+ { " mean", 14, ColumnInfo::Right }
+ };
+ }
+ else
+ {
+ return{
+ { "benchmark name", CATCH_CONFIG_CONSOLE_WIDTH - 43, ColumnInfo::Left },
+ { "samples mean std dev", 14, ColumnInfo::Right },
+ { "iterations low mean low std dev", 14, ColumnInfo::Right },
+ { "estimated high mean high std dev", 14, ColumnInfo::Right }
+ };
+ }
+ }())) {}
+ConsoleReporter::~ConsoleReporter() = default;
+
+std::string ConsoleReporter::getDescription() {
+ return "Reports test results as plain lines of text";
+}
+
+void ConsoleReporter::noMatchingTestCases(std::string const& spec) {
+ stream << "No test cases matched '" << spec << '\'' << std::endl;
+}
+
+void ConsoleReporter::reportInvalidArguments(std::string const&arg){
+ stream << "Invalid Filter: " << arg << std::endl;
+}
+
+void ConsoleReporter::assertionStarting(AssertionInfo const&) {}
+
+bool ConsoleReporter::assertionEnded(AssertionStats const& _assertionStats) {
+ AssertionResult const& result = _assertionStats.assertionResult;
+
+ bool includeResults = m_config->includeSuccessfulResults() || !result.isOk();
+
+ // Drop out if result was successful but we're not printing them.
+ if (!includeResults && result.getResultType() != ResultWas::Warning)
+ return false;
+
+ lazyPrint();
+
+ ConsoleAssertionPrinter printer(stream, _assertionStats, includeResults);
+ printer.print();
+ stream << std::endl;
+ return true;
+}
+
+void ConsoleReporter::sectionStarting(SectionInfo const& _sectionInfo) {
+ m_tablePrinter->close();
+ m_headerPrinted = false;
+ StreamingReporterBase::sectionStarting(_sectionInfo);
+}
+void ConsoleReporter::sectionEnded(SectionStats const& _sectionStats) {
+ m_tablePrinter->close();
+ if (_sectionStats.missingAssertions) {
+ lazyPrint();
+ Colour colour(Colour::ResultError);
+ if (m_sectionStack.size() > 1)
+ stream << "\nNo assertions in section";
+ else
+ stream << "\nNo assertions in test case";
+ stream << " '" << _sectionStats.sectionInfo.name << "'\n" << std::endl;
+ }
+ double dur = _sectionStats.durationInSeconds;
+ if (shouldShowDuration(*m_config, dur)) {
+ stream << getFormattedDuration(dur) << " s: " << _sectionStats.sectionInfo.name << std::endl;
+ }
+ if (m_headerPrinted) {
+ m_headerPrinted = false;
+ }
+ StreamingReporterBase::sectionEnded(_sectionStats);
+}
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+void ConsoleReporter::benchmarkPreparing(std::string const& name) {
+ lazyPrintWithoutClosingBenchmarkTable();
+
+ auto nameCol = Column(name).width(static_cast<std::size_t>(m_tablePrinter->columnInfos()[0].width - 2));
+
+ bool firstLine = true;
+ for (auto line : nameCol) {
+ if (!firstLine)
+ (*m_tablePrinter) << ColumnBreak() << ColumnBreak() << ColumnBreak();
+ else
+ firstLine = false;
+
+ (*m_tablePrinter) << line << ColumnBreak();
+ }
+}
+
+void ConsoleReporter::benchmarkStarting(BenchmarkInfo const& info) {
+ (*m_tablePrinter) << info.samples << ColumnBreak()
+ << info.iterations << ColumnBreak();
+ if (!m_config->benchmarkNoAnalysis())
+ (*m_tablePrinter) << Duration(info.estimatedDuration) << ColumnBreak();
+}
+void ConsoleReporter::benchmarkEnded(BenchmarkStats<> const& stats) {
+ if (m_config->benchmarkNoAnalysis())
+ {
+ (*m_tablePrinter) << Duration(stats.mean.point.count()) << ColumnBreak();
+ }
+ else
+ {
+ (*m_tablePrinter) << ColumnBreak()
+ << Duration(stats.mean.point.count()) << ColumnBreak()
+ << Duration(stats.mean.lower_bound.count()) << ColumnBreak()
+ << Duration(stats.mean.upper_bound.count()) << ColumnBreak() << ColumnBreak()
+ << Duration(stats.standardDeviation.point.count()) << ColumnBreak()
+ << Duration(stats.standardDeviation.lower_bound.count()) << ColumnBreak()
+ << Duration(stats.standardDeviation.upper_bound.count()) << ColumnBreak() << ColumnBreak() << ColumnBreak() << ColumnBreak() << ColumnBreak();
+ }
+}
+
+void ConsoleReporter::benchmarkFailed(std::string const& error) {
+ Colour colour(Colour::Red);
+ (*m_tablePrinter)
+ << "Benchmark failed (" << error << ')'
+ << ColumnBreak() << RowBreak();
+}
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+void ConsoleReporter::testCaseEnded(TestCaseStats const& _testCaseStats) {
+ m_tablePrinter->close();
+ StreamingReporterBase::testCaseEnded(_testCaseStats);
+ m_headerPrinted = false;
+}
+void ConsoleReporter::testGroupEnded(TestGroupStats const& _testGroupStats) {
+ if (currentGroupInfo.used) {
+ printSummaryDivider();
+ stream << "Summary for group '" << _testGroupStats.groupInfo.name << "':\n";
+ printTotals(_testGroupStats.totals);
+ stream << '\n' << std::endl;
+ }
+ StreamingReporterBase::testGroupEnded(_testGroupStats);
+}
+void ConsoleReporter::testRunEnded(TestRunStats const& _testRunStats) {
+ printTotalsDivider(_testRunStats.totals);
+ printTotals(_testRunStats.totals);
+ stream << std::endl;
+ StreamingReporterBase::testRunEnded(_testRunStats);
+}
+void ConsoleReporter::testRunStarting(TestRunInfo const& _testInfo) {
+ StreamingReporterBase::testRunStarting(_testInfo);
+ printTestFilters();
+}
+
+void ConsoleReporter::lazyPrint() {
+
+ m_tablePrinter->close();
+ lazyPrintWithoutClosingBenchmarkTable();
+}
+
+void ConsoleReporter::lazyPrintWithoutClosingBenchmarkTable() {
+
+ if (!currentTestRunInfo.used)
+ lazyPrintRunInfo();
+ if (!currentGroupInfo.used)
+ lazyPrintGroupInfo();
+
+ if (!m_headerPrinted) {
+ printTestCaseAndSectionHeader();
+ m_headerPrinted = true;
+ }
+}
+void ConsoleReporter::lazyPrintRunInfo() {
+ stream << '\n' << getLineOfChars<'~'>() << '\n';
+ Colour colour(Colour::SecondaryText);
+ stream << currentTestRunInfo->name
+ << " is a Catch v" << libraryVersion() << " host application.\n"
+ << "Run with -? for options\n\n";
+
+ if (m_config->rngSeed() != 0)
+ stream << "Randomness seeded to: " << m_config->rngSeed() << "\n\n";
+
+ currentTestRunInfo.used = true;
+}
+void ConsoleReporter::lazyPrintGroupInfo() {
+ if (!currentGroupInfo->name.empty() && currentGroupInfo->groupsCounts > 1) {
+ printClosedHeader("Group: " + currentGroupInfo->name);
+ currentGroupInfo.used = true;
+ }
+}
+void ConsoleReporter::printTestCaseAndSectionHeader() {
+ assert(!m_sectionStack.empty());
+ printOpenHeader(currentTestCaseInfo->name);
+
+ if (m_sectionStack.size() > 1) {
+ Colour colourGuard(Colour::Headers);
+
+ auto
+ it = m_sectionStack.begin() + 1, // Skip first section (test case)
+ itEnd = m_sectionStack.end();
+ for (; it != itEnd; ++it)
+ printHeaderString(it->name, 2);
+ }
+
+ SourceLineInfo lineInfo = m_sectionStack.back().lineInfo;
+
+ stream << getLineOfChars<'-'>() << '\n';
+ Colour colourGuard(Colour::FileName);
+ stream << lineInfo << '\n';
+ stream << getLineOfChars<'.'>() << '\n' << std::endl;
+}
+
+void ConsoleReporter::printClosedHeader(std::string const& _name) {
+ printOpenHeader(_name);
+ stream << getLineOfChars<'.'>() << '\n';
+}
+void ConsoleReporter::printOpenHeader(std::string const& _name) {
+ stream << getLineOfChars<'-'>() << '\n';
+ {
+ Colour colourGuard(Colour::Headers);
+ printHeaderString(_name);
+ }
+}
+
+// if string has a : in first line will set indent to follow it on
+// subsequent lines
+void ConsoleReporter::printHeaderString(std::string const& _string, std::size_t indent) {
+ std::size_t i = _string.find(": ");
+ if (i != std::string::npos)
+ i += 2;
+ else
+ i = 0;
+ stream << Column(_string).indent(indent + i).initialIndent(indent) << '\n';
+}
+
+struct SummaryColumn {
+
+ SummaryColumn( std::string _label, Colour::Code _colour )
+ : label( std::move( _label ) ),
+ colour( _colour ) {}
+ SummaryColumn addRow( std::size_t count ) {
+ ReusableStringStream rss;
+ rss << count;
+ std::string row = rss.str();
+ for (auto& oldRow : rows) {
+ while (oldRow.size() < row.size())
+ oldRow = ' ' + oldRow;
+ while (oldRow.size() > row.size())
+ row = ' ' + row;
+ }
+ rows.push_back(row);
+ return *this;
+ }
+
+ std::string label;
+ Colour::Code colour;
+ std::vector<std::string> rows;
+
+};
+
+void ConsoleReporter::printTotals( Totals const& totals ) {
+ if (totals.testCases.total() == 0) {
+ stream << Colour(Colour::Warning) << "No tests ran\n";
+ } else if (totals.assertions.total() > 0 && totals.testCases.allPassed()) {
+ stream << Colour(Colour::ResultSuccess) << "All tests passed";
+ stream << " ("
+ << pluralise(totals.assertions.passed, "assertion") << " in "
+ << pluralise(totals.testCases.passed, "test case") << ')'
+ << '\n';
+ } else {
+
+ std::vector<SummaryColumn> columns;
+ columns.push_back(SummaryColumn("", Colour::None)
+ .addRow(totals.testCases.total())
+ .addRow(totals.assertions.total()));
+ columns.push_back(SummaryColumn("passed", Colour::Success)
+ .addRow(totals.testCases.passed)
+ .addRow(totals.assertions.passed));
+ columns.push_back(SummaryColumn("failed", Colour::ResultError)
+ .addRow(totals.testCases.failed)
+ .addRow(totals.assertions.failed));
+ columns.push_back(SummaryColumn("failed as expected", Colour::ResultExpectedFailure)
+ .addRow(totals.testCases.failedButOk)
+ .addRow(totals.assertions.failedButOk));
+
+ printSummaryRow("test cases", columns, 0);
+ printSummaryRow("assertions", columns, 1);
+ }
+}
+void ConsoleReporter::printSummaryRow(std::string const& label, std::vector<SummaryColumn> const& cols, std::size_t row) {
+ for (auto col : cols) {
+ std::string value = col.rows[row];
+ if (col.label.empty()) {
+ stream << label << ": ";
+ if (value != "0")
+ stream << value;
+ else
+ stream << Colour(Colour::Warning) << "- none -";
+ } else if (value != "0") {
+ stream << Colour(Colour::LightGrey) << " | ";
+ stream << Colour(col.colour)
+ << value << ' ' << col.label;
+ }
+ }
+ stream << '\n';
+}
+
+void ConsoleReporter::printTotalsDivider(Totals const& totals) {
+ if (totals.testCases.total() > 0) {
+ std::size_t failedRatio = makeRatio(totals.testCases.failed, totals.testCases.total());
+ std::size_t failedButOkRatio = makeRatio(totals.testCases.failedButOk, totals.testCases.total());
+ std::size_t passedRatio = makeRatio(totals.testCases.passed, totals.testCases.total());
+ while (failedRatio + failedButOkRatio + passedRatio < CATCH_CONFIG_CONSOLE_WIDTH - 1)
+ findMax(failedRatio, failedButOkRatio, passedRatio)++;
+ while (failedRatio + failedButOkRatio + passedRatio > CATCH_CONFIG_CONSOLE_WIDTH - 1)
+ findMax(failedRatio, failedButOkRatio, passedRatio)--;
+
+ stream << Colour(Colour::Error) << std::string(failedRatio, '=');
+ stream << Colour(Colour::ResultExpectedFailure) << std::string(failedButOkRatio, '=');
+ if (totals.testCases.allPassed())
+ stream << Colour(Colour::ResultSuccess) << std::string(passedRatio, '=');
+ else
+ stream << Colour(Colour::Success) << std::string(passedRatio, '=');
+ } else {
+ stream << Colour(Colour::Warning) << std::string(CATCH_CONFIG_CONSOLE_WIDTH - 1, '=');
+ }
+ stream << '\n';
+}
+void ConsoleReporter::printSummaryDivider() {
+ stream << getLineOfChars<'-'>() << '\n';
+}
+
+void ConsoleReporter::printTestFilters() {
+ if (m_config->testSpec().hasFilters()) {
+ Colour guard(Colour::BrightYellow);
+ stream << "Filters: " << serializeFilters(m_config->getTestsOrTags()) << '\n';
+ }
+}
+
+CATCH_REGISTER_REPORTER("console", ConsoleReporter)
+
+} // end namespace Catch
+
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+#if defined(__clang__)
+# pragma clang diagnostic pop
+#endif
+// end catch_reporter_console.cpp
+// start catch_reporter_junit.cpp
+
+#include <cassert>
+#include <sstream>
+#include <ctime>
+#include <algorithm>
+#include <iomanip>
+
+namespace Catch {
+
+ namespace {
+ std::string getCurrentTimestamp() {
+ // Beware, this is not reentrant because of backward compatibility issues
+ // Also, UTC only, again because of backward compatibility (%z is C++11)
+ time_t rawtime;
+ std::time(&rawtime);
+ auto const timeStampSize = sizeof("2017-01-16T17:06:45Z");
+
+#ifdef _MSC_VER
+ std::tm timeInfo = {};
+ gmtime_s(&timeInfo, &rawtime);
+#else
+ std::tm* timeInfo;
+ timeInfo = std::gmtime(&rawtime);
+#endif
+
+ char timeStamp[timeStampSize];
+ const char * const fmt = "%Y-%m-%dT%H:%M:%SZ";
+
+#ifdef _MSC_VER
+ std::strftime(timeStamp, timeStampSize, fmt, &timeInfo);
+#else
+ std::strftime(timeStamp, timeStampSize, fmt, timeInfo);
+#endif
+ return std::string(timeStamp, timeStampSize-1);
+ }
+
+ std::string fileNameTag(const std::vector<std::string> &tags) {
+ auto it = std::find_if(begin(tags),
+ end(tags),
+ [] (std::string const& tag) {return tag.front() == '#'; });
+ if (it != tags.end())
+ return it->substr(1);
+ return std::string();
+ }
+
+ // Formats the duration in seconds to 3 decimal places.
+ // This is done because some genius defined Maven Surefire schema
+ // in a way that only accepts 3 decimal places, and tools like
+ // Jenkins use that schema for validation JUnit reporter output.
+ std::string formatDuration( double seconds ) {
+ ReusableStringStream rss;
+ rss << std::fixed << std::setprecision( 3 ) << seconds;
+ return rss.str();
+ }
+
+ } // anonymous namespace
+
+ JunitReporter::JunitReporter( ReporterConfig const& _config )
+ : CumulativeReporterBase( _config ),
+ xml( _config.stream() )
+ {
+ m_reporterPrefs.shouldRedirectStdOut = true;
+ m_reporterPrefs.shouldReportAllAssertions = true;
+ }
+
+ JunitReporter::~JunitReporter() {}
+
+ std::string JunitReporter::getDescription() {
+ return "Reports test results in an XML format that looks like Ant's junitreport target";
+ }
+
+ void JunitReporter::noMatchingTestCases( std::string const& /*spec*/ ) {}
+
+ void JunitReporter::testRunStarting( TestRunInfo const& runInfo ) {
+ CumulativeReporterBase::testRunStarting( runInfo );
+ xml.startElement( "testsuites" );
+ }
+
+ void JunitReporter::testGroupStarting( GroupInfo const& groupInfo ) {
+ suiteTimer.start();
+ stdOutForSuite.clear();
+ stdErrForSuite.clear();
+ unexpectedExceptions = 0;
+ CumulativeReporterBase::testGroupStarting( groupInfo );
+ }
+
+ void JunitReporter::testCaseStarting( TestCaseInfo const& testCaseInfo ) {
+ m_okToFail = testCaseInfo.okToFail();
+ }
+
+ bool JunitReporter::assertionEnded( AssertionStats const& assertionStats ) {
+ if( assertionStats.assertionResult.getResultType() == ResultWas::ThrewException && !m_okToFail )
+ unexpectedExceptions++;
+ return CumulativeReporterBase::assertionEnded( assertionStats );
+ }
+
+ void JunitReporter::testCaseEnded( TestCaseStats const& testCaseStats ) {
+ stdOutForSuite += testCaseStats.stdOut;
+ stdErrForSuite += testCaseStats.stdErr;
+ CumulativeReporterBase::testCaseEnded( testCaseStats );
+ }
+
+ void JunitReporter::testGroupEnded( TestGroupStats const& testGroupStats ) {
+ double suiteTime = suiteTimer.getElapsedSeconds();
+ CumulativeReporterBase::testGroupEnded( testGroupStats );
+ writeGroup( *m_testGroups.back(), suiteTime );
+ }
+
+ void JunitReporter::testRunEndedCumulative() {
+ xml.endElement();
+ }
+
+ void JunitReporter::writeGroup( TestGroupNode const& groupNode, double suiteTime ) {
+ XmlWriter::ScopedElement e = xml.scopedElement( "testsuite" );
+
+ TestGroupStats const& stats = groupNode.value;
+ xml.writeAttribute( "name", stats.groupInfo.name );
+ xml.writeAttribute( "errors", unexpectedExceptions );
+ xml.writeAttribute( "failures", stats.totals.assertions.failed-unexpectedExceptions );
+ xml.writeAttribute( "tests", stats.totals.assertions.total() );
+ xml.writeAttribute( "hostname", "tbd" ); // !TBD
+ if( m_config->showDurations() == ShowDurations::Never )
+ xml.writeAttribute( "time", "" );
+ else
+ xml.writeAttribute( "time", formatDuration( suiteTime ) );
+ xml.writeAttribute( "timestamp", getCurrentTimestamp() );
+
+ // Write properties if there are any
+ if (m_config->hasTestFilters() || m_config->rngSeed() != 0) {
+ auto properties = xml.scopedElement("properties");
+ if (m_config->hasTestFilters()) {
+ xml.scopedElement("property")
+ .writeAttribute("name", "filters")
+ .writeAttribute("value", serializeFilters(m_config->getTestsOrTags()));
+ }
+ if (m_config->rngSeed() != 0) {
+ xml.scopedElement("property")
+ .writeAttribute("name", "random-seed")
+ .writeAttribute("value", m_config->rngSeed());
+ }
+ }
+
+ // Write test cases
+ for( auto const& child : groupNode.children )
+ writeTestCase( *child );
+
+ xml.scopedElement( "system-out" ).writeText( trim( stdOutForSuite ), XmlFormatting::Newline );
+ xml.scopedElement( "system-err" ).writeText( trim( stdErrForSuite ), XmlFormatting::Newline );
+ }
+
+ void JunitReporter::writeTestCase( TestCaseNode const& testCaseNode ) {
+ TestCaseStats const& stats = testCaseNode.value;
+
+ // All test cases have exactly one section - which represents the
+ // test case itself. That section may have 0-n nested sections
+ assert( testCaseNode.children.size() == 1 );
+ SectionNode const& rootSection = *testCaseNode.children.front();
+
+ std::string className = stats.testInfo.className;
+
+ if( className.empty() ) {
+ className = fileNameTag(stats.testInfo.tags);
+ if ( className.empty() )
+ className = "global";
+ }
+
+ if ( !m_config->name().empty() )
+ className = m_config->name() + "." + className;
+
+ writeSection( className, "", rootSection, stats.testInfo.okToFail() );
+ }
+
+ void JunitReporter::writeSection( std::string const& className,
+ std::string const& rootName,
+ SectionNode const& sectionNode,
+ bool testOkToFail) {
+ std::string name = trim( sectionNode.stats.sectionInfo.name );
+ if( !rootName.empty() )
+ name = rootName + '/' + name;
+
+ if( !sectionNode.assertions.empty() ||
+ !sectionNode.stdOut.empty() ||
+ !sectionNode.stdErr.empty() ) {
+ XmlWriter::ScopedElement e = xml.scopedElement( "testcase" );
+ if( className.empty() ) {
+ xml.writeAttribute( "classname", name );
+ xml.writeAttribute( "name", "root" );
+ }
+ else {
+ xml.writeAttribute( "classname", className );
+ xml.writeAttribute( "name", name );
+ }
+ xml.writeAttribute( "time", formatDuration( sectionNode.stats.durationInSeconds ) );
+ // This is not ideal, but it should be enough to mimic gtest's
+ // junit output.
+ // Ideally the JUnit reporter would also handle `skipTest`
+ // events and write those out appropriately.
+ xml.writeAttribute( "status", "run" );
+
+ if (sectionNode.stats.assertions.failedButOk) {
+ xml.scopedElement("skipped")
+ .writeAttribute("message", "TEST_CASE tagged with !mayfail");
+ }
+
+ writeAssertions( sectionNode );
+
+ if( !sectionNode.stdOut.empty() )
+ xml.scopedElement( "system-out" ).writeText( trim( sectionNode.stdOut ), XmlFormatting::Newline );
+ if( !sectionNode.stdErr.empty() )
+ xml.scopedElement( "system-err" ).writeText( trim( sectionNode.stdErr ), XmlFormatting::Newline );
+ }
+ for( auto const& childNode : sectionNode.childSections )
+ if( className.empty() )
+ writeSection( name, "", *childNode, testOkToFail );
+ else
+ writeSection( className, name, *childNode, testOkToFail );
+ }
+
+ void JunitReporter::writeAssertions( SectionNode const& sectionNode ) {
+ for( auto const& assertion : sectionNode.assertions )
+ writeAssertion( assertion );
+ }
+
+ void JunitReporter::writeAssertion( AssertionStats const& stats ) {
+ AssertionResult const& result = stats.assertionResult;
+ if( !result.isOk() ) {
+ std::string elementName;
+ switch( result.getResultType() ) {
+ case ResultWas::ThrewException:
+ case ResultWas::FatalErrorCondition:
+ elementName = "error";
+ break;
+ case ResultWas::ExplicitFailure:
+ case ResultWas::ExpressionFailed:
+ case ResultWas::DidntThrowException:
+ elementName = "failure";
+ break;
+
+ // We should never see these here:
+ case ResultWas::Info:
+ case ResultWas::Warning:
+ case ResultWas::Ok:
+ case ResultWas::Unknown:
+ case ResultWas::FailureBit:
+ case ResultWas::Exception:
+ elementName = "internalError";
+ break;
+ }
+
+ XmlWriter::ScopedElement e = xml.scopedElement( elementName );
+
+ xml.writeAttribute( "message", result.getExpression() );
+ xml.writeAttribute( "type", result.getTestMacroName() );
+
+ ReusableStringStream rss;
+ if (stats.totals.assertions.total() > 0) {
+ rss << "FAILED" << ":\n";
+ if (result.hasExpression()) {
+ rss << " ";
+ rss << result.getExpressionInMacro();
+ rss << '\n';
+ }
+ if (result.hasExpandedExpression()) {
+ rss << "with expansion:\n";
+ rss << Column(result.getExpandedExpression()).indent(2) << '\n';
+ }
+ } else {
+ rss << '\n';
+ }
+
+ if( !result.getMessage().empty() )
+ rss << result.getMessage() << '\n';
+ for( auto const& msg : stats.infoMessages )
+ if( msg.type == ResultWas::Info )
+ rss << msg.message << '\n';
+
+ rss << "at " << result.getSourceInfo();
+ xml.writeText( rss.str(), XmlFormatting::Newline );
+ }
+ }
+
+ CATCH_REGISTER_REPORTER( "junit", JunitReporter )
+
+} // end namespace Catch
+// end catch_reporter_junit.cpp
+// start catch_reporter_listening.cpp
+
+#include <cassert>
+
+namespace Catch {
+
+ ListeningReporter::ListeningReporter() {
+ // We will assume that listeners will always want all assertions
+ m_preferences.shouldReportAllAssertions = true;
+ }
+
+ void ListeningReporter::addListener( IStreamingReporterPtr&& listener ) {
+ m_listeners.push_back( std::move( listener ) );
+ }
+
+ void ListeningReporter::addReporter(IStreamingReporterPtr&& reporter) {
+ assert(!m_reporter && "Listening reporter can wrap only 1 real reporter");
+ m_reporter = std::move( reporter );
+ m_preferences.shouldRedirectStdOut = m_reporter->getPreferences().shouldRedirectStdOut;
+ }
+
+ ReporterPreferences ListeningReporter::getPreferences() const {
+ return m_preferences;
+ }
+
+ std::set<Verbosity> ListeningReporter::getSupportedVerbosities() {
+ return std::set<Verbosity>{ };
+ }
+
+ void ListeningReporter::noMatchingTestCases( std::string const& spec ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->noMatchingTestCases( spec );
+ }
+ m_reporter->noMatchingTestCases( spec );
+ }
+
+ void ListeningReporter::reportInvalidArguments(std::string const&arg){
+ for ( auto const& listener : m_listeners ) {
+ listener->reportInvalidArguments( arg );
+ }
+ m_reporter->reportInvalidArguments( arg );
+ }
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void ListeningReporter::benchmarkPreparing( std::string const& name ) {
+ for (auto const& listener : m_listeners) {
+ listener->benchmarkPreparing(name);
+ }
+ m_reporter->benchmarkPreparing(name);
+ }
+ void ListeningReporter::benchmarkStarting( BenchmarkInfo const& benchmarkInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->benchmarkStarting( benchmarkInfo );
+ }
+ m_reporter->benchmarkStarting( benchmarkInfo );
+ }
+ void ListeningReporter::benchmarkEnded( BenchmarkStats<> const& benchmarkStats ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->benchmarkEnded( benchmarkStats );
+ }
+ m_reporter->benchmarkEnded( benchmarkStats );
+ }
+
+ void ListeningReporter::benchmarkFailed( std::string const& error ) {
+ for (auto const& listener : m_listeners) {
+ listener->benchmarkFailed(error);
+ }
+ m_reporter->benchmarkFailed(error);
+ }
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ void ListeningReporter::testRunStarting( TestRunInfo const& testRunInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->testRunStarting( testRunInfo );
+ }
+ m_reporter->testRunStarting( testRunInfo );
+ }
+
+ void ListeningReporter::testGroupStarting( GroupInfo const& groupInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->testGroupStarting( groupInfo );
+ }
+ m_reporter->testGroupStarting( groupInfo );
+ }
+
+ void ListeningReporter::testCaseStarting( TestCaseInfo const& testInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->testCaseStarting( testInfo );
+ }
+ m_reporter->testCaseStarting( testInfo );
+ }
+
+ void ListeningReporter::sectionStarting( SectionInfo const& sectionInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->sectionStarting( sectionInfo );
+ }
+ m_reporter->sectionStarting( sectionInfo );
+ }
+
+ void ListeningReporter::assertionStarting( AssertionInfo const& assertionInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->assertionStarting( assertionInfo );
+ }
+ m_reporter->assertionStarting( assertionInfo );
+ }
+
+ // The return value indicates if the messages buffer should be cleared:
+ bool ListeningReporter::assertionEnded( AssertionStats const& assertionStats ) {
+ for( auto const& listener : m_listeners ) {
+ static_cast<void>( listener->assertionEnded( assertionStats ) );
+ }
+ return m_reporter->assertionEnded( assertionStats );
+ }
+
+ void ListeningReporter::sectionEnded( SectionStats const& sectionStats ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->sectionEnded( sectionStats );
+ }
+ m_reporter->sectionEnded( sectionStats );
+ }
+
+ void ListeningReporter::testCaseEnded( TestCaseStats const& testCaseStats ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->testCaseEnded( testCaseStats );
+ }
+ m_reporter->testCaseEnded( testCaseStats );
+ }
+
+ void ListeningReporter::testGroupEnded( TestGroupStats const& testGroupStats ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->testGroupEnded( testGroupStats );
+ }
+ m_reporter->testGroupEnded( testGroupStats );
+ }
+
+ void ListeningReporter::testRunEnded( TestRunStats const& testRunStats ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->testRunEnded( testRunStats );
+ }
+ m_reporter->testRunEnded( testRunStats );
+ }
+
+ void ListeningReporter::skipTest( TestCaseInfo const& testInfo ) {
+ for ( auto const& listener : m_listeners ) {
+ listener->skipTest( testInfo );
+ }
+ m_reporter->skipTest( testInfo );
+ }
+
+ bool ListeningReporter::isMulti() const {
+ return true;
+ }
+
+} // end namespace Catch
+// end catch_reporter_listening.cpp
+// start catch_reporter_xml.cpp
+
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4061) // Not all labels are EXPLICITLY handled in switch
+ // Note that 4062 (not all labels are handled
+ // and default is missing) is enabled
+#endif
+
+namespace Catch {
+ XmlReporter::XmlReporter( ReporterConfig const& _config )
+ : StreamingReporterBase( _config ),
+ m_xml(_config.stream())
+ {
+ m_reporterPrefs.shouldRedirectStdOut = true;
+ m_reporterPrefs.shouldReportAllAssertions = true;
+ }
+
+ XmlReporter::~XmlReporter() = default;
+
+ std::string XmlReporter::getDescription() {
+ return "Reports test results as an XML document";
+ }
+
+ std::string XmlReporter::getStylesheetRef() const {
+ return std::string();
+ }
+
+ void XmlReporter::writeSourceInfo( SourceLineInfo const& sourceInfo ) {
+ m_xml
+ .writeAttribute( "filename", sourceInfo.file )
+ .writeAttribute( "line", sourceInfo.line );
+ }
+
+ void XmlReporter::noMatchingTestCases( std::string const& s ) {
+ StreamingReporterBase::noMatchingTestCases( s );
+ }
+
+ void XmlReporter::testRunStarting( TestRunInfo const& testInfo ) {
+ StreamingReporterBase::testRunStarting( testInfo );
+ std::string stylesheetRef = getStylesheetRef();
+ if( !stylesheetRef.empty() )
+ m_xml.writeStylesheetRef( stylesheetRef );
+ m_xml.startElement( "Catch" );
+ if( !m_config->name().empty() )
+ m_xml.writeAttribute( "name", m_config->name() );
+ if (m_config->testSpec().hasFilters())
+ m_xml.writeAttribute( "filters", serializeFilters( m_config->getTestsOrTags() ) );
+ if( m_config->rngSeed() != 0 )
+ m_xml.scopedElement( "Randomness" )
+ .writeAttribute( "seed", m_config->rngSeed() );
+ }
+
+ void XmlReporter::testGroupStarting( GroupInfo const& groupInfo ) {
+ StreamingReporterBase::testGroupStarting( groupInfo );
+ m_xml.startElement( "Group" )
+ .writeAttribute( "name", groupInfo.name );
+ }
+
+ void XmlReporter::testCaseStarting( TestCaseInfo const& testInfo ) {
+ StreamingReporterBase::testCaseStarting(testInfo);
+ m_xml.startElement( "TestCase" )
+ .writeAttribute( "name", trim( testInfo.name ) )
+ .writeAttribute( "description", testInfo.description )
+ .writeAttribute( "tags", testInfo.tagsAsString() );
+
+ writeSourceInfo( testInfo.lineInfo );
+
+ if ( m_config->showDurations() == ShowDurations::Always )
+ m_testCaseTimer.start();
+ m_xml.ensureTagClosed();
+ }
+
+ void XmlReporter::sectionStarting( SectionInfo const& sectionInfo ) {
+ StreamingReporterBase::sectionStarting( sectionInfo );
+ if( m_sectionDepth++ > 0 ) {
+ m_xml.startElement( "Section" )
+ .writeAttribute( "name", trim( sectionInfo.name ) );
+ writeSourceInfo( sectionInfo.lineInfo );
+ m_xml.ensureTagClosed();
+ }
+ }
+
+ void XmlReporter::assertionStarting( AssertionInfo const& ) { }
+
+ bool XmlReporter::assertionEnded( AssertionStats const& assertionStats ) {
+
+ AssertionResult const& result = assertionStats.assertionResult;
+
+ bool includeResults = m_config->includeSuccessfulResults() || !result.isOk();
+
+ if( includeResults || result.getResultType() == ResultWas::Warning ) {
+ // Print any info messages in <Info> tags.
+ for( auto const& msg : assertionStats.infoMessages ) {
+ if( msg.type == ResultWas::Info && includeResults ) {
+ m_xml.scopedElement( "Info" )
+ .writeText( msg.message );
+ } else if ( msg.type == ResultWas::Warning ) {
+ m_xml.scopedElement( "Warning" )
+ .writeText( msg.message );
+ }
+ }
+ }
+
+ // Drop out if result was successful but we're not printing them.
+ if( !includeResults && result.getResultType() != ResultWas::Warning )
+ return true;
+
+ // Print the expression if there is one.
+ if( result.hasExpression() ) {
+ m_xml.startElement( "Expression" )
+ .writeAttribute( "success", result.succeeded() )
+ .writeAttribute( "type", result.getTestMacroName() );
+
+ writeSourceInfo( result.getSourceInfo() );
+
+ m_xml.scopedElement( "Original" )
+ .writeText( result.getExpression() );
+ m_xml.scopedElement( "Expanded" )
+ .writeText( result.getExpandedExpression() );
+ }
+
+ // And... Print a result applicable to each result type.
+ switch( result.getResultType() ) {
+ case ResultWas::ThrewException:
+ m_xml.startElement( "Exception" );
+ writeSourceInfo( result.getSourceInfo() );
+ m_xml.writeText( result.getMessage() );
+ m_xml.endElement();
+ break;
+ case ResultWas::FatalErrorCondition:
+ m_xml.startElement( "FatalErrorCondition" );
+ writeSourceInfo( result.getSourceInfo() );
+ m_xml.writeText( result.getMessage() );
+ m_xml.endElement();
+ break;
+ case ResultWas::Info:
+ m_xml.scopedElement( "Info" )
+ .writeText( result.getMessage() );
+ break;
+ case ResultWas::Warning:
+ // Warning will already have been written
+ break;
+ case ResultWas::ExplicitFailure:
+ m_xml.startElement( "Failure" );
+ writeSourceInfo( result.getSourceInfo() );
+ m_xml.writeText( result.getMessage() );
+ m_xml.endElement();
+ break;
+ default:
+ break;
+ }
+
+ if( result.hasExpression() )
+ m_xml.endElement();
+
+ return true;
+ }
+
+ void XmlReporter::sectionEnded( SectionStats const& sectionStats ) {
+ StreamingReporterBase::sectionEnded( sectionStats );
+ if( --m_sectionDepth > 0 ) {
+ XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResults" );
+ e.writeAttribute( "successes", sectionStats.assertions.passed );
+ e.writeAttribute( "failures", sectionStats.assertions.failed );
+ e.writeAttribute( "expectedFailures", sectionStats.assertions.failedButOk );
+
+ if ( m_config->showDurations() == ShowDurations::Always )
+ e.writeAttribute( "durationInSeconds", sectionStats.durationInSeconds );
+
+ m_xml.endElement();
+ }
+ }
+
+ void XmlReporter::testCaseEnded( TestCaseStats const& testCaseStats ) {
+ StreamingReporterBase::testCaseEnded( testCaseStats );
+ XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResult" );
+ e.writeAttribute( "success", testCaseStats.totals.assertions.allOk() );
+
+ if ( m_config->showDurations() == ShowDurations::Always )
+ e.writeAttribute( "durationInSeconds", m_testCaseTimer.getElapsedSeconds() );
+
+ if( !testCaseStats.stdOut.empty() )
+ m_xml.scopedElement( "StdOut" ).writeText( trim( testCaseStats.stdOut ), XmlFormatting::Newline );
+ if( !testCaseStats.stdErr.empty() )
+ m_xml.scopedElement( "StdErr" ).writeText( trim( testCaseStats.stdErr ), XmlFormatting::Newline );
+
+ m_xml.endElement();
+ }
+
+ void XmlReporter::testGroupEnded( TestGroupStats const& testGroupStats ) {
+ StreamingReporterBase::testGroupEnded( testGroupStats );
+ // TODO: Check testGroupStats.aborting and act accordingly.
+ m_xml.scopedElement( "OverallResults" )
+ .writeAttribute( "successes", testGroupStats.totals.assertions.passed )
+ .writeAttribute( "failures", testGroupStats.totals.assertions.failed )
+ .writeAttribute( "expectedFailures", testGroupStats.totals.assertions.failedButOk );
+ m_xml.scopedElement( "OverallResultsCases")
+ .writeAttribute( "successes", testGroupStats.totals.testCases.passed )
+ .writeAttribute( "failures", testGroupStats.totals.testCases.failed )
+ .writeAttribute( "expectedFailures", testGroupStats.totals.testCases.failedButOk );
+ m_xml.endElement();
+ }
+
+ void XmlReporter::testRunEnded( TestRunStats const& testRunStats ) {
+ StreamingReporterBase::testRunEnded( testRunStats );
+ m_xml.scopedElement( "OverallResults" )
+ .writeAttribute( "successes", testRunStats.totals.assertions.passed )
+ .writeAttribute( "failures", testRunStats.totals.assertions.failed )
+ .writeAttribute( "expectedFailures", testRunStats.totals.assertions.failedButOk );
+ m_xml.scopedElement( "OverallResultsCases")
+ .writeAttribute( "successes", testRunStats.totals.testCases.passed )
+ .writeAttribute( "failures", testRunStats.totals.testCases.failed )
+ .writeAttribute( "expectedFailures", testRunStats.totals.testCases.failedButOk );
+ m_xml.endElement();
+ }
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+ void XmlReporter::benchmarkPreparing(std::string const& name) {
+ m_xml.startElement("BenchmarkResults")
+ .writeAttribute("name", name);
+ }
+
+ void XmlReporter::benchmarkStarting(BenchmarkInfo const &info) {
+ m_xml.writeAttribute("samples", info.samples)
+ .writeAttribute("resamples", info.resamples)
+ .writeAttribute("iterations", info.iterations)
+ .writeAttribute("clockResolution", info.clockResolution)
+ .writeAttribute("estimatedDuration", info.estimatedDuration)
+ .writeComment("All values in nano seconds");
+ }
+
+ void XmlReporter::benchmarkEnded(BenchmarkStats<> const& benchmarkStats) {
+ m_xml.startElement("mean")
+ .writeAttribute("value", benchmarkStats.mean.point.count())
+ .writeAttribute("lowerBound", benchmarkStats.mean.lower_bound.count())
+ .writeAttribute("upperBound", benchmarkStats.mean.upper_bound.count())
+ .writeAttribute("ci", benchmarkStats.mean.confidence_interval);
+ m_xml.endElement();
+ m_xml.startElement("standardDeviation")
+ .writeAttribute("value", benchmarkStats.standardDeviation.point.count())
+ .writeAttribute("lowerBound", benchmarkStats.standardDeviation.lower_bound.count())
+ .writeAttribute("upperBound", benchmarkStats.standardDeviation.upper_bound.count())
+ .writeAttribute("ci", benchmarkStats.standardDeviation.confidence_interval);
+ m_xml.endElement();
+ m_xml.startElement("outliers")
+ .writeAttribute("variance", benchmarkStats.outlierVariance)
+ .writeAttribute("lowMild", benchmarkStats.outliers.low_mild)
+ .writeAttribute("lowSevere", benchmarkStats.outliers.low_severe)
+ .writeAttribute("highMild", benchmarkStats.outliers.high_mild)
+ .writeAttribute("highSevere", benchmarkStats.outliers.high_severe);
+ m_xml.endElement();
+ m_xml.endElement();
+ }
+
+ void XmlReporter::benchmarkFailed(std::string const &error) {
+ m_xml.scopedElement("failed").
+ writeAttribute("message", error);
+ m_xml.endElement();
+ }
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+ CATCH_REGISTER_REPORTER( "xml", XmlReporter )
+
+} // end namespace Catch
+
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+// end catch_reporter_xml.cpp
+
+namespace Catch {
+ LeakDetector leakDetector;
+}
+
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+
+// end catch_impl.hpp
+#endif
+
+#ifdef CATCH_CONFIG_MAIN
+// start catch_default_main.hpp
+
+#ifndef __OBJC__
+
+#ifndef CATCH_INTERNAL_CDECL
+#ifdef _MSC_VER
+#define CATCH_INTERNAL_CDECL __cdecl
+#else
+#define CATCH_INTERNAL_CDECL
+#endif
+#endif
+
+#if defined(CATCH_CONFIG_WCHAR) && defined(CATCH_PLATFORM_WINDOWS) && defined(_UNICODE) && !defined(DO_NOT_USE_WMAIN)
+// Standard C/C++ Win32 Unicode wmain entry point
+extern "C" int CATCH_INTERNAL_CDECL wmain (int argc, wchar_t * argv[], wchar_t * []) {
+#else
+// Standard C/C++ main entry point
+int CATCH_INTERNAL_CDECL main (int argc, char * argv[]) {
+#endif
+
+ return Catch::Session().run( argc, argv );
+}
+
+#else // __OBJC__
+
+// Objective-C entry point
+int main (int argc, char * const argv[]) {
+#if !CATCH_ARC_ENABLED
+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
+#endif
+
+ Catch::registerTestMethods();
+ int result = Catch::Session().run( argc, (char**)argv );
+
+#if !CATCH_ARC_ENABLED
+ [pool drain];
+#endif
+
+ return result;
+}
+
+#endif // __OBJC__
+
+// end catch_default_main.hpp
+#endif
+
+#if !defined(CATCH_CONFIG_IMPL_ONLY)
+
+#ifdef CLARA_CONFIG_MAIN_NOT_DEFINED
+# undef CLARA_CONFIG_MAIN
+#endif
+
+#if !defined(CATCH_CONFIG_DISABLE)
+//////
+// If this config identifier is defined then all CATCH macros are prefixed with CATCH_
+#ifdef CATCH_CONFIG_PREFIX_ALL
+
+#define CATCH_REQUIRE( ... ) INTERNAL_CATCH_TEST( "CATCH_REQUIRE", Catch::ResultDisposition::Normal, __VA_ARGS__ )
+#define CATCH_REQUIRE_FALSE( ... ) INTERNAL_CATCH_TEST( "CATCH_REQUIRE_FALSE", Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, __VA_ARGS__ )
+
+#define CATCH_REQUIRE_THROWS( ... ) INTERNAL_CATCH_THROWS( "CATCH_REQUIRE_THROWS", Catch::ResultDisposition::Normal, __VA_ARGS__ )
+#define CATCH_REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CATCH_REQUIRE_THROWS_AS", exceptionType, Catch::ResultDisposition::Normal, expr )
+#define CATCH_REQUIRE_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CATCH_REQUIRE_THROWS_WITH", Catch::ResultDisposition::Normal, matcher, expr )
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CATCH_REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CATCH_REQUIRE_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::Normal, matcher, expr )
+#endif// CATCH_CONFIG_DISABLE_MATCHERS
+#define CATCH_REQUIRE_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CATCH_REQUIRE_NOTHROW", Catch::ResultDisposition::Normal, __VA_ARGS__ )
+
+#define CATCH_CHECK( ... ) INTERNAL_CATCH_TEST( "CATCH_CHECK", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CATCH_CHECK_FALSE( ... ) INTERNAL_CATCH_TEST( "CATCH_CHECK_FALSE", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::FalseTest, __VA_ARGS__ )
+#define CATCH_CHECKED_IF( ... ) INTERNAL_CATCH_IF( "CATCH_CHECKED_IF", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CATCH_CHECKED_ELSE( ... ) INTERNAL_CATCH_ELSE( "CATCH_CHECKED_ELSE", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CATCH_CHECK_NOFAIL( ... ) INTERNAL_CATCH_TEST( "CATCH_CHECK_NOFAIL", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, __VA_ARGS__ )
+
+#define CATCH_CHECK_THROWS( ... ) INTERNAL_CATCH_THROWS( "CATCH_CHECK_THROWS", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CATCH_CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CATCH_CHECK_THROWS_AS", exceptionType, Catch::ResultDisposition::ContinueOnFailure, expr )
+#define CATCH_CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CATCH_CHECK_THROWS_WITH", Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CATCH_CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CATCH_CHECK_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+#define CATCH_CHECK_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CATCH_CHECK_NOTHROW", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CATCH_CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "CATCH_CHECK_THAT", matcher, Catch::ResultDisposition::ContinueOnFailure, arg )
+
+#define CATCH_REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "CATCH_REQUIRE_THAT", matcher, Catch::ResultDisposition::Normal, arg )
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+
+#define CATCH_INFO( msg ) INTERNAL_CATCH_INFO( "CATCH_INFO", msg )
+#define CATCH_UNSCOPED_INFO( msg ) INTERNAL_CATCH_UNSCOPED_INFO( "CATCH_UNSCOPED_INFO", msg )
+#define CATCH_WARN( msg ) INTERNAL_CATCH_MSG( "CATCH_WARN", Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, msg )
+#define CATCH_CAPTURE( ... ) INTERNAL_CATCH_CAPTURE( INTERNAL_CATCH_UNIQUE_NAME(capturer), "CATCH_CAPTURE",__VA_ARGS__ )
+
+#define CATCH_TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ )
+#define CATCH_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define CATCH_METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ )
+#define CATCH_REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ )
+#define CATCH_SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ )
+#define CATCH_DYNAMIC_SECTION( ... ) INTERNAL_CATCH_DYNAMIC_SECTION( __VA_ARGS__ )
+#define CATCH_FAIL( ... ) INTERNAL_CATCH_MSG( "CATCH_FAIL", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, __VA_ARGS__ )
+#define CATCH_FAIL_CHECK( ... ) INTERNAL_CATCH_MSG( "CATCH_FAIL_CHECK", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CATCH_SUCCEED( ... ) INTERNAL_CATCH_MSG( "CATCH_SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+
+#define CATCH_ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE()
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define CATCH_TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define CATCH_TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG( __VA_ARGS__ )
+#define CATCH_TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE( __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ )
+#else
+#define CATCH_TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG( __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE( __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) )
+#endif
+
+#if !defined(CATCH_CONFIG_RUNTIME_STATIC_REQUIRE)
+#define CATCH_STATIC_REQUIRE( ... ) static_assert( __VA_ARGS__ , #__VA_ARGS__ ); CATCH_SUCCEED( #__VA_ARGS__ )
+#define CATCH_STATIC_REQUIRE_FALSE( ... ) static_assert( !(__VA_ARGS__), "!(" #__VA_ARGS__ ")" ); CATCH_SUCCEED( #__VA_ARGS__ )
+#else
+#define CATCH_STATIC_REQUIRE( ... ) CATCH_REQUIRE( __VA_ARGS__ )
+#define CATCH_STATIC_REQUIRE_FALSE( ... ) CATCH_REQUIRE_FALSE( __VA_ARGS__ )
+#endif
+
+// "BDD-style" convenience wrappers
+#define CATCH_SCENARIO( ... ) CATCH_TEST_CASE( "Scenario: " __VA_ARGS__ )
+#define CATCH_SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ )
+#define CATCH_GIVEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " Given: " << desc )
+#define CATCH_AND_GIVEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( "And given: " << desc )
+#define CATCH_WHEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " When: " << desc )
+#define CATCH_AND_WHEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " And when: " << desc )
+#define CATCH_THEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " Then: " << desc )
+#define CATCH_AND_THEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " And: " << desc )
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+#define CATCH_BENCHMARK(...) \
+ INTERNAL_CATCH_BENCHMARK(INTERNAL_CATCH_UNIQUE_NAME(C_A_T_C_H_B_E_N_C_H_), INTERNAL_CATCH_GET_1_ARG(__VA_ARGS__,,), INTERNAL_CATCH_GET_2_ARG(__VA_ARGS__,,))
+#define CATCH_BENCHMARK_ADVANCED(name) \
+ INTERNAL_CATCH_BENCHMARK_ADVANCED(INTERNAL_CATCH_UNIQUE_NAME(C_A_T_C_H_B_E_N_C_H_), name)
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+// If CATCH_CONFIG_PREFIX_ALL is not defined then the CATCH_ prefix is not required
+#else
+
+#define REQUIRE( ... ) INTERNAL_CATCH_TEST( "REQUIRE", Catch::ResultDisposition::Normal, __VA_ARGS__ )
+#define REQUIRE_FALSE( ... ) INTERNAL_CATCH_TEST( "REQUIRE_FALSE", Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, __VA_ARGS__ )
+
+#define REQUIRE_THROWS( ... ) INTERNAL_CATCH_THROWS( "REQUIRE_THROWS", Catch::ResultDisposition::Normal, __VA_ARGS__ )
+#define REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "REQUIRE_THROWS_AS", exceptionType, Catch::ResultDisposition::Normal, expr )
+#define REQUIRE_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "REQUIRE_THROWS_WITH", Catch::ResultDisposition::Normal, matcher, expr )
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "REQUIRE_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::Normal, matcher, expr )
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+#define REQUIRE_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "REQUIRE_NOTHROW", Catch::ResultDisposition::Normal, __VA_ARGS__ )
+
+#define CHECK( ... ) INTERNAL_CATCH_TEST( "CHECK", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CHECK_FALSE( ... ) INTERNAL_CATCH_TEST( "CHECK_FALSE", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::FalseTest, __VA_ARGS__ )
+#define CHECKED_IF( ... ) INTERNAL_CATCH_IF( "CHECKED_IF", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CHECKED_ELSE( ... ) INTERNAL_CATCH_ELSE( "CHECKED_ELSE", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CHECK_NOFAIL( ... ) INTERNAL_CATCH_TEST( "CHECK_NOFAIL", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, __VA_ARGS__ )
+
+#define CHECK_THROWS( ... ) INTERNAL_CATCH_THROWS( "CHECK_THROWS", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CHECK_THROWS_AS", exceptionType, Catch::ResultDisposition::ContinueOnFailure, expr )
+#define CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CHECK_THROWS_WITH", Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CHECK_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+#define CHECK_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CHECK_NOTHROW", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "CHECK_THAT", matcher, Catch::ResultDisposition::ContinueOnFailure, arg )
+
+#define REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "REQUIRE_THAT", matcher, Catch::ResultDisposition::Normal, arg )
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+
+#define INFO( msg ) INTERNAL_CATCH_INFO( "INFO", msg )
+#define UNSCOPED_INFO( msg ) INTERNAL_CATCH_UNSCOPED_INFO( "UNSCOPED_INFO", msg )
+#define WARN( msg ) INTERNAL_CATCH_MSG( "WARN", Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, msg )
+#define CAPTURE( ... ) INTERNAL_CATCH_CAPTURE( INTERNAL_CATCH_UNIQUE_NAME(capturer), "CAPTURE",__VA_ARGS__ )
+
+#define TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ )
+#define TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ )
+#define REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ )
+#define SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ )
+#define DYNAMIC_SECTION( ... ) INTERNAL_CATCH_DYNAMIC_SECTION( __VA_ARGS__ )
+#define FAIL( ... ) INTERNAL_CATCH_MSG( "FAIL", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, __VA_ARGS__ )
+#define FAIL_CHECK( ... ) INTERNAL_CATCH_MSG( "FAIL_CHECK", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define SUCCEED( ... ) INTERNAL_CATCH_MSG( "SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
+#define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE()
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG( __VA_ARGS__ )
+#define TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE( __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ )
+#define TEMPLATE_LIST_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE(__VA_ARGS__)
+#define TEMPLATE_LIST_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#else
+#define TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ ) )
+#define TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG( __VA_ARGS__ ) )
+#define TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ ) )
+#define TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) )
+#define TEMPLATE_PRODUCT_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE( __VA_ARGS__ ) )
+#define TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( __VA_ARGS__ ) )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, __VA_ARGS__ ) )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) )
+#define TEMPLATE_LIST_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE( __VA_ARGS__ ) )
+#define TEMPLATE_LIST_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD( className, __VA_ARGS__ ) )
+#endif
+
+#if !defined(CATCH_CONFIG_RUNTIME_STATIC_REQUIRE)
+#define STATIC_REQUIRE( ... ) static_assert( __VA_ARGS__, #__VA_ARGS__ ); SUCCEED( #__VA_ARGS__ )
+#define STATIC_REQUIRE_FALSE( ... ) static_assert( !(__VA_ARGS__), "!(" #__VA_ARGS__ ")" ); SUCCEED( "!(" #__VA_ARGS__ ")" )
+#else
+#define STATIC_REQUIRE( ... ) REQUIRE( __VA_ARGS__ )
+#define STATIC_REQUIRE_FALSE( ... ) REQUIRE_FALSE( __VA_ARGS__ )
+#endif
+
+#endif
+
+#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature )
+
+// "BDD-style" convenience wrappers
+#define SCENARIO( ... ) TEST_CASE( "Scenario: " __VA_ARGS__ )
+#define SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ )
+
+#define GIVEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " Given: " << desc )
+#define AND_GIVEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( "And given: " << desc )
+#define WHEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " When: " << desc )
+#define AND_WHEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " And when: " << desc )
+#define THEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " Then: " << desc )
+#define AND_THEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " And: " << desc )
+
+#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
+#define BENCHMARK(...) \
+ INTERNAL_CATCH_BENCHMARK(INTERNAL_CATCH_UNIQUE_NAME(C_A_T_C_H_B_E_N_C_H_), INTERNAL_CATCH_GET_1_ARG(__VA_ARGS__,,), INTERNAL_CATCH_GET_2_ARG(__VA_ARGS__,,))
+#define BENCHMARK_ADVANCED(name) \
+ INTERNAL_CATCH_BENCHMARK_ADVANCED(INTERNAL_CATCH_UNIQUE_NAME(C_A_T_C_H_B_E_N_C_H_), name)
+#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
+
+using Catch::Detail::Approx;
+
+#else // CATCH_CONFIG_DISABLE
+
+//////
+// If this config identifier is defined then all CATCH macros are prefixed with CATCH_
+#ifdef CATCH_CONFIG_PREFIX_ALL
+
+#define CATCH_REQUIRE( ... ) (void)(0)
+#define CATCH_REQUIRE_FALSE( ... ) (void)(0)
+
+#define CATCH_REQUIRE_THROWS( ... ) (void)(0)
+#define CATCH_REQUIRE_THROWS_AS( expr, exceptionType ) (void)(0)
+#define CATCH_REQUIRE_THROWS_WITH( expr, matcher ) (void)(0)
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CATCH_REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) (void)(0)
+#endif// CATCH_CONFIG_DISABLE_MATCHERS
+#define CATCH_REQUIRE_NOTHROW( ... ) (void)(0)
+
+#define CATCH_CHECK( ... ) (void)(0)
+#define CATCH_CHECK_FALSE( ... ) (void)(0)
+#define CATCH_CHECKED_IF( ... ) if (__VA_ARGS__)
+#define CATCH_CHECKED_ELSE( ... ) if (!(__VA_ARGS__))
+#define CATCH_CHECK_NOFAIL( ... ) (void)(0)
+
+#define CATCH_CHECK_THROWS( ... ) (void)(0)
+#define CATCH_CHECK_THROWS_AS( expr, exceptionType ) (void)(0)
+#define CATCH_CHECK_THROWS_WITH( expr, matcher ) (void)(0)
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CATCH_CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) (void)(0)
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+#define CATCH_CHECK_NOTHROW( ... ) (void)(0)
+
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CATCH_CHECK_THAT( arg, matcher ) (void)(0)
+
+#define CATCH_REQUIRE_THAT( arg, matcher ) (void)(0)
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+
+#define CATCH_INFO( msg ) (void)(0)
+#define CATCH_UNSCOPED_INFO( msg ) (void)(0)
+#define CATCH_WARN( msg ) (void)(0)
+#define CATCH_CAPTURE( msg ) (void)(0)
+
+#define CATCH_TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ))
+#define CATCH_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ))
+#define CATCH_METHOD_AS_TEST_CASE( method, ... )
+#define CATCH_REGISTER_TEST_CASE( Function, ... ) (void)(0)
+#define CATCH_SECTION( ... )
+#define CATCH_DYNAMIC_SECTION( ... )
+#define CATCH_FAIL( ... ) (void)(0)
+#define CATCH_FAIL_CHECK( ... ) (void)(0)
+#define CATCH_SUCCEED( ... ) (void)(0)
+
+#define CATCH_ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ))
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define CATCH_TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(__VA_ARGS__)
+#define CATCH_TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(__VA_ARGS__)
+#define CATCH_TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION(className, __VA_ARGS__)
+#define CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION(className, __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE( ... ) CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#else
+#define CATCH_TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(__VA_ARGS__) )
+#define CATCH_TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(__VA_ARGS__) )
+#define CATCH_TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION(className, __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION(className, __VA_ARGS__ ) )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE( ... ) CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#endif
+
+// "BDD-style" convenience wrappers
+#define CATCH_SCENARIO( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ))
+#define CATCH_SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_METHOD_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ), className )
+#define CATCH_GIVEN( desc )
+#define CATCH_AND_GIVEN( desc )
+#define CATCH_WHEN( desc )
+#define CATCH_AND_WHEN( desc )
+#define CATCH_THEN( desc )
+#define CATCH_AND_THEN( desc )
+
+#define CATCH_STATIC_REQUIRE( ... ) (void)(0)
+#define CATCH_STATIC_REQUIRE_FALSE( ... ) (void)(0)
+
+// If CATCH_CONFIG_PREFIX_ALL is not defined then the CATCH_ prefix is not required
+#else
+
+#define REQUIRE( ... ) (void)(0)
+#define REQUIRE_FALSE( ... ) (void)(0)
+
+#define REQUIRE_THROWS( ... ) (void)(0)
+#define REQUIRE_THROWS_AS( expr, exceptionType ) (void)(0)
+#define REQUIRE_THROWS_WITH( expr, matcher ) (void)(0)
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) (void)(0)
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+#define REQUIRE_NOTHROW( ... ) (void)(0)
+
+#define CHECK( ... ) (void)(0)
+#define CHECK_FALSE( ... ) (void)(0)
+#define CHECKED_IF( ... ) if (__VA_ARGS__)
+#define CHECKED_ELSE( ... ) if (!(__VA_ARGS__))
+#define CHECK_NOFAIL( ... ) (void)(0)
+
+#define CHECK_THROWS( ... ) (void)(0)
+#define CHECK_THROWS_AS( expr, exceptionType ) (void)(0)
+#define CHECK_THROWS_WITH( expr, matcher ) (void)(0)
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) (void)(0)
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+#define CHECK_NOTHROW( ... ) (void)(0)
+
+#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
+#define CHECK_THAT( arg, matcher ) (void)(0)
+
+#define REQUIRE_THAT( arg, matcher ) (void)(0)
+#endif // CATCH_CONFIG_DISABLE_MATCHERS
+
+#define INFO( msg ) (void)(0)
+#define UNSCOPED_INFO( msg ) (void)(0)
+#define WARN( msg ) (void)(0)
+#define CAPTURE( ... ) (void)(0)
+
+#define TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ))
+#define TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ))
+#define METHOD_AS_TEST_CASE( method, ... )
+#define REGISTER_TEST_CASE( Function, ... ) (void)(0)
+#define SECTION( ... )
+#define DYNAMIC_SECTION( ... )
+#define FAIL( ... ) (void)(0)
+#define FAIL_CHECK( ... ) (void)(0)
+#define SUCCEED( ... ) (void)(0)
+#define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ))
+
+#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
+#define TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(__VA_ARGS__)
+#define TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(__VA_ARGS__)
+#define TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION(className, __VA_ARGS__)
+#define TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION(className, __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE( ... ) TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#else
+#define TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(__VA_ARGS__) )
+#define TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(__VA_ARGS__) )
+#define TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION(className, __VA_ARGS__ ) )
+#define TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION(className, __VA_ARGS__ ) )
+#define TEMPLATE_PRODUCT_TEST_CASE( ... ) TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) TEMPLATE_TEST_CASE( __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#define TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ )
+#endif
+
+#define STATIC_REQUIRE( ... ) (void)(0)
+#define STATIC_REQUIRE_FALSE( ... ) (void)(0)
+
+#endif
+
+#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION_NO_REG( INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ), signature )
+
+// "BDD-style" convenience wrappers
+#define SCENARIO( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ) )
+#define SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_METHOD_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( C_A_T_C_H_T_E_S_T_ ), className )
+
+#define GIVEN( desc )
+#define AND_GIVEN( desc )
+#define WHEN( desc )
+#define AND_WHEN( desc )
+#define THEN( desc )
+#define AND_THEN( desc )
+
+using Catch::Detail::Approx;
+
+#endif
+
+#endif // ! CATCH_CONFIG_IMPL_ONLY
+
+// start catch_reenable_warnings.h
+
+
+#ifdef __clang__
+# ifdef __ICC // icpc defines the __clang__ macro
+# pragma warning(pop)
+# else
+# pragma clang diagnostic pop
+# endif
+#elif defined __GNUC__
+# pragma GCC diagnostic pop
+#endif
+
+// end catch_reenable_warnings.h
+// end catch.hpp
+#endif // TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED
+
diff --git a/src/qdoc/catch/qt_attribution.json b/src/qdoc/catch/qt_attribution.json
new file mode 100644
index 000000000..55b8a3ff6
--- /dev/null
+++ b/src/qdoc/catch/qt_attribution.json
@@ -0,0 +1,20 @@
+[
+ {
+ "Id": "catch2",
+ "Name": "Catch2",
+ "QDocModule": "qdoc",
+ "QtUsage": "Used for testing of QDoc",
+ "QtParts": [
+ "tests"
+ ],
+ "Files": "include/catch/catch.hpp",
+
+ "Description": "Catch2 is a multi-paradigm test framework for C++.",
+ "Homepage": "https://github.com/catchorg/Catch2",
+ "Version": "2.13.10",
+ "License": "Boost Software License 1.0",
+ "LicenseId": "BSL-1.0",
+ "LicenseFile": "CATCH_LICENSE.txt",
+ "Copyright": "Copyright (c) 2022 Two Blue Cubes Ltd. All rights reserved."
+ }
+]
diff --git a/src/qdoc/catch_conversions/CMakeLists.txt b/src/qdoc/catch_conversions/CMakeLists.txt
new file mode 100644
index 000000000..48ddcc26f
--- /dev/null
+++ b/src/qdoc/catch_conversions/CMakeLists.txt
@@ -0,0 +1,12 @@
+qt_internal_add_module(QDocCatchConversionsPrivate
+ INTERNAL_MODULE
+ HEADER_MODULE
+ EXTERNAL_HEADERS_DIR src
+ NO_GENERATE_CPP_EXPORTS
+)
+
+qt_internal_extend_target(QDocCatchConversionsPrivate
+ PUBLIC_INCLUDE_DIRECTORIES
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/QtQDocCatchConversions>
+)
diff --git a/src/qdoc/catch_conversions/src/catch_conversions/qdoc_catch_conversions.h b/src/qdoc/catch_conversions/src/catch_conversions/qdoc_catch_conversions.h
new file mode 100644
index 000000000..d1079561b
--- /dev/null
+++ b/src/qdoc/catch_conversions/src/catch_conversions/qdoc_catch_conversions.h
@@ -0,0 +1,24 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include "qt_catch_conversions.h"
+
+#include <qdoc/boundaries/filesystem/directorypath.h>
+#include <qdoc/boundaries/filesystem/filepath.h>
+#include <qdoc/boundaries/filesystem/resolvedfile.h>
+
+#include <ostream>
+
+inline std::ostream& operator<<(std::ostream& os, const DirectoryPath& dirpath) {
+ return os << dirpath.value().toStdString();
+}
+
+inline std::ostream& operator<<(std::ostream& os, const FilePath& filepath) {
+ return os << filepath.value().toStdString();
+}
+
+inline std::ostream& operator<<(std::ostream& os, const ResolvedFile& resolved_file) {
+ return os << "ResolvedFile{ query: " << resolved_file.get_query().toStdString() << ", " << "filepath: " << resolved_file.get_path() << " }";
+}
diff --git a/src/qdoc/catch_conversions/src/catch_conversions/qt_catch_conversions.h b/src/qdoc/catch_conversions/src/catch_conversions/qt_catch_conversions.h
new file mode 100644
index 000000000..68abf5fb0
--- /dev/null
+++ b/src/qdoc/catch_conversions/src/catch_conversions/qt_catch_conversions.h
@@ -0,0 +1,19 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include "std_catch_conversions.h"
+
+#include <ostream>
+
+#include <QChar>
+#include <QString>
+
+inline std::ostream& operator<<(std::ostream& os, const QChar& character) {
+ return os << QString{character}.toStdString();
+}
+
+inline std::ostream& operator<<(std::ostream& os, const QString& string) {
+ return os << string.toStdString();
+}
diff --git a/src/qdoc/catch_conversions/src/catch_conversions/std_catch_conversions.h b/src/qdoc/catch_conversions/src/catch_conversions/std_catch_conversions.h
new file mode 100644
index 000000000..be8fa65d7
--- /dev/null
+++ b/src/qdoc/catch_conversions/src/catch_conversions/std_catch_conversions.h
@@ -0,0 +1,16 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include <ostream>
+#include <optional>
+
+template<typename T>
+inline std::ostream& operator<<(std::ostream& os, const std::optional<T>& optional) {
+ os << "std::optional{\n\t";
+ if (optional) os << optional.value();
+ else os <<"nullopt";
+
+ return os << "\n};";
+}
diff --git a/src/qdoc/catch_generators/CMakeLists.txt b/src/qdoc/catch_generators/CMakeLists.txt
new file mode 100644
index 000000000..18f2e6928
--- /dev/null
+++ b/src/qdoc/catch_generators/CMakeLists.txt
@@ -0,0 +1,16 @@
+qt_internal_add_module(QDocCatchGeneratorsPrivate
+ INTERNAL_MODULE
+ HEADER_MODULE
+ EXTERNAL_HEADERS_DIR src
+ NO_GENERATE_CPP_EXPORTS
+)
+
+qt_internal_extend_target(QDocCatchGeneratorsPrivate
+ PUBLIC_INCLUDE_DIRECTORIES
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/QtQDocCatchGenerators>
+)
+
+if(QT_BUILD_TESTS)
+ add_subdirectory(tests)
+endif()
diff --git a/src/qdoc/catch_generators/src/catch_generators/generators/combinators/cycle_generator.h b/src/qdoc/catch_generators/src/catch_generators/generators/combinators/cycle_generator.h
new file mode 100644
index 000000000..b60600747
--- /dev/null
+++ b/src/qdoc/catch_generators/src/catch_generators/generators/combinators/cycle_generator.h
@@ -0,0 +1,80 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include "../../namespaces.h"
+#include "../../utilities/semantics/generator_handler.h"
+
+#include <catch/catch.hpp>
+
+#include <vector>
+
+namespace QDOC_CATCH_GENERATORS_ROOT_NAMESPACE {
+ namespace QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE {
+
+ template<typename T>
+ class CycleGenerator : public Catch::Generators::IGenerator<T> {
+ public:
+ CycleGenerator(Catch::Generators::GeneratorWrapper<T>&& generator)
+ : generator{std::move(generator)},
+ cache{},
+ cache_index{0}
+ {
+ // REMARK: We generally handle extracting the first
+ // value by using an handler, to avoid code
+ // duplication and the possibility of an error.
+ // In this specific case, we turn to a more "manual"
+ // approach as it better models the cache-based
+ // implementation, removing the need to not increment
+ // cache_index the first time that next is called.
+ cache.emplace_back(this->generator.get());
+ }
+
+ T const& get() const override { return cache[cache_index]; }
+
+ bool next() override {
+ if (generator.next()) {
+ cache.emplace_back(generator.get());
+ ++cache_index;
+ } else {
+ cache_index = (cache_index + 1) % cache.size();
+ }
+
+ return true;
+ }
+
+ private:
+ Catch::Generators::GeneratorWrapper<T> generator;
+
+ std::vector<T> cache;
+ std::size_t cache_index;
+ };
+
+ } // end QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE
+
+ /*!
+ * Returns a generator that behaves like \a generator until \a
+ * generator is exhausted, repeating the same generation that \a
+ * generator produced, infinitely, afterwards.
+ *
+ * This is generally intended to produce infinite generators from
+ * finite ones.
+ *
+ * For example, consider a generator that produces values based on
+ * another generator that it owns.
+ * If the owning generator needs to produce more values that the
+ * owned generator can support, it might fail at some point.
+ * By cycling over the owned generator, we can extend the sequence
+ * of produced values so that enough are generated, in a controlled
+ * way.
+ *
+ * The type T should generally be copyable for this generator to
+ * work.
+ */
+ template<typename T>
+ inline Catch::Generators::GeneratorWrapper<T> cycle(Catch::Generators::GeneratorWrapper<T>&& generator) {
+ return Catch::Generators::GeneratorWrapper<T>(std::unique_ptr<Catch::Generators::IGenerator<T>>(new QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::CycleGenerator(std::move(generator))));
+ }
+
+} // end QDOC_CATCH_GENERATORS_ROOT_NAMESPACE
diff --git a/src/qdoc/catch_generators/src/catch_generators/generators/combinators/oneof_generator.h b/src/qdoc/catch_generators/src/catch_generators/generators/combinators/oneof_generator.h
new file mode 100644
index 000000000..5de9dcb6c
--- /dev/null
+++ b/src/qdoc/catch_generators/src/catch_generators/generators/combinators/oneof_generator.h
@@ -0,0 +1,185 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include "../../namespaces.h"
+#include "../../utilities/statistics/percentages.h"
+#include "../../utilities/semantics/generator_handler.h"
+
+#include <catch/catch.hpp>
+
+#include <vector>
+#include <random>
+#include <algorithm>
+#include <numeric>
+
+namespace QDOC_CATCH_GENERATORS_ROOT_NAMESPACE {
+ namespace QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE {
+
+ template<typename T>
+ class OneOfGenerator : public Catch::Generators::IGenerator<T> {
+ public:
+ OneOfGenerator(
+ std::vector<Catch::Generators::GeneratorWrapper<T>>&& generators,
+ const std::vector<double>& weights
+ ) : generators{std::move(generators)},
+ random_engine{std::random_device{}()},
+ choice_distribution{weights.cbegin(), weights.cend()}
+ {
+ assert(weights.size() == this->generators.size());
+ assert(std::reduce(weights.cbegin(), weights.cend()) == Approx(100.0));
+
+ std::transform(
+ this->generators.begin(), this->generators.end(), this->generators.begin(),
+ [](auto& generator){ return QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE::handler(std::move(generator)); }
+ );
+
+ static_cast<void>(next());
+ }
+
+ T const& get() const override { return current_value; }
+
+ bool next() override {
+ std::size_t generator_index{choice_distribution(random_engine)};
+
+ if (!generators[generator_index].next()) return false;
+ current_value = generators[generator_index].get();
+
+ return true;
+ }
+
+ private:
+ std::vector<Catch::Generators::GeneratorWrapper<T>> generators;
+
+ std::mt19937 random_engine;
+ std::discrete_distribution<std::size_t> choice_distribution;
+
+ T current_value;
+ };
+
+ } // end QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE
+
+ /*!
+ * Returns a generator whose set of elements is the union of the
+ * set of elements of the generators in \a generators.
+ *
+ * Each time the generator produces a value, a generator from \a
+ * generators is randomly chosen to produce the value.
+ *
+ * The distribution for the choice is given by \a weights.
+ * The \e {ith} element in \a weights represent the percentage
+ * probability of the \e {ith} element of \a generators to be
+ * chosen.
+ *
+ * It follows that the size of \a weights must be the same as the
+ * size of \a generators.
+ *
+ * Furthermore, the sum of elements in \a weights should be a
+ * hundred.
+ *
+ * The generator produces values until a generator that is chosen
+ * to produce a value is unable to do so.
+ * The first such generator to do so will stop the generation
+ * independently of the availability of the other generators.
+ *
+ * Similarly, values will be produced as long as the chosen
+ * generator can produce a value, independently of the other
+ * generators being exhausted already.
+ */
+ template<typename T>
+ inline Catch::Generators::GeneratorWrapper<T> oneof(
+ std::vector<Catch::Generators::GeneratorWrapper<T>>&& generators,
+ const std::vector<double>& weights
+ ) {
+ return Catch::Generators::GeneratorWrapper<T>(std::unique_ptr<Catch::Generators::IGenerator<T>>(new QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::OneOfGenerator(std::move(generators), weights)));
+ }
+
+
+ /*!
+ * Returns a generator whose set of elements is the union of the
+ * set of elements of the generators in \a generators and in which
+ * the distribution of the generated elements is uniform over \a
+ * generators.
+ *
+ * Each time the generator produces a value, a generator from \a
+ * generators is randomly chosen to produce the value.
+ *
+ * Each generator from \a generators has the same chance of being
+ * chosen.
+ *
+ * Do note that the distribution over the set of values is not
+ * necessarily uniform.
+ *
+ * The generator produces values until a generator that is chosen
+ * to produce a value is unable to do so.
+ * The first such generator to do so will stop the generation
+ * independently of the availability of the other generators.
+ *
+ * Similarly, values will be produced as long as the chosen
+ * generator can produce a value, independently of the other
+ * generators being exhausted already.
+ */
+ template<typename T>
+ inline Catch::Generators::GeneratorWrapper<T> uniform_oneof(
+ std::vector<Catch::Generators::GeneratorWrapper<T>>&& generators
+ ) {
+ std::vector<double> weights(
+ generators.size(),
+ QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE::uniform_probability(generators.size())
+ );
+ return oneof(std::move(generators), std::move(weights));
+ }
+
+ /*!
+ * Returns a generator whose set of elements is the union of the
+ * set of elements of the generators in \a generators and in which
+ * the distribution of the generated elements is uniform over the
+ * elements of \a generators.
+ *
+ * The generators in \a generator should have a uniform
+ * distribution and be finite.
+ * If the set of elements that the generators in \a generator is
+ * not disjoint, the distribution will be skewed towards repeated
+ * elements.
+ *
+ * Each time the generator produces a value, a generator from \a
+ * generators is randomly chosen to produce the value.
+ *
+ * Each generator from \a generators has a probability of being
+ * chosen based on the proportion of the cardinality of the subset
+ * it produces.
+ *
+ * The \e {ith} element of \a amounts should contain the
+ * cardinality of the set produced by the \e {ith} generator in \a
+ * generators.
+ *
+ * The generator produces values until a generator that is chosen
+ * to produce a value is unable to do so.
+ * The first such generator to do so will stop the generation
+ * independently of the availability of the other generators.
+ *
+ * Similarly, values will be produced as long as the chosen
+ * generator can produce a value, independently of the other
+ * generators being exhausted already.
+ */
+ template<typename T>
+ inline Catch::Generators::GeneratorWrapper<T> uniformly_valued_oneof(
+ std::vector<Catch::Generators::GeneratorWrapper<T>>&& generators,
+ const std::vector<std::size_t>& amounts
+ ) {
+ std::size_t total_amount{std::accumulate(amounts.cbegin(), amounts.cend(), std::size_t{0})};
+
+ std::vector<double> weights;
+ weights.reserve(amounts.size());
+
+ std::transform(
+ amounts.cbegin(), amounts.cend(),
+ std::back_inserter(weights),
+ [total_amount](auto element){ return QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE::percent_of(static_cast<double>(element), static_cast<double>(total_amount)); }
+ );
+
+ return oneof(std::move(generators), std::move(weights));
+ }
+
+} // end QDOC_CATCH_GENERATORS_ROOT_NAMESPACE
diff --git a/src/qdoc/catch_generators/src/catch_generators/generators/k_partition_of_r_generator.h b/src/qdoc/catch_generators/src/catch_generators/generators/k_partition_of_r_generator.h
new file mode 100644
index 000000000..832ee2838
--- /dev/null
+++ b/src/qdoc/catch_generators/src/catch_generators/generators/k_partition_of_r_generator.h
@@ -0,0 +1,113 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include "../namespaces.h"
+
+#include <catch/catch.hpp>
+
+#include <random>
+#include <numeric>
+#include <algorithm>
+
+namespace QDOC_CATCH_GENERATORS_ROOT_NAMESPACE {
+ namespace QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE {
+
+ class KPartitionOfRGenerator : public Catch::Generators::IGenerator<std::vector<double>> {
+ public:
+ KPartitionOfRGenerator(double r, std::size_t k)
+ : random_engine{std::random_device{}()},
+ interval_distribution{0.0, r},
+ k{k},
+ r{r},
+ current_partition(k)
+ {
+ assert(r >= 0.0);
+ assert(k >= 1);
+
+ static_cast<void>(next());
+ }
+
+ std::vector<double> const& get() const override { return current_partition; }
+
+ bool next() override {
+ if (k == 1) current_partition[0] = r;
+ else {
+ // REMARK: The following wasn't formally proved
+ // but is based on intuition.
+ // It is probably erroneous but is expected to be
+ // good enough for our case.
+
+ // REMARK: We aim to provide a non skewed
+ // distribution for the elements of the partition.
+ //
+ // The reasoning for this is to ensure that our
+ // testing surface has a good chance of hitting
+ // many of the available elements between the many
+ // runs.
+ //
+ // To approximate this, a specific algorithm was chosen.
+ // The following code can be intuitively seen as doing the following:
+ //
+ // Consider an interval [0.0, r] on the real line, where r > 0.0.
+ //
+ // k - 1 > 0 elements of the interval are chosen,
+ // partitioning the interval into disjoint
+ // sub-intervals.
+ //
+ // ---------------------------------------------------------------------------------------------------------------------
+ // | | | | |
+ // 0 k_1 k_2 k_3 r
+ // | | | | |
+ // _______--------------------_______________________________________________________-----------------------------------
+ // k_1 - 0 k_2 - k_1 k_3 - k_2 r - k_3
+ // p1 p2 p3 p4
+ //
+ // The length of each sub interval is chosen as one of the elements of the partition.
+ //
+ // Trivially, the sum of the chosen elements is r.
+ //
+ // Furthermore, as long as the distribution used
+ // to choose the elements of the original interval
+ // is uniform, the probability of each partition
+ // being produced should tend to being uniform
+ // itself.
+ std::generate(current_partition.begin(), current_partition.end() - 1, [this](){ return interval_distribution(random_engine); });
+
+ current_partition.back() = r;
+
+ std::sort(current_partition.begin(), current_partition.end());
+ std::adjacent_difference(current_partition.begin(), current_partition.end(), current_partition.begin());
+ }
+
+ return true;
+ }
+
+ private:
+ std::mt19937 random_engine;
+ std::uniform_real_distribution<double> interval_distribution;
+
+ std::size_t k;
+ double r;
+
+ std::vector<double> current_partition;
+ };
+
+ } // end QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE
+
+ /*!
+ * Returns a generator that generates collections of \a k elements
+ * whose sum is \a r.
+ *
+ * \a r must be a real number greater or euqal to zero and \a k
+ * must be a natural number greater than zero.
+ *
+ * The generated partitions tends to be uniformely distributed
+ * over the set of partitions of r.
+ */
+ inline Catch::Generators::GeneratorWrapper<std::vector<double>> k_partition_of_r(double r, std::size_t k) {
+ return Catch::Generators::GeneratorWrapper<std::vector<double>>(std::unique_ptr<Catch::Generators::IGenerator<std::vector<double>>>(new QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::KPartitionOfRGenerator(r, k)));
+ }
+
+} // end QDOC_CATCH_GENERATORS_ROOT_NAMESPACE
diff --git a/src/qdoc/catch_generators/src/catch_generators/generators/path_generator.h b/src/qdoc/catch_generators/src/catch_generators/generators/path_generator.h
new file mode 100644
index 000000000..875502e49
--- /dev/null
+++ b/src/qdoc/catch_generators/src/catch_generators/generators/path_generator.h
@@ -0,0 +1,853 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+// TODO: Change the include paths to implicitly consider
+// `catch_generators` a root directory and change the CMakeLists.txt
+// file to make this possible.
+
+#include "../namespaces.h"
+#include "qchar_generator.h"
+#include "qstring_generator.h"
+#include "../utilities/semantics/move_into_vector.h"
+#include "../utilities/semantics/generator_handler.h"
+
+#if defined(Q_OS_WINDOWS)
+
+ #include "combinators/cycle_generator.h"
+
+#endif
+
+#include <catch/catch.hpp>
+
+#include <random>
+
+#include <QChar>
+#include <QString>
+#include <QStringList>
+#include <QRegularExpression>
+
+#if defined(Q_OS_WINDOWS)
+
+ #include <QStorageInfo>
+
+#endif
+
+namespace QDOC_CATCH_GENERATORS_ROOT_NAMESPACE {
+
+
+ struct PathGeneratorConfiguration {
+ double multi_device_path_probability{0.5};
+ double absolute_path_probability{0.5};
+ double directory_path_probability{0.5};
+ double has_trailing_separator_probability{0.5};
+ std::size_t minimum_components_amount{1};
+ std::size_t maximum_components_amount{10};
+
+ PathGeneratorConfiguration& set_multi_device_path_probability(double amount) {
+ multi_device_path_probability = amount;
+ return *this;
+ }
+
+ PathGeneratorConfiguration& set_absolute_path_probability(double amount) {
+ absolute_path_probability = amount;
+ return *this;
+ }
+
+ PathGeneratorConfiguration& set_directory_path_probability(double amount) {
+ directory_path_probability = amount;
+ return *this;
+ }
+
+ PathGeneratorConfiguration& set_has_trailing_separator_probability(double amount) {
+ has_trailing_separator_probability = amount;
+ return *this;
+ }
+
+ PathGeneratorConfiguration& set_minimum_components_amount(std::size_t amount) {
+ minimum_components_amount = amount;
+ return *this;
+ }
+
+ PathGeneratorConfiguration& set_maximum_components_amount(std::size_t amount) {
+ maximum_components_amount = amount;
+ return *this;
+ }
+ };
+
+ /*!
+ * \class PathGeneratorConfiguration
+ * \brief Defines some parameters to customize the generation of
+ * paths by a PathGenerator.
+ */
+
+ /*!
+ * \variable PathGeneratorConfiguration::multi_device_path_probability
+ *
+ * Every path produced by a PathGenerator configured with a
+ * mutli_device_path_probability of n has a probability of n to be
+ * \e {Multi-Device} and a probability of 1.0 - n to not be \a
+ * {Multi-Device}.
+ *
+ * multi_device_path_probability should be a value in the range [0.0,
+ * 1.0].
+ */
+
+ /*!
+ * \variable PathGeneratorConfiguration::absolute_path_probability
+ *
+ * Every path produced by a PathGenerator configured with an
+ * absolute_path_probability of n has a probability of n to be \e
+ * {Absolute} and a probability of 1.0 - n to be \e {Relative}.
+ *
+ * absolute_path_probability should be a value in the range [0.0,
+ * 1.0].
+ */
+
+ /*!
+ * \variable PathGeneratorConfiguration::directory_path_probability
+ *
+ * Every path produced by a PathGenerator configured with a
+ * directory_path_probability of n has a probability of n to be \e
+ * {To a Directory} and a probability of 1.0 - n to be \e {To a
+ * File}.
+ *
+ * directory_path_probability should be a value in the range [0.0,
+ * 1.0].
+ */
+
+ /*!
+ * \variable PathGeneratorConfiguration::has_trailing_separator_probability
+ *
+ * Every path produced by a PathGenerator configured with an
+ * has_trailing_separator_probability of n has a probability of n
+ * to \e {Have a Trailing Separator} and a probability of 1.0 - n
+ * to not \e {Have a Trailing Separator}, when this is applicable.
+ *
+ * has_trailing_separator_probability should be a value in the
+ * range [0.0, 1.0].
+ */
+
+ /*!
+ * \variable PathGeneratorConfiguration::minimum_components_amount
+ *
+ * Every path produced by a PathGenerator configured with a
+ * minimum_components_amount of n will be the concatenation of at
+ * least n non \e {device}, non \e {root}, non \e {separator}
+ * components.
+ *
+ * minimum_components_amount should be greater than zero and less
+ * than maximum_components_amount.
+ */
+
+ /*!
+ * \variable PathGeneratorConfiguration::maximum_components_amount
+ *
+ * Every path produced by a PathGenerator configured with a
+ * maximum_components_amount of n will be the concatenation of at
+ * most n non \e {device}, non \e {root}, non \e {separator} components.
+ *
+ * maximum_components_amount should be greater than or equal to
+ * minimum_components_amount.
+ */
+
+
+ namespace QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE {
+
+ class PathGenerator : public Catch::Generators::IGenerator<QString> {
+ public:
+ PathGenerator(
+ Catch::Generators::GeneratorWrapper<QString>&& device_component_generator,
+ Catch::Generators::GeneratorWrapper<QString>&& root_component_generator,
+ Catch::Generators::GeneratorWrapper<QString>&& directory_component_generator,
+ Catch::Generators::GeneratorWrapper<QString>&& filename_component_generator,
+ Catch::Generators::GeneratorWrapper<QString>&& separator_component_generator,
+ PathGeneratorConfiguration configuration = PathGeneratorConfiguration{}
+ ) : device_component_generator{QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE::handler(std::move(device_component_generator))},
+ root_component_generator{QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE::handler(std::move(root_component_generator))},
+ directory_component_generator{QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE::handler(std::move(directory_component_generator))},
+ filename_component_generator{QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE::handler(std::move(filename_component_generator))},
+ separator_component_generator{QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE::handler(std::move(separator_component_generator))},
+ random_engine{std::random_device{}()},
+ components_amount_distribution{configuration.minimum_components_amount, configuration.maximum_components_amount},
+ is_multi_device_distribution{configuration.multi_device_path_probability},
+ is_absolute_path_distribution{configuration.absolute_path_probability},
+ is_directory_path_distribution{configuration.directory_path_probability},
+ has_trailing_separator{configuration.has_trailing_separator_probability},
+ current_path{}
+ {
+ assert(configuration.minimum_components_amount > 0);
+ assert(configuration.minimum_components_amount <= configuration.maximum_components_amount);
+
+ if (!next())
+ Catch::throw_exception("Not enough values to initialize the first string");
+ }
+
+ QString const& get() const override { return current_path; }
+
+ bool next() override {
+ std::size_t components_amount{components_amount_distribution(random_engine)};
+
+ current_path = "";
+
+ // REMARK: As per our specification of a path, we
+ // do not count device components, and separators,
+ // when considering the amount of components in a
+ // path.
+ // This is a tradeoff that is not necessarily
+ // precise.
+ // Counting those kinds of components, on one
+ // hand, would allow a device component to stands
+ // on its own as a path, for example "C:", which
+ // might actually be correct in some path format.
+ // On the other hand, counting those kinds of
+ // components makes the construction of paths for
+ // our model much more complex with regards, for
+ // example, to the amount of component.
+ //
+ // Counting device components, since they can
+ // appear both in relative and absolute paths,
+ // makes the minimum amount of components
+ // different for different kinds of paths.
+ //
+ // Since absolute paths always require a root
+ // component, the minimum amount of components for
+ // a multi-device absolute path is 2.
+ //
+ // But an absolute path that is not multi-device
+ // would only require one minimum component.
+ //
+ // Similarly, problems arise with the existence of
+ // Windows' relative multi-device path, which
+ // require a leading separator component after a
+ // device component.
+ //
+ // This problem mostly comes from our model
+ // simplifying the definition of paths quite a bit
+ // into binary-forms.
+ // This simplifies the code and its structure,
+ // sacrificing some precision.
+ // The lost precision is almost none for POSIX
+ // based paths, but is graver for DOS paths, since
+ // they have a more complex specification.
+ //
+ // Currently, we expect that the paths that QDoc
+ // will encounter will mostly be in POSIX-like
+ // forms, even on Windows, and aim to support
+ // that, such that the simplification of code is
+ // considered a better tradeoff compared to the
+ // loss of precision.
+ //
+ // If this changes, the model should be changed to
+ // pursue a Windows-first modeling, moving the
+ // categorization of paths from the current binary
+ // model to the absolute, drive-relative and
+ // relative triptych that Windows uses.
+ // This more complex model should be able to
+ // completely describe posix paths too, making it
+ // a superior choice as long as the complexity is
+ // warranted.
+ //
+ // Do note that the model similarly can become
+ // inconsistent when used to generate format of
+ // paths such as the one used in some resource
+ // systems.
+ // Those are considered out-of-scope for our needs
+ // and were not taken into account when developing
+ // this generator.
+ if (is_multi_device_distribution(random_engine)) {
+ if (!device_component_generator.next()) return false;
+ current_path += device_component_generator.get();
+ }
+
+ // REMARK: Similarly to not counting other form of
+ // components, we do not count root components
+ // towards the amounts of components that the path
+ // has to simplify the code.
+ // To support the "special" root path on, for
+ // example, posix systems, we require a more
+ // complex branching logic that changes based on
+ // the path being absolute or not.
+ //
+ // We don't expect root to be a particularly
+ // useful path for QDoc purposes and expect to not
+ // have to consider it for our tests.
+ // If consideration for it become required, it is
+ // possible to test it directly in the affected
+ // systemss as a special case.
+ //
+ // If most systems are affected by the handling of
+ // a root path, then the model should be slightly
+ // changed to accommodate its generation.
+ if (is_absolute_path_distribution(random_engine)) {
+ if (!root_component_generator.next()) return false;
+
+ current_path += root_component_generator.get();
+ }
+
+ std::size_t prefix_components_amount{std::max(std::size_t{1}, components_amount) - 1};
+ while (prefix_components_amount > 0) {
+ if (!directory_component_generator.next()) return false;
+ if (!separator_component_generator.next()) return false;
+
+ current_path += directory_component_generator.get() + separator_component_generator.get();
+ --prefix_components_amount;
+ }
+
+ if (is_directory_path_distribution(random_engine)) {
+ if (!directory_component_generator.next()) return false;
+ current_path += directory_component_generator.get();
+
+ if (has_trailing_separator(random_engine)) {
+ if (!separator_component_generator.next()) return false;
+ current_path += separator_component_generator.get();
+ }
+ } else {
+ if (!filename_component_generator.next()) return false;
+ current_path += filename_component_generator.get();
+ }
+
+ return true;
+ }
+
+ private:
+ Catch::Generators::GeneratorWrapper<QString> device_component_generator;
+ Catch::Generators::GeneratorWrapper<QString> root_component_generator;
+ Catch::Generators::GeneratorWrapper<QString> directory_component_generator;
+ Catch::Generators::GeneratorWrapper<QString> filename_component_generator;
+ Catch::Generators::GeneratorWrapper<QString> separator_component_generator;
+
+ std::mt19937 random_engine;
+ std::uniform_int_distribution<std::size_t> components_amount_distribution;
+ std::bernoulli_distribution is_multi_device_distribution;
+ std::bernoulli_distribution is_absolute_path_distribution;
+ std::bernoulli_distribution is_directory_path_distribution;
+ std::bernoulli_distribution has_trailing_separator;
+
+ QString current_path;
+ };
+
+ } // end QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE
+
+/*!
+ * Returns a generator that produces QStrings that represent a
+ * path in a filesystem.
+ *
+ * A path is formed by the following components, loosely based
+ * on the abstraction that is used by std::filesystem::path:
+ *
+ * \list
+ * \li \b {device}:
+ * Represents the device on the filesystem that
+ * the path should be considered in terms of.
+ * This is an optional components that is sometimes
+ * present on multi-device systems, such as Windows, to
+ * distinguish which device the path refers to.
+ * When present, it always appears before any other
+ * component.
+ * \li \b {root}:
+ * A special sequence that marks the path as absolute.
+ * This is an optional component that is present, always,
+ * in absolute paths.
+ * \li \b {directory}:
+ * A component that represents a directory on the
+ * filesystem that the path "passes-trough".
+ * Zero or more of this components can be present in the
+ * path.
+ * A path pointing to a directory on the filesystem that
+ * is not \e {root} always ends with a component of this
+ * type.
+ * \li \b {filename}:
+ * A component that represents a file on the
+ * filesystem.
+ * When this component is present, it is present only once
+ * and always as the last component of the path.
+ * A path that has such a component is a path that points
+ * to a file on the filesystem.
+ * For some path formats, there is no difference in the
+ * format of a \e {filename} and a \e {directory}.
+ * \li \b {separator}:
+ * A component that is interleaved between other types of
+ * components to separate them so that they are
+ * recognizable.
+ * A path that points to a directory on the filesystem may
+ * sometimes have a \e {separator} at the end, after the
+ * ending \e {directory} component.
+ * \endlist
+ *
+ * Each component is representable as a string and a path is a
+ * concatenation of the string representation of some
+ * components, with the following rules:
+ *
+ * \list
+ * \li There is at most one \e {device} component.
+ * \li If a \e {device} component is present it always
+ * precedes all other components.
+ * \li There is at most one \e {root} component.
+ * \li If a \e {root} component is present it:
+ * \list
+ * \li Succeeds the \e {device} component if it is present.
+ * \li Precedes every other components if the \e {device}
+ * component is not present.
+ * \endlist
+ * \li There are zero or more \e {directory} component.
+ * \li There is at most one \e {filename} component.
+ * \li If a \e {filename} component is present it always
+ * succeeds all other components.
+ * \li Between any two successive \e {directory} components
+ * there is a \e {separator} component.
+ * \li Between each successive \e {directory} and \e
+ * {filename} component there is a \e {separator} component.
+ * \li If the last component is a \e {directory} component it
+ * can be optionally followed by a \e {separator} component.
+ * \li At least one component that is not a \e {device}, a \e
+ * {root} or \e {separator} component is present.
+ * \endlist
+ *
+ * For example, if "C:" is a \e {device} component, "\\" is a
+ * \e {root} component, "\\" is a \e {separator} component,
+ * "directory" is a \e {directory} component and "filename" is
+ * a \e {filename} component, the following are all paths:
+ *
+ * "C:\\directory", "C:\\directory\\directory", "C:filename",
+ * "directory\\directory\\", "\\directory\\filename", "filename".
+ *
+ * While the following aren't:
+ *
+ * "C:", "C:\\", "directory\\C:", "foo", "C:filename\\",
+ * "filename\\directory\\filename", "filename\\filename",
+ * "directorydirectory"."
+ *
+ * The format of different components type can be the same.
+ * For example, the \e {root} and \e {separator} component in
+ * the above example.
+ * For the purpose of generation, we do not care about the
+ * format itself and consider a component of a certain type
+ * depending only on how it is generated/where it is generated
+ * from.
+ *
+ * For example, if every component is formatted as the string
+ * "a", the string "aaa" could be a generated path.
+ * By the string alone, it is not possible to simply discern
+ * which components form it, but it would be possible to
+ * generate it if the first "a" is a \a {device} component,
+ * the second "a" is a \e {root} component and the third "a"
+ * is a \e {directory} or \e {filename} component.
+ *
+ * A path, is further said to have some properties, pairs of
+ * which are exclusive to each other.
+ *
+ * A path is said to be:
+ *
+ * \list
+ * \li \b {Multi-Device}:
+ * When it contains a \e {device} component.
+ * \li \b {Absolute}:
+ * When it contains a \e {root} component.
+ * If the path is \e {Absolute} it is not \e {Relative}.
+ * \li \b {Relative}:
+ * When it does not contain a \e {root} component.
+ * If the path is \e {Relative} it is not \e {Absolute}.
+ * \li \b {To a Directory}:
+ * When its last component is a \e {directory} component
+ * or a \e {directory} component followed by a \e
+ * {separator} component.
+ * If the path is \e {To a Directory} it is not \e {To a
+ * File}.
+ * \li \b {To a File}:
+ * When its last component is a \e {filename}.
+ * If the path is \e {To a File} it is not \e {To a
+ * Directory}.
+ * \endlist
+ *
+ * All path are \e {Relative/Absolute}, \e {To a
+ * Directory/To a File} and \e {Multi-Device} or not.
+ *
+ * Furthermore, a path that is \e {To a Directory} and whose
+ * last component is a \e {separator} component is said to \e
+ * {Have a Trailing Separator}.
+ */
+ inline Catch::Generators::GeneratorWrapper<QString> path(
+ Catch::Generators::GeneratorWrapper<QString>&& device_generator,
+ Catch::Generators::GeneratorWrapper<QString>&& root_component_generator,
+ Catch::Generators::GeneratorWrapper<QString>&& directory_generator,
+ Catch::Generators::GeneratorWrapper<QString>&& filename_generator,
+ Catch::Generators::GeneratorWrapper<QString>&& separator_generator,
+ PathGeneratorConfiguration configuration = PathGeneratorConfiguration{}
+ ) {
+ return Catch::Generators::GeneratorWrapper<QString>(
+ std::unique_ptr<Catch::Generators::IGenerator<QString>>(
+ new QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::PathGenerator(std::move(device_generator), std::move(root_component_generator), std::move(directory_generator), std::move(filename_generator), std::move(separator_generator), configuration)
+ )
+ );
+ }
+
+ namespace QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE {
+
+ // REMARK: We need a bounded length for the generation of path
+ // components as strings.
+ // We trivially do not want components to be the empty string,
+ // such that we have a minimum length of 1, but the maximum
+ // length is more malleable.
+ // We don't want components that are too long to avoid
+ // incurring in a big performance overhead, as we may generate
+ // many of them.
+ // At the same time, we want some freedom in having diffent
+ // length components.
+ // The value that was chosen is based on the general value for
+ // POSIX's NAME_MAX, which seems to tend to be 14 on many systems.
+ // We see this value as a small enough but not too much value
+ // that further brings with itself a relation to paths,
+ // increasing our portability even if it is out of scope, as
+ // almost no modern respects NAME_MAX.
+ // We don't use POSIX's NAME_MAX directly as it may not be available
+ // on all systems.
+ inline static constexpr std::size_t minimum_component_length{1};
+ inline static constexpr std::size_t maximum_component_length{14};
+
+ /*!
+ * Returns a generator that generates strings that are
+ * suitable to be used as a root component in POSIX paths.
+ *
+ * As per
+ * \l {https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_02},
+ * this is any sequence of slash characters that is not of
+ * length 2.
+ */
+ inline Catch::Generators::GeneratorWrapper<QString> posix_root() {
+ return uniformly_valued_oneof(
+ QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE::move_into_vector(
+ string(character('/', '/'), 1, 1),
+ string(character('/', '/'), 3, maximum_component_length)
+ ),
+ std::vector{1, maximum_component_length - 3}
+ );
+ }
+
+ /*!
+ * Returns a generator that generates strings that are
+ * suitable to be used as directory components in POSIX paths
+ * and that use an alphabet that should generally be supported
+ * by other systems.
+ *
+ * Components of this kind use the \l
+ * {https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_282}{Portable Filename Character Set}.
+ */
+ inline Catch::Generators::GeneratorWrapper<QString> portable_posix_directory_name() {
+ return string(
+ QDOC_CATCH_GENERATORS_QCHAR_ALPHABETS_NAMESPACE::portable_posix_filename(),
+ minimum_component_length, maximum_component_length
+ );
+ }
+
+ /*!
+ * Returns a generator that generates strings that are
+ * suitable to be used as filenames in POSIX paths and that
+ * use an alphabet that should generally be supported by
+ * other systems.
+ *
+ * Filenames of this kind use the \l
+ * {https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_282}{Portable Filename Character Set}.
+ */
+ inline Catch::Generators::GeneratorWrapper<QString> portable_posix_filename() {
+ // REMARK: "." and ".." always represent directories so we
+ // avoid generating them. Other than this, there is no
+ // difference between a file name and a directory name.
+ return filter([](auto& filename) { return filename != "." && filename != ".."; }, portable_posix_directory_name());
+ }
+
+ /*!
+ * Returns a generator that generates strings that can be used
+ * as POSIX compliant separators.
+ *
+ * As per \l
+ * {https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_271},
+ * a separator is a sequence of one or more slashes.
+ */
+ inline Catch::Generators::GeneratorWrapper<QString> posix_separator() {
+ return string(character('/', '/'), minimum_component_length, maximum_component_length);
+ }
+
+ /*!
+ * Returns a generator that generates strings that can be
+ * suitably used as logical drive names in Windows' paths.
+ *
+ * As per \l
+ * {https://docs.microsoft.com/en-us/dotnet/standard/io/file-path-formats#traditional-dos-paths}
+ * and \l
+ * {https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getlogicaldrives},
+ * they are composed of a single letter.
+ * Each generated string always follows the lettet with a
+ * colon, as it is specifically intended for path usages,
+ * where this is required.
+ *
+ * We use only uppercase letters for the drives names albeit,
+ * depending on case sensitivity, lowercase letter could be
+ * used.
+ */
+ inline Catch::Generators::GeneratorWrapper<QString> windows_logical_drives() {
+ // REMARK: If a Windows path is generated on Windows
+ // itself, we expect that it may be used to interact with
+ // the filesystem, similar to how we expect a POSIX path
+ // to be used on Linux.
+ // For this reason, we only generate a specific drive, the one
+ // that contains the current working directory, so that we
+ // know it is an actually available drive and to contain the
+ // possible modifications to the filesystem to an easily
+ // foundable place.
+
+#if defined(Q_OS_WINDOWS)
+
+ auto root_device{QStorageInfo{QDir()}.rootPath().first(1) + ":"};
+
+ return cycle(Catch::Generators::value(std::move(root_device)));
+
+#else
+
+ return Catch::Generators::map(
+ [](QString letter){ return letter + ':';},
+ string(QDOC_CATCH_GENERATORS_QCHAR_ALPHABETS_NAMESPACE::ascii_uppercase(), 1, 1)
+ );
+
+#endif
+ }
+
+ /*!
+ * Returns a generator that generate strings that can be used
+ * as separators in Windows based paths.
+ *
+ * As per \l
+ * {https://docs.microsoft.com/en-us/dotnet/api/system.io.path.directoryseparatorchar?view=net-6.0}
+ * and \l
+ * {https://docs.microsoft.com/en-us/dotnet/standard/io/file-path-formats#canonicalize-separators},
+ * this is a sequence of one or more backward or forward slashes.
+ */
+ inline Catch::Generators::GeneratorWrapper<QString> windows_separator() {
+ return uniform_oneof(
+ QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE::move_into_vector(
+ string(character('\\', '\\'), minimum_component_length, maximum_component_length),
+ string(character('/', '/'), minimum_component_length, maximum_component_length)
+ )
+ );
+ }
+
+ } // end QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE
+
+ /*!
+ * Returns a generator that generates strings representing
+ * POSIX compatible paths.
+ *
+ * The generated paths follows the format specified in \l
+ * {https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_271}.
+ *
+ * The optional length-requirements, such as PATH_MAX and
+ * NAME_MAX, are relaxed away as they are generally not
+ * respected by modern systems.
+ *
+ * It is possible to set the probability of obtaining a
+ * relative or absolute path through \a
+ * absolute_path_probability and the one of obtaining a path
+ * potentially pointing ot a directory or on a file through \a
+ * directory_path_probability.
+ */
+ inline Catch::Generators::GeneratorWrapper<QString> relaxed_portable_posix_path(double absolute_path_probability = 0.5, double directory_path_probability = 0.5) {
+ return path(
+ // POSIX path are never multi-device, so that we have
+ // provide an empty device component generator and set
+ // the probability for Multi-Device paths to zero.
+ string(character(), 0, 0),
+ QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::posix_root(),
+ QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::portable_posix_directory_name(),
+ QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::portable_posix_filename(),
+ QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::posix_separator(),
+ PathGeneratorConfiguration{}
+ .set_multi_device_path_probability(0.0)
+ .set_absolute_path_probability(absolute_path_probability)
+ .set_directory_path_probability(directory_path_probability)
+ );
+ }
+
+ /*!
+ * Returns a generator that produces strings that represents
+ * traditional DOS paths as defined in \l
+ * {https://docs.microsoft.com/en-us/dotnet/standard/io/file-path-formats#traditional-dos-paths}.
+ *
+ * The directory and filename components of a path generated
+ * in this way are, currently, restricted to use a portable
+ * character set as defined by POSIX.
+ *
+ * Do note that most paths themselves, will not be portable, on
+ * the whole, albeit they may be valid paths on other systems, as
+ * Windows uses a path system that is generally incompatible with
+ * other systems.
+ *
+ * Some possibly valid special path, such as a "C:" or "\"
+ * will never be generated.
+ */
+ inline Catch::Generators::GeneratorWrapper<QString> traditional_dos_path(
+ double absolute_path_probability = 0.5,
+ double directory_path_probability = 0.5,
+ double multi_device_path_probability = 0.5
+ ) {
+ return path(
+ QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::windows_logical_drives(),
+ QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::windows_separator(),
+ // REMAKR: Windows treats trailing dots as if they were a
+ // component of their own, that is, as the special
+ // relative paths.
+ // This seems to not be correctly handled by Qt's
+ // filesystem methods, resulting in inconsistencies when
+ // one such path is encountered.
+ // To avoid the issue, considering that an equivalent path
+ // can be formed by actually having the dots on their own
+ // as a component, we filter out all those paths that have
+ // trailing dots but are not only composed of dots.
+ Catch::Generators::filter(
+ [](auto& path){ return !(path.endsWith(".") && path.contains(QRegularExpression("[^.]"))) ; },
+ QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::portable_posix_directory_name()
+ ),
+ QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::portable_posix_filename(),
+ QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::windows_separator(),
+ PathGeneratorConfiguration{}
+ .set_multi_device_path_probability(multi_device_path_probability)
+ .set_absolute_path_probability(absolute_path_probability)
+ .set_directory_path_probability(directory_path_probability)
+ );
+ }
+
+ // TODO: Find a good way to test the following functions.
+ // native_path can probably be tied to the tests for the
+ // OS-specific functions, with TEMPLATE_TEST_CASE.
+ // The other ones may follow a similar pattern but require a bit
+ // more work so that they tie to a specific case instead of the
+ // general one.
+ // Nonetheless, this approach is both error prone and difficult to
+ // parse, because of the required if preprocessor directives,
+ // and should be avoided if possible.
+
+ /*!
+ * Returns a generator that generates QStrings that represents
+ * paths native to the underlying OS.
+ *
+ * On Windows, paths that refer to a drive always refer to the
+ * root drive.
+ *
+ * native* functions should always be chosen when using paths for
+ * testing interfacing with the filesystem itself.
+ *
+ * System outside Linux, macOS or Windows are not supported.
+ */
+ inline Catch::Generators::GeneratorWrapper<QString> native_path(double absolute_path_probability = 0.5, double directory_path_probability = 0.5) {
+#if defined(Q_OS_LINUX) || defined(Q_OS_MACOS)
+
+ return relaxed_portable_posix_path(absolute_path_probability, directory_path_probability);
+
+#elif defined(Q_OS_WINDOWS)
+
+ // REMARK: When generating native paths for testing we
+ // generally want to avoid relative paths that are
+ // drive-specific, as we want them to be tied to a specific
+ // working directory that may not be the current directory on
+ // the drive.
+ // Hence, we avoid generating paths that may have a drive component.
+ // For tests where those kind of paths are interesting, a
+ // specific Windows-only test should be made, using
+ // traditional_dos_path to generate drive-relative paths only.
+ return traditional_dos_path(absolute_path_probability, directory_path_probability, 0.0);
+
+#endif
+ }
+
+ /*!
+ * Returns a generator that generates QStrings that represents
+ * paths native to the underlying OS and that are always \e
+ * {Relative}.
+ *
+ * Avoids generating paths that refer to a directory that is not
+ * included in the path itself.
+ *
+ * System outside Linux, macOS or Windows are not supported.
+ */
+ inline Catch::Generators::GeneratorWrapper<QString> native_relative_path(double directory_path_probability = 0.5) {
+ // REMARK: When testing, we generally use some specific
+ // directory as a root for relative paths.
+ // We want the generated path to be relative to that
+ // directory because we need a clean state for the test to
+ // be reliable.
+ // When generating paths, it is possible, correctly, to
+ // have a path that refers to that directory or some
+ // parent of it, removing us from the clean state that we
+ // need.
+ // To avoid that, we filter out paths that end up referring to a directory that is not under our "root" directory.
+ //
+ // We can think of each generated component moving us
+ // further down or up, in case of "..", a directory
+ // hierarchy, or keeping us at the same place in case of
+ // ".".
+ // Any path that ends up under our original "root"
+ // directory will safely keep our clean state for testing.
+ //
+ // Each "." keeps us at the same level in the hierarchy.
+ // Each ".." moves us up one level in the hierarchy.
+ // Each component that is not "." or ".." moves us down
+ // one level into the hierarchy.
+ //
+ // Then, to avoid referring to the "root" directory or one
+ // of its parents, we need to balance out each "." and
+ // ".." with the components that precedes or follow their
+ // appearance.
+ //
+ // Since "." keeps us at the same level, it can appear how
+ // many times it wants as long as the path referes to the
+ // "root" directory or a directory or file under it and at
+ // least one other component referes to a directory or
+ // file that is under the "root" directory.
+ //
+ // Since ".." moves us one level up in the hierarchy, a
+ // sequence of n ".." components is safe when at least n +
+ // 1 non "." or ".." components appear before it.
+ //
+ // To avoid the above problem, we filter away paths that
+ // do not respect those rules.
+ return Catch::Generators::filter(
+ [](auto& path){
+ QStringList components{path.split(QRegularExpression{R"((\\|\/)+)"}, Qt::SkipEmptyParts)};
+ int depth{0};
+
+ for (auto& component : components) {
+ if (component == "..")
+ --depth;
+ else if (component != ".")
+ ++depth;
+
+ if (depth < 0) return false;
+ }
+
+ return (depth > 0);
+ },
+ native_path(0.0, directory_path_probability)
+ );
+ }
+
+ /*!
+ * Returns a generator that generates QStrings that represents
+ * paths native to the underlying OS and that are always \e
+ * {Relative} and \e {To a File}.
+ *
+ * System outside Linux, macOS or Windows are not supported.
+ */
+ inline Catch::Generators::GeneratorWrapper<QString> native_relative_file_path() {
+ return native_relative_path(0.0);
+ }
+
+ /*!
+ * Returns a generator that generates QStrings that represents
+ * paths native to the underlying OS and that are always \e
+ * {Relative} and \e {To a Directory}.
+ *
+ * System outside Linux, macOS or Windows are not supported.
+ */
+ inline Catch::Generators::GeneratorWrapper<QString> native_relative_directory_path() {
+ return native_relative_path(1.0);
+ }
+
+} // end QDOC_CATCH_GENERATORS_ROOT_NAMESPACE
diff --git a/src/qdoc/catch_generators/src/catch_generators/generators/qchar_generator.h b/src/qdoc/catch_generators/src/catch_generators/generators/qchar_generator.h
new file mode 100644
index 000000000..33efc5ea4
--- /dev/null
+++ b/src/qdoc/catch_generators/src/catch_generators/generators/qchar_generator.h
@@ -0,0 +1,110 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include "../namespaces.h"
+#include "../utilities/semantics/move_into_vector.h"
+#include "combinators/oneof_generator.h"
+
+#include <catch/catch.hpp>
+
+#include <random>
+
+#include <QChar>
+
+namespace QDOC_CATCH_GENERATORS_ROOT_NAMESPACE {
+ namespace QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE {
+
+ class QCharGenerator : public Catch::Generators::IGenerator<QChar> {
+ public:
+ QCharGenerator(
+ char16_t lower_bound = std::numeric_limits<char16_t>::min(),
+ char16_t upper_bound = std::numeric_limits<char16_t>::max()
+ ) : random_engine{std::random_device{}()},
+ distribution{static_cast<unsigned int>(lower_bound), static_cast<unsigned int>(upper_bound)}
+ {
+ assert(lower_bound <= upper_bound);
+ static_cast<void>(next());
+ }
+
+ QChar const& get() const override { return current_character; }
+
+ bool next() override {
+ current_character = QChar(static_cast<char16_t>(distribution(random_engine)));
+
+ return true;
+ }
+
+ private:
+ QChar current_character;
+
+ std::mt19937 random_engine;
+ std::uniform_int_distribution<unsigned int> distribution;
+ };
+
+ } // end QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE
+
+
+ /*!
+ * Returns a generator of that generates elements of QChar whose
+ * ucs value is in the range [\a lower_bound, \a upper_bound].
+ *
+ * When \a lower_bound = \a upper_bound, the generator infinitely
+ * generates the same character.
+ */
+ inline Catch::Generators::GeneratorWrapper<QChar> character(char16_t lower_bound = std::numeric_limits<char16_t>::min(), char16_t upper_bound = std::numeric_limits<char16_t>::max()) {
+ return Catch::Generators::GeneratorWrapper<QChar>(std::unique_ptr<Catch::Generators::IGenerator<QChar>>(new QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::QCharGenerator(lower_bound, upper_bound)));
+ }
+
+
+ namespace QDOC_CATCH_GENERATORS_QCHAR_ALPHABETS_NAMESPACE {
+
+ namespace QDOC_CATCH_GENERATORS_TRAITS_NAMESPACE {
+
+ enum class Alphabets : std::size_t {digit, ascii_lowercase, ascii_uppercase, ascii_alpha, ascii_alphanumeric, portable_posix_filename};
+
+ template<Alphabets alphabet>
+ struct sizeof_alphabet;
+
+ template<Alphabets alphabet>
+ inline constexpr std::size_t sizeof_alphabet_v = sizeof_alphabet<alphabet>::value;
+
+ template <> struct sizeof_alphabet<Alphabets::digit> { static constexpr std::size_t value{'9' - '0'}; };
+ template <> struct sizeof_alphabet<Alphabets::ascii_lowercase> { static constexpr std::size_t value{'z' - 'a'}; };
+ template<> struct sizeof_alphabet<Alphabets::ascii_uppercase> { static constexpr std::size_t value{'Z' - 'A'}; };
+ template<> struct sizeof_alphabet<Alphabets::ascii_alpha> { static constexpr std::size_t value{sizeof_alphabet_v<Alphabets::ascii_lowercase> + sizeof_alphabet_v<Alphabets::ascii_uppercase>}; };
+ template<> struct sizeof_alphabet<Alphabets::ascii_alphanumeric>{ static constexpr std::size_t value{sizeof_alphabet_v<Alphabets::ascii_alpha> + sizeof_alphabet_v<Alphabets::digit>}; };
+
+ } // end QDOC_CATCH_GENERATORS_TRAITS_NAMESPACE
+
+
+ inline Catch::Generators::GeneratorWrapper<QChar> digit() {
+ return Catch::Generators::GeneratorWrapper<QChar>(std::unique_ptr<Catch::Generators::IGenerator<QChar>>(new QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::QCharGenerator('0', '9')));
+ }
+
+ inline Catch::Generators::GeneratorWrapper<QChar> ascii_lowercase() {
+ return Catch::Generators::GeneratorWrapper<QChar>(std::unique_ptr<Catch::Generators::IGenerator<QChar>>(new QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::QCharGenerator('a', 'z')));
+ }
+
+ inline Catch::Generators::GeneratorWrapper<QChar> ascii_uppercase() {
+ return Catch::Generators::GeneratorWrapper<QChar>(std::unique_ptr<Catch::Generators::IGenerator<QChar>>(new QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::QCharGenerator('A', 'Z')));
+ }
+
+ inline Catch::Generators::GeneratorWrapper<QChar> ascii_alpha() {
+ return uniform_oneof(QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE::move_into_vector(ascii_lowercase(), ascii_uppercase()));
+ }
+
+ inline Catch::Generators::GeneratorWrapper<QChar> ascii_alphanumeric() {
+ return uniformly_valued_oneof(QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE::move_into_vector(ascii_alpha(), digit()), std::vector{traits::sizeof_alphabet_v<traits::Alphabets::ascii_alpha> , traits::sizeof_alphabet_v<traits::Alphabets::digit>});
+ }
+
+ inline Catch::Generators::GeneratorWrapper<QChar> portable_posix_filename() {
+ return uniformly_valued_oneof(QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE::move_into_vector(ascii_alphanumeric(), character('.', '.'), character('-', '-'), character('_', '_')),
+ std::vector{traits::sizeof_alphabet_v<traits::Alphabets::ascii_alphanumeric>, std::size_t{1}, std::size_t{1}, std::size_t{1}});
+ }
+
+ } // end QDOC_CATCH_GENERATORS_QCHAR_ALPHABETS_NAMESPACE
+
+
+} // end QDOC_CATCH_GENERATORS_ROOT_NAMESPACE
diff --git a/src/qdoc/catch_generators/src/catch_generators/generators/qstring_generator.h b/src/qdoc/catch_generators/src/catch_generators/generators/qstring_generator.h
new file mode 100644
index 000000000..fe854d22f
--- /dev/null
+++ b/src/qdoc/catch_generators/src/catch_generators/generators/qstring_generator.h
@@ -0,0 +1,92 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include "../namespaces.h"
+#include "qchar_generator.h"
+#include "../utilities/semantics/generator_handler.h"
+
+#include <catch/catch.hpp>
+
+#include <random>
+
+#include <QString>
+
+namespace QDOC_CATCH_GENERATORS_ROOT_NAMESPACE {
+ namespace QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE {
+
+ class QStringGenerator : public Catch::Generators::IGenerator<QString> {
+ public:
+ QStringGenerator(Catch::Generators::GeneratorWrapper<QChar>&& character_generator, qsizetype minimum_length, qsizetype maximum_length)
+ : character_generator{QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE::handler(std::move(character_generator))},
+ random_engine{std::random_device{}()},
+ length_distribution{minimum_length, maximum_length},
+ current_string{}
+ {
+ assert(minimum_length >= 0);
+ assert(maximum_length >= 0);
+ assert(minimum_length <= maximum_length);
+
+ if (!next())
+ Catch::throw_exception("Not enough values to initialize the first string");
+ }
+
+ QString const& get() const override { return current_string; }
+
+ bool next() override {
+ qsizetype length{length_distribution(random_engine)};
+
+ current_string = QString();
+ for (qsizetype length_index{0}; length_index < length; ++length_index) {
+ if (!character_generator.next()) return false;
+
+ current_string += character_generator.get();
+ }
+
+ return true;
+ }
+
+ private:
+ Catch::Generators::GeneratorWrapper<QChar> character_generator;
+
+ std::mt19937 random_engine;
+ std::uniform_int_distribution<qsizetype> length_distribution;
+
+ QString current_string;
+ };
+
+ } // end QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE
+
+ /*!
+ * Returns a generator that generates elements of QString from
+ * some amount of elements taken from \a character_generator.
+ *
+ * The generated strings will have a length in the range
+ * [\a minimum_length, \a maximum_length].
+ *
+ * For compatibility with the Qt API, it is possible to provide
+ * negative bounds for the length. This is, nonetheless,
+ * considered an error such that the bounds should always be
+ * greater or equal to zero.
+ *
+ * It is similarly considered an error to have minimum_length <=
+ * maximum_length.
+ *
+ * The provided generator will generate elements until \a
+ * character_generator is exhausted.
+ */
+ inline Catch::Generators::GeneratorWrapper<QString> string(Catch::Generators::GeneratorWrapper<QChar>&& character_generator, qsizetype minimum_length, qsizetype maximum_length) {
+ return Catch::Generators::GeneratorWrapper<QString>(std::unique_ptr<Catch::Generators::IGenerator<QString>>(new QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::QStringGenerator(std::move(character_generator), minimum_length, maximum_length)));
+ }
+
+ /*!
+ * Returns an infinite generator whose elements are the empty
+ * QString.
+ */
+ inline Catch::Generators::GeneratorWrapper<QString> empty_string() {
+ return Catch::Generators::GeneratorWrapper<QString>(std::unique_ptr<Catch::Generators::IGenerator<QString>>(new QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::QStringGenerator(character(), 0, 0)));
+ }
+
+
+} // end QDOC_CATCH_GENERATORS_ROOT_NAMESPACE
diff --git a/src/qdoc/catch_generators/src/catch_generators/namespaces.h b/src/qdoc/catch_generators/src/catch_generators/namespaces.h
new file mode 100644
index 000000000..3c956d44f
--- /dev/null
+++ b/src/qdoc/catch_generators/src/catch_generators/namespaces.h
@@ -0,0 +1,14 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#define QDOC_CATCH_GENERATORS_ROOT_NAMESPACE qdoc::catch_generators
+
+#define QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE details
+
+#define QDOC_CATCH_GENERATORS_TRAITS_NAMESPACE traits
+
+#define QDOC_CATCH_GENERATORS_QCHAR_ALPHABETS_NAMESPACE alphabets
+
+#define QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE QDOC_CATCH_GENERATORS_ROOT_NAMESPACE::QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::utils
diff --git a/src/qdoc/catch_generators/src/catch_generators/utilities/semantics/copy_value.h b/src/qdoc/catch_generators/src/catch_generators/utilities/semantics/copy_value.h
new file mode 100644
index 000000000..57798be1a
--- /dev/null
+++ b/src/qdoc/catch_generators/src/catch_generators/utilities/semantics/copy_value.h
@@ -0,0 +1,26 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include "../../namespaces.h"
+
+#include <type_traits>
+
+namespace QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE {
+
+ /*!
+ * Forces \value to be copied in an expression context.
+ *
+ * This is used in contexts where inferences of a type that
+ * requires generality might identify a reference when ownership
+ * is required.
+ *
+ * Note that the compiler might optmize the copy away. This is a
+ * non-issue as we are only interested in breaking lifetime
+ * dependencies.
+ */
+ template<typename T>
+ std::remove_reference_t<T> copy_value(T value) { return value; }
+
+} // end QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE
diff --git a/src/qdoc/catch_generators/src/catch_generators/utilities/semantics/generator_handler.h b/src/qdoc/catch_generators/src/catch_generators/utilities/semantics/generator_handler.h
new file mode 100644
index 000000000..328627512
--- /dev/null
+++ b/src/qdoc/catch_generators/src/catch_generators/utilities/semantics/generator_handler.h
@@ -0,0 +1,97 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include "../../namespaces.h"
+
+#include <catch/catch.hpp>
+
+#include <optional>
+#include <cassert>
+
+namespace QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE {
+
+ template<typename T>
+ class GeneratorHandler : public Catch::Generators::IGenerator<T> {
+ public:
+
+ GeneratorHandler(Catch::Generators::GeneratorWrapper<T>&& generator)
+ : generator{std::move(generator)},
+ first_call{true}
+ {}
+
+ T const& get() const override {
+ assert(!first_call);
+ return generator.get();
+ }
+
+ bool next() override {
+ if (first_call) {
+ first_call = false;
+ return true;
+ }
+
+ return generator.next();
+ }
+
+ private:
+ Catch::Generators::GeneratorWrapper<T> generator;
+ bool first_call;
+ };
+
+
+ /*!
+ * Returns a generator wrapping \a generator that ensures that
+ * changes its semantics so that the first call to get should be
+ * preceded by a call to next.
+ *
+ * Catch generators require that is valid to call get and obtain a
+ * valid value on a generator that was just created.
+ * That is, generators should be non-empty and their first value
+ * should be initialized on construction.
+ *
+ * Normally, this is not a problem, and the next implementation of
+ * the generator can be simply called in the constructor.
+ * But when a generator depends on other generators, doing so will
+ * generally skip the first value that the generator
+ * produces, as the wrapping generator will need to advance the
+ * underlying generator, losing the value in the process.
+ * This is in particular, a problem, on generators that are finite
+ * or infinite and ordered.
+ *
+ * To solve the issue, the original value can be saved before
+ * advancing the generator or some code can be duplicated or
+ * abstracted so that what a new element can be generated without
+ * advancing the underlying generator.
+ *
+ * While this is acceptable, it can be error prone on more complex
+ * generators, generators that randomly access a collection of
+ * generators and so on.
+ *
+ * To simplify this process, this generator changes the semantics
+ * of the wrapped generator such that the first value of the
+ * generator is produced after the first call to next and the
+ * generator is considered in an invalid state before the first
+ * advancement.
+ *
+ * In this way, by wrapping all generators that a generator
+ * depends on, the implementation required for the first value is
+ * the same as the one required for all following values, with
+ * regards to the sequencing of next and get operations,
+ * simplifying the implementation of dependent generators.
+ *
+ * Do note that, while the generator returned by this function
+ * implments the generator interface that Catch2 requires, it
+ * cannot be normally used as a generator as it fails to comply
+ * with the first value semantics that a generator requires.
+ * Indeed, it should only be used as an intermediate wrapper for
+ * the implementation of generators that depends on other
+ * generators.
+ */
+ template<typename T>
+ inline Catch::Generators::GeneratorWrapper<T> handler(Catch::Generators::GeneratorWrapper<T>&& generator) {
+ return Catch::Generators::GeneratorWrapper<T>(std::unique_ptr<Catch::Generators::IGenerator<T>>(new GeneratorHandler(std::move(generator))));
+ }
+
+} // end QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE
diff --git a/src/qdoc/catch_generators/src/catch_generators/utilities/semantics/move_into_vector.h b/src/qdoc/catch_generators/src/catch_generators/utilities/semantics/move_into_vector.h
new file mode 100644
index 000000000..5e780085b
--- /dev/null
+++ b/src/qdoc/catch_generators/src/catch_generators/utilities/semantics/move_into_vector.h
@@ -0,0 +1,62 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include "../../namespaces.h"
+
+#include <vector>
+#include <tuple>
+
+namespace QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE {
+
+ namespace QDOC_CATCH_GENERATORS_TRAITS_NAMESPACE {
+
+ /*!
+ * Returns the type of the first element of Args.
+ *
+ * Args is expected to have at least one
+ */
+ template<typename... Args>
+ using first_from_pack_t = std::tuple_element_t<0, std::tuple<Args...>>;
+
+ } // end QDOC_CATCH_GENERATORS_TRAITS_NAMESPACE
+
+
+ /*!
+ * Builds an std::vector by moving \a movables into it.
+ *
+ * \a movables must be made of homogenous types.
+ *
+ * This function is intended to allow the construction of an
+ * std::vector<T>, where T is a move only type, as an expression,
+ * to lighten the idiom.
+ *
+ * For example, Catch's GeneratorWrapper<T> adapts a
+ * std::unique_ptr, which is move only, making it impossible to
+ * build a std::vector from them in place.
+ *
+ * Then, everywhere this is needed, a more complex approach of
+ * generating the collection of objects, generating a vector of a
+ * suitable size and iterating the objects to move-emplace them in
+ * the vector is required.
+ *
+ * This not only complicates the code but is incompatible with a
+ * GENERATE expression, making it extremely hard, noisy and error
+ * prone to use them together.
+ *
+ * In those cases, then, a call to move_into_vector can be used as
+ * an expression to circumvent the problem.
+ */
+ template<typename... MoveOnlyTypes>
+ inline auto move_into_vector(MoveOnlyTypes... movables) {
+ std::vector<QDOC_CATCH_GENERATORS_TRAITS_NAMESPACE::first_from_pack_t<MoveOnlyTypes...>>
+ moved_into_vector;
+ moved_into_vector.reserve(sizeof...(movables));
+
+ (moved_into_vector.emplace_back(std::move(movables)), ...);
+
+ return moved_into_vector;
+ }
+
+} // end QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE
diff --git a/src/qdoc/catch_generators/src/catch_generators/utilities/statistics/distribution.h b/src/qdoc/catch_generators/src/catch_generators/utilities/statistics/distribution.h
new file mode 100644
index 000000000..4374993bf
--- /dev/null
+++ b/src/qdoc/catch_generators/src/catch_generators/utilities/statistics/distribution.h
@@ -0,0 +1,158 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include "../../namespaces.h"
+
+#include <functional>
+#include <optional>
+#include <ostream>
+#include <unordered_map>
+
+namespace QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE {
+
+ template<typename T>
+ using Histogram = std::unordered_map<T, std::size_t>;
+
+ template<typename InputIt, typename GroupBy>
+ auto make_histogram(InputIt begin, InputIt end, GroupBy&& group_by) {
+ Histogram<std::invoke_result_t<GroupBy, decltype(*begin)>> histogram{};
+
+ while (begin != end) {
+ auto key{std::invoke(std::forward<GroupBy>(group_by), *begin)};
+
+ histogram.try_emplace(key, 0);
+ histogram[key] += 1;
+ ++begin;
+ }
+
+ return histogram;
+ }
+
+ template<typename T>
+ struct DistributionError {
+ T value;
+ double probability;
+ double expected_probability;
+ };
+
+ template<typename T>
+ inline std::ostream& operator<<(std::ostream& os, const DistributionError<T>& error) {
+ return os << "DistributionError{" <<
+ "The value { " << error.value <<
+ " } appear with a probability of { " << error.probability <<
+ " } while a probability of { " << error.expected_probability << " } was expected." <<
+ "}";
+ }
+
+ // REMARK: The following should really return an Either of unit/error
+ // but std::variant in C++ is both extremely unusable and comes with a
+ // strong overhead unless certain conditions are met.
+ // For this reason, we keep to the less intutitive optional error.
+
+ /*!
+ * Returns true when the given \a sequence approximately respects a
+ * given distribution.
+ *
+ * The \a sequence respects a given distribution when the count of
+ * each collection of values is a percentage of the total values that
+ * is near the percentage probability described by distribution.
+ *
+ * The values in \a sequence are collected according to \a group_by.
+ * \a group_by, given an element of \a sequence, should return a value
+ * of some type that represent the category of the inspected value.
+ * Values that have the same category share their count.
+ *
+ * The distribution that should be respected is given by \a
+ * probability_of. \a probability_of is a function that takes a
+ * category that was produced from a call to \a group_by and returns
+ * the expect probability, in percentage, of apperance for that
+ * category.
+ *
+ * The given probability is then compared to the one found by counting
+ * the element of \a sequence under \a group_by, to ensure that it
+ * matches.
+ *
+ * The margin of error for the comparison is given, in percentage
+ * points, by \a margin.
+ * The approximation uses an absolute comparison and scales the
+ * margin inversely based on the size of \a sequence, to account for the
+ * precision of the data set itself.
+ *
+ * When the distribution is not respected, a DistributionError is
+ * returned enclosed in an optional value.
+ * The error allows reports which the first category for which the
+ * comparison failed, along with its expected probability and the one
+ * that was actually inferred from \a sequence.
+ */
+ template<typename T, typename GroupBy, typename ProbabilityOf>
+ std::optional<DistributionError<T>> respects_distribution(std::vector<T>&& sequence, GroupBy&& group_by, ProbabilityOf&& probability_of, double margin = 33) {
+ std::size_t data_point_amount{sequence.size()};
+
+ // REMARK: We scale the margin based on the data set to allow for
+ // an easier change in downstream tests.
+ // The precision required for the approximation will vary
+ // depending on how many values we generate.
+ // The amount of values we generate depends on how much time we
+ // want the tests to take.
+ // This amount may change in the future. For example, as code is
+ // added and tests are added, we might need some expensive
+ // computations here and there.
+ // Sometimes, this will increase the test suite runtime without an
+ // obvious way of improving the performance of the underlying code
+ // to reduce it.
+ // In those cases, the total run time can be decreased by running
+ // less generations for battle-tested tests.
+ // If some code has not been changed for a long time, it will have
+ // had thousands of generations by that point, giving us a good
+ // degree of certainty of it not being bugged (for whatever bugs
+ // the tests account for).
+ // Then, running a certain amount of generation is not required
+ // anymore such that some of them can be optimized out.
+ // For tests like the one using this function, where our ability
+ // to test is always dependent on the amount of generations,
+ // changing the generated amount will mean that we will need to
+ // change our conditions too, potentially changing the meaning of
+ // the test.
+ // To take this into account, we perform a scaling on the
+ // condition itself, so that if the amount of data points that are
+ // generated changes, we do not generally have to change anything
+ // in the condition.
+ //
+ // For this case, we scale logarithmically_10 for the simple
+ // reason that we tend to generate values in power of tens,
+ // starting with the 100 values default that Quickcheck used.
+ //
+ // The default value for the margin on which the scaling is based,
+ // was chosen heuristically.
+ // As we expect generation under 10^3 to be generally meaningless
+ // for this kind of testing, the value was chosen so that it would
+ // start to normalize around that amount.
+ // Deviation of about 5-10% were identified trough various
+ // generations for an amount of data points near 1000, while a
+ // deviation of about 1-3% was identified with about 10000 values.
+ // With the chosen default value, the scaling approaches those
+ // percentage points with some margin of error.
+ //
+ // We expect up to a 10%, or a bit more, deviation to be suitable
+ // for our purposes, as it would still allow for a varied
+ // distribution in downstream consumers.
+ double scaled_margin{margin * (1.0/std::log10(data_point_amount))};
+
+ auto histogram{make_histogram(sequence.begin(), sequence.end(), std::forward<GroupBy>(group_by))};
+
+ for (auto& bin : histogram) {
+ auto [key, count] = bin;
+
+ double actual_percentage{percent_of(static_cast<double>(count), static_cast<double>(data_point_amount))};
+ double expected_percentage{std::invoke(std::forward<ProbabilityOf>(probability_of), key)};
+
+ if (!(actual_percentage == Approx(expected_percentage).margin(scaled_margin)))
+ return std::make_optional(DistributionError<T>{key, actual_percentage, expected_percentage});
+ }
+
+ return std::nullopt;
+ }
+
+} // end QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE
diff --git a/src/qdoc/catch_generators/src/catch_generators/utilities/statistics/percentages.h b/src/qdoc/catch_generators/src/catch_generators/utilities/statistics/percentages.h
new file mode 100644
index 000000000..2d80a459f
--- /dev/null
+++ b/src/qdoc/catch_generators/src/catch_generators/utilities/statistics/percentages.h
@@ -0,0 +1,49 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include "../../namespaces.h"
+
+#include <cassert>
+
+namespace QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE {
+
+ /*!
+ * Returns the percentage of \amount over \a total.
+ *
+ * \a amount needs to be greater or equal to zero and \a total
+ * needs to be greater than zero.
+ */
+ inline double percent_of(double amount, double total) {
+ assert(amount >= 0.0);
+ assert(total > 0.0);
+
+ return (amount / total) * 100.0;
+ }
+
+ /*!
+ * Given the cardinality of a set, returns the percentage
+ * probability that applied to every element of the set generates
+ * a uniform distribution.
+ */
+ inline double uniform_probability(std::size_t cardinality) {
+ assert(cardinality > 0);
+
+ return (100.0 / static_cast<double>(cardinality));
+ }
+
+ /*!
+ * Returns a percentage probability that is equal to \a
+ * probability.
+ *
+ * \a probability must be in the range [0.0, 1.0]
+ */
+ inline double probability_to_percentage(double probability) {
+ assert(probability >= 0.0);
+ assert(probability <= 1.0);
+
+ return probability * 100.0;
+ }
+
+} // end QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE
diff --git a/src/qdoc/catch_generators/tests/CMakeLists.txt b/src/qdoc/catch_generators/tests/CMakeLists.txt
new file mode 100644
index 000000000..5a4b8667d
--- /dev/null
+++ b/src/qdoc/catch_generators/tests/CMakeLists.txt
@@ -0,0 +1,20 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(tst_QDoc_Catch_Generators
+ SOURCES
+ ${CMAKE_CURRENT_LIST_DIR}/main.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/generators/catch_qchar_generator.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/generators/catch_qstring_generator.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/generators/catch_k_partition_of_r_generator.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/generators/catch_path_generator.cpp
+
+ ${CMAKE_CURRENT_LIST_DIR}/generators/combinators/catch_oneof_generator.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/generators/combinators/catch_cycle_generator.cpp
+
+ ${CMAKE_CURRENT_LIST_DIR}/utilities/semantics/catch_generator_handler.cpp
+ LIBRARIES
+ Qt::QDocCatchPrivate
+ Qt::QDocCatchConversionsPrivate
+ Qt::QDocCatchGeneratorsPrivate
+)
diff --git a/src/qdoc/catch_generators/tests/generators/catch_k_partition_of_r_generator.cpp b/src/qdoc/catch_generators/tests/generators/catch_k_partition_of_r_generator.cpp
new file mode 100644
index 000000000..27b79c511
--- /dev/null
+++ b/src/qdoc/catch_generators/tests/generators/catch_k_partition_of_r_generator.cpp
@@ -0,0 +1,41 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include <catch_generators/namespaces.h>
+#include <catch_generators/generators/k_partition_of_r_generator.h>
+
+#include <catch/catch.hpp>
+
+#include <numeric>
+
+using namespace QDOC_CATCH_GENERATORS_ROOT_NAMESPACE;
+
+SCENARIO("Generating a k-partition of a real number", "[Partition][Reals]") {
+ GIVEN("A real number r greater or equal to zero") {
+ double r = GENERATE(take(10, random(0.0, 1000000.0)));
+
+ AND_GIVEN("An amount of desired elements k greater than zero") {
+ std::size_t k = GENERATE(take(10, random(1, 100)));
+
+ WHEN("A k-partition of r is generated") {
+ auto k_partition = GENERATE_COPY(take(10, k_partition_of_r(r, k)));
+
+ THEN("The partition contains k elements") {
+ REQUIRE(k_partition.size() == k);
+
+ AND_THEN("The sum of those elements is r") {
+ REQUIRE(std::accumulate(k_partition.begin(), k_partition.end(), 0.0) == Approx(r));
+ }
+ }
+ }
+ }
+ }
+}
+
+TEST_CASE("All 1-partition of r are singleton collection with r as their element", "[Partition][Reals][SpecialCase]") {
+ double r = GENERATE(take(10, random(0.0, 1000000.0)));
+ auto k_partition = GENERATE_COPY(take(10, k_partition_of_r(r, 1)));
+
+ REQUIRE(k_partition.size() == 1);
+ REQUIRE(k_partition.front() == r);
+}
diff --git a/src/qdoc/catch_generators/tests/generators/catch_path_generator.cpp b/src/qdoc/catch_generators/tests/generators/catch_path_generator.cpp
new file mode 100644
index 000000000..deb33421b
--- /dev/null
+++ b/src/qdoc/catch_generators/tests/generators/catch_path_generator.cpp
@@ -0,0 +1,755 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include <catch_generators/namespaces.h>
+#include <catch_generators/generators/qchar_generator.h>
+#include <catch_generators/generators/qstring_generator.h>
+#include <catch_generators/generators/path_generator.h>
+#include <catch_generators/generators/combinators/cycle_generator.h>
+#include <catch_generators/utilities/statistics/percentages.h>
+#include <catch_generators/utilities/statistics/distribution.h>
+#include <catch_generators/utilities/semantics/copy_value.h>
+
+#include <catch_conversions/qt_catch_conversions.h>
+
+#include <catch/catch.hpp>
+
+#include <QString>
+#include <QStringList>
+#include <QRegularExpression>
+
+using namespace QDOC_CATCH_GENERATORS_ROOT_NAMESPACE;
+using namespace QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE;
+
+using namespace Qt::StringLiterals;
+
+TEST_CASE("A path generated with a multi_device_path_probability of 1.0 always contains a device component.", "[Path][Content][SpecialCase]") {
+ QString device_component_value{"C:"};
+ auto path_generator = path(
+ Catch::Generators::value(copy_value(device_component_value)),
+ empty_string(),
+ empty_string(),
+ empty_string(),
+ empty_string(),
+ PathGeneratorConfiguration{}.set_multi_device_path_probability(1.0)
+ );
+
+ auto generated_path = GENERATE_REF(take(100, std::move(path_generator)));
+
+ REQUIRE(generated_path.contains(device_component_value));
+}
+
+TEST_CASE("A path generated with a multi_device_path_probability of 0.0 never contains a device component.", "[Path][Content][SpecialCase]") {
+ QString device_component_value{"C:"};
+ auto path_generator = path(
+ Catch::Generators::value(copy_value(device_component_value)),
+ empty_string(),
+ empty_string(),
+ empty_string(),
+ empty_string(),
+ PathGeneratorConfiguration{}.set_multi_device_path_probability(0.0)
+ );
+
+ auto generated_path = GENERATE_REF(take(100, std::move(path_generator)));
+
+ REQUIRE(!generated_path.contains(device_component_value));
+}
+
+TEST_CASE("A path generated with an absolute_path_probability of 1.0 always contains a root component.", "[Path][Content][SpecialCase]") {
+ QString root_component_value{"\\"};
+ auto path_generator = path(
+ empty_string(),
+ Catch::Generators::value(copy_value(root_component_value)),
+ empty_string(),
+ empty_string(),
+ empty_string(),
+ PathGeneratorConfiguration{}.set_absolute_path_probability(1.0)
+ );
+
+ auto generated_path = GENERATE_REF(take(100, std::move(path_generator)));
+
+ REQUIRE(generated_path.contains(root_component_value));
+}
+
+TEST_CASE("A path generated with an absolute_path_probability of 0.0 never contains a root component.", "[Path][Content][SpecialCase]") {
+ QString root_component_value{"\\"};
+ auto path_generator = path(
+ empty_string(),
+ Catch::Generators::value(copy_value(root_component_value)),
+ empty_string(),
+ empty_string(),
+ empty_string(),
+ PathGeneratorConfiguration{}.set_absolute_path_probability(0.0)
+ );
+
+ auto generated_path = GENERATE_REF(take(100, std::move(path_generator)));
+
+ REQUIRE(!generated_path.contains(root_component_value));
+}
+
+TEST_CASE("A path generated with a directory_path_probability of 1.0 always ends with a root, directory or directory followed by separator component.", "[Path][Content][SpecialCase]") {
+ QString root_component_value{"root"};
+ QString directory_component_value{"dir"};
+ QString separator_component_value{"sep"};
+
+ auto path_generator = path(
+ cycle(Catch::Generators::value(QString("device"))),
+ cycle(Catch::Generators::value(copy_value(root_component_value))),
+ cycle(Catch::Generators::value(copy_value(directory_component_value))),
+ cycle(Catch::Generators::value(QString("filename"))),
+ cycle(Catch::Generators::value(copy_value(separator_component_value))),
+ PathGeneratorConfiguration{}.set_directory_path_probability(1.0)
+ );
+
+ auto generated_path = GENERATE_REF(take(100, std::move(path_generator)));
+
+ REQUIRE((
+ generated_path.endsWith(root_component_value) ||
+ generated_path.endsWith(directory_component_value) ||
+ generated_path.endsWith(directory_component_value + separator_component_value)
+ ));
+}
+
+TEST_CASE("A path generated with a directory_path_probability of 0.0 always ends with a filename component.", "[Path][Content][SpecialCase]") {
+ QString filename_component_value{"file"};
+
+ auto path_generator = path(
+ cycle(Catch::Generators::value(QString("device"))),
+ cycle(Catch::Generators::value(QString("root"))),
+ cycle(Catch::Generators::value(QString("dir"))),
+ cycle(Catch::Generators::value(copy_value(filename_component_value))),
+ cycle(Catch::Generators::value(QString("sep"))),
+ PathGeneratorConfiguration{}.set_directory_path_probability(0.0)
+ );
+
+ auto generated_path = GENERATE_REF(take(100, std::move(path_generator)));
+
+ REQUIRE(generated_path.endsWith(filename_component_value));
+}
+
+TEST_CASE("A directory path generated with a has_trailing_separator_probability of 1.0 always ends with a separator component.", "[Path][Content][SpecialCase]") {
+ QString separator_component_value{"sep"};
+
+ auto path_generator = path(
+ cycle(Catch::Generators::value(QString("device"))),
+ cycle(Catch::Generators::value(QString("root"))),
+ cycle(Catch::Generators::value(QString("directory"))),
+ cycle(Catch::Generators::value(QString("filename"))),
+ cycle(Catch::Generators::value(copy_value(separator_component_value))),
+ PathGeneratorConfiguration{}.set_directory_path_probability(1.0).set_has_trailing_separator_probability(1.0)
+ );
+
+ auto generated_path = GENERATE_REF(take(100, std::move(path_generator)));
+
+ REQUIRE(generated_path.endsWith(separator_component_value));
+}
+
+TEST_CASE("A directory path generated with a has_trailing_separator_probability of 0.0 never ends with a separator component.", "[Path][Content][SpecialCase]") {
+ QString separator_component_value{"sep"};
+
+ auto path_generator = path(
+ cycle(Catch::Generators::value(QString("device"))),
+ cycle(Catch::Generators::value(QString("root"))),
+ cycle(Catch::Generators::value(QString("directory"))),
+ cycle(Catch::Generators::value(QString("filename"))),
+ cycle(Catch::Generators::value(copy_value(separator_component_value))),
+ PathGeneratorConfiguration{}.set_directory_path_probability(1.0).set_has_trailing_separator_probability(0.0)
+ );
+
+ auto generated_path = GENERATE_REF(take(100, std::move(path_generator)));
+
+ REQUIRE(!generated_path.endsWith(separator_component_value));
+}
+
+SCENARIO("Binding a path to a component range", "[Path][Bounds]") {
+ GIVEN("A minimum amount of components") {
+ auto minimum_components_amount = GENERATE(take(100, random(std::size_t{1}, std::size_t{100})));
+
+ AND_GIVEN("A maximum amount of components that is greater or equal than the minimum amount of components") {
+ auto maximum_components_amount = GENERATE_COPY(take(100, random(minimum_components_amount, std::size_t{100})));
+
+ WHEN("A path is generated from those bounds") {
+ QString countable_component_value{"a"};
+
+ QString generated_path = GENERATE_COPY(
+ take(1,
+ path(
+ empty_string(),
+ empty_string(),
+ cycle(Catch::Generators::value(copy_value(countable_component_value))),
+ cycle(Catch::Generators::value(copy_value(countable_component_value))),
+ empty_string(),
+ PathGeneratorConfiguration{}.set_minimum_components_amount(minimum_components_amount).set_maximum_components_amount(maximum_components_amount)
+ )
+ )
+ );
+
+ THEN("The amount of non device, non root, non separator components in the generated path is in the range [minimum_components_amount, maximum_components_amount]") {
+ std::size_t components_amount{static_cast<std::size_t>(generated_path.count(countable_component_value))};
+
+ REQUIRE(components_amount >= minimum_components_amount);
+ REQUIRE(components_amount <= maximum_components_amount);
+ }
+ }
+ }
+ }
+}
+
+TEST_CASE(
+ "When the maximum amount of components and the minimum amount of components are equal, all generated paths have the same amount of non device, non root, non separator components",
+ "[Path][Bounds][SpecialCase]")
+{
+ auto components_amount = GENERATE(take(10, random(std::size_t{1}, std::size_t{100})));
+
+ QString countable_component_value{"a"};
+ QString generated_path = GENERATE_COPY(
+ take(10,
+ path(
+ empty_string(),
+ empty_string(),
+ cycle(Catch::Generators::value(copy_value(countable_component_value))),
+ cycle(Catch::Generators::value(copy_value(countable_component_value))),
+ empty_string(),
+ PathGeneratorConfiguration{}.set_minimum_components_amount(components_amount).set_maximum_components_amount(components_amount)
+ )
+ )
+ );
+
+ REQUIRE(static_cast<std::size_t>(generated_path.count(countable_component_value)) == components_amount);
+}
+
+SCENARIO("The format of a path", "[Path][Contents]") {
+ GIVEN("A series of components generators") {
+ // TODO: Could probably move this to the global scope to
+ // lighen the tests.
+ QString device_component_value{"device"};
+ QString root_component_value{"root"};
+ QString directory_component_value{"dir"};
+ QString filename_component_value{"file"};
+ QString separator_component_value{"sep"};
+
+ auto device_component_generator = cycle(Catch::Generators::value(copy_value(device_component_value)));
+ auto root_component_generator = cycle(Catch::Generators::value(copy_value(root_component_value)));
+ auto directory_component_generator = cycle(Catch::Generators::value(copy_value(directory_component_value)));
+ auto filename_component_generator = cycle(Catch::Generators::value(copy_value(filename_component_value)));
+ auto separator_component_generator = cycle(Catch::Generators::value(copy_value(separator_component_value)));
+
+ AND_GIVEN("A generator of paths using those components generator") {
+ // TODO: We should actually randomize the configuration by
+ // making a simple generator for it.
+ auto path_generator = path(
+ std::move(device_component_generator),
+ std::move(root_component_generator),
+ std::move(directory_component_generator),
+ std::move(filename_component_generator),
+ std::move(separator_component_generator)
+ );
+
+ WHEN("A path is generated from that generator") {
+ auto generated_path = GENERATE_REF(take(10, std::move(path_generator)));
+
+ THEN("At most one device component is in the generated path") {
+ REQUIRE(generated_path.count(device_component_value) <= 1);
+ }
+
+ THEN("At most one root component is in the generated path") {
+ REQUIRE(generated_path.count(root_component_value) <= 1);
+ }
+
+ THEN("At most one filename component is in the generated path") {
+ REQUIRE(generated_path.count(filename_component_value) <= 1);
+ }
+
+ THEN("At least one non device, non root, non separator component is in the generated path") {
+ REQUIRE((generated_path.contains(directory_component_value) || generated_path.contains(filename_component_value)));
+ }
+
+ THEN("There is a separator component between any two successive directory components") {
+ // REMARK: To test this condition, which is not
+ // easy to test directly, as, if the generator is
+ // working as it should, the concept of successive
+ // directories stops existing.
+ // To test it, then, we split the condition into
+ // two parts, that are easier to test, that
+ // achieve the same effect.
+ // First, if all directories have a separator
+ // component between them, it is impossible to
+ // have a directory component that is directly
+ // followed by another directory component.
+ // Second, when this holds, any two directory
+ // components must have one or more non-directory
+ // components between them.
+ // For those directories that have exactly one
+ // component between them, it must be a separator.
+ // This is equivalent to the original condition as
+ // long as it is not allowed for anything else to
+ // be between two directory components that have
+ // exactly one component between them.
+ // This is true at the time of writing of this
+ // test, such that this will work correctly, but
+ // if this changes the test is invalidated.
+ // If a test for the original condition is found
+ // that is not contrived (as it is possible to
+ // test the original condition but it is a bit
+ // more complex than we would like the test to
+ // be), it should replace this current
+ // implementation to improve the resiliency of the
+ // test.
+ REQUIRE_FALSE(generated_path.contains(directory_component_value + directory_component_value));
+
+ auto successive_directories_re{
+ QRegularExpression(u"%1(%2)%3"_s.arg(directory_component_value)
+ .arg(QStringList{device_component_value, root_component_value, filename_component_value, separator_component_value}.join("|"))
+ .arg(directory_component_value)
+ )};
+
+ auto successive_directories_match(successive_directories_re.match(generated_path));
+ while (successive_directories_match.hasMatch()) {
+ auto in_between_component{successive_directories_match.captured(1)};
+
+ // TODO: Having this in a loop makes it so
+ // the amount of assertions will vary slightly
+ // per-run.
+ // It would be better to avoid this, even if
+ // it should not really be a problem
+ // generally.
+ // Try to find a better way to express this
+ // condition that does not require a loop.
+ // This could be as easy as just collection
+ // the results and then using a std::all_of.
+ REQUIRE(in_between_component == separator_component_value);
+
+ successive_directories_match = successive_directories_re.match(generated_path, successive_directories_match.capturedEnd(1));
+ }
+ }
+
+
+ THEN("There is a separator component between each successive directory and filename components") {
+ REQUIRE_FALSE(generated_path.contains(directory_component_value + filename_component_value));
+
+ auto successive_directory_filename_re{
+ QRegularExpression(u"%1(%2)%3"_s.arg(directory_component_value)
+ .arg(QStringList{device_component_value, root_component_value, filename_component_value, separator_component_value}.join("|"))
+ .arg(filename_component_value)
+ )};
+
+ auto successive_directory_filename_match(successive_directory_filename_re.match(generated_path));
+ while (successive_directory_filename_match.hasMatch()) {
+ auto in_between_component{successive_directory_filename_match.captured(1)};
+
+ REQUIRE(in_between_component == separator_component_value);
+
+ successive_directory_filename_match = successive_directory_filename_re.match(generated_path, successive_directory_filename_match.capturedEnd(1));
+ }
+ }
+ }
+ }
+
+ AND_GIVEN("A generator of paths using those components generator that generates Multi-Device paths") {
+ auto path_generator = path(
+ std::move(device_component_generator),
+ std::move(root_component_generator),
+ std::move(directory_component_generator),
+ std::move(filename_component_generator),
+ std::move(separator_component_generator),
+ PathGeneratorConfiguration{}.set_multi_device_path_probability(1.0)
+ );
+
+ WHEN("A path is generated from that generator") {
+ auto generated_path = GENERATE_REF(take(10, std::move(path_generator)));
+
+ THEN("Exactly one device component is in the generated path") {
+ REQUIRE(generated_path.count(device_component_value) == 1);
+
+ AND_THEN("The device component is the first component in the generated path") {
+ REQUIRE(generated_path.startsWith(device_component_value));
+ }
+ }
+ }
+ }
+
+ AND_GIVEN("A generator of paths using those components generator that generates Absolute paths") {
+ auto path_generator = path(
+ std::move(device_component_generator),
+ std::move(root_component_generator),
+ std::move(directory_component_generator),
+ std::move(filename_component_generator),
+ std::move(separator_component_generator),
+ PathGeneratorConfiguration{}.set_absolute_path_probability(1.0)
+ );
+
+ WHEN("A path is generated from that generator") {
+ auto generated_path = GENERATE_REF(take(10, std::move(path_generator)));
+
+ THEN("Exactly one root component is in the generated path") {
+ REQUIRE(generated_path.count(root_component_value) == 1);
+ }
+ }
+ }
+
+ AND_GIVEN("A generator of paths using those components generator that generates Absolute paths that are not Multi-Device") {
+ auto path_generator = path(
+ std::move(device_component_generator),
+ std::move(root_component_generator),
+ std::move(directory_component_generator),
+ std::move(filename_component_generator),
+ std::move(separator_component_generator),
+ PathGeneratorConfiguration{}.set_multi_device_path_probability(0.0).set_absolute_path_probability(1.0)
+ );
+
+ WHEN("A path is generated from that generator") {
+ auto generated_path = GENERATE_REF(take(10, std::move(path_generator)));
+
+ THEN("The root component is the first component in the generated path") {
+ REQUIRE(generated_path.startsWith(root_component_value));
+ }
+ }
+ }
+
+ AND_GIVEN("A generator of paths using those components generator that generates Multi-Device, Absolute paths") {
+ auto path_generator = path(
+ std::move(device_component_generator),
+ std::move(root_component_generator),
+ std::move(directory_component_generator),
+ std::move(filename_component_generator),
+ std::move(separator_component_generator),
+ PathGeneratorConfiguration{}.set_multi_device_path_probability(1.0).set_absolute_path_probability(1.0)
+ );
+
+ WHEN("A path is generated from that generator") {
+ auto generated_path = GENERATE_REF(take(10, std::move(path_generator)));
+
+ THEN("The root component succeeds the device component in the generated path") {
+ REQUIRE(generated_path.contains(device_component_value + root_component_value));
+ }
+ }
+ }
+
+ AND_GIVEN("A generator of paths using those components generator that generates paths that are To a Directory and do not Have a Trailing Separator") {
+ auto path_generator = path(
+ std::move(device_component_generator),
+ std::move(root_component_generator),
+ std::move(directory_component_generator),
+ std::move(filename_component_generator),
+ std::move(separator_component_generator),
+ PathGeneratorConfiguration{}.set_directory_path_probability(1.0).set_has_trailing_separator_probability(0.0)
+ );
+
+ WHEN("A path is generated from that generator") {
+ auto generated_path = GENERATE_REF(take(10, std::move(path_generator)));
+
+ THEN("The last component of in the path is a directory component") {
+ REQUIRE(generated_path.endsWith(directory_component_value));
+ }
+ }
+ }
+
+ AND_GIVEN("A generator of paths using those components generator that generates paths that are To a Directory and Have a Trailing Separator") {
+ auto path_generator = path(
+ std::move(device_component_generator),
+ std::move(root_component_generator),
+ std::move(directory_component_generator),
+ std::move(filename_component_generator),
+ std::move(separator_component_generator),
+ PathGeneratorConfiguration{}.set_directory_path_probability(1.0).set_has_trailing_separator_probability(1.0)
+ );
+
+ WHEN("A path is generated from that generator") {
+ auto generated_path = GENERATE_REF(take(10, std::move(path_generator)));
+
+ THEN("The last component in the path is a separator component that is preceded by a directory component") {
+ REQUIRE(generated_path.endsWith(directory_component_value + separator_component_value));
+ }
+ }
+ }
+
+
+ AND_GIVEN("A generator of paths using those components generator that generates paths that are To a File") {
+ auto path_generator = path(
+ std::move(device_component_generator),
+ std::move(root_component_generator),
+ std::move(directory_component_generator),
+ std::move(filename_component_generator),
+ std::move(separator_component_generator),
+ PathGeneratorConfiguration{}.set_directory_path_probability(0.0)
+ );
+
+ WHEN("A path is generated from that generator") {
+ auto generated_path = GENERATE_REF(take(10, std::move(path_generator)));
+
+ THEN("Exactly one filename component is in the path") {
+ REQUIRE(generated_path.contains(filename_component_value));
+
+ AND_THEN("The filename component is the last component in the path") {
+ REQUIRE(generated_path.endsWith(filename_component_value));
+ }
+ }
+ }
+ }
+ }
+}
+
+// REMARK: [mayfail][distribution]
+SCENARIO("Observing the distribution of paths based on their configuration", "[Path][Statistics][!mayfail]") {
+ GIVEN("A series of components generators") {
+ QString device_component_value{"device"};
+ QString root_component_value{"root"};
+ QString directory_component_value{"dir"};
+ QString filename_component_value{"file"};
+ QString separator_component_value{"sep"};
+
+ auto device_component_generator = cycle(Catch::Generators::value(copy_value(device_component_value)));
+ auto root_component_generator = cycle(Catch::Generators::value(copy_value(root_component_value)));
+ auto directory_component_generator = cycle(Catch::Generators::value(copy_value(directory_component_value)));
+ auto filename_component_generator = cycle(Catch::Generators::value(copy_value(filename_component_value)));
+ auto separator_component_generator = cycle(Catch::Generators::value(copy_value(separator_component_value)));
+
+ AND_GIVEN("A generator of paths using those components generator that produces paths that are Multi-Device with a probability of n") {
+ double multi_device_path_probability = GENERATE(take(10, random(0.0, 1.0)));
+
+ auto path_generator = path(
+ std::move(device_component_generator),
+ std::move(root_component_generator),
+ std::move(directory_component_generator),
+ std::move(filename_component_generator),
+ std::move(separator_component_generator),
+ PathGeneratorConfiguration{}.set_multi_device_path_probability(multi_device_path_probability)
+ );
+
+ WHEN("A certain amount of paths are generated from that generator") {
+ auto paths = GENERATE_REF(take(1, chunk(10000, std::move(path_generator))));
+
+ THEN("The amount of paths that are Multi-Device approximately respects the given probability and the amount of paths that are not approximately respects a probability of 1 - n") {
+ auto maybe_distribution_error{respects_distribution(
+ std::move(paths),
+ [&device_component_value](const QString& path){ return (path.startsWith(device_component_value)) ? "Multi-Device" : "Non Multi-Device"; },
+ [multi_device_path_probability](const QString& key){ return probability_to_percentage((key == "Multi-Device") ? multi_device_path_probability : 1 - multi_device_path_probability); }
+ )};
+
+ REQUIRE_FALSE(maybe_distribution_error);
+ }
+ }
+ }
+
+ AND_GIVEN("A generator of paths using those components generator that produces paths that are Absolute with a probability of n") {
+ double absolute_path_probability = GENERATE(take(10, random(0.0, 1.0)));
+
+ auto path_generator = path(
+ std::move(device_component_generator),
+ std::move(root_component_generator),
+ std::move(directory_component_generator),
+ std::move(filename_component_generator),
+ std::move(separator_component_generator),
+ PathGeneratorConfiguration{}.set_absolute_path_probability(absolute_path_probability)
+ );
+
+ WHEN("A certain amount of paths are generated from that generator") {
+ auto paths = GENERATE_REF(take(1, chunk(10000, std::move(path_generator))));
+
+ THEN("The amount of paths that are Absolute approximately respects the given probability and the amount of paths that are Relative approximately respects a probability of 1 - n") {
+ auto maybe_distribution_error{respects_distribution(
+ std::move(paths),
+ [&root_component_value](const QString& path){ return (path.contains(root_component_value)) ? "Absolute" : "Relative"; },
+ [absolute_path_probability](const QString& key){ return probability_to_percentage((key == "Absolute") ? absolute_path_probability : 1 - absolute_path_probability); }
+ )};
+
+ REQUIRE_FALSE(maybe_distribution_error);
+ }
+ }
+ }
+
+ AND_GIVEN("A generator of paths using those components generator that produces paths that are To a Directory with a probability of n") {
+ double directory_path_probability = GENERATE(take(10, random(0.0, 1.0)));
+
+ auto path_generator = path(
+ std::move(device_component_generator),
+ std::move(root_component_generator),
+ std::move(directory_component_generator),
+ std::move(filename_component_generator),
+ std::move(separator_component_generator),
+ PathGeneratorConfiguration{}.set_directory_path_probability(directory_path_probability)
+ );
+
+ WHEN("A certain amount of paths are generated from that generator") {
+ auto paths = GENERATE_REF(take(1, chunk(10000, std::move(path_generator))));
+
+ THEN("The amount of paths that are To a Directory approximately respects the given probability and the amount of paths that are To a File approximately respects a probability of 1 - n") {
+ auto maybe_distribution_error{respects_distribution(
+ std::move(paths),
+ [&filename_component_value](const QString& path){ return (path.contains(filename_component_value)) ? "To a File" : "To a Directory"; },
+ [directory_path_probability](const QString& key){ return probability_to_percentage((key == "To a Directory") ? directory_path_probability : 1 - directory_path_probability); }
+ )};
+
+ REQUIRE_FALSE(maybe_distribution_error);
+ }
+ }
+ }
+
+ AND_GIVEN("A generator of paths using those components generator that produces paths that are To a Directory with a probability of n to Have a Trailing Separator") {
+ double has_trailing_separator_probability = GENERATE(take(10, random(0.0, 1.0)));
+
+ auto path_generator = path(
+ std::move(device_component_generator),
+ std::move(root_component_generator),
+ std::move(directory_component_generator),
+ std::move(filename_component_generator),
+ std::move(separator_component_generator),
+ PathGeneratorConfiguration{}.set_directory_path_probability(1.0).set_has_trailing_separator_probability(has_trailing_separator_probability)
+ );
+
+ WHEN("A certain amount of paths are generated from that generator") {
+ auto paths = GENERATE_REF(take(1, chunk(10000, std::move(path_generator))));
+
+ THEN("The amount of paths that are Have a Trailing Separator approximately respects the given probability and the amount of paths that do not Have a Trailing Separator approximately respects a probability of 1 - n") {
+ auto maybe_distribution_error{respects_distribution(
+ std::move(paths),
+ [&separator_component_value](const QString& path){ return (path.endsWith(separator_component_value)) ? "Have a Trailing Separator" : "Doesn't Have a Trailing Separator"; },
+ [has_trailing_separator_probability](const QString& key){ return probability_to_percentage((key == "Have a Trailing Separator") ? has_trailing_separator_probability : 1 - has_trailing_separator_probability); }
+ )};
+
+ REQUIRE_FALSE(maybe_distribution_error);
+ }
+ }
+ }
+ }
+}
+
+TEST_CASE("The first component of the passed in device components generator is not lost", "[Path][GeneratorFirstElement][SpecialCase]") {
+ QString device_component_generator_first_value{"device"};
+
+ auto generated_path = GENERATE_COPY(take(1,
+ path(
+ values({device_component_generator_first_value, QString{""}}),
+ empty_string(),
+ empty_string(),
+ empty_string(),
+ empty_string(),
+ PathGeneratorConfiguration{}
+ .set_multi_device_path_probability(1.0)
+ .set_minimum_components_amount(1)
+ .set_maximum_components_amount(1)
+ )
+ ));
+
+ REQUIRE(generated_path.contains(device_component_generator_first_value));
+}
+
+TEST_CASE("The first component of the passed in root components generator is not lost", "[Path][GeneratorFirstElement][SpecialCase]") {
+ QString root_component_generator_first_value{"root"};
+
+ auto generated_path = GENERATE_COPY(take(1,
+ path(
+ empty_string(),
+ values({root_component_generator_first_value, QString{""}}),
+ empty_string(),
+ empty_string(),
+ empty_string(),
+ PathGeneratorConfiguration{}
+ .set_absolute_path_probability(1.0)
+ .set_minimum_components_amount(1)
+ .set_maximum_components_amount(1)
+ )
+ ));
+
+ REQUIRE(generated_path.contains(root_component_generator_first_value));
+}
+
+TEST_CASE("The first component of the passed in directory components generator is not lost", "[Path][GeneratorFirstElement][SpecialCase]") {
+ QString directory_component_generator_first_value{"dir"};
+
+ auto generated_path = GENERATE_COPY(take(1,
+ path(
+ empty_string(),
+ empty_string(),
+ values({directory_component_generator_first_value, QString{""}}),
+ empty_string(),
+ empty_string(),
+ PathGeneratorConfiguration{}
+ .set_directory_path_probability(1.0)
+ .set_minimum_components_amount(1)
+ .set_maximum_components_amount(1)
+ )
+ ));
+
+ REQUIRE(generated_path.contains(directory_component_generator_first_value));
+}
+
+TEST_CASE("The first component of the passed in filename components generator is not lost", "[Path][GeneratorFirstElement][SpecialCase]") {
+ QString filename_component_generator_first_value{"dir"};
+
+ auto generated_path = GENERATE_COPY(take(1,
+ path(
+ empty_string(),
+ empty_string(),
+ empty_string(),
+ values({filename_component_generator_first_value, QString{""}}),
+ empty_string(),
+ PathGeneratorConfiguration{}
+ .set_directory_path_probability(0.0)
+ .set_minimum_components_amount(1)
+ .set_maximum_components_amount(1)
+ )
+ ));
+
+ REQUIRE(generated_path.contains(filename_component_generator_first_value));
+}
+
+TEST_CASE("The first component of the passed in separator components generator is not lost", "[Path][GeneratorFirstElement][SpecialCase]") {
+ QString separator_component_generator_first_value{"sep"};
+
+ auto generated_path = GENERATE_COPY(take(1,
+ path(
+ empty_string(),
+ empty_string(),
+ empty_string(),
+ empty_string(),
+ values({separator_component_generator_first_value, QString{""}}),
+ PathGeneratorConfiguration{}
+ .set_directory_path_probability(0.0)
+ .set_minimum_components_amount(2)
+ .set_maximum_components_amount(2)
+ )
+ ));
+
+ REQUIRE(generated_path.contains(separator_component_generator_first_value));
+}
+
+SCENARIO("Generating paths that are suitable to be used on POSIX systems", "[Path][POSIX][Content]") {
+ GIVEN("A generator that generates Strings representing paths on a POSIX system that are portable") {
+ auto path_generator = relaxed_portable_posix_path();
+
+ WHEN("A path is generated from it") {
+ auto generated_path = GENERATE_REF(take(100, std::move(path_generator)));
+
+ THEN("The path is composed only by one or more characters in the class [-_./a-zA-Z0-9]") {
+ REQUIRE(QRegularExpression{R"(\A[-_.\/a-zA-Z0-9]+\z)"}.match(generated_path).hasMatch());
+ }
+ }
+ }
+}
+
+SCENARIO("Generating paths that are suitable to be used on Windows", "[Path][Windows][Content]") {
+ GIVEN("A generator that generates Strings representing paths on a Windows system") {
+ auto path_generator = traditional_dos_path();
+
+ WHEN("A path is generated from it") {
+ auto generated_path = GENERATE_REF(take(100, std::move(path_generator)));
+
+ CAPTURE(generated_path);
+
+ THEN("The path starts with an uppercase letter followed by a colon, a backward or forward slash or a character in the class [-_.a-zA-Z0-9]") {
+ QRegularExpression beginning_re{"([A-Z]:|\\|\\/|[-_.a-zA-Z0-9])"};
+
+ auto beginning_match{beginning_re.match(generated_path)};
+
+ REQUIRE(beginning_match.hasMatch());
+
+ generated_path.remove(0, beginning_match.capturedEnd());
+
+ AND_THEN("The rest of the path is composed by zero or more characters in the class [-_./\\a-zA-Z0-9]") {
+ REQUIRE(QRegularExpression{R"(\A[-_.\/\\a-zA-Z0-9]*\z)"}.match(generated_path).hasMatch());
+ }
+ }
+ }
+ }
+}
diff --git a/src/qdoc/catch_generators/tests/generators/catch_qchar_generator.cpp b/src/qdoc/catch_generators/tests/generators/catch_qchar_generator.cpp
new file mode 100644
index 000000000..718da7307
--- /dev/null
+++ b/src/qdoc/catch_generators/tests/generators/catch_qchar_generator.cpp
@@ -0,0 +1,102 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include <catch_generators/namespaces.h>
+#include <catch_generators/generators/qchar_generator.h>
+
+#include <catch_conversions/qt_catch_conversions.h>
+
+#include <catch/catch.hpp>
+
+#include <QChar>
+
+using namespace QDOC_CATCH_GENERATORS_ROOT_NAMESPACE;
+using namespace QDOC_CATCH_GENERATORS_QCHAR_ALPHABETS_NAMESPACE;
+
+SCENARIO("Binding a generated QChar to a range", "[QChar][Bounds]") {
+ GIVEN("A lower bound") {
+ auto lower_bound = GENERATE(take(100, random(
+ static_cast<unsigned int>(std::numeric_limits<char16_t>::min()),
+ static_cast<unsigned int>(std::numeric_limits<char16_t>::max())
+ )));
+
+ AND_GIVEN("An upper bound that is greater or equal than the lower bound") {
+ auto upper_bound = GENERATE_COPY(take(100, random(lower_bound, static_cast<unsigned int>(std::numeric_limits<char16_t>::max()))));
+
+ WHEN("A QChar is generated from those bounds") {
+ QChar generated_character = GENERATE_COPY(take(1, character(lower_bound, upper_bound)));
+
+ THEN("The generated character has a unicode value in the range [lower_bound, upper_bound]") {
+ REQUIRE(generated_character.unicode() >= lower_bound);
+ REQUIRE(generated_character.unicode() <= upper_bound);
+ }
+ }
+ }
+ }
+}
+
+TEST_CASE(
+ "When lower_bound and upper_bound are equal, let their value be n, the only generated character is the one with unicode value n",
+ "[QChar][Bounds]"
+) {
+ auto bound = GENERATE(take(100, random(
+ static_cast<unsigned int>(std::numeric_limits<char16_t>::min()),
+ static_cast<unsigned int>(std::numeric_limits<char16_t>::max())
+ )));
+ auto generated_character = GENERATE_COPY(take(100, character(bound, bound)));
+
+ REQUIRE(generated_character.unicode() == bound);
+}
+
+TEST_CASE("When generating digits, each generated character is in the class [0-9]", "[QChar][SpecialCase]") {
+ auto generated_character = GENERATE(take(100, digit()));
+
+ REQUIRE(generated_character >= '0');
+ REQUIRE(generated_character <= '9');
+}
+
+TEST_CASE("When generating lowercase ascii characters, each generated character is in the class [a-z]", "[QChar][SpecialCase]") {
+ auto generated_character = GENERATE(take(100, ascii_lowercase()));
+
+ REQUIRE(generated_character >= 'a');
+ REQUIRE(generated_character <= 'z');
+}
+
+TEST_CASE("When generating uppercase ascii characters, each generated character is in the class [A-Z]", "[QChar][SpecialCase]") {
+ auto generated_character = GENERATE(take(100, ascii_uppercase()));
+
+ REQUIRE(generated_character >= 'A');
+ REQUIRE(generated_character <= 'Z');
+}
+
+TEST_CASE("When generating ascii alphabetic characters, each generated character is in the class [a-zA-Z]", "[QChar][SpecialCase]") {
+ auto generated_character = GENERATE(take(100, ascii_alpha()));
+
+ REQUIRE((
+ (generated_character >= 'a' && generated_character <= 'z') ||
+ (generated_character >= 'A' && generated_character <= 'Z')
+ ));
+}
+
+TEST_CASE("When generating ascii alphabetic characters, each generated character is in the class [a-zA-Z0-9]", "[QChar][SpecialCase]") {
+ auto generated_character = GENERATE(take(100, ascii_alpha()));
+
+ REQUIRE((
+ (generated_character >= 'a' && generated_character <= 'z') ||
+ (generated_character >= 'A' && generated_character <= 'Z') ||
+ (generated_character >= '0' && generated_character <= '9')
+ ));
+}
+
+TEST_CASE("When generating portable posix filename, each generated character is in the class [-_.a-zA-Z0-9]", "[QChar][SpecialCase]") {
+ auto generated_character = GENERATE(take(100, ascii_alpha()));
+
+ REQUIRE((
+ (generated_character == '-') ||
+ (generated_character == '_') ||
+ (generated_character == '.') ||
+ (generated_character >= 'a' && generated_character <= 'z') ||
+ (generated_character >= 'A' && generated_character <= 'Z') ||
+ (generated_character >= '0' && generated_character <= '9')
+ ));
+}
diff --git a/src/qdoc/catch_generators/tests/generators/catch_qstring_generator.cpp b/src/qdoc/catch_generators/tests/generators/catch_qstring_generator.cpp
new file mode 100644
index 000000000..0e92f6900
--- /dev/null
+++ b/src/qdoc/catch_generators/tests/generators/catch_qstring_generator.cpp
@@ -0,0 +1,89 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include <catch_generators/namespaces.h>
+#include <catch_generators/generators/qchar_generator.h>
+#include <catch_generators/generators/qstring_generator.h>
+
+#include <catch_conversions/qt_catch_conversions.h>
+
+#include <catch/catch.hpp>
+
+using namespace QDOC_CATCH_GENERATORS_ROOT_NAMESPACE;
+
+#include <algorithm>
+
+SCENARIO("Binding a QString to a length range", "[QString][Bounds]") {
+ GIVEN("A minimum length") {
+ auto minimum_length = GENERATE(take(100, random(0, 100)));
+
+ AND_GIVEN("A maximum length that is greater or equal than the minimum length") {
+ auto maximum_length = GENERATE_COPY(take(100, random(minimum_length, 100)));
+
+ WHEN("A QString is generated from those bounds") {
+ QString generated_string = GENERATE_COPY(take(1, string(character(), minimum_length, maximum_length)));
+
+ THEN("The generated string's length is in the range [minimum_length, maximum_length]") {
+ REQUIRE(generated_string.size() >= minimum_length);
+ REQUIRE(generated_string.size() <= maximum_length);
+ }
+ }
+ }
+ }
+}
+
+TEST_CASE("When the maximum length and the minimum length are zero all generated strings are the empty string", "[QString][Bounds][SpecialCase][BoundingValue]") {
+ QString generated_string = GENERATE(take(100, string(character(), 0, 0)));
+
+ REQUIRE(generated_string.isEmpty());
+}
+
+TEST_CASE("When the maximum length and the minimum length are equal, all generated strings have the same length equal to the given length", "[QString][Bounds][SpecialCase]") {
+ auto length = GENERATE(take(100, random(0, 100)));
+ auto generated_string = GENERATE_COPY(take(100, string(character(), length, length)));
+
+ REQUIRE(generated_string.size() == length);
+}
+
+SCENARIO("Limiting the characters that can compose a QString", "[QString][Contents]") {
+ GIVEN("A list of characters candidates") {
+ auto lower_character_bound = GENERATE(take(10, random(
+ static_cast<unsigned int>(std::numeric_limits<char16_t>::min()),
+ static_cast<unsigned int>(std::numeric_limits<char16_t>::max())
+ )));
+ auto upper_character_bound = GENERATE_COPY(take(10, random(lower_character_bound, static_cast<unsigned int>(std::numeric_limits<char16_t>::max()))));
+
+ auto character_candidates = character(lower_character_bound, upper_character_bound);
+
+ WHEN("A QString is generated from that list") {
+ QString generated_string = GENERATE_REF(take(100, string(std::move(character_candidates), 1, 50)));
+
+ THEN("The string is composed only of characters that are in the list of characters") {
+ REQUIRE(
+ std::all_of(
+ generated_string.cbegin(), generated_string.cend(),
+ [lower_character_bound, upper_character_bound](QChar element){ return element.unicode() >= lower_character_bound && element.unicode() <= upper_character_bound; }
+ )
+ );
+ }
+ }
+ }
+}
+
+TEST_CASE("The strings generated by a generator of empty string are all empty", "[QString][Contents]") {
+ QString generated_string = GENERATE(take(100, empty_string()));
+
+ REQUIRE(generated_string.isEmpty());
+}
+
+
+TEST_CASE("The first element of the passsed in generator is not lost", "[QString][GeneratorFirstElement][SpecialCase]") {
+ QChar first_value{'a'};
+
+ // REMARK: We use two values to avoid having the generator throw
+ // an exception if the first element is actually lost.
+ auto character_generator{Catch::Generators::values({first_value, QChar{'b'}})};
+ auto generated_string = GENERATE_REF(take(1, string(std::move(character_generator), 1, 1)));
+
+ REQUIRE(generated_string == QString{first_value});
+}
diff --git a/src/qdoc/catch_generators/tests/generators/combinators/catch_cycle_generator.cpp b/src/qdoc/catch_generators/tests/generators/combinators/catch_cycle_generator.cpp
new file mode 100644
index 000000000..5bf98d73a
--- /dev/null
+++ b/src/qdoc/catch_generators/tests/generators/combinators/catch_cycle_generator.cpp
@@ -0,0 +1,70 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include <catch_generators/namespaces.h>
+#include <catch_generators/generators/combinators/cycle_generator.h>
+
+#include <catch/catch.hpp>
+
+using namespace QDOC_CATCH_GENERATORS_ROOT_NAMESPACE;
+
+// REMARK: We use fixed-values-generators for those tests so that it
+// is trivial to identify when their generation will end, which
+// values we should expect and how many values we should expect.
+// This is unfortunately not general, but we don't have, by default,
+// enough tools to generalize this without having to provide our own
+// (being able to generate fixed values from a vector) and adding more
+// to the complexity, which is already high.
+
+TEST_CASE(
+ "The xn + m element, where 0 < m < n, from a repeating generator whose underlying generator produces n elements, will produce an element equivalent to the mth element of the generation produced by the underlying generator",
+ "[Cycle][Combinators]"
+) {
+ std::size_t n{10};
+
+ auto owned_generator{Catch::Generators::values({'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'})};
+ auto owned_generator_copy{Catch::Generators::values({'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'})};
+
+ auto original_generation = GENERATE_REF(take(1, chunk(n, std::move(owned_generator_copy))));
+
+ std::size_t x = GENERATE(take(10, random(std::size_t{0}, std::size_t{20})));
+ std::size_t m = GENERATE_COPY(take(10, random(std::size_t{1}, std::size_t{n})));
+
+ auto repeating_generator = cycle(std::move(owned_generator));
+ auto repeating_generation = GENERATE_REF(take(1, chunk((x * n) + m, std::move(repeating_generator))));
+
+ REQUIRE(repeating_generation.back() == original_generation[m - 1]);
+}
+
+SCENARIO("Repeating a generation ad infinitum", "[Cycle][Combinators]") {
+ GIVEN("Some finite generator") {
+ std::size_t values_amount{3};
+
+ auto owned_generator{Catch::Generators::values({'a', 'b', 'c'})};
+ auto owned_generator_copy{Catch::Generators::values({'a', 'b', 'c'})};
+
+ AND_GIVEN("A way to repeat the generation of that generator infinitely") {
+ auto repeating_generator = cycle(std::move(owned_generator));
+
+ WHEN("Generating exactly enough values to exhaust the original generator") {
+ auto repeating_generation = GENERATE_REF(take(1, chunk(values_amount, std::move(repeating_generator))));
+ auto original_generation = GENERATE_REF(take(1, chunk(values_amount, std::move(owned_generator_copy))));
+
+ THEN("The repeating generator behaves equally to the original finite generator") {
+ REQUIRE(repeating_generation == original_generation);
+ }
+ }
+
+ WHEN("Generating exactly n times the amount of values required to exhaust the original generator") {
+ std::size_t n = GENERATE(take(10, random(2, 10)));
+
+ auto original_generation = GENERATE_REF(take(1, chunk(values_amount, std::move(owned_generator_copy))));
+ auto repeating_generation = GENERATE_REF(take(n, chunk(values_amount, std::move(repeating_generator))));
+
+ THEN("The n generation of the repeating generator are always the same as the generation of the original generation") {
+ REQUIRE(repeating_generation == original_generation);
+ }
+ }
+ }
+ }
+}
diff --git a/src/qdoc/catch_generators/tests/generators/combinators/catch_oneof_generator.cpp b/src/qdoc/catch_generators/tests/generators/combinators/catch_oneof_generator.cpp
new file mode 100644
index 000000000..4d5666213
--- /dev/null
+++ b/src/qdoc/catch_generators/tests/generators/combinators/catch_oneof_generator.cpp
@@ -0,0 +1,362 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include <catch_conversions/std_catch_conversions.h>
+
+#include <catch_generators/namespaces.h>
+#include <catch_generators/generators/k_partition_of_r_generator.h>
+#include <catch_generators/generators/combinators/oneof_generator.h>
+#include <catch_generators/generators/combinators/cycle_generator.h>
+#include <catch_generators/utilities/statistics/percentages.h>
+#include <catch_generators/utilities/statistics/distribution.h>
+#include <catch_generators/utilities/semantics/copy_value.h>
+
+#include <catch/catch.hpp>
+
+#include <cmath>
+#include <iterator>
+#include <vector>
+#include <algorithm>
+#include <unordered_map>
+
+using namespace QDOC_CATCH_GENERATORS_ROOT_NAMESPACE;
+using namespace QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE;
+
+SCENARIO("Choosing between one of many generators", "[OneOf][Combinators]") {
+ GIVEN("Some generators producing values of the same type") {
+ auto generators_amount = GENERATE(take(10, random(1, 10)));
+ auto generators_values = GENERATE_COPY(take(10, chunk(generators_amount, random(0, 100000))));
+
+ std::vector<Catch::Generators::GeneratorWrapper<int>> generators;
+ generators.reserve(generators_amount);
+ std::transform(
+ generators_values.begin(), generators_values.end(), std::back_inserter(generators),
+ [](auto& value){ return Catch::Generators::value(copy_value(value)); }
+ );
+
+ AND_GIVEN("A generator choosing between them based on some distribution") {
+ std::vector<double> weights = GENERATE_COPY(take(10, k_partition_of_r(100.0, generators_amount)));
+ auto choosing_generator = oneof(std::move(generators), std::move(weights));
+
+ WHEN("A value is extracted from the choosing generator") {
+ auto generated_value = GENERATE_REF(take(100, std::move(choosing_generator)));
+
+ THEN("The generated value is a member of one of the original generators") {
+ REQUIRE(std::find(generators_values.cbegin(), generators_values.cend(), generated_value) != generators_values.cend());
+ }
+ }
+ }
+
+ AND_GIVEN("A generator choosing between them with the same probability") {
+ auto choosing_generator = uniform_oneof(std::move(generators));
+
+ WHEN("A value is extracted from the choosing generator") {
+ auto generated_value = GENERATE_REF(take(100, std::move(choosing_generator)));
+
+ THEN("The generated value is a member of one of the original generators") {
+ REQUIRE(std::find(generators_values.cbegin(), generators_values.cend(), generated_value) != generators_values.cend());
+ }
+ }
+ }
+
+ AND_GIVEN("A generator choosing between them such that each possible value has the same probability of being chosen") {
+ auto choosing_generator = uniformly_valued_oneof(std::move(generators), std::vector(generators_amount, std::size_t{1}));
+
+ WHEN("A value is extracted from the choosing generator") {
+ auto generated_value = GENERATE_REF(take(100, std::move(choosing_generator)));
+
+ THEN("The generated value is a member of one of the original generators") {
+ REQUIRE(std::find(generators_values.cbegin(), generators_values.cend(), generated_value) != generators_values.cend());
+ }
+ }
+ }
+ }
+}
+
+// TODO: The following is a generally complex test. Nonetheless, we
+// can probably ease some of the complexity by moving it out into some
+// generators or by abstracting it a little to remove the need to know
+// some of the implementation details.
+// Check if this is possible.
+
+// REMARK: [mayfail][distribution]
+// This tests cannot be precise as it depends on randomized output.
+// For this reason, we mark it as !mayfail.
+// This allows us to see cases where it fails without having the
+// test-run itself fail.
+// We generally expect this test to not fail, but it may fail randomly
+// every now and then simply because of how a correctly randomized
+// distribution may behave.
+// As long as this test doesn't fail consistently, with values that
+// shows an unsustainable deviation, it should be considered to be
+// working.
+SCENARIO("Observing the distribution of generators that are chosen from", "[OneOf][Combinators][Statistics][!mayfail]") {
+ GIVEN("Some generators producing values of the same type") {
+ std::size_t generators_amount = GENERATE(take(10, random(1, 10)));
+
+ // REMARK: To test the distribution, we want to have some
+ // amount of generators to choose from whose generated values
+ // can be uniquely reconducted to the generating generator so
+ // that we may count how many times a specific generator was
+ // chosen.
+ // The easiest way would be to have generators that produce a
+ // single value.
+ // Nonetheless, to test the version that provides an
+ // approximate uniform distribution over the values themselves
+ // correctly, we need to have generators that can produce a
+ // different amount of elements.
+ // When that is not the case, indeed, a generator that
+ // approximately distributes uniformly over values is
+ // equivalent to one that approximately distributes uniformely
+ // over the generators themselves.
+ // As such, we use ranges of positive integers, as they are
+ // the simplest multi-valued finite generator that can be dinamically
+ // construted, while still providing an easy way to infer the
+ // amount of values it contains so that we can derive the
+ // cardinality of our domain.
+ // We produce those ranges as disjoint subsequent ranges
+ // starting from 0 upward.
+ // We require the ranges to be disjoint so that we do not lose
+ // the ability of uniquely identifying a generator that
+ // produced the value.
+ //
+ // To do so, we generate a series of disjoint least upper
+ // bounds for the ranges.
+ // Then, we produce the ith range by using the successor of
+ // the (i - 1)th upper bound as its lower bound and the ith
+ // upper bound as its upper bound.
+ //
+ // We take further care to ensure that the collection of upper
+ // bounds is sorted, as this simplifies to a linear search our
+ // need to index the collection of generators to find the
+ // identifying generator and its associated probability.
+ std::vector<std::size_t> generators_bounds(generators_amount, 0);
+ std::vector<Catch::Generators::GeneratorWrapper<std::size_t>> generators;
+ generators.reserve(generators_amount);
+
+ std::size_t lowest_bound{0};
+ std::size_t generators_step{1000};
+ std::size_t lower_bound_offset{1};
+
+ generators_bounds[0] = Catch::Generators::random(lowest_bound, generators_step).get();
+ generators.push_back(Catch::Generators::random(lowest_bound, generators_bounds[0]));
+
+ // We use this one to group together values that are generated
+ // from the same generator and to provide an index for that
+ // generator to use for finding its associated probability.
+ // Since our generators are defined by their upper bounds and
+ // the collection of upper bounds is sorted, the first
+ // encountered upper bound that is not less than the value
+ // itself must be the least upper bound of the generator that
+ // produced the value.
+ // Then, the index of that upper bound must be the same as the
+ // index of the producing generator and its associated
+ // probability.
+ auto find_index_of_producing_generator = [&generators_bounds](auto value) {
+ return static_cast<std::size_t>(std::distance(
+ generators_bounds.begin(),
+ std::find_if(generators_bounds.begin(), generators_bounds.end(), [&value](auto element){ return value <= element; })
+ ));
+ };
+
+ for (std::size_t index{1}; index < generators_amount; ++index) {
+ generators_bounds[index] = Catch::Generators::random(generators_bounds[index - 1] + lower_bound_offset + 1, generators_bounds[index - 1] + lower_bound_offset + 1 + generators_step).get();
+ generators.push_back(Catch::Generators::random(generators_bounds[index - 1] + lower_bound_offset, generators_bounds[index]));
+ }
+
+ AND_GIVEN("A probability of being chosen, in percentage, for each of the generators, such that the sum of the percentages is one hundred") {
+ std::vector<double> probabilities = GENERATE_COPY(take(10, k_partition_of_r(100.0, generators_amount)));
+
+ AND_GIVEN("A choosing generator for those generators based on the given probabilities") {
+ auto choosing_generator = oneof(std::move(generators), probabilities);
+
+ WHEN("A certain amount of values are generated from the choosing generator") {
+ auto values = GENERATE_REF(take(1, chunk(10000, std::move(choosing_generator))));
+
+ THEN("The distribution of elements for each generator approximately respects the weight that was given to it") {
+ auto maybe_distribution_error{respects_distribution(
+ std::move(values),
+ find_index_of_producing_generator,
+ [&probabilities](auto key){ return probabilities[key]; }
+ )};
+
+ REQUIRE_FALSE(maybe_distribution_error);
+ }
+ }
+ }
+ }
+
+ AND_GIVEN("A choosing generator for those generators that will choose each generator with the same probability") {
+ auto choosing_generator = uniform_oneof(std::move(generators));
+
+ WHEN("A certain amount of values are generated from the choosing generator") {
+ auto values = GENERATE_REF(take(1, chunk(10000, std::move(choosing_generator))));
+
+ THEN("The distribution of elements approximates uniformity over the generators") {
+ double probability{uniform_probability(generators_amount)};
+
+ auto maybe_distribution_error{respects_distribution(
+ std::move(values),
+ find_index_of_producing_generator,
+ [&probability](auto _){ (void)(_); return probability; }
+ )};
+
+ REQUIRE_FALSE(maybe_distribution_error);
+ }
+ }
+ }
+
+ AND_GIVEN("A choosing generator for those generators that will choose each generator such that each possible value has the same probability of being chosen") {
+ // REMARK: We need to know the total amount of
+ // unique values that can be generated by our
+ // generators, so that we can construct an
+ // appropriate distribution.
+ // Since our generators are ranges defined by the
+ // collection of upper bounds we can find their
+ // length by finding the difference between
+ // adjacent elements of the collection.
+ //
+ // Some more care must be taken to ensure tha the
+ // correct amount is produced.
+ // Since we need our ranges to be disjoint, we
+ // apply a small offset from the element of the
+ // upper bounds that is used as a lower bound,
+ // since that upper bound is inclusive for the
+ // range that precedes the one we are making the
+ // calculation for.
+ //
+ // Furthermore, the first range is treated
+ // specially.
+ // As no range precedes it, it doesn't need any
+ // offset to be applied.
+ // Additionally, we implicitly use 0 as the first
+ // lower bound, such that the length of the first
+ // range is indeed equal to its upper bound.
+ //
+ // To account for this, we remove that offset from
+ // the total amount for each range after the first
+ // one and use the first upper bound as a seeding
+ // value to account for the length of the first
+ // range.
+ std::vector<std::size_t> generators_cardinality(generators_amount, generators_bounds[0]);
+
+ std::adjacent_difference(generators_bounds.begin(), generators_bounds.end(), generators_bounds.begin());
+ std::transform(std::next(generators_cardinality.begin()), generators_cardinality.end(), std::next(generators_cardinality.begin()), [](auto element){ return element - 1; });
+
+ std::size_t output_cardinality{std::accumulate(generators_cardinality.begin(), generators_cardinality.end(), std::size_t{0})};
+
+ auto choosing_generator = uniformly_valued_oneof(std::move(generators), std::move(generators_cardinality));
+
+ WHEN("A certain amount of values are generated from the choosing generator") {
+ auto values = GENERATE_REF(take(1, chunk(10000, std::move(choosing_generator))));
+
+ THEN("The distribution of elements approximates uniformity for each value") {
+ double probability{uniform_probability(output_cardinality)};
+
+ auto maybe_distribution_error{respects_distribution(
+ std::move(values),
+ [](auto value){ return value; },
+ [&probability](auto _){ (void)(_); return probability; }
+ )};
+
+ REQUIRE_FALSE(maybe_distribution_error);
+ }
+ }
+ }
+ }
+}
+
+TEST_CASE("A generator with a weight of zero is never chosen when choosing between many generators", "[OneOf][Combinators][SpecialCase]") {
+ auto excluded_value = GENERATE(take(100, random(0, 10000)));
+
+ std::vector<Catch::Generators::GeneratorWrapper<int>> generators;
+ generators.reserve(2);
+ generators.emplace_back(Catch::Generators::random(excluded_value + 1, std::numeric_limits<int>::max()));
+ generators.emplace_back(Catch::Generators::value(copy_value(excluded_value)));
+
+ auto generated_value = GENERATE_REF(take(100, oneof(std::move(generators), std::vector{100.0, 0.0})));
+
+ REQUIRE(generated_value != excluded_value);
+}
+
+TEST_CASE("The first element of the passed in generators are not lost", "[OneOf][Combinators][GeneratorFirstElement][SpecialCase]") {
+ // REMARK: We want to test that, for each generator, the first
+ // time it is chosen the first value is produced.
+ // This is complicated because of the fact that OneOf chooses
+ // random generators in a random order.
+ // This means that some generators may never be chosen, never be
+ // chosen more than once and so on.
+ // Furthermore, this specific test is particularly important only
+ // for finite generators or non-completely random, ordered,
+ // infinite generators.
+ // Additionally, we need to ensure that we test with multiple
+ // generators, as this test is a consequence of a first bugged
+ // implementation where only the first chosen generator respected
+ // the first value, which would pass a test where a single
+ // generator is used.
+ //
+ // This is non-trivial due to the randomized nature of OneOf.
+ // It can be simplified if we express it in a non-deterministic
+ // way and mark it as mayfail, where we can recognize with a good
+ // certainty that the test is actually passing.
+ //
+ // To avoid having this flaky test, we approach it as follows:
+ //
+ // We provide some amount of infinite generators. Those generators
+ // are ensured to produce one specific value as their first value
+ // and then infinitely produce a different value.
+ // We ensure that each generator that is provided produces unique
+ // values, that is, no two generators produce a first value or 1 <
+ // nth value that is equal to the one produced by another
+ // generator.
+ //
+ // Then we pass those generators to oneof and generate enough
+ // values such that at least one of the generators must have been
+ // chosen twice or more, at random.
+ //
+ // We count the appearances of each value in the produced set.
+ // Then, if a value that is generated by the 1 < nth choice of a
+ // specific generator is encountered, we check that the first
+ // value that the specific generator would produce is in the set
+ // of values that were generated.
+ // That is, if a generator has produced his non-first value, it
+ // must have been chosen twice or more.
+ // This in turn implies that the first time that the generator was
+ // chosen, its first value was actually produced.
+
+ struct IncreaseAfterFirst {
+ std::size_t increase;
+ bool first_application = true;
+
+ std::size_t operator()(std::size_t value) {
+ if (first_application) {
+ first_application = false;
+ return value;
+ }
+
+ return value + increase;
+ }
+ };
+
+ std::size_t maximum_generator_amount{100};
+ auto generators_amount = GENERATE_COPY(take(10, random(std::size_t{1}, maximum_generator_amount)));
+
+ std::vector<Catch::Generators::GeneratorWrapper<std::size_t>> generators;
+ generators.reserve(generators_amount);
+
+ for (std::size_t index{0}; index < generators_amount; ++index) {
+ generators.push_back(Catch::Generators::map(IncreaseAfterFirst{maximum_generator_amount}, cycle(Catch::Generators::value(copy_value(index)))));
+ }
+
+ auto values = GENERATE_REF(take(1, chunk(generators_amount + 1, uniform_oneof(std::move(generators)))));
+ auto histogram{make_histogram(values.begin(), values.end(), [](auto e){ return e; })};
+
+ for (std::size_t index{0}; index < generators_amount; ++index) {
+ std::size_t second_value{index + maximum_generator_amount};
+ histogram.try_emplace(second_value, 0);
+
+ if (histogram[second_value] > 0) {
+ REQUIRE(histogram.find(index) != histogram.end());
+ }
+ }
+}
diff --git a/src/qdoc/catch_generators/tests/main.cpp b/src/qdoc/catch_generators/tests/main.cpp
new file mode 100644
index 000000000..48ce73f12
--- /dev/null
+++ b/src/qdoc/catch_generators/tests/main.cpp
@@ -0,0 +1,13 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#define CATCH_CONFIG_RUNNER
+#include <catch/catch.hpp>
+
+// A custom main was provided to avoid linking errors when using minGW
+// that were appearing in CI.
+// See https://github.com/catchorg/Catch2/issues/1287
+int main(int argc, char *argv[])
+{
+ return Catch::Session().run(argc, argv);
+}
diff --git a/src/qdoc/catch_generators/tests/utilities/semantics/catch_generator_handler.cpp b/src/qdoc/catch_generators/tests/utilities/semantics/catch_generator_handler.cpp
new file mode 100644
index 000000000..b99a6515d
--- /dev/null
+++ b/src/qdoc/catch_generators/tests/utilities/semantics/catch_generator_handler.cpp
@@ -0,0 +1,28 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include <catch/catch.hpp>
+
+#include <catch_generators/namespaces.h>
+#include <catch_generators/utilities/semantics/generator_handler.h>
+
+using namespace QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE;
+
+TEST_CASE(
+ "Calling next 0 < n times and then calling get on a GeneratorHandler wrapping a generator behaves the same as only calling next (n-1) times and then get on the generator that is wrapped",
+ "[GeneratorHandler][Utilities][Semantics][Generators]"
+) {
+ auto n = GENERATE(take(100, random(1, 100)));
+ auto generator_values = GENERATE_COPY(take(1, chunk(n, random(0, 100000))));
+
+ auto generator_handler = handler(Catch::Generators::from_range(generator_values.begin(), generator_values.end()));
+ auto generator{Catch::Generators::from_range(generator_values.begin(), generator_values.end())};
+
+ generator_handler.next();
+ for (int times{1}; times < n; ++times) {
+ generator_handler.next();
+ generator.next();
+ }
+
+ REQUIRE(generator_handler.get() == generator.get());
+}
diff --git a/src/qdoc/clangcodeparser.cpp b/src/qdoc/clangcodeparser.cpp
deleted file mode 100644
index 36a65c1f1..000000000
--- a/src/qdoc/clangcodeparser.cpp
+++ /dev/null
@@ -1,1726 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- clangcodeparser.cpp
-*/
-
-#include "clangcodeparser.h"
-
-#include "access.h"
-#include "classnode.h"
-#include "codechunk.h"
-#include "config.h"
-#include "enumnode.h"
-#include "functionnode.h"
-#include "loggingcategory.h"
-#include "namespacenode.h"
-#include "propertynode.h"
-#include "qdocdatabase.h"
-#include "typedefnode.h"
-#include "utilities.h"
-#include "variablenode.h"
-
-#include <QtCore/qdebug.h>
-#include <QtCore/qelapsedtimer.h>
-#include <QtCore/qfile.h>
-#include <QtCore/qscopedvaluerollback.h>
-#include <QtCore/qtemporarydir.h>
-
-#include <clang-c/Index.h>
-
-#include <cstdio>
-
-QT_BEGIN_NAMESPACE
-
-static CXTranslationUnit_Flags flags_ = static_cast<CXTranslationUnit_Flags>(0);
-static CXIndex index_ = nullptr;
-
-QByteArray ClangCodeParser::s_fn;
-constexpr const char *fnDummyFileName = "/fn_dummyfile.cpp";
-
-#ifndef QT_NO_DEBUG_STREAM
-template<class T>
-static QDebug operator<<(QDebug debug, const std::vector<T> &v)
-{
- QDebugStateSaver saver(debug);
- debug.noquote();
- debug.nospace();
- const size_t size = v.size();
- debug << "std::vector<>[" << size << "](";
- for (size_t i = 0; i < size; ++i) {
- if (i)
- debug << ", ";
- debug << v[i];
- }
- debug << ')';
- return debug;
-}
-#endif // !QT_NO_DEBUG_STREAM
-
-/*!
- Call clang_visitChildren on the given cursor with the lambda as a callback
- T can be any functor that is callable with a CXCursor parameter and returns a CXChildVisitResult
- (in other word compatible with function<CXChildVisitResult(CXCursor)>
- */
-template<typename T>
-bool visitChildrenLambda(CXCursor cursor, T &&lambda)
-{
- CXCursorVisitor visitor = [](CXCursor c, CXCursor,
- CXClientData client_data) -> CXChildVisitResult {
- return (*static_cast<T *>(client_data))(c);
- };
- return clang_visitChildren(cursor, visitor, &lambda);
-}
-
-/*!
- convert a CXString to a QString, and dispose the CXString
- */
-static QString fromCXString(CXString &&string)
-{
- QString ret = QString::fromUtf8(clang_getCString(string));
- clang_disposeString(string);
- return ret;
-}
-
-static QString templateDecl(CXCursor cursor);
-
-/*!
- Returns a list of template parameters at \a cursor.
-*/
-static QStringList getTemplateParameters(CXCursor cursor)
-{
- QStringList parameters;
- visitChildrenLambda(cursor, [&parameters](CXCursor cur) {
- QString name = fromCXString(clang_getCursorSpelling(cur));
- QString type;
-
- switch (clang_getCursorKind(cur)) {
- case CXCursor_TemplateTypeParameter:
- type = QStringLiteral("typename");
- break;
- case CXCursor_NonTypeTemplateParameter:
- type = fromCXString(clang_getTypeSpelling(clang_getCursorType(cur)));
- // Hack: Omit QtPrivate template parameters from public documentation
- if (type.startsWith(QLatin1String("QtPrivate")))
- return CXChildVisit_Continue;
- break;
- case CXCursor_TemplateTemplateParameter:
- type = templateDecl(cur) + QLatin1String(" class");
- break;
- default:
- return CXChildVisit_Continue;
- }
-
- if (!name.isEmpty())
- name.prepend(QLatin1Char(' '));
-
- parameters << type + name;
- return CXChildVisit_Continue;
- });
-
- return parameters;
-}
-
-/*!
- Gets the template declaration at specified \a cursor.
- */
-static QString templateDecl(CXCursor cursor)
-{
- QStringList params = getTemplateParameters(cursor);
- return QLatin1String("template <") + params.join(QLatin1String(", ")) + QLatin1Char('>');
-}
-
-/*!
- convert a CXSourceLocation to a qdoc Location
- */
-static Location fromCXSourceLocation(CXSourceLocation location)
-{
- unsigned int line, column;
- CXString file;
- clang_getPresumedLocation(location, &file, &line, &column);
- Location l(fromCXString(std::move(file)));
- l.setColumnNo(column);
- l.setLineNo(line);
- return l;
-}
-
-/*!
- convert a CX_CXXAccessSpecifier to Node::Access
- */
-static Access fromCX_CXXAccessSpecifier(CX_CXXAccessSpecifier spec)
-{
- switch (spec) {
- case CX_CXXPrivate:
- return Access::Private;
- case CX_CXXProtected:
- return Access::Protected;
- case CX_CXXPublic:
- return Access::Public;
- default:
- return Access::Public;
- }
-}
-
-/*!
- Returns the spelling in the file for a source range
- */
-static QString getSpelling(CXSourceRange range)
-{
- auto start = clang_getRangeStart(range);
- auto end = clang_getRangeEnd(range);
- CXFile file1, file2;
- unsigned int offset1, offset2;
- clang_getFileLocation(start, &file1, nullptr, nullptr, &offset1);
- clang_getFileLocation(end, &file2, nullptr, nullptr, &offset2);
-
- if (file1 != file2 || offset2 <= offset1)
- return QString();
- QFile file(fromCXString(clang_getFileName(file1)));
- if (!file.open(QFile::ReadOnly)) {
- if (file.fileName() == fnDummyFileName)
- return QString::fromUtf8(ClangCodeParser::fn().mid(offset1, offset2 - offset1));
- return QString();
- }
- file.seek(offset1);
- return QString::fromUtf8(file.read(offset2 - offset1));
-}
-
-/*!
- Returns the function name from a given cursor representing a
- function declaration. This is usually clang_getCursorSpelling, but
- not for the conversion function in which case it is a bit more complicated
- */
-QString functionName(CXCursor cursor)
-{
- if (clang_getCursorKind(cursor) == CXCursor_ConversionFunction) {
- // For a CXCursor_ConversionFunction we don't want the spelling which would be something
- // like "operator type-parameter-0-0" or "operator unsigned int". we want the actual name as
- // spelled;
- QString type = fromCXString(clang_getTypeSpelling(clang_getCursorResultType(cursor)));
- if (type.isEmpty())
- return fromCXString(clang_getCursorSpelling(cursor));
- return QLatin1String("operator ") + type;
- }
-
- QString name = fromCXString(clang_getCursorSpelling(cursor));
-
- // Remove template stuff from constructor and destructor but not from operator<
- auto ltLoc = name.indexOf('<');
- if (ltLoc > 0 && !name.startsWith("operator<"))
- name = name.left(ltLoc);
- return name;
-}
-
-/*!
- Reconstruct the qualified path name of a function that is
- being overridden.
- */
-static QString reconstructQualifiedPathForCursor(CXCursor cur)
-{
- QString path;
- auto kind = clang_getCursorKind(cur);
- while (!clang_isInvalid(kind) && kind != CXCursor_TranslationUnit) {
- switch (kind) {
- case CXCursor_Namespace:
- case CXCursor_StructDecl:
- case CXCursor_ClassDecl:
- case CXCursor_UnionDecl:
- case CXCursor_ClassTemplate:
- path.prepend("::");
- path.prepend(fromCXString(clang_getCursorSpelling(cur)));
- break;
- case CXCursor_FunctionDecl:
- case CXCursor_FunctionTemplate:
- case CXCursor_CXXMethod:
- case CXCursor_Constructor:
- case CXCursor_Destructor:
- case CXCursor_ConversionFunction:
- path = functionName(cur);
- break;
- default:
- break;
- }
- cur = clang_getCursorSemanticParent(cur);
- kind = clang_getCursorKind(cur);
- }
- return path;
-}
-
-/*!
- Find the node from the QDocDatabase \a qdb that corrseponds to the declaration
- represented by the cursor \a cur, if it exists.
- */
-static Node *findNodeForCursor(QDocDatabase *qdb, CXCursor cur)
-{
- auto kind = clang_getCursorKind(cur);
- if (clang_isInvalid(kind))
- return nullptr;
- if (kind == CXCursor_TranslationUnit)
- return qdb->primaryTreeRoot();
-
- Node *p = findNodeForCursor(qdb, clang_getCursorSemanticParent(cur));
- if (p == nullptr)
- return nullptr;
- if (!p->isAggregate())
- return nullptr;
- auto parent = static_cast<Aggregate *>(p);
-
- QString name = fromCXString(clang_getCursorSpelling(cur));
- switch (kind) {
- case CXCursor_Namespace:
- return parent->findNonfunctionChild(name, &Node::isNamespace);
- case CXCursor_StructDecl:
- case CXCursor_ClassDecl:
- case CXCursor_UnionDecl:
- case CXCursor_ClassTemplate:
- return parent->findNonfunctionChild(name, &Node::isClassNode);
- case CXCursor_FunctionDecl:
- case CXCursor_FunctionTemplate:
- case CXCursor_CXXMethod:
- case CXCursor_Constructor:
- case CXCursor_Destructor:
- case CXCursor_ConversionFunction: {
- NodeVector candidates;
- parent->findChildren(functionName(cur), candidates);
- if (candidates.isEmpty())
- return nullptr;
- CXType funcType = clang_getCursorType(cur);
- auto numArg = clang_getNumArgTypes(funcType);
- bool isVariadic = clang_isFunctionTypeVariadic(funcType);
- QVarLengthArray<QString, 20> args;
- for (Node *candidate : qAsConst(candidates)) {
- if (!candidate->isFunction(Node::CPP))
- continue;
- auto fn = static_cast<FunctionNode *>(candidate);
- const Parameters &parameters = fn->parameters();
- const int actualArg = numArg - parameters.isPrivateSignal();
- if (parameters.count() != actualArg + isVariadic)
- continue;
- if (fn->isConst() != bool(clang_CXXMethod_isConst(cur)))
- continue;
- if (isVariadic && parameters.last().type() != QLatin1String("..."))
- continue;
- bool different = false;
- for (int i = 0; i < actualArg; ++i) {
- CXType argType = clang_getArgType(funcType, i);
- if (args.size() <= i)
- args.append(fromCXString(clang_getTypeSpelling(argType)));
- QString recordedType = parameters.at(i).type();
- QString typeSpelling = args.at(i);
- auto p = parent;
- while (p && recordedType != typeSpelling) {
- QString parentScope = p->name() + QLatin1String("::");
- recordedType.remove(parentScope);
- typeSpelling.remove(parentScope);
- p = p->parent();
- }
- different = recordedType != typeSpelling;
-
- // Retry with a canonical type spelling
- if (different && (argType.kind == CXType_Typedef || argType.kind == CXType_Elaborated)) {
- QStringView canonicalType = parameters.at(i).canonicalType();
- if (!canonicalType.isEmpty()) {
- different = canonicalType !=
- fromCXString(clang_getTypeSpelling(clang_getCanonicalType(argType)));
- }
- }
- if (different) {
- break;
- }
- }
- if (!different)
- return fn;
- }
- return nullptr;
- }
- case CXCursor_EnumDecl:
- return parent->findNonfunctionChild(name, &Node::isEnumType);
- case CXCursor_FieldDecl:
- case CXCursor_VarDecl:
- return parent->findNonfunctionChild(name, &Node::isVariable);
- case CXCursor_TypedefDecl:
- return parent->findNonfunctionChild(name, &Node::isTypedef);
- default:
- return nullptr;
- }
-}
-
-class ClangVisitor
-{
-public:
- ClangVisitor(QDocDatabase *qdb, const QHash<QString, QString> &allHeaders)
- : qdb_(qdb), parent_(qdb->primaryTreeRoot()), allHeaders_(allHeaders)
- {
- }
-
- QDocDatabase *qdocDB() { return qdb_; }
-
- CXChildVisitResult visitChildren(CXCursor cursor)
- {
- auto ret = visitChildrenLambda(cursor, [&](CXCursor cur) {
- auto loc = clang_getCursorLocation(cur);
- if (clang_Location_isFromMainFile(loc))
- return visitSource(cur, loc);
- CXFile file;
- clang_getFileLocation(loc, &file, nullptr, nullptr, nullptr);
- bool isInteresting = false;
- auto it = isInterestingCache_.find(file);
- if (it != isInterestingCache_.end()) {
- isInteresting = *it;
- } else {
- QFileInfo fi(fromCXString(clang_getFileName(file)));
- // Match by file name in case of PCH/installed headers
- isInteresting = allHeaders_.contains(fi.fileName());
- isInterestingCache_[file] = isInteresting;
- }
- if (isInteresting) {
- return visitHeader(cur, loc);
- }
-
- return CXChildVisit_Continue;
- });
- return ret ? CXChildVisit_Break : CXChildVisit_Continue;
- }
-
- /*
- Not sure about all the possibilities, when the cursor
- location is not in the main file.
- */
- CXChildVisitResult visitFnArg(CXCursor cursor, Node **fnNode, bool &ignoreSignature)
- {
- auto ret = visitChildrenLambda(cursor, [&](CXCursor cur) {
- auto loc = clang_getCursorLocation(cur);
- if (clang_Location_isFromMainFile(loc))
- return visitFnSignature(cur, loc, fnNode, ignoreSignature);
- return CXChildVisit_Continue;
- });
- return ret ? CXChildVisit_Break : CXChildVisit_Continue;
- }
-
- Node *nodeForCommentAtLocation(CXSourceLocation loc, CXSourceLocation nextCommentLoc);
-
-private:
- /*!
- SimpleLoc represents a simple location in the main source file,
- which can be used as a key in a QMap.
- */
- struct SimpleLoc
- {
- unsigned int line, column;
- friend bool operator<(const SimpleLoc &a, const SimpleLoc &b)
- {
- return a.line != b.line ? a.line < b.line : a.column < b.column;
- }
- };
- /*!
- \variable ClangVisitor::declMap_
- Map of all the declarations in the source file so we can match them
- with a documentation comment.
- */
- QMap<SimpleLoc, CXCursor> declMap_;
-
- QDocDatabase *qdb_;
- Aggregate *parent_;
- const QHash<QString, QString> allHeaders_;
- QHash<CXFile, bool> isInterestingCache_; // doing a canonicalFilePath is slow, so keep a cache.
-
- /*!
- Returns true if the symbol should be ignored for the documentation.
- */
- bool ignoredSymbol(const QString &symbolName)
- {
- if (symbolName == QLatin1String("QPrivateSignal"))
- return true;
- // Ignore functions generated by property macros
- if (symbolName.startsWith("_qt_property_"))
- return true;
- return false;
- }
-
- /*!
- The type parameters do not need to be fully qualified
- This function removes the ClassName:: if needed.
-
- example: 'QLinkedList::iterator' -> 'iterator'
- */
- QString adjustTypeName(const QString &typeName)
- {
- auto parent = parent_->parent();
- if (parent && parent->isClassNode()) {
- QStringView typeNameConstRemoved(typeName);
- if (typeNameConstRemoved.startsWith(QLatin1String("const ")))
- typeNameConstRemoved = typeNameConstRemoved.mid(6);
-
- auto parentName = parent->fullName();
- if (typeNameConstRemoved.startsWith(parentName)
- && typeNameConstRemoved.mid(parentName.size(), 2) == QLatin1String("::")) {
- QString result = typeName;
- result.remove(typeName.indexOf(typeNameConstRemoved), parentName.size() + 2);
- return result;
- }
- }
- return typeName;
- }
-
- CXChildVisitResult visitSource(CXCursor cursor, CXSourceLocation loc);
- CXChildVisitResult visitHeader(CXCursor cursor, CXSourceLocation loc);
- CXChildVisitResult visitFnSignature(CXCursor cursor, CXSourceLocation loc, Node **fnNode,
- bool &ignoreSignature);
- bool parseProperty(const QString &spelling, const Location &loc);
- void readParameterNamesAndAttributes(FunctionNode *fn, CXCursor cursor);
- Aggregate *getSemanticParent(CXCursor cursor);
-};
-
-/*!
- Visits a cursor in the .cpp file.
- This fills the declMap_
- */
-CXChildVisitResult ClangVisitor::visitSource(CXCursor cursor, CXSourceLocation loc)
-{
- auto kind = clang_getCursorKind(cursor);
- if (clang_isDeclaration(kind)) {
- SimpleLoc l;
- clang_getPresumedLocation(loc, nullptr, &l.line, &l.column);
- declMap_.insert(l, cursor);
- return CXChildVisit_Recurse;
- }
- return CXChildVisit_Continue;
-}
-
-/*!
- If the semantic and lexical parent cursors of \a cursor are
- not the same, find the Aggregate node for the semantic parent
- cursor and return it. Otherwise return the current parent.
- */
-Aggregate *ClangVisitor::getSemanticParent(CXCursor cursor)
-{
- CXCursor sp = clang_getCursorSemanticParent(cursor);
- CXCursor lp = clang_getCursorLexicalParent(cursor);
- if (!clang_equalCursors(sp, lp) && clang_isDeclaration(clang_getCursorKind(sp))) {
- Node *spn = findNodeForCursor(qdb_, sp);
- if (spn && spn->isAggregate()) {
- return static_cast<Aggregate *>(spn);
- }
- }
- return parent_;
-}
-
-CXChildVisitResult ClangVisitor::visitFnSignature(CXCursor cursor, CXSourceLocation, Node **fnNode,
- bool &ignoreSignature)
-{
- switch (clang_getCursorKind(cursor)) {
- case CXCursor_Namespace:
- return CXChildVisit_Recurse;
- case CXCursor_FunctionDecl:
- case CXCursor_FunctionTemplate:
- case CXCursor_CXXMethod:
- case CXCursor_Constructor:
- case CXCursor_Destructor:
- case CXCursor_ConversionFunction: {
- ignoreSignature = false;
- if (ignoredSymbol(functionName(cursor))) {
- *fnNode = nullptr;
- ignoreSignature = true;
- } else {
- *fnNode = findNodeForCursor(qdb_, cursor);
- if (*fnNode && (*fnNode)->isFunction(Node::CPP)) {
- FunctionNode *fn = static_cast<FunctionNode *>(*fnNode);
- readParameterNamesAndAttributes(fn, cursor);
- }
- }
- break;
- }
- default:
- break;
- }
- return CXChildVisit_Continue;
-}
-
-CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation loc)
-{
- auto kind = clang_getCursorKind(cursor);
- QString templateString;
- switch (kind) {
- case CXCursor_TypeAliasTemplateDecl:
- case CXCursor_TypeAliasDecl: {
- QString aliasDecl = getSpelling(clang_getCursorExtent(cursor)).simplified();
- QStringList typeAlias = aliasDecl.split(QLatin1Char('='));
- if (typeAlias.size() == 2) {
- typeAlias[0] = typeAlias[0].trimmed();
- const QLatin1String usingString("using ");
- int usingPos = typeAlias[0].indexOf(usingString);
- if (usingPos != -1) {
- if (kind == CXCursor_TypeAliasTemplateDecl)
- templateString = typeAlias[0].left(usingPos).trimmed();
- typeAlias[0].remove(0, usingPos + usingString.size());
- typeAlias[0] = typeAlias[0].split(QLatin1Char(' ')).first();
- typeAlias[1] = typeAlias[1].trimmed();
- TypeAliasNode *ta = new TypeAliasNode(parent_, typeAlias[0], typeAlias[1]);
- ta->setAccess(fromCX_CXXAccessSpecifier(clang_getCXXAccessSpecifier(cursor)));
- ta->setLocation(fromCXSourceLocation(clang_getCursorLocation(cursor)));
- ta->setTemplateDecl(templateString);
- }
- }
- return CXChildVisit_Continue;
- }
- case CXCursor_StructDecl:
- case CXCursor_UnionDecl:
- if (fromCXString(clang_getCursorSpelling(cursor)).isEmpty()) // anonymous struct or union
- return CXChildVisit_Continue;
- Q_FALLTHROUGH();
- case CXCursor_ClassTemplate:
- templateString = templateDecl(cursor);
- Q_FALLTHROUGH();
- case CXCursor_ClassDecl: {
- if (!clang_isCursorDefinition(cursor))
- return CXChildVisit_Continue;
-
- if (findNodeForCursor(qdb_, cursor)) // Was already parsed, probably in another TU
- return CXChildVisit_Continue;
-
- QString className = fromCXString(clang_getCursorSpelling(cursor));
-
- Aggregate *semanticParent = getSemanticParent(cursor);
- if (semanticParent && semanticParent->findNonfunctionChild(className, &Node::isClassNode)) {
- return CXChildVisit_Continue;
- }
-
- CXCursorKind actualKind = (kind == CXCursor_ClassTemplate) ?
- clang_getTemplateCursorKind(cursor) : kind;
-
- Node::NodeType type = Node::Class;
- if (actualKind == CXCursor_StructDecl)
- type = Node::Struct;
- else if (actualKind == CXCursor_UnionDecl)
- type = Node::Union;
-
- ClassNode *classe = new ClassNode(type, semanticParent, className);
- classe->setAccess(fromCX_CXXAccessSpecifier(clang_getCXXAccessSpecifier(cursor)));
- classe->setLocation(fromCXSourceLocation(clang_getCursorLocation(cursor)));
-
- if (kind == CXCursor_ClassTemplate)
- classe->setTemplateDecl(templateString);
-
- QScopedValueRollback<Aggregate *> setParent(parent_, classe);
- return visitChildren(cursor);
- }
- case CXCursor_CXXBaseSpecifier: {
- if (!parent_->isClassNode())
- return CXChildVisit_Continue;
- auto access = fromCX_CXXAccessSpecifier(clang_getCXXAccessSpecifier(cursor));
- auto type = clang_getCursorType(cursor);
- auto baseCursor = clang_getTypeDeclaration(type);
- auto baseNode = findNodeForCursor(qdb_, baseCursor);
- auto classe = static_cast<ClassNode *>(parent_);
- if (baseNode == nullptr || !baseNode->isClassNode()) {
- QString bcName = reconstructQualifiedPathForCursor(baseCursor);
- classe->addUnresolvedBaseClass(
- access, bcName.split(QLatin1String("::"), Qt::SkipEmptyParts), bcName);
- return CXChildVisit_Continue;
- }
- auto baseClasse = static_cast<ClassNode *>(baseNode);
- classe->addResolvedBaseClass(access, baseClasse);
- return CXChildVisit_Continue;
- }
- case CXCursor_Namespace: {
- QString namespaceName = fromCXString(clang_getCursorDisplayName(cursor));
- NamespaceNode *ns = nullptr;
- if (parent_)
- ns = static_cast<NamespaceNode *>(
- parent_->findNonfunctionChild(namespaceName, &Node::isNamespace));
- if (!ns) {
- ns = new NamespaceNode(parent_, namespaceName);
- ns->setAccess(Access::Public);
- ns->setLocation(fromCXSourceLocation(clang_getCursorLocation(cursor)));
- }
- QScopedValueRollback<Aggregate *> setParent(parent_, ns);
- return visitChildren(cursor);
- }
- case CXCursor_FunctionTemplate:
- templateString = templateDecl(cursor);
- Q_FALLTHROUGH();
- case CXCursor_FunctionDecl:
- case CXCursor_CXXMethod:
- case CXCursor_Constructor:
- case CXCursor_Destructor:
- case CXCursor_ConversionFunction: {
- if (findNodeForCursor(qdb_, cursor)) // Was already parsed, probably in another TU
- return CXChildVisit_Continue;
- QString name = functionName(cursor);
- if (ignoredSymbol(name))
- return CXChildVisit_Continue;
-
- CXType funcType = clang_getCursorType(cursor);
-
- FunctionNode *fn = new FunctionNode(parent_, name);
-
- CXSourceRange range = clang_Cursor_getCommentRange(cursor);
- if (!clang_Range_isNull(range)) {
- QString comment = getSpelling(range);
- if (comment.startsWith("//!")) {
- int tag = comment.indexOf(QChar('['));
- if (tag > 0) {
- int end = comment.indexOf(QChar(']'), tag);
- if (end > 0)
- fn->setTag(comment.mid(tag, 1 + end - tag));
- }
- }
- }
- fn->setAccess(fromCX_CXXAccessSpecifier(clang_getCXXAccessSpecifier(cursor)));
- fn->setLocation(fromCXSourceLocation(clang_getCursorLocation(cursor)));
- if (kind == CXCursor_Constructor
- // a constructor template is classified as CXCursor_FunctionTemplate
- || (kind == CXCursor_FunctionTemplate && name == parent_->name()))
- fn->setMetaness(FunctionNode::Ctor);
- else if (kind == CXCursor_Destructor)
- fn->setMetaness(FunctionNode::Dtor);
- else
- fn->setReturnType(adjustTypeName(
- fromCXString(clang_getTypeSpelling(clang_getResultType(funcType)))));
-
- fn->setStatic(clang_CXXMethod_isStatic(cursor));
- fn->setConst(clang_CXXMethod_isConst(cursor));
- fn->setVirtualness(!clang_CXXMethod_isVirtual(cursor)
- ? FunctionNode::NonVirtual
- : clang_CXXMethod_isPureVirtual(cursor)
- ? FunctionNode::PureVirtual
- : FunctionNode::NormalVirtual);
- CXRefQualifierKind refQualKind = clang_Type_getCXXRefQualifier(funcType);
- if (refQualKind == CXRefQualifier_LValue)
- fn->setRef(true);
- else if (refQualKind == CXRefQualifier_RValue)
- fn->setRefRef(true);
- // For virtual functions, determine what it overrides
- // (except for destructor for which we do not want to classify as overridden)
- if (!fn->isNonvirtual() && kind != CXCursor_Destructor) {
- CXCursor *overridden;
- unsigned int numOverridden = 0;
- clang_getOverriddenCursors(cursor, &overridden, &numOverridden);
- for (uint i = 0; i < numOverridden; ++i) {
- QString path = reconstructQualifiedPathForCursor(overridden[i]);
- if (!path.isEmpty()) {
- fn->setOverride(true);
- fn->setOverridesThis(path);
- break;
- }
- }
- clang_disposeOverriddenCursors(overridden);
- }
- auto numArg = clang_getNumArgTypes(funcType);
- Parameters &parameters = fn->parameters();
- parameters.clear();
- parameters.reserve(numArg);
- for (int i = 0; i < numArg; ++i) {
- CXType argType = clang_getArgType(funcType, i);
- if (fn->isCtor()) {
- if (fromCXString(clang_getTypeSpelling(clang_getPointeeType(argType))) == name) {
- if (argType.kind == CXType_RValueReference)
- fn->setMetaness(FunctionNode::MCtor);
- else if (argType.kind == CXType_LValueReference)
- fn->setMetaness(FunctionNode::CCtor);
- }
- } else if ((kind == CXCursor_CXXMethod) && (name == QLatin1String("operator="))) {
- if (argType.kind == CXType_RValueReference)
- fn->setMetaness(FunctionNode::MAssign);
- else if (argType.kind == CXType_LValueReference)
- fn->setMetaness(FunctionNode::CAssign);
- }
- parameters.append(adjustTypeName(fromCXString(clang_getTypeSpelling(argType))));
- if (argType.kind == CXType_Typedef || argType.kind == CXType_Elaborated) {
- parameters.last().setCanonicalType(fromCXString(
- clang_getTypeSpelling(clang_getCanonicalType(argType))));
- }
- }
- if (parameters.count() > 0) {
- if (parameters.last().type().endsWith(QLatin1String("::QPrivateSignal"))) {
- parameters.pop_back(); // remove the QPrivateSignal argument
- parameters.setPrivateSignal();
- }
- }
- if (clang_isFunctionTypeVariadic(funcType))
- parameters.append(QStringLiteral("..."));
- readParameterNamesAndAttributes(fn, cursor);
- fn->setTemplateDecl(templateString);
- return CXChildVisit_Continue;
- }
-#if CINDEX_VERSION >= 36
- case CXCursor_FriendDecl: {
- // Friend functions are declared in the enclosing namespace
- Aggregate *ns = parent_;
- while (ns && ns->isClassNode())
- ns = ns->parent();
- QScopedValueRollback<Aggregate *> setParent(parent_, ns);
- // Visit the friend functions
- return visitChildren(cursor);
- }
-#endif
- case CXCursor_EnumDecl: {
- EnumNode *en = static_cast<EnumNode *>(findNodeForCursor(qdb_, cursor));
- if (en && en->items().count())
- return CXChildVisit_Continue; // Was already parsed, probably in another TU
- QString enumTypeName = fromCXString(clang_getCursorSpelling(cursor));
- if (enumTypeName.isEmpty()) {
- enumTypeName = "anonymous";
- if (parent_ && (parent_->isClassNode() || parent_->isNamespace())) {
- Node *n = parent_->findNonfunctionChild(enumTypeName, &Node::isEnumType);
- if (n)
- en = static_cast<EnumNode *>(n);
- }
- }
- if (!en) {
- en = new EnumNode(parent_, enumTypeName, clang_EnumDecl_isScoped(cursor));
- en->setAccess(fromCX_CXXAccessSpecifier(clang_getCXXAccessSpecifier(cursor)));
- en->setLocation(fromCXSourceLocation(clang_getCursorLocation(cursor)));
- }
-
- // Enum values
- visitChildrenLambda(cursor, [&](CXCursor cur) {
- if (clang_getCursorKind(cur) != CXCursor_EnumConstantDecl)
- return CXChildVisit_Continue;
-
- QString value;
- visitChildrenLambda(cur, [&](CXCursor cur) {
- if (clang_isExpression(clang_getCursorKind(cur))) {
- value = getSpelling(clang_getCursorExtent(cur));
- return CXChildVisit_Break;
- }
- return CXChildVisit_Continue;
- });
- if (value.isEmpty()) {
- QLatin1String hex("0x");
- if (!en->items().isEmpty() && en->items().last().value().startsWith(hex)) {
- value = hex + QString::number(clang_getEnumConstantDeclValue(cur), 16);
- } else {
- value = QString::number(clang_getEnumConstantDeclValue(cur));
- }
- }
-
- en->addItem(EnumItem(fromCXString(clang_getCursorSpelling(cur)), value));
- return CXChildVisit_Continue;
- });
- return CXChildVisit_Continue;
- }
- case CXCursor_FieldDecl:
- case CXCursor_VarDecl: {
- if (findNodeForCursor(qdb_, cursor)) // Was already parsed, probably in another TU
- return CXChildVisit_Continue;
-
- auto access = fromCX_CXXAccessSpecifier(clang_getCXXAccessSpecifier(cursor));
- auto var = new VariableNode(parent_, fromCXString(clang_getCursorSpelling(cursor)));
- var->setAccess(access);
- var->setLocation(fromCXSourceLocation(clang_getCursorLocation(cursor)));
- var->setLeftType(fromCXString(clang_getTypeSpelling(clang_getCursorType(cursor))));
- var->setStatic(kind == CXCursor_VarDecl && parent_->isClassNode());
- return CXChildVisit_Continue;
- }
- case CXCursor_TypedefDecl: {
- if (findNodeForCursor(qdb_, cursor)) // Was already parsed, probably in another TU
- return CXChildVisit_Continue;
- TypedefNode *td = new TypedefNode(parent_, fromCXString(clang_getCursorSpelling(cursor)));
- td->setAccess(fromCX_CXXAccessSpecifier(clang_getCXXAccessSpecifier(cursor)));
- td->setLocation(fromCXSourceLocation(clang_getCursorLocation(cursor)));
- // Search to see if this is a Q_DECLARE_FLAGS (if the type is QFlags<ENUM>)
- visitChildrenLambda(cursor, [&](CXCursor cur) {
- if (clang_getCursorKind(cur) != CXCursor_TemplateRef
- || fromCXString(clang_getCursorSpelling(cur)) != QLatin1String("QFlags"))
- return CXChildVisit_Continue;
- // Found QFlags<XXX>
- visitChildrenLambda(cursor, [&](CXCursor cur) {
- if (clang_getCursorKind(cur) != CXCursor_TypeRef)
- return CXChildVisit_Continue;
- auto *en =
- findNodeForCursor(qdb_, clang_getTypeDeclaration(clang_getCursorType(cur)));
- if (en && en->isEnumType())
- static_cast<EnumNode *>(en)->setFlagsType(td);
- return CXChildVisit_Break;
- });
- return CXChildVisit_Break;
- });
- return CXChildVisit_Continue;
- }
- default:
- if (clang_isDeclaration(kind) && parent_->isClassNode()) {
- // may be a property macro or a static_assert
- // which is not exposed from the clang API
- parseProperty(getSpelling(clang_getCursorExtent(cursor)),
- fromCXSourceLocation(loc));
- }
- return CXChildVisit_Continue;
- }
-}
-
-void ClangVisitor::readParameterNamesAndAttributes(FunctionNode *fn, CXCursor cursor)
-{
- Parameters &parameters = fn->parameters();
- // Visit the parameters and attributes
- int i = 0;
- visitChildrenLambda(cursor, [&](CXCursor cur) {
- auto kind = clang_getCursorKind(cur);
- if (kind == CXCursor_AnnotateAttr) {
- QString annotation = fromCXString(clang_getCursorDisplayName(cur));
- if (annotation == QLatin1String("qt_slot")) {
- fn->setMetaness(FunctionNode::Slot);
- } else if (annotation == QLatin1String("qt_signal")) {
- fn->setMetaness(FunctionNode::Signal);
- }
- if (annotation == QLatin1String("qt_invokable"))
- fn->setInvokable(true);
- } else if (kind == CXCursor_CXXOverrideAttr) {
- fn->setOverride(true);
- } else if (kind == CXCursor_ParmDecl) {
- if (i >= parameters.count())
- return CXChildVisit_Break; // Attributes comes before parameters so we can break.
- QString name = fromCXString(clang_getCursorSpelling(cur));
- if (!name.isEmpty()) {
- parameters[i].setName(name);
- // Find the default value
- visitChildrenLambda(cur, [&](CXCursor cur) {
- if (clang_isExpression(clang_getCursorKind(cur))) {
- QString defaultValue = getSpelling(clang_getCursorExtent(cur));
- if (defaultValue.startsWith('=')) // In some cases, the = is part of the range.
- defaultValue = QStringView{defaultValue}.mid(1).trimmed().toString();
- if (defaultValue.isEmpty())
- defaultValue = QStringLiteral("...");
- parameters[i].setDefaultValue(defaultValue);
- return CXChildVisit_Break;
- }
- return CXChildVisit_Continue;
- });
- ++i;
- }
- }
- return CXChildVisit_Continue;
- });
-}
-
-bool ClangVisitor::parseProperty(const QString &spelling, const Location &loc)
-{
- if (!spelling.startsWith(QLatin1String("Q_PROPERTY"))
- && !spelling.startsWith(QLatin1String("QDOC_PROPERTY"))
- && !spelling.startsWith(QLatin1String("Q_OVERRIDE")))
- return false;
-
- int lpIdx = spelling.indexOf(QChar('('));
- int rpIdx = spelling.lastIndexOf(QChar(')'));
- if (lpIdx <= 0 || rpIdx <= lpIdx)
- return false;
-
- QString signature = spelling.mid(lpIdx + 1, rpIdx - lpIdx - 1);
- signature = signature.simplified();
-
- QStringList part;
- part = signature.split(QChar(' '));
- if (part.first() == QLatin1String("enum"))
- part.takeFirst(); // QTBUG-80027
- if (part.size() < 2)
- return false;
- QString type = part.at(0);
- QString name = part.at(1);
-
- if (name.front() == QChar('*')) {
- type.append(QChar('*'));
- name.remove(0, 1);
- }
- auto *property = new PropertyNode(parent_, name);
- property->setAccess(Access::Public);
- property->setLocation(loc);
- property->setDataType(type);
-
- int i = 2;
- while (i < part.size()) {
- QString key = part.at(i++);
- // Keywords with no associated values
- if (key == "CONSTANT") {
- property->setConstant();
- } else if (key == "FINAL") {
- property->setFinal();
- } else if (key == "REQUIRED") {
- property->setRequired();
- }
- if (i < part.size()) {
- QString value = part.at(i++);
- if (key == "READ") {
- qdb_->addPropertyFunction(property, value, PropertyNode::Getter);
- } else if (key == "WRITE") {
- qdb_->addPropertyFunction(property, value, PropertyNode::Setter);
- property->setWritable(true);
- } else if (key == "STORED") {
- property->setStored(value.toLower() == "true");
- } else if (key == "DESIGNABLE") {
- QString v = value.toLower();
- if (v == "true")
- property->setDesignable(true);
- else if (v == "false")
- property->setDesignable(false);
- else {
- property->setDesignable(false);
- property->setRuntimeDesFunc(value);
- }
- } else if (key == "BINDABLE") {
- property->setPropertyType(PropertyNode::Bindable);
- } else if (key == "RESET") {
- qdb_->addPropertyFunction(property, value, PropertyNode::Resetter);
- } else if (key == "NOTIFY") {
- qdb_->addPropertyFunction(property, value, PropertyNode::Notifier);
- } else if (key == "REVISION") {
- int revision;
- bool ok;
- revision = value.toInt(&ok);
- if (ok)
- property->setRevision(revision);
- else
- loc.warning(QStringLiteral("Invalid revision number: %1").arg(value));
- } else if (key == "SCRIPTABLE") {
- QString v = value.toLower();
- if (v == "true")
- property->setScriptable(true);
- else if (v == "false")
- property->setScriptable(false);
- else {
- property->setScriptable(false);
- property->setRuntimeScrFunc(value);
- }
- }
- }
- }
- return true;
-}
-
-/*!
- Given a comment at location \a loc, return a Node for this comment
- \a nextCommentLoc is the location of the next comment so the declaration
- must be inbetween.
- Returns nullptr if no suitable declaration was found between the two comments.
- */
-Node *ClangVisitor::nodeForCommentAtLocation(CXSourceLocation loc, CXSourceLocation nextCommentLoc)
-{
- ClangVisitor::SimpleLoc docloc;
- clang_getPresumedLocation(loc, nullptr, &docloc.line, &docloc.column);
- auto decl_it = declMap_.upperBound(docloc);
- if (decl_it == declMap_.end())
- return nullptr;
-
- unsigned int declLine = decl_it.key().line;
- unsigned int nextCommentLine;
- clang_getPresumedLocation(nextCommentLoc, nullptr, &nextCommentLine, nullptr);
- if (nextCommentLine < declLine)
- return nullptr; // there is another comment before the declaration, ignore it.
-
- // make sure the previous decl was finished.
- if (decl_it != declMap_.begin()) {
- CXSourceLocation prevDeclEnd = clang_getRangeEnd(clang_getCursorExtent(*(std::prev(decl_it))));
- unsigned int prevDeclLine;
- clang_getPresumedLocation(prevDeclEnd, nullptr, &prevDeclLine, nullptr);
- if (prevDeclLine >= docloc.line) {
- // The previous declaration was still going. This is only valid if the previous
- // declaration is a parent of the next declaration.
- auto parent = clang_getCursorLexicalParent(*decl_it);
- if (!clang_equalCursors(parent, *(std::prev(decl_it))))
- return nullptr;
- }
- }
- auto *node = findNodeForCursor(qdb_, *decl_it);
- // borrow the parameter name from the definition
- if (node && node->isFunction(Node::CPP))
- readParameterNamesAndAttributes(static_cast<FunctionNode *>(node), *decl_it);
- return node;
-}
-
-/*!
- The destructor is trivial.
- */
-ClangCodeParser::~ClangCodeParser()
-{
- // nothing.
-}
-
-/*!
- Get the include paths from the qdoc configuration database
- \a config. Call the initializeParser() in the base class.
- Get the defines list from the qdocconf database.
- */
-void ClangCodeParser::initializeParser()
-{
- Config &config = Config::instance();
- m_printParsingErrors = 1;
- m_version = config.getString(CONFIG_VERSION);
- const auto args = config.getStringList(CONFIG_INCLUDEPATHS);
- QSet<QString> seen;
- m_includePaths.clear();
- // Remove empty paths and duplicates and add -I and canonicalize if necessary
- for (const auto &p : args) {
- QByteArray option;
- QString rawpath;
- if (p.startsWith(QLatin1String("-I")) || p.startsWith(QLatin1String("-F"))) {
- rawpath = p.mid(2).trimmed();
- option = p.left(2).toUtf8();
- } else if (p.startsWith(QLatin1String("-isystem"))) {
- rawpath = p.mid(8).trimmed();
- option = "-isystem";
- } else {
- rawpath = p;
- option = "-I";
- }
- if (rawpath.isEmpty() || seen.contains(rawpath))
- continue;
- seen.insert(rawpath);
- QByteArray path(rawpath.toUtf8());
- QFileInfo fi(QDir::current(), rawpath);
- if (fi.exists())
- path = fi.canonicalFilePath().toUtf8();
- path.prepend(option);
- m_includePaths.append(path);
- }
- CppCodeParser::initializeParser();
- m_pchFileDir.reset(nullptr);
- m_allHeaders.clear();
- m_pchName.clear();
- m_defines.clear();
- QSet<QString> accepted;
- {
- const QStringList tmpDefines = config.getStringList(CONFIG_CLANGDEFINES);
- for (const QString &def : tmpDefines) {
- if (!accepted.contains(def)) {
- QByteArray tmp("-D");
- tmp.append(def.toUtf8());
- m_defines.append(tmp.constData());
- accepted.insert(def);
- }
- }
- }
- {
- const QStringList tmpDefines = config.getStringList(CONFIG_DEFINES);
- for (const QString &def : tmpDefines) {
- if (!accepted.contains(def) && !def.contains(QChar('*'))) {
- QByteArray tmp("-D");
- tmp.append(def.toUtf8());
- m_defines.append(tmp.constData());
- accepted.insert(def);
- }
- }
- }
- qCDebug(lcQdoc).nospace() << __FUNCTION__ << " Clang v" << CINDEX_VERSION_MAJOR << '.'
- << CINDEX_VERSION_MINOR;
-}
-
-/*!
- */
-void ClangCodeParser::terminateParser()
-{
- CppCodeParser::terminateParser();
-}
-
-/*!
- */
-QString ClangCodeParser::language()
-{
- return "Clang";
-}
-
-/*!
- Returns a list of extensions for header files.
- */
-QStringList ClangCodeParser::headerFileNameFilter()
-{
- return QStringList() << "*.ch"
- << "*.h"
- << "*.h++"
- << "*.hh"
- << "*.hpp"
- << "*.hxx";
-}
-
-/*!
- Returns a list of extensions for source files, i.e. not
- header files.
- */
-QStringList ClangCodeParser::sourceFileNameFilter()
-{
- return QStringList() << "*.c++"
- << "*.cc"
- << "*.cpp"
- << "*.cxx"
- << "*.mm";
-}
-
-/*!
- Parse the C++ header file identified by \a filePath and add
- the parsed contents to the database. The \a location is used
- for reporting errors.
- */
-void ClangCodeParser::parseHeaderFile(const Location & /*location*/, const QString &filePath)
-{
- QFileInfo fi(filePath);
- m_allHeaders.insert(fi.fileName(), fi.canonicalPath());
-}
-
-static const char *defaultArgs_[] = {
- "-std=c++17",
-#ifndef Q_OS_WIN
- "-fPIC",
-#else
- "-fms-compatibility-version=19",
-#endif
- "-DQ_QDOC",
- "-DQ_CLANG_QDOC",
- "-DQT_DISABLE_DEPRECATED_BEFORE=0",
- "-DQT_ANNOTATE_CLASS(type,...)=static_assert(sizeof(#__VA_ARGS__),#type);",
- "-DQT_ANNOTATE_CLASS2(type,a1,a2)=static_assert(sizeof(#a1,#a2),#type);",
- "-DQT_ANNOTATE_FUNCTION(a)=__attribute__((annotate(#a)))",
- "-DQT_ANNOTATE_ACCESS_SPECIFIER(a)=__attribute__((annotate(#a)))",
- "-Wno-constant-logical-operand",
- "-Wno-macro-redefined",
- "-Wno-nullability-completeness",
- "-fvisibility=default",
- "-ferror-limit=0",
- "-I" CLANG_RESOURCE_DIR
-};
-
-/*!
- Load the default arguments and the defines into \a args.
- Clear \a args first.
- */
-void ClangCodeParser::getDefaultArgs()
-{
- m_args.clear();
- m_args.insert(m_args.begin(), std::begin(defaultArgs_), std::end(defaultArgs_));
- // Add the defines from the qdocconf file.
- for (const auto &p : qAsConst(m_defines))
- m_args.push_back(p.constData());
-}
-
-static QList<QByteArray> includePathsFromHeaders(const QHash<QString, QString> &allHeaders)
-{
- QList<QByteArray> result;
- for (auto it = allHeaders.cbegin(); it != allHeaders.cend(); ++it) {
- const QByteArray path = "-I" + it.value().toLatin1();
- const QByteArray parent =
- "-I" + QDir::cleanPath(it.value() + QLatin1String("/../")).toLatin1();
- if (!result.contains(path))
- result.append(path);
- if (!result.contains(parent))
- result.append(parent);
- }
- return result;
-}
-
-/*!
- Load the include paths into \a moreArgs and return false.
- If no include paths were provided, try to guess reasonable
- include paths but return true, so the clang diagnostics
- can be turned off during PCH creation.
-
- The use case for returning true is the QtPlatformHeaders
- module when running qdoc on macOS. For some reason, the
- include paths are not passed to qdoc, so it guesses them.
- This results in clang reporting a large number of errors
- during the PCH build. The errors are useles, except that
- it probably means the build system isn't working correctly
- for QtPlatformHeaders when running qdoc.
- */
-bool ClangCodeParser::getMoreArgs()
-{
- bool guessedIncludePaths = false;
- if (m_includePaths.isEmpty()) {
- /*
- The include paths provided are inadequate. Make a list
- of reasonable places to look for include files and use
- that list instead.
- */
- qCWarning(lcQdoc) << "No include paths passed to qdoc; guessing reasonable include paths";
- guessedIncludePaths = true;
- auto forest = qdb_->searchOrder();
-
- QByteArray version = qdb_->version().toUtf8();
- QString basicIncludeDir = QDir::cleanPath(QString(Config::installDir + "/../include"));
- m_moreArgs += "-I" + basicIncludeDir.toLatin1();
- m_moreArgs += includePathsFromHeaders(m_allHeaders);
- } else {
- m_moreArgs = m_includePaths;
- }
-
- return guessedIncludePaths;
-}
-
-/*!
- Building the PCH must be possible when there are no .cpp
- files, so it is moved here to its own member function, and
- it is called after the list of header files is complete.
- */
-void ClangCodeParser::buildPCH()
-{
- if (!m_pchFileDir && !moduleHeader().isEmpty()) {
- m_pchFileDir.reset(new QTemporaryDir(QDir::tempPath() + QLatin1String("/qdoc_pch")));
- if (m_pchFileDir->isValid()) {
- const QByteArray module = moduleHeader().toUtf8();
- QByteArray header;
- QByteArray privateHeaderDir;
- qCDebug(lcQdoc) << "Build and visit PCH for" << moduleHeader();
- // A predicate for std::find_if() to locate a path to the module's header
- // (e.g. QtGui/QtGui) to be used as pre-compiled header
- struct FindPredicate
- {
- enum SearchType { Any, Module, Private };
- QByteArray &candidate_;
- const QByteArray &module_;
- SearchType type_;
- FindPredicate(QByteArray &candidate, const QByteArray &module,
- SearchType type = Any)
- : candidate_(candidate), module_(module), type_(type)
- {
- }
-
- bool operator()(const QByteArray &p) const
- {
- if (type_ != Any && !p.endsWith(module_))
- return false;
- candidate_ = p + "/";
- switch (type_) {
- case Any:
- case Module:
- candidate_.append(module_);
- break;
- case Private:
- candidate_.append("private");
- break;
- default:
- break;
- }
- if (p.startsWith("-I"))
- candidate_ = candidate_.mid(2);
- return QFile::exists(QString::fromUtf8(candidate_));
- }
- };
-
- // First, search for an include path that contains the module name, then any path
- QByteArray candidate;
- auto it = std::find_if(m_includePaths.begin(), m_includePaths.end(),
- FindPredicate(candidate, module, FindPredicate::Module));
- if (it == m_includePaths.end())
- it = std::find_if(m_includePaths.begin(), m_includePaths.end(),
- FindPredicate(candidate, module, FindPredicate::Any));
- if (it != m_includePaths.end())
- header = candidate;
-
- // Find the path to module's private headers - currently unused
- it = std::find_if(m_includePaths.begin(), m_includePaths.end(),
- FindPredicate(candidate, module, FindPredicate::Private));
- if (it != m_includePaths.end())
- privateHeaderDir = candidate;
-
- if (header.isEmpty()) {
- qWarning() << "(qdoc) Could not find the module header in include paths for module"
- << module << " (include paths: " << m_includePaths << ")";
- qWarning() << " Artificial module header built from header dirs in qdocconf "
- "file";
- }
- m_args.push_back("-xc++");
- CXTranslationUnit tu;
- QString tmpHeader = m_pchFileDir->path() + "/" + module;
- QFile tmpHeaderFile(tmpHeader);
- if (tmpHeaderFile.open(QIODevice::Text | QIODevice::WriteOnly)) {
- QTextStream out(&tmpHeaderFile);
- if (header.isEmpty()) {
- for (auto it = m_allHeaders.constKeyValueBegin();
- it != m_allHeaders.constKeyValueEnd(); ++it) {
- if (!(*it).first.endsWith(QLatin1String("_p.h"))
- && !(*it).first.startsWith(QLatin1String("moc_"))) {
- QString line = QLatin1String("#include \"") + (*it).second
- + QLatin1String("/") + (*it).first + QLatin1String("\"");
- out << line << "\n";
- }
- }
- } else {
- QFile headerFile(header);
- if (!headerFile.open(QFile::ReadOnly)) {
- qWarning() << "Could not read module header file" << header;
- return;
- }
- QTextStream in(&headerFile);
- while (!in.atEnd()) {
- QString line = in.readLine().simplified();
- if (line.startsWith(QLatin1String("#include")))
- out << line << "\n";
- }
- }
- tmpHeaderFile.close();
- }
- if (m_printParsingErrors == 0)
- qCWarning(lcQdoc) << "clang not printing errors; include paths were guessed";
- CXErrorCode err =
- clang_parseTranslationUnit2(index_, tmpHeader.toLatin1().data(), m_args.data(),
- static_cast<int>(m_args.size()), nullptr, 0,
- flags_ | CXTranslationUnit_ForSerialization, &tu);
- qCDebug(lcQdoc) << __FUNCTION__ << "clang_parseTranslationUnit2(" << tmpHeader << m_args
- << ") returns" << err;
- if (!err && tu) {
- m_pchName = m_pchFileDir->path().toUtf8() + "/" + module + ".pch";
- auto error = clang_saveTranslationUnit(tu, m_pchName.constData(),
- clang_defaultSaveOptions(tu));
- if (error) {
- qCCritical(lcQdoc) << "Could not save PCH file for" << moduleHeader();
- m_pchName.clear();
- } else {
- // Visit the header now, as token from pre-compiled header won't be visited
- // later
- CXCursor cur = clang_getTranslationUnitCursor(tu);
- ClangVisitor visitor(qdb_, m_allHeaders);
- visitor.visitChildren(cur);
- qCDebug(lcQdoc) << "PCH built and visited for" << moduleHeader();
- }
- clang_disposeTranslationUnit(tu);
- } else {
- m_pchFileDir->remove();
- qCCritical(lcQdoc) << "Could not create PCH file for " << moduleHeader();
- }
- m_args.pop_back(); // remove the "-xc++";
- }
- }
-}
-
-/*!
- Precompile the header files for the current module.
- */
-void ClangCodeParser::precompileHeaders()
-{
- getDefaultArgs();
- if (getMoreArgs())
- m_printParsingErrors = 0;
- for (const auto &p : qAsConst(m_moreArgs))
- m_args.push_back(p.constData());
-
- flags_ = static_cast<CXTranslationUnit_Flags>(CXTranslationUnit_Incomplete
- | CXTranslationUnit_SkipFunctionBodies
- | CXTranslationUnit_KeepGoing);
- // 1 as 2nd parameter tells clang to report parser errors.
- index_ = clang_createIndex(1, m_printParsingErrors);
- buildPCH();
- clang_disposeIndex(index_);
-}
-
-static float getUnpatchedVersion(QString t)
-{
- if (t.count(QChar('.')) > 1)
- t.truncate(t.lastIndexOf(QChar('.')));
- return t.toFloat();
-}
-
-/*!
- Get ready to parse the C++ cpp file identified by \a filePath
- and add its parsed contents to the database. \a location is
- used for reporting errors.
-
- Call matchDocsAndStuff() to do all the parsing and tree building.
- */
-void ClangCodeParser::parseSourceFile(const Location & /*location*/, const QString &filePath)
-{
- /*
- The set of open namespaces is cleared before parsing
- each source file. The word "source" here means cpp file.
- */
- qdb_->clearOpenNamespaces();
- currentFile_ = filePath;
- flags_ = static_cast<CXTranslationUnit_Flags>(CXTranslationUnit_Incomplete
- | CXTranslationUnit_SkipFunctionBodies
- | CXTranslationUnit_KeepGoing);
- index_ = clang_createIndex(1, 0);
-
- getDefaultArgs();
- if (!m_pchName.isEmpty() && !filePath.endsWith(".mm")) {
- m_args.push_back("-w");
- m_args.push_back("-include-pch");
- m_args.push_back(m_pchName.constData());
- }
- getMoreArgs();
- for (const auto &p : qAsConst(m_moreArgs))
- m_args.push_back(p.constData());
-
- CXTranslationUnit tu;
- CXErrorCode err =
- clang_parseTranslationUnit2(index_, filePath.toLocal8Bit(), m_args.data(),
- static_cast<int>(m_args.size()), nullptr, 0, flags_, &tu);
- qCDebug(lcQdoc) << __FUNCTION__ << "clang_parseTranslationUnit2(" << filePath << m_args
- << ") returns" << err;
- if (err || !tu) {
- qWarning() << "(qdoc) Could not parse source file" << filePath << " error code:" << err;
- clang_disposeIndex(index_);
- return;
- }
-
- CXCursor tuCur = clang_getTranslationUnitCursor(tu);
- ClangVisitor visitor(qdb_, m_allHeaders);
- visitor.visitChildren(tuCur);
-
- CXToken *tokens;
- unsigned int numTokens = 0;
- const QSet<QString> &commands = topicCommands() + metaCommands();
- clang_tokenize(tu, clang_getCursorExtent(tuCur), &tokens, &numTokens);
-
- for (unsigned int i = 0; i < numTokens; ++i) {
- if (clang_getTokenKind(tokens[i]) != CXToken_Comment)
- continue;
- QString comment = fromCXString(clang_getTokenSpelling(tu, tokens[i]));
- if (!comment.startsWith("/*!"))
- continue;
-
- auto commentLoc = clang_getTokenLocation(tu, tokens[i]);
- auto loc = fromCXSourceLocation(commentLoc);
- auto end_loc = fromCXSourceLocation(clang_getRangeEnd(clang_getTokenExtent(tu, tokens[i])));
- Doc::trimCStyleComment(loc, comment);
-
- // Doc constructor parses the comment.
- Doc doc(loc, end_loc, comment, commands, topicCommands());
- if (hasTooManyTopics(doc))
- continue;
-
- DocList docs;
- QString topic;
- NodeList nodes;
- const TopicList &topics = doc.topicsUsed();
- if (!topics.isEmpty())
- topic = topics[0].topic;
-
- if (topic.isEmpty()) {
- Node *n = nullptr;
- if (i + 1 < numTokens) {
- // Try to find the next declaration.
- CXSourceLocation nextCommentLoc = commentLoc;
- while (i + 2 < numTokens && clang_getTokenKind(tokens[i + 1]) != CXToken_Comment)
- ++i; // already skip all the tokens that are not comments
- nextCommentLoc = clang_getTokenLocation(tu, tokens[i + 1]);
- n = visitor.nodeForCommentAtLocation(commentLoc, nextCommentLoc);
- }
-
- if (n) {
- nodes.append(n);
- docs.append(doc);
- } else if (CodeParser::isWorthWarningAbout(doc)) {
- bool future = false;
- if (doc.metaCommandsUsed().contains(COMMAND_SINCE)) {
- QString sinceVersion = doc.metaCommandArgs(COMMAND_SINCE)[0].first;
- if (getUnpatchedVersion(sinceVersion) > getUnpatchedVersion(m_version))
- future = true;
- }
- if (!future) {
- doc.location().warning(
- QStringLiteral("Cannot tie this documentation to anything"),
- QStringLiteral("qdoc found a /*! ... */ comment, but there was no "
- "topic command (e.g., '\\%1', '\\%2') in the "
- "comment and no function definition following "
- "the comment.")
- .arg(COMMAND_FN)
- .arg(COMMAND_PAGE));
- }
- }
- } else {
- // Store the namespace scope from lexical parents of the comment
- m_namespaceScope.clear();
- CXCursor cur = clang_getCursor(tu, commentLoc);
- while (true) {
- CXCursorKind kind = clang_getCursorKind(cur);
- if (clang_isTranslationUnit(kind) || clang_isInvalid(kind))
- break;
- if (kind == CXCursor_Namespace)
- m_namespaceScope << fromCXString(clang_getCursorSpelling(cur));
- cur = clang_getCursorLexicalParent(cur);
- }
- processTopicArgs(doc, topic, nodes, docs);
- }
- processMetaCommands(nodes, docs);
- }
-
- clang_disposeTokens(tu, tokens, numTokens);
- clang_disposeTranslationUnit(tu);
- clang_disposeIndex(index_);
- m_namespaceScope.clear();
- s_fn.clear();
-}
-
-/*!
- Use clang to parse the function signature from a function
- command. \a location is used for reporting errors. \a fnArg
- is the string to parse. It is always a function decl.
- */
-Node *ClangCodeParser::parseFnArg(const Location &location, const QString &fnArg)
-{
- Node *fnNode = nullptr;
- /*
- If the \fn command begins with a tag, then don't try to
- parse the \fn command with clang. Use the tag to search
- for the correct function node. It is an error if it can
- not be found. Return 0 in that case.
- */
- if (fnArg.startsWith('[')) {
- int end = fnArg.indexOf(QChar(']', 0));
- if (end > 1) {
- QString tag = fnArg.left(end + 1);
- fnNode = qdb_->findFunctionNodeForTag(tag);
- if (!fnNode) {
- location.error(
- QStringLiteral("tag \\fn %1 not used in any include file in current module")
- .arg(tag));
- } else {
- /*
- The function node was found. Use the formal
- parameter names from the \FN command, because
- they will be the names used in the documentation.
- */
- FunctionNode *fn = static_cast<FunctionNode *>(fnNode);
- QStringList leftParenSplit = fnArg.split('(');
- if (leftParenSplit.size() > 1) {
- QStringList rightParenSplit = leftParenSplit[1].split(')');
- if (rightParenSplit.size() > 0) {
- QString params = rightParenSplit[0];
- if (!params.isEmpty()) {
- QStringList commaSplit = params.split(',');
- Parameters &parameters = fn->parameters();
- if (parameters.count() == commaSplit.size()) {
- for (int i = 0; i < parameters.count(); ++i) {
- QStringList blankSplit = commaSplit[i].split(' ');
- if (blankSplit.size() > 0) {
- QString pName = blankSplit.last();
- int j = 0;
- while (j < pName.length() && !pName.at(j).isLetter())
- ++j;
- if (j > 0)
- pName = pName.mid(j);
- if (!pName.isEmpty() && pName != parameters[i].name())
- parameters[i].setName(pName);
- }
- }
- }
- }
- }
- }
- }
- }
- return fnNode;
- }
- CXTranslationUnit_Flags flags = static_cast<CXTranslationUnit_Flags>(
- CXTranslationUnit_Incomplete | CXTranslationUnit_SkipFunctionBodies
- | CXTranslationUnit_KeepGoing);
- // Change 2nd parameter to 1 to make clang report errors.
- CXIndex index = clang_createIndex(1, Utilities::debugging() ? 1 : 0);
-
- std::vector<const char *> args(std::begin(defaultArgs_), std::end(defaultArgs_));
- // Add the defines from the qdocconf file.
- for (const auto &p : qAsConst(m_defines))
- args.push_back(p.constData());
- if (!m_pchName.isEmpty()) {
- args.push_back("-w");
- args.push_back("-include-pch");
- args.push_back(m_pchName.constData());
- }
- CXTranslationUnit tu;
- s_fn.clear();
- for (const auto &ns : qAsConst(m_namespaceScope))
- s_fn.prepend("namespace " + ns.toUtf8() + " {");
- s_fn += fnArg.toUtf8();
- if (!s_fn.endsWith(";"))
- s_fn += "{ }";
- s_fn.append(m_namespaceScope.size(), '}');
-
- const char *dummyFileName = fnDummyFileName;
- CXUnsavedFile unsavedFile { dummyFileName, s_fn.constData(),
- static_cast<unsigned long>(s_fn.size()) };
- CXErrorCode err = clang_parseTranslationUnit2(index, dummyFileName, args.data(), args.size(),
- &unsavedFile, 1, flags, &tu);
- qCDebug(lcQdoc) << __FUNCTION__ << "clang_parseTranslationUnit2(" << dummyFileName << args
- << ") returns" << err;
- if (err || !tu) {
- location.error(QStringLiteral("clang could not parse \\fn %1").arg(fnArg));
- clang_disposeTranslationUnit(tu);
- clang_disposeIndex(index);
- return fnNode;
- } else {
- /*
- Always visit the tu if one is constructed, because
- it might be possible to find the correct node, even
- if clang detected diagnostics. Only bother to report
- the diagnostics if they stop us finding the node.
- */
- CXCursor cur = clang_getTranslationUnitCursor(tu);
- ClangVisitor visitor(qdb_, m_allHeaders);
- bool ignoreSignature = false;
- visitor.visitFnArg(cur, &fnNode, ignoreSignature);
- /*
- If the visitor couldn't find a FunctionNode for the
- signature, then print the clang diagnostics if there
- were any.
- */
- if (fnNode == nullptr) {
- unsigned diagnosticCount = clang_getNumDiagnostics(tu);
- const auto &config = Config::instance();
- if (diagnosticCount > 0 && (!config.preparing() || config.singleExec())) {
- bool report = true;
- QStringList signature = fnArg.split(QChar('('));
- if (signature.size() > 1) {
- QStringList qualifiedName = signature.at(0).split(QChar(' '));
- qualifiedName = qualifiedName.last().split(QLatin1String("::"));
- if (qualifiedName.size() > 1) {
- QString qualifier = qualifiedName.at(0);
- int i = 0;
- while (qualifier.size() > i && !qualifier.at(i).isLetter())
- qualifier[i++] = QChar(' ');
- if (i > 0)
- qualifier = qualifier.simplified();
- ClassNode *cn = qdb_->findClassNode(QStringList(qualifier));
- if (cn && cn->isInternal())
- report = false;
- }
- }
- if (report) {
- location.warning(
- QStringLiteral("clang found diagnostics parsing \\fn %1").arg(fnArg));
- for (unsigned i = 0; i < diagnosticCount; ++i) {
- CXDiagnostic diagnostic = clang_getDiagnostic(tu, i);
- location.report(QStringLiteral(" %1").arg(
- fromCXString(clang_formatDiagnostic(diagnostic, 0))));
- }
- }
- }
- }
- }
- clang_disposeTranslationUnit(tu);
- clang_disposeIndex(index);
- return fnNode;
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/clangcodeparser.h b/src/qdoc/clangcodeparser.h
deleted file mode 100644
index e34adb026..000000000
--- a/src/qdoc/clangcodeparser.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef CLANGCODEPARSER_H
-#define CLANGCODEPARSER_H
-
-#include "cppcodeparser.h"
-
-#include <QtCore/qtemporarydir.h>
-
-QT_BEGIN_NAMESPACE
-
-class ClangCodeParser : public CppCodeParser
-{
-public:
- ~ClangCodeParser() override;
-
- void initializeParser() override;
- void terminateParser() override;
- QString language() override;
- QStringList headerFileNameFilter() override;
- QStringList sourceFileNameFilter() override;
- void parseHeaderFile(const Location &location, const QString &filePath) override;
- void parseSourceFile(const Location &location, const QString &filePath) override;
- void precompileHeaders() override;
- Node *parseFnArg(const Location &location, const QString &fnArg) override;
- static const QByteArray &fn() { return s_fn; }
-
-private:
- void getDefaultArgs();
- bool getMoreArgs();
- void buildPCH();
-
-private:
- int m_printParsingErrors {};
- QString m_version {};
- QHash<QString, QString> m_allHeaders {}; // file name->path
- QList<QByteArray> m_includePaths {};
- QScopedPointer<QTemporaryDir> m_pchFileDir {};
- QByteArray m_pchName {};
- QList<QByteArray> m_defines {};
- std::vector<const char *> m_args {};
- QList<QByteArray> m_moreArgs {};
- QStringList m_namespaceScope {};
- static QByteArray s_fn;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/classnode.cpp b/src/qdoc/classnode.cpp
deleted file mode 100644
index 28d733a72..000000000
--- a/src/qdoc/classnode.cpp
+++ /dev/null
@@ -1,328 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "classnode.h"
-
-#include "functionnode.h"
-#include "propertynode.h"
-#include "qdocdatabase.h"
-#include "qmltypenode.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class ClassNode
- \brief The ClassNode represents a C++ class.
-
- It is also used to represent a C++ struct or union. There are some
- actual uses for structs, but I don't think any unions have been
- documented yet.
- */
-
-/*!
- Adds the base class \a node to this class's list of base
- classes. The base class has the specified \a access. This
- is a resolved base class.
- */
-void ClassNode::addResolvedBaseClass(Access access, ClassNode *node)
-{
- m_bases.append(RelatedClass(access, node));
- node->m_derived.append(RelatedClass(access, this));
-}
-
-/*!
- Adds the derived class \a node to this class's list of derived
- classes. The derived class inherits this class with \a access.
- */
-void ClassNode::addDerivedClass(Access access, ClassNode *node)
-{
- m_derived.append(RelatedClass(access, node));
-}
-
-/*!
- Add an unresolved base class to this class node's list of
- base classes. The unresolved base class will be resolved
- before the generate phase of qdoc. In an unresolved base
- class, the pointer to the base class node is 0.
- */
-void ClassNode::addUnresolvedBaseClass(Access access, const QStringList &path,
- const QString &signature)
-{
- m_bases.append(RelatedClass(access, path, signature));
-}
-
-/*!
- Add an unresolved \c using clause to this class node's list
- of \c using clauses. The unresolved \c using clause will be
- resolved before the generate phase of qdoc. In an unresolved
- \c using clause, the pointer to the function node is 0.
- */
-void ClassNode::addUnresolvedUsingClause(const QString &signature)
-{
- m_usingClauses.append(UsingClause(signature));
-}
-
-/*!
- Search the child list to find the property node with the
- specified \a name.
- */
-PropertyNode *ClassNode::findPropertyNode(const QString &name)
-{
- Node *n = findNonfunctionChild(name, &Node::isProperty);
-
- if (n)
- return static_cast<PropertyNode *>(n);
-
- PropertyNode *pn = nullptr;
-
- const QList<RelatedClass> &bases = baseClasses();
- if (!bases.isEmpty()) {
- for (int i = 0; i < bases.size(); ++i) {
- ClassNode *cn = bases[i].m_node;
- if (cn) {
- pn = cn->findPropertyNode(name);
- if (pn)
- break;
- }
- }
- }
- const QList<RelatedClass> &ignoredBases = ignoredBaseClasses();
- if (!ignoredBases.isEmpty()) {
- for (int i = 0; i < ignoredBases.size(); ++i) {
- ClassNode *cn = ignoredBases[i].m_node;
- if (cn) {
- pn = cn->findPropertyNode(name);
- if (pn)
- break;
- }
- }
- }
-
- return pn;
-}
-
-/*!
- 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 (int i = 0; i < bases.size(); ++i) {
- ClassNode *cn = bases[i].m_node;
- if (cn && cn->qmlElement()) {
- return cn->qmlElement();
- }
- }
- for (int i = 0; i < bases.size(); ++i) {
- ClassNode *cn = bases[i].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
- class's base classes. Return a pointer to the overridden
- function or return 0.
-
- This should be revised because clang provides the path to the
- overridden function. mws 15/12/2018
- */
-FunctionNode *ClassNode::findOverriddenFunction(const FunctionNode *fn)
-{
- for (auto &bc : m_bases) {
- ClassNode *cn = bc.m_node;
- if (cn == nullptr) {
- cn = QDocDatabase::qdocDB()->findClassNode(bc.m_path);
- bc.m_node = cn;
- }
- if (cn != nullptr) {
- FunctionNode *result = cn->findFunctionChild(fn);
- if (result != nullptr && !result->isInternal() && !result->isNonvirtual()
- && result->hasDoc())
- return result;
- result = cn->findOverriddenFunction(fn);
- if (result != nullptr && !result->isNonvirtual())
- return result;
- }
- }
- return nullptr;
-}
-
-/*!
- \a fn is an overriding function in this class or in a class
- derived from this class. Find the node for the property that
- \a fn overrides in this class's children or in one of this
- class's base classes. Return a pointer to the overridden
- property or return 0.
- */
-PropertyNode *ClassNode::findOverriddenProperty(const FunctionNode *fn)
-{
- for (auto &baseClass : m_bases) {
- ClassNode *cn = baseClass.m_node;
- if (cn == nullptr) {
- cn = QDocDatabase::qdocDB()->findClassNode(baseClass.m_path);
- baseClass.m_node = cn;
- }
- if (cn != nullptr) {
- const NodeList &children = cn->childNodes();
- for (const auto &child : children) {
- if (child->isProperty()) {
- auto *pn = static_cast<PropertyNode *>(child);
- if (pn->name() == fn->name() || pn->hasAccessFunction(fn->name())) {
- if (pn->hasDoc())
- return pn;
- }
- }
- }
- PropertyNode *result = cn->findOverriddenProperty(fn);
- if (result != nullptr)
- return result;
- }
- }
- return nullptr;
-}
-
-/*!
- Returns true if the class or struct represented by this class
- node must be documented. If this function returns true, then
- qdoc must find a qdoc comment for this class. If it returns
- false, then the class need not be documented.
- */
-bool ClassNode::docMustBeGenerated() const
-{
- if (!hasDoc() || isPrivate() || isInternal() || isDontDocument())
- return false;
- if (declLocation().fileName().endsWith(QLatin1String("_p.h")) && !hasDoc())
- return false;
-
- return true;
-}
-
-/*!
- A base class of this class node was private or internal.
- That node's list of \a bases is traversed in this function.
- Each of its public base classes is promoted to be a base
- class of this node for documentation purposes. For each
- private or internal class node in \a bases, this function
- is called recursively with the list of base classes from
- that private or internal class node.
- */
-void ClassNode::promotePublicBases(const QList<RelatedClass> &bases)
-{
- if (!bases.isEmpty()) {
- for (int i = bases.size() - 1; i >= 0; --i) {
- ClassNode *bc = bases.at(i).m_node;
- if (bc == nullptr)
- bc = QDocDatabase::qdocDB()->findClassNode(bases.at(i).m_path);
- if (bc != nullptr) {
- if (bc->isPrivate() || bc->isInternal())
- promotePublicBases(bc->baseClasses());
- else
- m_bases.append(bases.at(i));
- }
- }
- }
-}
-
-/*!
- Remove private and internal bases classes from this class's list
- of base classes. When a base class is removed from the list, add
- its base classes to this class's list of base classes.
- */
-void ClassNode::removePrivateAndInternalBases()
-{
- int i;
- i = 0;
- QSet<ClassNode *> found;
-
- // Remove private and duplicate base classes.
- while (i < m_bases.size()) {
- ClassNode *bc = m_bases.at(i).m_node;
- if (bc == nullptr)
- bc = QDocDatabase::qdocDB()->findClassNode(m_bases.at(i).m_path);
- if (bc != nullptr
- && (bc->isPrivate() || bc->isInternal() || bc->isDontDocument()
- || found.contains(bc))) {
- RelatedClass rc = m_bases.at(i);
- m_bases.removeAt(i);
- m_ignoredBases.append(rc);
- promotePublicBases(bc->baseClasses());
- } else {
- ++i;
- }
- found.insert(bc);
- }
-
- i = 0;
- while (i < m_derived.size()) {
- ClassNode *dc = m_derived.at(i).m_node;
- if (dc != nullptr && (dc->isPrivate() || dc->isInternal() || dc->isDontDocument())) {
- m_derived.removeAt(i);
- const QList<RelatedClass> &dd = dc->derivedClasses();
- for (int j = dd.size() - 1; j >= 0; --j)
- m_derived.insert(i, dd.at(j));
- } else {
- ++i;
- }
- }
-}
-
-/*!
- */
-void ClassNode::resolvePropertyOverriddenFromPtrs(PropertyNode *pn)
-{
- for (const auto &baseClass : qAsConst(baseClasses())) {
- ClassNode *cn = baseClass.m_node;
- if (cn) {
- Node *n = cn->findNonfunctionChild(pn->name(), &Node::isProperty);
- if (n) {
- auto *baseProperty = static_cast<PropertyNode *>(n);
- cn->resolvePropertyOverriddenFromPtrs(baseProperty);
- pn->setOverriddenFrom(baseProperty);
- } else
- cn->resolvePropertyOverriddenFromPtrs(pn);
- }
- }
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/classnode.h b/src/qdoc/classnode.h
deleted file mode 100644
index c6bdc65c1..000000000
--- a/src/qdoc/classnode.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef CLASSNODE_H
-#define CLASSNODE_H
-
-#include "aggregate.h"
-#include "relatedclass.h"
-#include "usingclause.h"
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qlist.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-class FunctionNode;
-class PropertyNode;
-class QmlTypeNode;
-
-class ClassNode : public Aggregate
-{
-public:
- ClassNode(NodeType type, Aggregate *parent, const QString &name) : Aggregate(type, parent, name)
- {
- }
- bool isFirstClassAggregate() const override { return true; }
- bool isClassNode() const override { return true; }
- bool isRelatableType() const override { return true; }
- bool isWrapper() const override { return m_wrapper; }
- QString obsoleteLink() const override { return m_obsoleteLink; }
- void setObsoleteLink(const QString &t) override { m_obsoleteLink = t; }
- void setWrapper() override { m_wrapper = true; }
-
- void addResolvedBaseClass(Access access, ClassNode *node);
- void addDerivedClass(Access access, ClassNode *node);
- void addUnresolvedBaseClass(Access access, const QStringList &path, const QString &signature);
- void addUnresolvedUsingClause(const QString &signature);
- void removePrivateAndInternalBases();
- void resolvePropertyOverriddenFromPtrs(PropertyNode *pn);
-
- QList<RelatedClass> &baseClasses() { return m_bases; }
- QList<RelatedClass> &derivedClasses() { return m_derived; }
- QList<RelatedClass> &ignoredBaseClasses() { return m_ignoredBases; }
- QList<UsingClause> &usingClauses() { return m_usingClauses; }
-
- const QList<RelatedClass> &baseClasses() const { return m_bases; }
- const QList<RelatedClass> &derivedClasses() const { return m_derived; }
- const QList<RelatedClass> &ignoredBaseClasses() const { return m_ignoredBases; }
- const QList<UsingClause> &usingClauses() const { return m_usingClauses; }
-
- QmlTypeNode *qmlElement() { return m_qmlElement; }
- void setQmlElement(QmlTypeNode *qcn) { m_qmlElement = qcn; }
- 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);
- bool docMustBeGenerated() const override;
-
-private:
- void promotePublicBases(const QList<RelatedClass> &bases);
-
-private:
- QList<RelatedClass> m_bases {};
- QList<RelatedClass> m_derived {};
- QList<RelatedClass> m_ignoredBases {};
- QList<UsingClause> m_usingClauses {};
- bool m_abstract { false };
- bool m_wrapper { false };
- QString m_obsoleteLink {};
- QmlTypeNode *m_qmlElement { nullptr };
-};
-
-QT_END_NAMESPACE
-
-#endif // CLASSNODE_H
diff --git a/src/qdoc/codechunk.cpp b/src/qdoc/codechunk.cpp
deleted file mode 100644
index b562aa937..000000000
--- a/src/qdoc/codechunk.cpp
+++ /dev/null
@@ -1,135 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- codechunk.cpp
-*/
-
-#include "codechunk.h"
-
-#include <QtCore/qstringlist.h>
-
-QT_BEGIN_NAMESPACE
-
-enum { Other, Alnum, Gizmo, Comma, LBrace, RBrace, RAngle, Colon, Paren };
-
-// entries 128 and above are Other
-static const int charCategory[256] = { Other, Other, Other, Other, Other, Other, Other, Other,
- Other, Other, Other, Other, Other, Other, Other, Other,
- Other, Other, Other, Other, Other, Other, Other, Other,
- Other, Other, Other, Other, Other, Other, Other, Other,
- // ! " # $ % & '
- Other, Other, Other, Other, Other, Gizmo, Gizmo, Other,
- // ( ) * + , - . /
- Paren, Paren, Gizmo, Gizmo, Comma, Other, Other, Gizmo,
- // 0 1 2 3 4 5 6 7
- Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum,
- // 8 9 : ; < = > ?
- Alnum, Alnum, Colon, Other, Other, Gizmo, RAngle, Gizmo,
- // @ A B C D E F G
- Other, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum,
- // H I J K L M N O
- Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum,
- // P Q R S T U V W
- Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum,
- // X Y Z [ \ ] ^ _
- Alnum, Alnum, Alnum, Other, Other, Other, Gizmo, Alnum,
- // ` a b c d e f g
- Other, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum,
- // h i j k l m n o
- Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum,
- // p q r s t u v w
- Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum,
- // x y z { | } ~
- Alnum, Alnum, Alnum, LBrace, Gizmo, RBrace, Other, Other };
-
-static const bool needSpace[9][9] = {
- /* [ a + , { } > : ) */
- /* [ */ { false, false, false, false, false, true, false, false, false },
- /* a */ { false, true, true, false, false, true, false, false, false },
- /* + */ { false, true, false, false, false, true, false, true, false },
- /* , */ { true, true, true, true, true, true, true, true, false },
- /* { */ { false, false, false, false, false, false, false, false, false },
- /* } */ { false, false, false, false, false, false, false, false, false },
- /* > */ { true, true, true, false, true, true, true, false, false },
- /* : */ { false, false, true, true, true, true, true, false, false },
- /* ( */ { false, false, false, false, false, false, false, false, false },
-};
-
-static int category(QChar ch)
-{
- return charCategory[static_cast<int>(ch.toLatin1())];
-}
-
-/*!
- \class CodeChunk
-
- \brief The CodeChunk class represents a tiny piece of C++ code.
-
- \note I think this class should be eliminated (mws 11/12/2018
-
- The class provides conversion between a list of lexemes and a string. It adds
- spaces at the right place for consistent style. The tiny pieces of code it
- represents are data types, enum values, and default parameter values.
-
- Apart from the piece of code itself, there are two bits of metainformation
- stored in CodeChunk: the base and the hotspot. The base is the part of the
- piece that may be a hypertext link. The base of
-
- QMap<QString, QString>
-
- is QMap.
-
- The hotspot is the place the variable name should be inserted in the case of a
- variable (or parameter) declaration. The hotspot of
-
- char * []
-
- is between '*' and '[]'.
-*/
-
-/*!
- Appends \a lexeme to the current string contents, inserting
- a space if appropriate.
- */
-void CodeChunk::append(const QString &lexeme)
-{
- if (!s.isEmpty() && !lexeme.isEmpty()) {
- /*
- Should there be a space or not between the code chunk so far and the
- new lexeme?
- */
- int cat1 = category(s.at(s.size() - 1));
- int cat2 = category(lexeme[0]);
- if (needSpace[cat1][cat2])
- s += QLatin1Char(' ');
- }
- s += lexeme;
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/codechunk.h b/src/qdoc/codechunk.h
deleted file mode 100644
index 43d258c8f..000000000
--- a/src/qdoc/codechunk.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- codechunk.h
-*/
-
-#ifndef CODECHUNK_H
-#define CODECHUNK_H
-
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-// ### get rid of that class
-
-class CodeChunk
-{
-public:
- CodeChunk() : hotspot(-1) {}
-
- void append(const QString &lexeme);
- void appendHotspot()
- {
- if (hotspot == -1)
- hotspot = s.length();
- }
-
- bool isEmpty() const { return s.isEmpty(); }
- void clear() { s.clear(); }
- QString toString() const { return s; }
- QString left() const { return s.left(hotspot == -1 ? s.length() : hotspot); }
- QString right() const { return s.mid(hotspot == -1 ? s.length() : hotspot); }
-
-private:
- QString s;
- int hotspot;
-};
-
-inline bool operator==(const CodeChunk &c, const CodeChunk &d)
-{
- return c.toString() == d.toString();
-}
-
-inline bool operator!=(const CodeChunk &c, const CodeChunk &d)
-{
- return !(c == d);
-}
-
-inline bool operator<(const CodeChunk &c, const CodeChunk &d)
-{
- return c.toString() < d.toString();
-}
-
-inline bool operator>(const CodeChunk &c, const CodeChunk &d)
-{
- return d < c;
-}
-
-inline bool operator<=(const CodeChunk &c, const CodeChunk &d)
-{
- return !(c > d);
-}
-
-inline bool operator>=(const CodeChunk &c, const CodeChunk &d)
-{
- return !(c < d);
-}
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/codemarker.cpp b/src/qdoc/codemarker.cpp
deleted file mode 100644
index 546ab3296..000000000
--- a/src/qdoc/codemarker.cpp
+++ /dev/null
@@ -1,420 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "codemarker.h"
-
-#include "classnode.h"
-#include "config.h"
-#include "functionnode.h"
-#include "node.h"
-#include "propertynode.h"
-
-#include <QtCore/qobjectdefs.h>
-
-QT_BEGIN_NAMESPACE
-
-QString CodeMarker::defaultLang;
-QList<CodeMarker *> CodeMarker::markers;
-
-/*!
- When a code marker constructs itself, it puts itself into
- the static list of code markers. All the code markers in
- the static list get initialized in initialize(), which is
- not called until after the qdoc configuration file has
- been read.
- */
-CodeMarker::CodeMarker()
-{
- markers.prepend(this);
-}
-
-/*!
- When a code marker destroys itself, it removes itself from
- the static list of code markers.
- */
-CodeMarker::~CodeMarker()
-{
- markers.removeAll(this);
-}
-
-/*!
- A code market performs no initialization by default. Marker-specific
- initialization is performed in subclasses.
- */
-void CodeMarker::initializeMarker() {}
-
-/*!
- Terminating a code marker is trivial.
- */
-void CodeMarker::terminateMarker()
-{
- // nothing.
-}
-
-/*!
- All the code markers in the static list are initialized
- here, after the qdoc configuration file has been loaded.
- */
-void CodeMarker::initialize()
-{
- defaultLang = Config::instance().getString(CONFIG_LANGUAGE);
- for (const auto &marker : qAsConst(markers))
- marker->initializeMarker();
-}
-
-/*!
- All the code markers in the static list are terminated here.
- */
-void CodeMarker::terminate()
-{
- for (const auto &marker : qAsConst(markers))
- marker->terminateMarker();
-}
-
-CodeMarker *CodeMarker::markerForCode(const QString &code)
-{
- CodeMarker *defaultMarker = markerForLanguage(defaultLang);
- if (defaultMarker != nullptr && defaultMarker->recognizeCode(code))
- return defaultMarker;
-
- for (const auto &marker : qAsConst(markers)) {
- if (marker->recognizeCode(code))
- return marker;
- }
-
- return defaultMarker;
-}
-
-CodeMarker *CodeMarker::markerForFileName(const QString &fileName)
-{
- CodeMarker *defaultMarker = markerForLanguage(defaultLang);
- int dot = -1;
- while ((dot = fileName.lastIndexOf(QLatin1Char('.'), dot)) != -1) {
- QString ext = fileName.mid(dot + 1);
- if (defaultMarker != nullptr && defaultMarker->recognizeExtension(ext))
- return defaultMarker;
- for (const auto &marker : qAsConst(markers)) {
- if (marker->recognizeExtension(ext))
- return marker;
- }
- --dot;
- }
- return defaultMarker;
-}
-
-CodeMarker *CodeMarker::markerForLanguage(const QString &lang)
-{
- for (const auto &marker : qAsConst(markers)) {
- if (marker->recognizeLanguage(lang))
- return marker;
- }
- return nullptr;
-}
-
-const Node *CodeMarker::nodeForString(const QString &string)
-{
-#if QT_POINTER_SIZE == 4
- const quintptr n = string.toUInt();
-#else
- const quintptr n = string.toULongLong();
-#endif
- return reinterpret_cast<const Node *>(n);
-}
-
-QString CodeMarker::stringForNode(const Node *node)
-{
- return QString::number(reinterpret_cast<quintptr>(node));
-}
-
-/*!
- Returns the 'extra' synopsis string for \a node with status information,
- using a specified section \a style.
-*/
-QString CodeMarker::extraSynopsis(const Node *node, Section::Style style)
-{
- QStringList extra;
- if (style == Section::Details) {
- switch (node->nodeType()) {
- case Node::Function: {
- const auto *func = static_cast<const FunctionNode *>(node);
- if (func->isStatic()) {
- extra << "static";
- } else if (!func->isNonvirtual()) {
- if (func->isFinal())
- extra << "final";
- if (func->isOverride())
- extra << "override";
- if (func->isPureVirtual())
- extra << "pure";
- extra << "virtual";
- }
-
- if (func->access() == Access::Protected)
- extra << "protected";
- else if (func->access() == Access::Private)
- extra << "private";
-
- if (func->isSignal())
- extra << "signal";
- else if (func->isSlot())
- extra << "slot";
- }
- break;
- case Node::TypeAlias:
- extra << "alias";
- break;
- case Node::Property: {
- auto propertyNode = static_cast<const PropertyNode *>(node);
- if (propertyNode->propertyType() == PropertyNode::Bindable)
- extra << "bindable";
- if (!propertyNode->isWritable())
- extra << "read-only";
- }
- break;
- default:
- break;
- }
- } else if (style == Section::Summary) {
- if (node->isPreliminary())
- extra << "preliminary";
- else if (node->isDeprecated())
- extra << "deprecated";
- else if (node->isObsolete())
- extra << "obsolete";
- }
-
- if (style == Section::Details && !node->since().isEmpty()) {
- if (!extra.isEmpty())
- extra.last() += QLatin1Char(',');
- extra << "since" << node->since();
- }
-
- QString extraStr = extra.join(QLatin1Char(' '));
- if (!extraStr.isEmpty()) {
- extraStr.prepend(style == Section::Details ? '[' : '(');
- extraStr.append(style == Section::Details ? ']' : ')');
- extraStr.append(' ');
- }
-
- return extraStr;
-}
-
-static const QString samp = QLatin1String("&amp;");
-static const QString slt = QLatin1String("&lt;");
-static const QString sgt = QLatin1String("&gt;");
-static const QString squot = QLatin1String("&quot;");
-
-QString CodeMarker::protect(const QString &str)
-{
- int n = str.length();
- QString marked;
- marked.reserve(n * 2 + 30);
- const QChar *data = str.constData();
- for (int i = 0; i != n; ++i) {
- switch (data[i].unicode()) {
- case '&':
- marked += samp;
- break;
- case '<':
- marked += slt;
- break;
- case '>':
- marked += sgt;
- break;
- case '"':
- marked += squot;
- break;
- default:
- marked += data[i];
- }
- }
- return marked;
-}
-
-void CodeMarker::appendProtectedString(QString *output, QStringView str)
-{
- int n = str.length();
- output->reserve(output->size() + n * 2 + 30);
- const QChar *data = str.constData();
- for (int i = 0; i != n; ++i) {
- switch (data[i].unicode()) {
- case '&':
- *output += samp;
- break;
- case '<':
- *output += slt;
- break;
- case '>':
- *output += sgt;
- break;
- case '"':
- *output += squot;
- break;
- default:
- *output += data[i];
- }
- }
-}
-
-QString CodeMarker::typified(const QString &string, bool trailingSpace)
-{
- QString result;
- QString pendingWord;
-
- for (int i = 0; i <= string.size(); ++i) {
- QChar ch;
- if (i != string.size())
- ch = string.at(i);
-
- QChar lower = ch.toLower();
- if ((lower >= QLatin1Char('a') && lower <= QLatin1Char('z')) || ch.digitValue() >= 0
- || ch == QLatin1Char('_') || ch == QLatin1Char(':')) {
- pendingWord += ch;
- } else {
- if (!pendingWord.isEmpty()) {
- bool isProbablyType = (pendingWord != QLatin1String("const"));
- if (isProbablyType)
- result += QLatin1String("<@type>");
- result += pendingWord;
- if (isProbablyType)
- result += QLatin1String("</@type>");
- }
- pendingWord.clear();
-
- switch (ch.unicode()) {
- case '\0':
- break;
- case '&':
- result += QLatin1String("&amp;");
- break;
- case '<':
- result += QLatin1String("&lt;");
- break;
- case '>':
- result += QLatin1String("&gt;");
- break;
- default:
- result += ch;
- }
- }
- }
- if (trailingSpace && string.size()) {
- if (!string.endsWith(QLatin1Char('*')) && !string.endsWith(QLatin1Char('&')))
- result += QLatin1Char(' ');
- }
- return result;
-}
-
-QString CodeMarker::taggedNode(const Node *node)
-{
- QString tag;
- QString name = node->name();
-
- switch (node->nodeType()) {
- case Node::Namespace:
- tag = QLatin1String("@namespace");
- break;
- case Node::Class:
- case Node::Struct:
- case Node::Union:
- tag = QLatin1String("@class");
- break;
- case Node::Enum:
- tag = QLatin1String("@enum");
- break;
- case Node::Typedef:
- tag = QLatin1String("@typedef");
- break;
- case Node::Function:
- tag = QLatin1String("@function");
- break;
- case Node::Property:
- tag = QLatin1String("@property");
- break;
- case Node::QmlType:
- /*
- Remove the "QML:" prefix, if present.
- There shouldn't be any of these "QML:"
- prefixes in the documentation sources
- after the switch to using QML module
- qualifiers, but this code is kept to
- be backward compatible.
- */
- if (node->name().startsWith(QLatin1String("QML:")))
- name = name.mid(4);
- tag = QLatin1String("@property");
- break;
- case Node::Page:
- tag = QLatin1String("@property");
- break;
- default:
- tag = QLatin1String("@unknown");
- break;
- }
- return (QLatin1Char('<') + tag + QLatin1Char('>') + protect(name) + QLatin1String("</") + tag
- + QLatin1Char('>'));
-}
-
-QString CodeMarker::taggedQmlNode(const Node *node)
-{
- QString tag;
- if (node->isFunction()) {
- const FunctionNode *fn = static_cast<const FunctionNode *>(node);
- switch (fn->metaness()) {
- case FunctionNode::JsSignal:
- case FunctionNode::QmlSignal:
- tag = QLatin1String("@signal");
- break;
- case FunctionNode::JsSignalHandler:
- case FunctionNode::QmlSignalHandler:
- tag = QLatin1String("@signalhandler");
- break;
- case FunctionNode::JsMethod:
- case FunctionNode::QmlMethod:
- tag = QLatin1String("@method");
- break;
- default:
- tag = QLatin1String("@unknown");
- break;
- }
- } else if (node->isQmlProperty() || node->isJsProperty()) {
- tag = QLatin1String("@property");
- } else {
- tag = QLatin1String("@unknown");
- }
- return QLatin1Char('<') + tag + QLatin1Char('>') + protect(node->name()) + QLatin1String("</")
- + tag + QLatin1Char('>');
-}
-
-QString CodeMarker::linkTag(const Node *node, const QString &body)
-{
- return QLatin1String("<@link node=\"") + stringForNode(node) + QLatin1String("\">") + body
- + QLatin1String("</@link>");
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/codemarker.h b/src/qdoc/codemarker.h
deleted file mode 100644
index 73fdadbbd..000000000
--- a/src/qdoc/codemarker.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef CODEMARKER_H
-#define CODEMARKER_H
-
-#include "atom.h"
-#include "sections.h"
-
-QT_BEGIN_NAMESPACE
-
-class CodeMarker
-{
-public:
- CodeMarker();
- virtual ~CodeMarker();
-
- virtual void initializeMarker();
- virtual void terminateMarker();
- virtual bool recognizeCode(const QString & /*code*/) { return true; }
- virtual bool recognizeExtension(const QString & /*extension*/) { return true; }
- virtual bool recognizeLanguage(const QString & /*language*/) { return false; }
- virtual Atom::AtomType atomType() const { return Atom::Code; }
- virtual QString markedUpCode(const QString &code, const Node * /*relative*/,
- const Location & /*location*/)
- {
- return protect(code);
- }
- virtual QString markedUpSynopsis(const Node * /*node*/, const Node * /*relative*/,
- Section::Style /*style*/)
- {
- return QString();
- }
- virtual QString markedUpQmlItem(const Node *, bool) { return QString(); }
- virtual QString markedUpName(const Node * /*node*/) { return QString(); }
- virtual QString markedUpFullName(const Node * /*node*/, const Node * /*relative*/)
- {
- return QString();
- }
- virtual QString markedUpEnumValue(const QString & /*enumValue*/, const Node * /*relative*/)
- {
- return QString();
- }
- virtual QString markedUpIncludes(const QStringList & /*includes*/) { return QString(); }
- virtual QString functionBeginRegExp(const QString & /*funcName*/) { return QString(); }
- virtual QString functionEndRegExp(const QString & /*funcName*/) { return QString(); }
-
- static void initialize();
- static void terminate();
- static CodeMarker *markerForCode(const QString &code);
- static CodeMarker *markerForFileName(const QString &fileName);
- static CodeMarker *markerForLanguage(const QString &lang);
- static const Node *nodeForString(const QString &string);
- static QString stringForNode(const Node *node);
- static QString extraSynopsis(const Node *node, Section::Style style);
-
- QString typified(const QString &string, bool trailingSpace = false);
-
-protected:
- static QString protect(const QString &string);
- static void appendProtectedString(QString *output, QStringView str);
- QString taggedNode(const Node *node);
- QString taggedQmlNode(const Node *node);
- QString linkTag(const Node *node, const QString &body);
-
-private:
- static QString defaultLang;
- static QList<CodeMarker *> markers;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/codeparser.cpp b/src/qdoc/codeparser.cpp
deleted file mode 100644
index a1560a505..000000000
--- a/src/qdoc/codeparser.cpp
+++ /dev/null
@@ -1,303 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- codeparser.cpp
-*/
-
-#include "codeparser.h"
-
-#include "config.h"
-#include "generator.h"
-#include "node.h"
-#include "proxynode.h"
-#include "qdocdatabase.h"
-
-#include <QtCore/qregularexpression.h>
-
-QT_BEGIN_NAMESPACE
-
-QList<CodeParser *> CodeParser::parsers;
-bool CodeParser::showInternal_ = false;
-bool CodeParser::singleExec_ = false;
-
-/*!
- The constructor adds this code parser to the static
- list of code parsers.
- */
-CodeParser::CodeParser()
-{
- qdb_ = QDocDatabase::qdocDB();
- parsers.prepend(this);
-}
-
-/*!
- The destructor removes this code parser from the static
- list of code parsers.
- */
-CodeParser::~CodeParser()
-{
- parsers.removeAll(this);
-}
-
-/*!
- Initialize the code parser base class.
- */
-void CodeParser::initializeParser()
-{
- showInternal_ = Config::instance().showInternal();
- singleExec_ = Config::instance().getBool(CONFIG_SINGLEEXEC);
-}
-
-/*!
- Terminating a code parser is trivial.
- */
-void CodeParser::terminateParser()
-{
- // nothing.
-}
-
-QStringList CodeParser::headerFileNameFilter()
-{
- return sourceFileNameFilter();
-}
-
-void CodeParser::parseHeaderFile(const Location &location, const QString &filePath)
-{
- parseSourceFile(location, filePath);
-}
-
-/*!
- All the code parsers in the static list are initialized here,
- after the qdoc configuration variables have been set.
- */
-void CodeParser::initialize()
-{
- for (const auto &parser : qAsConst(parsers))
- parser->initializeParser();
-}
-
-/*!
- All the code parsers in the static list are terminated here.
- */
-void CodeParser::terminate()
-{
- for (const auto parser : parsers)
- parser->terminateParser();
-}
-
-CodeParser *CodeParser::parserForLanguage(const QString &language)
-{
- for (const auto parser : qAsConst(parsers)) {
- if (parser->language() == language)
- return parser;
- }
- return nullptr;
-}
-
-CodeParser *CodeParser::parserForHeaderFile(const QString &filePath)
-{
- QString fileName = QFileInfo(filePath).fileName();
-
- for (const auto &parser : qAsConst(parsers)) {
- const QStringList headerPatterns = parser->headerFileNameFilter();
- for (const auto &pattern : headerPatterns) {
- auto re = QRegularExpression::fromWildcard(pattern, Qt::CaseInsensitive);
- if (re.match(fileName).hasMatch())
- return parser;
- }
- }
- return nullptr;
-}
-
-CodeParser *CodeParser::parserForSourceFile(const QString &filePath)
-{
- QString fileName = QFileInfo(filePath).fileName();
-
- for (const auto &parser : parsers) {
- const QStringList sourcePatterns = parser->sourceFileNameFilter();
- for (const QString &pattern : sourcePatterns) {
- auto re = QRegularExpression::fromWildcard(pattern, Qt::CaseInsensitive);
- if (re.match(fileName).hasMatch())
- return parser;
- }
- }
- return nullptr;
-}
-
-static QSet<QString> commonMetaCommands_;
-/*!
- Returns the set of strings representing the common metacommands.
- */
-const QSet<QString> &CodeParser::commonMetaCommands()
-{
- if (commonMetaCommands_.isEmpty()) {
- commonMetaCommands_ << COMMAND_ABSTRACT << COMMAND_DEPRECATED << COMMAND_INGROUP
- << COMMAND_INJSMODULE << COMMAND_INMODULE << COMMAND_INPUBLICGROUP
- << COMMAND_INQMLMODULE << COMMAND_INTERNAL << COMMAND_NOAUTOLIST
- << COMMAND_NONREENTRANT << COMMAND_OBSOLETE << COMMAND_PRELIMINARY
- << COMMAND_QMLABSTRACT << COMMAND_QMLDEFAULT << COMMAND_QMLINHERITS
- << COMMAND_QMLREADONLY << COMMAND_QMLREQUIRED << COMMAND_QTCMAKEPACKAGE
- << COMMAND_QTVARIABLE << COMMAND_REENTRANT << COMMAND_SINCE
- << COMMAND_STARTPAGE << COMMAND_SUBTITLE << COMMAND_THREADSAFE
- << COMMAND_TITLE << COMMAND_WRAPPER;
- }
- return commonMetaCommands_;
-}
-
-/*!
- \internal
- */
-void CodeParser::extractPageLinkAndDesc(QStringView arg, QString *link, QString *desc)
-{
- QRegularExpression bracedRegExp(QRegularExpression::anchoredPattern(QLatin1String("\\{([^{}]*)\\}(?:\\{([^{}]*)\\})?")));
- auto match = bracedRegExp.match(arg);
- if (match.hasMatch()) {
- *link = match.captured(1);
- *desc = match.captured(2);
- if (desc->isEmpty())
- *desc = *link;
- } else {
- int spaceAt = arg.indexOf(QLatin1Char(' '));
- if (arg.contains(QLatin1String(".html")) && spaceAt != -1) {
- *link = arg.left(spaceAt).trimmed().toString();
- *desc = arg.mid(spaceAt).trimmed().toString();
- } else {
- *link = arg.toString();
- *desc = *link;
- }
- }
-}
-
-/*!
- \internal
- */
-void CodeParser::setLink(Node *node, Node::LinkType linkType, const QString &arg)
-{
- QString link;
- QString desc;
- extractPageLinkAndDesc(arg, &link, &desc);
- node->setLink(linkType, link, desc);
-}
-
-/*!
- \brief Test for whether a doc comment warrants warnings.
-
- Returns true if qdoc should report that it has found something
- wrong with the qdoc comment in \a doc. Sometimes, qdoc should
- not report the warning, for example, when the comment contains
- the \c internal command, which normally means qdoc will not use
- the comment in the documentation anyway, so there is no point
- in reporting warnings about it.
- */
-bool CodeParser::isWorthWarningAbout(const Doc &doc)
-{
- return (showInternal_ || !doc.metaCommandsUsed().contains(QStringLiteral("internal")));
-}
-
-/*!
- Returns \c true if the file being parsed is a .h file.
- */
-bool CodeParser::isParsingH() const
-{
- return currentFile_.endsWith(".h");
-}
-
-/*!
- Returns \c true if the file being parsed is a .cpp file.
- */
-bool CodeParser::isParsingCpp() const
-{
- return currentFile_.endsWith(".cpp");
-}
-
-/*!
- Returns \c true if the file being parsed is a .qdoc file.
- */
-bool CodeParser::isParsingQdoc() const
-{
- return currentFile_.endsWith(".qdoc");
-}
-
-/*!
- For each node that will produce a documentation page, this function
- ensures that the node belongs to a module. Normally, the qdoc comment
- for an entity that will produce a documentation page will contain an
- \inmodule command to tell qdoc which module the entity belongs to.
-
- But now we normally run qdoc on each module in two passes. The first
- produces an index file; the second pass generates the docs after
- reading all the index files it needs.
-
- This means that all the pages generated during each pass 2 run of
- qdoc almost certainly belong to a single module, and the name of
- that module is, as a rule, used as the project name in the qdocconf
- file used when running qdoc on the module.
-
- So this function first asks if the node \a n has a non-empty module
- name. If it it does not have a non-empty module name, it sets the
- module name to be the project name.
-
- In some cases it prints a qdoc warning that it has done this. Namely,
- for C++ classes and namespaces.
- */
-void CodeParser::checkModuleInclusion(Node *n)
-{
- if (n->physicalModuleName().isEmpty()) {
- n->setPhysicalModuleName(Generator::defaultModuleName());
-
- if (n->isInAPI() && !n->name().isEmpty()) {
- QString word;
- switch (n->nodeType()) {
- case Node::Class:
- word = QLatin1String("Class");
- break;
- case Node::Struct:
- word = QLatin1String("Struct");
- break;
- case Node::Union:
- word = QLatin1String("Union");
- break;
- case Node::Namespace:
- word = QLatin1String("Namespace");
- break;
- default:
- return;
- }
-
- qdb_->addToModule(Generator::defaultModuleName(), n);
- n->doc().location().warning(QStringLiteral("%1 %2 has no \\inmodule command; "
- "using project name by default: %3")
- .arg(word)
- .arg(n->name())
- .arg(Generator::defaultModuleName()));
- }
- }
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/codeparser.h b/src/qdoc/codeparser.h
deleted file mode 100644
index 54fd18035..000000000
--- a/src/qdoc/codeparser.h
+++ /dev/null
@@ -1,179 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef CODEPARSER_H
-#define CODEPARSER_H
-
-#include "node.h"
-
-#include <QtCore/qset.h>
-
-QT_BEGIN_NAMESPACE
-
-class Location;
-class QString;
-class QDocDatabase;
-
-class CodeParser
-{
-public:
- CodeParser();
- virtual ~CodeParser();
-
- virtual void initializeParser();
- virtual void terminateParser();
- virtual QString language() = 0;
- virtual QStringList headerFileNameFilter();
- virtual QStringList sourceFileNameFilter() = 0;
- virtual void parseHeaderFile(const Location &location, const QString &filePath);
- virtual void parseSourceFile(const Location &location, const QString &filePath) = 0;
- virtual void precompileHeaders() {}
- virtual Node *parseFnArg(const Location &, const QString &) { return nullptr; }
-
- bool isParsingH() const;
- bool isParsingCpp() const;
- bool isParsingQdoc() const;
- const QString &currentFile() const { return currentFile_; }
- const QString &moduleHeader() const { return moduleHeader_; }
- void setModuleHeader(const QString &t) { moduleHeader_ = t; }
- void checkModuleInclusion(Node *n);
-
- static void initialize();
- static void terminate();
- static CodeParser *parserForLanguage(const QString &language);
- static CodeParser *parserForHeaderFile(const QString &filePath);
- static CodeParser *parserForSourceFile(const QString &filePath);
- static void setLink(Node *node, Node::LinkType linkType, const QString &arg);
- static bool isWorthWarningAbout(const Doc &doc);
-
-protected:
- const QSet<QString> &commonMetaCommands();
- static void extractPageLinkAndDesc(QStringView arg, QString *link, QString *desc);
- static bool showInternal() { return showInternal_; }
- QString moduleHeader_;
- QString currentFile_;
- QDocDatabase *qdb_;
-
-private:
- static QList<CodeParser *> parsers;
- static bool showInternal_;
- static bool singleExec_;
-};
-
-#define COMMAND_ABSTRACT Doc::alias(QLatin1String("abstract"))
-#define COMMAND_AUDIENCE Doc::alias(QLatin1String("audience"))
-#define COMMAND_AUTHOR Doc::alias(QLatin1String("author"))
-#define COMMAND_CATEGORY Doc::alias(QLatin1String("category"))
-#define COMMAND_CLASS Doc::alias(QLatin1String("class"))
-#define COMMAND_COMPONENT Doc::alias(QLatin1String("component"))
-#define COMMAND_COPYRHOLDER Doc::alias(QLatin1String("copyrholder"))
-#define COMMAND_COPYRYEAR Doc::alias(QLatin1String("copyryear"))
-#define COMMAND_DEPRECATED Doc::alias(QLatin1String("deprecated")) // ### don't document
-#define COMMAND_DONTDOCUMENT Doc::alias(QLatin1String("dontdocument"))
-#define COMMAND_ENUM Doc::alias(QLatin1String("enum"))
-#define COMMAND_EXAMPLE Doc::alias(QLatin1String("example"))
-#define COMMAND_EXTERNALPAGE Doc::alias(QLatin1String("externalpage"))
-#define COMMAND_FN Doc::alias(QLatin1String("fn"))
-#define COMMAND_GROUP Doc::alias(QLatin1String("group"))
-#define COMMAND_HEADERFILE Doc::alias(QLatin1String("headerfile"))
-#define COMMAND_INGROUP Doc::alias(QLatin1String("ingroup"))
-#define COMMAND_INHEADERFILE Doc::alias(QLatin1String("inheaderfile"))
-#define COMMAND_INJSMODULE Doc::alias(QLatin1String("injsmodule"))
-#define COMMAND_INMODULE Doc::alias(QLatin1String("inmodule")) // ### don't document
-#define COMMAND_INPUBLICGROUP Doc::alias(QLatin1String("inpublicgroup"))
-#define COMMAND_INQMLMODULE Doc::alias(QLatin1String("inqmlmodule"))
-#define COMMAND_INTERNAL Doc::alias(QLatin1String("internal"))
-#define COMMAND_JSATTACHEDMETHOD Doc::alias(QLatin1String("jsattachedmethod"))
-#define COMMAND_JSATTACHEDPROPERTY Doc::alias(QLatin1String("jsattachedproperty"))
-#define COMMAND_JSATTACHEDSIGNAL Doc::alias(QLatin1String("jsattachedsignal"))
-#define COMMAND_JSBASICTYPE Doc::alias(QLatin1String("jsbasictype"))
-#define COMMAND_JSMETHOD Doc::alias(QLatin1String("jsmethod"))
-#define COMMAND_JSMODULE Doc::alias(QLatin1String("jsmodule"))
-#define COMMAND_JSPROPERTY Doc::alias(QLatin1String("jsproperty"))
-#define COMMAND_JSPROPERTYGROUP Doc::alias(QLatin1String("jspropertygroup"))
-#define COMMAND_JSSIGNAL Doc::alias(QLatin1String("jssignal"))
-#define COMMAND_JSTYPE Doc::alias(QLatin1String("jstype"))
-#define COMMAND_LICENSEDESCRIPTION Doc::alias(QLatin1String("licensedescription"))
-#define COMMAND_LICENSENAME Doc::alias(QLatin1String("licensename"))
-#define COMMAND_LICENSEYEAR Doc::alias(QLatin1String("licenseyear"))
-#define COMMAND_LIFECYCLEVERSION Doc::alias(QLatin1String("lifecycleversion"))
-#define COMMAND_LIFECYCLEWSTATUS Doc::alias(QLatin1String("lifecyclestatus"))
-#define COMMAND_MACRO Doc::alias(QLatin1String("macro"))
-#define COMMAND_MODULE Doc::alias(QLatin1String("module"))
-#define COMMAND_NAMESPACE Doc::alias(QLatin1String("namespace"))
-#define COMMAND_NEXTPAGE Doc::alias(QLatin1String("nextpage"))
-#define COMMAND_NOAUTOLIST Doc::alias(QLatin1String("noautolist"))
-#define COMMAND_NONREENTRANT Doc::alias(QLatin1String("nonreentrant"))
-#define COMMAND_OBSOLETE Doc::alias(QLatin1String("obsolete"))
-#define COMMAND_OVERLOAD Doc::alias(QLatin1String("overload"))
-#define COMMAND_PAGE Doc::alias(QLatin1String("page"))
-#define COMMAND_PERMISSIONS Doc::alias(QLatin1String("permissions"))
-#define COMMAND_PRELIMINARY Doc::alias(QLatin1String("preliminary"))
-#define COMMAND_PREVIOUSPAGE Doc::alias(QLatin1String("previouspage"))
-#define COMMAND_PRODNAME Doc::alias(QLatin1String("prodname"))
-#define COMMAND_PROPERTY Doc::alias(QLatin1String("property"))
-#define COMMAND_PUBLISHER Doc::alias(QLatin1String("publisher"))
-#define COMMAND_QMLABSTRACT Doc::alias(QLatin1String("qmlabstract"))
-#define COMMAND_QMLATTACHEDMETHOD Doc::alias(QLatin1String("qmlattachedmethod"))
-#define COMMAND_QMLATTACHEDPROPERTY Doc::alias(QLatin1String("qmlattachedproperty"))
-#define COMMAND_QMLATTACHEDSIGNAL Doc::alias(QLatin1String("qmlattachedsignal"))
-#define COMMAND_QMLBASICTYPE Doc::alias(QLatin1String("qmlbasictype"))
-#define COMMAND_QMLCLASS Doc::alias(QLatin1String("qmlclass"))
-#define COMMAND_QMLDEFAULT Doc::alias(QLatin1String("default"))
-#define COMMAND_QMLINHERITS Doc::alias(QLatin1String("inherits"))
-#define COMMAND_QMLINSTANTIATES Doc::alias(QLatin1String("instantiates"))
-#define COMMAND_QMLMETHOD Doc::alias(QLatin1String("qmlmethod"))
-#define COMMAND_QMLMODULE Doc::alias(QLatin1String("qmlmodule"))
-#define COMMAND_QMLPROPERTY Doc::alias(QLatin1String("qmlproperty"))
-#define COMMAND_QMLPROPERTYGROUP Doc::alias(QLatin1String("qmlpropertygroup"))
-#define COMMAND_QMLREADONLY Doc::alias(QLatin1String("readonly"))
-#define COMMAND_QMLREQUIRED Doc::alias(QLatin1String("required"))
-#define COMMAND_QMLSIGNAL Doc::alias(QLatin1String("qmlsignal"))
-#define COMMAND_QMLTYPE Doc::alias(QLatin1String("qmltype"))
-#define COMMAND_QTCMAKEPACKAGE Doc::alias(QLatin1String("qtcmakepackage"))
-#define COMMAND_QTVARIABLE Doc::alias(QLatin1String("qtvariable"))
-#define COMMAND_REENTRANT Doc::alias(QLatin1String("reentrant"))
-#define COMMAND_REIMP Doc::alias(QLatin1String("reimp"))
-#define COMMAND_RELATES Doc::alias(QLatin1String("relates"))
-#define COMMAND_RELEASEDATE Doc::alias(QLatin1String("releasedate"))
-#define COMMAND_SINCE Doc::alias(QLatin1String("since"))
-#define COMMAND_STRUCT Doc::alias(QLatin1String("struct"))
-#define COMMAND_SUBTITLE Doc::alias(QLatin1String("subtitle"))
-#define COMMAND_STARTPAGE Doc::alias(QLatin1String("startpage"))
-#define COMMAND_THREADSAFE Doc::alias(QLatin1String("threadsafe"))
-#define COMMAND_TITLE Doc::alias(QLatin1String("title"))
-#define COMMAND_TYPEALIAS Doc::alias(QLatin1String("typealias"))
-#define COMMAND_TYPEDEF Doc::alias(QLatin1String("typedef"))
-#define COMMAND_VARIABLE Doc::alias(QLatin1String("variable"))
-#define COMMAND_VERSION Doc::alias(QLatin1String("version"))
-#define COMMAND_UNION Doc::alias(QLatin1String("union"))
-#define COMMAND_WRAPPER Doc::alias(QLatin1String("wrapper"))
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/collectionnode.cpp b/src/qdoc/collectionnode.cpp
deleted file mode 100644
index bbc154e13..000000000
--- a/src/qdoc/collectionnode.cpp
+++ /dev/null
@@ -1,173 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "collectionnode.h"
-
-#include <QtCore/qdebug.h>
-#include <QtCore/qstringlist.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class CollectionNode
- \brief A class for holding the members of a collection of doc pages.
- */
-
-/*!
- Returns \c true if the collection node's member list is
- not empty.
- */
-bool CollectionNode::hasMembers() const
-{
- return !m_members.isEmpty();
-}
-
-/*!
- Appends \a node to the collection node's member list, if
- and only if it isn't already in the member list.
- */
-void CollectionNode::addMember(Node *node)
-{
- if (!m_members.contains(node))
- m_members.append(node);
-}
-
-/*!
- Returns \c true if this collection node contains at least
- one namespace node.
- */
-bool CollectionNode::hasNamespaces() const
-{
- if (!m_members.isEmpty()) {
- for (const auto &member : qAsConst(m_members)) {
- if (member->isNamespace())
- return true;
- }
- }
- return false;
-}
-
-/*!
- Returns \c true if this collection node contains at least
- one class node.
- */
-bool CollectionNode::hasClasses() const
-{
- if (!m_members.isEmpty()) {
- for (const auto &member : qAsConst(m_members)) {
- if (member->isClassNode())
- return true;
- }
- }
- return false;
-}
-
-/*!
- Loads \a out with all this collection node's members that
- are namespace nodes.
- */
-void CollectionNode::getMemberNamespaces(NodeMap &out)
-{
- out.clear();
- for (const auto &member : qAsConst(m_members)) {
- if (member->isNamespace())
- out.insert(member->name(), member);
- }
-}
-
-/*!
- Loads \a out with all this collection node's members that
- are class nodes.
- */
-void CollectionNode::getMemberClasses(NodeMap &out) const
-{
- out.clear();
- for (const auto &i : qAsConst(m_members)) {
- if (i->isClassNode())
- out.insert(i->name(), i);
- }
-}
-
-/*!
- Prints the collection node's list of members.
- For debugging only.
- */
-void CollectionNode::printMembers(const QString &title)
-{
- qDebug() << title << name() << m_members.size();
- if (m_members.empty()) {
- for (const auto &member : qAsConst(m_members))
- qDebug() << " MEMBER:" << member->name() << member->nodeTypeString();
- }
-}
-
-/*!
- This function splits \a arg on the blank character to get a
- logical module name and version number. If the version number
- is present, it splits the version number on the '.' character
- to get a major version number and a minor version number. If
- the version number is present, both the major and minor version
- numbers should be there, but the minor version number is not
- absolutely necessary.
- */
-void CollectionNode::setLogicalModuleInfo(const QString &arg)
-{
- QStringList blankSplit = arg.split(QLatin1Char(' '));
- m_logicalModuleName = blankSplit[0];
- if (blankSplit.size() > 1) {
- QStringList dotSplit = blankSplit[1].split(QLatin1Char('.'));
- m_logicalModuleVersionMajor = dotSplit[0];
- if (dotSplit.size() > 1)
- m_logicalModuleVersionMinor = dotSplit[1];
- else
- m_logicalModuleVersionMinor = "0";
- }
-}
-
-/*!
- This function accepts the logical module \a info as a string
- list. If the logical module info contains the version number,
- it splits the version number on the '.' character to get the
- major and minor version numbers. Both major and minor version
- numbers should be provided, but the minor version number is
- not strictly necessary.
- */
-void CollectionNode::setLogicalModuleInfo(const QStringList &info)
-{
- m_logicalModuleName = info[0];
- if (info.size() > 1) {
- QStringList dotSplit = info[1].split(QLatin1Char('.'));
- m_logicalModuleVersionMajor = dotSplit[0];
- if (dotSplit.size() > 1)
- m_logicalModuleVersionMinor = dotSplit[1];
- else
- m_logicalModuleVersionMinor = "0";
- }
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/collectionnode.h b/src/qdoc/collectionnode.h
deleted file mode 100644
index da8592207..000000000
--- a/src/qdoc/collectionnode.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef COLLECTIONNODE_H
-#define COLLECTIONNODE_H
-
-#include "pagenode.h"
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-class CollectionNode : public PageNode
-{
-public:
- CollectionNode(NodeType type, Aggregate *parent, const QString &name)
- : PageNode(type, parent, name)
- {
- }
-
- bool isCollectionNode() const override { return true; }
- QString qtVariable() const override { return m_qtVariable; }
- void setQtVariable(const QString &v) override { m_qtVariable = v; }
- QString qtCMakeComponent() const override { return m_qtCMakeComponent; }
- void setQtCMakeComponent(const QString &target) override { m_qtCMakeComponent = target; }
- void addMember(Node *node) override;
- bool hasMembers() const override;
- bool hasNamespaces() const override;
- bool hasClasses() const override;
- void getMemberNamespaces(NodeMap &out) override;
- void getMemberClasses(NodeMap &out) const override;
- bool wasSeen() const override { return m_seen; }
-
- QString fullTitle() const override { return title(); }
- QString logicalModuleName() const override { return m_logicalModuleName; }
- QString logicalModuleVersion() const override
- {
- return m_logicalModuleVersionMajor + QLatin1Char('.') + m_logicalModuleVersionMinor;
- }
- QString logicalModuleIdentifier() const override
- {
- return m_logicalModuleName + m_logicalModuleVersionMajor;
- }
- void setLogicalModuleInfo(const QString &arg) override;
- void setLogicalModuleInfo(const QStringList &info) override;
-
- const NodeList &members() const { return m_members; }
- void printMembers(const QString &title);
-
- void markSeen() { m_seen = true; }
- void markNotSeen() { m_seen = false; }
-
-private:
- bool m_seen { false };
- NodeList m_members {};
- QString m_logicalModuleName {};
- QString m_logicalModuleVersionMajor {};
- QString m_logicalModuleVersionMinor {};
- QString m_qtVariable {};
- QString m_qtCMakeComponent {};
-};
-
-QT_END_NAMESPACE
-
-#endif // COLLECTIONNODE_H
diff --git a/src/qdoc/config.cpp b/src/qdoc/config.cpp
deleted file mode 100644
index 4f15e97da..000000000
--- a/src/qdoc/config.cpp
+++ /dev/null
@@ -1,1320 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- config.cpp
-*/
-
-#include "config.h"
-#include "loggingcategory.h"
-
-#include <QtCore/qdir.h>
-#include <QtCore/qfile.h>
-#include <QtCore/qtemporaryfile.h>
-#include <QtCore/qtextstream.h>
-#include <QtCore/qvariant.h>
-#include <QtCore/qregularexpression.h>
-
-QT_BEGIN_NAMESPACE
-
-QString ConfigStrings::ALIAS = QStringLiteral("alias");
-QString ConfigStrings::AUTOLINKERRORS = QStringLiteral("autolinkerrors");
-QString ConfigStrings::BUILDVERSION = QStringLiteral("buildversion");
-QString ConfigStrings::CLANGDEFINES = QStringLiteral("clangdefines");
-QString ConfigStrings::CODEINDENT = QStringLiteral("codeindent");
-QString ConfigStrings::CODEPREFIX = QStringLiteral("codeprefix");
-QString ConfigStrings::CODESUFFIX = QStringLiteral("codesuffix");
-QString ConfigStrings::CPPCLASSESPAGE = QStringLiteral("cppclassespage");
-QString ConfigStrings::CPPCLASSESTITLE = QStringLiteral("cppclassestitle");
-QString ConfigStrings::DEFINES = QStringLiteral("defines");
-QString ConfigStrings::DEPENDS = QStringLiteral("depends");
-QString ConfigStrings::DESCRIPTION = QStringLiteral("description");
-QString ConfigStrings::DOCBOOKEXTENSIONS = QStringLiteral("usedocbookextensions");
-QString ConfigStrings::ENDHEADER = QStringLiteral("endheader");
-QString ConfigStrings::EXAMPLEDIRS = QStringLiteral("exampledirs");
-QString ConfigStrings::EXAMPLES = QStringLiteral("examples");
-QString ConfigStrings::EXAMPLESINSTALLPATH = QStringLiteral("examplesinstallpath");
-QString ConfigStrings::EXCLUDEDIRS = QStringLiteral("excludedirs");
-QString ConfigStrings::EXCLUDEFILES = QStringLiteral("excludefiles");
-QString ConfigStrings::EXTRAIMAGES = QStringLiteral("extraimages");
-QString ConfigStrings::FALSEHOODS = QStringLiteral("falsehoods");
-QString ConfigStrings::FORMATTING = QStringLiteral("formatting");
-QString ConfigStrings::HEADERDIRS = QStringLiteral("headerdirs");
-QString ConfigStrings::HEADERS = QStringLiteral("headers");
-QString ConfigStrings::HEADERSCRIPTS = QStringLiteral("headerscripts");
-QString ConfigStrings::HEADERSTYLES = QStringLiteral("headerstyles");
-QString ConfigStrings::HOMEPAGE = QStringLiteral("homepage");
-QString ConfigStrings::HOMETITLE = QStringLiteral("hometitle");
-QString ConfigStrings::IGNOREDIRECTIVES = QStringLiteral("ignoredirectives");
-QString ConfigStrings::IGNORESINCE = QStringLiteral("ignoresince");
-QString ConfigStrings::IGNORETOKENS = QStringLiteral("ignoretokens");
-QString ConfigStrings::IGNOREWORDS = QStringLiteral("ignorewords");
-QString ConfigStrings::IMAGEDIRS = QStringLiteral("imagedirs");
-QString ConfigStrings::IMAGES = QStringLiteral("images");
-QString ConfigStrings::INCLUDEPATHS = QStringLiteral("includepaths");
-QString ConfigStrings::INDEXES = QStringLiteral("indexes");
-QString ConfigStrings::LANDINGPAGE = QStringLiteral("landingpage");
-QString ConfigStrings::LANDINGTITLE = QStringLiteral("landingtitle");
-QString ConfigStrings::LANGUAGE = QStringLiteral("language");
-QString ConfigStrings::LOCATIONINFO = QStringLiteral("locationinfo");
-QString ConfigStrings::LOGPROGRESS = QStringLiteral("logprogress");
-QString ConfigStrings::MACRO = QStringLiteral("macro");
-QString ConfigStrings::MANIFESTMETA = QStringLiteral("manifestmeta");
-QString ConfigStrings::MODULEHEADER = QStringLiteral("moduleheader");
-QString ConfigStrings::NATURALLANGUAGE = QStringLiteral("naturallanguage");
-QString ConfigStrings::NAVIGATION = QStringLiteral("navigation");
-QString ConfigStrings::NOLINKERRORS = QStringLiteral("nolinkerrors");
-QString ConfigStrings::OUTPUTDIR = QStringLiteral("outputdir");
-QString ConfigStrings::OUTPUTFORMATS = QStringLiteral("outputformats");
-QString ConfigStrings::OUTPUTPREFIXES = QStringLiteral("outputprefixes");
-QString ConfigStrings::OUTPUTSUFFIXES = QStringLiteral("outputsuffixes");
-QString ConfigStrings::PROJECT = QStringLiteral("project");
-QString ConfigStrings::REDIRECTDOCUMENTATIONTODEVNULL =
- QStringLiteral("redirectdocumentationtodevnull");
-QString ConfigStrings::QHP = QStringLiteral("qhp");
-QString ConfigStrings::QUOTINGINFORMATION = QStringLiteral("quotinginformation");
-QString ConfigStrings::SCRIPTS = QStringLiteral("scripts");
-QString ConfigStrings::SHOWINTERNAL = QStringLiteral("showinternal");
-QString ConfigStrings::SINGLEEXEC = QStringLiteral("singleexec");
-QString ConfigStrings::SOURCEDIRS = QStringLiteral("sourcedirs");
-QString ConfigStrings::SOURCEENCODING = QStringLiteral("sourceencoding");
-QString ConfigStrings::SOURCES = QStringLiteral("sources");
-QString ConfigStrings::SPURIOUS = QStringLiteral("spurious");
-QString ConfigStrings::STYLESHEETS = QStringLiteral("stylesheets");
-QString ConfigStrings::SYNTAXHIGHLIGHTING = QStringLiteral("syntaxhighlighting");
-QString ConfigStrings::TABSIZE = QStringLiteral("tabsize");
-QString ConfigStrings::TAGFILE = QStringLiteral("tagfile");
-QString ConfigStrings::TIMESTAMPS = QStringLiteral("timestamps");
-QString ConfigStrings::TOCTITLES = QStringLiteral("toctitles");
-QString ConfigStrings::TRANSLATORS = QStringLiteral("translators");
-QString ConfigStrings::URL = QStringLiteral("url");
-QString ConfigStrings::VERSION = QStringLiteral("version");
-QString ConfigStrings::VERSIONSYM = QStringLiteral("versionsym");
-QString ConfigStrings::FILEEXTENSIONS = QStringLiteral("fileextensions");
-QString ConfigStrings::IMAGEEXTENSIONS = QStringLiteral("imageextensions");
-QString ConfigStrings::QMLONLY = QStringLiteral("qmlonly");
-QString ConfigStrings::QMLTYPESPAGE = QStringLiteral("qmltypespage");
-QString ConfigStrings::QMLTYPESTITLE = QStringLiteral("qmltypestitle");
-QString ConfigStrings::WARNINGLIMIT = QStringLiteral("warninglimit");
-
-/*!
- An entry in a stack, where each entry is a list
- of string values.
- */
-class MetaStackEntry
-{
-public:
- void open();
- void close();
-
- QStringList accum;
- QStringList next;
-};
-Q_DECLARE_TYPEINFO(MetaStackEntry, Q_MOVABLE_TYPE);
-
-/*!
- Start accumulating values in a list by appending an empty
- string to the list.
- */
-void MetaStackEntry::open()
-{
- next.append(QString());
-}
-
-/*!
- Stop accumulating values and append the list of accumulated
- values to the complete list of accumulated values.
-
- */
-void MetaStackEntry::close()
-{
- accum += next;
- next.clear();
-}
-
-/*!
- \class MetaStack
-
- This class maintains a stack of values of config file variables.
-*/
-class MetaStack : private QStack<MetaStackEntry>
-{
-public:
- MetaStack();
-
- void process(QChar ch, const Location &location);
- QStringList getExpanded(const Location &location);
-};
-
-/*!
- The default constructor pushes a new stack entry and
- opens it.
- */
-MetaStack::MetaStack()
-{
- push(MetaStackEntry());
- top().open();
-}
-
-/*!
- Processes the character \a ch using the \a location.
- It really just builds up a name by appending \a ch to
- it.
- */
-void MetaStack::process(QChar ch, const Location &location)
-{
- if (ch == QLatin1Char('{')) {
- push(MetaStackEntry());
- top().open();
- } else if (ch == QLatin1Char('}')) {
- if (count() == 1)
- location.fatal(QStringLiteral("Unexpected '}'"));
-
- top().close();
- const QStringList suffixes = pop().accum;
- const QStringList prefixes = top().next;
-
- top().next.clear();
- for (const auto &prefix : prefixes) {
- for (const auto &suffix : suffixes)
- top().next << prefix + suffix;
- }
- } else if (ch == QLatin1Char(',') && count() > 1) {
- top().close();
- top().open();
- } else {
- /*
- This is where all the processing is done.
- */
- for (auto it = top().next.begin(); it != top().next.end(); ++it)
- *it += ch;
- }
-}
-
-/*!
- Returns the accumulated string values.
- */
-QStringList MetaStack::getExpanded(const Location &location)
-{
- if (count() > 1)
- location.fatal(QStringLiteral("Missing '}'"));
-
- top().close();
- return top().accum;
-}
-
-const QString Config::dot = QLatin1String(".");
-bool Config::m_debug = false;
-bool Config::generateExamples = true;
-QString Config::overrideOutputDir;
-QString Config::installDir;
-QSet<QString> Config::overrideOutputFormats;
-QMap<QString, QString> Config::m_extractedDirs;
-QStack<QString> Config::m_workingDirs;
-QMap<QString, QStringList> Config::m_includeFilesMap;
-
-/*!
- \class Config
- \brief The Config class contains the configuration variables
- for controlling how qdoc produces documentation.
-
- Its load() function, reads, parses, and processes a qdocconf file.
- */
-
-/*!
- Initializes the Config with \a programName and sets all
- internal state variables to either default values or to ones
- defined in command line arguments \a args.
- */
-void Config::init(const QString &programName, const QStringList &args)
-{
- m_prog = programName;
- processCommandLineOptions(args);
- reset();
-}
-
-Config::~Config()
-{
- clear();
-}
-
-/*!
- Clears the location and internal maps for config variables.
- */
-void Config::clear()
-{
- m_location = m_lastLocation = Location();
- m_configVars.clear();
- m_includeFilesMap.clear();
-}
-
-/*!
- Resets the Config instance - used by load()
- */
-void Config::reset()
-{
- clear();
-
- // Default values
- setStringList(CONFIG_CODEINDENT, QStringList("0"));
- setStringList(CONFIG_FALSEHOODS, QStringList("0"));
- setStringList(CONFIG_FILEEXTENSIONS, QStringList("*.cpp *.h *.qdoc *.qml"));
- setStringList(CONFIG_LANGUAGE, QStringList("Cpp")); // i.e. C++
- setStringList(CONFIG_OUTPUTFORMATS, QStringList("HTML"));
- setStringList(CONFIG_TABSIZE, QStringList("8"));
- setStringList(CONFIG_LOCATIONINFO, QStringList("true"));
-
- // Publish options from the command line as config variables
- const auto setListFlag = [this](const QString &key, bool test) {
- setStringList(key, QStringList(test ? QStringLiteral("true") : QStringLiteral("false")));
- };
-#define SET(opt, test) setListFlag(opt, m_parser.isSet(m_parser.test))
- SET(CONFIG_SYNTAXHIGHLIGHTING, highlightingOption);
- SET(CONFIG_SHOWINTERNAL, showInternalOption);
- SET(CONFIG_SINGLEEXEC, singleExecOption);
- SET(CONFIG_REDIRECTDOCUMENTATIONTODEVNULL, redirectDocumentationToDevNullOption);
- SET(CONFIG_AUTOLINKERRORS, autoLinkErrorsOption);
-#undef SET
- m_showInternal = getBool(CONFIG_SHOWINTERNAL);
- setListFlag(CONFIG_NOLINKERRORS,
- m_parser.isSet(m_parser.noLinkErrorsOption)
- || qEnvironmentVariableIsSet("QDOC_NOLINKERRORS"));
-
- // CONFIG_DEFINES and CONFIG_INCLUDEPATHS are set in load()
-}
-
-/*!
- Loads and parses the qdoc configuration file \a fileName.
- If a previous project was loaded, this function first resets the
- Config instance. Then it calls the other load() function, which
- does the loading, parsing, and processing of the configuration file.
- */
-void Config::load(const QString &fileName)
-{
- // Reset if a previous project was loaded
- if (m_configVars.contains(CONFIG_PROJECT))
- reset();
-
- load(Location(), fileName);
- if (m_location.isEmpty())
- m_location = Location(fileName);
- else
- m_location.setEtc(true);
- m_lastLocation = Location();
-
- expandVariables();
-
- // Add defines and includepaths from command line to their
- // respective configuration variables. Values set here are
- // always added to what's defined in configuration file.
- insertStringList(CONFIG_DEFINES, m_defines);
- insertStringList(CONFIG_INCLUDEPATHS, m_includePaths);
-
- // Prefetch values that are used internally
- m_exampleFiles = getCanonicalPathList(CONFIG_EXAMPLES);
- m_exampleDirs = getCanonicalPathList(CONFIG_EXAMPLEDIRS);
-}
-
-/*!
- Expands other config variables referred to in all stored ConfigVars.
-*/
-void Config::expandVariables()
-{
- for (auto &configVar : m_configVars) {
- for (auto it = configVar.m_expandVars.crbegin(); it != configVar.m_expandVars.crend(); ++it) {
- Q_ASSERT(it->m_valueIndex < configVar.m_values.size());
- const QString &key = it->m_var;
- const auto &refVar = m_configVars.value(key);
- if (refVar.m_name.isEmpty()) {
- configVar.m_location.fatal(
- QStringLiteral("Environment or configuration variable '%1' undefined")
- .arg(it->m_var));
- } else if (!refVar.m_expandVars.empty()) {
- configVar.m_location.fatal(QStringLiteral("Nested variable expansion not allowed"),
- QStringLiteral("When expanding '%1' at %2:%3")
- .arg(refVar.m_name)
- .arg(refVar.m_location.filePath())
- .arg(refVar.m_location.lineNo()));
- }
- QString expanded;
- if (it->m_delim.isNull())
- expanded = getStringList(key).join(QString());
- else
- expanded = getStringList(key).join(it->m_delim);
- configVar.m_values[it->m_valueIndex].m_value.insert(it->m_index, expanded);
- }
- configVar.m_expandVars.clear();
- }
-}
-
-/*!
- Sets the \a values of a configuration variable \a var from a string list.
- */
-void Config::setStringList(const QString &var, const QStringList &values)
-{
- m_configVars.insert(var, ConfigVar(var, values, QDir::currentPath()));
-}
-
-/*!
- Adds the \a values from a string list to the configuration variable \a var.
- Existing value(s) are kept.
-*/
-void Config::insertStringList(const QString &var, const QStringList &values)
-{
- m_configVars[var].append(ConfigVar(var, values, QDir::currentPath()));
-}
-
-/*!
- Process and store variables from the command line.
- */
-void Config::processCommandLineOptions(const QStringList &args)
-{
- m_parser.process(args);
-
- m_defines = m_parser.values(m_parser.defineOption);
- m_dependModules = m_parser.values(m_parser.dependsOption);
- setIndexDirs();
- setIncludePaths();
-
- generateExamples = !m_parser.isSet(m_parser.noExamplesOption);
- if (m_parser.isSet(m_parser.installDirOption))
- installDir = m_parser.value(m_parser.installDirOption);
- if (m_parser.isSet(m_parser.outputDirOption))
- overrideOutputDir = m_parser.value(m_parser.outputDirOption);
-
- const auto outputFormats = m_parser.values(m_parser.outputFormatOption);
- for (const auto &format : outputFormats)
- overrideOutputFormats.insert(format);
-
- m_debug = m_parser.isSet(m_parser.debugOption);
- m_showInternal = m_parser.isSet(m_parser.showInternalOption);
-
- if (m_parser.isSet(m_parser.prepareOption))
- m_qdocPass = Prepare;
- if (m_parser.isSet(m_parser.generateOption))
- m_qdocPass = Generate;
- if (m_parser.isSet(m_parser.logProgressOption))
- setStringList(CONFIG_LOGPROGRESS, QStringList("true"));
- if (m_parser.isSet(m_parser.timestampsOption))
- setStringList(CONFIG_TIMESTAMPS, QStringList("true"));
- if (m_parser.isSet(m_parser.useDocBookExtensions))
- setStringList(CONFIG_DOCBOOKEXTENSIONS, QStringList("true"));
-}
-
-void Config::setIncludePaths()
-{
- QDir currentDir = QDir::current();
- const auto addIncludePaths = [this, currentDir](const char *flag, const QStringList &paths) {
- for (const auto &path : paths)
- m_includePaths << currentDir.absoluteFilePath(path).insert(0, flag);
- };
-
- addIncludePaths("-I", m_parser.values(m_parser.includePathOption));
-#ifdef QDOC_PASS_ISYSTEM
- addIncludePaths("-isystem", m_parser.values(m_parser.includePathSystemOption));
-#endif
- addIncludePaths("-F", m_parser.values(m_parser.frameworkOption));
-}
-
-/*!
- Stores paths from -indexdir command line option(s).
- */
-void Config::setIndexDirs()
-{
- m_indexDirs = m_parser.values(m_parser.indexDirOption);
- auto it = std::remove_if(m_indexDirs.begin(), m_indexDirs.end(),
- [](const QString &s) { return !QFile::exists(s); });
-
- std::for_each(it, m_indexDirs.end(), [](const QString &s) {
- qCWarning(lcQdoc) << "Cannot find index directory: " << s;
- });
- m_indexDirs.erase(it, m_indexDirs.end());
-}
-
-/*!
- Looks up the configuration variable \a var in the string
- map and returns the boolean value.
- */
-bool Config::getBool(const QString &var) const
-{
- return QVariant(getString(var)).toBool();
-}
-
-/*!
- Looks up the configuration variable \a var in the string list
- map. Iterates through the string list found, interpreting each
- string in the list as an integer and adding it to a total sum.
- Returns the sum or \c -1 if \a var is not set.
- */
-int Config::getInt(const QString &var) const
-{
- const QStringList strs = getStringList(var);
- if (strs.isEmpty())
- return -1;
-
- int sum = 0;
- for (const auto &str : strs)
- sum += str.toInt();
- return sum;
-}
-
-/*!
- Function to return the correct outputdir for the output \a format.
- If \a format is not specified, defaults to 'HTML'.
- outputdir can be set using the qdocconf or the command-line
- variable -outputdir.
- */
-QString Config::getOutputDir(const QString &format) const
-{
- QString t;
- if (overrideOutputDir.isNull())
- t = getString(CONFIG_OUTPUTDIR);
- else
- t = overrideOutputDir;
- if (getBool(CONFIG_SINGLEEXEC)) {
- QString project = getString(CONFIG_PROJECT);
- t += QLatin1Char('/') + project.toLower();
- }
- if (getBool(format + Config::dot + "nosubdirs")) {
- t = t.left(t.lastIndexOf('/'));
- QString singleOutputSubdir = getString(format + Config::dot + "outputsubdir");
- if (singleOutputSubdir.isEmpty())
- singleOutputSubdir = "html";
- t += QLatin1Char('/') + singleOutputSubdir;
- }
- return t;
-}
-
-/*!
- Function to return the correct outputformats.
- outputformats can be set using the qdocconf or the command-line
- variable -outputformat.
- */
-QSet<QString> Config::getOutputFormats() const
-{
- if (overrideOutputFormats.isEmpty())
- return getStringSet(CONFIG_OUTPUTFORMATS);
- else
- return overrideOutputFormats;
-}
-
-/*!
- Returns the value of a configuration variable \a var
- as a string. If \a var is defined, updates the internal
- location to the location of \a var for the purposes of
- error reporting.
-
- If \a var is not defined, returns \a defaultString.
-
- \note By default, \a defaultString is a null string. If \a var
- is found but contains an empty string, that is returned instead.
- This allows determining whether a configuration variable is
- undefined (null string) or defined as empty (empty string).
- */
-QString Config::getString(const QString &var, const QString &defaultString) const
-{
- const auto &configVar = m_configVars.value(var);
-
- if (configVar.m_name.isEmpty())
- return defaultString;
- updateLocation(configVar);
-
- QString result;
- for (const auto &value : configVar.m_values) {
- if (!result.isEmpty() && !result.endsWith(QChar('\n')))
- result.append(QChar(' '));
- result.append(value.m_value);
- }
- return result;
-}
-
-/*!
- Looks up the configuration variable \a var in the string
- list map, converts the string list it maps to into a set
- of strings, and returns the set.
- */
-QSet<QString> Config::getStringSet(const QString &var) const
-{
- const auto &stringList = getStringList(var);
- return QSet<QString>(stringList.cbegin(), stringList.cend());
-}
-
-/*!
- Returns the string list contained in the configuration variable
- \a var. If \a var is defined, updates the internal location
- to the location of \a var for the purposes of error reporting.
- */
-QStringList Config::getStringList(const QString &var) const
-{
- const auto &configVar = m_configVars.value(var);
- updateLocation(configVar);
-
- QStringList result;
- for (const auto &value : configVar.m_values)
- result << value.m_value;
- return result;
-}
-
-/*!
- Returns the a path list where all paths from the config variable \a var
- are canonicalized. If \a validate is true, outputs a warning for invalid
- paths. If \a var is defined, updates the internal location to the
- location of \a var for the purposes of error reporting.
-
- \sa Location::canonicalRelativePath()
- */
-QStringList Config::getCanonicalPathList(const QString &var, bool validate) const
-{
- QStringList result;
- const auto &configVar = m_configVars.value(var);
- updateLocation(configVar);
-
- for (const auto &value : configVar.m_values) {
- const QString &currentPath = value.m_path;
- QDir dir(value.m_value.simplified());
- const QString path = dir.path();
-
- if (dir.isRelative())
- dir.setPath(currentPath + QLatin1Char('/') + path);
- if (validate && !QFileInfo::exists(dir.path()))
- m_lastLocation.warning(QStringLiteral("Cannot find file or directory: %1").arg(path));
- else {
- const QString canonicalPath = dir.canonicalPath();
- if (!canonicalPath.isEmpty())
- result.append(canonicalPath);
- else if (path.contains(QLatin1Char('*')) || path.contains(QLatin1Char('?')))
- result.append(path);
- }
- }
- return result;
-}
-
-/*!
- Calls getRegExpList() with the control variable \a var and
- iterates through the resulting list of regular expressions,
- concatening them with some extras characters to form a single
- QRegularExpression, which is returned/
-
- \sa getRegExpList()
- */
-QRegularExpression Config::getRegExp(const QString &var) const
-{
- QString pattern;
- const auto subRegExps = getRegExpList(var);
-
- for (const auto &regExp : subRegExps) {
- if (!regExp.isValid())
- return regExp;
- if (!pattern.isEmpty())
- pattern += QLatin1Char('|');
- pattern += QLatin1String("(?:") + regExp.pattern() + QLatin1Char(')');
- }
- if (pattern.isEmpty())
- pattern = QLatin1String("$x"); // cannot match
- return QRegularExpression(pattern);
-}
-
-/*!
- Looks up the configuration variable \a var in the string list
- map, converts the string list to a list of regular expressions,
- and returns it.
- */
-QList<QRegularExpression> Config::getRegExpList(const QString &var) const
-{
- const QStringList strs = getStringList(var);
- QList<QRegularExpression> regExps;
- for (const auto &str : strs)
- regExps += QRegularExpression(str);
- return regExps;
-}
-
-/*!
- This function is slower than it could be. What it does is
- find all the keys that begin with \a var + dot and return
- the matching keys in a set, stripped of the matching prefix
- and dot.
- */
-QSet<QString> Config::subVars(const QString &var) const
-{
- QSet<QString> result;
- QString varDot = var + QLatin1Char('.');
- for (auto it = m_configVars.constBegin(); it != m_configVars.constEnd(); ++it) {
- if (it.key().startsWith(varDot)) {
- QString subVar = it.key().mid(varDot.length());
- int dot = subVar.indexOf(QLatin1Char('.'));
- if (dot != -1)
- subVar.truncate(dot);
- result.insert(subVar);
- }
- }
- return result;
-}
-
-/*!
- Same as subVars(), but returns a ConfigVarMap \a map with the
- matching keys (stripped of the prefix \a var and mapped to
- their values.
- */
-void Config::subVarsAndValues(const QString &var, ConfigVarMap &map) const
-{
- QString varDot = var + QLatin1Char('.');
- for (auto it = m_configVars.constBegin(); it != m_configVars.constEnd(); ++it) {
- if (it.key().startsWith(varDot)) {
- QString subVar = it.key().mid(varDot.length());
- int dot = subVar.indexOf(QLatin1Char('.'));
- if (dot != -1)
- subVar.truncate(dot);
- map.insert(subVar, it.value());
- }
- }
-}
-
-/*!
- Get all .qdocinc files.
- */
-QString Config::getIncludeFilePath(const QString &fileName) const
-{
- QString ext = fileName.mid(fileName.lastIndexOf('.'));
- ext.prepend('*');
-
- if (!m_includeFilesMap.contains(ext)) {
- QSet<QString> t;
- QStringList result;
- const auto sourceDirs = getCanonicalPathList(CONFIG_SOURCEDIRS);
- for (const auto &dir : sourceDirs)
- result += getFilesHere(dir, ext, location(), t, t);
- // Append the include files from the exampledirs as well
- const auto exampleDirs = getCanonicalPathList(CONFIG_EXAMPLEDIRS);
- for (const auto &dir : exampleDirs)
- result += getFilesHere(dir, ext, location(), t, t);
- m_includeFilesMap.insert(ext, result);
- }
- const QStringList &paths = (*m_includeFilesMap.find(ext));
- for (const auto &path : paths) {
- if (path.endsWith(fileName))
- return path;
- }
- return QString();
-}
-
-/*!
- Builds and returns a list of file pathnames for the file
- type specified by \a filesVar (e.g. "headers" or "sources").
- The files are found in the directories specified by
- \a dirsVar, and they are filtered by \a defaultNameFilter
- if a better filter can't be constructed from \a filesVar.
- The directories in \a excludedDirs are avoided. The files
- in \a excludedFiles are not included in the return list.
- */
-QStringList Config::getAllFiles(const QString &filesVar, const QString &dirsVar,
- const QSet<QString> &excludedDirs,
- const QSet<QString> &excludedFiles)
-{
- QStringList result = getCanonicalPathList(filesVar, true);
- const QStringList dirs = getCanonicalPathList(dirsVar, true);
-
- const QString nameFilter = getString(filesVar + dot + CONFIG_FILEEXTENSIONS);
-
- for (const auto &dir : dirs)
- result += getFilesHere(dir, nameFilter, location(), excludedDirs, excludedFiles);
- return result;
-}
-
-QStringList Config::getExampleQdocFiles(const QSet<QString> &excludedDirs,
- const QSet<QString> &excludedFiles)
-{
- QStringList result;
- const QStringList dirs = getCanonicalPathList("exampledirs");
- const QString nameFilter = " *.qdoc";
-
- for (const auto &dir : dirs)
- result += getFilesHere(dir, nameFilter, location(), excludedDirs, excludedFiles);
- return result;
-}
-
-QStringList Config::getExampleImageFiles(const QSet<QString> &excludedDirs,
- const QSet<QString> &excludedFiles)
-{
- QStringList result;
- const QStringList dirs = getCanonicalPathList("exampledirs");
- const QString nameFilter = getString(CONFIG_EXAMPLES + dot + CONFIG_IMAGEEXTENSIONS);
-
- for (const auto &dir : dirs)
- result += getFilesHere(dir, nameFilter, location(), excludedDirs, excludedFiles);
- return result;
-}
-
-/*!
- Returns the path to the project file for \a examplePath, or an empty string
- if no project file was found.
- */
-QString Config::getExampleProjectFile(const QString &examplePath)
-{
- QFileInfo fileInfo(examplePath);
- QStringList validNames;
- validNames << QLatin1String("CMakeLists.txt")
- << fileInfo.fileName() + QLatin1String(".pro")
- << fileInfo.fileName() + QLatin1String(".qmlproject")
- << fileInfo.fileName() + QLatin1String(".pyproject")
- << QLatin1String("qbuild.pro"); // legacy
-
- QString projectFile;
-
- for (const auto &name : qAsConst(validNames)) {
- projectFile = Config::findFile(Location(), m_exampleFiles, m_exampleDirs,
- examplePath + QLatin1Char('/') + name);
- if (!projectFile.isEmpty())
- return projectFile;
- }
-
- return projectFile;
-}
-
-/*!
- \a fileName is the path of the file to find.
-
- \a files and \a dirs are the lists where we must find the
- components of \a fileName.
-
- \a location is used for obtaining the file and line numbers
- for report qdoc errors.
- */
-QString Config::findFile(const Location &location, const QStringList &files,
- const QStringList &dirs, const QString &fileName,
- QString *userFriendlyFilePath)
-{
- if (fileName.isEmpty() || fileName.startsWith(QLatin1Char('/'))) {
- if (userFriendlyFilePath)
- *userFriendlyFilePath = fileName;
- return fileName;
- }
-
- QFileInfo fileInfo;
- QStringList components = fileName.split(QLatin1Char('?'));
- QString firstComponent = components.first();
-
- for (const auto &file : files) {
- if (file == firstComponent || file.endsWith(QLatin1Char('/') + firstComponent)) {
- fileInfo.setFile(file);
- if (!fileInfo.exists())
- location.fatal(QStringLiteral("File '%1' does not exist").arg(file));
- break;
- }
- }
-
- if (fileInfo.fileName().isEmpty()) {
- for (const auto &dir : dirs) {
- fileInfo.setFile(QDir(dir), firstComponent);
- if (fileInfo.exists())
- break;
- }
- }
-
- if (userFriendlyFilePath)
- userFriendlyFilePath->clear();
- if (!fileInfo.exists())
- return QString();
-
- if (userFriendlyFilePath) {
- for (auto c = components.constBegin();;) {
- bool isArchive = (c != components.constEnd() - 1);
- userFriendlyFilePath->append(*c);
-
- if (isArchive) {
- QString extracted = m_extractedDirs[fileInfo.filePath()];
- ++c;
- fileInfo.setFile(QDir(extracted), *c);
- } else {
- break;
- }
-
- userFriendlyFilePath->append(QLatin1Char('?'));
- }
- }
- return fileInfo.filePath();
-}
-
-/*!
- */
-QString Config::findFile(const Location &location, const QStringList &files,
- const QStringList &dirs, const QString &fileBase,
- const QStringList &fileExtensions, QString *userFriendlyFilePath)
-{
- for (const auto &extension : fileExtensions) {
- QString filePath = findFile(location, files, dirs, fileBase + QLatin1Char('.') + extension,
- userFriendlyFilePath);
- if (!filePath.isEmpty())
- return filePath;
- }
- return findFile(location, files, dirs, fileBase, userFriendlyFilePath);
-}
-
-/*!
- Copies the \a sourceFilePath to the file name constructed by
- concatenating \a targetDirPath and the file name from the
- \a userFriendlySourceFilePath. \a location is for identifying
- the file and line number where a qdoc error occurred. The
- constructed output file name is returned.
- */
-QString Config::copyFile(const Location &location, const QString &sourceFilePath,
- const QString &userFriendlySourceFilePath, const QString &targetDirPath)
-{
- QFile inFile(sourceFilePath);
- if (!inFile.open(QFile::ReadOnly)) {
- location.warning(QStringLiteral("Cannot open input file for copy: '%1': %2")
- .arg(sourceFilePath)
- .arg(inFile.errorString()));
- return QString();
- }
-
- QString outFileName = userFriendlySourceFilePath;
- int slash = outFileName.lastIndexOf(QLatin1Char('/'));
- if (slash != -1)
- outFileName = outFileName.mid(slash);
- if ((outFileName.size()) > 0 && (outFileName[0] != '/'))
- outFileName = targetDirPath + QLatin1Char('/') + outFileName;
- else
- outFileName = targetDirPath + outFileName;
- QFile outFile(outFileName);
- if (!outFile.open(QFile::WriteOnly)) {
- location.warning(QStringLiteral("Cannot open output file for copy: '%1': %2")
- .arg(outFileName)
- .arg(outFile.errorString()));
- return QString();
- }
-
- char buffer[1024];
- int len;
- while ((len = inFile.read(buffer, sizeof(buffer))) > 0)
- outFile.write(buffer, len);
- return outFileName;
-}
-
-/*!
- Finds the largest unicode digit in \a value in the range
- 1..7 and returns it.
- */
-int Config::numParams(const QString &value)
-{
- int max = 0;
- for (int i = 0; i != value.length(); ++i) {
- uint c = value[i].unicode();
- if (c > 0 && c < 8)
- max = qMax(max, static_cast<int>(c));
- }
- return max;
-}
-
-/*!
- Removes everything from \a dir. This function is recursive.
- It doesn't remove \a dir itself, but if it was called
- recursively, then the caller will remove \a dir.
- */
-bool Config::removeDirContents(const QString &dir)
-{
- QDir dirInfo(dir);
- const QFileInfoList entries = dirInfo.entryInfoList();
-
- bool ok = true;
-
- for (const auto &entry : entries) {
- if (entry.isFile()) {
- if (!dirInfo.remove(entry.fileName()))
- ok = false;
- } else if (entry.isDir()) {
- if (entry.fileName() != QLatin1String(".") && entry.fileName() != QLatin1String("..")) {
- if (removeDirContents(entry.absoluteFilePath())) {
- if (!dirInfo.rmdir(entry.fileName()))
- ok = false;
- } else {
- ok = false;
- }
- }
- }
- }
- return ok;
-}
-
-/*!
- Returns \c true if \a ch is a letter, number, '_', '.',
- '{', '}', or ','.
- */
-bool Config::isMetaKeyChar(QChar ch)
-{
- return ch.isLetterOrNumber() || ch == QLatin1Char('_') || ch == QLatin1Char('.')
- || ch == QLatin1Char('{') || ch == QLatin1Char('}') || ch == QLatin1Char(',');
-}
-
-/*!
- \a fileName is a master qdocconf file. It contains a list of
- qdocconf files and nothing else. Read the list and return it.
- */
-QStringList Config::loadMaster(const QString &fileName)
-{
- Location location;
- QFile fin(fileName);
- if (!fin.open(QFile::ReadOnly | QFile::Text)) {
- if (!Config::installDir.isEmpty()) {
- int prefix = location.filePath().length() - location.fileName().length();
- fin.setFileName(Config::installDir + QLatin1Char('/')
- + fileName.right(fileName.length() - prefix));
- }
- if (!fin.open(QFile::ReadOnly | QFile::Text))
- location.fatal(QStringLiteral("Cannot open master qdocconf file '%1': %2")
- .arg(fileName)
- .arg(fin.errorString()));
- }
- QTextStream stream(&fin);
- QStringList qdocFiles;
- QDir configDir(QFileInfo(fileName).canonicalPath());
- QString line = stream.readLine();
- while (!line.isNull()) {
- qdocFiles.append(QFileInfo(configDir, line).filePath());
- line = stream.readLine();
- }
- fin.close();
- return qdocFiles;
-}
-
-/*!
- Load, parse, and process a qdoc configuration file. This
- function is only called by the other load() function, but
- this one is recursive, i.e., it calls itself when it sees
- an \c{include} statement in the qdoc configuration file.
- */
-void Config::load(Location location, const QString &fileName)
-{
- QFileInfo fileInfo(fileName);
- QString path = fileInfo.canonicalPath();
- pushWorkingDir(path);
- QDir::setCurrent(path);
- QRegularExpression keySyntax(QRegularExpression::anchoredPattern(QLatin1String("\\w+(?:\\.\\w+)*")));
-
-#define SKIP_CHAR() \
- do { \
- location.advance(c); \
- ++i; \
- c = text.at(i); \
- cc = c.unicode(); \
- } while (0)
-
-#define SKIP_SPACES() \
- while (c.isSpace() && cc != '\n') \
- SKIP_CHAR()
-
-#define PUT_CHAR() \
- word += c; \
- SKIP_CHAR();
-
- if (location.depth() > 16)
- location.fatal(QStringLiteral("Too many nested includes"));
-
- QFile fin(fileInfo.fileName());
- if (!fin.open(QFile::ReadOnly | QFile::Text)) {
- if (!Config::installDir.isEmpty()) {
- int prefix = location.filePath().length() - location.fileName().length();
- fin.setFileName(Config::installDir + QLatin1Char('/')
- + fileName.right(fileName.length() - prefix));
- }
- if (!fin.open(QFile::ReadOnly | QFile::Text))
- location.fatal(QStringLiteral("Cannot open file '%1': %2")
- .arg(fileName)
- .arg(fin.errorString()));
- }
-
- QTextStream stream(&fin);
- QString text = stream.readAll();
- text += QLatin1String("\n\n");
- text += QLatin1Char('\0');
- fin.close();
-
- location.push(fileName);
- location.start();
-
- int i = 0;
- QChar c = text.at(0);
- uint cc = c.unicode();
- while (i < text.length()) {
- if (cc == 0) {
- ++i;
- } else if (c.isSpace()) {
- SKIP_CHAR();
- } else if (cc == '#') {
- do {
- SKIP_CHAR();
- } while (cc != '\n');
- } else if (isMetaKeyChar(c)) {
- Location keyLoc = location;
- bool plus = false;
- QStringList rhsValues;
- QList<ExpandVar> expandVars;
- QString word;
- bool inQuote = false;
- bool needsExpansion = false;
-
- MetaStack stack;
- do {
- stack.process(c, location);
- SKIP_CHAR();
- } while (isMetaKeyChar(c));
-
- const QStringList keys = stack.getExpanded(location);
- SKIP_SPACES();
-
- if (keys.count() == 1 && keys.first() == QLatin1String("include")) {
- QString includeFile;
-
- if (cc != '(')
- location.fatal(QStringLiteral("Bad include syntax"));
- SKIP_CHAR();
- SKIP_SPACES();
-
- while (!c.isSpace() && cc != '#' && cc != ')') {
-
- if (cc == '$') {
- QString var;
- SKIP_CHAR();
- while (c.isLetterOrNumber() || cc == '_') {
- var += c;
- SKIP_CHAR();
- }
- if (!var.isEmpty()) {
- const QByteArray val = qgetenv(var.toLatin1().data());
- if (val.isNull()) {
- location.fatal(QStringLiteral("Environment variable '%1' undefined")
- .arg(var));
- } else {
- includeFile += QString::fromLatin1(val);
- }
- }
- } else {
- includeFile += c;
- SKIP_CHAR();
- }
- }
- SKIP_SPACES();
- if (cc != ')')
- location.fatal(QStringLiteral("Bad include syntax"));
- SKIP_CHAR();
- SKIP_SPACES();
- if (cc != '#' && cc != '\n')
- location.fatal(QStringLiteral("Trailing garbage"));
-
- /*
- Here is the recursive call.
- */
- load(location, QFileInfo(QDir(path), includeFile).filePath());
- } else {
- /*
- It wasn't an include statement, so it's something else.
- We must see either '=' or '+=' next. If not, fatal error.
- */
- if (cc == '+') {
- plus = true;
- SKIP_CHAR();
- }
- if (cc != '=')
- location.fatal(QStringLiteral("Expected '=' or '+=' after key"));
- SKIP_CHAR();
- SKIP_SPACES();
-
- for (;;) {
- if (cc == '\\') {
- int metaCharPos;
-
- SKIP_CHAR();
- if (cc == '\n') {
- SKIP_CHAR();
- } else if (cc > '0' && cc < '8') {
- word += QChar(c.digitValue());
- SKIP_CHAR();
- } else if ((metaCharPos = QString::fromLatin1("abfnrtv").indexOf(c))
- != -1) {
- word += QLatin1Char("\a\b\f\n\r\t\v"[metaCharPos]);
- SKIP_CHAR();
- } else {
- PUT_CHAR();
- }
- } else if (c.isSpace() || cc == '#') {
- if (inQuote) {
- if (cc == '\n')
- location.fatal(QStringLiteral("Unterminated string"));
- PUT_CHAR();
- } else {
- if (!word.isEmpty() || needsExpansion) {
- rhsValues << word;
- word.clear();
- needsExpansion = false;
- }
- if (cc == '\n' || cc == '#')
- break;
- SKIP_SPACES();
- }
- } else if (cc == '"') {
- if (inQuote) {
- if (!word.isEmpty() || needsExpansion)
- rhsValues << word;
- word.clear();
- needsExpansion = false;
- }
- inQuote = !inQuote;
- SKIP_CHAR();
- } else if (cc == '$') {
- QString var;
- QChar delim(' ');
- bool braces = false;
- SKIP_CHAR();
- if (cc == '{') {
- SKIP_CHAR();
- braces = true;
- }
- while (c.isLetterOrNumber() || cc == '_') {
- var += c;
- SKIP_CHAR();
- }
- if (braces) {
- if (cc == ',') {
- SKIP_CHAR();
- delim = c;
- SKIP_CHAR();
- }
- if (cc == '}')
- SKIP_CHAR();
- else if (delim == '}')
- delim = QChar(); // null delimiter
- else
- location.fatal(QStringLiteral("Missing '}'"));
- }
- if (!var.isEmpty()) {
- const QByteArray val = qgetenv(var.toLatin1().constData());
- if (val.isNull()) {
- expandVars << ExpandVar(rhsValues.size(), word.size(), var, delim);
- needsExpansion = true;
- } else if (braces) { // ${VAR} inserts content from an env. variable for processing
- text.insert(i, QString::fromLatin1(val));
- c = text.at(i);
- cc = c.unicode();
- } else { // while $VAR simply reads the value and stores it to a config variable.
- word += QString::fromLatin1(val);
- }
- }
- } else {
- if (!inQuote && cc == '=')
- location.fatal(QStringLiteral("Unexpected '='"));
- PUT_CHAR();
- }
- }
- for (const auto &key : keys) {
- if (!keySyntax.match(key).hasMatch())
- keyLoc.fatal(QStringLiteral("Invalid key '%1'").arg(key));
-
- ConfigVar configVar(key, rhsValues, QDir::currentPath(), keyLoc, expandVars);
- if (plus && m_configVars.contains(key)) {
- m_configVars[key].append(configVar);
- } else {
- m_configVars.insert(key, configVar);
- }
- }
- }
- } else {
- location.fatal(QStringLiteral("Unexpected character '%1' at beginning of line").arg(c));
- }
- }
- popWorkingDir();
- if (!m_workingDirs.isEmpty())
- QDir::setCurrent(m_workingDirs.top());
-}
-
-bool Config::isFileExcluded(const QString &fileName, const QSet<QString> &excludedFiles)
-{
- for (const QString &entry : excludedFiles) {
- if (entry.contains(QLatin1Char('*')) || entry.contains(QLatin1Char('?'))) {
- QRegularExpression re(QRegularExpression::wildcardToRegularExpression(entry));
- if (re.match(fileName).hasMatch())
- return true;
- }
- }
- return excludedFiles.contains(fileName);
-}
-
-QStringList Config::getFilesHere(const QString &uncleanDir, const QString &nameFilter,
- const Location &location, const QSet<QString> &excludedDirs,
- const QSet<QString> &excludedFiles)
-{
- QString dir =
- location.isEmpty() ? QDir::cleanPath(uncleanDir) : QDir(uncleanDir).canonicalPath();
- QStringList result;
- if (excludedDirs.contains(dir))
- return result;
-
- QDir dirInfo(dir);
-
- dirInfo.setNameFilters(nameFilter.split(QLatin1Char(' ')));
- dirInfo.setSorting(QDir::Name);
- dirInfo.setFilter(QDir::Files);
- QStringList fileNames = dirInfo.entryList();
- for (const auto &file : qAsConst(fileNames)) {
- if (!file.startsWith(QLatin1Char('~'))) {
- QString s = dirInfo.filePath(file);
- QString c = QDir::cleanPath(s);
- if (!isFileExcluded(c, excludedFiles))
- result.append(c);
- }
- }
-
- dirInfo.setNameFilters(QStringList(QLatin1String("*")));
- dirInfo.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
- fileNames = dirInfo.entryList();
- for (const auto &file : fileNames)
- result += getFilesHere(dirInfo.filePath(file), nameFilter, location, excludedDirs,
- excludedFiles);
- return result;
-}
-
-/*!
- Push \a dir onto the stack of working directories.
- */
-void Config::pushWorkingDir(const QString &dir)
-{
- m_workingDirs.push(dir);
-}
-
-/*!
- If the stack of working directories is not empty, pop the
- top entry and return it. Otherwise return an empty string.
- */
-QString Config::popWorkingDir()
-{
- if (!m_workingDirs.isEmpty())
- return m_workingDirs.pop();
-
- qDebug() << "RETURNED EMPTY WORKING DIR";
- return QString();
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/config.h b/src/qdoc/config.h
deleted file mode 100644
index 691ec1e3f..000000000
--- a/src/qdoc/config.h
+++ /dev/null
@@ -1,417 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- config.h
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "location.h"
-#include "qdoccommandlineparser.h"
-#include "singleton.h"
-
-#include <QtCore/qmap.h>
-#include <QtCore/qpair.h>
-#include <QtCore/qset.h>
-#include <QtCore/qstack.h>
-#include <QtCore/qstringlist.h>
-
-QT_BEGIN_NAMESPACE
-
-/*
- Contains information about a location
- where a ConfigVar string needs to be expanded
- from another config variable.
-*/
-struct ExpandVar
-{
- int m_valueIndex {};
- int m_index {};
- QString m_var {};
- QChar m_delim {};
-
- ExpandVar(int valueIndex, int index, const QString &var, const QChar &delim)
- : m_valueIndex(valueIndex), m_index(index), m_var(var), m_delim(delim)
- {
- }
-};
-
-/*
- This struct contains all the information for
- one config variable found in a qdocconf file.
- */
-struct ConfigVar
-{
- QString m_name {};
-
- struct ConfigValue {
- QString m_value;
- QString m_path;
- };
-
- QList<ConfigValue> m_values {};
- Location m_location {};
- QList<ExpandVar> m_expandVars {};
-
- ConfigVar() = default;
-
- ConfigVar(const QString &name, const QStringList &values, const QString &dir,
- const Location &loc = Location(),
- const QList<ExpandVar> &expandVars = QList<ExpandVar>())
- : m_name(name), m_location(loc), m_expandVars(expandVars)
- {
- for (const auto &v : values)
- m_values << ConfigValue {v, dir};
- }
-
- /*
- Appends values to this ConfigVar, and adjusts the ExpandVar
- parameters so they continue to refer to the correct values.
- */
- void append(const ConfigVar &other)
- {
- m_expandVars << other.m_expandVars;
- QList<ExpandVar>::Iterator it = m_expandVars.end();
- it -= other.m_expandVars.size();
- std::for_each(it, m_expandVars.end(), [this](ExpandVar &v) {
- v.m_valueIndex += m_values.size();
- });
- m_values << other.m_values;
- m_location = other.m_location;
- }
-};
-
-/*
- In this multimap, the key is a config variable name.
- */
-typedef QMap<QString, ConfigVar> ConfigVarMap;
-
-class Config : public Singleton<Config>
-{
-public:
- ~Config();
-
- enum QDocPass { Neither, Prepare, Generate };
-
- void init(const QString &programName, const QStringList &args);
- bool getDebug() const { return m_debug; }
- bool showInternal() const { return m_showInternal; }
-
- void clear();
- void reset();
- void load(const QString &fileName);
- void setStringList(const QString &var, const QStringList &values);
- void insertStringList(const QString &var, const QStringList &values);
-
- void showHelp(int exitCode = 0) { m_parser.showHelp(exitCode); }
- QStringList qdocFiles() const { return m_parser.positionalArguments(); }
- const QString &programName() const { return m_prog; }
- const Location &location() const { return m_location; }
- const Location &lastLocation() const { return m_lastLocation; }
- bool getBool(const QString &var) const;
- int getInt(const QString &var) const;
-
- QString getOutputDir(const QString &format = QString("HTML")) const;
- QSet<QString> getOutputFormats() const;
- QString getString(const QString &var, const QString &defaultString = QString()) const;
- QSet<QString> getStringSet(const QString &var) const;
- QStringList getStringList(const QString &var) const;
- QStringList getCanonicalPathList(const QString &var, bool validate = false) const;
- QRegularExpression getRegExp(const QString &var) const;
- QList<QRegularExpression> getRegExpList(const QString &var) const;
- QSet<QString> subVars(const QString &var) const;
- void subVarsAndValues(const QString &var, ConfigVarMap &map) const;
- QStringList getAllFiles(const QString &filesVar, const QString &dirsVar,
- const QSet<QString> &excludedDirs = QSet<QString>(),
- const QSet<QString> &excludedFiles = QSet<QString>());
- QString getIncludeFilePath(const QString &fileName) const;
- QStringList getExampleQdocFiles(const QSet<QString> &excludedDirs,
- const QSet<QString> &excludedFiles);
- QStringList getExampleImageFiles(const QSet<QString> &excludedDirs,
- const QSet<QString> &excludedFiles);
- QString getExampleProjectFile(const QString &examplePath);
-
- static QStringList loadMaster(const QString &fileName);
- static bool isFileExcluded(const QString &fileName, const QSet<QString> &excludedFiles);
- static QStringList getFilesHere(const QString &dir, const QString &nameFilter,
- const Location &location = Location(),
- const QSet<QString> &excludedDirs = QSet<QString>(),
- const QSet<QString> &excludedFiles = QSet<QString>());
- static QString findFile(const Location &location, const QStringList &files,
- const QStringList &dirs, const QString &fileName,
- QString *userFriendlyFilePath = nullptr);
- static QString findFile(const Location &location, const QStringList &files,
- const QStringList &dirs, const QString &fileBase,
- const QStringList &fileExtensions,
- QString *userFriendlyFilePath = nullptr);
- static QString copyFile(const Location &location, const QString &sourceFilePath,
- const QString &userFriendlySourceFilePath,
- const QString &targetDirPath);
- static int numParams(const QString &value);
- static bool removeDirContents(const QString &dir);
- static void pushWorkingDir(const QString &dir);
- static QString popWorkingDir();
-
- static const QString dot;
-
- static bool generateExamples;
- static QString installDir;
- static QString overrideOutputDir;
- static QSet<QString> overrideOutputFormats;
-
- inline bool singleExec() const;
- inline bool dualExec() const;
- QStringList &defines() { return m_defines; }
- QStringList &dependModules() { return m_dependModules; }
- QStringList &includePaths() { return m_includePaths; }
- QStringList &indexDirs() { return m_indexDirs; }
- QString currentDir() const { return m_currentDir; }
- void setCurrentDir(const QString &path) { m_currentDir = path; }
- QString previousCurrentDir() const { return m_previousCurrentDir; }
- void setPreviousCurrentDir(const QString &path) { m_previousCurrentDir = path; }
-
- QDocPass qdocPass() const { return m_qdocPass; }
- void setQDocPass(const QDocPass &pass) { m_qdocPass = pass; };
- bool preparing() const { return (m_qdocPass == Prepare); }
- bool generating() const { return (m_qdocPass == Generate); }
-
-private:
- void processCommandLineOptions(const QStringList &args);
- void setIncludePaths();
- void setIndexDirs();
- void expandVariables();
- inline void updateLocation(const ConfigVar &cv) const
- {
- if (!cv.m_location.isEmpty())
- const_cast<Config *>(this)->m_lastLocation = cv.m_location;
- }
-
- QStringList m_dependModules {};
- QStringList m_defines {};
- QStringList m_includePaths {};
- QStringList m_indexDirs {};
- QStringList m_exampleFiles {};
- QStringList m_exampleDirs {};
- QString m_currentDir {};
- QString m_previousCurrentDir {};
-
- bool m_showInternal { false };
- static bool m_debug;
- static bool isMetaKeyChar(QChar ch);
- void load(Location location, const QString &fileName);
-
- QString m_prog {};
- Location m_location {};
- Location m_lastLocation {};
- ConfigVarMap m_configVars {};
-
- static QMap<QString, QString> m_uncompressedFiles;
- static QMap<QString, QString> m_extractedDirs;
- static QStack<QString> m_workingDirs;
- static QMap<QString, QStringList> m_includeFilesMap;
- QDocCommandLineParser m_parser {};
-
- QDocPass m_qdocPass { Neither };
-};
-
-struct ConfigStrings
-{
- static QString ALIAS;
- static QString AUTOLINKERRORS;
- static QString BUILDVERSION;
- static QString CLANGDEFINES;
- static QString CODEINDENT;
- static QString CODEPREFIX;
- static QString CODESUFFIX;
- static QString CPPCLASSESPAGE;
- static QString CPPCLASSESTITLE;
- static QString DEFINES;
- static QString DEPENDS;
- static QString DESCRIPTION;
- static QString DOCBOOKEXTENSIONS;
- static QString ENDHEADER;
- static QString EXAMPLEDIRS;
- static QString EXAMPLES;
- static QString EXAMPLESINSTALLPATH;
- static QString EXCLUDEDIRS;
- static QString EXCLUDEFILES;
- static QString EXTRAIMAGES;
- static QString FALSEHOODS;
- static QString FORMATTING;
- static QString HEADERDIRS;
- static QString HEADERS;
- static QString HEADERSCRIPTS;
- static QString HEADERSTYLES;
- static QString HOMEPAGE;
- static QString HOMETITLE;
- static QString IGNOREDIRECTIVES;
- static QString IGNORETOKENS;
- static QString IGNORESINCE;
- static QString IGNOREWORDS;
- static QString IMAGEDIRS;
- static QString IMAGES;
- static QString INCLUDEPATHS;
- static QString INDEXES;
- static QString LANDINGPAGE;
- static QString LANDINGTITLE;
- static QString LANGUAGE;
- static QString LOCATIONINFO;
- static QString LOGPROGRESS;
- static QString MACRO;
- static QString MANIFESTMETA;
- static QString MODULEHEADER;
- static QString NATURALLANGUAGE;
- static QString NAVIGATION;
- static QString NOLINKERRORS;
- static QString OUTPUTDIR;
- static QString OUTPUTFORMATS;
- static QString OUTPUTPREFIXES;
- static QString OUTPUTSUFFIXES;
- static QString PROJECT;
- static QString REDIRECTDOCUMENTATIONTODEVNULL;
- static QString QHP;
- static QString QUOTINGINFORMATION;
- static QString SCRIPTS;
- static QString SHOWINTERNAL;
- static QString SINGLEEXEC;
- static QString SOURCEDIRS;
- static QString SOURCEENCODING;
- static QString SOURCES;
- static QString SPURIOUS;
- static QString STYLESHEETS;
- static QString SYNTAXHIGHLIGHTING;
- static QString TABSIZE;
- static QString TAGFILE;
- static QString TIMESTAMPS;
- static QString TOCTITLES;
- static QString TRANSLATORS;
- static QString URL;
- static QString VERSION;
- static QString VERSIONSYM;
- static QString FILEEXTENSIONS;
- static QString IMAGEEXTENSIONS;
- static QString QMLONLY;
- static QString QMLTYPESPAGE;
- static QString QMLTYPESTITLE;
- static QString WARNINGLIMIT;
-};
-
-#define CONFIG_ALIAS ConfigStrings::ALIAS
-#define CONFIG_AUTOLINKERRORS ConfigStrings::AUTOLINKERRORS
-#define CONFIG_BUILDVERSION ConfigStrings::BUILDVERSION
-#define CONFIG_CLANGDEFINES ConfigStrings::CLANGDEFINES
-#define CONFIG_CODEINDENT ConfigStrings::CODEINDENT
-#define CONFIG_CODEPREFIX ConfigStrings::CODEPREFIX
-#define CONFIG_CODESUFFIX ConfigStrings::CODESUFFIX
-#define CONFIG_CPPCLASSESPAGE ConfigStrings::CPPCLASSESPAGE
-#define CONFIG_CPPCLASSESTITLE ConfigStrings::CPPCLASSESTITLE
-#define CONFIG_DEFINES ConfigStrings::DEFINES
-#define CONFIG_DEPENDS ConfigStrings::DEPENDS
-#define CONFIG_DESCRIPTION ConfigStrings::DESCRIPTION
-#define CONFIG_DOCBOOKEXTENSIONS ConfigStrings::DOCBOOKEXTENSIONS
-#define CONFIG_ENDHEADER ConfigStrings::ENDHEADER
-#define CONFIG_EXAMPLEDIRS ConfigStrings::EXAMPLEDIRS
-#define CONFIG_EXAMPLES ConfigStrings::EXAMPLES
-#define CONFIG_EXAMPLESINSTALLPATH ConfigStrings::EXAMPLESINSTALLPATH
-#define CONFIG_EXCLUDEDIRS ConfigStrings::EXCLUDEDIRS
-#define CONFIG_EXCLUDEFILES ConfigStrings::EXCLUDEFILES
-#define CONFIG_EXTRAIMAGES ConfigStrings::EXTRAIMAGES
-#define CONFIG_FALSEHOODS ConfigStrings::FALSEHOODS
-#define CONFIG_FORMATTING ConfigStrings::FORMATTING
-#define CONFIG_HEADERDIRS ConfigStrings::HEADERDIRS
-#define CONFIG_HEADERS ConfigStrings::HEADERS
-#define CONFIG_HEADERSCRIPTS ConfigStrings::HEADERSCRIPTS
-#define CONFIG_HEADERSTYLES ConfigStrings::HEADERSTYLES
-#define CONFIG_HOMEPAGE ConfigStrings::HOMEPAGE
-#define CONFIG_HOMETITLE ConfigStrings::HOMETITLE
-#define CONFIG_IGNOREDIRECTIVES ConfigStrings::IGNOREDIRECTIVES
-#define CONFIG_IGNORESINCE ConfigStrings::IGNORESINCE
-#define CONFIG_IGNORETOKENS ConfigStrings::IGNORETOKENS
-#define CONFIG_IGNOREWORDS ConfigStrings::IGNOREWORDS
-#define CONFIG_IMAGEDIRS ConfigStrings::IMAGEDIRS
-#define CONFIG_IMAGES ConfigStrings::IMAGES
-#define CONFIG_INCLUDEPATHS ConfigStrings::INCLUDEPATHS
-#define CONFIG_INDEXES ConfigStrings::INDEXES
-#define CONFIG_LANDINGPAGE ConfigStrings::LANDINGPAGE
-#define CONFIG_LANDINGTITLE ConfigStrings::LANDINGTITLE
-#define CONFIG_LANGUAGE ConfigStrings::LANGUAGE
-#define CONFIG_LOCATIONINFO ConfigStrings::LOCATIONINFO
-#define CONFIG_LOGPROGRESS ConfigStrings::LOGPROGRESS
-#define CONFIG_MACRO ConfigStrings::MACRO
-#define CONFIG_MANIFESTMETA ConfigStrings::MANIFESTMETA
-#define CONFIG_MODULEHEADER ConfigStrings::MODULEHEADER
-#define CONFIG_NATURALLANGUAGE ConfigStrings::NATURALLANGUAGE
-#define CONFIG_NAVIGATION ConfigStrings::NAVIGATION
-#define CONFIG_NOLINKERRORS ConfigStrings::NOLINKERRORS
-#define CONFIG_OUTPUTDIR ConfigStrings::OUTPUTDIR
-#define CONFIG_OUTPUTFORMATS ConfigStrings::OUTPUTFORMATS
-#define CONFIG_OUTPUTPREFIXES ConfigStrings::OUTPUTPREFIXES
-#define CONFIG_OUTPUTSUFFIXES ConfigStrings::OUTPUTSUFFIXES
-#define CONFIG_PROJECT ConfigStrings::PROJECT
-#define CONFIG_REDIRECTDOCUMENTATIONTODEVNULL ConfigStrings::REDIRECTDOCUMENTATIONTODEVNULL
-#define CONFIG_QHP ConfigStrings::QHP
-#define CONFIG_QUOTINGINFORMATION ConfigStrings::QUOTINGINFORMATION
-#define CONFIG_SCRIPTS ConfigStrings::SCRIPTS
-#define CONFIG_SHOWINTERNAL ConfigStrings::SHOWINTERNAL
-#define CONFIG_SINGLEEXEC ConfigStrings::SINGLEEXEC
-#define CONFIG_SOURCEDIRS ConfigStrings::SOURCEDIRS
-#define CONFIG_SOURCEENCODING ConfigStrings::SOURCEENCODING
-#define CONFIG_SOURCES ConfigStrings::SOURCES
-#define CONFIG_SPURIOUS ConfigStrings::SPURIOUS
-#define CONFIG_STYLESHEETS ConfigStrings::STYLESHEETS
-#define CONFIG_SYNTAXHIGHLIGHTING ConfigStrings::SYNTAXHIGHLIGHTING
-#define CONFIG_TABSIZE ConfigStrings::TABSIZE
-#define CONFIG_TAGFILE ConfigStrings::TAGFILE
-#define CONFIG_TIMESTAMPS ConfigStrings::TIMESTAMPS
-#define CONFIG_TOCTITLES ConfigStrings::TOCTITLES
-#define CONFIG_TRANSLATORS ConfigStrings::TRANSLATORS
-#define CONFIG_URL ConfigStrings::URL
-#define CONFIG_VERSION ConfigStrings::VERSION
-#define CONFIG_VERSIONSYM ConfigStrings::VERSIONSYM
-#define CONFIG_FILEEXTENSIONS ConfigStrings::FILEEXTENSIONS
-#define CONFIG_IMAGEEXTENSIONS ConfigStrings::IMAGEEXTENSIONS
-#define CONFIG_QMLONLY ConfigStrings::QMLONLY
-#define CONFIG_QMLTYPESPAGE ConfigStrings::QMLTYPESPAGE
-#define CONFIG_QMLTYPESTITLE ConfigStrings::QMLTYPESTITLE
-#define CONFIG_WARNINGLIMIT ConfigStrings::WARNINGLIMIT
-
-inline bool Config::singleExec() const
-{
- return getBool(CONFIG_SINGLEEXEC);
-}
-
-inline bool Config::dualExec() const
-{
- return !getBool(CONFIG_SINGLEEXEC);
-}
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/cppcodemarker.cpp b/src/qdoc/cppcodemarker.cpp
deleted file mode 100644
index 3f3eedab2..000000000
--- a/src/qdoc/cppcodemarker.cpp
+++ /dev/null
@@ -1,669 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- cppcodemarker.cpp
-*/
-
-#include "cppcodemarker.h"
-
-#include "access.h"
-#include "enumnode.h"
-#include "functionnode.h"
-#include "namespacenode.h"
-#include "propertynode.h"
-#include "qmlpropertynode.h"
-#include "text.h"
-#include "tree.h"
-#include "typedefnode.h"
-#include "variablenode.h"
-
-#include <QtCore/qdebug.h>
-#include <QtCore/qregularexpression.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- Returns \c true.
- */
-bool CppCodeMarker::recognizeCode(const QString & /* code */)
-{
- return true;
-}
-
-/*!
- Returns \c true if \a ext is any of a list of file extensions
- for the C++ language.
- */
-bool CppCodeMarker::recognizeExtension(const QString &extension)
-{
- QByteArray ext = extension.toLatin1();
- return ext == "c" || ext == "c++" || ext == "qdoc" || ext == "qtt" || ext == "qtx"
- || ext == "cc" || ext == "cpp" || ext == "cxx" || ext == "ch" || ext == "h"
- || ext == "h++" || ext == "hh" || ext == "hpp" || ext == "hxx";
-}
-
-/*!
- Returns \c true if \a lang is either "C" or "Cpp".
- */
-bool CppCodeMarker::recognizeLanguage(const QString &lang)
-{
- return lang == QLatin1String("C") || lang == QLatin1String("Cpp");
-}
-
-/*!
- Returns the type of atom used to represent C++ code in the documentation.
-*/
-Atom::AtomType CppCodeMarker::atomType() const
-{
- return Atom::Code;
-}
-
-QString CppCodeMarker::markedUpCode(const QString &code, const Node *relative,
- const Location &location)
-{
- return addMarkUp(code, relative, location);
-}
-
-QString CppCodeMarker::markedUpSynopsis(const Node *node, const Node * /* relative */,
- Section::Style style)
-{
- const int MaxEnumValues = 6;
- const FunctionNode *func;
- const PropertyNode *property;
- const VariableNode *variable;
- const EnumNode *enume;
- const TypedefNode *typedeff;
- QString synopsis;
- QString name;
-
- name = taggedNode(node);
- if (style != Section::Details)
- name = linkTag(node, name);
- name = "<@name>" + name + "</@name>";
-
- if (style == Section::Details) {
- if (!node->isRelatedNonmember() && !node->isProxyNode() && !node->parent()->name().isEmpty()
- && !node->parent()->isHeader() && !node->isProperty() && !node->isQmlNode()
- && !node->isJsNode()) {
- name.prepend(taggedNode(node->parent()) + "::");
- }
- }
-
- switch (node->nodeType()) {
- case Node::Namespace:
- case Node::Class:
- case Node::Struct:
- case Node::Union:
- synopsis = Node::nodeTypeString(node->nodeType());
- synopsis += QLatin1Char(' ') + name;
- break;
- case Node::Function:
- func = (const FunctionNode *)node;
- if (style == Section::Details) {
- const QString &templateDecl = node->templateDecl();
- if (!templateDecl.isEmpty())
- synopsis = templateDecl + QLatin1Char(' ');
- }
- if (style != Section::AllMembers && !func->returnType().isEmpty())
- synopsis += typified(func->returnType(), true);
- synopsis += name;
- if (!func->isMacroWithoutParams()) {
- synopsis += QLatin1Char('(');
- if (!func->parameters().isEmpty()) {
- const Parameters &parameters = func->parameters();
- for (int i = 0; i < parameters.count(); ++i) {
- if (i > 0)
- synopsis += ", ";
- QString name = parameters.at(i).name();
- QString type = parameters.at(i).type();
- QString value = parameters.at(i).defaultValue();
- QString paramName;
- if (!name.isEmpty()) {
- synopsis += typified(type, true);
- paramName = name;
- } else {
- paramName = type;
- }
- if (style != Section::AllMembers || name.isEmpty())
- synopsis += "<@param>" + protect(paramName) + "</@param>";
- if (style != Section::AllMembers && !value.isEmpty())
- synopsis += " = " + protect(value);
- }
- }
- synopsis += QLatin1Char(')');
- }
- if (func->isConst())
- synopsis += " const";
-
- if (style == Section::Summary || style == Section::Accessors) {
- if (!func->isNonvirtual())
- synopsis.prepend("virtual ");
- if (func->isFinal())
- synopsis.append(" final");
- if (func->isOverride())
- synopsis.append(" override");
- if (func->isPureVirtual())
- synopsis.append(" = 0");
- if (func->isRef())
- synopsis.append(" &");
- else if (func->isRefRef())
- synopsis.append(" &&");
- } else if (style == Section::AllMembers) {
- if (!func->returnType().isEmpty() && func->returnType() != "void")
- synopsis += " : " + typified(func->returnType());
- } else {
- if (func->isRef())
- synopsis.append(" &");
- else if (func->isRefRef())
- synopsis.append(" &&");
- }
- break;
- case Node::Enum:
- enume = static_cast<const EnumNode *>(node);
- synopsis = "enum ";
- if (enume->isScoped())
- synopsis += "class ";
- synopsis += name;
- if (style == Section::Summary) {
- synopsis += " { ";
-
- QStringList documentedItems = enume->doc().enumItemNames();
- if (documentedItems.isEmpty()) {
- const auto &enumItems = enume->items();
- for (const auto &item : enumItems)
- documentedItems << item.name();
- }
- const QStringList omitItems = enume->doc().omitEnumItemNames();
- for (const auto &item : omitItems)
- documentedItems.removeAll(item);
-
- if (documentedItems.size() > MaxEnumValues) {
- // Take the last element and keep it safe, then elide the surplus.
- const QString last = documentedItems.last();
- documentedItems = documentedItems.mid(0, MaxEnumValues - 1);
- documentedItems += "&hellip;";
- documentedItems += last;
- }
- synopsis += documentedItems.join(QLatin1String(", "));
-
- if (!documentedItems.isEmpty())
- synopsis += QLatin1Char(' ');
- synopsis += QLatin1Char('}');
- }
- break;
- case Node::TypeAlias:
- if (style == Section::Summary)
- synopsis = "(alias) ";
- else if (style == Section::Details) {
- QString templateDecl = node->templateDecl();
- if (!templateDecl.isEmpty())
- synopsis = templateDecl + QLatin1Char(' ');
- }
- synopsis += name;
- break;
- case Node::Typedef:
- typedeff = static_cast<const TypedefNode *>(node);
- if (typedeff->associatedEnum()) {
- synopsis = "flags " + name;
- } else {
- synopsis = "typedef " + name;
- }
- break;
- case Node::Property:
- property = static_cast<const PropertyNode *>(node);
- synopsis = name + " : " + typified(property->qualifiedDataType());
- break;
- case Node::Variable:
- variable = static_cast<const VariableNode *>(node);
- if (style == Section::AllMembers) {
- synopsis = name + " : " + typified(variable->dataType());
- } else {
- synopsis = typified(variable->leftType(), true) + name + protect(variable->rightType());
- }
- break;
- default:
- synopsis = name;
- }
-
- QString extra = CodeMarker::extraSynopsis(node, style);
- if (!extra.isEmpty()) {
- extra.prepend("<@extra>");
- extra.append("</@extra>");
- }
-
- return extra + synopsis;
-}
-
-/*!
- */
-QString CppCodeMarker::markedUpQmlItem(const Node *node, bool summary)
-{
- QString name = taggedQmlNode(node);
- if (summary) {
- name = linkTag(node, name);
- } else if (node->isQmlProperty() || node->isJsProperty()) {
- const QmlPropertyNode *pn = static_cast<const QmlPropertyNode *>(node);
- if (pn->isAttached())
- name.prepend(pn->element() + QLatin1Char('.'));
- }
- name = "<@name>" + name + "</@name>";
- QString synopsis;
- if (node->isQmlProperty() || node->isJsProperty()) {
- const QmlPropertyNode *pn = static_cast<const QmlPropertyNode *>(node);
- synopsis = name + " : " + typified(pn->dataType());
- } else if (node->isFunction(Node::QML) || node->isFunction(Node::JS)) {
- const FunctionNode *func = static_cast<const FunctionNode *>(node);
- if (!func->returnType().isEmpty())
- synopsis = typified(func->returnType(), true) + name;
- else
- synopsis = name;
- synopsis += QLatin1Char('(');
- if (!func->parameters().isEmpty()) {
- const Parameters &parameters = func->parameters();
- for (int i = 0; i < parameters.count(); ++i) {
- if (i > 0)
- synopsis += ", ";
- QString name = parameters.at(i).name();
- QString type = parameters.at(i).type();
- QString paramName;
- if (!name.isEmpty()) {
- synopsis += typified(type, true);
- paramName = name;
- } else {
- paramName = type;
- }
- synopsis += "<@param>" + protect(paramName) + "</@param>";
- }
- }
- synopsis += QLatin1Char(')');
- } else {
- synopsis = name;
- }
-
- QString extra;
- if (summary) {
- if (node->isPreliminary())
- extra += " (preliminary)";
- else if (node->isDeprecated())
- extra += " (deprecated)";
- else if (node->isObsolete())
- extra += " (obsolete)";
- }
-
- if (!extra.isEmpty()) {
- extra.prepend("<@extra>");
- extra.append("</@extra>");
- }
- return synopsis + extra;
-}
-
-QString CppCodeMarker::markedUpName(const Node *node)
-{
- QString name = linkTag(node, taggedNode(node));
- if (node->isFunction() && !node->isMacro())
- name += "()";
- return name;
-}
-
-QString CppCodeMarker::markedUpFullName(const Node *node, const Node *relative)
-{
- if (node->name().isEmpty())
- return "global";
-
- QString fullName;
- for (;;) {
- fullName.prepend(markedUpName(node));
- if (node->parent() == relative || node->parent()->name().isEmpty())
- break;
- fullName.prepend("<@op>::</@op>");
- node = node->parent();
- }
- return fullName;
-}
-
-QString CppCodeMarker::markedUpEnumValue(const QString &enumValue, const Node *relative)
-{
- if (!relative->isEnumType())
- return enumValue;
-
- const Node *node = relative->parent();
- QStringList parts;
- while (!node->isHeader() && node->parent()) {
- parts.prepend(markedUpName(node));
- if (node->parent() == relative || node->parent()->name().isEmpty())
- break;
- node = node->parent();
- }
- if (static_cast<const EnumNode *>(relative)->isScoped())
- parts.append(relative->name());
-
- parts.append(enumValue);
- return parts.join(QLatin1String("<@op>::</@op>"));
-}
-
-QString CppCodeMarker::markedUpIncludes(const QStringList &includes)
-{
- QString code;
-
- for (const auto &include : includes)
- code += "<@preprocessor>#include &lt;<@headerfile>" + include
- + "</@headerfile>&gt;</@preprocessor>\n";
- return code;
-}
-
-QString CppCodeMarker::functionBeginRegExp(const QString &funcName)
-{
- return QLatin1Char('^') + QRegularExpression::escape(funcName) + QLatin1Char('$');
-}
-
-QString CppCodeMarker::functionEndRegExp(const QString & /* funcName */)
-{
- return "^\\}$";
-}
-
-/*
- @char
- @class
- @comment
- @function
- @keyword
- @number
- @op
- @preprocessor
- @string
- @type
-*/
-
-QString CppCodeMarker::addMarkUp(const QString &in, const Node * /* relative */,
- const Location & /* location */)
-{
- static QSet<QString> types;
- static QSet<QString> keywords;
-
- if (types.isEmpty()) {
- // initialize statics
- Q_ASSERT(keywords.isEmpty());
- static const QString typeTable[] = {
- QLatin1String("bool"), QLatin1String("char"), QLatin1String("double"),
- QLatin1String("float"), QLatin1String("int"), QLatin1String("long"),
- QLatin1String("short"), QLatin1String("signed"), QLatin1String("unsigned"),
- QLatin1String("uint"), QLatin1String("ulong"), QLatin1String("ushort"),
- QLatin1String("uchar"), QLatin1String("void"), QLatin1String("qlonglong"),
- QLatin1String("qulonglong"), QLatin1String("qint"), QLatin1String("qint8"),
- QLatin1String("qint16"), QLatin1String("qint32"), QLatin1String("qint64"),
- QLatin1String("quint"), QLatin1String("quint8"), QLatin1String("quint16"),
- QLatin1String("quint32"), QLatin1String("quint64"), QLatin1String("qreal"),
- QLatin1String("cond")
- };
-
- static const QString keywordTable[] = {
- QLatin1String("and"), QLatin1String("and_eq"), QLatin1String("asm"),
- QLatin1String("auto"), QLatin1String("bitand"), QLatin1String("bitor"),
- QLatin1String("break"), QLatin1String("case"), QLatin1String("catch"),
- QLatin1String("class"), QLatin1String("compl"), QLatin1String("const"),
- QLatin1String("const_cast"), QLatin1String("continue"), QLatin1String("default"),
- QLatin1String("delete"), QLatin1String("do"), QLatin1String("dynamic_cast"),
- QLatin1String("else"), QLatin1String("enum"), QLatin1String("explicit"),
- QLatin1String("export"), QLatin1String("extern"), QLatin1String("false"),
- QLatin1String("for"), QLatin1String("friend"), QLatin1String("goto"),
- QLatin1String("if"), QLatin1String("include"), QLatin1String("inline"),
- QLatin1String("monitor"), QLatin1String("mutable"), QLatin1String("namespace"),
- QLatin1String("new"), QLatin1String("not"), QLatin1String("not_eq"),
- QLatin1String("operator"), QLatin1String("or"), QLatin1String("or_eq"),
- QLatin1String("private"), QLatin1String("protected"), QLatin1String("public"),
- QLatin1String("register"), QLatin1String("reinterpret_cast"), QLatin1String("return"),
- QLatin1String("sizeof"), QLatin1String("static"), QLatin1String("static_cast"),
- QLatin1String("struct"), QLatin1String("switch"), QLatin1String("template"),
- QLatin1String("this"), QLatin1String("throw"), QLatin1String("true"),
- QLatin1String("try"), QLatin1String("typedef"), QLatin1String("typeid"),
- QLatin1String("typename"), QLatin1String("union"), QLatin1String("using"),
- QLatin1String("virtual"), QLatin1String("volatile"), QLatin1String("wchar_t"),
- QLatin1String("while"), QLatin1String("xor"), QLatin1String("xor_eq"),
- QLatin1String("synchronized"),
- // Qt specific
- QLatin1String("signals"), QLatin1String("slots"), QLatin1String("emit")
- };
-
- types.reserve(sizeof(typeTable) / sizeof(QString));
- for (int j = sizeof(typeTable) / sizeof(QString) - 1; j; --j)
- types.insert(typeTable[j]);
-
- keywords.reserve(sizeof(keywordTable) / sizeof(QString));
- for (int j = sizeof(keywordTable) / sizeof(QString) - 1; j; --j)
- keywords.insert(keywordTable[j]);
- }
-#define readChar() ch = (i < code.length()) ? code[i++].cell() : EOF
-
- QString code = in;
- QString out;
- QStringView text;
- int braceDepth = 0;
- int parenDepth = 0;
- int i = 0;
- int start = 0;
- int finish = 0;
- QChar ch;
- QRegularExpression classRegExp(QRegularExpression::anchoredPattern("Qt?(?:[A-Z3]+[a-z][A-Za-z]*|t)"));
- QRegularExpression functionRegExp(QRegularExpression::anchoredPattern("q([A-Z][a-z]+)+"));
- QRegularExpression findFunctionRegExp(QStringLiteral("^\\s*\\("));
-
- readChar();
-
- while (ch != QChar(EOF)) {
- QString tag;
- bool target = false;
-
- if (ch.isLetter() || ch == '_') {
- QString ident;
- do {
- ident += ch;
- finish = i;
- readChar();
- } while (ch.isLetterOrNumber() || ch == '_');
-
- if (classRegExp.match(ident).hasMatch()) {
- tag = QStringLiteral("type");
- } else if (functionRegExp.match(ident).hasMatch()) {
- tag = QStringLiteral("func");
- target = true;
- } else if (types.contains(ident)) {
- tag = QStringLiteral("type");
- } else if (keywords.contains(ident)) {
- tag = QStringLiteral("keyword");
- } else if (braceDepth == 0 && parenDepth == 0) {
- if (code.indexOf(findFunctionRegExp, i - 1) == i - 1)
- tag = QStringLiteral("func");
- target = true;
- }
- } else if (ch.isDigit()) {
- do {
- finish = i;
- readChar();
- } while (ch.isLetterOrNumber() || ch == '.');
- tag = QStringLiteral("number");
- } else {
- switch (ch.unicode()) {
- case '+':
- case '-':
- case '!':
- case '%':
- case '^':
- case '&':
- case '*':
- case ',':
- case '.':
- case '<':
- case '=':
- case '>':
- case '?':
- case '[':
- case ']':
- case '|':
- case '~':
- finish = i;
- readChar();
- tag = QStringLiteral("op");
- break;
- case '"':
- finish = i;
- readChar();
-
- while (ch != QChar(EOF) && ch != '"') {
- if (ch == '\\')
- readChar();
- readChar();
- }
- finish = i;
- readChar();
- tag = QStringLiteral("string");
- break;
- case '#':
- finish = i;
- readChar();
- while (ch != QChar(EOF) && ch != '\n') {
- if (ch == '\\')
- readChar();
- finish = i;
- readChar();
- }
- tag = QStringLiteral("preprocessor");
- break;
- case '\'':
- finish = i;
- readChar();
-
- while (ch != QChar(EOF) && ch != '\'') {
- if (ch == '\\')
- readChar();
- readChar();
- }
- finish = i;
- readChar();
- tag = QStringLiteral("char");
- break;
- case '(':
- finish = i;
- readChar();
- ++parenDepth;
- break;
- case ')':
- finish = i;
- readChar();
- --parenDepth;
- break;
- case ':':
- finish = i;
- readChar();
- if (ch == ':') {
- finish = i;
- readChar();
- tag = QStringLiteral("op");
- }
- break;
- case '/':
- finish = i;
- readChar();
- if (ch == '/') {
- do {
- finish = i;
- readChar();
- } while (ch != QChar(EOF) && ch != '\n');
- tag = QStringLiteral("comment");
- } else if (ch == '*') {
- bool metAster = false;
- bool metAsterSlash = false;
-
- finish = i;
- readChar();
-
- while (!metAsterSlash) {
- if (ch == QChar(EOF))
- break;
-
- if (ch == '*')
- metAster = true;
- else if (metAster && ch == '/')
- metAsterSlash = true;
- else
- metAster = false;
- finish = i;
- readChar();
- }
- tag = QStringLiteral("comment");
- } else {
- tag = QStringLiteral("op");
- }
- break;
- case '{':
- finish = i;
- readChar();
- braceDepth++;
- break;
- case '}':
- finish = i;
- readChar();
- braceDepth--;
- break;
- default:
- finish = i;
- readChar();
- }
- }
-
- text = QStringView{code}.mid(start, finish - start);
- start = finish;
-
- if (!tag.isEmpty()) {
- out += QStringLiteral("<@");
- out += tag;
- if (target) {
- out += QStringLiteral(" target=\"");
- out += text;
- out += QStringLiteral("()\"");
- }
- out += QStringLiteral(">");
- }
-
- appendProtectedString(&out, text);
-
- if (!tag.isEmpty()) {
- out += QStringLiteral("</@");
- out += tag;
- out += QStringLiteral(">");
- }
- }
-
- if (start < code.length()) {
- appendProtectedString(&out, QStringView{code}.mid(start));
- }
-
- return out;
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/cppcodemarker.h b/src/qdoc/cppcodemarker.h
deleted file mode 100644
index 6a7515134..000000000
--- a/src/qdoc/cppcodemarker.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef CPPCODEMARKER_H
-#define CPPCODEMARKER_H
-
-#include "codemarker.h"
-
-QT_BEGIN_NAMESPACE
-
-class CppCodeMarker : public CodeMarker
-{
-public:
- CppCodeMarker() = default;
- ~CppCodeMarker() override = default;
-
- bool recognizeCode(const QString &code) override;
- bool recognizeExtension(const QString &ext) override;
- bool recognizeLanguage(const QString &lang) override;
- Atom::AtomType atomType() const override;
- QString markedUpCode(const QString &code, const Node *relative,
- const Location &location) override;
- QString markedUpSynopsis(const Node *node, const Node *relative, Section::Style style) override;
- QString markedUpQmlItem(const Node *node, bool summary) override;
- QString markedUpName(const Node *node) override;
- QString markedUpFullName(const Node *node, const Node *relative) override;
- QString markedUpEnumValue(const QString &enumValue, const Node *relative) override;
- QString markedUpIncludes(const QStringList &includes) override;
- QString functionBeginRegExp(const QString &funcName) override;
- QString functionEndRegExp(const QString &funcName) override;
-
-private:
- QString addMarkUp(const QString &protectedCode, const Node *relative, const Location &location);
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/cppcodeparser.cpp b/src/qdoc/cppcodeparser.cpp
deleted file mode 100644
index eb6a86b80..000000000
--- a/src/qdoc/cppcodeparser.cpp
+++ /dev/null
@@ -1,997 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "cppcodeparser.h"
-
-#include "access.h"
-#include "collectionnode.h"
-#include "config.h"
-#include "examplenode.h"
-#include "externalpagenode.h"
-#include "functionnode.h"
-#include "generator.h"
-#include "headernode.h"
-#include "loggingcategory.h"
-#include "namespacenode.h"
-#include "qdocdatabase.h"
-#include "qmltypenode.h"
-#include "qmlpropertynode.h"
-#include "sharedcommentnode.h"
-
-#include <QtCore/qdebug.h>
-#include <QtCore/qfile.h>
-
-#include <algorithm>
-
-QT_BEGIN_NAMESPACE
-
-/* qmake ignore Q_OBJECT */
-
-QSet<QString> CppCodeParser::m_excludeDirs;
-QSet<QString> CppCodeParser::m_excludeFiles;
-
-static QSet<QString> topicCommands_;
-static QSet<QString> metaCommands_;
-
-/*!
- The constructor initializes some regular expressions
- and initializes the tokenizer variables.
- */
-CppCodeParser::CppCodeParser()
-{
- if (topicCommands_.isEmpty()) {
- topicCommands_ << COMMAND_CLASS << COMMAND_DONTDOCUMENT << COMMAND_ENUM << COMMAND_EXAMPLE
- << COMMAND_EXTERNALPAGE << COMMAND_FN << COMMAND_GROUP << COMMAND_HEADERFILE
- << COMMAND_MACRO << COMMAND_MODULE << COMMAND_NAMESPACE << COMMAND_PAGE
- << COMMAND_PROPERTY << COMMAND_TYPEALIAS << COMMAND_TYPEDEF
- << COMMAND_VARIABLE << COMMAND_QMLTYPE << COMMAND_QMLPROPERTY
- << COMMAND_QMLPROPERTYGROUP // mws 13/03/2019
- << COMMAND_QMLATTACHEDPROPERTY << COMMAND_QMLSIGNAL
- << COMMAND_QMLATTACHEDSIGNAL << COMMAND_QMLMETHOD
- << COMMAND_QMLATTACHEDMETHOD << COMMAND_QMLBASICTYPE << COMMAND_QMLMODULE
- << COMMAND_JSTYPE << COMMAND_JSPROPERTY
- << COMMAND_JSPROPERTYGROUP // mws 13/03/2019
- << COMMAND_JSATTACHEDPROPERTY << COMMAND_JSSIGNAL << COMMAND_JSATTACHEDSIGNAL
- << COMMAND_JSMETHOD << COMMAND_JSATTACHEDMETHOD << COMMAND_JSBASICTYPE
- << COMMAND_JSMODULE << COMMAND_STRUCT << COMMAND_UNION;
- }
- if (metaCommands_.isEmpty()) {
- metaCommands_ = commonMetaCommands();
- metaCommands_ << COMMAND_INHEADERFILE << COMMAND_NEXTPAGE
- << COMMAND_OVERLOAD << COMMAND_PREVIOUSPAGE << COMMAND_QMLINSTANTIATES
- << COMMAND_REIMP << COMMAND_RELATES;
- }
-}
-
-/*!
- The constructor initializes a map of special node types
- for identifying important nodes. And it initializes
- some filters for identifying and excluding certain kinds of files.
- */
-void CppCodeParser::initializeParser()
-{
- CodeParser::initializeParser();
-
- /*
- All these can appear in a C++ namespace. Don't add
- anything that can't be in a C++ namespace.
- */
- m_nodeTypeMap.insert(COMMAND_NAMESPACE, Node::Namespace);
- m_nodeTypeMap.insert(COMMAND_CLASS, Node::Class);
- m_nodeTypeMap.insert(COMMAND_STRUCT, Node::Struct);
- m_nodeTypeMap.insert(COMMAND_UNION, Node::Union);
- m_nodeTypeMap.insert(COMMAND_ENUM, Node::Enum);
- m_nodeTypeMap.insert(COMMAND_TYPEALIAS, Node::TypeAlias);
- m_nodeTypeMap.insert(COMMAND_TYPEDEF, Node::Typedef);
- m_nodeTypeMap.insert(COMMAND_PROPERTY, Node::Property);
- m_nodeTypeMap.insert(COMMAND_VARIABLE, Node::Variable);
-
- m_nodeTypeTestFuncMap.insert(COMMAND_NAMESPACE, &Node::isNamespace);
- m_nodeTypeTestFuncMap.insert(COMMAND_CLASS, &Node::isClassNode);
- m_nodeTypeTestFuncMap.insert(COMMAND_STRUCT, &Node::isStruct);
- m_nodeTypeTestFuncMap.insert(COMMAND_UNION, &Node::isUnion);
- m_nodeTypeTestFuncMap.insert(COMMAND_ENUM, &Node::isEnumType);
- m_nodeTypeTestFuncMap.insert(COMMAND_TYPEALIAS, &Node::isTypeAlias);
- m_nodeTypeTestFuncMap.insert(COMMAND_TYPEDEF, &Node::isTypedef);
- m_nodeTypeTestFuncMap.insert(COMMAND_PROPERTY, &Node::isProperty);
- m_nodeTypeTestFuncMap.insert(COMMAND_VARIABLE, &Node::isVariable);
-
- Config &config = Config::instance();
- QStringList exampleFilePatterns =
- config.getStringList(CONFIG_EXAMPLES + Config::dot + CONFIG_FILEEXTENSIONS);
-
- // Used for excluding dirs and files from the list of example files
- const auto &excludeDirsList = config.getCanonicalPathList(CONFIG_EXCLUDEDIRS);
- m_excludeDirs = QSet<QString>(excludeDirsList.cbegin(), excludeDirsList.cend());
- const auto &excludeFilesList = config.getCanonicalPathList(CONFIG_EXCLUDEDIRS);
- m_excludeFiles = QSet<QString>(excludeFilesList.cbegin(), excludeFilesList.cend());
-
- if (!exampleFilePatterns.isEmpty())
- m_exampleNameFilter = exampleFilePatterns.join(' ');
- else
- m_exampleNameFilter = "*.cpp *.h *.js *.xq *.svg *.xml *.ui";
-
- QStringList exampleImagePatterns =
- config.getStringList(CONFIG_EXAMPLES + Config::dot + CONFIG_IMAGEEXTENSIONS);
-
- if (!exampleImagePatterns.isEmpty())
- m_exampleImageFilter = exampleImagePatterns.join(' ');
- else
- m_exampleImageFilter = "*.png";
-}
-
-/*!
- Clear the map of common node types and call
- the same function in the base class.
- */
-void CppCodeParser::terminateParser()
-{
- m_nodeTypeMap.clear();
- m_nodeTypeTestFuncMap.clear();
- m_excludeDirs.clear();
- m_excludeFiles.clear();
- CodeParser::terminateParser();
-}
-
-/*!
- Returns a list of extensions for header files.
- */
-QStringList CppCodeParser::headerFileNameFilter()
-{
- return QStringList();
-}
-
-/*!
- Returns a list of extensions for source files, i.e. not
- header files.
- */
-QStringList CppCodeParser::sourceFileNameFilter()
-{
- return QStringList();
-}
-
-/*!
- Returns the set of strings reopresenting the topic commands.
- */
-const QSet<QString> &CppCodeParser::topicCommands()
-{
- return topicCommands_;
-}
-
-/*!
- Process the topic \a command found in the \a doc with argument \a arg.
- */
-Node *CppCodeParser::processTopicCommand(const Doc &doc, const QString &command,
- const ArgLocPair &arg)
-{
- ExtraFuncData extra;
- if (command == COMMAND_FN) {
- Q_UNREACHABLE();
- } else if (m_nodeTypeMap.contains(command)) {
- /*
- We should only get in here if the command refers to
- something that can appear in a C++ namespace,
- i.e. a class, another namespace, an enum, a typedef,
- a property or a variable. I think these are handled
- this way to allow the writer to refer to the entity
- without including the namespace qualifier.
- */
- Node::NodeType type = m_nodeTypeMap[command];
- QStringList words = arg.first.split(QLatin1Char(' '));
- QStringList path;
- int idx = 0;
- Node *node = nullptr;
-
- if (type == Node::Variable && words.size() > 1)
- idx = words.size() - 1;
- path = words[idx].split("::");
-
- node = qdb_->findNodeInOpenNamespace(path, m_nodeTypeTestFuncMap[command]);
- if (node == nullptr)
- node = qdb_->findNodeByNameAndType(path, m_nodeTypeTestFuncMap[command]);
- if (node == nullptr) {
- if (isWorthWarningAbout(doc)) {
- doc.location().warning(
- QStringLiteral("Cannot find '%1' specified with '\\%2' in any header file")
- .arg(arg.first)
- .arg(command));
- }
- } else if (node->isAggregate()) {
- if (type == Node::Namespace) {
- auto *ns = static_cast<NamespaceNode *>(node);
- ns->markSeen();
- ns->setWhereDocumented(ns->tree()->camelCaseModuleName());
- }
- /*
- This treats a class as a namespace.
- */
- if ((type == Node::Class) || (type == Node::Namespace) || (type == Node::Struct)
- || (type == Node::Union)) {
- if (path.size() > 1) {
- path.pop_back();
- QString ns = path.join(QLatin1String("::"));
- qdb_->insertOpenNamespace(ns);
- }
- }
- }
- return node;
- } else if (command == COMMAND_EXAMPLE) {
- if (Config::generateExamples) {
- auto *en = new ExampleNode(qdb_->primaryTreeRoot(), arg.first);
- en->setLocation(doc.startLocation());
- setExampleFileLists(en);
- return en;
- }
- } else if (command == COMMAND_EXTERNALPAGE) {
- auto *epn = new ExternalPageNode(qdb_->primaryTreeRoot(), arg.first);
- epn->setLocation(doc.startLocation());
- return epn;
- } else if (command == COMMAND_HEADERFILE) {
- auto *hn = new HeaderNode(qdb_->primaryTreeRoot(), arg.first);
- hn->setLocation(doc.startLocation());
- return hn;
- } else if (command == COMMAND_GROUP) {
- CollectionNode *cn = qdb_->addGroup(arg.first);
- cn->setLocation(doc.startLocation());
- cn->markSeen();
- return cn;
- } else if (command == COMMAND_MODULE) {
- CollectionNode *cn = qdb_->addModule(arg.first);
- cn->setLocation(doc.startLocation());
- cn->markSeen();
- return cn;
- } else if (command == COMMAND_QMLMODULE) {
- QStringList blankSplit = arg.first.split(QLatin1Char(' '));
- CollectionNode *cn = qdb_->addQmlModule(blankSplit[0]);
- cn->setLogicalModuleInfo(blankSplit);
- cn->setLocation(doc.startLocation());
- cn->markSeen();
- return cn;
- } else if (command == COMMAND_JSMODULE) {
- QStringList blankSplit = arg.first.split(QLatin1Char(' '));
- CollectionNode *cn = qdb_->addJsModule(blankSplit[0]);
- cn->setLogicalModuleInfo(blankSplit);
- cn->setLocation(doc.startLocation());
- cn->markSeen();
- return cn;
- } else if (command == COMMAND_PAGE) {
- Node::PageType ptype = Node::ArticlePage;
- QStringList args = arg.first.split(QLatin1Char(' '));
- if (args.size() > 1) {
- QString t = args[1].toLower();
- if (t == "howto")
- ptype = Node::HowToPage;
- else if (t == "api")
- ptype = Node::ApiPage;
- else if (t == "example")
- ptype = Node::ExamplePage;
- else if (t == "overview")
- ptype = Node::OverviewPage;
- else if (t == "tutorial")
- ptype = Node::TutorialPage;
- else if (t == "faq")
- ptype = Node::FAQPage;
- else if (t == "attribution")
- ptype = Node::AttributionPage;
- }
- auto *pn = new PageNode(qdb_->primaryTreeRoot(), args[0], ptype);
- pn->setLocation(doc.startLocation());
- return pn;
- } else if (command == COMMAND_QMLTYPE) {
- QmlTypeNode *qcn = nullptr;
- Node *candidate = qdb_->primaryTreeRoot()->findChildNode(arg.first, Node::QML);
- if (candidate != nullptr && candidate->isQmlType())
- qcn = static_cast<QmlTypeNode *>(candidate);
- else
- qcn = new QmlTypeNode(qdb_->primaryTreeRoot(), arg.first);
- qcn->setLocation(doc.startLocation());
- return qcn;
- } else if (command == COMMAND_JSTYPE) {
- QmlTypeNode *qcn = nullptr;
- Node *candidate = qdb_->primaryTreeRoot()->findChildNode(arg.first, Node::JS);
- if (candidate != nullptr && candidate->isJsType())
- qcn = static_cast<QmlTypeNode *>(candidate);
- else
- qcn = new QmlTypeNode(qdb_->primaryTreeRoot(), arg.first, Node::JsType);
- qcn->setLocation(doc.startLocation());
- return qcn;
- } else if (command == COMMAND_QMLBASICTYPE) {
- auto *node = new QmlBasicTypeNode(qdb_->primaryTreeRoot(), arg.first);
- node->setLocation(doc.startLocation());
- return node;
- } else if (command == COMMAND_JSBASICTYPE) {
- auto *node = new QmlBasicTypeNode(qdb_->primaryTreeRoot(), arg.first, Node::JsBasicType);
- node->setLocation(doc.startLocation());
- return node;
- } else if ((command == COMMAND_QMLSIGNAL) || (command == COMMAND_QMLMETHOD)
- || (command == COMMAND_QMLATTACHEDSIGNAL) || (command == COMMAND_QMLATTACHEDMETHOD)
- || (command == COMMAND_JSSIGNAL) || (command == COMMAND_JSMETHOD)
- || (command == COMMAND_JSATTACHEDSIGNAL) || (command == COMMAND_JSATTACHEDMETHOD)) {
- Q_UNREACHABLE();
- }
- return nullptr;
-}
-
-/*!
- A QML property argument has the form...
-
- <type> <QML-type>::<name>
- <type> <QML-module>::<QML-type>::<name>
-
- This function splits the argument into one of those
- two forms. The three part form is the old form, which
- was used before the creation of Qt Quick 2 and Qt
- Components. A <QML-module> is the QML equivalent of a
- C++ namespace. So this function splits \a arg on "::"
- and stores the parts in \a type, \a module, \a qmlTypeName,
- and \a name, and returns \c true. If any part other than
- \a module is not found, a qdoc warning is emitted and
- false is returned.
-
- \note The two QML types \e{Component} and \e{QtObject}
- never have a module qualifier.
- */
-bool CppCodeParser::splitQmlPropertyArg(const QString &arg, QString &type, QString &module,
- QString &qmlTypeName, QString &name,
- const Location &location)
-{
- QStringList blankSplit = arg.split(QLatin1Char(' '));
- if (blankSplit.size() > 1) {
- type = blankSplit[0];
- QStringList colonSplit(blankSplit[1].split("::"));
- if (colonSplit.size() == 3) {
- module = colonSplit[0];
- qmlTypeName = colonSplit[1];
- name = colonSplit[2];
- return true;
- }
- if (colonSplit.size() == 2) {
- module.clear();
- qmlTypeName = colonSplit[0];
- name = colonSplit[1];
- return true;
- }
- location.warning(
- QStringLiteral("Unrecognizable QML module/component qualifier for %1").arg(arg));
- } else {
- location.warning(QStringLiteral("Missing property type for %1").arg(arg));
- }
- return false;
-}
-
-/*!
- */
-void CppCodeParser::processQmlProperties(const Doc &doc, NodeList &nodes, DocList &docs)
-{
- const TopicList &topics = doc.topicsUsed();
- if (topics.isEmpty())
- return;
-
- QString arg;
- QString type;
- QString group;
- QString module;
- QString property;
- QString qmlTypeName;
-
- Topic topic = topics.at(0);
- bool jsProps = isJSPropertyTopic(topic.topic);
- arg = topic.args;
- if (splitQmlPropertyArg(arg, type, module, qmlTypeName, property, doc.location())) {
- int i = property.indexOf('.');
- if (i != -1)
- group = property.left(i);
- }
-
- NodeList sharedNodes;
- QmlTypeNode *qmlType = qdb_->findQmlType(module, qmlTypeName);
- if (qmlType == nullptr)
- qmlType = new QmlTypeNode(qdb_->primaryTreeRoot(), qmlTypeName);
-
- for (const auto &topicCommand : topics) {
- QString cmd = topicCommand.topic;
- arg = topicCommand.args;
- if ((cmd == COMMAND_QMLPROPERTY) || (cmd == COMMAND_QMLATTACHEDPROPERTY)
- || (cmd == COMMAND_JSPROPERTY) || (cmd == COMMAND_JSATTACHEDPROPERTY)) {
- bool attached = cmd.contains(QLatin1String("attached"));
- if (splitQmlPropertyArg(arg, type, module, qmlTypeName, property, doc.location())) {
- if (qmlType != qdb_->findQmlType(module, qmlTypeName)) {
- doc.startLocation().warning(
- QStringLiteral(
- "All properties in a group must belong to the same type: '%1'")
- .arg(arg));
- continue;
- }
- QmlPropertyNode *existingProperty = qmlType->hasQmlProperty(property, attached);
- if (existingProperty) {
- processMetaCommands(doc, existingProperty);
- if (!doc.body().isEmpty()) {
- doc.startLocation().warning(
- QStringLiteral("QML property documented multiple times: '%1'")
- .arg(arg));
- }
- continue;
- }
- auto *qpn = new QmlPropertyNode(qmlType, property, type, attached);
- qpn->setLocation(doc.startLocation());
- qpn->setGenus(jsProps ? Node::JS : Node::QML);
- nodes.append(qpn);
- docs.append(doc);
- sharedNodes << qpn;
- }
- } else {
- doc.startLocation().warning(
- QStringLiteral("Command '\\%1'; not allowed with QML/JS property commands")
- .arg(cmd));
- }
- }
-
- // Construct a SharedCommentNode (scn) if multiple topics generated
- // valid nodes. Note that it's important to do this *after* constructing
- // the topic nodes - which need to be written to index before the related
- // scn.
- if (sharedNodes.count() > 1) {
- auto *scn = new SharedCommentNode(qmlType, sharedNodes.count(), group);
- scn->setLocation(doc.startLocation());
- nodes.append(scn);
- docs.append(doc);
- for (const auto n : sharedNodes)
- scn->append(n);
- scn->sort();
- }
-}
-
-/*!
- Returns the set of strings representing the common metacommands
- plus some other metacommands.
- */
-const QSet<QString> &CppCodeParser::metaCommands()
-{
- return metaCommands_;
-}
-
-/*!
- Process the metacommand \a command in the context of the
- \a node associated with the topic command and the \a doc.
- \a arg is the argument to the metacommand.
-
- \a node is guaranteed to be non-null.
- */
-void CppCodeParser::processMetaCommand(const Doc &doc, const QString &command,
- const ArgLocPair &argLocPair, Node *node)
-{
- QString arg = argLocPair.first;
- if (command == COMMAND_INHEADERFILE) {
- if (node->isAggregate())
- static_cast<Aggregate *>(node)->addIncludeFile(arg);
- else
- doc.location().warning(QStringLiteral("Ignored '\\%1'").arg(COMMAND_INHEADERFILE));
- } else if (command == COMMAND_OVERLOAD) {
- /*
- Note that this might set the overload flag of the
- primary function. This is ok because the overload
- flags and overload numbers will be resolved later
- in Aggregate::normalizeOverloads().
- */
- if (node->isFunction())
- static_cast<FunctionNode *>(node)->setOverloadFlag();
- else if (node->isSharedCommentNode())
- static_cast<SharedCommentNode *>(node)->setOverloadFlags();
- else
- doc.location().warning(QStringLiteral("Ignored '\\%1'").arg(COMMAND_OVERLOAD));
- } else if (command == COMMAND_REIMP) {
- if (node->parent() && !node->parent()->isInternal()) {
- if (node->isFunction()) {
- auto *fn = static_cast<FunctionNode *>(node);
- // The clang visitor class will have set the
- // qualified name of the ovverridden function.
- // If the name of the overridden function isn't
- // set, issue a warning.
- if (fn->overridesThis().isEmpty() && isWorthWarningAbout(doc)) {
- doc.location().warning(
- QStringLiteral("Cannot find base function for '\\%1' in %2()")
- .arg(COMMAND_REIMP)
- .arg(node->name()),
- QStringLiteral("The function either doesn't exist in any "
- "base class with the same signature or it "
- "exists but isn't virtual."));
- }
- fn->setReimpFlag();
- } else {
- doc.location().warning(QStringLiteral("Ignored '\\%1' in %2")
- .arg(COMMAND_REIMP)
- .arg(node->name()));
- }
- }
- } else if (command == COMMAND_RELATES) {
- QStringList path = arg.split("::");
- Aggregate *aggregate = qdb_->findRelatesNode(path);
- if (aggregate == nullptr)
- aggregate = new ProxyNode(node->root(), arg);
-
- if (node->parent() == aggregate) { // node is already a child of aggregate
- doc.location().warning(QStringLiteral("Invalid '\\%1' (already a member of '%2')")
- .arg(COMMAND_RELATES, arg));
- } else {
- if (node->isAggregate()) {
- doc.location().warning(QStringLiteral("Invalid '\\%1' not allowed in '\\%2'")
- .arg(COMMAND_RELATES, node->nodeTypeString()));
- } else if (!node->isRelatedNonmember() &&
- !node->parent()->isNamespace() && !node->parent()->isHeader()) {
- if (!doc.isInternal()) {
- doc.location().warning(QStringLiteral("Invalid '\\%1' ('%2' must be global)")
- .arg(COMMAND_RELATES, node->name()));
- }
- } else if (!node->isRelatedNonmember() && !node->parent()->isHeader()) {
- aggregate->adoptChild(node);
- node->setRelatedNonmember(true);
- } else {
- /*
- There are multiple \relates commands. This
- one is not the first, so clone the node as
- a child of aggregate.
- */
- Node *clone = node->clone(aggregate);
- if (clone == nullptr) {
- doc.location().warning(
- QStringLiteral("Invalid '\\%1' (multiple uses not allowed in '%2')")
- .arg(COMMAND_RELATES, node->nodeTypeString()));
- } else {
- clone->setRelatedNonmember(true);
- }
- }
- }
- } else if (command == COMMAND_NEXTPAGE) {
- setLink(node, Node::NextLink, arg);
- } else if (command == COMMAND_PREVIOUSPAGE) {
- setLink(node, Node::PreviousLink, arg);
- } else if (command == COMMAND_STARTPAGE) {
- setLink(node, Node::StartLink, arg);
- } else if (command == COMMAND_QMLINHERITS) {
- if (node->name() == arg)
- doc.location().warning(QStringLiteral("%1 tries to inherit itself").arg(arg));
- else if (node->isQmlType() || node->isJsType()) {
- auto *qmlType = static_cast<QmlTypeNode *>(node);
- qmlType->setQmlBaseName(arg);
- }
- } else if (command == COMMAND_QMLINSTANTIATES) {
- if (node->isQmlType() || node->isJsType()) {
- ClassNode *classNode = qdb_->findClassNode(arg.split("::"));
- if (classNode)
- node->setClassNode(classNode);
- else
- doc.location().warning(
- QStringLiteral("C++ class %1 not found: \\instantiates %1").arg(arg));
- } else
- doc.location().warning(QStringLiteral("\\instantiates is only allowed in \\qmltype"));
- } else if (command == COMMAND_QMLDEFAULT) {
- node->markDefault();
- } else if (command == COMMAND_QMLREADONLY) {
- node->markReadOnly(true);
- } else if (command == COMMAND_QMLREQUIRED) {
- if (!node->isQmlProperty())
- doc.location().warning(QStringLiteral("Ignored '\\%1'").arg(COMMAND_QMLREQUIRED));
- else
- static_cast<QmlPropertyNode *>(node)->setRequired();
- } else if ((command == COMMAND_QMLABSTRACT) || (command == COMMAND_ABSTRACT)) {
- if (node->isQmlType() || node->isJsType())
- node->setAbstract(true);
- } else if (command == COMMAND_DEPRECATED) {
- node->setStatus(Node::Obsolete);
- } else if (command == COMMAND_INGROUP || command == COMMAND_INPUBLICGROUP) {
- // Note: \ingroup and \inpublicgroup are the same (and now recognized as such).
- qdb_->addToGroup(arg, node);
- } else if (command == COMMAND_INMODULE) {
- qdb_->addToModule(arg, node);
- } else if (command == COMMAND_INQMLMODULE) {
- qdb_->addToQmlModule(arg, node);
- } else if (command == COMMAND_INJSMODULE) {
- qdb_->addToJsModule(arg, node);
- } else if (command == COMMAND_OBSOLETE) {
- node->setStatus(Node::Obsolete);
- } else if (command == COMMAND_NONREENTRANT) {
- node->setThreadSafeness(Node::NonReentrant);
- } else if (command == COMMAND_PRELIMINARY) {
- // \internal wins.
- if (!node->isInternal())
- node->setStatus(Node::Preliminary);
- } else if (command == COMMAND_INTERNAL) {
- if (!showInternal())
- node->markInternal();
- } else if (command == COMMAND_REENTRANT) {
- node->setThreadSafeness(Node::Reentrant);
- } else if (command == COMMAND_SINCE) {
- node->setSince(arg);
- } else if (command == COMMAND_WRAPPER) {
- node->setWrapper();
- } else if (command == COMMAND_THREADSAFE) {
- node->setThreadSafeness(Node::ThreadSafe);
- } else if (command == COMMAND_TITLE) {
- if (!node->setTitle(arg))
- doc.location().warning(QStringLiteral("Ignored '\\%1'").arg(COMMAND_TITLE));
- else if (node->isExample())
- qdb_->addExampleNode(static_cast<ExampleNode *>(node));
- } else if (command == COMMAND_SUBTITLE) {
- if (!node->setSubtitle(arg))
- doc.location().warning(QStringLiteral("Ignored '\\%1'").arg(COMMAND_SUBTITLE));
- } else if (command == COMMAND_QTVARIABLE) {
- node->setQtVariable(arg);
- if (!node->isModule() && !node->isQmlModule())
- doc.location().warning(
- QStringLiteral(
- "Command '\\%1' is only meaningful in '\\module' and '\\qmlmodule'.")
- .arg(COMMAND_QTVARIABLE));
- } else if (command == COMMAND_QTCMAKEPACKAGE) {
- node->setQtCMakeComponent(arg);
- if (!node->isModule())
- doc.location().warning(
- QStringLiteral("Command '\\%1' is only meaningful in '\\module'.")
- .arg(COMMAND_QTCMAKEPACKAGE));
- } else if (command == COMMAND_NOAUTOLIST) {
- node->setNoAutoList(true);
- }
-}
-
-/*!
- The topic command has been processed, and now \a doc and
- \a node are passed to this function to get the metacommands
- from \a doc and process them one at a time. \a node is the
- node where \a doc resides.
- */
-void CppCodeParser::processMetaCommands(const Doc &doc, Node *node)
-{
- const QStringList metaCommandsUsed = doc.metaCommandsUsed().values();
- for (const auto &command : metaCommandsUsed) {
- const ArgList args = doc.metaCommandArgs(command);
- for (const auto &arg : args)
- processMetaCommand(doc, command, arg, node);
- }
-}
-
-/*!
- Parse QML/JS signal/method topic commands.
- */
-FunctionNode *CppCodeParser::parseOtherFuncArg(const QString &topic, const Location &location,
- const QString &funcArg)
-{
- QString funcName;
- QString returnType;
-
- int leftParen = funcArg.indexOf(QChar('('));
- if (leftParen > 0)
- funcName = funcArg.left(leftParen);
- else
- funcName = funcArg;
- int firstBlank = funcName.indexOf(QChar(' '));
- if (firstBlank > 0) {
- returnType = funcName.left(firstBlank);
- funcName = funcName.right(funcName.length() - firstBlank - 1);
- }
-
- QStringList colonSplit(funcName.split("::"));
- if (colonSplit.size() < 2) {
- QString msg = "Unrecognizable QML module/component qualifier for " + funcArg;
- location.warning(msg.toLatin1().data());
- return nullptr;
- }
- QString moduleName;
- QString elementName;
- if (colonSplit.size() > 2) {
- moduleName = colonSplit[0];
- elementName = colonSplit[1];
- } else {
- elementName = colonSplit[0];
- }
- funcName = colonSplit.last();
-
- Aggregate *aggregate = qdb_->findQmlType(moduleName, elementName);
- if (aggregate == nullptr)
- aggregate = qdb_->findQmlBasicType(moduleName, elementName);
- if (aggregate == nullptr)
- return nullptr;
-
- QString params;
- QStringList leftParenSplit = funcArg.split('(');
- if (leftParenSplit.size() > 1) {
- QStringList rightParenSplit = leftParenSplit[1].split(')');
- if (!rightParenSplit.empty())
- params = rightParenSplit[0];
- }
-
- FunctionNode::Metaness metaness = FunctionNode::getMetanessFromTopic(topic);
- bool attached = topic.contains(QLatin1String("attached"));
- auto *fn = new FunctionNode(metaness, aggregate, funcName, attached);
- fn->setAccess(Access::Public);
- fn->setLocation(location);
- fn->setReturnType(returnType);
- fn->setParameters(params);
- return fn;
-}
-
-/*!
- Parse the macro arguments in \a macroArg ad hoc, without using
- any actual parser. If successful, return a pointer to the new
- FunctionNode for the macro. Otherwise return null. \a location
- is used for reporting errors.
- */
-FunctionNode *CppCodeParser::parseMacroArg(const Location &location, const QString &macroArg)
-{
- QStringList leftParenSplit = macroArg.split('(');
- if (leftParenSplit.isEmpty())
- return nullptr;
- QString macroName;
- FunctionNode *oldMacroNode = nullptr;
- QStringList blankSplit = leftParenSplit[0].split(' ');
- if (!blankSplit.empty()) {
- macroName = blankSplit.last();
- oldMacroNode = qdb_->findMacroNode(macroName);
- }
- QString returnType;
- if (blankSplit.size() > 1) {
- blankSplit.removeLast();
- returnType = blankSplit.join(' ');
- }
- QString params;
- if (leftParenSplit.size() > 1) {
- const QString &afterParen = leftParenSplit.at(1);
- int rightParen = afterParen.indexOf(')');
- if (rightParen >= 0)
- params = afterParen.left(rightParen);
- }
- int i = 0;
- while (i < macroName.length() && !macroName.at(i).isLetter())
- i++;
- if (i > 0) {
- returnType += QChar(' ') + macroName.left(i);
- macroName = macroName.mid(i);
- }
- FunctionNode::Metaness metaness = FunctionNode::MacroWithParams;
- if (params.isEmpty())
- metaness = FunctionNode::MacroWithoutParams;
- auto *macro = new FunctionNode(metaness, qdb_->primaryTreeRoot(), macroName);
- macro->setAccess(Access::Public);
- macro->setLocation(location);
- macro->setReturnType(returnType);
- macro->setParameters(params);
- if (oldMacroNode && macro->compare(oldMacroNode)) {
- location.warning(QStringLiteral("\\macro %1 documented more than once").arg(macroArg));
- oldMacroNode->doc().location().warning(QStringLiteral("(The previous doc is here)"));
- }
- return macro;
-}
-
-void CppCodeParser::setExampleFileLists(ExampleNode *en)
-{
- Config &config = Config::instance();
- QString fullPath = config.getExampleProjectFile(en->name());
- if (fullPath.isEmpty()) {
- QString details = QLatin1String("Example directories: ")
- + config.getCanonicalPathList(CONFIG_EXAMPLEDIRS).join(QLatin1Char(' '));
- en->location().warning(
- QStringLiteral("Cannot find project file for example '%1'").arg(en->name()),
- details);
- return;
- }
-
- QDir exampleDir(QFileInfo(fullPath).dir());
-
- QStringList exampleFiles = Config::getFilesHere(exampleDir.path(), m_exampleNameFilter,
- Location(), m_excludeDirs, m_excludeFiles);
- // Search for all image files under the example project, excluding doc/images directory.
- QSet<QString> excludeDocDirs(m_excludeDirs);
- excludeDocDirs.insert(exampleDir.path() + QLatin1String("/doc/images"));
- QStringList imageFiles = Config::getFilesHere(exampleDir.path(), m_exampleImageFilter,
- Location(), excludeDocDirs, m_excludeFiles);
- if (!exampleFiles.isEmpty()) {
- // move main.cpp to the end, if it exists
- QString mainCpp;
-
- const auto isGeneratedOrMainCpp = [&mainCpp](const QString &fileName) {
- if (fileName.endsWith("/main.cpp")) {
- if (mainCpp.isEmpty())
- mainCpp = fileName;
- return true;
- }
- return fileName.contains("/qrc_") || fileName.contains("/moc_")
- || fileName.contains("/ui_");
- };
-
- exampleFiles.erase(
- std::remove_if(exampleFiles.begin(), exampleFiles.end(), isGeneratedOrMainCpp),
- exampleFiles.end());
-
- if (!mainCpp.isEmpty())
- exampleFiles.append(mainCpp);
-
- // Add any resource and project files
- exampleFiles += Config::getFilesHere(exampleDir.path(),
- QLatin1String("*.qrc *.pro *.qmlproject *.pyproject CMakeLists.txt qmldir"));
- }
-
- const int pathLen = exampleDir.path().size() - en->name().size();
- for (auto &file : exampleFiles)
- file = file.mid(pathLen);
- for (auto &file : imageFiles)
- file = file.mid(pathLen);
-
- en->setFiles(exampleFiles, fullPath.mid(pathLen));
- en->setImages(imageFiles);
-}
-
-/*!
- returns true if \a t is \e {jssignal}, \e {jsmethod},
- \e {jsattachedsignal}, or \e {jsattachedmethod}.
- */
-bool CppCodeParser::isJSMethodTopic(const QString &t)
-{
- return (t == COMMAND_JSSIGNAL || t == COMMAND_JSMETHOD || t == COMMAND_JSATTACHEDSIGNAL
- || t == COMMAND_JSATTACHEDMETHOD);
-}
-
-/*!
- returns true if \a t is \e {qmlsignal}, \e {qmlmethod},
- \e {qmlattachedsignal}, or \e {qmlattachedmethod}.
- */
-bool CppCodeParser::isQMLMethodTopic(const QString &t)
-{
- return (t == COMMAND_QMLSIGNAL || t == COMMAND_QMLMETHOD || t == COMMAND_QMLATTACHEDSIGNAL
- || t == COMMAND_QMLATTACHEDMETHOD);
-}
-
-/*!
- Returns true if \a t is \e {jsproperty}, \e {jspropertygroup},
- or \e {jsattachedproperty}.
- */
-bool CppCodeParser::isJSPropertyTopic(const QString &t)
-{
- return (t == COMMAND_JSPROPERTY || t == COMMAND_JSATTACHEDPROPERTY);
-}
-
-/*!
- Returns true if \a t is \e {qmlproperty}, \e {qmlpropertygroup},
- or \e {qmlattachedproperty}.
- */
-bool CppCodeParser::isQMLPropertyTopic(const QString &t)
-{
- return (t == COMMAND_QMLPROPERTY || t == COMMAND_QMLATTACHEDPROPERTY);
-}
-
-void CppCodeParser::processTopicArgs(const Doc &doc, const QString &topic, NodeList &nodes,
- DocList &docs)
-{
- if (isQMLPropertyTopic(topic) || isJSPropertyTopic(topic)) {
- processQmlProperties(doc, nodes, docs);
- } else {
- ArgList args = doc.metaCommandArgs(topic);
- Node *node = nullptr;
- if (args.size() == 1) {
- if (topic == COMMAND_FN) {
- if (showInternal() || !doc.isInternal())
- node = parserForLanguage("Clang")->parseFnArg(doc.location(), args[0].first);
- } else if (topic == COMMAND_MACRO) {
- node = parseMacroArg(doc.location(), args[0].first);
- } else if (isQMLMethodTopic(topic) || isJSMethodTopic(topic)) {
- node = parseOtherFuncArg(topic, doc.location(), args[0].first);
- } else if (topic == COMMAND_DONTDOCUMENT) {
- qdb_->primaryTree()->addToDontDocumentMap(args[0].first);
- } else {
- node = processTopicCommand(doc, topic, args[0]);
- }
- if (node != nullptr) {
- nodes.append(node);
- docs.append(doc);
- }
- } else if (args.size() > 1) {
- QList<SharedCommentNode *> sharedCommentNodes;
- for (const auto &arg : qAsConst(args)) {
- node = nullptr;
- if (topic == COMMAND_FN) {
- if (showInternal() || !doc.isInternal())
- node = parserForLanguage("Clang")->parseFnArg(doc.location(), arg.first);
- } else if (topic == COMMAND_MACRO) {
- node = parseMacroArg(doc.location(), arg.first);
- } else if (isQMLMethodTopic(topic) || isJSMethodTopic(topic)) {
- node = parseOtherFuncArg(topic, doc.location(), arg.first);
- } else {
- node = processTopicCommand(doc, topic, arg);
- }
- if (node != nullptr) {
- bool found = false;
- for (SharedCommentNode *scn : sharedCommentNodes) {
- if (scn->parent() == node->parent()) {
- scn->append(node);
- found = true;
- break;
- }
- }
- if (!found) {
- auto *scn = new SharedCommentNode(node);
- sharedCommentNodes.append(scn);
- nodes.append(scn);
- docs.append(doc);
- }
- }
- }
- for (auto *scn : sharedCommentNodes)
- scn->sort();
- }
- }
-}
-
-void CppCodeParser::processMetaCommands(NodeList &nodes, DocList &docs)
-{
- QList<Doc>::Iterator d = docs.begin();
- for (const auto &node : nodes) {
- if (node != nullptr) {
- processMetaCommands(*d, node);
- node->setDoc(*d);
- checkModuleInclusion(node);
- if (node->isAggregate()) {
- auto *aggregate = static_cast<Aggregate *>(node);
- if (aggregate->includeFiles().isEmpty()) {
- Aggregate *parent = aggregate;
- while (parent->physicalModuleName().isEmpty() && (parent->parent() != nullptr))
- parent = parent->parent();
- if (parent == aggregate)
- aggregate->addIncludeFile(aggregate->name());
- else
- aggregate->setIncludeFiles(parent->includeFiles());
- }
- }
- }
- ++d;
- }
-}
-
-bool CppCodeParser::hasTooManyTopics(const Doc &doc) const
-{
- const QSet<QString> topicCommandsUsed = topicCommands() & doc.metaCommandsUsed();
- if (topicCommandsUsed.count() > 1) {
- bool ok = true;
- for (const auto &t : topicCommandsUsed) {
- if (!t.startsWith(QLatin1String("qml")) && !t.startsWith(QLatin1String("js")))
- ok = false;
- }
- if (ok)
- return false;
- QString topicList;
- for (const auto &t : topicCommandsUsed)
- topicList += QLatin1String(" \\") + t + QLatin1Char(',');
- topicList[topicList.lastIndexOf(',')] = '.';
- int i = topicList.lastIndexOf(',');
- Q_ASSERT(i >= 0); // we had at least two commas
- topicList[i] = ' ';
- topicList.insert(i + 1, "and");
- doc.location().warning(
- QStringLiteral("Multiple topic commands found in comment:%1").arg(topicList));
- return true;
- }
- return false;
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/cppcodeparser.h b/src/qdoc/cppcodeparser.h
deleted file mode 100644
index f438a0082..000000000
--- a/src/qdoc/cppcodeparser.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef CPPCODEPARSER_H
-#define CPPCODEPARSER_H
-
-#include "codeparser.h"
-
-QT_BEGIN_NAMESPACE
-
-class ClassNode;
-class ExampleNode;
-class FunctionNode;
-class Aggregate;
-
-class CppCodeParser : public CodeParser
-{
- struct ExtraFuncData
- {
- Aggregate *root; // Used as the parent.
- Node::NodeType type; // The node type: Function, etc.
- bool isAttached; // If true, the method is attached.
- bool isMacro; // If true, we are parsing a macro signature.
- ExtraFuncData() : root(nullptr), type(Node::Function), isAttached(false), isMacro(false) {}
- };
-
-public:
- CppCodeParser();
-
- void initializeParser() override;
- void terminateParser() override;
- QString language() override { return QStringLiteral("Cpp"); }
- QStringList headerFileNameFilter() override;
- QStringList sourceFileNameFilter() override;
- FunctionNode *parseMacroArg(const Location &location, const QString &macroArg);
- FunctionNode *parseOtherFuncArg(const QString &topic, const Location &location,
- const QString &funcArg);
- static bool isJSMethodTopic(const QString &t);
- static bool isQMLMethodTopic(const QString &t);
- static bool isJSPropertyTopic(const QString &t);
- static bool isQMLPropertyTopic(const QString &t);
-
-protected:
- static const QSet<QString> &topicCommands();
- static const QSet<QString> &metaCommands();
- virtual Node *processTopicCommand(const Doc &doc, const QString &command,
- const ArgLocPair &arg);
- void processQmlProperties(const Doc &doc, NodeList &nodes, DocList &docs);
- bool splitQmlPropertyArg(const QString &arg, QString &type, QString &module, QString &element,
- QString &name, const Location &location);
- void processMetaCommand(const Doc &doc, const QString &command, const ArgLocPair &argLocPair,
- Node *node);
- void processMetaCommands(const Doc &doc, Node *node);
- void processMetaCommands(NodeList &nodes, DocList &docs);
- void processTopicArgs(const Doc &doc, const QString &topic, NodeList &nodes, DocList &docs);
- bool hasTooManyTopics(const Doc &doc) const;
-
-private:
- void setExampleFileLists(ExampleNode *en);
-
-protected:
- typedef bool (Node::*NodeTypeTestFunc)() const;
- QMap<QString, NodeTypeTestFunc> m_nodeTypeTestFuncMap;
- QMap<QString, Node::NodeType> m_nodeTypeMap;
-
-private:
- static QSet<QString> m_excludeDirs;
- static QSet<QString> m_excludeFiles;
- QString m_exampleNameFilter;
- QString m_exampleImageFilter;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/doc.cpp b/src/qdoc/doc.cpp
deleted file mode 100644
index 742dbffe9..000000000
--- a/src/qdoc/doc.cpp
+++ /dev/null
@@ -1,510 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "doc.h"
-
-#include "atom.h"
-#include "config.h"
-#include "codemarker.h"
-#include "docparser.h"
-#include "docprivate.h"
-#include "generator.h"
-#include "qmltypenode.h"
-#include "quoter.h"
-#include "text.h"
-
-QT_BEGIN_NAMESPACE
-
-DocUtilities &Doc::m_utilities = DocUtilities::instance();
-
-/*!
- Parse the qdoc comment \a source. Build up a list of all the topic
- commands found including their arguments. This constructor is used
- when there can be more than one topic command in theqdoc comment.
- Normally, there is only one topic command in a qdoc comment, but in
- QML documentation, there is the case where the qdoc \e{qmlproperty}
- command can appear multiple times in a qdoc comment.
- */
-Doc::Doc(const Location &start_loc, const Location &end_loc, const QString &source,
- const QSet<QString> &metaCommandSet, const QSet<QString> &topics)
-{
- priv = new DocPrivate(start_loc, end_loc, source);
- DocParser parser;
- parser.parse(source, priv, metaCommandSet, topics);
-}
-
-Doc::Doc(const Doc &doc) : priv(nullptr)
-{
- operator=(doc);
-}
-
-Doc::~Doc()
-{
- if (priv && priv->deref())
- delete priv;
-}
-
-Doc &Doc::operator=(const Doc &doc)
-{
- if (doc.priv)
- doc.priv->ref();
- if (priv && priv->deref())
- delete priv;
- priv = doc.priv;
- return *this;
-}
-
-/*!
- Returns the starting location of a qdoc comment.
- */
-const Location &Doc::location() const
-{
- static const Location dummy;
- return priv == nullptr ? dummy : priv->start_loc;
-}
-
-/*!
- Returns the starting location of a qdoc comment.
- */
-const Location &Doc::startLocation() const
-{
- return location();
-}
-
-const QString &Doc::source() const
-{
- static QString null;
- return priv == nullptr ? null : priv->src;
-}
-
-bool Doc::isEmpty() const
-{
- return priv == nullptr || priv->src.isEmpty();
-}
-
-const Text &Doc::body() const
-{
- static const Text dummy;
- return priv == nullptr ? dummy : priv->text;
-}
-
-Text Doc::briefText(bool inclusive) const
-{
- return body().subText(Atom::BriefLeft, Atom::BriefRight, nullptr, inclusive);
-}
-
-Text Doc::trimmedBriefText(const QString &className) const
-{
- QString classNameOnly = className;
- if (className.contains("::"))
- classNameOnly = className.split("::").last();
-
- Text originalText = briefText();
- Text resultText;
- const Atom *atom = originalText.firstAtom();
- if (atom) {
- QString briefStr;
- QString whats;
- /*
- This code is really ugly. The entire \brief business
- should be rethought.
- */
- while (atom) {
- if (atom->type() == Atom::AutoLink || atom->type() == Atom::String) {
- briefStr += atom->string();
- } else if (atom->type() == Atom::C) {
- briefStr += Generator::plainCode(atom->string());
- }
- atom = atom->next();
- }
-
- QStringList w = briefStr.split(QLatin1Char(' '));
- if (!w.isEmpty() && w.first() == "Returns") {
- } else {
- if (!w.isEmpty() && w.first() == "The")
- w.removeFirst();
-
- if (!w.isEmpty() && (w.first() == className || w.first() == classNameOnly))
- w.removeFirst();
-
- if (!w.isEmpty()
- && ((w.first() == "class") || (w.first() == "function") || (w.first() == "macro")
- || (w.first() == "widget") || (w.first() == "namespace")
- || (w.first() == "header")))
- w.removeFirst();
-
- if (!w.isEmpty() && (w.first() == "is" || w.first() == "provides"))
- w.removeFirst();
-
- if (!w.isEmpty() && (w.first() == "a" || w.first() == "an"))
- w.removeFirst();
- }
-
- whats = w.join(' ');
-
- if (whats.endsWith(QLatin1Char('.')))
- whats.truncate(whats.length() - 1);
-
- if (!whats.isEmpty())
- whats[0] = whats[0].toUpper();
-
- // ### move this once \brief is abolished for properties
- resultText << whats;
- }
- return resultText;
-}
-
-Text Doc::legaleseText() const
-{
- if (priv == nullptr || !priv->hasLegalese)
- return Text();
- else
- return body().subText(Atom::LegaleseLeft, Atom::LegaleseRight);
-}
-
-QSet<QString> Doc::parameterNames() const
-{
- return priv == nullptr ? QSet<QString>() : priv->params;
-}
-
-QStringList Doc::enumItemNames() const
-{
- return priv == nullptr ? QStringList() : priv->enumItemList;
-}
-
-QStringList Doc::omitEnumItemNames() const
-{
- return priv == nullptr ? QStringList() : priv->omitEnumItemList;
-}
-
-QSet<QString> Doc::metaCommandsUsed() const
-{
- return priv == nullptr ? QSet<QString>() : priv->metacommandsUsed;
-}
-
-/*!
- Returns true if the set of metacommands used in the doc
- comment contains \e {internal}.
- */
-bool Doc::isInternal() const
-{
- return metaCommandsUsed().contains(QLatin1String("internal"));
-}
-
-/*!
- Returns true if the set of metacommands used in the doc
- comment contains \e {reimp}.
- */
-bool Doc::isMarkedReimp() const
-{
- return metaCommandsUsed().contains(QLatin1String("reimp"));
-}
-
-/*!
- Returns a reference to the list of topic commands used in the
- current qdoc comment. Normally there is only one, but there
- can be multiple \e{qmlproperty} commands, for example.
- */
-TopicList Doc::topicsUsed() const
-{
- return priv == nullptr ? TopicList() : priv->topics_;
-}
-
-ArgList Doc::metaCommandArgs(const QString &metacommand) const
-{
- return priv == nullptr ? ArgList() : priv->metaCommandMap.value(metacommand);
-}
-
-QList<Text> Doc::alsoList() const
-{
- return priv == nullptr ? QList<Text>() : priv->alsoList;
-}
-
-bool Doc::hasTableOfContents() const
-{
- return priv && priv->extra && !priv->extra->tableOfContents_.isEmpty();
-}
-
-bool Doc::hasKeywords() const
-{
- return priv && priv->extra && !priv->extra->keywords_.isEmpty();
-}
-
-bool Doc::hasTargets() const
-{
- return priv && priv->extra && !priv->extra->targets_.isEmpty();
-}
-
-const QList<Atom *> &Doc::tableOfContents() const
-{
- priv->constructExtra();
- return priv->extra->tableOfContents_;
-}
-
-const QList<int> &Doc::tableOfContentsLevels() const
-{
- priv->constructExtra();
- return priv->extra->tableOfContentsLevels_;
-}
-
-const QList<Atom *> &Doc::keywords() const
-{
- priv->constructExtra();
- return priv->extra->keywords_;
-}
-
-const QList<Atom *> &Doc::targets() const
-{
- priv->constructExtra();
- return priv->extra->targets_;
-}
-
-QStringMultiMap *Doc::metaTagMap() const
-{
- return priv && priv->extra ? &priv->extra->metaMap_ : nullptr;
-}
-
-void Doc::initialize()
-{
- Config &config = Config::instance();
- DocParser::initialize(config);
-
- QmlTypeNode::qmlOnly = config.getBool(CONFIG_QMLONLY);
- QStringMap reverseAliasMap;
-
- for (const auto &a : config.subVars(CONFIG_ALIAS)) {
- QString alias = config.getString(CONFIG_ALIAS + Config::dot + a);
- if (reverseAliasMap.contains(alias)) {
- config.lastLocation().warning(QStringLiteral("Command name '\\%1' cannot stand"
- " for both '\\%2' and '\\%3'")
- .arg(alias)
- .arg(reverseAliasMap[alias])
- .arg(a));
- } else {
- reverseAliasMap.insert(alias, a);
- }
- m_utilities.aliasMap.insert(a, alias);
- }
-
- for (const auto &macroName : config.subVars(CONFIG_MACRO)) {
- QString macroDotName = CONFIG_MACRO + Config::dot + macroName;
- Macro macro;
- macro.numParams = -1;
- macro.defaultDef = config.getString(macroDotName);
- if (!macro.defaultDef.isEmpty()) {
- macro.defaultDefLocation = config.lastLocation();
- macro.numParams = Config::numParams(macro.defaultDef);
- }
- bool silent = false;
-
- for (const auto &f : config.subVars(macroDotName)) {
- QString def = config.getString(macroDotName + Config::dot + f);
- if (!def.isEmpty()) {
- macro.otherDefs.insert(f, def);
- int m = Config::numParams(def);
- if (macro.numParams == -1)
- macro.numParams = m;
- else if (macro.numParams != m) {
- if (!silent) {
- QString other = QStringLiteral("default");
- if (macro.defaultDef.isEmpty())
- other = macro.otherDefs.constBegin().key();
- config.lastLocation().warning(QStringLiteral("Macro '\\%1' takes"
- " inconsistent number"
- " of arguments (%2"
- " %3, %4 %5)")
- .arg(macroName)
- .arg(f)
- .arg(m)
- .arg(other)
- .arg(macro.numParams));
- silent = true;
- }
- if (macro.numParams < m)
- macro.numParams = m;
- }
- }
- }
- if (macro.numParams != -1)
- m_utilities.macroHash.insert(macroName, macro);
- }
-}
-
-/*!
- All the heap allocated variables are deleted.
- */
-void Doc::terminate()
-{
- m_utilities.aliasMap.clear();
- m_utilities.cmdHash.clear();
- m_utilities.macroHash.clear();
- DocParser::terminate();
-}
-
-QString Doc::alias(const QString &english)
-{
- return m_utilities.aliasMap.value(english, english);
-}
-
-/*!
- Trims the deadwood out of \a str. i.e., this function
- cleans up \a str.
- */
-void Doc::trimCStyleComment(Location &location, QString &str)
-{
- QString cleaned;
- Location m = location;
- bool metAsterColumn = true;
- int asterColumn = location.columnNo() + 1;
- int i;
-
- for (i = 0; i < str.length(); ++i) {
- if (m.columnNo() == asterColumn) {
- if (str[i] != '*')
- break;
- cleaned += ' ';
- metAsterColumn = true;
- } else {
- if (str[i] == '\n') {
- if (!metAsterColumn)
- break;
- metAsterColumn = false;
- }
- cleaned += str[i];
- }
- m.advance(str[i]);
- }
- if (cleaned.length() == str.length())
- str = cleaned;
-
- for (int i = 0; i < 3; ++i)
- location.advance(str[i]);
- str = str.mid(3, str.length() - 5);
-}
-
-QString Doc::resolveFile(const Location &location, const QString &fileName,
- QString *userFriendlyFilePath)
-{
- const QString result = Config::findFile(location, DocParser::exampleFiles,
- DocParser::exampleDirs, fileName, userFriendlyFilePath);
- qCDebug(lcQdoc).noquote().nospace()
- << __FUNCTION__ << "(location=" << location.fileName() << ':' << location.lineNo()
- << ", fileName=\"" << fileName << "\"), resolved to \"" << result;
- return result;
-}
-
-CodeMarker *Doc::quoteFromFile(const Location &location, Quoter &quoter, const QString &fileName)
-{
- quoter.reset();
-
- QString code;
-
- QString userFriendlyFilePath;
- const QString filePath = resolveFile(location, fileName, &userFriendlyFilePath);
- if (filePath.isEmpty()) {
- QString details = QLatin1String("Example directories: ")
- + DocParser::exampleDirs.join(QLatin1Char(' '));
- if (!DocParser::exampleFiles.isEmpty())
- details += QLatin1String(", example files: ")
- + DocParser::exampleFiles.join(QLatin1Char(' '));
- location.warning(QStringLiteral("Cannot find file to quote from: '%1'").arg(fileName),
- details);
- } else {
- QFile inFile(filePath);
- if (!inFile.open(QFile::ReadOnly)) {
- location.warning(QStringLiteral("Cannot open file to quote from: '%1'")
- .arg(userFriendlyFilePath));
- } else {
- QTextStream inStream(&inFile);
- code = DocParser::untabifyEtc(inStream.readAll());
- }
- }
-
- QString dirPath = QFileInfo(filePath).path();
- CodeMarker *marker = CodeMarker::markerForFileName(fileName);
- quoter.quoteFromFile(userFriendlyFilePath, code, marker->markedUpCode(code, nullptr, location));
- return marker;
-}
-
-QString Doc::canonicalTitle(const QString &title)
-{
- // The code below is equivalent to the following chunk, but _much_
- // faster (accounts for ~10% of total running time)
- //
- // QRegularExpression attributeExpr("[^A-Za-z0-9]+");
- // QString result = title.toLower();
- // result.replace(attributeExpr, " ");
- // result = result.simplified();
- // result.replace(QLatin1Char(' '), QLatin1Char('-'));
-
- QString result;
- result.reserve(title.size());
-
- bool dashAppended = false;
- bool begun = false;
- int lastAlnum = 0;
- for (int i = 0; i != title.size(); ++i) {
- uint c = title.at(i).unicode();
- if (c >= 'A' && c <= 'Z')
- c += 'a' - 'A';
- bool alnum = (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9');
- if (alnum) {
- result += QLatin1Char(c);
- begun = true;
- dashAppended = false;
- lastAlnum = result.size();
- } else if (!dashAppended) {
- if (begun)
- result += QLatin1Char('-');
- dashAppended = true;
- }
- }
- result.truncate(lastAlnum);
- return result;
-}
-
-void Doc::detach()
-{
- if (priv == nullptr) {
- priv = new DocPrivate;
- return;
- }
- if (priv->count == 1)
- return;
-
- --priv->count;
-
- DocPrivate *newPriv = new DocPrivate(*priv);
- newPriv->count = 1;
- if (priv->extra)
- newPriv->extra = new DocPrivateExtra(*priv->extra);
-
- priv = newPriv;
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/doc.h b/src/qdoc/doc.h
deleted file mode 100644
index 55153b7e6..000000000
--- a/src/qdoc/doc.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- doc.h
-*/
-
-#ifndef DOC_H
-#define DOC_H
-
-#include "location.h"
-
-#include "docutilities.h"
-#include "topic.h"
-
-#include <QtCore/qmap.h>
-#include <QtCore/qset.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-class Atom;
-class CodeMarker;
-class DocPrivate;
-class Quoter;
-class Text;
-
-typedef QPair<QString, Location> ArgLocPair;
-typedef QList<ArgLocPair> ArgList;
-typedef QMultiMap<QString, QString> QStringMultiMap;
-
-class Doc
-{
-public:
- // the order is important
- enum Sections {
- NoSection = -2,
- Part = -1,
- Chapter = 1,
- Section1 = 1,
- Section2 = 2,
- Section3 = 3,
- Section4 = 4
- };
-
- Doc() = default;
- Doc(const Location &start_loc, const Location &end_loc, const QString &source,
- const QSet<QString> &metaCommandSet, const QSet<QString> &topics);
- Doc(const Doc &doc);
- ~Doc();
-
- Doc &operator=(const Doc &doc);
-
- const Location &location() const;
- const Location &startLocation() const;
- bool isEmpty() const;
- const QString &source() const;
- const Text &body() const;
- Text briefText(bool inclusive = false) const;
- Text trimmedBriefText(const QString &className) const;
- Text legaleseText() const;
- QSet<QString> parameterNames() const;
- QStringList enumItemNames() const;
- QStringList omitEnumItemNames() const;
- QSet<QString> metaCommandsUsed() const;
- TopicList topicsUsed() const;
- ArgList metaCommandArgs(const QString &metaCommand) const;
- QList<Text> alsoList() const;
- bool hasTableOfContents() const;
- bool hasKeywords() const;
- bool hasTargets() const;
- bool isInternal() const;
- bool isMarkedReimp() const;
- const QList<Atom *> &tableOfContents() const;
- const QList<int> &tableOfContentsLevels() const;
- const QList<Atom *> &keywords() const;
- const QList<Atom *> &targets() const;
- QStringMultiMap *metaTagMap() const;
-
- static void initialize();
- static void terminate();
- static QString alias(const QString &english);
- static void trimCStyleComment(Location &location, QString &str);
- static QString resolveFile(const Location &location, const QString &fileName,
- QString *userFriendlyFilePath = nullptr);
- static CodeMarker *quoteFromFile(const Location &location, Quoter &quoter,
- const QString &fileName);
- static QString canonicalTitle(const QString &title);
-
-private:
- void detach();
- DocPrivate *priv { nullptr };
- static DocUtilities &m_utilities;
-};
-Q_DECLARE_TYPEINFO(Doc, Q_MOVABLE_TYPE);
-typedef QList<Doc> DocList;
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/doc/config/qdoc.qdocconf b/src/qdoc/doc/config/qdoc.qdocconf
deleted file mode 100644
index 74c69f8c0..000000000
--- a/src/qdoc/doc/config/qdoc.qdocconf
+++ /dev/null
@@ -1,64 +0,0 @@
-include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
-include($QT_INSTALL_DOCS/config/exampleurl-qttools.qdocconf)
-
-project = QDoc
-description = QDoc Manual
-version = $QT_VERSION
-moduleheader =
-
-sourcedirs = ..
-
-exampledirs = .. \
- ../examples
-
-imagedirs = ../images \
- ../../../../../qtbase/src/widgets/doc/images
-
-tagfile = ../html/qdoc.tags
-
-examples.fileextensions = "*.cpp *.h *.js *.xq *.svg *.xml *.ui *.qhp *.qhcp *.qml *.css *.qdoc *.qdocinc *.sample"
-
-qhp.projects = QDoc
-
-qhp.QDoc.file = qdoc.qhp
-qhp.QDoc.namespace = org.qt-project.qdoc.$QT_VERSION_TAG
-qhp.QDoc.virtualFolder = qdoc
-qhp.QDoc.indexTitle = QDoc Manual
-qhp.QDoc.indexRoot =
-
-qhp.QDoc.filterAttributes = qdoc $QT_VERSION qtrefdoc
-qhp.QDoc.customFilters.QDoc.name = QDoc $QT_VERSION
-qhp.QDoc.customFilters.QDoc.filterAttributes = qdoc $QT_VERSION
-
-qhp.QDoc.subprojects = overviews
-qhp.QDoc.subprojects.overviews.title = Overviews
-qhp.QDoc.subprojects.overviews.indexTitle = QDoc Manual
-qhp.QDoc.subprojects.overviews.selectors = doc:page
-
-depends += \
- qtassistant \
- qtconcurrent \
- qtcore \
- qtdbus \
- qtdesigner \
- qtdoc \
- qthelp \
- qtimageformats \
- qtgui \
- qtlinguist \
- qtnetwork \
- qtopengl \
- qtprintsupport \
- qtqml \
- qtquick \
- qtquickcontrols \
- qtsql \
- qtsvg \
- qttestlib \
- qtuitools \
- qtwidgets \
- qtxml
-
-ignorewords += QDoc
-
-navigation.landingpage = "QDoc Manual"
diff --git a/src/qdoc/doc/corefeatures.qdoc b/src/qdoc/doc/corefeatures.qdoc
deleted file mode 100644
index 1bb8e9fb1..000000000
--- a/src/qdoc/doc/corefeatures.qdoc
+++ /dev/null
@@ -1,35 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \page corefeatures.html
- \title Core Features
-
- \input examples/signalandslots.qdocinc
- \input examples/objectmodel.qdocinc
- \input examples/layoutmanagement.qdocinc
-*/
diff --git a/src/qdoc/doc/examples/cpp.qdoc.sample b/src/qdoc/doc/examples/cpp.qdoc.sample
deleted file mode 100644
index 0524a6756..000000000
--- a/src/qdoc/doc/examples/cpp.qdoc.sample
+++ /dev/null
@@ -1,126 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//![class]
-/*!
- \class QCache
- \brief The QCache class is a template class that provides a cache.
-
- \ingroup tools
- \ingroup shared
-
- \reentrant
-
- QCache\<Key, T\> defines a cache that stores objects of type T
- associated with keys of type Key. For example, here's the
- definition of a cache that stores objects of type Employee
- associated with an integer key:
-
- \snippet code/doc_src_qcache.cpp 0
-
- Here's how to insert an object in the cache:
-
- \snippet code/doc_src_qcache.cpp 1
-
- ... detailed description omitted
-
- \sa QPixmapCache, QHash, QMap
-*/
-//![class]
-
-//![function]
-/*!
- \fn QString &QString::remove(int position, int n)
-
- Removes \a n characters from the string, starting at the given \a
- position index, and returns a reference to the string.
-
- If the specified \a position index is within the string, but \a
- position + \a n is beyond the end of the string, the string is
- truncated at the specified \a position.
-
- \snippet qstring/main.cpp 37
-
- \sa insert(), replace()
-*/
-QString &QString::remove(int pos, int len)
-//! [function]
-
-//! [return]
-/*!
- Returns \c true if a QScroller object was already created for \a target; \c false otherwise.
-
- \sa scroller()
-*/
-bool QScroller::hasScroller(QObject *target)
-//! [return]
-
-//! [property]
-/*!
- \property QVariantAnimation::duration
- \brief the duration of the animation
-
- This property describes the duration in milliseconds of the
- animation. The default duration is 250 milliseconds.
-
- \sa QAbstractAnimation::duration()
- */
-int QVariantAnimation::duration() const
-//! [property]
-
-//! [signals]
-/*!
- \fn QAbstractTransition::triggered()
-
- This signal is emitted when the transition has been triggered (after
- onTransition() has been called).
-*/
-//! [signals]
-
-//! [enums]
-/*!
- \enum QSql::TableType
-
- This enum type describes types of SQL tables.
-
- \value Tables All the tables visible to the user.
- \value SystemTables Internal tables used by the database.
- \value Views All the views visible to the user.
- \value AllTables All of the above.
-*/
-//! [enums]
-
-//! [overloaded notifier]
-/*!
-\property QSpinBox::value
-\brief the value of the spin box
-
-setValue() will emit valueChanged() if the new value is different
-from the old one. The \l{QSpinBox::}{value} property has a second notifier
-signal which includes the spin box's prefix and suffix.
-*/
-//! [overloaded notifier]
diff --git a/src/qdoc/doc/examples/main.cpp b/src/qdoc/doc/examples/main.cpp
deleted file mode 100644
index ed56efce7..000000000
--- a/src/qdoc/doc/examples/main.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QApplication>
-#include <QPushButton>
-
-int main(int argc, char *argv[])
-{
- QApplication app(argc, argv);
-
- QPushButton hello("Hello world!");
- hello.resize(100, 30);
-
- hello.show();
- return app.exec();
-}
diff --git a/src/qdoc/doc/examples/mainwindow.cpp b/src/qdoc/doc/examples/mainwindow.cpp
deleted file mode 100644
index 1de035b06..000000000
--- a/src/qdoc/doc/examples/mainwindow.cpp
+++ /dev/null
@@ -1,238 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtWidgets>
-
-#include "mainwindow.h"
-#include "scribblearea.h"
-
-//! [0]
-MainWindow::MainWindow()
-{
- scribbleArea = new ScribbleArea;
- setCentralWidget(scribbleArea);
-
- createActions();
- createMenus();
-
- setWindowTitle(tr("Scribble"));
- resize(500, 500);
-}
-//! [0]
-
-//! [1]
-void MainWindow::closeEvent(QCloseEvent *event)
-//! [1] //! [2]
-{
- if (maybeSave()) {
- event->accept();
- } else {
- event->ignore();
- }
-}
-//! [2]
-
-//! [3]
-void MainWindow::open()
-//! [3] //! [4]
-{
- if (maybeSave()) {
- QString fileName = QFileDialog::getOpenFileName(this,
- tr("Open File"), QDir::currentPath());
- if (!fileName.isEmpty())
- scribbleArea->openImage(fileName);
- }
-}
-//! [4]
-
-//! [5]
-void MainWindow::save()
-//! [5] //! [6]
-{
- QAction *action = qobject_cast<QAction *>(sender());
- QByteArray fileFormat = action->data().toByteArray();
- saveFile(fileFormat);
-}
-//! [6]
-
-//! [7]
-void MainWindow::penColor()
-//! [7] //! [8]
-{
- QColor newColor = QColorDialog::getColor(scribbleArea->penColor());
- if (newColor.isValid())
- scribbleArea->setPenColor(newColor);
-}
-//! [8]
-
-//! [9]
-void MainWindow::penWidth()
-//! [9] //! [10]
-{
- bool ok;
- int newWidth = QInputDialog::getInteger(this, tr("Scribble"),
- tr("Select pen width:"),
- scribbleArea->penWidth(),
- 1, 50, 1, &ok);
- if (ok)
- scribbleArea->setPenWidth(newWidth);
-}
-//! [10]
-
-//! [11]
-void MainWindow::about()
-//! [11] //! [12]
-{
- QMessageBox::about(this, tr("About Scribble"),
- tr("<p>The <b>Scribble</b> example shows how to use QMainWindow as the "
- "base widget for an application, and how to reimplement some of "
- "QWidget's event handlers to receive the events generated for "
- "the application's widgets:</p><p> We reimplement the mouse event "
- "handlers to facilitate drawing, the paint event handler to "
- "update the application and the resize event handler to optimize "
- "the application's appearance. In addition we reimplement the "
- "close event handler to intercept the close events before "
- "terminating the application.</p><p> The example also demonstrates "
- "how to use QPainter to draw an image in real time, as well as "
- "to repaint widgets.</p>"));
-}
-//! [12]
-
-//! [13]
-void MainWindow::createActions()
-//! [13] //! [14]
-{
- openAct = new QAction(tr("&Open..."), this);
- openAct->setShortcuts(QKeySequence::Open);
- connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
-
- foreach (const QByteArray &format, QImageWriter::supportedImageFormats()) {
- QString text = tr("%1...").arg(QString(format).toUpper());
-
- QAction *action = new QAction(text, this);
- action->setData(format);
- connect(action, SIGNAL(triggered()), this, SLOT(save()));
- saveAsActs.append(action);
- }
-
- printAct = new QAction(tr("&Print..."), this);
- connect(printAct, SIGNAL(triggered()), scribbleArea, SLOT(print()));
-
- exitAct = new QAction(tr("E&xit"), this);
- exitAct->setShortcuts(QKeySequence::Quit);
- connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));
-
- penColorAct = new QAction(tr("&Pen Color..."), this);
- connect(penColorAct, SIGNAL(triggered()), this, SLOT(penColor()));
-
- penWidthAct = new QAction(tr("Pen &Width..."), this);
- connect(penWidthAct, SIGNAL(triggered()), this, SLOT(penWidth()));
-
- clearScreenAct = new QAction(tr("&Clear Screen"), this);
- clearScreenAct->setShortcut(tr("Ctrl+L"));
- connect(clearScreenAct, SIGNAL(triggered()),
- scribbleArea, SLOT(clearImage()));
-
- aboutAct = new QAction(tr("&About"), this);
- connect(aboutAct, SIGNAL(triggered()), this, SLOT(about()));
-
- aboutQtAct = new QAction(tr("About &Qt"), this);
- connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
-}
-//! [14]
-
-//! [15]
-void MainWindow::createMenus()
-//! [15] //! [16]
-{
- saveAsMenu = new QMenu(tr("&Save As"), this);
- foreach (QAction *action, saveAsActs)
- saveAsMenu->addAction(action);
-
- fileMenu = new QMenu(tr("&File"), this);
- fileMenu->addAction(openAct);
- fileMenu->addMenu(saveAsMenu);
- fileMenu->addAction(printAct);
- fileMenu->addSeparator();
- fileMenu->addAction(exitAct);
-
- optionMenu = new QMenu(tr("&Options"), this);
- optionMenu->addAction(penColorAct);
- optionMenu->addAction(penWidthAct);
- optionMenu->addSeparator();
- optionMenu->addAction(clearScreenAct);
-
- helpMenu = new QMenu(tr("&Help"), this);
- helpMenu->addAction(aboutAct);
- helpMenu->addAction(aboutQtAct);
-
- menuBar()->addMenu(fileMenu);
- menuBar()->addMenu(optionMenu);
- menuBar()->addMenu(helpMenu);
-}
-//! [16]
-
-//! [17]
-bool MainWindow::maybeSave()
-//! [17] //! [18]
-{
- if (scribbleArea->isModified()) {
- QMessageBox::StandardButton ret;
- ret = QMessageBox::warning(this, tr("Scribble"),
- tr("The image has been modified.\n"
- "Do you want to save your changes?"),
- QMessageBox::Save | QMessageBox::Discard
- | QMessageBox::Cancel);
- if (ret == QMessageBox::Save) {
- return saveFile("png");
- } else if (ret == QMessageBox::Cancel) {
- return false;
- }
- }
- return true;
-}
-//! [18]
-
-//! [19]
-bool MainWindow::saveFile(const QByteArray &fileFormat)
-//! [19] //! [20]
-{
- QString initialPath = QDir::currentPath() + "/untitled." + fileFormat;
-
- QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"),
- initialPath,
- tr("%1 Files (*.%2);;All Files (*)")
- .arg(QString(fileFormat.toUpper()))
- .arg(QString(fileFormat)));
- if (fileName.isEmpty()) {
- return false;
- } else {
- return scribbleArea->saveImage(fileName, fileFormat);
- }
-}
-//! [20]
diff --git a/src/qdoc/doc/examples/minimum.qdocconf b/src/qdoc/doc/examples/minimum.qdocconf
deleted file mode 100644
index 8f53ffc11..000000000
--- a/src/qdoc/doc/examples/minimum.qdocconf
+++ /dev/null
@@ -1,36 +0,0 @@
-# QDoc is a tool that constantly evolves to suit our needs,
-# and there are some compatibility issues between old and new
-# practices. For that reason, any QDoc configuration file needs to
-# include compat.qdocconf.
-#include(compat.qdocconf)
-
-# QDoc needs lists of file extensions to know which files to process in
-# different situations. Uncomment the following include statement to get
-# a pre-defined list of file extensions.
-#include(fileextensions.qdocconf)
-
-# You can also specify file extensions manually.
-headers.fileextensions = "*.h *.hpp"
-sources.fileextensions = "*.cpp *.qml *.qdoc"
-
-# The outputdir variable specifies the directory
-# where QDoc will put the generated documentation.
-outputdir = html
-
-# The headerdirs variable specifies the directories
-# containing the header files associated
-# with the .cpp source files used in the documentation.
-headerdirs = .
-
-# The sourcedirs variable specifies the
-# directories containing the .cpp or .qdoc
-# files used in the documentation.
-sourcedirs = .
-
-# The exampledirs variable specifies the directories containing
-# the source code of the example files.
-exampledirs = .
-
-# The imagedirs variable specifies the
-# directories containing the images used in the documentation.
-imagedirs = ./images
diff --git a/src/qdoc/doc/examples/qml.qdoc.sample b/src/qdoc/doc/examples/qml.qdoc.sample
deleted file mode 100644
index c54e9888d..000000000
--- a/src/qdoc/doc/examples/qml.qdoc.sample
+++ /dev/null
@@ -1,114 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//![qmltype]
- \qmltype TextEdit
- \instantiates QQuickTextEdit
- \inqmlmodule QtQuick
- \ingroup qtquick-visual
- \ingroup qtquick-input
- \inherits Item
- \brief Displays multiple lines of editable formatted text
-
- The TextEdit item displays a block of editable, formatted text.
-
- It can display both plain and rich text. For example:
-
- \qml
- TextEdit {
- width: 240
- text: "<b>Hello</b> <i>World!</i>"
- font.family: "Helvetica"
- font.pointSize: 20
- color: "blue"
- focus: true
- }
- \endqml
-
- \image declarative-textedit.gif
-
- ... omitted detailed description
-
- \sa Text, TextInput, {examples/quick/text/textselection}{Text Selection example}
-//![qmltype]
-
-//![function]
-/*
- \qmlmethod QtQuick2::ListModel::remove(int index, int count = 1)
-
- Deletes the content at \a index from the model.
-
- \sa clear()
-*/
-void QQuickListModel::remove(QQmlV8Function *args)
-//! [function]
-
-//! [return]
-/*
- Returns \c true if a QScroller object was already created for \a target; \c false otherwise.
-
- \sa scroller()
-*/
-bool QScroller::hasScroller(QObject *target)
-//! [return]
-
-//! [property]
-/*
- \property QVariantAnimation::duration
- \brief the duration of the animation
-
- This property describes the duration in milliseconds of the
- animation. The default duration is 250 milliseconds.
-
- \sa QAbstractAnimation::duration()
- */
-int QVariantAnimation::duration() const
-//! [property]
-
-//! [signals]
-/*
- This signal is emitted when the user clicks the button. A click is defined
- as a press followed by a release. The corresponding handler is
- \c onClicked.
-*/
-signal clicked()
-//! [signals]
-
-//! [enums]
-/*!
-\qmlproperty enumeration QtQuick2::Text::font.weight
-
-Sets the font's weight.
-
-The weight can be one of:
-\value Font.Light
-\value Font.Normal The default
-\value Font.DemiBold
-\value Font.Bold
-\value Font.Black
-
-//! [enums]
diff --git a/src/qdoc/doc/examples/samples.qdocinc b/src/qdoc/doc/examples/samples.qdocinc
deleted file mode 100644
index 1b83428b2..000000000
--- a/src/qdoc/doc/examples/samples.qdocinc
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//! [qvector3d-class]
-/*!
- \class QVector3D
- \brief The QVector3D class represents a vector or vertex in 3D space.
- \since 4.6
- \ingroup painting-3D
-
- Vectors are one of the main building blocks of 3D representation and
- drawing. They consist of three coordinates, traditionally called
- x, y, and z.
-
- The QVector3D class can also be used to represent vertices in 3D space.
- We therefore do not need to provide a separate vertex class.
-
- \note By design values in the QVector3D instance are stored as \c float.
- This means that on platforms where the \c qreal arguments to QVector3D
- functions are represented by \c double values, it is possible to
- lose precision.
-
- \sa QVector2D, QVector4D, QQuaternion
-*/
-//! [qvector3d-class]
-
-//! [qvector3d-function]
-/*!
- \fn QVector3D::QVector3D(const QPoint& point)
-
- Constructs a vector with x and y coordinates from a 2D \a point, and a
- z coordinate of 0.
-*/
-//! [qvector3d-function]
-
-//! [sample-page]
-/*!
- \page generic-guide.html
- \title Generic QDoc Guide
- \nextpage Creating QDoc Configuration Files
- There are three essential materials for generating documentation with QDoc:
-
- \list
- \li \c QDoc binary (\c {qdoc})
- \li \c qdocconf configuration files
- \li \c Documentation in \c C++, \c QML, and \c .qdoc files
- \endlist
-*/
-//! [sample-page]
-
-//! [sample-faq]
-/*!
- \page altruism-faq.html faq
- \title Altruism Frequently Asked Questions
-
- \brief All the questions about altruism, answered.
-
- ...
-*/
-//! [sample-faq]
-
-//! [sample-example]
-/*!
- \title UI Components: Tab Widget Example
- \example declarative/ui-components/tabwidget
-
- This example shows how to create a tab widget. It also demonstrates how
- \l {Property aliases}{property aliases} and
- \l {Introduction to the QML Language#Default Properties}{default properties} can be used to collect and
- assemble the child items declared within an \l Item.
-
- \image qml-tabwidget-example.png
-*/
-//! [sample-example]
-
-//! [sample-overview]
-/*!
- \page overview-qt-technology.html overview
- \title Overview of a Qt Technology
-
- \brief provides a technology never seen before.
-
-*/
-//! [sample-overview]
-
diff --git a/src/qdoc/doc/files/compat.qdocconf b/src/qdoc/doc/files/compat.qdocconf
deleted file mode 100644
index 3e7ea6c89..000000000
--- a/src/qdoc/doc/files/compat.qdocconf
+++ /dev/null
@@ -1,12 +0,0 @@
-alias.include = input
-
-macro.0 = "\\\\0"
-macro.b = "\\\\b"
-macro.n = "\\\\n"
-macro.r = "\\\\r"
-macro.img = "\\image"
-macro.endquote = "\\endquotation"
-macro.relatesto = "\\relates"
-
-spurious = "Missing comma in .*" \
- "Missing pattern .*"
diff --git a/src/qdoc/doc/files/qtgui.qdocconf b/src/qdoc/doc/files/qtgui.qdocconf
deleted file mode 100644
index 855ed538c..000000000
--- a/src/qdoc/doc/files/qtgui.qdocconf
+++ /dev/null
@@ -1,49 +0,0 @@
-include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
-
-project = QtGui
-description = Qt GUI Reference Documentation
-version = $QT_VERSION
-
-examplesinstallpath = gui
-
-qhp.projects = QtGui
-
-qhp.QtGui.file = qtgui.qhp
-qhp.QtGui.namespace = org.qt-project.qtgui.$QT_VERSION_TAG
-qhp.QtGui.virtualFolder = qtgui
-qhp.QtGui.indexTitle = Qt GUI
-qhp.QtGui.indexRoot =
-
-qhp.QtGui.filterAttributes = qtgui $QT_VERSION qtrefdoc
-qhp.QtGui.customFilters.Qt.name = Qtgui $QT_VERSION
-qhp.QtGui.customFilters.Qt.filterAttributes = qtgui $QT_VERSION
-
-qhp.QtGui.subprojects = classes
-qhp.QtGui.subprojects.classes.title = C++ Classes
-qhp.QtGui.subprojects.classes.indexTitle = Qt GUI C++ Classes
-qhp.QtGui.subprojects.classes.selectors = class fake:headerfile
-qhp.QtGui.subprojects.classes.sortPages = true
-
-tagfile = ../../../doc/qtgui/qtgui.tags
-
-depends += \
- qtcore \
- qtnetwork \
- qtopengl \
- qtsvg \
- qtqml \
- qtquick \
- qtwidgets \
- qtdoc
-
-headerdirs += ..
-
-sourcedirs += .. \
- ../../../examples/gui/doc/src
-
-exampledirs += ../../../examples/gui \
- snippets
-
-imagedirs += images \
- ../../../examples/gui/doc/images \
- ../../../doc/src/images \
diff --git a/src/qdoc/doc/images/happy.gif b/src/qdoc/doc/images/happy.gif
deleted file mode 100644
index a4597f6fa..000000000
--- a/src/qdoc/doc/images/happy.gif
+++ /dev/null
Binary files differ
diff --git a/src/qdoc/doc/images/qa-table.png b/src/qdoc/doc/images/qa-table.png
deleted file mode 100644
index 5818739fa..000000000
--- a/src/qdoc/doc/images/qa-table.png
+++ /dev/null
Binary files differ
diff --git a/src/qdoc/doc/images/qt-logo.png b/src/qdoc/doc/images/qt-logo.png
deleted file mode 100644
index b63f1384b..000000000
--- a/src/qdoc/doc/images/qt-logo.png
+++ /dev/null
Binary files differ
diff --git a/src/qdoc/doc/images/windowsvista-toolbutton.png b/src/qdoc/doc/images/windowsvista-toolbutton.png
deleted file mode 100644
index 0baa9809c..000000000
--- a/src/qdoc/doc/images/windowsvista-toolbutton.png
+++ /dev/null
Binary files differ
diff --git a/src/qdoc/doc/qdoc-guide/qdoc-guide.qdoc b/src/qdoc/doc/qdoc-guide/qdoc-guide.qdoc
deleted file mode 100644
index 1c09c24b7..000000000
--- a/src/qdoc/doc/qdoc-guide/qdoc-guide.qdoc
+++ /dev/null
@@ -1,721 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-/*!
- \page qdoc-guide.html
- \title Getting Started with QDoc
- \nextpage Installing Clang for QDoc
-
- Qt uses QDoc to generate its documentation set into HTML and DITA XML
- formats. QDoc uses a set of configuration files to generate documentation
- from QDoc comments. The comments have types called
- \l{writing-topic-commands}{topics} that determine whether a comment is a
- class documentation or a property documentation. A comment may also have
- \l{writing-markup}{mark up} to enhance the layout and formatting of the
- final output.
-
- There are three essential materials for generating documentation with QDoc:
- \list
- \li \c QDoc binary
- \li \c qdocconf configuration files
- \li \c Documentation in \c C++, \c QML, and \c .qdoc files
- \endlist
-
- \note From Qt 5.11, \l{QDoc Manual}{QDoc} requires \l{http://clang.llvm.org}{Clang}
- for parsing C++ header and source files, and for parsing the function
- signatures in \l {fn-command} {\\fn} commands. See \l {Installing Clang for QDoc}
- for details.
-
- This section intends to cover the basic necessities for creating a
- documentation set. Additionally, the guide presents special considerations
- and options to documenting non-C++ API documentation as well as QML
- documentation. Finally, the guide will provide a sample project
- documentation and an example of a QML type documentation.
-
- For specific QDoc information, consult the
- \l{QDoc Manual}.
- \section1 Chapters
-
- \list 1
- \li \l{Installing Clang for QDoc}
- \li \l{Creating QDoc Configuration Files}
- \li \l{Writing Documentation}
- \li \l{Categories of Documentation}
- \list
- \li \l{C++ Documentation Style}
- \li \l{QML Documentation Style}
- \endlist
- \endlist
-
-*/
-
-/*!
- \page qdoc-guide-conf.html
- \title Creating QDoc Configuration Files
- \previouspage Installing Clang for QDoc
- \nextpage Writing Documentation
- To generate documentation, QDoc uses configuration files, with the
- \c qdocconf extension, to store configuration settings.
-
- The \l{The QDoc Configuration File} article covers the various configuration
- variables in greater detail.
-
- \section1 QDoc Configuration Files
- QDoc's configuration settings can reside in a single \e qdocconf file, but
- can also be in other qdocconf files. The \c {include(<filepath>)} command
- allows configuration files to include other configuration files.
-
- QDoc has two outputs, HTML documentation and documentation in DITA XML
- format. The main distinction between the two outputs is that HTML
- documentation needs to have its HTML styling information in the
- configuration files. DITA XML documentation does not, and a separate process
- can style the documentation in DITA at a later time. DITA XML is therefore
- more flexible in allowing different styles to apply to the same information.
-
- To run QDoc, the project configuration file is supplied as an argument.
- \code
- qdoc project.qdocconf
- \endcode
-
- The project configuration contains information that QDoc uses to create the
- documentation.
-
- \section2 Project Information
-
- QDoc uses the \c project information to generate the documentation.
- \code
- project = QDoc Project
- description = Sample QDoc project
- \endcode
-
- \target qdoc-input-output-dir
- \section2 Input and Output Directories
-
- Specifying the path to the source directories allow QDoc to find sources and
- generate documentation.
-
- \badcode
- sourcedirs = <path to source code>
- exampledirs = <path to examples directory>
- imagedirs = <path to image directory>
-
- sources.fileextensions = "*.cpp *.qdoc *.mm *.qml"
- headers.fileextensions = "*.h *.ch *.h++ *.hh *.hpp *.hxx"
- examples.fileextensions = "*.cpp *.h *.js *.xq *.svg *.xml *.ui *.qhp *.qhcp *.qml"
- examples.imageextensions = "*.png *.jpeg *.jpg *.gif *.mng"
- \endcode
-
- QDoc will process headers and sources from the ones specified in the
- \c fileextensions variable.
-
- Likewise, QDoc needs the path to the output directory. The \c outputformats
- variable determines the type of documentation. These variables should be
- in separate configuration files to modularize the documentation build.
- \badcode
- outputdir = $SAMPLE_PROJECT/doc/html
- outputformats = HTML
- \endcode
-
- QDoc can resolve the paths relative to the qdocconf file as well as
- environment variables.
-
- \note During each QDoc run, the output directory is deleted.
- \section2 Extra Files
-
- QDoc will output generated documentation into the directory specified in
- the \l{Input and Output Directories}{output} directory. It is also possible
- to specify extra files that QDoc should export.
-
- \badcode
- HTML.extraimages = extraImage.png \
- extraImage2.png
- \endcode
-
- The \c extraImage.png and the \c extraImage2.png files will be copied to the
- HTML output directory.
-
- \section2 Qt Help Framework Configuration
-
- QDoc will also export a \e {Qt Help Project} file, in a \c qhp file.
- The qhp file is then used by the \c qhelpgenerator to package the
- documentation into a \c qch file. Qt Creator and Qt Assistant reads the qch
- file to display the documentation.
-
- The \l {Creating Help Project Files} article covers the configuration
- options.
-
- \section2 HTML Configuration
-
- QDoc has an HTML generator that will export a set of documentation into
- HTML files using various configuration settings. QDoc will place the
- generated documentation into the directory specified by the \c outputdir
- variable.
-
- \badcode
- outputformats = HTML
- outputdir = <path to output directory>
- \endcode
-
- QDoc needs to know where the styles and templates for generating HTML
- are located. Typically, the templates directory contains a \c scripts,
- \c images, and a \c style directory, containing scripts and CSS files.
-
- The main configuration variables are:
- \badcode
- HTML.postheader
- HTML.postpostheader
- HTML.postheader
- HTML.footer
-
- HTML.headerstyles
- HTML.stylesheets = template/style/style.css \
- template/style/style1.css
-
- HTML.scripts = template/scripts/script.js
- \endcode
-
- The \c{HTML.headerstyles} variable inserts the style information into the
- HTML file and the \c{HTML.stylesheets} specifies which files QDoc should
- copy into the output directory. As well, QDoc will embed the string
- in the \c postheader, \c footer, and related variables into each HTML file.
-
- The \l {Format-specific Configuration Variables} article outlines the usage
- of each variable.
-
- \section2 QDoc Index Files
-
- Documentation projects can link to targets in other projects by specifying
- a set of dependencies, or a set of direct paths to to index file(s) this
- project depends on. When QDoc generates documentation for a project,
- it will also generate an \c .index file containing URLs to each linkable
- entity in the project. Other projects can then define a dependency to the
- index file in order to link to the documentation within that project.
-
- \b {See also}: \l {depends-variable}{depends} and
- \l {indexes-variable}{indexes}.
-
- \section1 Macros and Other Configurations
-
- Macros for substituting HTML characters exist and are helpful for generating
- specific HTML-valid characters.
-
- \badcode
- macro.pi.HTML = "&Pi;"
- \endcode
- The snippet code will replace any instances of \c{\\pi} with \c &Pi; in the
- HTML file, which will appear as the Greek \pi symbol when viewed in
- browsers.
-
- \b {See also:} \l {macro-variable}{macro}.
-
- \section2 QML Additions
-
- QDoc is able to parse QML files for QDoc comments. QDoc will parse files
- with the QML extension, \c{.qml}, if the extension type is included in the
- \l{Input and Output Directories}{fileextensions} variable.
-
- Also, the generated HTML files can have a prefix and a suffix following the
- QML module name, specified in the QDoc configuration file.
- \badcode
- outputprefixes = QML
- outputprefixes.QML = uicomponents-
- outputsuffixes = QML
- outputsuffixes.QML = -tp
- \endcode
-
- \b {See also}: \l {outputprefixes-variable}{outputprefixes},
- \l {outputsuffixes-variable}{outputsuffixes}.
-
-*/
-
-/*!
- \page qdoc-guide-writing.html
- \title Writing Documentation
- \previouspage Creating QDoc Configuration Files
- \nextpage Categories of Documentation
-
- \section1 QDoc Comments
-
- Documentation is contained within QDoc \e comments, delimited by
- \beginqdoc and \endqdoc comments. Note that these are valid comments
- in C++, QML, and JavaScript.
-
- Within a QDoc comment, \c {//!} is used as a single-line documentation
- comment; the comment itself and anything after it, until a newline,
- is omitted from the generated output.
-
- QDoc will parse C++ and QML files to look for QDoc comments. To explicitly
- omit a certain file type, omit it from the
- \l{Input and Output Directories}{configuration} file.
-
- \section1 QDoc Commands
-
- QDoc uses \e commands to retrieve information about the documentation. \c
- Topic commands determine the type of documentation element, the \c context
- commands provide hints and information about a topic, and \c markup commands
- provide information on how QDoc should format a piece of documentation.
-
- \target writing-topic-commands
- \section2 QDoc Topics
- Each QDoc comment must have a \e topic type. A topic distinguishes it from
- other topics. To specify a topic type, use one of the several
- \l{Topic Commands}{topic commands}.
-
- QDoc will collect similar topics and create a page for each one. For
- example, all the enumerations, properties, functions, and class description
- of a particular C++ class will reside in one page. A generic page is
- specified using the \l{page-command}{\\page} command and the filename is the
- argument.
-
- Example of topic commands:
- \list
- \li \l{enum-command}{\\enum} - for enumeration documentation
- \li \l{class-command}{\\class} - for C++ class documentation
- \li \l{qmltype-command}{\\qmltype} - for QML type documentation
- \li \l{page-command}{\\page} - for creating a page.
- \endlist
-
- A QDoc comment can contain multiple topic commands in the same category, with
- some restrictions. This way, it's possible to write a single comment that
- documents all overloads of a function (using multiple \l {fn-command}{\\fn}
- commands), or all properties in a QML property group (using
- \l {qmlproperty-command}{\\qmlproperty} commands) in one go.
-
- If a QDoc comment contains multiple topic commands, it's possible to
- provide additional \e {context commands} for individual topics in
- follow-up comments:
-
- \badcode *
- /\1!
- \qmlproperty string Type::element.name
- \qmlproperty int Type::element.id
-
- \brief Holds the element name and id.
- \1/
-
- /\1!
- \qmlproperty int Type::element.id
- \readonly
- \1/
- \endcode
-
- Here, the follow-up comment marks the \e element.id property as read-only,
- while \e element.name remains writable.
-
- \note A follow-up comment cannot contain any additional text, only
- \l {writing-context}{context commands} that document the context of
- the item.
-
- The \l{page-command}{\\page} command is for creating articles that are not
- part of source documentation. The command can also accept two arguments: the
- file name of the article and the documentation type. The possible types are:
- \list
- \li \c howto
- \li \c overview
- \li \c tutorial
- \li \c faq
- \li \c attribution - used for documenting license attributions
- \li \c article - \e default when there is no type
- \endlist
-
- \snippet examples/samples.qdocinc sample-faq
-
- The \l{Topic Commands} page has information on all of the available topic
- commands.
-
- \target writing-context
- \section2 Topic Contexts
-
- Context commands give QDoc a hint about the \e context of the topic. For
- example, if a C++ function is obsolete, then it should be marked obsolete
- with the \l{obsolete-command}{\\obsolete} command. Likewise,
- \l{nextpage-command}{page navigation} and \l{title-command}{page title} 
- give extra page information to QDoc.
-
- QDoc will create additional links or pages for these contexts. For example,
- a group is created using the \l{group-command}{\\group} command and the
- members have the \l{ingroup-command}{\\ingroup} command. The group name is
- supplied as an argument.
-
- The \l{Context Commands} page has a listing of all the available context
- commands.
-
- \target writing-markup
- \section2 Documentation Markup
-
- QDoc can do \e markup of text similar to other markup or
- documentation tools. QDoc can mark a section of text in \b{bold},
- when the text is marked up with the \l{b-command}{\\b} command.
-
- \code
- \b{This} text will be in \b{bold}.
- \endcode
-
- The \l{Markup Commands} page has a full listing of the available markup
- commands.
-
- \section1 Anatomy of Documentation
-
- Essentially, for QDoc to create a page, there must be some essential
- ingredients present.
-
- \list
- \li Assign a topic to a QDoc comment - A comment could be a page, a
- property documentation, a class documentation, or any of the available
- \l{Topic Commands}{topic commands}.
-
- \li Give the topic a context - QDoc can associate certain topics to other
- pages such as associating obsolete functions when the documentation is
- marked with \l{obsolete-command}{\\obsolete}.
-
- \li Mark sections of the document with
- \l{Markup Commands}{markup commands} - QDoc can create layouts and
- format the documentation for the documentation.
- \endlist
-
- In Qt, the \l{QVector3D} class was documented with the following QDoc
- comment:
- \snippet examples/samples.qdocinc qvector3d-class
-
- It has a constructor, \l{QVector3D::QVector3D()}, which was documented with
- the following QDoc comment:
- \snippet examples/samples.qdocinc qvector3d-function
-
- The different comments may reside in different files and QDoc will collect
- them depending on their topic and their context. The resulting documentation
- from the snippets are generated into the \l{QVector3D} class documentation.
-
- Note that if the documentation immediately precedes the function or class
- in the source code, then it does not need to have a topic. QDoc will assume
- that the documentation above the code is the documentation for that code.
-
- An article is created using \l{page-command}{\\page} command. The first
- argument is the HTML file that QDoc will create. The topic is supplemented
- with context commands, the \l{title-command}{\\title} and
- \l{nextpage-command}{\\nextpage} commands. There are several other
- QDoc commands such as the \l{list-command}{\\list} command.
- \snippet examples/samples.qdocinc sample-page
-
- The section on \l{QDoc Topics}{topic commands} gives an overview on several
- other topic types.
-
-
-*/
-
-/*!
- \page qdoc-categories.html
- \title Categories of Documentation
- \previouspage Writing Documentation
- \brief Describes the different types such as How-To's, Tutorials, Overviews,
- Examples, and Class Documentation.
-
- There are several types of predefined documentation \e categories or
- \e types:
- \list
- \li How-To's
- \li Tutorial
- \li Overview
- \li Article
- \li FAQ (Frequently Asked Questions)
- \li C++ API Documentation
- \li QML Type Documentation
- \li Code Example
- \endlist
-
- QDoc has the ability to format a page depending on the type. Further,
- stylesheets can provide additional control on the display of each category.
-
- \section1 API Documentation
- QDoc excels in the creation of API documentation given a set of source code
- and documentation in QDoc comments. Specifically, QDoc is aware of Qt's
- architecture and can validate the existence of Qt C++ class, function, or
- property documentation. QDoc gives warnings and errors if it cannot
- associate a documentation with a code entity or if a code entity does not
- have documentation.
-
- In general, every Qt code entity such as properties, classes, methods,
- signals, and enumerations have a corresponding
- \l{qdoc-topics}{topic command}. QDoc will associate the documentation to the
- source using C++ naming rules.
-
- QDoc will parse the header files (typically \c .h files) to build a tree of
- the class structures. Then QDoc will parse the source files and
- documentation files to attach documentation to the class structure.
- Afterwards, QDoc will generate a page for the class.
-
- \note QDoc uses the header files to inform itself about the class and will
- not properly process QDoc comments in header files.
-
- \section2 Language Styles
-
- To produce quality API documentation, the Qt API references follow a
- particular language guidelines. While the contents of this page demonstrates
- how to create API documentation, the style guidelines demonstrate how
- the reference materials follow a consistent use of language.
-
- \list
- \li \l{C++ Documentation Style}
- \li \l{QML Documentation Style}
- \endlist
-
- \keyword qml-documentation
- \section2 Documenting QML Types
-
- In the world of \l{Qt Quick}{QML}, there are additional entities we need to
- document such as QML signals, attached properties, and QML methods.
- Internally, they use Qt technologies, however, QML API documentation
- requires different layout and naming conventions from the Qt C++ API
- documentation.
-
- A list of QML related QDoc commands:
- \list
- \li \l{qmlattachedproperty-command}{\\qmlattachedproperty}
- \li \l{qmlattachedsignal-command}{\\qmlattachedsignal}
- \li \l{qmlbasictype-command}{\\qmlbasictype}
- \li \l{qmltype-command}{\\qmltype} - creates a QML type documentation
- \li \l{qmlmethod-command}{\\qmlmethod}
- \li \l{qmlproperty-command}{\\qmlproperty}
- \li \l{qmlsignal-command}{\\qmlsignal}
- \li \l{inherits-command}{\\inherits}
- \li \l{qmlmodule-command}{\\qmlmodule}
- \li \l{inqmlmodule-command}{\\inqmlmodule}
- \li \l{instantiates-command}{\\instantiates}
-
- \endlist
-
- \note Remember to enable QML parsing by including the \c{*.qml} filetype in
- the \l{qdoc-input-output-dir}{fileextension} variable.
-
- To document a QML type, start by creating a QDoc comment that uses the
- \l{qmltype-command} {\\qmltype} command as its topic command.
-
- \section3 QML Parser
-
- 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
- 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.
-
- When documenting a QML type in a \e{qml} file, place each QDoc
- comment directly above the entity to which the comment applies.
- For example, place the QDoc comment containing the \e{\\qmltype}
- command (the topic comment) directly above the outer QML type in
- the \e{qml} file. Place the comment for documenting a QML property
- directly above the property declaration, and so on for QML signal
- handlers and QML methods. Note that when documenting QML
- properties in a \e{qml} file, you don't normally include the
- \e{\\qmlproperty} command as a topic command (which you must do
- when documenting QML types in \e{cpp} files), because the QML
- parser automatically associates each QDoc comment with the next
- QML declaration it parses. The same is true for QML signal handler
- and QML method comments. But it is sometimes useful to include one
- or more \e{\\qmlproperty} commands in the comment, e.g. when the
- property type is another QML type and you want the user to only
- use certain properties within that other QML type, but not all of
- them. But when documenting a property that has an alias, place the
- QDoc comment for it directly above the alias declaration. In these
- cases, the QDoc comment \e must contain a \e{\\qmlproperty}
- command, because that is the only way QDoc can know the type of
- the aliased property.
-
- When documenting a QML type in the \e cpp file of its
- corresponding C++ class (if it has one), you normally place each
- QDoc comment directly above the entity it documents. However, QDoc
- does not use the QML parser to parse these files (the C++ parser
- is used), so these QML QDoc comments can appear anywhere in the
- \e{cpp} file. Note that QML QDoc comments in \e cpp files \e must
- use the QML topic commands. i.e., the \l{qmltype-command}
- {\\qmltype} command \e must appear in the QDoc comment for the
- QML type, and a \l{qmlproperty-command} {\\qmlproperty} command \e
- must appear in each QML property QDoc comment.
-
- \section3 QML Modules
-
- A QML type belongs to a \e module. The module
- may include all the related types for a platform or contain a certain
- version of \l{Qt Quick}. For example, the Qt Quick 2 QML types belong
- to the Qt Quick 2 module while there is also a Qt Quick 1 module for the older
- types introduced in Qt 4.
-
- QML modules allow grouping QML types. The \l{qmltype-command}
- {\\qmltype} topic command must have an \l{inqmlmodule-command}
- {\\inqmlmodule} context command to relate the type to a QML
- module. Similarly, a \l{qmlmodule-command}{\\qmlmodule} topic
- command must exist in a separate \c{.qdoc} file to create the
- overview page for the module. The overview page will list the
- QML types of the QML module.
-
- The links to the QML types must therefore also contain the module name.
- For example, if a type called \c TabWidget is in the \c UIComponents
- module, it must be linked as \c {UIComponents::TabWidget}.
-
- \section3 Read-only and Internal QML Properties
-
- QDoc detects QML properties that are marked as \c readonly. Note that the
- property must be initialized with a value.
-
- \badcode
- readonly property int sampleReadOnlyProperty: 0
- \endcode
-
- Properties and signals that are not meant for the public interface may
- be marked with the \l{internal-command}{\\internal} command. QDoc will not
- publish the documentation in the generated outputs.
-
- \section1 Articles & Overviews
-
- Articles and overviews are a style of writing best used for providing
- summary detail on a topic or concept. It may introduce a technology or
- discuss how a concept may be applied, but without discussing exact steps
- in too much detail. However, this type of content could provide the entry
- point for readers to find instructional and reference materials that do,
- such as tutorials, examples and class documentation. An example of an
- overview might be a product page, such as a top level discussion of
- Qt Quick, individual modules, design principles, or tools.
-
- To signify that a document is an article, you append the article keyword
- to the \\page command:
-
- \snippet examples/samples.qdocinc sample-overview
-
- The \l{writing-topic-commands}{writing topic commands} section has a listing
- of the available \\page command arguments.
-
- \section1 Tutorials, How-To's, FAQ's
-
- Tutorials, How-To's, and FAQ's are all instructional material, in that they
- instruct or prescribe to the reader. Tutorials are content designed to guide
- the reader along a progressive learning path for a concept or technology.
- How-To's and FAQ's (\e{Frequently Asked Questions}) provide guidance by
- presenting material in the form of answers to commonly asked topics.
- How-To's and FAQ's are designed for easy reference and are not necessarily
- presented in a linear progression.
-
- To create these types, mark the pages by providing a \c type argument to the
- \l{page-command}{\\page} command. The \c type argument is the second
- argument, with the file name being the first.
- \snippet examples/samples.qdocinc sample-faq
-
- The \l{writing-topic-commands}{writing topic commands} section has a listing
- of the available \\page command arguments.
-
- \section1 Code Examples
- Examples are an effective way to demonstrate practical usage of a given
- technology or concept. When it comes to middleware this is usually in the
- form of an application using simple code and clear explanations of what the
- code is doing. Any module, API, project, pattern etc. should have at least
- one good example.
-
- An example may have an accompanying tutorial. The tutorial instructs and
- describes the code, while the code example is the code content that users
- may study. Code examples may have accompanying text that are not in the
- tutorial.
-
- QDoc will create a page containing the example code with a description
- using the \l{example-command}{\\example} command.
-
- \snippet examples/samples.qdocinc sample-example
-
- QDoc will use the directory specified in the input
- \l{Input and Output Directories}{exampledirs} variable to find the Qt
- Project (\c .pro) file to generate the example files. The generated HTML
- will have the filename, \c {declarative-ui-components-tabwidget.html}. QDoc
- will also list all of the example code.
-
- \note The example's project file must be the same as the
- directory name.
-*/
-
-
-/*!
- \page qdoc-guide-clang.html
- \title Installing Clang for QDoc
- \previouspage Getting Started with QDoc
- \nextpage Creating QDoc Configuration Files
-
- QDoc uses Clang when parsing C++ files as well as function signatures in
- \l {fn-command} {\\fn} commands. Clang is part of
- \l {https://llvm.org/}{the LLVM Compiler Infrastructure Project}.
- Therefore, if you are going to build QDoc from source, you need to install
- \l{http://clang.llvm.org}{LLVM 6.0} or greater first. You can find the
- required pre-built binaries
- \l {http://releases.llvm.org/download.html}{here}.
-
- To build QDoc on Debian-based Linux distributions, it is sufficient to
- install the \c libclang-dev package and its dependencies. For running QDoc,
- the \c libclang package is required.
-
- \note On Windows, after installing the pre-built LLVM you must restart your
- build shell to ensure that LLVM's binary directory is added to the PATH
- variable. This is needed to be able to run qdoc.
-
- \section1 Set Clang location automatically
-
- The Qt build system uses the tool \c llvm-config to discover the location
- of LLVM on your system, and relies on the path to llvm-config being in
- the \c PATH environment variable to do so. \c llvm-config is commonly
- installed with LLVM and Clang on Linux systems, and also on macOS if
- LLVM is installed using Brew.
-
- On Windows, the installation binaries provided by LLVM do not include
- \c llvm-config. You may still have it on your system, if you have built
- LLVM yourself from source. If that is the case, and you want to let the
- build system find Clang automatically, add the path to \c llvm-config
- to your \c PATH environment variable. For example:
-
- \badcode
- C:\> set PATH=%PATH%;C:\[build directory]\bin\Release"
- \endcode
-
- Make sure to set the path to your LLVM build directory. The \c llvm-config
- executable is located in \c {bin\Release} or \c {bin\Debug}, reflecting the
- build version.
-
- \section1 Specify Clang location manually
-
- If \c llvm-config is not in your \c PATH environment variable, or not
- installed on your system, you can still build QDoc, by manually setting the
- environment variable \c LLVM_INSTALL_DIR to point to the directory where
- the Clang libraries are installed. This directory should be the top level
- directory. For example, on a Linux or macOS system with LLVM installed to
- \c /usr/llvm:
-
- \badcode
- $ export LLVM_INSTALL_DIR=/usr/llvm
- \endcode
-
- Debian-based Linux distributions usually offer multiple versions of the
- \c libclang packages, such as \c libclang-<VERSION>. In this case,
- \c LLVM_INSTALL_DIR should contain \c /usr/lib/clang/<VERSION> .
-
- On a Windows system with LLVM installed to \c {C:\Program Files\LLVM}:
-
- \badcode
- C:\> set LLVM_INSTALL_DIR=C:\Program Files\LLVM
- \endcode
-*/
diff --git a/src/qdoc/doc/qdoc-guide/qtwritingstyle-cpp.qdoc b/src/qdoc/doc/qdoc-guide/qtwritingstyle-cpp.qdoc
deleted file mode 100644
index 9420c799b..000000000
--- a/src/qdoc/doc/qdoc-guide/qtwritingstyle-cpp.qdoc
+++ /dev/null
@@ -1,187 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
-\page qtwritingstyle-cpp.html
-\title C++ Documentation Style
-\brief Style guidelines for C++ documentation
-
-To generate the documentation, QDoc goes through the source code and generates
-documentation for C++ types such as classes. QDoc then associates member
-functions, properties, and other types to the appropriate class.
-
-Note that the documentation must be in the implementation files such as \c .cpp.
-
-\section1 Class Documentation
-
-Class documentation is generated using the \l{class-command}{\\class} command and
-the name of the class as the first argument.
-
-\snippet examples/cpp.qdoc.sample class
-
-\l{Context commands} add information about the class, such as its module or
-which version the class was added.
-
-Some common context commands are:
-\list
-\li \l{brief-command}{\\brief} - the class' brief description \b (mandatory)
-\li \l{since-command}{\\since} - the version to which the class was added \b (mandatory)
-\li \l{internal-command}{\\internal} - marks the class as internal. Internal
-classes do not appear in the public API documentation.
-\endlist
-
-
-\section2 The Brief and Detailed Description
-
-The \e{brief description} is marked with the \l{brief-command}{\\brief} command
-and it is for summarizing the purpose or functionality of the class. For C++
-classes, QDoc will take the class and create annotated information for the
-class. The annotated information appears in lists and tables which display the
-class.
-
-The C++ brief should start with:
-\code
-"The <C++ class name> class"
-\endcode
-
-The \e{detailed description} section starts after the brief description. It
-provides more information about the class. The detailed description may contain
-images, snippet code, or links to other relevant documents. There
-must be an empty line which separates the brief and detailed description.
-
-\section1 Member Functions
-
-Typically, function documentation immediately precedes the implementation of the
-function in the \c .cpp file. For function documentation that is not immediately
-above the implementation, the \l{fn-command}{\\fn} is needed.
-
-\snippet examples/cpp.qdoc.sample function
-
-The function documentation starts with a verb, indicating the operation the
-function performs. This also applies to constructors and destructors.
-
-Some common verbs for function documentation:
-\list
-\li "Constructs..." - for constructors
-\li "Destroys..." - for destructors
-\li "Returns..." - for accessor functions
-\endlist
-
-The function documentation must document:
-\list
-\li the return type
-\li the parameters
-\li the actions of the functions
-\endlist
-
-The \l{a-command}{\\a} command marks the parameter in the documentation.
-The return type documentation should link to the type documentation or be
-marked with the \l{c-command}{\\c} command in the case of boolean values.
-
-\snippet examples/cpp.qdoc.sample return
-
-\section1 Properties
-
-The property documentation resides immediately above the read function's
-implementation. The \l{writing-topic-commands}{topic command} for properties is
-\l{property-command}{\\property}.
-
-\snippet examples/cpp.qdoc.sample property
-
-Property documentation usually starts with "This property...", but these are
-alternate expressions:
-\list
-\li "This property holds..."
-\li "This property describes..."
-\li "This property represents..."
-\li "Returns \c true when... and \c false when..." - for properties that
-are read.
-\li "Sets the..." - for properties that configure a type.
-\endlist
-
-Property documentation must include:
-\list
-\li description and behavior of the property
-\li accepted values for the property
-\li the default value of the property
-\endlist
-Similar to \l{Member Functions}{functions}, the default type may be linked
-or marked with the \c{\c} command.
-
-An example of a value range style is:
-\quotation
-The values range from 0.0 (no blur) to maximumRadius (maximum blur). By default, the property is set to 0.0 (no blur).
-\endquotation
-
-\section1 Signals, Notifiers, and Slots
-The \l{writing-topic-commands}{topic command} for signals, notifiers, and slots
-is \l{fn-command}{\\fn}. Signal documentation state when they are triggered
-or emitted.
-
-\snippet examples/cpp.qdoc.sample signals
-
-Signal documentation typically begin with "This signal is triggered when...".
-Here are alternate styles:
-\list
-\li "This signal is triggered when..."
-\li "Triggered when..."
-\li "Emitted when..."
-\endlist
-
-For slots or notifiers, the condition when they are executed or triggered by
-a signal should be documented.
-\list
-\li "Executed when..."
-\li "This slot is executed when..."
-\endlist
-
-For properties that have overloaded signals, QDoc groups the overloaded
-notifiers together. To refer to a specific version of a notifier or signal,
-simply refer to the property and mention that there are different versions of
-the notifier.
-
-\snippet examples/cpp.qdoc.sample overloaded notifier
-
-\section1 Enums, Namespaces, and Other Types
-
-Enums, namespaces, and macros have a \l{writing-topic-commands}{topic command} for their documentation:
-\list
-\li \l{enum-command}{\\enum}
-\li \l{typedef-command}{\\typedef}
-\li \l{macro-command}{\\macro}
-\endlist
-
-The language style for these types mention that they are an enum or a macro and
-continues with the type description.
-
-For enumerations, the \l{value-command}{\\value} command is for listing the
-values. QDoc creates a table of values for the enum.
-
-\snippet examples/cpp.qdoc.sample enums
-
-*/
-
diff --git a/src/qdoc/doc/qdoc-guide/qtwritingstyle-qml.qdoc b/src/qdoc/doc/qdoc-guide/qtwritingstyle-qml.qdoc
deleted file mode 100644
index b8350485a..000000000
--- a/src/qdoc/doc/qdoc-guide/qtwritingstyle-qml.qdoc
+++ /dev/null
@@ -1,166 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
-\page qtwritingstyle-qml.html
-\title QML Documentation Style
-\brief Style guidelines for QML documentation
-
-QDoc can process QML types defined as C++ classes and QML types defined in
-\c .qml files. For C++ classes documented as QML types, the QDoc comments are
-in the \c .cpp file while QML types defined in QML are in the \c .qml
-file. The C++ classes must also be documented
-documented with the QML \l{topic-commands}{topic commands}:
-
-\list
-\li \l{qmlattachedproperty-command}{\\qmlattachedproperty}
-\li \l{qmlattachedsignal-command}{\\qmlattachedsignal}
-\li \l{qmlbasictype-command}{\\qmlbasictype}
-\li \l{qmltype-command}{\\qmltype}
-\li \l{qmlmethod-command}{\\qmlmethod}
-\li \l{qmlproperty-command}{\\qmlproperty}
-\li \l{qmlsignal-command}{\\qmlsignal}
-\li \l{qmlmodule-command}{\\qmlmodule}
-\li \l{inqmlmodule-command}{\\inqmlmodule}
-\li \l{instantiates-command}{\\instantiates}
-\endlist
-
-For QML types defined in \c .qml files, QDoc will parse the QML and determine
-the properties, signals, and the type within the QML definition. The QDoc
-block then needs to be immediately above the declaration. For QML types
-implemented in C++, QDoc will output warnings if the C++ class documentation
-does not exist. The class documentation may be marked as
-\l{internal-command}{internal} if it is not a public API.
-
-\section1 QML Types
-
-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
-implements the QML type as the argument. For types implemented in QML, this
-is not needed.
-
-The \e{brief description} provides a summary for the QML type. The brief does
-not need to be a complete sentence and may start with a verb. QDoc will append
-the brief description onto the QML type in tables and generated lists.
-
-\code
-\qmltype ColorAnimation
-\brief Animates changes in color values
-\endcode
-
-Here are some alternate verbs for the brief statement:
-\list
-\li "Provides..."
-\li "Specifies..."
-\li "Describes..."
-\endlist
-
-The \e{detailed description} follows the brief and may contain images, snippet,
-and link to other documentation.
-
-\section1 Properties
-
-The property description focuses on what the property \e does and may use the
-following style:
-
-Property documentation usually starts with "This property..." but for certain
-properties, these are the common expressions:
-\list
-\li "This property holds..."
-\li "This property describes..."
-\li "This property represents..."
-\li "Returns \c true when... and \c false when..." - for properties that
-are marked \c{read-only}.
-\li "Sets the..." - for properties that configure a type.
-\endlist
-
-\section1 Signals and Handlers Documentation
-
-QML signals are documented either in the QML file or in the C++ implementation
-with the \l{qmlsignal-command}{\\qmlsignal} command. Signal documentation
-must include the condition for emitting the signal, mention the corresponding
-signal handler, and document whether the signal accepts a parameter.
-
-\snippet examples/qml.qdoc.sample signals
-
-These are the possible documentation styles for signals:
-\list
-\li "This signal is triggered when..."
-\li "Triggered when..."
-\li "Emitted when..."
-\endlist
-
-\section1 Methods and JavaScript Functions
-
-Typically, function documentation immediately precedes the implementation of the
-function in the \c .cpp file. The \l{topic-commands}{topic command} for
-functions is \l{fn-command}{\\fn}. For functions in QML or JavaScript, the
-documentation must reside immediately above the function declaration.
-
-The function documentation starts with a verb, indicating the operation the
-function performs.
-
-\snippet examples/qml.qdoc.sample function
-
-Some common verbs for function documentation:
-\list
-\li "Copies..." - for constructors
-\li "Destroys..." - for destructors
-\li "Returns..." - for accessor functions
-\endlist
-
-The function documentation must document:
-\list
-\li the return type
-\li the parameters
-\li the actions of the functions
-\endlist
-
-The \l{a-command}{\\a} command marks the parameter in the documentation.
-The return type documentation should link to the type documentation or be
-marked with the \l{c-command}{\\c} command in the case of boolean values.
-
-\section1 Enumerations
-
-QML enumerations are documented as QML properties with the
-\l{qmlproperty-command}{\\qmlproperty} command. The type of the property
-is \c enumeration. Use the \l{value-command}{\\value} command to document
-the enum values. Add the type name as a prefix to each value, separated by
-a period (.), as QDoc does not do this automatically.
-
-\snippet examples/qml.qdoc.sample enums
-
-The QDoc comment lists the values of the enumeration. If the enumeration is
-implemented in C++, the documentation may link to the corresponding C++
-enumeration. However, the QDoc comment should advise that the enumeration
-is a C++ enumeration.
-
-*/
-
diff --git a/src/qdoc/doc/qdoc-manual-cmdindex.qdoc b/src/qdoc/doc/qdoc-manual-cmdindex.qdoc
deleted file mode 100644
index 45d58611c..000000000
--- a/src/qdoc/doc/qdoc-manual-cmdindex.qdoc
+++ /dev/null
@@ -1,157 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \page 27-qdoc-commands-alphabetical.html
- \previouspage Introduction to QDoc
- \nextpage Topic Commands
-
- \title Command Index
-
- This is a complete, alphabetized list of the QDoc commands.
-
- \list
-
- \li \l {a-command} {\\a}
- \li \l {abstract-command} {\\abstract}
- \li \l {annotatedlist-command} {\\annotatedlist}
- \li \l {b-command} {\\b}
- \li \l {badcode-command} {\\badcode}
- \li \l {b-command} {\\bold} (deprecated, use \\b)
- \li \l {brief-command} {\\brief}
- \li \l {c-command} {\\c}
- \li \l {caption-command} {\\caption}
- \li \l {class-command} {\\class}
- \li \l {code-command} {\\code}
- \li \l {codeline-command} {\\codeline}
- \li \l {default-command} {\\default}
- \li \l {div-command} {\\div}
- \li \l {dots-command} {\\dots}
- \li \l {e-command} {\\e}
- \li \l {else-command} {\\else}
- \li \l {endif-command} {\\endif}
- \li \l {enum-command} {\\enum}
- \li \l {example-command} {\\example}
- \li \l {externalpage-command} {\\externalpage}
- \li \l {fn-command} {\\fn}
- \li \l {footnote-command} {\\footnote}
- \li \l {generatelist-command} {\\generatelist}
- \li \l {group-command} {\\group}
- \li \l {header-command} {\\header}
- \li \l {headerfile-command} {\\headerfile}
- \li \l {e-command} {\\i} (deprecated, use \\e)
- \li \l {if-command} {\\if}
- \li \l {image-command} {\\image}
- \li \l {include-command} {\\include}
- \li \l {ingroup-command} {\\ingroup}
- \li \l {inheaderfile-command}{\\inheaderfile}
- \li \l {inherits-command}{\\inherits}
- \li \l {inlineimage-command} {\\inlineimage}
- \li \l {inmodule-command} {\\inmodule}
- \li \l {inqmlmodule-command} {\\inqmlmodule}
- \li \l {instantiates-command} {\\instantiates}
- \li \l {internal-command} {\\internal}
- \li \l {keyword-command} {\\keyword}
- \li \l {l-command} {\\l}
- \li \l {legalese-command} {\\legalese}
- \li \l {li-command} {\\li}
- \li \l {list-command} {\\list}
- \li \l {macro-command} {\\macro}
- \li \l {meta-command} {\\meta}
- \li \l {module-command} {\\module}
- \li \l {namespace-command} {\\namespace}
- \li \l {nextpage-command} {\\nextpage}
- \li \l {newcode-command} {\\newcode}
- \li \l {noautolist-command} {\\noautolist}
- \li \l {nonreentrant-command} {\\nonreentrant}
- \li \l {note-command} {\\note}
- \li \l {li-command} {\\o} (deprecated, use \\li)
-
- \li \l {obsolete-command} {\\obsolete}
- \li \l {oldcode-command} {\\oldcode}
- \li \l {omit-command} {\\omit}
- \li \l {omitvalue-command} {\\omitvalue}
- \li \l {overload-command} {\\overload}
- \li \l {page-command} {\\page}
- \li \l {preliminary-command} {\\preliminary}
- \li \l {previouspage-command} {\\previouspage}
- \li \l {printline-command} {\\printline}
- \li \l {printto-command} {\\printto}
- \li \l {printuntil-command} {\\printuntil}
- \li \l {property-command} {\\property}
- \li \l {qml-command} {\\qml}
- \li \l {qmlabstract-command} {\\qmlabstract}
- \li \l {qmlattachedproperty-command} {\\qmlattachedproperty}
- \li \l {qmlattachedsignal-command} {\\qmlattachedsignal}
- \li \l {qmlbasictype-command} {\\qmlbasictype}
- \li \l {qmlclass-command} {\\qmlclass} (deprecated, use \\qmltype)
- \li \l {qmltype-command} {\\qmltype}
- \li \l {qmlmethod-command} {\\qmlmethod}
- \li \l {qmlproperty-command} {\\qmlproperty}
- \li \l {qmlsignal-command} {\\qmlsignal}
- \li \l {qmlmodule-command} {\\qmlmodule}
- \li \l {qtcmakepackage-command} {\\qtcmakepackage}
- \li \l {quotation-command} {\\quotation}
- \li \l {quotefile-command} {\\quotefile}
- \li \l {quotefromfile-command} {\\quotefromfile}
- \li \l {raw-command} {\\raw}
- \li \l {readonly-command} {\\readonly}
- \li \l {reentrant-command} {\\reentrant}
- \li \l {reimp-command} {\\reimp}
- \li \l {relates-command} {\\relates}
- \li \l {required-command} {\\required}
- \li \l {row-command} {\\row}
- \li \l {sa-command} {\\sa}
- \li \l {sectionOne-command} {\\section1}
- \li \l {sectionTwo-command} {\\section2}
- \li \l {sectionThree-command} {\\section3}
- \li \l {sectionFour-command} {\\section4}
- \li \l {since-command} {\\since}
- \li \l {skipline-command} {\\skipline}
- \li \l {skipto-command} {\\skipto}
- \li \l {skipuntil-command} {\\skipuntil}
- \li \l {snippet-command} {\\snippet}
- \li \l {span-command} {\\span}
- \li \l {startpage-command} {\\startpage}
- \li \l {sub-command} {\\sub}
- \li \l {subtitle-command} {\\subtitle}
- \li \l {sup-command} {\\sup}
- \li \l {table-command} {\\table}
- \li \l {tableofcontents-command} {\\tableofcontents}
- \li \l {target-command} {\\target}
- \li \l {threadsafe-command} {\\threadsafe}
- \li \l {title-command} {\\title}
- \li \l {tt-command} {\\tt}
- \li \l {typealias-command} {\\typealias}
- \li \l {typedef-command} {\\typedef}
- \li \l {uicontrol-command} {\\uicontrol}
- \li \l {underline-command} {\\underline}
- \li \l {variable-command} {\\variable}
- \li \l {value-command} {\\value}
- \li \l {warning-command} {\\warning}
- \endlist
-*/
diff --git a/src/qdoc/doc/qdoc-manual-contextcmds.qdoc b/src/qdoc/doc/qdoc-manual-contextcmds.qdoc
deleted file mode 100644
index fa0e71dee..000000000
--- a/src/qdoc/doc/qdoc-manual-contextcmds.qdoc
+++ /dev/null
@@ -1,1004 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \page 14-qdoc-commands-contextcommands.html
- \previouspage Topic Commands
- \nextpage Document Navigation
-
- \title Context Commands
-
- The context commands provide information about the element being
- documented that QDoc can't deduce on its own. For example:
- \list
- \li Is this class thread-safe?
- \li Is this function reentrant?
- \li Of which module is this class a member?
- \li Which include statement is needed to use this class?
- \endlist
-
- Context commands can appear anywhere in a QDoc comment,
- but they are normally placed near the top of the comment, just
- below the \l {Topic Commands} {topic} command.
-
- \list
- \li \l {abstract-command} {\\abstract}
- \li \l {ingroup-command}{\\ingroup},
- \li \l {inheaderfile-command}{\\inheaderfile},
- \li \l {inherits-command}{\\inherits},
- \li \l {inmodule-command}{\\inmodule},
- \li \l {internal-command}{\\internal},
- \li \l {nextpage-command}{\\nextpage},
- \li \l {nonreentrant-command}{\\nonreentrant},
- \li \l {obsolete-command}{\\obsolete},
- \li \l {overload-command}{\\overload},
- \li \l {preliminary-command}{\\preliminary},
- \li \l {previouspage-command}{\\previouspage},
- \li \l {qmlabstract-command} {\\qmlabstract}
- \li \l {qtcmakepackage-command} {\\qtcmakepackage}
- \li \l {readonly-command} {\\readonly}
- \li \l {reentrant-command}{\\reentrant},
- \li \l {reimp-command}{\\reimp},
- \li \l {relates-command}{\\relates},
- \li \l {required-command} {\\required}
- \li \l {since-command}{\\since},
- \li \l {startpage-command}{\\startpage},
- \li \l {subtitle-command}{\\subtitle}
- \li \l {threadsafe-command}{\\threadsafe},
- \li \l {title-command}{\\title}
- \endlist
-
-*/
-
-/*!
- \page 15-qdoc-commands-navigation.html
- \previouspage Context Commands
- \nextpage Status
-
- \title Document Navigation
-
- The navigation commands are for linking the pages of a document in
- a meaningful sequence. Below is a sequence of QDoc comments that
- shows a typical use of the navigation commands.
-
- \section1 Example
- \quotefile files/basicqt.qdoc.sample
-
- QDoc renders the "Getting Started" page in \c{creatingdialogs.html}:
-
- \quotation
- \raw HTML
- <table border="0" cellpadding="0" cellspacing="5" width="100%">
-
- <tr>
- <p>
- [Previous: <a href="15-qdoc-commands-navigation.html#deadlink">
- Basic Qt</a>]
- [<a href="15-qdoc-commands-navigation.html#deadlink">Contents</a>]
- [Next: <a href="15-qdoc-commands-navigation.html#deadlink">
- Creating Dialogs</a>]
- </p>
-
- <h1 align="center">Getting Started<br /></h1>
-
- <p>
- This chapter shows how to combine basic C++ with the
- functionality provided by Qt to create a few small graphical
- interface (GUI) applications.
- </p>
-
- <p>
- [Previous: <a href="15-qdoc-commands-navigation.html#deadlink">
- Basic Qt</a>]
- [<a href="15-qdoc-commands-navigation.html#deadlink">Contents</a>]
- [Next: <a href="15-qdoc-commands-navigation.html#deadlink">
- Creating Dialogs</a>]
- </p>
-
- </table>
- \endraw
- \endquotation
-
- The \l {startpage-command} {\\startpage} command creates a link to
- the page the author wants as the first page of a multipage document.
-
- The link is included in the generated HTML source code but has no
- visual effect on the documentation:
-
- \code
- <head>
- ...
- <link rel="start" href="basicqt.html" />
- ...
- </head>
- \endcode
-
- \section1 Commands
-
- \target previouspage-command
- \section2 \\previouspage
-
- The \\previouspage command links the current page to the previous
- page in a sequence. The command has two arguments, each enclosed
- by curly braces: the first is the link target (the title of
- the previous page), the second is the link text. If the page's
- title is equivalent to the link text, the second argument can be
- omitted.
-
- The command must stand alone on its own line.
-
- \target nextpage-command
- \section2 \\nextpage
-
- The \\nextpage command links the current page to the next page in
- a sequence. The command follows the same syntax and argument
- convention as the \l {previouspage-command} {\\previouspage}
- command.
-
- \target startpage-command
- \section2 \\startpage
-
- The \\startpage command specifies the first page of a sequence of
- pages. The command must stand alone on its own line, and its
- unique argument is the title of the first document.
-
- QDoc will generate a link to the start page and include it in the
- generated HTML file, but this has no visual effect on the
- documentation. The generated link type tells browsers and search
- engines which document is considered by the author to be the
- starting point of the collection.
-*/
-
-/*!
- \page 16-qdoc-commands-status.html
- \previouspage Document Navigation
- \nextpage Thread Support
-
- \title Status
-
- These commands are for indicating that a documented element has
- some special status. The element could be marked as about to be
- made obsolete, or that it is simply not to be included in the public
- interface. The \l {since-command}{\\since} command is for
- specifying the version number in which a function or class first
- appeared. The \l {qmlabstract-command} {\\qmlabstract} command is
- for marking a QML type as an abstract base class.
-
- \target abstract-command
- \target qmlabstract-command
- \section1 \\abstract and \\qmlabstract
-
- \\abstract is a synonym for the \\qmlabstract command. Add this
- command to the \l {qmltype-command} {\\qmltype} comment for a QML
- type when that type is meant to be used \e {only} as an abstract
- base type. When a QML type is abstract, it means that the QML type
- that can't be instantiated. Instead, the properties in its public
- API are included in the public properties list on the reference
- page for each QML type that inherits the abstract QML type. The
- properties are documented as if they are properties of the
- inheriting QML type.
-
- Normally, when a QML type is marked with \e{\\qmlabstract}, it is
- also marked with \e{\\internal} so that its reference page is not
- generated. It the abstract QML type is not marked internal, it
- will have a reference page in the documentation.
-
- \target default-command
- \section1 \\default
-
- The \\default command is for marking a QML property as the
- \l {default-properties}
- {default property}. The word \c default is displayed in
- the documentation of the property.
-
- \code
- / *!
- \qmlproperty list<Change> State::changes
- This property holds the changes to apply for this state.
- \default
-
- By default these changes are applied against the default state. If the state
- extends another state, then the changes are applied against the state being
- extended.
- * /
- \endcode
-
- See how QDoc renders this property on the reference page for the
- \l {State::changes}{State} type.
-
- \target dontdocument-command
- \section1 \\dontdocument
-
- The \\dontdocument command is only used in a dontdocument.qdoc file
- for a particular module. This file specifies publically declared
- classes or structs that are not meant to be documented. QDoc will
- not print warnings about missing \\class comments for these classes
- and structs.
-
- Below you will find the \\dontdocument command in the
- dontdocument.qdoc for widgets:
-
- \badcode
- / *!
- \dontdocument (QTypeInfo QMetaTypeId)
- * /
- \endcode
-
- \target inheaderfile-command
- \section1 \\inheaderfile
-
- The \\inheaderfile meta-command is used for overriding the include statement
- generated for a C++ class, namespace, or header file reference documentation.
-
- By default, QDoc documents a \c {\class SomeClass} to be available with
- a following include statement:
-
- \code
- #include <SomeClass>
- \endcode
-
- If the actual include statement differs from the default, this can be
- documented as
-
- \badcode
- \class SomeClass
- \inheaderfile Tools/SomeClass
- ...
- \endcode
-
- See also \l {class-command}{\\class} and
- \l {headerfile-command}{\\headerfile}.
-
- \target obsolete-command
- \section1 \\obsolete
-
- The \\obsolete command is for indicating that a function is being
- deprecated, and it should no longer be used in new code. There is
- no guarantee for how long it will remain in the library.
-
- The \\obsolete command takes no arguments.
-
- When generating the reference documentation for a class, QDoc will
- create and link to a separate page documenting its obsolete
- functions. Usually an equivalent function is provided as an
- alternative.
-
- \code
- / *!
- \fn MyClass::MyObsoleteFunction
- \obsolete
-
- Use MyNewFunction() instead.
- * /
- \endcode
-
- QDoc renders this in \c{myclass-obsolete.html} as:
-
- \quotation
- \raw HTML
- <h1>Obsolete Members for MyClass</h1>
- \endraw
-
- \b {The following class members are obsolete.} They are
- provided to keep old source code working. We strongly advise
- against using them in new code.
-
- ...
-
- \list
- \li void MyObsoleteFunction() \c (obsolete)
- \li ...
- \endlist
-
- \raw HTML
- <hr />
- <h2>Member Function Documentation</h2>
- <h3>void MyObsoleteFunction ()</h3>
- <p>Use MyNewFunction() instead.</p>
- \endraw
- ...
- \endquotation
-
- \target internal-command
- \section1 \\internal
-
- The \\internal command indicates that the referenced
- function is not part of the public interface.
-
- The command must stand on its own line.
-
- QDoc ignores the documentation as well as the documented item,
- when generating the associated class reference documentation.
-
- \code
- / *!
- \internal
-
- Tries to find the decimal separator. If it can't find
- it and the thousand delimiter is != '.' it will try to
- find a '.';
- * /
- int QDoubleSpinBoxPrivate::findDelimiter
- (const QString &str, int index) const
- {
- int dotindex = str.indexOf(delimiter, index);
- if (dotindex == -1 && thousand != dot && delimiter != dot)
- dotindex = str.indexOf(dot, index);
- return dotindex;
- }
- \endcode
-
- This function will not be included in the documentation.
-
- \target preliminary-command
- \section1 \\preliminary
-
- The \\preliminary command is for indicating that a referenced
- function is still under development.
-
- The command must stand on its own line.
-
- The \\preliminary command expands to a notification in the
- function documentation, and marks the function as preliminary when
- it appears in lists.
-
- \code
- / *!
- \preliminary
-
- Returns information about the joining type attributes of the
- character (needed for certain languages such as Arabic or
- Syriac).
-
- * /
- QChar::JoiningType QChar::joiningType() const
- {
- return QChar::joiningType(ucs);
- }
- \endcode
-
- QDoc renders this as:
-
- \quotation
- \raw HTML
- <h3>
- <a href="http://doc.qt.io/qt-5/qchar.html#JoiningType-enum">JoiningType</a>
- QChar::joiningType() const</h3>
- \endraw
-
- \b {This function is under development and
- subject to change.}
-
- Returns information about the joining type attributes of the
- character (needed for certain languages such as Arabic or
- Syriac).
- \endquotation
-
- And the function's entry in QChar's list of public functions will be
- rendered as:
-
- \quotation
- \list
- \li ...
- \li JoiningType \l {QChar::joiningType()} {joiningType}() const \c (preliminary)
- \li ...
- \endlist
- \endquotation
-
- \target readonly-command
- \section1 \\readonly
-
- The \\readonly command is used in conjunction with a \l {qmlproperty-command}
- {\\qmlproperty} command to mark the QML property as read-only.
-
- \target required-command
- \section1 \\required
-
- The \\required command is used in conjunction with a \l {qmlproperty-command}
- {\\qmlproperty} command to mark the QML property as required.
-
- \b {See also} \l {The Property System}.
-
- \target since-command
- \section1 \\since
-
- The \\since command tells in which minor release
- the associated functionality was added.
-
- \code
- / *!
- \since 4.1
-
- Returns an icon for \a standardIcon.
-
- ...
-
- \sa standardPixmap()
- * /
- QIcon QStyle::standardIcon(StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const
- {
- }
- \endcode
-
- QDoc renders this as:
-
- \quotation
- \raw HTML
- <h3>QIcon QStyle::standardIcon(StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const</h3>
- \endraw
-
- This function was introduced in Qt version 4.1
-
- Returns an icon for \a standardIcon.
-
- ...
-
- See also \l {QStyle::standardPixmap()} {standardPixmap()}.
- \endquotation
-
- QDoc generates the "Qt" reference from the \l
- {25-qdoc-configuration-derivedprojects.html#project} {\c project}
- configuration variable. For that reason this reference will change
- according to the current documentation project.
-
- See also \l {project}
- {\c project}.
-*/
-
-
-/*!
- \page 17-qdoc-commands-thread.html
- \previouspage Status
- \nextpage Relating Things
-
- \title Thread Support
-
- The thread support commands are for specifying the level of
- support for multithreaded programming in a class or function.
- There are three levels of support: \c threadsafe, \c reentrant and
- \c nonreentrant.
-
- The default is \c nonreentrant which means that the associated
- class or function cannot be called by multiple threads. \c
- Reentrant and \c threadsafe are levels primarily used for classes.
-
- \c Reentrant means that all the functions in the referenced class
- can be called simultaneously by multiple threads, provided that
- each invocation of the functions reference unique data. While \c
- threadsafe means that all the functions in the referenced class
- can be called simultaneously by multiple threads even when each
- invocation references shared data.
-
- When a class is marked \l {reentrant-command} {\\reentrant} or \l
- {threadsafe-command} {\\threadsafe}, functions in that class can
- be marked \c nonreentrant using the \l {nonreentrant-command}
- {\\nonreentrant} command.
-
- \section1 Example
-
- \target reentrant-example
- \code
- \beginqdoc
- \class QLocale
- \brief The QLocale class converts between numbers and their
- string representations in various languages.
-
- \reentrant
- \ingroup i18n
- \ingroup text
-
- QLocale is initialized with a language/country pair in its
- constructor and offers number-to-string and string-to-number
- conversion functions similar to those in QString.
-
- ...
-
- \nonreentrant
-
- Sets the global default locale to \a locale. These values are
- used when a QLocale object is constructed with no
- arguments. If this function is not called, the system's locale
- is used.
-
- \warning In a multithreaded application, the default locale
- should be set at application startup, before any non-GUI
- threads are created.
-
- \sa system(), c()
- \endqdoc
- void QLocale::setDefault(const QLocale &locale)
- {
- default_d = locale.d;
- }
- \endcode
-
- QDoc renders this as:
-
- \quotation
- \raw HTML
- <h1><center>QLocale Class Reference</center></h1>
- \endraw
-
- The QLocale class converts between numbers and their string
- representations in various languages. More...
-
- \code
- #include <QLocale>
- \endcode
-
- \b {Note:} All the functions in this class are \l
- {17-qdoc-commands-thread.html#reentrant} {reentrant}, except \l
- {QLocale::setDefault()} {setDefault()}.
-
- ...
-
- \raw HTML
- <hr />
- <h2>Member Type Documentation</h2>
- \endraw
-
- ...
-
- \raw HTML
- <h3>void QLocale::setDefault ( const QLocale & locale ) </h3>
- \endraw
-
- Sets the global default locale to locale. These values are
- used when a QLocale object is constructed with no
- arguments. If this function is not called, the system's locale
- is used.
-
- \warning In a multithreaded application, the default locale
- should be set at application startup, before any non-GUI
- threads are created.
-
- \warning This function is not reentrant.
-
- See also \l {QLocale::system()} {system()} and \l
- {QLocale::c()} {c()}.
-
- ...
- \endquotation
-
- As shown above, QDoc generates a notification when a class is
- declared reentrant, and lists the exceptions (the declared
- nonreentrant functions). A link to the general documentation on \l
- {17-qdoc-commands-thread.html#reentrant} {reentrancy and thread-safety} is
- included. In addition a warning, "\b Warning: This function is
- not reentrant.", is generated in the nonreentrant functions'
- documentation.
-
- QDoc will generate the same notification and warnings when a class
- is declared threadsafe.
-
- For more information see the general documentation on \l
- {17-qdoc-commands-thread.html#reentrant} {reentrancy and thread-safety}.
-
- \section1 Commands
-
- \target threadsafe-command
- \section2 \\threadsafe
-
- The \\threadsafe command includes a line in the documentation to
- indicate that the associated class or function is \e threadsafe
- and can be called simultaneously by multiple threads, even when
- separate invocations reference shared data.
-
- The command must stand on its own line.
-
- The documentation generated from this command will be similar to
- the what is generated for the \l {reentrant-command} {\\reentrant}
- command. See the example above in the \l {reentrant-example}
- {introduction}.
-
- See also \l{reentrant-command} {\\reentrant} and
- \l{nonreentrant-command} {\\nonreentrant}.
-
- \target reentrant-command
- \section2 \\reentrant
-
- The \\reentrant command indicates that the associated class or
- function can be called simultaneously by multiple threads,
- provided that each invocation references its own data. See the \l
- {reentrant-example} {example} above.
-
- The command must stand on its own line.
-
- See also \l{nonreentrant-command} {\\nonreentrant} and
- \l{threadsafe-command} {\\threadsafe}.
-
- \target nonreentrant-command
- \section2 \\nonreentrant
-
- The \\nonreentrant command indicates that the associated class or
- function cannot be called by multiple threads. Nonreentrant is the
- default case.
-
- The command must stand on its own line.
-
- When a class is marked \l {reentrant-command} {\\reentrant} or \l
- {threadsafe-command} {\\threadsafe}, functions in that class can
- be marked \c nonreentrant using this command in the \l{fn-command}
- {\\fn} comment of the functions to be excluded.
-
- See also \l{reentrant-command} {\\reentrant} and
- \l{threadsafe-command} {\\threadsafe}.
-*/
-
-/*!
- \page 18-qdoc-commands-relating.html
- \previouspage Thread Support
- \nextpage Grouping Things
-
- \title Relating Things
-
- The relating commands are for specifying how one documented
- element relates to another documented element. Some examples:
- \list
- \li This function is an overload of another function.
- \li This function is a reimplementation of another function.
- \li This typedef is \e related to some class or header file.
- \endlist
-
- There is also a command for documenting that a QML type inherits
- some other QML type.
-
- \section1 Commands
-
- \target inherits-command
- \section2 \\inherits
-
- The \\inherits command is for documenting that one QML type
- inherits some other QML type. It must be included in the
- inheriting element's \l{qmltype-command}{\\qmltype} comment.
- The argument is the name of the inherited QML type.
-
- \code
- / *!
- \qmltype PauseAnimation
- \instantiates QDeclarativePauseAnimation
- \ingroup qml-animation-transition
- \since 4.7
- \inherits Animation
- \brief The PauseAnimation element provides a pause for an animation.
-
- When used in a SequentialAnimation, PauseAnimation is a step
- when nothing happens, for a specified duration.
-
- A 500ms animation sequence, with a 100ms pause between two animations:
-
- SequentialAnimation {
- NumberAnimation { ... duration: 200 }
- PauseAnimation { duration: 100 }
- NumberAnimation { ... duration: 200 }
- }
-
- \sa {QML Animation and Transitions}, {declarative/animation/basics}{Animation basics example}
- * /
- \endcode
-
- QDoc includes this line on the reference page for the
- \l [QML] PauseAnimation
- element:
-
- \quotation
- Inherits \l [QML] Animation
- \endquotation
-
- \target overload-command
- \section2 \\overload
-
- The \\overload command is for indicating that a function is a
- secondary overload of its name.
-
- The command must stand on its own line.
-
- For a function name that is overloaded (except constructors), QDoc
- expects one primary version of the function, and all the others
- marked with the \b {\\overload command}. The primary version
- should be fully documented. Each overload can have whatever extra
- documentation you want to add for just that overloaded version.
-
- You can include the function name plus '()' as a parameter to
- the \b{\\overload} command, which will include a standard
- \e{This function overloads...} line of text with a link
- to the documentation for the primary version of the function.
-
- \code
- / *!
- \overload addAction()
-
- This convenience function creates a new action with an
- \a icon and some \a text. The function adds the newly
- created action to the menu's list of actions, and
- returns it.
-
- \sa QWidget::addAction()
- * /
- QAction *QMenu::addAction(const QIcon &icon, const QString &text)
- {
- QAction *ret = new QAction(icon, text, this);
- addAction(ret);
- return ret;
- }
- \endcode
-
- QDoc renders this as:
-
- \quotation
- \raw HTML
- <h3><a href="http://doc.qt.io/qt-5/qaction.html">QAction</a>
- * QMenu::addAction ( const QIcon & <i>icon</i>,
- const QString & <i>text</i> )
- </h3>
- \endraw
-
- This function overloads \l {QMenu::addAction()} {addAction()}
-
- This convenience function creates a new action with an
- \e icon and some \e text. The function adds the newly
- created action to the menu's list of actions, and
- returns it.
-
- See also
- \l {QWidget::addAction()} {QWidget::addAction}().
- \endquotation
-
- If you don't include the function name with the \b{\\overload}
- command, then instead of the "This function overloads..." line
- with the link to the documentation for the primary version, you
- get the old standard line:
-
- \quotation
- This is an overloaded member function, provided for
- convenience.
- \endquotation.
-
- \target reimp-command
- \section2 \\reimp
-
- The \\reimp command is for indicating that a function is a
- reimplementation of a virtual function.
-
- The command must stand on its own line.
-
- QDoc will omit the reimplemented function from the class
- reference.
-
- \code
- / *!
- \reimp
- * /
- void QToolButton::nextCheckState()
- {
- Q_D(QToolButton);
- if (!d->defaultAction)
- QAbstractButton::nextCheckState();
- else
- d->defaultAction->trigger();
- }
- \endcode
-
- This function will not be included in the documentation. Instead,
- a link to the base function QAbstractButton::nextCheckState() will
- appear in the documentation.
-
- \target relates-command
- \section2 \\relates
-
- The \\relates command is for including the documentation of a
- global element to some class or header file. The argument is a
- class name or header file.
-
- \code
- / *!
- \relates QChar
-
- Reads a char from the stream \a in into char \a chr.
-
- \sa {Format of the QDataStream operators}
- * /
- QDataStream &operator>>(QDataStream &in, QChar &chr)
- {
- quint16 u;
- in >> u;
- chr.unicode() = ushort(u);
- return in;
- }
- \endcode
-
- The documentation for this function will be included on the reference page
- for class QChar.
-*/
-
-/*!
- \page 19-qdoc-commands-grouping.html
- \previouspage Relating Things
- \nextpage Naming Things
-
- \title Grouping Things
-
- The grouping commands relate classes to defined groups and
- modules. The groups are used when generating lists of related
- classes in the documentation, while the modules are elements of
- Qt's structure.
-
- \section1 Commands
-
- \target ingroup-command
- \section2 \\ingroup
-
- The \\ingroup command indicates that the given
- overview or documented class belongs to a certain group of
- related docmentation.
-
- A class or overview may belong to many groups.
-
- The \\ingroup command's argument is a group name, but note
- that the command considers the rest of the line as part of
- its argument. Make sure that the group name is followed by
- a linebreak.
-
- \code
- / *!
- \class QDir
- \brief The QDir class provides access to directory
- structures and their contents.
-
- \ingroup io
- ...
- * /
- \endcode
-
- This will include the QDir class in the \c io group, which means,
- for example, that QDir will appear on the list created by calling
- the \l {group-command} {\\group} command with the \c io argument.
-
- To list overviews that are related to a certain group, you must
- generate the list explicitly using the \l {generatelist-command}
- {\\generatelist} command with the \c related argument.
-
- See also \l {group-command} {\\group}.
-
- \target inmodule-command
- \section2 \\inmodule
-
- The \\inmodule command relates a class to the module specified by
- the command's argument.
-
- For the basic classes in Qt, a class's module is determined by its
- location, namely its directory. However, for extensions like
- ActiveQt and Qt Designer, a class must be related to a module
- explicitly.
-
- The command's argument is a module name, but note that the command
- considers the rest of the line as part of its argument. Make sure
- that the module name is followed by a linebreak.
-
- \code
- /*!
- \class QDesignerTaskMenuExtension
- \inmodule QtDesigner
- * /
- \endcode
-
- This ensures that the QDesignerTaskMenuExtension class is included
- in the Qt Designer module, which means, for example, that the
- class will appear on the list created by calling the \l
- {generatelist-command} {\\generatelist} command with the \c
- {{classesbymodule QtDesigner}} argument.
-
- See also \l {module-command} {\\module} and \l
- {generatelist-command} {\\generatelist}.
-*/
-
-/*!
- \page 20-qdoc-commands-namingthings.html
- \previouspage Grouping Things
- \nextpage Markup Commands
-
- \title Naming Things
-
- In general, a title command considers everything that follows it
- until the first line break as its argument. If the title is so
- long it must span multiple lines, end each line (except the last
- one) with a backslash.
-
- \section1 Commands
-
- \target title-command
- \section2 \\title
-
- The \\title command sets the title for a documentation page, or
- allows you to override it.
-
- \code
- / *!
- \page signalandslots.html
-
- \title Signals & Slots
-
- Signals and slots are used for communication between
- objects. The signals and slots mechanism is a central
- feature of Qt, and probably the part that differs most
- from the features provided by other frameworks.
-
- ...
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- \raw HTML
- <h1><center>Signal and Slots</center></h1>
- \endraw
-
- Signals and slots are used for communication between
- objects. The signals and slots mechanism is a central
- feature of Qt and probably the part that differs most
- from the features provided by other frameworks.
- ...
- \endquotation
- See also \l {subtitle-command} {\\subtitle}.
-
- \target subtitle-command
- \section2 \\subtitle
-
- The \\subtitle command sets a subtitle for a documentation page.
-
- \code
- \beginqdoc
- \page qtopiacore-overview.html
-
- \title Qtopia Core
- \subtitle Qt for Embedded Linux
-
- Qt/Embedded, the embedded Linux port of Qt, is a
- complete and self-contained C++ GUI and platform
- development tool for Linux-based embedded development.
- ...
- \endqdoc
- \endcode
-
- QDoc renders this as:
-
- \quotation
- \raw HTML
- <h1><center>Qtopia Core</center></h1>
- <h2><center>Qt for Embedded Linux</center></h2>
- \endraw
-
- Qt/Embedded, the embedded Linux port of Qt, is a
- complete and self-contained C++ GUI and platform
- development tool for Linux-based embedded development.
- ...
- \endquotation
-
- See also \l {title-command} {\\title}.
-
-*/
diff --git a/src/qdoc/doc/qdoc-manual-intro.qdoc b/src/qdoc/doc/qdoc-manual-intro.qdoc
deleted file mode 100644
index 525445b4f..000000000
--- a/src/qdoc/doc/qdoc-manual-intro.qdoc
+++ /dev/null
@@ -1,324 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \page 01-qdoc-manual.html
- \previouspage QDoc Manual
- \nextpage Command Index
-
- \title Introduction to QDoc
-
- QDoc is a tool used by Qt Developers to generate documentation for
- software projects. It works by extracting \e {QDoc comments} from
- project source files and then formatting these comments as HTML
- pages or DITA XML documents. QDoc finds QDoc comments in \c
- {.cpp} files and in \c {.qdoc} files. QDoc does not look for QDoc
- comments in \c {.h} files. A QDoc comment always begins with an
- exclamation mark (\b{!})). For example:
-
- \code
- / *!
- \class QObject
- \brief The QObject class is the base class of all Qt objects.
-
- \ingroup objectmodel
-
- \reentrant
-
- QObject is the heart of the Qt \l{Object Model}. The
- central feature in this model is a very powerful mechanism
- for seamless object communication called \l{signals and
- slots}. You can connect a signal to a slot with connect()
- and destroy the connection with disconnect(). To avoid
- never ending notification loops you can temporarily block
- signals with blockSignals(). The protected functions
- connectNotify() and disconnectNotify() make it possible to
- track connections.
-
- QObjects organize themselves in \l {Object Trees &
- Ownership} {object trees}. When you create a QObject with
- another object as parent, the object will automatically
- add itself to the parent's \c children() list. The parent
- takes ownership of the object. It will automatically
- delete its children in its destructor. You can look for an
- object by name and optionally type using findChild() or
- findChildren().
-
- Every object has an objectName() and its class name can be
- found via the corresponding metaObject() (see
- QMetaObject::className()). You can determine whether the
- object's class inherits another class in the QObject
- inheritance hierarchy by using the \c inherits() function.
-
- ....
- * /
- \endcode
-
- From the QDoc comment above, QDoc generates the HTML \l {QObject}
- {QObject class reference} page.
-
- This manual explains how to use the QDoc commands in QDoc comments
- to embed good documentation in your source files. It also explains
- how to make a \l {The QDoc Configuration File} {QDoc configuration
- file}, which you will pass to QDoc on the command line.
-
- \section1 Running QDoc
-
- The name of the QDoc program is \c {qdoc}. To run QDoc from the
- command line, give it the name of a configuration file:
-
- \quotation
- \c {$ ../../bin/qdoc ./config.qdocconf}
- \endquotation
-
- QDoc recognizes the \c {.qdocconf} suffix as a \l{The QDoc
- Configuration File} {QDoc configuration file}. The configuration
- file is where you tell QDoc where to find the project source
- files, header files, and \c {.qdoc} files. It is also where you
- tell QDoc what kind of output to generate (HTML, DITA XML,...),
- and where to put the generated documentation. The configuration
- file also contains other information for QDoc.
-
- See \l{The QDoc Configuration File} for instructions on how to
- set up a QDoc configuration file.
-
- \section2 Running QDoc in Single Execution Mode
-
- Beginning with Qt 5.5, a new way to run QDoc is available that
- reduces the time it takes to generate the Qt5 documentation by as
- much as 90%. The new way to run QDoc is \e{single execution} mode.
- Single execution mode is not currently available in the Qt5 build
- system, which still uses the \e {standard} mode. Single execution
- mode is only available when you run QDoc yourself, which you will
- want to do often as you document your module and integrate your
- documentation with the other Qt modules.
-
- To run QDoc in single execution mode, add \c {-single-exec} to the
- command line and pass QDoc a master \c qdocconf file that is
- simply a list of file paths for qdocconf files of all the Qt5
- modules. For example:
-
- \code
- /Users/me/qt5/qtbase/bin/qdoc -outputdir /Users/me/qt5/qtbase/doc -installdir /Users/me/qt5/qtbase/doc /Users/me/qt5/master.qdocconf -single-exec
- \endcode
-
- The qdocconf file, \c {master.qdocconf}, just lists the qdocconf files for all the Qt5 modules to be processed:
-
- \badcode
- /Users/me/qt5/qtbase/src/corelib/doc/qtcore.qdocconf
- /Users/me/qt5/qtbase/src/network/doc/qtnetwork.qdocconf
- /Users/me/qt5/qtbase/src/sql/doc/qtsql.qdocconf
- /Users/me/qt5/qtbase/src/xml/doc/qtxml.qdocconf
- /Users/me/qt5/qtbase/src/testlib/doc/qttestlib.qdocconf
- /Users/me/qt5/qtbase/src/concurrent/doc/qtconcurrent.qdocconf
- /Users/me/qt5/qtbase/src/gui/doc/qtgui.qdocconf
- /Users/me/qt5/qtbase/src/platformheaders/doc/qtplatformheaders.qdocconf
- /Users/me/qt5/qtbase/src/widgets/doc/qtwidgets.qdocconf
- /Users/me/qt5/qtbase/src/opengl/doc/qtopengl.qdocconf
- /Users/me/qt5/qtbase/src/printsupport/doc/qtprintsupport.qdocconf
- /Users/me/qt5/qtbase/src/tools/qdoc/doc/config/qdoc.qdocconf
- /Users/me/qt5/qtbase/qmake/doc/qmake.qdocconf
- /Users/me/qt5/qtsvg/src/svg/doc/qtsvg.qdocconf
- /Users/me/qt5/qtxmlpatterns/src/xmlpatterns/doc/qtxmlpatterns.qdocconf
- /Users/me/qt5/qtdeclarative/src/qml/doc/qtqml.qdocconf
- /Users/me/qt5/qtdeclarative/src/quick/doc/qtquick.qdocconf
- /Users/me/qt5/qtquickcontrols/src/controls/doc/qtquickcontrols.qdocconf
- /Users/me/qt5/qtquickcontrols/src/layouts/doc/qtquicklayouts.qdocconf
- /Users/me/qt5/qtquickcontrols/src/dialogs/doc/qtquickdialogs.qdocconf
- /Users/me/qt5/qtmultimedia/src/multimedia/doc/qtmultimedia.qdocconf
- /Users/me/qt5/qtmultimedia/src/multimediawidgets/doc/qtmultimediawidgets.qdocconf
- /Users/me/qt5/qtactiveqt/src/activeqt/doc/activeqt.qdocconf
- /Users/me/qt5/qtsensors/src/sensors/doc/qtsensors.qdocconf
- /Users/me/qt5/qtwebkit/Source/qtwebkit.qdocconf
- /Users/me/qt5/qttools/src/assistant/help/doc/qthelp.qdocconf
- /Users/me/qt5/qttools/src/assistant/assistant/doc/qtassistant.qdocconf
- /Users/me/qt5/qttools/src/designer/src/uitools/doc/qtuitools.qdocconf
- /Users/me/qt5/qttools/src/designer/src/designer/doc/qtdesigner.qdocconf
- /Users/me/qt5/qttools/src/linguist/linguist/doc/qtlinguist.qdocconf
- /Users/me/qt5/qtwebkit-examples/doc/qtwebkitexamples.qdocconf
- /Users/me/qt5/qtimageformats/src/imageformats/doc/qtimageformats.qdocconf
- /Users/me/qt5/qtgraphicaleffects/src/effects/doc/qtgraphicaleffects.qdocconf
- /Users/me/qt5/qtscript/src/script/doc/qtscript.qdocconf
- /Users/me/qt5/qtscript/src/scripttools/doc/qtscripttools.qdocconf
- /Users/me/qt5/qtserialport/src/serialport/doc/qtserialport.qdocconf
- /Users/me/qt5/qtdoc/doc/config/qtdoc.qdocconf
- \endcode
-
- \section3 Why Standard Mode Is Slow
-
- Currently, the Qt5 build system does not use QDoc's \e {single
- execution} mode for generating the Qt5 documentation. It runs QDoc
- in the \e {standard} mode. The standard mode was came about
- because it was the easiest way to get convert the Qt4 QDoc to
- handle the modularization of Qt in Qt5. In Qt4, QDoc ran once over
- all the Qt4 sources to generate the HTML documentation for Qt.
- While generating the Qt documentation, Qt4 QDoc also generated an
- \e {index file} for Qt. That index file was meant to be used as
- input to subsequent QDoc runs for generating HTML documentation
- for other software libraries/products that were based on Qt. The
- Qt index file allowed QDoc to link documentation written for those
- other libraries/products to the Qt4 documentation.
-
- When Qt5 came along, Qt was divided into modules. Since then,
- many new modules have been added to Qt. As of version 5.5, there
- are over 40 separate modules in Qt5, each with its own
- documentation that links to (depends on) the documentation of
- other Qt modules.
-
- In \e {standard mode}, QDoc runs twice for each module. The first
- QDoc run for a particular Qt module, parses all the module's
- source files and then uses the information to generate the
- module's index file. It is called the \e{prepare phase} because
- it \e prepares the module's index file. The second QDoc run for
- the module also parses all the module's source files and then
- generates the module's documentation pages. This is called the \e
- {generate phase} because it generates the module's documentation.
-
- The module's documentation will likely contain HTML links to the
- documentation of one or more of the other Qt modules. For example,
- most Qt5 modules contain links to documentation in QtCore. When a
- Qt module contains links into the documentation of other Qt
- module's, that module is said to depend on those other Qt modules.
- Hence when QDoc runs the \e {generate phase} for that module, it
- must also load the index files for those modules so it can create
- those thinks.
-
- Hence, when the Qt build system generates the Qt documentation, it
- first runs QDoc once for each module to perform the \e {prepare
- phase} to generate all the index files. Then it runs QDoc once for
- each module to perform the \e {generate phase}, where it uses the
- dependent index files to generate the module's documentation,
- including any cross-module links it finds. Each execution of
- QDoc, both \e {prepare phase} and \e {generate phase}, parses
- all the source files that are included in the module, and in the
- \e {generate phase} also parses the index files for the dependent
- modules. Nothing is retained or retainable between QDoc runs.
-
- \section3 Why Single Execution Mode Is Much Faster
-
- As the name implies, single execution mode uses a single QDoc
- process to generate all the Qt5 documentation. The single QDoc
- process still performs a \e{prepare phase} for each module and
- then a \e{generate phase} for each module, but there are a few
- differences. It begins by reading the master qdocconf file. Then
- it reads each qdocconf file in the master list and performs the
- \e{prepare phase} for each module. During the \e{prepare phase},
- all the source files for the module are parsed to build a syntax
- tree for the module. The module's index file is then generated,
- although QDoc will not re-read the index files in the \e{generate
- phase}. The important difference here is that the module's syntax
- tree is retained after the index file is generated, so that after
- the \e{prepare phase} has been run for all the modules, QDoc still
- has all the syntax trees it built.
-
- QDoc then processes each module again for the \e{generate phase}.
- But now QDoc doesn't need to re-parse each module's source files,
- because the module's syntax tree is still in memory. Nor does QDoc
- need to re-read the index files for the dependent modules, again
- because it still has the syntax trees for those modules in memory.
- It remains only to traverse each module's syntax tree to generate
- the documentation pages.
-
- Hence, QDoc parses each source file once and only once and doesn't
- need to read index files. This is what makes single execution mode
- much faster than the standard mode. It is anticipated that the Qt
- build system will eventually run QDoc in single execution mode.
- However, changes to the master qdocconf file might be required, so
- the method described above for running QDoc in single execution
- mode might have to change, watch this space for updates.
-
- \section1 How QDoc Works
-
- QDoc begins by reading the configuration file you specified on the
- command line. It stores all the variables from the configuration
- file for later use. One of the first variables it uses is \c
- {outputformats}. This variable tells QDoc which output generators
- it will run. The default value is \e {HTML}, so if you don't set
- \c {outputformats} in your configuration file, QDoc will generate
- HTML output. That's usually what you will want anyway, but you can
- also specify \e {DITAXML} to get DITA XML output instead.
-
- Next, QDoc uses the values of the
- \l {headerdirs-variable}
- {headerdirs} variable and/or the \l
- {22-qdoc-configuration-generalvariables.html#headers-variable}
- {headers} variable to find and parse all the header files for your
- project. QDoc does \e not scan header files for QDoc comments. It
- parses the header files to build a master tree of all the items
- that should be documented, in other words, the items that QDoc should find
- QDoc comments for.
-
- After parsing all the header files and building the master tree of
- items to be documented, QDoc uses the value of the \l
- {22-qdoc-configuration-generalvariables.html#sourcedirs-variable}
- {sourcedirs} variable and/or the value of the \l
- {22-qdoc-configuration-generalvariables.html#sources-variable}
- {sources} variable to find and parse all the \c {.cpp} and \c
- {.qdoc} files for your project. These are the files QDoc scans for
- \e {QDoc comments}. Remember that a QDoc comment begins with
- an exclamation mark: \b {/*!} .
-
- For each QDoc comment it finds, it searches the master tree for
- the item where the documentation belongs. Then it interprets the
- QDoc commands in the comment and stores the interpreted commands
- and the comment text in the tree node for the item.
-
- Finally, QDoc traverses the master tree. For each node, if the
- node has stored documentation, QDoc calls the output generator
- specified by the \c {outputformats} variable to format and write
- the documentation in the directory specified in the configuration
- file in the \l
- {22-qdoc-configuration-generalvariables.html#outputdir-variable}
- {outputdir} variable.
-
- \section1 Command Types
-
- QDoc interprets three types of commands:
-
- \list
- \li \l {Topic Commands}
- \li \l {Context Commands}
- \li \l {Markup Commands}
- \endlist
-
- Topic commands identify the element you are documenting, for example
- a C++ class, function, type, or an extra page of text
- that doesn't map to an underlying C++ element.
-
- Context commands tell QDoc how the element being documented
- relates to other documented elements, for example, next and previous page
- links, inclusion in page groups, or library modules. Context
- commands can also provide information about the documented element
- that QDoc can't get from the source files, for example, whether the
- element is thread-safe, whether it is an overloaded or reimplemented function,
- or whether it has been deprecated.
-
- Markup commands tell QDoc how text and image elements in the
- document should be rendered, or about the document's outline
- structure.
-*/
-
diff --git a/src/qdoc/doc/qdoc-manual-markupcmds.qdoc b/src/qdoc/doc/qdoc-manual-markupcmds.qdoc
deleted file mode 100644
index d5f1aab2b..000000000
--- a/src/qdoc/doc/qdoc-manual-markupcmds.qdoc
+++ /dev/null
@@ -1,3986 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \page 03-qdoc-commands-markup.html
- \previouspage Naming Things
- \nextpage Text Markup
-
- \title Markup Commands
-
- The markup commands indicate the generated documentation's visual
- appearance and logical structure.
-
- \list
- \li \l {a-command} {\\a}
- \li \l {annotatedlist-command} {\\annotatedlist}
- \li \l {b-command} {\\b}
- \li \l {badcode-command} {\\badcode}
- \li \l {b-command} {\\bold} (deprecated, use \\b)
- \li \l {brief-command} {\\brief}
- \li \l {c-command} {\\c}
- \li \l {caption-command} {\\caption}
- \li \l {code-command} {\\code}
- \li \l {codeline-command} {\\codeline}
- \li \l {div-command} {\\div}
- \li \l {dots-command} {\\dots}
- \li \l {e-command} {\\e}
- \li \l {else-command} {\\else}
- \li \l {endif-command} {\\endif}
- \li \l {footnote-command} {\\footnote}
- \li \l {generatelist-command} {\\generatelist}
- \li \l {header-command} {\\header}
- \li \l {e-command} {\\i} (deprecated, use \\e)
- \li \l {if-command} {\\if}
- \li \l {image-command} {\\image}
- \li \l {include-command} {\\include}
- \li \l {include-command} {\\input}
- \li \l {inlineimage-command} {\\inlineimage}
- \li \l {keyword-command} {\\keyword}
- \li \l {l-command} {\\l}
- \li \l {legalese-command} {\\legalese}
- \li \l {li-command} {\\li}
- \li \l {list-command} {\\list}
- \li \l {meta-command} {\\meta}
- \li \l {noautolist-command} {\\noautolist}
- \li \l {newcode-command} {\\newcode}
- \li \l {li-command} {\\o} (deprecated, use \\li)
- \li \l {note-command} {\\note}
- \li \l {oldcode-command} {\\oldcode}
- \li \l {omit-command} {\\omit}
- \li \l {printline-command} {\\printline}
- \li \l {printto-command} {\\printto}
- \li \l {printuntil-command} {\\printuntil}
- \li \l {qml-command}{\\qml}
- \li \l {quotation-command} {\\quotation}
- \li \l {quotefile-command} {\\quotefile}
- \li \l {quotefromfile-command} {\\quotefromfile}
- \li \l {raw-command} {\\raw}
- \li \l {row-command} {\\row}
- \li \l {sa-command} {\\sa}
- \li \l {sectionOne-command} {\\section1}
- \li \l {sectionTwo-command} {\\section2}
- \li \l {sectionThree-command} {\\section3}
- \li \l {sectionFour-command} {\\section4}
- \li \l {skipline-command} {\\skipline}
- \li \l {skipto-command} {\\skipto}
- \li \l {skipuntil-command} {\\skipuntil}
- \li \l {snippet-command} {\\snippet}
- \li \l {span-command} {\\span}
- \li \l {sub-command} {\\sub}
- \li \l {sup-command} {\\sup}
- \li \l {table-command} {\\table}
- \li \l {tableofcontents-command} {\\tableofcontents}
- \li \l {target-command} {\\target}
- \li \l {tt-command} {\\tt}
- \li \l {uicontrol-command} {\\uicontrol}
- \li \l {underline-command} {\\underline}
- \li \l {raw-command} {\\unicode}
- \li \l {warning-command} {\\warning}
- \li \l {backslash-command} {\\\\}
- \endlist
-*/
-
-
-/*!
- \page 04-qdoc-commands-textmarkup.html
- \previouspage Markup Commands
- \nextpage Document Structure
-
- \title Text Markup
-
- The text formatting commands indicate how text is to be rendered.
-
- \target a-command
- \section1 \\a (parameter marker)
-
- The \\a command tells QDoc the next word is a formal parameter name.
-
- A warning is emitted when a formal parameter is not documented or
- is misspelled, so when you document a function you should mention
- each formal parameter by name in the function description,
- preceded by the \\a command. The parameter name is then rendered
- in italics.
-
- \code
- / *!
- Constructs a line edit containing the text
- \a contents. The \a parent parameter is sent
- to the QWidget constructor.
- * /
-
- QLineEdit::QLineEdit(const QString &contents, QWidget *parent) :QWidget(parent)
- {
- ...
- }
-
- \endcode
-
- QDoc renders this as:
-
- \quotation
- \b {QLineEdit::QLineEdit ( const QString &
- contents, QWidget *parent )}
-
- Constructs a line edit containing the text \a contents.
- The \a parent parameter is sent to the QWidget constructor.
- \endquotation
-
- The formal parameter name may be enclosed between curly brackets,
- but that isn't required.
-
- \target c-command
- \section1 \\c (code font)
-
- The \\c command is used for rendering variable names, user-defined
- class names, and C++ keywords (for example, \c int and \c for) in the code
- font.
-
- The command renders its argument using a monospace font. For
- example:
-
- \code
- / *!
- The \c AnalogClock class provides a clock widget with hour
- and minute hands that is automatically updated every
- few seconds.
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- The \c AnalogClock class provides a clock widget with hour
- and minute hands, which are automatically updated every
- few seconds.
- \endquotation
-
- If the text to be rendered in the code font contains spaces, enclose the
- entire text in curly brackets.
-
- \code
- \c {QLineEdit::QLineEdit(const QString &contents, QWidget *parent) :QWidget(parent)}
- \endcode
-
- QDoc renders this as:
-
- \quotation
- \c {QLineEdit::QLineEdit(const QString &contents, QWidget *parent) :QWidget(parent)}
- \endquotation
-
- The \\c command accepts the special character \c \ within its
- argument, which renders it as a normal character. So if you want
- to use nested commands, you must use the \l {tt-command} {teletype
- (\\tt)} command instead.
-
- See also \l {tt-command} {\\tt} and \l {code-command} {\\code}.
-
- \target div-command
- \section1 \\div
-
- The \\div and \\enddiv commands delimit a large or small block of
- text (which may include other QDoc commands) to which special
- formatting attributes should be applied.
-
- An argument must be provided in curly braces, as in the QDoc
- comment shown below. The argument is not interpreted but is used
- as attribute(s) of the tag that is output by QDoc.
-
- For example, we might want to render an inline image so that it
- floats to the right of the current block of text:
-
- \code
- / *!
- \div {class="float-right"}
- \inlineimage qml-column.png
- \enddiv
-
- * /
- \endcode
-
- If QDoc is generating HTML, it will translate these commands to:
-
- \code
- <div class="float-right"><p><img src="images/qml-column.png" /></p></div>
- \endcode
-
- For HTML, the attribute value \e {float-right} then will refer to
- a clause in the style.css file, which in this case could be:
-
- \code
- div.float-right
- {
- float: right; margin-left: 2em
- }
- \endcode
-
- \note Note that the \b {\\div} command can be nested.
-
- Below you can find an example taken from the index.qdoc file used to
- generate index.html for Qt 4.7:
-
- \code
- \div {class="indexbox guide"}
- \div {class="heading"}
- Qt Developer Guide
- \enddiv
- \div {class="indexboxcont indexboxbar"}
- \div {class="section indexIcon"} \emptyspan
- \enddiv
- \div {class="section"}
- Qt is a cross-platform application and UI
- framework. Using Qt, you can write web-enabled
- applications once and deploy them across desktop,
- mobile and embedded operating systems without
- rewriting the source code.
- \enddiv
- \div {class="section sectionlist"}
- \list
- \li \l{Getting Started}
- \li \l{Installation} {Installation}
- \li \l{how-to-learn-qt.html} {How to learn Qt}
- \li \l{tutorials.html} {Tutorials}
- \li \l{Qt Examples} {Examples}
- \li \l{qt4-7-intro.html} {What's new in Qt 4.7}
- \endlist
- \enddiv
- \enddiv
- \enddiv
- \endcode
-
- When all the class attribute values are defined as they are in the
- style.css file that is used for rendering the Qt documentation,
- the above example is rendered as:
-
- \div {class="indexbox guide"}
- \div {class="heading"}
- Qt Developer Guide
- \enddiv
- \div {class="indexboxcont indexboxbar"}
- \div {class="section indexIcon"} \emptyspan
- \enddiv
- \div {class="section"}
- Qt is a cross-platform application and UI
- framework. Using Qt, you can write web-enabled
- applications once and deploy them across desktop,
- mobile and embedded operating systems without
- rewriting the source code.
- \enddiv
- \div {class="section sectionlist"}
- \list
- \li Getting Started
- \li Installation
- \li How to learn Qt
- \li Tutorials
- \li Examples
- \li What's new in Qt 4.7
- \endlist
- \enddiv
- \enddiv
- \enddiv
-
- See also \l {span-command} {\\span}.
-
- \target span-command
- \section1 \\span
-
- The \\span command applies special formatting to a small block of text.
-
- Two arguments must be provided, each argument in curly braces, as
- shown in the QDoc comment below. The first argument is not
- interpreted, but specifies the formatting attribute(s) of the tag
- output by QDoc. The second argument is the text to be rendered with
- the special formatting attributes.
-
- For example, we might want to render the first word of each
- element in a numeric list in blue.
-
- \code
- / *!
- Global variables with complex types:
- \list 1
- \li \span {class="variableName"} {mutableComplex1} in globals.cpp at line 14
- \li \span {class="variableName"} {mutableComplex2} in globals.cpp at line 15
- \li \span {class="variableName"} {constComplex1} in globals.cpp at line 16
- \li \span {class="variableName"} {constComplex2} in globals.cpp at line 17
- \endlist
- * /
- \endcode
-
- Class \e {variableName} refers to a clause in your style.css.
-
- \code
- .variableName
- {
- font-family: courier;
- color: blue
- }
- \endcode
-
- Using the \e {variableName} clause shown above, the example is rendered as:
-
- Global variables with complex types:
- \list 1
- \li \span {class="variableName"} {mutableComplex1} in globals.cpp at line 14
- \li \span {class="variableName"} {mutableComplex2} in globals.cpp at line 15
- \li \span {class="variableName"} {constComplex1} in globals.cpp at line 16
- \li \span {class="variableName"} {constComplex2} in globals.cpp at line 17
- \endlist
-
- \note The \b span command does not cause a new paragraph to be
- started.
-
- See also \l {div-command} {\\div}.
-
- \target tt-command
- \section1 \\tt (teletype font)
-
- The \\tt command renders its argument in a monospace font. This
- command behaves just like the \l {c-command} {\\c} command, except
- that \\tt allows you to nest QDoc commands within the argument
- (e.g. \l {e-command} {\\e}, \l {b-command} {\\b} and \l
- {underline-command} {\\underline}).
-
- \code
- / *!
- After having populated the main container with
- child widgets, \c setupUi() scans the main container's list of
- slots for names with the form
- \tt{on_\e{objectName}_\e{signalName}().}
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- After having populated the main container with
- child widgets, \c setupUi() scans the main container's list of
- slots for names with the form
- \tt{on_\e{objectName}_\e{signalName}().}
- \endquotation
-
- If the text to be rendered in the code font contains spaces, enclose the
- entire text in curly brackets.
-
- \code
- \tt {QLineEdit::QLineEdit(const QString &contents, QWidget *parent) :QWidget(parent)}
- \endcode
-
- QDoc renders this as:
-
- \quotation
- \tt {QLineEdit::QLineEdit(const QString &contents, QWidget *parent) :QWidget(parent)}
- \endquotation
-
- See also \l {c-command} {\\c}.
-
- \target b-command
- \section1 \\b
-
- The \\b command renders its argument in bold font. This command used
- to be called \\bold.
-
- \code
- / *!
- This is regular text; \b {this text is
- rendered using the \\b command}.
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- This is regular text; \b {this text is rendered using
- the \\b command}.
- \endquotation
-
- \target e-command
- \section1 \\e (emphasis, italics)
-
- The \\e command renders its argument in a special font, normally italics. This
- command used to be called \\i, which is now deprecated.
-
- If the argument contains spaces or other punctuation, enclose the
- argument in curly brackets.
-
- \code
- / *!
- Here, we render \e {a few words} in italics.
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- Here, we render \e {a few words} in italics.
- \endquotation
-
- If you want to use other QDoc commands within an argument that
- contains spaces, you always need to enclose the argument in
- braces. But QDoc is smart enough to count parentheses [3], so you
- don't need braces in cases like this:
-
- \code
- / *!
- An argument can sometimes contain whitespaces,
- for example: \e QPushButton(tr("A Brand New Button"))
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- An argument can sometimes contain whitespaces,
- for example: \e QPushButton(tr("A Brand New Button"))
- \endquotation
-
- Finally, trailing punctuation is not included in an argument [4],
- nor is "'s" [5]
-
- \raw HTML
- <table align="center" cellpadding="2"
- cellspacing="1" border="0">
- <tr valign="top" bgcolor="#a2c511">
- <th></th>
- <th>QDoc Syntax</th>
- <th>Generated Documentation</th>
- </tr>
-
- <tr valign="top" bgcolor="#d0d0d0">
- <td>1</td>
- <td>A variation of a command button is a \e menu
- button.</td>
- <td>A variation of a command button is a <i>menu</i>
- button.</td>
- </tr>
-
- <tr valign="top" bgcolor="#c0c0c0">
- <td>2</td>
- <td>The QPushButton widget provides a
- \e {command button}.</td>
- <td>The QPushButton widget provides a
- <i>command button</i>.</td>
- </tr>
-
- <tr valign="top" bgcolor="#d0d0d0">
- <td>3</td>
- <td>Another class of buttons are option buttons
- \e (see QRadioButton).</td>
- <td>Another class of buttons are option buttons
- <i> (see QRadioButton)</i>.</td>
- </tr>
-
- <tr valign="top" bgcolor="#c0c0c0">
- <td>4</td>
- <td>A push button emits the signal \e clicked().</td>
- <td>A push button emits the signal <i>clicked</i>().</td>
- </tr>
-
- <tr valign="top" bgcolor="#d0d0d0">
- <td>5</td>
- <td>The \e QPushButton's checked property is
- false by default.</td>
- <td>The <i>QPushButton</i>'s checked property is
- false by default.</td>
- </tr>
-
- </table>
- \endraw
-
- \target sub-command
- \section1 \\sub
-
- The \\sub command renders its argument lower than the baseline of
- the regular text, using a smaller font.
-
- \code
- / *!
- Definition (Range): Consider the sequence
- {x\sub n}\sub {n > 1} . The set
-
- {x\sub 2, x\sub 3, x\sub 4, ...} = {x\sub n ; n = 2, 3, 4, ...}
-
- is called the range of the sequence.
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- Definition (Range): Consider the sequence
- {x\sub n}\sub {n > 1} . The set
-
- {x\sub 2, x\sub 3, x\sub 4, ...} = {x\sub n ; n = 2, 3, 4, ...}
-
- is called the range of the sequence.
- \endquotation
-
- If the argument contains spaces or other punctuation, enclose the
- argument in curly brackets.
-
- \target sup-command
- \section1 \\sup
-
- The \\sup command renders its argument higher than
- the baseline of the regular text, using a smaller font.
-
- \code
- / *!
- The series
-
- 1 + a + a\sup 2 + a\sup 3 + a\sup 4 + ...
-
- is called the \i {geometric series}.
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- The series
-
- 1 + a + a\sup 2 + a\sup 3 + a\sup 4 + ...
-
- is called the \e {geometric series}.
- \endquotation
-
- If the argument contains spaces or other punctuation, enclose the
- argument in curly brackets.
-
- \target uicontrol-command
- \section1 \\uicontrol
-
- The \\uicontrol command is used to mark content as being used for UI
- control elements. When using HTML, the output is rendered in bold.
-
- \sa \\b
-
- \target underline-command
- \section1 \\underline
-
- The \\underline command renders its argument underlined.
-
- \code
- / *!
- The \underline {F}ile menu gives the users the possibility
- to edit an existing file, or save a new or modified
- file, and exit the application.
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- The \underline {F}ile menu gives the users the possibility
- to edit an existing file, or save a new or modified
- file, and exit the application.
- \endquotation
-
- If the argument contains spaces or other punctuation, enclose the
- argument in curly brackets.
-
- \target backslash-command
- \section1 \\\\ (double backslash)
-
- The \\\\ command expands to a double backslash.
-
- QDoc commands always start with a single backslash. To display a
- single backslash in the text you need to type two backslashes. If
- you want to display two backslashes, you need to type four.
-
- \code
- / *!
- The \\\\ command is useful if you want a
- backslash to appear verbatim, for example,
- writing C:\\windows\\home\\.
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- The \\\\ command is useful if you want a
- backslash to appear verbatim, for example,
- writing C:\\windows\\home\\.
- \endquotation
-
- However, if you want your text to appear in a monospace font as
- well, you can use the \l {c-command} {\\c} command instead, which
- accepts and renders the backslash as any other character. For
- example:
-
- \code
- / *!
- The \\c command is useful if you want a
- backslash to appear verbatim, and the word
- that contains it written in a monospace font,
- like this: \c {C:\windows\home\}.
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- The \\c command is useful if you want a
- backslash to appear verbatim, and the word
- that contains it written in a monospace font,
- like this: \c {C:\windows\home\}.
- \endquotation
-
-*/
-
-
-/*!
- \page 05-qdoc-commands-documentstructure.html
- \previouspage Text Markup
- \nextpage Including Code Inline
-
- \title Document Structure
-
- The document structuring commands are for dividing your document
- into sections. QDoc supports four levels of section: \c \section1,
- \c \section2, \c \section3, and \c \section4. The section commands
- correspond to the traditional section, subsection, etc used in
- outlining.
-
- \target section-commands
- \section1 Section commands
-
- In general a document structuring command considers everything
- that follows it until the first line break as its argument. The
- argument is rendered as the unit's title. If the title needs to be
- spanned over several lines, make sure that each line (except the
- last one) is ended with a backslash.
-
- In total, there are four levels for sections in QDoc: \c \section1,
- \c \section2, \c \section3 and \c \section4. These correspond to the
- traditional section, subsection, subsubsection and subsubsubsection.
-
- There is a strict ordering of the section units:
-
- \code
- section1
- |
- section2
- |
- section3
- |
- section4
- \endcode
-
- When sections are used, the first section command should be \c section1.
-
-
- \code
- / *!
- \section1 Basic Qt
-
- This is the first section.
-
-
- \section2 Getting Started
-
- This is the first subsection.
-
-
- \section3 Hello Qt
-
- This is the first subsubsection.
-
-
- \section3 Making Connections
-
- This is the second subsubsection.
-
-
- \section3 Using the Reference Documentation
-
- This is the third subsubsection.
-
-
- \section2 Creating Dialogs
-
- This is the second subsection.
-
-
- \section3 Subclassing QDialog
-
- This is the first subsubsection.
-
- ...
-
-
- \section1 Intermediate Qt
-
- This is the second section.
-
-
- \section2 Layout Management
-
- This is the second section's first subsection.
-
-
- \section3 Basic Layouts
-
- This is the first subsubsection.
-
- ...
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- \raw HTML
- <a name="Basic Qt">
- <h1>Basic Qt</h1>
- </a>
- <p>This is the first section.</p>
-
- <a name="Getting started">
- <h2>Getting Started</h2>
- </a>
- This is the first subsection.</p>
-
- <a name="Hello Qt">
- <h3>Hello Qt</h3>
- </a>
- <p>This is the first subsubsection.</p>
-
- <a name="Making Connections">
- <h3>Making Connections</h3>
- </a>
- <p>This is the second subsubsection.</p>
-
- <a name="Using the Reference Documentation">
- <h3>Using the Reference Documentation</h3>
- </a>
- <p>This is the third subsubsection.</p>
-
- <a name="Creating Dialogs">
- <h2>Creating Dialogs</h2>
- </a>
- <p>This is the second subsection.</p>
-
- <a name="Subclassing QDialog">
- <h3>Subclassing QDialog</h3>
- </a>
- <p>This is the first subsubsection.</p>
-
- ...
-
- <a name="Intermediate Qt">
- <h1>Intermediate Qt</h1>
- </a>
- <p>This is the second section.</p>
-
- <a name="Layout Management">
- <h2>Layout Management</h2>
- </a>
- <p>This is the second section's first subsection.</p>
-
- <a name="Basic Layouts">
- <h3>Basic Layouts</h3>
- </a>
- <p>This is the first subsubsection.</p>
-
- ...
-
- \endraw
- \endquotation
-
- Each section is a logical unit in the document. The section
- heading appears in the automatically generated table of contents
- that normally appears in the upper right-hand corner of the page.
-
- \target sectionOne-command
- \section1 \\section1
-
- The \\section1 command starts a new section.
-
- See \l{section-commands} {Section commands} for an explanation of the various
- section units, command argument, and rendering.
-
- \target sectionTwo-command
- \section1 \\section2
-
- The \\section2 command starts a new section.
-
- See \l{section-commands} {Section commands} for an explanation of the various
- section units, command argument, and rendering.
-
- \target sectionThree-command
- \section1 \\section3
-
- The \\section3 command starts a new section.
-
- See \l{section-commands} {Section commands} for an explanation of the various
- section units, command argument, and rendering.
-
- \target sectionFour-command
- \section1 \\section4
-
- The \\section4 command starts a new section.
-
- See \l{section-commands} {Section commands} for an explanation of the various
- section units, command argument, and rendering.
-
-*/
-
-
-/*!
- \page 06-qdoc-commands-includecodeinline.html
- \previouspage Document Structure
- \nextpage Including External Code
-
- \title Including Code Inline
-
- The following commands are used to render source code without
- formatting. The source code begins on a new line, rendered in the
- code.
-
- \note Although most of these commands are for rendering C++
- code, the
- \l{07-0-qdoc-commands-includingexternalcode.html#snippet-command}
- {\\snippet} and
- \l{07-0-qdoc-commands-includingexternalcode.html#codeline-command}
- {\\codeline} commands are preferred over the others. These
- commands allow equivalent code snippets for other Qt language
- bindings to be substituted for the C++ snippets in the
- documentation.
-
- \target code-command
- \section1 \\code
-
- The \\code and \\endcode commands enclose a snippet of source code.
-
- \note The \l {c-command} {\\c} command can be used for short code
- fragments within a sentence. The \\code command is for longer code
- snippets. It renders the code verbatim in a separate paragraph in
- a html <pre> element, and parses the enclosed snippet, creating links
- to any known types in the code.
-
- For documenting command-line instructions, shell scripts, or any
- content that is not in a Qt language recognized by QDoc, use
- \l {badcode-command}{\\badcode} instead.
-
- When processing any of the \\code, \l {newcode-command} {\\newcode} or \l
- {oldcode-command} {\\oldcode} commands, QDoc removes all
- indentation that is common for the verbatim code blocks within a
- \c{/}\c{*!} ... \c{*}\c{/} comment before it adds the standard
- indentation.
-
- \note This doesn't apply to externally quoted code using the \l
- {quotefromfile-command} {\\quotefromfile} or \l
- {quotefile-command} {\\quotefile} command.
-
- \code
- / *!
- \code
- #include <QApplication>
- #include <QPushButton>
-
- int main(int argc, char *argv[])
- {
- ...
- }
- \ endcode
- * /
- \endcode
-
- QDoc renders this as:
-
- \code
- #include <QApplication>
- #include <QPushButton>
-
- int main(int argc, char *argv[])
- {
- ...
- }
- \endcode
-
- Other QDoc commands are disabled within \\code... \\endcode, and
- the special character '\\' is accepted and rendered like the rest
- of the code, unless it is followed by a digit and parameters were
- passed to \\code.
-
- \section2 Code snippet parameters
-
- Since QDoc version 5.12, \\code command accepts also optional
- parameters. Parameters are useful for injecting simple
- strings into the code snippet. To inject a string to a specific
- location in the snippet, add a backslash followed by a digit (1..8).
- The digits correspond with the order of the argument list, where
- arguments are separated by spaces.
-
- For example:
-
- \code
- / *!
- \code * hello
- /\1 \2 \1/
- \ endcode
- * /
- \endcode
-
- For the above snippet, QDoc renders the word \e hello enclosed in
- a C-style comment.
-
- \section2 Including code from external files
-
- To include code snippets from an external file, use the
- \l{07-0-qdoc-commands-includingexternalcode.html#snippet-command}
- {\\snippet} and
- \l{07-0-qdoc-commands-includingexternalcode.html#codeline-command}
- {\\codeline} commands.
-
- See also \l {c-command} {\\c}, \l {badcode-command} {\\badcode}, \l
- {07-0-qdoc-commands-includingexternalcode.html#quotefromfile-command}
- {\\quotefromfile}, \l{newcode-command} {\\newcode}, and \l {oldcode-command}
- {\\oldcode}.
-
- \target badcode-command
- \section1 \\badcode
-
- Similar to \l {code-command}{\\code}, \\badcode and \\endcode commands
- enclose content that is rendered verbatim in a separate paragraph, but no
- parsing or automatic link creation is performed. Instead, the content is
- treated as plain text.
-
- Substitute \\code with this command when documenting command-line
- instructions, shell scripts or any other content that is not in a Qt
- language, but should still be styled similarly to a \\code paragraph.
-
- Like \\code, \\badcode accepts also optional parameters.
-
- \target newcode-command
- \section1 \\newcode
-
- The \\newcode, \\oldcode, and \\endcode commands enable you to
- show how to port a snippet of code to a new version of an API.
-
- The \\newcode command and its companion the \\oldcode command are
- a convenience combination of the \l {code-command} {\\code} commands:
- this combination provides a text relating the two code snippets to each
- other.
-
- The \\newcode command requires a preceding \\oldcode statement.
-
- Like the \l{code-command}{\\code} command, the \\newcode command renders its
- code on a new line in the documentation using a monospace font and the
- standard indentation.
-
- \code
- / *!
- \oldcode
- if (printer->setup(parent))
- ...
- \newcode
- QPrintDialog dialog(printer, parent);
- if (dialog.exec())
- ...
- \ endcode
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- \oldcode
- if (printer->setup(parent))
- ...
- \newcode
- QPrintDialog dialog(printer, parent);
- if (dialog.exec())
- ...
- \endcode
- \endquotation
-
- Other QDoc commands are disabled within \\oldcode ... \\endcode,
- and the '\\' character doesn't need to be escaped.
-
- \target oldcode-command
- \section1 \\oldcode
-
- The \\oldcode command requires a corresponding
- \\newcode statement; otherwise QDoc fails to parse the command
- and emits a warning.
-
- See also \l {newcode-command} {\\newcode}.
-
- \target qml-command
- \section1 \\qml
-
- The \\qml and \\endqml commands enclose a snippet of QML source
- code.
-
- \code
- / *!
- \qml
- import QtQuick 2.0
-
- Row {
- Rectangle {
- width: 100; height: 100
- color: "blue"
- transform: Translate { y: 20 }
- }
- Rectangle {
- width: 100; height: 100
- color: "red"
- transform: Translate { y: -20 }
- }
- }
- \endqml
- * /
- \endcode
-
- QDoc renders this as:
-
- \qml
- import QtQuick 2.0
-
- Row {
- Rectangle {
- width: 100; height: 100
- color: "blue"
- transform: Translate { y: 20 }
- }
- Rectangle {
- width: 100; height: 100
- color: "red"
- transform: Translate { y: -20 }
- }
- }
- \endqml
-
- Like the \l{code-command}{\\code} command, \\qml accepts optional
- parameters.
-*/
-
-
-/*!
- \page 07-0-qdoc-commands-includingexternalcode.html
- \previouspage Including Code Inline
- \nextpage Creating Links
-
- \title Including External Code
-
- The following commands enable you to include code snippets from
- external files. You can make QDoc include the complete contents of
- a file, or you can quote specific parts of the file and skip
- others. The typical use of the latter is to quote a file chunk by
- chunk.
-
- \note Although all these commands can be used for rendering C++
- code, the
- \l{07-0-qdoc-commands-includingexternalcode.html#snippet-command}
- {\\snippet} and
- \l{07-0-qdoc-commands-includingexternalcode.html#codeline-command}
- {\\codeline} commands are preferred over the others. These
- commands allow equivalent code snippets for other Qt language
- bindings to be substituted for the C++ snippets in the
- documentation.
-
- \target quotefile-command
- \section1 \\quotefile
-
- The \\quotefile command expands to the complete contents of the
- file given as argument.
-
- The command considers the rest of the line as part of its
- argument, make sure to follow the file name with a line break.
-
- The file's contents is rendered in a separate paragraph, using a
- monospace font and the standard indentation. The code is shown
- verbatim.
-
- \code
- / *!
- This is a simple "Hello world" example:
-
- \quotefile examples/main.cpp
-
- It contains only the bare minimum you need
- to get a Qt application up and running.
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- This is a simple "Hello world" example:
-
- \quotefile examples/main.cpp
-
- It contains only the bare minimum you need to get a Qt
- application up and running.
- \endquotation
-
- See also \l {quotefromfile-command} {\\quotefromfile} and
- \l {code-command} {\\code}.
-
-
- \target quotefromfile-command
- \section1 \\quotefromfile
-
- The \\quotefromfile command opens the file given as argument for
- quoting.
-
- The command considers the rest of the line as part of its
- argument, make sure to follow the file name with a line break.
-
- The command is intended for use when quoting parts from file with
- the walkthrough commands: \l {printline-command} {\\printline}, \l
- {printto-command} {\\printto}, \l {printuntil-command}
- {\\printuntil}, \l {skipline-command} {\\skipline}, \l
- {skipto-command} {\\skipto}, \l {skipuntil-command}
- {\\skipuntil}. This enables you to quote specific portions of a
- file.
-
- \code
- / *!
- The whole application is contained within
- the \c main() function:
-
- \quotefromfile examples/main.cpp
-
- \skipto main
- \printuntil app(argc, argv)
-
- First we create a QApplication object using
- the \c argc and \c argv parameters.
-
- \skipto QPushButton
- \printuntil resize
-
- Then we create a QPushButton, and give it a reasonable
- size using the QWidget::resize() function.
-
- ...
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- The whole application is contained within
- the \c main() function:
-
- \quotefromfile examples/main.cpp
-
- \skipto main
- \printuntil app(argc, argv)
-
- First we create a QApplication object using the \c argc
- and \c argv parameters.
-
- \skipto QPushButton
- \printuntil resize
-
- Then we create a QPushButton, and give it a reasonable
- size using the QWidget::resize() function.
-
- ...
- \endquotation
-
- QDoc remembers which file it is quoting from, and the current
- position in that file (see \l {file} {\\printline} for more
- information). There is no need to "close" the file.
-
- See also \l {quotefile-command} {\\quotefile}, \l {code-command}
- {\\code} and \l {dots} {\\dots}.
-
- \target printline-command
- \section1 \\printline
-
- The \\printline command expands to the line from the current
- position to the next non-blank line of the current source file.
-
- To ensure that the documentation remains synchronized with the
- source file, a substring of the line must be specified as an
- argument to the command. Note that the command considers the rest
- of the line as part of its argument, make sure to follow the
- substring with a line break.
-
- The line from the source file is rendered as a separate paragraph,
- using a monospace font and the standard indentation. The code is
- shown verbatim.
-
- \code
- / *!
- There has to be exactly one QApplication object
- in every GUI application that uses Qt.
-
- \quotefromfile examples/main.cpp
-
- \printline QApplication
-
- This line includes the QApplication class
- definition. QApplication manages various
- application-wide resources, such as the
- default font and cursor.
-
- \printline QPushButton
-
- This line includes the QPushButton class
- definition. The QPushButton widget provides a command
- button.
-
- \printline main
-
- The main function...
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- There has to be exactly one QApplication object
- in every GUI application that uses Qt.
-
- \quotefromfile examples/main.cpp
-
- \skipto QApplication
- \printline QApplication
-
- This line includes the QApplication class
- definition. QApplication manages various
- application-wide resources, such as the
- default font and cursor.
-
- \printline QPushButton
-
- This line includes the QPushButton class
- definition. The QPushButton widget provides a command
- button.
-
- \printline main
-
- The main function...
- \endquotation
-
- \target file
-
- QDoc reads the file sequentially. To move the current position
- forward you can use either of the \l {skipline-command}
- {\\skip...} commands. To move the current position backward, you
- can use the \l {quotefromfile-command} {\\quotefromfile} command
- again.
-
- \target substring
-
- If the substring argument is surrounded by slashes it is
- interpreted as a \l {QRegularExpression}{regular expression}.
-
- \code
- / *!
- \quotefromfile examples/mainwindow.cpp
-
- \skipto closeEvent
- \printuntil /^\}/
-
- Close events are sent to widgets that the users want to
- close, usually by clicking \c File|Exit or by clicking
- the \c X title bar button. By reimplementing the event
- handler, we can intercept attempts to close the
- application.
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- \quotefromfile examples/mainwindow.cpp
-
- \skipto closeEvent
- \printuntil /^\}/
-
- Close events are sent to widgets that the users want to
- close, usually by clicking \c File|Exit or by clicking
- the \c X title bar button. By reimplementing the event
- handler, we can intercept attempts to close the
- application.
- \endquotation
-
- (\l {widgets/scribble} {The complete example file...})
-
- The regular expression \c /^\}/ makes QDoc print until the first
- '}' character occurring at the beginning of the line without
- indentation. /.../ encloses the regular expression, and '^' means
- the beginning of the line. The '}' character must be escaped since
- it is a special character in regular expressions.
-
- QDoc will emit a warning if the specified substring or regular
- expression cannot be located, i.e. if the source code has changed.
-
- See also \l {printto-command} {\\printto} and \l
- {printuntil-command} {\\printuntil}.
-
- \target printto-command
- \section1 \\printto
-
- The \\printto command expands to all the lines from the current
- position up to and \e excluding the next line containing a given
- substring.
-
- The command considers the rest of the line as part of its
- argument, make sure to follow the substring with a line break. The
- command also follows the same conventions for \l {file}
- {positioning} and \l {substring} {argument} as the \l
- {printline-command} {\\printline} command.
-
- The lines from the source file are rendered in a separate
- paragraph, using a monospace font and the standard
- indentation. The code is shown verbatim.
-
- \code
- / *!
- The whole application is contained within the
- \c main() function:
-
- \quotefromfile examples/main.cpp
- \printto hello
-
- First we create a QApplication object using the \c argc and
- \c argv parameters...
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- The whole application is contained within the
- \c main() function:
-
- \quotefromfile examples/main.cpp
- \skipto main
- \printto hello
-
- First we create a QApplication object using the \c argc
- and \c argv parameters...
- \endquotation
-
- See also \l {printline-command} {\\printline} and \l
- {printuntil-command} {\\printuntil}.
-
- \target printuntil-command
- \section1 \\printuntil
-
- The \\printuntil command expands to all the lines from the current
- position up to and \e including the next line containing a given
- substring.
-
- The command considers the rest of the line as part of its
- argument, make sure to follow the substring with a line break. The
- command also follows the same conventions for \l {file}
- {positioning} and \l {substring} {argument} as the \l
- {printline-command} {\\printline} command.
-
- If \\printuntil is used without an argument, it expands to all the
- lines from the current position to the end of the quoted file.
-
- The lines from the source file are rendered in a separate
- paragraph, using a monospace font and the standard
- indentation. The code is shown verbatim.
-
- \code
- / *!
- The whole application is contained within the
- \c main() function:
-
- \quotefromfile examples/main.cpp
- \skipto main
- \printuntil hello
-
- First we create a QApplication object using the
- \c argc and \c argv parameters, then we create
- a QPushButton.
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- The whole application is contained within the
- \c main() function:
-
- \quotefromfile examples/main.cpp
- \skipto main
- \printuntil hello
-
- First we create a \l
- {http://doc.qt.io/qt-5/qapplication.html} {QApplication}
- object using the \c argc and \c argv parameters, then we
- create a \l
- {http://doc.qt.io/qt-5/qpushbutton.html} {QPushButton}.
- \endquotation
-
- See also \l {printline-command} {\\printline} and \l
- {printto-command} {\\printto}.
-
- \target skipline-command
- \section1 \\skipline
-
- The \\skipline command ignores the next non-blank line in the
- current source file.
-
- Doc reads the file sequentially, and the \\skipline command is
- used to move the current position (omitting a line of the source
- file). See the remark about \l {file} {file positioning} above.
-
- The command considers the rest of the line as part of its
- argument, make sure to follow the substring with a line break. The
- command also follows the same conventions for \l {substring}
- {argument} as the \l {printline-command} {\\printline} command,
- and it is used in conjunction with the \l {quotefromfile-command}
- {\\quotefromfile} command.
-
- \code
- / *!
- QPushButton is a GUI push button that the user
- can press and release.
-
- \quotefromfile examples/main.cpp
- \skipline QApplication
- \printline QPushButton
-
- This line includes the QPushButton class
- definition. For each class that is part of the
- public Qt API, there exists a header file of
- the same name that contains its definition.
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- \l
- QPushButton is a GUI push button that the user
- can press and release.
-
- \quotefromfile examples/main.cpp
- \skipto QApplication
- \skipline QApplication
- \printline QPushButton
-
- This line includes the QPushButton class
- definition. For each class that is part of the public
- Qt API, there exists a header file of the same name
- that contains its definition.
- \endquotation
-
- See also \l {skipto-command} {\\skipto}, \l {skipuntil-command}
- {\\skipuntil} and \l {dots} {\\dots}.
-
- \target skipto-command
- \section1 \\skipto
-
- The \\skipto command ignores all the lines from the current
- position up to and \e excluding the next line containing a given
- substring.
-
- QDoc reads the file sequentially, and the \\skipto command is used
- to move the current position (omitting one or several lines of the
- source file). See the remark about \l {file} {file positioning}
- above.
-
- The command considers the rest of the line as part of its
- argument, make sure to follow the substring with a line break.
-
- The command also follows the same conventions for \l {substring}
- {argument} as the \l {printline-command} {\\printline} command,
- and it is used in conjunction with the \l {quotefromfile-command}
- {\\quotefromfile} command.
-
- \code
- / *!
- The whole application is contained within
- the \c main() function:
-
- \quotefromfile examples/main.cpp
- \skipto main
- \printuntil }
-
- First we create a QApplication object. There
- has to be exactly one such object in
- every GUI application that uses Qt. Then
- we create a QPushButton, resize it to a reasonable
- size...
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- The whole application is contained within
- the \c main() function:
-
- \quotefromfile examples/main.cpp
- \skipto main
- \printuntil }
-
- First we create a QApplication object. There has to be
- exactly one such object in every GUI application that
- uses Qt. Then we create a QPushButton, resize it to a
- reasonable size ...
- \endquotation
-
- See also \l {skipline-command} {\\skipline}, \l
- {skipuntil-command} {\\skipuntil} and \l {dots} {\\dots}.
-
- \target skipuntil-command
- \section1 \\skipuntil
-
- The \\skipuntil command ignores all the lines from the current
- position up to and \e including the next line containing a given
- substring.
-
- QDoc reads the file sequentially, and the \\skipuntil command is
- used to move the current position (omitting one or several lines
- of the source file). See the remark about \l {file} {file
- positioning} above.
-
- The command considers the rest of the line as part of its
- argument, make sure to follow the substring with a line break.
-
- The command also follows the same conventions for \l {substring}
- {argument} as the \l {printline-command} {\\printline} command,
- and it is used in conjunction with the \l {quotefromfile-command}
- {\\quotefromfile} command.
-
- \code
- / *!
- The first thing we did in the \c main() function
- was to create a QApplication object \c app.
-
- \quotefromfile examples/main.cpp
- \skipuntil show
- \dots
- \printuntil }
-
- In the end we must remember to make \c main() pass the
- control to Qt. QCoreApplication::exec() will return when
- the application exits...
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- The first thing we did in the \c main() function was to
- create a QApplication object \c app.
-
- \quotefromfile examples/main.cpp
- \skipuntil show
- \dots
- \printuntil }
-
- In the end we must remember to make \c main() pass the
- control to Qt. QCoreApplication::exec()
- will return when the application exits...
- \endquotation
-
- See also \l {skipline-command} {\\skipline}, \l {skipto-command}
- {\\skipto} and \l {dots} {\\dots}.
-
- \target dots-command
- \section1 \\dots
-
- The \\dots command indicates that parts of the source file have
- been omitted when quoting a file.
-
- The command is used in conjunction with the \l
- {quotefromfile-command} {\\quotefromfile} command, and should be
- stated on its own line. The dots are rendered on a new line, using
- a monospace font.
-
- \code
- / *!
- \quotefromfile examples/main.cpp
- \skipto main
- \printuntil {
- \dots
- \skipuntil exec
- \printline }
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotefromfile examples/main.cpp
- \skipto main
- \printuntil {
- \dots
- \skipuntil exec
- \printline }
-
- The default indentation is 4 spaces, but this can be adjusted
- using the command's optional argument.
-
- \code
- / *!
- \dots 0
- \dots
- \dots 8
- \dots 12
- \dots 16
- * /
- \endcode
-
- QDoc renders this as:
-
- \dots 0
- \dots
- \dots 8
- \dots 12
- \dots 16
-
- See also \l {skipline-command} {\\skipline}, \l {skipto-command}
- {\\skipto} and \l {skipuntil-command} {\\skipuntil}.
-
- \target snippet-command
- \section1 \\snippet
-
- The \\snippet command causes a code snippet to be included
- verbatim as preformatted text, which may be syntax highlighted.
-
- Each code snippet is referenced by the file that holds it and by
- a unique identifier for that file. Snippet files are typically
- stored in a \c{snippets} directory inside the documentation
- directory (for example, \c{$QTDIR/doc/src/snippets}).
-
- For example, the following documentation references a snippet in a
- file residing in a subdirectory of the documentation directory:
-
- \code
- \snippet snippets/textdocument-resources/main.cpp Adding a resource
- \endcode
-
- The text following the file name is the unique identifier for the
- snippet. This is used to delimit the quoted code in the relevant
- snippet file, as shown in the following example that corresponds to
- the above \c{\snippet} command:
-
- \code
- ...
- QImage image(64, 64, QImage::Format_RGB32);
- image.fill(qRgb(255, 160, 128));
-
-//! [Adding a resource]
- document->addResource(QTextDocument::ImageResource,
- QUrl("mydata://image.png"), QVariant(image));
-//! [Adding a resource]
- ...
- \endcode
-
- By default, QDoc looks for \c{//!} as a code snippet marker.
- For \c{.pro}, \c{.py}, \c{.cmake}, and \c{CMakeLists.txt}
- files, \c {#!} is detected. Finally, \c{<!--} is accepted in
- \c{.html}, \c{.qrc}, \c{.ui}, \c{.xml}, and \c{.xq} files.
-
- \target codeline-command
- \section1 \\codeline
-
- The \\codeline command inserts a blank line of preformatted
- text. It is used to insert gaps between snippets without closing
- the current preformatted text area and opening a new one.
-
-*/
-
-
-/*!
- \page 08-qdoc-commands-creatinglinks.html
- \previouspage Including External Code
- \nextpage Including Images
-
- \title Creating Links
-
- These commands are for creating hyperlinks to classes, functions,
- examples, and other targets.
-
- \target l-command
- \section1 \\l (link)
-
- The \\l link command is used to create a hyperlink to many
- different kinds of targets. The command's general syntax is:
-
- \code
- \l [ link criteria ] { link target } { link text }
- \endcode
-
- ...where the \c {link criteria} in square brackets are optional
- but may be required when the \c {link target} is ambiguous. See
- \l {Fixing Ambiguous Links} below.
-
- Here is an example using the \\l command to link to an external page:
-
- \code
- / *!
- Read the \l {http://doc.qt.io/qt-5/}
- {Qt 5.0 Documentation} carefully.
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- Read the \l {http://doc.qt.io/qt-5/}
- {Qt 5.0 Documentation} carefully.
- \endquotation
-
- If the link target is equivalent to the link text, the second
- argument can be omitted.
-
- For example, if you have documentation like:
-
- \code
- / *!
- \target assertions
-
- Assertions make some statement about the text at the
- point where they occur in the regexp, but they do not
- match any characters.
-
- ...
-
- Regexps are built up from expressions, quantifiers, and
- \l {assertions} {assertions}.
- * /
- \endcode
-
- You can simplify this as follows:
-
- \code
- / *!
- \target assertions
-
- Assertions make some statement about the text at the
- point where they occur in the regexp, but they do not
- match any characters.
-
- ...
-
- Regexps are built up from expressions, quantifiers, and
- \l assertions.
- * /
- \endcode
-
- For the one-parameter version, the braces can often be omitted.
- The \\l command supports several ways of linking:
-
- \list
-
- \li \c {\l QWidget} - The name of a class documented with the \l
- {class-command} {\\class} command.
-
- \li \c {\l QWidget::sizeHint()} - The signature of a function without
- parameters. If a matching function without parameters can't be found,
- the link is satisfied with the first matching function found.
-
- \li \c {\l QWidget::removeAction(QAction* action)} - The signature
- of a function with parameters. If an exact match is not found, the
- link is not satisfied and QDoc reports a \e {Can't link to...} error.
-
- \li \c {\l <QtGlobal>} - The subject of a \l {headerfile-command}
- {\\headerfile} command.
-
- \li \c {\l widgets/wiggly} - The relative path used in an \l
- {example-command} {\\example} command.
-
- \li \c {\l {QWidget Class Reference}} - The title used in a
- \l {title-command} {\\title} command.
-
- \li \c {\l {Introduction to QDoc}}- The text from one of the
- \l{section-commands} {Section commands}.
-
- \li \c {\l fontmatching} - The argument of a \l {target-command}
- {\\target} command.
-
- \li \c {\l {Shared Classes}} - A keyword named in a \l
- {keyword-command} {\\keyword} command.
-
- \li \c {\l http://qt-project.org/} - A URL.
-
- \endlist
-
- QDoc also tries to make a link out of any word that doesn't
- resemble a normal English word, for example, Qt class names or
- functions, like QWidget or QWidget::sizeHint(). In these cases,
- the \\l command can actually be omitted, but by using the command,
- you ensure that QDoc will emit a warning if it cannot find the
- link target. In addition, if you only want the function name to
- appear in the link, you can use the following syntax:
-
- \list
- \li \c {\l {QWidget::} {sizeHint()}}
- \endlist
-
- QDoc renders this as:
-
- \quotation
- \l {QWidget::} {sizeHint()}
- \endquotation
-
- \section2 Fixing Ambiguous Links
-
- Because of the modularization of Qt beginning with Qt 5.0, The
- possibility that QDoc will have to deal with ambiguous links has
- increased. An ambiguous link is one that has a matching target in
- more than one Qt module, e.g. the same section title can appear in
- more than one Qt module, or the name of a C++ class in one module
- can also be the name of a QML type in another module. A real
- example in Qt5 is the name Qt itself. Qt is the name of both a C++
- namespace in QtCore and a QML type in QtQml.
-
- Suppose we want to link to the \l {Qt} {Qt C++ namespace}. At the
- time QDoc generated this HTML page, that link was correct. Does
- it still go to the C++ namespace? Qdoc generated that link from
- this link command:
-
- \list
- \li \c {\l {Qt} {Qt C++ namespace}}
- \endlist
-
- Now suppose we want to link to the \l [QML] {Qt} {Qt QML type}.
- At the time QDoc generated this HTML page, that link was also
- correct, but we had to use this link command:
-
- \list
- \li \c {\l [QML] {Qt} {Qt QML type}}
- \endlist
-
- The \e {QML} in \e {square brackets} tells QDoc to accept a
- matching target only if the traget is on a QML page. Qdoc actually
- finds the C++ namespace target first, but since that target is on
- a C++ page, QDoc ignores it and keeps looking until it finds the
- same target on a QML page.
-
- Without the guidance in the \e{\\l command} in the optional \e
- {square bracket} argument, QDoc links to the first matching target
- it finds. QDoc can't warn that the link was ambiguous in such
- cases because it doesn't know that another matching target exists.
-
- \section2 What arguments can appear in square brackets?
-
- A link command with square bracket argument has the following syntax:
- \list
- \c {\l [QML|CPP|DOC|QtModuleName] {link target} {link text}}
- \endlist
-
- The \e {square bracket} argument is only allowed in the \c {\l
- (link)} command. The example above shows how \c QML is used as the
- \e {square brackets} argument to force QDoc to match a QML target.
- Most often, this will be a QML type, but it can also be a QML
- member function of property.
-
- In the example, QDoc didn't need a \e {square bracket} argument to
- find the Qt C++ namespace page, because that one was the first
- matching target QDoc found anyway. However, to force QDoc to find
- a C++ target when a matching QML target gets in the way, \c CPP
- can be used as the \e {square bracket} argument. For example:
-
- \list
- \li \c {\l [CPP] {Qt} {Qt C++ namespace}}
- \endlist
-
- ...will force QDoc to ignore the Qt QML type and continue
- searching until it matches the Qt C++ namespace.
-
- If the link target is neither a C++ nor a QML entity, \c {DOC} can
- be used as the \e {square bracket} argument to prevent QDoc from
- matching either of those. At this writing, there were no cases of
- ambiguous links where using \c {DOC} was required.
-
- Often, the documentor knows which Qt module the link target is
- in. When the module name is known, use the module name as the \e
- {square bracket} argument. In the example above, if we know that
- the QML type named Qt is located in the QtQml module, we can write
- the link command like this:
-
- \list
- \li \c {\l [QtQml] {Qt} {Qt QML type}}
- \endlist
-
- When a module name is used as the \e {square bracket} argument,
- QDoc will search for link the target in that module only. This
- makes searching for link targets more efficient.
-
- Finally, the module name and entity type arguments can be
- combined, separated by a blank, so something like this is also
- allowed:
-
- \list
- \li \c {\l [CPP QtQml] {Window} {C++ class Window}}
- \endlist
-
- As of this writing, there were no cases where combining the two
- was required.
-
- See also \l {sa-command} {\\sa}, \l {target-command} {\\target},
- and \l {keyword-command} {\\keyword}.
-
-
- \target sa-command
- \section1 \\sa (see also)
-
- The \\sa command defines a list of links that will be rendered in
- a separate "See also" section at the bottom of the documentation
- unit.
-
- The command takes a comma-separated list of links as its
- argument. If the line ends with a comma, you can continue
- the list on the next line. The general syntax is:
-
- \code
- \sa {the first link}, {the second link},
- {the third link}, ...
- \endcode
-
- QDoc will automatically try to generate "See also" links
- interconnecting a property's various functions. For example, a
- setVisible() function will automatically get a link to visible()
- and vice versa.
-
- In general, QDoc will generate "See also" links that interconnect
- the functions that access the same property. It recognizes four
- different syntax versions:
-
- \list
- \li \c property()
- \li \c setProperty()
- \li \c isProperty()
- \li \c hasProperty()
- \endlist
-
- The \\sa command supports the same kind of links as the \l
- {l-command} {\\l} command.
-
- \code
- / *!
- Appends the actions \a actions to this widget's
- list of actions.
-
- \sa removeAction(), QMenu, addAction()
- * /
- void QWidget::addActions(QList<QAction *> actions)
- {
- ...
- }
- \endcode
-
- QDoc renders this as:
-
- \quotation
- \b {void QWidget::addActions ( QList<QAction*>
- \e actions )}
-
- Appends the actions \e actions to this widget's list of
- actions.
-
- See also \l {QWidget::removeAction()} {removeAction()},
- \l QMenu, and \l {QWidget::addAction()} {addAction()}.
- \endquotation
-
- See also \l {l-command} {\\l}, \l {target-command} {\\target} and
- \l {keyword-command} {\\keyword}.
-
-
- \target target-command
- \section1 \\target
-
- The \\target command names a place in the documentation that you
- can link to using the \l {l-command} {\\l (link)} and \l
- {sa-command} {\\sa (see also)} commands.
-
- The text up to the line break becomes the target name. Be sure to
- follow the target name with a line break. Curly brackets are not
- required around the target name, but they may be required when the
- target name is used in a link command. See below.
-
- \code
- / *!
- \target capturing parentheses
- \section1 Capturing Text
-
- Parentheses allow us to group elements together so that
- we can quantify and capture them.
-
- ...
- * /
- \endcode
-
- The target name \e{capturing parentheses} can be linked from
- within the same document containing the target in the following way:
-
- \list
- \li \c {\l {capturing parentheses}} (from within the same QDoc comment)
- \endlist
-
- \note The brackets in the link example are required because the
- target name contains spaces.
-
- See also \l {l-command} {\\l}, \l {sa-command} {\\sa} and \l
- {keyword-command} {\\keyword}.
-
- \target keyword-command
- \section1 \\keyword
-
- The \\keyword command names a place in the documentation that you
- can link to using the \l {l-command} {\\l (link)} and \l
- {sa-command} {\\sa (see also)} commands.
-
- The \\keyword command is like the \l {target-command} {\\target}
- command, except when linking to keyword the link goes to the top of
- the QDoc comment where the \\keyword appears in. If you want to
- create a link target to a \c section unit within a \\page, use
- \\target instead. A keyword can be linked from anywhere using a
- simple syntax.
-
- Keywords must be unique over all the documents processed during
- the QDoc run. The command uses the rest of the line as its
- argument. Be sure to follow the keyword with a line break.
-
-
- \code
- / *!
- \class QRegularExpression
- \reentrant
- \brief The QRegularExpression class provides pattern
- matching using regular expressions.
- \ingroup tools
- \ingroup misc
- \ingroup shared
-
- \keyword regular expression
-
- Regular expressions, or "regexps", provide a way to
- find patterns within text.
-
- ...
- * /
- \endcode
-
- The location marked with the keyword can be linked to with:
-
- \code
- / *!
- When a string is surrounded by slashes, it is
- interpreted as a \l {QRegularExpression}{regular expression}.
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- When a string is surrounded by slashes, it is
- interpreted as a \l {regular expression}.
- \endquotation
-
- If the keyword text contains spaces, the brackets are required.
-
- See also \l {l-command} {\\l (link)}, \l {sa-command} {\\sa (see
- also)} and \l {target-command} {\\target}.
-
-*/
-
-
-/*!
- \page 09-qdoc-commands-includingimages.html
- \previouspage Creating Links
- \nextpage Tables and Lists
-
- \title Including Images
-
- The graphic commands makes it possible to include images in the
- documentation. The images can be rendered as separate paragraphs,
- or within running text.
-
- \target image-command
- \section1 \\image
-
- The \\image command expands to the image specified by its first
- argument, and renders it centered as a separate paragraph.
-
- The command takes two arguments. The first argument is the name of
- the image file. The second argument is optional and is a simple
- description of the image, equivalent to the HTML alt="" in an image
- tag. The description is used for tooltips and for browsers that don't
- support images, like the Lynx text browser.
-
- The remaining text \e{after} the file name is the optional,
- description argument. Be sure to follow the file name or the
- description with a line break. Curly brackets are required if the
- description argument spans multiple lines.
-
- \code
- / *!
- Qt is a C++ toolkit for cross-platform GUI application development.
-
- \image happyguy.jpg "Happy guy"
-
- Qt provides single-source portability across Microsoft
- Windows, macOS, Linux, and all major commercial Unix
- variants. It is also available for embedded devices.
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- Qt is a C++ toolkit for cross-platform GUI application development.
-
- \image happyguy.jpg image "Happy guy"
-
- Qt provides single-source portability across Microsoft
- Windows, macOS, Linux, and all major commercial Unix
- variants. It is also available for embedded devices.
- \endquotation
-
- See also \l {inlineimage-command} {\\inlineimage} and \l
- {caption-command} {\\caption}.
-
- \target inlineimage-command
- \section1 \\inlineimage
-
- The \\inlineimage command expands to the image specified by its
- argument. The image is rendered inline with the rest of the text.
-
- The command takes two arguments. The first argument is the name of
- the image file. The second argument is optional and is a simple
- description of the image, equivalent to the HTML alt="" in an image
- tag. The description is used for tooltips, and for when a browser
- doesn't support images, like the Lynx text browser.
-
- The most common use of the \\inlineimage command is in lists and
- tables. Here is an example of including inline images in a list:
-
- \code
- / *!
- \list 1
- \li \inlineimage happy.gif Oh so happy!
- \li \inlineimage happy.gif Oh so happy!
- \li \inlineimage happy.gif Oh so happy!
- \endlist
- * /
- \endcode
-
- QDoc renders this as:
-
- \list 1
- \li \inlineimage happy.gif Oh so happy!
- \li \inlineimage happy.gif Oh so happy!
- \li \inlineimage happy.gif Oh so happy!
- \endlist
-
- Here is an example of including inline images in a table:
-
- \code
- / *!
- \table
- \header
- \li Qt
- \li Qt Creator
- \row
- \li \inlineimage happy.gif Oh so happy!
- \li \inlineimage happy.gif Oh so happy!
- \row
- \li \inlineimage happy.gif Oh so happy!
- \li \inlineimage happy.gif Oh so happy!
- \endtable
- * /
- \endcode
-
- QDoc renders this as:
-
- \raw HTML
- <table align="center" cellpadding="2"
- cellspacing="1" border="0">
- <tr valign="top" bgcolor="#a2c511">
- <th>Qt</th>
- <th>Qt Creator</th>
- </tr>
- <tr valign="top" bgcolor="#f0f0f0">
- <td><img src="images/happy.gif" alt="Oh so happy!" />
- </td>
- <td><img src="images/happy.gif" alt="Oh so happy!" />
- </td>
- </tr>
- <tr valign="top" bgcolor="#f0f0f0">
- <td><img src="images/happy.gif" alt="Oh so happy!"/>
- </td>
- <td><img src="images/happy.gif" alt="Oh so happy!" />
- </td>
- </tr>
- </table>
- \endraw
-
- The command can also be used to insert an image inline with the
- text.
-
- \code
- / *!
- \inlineimage training.jpg Qt Training
- The Qt Programming course is offered as a
- five day Open Enrollment Course. The classes
- are open to the public. Although the course is open
- to anyone who wants to learn, attendees should
- have significant experience in C++ development
- to derive maximum benefit from the course.
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- \inlineimage training.jpg Qt Training
- The Qt Programming course is offered as a
- five day Open Enrollment Course. The classes
- are open to the public. Although the course is open
- to anyone who wants to learn, attendees should
- have significant experience in C++ development
- to derive maximum benefit from the course.
- \endquotation
-
- See also \l {image-command} {\\image} and \l {caption-command} {\\caption}.
-
- \target caption-command
- \section1 \\caption
-
- The \\caption command provides a caption for an image.
-
- The command takes all the text up to the end of the paragraph to
- be the caption. Experiment until you get the effect you want.
-
- \code
- / *!
- \table 100%
- \row
- \li \image windowsvista-pushbutton.png
- \caption The QPushButton widget provides a command button.
- \li \image windowsvista-toolbutton.png
- \caption The QToolButton class provides a quick-access button to commands
- or options, usually used inside a QToolBar.
- \endtable
- * /
- \endcode
-
- QDoc renders this as:
-
- \table 100%
- \row
- \li \image windowsvista-pushbutton.png
- \caption The QPushButton widget provides a command button.
- \li \image windowsvista-toolbutton.png
- \caption The QToolButton class provides a quick-access button to commands
- or options, usually used inside a QToolBar.
- \endtable
-
- See also \l {image-command} {\\image} and \l {inlineimage-command}
- {\\inlineimage}
-*/
-
-
-/*!
- \page 10-qdoc-commands-tablesandlists.html
- \previouspage Including Images
- \nextpage Special Content
-
- \title Tables and Lists
-
- These commands enable creating lists and tables. A list is
- rendered left aligned as a separate paragraph. A table is rendered
- centered as a separate paragraph. The table width depends on the
- width of its contents.
-
- \target table-command
- \section1 \\table
-
- The \\table and \\endtable commands delimit the contents of a
- table.
-
- The command accepts a single argument specifying the table's width
- as a percentage of the page width:
-
- \code
- / *!
- \table 100 %
-
- ...
-
- \endtable
- * /
- \endcode
-
- The code above ensures that the table will fill all available
- space. If the table's width is smaller than 100 %, the table will
- be centered in the generated documentation.
-
- A table can contain headers, rows and columns. A row starts with a
- \l {row-command} {\\row} command and consists of cells, each of which
- starts with an \l {li-command} {\\li} command. There is also a \l
- {header-command} {\\header} command which is a special kind of row
- that has a special format.
-
- \code
- / *!
- \table
- \header
- \li Qt Core Feature
- \li Brief Description
- \row
- \li \l {Signal and Slots}
- \li Signals and slots are used for communication
- between objects.
- \row
- \li \l {Layout Management}
- \li The Qt layout system provides a simple
- and powerful way of specifying the layout
- of child widgets.
- \row
- \li \l {Drag and Drop}
- \li Drag and drop provides a simple visual
- mechanism which users can use to transfer
- information between and within applications.
- \endtable
- * /
- \endcode
-
- QDoc renders this as:
-
- \raw HTML
- <table align="center" cellpadding="2"
- cellspacing="1" border="0">
- <tr valign="top" bgcolor="#a2c511">
- <th>Qt Core Feature</th>
- <th>Brief Description</th>
- </tr>
-
- <tr valign="top" bgcolor="#d0d0d0">
- <td>
- <a href="http://doc.qt.io/qt-5/signalsandslots.html">
- Signals and Slots</a>
- </td>
- <td>Signals and slots are used for communication
- between objects.</td>
- </tr>
-
- <tr valign="top" bgcolor="#c0c0c0">
- <td>
- <a href="http://doc.qt.io/qt-5/layout.html">
- Layout Management</a></td>
- <td>The Qt layout system provides a simple
- and powerful way of specifying the layout
- of child widgets.</td>
- </tr>
-
- <tr valign="top" bgcolor="#d0d0d0">
- <td>
- <a href="http://doc.qt.io/qt-5/dnd.html">
- Drag and Drop</a></td>
- <td>Drag and drop provides a simple visual
- mechanism which users can use to transfer
- information between and within applications.</td>
- </tr>
-
- </table>
- \endraw
-
- You can also make cells span several rows and columns. For
- example:
-
- \code
- / *!
- \table
- \header
- \li {3,1} This header cell spans three columns,
- but only one row.
- \row
- \li {2, 1} This table cell spans two columns,
- but only one row
- \li {1, 2} This table cell spans only one column,
- but two rows.
- \row
- \li A regular table cell
- \li A regular table cell
- \endtable
- * /
- \endcode
-
- QDoc renders this as:
-
- \raw HTML
- <table align="center" cellpadding="2" cellspacing="1"
- border="0">
-
- <tr valign="top" bgcolor="#a2c511">
- <th colspan="3" rowspan=" 1">
- This header cell spans three columns, but only one row.
- </th>
- </tr>
-
- <tr valign="top" bgcolor="#d0d0d0">
- <td colspan="2" rowspan=" 1">
- This table cell spans two columns, but only one row.
- </td>
- <td rowspan=" 2">
- This table cell spans only one column, but two rows.
- </td>
- </tr>
-
- <tr valign="top" bgcolor="#c0c0c0">
- <td>A regular table cell</td>
- <td>A regular table cell</td>
- </tr>
-
- </table>
- \endraw
-
- See also \l {header-command} {\\header}, \l {row-command} {\\row} and \l {li-command} {\\li}.
-
- \target header-command
- \section1 \\header
-
- The \\header command indicates that the following table cells are
- the current table's column headers.
-
- The command can only be used within the \l{table-command}
- {\\table...\\endtable} commands. A header can contain several
- cells. A cell is created with the \l {li-command} {\\li} command.
-
- A header cell's text is centered within the table cell and
- rendered using a bold font.
-
- \code
- / *!
- \table
- \header
- \li Qt Core Feature
- \li Brief Description
- \row
- \li \l {Signal and Slots}
- \li Signals and slots are used for communication
- between objects.
- \endtable
- * /
- \endcode
-
- QDoc renders this as:
-
- \raw HTML
- <table align="center" cellpadding="2"
- cellspacing="1" border="0">
- <tr valign="top" bgcolor="#a2c511">
- <th>Qt Core Feature</th>
- <th>Brief Description</th>
- </tr>
-
- <tr valign="top" bgcolor="#d0d0d0">
- <td>
- <a href="http://doc.qt.io/qt-5/signalsandslots.html">
- Signals and Slots</a>
- </td>
- <td>Signals and slots are used for communication
- between objects.</td>
- </tr>
- </table>
- \endraw
-
- See also \l {table-command} {\\table}, \l {row-command} {\\row} and \l {li-command} {\\li}.
-
- \target row-command
- \section1 \\row
-
- The \\row command begins a new row in a table. The \l {li-command}
- {\\li items} that belong in the new row will immediately follow the
- \\row.
-
- The command can only be used within the \l{table-command}
- {\\table...\\endtable} commands. A row can contain several
- cells. A cell is created with the \l {li-command} {\\li} command.
-
- The background cell color of each row alternates between two
- shades of grey, making it easier to distinguish the rows from each
- other. The cells' contents is left aligned.
-
- \code
- / *!
- \table
- \header
- \li Qt Core Feature
- \li Brief Description
- \row
- \li \l {Signal and Slots}
- \li Signals and slots are used for communication
- between objects.
- \row
- \li \l {Layout Management}
- \li The Qt layout system provides a simple
- and powerful way of specifying the layout
- of child widgets.
- \row
- \li \l {Drag and Drop}
- \li Drag and drop provides a simple visual
- mechanism which users can use to transfer
- information between and within applications.
- \endtable
- * /
- \endcode
-
- QDoc renders this as:
-
- \raw HTML
- <table align="center" cellpadding="2"
- cellspacing="1" border="0">
- <tr valign="top" bgcolor="#a2c511">
- <th>Qt Core Feature</th>
- <th>Brief Description</th>
- </tr>
-
- <tr valign="top" bgcolor="#d0d0d0">
- <td>
- <a href="http://doc.qt.io/qt-5/signalsandslots.html">
- Signals and Slots</a>
- </td>
- <td>Signals and slots are used for communication
- between objects.</td>
- </tr>
-
- <tr valign="top" bgcolor="#c0c0c0">
- <td>
- <a href="http://doc.qt.io/qt-5/layout.html">
- Layout Management</a></td>
- <td>The Qt layout system provides a simple
- and powerful way of specifying the layout
- of child widgets.</td>
- </tr>
-
- <tr valign="top" bgcolor="#d0d0d0">
- <td>
- <a href="http://doc.qt.io/qt-5/dnd.html">
- Drag and Drop</a></td>
- <td>Drag and drop provides a simple visual
- mechanism which users can use to transfer
- information between and within applications.</td>
- </tr>
-
- </table>
- \endraw
-
- See also \l {table-command} {\\table}, \l {header-command}
- {\\header}, and \l {li-command} {\\li}.
-
- \target value-command
- \section1 \\value
-
- The \\value command starts the documentation of a C++ enum item.
-
- The command's first argument is the value name. The value name may
- be preceded by an optional \e since clause enclosed in square
- brackets. The value description follows the value name. The description
- ends at the next blank line or \\value. The arguments are rendered in a
- table.
-
- Without a \e since clause, a \\value command could look like this:
-
- \code
- \value QtInfoMsg A message generated by the qInfo() function.
- \endcode
-
- The same command with a \e since clause would look like this:
-
- \code
- \value [since 5.5] QtInfoMsg A message generated by the qInfo() function.
- \endcode
-
- The documentation will be located in the associated class, header
- file or namespace documentation. See the \l {enum-command}
- {\\enum} documentation for an example.
-
- \note Since Qt 5.4, \\value command can also be used outside the
- \l {enum-command} {\\enum} topic. In this case, QDoc renders a
- two-column table listing the constant name (taken as-is from the
- first argument) and its description. This can be used, for
- example, in \l {qmlproperty-command}{\\qmlproperty} topic for
- documenting acceptable values for a QML enumeration property.
-
- See also \l {enum-command} {\\enum} and \l {omitvalue-command} {\\omitvalue}.
-
- \target omitvalue-command
- \section1 \\omitvalue
-
- The \\omitvalue command excludes a C++ enum item from the
- documentation.
-
- The command's only argument is the name of the enum item that will
- be omitted. See the \l {enum-command} {\\enum} documentation for
- an example.
-
- See also \l {enum-command} {\\enum} and \l {value-command}
- {\\value} \l {since-command}{\\since}
-
- \target list-command
- \section1 \\list
-
- The \\list and \\endlist commands delimit a list of items.
-
- Create each list item with the \l {li-command} {\\li} command. A
- list always contains one or more items. Lists can be nested. For
- example:
-
- \code
- / *!
- \list
- \li Qt Reference Documentation: Getting Started
- \list
- \li How to Learn Qt
- \li Installation
- \list
- \li Qt/X11
- \li Qt/Windows
- \li Qt/Mac
- \li Qt/Embedded
- \endlist
- \li Tutorial and Examples
- \endlist
- \endlist
- * /
- \endcode
-
- QDoc renders this as:
-
- \list
- \li Qt Reference Documentation: Getting Started
- \list
- \li How to Learn Qt
- \li Installation
- \list
- \li Qt/X11
- \li Qt/Windows
- \li Qt/Mac
- \li Qt/Embedded
- \endlist
- \li Tutorial and Examples
- \endlist
- \endlist
-
- The \\list command takes an optional argument providing
- alternative appearances for the list items.
-
- \code
- / *!
- \list
- \li How to Learn Qt
- \li Installation
- \li Tutorial and Examples
- \endlist
- * /
- \endcode
-
- QDoc renders the list items with bullets (the default):
-
- \list
- \li How to Learn Qt
- \li Installation
- \li Tutorial and Examples
- \endlist
-
- If you provide 'A' as an argument to the \\list command, the
- bullets are replaced with characters in alphabetical order:
-
- \list A
- \li How to Learn Qt
- \li Installation
- \li Tutorial and Examples
- \endlist
-
- If you replace 'A' with '1', the list items are numbered in
- ascending order:
-
- \list 1
- \li How to Learn Qt
- \li Installation
- \li Tutorial and Examples
-
- \endlist
-
- If you provide 'i' as the argument, the bullets are replaced with
- roman numerals:
-
- \list i
- \li How to Learn Qt
- \li Installation
- \li Tutorial and Examples
- \endlist
-
- Finally, you can make the list items appear with roman numbers
- following in ascending order if you provide 'I' as the optional
- argument:
-
- \list I
- \li How to Learn Qt
- \li Installation
- \li Tutorial and Examples
- \endlist
-
- You can also make the listing start at any character or number by
- simply provide the number or character you want to start at. For
- example:
-
- \code
- / *!
- \list G
- \li How to Learn Qt
- \li Installation
- \li Tutorial and Examples
- \endlist
- * /
- \endcode
-
- QDoc renders this as:
-
- \list G
- \li How to Learn Qt
- \li Installation
- \li Tutorial and Examples
- \endlist
-
- See also \l {li-command} {\\li}.
-
- \target li-command
- \section1 \\li (table cell, list item)
-
- The \\li command marks a table cell or a list item. This command
- is only used in \l{table-command} {tables} and \l{list-command}
- {lists}.
-
- It considers everything as its argument until the next \\li command, until the
- next \l {table-command} {\\endtable}, or \l {list-command} {\\endlist}
- command. See \l {table-command} {\\table} and \l {list-command} {\\list}
- for examples.
-
- If the command is used within a table, you can also specify
- how many rows or columns the item should span.
-
- \code
- / *!
- \table
- \header
- \li {3,1} This header cell spans three columns
- but only one row.
- \row
- \li {2, 1} This table item spans two columns
- but only one row
- \li {1, 2} This table item spans only one column,
- but two rows.
- \row
- \li A regular table item
- \li A regular table item
- \endtable
- * /
- \endcode
-
- QDoc renders this as:
-
- \raw HTML
- <table align="center" cellpadding="2" cellspacing="1"
- border="0">
-
- <tr valign="top" bgcolor="#a2c511">
- <th colspan="3" rowspan=" 1">
- This header cell spans three columns, but only one row.
- </th>
- </tr>
-
- <tr valign="top" bgcolor="#d0d0d0">
- <td colspan="2" rowspan=" 1">
- This table item spans two columns, but only one row.
- </td>
- <td rowspan=" 2">
- This table item spans only one column, but two rows.
- </td>
- </tr>
-
- <tr valign="top" bgcolor="#c0c0c0">
- <td>A regular table item</td>
- <td>A regular table item</td>
- </tr>
-
- </table>
- \endraw
-
- If not specified, the item will span one column and one row.
-
- See also \l {table-command} {\\table}, \l {header-command}
- {\\header}, and \l {list-command} {\\list}.
-
-*/
-
-
-/*!
- \page 11-qdoc-commands-specialcontent.html
- \previouspage Tables and Lists
- \nextpage Miscellaneous
-
- \title Special Content
-
- The document contents commands identify parts of the documentation,
- parts with a special rendering, conceptual meaning or
- function.
-
- \target quotation-command
- \section1 \\quotation
-
- The \\quotation and \\endquotation commands delimit a long quotation.
-
- The text in the delimited block is surrounded by
- \b{<blockquote>} and \b{</blockquote>} in the html output,
- e.g.:
-
- \code
- / *!
- Although the prospect of a significantly broader market is
- good news for Firstlogic, the notion also posed some
- challenges. Dave Dobson, director of technology for the La
- Crosse, Wisconsin-based company, said:
-
- \quotation
- As our solutions were being adopted into new
- environments, we saw an escalating need for easier
- integration with a wider range of enterprise
- applications.
- \endquotation
- * /
- \endcode
-
- The text in the \b{\\quotation} block will appear in the generated HTML as:
-
- \code
- <blockquote>
- <p>As our solutions were being adopted into new environments,
- we saw an escalating need for easier integration with a wider
- range of enterprise applications.</p>
- </blockquote>
- \endcode
-
- The built-in style sheet for most browsers will render the
- contents of the <blockquote> tag with left and right
- indentations. The example above would be rendered as:
-
- \quotation
- As our solutions were being adopted into new
- environments, we saw an escalating need for easier
- integration with a wider range of enterprise
- applications.
- \endquotation
-
- But you can redefine the \b{<blockquote>} tag in your style.css file.
-
- \target footnote-command
- \section1 \\footnote
-
- The \\footnote and \\endfootnote commands delimit a footnote.
-
- The footnote is rendered at the bottom of the page.
-
- \warning The \b{\\footnote} and \b{\\endfootnote} commands
- have not been implemented. The footnote is rendered as a regular
- HTML paragraph.
-
- \target note-command
- \section1 \\note
-
- The \\note command defines a new paragraph preceded by "Note:"
- in bold.
-
- \target tableofcontents-command
- \section1 \\tableofcontents
-
- The \\tableofcontents command has been disabled because QDoc
- now generates a table of contents automatically.
-
- The automatically generated table of contents appears in the upper
- righthand corner of the page.
-
- \target brief-command
- \section1 \\brief
-
- The \\brief command introduces a one-sentence description of a
- class, namespace, header file, property, or variable.
-
- The brief text is used to introduce the documentation of the
- associated object, and in lists generated using the \l
- {generatelist-command} {\\generatelist} command and the \l
- {annotatedlist-command} {\\annotatedlist} command.
-
- The \\brief command can be used in two significant different ways:
- \l {brief class} {One for classes, namespaces and header files},
- and \l {brief-property} {one for properties and variables}.
-
- \target brief-property
-
- When the \\brief command is used to describe a property or a
- variable, the brief text must be a sentence fragment starting with
- "whether" (for a boolean property or variable) or starting with
- "the" (for any other property or variable).
-
- For example the boolean QWidget::isWindow property:
-
- \code
- / *!
- \property QWidget::isActiveWindow
- \brief Whether this widget's window is the active window.
-
- The active window is the window that contains the widget that
- has keyboard focus.
-
- When popup windows are visible, this property is \c true
- for both the active window \e and the popup.
-
- \sa activateWindow(), QApplication::activeWindow()
- * /
- \endcode
-
- and the QWidget::geometry property
-
- \code
- / *!
- \property QWidget::geometry
- \brief The geometry of the widget relative to its parent and
- excluding the window frame.
-
- When changing the geometry, the widget, if visible,
- receives a move event (moveEvent()) and/or a resize
- event (resizeEvent()) immediately.
-
- ...
-
- \sa frameGeometry(), rect(), ...
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- \raw HTML
- <h3>geometry :
- <a href="http://doc.qt.io/qt-5/qrect.html">QRect</a>
- </h3>
- \endraw
-
- This property holds the geometry of the widget relative
- to its parent and excluding the window frame.
-
- ...
-
- Access functions:
- \list
- \li \b {const QRect & geometry () const}
- \li \b {void setGeometry ( int x, int y, int w, int h )}
- \li \b {void setGeometry ( const QRect & )}
- \endlist
-
- See also \l
- {QWidget::frameGeometry()} {frameGeometry()}, \l
- {QWidget::rect()} {rect()}, ...
- \endquotation
-
- \target brief class
-
- When the \\brief command is used to describe a class, we recommend
- using a complete sentence like this:
-
- \code
- The <classname> class is|provides|contains|specifies...
- \endcode
-
- \warning Do not repeat your detailed description with the same sentence as
- the brief statement will be the first paragraph of the detailed
- description.
-
- \code
- / *!
- \class PreviewWindow
- \brief The PreviewWindow class is a custom widget
- displaying the names of its currently set
- window flags in a read-only text editor.
-
- The PreviewWindow class inherits QWidget. The widget
- displays the names of its window flags set with the
- setWindowFlags() function. It is also provided with a
- QPushButton that closes the window.
-
- ...
-
- \sa QWidget
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- \raw HTML
- <h1>PreviewWindow Class Reference</h1>
- \endraw
-
- The PreviewWindow class is a custom widget displaying
- the names of its currently set window flags in a
- read-only text editor. \l {preview window} {More...}
-
- \raw HTML
- <h3>Properties</h3>
- \endraw
-
- \list
- \li 52 properties inherited from QWidget
- \li 1 property inherited from QObject
- \endlist
-
- \raw HTML
- <h3>Public Functions</h3>
- \endraw
-
- \list
- \li \l {constructor} {PreviewWindow}(QWidget *parent = 0)
- \li void \l {function} {setWindowFlags}(Qt::WindowFlags flags)
- \endlist
-
- \list
- \li 183 public functions inherited from QWidget
- \li 28 public functions inherited from QObject
- \endlist
-
- \raw HTML
- <h3>Public Slots</h3>
- \endraw
-
- \list
- \li 17 public slots inherited from QWidget
- \li 1 public slot inherited from QObject
- \endlist
-
- \raw HTML
- <h3>Additional Inherited Members</h3>
- \endraw
-
- \list
- \li 1 signal inherited from QWidget
- \li 1 signal inherited from QObject
- \li 4 static public members inherited from QWidget
- \li 4 static public members inherited from QObject
- \li 39 protected functions inherited from QWidget
- \li 7 protected functions inherited from QObject
- \endlist
-
- \target preview window
-
- \raw HTML
- <hr />
- <h2>Detailed Description</h2>
- \endraw
-
- The PreviewWindow class is a custom widget displaying
- the names of its currently set window flags in a
- read-only text editor.
-
- The PreviewWindow class inherits QWidget. The widget
- displays the names of its window flags set with the \l
- {function} {setWindowFlags()} function. It is also
- provided with a QPushButton that closes the window.
-
- ...
-
- See also QWidget.
-
- \raw HTML
- <hr />
- <h2>Member Function Documentation</h2>
- \endraw
-
- \target constructor
- \raw HTML
- <h3>PreviewWindow(QWidget *parent = 0)</h3>
- \endraw
-
- Constructs a preview window widget with \e parent.
-
- \target function
- \raw HTML
- <h3>setWindowFlags(Qt::WindowFlags flags)</h3>
- \endraw
-
- Sets the widgets flags using the
- QWidget::setWindowFlags() function.
-
- Then runs through the available window flags,
- creating a text that contains the names of the flags
- that matches the flags parameter, displaying
- the text in the widgets text editor.
- \endquotation
-
- Using \\brief in a \l{namespace-command}{\\namespace}:
-
- \code
- / *!
- \namespace Qt
-
- \brief The Qt namespace contains miscellaneous identifiers
- used throughout the Qt library.
- * /
- \endcode
-
- Using \\brief in a \l{headerfile-command}{\\headerfile}:
-
- \code
- / *!
- \headerfile <QtGlobal>
- \title Global Qt Declarations
-
- \brief The <QtGlobal> header file provides basic
- declarations and is included by all other Qt headers.
-
- \sa <QtAlgorithms>
- * /
- \endcode
-
- See also \l{property-command} {\\property}, \l{class-command}
- {\\class}, \l{namespace-command} {\\namespace} and
- \l{headerfile-command} {\\headerfile}.
-
- \target legalese-command
- \section1 \\legalese
-
- The \\legalese and \\endlegalese commands delimit a license agreement.
-
- In the generated HTML, the delimited text is surrounded by a \b
- {<div class="LegaleseLeft">} and \b {</div>} tags.
-
- An example of a license agreement enclosed in \\legalese
- and \\endlegalese:
-
- \code
- / *!
- \legalese
- Copyright 1996 Daniel Dardailler.
-
- Permission to use, copy, modify, distribute, and sell this
- software for any purpose is hereby granted without fee,
- provided that the above copyright notice appear in all
- copies and that both that copyright notice and this
- permission notice appear in supporting documentation, and
- that the name of Daniel Dardailler not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission. Daniel
- Dardailler makes no representations about the suitability of
- this software for any purpose. It is provided "as is"
- without express or implied warranty.
-
- Modifications Copyright 1999 Matt Koss, under the same
- license as above.
- \endlegalese
- * /
- \endcode
-
- It will appear in the generated HTML as:
-
- \code
- <div class="LegaleseLeft">
- <p>Copyright 1996 Daniel Dardailler.</p>
- <p>Permission to use, copy, modify, distribute, and sell
- this software for any purpose is hereby granted without fee,
- provided that the above copyright notice appear in all
- copies and that both that copyright notice and this
- permission notice appear in supporting documentation, and
- that the name of Daniel Dardailler not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission. Daniel
- Dardailler makes no representations about the suitability of
- this software for any purpose. It is provided "as is"
- without express or implied warranty.</p>
-
- <p>Modifications Copyright 1999 Matt Koss, under the same
- license as above.</p>
- </div>
- \endcode
-
- If the \\endlegalese command is omitted, QDoc will process the
- \\legalese command but considers the rest of the documentation
- page as the license agreement.
-
- Ideally, the license text is located with the licensed code.
-
- Elsewhere, the documentation identified as \e{\\legalese} command
- can be accumulated using \l {generatelist-command} {\\generatelist}
- with \c {legalese} as the argument. This is useful for generating
- an overview of the license agreements associated with the source
- code.
-
- \note The output of the \c {\generatelist legalese} command includes
- the \\legalese texts in the current documentation project only. If
- the current documentation project depends on other modules, their
- license texts will not be listed.
-
- \target warning-command
- \section1 \\warning
-
- The \\warning command prepends "Warning:" to the command's
- argument, in bold font.
-
- \code
- / *!
- Qt::HANDLE is a platform-specific handle type
- for system objects. This is equivalent to
- \c{void *} on Windows and macOS, and to
- \c{unsigned long} on X11.
-
- \warning Using this type is not portable.
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- Qt::HANDLE is a platform-specific handle type
- for system objects. This is equivalent to
- \c{void *} on Windows and macOS, and to
- \c{unsigned long} on X11.
-
- \warning Using this type is not portable.
- \endquotation
-
-*/
-
-
-/*!
- \page 12-0-qdoc-commands-miscellaneous.html
- \previouspage Special Content
- \nextpage The QDoc Configuration File
-
- \title Miscellaneous
-
- These commands provide miscellaneous functions connected to the
- visual appearance of the documentation, and to the process of
- generating the documentation.
-
- \target annotatedlist-command
- \section1 \\annotatedlist
-
- The \\annotatedlist command expands to a list of the members of a
- group, each member listed with its \e {brief} text. Below is an
- example from the Qt Reference Documentation:
-
- \code
- / *!
- ...
- \section1 Drag and Drop Classes
-
- These classes deal with drag and drop and the necessary mime type
- encoding and decoding.
-
- \annotatedlist draganddrop
-
- * /
- \endcode
-
- This generates a list of all the C++ classes and/or QML types in
- the \e{draganddrop} group. A C++ class or QML type in the
- \e{draganddrop} group will have \e{\\ingroup draganddrop} in its
- \e{\\class} or \e{\\qmltype} comment.
-
-
- \target qtcmakepackage-command
- \section1 \\qtcmakepackage
-
- Use the \\qtcmakepackage command to add CMake package information to classes
- and namespaces. This information will then appear in a table at the top of
- the class or namespace documentation page. For example:
-
- \code
- / *!
- \namespace Foo
- \inheaderfile Bar
- \qtcmakepackage Baz
- \brief A namespace.
-
- [...]
- * /
- \endcode
-
- QDoc will output this as
-
- \raw HTML
- <h1 class="title">Foo Namespace</h1>
- <p>A namespace. <a href="#details">More...</a></p>
- <div class="table"><table class="alignedsummary">
- <tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;Bar&gt;</span>
- </td></tr><tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 COMPONENT Baz)</td></tr>
- \endraw
-
-
- \target generatelist-command
- \section1 \\generatelist
-
- The \\generatelist command expands to a list of links to the
- documentation entities in a group. Below is an example from the Qt
- Reference Documentation:
-
- \code
- / *!
- \page classes.html
- \title All Classes
-
- For a shorter list that only includes the most
- frequently used classes, see \l{Qt's Main Classes}.
-
- \generatelist classes Q
- * /
- \endcode
-
- This generates the \e {All Classes} page. The command accepts the
- following arguments:
-
- \target table example
- \section2 \c annotatedclasses
-
- The \c annotatedclasses argument provides a table containing the
- names of all the classes, and a description of each class. Each
- class name is a link to the class's reference documentation. For
- example:
-
- \table
- \row
- \li QDial
- \li Rounded range control (like a speedometer or potentiometer)
- \row
- \li QDialog
- \li The base class of dialog windows
- \row
- \li QDir
- \li Access to directory structures and their contents
- \endtable
-
- A C++ class is documented with the \l {class-command} {\\class}
- command. The annotation for the class is taken from the argument
- of the class comment's \l {brief-command} {\\brief} command.
-
- \section2 \c annotatedexamples
-
- The \c annotatedexamples argument provides a complete list of all
- examples as a set of tables containing the titles of all the
- examples, and a description of each example. Each title is a
- link to the example's documentation.
-
- A separate table for each module (that has documented examples)
- is generated, provided that the module has defined a
- navigation.landingpage configuration variable. The \e landingpage
- variable is used as a title for a header that precedes each table.
-
- \section2 \c annotatedattributions
-
- The \c annotatedattributions argument provides a complete list of all
- attributions as a set of tables containing the titles of all the
- attributions, and a description of each attribution. Each title is a
- link to the attribution's page.
-
- A separate table for each module (that has attributions)
- is generated, provided that the module has defined a
- navigation.landingpage configuration variable. The \e landingpage
- variable is used as a title for a header that precedes each table.
-
- \target list example
- \section2 \c {classes <prefix>}
-
- The \c classes argument provides a complete alphabetical list of
- the classes. The second argument, \c{<prefix>}, is the common
- prefix for the class names. The class names will be sorted on the
- character that follows the common prefix. e.g. The common prefix
- for the Qt classes is \c Q. The common prefix argument is
- optional. If no common prefix is provided, the class names will
- be sorted on their first character.
-
- Each class name becomes a link to the class's reference
- documentation. This command is used to generate the
- \e {All Classes} page this way:
-
- \code
- / *!
- \page classes.html
- \title All Classes
- \ingroup classlists
-
- \brief Alphabetical list of classes.
-
- This is a list of all Qt classes. For classes that
- have been deprecated, see the \l{Obsolete Classes}
- list.
-
- \generatelist classes Q
- * /
- \endcode
-
- A C++ class is documented with the \l {class-command} {\\class}
- command.
-
- \section2 \c classesbymodule
-
- When this argument is used, a second argument is required, which
- specifies the module whose classes are to be listed. QDoc
- generates a table containing those classes. Each class is listed
- with the text of its \l{brief-command} {\\brief} command.
-
- For example, this command can be used on a module page as follows:
-
- \code
- / *!
- \page phonon-module.html
- \module Phonon
- \title Phonon Module
- \ingroup modules
-
- \brief Contains namespaces and classes for multimedia functionality.
-
- \generatelist{classesbymodule Phonon}
-
- ...
-
- * /
- \endcode
-
- Each class that is a member of the specified module must be marked
- with the \l {inmodule-command} {\\inmodule} command in its \\class
- comment.
-
- \section2 \c qmltypesbymodule
-
- Similar to \c classesbymodule argument, but used for listing the
- QML types from the QML module specified with the second argument.
-
- \note Support for this argument was introduced in QDoc 5.6.
-
- \section2 \c jstypesbymodule
-
- Similar to \c classesbymodule argument, but used for listing the
- JavaScript types from the module specified with the second argument.
-
- \note Support for this argument was introduced in QDoc 5.6.
-
- \section2 \c {examplefiles [regular_expression]}
-
- The \c examplefiles argument lists the files that are part of
- an example project. The optional second argument is a regular
- expression; if provided, only the files whose path matches with
- the regular expression are listed.
-
- The \c examplefiles argument can be only used within example
- documentation (see \l {example-command}{\\example}), and is
- typically used together with the \l {noautolist-command}{\\noautolist}
- command.
-
- \section2 \c {exampleimages [regular_expression]}
-
- The \c exampleimages argument lists the images that are part of
- an example project. The optional second argument is a regular
- expression; if provided, only the image files whose path matches
- with the regular expression are listed.
-
- The \c exampleimages argument can be only used within example
- documentation (see \l {example-command}{\\example}), and is
- typically used together with the \l {noautolist-command}{\\noautolist}
- command.
-
- \section2 \c functionindex
-
- The \c functionindex argument provides a complete alphabetical
- list of all the documented member functions. It is normally used
- only to generate the \e {Qt function index} page
- this way:
-
- \code
- / *!
- \page functions.html
- \title All Functions
- \ingroup funclists
-
- \brief All documented Qt functions listed alphabetically with a
- link to where each one is declared.
-
- This is the list of all documented member functions and global
- functions in the Qt API. Each function has a link to the
- class or header file where it is declared and documented.
-
- \generatelist functionindex
- * /
- \endcode
-
- \section2 \c legalese
-
- The \c legalese argument tells QDoc to generate a list of licenses in
- the current documentation project. Each license is identified using
- the \l {legalese-command} {\\legalese} command.
-
- \section2 \c overviews
-
- The \c overviews argument is used to tell QDoc to generate a list
- by concatenating the contents of all the \l {group-command}
- {\\group} pages. Qt uses it to generate the \e {overviews} page
- this way:
-
- \code
- / *!
- \page overviews.html
-
- \title All Overviews and HOWTOs
-
- \generatelist overviews
- * /
- \endcode
-
- \section2 \c attributions
-
- The \c attributions argument is used to tell QDoc to generate a list
- of attributions in the documentation.
-
- \section2 \c related
-
- The \c related argument is used in combination with the \l
- {group-command} {\\group} and \l {ingroup-command} {\\ingroup}
- commands to list all the overviews related to a specified
- group. For example, the page for the \e {Programming with Qt}
- page is generated this way:
-
- \code
- / *!
- \group qt-basic-concepts
- \title Programming with Qt
-
- \brief The basic architecture of the Qt cross-platform application and UI framework.
-
- Qt is a cross-platform application and UI framework for
- writing web-enabled applications for desktop, mobile, and
- embedded operating systems. This page contains links to
- articles and overviews explaining key components and
- techniuqes used in Qt development.
-
- \generatelist {related}
- * /
- \endcode
-
- Each page listed on this group page contains the command:
-
- \code
- \ingroup qt-basic-concepts
- \endcode
-
- \target if-command
- \section1 \\if
-
- The \\if command and the corresponding \\endif command
- enclose parts of a QDoc comment that only will be included if
- the condition specified by the command's argument is true.
-
- The command reads the rest of the line and parses it as an C++ #if
- statement.
-
- \code
- / *!
- \if defined(opensourceedition)
-
- \note This edition is for the development of
- \l{Qt Open Source Edition} {Free and Open Source}
- software only; see \l{Qt Commercial Editions}.
-
- \endif
- * /
- \endcode
-
- This QDoc comment will only be rendered if the \c
- opensourceedition preprocessor symbol is defined, and specified in
- the \l {defines-variable} {defines} variable in the configuration
- file to make QDoc process the code within #ifdef and #endif:
-
- \code
- defines = opensourceedition
- \endcode
-
- You can also define the preprocessor symbol manually on the
- command line. For more information see the documentation of the \l
- {defines-variable} {defines} variable.
-
- See also \l{endif-command} {\\endif}, \l{else-command} {\\else},
- \l {defines-variable} {defines} and \l {falsehoods-variable}
- {falsehoods}.
-
- \target endif-command
- \section1 \\endif
-
- The \\endif command and the corresponding \\if command
- enclose parts of a QDoc comment that will be included if
- the condition specified by the \l {if-command} {\\if} command's
- argument is true.
-
- For more information, see the documentation of the \l {if-command}
- {\\if} command.
-
- See also \l{if-command} {\\if}, \l{else-command} {\\else}, \l
- {defines-variable} {defines} and \l {falsehoods-variable}
- {falsehoods}.
-
- \target else-command
- \section1 \\else
-
- The \\else command specifies an alternative if the
- condition in the \l {if-command} {\\if} command is false.
-
- The \\else command can only be used within \l {if-command}
- {\\if...\\endif} commands, but is useful when there is only two
- alternatives.
-
- \target include-command
- \section1 \\include
-
- The \\include command sends all or part of the file specified by
- its first argument to the QDoc input stream to be processed as a
- QDoc comment snippet.
-
- The command is useful when some snippet of commands or text is to
- be used in multiple places in the documentation. Use the \\include
- command wherever you want to insert a snippet into the documentation.
- The file containing the snippet to include, must be located under the
- path(s) listed in the \l{sourcedirs-variable}{sourcedirs} or
- \l{exampledirs-variable}{exampledirs} QDoc configuration variable.
- It can be either any source file parsed by QDoc (or even the same one
- where \\include command is used), or any other text file. To store
- snippets in a separate file that is not meant to be parsed by QDoc,
- use a file extension that is not listed in
- \l{sources.fileextensions-variable}{sources.fileextensions};
- for example, \c .qdocinc.
-
- The command can have either one or two arguments. The first
- argument is always a file name. The contents of the file must be
- QDoc input, in other words, a sequence of QDoc commands and text, but
- without the enclosing QDoc comment \c{/}\c{*!} ... \c{*}\c{/} delimiters.
- If you want to include the entire named file, don't use the second
- argument. If you want to include only part of the file, see the
- \l{2-argument-form}{two argument form} below. Here is an example
- of the one argument form:
-
- \code
- / *!
- \page corefeatures.html
- \title Core Features
-
- \include examples/signalandslots.qdocinc
- \include examples/objectmodel.qdocinc
- \include examples/layoutmanagement.qdocinc
- * /
- \endcode
-
- QDoc renders this page \l{corefeatures.html} {as shown here}.
-
- \target 2-argument-form
- \section2 \\include filename snippet-identifier
-
- It is a waste of time to make a separate \c .qdocinc file for every
- QDoc include snippet you want to use in multiple places in the
- documentation, especially given that you probably have to put the
- copyright/license notice in every one of these files. So if you
- have a large number of snippets to be included, you can put them all in a
- single file if you want, and surround each one with:
- \code
- //! [snippet-id1]
-
- QDoc commands and text...
-
- //! [snippet-id1]
-
- //! [snippet-id2]
-
- More QDoc commands and text...
-
- //! [snippet-id2]
- \endcode
-
- Then you can use the two-argument form of the command:
-
- \code
- \input examples/signalandslots.qdocinc snippet-id2
- \input examples/objectmodel.qdocinc another-snippet-id
- \endcode
-
- It works as expected. The sequence of QDoc commands and text found
- between the two tags with the same name as the second argument is
- sent to the QDoc input stream. You can even have nested snippets.
-
- \note Snippet identifiers work also within documentation comment
- (\beginqdoc .. \endqdoc) blocks, so it's not necessary to use a
- separate \c .qdocinc file. When processing a comment block, QDoc
- removes any \c {//!} comment lines from the generated output.
-
- \target meta-command
- \section1 \\meta
-
- The \\meta command is used for adding metadata to example documentation,
- and when generating HTML output for specifying the \e maintainer(s) of a
- C++ class.
-
- The command has two arguments: the first argument is the name of the
- metadata attribute, and the second argument is the
- value for the attribute. Each argument should be enclosed in curly
- brackets, as shown in this example:
-
- \code
- / *!
- \class QWidget
- \brief The QWidget class is the base class of all user interface objects.
-
- \ingroup basicwidgets
-
- \meta {technology} {User Interface}
- \meta {platform} {macOS 10.6}
- \meta {platform} {MeeGo}
- \meta {audience} {user}
- \meta {audience} {programmer}
- \meta {audience} {designer}
- * /
- \endcode
-
- When running QDoc to generate HTML, the example above will have no
- effect on the generated output.
-
- \b {Example Metadata}
-
- Another use for \\meta command is to include metadata (tags) in
- \l {example-command}{\\example} documentation. By default, QDoc
- generates example tags based on the example's \l {title-command}{\\title}
- and module name. These tags are displayed in Qt Creator's Welcome mode,
- helping users navigate the list of examples.
-
- Additional tags can be created with \c {\\meta {tag} {tag1,[tag2,...]}}.
- For example:
- \badcode
- / *!
- \example helloworld
- \title Hello World Example
- \meta {tag} {tutorial,basic}
- * /
- \endcode
-
- This would result in the following tags: \e {tutorial,basic,hello,world}.
- Common words such as \e example are ignored.
-
- \b {Example Install Paths}
-
- The \\meta command combined with an argument \c installpath specifies the
- location of an installed example. This value overrides the one that is set
- using the \c examplesinstallpath configuration variable.
-
- \badcode
- / *!
- \example helloworld
- \title Hello World Example
- \meta {installpath} {tutorials}
- * /
- \endcode
-
- See also \l {examplesinstallpath}.
-
- \target noautolist-command
- \section1 \\noautolist
-
- The \\noautolist command indicates that the annotated list of C++
- classes or QML types, which is automatically generated at the
- bottom of the C++ or QML module page should be omitted, because
- the classes or types have been listed manually. This command can
- also be used with the \l {group-command}{\\group} command to omit
- the list of group members, when they are listed manually.
-
- The command must stand on its own line. See \l {Qt Quick Controls QML Types}
- for an example. The page is generated from \c {qtquickcontrols2-qmlmodule.qdoc}.
- There you will find a QDoc comment containing the \c{\qmlmodule} command for
- the QtQuick.Controls module. The same comment contains a \c {\noautolist}
- command to disable automatic list generation, and a \l {generatelist-command}
- {\\generatelist} to list the QML types in a specific section of the document.
-
- This command was introduced in QDoc 5.6.
-
- Since Qt 5.10, this command can be applied also to \l{example-command}
- {\\example} documentation, where it causes the automatically generated
- list of files and images belonging to an example project to be omitted.
-
- \target omit-command
- \section1 \\omit
-
- The \\omit command and the corresponding \\endomit command
- delimit parts of the documentation that you want QDoc to skip. For
- example:
-
- \code
- / *!
- \table
- \row
- \li Basic Widgets
- \li Basic GUI widgets such as buttons, comboboxes
- and scrollbars.
-
- \omit
- \row
- \li Component Model
- \li Interfaces and helper classes for the Qt
- Component Model.
- \endomit
-
- \row
- \li Database Classes
- \li Database related classes, e.g. for SQL databases.
- \endtable
- * /
- \endcode
-
- QDoc renders this as:
-
- \raw HTML
- <table align="center" cellpadding="2"
- cellspacing="1" border="0">
-
- <tr valign="top" bgcolor="#d0d0d0">
- <td>Basic Widgets</td>
- <td>Basic GUI widgets such as buttons, comboboxes
- and scrollbars.</td>
- </tr>
-
- <tr valign="top" bgcolor="#c0c0c0">
- <td>Database Classes</td>
- <td>Database related classes, e.g. for SQL databases.</td>
- </tr>
- </table>
- \endraw
-
- \target raw-command
- \section1 \\raw (avoid)
-
- The \\raw command and the corresponding
- \\endraw command delimit a block of raw mark-up language code.
-
- \note Avoid using this command if possible. If you are trying to generate
- special table or list behavior, try to get the behavior you want
- using the \l {span-command} {\\span} and \l {div-command} {\\div}
- commands in your \l {table-command} {\\table} or \l {list-command}
- {\\list}.
-
- The command takes an argument specifying the code's format.
- Currently, the only supported format is HTML.
-
- The \\raw command is useful if you want some special HTML effects
- in your documentation.
-
- \code
- / *!
- Qt has some predefined QColor objects.
-
- \raw HTML
- <style type="text/css" id="colorstyles">
- #color-blue { background-color: #0000ff; color: #ffffff }
- #color-darkBlue { background-color: #000080; color: #ffffff }
- #color-cyan { background-color: #00ffff; color: #000000 }
- </style>
-
- <p>
- <tt id="color-blue">Blue(#0000ff)</tt>,
- <tt id="color-darkBlue">dark blue(#000080)</tt> and
- <tt id="color-cyan">cyan(#00ffff)</tt>.
- </p>
- \endraw
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- Qt has some predefined QColor objects.
-
- \raw HTML
- <style type="text/css" id="colorstyles">
- #color-blue { background-color: #0000ff; color: #ffffff }
- #color-darkBlue { background-color: #000080; color: #ffffff }
- #color-cyan { background-color: #00ffff; color: #000000 }
- </style>
-
- <p>
- <tt id="color-blue">Blue(#0000ff)</tt>,
- <tt id="color-darkBlue">dark blue(#000080)</tt> and
- <tt id="color-cyan">cyan(#00ffff)</tt>.
- </p>
- \endraw
- \endquotation
-
- \note But you can achieve the exact same thing using QDoc
- commands. In this case, all you have to do is include the color
- styles in your style.css file. Then you can write:
-
- \code
- \tt {\span {id="color-blue"} {Blue(#0000ff)}},
- \tt {\span {id="color-darkBlue"} {dark blue(#000080)}} and
- \tt {\span {id="color-cyan"} {cyan(#00ffff)}}.
- \endcode
-
- ...which is rendered as:
-
- \tt {\span {id="color-blue"} {Blue(#0000ff)}},
- \tt {\span {id="color-darkBlue"} {dark blue(#000080)}} and
- \tt {\span {id="color-cyan"} {cyan(#00ffff)}}.
-
- \target unicode-command
- \section1 \\unicode
-
- The \\unicode command allows you to insert an arbitrary Unicode
- character in the document.
-
- The command takes an argument specifying the character as an
- integer. By default, base 10 is assumed, unless a '0x' or '0'
- prefix is specified (for base 16 and 8, respectively). For
- example:
-
- \code
- O G\unicode{0xEA}nio e as Rosas
-
- \unicode 0xC0 table en famille avec 15 \unicode 0x20AC par jour
-
- \unicode 0x3A3 \e{a}\sub{\e{i}}
- \endcode
-
- QDoc renders this as:
-
- \quotation
- O G\unicode{0xEA}nio e as Rosas
-
- \unicode 0xC0 table en famille avec 15 \unicode 0x20AC par jour
-
- \unicode 0x3A3 \e{a}\sub{\e{i}}
- \endquotation
-*/
-
diff --git a/src/qdoc/doc/qdoc-manual-qdocconf.qdoc b/src/qdoc/doc/qdoc-manual-qdocconf.qdoc
deleted file mode 100644
index eb2f8f5bf..000000000
--- a/src/qdoc/doc/qdoc-manual-qdocconf.qdoc
+++ /dev/null
@@ -1,2082 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \page 21-0-qdoc-configuration.html
- \previouspage Miscellaneous
- \nextpage Generic Configuration Variables
-
- \title The QDoc Configuration File
-
- Before running QDoc, you must create a QDoc configuration file to
- tell QDoc where to find the source files that contain the QDoc
- comments. The pathname to your configuration file is passed to
- QDoc on the command line:
-
- \quotation
- \c {/current/dir$ ../../bin/qdoc ./config.qdocconf}
- \endquotation
-
- \section1 General Description
-
- The configuration file is a list of entries of the form \e
- {"variable = value"}. Using the configuration variables, you can
- define where QDoc should find the various source files, images and
- examples, where to put generated documentation etc. The
- configuration file can also contain directives like \c
- include. For an example, see \l {minimal-qdocconf}{a minimal qdocconf file}.
-
- You can also use configuration variables to get QDoc to support
- \l{Supporting Derived Projects} {derived projects}, i.e QDoc can
- generate links in your project's documentation to elements in the
- Qt online documentation. See the \l {Supporting Derived projects}
- section.
-
- A valid configuration variable name can include upper and lower case
- letters, numbers, and an underscore, '_'.
-
- The value of a configuration variable can be set using either '='
- or '+='. The difference is that '=' overrides the previous value,
- while '+=' adds a new value to the current one.
-
- Values of some configuration variables are interpreted as a list of
- strings, for example:
- \l {sourcedirs-variable}
- {\c{sourcedirs}}, while others are treated as a single string. Double
- quotes around a value string are optional, but including them allows
- you to use special characters like '=' and ' \" ' within the value
- string, for example:
-
- \badcode
- HTML.postheader = "<a href=\"index.html\">Home</a>"
- \endcode
-
- If an entry spans many lines, use a backslash at the end of every
- line but the last:
-
- \badcode
- sourcedirs = kernel tools widgets
- \endcode
-
- This can be written as:
- \badcode
- sourcedirs = kernel \
- tools \
- widgets
- \endcode
-
- If a value spans multiple lines but is interpreted as a single string,
- the lines are joined with spaces.
-
- \section1 Expansion of Configuration Values
-
- QDoc supports expanding environment variables within configuration files.
- For example, Qt modules rely on the environment variable QT_INSTALL_DOCS
- to include definitions related to all Qt module documentation projects:
-
- \badcode
- include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
- \endcode
-
- A variable to expand is prefixed with '$'. To use the literal character
- '$' within a value string, escape it with a backslash: '\\$'.
-
- Since QDoc 6.0, values can be expanded also from other configuration
- variables. In addition to the \c {$variable} syntax, also \c {${variable}}
- is valid. The latter eliminates the need to separate the variable
- name with whitespace or non-variable characters. For example:
-
- \badcode
- baseurl = https://doc.qt.io/
- ...
- url = ${baseurl}qtcreator
- \endcode
-
- If the target variable refers to a list of strings, they will be
- joined using spaces in the expanded value:
-
- \badcode
- vars = foo \
- bar \
- baz
-
- items = "Items: $vars" # Expands to "Items: foo bar baz"
- \endcode
-
- Controlling which character is used for joining the string list is also
- possible:
-
- \badcode
- items = "Items: ${vars,|}" # Expands to "Items: foo|bar|baz"
- items = "Items: ${vars,,}" # Expands to "Items: foo,bar,baz"
- items = "Items: ${vars,}" # Expands to "Items: foobarbaz"
- \endcode
-
- As the expansion is performed after reading in all variables, the order
- in which they are defined does not matter.
-
- \note Nested variable expansion is not supported.
-
- \section2 Expanding Environment Variables
-
- When expanding environment variables, the \c {${variable}} syntax has
- different behavior compared to \c {$variable}. The former expands the
- content of the variable in place to be parsed as part of the
- configuration file, while the latter simply assigns the content as a
- value for the current configuration variable. This has implications if
- the environment variable contains a list of elements separated by
- whitespace, or other formatting recognized by QDoc.
-
- For example, if the value of an environment variable \c SRCDIRS is
- \c {"../src/a ../src/b"}, then
-
- \badcode
- sourcedirs = $SRCDIRS # Fail - value is interpreted as a single path.
- sourcedirs = ${SRCDIRS} # Ok - whitespace is used as a delimiter.
- \endcode
-
- \section1 Configuration Variables
-
- \section1 Variable List
-
- \list
- \li \l {alias-variable} {alias}
- \li \l {Cpp.ignoredirectives-variable} {Cpp.ignoredirectives}
- \li \l {Cpp.ignoretokens-variable} {Cpp.ignoretokens}
- \li \l {defines-variable} {defines}
- \li \l {depends-variable} {depends}
- \li \l {exampledirs-variable} {exampledirs}
- \li \l {examples-variable} {examples}
- \li \l {examples.fileextensions-variable} {examples.fileextensions}
- \li \l {excludedirs-variable} {excludedirs}
- \li \l {excludefiles-variable} {excludefiles}
- \li \l {extraimages-variable} {extraimages}
- \li \l {falsehoods-variable} {falsehoods}
- \li \l {headerdirs-variable} {headerdirs}
- \li \l {headers-variable} {headers}
- \li \l {headers.fileextensions-variable} {headers.fileextensions}
- \li \l {HTML.footer-variable} {HTML.footer}
- \li \l {HTML.postheader-variable} {HTML.postheader}
- \li \l {HTML.style-variable} {HTML.style}
- \li \l {ignorewords-variable} {ignorewords}
- \li \l {ignoresince-variable} {ignoresince}
- \li \l {imagedirs-variable} {imagedirs}
- \li \l {images-variable} {images}
- \li \l {images.fileextensions-variable} {images.fileextensions}
- \li \l {indexes-variable} {indexes}
- \li \l {language-variable} {language}
- \li \l {locationinfo-variable} {locationinfo}
- \li \l {macro-variable} {macro}
- \li \l {manifestmeta-variable} {manifestmeta}
- \li \l {navigation-variable} {navigation}
- \li \l {outputdir-variable} {outputdir}
- \li \l {outputformats-variable} {outputformats}
- \li \l {outputprefixes-variable} {outputprefixes}
- \li \l {outputsuffixes-variable} {outputsuffixes}
- \li \l {project-variable} {project}
- \li \l {sourcedirs-variable} {sourcedirs}
- \li \l {sources-variable} {sources}
- \li \l {sources.fileextensions-variable} {sources.fileextensions}
- \li \l {spurious-variable} {spurious}
- \li \l {tabsize-variable} {tabsize}
- \li \l {url-variable} {url}
- \li \l {url.examples-variable} {url.examples}
- \li \l {version-variable} {version}
- \li \l {versionsym-variable} {versionsym}
- \li \l {warninglimit-variable} {warninglimit}
- \endlist
-
- \section1 Categories
-
- \list
- \li \l {Generic Configuration Variables}
- \li \l {C++ Specific Configuration Variables}
- \li \l {Format-specific Configuration Variables}
- \endlist
-
- \section1 Configuration File Examples
-
- \list
- \li A minimum configuration file: \l minimum.qdocconf
- \li The Qt configuration file: \l qtgui.qdocconf
- \endlist
-*/
-
-
-/*!
- \page 22-qdoc-configuration-generalvariables.html
- \previouspage The QDoc Configuration File
- \nextpage Creating Help Project Files
-
- \title Generic Configuration Variables
-
- With the general QDoc configuration variables, you can define
- where QDoc will find the various source files it needs to generate
- the documentation, as well as the directory to put the generated
- documentation. You can also do some minor manipulation of QDoc
- itself, controlling its output and processing behavior.
-
- \target alias-variable
- \section1 alias
-
- The \c alias variable renames a QDoc command.
-
- The general syntax is \tt {alias.\e{original-command-name} = \e
- temporary-command-name}.
-
- \badcode
- alias.e = i
- \endcode
-
- This renames the built-in command \\e (italics) to be \\i. The \c
- alias variable is often used for compatibility reasons.
-
- See also \l {macro-variable} {macro}.
-
- \target codeindent-variable
- \section1 codeindent
-
- The \c codeindent variable specifies the level of indentation that
- QDoc uses when writing code snippets.
-
- QDoc originally used a hard-coded value of four spaces for code
- indentation to ensure that code snippets could be easily
- distinguished from surrounding text. Since we can use \l{HTML
- Specific Configuration Variables#HTML.stylesheets} {stylesheets}
- to adjust the appearance of certain types of HTML elements, this
- level of indentation is not always required.
-
- \target codeprefix-variable
- \target codesuffix-variable
- \section1 codeprefix, codesuffix
-
- The \c codeprefix and \c codesuffix variables specify a pair of
- strings that each code snippet is enclosed in.
-
- \target defines-variable
- \section1 defines
-
- The \c defines variable specifies the C++ preprocessor symbols
- that QDoc will recognize and respond to.
-
- When a preprocessor symbol is specified using the \c defines
- variable, you can also use the \l {if-command} {\\if} command to
- enclose documentation that only will be included if the
- preprocessor symbol is defined.
-
- The values of the variable are regular expressions (see QRegularExpression
- for details). By default, no symbol is defined, meaning that code
- protected with #ifdef...#endif will be ignored.
-
- \badcode
- defines = Q_QDOC \
- QT_.*_SUPPORT \
- QT_.*_LIB \
- QT_COMPAT \
- QT3_SUPPORT \
- Q_OS_.* \
- Q_BYTE_ORDER \
- __cplusplus
- \endcode
-
- This ensures that QDoc will process the code that requires these
- symbols to be defined. For example:
-
- \code
- #ifdef Q_OS_WIN
- HDC getDC() const;
- void releaseDC(HDC) const;
- #endif
- \endcode
-
- Since the Q_OS_.* regular expression (specified using the \c
- defines variable) matches Q_OS_WIN, QDoc will process the code
- within #ifdef and #endif in our example.
-
- You can also define preprocessor symbols manually on the command
- line using the -D option. For example:
-
- \badcode
- currentdirectory$ qdoc -Dqtforpython qtgui.qdocconf
- \endcode
-
- In this case the -D option ensures that the \c qtforpython
- preprocessor symbol is defined when QDoc processes the source
- files defined in the qtgui.qdocconf file.
-
- See also \l {falsehoods-variable} {falsehoods} and \l {if-command} {\\if}.
-
- \target depends-variable
- \section1 depends
-
- The \c depends variable defines a list of other documentation projects
- that this project depends on for resolving link targets for type
- inheritance and anything else the documentation needs to link to.
-
- Like Qt itself, documentation for Qt is distributed across multiple
- modules. In a multi-module documentation project, the minimum set
- of dependencies for a single module consists of actual build
- dependencies. In addition, if there is a documentation project
- (module) that acts as a top-level entry point for the entire
- documentation set and provides \l {navigation-variable}[navigation}
- links, each module documentation should include it as a dependency.
-
- When QDoc generates documentation for a project, it will also generate
- an \c .index file containing URLs to each linkable entity in the project.
- Each dependency is a (lowercase) name of a project. This name must
- match with the base name of the index file generated for that
- project.
-
- \badcode
- depends = \
- qtdoc \
- qtcore \
- qtquick
- \endcode
-
- When invoking QDoc on a project that has dependencies and uses the
- \c depends variable, one or more \c -indexdir path(s) must be passed
- as command line option(s). QDoc uses these paths to search for
- the dependencies' index files.
-
- \badcode
- qdoc mydoc.qdocconf -outputdir $PWD/html -indexdir $QT_INSTALL_DOCS
- \endcode
-
- With above, QDoc will search for a file
- \c {$T_INSTALL_DOCS/qtdoc/qtdoc.index} for a dependency to \c qtdoc.
- If an index file for a dependency is not found, QDoc will output a
- warning.
-
- The \c depends command accepts also a special value of '*'. This
- instructs QDoc to load all index files found in specified index
- directories; that is, "depends on everything".
-
- \badcode
- depends = *
- \endcode
-
- See also \l indexes, \l project, and \l url.
-
- \target exampledirs-variable
- \section1 exampledirs
-
- The \c exampledirs variable specifies the directories containing
- the source code of the example files.
-
- The \l {examples-variable} {examples} and \l
- {exampledirs-variable} {exampledirs} variables are used by the \l
- {quotefromfile-command} {\\quotefromfile}, \l {quotefile-command}
- {\\quotefile} and \l {example-command} {\\example} commands. If
- both the \l {examples-variable} {examples} and \l
- {exampledirs-variable} {exampledirs} variables are defined, QDoc
- will search in both, first in \l {examples-variable} {examples}
- then in \l {exampledirs-variable} {exampledirs}.
-
- QDoc will search through the directories in the specified order,
- and accept the first matching file it finds. It will only search
- in the specified directories, \e not in subdirectories.
-
- \badcode
- exampledirs = $QTDIR/doc/src \
- $QTDIR/examples \
- $QTDIR \
- $QTDIR/qmake/examples
-
- examples = $QTDIR/examples/widgets/analogclock/analogclock.cpp
- \endcode
-
- When processing
-
- \badcode
- \quotefromfile widgets/calculator/calculator.cpp
- \endcode
-
- QDoc will see if there is a file called \c calculator.cpp
- listed as a value in the \l {examples-variable} {\c examples} variable. If
- there isn't, it will search in the \c exampledirs variable, and
- first see if there exists a file called
-
- \badcode
- $QTDIR/doc/src/widgets/calculator/calculator.cpp
- \endcode
-
- If it doesn't, QDoc will continue looking for a file called
-
- \badcode
- $QTDIR/examples/widgets/calculator/calculator.cpp
- \endcode
-
- and so forth.
-
- See also \l {examples-variable}{examples}.
-
- \target examples-variable
- \section1 examples
-
- The \c examples variable allows you to specify individual example
- files in addition to those located in the directories specified by
- the \l {exampledirs-variable} {\c exampledirs} variable.
-
- The \c examples and \l {exampledirs-variable} {\c exampledirs}
- variables are used by the \l {quotefromfile-command}
- {\\quotefromfile}, \l {quotefile-command} {\\quotefile} and \l
- {example-command} {\\example} commands. If both the \c examples and \l
- {exampledirs-variable} {\c exampledirs} variables are defined,
- QDoc will search in both, first in \c examples then in \l
- {exampledirs-variable} {\c exampledirs}.
-
- QDoc will search through the values listed for the \c examples
- variable, in the specified order, and accept the first one it
- finds.
-
- For an extensive example, see the \l {exampledirs-variable} {\c
- exampledirs} command. But note that if you know the file is listed
- in the \c examples variable, you don't need to specify its path:
-
- \badcode
- \quotefromfile calculator.cpp
- \endcode
-
- See also \l {exampledirs-variable} {exampledirs}.
-
- \target examples.fileextensions-variable
- \section1 examples.fileextensions
-
- The \c examples.fileextensions variable specifies the file
- extensions that QDoc will look for when collecting example files
- for display in the documentation.
-
- The default extensions are *.cpp, *.h, *.js, *.xq, *.svg, *.xml
- and *.ui.
-
- The extensions are given as standard wildcard expressions. You
- can add a file extension to the filter using '+='. For example:
-
- \badcode
- examples.fileextensions += *.qrc
- \endcode
-
- See also \l{headers.fileextensions}.
-
- \target excludedirs-variable
- \section1 excludedirs
-
- The \c excludedirs variable is for listing directories that should \e{not}
- be processed by QDoc, even if the same directories are included by the
- \l {sourcedirs-variable} {sourcedirs} or \l {headerdirs-variable} {headerdirs}
- variables.
-
- For example:
-
- \badcode
- sourcedirs = src/corelib
- excludedirs = src/corelib/tmp
- \endcode
-
- When executed, QDoc will exclude the listed directories from
- further consideration. Files in these directories will not be
- read by QDoc.
-
- See also \l {excludefiles-variable} {excludefiles}.
-
- \target excludefiles-variable
- \section1 excludefiles
-
- The \c excludefiles variable allows you to specify individual files
- that should \e{not} be processed by QDoc.
-
- \badcode
- excludefiles += $QT_CORE_SOURCES/../../src/widgets/kernel/qwidget.h \
- $QT_CORE_SOURCES/../../src/widgets/kernel/qwidget.cpp
- \endcode
-
- If you include the above in your qdocconf file for qtbase, there
- will be no class documentation generated for QWidget.
-
- Since Qt 5.6, also simple wildcards ('*' and '?') are recognized by
- \c excludefiles. For example, to exclude all private Qt header files
- from being parsed, define the following:
-
- \badcode
- excludefiles += "*_p.h"
- \endcode
-
- See also \l {excludedirs-variable} {excludedirs}.
-
- \target extraimages-variable
- \section1 extraimages
-
- The \c extraimages variable tells QDoc to incorporate specific
- images in the generated documentation.
-
- QDoc will not recognize images used within HTML (or any other
- markup language). If we want the images to be copied from the
- directories specified by \l {imagedirs} {\c imagedirs} (the images
- in question must be located in these directories) to the output
- directory, we must specify the images using the \c extraimages
- variable.
-
- The general syntax is \tt {extraimages.\e{format} = \e image}. The
- file extension is optional.
-
- For example, in \l qtgui.qdocconf we use a couple of images within
- the HTML.postheader variable which value is pure HTML. For that
- reason, these images are specified using the \c extraimages
- variable:
-
- \badcode
- extraimages.HTML = qt-logo
- \endcode
-
- See also \l images and \l imagedirs.
-
- \target falsehoods-variable
- \section1 falsehoods
-
- The \c falsehoods variable defines the truth value of specified
- preprocessor symbols as false.
-
- The values of the variable are regular expressions (see QRegularExpression
- for details). If this variable is not set for a preprocessor
- symbol, QDoc assumes its truth value is true. The exception is
- '0', which is always false.
-
- QDoc will recognize, and is able to evaluate, the following
- preprocessor syntax:
-
- \code
- #ifdef NOTYET
- ...
- #endif
-
- #if defined (NOTYET)
- ...
- #end if
- \endcode
-
- However, faced with unknown syntax like
-
- \code
- #if NOTYET
- ...
- #endif
- \endcode
-
- QDoc will evaluate it as true by default, \e unless the
- preprocessor symbol is specified within the \c falsehoods variable
- entry:
-
- \badcode
- falsehoods = NOTYET
- \endcode
-
- See also \l defines.
-
- \target generateindex-variable
- \section1 generateindex
-
- The \c generateindex variable contains a boolean value that
- specifies whether to generate an index file when HTML
- documentation is generated.
-
- By default, an index file is always generated with HTML
- documentation, so this variable is typically only used when
- disabling this feature (by setting the value to \c false) or when
- enabling index generation for the WebXML output (by setting the
- value to \c true).
-
- \target headerdirs-variable
- \section1 headerdirs
-
- The \c headerdirs variable specifies the directories containing
- the header files associated with the \c .cpp source files used in
- the documentation.
-
- \badcode
- headerdirs = $QTDIR/src \
- $QTDIR/extensions/activeqt \
- $QTDIR/extensions/motif \
- $QTDIR/tools/designer/src/lib/extension \
- $QTDIR/tools/designer/src/lib/sdk \
- $QTDIR/tools/designer/src/lib/uilib
- \endcode
-
- When executed, the first thing QDoc will do is to read through the
- headers specified in the \l {headers} {\c headers} variable, and
- the ones located in the directories specified in the \c headerdir
- variable (including all subdirectories), building an internal
- structure of the classes and their functions.
-
- Then it will read through the sources specified in the \l
- {sources-variable} {\c sources}, and the ones located in the
- directories specified in the \l {sourcedirs-variable} {\c
- sourcedirs} varible (including all subdirectories), merging the
- documentation with the structure it retrieved from the header
- files.
-
- If both the \c headers and \c headerdirs variables are defined,
- QDoc will read through both, first \l {headers} {\c headers} then
- \c headerdirs.
-
- In the specified directories, QDoc will only read the files with
- the \c fileextensions specified in the \l {headers.fileextensions}
- {\c headers.fileextensions} variable. The default extensions are
- *.ch, *.h, *.h++, *.hh, *.hpp, and *.hxx". The files specified by
- \l {headers} {\c headers} will be read without taking into account
- their fileextensions.
-
- See also \l headers and \l headers.fileextensions.
-
- \target headers-variable
- \section1 headers
-
- The \c headers variable allows you to specify individual header
- files in addition to those located in the directories specified by
- the \l {headerdirs} {\c headerdirs} variable.
-
- \badcode
- headers = $QTDIR/src/gui/widgets/qlineedit.h \
- $QTDIR/src/gui/widgets/qpushbutton.h
- \endcode
-
- When processing the \c headers variable, QDoc behaves in the same
- way as it does when processing the \l {headerdirs} {\c headerdirs}
- variable. For more information, see the \l {headerdirs} {\c
- headerdirs} variable.
-
- See also \l headerdirs.
-
- \target headers.fileextensions-variable
- \section1 headers.fileextensions
-
- The \c headers.fileextensions variable specify the extension used
- by the headers.
-
- When processing the header files specified in the \l {headerdirs}
- {\c headerdirs} variable, QDoc will only read the files with the
- fileextensions specified in the \c headers.fileextensions
- variable. In this way QDoc avoids spending time reading irrelevant
- files.
-
- The default extensions are *.ch, *.h, *.h++, *.hh, *.hpp, and
- *.hxx.
-
- The extensions are given as standard wildcard expressions. You
- can add a file extension to the filter using '+='. For example:
-
- \badcode
- header.fileextensions += *.H
- \endcode
-
- \warning The above assignment may not work as described.
-
- See also \l headerdirs.
-
- \target ignorewords-variable
- \section1 ignorewords
-
- The \c ignorewords variable is used for specifying a list of strings
- that QDoc will ignore when resolving hyperlink targets.
-
- QDoc has an auto-linking feature, where linking is attempted for words
- that resemble C++, QML, or JavaScript entities. Specifically, a string
- qualifies for auto-linking if it is at least three characters in
- length, has no whitespace, and it
-
- \list
- \li is a \e camelCase word, that is, it contains at least one
- uppercase character at index greater than zero, or
- \li contains the substring \c {()} or \c {::}, or
- \li contains at least one special character, \c {@} or \c {_}.
- \endlist
-
- Adding a qualified word to \c ignorewords stops QDoc from linking
- that word automatically. For example, if the word \e OpenGL is a
- valid link target (a section, \l{page-command}{\\page}, or
- \l {externalpage-command}{\\externalpage} title), a hyperlink for
- each occurrence can be avoided with
-
- \badcode
- ignorewords += OpenGL
- \endcode
-
- Linking explicitly with \l {l-command}{\\l} continues to work for
- ignored words.
-
- The \c ignorewords variable was introduced in QDoc 5.14.
-
- \target ignoresince-variable
- \section1 ignoresince
-
- The \c ignoresince variable is used for setting a cutoff value for
- versions passed to the \l {since-command}{\\since} command. All
- \\since commands that define a version lower than the cutoff are
- ignored and do not generate output.
-
- The cutoff values are project-specific. The project name can be
- defined as a subvariable. The default project name is \e Qt. For
- example:
-
- \badcode
- ignoresince = 5.0
- ignoresince.QDoc = 5.0
- \endcode
-
- These will ignore \\since commands where the major version is 4
- or lower and the project is either \c QDoc or undefined.
-
- \badcode
- \since 3.2 # Ignored
- \since 5.2 # Documented (as 'Qt 5.2')
- \since QDoc 4.6 # Ignored
- \since QtQuick 2.5 # Documented
- \endcode
-
- The \c ignoresince variable was introduced in QDoc 5.15.
-
- See also \l {since-command}{\\since}.
-
- \target imagedirs-variable
- \section1 imagedirs
-
- The \c imagedirs variable specifies the directories containing the
- images used in the documentation.
-
- The \l {images} {\c images} and \c imagedirs variables are used by
- the \l {image-command} {\\image} and \l {inlineimage-command}
- {\\inlineimage} commands. If both the \l {images} {\c images} and
- \c imagedirs variables are defined, QDoc will search in both. First
- in \l {images} {\c images}, then in \c imagedirs.
-
- QDoc will search through the directories in the specified order,
- and accept the first matching file it finds. It will only search
- in the specified directories, \e not in subdirectories.
-
- \badcode
- imagedirs = $QTDIR/doc/src/images \
- $QTDIR/examples
-
- images = $QTDIR/doc/src/images/calculator-example.png
- \endcode
-
- When processing
-
- \badcode
- \image calculator-example.png
- \endcode
-
- QDoc will then see if there is a file called
- calculator-example.png listed as a value in the \c images
- variable. If there isn't, it will search in the \c imagedirs
- variable for:
-
- \badcode
- $QTDIR/doc/src/images/calculator-example.png
- \endcode
-
- If the file doesn't exist, QDoc will look for a file called
-
- \badcode
- $QTDIR/examples/calculator-example.png
- \endcode
-
- You can filter the images in an image directory using the \l
- {images.fileextensions} {\c images.fileextensions} variable. The
- general idea behind the \l {images.fileextensions} {\c images.fileextensions}
- variable is to enable different image format for different output format.
-
- \warning The \l {images.fileextensions} {\c images.fileextensions}
- variable's functionality is preliminary since QDoc at this point
- only supports HTML.
-
- See also \l images and \l images.fileextensions.
-
- \target images-variable
- \section1 images
-
- The \c images variable allows you to specify individual image
- files in addition to those located in the directories specified by
- the \l {imagedirs} {\c imagedirs} variable.
-
- \badcode
- images = $QTDIR/doc/src/images/calculator-example.png
- \endcode
-
- When processing the \c images variable, QDoc behaves in the same
- way as it does when processing the \l {imagedirs} {\c imagedirs}
- variable. For more information, see the \l {imagedirs} {\c
- imagedirs} variable.
-
- See also \l imagedirs and \l images.fileextensions.
-
- \target images.fileextensions-variable
- \section1 images.fileextensions
-
- The images.fileextensions variable filters the files within an
- image directory.
-
- The variable's values (the extensions) are given as standard
- wildcard expressions. The general syntax is: \tt
- {images.fileextensions.\e{format} = *.\e{extension}}.
-
- The idea is to enable different image format for different output
- format.
-
- \badcode
- images.fileextensions.HTML = *.png
- images.fileextensions.LOUT = *.eps
- \endcode
-
- Then, when processing the \l {image-command} {\\image} and \l
- {inlineimage-command} {\\inlineimage} commands, QDoc will only
- search for files with extensions specified in the variable
- containing the list of output formats.
-
- \warning This is only a preliminary functionality since QDoc at this
- point only supports HTML.
-
- The default extensions for HTML are *.png, *.jpg, *.jpeg, and
- *.gif.
-
- You can add a file extension to the filter using '+='. For
- example:
-
- \badcode
- images.fileextensions.HTML += *.eps
- \endcode
-
- See also \l imagedirs and \l images.
-
- \target language-variable
- \section1 language
-
- The \c language variable specifies the language of the source code
- that is used in the documentation.
-
- Currently, C++ is the only language that QDoc understands. It is
- also the default language, and doesn't really need to be
- specified. However, a possible example of a language variable
- statement:
-
- \badcode
- language = Cpp
- \endcode
-
- This identifies C++ as the language of the Qt source code.
-
- \target locationinfo-variable
- \section1 locationinfo
-
- The \c locationinfo boolean variable determines whether detailed
- location information about each entity is written to
- \c {.index}-files and \c {.webxml}-files (when using the WebXML
- output format).
-
- Location information consists of the full path and line
- number of either the declaration or documentation comment block
- in the source code.
-
- Setting this to \c false turns off location info:
-
- \badcode
- locationinfo = false
- \endcode
-
- The default value is \c true.
-
- The \c locationinfo variable was introduced in QDoc 5.15.
-
- \target macro-variable
- \section1 macro
-
- The \c macro variable is used to create your own simple QDoc
- commands. The syntax is \tt {macro.\e{command} = \e{definition}},
- where the definition is written using QDoc syntax.
-
- A macro variable can be restricted for use in one type of output
- generation. By appending \c {.HTML} to the macro name, for
- example, the macro is only used when generating HTML output.
-
- \badcode
- macro.gui = "\\b"
- macro.raisedaster.HTML = "<sup>*</sup>"
- \endcode
-
- The first macro defines the \\gui command to render its argument
- using a bold font. The second macro defines the \\raisedaster
- command to render a superscript asterisk, but only when generating
- HTML.
-
- A macro can also take up to seven parameters:
-
- \badcode
- macro.hello = "Hello \1!"
- \endcode
-
- Parameters are passed to macros the same way as to other commands:
-
- \badcode
- \hello World
- \endcode
-
- When using more than one parameter, or when an argument
- contains whitespace, enclose each argument in braces:
-
- \badcode
- macro.verinfo = "\1 (version \2)"
- \endcode
-
- \badcode
- \verinfo {QFooBar} {1.0 beta}
- \endcode
-
- A special macro option, \e match, can be added for additional
- regular expression pattern matching for expanded macros.
-
- For example,
-
- \badcode
- macro.qtminorversion = "$QT_VER"
- macro.qtminorversion.match = "\\d+\\.(\\d+)"
- \endcode
-
- This creates a macro \\qtminorversion that expands to the minor
- version based on the QT_VER environment variable.
-
- A macro that defines a match pattern outputs all capture groups
- (parentheses) concatenated together, or the exact matched string
- if the pattern does not contain any capture groups.
-
- See also \l {alias-variable} {alias}.
-
- \target manifestmeta-variable
- \section1 manifestmeta
-
- The \c manifestmeta variable specifies additional meta-content
- for the example manifest files generated by QDoc.
-
- See the \l{Manifest Meta Content} section for more information.
-
- \target naturallanguage-variable
- \section1 naturallanguage
-
- The \c naturallanguage variable specifies the natural language
- used for the documentation generated by QDoc.
-
- \badcode
- naturallanguage = zh-Hans
- \endcode
-
- By default, the natural language is \c en for compatibility with
- legacy documentation.
-
- QDoc will add the natural language information to the HTML it
- generates, using the \c lang and \c xml:lang attributes.
-
- See also \l {sourceencoding-variable} {sourceencoding},
- \l {outputencoding-variable} {outputencoding},
- \l{http://www.w3.org/TR/xhtml1/#C_7}
- {C.7. The lang and xml:lang Attributes} and
- \l{http://www.w3.org/TR/i18n-html-tech-lang/#ri20040429.113217290}
- {Best Practice 13: Using Hans and Hant codes}.
-
- \target navigation-variable
- \section1 navigation
-
- The \c navigation sub-variables, if defined, set the home page, landing
- page, C++ classes page, and QML types page that are visible in the
- generated navigation bar for each page.
-
- In a project with multiple sub-projects (for example, Qt modules), each
- sub-project typically defines its own landing page while the same home
- page is used across all sub-projects.
-
- \b Sub-variables
-
- \table
- \row \li \c navigation.homepage
- \li Project home page.
- \row \li \c navigation.hometitle
- \li (Optional) User-visible title for the home page.
- Default value is taken from \c homepage.
- \row \li \c navigation.landingpage
- \li Sub-project landing page.
- \row \li \c navigation.landingtitle
- \li (Optional) User-visible title for the landing page.
- Defaults value is taken from \c landingpage.
- \row \li \c navigation.cppclassespage
- \li Top-level page that lists all C++ classes for this (sub-)project.
- Typically, the title of a \l {module-command}{\\module} page.
- \row \li \c navigation.cppclassestitle
- \li (Optional) User-visible title for the C++ classes page.
- Default is "C++ Classes".
- \row \li \c navigation.qmltypespage
- \li Top-level page that lists all QML types for this (sub-)project.
- Typically, the title of a \l {qmlmodule-command}{\\qmlmodule} page.
- \row \li \c navigation.qmltypestitle
- \li (Optional) User-visible title for the QML types page.
- Default is "QML Types".
- \row \li \c navigation.toctitles (Since QDoc 6.0)
- \li Page title(s) containing a \l {list-command}{\\list} structure that
- acts as a table of contents (TOC). QDoc generates navigation links
- for pages listed in the TOC, without the need for
- \l {nextpage-command}{\\nextpage} and \l {previouspage-command}
- {\\previouspage} commands.
- \endtable
-
- For example:
-
- \badcode
- # Common configuration
- navigation.homepage = index.html
- navigation.hometitle = "Qt $QT_VER"
-
- # qtquick.qdocconf
- navigation.landingpage = "Qt Quick"
- navigation.cppclassespage = "Qt Quick C++ Classes"
- navigation.qmltypespage = "Qt Quick QML Types"
- \endcode
-
- The above configuration produces the following navigation bar for \c Item QML type:
-
- \badcode
- Qt 5.10 > Qt Quick > QML Types > Item QML Type
- \endcode
-
- \target outputdir-variable
- \section1 outputdir
-
- The \c outputdir variable specifies the directory where QDoc will
- put the generated documentation.
-
- \badcode
- outputdir = $QTDIR/doc/html
- \endcode
-
- locates the generated Qt reference documentation in
- $QTDIR/doc/html. For example, the documentation of the QWidget
- class is located in
-
- \badcode
- $QTDIR/doc/html/qwidget.html
- \endcode
-
- The associated images will be put in an \c images subdirectory.
-
- \warning When running QDoc multiple times using the same output
- directory, all files from the previous run will be lost.
-
- \target outputencoding-variable
- \section1 outputencoding
-
- The \c outputencoding variable specifies the encoding used for the
- documentation generated by QDoc.
-
- \badcode
- outputencoding = UTF-8
- \endcode
-
- By default, the output encoding is \c ISO-8859-1 (Latin1) for
- compatibility with legacy documentation. When generating
- documentation for some languages, particularly non-European
- languages, this is not sufficient and an encoding such as UTF-8 is
- required.
-
- QDoc will encode HTML using this encoding and generate the correct
- declarations to indicate to browsers which encoding is being
- used. The \l naturallanguage configuration variable should also be
- specified to provide browsers with a complete set of character
- encoding and language information.
-
- See also \l outputencoding and \l naturallanguage.
-
- \target outputformats-variable
- \section1 outputformats
-
- The \c outputformats variable specifies the format(s) of
- the generated documentation.
-
- Since Qt 5.11, QDoc supports the HTML and WebXML formats; since
- Qt 5.15, it can also generate the documentation in DocBook. If no
- \c outputformats are specified, QDoc generates the documentation
- in HTML (the default format). All output formats can be specified,
- with dedicated output directories and other settings. For example:
-
- \badcode
- outputformats = WebXML HTML
- WebXML.nosubdirs = true
- WebXML.outputsubdir = webxml
- WebXML.quotinginformation = true
- \endcode
-
- This generates HTML documentation using the default settings, as well
- as WebXML documentation into output subdirectory \e webxml.
-
- \target outputprefixes-variable
- \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
- documentation.
-
- \badcode
- outputprefixes = QML JS
- outputprefixes.QML = uicomponents-
- outputprefixes.JS = uicomponents-
- \endcode
-
- By default, files containing the API documentation for QML types
- are prefixed with "qml-", and javaScript types with "js-". In the
- above example, the prefix \c "uicomponents" is used instead for
- both.
-
- The output prefix is applied to file names for documentation on
- QML and JS types.
-
- \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.
-
- \badcode
- outputsuffixes = QML
- outputsuffixes.QML = -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
- \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 JS types, and their respective
- module pages.
-
- The \c outputsuffixes variable was introduced in QDoc 5.6.
-
- \target qhp-variable
- \section1 qhp
-
- The \c qhp variable is used to define the information to be
- written out to Qt Help Project (\c{qhp}) files.
-
- See the \l{Creating Help Project Files} chapter for information
- about this process.
-
- \target sourcedirs-variable
- \section1 sourcedirs
-
- The \c sourcedirs variable specifies the directories containing
- the \c .cpp or \c .qdoc files used in the documentation.
-
- \badcode
- sourcedirs += .. \
- ../../../examples/gui/doc/src
- \endcode
-
- When executed, the first thing QDoc will do is to read through the
- headers specified in the \l {header-command} {\c header} variable,
- and the ones located in the directories specified in the \c
- headerdir variable (including all subdirectories), building an
- internal structure of the classes and their functions.
-
- Then it will read through the sources specified in the \l
- {sources} {\c sources}, and the ones located in the directories
- specified in the \l {sourcedirs} {\c sourcedirs} variable
- (including all subdirectories), merging the documentation with the
- structure it retrieved from the header files.
-
- If both the \c sources and \c sourcedirs variables are defined,
- QDoc will read through both, first \l {sources} {\c sources} then
- \c sourcedirs.
-
- In the specified directories, QDoc will only read the files with
- the \c fileextensions specified in the \l {sources.fileextensions}
- {\c sources.fileextensions} variable. The default extensions are
- *.c++, *.cc, *.cpp and *.cxx. The files specified by \l {sources}
- {\c sources} will be read independent of their fileextensions.
-
- See also \l {sources-variable} {sources} and
- \l {sources.fileextensions-variable} {sources.fileextensions}.
-
- \target sourceencoding-variable
- \section1 sourceencoding
-
- The \c sourceencoding variable specifies the encoding used for the
- source code and documentation.
-
- \badcode
- sourceencoding = UTF-8
- \endcode
-
- By default, the source encoding is \c ISO-8859-1 (Latin1) for
- compatibility with legacy documentation. For some languages,
- particularly non-European languages, this is not sufficient and an
- encoding such as UTF-8 is required.
-
- Although QDoc will use the encoding to read source and
- documentation files, limitations of C++ compilers may prevent you
- from using non-ASCII characters in source code comments. In cases
- like these, it is possible to write API documentation completely
- in documentation files.
-
- See also \l {naturallanguage-variable} {naturallanguage} and
- \l {outputencoding-variable} {outputencoding}.
-
- \target sources-variable
- \section1 sources
-
- The \c sources variable allows you to specify individual source
- files in addition to those located in the directories specified by
- the \l {sourcedirs-variable} {sourcedirs} variable.
-
- \badcode
- sources = $QTDIR/src/gui/widgets/qlineedit.cpp \
- $QTDIR/src/gui/widgets/qpushbutton.cpp
- \endcode
-
- When processing the \c sources variable, QDoc behaves in the same
- way as it does when processing the \l {sourcedirs-variable}
- {sourcedirs} variable. For more information, see the \l
- {sourcedirs-variable} {sourcedirs} variable.
-
- See also \l {sourcedirs-variable} {sourcedirs}.
-
- \target sources.fileextensions-variable
- \section1 sources.fileextensions
-
- The \c sources.fileextensions variable filters the files within a
- source directory.
-
- When processing the source files specified in the \l {sourcedirs}
- {\c sourcedirs} variable, QDoc will only read the files with the
- fileextensions specified in the \c sources.fileextensions
- variable. In this way QDoc avoid spending time reading irrelevant
- files.
-
- The default extensions are *.c++, *.cc, *.cpp and *.cxx.
-
- The extensions are given as standard wildcard expressions. You
- can add a file extension to the filter using '+='. For example:
-
- \badcode
- sources.fileextensions += *.CC
- \endcode
-
- \warning The above assignment may not work as described.
-
- See also \l {sourcedirs-variable} {sourcedirs} and \l
- (sources-variable} {sources}.
-
-
- \target spurious-variable
- \section1 spurious
-
- The \c spurious variable excludes specified QDoc warnings from the
- output. The warnings are specified using standard wildcard
- expressions.
-
- \badcode
- spurious = "Cannot find .*" \
- "Missing .*"
- \endcode
-
- makes sure that warnings matching either of these expressions,
- will not be part of the output when running QDoc. For example
- would the following warning be omitted from the output:
-
- \badcode
- src/opengl/qgl_mac.cpp:156: Missing parameter name
- \endcode
-
- \target syntaxhighlighting
- \section1 syntaxhighlighting
-
- The \c syntaxhighlighting variable specifies whether QDoc should
- perform syntax highlighting on source code quoted in the
- documentation it generates.
-
- \badcode
- syntaxhighlighting = true
- \endcode
-
- will enable syntax highlighting for all supported programming
- languages.
-
- \target tabsize-variable
- \section1 tabsize
-
- The \c tabsize variable defines the size of a tab character.
-
- \badcode
- tabsize = 4
- \endcode
-
- will give the tab character the size of 4 spaces. The default
- value of the variable is 8, and doesn't need to be specified.
-
- \target tagfile-variable
- \section1 tagfile
-
- The \c tagfile variable specifies the Doxygen tag file to be
- written when HTML is generated.
-
- \target version-variable
- \section1 version
-
- The \c version variable specifies the version number of the
- documented software.
-
- \badcode
- version = 5.6.0
- \endcode
-
- When a version number is specified (using the \tt{\l version} or
- \tt {\l versionsym} variables in a \c .qdocconf file), it is
- accessible through the corresponding \\version command for use in
- the documentation.
-
- \warning The \\version command's functionality is not fully
- implemented; currently it only works within raw HTML code.
-
- See also \l versionsym.
-
- \target versionsym-variable
- \section1 versionsym
-
- The \c versionsym variable specifies a C++ preprocessor symbol
- that defines the version number of the documented software.
-
- \badcode
- versionsym = QT_VERSION_STR
- \endcode
-
- QT_VERSION_STR is defined in qglobal.h as follows
-
- \badcode
- #define QT_VERSION_STR "5.14.1"
- \endcode
-
- When a version number is specified (using the \tt{\l version} or
- \tt {\l versionsym} variables in a \c .qdocconf file), it is
- accessible through the corresponding \\version command for use in
- the documentation.
-
- \warning The \\version command's functionality is not fully
- implemented. Currently, it only works within raw HTML code.
-
- See also \l {version} {\\version}.
-
- \target warninglimit-variable
- \section1 warninglimit
-
- The \c warninglimit variable sets the maximum number of documentation
- warnings allowed. If this limit is exceeded, QDoc continues as normal
- but exits with the warning count as the error code. If the limit was
- not exceeded or \c warninglimit was not defined, QDoc process exits
- with 0, assuming there were no other critical errors.
-
- Setting the \c warninglimit to \c 0 means failure on any warning.
-
- \note By default, QDoc does not enforce the warning limit. Enable it
- with \c {warninglimit.enabled = true} or by defining
- the \c QDOC_ENABLE_WARNINGLIMIT environment variable.
-
- For example,
-
- \badcode
- # Fail the documentation build if we have more than 100 warnings
- warninglimit = 100
- warninglimit.enabled = true
- \endcode
-
- The \c warninglimit variable was introduced in Qt 5.11.
-*/
-
-/*!
- \page 22-creating-help-project-files.html
- \previouspage Generic Configuration Variables
- \nextpage C++ Specific Configuration Variables
-
- \title Creating Help Project Files
-
- \section1 Overview
-
- Qt Assistant uses a system for managing Qt documentation that requires
- QDoc to generate inventories of files.
-
- QDoc allows configuration variables to be used to specify which pages are
- to be used in each documentation set it generates. These are specified as
- subvariables of the \c qhp variable with each set declared using a unique
- identifier as a subvariable.
-
- For example, the configuration file for the Qt Quick documentation set
- specifies information about the set as subvariables with the
- \c{qhp.QtQuick} prefix:
-
- \badcode
- qhp.projects = QtQuick
-
- qhp.QtQuick.file = qtquick.qhp
- qhp.QtQuick.namespace = org.qt-project.qtquick.$QT_VERSION_TAG
- qhp.QtQuick.virtualFolder = qtquick
- qhp.QtQuick.indexTitle = Qt Quick
- qhp.QtQuick.indexRoot =
-
- qhp.QtQuick.filterAttributes = qtquick $QT_VERSION qtrefdoc
- qhp.QtQuick.customFilters.Qt.name = QtQuick $QT_VERSION
- qhp.QtQuick.customFilters.Qt.filterAttributes = qtquick $QT_VERSION
-
- qhp.QtQuick.subprojects = qmltypes classes examples
-
- qhp.QtQuick.subprojects.qmltypes.title = QML Types
- qhp.QtQuick.subprojects.qmltypes.indexTitle = Qt Quick QML Types
- qhp.QtQuick.subprojects.qmltypes.selectors = qmlclass
- qhp.QtQuick.subprojects.qmltypes.sortPages = true
-
- qhp.QtQuick.subprojects.classes.title = Classes
- qhp.QtQuick.subprojects.classes.title = C++ Classes
- qhp.QtQuick.subprojects.classes.indexTitle = Qt Quick C++ Classes
- qhp.QtQuick.subprojects.classes.selectors = class fake:headerfile
- qhp.QtQuick.subprojects.classes.sortPages = true
-
- qhp.QtQuick.subprojects.examples.title = Examples
- qhp.QtQuick.subprojects.examples.indexTitle = Qt Quick Examples and Tutorials
- qhp.QtQuick.subprojects.examples.selectors = fake:example
- \endcode
-
- The documentation set may include one or more subprojects, which are added
- to the table of contents under the name specified by \c title. The page
- in the documentation referred to by the \c indexTitle acts as the index page
- for the subproject. The page types to list under the subproject are specified
- by \c selectors. The entries are alphabetically sorted if \c sortPages is set
- to \c true.
-
- \section2 Using Selectors
-
- The \c selectors property specifies which page types are listed under the
- table of contents entry for a subproject. Multiple selectors can be listed,
- separated by whitespace.
-
- \table
- \header \li Selector \li Description
- \row \li \c namespace \li Namespaces
- \row \li \c class \li Classes
- \row \li \c qmltype \li QML Types
- \row \li \c qmlclass \li Alias for \c qmltype.
- \row \li \c module[:name] \li C++ modules or members of the module
- with a specified name.
- \row \li \c qmlmodule[:name] \li QML modules or members of the module
- with a specified name.
- \row \li \c doc[:subtype] \li Documentation pages with a specified
- \c subtype. Multiple subtypes can be
- listed as a comma-separated list.
- \row \li \c fake \li Alias for \c doc.
- \row \li \c group[:groupname] \li Documentation pages for members of a
- specified group, as added using the
- \l {ingroup-command}
- {\\ingroup} groupname command.
- Multiple group names can be listed as
- a comma-separated list.
- (Introduced in QDoc 5.6).
- \endtable
-
- Available subtypes for the \c doc selector:
-
- \table
- \header \li Subtype \li Description
- \row \li \c example \li Examples
- \row \li \c headerfile \li Header files
- \row \li \c page \li Documentation pages defined with the
- \l {page-command} {\\page} command.
- \endtable
-
- For example, the following configuration would select example pages and
- pages that include the \c {\ingroup tutorials} command:
-
- \badcode
- qhp.QtQuickControls.subprojects = examples
- qhp.QtQuickControls.subprojects.examples.title = Examples and Tutorials
- qhp.QtQuickControls.subprojects.examples.indexTitle = Qt Quick Controls Examples
- qhp.QtQuickControls.subprojects.examples.selectors = doc:example group:tutorials
- qhp.QtQuickControls.subprojects.examples.sortPages = true
- \endcode
-
- \section2 Adding Table of Contents
-
- To create a table of contents for a manual, create a subproject with
- a \c{type} property and set it to \c{manual}. The page in the documentation
- referred to by the \c{indexTitle} property must contain a list of links
- that acts as a table of contents for the whole manual. QDoc will take the
- information in this list and create a table of contents for the subproject.
-
- For example, the configuration file for Qt Creator defines only one
- subproject for its documentation, including all the documentation in a
- single manual:
-
- \badcode
- qhp.QtCreator.subprojects = manual
- qhp.QtCreator.subprojects.manual.title = Qt Creator Manual
- qhp.QtCreator.subprojects.manual.indexTitle = Qt Creator Manual
- qhp.QtCreator.subprojects.manual.type = manual
- \endcode
-
- In this example, the page entitled "Qt Creator Manual" contains a nested
- list of links to pages in the documentation which is duplicated in
- Qt Assistant's Contents tab.
-*/
-
-/*!
- \page 23-qdoc-configuration-cppvariables.html
- \previouspage Creating Help Project Files
- \nextpage Format-specific Configuration Variables
-
- \title C++ Specific Configuration Variables
-
- The C++ specific configuration variables are provided to avoid
- erroneous documentation due to non-standard C++ constructs.
-
- \target Cpp.ignoredirectives-variable
- \section1 Cpp.ignoredirectives
- The \c Cpp.ignoredirectives variable makes QDoc ignore the
- specified non-standard constructs, within C++ source code.
-
- If not specified by the \tt {\l Cpp.ignoretokens} or \tt {\l
- Cpp.ignoredirectives} variables, non-standard constructs
- (typically macros) can result in erroneous documentation.
-
- \badcode
- Cpp.ignoredirectives = Q_DECLARE_INTERFACE \
- Q_DECLARE_OPERATORS_FOR_FLAGS \
- Q_DECLARE_PRIVATE \
- Q_DECLARE_PUBLIC \
- Q_DISABLE_COPY \
- Q_DUMMY_COMPARISON_OPERATOR \
- Q_ENUMS \
- Q_FLAGS \
- Q_INTERFACES \
- __attribute__
- \endcode
-
- makes sure that when processing the code below, for example, QDoc
- will simply ignore the 'Q_ENUMS' and 'Q_FLAGS' expressions:
-
- \code
- class Q_CORE_EXPORT Qt {
- Q_OBJECT
- Q_ENUMS(Orientation TextFormat BackgroundMode
- DateFormat ScrollBarPolicy FocusPolicy
- ContextMenuPolicy CaseSensitivity
- LayoutDirection ArrowType)
- Q_ENUMS(ToolButtonStyle)
- Q_FLAGS(Alignment)
- Q_FLAGS(Orientations)
- Q_FLAGS(DockWidgetAreas)
-
- public:
- ...
- };
- \endcode
-
- The Q_OBJECT macro, however, is an exception: QDoc recognizes this
- particular non-standard construct, so there is no need specifying
- it using the \tt {\l Cpp.ignoredirectives} variable.
-
- Regarding the Q_CORE_EXPORT macro; see the documentation of the
- \tt {\l Cpp.ignoretokens} variable.
-
- See also \l Cpp.ignoretokens.
-
- \target Cpp.ignoretokens-variable
- \section1 Cpp.ignoretokens
-
- The \c Cpp.ignoretokens variable makes QDoc ignore the specified
- non-standard constructs, within C++ source code.
-
- If not specified by the \tt {\l Cpp.ignoretokens} or \tt {\l
- Cpp.ignoredirectives} variables, non-standard constructs
- (typically macros) can result in erroneous documentation.
-
- In \l qtgui.qdocconf:
-
- \badcode
- Cpp.ignoretokens = QAXFACTORY_EXPORT \
- QM_EXPORT_CANVAS \
- ...
- Q_COMPAT_EXPORT \
- Q_CORE_EXPORT \
- Q_EXPLICIT \
- Q_EXPORT \
- ...
- Q_XML_EXPORT
- \endcode
-
- makes sure that when processing the code below, for example, QDoc
- will simply ignore the 'Q_CORE_EXPORT' expression:
-
- \code
- class Q_CORE_EXPORT Qt {
- Q_OBJECT
- Q_ENUMS(Orientation TextFormat BackgroundMode
- DateFormat ScrollBarPolicy FocusPolicy
- ContextMenuPolicy CaseSensitivity
- LayoutDirection ArrowType)
- Q_ENUMS(ToolButtonStyle)
- Q_FLAGS(Alignment)
- Q_FLAGS(Orientations)
- Q_FLAGS(DockWidgetAreas)
- public:
- ...
- };
- \endcode
-
- Regarding the Q_OBJECT, Q_ENUMS and Q_FLAGS macros; see the
- documentation of the \tt {\l Cpp.ignoredirectives} variable.
-
- See also \l Cpp.ignoredirectives.
-*/
-
-/*!
- \page 24-qdoc-configuration-htmlvariables.html
- \previouspage C++ Specific Configuration Variables
- \nextpage Supporting Derived Projects
-
- \keyword HTML Specific Configuration Variables
- \title Format-specific Configuration Variables
-
- The format-specific configuration variables define the generated
- documentation's style, or define the contents of the
- documentation's footer or postheader.
-
- Some of the configuration values are relevant only for the HTML
- output format and their values contain raw HTML.
-
- \target HTML.footer-variable
- \section1 HTML.footer
-
- The \c HTML.footer variable defines the content of the generated
- HTML documentation's footer.
-
- The footer is rendered at the bottom of the generated
- documentation page.
-
- The variable's value is given as raw HTML code enclosed by
- quotation marks. Note that if the value spans several lines, each
- line needs to be enclosed by quotation marks.
-
- \badcode
- HTML.footer = "<p /><address><hr /><div align=\"center\">\n" \
- ...
- "</tr></table></div></address>"
- \endcode
-
- \target FORMAT.nosubdirs
- \section1 <FORMAT>.nosubdirs
-
- A boolean value which, when \c true, enables single-directory output
- mode; all generated files go to \l {FORMAT.outputsubdir} directory,
- instead of a subdirectory based on the documentation project name.
-
- \target FORMAT.outputsubdir
- \section1 <FORMAT>.outputsubdir
-
- Defines the subdirectory under \l outputdir where documentation is
- generated.
-
- \badcode
- HTML.nosubdirs = true
- HTML.outputsubdir = html
- \endcode
-
- With above, the output goes to \c {<outputdir>/html}.
-
- \target HTML.postheader-variable
- \section1 HTML.postheader
-
- The \c HTML.postheader variable defines the content of the
- generated HTML documentation's postheader.
-
- The header is rendered at the top of the generated documentation
- page.
-
- The variable's value is given as raw HTML enclosed by quotation
- marks. Note that if the value spans several lines, each line needs
- to be enclosed by quotation marks.
-
- \badcode
- HTML.postheader = "<table border=\"0\"..." \
- ...
- "<img src=\"images/qt-logo.png\" \
- "align=\"right\" width=\"203\" height=\"32\""\
- "border=\"0\" />" \
- "</td></tr>" \
- "</table>"
- \endcode
-
- The complete variable entry in \l qtgui.qdocconf provides the
- standard header of the \l {http://doc.qt.io/qt-5/qtgui-index.html}
- {Qt GUI Documentation}.
-
- \target FORMAT.quotinginformation
- \section1 <FORMAT>.quotinginformation
-
- A boolean value which, when \c true, generates references to
- quoted content (for example, \l {quotefromfile-command}{\\quotefromfile}
- and \l {snippet-command}{\\snippet} commands) instead of including
- the content directly.
-
- Used currently for the \c WebXML output format.
-
- \badcode
- WebXML.quotinginformation = true
- \endcode
-
- \target HTML.style-variable
- \section1 HTML.style
-
- The HTML.style variable defines the style for
- the generated HTML documentation.
-
- The variable's value is given as raw HTML enclosed by quotation
- marks. Note that if the value spans several lines, each line needs
- to be enclosed by quotation marks.
-
- \badcode
- HTML.style = "h3.fn,span.fn" \
- "{ margin-left: 1cm; text-indent: -1cm; }\n" \
- "a:link { color: #004faf; text-decoration: none }\n" \
- "a:visited" \
- "{ color: #672967; text-decoration: none }\n" \
- "td.postheader { font-family: sans-serif }\n" \
- "tr.address { font-family: sans-serif }\n" \
- "body { background: #ffffff; color: black; }"
- \endcode
-
- \target HTML.stylesheets-variable
- \section1 HTML.stylesheets
-
- The HTML.stylesheets variable defines a list of stylesheets
- to use for the generated HTML documentation.
-
- Using separate stylesheets for the documentation makes it easier
- to customize and experiment with the style used once the contents
- has been generated. Typically, it is only necessary to define a
- single stylesheet for any set of documentation; for example:
-
- \badcode
- HTML.stylesheets = path/to/classic.css
- \endcode
-
- QDoc expects to find stylesheets in the directory containing the
- \l qtgui.qdocconf file, and it will copy those specified to the output
- directory alongside the HTML pages.
-
- \target HTML.tocdepth
- \section1 <FORMAT>.tocdepth
-
- The \c {<FORMAT>.tocdepth} variable defines how many document sections
- are printed in the table of contents. Setting tocdepth to \c 0 disables
- the table of contents while leaving it undefined prints all document
- sections.
-
- Currently only has an effect for the HTML format:
-
- \badcode
- HTML.tocdepth = 3
- \endcode
-*/
-
-/*!
- \page 25-qdoc-configuration-derivedprojects.html
- \previouspage Format-specific Configuration Variables
- \nextpage Example Manifest Files
-
- \title Supporting Derived Projects
-
- Some configuration variables allow you to use QDoc to support
- Qt-based projects. They allow your project to contain links to the
- online Qt documentation, which means that QDoc will be able to
- create links to the class reference documentation, without any
- explicit linking command.
-
- \target description-variable
- \section1 description
-
- The description variable holds a short description of the
- associated project.
-
- See also \l project.
-
- \target indexes-variable
- \section1 indexes
-
- The \l {indexes-variable}[indexes} variable defines a set of paths
- to index files to load.
-
- \badcode
- indexes = \
- $QT_INSTALL_DOCS/qtcore/qtcore.index \
- $SOME_OTHER_PROJECT/doc/foo.index
- \endcode
-
- The \c indexes variable provides an alternative to \l depends for
- defining project's dependencies. As direct paths are provided, no
- \c -indexdir command line option(s) are required when invoking QDoc.
-
- It is possible to define dependencies using either variable. Qt
- documentation only uses the \c depends variable.
-
- See also \l depends, \l project and \l url.
-
- \target project-variable
- \section1 project
-
- The \c project variable provides a name for the project associated
- with the \c .qdocconf file. This is a mandatory variable that all
- projects must set.
-
- The project's name is used to form a file name for the associated
- project's \e index file.
-
- \badcode
- project = QtCreator
- \endcode
-
- This will cause an index file called \c qtcreator.index to be
- created.
-
- If the project name contains whitespace or special characters,
- these are replaced with dashes ('-') in the generated index file
- name.
-
- See also \l depends, \l indexes, and \l description.
-
- \target url-variable
- \section1 url
-
- The \c url variable holds the base URL for the
- documentation associated with the current project.
-
- The URL is stored in the generated index file for the
- project. When we use the index on its own, QDoc will use this as
- the base URL when constructing links to classes, functions, and
- other things listed in the index.
-
- \badcode
- project = QtCore
- description = Qt Core Reference Documentation
- url = https://doc.qt.io/qt/
-
- ...
- \endcode
-
- This ensures that whenever QDoc generates
- references to entities in the Qt Core module, the base URL is
- \c https://doc.qt.io/qt/.
-
- See also \l depends, \l indexes and \l {url.examples}.
-
- \target url.examples-variable
- \section1 url.examples
-
- The \c url.examples variable holds the base URL for the examples
- associated with the current project.
-
- If defined, a link to the example project directory is generated
- at the end of each example documentation page. The \c url.examples
- variable refers to the root directory of the examples related to
- this project; it can be a link to an online repository (starting
- with \e http:// or \e https://), or to the local file system
- (\c file://).
-
- If \c url.examples is not defined, QDoc will output a list of
- example's files and images instead.
-
- For example, given these definitions:
-
- \badcode
- url.examples = "https://code.qt.io/cgit/qt/qtbase.git/tree/examples/"
- examplesinstallpath = corelib
- \endcode
-
- Then, for the following \l {example-command}{\\example} command:
-
- \badcode *
- /\1!
- \example threads/semaphores
- ...
- \1/
- \endcode
-
- QDoc generates a link to
- \c https://code.qt.io/cgit/qt/qtbase.git/tree/examples/corelib/threads/semaphores.
-
- If the URL contains more components (for example, a query string)
- after the example path, \\1 can be used as a placeholder for the
- path:
-
- \badcode
- url.examples = "https://code.qt.io/cgit/qt/qtbase.git/tree/examples/\1?h=$QT_VER"
- examplesinstallpath = corelib
- \endcode
-
- Given the same \\example command as above and assuming that
- \c $QT_VER expands to \c {5.13}, the generated URL is
- \c https://code.qt.io/cgit/qt/qtbase.git/tree/examples/corelib/threads/semaphores?h=5.13.
-
- \c {url.examples} variable was introduced in QDoc version 5.13.
-
- See also \l url, \l examplesinstallpath, and \l {example-command}{\\example}.
-
- \target howto
- \section1 How to Support Derived Projects
-
- This feature makes use of the comprehensive indexes generated by
- QDoc when it creates the Qt reference documentation.
-
- For example, \l qtgui.qdocconf (the configuration file for Qt GUI)
- contains the following variable definitions:
-
- \badcode
- project = QtGui
- description = Qt GUI Reference Documentation
- url = http://doc.qt.io/qt/
-
- ...
- \endcode
-
- The \l project variable name is used to form a file name for the
- index file; in this case the \c qtgui.index file is created. The \l
- url is stored in the index file. Afterwards, QDoc will use this
- as the base URL when constructing links to classes, functions,
- and other things listed in the index.
-
- See also \l depends, \l indexes, \l project, and \l url.
-*/
-
-/*!
- \page 26-qdoc-configuration-example-manifest-files.html
- \previouspage Supporting Derived Projects
-
- \title Example Manifest Files
-
- QDoc generates XML files that contain information about all documented
- examples and demos. These files, named \c {examples-manifest.xml} and
- \c {demos-manifest.xml}, are used by Qt Creator to present a list of
- examples in its welcome screen and to link to their documentation.
-
- \section1 Manifest XML Structure
-
- A manifest file has the following structure:
-
- \badcode
- <?xml version="1.0" encoding="UTF-8"?>
- <instructionals module="QtGui">
- <examples>
- <example
- name="Analog Clock Window Example"
- docUrl="qthelp://org.qt-project.qtgui.502/qtgui/analogclock.html"
- projectPath="gui/analogclock/analogclock.pro"
- imageUrl="qthelp://org.qt-project.qtgui.502/qtgui/images/analogclock-window-example.png">
- <description><![CDATA[The Analog Clock Window example shows how
- to draw the contents of a custom window.]]></description>
- <tags>analog,clock,window</tags>
- <fileToOpen>gui/analogclock/main.cpp</fileToOpen>
- </example>
- ...
- </examples>
- </instructionals>
- \endcode
-
- Each \c {<example>} element contains information about a name,
- description, the location of the project file and documentation,
- as well as a list of tags associated with the example.
-
- \target metacontent
- \section1 Manifest Meta Content
-
- It is possible to augment the manifest files with additional
- meta-content - that is, extra attributes and tags for selected
- examples, using the \c manifestmeta configuration command.
-
- One use case for meta-content is highlighting a number of prominent
- examples. Another is improving search functionality by adding
- relevant keywords as tags for a certain category of examples.
-
- The examples for which meta-content is applied to is specified using
- one or more filters. Matching examples to filters is done based on
- names, with each example name prefixed with a module name and a
- slash. Simple wildcard matching is supported; by using \c {*} at the
- end it's possible to match multiple examples with a single string.
-
- Example:
-
- \badcode
- manifestmeta.filters = highlighted sql webkit global
-
- manifestmeta.highlighted.names = "QtGui/Analog Clock Window Example" \
- "QtWidgets/Analog Clock Example"
- manifestmeta.highlighted.attributes = isHighlighted:true
-
- manifestmeta.sql.names = "QtSql/*"
- manifestmeta.sql.tags = database,sql
-
- manifestmeta.webkit.names = "QtWebKitExamples/*"
- manifestmeta.webkit.tags = webkit
-
- manifestmeta.global.names = *
- manifestmeta.global.tags = qt5
- \endcode
-
- Above, an \c isHighlighted attribute is added to two examples. If
- the attribute value is omitted, QDoc uses the string \c {true} by
- default. Extra tags are added for Qt WebKit and Qt SQL examples, and
- another tag is applied to all examples by using just \c {*} as the
- match string.
-*/
-
-/*!
- \page 21-1-minimum-qdocconf.html
- \previouspage qtgui.qdocconf
- \nextpage The QDoc Configuration File
-
- \title minimum.qdocconf
-
- \quotefile examples/minimum.qdocconf
-*/
-
-/*!
- \page 21-2-qtgui-qdocconf.html
- \previouspage Supporting Derived Projects
- \nextpage minimum.qdocconf
-
- \title qtgui.qdocconf
-
- \quotefile files/qtgui.qdocconf
-*/
diff --git a/src/qdoc/doc/qdoc-manual-topiccmds.qdoc b/src/qdoc/doc/qdoc-manual-topiccmds.qdoc
deleted file mode 100644
index 779007464..000000000
--- a/src/qdoc/doc/qdoc-manual-topiccmds.qdoc
+++ /dev/null
@@ -1,1632 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \page 13-qdoc-commands-topics.html
- \previouspage Command Index
- \nextpage Context Commands
-
- \title Topic Commands
-
- A topic command tells QDoc which source code element is being
- documented. Some topic commands allow you to create documentation
- pages that aren't tied to any underlying source code element.
-
- When QDoc processes a QDoc comment, it tries to connect the
- comment to an element in the source code by first looking for a
- topic command that names the source code element. If there is no
- topic command, QDoc tries to connect the comment to the source
- code element that immediately follows the comment. If it can't do
- either of these and if there is no topic command that indicates
- the comment does not have an underlying source code element (e.g.
- \l{page-command} {\\page}), then the comment is discarded.
-
- \target topic argument
-
- The name of the entity being documented is usually the only
- argument for a topic command. Use the complete name. Sometimes
- there can be a second parameter in the argument. See e.g. \l
- {page-command} {\\page}.
-
- \code
- \enum QComboBox::InsertPolicy
- \endcode
-
- The \l {fn-command} {\\fn} command is a special case. For the \l
- {fn-command} {\\fn} command, use the function's signature
- including the class qualifier.
-
- \code
- \fn void QGraphicsWidget::setWindowFlags(Qt::WindowFlags wFlags)
- \endcode
-
- A topic command can appear anywhere in a comment but must stand
- alone on its own line. It is good practice is to let the topic command
- be the first line of the comment. If the argument spans several
- lines, make sure that each line (except the last one) is ended
- with a backslash. Moreover, QDoc counts parentheses, which means
- that if it encounters a '(' it considers everything until the
- closing ')' as its argument.
-
- If a topic command is repeated with different arguments, the
- same documentation will appear for both the units.
-
- \code
- / *!
- \fn void PreviewWindow::setWindowFlags()
- \fn void ControllerWindow::setWindowFlags()
-
- Sets the widgets flags using the QWidget::setWindowFlags()
- function.
-
- Then runs through the available window flags, creating a text
- that contains the names of the flags that matches the flags
- parameter, displaying the text in the widgets text editor.
- * /
- \endcode
-
- The \c PreviewWindow::setWindowFlags() and \c
- ControllerWindow::setWindowFlags() functions will get the same
- documentation.
-
- \target class-command
- \section1 \\class
-
- The \\class command is for documenting a C++ class. The argument
- is the complete name of the class. The command tells QDoc that a
- class is part of the public API, and lets you enter a detailed
- description.
-
- \code
- / *!
- \class QMap::iterator
-
- \brief The QMap::iterator class provides an STL-style
- non-const iterator for QMap and QMultiMap.
-
- QMap features both \l{STL-style iterators} and
- \l{Java-style iterators}. The STL-style iterators ...
- * /
- \endcode
-
- The HTML documentation for the named class is written to a
- \c{.html} file named from the class name, in lower case, and with
- the double colon qualifier(s) replaced with '-'. For example, the
- documentation for the \c QMap::Iterator class is written to \c
- qmap-iterator.html.
-
- \target framework
-
- The file contains the class description from the \\class comment,
- plus the documentation generated from QDoc comments for all the
- class members: a list of the class's types, properties,
- functions, signals, and slots.
-
- In addition to the detailed description of the class, the \\class
- comment typically contains a \l {brief-command} {\\brief} command
- and one or more \l{Markup Commands}. See the \\class command for
- any of the Qt class for examples. Here is a very simple example:
-
- \code
- / *!
- \class PreviewWindow
- \brief The PreviewWindow class is a custom widget.
- displaying the names of its currently set
- window flags in a read-only text editor.
-
- \ingroup miscellaneous
-
- The PreviewWindow class inherits QWidget. The widget
- displays the names of its window flags set with the \l
- {function} {setWindowFlags()} function. It is also
- provided with a QPushButton that closes the window.
-
- ...
-
- \sa QWidget
- * /
- \endcode
-
- The way QDoc renders this \\class will depend a lot on your \c
- {style.css} file, but the general outline of the class reference
- page will look like this:
-
- \quotation
- \raw HTML
- <h1>PreviewWindow Class Reference</h1>
- \endraw
-
- The PreviewWindow class is a custom widget displaying
- the names of its currently set window flags in a
- read-only text editor. \l {preview window} {More...}
-
- \raw HTML
- <h3>Properties</h3>
- \endraw
-
- \list
- \li 52 properties inherited from QWidget
- \li 1 property inherited from QObject
- \endlist
-
- \raw HTML
- <h3>Public Functions</h3>
- \endraw
-
- \list
- \li \l {constructor} {PreviewWindow}(QWidget *parent = 0)
- \li void \l {function} {setWindowFlags}(Qt::WindowFlags flags)
- \endlist
-
- \list
- \li 183 public functions inherited from QWidget
- \li 28 public functions inherited from QObject
- \endlist
-
- \raw HTML
- <h3>Public Slots</h3>
- \endraw
-
- \list
- \li 17 public slots inherited from QWidget
- \li 1 public slot inherited from QObject
- \endlist
-
- \raw HTML
- <h3>Additional Inherited Members</h3>
- \endraw
-
- \list
- \li 1 signal inherited from QWidget
- \li 1 signal inherited from QObject
- \li 4 static public members inherited from QWidget
- \li 4 static public members inherited from QObject
- \li 39 protected functions inherited from QWidget
- \li 7 protected functions inherited from QObject
- \endlist
-
- \target preview window
-
- \raw HTML
- <hr />
- <h2>Detailed Description</h2>
- \endraw
-
- The PreviewWindow class is a custom widget displaying
- the names of its currently set window flags in a
- read-only text editor.
-
- The PreviewWindow class inherits QWidget. The widget
- displays the names of its window flags set with the \l
- {function} {setWindowFlags()} function. It is also
- provided with a QPushButton that closes the window.
-
- ...
-
- See also QWidget.
-
- \raw HTML
- <hr />
- <h2>Member Function Documentation</h2>
- \endraw
-
- \target constructor
- \raw HTML
- <h3>PreviewWindow(QWidget *parent = 0)</h3>
- \endraw
-
- Constructs a preview window widget with \e parent.
-
- \target function
- \raw HTML
- <h3>setWindowFlags(Qt::WindowFlags flags)</h3>
- \endraw
-
- Sets the widgets flags using the
- QWidget::setWindowFlags() function.
-
- Then runs through the available window flags,
- creating a text that contains the names of the flags
- that matches the flags parameter, displaying
- the text in the widgets text editor.
- \endquotation
-
- \target enum-command
- \section1 \\enum
-
- The \\enum command is for documenting a C++ enum type. The
- argument is the full name of the enum type.
-
- The enum values are documented in the \\enum comment using the \l
- {value-command} {\\value} command. If an enum value is not
- documented with \\value, QDoc emits a warning. These warnings can
- be avoided using the \l {omitvalue-command} {\\omitvalue} command
- to tell QDoc that an enum value should not be documented. The enum
- documentation will be included on the class reference page, header
- file page, or namespace page where the enum type is defined. For
- example, consider the enum type \c {Corner} in the Qt namespace:
-
- \code
- enum Corner {
- TopLeftCorner = 0x00000,
- TopRightCorner = 0x00001,
- BottomLeftCorner = 0x00002,
- BottomRightCorner = 0x00003
- #if defined(QT3_SUPPORT) && !defined(Q_MOC_RUN)
- ,TopLeft = TopLeftCorner,
- TopRight = TopRightCorner,
- BottomLeft = BottomLeftCorner,
- BottomRight = BottomRightCorner
- #endif
- };
- \endcode
-
- This enum can be cocumented this way:
-
- \code
- / *!
- \enum Qt::Corner
-
- This enum type specifies a corner in a rectangle:
-
- \value TopLeftCorner
- The top-left corner of the rectangle.
- \value TopRightCorner
- The top-right corner of the rectangle.
- \value BottomLeftCorner
- The bottom-left corner of the rectangle.
- \value BottomRightCorner
- The bottom-right corner of the rectangle.
-
- \omitvalue TopLeft
- \omitvalue TopRight
- \omitvalue BottomLeft
- \omitvalue BottomRight
- * /
- \endcode
-
- Note the inclusion of the namespace qualifier. QDoc will render
- this enum type in \c {qt.html} like this:
-
- \quotation
- \raw HTML
- <h3 class="fn"><a name="Corner-enum"></a>enum Qt::Corner</h3>
-
- <p>This enum type specifies a corner in a rectangle:</p>
-
- <table border="1" cellpadding="2" cellspacing="1" width="100%">
- <tr>
- <th width="25%">Constant</th>
- <th width="15%">Value</th>
- <th width="60%">Description</th>
- </tr>
-
- <tr>
- <td valign="top"><tt>Qt::TopLeftCorner</tt></td>
- <td align="center" valign="top"><tt>0x00000</tt></td>
- <td valign="top">The top-left corner of the rectangle.</td>
- </tr>
-
- <tr>
- <td valign="top"><tt>Qt::TopRightCorner</tt></td>
- <td align="center" valign="top"><tt>0x00001</tt></td>
- <td valign="top">The top-right corner of the rectangle.</td>
- </tr>
-
- <tr>
- <td valign="top"><tt>Qt::BottomLeftCorner</tt></td>
- <td align="center" valign="top"><tt>0x00002</tt></td>
- <td valign="top">The bottom-left corner of the rectangle.</td>
- </tr>
-
- <tr>
- <td valign="top"><tt>Qt::BottomRightCorner</tt></td>
- <td align="center" valign="top"><tt>0x00003</tt></td>
- <td valign="top">The bottom-right corner of the rectangle.</td>
- </tr>
-
- </table>
- \endraw
- \endquotation
-
- See also \l {value-command} {\\value} and \l {omitvalue-command} {\\omitvalue}.
-
- \target example-command
- \section1 \\example
-
- The \\example command is for documenting an example. The argument
- is the example's path relative to one of the paths listed in the
- \l {exampledirs-variable} {exampledirs} variable in the QDoc
- configuration file.
-
- The documentation page will be output to \c {modulename-path-to-example}.html.
- QDoc will add a list of all the example's source and images files at the end
- of the page, unless \l {noautolist-command}{\\noautolist} command is used or
- the configuration variable \l {url.examples-variable}{url.examples} is defined
- for the project.
-
- For example, if \l {exampledirs-variable} {exampledirs} contains
- \c $QTDIR/examples/widgets/imageviewer, then
-
- \code
- / *!
- \example widgets/imageviewer
- \title ImageViewer Example
- \subtitle
-
- The example shows how to combine QLabel and QScrollArea
- to display an image.
-
- ...
- * /
- \endcode
-
- QDoc renders this example in widgets-imageviewer.html:
-
- \quotation
- \raw HTML
- <center><h1>Image Viewer Example</h1></center>
- \endraw
-
- The example shows how to combine QLabel and QScrollArea
- to display an image.
-
- Files:
- \list
- \li \l{http://doc.qt.io/qt-5/qtwidgets-widgets-imageviewer-imageviewer-cpp.html}
- {widgets/imageviewer/imageviewer.cpp}
- \li \l{http://doc.qt.io/qt-5/qtwidgets-widgets-imageviewer-imageviewer-h.html}
- {widgets/imageviewer/imageviewer.h}
- \li \l{http://doc.qt.io/qt-5/qtwidgets-widgets-imageviewer-main-cpp.html}
- {widgets/imageviewer/main.cpp}
- \endlist
-
-
- ...
- \endquotation
-
- \b {See also:} \l {generatelist-command}{\\generatelist examplefiles},
- \l {noautolist-command}{\\noautolist},
- \l {url.examples-variable}{url.examples},
- \l {meta-command}{\\meta}
-
- \target externalpage-command
- \section1 \\externalpage
-
- The \\externalpage command assigns a title to an external URL.
-
- \code
- / *!
- \externalpage http://doc.qt.io/
- \title Qt Documentation Site
- * /
- \endcode
-
- This allows you to include a link to the external page in your
- documentation this way:
-
- \code
- / *!
- At the \l {Qt Documentation Site} you can find the latest
- documentation for Qt, Qt Creator, the Qt SDK and much more.
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- At the \l {http://doc.qt.io/}{Qt Documentation Site}
- you can find the latest documentation for Qt, Qt Creator, the Qt SDK
- and much more.
- \endquotation
-
- To achieve the same result without using the \\externalpage
- command, you would have to hard-code the address into your
- documentation:
-
- \code
- / *!
- At the \l {http://doc.qt.io/}{Qt Documentation Site}
- you can find the latest documentation for Qt, Qt Creator, the Qt SDK
- and much more.
- * /
- \endcode
-
- The \\externalpage command makes it easier to maintain the
- documentation. If the address changes, you only need to change the
- argument of the \\externalpage command.
-
- \target fn-command
- \section1 \\fn (function)
-
- The \\fn command is for documenting a function. The argument is
- the function's signature, including its return type, const-ness,
- and list of formal arguments with types. If the named function
- doesn't exist, QDoc emits a warning.
-
- \note The \\fn command is QDoc's default command: when no
- topic command can be found in a QDoc comment, QDoc tries to tie
- the documentation to the following code as if it is the
- documentation for a function. Hence, it is normally not necessary
- to include this command when documenting a function, if the
- function's QDoc comment is written immediately above the function
- implementation in the \c .cpp file. But it must be present when
- documenting an inline function in the \c .cpp file that is
- implemented in the \c .h file.
-
- \code
- / *!
- \fn bool QToolBar::isAreaAllowed(Qt::ToolBarArea area) const
-
- Returns \c true if this toolbar is dockable in the given
- \a area; otherwise returns \c false.
- * /
- \endcode
-
- QDoc renders this as:
-
- \quotation
- \raw HTML
- <h3>bool QToolBar::isAreaAllowed(Qt::ToolBarArea area) const
- </h3>
- \endraw
-
- Returns \c true if this toolbar is dockable in the given
- \a area; otherwise returns \c false.
- \endquotation
-
- See also \l {overload-command} {\\overload}.
-
- \target group-command
- \section1 \\group
-
- The \\group command creates a separate page that lists the classes
- belonging to the group. The argument is the group name.
-
- A class is included in a group by using the \l {ingroup-command}
- {\\ingroup} command. Overview pages can also be related to a group
- using the same command, but the list of overview pages must be
- requested explicitly using the \l {generatelist-command}
- {\\generatelist} command (see example below).
-
- The \\group command is typically followed by a \l {title-command}
- {\\title} command and a short introduction to the group. The
- HTML page for the group is written to a \c {.html} file put in
- <lower-case>\e{group}.html.
-
- Each class name is listed as a link to the class reference page
- followed by the text from the class's \l {brief-command} {\\brief}
- texts.
-
- \code
- / *!
- \group io
-
- \title Input/Output and Networking
-
- These classes are used to handle input and output to
- and from external devices, processes, files etc., as
- well as manipulating files and directories.
- * /
- \endcode
-
- QDoc generates a group page in \c{io.html} that will look
- like this:
-
- \quotation
- \raw HTML
-
- <h1>Input/Output and Networking</h1>
-
- <p>These classes are used to handle input and output
- to and from external devices, processes, files etc., as
- well as manipulating files and directories.</p>
-
- <p>
- <table width="100%">
- <tr valign="top" bgcolor="#e0e0e0">
- <td><b>
- <a href="http://doc.qt.io/qt-5/qabstractsocket.html">QAbstractSocket</a>
- </b></td>
- <td>
- The base functionality common to all socket types
- </td></tr>
-
- <tr valign="top" bgcolor="#e0e0e0">
- <td><b>
- <a href="http://doc.qt.io/qt-5/qbuffer.html">QBuffer</a>
- </b></td>
- <td>
- QIODevice interface for a QByteArray
- </td></tr>
-
- <tr valign="top" bgcolor="#e0e0e0">
- <td><b>
- <a href="http://doc.qt.io/qt-5/qclipboard.html">QClipboard</a>
- </b></td>
- <td>
- Access to the window system clipboard
- </td></tr>
- </table>
- \endraw
- \endquotation
-
- Note that overview pages related to the group, must be listed
- explicitly using the \l {generatelist-command} {\\generatelist}
- command with the \c related argument.
-
- \code
- / *!
- \group architecture
-
- \title Architecture
-
- These documents describe aspects of Qt's architecture
- and design, including overviews of core Qt features and
- technologies.
-
- \generatelist{related}
- * /
- \endcode
-
- See also \l {ingroup-command} {\\ingroup} and \l
- {generatelist-command} {\\generatelist}.
-
- \target headerfile-command
- \section1 \\headerfile
-
- The \\headerfile command is for documenting the global functions,
- types and macros that are declared in a header file, but not in a
- namespace. The argument is the name of the header file. The HTML
- page is written to a \c {.html} file constructed from the header
- file argument.
-
- The documentation for a function, type, or macro that is declared
- in the header file being documented, is included in the header file
- page using the \l {relates-command} {\\relates} command.
-
- If the argument doesn't exist as a header file, the \\headerfile
- command creates a documentation page for the header file anyway.
-
- \code
- / *!
- \headerfile <QtAlgorithms>
-
- \title Generic Algorithms
-
- \brief The <QtAlgorithms> header file provides
- generic template-based algorithms.
-
- Qt provides a number of global template functions in \c
- <QtAlgorithms> that work on containers and perform
- well-know algorithms.
- * /
- \endcode
-
- QDoc generates a header file page \c{qtalgorithms.html} that looks
- like this:
-
- \quotation
- \raw HTML
- <center><h1>&lt;QtAlgorithms&gt; -
- Generic Algorithms</h1></center>
- <p>The <QtAlgorithms> header file provides generic
- template-based algorithms.
- <a href="13-qdoc-commands-topics.html#header-command">More...</a>
- </p>
-
- <h3>Functions</h3>
- <ul>
- <li>RandomAccessIterator
- <a href="http://doc.qt.io/qt-5/qtalgorithms-obsolete.html#qBinaryFind">qBinaryFind</a></b>
- (RandomAccessIterator begin, RandomAccessIterator end,
- const T & value)</li>
- <li>...</li></ul>
- <hr />
- \endraw
-
- \target header
-
- \raw HTML
- <h2>Detailed Description</h2>
- <p>The <QtAlgorithms> header file provides generic
- template-based algorithms. </p>
- \endraw
-
- Qt provides a number of global template functions in \c
- <QtAlgorithms> that work on containers and perform
- well-know algorithms.
-
- ...
- \endquotation
-
- See also \l {inheaderfile-command}{\\inheaderfile}.
-
- \target macro-command
- \section1 \\macro
-
- The \\macro command is for documenting a C++ macro. The argument
- is the macro in one of three styles: function-like macros like
- Q_ASSERT(), declaration-style macros like Q_PROPERTY(), and macros
- without parentheses like Q_OBJECT.
-
- The \\macro comment must contain a \l {relates-command}
- {\\relates} command that attaches the macro comment to a class,
- header file, or namespace. Otherwise, the documentation will be
- lost. Here are three example macro comments followed by what they
- might look like in \c {qtglobal.html} or \c {qobject.html}:
-
- \code
- / *!
- \macro void Q_ASSERT(bool test)
- \relates <QtGlobal>
-
- Prints a warning message containing the source code
- file name and line number if \a test is false.
-
- ...
-
- \sa Q_ASSERT_X(), qFatal(), {Debugging Techniques}
- * /
- \endcode
-
- \quotation
- \raw HTML
- <h3>void Q_ASSERT ( bool <i>test</i> )</h3>
- \endraw
-
- Prints a warning message containing the source code
- file name and line number if \a test is false.
-
- ...
-
- See also Q_ASSERT_X(), qFatal() and \l {Debugging Techniques}.
-
- \endquotation
-
- \code
- / *!
- \macro Q_PROPERTY(...)
- \relates QObject
-
- This macro declares a QObject property. The syntax is:
-
- ...
-
- \sa {Qt's Property System}
- * /
- \endcode
-
- \quotation
- \raw HTML
- <h3>Q_PROPERTY ( ... )</h3>
- \endraw
-
- This macro declares a QObject property. The syntax is:
-
- ...
-
- See also \l {Qt's Property System}.
- \endquotation
-
- \code
- / *!
- \macro Q_OBJECT
- \relates QObject
-
- The Q_OBJECT macro must appear in the private section
- of a class definition that declares its own signals and
- slots, or that uses other services provided by Qt's
- meta-object system.
-
- ...
-
- \sa {Meta-Object System}, {Signals and Slots}, {Qt's
- Property System}
- * /
- \endcode
-
- \quotation
- \raw HTML
- <h3>Q_OBJECT</h3>
- \endraw
-
- The Q_OBJECT macro must appear in the private section
- of a class definition that declares its own signals and
- slots or that uses other services provided by Qt's
- meta-object system.
-
- ...
-
- See also \l {Meta-Object System}, \l {Signals &
- Slots} and \l {Qt's Property System}.
- \endquotation
-
- \target module-command
- \section1 \\module
-
- The \\module creates a page that lists the classes belonging to
- the module specified by the command's argument. A class included
- in the module by including the \l {inmodule-command} {\\inmodule}
- command in the \\class comment.
-
- The \\module command is typically followed by a \l {title-command}
- {\\title} and a \l {brief-command} {\\brief} command. Each class
- is listed as a link to the class reference page followed by the
- text from the class's \l {brief-command} {\\brief} command. For
- example:
-
- \code
- / *!
- \module QtNetwork
-
- \title Qt Network Module
-
- \brief Contains classes for writing TCP/IP clients and servers.
-
- The network module provides classes to make network
- programming easier and portable. It offers both
- high-level classes such as QNetworkAccessManager that
- implements application-level protocols, and
- lower-level classes such as QTcpSocket, QTcpServer, and
- QUdpSocket.
- * /
- \endcode
-
- QDoc renders this in \c {qtnetwork.html} like this:
-
- \quotation
- \raw HTML
- <h1><center>Qt Network Module</center></h1>
- \endraw
-
- The Qt Network module offers classes that allow you to
- write TCP/IP clients and servers.\l {module
- details} {More...}
-
- \raw HTML
- <p>
- <table width="100%">
- <tr valign="top" bgcolor="#d0d0d0">
- <td><b>
- <a href="https://doc.qt.io/qt-5/qabstractsocket.html">QAbstractSocket</a>
- </b></td>
- <td>
- The base functionality common to all socket types
- </td></tr>
-
- <tr valign="top" bgcolor="#d0d0d0">
- <td>...</td>
- <td>...</td>
- </tr>
- </table>
-
- <p><hr /></p>
- \endraw
-
- \target module details
-
- \raw HTML
- <h2>Detailed Description</h2>
-
- <p>
- The Qt Network module offers classes that allow you to
- write TCP/IP clients and servers.
- </p>
-
- <p>
- The network module provides classes to make network
- programming easier and portable. It offers both
- high-level classes such as QNetworkAccessManager that
- implements application-level protocols, and
- lower-level classes such as QTcpSocket, QTcpServer, and
- QUdpSocket.
- </p>
- \endraw
-
- ...
-
- \endquotation
-
- The \l {noautolist-command} {\\noautolist} command can be used here
- to omit the automatically generated list of classes at the end.
-
- See also \l {inmodule-command} {\\inmodule}
-
- \target namespace-command
- \section1 \\namespace
-
- The \\namespace command is for documenting the contents of the C++
- namespace named as its argument. The reference page QDoc generates
- for a namespace is similar to the reference page it generates for a
- C++ class.
-
- \code
- / *!
- \namespace Qt
-
- \brief Contains miscellaneous identifiers used throughout the Qt library.
- * /
- \endcode
-
- QDoc renders this in \c{qt.html} like this:
-
- \quotation
- \raw HTML
- <center><h1>Qt Namespace</h1></center>
- <p>The Qt namespace contains miscellaneous
- identifiers used throughout the Qt library.
- <a href="13-qdoc-commands-topics.html#name">More...</a>
- </p>
-
- <pre>#include &lt;Qt&gt;</pre>
- <ul>
- <li>
- <a href="https://doc.qt.io/qt-5/qt-obsolete.html">
- Obsolete members</a></li>
- </ul>
-
-
- <h3>Types</h3>
- <ul>
- <li>flags
- <a href="https://doc.qt.io/qt-5/qt.html#AlignmentFlag-enum">Alignment</a></b></li>
- <li>...</li></ul>
- <hr />
- \endraw
-
- \target name
-
- \raw HTML
- <h2>Detailed Description</h2>
- <p>Contains miscellaneous identifiers
- used throughout the Qt library.</p>
- \endraw
-
- ...
- \endquotation
-
- Note that in C++, a particular namespace can be used in more
- than one module, but when C++ elements from different modules
- are declared in the same namespace, the namespace itself must
- be documented in one module only. For example, namespace Qt in
- the example above contains types and functions from both QtCore
- and QtGui, but it is documented with the \\namespace command
- only in QtCore.
-
- \target page-command
- \section1 \\page
-
- The \\page command is for creating a stand-alone documentation
- page. The argument can consist of two parts separated by a
- space. The first part is the name of the file where QDoc should
- store the page. The second part, if present, is a word that
- specifies the page type. Currently, the second part can be one of
- the following list of words:
-
- \list
-
- \li faq - A frequently asked question.
-
- \li howto - A user guide on how to use some components of the
- software.
-
- \li example - A page that describes a working example.
-
- \li overview - For text pages that provide an overview of some
- important subject.
-
- \li tutorial - For text pages that are part of a tutorial.
-
- \li api - This is the type of page used for C++ class references and
- QML type references. You should never use this one for the pages
- you write, because this one is reserved for QDoc.
-
- \endlist
-
- The page title is set using the \l {title-command} {\\title}
- command.
-
- \code
- / *!
- \page aboutqt.html
-
- \title About Qt
-
- Qt is a C++ toolkit for cross-platform GUI
- application development. Qt provides single-source
- portability across Microsoft Windows, macOS, Linux,
- and all major commercial Unix variants.
-
- Qt provides application developers with all the
- functionality needed to build applications with
- state-of-the-art graphical user interfaces. Qt is fully
- object-oriented, easily extensible, and allows true
- component programming.
-
- ...
- * /
- \endcode
-
- QDoc renders this page in \c {aboutqt.html}.
-
- \target property-command
- \section1 \\property
-
- The \\property command is for documenting a Qt property. The
- argument is the full property name.
-
- A property is defined using the Q_PROPERTY() macro. The macro
- takes as arguments the property's name and its set, reset and get
- functions.
-
- \code
- Q_PROPERTY(QString state READ state WRITE setState)
- \endcode
-
- The set, reset and get functions don't need to be documented,
- documenting the property is sufficient. QDoc will generate a list
- of the access function that will appear in the property
- documentation which in turn will be located in the documentation
- of the class that defines the property.
-
- The \\property command comment typically includes a \l
- {brief-command} {\\brief} command. For properties the \l
- {brief-command} {\\brief} command's argument is a sentence
- fragment that will be included in a one line description of the
- property. The command follows the same rules for the \l
- {brief-property} {description} as the \l {variable-command}
- {\\variable} command.
-
- \code
- / *!
- \property QPushButton::flat
- \brief Whether the border is disabled.
-
- This property's default is false.
- * /
- \endcode
-
- QDoc includes this in \c {qpushbutton.html} like this:
-
- \quotation
- \raw HTML
- <h3>flat : bool</h3>
- \endraw
-
- This property holds whether the border is disabled.
-
- This property's default is false.
-
- Access functions:
-
- \list
- \li \b { bool isFlat () const}
- \li \b { void setFlat ( bool )}
- \endlist
-
- \endquotation
-
- \code
- / *!
- \property QWidget::width
- \brief The width of the widget excluding any window frame.
-
- See the \l {Window Geometry} documentation for an
- overview of window geometry.
-
- \sa geometry, height, size
- * /
- \endcode
-
- QDoc includes this in \c {qwidget.html} like this:
-
- \quotation
- \raw HTML
- <h3>width : const int</h3>
- \endraw
-
- This property holds the width of the widget excluding
- any window frame.
-
- See the \l {Window Geometry} documentation for an
- overview of window geometry.
-
- Access functions:
-
- \list
- \li \b { int width () const}
- \endlist
-
- See also \l{QWidget::geometry} {geometry},
- \l{QWidget::height} {height}, and \l{QWidget::size} {size}.
- \endquotation
-
- \target qmlattachedproperty-command
- \section1 \\qmlattachedproperty
-
- The \\qmlattachedproperty command is for documenting a QML
- property that will be attached to some QML type. See
- \l{http://doc.qt.io/qt-5/qtqml-syntax-objectattributes.html#attached-properties-and-attached-signal-handlers}
- {Attached Properties}. The argument is the rest of the line. The
- argument text should be the property type, followed by the QML
- element name where the property is being declared, the \c{::}
- qualifier, and finally the property name. If we have a QML
- attached property named \c isCurrentItem in QML \c ListView,
- and the property has type \c {bool}, the \\qmlattachedproperty for
- it would look like this:
-
- \code
- / *!
- \qmlattachedproperty bool ListView::isCurrentItem
- This attached property is \c true if this delegate is the current
- item; otherwise false.
-
- It is attached to each instance of the delegate.
-
- This property may be used to adjust the appearance of the current
- item, for example:
-
- \snippet doc/src/snippets/declarative/listview/listview.qml isCurrentItem
- * /
- \endcode
-
- QDoc includes this attached property on the QML reference page for the
- \l{http://doc.qt.io/qt-5/qml-qtquick-listview.html#isCurrentItem-attached-prop}
- {ListView} element.
-
- \target qmlattachedsignal-command
- \section1 \\qmlattachedsignal
-
- The \\qmlattachedsignal command is for documenting an attachable
- \l{Signal and Handler Event System}{signal}. The \\qmlattachedsignal
- command is used just like the \l{qmlsignal-command} {\\qmlsignal} command.
-
- The argument is the rest of the line. It should be the name of the
- QML type where the signal is declared, the \c{::}
- qualifier, and finally the signal name. For example, a QML
- attached signal named \c add() in the \c GridView
- element is documented like this:
-
- \code
- / *!
- \qmlattachedsignal GridView::add()
- This attached signal is emitted immediately after an item is added to the view.
- * /
- \endcode
-
- QDoc includes this documentation on the QML reference page for the
- \l GridView element.
-
- \target qmlbasictype-command
- \section1 \\qmlbasictype
-
- The \\qmlbasictype command is for documenting a basic type for QML.
- The argument is the type name. The type must be included in the
- QML basic types group using the \l{ingroup-command}{\\ingroup}
- command as shown below. This will cause QDoc to include the
- documentation for the type on the
- \l{http://doc.qt.io/qt-5/qtqml-typesystem-basictypes.html}
- {QML Basic Types} page. The \l{brief-command} {\\brief} command
- is also required, because it appears on the
- \l{http://doc.qt.io/qt-5/qtqml-typesystem-basictypes.html}
- {QML Basic Types} page as well.
-
- \code
- / *!
- \qmlbasictype int
- \ingroup qmlbasictypes
-
- \brief An integer is a whole number, for example 0, 10, or -20.
-
- An integer is a whole number, e.g. 0, 10, or -20. The possible
- \c int values range from around -2000000000 to around
- 2000000000, although most elements will only accept a reduced
- range (which they mention in their documentation).
-
- Example:
- \qml
- Item { width: 100; height: 200 }
- \endqml
-
- \sa {QML Basic Types}
- * /
- \endcode
-
- QDoc outputs this as \l{http://doc.qt.io/qt-5/qml-int.html}
- {qml-int.html}.
-
- \target qmlclass-command
- \section1 \\qmlclass
-
- This command is deprecated. Use \l{qmltype-command} {\\qmltype}
- instead.
-
- The \\qmlclass command is for documenting a QML type that is
- instantiated by a C++ class. The command has two arguments. The
- first argument is the name of the QML type. The second argument
- is the name of the C++ class that instantiates the QML type.
-
- \code
- / *!
- \qmlclass Transform QGraphicsTransform
- \ingroup qml-transform-elements
- \since 4.7
- \brief Provides a way of building advanced transformations on Items.
-
- The Transform element is a base type which cannot be
- instantiated directly. The following concrete Transform types
- are available:
-
- \list
- \li \l Rotation
- \li \l Scale
- \li \l Translate
- \endlist
-
- The Transform elements let you create and control advanced
- transformations that can be configured independently using
- specialized properties.
-
- You can assign any number of Transform elements to an \l
- Item. Each Transform is applied in order, one at a time.
-
- * /
- \endcode
-
- This example generates the
- \l {https://doc.qt.io/qt-5/qml-qtquick-transform.html} {QML Transform}
- page. The \\qmlclass comment should include the \l
- {since-command} {\\since} command, because all QML types are
- new. It should also include the \l{brief-command} {\\brief}
- command. If a type is a member of a group of QML
- types, it should also include one or more \l{ingroup-command}
- {\\ingroup} commands.
-
- \target qmlmethod-command
- \section1 \\qmlmethod
-
- The \\qmlmethod command is for documenting a QML method. The
- argument is the complete method signature, including return
- type and parameter names and types.
-
- \code
- / *!
- \qmlmethod void TextInput::select(int start, int end)
-
- Causes the text from \a start to \a end to be selected.
-
- If either start or end is out of range, the selection is not changed.
-
- After having called this, selectionStart will become the lesser, and
- selectionEnd the greater (regardless of the order passed to this method).
-
- \sa selectionStart, selectionEnd
- * /
- \endcode
-
- QDoc includes this documentation on the element reference page for the
- \l{http://doc.qt.io/qt-5/qml-qtquick-textinput.html#select-method}
- {TextInput} element.
-
- \target qmltype-command
- \section1 \\qmltype
-
- 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.
-
- \code
- / *!
- \qmltype Transform
- \instantiates QGraphicsTransform
- \ingroup qml-transform-elements
- \since 4.7
- \brief The Transform elements provide a way to build
- advanced transformations on Items.
-
- The Transform element is a base type which cannot be
- instantiated directly. The concrete Transform types are:
-
- \list
- \li \l Rotation
- \li \l Scale
- \li \l Translate
- \endlist
-
- The Transform elements let you create and control advanced
- transformations that can be configured independently using
- specialized properties.
-
- You can assign any number of Transform elements to an \l
- Item. Each Transform is applied in order, one at a time.
-
- * /
- \endcode
-
- The example generates the \l
- {https://doc.qt.io/qt-5/qml-qtquick-transform.html} {QML Transform}
- page. 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
- 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,
- the \\qmltype comment should include one or more \l{ingroup-command}
- {\\ingroup} commands.
-
-
- \target qmlproperty-command
- \section1 \\qmlproperty
-
- The \\qmlproperty command is for documenting a QML property. The
- argument is the rest of the line. The argument text should be the
- property type, followed by the QML type name, the \c{::}
- qualifier, and finally the property name. If we have a QML
- property named \c x in QML type \c Translate, and the property
- has type \c {real}, the \\qmlproperty for it would look like this:
-
- \code
- / *!
- \qmlproperty real Translate::x
-
- The translation along the X axis.
- * /
- \endcode
-
- QDoc includes this QML property on the QML reference page for the
- \l {http://doc.qt.io/qt-5/qml-qtquick-translate.html} {Translate}
- element.
-
- If the QML property is of enumeration type, or it holds a bit-wise
- combination of flags, the \l{value-command}{\\value} command can
- be used to document the acceptable values.
-
- \target qmlsignal-command
- \section1 \\qmlsignal
-
- The \\qmlsignal command is for documenting a QML signal.
- The argument is the rest of the line. The arguments should be: the QML type
- where the signal is declared, the \c{::} qualifier, and finally the signal
- name. If we have a QML signal named \c clicked(), the documentation for it
- would look like this:
-
- \code
- / *!
- \qmlsignal QtQuick::MouseArea::clicked(MouseEvent mouse)
- This signal is emitted when there is a click. A click is defined as a
- press followed by a release, both inside the MouseArea.
- * /
- \endcode
-
- QDoc includes this documentation on the QML reference page for the
- \l{http://doc.qt.io/qt-5/qml-qtquick-mousearea.html#clicked-signal}
- {MouseArea} element.
-
- \target qmlmodule-command
- \section1 \\qmlmodule
-
- Insert the \c{\\qmlmodule} command to create a \c QML module page. A QML
- module is a collection of QML types or any related material. This
- command is similar to the \l{group-command}.
-
- A QML class may belong to a module by inserting the
- \l{inqmlmodule-command}{\\inqmlmodule} command as a topic command.
- Every member of a group must be linked to using the module name and two
- colons (\c{::}).
-
- \code
- \beginqdoc
- A link to the TabWidget of the UI Component is \l {UIComponent::TabWidget}.
- \endqdoc
- \endcode
-
- QDoc will generate a page for the module with a listing of the members
- of the module.
-
- \code
- \qmlmodule ClickableComponents
-
- This is a list of the Clickable Components set. A Clickable component
- responds to a \c clicked() event.
- \endcode
-
- \target inqmlmodule-command
- \section1 \\inqmlmodule
-
- A QML class may belong to a \l{qmlmodule-command}{QML module} by inserting
- the \l{inqmlmodule-command}{\\inqmlmodule} command as a topic command, with
- the module name (without a version number) as the only argument. Every
- member of a group must be linked to using the module name and two colons
- (\c{::}).
-
- \code
- \qmltype ClickableButton
- \inqmlmodule ClickableComponents
-
- A clickable button that responds to the \c click() event.
- \endcode
-
- To link to the \c ClickableButton, use the
- \c{\l ClickableComponents::ClickableButton} format.
-
- The \l {noautolist-command} {\\noautolist} command can be used here
- to omit the automatically generated list of types at the end.
-
- \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.
-
- If the QML type is not instantiated by a C++ class, this command
- is not used.
-
- \code
- / *!
- \qmltype Transform
- \instantiates QGraphicsTransform
- \ingroup qml-transform-elements
- \since 4.7
- \brief Provides elements provide a way to build
- advanced transformations on Items.
-
- The Transform element is a base type which cannot be
- instantiated directly.
- * /
- \endcode
-
- The example generates the \l
- {https://doc.qt.io/qt-5/qml-qtquick-transform.html} {QML Transform}
- page. 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
-
- \target typealias-command
- \section1 \\typealias
-
- The \\typealias command is similar to \l {typedef-command}{\\typedef},
- but specific to documenting a C++ type alias:
-
- \code
- class Foo
- {
- public:
- using ptr = void*;
- // ...
- }
- \endcode
-
- This can be documented as
-
- \badcode *
- /\1!
- \typealias Foo::ptr
- \1/
- \endcode
-
- QDoc will automatically generate a sentence in the documentation describing
- the alias:
-
- \quotation
- This is a type alias for \c {void*}.
- \endquotation
-
- The \\typealias command was introduced in QDoc 5.15.
-
- See also \l {typedef-command}{\\typedef}.
-
- \target typedef-command
- \section1 \\typedef
-
- The \\typedef command is for documenting a C++ typedef. The
- argument is the name of the typedef. The documentation for
- the typedef will be included in the reference documentation
- for the class, namespace, or header file in which the typedef
- is declared. To relate the \\typedef to a class, namespace, or
- header file, the \\typedef comment must contain a
- \l {relates-command} {\\relates} command.
-
- \code
- / *!
- \typedef QObjectList
- \relates QObject
-
- Synonym for QList<QObject>.
- * /
- \endcode
-
- QDoc includes this in \c {qobject.html} as:
-
- \quotation
- \raw HTML
- <h3>typedef QObjectList</h3>
- \endraw
-
- Synonym for QList<QObject>.
- \endquotation
-
- Another, although more rare, example:
-
- \code
- / *!
- \typedef QMsgHandler
- \relates QtGlobal
-
- This is a typedef for a pointer to a function with the
- following signature:
-
- \code
- void myMsgHandler(QtMsgType, const char *);
- \ endcode
-
- \sa QtMsgType, qInstallMessageHandler()
- * /
- \endcode
-
- QDoc includes this in \c {qtglobal.html} as:
-
- \quotation
- \raw HTML
- <h3>typedef QtMsgHandler</h3>
- \endraw
-
- This is a typedef for a pointer to a function with the
- following signature:
-
- \raw HTML
- <tt>
- <pre> void myMsgHandler(QtMsgType, const char *);</pre>
- </tt>
- \endraw
-
- See also QtMsgType and qInstallMessageHandler().
- \endquotation
-
- Other typedefs are located on the reference page for the class
- that defines them.
-
- \code
- / *!
- \typedef QList::Iterator
-
- Qt-style synonym for QList::iterator.
- * /
- \endcode
-
- QDoc includes this one on the reference page for class QList as:
-
- \quotation
- \raw HTML
- <h3>typedef QList::Iterator</h3>
- \endraw
-
- Qt-style synonym for QList::iterator.
- \endquotation
-
- See also \l {typealias-command}{\\typealias}.
-
- \target variable-command
- \section1 \\variable
-
- The \\variable command is for documenting a class member variable
- or a constant. The argument is the variable or constant name. The
- \\variable command comment includes a \l {brief-command} {\\brief}
- command. QDoc generates the documentation based on the text from
- \\brief command.
-
- The documentation will be located in the in the associated class,
- header file, or namespace documentation.
-
- In case of a member variable:
-
- \code
- / *!
- \variable QStyleOption::palette
- \brief The palette that should be used when painting
- the control
- * /
- \endcode
-
- QDoc includes this in qstyleoption.html as:
-
- \quotation
- \raw HTML
- <h3>
- <a href="http://doc.qt.io/qt-5/qpalette.html">
- QPalette
- </a>
- QStyleOption::palette
- </h3>
- \endraw
-
- This variable holds the palette that should be used
- when painting the control.
- \endquotation
-
- You can also document constants with the \\variable command. For
- example, suppose you have the \c Type and \c UserType constants in
- the QTreeWidgetItem class:
-
- \code
- enum { Type = 0, UserType = 1000 };
- \endcode
-
- For these, the \\variable command can be used this way:
-
- \code
- / *!
- \variable QTreeWidgetItem::Type
-
- The default type for tree widget items.
-
- \sa UserType, type()
- * /
- \endcode
- \code
- / *!
- \variable QTreeWidgetItem::UserType
-
- The minimum value for custom types. Values below
- UserType are reserved by Qt.
-
- \sa Type, type()
- * /
- \endcode
-
- QDoc includes these in qtreewidget.html as:
-
- \quotation
- \raw HTML
- <h3>
- const int QTreeWidgetItem::Type
- </h3>
- \endraw
-
- The default type for tree widget items.
-
- See also \l {QTreeWidgetItem::UserType} {UserType} and \l
- {QTreeWidgetItem::type()} {type()}.
-
- \raw HTML
- <h3>
- const int QTreeWidgetItem::UserType
- </h3>
- \endraw
-
- The minimum value for custom types. Values below
- UserType are reserved by Qt.
-
- See also \l {QTreeWidgetItem::Type} {Type} and
- \l{QTreeWidgetItem::type()} {type()}.
-
- \endquotation
-*/
diff --git a/src/qdoc/doc/qdoc-manual.qdoc b/src/qdoc/doc/qdoc-manual.qdoc
deleted file mode 100644
index 1650865b2..000000000
--- a/src/qdoc/doc/qdoc-manual.qdoc
+++ /dev/null
@@ -1,73 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \page qdoc-index.html
- \nextpage Introduction to QDoc
-
- \title QDoc Manual
-
- \list
- \li \l {Introduction to QDoc}
- \li \l {Getting Started with QDoc}
- \li \l {Command Index}
- \li \l {Topic Commands}
- \li \l {Context Commands}
- \list
- \li \l {Document Navigation}
- \li \l {Status}
- \li \l {Thread Support}
- \li \l {Relating Things}
- \li \l {Grouping Things}
- \li \l {Naming Things}
- \endlist
- \li \l{Markup Commands}
- \list
- \li \l {Text Markup}
- \li \l {Document Structure}
- \li \l {Including Code Inline}
- \li \l {Including External Code}
- \li \l {Creating Links}
- \li \l {Including Images}
- \li \l {Tables and Lists}
- \li \l {Special Content}
- \li \l {Miscellaneous}
- \endlist
- \li \l {The QDoc Configuration File}
- \list
- \li \l {Generic Configuration Variables}
- \li \l {Creating Help Project Files}
- \li \l {C++ Specific Configuration Variables}
- \li \l {Format-specific Configuration Variables}
- \li \l {Supporting Derived Projects}
- \li \l {Example Manifest Files}
- \li \l {qtgui.qdocconf}
- \li \l {minimum.qdocconf}
- \endlist
- \endlist
-*/
-
diff --git a/src/qdoc/doc/qdoc-minimum-qdocconf.qdoc b/src/qdoc/doc/qdoc-minimum-qdocconf.qdoc
deleted file mode 100644
index 0955a414d..000000000
--- a/src/qdoc/doc/qdoc-minimum-qdocconf.qdoc
+++ /dev/null
@@ -1,89 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-/*!
-\page qdoc-minimum-qdocconf.html
-\keyword minimal-qdocconf
-\title A Minimal qdocconf File
-
-\brief Describes a minimal .qdocconf file
-
-Below you will find the full contents of qtgui.qdocconf. The subsequent section
-will discuss every statement in the qdocconf file.
-
-Each line from the qdocconf file is first quoted. Below each statement you will
-find the meaning.
-
-\badcode
- include(compat.qdocconf)
- outputdir = html
- headerdirs = .
- sourcedirs = .
- exampledirs = .
- imagedirs = ./images
-\endcode
-
-\b Notes:
-
-\badcode
- include(compat.qdocconf)
-\endcode
-
-For compatibility with older versions of QDoc, it is recommended
-to include compat.qdocconf.
-
-\code
- outputdir = html
-\endcode
-
-QDoc will put the documentation generated in the html directory.
-
-\badcode
- headerdirs = .
-\endcode
-
-The header file associated with the \e .cpp source files can be found in the
-current directory.
-
-\badcode
- sourcedirs = .
-\endcode
-
-The current directory is the directory containing the source files: the \e .cpp
-and \e .qdoc files used in the documentation.
-
-\badcode
- exampledirs = .
-\endcode
-
-The source code of the example files can be found in the current directory.
-
-\badcode
- imagedirs = ./images
-\endcode
-
-The image files can be found in the underlying directory \c images.
-*/
diff --git a/src/qdoc/doc/qtgui-qdocconf.qdoc b/src/qdoc/doc/qtgui-qdocconf.qdoc
deleted file mode 100644
index 89c46ff94..000000000
--- a/src/qdoc/doc/qtgui-qdocconf.qdoc
+++ /dev/null
@@ -1,303 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
-
-\page qtgui-qdocconf.html
-\title qtgui.qdocconf with Comments
-
-\brief A walkthrough of a typical qdocconf file.
-
-This document goes through a typical Qt 5 qdocconf file. The contents is taken from
-Qt GUI's \e qtgui.qdocconf file.
-
-Below you will find the full contents of \c qtgui.qdocconf. The subsequent section will discuss
-every statement in the qdocconf file.
-
-\badcode
- include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
-
- project = QtGui
- description = Qt GUI Reference Documentation
- url = http://doc.qt.io/qt-5
- version = $QT_VERSION
-
- examplesinstallpath = gui
-
- qhp.projects = QtGui
-
- qhp.QtGui.file = qtgui.qhp
- qhp.QtGui.namespace = org.qt-project.qtgui.$QT_VERSION_TAG
- qhp.QtGui.virtualFolder = qtgui
- qhp.QtGui.indexTitle = Qt GUI
- qhp.QtGui.indexRoot =
-
- qhp.QtGui.filterAttributes = qtgui $QT_VERSION qtrefdoc
- qhp.QtGui.customFilters.Qt.name = Qtgui $QT_VERSION
- qhp.QtGui.customFilters.Qt.filterAttributes = qtgui $QT_VERSION
-
- qhp.QtGui.subprojects = classes
- qhp.QtGui.subprojects.classes.title = C++ Classes
- qhp.QtGui.subprojects.classes.indexTitle = Qt GUI C++ Classes
- qhp.QtGui.subprojects.classes.selectors = class fake:headerfile
- qhp.QtGui.subprojects.classes.sortPages = true
-
- tagfile = ../../../doc/qtgui/qtgui.tags
-
- depends += \
- qtcore \
- qtnetwork \
- qtopengl \
- qtsvg \
- qtqml \
- qtquick \
- qtwidgets \
- qtdoc
-
- headerdirs += ..
-
- sourcedirs += .. \
- ../../../examples/gui/doc/src
-
- excludedirs = ../../../examples/gui/doc/src/tmp
-
- exampledirs += ../../../examples/gui \
- snippets
-
- imagedirs += images \
- ../../../examples/gui/doc/images \
- ../../../doc/src/images \
-\endcode
-
-\title Qtgui.qdocconf with notes
-
-\badcode
- include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
-\endcode
-
-QDoc inherits the default templates, macros, and settings from the directory
-specified from the \c $QT_INSTALL_DOCS variable. \c qmake prints the value of
-the variable.
-\badcode
- qmake -query
-\endcode
-
-\b {See also}: \l {include}.
-
-\badcode
- project = QtGui
-\endcode
-
-The \c project variable sets the name of the QDoc build. This name is also
-used to form the index file, which, in this case, will be \e qtgui.index. The
-name of the index file doesn't adopt the uppercase letters of the project name.
-
-\b {See also}: \l {project}.
-
-\badcode
- description = Qt GUI Reference Documentation
-\endcode
-
-A short description of the project concerned.
-
-\badcode
- url = http://doc.qt.io/qt-5
-\endcode
-
-The \c url variable holds the base url of the project.
-
-The URL is stored in the generated index file for the project.
-QDoc will use this as the base URL when constructing external links
-to content listed in the index.
-
-\note QDoc omits this value when the -installdir argument
-is specified when running QDoc.
-
-\target examplesinstallpath
-
-\badcode
- examplesinstallpath = gui
-\endcode
-
-This \c examplesinstallpath variable indicates that the examples will be
-installed in the \e gui directory under the parent examples directory
-(for Qt, this is $QT_INSTALL_EXAMPLES).
-
-\note The examplepath variable has to match the example directory specified in
- \c exampledirs.
-
-\note It is possible to override the \c exampleinstallpath for a specific
- \l {example-command}{\\example} using the \l {meta-command}{\\meta}
- command.
-
-\b {See also}: \l {exampledirs} and \l {meta-command}{\\meta}.
-
-\badcode
- qhp.projects = QtGui
- qhp.QtGui.file = qtgui.qhp
-\endcode
-
-The following parameters are for creating a QHP file (\e .qhp). The
-\e qhelpgenerator program can convert the QHP file into a QCH file (\e .qch),
-which can be opened in Qt Assistant or Qt Creator.
-
-\badcode
- qhp.QtGui.namespace = org.qt-project.qtgui.$QT_VERSION_TAG
-\endcode
-
-A unique identifier which enables QHelpEngine to retrieve the helpfile
-from a given link. This namespace is also used as a base url for links
-to the helpfile.
-
-\badcode
- qhp.QtGui.virtualFolder = qtgui
-\endcode
-
-Virtual folders group documentation together into a single location. A
-virtual folder will become the root directory of all files referenced in
-a compressed help file.
-
-When two manuals are located in the same virtual folder, it is possible to
-refer to sections of the other manual using relative paths. The virtual
-folder tag is mandatory and the folder must not contain any '/'.
-
-\badcode
- qhp.QtGui.indexTitle = Qt GUI
-\endcode
-
-This is the title of the page that has the contents.
-
-\badcode
- qhp.QtGui.indexRoot =
-\endcode
-
-Specifies the title of the root (namespace) page to generate the documentation for.
-Typically defined as an empty string.
-
-\badcode
- qhp.QtGui.filterAttributes = qtgui $QT_VERSION qtrefdoc
- qhp.QtGui.customFilters.Qt.name = QtGui $QT_VERSION
- qhp.QtGui.customFilters.Qt.filterAttributes = qtgui $QT_VERSION
-\endcode
-
-The documentation set (one per QDoc project) can have any number of filter
-attributes assigned to it. A filter attribute is an ordinary string which
-can be freely chosen. Additionally, custom filters that reference above
-attributes can be defined. Qt Assistant will display the name of the custom
-filter in its \gui{Filtered by} drop-down list. Only the documentation sets
-that have their filter attributes match the attributes of the selected
-custom filter will be shown.
-
-\badcode
- qhp.QtGui.subprojects = classes
- qhp.QtGui.subprojects.classes.title = C++ Classes
- qhp.QtGui.subprojects.classes.indexTitle = Qt GUI C++ Classes
-\endcode
-The subprojects specify the sections that are displayed in the table of contents
-for this project. In this example, the subproject, which is displayed in
-the Assistant's sidebar, is named "C++ Classes" and its index is the page
-titled "QT GUI C++ Classes".
-
-\badcode
- qhp.QtGui.subprojects.classes.selectors = class fake:headerfile
-\endcode
-
-Lists all C++ classes and header files.
-
-See \l {Creating Help Project Files} for more information.
-
-\badcode
- tagfile = ../../../doc/qtgui/qtgui.tags
-\endcode
-
-This specifies the Doxygen tag file that needs to be written when the html is generated
-by QDoc.
-
-\badcode
-depends += \
- qtcore \
- qtnetwork \
- qtopengl \
- qtsvg \
- qtqml \
- qtquick \
- qtwidgets \
- qtdoc
-\endcode
-
-Specifies the modules QDoc needs to load for generating output for Qt GUI.
-QDoc loads the index files for all modules listed in the depends statement in
-order to enable linking to pages in these modules.
-
-\badcode
- headerdirs += ..
-\endcode
-
-Add the parent directory to the list of directories containing the header files
-associated with the \e .cpp source files.
-
-\badcode
- sourcedirs += .. \
- ../../../examples/gui/doc/src
-\endcode
-
-Add the specified directories to the list of directories containing the \e .cpp and
-\e .qdoc files used in the documentation.
-
-\badcode
- excludedirs = ../../../examples/gui/doc/src/tmp
-\endcode
-
-The \c excludedirs variable is for listing directories that should not be processed
-by QDoc, even if the same directories are included by the \c sourcedirs or \c headerdirs
-variables.
-
-When executed, QDoc will ignore the directories listed.
-\b {See also}: \l {excludefiles}.
-
-\badcode
- exampledirs += ../../../examples/gui \
- snippets
-\endcode
-\b {See also}: \l {examples-variable}{examples}, \l {examplesinstallpath}.
-
-Add the two directories specified to the list of directories containing the source
-code of the example files.
-
-If QDoc encounters both \c exampledirs and \c examples, it will look first in the
-\c examples directory. QDoc will accept the first matching file it finds. QDoc will
-search in the directories specified, not in their subdirectories.
-
-\badcode
- imagedirs += images \
- ../../../examples/gui/doc/images \
- ../../../doc/src/images \
-\endcode
-
-Add the directories specified above to the list of directories where the images
-can be found.
-*/
diff --git a/src/qdoc/docbookgenerator.cpp b/src/qdoc/docbookgenerator.cpp
deleted file mode 100644
index a902db3fc..000000000
--- a/src/qdoc/docbookgenerator.cpp
+++ /dev/null
@@ -1,4298 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 Thibaut Cuvelier
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "docbookgenerator.h"
-
-#include "access.h"
-#include "aggregate.h"
-#include "classnode.h"
-#include "codemarker.h"
-#include "collectionnode.h"
-#include "config.h"
-#include "enumnode.h"
-#include "examplenode.h"
-#include "functionnode.h"
-#include "generator.h"
-#include "node.h"
-#include "propertynode.h"
-#include "quoter.h"
-#include "qdocdatabase.h"
-#include "qmlpropertynode.h"
-#include "separator.h"
-#include "sharedcommentnode.h"
-#include "typedefnode.h"
-#include "variablenode.h"
-
-#include <QtCore/qiterator.h>
-#include <QtCore/qlist.h>
-#include <QtCore/qmap.h>
-#include <QtCore/quuid.h>
-#include <QtCore/qurl.h>
-#include <QtCore/qregularexpression.h>
-#include <QtCore/qversionnumber.h>
-
-#include <cctype>
-
-QT_BEGIN_NAMESPACE
-
-static const char dbNamespace[] = "http://docbook.org/ns/docbook";
-static const char xlinkNamespace[] = "http://www.w3.org/1999/xlink";
-
-inline void DocBookGenerator::newLine()
-{
- writer->writeCharacters("\n");
-}
-
-void DocBookGenerator::startSectionBegin()
-{
- writer->writeStartElement(dbNamespace, "section");
- newLine();
- writer->writeStartElement(dbNamespace, "title");
-}
-
-void DocBookGenerator::startSectionBegin(const QString &id)
-{
- writer->writeStartElement(dbNamespace, "section");
- writer->writeAttribute("xml:id", id);
- newLine();
- writer->writeStartElement(dbNamespace, "title");
-}
-
-void DocBookGenerator::startSectionEnd()
-{
- writer->writeEndElement(); // title
- newLine();
-}
-
-void DocBookGenerator::startSection(const QString &id, const QString &title)
-{
- startSectionBegin(id);
- writer->writeCharacters(title);
- startSectionEnd();
-}
-
-void DocBookGenerator::endSection()
-{
- writer->writeEndElement(); // section
- newLine();
-}
-
-void DocBookGenerator::writeAnchor(const QString &id)
-{
- writer->writeEmptyElement(dbNamespace, "anchor");
- writer->writeAttribute("xml:id", id);
- newLine();
-}
-
-/*!
- Initializes the DocBook output generator's data structures
- from the configuration (Config).
- */
-void DocBookGenerator::initializeGenerator()
-{
- // Excerpts from HtmlGenerator::initializeGenerator.
- Generator::initializeGenerator();
- config = &Config::instance();
-
- project = config->getString(CONFIG_PROJECT);
-
- projectDescription = config->getString(CONFIG_DESCRIPTION);
- if (projectDescription.isEmpty() && !project.isEmpty())
- projectDescription = project + QLatin1String(" Reference Documentation");
-
- naturalLanguage = config->getString(CONFIG_NATURALLANGUAGE);
- if (naturalLanguage.isEmpty())
- naturalLanguage = QLatin1String("en");
-
- buildversion = config->getString(CONFIG_BUILDVERSION);
-}
-
-QString DocBookGenerator::format()
-{
- return QStringLiteral("DocBook");
-}
-
-/*!
- Returns "xml" for this subclass of Generator.
- */
-QString DocBookGenerator::fileExtension() const
-{
- return QStringLiteral("xml");
-}
-
-/*!
- Generate the documentation for \a relative. i.e. \a relative
- is the node that represents the entity where a qdoc comment
- was found, and \a text represents the qdoc comment.
- */
-bool DocBookGenerator::generateText(const Text &text, const Node *relative, CodeMarker *marker)
-{
- Q_UNUSED(marker);
- // From Generator::generateText.
- if (!text.firstAtom())
- return false;
-
- int numAtoms = 0;
- initializeTextOutput();
- generateAtomList(text.firstAtom(), relative, true, numAtoms);
- closeTextSections();
- return true;
-}
-
-/*!
- Generate the text for \a atom relatively to \a relative.
- \a generate indicates if output to \a writer is expected.
- The number of generated atoms is returned in the argument
- \a numAtoms. The returned value is the first atom that was not
- generated.
- */
-const Atom *DocBookGenerator::generateAtomList(const Atom *atom, const Node *relative,
- bool generate, int &numAtoms)
-{
- Q_ASSERT(writer);
- // From Generator::generateAtomList.
- while (atom) {
- switch (atom->type()) {
- case Atom::FormatIf: {
- int numAtoms0 = numAtoms;
- atom = generateAtomList(atom->next(), relative, generate, numAtoms);
- if (!atom)
- return nullptr;
-
- if (atom->type() == Atom::FormatElse) {
- ++numAtoms;
- atom = generateAtomList(atom->next(), relative, false, numAtoms);
- if (!atom)
- return nullptr;
- }
-
- if (atom->type() == Atom::FormatEndif) {
- if (generate && numAtoms0 == numAtoms) {
- relative->location().warning(QStringLiteral("Output format %1 not handled %2")
- .arg(format())
- .arg(outFileName()));
- Atom unhandledFormatAtom(Atom::UnhandledFormat, format());
- generateAtomList(&unhandledFormatAtom, relative, generate, numAtoms);
- }
- atom = atom->next();
- }
- } break;
- case Atom::FormatElse:
- case Atom::FormatEndif:
- return atom;
- default:
- int n = 1;
- if (generate) {
- n += generateAtom(atom, relative);
- numAtoms += n;
- }
- while (n-- > 0)
- atom = atom->next();
- }
- }
- return nullptr;
-}
-
-/*!
- Generate DocBook from an instance of Atom.
- */
-int DocBookGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker)
-{
- Q_ASSERT(writer);
- Q_UNUSED(marker);
- // From HtmlGenerator::generateAtom, without warning generation.
- int idx = 0;
- int skipAhead = 0;
- static bool inPara = false;
-
- switch (atom->type()) {
- case Atom::AutoLink:
- case Atom::NavAutoLink:
- if (!inLink && !m_inContents && !m_inSectionHeading) {
- const Node *node = nullptr;
- QString link = getAutoLink(atom, relative, &node);
- if (!link.isEmpty() && node && node->status() == Node::Obsolete
- && relative->parent() != node && !relative->isObsolete()) {
- link.clear();
- }
- if (link.isEmpty()) {
- writer->writeCharacters(atom->string());
- } else {
- beginLink(link, node, relative);
- generateLink(atom);
- endLink();
- }
- } else {
- writer->writeCharacters(atom->string());
- }
- break;
- case Atom::BaseName:
- break;
- case Atom::BriefLeft:
- if (!hasBrief(relative)) {
- skipAhead = skipAtoms(atom, Atom::BriefRight);
- break;
- }
- writer->writeStartElement(dbNamespace, "para");
- rewritePropertyBrief(atom, relative);
- break;
- case Atom::BriefRight:
- if (hasBrief(relative)) {
- writer->writeEndElement(); // para
- newLine();
- }
- break;
- case Atom::C:
- // This may at one time have been used to mark up C++ code but it is
- // now widely used to write teletype text. As a result, text marked
- // with the \c command is not passed to a code marker.
- writer->writeTextElement(dbNamespace, "code", plainCode(atom->string()));
- break;
- case Atom::CaptionLeft:
- writer->writeStartElement(dbNamespace, "title");
- break;
- case Atom::CaptionRight:
- endLink();
- writer->writeEndElement(); // title
- newLine();
- break;
- case Atom::Qml:
- writer->writeStartElement(dbNamespace, "programlisting");
- writer->writeAttribute("language", "qml");
- writer->writeCharacters(atom->string());
- writer->writeEndElement(); // programlisting
- newLine();
- break;
- case Atom::JavaScript:
- writer->writeStartElement(dbNamespace, "programlisting");
- writer->writeAttribute("language", "js");
- writer->writeCharacters(atom->string());
- writer->writeEndElement(); // programlisting
- newLine();
- break;
- case Atom::CodeNew:
- writer->writeTextElement(dbNamespace, "para", "you can rewrite it as");
- newLine();
- writer->writeStartElement(dbNamespace, "programlisting");
- writer->writeAttribute("language", "cpp");
- writer->writeAttribute("role", "new");
- writer->writeCharacters(atom->string());
- writer->writeEndElement(); // programlisting
- newLine();
- break;
- case Atom::Code:
- writer->writeStartElement(dbNamespace, "programlisting");
- writer->writeAttribute("language", "cpp");
- writer->writeCharacters(atom->string());
- writer->writeEndElement(); // programlisting
- newLine();
- break;
- case Atom::CodeOld:
- writer->writeTextElement(dbNamespace, "para", "For example, if you have code like");
- newLine();
- Q_FALLTHROUGH();
- case Atom::CodeBad:
- writer->writeStartElement(dbNamespace, "programlisting");
- writer->writeAttribute("language", "cpp");
- writer->writeAttribute("role", "bad");
- writer->writeCharacters(atom->string());
- writer->writeEndElement(); // programlisting
- newLine();
- break;
- case Atom::DivLeft:
- case Atom::DivRight:
- break;
- case Atom::FootnoteLeft:
- writer->writeStartElement(dbNamespace, "footnote");
- newLine();
- writer->writeStartElement(dbNamespace, "para");
- break;
- case Atom::FootnoteRight:
- writer->writeEndElement(); // para
- newLine();
- writer->writeEndElement(); // footnote
- break;
- case Atom::FormatElse:
- case Atom::FormatEndif:
- case Atom::FormatIf:
- break;
- case Atom::FormattingLeft:
- if (atom->string() == ATOM_FORMATTING_BOLD) {
- writer->writeStartElement(dbNamespace, "emphasis");
- writer->writeAttribute("role", "bold");
- } else if (atom->string() == ATOM_FORMATTING_ITALIC) {
- writer->writeStartElement(dbNamespace, "emphasis");
- } else if (atom->string() == ATOM_FORMATTING_UNDERLINE) {
- writer->writeStartElement(dbNamespace, "emphasis");
- writer->writeAttribute("role", "underline");
- } else if (atom->string() == ATOM_FORMATTING_SUBSCRIPT) {
- writer->writeStartElement(dbNamespace, "sub");
- } else if (atom->string() == ATOM_FORMATTING_SUPERSCRIPT) {
- writer->writeStartElement(dbNamespace, "sup");
- } else if (atom->string() == ATOM_FORMATTING_TELETYPE
- || atom->string() == ATOM_FORMATTING_PARAMETER) {
- writer->writeStartElement(dbNamespace, "code");
-
- if (atom->string() == ATOM_FORMATTING_PARAMETER)
- writer->writeAttribute("role", "parameter");
- }
- break;
- case Atom::FormattingRight:
- if (atom->string() == ATOM_FORMATTING_BOLD || atom->string() == ATOM_FORMATTING_ITALIC
- || atom->string() == ATOM_FORMATTING_UNDERLINE
- || atom->string() == ATOM_FORMATTING_SUBSCRIPT
- || atom->string() == ATOM_FORMATTING_SUPERSCRIPT
- || atom->string() == ATOM_FORMATTING_TELETYPE
- || atom->string() == ATOM_FORMATTING_PARAMETER) {
- writer->writeEndElement();
- }
- if (atom->string() == ATOM_FORMATTING_LINK)
- endLink();
- break;
- case Atom::AnnotatedList:
- if (const CollectionNode *cn = m_qdb->getCollectionNode(atom->string(), Node::Group))
- generateList(cn, atom->string());
- break;
- case Atom::GeneratedList:
- if (atom->string() == QLatin1String("annotatedclasses")
- || atom->string() == QLatin1String("attributions")
- || atom->string() == QLatin1String("namespaces")) {
- const NodeMultiMap things = atom->string() == QLatin1String("annotatedclasses")
- ? m_qdb->getCppClasses()
- : atom->string() == QLatin1String("attributions") ? m_qdb->getAttributions()
- : m_qdb->getNamespaces();
- generateAnnotatedList(relative, things.values(), atom->string());
- } else if (atom->string() == QLatin1String("annotatedexamples")
- || atom->string() == QLatin1String("annotatedattributions")) {
- const NodeMultiMap things = atom->string() == QLatin1String("annotatedexamples")
- ? m_qdb->getAttributions()
- : m_qdb->getExamples();
- generateAnnotatedLists(relative, things, atom->string());
- } else if (atom->string() == QLatin1String("classes")
- || atom->string() == QLatin1String("qmlbasictypes")
- || atom->string() == QLatin1String("qmltypes")) {
- const NodeMultiMap things = atom->string() == QLatin1String("classes")
- ? m_qdb->getCppClasses()
- : atom->string() == QLatin1String("qmlbasictypes") ? m_qdb->getQmlBasicTypes()
- : m_qdb->getQmlTypes();
- generateCompactList(Generic, relative, things, QString(), atom->string());
- } else if (atom->string().contains("classes ")) {
- QString rootName = atom->string().mid(atom->string().indexOf("classes") + 7).trimmed();
- generateCompactList(Generic, relative, m_qdb->getCppClasses(), rootName,
- atom->string());
- } else if ((idx = atom->string().indexOf(QStringLiteral("bymodule"))) != -1) {
- QString moduleName = atom->string().mid(idx + 8).trimmed();
- Node::NodeType type = typeFromString(atom);
- QDocDatabase *qdb = QDocDatabase::qdocDB();
- if (const CollectionNode *cn = qdb->getCollectionNode(moduleName, type)) {
- if (type == Node::Module) {
- NodeMap m;
- cn->getMemberClasses(m);
- if (!m.isEmpty())
- generateAnnotatedList(relative, m.values(), atom->string());
- } else {
- generateAnnotatedList(relative, cn->members(), atom->string());
- }
- }
- } else if (atom->string().startsWith("examplefiles")
- || atom->string().startsWith("exampleimages")) {
- if (relative->isExample())
- qDebug() << "GENERATE FILE LIST CALLED" << relative->name() << atom->string();
- } else if (atom->string() == QLatin1String("classhierarchy")) {
- generateClassHierarchy(relative, m_qdb->getCppClasses());
- } else if (atom->string().startsWith("obsolete")) {
- ListType type = atom->string().endsWith("members") ? Obsolete : Generic;
- QString prefix = atom->string().contains("cpp") ? QStringLiteral("Q") : QString();
- const NodeMultiMap &things = atom->string() == QLatin1String("obsoleteclasses")
- ? m_qdb->getObsoleteClasses()
- : atom->string() == QLatin1String("obsoleteqmltypes")
- ? m_qdb->getObsoleteQmlTypes()
- : atom->string() == QLatin1String("obsoletecppmembers")
- ? m_qdb->getClassesWithObsoleteMembers()
- : m_qdb->getQmlTypesWithObsoleteMembers();
- generateCompactList(type, relative, things, prefix, atom->string());
- } else if (atom->string() == QLatin1String("functionindex")) {
- generateFunctionIndex(relative);
- } else if (atom->string() == QLatin1String("legalese")) {
- generateLegaleseList(relative);
- } else if (atom->string() == QLatin1String("overviews")
- || atom->string() == QLatin1String("cpp-modules")
- || atom->string() == QLatin1String("qml-modules")
- || atom->string() == QLatin1String("related")) {
- generateList(relative, atom->string());
- }
- break;
- case Atom::SinceList:
- // Table of contents, should automatically be generated by the DocBook processor.
- break;
- case Atom::LineBreak:
- case Atom::BR:
- case Atom::HR:
- // Not supported in DocBook.
- break;
- case Atom::Image: // mediaobject
- case Atom::InlineImage: { // inlinemediaobject
- QString tag = atom->type() == Atom::Image ? "mediaobject" : "inlinemediaobject";
- writer->writeStartElement(dbNamespace, tag);
- newLine();
-
- QString fileName = imageFileName(relative, atom->string());
- if (fileName.isEmpty()) {
- writer->writeStartElement(dbNamespace, "textobject");
- newLine();
- writer->writeStartElement(dbNamespace, "para");
- writer->writeTextElement(dbNamespace, "emphasis",
- "[Missing image " + atom->string() + "]");
- writer->writeEndElement(); // para
- newLine();
- writer->writeEndElement(); // textobject
- newLine();
- } else {
- if (atom->next() && !atom->next()->string().isEmpty())
- writer->writeTextElement(dbNamespace, "alt", atom->next()->string());
-
- writer->writeStartElement(dbNamespace, "imageobject");
- newLine();
- writer->writeEmptyElement(dbNamespace, "imagedata");
- writer->writeAttribute("fileref", fileName);
- newLine();
- writer->writeEndElement(); // imageobject
- newLine();
-
- setImageFileName(relative, fileName);
- }
-
- writer->writeEndElement(); // [inline]mediaobject
- if (atom->type() == Atom::Image)
- newLine();
- } break;
- case Atom::ImageText:
- break;
- case Atom::ImportantLeft:
- case Atom::NoteLeft: {
- QString tag = atom->type() == Atom::ImportantLeft ? "important" : "note";
- writer->writeStartElement(dbNamespace, tag);
- newLine();
- writer->writeStartElement(dbNamespace, "para");
- } break;
- case Atom::ImportantRight:
- case Atom::NoteRight:
- writer->writeEndElement(); // para
- newLine();
- writer->writeEndElement(); // note/important
- newLine();
- break;
- case Atom::LegaleseLeft:
- case Atom::LegaleseRight:
- break;
- case Atom::Link:
- case Atom::NavLink: {
- const Node *node = nullptr;
- QString link = getLink(atom, relative, &node);
- beginLink(link, node, relative); // Ended at Atom::FormattingRight
- skipAhead = 1;
- } break;
- case Atom::LinkNode: {
- const Node *node = CodeMarker::nodeForString(atom->string());
- beginLink(linkForNode(node, relative), node, relative);
- skipAhead = 1;
- } break;
- case Atom::ListLeft:
- if (inPara) {
- writer->writeEndElement(); // para
- newLine();
- inPara = false;
- }
- if (atom->string() == ATOM_LIST_BULLET) {
- writer->writeStartElement(dbNamespace, "itemizedlist");
- newLine();
- } else if (atom->string() == ATOM_LIST_TAG) {
- writer->writeStartElement(dbNamespace, "variablelist");
- newLine();
- } else if (atom->string() == ATOM_LIST_VALUE) {
- writer->writeStartElement(dbNamespace, "informaltable");
- newLine();
- writer->writeStartElement(dbNamespace, "thead");
- newLine();
- writer->writeStartElement(dbNamespace, "tr");
- newLine();
- writer->writeTextElement(dbNamespace, "th", "Constant");
- newLine();
-
- m_threeColumnEnumValueTable = isThreeColumnEnumValueTable(atom);
- if (m_threeColumnEnumValueTable && relative->nodeType() == Node::Enum) {
- // If not in \enum topic, skip the value column
- writer->writeTextElement(dbNamespace, "th", "Value");
- newLine();
- }
-
- writer->writeTextElement(dbNamespace, "th", "Description");
- newLine();
-
- writer->writeEndElement(); // tr
- newLine();
- writer->writeEndElement(); // thead
- newLine();
- } else {
- writer->writeStartElement(dbNamespace, "orderedlist");
-
- if (atom->next() != nullptr && atom->next()->string().toInt() > 1)
- writer->writeAttribute("startingnumber", atom->next()->string());
-
- if (atom->string() == ATOM_LIST_UPPERALPHA)
- writer->writeAttribute("numeration", "upperalpha");
- else if (atom->string() == ATOM_LIST_LOWERALPHA)
- writer->writeAttribute("numeration", "loweralpha");
- else if (atom->string() == ATOM_LIST_UPPERROMAN)
- writer->writeAttribute("numeration", "upperroman");
- else if (atom->string() == ATOM_LIST_LOWERROMAN)
- writer->writeAttribute("numeration", "lowerroman");
- else // (atom->string() == ATOM_LIST_NUMERIC)
- writer->writeAttribute("numeration", "arabic");
-
- newLine();
- }
- break;
- case Atom::ListItemNumber:
- break;
- case Atom::ListTagLeft:
- if (atom->string() == ATOM_LIST_TAG) {
- writer->writeStartElement(dbNamespace, "varlistentry");
- newLine();
- writer->writeStartElement(dbNamespace, "item");
- } else { // (atom->string() == ATOM_LIST_VALUE)
- QPair<QString, int> pair = getAtomListValue(atom);
- skipAhead = pair.second;
-
- writer->writeStartElement(dbNamespace, "tr");
- newLine();
- writer->writeStartElement(dbNamespace, "td");
- newLine();
- writer->writeStartElement(dbNamespace, "para");
- generateEnumValue(pair.first, relative);
- writer->writeEndElement(); // para
- newLine();
- writer->writeEndElement(); // td
- newLine();
-
- if (relative->nodeType() == Node::Enum) {
- const auto enume = static_cast<const EnumNode *>(relative);
- QString itemValue = enume->itemValue(atom->next()->string());
-
- writer->writeStartElement(dbNamespace, "td");
- if (itemValue.isEmpty())
- writer->writeCharacters("?");
- else
- writer->writeTextElement(dbNamespace, "code", itemValue);
- writer->writeEndElement(); // td
- newLine();
- }
- }
- break;
- case Atom::SinceTagRight:
- case Atom::ListTagRight:
- if (atom->string() == ATOM_LIST_TAG) {
- writer->writeEndElement(); // item
- newLine();
- }
- break;
- case Atom::ListItemLeft:
- inListItemLineOpen = false;
- if (atom->string() == ATOM_LIST_TAG) {
- writer->writeStartElement(dbNamespace, "listitem");
- newLine();
- writer->writeStartElement(dbNamespace, "para");
- } else if (atom->string() == ATOM_LIST_VALUE) {
- if (m_threeColumnEnumValueTable) {
- if (matchAhead(atom, Atom::ListItemRight)) {
- writer->writeEmptyElement(dbNamespace, "td");
- newLine();
- inListItemLineOpen = false;
- } else {
- writer->writeStartElement(dbNamespace, "td");
- newLine();
- inListItemLineOpen = true;
- }
- }
- } else {
- writer->writeStartElement(dbNamespace, "listitem");
- newLine();
- }
- // Don't skip a paragraph, DocBook requires them within list items.
- break;
- case Atom::ListItemRight:
- if (atom->string() == ATOM_LIST_TAG) {
- writer->writeEndElement(); // para
- newLine();
- writer->writeEndElement(); // listitem
- newLine();
- writer->writeEndElement(); // varlistentry
- newLine();
- } else if (atom->string() == ATOM_LIST_VALUE) {
- if (inListItemLineOpen) {
- writer->writeEndElement(); // td
- newLine();
- inListItemLineOpen = false;
- }
- writer->writeEndElement(); // tr
- newLine();
- } else {
- writer->writeEndElement(); // listitem
- newLine();
- }
- break;
- case Atom::ListRight:
- // Depending on atom->string(), closing a different item:
- // - ATOM_LIST_BULLET: itemizedlist
- // - ATOM_LIST_TAG: variablelist
- // - ATOM_LIST_VALUE: informaltable
- // - ATOM_LIST_NUMERIC: orderedlist
- writer->writeEndElement();
- newLine();
- break;
- case Atom::Nop:
- break;
- case Atom::ParaLeft:
- writer->writeStartElement(dbNamespace, "para");
- inPara = true;
- break;
- case Atom::ParaRight:
- endLink();
- if (inPara) {
- writer->writeEndElement(); // para
- newLine();
- inPara = false;
- }
- break;
- case Atom::QuotationLeft:
- writer->writeStartElement(dbNamespace, "blockquote");
- inPara = true;
- break;
- case Atom::QuotationRight:
- writer->writeEndElement(); // blockquote
- newLine();
- break;
- case Atom::RawString:
- writer->writeCharacters(atom->string());
- break;
- case Atom::SectionLeft:
- currentSectionLevel = atom->string().toInt() + hOffset(relative);
- // Level 1 is dealt with at the header level (info tag).
- if (currentSectionLevel > 1) {
- // Unfortunately, SectionRight corresponds to the end of any section,
- // i.e. going to a new section, even deeper.
- while (!sectionLevels.empty() && sectionLevels.top() >= currentSectionLevel) {
- sectionLevels.pop();
- writer->writeEndElement(); // section
- newLine();
- }
-
- sectionLevels.push(currentSectionLevel);
-
- writer->writeStartElement(dbNamespace, "section");
- writer->writeAttribute("xml:id",
- Doc::canonicalTitle(Text::sectionHeading(atom).toString()));
- newLine();
- // Unlike startSectionBegin, don't start a title here.
- }
- break;
- case Atom::SectionRight:
- // All the logic about closing sections is done in the SectionLeft case
- // and generateFooter() for the end of the page.
- break;
- case Atom::SectionHeadingLeft:
- // Level 1 is dealt with at the header level (info tag).
- if (currentSectionLevel > 1) {
- writer->writeStartElement(dbNamespace, "title");
- m_inSectionHeading = true;
- }
- break;
- case Atom::SectionHeadingRight:
- // Level 1 is dealt with at the header level (info tag).
- if (currentSectionLevel > 1) {
- writer->writeEndElement(); // title
- newLine();
- m_inSectionHeading = false;
- }
- break;
- case Atom::SidebarLeft:
- writer->writeStartElement(dbNamespace, "sidebar");
- break;
- case Atom::SidebarRight:
- writer->writeEndElement(); // sidebar
- newLine();
- break;
- case Atom::String:
- if (inLink && !m_inContents && !m_inSectionHeading)
- generateLink(atom);
- else
- writer->writeCharacters(atom->string());
- break;
- case Atom::TableLeft: {
- QPair<QString, QString> pair = getTableWidthAttr(atom);
- QString attr = pair.second;
- QString width = pair.first;
-
- if (inPara) {
- writer->writeEndElement(); // para or blockquote
- newLine();
- inPara = false;
- }
-
- writer->writeStartElement(dbNamespace, "informaltable");
- writer->writeAttribute("style", attr);
- if (!width.isEmpty())
- writer->writeAttribute("width", width);
- newLine();
- m_numTableRows = 0;
- } break;
- case Atom::TableRight:
- writer->writeEndElement(); // table
- newLine();
- break;
- case Atom::TableHeaderLeft:
- writer->writeStartElement(dbNamespace, "thead");
- newLine();
- writer->writeStartElement(dbNamespace, "tr");
- newLine();
- m_inTableHeader = true;
- break;
- case Atom::TableHeaderRight:
- writer->writeEndElement(); // tr
- newLine();
- if (matchAhead(atom, Atom::TableHeaderLeft)) {
- skipAhead = 1;
- writer->writeStartElement(dbNamespace, "tr");
- newLine();
- } else {
- writer->writeEndElement(); // thead
- newLine();
- m_inTableHeader = false;
- }
- break;
- case Atom::TableRowLeft:
- writer->writeStartElement(dbNamespace, "tr");
- if (atom->string().isEmpty()) {
- writer->writeAttribute("valign", "top");
- } else {
- // Basic parsing of attributes, should be enough. The input string (atom->string())
- // looks like:
- // arg1="val1" arg2="val2"
- QStringList args = atom->string().split("\"", Qt::SkipEmptyParts);
- // arg1=, val1, arg2=, val2,
- // \-- 1st --/ \-- 2nd --/ \-- remainder
- if (args.size() % 2) {
- // Problem...
- relative->doc().location().warning(
- QStringLiteral("Error when parsing attributes for the table: got \"%1\"")
- .arg(atom->string()));
- }
- for (int i = 0; i + 1 < args.size(); i += 2)
- writer->writeAttribute(args.at(i).chopped(1), args.at(i + 1));
- }
- newLine();
- break;
- case Atom::TableRowRight:
- writer->writeEndElement(); // tr
- newLine();
- break;
- case Atom::TableItemLeft:
- writer->writeStartElement(dbNamespace, m_inTableHeader ? "th" : "td");
-
- for (int i = 0; i < atom->count(); ++i) {
- const QString &p = atom->string(i);
- if (p.contains('=')) {
- QStringList lp = p.split(QLatin1Char('='));
- writer->writeAttribute(lp.at(0), lp.at(1));
- } else {
- QStringList spans = p.split(QLatin1Char(','));
- if (spans.size() == 2) {
- if (spans.at(0) != "1")
- writer->writeAttribute("colspan", spans.at(0));
- if (spans.at(1) != "1")
- writer->writeAttribute("rowspan", spans.at(1));
- }
- }
- }
- newLine();
- // No skipahead, as opposed to HTML: in DocBook, the text must be wrapped in paragraphs.
- break;
- case Atom::TableItemRight:
- writer->writeEndElement(); // th if m_inTableHeader, otherwise td
- newLine();
- break;
- case Atom::TableOfContents:
- break;
- case Atom::Keyword:
- break;
- case Atom::Target:
- writeAnchor(Doc::canonicalTitle(atom->string()));
- break;
- case Atom::UnhandledFormat:
- writer->writeStartElement(dbNamespace, "emphasis");
- writer->writeAttribute("role", "bold");
- writer->writeCharacters("&lt;Missing DocBook&gt;");
- writer->writeEndElement(); // emphasis
- break;
- case Atom::UnknownCommand:
- writer->writeStartElement(dbNamespace, "emphasis");
- writer->writeAttribute("role", "bold");
- writer->writeCharacters("&lt;Unknown command&gt;");
- writer->writeStartElement(dbNamespace, "code");
- writer->writeCharacters(atom->string());
- writer->writeEndElement(); // code
- writer->writeEndElement(); // emphasis
- break;
- case Atom::QmlText:
- case Atom::EndQmlText:
- // don't do anything with these. They are just tags.
- break;
- case Atom::CodeQuoteArgument:
- case Atom::CodeQuoteCommand:
- case Atom::SnippetCommand:
- case Atom::SnippetIdentifier:
- case Atom::SnippetLocation:
- // no output (ignore)
- break;
- default:
- unknownAtom(atom);
- }
- return skipAhead;
-}
-
-void DocBookGenerator::generateClassHierarchy(const Node *relative, NodeMultiMap &classMap)
-{
- // From HtmlGenerator::generateClassHierarchy.
- if (classMap.isEmpty())
- return;
-
- NodeMap topLevel;
- for (Node *c : classMap) {
- auto *classNode = static_cast<ClassNode *>(c);
- if (classNode->baseClasses().isEmpty())
- topLevel.insert(classNode->name(), classNode);
- }
-
- QStack<NodeMap> stack;
- stack.push(topLevel);
-
- writer->writeStartElement(dbNamespace, "itemizedlist");
- newLine();
- while (!stack.isEmpty()) {
- if (stack.top().isEmpty()) {
- stack.pop();
- writer->writeEndElement(); // listitem
- newLine();
- writer->writeEndElement(); // itemizedlist
- newLine();
- } else {
- ClassNode *child = static_cast<ClassNode *>(*stack.top().begin());
- writer->writeStartElement(dbNamespace, "listitem");
- newLine();
- writer->writeStartElement(dbNamespace, "para");
- generateFullName(child, relative);
- writer->writeEndElement(); // para
- newLine();
- // Don't close the listitem now, as DocBook requires sublists to reside in items.
- stack.top().erase(stack.top().begin());
-
- NodeMap newTop;
- for (const RelatedClass &d : child->derivedClasses()) {
- if (d.m_node && !d.isPrivate() && !d.m_node->isInternal() && d.m_node->hasDoc())
- newTop.insert(d.m_node->name(), d.m_node);
- }
- if (!newTop.isEmpty()) {
- stack.push(newTop);
- writer->writeStartElement(dbNamespace, "itemizedlist");
- newLine();
- }
- }
- }
-}
-
-void DocBookGenerator::generateLink(const Atom *atom)
-{
- // From HtmlGenerator::generateLink.
- QRegularExpression funcLeftParen("\\S(\\()");
- auto match = funcLeftParen.match(atom->string());
- if (match.hasMatch()) {
- // hack for C++: move () outside of link
- int k = match.capturedStart(1);
- writer->writeCharacters(atom->string().left(k));
- writer->writeEndElement(); // link
- inLink = false;
- writer->writeCharacters(atom->string().mid(k));
- } else {
- writer->writeCharacters(atom->string());
- }
-}
-
-/*!
- This version of the function is called when the \a link is known
- to be correct.
- */
-void DocBookGenerator::beginLink(const QString &link, const Node *node, const Node *relative)
-{
- // From HtmlGenerator::beginLink.
- writer->writeStartElement(dbNamespace, "link");
- writer->writeAttribute(xlinkNamespace, "href", link);
- if (node && !(relative && node->status() == relative->status())
- && node->status() == Node::Obsolete)
- writer->writeAttribute("role", "obsolete");
- inLink = true;
-}
-
-void DocBookGenerator::endLink()
-{
- // From HtmlGenerator::endLink.
- if (inLink)
- writer->writeEndElement(); // link
- inLink = false;
-}
-
-void DocBookGenerator::generateList(const Node *relative, const QString &selector)
-{
- // From HtmlGenerator::generateList, without warnings, changing prototype.
- CNMap cnm;
- Node::NodeType type = Node::NoType;
- if (selector == QLatin1String("overviews"))
- type = Node::Group;
- else if (selector == QLatin1String("cpp-modules"))
- type = Node::Module;
- else if (selector == QLatin1String("qml-modules"))
- type = Node::QmlModule;
- else if (selector == QLatin1String("js-modules"))
- type = Node::JsModule;
-
- if (type != Node::NoType) {
- NodeList nodeList;
- m_qdb->mergeCollections(type, cnm, relative);
- const QList<CollectionNode *> collectionList = cnm.values();
- nodeList.reserve(collectionList.size());
- for (auto *collectionNode : collectionList)
- nodeList.append(collectionNode);
- generateAnnotatedList(relative, nodeList, selector);
- } else {
- /*
- \generatelist {selector} is only allowed in a
- comment where the topic is \group, \module,
- \qmlmodule, or \jsmodule
- */
- Node *n = const_cast<Node *>(relative);
- auto *cn = static_cast<CollectionNode *>(n);
- m_qdb->mergeCollections(cn);
- generateAnnotatedList(cn, cn->members(), selector);
- }
-}
-
-/*!
- Outputs an annotated list of the nodes in \a nodeList.
- A two-column table is output.
- */
-void DocBookGenerator::generateAnnotatedList(const Node *relative, const NodeList &nodeList,
- const QString &selector)
-{
- if (nodeList.isEmpty())
- return;
-
- // Do nothing if all items are internal or obsolete
- if (std::all_of(nodeList.cbegin(), nodeList.cend(), [](const Node *n) {
- return n->isInternal() || n->isObsolete(); })) {
- return;
- }
-
- // From WebXMLGenerator::generateAnnotatedList.
- writer->writeStartElement(dbNamespace, "variablelist");
- writer->writeAttribute("role", selector);
- newLine();
-
- for (const auto node : nodeList) {
- if (node->isInternal() || node->isObsolete())
- continue;
- writer->writeStartElement(dbNamespace, "varlistentry");
- newLine();
- writer->writeStartElement(dbNamespace, "term");
- generateFullName(node, relative);
- writer->writeEndElement(); // term
- newLine();
-
- writer->writeStartElement(dbNamespace, "listitem");
- newLine();
- writer->writeStartElement(dbNamespace, "para");
- writer->writeCharacters(node->doc().briefText().toString());
- writer->writeEndElement(); // para
- newLine();
- writer->writeEndElement(); // listitem
- newLine();
- writer->writeEndElement(); // varlistentry
- newLine();
- }
- writer->writeEndElement(); // variablelist
- newLine();
-}
-
-/*!
- Outputs a series of annotated lists from the nodes in \a nmm,
- divided into sections based by the key names in the multimap.
- */
-void DocBookGenerator::generateAnnotatedLists(const Node *relative, const NodeMultiMap &nmm,
- const QString &selector)
-{
- // From HtmlGenerator::generateAnnotatedLists.
- for (const QString &name : nmm.uniqueKeys()) {
- if (!name.isEmpty())
- startSection(registerRef(name.toLower()), name);
- generateAnnotatedList(relative, nmm.values(name), selector);
- if (!name.isEmpty())
- endSection();
- }
-}
-
-/*!
- This function finds the common prefix of the names of all
- the classes in the class map \a nmm and then generates a
- compact list of the class names alphabetized on the part
- of the name not including the common prefix. You can tell
- the function to use \a comonPrefix as the common prefix,
- but normally you let it figure it out itself by looking at
- the name of the first and last classes in the class map
- \a nmm.
- */
-void DocBookGenerator::generateCompactList(ListType listType, const Node *relative,
- const NodeMultiMap &nmm, const QString &commonPrefix,
- const QString &selector)
-{
- // From HtmlGenerator::generateCompactList. No more "includeAlphabet", this should be handled by
- // the DocBook toolchain afterwards.
- // TODO: In DocBook, probably no need for this method: this is purely presentational, i.e. to be
- // fully handled by the DocBook toolchain.
- if (nmm.isEmpty())
- return;
-
- const int NumParagraphs = 37; // '0' to '9', 'A' to 'Z', '_'
- int commonPrefixLen = commonPrefix.length();
-
- /*
- Divide the data into 37 paragraphs: 0, ..., 9, A, ..., Z,
- underscore (_). QAccel will fall in paragraph 10 (A) and
- QXtWidget in paragraph 33 (X). This is the only place where we
- assume that NumParagraphs is 37. Each paragraph is a NodeMultiMap.
- */
- NodeMultiMap paragraph[NumParagraphs + 1];
- QString paragraphName[NumParagraphs + 1];
- QSet<char> usedParagraphNames;
-
- NodeMultiMap::ConstIterator c = nmm.constBegin();
- while (c != nmm.constEnd()) {
- QStringList pieces = c.key().split("::");
- QString key;
- int idx = commonPrefixLen;
- if (idx > 0 && !pieces.last().startsWith(commonPrefix, Qt::CaseInsensitive))
- idx = 0;
- key = pieces.last().mid(idx).toLower();
-
- int paragraphNr = NumParagraphs - 1;
-
- if (key[0].digitValue() != -1)
- paragraphNr = key[0].digitValue();
- else if (key[0] >= QLatin1Char('a') && key[0] <= QLatin1Char('z'))
- paragraphNr = 10 + key[0].unicode() - 'a';
-
- paragraphName[paragraphNr] = key[0].toUpper();
- usedParagraphNames.insert(key[0].toLower().cell());
- paragraph[paragraphNr].insert(c.key(), c.value());
- ++c;
- }
-
- /*
- Each paragraph j has a size: paragraph[j].count(). In the
- discussion, we will assume paragraphs 0 to 5 will have sizes
- 3, 1, 4, 1, 5, 9.
-
- We now want to compute the paragraph offset. Paragraphs 0 to 6
- start at offsets 0, 3, 4, 8, 9, 14, 23.
- */
- int paragraphOffset[NumParagraphs + 1]; // 37 + 1
- paragraphOffset[0] = 0;
- for (int i = 0; i < NumParagraphs; i++) // i = 0..36
- paragraphOffset[i + 1] = paragraphOffset[i] + paragraph[i].count();
-
- // No table of contents in DocBook.
-
- // Actual output.
- m_numTableRows = 0;
-
- int curParNr = 0;
- int curParOffset = 0;
- QString previousName;
- bool multipleOccurrences = false;
-
- for (int i = 0; i < nmm.count(); i++) {
- while ((curParNr < NumParagraphs) && (curParOffset == paragraph[curParNr].count())) {
- ++curParNr;
- curParOffset = 0;
- }
-
- /*
- Starting a new paragraph means starting a new variablelist.
- */
- if (curParOffset == 0) {
- if (i > 0) {
- writer->writeEndElement(); // variablelist
- newLine();
- }
-
- writer->writeStartElement(dbNamespace, "variablelist");
- writer->writeAttribute("role", selector);
- newLine();
- writer->writeStartElement(dbNamespace, "varlistentry");
- newLine();
-
- writer->writeStartElement(dbNamespace, "term");
- writer->writeStartElement(dbNamespace, "emphasis");
- writer->writeAttribute("role", "bold");
- writer->writeCharacters(paragraphName[curParNr]);
- writer->writeEndElement(); // emphasis
- writer->writeEndElement(); // term
- newLine();
- }
-
- /*
- Output a listitem for the current offset in the current paragraph.
- */
- writer->writeStartElement(dbNamespace, "listitem");
- newLine();
- writer->writeStartElement(dbNamespace, "para");
- if ((curParNr < NumParagraphs) && !paragraphName[curParNr].isEmpty()) {
- NodeMultiMap::Iterator it;
- NodeMultiMap::Iterator next;
- it = paragraph[curParNr].begin();
- for (int j = 0; j < curParOffset; j++)
- ++it;
-
- if (listType == Generic) {
- generateFullName(it.value(), relative);
- writer->writeStartElement(dbNamespace, "link");
- writer->writeAttribute(xlinkNamespace, "href", fullDocumentLocation(*it));
- writer->writeAttribute("type", targetType(it.value()));
- } else if (listType == Obsolete) {
- QString fn = fileName(it.value(), fileExtension());
- QString link;
- if (useOutputSubdirs())
- link = QString("../" + it.value()->outputSubdirectory() + QLatin1Char('/'));
- link += fn;
-
- writer->writeStartElement(dbNamespace, "link");
- writer->writeAttribute(xlinkNamespace, "href", link);
- writer->writeAttribute("type", targetType(it.value()));
- }
-
- QStringList pieces;
- if (it.value()->isQmlType() || it.value()->isJsType()) {
- 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("::");
-
- writer->writeCharacters(pieces.last());
- writer->writeEndElement(); // link
-
- if (pieces.size() > 1) {
- writer->writeCharacters(" (");
- generateFullName(it.value()->parent(), relative);
- writer->writeCharacters(")");
- }
- }
- writer->writeEndElement(); // para
- newLine();
- writer->writeEndElement(); // listitem
- newLine();
- writer->writeEndElement(); // varlistentry
- newLine();
- curParOffset++;
- }
- if (nmm.count() > 0) {
- writer->writeEndElement(); // variablelist
- }
-}
-
-void DocBookGenerator::generateFunctionIndex(const Node *relative)
-{
- // From HtmlGenerator::generateFunctionIndex.
- writer->writeStartElement(dbNamespace, "simplelist");
- writer->writeAttribute("role", "functionIndex");
- newLine();
- for (int i = 0; i < 26; i++) {
- QChar ch('a' + i);
- writer->writeStartElement(dbNamespace, "member");
- writer->writeAttribute(xlinkNamespace, "href", QString("#") + ch);
- writer->writeCharacters(ch.toUpper());
- writer->writeEndElement(); // member
- newLine();
- }
- writer->writeEndElement(); // simplelist
- newLine();
-
- char nextLetter = 'a';
- char currentLetter;
-
- writer->writeStartElement(dbNamespace, "itemizedlist");
- newLine();
-
- NodeMapMap &funcIndex = m_qdb->getFunctionIndex();
- QMap<QString, NodeMap>::ConstIterator f = funcIndex.constBegin();
- while (f != funcIndex.constEnd()) {
- writer->writeStartElement(dbNamespace, "listitem");
- newLine();
- writer->writeStartElement(dbNamespace, "para");
- writer->writeCharacters(f.key() + ": ");
-
- currentLetter = f.key()[0].unicode();
- while (islower(currentLetter) && currentLetter >= nextLetter) {
- writeAnchor(QString(nextLetter));
- nextLetter++;
- }
-
- NodeMap::ConstIterator s = (*f).constBegin();
- while (s != (*f).constEnd()) {
- writer->writeCharacters(" ");
- generateFullName((*s)->parent(), relative);
- ++s;
- }
-
- writer->writeEndElement(); // para
- newLine();
- writer->writeEndElement(); // listitem
- newLine();
- ++f;
- }
- writer->writeEndElement(); // itemizedlist
- newLine();
-}
-
-void DocBookGenerator::generateLegaleseList(const Node *relative)
-{
- // From HtmlGenerator::generateLegaleseList.
- TextToNodeMap &legaleseTexts = m_qdb->getLegaleseTexts();
- for (auto it = legaleseTexts.cbegin(), end = legaleseTexts.cend(); it != end; ++it) {
- Text text = it.key();
- generateText(text, relative);
- writer->writeStartElement(dbNamespace, "itemizedlist");
- newLine();
- do {
- writer->writeStartElement(dbNamespace, "listitem");
- newLine();
- writer->writeStartElement(dbNamespace, "para");
- generateFullName(it.value(), relative);
- writer->writeEndElement(); // para
- newLine();
- writer->writeEndElement(); // listitem
- newLine();
- ++it;
- } while (it != legaleseTexts.constEnd() && it.key() == text);
- writer->writeEndElement(); // itemizedlist
- newLine();
- }
-}
-
-void DocBookGenerator::generateBrief(const Node *node)
-{
- // From HtmlGenerator::generateBrief. Also see generateHeader, which is specifically dealing
- // with the DocBook header (and thus wraps the brief in an abstract).
- Text brief = node->doc().briefText();
-
- if (!brief.isEmpty()) {
- if (!brief.lastAtom()->string().endsWith('.'))
- brief << Atom(Atom::String, ".");
-
- writer->writeStartElement(dbNamespace, "para");
- generateText(brief, node);
- writer->writeEndElement(); // para
- newLine();
- }
-}
-
-bool DocBookGenerator::generateSince(const Node *node)
-{
- // From Generator::generateSince.
- if (!node->since().isEmpty()) {
- writer->writeStartElement(dbNamespace, "para");
- writer->writeCharacters("This " + typeString(node) + " was introduced");
- if (node->nodeType() == Node::Enum)
- writer->writeCharacters(" or modified");
- writer->writeCharacters(" in " + formatSince(node) + ".");
- writer->writeEndElement(); // para
- newLine();
-
- return true;
- }
-
- return false;
-}
-
-void DocBookGenerator::generateHeader(const QString &title, const QString &subTitle,
- const Node *node)
-{
- // From HtmlGenerator::generateHeader.
- refMap.clear();
-
- // Output the DocBook header.
- writer->writeStartElement(dbNamespace, "info");
- newLine();
- writer->writeTextElement(dbNamespace, "title", title);
- newLine();
-
- if (!subTitle.isEmpty()) {
- writer->writeTextElement(dbNamespace, "subtitle", subTitle);
- newLine();
- }
-
- if (!project.isEmpty()) {
- writer->writeTextElement(dbNamespace, "productname", project);
- newLine();
- }
-
- if (!buildversion.isEmpty()) {
- writer->writeTextElement(dbNamespace, "edition", buildversion);
- newLine();
- }
-
- if (!projectDescription.isEmpty()) {
- writer->writeTextElement(dbNamespace, "titleabbrev", projectDescription);
- newLine();
- }
-
- // Deal with links.
- // Adapted from HtmlGenerator::generateHeader (output part: no need to update a navigationLinks
- // or useSeparator field, as this content is only output in the info tag, not in the main
- // content).
- if (node && !node->links().empty()) {
- QPair<QString, QString> linkPair;
- QPair<QString, QString> anchorPair;
- const Node *linkNode;
-
- if (node->links().contains(Node::PreviousLink)) {
- linkPair = node->links()[Node::PreviousLink];
- linkNode = m_qdb->findNodeForTarget(linkPair.first, node);
- if (!linkNode || linkNode == node)
- anchorPair = linkPair;
- else
- anchorPair = anchorForNode(linkNode);
-
- writer->writeStartElement(dbNamespace, "extendedlink");
- writer->writeEmptyElement(dbNamespace, "link");
- writer->writeAttribute(xlinkNamespace, "to", anchorPair.first);
- writer->writeAttribute(xlinkNamespace, "title", "prev");
- if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty())
- writer->writeAttribute(xlinkNamespace, "label", anchorPair.second);
- else
- writer->writeAttribute(xlinkNamespace, "label", linkPair.second);
- writer->writeEndElement(); // extendedlink
- }
- if (node->links().contains(Node::NextLink)) {
- linkPair = node->links()[Node::NextLink];
- linkNode = m_qdb->findNodeForTarget(linkPair.first, node);
- if (!linkNode || linkNode == node)
- anchorPair = linkPair;
- else
- anchorPair = anchorForNode(linkNode);
-
- writer->writeStartElement(dbNamespace, "extendedlink");
- writer->writeEmptyElement(dbNamespace, "link");
- writer->writeAttribute(xlinkNamespace, "to", anchorPair.first);
- writer->writeAttribute(xlinkNamespace, "title", "prev");
- if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty())
- writer->writeAttribute(xlinkNamespace, "label", anchorPair.second);
- else
- writer->writeAttribute(xlinkNamespace, "label", linkPair.second);
- writer->writeEndElement(); // extendedlink
- }
- if (node->links().contains(Node::StartLink)) {
- linkPair = node->links()[Node::StartLink];
- linkNode = m_qdb->findNodeForTarget(linkPair.first, node);
- if (!linkNode || linkNode == node)
- anchorPair = linkPair;
- else
- anchorPair = anchorForNode(linkNode);
-
- writer->writeStartElement(dbNamespace, "extendedlink");
- writer->writeEmptyElement(dbNamespace, "link");
- writer->writeAttribute(xlinkNamespace, "to", anchorPair.first);
- writer->writeAttribute(xlinkNamespace, "title", "start");
- if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty())
- writer->writeAttribute(xlinkNamespace, "label", anchorPair.second);
- else
- writer->writeAttribute(xlinkNamespace, "label", linkPair.second);
- writer->writeEndElement(); // extendedlink
- }
- }
-
- // Deal with the abstract (what qdoc calls brief).
- if (node) {
- // Adapted from HtmlGenerator::generateBrief, without extraction marks. The parameter
- // addLink is always false. Factoring this function out is not as easy as in HtmlGenerator:
- // abstracts only happen in the header (info tag), slightly different tags must be used at
- // other places. Also includes code from HtmlGenerator::generateCppReferencePage to handle
- // the name spaces.
- writer->writeStartElement(dbNamespace, "abstract");
- newLine();
-
- bool generatedSomething = false;
-
- Text brief;
- const NamespaceNode *ns = node->isAggregate()
- ? static_cast<const NamespaceNode *>(static_cast<const Aggregate *>(node))
- : nullptr;
- if (node->isAggregate() && ns && !ns->hasDoc() && ns->docNode()) {
- NamespaceNode *NS = ns->docNode();
- brief << "The " << ns->name()
- << " namespace includes the following elements from module "
- << ns->tree()->camelCaseModuleName() << ". The full namespace is "
- << "documented in module " << NS->tree()->camelCaseModuleName()
- << Atom(Atom::LinkNode, fullDocumentLocation(NS))
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << Atom(Atom::String, " here.")
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
- } else {
- brief = node->doc().briefText();
- }
-
- if (!brief.isEmpty()) {
- if (!brief.lastAtom()->string().endsWith('.'))
- brief << Atom(Atom::String, ".");
-
- writer->writeStartElement(dbNamespace, "para");
- generateText(brief, node);
- writer->writeEndElement(); // para
- newLine();
-
- generatedSomething = true;
- }
-
- // Generate other paragraphs that should go into the abstract.
- generatedSomething |= generateStatus(node);
- generatedSomething |= generateSince(node);
- generatedSomething |= generateThreadSafeness(node);
-
- // An abstract cannot be empty, hence use the project description.
- if (!generatedSomething)
- writer->writeTextElement(dbNamespace, "para", projectDescription + ".");
-
- writer->writeEndElement(); // abstract
- newLine();
- }
-
- // End of the DocBook header.
- writer->writeEndElement(); // info
- newLine();
-}
-
-void DocBookGenerator::closeTextSections()
-{
- while (!sectionLevels.isEmpty()) {
- sectionLevels.pop();
- endSection();
- }
-}
-
-void DocBookGenerator::generateFooter()
-{
- closeTextSections();
- writer->writeEndElement(); // article
-}
-
-void DocBookGenerator::generateSimpleLink(const QString &href, const QString &text)
-{
- writer->writeStartElement(dbNamespace, "link");
- writer->writeAttribute(xlinkNamespace, "href", href);
- writer->writeCharacters(text);
- writer->writeEndElement(); // link
-}
-
-void DocBookGenerator::generateObsoleteMembers(const Sections &sections)
-{
- // From HtmlGenerator::generateObsoleteMembersFile.
- SectionPtrVector summary_spv; // Summaries are ignored in DocBook (table of contents).
- SectionPtrVector details_spv;
- if (!sections.hasObsoleteMembers(&summary_spv, &details_spv))
- return;
-
- Aggregate *aggregate = sections.aggregate();
- QString link;
- if (useOutputSubdirs() && !Generator::outputSubdir().isEmpty())
- link = QString("../" + Generator::outputSubdir() + QLatin1Char('/'));
- link += fileName(aggregate, fileExtension());
- aggregate->setObsoleteLink(link);
-
- startSection("obsolete", "Obsolete Members for " + aggregate->name());
-
- writer->writeStartElement(dbNamespace, "para");
- writer->writeStartElement(dbNamespace, "emphasis");
- writer->writeAttribute("role", "bold");
- writer->writeCharacters("The following members of class ");
- generateSimpleLink(linkForNode(aggregate, nullptr), aggregate->name());
- writer->writeCharacters(" are obsolete.");
- writer->writeEndElement(); // emphasis bold
- writer->writeCharacters(" They are provided to keep old source code working. "
- "We strongly advise against using them in new code.");
- writer->writeEndElement(); // para
- newLine();
-
- for (int i = 0; i < details_spv.size(); ++i) {
- QString title = details_spv.at(i)->title();
- QString ref = registerRef(title.toLower());
- startSection(ref, title);
-
- const NodeVector &members = details_spv.at(i)->obsoleteMembers();
- NodeVector::ConstIterator m = members.constBegin();
- while (m != members.constEnd()) {
- if ((*m)->access() != Access::Private)
- generateDetailedMember(*m, aggregate);
- ++m;
- }
-
- endSection();
- }
-
- endSection();
-}
-
-/*!
- Generates a separate file where obsolete members of the QML
- type \a qcn are listed. The \a marker is used to generate
- the section lists, which are then traversed and output here.
-
- Note that this function currently only handles correctly the
- case where \a status is \c {Section::Obsolete}.
- */
-void DocBookGenerator::generateObsoleteQmlMembers(const Sections &sections)
-{
- // From HtmlGenerator::generateObsoleteQmlMembersFile.
- SectionPtrVector summary_spv; // Summaries are not useful in DocBook.
- SectionPtrVector details_spv;
- if (!sections.hasObsoleteMembers(&summary_spv, &details_spv))
- return;
-
- Aggregate *aggregate = sections.aggregate();
- QString title = "Obsolete Members for " + aggregate->name();
- QString fn = fileName(aggregate, fileExtension());
- QString link;
- if (useOutputSubdirs() && !Generator::outputSubdir().isEmpty())
- link = QString("../" + Generator::outputSubdir() + QLatin1Char('/'));
- link += fn;
- aggregate->setObsoleteLink(link);
-
- startSection("obsolete", "Obsolete Members for " + aggregate->name());
-
- writer->writeStartElement(dbNamespace, "para");
- writer->writeStartElement(dbNamespace, "emphasis");
- writer->writeAttribute("role", "bold");
- writer->writeCharacters("The following members of QML type ");
- generateSimpleLink(linkForNode(aggregate, nullptr), aggregate->name());
- writer->writeCharacters(" are obsolete.");
- writer->writeEndElement(); // emphasis bold
- writer->writeCharacters("They are provided to keep old source code working. "
- "We strongly advise against using them in new code.");
- writer->writeEndElement(); // para
- newLine();
-
- for (auto i : details_spv) {
- QString ref = registerRef(i->title().toLower());
- startSection(ref, i->title());
-
- NodeVector::ConstIterator m = i->members().constBegin();
- while (m != i->members().constEnd()) {
- generateDetailedQmlMember(*m, aggregate);
- ++m;
- }
-
- endSection();
- }
-
- endSection();
-}
-
-static QString nodeToSynopsisTag(const Node *node)
-{
- // Order from Node::nodeTypeString.
- if (node->isClass() || node->isQmlType() || node->isQmlBasicType())
- return QStringLiteral("classsynopsis");
- if (node->isNamespace())
- return QStringLiteral("namespacesynopsis");
- if (node->isPageNode()) {
- node->doc().location().warning("Unexpected document node in nodeToSynopsisTag");
- return QString();
- }
- if (node->isEnumType())
- return QStringLiteral("enumsynopsis");
- if (node->isTypedef())
- return QStringLiteral("typedefsynopsis");
- if (node->isFunction()) {
- // Signals are also encoded as functions (including QML/JS ones).
- const auto fn = static_cast<const FunctionNode *>(node);
- if (fn->isCtor() || fn->isCCtor() || fn->isMCtor())
- return QStringLiteral("constructorsynopsis");
- if (fn->isDtor())
- return QStringLiteral("destructorsynopsis");
- return QStringLiteral("methodsynopsis");
- }
- if (node->isProperty() || node->isVariable() || node->isQmlProperty())
- return QStringLiteral("fieldsynopsis");
-
- node->doc().location().warning(QString("Unknown node tag %1").arg(node->nodeTypeString()));
- return QStringLiteral("synopsis");
-}
-
-void DocBookGenerator::generateStartRequisite(const QString &description)
-{
- writer->writeStartElement(dbNamespace, "varlistentry");
- newLine();
- writer->writeTextElement(dbNamespace, "term", description);
- newLine();
- writer->writeStartElement(dbNamespace, "listitem");
- newLine();
- writer->writeStartElement(dbNamespace, "para");
-}
-
-void DocBookGenerator::generateEndRequisite()
-{
- writer->writeEndElement(); // para
- newLine();
- writer->writeEndElement(); // listitem
- newLine();
- writer->writeEndElement(); // varlistentry
- newLine();
-}
-
-void DocBookGenerator::generateRequisite(const QString &description, const QString &value)
-{
- generateStartRequisite(description);
- writer->writeCharacters(value);
- generateEndRequisite();
-}
-
-/*!
- * \internal
- * Generates the CMake (\a description) requisites
- */
-void DocBookGenerator::generateCMakeRequisite(const QStringList &values)
-{
- const QString description("CMake");
- generateStartRequisite(description);
- writer->writeCharacters(values.first());
- writer->writeEndElement(); // para
- newLine();
- writer->writeStartElement(dbNamespace, "para");
- writer->writeCharacters(values.last());
- generateEndRequisite();
-}
-
-void DocBookGenerator::generateSortedNames(const ClassNode *cn, const QList<RelatedClass> &rc)
-{
- // From Generator::appendSortedNames.
- QMap<QString, ClassNode *> classMap;
- QList<RelatedClass>::ConstIterator r = rc.constBegin();
- while (r != rc.constEnd()) {
- ClassNode *rcn = (*r).m_node;
- if (rcn && rcn->access() == Access::Public && rcn->status() != Node::Internal
- && !rcn->doc().isEmpty()) {
- classMap[rcn->plainFullName(cn).toLower()] = rcn;
- }
- ++r;
- }
-
- QStringList classNames = classMap.keys();
- classNames.sort();
-
- int index = 0;
- for (const QString &className : classNames) {
- generateFullName(classMap.value(className), cn);
- writer->writeCharacters(comma(index++, classNames.count()));
- }
-}
-
-void DocBookGenerator::generateSortedQmlNames(const Node *base, const NodeList &subs)
-{
- // From Generator::appendSortedQmlNames.
- QMap<QString, Node *> classMap;
- int index = 0;
-
- for (auto sub : subs)
- if (!base->isQtQuickNode() || !sub->isQtQuickNode()
- || (base->logicalModuleName() == sub->logicalModuleName()))
- classMap[sub->plainFullName(base).toLower()] = sub;
-
- QStringList names = classMap.keys();
- names.sort();
-
- for (const QString &name : names) {
- generateFullName(classMap.value(name), base);
- writer->writeCharacters(comma(index++, names.count()));
- }
-}
-
-/*!
- Lists the required imports and includes.
-*/
-void DocBookGenerator::generateRequisites(const Aggregate *aggregate)
-{
- // Adapted from HtmlGenerator::generateRequisites, but simplified: no need to store all the
- // elements, they can be produced one by one.
- writer->writeStartElement(dbNamespace, "variablelist");
- newLine();
-
- // Includes.
- if (!aggregate->includeFiles().isEmpty()) {
- for (const QString &include : aggregate->includeFiles())
- generateRequisite("Header", include);
- }
-
- // Since and project.
- if (!aggregate->since().isEmpty())
- generateRequisite("Since", formatSince(aggregate));
-
- if (aggregate->isClassNode() || aggregate->isNamespace()) {
- // CMake and QT variable.
- if (!aggregate->physicalModuleName().isEmpty()) {
- const CollectionNode *cn =
- m_qdb->getCollectionNode(aggregate->physicalModuleName(), Node::Module);
- if (cn && !cn->qtCMakeComponent().isEmpty()) {
- auto qtMajorVersion = QString::number(QT_VERSION_MAJOR);
- const QString findpackageText = "find_package(Qt" + qtMajorVersion + " COMPONENT "
- + cn->qtCMakeComponent() + ")";
- const QString targetLinkLibrariesText =
- "target_link_libraries(mytarget PUBLIC Qt::" + cn->qtCMakeComponent() + ")";
- const QStringList cmakeInfo { findpackageText, targetLinkLibrariesText };
- generateCMakeRequisite(cmakeInfo);
- }
- if (cn && !cn->qtVariable().isEmpty())
- generateRequisite("qmake", "QT += " + cn->qtVariable());
- }
- }
-
- if (aggregate->nodeType() == Node::Class) {
- // Instantiated by.
- 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());
- generateEndRequisite();
- generateRequisite("Instantiated By", fullDocumentLocation(classe->qmlElement()));
- }
-
- // Inherits.
- QList<RelatedClass>::ConstIterator r;
- if (!classe->baseClasses().isEmpty()) {
- generateStartRequisite("Inherits");
-
- r = classe->baseClasses().constBegin();
- int index = 0;
- while (r != classe->baseClasses().constEnd()) {
- if ((*r).m_node) {
- generateFullName((*r).m_node, classe);
-
- if ((*r).m_access == Access::Protected)
- writer->writeCharacters(" (protected)");
- else if ((*r).m_access == Access::Private)
- writer->writeCharacters(" (private)");
- writer->writeCharacters(comma(index++, classe->baseClasses().count()));
- }
- ++r;
- }
-
- generateEndRequisite();
- }
-
- // Inherited by.
- if (!classe->derivedClasses().isEmpty()) {
- generateStartRequisite("Inherited By");
- generateSortedNames(classe, classe->derivedClasses());
- generateEndRequisite();
- }
- }
-
- writer->writeEndElement(); // variablelist
- newLine();
-}
-
-/*!
- Lists the required imports and includes.
-*/
-void DocBookGenerator::generateQmlRequisites(const QmlTypeNode *qcn)
-{
- // From HtmlGenerator::generateQmlRequisites, but simplified: no need to store all the elements,
- // they can be produced one by one.
- if (!qcn)
- return;
-
- writer->writeStartElement(dbNamespace, "variablelist");
- newLine();
-
- // Module name and version (i.e. import).
- QString logicalModuleVersion;
- const CollectionNode *collection = qcn->logicalModule();
-
- // skip import statement for \internal collections
- if (!collection || !collection->isInternal() || m_showInternal) {
- logicalModuleVersion =
- collection ? collection->logicalModuleVersion() : qcn->logicalModuleVersion();
-
- generateRequisite("Import Statement",
- "import " + qcn->logicalModuleName() + QLatin1Char(' ')
- + logicalModuleVersion);
- }
-
- // Since and project.
- if (!qcn->since().isEmpty())
- generateRequisite("Since:", formatSince(qcn));
-
- // Inherited by.
- NodeList subs;
- QmlTypeNode::subclasses(qcn, subs);
- if (!subs.isEmpty()) {
- generateStartRequisite("Inherited By:");
- generateSortedQmlNames(qcn, subs);
- generateEndRequisite();
- }
-
- // Inherits.
- QmlTypeNode *base = qcn->qmlBaseNode();
- while (base && base->isInternal()) {
- base = base->qmlBaseNode();
- }
- if (base) {
- const Node *otherNode = nullptr;
- Atom a = Atom(Atom::LinkNode, CodeMarker::stringForNode(base));
- QString link = getAutoLink(&a, qcn, &otherNode);
-
- generateStartRequisite("Inherits:");
- generateSimpleLink(link, base->name());
- generateEndRequisite();
- }
-
- // Instantiates.
- ClassNode *cn = (const_cast<QmlTypeNode *>(qcn))->classNode();
- if (cn && (cn->status() != Node::Internal)) {
- const Node *otherNode = nullptr;
- Atom a = Atom(Atom::LinkNode, CodeMarker::stringForNode(qcn));
- QString link = getAutoLink(&a, cn, &otherNode);
-
- generateStartRequisite("Instantiates:");
- generateSimpleLink(fullDocumentLocation(cn), cn->name());
- generateEndRequisite();
- }
-
- writer->writeEndElement(); // variablelist
- newLine();
-}
-
-bool DocBookGenerator::generateStatus(const Node *node)
-{
- // From Generator::generateStatus.
- switch (node->status()) {
- case Node::Active:
- // Do nothing.
- return false;
- case Node::Preliminary:
- writer->writeStartElement(dbNamespace, "para");
- writer->writeStartElement(dbNamespace, "emphasis");
- writer->writeAttribute("role", "bold");
- writer->writeCharacters("This " + typeString(node)
- + " is under development and is subject to change.");
- writer->writeEndElement(); // emphasis
- writer->writeEndElement(); // para
- newLine();
- return true;
- case Node::Deprecated:
- writer->writeStartElement(dbNamespace, "para");
- if (node->isAggregate()) {
- writer->writeStartElement(dbNamespace, "emphasis");
- writer->writeAttribute("role", "bold");
- }
- writer->writeCharacters("This " + typeString(node) + " is deprecated.");
- if (node->isAggregate())
- writer->writeEndElement(); // emphasis
- writer->writeEndElement(); // para
- newLine();
- return true;
- case Node::Obsolete:
- writer->writeStartElement(dbNamespace, "para");
- if (node->isAggregate()) {
- writer->writeStartElement(dbNamespace, "emphasis");
- writer->writeAttribute("role", "bold");
- }
- writer->writeCharacters("This " + typeString(node) + " is obsolete.");
- if (node->isAggregate())
- writer->writeEndElement(); // emphasis
- writer->writeCharacters(" It is provided to keep old source code working. "
- "We strongly advise against using it in new code.");
- writer->writeEndElement(); // para
- newLine();
- return true;
- case Node::Internal:
- default:
- return false;
- }
-}
-
-/*!
- Generate a list of function signatures. The function nodes
- are in \a nodes.
- */
-void DocBookGenerator::generateSignatureList(const NodeList &nodes)
-{
- // From Generator::signatureList and Generator::appendSignature.
- writer->writeStartElement(dbNamespace, "itemizedlist");
- newLine();
-
- NodeList::ConstIterator n = nodes.constBegin();
- while (n != nodes.constEnd()) {
- writer->writeStartElement(dbNamespace, "listitem");
- newLine();
- writer->writeStartElement(dbNamespace, "para");
-
- generateSimpleLink(currentGenerator()->fullDocumentLocation(*n),
- (*n)->signature(false, true));
-
- writer->writeEndElement(); // para
- newLine();
- writer->writeEndElement(); // itemizedlist
- newLine();
- ++n;
- }
-
- writer->writeEndElement(); // itemizedlist
- newLine();
-}
-
-/*!
- Generates text that explains how threadsafe and/or reentrant
- \a node is.
- */
-bool DocBookGenerator::generateThreadSafeness(const Node *node)
-{
- // From Generator::generateThreadSafeness
- Node::ThreadSafeness ts = node->threadSafeness();
-
- const Node *reentrantNode;
- Atom reentrantAtom = Atom(Atom::Link, "reentrant");
- QString linkReentrant = getAutoLink(&reentrantAtom, node, &reentrantNode);
- const Node *threadSafeNode;
- Atom threadSafeAtom = Atom(Atom::Link, "thread-safe");
- QString linkThreadSafe = getAutoLink(&threadSafeAtom, node, &threadSafeNode);
-
- if (ts == Node::NonReentrant) {
- writer->writeStartElement(dbNamespace, "warning");
- newLine();
- writer->writeStartElement(dbNamespace, "para");
- writer->writeCharacters("This " + typeString(node) + " is not ");
- generateSimpleLink(linkReentrant, "reentrant");
- writer->writeCharacters(".");
- writer->writeEndElement(); // para
- newLine();
- writer->writeEndElement(); // warning
-
- return true;
- }
- if (ts == Node::Reentrant || ts == Node::ThreadSafe) {
- writer->writeStartElement(dbNamespace, "note");
- newLine();
- writer->writeStartElement(dbNamespace, "para");
-
- if (node->isAggregate()) {
- writer->writeCharacters("All functions in this " + typeString(node) + " are ");
- if (ts == Node::ThreadSafe)
- generateSimpleLink(linkThreadSafe, "thread-safe");
- else
- generateSimpleLink(linkReentrant, "reentrant");
-
- NodeList reentrant;
- NodeList threadsafe;
- NodeList nonreentrant;
- bool exceptions = hasExceptions(node, reentrant, threadsafe, nonreentrant);
- if (!exceptions || (ts == Node::Reentrant && !threadsafe.isEmpty())) {
- writer->writeCharacters(".");
- writer->writeEndElement(); // para
- newLine();
- } else {
- writer->writeCharacters(" with the following exceptions:");
- writer->writeEndElement(); // para
- newLine();
- writer->writeStartElement(dbNamespace, "para");
-
- if (ts == Node::Reentrant) {
- if (!nonreentrant.isEmpty()) {
- writer->writeCharacters("These functions are not ");
- generateSimpleLink(linkReentrant, "reentrant");
- writer->writeCharacters(":");
- writer->writeEndElement(); // para
- newLine();
- generateSignatureList(nonreentrant);
- }
- if (!threadsafe.isEmpty()) {
- writer->writeCharacters("These functions are also ");
- generateSimpleLink(linkThreadSafe, "thread-safe");
- writer->writeCharacters(":");
- writer->writeEndElement(); // para
- newLine();
- generateSignatureList(threadsafe);
- }
- } else { // thread-safe
- if (!reentrant.isEmpty()) {
- writer->writeCharacters("These functions are only ");
- generateSimpleLink(linkReentrant, "reentrant");
- writer->writeCharacters(":");
- writer->writeEndElement(); // para
- newLine();
- generateSignatureList(reentrant);
- }
- if (!nonreentrant.isEmpty()) {
- writer->writeCharacters("These functions are not ");
- generateSimpleLink(linkReentrant, "reentrant");
- writer->writeCharacters(":");
- writer->writeEndElement(); // para
- newLine();
- generateSignatureList(nonreentrant);
- }
- }
- }
- } else {
- writer->writeCharacters("This " + typeString(node) + " is ");
- if (ts == Node::ThreadSafe)
- generateSimpleLink(linkThreadSafe, "thread-safe");
- else
- generateSimpleLink(linkReentrant, "reentrant");
- writer->writeCharacters(".");
- writer->writeEndElement(); // para
- newLine();
- }
- writer->writeEndElement(); // note
-
- return true;
- }
-
- return false;
-}
-
-/*!
- Generate the body of the documentation from the qdoc comment
- found with the entity represented by the \a node.
- */
-void DocBookGenerator::generateBody(const Node *node)
-{
- // From Generator::generateBody, without warnings.
- const FunctionNode *fn = node->isFunction() ? static_cast<const FunctionNode *>(node) : nullptr;
-
- if (!node->hasDoc() && !node->hasSharedDoc()) {
- /*
- Test for special function, like a destructor or copy constructor,
- that has no documentation.
- */
- if (fn) {
- QString t;
- if (fn->isDtor()) {
- t = "Destroys the instance of " + fn->parent()->name() + ".";
- if (fn->isVirtual())
- t += " The destructor is virtual.";
- } else if (fn->isCtor()) {
- t = "Default constructs an instance of " + fn->parent()->name() + ".";
- } else if (fn->isCCtor()) {
- t = "Copy constructor.";
- } else if (fn->isMCtor()) {
- t = "Move-copy constructor.";
- } else if (fn->isCAssign()) {
- t = "Copy-assignment constructor.";
- } else if (fn->isMAssign()) {
- t = "Move-assignment constructor.";
- }
-
- if (!t.isEmpty())
- writer->writeTextElement(dbNamespace, "para", t);
- }
- } else if (!node->isSharingComment()) {
- // Reimplements clause and type alias info precede body text
- if (fn && !fn->overridesThis().isEmpty())
- generateReimplementsClause(fn);
- else if (node->isTypeAlias())
- generateAddendum(node, TypeAlias, nullptr, false);
- else if (node->isProperty()) {
- if (static_cast<const PropertyNode *>(node)->propertyType() != PropertyNode::Standard)
- generateAddendum(node, BindableProperty, nullptr, false);
- }
- if (!generateText(node->doc().body(), node)) {
- if (node->isMarkedReimp())
- return;
- }
-
- if (fn) {
- if (fn->isQmlSignal())
- generateAddendum(node, QmlSignalHandler);
- if (fn->isPrivateSignal())
- generateAddendum(node, PrivateSignal);
- if (fn->isInvokable())
- generateAddendum(node, Invokable);
- if (fn->hasAssociatedProperties())
- generateAddendum(node, AssociatedProperties);
- }
-
- // Warning generation skipped with respect to Generator::generateBody.
- }
-
- generateRequiredLinks(node);
-}
-
-/*!
- Generates either a link to the project folder for example \a node, or a list
- of links files/images if 'url.examples config' variable is not defined.
-
- Does nothing for non-example nodes.
-*/
-void DocBookGenerator::generateRequiredLinks(const Node *node)
-{
- // From Generator::generateRequiredLinks.
- if (!node->isExample())
- return;
-
- const auto en = static_cast<const ExampleNode *>(node);
- QString exampleUrl = Config::instance().getString(CONFIG_URL + Config::dot + CONFIG_EXAMPLES);
-
- if (exampleUrl.isEmpty()) {
- if (!en->noAutoList()) {
- generateFileList(en, false); // files
- generateFileList(en, true); // images
- }
- } else {
- generateLinkToExample(en, exampleUrl);
- }
-}
-
-/*!
- The path to the example replaces a placeholder '\1' character if
- one is found in the \a baseUrl string. If no such placeholder is found,
- the path is appended to \a baseUrl, after a '/' character if \a baseUrl did
- not already end in one.
-*/
-void DocBookGenerator::generateLinkToExample(const ExampleNode *en, const QString &baseUrl)
-{
- // From Generator::generateLinkToExample.
- QString exampleUrl(baseUrl);
- QString link;
-#ifndef QT_BOOTSTRAPPED
- link = QUrl(exampleUrl).host();
-#endif
- if (!link.isEmpty())
- link.prepend(" @ ");
- link.prepend("Example project");
-
- const QLatin1Char separator('/');
- const QLatin1Char placeholder('\1');
- if (!exampleUrl.contains(placeholder)) {
- if (!exampleUrl.endsWith(separator))
- exampleUrl += separator;
- exampleUrl += placeholder;
- }
-
- // Construct a path to the example; <install path>/<example name>
- QStringList path = QStringList()
- << Config::instance().getString(CONFIG_EXAMPLESINSTALLPATH) << en->name();
- path.removeAll({});
-
- writer->writeStartElement(dbNamespace, "para");
- writer->writeStartElement(dbNamespace, "link");
- writer->writeAttribute(xlinkNamespace, "href",
- exampleUrl.replace(placeholder, path.join(separator)));
- writer->writeCharacters(link);
- writer->writeEndElement(); // link
- writer->writeEndElement(); // para
- newLine();
-}
-
-/*!
- This function is called when the documentation for an example is
- being formatted. It outputs a list of files for the example, which
- can be the example's source files or the list of images used by the
- example. The images are copied into a subtree of
- \c{...doc/html/images/used-in-examples/...}
-*/
-void DocBookGenerator::generateFileList(const ExampleNode *en, bool images)
-{
- // From Generator::generateFileList
- QString tag;
- QStringList paths;
- if (images) {
- paths = en->images();
- tag = "Images:";
- } else { // files
- paths = en->files();
- tag = "Files:";
- }
- std::sort(paths.begin(), paths.end(), Generator::comparePaths);
-
- if (paths.isEmpty())
- return;
-
- writer->writeStartElement(dbNamespace, "para");
- writer->writeCharacters(tag);
- writer->writeEndElement(); // para
- newLine();
-
- writer->writeStartElement(dbNamespace, "itemizedlist");
-
- for (const auto &file : qAsConst(paths)) {
- if (images) {
- if (!file.isEmpty())
- addImageToCopy(en, file);
- } else {
- generateExampleFilePage(en, file);
- }
-
- writer->writeStartElement(dbNamespace, "listitem");
- newLine();
- writer->writeStartElement(dbNamespace, "para");
- generateSimpleLink(file, file);
- writer->writeEndElement(); // para
- writer->writeEndElement(); // listitem
- newLine();
- }
-
- writer->writeEndElement(); // itemizedlist
- newLine();
-}
-
-/*!
- Generate a file with the contents of a C++ or QML source file.
- */
-void DocBookGenerator::generateExampleFilePage(const Node *node, const QString &file,
- CodeMarker *marker)
-{
- Q_UNUSED(marker);
- // From HtmlGenerator::generateExampleFilePage.
- if (!node->isExample())
- return;
-
- const auto en = static_cast<const ExampleNode *>(node);
-
- // Store current (active) writer
- QXmlStreamWriter *currentWriter = writer;
- writer = startDocument(en, file);
- generateHeader(en->fullTitle(), en->subtitle(), en);
-
- Text text;
- Quoter quoter;
- Doc::quoteFromFile(en->doc().location(), quoter, file);
- QString code = quoter.quoteTo(en->location(), QString(), QString());
- CodeMarker *codeMarker = CodeMarker::markerForFileName(file);
- text << Atom(codeMarker->atomType(), code);
- Atom a(codeMarker->atomType(), code);
- generateText(text, en);
-
- endDocument();
- // Restore writer
- writer = currentWriter;
-}
-
-void DocBookGenerator::generateReimplementsClause(const FunctionNode *fn)
-{
- // From Generator::generateReimplementsClause, without warning generation.
- if (!fn->overridesThis().isEmpty()) {
- if (fn->parent()->isClassNode()) {
- auto cn = static_cast<ClassNode *>(fn->parent());
- const FunctionNode *overrides = cn->findOverriddenFunction(fn);
- if (overrides && !overrides->isPrivate() && !overrides->parent()->isPrivate()) {
- if (overrides->hasDoc()) {
- writer->writeStartElement(dbNamespace, "para");
- writer->writeCharacters("Reimplements: ");
- QString fullName =
- overrides->parent()->name() + "::" + overrides->signature(false, true);
- generateFullName(overrides->parent(), fullName, overrides);
- writer->writeCharacters(".");
- return;
- }
- }
- const PropertyNode *sameName = cn->findOverriddenProperty(fn);
- if (sameName && sameName->hasDoc()) {
- writer->writeStartElement(dbNamespace, "para");
- writer->writeCharacters("Reimplements an access function for property: ");
- QString fullName = sameName->parent()->name() + "::" + sameName->name();
- generateFullName(sameName->parent(), fullName, overrides);
- writer->writeCharacters(".");
- return;
- }
- }
- }
-}
-
-void DocBookGenerator::generateAlsoList(const Node *node, CodeMarker *marker)
-{
- Q_UNUSED(marker);
- // From Generator::generateAlsoList.
- QList<Text> alsoList = node->doc().alsoList();
- supplementAlsoList(node, alsoList);
-
- if (!alsoList.isEmpty()) {
- writer->writeStartElement(dbNamespace, "para");
- writer->writeStartElement(dbNamespace, "emphasis");
- writer->writeCharacters("See also ");
- writer->writeEndElement(); // emphasis
- newLine();
-
- writer->writeStartElement(dbNamespace, "simplelist");
- writer->writeAttribute("type", "vert");
- writer->writeAttribute("role", "see-also");
- for (const Text &text : alsoList) {
- writer->writeStartElement(dbNamespace, "member");
- generateText(text, node);
- writer->writeEndElement(); // member
- newLine();
- }
- writer->writeEndElement(); // simplelist
- newLine();
-
- writer->writeEndElement(); // para
- }
-}
-
-/*!
- Generate a list of maintainers in the output
- */
-void DocBookGenerator::generateMaintainerList(const Aggregate *node, CodeMarker *marker)
-{
- Q_UNUSED(marker);
- // From Generator::generateMaintainerList.
- QStringList sl = getMetadataElements(node, "maintainer");
-
- if (!sl.isEmpty()) {
- writer->writeStartElement(dbNamespace, "para");
- writer->writeStartElement(dbNamespace, "emphasis");
- writer->writeCharacters("Maintained by: ");
- writer->writeEndElement(); // emphasis
- newLine();
-
- writer->writeStartElement(dbNamespace, "simplelist");
- writer->writeAttribute("type", "vert");
- writer->writeAttribute("role", "maintainer");
- for (int i = 0; i < sl.size(); ++i) {
- writer->writeStartElement(dbNamespace, "member");
- writer->writeCharacters(sl.at(i));
- writer->writeEndElement(); // member
- newLine();
- }
- writer->writeEndElement(); // simplelist
- newLine();
-
- writer->writeEndElement(); // para
- }
-}
-
-/*!
- Open a new file to write XML contents, including the DocBook
- opening tag.
- */
-QXmlStreamWriter *DocBookGenerator::startGenericDocument(const Node *node, const QString &fileName)
-{
- QFile *outFile = openSubPageFile(node, fileName);
- writer = new QXmlStreamWriter(outFile);
- writer->setAutoFormatting(false); // We need a precise handling of line feeds.
-
- writer->writeStartDocument();
- newLine();
- writer->writeNamespace(dbNamespace, "db");
- writer->writeNamespace(xlinkNamespace, "xlink");
- writer->writeStartElement(dbNamespace, "article");
- writer->writeAttribute("version", "5.2");
- if (!naturalLanguage.isEmpty())
- writer->writeAttribute("xml:lang", naturalLanguage);
- newLine();
-
- // Empty the section stack for the new document.
- sectionLevels.resize(0);
-
- return writer;
-}
-
-QXmlStreamWriter *DocBookGenerator::startDocument(const Node *node)
-{
- QString fileName = Generator::fileName(node, fileExtension());
- return startGenericDocument(node, fileName);
-}
-
-QXmlStreamWriter *DocBookGenerator::startDocument(const ExampleNode *en, const QString &file)
-{
- QString fileName = linkForExampleFile(file, en);
- return startGenericDocument(en, fileName);
-}
-
-void DocBookGenerator::endDocument()
-{
- writer->writeEndElement(); // article
- writer->writeEndDocument();
- writer->device()->close();
- delete writer;
- writer = nullptr;
-}
-
-/*!
- Generate a reference page for the C++ class, namespace, or
- header file documented in \a node.
- */
-void DocBookGenerator::generateCppReferencePage(Node *node)
-{
- // Based on HtmlGenerator::generateCppReferencePage.
- Q_ASSERT(node->isAggregate());
- const auto aggregate = static_cast<const Aggregate *>(node);
-
- QString title;
- QString rawTitle;
- QString fullTitle;
- if (aggregate->isNamespace()) {
- rawTitle = aggregate->plainName();
- fullTitle = aggregate->plainFullName();
- title = rawTitle + " Namespace";
- } else if (aggregate->isClass()) {
- rawTitle = aggregate->plainName();
- QString templateDecl = node->templateDecl();
- if (!templateDecl.isEmpty())
- fullTitle = QString("%1 %2 ").arg(templateDecl, aggregate->typeWord(false));
- fullTitle += aggregate->plainFullName();
- title = rawTitle + QLatin1Char(' ') + aggregate->typeWord(true);
- } else if (aggregate->isHeader()) {
- title = fullTitle = rawTitle = aggregate->fullTitle();
- }
-
- QString subtitleText;
- if (rawTitle != fullTitle)
- subtitleText = fullTitle;
-
- // Start producing the DocBook file.
- writer = startDocument(node);
-
- // Info container.
- generateHeader(title, subtitleText, aggregate);
-
- generateRequisites(aggregate);
- generateStatus(aggregate);
-
- // Element synopsis.
- generateDocBookSynopsis(node);
-
- // Actual content.
- if (!aggregate->doc().isEmpty()) {
- startSection(registerRef("details"), "Detailed Description");
-
- generateBody(aggregate);
- generateAlsoList(aggregate);
- generateMaintainerList(aggregate);
-
- endSection();
- }
-
- Sections sections(const_cast<Aggregate *>(aggregate));
- auto *sectionVector =
- (aggregate->isNamespace() || aggregate->isHeader()) ?
- &sections.stdDetailsSections() :
- &sections.stdCppClassDetailsSections();
- SectionVector::ConstIterator section = sectionVector->constBegin();
- while (section != sectionVector->constEnd()) {
- bool headerGenerated = false;
- NodeVector::ConstIterator member = section->members().constBegin();
- while (member != section->members().constEnd()) {
- if ((*member)->access() == Access::Private) { // ### check necessary?
- ++member;
- continue;
- }
-
- if (!headerGenerated) {
- // Equivalent to h2
- startSection(registerRef(section->title().toLower()), section->title());
- headerGenerated = true;
- }
-
- if ((*member)->nodeType() != Node::Class) {
- // This function starts its own section.
- generateDetailedMember(*member, aggregate);
- } else {
- startSectionBegin();
- writer->writeCharacters("class ");
- generateFullName(*member, aggregate);
- startSectionEnd();
- generateBrief(*member);
- endSection();
- }
-
- ++member;
- }
-
- if (headerGenerated)
- endSection();
- ++section;
- }
-
- generateObsoleteMembers(sections);
-
- endDocument();
-}
-
-void DocBookGenerator::generateSynopsisInfo(const QString &key, const QString &value)
-{
- writer->writeStartElement(dbNamespace, "synopsisinfo");
- writer->writeAttribute(dbNamespace, "role", key);
- writer->writeCharacters(value);
- writer->writeEndElement(); // synopsisinfo
- newLine();
-}
-
-void DocBookGenerator::generateModifier(const QString &value)
-{
- writer->writeTextElement(dbNamespace, "modifier", value);
- newLine();
-}
-
-/*!
- Generate the metadata for the given \a node in DocBook.
- */
-void DocBookGenerator::generateDocBookSynopsis(const Node *node)
-{
- if (!node)
- return;
-
- // From Generator::generateStatus, HtmlGenerator::generateRequisites,
- // Generator::generateThreadSafeness, QDocIndexFiles::generateIndexSection.
-
- // This function is the only place where DocBook extensions are used.
- if (config->getBool(CONFIG_DOCBOOKEXTENSIONS))
- return;
-
- // Nothing to export in some cases. Note that isSharedCommentNode() returns
- // true also for QML property groups.
- if (node->isGroup() || node->isGroup() || node->isSharedCommentNode() || node->isModule()
- || node->isJsModule() || node->isQmlModule() || node->isPageNode())
- return;
-
- // Cast the node to several subtypes (null pointer if the node is not of the required type).
- const Aggregate *aggregate =
- node->isAggregate() ? static_cast<const Aggregate *>(node) : nullptr;
- const ClassNode *classNode = node->isClass() ? static_cast<const ClassNode *>(node) : nullptr;
- const FunctionNode *functionNode =
- node->isFunction() ? static_cast<const FunctionNode *>(node) : nullptr;
- const PropertyNode *propertyNode =
- node->isProperty() ? static_cast<const PropertyNode *>(node) : nullptr;
- const VariableNode *variableNode =
- node->isVariable() ? static_cast<const VariableNode *>(node) : nullptr;
- const EnumNode *enumNode = node->isEnumType() ? static_cast<const EnumNode *>(node) : nullptr;
- const QmlPropertyNode *qpn =
- node->isQmlProperty() ? static_cast<const QmlPropertyNode *>(node) : nullptr;
- const QmlTypeNode *qcn = node->isQmlType() ? static_cast<const QmlTypeNode *>(node) : nullptr;
- // Typedefs are ignored, as they correspond to enums.
- // Groups and modules are ignored.
- // Documents are ignored, they have no interesting metadata.
-
- // Start the synopsis tag.
- QString synopsisTag = nodeToSynopsisTag(node);
- writer->writeStartElement(dbNamespace, synopsisTag);
- newLine();
-
- // Name and basic properties of each tag (like types and parameters).
- if (node->isClass()) {
- writer->writeStartElement(dbNamespace, "ooclass");
- writer->writeTextElement(dbNamespace, "classname", node->plainName());
- writer->writeEndElement(); // ooclass
- newLine();
- } else if (node->isNamespace()) {
- writer->writeTextElement(dbNamespace, "namespacename", node->plainName());
- newLine();
- } else if (node->isQmlType()) {
- writer->writeStartElement(dbNamespace, "ooclass");
- writer->writeTextElement(dbNamespace, "classname", node->plainName());
- writer->writeEndElement(); // ooclass
- newLine();
- if (!qcn->groupNames().isEmpty())
- writer->writeAttribute("groups", qcn->groupNames().join(QLatin1Char(',')));
- } else if (node->isProperty()) {
- writer->writeTextElement(dbNamespace, "modifier", "(Qt property)");
- newLine();
- writer->writeTextElement(dbNamespace, "type", propertyNode->dataType());
- newLine();
- writer->writeTextElement(dbNamespace, "varname", node->plainName());
- newLine();
- } else if (node->isVariable()) {
- if (variableNode->isStatic()) {
- writer->writeTextElement(dbNamespace, "modifier", "static");
- newLine();
- }
- writer->writeTextElement(dbNamespace, "type", variableNode->dataType());
- newLine();
- writer->writeTextElement(dbNamespace, "varname", node->plainName());
- newLine();
- } else if (node->isEnumType()) {
- writer->writeTextElement(dbNamespace, "enumname", node->plainName());
- newLine();
- } else if (node->isQmlProperty()) {
- QString name = node->name();
- if (qpn->isAttached())
- name.prepend(qpn->element() + QLatin1Char('.'));
-
- writer->writeTextElement(dbNamespace, "type", qpn->dataType());
- newLine();
- writer->writeTextElement(dbNamespace, "varname", name);
- newLine();
-
- if (qpn->isAttached()) {
- writer->writeTextElement(dbNamespace, "modifier", "attached");
- newLine();
- }
- if ((const_cast<QmlPropertyNode *>(qpn))->isWritable()) {
- writer->writeTextElement(dbNamespace, "modifier", "writable");
- newLine();
- }
- if ((const_cast<QmlPropertyNode *>(qpn))->isRequired()) {
- writer->writeTextElement(dbNamespace, "modifier", "required");
- newLine();
- }
- if (qpn->isReadOnly()) {
- generateModifier("[read-only]");
- newLine();
- }
- if (qpn->isDefault()) {
- generateModifier("[default]");
- newLine();
- }
- } else if (node->isFunction()) {
- if (functionNode->virtualness() != "non")
- generateModifier("virtual");
- if (functionNode->isConst())
- generateModifier("const");
- if (functionNode->isStatic())
- generateModifier("static");
-
- if (!functionNode->isMacro()) {
- if (functionNode->returnType() == "void")
- writer->writeEmptyElement(dbNamespace, "void");
- else
- writer->writeTextElement(dbNamespace, "type", functionNode->returnType());
- newLine();
- }
- // Remove two characters from the plain name to only get the name
- // of the method without parentheses.
- writer->writeTextElement(dbNamespace, "methodname", node->plainName().chopped(2));
- newLine();
-
- if (functionNode->isOverload())
- generateModifier("overload");
- if (functionNode->isDefault())
- generateModifier("default");
- if (functionNode->isFinal())
- generateModifier("final");
- if (functionNode->isOverride())
- generateModifier("override");
-
- if (!functionNode->isMacro() && functionNode->parameters().isEmpty()) {
- writer->writeEmptyElement(dbNamespace, "void");
- newLine();
- }
-
- const Parameters &lp = functionNode->parameters();
- for (int i = 0; i < lp.count(); ++i) {
- const Parameter &parameter = lp.at(i);
- writer->writeStartElement(dbNamespace, "methodparam");
- newLine();
- writer->writeTextElement(dbNamespace, "type", parameter.type());
- newLine();
- writer->writeTextElement(dbNamespace, "parameter", parameter.name());
- newLine();
- if (!parameter.defaultValue().isEmpty()) {
- writer->writeTextElement(dbNamespace, "initializer", parameter.defaultValue());
- newLine();
- }
- writer->writeEndElement(); // methodparam
- newLine();
- }
-
- generateSynopsisInfo("meta", functionNode->metanessString());
-
- if (functionNode->isOverload())
- generateSynopsisInfo("overload-number",
- QString::number(functionNode->overloadNumber()));
-
- if (functionNode->isRef())
- generateSynopsisInfo("refness", QString::number(1));
- else if (functionNode->isRefRef())
- generateSynopsisInfo("refness", QString::number(2));
-
- if (functionNode->hasAssociatedProperties()) {
- QStringList associatedProperties;
- const NodeList &nodes = functionNode->associatedProperties();
- for (const Node *n : nodes) {
- const auto pn = static_cast<const PropertyNode *>(n);
- associatedProperties << pn->name();
- }
- associatedProperties.sort();
- generateSynopsisInfo("associated-property",
- associatedProperties.join(QLatin1Char(',')));
- }
-
- QString signature = functionNode->signature(false, false);
- // 'const' is already part of FunctionNode::signature()
- if (functionNode->isFinal())
- signature += " final";
- if (functionNode->isOverride())
- signature += " override";
- if (functionNode->isPureVirtual())
- signature += " = 0";
- else if (functionNode->isDefault())
- signature += " = default";
- generateSynopsisInfo("signature", signature);
- } else if (node->isTypedef()) {
- writer->writeTextElement(dbNamespace, "type", node->plainName());
- } else {
- node->doc().location().warning(
- QStringLiteral("Unexpected node type in generateDocBookSynopsis: %1")
- .arg(node->nodeTypeString()));
- newLine();
- }
-
- // Accessibility status.
- if (!node->isPageNode() && !node->isCollectionNode()) {
- switch (node->access()) {
- case Access::Public:
- generateSynopsisInfo("access", "public");
- break;
- case Access::Protected:
- generateSynopsisInfo("access", "protected");
- break;
- case Access::Private:
- generateSynopsisInfo("access", "private");
- break;
- default:
- break;
- }
- if (node->isAbstract())
- generateSynopsisInfo("abstract", "true");
- }
-
- // Status.
- switch (node->status()) {
- case Node::Active:
- generateSynopsisInfo("status", "active");
- break;
- case Node::Preliminary:
- generateSynopsisInfo("status", "preliminary");
- break;
- case Node::Deprecated:
- generateSynopsisInfo("status", "deprecated");
- break;
- case Node::Obsolete:
- generateSynopsisInfo("status", "obsolete");
- break;
- case Node::Internal:
- generateSynopsisInfo("status", "internal");
- break;
- default:
- generateSynopsisInfo("status", "main");
- break;
- }
-
- // C++ classes and name spaces.
- if (aggregate) {
- // Includes.
- if (!aggregate->includeFiles().isEmpty()) {
- for (const QString &include : aggregate->includeFiles())
- generateSynopsisInfo("headers", include);
- }
-
- // Since and project.
- if (!aggregate->since().isEmpty())
- generateSynopsisInfo("since", formatSince(aggregate));
-
- if (aggregate->nodeType() == Node::Class || aggregate->nodeType() == Node::Namespace) {
- // CMake and QT variable.
- if (!aggregate->physicalModuleName().isEmpty()) {
- const CollectionNode *cn =
- m_qdb->getCollectionNode(aggregate->physicalModuleName(), Node::Module);
- if (cn && !cn->qtCMakeComponent().isEmpty()) {
- const auto qtMajorVersion = QString::number(QT_VERSION_MAJOR);
- const QString findpackageText = "find_package(Qt" + qtMajorVersion
- + " COMPONENT " + cn->qtCMakeComponent() + ")";
- const QString targetLinkLibrariesText =
- "target_link_libraries(mytarget PUBLIC Qt::" + cn->qtCMakeComponent()
- + ")";
- generateSynopsisInfo("cmake-find-package", findpackageText);
- generateSynopsisInfo("cmake-target-link-libraries", targetLinkLibrariesText);
- }
- if (cn && !cn->qtVariable().isEmpty())
- generateSynopsisInfo("qmake", "QT += " + cn->qtVariable());
- }
- }
-
- if (aggregate->nodeType() == Node::Class) {
- // Instantiated by.
- 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);
-
- writer->writeStartElement(dbNamespace, "synopsisinfo");
- writer->writeAttribute(dbNamespace, "role", "instantiatedBy");
- generateSimpleLink(link, classe->qmlElement()->name());
- writer->writeEndElement(); // synopsisinfo
- newLine();
- }
-
- // Inherits.
- QList<RelatedClass>::ConstIterator r;
- if (!classe->baseClasses().isEmpty()) {
- writer->writeStartElement(dbNamespace, "synopsisinfo");
- writer->writeAttribute(dbNamespace, "role", "inherits");
-
- r = classe->baseClasses().constBegin();
- int index = 0;
- while (r != classe->baseClasses().constEnd()) {
- if ((*r).m_node) {
- generateFullName((*r).m_node, classe);
-
- if ((*r).m_access == Access::Protected) {
- writer->writeCharacters(" (protected)");
- } else if ((*r).m_access == Access::Private) {
- writer->writeCharacters(" (private)");
- }
- writer->writeCharacters(comma(index++, classe->baseClasses().count()));
- }
- ++r;
- }
-
- writer->writeEndElement(); // synopsisinfo
- newLine();
- }
-
- // Inherited by.
- if (!classe->derivedClasses().isEmpty()) {
- writer->writeStartElement(dbNamespace, "synopsisinfo");
- writer->writeAttribute(dbNamespace, "role", "inheritedBy");
- generateSortedNames(classe, classe->derivedClasses());
- writer->writeEndElement(); // synopsisinfo
- newLine();
- }
- }
- }
-
- // QML types.
- if (qcn) {
- // Module name and version (i.e. import).
- QString logicalModuleVersion;
- const CollectionNode *collection =
- m_qdb->getCollectionNode(qcn->logicalModuleName(), qcn->nodeType());
- if (collection)
- logicalModuleVersion = collection->logicalModuleVersion();
- else
- logicalModuleVersion = qcn->logicalModuleVersion();
-
- generateSynopsisInfo("import",
- "import " + qcn->logicalModuleName() + QLatin1Char(' ')
- + logicalModuleVersion);
-
- // Since and project.
- if (!qcn->since().isEmpty())
- generateSynopsisInfo("since", formatSince(qcn));
-
- // Inherited by.
- NodeList subs;
- QmlTypeNode::subclasses(qcn, subs);
- if (!subs.isEmpty()) {
- writer->writeTextElement(dbNamespace, "synopsisinfo");
- writer->writeAttribute(dbNamespace, "role", "inheritedBy");
- generateSortedQmlNames(qcn, subs);
- writer->writeEndElement(); // synopsisinfo
- newLine();
- }
-
- // Inherits.
- QmlTypeNode *base = qcn->qmlBaseNode();
- while (base && base->isInternal())
- base = base->qmlBaseNode();
- if (base) {
- const Node *otherNode = nullptr;
- Atom a = Atom(Atom::LinkNode, CodeMarker::stringForNode(base));
- QString link = getAutoLink(&a, base, &otherNode);
-
- writer->writeTextElement(dbNamespace, "synopsisinfo");
- writer->writeAttribute(dbNamespace, "role", "inherits");
- generateSimpleLink(link, base->name());
- writer->writeEndElement(); // synopsisinfo
- newLine();
- }
-
- // Instantiates.
- ClassNode *cn = (const_cast<QmlTypeNode *>(qcn))->classNode();
- if (cn && (cn->status() != Node::Internal)) {
- const Node *otherNode = nullptr;
- Atom a = Atom(Atom::LinkNode, CodeMarker::stringForNode(qcn));
- QString link = getAutoLink(&a, cn, &otherNode);
-
- writer->writeTextElement(dbNamespace, "synopsisinfo");
- writer->writeAttribute(dbNamespace, "role", "instantiates");
- generateSimpleLink(link, cn->name());
- writer->writeEndElement(); // synopsisinfo
- newLine();
- }
- }
-
- // Thread safeness.
- switch (node->threadSafeness()) {
- case Node::UnspecifiedSafeness:
- generateSynopsisInfo("threadsafeness", "unspecified");
- break;
- case Node::NonReentrant:
- generateSynopsisInfo("threadsafeness", "non-reentrant");
- break;
- case Node::Reentrant:
- generateSynopsisInfo("threadsafeness", "reentrant");
- break;
- case Node::ThreadSafe:
- generateSynopsisInfo("threadsafeness", "thread safe");
- break;
- default:
- generateSynopsisInfo("threadsafeness", "unspecified");
- break;
- }
-
- // Module.
- if (!node->physicalModuleName().isEmpty())
- generateSynopsisInfo("module", node->physicalModuleName());
-
- // Group.
- if (classNode && !classNode->groupNames().isEmpty()) {
- generateSynopsisInfo("groups", classNode->groupNames().join(QLatin1Char(',')));
- } else if (qcn && !qcn->groupNames().isEmpty()) {
- generateSynopsisInfo("groups", qcn->groupNames().join(QLatin1Char(',')));
- }
-
- // Properties.
- if (propertyNode) {
- for (const Node *fnNode : propertyNode->getters()) {
- if (fnNode) {
- const auto funcNode = static_cast<const FunctionNode *>(fnNode);
- generateSynopsisInfo("getter", funcNode->name());
- }
- }
- for (const Node *fnNode : propertyNode->setters()) {
- if (fnNode) {
- const auto funcNode = static_cast<const FunctionNode *>(fnNode);
- generateSynopsisInfo("setter", funcNode->name());
- }
- }
- for (const Node *fnNode : propertyNode->resetters()) {
- if (fnNode) {
- const auto funcNode = static_cast<const FunctionNode *>(fnNode);
- generateSynopsisInfo("resetter", funcNode->name());
- }
- }
- for (const Node *fnNode : propertyNode->notifiers()) {
- if (fnNode) {
- const auto funcNode = static_cast<const FunctionNode *>(fnNode);
- generateSynopsisInfo("notifier", funcNode->name());
- }
- }
- }
-
- // Enums and typedefs.
- if (enumNode) {
- for (const EnumItem &item : enumNode->items()) {
- writer->writeStartElement(dbNamespace, "enumitem");
- writer->writeAttribute(dbNamespace, "enumidentifier", item.name());
- writer->writeAttribute(dbNamespace, "enumvalue", item.value());
- writer->writeEndElement(); // enumitem
- newLine();
- }
- }
-
- writer->writeEndElement(); // nodeToSynopsisTag (like classsynopsis)
- newLine();
-
- // The typedef associated to this enum.
- if (enumNode && enumNode->flagsType()) {
- writer->writeStartElement(dbNamespace, "typedefsynopsis");
- newLine();
-
- writer->writeTextElement(dbNamespace, "typedefname",
- enumNode->flagsType()->fullDocumentName());
-
- writer->writeEndElement(); // typedefsynopsis
- newLine();
- }
-}
-
-QString taggedNode(const Node *node)
-{
- // From CodeMarker::taggedNode, but without the tag part (i.e. only the QML specific case
- // remaining).
- // TODO: find a better name for this.
- if (node->nodeType() == Node::QmlType && node->name().startsWith(QLatin1String("QML:")))
- return node->name().mid(4);
- return node->name();
-}
-
-/*!
- Parses a string with method/variable name and (return) type
- to include type tags.
- */
-void DocBookGenerator::typified(const QString &string, const Node *relative, bool trailingSpace,
- bool generateType)
-{
- // Adapted from CodeMarker::typified and HtmlGenerator::highlightedCode.
- // Note: CppCodeMarker::markedUpIncludes is not needed for DocBook, as this part is natively
- // generated as DocBook. Hence, there is no need to reimplement <@headerfile> from
- // HtmlGenerator::highlightedCode.
- QString result;
- QString pendingWord;
-
- for (int i = 0; i <= string.size(); ++i) {
- QChar ch;
- if (i != string.size())
- ch = string.at(i);
-
- QChar lower = ch.toLower();
- if ((lower >= QLatin1Char('a') && lower <= QLatin1Char('z')) || ch.digitValue() >= 0
- || ch == QLatin1Char('_') || ch == QLatin1Char(':')) {
- pendingWord += ch;
- } else {
- if (!pendingWord.isEmpty()) {
- bool isProbablyType = (pendingWord != QLatin1String("const"));
- if (generateType && isProbablyType) {
- // Flush the current buffer.
- writer->writeCharacters(result);
- result.truncate(0);
-
- // Add the link, logic from HtmlGenerator::highlightedCode.
- const Node *n = m_qdb->findTypeNode(pendingWord, relative, Node::DontCare);
- QString href;
- if (!(n && (n->isQmlBasicType() || n->isJsBasicType()))
- || (relative
- && (relative->genus() == n->genus() || Node::DontCare == n->genus()))) {
- href = linkForNode(n, relative);
- }
-
- writer->writeStartElement(dbNamespace, "type");
- if (href.isEmpty())
- writer->writeCharacters(pendingWord);
- else
- generateSimpleLink(href, pendingWord);
- writer->writeEndElement(); // type
- } else {
- result += pendingWord;
- }
- }
- pendingWord.clear();
-
- switch (ch.unicode()) {
- case '\0':
- break;
- // This only breaks out of the switch, not the loop. This means that the loop
- // deliberately overshoots by one character.
- case '&':
- result += QLatin1String("&amp;");
- break;
- case '<':
- result += QLatin1String("&lt;");
- break;
- case '>':
- result += QLatin1String("&gt;");
- break;
- case '\'':
- result += QLatin1String("&apos;");
- break;
- case '"':
- result += QLatin1String("&quot;");
- break;
- default:
- result += ch;
- }
- }
- }
-
- if (trailingSpace && string.size()) {
- if (!string.endsWith(QLatin1Char('*')) && !string.endsWith(QLatin1Char('&')))
- result += QLatin1Char(' ');
- }
-
- writer->writeCharacters(result);
-}
-
-void DocBookGenerator::generateSynopsisName(const Node *node, const Node *relative,
- bool generateNameLink)
-{
- // Implements the rewriting of <@link> from HtmlGenerator::highlightedCode, only due to calls to
- // CodeMarker::linkTag in CppCodeMarker::markedUpSynopsis.
- QString name = taggedNode(node);
-
- if (!generateNameLink) {
- writer->writeCharacters(name);
- return;
- }
-
- writer->writeStartElement(dbNamespace, "emphasis");
- writer->writeAttribute("role", "bold");
- generateSimpleLink(linkForNode(node, relative), name);
- writer->writeEndElement(); // emphasis
-}
-
-void DocBookGenerator::generateParameter(const Parameter &parameter, const Node *relative,
- bool generateExtra, bool generateType)
-{
- const QString &pname = parameter.name();
- const QString &ptype = parameter.type();
- QString paramName;
- if (!pname.isEmpty()) {
- typified(ptype, relative, true, generateType);
- paramName = pname;
- } else {
- paramName = ptype;
- }
- if (generateExtra || pname.isEmpty()) {
- // Look for the _ character in the member name followed by a number (or n):
- // this is intended to be rendered as a subscript.
- QRegularExpression sub("([a-z]+)_([0-9]+|n)");
-
- writer->writeStartElement(dbNamespace, "emphasis");
- auto match = sub.match(paramName);
- if (match.hasMatch()) {
- writer->writeCharacters(match.captured(0));
- writer->writeStartElement(dbNamespace, "sub");
- writer->writeCharacters(match.captured(1));
- writer->writeEndElement(); // sub
- } else {
- writer->writeCharacters(paramName);
- }
- writer->writeEndElement(); // emphasis
- }
-
- const QString &pvalue = parameter.defaultValue();
- if (generateExtra && !pvalue.isEmpty())
- writer->writeCharacters(" = " + pvalue);
-}
-
-void DocBookGenerator::generateSynopsis(const Node *node, const Node *relative,
- Section::Style style)
-{
- // From HtmlGenerator::generateSynopsis (conditions written as booleans).
- const bool generateExtra = style != Section::AllMembers;
- const bool generateType = style != Section::Details;
- const bool generateNameLink = style != Section::Details;
-
- // From CppCodeMarker::markedUpSynopsis, reversed the generation of "extra" and "synopsis".
- const int MaxEnumValues = 6;
-
- if (generateExtra)
- writer->writeCharacters(CodeMarker::extraSynopsis(node, style));
-
- // Then generate the synopsis.
- if (style == Section::Details) {
- if (!node->isRelatedNonmember() && !node->isProxyNode() && !node->parent()->name().isEmpty()
- && !node->parent()->isHeader() && !node->isProperty() && !node->isQmlNode()
- && !node->isJsNode()) {
- writer->writeCharacters(taggedNode(node->parent()) + "::");
- }
- }
-
- switch (node->nodeType()) {
- case Node::Namespace:
- writer->writeCharacters("namespace ");
- generateSynopsisName(node, relative, generateNameLink);
- break;
- case Node::Class:
- writer->writeCharacters("class ");
- generateSynopsisName(node, relative, generateNameLink);
- break;
- case Node::Function: {
- const auto func = (const FunctionNode *)node;
-
- // First, the part coming before the name.
- if (style == Section::Summary || style == Section::Accessors) {
- if (!func->isNonvirtual())
- writer->writeCharacters(QStringLiteral("virtual "));
- }
-
- // Name and parameters.
- if (style != Section::AllMembers && !func->returnType().isEmpty())
- typified(func->returnType(), relative, true, generateType);
- generateSynopsisName(node, relative, generateNameLink);
-
- if (!func->isMacroWithoutParams()) {
- writer->writeCharacters(QStringLiteral("("));
- if (!func->parameters().isEmpty()) {
- const Parameters &parameters = func->parameters();
- for (int i = 0; i < parameters.count(); i++) {
- if (i > 0)
- writer->writeCharacters(QStringLiteral(", "));
- generateParameter(parameters.at(i), relative, generateExtra, generateType);
- }
- }
- writer->writeCharacters(QStringLiteral(")"));
- }
- if (func->isConst())
- writer->writeCharacters(QStringLiteral(" const"));
-
- if (style == Section::Summary || style == Section::Accessors) {
- // virtual is prepended, if needed.
- QString synopsis;
- if (func->isFinal())
- synopsis += QStringLiteral(" final");
- if (func->isOverride())
- synopsis += QStringLiteral(" override");
- if (func->isPureVirtual())
- synopsis += QStringLiteral(" = 0");
- if (func->isRef())
- synopsis += QStringLiteral(" &");
- else if (func->isRefRef())
- synopsis += QStringLiteral(" &&");
- writer->writeCharacters(synopsis);
- } else if (style == Section::AllMembers) {
- if (!func->returnType().isEmpty() && func->returnType() != "void") {
- writer->writeCharacters(QStringLiteral(" : "));
- typified(func->returnType(), relative, false, generateType);
- }
- } else {
- QString synopsis;
- if (func->isRef())
- synopsis += QStringLiteral(" &");
- else if (func->isRefRef())
- synopsis += QStringLiteral(" &&");
- writer->writeCharacters(synopsis);
- }
- } break;
- case Node::Enum: {
- const auto enume = static_cast<const EnumNode *>(node);
- writer->writeCharacters(QStringLiteral("enum "));
- generateSynopsisName(node, relative, generateNameLink);
-
- QString synopsis;
- if (style == Section::Summary) {
- synopsis += " { ";
-
- QStringList documentedItems = enume->doc().enumItemNames();
- if (documentedItems.isEmpty()) {
- const auto &enumItems = enume->items();
- for (const auto &item : enumItems)
- documentedItems << item.name();
- }
- const QStringList omitItems = enume->doc().omitEnumItemNames();
- for (const auto &item : omitItems)
- documentedItems.removeAll(item);
-
- if (documentedItems.size() > MaxEnumValues) {
- // Take the last element and keep it safe, then elide the surplus.
- const QString last = documentedItems.last();
- documentedItems = documentedItems.mid(0, MaxEnumValues - 1);
- documentedItems += "&#x2026;"; // Ellipsis: in HTML, &hellip;.
- documentedItems += last;
- }
- synopsis += documentedItems.join(QLatin1String(", "));
-
- if (!documentedItems.isEmpty())
- synopsis += QLatin1Char(' ');
- synopsis += QLatin1Char('}');
- }
- writer->writeCharacters(synopsis);
- } break;
- case Node::Typedef: {
- const auto typedeff = static_cast<const TypedefNode *>(node);
- if (typedeff->associatedEnum())
- writer->writeCharacters("flags ");
- else
- writer->writeCharacters("typedef ");
- generateSynopsisName(node, relative, generateNameLink);
- } break;
- case Node::Property: {
- const auto property = static_cast<const PropertyNode *>(node);
- generateSynopsisName(node, relative, generateNameLink);
- writer->writeCharacters(" : ");
- typified(property->qualifiedDataType(), relative, false, generateType);
- } break;
- case Node::Variable: {
- const auto variable = static_cast<const VariableNode *>(node);
- if (style == Section::AllMembers) {
- generateSynopsisName(node, relative, generateNameLink);
- writer->writeCharacters(" : ");
- typified(variable->dataType(), relative, false, generateType);
- } else {
- typified(variable->leftType(), relative, false, generateType);
- writer->writeCharacters(" ");
- generateSynopsisName(node, relative, generateNameLink);
- writer->writeCharacters(variable->rightType());
- }
- } break;
- default:
- generateSynopsisName(node, relative, generateNameLink);
- }
-}
-
-void DocBookGenerator::generateEnumValue(const QString &enumValue, const Node *relative)
-{
- // From CppCodeMarker::markedUpEnumValue, simplifications from Generator::plainCode (removing
- // <@op>). With respect to CppCodeMarker::markedUpEnumValue, the order of generation of parents
- // must be reversed so that they are processed in the order
- if (!relative->isEnumType()) {
- writer->writeCharacters(enumValue);
- return;
- }
-
- QList<const Node *> parents;
- const Node *node = relative->parent();
- while (!node->isHeader() && node->parent()) {
- parents.prepend(node);
- if (node->parent() == relative || node->parent()->name().isEmpty())
- break;
- node = node->parent();
- }
- if (static_cast<const EnumNode *>(relative)->isScoped())
- parents << relative;
-
- writer->writeStartElement(dbNamespace, "code");
- for (auto parent : parents) {
- generateSynopsisName(parent, relative, true);
- writer->writeCharacters("::");
- }
-
- writer->writeCharacters(enumValue);
- writer->writeEndElement(); // code
-}
-
-/*!
- If the node is an overloaded signal, and a node with an
- example on how to connect to it
-
- Someone didn't finish writing this comment, and I don't know what this
- function is supposed to do, so I have not tried to complete the comment
- yet.
- */
-void DocBookGenerator::generateOverloadedSignal(const Node *node)
-{
- // From Generator::generateOverloadedSignal.
- QString code = getOverloadedSignalCode(node);
- if (code.isEmpty())
- return;
-
- writer->writeStartElement(dbNamespace, "note");
- newLine();
- writer->writeStartElement(dbNamespace, "para");
- writer->writeCharacters("Signal ");
- writer->writeTextElement(dbNamespace, "emphasis", node->name());
- writer->writeCharacters(" is overloaded in this class. To connect to this "
- "signal by using the function pointer syntax, Qt "
- "provides a convenient helper for obtaining the "
- "function pointer as shown in this example:");
- writer->writeTextElement(dbNamespace, "code", code);
- writer->writeEndElement(); // para
- newLine();
- writer->writeEndElement(); // note
- newLine();
-}
-
-/*!
- Generates an addendum note of type \a type for \a node. \a marker
- is unused in this generator.
-*/
-void DocBookGenerator::generateAddendum(const Node *node, Addendum type, CodeMarker *marker,
- bool generateNote)
-{
- Q_UNUSED(marker);
- Q_ASSERT(node && !node->name().isEmpty());
- if (generateNote) {
- writer->writeStartElement(dbNamespace, "note");
- newLine();
- }
- switch (type) {
- case Invokable:
- writer->writeStartElement(dbNamespace, "para");
- writer->writeCharacters(
- "This function can be invoked via the meta-object system and from QML. See ");
- generateSimpleLink(node->url(), "Q_INVOKABLE");
- writer->writeCharacters(".");
- writer->writeEndElement(); // para
- newLine();
- break;
- case PrivateSignal:
- writer->writeTextElement(dbNamespace, "para",
- "This is a private signal. It can be used in signal connections but "
- "cannot be emitted by the user.");
- break;
- case QmlSignalHandler:
- {
- QString handler(node->name());
- handler[0] = handler[0].toTitleCase();
- handler.prepend(QLatin1String("on"));
- writer->writeStartElement(dbNamespace, "para");
- writer->writeCharacters("The corresponding handler is ");
- writer->writeTextElement(dbNamespace, "code", handler);
- writer->writeCharacters(".");
- writer->writeEndElement(); // para
- newLine();
- break;
- }
- case AssociatedProperties:
- {
- if (!node->isFunction())
- return;
- const FunctionNode *fn = static_cast<const FunctionNode *>(node);
- NodeList nodes = fn->associatedProperties();
- if (nodes.isEmpty())
- return;
- std::sort(nodes.begin(), nodes.end(), Node::nodeNameLessThan);
- for (const auto node : qAsConst(nodes)) {
- QString msg;
- const auto pn = static_cast<const PropertyNode *>(node);
- switch (pn->role(fn)) {
- case PropertyNode::Getter:
- msg = QStringLiteral("Getter function");
- break;
- case PropertyNode::Setter:
- msg = QStringLiteral("Setter function");
- break;
- case PropertyNode::Resetter:
- msg = QStringLiteral("Resetter function");
- break;
- case PropertyNode::Notifier:
- msg = QStringLiteral("Notifier signal");
- break;
- default:
- continue;
- }
- writer->writeCharacters(msg + " for property ");
- generateSimpleLink(linkForNode(pn, nullptr), pn->name());
- writer->writeCharacters(". ");
- }
- break;
- }
- case TypeAlias:
- {
- if (!node->isTypeAlias())
- return;
- writer->writeStartElement(dbNamespace, "para");
- const auto *ta = static_cast<const TypeAliasNode *>(node);
- writer->writeCharacters("This is a type alias for ");
- if (ta->aliasedNode() && ta->aliasedNode()->isInAPI())
- generateSimpleLink(linkForNode(ta->aliasedNode(), nullptr),
- ta->aliasedNode()->plainFullName(ta->parent()));
- else
- writer->writeTextElement(dbNamespace, "code", ta->aliasedType());
-
- writer->writeCharacters(".");
- writer->writeEndElement(); // para
- newLine();
- break;
- }
- case BindableProperty:
- {
- const Node *linkNode;
- Atom linkAtom = Atom(Atom::Link, "QProperty");
- QString link = getAutoLink(&linkAtom, node, &linkNode);
- writer->writeStartElement(dbNamespace, "para");
- writer->writeCharacters("This property supports ");
- generateSimpleLink(link, "QProperty");
- writer->writeCharacters(" bindings.");
- writer->writeEndElement(); // para
- newLine();
- break;
- }
- default:
- break;
- }
-
- if (generateNote) {
- writer->writeEndElement(); // note
- newLine();
- }
-}
-
-void DocBookGenerator::generateDetailedMember(const Node *node, const PageNode *relative)
-{
- // From HtmlGenerator::generateDetailedMember.
- writer->writeStartElement(dbNamespace, "section");
- if (node->isSharedCommentNode()) {
- const auto scn = reinterpret_cast<const SharedCommentNode *>(node);
- const QList<Node *> &collective = scn->collective();
-
- bool firstFunction = true;
- for (const Node *n : collective) {
- if (n->isFunction()) {
- QString nodeRef = refForNode(n);
-
- if (firstFunction) {
- writer->writeAttribute("xml:id", refForNode(collective.at(0)));
- newLine();
- writer->writeStartElement(dbNamespace, "title");
- generateSynopsis(n, relative, Section::Details);
- writer->writeEndElement(); // title
- newLine();
-
- firstFunction = false;
- } else {
- writer->writeStartElement(dbNamespace, "bridgehead");
- writer->writeAttribute("renderas", "sect2");
- writer->writeAttribute("xml:id", nodeRef);
- generateSynopsis(n, relative, Section::Details);
- writer->writeEndElement(); // bridgehead
- newLine();
- }
- }
- }
- } else {
- const EnumNode *etn;
- QString nodeRef = refForNode(node);
- if (node->isEnumType() && (etn = static_cast<const EnumNode *>(node))->flagsType()) {
- writer->writeAttribute("xml:id", nodeRef);
- newLine();
- writer->writeStartElement(dbNamespace, "title");
- generateSynopsis(etn, relative, Section::Details);
- writer->writeEndElement(); // title
- newLine();
- writer->writeStartElement(dbNamespace, "bridgehead");
- generateSynopsis(etn->flagsType(), relative, Section::Details);
- writer->writeEndElement(); // bridgehead
- newLine();
- } else {
- writer->writeAttribute("xml:id", nodeRef);
- newLine();
- writer->writeStartElement(dbNamespace, "title");
- generateSynopsis(node, relative, Section::Details);
- writer->writeEndElement(); // title
- newLine();
- }
- }
-
- generateDocBookSynopsis(node);
-
- generateStatus(node);
- generateBody(node);
- generateOverloadedSignal(node);
- generateThreadSafeness(node);
- generateSince(node);
-
- if (node->isProperty()) {
- const auto property = static_cast<const PropertyNode *>(node);
- if (property->propertyType() == PropertyNode::Standard) {
- Section section(Section::Accessors, Section::Active);
-
- section.appendMembers(property->getters().toVector());
- section.appendMembers(property->setters().toVector());
- section.appendMembers(property->resetters().toVector());
-
- if (!section.members().isEmpty()) {
- writer->writeStartElement(dbNamespace, "para");
- newLine();
- writer->writeStartElement(dbNamespace, "emphasis");
- writer->writeAttribute("role", "bold");
- writer->writeCharacters("Access functions:");
- newLine();
- writer->writeEndElement(); // emphasis
- newLine();
- writer->writeEndElement(); // para
- newLine();
- generateSectionList(section, node);
- }
-
- Section notifiers(Section::Accessors, Section::Active);
- notifiers.appendMembers(property->notifiers().toVector());
-
- if (!notifiers.members().isEmpty()) {
- writer->writeStartElement(dbNamespace, "para");
- newLine();
- writer->writeStartElement(dbNamespace, "emphasis");
- writer->writeAttribute("role", "bold");
- writer->writeCharacters("Notifier signal:");
- newLine();
- writer->writeEndElement(); // emphasis
- newLine();
- writer->writeEndElement(); // para
- newLine();
- generateSectionList(notifiers, node);
- }
- }
- } else if (node->isEnumType()) {
- const auto en = static_cast<const EnumNode *>(node);
-
- if (qflagsHref_.isEmpty()) {
- Node *qflags = m_qdb->findClassNode(QStringList("QFlags"));
- if (qflags)
- qflagsHref_ = linkForNode(qflags, nullptr);
- }
-
- if (en->flagsType()) {
- writer->writeStartElement(dbNamespace, "para");
- writer->writeCharacters("The " + en->flagsType()->name() + " type is a typedef for ");
- generateSimpleLink(qflagsHref_, "QFlags");
- writer->writeCharacters("&lt;" + en->name() + "&gt;. ");
- writer->writeCharacters("It stores an OR combination of " + en->name() + "values.");
- writer->writeEndElement(); // para
- newLine();
- }
- }
- generateAlsoList(node);
- endSection(); // section
-}
-
-void DocBookGenerator::generateSectionList(const Section &section, const Node *relative,
- Section::Status status)
-{
- // From HtmlGenerator::generateSectionList, just generating a list (not tables).
- const NodeVector &members =
- (status == Section::Obsolete ? section.obsoleteMembers() : section.members());
- if (!members.isEmpty()) {
- bool hasPrivateSignals = false;
- bool isInvokable = false;
-
- writer->writeStartElement(dbNamespace, "itemizedlist");
- newLine();
-
- int i = 0;
- NodeVector::ConstIterator m = members.constBegin();
- while (m != members.constEnd()) {
- if ((*m)->access() == Access::Private) {
- ++m;
- continue;
- }
-
- writer->writeStartElement(dbNamespace, "listitem");
- newLine();
- writer->writeStartElement(dbNamespace, "para");
-
- // prefix no more needed.
- generateSynopsis(*m, relative, section.style());
- if ((*m)->isFunction()) {
- const auto fn = static_cast<const FunctionNode *>(*m);
- if (fn->isPrivateSignal())
- hasPrivateSignals = true;
- else if (fn->isInvokable())
- isInvokable = true;
- }
-
- writer->writeEndElement(); // para
- newLine();
- writer->writeEndElement(); // listitem
- newLine();
-
- i++;
- ++m;
- }
-
- writer->writeEndElement(); // itemizedlist
- newLine();
-
- if (hasPrivateSignals)
- generateAddendum(relative, Generator::PrivateSignal);
- if (isInvokable)
- generateAddendum(relative, Generator::Invokable);
- }
-
- if (status != Section::Obsolete && section.style() == Section::Summary
- && !section.inheritedMembers().isEmpty()) {
- writer->writeStartElement(dbNamespace, "itemizedlist");
- newLine();
-
- generateSectionInheritedList(section, relative);
-
- writer->writeEndElement(); // itemizedlist
- newLine();
- }
-}
-
-void DocBookGenerator::generateSectionInheritedList(const Section &section, const Node *relative)
-{
- // From HtmlGenerator::generateSectionInheritedList.
- QList<QPair<Aggregate *, int>>::ConstIterator p = section.inheritedMembers().constBegin();
- while (p != section.inheritedMembers().constEnd()) {
- writer->writeStartElement(dbNamespace, "listitem");
- writer->writeCharacters(QString((*p).second) + " ");
- if ((*p).second == 1)
- writer->writeCharacters(section.singular());
- else
- writer->writeCharacters(section.plural());
- writer->writeCharacters(" inherited from ");
- generateSimpleLink(fileName((*p).first) + '#'
- + Generator::cleanRef(section.title().toLower()),
- (*p).first->plainFullName(relative));
- ++p;
- }
-}
-
-/*!
- Generate the DocBook page for an entity that doesn't map
- to any underlying parsable C++, QML, or Javascript element.
- */
-void DocBookGenerator::generatePageNode(PageNode *pn)
-{
- Q_ASSERT(writer == nullptr);
- // From HtmlGenerator::generatePageNode, remove anything related to TOCs.
- writer = startDocument(pn);
-
- generateHeader(pn->fullTitle(), pn->subtitle(), pn);
- generateBody(pn);
- generateAlsoList(pn);
- generateFooter();
-
- endDocument();
-}
-
-/*!
- Extract sections of markup text and output them.
- */
-bool DocBookGenerator::generateQmlText(const Text &text, const Node *relative, CodeMarker *marker,
- const QString &qmlName)
-{
- Q_UNUSED(marker);
- Q_UNUSED(qmlName);
- // From Generator::generateQmlText.
- const Atom *atom = text.firstAtom();
- bool result = false;
-
- if (atom != nullptr) {
- initializeTextOutput();
- while (atom) {
- if (atom->type() != Atom::QmlText)
- atom = atom->next();
- else {
- atom = atom->next();
- while (atom && (atom->type() != Atom::EndQmlText)) {
- int n = 1 + generateAtom(atom, relative);
- while (n-- > 0)
- atom = atom->next();
- }
- }
- }
- result = true;
- }
- return result;
-}
-
-/*!
- Generate the DocBook page for a QML type. \qcn is the QML type.
- */
-void DocBookGenerator::generateQmlTypePage(QmlTypeNode *qcn)
-{
- // From HtmlGenerator::generateQmlTypePage.
- // Start producing the DocBook file.
- Q_ASSERT(writer == nullptr);
- writer = startDocument(qcn);
-
- Generator::setQmlTypeContext(qcn);
- QString title = qcn->fullTitle();
- if (qcn->isJsType())
- title += " JavaScript Type";
- else
- title += " QML Type";
-
- generateHeader(title, qcn->subtitle(), qcn);
- generateQmlRequisites(qcn);
-
- startSection(registerRef("details"), "Detailed Description");
- generateBody(qcn);
-
- ClassNode *cn = qcn->classNode();
- if (cn)
- generateQmlText(cn->doc().body(), cn);
- generateAlsoList(qcn);
-
- endSection();
-
- Sections sections(qcn);
- for (const auto &section : sections.stdQmlTypeDetailsSections()) {
- if (!section.isEmpty()) {
- startSection(registerRef(section.title().toLower()), section.title());
-
- for (const auto &member : section.members())
- generateDetailedQmlMember(member, qcn);
-
- endSection();
- }
- }
-
- generateObsoleteQmlMembers(sections);
-
- generateFooter();
- Generator::setQmlTypeContext(nullptr);
-
- endDocument();
-}
-
-/*!
- Generate the DocBook page for the QML basic type represented
- by the QML basic type node \a qbtn.
- */
-void DocBookGenerator::generateQmlBasicTypePage(QmlBasicTypeNode *qbtn)
-{
- // From HtmlGenerator::generateQmlBasicTypePage.
- // Start producing the DocBook file.
- Q_ASSERT(writer == nullptr);
- writer = startDocument(qbtn);
-
- QString htmlTitle = qbtn->fullTitle();
- if (qbtn->isJsType())
- htmlTitle += " JavaScript Basic Type";
- else
- htmlTitle += " QML Basic Type";
-
- Sections sections(qbtn);
- generateHeader(htmlTitle, qbtn->subtitle(), qbtn);
-
- startSection(registerRef("details"), "Detailed Description");
-
- generateBody(qbtn);
- generateAlsoList(qbtn);
-
- endSection();
-
- SectionVector::ConstIterator s = sections.stdQmlTypeDetailsSections().constBegin();
- while (s != sections.stdQmlTypeDetailsSections().constEnd()) {
- if (!s->isEmpty()) {
- startSection(registerRef(s->title().toLower()), s->title());
-
- NodeVector::ConstIterator m = s->members().constBegin();
- while (m != s->members().constEnd()) {
- generateDetailedQmlMember(*m, qbtn);
- ++m;
- }
-
- endSection();
- }
- ++s;
- }
- generateFooter();
-
- endDocument();
-}
-
-/*!
- Outputs the DocBook detailed documentation for a section
- on a QML element reference page.
- */
-void DocBookGenerator::generateDetailedQmlMember(Node *node, const Aggregate *relative)
-{
- // From HtmlGenerator::generateDetailedQmlMember, with elements from
- // CppCodeMarker::markedUpQmlItem and HtmlGenerator::generateQmlItem.
- std::function<QString(QmlPropertyNode *)> getQmlPropertyTitle = [&](QmlPropertyNode *n) {
- if (!n->isReadOnlySet() && n->declarativeCppNode())
- n->markReadOnly(!n->isWritable());
-
- QString title;
- QStringList extra;
- if (n->isDefault())
- extra << "default";
- else if (n->isReadOnly())
- extra << "read-only";
- else if (n->isRequired())
- extra << "required";
-
- if (!n->since().isEmpty()) {
- if (!extra.isEmpty())
- extra.last().append(',');
- extra << "since " + n->since();
- }
- if (!extra.isEmpty())
- title = QString("[%1] ").arg(extra.join(QLatin1Char(' ')));
-
- // Finalise generation of name, as per CppCodeMarker::markedUpQmlItem.
- if (n->isAttached())
- title += n->element() + QLatin1Char('.');
- title += n->name() + " : " + n->dataType();
-
- return title;
- };
-
- std::function<void(Node *)> generateQmlMethodTitle = [&](Node *node) {
- generateSynopsis(node, relative, Section::Details);
- };
-
- bool generateEndSection = true;
-
- if (node->isPropertyGroup()) {
- const auto scn = static_cast<const SharedCommentNode *>(node);
-
- QString heading;
- if (!scn->name().isEmpty())
- heading = scn->name() + " group";
- else
- heading = node->name();
- startSection(refForNode(scn), heading);
- // This last call creates a title for this section. In other words,
- // titles are forbidden for the rest of the section.
-
- const QList<Node *> sharedNodes = scn->collective();
- for (const auto &node : sharedNodes) {
- if (node->isQmlProperty() || node->isJsProperty()) {
- auto *qpn = static_cast<QmlPropertyNode *>(node);
-
- writer->writeStartElement(dbNamespace, "bridgehead");
- writer->writeAttribute("renderas", "sect2");
- writer->writeAttribute("xml:id", refForNode(qpn));
- writer->writeCharacters(getQmlPropertyTitle(qpn));
- writer->writeEndElement(); // bridgehead
- newLine();
-
- generateDocBookSynopsis(qpn);
- }
- }
- } else if (node->isQmlProperty() || node->isJsProperty()) {
- auto qpn = static_cast<QmlPropertyNode *>(node);
- startSection(refForNode(qpn), getQmlPropertyTitle(qpn));
- generateDocBookSynopsis(qpn);
- } else if (node->isSharedCommentNode()) {
- const auto scn = reinterpret_cast<const SharedCommentNode *>(node);
- const QList<Node *> &sharedNodes = scn->collective();
-
- // In the section, generate a title for the first node, then bridgeheads for
- // the next ones.
- int i = 0;
- for (const auto m : sharedNodes) {
- // Ignore this element if there is nothing to generate.
- if (!node->isFunction(Node::QML) && !node->isFunction(Node::JS)
- && !node->isQmlProperty() && !node->isJsProperty()) {
- continue;
- }
-
- // Complete the section tag.
- if (i == 0) {
- writer->writeStartElement(dbNamespace, "section");
- writer->writeAttribute("xml:id", refForNode(m));
- newLine();
- }
-
- // Write the tag containing the title.
- writer->writeStartElement(dbNamespace, (i == 0) ? "title" : "bridgehead");
- if (i > 0)
- writer->writeAttribute("renderas", "sect2");
-
- // Write the title.
- QString title;
- if (node->isFunction(Node::QML) || node->isFunction(Node::JS))
- generateQmlMethodTitle(node);
- else if (node->isQmlProperty() || node->isJsProperty())
- writer->writeCharacters(getQmlPropertyTitle(static_cast<QmlPropertyNode *>(node)));
-
- // Complete the title and the synopsis.
- generateDocBookSynopsis(m);
- ++i;
- }
-
- if (i == 0)
- generateEndSection = false;
- } else { // assume the node is a method/signal handler
- startSectionBegin(refForNode(node));
- generateQmlMethodTitle(node);
- startSectionEnd();
- }
-
- generateStatus(node);
- generateBody(node);
- generateThreadSafeness(node);
- generateSince(node);
- generateAlsoList(node);
-
- if (generateEndSection)
- endSection();
-}
-
-/*!
- Recursive writing of DocBook files from the root \a node.
- */
-void DocBookGenerator::generateDocumentation(Node *node)
-{
- // Mainly from Generator::generateDocumentation, with parts from
- // Generator::generateDocumentation and WebXMLGenerator::generateDocumentation.
- // Don't generate nodes that are already processed, or if they're not
- // supposed to generate output, ie. external, index or images nodes.
- if (!node->url().isNull())
- return;
- if (node->isIndexNode())
- return;
- if (node->isInternal() && !m_showInternal)
- return;
- if (node->isExternalPage())
- return;
-
- if (node->parent()) {
- if (node->isCollectionNode()) {
- /*
- A collection node collects: groups, C++ modules,
- QML modules or JavaScript modules. Testing for a
- CollectionNode must be done before testing for a
- TextPageNode because a CollectionNode is a PageNode
- at this point.
-
- Don't output an HTML page for the collection
- node unless the \group, \module, \qmlmodule or
- \jsmodule command was actually seen by qdoc in
- the qdoc comment for the node.
-
- A key prerequisite in this case is the call to
- mergeCollections(cn). We must determine whether
- this group, module, QML module, or JavaScript
- module has members in other modules. We know at
- this point that cn's members list contains only
- members in the current module. Therefore, before
- outputting the page for cn, we must search for
- members of cn in the other modules and add them
- to the members list.
- */
- auto cn = static_cast<CollectionNode *>(node);
- if (cn->wasSeen()) {
- m_qdb->mergeCollections(cn);
- generateCollectionNode(cn);
- } else if (cn->isGenericCollection()) {
- // Currently used only for the module's related orphans page
- // but can be generalized for other kinds of collections if
- // other use cases pop up.
- generateGenericCollectionPage(cn);
- }
- } else if (node->isTextPageNode()) { // Pages.
- generatePageNode(static_cast<PageNode *>(node));
- } else if (node->isAggregate()) { // Aggregates.
- if ((node->isClassNode() || node->isHeader() || node->isNamespace())
- && node->docMustBeGenerated()) {
- generateCppReferencePage(static_cast<Aggregate *>(node));
- } else if (node->isQmlType() || node->isJsType()) {
- generateQmlTypePage(static_cast<QmlTypeNode *>(node));
- } else if (node->isQmlBasicType() || node->isJsBasicType()) {
- generateQmlBasicTypePage(static_cast<QmlBasicTypeNode *>(node));
- } else if (node->isProxyNode()) {
- generateProxyPage(static_cast<Aggregate *>(node));
- }
- }
- }
-
- if (node->isAggregate()) {
- auto *aggregate = static_cast<Aggregate *>(node);
- for (auto c : aggregate->childNodes()) {
- if (node->isPageNode() && !node->isPrivate())
- generateDocumentation(c);
- }
- }
-}
-
-void DocBookGenerator::generateProxyPage(Aggregate *aggregate)
-{
- // Adapted from HtmlGenerator::generateProxyPage.
- Q_ASSERT(aggregate->isProxyNode());
-
- // Start producing the DocBook file.
- Q_ASSERT(writer == nullptr);
- writer = startDocument(aggregate);
-
- // Info container.
- generateHeader(aggregate->plainFullName(), "", aggregate);
-
- // No element synopsis.
-
- // Actual content.
- if (!aggregate->doc().isEmpty()) {
- startSection(registerRef("details"), "Detailed Description");
-
- generateBody(aggregate);
- generateAlsoList(aggregate);
- generateMaintainerList(aggregate);
-
- endSection();
- }
-
- Sections sections(aggregate);
- SectionVector *detailsSections = &sections.stdDetailsSections();
-
- for (const auto &section : qAsConst(*detailsSections)) {
- if (section.isEmpty())
- continue;
-
- startSection(section.title().toLower(), section.title());
-
- const QList<Node *> &members = section.members();
- for (const auto &member : members) {
- if (!member->isPrivate()) { // ### check necessary?
- if (!member->isClassNode()) {
- generateDetailedMember(member, aggregate);
- } else {
- startSectionBegin();
- generateFullName(member, aggregate);
- startSectionEnd();
- generateBrief(member);
- endSection();
- }
- }
- }
-
- endSection();
- }
-
- generateFooter();
-
- endDocument();
-}
-
-/*!
- Generate the HTML page for a group, module, or QML module.
- */
-void DocBookGenerator::generateCollectionNode(CollectionNode *cn)
-{
- // Adapted from HtmlGenerator::generateCollectionNode.
- // Start producing the DocBook file.
- Q_ASSERT(writer == nullptr);
- writer = startDocument(cn);
-
- // Info container.
- generateHeader(cn->fullTitle(), cn->subtitle(), cn);
-
- // Element synopsis.
- generateDocBookSynopsis(cn);
-
- // Generate brief for C++ modules, status for all modules.
- if (cn->genus() != Node::DOC && cn->genus() != Node::DontCare) {
- if (cn->isModule())
- generateBrief(cn);
- generateStatus(cn);
- generateSince(cn);
- }
-
- // Actual content.
- if (cn->isModule()) {
- if (!cn->noAutoList()) {
- NodeMap nmm;
- cn->getMemberNamespaces(nmm);
- if (!nmm.isEmpty()) {
- startSection(registerRef("namespaces"), "Namespaces");
- generateAnnotatedList(cn, nmm.values(), "namespaces");
- endSection();
- }
- nmm.clear();
- cn->getMemberClasses(nmm);
- if (!nmm.isEmpty()) {
- startSection(registerRef("classes"), "Classes");
- generateAnnotatedList(cn, nmm.values(), "classes");
- endSection();
- }
- }
- }
-
- bool generatedTitle = false;
- if (cn->isModule() && !cn->doc().briefText().isEmpty()) {
- startSection(registerRef("details"), "Detailed Description");
- generatedTitle = true;
- } else {
- writeAnchor(registerRef("details"));
- }
-
- generateBody(cn);
- generateAlsoList(cn);
-
- if (!cn->noAutoList() && (cn->isGroup() || cn->isQmlModule() || cn->isJsModule()))
- generateAnnotatedList(cn, cn->members(), "members");
-
- if (generatedTitle)
- endSection();
-
- generateFooter();
-
- endDocument();
-}
-
-/*!
- Generate the HTML page for a generic collection. This is usually
- a collection of C++ elements that are related to an element in
- a different module.
- */
-void DocBookGenerator::generateGenericCollectionPage(CollectionNode *cn)
-{
- // Adapted from HtmlGenerator::generateGenericCollectionPage.
- // TODO: factor out this code to generate a file name.
- QString name = cn->name().toLower();
- name.replace(QChar(' '), QString("-"));
- QString filename = cn->tree()->physicalModuleName() + "-" + name + "." + fileExtension();
-
- // Start producing the DocBook file.
- Q_ASSERT(writer == nullptr);
- writer = startGenericDocument(cn, filename);
-
- // Info container.
- generateHeader(cn->fullTitle(), cn->subtitle(), cn);
-
- // Element synopsis.
- generateDocBookSynopsis(cn);
-
- // Actual content.
- writer->writeStartElement(dbNamespace, "para");
- writer->writeCharacters("Each function or type documented here is related to a class or "
- "namespace that is documented in a different module. The reference "
- "page for that class or namespace will link to the function or type "
- "on this page.");
- writer->writeEndElement(); // para
-
- const CollectionNode *cnc = cn;
- const QList<Node *> members = cn->members();
- for (const auto &member : members)
- generateDetailedMember(member, cnc);
-
- generateFooter();
-
- endDocument();
-}
-
-void DocBookGenerator::generateFullName(const Node *node, const Node *relative)
-{
- Q_ASSERT(node);
- Q_ASSERT(relative);
-
- // From Generator::appendFullName.
- writer->writeStartElement(dbNamespace, "link");
- writer->writeAttribute(xlinkNamespace, "href", fullDocumentLocation(node));
- writer->writeAttribute(xlinkNamespace, "role", targetType(node));
- writer->writeCharacters(node->fullName(relative));
- writer->writeEndElement(); // link
-}
-
-void DocBookGenerator::generateFullName(const Node *apparentNode, const QString &fullName,
- const Node *actualNode)
-{
- Q_ASSERT(apparentNode);
- Q_ASSERT(actualNode);
-
- // From Generator::appendFullName.
- if (actualNode == nullptr)
- actualNode = apparentNode;
- writer->writeStartElement(dbNamespace, "link");
- writer->writeAttribute(xlinkNamespace, "href", fullDocumentLocation(actualNode));
- writer->writeAttribute("type", targetType(actualNode));
- writer->writeCharacters(fullName);
- writer->writeEndElement(); // link
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/docbookgenerator.h b/src/qdoc/docbookgenerator.h
deleted file mode 100644
index 8de9160cf..000000000
--- a/src/qdoc/docbookgenerator.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 Thibaut Cuvelier
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef DOCBOOKGENERATOR_H
-#define DOCBOOKGENERATOR_H
-
-#include "codemarker.h"
-#include "config.h"
-#include "xmlgenerator.h"
-
-#include <QtCore/qhash.h>
-#include <QtCore/qxmlstream.h>
-
-QT_BEGIN_NAMESPACE
-
-class Aggregate;
-class ExampleNode;
-class FunctionNode;
-
-class DocBookGenerator : public XmlGenerator
-{
-public:
- explicit DocBookGenerator() = default;
-
- void initializeGenerator() override;
- QString format() override;
-
-protected:
- QString fileExtension() const override;
- void generateDocumentation(Node *node) override;
- using Generator::generateCppReferencePage;
- void generateCppReferencePage(Node *node);
- using Generator::generatePageNode;
- void generatePageNode(PageNode *pn);
- using Generator::generateQmlTypePage;
- void generateQmlTypePage(QmlTypeNode *qcn);
- using Generator::generateQmlBasicTypePage;
- void generateQmlBasicTypePage(QmlBasicTypeNode *qbtn);
- using Generator::generateCollectionNode;
- void generateCollectionNode(CollectionNode *cn);
- using Generator::generateGenericCollectionPage;
- void generateGenericCollectionPage(CollectionNode *cn);
- using Generator::generateProxyPage;
- void generateProxyPage(Aggregate *aggregate);
-
- void generateList(const Node *relative, const QString &selector);
- void generateHeader(const QString &title, const QString &subtitle, const Node *node);
- void closeTextSections();
- void generateFooter();
- void generateDocBookSynopsis(const Node *node);
- void generateRequisites(const Aggregate *inner);
- void generateQmlRequisites(const QmlTypeNode *qcn);
- void generateSortedNames(const ClassNode *cn, const QList<RelatedClass> &rc);
- void generateSortedQmlNames(const Node *base, const NodeList &subs);
- bool generateStatus(const Node *node);
- bool generateThreadSafeness(const Node *node);
- bool generateSince(const Node *node);
- void generateAddendum(const Node *node, Generator::Addendum type, CodeMarker *marker = nullptr,
- bool generateNote = true) override;
- using Generator::generateBody;
- void generateBody(const Node *node);
-
- bool generateText(const Text &text, const Node *relative,
- CodeMarker *marker = nullptr) override;
- const Atom *generateAtomList(const Atom *atom, const Node *relative, bool generate,
- int &numAtoms);
- int generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker = nullptr) override;
-
-private:
- QXmlStreamWriter *startDocument(const Node *node);
- QXmlStreamWriter *startDocument(const ExampleNode *en, const QString &file);
- QXmlStreamWriter *startGenericDocument(const Node *node, const QString &fileName);
- void endDocument();
-
- void generateAnnotatedList(const Node *relative, const NodeList &nodeList,
- const QString &selector);
- void generateAnnotatedLists(const Node *relative, const NodeMultiMap &nmm,
- const QString &selector);
- void generateCompactList(ListType listType, const Node *relative, const NodeMultiMap &nmm,
- const QString &commonPrefix, const QString &selector);
- using Generator::generateFileList;
- void generateFileList(const ExampleNode *en, bool images);
- void generateObsoleteMembers(const Sections &sections);
- void generateObsoleteQmlMembers(const Sections &sections);
- void generateSectionList(const Section &section, const Node *relative,
- Section::Status status = Section::Active);
- void generateSectionInheritedList(const Section &section, const Node *relative);
- void generateSynopsisName(const Node *node, const Node *relative, bool generateNameLink);
- void generateParameter(const Parameter &parameter, const Node *relative, bool generateExtra,
- bool generateType);
- void generateSynopsis(const Node *node, const Node *relative, Section::Style style);
- void generateEnumValue(const QString &enumValue, const Node *relative);
- void generateDetailedMember(const Node *node, const PageNode *relative);
- void generateDetailedQmlMember(Node *node, const Aggregate *relative);
-
- void generateFullName(const Node *node, const Node *relative);
- void generateFullName(const Node *apparentNode, const QString &fullName,
- const Node *actualNode);
- void generateBrief(const Node *node);
- void generateAlsoList(const Node *node, CodeMarker *marker = nullptr) override;
- void generateSignatureList(const NodeList &nodes);
- void generateMaintainerList(const Aggregate *node, CodeMarker *marker = nullptr) override;
- void generateReimplementsClause(const FunctionNode *fn);
- void generateClassHierarchy(const Node *relative, NodeMultiMap &classMap);
- void generateFunctionIndex(const Node *relative);
- void generateLegaleseList(const Node *relative);
- void generateExampleFilePage(const Node *en, const QString &file,
- CodeMarker *marker = nullptr) override;
- void generateOverloadedSignal(const Node *node);
- bool generateQmlText(const Text &text, const Node *relative, CodeMarker *marker = nullptr,
- const QString &qmlName = QString()) override;
- void generateRequiredLinks(const Node *node);
- void generateLinkToExample(const ExampleNode *en, const QString &baseUrl);
-
- void typified(const QString &string, const Node *relative, bool trailingSpace = false,
- bool generateType = true);
- void generateLink(const Atom *atom);
- void beginLink(const QString &link, const Node *node, const Node *relative);
- void endLink();
- inline void newLine();
- void startSectionBegin();
- void startSectionBegin(const QString &id);
- void startSectionEnd();
- void startSection(const QString &id, const QString &title);
- void endSection();
- void writeAnchor(const QString &id);
- void generateSimpleLink(const QString &href, const QString &text);
- void generateStartRequisite(const QString &description);
- void generateEndRequisite();
- void generateRequisite(const QString &description, const QString &value);
- void generateCMakeRequisite(const QStringList &values);
- void generateSynopsisInfo(const QString &key, const QString &value);
- void generateModifier(const QString &value);
-
- bool inListItemLineOpen {};
- bool inLink {};
- int currentSectionLevel {};
- QStack<int> sectionLevels {};
- QString qflagsHref_;
-
- QString project;
- QString projectDescription;
- QString naturalLanguage;
- QString buildversion;
- QXmlStreamWriter *writer = nullptr;
-
- Config *config = nullptr;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/docparser.cpp b/src/qdoc/docparser.cpp
deleted file mode 100644
index e6424a2d1..000000000
--- a/src/qdoc/docparser.cpp
+++ /dev/null
@@ -1,2490 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "docparser.h"
-
-#include "codemarker.h"
-#include "doc.h"
-#include "docprivate.h"
-#include "editdistance.h"
-#include "macro.h"
-#include "openedlist.h"
-#include "tokenizer.h"
-
-#include <QtCore/qfile.h>
-#include <QtCore/qregularexpression.h>
-#include <QtCore/qtextstream.h>
-
-#include <cctype>
-#include <climits>
-
-QT_BEGIN_NAMESPACE
-
-DocUtilities &DocParser::m_utilities = DocUtilities::instance();
-
-enum {
- CMD_A,
- CMD_ANNOTATEDLIST,
- CMD_B,
- CMD_BADCODE,
- CMD_BOLD,
- CMD_BR,
- CMD_BRIEF,
- CMD_C,
- CMD_CAPTION,
- CMD_CODE,
- CMD_CODELINE,
- CMD_DIV,
- CMD_DOTS,
- CMD_E,
- CMD_ELSE,
- CMD_ENDCODE,
- CMD_ENDDIV,
- CMD_ENDFOOTNOTE,
- CMD_ENDIF,
- CMD_ENDLEGALESE,
- CMD_ENDLINK,
- CMD_ENDLIST,
- CMD_ENDMAPREF,
- CMD_ENDOMIT,
- CMD_ENDQUOTATION,
- CMD_ENDRAW,
- CMD_ENDSECTION1,
- CMD_ENDSECTION2,
- CMD_ENDSECTION3,
- CMD_ENDSECTION4,
- CMD_ENDSIDEBAR,
- CMD_ENDTABLE,
- CMD_FOOTNOTE,
- CMD_GENERATELIST,
- CMD_GRANULARITY,
- CMD_HEADER,
- CMD_HR,
- CMD_I,
- CMD_IF,
- CMD_IMAGE,
- CMD_IMPORTANT,
- CMD_INCLUDE,
- CMD_INLINEIMAGE,
- CMD_INDEX,
- CMD_INPUT,
- CMD_KEYWORD,
- CMD_L,
- CMD_LEGALESE,
- CMD_LI,
- CMD_LINK,
- CMD_LIST,
- CMD_META,
- CMD_NEWCODE,
- CMD_NOTE,
- CMD_O,
- CMD_OLDCODE,
- CMD_OMIT,
- CMD_OMITVALUE,
- CMD_OVERLOAD,
- CMD_PRINTLINE,
- CMD_PRINTTO,
- CMD_PRINTUNTIL,
- CMD_QUOTATION,
- CMD_QUOTEFILE,
- CMD_QUOTEFROMFILE,
- CMD_QUOTEFUNCTION,
- CMD_RAW,
- CMD_ROW,
- CMD_SA,
- CMD_SECTION1,
- CMD_SECTION2,
- CMD_SECTION3,
- CMD_SECTION4,
- CMD_SIDEBAR,
- CMD_SINCELIST,
- CMD_SKIPLINE,
- CMD_SKIPTO,
- CMD_SKIPUNTIL,
- CMD_SNIPPET,
- CMD_SPAN,
- CMD_SUB,
- CMD_SUP,
- CMD_TABLE,
- CMD_TABLEOFCONTENTS,
- CMD_TARGET,
- CMD_TT,
- CMD_UICONTROL,
- CMD_UNDERLINE,
- CMD_UNICODE,
- CMD_VALUE,
- CMD_WARNING,
- CMD_QML,
- CMD_ENDQML,
- CMD_CPP,
- CMD_ENDCPP,
- CMD_QMLTEXT,
- CMD_ENDQMLTEXT,
- CMD_CPPTEXT,
- CMD_ENDCPPTEXT,
- CMD_JS,
- CMD_ENDJS,
- NOT_A_CMD
-};
-
-static struct
-{
- const char *english;
- int no;
- QString *alias;
-} cmds[] = { { "a", CMD_A, nullptr },
- { "annotatedlist", CMD_ANNOTATEDLIST, nullptr },
- { "b", CMD_B, nullptr },
- { "badcode", CMD_BADCODE, nullptr },
- { "bold", CMD_BOLD, nullptr },
- { "br", CMD_BR, nullptr },
- { "brief", CMD_BRIEF, nullptr },
- { "c", CMD_C, nullptr },
- { "caption", CMD_CAPTION, nullptr },
- { "code", CMD_CODE, nullptr },
- { "codeline", CMD_CODELINE, nullptr },
- { "div", CMD_DIV, nullptr },
- { "dots", CMD_DOTS, nullptr },
- { "e", CMD_E, nullptr },
- { "else", CMD_ELSE, nullptr },
- { "endcode", CMD_ENDCODE, nullptr },
- { "enddiv", CMD_ENDDIV, nullptr },
- { "endfootnote", CMD_ENDFOOTNOTE, nullptr },
- { "endif", CMD_ENDIF, nullptr },
- { "endlegalese", CMD_ENDLEGALESE, nullptr },
- { "endlink", CMD_ENDLINK, nullptr },
- { "endlist", CMD_ENDLIST, nullptr },
- { "endmapref", CMD_ENDMAPREF, nullptr },
- { "endomit", CMD_ENDOMIT, nullptr },
- { "endquotation", CMD_ENDQUOTATION, nullptr },
- { "endraw", CMD_ENDRAW, nullptr },
- { "endsection1", CMD_ENDSECTION1, nullptr }, // ### don't document for now
- { "endsection2", CMD_ENDSECTION2, nullptr }, // ### don't document for now
- { "endsection3", CMD_ENDSECTION3, nullptr }, // ### don't document for now
- { "endsection4", CMD_ENDSECTION4, nullptr }, // ### don't document for now
- { "endsidebar", CMD_ENDSIDEBAR, nullptr },
- { "endtable", CMD_ENDTABLE, nullptr },
- { "footnote", CMD_FOOTNOTE, nullptr },
- { "generatelist", CMD_GENERATELIST, nullptr },
- { "granularity", CMD_GRANULARITY, nullptr }, // ### don't document for now
- { "header", CMD_HEADER, nullptr },
- { "hr", CMD_HR, nullptr },
- { "i", CMD_I, nullptr },
- { "if", CMD_IF, nullptr },
- { "image", CMD_IMAGE, nullptr },
- { "important", CMD_IMPORTANT, nullptr },
- { "include", CMD_INCLUDE, nullptr },
- { "inlineimage", CMD_INLINEIMAGE, nullptr },
- { "index", CMD_INDEX, nullptr }, // ### don't document for now
- { "input", CMD_INPUT, nullptr },
- { "keyword", CMD_KEYWORD, nullptr },
- { "l", CMD_L, nullptr },
- { "legalese", CMD_LEGALESE, nullptr },
- { "li", CMD_LI, nullptr },
- { "link", CMD_LINK, nullptr },
- { "list", CMD_LIST, nullptr },
- { "meta", CMD_META, nullptr },
- { "newcode", CMD_NEWCODE, nullptr },
- { "note", CMD_NOTE, nullptr },
- { "o", CMD_O, nullptr },
- { "oldcode", CMD_OLDCODE, nullptr },
- { "omit", CMD_OMIT, nullptr },
- { "omitvalue", CMD_OMITVALUE, nullptr },
- { "overload", CMD_OVERLOAD, nullptr },
- { "printline", CMD_PRINTLINE, nullptr },
- { "printto", CMD_PRINTTO, nullptr },
- { "printuntil", CMD_PRINTUNTIL, nullptr },
- { "quotation", CMD_QUOTATION, nullptr },
- { "quotefile", CMD_QUOTEFILE, nullptr },
- { "quotefromfile", CMD_QUOTEFROMFILE, nullptr },
- { "quotefunction", CMD_QUOTEFUNCTION, nullptr },
- { "raw", CMD_RAW, nullptr },
- { "row", CMD_ROW, nullptr },
- { "sa", CMD_SA, nullptr },
- { "section1", CMD_SECTION1, nullptr },
- { "section2", CMD_SECTION2, nullptr },
- { "section3", CMD_SECTION3, nullptr },
- { "section4", CMD_SECTION4, nullptr },
- { "sidebar", CMD_SIDEBAR, nullptr },
- { "sincelist", CMD_SINCELIST, nullptr },
- { "skipline", CMD_SKIPLINE, nullptr },
- { "skipto", CMD_SKIPTO, nullptr },
- { "skipuntil", CMD_SKIPUNTIL, nullptr },
- { "snippet", CMD_SNIPPET, nullptr },
- { "span", CMD_SPAN, nullptr },
- { "sub", CMD_SUB, nullptr },
- { "sup", CMD_SUP, nullptr },
- { "table", CMD_TABLE, nullptr },
- { "tableofcontents", CMD_TABLEOFCONTENTS, nullptr },
- { "target", CMD_TARGET, nullptr },
- { "tt", CMD_TT, nullptr },
- { "uicontrol", CMD_UICONTROL, nullptr },
- { "underline", CMD_UNDERLINE, nullptr },
- { "unicode", CMD_UNICODE, nullptr },
- { "value", CMD_VALUE, nullptr },
- { "warning", CMD_WARNING, nullptr },
- { "qml", CMD_QML, nullptr },
- { "endqml", CMD_ENDQML, nullptr },
- { "cpp", CMD_CPP, nullptr },
- { "endcpp", CMD_ENDCPP, nullptr },
- { "qmltext", CMD_QMLTEXT, nullptr },
- { "endqmltext", CMD_ENDQMLTEXT, nullptr },
- { "cpptext", CMD_CPPTEXT, nullptr },
- { "endcpptext", CMD_ENDCPPTEXT, nullptr },
- { "js", CMD_JS, nullptr },
- { "endjs", CMD_ENDJS, nullptr },
- { nullptr, 0, nullptr } };
-
-int DocParser::tabSize;
-QStringList DocParser::exampleFiles;
-QStringList DocParser::exampleDirs;
-QStringList DocParser::sourceFiles;
-QStringList DocParser::sourceDirs;
-QStringList DocParser::ignoreWords;
-bool DocParser::quoting = false;
-
-static QString cleanLink(const QString &link)
-{
- int colonPos = link.indexOf(':');
- if ((colonPos == -1) || (!link.startsWith("file:") && !link.startsWith("mailto:")))
- return link;
- return link.mid(colonPos + 1).simplified();
-}
-
-void DocParser::initialize(const Config &config)
-{
- tabSize = config.getInt(CONFIG_TABSIZE);
- exampleFiles = config.getCanonicalPathList(CONFIG_EXAMPLES);
- exampleDirs = config.getCanonicalPathList(CONFIG_EXAMPLEDIRS);
- sourceFiles = config.getCanonicalPathList(CONFIG_SOURCES);
- sourceDirs = config.getCanonicalPathList(CONFIG_SOURCEDIRS);
- ignoreWords = config.getStringList(CONFIG_IGNOREWORDS);
-
- int i = 0;
- while (cmds[i].english) {
- cmds[i].alias = new QString(Doc::alias(cmds[i].english));
- m_utilities.cmdHash.insert(*cmds[i].alias, cmds[i].no);
-
- if (cmds[i].no != i)
- Location::internalError(QStringLiteral("command %1 missing").arg(i));
- ++i;
- }
-
- // If any of the formats define quotinginformation, activate quoting
- DocParser::quoting = config.getBool(CONFIG_QUOTINGINFORMATION);
- for (const auto &format : config.getOutputFormats())
- DocParser::quoting = DocParser::quoting
- || config.getBool(format + Config::dot + CONFIG_QUOTINGINFORMATION);
-}
-
-void DocParser::terminate()
-{
- exampleFiles.clear();
- exampleDirs.clear();
- sourceFiles.clear();
- sourceDirs.clear();
-
- int i = 0;
- while (cmds[i].english) {
- delete cmds[i].alias;
- cmds[i].alias = nullptr;
- ++i;
- }
-}
-
-/*!
- Parse the \a source string to build a Text data structure
- in \a docPrivate. The Text data structure is a linked list
- of Atoms.
-
- \a metaCommandSet is the set of metacommands that may be
- found in \a source. These metacommands are not markup text
- commands. They are topic commands and related metacommands.
- */
-void DocParser::parse(const QString &source, DocPrivate *docPrivate,
- const QSet<QString> &metaCommandSet, const QSet<QString> &possibleTopics)
-{
- m_input = source;
- m_position = 0;
- m_inputLength = m_input.length();
- m_cachedLocation = docPrivate->start_loc;
- m_cachedPosition = 0;
- m_private = docPrivate;
- m_private->text << Atom::Nop;
- m_private->topics_.clear();
-
- m_paragraphState = OutsideParagraph;
- m_inTableHeader = false;
- m_inTableRow = false;
- m_inTableItem = false;
- m_indexStartedParagraph = false;
- m_pendingParagraphLeftType = Atom::Nop;
- m_pendingParagraphRightType = Atom::Nop;
-
- m_braceDepth = 0;
- m_currentSection = Doc::NoSection;
- m_openedCommands.push(CMD_OMIT);
- m_quoter.reset();
-
- CodeMarker *marker = nullptr;
- Atom *currentLinkAtom = nullptr;
- QString p1, p2;
- QStack<bool> preprocessorSkipping;
- int numPreprocessorSkipping = 0;
-
- while (m_position < m_inputLength) {
- QChar ch = m_input.at(m_position);
-
- switch (ch.unicode()) {
- case '\\': {
- QString cmdStr;
- m_backslashPosition = m_position;
- ++m_position;
- while (m_position < m_inputLength) {
- ch = m_input.at(m_position);
- if (ch.isLetterOrNumber()) {
- cmdStr += ch;
- ++m_position;
- } else {
- break;
- }
- }
- m_endPosition = m_position;
- if (cmdStr.isEmpty()) {
- if (m_position < m_inputLength) {
- enterPara();
- if (m_input.at(m_position).isSpace()) {
- skipAllSpaces();
- appendChar(QLatin1Char(' '));
- } else {
- appendChar(m_input.at(m_position++));
- }
- }
- } else {
- // Ignore quoting atoms to make appendToCode()
- // append to the correct atom.
- if (!quoting || !isQuote(m_private->text.lastAtom()))
- m_lastAtom = m_private->text.lastAtom();
-
- int cmd = m_utilities.cmdHash.value(cmdStr, NOT_A_CMD);
- switch (cmd) {
- case CMD_A:
- enterPara();
- p1 = getArgument();
- append(Atom::FormattingLeft, ATOM_FORMATTING_PARAMETER);
- append(Atom::String, p1);
- append(Atom::FormattingRight, ATOM_FORMATTING_PARAMETER);
- m_private->params.insert(p1);
- break;
- case CMD_BADCODE:
- leavePara();
- append(Atom::CodeBad,
- getCode(CMD_BADCODE, marker, getMetaCommandArgument(cmdStr)));
- break;
- case CMD_BR:
- enterPara();
- append(Atom::BR);
- break;
- case CMD_BOLD:
- location().warning(QStringLiteral("'\\bold' is deprecated. Use '\\b'"));
- Q_FALLTHROUGH();
- case CMD_B:
- startFormat(ATOM_FORMATTING_BOLD, cmd);
- break;
- case CMD_BRIEF:
- leavePara();
- enterPara(Atom::BriefLeft, Atom::BriefRight);
- break;
- case CMD_C:
- enterPara();
- p1 = untabifyEtc(getArgument(true));
- marker = CodeMarker::markerForCode(p1);
- append(Atom::C, marker->markedUpCode(p1, nullptr, location()));
- break;
- case CMD_CAPTION:
- leavePara();
- enterPara(Atom::CaptionLeft, Atom::CaptionRight);
- break;
- case CMD_CODE:
- leavePara();
- append(Atom::Code, getCode(CMD_CODE, nullptr, getMetaCommandArgument(cmdStr)));
- break;
- case CMD_QML:
- leavePara();
- append(Atom::Qml,
- getCode(CMD_QML, CodeMarker::markerForLanguage(QLatin1String("QML")),
- getMetaCommandArgument(cmdStr)));
- break;
- case CMD_QMLTEXT:
- append(Atom::QmlText);
- break;
- case CMD_JS:
- leavePara();
- append(Atom::JavaScript,
- getCode(CMD_JS,
- CodeMarker::markerForLanguage(QLatin1String("JavaScript")),
- getMetaCommandArgument(cmdStr)));
- break;
- case CMD_DIV:
- leavePara();
- p1 = getArgument(true);
- append(Atom::DivLeft, p1);
- m_openedCommands.push(cmd);
- break;
- case CMD_ENDDIV:
- leavePara();
- append(Atom::DivRight);
- closeCommand(cmd);
- break;
- case CMD_CODELINE:
- if (quoting) {
- append(Atom::CodeQuoteCommand, cmdStr);
- append(Atom::CodeQuoteArgument, " ");
- }
- if (isCode(m_lastAtom) && m_lastAtom->string().endsWith("\n\n"))
- m_lastAtom->chopString();
- appendToCode("\n");
- break;
- case CMD_DOTS: {
- QString arg = getOptionalArgument();
- if (arg.isEmpty())
- arg = "4";
- if (quoting) {
- append(Atom::CodeQuoteCommand, cmdStr);
- append(Atom::CodeQuoteArgument, arg);
- }
- if (isCode(m_lastAtom) && m_lastAtom->string().endsWith("\n\n"))
- m_lastAtom->chopString();
-
- int indent = arg.toInt();
- for (int i = 0; i < indent; ++i)
- appendToCode(" ");
- appendToCode("...\n");
- break;
- }
- case CMD_ELSE:
- if (preprocessorSkipping.size() > 0) {
- if (preprocessorSkipping.top()) {
- --numPreprocessorSkipping;
- } else {
- ++numPreprocessorSkipping;
- }
- preprocessorSkipping.top() = !preprocessorSkipping.top();
- (void)getRestOfLine(); // ### should ensure that it's empty
- if (numPreprocessorSkipping)
- skipToNextPreprocessorCommand();
- } else {
- location().warning(
- QStringLiteral("Unexpected '\\%1'").arg(cmdName(CMD_ELSE)));
- }
- break;
- case CMD_ENDCODE:
- closeCommand(cmd);
- break;
- case CMD_ENDQML:
- closeCommand(cmd);
- break;
- case CMD_ENDQMLTEXT:
- append(Atom::EndQmlText);
- break;
- case CMD_ENDJS:
- closeCommand(cmd);
- break;
- case CMD_ENDFOOTNOTE:
- if (closeCommand(cmd)) {
- leavePara();
- append(Atom::FootnoteRight);
- }
- break;
- case CMD_ENDIF:
- if (preprocessorSkipping.count() > 0) {
- if (preprocessorSkipping.pop())
- --numPreprocessorSkipping;
- (void)getRestOfLine(); // ### should ensure that it's empty
- if (numPreprocessorSkipping)
- skipToNextPreprocessorCommand();
- } else {
- location().warning(
- QStringLiteral("Unexpected '\\%1'").arg(cmdName(CMD_ENDIF)));
- }
- break;
- case CMD_ENDLEGALESE:
- if (closeCommand(cmd)) {
- leavePara();
- append(Atom::LegaleseRight);
- }
- break;
- case CMD_ENDLINK:
- if (closeCommand(cmd)) {
- if (m_private->text.lastAtom()->type() == Atom::String
- && m_private->text.lastAtom()->string().endsWith(QLatin1Char(' ')))
- m_private->text.lastAtom()->chopString();
- append(Atom::FormattingRight, ATOM_FORMATTING_LINK);
- }
- break;
- case CMD_ENDLIST:
- if (closeCommand(cmd)) {
- leavePara();
- if (m_openedLists.top().isStarted()) {
- append(Atom::ListItemRight, m_openedLists.top().styleString());
- append(Atom::ListRight, m_openedLists.top().styleString());
- }
- m_openedLists.pop();
- }
- break;
- case CMD_ENDOMIT:
- closeCommand(cmd);
- break;
- case CMD_ENDQUOTATION:
- if (closeCommand(cmd)) {
- leavePara();
- append(Atom::QuotationRight);
- }
- break;
- case CMD_ENDRAW:
- location().warning(
- QStringLiteral("Unexpected '\\%1'").arg(cmdName(CMD_ENDRAW)));
- break;
- case CMD_ENDSECTION1:
- endSection(Doc::Section1, cmd);
- break;
- case CMD_ENDSECTION2:
- endSection(Doc::Section2, cmd);
- break;
- case CMD_ENDSECTION3:
- endSection(Doc::Section3, cmd);
- break;
- case CMD_ENDSECTION4:
- endSection(Doc::Section4, cmd);
- break;
- case CMD_ENDSIDEBAR:
- if (closeCommand(cmd)) {
- leavePara();
- append(Atom::SidebarRight);
- }
- break;
- case CMD_ENDTABLE:
- if (closeCommand(cmd)) {
- leaveTableRow();
- append(Atom::TableRight);
- }
- break;
- case CMD_FOOTNOTE:
- if (openCommand(cmd)) {
- enterPara();
- append(Atom::FootnoteLeft);
- }
- break;
- case CMD_ANNOTATEDLIST:
- append(Atom::AnnotatedList, getArgument());
- break;
- case CMD_SINCELIST:
- append(Atom::SinceList, getRestOfLine().simplified());
- break;
- case CMD_GENERATELIST: {
- QString arg1 = getArgument();
- QString arg2 = getOptionalArgument();
- if (!arg2.isEmpty())
- arg1 += " " + arg2;
- append(Atom::GeneratedList, arg1);
- } break;
- case CMD_GRANULARITY:
- m_private->constructExtra();
- m_private->extra->granularity_ = getSectioningUnit();
- break;
- case CMD_HEADER:
- if (m_openedCommands.top() == CMD_TABLE) {
- leaveTableRow();
- append(Atom::TableHeaderLeft);
- m_inTableHeader = true;
- } else {
- if (m_openedCommands.contains(CMD_TABLE))
- location().warning(QStringLiteral("Cannot use '\\%1' within '\\%2'")
- .arg(cmdName(CMD_HEADER))
- .arg(cmdName(m_openedCommands.top())));
- else
- location().warning(QStringLiteral("Cannot use '\\%1' outside of '\\%2'")
- .arg(cmdName(CMD_HEADER))
- .arg(cmdName(CMD_TABLE)));
- }
- break;
- case CMD_I:
- location().warning(QStringLiteral(
- "'\\i' is deprecated. Use '\\e' for italic or '\\li' for list item"));
- Q_FALLTHROUGH();
- case CMD_E:
- startFormat(ATOM_FORMATTING_ITALIC, cmd);
- break;
- case CMD_HR:
- leavePara();
- append(Atom::HR);
- break;
- case CMD_IF:
- preprocessorSkipping.push(!Tokenizer::isTrue(getRestOfLine()));
- if (preprocessorSkipping.top())
- ++numPreprocessorSkipping;
- if (numPreprocessorSkipping)
- skipToNextPreprocessorCommand();
- break;
- case CMD_IMAGE:
- leaveValueList();
- append(Atom::Image, getArgument());
- append(Atom::ImageText, getRestOfLine());
- break;
- case CMD_IMPORTANT:
- leavePara();
- enterPara(Atom::ImportantLeft, Atom::ImportantRight);
- break;
- case CMD_INCLUDE:
- case CMD_INPUT: {
- QString fileName = getArgument();
- QString identifier = getRestOfLine();
- include(fileName, identifier);
- break;
- }
- case CMD_INLINEIMAGE:
- enterPara();
- append(Atom::InlineImage, getArgument());
- append(Atom::ImageText, getRestOfLine());
- append(Atom::String, " ");
- break;
- case CMD_INDEX:
- if (m_paragraphState == OutsideParagraph) {
- enterPara();
- m_indexStartedParagraph = true;
- } else {
- const Atom *last = m_private->text.lastAtom();
- if (m_indexStartedParagraph
- && (last->type() != Atom::FormattingRight
- || last->string() != ATOM_FORMATTING_INDEX))
- m_indexStartedParagraph = false;
- }
- startFormat(ATOM_FORMATTING_INDEX, cmd);
- break;
- case CMD_KEYWORD:
- insertTarget(getRestOfLine(), true);
- break;
- case CMD_L:
- enterPara();
- if (isLeftBracketAhead())
- p2 = getBracketedArgument();
- if (isLeftBraceAhead()) {
- p1 = getArgument();
- append(p1, p2);
- if (!p2.isEmpty() && !(m_private->text.lastAtom()->error().isEmpty()))
- location().warning(
- QStringLiteral(
- "Check parameter in '[ ]' of '\\l' command: '%1', "
- "possible misspelling, or unrecognized module name")
- .arg(m_private->text.lastAtom()->error()));
- if (isLeftBraceAhead()) {
- currentLinkAtom = m_private->text.lastAtom();
- startFormat(ATOM_FORMATTING_LINK, cmd);
- } else {
- append(Atom::FormattingLeft, ATOM_FORMATTING_LINK);
- append(Atom::String, cleanLink(p1));
- append(Atom::FormattingRight, ATOM_FORMATTING_LINK);
- }
- } else {
- p1 = getArgument();
- append(p1, p2);
- if (!p2.isEmpty() && !(m_private->text.lastAtom()->error().isEmpty()))
- location().warning(
- QStringLiteral(
- "Check parameter in '[ ]' of '\\l' command: '%1', "
- "possible misspelling, or unrecognized module name")
- .arg(m_private->text.lastAtom()->error()));
- append(Atom::FormattingLeft, ATOM_FORMATTING_LINK);
- append(Atom::String, cleanLink(p1));
- append(Atom::FormattingRight, ATOM_FORMATTING_LINK);
- }
- p2.clear();
- break;
- case CMD_LEGALESE:
- leavePara();
- if (openCommand(cmd))
- append(Atom::LegaleseLeft);
- docPrivate->hasLegalese = true;
- break;
- case CMD_LINK:
- if (openCommand(cmd)) {
- enterPara();
- p1 = getArgument();
- append(p1);
- append(Atom::FormattingLeft, ATOM_FORMATTING_LINK);
- skipSpacesOrOneEndl();
- }
- break;
- case CMD_LIST:
- if (openCommand(cmd)) {
- leavePara();
- m_openedLists.push(OpenedList(location(), getOptionalArgument()));
- }
- break;
- case CMD_META:
- m_private->constructExtra();
- p1 = getArgument();
- m_private->extra->metaMap_.insert(p1, getArgument());
- break;
- case CMD_NEWCODE:
- location().warning(
- QStringLiteral("Unexpected '\\%1'").arg(cmdName(CMD_NEWCODE)));
- break;
- case CMD_NOTE:
- leavePara();
- enterPara(Atom::NoteLeft, Atom::NoteRight);
- break;
- case CMD_O:
- location().warning(QStringLiteral("'\\o' is deprecated. Use '\\li'"));
- Q_FALLTHROUGH();
- case CMD_LI:
- leavePara();
- if (m_openedCommands.top() == CMD_LIST) {
- if (m_openedLists.top().isStarted())
- append(Atom::ListItemRight, m_openedLists.top().styleString());
- else
- append(Atom::ListLeft, m_openedLists.top().styleString());
- m_openedLists.top().next();
- append(Atom::ListItemNumber, m_openedLists.top().numberString());
- append(Atom::ListItemLeft, m_openedLists.top().styleString());
- enterPara();
- } else if (m_openedCommands.top() == CMD_TABLE) {
- p1 = "1,1";
- p2.clear();
- if (isLeftBraceAhead()) {
- p1 = getArgument();
- if (isLeftBraceAhead())
- p2 = getArgument();
- }
-
- if (!m_inTableHeader && !m_inTableRow) {
- location().warning(
- QStringLiteral("Missing '\\%1' or '\\%2' before '\\%3'")
- .arg(cmdName(CMD_HEADER))
- .arg(cmdName(CMD_ROW))
- .arg(cmdName(CMD_LI)));
- append(Atom::TableRowLeft);
- m_inTableRow = true;
- } else if (m_inTableItem) {
- append(Atom::TableItemRight);
- m_inTableItem = false;
- }
-
- append(Atom::TableItemLeft, p1, p2);
- m_inTableItem = true;
- } else
- location().warning(
- QStringLiteral("Command '\\%1' outside of '\\%2' and '\\%3'")
- .arg(cmdName(cmd))
- .arg(cmdName(CMD_LIST))
- .arg(cmdName(CMD_TABLE)));
- break;
- case CMD_OLDCODE:
- leavePara();
- append(Atom::CodeOld, getCode(CMD_OLDCODE, marker));
- append(Atom::CodeNew, getCode(CMD_NEWCODE, marker));
- break;
- case CMD_OMIT:
- getUntilEnd(cmd);
- break;
- case CMD_OMITVALUE:
- p1 = getArgument();
- if (!m_private->enumItemList.contains(p1))
- m_private->enumItemList.append(p1);
- if (!m_private->omitEnumItemList.contains(p1))
- m_private->omitEnumItemList.append(p1);
- break;
- case CMD_PRINTLINE: {
- leavePara();
- QString rest = getRestOfLine();
- if (quoting) {
- append(Atom::CodeQuoteCommand, cmdStr);
- append(Atom::CodeQuoteArgument, rest);
- }
- appendToCode(m_quoter.quoteLine(location(), cmdStr, rest));
- break;
- }
- case CMD_PRINTTO: {
- leavePara();
- QString rest = getRestOfLine();
- if (quoting) {
- append(Atom::CodeQuoteCommand, cmdStr);
- append(Atom::CodeQuoteArgument, rest);
- }
- appendToCode(m_quoter.quoteTo(location(), cmdStr, rest));
- break;
- }
- case CMD_PRINTUNTIL: {
- leavePara();
- QString rest = getRestOfLine();
- if (quoting) {
- append(Atom::CodeQuoteCommand, cmdStr);
- append(Atom::CodeQuoteArgument, rest);
- }
- appendToCode(m_quoter.quoteUntil(location(), cmdStr, rest));
- break;
- }
- case CMD_QUOTATION:
- if (openCommand(cmd)) {
- leavePara();
- append(Atom::QuotationLeft);
- }
- break;
- case CMD_QUOTEFILE: {
- leavePara();
- QString fileName = getArgument();
- Doc::quoteFromFile(location(), m_quoter, fileName);
- if (quoting) {
- append(Atom::CodeQuoteCommand, cmdStr);
- append(Atom::CodeQuoteArgument, fileName);
- }
- append(Atom::Code, m_quoter.quoteTo(location(), cmdStr, QString()));
- m_quoter.reset();
- break;
- }
- case CMD_QUOTEFROMFILE: {
- leavePara();
- QString arg = getArgument();
- if (quoting) {
- append(Atom::CodeQuoteCommand, cmdStr);
- append(Atom::CodeQuoteArgument, arg);
- }
- Doc::quoteFromFile(location(), m_quoter, arg);
- break;
- }
- case CMD_QUOTEFUNCTION: {
- leavePara();
- marker = quoteFromFile();
- p1 = getRestOfLine();
- if (quoting) {
- append(Atom::CodeQuoteCommand, cmdStr);
- append(Atom::CodeQuoteArgument, slashed(marker->functionEndRegExp(p1)));
- }
- m_quoter.quoteTo(location(), cmdStr, slashed(marker->functionBeginRegExp(p1)));
- append(Atom::Code,
- m_quoter.quoteUntil(location(), cmdStr,
- slashed(marker->functionEndRegExp(p1))));
- m_quoter.reset();
- break;
- }
- case CMD_RAW:
- leavePara();
- p1 = getRestOfLine();
- if (p1.isEmpty())
- location().warning(QStringLiteral("Missing format name after '\\%1'")
- .arg(cmdName(CMD_RAW)));
- append(Atom::FormatIf, p1);
- append(Atom::RawString, untabifyEtc(getUntilEnd(cmd)));
- append(Atom::FormatElse);
- append(Atom::FormatEndif);
- break;
- case CMD_ROW:
- if (m_openedCommands.top() == CMD_TABLE) {
- p1.clear();
- if (isLeftBraceAhead())
- p1 = getArgument(true);
- leaveTableRow();
- append(Atom::TableRowLeft, p1);
- m_inTableRow = true;
- } else {
- if (m_openedCommands.contains(CMD_TABLE))
- location().warning(QStringLiteral("Cannot use '\\%1' within '\\%2'")
- .arg(cmdName(CMD_ROW))
- .arg(cmdName(m_openedCommands.top())));
- else
- location().warning(QStringLiteral("Cannot use '\\%1' outside of '\\%2'")
- .arg(cmdName(CMD_ROW))
- .arg(cmdName(CMD_TABLE)));
- }
- break;
- case CMD_SA:
- parseAlso();
- break;
- case CMD_SECTION1:
- startSection(Doc::Section1, cmd);
- break;
- case CMD_SECTION2:
- startSection(Doc::Section2, cmd);
- break;
- case CMD_SECTION3:
- startSection(Doc::Section3, cmd);
- break;
- case CMD_SECTION4:
- startSection(Doc::Section4, cmd);
- break;
- case CMD_SIDEBAR:
- if (openCommand(cmd)) {
- leavePara();
- append(Atom::SidebarLeft);
- }
- break;
- case CMD_SKIPLINE: {
- leavePara();
- QString rest = getRestOfLine();
- if (quoting) {
- append(Atom::CodeQuoteCommand, cmdStr);
- append(Atom::CodeQuoteArgument, rest);
- }
- m_quoter.quoteLine(location(), cmdStr, rest);
- break;
- }
- case CMD_SKIPTO: {
- leavePara();
- QString rest = getRestOfLine();
- if (quoting) {
- append(Atom::CodeQuoteCommand, cmdStr);
- append(Atom::CodeQuoteArgument, rest);
- }
- m_quoter.quoteTo(location(), cmdStr, rest);
- break;
- }
- case CMD_SKIPUNTIL: {
- leavePara();
- QString rest = getRestOfLine();
- if (quoting) {
- append(Atom::CodeQuoteCommand, cmdStr);
- append(Atom::CodeQuoteArgument, rest);
- }
- m_quoter.quoteUntil(location(), cmdStr, rest);
- break;
- }
- case CMD_SPAN:
- p1 = ATOM_FORMATTING_SPAN + getArgument(true);
- startFormat(p1, cmd);
- break;
- case CMD_SNIPPET: {
- leavePara();
- QString snippet = getArgument();
- QString identifier = getRestOfLine();
- if (quoting) {
- append(Atom::SnippetCommand, cmdStr);
- append(Atom::SnippetLocation, snippet);
- append(Atom::SnippetIdentifier, identifier);
- }
- marker = Doc::quoteFromFile(location(), m_quoter, snippet);
- appendToCode(m_quoter.quoteSnippet(location(), identifier), marker->atomType());
- break;
- }
- case CMD_SUB:
- startFormat(ATOM_FORMATTING_SUBSCRIPT, cmd);
- break;
- case CMD_SUP:
- startFormat(ATOM_FORMATTING_SUPERSCRIPT, cmd);
- break;
- case CMD_TABLE:
- p1 = getOptionalArgument();
- p2 = getOptionalArgument();
- if (openCommand(cmd)) {
- leavePara();
- append(Atom::TableLeft, p1, p2);
- m_inTableHeader = false;
- m_inTableRow = false;
- m_inTableItem = false;
- }
- break;
- case CMD_TABLEOFCONTENTS:
- p1 = "1";
- if (isLeftBraceAhead())
- p1 = getArgument();
- p1 += QLatin1Char(',');
- p1 += QString::number((int)getSectioningUnit());
- append(Atom::TableOfContents, p1);
- break;
- case CMD_TARGET:
- insertTarget(getRestOfLine(), false);
- break;
- case CMD_TT:
- startFormat(ATOM_FORMATTING_TELETYPE, cmd);
- break;
- case CMD_UICONTROL:
- startFormat(ATOM_FORMATTING_UICONTROL, cmd);
- break;
- case CMD_UNDERLINE:
- startFormat(ATOM_FORMATTING_UNDERLINE, cmd);
- break;
- case CMD_UNICODE: {
- enterPara();
- p1 = getArgument();
- bool ok;
- uint unicodeChar = p1.toUInt(&ok, 0);
- if (!ok || (unicodeChar == 0x0000) || (unicodeChar > 0xFFFE))
- location().warning(
- QStringLiteral("Invalid Unicode character '%1' specified with '%2'")
- .arg(p1, cmdName(CMD_UNICODE)));
- else
- append(Atom::String, QChar(unicodeChar));
- break;
- }
- case CMD_VALUE:
- leaveValue();
- if (m_openedLists.top().style() == OpenedList::Value) {
- QString p2;
- p1 = getArgument();
- if (p1.startsWith(QLatin1String("[since "))
- && p1.endsWith(QLatin1String("]"))) {
- p2 = p1.mid(7, p1.length() - 8);
- p1 = getArgument();
- }
- if (!m_private->enumItemList.contains(p1))
- m_private->enumItemList.append(p1);
-
- m_openedLists.top().next();
- append(Atom::ListTagLeft, ATOM_LIST_VALUE);
- append(Atom::String, p1);
- append(Atom::ListTagRight, ATOM_LIST_VALUE);
- if (!p2.isEmpty()) {
- append(Atom::SinceTagLeft, ATOM_LIST_VALUE);
- append(Atom::String, p2);
- append(Atom::SinceTagRight, ATOM_LIST_VALUE);
- }
- append(Atom::ListItemLeft, ATOM_LIST_VALUE);
-
- skipSpacesOrOneEndl();
- if (isBlankLine())
- append(Atom::Nop);
- } else {
- // ### unknown problems
- }
- break;
- case CMD_WARNING:
- leavePara();
- enterPara();
- append(Atom::FormattingLeft, ATOM_FORMATTING_BOLD);
- append(Atom::String, "Warning:");
- append(Atom::FormattingRight, ATOM_FORMATTING_BOLD);
- append(Atom::String, " ");
- break;
- case CMD_OVERLOAD:
- m_private->metacommandsUsed.insert(cmdStr);
- p1.clear();
- if (!isBlankLine())
- p1 = getRestOfLine();
- if (!p1.isEmpty()) {
- append(Atom::ParaLeft);
- append(Atom::String, "This function overloads ");
- append(Atom::AutoLink, p1);
- append(Atom::String, ".");
- append(Atom::ParaRight);
- } else {
- append(Atom::ParaLeft);
- append(Atom::String, "This is an overloaded function.");
- append(Atom::ParaRight);
- p1 = getMetaCommandArgument(cmdStr);
- }
- m_private->metaCommandMap[cmdStr].append(ArgLocPair(p1, location()));
- break;
- case NOT_A_CMD:
- if (metaCommandSet.contains(cmdStr)) {
- m_private->metacommandsUsed.insert(cmdStr);
- // Force a linebreak after \obsolete or \deprecated
- // to treat potential arguments as a new text paragraph.
- if (m_position < m_inputLength
- && (cmdStr == QLatin1String("obsolete")
- || cmdStr == QLatin1String("deprecated")))
- m_input[m_position] = '\n';
- QString arg = getMetaCommandArgument(cmdStr);
- m_private->metaCommandMap[cmdStr].append(ArgLocPair(arg, location()));
- if (possibleTopics.contains(cmdStr)) {
- if (!cmdStr.endsWith(QLatin1String("propertygroup")))
- m_private->topics_.append(Topic(cmdStr, arg));
- }
- } else if (m_utilities.macroHash.contains(cmdStr)) {
- const Macro &macro = m_utilities.macroHash.value(cmdStr);
- int numPendingFi = 0;
- int numFormatDefs = 0;
- QString matchExpr;
- for (auto it = macro.otherDefs.constBegin();
- it != macro.otherDefs.constEnd(); ++it) {
- if (it.key() == "match") {
- matchExpr = it.value();
- } else {
- append(Atom::FormatIf, it.key());
- expandMacro(cmdStr, *it, macro.numParams);
- ++numFormatDefs;
- if (it == macro.otherDefs.constEnd()) {
- append(Atom::FormatEndif);
- } else {
- append(Atom::FormatElse);
- ++numPendingFi;
- }
- }
- }
- while (numPendingFi-- > 0)
- append(Atom::FormatEndif);
-
- if (!macro.defaultDef.isEmpty()) {
- if (numFormatDefs > 0) {
- macro.defaultDefLocation.warning(
- QStringLiteral("Macro cannot have both "
- "format-specific and qdoc-"
- "syntax definitions"));
- } else {
- QString expanded = expandMacroToString(cmdStr, macro.defaultDef,
- macro.numParams, matchExpr);
- m_input.replace(m_backslashPosition,
- m_endPosition - m_backslashPosition, expanded);
- m_inputLength = m_input.length();
- m_position = m_backslashPosition;
- }
- }
- } else if (isAutoLinkString(cmdStr)) {
- appendWord(cmdStr);
- } else {
- if (!cmdStr.endsWith("propertygroup")) {
- // The QML and JS property group commands are no longer required
- // for grouping QML and JS properties. They are allowed but ignored.
- location().warning(QStringLiteral("Unknown command '\\%1'").arg(cmdStr),
- detailsUnknownCommand(metaCommandSet, cmdStr));
- }
- enterPara();
- append(Atom::UnknownCommand, cmdStr);
- }
- }
- } // case '\\' (qdoc markup command)
- break;
- }
- case '{':
- enterPara();
- appendChar('{');
- ++m_braceDepth;
- ++m_position;
- break;
- case '}': {
- --m_braceDepth;
- ++m_position;
-
- auto format = m_pendingFormats.find(m_braceDepth);
- if (format == m_pendingFormats.end()) {
- enterPara();
- appendChar('}');
- } else {
- append(Atom::FormattingRight, *format);
- if (*format == ATOM_FORMATTING_INDEX) {
- if (m_indexStartedParagraph)
- skipAllSpaces();
- } else if (*format == ATOM_FORMATTING_LINK) {
- // hack for C++ to support links like
- // \l{QString::}{count()}
- if (currentLinkAtom && currentLinkAtom->string().endsWith("::")) {
- QString suffix = Text::subText(currentLinkAtom, m_private->text.lastAtom())
- .toString();
- currentLinkAtom->appendString(suffix);
- }
- currentLinkAtom = nullptr;
- }
- m_pendingFormats.erase(format);
- }
- break;
- }
- // Do not parse content after '//!' comments
- case '/': {
- if (m_position + 2 < m_inputLength)
- if (m_input.at(m_position + 1) == '/')
- if (m_input.at(m_position + 2) == '!') {
- m_position += 2;
- getRestOfLine();
- break;
- }
- Q_FALLTHROUGH(); // fall through
- }
- default: {
- bool newWord;
- switch (m_private->text.lastAtom()->type()) {
- case Atom::ParaLeft:
- newWord = true;
- break;
- default:
- newWord = false;
- }
-
- if (m_paragraphState == OutsideParagraph) {
- if (ch.isSpace()) {
- ++m_position;
- newWord = false;
- } else {
- enterPara();
- newWord = true;
- }
- } else {
- if (ch.isSpace()) {
- ++m_position;
- if ((ch == '\n')
- && (m_paragraphState == InSingleLineParagraph || isBlankLine())) {
- leavePara();
- newWord = false;
- } else {
- appendChar(' ');
- newWord = true;
- }
- } else {
- newWord = true;
- }
- }
-
- if (newWord) {
- int startPos = m_position;
- bool autolink = isAutoLinkString(m_input, m_position);
- if (m_position == startPos) {
- if (!ch.isSpace()) {
- appendChar(ch);
- ++m_position;
- }
- } else {
- QString word = m_input.mid(startPos, m_position - startPos);
- if (autolink) {
- if (ignoreWords.contains(word) || word.startsWith(QString("__")))
- appendWord(word);
- else
- append(Atom::AutoLink, word);
- } else {
- appendWord(word);
- }
- }
- }
- } // default:
- } // switch (ch.unicode())
- }
- leaveValueList();
-
- // for compatibility
- if (m_openedCommands.top() == CMD_LEGALESE) {
- append(Atom::LegaleseRight);
- m_openedCommands.pop();
- }
-
- if (m_openedCommands.top() != CMD_OMIT) {
- location().warning(
- QStringLiteral("Missing '\\%1'").arg(endCmdName(m_openedCommands.top())));
- } else if (preprocessorSkipping.count() > 0) {
- location().warning(QStringLiteral("Missing '\\%1'").arg(cmdName(CMD_ENDIF)));
- }
-
- if (m_currentSection > Doc::NoSection) {
- append(Atom::SectionRight, QString::number(m_currentSection));
- m_currentSection = Doc::NoSection;
- }
-
- if (m_private->extra && m_private->extra->granularity_ < m_private->extra->section_)
- m_private->extra->granularity_ = m_private->extra->section_;
- m_private->text.stripFirstAtom();
-}
-
-/*!
- Returns the current location.
- */
-Location &DocParser::location()
-{
- while (!m_openedInputs.isEmpty() && m_openedInputs.top() <= m_position) {
- m_cachedLocation.pop();
- m_cachedPosition = m_openedInputs.pop();
- }
- while (m_cachedPosition < m_position)
- m_cachedLocation.advance(m_input.at(m_cachedPosition++));
- return m_cachedLocation;
-}
-
-QString DocParser::detailsUnknownCommand(const QSet<QString> &metaCommandSet, const QString &str)
-{
- QSet<QString> commandSet = metaCommandSet;
- int i = 0;
- while (cmds[i].english != nullptr) {
- commandSet.insert(*cmds[i].alias);
- ++i;
- }
-
- if (m_utilities.aliasMap.contains(str))
- return QStringLiteral("The command '\\%1' was renamed '\\%2' by the configuration"
- " file. Use the new name.")
- .arg(str)
- .arg(m_utilities.aliasMap[str]);
-
- QString best = nearestName(str, commandSet);
- if (best.isEmpty())
- return QString();
- return QStringLiteral("Maybe you meant '\\%1'?").arg(best);
-}
-
-void DocParser::insertTarget(const QString &target, bool keyword)
-{
- if (m_targetMap.contains(target)) {
- location().warning(QStringLiteral("Duplicate target name '%1'").arg(target));
- m_targetMap[target].warning(QStringLiteral("(The previous occurrence is here)"));
- } else {
- m_targetMap.insert(target, location());
- m_private->constructExtra();
- if (keyword) {
- append(Atom::Keyword, target);
- m_private->extra->keywords_.append(m_private->text.lastAtom());
- } else {
- append(Atom::Target, target);
- m_private->extra->targets_.append(m_private->text.lastAtom());
- }
- }
-}
-
-void DocParser::include(const QString &fileName, const QString &identifier)
-{
- if (location().depth() > 16)
- location().fatal(QStringLiteral("Too many nested '\\%1's").arg(cmdName(CMD_INCLUDE)));
-
- QString userFriendlyFilePath;
- QString filePath = Config::instance().getIncludeFilePath(fileName);
- if (filePath.isEmpty()) {
- location().warning(QStringLiteral("Cannot find qdoc include file '%1'").arg(fileName));
- } else {
- QFile inFile(filePath);
- if (!inFile.open(QFile::ReadOnly)) {
- location().warning(
- QStringLiteral("Cannot open qdoc include file '%1'").arg(userFriendlyFilePath));
- } else {
- location().push(userFriendlyFilePath);
-
- QTextStream inStream(&inFile);
- QString includedStuff = inStream.readAll();
- inFile.close();
-
- if (identifier.isEmpty()) {
- m_input.insert(m_position, includedStuff);
- m_inputLength = m_input.length();
- m_openedInputs.push(m_position + includedStuff.length());
- } else {
- QStringList lineBuffer = includedStuff.split(QLatin1Char('\n'));
- int i = 0;
- int startLine = -1;
- while (i < lineBuffer.size()) {
- if (lineBuffer[i].startsWith("//!")) {
- if (lineBuffer[i].contains(identifier)) {
- startLine = i + 1;
- break;
- }
- }
- ++i;
- }
- if (startLine < 0) {
- location().warning(QStringLiteral("Cannot find '%1' in '%2'")
- .arg(identifier)
- .arg(userFriendlyFilePath));
- return;
- }
- QString result;
- i = startLine;
- do {
- if (lineBuffer[i].startsWith("//!")) {
- if (i < lineBuffer.size()) {
- if (lineBuffer[i].contains(identifier)) {
- break;
- }
- }
- } else
- result += lineBuffer[i] + QLatin1Char('\n');
- ++i;
- } while (i < lineBuffer.size());
- if (result.isEmpty()) {
- location().warning(QStringLiteral("Empty qdoc snippet '%1' in '%2'")
- .arg(identifier)
- .arg(userFriendlyFilePath));
- } else {
- m_input.insert(m_position, result);
- m_inputLength = m_input.length();
- m_openedInputs.push(m_position + result.length());
- }
- }
- }
- }
-}
-
-void DocParser::startFormat(const QString &format, int cmd)
-{
- enterPara();
-
- for (const auto &item : qAsConst(m_pendingFormats)) {
- if (item == format) {
- location().warning(QStringLiteral("Cannot nest '\\%1' commands").arg(cmdName(cmd)));
- return;
- }
- }
-
- append(Atom::FormattingLeft, format);
-
- if (isLeftBraceAhead()) {
- skipSpacesOrOneEndl();
- m_pendingFormats.insert(m_braceDepth, format);
- ++m_braceDepth;
- ++m_position;
- } else {
- append(Atom::String, getArgument());
- append(Atom::FormattingRight, format);
- if (format == ATOM_FORMATTING_INDEX && m_indexStartedParagraph) {
- skipAllSpaces();
- m_indexStartedParagraph = false;
- }
- }
-}
-
-bool DocParser::openCommand(int cmd)
-{
- int outer = m_openedCommands.top();
- bool ok = true;
-
- if (cmd != CMD_LINK) {
- if (outer == CMD_LIST) {
- ok = (cmd == CMD_FOOTNOTE || cmd == CMD_LIST);
- } else if (outer == CMD_SIDEBAR) {
- ok = (cmd == CMD_LIST || cmd == CMD_QUOTATION || cmd == CMD_SIDEBAR);
- } else if (outer == CMD_QUOTATION) {
- ok = (cmd == CMD_LIST);
- } else if (outer == CMD_TABLE) {
- ok = (cmd == CMD_LIST || cmd == CMD_FOOTNOTE || cmd == CMD_QUOTATION);
- } else if (outer == CMD_FOOTNOTE || outer == CMD_LINK) {
- ok = false;
- }
- }
-
- if (ok) {
- m_openedCommands.push(cmd);
- } else {
- location().warning(
- QStringLiteral("Can't use '\\%1' in '\\%2'").arg(cmdName(cmd)).arg(cmdName(outer)));
- }
- return ok;
-}
-
-/*!
- Returns \c true if \a word qualifies for auto-linking.
-*/
-inline bool DocParser::isAutoLinkString(const QString &word)
-{
- int start = 0;
- return isAutoLinkString(word, start);
-}
-
-bool DocParser::isAutoLinkString(const QString &word, int &curPos)
-{
- int len = word.size();
- int startPos = curPos;
- int numUppercase = 0;
- int numLowercase = 0;
- int numStrangeSymbols = 0;
-
- while (curPos < len) {
- unsigned char latin1Ch = word.at(curPos).toLatin1();
- if (islower(latin1Ch)) {
- ++numLowercase;
- ++curPos;
- } else if (isupper(latin1Ch)) {
- if (curPos > startPos)
- ++numUppercase;
- ++curPos;
- } else if (isdigit(latin1Ch)) {
- if (curPos > startPos)
- ++curPos;
- else
- break;
- } else if (latin1Ch == '_' || latin1Ch == '@') {
- ++numStrangeSymbols;
- ++curPos;
- } else if ((latin1Ch == ':') && (curPos < len - 1)
- && (word.at(curPos + 1) == QLatin1Char(':'))) {
- ++numStrangeSymbols;
- curPos += 2;
- } else if (latin1Ch == '(') {
- if (curPos > startPos) {
- if ((curPos < len - 1) && (word.at(curPos + 1) == QLatin1Char(')'))) {
- ++numStrangeSymbols;
- m_position += 2;
- break;
- } else {
- break;
- }
- } else {
- break;
- }
- } else {
- break;
- }
- }
- return ((numUppercase >= 1 && numLowercase >= 2) || numStrangeSymbols > 0);
-}
-
-bool DocParser::closeCommand(int endCmd)
-{
- if (endCmdFor(m_openedCommands.top()) == endCmd && m_openedCommands.size() > 1) {
- m_openedCommands.pop();
- return true;
- } else {
- bool contains = false;
- QStack<int> opened2 = m_openedCommands;
- while (opened2.size() > 1) {
- if (endCmdFor(opened2.top()) == endCmd) {
- contains = true;
- break;
- }
- opened2.pop();
- }
-
- if (contains) {
- while (endCmdFor(m_openedCommands.top()) != endCmd && m_openedCommands.size() > 1) {
- location().warning(QStringLiteral("Missing '\\%1' before '\\%2'")
- .arg(endCmdName(m_openedCommands.top()))
- .arg(cmdName(endCmd)));
- m_openedCommands.pop();
- }
- } else {
- location().warning(QStringLiteral("Unexpected '\\%1'").arg(cmdName(endCmd)));
- }
- return false;
- }
-}
-
-void DocParser::startSection(Doc::Sections unit, int cmd)
-{
- leaveValueList();
-
- if (m_currentSection == Doc::NoSection) {
- m_currentSection = (Doc::Sections)(unit);
- m_private->constructExtra();
- m_private->extra->section_ = m_currentSection;
- } else
- endSection(unit, cmd);
-
- append(Atom::SectionLeft, QString::number(unit));
- m_private->constructExtra();
- m_private->extra->tableOfContents_.append(m_private->text.lastAtom());
- m_private->extra->tableOfContentsLevels_.append(unit);
- enterPara(Atom::SectionHeadingLeft, Atom::SectionHeadingRight, QString::number(unit));
- m_currentSection = unit;
-}
-
-void DocParser::endSection(int, int) // (int unit, int endCmd)
-{
- leavePara();
- append(Atom::SectionRight, QString::number(m_currentSection));
- m_currentSection = (Doc::NoSection);
-}
-
-void DocParser::parseAlso()
-{
- leavePara();
- skipSpacesOnLine();
- while (m_position < m_inputLength && m_input[m_position] != '\n') {
- QString target;
- QString str;
- bool skipMe = false;
-
- if (m_input[m_position] == '{') {
- target = getArgument();
- skipSpacesOnLine();
- if (m_position < m_inputLength && m_input[m_position] == '{') {
- str = getArgument();
-
- // hack for C++ to support links like \l{QString::}{count()}
- if (target.endsWith("::"))
- target += str;
- } else {
- str = target;
- }
- } else {
- target = getArgument();
- str = cleanLink(target);
- if (target == QLatin1String("and") || target == QLatin1String("."))
- skipMe = true;
- }
-
- if (!skipMe) {
- Text also;
- also << Atom(Atom::Link, target) << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << str << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
- m_private->addAlso(also);
- }
-
- skipSpacesOnLine();
- if (m_position < m_inputLength && m_input[m_position] == ',') {
- m_position++;
- skipSpacesOrOneEndl();
- } else if (m_position >= m_inputLength || m_input[m_position] != '\n') {
- location().warning(QStringLiteral("Missing comma in '\\%1'").arg(cmdName(CMD_SA)));
- }
- }
-}
-
-void DocParser::append(Atom::AtomType type, const QString &string)
-{
- Atom::AtomType lastType = m_private->text.lastAtom()->type();
- if ((lastType == Atom::Code)
- && m_private->text.lastAtom()->string().endsWith(QLatin1String("\n\n")))
- m_private->text.lastAtom()->chopString();
- m_private->text << Atom(type, string);
-}
-
-void DocParser::append(const QString &string)
-{
- Atom::AtomType lastType = m_private->text.lastAtom()->type();
- if ((lastType == Atom::Code)
- && m_private->text.lastAtom()->string().endsWith(QLatin1String("\n\n")))
- m_private->text.lastAtom()->chopString();
- m_private->text << Atom(Atom::Link, string);
-}
-
-void DocParser::append(Atom::AtomType type, const QString &p1, const QString &p2)
-{
- Atom::AtomType lastType = m_private->text.lastAtom()->type();
- if ((lastType == Atom::Code)
- && m_private->text.lastAtom()->string().endsWith(QLatin1String("\n\n")))
- m_private->text.lastAtom()->chopString();
- m_private->text << Atom(type, p1, p2);
-}
-
-void DocParser::append(const QString &p1, const QString &p2)
-{
- Atom::AtomType lastType = m_private->text.lastAtom()->type();
- if ((lastType == Atom::Code)
- && m_private->text.lastAtom()->string().endsWith(QLatin1String("\n\n")))
- m_private->text.lastAtom()->chopString();
- if (p2.isEmpty())
- m_private->text << Atom(Atom::Link, p1);
- else
- m_private->text << LinkAtom(p1, p2);
-}
-
-void DocParser::appendChar(QChar ch)
-{
- if (m_private->text.lastAtom()->type() != Atom::String)
- append(Atom::String);
- Atom *atom = m_private->text.lastAtom();
- if (ch == QLatin1Char(' ')) {
- if (!atom->string().endsWith(QLatin1Char(' ')))
- atom->appendChar(QLatin1Char(' '));
- } else
- atom->appendChar(ch);
-}
-
-void DocParser::appendWord(const QString &word)
-{
- if (m_private->text.lastAtom()->type() != Atom::String) {
- append(Atom::String, word);
- } else
- m_private->text.lastAtom()->appendString(word);
-}
-
-void DocParser::appendToCode(const QString &markedCode)
-{
- if (!isCode(m_lastAtom)) {
- append(Atom::Code);
- m_lastAtom = m_private->text.lastAtom();
- }
- m_lastAtom->appendString(markedCode);
-}
-
-void DocParser::appendToCode(const QString &markedCode, Atom::AtomType defaultType)
-{
- if (!isCode(m_lastAtom)) {
- append(defaultType, markedCode);
- m_lastAtom = m_private->text.lastAtom();
- } else {
- m_lastAtom->appendString(markedCode);
- }
-}
-
-void DocParser::enterPara(Atom::AtomType leftType, Atom::AtomType rightType, const QString &string)
-{
- if (m_paragraphState == OutsideParagraph) {
-
- if ((m_private->text.lastAtom()->type() != Atom::ListItemLeft)
- && (m_private->text.lastAtom()->type() != Atom::DivLeft)) {
- leaveValueList();
- }
-
- append(leftType, string);
- m_indexStartedParagraph = false;
- m_pendingParagraphLeftType = leftType;
- m_pendingParagraphRightType = rightType;
- m_pendingParagraphString = string;
- if (leftType == Atom::SectionHeadingLeft) {
- m_paragraphState = InSingleLineParagraph;
- } else {
- m_paragraphState = InMultiLineParagraph;
- }
- skipSpacesOrOneEndl();
- }
-}
-
-void DocParser::leavePara()
-{
- if (m_paragraphState != OutsideParagraph) {
- if (!m_pendingFormats.isEmpty()) {
- location().warning(QStringLiteral("Missing '}'"));
- m_pendingFormats.clear();
- }
-
- if (m_private->text.lastAtom()->type() == m_pendingParagraphLeftType) {
- m_private->text.stripLastAtom();
- } else {
- if (m_private->text.lastAtom()->type() == Atom::String
- && m_private->text.lastAtom()->string().endsWith(QLatin1Char(' '))) {
- m_private->text.lastAtom()->chopString();
- }
- append(m_pendingParagraphRightType, m_pendingParagraphString);
- }
- m_paragraphState = OutsideParagraph;
- m_indexStartedParagraph = false;
- m_pendingParagraphRightType = Atom::Nop;
- m_pendingParagraphString.clear();
- }
-}
-
-void DocParser::leaveValue()
-{
- leavePara();
- if (m_openedLists.isEmpty()) {
- m_openedLists.push(OpenedList(OpenedList::Value));
- append(Atom::ListLeft, ATOM_LIST_VALUE);
- } else {
- if (m_private->text.lastAtom()->type() == Atom::Nop)
- m_private->text.stripLastAtom();
- append(Atom::ListItemRight, ATOM_LIST_VALUE);
- }
-}
-
-void DocParser::leaveValueList()
-{
- leavePara();
- if (!m_openedLists.isEmpty() && (m_openedLists.top().style() == OpenedList::Value)) {
- if (m_private->text.lastAtom()->type() == Atom::Nop)
- m_private->text.stripLastAtom();
- append(Atom::ListItemRight, ATOM_LIST_VALUE);
- append(Atom::ListRight, ATOM_LIST_VALUE);
- m_openedLists.pop();
- }
-}
-
-void DocParser::leaveTableRow()
-{
- if (m_inTableItem) {
- leavePara();
- append(Atom::TableItemRight);
- m_inTableItem = false;
- }
- if (m_inTableHeader) {
- append(Atom::TableHeaderRight);
- m_inTableHeader = false;
- }
- if (m_inTableRow) {
- append(Atom::TableRowRight);
- m_inTableRow = false;
- }
-}
-
-CodeMarker *DocParser::quoteFromFile()
-{
- return Doc::quoteFromFile(location(), m_quoter, getArgument());
-}
-
-/*!
- 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.
-
- \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
- lines by escaping newlines. Escaping is also handled here.
-
- Returns \c true on successful macro expansion.
- */
-bool DocParser::expandMacro()
-{
- Q_ASSERT(m_input[m_position].unicode() == '\\');
-
- QString cmdStr;
- int backslashPos = m_position++;
- while (m_position < m_input.length() && m_input[m_position].isLetterOrNumber())
- cmdStr += m_input[m_position++];
-
- m_endPosition = m_position;
- if (!cmdStr.isEmpty()) {
- if (m_utilities.macroHash.contains(cmdStr)) {
- const Macro &macro = m_utilities.macroHash.value(cmdStr);
- if (!macro.defaultDef.isEmpty()) {
- QString expanded = expandMacroToString(cmdStr, macro.defaultDef, macro.numParams,
- macro.otherDefs.value("match"));
- m_input.replace(backslashPos, m_position - backslashPos, expanded);
- m_inputLength = m_input.length();
- m_position = backslashPos;
- return true;
- } else {
- location().warning(QStringLiteral("Macro '%1' does not have a default definition")
- .arg(cmdStr));
- }
- } else {
- location().warning(QStringLiteral("Unknown macro '%1'").arg(cmdStr));
- m_position = ++backslashPos;
- }
- } else if (m_input[m_position].isSpace()) {
- skipAllSpaces();
- } else if (m_input[m_position].unicode() == '\\') {
- // allow escaping a backslash
- m_input.remove(m_position--, 1);
- --m_inputLength;
- }
- return false;
-}
-
-void DocParser::expandMacro(const QString &name, const QString &def, int numParams)
-{
- if (numParams == 0) {
- append(Atom::RawString, def);
- } else {
- QStringList args;
- QString rawString;
-
- for (int i = 0; i < numParams; ++i) {
- if (numParams == 1 || isLeftBraceAhead()) {
- args << getArgument();
- } else {
- location().warning(QStringLiteral("Macro '\\%1' invoked with too few"
- " arguments (expected %2, got %3)")
- .arg(name)
- .arg(numParams)
- .arg(i));
- numParams = i;
- break;
- }
- }
-
- int j = 0;
- while (j < def.size()) {
- int paramNo;
- if (((paramNo = def[j].unicode()) >= 1) && (paramNo <= numParams)) {
- if (!rawString.isEmpty()) {
- append(Atom::RawString, rawString);
- rawString.clear();
- }
- append(Atom::String, args[paramNo - 1]);
- j += 1;
- } else {
- rawString += def[j++];
- }
- }
- if (!rawString.isEmpty())
- append(Atom::RawString, rawString);
- }
-}
-
-QString DocParser::expandMacroToString(const QString &name, const QString &def, int numParams,
- const QString &matchExpr)
-{
- QString rawString;
-
- if (numParams == 0) {
- rawString = def;
- } else {
- QStringList args;
- for (int i = 0; i < numParams; ++i) {
- if (numParams == 1 || isLeftBraceAhead()) {
- args << getArgument(true);
- } else {
- location().warning(QStringLiteral("Macro '\\%1' invoked with too few"
- " arguments (expected %2, got %3)")
- .arg(name)
- .arg(numParams)
- .arg(i));
- numParams = i;
- break;
- }
- }
-
- int j = 0;
- while (j < def.size()) {
- int paramNo;
- if (((paramNo = def[j].unicode()) >= 1) && (paramNo <= numParams)) {
- rawString += args[paramNo - 1];
- j += 1;
- } else {
- rawString += def[j++];
- }
- }
- }
- if (matchExpr.isEmpty())
- return rawString;
-
- QString result;
- QRegularExpression re(matchExpr);
- int capStart = (re.captureCount() > 0) ? 1 : 0;
- int i = 0;
- QRegularExpressionMatch match;
- while ((match = re.match(rawString, i)).hasMatch()) {
- for (int c = capStart; c <= re.captureCount(); ++c)
- result += match.captured(c);
- i = match.capturedEnd();
- }
-
- return result;
-}
-
-Doc::Sections DocParser::getSectioningUnit()
-{
- QString name = getOptionalArgument();
-
- if (name == "section1") {
- return Doc::Section1;
- } else if (name == "section2") {
- return Doc::Section2;
- } else if (name == "section3") {
- return Doc::Section3;
- } else if (name == "section4") {
- return Doc::Section4;
- } else if (name.isEmpty()) {
- return Doc::NoSection;
- } else {
- location().warning(QStringLiteral("Invalid section '%1'").arg(name));
- return Doc::NoSection;
- }
-}
-
-/*!
- Gets an argument that is enclosed in braces and returns it
- without the enclosing braces. On entry, the current character
- 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.
- */
-QString DocParser::getBracedArgument(bool verbatim)
-{
- QString arg;
- int delimDepth = 0;
- if (m_position < m_input.length() && m_input[m_position] == '{') {
- ++m_position;
- while (m_position < m_input.length() && delimDepth >= 0) {
- switch (m_input[m_position].unicode()) {
- case '{':
- ++delimDepth;
- arg += QLatin1Char('{');
- ++m_position;
- break;
- case '}':
- --delimDepth;
- if (delimDepth >= 0)
- arg += QLatin1Char('}');
- ++m_position;
- break;
- case '\\':
- if (verbatim || !expandMacro())
- arg += m_input[m_position++];
- break;
- default:
- if (m_input[m_position].isSpace() && !verbatim)
- arg += QChar(' ');
- else
- arg += m_input[m_position];
- ++m_position;
- }
- }
- if (delimDepth > 0)
- location().warning(QStringLiteral("Missing '}'"));
- }
- m_endPosition = m_position;
- return arg;
-}
-
-/*!
- Typically, an argument ends at the next white-space. However,
- braces can be used to group words:
-
- {a few words}
-
- Also, opening and closing parentheses have to match. Thus,
-
- printf("%d\n", x)
-
- 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)
-{
- skipSpacesOrOneEndl();
-
- int delimDepth = 0;
- int startPos = m_position;
- QString arg = getBracedArgument(verbatim);
- if (arg.isEmpty()) {
- while ((m_position < m_input.length())
- && ((delimDepth > 0) || ((delimDepth == 0) && !m_input[m_position].isSpace()))) {
- switch (m_input[m_position].unicode()) {
- case '(':
- case '[':
- case '{':
- ++delimDepth;
- arg += m_input[m_position];
- ++m_position;
- break;
- case ')':
- case ']':
- case '}':
- --delimDepth;
- if (m_position == startPos || delimDepth >= 0) {
- arg += m_input[m_position];
- ++m_position;
- }
- break;
- case '\\':
- if (verbatim || !expandMacro())
- arg += m_input[m_position++];
- break;
- default:
- arg += m_input[m_position];
- ++m_position;
- }
- }
- m_endPosition = m_position;
- if ((arg.length() > 1) && (QString(".,:;!?").indexOf(m_input[m_position - 1]) != -1)
- && !arg.endsWith("...")) {
- arg.truncate(arg.length() - 1);
- --m_position;
- }
- if (arg.length() > 2 && m_input.mid(m_position - 2, 2) == "'s") {
- arg.truncate(arg.length() - 2);
- m_position -= 2;
- }
- }
- return arg.simplified();
-}
-
-/*!
- Gets an argument that is enclosed in brackets and returns it
- without the enclosing brackets. On entry, the current character
- is the left bracket. On exit, the current character is the one
- that comes after the right bracket.
- */
-QString DocParser::getBracketedArgument()
-{
- QString arg;
- int delimDepth = 0;
- skipSpacesOrOneEndl();
- if (m_position < m_input.length() && m_input[m_position] == '[') {
- ++m_position;
- while (m_position < m_input.length() && delimDepth >= 0) {
- switch (m_input[m_position].unicode()) {
- case '[':
- ++delimDepth;
- arg += QLatin1Char('[');
- ++m_position;
- break;
- case ']':
- --delimDepth;
- if (delimDepth >= 0)
- arg += QLatin1Char(']');
- ++m_position;
- break;
- case '\\':
- arg += m_input[m_position];
- ++m_position;
- break;
- default:
- arg += m_input[m_position];
- ++m_position;
- }
- }
- if (delimDepth > 0)
- location().warning(QStringLiteral("Missing ']'"));
- }
- return arg;
-}
-
-QString DocParser::getOptionalArgument()
-{
- skipSpacesOrOneEndl();
- if (m_position + 1 < m_input.length() && m_input[m_position] == '\\'
- && m_input[m_position + 1].isLetterOrNumber()) {
- return QString();
- } else {
- return getArgument();
- }
-}
-
-QString DocParser::getRestOfLine()
-{
- QString t;
-
- skipSpacesOnLine();
-
- bool trailingSlash = false;
-
- do {
- int begin = m_position;
-
- while (m_position < m_input.size() && m_input[m_position] != '\n') {
- if (m_input[m_position] == '\\' && !trailingSlash) {
- trailingSlash = true;
- ++m_position;
- while ((m_position < m_input.size()) && m_input[m_position].isSpace()
- && (m_input[m_position] != '\n'))
- ++m_position;
- } else {
- trailingSlash = false;
- ++m_position;
- }
- }
-
- if (!t.isEmpty())
- t += QLatin1Char(' ');
- t += m_input.mid(begin, m_position - begin).simplified();
-
- if (trailingSlash) {
- t.chop(1);
- t = t.simplified();
- }
- if (m_position < m_input.size())
- ++m_position;
- } while (m_position < m_input.size() && trailingSlash);
-
- return t;
-}
-
-/*!
- The metacommand argument is normally the remaining text to
- the right of the metacommand itself. The extra blanks are
- stripped and the argument string is returned.
- */
-QString DocParser::getMetaCommandArgument(const QString &cmdStr)
-{
- skipSpacesOnLine();
-
- int begin = m_position;
- int parenDepth = 0;
-
- while (m_position < m_input.size() && (m_input[m_position] != '\n' || parenDepth > 0)) {
- if (m_input.at(m_position) == '(')
- ++parenDepth;
- else if (m_input.at(m_position) == ')')
- --parenDepth;
- else if (m_input.at(m_position) == '\\' && expandMacro())
- continue;
- ++m_position;
- }
- if (m_position == m_input.size() && parenDepth > 0) {
- m_position = begin;
- location().warning(QStringLiteral("Unbalanced parentheses in '%1'").arg(cmdStr));
- }
-
- QString t = m_input.mid(begin, m_position - begin).simplified();
- skipSpacesOnLine();
- return t;
-}
-
-QString DocParser::getUntilEnd(int cmd)
-{
- int endCmd = endCmdFor(cmd);
- QRegularExpression rx("\\\\" + cmdName(endCmd) + "\\b");
- QString t;
- auto match = rx.match(m_input, m_position);
-
- if (!match.hasMatch()) {
- location().warning(QStringLiteral("Missing '\\%1'").arg(cmdName(endCmd)));
- m_position = m_input.length();
- } else {
- int end = match.capturedStart();
- t = m_input.mid(m_position, end - m_position);
- m_position = match.capturedEnd();
- }
- return t;
-}
-
-QString DocParser::getCode(int cmd, CodeMarker *marker, const QString &argStr)
-{
- QString code = untabifyEtc(getUntilEnd(cmd));
-
- if (!argStr.isEmpty()) {
- QStringList args = argStr.split(" ", Qt::SkipEmptyParts);
- int paramNo, j = 0;
- while (j < code.size()) {
- if (code[j] == '\\' && j < code.size() - 1 && (paramNo = code[j + 1].digitValue()) >= 1
- && paramNo <= args.size()) {
- QString p = args[paramNo - 1];
- code.replace(j, 2, p);
- j += qMin(1, p.size());
- } else {
- ++j;
- }
- }
- }
-
- int indent = indentLevel(code);
- code = dedent(indent, code);
- if (marker == nullptr)
- marker = CodeMarker::markerForCode(code);
- return marker->markedUpCode(code, nullptr, location());
-}
-
-bool DocParser::isBlankLine()
-{
- int i = m_position;
-
- while (i < m_inputLength && m_input[i].isSpace()) {
- if (m_input[i] == '\n')
- return true;
- ++i;
- }
- return false;
-}
-
-bool DocParser::isLeftBraceAhead()
-{
- int numEndl = 0;
- int i = m_position;
-
- while (i < m_inputLength && m_input[i].isSpace() && numEndl < 2) {
- // ### bug with '\\'
- if (m_input[i] == '\n')
- numEndl++;
- ++i;
- }
- return numEndl < 2 && i < m_inputLength && m_input[i] == '{';
-}
-
-bool DocParser::isLeftBracketAhead()
-{
- int numEndl = 0;
- int i = m_position;
-
- while (i < m_inputLength && m_input[i].isSpace() && numEndl < 2) {
- // ### bug with '\\'
- if (m_input[i] == '\n')
- numEndl++;
- ++i;
- }
- return numEndl < 2 && i < m_inputLength && m_input[i] == '[';
-}
-
-/*!
- Skips to the next non-space character or EOL.
- */
-void DocParser::skipSpacesOnLine()
-{
- while ((m_position < m_input.length()) && m_input[m_position].isSpace()
- && (m_input[m_position].unicode() != '\n'))
- ++m_position;
-}
-
-/*!
- Skips spaces and on EOL.
- */
-void DocParser::skipSpacesOrOneEndl()
-{
- int firstEndl = -1;
- while (m_position < m_input.length() && m_input[m_position].isSpace()) {
- QChar ch = m_input[m_position];
- if (ch == '\n') {
- if (firstEndl == -1) {
- firstEndl = m_position;
- } else {
- m_position = firstEndl;
- break;
- }
- }
- ++m_position;
- }
-}
-
-void DocParser::skipAllSpaces()
-{
- while (m_position < m_inputLength && m_input[m_position].isSpace())
- ++m_position;
-}
-
-void DocParser::skipToNextPreprocessorCommand()
-{
- QRegularExpression rx("\\\\(?:" + cmdName(CMD_IF) + QLatin1Char('|') + cmdName(CMD_ELSE)
- + QLatin1Char('|') + cmdName(CMD_ENDIF) + ")\\b");
- auto match = rx.match(m_input, m_position + 1); // ### + 1 necessary?
-
- if (!match.hasMatch())
- m_position = m_input.length();
- else
- m_position = match.capturedStart();
-}
-
-int DocParser::endCmdFor(int cmd)
-{
- switch (cmd) {
- case CMD_BADCODE:
- return CMD_ENDCODE;
- case CMD_CODE:
- return CMD_ENDCODE;
- case CMD_DIV:
- return CMD_ENDDIV;
- case CMD_QML:
- return CMD_ENDQML;
- case CMD_QMLTEXT:
- return CMD_ENDQMLTEXT;
- case CMD_JS:
- return CMD_ENDJS;
- case CMD_FOOTNOTE:
- return CMD_ENDFOOTNOTE;
- case CMD_LEGALESE:
- return CMD_ENDLEGALESE;
- case CMD_LINK:
- return CMD_ENDLINK;
- case CMD_LIST:
- return CMD_ENDLIST;
- case CMD_NEWCODE:
- return CMD_ENDCODE;
- case CMD_OLDCODE:
- return CMD_NEWCODE;
- case CMD_OMIT:
- return CMD_ENDOMIT;
- case CMD_QUOTATION:
- return CMD_ENDQUOTATION;
- case CMD_RAW:
- return CMD_ENDRAW;
- case CMD_SECTION1:
- return CMD_ENDSECTION1;
- case CMD_SECTION2:
- return CMD_ENDSECTION2;
- case CMD_SECTION3:
- return CMD_ENDSECTION3;
- case CMD_SECTION4:
- return CMD_ENDSECTION4;
- case CMD_SIDEBAR:
- return CMD_ENDSIDEBAR;
- case CMD_TABLE:
- return CMD_ENDTABLE;
- default:
- return cmd;
- }
-}
-
-QString DocParser::cmdName(int cmd)
-{
- return *cmds[cmd].alias;
-}
-
-QString DocParser::endCmdName(int cmd)
-{
- return cmdName(endCmdFor(cmd));
-}
-
-QString DocParser::untabifyEtc(const QString &str)
-{
- QString result;
- result.reserve(str.length());
- int column = 0;
-
- for (const auto &character : str) {
- if (character == QLatin1Char('\r'))
- continue;
- if (character == QLatin1Char('\t')) {
- result += &" "[column % tabSize];
- column = ((column / tabSize) + 1) * tabSize;
- continue;
- }
- if (character == QLatin1Char('\n')) {
- while (result.endsWith(QLatin1Char(' ')))
- result.chop(1);
- result += character;
- column = 0;
- continue;
- }
- result += character;
- ++column;
- }
-
- while (result.endsWith("\n\n"))
- result.truncate(result.length() - 1);
- while (result.startsWith(QLatin1Char('\n')))
- result = result.mid(1);
-
- return result;
-}
-
-int DocParser::indentLevel(const QString &str)
-{
- int minIndent = INT_MAX;
- int column = 0;
-
- for (const auto &character : str) {
- if (character == '\n') {
- column = 0;
- } else {
- if (character != ' ' && column < minIndent)
- minIndent = column;
- ++column;
- }
- }
- return minIndent;
-}
-
-QString DocParser::dedent(int level, const QString &str)
-{
- if (level == 0)
- return str;
-
- QString result;
- int column = 0;
-
- for (const auto &character : str) {
- if (character == QLatin1Char('\n')) {
- result += '\n';
- column = 0;
- } else {
- if (column >= level)
- result += character;
- ++column;
- }
- }
- return result;
-}
-
-QString DocParser::slashed(const QString &str)
-{
- QString result = str;
- result.replace(QLatin1Char('/'), "\\/");
- return QLatin1Char('/') + result + QLatin1Char('/');
-}
-
-/*!
- Returns \c true if \a atom represents a code snippet.
- */
-bool DocParser::isCode(const Atom *atom)
-{
- Atom::AtomType type = atom->type();
- return (type == Atom::Code || type == Atom::Qml || type == Atom::JavaScript);
-}
-
-/*!
- Returns \c true if \a atom represents quoting information.
- */
-bool DocParser::isQuote(const Atom *atom)
-{
- Atom::AtomType type = atom->type();
- return (type == Atom::CodeQuoteArgument || type == Atom::CodeQuoteCommand
- || type == Atom::SnippetCommand || type == Atom::SnippetIdentifier
- || type == Atom::SnippetLocation);
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/docparser.h b/src/qdoc/docparser.h
deleted file mode 100644
index f5f9d3607..000000000
--- a/src/qdoc/docparser.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef DOCPARSER_H
-#define DOCPARSER_H
-
-#include "atom.h"
-#include "config.h"
-#include "docutilities.h"
-#include "location.h"
-#include "openedlist.h"
-#include "quoter.h"
-
-#include <QtCore/QCoreApplication>
-#include <QtCore/qglobalstatic.h>
-#include <QtCore/qhash.h>
-#include <QtCore/qstack.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-class Doc;
-class DocPrivate;
-class CodeMarker;
-
-class DocParser
-{
-public:
- void parse(const QString &source, DocPrivate *docPrivate, const QSet<QString> &metaCommandSet,
- const QSet<QString> &possibleTopics);
-
- static void initialize(const Config &config);
- static void terminate();
- static int endCmdFor(int cmd);
- static QString cmdName(int cmd);
- static QString endCmdName(int cmd);
- static QString untabifyEtc(const QString &str);
- static int indentLevel(const QString &str);
- static QString dedent(int level, const QString &str);
- static QString slashed(const QString &str);
-
- static int tabSize;
- static QStringList exampleFiles;
- static QStringList exampleDirs;
- static QStringList sourceFiles;
- static QStringList sourceDirs;
- static QStringList ignoreWords;
- static bool quoting;
-
-private:
- Location &location();
- QString detailsUnknownCommand(const QSet<QString> &metaCommandSet, const QString &str);
- void insertTarget(const QString &target, bool keyword);
- void include(const QString &fileName, const QString &identifier);
- void startFormat(const QString &format, int cmd);
- bool openCommand(int cmd);
- bool closeCommand(int endCmd);
- void startSection(Doc::Sections unit, int cmd);
- void endSection(int unit, int endCmd);
- void parseAlso();
- void append(const QString &string);
- void append(Atom::AtomType type, const QString &string = QString());
- void append(Atom::AtomType type, const QString &p1, const QString &p2);
- void append(const QString &p1, const QString &p2);
- void appendChar(QChar ch);
- void appendWord(const QString &word);
- void appendToCode(const QString &code);
- void appendToCode(const QString &code, Atom::AtomType defaultType);
- void enterPara(Atom::AtomType leftType = Atom::ParaLeft,
- Atom::AtomType rightType = Atom::ParaRight, const QString &string = QString());
- void leavePara();
- void leaveValue();
- void leaveValueList();
- void leaveTableRow();
- CodeMarker *quoteFromFile();
- bool expandMacro();
- void expandMacro(const QString &name, const QString &def, int numParams);
- QString expandMacroToString(const QString &name, const QString &def, int numParams,
- const QString &matchExpr);
- Doc::Sections getSectioningUnit();
- QString getArgument(bool verbatim = false);
- QString getBracedArgument(bool verbatim);
- QString getBracketedArgument();
- QString getOptionalArgument();
- QString getRestOfLine();
- QString getMetaCommandArgument(const QString &cmdStr);
- QString getUntilEnd(int cmd);
- QString getCode(int cmd, CodeMarker *marker, const QString &argStr = QString());
-
- inline bool isAutoLinkString(const QString &word);
- bool isAutoLinkString(const QString &word, int &curPos);
- bool isBlankLine();
- bool isLeftBraceAhead();
- bool isLeftBracketAhead();
- void skipSpacesOnLine();
- void skipSpacesOrOneEndl();
- void skipAllSpaces();
- void skipToNextPreprocessorCommand();
- static bool isCode(const Atom *atom);
- static bool isQuote(const Atom *atom);
-
- QStack<int> m_openedInputs;
-
- QString m_input;
- int m_position {};
- int m_backslashPosition {};
- int m_endPosition {};
- int m_inputLength {};
- Location m_cachedLocation;
- int m_cachedPosition {};
-
- DocPrivate *m_private { nullptr };
- enum ParagraphState { OutsideParagraph, InSingleLineParagraph, InMultiLineParagraph };
- ParagraphState m_paragraphState {};
- bool m_inTableHeader {};
- bool m_inTableRow {};
- bool m_inTableItem {};
- bool m_indexStartedParagraph {}; // ### rename
- Atom::AtomType m_pendingParagraphLeftType {};
- Atom::AtomType m_pendingParagraphRightType {};
- QString m_pendingParagraphString;
-
- int m_braceDepth {};
- Doc::Sections m_currentSection {};
- QMap<QString, Location> m_targetMap;
- QMap<int, QString> m_pendingFormats;
- QStack<int> m_openedCommands;
- QStack<OpenedList> m_openedLists;
- Quoter m_quoter;
- Atom *m_lastAtom { nullptr };
-
- static DocUtilities &m_utilities;
-};
-QT_END_NAMESPACE
-
-#endif // DOCPARSER_H
diff --git a/src/qdoc/docprivate.cpp b/src/qdoc/docprivate.cpp
deleted file mode 100644
index 14ece93da..000000000
--- a/src/qdoc/docprivate.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "docprivate.h"
-
-#include "atom.h"
-#include "openedlist.h"
-#include "text.h"
-
-#include <QtCore/qhash.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- Deletes the DocPrivateExtra.
- */
-DocPrivate::~DocPrivate()
-{
- delete extra;
-}
-
-void DocPrivate::addAlso(const Text &also)
-{
- alsoList.append(also);
-}
-
-void DocPrivate::constructExtra()
-{
- if (extra == nullptr)
- extra = new DocPrivateExtra;
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/docprivate.h b/src/qdoc/docprivate.h
deleted file mode 100644
index dab567f83..000000000
--- a/src/qdoc/docprivate.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef DOCPRIVATE_H
-#define DOCPRIVATE_H
-
-#include "atom.h"
-#include "config.h"
-#include "codemarker.h"
-#include "doc.h"
-#include "editdistance.h"
-#include "generator.h"
-#include "loggingcategory.h"
-#include "openedlist.h"
-#include "quoter.h"
-#include "text.h"
-#include "tokenizer.h"
-
-#include <QtCore/qdatetime.h>
-#include <QtCore/qfile.h>
-#include <QtCore/qfileinfo.h>
-#include <QtCore/qhash.h>
-#include <QtCore/qtextstream.h>
-
-#include <cctype>
-#include <climits>
-
-QT_BEGIN_NAMESPACE
-
-typedef QPair<QString, Location> ArgLocPair;
-typedef QMap<QString, ArgList> CommandMap;
-
-class DocPrivateExtra
-{
-public:
- Doc::Sections granularity_;
- Doc::Sections section_;
- QList<Atom *> tableOfContents_;
- QList<int> tableOfContentsLevels_;
- QList<Atom *> keywords_;
- QList<Atom *> targets_;
- QStringMultiMap metaMap_;
-
- DocPrivateExtra() : granularity_(Doc::Part), section_(Doc::NoSection) {}
-};
-
-class DocPrivate
-{
-public:
- explicit DocPrivate(const Location &start = Location(), const Location &end = Location(),
- const QString &source = QString())
- : start_loc(start),
- end_loc(end),
- src(source),
- hasLegalese(false),
- hasSectioningUnits(false) {};
- ~DocPrivate();
-
- void addAlso(const Text &also);
- void constructExtra();
- void ref() { ++count; }
- bool deref() { return (--count == 0); }
-
- int count { 1 };
- // ### move some of this in DocPrivateExtra
- Location start_loc;
- Location end_loc;
- QString src;
- Text text;
- QSet<QString> params;
- QList<Text> alsoList;
- QStringList enumItemList;
- QStringList omitEnumItemList;
- QSet<QString> metacommandsUsed;
- CommandMap metaCommandMap;
- DocPrivateExtra *extra { nullptr };
- TopicList topics_;
-
- bool hasLegalese : 1;
- bool hasSectioningUnits : 1;
-};
-
-QT_END_NAMESPACE
-
-#endif // DOCPRIVATE_H
diff --git a/src/qdoc/docutilities.h b/src/qdoc/docutilities.h
deleted file mode 100644
index 28ba0e609..000000000
--- a/src/qdoc/docutilities.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef DOCUTILITIES_H
-#define DOCUTILITIES_H
-
-#include "macro.h"
-#include "singleton.h"
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qhash.h>
-#include <QtCore/qstring.h>
-#include <QtCore/qmap.h>
-
-QT_BEGIN_NAMESPACE
-
-typedef QMap<QString, QString> QStringMap;
-typedef QHash<QString, int> QHash_QString_int;
-typedef QHash<QString, Macro> QHash_QString_Macro;
-
-struct DocUtilities : public Singleton<DocUtilities>
-{
-public:
- QStringMap aliasMap;
- QHash_QString_int cmdHash;
- QHash_QString_Macro macroHash;
-};
-
-QT_END_NAMESPACE
-
-#endif // DOCUTILITIES_H
diff --git a/src/qdoc/editdistance.cpp b/src/qdoc/editdistance.cpp
deleted file mode 100644
index 841f5f48d..000000000
--- a/src/qdoc/editdistance.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- editdistance.cpp
-*/
-
-#include "editdistance.h"
-
-QT_BEGIN_NAMESPACE
-
-int editDistance(const QString &s, const QString &t)
-{
-#define D(i, j) d[(i)*n + (j)]
- int i;
- int j;
- int m = s.length() + 1;
- int n = t.length() + 1;
- int *d = new int[m * n];
- int result;
-
- for (i = 0; i < m; ++i)
- D(i, 0) = i;
- for (j = 0; j < n; ++j)
- D(0, j) = j;
- for (i = 1; i < m; ++i) {
- for (j = 1; j < n; ++j) {
- if (s[i - 1] == t[j - 1]) {
- D(i, j) = D(i - 1, j - 1);
- } else {
- int x = D(i - 1, j);
- int y = D(i - 1, j - 1);
- int z = D(i, j - 1);
- D(i, j) = 1 + qMin(qMin(x, y), z);
- }
- }
- }
- result = D(m - 1, n - 1);
- delete[] d;
- return result;
-#undef D
-}
-
-QString nearestName(const QString &actual, const QSet<QString> &candidates)
-{
- if (actual.isEmpty())
- return QString();
-
- int deltaBest = 10000;
- int numBest = 0;
- QString best;
-
- for (const auto &candidate : candidates) {
- if (candidate[0] == actual[0]) {
- int delta = editDistance(actual, candidate);
- if (delta < deltaBest) {
- deltaBest = delta;
- numBest = 1;
- best = candidate;
- } else if (delta == deltaBest) {
- ++numBest;
- }
- }
- }
-
- if (numBest == 1 && deltaBest <= 2 && actual.length() + best.length() >= 5)
- return best;
-
- return QString();
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/editdistance.h b/src/qdoc/editdistance.h
deleted file mode 100644
index c7ea080cd..000000000
--- a/src/qdoc/editdistance.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- editdistance.h
-*/
-
-#ifndef EDITDISTANCE_H
-#define EDITDISTANCE_H
-
-#include <QtCore/qset.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-int editDistance(const QString &s, const QString &t);
-QString nearestName(const QString &actual, const QSet<QString> &candidates);
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/enumitem.h b/src/qdoc/enumitem.h
deleted file mode 100644
index 6755d7c40..000000000
--- a/src/qdoc/enumitem.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef ENUMITEM_H
-#define ENUMITEM_H
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-class EnumItem
-{
-public:
- EnumItem() = default;
- EnumItem(const QString &name, const QString &value) : m_name(name), m_value(value) {}
-
- const QString &name() const { return m_name; }
- const QString &value() const { return m_value; }
-
-private:
- QString m_name {};
- QString m_value {};
-};
-
-QT_END_NAMESPACE
-
-#endif // ENUMITEM_H
diff --git a/src/qdoc/enumnode.cpp b/src/qdoc/enumnode.cpp
deleted file mode 100644
index 2e4b82307..000000000
--- a/src/qdoc/enumnode.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "enumnode.h"
-
-#include "aggregate.h"
-#include "typedefnode.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class EnumNode
- */
-
-/*!
- Add \a item to the enum type's item list.
- */
-void EnumNode::addItem(const EnumItem &item)
-{
- m_items.append(item);
- m_names.insert(item.name());
-}
-
-/*!
- Returns the access level of the enumeration item named \a name.
- Apparently it is private if it has been omitted by qdoc's
- omitvalue command. Otherwise it is public.
- */
-Access EnumNode::itemAccess(const QString &name) const
-{
- if (doc().omitEnumItemNames().contains(name))
- return Access::Private;
- return Access::Public;
-}
-
-/*!
- Returns the enum value associated with the enum \a name.
- */
-QString EnumNode::itemValue(const QString &name) const
-{
- for (const auto &item : qAsConst(m_items)) {
- if (item.name() == name)
- return item.value();
- }
- return QString();
-}
-
-/*!
- Clone this node on the heap and make the clone a child of
- \a parent.
-
- Returns a pointer to the clone.
- */
-Node *EnumNode::clone(Aggregate *parent)
-{
- auto *en = new EnumNode(*this); // shallow copy
- en->setParent(nullptr);
- parent->addChild(en);
-
- return en;
-}
-
-void EnumNode::setFlagsType(TypedefNode *typedefNode)
-{
- m_flagsType = typedefNode;
- typedefNode->setAssociatedEnum(this);
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/enumnode.h b/src/qdoc/enumnode.h
deleted file mode 100644
index 84a074d10..000000000
--- a/src/qdoc/enumnode.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef ENUMNODE_H
-#define ENUMNODE_H
-
-#include "access.h"
-#include "node.h"
-#include "typedefnode.h"
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qlist.h>
-#include <QtCore/qset.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-class Aggregate;
-
-class EnumNode : public Node
-{
-public:
- EnumNode(Aggregate *parent, const QString &name, bool isScoped = false)
- : Node(Enum, parent, name), m_isScoped(isScoped)
- {
- }
-
- void addItem(const EnumItem &item);
- void setFlagsType(TypedefNode *typedefNode);
- bool hasItem(const QString &name) const { return m_names.contains(name); }
- bool isScoped() const { return m_isScoped; }
-
- const QList<EnumItem> &items() const { return m_items; }
- Access itemAccess(const QString &name) const;
- const TypedefNode *flagsType() const { return m_flagsType; }
- QString itemValue(const QString &name) const;
- Node *clone(Aggregate *parent) override;
-
-private:
- QList<EnumItem> m_items {};
- QSet<QString> m_names {};
- const TypedefNode *m_flagsType { nullptr };
- bool m_isScoped { false };
-};
-
-QT_END_NAMESPACE
-
-#endif // ENUMNODE_H
diff --git a/src/qdoc/examplenode.h b/src/qdoc/examplenode.h
deleted file mode 100644
index 22fb364d9..000000000
--- a/src/qdoc/examplenode.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef EXAMPLENODE_H
-#define EXAMPLENODE_H
-
-#include "pagenode.h"
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qstring.h>
-#include <QtCore/qstringlist.h>
-
-QT_BEGIN_NAMESPACE
-
-class ExampleNode : public PageNode
-{
-public:
- ExampleNode(Aggregate *parent, const QString &name) : PageNode(Node::Example, parent, name) {}
- QString imageFileName() const override { return m_imageFileName; }
- void setImageFileName(const QString &ifn) override { m_imageFileName = ifn; }
- const QStringList &files() const { return m_files; }
- const QStringList &images() const { return m_images; }
- const QString &projectFile() const { return m_projectFile; }
- void setFiles(const QStringList files, const QString &projectFile)
- {
- m_files = files;
- m_projectFile = projectFile;
- }
- void setImages(const QStringList images) { m_images = images; }
- void appendFile(QString &file) { m_files.append(file); }
- void appendImage(QString &image) { m_images.append(image); }
-
-private:
- QString m_imageFileName {};
- QString m_projectFile {};
- QStringList m_files {};
- QStringList m_images {};
-};
-
-QT_END_NAMESPACE
-
-#endif // EXAMPLENODE_H
diff --git a/src/qdoc/externalpagenode.cpp b/src/qdoc/externalpagenode.cpp
deleted file mode 100644
index 8882ed8f7..000000000
--- a/src/qdoc/externalpagenode.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "externalpagenode.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class ExternalPageNode
-
- \brief The ExternalPageNode represents an external documentation page.
-
- Qdoc can generate links to pages that are not part of the documentation
- being generated. 3rd party software pages are often referenced by links
- from the QT documentation. Qdoc creates an ExternalPageNode when it sees
- an \c {\\externalpage} command. The HTML generator can then use the node
- when it needs to create links to the external page.
-
- ExternalPageNode inherits PageNode.
-*/
-
-/*! \fn ExternalPageNode::ExternalPageNode(Aggregate *parent, const QString &name)
- The constructor creates an ExternalPageNode as a child node of \a parent.
- It's \a name is the argument from the \c {\\externalpage} command. The node
- type is Node::ExternalPage, and the page type is Node::ArticlePage.
- */
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/externalpagenode.h b/src/qdoc/externalpagenode.h
deleted file mode 100644
index 91abd9ca9..000000000
--- a/src/qdoc/externalpagenode.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef EXTERNALPAGENODE_H
-#define EXTERNALPAGENODE_H
-
-#include "pagenode.h"
-
-#include <QtCore/qglobal.h>
-
-QT_BEGIN_NAMESPACE
-
-class ExternalPageNode : public PageNode
-{
-public:
- ExternalPageNode(Aggregate *parent, const QString &url)
- : PageNode(Node::ExternalPage, parent, url)
- {
- setPageType(Node::ArticlePage);
- setUrl(url);
- }
-};
-
-QT_END_NAMESPACE
-
-#endif // EXTERNALPAGENODE_H
diff --git a/src/qdoc/functionnode.cpp b/src/qdoc/functionnode.cpp
deleted file mode 100644
index f0ce7239a..000000000
--- a/src/qdoc/functionnode.cpp
+++ /dev/null
@@ -1,613 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "functionnode.h"
-
-#include "propertynode.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class FunctionNode
-
- This node is used to represent any kind of function being
- documented. It can represent a C++ class member function,
- a C++ global function, a QML method, a javascript method,
- or a macro, with or without parameters.
-
- A C++ function can be a signal a slot, a constructor of any
- kind, a destructor, a copy or move assignment operator, or
- just a plain old member function or global function.
-
- A QML or javascript method can be a plain old method, or a
- signal or signal handler.
-
- If the function is not an overload, its overload flag is
- false. If it is an overload, its overload flag is true.
- If it is not an overload but it has overloads, its next
- overload pointer will point to an overload function. If it
- is an overload function, its overload flag is true, and it
- may or may not have a non-null next overload pointer.
-
- So all the overloads of a function are in a linked list
- using the next overload pointer. If a function has no
- overloads, its overload flag is false and its overload
- pointer is null.
-
- The function node also has an overload number. If the
- node's overload flag is set, this overload number is
- positive; otherwise, the overload number is 0.
- */
-
-/*!
- Construct a function node for a C++ function. It's parent
- is \a parent, and it's name is \a name.
-
- \note The function node's overload flag is set to false, and
- its overload number is set to 0. These data members are set
- in normalizeOverloads(), when all the overloads are known.
- */
-FunctionNode::FunctionNode(Aggregate *parent, const QString &name)
- : Node(Function, parent, name),
- m_const(false),
- m_static(false),
- m_reimpFlag(false),
- m_attached(false),
- m_overloadFlag(false),
- m_isFinal(false),
- m_isOverride(false),
- m_isRef(false),
- m_isRefRef(false),
- m_isInvokable(false),
- m_metaness(Plain),
- m_virtualness(NonVirtual),
- m_overloadNumber(0),
- m_nextOverload(nullptr)
-{
- // nothing
-}
-
-/*!
- Construct a function node for a QML method or signal, specified
- by ther Metaness value \a type. It's parent is \a parent, and
- it's name is \a name. If \a attached is true, it is an attached
- method or signal.
-
- \note The function node's overload flag is set to false, and
- its overload number is set to 0. These data members are set
- in normalizeOverloads(), when all the overloads are known.
- */
-FunctionNode::FunctionNode(Metaness kind, Aggregate *parent, const QString &name, bool attached)
- : Node(Function, parent, name),
- m_const(false),
- m_static(false),
- m_reimpFlag(false),
- m_attached(attached),
- m_overloadFlag(false),
- m_isFinal(false),
- m_isOverride(false),
- m_isRef(false),
- m_isRefRef(false),
- m_isInvokable(false),
- m_metaness(kind),
- m_virtualness(NonVirtual),
- m_overloadNumber(0),
- m_nextOverload(nullptr)
-{
- setGenus(getGenus(m_metaness));
- if (!isCppNode() && name.startsWith("__"))
- setStatus(Internal);
-}
-
-/*!
- Clone this node on the heap and make the clone a child of
- \a parent. Return the pointer to the clone.
- */
-Node *FunctionNode::clone(Aggregate *parent)
-{
- FunctionNode *fn = new FunctionNode(*this); // shallow copy
- fn->setParent(nullptr);
- fn->setNextOverload(nullptr);
- parent->addChild(fn);
- return fn;
-}
-
-/*!
- Returns this function's virtualness value as a string
- for use as an attribute value in index files.
- */
-QString FunctionNode::virtualness() const
-{
- switch (m_virtualness) {
- case FunctionNode::NormalVirtual:
- return QLatin1String("virtual");
- case FunctionNode::PureVirtual:
- return QLatin1String("pure");
- case FunctionNode::NonVirtual:
- default:
- break;
- }
- return QLatin1String("non");
-}
-
-/*!
- Sets the function node's virtualness value based on the value
- of string \a value, which is the value of the function's \e{virtual}
- attribute in an index file. If \a value is \e{pure}, and if the
- parent() is a C++ class, set the parent's \e abstract flag to
- \c {true}.
- */
-void FunctionNode::setVirtualness(const QString &value)
-{
- if (value == QLatin1String("non"))
- m_virtualness = NonVirtual;
- else if (value == QLatin1String("virtual"))
- m_virtualness = NormalVirtual;
- else if (value == QLatin1String("pure")) {
- m_virtualness = PureVirtual;
- if (parent() && parent()->isClassNode())
- parent()->setAbstract(true);
- }
-}
-
-static QMap<QString, FunctionNode::Metaness> metanessMap_;
-static void buildMetanessMap()
-{
- metanessMap_["plain"] = FunctionNode::Plain;
- metanessMap_["signal"] = FunctionNode::Signal;
- metanessMap_["slot"] = FunctionNode::Slot;
- metanessMap_["constructor"] = FunctionNode::Ctor;
- metanessMap_["copy-constructor"] = FunctionNode::CCtor;
- metanessMap_["move-constructor"] = FunctionNode::MCtor;
- metanessMap_["destructor"] = FunctionNode::Dtor;
- metanessMap_["macro"] = FunctionNode::MacroWithParams;
- metanessMap_["macrowithparams"] = FunctionNode::MacroWithParams;
- metanessMap_["macrowithoutparams"] = FunctionNode::MacroWithoutParams;
- metanessMap_["copy-assign"] = FunctionNode::CAssign;
- metanessMap_["move-assign"] = FunctionNode::MAssign;
- metanessMap_["native"] = FunctionNode::Native;
- metanessMap_["qmlsignal"] = FunctionNode::QmlSignal;
- metanessMap_["qmlsignalhandler"] = FunctionNode::QmlSignalHandler;
- metanessMap_["qmlmethod"] = FunctionNode::QmlMethod;
- metanessMap_["jssignal"] = FunctionNode::JsSignal;
- metanessMap_["jssignalhandler"] = FunctionNode::JsSignalHandler;
- metanessMap_["jsmethos"] = FunctionNode::JsMethod;
-}
-
-static QMap<QString, FunctionNode::Metaness> topicMetanessMap_;
-static void buildTopicMetanessMap()
-{
- topicMetanessMap_["fn"] = FunctionNode::Plain;
- topicMetanessMap_["qmlsignal"] = FunctionNode::QmlSignal;
- topicMetanessMap_["qmlattachedsignal"] = FunctionNode::QmlSignal;
- topicMetanessMap_["qmlmethod"] = FunctionNode::QmlMethod;
- topicMetanessMap_["qmlattachedmethod"] = FunctionNode::QmlMethod;
- topicMetanessMap_["jssignal"] = FunctionNode::JsSignal;
- topicMetanessMap_["jsattachedsignal"] = FunctionNode::JsSignal;
- topicMetanessMap_["jsmethod"] = FunctionNode::JsMethod;
- topicMetanessMap_["jsattachedmethod"] = FunctionNode::JsMethod;
-}
-
-/*!
- Determines the Genus value for this FunctionNode given the
- Metaness value \a metaness. Returns the Genus value. \a metaness must be
- one of the values of Metaness. If not, Node::DontCare is
- returned.
- */
-Node::Genus FunctionNode::getGenus(FunctionNode::Metaness metaness)
-{
- switch (metaness) {
- case FunctionNode::Plain:
- case FunctionNode::Signal:
- case FunctionNode::Slot:
- case FunctionNode::Ctor:
- case FunctionNode::Dtor:
- case FunctionNode::CCtor:
- case FunctionNode::MCtor:
- case FunctionNode::MacroWithParams:
- case FunctionNode::MacroWithoutParams:
- case FunctionNode::Native:
- case FunctionNode::CAssign:
- case FunctionNode::MAssign:
- return Node::CPP;
- case FunctionNode::QmlSignal:
- case FunctionNode::QmlSignalHandler:
- case FunctionNode::QmlMethod:
- return Node::QML;
- case FunctionNode::JsSignal:
- case FunctionNode::JsSignalHandler:
- case FunctionNode::JsMethod:
- return Node::JS;
- }
- return Node::DontCare;
-}
-
-/*!
- This static function converts the string \a value to an enum
- value for the kind of function named by \a value.
- */
-FunctionNode::Metaness FunctionNode::getMetaness(const QString &value)
-{
- if (metanessMap_.isEmpty())
- buildMetanessMap();
- return metanessMap_[value];
-}
-
-/*!
- This static function converts the topic string \a topic to an enum
- value for the kind of function this FunctionNode represents.
- */
-FunctionNode::Metaness FunctionNode::getMetanessFromTopic(const QString &topic)
-{
- if (topicMetanessMap_.isEmpty())
- buildTopicMetanessMap();
- return topicMetanessMap_[topic];
-}
-
-/*!
- Sets the function node's Metaness value based on the value
- of string \a metaness, which is the value of the function's "meta"
- attribute in an index file. Returns the Metaness value
- */
-FunctionNode::Metaness FunctionNode::setMetaness(const QString &metaness)
-{
- m_metaness = getMetaness(metaness);
- return m_metaness;
-}
-
-/*!
- If this function node's metaness is \a from, change the
- metaness to \a to and return \c true. Otherwise return
- false. This function is used to change Qml function node
- metaness values to Javascript function node metaness,
- values because these nodes are created as Qml function
- nodes before it is discovered that what the function node
- represents is not a Qml function but a javascript function.
-
- Note that if the function returns true, which means the node
- type was indeed changed, then the node's Genus is also changed
- from QML to JS.
-
- The function also works in the other direction, but there is
- no use case for that.
- */
-bool FunctionNode::changeMetaness(Metaness from, Metaness to)
-{
- if (m_metaness == from) {
- m_metaness = to;
- switch (to) {
- case QmlSignal:
- case QmlSignalHandler:
- case QmlMethod:
- setGenus(Node::QML);
- break;
- case JsSignal:
- case JsSignalHandler:
- case JsMethod:
- setGenus(Node::JS);
- break;
- default:
- setGenus(Node::CPP);
- break;
- }
- return true;
- }
- return false;
-}
-
-/*! \fn void FunctionNode::setOverloadNumber(unsigned char number)
- Sets the function node's overload number to \a number. If \a number
- is 0, the function node's overload flag is set to false. If
- \a number is greater than 0, the overload flag is set to true.
- */
-void FunctionNode::setOverloadNumber(signed short number)
-{
- m_overloadNumber = number;
- m_overloadFlag = (number > 0) ? true : false;
-}
-
-/*!
- If this function's next overload pointer is null, set it to
- \a functionNode. Otherwise continue down the overload list by calling
- this function recursively for the next overload.
-
- Although this function appends an overload function to the list of
- overloads for this function's name, it does not set the function's
- overload number or it's overload flag. If the function has the
- \c{\\overload} in its qdoc comment, that will set the overload
- flag. But qdoc treats the \c{\\overload} command as a hint that the
- function should be documented as an overload. The hint is almost
- always correct, but qdoc reserves the right to decide which function
- should be the primary function and which functions are the overloads.
- These decisions are made in Aggregate::normalizeOverloads().
- */
-void FunctionNode::appendOverload(FunctionNode *functionNode)
-{
- if (m_nextOverload == nullptr)
- m_nextOverload = functionNode;
- else
- m_nextOverload->appendOverload(functionNode);
-}
-
-/*!
- This function assumes that this FunctionNode is marked as an
- overload function. It asks if the next overload is marked as
- an overload. If not, then remove that FunctionNode from the
- overload list and return it. Otherwise call this function
- recursively for the next overload.
- */
-FunctionNode *FunctionNode::findPrimaryFunction()
-{
- if (m_nextOverload != nullptr) {
- if (!m_nextOverload->isOverload()) {
- FunctionNode *t = m_nextOverload;
- m_nextOverload = t->nextOverload();
- t->setNextOverload(nullptr);
- return t;
- }
- return m_nextOverload->findPrimaryFunction();
- }
- return nullptr;
-}
-
-/*!
- \fn void FunctionNode::setReimpFlag()
-
- Sets the function node's reimp flag to \c true, which means
- the \e {\\reimp} command was used in the qdoc comment. It is
- supposed to mean that the function reimplements a virtual
- function in a base class.
- */
-
-/*!
- Returns a string representing the kind of function this
- Function node represents, which depends on the Metaness
- value.
- */
-QString FunctionNode::kindString() const
-{
- switch (m_metaness) {
- case FunctionNode::QmlSignal:
- return "QML signal";
- case FunctionNode::QmlSignalHandler:
- return "QML signal handler";
- case FunctionNode::QmlMethod:
- return "QML method";
- case FunctionNode::JsSignal:
- return "JS signal";
- case FunctionNode::JsSignalHandler:
- return "JS signal handler";
- case FunctionNode::JsMethod:
- return "JS method";
- default:
- return "function";
- }
-}
-
-/*!
- Returns a string representing the Metaness enum value for
- this function. It is used in index files.
- */
-QString FunctionNode::metanessString() const
-{
- switch (m_metaness) {
- case FunctionNode::Plain:
- return "plain";
- case FunctionNode::Signal:
- return "signal";
- case FunctionNode::Slot:
- return "slot";
- case FunctionNode::Ctor:
- return "constructor";
- case FunctionNode::CCtor:
- return "copy-constructor";
- case FunctionNode::MCtor:
- return "move-constructor";
- case FunctionNode::Dtor:
- return "destructor";
- case FunctionNode::MacroWithParams:
- return "macrowithparams";
- case FunctionNode::MacroWithoutParams:
- return "macrowithoutparams";
- case FunctionNode::Native:
- return "native";
- case FunctionNode::CAssign:
- return "copy-assign";
- case FunctionNode::MAssign:
- return "move-assign";
- case FunctionNode::QmlSignal:
- return "qmlsignal";
- case FunctionNode::QmlSignalHandler:
- return "qmlsignalhandler";
- case FunctionNode::QmlMethod:
- return "qmlmethod";
- case FunctionNode::JsSignal:
- return "jssignal";
- case FunctionNode::JsSignalHandler:
- return "jssignalhandler";
- case FunctionNode::JsMethod:
- return "jsmethod";
- default:
- return "plain";
- }
-}
-
-/*!
- Adds the "associated" property \a p to this function node.
- The function might be the setter or getter for a property,
- for example.
- */
-void FunctionNode::addAssociatedProperty(PropertyNode *p)
-{
- m_associatedProperties.append(p);
-}
-
-/*!
- \reimp
-
- Returns \c true if this is an access function for an obsolete property,
- otherwise calls the base implementation of isObsolete().
-*/
-bool FunctionNode::isObsolete() const
-{
- auto it = std::find_if_not(m_associatedProperties.begin(), m_associatedProperties.end(),
- [](const Node *p) -> bool { return p->isObsolete(); });
-
- if (!m_associatedProperties.isEmpty() && it == m_associatedProperties.end())
- return true;
-
- return Node::isObsolete();
-}
-
-/*! \fn unsigned char FunctionNode::overloadNumber() const
- Returns the overload number for this function.
- */
-
-/*!
- Reconstructs and returns the function's signature. If \a values
- is \c true, the default values of the parameters are included.
- The return type is included unless \a noReturnType is \c true.
- Function templates are prefixed with \c {template <parameter_list>}
- if \a templateParams is \c true.
- */
-QString FunctionNode::signature(bool values, bool noReturnType, bool templateParams) const
-{
- QStringList elements;
-
- if (templateParams)
- elements << templateDecl();
- if (!noReturnType)
- elements << m_returnType;
- elements.removeAll({});
-
- if (!isMacroWithoutParams()) {
- elements << name() + QLatin1Char('(') + m_parameters.signature(values) + QLatin1Char(')');
- if (!isMacro()) {
- if (isConst())
- elements << QStringLiteral("const");
- if (isRef())
- elements << QStringLiteral("&");
- else if (isRefRef())
- elements << QStringLiteral("&&");
- }
- } else {
- elements << name();
- }
- return elements.join(QLatin1Char(' '));
-}
-
-/*!
- Print some information used for debugging qdoc. Only used when debugging.
- */
-void FunctionNode::debug() const
-{
- qDebug("QML METHOD %s m_returnType %s m_parentPath %s", qPrintable(name()),
- qPrintable(m_returnType), qPrintable(m_parentPath.join(' ')));
-}
-
-/*!
- Compares this FunctionNode to the FunctionNode pointed to
- by \a functionNode. Returns true if they describe the same function.
- */
-bool FunctionNode::compare(const FunctionNode *functionNode) const
-{
- if (functionNode == nullptr)
- return false;
- if (metaness() != functionNode->metaness())
- return false;
- if (parent() != functionNode->parent())
- return false;
- if (m_returnType != functionNode->returnType())
- return false;
- if (isConst() != functionNode->isConst())
- return false;
- if (isAttached() != functionNode->isAttached())
- return false;
- const Parameters &p = functionNode->parameters();
- if (m_parameters.count() != p.count())
- return false;
- if (!p.isEmpty()) {
- for (int i = 0; i < p.count(); ++i) {
- if (m_parameters.at(i).type() != p.at(i).type())
- return false;
- }
- }
- return true;
-}
-
-/*!
- In some cases, it is ok for a public function to be not documented.
- For example, the macro Q_OBJECT adds several functions to the API of
- a class, but these functions are normally not meant to be documented.
- So if a function node doesn't have documentation, then if its name is
- in the list of functions that it is ok not to document, this function
- returns true. Otherwise, it returns false.
-
- These are the member function names added by macros. Usually they
- are not documented, but they can be documented, so this test avoids
- reporting an error if they are not documented.
-
- But maybe we should generate a standard text for each of them?
- */
-bool FunctionNode::isIgnored() const
-{
- if (!hasDoc() && !hasSharedDoc()) {
- if (name().startsWith(QLatin1String("qt_")) || name() == QLatin1String("metaObject")
- || name() == QLatin1String("tr") || name() == QLatin1String("trUtf8")
- || name() == QLatin1String("d_func")) {
- return true;
- }
- QString s = signature(false, false);
- if (s.contains(QLatin1String("enum_type")) && s.contains(QLatin1String("operator|")))
- return true;
- }
- return false;
-}
-
-/*!
- Returns true if this function has overloads. Otherwise false.
- First, if this function node's overload pointer is not nullptr,
- return true. Next, if this function node's overload flag is true
- return true. Finally, if this function's parent Aggregate has a
- function by the same name as this one in its function map and
- that function has overloads, return true. Otherwise return false.
-
- There is a failsafe way to test it under any circumstances.
- */
-bool FunctionNode::hasOverloads() const
-{
- if (m_nextOverload != nullptr)
- return true;
- if (m_overloadFlag)
- return true;
- if (parent())
- return parent()->hasOverloads(this);
- return false;
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/functionnode.h b/src/qdoc/functionnode.h
deleted file mode 100644
index a55955d71..000000000
--- a/src/qdoc/functionnode.h
+++ /dev/null
@@ -1,213 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef FUNCTIONNODE_H
-#define FUNCTIONNODE_H
-
-#include "aggregate.h"
-#include "node.h"
-#include "parameters.h"
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-class FunctionNode : public Node
-{
-public:
- enum Virtualness { NonVirtual, NormalVirtual, PureVirtual };
-
- enum Metaness {
- Plain,
- Signal,
- Slot,
- Ctor,
- Dtor,
- CCtor, // copy constructor
- MCtor, // move-copy constructor
- MacroWithParams,
- MacroWithoutParams,
- Native,
- CAssign, // copy-assignment operator
- MAssign, // move-assignment operator
- QmlSignal,
- QmlSignalHandler,
- QmlMethod,
- JsSignal,
- JsSignalHandler,
- JsMethod
- };
-
- FunctionNode(Aggregate *parent, const QString &name); // C++ function (Plain)
- FunctionNode(Metaness type, Aggregate *parent, const QString &name, bool attached = false);
-
- Node *clone(Aggregate *parent) override;
- Metaness metaness() const { return m_metaness; }
- QString metanessString() const;
- bool changeMetaness(Metaness from, Metaness to);
- void setMetaness(Metaness metaness) { m_metaness = metaness; }
- Metaness setMetaness(const QString &metaness);
- QString kindString() const;
- static Metaness getMetaness(const QString &value);
- static Metaness getMetanessFromTopic(const QString &topic);
- static Genus getGenus(Metaness metaness);
-
- void setReturnType(const QString &type) { m_returnType = type; }
- void setParentPath(const QStringList &path) { m_parentPath = path; }
- void setVirtualness(const QString &value);
- void setVirtualness(Virtualness virtualness) { m_virtualness = virtualness; }
- void setVirtual() { m_virtualness = NormalVirtual; }
- void setConst(bool b) { m_const = b; }
- void setStatic(bool b) { m_static = b; }
- void setReimpFlag() { m_reimpFlag = true; }
- void setOverridesThis(const QString &path) { m_overridesThis = path; }
-
- const QString &returnType() const { return m_returnType; }
- QString virtualness() const;
- bool isConst() const { return m_const; }
- bool isStatic() const override { return m_static; }
- bool isOverload() const { return m_overloadFlag; }
- bool isMarkedReimp() const override { return m_reimpFlag; }
- bool isSomeCtor() const { return isCtor() || isCCtor() || isMCtor(); }
- bool isMacroWithParams() const { return (m_metaness == MacroWithParams); }
- bool isMacroWithoutParams() const { return (m_metaness == MacroWithoutParams); }
- bool isMacro() const override { return (isMacroWithParams() || isMacroWithoutParams()); }
- bool isObsolete() const override;
-
- bool isCppFunction() const { return m_metaness == Plain; } // Is this correct?
- bool isSignal() const { return (m_metaness == Signal); }
- bool isSlot() const { return (m_metaness == Slot); }
- bool isCtor() const { return (m_metaness == Ctor); }
- bool isDtor() const { return (m_metaness == Dtor); }
- bool isCCtor() const { return (m_metaness == CCtor); }
- bool isMCtor() const { return (m_metaness == MCtor); }
- bool isCAssign() const { return (m_metaness == CAssign); }
- bool isMAssign() const { return (m_metaness == MAssign); }
-
- bool isJsMethod() const { return (m_metaness == JsMethod); }
- bool isJsSignal() const { return (m_metaness == JsSignal); }
- bool isJsSignalHandler() const { return (m_metaness == JsSignalHandler); }
-
- bool isQmlMethod() const { return (m_metaness == QmlMethod); }
- bool isQmlSignal() const { return (m_metaness == QmlSignal); }
- bool isQmlSignalHandler() const { return (m_metaness == QmlSignalHandler); }
-
- bool isSpecialMemberFunction() const
- {
- return (isDtor() || isCCtor() || isMCtor() || isCAssign() || isMAssign());
- }
- bool isNonvirtual() const { return (m_virtualness == NonVirtual); }
- bool isVirtual() const { return (m_virtualness == NormalVirtual); }
- bool isPureVirtual() const { return (m_virtualness == PureVirtual); }
- bool returnsBool() const { return (m_returnType == QLatin1String("bool")); }
-
- Parameters &parameters() { return m_parameters; }
- const Parameters &parameters() const { return m_parameters; }
- bool isPrivateSignal() const { return m_parameters.isPrivateSignal(); }
- void setParameters(const QString &signature) { m_parameters.set(signature); }
- QString signature(bool values, bool noReturnType, bool templateParams = false) const override;
-
- const QString &overridesThis() const { return m_overridesThis; }
- const NodeList &associatedProperties() const { return m_associatedProperties; }
- const QStringList &parentPath() const { return m_parentPath; }
- bool hasAssociatedProperties() const { return !m_associatedProperties.isEmpty(); }
- bool hasOneAssociatedProperty() const { return (m_associatedProperties.size() == 1); }
- Node *firstAssociatedProperty() const { return m_associatedProperties[0]; }
-
- QString element() const override { return parent()->name(); }
- bool isAttached() const override { return m_attached; }
- bool isQtQuickNode() const override { return parent()->isQtQuickNode(); }
- QString qmlTypeName() const override { return parent()->qmlTypeName(); }
- QString logicalModuleName() const override { return parent()->logicalModuleName(); }
- QString logicalModuleVersion() const override { return parent()->logicalModuleVersion(); }
- QString logicalModuleIdentifier() const override { return parent()->logicalModuleIdentifier(); }
-
- void debug() const;
-
- void setFinal(bool b) { m_isFinal = b; }
- bool isFinal() const { return m_isFinal; }
-
- void setOverride(bool b) { m_isOverride = b; }
- bool isOverride() const { return m_isOverride; }
-
- void setRef(bool b) { m_isRef = b; }
- bool isRef() const { return m_isRef; }
-
- void setRefRef(bool b) { m_isRefRef = b; }
- bool isRefRef() const { return m_isRefRef; }
-
- void setInvokable(bool b) { m_isInvokable = b; }
- bool isInvokable() const { return m_isInvokable; }
-
- bool hasTag(const QString &tag) const override { return (m_tag == tag); }
- void setTag(const QString &tag) { m_tag = tag; }
- const QString &tag() const { return m_tag; }
- bool compare(const FunctionNode *functionNode) const;
- bool isIgnored() const;
- bool hasOverloads() const;
- void clearOverloadFlag() { m_overloadFlag = false; }
- void setOverloadFlag() { m_overloadFlag = true; }
- void setOverloadNumber(signed short number);
- void appendOverload(FunctionNode *functionNode);
- signed short overloadNumber() const { return m_overloadNumber; }
- FunctionNode *nextOverload() { return m_nextOverload; }
- void setNextOverload(FunctionNode *functionNode) { m_nextOverload = functionNode; }
- FunctionNode *findPrimaryFunction();
-
-private:
- void addAssociatedProperty(PropertyNode *property);
-
- friend class Aggregate;
- friend class PropertyNode;
-
- bool m_const : 1;
- bool m_static : 1;
- bool m_reimpFlag : 1;
- bool m_attached : 1;
- bool m_overloadFlag : 1;
- bool m_isFinal : 1;
- bool m_isOverride : 1;
- bool m_isRef : 1;
- bool m_isRefRef : 1;
- bool m_isInvokable : 1;
- Metaness m_metaness {};
- Virtualness m_virtualness {};
- signed short m_overloadNumber {};
- FunctionNode *m_nextOverload { nullptr };
- QString m_returnType {};
- QStringList m_parentPath {};
- QString m_overridesThis {};
- QString m_tag {};
- NodeList m_associatedProperties {};
- Parameters m_parameters {};
-};
-
-QT_END_NAMESPACE
-
-#endif // FUNCTIONNODE_H
diff --git a/src/qdoc/generator.cpp b/src/qdoc/generator.cpp
deleted file mode 100644
index 8e9a8698c..000000000
--- a/src/qdoc/generator.cpp
+++ /dev/null
@@ -1,2231 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- generator.cpp
-*/
-#include "generator.h"
-
-#include "access.h"
-#include "aggregate.h"
-#include "classnode.h"
-#include "codemarker.h"
-#include "collectionnode.h"
-#include "config.h"
-#include "doc.h"
-#include "editdistance.h"
-#include "enumnode.h"
-#include "examplenode.h"
-#include "functionnode.h"
-#include "loggingcategory.h"
-#include "node.h"
-#include "openedlist.h"
-#include "propertynode.h"
-#include "qdocdatabase.h"
-#include "qmltypenode.h"
-#include "quoter.h"
-#include "separator.h"
-#include "sharedcommentnode.h"
-#include "tokenizer.h"
-#include "typedefnode.h"
-
-#include <QtCore/qdebug.h>
-#include <QtCore/qdir.h>
-#include <QtCore/qregularexpression.h>
-
-#ifndef QT_BOOTSTRAPPED
-# include "QtCore/qurl.h"
-#endif
-
-QT_BEGIN_NAMESPACE
-
-Generator *Generator::currentGenerator_;
-QStringList Generator::exampleDirs;
-QStringList Generator::exampleImgExts;
-QMap<QString, QMap<QString, QString>> Generator::fmtLeftMaps;
-QMap<QString, QMap<QString, QString>> Generator::fmtRightMaps;
-QList<Generator *> Generator::generators;
-QStringList Generator::imageDirs;
-QStringList Generator::imageFiles;
-QMap<QString, QStringList> Generator::imgFileExts;
-QString Generator::outDir_;
-QString Generator::outSubdir_;
-QStringList Generator::outFileNames_;
-QSet<QString> Generator::outputFormats;
-QHash<QString, QString> Generator::outputPrefixes;
-QHash<QString, QString> Generator::outputSuffixes;
-QString Generator::project_;
-bool Generator::noLinkErrors_ = false;
-bool Generator::autolinkErrors_ = false;
-bool Generator::redirectDocumentationToDevNull_ = false;
-bool Generator::useOutputSubdirs_ = true;
-QmlTypeNode *Generator::qmlTypeContext_ = nullptr;
-
-static QRegularExpression tag("</?@[^>]*>");
-static QLatin1String amp("&amp;");
-static QLatin1String gt("&gt;");
-static QLatin1String lt("&lt;");
-static QLatin1String quot("&quot;");
-
-/*!
- Constructs the generator base class. Prepends the newly
- constructed generator to the list of output generators.
- Sets a pointer to the QDoc database singleton, which is
- available to the generator subclasses.
- */
-Generator::Generator()
-{
- m_qdb = QDocDatabase::qdocDB();
- generators.prepend(this);
-}
-
-/*!
- Destroys the generator after removing it from the list of
- output generators.
- */
-Generator::~Generator()
-{
- generators.removeAll(this);
-}
-
-void Generator::appendFullName(Text &text, const Node *apparentNode, const Node *relative,
- const Node *actualNode)
-{
- if (actualNode == nullptr)
- actualNode = apparentNode;
- text << Atom(Atom::LinkNode, CodeMarker::stringForNode(actualNode))
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << Atom(Atom::String, apparentNode->plainFullName(relative))
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
-}
-
-void Generator::appendFullName(Text &text, const Node *apparentNode, const QString &fullName,
- const Node *actualNode)
-{
- if (actualNode == nullptr)
- actualNode = apparentNode;
- text << Atom(Atom::LinkNode, CodeMarker::stringForNode(actualNode))
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << Atom(Atom::String, fullName)
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
-}
-
-void Generator::appendFullNames(Text &text, const NodeList &nodes, const Node *relative)
-{
- int index = 0;
- for (const auto &node : nodes) {
- appendFullName(text, node, relative);
- text << comma(index++, nodes.count());
- }
-}
-
-/*!
- Append the signature for the function named in \a node to
- \a text, so that is is a link to the documentation for that
- function.
- */
-void Generator::appendSignature(Text &text, const Node *node)
-{
- text << Atom(Atom::LinkNode, CodeMarker::stringForNode(node))
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << Atom(Atom::String, node->signature(false, true))
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
-}
-
-/*!
- Generate a bullet list of function signatures. The function
- nodes are in \a nodes. It uses the \a relative node and the
- \a marker for the generation.
- */
-void Generator::signatureList(const NodeList &nodes, const Node *relative, CodeMarker *marker)
-{
- Text text;
- int count = 0;
- text << Atom(Atom::ListLeft, QString("bullet"));
- for (const auto &node : nodes) {
- text << Atom(Atom::ListItemNumber, QString::number(++count));
- text << Atom(Atom::ListItemLeft, QString("bullet"));
- appendSignature(text, node);
- text << Atom(Atom::ListItemRight, QString("bullet"));
- }
- text << Atom(Atom::ListRight, QString("bullet"));
- generateText(text, relative, marker);
-}
-
-int Generator::appendSortedNames(Text &text, const ClassNode *cn, const QList<RelatedClass> &rc)
-{
- QMap<QString, Text> classMap;
- for (const auto &relatedClass : rc) {
- ClassNode *rcn = relatedClass.m_node;
- if (rcn && rcn->isInAPI()) {
- Text className;
- appendFullName(className, rcn, cn);
- classMap[className.toString().toLower()] = className;
- }
- }
-
- int index = 0;
- const QStringList classNames = classMap.keys();
- for (const auto &className : classNames) {
- text << classMap[className];
- text << comma(index++, classNames.count());
- }
- return index;
-}
-
-int Generator::appendSortedQmlNames(Text &text, const Node *base, const NodeList &subs)
-{
- QMap<QString, Text> classMap;
-
- for (const auto sub : subs) {
- Text text;
- if (!base->isQtQuickNode() || !sub->isQtQuickNode()
- || (base->logicalModuleName() == sub->logicalModuleName())) {
- appendFullName(text, sub, base);
- classMap[text.toString().toLower()] = text;
- }
- }
-
- int index = 0;
- const QStringList names = classMap.keys();
- for (const auto &name : names) {
- text << classMap[name];
- text << comma(index++, names.count());
- }
- return index;
-}
-
-/*!
- Creates the file named \a fileName in the output directory
- and returns a QFile pointing to this file. In particular,
- this method deals with errors when opening the file:
- the returned QFile is always valid and can be written to.
-
- \sa beginFilePage()
- */
-QFile *Generator::openSubPageFile(const Node *node, const QString &fileName)
-{
- QString path = outputDir() + QLatin1Char('/');
- if (Generator::useOutputSubdirs() && !node->outputSubdirectory().isEmpty()
- && !outputDir().endsWith(node->outputSubdirectory())) {
- path += node->outputSubdirectory() + QLatin1Char('/');
- }
- path += fileName;
-
- auto outPath = redirectDocumentationToDevNull_ ? QStringLiteral("/dev/null") : path;
- auto outFile = new QFile(outPath);
- if (!redirectDocumentationToDevNull_ && outFile->exists()) {
- node->location().error(QStringLiteral("Output file already exists; overwriting %1")
- .arg(outFile->fileName()));
- }
- if (!outFile->open(QFile::WriteOnly)) {
- node->location().fatal(
- QStringLiteral("Cannot open output file '%1'").arg(outFile->fileName()));
- }
- qCDebug(lcQdoc, "Writing: %s", qPrintable(path));
- outFileNames_ << fileName;
- return outFile;
-}
-
-/*!
- Creates the file named \a fileName in the output directory.
- Attaches a QTextStream to the created file, which is written
- to all over the place using out(). This function does not
- store the \a fileName in the \a node as the output file name.
-
- \sa beginSubPage()
- */
-void Generator::beginFilePage(const Node *node, const QString &fileName)
-{
- QFile *outFile = openSubPageFile(node, fileName);
- QTextStream *out = new QTextStream(outFile);
- outStreamStack.push(out);
-}
-
-/*!
- Creates the file named \a fileName in the output directory.
- Attaches a QTextStream to the created file, which is written
- to all over the place using out(). This function calls another
- function, \c beginFilePage(), which is really just most of what
- this function used to contain. We needed a different version
- that doesn't store the \a fileName in the \a node as the output
- file name.
-
- \sa beginFilePage()
-*/
-void Generator::beginSubPage(const Node *node, const QString &fileName)
-{
- beginFilePage(node, fileName);
- const_cast<Node *>(node)->setOutputFileName(fileName);
-}
-
-/*!
- Flush the text stream associated with the subpage, and
- then pop it off the text stream stack and delete it.
- This terminates output of the subpage.
- */
-void Generator::endSubPage()
-{
- outStreamStack.top()->flush();
- delete outStreamStack.top()->device();
- delete outStreamStack.pop();
-}
-
-/*
- the code below is effectively equivalent to:
- input.replace(QRegularExpression("[^A-Za-z0-9]+"), " ");
- input = input.trimmed();
- input.replace(QLatin1Char(' '), QLatin1Char('-'));
- input = input.toLower();
- as this function accounted for ~8% of total running time
- we optimize a bit...
-*/
-static void transmogrify(QString &input, QString &output)
-{
- // +5 prevents realloc in fileName() below
- output.reserve(input.size() + 5);
- bool begun = false;
- for (int i = 0; i != input.size(); ++i) {
- QChar c = input.at(i);
- uint u = c.unicode();
- if (u >= 'A' && u <= 'Z')
- u += 'a' - 'A';
- if ((u >= 'a' && u <= 'z') || (u >= '0' && u <= '9')) {
- output += QLatin1Char(u);
- begun = true;
- } else if (begun) {
- output += QLatin1Char('-');
- begun = false;
- }
- }
- while (output.endsWith(QLatin1Char('-')))
- output.chop(1);
-}
-
-QString Generator::fileBase(const Node *node)
-{
- if (!node->isPageNode() && !node->isCollectionNode())
- node = node->parent();
-
- if (node->hasFileNameBase())
- return node->fileNameBase();
-
- QString base;
- if (node->isCollectionNode()) {
- base = node->name() + outputSuffix(node);
- if (base.endsWith(".html"))
- base.truncate(base.length() - 5);
-
- if (node->isQmlModule())
- base.append("-qmlmodule");
- else if (node->isJsModule())
- base.append("-jsmodule");
- else if (node->isModule())
- base.append("-module");
- // Why not add "-group" for group pages?
- } else if (node->isTextPageNode()) {
- base = node->name();
- if (base.endsWith(".html"))
- base.truncate(base.length() - 5);
-
- if (node->isExample()) {
- QString modPrefix(node->physicalModuleName());
- if (modPrefix.isEmpty()) {
- modPrefix = project_;
- }
- base.prepend(modPrefix.toLower() + QLatin1Char('-'));
- }
- if (node->isExample()) {
- base.append(QLatin1String("-example"));
- }
- } else if (node->isQmlType() || node->isQmlBasicType() || node->isJsType()
- || node->isJsBasicType()) {
- base = node->name();
- /*
- To avoid file name conflicts in the html directory,
- we prepend a prefix (by default, "qml-") and an optional suffix
- to the file name. The suffix, if one exists, is appended to the
- module name.
- */
- if (!node->logicalModuleName().isEmpty()
- && (!node->logicalModule()->isInternal() || Config::instance().showInternal()))
- base.prepend(node->logicalModuleName() + outputSuffix(node) + QLatin1Char('-'));
-
- base.prepend(outputPrefix(node));
- } else if (node->isProxyNode()) {
- base = node->name();
- base.append("-proxy");
- } else {
- 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('-'));
- p = pp;
- }
- if (node->isNamespace() && !node->name().isEmpty()) {
- const NamespaceNode *ns = static_cast<const NamespaceNode *>(node);
- if (!ns->isDocumentedHere()) {
- base.append(QLatin1String("-sub-"));
- base.append(ns->tree()->camelCaseModuleName());
- }
- }
- }
-
- QString res;
- transmogrify(base, res);
- Node *n = const_cast<Node *>(node);
- n->setFileNameBase(res);
- return res;
-}
-
-/*!
- Constructs an href link from an example file name, which
- is a path to the example file. If \a fileExtension is
- empty (default value), retrieve the file extension from
- the generator.
- */
-QString Generator::linkForExampleFile(const QString &path, const Node *parent,
- const QString &fileExt)
-{
- QString link = path;
- QString modPrefix(parent->physicalModuleName());
- if (modPrefix.isEmpty())
- modPrefix = project_;
- link.prepend(modPrefix.toLower() + QLatin1Char('-'));
-
- QString res;
- transmogrify(link, res);
- res.append(QLatin1Char('.'));
- res.append(fileExt);
- if (fileExt.isEmpty())
- res.append(fileExtension());
- return res;
-}
-
-/*!
- Helper function to construct a title for a file or image page
- included in an example.
-*/
-QString Generator::exampleFileTitle(const ExampleNode *relative, const QString &fileName)
-{
- QString suffix;
- if (relative->files().contains(fileName))
- suffix = QLatin1String(" Example File");
- else if (relative->images().contains(fileName))
- suffix = QLatin1String(" Image File");
- else
- return suffix;
-
- return fileName.mid(fileName.lastIndexOf(QLatin1Char('/')) + 1) + suffix;
-}
-
-/*!
- If the \a node has a URL, return the URL as the file name.
- Otherwise, construct the file name from the fileBase() and
- either the provided \a extension or fileExtension(), and
- return the constructed name.
- */
-QString Generator::fileName(const Node *node, const QString &extension) const
-{
- if (!node->url().isEmpty())
- return node->url();
-
- QString name = fileBase(node) + QLatin1Char('.');
- return extension.isNull() ? name + fileExtension() : name + extension;
-}
-
-QString Generator::cleanRef(const QString &ref)
-{
- QString clean;
-
- if (ref.isEmpty())
- return clean;
-
- clean.reserve(ref.size() + 20);
- const QChar c = ref[0];
- const uint u = c.unicode();
-
- if ((u >= 'a' && u <= 'z') || (u >= 'A' && u <= 'Z') || (u >= '0' && u <= '9')) {
- clean += c;
- } else if (u == '~') {
- clean += "dtor.";
- } else if (u == '_') {
- clean += "underscore.";
- } else {
- clean += QLatin1Char('A');
- }
-
- for (int i = 1; i < ref.length(); i++) {
- const QChar c = ref[i];
- const uint u = c.unicode();
- if ((u >= 'a' && u <= 'z') || (u >= 'A' && u <= 'Z') || (u >= '0' && u <= '9') || u == '-'
- || u == '_' || u == ':' || u == '.') {
- clean += c;
- } else if (c.isSpace()) {
- clean += QLatin1Char('-');
- } else if (u == '!') {
- clean += "-not";
- } else if (u == '&') {
- clean += "-and";
- } else if (u == '<') {
- clean += "-lt";
- } else if (u == '=') {
- clean += "-eq";
- } else if (u == '>') {
- clean += "-gt";
- } else if (u == '#') {
- clean += QLatin1Char('#');
- } else {
- clean += QLatin1Char('-');
- clean += QString::number(static_cast<int>(u), 16);
- }
- }
- return clean;
-}
-
-QMap<QString, QString> &Generator::formattingLeftMap()
-{
- return fmtLeftMaps[format()];
-}
-
-QMap<QString, QString> &Generator::formattingRightMap()
-{
- return fmtRightMaps[format()];
-}
-
-/*!
- Returns the full document location.
- */
-QString Generator::fullDocumentLocation(const Node *node, bool useSubdir)
-{
- if (node == nullptr)
- return QString();
- if (!node->url().isEmpty())
- return node->url();
-
- QString parentName;
- QString anchorRef;
- QString fdl;
-
- /*
- If the useSubdir parameter is set, then the output is
- being sent to subdirectories of the output directory.
- Prepend the subdirectory name + '/' to the result.
- */
- if (useSubdir) {
- fdl = node->outputSubdirectory();
- if (!fdl.isEmpty())
- fdl.append(QLatin1Char('/'));
- }
- if (node->isNamespace()) {
- /*
- The root namespace has no name - check for this before creating
- an attribute containing the location of any documentation.
- */
- if (!fileBase(node).isEmpty())
- parentName = fileBase(node) + QLatin1Char('.') + currentGenerator()->fileExtension();
- else
- return QString();
- } else if (node->isQmlType() || node->isQmlBasicType() || node->isJsType()
- || node->isJsBasicType()) {
- QString fb = fileBase(node);
- if (fb.startsWith(outputPrefix(node)))
- return fb + QLatin1Char('.') + currentGenerator()->fileExtension();
- else {
- QString mq;
- if (!node->logicalModuleName().isEmpty()) {
- mq = node->logicalModuleName().replace(QChar('.'), QChar('-'));
- mq = mq.toLower() + QLatin1Char('-');
- }
- return fdl + outputPrefix(node) + mq + fileBase(node) + QLatin1Char('.')
- + currentGenerator()->fileExtension();
- }
- } else if (node->isTextPageNode() || node->isCollectionNode()) {
- parentName = fileBase(node) + QLatin1Char('.') + currentGenerator()->fileExtension();
- } else if (fileBase(node).isEmpty())
- return QString();
-
- Node *parentNode = nullptr;
-
- if ((parentNode = node->parent())) {
- // use the parent's name unless the parent is the root namespace
- if (!node->parent()->isNamespace() || !node->parent()->name().isEmpty())
- parentName = fullDocumentLocation(node->parent());
- }
-
- switch (node->nodeType()) {
- case Node::Class:
- case Node::Struct:
- case Node::Union:
- case Node::Namespace:
- case Node::Proxy:
- parentName = fileBase(node) + QLatin1Char('.') + currentGenerator()->fileExtension();
- break;
- case Node::Function: {
- const FunctionNode *fn = static_cast<const FunctionNode *>(node);
- switch (fn->metaness()) {
- case FunctionNode::JsSignal:
- case FunctionNode::QmlSignal:
- anchorRef = QLatin1Char('#') + node->name() + "-signal";
- break;
- case FunctionNode::JsSignalHandler:
- case FunctionNode::QmlSignalHandler:
- anchorRef = QLatin1Char('#') + node->name() + "-signal-handler";
- break;
- case FunctionNode::JsMethod:
- case FunctionNode::QmlMethod:
- anchorRef = QLatin1Char('#') + node->name() + "-method";
- break;
- default:
- if (fn->isDtor())
- anchorRef = "#dtor." + fn->name().mid(1);
- else if (fn->hasOneAssociatedProperty() && fn->doc().isEmpty())
- return fullDocumentLocation(fn->firstAssociatedProperty());
- else if (fn->overloadNumber() > 0)
- anchorRef = QLatin1Char('#') + cleanRef(fn->name()) + QLatin1Char('-')
- + QString::number(fn->overloadNumber());
- else
- anchorRef = QLatin1Char('#') + cleanRef(fn->name());
- break;
- }
- break;
- }
- /*
- Use node->name() instead of fileBase(node) as
- the latter returns the name in lower-case. For
- HTML anchors, we need to preserve the case.
- */
- case Node::Enum:
- anchorRef = QLatin1Char('#') + node->name() + "-enum";
- break;
- case Node::TypeAlias:
- anchorRef = QLatin1Char('#') + node->name() + "-alias";
- break;
- case Node::Typedef: {
- const TypedefNode *tdef = static_cast<const TypedefNode *>(node);
- if (tdef->associatedEnum()) {
- return fullDocumentLocation(tdef->associatedEnum());
- }
- anchorRef = QLatin1Char('#') + node->name() + "-typedef";
- break;
- }
- case Node::Property:
- anchorRef = QLatin1Char('#') + node->name() + "-prop";
- break;
- case Node::JsProperty:
- case Node::QmlProperty:
- if (node->isAttached())
- anchorRef = QLatin1Char('#') + node->name() + "-attached-prop";
- else
- anchorRef = QLatin1Char('#') + node->name() + "-prop";
- break;
- case Node::Variable:
- anchorRef = QLatin1Char('#') + node->name() + "-var";
- break;
- case Node::JsType:
- case Node::QmlType:
- case Node::Page:
- case Node::Group:
- case Node::HeaderFile:
- case Node::Module:
- case Node::JsModule:
- case Node::QmlModule: {
- parentName = fileBase(node);
- parentName.replace(QLatin1Char('/'), QLatin1Char('-'))
- .replace(QLatin1Char('.'), QLatin1Char('-'));
- parentName += QLatin1Char('.') + currentGenerator()->fileExtension();
- } break;
- default:
- break;
- }
-
- if (!node->isClassNode() && !node->isNamespace()) {
- if (node->isObsolete())
- parentName.replace(QLatin1Char('.') + currentGenerator()->fileExtension(),
- "-obsolete." + currentGenerator()->fileExtension());
- }
-
- return fdl + parentName.toLower() + anchorRef;
-}
-
-void Generator::generateAlsoList(const Node *node, CodeMarker *marker)
-{
- QList<Text> alsoList = node->doc().alsoList();
- supplementAlsoList(node, alsoList);
-
- if (!alsoList.isEmpty()) {
- Text text;
- text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) << "See also "
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD);
-
- for (int i = 0; i < alsoList.size(); ++i)
- text << alsoList.at(i) << separator(i, alsoList.size());
-
- text << Atom::ParaRight;
- generateText(text, node, marker);
- }
-}
-
-const Atom *Generator::generateAtomList(const Atom *atom, const Node *relative, CodeMarker *marker,
- bool generate, int &numAtoms)
-{
- while (atom != nullptr) {
- if (atom->type() == Atom::FormatIf) {
- int numAtoms0 = numAtoms;
- bool rightFormat = canHandleFormat(atom->string());
- atom = generateAtomList(atom->next(), relative, marker, generate && rightFormat,
- numAtoms);
- if (atom == nullptr)
- return nullptr;
-
- if (atom->type() == Atom::FormatElse) {
- ++numAtoms;
- atom = generateAtomList(atom->next(), relative, marker, generate && !rightFormat,
- numAtoms);
- if (atom == nullptr)
- return nullptr;
- }
-
- if (atom->type() == Atom::FormatEndif) {
- if (generate && numAtoms0 == numAtoms) {
- relative->location().warning(QStringLiteral("Output format %1 not handled %2")
- .arg(format())
- .arg(outFileName()));
- Atom unhandledFormatAtom(Atom::UnhandledFormat, format());
- generateAtomList(&unhandledFormatAtom, relative, marker, generate, numAtoms);
- }
- atom = atom->next();
- }
- } else if (atom->type() == Atom::FormatElse || atom->type() == Atom::FormatEndif) {
- return atom;
- } else {
- int n = 1;
- if (generate) {
- n += generateAtom(atom, relative, marker);
- numAtoms += n;
- }
- while (n-- > 0)
- atom = atom->next();
- }
- }
- return nullptr;
-}
-
-/*!
- Generate the body of the documentation from the qdoc comment
- found with the entity represented by the \a node.
- */
-void Generator::generateBody(const Node *node, CodeMarker *marker)
-{
- const FunctionNode *fn = node->isFunction() ? static_cast<const FunctionNode *>(node) : nullptr;
- if (!node->hasDoc() && !node->hasSharedDoc()) {
- /*
- Test for special function, like a destructor or copy constructor,
- that has no documentation.
- */
- if (fn) {
- if (fn->isDtor()) {
- Text text;
- text << "Destroys the instance of ";
- text << fn->parent()->name() << ".";
- if (fn->isVirtual())
- text << " The destructor is virtual.";
- out() << "<p>";
- generateText(text, node, marker);
- out() << "</p>";
- } else if (fn->isCtor()) {
- Text text;
- text << "Default constructs an instance of ";
- text << fn->parent()->name() << ".";
- out() << "<p>";
- generateText(text, node, marker);
- out() << "</p>";
- } else if (fn->isCCtor()) {
- Text text;
- text << "Copy constructor.";
- out() << "<p>";
- generateText(text, node, marker);
- out() << "</p>";
- } else if (fn->isMCtor()) {
- Text text;
- text << "Move-copy constructor.";
- out() << "<p>";
- generateText(text, node, marker);
- out() << "</p>";
- } else if (fn->isCAssign()) {
- Text text;
- text << "Copy-assignment operator.";
- out() << "<p>";
- generateText(text, node, marker);
- out() << "</p>";
- } else if (fn->isMAssign()) {
- Text text;
- text << "Move-assignment operator.";
- out() << "<p>";
- generateText(text, node, marker);
- out() << "</p>";
- } else if (!node->isWrapper() && !node->isMarkedReimp()) {
- if (!fn->isIgnored()) // undocumented functions added by Q_OBJECT
- node->location().warning(QStringLiteral("No documentation for '%1'")
- .arg(node->plainSignature()));
- }
- } else if (!node->isWrapper() && !node->isMarkedReimp()) {
- // Don't require documentation of things defined in Q_GADGET
- if (node->name() != QLatin1String("QtGadgetHelper"))
- node->location().warning(
- QStringLiteral("No documentation for '%1'").arg(node->plainSignature()));
- }
- } else if (!node->isSharingComment()) {
- // Reimplements clause and type alias info precede body text
- if (fn && !fn->overridesThis().isEmpty())
- generateReimplementsClause(fn, marker);
- else if (node->isTypeAlias())
- generateAddendum(node, TypeAlias, marker, false);
- else if (node->isProperty()) {
- if (static_cast<const PropertyNode *>(node)->propertyType() != PropertyNode::Standard)
- generateAddendum(node, BindableProperty, marker);
- }
-
- if (!generateText(node->doc().body(), node, marker)) {
- if (node->isMarkedReimp())
- return;
- }
-
- if (fn) {
- if (fn->isQmlSignal())
- generateAddendum(node, QmlSignalHandler, marker);
- if (fn->isPrivateSignal())
- generateAddendum(node, PrivateSignal, marker);
- if (fn->isInvokable())
- generateAddendum(node, Invokable, marker);
- if (fn->hasAssociatedProperties())
- generateAddendum(node, AssociatedProperties, marker);
- }
-
- // Generate warnings
- if (node->isEnumType()) {
- const EnumNode *enume = static_cast<const EnumNode *>(node);
-
- QSet<QString> definedItems;
- const QList<EnumItem> &items = enume->items();
- for (const auto &item : items)
- definedItems.insert(item.name());
-
- const auto &documentedItemList = enume->doc().enumItemNames();
- QSet<QString> documentedItems(documentedItemList.cbegin(), documentedItemList.cend());
- const QSet<QString> allItems = definedItems + documentedItems;
- if (allItems.count() > definedItems.count()
- || allItems.count() > documentedItems.count()) {
- for (const auto &it : allItems) {
- if (!definedItems.contains(it)) {
- QString details;
- QString best = nearestName(it, definedItems);
- if (!best.isEmpty() && !documentedItems.contains(best))
- details = QStringLiteral("Maybe you meant '%1'?").arg(best);
-
- node->doc().location().warning(
- QStringLiteral("No such enum item '%1' in %2")
- .arg(it)
- .arg(node->plainFullName()),
- details);
- } else if (!documentedItems.contains(it)) {
- node->doc().location().warning(
- QStringLiteral("Undocumented enum item '%1' in %2")
- .arg(it)
- .arg(node->plainFullName()));
- }
- }
- }
- } else if (fn) {
- const QSet<QString> declaredNames = fn->parameters().getNames();
- const QSet<QString> documentedNames = fn->doc().parameterNames();
- if (declaredNames != documentedNames) {
- for (const auto &name : declaredNames) {
- if (!documentedNames.contains(name)) {
- if (fn->isActive() || fn->isPreliminary()) {
- if (!fn->isMarkedReimp() && !fn->isOverload()) {
- fn->doc().location().warning(
- QStringLiteral("Undocumented parameter '%1' in %2")
- .arg(name)
- .arg(node->plainFullName()));
- }
- }
- }
- }
- for (const auto &name : documentedNames) {
- if (!declaredNames.contains(name)) {
- QString best = nearestName(name, declaredNames);
- QString details;
- if (!best.isEmpty())
- details = QStringLiteral("Maybe you meant '%1'?").arg(best);
- fn->doc().location().warning(QStringLiteral("No such parameter '%1' in %2")
- .arg(name)
- .arg(fn->plainFullName()),
- details);
- }
- }
- }
- /*
- This return value check should be implemented
- for all functions with a return type.
- mws 13/12/2018
- */
- if (!fn->isObsolete() && fn->returnsBool() && !fn->isMarkedReimp()
- && !fn->isOverload()) {
- if (!fn->doc().body().contains("return"))
- node->doc().location().warning(
- QStringLiteral("Undocumented return value "
- "(hint: use 'return' or 'returns' in the text"));
- }
- }
- }
- generateRequiredLinks(node, marker);
-}
-
-/*!
- Generates either a link to the project folder for example \a node, or a list
- of links files/images if 'url.examples config' variable is not defined.
-
- Does nothing for non-example nodes.
-*/
-void Generator::generateRequiredLinks(const Node *node, CodeMarker *marker)
-{
- if (!node->isExample())
- return;
-
- const ExampleNode *en = static_cast<const ExampleNode *>(node);
- QString exampleUrl = Config::instance().getString(CONFIG_URL + Config::dot + CONFIG_EXAMPLES);
-
- if (exampleUrl.isEmpty()) {
- if (!en->noAutoList()) {
- generateFileList(en, marker, false); // files
- generateFileList(en, marker, true); // images
- }
- } else {
- generateLinkToExample(en, marker, exampleUrl);
- }
-}
-
-/*!
- Generates an external link to the project folder for example \a node.
- The path to the example replaces a placeholder '\1' character if
- one is found in the \a baseUrl string. If no such placeholder is found,
- the path is appended to \a baseUrl, after a '/' character if \a baseUrl did
- not already end in one.
-*/
-void Generator::generateLinkToExample(const ExampleNode *en, CodeMarker *marker,
- const QString &baseUrl)
-{
- QString exampleUrl(baseUrl);
- QString link;
-#ifndef QT_BOOTSTRAPPED
- link = QUrl(exampleUrl).host();
-#endif
- if (!link.isEmpty())
- link.prepend(" @ ");
- link.prepend("Example project");
-
- const QLatin1Char separator('/');
- const QLatin1Char placeholder('\1');
- if (!exampleUrl.contains(placeholder)) {
- if (!exampleUrl.endsWith(separator))
- exampleUrl += separator;
- exampleUrl += placeholder;
- }
-
- // Construct a path to the example; <install path>/<example name>
- QString pathRoot;
- QStringMultiMap *metaTagMap = en->doc().metaTagMap();
- if (metaTagMap)
- pathRoot = metaTagMap->value(QLatin1String("installpath"));
- if (pathRoot.isEmpty())
- pathRoot = Config::instance().getString(CONFIG_EXAMPLESINSTALLPATH);
- QStringList path = QStringList() << pathRoot << en->name();
- path.removeAll({});
-
- Text text;
- text << Atom::ParaLeft
- << Atom(Atom::Link, exampleUrl.replace(placeholder, path.join(separator)))
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << Atom(Atom::String, link)
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom::ParaRight;
-
- generateText(text, nullptr, marker);
-}
-
-void Generator::addImageToCopy(const ExampleNode *en, const QString &file)
-{
- QDir dirInfo;
- QString userFriendlyFilePath;
- const QString prefix("/images/used-in-examples/");
- QString srcPath = Config::findFile(en->location(), QStringList(), exampleDirs, file,
- exampleImgExts, &userFriendlyFilePath);
- outFileNames_ << prefix.mid(1) + userFriendlyFilePath;
- userFriendlyFilePath.truncate(userFriendlyFilePath.lastIndexOf('/'));
- QString imgOutDir = outDir_ + prefix + userFriendlyFilePath;
- if (!dirInfo.mkpath(imgOutDir))
- en->location().fatal(QStringLiteral("Cannot create output directory '%1'").arg(imgOutDir));
- Config::copyFile(en->location(), srcPath, file, imgOutDir);
-}
-
-/*!
- This function is called when the documentation for an example is
- being formatted. It outputs a list of files for the example, which
- can be the example's source files or the list of images used by the
- example. The images are copied into a subtree of
- \c{...doc/html/images/used-in-examples/...}
-*/
-void Generator::generateFileList(const ExampleNode *en, CodeMarker *marker, bool images)
-{
- Text text;
- OpenedList openedList(OpenedList::Bullet);
- QString tag;
- QStringList paths;
- Atom::AtomType atomType = Atom::ExampleFileLink;
-
- if (images) {
- paths = en->images();
- tag = "Images:";
- atomType = Atom::ExampleImageLink;
- } else { // files
- paths = en->files();
- tag = "Files:";
- }
- std::sort(paths.begin(), paths.end(), Generator::comparePaths);
-
- text << Atom::ParaLeft << tag << Atom::ParaRight;
- text << Atom(Atom::ListLeft, openedList.styleString());
-
- QString path;
- for (const auto &file : qAsConst(paths)) {
- if (images) {
- if (!file.isEmpty())
- addImageToCopy(en, file);
- } else {
- generateExampleFilePage(en, file, marker);
- }
-
- openedList.next();
- text << Atom(Atom::ListItemNumber, openedList.numberString())
- << Atom(Atom::ListItemLeft, openedList.styleString()) << Atom::ParaLeft
- << Atom(atomType, file) << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << file
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom::ParaRight
- << Atom(Atom::ListItemRight, openedList.styleString());
- path = file;
- }
- text << Atom(Atom::ListRight, openedList.styleString());
- if (!paths.isEmpty())
- generateText(text, en, marker);
-}
-
-void Generator::generateInherits(const ClassNode *classe, CodeMarker *marker)
-{
- if (!classe->baseClasses().isEmpty()) {
- Text text;
- text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD)
- << "Inherits: " << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD);
-
- int index = 0;
- const QList<RelatedClass> &baseClasses = classe->baseClasses();
- for (const auto &cls : baseClasses) {
- if (cls.m_node) {
- appendFullName(text, cls.m_node, classe);
-
- if (cls.m_access == Access::Protected) {
- text << " (protected)";
- } else if (cls.m_access == Access::Private) {
- text << " (private)";
- }
- text << separator(index++, classe->baseClasses().count());
- }
- }
- text << Atom::ParaRight;
- generateText(text, classe, marker);
- }
-}
-
-/*!
- Recursive writing of HTML files from the root \a node.
- */
-void Generator::generateDocumentation(Node *node)
-{
- if (!node->url().isNull())
- return;
- if (node->isIndexNode())
- return;
- if (node->isInternal() && !m_showInternal)
- return;
- if (node->isExternalPage())
- return;
-
- /*
- Obtain a code marker for the source file.
- */
- CodeMarker *marker = CodeMarker::markerForFileName(node->location().filePath());
-
- if (node->parent() != nullptr) {
- if (node->isCollectionNode()) {
- /*
- A collection node collects: groups, C++ modules,
- QML modules or JavaScript modules. Testing for a
- CollectionNode must be done before testing for a
- TextPageNode because a CollectionNode is a PageNode
- at this point.
-
- Don't output an HTML page for the collection
- node unless the \group, \module, \qmlmodule or
- \jsmodule command was actually seen by qdoc in
- the qdoc comment for the node.
-
- A key prerequisite in this case is the call to
- mergeCollections(cn). We must determine whether
- this group, module, QML module, or JavaScript
- module has members in other modules. We know at
- this point that cn's members list contains only
- members in the current module. Therefore, before
- outputting the page for cn, we must search for
- members of cn in the other modules and add them
- to the members list.
- */
- CollectionNode *cn = static_cast<CollectionNode *>(node);
- if (cn->wasSeen()) {
- m_qdb->mergeCollections(cn);
- beginSubPage(node, fileName(node));
- generateCollectionNode(cn, marker);
- endSubPage();
- } else if (cn->isGenericCollection()) {
- // Currently used only for the module's related orphans page
- // but can be generalized for other kinds of collections if
- // other use cases pop up.
- QString name = cn->name().toLower();
- name.replace(QChar(' '), QString("-"));
- QString filename =
- cn->tree()->physicalModuleName() + "-" + name + "." + fileExtension();
- beginSubPage(node, filename);
- generateGenericCollectionPage(cn, marker);
- endSubPage();
- }
- } else if (node->isTextPageNode()) {
- beginSubPage(node, fileName(node));
- generatePageNode(static_cast<PageNode *>(node), marker);
- endSubPage();
- } else if (node->isAggregate()) {
- if ((node->isClassNode() || node->isHeader() || node->isNamespace())
- && node->docMustBeGenerated()) {
- beginSubPage(node, fileName(node));
- generateCppReferencePage(static_cast<Aggregate *>(node), marker);
- endSubPage();
- } else if (node->isQmlType() || node->isJsType()) {
- beginSubPage(node, fileName(node));
- QmlTypeNode *qcn = static_cast<QmlTypeNode *>(node);
- generateQmlTypePage(qcn, marker);
- endSubPage();
- } else if (node->isQmlBasicType() || node->isJsBasicType()) {
- beginSubPage(node, fileName(node));
- QmlBasicTypeNode *qbtn = static_cast<QmlBasicTypeNode *>(node);
- generateQmlBasicTypePage(qbtn, marker);
- endSubPage();
- } else if (node->isProxyNode()) {
- beginSubPage(node, fileName(node));
- generateProxyPage(static_cast<Aggregate *>(node), marker);
- endSubPage();
- }
- }
- }
-
- if (node->isAggregate()) {
- Aggregate *aggregate = static_cast<Aggregate *>(node);
- const NodeList &children = aggregate->childNodes();
- for (auto *node : children) {
- if (node->isPageNode() && !node->isPrivate())
- generateDocumentation(node);
- }
- }
-}
-
-/*!
- Generate a list of maintainers in the output
- */
-void Generator::generateMaintainerList(const Aggregate *node, CodeMarker *marker)
-{
- QStringList sl = getMetadataElements(node, "maintainer");
-
- if (!sl.isEmpty()) {
- Text text;
- text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD)
- << "Maintained by: " << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD);
-
- for (int i = 0; i < sl.size(); ++i)
- text << sl.at(i) << separator(i, sl.size());
-
- text << Atom::ParaRight;
- generateText(text, node, marker);
- }
-}
-
-/*!
- Output the "Inherit by" list for the QML element,
- if it is inherited by any other elements.
- */
-void Generator::generateQmlInheritedBy(const QmlTypeNode *qcn, CodeMarker *marker)
-{
- if (qcn) {
- NodeList subs;
- QmlTypeNode::subclasses(qcn, subs);
- if (!subs.isEmpty()) {
- Text text;
- text << Atom::ParaLeft << "Inherited by ";
- appendSortedQmlNames(text, qcn, subs);
- text << Atom::ParaRight;
- generateText(text, qcn, marker);
- }
- }
-}
-
-/*!
- Extract sections of markup text surrounded by \e qmltext
- and \e endqmltext and output them.
- */
-bool Generator::generateQmlText(const Text &text, const Node *relative, CodeMarker *marker,
- const QString & /* qmlName */)
-{
- const Atom *atom = text.firstAtom();
- bool result = false;
-
- if (atom != nullptr) {
- initializeTextOutput();
- while (atom) {
- if (atom->type() != Atom::QmlText)
- atom = atom->next();
- else {
- atom = atom->next();
- while (atom && (atom->type() != Atom::EndQmlText)) {
- int n = 1 + generateAtom(atom, relative, marker);
- while (n-- > 0)
- atom = atom->next();
- }
- }
- }
- result = true;
- }
- return result;
-}
-
-void Generator::generateReimplementsClause(const FunctionNode *fn, CodeMarker *marker)
-{
- if (!fn->overridesThis().isEmpty()) {
- if (fn->parent()->isClassNode()) {
- ClassNode *cn = static_cast<ClassNode *>(fn->parent());
- const FunctionNode *overrides = cn->findOverriddenFunction(fn);
- if (overrides && !overrides->isPrivate() && !overrides->parent()->isPrivate()) {
- if (overrides->hasDoc()) {
- Text text;
- text << Atom::ParaLeft << "Reimplements: ";
- QString fullName =
- overrides->parent()->name() + "::" + overrides->signature(false, true);
- appendFullName(text, overrides->parent(), fullName, overrides);
- text << "." << Atom::ParaRight;
- generateText(text, fn, marker);
- } else {
- fn->doc().location().warning(
- QStringLiteral("Illegal \\reimp; no documented virtual function for %1")
- .arg(overrides->plainSignature()));
- }
- return;
- }
- const PropertyNode *sameName = cn->findOverriddenProperty(fn);
- if (sameName && sameName->hasDoc()) {
- Text text;
- text << Atom::ParaLeft << "Reimplements an access function for property: ";
- QString fullName = sameName->parent()->name() + "::" + sameName->name();
- appendFullName(text, sameName->parent(), fullName, sameName);
- text << "." << Atom::ParaRight;
- generateText(text, fn, marker);
- }
- }
- }
-}
-
-QString Generator::formatSince(const Node *node)
-{
- QStringList since = node->since().split(QLatin1Char(' '));
-
- // If there is only one argument, assume it is the Qt version number.
- if (since.count() == 1)
- return "Qt " + since[0];
-
- // Otherwise, use the original <project> <version> string.
- return node->since();
-}
-
-void Generator::generateSince(const Node *node, CodeMarker *marker)
-{
- if (!node->since().isEmpty()) {
- Text text;
- text << Atom::ParaLeft << "This " << typeString(node) << " was introduced ";
- if (node->isEnumType())
- text << "or modified ";
- text << "in " << formatSince(node) << "." << Atom::ParaRight;
- generateText(text, node, marker);
- }
-}
-
-void Generator::generateStatus(const Node *node, CodeMarker *marker)
-{
- Text text;
-
- switch (node->status()) {
- case Node::Active:
- // Do nothing.
- break;
- case Node::Preliminary:
- text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) << "This "
- << typeString(node) << " is under development and is subject to change."
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) << Atom::ParaRight;
- break;
- case Node::Deprecated:
- text << Atom::ParaLeft;
- if (node->isAggregate())
- text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD);
- text << "This " << typeString(node) << " is deprecated.";
- if (node->isAggregate())
- text << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD);
- text << Atom::ParaRight;
- break;
- case Node::Obsolete:
- text << Atom::ParaLeft;
- if (node->isAggregate())
- text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD);
- text << "This " << typeString(node) << " is obsolete.";
- if (node->isAggregate())
- text << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD);
- text << " It is provided to keep old source code working. "
- << "We strongly advise against "
- << "using it in new code." << Atom::ParaRight;
- break;
- case Node::Internal:
- default:
- break;
- }
- generateText(text, node, marker);
-}
-
-/*!
- Generates an addendum note of type \a type for \a node, using \a marker
- as the code marker.
-*/
-void Generator::generateAddendum(const Node *node, Addendum type, CodeMarker *marker,
- bool generateNote)
-{
- Q_ASSERT(node && !node->name().isEmpty());
- Text text;
- text << Atom::ParaLeft;
-
- if (generateNote) {
- text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD)
- << "Note: " << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD);
- }
-
- switch (type) {
- case Invokable:
- text << "This function can be invoked via the meta-object system and from QML. See "
- << Atom(Atom::Link, "Q_INVOKABLE")
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << "Q_INVOKABLE"
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << ".";
- break;
- case PrivateSignal:
- text << "This is a private signal. It can be used in signal connections "
- "but cannot be emitted by the user.";
- break;
- case QmlSignalHandler:
- {
- QString handler(node->name());
- handler[0] = handler[0].toTitleCase();
- handler.prepend(QLatin1String("on"));
- text << "The corresponding handler is "
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_TELETYPE) << handler
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_TELETYPE) << ".";
- break;
- }
- case AssociatedProperties:
- {
- if (!node->isFunction())
- return;
- const FunctionNode *fn = static_cast<const FunctionNode *>(node);
- NodeList nodes = fn->associatedProperties();
- if (nodes.isEmpty())
- return;
- std::sort(nodes.begin(), nodes.end(), Node::nodeNameLessThan);
- for (const auto *n : qAsConst(nodes)) {
- QString msg;
- const PropertyNode *pn = static_cast<const PropertyNode *>(n);
- switch (pn->role(fn)) {
- case PropertyNode::Getter:
- msg = QStringLiteral("Getter function");
- break;
- case PropertyNode::Setter:
- msg = QStringLiteral("Setter function");
- break;
- case PropertyNode::Resetter:
- msg = QStringLiteral("Resetter function");
- break;
- case PropertyNode::Notifier:
- msg = QStringLiteral("Notifier signal");
- break;
- default:
- continue;
- }
- text << msg << " for property " << Atom(Atom::Link, pn->name())
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << pn->name()
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << ". ";
- }
- break;
- }
- case TypeAlias:
- {
- if (!node->isTypeAlias())
- return;
- const auto *ta = static_cast<const TypeAliasNode *>(node);
- text << "This is a type alias for ";
- if (ta->aliasedNode() && ta->aliasedNode()->isInAPI()) {
- text << Atom(Atom::LinkNode, CodeMarker::stringForNode(ta->aliasedNode()))
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << Atom(Atom::String, ta->aliasedNode()->plainFullName(ta->parent()))
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << ".";
- } else {
- text << Atom(Atom::String, ta->aliasedType()) << ".";
- }
- break;
- }
- case BindableProperty:
- {
- text << "This property supports "
- << Atom(Atom::Link, "QProperty")
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << "QProperty"
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
- text << " bindings.";
- break;
- }
- default:
- return;
- }
-
- text << Atom::ParaRight;
- generateText(text, node, marker);
-}
-
-/*!
- Generate the documentation for \a relative. i.e. \a relative
- is the node that represents the entity where a qdoc comment
- was found, and \a text represents the qdoc comment.
- */
-bool Generator::generateText(const Text &text, const Node *relative, CodeMarker *marker)
-{
- bool result = false;
- if (text.firstAtom() != nullptr) {
- int numAtoms = 0;
- initializeTextOutput();
- generateAtomList(text.firstAtom(), relative, marker, true, numAtoms);
- result = true;
- }
- return result;
-}
-
-/*
- The node is an aggregate, typically a class node, which has
- a threadsafeness level. This function checks all the children
- of the node to see if they are exceptions to the node's
- threadsafeness. If there are any exceptions, the exceptions
- are added to the appropriate set (reentrant, threadsafe, and
- nonreentrant, and true is returned. If there are no exceptions,
- the three node lists remain empty and false is returned.
- */
-bool Generator::hasExceptions(const Node *node, NodeList &reentrant, NodeList &threadsafe,
- NodeList &nonreentrant)
-{
- bool result = false;
- Node::ThreadSafeness ts = node->threadSafeness();
- const NodeList &children = static_cast<const Aggregate *>(node)->childNodes();
- for (auto child : children) {
- if (!child->isObsolete()) {
- switch (child->threadSafeness()) {
- case Node::Reentrant:
- reentrant.append(child);
- if (ts == Node::ThreadSafe)
- result = true;
- break;
- case Node::ThreadSafe:
- threadsafe.append(child);
- if (ts == Node::Reentrant)
- result = true;
- break;
- case Node::NonReentrant:
- nonreentrant.append(child);
- result = true;
- break;
- default:
- break;
- }
- }
- }
- return result;
-}
-
-static void startNote(Text &text)
-{
- text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD)
- << "Note:" << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) << " ";
-}
-
-/*!
- Generates text that explains how threadsafe and/or reentrant
- \a node is.
- */
-void Generator::generateThreadSafeness(const Node *node, CodeMarker *marker)
-{
- Text text, rlink, tlink;
- NodeList reentrant;
- NodeList threadsafe;
- NodeList nonreentrant;
- Node::ThreadSafeness ts = node->threadSafeness();
- bool exceptions = false;
-
- rlink << Atom(Atom::Link, "reentrant") << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << "reentrant" << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
-
- tlink << Atom(Atom::Link, "thread-safe") << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << "thread-safe" << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
-
- switch (ts) {
- case Node::UnspecifiedSafeness:
- break;
- case Node::NonReentrant:
- text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD)
- << "Warning:" << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) << " This "
- << typeString(node) << " is not " << rlink << "." << Atom::ParaRight;
- break;
- case Node::Reentrant:
- case Node::ThreadSafe:
- startNote(text);
- if (node->isAggregate()) {
- exceptions = hasExceptions(node, reentrant, threadsafe, nonreentrant);
- text << "All functions in this " << typeString(node) << " are ";
- if (ts == Node::ThreadSafe)
- text << tlink;
- else
- text << rlink;
-
- if (!exceptions || (ts == Node::Reentrant && !threadsafe.isEmpty()))
- text << ".";
- else
- text << " with the following exceptions:";
- } else {
- text << "This " << typeString(node) << " is ";
- if (ts == Node::ThreadSafe)
- text << tlink;
- else
- text << rlink;
- text << ".";
- }
- text << Atom::ParaRight;
- break;
- default:
- break;
- }
- generateText(text, node, marker);
-
- if (exceptions) {
- text.clear();
- if (ts == Node::Reentrant) {
- if (!nonreentrant.isEmpty()) {
- startNote(text);
- text << "These functions are not " << rlink << ":" << Atom::ParaRight;
- signatureList(nonreentrant, node, marker);
- }
- if (!threadsafe.isEmpty()) {
- text.clear();
- startNote(text);
- text << "These functions are also " << tlink << ":" << Atom::ParaRight;
- generateText(text, node, marker);
- signatureList(threadsafe, node, marker);
- }
- } else { // thread-safe
- if (!reentrant.isEmpty()) {
- startNote(text);
- text << "These functions are only " << rlink << ":" << Atom::ParaRight;
- signatureList(reentrant, node, marker);
- }
- if (!nonreentrant.isEmpty()) {
- text.clear();
- startNote(text);
- text << "These functions are not " << rlink << ":" << Atom::ParaRight;
- signatureList(nonreentrant, node, marker);
- }
- }
- }
-}
-
-/*!
- Returns the string containing an example code of the input node,
- if it is an overloaded signal. Otherwise, returns an empty string.
- */
-QString Generator::getOverloadedSignalCode(const Node *node)
-{
- if (!node->isFunction())
- return QString();
- const auto func = static_cast<const FunctionNode *>(node);
- if (!func->isSignal() || !func->hasOverloads())
- return QString();
-
- // Compute a friendly name for the object of that instance.
- // e.g: "QAbstractSocket" -> "abstractSocket"
- QString objectName = node->parent()->name();
- if (objectName.size() >= 2) {
- if (objectName[0] == 'Q')
- objectName = objectName.mid(1);
- objectName[0] = objectName[0].toLower();
- }
-
- // We have an overloaded signal, show an example. Note, for const
- // overloaded signals, one should use Q{Const,NonConst}Overload, but
- // it is very unlikely that we will ever have public API overloading
- // signals by const.
- QString code = "connect(" + objectName + ", QOverload<";
- code += func->parameters().generateTypeList();
- code += ">::of(&" + func->parent()->name() + "::" + func->name() + "),\n [=](";
- code += func->parameters().generateTypeAndNameList();
- code += "){ /* ... */ });";
-
- return code;
-}
-
-/*!
- If the node is an overloaded signal, add a node with an example on how to connect to it
- */
-void Generator::generateOverloadedSignal(const Node *node, CodeMarker *marker)
-{
- QString code = getOverloadedSignalCode(node);
- if (code.isEmpty())
- return;
-
- Text text;
- text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD)
- << "Note:" << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) << " Signal "
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_ITALIC) << node->name()
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_ITALIC)
- << " is overloaded in this class. "
- "To connect to this signal by using the function pointer syntax, Qt "
- "provides a convenient helper for obtaining the function pointer as "
- "shown in this example:"
- << Atom(Atom::Code, marker->markedUpCode(code, node, node->location()));
-
- generateText(text, node, marker);
-}
-
-/*!
- Traverses the database recursively to generate all the documentation.
- */
-void Generator::generateDocs()
-{
- currentGenerator_ = this;
- generateDocumentation(m_qdb->primaryTreeRoot());
-}
-
-Generator *Generator::generatorForFormat(const QString &format)
-{
- for (const auto &generator : qAsConst(generators)) {
- if (generator->format() == format)
- return generator;
- }
- return nullptr;
-}
-
-/*!
- Looks up the tag \a t in the map of metadata values for the
- current topic in \a inner. If values for the tag are found,
- they are returned in a string list.
-
- \note If \a t is found in the metadata map, all the pairs
- having the key \a t are erased. i.e. Once you call this
- function for a particular \a t, you consume \a t.
- */
-QStringList Generator::getMetadataElements(const Aggregate *inner, const QString &t)
-{
- QStringList result;
- QStringMultiMap *metaTagMap = inner->doc().metaTagMap();
- if (metaTagMap)
- result = metaTagMap->values(t);
- if (!result.isEmpty())
- metaTagMap->remove(t);
- return result;
-}
-
-/*!
- Returns a relative path name for an image.
- */
-QString Generator::imageFileName(const Node *relative, const QString &fileBase)
-{
- QString userFriendlyFilePath;
- QString filePath = Config::findFile(relative->doc().location(), imageFiles, imageDirs, fileBase,
- imgFileExts[format()], &userFriendlyFilePath);
-
- if (filePath.isEmpty())
- return QString();
-
- QString path = Config::copyFile(relative->doc().location(), filePath, userFriendlyFilePath,
- outputDir() + QLatin1String("/images"));
- int images_slash = path.lastIndexOf("images/");
- QString relImagePath;
- if (images_slash != -1)
- relImagePath = path.mid(images_slash);
- return relImagePath;
-}
-
-QString Generator::indent(int level, const QString &markedCode)
-{
- if (level == 0)
- return markedCode;
-
- QString t;
- int column = 0;
-
- int i = 0;
- while (i < markedCode.length()) {
- if (markedCode.at(i) == QLatin1Char('\n')) {
- column = 0;
- } else {
- if (column == 0) {
- for (int j = 0; j < level; j++)
- t += QLatin1Char(' ');
- }
- column++;
- }
- t += markedCode.at(i++);
- }
- return t;
-}
-
-void Generator::initialize()
-{
- Config &config = Config::instance();
- outputFormats = config.getOutputFormats();
- redirectDocumentationToDevNull_ = config.getBool(CONFIG_REDIRECTDOCUMENTATIONTODEVNULL);
-
- imageFiles = config.getCanonicalPathList(CONFIG_IMAGES);
- imageDirs = config.getCanonicalPathList(CONFIG_IMAGEDIRS);
- exampleDirs = config.getCanonicalPathList(CONFIG_EXAMPLEDIRS);
- exampleImgExts = config.getStringList(CONFIG_EXAMPLES + Config::dot + CONFIG_IMAGEEXTENSIONS);
-
- QString imagesDotFileExtensions = CONFIG_IMAGES + Config::dot + CONFIG_FILEEXTENSIONS;
- for (const auto &ext : config.subVars(imagesDotFileExtensions))
- imgFileExts[ext] = config.getStringList(imagesDotFileExtensions + Config::dot + ext);
-
- for (auto &g : generators) {
- if (outputFormats.contains(g->format())) {
- currentGenerator_ = g;
- g->initializeGenerator();
- }
- }
-
- for (const auto &n : config.subVars(CONFIG_FORMATTING)) {
- QString formattingDotName = CONFIG_FORMATTING + Config::dot + n;
- for (const auto &f : config.subVars(formattingDotName)) {
- QString def = config.getString(formattingDotName + Config::dot + f);
- if (!def.isEmpty()) {
- int numParams = Config::numParams(def);
- int numOccs = def.count("\1");
- if (numParams != 1) {
- config.lastLocation().warning(QStringLiteral("Formatting '%1' must "
- "have exactly one "
- "parameter (found %2)")
- .arg(n)
- .arg(numParams));
- } else if (numOccs > 1) {
- config.lastLocation().fatal(QStringLiteral("Formatting '%1' must "
- "contain exactly one "
- "occurrence of '\\1' "
- "(found %2)")
- .arg(n)
- .arg(numOccs));
- } else {
- int paramPos = def.indexOf("\1");
- fmtLeftMaps[f].insert(n, def.left(paramPos));
- fmtRightMaps[f].insert(n, def.mid(paramPos + 1));
- }
- }
- }
- }
-
- project_ = config.getString(CONFIG_PROJECT);
- outDir_ = config.getOutputDir();
- outSubdir_ = outDir_.mid(outDir_.lastIndexOf('/') + 1);
-
- outputPrefixes.clear();
- QStringList items = config.getStringList(CONFIG_OUTPUTPREFIXES);
- if (!items.isEmpty()) {
- for (const auto &prefix : items)
- outputPrefixes[prefix] = config.getString(CONFIG_OUTPUTPREFIXES + Config::dot + prefix);
- } else {
- outputPrefixes[QLatin1String("QML")] = QLatin1String("qml-");
- outputPrefixes[QLatin1String("JS")] = QLatin1String("js-");
- }
-
- outputSuffixes.clear();
- for (const auto &suffix : config.getStringList(CONFIG_OUTPUTSUFFIXES))
- outputSuffixes[suffix] = config.getString(CONFIG_OUTPUTSUFFIXES + Config::dot + suffix);
-
- noLinkErrors_ = config.getBool(CONFIG_NOLINKERRORS);
- autolinkErrors_ = config.getBool(CONFIG_AUTOLINKERRORS);
-}
-
-/*!
- Creates template-specific subdirs (e.g. /styles and /scripts for HTML)
- and copies the files to them.
- */
-void Generator::copyTemplateFiles(const QString &configVar, const QString &subDir)
-{
- Config &config = Config::instance();
- QStringList files = config.getCanonicalPathList(configVar, true);
- if (!files.isEmpty()) {
- QDir dirInfo;
- QString templateDir = outDir_ + QLatin1Char('/') + subDir;
- if (!dirInfo.exists(templateDir) && !dirInfo.mkdir(templateDir)) {
- config.lastLocation().fatal(
- QStringLiteral("Cannot create %1 directory '%2'").arg(subDir, templateDir));
- } else {
- for (const auto &file : files) {
- if (!file.isEmpty())
- Config::copyFile(config.lastLocation(), file, file, templateDir);
- }
- }
- }
-}
-
-/*!
- Reads format-specific variables from config, sets output
- (sub)directories, creates them on the filesystem and copies the
- template-specific files.
- */
-void Generator::initializeFormat()
-{
- Config &config = Config::instance();
- outFileNames_.clear();
- useOutputSubdirs_ = true;
- if (config.getBool(format() + Config::dot + "nosubdirs"))
- resetUseOutputSubdirs();
-
- if (outputFormats.isEmpty())
- return;
-
- outDir_ = config.getOutputDir(format());
- if (outDir_.isEmpty()) {
- config.lastLocation().fatal(QStringLiteral("No output directory specified in "
- "configuration file or on the command line"));
- } else {
- outSubdir_ = outDir_.mid(outDir_.lastIndexOf('/') + 1);
- }
-
- QDir dirInfo;
- if (dirInfo.exists(outDir_)) {
- if (!config.generating() && Generator::useOutputSubdirs()) {
- if (!Config::removeDirContents(outDir_))
- config.lastLocation().error(
- QStringLiteral("Cannot empty output directory '%1'").arg(outDir_));
- }
- } else if (!dirInfo.mkpath(outDir_)) {
- config.lastLocation().fatal(
- QStringLiteral("Cannot create output directory '%1'").arg(outDir_));
- }
-
- // Output directory exists, which is enough for prepare phase.
- if (config.preparing())
- return;
-
- if (!dirInfo.exists(outDir_ + "/images") && !dirInfo.mkdir(outDir_ + "/images"))
- config.lastLocation().fatal(
- QStringLiteral("Cannot create images directory '%1'").arg(outDir_ + "/images"));
-
- copyTemplateFiles(format() + Config::dot + CONFIG_STYLESHEETS, "style");
- copyTemplateFiles(format() + Config::dot + CONFIG_SCRIPTS, "scripts");
- copyTemplateFiles(format() + Config::dot + CONFIG_EXTRAIMAGES, "images");
-
- // Use a format-specific .quotinginformation if defined, otherwise a global value
- if (config.subVars(format()).contains(CONFIG_QUOTINGINFORMATION))
- m_quoting = config.getBool(format() + Config::dot + CONFIG_QUOTINGINFORMATION);
- else
- m_quoting = config.getBool(CONFIG_QUOTINGINFORMATION);
-}
-
-/*!
- Appends each directory path in \a moreImageDirs to the
- list of image directories.
- */
-void Generator::augmentImageDirs(QSet<QString> &moreImageDirs)
-{
- if (moreImageDirs.isEmpty())
- return;
- for (const auto &it : moreImageDirs)
- imageDirs.append(it);
-}
-
-/*!
- Updates the generator's m_showInternal from the Config.
- */
-void Generator::initializeGenerator()
-{
- m_showInternal = Config::instance().showInternal();
-}
-
-bool Generator::matchAhead(const Atom *atom, Atom::AtomType expectedAtomType)
-{
- return atom->next() && atom->next()->type() == expectedAtomType;
-}
-
-/*!
- Used for writing to the current output stream. Returns a
- reference to the current output stream, which is then used
- with the \c {<<} operator for writing.
- */
-QTextStream &Generator::out()
-{
- return *outStreamStack.top();
-}
-
-QString Generator::outFileName()
-{
- return QFileInfo(static_cast<QFile *>(out().device())->fileName()).fileName();
-}
-
-QString Generator::outputPrefix(const Node *node)
-{
- // Prefix is applied to QML and JS types
- if (node->isQmlType() || node->isQmlBasicType())
- return outputPrefixes[QLatin1String("QML")];
- if (node->isJsType() || node->isJsBasicType())
- return outputPrefixes[QLatin1String("JS")];
- return QString();
-}
-
-QString Generator::outputSuffix(const Node *node)
-{
- // Suffix is applied to QML and JS types, as
- // well as module pages.
- if (node->isQmlModule() || node->isQmlType() || node->isQmlBasicType())
- return outputSuffixes[QLatin1String("QML")];
- if (node->isJsModule() || node->isJsType() || node->isJsBasicType())
- return outputSuffixes[QLatin1String("JS")];
- return QString();
-}
-
-bool Generator::parseArg(const QString &src, const QString &tag, int *pos, int n,
- QStringView *contents, QStringView *par1, bool debug)
-{
-#define SKIP_CHAR(c) \
- if (debug) \
- qDebug() << "looking for " << c << " at " << QString(src.data() + i, n - i); \
- if (i >= n || src[i] != c) { \
- if (debug) \
- qDebug() << " char '" << c << "' not found"; \
- return false; \
- } \
- ++i;
-
-#define SKIP_SPACE \
- while (i < n && src[i] == ' ') \
- ++i;
-
- int i = *pos;
- int j = i;
-
- // assume "<@" has been parsed outside
- // SKIP_CHAR('<');
- // SKIP_CHAR('@');
-
- if (tag != QStringView(src).mid(i, tag.length())) {
- return false;
- }
-
- if (debug)
- qDebug() << "haystack:" << src << "needle:" << tag << "i:" << i;
-
- // skip tag
- i += tag.length();
-
- // parse stuff like: linkTag("(<@link node=\"([^\"]+)\">).*(</@link>)");
- if (par1) {
- SKIP_SPACE;
- // read parameter name
- j = i;
- while (i < n && src[i].isLetter())
- ++i;
- if (src[i] == '=') {
- if (debug)
- qDebug() << "read parameter" << QString(src.data() + j, i - j);
- SKIP_CHAR('=');
- SKIP_CHAR('"');
- // skip parameter name
- j = i;
- while (i < n && src[i] != '"')
- ++i;
- *par1 = QStringView(src).mid(j, i - j);
- SKIP_CHAR('"');
- SKIP_SPACE;
- } else {
- if (debug)
- qDebug() << "no optional parameter found";
- }
- }
- SKIP_SPACE;
- SKIP_CHAR('>');
-
- // find contents up to closing "</@tag>
- j = i;
- for (; true; ++i) {
- if (i + 4 + tag.length() > n)
- return false;
- if (src[i] != '<')
- continue;
- if (src[i + 1] != '/')
- continue;
- if (src[i + 2] != '@')
- continue;
- if (tag != QStringView(src).mid(i + 3, tag.length()))
- continue;
- if (src[i + 3 + tag.length()] != '>')
- continue;
- break;
- }
-
- *contents = QStringView(src).mid(j, i - j);
-
- i += tag.length() + 4;
-
- *pos = i;
- if (debug)
- qDebug() << " tag " << tag << " found: pos now: " << i;
- return true;
-#undef SKIP_CHAR
-}
-
-QString Generator::plainCode(const QString &markedCode)
-{
- QString t = markedCode;
- t.replace(tag, QString());
- t.replace(quot, QLatin1String("\""));
- t.replace(gt, QLatin1String(">"));
- t.replace(lt, QLatin1String("<"));
- t.replace(amp, QLatin1String("&"));
- return t;
-}
-
-void Generator::setImageFileExtensions(const QStringList &extensions)
-{
- imgFileExts[format()] = extensions;
-}
-
-void Generator::singularPlural(Text &text, const NodeList &nodes)
-{
- if (nodes.count() == 1)
- text << " is";
- else
- text << " are";
-}
-
-int Generator::skipAtoms(const Atom *atom, Atom::AtomType type) const
-{
- int skipAhead = 0;
- atom = atom->next();
- while (atom && atom->type() != type) {
- skipAhead++;
- atom = atom->next();
- }
- return skipAhead;
-}
-
-/*!
- Resets the variables used during text output.
- */
-void Generator::initializeTextOutput()
-{
- m_inLink = false;
- m_inContents = false;
- m_inSectionHeading = false;
- m_inTableHeader = false;
- m_numTableRows = 0;
- m_threeColumnEnumValueTable = true;
- m_link.clear();
- m_sectionNumber.clear();
-}
-
-void Generator::supplementAlsoList(const Node *node, QList<Text> &alsoList)
-{
- if (node->isFunction() && !node->isMacro()) {
- const auto fn = static_cast<const FunctionNode *>(node);
- if (fn->overloadNumber() == 0) {
- QString alternateName;
- const FunctionNode *alternateFunc = nullptr;
-
- if (fn->name().startsWith("set") && fn->name().size() >= 4) {
- alternateName = fn->name()[3].toLower();
- alternateName += fn->name().mid(4);
- alternateFunc = fn->parent()->findFunctionChild(alternateName, QString());
-
- if (!alternateFunc) {
- alternateName = "is" + fn->name().mid(3);
- alternateFunc = fn->parent()->findFunctionChild(alternateName, QString());
- if (!alternateFunc) {
- alternateName = "has" + fn->name().mid(3);
- alternateFunc = fn->parent()->findFunctionChild(alternateName, QString());
- }
- }
- } else if (!fn->name().isEmpty()) {
- alternateName = "set";
- alternateName += fn->name()[0].toUpper();
- alternateName += fn->name().mid(1);
- alternateFunc = fn->parent()->findFunctionChild(alternateName, QString());
- }
-
- if (alternateFunc && alternateFunc->access() != Access::Private) {
- int i;
- for (i = 0; i < alsoList.size(); ++i) {
- if (alsoList.at(i).toString().contains(alternateName))
- break;
- }
-
- if (i == alsoList.size()) {
- alternateName += "()";
-
- Text also;
- also << Atom(Atom::Link, alternateName)
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << alternateName
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
- alsoList.prepend(also);
- }
- }
- }
- }
-}
-
-void Generator::terminate()
-{
- for (const auto &generator : qAsConst(generators)) {
- if (outputFormats.contains(generator->format()))
- generator->terminateGenerator();
- }
-
- fmtLeftMaps.clear();
- fmtRightMaps.clear();
- imgFileExts.clear();
- imageFiles.clear();
- imageDirs.clear();
- outDir_.clear();
-}
-
-void Generator::terminateGenerator() {}
-
-/*!
- Trims trailing whitespace off the \a string and returns
- the trimmed string.
- */
-QString Generator::trimmedTrailing(const QString &string, const QString &prefix,
- const QString &suffix)
-{
- QString trimmed = string;
- while (trimmed.length() > 0 && trimmed[trimmed.length() - 1].isSpace())
- trimmed.truncate(trimmed.length() - 1);
-
- trimmed.append(suffix);
- trimmed.prepend(prefix);
- return trimmed;
-}
-
-QString Generator::typeString(const Node *node)
-{
- switch (node->nodeType()) {
- case Node::Namespace:
- return "namespace";
- case Node::Class:
- return "class";
- case Node::Struct:
- return "struct";
- case Node::Union:
- return "union";
- case Node::QmlType:
- case Node::QmlBasicType:
- case Node::JsBasicType:
- return "type";
- case Node::Page:
- return "documentation";
- case Node::Enum:
- return "enum";
- case Node::Typedef:
- return "typedef";
- case Node::TypeAlias:
- return "alias";
- case Node::Function: {
- const auto fn = static_cast<const FunctionNode *>(node);
- switch (fn->metaness()) {
- case FunctionNode::JsSignal:
- case FunctionNode::QmlSignal:
- return "signal";
- case FunctionNode::JsSignalHandler:
- case FunctionNode::QmlSignalHandler:
- return "signal handler";
- case FunctionNode::JsMethod:
- case FunctionNode::QmlMethod:
- return "method";
- default:
- break;
- }
- return "function";
- }
- case Node::Property:
- case Node::QmlProperty:
- return "property";
- case Node::Module:
- case Node::JsModule:
- case Node::QmlModule:
- return "module";
- case Node::SharedComment: {
- const auto &collective = static_cast<const SharedCommentNode *>(node)->collective();
- return collective.first()->nodeTypeString();
- }
- default:
- return "documentation";
- }
-}
-
-void Generator::unknownAtom(const Atom *atom)
-{
- Location::internalError(QStringLiteral("unknown atom type '%1' in %2 generator")
- .arg(atom->typeString())
- .arg(format()));
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/generator.h b/src/qdoc/generator.h
deleted file mode 100644
index 746ba424a..000000000
--- a/src/qdoc/generator.h
+++ /dev/null
@@ -1,229 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef GENERATOR_H
-#define GENERATOR_H
-
-#include "text.h"
-
-#include <QtCore/qlist.h>
-#include <QtCore/qmap.h>
-#include <QtCore/qstring.h>
-#include <QtCore/qstringlist.h>
-#include <QtCore/qtextstream.h>
-
-QT_BEGIN_NAMESPACE
-
-typedef QMultiMap<QString, Node *> NodeMultiMap;
-typedef QMap<Node *, NodeMultiMap> ParentMaps;
-
-class Aggregate;
-class CodeMarker;
-class ExampleNode;
-class FunctionNode;
-class Location;
-class Node;
-class QDocDatabase;
-class QmlBasicTypeNode;
-
-class Generator
-{
-public:
- enum ListType { Generic, Obsolete };
-
- enum Addendum {
- Invokable,
- PrivateSignal,
- QmlSignalHandler,
- AssociatedProperties,
- TypeAlias,
- BindableProperty
- };
-
- Generator();
- virtual ~Generator();
-
- virtual bool canHandleFormat(const QString &format) { return format == this->format(); }
- virtual QString format() = 0;
- virtual void generateDocs();
- virtual void initializeGenerator();
- virtual void initializeFormat();
- virtual void terminateGenerator();
- virtual QString typeString(const Node *node);
-
- QString fullDocumentLocation(const Node *node, bool useSubdir = false);
- QString linkForExampleFile(const QString &path, const Node *parent,
- const QString &fileExt = QString());
- static QString exampleFileTitle(const ExampleNode *relative, const QString &fileName);
- static Generator *currentGenerator() { return currentGenerator_; }
- static Generator *generatorForFormat(const QString &format);
- static void initialize();
- static const QString &outputDir() { return outDir_; }
- static const QString &outputSubdir() { return outSubdir_; }
- static void terminate();
- static const QStringList &outputFileNames() { return outFileNames_; }
- static void augmentImageDirs(QSet<QString> &moreImageDirs);
- static bool noLinkErrors() { return noLinkErrors_; }
- static bool autolinkErrors() { return autolinkErrors_; }
- static QString defaultModuleName() { return project_; }
- static void resetUseOutputSubdirs() { useOutputSubdirs_ = false; }
- static bool useOutputSubdirs() { return useOutputSubdirs_; }
- static void setQmlTypeContext(QmlTypeNode *t) { qmlTypeContext_ = t; }
- static QmlTypeNode *qmlTypeContext() { return qmlTypeContext_; }
- static QString cleanRef(const QString &ref);
- static QString plainCode(const QString &markedCode);
- static QString fileBase(const Node *node);
-
-protected:
- static QFile *openSubPageFile(const Node *node, const QString &fileName);
- void beginFilePage(const Node *node, const QString &fileName);
- void endFilePage() { endSubPage(); } // for symmetry
- void beginSubPage(const Node *node, const QString &fileName);
- void endSubPage();
- virtual QString fileExtension() const = 0;
- virtual void generateExampleFilePage(const Node *, const QString &, CodeMarker *) {}
- virtual void generateAlsoList(const Node *node, CodeMarker *marker);
- virtual int generateAtom(const Atom *, const Node *, CodeMarker *) { return 0; }
- virtual void generateBody(const Node *node, CodeMarker *marker);
- virtual void generateCppReferencePage(Aggregate *, CodeMarker *) {}
- virtual void generateProxyPage(Aggregate *, CodeMarker *) {}
- virtual void generateQmlTypePage(QmlTypeNode *, CodeMarker *) {}
- virtual void generateQmlBasicTypePage(QmlBasicTypeNode *, CodeMarker *) {}
- virtual void generatePageNode(PageNode *, CodeMarker *) {}
- virtual void generateCollectionNode(CollectionNode *, CodeMarker *) {}
- virtual void generateGenericCollectionPage(CollectionNode *, CodeMarker *) {}
- virtual void generateInherits(const ClassNode *classe, CodeMarker *marker);
- virtual void generateDocumentation(Node *node);
- virtual void generateMaintainerList(const Aggregate *node, CodeMarker *marker);
- virtual void generateQmlInheritedBy(const QmlTypeNode *qcn, CodeMarker *marker);
- virtual void generateQmlInherits(QmlTypeNode *, CodeMarker *) {}
- virtual bool generateQmlText(const Text &text, const Node *relative, CodeMarker *marker,
- const QString &qmlName);
- virtual bool generateText(const Text &text, const Node *relative, CodeMarker *marker);
- virtual QString imageFileName(const Node *relative, const QString &fileBase);
- virtual int skipAtoms(const Atom *atom, Atom::AtomType type) const;
-
- static bool matchAhead(const Atom *atom, Atom::AtomType expectedAtomType);
- static QString outputPrefix(const Node *node);
- static QString outputSuffix(const Node *node);
- static void singularPlural(Text &text, const NodeList &nodes);
- static void supplementAlsoList(const Node *node, QList<Text> &alsoList);
- static QString trimmedTrailing(const QString &string, const QString &prefix,
- const QString &suffix);
- void initializeTextOutput();
- QString fileName(const Node *node, const QString &extension = QString()) const;
- QMap<QString, QString> &formattingLeftMap();
- QMap<QString, QString> &formattingRightMap();
- const Atom *generateAtomList(const Atom *atom, const Node *relative, CodeMarker *marker,
- bool generate, int &numGeneratedAtoms);
- void generateRequiredLinks(const Node *node, CodeMarker *marker);
- void generateLinkToExample(const ExampleNode *en, CodeMarker *marker,
- const QString &exampleUrl);
- virtual void generateFileList(const ExampleNode *en, CodeMarker *marker, bool images);
- static QString formatSince(const Node *node);
- void generateSince(const Node *node, CodeMarker *marker);
- void generateStatus(const Node *node, CodeMarker *marker);
- virtual void generateAddendum(const Node *node, Addendum type, CodeMarker *marker,
- bool generateNote = true);
- void generateThreadSafeness(const Node *node, CodeMarker *marker);
- QStringList getMetadataElements(const Aggregate *inner, const QString &t);
- void generateOverloadedSignal(const Node *node, CodeMarker *marker);
- static QString getOverloadedSignalCode(const Node *node);
- QString indent(int level, const QString &markedCode);
- QTextStream &out();
- QString outFileName();
- bool parseArg(const QString &src, const QString &tag, int *pos, int n, QStringView *contents,
- QStringView *par1 = nullptr, bool debug = false);
- void setImageFileExtensions(const QStringList &extensions);
- void unknownAtom(const Atom *atom);
- int appendSortedQmlNames(Text &text, const Node *base, const NodeList &subs);
-
- static bool hasExceptions(const Node *node, NodeList &reentrant, NodeList &threadsafe,
- NodeList &nonreentrant);
-
- QString naturalLanguage;
- QString tagFile_;
- QStack<QTextStream *> outStreamStack;
-
- void appendFullName(Text &text, const Node *apparentNode, const Node *relative,
- const Node *actualNode = nullptr);
- void appendFullName(Text &text, const Node *apparentNode, const QString &fullName,
- const Node *actualNode);
- void appendFullNames(Text &text, const NodeList &nodes, const Node *relative);
- int appendSortedNames(Text &text, const ClassNode *classe,
- const QList<RelatedClass> &classes);
- void appendSignature(Text &text, const Node *node);
- void signatureList(const NodeList &nodes, const Node *relative, CodeMarker *marker);
-
- void addImageToCopy(const ExampleNode *en, const QString &file);
- static bool compareNodes(const Node *a, const Node *b) { return (a->name() < b->name()); }
- static bool comparePaths(const QString &a, const QString &b) { return (a < b); }
-
-private:
- static Generator *currentGenerator_;
- static QStringList exampleDirs;
- static QStringList exampleImgExts;
- static QMap<QString, QMap<QString, QString>> fmtLeftMaps;
- static QMap<QString, QMap<QString, QString>> fmtRightMaps;
- static QList<Generator *> generators;
- static QStringList imageDirs;
- static QStringList imageFiles;
- static QMap<QString, QStringList> imgFileExts;
- static QString project_;
- static QString outDir_;
- static QString outSubdir_;
- static QStringList outFileNames_;
- static QSet<QString> outputFormats;
- static QHash<QString, QString> outputPrefixes;
- static QHash<QString, QString> outputSuffixes;
- static bool noLinkErrors_;
- static bool autolinkErrors_;
- static bool redirectDocumentationToDevNull_;
- static bool useOutputSubdirs_;
- static QmlTypeNode *qmlTypeContext_;
-
- void generateReimplementsClause(const FunctionNode *fn, CodeMarker *marker);
- static void copyTemplateFiles(const QString &configVar, const QString &subDir);
-
-protected:
- QDocDatabase *m_qdb { nullptr };
- bool m_inLink { false };
- bool m_inContents { false };
- bool m_inSectionHeading { false };
- bool m_inTableHeader { false };
- bool m_threeColumnEnumValueTable { true };
- bool m_showInternal { false };
- bool m_quoting { false };
- int m_numTableRows { 0 };
- QString m_link {};
- QString m_sectionNumber {};
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/headernode.cpp b/src/qdoc/headernode.cpp
deleted file mode 100644
index 230b562a6..000000000
--- a/src/qdoc/headernode.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "headernode.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class Headernode
- \brief This class represents a C++ header file.
- */
-
-HeaderNode::HeaderNode(Aggregate *parent, const QString &name) : Aggregate(HeaderFile, parent, name)
-{
- // Add the include file with enclosing angle brackets removed
- if (name.startsWith(QChar('<')) && name.length() > 2)
- Aggregate::addIncludeFile(name.mid(1).chopped(1));
- else
- Aggregate::addIncludeFile(name);
-}
-
-/*!
- Returns true if this header file node is not private and
- contains at least one public child node with documentation.
- */
-bool HeaderNode::docMustBeGenerated() const
-{
- if (isInAPI())
- return true;
- return (hasDocumentedChildren() ? true : false);
-}
-
-/*!
- Returns true if this header file node contains at least one
- child that has documentation and is not private or internal.
- */
-bool HeaderNode::hasDocumentedChildren() const
-{
- for (const auto *node : qAsConst(m_children)) {
- if (node->isInAPI())
- return true;
- }
- return false;
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/headernode.h b/src/qdoc/headernode.h
deleted file mode 100644
index e50e23c55..000000000
--- a/src/qdoc/headernode.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef HEADERNODE_H
-#define HEADERNODE_H
-
-#include "aggregate.h"
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-class HeaderNode : public Aggregate
-{
-public:
- HeaderNode(Aggregate *parent, const QString &name);
- bool docMustBeGenerated() const override;
- bool isFirstClassAggregate() const override { return true; }
- bool isRelatableType() const override { return true; }
- QString title() const override { return (m_title.isEmpty() ? name() : m_title); }
- QString subtitle() const override { return m_subtitle; }
- QString fullTitle() const override
- {
- return (m_title.isEmpty() ? name() : name() + " - " + m_title);
- }
- bool setTitle(const QString &title) override
- {
- m_title = title;
- return true;
- }
- bool setSubtitle(const QString &subtitle) override
- {
- m_subtitle = subtitle;
- return true;
- }
- QString nameForLists() const override { return title(); }
- bool hasDocumentedChildren() const;
-
-private:
- QString m_title;
- QString m_subtitle;
-};
-
-QT_END_NAMESPACE
-
-#endif // HEADERNODE_H
diff --git a/src/qdoc/helpprojectwriter.cpp b/src/qdoc/helpprojectwriter.cpp
deleted file mode 100644
index 95b87d76f..000000000
--- a/src/qdoc/helpprojectwriter.cpp
+++ /dev/null
@@ -1,833 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "helpprojectwriter.h"
-
-#include "access.h"
-#include "aggregate.h"
-#include "atom.h"
-#include "classnode.h"
-#include "collectionnode.h"
-#include "config.h"
-#include "enumnode.h"
-#include "functionnode.h"
-#include "htmlgenerator.h"
-#include "node.h"
-#include "qdocdatabase.h"
-#include "typedefnode.h"
-
-#include <QtCore/qcryptographichash.h>
-#include <QtCore/qdebug.h>
-#include <QtCore/qhash.h>
-#include <QtCore/qmap.h>
-
-QT_BEGIN_NAMESPACE
-
-HelpProjectWriter::HelpProjectWriter(const QString &defaultFileName, Generator *g)
-{
- reset(defaultFileName, g);
-}
-
-void HelpProjectWriter::reset(const QString &defaultFileName, Generator *g)
-{
- projects.clear();
- gen_ = g;
- /*
- Get the pointer to the singleton for the qdoc database and
- store it locally. This replaces all the local accesses to
- the node tree, which are now private.
- */
- qdb_ = QDocDatabase::qdocDB();
-
- // The output directory should already have been checked by the calling
- // generator.
- Config &config = Config::instance();
- outputDir = config.getOutputDir();
-
- const QStringList names = config.getStringList(CONFIG_QHP + Config::dot + "projects");
-
- for (const auto &projectName : names) {
- HelpProject project;
- project.name = projectName;
-
- QString prefix = CONFIG_QHP + Config::dot + projectName + Config::dot;
- project.helpNamespace = config.getString(prefix + "namespace");
- project.virtualFolder = config.getString(prefix + "virtualFolder");
- project.version = config.getString(CONFIG_VERSION);
- project.fileName = config.getString(prefix + "file");
- if (project.fileName.isEmpty())
- project.fileName = defaultFileName;
- project.extraFiles = config.getStringSet(prefix + "extraFiles");
- project.extraFiles += config.getStringSet(CONFIG_QHP + Config::dot + "extraFiles");
- project.indexTitle = config.getString(prefix + "indexTitle");
- project.indexRoot = config.getString(prefix + "indexRoot");
- const auto &filterAttributes = config.getStringList(prefix + "filterAttributes");
- project.filterAttributes =
- QSet<QString>(filterAttributes.cbegin(), filterAttributes.cend());
- project.includeIndexNodes = config.getBool(prefix + "includeIndexNodes");
- const QSet<QString> customFilterNames = config.subVars(prefix + "customFilters");
- for (const auto &filterName : customFilterNames) {
- QString name = config.getString(prefix + "customFilters" + Config::dot + filterName
- + Config::dot + "name");
- const auto &filters =
- config.getStringList(prefix + "customFilters" + Config::dot + filterName
- + Config::dot + "filterAttributes");
- project.customFilters[name] = QSet<QString>(filters.cbegin(), filters.cend());
- }
-
- const auto excludedPrefixes = config.getStringSet(prefix + "excluded");
- for (auto name : excludedPrefixes)
- project.excluded.insert(name.replace(QLatin1Char('\\'), QLatin1Char('/')));
-
- const auto subprojectPrefixes = config.getStringList(prefix + "subprojects");
- for (const auto &name : subprojectPrefixes) {
- SubProject subproject;
- QString subprefix = prefix + "subprojects" + Config::dot + name + Config::dot;
- subproject.title = config.getString(subprefix + "title");
- if (subproject.title.isEmpty())
- continue;
- subproject.indexTitle = config.getString(subprefix + "indexTitle");
- subproject.sortPages = config.getBool(subprefix + "sortPages");
- subproject.type = config.getString(subprefix + "type");
- readSelectors(subproject, config.getStringList(subprefix + "selectors"));
- project.subprojects.append(subproject);
- }
-
- if (project.subprojects.isEmpty()) {
- SubProject subproject;
- readSelectors(subproject, config.getStringList(prefix + "selectors"));
- project.subprojects.insert(0, subproject);
- }
-
- projects.append(project);
- }
-}
-
-void HelpProjectWriter::readSelectors(SubProject &subproject, const QStringList &selectors)
-{
- QHash<QString, Node::NodeType> typeHash;
- typeHash["namespace"] = Node::Namespace;
- typeHash["class"] = Node::Class;
- typeHash["struct"] = Node::Struct;
- typeHash["union"] = Node::Union;
- typeHash["header"] = Node::HeaderFile;
- typeHash["headerfile"] = Node::HeaderFile;
- typeHash["doc"] = Node::Page; // Unused (supported but ignored as a prefix)
- typeHash["fake"] = Node::Page; // Unused (supported but ignored as a prefix)
- typeHash["page"] = Node::Page;
- typeHash["enum"] = Node::Enum;
- typeHash["example"] = Node::Example;
- typeHash["externalpage"] = Node::ExternalPage;
- typeHash["typedef"] = Node::Typedef;
- typeHash["typealias"] = Node::TypeAlias;
- typeHash["function"] = Node::Function;
- typeHash["property"] = Node::Property;
- typeHash["variable"] = Node::Variable;
- typeHash["group"] = Node::Group;
- typeHash["module"] = Node::Module;
- typeHash["jsmodule"] = Node::JsModule;
- typeHash["qmlmodule"] = Node::QmlModule;
- typeHash["qmlproperty"] = Node::JsProperty;
- typeHash["jsproperty"] = Node::QmlProperty;
- typeHash["qmlclass"] = Node::QmlType; // Legacy alias for 'qmltype'
- typeHash["qmltype"] = Node::QmlType;
- typeHash["qmlbasictype"] = Node::QmlBasicType;
-
- for (const QString &selector : selectors) {
- QStringList pieces = selector.split(QLatin1Char(':'));
- // Remove doc: or fake: prefix
- if (pieces.size() > 1 && typeHash.value(pieces[0].toLower()) == Node::Page)
- pieces.takeFirst();
-
- QString typeName = pieces.takeFirst().toLower();
- if (!typeHash.contains(typeName))
- continue;
-
- subproject.selectors << typeHash.value(typeName);
- if (!pieces.isEmpty()) {
- pieces = pieces[0].split(QLatin1Char(','));
- for (const auto &piece : qAsConst(pieces)) {
- if (typeHash[typeName] == Node::Group
- || typeHash[typeName] == Node::Module
- || typeHash[typeName] == Node::QmlModule
- || typeHash[typeName] == Node::JsModule) {
- subproject.groups << piece.toLower();
- }
- }
- }
- }
-}
-
-void HelpProjectWriter::addExtraFile(const QString &file)
-{
- for (int i = 0; i < projects.size(); ++i)
- projects[i].extraFiles.insert(file);
-}
-
-void HelpProjectWriter::addExtraFiles(const QSet<QString> &files)
-{
- for (int i = 0; i < projects.size(); ++i)
- projects[i].extraFiles.unite(files);
-}
-
-/*!
- Returns a list of strings describing the keyword details for a given node.
-
- The first string is the human-readable name to be shown in Assistant.
- The second string is a unique identifier.
- The third string is the location of the documentation for the keyword.
- */
-QStringList HelpProjectWriter::keywordDetails(const Node *node) const
-{
- QStringList details;
-
- if (node->parent() && !node->parent()->name().isEmpty()) {
- // "name"
- if (node->isEnumType() || node->isTypedef())
- details << node->parent()->name() + "::" + node->name();
- else
- details << node->name();
- // "id"
- if (!node->isRelatedNonmember())
- details << node->parent()->name() + "::" + node->name();
- else
- details << node->name();
- } else if (node->isQmlType() || node->isQmlBasicType()) {
- details << node->name();
- details << "QML." + node->name();
- } else if (node->isJsType() || node->isJsBasicType()) {
- details << node->name();
- details << "JS." + node->name();
- } else if (node->isTextPageNode()) {
- const PageNode *fake = static_cast<const PageNode *>(node);
- details << fake->fullTitle();
- details << fake->fullTitle();
- } else {
- details << node->name();
- details << node->name();
- }
- details << gen_->fullDocumentLocation(node, false);
- return details;
-}
-
-bool HelpProjectWriter::generateSection(HelpProject &project, QXmlStreamWriter & /* writer */,
- const Node *node)
-{
- if (!node->url().isEmpty() && !(project.includeIndexNodes && !node->url().startsWith("http")))
- return false;
-
- if (node->isPrivate() || node->isInternal() || node->isDontDocument())
- return false;
-
- if (node->name().isEmpty())
- return true;
-
- QString docPath = node->doc().location().filePath();
- if (!docPath.isEmpty() && project.excluded.contains(docPath))
- return false;
-
- QString objName = node->isTextPageNode() ? node->fullTitle() : node->fullDocumentName();
- // Only add nodes to the set for each subproject if they match a selector.
- // Those that match will be listed in the table of contents.
-
- for (int i = 0; i < project.subprojects.length(); i++) {
- SubProject subproject = project.subprojects[i];
- // No selectors: accept all nodes.
- if (subproject.selectors.isEmpty()) {
- project.subprojects[i].nodes[objName] = node;
- } else if (subproject.selectors.contains(node->nodeType())) {
- // Add all group members for '[group|module|qmlmodule]:name' selector
- if (node->isCollectionNode()) {
- if (project.subprojects[i].groups.contains(node->name().toLower())) {
- const CollectionNode *cn = static_cast<const CollectionNode *>(node);
- const auto members = cn->members();
- for (const Node *m : members) {
- if (!m->isInAPI())
- continue;
- QString memberName =
- m->isTextPageNode() ? m->fullTitle() : m->fullDocumentName();
- project.subprojects[i].nodes[memberName] = m;
- }
- continue;
- } else if (!project.subprojects[i].groups.isEmpty()) {
- continue; // Node does not represent specified group(s)
- }
- } else if (node->isTextPageNode()) {
- if (node->isExternalPage() || node->fullTitle().isEmpty())
- continue;
- }
- project.subprojects[i].nodes[objName] = node;
- }
- }
-
- switch (node->nodeType()) {
-
- case Node::Class:
- case Node::Struct:
- case Node::Union:
- project.keywords.append(keywordDetails(node));
- break;
- case Node::QmlType:
- case Node::QmlBasicType:
- case Node::JsType:
- case Node::JsBasicType:
- if (node->doc().hasKeywords()) {
- const auto keywords = node->doc().keywords();
- for (const Atom *keyword : keywords) {
- if (!keyword->string().isEmpty()) {
- QStringList details;
- details << keyword->string() << keyword->string()
- << gen_->fullDocumentLocation(node, false);
- project.keywords.append(details);
- } else
- node->doc().location().warning(
- QStringLiteral("Bad keyword in %1")
- .arg(gen_->fullDocumentLocation(node, false)));
- }
- }
- project.keywords.append(keywordDetails(node));
- break;
-
- case Node::Namespace:
- project.keywords.append(keywordDetails(node));
- break;
-
- case Node::Enum:
- project.keywords.append(keywordDetails(node));
- {
- const EnumNode *enumNode = static_cast<const EnumNode *>(node);
- const auto items = enumNode->items();
- for (const auto &item : items) {
- QStringList details;
-
- if (enumNode->itemAccess(item.name()) == Access::Private)
- continue;
-
- if (!node->parent()->name().isEmpty()) {
- details << node->parent()->name() + "::" + item.name(); // "name"
- details << node->parent()->name() + "::" + item.name(); // "id"
- } else {
- details << item.name(); // "name"
- details << item.name(); // "id"
- }
- details << gen_->fullDocumentLocation(node, false);
- project.keywords.append(details);
- }
- }
- break;
-
- case Node::Group:
- case Node::Module:
- case Node::QmlModule:
- case Node::JsModule: {
- const CollectionNode *cn = static_cast<const CollectionNode *>(node);
- if (!cn->fullTitle().isEmpty()) {
- if (cn->doc().hasKeywords()) {
- const auto keywords = cn->doc().keywords();
- for (const Atom *keyword : keywords) {
- if (!keyword->string().isEmpty()) {
- QStringList details;
- details << keyword->string() << keyword->string()
- << gen_->fullDocumentLocation(node, false);
- project.keywords.append(details);
- } else
- cn->doc().location().warning(
- QStringLiteral("Bad keyword in %1")
- .arg(gen_->fullDocumentLocation(node, false)));
- }
- }
- project.keywords.append(keywordDetails(node));
- }
- } break;
-
- case Node::Property:
- case Node::QmlProperty:
- case Node::JsProperty:
- project.keywords.append(keywordDetails(node));
- break;
-
- case Node::Function: {
- const FunctionNode *funcNode = static_cast<const FunctionNode *>(node);
-
- /*
- QML and JS methods, signals, and signal handlers used to be node types,
- but now they are Function nodes with a Metaness value that specifies
- what kind of function they are, QmlSignal, JsSignal, QmlMethod, etc. It
- suffices at this point to test whether the node is of the QML or JS Genus,
- because we already know it is NodeType::Function.
- */
- if (funcNode->isQmlNode() || funcNode->isJsNode()) {
- project.keywords.append(keywordDetails(node));
- break;
- }
- // Only insert keywords for non-constructors. Constructors are covered
- // by the classes themselves.
-
- if (!funcNode->isSomeCtor())
- project.keywords.append(keywordDetails(node));
-
- // Insert member status flags into the entries for the parent
- // node of the function, or the node it is related to.
- // Since parent nodes should have already been inserted into
- // the set of files, we only need to ensure that related nodes
- // are inserted.
-
- if (node->parent())
- project.memberStatus[node->parent()].insert(node->status());
- } break;
- case Node::TypeAlias:
- case Node::Typedef: {
- const TypedefNode *typedefNode = static_cast<const TypedefNode *>(node);
- QStringList typedefDetails = keywordDetails(node);
- const EnumNode *enumNode = typedefNode->associatedEnum();
- // Use the location of any associated enum node in preference
- // to that of the typedef.
- if (enumNode)
- typedefDetails[2] = gen_->fullDocumentLocation(enumNode, false);
-
- project.keywords.append(typedefDetails);
- } break;
-
- case Node::Variable: {
- project.keywords.append(keywordDetails(node));
- } break;
-
- // Page nodes (such as manual pages) contain subtypes, titles and other
- // attributes.
- case Node::Page: {
- const PageNode *pn = static_cast<const PageNode *>(node);
- if (!pn->fullTitle().isEmpty()) {
- if (pn->doc().hasKeywords()) {
- const auto keywords = pn->doc().keywords();
- for (const Atom *keyword : keywords) {
- if (!keyword->string().isEmpty()) {
- QStringList details;
- details << keyword->string() << keyword->string()
- << gen_->fullDocumentLocation(node, false);
- project.keywords.append(details);
- } else {
- QString loc = gen_->fullDocumentLocation(node, false);
- pn->doc().location().warning(QStringLiteral("Bad keyword in %1").arg(loc));
- }
- }
- }
- project.keywords.append(keywordDetails(node));
- }
- break;
- }
- default:;
- }
-
- // Add all images referenced in the page to the set of files to include.
- const Atom *atom = node->doc().body().firstAtom();
- while (atom) {
- if (atom->type() == Atom::Image || atom->type() == Atom::InlineImage) {
- // Images are all placed within a single directory regardless of
- // whether the source images are in a nested directory structure.
- QStringList pieces = atom->string().split(QLatin1Char('/'));
- project.files.insert("images/" + pieces.last());
- }
- atom = atom->next();
- }
-
- return true;
-}
-
-void HelpProjectWriter::generateSections(HelpProject &project, QXmlStreamWriter &writer,
- const Node *node)
-{
- /*
- Don't include index nodes in the help file.
- */
- if (node->isIndexNode())
- return;
- if (!generateSection(project, writer, node))
- return;
-
- if (node->isAggregate()) {
- const Aggregate *aggregate = static_cast<const Aggregate *>(node);
-
- // Ensure that we don't visit nodes more than once.
- QSet<const Node *> childSet;
- const NodeList &children = aggregate->childNodes();
- for (const auto *child : children) {
- // Skip related non-members adopted by some other aggregate
- if (child->parent() != aggregate)
- continue;
- if (child->isIndexNode() || child->isPrivate())
- continue;
- if (child->isTextPageNode()) {
- childSet << child;
- } else {
- // Store member status of children
- project.memberStatus[node].insert(child->status());
- if (child->isFunction() && static_cast<const FunctionNode *>(child)->isOverload())
- continue;
- childSet << child;
- }
- }
- for (const auto *child : qAsConst(childSet))
- generateSections(project, writer, child);
- }
-}
-
-void HelpProjectWriter::generate()
-{
- for (int i = 0; i < projects.size(); ++i)
- generateProject(projects[i]);
-}
-
-void HelpProjectWriter::writeHashFile(QFile &file)
-{
- QCryptographicHash hash(QCryptographicHash::Sha1);
- hash.addData(&file);
-
- QFile hashFile(file.fileName() + ".sha1");
- if (!hashFile.open(QFile::WriteOnly | QFile::Text))
- return;
-
- hashFile.write(hash.result().toHex());
- hashFile.close();
-}
-
-void HelpProjectWriter::writeSection(QXmlStreamWriter &writer, const QString &path,
- const QString &value)
-{
- writer.writeStartElement(QStringLiteral("section"));
- writer.writeAttribute(QStringLiteral("ref"), path);
- writer.writeAttribute(QStringLiteral("title"), value);
- writer.writeEndElement(); // section
-}
-
-/*!
- Write subsections for all members, compatibility members and obsolete members.
- */
-void HelpProjectWriter::addMembers(HelpProject &project, QXmlStreamWriter &writer, const Node *node)
-{
- if (node->isQmlBasicType() || node->isJsBasicType())
- return;
-
- QString href = gen_->fullDocumentLocation(node, false);
- href = href.left(href.size() - 5);
- if (href.isEmpty())
- return;
-
- bool derivedClass = false;
- if (node->isClassNode())
- derivedClass = !(static_cast<const ClassNode *>(node)->baseClasses().isEmpty());
-
- // Do not generate a 'List of all members' for namespaces or header files,
- // but always generate it for derived classes and QML classes
- if (!node->isNamespace() && !node->isHeader()
- && (derivedClass || node->isQmlType() || node->isJsType()
- || !project.memberStatus[node].isEmpty())) {
- QString membersPath = href + QStringLiteral("-members.html");
- writeSection(writer, membersPath, QStringLiteral("List of all members"));
- }
- if (project.memberStatus[node].contains(Node::Obsolete)) {
- QString obsoletePath = href + QStringLiteral("-obsolete.html");
- writeSection(writer, obsoletePath, QStringLiteral("Obsolete members"));
- }
-}
-
-void HelpProjectWriter::writeNode(HelpProject &project, QXmlStreamWriter &writer, const Node *node)
-{
- QString href = gen_->fullDocumentLocation(node, false);
- QString objName = node->name();
-
- switch (node->nodeType()) {
-
- case Node::Class:
- case Node::Struct:
- case Node::Union:
- case Node::QmlType:
- case Node::JsType:
- case Node::QmlBasicType:
- case Node::JsBasicType: {
- QString typeStr = gen_->typeString(node);
- if (!typeStr.isEmpty())
- typeStr[0] = typeStr[0].toTitleCase();
- writer.writeStartElement("section");
- writer.writeAttribute("ref", href);
- if (node->parent() && !node->parent()->name().isEmpty())
- writer.writeAttribute("title",
- QStringLiteral("%1::%2 %3 Reference")
- .arg(node->parent()->name())
- .arg(objName)
- .arg(typeStr));
- else
- writer.writeAttribute("title",
- QStringLiteral("%1 %2 Reference").arg(objName).arg(typeStr));
-
- addMembers(project, writer, node);
- writer.writeEndElement(); // section
- } break;
-
- case Node::Namespace:
- writeSection(writer, href, objName);
- break;
-
- case Node::Example:
- case Node::HeaderFile:
- case Node::Page:
- case Node::Group:
- case Node::Module:
- case Node::JsModule:
- case Node::QmlModule: {
- writer.writeStartElement("section");
- writer.writeAttribute("ref", href);
- writer.writeAttribute("title", node->fullTitle());
- if (node->nodeType() == Node::HeaderFile)
- addMembers(project, writer, node);
- writer.writeEndElement(); // section
- } break;
- default:;
- }
-}
-
-void HelpProjectWriter::generateProject(HelpProject &project)
-{
- const Node *rootNode;
-
- // Restrict searching only to the local (primary) tree
- QList<Tree *> searchOrder = qdb_->searchOrder();
- qdb_->setLocalSearch();
-
- if (!project.indexRoot.isEmpty())
- rootNode = qdb_->findPageNodeByTitle(project.indexRoot);
- else
- rootNode = qdb_->primaryTreeRoot();
-
- if (rootNode == nullptr)
- return;
-
- project.files.clear();
- project.keywords.clear();
-
- QFile file(outputDir + QDir::separator() + project.fileName);
- if (!file.open(QFile::WriteOnly | QFile::Text))
- return;
-
- QXmlStreamWriter writer(&file);
- writer.setAutoFormatting(true);
- writer.writeStartDocument();
- writer.writeStartElement("QtHelpProject");
- writer.writeAttribute("version", "1.0");
-
- // Write metaData, virtualFolder and namespace elements.
- writer.writeTextElement("namespace", project.helpNamespace);
- writer.writeTextElement("virtualFolder", project.virtualFolder);
- writer.writeStartElement("metaData");
- writer.writeAttribute("name", "version");
- writer.writeAttribute("value", project.version);
- writer.writeEndElement();
-
- // Write customFilter elements.
- for (auto it = project.customFilters.constBegin(); it != project.customFilters.constEnd();
- ++it) {
- writer.writeStartElement("customFilter");
- writer.writeAttribute("name", it.key());
- QStringList sortedAttributes = it.value().values();
- sortedAttributes.sort();
- for (const auto &filter : qAsConst(sortedAttributes))
- writer.writeTextElement("filterAttribute", filter);
- writer.writeEndElement(); // customFilter
- }
-
- // Start the filterSection.
- writer.writeStartElement("filterSection");
-
- // Write filterAttribute elements.
- QStringList sortedFilterAttributes = project.filterAttributes.values();
- sortedFilterAttributes.sort();
- for (const auto &filterName : qAsConst(sortedFilterAttributes))
- writer.writeTextElement("filterAttribute", filterName);
-
- writer.writeStartElement("toc");
- writer.writeStartElement("section");
- const Node *node = qdb_->findPageNodeByTitle(project.indexTitle);
- if (node == nullptr)
- node = qdb_->findNodeByNameAndType(QStringList("index.html"), &Node::isPageNode);
- QString indexPath;
- if (node)
- indexPath = gen_->fullDocumentLocation(node, false);
- else
- indexPath = "index.html";
- writer.writeAttribute("ref", indexPath);
- writer.writeAttribute("title", project.indexTitle);
-
- generateSections(project, writer, rootNode);
-
- for (int i = 0; i < project.subprojects.length(); i++) {
- SubProject subproject = project.subprojects[i];
-
- if (subproject.type == QLatin1String("manual")) {
-
- const Node *indexPage = qdb_->findNodeForTarget(subproject.indexTitle, nullptr);
- if (indexPage) {
- Text indexBody = indexPage->doc().body();
- const Atom *atom = indexBody.firstAtom();
- QStack<int> sectionStack;
- bool inItem = false;
-
- while (atom) {
- switch (atom->type()) {
- case Atom::ListLeft:
- sectionStack.push(0);
- break;
- case Atom::ListRight:
- if (sectionStack.pop() > 0)
- writer.writeEndElement(); // section
- break;
- case Atom::ListItemLeft:
- inItem = true;
- break;
- case Atom::ListItemRight:
- inItem = false;
- break;
- case Atom::Link:
- if (inItem) {
- if (sectionStack.top() > 0)
- writer.writeEndElement(); // section
-
- const Node *page = qdb_->findNodeForTarget(atom->string(), nullptr);
- writer.writeStartElement("section");
- QString indexPath = gen_->fullDocumentLocation(page, false);
- writer.writeAttribute("ref", indexPath);
- writer.writeAttribute("title", atom->linkText());
-
- sectionStack.top() += 1;
- }
- break;
- default:;
- }
-
- if (atom == indexBody.lastAtom())
- break;
- atom = atom->next();
- }
- } else
- rootNode->doc().location().warning(
- QStringLiteral("Failed to find index: %1").arg(subproject.indexTitle));
-
- } else {
-
- writer.writeStartElement("section");
- QString indexPath = gen_->fullDocumentLocation(
- qdb_->findNodeForTarget(subproject.indexTitle, nullptr), false);
- writer.writeAttribute("ref", indexPath);
- writer.writeAttribute("title", subproject.title);
-
- if (subproject.sortPages) {
- QStringList titles = subproject.nodes.keys();
- titles.sort();
- for (const auto &title : qAsConst(titles)) {
- writeNode(project, writer, subproject.nodes[title]);
- }
- } else {
- // Find a contents node and navigate from there, using the NextLink values.
- QSet<QString> visited;
- bool contentsFound = false;
- for (const auto *node : qAsConst(subproject.nodes)) {
- QString nextTitle = node->links().value(Node::NextLink).first;
- if (!nextTitle.isEmpty()
- && node->links().value(Node::ContentsLink).first.isEmpty()) {
-
- const Node *nextPage = qdb_->findNodeForTarget(nextTitle, nullptr);
-
- // Write the contents node.
- writeNode(project, writer, node);
- contentsFound = true;
-
- while (nextPage) {
- writeNode(project, writer, nextPage);
- nextTitle = nextPage->links().value(Node::NextLink).first;
- if (nextTitle.isEmpty() || visited.contains(nextTitle))
- break;
- nextPage = qdb_->findNodeForTarget(nextTitle, nullptr);
- visited.insert(nextTitle);
- }
- break;
- }
- }
- // No contents/nextpage links found, write all nodes unsorted
- if (!contentsFound) {
- QList<const Node *> subnodes = subproject.nodes.values();
-
- std::sort(subnodes.begin(), subnodes.end(), Node::nodeNameLessThan);
-
- for (const auto *node : qAsConst(subnodes))
- writeNode(project, writer, node);
- }
- }
-
- writer.writeEndElement(); // section
- }
- }
-
- // Restore original search order
- qdb_->setSearchOrder(searchOrder);
-
- writer.writeEndElement(); // section
- writer.writeEndElement(); // toc
-
- writer.writeStartElement("keywords");
- std::sort(project.keywords.begin(), project.keywords.end());
- for (const QStringList &details : qAsConst(project.keywords)) {
- writer.writeStartElement("keyword");
- writer.writeAttribute("name", details[0]);
- writer.writeAttribute("id", details[1]);
- writer.writeAttribute("ref", details[2]);
- writer.writeEndElement(); // keyword
- }
- writer.writeEndElement(); // keywords
-
- writer.writeStartElement("files");
-
- // The list of files to write is the union of generated files and
- // other files (images and extras) included in the project
- QSet<QString> files =
- QSet<QString>(gen_->outputFileNames().cbegin(), gen_->outputFileNames().cend());
- files.unite(project.files);
- files.unite(project.extraFiles);
- QStringList sortedFiles = files.values();
- sortedFiles.sort();
- for (const auto &usedFile : qAsConst(sortedFiles)) {
- if (!usedFile.isEmpty())
- writer.writeTextElement("file", usedFile);
- }
- writer.writeEndElement(); // files
-
- writer.writeEndElement(); // filterSection
- writer.writeEndElement(); // QtHelpProject
- writer.writeEndDocument();
- writeHashFile(file);
- file.close();
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/helpprojectwriter.h b/src/qdoc/helpprojectwriter.h
deleted file mode 100644
index b9f310fd9..000000000
--- a/src/qdoc/helpprojectwriter.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef HELPPROJECTWRITER_H
-#define HELPPROJECTWRITER_H
-
-#include "node.h"
-
-#include <QtCore/qstring.h>
-#include <QtCore/qxmlstream.h>
-
-QT_BEGIN_NAMESPACE
-
-class QDocDatabase;
-class Generator;
-typedef QPair<QString, const Node *> QStringNodePair;
-
-using NodeTypeSet = QSet<unsigned char>;
-
-struct SubProject
-{
- QString title;
- QString indexTitle;
- NodeTypeSet selectors;
- bool sortPages;
- QString type;
- QHash<QString, const Node *> nodes;
- QStringList groups;
-};
-
-struct HelpProject
-{
- using NodeStatusSet = QSet<unsigned char>;
-
- QString name;
- QString helpNamespace;
- QString virtualFolder;
- QString version;
- QString fileName;
- QString indexRoot;
- QString indexTitle;
- QList<QStringList> keywords;
- QSet<QString> files;
- QSet<QString> extraFiles;
- QSet<QString> filterAttributes;
- QHash<QString, QSet<QString>> customFilters;
- QSet<QString> excluded;
- QList<SubProject> subprojects;
- QHash<const Node *, NodeStatusSet> memberStatus;
- bool includeIndexNodes;
-};
-
-class HelpProjectWriter
-{
-public:
- HelpProjectWriter(const QString &defaultFileName, Generator *g);
- void reset(const QString &defaultFileName, Generator *g);
- void addExtraFile(const QString &file);
- void addExtraFiles(const QSet<QString> &files);
- void generate();
-
-private:
- void generateProject(HelpProject &project);
- void generateSections(HelpProject &project, QXmlStreamWriter &writer, const Node *node);
- bool generateSection(HelpProject &project, QXmlStreamWriter &writer, const Node *node);
- QStringList keywordDetails(const Node *node) const;
- void writeHashFile(QFile &file);
- void writeNode(HelpProject &project, QXmlStreamWriter &writer, const Node *node);
- void readSelectors(SubProject &subproject, const QStringList &selectors);
- void addMembers(HelpProject &project, QXmlStreamWriter &writer, const Node *node);
- void writeSection(QXmlStreamWriter &writer, const QString &path, const QString &value);
-
- QDocDatabase *qdb_;
- Generator *gen_;
-
- QString outputDir;
- QList<HelpProject> projects;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/htmlgenerator.cpp b/src/qdoc/htmlgenerator.cpp
deleted file mode 100644
index dcf5a6d3c..000000000
--- a/src/qdoc/htmlgenerator.cpp
+++ /dev/null
@@ -1,3664 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "htmlgenerator.h"
-
-#include "access.h"
-#include "aggregate.h"
-#include "classnode.h"
-#include "collectionnode.h"
-#include "config.h"
-#include "codemarker.h"
-#include "codeparser.h"
-#include "enumnode.h"
-#include "examplenode.h"
-#include "functionnode.h"
-#include "helpprojectwriter.h"
-#include "manifestwriter.h"
-#include "node.h"
-#include "propertynode.h"
-#include "qdocdatabase.h"
-#include "qmlpropertynode.h"
-#include "separator.h"
-#include "sharedcommentnode.h"
-#include "tree.h"
-#include "quoter.h"
-
-#include <QtCore/qlist.h>
-#include <QtCore/qmap.h>
-#include <QtCore/quuid.h>
-#include <QtCore/qversionnumber.h>
-#include <QtCore/qregularexpression.h>
-
-#include <cctype>
-
-QT_BEGIN_NAMESPACE
-
-int HtmlGenerator::id = 0;
-
-QString HtmlGenerator::divNavTop;
-
-static bool showBrokenLinks = false;
-
-static void addLink(const QString &linkTarget, QStringView nestedStuff, QString *res)
-{
- if (!linkTarget.isEmpty()) {
- *res += QLatin1String("<a href=\"");
- *res += linkTarget;
- *res += QLatin1String("\">");
- *res += nestedStuff;
- *res += QLatin1String("</a>");
- } else {
- *res += nestedStuff;
- }
-}
-
-/*!
- Destroys the HTML output generator. Deletes the singleton
- instance of HelpProjectWriter and the ManifestWriter instance.
- */
-HtmlGenerator::~HtmlGenerator()
-{
- if (m_helpProjectWriter) {
- delete m_helpProjectWriter;
- m_helpProjectWriter = nullptr;
- }
-
- if (m_manifestWriter) {
- delete m_manifestWriter;
- m_manifestWriter = nullptr;
- }
-}
-
-/*!
- Initializes the HTML output generator's data structures
- from the configuration (Config) singleton.
- */
-void HtmlGenerator::initializeGenerator()
-{
- static const struct
- {
- const char *key;
- const char *left;
- const char *right;
- } defaults[] = { { ATOM_FORMATTING_BOLD, "<b>", "</b>" },
- { ATOM_FORMATTING_INDEX, "<!--", "-->" },
- { ATOM_FORMATTING_ITALIC, "<i>", "</i>" },
- { ATOM_FORMATTING_PARAMETER, "<i>", "</i>" },
- { ATOM_FORMATTING_SUBSCRIPT, "<sub>", "</sub>" },
- { ATOM_FORMATTING_SUPERSCRIPT, "<sup>", "</sup>" },
- { ATOM_FORMATTING_TELETYPE, "<code>",
- "</code>" }, // <tt> tag is not supported in HTML5
- { ATOM_FORMATTING_UICONTROL, "<b>", "</b>" },
- { ATOM_FORMATTING_UNDERLINE, "<u>", "</u>" },
- { nullptr, nullptr, nullptr } };
-
- Generator::initializeGenerator();
- config = &Config::instance();
- setImageFileExtensions(QStringList() << "png"
- << "jpg"
- << "jpeg"
- << "gif");
-
- /*
- The formatting maps are owned by Generator. They are cleared in
- Generator::terminate().
- */
- int i = 0;
- while (defaults[i].key) {
- formattingLeftMap().insert(QLatin1String(defaults[i].key), QLatin1String(defaults[i].left));
- formattingRightMap().insert(QLatin1String(defaults[i].key),
- QLatin1String(defaults[i].right));
- i++;
- }
-
- m_endHeader = config->getString(HtmlGenerator::format() + Config::dot + CONFIG_ENDHEADER);
- m_postHeader =
- config->getString(HtmlGenerator::format() + Config::dot + HTMLGENERATOR_POSTHEADER);
- m_postPostHeader =
- config->getString(HtmlGenerator::format() + Config::dot + HTMLGENERATOR_POSTPOSTHEADER);
- m_prologue = config->getString(HtmlGenerator::format() + Config::dot + HTMLGENERATOR_PROLOGUE);
-
- m_footer = config->getString(HtmlGenerator::format() + Config::dot + HTMLGENERATOR_FOOTER);
- m_address = config->getString(HtmlGenerator::format() + Config::dot + HTMLGENERATOR_ADDRESS);
- m_noNavigationBar =
- config->getBool(HtmlGenerator::format() + Config::dot + HTMLGENERATOR_NONAVIGATIONBAR);
- m_navigationSeparator = config->getString(HtmlGenerator::format() + Config::dot
- + HTMLGENERATOR_NAVIGATIONSEPARATOR);
- tocDepth = config->getInt(HtmlGenerator::format() + Config::dot + HTMLGENERATOR_TOCDEPTH);
-
- m_project = config->getString(CONFIG_PROJECT);
-
- m_projectDescription = config->getString(CONFIG_DESCRIPTION);
- if (m_projectDescription.isEmpty() && !m_project.isEmpty())
- m_projectDescription = m_project + QLatin1String(" Reference Documentation");
-
- m_projectUrl = config->getString(CONFIG_URL);
- tagFile_ = config->getString(CONFIG_TAGFILE);
-
- naturalLanguage = config->getString(CONFIG_NATURALLANGUAGE);
- if (naturalLanguage.isEmpty())
- naturalLanguage = QLatin1String("en");
-
- m_codeIndent = config->getInt(CONFIG_CODEINDENT); // QTBUG-27798
- m_codePrefix = config->getString(CONFIG_CODEPREFIX);
- m_codeSuffix = config->getString(CONFIG_CODESUFFIX);
-
- /*
- The help file write should be allocated once and only once
- per qdoc execution.
- */
- if (m_helpProjectWriter)
- m_helpProjectWriter->reset(m_project.toLower() + ".qhp", this);
- else
- m_helpProjectWriter = new HelpProjectWriter(m_project.toLower() + ".qhp", this);
-
- if (!m_manifestWriter)
- m_manifestWriter = new ManifestWriter();
-
- // Documentation template handling
- m_headerScripts =
- config->getString(HtmlGenerator::format() + Config::dot + CONFIG_HEADERSCRIPTS);
- m_headerStyles = config->getString(HtmlGenerator::format() + Config::dot + CONFIG_HEADERSTYLES);
-
- // Retrieve the config for the navigation bar
- m_homepage = config->getString(CONFIG_NAVIGATION + Config::dot + CONFIG_HOMEPAGE);
-
- m_hometitle = config->getString(CONFIG_NAVIGATION + Config::dot + CONFIG_HOMETITLE, m_homepage);
-
- m_landingpage = config->getString(CONFIG_NAVIGATION + Config::dot + CONFIG_LANDINGPAGE);
-
- m_landingtitle =
- config->getString(CONFIG_NAVIGATION + Config::dot + CONFIG_LANDINGTITLE, m_landingpage);
-
- m_cppclassespage = config->getString(CONFIG_NAVIGATION + Config::dot + CONFIG_CPPCLASSESPAGE);
-
- m_cppclassestitle = config->getString(CONFIG_NAVIGATION + Config::dot + CONFIG_CPPCLASSESTITLE,
- QLatin1String("C++ Classes"));
-
- m_qmltypespage = config->getString(CONFIG_NAVIGATION + Config::dot + CONFIG_QMLTYPESPAGE);
-
- m_qmltypestitle = config->getString(CONFIG_NAVIGATION + Config::dot + CONFIG_QMLTYPESTITLE,
- QLatin1String("QML Types"));
-
- m_buildversion = config->getString(CONFIG_BUILDVERSION);
-}
-
-/*!
- Gracefully terminates the HTML output generator.
- */
-void HtmlGenerator::terminateGenerator()
-{
- Generator::terminateGenerator();
-}
-
-QString HtmlGenerator::format()
-{
- return "HTML";
-}
-
-/*!
- Generate targets for any \keyword commands that were seen
- in the qdoc comment for the \a node.
- */
-void HtmlGenerator::generateKeywordAnchors(const Node *node)
-{
- Q_UNUSED(node);
- // Disabled: keywords always link to the top of the QDoc
- // comment they appear in, and do not use a dedicated anchor.
-}
-
-/*!
- If qdoc is in the \c {-prepare} phase, traverse the primary
- tree to generate the index file for the current module.
-
- If qdoc is in the \c {-generate} phase, traverse the primary
- tree to generate all the HTML documentation for the current
- module. Then generate the help file and the tag file.
- */
-void HtmlGenerator::generateDocs()
-{
- Node *qflags = m_qdb->findClassNode(QStringList("QFlags"));
- if (qflags)
- m_qflagsHref = linkForNode(qflags, nullptr);
- if (!config->preparing())
- Generator::generateDocs();
-
- if (!config->generating()) {
- QString fileBase =
- m_project.toLower().simplified().replace(QLatin1Char(' '), QLatin1Char('-'));
- m_qdb->generateIndex(outputDir() + QLatin1Char('/') + fileBase + ".index", m_projectUrl,
- m_projectDescription, this);
- }
-
- if (!config->preparing()) {
- m_helpProjectWriter->generate();
- m_manifestWriter->generateManifestFiles();
- /*
- Generate the XML tag file, if it was requested.
- */
- m_qdb->generateTagFile(tagFile_, this);
- }
-}
-
-/*!
- Generate an html file with the contents of a C++ or QML source file.
- */
-void HtmlGenerator::generateExampleFilePage(const Node *en, const QString &file, CodeMarker *marker)
-{
- SubTitleSize subTitleSize = LargeSubTitle;
- QString fullTitle = en->fullTitle();
-
- beginFilePage(en, linkForExampleFile(file, en));
- generateHeader(fullTitle, en, marker);
- generateTitle(fullTitle, Text() << en->subtitle(), subTitleSize, en, marker);
-
- Text text;
- Quoter quoter;
- Doc::quoteFromFile(en->doc().location(), quoter, file);
- QString code = quoter.quoteTo(en->location(), QString(), QString());
- CodeMarker *codeMarker = CodeMarker::markerForFileName(file);
- text << Atom(codeMarker->atomType(), code);
- Atom a(codeMarker->atomType(), code);
-
- generateText(text, en, codeMarker);
- endFilePage();
-}
-
-/*!
- Generate html from an instance of Atom.
- */
-int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker)
-{
- int idx, skipAhead = 0;
- static bool in_para = false;
-
- switch (atom->type()) {
- case Atom::AutoLink: {
- QString name = atom->string();
- if (relative && relative->name() == name.replace(QLatin1String("()"), QLatin1String())) {
- out() << protectEnc(atom->string());
- break;
- }
- }
- Q_FALLTHROUGH();
- case Atom::NavAutoLink:
- if (!m_inLink && !m_inContents && !m_inSectionHeading) {
- const Node *node = nullptr;
- QString link = getAutoLink(atom, relative, &node);
- if (link.isEmpty()) {
- if (autolinkErrors())
- relative->doc().location().warning(
- QStringLiteral("Can't autolink to '%1'").arg(atom->string()));
- } else if (node && node->isObsolete()) {
- if ((relative->parent() != node) && !relative->isObsolete())
- link.clear();
- }
- if (link.isEmpty()) {
- out() << protectEnc(atom->string());
- } else {
- beginLink(link, node, relative);
- generateLink(atom, marker);
- endLink();
- }
- } else {
- out() << protectEnc(atom->string());
- }
- break;
- case Atom::BaseName:
- break;
- case Atom::BriefLeft:
- if (!hasBrief(relative)) {
- skipAhead = skipAtoms(atom, Atom::BriefRight);
- break;
- }
- out() << "<p>";
- rewritePropertyBrief(atom, relative);
- break;
- case Atom::BriefRight:
- if (hasBrief(relative))
- out() << "</p>\n";
- break;
- case Atom::C:
- // This may at one time have been used to mark up C++ code but it is
- // now widely used to write teletype text. As a result, text marked
- // with the \c command is not passed to a code marker.
- out() << formattingLeftMap()[ATOM_FORMATTING_TELETYPE];
- out() << protectEnc(plainCode(atom->string()));
- out() << formattingRightMap()[ATOM_FORMATTING_TELETYPE];
- break;
- case Atom::CaptionLeft:
- out() << "<p class=\"figCaption\">";
- in_para = true;
- break;
- case Atom::CaptionRight:
- endLink();
- if (in_para) {
- out() << "</p>\n";
- in_para = false;
- }
- break;
- case Atom::Qml:
- out() << "<pre class=\"qml\">"
- << trimmedTrailing(highlightedCode(indent(m_codeIndent, atom->string()), relative,
- false, Node::QML),
- m_codePrefix, m_codeSuffix)
- << "</pre>\n";
- break;
- case Atom::JavaScript:
- out() << "<pre class=\"js\">"
- << trimmedTrailing(highlightedCode(indent(m_codeIndent, atom->string()), relative,
- false, Node::JS),
- m_codePrefix, m_codeSuffix)
- << "</pre>\n";
- break;
- case Atom::CodeNew:
- out() << "<p>you can rewrite it as</p>\n";
- Q_FALLTHROUGH();
- case Atom::Code:
- out() << "<pre class=\"cpp\">"
- << trimmedTrailing(highlightedCode(indent(m_codeIndent, atom->string()), relative),
- m_codePrefix, m_codeSuffix)
- << "</pre>\n";
- break;
- case Atom::CodeOld:
- out() << "<p>For example, if you have code like</p>\n";
- Q_FALLTHROUGH();
- case Atom::CodeBad:
- out() << "<pre class=\"cpp plain\">"
- << trimmedTrailing(protectEnc(plainCode(indent(m_codeIndent, atom->string()))),
- m_codePrefix, m_codeSuffix)
- << "</pre>\n";
- break;
- case Atom::DivLeft:
- out() << "<div";
- if (!atom->string().isEmpty())
- out() << ' ' << atom->string();
- out() << '>';
- break;
- case Atom::DivRight:
- out() << "</div>";
- break;
- case Atom::FootnoteLeft:
- // ### For now
- if (in_para) {
- out() << "</p>\n";
- in_para = false;
- }
- out() << "<!-- ";
- break;
- case Atom::FootnoteRight:
- // ### For now
- out() << "-->\n";
- break;
- case Atom::FormatElse:
- case Atom::FormatEndif:
- case Atom::FormatIf:
- break;
- case Atom::FormattingLeft:
- if (atom->string().startsWith("span ")) {
- out() << '<' + atom->string() << '>';
- } else
- out() << formattingLeftMap()[atom->string()];
- if (atom->string() == ATOM_FORMATTING_PARAMETER) {
- if (atom->next() != nullptr && atom->next()->type() == Atom::String) {
- QRegularExpression subscriptRegExp("^([a-z]+)_([0-9n])$");
- auto match = subscriptRegExp.match(atom->next()->string());
- if (match.hasMatch()) {
- out() << match.captured(1) << "<sub>" << match.captured(2)
- << "</sub>";
- skipAhead = 1;
- }
- }
- }
- break;
- case Atom::FormattingRight:
- if (atom->string() == ATOM_FORMATTING_LINK) {
- endLink();
- } else if (atom->string().startsWith("span ")) {
- out() << "</span>";
- } else {
- out() << formattingRightMap()[atom->string()];
- }
- break;
- case Atom::AnnotatedList: {
- const CollectionNode *cn = m_qdb->getCollectionNode(atom->string(), Node::Group);
- if (cn)
- generateList(cn, marker, atom->string());
- } break;
- case Atom::GeneratedList:
- if (atom->string() == QLatin1String("annotatedclasses")) {
- generateAnnotatedList(relative, marker, m_qdb->getCppClasses().values());
- } else if (atom->string() == QLatin1String("annotatedexamples")) {
- generateAnnotatedLists(relative, marker, m_qdb->getExamples());
- } else if (atom->string() == QLatin1String("annotatedattributions")) {
- generateAnnotatedLists(relative, marker, m_qdb->getAttributions());
- } else if (atom->string() == QLatin1String("classes")) {
- generateCompactList(Generic, relative, m_qdb->getCppClasses(), true,
- QStringLiteral(""));
- } else if (atom->string().contains("classes ")) {
- QString rootName = atom->string().mid(atom->string().indexOf("classes") + 7).trimmed();
- generateCompactList(Generic, relative, m_qdb->getCppClasses(), true, rootName);
- } else if (atom->string() == QLatin1String("qmlbasictypes")) {
- generateCompactList(Generic, relative, m_qdb->getQmlBasicTypes(), true,
- QStringLiteral(""));
- } else if (atom->string() == QLatin1String("qmltypes")) {
- generateCompactList(Generic, relative, m_qdb->getQmlTypes(), true, QStringLiteral(""));
- } else if ((idx = atom->string().indexOf(QStringLiteral("bymodule"))) != -1) {
- QString moduleName = atom->string().mid(idx + 8).trimmed();
- Node::NodeType type = typeFromString(atom);
- QDocDatabase *qdb = QDocDatabase::qdocDB();
- const CollectionNode *cn = qdb->getCollectionNode(moduleName, type);
- if (cn) {
- if (type == Node::Module) {
- NodeMap m;
- cn->getMemberClasses(m);
- if (!m.isEmpty()) {
- generateAnnotatedList(relative, marker, m.values());
- }
- } else
- generateAnnotatedList(relative, marker, cn->members());
- }
- } else if (atom->string().startsWith("examplefiles")
- || atom->string().startsWith("exampleimages")) {
- if (relative->isExample()) {
- qDebug() << "GENERATE FILE LIST CALLED" << relative->name() << atom->string();
- } else
- relative->location().warning(QString("'\\generatelist \1' can only be used with "
- "'\\example' topic command")
- .arg(atom->string()));
- } else if (atom->string() == QLatin1String("classhierarchy")) {
- generateClassHierarchy(relative, m_qdb->getCppClasses());
- } else if (atom->string() == QLatin1String("obsoleteclasses")) {
- generateCompactList(Generic, relative, m_qdb->getObsoleteClasses(), false,
- QStringLiteral("Q"));
- } else if (atom->string() == QLatin1String("obsoleteqmltypes")) {
- generateCompactList(Generic, relative, m_qdb->getObsoleteQmlTypes(), false,
- QStringLiteral(""));
- } else if (atom->string() == QLatin1String("obsoletecppmembers")) {
- generateCompactList(Obsolete, relative, m_qdb->getClassesWithObsoleteMembers(), false,
- QStringLiteral("Q"));
- } else if (atom->string() == QLatin1String("obsoleteqmlmembers")) {
- generateCompactList(Obsolete, relative, m_qdb->getQmlTypesWithObsoleteMembers(), false,
- QStringLiteral(""));
- } else if (atom->string() == QLatin1String("functionindex")) {
- generateFunctionIndex(relative);
- } else if (atom->string() == QLatin1String("attributions")) {
- generateAnnotatedList(relative, marker, m_qdb->getAttributions().values());
- } else if (atom->string() == QLatin1String("legalese")) {
- generateLegaleseList(relative, marker);
- } else if (atom->string() == QLatin1String("overviews")) {
- generateList(relative, marker, "overviews");
- } else if (atom->string() == QLatin1String("cpp-modules")) {
- generateList(relative, marker, "cpp-modules");
- } else if (atom->string() == QLatin1String("qml-modules")) {
- generateList(relative, marker, "qml-modules");
- } else if (atom->string() == QLatin1String("namespaces")) {
- generateAnnotatedList(relative, marker, m_qdb->getNamespaces().values());
- } else if (atom->string() == QLatin1String("related")) {
- generateList(relative, marker, "related");
- } else {
- const CollectionNode *cn = m_qdb->getCollectionNode(atom->string(), Node::Group);
- if (cn) {
- if (!generateGroupList(const_cast<CollectionNode *>(cn)))
- relative->location().warning(
- QString("'\\generatelist \1' group is empty").arg(atom->string()));
- } else {
- relative->location().warning(
- QString("'\\generatelist \1' no such group").arg(atom->string()));
- }
- }
- break;
- case Atom::SinceList: {
- const NodeMultiMap &nsmap = m_qdb->getSinceMap(atom->string());
- if (nsmap.isEmpty())
- break;
-
- const NodeMultiMap &ncmap = m_qdb->getClassMap(atom->string());
- const NodeMultiMap &nqcmap = m_qdb->getQmlTypeMap(atom->string());
-
- Sections sections(nsmap);
- out() << "<ul>\n";
- const QList<Section> sinceSections = sections.sinceSections();
- for (const auto &section : sinceSections) {
- if (!section.members().isEmpty()) {
- out() << "<li>"
- << "<a href=\"#" << Doc::canonicalTitle(section.title()) << "\">"
- << section.title() << "</a></li>\n";
- }
- }
- out() << "</ul>\n";
-
- int index = 0;
- for (const auto &section : sinceSections) {
- if (!section.members().isEmpty()) {
- out() << "<a name=\"" << Doc::canonicalTitle(section.title()) << "\"></a>\n";
- out() << "<h3>" << protectEnc(section.title()) << "</h3>\n";
- if (index == Sections::SinceClasses)
- generateCompactList(Generic, nullptr, ncmap, false, QStringLiteral("Q"));
- else if (index == Sections::SinceQmlTypes)
- generateCompactList(Generic, nullptr, nqcmap, false, QStringLiteral(""));
- else if (index == Sections::SinceMemberFunctions) {
- ParentMaps parentmaps;
- ParentMaps::iterator pmap;
- const QList<Node *> &members = section.members();
- for (const auto &member : members) {
- Node *parent = (*member).parent();
- pmap = parentmaps.find(parent);
- if (pmap == parentmaps.end())
- pmap = parentmaps.insert(parent, NodeMultiMap());
- pmap->insert(member->name(), member);
- }
- for (auto map = parentmaps.begin(); map != parentmaps.end(); ++map) {
- NodeVector nv = map->values().toVector();
- out() << "<p>Class ";
-
- out() << "<a href=\"" << linkForNode(map.key(), nullptr) << "\">";
- QStringList pieces = map.key()->fullName().split("::");
- out() << protectEnc(pieces.last());
- out() << "</a>"
- << ":</p>\n";
-
- generateSection(nv, nullptr, marker);
- out() << "<br/>";
- }
- } else {
- generateSection(section.members(), nullptr, marker);
- }
- }
- ++index;
- }
- } break;
- case Atom::BR:
- out() << "<br />\n";
- break;
- case Atom::HR:
- out() << "<hr />\n";
- break;
- case Atom::Image:
- case Atom::InlineImage: {
- QString fileName = imageFileName(relative, atom->string());
- QString text;
- if (atom->next() != nullptr)
- text = atom->next()->string();
- if (atom->type() == Atom::Image)
- out() << "<p class=\"centerAlign\">";
- if (fileName.isEmpty()) {
- relative->location().warning(
- QStringLiteral("Missing image: %1").arg(protectEnc(atom->string())));
- out() << "<font color=\"red\">[Missing image " << protectEnc(atom->string())
- << "]</font>";
- } else {
- QString prefix;
- out() << "<img src=\"" << protectEnc(prefix + fileName) << '"';
- if (!text.isEmpty())
- out() << " alt=\"" << protectEnc(text) << '"';
- else
- out() << " alt=\"\"";
- out() << " />";
- m_helpProjectWriter->addExtraFile(fileName);
- setImageFileName(relative, fileName);
- }
- if (atom->type() == Atom::Image)
- out() << "</p>";
- } break;
- case Atom::ImageText:
- break;
- case Atom::ImportantLeft:
- out() << "<p>";
- out() << formattingLeftMap()[ATOM_FORMATTING_BOLD];
- out() << "Important: ";
- out() << formattingRightMap()[ATOM_FORMATTING_BOLD];
- break;
- case Atom::ImportantRight:
- out() << "</p>";
- break;
- case Atom::NoteLeft:
- out() << "<p>";
- out() << formattingLeftMap()[ATOM_FORMATTING_BOLD];
- out() << "Note: ";
- out() << formattingRightMap()[ATOM_FORMATTING_BOLD];
- break;
- case Atom::NoteRight:
- out() << "</p>\n";
- break;
- case Atom::LegaleseLeft:
- out() << "<div class=\"LegaleseLeft\">";
- break;
- case Atom::LegaleseRight:
- out() << "</div>";
- break;
- case Atom::LineBreak:
- out() << "<br/>";
- break;
- case Atom::Link:
- case Atom::NavLink: {
- m_inObsoleteLink = false;
- const Node *node = nullptr;
- QString link = getLink(atom, relative, &node);
- if (link.isEmpty() && (node != relative) && !noLinkErrors()) {
- relative->doc().location().warning(
- QStringLiteral("Can't link to '%1'").arg(atom->string()));
- } else {
- node = nullptr;
- }
- beginLink(link, node, relative);
- skipAhead = 1;
- } break;
- case Atom::ExampleFileLink: {
- QString link = linkForExampleFile(atom->string(), relative);
- if (link.isEmpty() && !noLinkErrors())
- relative->doc().location().warning(
- QStringLiteral("Can't link to '%1'").arg(atom->string()));
- beginLink(link);
- skipAhead = 1;
- } break;
- case Atom::ExampleImageLink: {
- QString link = atom->string();
- if (link.isEmpty() && !noLinkErrors())
- relative->doc().location().warning(
- QStringLiteral("Can't link to '%1'").arg(atom->string()));
- link = "images/used-in-examples/" + link;
- beginLink(link);
- skipAhead = 1;
- } break;
- case Atom::LinkNode: {
- const Node *node = CodeMarker::nodeForString(atom->string());
- beginLink(linkForNode(node, relative), node, relative);
- skipAhead = 1;
- } break;
- case Atom::ListLeft:
- if (in_para) {
- out() << "</p>\n";
- in_para = false;
- }
- if (atom->string() == ATOM_LIST_BULLET) {
- out() << "<ul>\n";
- } else if (atom->string() == ATOM_LIST_TAG) {
- out() << "<dl>\n";
- } else if (atom->string() == ATOM_LIST_VALUE) {
- out() << R"(<div class="table"><table class="valuelist">)";
- m_threeColumnEnumValueTable = isThreeColumnEnumValueTable(atom);
- if (m_threeColumnEnumValueTable) {
- if (++m_numTableRows % 2 == 1)
- out() << R"(<tr valign="top" class="odd">)";
- else
- out() << R"(<tr valign="top" class="even">)";
-
- out() << "<th class=\"tblConst\">Constant</th>";
-
- // If not in \enum topic, skip the value column
- if (relative->isEnumType())
- out() << "<th class=\"tblval\">Value</th>";
-
- out() << "<th class=\"tbldscr\">Description</th></tr>\n";
- } else {
- out() << "<tr><th class=\"tblConst\">Constant</th><th "
- "class=\"tblVal\">Value</th></tr>\n";
- }
- } else {
- QString olType;
- if (atom->string() == ATOM_LIST_UPPERALPHA) {
- olType = "A";
- } else if (atom->string() == ATOM_LIST_LOWERALPHA) {
- olType = "a";
- } else if (atom->string() == ATOM_LIST_UPPERROMAN) {
- olType = "I";
- } else if (atom->string() == ATOM_LIST_LOWERROMAN) {
- olType = "i";
- } else { // (atom->string() == ATOM_LIST_NUMERIC)
- olType = "1";
- }
-
- if (atom->next() != nullptr && atom->next()->string().toInt() > 1) {
- out() << QString(R"(<ol class="%1" type="%1" start="%2">)")
- .arg(olType)
- .arg(atom->next()->string());
- } else
- out() << QString(R"(<ol class="%1" type="%1">)").arg(olType);
- }
- break;
- case Atom::ListItemNumber:
- break;
- case Atom::ListTagLeft:
- if (atom->string() == ATOM_LIST_TAG) {
- out() << "<dt>";
- } else { // (atom->string() == ATOM_LIST_VALUE)
- QPair<QString, int> pair = getAtomListValue(atom);
- skipAhead = pair.second;
- QString t = protectEnc(plainCode(marker->markedUpEnumValue(pair.first, relative)));
- out() << "<tr><td class=\"topAlign\"><code>" << t << "</code>";
-
- if (relative->isEnumType()) {
- out() << "</td><td class=\"topAlign tblval\">";
- const auto *enume = static_cast<const EnumNode *>(relative);
- QString itemValue = enume->itemValue(atom->next()->string());
- if (itemValue.isEmpty())
- out() << '?';
- else
- out() << "<code>" << protectEnc(itemValue) << "</code>";
- }
- }
- break;
- case Atom::SinceTagRight:
- case Atom::ListTagRight:
- if (atom->string() == ATOM_LIST_TAG)
- out() << "</dt>\n";
- break;
- case Atom::ListItemLeft:
- if (atom->string() == ATOM_LIST_TAG) {
- out() << "<dd>";
- } else if (atom->string() == ATOM_LIST_VALUE) {
- if (m_threeColumnEnumValueTable) {
- out() << "</td><td class=\"topAlign\">";
- if (matchAhead(atom, Atom::ListItemRight))
- out() << "&nbsp;";
- }
- } else {
- out() << "<li>";
- }
- if (matchAhead(atom, Atom::ParaLeft))
- skipAhead = 1;
- break;
- case Atom::ListItemRight:
- if (atom->string() == ATOM_LIST_TAG) {
- out() << "</dd>\n";
- } else if (atom->string() == ATOM_LIST_VALUE) {
- out() << "</td></tr>\n";
- } else {
- out() << "</li>\n";
- }
- break;
- case Atom::ListRight:
- if (atom->string() == ATOM_LIST_BULLET) {
- out() << "</ul>\n";
- } else if (atom->string() == ATOM_LIST_TAG) {
- out() << "</dl>\n";
- } else if (atom->string() == ATOM_LIST_VALUE) {
- out() << "</table></div>\n";
- } else {
- out() << "</ol>\n";
- }
- break;
- case Atom::Nop:
- break;
- case Atom::ParaLeft:
- out() << "<p>";
- in_para = true;
- break;
- case Atom::ParaRight:
- endLink();
- if (in_para) {
- out() << "</p>\n";
- in_para = false;
- }
- // if (!matchAhead(atom, Atom::ListItemRight) && !matchAhead(atom, Atom::TableItemRight))
- // out() << "</p>\n";
- break;
- case Atom::QuotationLeft:
- out() << "<blockquote>";
- break;
- case Atom::QuotationRight:
- out() << "</blockquote>\n";
- break;
- case Atom::RawString:
- out() << atom->string();
- break;
- case Atom::SectionLeft:
- out() << "<a name=\"" << Doc::canonicalTitle(Text::sectionHeading(atom).toString())
- << "\"></a>" << divNavTop << '\n';
- break;
- case Atom::SectionRight:
- break;
- case Atom::SectionHeadingLeft: {
- int unit = atom->string().toInt() + hOffset(relative);
- out() << "<h" + QString::number(unit) + QLatin1Char(' ') << "id=\""
- << Doc::canonicalTitle(Text::sectionHeading(atom).toString()) << "\">";
- m_inSectionHeading = true;
- break;
- }
- case Atom::SectionHeadingRight:
- out() << "</h" + QString::number(atom->string().toInt() + hOffset(relative)) + ">\n";
- m_inSectionHeading = false;
- break;
- case Atom::SidebarLeft:
- Q_FALLTHROUGH();
- case Atom::SidebarRight:
- break;
- case Atom::String:
- if (m_inLink && !m_inContents && !m_inSectionHeading) {
- generateLink(atom, marker);
- } else {
- out() << protectEnc(atom->string());
- }
- break;
- case Atom::TableLeft: {
- QPair<QString, QString> pair = getTableWidthAttr(atom);
- QString attr = pair.second;
- QString width = pair.first;
-
- if (in_para) {
- out() << "</p>\n";
- in_para = false;
- }
-
- out() << R"(<div class="table"><table class=")" << attr << '"';
- if (!width.isEmpty())
- out() << " width=\"" << width << '"';
- out() << ">\n ";
- m_numTableRows = 0;
- } break;
- case Atom::TableRight:
- out() << "</table></div>\n";
- break;
- case Atom::TableHeaderLeft:
- out() << "<thead><tr class=\"qt-style\">";
- m_inTableHeader = true;
- break;
- case Atom::TableHeaderRight:
- out() << "</tr>";
- if (matchAhead(atom, Atom::TableHeaderLeft)) {
- skipAhead = 1;
- out() << "\n<tr class=\"qt-style\">";
- } else {
- out() << "</thead>\n";
- m_inTableHeader = false;
- }
- break;
- case Atom::TableRowLeft:
- if (!atom->string().isEmpty())
- out() << "<tr " << atom->string() << '>';
- else if (++m_numTableRows % 2 == 1)
- out() << R"(<tr valign="top" class="odd">)";
- else
- out() << R"(<tr valign="top" class="even">)";
- break;
- case Atom::TableRowRight:
- out() << "</tr>\n";
- break;
- case Atom::TableItemLeft: {
- if (m_inTableHeader)
- out() << "<th ";
- else
- out() << "<td ";
-
- for (int i = 0; i < atom->count(); ++i) {
- if (i > 0)
- out() << ' ';
- const QString &p = atom->string(i);
- if (p.contains('=')) {
- out() << p;
- } else {
- QStringList spans = p.split(QLatin1Char(','));
- if (spans.size() == 2) {
- if (spans.at(0) != "1")
- out() << " colspan=\"" << spans.at(0) << '"';
- if (spans.at(1) != "1")
- out() << " rowspan=\"" << spans.at(1) << '"';
- }
- }
- }
- out() << '>';
- if (matchAhead(atom, Atom::ParaLeft))
- skipAhead = 1;
- } break;
- case Atom::TableItemRight:
- if (m_inTableHeader)
- out() << "</th>";
- else {
- out() << "</td>";
- }
- if (matchAhead(atom, Atom::ParaLeft))
- skipAhead = 1;
- break;
- case Atom::TableOfContents:
- Q_FALLTHROUGH();
- case Atom::Keyword:
- break;
- case Atom::Target:
- out() << "<a name=\"" << Doc::canonicalTitle(atom->string()) << "\"></a>";
- break;
- case Atom::UnhandledFormat:
- out() << "<b class=\"redFont\">&lt;Missing HTML&gt;</b>";
- break;
- case Atom::UnknownCommand:
- out() << R"(<b class="redFont"><code>\)" << protectEnc(atom->string()) << "</code></b>";
- break;
- case Atom::QmlText:
- case Atom::EndQmlText:
- // don't do anything with these. They are just tags.
- break;
- case Atom::CodeQuoteArgument:
- case Atom::CodeQuoteCommand:
- case Atom::SnippetCommand:
- case Atom::SnippetIdentifier:
- case Atom::SnippetLocation:
- // no HTML output (ignore)
- break;
- default:
- unknownAtom(atom);
- }
- return skipAhead;
-}
-
-/*!
- Generate a reference page for the C++ class, namespace, or
- header file documented in \a node using the code \a marker
- provided.
- */
-void HtmlGenerator::generateCppReferencePage(Aggregate *aggregate, CodeMarker *marker)
-{
- QString title;
- QString rawTitle;
- QString fullTitle;
- NamespaceNode *ns = nullptr;
- SectionVector *summarySections = nullptr;
- SectionVector *detailsSections = nullptr;
-
- Sections sections(aggregate);
- QString word = aggregate->typeWord(true);
- QString templateDecl = aggregate->templateDecl();
- if (aggregate->isNamespace()) {
- rawTitle = aggregate->plainName();
- fullTitle = aggregate->plainFullName();
- title = rawTitle + " Namespace";
- ns = static_cast<NamespaceNode *>(aggregate);
- summarySections = &sections.stdSummarySections();
- detailsSections = &sections.stdDetailsSections();
- } else if (aggregate->isClassNode()) {
- rawTitle = aggregate->plainName();
- fullTitle = aggregate->plainFullName();
- title = rawTitle + QLatin1Char(' ') + word;
- summarySections = &sections.stdCppClassSummarySections();
- detailsSections = &sections.stdCppClassDetailsSections();
- } else if (aggregate->isHeader()) {
- title = fullTitle = rawTitle = aggregate->fullTitle();
- summarySections = &sections.stdSummarySections();
- detailsSections = &sections.stdDetailsSections();
- }
-
- Text subtitleText;
- if (rawTitle != fullTitle || !templateDecl.isEmpty()) {
- if (aggregate->isClassNode()) {
- if (!templateDecl.isEmpty())
- subtitleText << templateDecl + QLatin1Char(' ');
- subtitleText << aggregate->typeWord(false) + QLatin1Char(' ');
- const QStringList ancestors = fullTitle.split(QLatin1String("::"));
- for (const auto &a : ancestors) {
- if (a == rawTitle) {
- subtitleText << a;
- break;
- } else {
- subtitleText << Atom(Atom::AutoLink, a) << "::";
- }
- }
- } else {
- subtitleText << fullTitle;
- }
- }
-
- generateHeader(title, aggregate, marker);
- generateTableOfContents(aggregate, marker, summarySections);
- generateKeywordAnchors(aggregate);
- generateTitle(title, subtitleText, SmallSubTitle, aggregate, marker);
- if (ns && !ns->hasDoc() && ns->docNode()) {
- NamespaceNode *NS = ns->docNode();
- Text brief;
- brief << "The " << ns->name() << " namespace includes the following elements from module "
- << ns->tree()->camelCaseModuleName() << ". The full namespace is "
- << "documented in module " << NS->tree()->camelCaseModuleName()
- << Atom(Atom::LinkNode, CodeMarker::stringForNode(NS))
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << Atom(Atom::String, " here.")
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
- out() << "<p>";
- generateText(brief, ns, marker);
- out() << "</p>\n";
- } else
- generateBrief(aggregate, marker);
- if (!aggregate->parent()->isClassNode())
- generateRequisites(aggregate, marker);
- generateStatus(aggregate, marker);
- generateSince(aggregate, marker);
-
- out() << "<ul>\n";
-
- QString membersLink = generateAllMembersFile(Sections::allMembersSection(), marker);
- if (!membersLink.isEmpty())
- out() << "<li><a href=\"" << membersLink << "\">"
- << "List of all members, including inherited members</a></li>\n";
-
- QString obsoleteLink = generateObsoleteMembersFile(sections, marker);
- if (!obsoleteLink.isEmpty()) {
- out() << "<li><a href=\"" << obsoleteLink << "\">"
- << "Obsolete members</a></li>\n";
- }
-
- out() << "</ul>\n";
- generateThreadSafeness(aggregate, marker);
-
- bool needOtherSection = false;
-
- for (const auto &section : qAsConst(*summarySections)) {
- if (section.members().isEmpty() && section.reimplementedMembers().isEmpty()) {
- if (!section.inheritedMembers().isEmpty())
- needOtherSection = true;
- } else {
- if (!section.members().isEmpty()) {
- QString ref = registerRef(section.title().toLower());
- out() << "<a name=\"" << ref << "\"></a>" << divNavTop << "\n";
- out() << "<h2 id=\"" << ref << "\">" << protectEnc(section.title()) << "</h2>\n";
- generateSection(section.members(), aggregate, marker);
- }
- if (!section.reimplementedMembers().isEmpty()) {
- QString name = QString("Reimplemented ") + section.title();
- QString ref = registerRef(name.toLower());
- out() << "<a name=\"" << ref << "\"></a>" << divNavTop << "\n";
- out() << "<h2 id=\"" << ref << "\">" << protectEnc(name) << "</h2>\n";
- generateSection(section.reimplementedMembers(), aggregate, marker);
- }
-
- if (!section.inheritedMembers().isEmpty()) {
- out() << "<ul>\n";
- generateSectionInheritedList(section, aggregate);
- out() << "</ul>\n";
- }
- }
- }
-
- if (needOtherSection) {
- out() << "<h3>Additional Inherited Members</h3>\n"
- "<ul>\n";
-
- for (const auto &section : qAsConst(*summarySections)) {
- if (section.members().isEmpty() && !section.inheritedMembers().isEmpty())
- generateSectionInheritedList(section, aggregate);
- }
- out() << "</ul>\n";
- }
-
- QString detailsRef = registerRef("details");
- out() << "<a name=\"" << detailsRef << "\"></a>" << divNavTop << '\n';
-
- if (aggregate->doc().isEmpty()) {
- QString command = "documentation";
- if (aggregate->isClassNode())
- command = R"('\class' comment)";
- aggregate->location().warning(
- QStringLiteral("No %1 for '%2'").arg(command).arg(aggregate->plainSignature()));
- } else {
- generateExtractionMark(aggregate, DetailedDescriptionMark);
- out() << "<div class=\"descr\">\n" // QTBUG-9504
- << "<h2 id=\"" << detailsRef << "\">"
- << "Detailed Description"
- << "</h2>\n";
- generateBody(aggregate, marker);
- out() << "</div>\n"; // QTBUG-9504
- generateAlsoList(aggregate, marker);
- generateMaintainerList(aggregate, marker);
- generateExtractionMark(aggregate, EndMark);
- }
-
- for (const auto &section : qAsConst(*detailsSections)) {
- bool headerGenerated = false;
- if (section.isEmpty())
- continue;
-
- const QList<Node *> &members = section.members();
- for (const auto &member : members) {
- if (member->access() == Access::Private) // ### check necessary?
- continue;
- if (!headerGenerated) {
- if (!section.divClass().isEmpty())
- out() << "<div class=\"" << section.divClass() << "\">\n"; // QTBUG-9504
- out() << "<h2>" << protectEnc(section.title()) << "</h2>\n";
- headerGenerated = true;
- }
- if (!member->isClassNode())
- generateDetailedMember(member, aggregate, marker);
- else {
- out() << "<h3> class ";
- generateFullName(member, aggregate);
- out() << "</h3>";
- generateBrief(member, marker, aggregate);
- }
-
- QStringList names;
- names << member->name();
- if (member->isFunction()) {
- const auto *func = reinterpret_cast<const FunctionNode *>(member);
- if (func->isSomeCtor() || func->isDtor() || func->overloadNumber() != 0)
- names.clear();
- } else if (member->isProperty()) {
- const auto *prop = reinterpret_cast<const PropertyNode *>(member);
- if (!prop->getters().isEmpty() && !names.contains(prop->getters().first()->name()))
- names << prop->getters().first()->name();
- if (!prop->setters().isEmpty())
- names << prop->setters().first()->name();
- if (!prop->resetters().isEmpty())
- names << prop->resetters().first()->name();
- if (!prop->notifiers().isEmpty())
- names << prop->notifiers().first()->name();
- } else if (member->isEnumType()) {
- const auto *enume = reinterpret_cast<const EnumNode *>(member);
- if (enume->flagsType())
- names << enume->flagsType()->name();
- const auto &enumItemNameList = enume->doc().enumItemNames();
- const auto &omitEnumItemNameList = enume->doc().omitEnumItemNames();
- const auto items = QSet<QString>(enumItemNameList.cbegin(), enumItemNameList.cend())
- - QSet<QString>(omitEnumItemNameList.cbegin(), omitEnumItemNameList.cend());
- for (const QString &enumName : items) {
- names << plainCode(marker->markedUpEnumValue(enumName, enume));
- }
- }
- }
- if (headerGenerated && !section.divClass().isEmpty())
- out() << "</div>\n"; // QTBUG-9504
- }
- generateFooter(aggregate);
-}
-
-void HtmlGenerator::generateProxyPage(Aggregate *aggregate, CodeMarker *marker)
-{
- Q_ASSERT(aggregate->isProxyNode());
-
- QString title;
- QString rawTitle;
- QString fullTitle;
- Text subtitleText;
- SectionVector *summarySections = nullptr;
- SectionVector *detailsSections = nullptr;
-
- Sections sections(aggregate);
- rawTitle = aggregate->plainName();
- fullTitle = aggregate->plainFullName();
- title = rawTitle + " Proxy Page";
- summarySections = &sections.stdSummarySections();
- detailsSections = &sections.stdDetailsSections();
- generateHeader(title, aggregate, marker);
- generateTitle(title, subtitleText, SmallSubTitle, aggregate, marker);
- generateBrief(aggregate, marker);
- for (auto it = summarySections->constBegin(); it != summarySections->constEnd(); ++it) {
- if (!it->members().isEmpty()) {
- QString ref = registerRef(it->title().toLower());
- out() << "<a name=\"" << ref << "\"></a>" << divNavTop << "\n";
- out() << "<h2 id=\"" << ref << "\">" << protectEnc(it->title()) << "</h2>\n";
- generateSection(it->members(), aggregate, marker);
- }
- }
-
- QString detailsRef = registerRef("details");
- out() << "<a name=\"" << detailsRef << "\"></a>" << divNavTop << '\n';
-
- if (!aggregate->doc().isEmpty()) {
- generateExtractionMark(aggregate, DetailedDescriptionMark);
- out() << "<div class=\"descr\">\n" // QTBUG-9504
- << "<h2 id=\"" << detailsRef << "\">"
- << "Detailed Description"
- << "</h2>\n";
- generateBody(aggregate, marker);
- out() << "</div>\n"; // QTBUG-9504
- generateAlsoList(aggregate, marker);
- generateMaintainerList(aggregate, marker);
- generateExtractionMark(aggregate, EndMark);
- }
-
- for (const auto &section : qAsConst(*detailsSections)) {
- if (section.isEmpty())
- continue;
-
- if (!section.divClass().isEmpty())
- out() << "<div class=\"" << section.divClass() << "\">\n"; // QTBUG-9504
- out() << "<h2>" << protectEnc(section.title()) << "</h2>\n";
-
- const QList<Node *> &members = section.members();
- for (const auto &member : members) {
- if (!member->isPrivate()) { // ### check necessary?
- if (!member->isClassNode())
- generateDetailedMember(member, aggregate, marker);
- else {
- out() << "<h3> class ";
- generateFullName(member, aggregate);
- out() << "</h3>";
- generateBrief(member, marker, aggregate);
- }
-
- QStringList names;
- names << member->name();
- if (member->isFunction()) {
- const auto *func = reinterpret_cast<const FunctionNode *>(member);
- if (func->isSomeCtor() || func->isDtor() || func->overloadNumber() != 0)
- names.clear();
- } else if (member->isEnumType()) {
- const auto *enume = reinterpret_cast<const EnumNode *>(member);
- if (enume->flagsType())
- names << enume->flagsType()->name();
- const auto &enumItemNameList = enume->doc().enumItemNames();
- const auto &omitEnumItemNameList = enume->doc().omitEnumItemNames();
- const auto items =
- QSet<QString>(enumItemNameList.cbegin(), enumItemNameList.cend())
- - QSet<QString>(omitEnumItemNameList.cbegin(),
- omitEnumItemNameList.cend());
- for (const QString &enumName : items)
- names << plainCode(marker->markedUpEnumValue(enumName, enume));
- }
- }
- }
- if (!section.divClass().isEmpty())
- out() << "</div>\n"; // QTBUG-9504
- }
- generateFooter(aggregate);
-}
-
-/*!
- Generate the HTML page for a QML type. \qcn is the QML type.
- \marker is the code markeup object.
- */
-void HtmlGenerator::generateQmlTypePage(QmlTypeNode *qcn, CodeMarker *marker)
-{
- Generator::setQmlTypeContext(qcn);
- SubTitleSize subTitleSize = LargeSubTitle;
- QString htmlTitle = qcn->fullTitle();
- if (qcn->isJsType())
- htmlTitle += " JavaScript Type";
- else
- htmlTitle += " QML Type";
-
- generateHeader(htmlTitle, qcn, marker);
- Sections sections(qcn);
- generateTableOfContents(qcn, marker, &sections.stdQmlTypeSummarySections());
- marker = CodeMarker::markerForLanguage(QLatin1String("QML"));
- generateKeywordAnchors(qcn);
- generateTitle(htmlTitle, Text() << qcn->subtitle(), subTitleSize, qcn, marker);
- generateBrief(qcn, marker);
- generateQmlRequisites(qcn, marker);
-
- QString allQmlMembersLink = generateAllQmlMembersFile(sections, marker);
- QString obsoleteLink = generateObsoleteQmlMembersFile(sections, marker);
- if (!allQmlMembersLink.isEmpty() || !obsoleteLink.isEmpty()) {
- out() << "<ul>\n";
- if (!allQmlMembersLink.isEmpty()) {
- out() << "<li><a href=\"" << allQmlMembersLink << "\">"
- << "List of all members, including inherited members</a></li>\n";
- }
- if (!obsoleteLink.isEmpty()) {
- out() << "<li><a href=\"" << obsoleteLink << "\">"
- << "Obsolete members</a></li>\n";
- }
- out() << "</ul>\n";
- }
-
- const QList<Section> &stdQmlTypeSummarySections = sections.stdQmlTypeSummarySections();
- for (const auto &section : stdQmlTypeSummarySections) {
- if (!section.isEmpty()) {
- QString ref = registerRef(section.title().toLower());
- out() << "<a name=\"" << ref << "\"></a>" << divNavTop << '\n';
- out() << "<h2 id=\"" << ref << "\">" << protectEnc(section.title()) << "</h2>\n";
- generateQmlSummary(section.members(), qcn, marker);
- }
- }
-
- generateExtractionMark(qcn, DetailedDescriptionMark);
- QString detailsRef = registerRef("details");
- out() << "<a name=\"" << detailsRef << "\"></a>" << divNavTop << '\n';
- out() << "<h2 id=\"" << detailsRef << "\">"
- << "Detailed Description"
- << "</h2>\n";
- generateBody(qcn, marker);
- ClassNode *cn = qcn->classNode();
- if (cn)
- generateQmlText(cn->doc().body(), cn, marker, qcn->name());
- generateAlsoList(qcn, marker);
- generateExtractionMark(qcn, EndMark);
-
- const QList<Section> &stdQmlTypeDetailsSections = sections.stdQmlTypeDetailsSections();
- for (const auto &section : stdQmlTypeDetailsSections) {
- if (!section.isEmpty()) {
- out() << "<h2>" << protectEnc(section.title()) << "</h2>\n";
- const QList<Node *> &members = section.members();
- for (const auto member : members) {
- generateDetailedQmlMember(member, qcn, marker);
- out() << "<br/>\n";
- }
- }
- }
- generateFooter(qcn);
- Generator::setQmlTypeContext(nullptr);
-}
-
-/*!
- Generate the HTML page for the QML basic type represented
- by the QML basic type node \a qbtn.
- */
-void HtmlGenerator::generateQmlBasicTypePage(QmlBasicTypeNode *qbtn, CodeMarker *marker)
-{
- SubTitleSize subTitleSize = LargeSubTitle;
- QString htmlTitle = qbtn->fullTitle();
- if (qbtn->isJsType())
- htmlTitle += " JavaScript Basic Type";
- else
- htmlTitle += " QML Basic Type";
-
- marker = CodeMarker::markerForLanguage(QLatin1String("QML"));
-
- generateHeader(htmlTitle, qbtn, marker);
- Sections sections(qbtn);
- generateTableOfContents(qbtn, marker, &sections.stdQmlTypeSummarySections());
- generateKeywordAnchors(qbtn);
- generateTitle(htmlTitle, Text() << qbtn->subtitle(), subTitleSize, qbtn, marker);
-
- const QList<Section> &stdQmlTypeSummarySections = sections.stdQmlTypeSummarySections();
- for (const auto &section : stdQmlTypeSummarySections) {
- if (!section.isEmpty()) {
- QString ref = registerRef(section.title().toLower());
- out() << "<a name=\"" << ref << "\"></a>" << divNavTop << '\n';
- out() << "<h2 id=\"" << ref << "\">" << protectEnc(section.title()) << "</h2>\n";
- generateQmlSummary(section.members(), qbtn, marker);
- }
- }
-
- generateExtractionMark(qbtn, DetailedDescriptionMark);
- out() << R"(<div class="descr"> <a name=")" << registerRef("details")
- << "\"></a>\n"; // QTBUG-9504
-
- generateBody(qbtn, marker);
- out() << "</div>\n"; // QTBUG-9504
- generateAlsoList(qbtn, marker);
- generateExtractionMark(qbtn, EndMark);
-
- const QList<Section> &stdQmlTypeDetailsSections = sections.stdQmlTypeDetailsSections();
- for (const auto &section : stdQmlTypeDetailsSections) {
- if (!section.isEmpty()) {
- out() << "<h2>" << protectEnc(section.title()) << "</h2>\n";
- const QList<Node *> &members = section.members();
- for (const auto member : members) {
- generateDetailedQmlMember(member, qbtn, marker);
- out() << "<br/>\n";
- }
- }
- }
- generateFooter(qbtn);
-}
-
-/*!
- Generate the HTML page for an entity that doesn't map
- to any underlying parsable C++, QML, or Javascript element.
- */
-void HtmlGenerator::generatePageNode(PageNode *pn, CodeMarker *marker)
-{
- SubTitleSize subTitleSize = LargeSubTitle;
- QString fullTitle = pn->fullTitle();
-
- generateHeader(fullTitle, pn, marker);
- /*
- Generate the TOC for the new doc format.
- Don't generate a TOC for the home page.
- */
- if ((pn->name() != QLatin1String("index.html")))
- generateTableOfContents(pn, marker, nullptr);
-
- generateKeywordAnchors(pn);
- generateTitle(fullTitle, Text() << pn->subtitle(), subTitleSize, pn, marker);
- if (pn->isExample()) {
- generateBrief(pn, marker, nullptr, false);
- }
-
- generateExtractionMark(pn, DetailedDescriptionMark);
- out() << R"(<div class="descr"> <a name=")" << registerRef("details")
- << "\"></a>\n"; // QTBUG-9504
-
- generateBody(pn, marker);
- out() << "</div>\n"; // QTBUG-9504
- generateAlsoList(pn, marker);
- generateExtractionMark(pn, EndMark);
-
- generateFooter(pn);
-}
-
-/*!
- Generate the HTML page for a group, module, or QML module.
- */
-void HtmlGenerator::generateCollectionNode(CollectionNode *cn, CodeMarker *marker)
-{
- SubTitleSize subTitleSize = LargeSubTitle;
- QString fullTitle = cn->fullTitle();
- QString ref;
-
- generateHeader(fullTitle, cn, marker);
- generateTableOfContents(cn, marker, nullptr);
- generateKeywordAnchors(cn);
- generateTitle(fullTitle, Text() << cn->subtitle(), subTitleSize, cn, marker);
-
- // Generate brief for C++ modules, status for all modules.
- if (cn->genus() != Node::DOC && cn->genus() != Node::DontCare) {
- if (cn->isModule())
- generateBrief(cn, marker);
- generateStatus(cn, marker);
- generateSince(cn, marker);
- }
-
- if (cn->isModule()) {
- if (!cn->noAutoList()) {
- NodeMap nmm;
- cn->getMemberNamespaces(nmm);
- if (!nmm.isEmpty()) {
- ref = registerRef("namespaces");
- out() << "<a name=\"" << ref << "\"></a>" << divNavTop << '\n';
- out() << "<h2 id=\"" << ref << "\">Namespaces</h2>\n";
- generateAnnotatedList(cn, marker, nmm.values());
- }
- nmm.clear();
- cn->getMemberClasses(nmm);
- if (!nmm.isEmpty()) {
- ref = registerRef("classes");
- out() << "<a name=\"" << ref << "\"></a>" << divNavTop << '\n';
- out() << "<h2 id=\"" << ref << "\">Classes</h2>\n";
- generateAnnotatedList(cn, marker, nmm.values());
- }
- }
- }
-
- if (cn->isModule() && !cn->doc().briefText().isEmpty()) {
- generateExtractionMark(cn, DetailedDescriptionMark);
- ref = registerRef("details");
- out() << "<a name=\"" << ref << "\"></a>" << divNavTop << '\n';
- out() << "<div class=\"descr\">\n"; // QTBUG-9504
- out() << "<h2 id=\"" << ref << "\">"
- << "Detailed Description"
- << "</h2>\n";
- } else {
- generateExtractionMark(cn, DetailedDescriptionMark);
- out() << R"(<div class="descr"> <a name=")" << registerRef("details")
- << "\"></a>\n"; // QTBUG-9504
- }
-
- generateBody(cn, marker);
- out() << "</div>\n"; // QTBUG-9504
- generateAlsoList(cn, marker);
- generateExtractionMark(cn, EndMark);
-
- if (!cn->noAutoList()) {
- if (cn->isGroup() || cn->isQmlModule() || cn->isJsModule())
- generateAnnotatedList(cn, marker, cn->members());
- }
- generateFooter(cn);
-}
-
-/*!
- Generate the HTML page for a generic collection. This is usually
- a collection of C++ elements that are related to an element in
- a different module.
- */
-void HtmlGenerator::generateGenericCollectionPage(CollectionNode *cn, CodeMarker *marker)
-{
- SubTitleSize subTitleSize = LargeSubTitle;
- QString fullTitle = cn->name();
- QString ref;
-
- generateHeader(fullTitle, cn, marker);
- generateKeywordAnchors(cn);
- generateTitle(fullTitle, Text() << cn->subtitle(), subTitleSize, cn, marker);
-
- Text brief;
- brief << "Each function or type documented here is related to a class or "
- << "namespace that is documented in a different module. The reference "
- << "page for that class or namespace will link to the function or type "
- << "on this page.";
- out() << "<p>";
- generateText(brief, cn, marker);
- out() << "</p>\n";
-
- const QList<Node *> members = cn->members();
- for (const auto &member : members)
- generateDetailedMember(member, cn, marker);
-
- generateFooter(cn);
-}
-
-/*!
- Returns "html" for this subclass of Generator.
- */
-QString HtmlGenerator::fileExtension() const
-{
- return "html";
-}
-
-/*!
- Output navigation list in the html file.
- */
-void HtmlGenerator::generateNavigationBar(const QString &title, const Node *node,
- CodeMarker *marker, const QString &buildversion,
- bool tableItems)
-{
- if (m_noNavigationBar || node == nullptr)
- return;
-
- Text navigationbar;
-
- // Set list item types based on the navigation bar type
- Atom::AtomType itemLeft = tableItems ? Atom::TableItemLeft : Atom::ListItemLeft;
- Atom::AtomType itemRight = tableItems ? Atom::TableItemRight : Atom::ListItemRight;
-
- if (m_hometitle == title)
- return;
- if (!m_homepage.isEmpty())
- navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, m_homepage)
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << Atom(Atom::String, m_hometitle)
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom(itemRight);
- if (!m_landingpage.isEmpty() && m_landingtitle != title)
- navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, m_landingpage)
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << Atom(Atom::String, m_landingtitle)
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom(itemRight);
-
- if (node->isClassNode()) {
- if (!m_cppclassespage.isEmpty() && !m_cppclassestitle.isEmpty())
- navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, m_cppclassespage)
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << Atom(Atom::String, m_cppclassestitle)
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom(itemRight);
-
- if (!node->name().isEmpty())
- navigationbar << Atom(itemLeft) << Atom(Atom::String, node->name()) << Atom(itemRight);
- } else if (node->isQmlType() || node->isQmlBasicType() || node->isJsType()
- || node->isJsBasicType()) {
- if (!m_qmltypespage.isEmpty() && !m_qmltypestitle.isEmpty())
- navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, m_qmltypespage)
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << Atom(Atom::String, m_qmltypestitle)
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom(itemRight)
- << Atom(itemLeft) << Atom(Atom::String, title) << Atom(itemRight);
- } else {
- if (node->isAggregate()) {
- QStringList groups = static_cast<const Aggregate *>(node)->groupNames();
- if (groups.length() == 1) {
- const Node *groupNode =
- m_qdb->findNodeByNameAndType(QStringList(groups[0]), &Node::isGroup);
- if (groupNode && !groupNode->title().isEmpty()) {
- navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, groupNode->name())
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << Atom(Atom::String, groupNode->title())
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK)
- << Atom(itemRight);
- }
- }
- }
- if (!navigationbar.isEmpty()) {
- navigationbar << Atom(itemLeft) << Atom(Atom::String, title) << Atom(itemRight);
- }
- }
-
- generateText(navigationbar, node, marker);
-
- if (buildversion.isEmpty())
- return;
-
- navigationbar.clear();
-
- if (tableItems) {
- out() << "</tr></table><table class=\"buildversion\"><tr>\n"
- << R"(<td id="buildversion" width="100%" align="right">)";
- } else {
- out() << "<li id=\"buildversion\">";
- }
-
- // Link buildversion string to navigation.landingpage
- if (!m_landingpage.isEmpty() && m_landingtitle != title) {
- navigationbar << Atom(Atom::NavLink, m_landingpage)
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << Atom(Atom::String, buildversion)
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
- generateText(navigationbar, node, marker);
- } else {
- out() << buildversion;
- }
- if (tableItems)
- out() << "</td>\n";
- else
- out() << "</li>\n";
-}
-
-void HtmlGenerator::generateHeader(const QString &title, const Node *node, CodeMarker *marker)
-{
- out() << "<!DOCTYPE html>\n";
- out() << QString("<html lang=\"%1\">\n").arg(naturalLanguage);
- out() << "<head>\n";
- out() << " <meta charset=\"utf-8\">\n";
- if (node && !node->doc().location().isEmpty())
- out() << "<!-- " << node->doc().location().fileName() << " -->\n";
-
- // determine the rest of the <title> element content: "title | titleSuffix version"
- QString titleSuffix;
- if (!m_landingtitle.isEmpty()) {
- // for normal pages: "title | landingtitle version"
- titleSuffix = m_landingtitle;
- } else if (!m_hometitle.isEmpty()) {
- // for pages that set the homepage title but not landing page title:
- // "title | hometitle version"
- if (title != m_hometitle)
- titleSuffix = m_hometitle;
- } else if (!m_project.isEmpty()) {
- // for projects outside of Qt or Qt 5: "title | project version"
- if (title != m_project)
- titleSuffix = m_project;
- } else
- // default: "title | Qt version"
- titleSuffix = QLatin1String("Qt ");
-
- if (title == titleSuffix)
- titleSuffix.clear();
-
- QString divider;
- if (!titleSuffix.isEmpty() && !title.isEmpty())
- divider = QLatin1String(" | ");
-
- // Generating page title
- out() << " <title>" << protectEnc(title) << divider << titleSuffix;
-
- // append a full version to the suffix if neither suffix nor title
- // include (a prefix of) version information
- QVersionNumber projectVersion = QVersionNumber::fromString(m_qdb->version());
- if (!projectVersion.isNull()) {
- QVersionNumber titleVersion;
- QRegularExpression re(QLatin1String(R"(\d+\.\d+)"));
- const QString &versionedTitle = titleSuffix.isEmpty() ? title : titleSuffix;
- auto match = re.match(versionedTitle);
- if (match.hasMatch())
- titleVersion = QVersionNumber::fromString(match.captured());
- if (titleVersion.isNull() || !titleVersion.isPrefixOf(projectVersion))
- out() << QLatin1Char(' ') << projectVersion.toString();
- }
- out() << "</title>\n";
-
- // Include style sheet and script links.
- out() << m_headerStyles;
- out() << m_headerScripts;
- if (m_endHeader.isEmpty())
- out() << "</head>\n<body>\n";
- else
- out() << m_endHeader;
-
- out() << QString(m_postHeader).replace("\\" + COMMAND_VERSION, m_qdb->version());
- bool usingTable = m_postHeader.trimmed().endsWith(QLatin1String("<tr>"));
- generateNavigationBar(title, node, marker, m_buildversion, usingTable);
- out() << QString(m_postPostHeader).replace("\\" + COMMAND_VERSION, m_qdb->version());
-
- m_navigationLinks.clear();
- refMap.clear();
-
- if (node && !node->links().empty()) {
- QPair<QString, QString> linkPair;
- QPair<QString, QString> anchorPair;
- const Node *linkNode;
- bool useSeparator = false;
-
- if (node->links().contains(Node::PreviousLink)) {
- linkPair = node->links()[Node::PreviousLink];
- linkNode = m_qdb->findNodeForTarget(linkPair.first, node);
- if (linkNode == nullptr && !noLinkErrors())
- node->doc().location().warning(
- QStringLiteral("Cannot link to '%1'").arg(linkPair.first));
- if (linkNode == nullptr || linkNode == node)
- anchorPair = linkPair;
- else
- anchorPair = anchorForNode(linkNode);
-
- out() << R"( <link rel="prev" href=")" << anchorPair.first << "\" />\n";
-
- m_navigationLinks += R"(<a class="prevPage" href=")" + anchorPair.first + "\">";
- if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty())
- m_navigationLinks += protect(anchorPair.second);
- else
- m_navigationLinks += protect(linkPair.second);
- m_navigationLinks += "</a>\n";
- useSeparator = !m_navigationSeparator.isEmpty();
- }
- if (node->links().contains(Node::NextLink)) {
- linkPair = node->links()[Node::NextLink];
- linkNode = m_qdb->findNodeForTarget(linkPair.first, node);
- if (linkNode == nullptr && !noLinkErrors())
- node->doc().location().warning(
- QStringLiteral("Cannot link to '%1'").arg(linkPair.first));
- if (linkNode == nullptr || linkNode == node)
- anchorPair = linkPair;
- else
- anchorPair = anchorForNode(linkNode);
-
- out() << R"( <link rel="next" href=")" << anchorPair.first << "\" />\n";
-
- if (useSeparator)
- m_navigationLinks += m_navigationSeparator;
-
- m_navigationLinks += R"(<a class="nextPage" href=")" + anchorPair.first + "\">";
- if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty())
- m_navigationLinks += protect(anchorPair.second);
- else
- m_navigationLinks += protect(linkPair.second);
- m_navigationLinks += "</a>\n";
- }
- if (node->links().contains(Node::StartLink)) {
- linkPair = node->links()[Node::StartLink];
- linkNode = m_qdb->findNodeForTarget(linkPair.first, node);
- if (linkNode == nullptr && !noLinkErrors())
- node->doc().location().warning(
- QStringLiteral("Cannot link to '%1'").arg(linkPair.first));
- if (linkNode == nullptr || linkNode == node)
- anchorPair = linkPair;
- else
- anchorPair = anchorForNode(linkNode);
- out() << R"( <link rel="start" href=")" << anchorPair.first << "\" />\n";
- }
- }
-
- if (node && !node->links().empty())
- out() << "<p class=\"naviNextPrevious headerNavi\">\n" << m_navigationLinks << "</p><p/>\n";
-}
-
-void HtmlGenerator::generateTitle(const QString &title, const Text &subtitle,
- SubTitleSize subTitleSize, const Node *relative,
- CodeMarker *marker)
-{
- out() << QString(m_prologue).replace("\\" + COMMAND_VERSION, m_qdb->version());
- if (!title.isEmpty())
- out() << "<h1 class=\"title\">" << protectEnc(title) << "</h1>\n";
- if (!subtitle.isEmpty()) {
- out() << "<span";
- if (subTitleSize == SmallSubTitle)
- out() << " class=\"small-subtitle\">";
- else
- out() << " class=\"subtitle\">";
- generateText(subtitle, relative, marker);
- out() << "</span>\n";
- }
-}
-
-void HtmlGenerator::generateFooter(const Node *node)
-{
- if (node && !node->links().empty())
- out() << "<p class=\"naviNextPrevious footerNavi\">\n" << m_navigationLinks << "</p>\n";
-
- out() << QString(m_footer).replace("\\" + COMMAND_VERSION, m_qdb->version())
- << QString(m_address).replace("\\" + COMMAND_VERSION, m_qdb->version());
-
- out() << "</body>\n";
- out() << "</html>\n";
-}
-
-/*!
-Lists the required imports and includes in a table.
-The number of rows is known.
-*/
-void HtmlGenerator::generateRequisites(Aggregate *aggregate, CodeMarker *marker)
-{
- QMap<QString, Text> requisites;
- Text text;
-
- const QString headerText = "Header";
- const QString sinceText = "Since";
- const QString inheritedBytext = "Inherited By";
- const QString inheritsText = "Inherits";
- const QString instantiatedByText = "Instantiated By";
- const QString qtVariableText = "qmake";
- const QString cmakeText = "CMake";
-
- // The order of the requisites matter
- const QStringList requisiteorder { headerText, cmakeText, qtVariableText, sinceText,
- instantiatedByText, inheritsText, inheritedBytext };
-
- addIncludeFilesToMap(aggregate, marker, requisites, &text, headerText);
- addSinceToMap(aggregate, requisites, &text, sinceText);
-
- if (aggregate->isClassNode() || aggregate->isNamespace()) {
- addCMakeInfoToMap(aggregate, requisites, &text, cmakeText);
- addQtVariableToMap(aggregate, requisites, &text, qtVariableText);
- }
-
- if (aggregate->isClassNode()) {
- auto *classe = dynamic_cast<ClassNode *>(aggregate);
- if (classe->qmlElement() != nullptr && !classe->isInternal())
- addInstantiatedByToMap(requisites, &text, instantiatedByText, classe);
-
- addInheritsToMap(requisites, &text, inheritsText, classe);
- addInheritedByToMap(requisites, &text, inheritedBytext, classe);
- }
-
- if (!requisites.isEmpty()) {
- // generate the table
- generateTheTable(requisiteorder, requisites, headerText, aggregate, marker);
- }
-}
-
-/*!
- * \internal
- */
-void HtmlGenerator::generateTheTable(const QStringList &requisiteOrder,
- const QMap<QString, Text> &requisites,
- const QString &headerText, const Aggregate *aggregate,
- CodeMarker *marker)
-{
- out() << "<div class=\"table\"><table class=\"alignedsummary\">\n";
-
- for (auto it = requisiteOrder.constBegin(); it != requisiteOrder.constEnd(); ++it) {
-
- if (requisites.contains(*it)) {
- out() << "<tr>"
- << "<td class=\"memItemLeft rightAlign topAlign\"> " << *it
- << ":"
- "</td><td class=\"memItemRight bottomAlign\"> ";
-
- if (*it == headerText)
- out() << requisites.value(*it).toString();
- else
- generateText(requisites.value(*it), aggregate, marker);
- out() << "</td></tr>";
- }
- }
- out() << "</table></div>";
-}
-
-/*!
- * \internal
- * Adds inherited by information to the map.
- */
-void HtmlGenerator::addInheritedByToMap(QMap<QString, Text> &requisites, Text *text,
- const QString &inheritedBytext, ClassNode *classe)
-{
- if (!classe->derivedClasses().isEmpty()) {
- text->clear();
- *text << Atom::ParaLeft;
- int count = appendSortedNames(*text, classe, classe->derivedClasses());
- *text << Atom::ParaRight;
- if (count > 0)
- requisites.insert(inheritedBytext, *text);
- }
-}
-
-/*!
- * \internal
- * Adds base classes to the map.
- */
-void HtmlGenerator::addInheritsToMap(QMap<QString, Text> &requisites, Text *text,
- const QString &inheritsText, ClassNode *classe)
-{
- if (!classe->baseClasses().isEmpty()) {
- int index = 0;
- text->clear();
- const auto baseClasses = classe->baseClasses();
- for (const auto &cls : baseClasses) {
- if (cls.m_node) {
- appendFullName(*text, cls.m_node, classe);
-
- if (cls.m_access == Access::Protected) {
- *text << " (protected)";
- } else if (cls.m_access == Access::Private) {
- *text << " (private)";
- }
- *text << comma(index++, classe->baseClasses().count());
- }
- }
- *text << Atom::ParaRight;
- if (index > 0)
- requisites.insert(inheritsText, *text);
- }
-}
-
-/*!
- * \internal
- * Add the instantiated by information to the map.
- */
-void HtmlGenerator::addInstantiatedByToMap(QMap<QString, Text> &requisites, Text *text,
- const QString &instantiatedByText,
- ClassNode *classe) const
-{
- if (text != nullptr) {
- text->clear();
- *text << Atom(Atom::LinkNode, CodeMarker::stringForNode(classe->qmlElement()))
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << Atom(Atom::String, classe->qmlElement()->name())
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
- requisites.insert(instantiatedByText, *text);
- }
-}
-
-/*!
- * \internal
- * Adds the CMake package and link library information to the map.
- */
-void HtmlGenerator::addCMakeInfoToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites,
- Text *text, const QString &CMakeInfo) const
-{
- if (!aggregate->physicalModuleName().isEmpty() && text != nullptr) {
- const CollectionNode *cn =
- m_qdb->getCollectionNode(aggregate->physicalModuleName(), Node::Module);
- if (cn && !cn->qtCMakeComponent().isEmpty()) {
- text->clear();
- const auto qtMajorVersion = QString::number(QT_VERSION_MAJOR);
- const QString findPackageText = "find_package(Qt" + qtMajorVersion + " COMPONENT "
- + cn->qtCMakeComponent() + ")";
- const QString targetLinkLibrariesText =
- "target_link_libraries(mytarget PUBLIC Qt::" + cn->qtCMakeComponent() + ")";
- const Atom lineBreak = Atom(Atom::RawString, " <br/>\n");
- *text << findPackageText << lineBreak << targetLinkLibrariesText;
- requisites.insert(CMakeInfo, *text);
- }
- }
-}
-
-/*!
- * \internal
- * Adds the Qt variable (from the \\qtvariable command) to the map.
- */
-void HtmlGenerator::addQtVariableToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites,
- Text *text, const QString &qtVariableText) const
-{
- if (!aggregate->physicalModuleName().isEmpty()) {
- const CollectionNode *cn =
- m_qdb->getCollectionNode(aggregate->physicalModuleName(), Node::Module);
-
- if (cn && !cn->qtVariable().isEmpty()) {
- text->clear();
- *text << "QT += " + cn->qtVariable();
- requisites.insert(qtVariableText, *text);
- }
- }
-}
-
-/*!
- * \internal
- * Adds the since information (from the \\since command) to the map.
- *
- */
-void HtmlGenerator::addSinceToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites,
- Text *text, const QString &sinceText) const
-{
- if (!aggregate->since().isEmpty() && text != nullptr) {
- text->clear();
- *text << formatSince(aggregate) << Atom::ParaRight;
- requisites.insert(sinceText, *text);
- }
-}
-
-/*!
- * \internal
- * Adds the includes (from the \\includefile command) to the map.
- */
-void HtmlGenerator::addIncludeFilesToMap(const Aggregate *aggregate, CodeMarker *marker,
- QMap<QString, Text> &requisites, Text *text,
- const QString &headerText)
-{
- if (!aggregate->includeFiles().isEmpty() && text != nullptr) {
- text->clear();
- *text << highlightedCode(
- indent(m_codeIndent, marker->markedUpIncludes(aggregate->includeFiles())),
- aggregate);
- requisites.insert(headerText, *text);
- }
-}
-
-/*!
-Lists the required imports and includes in a table.
-The number of rows is known.
-*/
-void HtmlGenerator::generateQmlRequisites(QmlTypeNode *qcn, CodeMarker *marker)
-{
- if (qcn == nullptr)
- return;
- QMap<QString, Text> requisites;
- Text text;
-
- const QString importText = "Import Statement:";
- const QString sinceText = "Since:";
- const QString inheritedBytext = "Inherited By:";
- const QString inheritsText = "Inherits:";
- const QString instantiatesText = "Instantiates:";
-
- // add the module name and version to the map
- QString logicalModuleVersion;
- const CollectionNode *collection = qcn->logicalModule();
-
- // skip import statement of \internal collections
- if (!collection || !collection->isInternal() || m_showInternal) {
- logicalModuleVersion =
- collection ? collection->logicalModuleVersion() : qcn->logicalModuleVersion();
-
- if (logicalModuleVersion.isEmpty() || qcn->logicalModuleName().isEmpty())
- qcn->doc().location().warning(QStringLiteral("Could not resolve QML import "
- "statement for type '%1'")
- .arg(qcn->name()),
- QStringLiteral("Maybe you forgot to use the "
- "'\\%1' command?")
- .arg(COMMAND_INQMLMODULE));
-
- text.clear();
- text << "import " + qcn->logicalModuleName() + QLatin1Char(' ') + logicalModuleVersion;
- requisites.insert(importText, text);
- }
-
- // add the since and project into the map
- if (!qcn->since().isEmpty()) {
- text.clear();
- text << formatSince(qcn) << Atom::ParaRight;
- requisites.insert(sinceText, text);
- }
-
- // add the instantiates to the map
- ClassNode *cn = qcn->classNode();
- if (cn && !cn->isInternal()) {
- text.clear();
- text << Atom(Atom::LinkNode, CodeMarker::stringForNode(qcn));
- text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK);
- 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);
- }
-
- // add the inherits to the map
- QmlTypeNode *base = qcn->qmlBaseNode();
- while (base && base->isInternal()) {
- base = base->qmlBaseNode();
- }
- if (base) {
- text.clear();
- text << Atom::ParaLeft << Atom(Atom::LinkNode, CodeMarker::stringForNode(base))
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << Atom(Atom::String, base->name())
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom::ParaRight;
- requisites.insert(inheritsText, text);
- }
-
- // add the inherited-by to the map
- NodeList subs;
- QmlTypeNode::subclasses(qcn, subs);
- if (!subs.isEmpty()) {
- text.clear();
- text << Atom::ParaLeft;
- int count = appendSortedQmlNames(text, qcn, subs);
- text << Atom::ParaRight;
- if (count > 0)
- requisites.insert(inheritedBytext, text);
- }
-
- // The order of the requisites matter
- const QStringList requisiteorder { importText, sinceText, instantiatesText, inheritsText,
- inheritedBytext };
-
- if (!requisites.isEmpty()) {
- // generate the table
- out() << "<div class=\"table\"><table class=\"alignedsummary\">\n";
- for (const auto &requisite : requisiteorder) {
-
- if (requisites.contains(requisite)) {
- out() << "<tr>"
- << "<td class=\"memItemLeft rightAlign topAlign\"> " << requisite
- << "</td><td class=\"memItemRight bottomAlign\"> ";
-
- if (requisite == importText)
- out() << requisites.value(requisite).toString();
- else
- generateText(requisites.value(requisite), qcn, marker);
- out() << "</td></tr>";
- }
- }
- out() << "</table></div>";
- }
-}
-
-void HtmlGenerator::generateBrief(const Node *node, CodeMarker *marker, const Node *relative,
- bool addLink)
-{
- Text brief = node->doc().briefText();
-
- if (!brief.isEmpty()) {
- if (!brief.lastAtom()->string().endsWith('.')) {
- brief << Atom(Atom::String, ".");
- node->doc().location().warning(
- QStringLiteral("'\\brief' statement does not end with a full stop."));
- }
- generateExtractionMark(node, BriefMark);
- out() << "<p>";
- generateText(brief, node, marker);
-
- if (addLink) {
- if (!relative || node == relative)
- out() << " <a href=\"#";
- else
- out() << " <a href=\"" << linkForNode(node, relative) << '#';
- out() << registerRef("details") << "\">More...</a>";
- }
-
- out() << "</p>\n";
- generateExtractionMark(node, EndMark);
- }
-}
-
-/*!
- Revised for the new doc format.
- Generates a table of contents beginning at \a node.
- */
-void HtmlGenerator::generateTableOfContents(const Node *node, CodeMarker *marker,
- QList<Section> *sections)
-{
- QList<Atom *> toc;
- if (node->doc().hasTableOfContents())
- toc = node->doc().tableOfContents();
- if (tocDepth == 0 || (toc.isEmpty() && !sections && !node->isModule())) {
- generateSidebar();
- return;
- }
-
- int sectionNumber = 1;
- int detailsBase = 0;
-
- // disable nested links in table of contents
- m_inContents = true;
- m_inLink = true;
-
- out() << "<div class=\"sidebar\">\n";
- out() << "<div class=\"toc\">\n";
- out() << "<h3><a name=\"toc\">Contents</a></h3>\n";
- out() << "<ul>\n";
-
- if (node->isModule()) {
- if (!static_cast<const CollectionNode *>(node)->noAutoList()) {
- if (node->hasNamespaces()) {
- out() << "<li class=\"level" << sectionNumber << "\"><a href=\"#"
- << registerRef("namespaces") << "\">Namespaces</a></li>\n";
- }
- if (node->hasClasses()) {
- out() << "<li class=\"level" << sectionNumber << "\"><a href=\"#"
- << registerRef("classes") << "\">Classes</a></li>\n";
- }
- }
- out() << "<li class=\"level" << sectionNumber << "\"><a href=\"#" << registerRef("details")
- << "\">Detailed Description</a></li>\n";
- for (const auto &entry : qAsConst(toc)) {
- if (entry->string().toInt() == 1) {
- detailsBase = 1;
- break;
- }
- }
- } else if (sections
- && (node->isClassNode() || node->isNamespace() || node->isQmlType()
- || node->isJsType())) {
- for (const auto &section : qAsConst(*sections)) {
- if (!section.members().isEmpty()) {
- out() << "<li class=\"level" << sectionNumber << "\"><a href=\"#"
- << registerRef(section.plural()) << "\">" << section.title() << "</a></li>\n";
- }
- if (!section.reimplementedMembers().isEmpty()) {
- QString ref = QString("Reimplemented ") + section.plural();
- out() << "<li class=\"level" << sectionNumber << "\"><a href=\"#"
- << registerRef(ref.toLower()) << "\">"
- << QString("Reimplemented ") + section.title() << "</a></li>\n";
- }
- }
- if (!node->isNamespace() || node->hasDoc()) {
- out() << "<li class=\"level" << sectionNumber << "\"><a href=\"#"
- << registerRef("details") << "\">Detailed Description</a></li>\n";
- }
- for (const auto &entry : toc) {
- if (entry->string().toInt() == 1) {
- detailsBase = 1;
- break;
- }
- }
- }
-
- for (const auto &atom : toc) {
- sectionNumber = atom->string().toInt() + detailsBase;
- // restrict the ToC depth to the one set by the HTML.tocdepth variable or
- // print all levels if tocDepth is not set.
- if (sectionNumber <= tocDepth || tocDepth < 0) {
- int numAtoms;
- Text headingText = Text::sectionHeading(atom);
- QString s = headingText.toString();
- out() << "<li class=\"level" << sectionNumber << "\">";
- out() << "<a href=\"" << '#' << Doc::canonicalTitle(s) << "\">";
- generateAtomList(headingText.firstAtom(), node, marker, true, numAtoms);
- out() << "</a></li>\n";
- }
- }
- out() << "</ul>\n";
- out() << "</div>\n";
- out() << R"(<div class="sidebar-content" id="sidebar-content"></div>)";
- out() << "</div>\n";
- m_inContents = false;
- m_inLink = false;
-}
-
-/*!
- Outputs a placeholder div where the style can add customized sidebar content.
- */
-void HtmlGenerator::generateSidebar()
-{
- out() << "<div class=\"sidebar\">";
- out() << R"(<div class="sidebar-content" id="sidebar-content"></div>)";
- out() << "</div>\n";
-}
-
-QString HtmlGenerator::generateAllMembersFile(const Section &section, CodeMarker *marker)
-{
- if (section.isEmpty())
- return QString();
-
- const Aggregate *aggregate = section.aggregate();
- QString fileName = appendObsoleteToFileBase(aggregate) + "-members." + fileExtension();
- beginSubPage(aggregate, fileName);
- QString title = "List of All Members for " + aggregate->name();
- generateHeader(title, aggregate, marker);
- generateSidebar();
- generateTitle(title, Text(), SmallSubTitle, aggregate, marker);
- out() << "<p>This is the complete list of members for ";
- generateFullName(aggregate, nullptr);
- out() << ", including inherited members.</p>\n";
-
- generateSectionList(section, aggregate, marker);
-
- generateFooter();
- endSubPage();
- return fileName;
-}
-
-/*!
- This function creates an html page on which are listed all
- the members of the QML class used to generte the \a sections,
- including the inherited members. The \a marker is used for
- formatting stuff.
- */
-QString HtmlGenerator::generateAllQmlMembersFile(const Sections &sections, CodeMarker *marker)
-{
-
- if (sections.allMembersSection().isEmpty())
- return QString();
-
- const Aggregate *aggregate = sections.aggregate();
- QString fileName = appendObsoleteToFileBase(aggregate) + "-members." + fileExtension();
- beginSubPage(aggregate, fileName);
- QString title = "List of All Members for " + aggregate->name();
- generateHeader(title, aggregate, marker);
- generateSidebar();
- generateTitle(title, Text(), SmallSubTitle, aggregate, marker);
- out() << "<p>This is the complete list of members for ";
- generateFullName(aggregate, nullptr);
- out() << ", including inherited members.</p>\n";
-
- ClassKeysNodesList &cknl = sections.allMembersSection().classKeysNodesList();
- if (!cknl.isEmpty()) {
- for (int i = 0; i < cknl.size(); i++) {
- ClassKeysNodes *ckn = cknl[i];
- const QmlTypeNode *qcn = ckn->first;
- KeysAndNodes &kn = ckn->second;
- QStringList &keys = kn.first;
- NodeVector &nodes = kn.second;
- if (nodes.isEmpty())
- continue;
- if (i != 0) {
- out() << "<p>The following members are inherited from ";
- generateFullName(qcn, nullptr);
- out() << ".</p>\n";
- }
- out() << "<ul>\n";
- for (int j = 0; j < keys.size(); j++) {
- Node *node = nodes[j];
- if (node->access() == Access::Private || node->isInternal())
- continue;
- if (node->isSharingComment() && node->sharedCommentNode()->isPropertyGroup())
- continue;
-
- std::function<void(Node *)> generate = [&](Node *n) {
- out() << "<li class=\"fn\">";
- generateQmlItem(n, aggregate, marker, true);
- if (n->isDefault())
- out() << " [default]";
- else if (n->isAttached())
- out() << " [attached]";
- // Indent property group members
- if (n->isPropertyGroup()) {
- out() << "<ul>\n";
- const QList<Node *> &collective =
- static_cast<SharedCommentNode *>(n)->collective();
- std::for_each(collective.begin(), collective.end(), generate);
- out() << "</ul>\n";
- }
- out() << "</li>\n";
- };
- generate(node);
- }
- out() << "</ul>\n";
- }
- }
-
- generateFooter();
- endSubPage();
- return fileName;
-}
-
-QString HtmlGenerator::generateObsoleteMembersFile(const Sections &sections, CodeMarker *marker)
-{
- SectionPtrVector summary_spv;
- SectionPtrVector details_spv;
- if (!sections.hasObsoleteMembers(&summary_spv, &details_spv))
- return QString();
-
- Aggregate *aggregate = sections.aggregate();
- QString title = "Obsolete Members for " + aggregate->name();
- QString fileName = appendObsoleteToFileBase(aggregate) + "-obsolete." + fileExtension();
- QString link;
- if (useOutputSubdirs() && !Generator::outputSubdir().isEmpty())
- link = QString("../" + Generator::outputSubdir() + QLatin1Char('/'));
- link += fileName;
- aggregate->setObsoleteLink(link);
-
- beginSubPage(aggregate, fileName);
- generateHeader(title, aggregate, marker);
- generateSidebar();
- generateTitle(title, Text(), SmallSubTitle, aggregate, marker);
-
- out() << "<p><b>The following members of class "
- << "<a href=\"" << linkForNode(aggregate, nullptr) << "\">"
- << protectEnc(aggregate->name()) << "</a>"
- << " are obsolete.</b> "
- << "They are provided to keep old source code working. "
- << "We strongly advise against using them in new code.</p>\n";
-
- for (const auto &section : summary_spv) {
- out() << "<h2>" << protectEnc(section->title()) << "</h2>\n";
- generateSectionList(*section, aggregate, marker, Section::Obsolete);
- }
-
- for (const auto &section : details_spv) {
- out() << "<h2>" << protectEnc(section->title()) << "</h2>\n";
-
- const NodeVector &members = section->obsoleteMembers();
- for (const auto &member : members) {
- if (member->access() != Access::Private)
- generateDetailedMember(member, aggregate, marker);
- }
- }
-
- generateFooter();
- endSubPage();
- return fileName;
-}
-
-/*!
- Generates a separate file where obsolete members of the QML
- type \a qcn are listed. The \a marker is used to generate
- the section lists, which are then traversed and output here.
-
- Note that this function currently only handles correctly the
- case where \a status is \c {Section::Obsolete}.
- */
-QString HtmlGenerator::generateObsoleteQmlMembersFile(const Sections &sections, CodeMarker *marker)
-{
- SectionPtrVector summary_spv;
- SectionPtrVector details_spv;
- if (!sections.hasObsoleteMembers(&summary_spv, &details_spv))
- return QString();
-
- Aggregate *aggregate = sections.aggregate();
- QString title = "Obsolete Members for " + aggregate->name();
- QString fileName = appendObsoleteToFileBase(aggregate) + "-obsolete." + fileExtension();
- QString link;
- if (useOutputSubdirs() && !Generator::outputSubdir().isEmpty())
- link = QString("../" + Generator::outputSubdir() + QLatin1Char('/'));
- link += fileName;
- aggregate->setObsoleteLink(link);
-
- beginSubPage(aggregate, fileName);
- generateHeader(title, aggregate, marker);
- generateSidebar();
- generateTitle(title, Text(), SmallSubTitle, aggregate, marker);
-
- out() << "<p><b>The following members of QML type "
- << "<a href=\"" << linkForNode(aggregate, nullptr) << "\">"
- << protectEnc(aggregate->name()) << "</a>"
- << " are obsolete.</b> "
- << "They are provided to keep old source code working. "
- << "We strongly advise against using them in new code.</p>\n";
-
- for (const auto &section : summary_spv) {
- QString ref = registerRef(section->title().toLower());
- out() << "<a name=\"" << ref << "\"></a>" << divNavTop << '\n';
- out() << "<h2 id=\"" << ref << "\">" << protectEnc(section->title()) << "</h2>\n";
- generateQmlSummary(section->obsoleteMembers(), aggregate, marker);
- }
-
- for (const auto &section : details_spv) {
- out() << "<h2>" << protectEnc(section->title()) << "</h2>\n";
- const NodeVector &members = section->obsoleteMembers();
- for (const auto &member : members) {
- generateDetailedQmlMember(member, aggregate, marker);
- out() << "<br/>\n";
- }
- }
-
- generateFooter();
- endSubPage();
- return fileName;
-}
-
-void HtmlGenerator::generateClassHierarchy(const Node *relative, NodeMultiMap &classMap)
-{
- if (classMap.isEmpty())
- return;
-
- NodeMap topLevel;
- for (const auto &it : classMap) {
- auto *classe = static_cast<ClassNode *>(it);
- if (classe->baseClasses().isEmpty())
- topLevel.insert(classe->name(), classe);
- }
-
- QStack<NodeMap> stack;
- stack.push(topLevel);
-
- out() << "<ul>\n";
- while (!stack.isEmpty()) {
- if (stack.top().isEmpty()) {
- stack.pop();
- out() << "</ul>\n";
- } else {
- ClassNode *child = static_cast<ClassNode *>(*stack.top().begin());
- out() << "<li>";
- generateFullName(child, relative);
- out() << "</li>\n";
- stack.top().erase(stack.top().begin());
-
- NodeMap newTop;
- const auto derivedClasses = child->derivedClasses();
- for (const RelatedClass &d : derivedClasses) {
- if (d.m_node && d.m_node->isInAPI())
- newTop.insert(d.m_node->name(), d.m_node);
- }
- if (!newTop.isEmpty()) {
- stack.push(newTop);
- out() << "<ul>\n";
- }
- }
- }
-}
-
-/*!
- Outputs an annotated list of the nodes in \a unsortedNodes.
- A two-column table is output.
- */
-void HtmlGenerator::generateAnnotatedList(const Node *relative, CodeMarker *marker,
- const NodeList &unsortedNodes)
-{
- if (unsortedNodes.isEmpty() || relative == nullptr)
- return;
-
- NodeMultiMap nmm;
- bool allInternal = true;
- for (auto *node : unsortedNodes) {
- if (!node->isInternal() && !node->isObsolete()) {
- allInternal = false;
- nmm.insert(node->fullName(relative), node);
- }
- }
- if (allInternal)
- return;
- out() << "<div class=\"table\"><table class=\"annotated\">\n";
- int row = 0;
- NodeList nodes = nmm.values();
- std::sort(nodes.begin(), nodes.end(), Node::nodeNameLessThan);
-
- for (const auto *node : qAsConst(nodes)) {
- if (++row % 2 == 1)
- out() << "<tr class=\"odd topAlign\">";
- else
- out() << "<tr class=\"even topAlign\">";
- out() << "<td class=\"tblName\"><p>";
- generateFullName(node, relative);
- out() << "</p></td>";
-
- if (!node->isTextPageNode()) {
- Text brief = node->doc().trimmedBriefText(node->name());
- if (!brief.isEmpty()) {
- out() << "<td class=\"tblDescr\"><p>";
- generateText(brief, node, marker);
- out() << "</p></td>";
- } else if (!node->reconstitutedBrief().isEmpty()) {
- out() << "<td class=\"tblDescr\"><p>";
- out() << node->reconstitutedBrief();
- out() << "</p></td>";
- }
- } else {
- out() << "<td class=\"tblDescr\"><p>";
- if (!node->reconstitutedBrief().isEmpty()) {
- out() << node->reconstitutedBrief();
- } else
- out() << protectEnc(node->doc().briefText().toString());
- out() << "</p></td>";
- }
- out() << "</tr>\n";
- }
- out() << "</table></div>\n";
-}
-
-/*!
- Outputs a series of annotated lists from the nodes in \a nmm,
- divided into sections based by the key names in the multimap.
- */
-void HtmlGenerator::generateAnnotatedLists(const Node *relative, CodeMarker *marker,
- const NodeMultiMap &nmm)
-{
- const auto &uniqueKeys = nmm.uniqueKeys();
- for (const QString &name : uniqueKeys) {
- if (!name.isEmpty()) {
- out() << "<h2 id=\"" << registerRef(name.toLower()) << "\">" << protectEnc(name)
- << "</h2>\n";
- }
- generateAnnotatedList(relative, marker, nmm.values(name));
- }
-}
-
-/*!
- This function finds the common prefix of the names of all
- the classes in the class map \a nmm and then generates a
- compact list of the class names alphabetized on the part
- of the name not including the common prefix. You can tell
- the function to use \a commonPrefix as the common prefix,
- but normally you let it figure it out itself by looking at
- the name of the first and last classes in the class map
- \a nmm.
- */
-void HtmlGenerator::generateCompactList(ListType listType, const Node *relative,
- const NodeMultiMap &nmm, bool includeAlphabet,
- const QString &commonPrefix)
-{
- if (nmm.isEmpty())
- return;
-
- const int NumParagraphs = 37; // '0' to '9', 'A' to 'Z', '_'
- int commonPrefixLen = commonPrefix.length();
-
- /*
- Divide the data into 37 paragraphs: 0, ..., 9, A, ..., Z,
- underscore (_). QAccel will fall in paragraph 10 (A) and
- QXtWidget in paragraph 33 (X). This is the only place where we
- assume that NumParagraphs is 37. Each paragraph is a NodeMultiMap.
- */
- NodeMultiMap paragraph[NumParagraphs + 1];
- QString paragraphName[NumParagraphs + 1];
- QSet<char> usedParagraphNames;
-
- for (auto c = nmm.constBegin(); c != nmm.constEnd(); ++c) {
- QStringList pieces = c.key().split("::");
- int idx = commonPrefixLen;
- if (idx > 0 && !pieces.last().startsWith(commonPrefix, Qt::CaseInsensitive))
- idx = 0;
- QString last = pieces.last().toLower();
- QString key = last.mid(idx);
-
- int paragraphNr = NumParagraphs - 1;
-
- if (key[0].digitValue() != -1) {
- paragraphNr = key[0].digitValue();
- } else if (key[0] >= QLatin1Char('a') && key[0] <= QLatin1Char('z')) {
- paragraphNr = 10 + key[0].unicode() - 'a';
- }
-
- paragraphName[paragraphNr] = key[0].toUpper();
- usedParagraphNames.insert(key[0].toLower().cell());
- paragraph[paragraphNr].insert(last, c.value());
- }
-
- /*
- Each paragraph j has a size: paragraph[j].count(). In the
- discussion, we will assume paragraphs 0 to 5 will have sizes
- 3, 1, 4, 1, 5, 9.
-
- We now want to compute the paragraph offset. Paragraphs 0 to 6
- start at offsets 0, 3, 4, 8, 9, 14, 23.
- */
- int paragraphOffset[NumParagraphs + 1]; // 37 + 1
- paragraphOffset[0] = 0;
- for (int i = 0; i < NumParagraphs; i++) // i = 0..36
- paragraphOffset[i + 1] = paragraphOffset[i] + paragraph[i].count();
-
- /*
- Output the alphabet as a row of links.
- */
- if (includeAlphabet) {
- out() << "<p class=\"centerAlign functionIndex\"><b>";
- for (int i = 0; i < 26; i++) {
- QChar ch('a' + i);
- if (usedParagraphNames.contains(char('a' + i)))
- out() << QString("<a href=\"#%1\">%2</a>&nbsp;").arg(ch).arg(ch.toUpper());
- }
- out() << "</b></p>\n";
- }
-
- /*
- Output a <div> element to contain all the <dl> elements.
- */
- out() << "<div class=\"flowListDiv\">\n";
- m_numTableRows = 0;
-
- int curParNr = 0;
- int curParOffset = 0;
- QString previousName;
- bool multipleOccurrences = false;
-
- for (int i = 0; i < nmm.count(); i++) {
- while ((curParNr < NumParagraphs) && (curParOffset == paragraph[curParNr].count())) {
- ++curParNr;
- curParOffset = 0;
- }
-
- /*
- Starting a new paragraph means starting a new <dl>.
- */
- if (curParOffset == 0) {
- if (i > 0)
- out() << "</dl>\n";
- if (++m_numTableRows % 2 == 1)
- out() << "<dl class=\"flowList odd\">";
- else
- out() << "<dl class=\"flowList even\">";
- out() << "<dt class=\"alphaChar\">";
- if (includeAlphabet) {
- QChar c = paragraphName[curParNr][0].toLower();
- out() << QString("<a name=\"%1\"></a>").arg(c);
- }
- out() << "<b>" << paragraphName[curParNr] << "</b>";
- out() << "</dt>\n";
- }
-
- /*
- Output a <dd> for the current offset in the current paragraph.
- */
- out() << "<dd>";
- if ((curParNr < NumParagraphs) && !paragraphName[curParNr].isEmpty()) {
- NodeMultiMap::Iterator it;
- NodeMultiMap::Iterator next;
- it = paragraph[curParNr].begin();
- for (int j = 0; j < curParOffset; j++)
- ++it;
-
- if (listType == Generic) {
- /*
- Previously, we used generateFullName() for this, but we
- require some special formatting.
- */
- out() << "<a href=\"" << linkForNode(it.value(), relative) << "\">";
- } else if (listType == Obsolete) {
- QString fileName =
- appendObsoleteToFileBase(it.value()) + "-obsolete." + fileExtension();
- QString link;
- if (useOutputSubdirs()) {
- link = QString("../" + it.value()->outputSubdirectory() + QLatin1Char('/'));
- }
- link += fileName;
- out() << "<a href=\"" << link << "\">";
- }
-
- QStringList pieces;
- if (it.value()->isQmlType() || it.value()->isJsType()) {
- 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("::");
- out() << protectEnc(pieces.last());
- out() << "</a>";
- if (pieces.size() > 1) {
- out() << " (";
- generateFullName(it.value()->parent(), relative);
- out() << ')';
- }
- }
- out() << "</dd>\n";
- curParOffset++;
- }
- if (nmm.count() > 0)
- out() << "</dl>\n";
-
- out() << "</div>\n";
-}
-
-void HtmlGenerator::generateFunctionIndex(const Node *relative)
-{
- out() << "<p class=\"centerAlign functionIndex\"><b>";
- for (int i = 0; i < 26; i++) {
- QChar ch('a' + i);
- out() << QString("<a href=\"#%1\">%2</a>&nbsp;").arg(ch).arg(ch.toUpper());
- }
- out() << "</b></p>\n";
-
- char nextLetter = 'a';
- char currentLetter;
-
- out() << "<ul>\n";
- NodeMapMap &funcIndex = m_qdb->getFunctionIndex();
- for (auto fnMap = funcIndex.constBegin(); fnMap != funcIndex.constEnd(); ++fnMap) {
- out() << "<li>";
- out() << protectEnc(fnMap.key()) << ':';
-
- currentLetter = fnMap.key()[0].unicode();
- while (islower(currentLetter) && currentLetter >= nextLetter) {
- out() << QString("<a name=\"%1\"></a>").arg(nextLetter);
- nextLetter++;
- }
-
- for (auto it = (*fnMap).constBegin(); it != (*fnMap).constEnd(); ++it) {
- out() << ' ';
- generateFullName((*it)->parent(), relative, *it);
- }
- out() << "</li>";
- out() << '\n';
- }
- out() << "</ul>\n";
-}
-
-void HtmlGenerator::generateLegaleseList(const Node *relative, CodeMarker *marker)
-{
- TextToNodeMap &legaleseTexts = m_qdb->getLegaleseTexts();
- for (auto it = legaleseTexts.cbegin(), end = legaleseTexts.cend(); it != end; ++it) {
- Text text = it.key();
- generateText(text, relative, marker);
- out() << "<ul>\n";
- do {
- out() << "<li>";
- generateFullName(it.value(), relative);
- out() << "</li>\n";
- ++it;
- } while (it != legaleseTexts.constEnd() && it.key() == text);
- out() << "</ul>\n";
- }
-}
-
-void HtmlGenerator::generateQmlItem(const Node *node, const Node *relative, CodeMarker *marker,
- bool summary)
-{
- QString marked = marker->markedUpQmlItem(node, summary);
- QRegularExpression templateTag("(<[^@>]*>)");
- auto match = templateTag.match(marked);
- if (match.hasMatch()) {
- QString contents = protectEnc(match.captured(1));
- marked.replace(match.capturedStart(1), match.capturedLength(1), contents);
- }
-
- // Look for the _ character in the member name followed by a number (or n):
- // this is intended to be rendered as a subscript.
- marked.replace(QRegularExpression("<@param>([a-z]+)_([0-9]+|n)</@param>"), "<i>\\1<sub>\\2</sub></i>");
-
- // Replace some markup by HTML tags. Do both the opening and the closing tag
- // in one go (instead of <@param> and </@param> separately, for instance).
- marked.replace("@param>", "i>");
- if (summary)
- marked.replace("@name>", "b>");
- marked.replace("@extra>", "code>");
-
- if (summary) {
- marked.remove("<@type>");
- marked.remove("</@type>");
- }
- out() << highlightedCode(marked, relative, false, Node::QML);
-}
-
-/*!
- This function generates a simple bullet list for the members
- of collection node \a {cn}. The collection node must be a group
- and must not be empty. If it is empty, nothing is output, and
- false is returned. Otherewise, the list is generated and true is returned.
- */
-bool HtmlGenerator::generateGroupList(CollectionNode *cn)
-{
- m_qdb->mergeCollections(cn);
- if (cn->members().isEmpty())
- return false;
- out() << "<ul>\n";
- const auto members = cn->members();
- for (const auto *node : members) {
- out() << "<li>"
- << "<a href=\"#" << Doc::canonicalTitle(node->title()) << "\">" << node->title()
- << "</a></li>\n";
- }
- out() << "</ul>\n";
- return true;
-}
-
-void HtmlGenerator::generateList(const Node *relative, CodeMarker *marker, const QString &selector)
-{
- CNMap cnm;
- Node::NodeType type = Node::NoType;
- if (selector == QLatin1String("overviews"))
- type = Node::Group;
- else if (selector == QLatin1String("cpp-modules"))
- type = Node::Module;
- else if (selector == QLatin1String("qml-modules"))
- type = Node::QmlModule;
- else if (selector == QLatin1String("js-modules"))
- type = Node::JsModule;
- if (type != Node::NoType) {
- NodeList nodeList;
- m_qdb->mergeCollections(type, cnm, relative);
- const auto collectionList = cnm.values();
- nodeList.reserve(collectionList.size());
- for (auto *collectionNode : collectionList)
- nodeList.append(collectionNode);
- generateAnnotatedList(relative, marker, nodeList);
- } else {
- /*
- \generatelist {selector} is only allowed in a
- comment where the topic is \group, \module,
- \qmlmodule, or \jsmodule
- */
- if (relative && !relative->isCollectionNode()) {
- relative->doc().location().warning(
- QStringLiteral("\\generatelist {%1} is only allowed in \\group, "
- "\\module, \\qmlmodule, and \\jsmodule comments.")
- .arg(selector));
- return;
- }
- auto *node = const_cast<Node *>(relative);
- auto *collectionNode = static_cast<CollectionNode *>(node);
- m_qdb->mergeCollections(collectionNode);
- generateAnnotatedList(collectionNode, marker, collectionNode->members());
- }
-}
-
-void HtmlGenerator::generateSection(const NodeVector &nv, const Node *relative, CodeMarker *marker)
-{
- bool alignNames = true;
- if (!nv.isEmpty()) {
- bool twoColumn = false;
- if (nv.first()->isProperty()) {
- twoColumn = (nv.count() >= 5);
- alignNames = false;
- }
- if (alignNames) {
- out() << "<div class=\"table\"><table class=\"alignedsummary\">\n";
- } else {
- if (twoColumn)
- out() << "<div class=\"table\"><table class=\"propsummary\">\n"
- << "<tr><td class=\"topAlign\">";
- out() << "<ul>\n";
- }
-
- int i = 0;
- for (const auto &member : nv) {
- if (member->access() == Access::Private)
- continue;
-
- if (alignNames) {
- out() << "<tr><td class=\"memItemLeft rightAlign topAlign\"> ";
- } else {
- if (twoColumn && i == (nv.count() + 1) / 2)
- out() << "</ul></td><td class=\"topAlign\"><ul>\n";
- out() << "<li class=\"fn\">";
- }
-
- generateSynopsis(member, relative, marker, Section::Summary, alignNames);
- if (alignNames)
- out() << "</td></tr>\n";
- else
- out() << "</li>\n";
- i++;
- }
- if (alignNames)
- out() << "</table></div>\n";
- else {
- out() << "</ul>\n";
- if (twoColumn)
- out() << "</td></tr>\n</table></div>\n";
- }
- }
-}
-
-void HtmlGenerator::generateSectionList(const Section &section, const Node *relative,
- CodeMarker *marker, Section::Status status)
-{
- bool alignNames = true;
- const NodeVector &members =
- (status == Section::Obsolete ? section.obsoleteMembers() : section.members());
- if (!members.isEmpty()) {
- bool hasPrivateSignals = false;
- bool isInvokable = false;
- bool twoColumn = false;
- if (section.style() == Section::AllMembers) {
- alignNames = false;
- twoColumn = (members.count() >= 16);
- } else if (members.first()->isProperty()) {
- twoColumn = (members.count() >= 5);
- alignNames = false;
- }
- if (alignNames) {
- out() << "<div class=\"table\"><table class=\"alignedsummary\">\n";
- } else {
- if (twoColumn)
- out() << "<div class=\"table\"><table class=\"propsummary\">\n"
- << "<tr><td class=\"topAlign\">";
- out() << "<ul>\n";
- }
-
- int i = 0;
- for (const auto &member : members) {
- if (member->access() == Access::Private)
- continue;
-
- if (alignNames) {
- out() << "<tr><td class=\"memItemLeft topAlign rightAlign\"> ";
- } else {
- if (twoColumn && i == (members.count() + 1) / 2)
- out() << "</ul></td><td class=\"topAlign\"><ul>\n";
- out() << "<li class=\"fn\">";
- }
-
- QString prefix;
- const QStringList &keys = section.keys(status);
- if (!keys.isEmpty()) {
- prefix = keys.at(i).mid(1);
- prefix = prefix.left(keys.at(i).indexOf("::") + 1);
- }
- generateSynopsis(member, relative, marker, section.style(), alignNames, &prefix);
- if (member->isFunction()) {
- const auto *fn = static_cast<const FunctionNode *>(member);
- if (fn->isPrivateSignal()) {
- hasPrivateSignals = true;
- if (alignNames)
- out() << "</td><td class=\"memItemRight bottomAlign\">[see note below]";
- } else if (fn->isInvokable()) {
- isInvokable = true;
- if (alignNames)
- out() << "</td><td class=\"memItemRight bottomAlign\">[see note below]";
- }
- }
- if (alignNames)
- out() << "</td></tr>\n";
- else
- out() << "</li>\n";
- i++;
- }
- if (alignNames)
- out() << "</table></div>\n";
- else {
- out() << "</ul>\n";
- if (twoColumn)
- out() << "</td></tr>\n</table></div>\n";
- }
- if (alignNames) {
- if (hasPrivateSignals)
- generateAddendum(relative, Generator::PrivateSignal, marker);
- if (isInvokable)
- generateAddendum(relative, Generator::Invokable, marker);
- }
- }
-
- if (status != Section::Obsolete && section.style() == Section::Summary
- && !section.inheritedMembers().isEmpty()) {
- out() << "<ul>\n";
- generateSectionInheritedList(section, relative);
- out() << "</ul>\n";
- }
-}
-
-void HtmlGenerator::generateSectionInheritedList(const Section &section, const Node *relative)
-{
- const QList<QPair<Aggregate *, int>> &inheritedMembers = section.inheritedMembers();
- for (const auto &member : inheritedMembers) {
- out() << "<li class=\"fn\">";
- out() << member.second << ' ';
- if (member.second == 1) {
- out() << section.singular();
- } else {
- out() << section.plural();
- }
- out() << " inherited from <a href=\"" << fileName(member.first) << '#'
- << Generator::cleanRef(section.title().toLower()) << "\">"
- << protectEnc(member.first->plainFullName(relative)) << "</a></li>\n";
- }
-}
-
-void HtmlGenerator::generateSynopsis(const Node *node, const Node *relative, CodeMarker *marker,
- Section::Style style, bool alignNames, const QString *prefix)
-{
- QString marked = marker->markedUpSynopsis(node, relative, style);
-
- if (prefix)
- marked.prepend(*prefix);
- QRegularExpression templateTag("(<[^@>]*>)");
- auto match = templateTag.match(marked);
- if (match.hasMatch()) {
- QString contents = protectEnc(match.captured(1));
- marked.replace(match.capturedStart(1), match.capturedLength(1), contents);
- }
-
- marked.replace(QRegularExpression("<@param>([a-z]+)_([1-9n])</@param>"), "<i>\\1<sub>\\2</sub></i>");
- marked.replace("<@param>", "<i>");
- marked.replace("</@param>", "</i>");
-
- if (style == Section::Summary) {
- marked.remove("<@name>"); // was "<b>"
- marked.remove("</@name>"); // was "</b>"
- }
-
- if (style == Section::AllMembers) {
- QRegularExpression extraRegExp("<@extra>.*</@extra>", QRegularExpression::InvertedGreedinessOption);
- marked.remove(extraRegExp);
- } else {
- marked.replace("<@extra>", "<code>");
- marked.replace("</@extra>", "</code>");
- }
-
- if (style != Section::Details) {
- marked.remove("<@type>");
- marked.remove("</@type>");
- }
-
- out() << highlightedCode(marked, relative, alignNames);
-}
-
-QString HtmlGenerator::highlightedCode(const QString &markedCode, const Node *relative,
- bool alignNames, Node::Genus genus)
-{
- QString src = markedCode;
- QString html;
- html.reserve(src.size());
- QStringView arg;
- QStringView par1;
-
- const QChar charLangle = '<';
- const QChar charAt = '@';
-
- static const QString typeTag("type");
- static const QString headerTag("headerfile");
- static const QString funcTag("func");
- static const QString linkTag("link");
-
- // replace all <@link> tags: "(<@link node=\"([^\"]+)\">).*(</@link>)"
- // replace all <@func> tags: "(<@func target=\"([^\"]*)\">)(.*)(</@func>)"
- // replace all "(<@(type|headerfile)(?: +[^>]*)?>)(.*)(</@\\2>)" tags
- bool done = false;
- for (int i = 0, srcSize = src.size(); i < srcSize;) {
- if (src.at(i) == charLangle && src.at(i + 1) == charAt) {
- if (alignNames && !done) {
- html += QLatin1String("</td><td class=\"memItemRight bottomAlign\">");
- done = true;
- }
- i += 2;
- if (parseArg(src, linkTag, &i, srcSize, &arg, &par1)) {
- html += QLatin1String("<b>");
- const Node *n = CodeMarker::nodeForString(par1.toString());
- QString link = linkForNode(n, relative);
- addLink(link, arg, &html);
- html += QLatin1String("</b>");
- } else if (parseArg(src, funcTag, &i, srcSize, &arg, &par1)) {
- const FunctionNode *fn = m_qdb->findFunctionNode(par1.toString(), relative, genus);
- QString link = linkForNode(fn, relative);
- addLink(link, arg, &html);
- par1 = QStringView();
- } else if (parseArg(src, typeTag, &i, srcSize, &arg, &par1)) {
- par1 = QStringView();
- const Node *n = m_qdb->findTypeNode(arg.toString(), relative, genus);
- html += QLatin1String("<span class=\"type\">");
- if (n && (n->isQmlBasicType() || n->isJsBasicType())) {
- if (relative && (relative->genus() == n->genus() || genus == n->genus()))
- addLink(linkForNode(n, relative), arg, &html);
- else
- html += arg;
- } else
- addLink(linkForNode(n, relative), arg, &html);
- html += QLatin1String("</span>");
- } else if (parseArg(src, headerTag, &i, srcSize, &arg, &par1)) {
- par1 = QStringView();
- if (arg.startsWith(QLatin1Char('&')))
- html += arg;
- else {
- const Node *n = m_qdb->findNodeForInclude(QStringList(arg.toString()));
- if (n && n != relative)
- addLink(linkForNode(n, relative), arg, &html);
- else
- html += arg;
- }
- } else {
- html += charLangle;
- html += charAt;
- }
- } else {
- html += src.at(i++);
- }
- }
-
- // replace all
- // "<@comment>" -> "<span class=\"comment\">";
- // "<@preprocessor>" -> "<span class=\"preprocessor\">";
- // "<@string>" -> "<span class=\"string\">";
- // "<@char>" -> "<span class=\"char\">";
- // "<@number>" -> "<span class=\"number\">";
- // "<@op>" -> "<span class=\"operator\">";
- // "<@type>" -> "<span class=\"type\">";
- // "<@name>" -> "<span class=\"name\">";
- // "<@keyword>" -> "<span class=\"keyword\">";
- // "</@(?:comment|preprocessor|string|char|number|op|type|name|keyword)>" -> "</span>"
- src = html;
- html = QString();
- html.reserve(src.size());
- static const QLatin1String spanTags[] = {
- QLatin1String("comment>"), QLatin1String("<span class=\"comment\">"),
- QLatin1String("preprocessor>"), QLatin1String("<span class=\"preprocessor\">"),
- QLatin1String("string>"), QLatin1String("<span class=\"string\">"),
- QLatin1String("char>"), QLatin1String("<span class=\"char\">"),
- QLatin1String("number>"), QLatin1String("<span class=\"number\">"),
- QLatin1String("op>"), QLatin1String("<span class=\"operator\">"),
- QLatin1String("type>"), QLatin1String("<span class=\"type\">"),
- QLatin1String("name>"), QLatin1String("<span class=\"name\">"),
- QLatin1String("keyword>"), QLatin1String("<span class=\"keyword\">")
- };
- int nTags = 9;
- // Update the upper bound of k in the following code to match the length
- // of the above array.
- for (int i = 0, n = src.size(); i < n;) {
- if (src.at(i) == QLatin1Char('<')) {
- if (src.at(i + 1) == QLatin1Char('@')) {
- i += 2;
- bool handled = false;
- for (int k = 0; k != nTags; ++k) {
- const QLatin1String &tag = spanTags[2 * k];
- if (i + tag.size() <= src.length() && tag == QStringView(src).mid(i, tag.size())) {
- html += spanTags[2 * k + 1];
- i += tag.size();
- handled = true;
- break;
- }
- }
- if (!handled) {
- // drop 'our' unknown tags (the ones still containing '@')
- while (i < n && src.at(i) != QLatin1Char('>'))
- ++i;
- ++i;
- }
- continue;
- } else if (src.at(i + 1) == QLatin1Char('/') && src.at(i + 2) == QLatin1Char('@')) {
- i += 3;
- bool handled = false;
- for (int k = 0; k != nTags; ++k) {
- const QLatin1String &tag = spanTags[2 * k];
- if (i + tag.size() <= src.length() && tag == QStringView(src).mid(i, tag.size())) {
- html += QLatin1String("</span>");
- i += tag.size();
- handled = true;
- break;
- }
- }
- if (!handled) {
- // drop 'our' unknown tags (the ones still containing '@')
- while (i < n && src.at(i) != QLatin1Char('>'))
- ++i;
- ++i;
- }
- continue;
- }
- }
- html += src.at(i);
- ++i;
- }
- return html;
-}
-
-void HtmlGenerator::generateLink(const Atom *atom, CodeMarker *marker)
-{
- auto match = m_funcLeftParen.match(atom->string());
- if (match.hasMatch() && marker->recognizeLanguage("Cpp")) {
- // hack for C++: move () outside of link
- int k = match.capturedStart(1);
- out() << protectEnc(atom->string().left(k));
- if (m_link.isEmpty()) {
- if (showBrokenLinks)
- out() << "</i>";
- } else {
- out() << "</a>";
- }
- m_inLink = false;
- out() << protectEnc(atom->string().mid(k));
- } else {
- out() << protectEnc(atom->string());
- }
-}
-
-QString HtmlGenerator::protectEnc(const QString &string)
-{
- return protect(string);
-}
-
-QString HtmlGenerator::protect(const QString &string)
-{
-#define APPEND(x) \
- if (html.isEmpty()) { \
- html = string; \
- html.truncate(i); \
- } \
- html += (x);
-
- QString html;
- int n = string.length();
-
- for (int i = 0; i < n; ++i) {
- QChar ch = string.at(i);
-
- if (ch == QLatin1Char('&')) {
- APPEND("&amp;");
- } else if (ch == QLatin1Char('<')) {
- APPEND("&lt;");
- } else if (ch == QLatin1Char('>')) {
- APPEND("&gt;");
- } else if (ch == QLatin1Char('"')) {
- APPEND("&quot;");
- } else if ((ch == QLatin1Char('*') && i + 1 < n && string.at(i) == QLatin1Char('/'))
- || (ch == QLatin1Char('.') && i > 2 && string.at(i - 2) == QLatin1Char('.'))) {
- // we escape '*/' and the last dot in 'e.g.' and 'i.e.' for the Javadoc generator
- APPEND("&#x");
- html += QString::number(ch.unicode(), 16);
- html += QLatin1Char(';');
- } else {
- if (!html.isEmpty())
- html += ch;
- }
- }
-
- if (!html.isEmpty())
- return html;
- return string;
-
-#undef APPEND
-}
-
-QString HtmlGenerator::appendObsoleteToFileBase(const Node *node) const
-{
- QString result = Generator::fileBase(node);
- if (!node->isAggregate() && node->isObsolete())
- result += QLatin1String("-obsolete");
- return result;
-}
-
-QString HtmlGenerator::fileName(const Node *node)
-{
- if (node->isExternalPage())
- return node->name();
- return Generator::fileName(node);
-}
-
-void HtmlGenerator::generateFullName(const Node *apparentNode, const Node *relative,
- const Node *actualNode)
-{
- if (actualNode == nullptr)
- actualNode = apparentNode;
- out() << "<a href=\"" << linkForNode(actualNode, relative);
- if (actualNode->isObsolete())
- out() << "\" class=\"obsolete";
- out() << "\">";
- out() << protectEnc(apparentNode->fullName(relative));
- out() << "</a>";
-}
-
-void HtmlGenerator::generateDetailedMember(const Node *node, const PageNode *relative,
- CodeMarker *marker)
-{
- const EnumNode *etn;
- generateExtractionMark(node, MemberMark);
- generateKeywordAnchors(node);
- QString nodeRef = nullptr;
- if (node->isSharedCommentNode()) {
- const auto *scn = reinterpret_cast<const SharedCommentNode *>(node);
- const QList<Node *> &collective = scn->collective();
- if (collective.size() > 1)
- out() << "<div class=\"fngroup\">\n";
- for (const auto *sharedNode : collective) {
- nodeRef = refForNode(sharedNode);
- out() << R"(<h3 class="fn fngroupitem" id=")" << nodeRef << "\">";
- out() << "<a name=\"" + nodeRef + "\"></a>";
- generateSynopsis(sharedNode, relative, marker, Section::Details);
- out() << "</h3>";
- }
- if (collective.size() > 1)
- out() << "</div>";
- out() << divNavTop << '\n';
- } else {
- nodeRef = refForNode(node);
- if (node->isEnumType() && (etn = static_cast<const EnumNode *>(node))->flagsType()) {
- out() << R"(<h3 class="flags" id=")" << nodeRef << "\">";
- out() << "<a name=\"" + nodeRef + "\"></a>";
- generateSynopsis(etn, relative, marker, Section::Details);
- out() << "<br/>";
- generateSynopsis(etn->flagsType(), relative, marker, Section::Details);
- out() << "</h3>\n";
- } else {
- out() << R"(<h3 class="fn" id=")" << nodeRef << "\">";
- out() << "<a name=\"" + nodeRef + "\"></a>";
- generateSynopsis(node, relative, marker, Section::Details);
- out() << "</h3>" << divNavTop << '\n';
- }
- }
-
- generateStatus(node, marker);
- generateBody(node, marker);
- generateOverloadedSignal(node, marker);
- generateThreadSafeness(node, marker);
- generateSince(node, marker);
-
- if (node->isProperty()) {
- const auto property = static_cast<const PropertyNode *>(node);
- if (property->propertyType() == PropertyNode::Standard) {
- Section section(Section::Accessors, Section::Active);
-
- section.appendMembers(property->getters().toVector());
- section.appendMembers(property->setters().toVector());
- section.appendMembers(property->resetters().toVector());
-
- if (!section.members().isEmpty()) {
- out() << "<p><b>Access functions:</b></p>\n";
- generateSectionList(section, node, marker);
- }
-
- Section notifiers(Section::Accessors, Section::Active);
- notifiers.appendMembers(property->notifiers().toVector());
-
- if (!notifiers.members().isEmpty()) {
- out() << "<p><b>Notifier signal:</b></p>\n";
- generateSectionList(notifiers, node, marker);
- }
- }
- } else if (node->isEnumType()) {
- const auto *enumTypeNode = static_cast<const EnumNode *>(node);
- if (enumTypeNode->flagsType()) {
- out() << "<p>The " << protectEnc(enumTypeNode->flagsType()->name())
- << " type is a typedef for "
- << "<a href=\"" << m_qflagsHref << "\">QFlags</a>&lt;"
- << protectEnc(enumTypeNode->name()) << "&gt;. It stores an OR combination of "
- << protectEnc(enumTypeNode->name()) << " values.</p>\n";
- }
- }
- generateAlsoList(node, marker);
- generateExtractionMark(node, EndMark);
-}
-
-/*!
- This version of the function is called when outputting the link
- to an example file or example image, where the \a link is known
- to be correct.
- */
-void HtmlGenerator::beginLink(const QString &link)
-{
- m_link = link;
- if (m_link.isEmpty()) {
- if (showBrokenLinks)
- out() << "<i>";
- }
- out() << "<a href=\"" << m_link << "\">";
- m_inLink = true;
-}
-
-void HtmlGenerator::beginLink(const QString &link, const Node *node, const Node *relative)
-{
- m_link = link;
- if (m_link.isEmpty()) {
- if (showBrokenLinks)
- out() << "<i>";
- } else if (node == nullptr || (relative != nullptr && node->status() == relative->status()))
- out() << "<a href=\"" << m_link << "\">";
- else if (node->isObsolete())
- out() << "<a href=\"" << m_link << "\" class=\"obsolete\">";
- else
- out() << "<a href=\"" << m_link << "\">";
- m_inLink = true;
-}
-
-void HtmlGenerator::endLink()
-{
- if (m_inLink) {
- if (m_link.isEmpty()) {
- if (showBrokenLinks)
- out() << "</i>";
- } else {
- if (m_inObsoleteLink) {
- out() << "<sup>(obsolete)</sup>";
- }
- out() << "</a>";
- }
- }
- m_inLink = false;
- m_inObsoleteLink = false;
-}
-
-/*!
- Generates the summary list for the \a members. Only used for
- sections of QML element documentation.
- */
-void HtmlGenerator::generateQmlSummary(const NodeVector &members, const Node *relative,
- CodeMarker *marker)
-{
- if (!members.isEmpty()) {
- out() << "<ul>\n";
- for (const auto &member : members) {
- out() << "<li class=\"fn\">";
- generateQmlItem(member, relative, marker, true);
- if (member->isPropertyGroup()) {
- const auto *scn = static_cast<const SharedCommentNode *>(member);
- if (scn->count() > 0) {
- out() << "<ul>\n";
- const QList<Node *> &sharedNodes = scn->collective();
- for (const auto &node : sharedNodes) {
- if (node->isQmlProperty() || node->isJsProperty()) {
- out() << "<li class=\"fn\">";
- generateQmlItem(node, relative, marker, true);
- out() << "</li>\n";
- }
- }
- out() << "</ul>\n";
- }
- }
- out() << "</li>\n";
- }
- out() << "</ul>\n";
- }
-}
-
-/*!
- Outputs the html detailed documentation for a section
- on a QML element reference page.
- */
-void HtmlGenerator::generateDetailedQmlMember(Node *node, const Aggregate *relative,
- CodeMarker *marker)
-{
- generateExtractionMark(node, MemberMark);
- generateKeywordAnchors(node);
-
- QString qmlItemHeader("<div class=\"qmlproto\">\n"
- "<div class=\"table\"><table class=\"qmlname\">\n");
-
- QString qmlItemStart("<tr valign=\"top\" class=\"odd\" id=\"%1\">\n"
- "<td class=\"%2\"><p>\n<a name=\"%1\"></a>");
- QString qmlItemEnd("</p></td></tr>\n");
-
- QString qmlItemFooter("</table></div></div>\n");
-
- std::function<void(QmlPropertyNode *)> generateQmlProperty = [&](QmlPropertyNode *n) {
- out() << qmlItemStart.arg(refForNode(n), "tblQmlPropNode");
-
- if (!n->isReadOnlySet() && n->declarativeCppNode())
- n->markReadOnly(!n->isWritable());
-
- QStringList extra;
- if (n->isDefault())
- extra << "default";
- else if (n->isReadOnly())
- extra << "read-only";
- else if (n->isRequired())
- extra << "required";
-
- if (!n->since().isEmpty()) {
- if (!extra.isEmpty())
- extra.last().append(',');
- extra << "since " + n->since();
- }
-
- if (!extra.isEmpty())
- out() << QString("<span class=\"qmlextra\">[%1] </span>")
- .arg(extra.join(QLatin1Char(' ')));
-
- generateQmlItem(n, relative, marker, false);
- out() << qmlItemEnd;
- };
-
- std::function<void(Node *)> generateQmlMethod = [&](Node *n) {
- out() << qmlItemStart.arg(refForNode(n), "tblQmlFuncNode");
- generateSynopsis(n, relative, marker, Section::Details, false);
- out() << qmlItemEnd;
- };
-
- out() << "<div class=\"qmlitem\">";
- if (node->isPropertyGroup()) {
- const auto *scn = static_cast<const SharedCommentNode *>(node);
- out() << qmlItemHeader;
- if (!scn->name().isEmpty()) {
- const QString nodeRef = refForNode(scn);
- out() << R"(<tr valign="top" class="even" id=")" << nodeRef << "\">";
- out() << "<th class=\"centerAlign\"><p>";
- out() << "<a name=\"" + nodeRef + "\"></a>";
- out() << "<b>" << scn->name() << " group</b>";
- out() << "</p></th></tr>\n";
- }
- const QList<Node *> sharedNodes = scn->collective();
- for (const auto &sharedNode : sharedNodes) {
- if (sharedNode->isQmlProperty() || sharedNode->isJsProperty())
- generateQmlProperty(static_cast<QmlPropertyNode *>(sharedNode));
- }
- out() << qmlItemFooter;
- } else if (node->isQmlProperty() || node->isJsProperty()) {
- out() << qmlItemHeader;
- generateQmlProperty(static_cast<QmlPropertyNode *>(node));
- out() << qmlItemFooter;
- } else if (node->isSharedCommentNode()) {
- const auto *scn = reinterpret_cast<const SharedCommentNode *>(node);
- const QList<Node *> &sharedNodes = scn->collective();
- if (sharedNodes.size() > 1)
- out() << "<div class=\"fngroup\">\n";
- out() << qmlItemHeader;
- for (const auto &sharedNode : sharedNodes) {
- if (sharedNode->isFunction(Node::QML) || sharedNode->isFunction(Node::JS))
- generateQmlMethod(sharedNode);
- else if (sharedNode->isQmlProperty() || sharedNode->isJsProperty())
- generateQmlProperty(static_cast<QmlPropertyNode *>(sharedNode));
- }
- out() << qmlItemFooter;
- if (sharedNodes.size() > 1)
- out() << "</div>"; // fngroup
- } else { // assume the node is a method/signal handler
- out() << qmlItemHeader;
- generateQmlMethod(node);
- out() << qmlItemFooter;
- }
-
- out() << "<div class=\"qmldoc\">";
- generateStatus(node, marker);
- generateBody(node, marker);
- generateThreadSafeness(node, marker);
- generateSince(node, marker);
- generateAlsoList(node, marker);
- out() << "</div></div>";
- generateExtractionMark(node, EndMark);
-}
-
-/*!
- Output the "Inherits" line for the QML element,
- if there should be one.
- */
-void HtmlGenerator::generateQmlInherits(QmlTypeNode *qcn, CodeMarker *marker)
-{
- if (!qcn)
- return;
- QmlTypeNode *base = qcn->qmlBaseNode();
- while (base && base->isInternal()) {
- base = base->qmlBaseNode();
- }
- if (base) {
- Text text;
- text << Atom::ParaLeft << "Inherits ";
- text << Atom(Atom::LinkNode, CodeMarker::stringForNode(base));
- text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK);
- text << Atom(Atom::String, base->name());
- text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
- text << Atom::ParaRight;
- generateText(text, qcn, marker);
- }
-}
-
-void HtmlGenerator::generateExtractionMark(const Node *node, ExtractionMarkType markType)
-{
- if (markType != EndMark) {
- out() << "<!-- $$$" + node->name();
- if (markType == MemberMark) {
- if (node->isFunction()) {
- const auto *func = static_cast<const FunctionNode *>(node);
- if (!func->hasAssociatedProperties()) {
- if (func->overloadNumber() == 0)
- out() << "[overload1]";
- out() << "$$$" + func->name() + func->parameters().rawSignature().remove(' ');
- }
- } else if (node->isProperty()) {
- out() << "-prop";
- const auto *prop = static_cast<const PropertyNode *>(node);
- const NodeList &list = prop->functions();
- for (const auto *propFuncNode : list) {
- if (propFuncNode->isFunction()) {
- const auto *func = static_cast<const FunctionNode *>(propFuncNode);
- out() << "$$$" + func->name()
- + func->parameters().rawSignature().remove(' ');
- }
- }
- } else if (node->isEnumType()) {
- const auto *enumNode = static_cast<const EnumNode *>(node);
- const auto &items = enumNode->items();
- for (const auto &item : items)
- out() << "$$$" + item.name();
- }
- } else if (markType == BriefMark) {
- out() << "-brief";
- } else if (markType == DetailedDescriptionMark) {
- out() << "-description";
- }
- out() << " -->\n";
- } else {
- out() << "<!-- @@@" + node->name() + " -->\n";
- }
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/htmlgenerator.h b/src/qdoc/htmlgenerator.h
deleted file mode 100644
index 43a6fa1ac..000000000
--- a/src/qdoc/htmlgenerator.h
+++ /dev/null
@@ -1,205 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef HTMLGENERATOR_H
-#define HTMLGENERATOR_H
-
-#include "codemarker.h"
-#include "xmlgenerator.h"
-
-#include <QtCore/qhash.h>
-#include <QtCore/qregularexpression.h>
-#include <QtCore/qxmlstream.h>
-
-QT_BEGIN_NAMESPACE
-
-class Aggregate;
-class Config;
-class ExampleNode;
-class HelpProjectWriter;
-class ManifestWriter;
-
-class HtmlGenerator : public XmlGenerator
-{
-public:
- HtmlGenerator() = default;
- ~HtmlGenerator() override;
-
- void initializeGenerator() override;
- void terminateGenerator() override;
- QString format() override;
- void generateDocs() override;
-
- QString protectEnc(const QString &string);
- static QString protect(const QString &string);
-
-protected:
- void generateExampleFilePage(const Node *en, const QString &file, CodeMarker *marker) override;
- int generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker) override;
- void generateCppReferencePage(Aggregate *aggregate, CodeMarker *marker) override;
- void generateProxyPage(Aggregate *aggregate, CodeMarker *marker) override;
- void generateQmlTypePage(QmlTypeNode *qcn, CodeMarker *marker) override;
- void generateQmlBasicTypePage(QmlBasicTypeNode *qbtn, CodeMarker *marker) override;
- void generatePageNode(PageNode *pn, CodeMarker *marker) override;
- void generateCollectionNode(CollectionNode *cn, CodeMarker *marker) override;
- void generateGenericCollectionPage(CollectionNode *cn, CodeMarker *marker) override;
- QString fileExtension() const override;
- void generateKeywordAnchors(const Node *node);
-
-private:
- enum SubTitleSize { SmallSubTitle, LargeSubTitle };
- enum ExtractionMarkType { BriefMark, DetailedDescriptionMark, MemberMark, EndMark };
-
- void generateNavigationBar(const QString &title, const Node *node, CodeMarker *marker,
- const QString &buildversion, bool tableItems = false);
- void generateHeader(const QString &title, const Node *node = nullptr,
- CodeMarker *marker = nullptr);
- void generateTitle(const QString &title, const Text &subTitle, SubTitleSize subTitleSize,
- const Node *relative, CodeMarker *marker);
- void generateFooter(const Node *node = nullptr);
- void generateRequisites(Aggregate *inner, CodeMarker *marker);
- void generateQmlRequisites(QmlTypeNode *qcn, CodeMarker *marker);
- void generateBrief(const Node *node, CodeMarker *marker, const Node *relative = nullptr,
- bool addLink = true);
- void generateTableOfContents(const Node *node, CodeMarker *marker,
- QList<Section> *sections = nullptr);
- void generateSidebar();
- QString generateAllMembersFile(const Section &section, CodeMarker *marker);
- QString generateAllQmlMembersFile(const Sections &sections, CodeMarker *marker);
- QString generateObsoleteMembersFile(const Sections &sections, CodeMarker *marker);
- QString generateObsoleteQmlMembersFile(const Sections &sections, CodeMarker *marker);
- 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 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);
- void generateSectionList(const Section &section, const Node *relative, CodeMarker *marker,
- Section::Status = Section::Active);
- void generateQmlSummary(const NodeVector &members, const Node *relative, CodeMarker *marker);
- void generateQmlItem(const Node *node, const Node *relative, CodeMarker *marker, bool summary);
- void generateDetailedQmlMember(Node *node, const Aggregate *relative, CodeMarker *marker);
- void generateQmlInherits(QmlTypeNode *qcn, CodeMarker *marker) override;
-
- void generateSection(const NodeVector &nv, const Node *relative, CodeMarker *marker);
- void generateSynopsis(const Node *node, const Node *relative, CodeMarker *marker,
- Section::Style style, bool alignNames = false,
- const QString *prefix = nullptr);
- void generateSectionInheritedList(const Section &section, const Node *relative);
- QString highlightedCode(const QString &markedCode, const Node *relative,
- bool alignNames = false, Node::Genus genus = Node::DontCare);
-
- void generateFullName(const Node *apparentNode, const Node *relative,
- const Node *actualNode = nullptr);
- void generateDetailedMember(const Node *node, const PageNode *relative, CodeMarker *marker);
- void generateLink(const Atom *atom, CodeMarker *marker);
-
- QString appendObsoleteToFileBase(const Node *node) const;
- QString fileName(const Node *node);
-
- void beginLink(const QString &link);
- void beginLink(const QString &link, const Node *node, const Node *relative);
- void endLink();
- void generateExtractionMark(const Node *node, ExtractionMarkType markType);
- void addIncludeFilesToMap(const Aggregate *aggregate, CodeMarker *marker,
- QMap<QString, Text> &requisites, Text *text,
- const QString &headerText);
- void addSinceToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites, Text *text,
- const QString &sinceText) const;
- void addCMakeInfoToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites, Text *text,
- 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 addInheritsToMap(QMap<QString, Text> &requisites, Text *text, const QString &inheritsText,
- ClassNode *classe);
- void addInheritedByToMap(QMap<QString, Text> &requisites, Text *text,
- const QString &inheritedBytext, ClassNode *classe);
- void generateTheTable(const QStringList &requisiteOrder, const QMap<QString, Text> &requisites,
- const QString &headerText, const Aggregate *aggregate,
- CodeMarker *marker);
-
- int m_codeIndent { 0 };
- QString m_codePrefix {};
- QString m_codeSuffix {};
- HelpProjectWriter *m_helpProjectWriter { nullptr };
- ManifestWriter *m_manifestWriter { nullptr };
- bool m_inObsoleteLink { false };
- QRegularExpression m_funcLeftParen { "\\S(\\()" };
- QString m_headerScripts {};
- QString m_headerStyles {};
- QString m_endHeader {};
- QString m_postHeader {};
- QString m_postPostHeader {};
- QString m_prologue {};
- QString m_footer {};
- QString m_address {};
- bool m_noNavigationBar { false };
- QString m_project {};
- QString m_projectDescription {};
- QString m_projectUrl {};
- QString m_navigationLinks {};
- QString m_navigationSeparator {};
- QString m_manifestDir {};
- QString m_examplesPath {};
- static int id;
- QString m_homepage {};
- QString m_hometitle {};
- QString m_landingpage {};
- QString m_landingtitle {};
- QString m_cppclassespage {};
- QString m_cppclassestitle {};
- QString m_qmltypespage {};
- QString m_qmltypestitle {};
- QString m_buildversion {};
- QString m_qflagsHref {};
- int tocDepth {};
-
- Config *config { nullptr };
-
-public:
- static QString divNavTop;
-};
-
-#define HTMLGENERATOR_ADDRESS "address"
-#define HTMLGENERATOR_FOOTER "footer"
-#define HTMLGENERATOR_POSTHEADER "postheader"
-#define HTMLGENERATOR_POSTPOSTHEADER "postpostheader"
-#define HTMLGENERATOR_PROLOGUE "prologue"
-#define HTMLGENERATOR_NONAVIGATIONBAR "nonavigationbar"
-#define HTMLGENERATOR_NAVIGATIONSEPARATOR "navigationseparator"
-#define HTMLGENERATOR_TOCDEPTH "tocdepth"
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/importrec.h b/src/qdoc/importrec.h
deleted file mode 100644
index baab81452..000000000
--- a/src/qdoc/importrec.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef IMPORTREC_H
-#define IMPORTREC_H
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-struct ImportRec
-{
- QString m_moduleName;
- QString m_majorMinorVersion;
- QString m_importAsName;
- QString m_importUri; // subdirectory of module directory
-
- ImportRec(const QString &name, const QString &version, const QString &importId,
- const QString &importUri)
- : m_moduleName(name),
- m_majorMinorVersion(version),
- m_importAsName(importId),
- m_importUri(importUri)
- {
- }
- QString &name() { return m_moduleName; }
- QString &version() { return m_majorMinorVersion; }
- QString &importId() { return m_importAsName; }
- QString &importUri() { return m_importUri; }
- bool isEmpty() const { return m_moduleName.isEmpty(); }
-};
-
-QT_END_NAMESPACE
-
-#endif // IMPORTREC_H
diff --git a/src/qdoc/jscodemarker.cpp b/src/qdoc/jscodemarker.cpp
deleted file mode 100644
index 50c9592ba..000000000
--- a/src/qdoc/jscodemarker.cpp
+++ /dev/null
@@ -1,149 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- jscodemarker.cpp
-*/
-
-#include "jscodemarker.h"
-
-#include "atom.h"
-#include "node.h"
-#include "qmlmarkupvisitor.h"
-#include "text.h"
-
-#ifndef QT_NO_DECLARATIVE
-# include <private/qqmljsast_p.h>
-# include <private/qqmljsengine_p.h>
-# include <private/qqmljslexer_p.h>
-# include <private/qqmljsparser_p.h>
-#endif
-
-QT_BEGIN_NAMESPACE
-
-JsCodeMarker::JsCodeMarker() {}
-
-JsCodeMarker::~JsCodeMarker() {}
-
-/*!
- Returns \c true if the \a code is recognized by the parser.
- */
-bool JsCodeMarker::recognizeCode(const QString &code)
-{
-#ifndef QT_NO_DECLARATIVE
- QQmlJS::Engine engine;
- QQmlJS::Lexer lexer(&engine);
- QQmlJS::Parser parser(&engine);
-
- QString newCode = code;
- QList<QQmlJS::SourceLocation> pragmas = extractPragmas(newCode);
- lexer.setCode(newCode, 1);
-
- return parser.parseProgram();
-#else
- Q_UNUSED(code);
- return false;
-#endif
-}
-
-/*!
- Returns \c true if \a ext is any of a list of file extensions
- for the QML language.
- */
-bool JsCodeMarker::recognizeExtension(const QString &ext)
-{
- return ext == "js" || ext == "json";
-}
-
-/*!
- Returns \c true if the \a language is recognized. We recognize JavaScript,
- ECMAScript and JSON.
- */
-bool JsCodeMarker::recognizeLanguage(const QString &language)
-{
- return language == "JavaScript" || language == "ECMAScript" || language == "JSON";
-}
-
-/*!
- Returns the type of atom used to represent JavaScript code in the documentation.
-*/
-Atom::AtomType JsCodeMarker::atomType() const
-{
- return Atom::JavaScript;
-}
-
-QString JsCodeMarker::markedUpCode(const QString &code, const Node *relative,
- const Location &location)
-{
- return addMarkUp(code, relative, location);
-}
-
-QString JsCodeMarker::addMarkUp(const QString &code, const Node * /* relative */,
- const Location &location)
-{
-#ifndef QT_NO_DECLARATIVE
- QQmlJS::Engine engine;
- QQmlJS::Lexer lexer(&engine);
-
- QString newCode = code;
- QList<QQmlJS::SourceLocation> pragmas = extractPragmas(newCode);
- lexer.setCode(newCode, 1);
-
- QQmlJS::Parser parser(&engine);
- QString output;
-
- if (parser.parseProgram()) {
- QQmlJS::AST::Node *ast = parser.rootNode();
- // Pass the unmodified code to the visitor so that pragmas and other
- // unhandled source text can be output.
- QmlMarkupVisitor visitor(code, pragmas, &engine);
- QQmlJS::AST::Node::accept(ast, &visitor);
- if (visitor.hasError()) {
- location.warning(
- location.fileName()
- + QStringLiteral("Unable to analyze JavaScript. The output is incomplete."));
- }
- output = visitor.markedUpCode();
- } else {
- location.warning(
- location.fileName()
- + QStringLiteral("Unable to parse JavaScript: \"%1\" at line %2, column %3")
- .arg(parser.errorMessage())
- .arg(parser.errorLineNumber())
- .arg(parser.errorColumnNumber()));
- output = protect(code);
- }
- return output;
-#else
- Q_UNUSED(code);
- location.warning("QtDeclarative not installed; cannot parse QML or JS.");
- return QString();
-#endif
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/jscodemarker.h b/src/qdoc/jscodemarker.h
deleted file mode 100644
index ed0ec6b9b..000000000
--- a/src/qdoc/jscodemarker.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- jscodemarker.h
-*/
-
-#ifndef JSCODEMARKER_H
-#define JSCODEMARKER_H
-
-#include "qmlcodemarker.h"
-
-QT_BEGIN_NAMESPACE
-
-class JsCodeMarker : public QmlCodeMarker
-{
-public:
- JsCodeMarker();
- ~JsCodeMarker() override;
-
- bool recognizeCode(const QString &code) override;
- bool recognizeExtension(const QString &ext) override;
- bool recognizeLanguage(const QString &language) override;
- Atom::AtomType atomType() const override;
-
- virtual QString markedUpCode(const QString &code, const Node *relative,
- const Location &location) override;
-
-private:
- QString addMarkUp(const QString &code, const Node *relative, const Location &location);
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/location.cpp b/src/qdoc/location.cpp
deleted file mode 100644
index a94c8b7e4..000000000
--- a/src/qdoc/location.cpp
+++ /dev/null
@@ -1,456 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "location.h"
-
-#include "config.h"
-
-#include <QtCore/qdebug.h>
-#include <QtCore/qdir.h>
-#include <QtCore/qregularexpression.h>
-#include <QtCore/QTime>
-
-#include <climits>
-#include <cstdio>
-#include <cstdlib>
-
-QT_BEGIN_NAMESPACE
-
-int Location::tabSize;
-int Location::warningCount = 0;
-int Location::warningLimit = -1;
-QString Location::programName;
-QString Location::project;
-QRegularExpression *Location::spuriousRegExp = nullptr;
-
-/*!
- \class Location
-
- \brief The Location class provides a way to mark a location in a file.
-
- It maintains a stack of file positions. A file position
- consists of the file path, line number, and column number.
- The location is used for printing error messages that are
- tied to a location in a file.
- */
-
-/*!
- Constructs an empty location.
- */
-Location::Location() : stk(nullptr), stkTop(&stkBottom), stkDepth(0), etcetera(false)
-{
- // nothing.
-}
-
-/*!
- Constructs a location with (fileName, 1, 1) on its file
- position stack.
- */
-Location::Location(const QString &fileName)
- : stk(nullptr), stkTop(&stkBottom), stkDepth(0), etcetera(false)
-{
- push(fileName);
-}
-
-/*!
- The copy constructor copies the contents of \a other into
- this Location using the assignment operator.
- */
-Location::Location(const Location &other)
- : stk(nullptr), stkTop(&stkBottom), stkDepth(0), etcetera(false)
-{
- *this = other;
-}
-
-/*!
- The assignment operator does a deep copy of the entire
- state of \a other into this Location.
- */
-Location &Location::operator=(const Location &other)
-{
- QStack<StackEntry> *oldStk = stk;
-
- stkBottom = other.stkBottom;
- if (other.stk == nullptr) {
- stk = nullptr;
- stkTop = &stkBottom;
- } else {
- stk = new QStack<StackEntry>(*other.stk);
- stkTop = &stk->top();
- }
- stkDepth = other.stkDepth;
- etcetera = other.etcetera;
- delete oldStk;
- return *this;
-}
-
-/*!
- If the file position on top of the stack has a line number
- less than 1, set its line number to 1 and its column number
- to 1. Otherwise, do nothing.
- */
-void Location::start()
-{
- if (stkTop->lineNo < 1) {
- stkTop->lineNo = 1;
- stkTop->columnNo = 1;
- }
-}
-
-/*!
- Advance the current file position, using \a ch to decide how to do
- that. If \a ch is a \c{'\\n'}, increment the current line number and
- set the column number to 1. If \ch is a \c{'\\t'}, increment to the
- next tab column. Otherwise, increment the column number by 1.
-
- The current file position is the one on top of the position stack.
- */
-void Location::advance(QChar ch)
-{
- if (ch == QLatin1Char('\n')) {
- stkTop->lineNo++;
- stkTop->columnNo = 1;
- } else if (ch == QLatin1Char('\t')) {
- stkTop->columnNo = 1 + tabSize * (stkTop->columnNo + tabSize - 1) / tabSize;
- } else {
- stkTop->columnNo++;
- }
-}
-
-/*!
- Pushes \a filePath onto the file position stack. The current
- file position becomes (\a filePath, 1, 1).
-
- \sa pop()
-*/
-void Location::push(const QString &filePath)
-{
- if (stkDepth++ >= 1) {
- if (stk == nullptr)
- stk = new QStack<StackEntry>;
- stk->push(StackEntry());
- stkTop = &stk->top();
- }
-
- stkTop->filePath = filePath;
- stkTop->lineNo = INT_MIN;
- stkTop->columnNo = 1;
-}
-
-/*!
- Pops the top of the internal stack. The current file position
- becomes the next one in the new top of stack.
-
- \sa push()
-*/
-void Location::pop()
-{
- if (--stkDepth == 0) {
- stkBottom = StackEntry();
- } else {
- stk->pop();
- if (stk->isEmpty()) {
- delete stk;
- stk = nullptr;
- stkTop = &stkBottom;
- } else {
- stkTop = &stk->top();
- }
- }
-}
-
-/*! \fn bool Location::isEmpty() const
-
- Returns \c true if there is no file name set yet; returns \c false
- otherwise. The functions filePath(), lineNo() and columnNo()
- must not be called on an empty Location object.
- */
-
-/*! \fn const QString &Location::filePath() const
- Returns the current path and file name. If the Location is
- empty, the returned string is null.
-
- \sa lineNo(), columnNo()
- */
-
-/*!
- Returns the file name part of the file path, ie the current
- file. Returns an empty string if the file path is empty.
- */
-QString Location::fileName() const
-{
- QFileInfo fi(filePath());
- return fi.fileName();
-}
-
-/*!
- Returns the suffix of the file name. Returns an empty string
- if the file path is empty.
- */
-QString Location::fileSuffix() const
-{
- QString fp = filePath();
- return (fp.isEmpty() ? fp : fp.mid(fp.lastIndexOf('.') + 1));
-}
-
-/*!
- \brief Returns \a path which is canonicalized and relative to the config file.
-
- QDir::relativeFilePath does not canonicalize the paths, so
- if the config file is located at qtbase\src\widgets\doc\qtwidgets.qdocconf
- and it has a reference to any ancestor folder (e.g. ".." or even "../doc")
- */
-QString Location::canonicalRelativePath(const QString &path)
-{
- QDir configFileDir(QDir::current());
- QDir dir(path);
- const QString canon = dir.canonicalPath();
- return configFileDir.relativeFilePath(canon);
-}
-
-/*! \fn int Location::lineNo() const
- Returns the current line number.
- Must not be called on an empty Location object.
-
- \sa filePath(), columnNo()
-*/
-
-/*! \fn int Location::columnNo() const
- Returns the current column number.
- Must not be called on an empty Location object.
-
- \sa filePath(), lineNo()
-*/
-
-/*!
- Writes \a message and \a details to stderr as a formatted
- warning message. Does not write the message if qdoc is in
- the Prepare phase.
- */
-void Location::warning(const QString &message, const QString &details) const
-{
- const auto &config = Config::instance();
- if (!config.preparing() || config.singleExec())
- emitMessage(Warning, message, details);
-}
-
-/*!
- Writes \a message and \a details to stderr as a formatted
- error message. Does not write the message if qdoc is in
- the Prepare phase.
- */
-void Location::error(const QString &message, const QString &details) const
-{
- const auto &config = Config::instance();
- if (!config.preparing() || config.singleExec())
- emitMessage(Error, message, details);
-}
-
-/*!
- Returns the error code QDoc should exit with; EXIT_SUCCESS
- or the number of documentation warnings if they exceeded
- the limit set by warninglimit configuration variable.
- */
-int Location::exitCode()
-{
- if (warningLimit < 0 || warningCount <= warningLimit)
- return EXIT_SUCCESS;
-
- Location().emitMessage(
- Error,
- QStringLiteral("Documentation warnings (%1) exceeded the limit (%2) for '%3'.")
- .arg(QString::number(warningCount), QString::number(warningLimit), project),
- QString());
- return warningCount;
-}
-
-/*!
- Writes \a message and \a details to stderr as a formatted
- error message and then exits the program. qdoc prints fatal
- errors in either phase (Prepare or Generate).
- */
-void Location::fatal(const QString &message, const QString &details) const
-{
- emitMessage(Error, message, details);
- information(message);
- information(details);
- information("Aborting");
- exit(EXIT_FAILURE);
-}
-
-/*!
- Writes \a message and \a details to stderr as a formatted
- report message.
- */
-void Location::report(const QString &message, const QString &details) const
-{
- emitMessage(Report, message, details);
-}
-
-/*!
- Gets several parameters from the config, including
- tab size, program name, and a regular expression that
- appears to be used for matching certain error messages
- so that emitMessage() can avoid printing them.
- */
-void Location::initialize()
-{
- Config &config = Config::instance();
- tabSize = config.getInt(CONFIG_TABSIZE);
- programName = config.programName();
- project = config.getString(CONFIG_PROJECT);
- warningCount = 0;
- if (qEnvironmentVariableIsSet("QDOC_ENABLE_WARNINGLIMIT")
- || config.getBool(CONFIG_WARNINGLIMIT + Config::dot + "enabled"))
- warningLimit = config.getInt(CONFIG_WARNINGLIMIT);
-
- QRegularExpression regExp = config.getRegExp(CONFIG_SPURIOUS);
- if (regExp.isValid()) {
- spuriousRegExp = new QRegularExpression(regExp);
- } else {
- config.lastLocation().warning(
- QStringLiteral("Invalid regular expression '%1'").arg(regExp.pattern()));
- }
-}
-
-/*!
- Apparently, all this does is delete the regular expression
- used for intercepting certain error messages that should
- not be emitted by emitMessage().
- */
-void Location::terminate()
-{
- delete spuriousRegExp;
- spuriousRegExp = nullptr;
-}
-
-/*!
- Prints \a message to \c stdout followed by a \c{'\n'}.
- */
-void Location::information(const QString &message)
-{
- printf("%s\n", message.toLatin1().data());
- fflush(stdout);
-}
-
-/*!
- Report a program bug, including the \a hint.
- */
-void Location::internalError(const QString &hint)
-{
- Location().fatal(QStringLiteral("Internal error (%1)").arg(hint),
- QStringLiteral("There is a bug in %1. Seek advice from your local"
- " %2 guru.")
- .arg(programName)
- .arg(programName));
-}
-
-/*!
- Formats \a message and \a details into a single string
- and outputs that string to \c stderr. \a type specifies
- whether the \a message is an error or a warning.
- */
-void Location::emitMessage(MessageType type, const QString &message, const QString &details) const
-{
- if (type == Warning && spuriousRegExp != nullptr) {
- auto match = spuriousRegExp->match(message, 0, QRegularExpression::NormalMatch, QRegularExpression::AnchorAtOffsetMatchOption);
- if (match.hasMatch() && match.capturedLength() == message.length())
- return;
- }
-
- QString result = message;
- if (!details.isEmpty())
- result += "\n[" + details + QLatin1Char(']');
- result.replace("\n", "\n ");
- if (isEmpty()) {
- if (type == Error)
- result.prepend(QStringLiteral(": error: "));
- else if (type == Warning) {
- result.prepend(QStringLiteral(": warning: "));
- ++warningCount;
- }
- } else {
- if (type == Error)
- result.prepend(QStringLiteral(": (qdoc) error: "));
- else if (type == Warning) {
- result.prepend(QStringLiteral(": (qdoc) warning: "));
- ++warningCount;
- }
- }
- if (type != Report)
- result.prepend(toString());
- fprintf(stderr, "%s\n", result.toLatin1().data());
- fflush(stderr);
-}
-
-/*!
- Converts the location to a string to be prepended to error
- messages.
- */
-QString Location::toString() const
-{
- QString str;
-
- if (isEmpty()) {
- str = programName;
- } else {
- Location loc2 = *this;
- loc2.setEtc(false);
- loc2.pop();
- if (!loc2.isEmpty()) {
- QString blah = QStringLiteral("In file included from ");
- for (;;) {
- str += blah;
- str += loc2.top();
- loc2.pop();
- if (loc2.isEmpty())
- break;
- str += QStringLiteral(",\n");
- blah.fill(' ');
- }
- str += QStringLiteral(":\n");
- }
- str += top();
- }
- return str;
-}
-
-QString Location::top() const
-{
- QDir path(filePath());
- QString str = path.absolutePath();
- if (lineNo() >= 1) {
- str += QLatin1Char(':');
- str += QString::number(lineNo());
- }
- if (etc())
- str += QLatin1String(" (etc.)");
- return str;
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/location.h b/src/qdoc/location.h
deleted file mode 100644
index 7effa191b..000000000
--- a/src/qdoc/location.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- location.h
-*/
-
-#ifndef LOCATION_H
-#define LOCATION_H
-
-#include <QtCore/qcoreapplication.h>
-#include <QtCore/qstack.h>
-
-QT_BEGIN_NAMESPACE
-
-class QRegularExpression;
-
-class Location
-{
-public:
- Location();
- explicit Location(const QString &filePath);
- Location(const Location &other);
- ~Location() { delete stk; }
-
- Location &operator=(const Location &other);
-
- void start();
- void advance(QChar ch);
- void advanceLines(int n)
- {
- stkTop->lineNo += n;
- stkTop->columnNo = 1;
- }
-
- void push(const QString &filePath);
- void pop();
- void setEtc(bool etc) { etcetera = etc; }
- void setLineNo(int no) { stkTop->lineNo = no; }
- void setColumnNo(int no) { stkTop->columnNo = no; }
-
- bool isEmpty() const { return stkDepth == 0; }
- int depth() const { return stkDepth; }
- const QString &filePath() const { return stkTop->filePath; }
- QString fileName() const;
- QString fileSuffix() const;
- int lineNo() const { return stkTop->lineNo; }
- int columnNo() const { return stkTop->columnNo; }
- bool etc() const { return etcetera; }
- void warning(const QString &message, const QString &details = QString()) const;
- void error(const QString &message, const QString &details = QString()) const;
- void fatal(const QString &message, const QString &details = QString()) const;
- void report(const QString &message, const QString &details = QString()) const;
-
- static void initialize();
-
- static void terminate();
- static void information(const QString &message);
- static void internalError(const QString &hint);
- static QString canonicalRelativePath(const QString &path);
- static int exitCode();
-
-private:
- enum MessageType { Warning, Error, Report };
-
- struct StackEntry
- {
- QString filePath;
- int lineNo;
- int columnNo;
- };
- friend class QTypeInfo<StackEntry>;
-
- void emitMessage(MessageType type, const QString &message, const QString &details) const;
- QString toString() const;
- QString top() const;
-
-private:
- StackEntry stkBottom;
- QStack<StackEntry> *stk;
- StackEntry *stkTop;
- int stkDepth;
- bool etcetera;
-
- static int tabSize;
- static int warningCount;
- static int warningLimit;
- static QString programName;
- static QString project;
- static QRegularExpression *spuriousRegExp;
-};
-Q_DECLARE_TYPEINFO(Location::StackEntry, Q_MOVABLE_TYPE);
-Q_DECLARE_TYPEINFO(Location, Q_COMPLEX_TYPE); // stkTop = &stkBottom
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/loggingcategory.h b/src/qdoc/loggingcategory.h
deleted file mode 100644
index 812ef7af8..000000000
--- a/src/qdoc/loggingcategory.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef LOGGINGCATEGORY_H
-#define LOGGINGCATEGORY_H
-
-#include <QtCore/qloggingcategory.h>
-
-QT_BEGIN_NAMESPACE
-
-Q_DECLARE_LOGGING_CATEGORY(lcQdoc)
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/macro.h b/src/qdoc/macro.h
deleted file mode 100644
index 1c902fbb4..000000000
--- a/src/qdoc/macro.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef MACRO_H
-#define MACRO_H
-
-#include "location.h"
-
-#include <QtCore/qmap.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- * Simple structure used by the Doc and DocParser classes.
- */
-struct Macro
-{
-public:
- QString defaultDef;
- Location defaultDefLocation;
- QMap<QString, QString> otherDefs;
- int numParams {};
-};
-
-QT_END_NAMESPACE
-
-#endif // MACRO_H
diff --git a/src/qdoc/main.cpp b/src/qdoc/main.cpp
deleted file mode 100644
index a8196c4c6..000000000
--- a/src/qdoc/main.cpp
+++ /dev/null
@@ -1,628 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "clangcodeparser.h"
-#include "codemarker.h"
-#include "codeparser.h"
-#include "config.h"
-#include "cppcodemarker.h"
-#include "doc.h"
-#include "docbookgenerator.h"
-#include "htmlgenerator.h"
-#include "jscodemarker.h"
-#include "location.h"
-#include "loggingcategory.h"
-#include "puredocparser.h"
-#include "qdocdatabase.h"
-#include "qmlcodemarker.h"
-#include "qmlcodeparser.h"
-#include "utilities.h"
-#include "qtranslator.h"
-#include "tokenizer.h"
-#include "tree.h"
-#include "webxmlgenerator.h"
-
-#include <QtCore/qdatetime.h>
-#include <QtCore/qdebug.h>
-#include <QtCore/qglobal.h>
-#include <QtCore/qhashfunctions.h>
-
-#ifndef QT_BOOTSTRAPPED
-# include <QtCore/qcoreapplication.h>
-#endif
-
-#include <algorithm>
-#include <cstdlib>
-
-QT_BEGIN_NAMESPACE
-
-Q_LOGGING_CATEGORY(lcQdoc, "qt.qdoc")
-
-bool creationTimeBefore(const QFileInfo &fi1, const QFileInfo &fi2)
-{
- return fi1.lastModified() < fi2.lastModified();
-}
-
-#ifndef QT_NO_TRANSLATION
-typedef QPair<QString, QTranslator *> Translator;
-static QList<Translator> translators;
-#endif
-
-static ClangCodeParser *clangParser_ = nullptr;
-
-/*!
- Read some XML indexes containing definitions from other
- documentation sets. \a config contains a variable that
- lists directories where index files can be found. It also
- contains the \c depends variable, which lists the modules
- that the current module depends on. \a formats contains
- a list of output formats; each format may have a different
- output subdirectory where index files are located.
-*/
-static void loadIndexFiles(const QSet<QString> &formats)
-{
- Config &config = Config::instance();
- QDocDatabase *qdb = QDocDatabase::qdocDB();
- QStringList indexFiles;
- const QStringList configIndexes = config.getStringList(CONFIG_INDEXES);
- bool warn = !config.getBool(CONFIG_NOLINKERRORS);
-
- for (const auto &index : configIndexes) {
- QFileInfo fi(index);
- if (fi.exists() && fi.isFile())
- indexFiles << index;
- else if (warn)
- Location().warning(QString("Index file not found: %1").arg(index));
- }
-
- config.dependModules() += config.getStringList(CONFIG_DEPENDS);
- config.dependModules().removeDuplicates();
- bool useNoSubDirs = false;
- QSet<QString> subDirs;
-
- for (const auto &format : formats) {
- if (config.getBool(format + Config::dot + "nosubdirs")) {
- useNoSubDirs = true;
- QString singleOutputSubdir = config.getString(format + Config::dot + "outputsubdir");
- if (singleOutputSubdir.isEmpty())
- singleOutputSubdir = "html";
- subDirs << singleOutputSubdir;
- }
- }
-
- if (!config.dependModules().empty()) {
- if (!config.indexDirs().empty()) {
- for (auto &dir : config.indexDirs()) {
- if (dir.startsWith("..")) {
- const QString prefix(QDir(config.currentDir())
- .relativeFilePath(config.previousCurrentDir()));
- if (!prefix.isEmpty())
- dir.prepend(prefix + QLatin1Char('/'));
- }
- }
- /*
- Load all dependencies:
- Either add all subdirectories of the indexdirs as dependModules,
- when an asterisk is used in the 'depends' list, or
- when <format>.nosubdirs is set, we need to look for all .index files
- in the output subdirectory instead.
- */
- bool asteriskUsed = false;
- if (config.dependModules().contains("*")) {
- config.dependModules().removeOne("*");
- asteriskUsed = true;
- if (useNoSubDirs) {
- std::for_each(formats.begin(), formats.end(), [&](const QString &format) {
- QDir scanDir(config.getOutputDir(format));
- QStringList foundModules =
- scanDir.entryList(QStringList("*.index"), QDir::Files);
- std::transform(
- foundModules.begin(), foundModules.end(), foundModules.begin(),
- [](const QString &index) { return QFileInfo(index).baseName(); });
- config.dependModules() << foundModules;
- });
- } else {
- for (const auto &indexDir : config.indexDirs()) {
- QDir scanDir = QDir(indexDir);
- scanDir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
- QFileInfoList dirList = scanDir.entryInfoList();
- for (const auto &dir : dirList)
- config.dependModules().append(dir.fileName());
- }
- }
- // Remove self-dependencies and possible duplicates
- config.dependModules().removeAll(config.getString(CONFIG_PROJECT).toLower());
- config.dependModules().removeDuplicates();
- qCCritical(lcQdoc) << "qdocconf file has depends = *; loading all "
- << config.dependModules().count()
- << " index files found";
- }
- for (const auto &module : config.dependModules()) {
- QList<QFileInfo> foundIndices;
- // Always look in module-specific subdir, even with *.nosubdirs config
- bool useModuleSubDir = !subDirs.contains(module);
- subDirs << module;
-
- for (const auto &dir : config.indexDirs()) {
- for (const auto &subDir : subDirs) {
- QString fileToLookFor = dir + QLatin1Char('/') + subDir + QLatin1Char('/')
- + module + ".index";
- if (QFile::exists(fileToLookFor)) {
- QFileInfo tempFileInfo(fileToLookFor);
- if (!foundIndices.contains(tempFileInfo))
- foundIndices.append(tempFileInfo);
- }
- }
- }
- // Clear the temporary module-specific subdir
- if (useModuleSubDir)
- subDirs.remove(module);
- std::sort(foundIndices.begin(), foundIndices.end(), creationTimeBefore);
- QString indexToAdd;
- if (foundIndices.size() > 1) {
- /*
- QDoc should always use the last entry in the multimap when there are
- multiple index files for a module, since the last modified file has the
- highest UNIX timestamp.
- */
- QStringList indexPaths;
- indexPaths.reserve(foundIndices.size());
- for (const auto &found : qAsConst(foundIndices))
- indexPaths << found.absoluteFilePath();
- if (warn) {
- Location().warning(
- QString("Multiple index files found for dependency \"%1\":\n%2")
- .arg(module, indexPaths.join('\n')));
- Location().warning(
- QString("Using %1 as index file for dependency \"%2\"")
- .arg(foundIndices[foundIndices.size() - 1].absoluteFilePath(),
- module));
- }
- indexToAdd = foundIndices[foundIndices.size() - 1].absoluteFilePath();
- } else if (foundIndices.size() == 1) {
- indexToAdd = foundIndices[0].absoluteFilePath();
- }
- if (!indexToAdd.isEmpty()) {
- if (!indexFiles.contains(indexToAdd))
- indexFiles << indexToAdd;
- } else if (!asteriskUsed && warn) {
- Location().warning(
- QString(R"("%1" Cannot locate index file for dependency "%2")")
- .arg(config.getString(CONFIG_PROJECT), module));
- }
- }
- } else if (warn) {
- Location().warning(
- QLatin1String("Dependent modules specified, but no index directories were set. "
- "There will probably be errors for missing links."));
- }
- }
- qdb->readIndexes(indexFiles);
-}
-
-/*!
- \internal
- Prints to stderr the name of the project that QDoc is running for,
- in which mode and which phase.
-
- If QDoc is running in debug mode, also logs the command line arguments.
- */
-void logStartEndMessage(const QLatin1String &startStop, const Config &config)
-{
- const QString runName = " qdoc for "
- + config.getString(CONFIG_PROJECT)
- + QLatin1String(" in ")
- + QLatin1String(config.singleExec() ? "single" : "dual")
- + QLatin1String(" process mode: ")
- + QLatin1String(config.preparing() ? "prepare" : "generate")
- + QLatin1String(" phase.");
-
- const QString msg = startStop + runName;
- qCInfo(lcQdoc) << msg.toUtf8().data();
-}
-
-/*!
- Processes the qdoc config file \a fileName. This is the controller for all
- of QDoc. The \a config instance represents the configuration data for QDoc.
- All other classes are initialized with the same config.
- */
-static void processQdocconfFile(const QString &fileName)
-{
- Config &config = Config::instance();
- config.setPreviousCurrentDir(QDir::currentPath());
-
- /*
- With the default configuration values in place, load
- the qdoc configuration file. Note that the configuration
- file may include other configuration files.
-
- The Location class keeps track of the current location
- in the file being processed, mainly for error reporting
- purposes.
- */
- Location::initialize();
- config.load(fileName);
- QString project = config.getString(CONFIG_PROJECT);
- if (project.isEmpty()) {
- qCCritical(lcQdoc) << QLatin1String("qdoc can't run; no project set in qdocconf file");
- exit(1);
- }
- Location::terminate();
-
- config.setCurrentDir(QFileInfo(fileName).path());
- if (!config.currentDir().isEmpty())
- QDir::setCurrent(config.currentDir());
-
- logStartEndMessage(QLatin1String("Start"), config);
-
- if (config.getDebug()) {
- Utilities::startDebugging(QString("command line"));
- qCDebug(lcQdoc).noquote() << "Arguments:" << QCoreApplication::arguments();
- }
-
- /*
- Initialize all the classes and data structures with the
- qdoc configuration. This is safe to do for each qdocconf
- file processed, because all the data structures created
- are either cleared after they have been used, or they
- are cleared in the terminate() functions below.
- */
- Location::initialize();
- Tokenizer::initialize();
- CodeMarker::initialize();
- CodeParser::initialize();
- Generator::initialize();
- Doc::initialize();
-
-#ifndef QT_NO_TRANSLATION
- /*
- Load the language translators, if the configuration specifies any,
- but only if they haven't already been loaded. This works in both
- -prepare/-generate mode and -singleexec mode.
- */
- const QStringList fileNames = config.getStringList(CONFIG_TRANSLATORS);
- for (const auto &file : fileNames) {
- bool found = false;
- if (!translators.isEmpty()) {
- for (const auto &translator : translators) {
- if (translator.first == file) {
- found = true;
- break;
- }
- }
- }
- if (!found) {
- auto *translator = new QTranslator(nullptr);
- if (!translator->load(file)) {
- config.lastLocation().error(
- QCoreApplication::translate("QDoc", "Cannot load translator '%1'")
- .arg(file));
- } else {
- QCoreApplication::instance()->installTranslator(translator);
- translators.append(Translator(file, translator));
- }
- }
- }
-#endif
-
- /*
- Get the source language (Cpp) from the configuration
- and the location in the configuration file where the
- source language was set.
- */
- QString lang = config.getString(CONFIG_LANGUAGE);
- Location langLocation = config.lastLocation();
-
- /*
- Initialize the qdoc database, where all the parsed source files
- will be stored. The database includes a tree of nodes, which gets
- built as the source files are parsed. The documentation output is
- generated by traversing that tree.
-
- Note: qdocDB() allocates a new instance only if no instance exists.
- So it is safe to call qdocDB() any time.
- */
- QDocDatabase *qdb = QDocDatabase::qdocDB();
- qdb->setVersion(config.getString(CONFIG_VERSION));
- qdb->setShowInternal(config.showInternal());
- qdb->setSingleExec(config.getBool(CONFIG_SINGLEEXEC));
- /*
- By default, the only output format is HTML.
- */
- QSet<QString> outputFormats = config.getOutputFormats();
- Location outputFormatsLocation = config.lastLocation();
-
- qdb->clearSearchOrder();
- if (!config.singleExec()) {
- if (!config.preparing()) {
- qCDebug(lcQdoc, " loading index files");
- loadIndexFiles(outputFormats);
- qCDebug(lcQdoc, " done loading index files");
- }
- qdb->newPrimaryTree(project);
- } else if (config.preparing())
- qdb->newPrimaryTree(project);
- else
- qdb->setPrimaryTree(project);
-
- const QString moduleHeader = config.getString(CONFIG_MODULEHEADER);
- if (!moduleHeader.isNull())
- clangParser_->setModuleHeader(moduleHeader);
- else
- clangParser_->setModuleHeader(project);
-
- // Retrieve the dependencies if loadIndexFiles() was not called
- if (config.dependModules().isEmpty()) {
- config.dependModules() = config.getStringList(CONFIG_DEPENDS);
- config.dependModules().removeDuplicates();
- }
- qdb->setSearchOrder(config.dependModules());
-
- // Store the title of the index (landing) page
- NamespaceNode *root = qdb->primaryTreeRoot();
- if (root) {
- QString title = config.getString(CONFIG_NAVIGATION + Config::dot + CONFIG_LANDINGPAGE);
- root->tree()->setIndexTitle(
- config.getString(CONFIG_NAVIGATION + Config::dot + CONFIG_LANDINGTITLE, title));
- }
-
- const auto &excludedDirList = config.getCanonicalPathList(CONFIG_EXCLUDEDIRS);
- QSet<QString> excludedDirs = QSet<QString>(excludedDirList.cbegin(), excludedDirList.cend());
- const auto &excludedFilesList = config.getCanonicalPathList(CONFIG_EXCLUDEFILES);
- QSet<QString> excludedFiles =
- QSet<QString>(excludedFilesList.cbegin(), excludedFilesList.cend());
-
- qCDebug(lcQdoc, "Adding doc/image dirs found in exampledirs to imagedirs");
- QSet<QString> exampleImageDirs;
- QStringList exampleImageList = config.getExampleImageFiles(excludedDirs, excludedFiles);
- for (const auto &image : exampleImageList) {
- if (image.contains("doc/images")) {
- QString t = image.left(image.lastIndexOf("doc/images") + 10);
- if (!exampleImageDirs.contains(t))
- exampleImageDirs.insert(t);
- }
- }
- Generator::augmentImageDirs(exampleImageDirs);
-
- if (config.dualExec() || config.preparing()) {
- QStringList headerList;
- QStringList sourceList;
-
- qCDebug(lcQdoc, "Reading headerdirs");
- headerList =
- config.getAllFiles(CONFIG_HEADERS, CONFIG_HEADERDIRS, excludedDirs, excludedFiles);
- QMap<QString, QString> headers;
- QMultiMap<QString, QString> headerFileNames;
- for (const auto &header : headerList) {
- if (header.contains(QLatin1String("doc/snippets")))
- continue;
- if (headers.contains(header))
- continue;
- headers.insert(header, header);
- QString t = header.mid(header.lastIndexOf('/') + 1);
- headerFileNames.insert(t, t);
- }
-
- qCDebug(lcQdoc, "Reading sourcedirs");
- sourceList =
- config.getAllFiles(CONFIG_SOURCES, CONFIG_SOURCEDIRS, excludedDirs, excludedFiles);
- QMap<QString, QString> sources;
- QMultiMap<QString, QString> sourceFileNames;
- for (const auto &source : sourceList) {
- if (source.contains(QLatin1String("doc/snippets")))
- continue;
- if (sources.contains(source))
- continue;
- sources.insert(source, source);
- QString t = source.mid(source.lastIndexOf('/') + 1);
- sourceFileNames.insert(t, t);
- }
- /*
- Find all the qdoc files in the example dirs, and add
- them to the source files to be parsed.
- */
- qCDebug(lcQdoc, "Reading exampledirs");
- QStringList exampleQdocList = config.getExampleQdocFiles(excludedDirs, excludedFiles);
- for (const auto &example : exampleQdocList) {
- if (!sources.contains(example)) {
- sources.insert(example, example);
- QString t = example.mid(example.lastIndexOf('/') + 1);
- sourceFileNames.insert(t, t);
- }
- }
- /*
- Parse each header file in the set using the appropriate parser and add it
- to the big tree.
- */
-
- qCDebug(lcQdoc, "Parsing header files");
- int parsed = 0;
- for (auto it = headers.constBegin(); it != headers.constEnd(); ++it) {
- CodeParser *codeParser = CodeParser::parserForHeaderFile(it.key());
- if (codeParser) {
- ++parsed;
- qCDebug(lcQdoc, "Parsing %s", qPrintable(it.key()));
- codeParser->parseHeaderFile(config.location(), it.key());
- }
- }
-
- clangParser_->precompileHeaders();
-
- /*
- Parse each source text file in the set using the appropriate parser and
- add it to the big tree.
- */
- parsed = 0;
- qCInfo(lcQdoc) << "Parse source files for" << project;
- for (const auto &key : sources.keys()) {
- auto *codeParser = CodeParser::parserForSourceFile(key);
- if (codeParser) {
- ++parsed;
- qCDebug(lcQdoc, "Parsing %s", qPrintable(key));
- codeParser->parseSourceFile(config.location(), key);
- }
- }
- qCInfo(lcQdoc) << "Source files parsed for" << project;
- }
- /*
- Now the primary tree has been built from all the header and
- source files. Resolve all the class names, function names,
- targets, URLs, links, and other stuff that needs resolving.
- */
- qCDebug(lcQdoc, "Resolving stuff prior to generating docs");
- qdb->resolveStuff();
-
- /*
- The primary tree is built and all the stuff that needed
- resolving has been resolved. Now traverse the tree and
- generate the documentation output. More than one output
- format can be requested. The tree is traversed for each
- one.
- */
- qCDebug(lcQdoc, "Generating docs");
- for (const auto &format : outputFormats) {
- auto *generator = Generator::generatorForFormat(format);
- if (generator == nullptr)
- outputFormatsLocation.fatal(
- QCoreApplication::translate("QDoc", "Unknown output format '%1'").arg(format));
- generator->initializeFormat();
- generator->generateDocs();
- }
- qdb->clearLinkCounts();
-
- qCDebug(lcQdoc, "Terminating qdoc classes");
- if (Utilities::debugging())
- Utilities::stopDebugging(project);
-
- logStartEndMessage(QLatin1String("End"), config);
- QDocDatabase::qdocDB()->setVersion(QString());
- Generator::terminate();
- CodeParser::terminate();
- CodeMarker::terminate();
- Doc::terminate();
- Tokenizer::terminate();
- Location::terminate();
- QDir::setCurrent(config.previousCurrentDir());
-
- qCDebug(lcQdoc, "qdoc classes terminated");
-}
-
-QT_END_NAMESPACE
-
-int main(int argc, char **argv)
-{
- QT_USE_NAMESPACE
-
- // Initialize Qt:
-#ifndef QT_BOOTSTRAPPED
- qSetGlobalQHashSeed(0); // set the hash seed to 0 if it wasn't set yet
-#endif
- QCoreApplication app(argc, argv);
- app.setApplicationVersion(QLatin1String(QT_VERSION_STR));
-
- // Instantiate various singletons (used via static methods):
- /*
- Create code parsers for the languages to be parsed,
- and create a tree for C++.
- */
- ClangCodeParser clangParser;
- clangParser_ = &clangParser;
- QmlCodeParser qmlParser;
- PureDocParser docParser;
-
- /*
- Create code markers for plain text, C++,
- javascript, and QML.
-
- The plain CodeMarker must be instantiated first because it is used as
- fallback when the other markers cannot be used.
-
- Each marker instance is prepended to the CodeMarker::markers list by the
- base class constructor.
- */
- CodeMarker fallbackMarker;
- CppCodeMarker cppMarker;
- JsCodeMarker jsMarker;
- QmlCodeMarker qmlMarker;
-
- HtmlGenerator htmlGenerator;
- WebXMLGenerator webXMLGenerator;
- DocBookGenerator docBookGenerator;
-
- Config::instance().init(QCoreApplication::translate("QDoc", "qdoc"), app.arguments());
- Config &config = Config::instance();
-
- // Get the list of files to act on:
- QStringList qdocFiles = config.qdocFiles();
- if (qdocFiles.isEmpty())
- config.showHelp();
-
- if (config.singleExec())
- qdocFiles = Config::loadMaster(qdocFiles.at(0));
-
- if (config.singleExec()) {
- // single qdoc process for prepare and generate phases
- config.setQDocPass(Config::Prepare);
- for (const auto &file : qAsConst(qdocFiles)) {
- config.dependModules().clear();
- processQdocconfFile(file);
- }
- config.setQDocPass(Config::Generate);
- QDocDatabase::qdocDB()->processForest();
- for (const auto &file : qAsConst(qdocFiles)) {
- config.dependModules().clear();
- processQdocconfFile(file);
- }
- } else {
- // separate qdoc processes for prepare and generate phases
- for (const auto &file : qAsConst(qdocFiles)) {
- config.dependModules().clear();
- processQdocconfFile(file);
- }
- }
-
- // Tidy everything away:
-#ifndef QT_NO_TRANSLATION
- if (!translators.isEmpty()) {
- for (const auto &translator : translators)
- delete translator.second;
- }
- translators.clear();
-#endif
- QmlTypeNode::terminate();
-
-#ifdef DEBUG_SHUTDOWN_CRASH
- qDebug() << "main(): Delete qdoc database";
-#endif
- QDocDatabase::destroyQdocDB();
-#ifdef DEBUG_SHUTDOWN_CRASH
- qDebug() << "main(): qdoc database deleted";
-#endif
-
- return Location::exitCode();
-}
diff --git a/src/qdoc/manifestwriter.cpp b/src/qdoc/manifestwriter.cpp
deleted file mode 100644
index d19c6d6ff..000000000
--- a/src/qdoc/manifestwriter.cpp
+++ /dev/null
@@ -1,328 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "manifestwriter.h"
-
-#include "config.h"
-#include "examplenode.h"
-#include "generator.h"
-#include "qdocdatabase.h"
-
-#include <QtCore/qxmlstream.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class ManifestWriter
- \internal
- \brief The ManifestWriter is responsible for writing manifest files.
- */
-ManifestWriter::ManifestWriter()
-{
- Config &config = Config::instance();
- m_project = config.getString(CONFIG_PROJECT);
- m_outputDirectory = config.getOutputDir();
- m_qdb = QDocDatabase::qdocDB();
-
- const QString prefix = CONFIG_QHP + Config::dot + m_project + Config::dot;
- m_manifestDir =
- QLatin1String("qthelp://") + config.getString(prefix + QLatin1String("namespace"));
- m_manifestDir += QLatin1Char('/') + config.getString(prefix + QLatin1String("virtualFolder"))
- + QLatin1Char('/');
- readManifestMetaContent();
- m_examplesPath = config.getString(CONFIG_EXAMPLESINSTALLPATH);
- if (!m_examplesPath.isEmpty())
- m_examplesPath += QLatin1Char('/');
-}
-
-/*!
- This function outputs one or more manifest files in XML.
- They are used by Creator.
- */
-void ManifestWriter::generateManifestFiles()
-{
- generateManifestFile("examples", "example");
- generateManifestFile("demos", "demo");
- m_qdb->exampleNodeMap().clear();
- m_manifestMetaContent.clear();
-}
-
-/*!
- This function is called by generateManifestFiles(), once
- for each manifest file to be generated. \a manifest is the
- type of manifest file.
- */
-void ManifestWriter::generateManifestFile(const QString &manifest, const QString &element)
-{
- const ExampleNodeMap &exampleNodeMap = m_qdb->exampleNodeMap();
- if (exampleNodeMap.isEmpty())
- return;
- const QString fileName = manifest + "-manifest.xml";
- QFile file(m_outputDirectory + QLatin1Char('/') + fileName);
- bool demos = false;
- if (manifest == QLatin1String("demos"))
- demos = true;
-
- bool proceed = false;
- for (auto map = exampleNodeMap.begin(); map != exampleNodeMap.end(); ++map) {
- const ExampleNode *en = map.value();
- if (demos == en->name().startsWith("demos")) {
- proceed = true;
- break;
- }
- }
- if (!proceed || !file.open(QFile::WriteOnly | QFile::Text))
- return;
-
- QXmlStreamWriter writer(&file);
- writer.setAutoFormatting(true);
- writer.writeStartDocument();
- writer.writeStartElement("instructionals");
- writer.writeAttribute("module", m_project);
- writer.writeStartElement(manifest);
-
- QStringList usedAttributes;
- for (auto map = exampleNodeMap.begin(); map != exampleNodeMap.end(); ++map) {
- const ExampleNode *en = map.value();
- if (demos) {
- if (!en->name().startsWith("demos"))
- continue;
- } else if (en->name().startsWith("demos")) {
- continue;
- }
-
- const QString installPath = retrieveInstallPath(en);
- // attributes that are always written for the element
- usedAttributes.clear();
- usedAttributes << "name"
- << "docUrl"
- << "projectPath";
-
- writer.writeStartElement(element);
- writer.writeAttribute("name", en->title());
- QString docUrl = m_manifestDir + Generator::fileBase(en) + ".html";
- writer.writeAttribute("docUrl", docUrl);
- const auto exampleFiles = en->files();
- if (en->projectFile().isEmpty())
- Location().warning("Example does not have a project file: ", en->name());
- else
- writer.writeAttribute("projectPath", installPath + en->projectFile());
- if (en->imageFileName().isEmpty()) {
- Location().warning("Example does not have an image file: ", en->name());
- } else {
- writer.writeAttribute("imageUrl", m_manifestDir + en->imageFileName());
- usedAttributes << "imageUrl";
- }
-
- QString fullName = m_project + QLatin1Char('/') + en->title();
- QSet<QString> tags;
- for (const auto &index : m_manifestMetaContent) {
- const auto &names = index.names;
- for (const QString &name : names) {
- bool match;
- int wildcard = name.indexOf(QChar('*'));
- switch (wildcard) {
- case -1: // no wildcard, exact match
- match = (fullName == name);
- break;
- case 0: // '*' matches all
- match = true;
- break;
- default: // match with wildcard at the end
- match = fullName.startsWith(name.left(wildcard));
- }
- if (match) {
- tags += index.tags;
- const auto attributes = index.attributes;
- for (const QString &attr : attributes) {
- QLatin1Char div(':');
- QStringList attrList = attr.split(div);
- if (attrList.count() == 1)
- attrList.append(QStringLiteral("true"));
- QString attrName = attrList.takeFirst();
- if (!usedAttributes.contains(attrName)) {
- writer.writeAttribute(attrName, attrList.join(div));
- usedAttributes << attrName;
- }
- }
- }
- }
- }
-
- writer.writeStartElement("description");
- Text brief = en->doc().briefText();
- if (!brief.isEmpty())
- writer.writeCDATA(brief.toString());
- else
- writer.writeCDATA(QString("No description available"));
- writer.writeEndElement(); // description
-
- // Add words from module name as tags
- // QtQuickControls -> qt,quick,controls
- // QtOpenGL -> qt,opengl
- QRegularExpression re("([A-Z]+[a-z0-9]*(3D|GL)?)");
- int pos = 0;
- QRegularExpressionMatch match;
- while ((match = re.match(m_project, pos)).hasMatch()) {
- tags << match.captured(1).toLower();
- pos = match.capturedEnd();
- }
-
- // Include tags added via \meta {tag} {tag1[,tag2,...]}
- // within \example topic
- const QStringMultiMap *metaTagMap = en->doc().metaTagMap();
- if (metaTagMap) {
- for (const auto &tag : metaTagMap->values("tag")) {
- const auto &tagList = tag.toLower().split(QLatin1Char(','));
- tags += QSet<QString>(tagList.cbegin(), tagList.cend());
- }
- }
-
- const auto &titleWords = en->title().toLower().split(QLatin1Char(' '));
- tags += QSet<QString>(titleWords.cbegin(), titleWords.cend());
-
- // Clean up tags, exclude invalid and common words
- QSet<QString>::iterator tag_it = tags.begin();
- QSet<QString> modified;
- while (tag_it != tags.end()) {
- QString s = *tag_it;
- if (s.at(0) == '(')
- s.remove(0, 1).chop(1);
- if (s.endsWith(QLatin1Char(':')))
- s.chop(1);
-
- if (s.length() < 2 || s.at(0).isDigit() || s.at(0) == '-' || s == QLatin1String("qt")
- || s == QLatin1String("the") || s == QLatin1String("and")
- || s.startsWith(QLatin1String("example")) || s.startsWith(QLatin1String("chapter")))
- tag_it = tags.erase(tag_it);
- else if (s != *tag_it) {
- modified << s;
- tag_it = tags.erase(tag_it);
- } else
- ++tag_it;
- }
- tags += modified;
-
- if (!tags.isEmpty()) {
- writer.writeStartElement("tags");
- bool wrote_one = false;
- QStringList sortedTags = tags.values();
- sortedTags.sort();
- for (const auto &tag : qAsConst(sortedTags)) {
- if (wrote_one)
- writer.writeCharacters(",");
- writer.writeCharacters(tag);
- wrote_one = true;
- }
- writer.writeEndElement(); // tags
- }
-
- QString exampleName = en->name().mid(en->name().lastIndexOf('/') + 1);
- QMap<int, QString> filesToOpen;
- const auto files = en->files();
- for (const QString &file : files) {
- QFileInfo fileInfo(file);
- QString fileName = fileInfo.fileName().toLower();
- // open .qml, .cpp and .h files with a
- // basename matching the example (project) name
- // QMap key indicates the priority -
- // the lowest value will be the top-most file
- if ((fileInfo.baseName().compare(exampleName, Qt::CaseInsensitive) == 0)) {
- if (fileName.endsWith(".qml"))
- filesToOpen.insert(0, file);
- else if (fileName.endsWith(".cpp"))
- filesToOpen.insert(1, file);
- else if (fileName.endsWith(".h"))
- filesToOpen.insert(2, file);
- }
- // main.qml takes precedence over main.cpp
- else if (fileName.endsWith("main.qml")) {
- filesToOpen.insert(3, file);
- } else if (fileName.endsWith("main.cpp")) {
- filesToOpen.insert(4, file);
- }
- }
-
- for (auto it = filesToOpen.constEnd(); it != filesToOpen.constBegin();) {
- writer.writeStartElement("fileToOpen");
- if (--it == filesToOpen.constBegin()) {
- writer.writeAttribute(QStringLiteral("mainFile"), QStringLiteral("true"));
- }
- writer.writeCharacters(installPath + it.value());
- writer.writeEndElement();
- }
-
- writer.writeEndElement(); // example
- }
-
- writer.writeEndElement(); // examples
- writer.writeEndElement(); // instructionals
- writer.writeEndDocument();
- file.close();
-}
-
-/*!
- Reads metacontent - additional attributes and tags to apply
- when generating manifest files, read from config.
-
- The manifest metacontent map is cleared immediately after
- the manifest files have been generated.
- */
-void ManifestWriter::readManifestMetaContent()
-{
- Config &config = Config::instance();
- const QStringList names =
- config.getStringList(CONFIG_MANIFESTMETA + Config::dot + QStringLiteral("filters"));
-
- for (const auto &manifest : names) {
- ManifestMetaFilter filter;
- QString prefix = CONFIG_MANIFESTMETA + Config::dot + manifest + Config::dot;
- filter.names = config.getStringSet(prefix + QStringLiteral("names"));
- filter.attributes = config.getStringSet(prefix + QStringLiteral("attributes"));
- filter.tags = config.getStringSet(prefix + QStringLiteral("tags"));
- m_manifestMetaContent.append(filter);
- }
-}
-
-/*!
- Retrieve the install path for the \a example as specified with
- the \meta command, or fall back to the one defined in .qdocconf.
- */
-QString ManifestWriter::retrieveInstallPath(const ExampleNode *example)
-{
- QString installPath;
- if (example->doc().metaTagMap())
- installPath = example->doc().metaTagMap()->value(QLatin1String("installpath"));
- if (installPath.isEmpty())
- installPath = m_examplesPath;
- if (!installPath.isEmpty() && !installPath.endsWith(QLatin1Char('/')))
- installPath += QLatin1Char('/');
-
- return installPath;
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/manifestwriter.h b/src/qdoc/manifestwriter.h
deleted file mode 100644
index 907a7742c..000000000
--- a/src/qdoc/manifestwriter.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef MANIFESTWRITER_H
-#define MANIFESTWRITER_H
-
-#include <QtCore/qlist.h>
-#include <QtCore/qset.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-class ExampleNode;
-class QDocDatabase;
-
-class ManifestWriter
-{
- struct ManifestMetaFilter
- {
- QSet<QString> names;
- QSet<QString> attributes;
- QSet<QString> tags;
- };
-
-public:
- ManifestWriter();
- void generateManifestFiles();
- void generateManifestFile(const QString &manifest, const QString &element);
- void readManifestMetaContent();
- QString retrieveInstallPath(const ExampleNode *example);
-
-private:
- QString m_manifestDir {};
- QString m_examplesPath {};
- QString m_outputDirectory {};
- QString m_project {};
- QDocDatabase *m_qdb { nullptr };
- QList<ManifestMetaFilter> m_manifestMetaContent {};
-};
-
-QT_END_NAMESPACE
-
-#endif // MANIFESTWRITER_H
diff --git a/src/qdoc/namespacenode.cpp b/src/qdoc/namespacenode.cpp
deleted file mode 100644
index 27e342f49..000000000
--- a/src/qdoc/namespacenode.cpp
+++ /dev/null
@@ -1,237 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "namespacenode.h"
-
-#include "codeparser.h"
-#include "tree.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class NamespaceNode
- \brief This class represents a C++ namespace.
-
- A namespace can be used in multiple C++ modules, so there
- can be a NamespaceNode for namespace Xxx in more than one
- Node tree.
- */
-
-/*! \fn NamespaceNode(Aggregate *parent, const QString &name)
- Constructs a NamespaceNode with the specified \a parent and \a name.
- The node type is Node::Namespace.
- */
-
-/*!
- The destructor removes all children from the child list that
- have a parent() that is not this NamespaceNode. This situation
- can arise because of elements that are related to this namespace
- using the \c {\\relates} command.
-
- \note The child nodes remaining in the child list after the ones
- with a different parent() have been removed are deleted in the
- destructor of the Aggregate base class.
- */
-NamespaceNode::~NamespaceNode()
-{
- for (int i = 0; i < m_children.size(); ++i) {
- if (m_children[i]->parent() != this)
- m_children[i] = nullptr;
- }
-}
-
-/*!
- Returns true if this namespace is to be documented in the
- current module. There can be elements declared in this
- namespace spread over multiple modules. Those elements are
- documented in the modules where they are declared, but they
- are linked to from the namespace page in the module where
- the namespace itself is documented.
- */
-bool NamespaceNode::isDocumentedHere() const
-{
- return m_whereDocumented == tree()->camelCaseModuleName();
-}
-
-/*!
- Returns true if this namespace node contains at least one
- child that has documentation and is not private or internal.
- */
-bool NamespaceNode::hasDocumentedChildren() const
-{
- for (const auto *node : qAsConst(m_children)) {
- if (node->isInAPI())
- return true;
- }
- return false;
-}
-
-/*!
- Report qdoc warning for each documented child in a namespace
- that is not documented. This function should only be called
- when the namespace is not documented.
- */
-void NamespaceNode::reportDocumentedChildrenInUndocumentedNamespace() const
-{
- for (const auto *node : qAsConst(m_children)) {
- if (node->isInAPI()) {
- QString msg1 = node->name();
- if (node->isFunction())
- msg1 += "()";
- msg1 += QStringLiteral(
- " is documented, but namespace %1 is not documented in any module.")
- .arg(name());
- QString msg2 =
- QStringLiteral(
- "Add /*! '\\%1 %2' ... */ or remove the qdoc comment marker (!) at "
- "that line number.")
- .arg(COMMAND_NAMESPACE)
- .arg(name());
-
- node->doc().location().warning(msg1, msg2);
- }
- }
-}
-
-/*!
- Returns true if this namespace node is not private and
- contains at least one public child node with documentation.
- */
-bool NamespaceNode::docMustBeGenerated() const
-{
- if (isInAPI())
- return true;
- return hasDocumentedChildren();
-}
-
-/*!
- Returns a const reference to the namespace node's list of
- included children, which contains pointers to all the child
- nodes of other namespace nodes that have the same name as
- this namespace node. The list is built after the prepare
- phase has been run but just before the generate phase. It
- is buils by QDocDatabase::resolveNamespaces().
-
- \sa QDocDatabase::resolveNamespaces()
- */
-const NodeList &NamespaceNode::includedChildren() const
-{
- return m_includedChildren;
-}
-
-/*!
- This function is only called from QDocDatabase::resolveNamesapces().
-
- \sa includedChildren(), QDocDatabase::resolveNamespaces()
- */
-void NamespaceNode::includeChild(Node *child)
-{
- m_includedChildren.append(child);
-}
-
-/*! \fn Tree* NamespaceNode::tree() const
- Returns a pointer to the Tree that contains this NamespaceNode.
- This requires traversing the parent() pointers to the root of
- the Tree, which is the unnamed NamespaceNode.
- */
-
-/*! \fn bool NamespaceNode::isFirstClassAggregate() const
- Returns \c true.
- */
-
-/*! \fn bool NamespaceNode::isRelatableType() const
- Returns \c true.
- */
-
-/*! \fn bool NamespaceNode::wasSeen() const
- Returns \c true if the \c {\\namespace} command that this NamespaceNode
- represents has been parsed by qdoc. When \c false is returned, it means
- that only \c {\\relates} commands have been seen that relate elements to
- this namespace.
- */
-
-/*! \fn void NamespaceNode::markSeen()
- Sets the data member that indicates that the \c {\\namespace} command this
- NamespaceNode represents has been parsed by qdoc.
- */
-
-/*! \fn void NamespaceNode::markNotSeen()
- Clears the data member that indicates that the \c {\\namespace} command this
- NamespaceNode represents has been parsed by qdoc.
- */
-
-/*! \fn void NamespaceNode::setTree(Tree* t)
- Sets the Tree pointer to \a t, which means this NamespaceNode is in the Tree \a t.
- */
-
-/*! \fn QString NamespaceNode::whereDocumented() const
- Returns the camel case name of the module where this namespace is documented.
-
- \sa setWhereDocumented()
- */
-
-/*! \fn void NamespaceNode::setWhereDocumented(const QString &t)
- Sets the camel case name of the module where this namespace is documented to
- the module named \a t.
-
- This function is called when the \c {\\namespace} command is processed to let
- qdoc know that this namespace is documented in the current module, so that
- when something in another module is marked as related to this namespace, it
- can be documented there with a ProxyNode for this namespace.
-
- \sa whereDocumented()
- */
-
-/*! \fn void NamespaceNode::setDocumented()
- Sets the flag indicating that the \c {\\namespace} command for this
- namespace was seen.
- */
-
-/*! \fn bool NamespaceNode::wasDocumented() const
- Returns \c true if a \c {\\namespace} command for this namespace was seen.
- Otherwise returns \c false.
- */
-
-/*! \fn void NamespaceNode::setDocNode(NamespaceNode *ns) { m_docNode = ns; }
- Called in QDocDatabase::resolveNamespaces() to set the pointer to the
- NamespaceNode in which this namespace is documented.
-
- \sa QDocDatabase::resolveNamespaces()
- */
-
-/*! \fn NamespaceNode *NamespaceNode::docNode() const
- Returns a pointer to the NamespaceNode that represents where the namespace
- documentation is actually generated. API elements in many different modules
- can be included in a single namespace. That namespace is only documented in
- one module. The namespace is documented in the module where the \c {\\namespace}
- command for the namespace appears.
-
- \sa QDocDatabase::resolveNamespaces()
- */
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/namespacenode.h b/src/qdoc/namespacenode.h
deleted file mode 100644
index 08e676339..000000000
--- a/src/qdoc/namespacenode.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef NAMESPACENODE_H
-#define NAMESPACENODE_H
-
-#include "aggregate.h"
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-class Tree;
-
-class NamespaceNode : public Aggregate
-{
-public:
- NamespaceNode(Aggregate *parent, const QString &name) : Aggregate(Namespace, parent, name) {}
- ~NamespaceNode() override;
- Tree *tree() const override { return (parent() ? parent()->tree() : m_tree); }
-
- bool isFirstClassAggregate() const override { return true; }
- bool isRelatableType() const override { return true; }
- bool wasSeen() const override { return m_seen; }
- void markSeen() { m_seen = true; }
- void markNotSeen() { m_seen = false; }
- void setTree(Tree *t) { m_tree = t; }
- const NodeList &includedChildren() const;
- void includeChild(Node *child);
- QString whereDocumented() const { return m_whereDocumented; }
- void setWhereDocumented(const QString &t) { m_whereDocumented = t; }
- bool isDocumentedHere() const;
- bool hasDocumentedChildren() const;
- void reportDocumentedChildrenInUndocumentedNamespace() const;
- bool docMustBeGenerated() const override;
- void setDocNode(NamespaceNode *ns) { m_docNode = ns; }
- NamespaceNode *docNode() const { return m_docNode; }
-
-private:
- bool m_seen { false };
- Tree *m_tree { nullptr };
- QString m_whereDocumented {};
- NamespaceNode *m_docNode { nullptr };
- NodeList m_includedChildren {};
-};
-
-QT_END_NAMESPACE
-
-#endif // NAMESPACENODE_H
diff --git a/src/qdoc/node.cpp b/src/qdoc/node.cpp
deleted file mode 100644
index 354d8fec5..000000000
--- a/src/qdoc/node.cpp
+++ /dev/null
@@ -1,1813 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "node.h"
-
-#include "aggregate.h"
-#include "codemarker.h"
-#include "config.h"
-#include "enumnode.h"
-#include "functionnode.h"
-#include "generator.h"
-#include "qdocdatabase.h"
-#include "qmltypenode.h"
-#include "qmlpropertynode.h"
-#include "relatedclass.h"
-#include "sharedcommentnode.h"
-#include "tokenizer.h"
-#include "tree.h"
-
-#include <QtCore/quuid.h>
-#include <QtCore/qversionnumber.h>
-
-QT_BEGIN_NAMESPACE
-
-QStringMap Node::operators;
-QMap<QString, Node::NodeType> Node::goals;
-
-/*!
- \class Node
- \brief The Node class is the base class for all the nodes in QDoc's parse tree.
-
- Class Node is the base class of all the node subclasses. There is a subclass of Node
- for each type of entity that QDoc can document. The types of entities that QDoc can
- document are listed in the enum type NodeType.
-
- After ClangCodeParser has parsed all the header files to build its precompiled header,
- it then visits the clang Abstract Syntax Tree (AST). For each node in the AST that it
- determines is in the public API and must be documented, it creates an instance of one
- of the Node subclasses and adds it to the QDoc Tree.
-
- Each instance of a sublass of Node has a parent pointer to link it into the Tree. The
- parent pointer is obtained by calling \l {parent()}, which returns a pointer to an
- instance of the Node subclass, Aggregate, which is never instantiated directly, but
- as the base class for certain subclasses of Node that can have children. For example,
- ClassNode and QmlTypeNode can have children, so they both inherit Aggregate, while
- PropertyNode and QmlPropertyNode can not have children, so they both inherit Node.
-
- \sa Aggregate, ClassNode, PropertyNode
- */
-
-/*!
- Initialize the map of search goals. This is called once
- by QDocDatabase::initializeDB(). The map key is a string
- representing a value in the enum Node::NodeType. The map value
- is the enum value.
-
- There should be an entry in the map for each value in the
- NodeType enum.
- */
-void Node::initialize()
-{
- goals.insert("namespace", Node::Namespace);
- goals.insert("class", Node::Class);
- goals.insert("struct", Node::Struct);
- goals.insert("union", Node::Union);
- goals.insert("header", Node::HeaderFile);
- goals.insert("headerfile", Node::HeaderFile);
- goals.insert("page", Node::Page);
- goals.insert("enum", Node::Enum);
- goals.insert("example", Node::Example);
- goals.insert("externalpage", Node::ExternalPage);
- goals.insert("typedef", Node::Typedef);
- goals.insert("typealias", Node::TypeAlias);
- goals.insert("function", Node::Function);
- goals.insert("proxy", Node::Proxy);
- goals.insert("property", Node::Property);
- goals.insert("variable", Node::Variable);
- goals.insert("group", Node::Group);
- goals.insert("module", Node::Module);
- goals.insert("qmltype", Node::QmlType);
- goals.insert("qmlmodule", Node::QmlModule);
- goals.insert("qmlproperty", Node::QmlProperty);
- goals.insert("qmlsignal", Node::Function);
- goals.insert("qmlsignalhandler", Node::Function);
- goals.insert("qmlmethod", Node::Function);
- goals.insert("qmlbasictype", Node::QmlBasicType);
- goals.insert("sharedcomment", Node::SharedComment);
- goals.insert("collection", Node::Collection);
-}
-
-/*!
- If this Node's type is \a from, change the type to \a to
- and return \c true. Otherwise return false. This function
- is used to change Qml node types to Javascript node types,
- because these nodes are created as Qml nodes before it is
- discovered that the entity represented by the node is not
- Qml but javascript.
-
- Note that if the function returns true, which means the node
- type was indeed changed, then the node's Genus is also changed
- from QML to JS.
-
- The function also works in the other direction, but there is
- no use case for that.
- */
-bool Node::changeType(NodeType from, NodeType to)
-{
- if (m_nodeType == from) {
- m_nodeType = to;
- switch (to) {
- case QmlType:
- case QmlModule:
- case QmlProperty:
- case QmlBasicType:
- setGenus(Node::QML);
- break;
- case JsType:
- case JsModule:
- case JsProperty:
- case JsBasicType:
- setGenus(Node::JS);
- break;
- default:
- setGenus(Node::CPP);
- break;
- }
- return true;
- }
- return false;
-}
-
-/*!
- Returns \c true if the node \a n1 is less than node \a n2. The
- comparison is performed by comparing properties of the nodes
- in order of increasing complexity.
- */
-bool Node::nodeNameLessThan(const Node *n1, const Node *n2)
-{
-#define LT_RETURN_IF_NOT_EQUAL(a, b) \
- if ((a) != (b)) \
- return (a) < (b);
-
- if (n1->isPageNode() && n2->isPageNode()) {
- LT_RETURN_IF_NOT_EQUAL(n1->fullName(), n2->fullName());
- LT_RETURN_IF_NOT_EQUAL(n1->fullTitle(), n2->fullTitle());
- }
-
- if (n1->isFunction() && n2->isFunction()) {
- const auto *f1 = static_cast<const FunctionNode *>(n1);
- const auto *f2 = static_cast<const FunctionNode *>(n2);
-
- LT_RETURN_IF_NOT_EQUAL(f1->isConst(), f2->isConst());
- LT_RETURN_IF_NOT_EQUAL(f1->signature(false, false), f2->signature(false, false));
- }
-
- LT_RETURN_IF_NOT_EQUAL(n1->nodeType(), n2->nodeType());
- LT_RETURN_IF_NOT_EQUAL(n1->name(), n2->name());
- LT_RETURN_IF_NOT_EQUAL(n1->access(), n2->access());
- LT_RETURN_IF_NOT_EQUAL(n1->location().filePath(), n2->location().filePath());
-
- return false;
-}
-
-/*!
- \enum Node::NodeType
-
- An unsigned char value that identifies an object as a
- particular subclass of Node.
-
- \value NoType The node type has not been set yet.
- \value Namespace The Node subclass is NamespaceNode, which represents a C++
- namespace.
- \value Class The Node subclass is ClassNode, which represents a C++ class.
- \value Struct The Node subclass is ClassNode, which represents a C struct.
- \value Union The Node subclass is ClassNode, which represents a C union
- (currently no known uses).
- \value HeaderFile The Node subclass is HeaderNode, which represents a header
- file.
- \value Page The Node subclass is PageNode, which represents a text page from
- a .qdoc file.
- \value Enum The Node subclass is EnumNode, which represents an enum type or
- enum class.
- \value Example The Node subclass is ExampleNode, which represents an example
- subdirectory.
- \value ExternalPage The Node subclass is ExternalPageNode, which is for
- linking to an external page.
- \value Function The Node subclass is FunctionNode, which can represent C++,
- QML, and Javascript functions.
- \value Typedef The Node subclass is TypedefNode, which represents a C++
- typedef.
- \value Property The Node subclass is PropertyNode, which represents a use of
- Q_Property.
- \value Variable The Node subclass is VariableNode, which represents a global
- variable or class data member.
- \value Group The Node subclass is CollectionNode, which represents a group of
- documents.
- \value Module The Node subclass is CollectionNode, which represents a C++
- module.
- \value QmlType The Node subclass is QmlTypeNode, which represents a QML type.
- \value QmlModule The Node subclass is CollectionNode, which represents a QML
- module.
- \value QmlProperty The Node subclass is QmlPropertyNode, which represents a
- property in a QML type.
- \value QmlBasicType The Node subclass is QmlBasicTypeNode, which represents a
- basic type like int, etc.
- \value JsType The Node subclass is QmlTypeNode, which represents a javascript
- type.
- \value JsModule The Node subclass is CollectionNode, which represents a
- javascript module.
- \value JsProperty The Node subclass is QmlPropertyNode, which represents a
- javascript property.
- \value JsBasicType The Node subclass is QmlBasicTypeNode, which represents a
- basic type like int, etc.
- \value SharedComment The Node subclass is SharedCommentNode, which represents
- a collection of nodes that share the same documentation comment.
- \omitvalue Collection
- \value Proxy The Node subclass is ProxyNode, which represents one or more
- entities that are documented in the current module but which actually
- reside in a different module.
- \omitvalue LastType
-*/
-
-/*!
- \enum Node::Genus
-
- An unsigned char value that specifies whether the Node represents a
- C++ element, a QML element, a javascript element, or a text document.
- The Genus values are also passed to search functions to specify the
- Genus of Tree Node that can satisfy the search.
-
- \value DontCare The Genus is not specified. Used when calling Tree search functions to indicate
- the search can accept any Genus of Node.
- \value CPP The Node represents a C++ element.
- \value JS The Node represents a javascript element.
- \value QML The Node represents a QML element.
- \value DOC The Node represents a text document.
-*/
-
-/*!
- \enum Access
-
- An unsigned char value that indicates the C++ access level.
-
- \value Public The element has public access.
- \value Protected The element has protected access.
- \value Private The element has private access.
-*/
-
-/*!
- \enum Node::Status
-
- An unsigned char that specifies the status of the documentation element in
- the documentation set.
-
- \value Obsolete The element is obsolete and no longer exists in the software.
- \value Deprecated The element has been deprecated but still exists in the software.
- \value Preliminary The element is new; the documentation is preliminary.
- \value Active The element is current.
- \value Internal The element is for internal use only, not to be published.
- \value DontDocument The element is not to be documented.
-*/
-
-/*!
- \enum Node::ThreadSafeness
-
- An unsigned char that specifies the degree of thread-safeness of the element.
-
- \value UnspecifiedSafeness The thread-safeness is not specified.
- \value NonReentrant The element is not reentrant.
- \value Reentrant The element is reentrant.
- \value ThreadSafe The element is threadsafe.
-*/
-
-/*!
- \enum Node::LinkType
-
- An unsigned char value that probably should be moved out of the Node base class.
-
- \value StartLink
- \value NextLink
- \value PreviousLink
- \value ContentsLink
- */
-
-/*!
- \enum Node::PageType
-
- An unsigned char value that indicates what kind of documentation page
- the Node represents. I think it is not very useful anymore.
-
- \value NoPageType
- \value AttributionPage
- \value ApiPage
- \value ArticlePage
- \value ExamplePage
- \value HowToPage
- \value OverviewPage
- \value TutorialPage
- \value FAQPage
- \omitvalue OnBeyondZebra
-*/
-
-/*!
- \enum Node::FlagValue
-
- A value used in PropertyNode and QmlPropertyNode that can be -1, 0, or +1.
- Properties and QML properties have flags, which can be 0 or 1, false or true,
- or not set. FlagValueDefault is the not set value. In other words, if a flag
- is set to FlagValueDefault, the meaning is the flag has not been set.
-
- \value FlagValueDefault -1 Not set.
- \value FlagValueFalse 0 False.
- \value FlagValueTrue 1 True.
-*/
-
-/*!
- \fn Node::~Node()
-
- The default destructor is virtual so any subclass of Node can be
- deleted by deleting a pointer to Node.
- */
-
-/*! \fn bool Node::isActive() const
- Returns true if this node's status is \c Active.
- */
-
-/*! \fn bool Node::isAnyType() const
- Always returns true. I'm not sure why this is here.
- */
-
-/*! \fn bool Node::isClass() const
- Returns true if the node type is \c Class.
- */
-
-/*! \fn bool Node::isCppNode() const
- Returns true if this node's Genus value is \c CPP.
- */
-
-/*! \fn bool Node::isDeprecated() const
- Returns true if this node's status is \c Deprecated.
- */
-
-/*! \fn bool Node::isDontDocument() const
- Returns true if this node's status is \c DontDocument.
- */
-
-/*! \fn bool Node::isEnumType() const
- Returns true if the node type is \c Enum.
- */
-
-/*! \fn bool Node::isExample() const
- Returns true if the node type is \c Example.
- */
-
-/*! \fn bool Node::isExternalPage() const
- Returns true if the node type is \c ExternalPage.
- */
-
-/*! \fn bool Node::isFunction(Genus g = DontCare) const
- Returns true if this is a FunctionNode and its Genus is set to \a g.
- */
-
-/*! \fn bool Node::isGroup() const
- Returns true if the node type is \c Group.
- */
-
-/*! \fn bool Node::isHeader() const
- Returns true if the node type is \c HeaderFile.
- */
-
-/*! \fn bool Node::isIndexNode() const
- Returns true if this node was created from something in an index file.
- */
-
-/*! \fn bool Node::isJsBasicType() const
- Returns true if the node type is \c JsBasicType.
- */
-
-/*! \fn bool Node::isJsModule() const
- Returns true if the node type is \c JsModule.
- */
-
-/*! \fn bool Node::isJsNode() const
- Returns true if this node's Genus value is \c JS.
- */
-
-/*! \fn bool Node::isJsProperty() const
- Returns true if the node type is \c JsProperty.
- */
-
-/*! \fn bool Node::isJsType() const
- Returns true if the node type is \c JsType.
- */
-
-/*! \fn bool Node::isModule() const
- Returns true if the node type is \c Module.
- */
-
-/*! \fn bool Node::isNamespace() const
- Returns true if the node type is \c Namespace.
- */
-
-/*! \fn bool Node::isObsolete() const
- Returns true if this node's status is \c Obsolete.
- */
-
-/*! \fn bool Node::isPage() const
- Returns true if the node type is \c Page.
- */
-
-/*! \fn bool Node::isPreliminary() const
- Returns true if this node's status is \c Preliminary.
- */
-
-/*! \fn bool Node::isPrivate() const
- Returns true if this node's access is \c Private.
- */
-
-/*! \fn bool Node::isProperty() const
- Returns true if the node type is \c Property.
- */
-
-/*! \fn bool Node::isProxyNode() const
- Returns true if the node type is \c Proxy.
- */
-
-/*! \fn bool Node::isPublic() const
- Returns true if this node's access is \c Public.
- */
-
-/*! \fn bool Node::isProtected() const
- Returns true if this node's access is \c Protected.
- */
-
-/*! \fn bool Node::isQmlBasicType() const
- Returns true if the node type is \c QmlBasicType.
- */
-
-/*! \fn bool Node::isQmlModule() const
- Returns true if the node type is \c QmlModule.
- */
-
-/*! \fn bool Node::isQmlNode() const
- Returns true if this node's Genus value is \c QML.
- */
-
-/*! \fn bool Node::isQmlProperty() const
- Returns true if the node type is \c QmlProperty.
- */
-
-/*! \fn bool Node::isQmlType() const
- Returns true if the node type is \c QmlType.
- */
-
-/*! \fn bool Node::isRelatedNonmember() const
- Returns true if this is a related nonmember of something.
- */
-
-/*! \fn bool Node::isStruct() const
- Returns true if the node type is \c Struct.
- */
-
-/*! \fn bool Node::isSharedCommentNode() const
- Returns true if the node type is \c SharedComment.
- */
-
-/*! \fn bool Node::isTypeAlias() const
- Returns true if the node type is \c Typedef.
- */
-
-/*! \fn bool Node::isTypedef() const
- Returns true if the node type is \c Typedef.
- */
-
-/*! \fn bool Node::isUnion() const
- Returns true if the node type is \c Union.
- */
-
-/*! \fn bool Node::isVariable() const
- Returns true if the node type is \c Variable.
- */
-
-/*! \fn bool Node::isGenericCollection() const
- Returns true if the node type is \c Collection.
- */
-
-/*! \fn bool Node::isAbstract() const
- Returns true if the ClassNode or QmlTypeNode is marked abstract.
-*/
-
-/*! \fn bool Node::isAggregate() const
- Returns true if this node is an aggregate, which means it
- inherits Aggregate and can therefore have children.
-*/
-
-/*! \fn bool Node::isFirstClassAggregate() const
- Returns true if this Node is an Aggregate but not a ProxyNode.
-*/
-
-/*! \fn bool Node::isAlias() const
- Returns true if this QML property is marked as an alias.
-*/
-
-/*! \fn bool Node::isAttached() const
- Returns true if the QML property or QML method node is marked as attached.
-*/
-
-/*! \fn bool Node::isClassNode() const
- Returns true if this is an instance of ClassNode.
-*/
-
-/*! \fn bool Node::isCollectionNode() const
- Returns true if this is an instance of CollectionNode.
-*/
-
-/*! \fn bool Node::isDefault() const
- Returns true if the QML property node is marked as default.
-*/
-
-/*! \fn bool Node::isMacro() const
- returns true if either FunctionNode::isMacroWithParams() or
- FunctionNode::isMacroWithoutParams() returns true.
-*/
-
-/*! \fn bool Node::isPageNode() const
- Returns true if this node represents something that generates a documentation
- page. In other words, if this Node's subclass inherits PageNode, then this
- function will return \e true.
-*/
-
-/*! \fn bool Node::isQtQuickNode() const
- Returns true if this node represents a QML element in the QtQuick module.
-*/
-
-/*! \fn bool Node::isReadOnly() const
- Returns true if the QML property node is marked as a read-only property.
-*/
-
-/*! \fn bool Node::isRelatableType() const
- Returns true if this node is something you can relate things to with
- the \e relates command. NamespaceNode, ClassNode, HeaderNode, and
- ProxyNode are relatable types.
-*/
-
-/*! \fn bool Node::isMarkedReimp() const
- Returns true if the FunctionNode is marked as a reimplemented function.
- That means it is virtual in the base class and it is reimplemented in
- the subclass.
-*/
-
-/*! \fn bool Node::isPropertyGroup() const
- Returns true if the node is a SharedCommentNode for documenting
- multiple C++ properties or multiple QML properties.
-*/
-
-/*! \fn bool Node::isStatic() const
- Returns true if the FunctionNode represents a static function.
-*/
-
-/*! \fn bool Node::isTextPageNode() const
- Returns true if the node is a PageNode but not an Aggregate.
-*/
-
-/*!
- Returns this node's name member. Appends "()" to the returned
- name if this node is a function node, but not if it is a macro
- because macro names normally appear without parentheses.
- */
-QString Node::plainName() const
-{
- if (isFunction() && !isMacro())
- return m_name + QLatin1String("()");
- return m_name;
-}
-
-/*!
- Constructs and returns the node's fully qualified name by
- recursively ascending the parent links and prepending each
- parent name + "::". Breaks out when reaching a HeaderNode,
- or when the parent pointer is \a relative. Typically, calls
- to this function pass \c nullptr for \a relative.
- */
-QString Node::plainFullName(const Node *relative) const
-{
- if (m_name.isEmpty())
- return QLatin1String("global");
- if (isHeader())
- return plainName();
-
- QStringList parts;
- const Node *node = this;
- while (node && !node->isHeader()) {
- parts.prepend(node->plainName());
- if (node->parent() == relative || node->parent()->name().isEmpty())
- break;
- node = node->parent();
- }
- return parts.join(QLatin1String("::"));
-}
-
-/*!
- Constructs and returns the node's fully qualified signature
- by recursively ascending the parent links and prepending each
- parent name + "::" to the plain signature. The return type is
- not included.
- */
-QString Node::plainSignature() const
-{
- if (m_name.isEmpty())
- return QLatin1String("global");
-
- QString fullName;
- const Node *node = this;
- while (node) {
- fullName.prepend(node->signature(false, true));
- if (node->parent()->name().isEmpty())
- break;
- fullName.prepend(QLatin1String("::"));
- node = node->parent();
- }
- return fullName;
-}
-
-/*!
- Constructs and returns this node's full name. The full name is
- often just the title(). When it is not the title, it is the
- plainFullName().
- */
-QString Node::fullName(const Node *relative) const
-{
- if ((isTextPageNode() || isGroup()) && !title().isEmpty())
- return title();
- return plainFullName(relative);
-}
-
-/*!
- Try to match this node's type with one of the \a types.
- If a match is found, return true. If no match is found,
- return false.
- */
-bool Node::match(const QList<int> &types) const
-{
- for (int i = 0; i < types.size(); ++i) {
- if (nodeType() == types.at(i))
- return true;
- }
- return false;
-}
-
-/*!
- Sets this Node's Doc to \a doc. If \a replace is false and
- this Node already has a Doc, and if this doc is not marked
- with the \\reimp command, a warning is reported that the
- existing Doc is being overridden, and it reports where the
- previous Doc was found. If \a replace is true, the Doc is
- replaced silently.
- */
-void Node::setDoc(const Doc &doc, bool replace)
-{
- if (!m_doc.isEmpty() && !replace && !doc.isMarkedReimp()) {
- doc.location().warning(QStringLiteral("Overrides a previous doc"));
- m_doc.location().warning(QStringLiteral("(The previous doc is here)"));
- }
- m_doc = doc;
-}
-
-/*!
- Construct a node with the given \a type and having the
- given \a parent and \a name. The new node is added to the
- parent's child list.
- */
-Node::Node(NodeType type, Aggregate *parent, const QString &name)
- : m_nodeType(type),
- m_indexNodeFlag(false),
- m_relatedNonmember(false),
- m_hadDoc(false),
- m_parent(parent),
- m_name(name)
-{
- if (m_parent)
- m_parent->addChild(this);
- m_outSubDir = Generator::outputSubdir();
- if (operators.isEmpty()) {
- operators.insert("++", "inc");
- operators.insert("--", "dec");
- operators.insert("==", "eq");
- operators.insert("!=", "ne");
- operators.insert("<<", "lt-lt");
- operators.insert(">>", "gt-gt");
- operators.insert("+=", "plus-assign");
- operators.insert("-=", "minus-assign");
- operators.insert("*=", "mult-assign");
- operators.insert("/=", "div-assign");
- operators.insert("%=", "mod-assign");
- operators.insert("&=", "bitwise-and-assign");
- operators.insert("|=", "bitwise-or-assign");
- operators.insert("^=", "bitwise-xor-assign");
- operators.insert("<<=", "bitwise-left-shift-assign");
- operators.insert(">>=", "bitwise-right-shift-assign");
- operators.insert("||", "logical-or");
- operators.insert("&&", "logical-and");
- operators.insert("()", "call");
- operators.insert("[]", "subscript");
- operators.insert("->", "pointer");
- operators.insert("->*", "pointer-star");
- operators.insert("+", "plus");
- operators.insert("-", "minus");
- operators.insert("*", "mult");
- operators.insert("/", "div");
- operators.insert("%", "mod");
- operators.insert("|", "bitwise-or");
- operators.insert("&", "bitwise-and");
- operators.insert("^", "bitwise-xor");
- operators.insert("!", "not");
- operators.insert("~", "bitwise-not");
- operators.insert("<=", "lt-eq");
- operators.insert(">=", "gt-eq");
- operators.insert("<", "lt");
- operators.insert(">", "gt");
- operators.insert("=", "assign");
- operators.insert(",", "comma");
- operators.insert("delete[]", "delete-array");
- operators.insert("delete", "delete");
- operators.insert("new[]", "new-array");
- operators.insert("new", "new");
- }
- setPageType(getPageType(type));
- setGenus(getGenus(type));
-}
-
-/*!
- Determines the appropriate PageType value for the NodeType
- value \a t and returns that PageType value.
- */
-Node::PageType Node::getPageType(Node::NodeType t)
-{
- switch (t) {
- case Node::Namespace:
- case Node::Class:
- case Node::Struct:
- case Node::Union:
- case Node::HeaderFile:
- case Node::Enum:
- case Node::Function:
- case Node::Typedef:
- case Node::Property:
- case Node::Variable:
- case Node::QmlType:
- case Node::QmlProperty:
- case Node::QmlBasicType:
- case Node::JsType:
- case Node::JsProperty:
- case Node::JsBasicType:
- case Node::SharedComment:
- return Node::ApiPage;
- case Node::Example:
- return Node::ExamplePage;
- case Node::Page:
- case Node::ExternalPage:
- return Node::NoPageType;
- case Node::Group:
- case Node::Module:
- case Node::QmlModule:
- case Node::JsModule:
- case Node::Collection:
- return Node::OverviewPage;
- case Node::Proxy:
- default:
- return Node::NoPageType;
- }
-}
-
-/*!
- Determines the appropriate Genus value for the NodeType
- value \a t and returns that Genus value. Note that this
- function is called in the Node() constructor. It always
- returns Node::CPP when \a t is Node::Function, which
- means the FunctionNode() constructor must determine its
- own Genus value separately, because class FunctionNode
- is a subclass of Node.
- */
-Node::Genus Node::getGenus(Node::NodeType t)
-{
- switch (t) {
- case Node::Enum:
- case Node::Class:
- case Node::Struct:
- case Node::Union:
- case Node::Module:
- case Node::Typedef:
- case Node::Property:
- case Node::Variable:
- case Node::Function:
- case Node::Namespace:
- case Node::HeaderFile:
- return Node::CPP;
- case Node::QmlType:
- case Node::QmlModule:
- case Node::QmlProperty:
- case Node::QmlBasicType:
- return Node::QML;
- case Node::JsType:
- case Node::JsModule:
- case Node::JsProperty:
- case Node::JsBasicType:
- return Node::JS;
- case Node::Page:
- case Node::Group:
- case Node::Example:
- case Node::ExternalPage:
- return Node::DOC;
- case Node::Collection:
- case Node::SharedComment:
- case Node::Proxy:
- default:
- return Node::DontCare;
- }
-}
-
-/*! \fn QString Node::url() const
- Returns the node's URL, which is the url of the documentation page
- created for the node or the url of an external page if the node is
- an ExternalPageNode. The url is used for generating a link to the
- page the node represents.
-
- \sa Node::setUrl()
- */
-
-/*! \fn void Node::setUrl(const QString &url)
- Sets the node's URL to \a url, which is the url to the page that the
- node represents. This function is only called when an index file is
- read. In other words, a node's url is set when qdoc decides where its
- page will be and what its name will be, which happens when qdoc writes
- the index file for the module being documented.
-
- \sa QDocIndexFiles
- */
-
-/*!
- Returns this node's type as a string for use as an
- attribute value in XML or HTML.
- */
-QString Node::nodeTypeString() const
-{
- if (isFunction()) {
- const auto *fn = static_cast<const FunctionNode *>(this);
- return fn->kindString();
- }
- return nodeTypeString(nodeType());
-}
-
-/*!
- Returns the node type \a t as a string for use as an
- attribute value in XML or HTML.
- */
-QString Node::nodeTypeString(NodeType t)
-{
- switch (t) {
- case Namespace:
- return QLatin1String("namespace");
- case Class:
- return QLatin1String("class");
- case Struct:
- return QLatin1String("struct");
- case Union:
- return QLatin1String("union");
- case HeaderFile:
- return QLatin1String("header");
- case Page:
- return QLatin1String("page");
- case Enum:
- return QLatin1String("enum");
- case Example:
- return QLatin1String("example");
- case ExternalPage:
- return QLatin1String("external page");
- case TypeAlias:
- return QLatin1String("alias");
- case Typedef:
- return QLatin1String("typedef");
- case Function:
- return QLatin1String("function");
- case Property:
- return QLatin1String("property");
- case Proxy:
- return QLatin1String("proxy");
- case Variable:
- return QLatin1String("variable");
- case Group:
- return QLatin1String("group");
- case Module:
- return QLatin1String("module");
-
- case QmlType:
- return QLatin1String("QML type");
- case QmlBasicType:
- return QLatin1String("QML basic type");
- case QmlModule:
- return QLatin1String("QML module");
- case QmlProperty:
- return QLatin1String("QML property");
-
- case JsType:
- return QLatin1String("JS type");
- case JsBasicType:
- return QLatin1String("JS basic type");
- case JsModule:
- return QLatin1String("JS module");
- case JsProperty:
- return QLatin1String("JS property");
-
- case SharedComment:
- return QLatin1String("shared comment");
- case Collection:
- return QLatin1String("collection");
- default:
- break;
- }
- return QString();
-}
-
-/*!
- Set the page type according to the string \a t.
- */
-void Node::setPageType(const QString &t)
-{
- if ((t == "API") || (t == "api"))
- m_pageType = ApiPage;
- else if (t == "howto")
- m_pageType = HowToPage;
- else if (t == "overview")
- m_pageType = OverviewPage;
- else if (t == "tutorial")
- m_pageType = TutorialPage;
- else if (t == "faq")
- m_pageType = FAQPage;
- else if (t == "article")
- m_pageType = ArticlePage;
- else if (t == "example")
- m_pageType = ExamplePage;
-}
-
-/*! Converts the boolean value \a b to an enum representation
- of the boolean type, which includes an enum value for the
- \e {default value} of the item, i.e. true, false, or default.
- */
-Node::FlagValue Node::toFlagValue(bool b)
-{
- return b ? FlagValueTrue : FlagValueFalse;
-}
-
-/*!
- Converts the enum \a fv back to a boolean value.
- If \a fv is neither the true enum value nor the
- false enum value, the boolean value returned is
- \a defaultValue.
-
- Note that runtimeDesignabilityFunction() should be called
- first. If that function returns the name of a function, it
- means the function must be called at runtime to determine
- whether the property is Designable.
- */
-bool Node::fromFlagValue(FlagValue fv, bool defaultValue)
-{
- switch (fv) {
- case FlagValueTrue:
- return true;
- case FlagValueFalse:
- return false;
- default:
- return defaultValue;
- }
-}
-
-/*!
- This function creates a pair that describes a link.
- The pair is composed from \a link and \a desc. The
- \a linkType is the map index the pair is filed under.
- */
-void Node::setLink(LinkType linkType, const QString &link, const QString &desc)
-{
- QPair<QString, QString> linkPair;
- linkPair.first = link;
- linkPair.second = desc;
- m_linkMap[linkType] = linkPair;
-}
-
-/*!
- Sets the information about the project and version a node was introduced
- in, unless the version is lower than the 'ignoresince.<project>'
- configuration variable.
- */
-void Node::setSince(const QString &since)
-{
- QStringList parts = since.split(QLatin1Char(' '));
- QString project;
- if (parts.size() > 1)
- project = Config::dot + parts.first();
-
- QVersionNumber cutoff =
- QVersionNumber::fromString(Config::instance().getString(CONFIG_IGNORESINCE + project))
- .normalized();
-
- if (!cutoff.isNull() && QVersionNumber::fromString(parts.last()).normalized() < cutoff)
- return;
-
- m_since = parts.join(QLatin1Char(' '));
-}
-
-/*!
- Returns a string representing the access specifier.
- */
-QString Node::accessString() const
-{
- switch (m_access) {
- case Access::Protected:
- return QLatin1String("protected");
- case Access::Private:
- return QLatin1String("private");
- case Access::Public:
- default:
- break;
- }
- return QLatin1String("public");
-}
-
-/*!
- Extract a class name from the type \a string and return it.
- */
-QString Node::extractClassName(const QString &string) const
-{
- QString result;
- for (int i = 0; i <= string.size(); ++i) {
- QChar ch;
- if (i != string.size())
- ch = string.at(i);
-
- QChar lower = ch.toLower();
- if ((lower >= QLatin1Char('a') && lower <= QLatin1Char('z')) || ch.digitValue() >= 0
- || ch == QLatin1Char('_') || ch == QLatin1Char(':')) {
- result += ch;
- } else if (!result.isEmpty()) {
- if (result != QLatin1String("const"))
- return result;
- result.clear();
- }
- }
- return result;
-}
-
-/*!
- Returns the thread safeness value for whatever this node
- represents. But if this node has a parent and the thread
- safeness value of the parent is the same as the thread
- safeness value of this node, what is returned is the
- value \c{UnspecifiedSafeness}. Why?
- */
-Node::ThreadSafeness Node::threadSafeness() const
-{
- if (m_parent && m_safeness == m_parent->inheritedThreadSafeness())
- return UnspecifiedSafeness;
- return m_safeness;
-}
-
-/*!
- If this node has a parent, the parent's thread safeness
- value is returned. Otherwise, this node's thread safeness
- value is returned. Why?
- */
-Node::ThreadSafeness Node::inheritedThreadSafeness() const
-{
- if (m_parent && m_safeness == UnspecifiedSafeness)
- return m_parent->inheritedThreadSafeness();
- return m_safeness;
-}
-
-/*!
- If this node is a QML or JS type node, return a pointer to
- it. If it is a child of a QML or JS type node, return the
- pointer to its parent QMLor JS type node. Otherwise return
- 0;
- */
-QmlTypeNode *Node::qmlTypeNode()
-{
- if (isQmlNode() || isJsNode()) {
- Node *n = this;
- while (n && !(n->isQmlType() || n->isJsType()))
- n = n->parent();
- if (n && (n->isQmlType() || n->isJsType()))
- return static_cast<QmlTypeNode *>(n);
- }
- return nullptr;
-}
-
-/*!
- If this node is a QML node, find its QML class node,
- and return a pointer to the C++ class node from the
- QML class node. That pointer will be null if the QML
- class node is a component. It will be non-null if
- the QML class node is a QML element.
- */
-ClassNode *Node::declarativeCppNode()
-{
- QmlTypeNode *qcn = qmlTypeNode();
- if (qcn)
- return qcn->classNode();
- return nullptr;
-}
-
-/*!
- Returns \c true if the node's status is \c Internal, or if
- its parent is a class with \c Internal status.
- */
-bool Node::isInternal() const
-{
- if (status() == Internal)
- return true;
- return parent() && parent()->status() == Internal && !parent()->isAbstract();
-}
-
-/*! \fn void Node::markInternal()
- Sets the node's access to Private and its status to Internal.
- */
-
-/*!
- Returns a pointer to the root of the Tree this node is in.
- */
-Aggregate *Node::root() const
-{
- if (parent() == nullptr)
- return (this->isAggregate() ? static_cast<Aggregate *>(const_cast<Node *>(this)) : nullptr);
- Aggregate *t = parent();
- while (t->parent() != nullptr)
- t = t->parent();
- return t;
-}
-
-/*!
- Returns a pointer to the Tree this node is in.
- */
-Tree *Node::tree() const
-{
- return root()->tree();
-}
-
-/*!
- Sets the node's declaration location, its definition
- location, or both, depending on the suffix of the file
- name from the file path in location \a t.
- */
-void Node::setLocation(const Location &t)
-{
- QString suffix = t.fileSuffix();
- if (suffix == "h")
- m_declLocation = t;
- else if (suffix == "cpp")
- m_defLocation = t;
- else {
- m_declLocation = t;
- m_defLocation = t;
- }
-}
-
-/*!
- Returns true if this node is sharing a comment and the
- shared comment is not empty.
- */
-bool Node::hasSharedDoc() const
-{
- return (m_sharedCommentNode && m_sharedCommentNode->hasDoc());
-}
-
-/*!
- Returns the CPP node's qualified name by prepending the
- namespaces name + "::" if there isw a namespace.
- */
-QString Node::qualifyCppName()
-{
- if (m_parent && m_parent->isNamespace() && !m_parent->name().isEmpty())
- return m_parent->name() + "::" + m_name;
- return m_name;
-}
-
-/*!
- Return the name of this node qualified with the parent name
- and "::" if there is a parent name.
- */
-QString Node::qualifyWithParentName()
-{
- if (m_parent && !m_parent->name().isEmpty())
- return m_parent->name() + "::" + m_name;
- return m_name;
-}
-
-/*!
- Returns the QML node's qualified name by stripping off the
- "QML:" if present and prepending the logical module name.
- */
-QString Node::qualifyQmlName()
-{
- QString qualifiedName = m_name;
- if (m_name.startsWith(QLatin1String("QML:")))
- qualifiedName = m_name.mid(4);
- qualifiedName = logicalModuleName() + "::" + m_name;
- return qualifiedName;
-}
-
-/*!
- Returns the QML node's name after stripping off the
- "QML:" if present.
- */
-QString Node::unqualifyQmlName()
-{
- QString qmlTypeName = m_name.toLower();
- if (qmlTypeName.startsWith(QLatin1String("qml:")))
- qmlTypeName = qmlTypeName.mid(4);
- return qmlTypeName;
-}
-
-/*!
- Returns \c true if the node is a class node or a QML type node
- that is marked as being a wrapper class or wrapper QML type,
- or if it is a member of a wrapper class or type.
- */
-bool Node::isWrapper() const
-{
- return (m_parent ? m_parent->isWrapper() : false);
-}
-
-/*!
- Construct the full document name for this node and return it.
- */
-QString Node::fullDocumentName() const
-{
- QStringList pieces;
- const Node *n = this;
-
- do {
- if (!n->name().isEmpty())
- pieces.insert(0, n->name());
-
- if ((n->isQmlType() || n->isJsType()) && !n->logicalModuleName().isEmpty()) {
- pieces.insert(0, n->logicalModuleName());
- break;
- }
-
- if (n->isTextPageNode())
- break;
-
- // Examine the parent if the node is a member
- if (!n->parent() || n->isRelatedNonmember())
- break;
-
- n = n->parent();
- } while (true);
-
- // Create a name based on the type of the ancestor node.
- QString concatenator = "::";
- if (n->isQmlType() || n->isJsType())
- concatenator = QLatin1Char('.');
-
- if (n->isTextPageNode())
- concatenator = QLatin1Char('#');
-
- return pieces.join(concatenator);
-}
-
-/*!
- Find the module (Qt Core, Qt GUI, etc.) to which the class belongs.
- We do this by obtaining the full path to the header file's location
- and examine everything between "src/" and the filename. This is
- semi-dirty because we are assuming a particular directory structure.
-
- This function is only really useful if the class's module has not
- been defined in the header file with a QT_MODULE macro or with an
- \inmodule command in the documentation.
- */
-QString Node::physicalModuleName() const
-{
- if (!m_physicalModuleName.isEmpty())
- return m_physicalModuleName;
-
- QString path = location().filePath();
- QString pattern = QString("src") + QDir::separator();
- int start = path.lastIndexOf(pattern);
-
- if (start == -1)
- return QString();
-
- QString moduleDir = path.mid(start + pattern.size());
- int finish = moduleDir.indexOf(QDir::separator());
-
- if (finish == -1)
- return QString();
-
- QString physicalModuleName = moduleDir.left(finish);
-
- if (physicalModuleName == QLatin1String("corelib"))
- return QLatin1String("QtCore");
- else if (physicalModuleName == QLatin1String("uitools"))
- return QLatin1String("QtUiTools");
- else if (physicalModuleName == QLatin1String("gui"))
- return QLatin1String("QtGui");
- else if (physicalModuleName == QLatin1String("network"))
- return QLatin1String("QtNetwork");
- else if (physicalModuleName == QLatin1String("opengl"))
- return QLatin1String("QtOpenGL");
- else if (physicalModuleName == QLatin1String("svg"))
- return QLatin1String("QtSvg");
- else if (physicalModuleName == QLatin1String("sql"))
- return QLatin1String("QtSql");
- else if (physicalModuleName == QLatin1String("qtestlib"))
- return QLatin1String("QtTest");
- else if (moduleDir.contains("webkit"))
- return QLatin1String("QtWebKit");
- else if (physicalModuleName == QLatin1String("xml"))
- return QLatin1String("QtXml");
- else
- return QString();
-}
-
-/*! \fn Node *Node::clone(Aggregate *parent)
-
- When reimplemented in a subclass, this function creates a
- clone of this node on the heap and makes the clone a child
- of \a parent. A pointer to the clone is returned.
-
- Here in the base class, this function does nothing and returns
- nullptr.
- */
-
-/*! \fn NodeType Node::nodeType() const
- Returns this node's type.
-
- \sa NodeType
-*/
-
-/*! \fn Genus Node::genus() const
- Returns this node's Genus.
-
- \sa Genus
-*/
-
-/*! void Node::setGenus(Genus t)
- Sets this node's Genus to \a t.
-*/
-
-/*! \fn PageType Node::pageType() const
- Returns this node's page type.
-
- \sa PageType
-*/
-
-/*! \fn void Node::setPageType(PageType t)
- Sets this node's page type to \a t.
-
- \sa PageType
-*/
-
-/*! \fn QString Node::signature(bool values, bool noReturnType, bool templateParams) const
-
- If this node is a FunctionNode, this function returns the function's
- signature, including default values if \a values is \c true,
- function's return type if \a noReturnType is \c false, and
- prefixed with 'template <parameter_list>' for function templates
- if templateParams is \true.
-
- If this node is not a FunctionNode, this function returns plainName().
-*/
-
-/*! \fn const QString &Node::fileNameBase() const
- Returns the node's file name base string, which is built once, when
- Generator::fileBase() is called and stored in the Node.
-*/
-
-/*! \fn bool Node::hasFileNameBase() const
- Returns true if the node's file name base has been set.
-
- \sa Node::fileNameBase()
-*/
-
-/*! \fn void Node::setFileNameBase(const QString &t)
- Sets the node's file name base to \a t. Only called by
- Generator::fileBase().
-*/
-
-/*! \fn void Node::setAccess(Access t)
- Sets the node's access type to \a t.
-
- \sa Access
-*/
-
-/*! \fn void Node::setStatus(Status t)
- Sets the node's status to \a t, except that once
- the node's status has been set to \c Obsolete, it
- can't be reset to \c Deprecated.
-
- \sa Status
-*/
-
-/*! \fn void Node::setThreadSafeness(ThreadSafeness t)
- Sets the node's thread safeness to \a t.
-
- \sa ThreadSafeness
-*/
-
-/*! \fn void Node::setPhysicalModuleName(const QString &name)
- Sets the node's physical module \a name.
-*/
-
-/*! \fn void Node::setReconstitutedBrief(const QString &t)
- When reading an index file, this function is called with the
- reconstituted brief clause \a t to set the node's brief clause.
- I think this is needed for linking to something in the brief clause.
-*/
-
-/*! \fn void Node::setParent(Aggregate *n)
- Sets the node's parent pointer to \a n. Such a thing
- is not lightly done. All the calls to this function
- are in other member functions of Node subclasses. See
- the code in the subclass implementations to understand
- when this function can be called safely and why it is called.
-*/
-
-/*! \fn void Node::setIndexNodeFlag(bool isIndexNode = true)
- Sets a flag in this Node that indicates the node was created
- for something in an index file. This is important to know
- because an index node is not to be documented in the current
- module. When the index flag is set, it means the Node
- represents something in another module, and it will be
- documented in that module's documentation.
-*/
-
-/*! \fn void Node::setRelatedNonmember(bool b)
- Sets a flag in the node indicating whether this node is a related nonmember
- of something. This function is called when the \c relates command is seen.
- */
-
-/*! \fn void Node::setOutputFileName(const QString &f)
- In a PageNode, this function sets the node's output file name to \a f.
- In a non-PageNode, this function does nothing.
- */
-
-/*! \fn void Node::addMember(Node *node)
- In a CollectionNode, this function adds \a node to the collection
- node's members list. It does nothing if this node is not a CollectionNode.
- */
-
-/*! \fn bool Node::hasMembers() const
- Returns \c true if this is a CollectionNode and its members list
- is not empty. Otherwise it returns \c false.
- */
-
-/*! \fn bool Node::hasNamespaces() const
- Returns \c true if this is a CollectionNode and its members list
- contains namespace nodes. Otherwise it returns \c false.
- */
-
-/*! \fn bool Node::hasClasses() const
- Returns \c true if this is a CollectionNode and its members list
- contains class nodes. Otherwise it returns \c false.
- */
-
-/*! \fn void Node::setAbstract(bool b)
- If this node is a ClassNode or a QmlTypeNode, the node's abstract flag
- data member is set to \a b.
- */
-
-/*! \fn void Node::setWrapper()
- If this node is a ClassNode or a QmlTypeNode, the node's wrapper flag
- data member is set to \c true.
- */
-
-/*! \fn void Node::getMemberNamespaces(NodeMap& out)
- If this is a CollectionNode, \a out is loaded with all the collection
- members that are namespaces.
- */
-
-/*! \fn void getMemberClasses(NodeMap& out) const { }
- If this is a CollectionNode, \a out is loaded with all the collection
- members that are classes.
- */
-
-/*! \fn void Node::setDataType(const QString &dataType)
- If this node is a PropertyNode or a QmlPropertyNode, its
- data type data member is set to \a dataType. Otherwise,
- this function does nothing.
- */
-
-/*! \fn bool Node::wasSeen() const
- Returns the \c seen flag data member of this node if it is a NamespaceNode
- or a CollectionNode. Otherwise it returns \c false. If \c true is returned,
- it means that the location where the namespace or collection is to be
- documented has been found.
- */
-
-/*! \fn void appendGroupName(const QString &t)
- If this node is a PageNode, the group name \a t is appended to the node's
- list of group names. It is not clear to me what this list of group names
- is used for, but it is written to the index file, and it is used in the
- navigation bar.
- */
-
-/*! \fn QString Node::element() const
- If this node is a QmlPropertyNode or a FunctionNode, this function
- returns the name of the parent node. Otherwise it returns an empty
- string.
- */
-
-/*! \fn void Node::setNoAutoList(bool b)
- If this node is a PageNode, the node's \c {no autolist} flag is set to \a b.
- Otherwise the function does nothing.
- */
-
-/*! \fn bool Node::docMustBeGenerated() const
- This function is called to perform a test to decide if the node must have
- documentation generated. In the Node base class, it always returns \c false.
-
- In the ProxyNode class it always returns \c true. There aren't many proxy
- nodes, but when one appears, it must generate documentation. In the overrides
- in NamespaceNode and ClassNode, a meaningful test is performed to decide if
- documentation must be generated.
- */
-
-/*! \fn QString Node::title() const
- Returns a string that can be used to print a title in the documentation for
- whatever this Node is. In the Node base class, the node's name() is returned.
- In a PageNode, the function returns the title data member. In a HeaderNode,
- if the title() is empty, the name() is returned.
- */
-
-/*! \fn QString Node::subtitle() const { return QString(); }
- Returns a string that can be used to print a subtitle in the documentation for
- whatever this Node is. In the Node base class, the empty string is returned.
- In a PageNode, the function returns the subtitle data member. In a HeaderNode,
- the subtitle data member is returned.
- */
-
-/*! \fn QString Node::fullTitle() const
- Returns a string that can be used as the full title for the documentation of
- this node. In this base class, the name() is returned. In a PageNode, title()
- is returned. In a HeaderNode, if the title() is empty, the name() is returned.
- If the title() is not empty then name-title is returned. In a CollectionNode,
- the title() is returned.
- */
-
-/*! \fn bool Node::setTitle(const QString &title)
- Sets the node's \a title, which is used for the title of
- the documentation page, if one is generated for this node.
- Returns \c true if the title is set. In this base class,
- there is no title string stored, so in the base class,
- nothing happens and \c false is returned. The override in
- the PageNode class is where the title is set.
- */
-
-/*! \fn bool Node::setSubtitle(const QString &subtitle)
- Sets the node's \a subtitle, which is used for the subtitle
- of the documentation page, if one is generated for this node.
- Returns \c true if the subtitle is set. In this base class,
- there is no subtitle string stored, so in the base class,
- nothing happens and \c false is returned. The override in
- the PageNode and HeaderNode classes is where the subtitle is
- set.
- */
-
-/*! \fn void Node::markDefault()
- If this node is a QmlPropertyNode, it is marked as the default property.
- Otherwise the function does nothing.
- */
-
-/*! \fn void Node::markReadOnly(bool flag)
- If this node is a QmlPropertyNode, then the property's read-only
- flag is set to \a flag.
- */
-
-/*! \fn Aggregate *Node::parent() const
- Returns the node's parent pointer.
-*/
-
-/*! \fn const QString &Node::name() const
- Returns the node's name data member.
-*/
-
-/*! \fn QString Node::nameForLists() const
- If this node is a PageNode or a HeaderNode, title() is returned.
- Otherwise name() is returned.
- */
-
-/*! \fn QString Node::outputFileName() const
- If this node is a PageNode, the name of the output file that will be
- generated for the node is returned. Otherwise an empty string is returned.
- */
-
-/*! \fn QString Node::obsoleteLink() const
- If this node is a ClassNode or a QmlTypeNode, the link to the obsolete members
- page is returned. Otherwise an empty string is returned.
- */
-
-/*! \fn void Node::setObsoleteLink(const QString &t)
- If this node is a ClassNode or a QmlTypeNode, the link to the obsolete members
- page is set to \a t. Otherwise the function does nothing.
- */
-
-/*! \fn void Node::setQtVariable(const QString &v)
- If this node is a CollectionNode, its QT variable is set to \a v.
- Otherwise the function does nothing. I don't know what the QT variable
- is used for.
- */
-
-/*! \fn QString Node::qtVariable() const
- If this node is a CollectionNode, its QT variable is returned.
- Otherwise an empty string is returned. I don't know what the QT
- variable is used for.
- */
-
-/*! \fn bool Node::hasTag(const QString &t) const
- If this node is a FunctionNode, the function returns \c true if
- the function has the tag \a t. Otherwise the function returns
- \c false. I don't know what the tag is used for.
- */
-
-/*! \fn const QMap<LinkType, QPair<QString, QString> > &Node::links() const
- Returns a reference to this node's link map. The link map should
- probably be moved to the PageNode, because it contains links to the
- start page, next page, previous page, and contents page, and these
- are only used in PageNode, I think.
- */
-
-/*! \fn Access Node::access() const
- Returns the node's Access setting, which can be \c Public,
- \c Protected, or \c Private.
- */
-
-/*! \fn const Location& Node::declLocation() const
- Returns the Location where this node's declaration was seen.
- Normally the declaration location is in an \e include file.
- The declaration location is used in qdoc error/warning messages
- about the declaration.
- */
-
-/*! \fn const Location& Node::defLocation() const
- Returns the Location where this node's dedefinition was seen.
- Normally the definition location is in a \e .cpp file.
- The definition location is used in qdoc error/warning messages
- when the error is discovered at the location of the definition,
- although the way to correct the problem often requires changing
- the declaration.
- */
-
-/*! \fn const Location& Node::location() const
- If this node's definition location is empty, this function
- returns this node's declaration location. Otherwise it
- returns the definition location.
-
- \sa Location
- */
-
-/*! \fn const Doc &Node::doc() const
- Returns a reference to the node's Doc data member.
-
- \sa Doc
- */
-
-/*! \fn bool Node::hasDoc() const
- Returns \c true if the node has documentation, i.e. if its Doc
- data member is not empty.
-
- \sa Doc
- */
-
-/*! \fn Status Node::status() const
- Returns the node's status value.
-
- \sa Status
- */
-
-/*! \fn QString Node::since() const
- Returns the node's since string, which can be empty.
- */
-
-/*! \fn QString Node::templateStuff() const
- Returns the node's template parameters string, if this node
- represents a templated element.
- */
-
-/*! \fn bool Node::isSharingComment() const
- This function returns \c true if the node is sharing a comment
- with other nodes. For example, multiple functions can be documented
- with a single qdoc comment by listing the \c {\\fn} signatures for
- all the functions in the single qdoc comment.
- */
-
-/*! \fn QString Node::qmlTypeName() const
- If this is a QmlPropertyNode or a FunctionNode representing a QML
- or javascript methos, this function returns the qmlTypeName() of
- the parent() node. Otherwise it returns the name data member.
- */
-
-/*! \fn QString Node::qmlFullBaseName() const
- If this is a QmlTypeNode, this function returns the QML full
- base name. Otherwise it returns an empty string.
- */
-
-/*! \fn QString Node::logicalModuleName() const
- If this is a CollectionNode, this function returns the logical
- module name. Otherwise it returns an empty string.
- */
-
-/*! \fn QString Node::logicalModuleVersion() const
- If this is a CollectionNode, this function returns the logical
- module version number. Otherwise it returns an empty string.
- */
-
-/*! \fn QString Node::logicalModuleIdentifier() const
- If this is a CollectionNode, this function returns the logical
- module identifier. Otherwise it returns an empty string.
- */
-
-/*! \fn void Node::setLogicalModuleInfo(const QString &arg)
- If this node is a CollectionNode, this function splits \a arg
- on the blank character to get a logical module name and version
- number. If the version number is present, it splits the version
- number on the '.' character to get a major version number and a
- minor version number. If the version number is present, both the
- major and minor version numbers should be there, but the minor
- version number is not absolutely necessary.
-
- The strings are stored in the appropriate data members for use
- when the QML or javascript module page is generated.
- */
-
-/*! \fn void Node::setLogicalModuleInfo(const QStringList &info)
- If this node is a CollectionNode, this function accepts the
- logical module \a info as a string list. If the logical module
- info contains the version number, it splits the version number
- on the '.' character to get the major and minor version numbers.
- Both major and minor version numbers should be provided, but
- the minor version number is not strictly necessary.
-
- The strings are stored in the appropriate data members for use
- when the QML or javascript module page is generated. This overload
- of the function is called when qdoc is reading an index file.
- */
-
-/*! \fn CollectionNode *Node::logicalModule() const
- If this is a QmlTypeNode, a pointer to its QML module is returned,
- which is a pointer to a CollectionNode. Otherwise the \c nullptr
- is returned.
- */
-
-/*! \fn void Node::setQmlModule(CollectionNode *t)
- If this is a QmlTypeNode, this function sets the QML type's QML module
- pointer to the CollectionNode \a t. Otherwise the function does nothing.
- */
-
-/*! \fn ClassNode *Node::classNode()
- If this is a QmlTypeNode, this function returns the pointer to
- the C++ ClassNode that this QML type represents. Otherwise the
- \c nullptr is returned.
- */
-
-/*! \fn void Node::setClassNode(ClassNode *cn)
- If this is a QmlTypeNode, this function sets the C++ class node
- to \a cn. The C++ ClassNode is the C++ implementation of the QML
- type.
- */
-
-/*! \fn const QString &Node::outputSubdirectory() const
- Returns the node's output subdirector, which is the subdirectory
- of the output directory where the node's documentation file is
- written.
- */
-
-/*! \fn void Node::setOutputSubdirectory(const QString &t)
- Sets the node's output subdirectory to \a t. This is the subdirector
- of the output directory where the node's documentation file will be
- written.
- */
-
-/*! \fn NodeType Node::goal(const QString &t)
- When a square-bracket parameter is used in a qdoc command, this
- function might be called to convert the text string \a t obtained
- from inside the square brackets to be a Goal value, which is returned.
-
- \sa Goal
- */
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/node.h b/src/qdoc/node.h
deleted file mode 100644
index ef452202b..000000000
--- a/src/qdoc/node.h
+++ /dev/null
@@ -1,395 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef NODE_H
-#define NODE_H
-
-#include "access.h"
-#include "doc.h"
-#include "enumitem.h"
-#include "importrec.h"
-#include "parameters.h"
-#include "relatedclass.h"
-#include "usingclause.h"
-
-#include <QtCore/qdir.h>
-#include <QtCore/qlist.h>
-#include <QtCore/qmap.h>
-#include <QtCore/qpair.h>
-#include <QtCore/qstringlist.h>
-
-QT_BEGIN_NAMESPACE
-
-class Aggregate;
-class ClassNode;
-class CollectionNode;
-class EnumNode;
-class ExampleNode;
-class FunctionNode;
-class Node;
-class QDocDatabase;
-class QmlTypeNode;
-class PageNode;
-class PropertyNode;
-class QmlPropertyNode;
-class SharedCommentNode;
-class Tree;
-class TypedefNode;
-
-typedef QMap<QString, FunctionNode *> FunctionMap;
-typedef QList<Node *> NodeList;
-typedef QList<ClassNode *> ClassList;
-typedef QList<Node *> NodeVector;
-typedef QMap<QString, Node *> NodeMap;
-typedef QMap<QString, NodeMap> NodeMapMap;
-typedef QMultiMap<QString, Node *> NodeMultiMap;
-typedef QMap<QString, NodeMultiMap> NodeMultiMapMap;
-typedef QMap<QString, CollectionNode *> CNMap;
-typedef QMultiMap<QString, CollectionNode *> CNMultiMap;
-
-class Node
-{
-public:
- enum NodeType : unsigned char {
- NoType,
- Namespace,
- Class,
- Struct,
- Union,
- HeaderFile,
- Page,
- Enum,
- Example,
- ExternalPage,
- Function,
- Typedef,
- TypeAlias,
- Property,
- Variable,
- Group,
- Module,
- QmlType,
- QmlModule,
- QmlProperty,
- QmlBasicType,
- JsType,
- JsModule,
- JsProperty,
- JsBasicType,
- SharedComment,
- Collection,
- Proxy,
- LastType
- };
-
- enum Genus : unsigned char { DontCare, CPP, JS, QML, DOC };
-
- enum Status : unsigned char {
- Obsolete,
- Deprecated,
- Preliminary,
- Active,
- Internal,
- DontDocument
- }; // don't reorder this enum
-
- enum ThreadSafeness : unsigned char {
- UnspecifiedSafeness,
- NonReentrant,
- Reentrant,
- ThreadSafe
- };
-
- enum LinkType : unsigned char { StartLink, NextLink, PreviousLink, ContentsLink };
-
- enum PageType : unsigned char {
- NoPageType,
- AttributionPage,
- ApiPage,
- ArticlePage,
- ExamplePage,
- HowToPage,
- OverviewPage,
- TutorialPage,
- FAQPage,
- OnBeyondZebra
- };
-
- enum FlagValue { FlagValueDefault = -1, FlagValueFalse = 0, FlagValueTrue = 1 };
-
- virtual ~Node() = default;
- virtual Node *clone(Aggregate *) { return nullptr; } // currently only FunctionNode
- virtual Tree *tree() const;
- Aggregate *root() const;
-
- NodeType nodeType() const { return m_nodeType; }
- QString nodeTypeString() const;
- bool changeType(NodeType from, NodeType to);
-
- Genus genus() const { return m_genus; }
- void setGenus(Genus t) { m_genus = t; }
- static Genus getGenus(NodeType t);
-
- PageType pageType() const { return m_pageType; }
- void setPageType(PageType t) { m_pageType = t; }
- void setPageType(const QString &t);
- static PageType getPageType(NodeType t);
-
- bool isActive() const { return m_status == Active; }
- bool isAnyType() const { return true; }
- bool isClass() const { return m_nodeType == Class; }
- bool isCppNode() const { return genus() == CPP; }
- bool isDeprecated() const { return (m_status == Deprecated); }
- bool isDontDocument() const { return (m_status == DontDocument); }
- bool isEnumType() const { return m_nodeType == Enum; }
- bool isExample() const { return m_nodeType == Example; }
- bool isExternalPage() const { return m_nodeType == ExternalPage; }
- bool isFunction(Genus g = DontCare) const
- {
- return (m_nodeType != Function ? false : (genus() == g ? true : g == DontCare));
- }
- bool isGroup() const { return m_nodeType == Group; }
- bool isHeader() const { return m_nodeType == HeaderFile; }
- bool isIndexNode() const { return m_indexNodeFlag; }
- bool isJsBasicType() const { return m_nodeType == JsBasicType; }
- bool isJsModule() const { return m_nodeType == JsModule; }
- bool isJsNode() const { return genus() == JS; }
- bool isJsProperty() const { return m_nodeType == JsProperty; }
- bool isJsType() const { return m_nodeType == JsType; }
- bool isModule() const { return m_nodeType == Module; }
- bool isNamespace() const { return m_nodeType == Namespace; }
- bool isPage() const { return m_nodeType == Page; }
- bool isPreliminary() const { return (m_status == Preliminary); }
- bool isPrivate() const { return m_access == Access::Private; }
- bool isProperty() const { return m_nodeType == Property; }
- bool isProxyNode() const { return m_nodeType == Proxy; }
- bool isPublic() const { return m_access == Access::Public; }
- bool isProtected() const { return m_access == Access::Protected; }
- bool isQmlBasicType() const { return m_nodeType == QmlBasicType; }
- bool isQmlModule() const { return m_nodeType == QmlModule; }
- bool isQmlNode() const { return genus() == QML; }
- bool isQmlProperty() const { return m_nodeType == QmlProperty; }
- bool isQmlType() const { return m_nodeType == QmlType; }
- bool isRelatedNonmember() const { return m_relatedNonmember; }
- bool isStruct() const { return m_nodeType == Struct; }
- bool isSharedCommentNode() const { return m_nodeType == SharedComment; }
- bool isTypeAlias() const { return m_nodeType == TypeAlias; }
- bool isTypedef() const { return m_nodeType == Typedef || m_nodeType == TypeAlias; }
- bool isUnion() const { return m_nodeType == Union; }
- bool isVariable() const { return m_nodeType == Variable; }
- bool isGenericCollection() const { return (m_nodeType == Node::Collection); }
-
- virtual bool isObsolete() const { return (m_status == Obsolete); }
- virtual bool isAbstract() const { return false; }
- virtual bool isAggregate() const { return false; } // means "can have children"
- virtual bool isFirstClassAggregate() const
- {
- return false;
- } // Aggregate but not proxy or prop group"
- virtual bool isAlias() const { return false; }
- virtual bool isAttached() const { return false; }
- virtual bool isClassNode() const { return false; }
- virtual bool isCollectionNode() const { return false; }
- virtual bool isDefault() const { return false; }
- virtual bool isInternal() const;
- virtual bool isMacro() const { return false; }
- virtual bool isPageNode() const { return false; } // means "generates a doc page"
- virtual bool isQtQuickNode() const { return false; }
- virtual bool isReadOnly() const { return false; }
- virtual bool isRelatableType() const { return false; }
- virtual bool isMarkedReimp() const { return false; }
- virtual bool isPropertyGroup() const { return false; }
- virtual bool isStatic() const { return false; }
- virtual bool isTextPageNode() const { return false; } // means PageNode but not Aggregate
- virtual bool isWrapper() const;
-
- QString plainName() const;
- QString plainFullName(const Node *relative = nullptr) const;
- QString plainSignature() const;
- QString fullName(const Node *relative = nullptr) const;
- virtual QString signature(bool, bool, bool = false) const { return plainName(); }
-
- const QString &fileNameBase() const { return m_fileNameBase; }
- bool hasFileNameBase() const { return !m_fileNameBase.isEmpty(); }
- void setFileNameBase(const QString &t) { m_fileNameBase = t; }
-
- void setAccess(Access t) { m_access = t; }
- void setLocation(const Location &t);
- void setDoc(const Doc &doc, bool replace = false);
- void setStatus(Status t)
- {
- if (m_status == Obsolete && t == Deprecated)
- return;
- m_status = t;
- }
- void setThreadSafeness(ThreadSafeness t) { m_safeness = t; }
- void setSince(const QString &since);
- void setPhysicalModuleName(const QString &name) { m_physicalModuleName = name; }
- void setUrl(const QString &url) { m_url = url; }
- void setTemplateDecl(const QString &t) { m_templateDecl = t; }
- void setReconstitutedBrief(const QString &t) { m_reconstitutedBrief = t; }
- void setParent(Aggregate *n) { m_parent = n; }
- void setIndexNodeFlag(bool isIndexNode = true) { m_indexNodeFlag = isIndexNode; }
- void setHadDoc() { m_hadDoc = true; }
- virtual void setRelatedNonmember(bool b) { m_relatedNonmember = b; }
- virtual void setOutputFileName(const QString &) {}
- virtual void addMember(Node *) {}
- virtual bool hasMembers() const { return false; }
- virtual bool hasNamespaces() const { return false; }
- virtual bool hasClasses() const { return false; }
- virtual void setAbstract(bool) {}
- virtual void setWrapper() {}
- virtual void getMemberNamespaces(NodeMap &) {}
- virtual void getMemberClasses(NodeMap &) const {}
- virtual void setDataType(const QString &) {}
- virtual bool wasSeen() const { return false; }
- virtual void appendGroupName(const QString &) {}
- virtual QString element() const { return QString(); }
- virtual void setNoAutoList(bool) {}
- virtual bool docMustBeGenerated() const { return false; }
-
- virtual QString title() const { return name(); }
- virtual QString subtitle() const { return QString(); }
- virtual QString fullTitle() const { return name(); }
- virtual bool setTitle(const QString &) { return false; }
- virtual bool setSubtitle(const QString &) { return false; }
-
- void markInternal()
- {
- setAccess(Access::Private);
- setStatus(Internal);
- }
- virtual void markDefault() {}
- virtual void markReadOnly(bool) {}
-
- bool match(const QList<int> &types) const;
- Aggregate *parent() const { return m_parent; }
- const QString &name() const { return m_name; }
- QString physicalModuleName() const;
- QString url() const { return m_url; }
- virtual QString nameForLists() const { return m_name; }
- virtual QString outputFileName() const { return QString(); }
- virtual QString obsoleteLink() const { return QString(); }
- virtual void setObsoleteLink(const QString &) {}
- virtual void setQtVariable(const QString &) {}
- virtual QString qtVariable() const { return QString(); }
- virtual void setQtCMakeComponent(const QString &) {}
- virtual QString qtCMakeComponent() const { return QString(); }
- virtual bool hasTag(const QString &) const { return false; }
-
- const QMap<LinkType, QPair<QString, QString>> &links() const { return m_linkMap; }
- void setLink(LinkType linkType, const QString &link, const QString &desc);
-
- Access access() const { return m_access; }
- QString accessString() const;
- const Location &declLocation() const { return m_declLocation; }
- const Location &defLocation() const { return m_defLocation; }
- const Location &location() const
- {
- return (m_defLocation.isEmpty() ? m_declLocation : m_defLocation);
- }
- const Doc &doc() const { return m_doc; }
- bool isInAPI() const { return !isPrivate() && !isInternal() && hasDoc(); }
- bool hasDoc() const { return (m_hadDoc || !m_doc.isEmpty()); }
- bool hadDoc() const { return m_hadDoc; }
- Status status() const { return m_status; }
- ThreadSafeness threadSafeness() const;
- ThreadSafeness inheritedThreadSafeness() const;
- QString since() const { return m_since; }
- const QString &templateDecl() const { return m_templateDecl; }
- const QString &reconstitutedBrief() const { return m_reconstitutedBrief; }
-
- bool isSharingComment() const { return (m_sharedCommentNode != nullptr); }
- bool hasSharedDoc() const;
- void setSharedCommentNode(SharedCommentNode *t) { m_sharedCommentNode = t; }
- SharedCommentNode *sharedCommentNode() { return m_sharedCommentNode; }
-
- QString extractClassName(const QString &string) const;
- virtual QString qmlTypeName() const { return m_name; }
- virtual QString qmlFullBaseName() const { return QString(); }
- virtual QString logicalModuleName() const { return QString(); }
- virtual QString logicalModuleVersion() const { return QString(); }
- virtual QString logicalModuleIdentifier() const { return QString(); }
- virtual void setLogicalModuleInfo(const QString &) {}
- virtual void setLogicalModuleInfo(const QStringList &) {}
- virtual CollectionNode *logicalModule() const { return nullptr; }
- virtual void setQmlModule(CollectionNode *) {}
- virtual ClassNode *classNode() { return nullptr; }
- virtual void setClassNode(ClassNode *) {}
- QmlTypeNode *qmlTypeNode();
- ClassNode *declarativeCppNode();
- const QString &outputSubdirectory() const { return m_outSubDir; }
- virtual void setOutputSubdirectory(const QString &t) { m_outSubDir = t; }
- QString fullDocumentName() const;
- QString qualifyCppName();
- QString qualifyQmlName();
- QString unqualifyQmlName();
- QString qualifyWithParentName();
-
- static FlagValue toFlagValue(bool b);
- static bool fromFlagValue(FlagValue fv, bool defaultValue);
- static QString nodeTypeString(NodeType t);
- static void initialize();
- static NodeType goal(const QString &t) { return goals.value(t); }
- static bool nodeNameLessThan(const Node *first, const Node *second);
-
-protected:
- Node(NodeType type, Aggregate *parent, const QString &name);
-
-private:
- NodeType m_nodeType {};
- Genus m_genus {};
- Access m_access { Access::Public };
- ThreadSafeness m_safeness { UnspecifiedSafeness };
- PageType m_pageType { NoPageType };
- Status m_status { Active };
- bool m_indexNodeFlag : 1;
- bool m_relatedNonmember : 1;
- bool m_hadDoc : 1;
-
- Aggregate *m_parent { nullptr };
- SharedCommentNode *m_sharedCommentNode { nullptr };
- QString m_name {};
- Location m_declLocation {};
- Location m_defLocation {};
- Doc m_doc {};
- QMap<LinkType, QPair<QString, QString>> m_linkMap {};
- QString m_fileNameBase {};
- QString m_physicalModuleName {};
- QString m_url {};
- QString m_since {};
- QString m_templateDecl {};
- QString m_reconstitutedBrief {};
- QString m_outSubDir {};
- static QStringMap operators;
- static QMap<QString, Node::NodeType> goals;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/openedlist.cpp b/src/qdoc/openedlist.cpp
deleted file mode 100644
index 94fa5613a..000000000
--- a/src/qdoc/openedlist.cpp
+++ /dev/null
@@ -1,213 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- openedlist.cpp
-*/
-
-#include "openedlist.h"
-
-#include "atom.h"
-
-#include <QtCore/qregularexpression.h>
-
-QT_BEGIN_NAMESPACE
-
-static const char roman[] = "m\2d\5c\2l\5x\2v\5i";
-
-OpenedList::OpenedList(ListStyle style) : sty(style), ini(1), nex(0) {}
-
-OpenedList::OpenedList(const Location &location, const QString &hint) : sty(Bullet), ini(1)
-{
- QRegularExpression hintSyntax("^(\\W*)([0-9]+|[A-Z]+|[a-z]+)(\\W*)$");
-
- auto match = hintSyntax.match(hint);
- if (match.hasMatch()) {
- bool ok;
- int asNumeric = hint.toInt(&ok);
- int asRoman = fromRoman(match.captured(2));
- int asAlpha = fromAlpha(match.captured(2));
-
- if (ok) {
- sty = Numeric;
- ini = asNumeric;
- } else if (asRoman > 0 && asRoman != 100 && asRoman != 500) {
- sty = (hint == hint.toLower()) ? LowerRoman : UpperRoman;
- ini = asRoman;
- } else {
- sty = (hint == hint.toLower()) ? LowerAlpha : UpperAlpha;
- ini = asAlpha;
- }
- pref = match.captured(1);
- suff = match.captured(3);
- } else if (!hint.isEmpty()) {
- location.warning(QStringLiteral("Unrecognized list style '%1'").arg(hint));
- }
- nex = ini - 1;
-}
-
-QString OpenedList::styleString() const
-{
- switch (style()) {
- case Bullet:
- default:
- return ATOM_LIST_BULLET;
- case Tag:
- return ATOM_LIST_TAG;
- case Value:
- return ATOM_LIST_VALUE;
- case Numeric:
- return ATOM_LIST_NUMERIC;
- case UpperAlpha:
- return ATOM_LIST_UPPERALPHA;
- case LowerAlpha:
- return ATOM_LIST_LOWERALPHA;
- case UpperRoman:
- return ATOM_LIST_UPPERROMAN;
- case LowerRoman:
- return ATOM_LIST_LOWERROMAN;
- }
-}
-
-QString OpenedList::numberString() const
-{
- return QString::number(number());
- /*
- switch ( style() ) {
- case Numeric:
- return QString::number( number() );
- case UpperAlpha:
- return toAlpha( number() ).toUpper();
- case LowerAlpha:
- return toAlpha( number() );
- case UpperRoman:
- return toRoman( number() ).toUpper();
- case LowerRoman:
- return toRoman( number() );
- case Bullet:
- default:
- return "*";
- }*/
-}
-
-QString OpenedList::toAlpha(int n)
-{
- QString str;
-
- while (n > 0) {
- n--;
- str.prepend((n % 26) + 'a');
- n /= 26;
- }
- return str;
-}
-
-int OpenedList::fromAlpha(const QString &str)
-{
- int n = 0;
- int u;
-
- for (int i = 0; i < str.length(); i++) {
- u = str[i].toLower().unicode();
- if (u >= 'a' && u <= 'z') {
- n *= 26;
- n += u - 'a' + 1;
- } else {
- return 0;
- }
- }
- return n;
-}
-
-QString OpenedList::toRoman(int n)
-{
- /*
- See p. 30 of Donald E. Knuth's "TeX: The Program".
- */
- QString str;
- int j = 0;
- int k;
- int u;
- int v = 1000;
-
- for (;;) {
- while (n >= v) {
- str += roman[j];
- n -= v;
- }
-
- if (n <= 0)
- break;
-
- k = j + 2;
- u = v / roman[k - 1];
- if (roman[k - 1] == 2) {
- k += 2;
- u /= 5;
- }
- if (n + u >= v) {
- str += roman[k];
- n += u;
- } else {
- j += 2;
- v /= roman[j - 1];
- }
- }
- return str;
-}
-
-int OpenedList::fromRoman(const QString &str)
-{
- int n = 0;
- int j;
- int u;
- int v = 0;
-
- for (int i = str.length() - 1; i >= 0; i--) {
- j = 0;
- u = 1000;
- while (roman[j] != 'i' && roman[j] != str[i].toLower()) {
- j += 2;
- u /= roman[j - 1];
- }
- if (u < v) {
- n -= u;
- } else {
- n += u;
- }
- v = u;
- }
-
- if (str.toLower() == toRoman(n)) {
- return n;
- } else {
- return 0;
- }
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/openedlist.h b/src/qdoc/openedlist.h
deleted file mode 100644
index c41a4adf7..000000000
--- a/src/qdoc/openedlist.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- openedlist.h
-*/
-
-#ifndef OPENEDLIST_H
-#define OPENEDLIST_H
-
-#include "location.h"
-
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-class OpenedList
-{
-public:
- enum ListStyle { Bullet, Tag, Value, Numeric, UpperAlpha, LowerAlpha, UpperRoman, LowerRoman };
-
- OpenedList() : sty(Bullet), ini(1), nex(0) {}
- OpenedList(ListStyle style);
- OpenedList(const Location &location, const QString &hint);
-
- void next() { nex++; }
-
- bool isStarted() const { return nex >= ini; }
- ListStyle style() const { return sty; }
- QString styleString() const;
- int number() const { return nex; }
- QString numberString() const;
- QString prefix() const { return pref; }
- QString suffix() const { return suff; }
-
-private:
- static QString toAlpha(int n);
- static int fromAlpha(const QString &str);
- static QString toRoman(int n);
- static int fromRoman(const QString &str);
-
- ListStyle sty;
- int ini;
- int nex;
- QString pref;
- QString suff;
-};
-Q_DECLARE_TYPEINFO(OpenedList, Q_MOVABLE_TYPE);
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/pagenode.cpp b/src/qdoc/pagenode.cpp
deleted file mode 100644
index 42a80535f..000000000
--- a/src/qdoc/pagenode.cpp
+++ /dev/null
@@ -1,164 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "pagenode.h"
-
-#include "aggregate.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class PageNode
- \brief A PageNode is a Node that generates a documentation page.
-
- Not all subclasses of Node produce documentation pages. FunctionNode,
- PropertyNode, and EnumNode are all examples of subclasses of Node that
- don't produce documentation pages but add documentation to a page.
- They are always child nodes of an Aggregate, and Aggregate inherits
- PageNode.
-
- Not every subclass of PageNode inherits Aggregate. ExternalPageNode,
- ExampleNode, and CollectionNode are subclasses of PageNode that are
- not subclasses of Aggregate. Because they are not subclasses of
- Aggregate, they can't have children. But they still generate, or
- link to, a documentation page.
- */
-
-/*! \fn QString PageNode::title() const
- Returns the node's title, which is used for the page title.
- */
-
-/*! \fn QString PageNode::subtitle() const
- Returns the node's subtitle, which may be empty.
- */
-
-/*!
- Returns the node's full title.
- */
-QString PageNode::fullTitle() const
-{
- return title();
-}
-
-/*!
- Sets the node's \a title, which is used for the page title.
- Returns true. Adds the node to the parent() nonfunction map
- using the \a title as the key.
- */
-bool PageNode::setTitle(const QString &title)
-{
- m_title = title;
- parent()->addChildByTitle(this, title);
- return true;
-}
-
-/*!
- \fn bool PageNode::setSubtitle(const QString &subtitle)
- Sets the node's \a subtitle. Returns true;
- */
-
-/*! \fn PageNode::PageNode(Aggregate *parent, const QString &name)
- This constructor sets the PageNode's \a parent and the \a name is the
- argument of the \c {\\page} command. The node type is set to Node::Page.
- */
-
-/*! \fn PageNode::PageNode(NodeType type, Aggregate *parent, const QString &name)
- This constructor is not called directly. It is called by the constructors of
- subclasses of PageNode, usually Aggregate. The node type is set to \a type,
- and the parent pointer is set to \a parent. \a name is the argument of the topic
- command that resulted in the PageNode being created. This could be \c {\\class}
- or \c {\\namespace}, for example.
- */
-
-/*! \fn PageNode::PageNode(Aggregate *parent, const QString &name, PageType ptype)
- This constructor is called when the argument to the \c {\\page} command
- contains a space, which means the second word of the argument is the page type.
- It creates a PageNode that has node type Node::Page, with the specified
- \a parent and \name, and the \a ptype is that second word of the argument to
- the \c {\\page} command.
-
- \sa Node::PageType
- */
-
-/*! \fn PageNode::~PageNode()
- The destructor is virtual, and it does nothing.
- */
-
-/*! \fn bool PageNode::isPageNode() const
- Always returns \c true because this is a PageNode.
- */
-
-/*! \fn bool PageNode::isTextPageNode() const
- Returns \c true if this instance of PageNode is not an Aggregate.
- The significance of a \c true return value is that this PageNode
- doesn't have children, because it is not an Aggregate.
-
- \sa Aggregate.
- */
-
-/*! \fn QString PageNode::nameForLists() const
- Returns the title().
- */
-
-/*! \fn QString PageNode::imageFileName() const
- If this PageNode is an ExampleNode, the image file name
- data member is returned. Otherwise an empty string is
- returned.
- */
-
-/*! \fn void PageNode::setImageFileName(const QString &ifn)
- If this PageNode is an ExampleNode, the image file name
- data member is set to \a ifn. Otherwise the function does
- nothing.
- */
-
-/*! \fn bool PageNode::noAutoList() const
- Returns the value of the no auto-list flag.
- */
-
-/*! \fn void PageNode::setNoAutoList(bool b)
- Sets the no auto-list flag to \a b.
- */
-
-/*! \fn const QStringList &PageNode::groupNames() const
- Returns a const reference to the string list containing all the group names.
- */
-
-/*! \fn void PageNode::appendGroupName(const QString &t)
- Appends \a t to the list of group names.
- */
-
-/*! \fn void PageNode::setOutputFileName(const QString &f)
- Sets this PageNode's output file name to \a f.
- */
-
-/*! \fn QString PageNode::outputFileName() const
- Returns this PageNode's output file name.
- */
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/pagenode.h b/src/qdoc/pagenode.h
deleted file mode 100644
index 6611ef6e4..000000000
--- a/src/qdoc/pagenode.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef PAGENODE_H
-#define PAGENODE_H
-
-#include "node.h"
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qstring.h>
-#include <QtCore/qstringlist.h>
-
-QT_BEGIN_NAMESPACE
-
-class Aggregate;
-
-class PageNode : public Node
-{
-public:
- PageNode(Aggregate *parent, const QString &name) : Node(Page, parent, name) {}
- PageNode(NodeType type, Aggregate *parent, const QString &name) : Node(type, parent, name) {}
- PageNode(Aggregate *parent, const QString &name, PageType ptype) : Node(Page, parent, name)
- {
- setPageType(ptype);
- }
-
- bool isPageNode() const override { return true; }
- bool isTextPageNode() const override { return !isAggregate(); } // PageNode but not Aggregate
-
- QString title() const override { return m_title; }
- QString subtitle() const override { return m_subtitle; }
- QString fullTitle() const override;
- bool setTitle(const QString &title) override;
- bool setSubtitle(const QString &subtitle) override
- {
- m_subtitle = subtitle;
- return true;
- }
- QString nameForLists() const override { return title(); }
-
- virtual QString imageFileName() const { return QString(); }
- virtual void setImageFileName(const QString &) {}
-
- bool noAutoList() const { return m_noAutoList; }
- void setNoAutoList(bool b) override { m_noAutoList = b; }
- const QStringList &groupNames() const { return m_groupNames; }
- void appendGroupName(const QString &t) override { m_groupNames.append(t); }
-
- void setOutputFileName(const QString &f) override { m_outputFileName = f; }
- QString outputFileName() const override { return m_outputFileName; }
-
-protected:
- friend class Node;
-
-protected:
- bool m_noAutoList { false };
- QString m_title {};
- QString m_subtitle {};
- QString m_outputFileName {};
- QStringList m_groupNames {};
-};
-
-QT_END_NAMESPACE
-
-#endif // PAGENODE_H
diff --git a/src/qdoc/parameters.cpp b/src/qdoc/parameters.cpp
deleted file mode 100644
index 84cbdce31..000000000
--- a/src/qdoc/parameters.cpp
+++ /dev/null
@@ -1,567 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "parameters.h"
-
-#include "codechunk.h"
-#include "generator.h"
-#include "tokenizer.h"
-
-QT_BEGIN_NAMESPACE
-
-QRegularExpression Parameters::varComment_("^/\\*\\s*([a-zA-Z_0-9]+)\\s*\\*/$");
-
-/*!
- \class Parameter
- \brief The Parameter class describes one function parameter.
-
- A parameter can be a function parameter or a macro parameter.
- It has a name, a data type, and an optional default value.
- These are all stored as strings so they can be compared with
- a parameter in a function signature to find a match.
- */
-
-/*!
- \fn Parameter::Parameter(const QString &type, const QString &name, const QString &defaultValue)
-
- Constructs the parameter from the \a type, the optional \a name,
- and the optional \a defaultValue.
- */
-
-/*!
- Reconstructs the text signature for the parameter and returns
- it. If \a includeValue is true and there is a default value,
- the default value is appended with '='.
- */
-QString Parameter::signature(bool includeValue) const
-{
- QString p = type_;
- if (!p.endsWith(QChar('*')) && !p.endsWith(QChar('&')) && !p.endsWith(QChar(' ')))
- p += QLatin1Char(' ');
- p += name_;
- if (includeValue && !defaultValue_.isEmpty())
- p += " = " + defaultValue_;
- return p;
-}
-
-/*!
- \class Parameters
-
- \brief A class for parsing and managing a function parameter list
-
- The constructor is passed a string that is the text inside the
- parentheses of a function declaration. The constructor parses
- the parameter list into a vector of class Parameter.
-
- The Parameters object is then used in function searches to find
- the correct function node given the function name and the signature
- of its parameters.
- */
-
-Parameters::Parameters() : valid_(true), privateSignal_(false), tok_(0), tokenizer_(nullptr)
-{
- // nothing.
-}
-
-Parameters::Parameters(const QString &signature)
- : valid_(true), privateSignal_(false), tok_(0), tokenizer_(nullptr)
-{
- if (!signature.isEmpty()) {
- if (!parse(signature)) {
- parameters_.clear();
- valid_ = false;
- }
- }
-}
-
-/*!
- Get the next token from the string being parsed and store
- it in the token variable.
- */
-void Parameters::readToken()
-{
- tok_ = tokenizer_->getToken();
-}
-
-/*!
- Return the current lexeme from the string being parsed.
- */
-QString Parameters::lexeme()
-{
- return tokenizer_->lexeme();
-}
-
-/*!
- Return the previous lexeme read from the string being parsed.
- */
-QString Parameters::previousLexeme()
-{
- return tokenizer_->previousLexeme();
-}
-
-/*!
- If the current token is \a target, read the next token and
- return \c true. Otherwise, return false without reading the
- next token.
- */
-bool Parameters::match(int target)
-{
- if (tok_ == target) {
- readToken();
- return true;
- }
- return false;
-}
-
-/*!
- Match a template clause in angle brackets, append it to the
- \a type, and return \c true. If there is no template clause,
- or if an error is detected, return \c false.
- */
-void Parameters::matchTemplateAngles(CodeChunk &type)
-{
- if (tok_ == Tok_LeftAngle) {
- int leftAngleDepth = 0;
- int parenAndBraceDepth = 0;
- do {
- if (tok_ == Tok_LeftAngle) {
- leftAngleDepth++;
- } else if (tok_ == Tok_RightAngle) {
- leftAngleDepth--;
- } else if (tok_ == Tok_LeftParen || tok_ == Tok_LeftBrace) {
- ++parenAndBraceDepth;
- } else if (tok_ == Tok_RightParen || tok_ == Tok_RightBrace) {
- if (--parenAndBraceDepth < 0)
- return;
- }
- type.append(lexeme());
- readToken();
- } while (leftAngleDepth > 0 && tok_ != Tok_Eoi);
- }
-}
-
-/*!
- Uses the current tokenizer to parse the \a name and \a type
- of the parameter.
- */
-bool Parameters::matchTypeAndName(CodeChunk &type, QString &name, bool qProp)
-{
- /*
- This code is really hard to follow... sorry. The loop is there to match
- Alpha::Beta::Gamma::...::Omega.
- */
- for (;;) {
- bool virgin = true;
-
- if (tok_ != Tok_Ident) {
- /*
- There is special processing for 'Foo::operator int()'
- and such elsewhere. This is the only case where we
- return something with a trailing gulbrandsen ('Foo::').
- */
- if (tok_ == Tok_operator)
- return true;
-
- /*
- People may write 'const unsigned short' or
- 'short unsigned const' or any other permutation.
- */
- while (match(Tok_const) || match(Tok_volatile))
- type.append(previousLexeme());
- QString pending;
- while (tok_ == Tok_signed || tok_ == Tok_int || tok_ == Tok_unsigned
- || tok_ == Tok_short || tok_ == Tok_long || tok_ == Tok_int64) {
- if (tok_ == Tok_signed)
- pending = lexeme();
- else {
- if (tok_ == Tok_unsigned && !pending.isEmpty())
- type.append(pending);
- pending.clear();
- type.append(lexeme());
- }
- readToken();
- virgin = false;
- }
- if (!pending.isEmpty()) {
- type.append(pending);
- pending.clear();
- }
- while (match(Tok_const) || match(Tok_volatile))
- type.append(previousLexeme());
-
- if (match(Tok_Tilde))
- type.append(previousLexeme());
- }
-
- if (virgin) {
- if (match(Tok_Ident)) {
- /*
- This is a hack until we replace this "parser"
- with the real one used in Qt Creator.
- Is it still needed? mws 11/12/2018
- */
- if (lexeme() == "("
- && ((previousLexeme() == "QT_PREPEND_NAMESPACE")
- || (previousLexeme() == "NS"))) {
- readToken();
- readToken();
- type.append(previousLexeme());
- readToken();
- } else
- type.append(previousLexeme());
- } else if (match(Tok_void) || match(Tok_int) || match(Tok_char) || match(Tok_double)
- || match(Tok_Ellipsis)) {
- type.append(previousLexeme());
- } else {
- return false;
- }
- } else if (match(Tok_int) || match(Tok_char) || match(Tok_double)) {
- type.append(previousLexeme());
- }
-
- matchTemplateAngles(type);
-
- while (match(Tok_const) || match(Tok_volatile))
- type.append(previousLexeme());
-
- if (match(Tok_Gulbrandsen))
- type.append(previousLexeme());
- else
- break;
- }
-
- while (match(Tok_Ampersand) || match(Tok_Aster) || match(Tok_const) || match(Tok_Caret)
- || match(Tok_Ellipsis))
- type.append(previousLexeme());
-
- if (match(Tok_LeftParenAster)) {
- /*
- A function pointer. This would be rather hard to handle without a
- tokenizer hack, because a type can be followed with a left parenthesis
- in some cases (e.g., 'operator int()'). The tokenizer recognizes '(*'
- as a single token.
- */
- type.append(" "); // force a space after the type
- type.append(previousLexeme());
- type.appendHotspot();
- if (match(Tok_Ident))
- name = previousLexeme();
- if (!match(Tok_RightParen))
- return false;
- type.append(previousLexeme());
- if (!match(Tok_LeftParen))
- return false;
- type.append(previousLexeme());
-
- /* parse the parameters. Ignore the parameter name from the type */
- while (tok_ != Tok_RightParen && tok_ != Tok_Eoi) {
- QString dummy;
- if (!matchTypeAndName(type, dummy))
- return false;
- if (match(Tok_Comma))
- type.append(previousLexeme());
- }
- if (!match(Tok_RightParen))
- return false;
- type.append(previousLexeme());
- } else {
- /*
- The common case: Look for an optional identifier, then for
- some array brackets.
- */
- type.appendHotspot();
-
- if (match(Tok_Ident)) {
- name = previousLexeme();
- } else if (match(Tok_Comment)) {
- /*
- A neat hack: Commented-out parameter names are
- recognized by qdoc. It's impossible to illustrate
- here inside a C-style comment, because it requires
- an asterslash. It's also impossible to illustrate
- inside a C++-style comment, because the explanation
- does not fit on one line.
- */
- auto match = varComment_.match(previousLexeme());
- if (match.hasMatch())
- name = match.captured(1);
- } else if (match(Tok_LeftParen)) {
- name = "(";
- while (tok_ != Tok_RightParen && tok_ != Tok_Eoi) {
- name.append(lexeme());
- readToken();
- }
- name.append(")");
- readToken();
- if (match(Tok_LeftBracket)) {
- name.append("[");
- while (tok_ != Tok_RightBracket && tok_ != Tok_Eoi) {
- name.append(lexeme());
- readToken();
- }
- name.append("]");
- readToken();
- }
- } else if (qProp && (match(Tok_default) || match(Tok_final) || match(Tok_override))) {
- // Hack to make 'default', 'final' and 'override' work again in Q_PROPERTY
- name = previousLexeme();
- }
-
- if (tok_ == Tok_LeftBracket) {
- int bracketDepth0 = tokenizer_->bracketDepth();
- while ((tokenizer_->bracketDepth() >= bracketDepth0 && tok_ != Tok_Eoi)
- || tok_ == Tok_RightBracket) {
- type.append(lexeme());
- readToken();
- }
- }
- }
- return true;
-}
-
-/*!
- Parse the next function parameter, if there is one, and
- append it to the internal parameter vector. Return true
- if a parameter is parsed correctly. Otherwise return false.
- */
-bool Parameters::matchParameter()
-{
- if (match(Tok_QPrivateSignal)) {
- privateSignal_ = true;
- return true;
- }
-
- CodeChunk chunk;
- QString name;
- if (!matchTypeAndName(chunk, name))
- return false;
- QString type = chunk.toString();
- QString defaultValue;
- match(Tok_Comment);
- if (match(Tok_Equal)) {
- chunk.clear();
- int pdepth = tokenizer_->parenDepth();
- while (tokenizer_->parenDepth() >= pdepth
- && (tok_ != Tok_Comma || (tokenizer_->parenDepth() > pdepth)) && tok_ != Tok_Eoi) {
- chunk.append(lexeme());
- readToken();
- }
- defaultValue = chunk.toString();
- }
- append(type, name, defaultValue);
- return true;
-}
-
-/*!
- This function uses a Tokenizer to parse the \a signature,
- which is a comma-separated list of parameter declarations.
- If an error is detected, the Parameters object is cleared
- and \c false is returned. Otherwise \c true is returned.
- */
-bool Parameters::parse(const QString &signature)
-{
- Tokenizer *outerTokenizer = tokenizer_;
- int outerTok = tok_;
-
- QByteArray latin1 = signature.toLatin1();
- Tokenizer stringTokenizer(Location(), latin1);
- stringTokenizer.setParsingFnOrMacro(true);
- tokenizer_ = &stringTokenizer;
-
- readToken();
- do {
- if (!matchParameter()) {
- parameters_.clear();
- valid_ = false;
- break;
- }
- } while (match(Tok_Comma));
-
- tokenizer_ = outerTokenizer;
- tok_ = outerTok;
- return valid_;
-}
-
-/*!
- Append a Parameter constructed from \a type, \a name, and \a value
- to the parameter vector.
- */
-void Parameters::append(const QString &type, const QString &name, const QString &value)
-{
- parameters_.append(Parameter(type, name, value));
-}
-
-/*!
- Returns the list of reconstructed parameters. If \a includeValues
- is true, the default values are included, if any are present.
- */
-QString Parameters::signature(bool includeValues) const
-{
- QString result;
- if (parameters_.size() > 0) {
- for (int i = 0; i < parameters_.size(); i++) {
- if (i > 0)
- result += ", ";
- result += parameters_.at(i).signature(includeValues);
- }
- }
- return result;
-}
-
-/*!
- Returns the signature of all the parameters with all the
- spaces and commas removed. It is unintelligible, but that
- is what the caller wants.
-
- If \a names is true, the parameter names are included. If
- \a values is true, the default values are included.
- */
-QString Parameters::rawSignature(bool names, bool values) const
-{
- QString raw;
- const auto params = parameters_;
- for (const auto &parameter : params) {
- raw += parameter.type();
- if (names)
- raw += parameter.name();
- if (values)
- raw += parameter.defaultValue();
- }
- return raw;
-}
-
-/*!
- Parse the parameter \a signature by splitting the string,
- and store the individual parameters in the parameter vector.
-
- This method of parsing is naive but sufficient for QML methods
- and macros.
- */
-void Parameters::set(const QString &signature)
-{
- clear();
- if (!signature.isEmpty()) {
- QStringList commaSplit = signature.split(',');
- parameters_.resize(commaSplit.size());
- int i = 0;
- for (const auto &item : qAsConst(commaSplit)) {
- QStringList blankSplit = item.split(' ', Qt::SkipEmptyParts);
- QString pDefault;
- int defaultIdx = blankSplit.indexOf(QStringLiteral("="));
- if (defaultIdx != -1) {
- if (++defaultIdx < blankSplit.size())
- pDefault = blankSplit.mid(defaultIdx).join(' ');
- blankSplit = blankSplit.mid(0, defaultIdx - 1);
- }
- QString pName = blankSplit.takeLast();
- QString pType = blankSplit.join(' ');
- if (pType.isEmpty() && pName == QLatin1String("..."))
- qSwap(pType, pName);
- else {
- int j = 0;
- while (j < pName.length() && !pName.at(j).isLetter())
- j++;
- if (j > 0) {
- pType += QChar(' ') + pName.left(j);
- pName = pName.mid(j);
- }
- }
- parameters_[i++].set(pType, pName, pDefault);
- }
- }
-}
-
-/*!
- Insert all the parameter names into names.
- */
-QSet<QString> Parameters::getNames() const
-{
- QSet<QString> names;
- const auto params = parameters_;
- for (const auto &parameter : params) {
- if (!parameter.name().isEmpty())
- names.insert(parameter.name());
- }
- return names;
-}
-
-/*!
- Construct a list of the parameter types and return it.
- */
-QString Parameters::generateTypeList() const
-{
- QString out;
- if (count() > 0) {
- for (int i = 0; i < count(); ++i) {
- if (i > 0)
- out += ", ";
- out += parameters_.at(i).type();
- }
- }
- return out;
-}
-
-/*!
- Construct a list of the parameter type/name pairs and
- return it.
-*/
-QString Parameters::generateTypeAndNameList() const
-{
- QString out;
- if (count() > 0) {
- for (int i = 0; i < count(); ++i) {
- if (i != 0)
- out += ", ";
- const Parameter &p = parameters_.at(i);
- out += p.type();
- if (out[out.size() - 1].isLetterOrNumber())
- out += QLatin1Char(' ');
- out += p.name();
- }
- }
- return out;
-}
-
-/*!
- Returns true if \a parameters contains the same parameter
- signature as this.
- */
-bool Parameters::match(const Parameters &parameters) const
-{
- if (count() != parameters.count())
- return false;
- if (count() == 0)
- return true;
- for (int i = 0; i < count(); i++) {
- if (parameters.at(i).type() != parameters_.at(i).type())
- return false;
- }
- return true;
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/parameters.h b/src/qdoc/parameters.h
deleted file mode 100644
index effb49467..000000000
--- a/src/qdoc/parameters.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef PARAMETERS_H
-#define PARAMETERS_H
-
-#include <QtCore/qlist.h>
-#include <QtCore/qregularexpression.h>
-#include <QtCore/qset.h>
-
-QT_BEGIN_NAMESPACE
-
-class Location;
-class Tokenizer;
-class CodeChunk;
-
-class Parameter
-{
-public:
- Parameter() {}
- Parameter(const QString &type, const QString &name = QString(),
- const QString &defaultValue = QString())
- : type_(type), name_(name), defaultValue_(defaultValue)
- {
- }
-
- void setName(const QString &name) { name_ = name; }
- bool hasType() const { return !type_.isEmpty(); }
- const QString &type() const { return type_; }
- const QString &name() const { return name_; }
- const QString &defaultValue() const { return defaultValue_; }
- void setDefaultValue(const QString &t) { defaultValue_ = t; }
-
- void set(const QString &type, const QString &name, const QString &defaultValue = QString())
- {
- type_ = type;
- name_ = name;
- defaultValue_ = defaultValue;
- }
-
- QString signature(bool includeValue = false) const;
-
- const QString &canonicalType() const { return canonicalType_; }
- void setCanonicalType(const QString &t) { canonicalType_ = t; }
-
-public:
- QString canonicalType_ {};
- QString type_;
- QString name_;
- QString defaultValue_;
-};
-
-typedef QList<Parameter> ParameterVector;
-
-class Parameters
-{
-public:
- Parameters();
- Parameters(const QString &signature);
-
- void clear()
- {
- parameters_.clear();
- privateSignal_ = false;
- valid_ = true;
- }
- const ParameterVector &parameters() const { return parameters_; }
- bool isPrivateSignal() const { return privateSignal_; }
- bool isEmpty() const { return parameters_.isEmpty(); }
- bool isValid() const { return valid_; }
- int count() const { return parameters_.size(); }
- void reserve(int count) { parameters_.reserve(count); }
- const Parameter &at(int i) const { return parameters_.at(i); }
- Parameter &last() { return parameters_.last(); }
- const Parameter &last() const { return parameters_.last(); }
- inline Parameter &operator[](int index) { return parameters_[index]; }
- void append(const QString &type, const QString &name, const QString &value);
- void append(const QString &type, const QString &name) { append(type, name, QString()); }
- void append(const QString &type) { append(type, QString(), QString()); }
- void pop_back() { parameters_.pop_back(); }
- void setPrivateSignal() { privateSignal_ = true; }
- QString signature(bool includeValues = false) const;
- QString rawSignature(bool names = false, bool values = false) const;
- void set(const QString &signature);
- QSet<QString> getNames() const;
- QString generateTypeList() const;
- QString generateTypeAndNameList() const;
- bool match(const Parameters &parameters) const;
-
-private:
- void readToken();
- QString lexeme();
- QString previousLexeme();
- bool match(int target);
- void matchTemplateAngles(CodeChunk &type);
- bool matchTypeAndName(CodeChunk &type, QString &name, bool qProp = false);
- bool matchParameter();
- bool parse(const QString &signature);
-
-private:
- static QRegularExpression varComment_;
-
- bool valid_;
- bool privateSignal_;
- int tok_;
- Tokenizer *tokenizer_;
- ParameterVector parameters_;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/propertynode.cpp b/src/qdoc/propertynode.cpp
deleted file mode 100644
index 77a7e249d..000000000
--- a/src/qdoc/propertynode.cpp
+++ /dev/null
@@ -1,142 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "propertynode.h"
-
-#include "aggregate.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class PropertyNode
-
- This class describes one instance of using the Q_PROPERTY macro.
- */
-
-/*!
- The constructor sets the \a parent and the \a name, but
- everything else is left to default values.
- */
-PropertyNode::PropertyNode(Aggregate *parent, const QString &name) : Node(Property, parent, name)
-{
- // nothing
-}
-
-/*!
- Sets this property's \e {overridden from} property to
- \a baseProperty, which indicates that this property
- overrides \a baseProperty. To begin with, all the values
- in this property are set to the corresponding values in
- \a baseProperty.
-
- We probably should ensure that the constant and final
- attributes are not being overridden improperly.
- */
-void PropertyNode::setOverriddenFrom(const PropertyNode *baseProperty)
-{
- for (int i = 0; i < NumFunctionRoles; ++i) {
- if (m_functions[i].isEmpty())
- m_functions[i] = baseProperty->m_functions[i];
- }
- if (m_stored == FlagValueDefault)
- m_stored = baseProperty->m_stored;
- if (m_designable == FlagValueDefault)
- m_designable = baseProperty->m_designable;
- if (m_scriptable == FlagValueDefault)
- m_scriptable = baseProperty->m_scriptable;
- if (m_writable == FlagValueDefault)
- m_writable = baseProperty->m_writable;
- if (m_user == FlagValueDefault)
- m_user = baseProperty->m_user;
- m_overrides = baseProperty;
-}
-
-/*!
- Returns a string containing the data type qualified with "const" either
- prepended to the data type or appended to it, or without the const
- qualification, depending circumstances in the PropertyNode internal state.
- */
-QString PropertyNode::qualifiedDataType() const
-{
- if (m_propertyType != Standard)
- return m_type;
-
- if (setters().isEmpty() && resetters().isEmpty()) {
- if (m_type.contains(QLatin1Char('*')) || m_type.contains(QLatin1Char('&'))) {
- // 'QWidget *' becomes 'QWidget *' const
- return m_type + " const";
- } else {
- /*
- 'int' becomes 'const int' ('int const' is
- correct C++, but looks wrong)
- */
- return "const " + m_type;
- }
- } else {
- return m_type;
- }
-}
-
-/*!
- Returns true if this property has an access function named \a name.
- */
-bool PropertyNode::hasAccessFunction(const QString &name) const
-{
- for (const auto &getter : getters()) {
- if (getter->name() == name)
- return true;
- }
- for (const auto &setter : setters()) {
- if (setter->name() == name)
- return true;
- }
- for (const auto &resetter : resetters()) {
- if (resetter->name() == name)
- return true;
- }
- for (const auto &notifier : notifiers()) {
- if (notifier->name() == name)
- return true;
- }
- return false;
-}
-
-/*!
- Returns true if function \a functionNode has role \a r for this
- property.
- */
-PropertyNode::FunctionRole PropertyNode::role(const FunctionNode *functionNode) const
-{
- for (int i = 0; i < 4; i++) {
- if (m_functions[i].contains(const_cast<FunctionNode *>(functionNode)))
- return (FunctionRole)i;
- }
- return Notifier;
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/propertynode.h b/src/qdoc/propertynode.h
deleted file mode 100644
index be1ccfa09..000000000
--- a/src/qdoc/propertynode.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef PROPERTYNODE_H
-#define PROPERTYNODE_H
-
-#include "functionnode.h"
-#include "node.h"
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-class Aggregate;
-
-class PropertyNode : public Node
-{
-public:
- enum PropertyType { Standard, Bindable };
- enum FunctionRole { Getter, Setter, Resetter, Notifier };
- enum { NumFunctionRoles = Notifier + 1 };
-
- PropertyNode(Aggregate *parent, const QString &name);
-
- void setDataType(const QString &dataType) override { m_type = dataType; }
- void addFunction(FunctionNode *function, FunctionRole role);
- void addSignal(FunctionNode *function, FunctionRole role);
- void setStored(bool stored) { m_stored = toFlagValue(stored); }
- void setDesignable(bool designable) { m_designable = toFlagValue(designable); }
- void setScriptable(bool scriptable) { m_scriptable = toFlagValue(scriptable); }
- void setWritable(bool writable) { m_writable = toFlagValue(writable); }
- void setUser(bool user) { m_user = toFlagValue(user); }
- void setOverriddenFrom(const PropertyNode *baseProperty);
- void setRuntimeDesFunc(const QString &rdf) { m_runtimeDesFunc = rdf; }
- void setRuntimeScrFunc(const QString &scrf) { m_runtimeScrFunc = scrf; }
- void setConstant() { m_const = true; }
- void setFinal() { m_final = true; }
- void setRequired() { m_required = true; }
- void setPropertyType(PropertyType type) { m_propertyType = type; }
- void setRevision(int revision) { m_revision = revision; }
-
- const QString &dataType() const { return m_type; }
- QString qualifiedDataType() const;
- NodeList functions() const;
- const NodeList &functions(FunctionRole role) const { return m_functions[(int)role]; }
- const NodeList &getters() const { return functions(Getter); }
- const NodeList &setters() const { return functions(Setter); }
- const NodeList &resetters() const { return functions(Resetter); }
- const NodeList &notifiers() const { return functions(Notifier); }
- bool hasAccessFunction(const QString &name) const;
- FunctionRole role(const FunctionNode *functionNode) const;
- bool isStored() const { return fromFlagValue(m_stored, storedDefault()); }
- bool isDesignable() const { return fromFlagValue(m_designable, designableDefault()); }
- bool isScriptable() const { return fromFlagValue(m_scriptable, scriptableDefault()); }
- const QString &runtimeDesignabilityFunction() const { return m_runtimeDesFunc; }
- const QString &runtimeScriptabilityFunction() const { return m_runtimeScrFunc; }
- bool isWritable() const { return fromFlagValue(m_writable, writableDefault()); }
- bool isUser() const { return fromFlagValue(m_user, userDefault()); }
- bool isConstant() const { return m_const; }
- bool isFinal() const { return m_final; }
- bool isRequired() const { return m_required; }
- PropertyType propertyType() const { return m_propertyType; }
- const PropertyNode *overriddenFrom() const { return m_overrides; }
-
- bool storedDefault() const { return true; }
- bool userDefault() const { return false; }
- bool designableDefault() const { return !setters().isEmpty(); }
- bool scriptableDefault() const { return true; }
- bool writableDefault() const { return !setters().isEmpty(); }
-
-private:
- QString m_type {};
- PropertyType m_propertyType { Standard };
- QString m_runtimeDesFunc {};
- QString m_runtimeScrFunc {};
- NodeList m_functions[NumFunctionRoles] {};
- FlagValue m_stored { FlagValueDefault };
- FlagValue m_designable { FlagValueDefault };
- FlagValue m_scriptable { FlagValueDefault };
- FlagValue m_writable { FlagValueDefault };
- FlagValue m_user { FlagValueDefault };
- bool m_const { false };
- bool m_final { false };
- bool m_required { false };
- int m_revision { -1 };
- const PropertyNode *m_overrides { nullptr };
-};
-
-inline void PropertyNode::addFunction(FunctionNode *function, FunctionRole role)
-{
- m_functions[(int)role].append(function);
- function->addAssociatedProperty(this);
-}
-
-inline void PropertyNode::addSignal(FunctionNode *function, FunctionRole role)
-{
- m_functions[(int)role].append(function);
- function->addAssociatedProperty(this);
-}
-
-inline NodeList PropertyNode::functions() const
-{
- NodeList list;
- for (int i = 0; i < NumFunctionRoles; ++i)
- list += m_functions[i];
- return list;
-}
-
-QT_END_NAMESPACE
-
-#endif // PROPERTYNODE_H
diff --git a/src/qdoc/proxynode.cpp b/src/qdoc/proxynode.cpp
deleted file mode 100644
index 3a6c159b5..000000000
--- a/src/qdoc/proxynode.cpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "proxynode.h"
-
-#include "tree.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class ProxyNode
- \brief A class for representing an Aggregate that is documented in a different module.
-
- This class is used to represent an Aggregate (usually a class)
- that is located and documented in a different module. In the
- current module, a ProxyNode holds child nodes that are related
- to the class in the other module.
-
- For example, class QHash is located and documented in QtCore.
- There are many global functions named qHash() in QtCore that
- are all related to class QHash using the \c relates command.
- There are also a few qHash() function in QtNetwork that are
- related to QHash. These functions must be documented when the
- documentation for QtNetwork is generated, but the reference
- page for QHash must link to that documentation in its related
- nonmembers list.
-
- The ProxyNode allows qdoc to construct links to the related
- functions (or other things?) in QtNetwork from the reference
- page in QtCore.
- */
-
-/*!
- Constructs the ProxyNode, which at this point looks like any
- other Aggregate, and then finds the Tree this node is in and
- appends this node to that Tree's proxy list so it will be
- easy to find later.
- */
-ProxyNode::ProxyNode(Aggregate *parent, const QString &name) : Aggregate(Node::Proxy, parent, name)
-{
- tree()->appendProxy(this);
-}
-
-/*! \fn bool ProxyNode::docMustBeGenerated() const
- Returns true because a ProxyNode always means some documentation
- must be generated.
-*/
-
-/*! \fn bool ProxyNode::isRelatableType() const
- Returns true because the ProxyNode exists so that elements
- can be related to it with the \c {\\relates} command.
-*/
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/proxynode.h b/src/qdoc/proxynode.h
deleted file mode 100644
index 4cfcb8d0a..000000000
--- a/src/qdoc/proxynode.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef PROXYNODE_H
-#define PROXYNODE_H
-
-#include "aggregate.h"
-
-#include <QtCore/qglobal.h>
-
-QT_BEGIN_NAMESPACE
-
-class ProxyNode : public Aggregate
-{
-public:
- ProxyNode(Aggregate *parent, const QString &name);
- bool docMustBeGenerated() const override { return true; }
- bool isRelatableType() const override { return true; }
-};
-
-QT_END_NAMESPACE
-
-#endif // PROXYNODE_H
diff --git a/src/qdoc/puredocparser.cpp b/src/qdoc/puredocparser.cpp
deleted file mode 100644
index 1c8baf37d..000000000
--- a/src/qdoc/puredocparser.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "puredocparser.h"
-
-#include "qdocdatabase.h"
-#include "tokenizer.h"
-
-#include <cerrno>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- Returns a list of the kinds of files that the pure doc
- parser is meant to parse. The elements of the list are
- file suffixes.
- */
-QStringList PureDocParser::sourceFileNameFilter()
-{
- return QStringList() << "*.qdoc"
- << "*.qtx"
- << "*.qtt"
- << "*.js";
-}
-
-/*!
- Parses the source file identified by \a filePath and adds its
- parsed contents to the database. The \a location is used for
- reporting errors.
- */
-void PureDocParser::parseSourceFile(const Location &location, const QString &filePath)
-{
- QFile in(filePath);
- currentFile_ = filePath;
- if (!in.open(QIODevice::ReadOnly)) {
- location.error(QStringLiteral("Can't open source file '%1' (%2)")
- .arg(filePath)
- .arg(strerror(errno)));
- currentFile_.clear();
- return;
- }
-
- Location fileLocation(filePath);
- Tokenizer fileTokenizer(fileLocation, in);
- m_tokenizer = &fileTokenizer;
- m_token = m_tokenizer->getToken();
-
- /*
- The set of open namespaces is cleared before parsing
- each source file. The word "source" here means cpp file.
- */
- qdb_->clearOpenNamespaces();
-
- processQdocComments();
- in.close();
- currentFile_.clear();
-}
-
-/*!
- This is called by parseSourceFile() to do the actual parsing
- and tree building. It only processes qdoc comments. It skips
- everything else.
- */
-bool PureDocParser::processQdocComments()
-{
- const QSet<QString> &commands = topicCommands() + metaCommands();
-
- while (m_token != Tok_Eoi) {
- if (m_token == Tok_Doc) {
- QString comment = m_tokenizer->lexeme(); // returns an entire qdoc comment.
- Location start_loc(m_tokenizer->location());
- m_token = m_tokenizer->getToken();
-
- Doc::trimCStyleComment(start_loc, comment);
- Location end_loc(m_tokenizer->location());
-
- // Doc constructor parses the comment.
- Doc doc(start_loc, end_loc, comment, commands, topicCommands());
- const TopicList &topics = doc.topicsUsed();
- if (topics.isEmpty()) {
- doc.location().warning(QStringLiteral("This qdoc comment contains no topic command "
- "(e.g., '\\%1', '\\%2').")
- .arg(COMMAND_MODULE)
- .arg(COMMAND_PAGE));
- continue;
- }
- if (hasTooManyTopics(doc))
- continue;
-
- DocList docs;
- NodeList nodes;
- QString topic = topics[0].topic;
-
- processTopicArgs(doc, topic, nodes, docs);
- processMetaCommands(nodes, docs);
- } else {
- m_token = m_tokenizer->getToken();
- }
- }
- return true;
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/puredocparser.h b/src/qdoc/puredocparser.h
deleted file mode 100644
index f147a7755..000000000
--- a/src/qdoc/puredocparser.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef PUREDOCPARSER_H
-#define PUREDOCPARSER_H
-
-#include "cppcodeparser.h"
-
-QT_BEGIN_NAMESPACE
-
-class Location;
-
-class PureDocParser : public CppCodeParser
-{
-public:
- PureDocParser() = default;
- ~PureDocParser() override = default;
-
- QStringList sourceFileNameFilter() override;
- void parseSourceFile(const Location &location, const QString &filePath) override;
-
-private:
- bool processQdocComments();
- Tokenizer *m_tokenizer = nullptr;
- int m_token = 0;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/qdoc.pro b/src/qdoc/qdoc.pro
deleted file mode 100644
index c71c6bbe1..000000000
--- a/src/qdoc/qdoc.pro
+++ /dev/null
@@ -1,212 +0,0 @@
-
-!force_bootstrap {
- requires(qtConfig(xmlstreamwriter))
-}
-
-option(host_build)
-QT = core
-qtHaveModule(qmldevtools-private) {
- QT += qmldevtools-private
-} else {
- DEFINES += QT_NO_DECLARATIVE
-}
-
-DEFINES += QT_NO_FOREACH
-
-include($$OUT_PWD/../../src/global/qttools-config.pri)
-
-LIBS += $$CLANG_LIBS
-!contains(QMAKE_DEFAULT_INCDIRS, $$CLANG_INCLUDEPATH): INCLUDEPATH += $$CLANG_INCLUDEPATH
-DEFINES += $$CLANG_DEFINES
-
-!contains(QMAKE_DEFAULT_LIBDIRS, $$CLANG_LIBDIR):!disable_external_rpath: QMAKE_RPATHDIR += $$CLANG_LIBDIR
-DEFINES += $$shell_quote(CLANG_RESOURCE_DIR=\"$${CLANG_LIBDIR}/clang/$${CLANG_VERSION}/include\")
-
-INCLUDEPATH += $$QT_SOURCE_TREE/src/tools/qdoc \
- $$QT_SOURCE_TREE/src/tools/qdoc/qmlparser
-
-# Increase the stack size on MSVC to 4M to avoid a stack overflow
-win32-icc*|win32-msvc*:{
- QMAKE_LFLAGS += /STACK:4194304
-}
-
-HEADERS += access.h \
- aggregate.h \
- atom.h \
- clangcodeparser.h \
- classnode.h \
- codechunk.h \
- codemarker.h \
- codeparser.h \
- collectionnode.h \
- config.h \
- cppcodemarker.h \
- cppcodeparser.h \
- doc.h \
- docbookgenerator.h \
- docparser.h \
- docprivate.h \
- docutilities.h \
- editdistance.h \
- enumitem.h \
- enumnode.h \
- examplenode.h \
- externalpagenode.h \
- functionnode.h \
- generator.h \
- headernode.h \
- helpprojectwriter.h \
- htmlgenerator.h \
- importrec.h \
- location.h \
- loggingcategory.h \
- macro.h \
- manifestwriter.h \
- namespacenode.h \
- node.h \
- openedlist.h \
- pagenode.h \
- parameters.h \
- propertynode.h \
- proxynode.h \
- puredocparser.h \
- qdoccommandlineparser.h \
- qdocdatabase.h \
- qdocindexfiles.h \
- qdoctagfiles.h \
- qmltypenode.h \
- qmlpropertynode.h \
- quoter.h \
- relatedclass.h \
- sections.h \
- separator.h \
- sharedcommentnode.h \
- singleton.h \
- text.h \
- tokenizer.h \
- topic.h \
- tree.h \
- typedefnode.h \
- usingclause.h \
- utilities.h \
- variablenode.h \
- webxmlgenerator.h \
- xmlgenerator.h
-
-SOURCES += aggregate.cpp \
- atom.cpp \
- clangcodeparser.cpp \
- classnode.cpp \
- codechunk.cpp \
- codemarker.cpp \
- codeparser.cpp \
- collectionnode.cpp \
- config.cpp \
- cppcodemarker.cpp \
- cppcodeparser.cpp \
- doc.cpp \
- docbookgenerator.cpp \
- docparser.cpp \
- docprivate.cpp \
- editdistance.cpp \
- enumnode.cpp \
- externalpagenode.cpp \
- functionnode.cpp \
- generator.cpp \
- headernode.cpp \
- helpprojectwriter.cpp \
- htmlgenerator.cpp \
- location.cpp \
- main.cpp \
- manifestwriter.cpp \
- namespacenode.cpp \
- node.cpp \
- openedlist.cpp \
- pagenode.cpp \
- parameters.cpp \
- propertynode.cpp \
- proxynode.cpp \
- puredocparser.cpp \
- qdoccommandlineparser.cpp \
- qdocdatabase.cpp \
- qdocindexfiles.cpp \
- qdoctagfiles.cpp \
- qmltypenode.cpp \
- qmlpropertynode.cpp \
- quoter.cpp \
- relatedclass.cpp \
- sections.cpp \
- separator.cpp \
- sharedcommentnode.cpp \
- text.cpp \
- tokenizer.cpp \
- tree.cpp \
- typedefnode.cpp \
- usingclause.cpp \
- utilities.cpp \
- variablenode.cpp \
- webxmlgenerator.cpp \
- xmlgenerator.cpp
-
-### QML/JS Parser ###
-
-HEADERS += jscodemarker.h \
- qmlcodemarker.h \
- qmlcodeparser.h \
- qmlmarkupvisitor.h \
- qmlvisitor.h
-
-SOURCES += jscodemarker.cpp \
- qmlcodemarker.cpp \
- qmlcodeparser.cpp \
- qmlmarkupvisitor.cpp \
- qmlvisitor.cpp
-
-### Documentation for qdoc ###
-
-qtPrepareTool(QDOC, qdoc)
-qtPrepareTool(QHELPGENERATOR, qhelpgenerator)
-
-QMAKE_DOCS = $$PWD/doc/config/qdoc.qdocconf
-
-QMAKE_TARGET_DESCRIPTION = "Qt Documentation Compiler"
-load(qt_tool)
-
-TR_EXCLUDE += $$PWD/*
-
-load(cmake_functions)
-
-CMAKE_INSTALL_LIBS_DIR = $$cmakeTargetPath($$[QT_INSTALL_LIBS])
-contains(CMAKE_INSTALL_LIBS_DIR, ^(/usr)?/lib(64)?.*): CMAKE_USR_MOVE_WORKAROUND = $$CMAKE_INSTALL_LIBS_DIR
-
-CMAKE_LIB_DIR = $$cmakeRelativePath($$[QT_INSTALL_LIBS], $$[QT_INSTALL_PREFIX])
-!contains(CMAKE_LIB_DIR,"^\\.\\./.*") {
- CMAKE_RELATIVE_INSTALL_LIBS_DIR = $$cmakeRelativePath($$[QT_INSTALL_PREFIX], $$[QT_INSTALL_LIBS])
- # We need to go up another two levels because the CMake files are
- # installed in $${CMAKE_LIB_DIR}/cmake/Qt5$${CMAKE_MODULE_NAME}
- CMAKE_RELATIVE_INSTALL_DIR = "$${CMAKE_RELATIVE_INSTALL_LIBS_DIR}../../"
-} else {
- CMAKE_LIB_DIR_IS_ABSOLUTE = True
-}
-
-CMAKE_BIN_DIR = $$cmakeRelativePath($$[QT_HOST_BINS], $$[QT_INSTALL_PREFIX])
-contains(CMAKE_BIN_DIR, "^\\.\\./.*") {
- CMAKE_BIN_DIR = $$[QT_HOST_BINS]/
- CMAKE_BIN_DIR_IS_ABSOLUTE = True
-}
-
-load(qt_build_paths)
-
-equals(QMAKE_HOST.os, Windows): CMAKE_BIN_SUFFIX = ".exe"
-
-cmake_qdoc_config_file.input = $$PWD/Qt5DocToolsConfig.cmake.in
-cmake_qdoc_config_version_file.input = $$[QT_HOST_DATA/src]/mkspecs/features/data/cmake/Qt5ConfigVersion.cmake.in
-CMAKE_PACKAGE_VERSION = $$MODULE_VERSION
-cmake_qdoc_config_file.output = $$MODULE_BASE_OUTDIR/lib/cmake/Qt5DocTools/Qt5DocToolsConfig.cmake
-cmake_qdoc_config_version_file.output = $$MODULE_BASE_OUTDIR/lib/cmake/Qt5DocTools/Qt5DocToolsConfigVersion.cmake
-QMAKE_SUBSTITUTES += cmake_qdoc_config_file cmake_qdoc_config_version_file
-
-cmake_qdoc_tools_files.files += $$cmake_qdoc_config_file.output $$cmake_qdoc_config_version_file.output
-cmake_qdoc_tools_files.path = $$[QT_INSTALL_LIBS]/cmake/Qt5DocTools
-cmake_qdoc_tools_files.CONFIG = no_check_exist
-INSTALLS += cmake_qdoc_tools_files
diff --git a/src/qdoc/qdoc/CMakeLists.txt b/src/qdoc/qdoc/CMakeLists.txt
new file mode 100644
index 000000000..a1d31765e
--- /dev/null
+++ b/src/qdoc/qdoc/CMakeLists.txt
@@ -0,0 +1,117 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+if(CMAKE_VERSION VERSION_LESS "3.19" AND MSVC AND CMAKE_GENERATOR STREQUAL "Ninja Multi-Config")
+ message(WARNING "qdoc will not be built in this configuration.")
+ return()
+endif()
+
+if (MINGW)
+ set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" PROPERTY _qt_skip_separate_debug_info ON)
+endif()
+
+
+#####################################################################
+## qdoc Tool:
+#####################################################################
+
+qt_get_tool_target_name(target_name qdoc)
+qt_internal_add_tool(${target_name}
+ TARGET_DESCRIPTION "Qt Documentation Compiler"
+ TOOLS_TARGET Tools
+ USER_FACING
+ SOURCES
+ src/qdoc/aggregate.cpp
+ src/qdoc/atom.cpp
+ src/qdoc/boundaries/filesystem/directorypath.cpp
+ src/qdoc/boundaries/filesystem/filepath.cpp
+ src/qdoc/boundaries/filesystem/resolvedfile.cpp
+ src/qdoc/clangcodeparser.cpp
+ src/qdoc/classnode.cpp
+ src/qdoc/codechunk.cpp
+ src/qdoc/codemarker.cpp
+ src/qdoc/codeparser.cpp
+ src/qdoc/collectionnode.cpp
+ src/qdoc/comparisoncategory.h
+ src/qdoc/config.cpp
+ src/qdoc/cppcodemarker.cpp
+ src/qdoc/cppcodeparser.cpp
+ src/qdoc/doc.cpp
+ src/qdoc/docbookgenerator.cpp
+ src/qdoc/docparser.cpp
+ src/qdoc/docprivate.cpp
+ src/qdoc/editdistance.cpp
+ src/qdoc/enumnode.cpp
+ src/qdoc/externalpagenode.cpp
+ src/qdoc/filesystem/fileresolver.cpp
+ src/qdoc/functionnode.cpp
+ src/qdoc/generator.cpp
+ src/qdoc/headernode.cpp
+ src/qdoc/helpprojectwriter.cpp
+ src/qdoc/htmlgenerator.cpp
+ src/qdoc/location.cpp
+ src/qdoc/main.cpp
+ src/qdoc/manifestwriter.cpp
+ src/qdoc/namespacenode.cpp
+ src/qdoc/node.cpp
+ src/qdoc/openedlist.cpp
+ src/qdoc/pagenode.cpp
+ src/qdoc/parameters.cpp
+ src/qdoc/parsererror.cpp
+ src/qdoc/propertynode.cpp
+ src/qdoc/proxynode.cpp
+ src/qdoc/puredocparser.cpp
+ src/qdoc/qdoccommandlineparser.cpp
+ src/qdoc/qdocdatabase.cpp
+ src/qdoc/qdocindexfiles.cpp
+ src/qdoc/qmlcodemarker.cpp
+ src/qdoc/qmlcodeparser.cpp
+ src/qdoc/qmlmarkupvisitor.cpp
+ src/qdoc/qmlpropertynode.cpp
+ src/qdoc/qmltypenode.cpp
+ src/qdoc/qmlvisitor.cpp
+ src/qdoc/quoter.cpp
+ src/qdoc/relatedclass.cpp
+ src/qdoc/sections.cpp
+ src/qdoc/sharedcommentnode.cpp
+ src/qdoc/tagfilewriter.cpp
+ src/qdoc/text.cpp
+ src/qdoc/tokenizer.cpp
+ src/qdoc/tree.cpp
+ src/qdoc/typedefnode.cpp
+ src/qdoc/utilities.cpp
+ src/qdoc/variablenode.cpp
+ src/qdoc/webxmlgenerator.cpp
+ src/qdoc/xmlgenerator.cpp
+ NO_UNITY_BUILD_SOURCES
+ src/qdoc/qmlmarkupvisitor.cpp # redefinition of 'samp'/'slt' (from codemarker.cpp)
+ INCLUDE_DIRECTORIES
+ ${CMAKE_CURRENT_LIST_DIR}/src
+ LIBRARIES
+ Qt::QmlPrivate
+ WrapLibClang::WrapLibClang
+ DEFINES
+ #(CLANG_RESOURCE_DIR=\"/clang//include\") # special case remove
+ CLANG_RESOURCE_DIR=${QT_LIBCLANG_RESOURCE_DIR}
+ # To provide the ability to workaround version-specific Clang issues.
+ # A re-export of (LLVM|CLANG)_VERSION_MAJOR done in WrapLibClang.cmake
+ LIBCLANG_VERSION_MAJOR=${QT_LIB_CLANG_VERSION_MAJOR}
+ QDOC2_COMPAT
+)
+qt_internal_return_unless_building_tools()
+
+# If libclangTooling.a is not built with -fPIE enabled we cannot link it to qdoc.
+# TODO: Re-enable PIE once clang is built with PIE in provisioning.
+set_target_properties(${target_name} PROPERTIES POSITION_INDEPENDENT_CODE FALSE)
+
+qt_internal_extend_target(${target_name} CONDITION (WIN32 AND ICC) OR MSVC
+ LINK_OPTIONS
+ "/STACK:4194304"
+)
+qt_internal_add_docs(${target_name}
+ doc/config/qdoc.qdocconf
+)
+
+if(QT_BUILD_TESTS)
+ add_subdirectory(tests)
+endif()
diff --git a/src/qdoc/qdoc/doc/config/qdoc.qdocconf b/src/qdoc/qdoc/doc/config/qdoc.qdocconf
new file mode 100644
index 000000000..d886ff75b
--- /dev/null
+++ b/src/qdoc/qdoc/doc/config/qdoc.qdocconf
@@ -0,0 +1,61 @@
+include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
+include($QT_INSTALL_DOCS/config/exampleurl-qttools.qdocconf)
+
+project = QDoc
+description = QDoc Manual
+version = $QT_VERSION
+moduleheader =
+
+sourcedirs = ..
+
+exampledirs = .. \
+ ../examples
+
+imagedirs = ../images
+
+tagfile = ../html/qdoc.tags
+
+examples.fileextensions = "*.cpp *.h *.js *.xq *.svg *.xml *.ui *.qhp *.qhcp *.qml *.css *.qdoc *.qdocinc *.sample"
+
+qhp.projects = QDoc
+
+qhp.QDoc.file = qdoc.qhp
+qhp.QDoc.namespace = org.qt-project.qdoc.$QT_VERSION_TAG
+qhp.QDoc.virtualFolder = qdoc
+qhp.QDoc.indexTitle = QDoc Manual
+qhp.QDoc.indexRoot =
+
+qhp.QDoc.subprojects = overviews
+qhp.QDoc.subprojects.overviews.title = Overviews
+qhp.QDoc.subprojects.overviews.indexTitle = QDoc Manual
+qhp.QDoc.subprojects.overviews.selectors = doc:page
+
+depends += \
+ qtconcurrent \
+ qtcore \
+ qtdbus \
+ qtdesigner \
+ qtdoc \
+ qthelp \
+ qtgui \
+ qtlinguist \
+ qtnetwork \
+ qtopengl \
+ qtprintsupport \
+ qtqml \
+ qtquick \
+ qtquickcontrols \
+ qtsql \
+ qtsvg \
+ qttestlib \
+ qtuitools \
+ qtwidgets \
+ qtxml
+
+ignorewords += QDoc
+
+navigation.landingpage = "QDoc Manual"
+
+# Convenience macros for creating links to QDoc commands & configuration variables
+macro.qdoccmd = \\l{\1-command}{\\c{\\\1}}
+macro.qdocvar = \\l{\1-variable}{\\c{\1}}
diff --git a/src/qdoc/qdoc/doc/corefeatures.qdoc b/src/qdoc/qdoc/doc/corefeatures.qdoc
new file mode 100644
index 000000000..e1edc3a92
--- /dev/null
+++ b/src/qdoc/qdoc/doc/corefeatures.qdoc
@@ -0,0 +1,11 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page corefeatures.html
+ \title Core Features
+
+ \include examples/signalandslots.qdocinc
+ \include examples/objectmodel.qdocinc
+ \include examples/layoutmanagement.qdocinc
+*/
diff --git a/src/qdoc/qdoc/doc/examples/cpp.qdoc.sample b/src/qdoc/qdoc/doc/examples/cpp.qdoc.sample
new file mode 100644
index 000000000..39c77f63c
--- /dev/null
+++ b/src/qdoc/qdoc/doc/examples/cpp.qdoc.sample
@@ -0,0 +1,102 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//![class]
+/*!
+ \class QCache
+ \brief The QCache class is a template class that provides a cache.
+
+ \ingroup tools
+ \ingroup shared
+
+ \reentrant
+
+ QCache\<Key, T\> defines a cache that stores objects of type T
+ associated with keys of type Key. For example, here's the
+ definition of a cache that stores objects of type Employee
+ associated with an integer key:
+
+ \snippet code/doc_src_qcache.cpp 0
+
+ Here's how to insert an object in the cache:
+
+ \snippet code/doc_src_qcache.cpp 1
+
+ ... detailed description omitted
+
+ \sa QPixmapCache, QHash, QMap
+*/
+//![class]
+
+//![function]
+/*!
+ \fn QString &QString::remove(int position, int n)
+
+ Removes \a n characters from the string, starting at the given \a
+ position index, and returns a reference to the string.
+
+ If the specified \a position index is within the string, but \a
+ position + \a n is beyond the end of the string, the string is
+ truncated at the specified \a position.
+
+ \snippet qstring/main.cpp 37
+
+ \sa insert(), replace()
+*/
+QString &QString::remove(int pos, int len)
+//! [function]
+
+//! [return]
+/*!
+ Returns \c true if a QScroller object was already created for \a target; \c false otherwise.
+
+ \sa scroller()
+*/
+bool QScroller::hasScroller(QObject *target)
+//! [return]
+
+//! [property]
+/*!
+ \property QVariantAnimation::duration
+ \brief the duration of the animation
+
+ This property describes the duration in milliseconds of the
+ animation. The default duration is 250 milliseconds.
+
+ \sa QAbstractAnimation::duration()
+ */
+int QVariantAnimation::duration() const
+//! [property]
+
+//! [signals]
+/*!
+ \fn QAbstractTransition::triggered()
+
+ This signal is emitted when the transition has been triggered (after
+ onTransition() has been called).
+*/
+//! [signals]
+
+//! [enums]
+/*!
+ \enum QSql::TableType
+
+ This enum type describes types of SQL tables.
+
+ \value Tables All the tables visible to the user.
+ \value SystemTables Internal tables used by the database.
+ \value Views All the views visible to the user.
+ \value AllTables All of the above.
+*/
+//! [enums]
+
+//! [overloaded notifier]
+/*!
+\property QSpinBox::value
+\brief the value of the spin box
+
+setValue() will emit valueChanged() if the new value is different
+from the old one. The \l{QSpinBox::}{value} property has a second notifier
+signal which includes the spin box's prefix and suffix.
+*/
+//! [overloaded notifier]
diff --git a/src/qdoc/doc/examples/layoutmanagement.qdocinc b/src/qdoc/qdoc/doc/examples/layoutmanagement.qdocinc
index 780b03c8f..780b03c8f 100644
--- a/src/qdoc/doc/examples/layoutmanagement.qdocinc
+++ b/src/qdoc/qdoc/doc/examples/layoutmanagement.qdocinc
diff --git a/src/qdoc/qdoc/doc/examples/main.cpp b/src/qdoc/qdoc/doc/examples/main.cpp
new file mode 100644
index 000000000..0898fa5f7
--- /dev/null
+++ b/src/qdoc/qdoc/doc/examples/main.cpp
@@ -0,0 +1,16 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+#include <QPushButton>
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ QPushButton hello("Hello world!");
+ hello.resize(100, 30);
+
+ hello.show();
+ return app.exec();
+}
diff --git a/src/qdoc/qdoc/doc/examples/mainwindow.cpp b/src/qdoc/qdoc/doc/examples/mainwindow.cpp
new file mode 100644
index 000000000..4e67f0a79
--- /dev/null
+++ b/src/qdoc/qdoc/doc/examples/mainwindow.cpp
@@ -0,0 +1,213 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+
+#include "mainwindow.h"
+#include "scribblearea.h"
+
+//! [0]
+MainWindow::MainWindow()
+{
+ scribbleArea = new ScribbleArea;
+ setCentralWidget(scribbleArea);
+
+ createActions();
+ createMenus();
+
+ setWindowTitle(tr("Scribble"));
+ resize(500, 500);
+}
+//! [0]
+
+//! [1]
+void MainWindow::closeEvent(QCloseEvent *event)
+//! [1] //! [2]
+{
+ if (maybeSave()) {
+ event->accept();
+ } else {
+ event->ignore();
+ }
+}
+//! [2]
+
+//! [3]
+void MainWindow::open()
+//! [3] //! [4]
+{
+ if (maybeSave()) {
+ QString fileName = QFileDialog::getOpenFileName(this,
+ tr("Open File"), QDir::currentPath());
+ if (!fileName.isEmpty())
+ scribbleArea->openImage(fileName);
+ }
+}
+//! [4]
+
+//! [5]
+void MainWindow::save()
+//! [5] //! [6]
+{
+ QAction *action = qobject_cast<QAction *>(sender());
+ QByteArray fileFormat = action->data().toByteArray();
+ saveFile(fileFormat);
+}
+//! [6]
+
+//! [7]
+void MainWindow::penColor()
+//! [7] //! [8]
+{
+ QColor newColor = QColorDialog::getColor(scribbleArea->penColor());
+ if (newColor.isValid())
+ scribbleArea->setPenColor(newColor);
+}
+//! [8]
+
+//! [9]
+void MainWindow::penWidth()
+//! [9] //! [10]
+{
+ bool ok;
+ int newWidth = QInputDialog::getInteger(this, tr("Scribble"),
+ tr("Select pen width:"),
+ scribbleArea->penWidth(),
+ 1, 50, 1, &ok);
+ if (ok)
+ scribbleArea->setPenWidth(newWidth);
+}
+//! [10]
+
+//! [11]
+void MainWindow::about()
+//! [11] //! [12]
+{
+ QMessageBox::about(this, tr("About Scribble"),
+ tr("<p>The <b>Scribble</b> example shows how to use QMainWindow as the "
+ "base widget for an application, and how to reimplement some of "
+ "QWidget's event handlers to receive the events generated for "
+ "the application's widgets:</p><p> We reimplement the mouse event "
+ "handlers to facilitate drawing, the paint event handler to "
+ "update the application and the resize event handler to optimize "
+ "the application's appearance. In addition we reimplement the "
+ "close event handler to intercept the close events before "
+ "terminating the application.</p><p> The example also demonstrates "
+ "how to use QPainter to draw an image in real time, as well as "
+ "to repaint widgets.</p>"));
+}
+//! [12]
+
+//! [13]
+void MainWindow::createActions()
+//! [13] //! [14]
+{
+ openAct = new QAction(tr("&Open..."), this);
+ openAct->setShortcuts(QKeySequence::Open);
+ connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
+
+ const QByteArrayList formats = QImageWriter::supportedImageFormats();
+ for (const QByteArray &format : formats) {
+ QString text = tr("%1...").arg(QString(format).toUpper());
+
+ QAction *action = new QAction(text, this);
+ action->setData(format);
+ connect(action, SIGNAL(triggered()), this, SLOT(save()));
+ saveAsActs.append(action);
+ }
+
+ printAct = new QAction(tr("&Print..."), this);
+ connect(printAct, SIGNAL(triggered()), scribbleArea, SLOT(print()));
+
+ exitAct = new QAction(tr("E&xit"), this);
+ exitAct->setShortcuts(QKeySequence::Quit);
+ connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));
+
+ penColorAct = new QAction(tr("&Pen Color..."), this);
+ connect(penColorAct, SIGNAL(triggered()), this, SLOT(penColor()));
+
+ penWidthAct = new QAction(tr("Pen &Width..."), this);
+ connect(penWidthAct, SIGNAL(triggered()), this, SLOT(penWidth()));
+
+ clearScreenAct = new QAction(tr("&Clear Screen"), this);
+ clearScreenAct->setShortcut(tr("Ctrl+L"));
+ connect(clearScreenAct, SIGNAL(triggered()),
+ scribbleArea, SLOT(clearImage()));
+
+ aboutAct = new QAction(tr("&About"), this);
+ connect(aboutAct, SIGNAL(triggered()), this, SLOT(about()));
+
+ aboutQtAct = new QAction(tr("About &Qt"), this);
+ connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
+}
+//! [14]
+
+//! [15]
+void MainWindow::createMenus()
+//! [15] //! [16]
+{
+ saveAsMenu = new QMenu(tr("&Save As"), this);
+ saveAsMenu->addActions(saveAsActs);
+
+ fileMenu = new QMenu(tr("&File"), this);
+ fileMenu->addAction(openAct);
+ fileMenu->addMenu(saveAsMenu);
+ fileMenu->addAction(printAct);
+ fileMenu->addSeparator();
+ fileMenu->addAction(exitAct);
+
+ optionMenu = new QMenu(tr("&Options"), this);
+ optionMenu->addAction(penColorAct);
+ optionMenu->addAction(penWidthAct);
+ optionMenu->addSeparator();
+ optionMenu->addAction(clearScreenAct);
+
+ helpMenu = new QMenu(tr("&Help"), this);
+ helpMenu->addAction(aboutAct);
+ helpMenu->addAction(aboutQtAct);
+
+ menuBar()->addMenu(fileMenu);
+ menuBar()->addMenu(optionMenu);
+ menuBar()->addMenu(helpMenu);
+}
+//! [16]
+
+//! [17]
+bool MainWindow::maybeSave()
+//! [17] //! [18]
+{
+ if (scribbleArea->isModified()) {
+ QMessageBox::StandardButton ret;
+ ret = QMessageBox::warning(this, tr("Scribble"),
+ tr("The image has been modified.\n"
+ "Do you want to save your changes?"),
+ QMessageBox::Save | QMessageBox::Discard
+ | QMessageBox::Cancel);
+ if (ret == QMessageBox::Save) {
+ return saveFile("png");
+ } else if (ret == QMessageBox::Cancel) {
+ return false;
+ }
+ }
+ return true;
+}
+//! [18]
+
+//! [19]
+bool MainWindow::saveFile(const QByteArray &fileFormat)
+//! [19] //! [20]
+{
+ QString initialPath = QDir::currentPath() + "/untitled." + fileFormat;
+
+ QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"),
+ initialPath,
+ tr("%1 Files (*.%2);;All Files (*)")
+ .arg(QString(fileFormat.toUpper()))
+ .arg(QString(fileFormat)));
+ if (fileName.isEmpty()) {
+ return false;
+ } else {
+ return scribbleArea->saveImage(fileName, fileFormat);
+ }
+}
+//! [20]
diff --git a/src/qdoc/qdoc/doc/examples/minimum.qdocconf b/src/qdoc/qdoc/doc/examples/minimum.qdocconf
new file mode 100644
index 000000000..fca0cd757
--- /dev/null
+++ b/src/qdoc/qdoc/doc/examples/minimum.qdocconf
@@ -0,0 +1,46 @@
+# QDoc is a tool that constantly evolves and there may be compatibility issues
+# between old and new practices. For that reason, QDoc configuration files in
+# the Qt Project includes compat.qdocconf:
+#include(compat.qdocconf)
+
+# Give the documentation project a title:
+project = My documentation project
+
+# Pass additional include paths to QDoc when parsing C++ code for documentation
+# comments.
+#includepaths += -I/some/path
+
+# QDoc needs a lists of file extensions to know which files to process in
+# different situations. Uncomment the following include statement to get
+# a pre-defined list of file extensions.
+#include(fileextensions.qdocconf)
+
+# You can also specify file extensions manually.
+headers.fileextensions = "*.h *.hpp"
+sources.fileextensions = "*.cpp *.qml *.qdoc"
+
+# The outputdir variable specifies the directory where QDoc places the generated
+# documentation.
+outputdir = public
+
+# The headerdirs variable specifies the directories that contain the header
+# files associated with the .cpp source files used in the documentation.
+headerdirs = .
+
+# The sourcedirs variable specifies the directories that contain the .cpp or
+# .qdoc files used in the documentation.
+sourcedirs = .
+
+# The exampledirs variable specifies the directories that contain the source
+# code of the example files.
+exampledirs = ./examples
+
+# The imagedirs variable specifies the directories that contain images used in
+# the documentation.
+imagedirs = ./images
+
+# Set a warning limit. QDoc will exit with a non-zero exit code if it generates
+# documentation warnings during the documentation build. Useful for tracking
+# down documentation issues.
+#warninglimit = 0
+#warninglimit.enabled = true
diff --git a/src/qdoc/doc/examples/objectmodel.qdocinc b/src/qdoc/qdoc/doc/examples/objectmodel.qdocinc
index 02b5991c4..02b5991c4 100644
--- a/src/qdoc/doc/examples/objectmodel.qdocinc
+++ b/src/qdoc/qdoc/doc/examples/objectmodel.qdocinc
diff --git a/src/qdoc/qdoc/doc/examples/qml.qdoc.sample b/src/qdoc/qdoc/doc/examples/qml.qdoc.sample
new file mode 100644
index 000000000..e0f9a66b9
--- /dev/null
+++ b/src/qdoc/qdoc/doc/examples/qml.qdoc.sample
@@ -0,0 +1,90 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//![qmltype]
+ \qmltype TextEdit
+ \instantiates QQuickTextEdit
+ \inqmlmodule QtQuick
+ \ingroup qtquick-visual
+ \ingroup qtquick-input
+ \inherits Item
+ \brief Displays multiple lines of editable formatted text
+
+ The TextEdit item displays a block of editable, formatted text.
+
+ It can display both plain and rich text. For example:
+
+ \qml
+ TextEdit {
+ width: 240
+ text: "<b>Hello</b> <i>World!</i>"
+ font.family: "Helvetica"
+ font.pointSize: 20
+ color: "blue"
+ focus: true
+ }
+ \endqml
+
+ \image declarative-textedit.gif
+
+ ... omitted detailed description
+
+ \sa Text, TextInput, {examples/quick/text/textselection}{Text Selection example}
+//![qmltype]
+
+//![function]
+/*
+ \qmlmethod QtQuick2::ListModel::remove(int index, int count = 1)
+
+ Deletes the content at \a index from the model.
+
+ \sa clear()
+*/
+void QQuickListModel::remove(QQmlV8Function *args)
+//! [function]
+
+//! [return]
+/*
+ Returns \c true if a QScroller object was already created for \a target; \c false otherwise.
+
+ \sa scroller()
+*/
+bool QScroller::hasScroller(QObject *target)
+//! [return]
+
+//! [property]
+/*
+ \property QVariantAnimation::duration
+ \brief the duration of the animation
+
+ This property describes the duration in milliseconds of the
+ animation. The default duration is 250 milliseconds.
+
+ \sa QAbstractAnimation::duration()
+ */
+int QVariantAnimation::duration() const
+//! [property]
+
+//! [signals]
+/*
+ This signal is emitted when the user clicks the button. A click is defined
+ as a press followed by a release. The corresponding handler is
+ \c onClicked.
+*/
+signal clicked()
+//! [signals]
+
+//! [enums]
+/*!
+\qmlproperty enumeration QtQuick2::Text::font.weight
+
+Sets the font's weight.
+
+The weight can be one of:
+\value Font.Light
+\value Font.Normal The default
+\value Font.DemiBold
+\value Font.Bold
+\value Font.Black
+
+//! [enums]
diff --git a/src/qdoc/qdoc/doc/examples/samples.qdocinc b/src/qdoc/qdoc/doc/examples/samples.qdocinc
new file mode 100644
index 000000000..ea257852f
--- /dev/null
+++ b/src/qdoc/qdoc/doc/examples/samples.qdocinc
@@ -0,0 +1,85 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [qvector3d-class]
+/*!
+ \class QVector3D
+ \brief The QVector3D class represents a vector or vertex in 3D space.
+ \since 4.6
+ \ingroup painting-3D
+
+ Vectors are one of the main building blocks of 3D representation and
+ drawing. They consist of three coordinates, traditionally called
+ x, y, and z.
+
+ The QVector3D class can also be used to represent vertices in 3D space.
+ We therefore do not need to provide a separate vertex class.
+
+ \note By design values in the QVector3D instance are stored as \c float.
+ This means that on platforms where the \c qreal arguments to QVector3D
+ functions are represented by \c double values, it is possible to
+ lose precision.
+
+ \sa QVector2D, QVector4D, QQuaternion
+*/
+//! [qvector3d-class]
+
+//! [qvector3d-function]
+/*!
+ \fn QVector3D::QVector3D(const QPoint& point)
+
+ Constructs a vector with x and y coordinates from a 2D \a point, and a
+ z coordinate of 0.
+*/
+//! [qvector3d-function]
+
+//! [sample-page]
+/*!
+ \page generic-guide.html
+ \title Generic QDoc Guide
+ \nextpage Creating QDoc Configuration Files
+ There are three essential materials for generating documentation with QDoc:
+
+ \list
+ \li \c QDoc binary (\c {qdoc})
+ \li \c qdocconf configuration files
+ \li \c Documentation in \c C++, \c QML, and \c .qdoc files
+ \endlist
+*/
+//! [sample-page]
+
+//! [sample-faq]
+/*!
+ \page altruism-faq.html
+ \title Altruism Frequently Asked Questions
+
+ \brief All the questions about altruism, answered.
+
+ ...
+*/
+//! [sample-faq]
+
+//! [sample-example]
+/*!
+ \title UI Components: Tab Widget Example
+ \example declarative/ui-components/tabwidget
+
+ This example shows how to create a tab widget. It also demonstrates how
+ \l {Property aliases}{property aliases} and
+ \l {Introduction to the QML Language#Default Properties}{default properties} can be used to collect and
+ assemble the child items declared within an \l Item.
+
+ \image qml-tabwidget-example.png
+*/
+//! [sample-example]
+
+//! [sample-overview]
+/*!
+ \page overview-qt-technology.html
+ \title Overview of a Qt Technology
+
+ \brief provides a technology never seen before.
+
+*/
+//! [sample-overview]
+
diff --git a/src/qdoc/doc/examples/signalandslots.qdocinc b/src/qdoc/qdoc/doc/examples/signalandslots.qdocinc
index e14ede144..e14ede144 100644
--- a/src/qdoc/doc/examples/signalandslots.qdocinc
+++ b/src/qdoc/qdoc/doc/examples/signalandslots.qdocinc
diff --git a/src/qdoc/doc/files/basicqt.qdoc.sample b/src/qdoc/qdoc/doc/files/basicqt.qdoc.sample
index 1243387b2..1243387b2 100644
--- a/src/qdoc/doc/files/basicqt.qdoc.sample
+++ b/src/qdoc/qdoc/doc/files/basicqt.qdoc.sample
diff --git a/src/qdoc/qdoc/doc/files/compat.qdocconf b/src/qdoc/qdoc/doc/files/compat.qdocconf
new file mode 100644
index 000000000..94e2ffd7d
--- /dev/null
+++ b/src/qdoc/qdoc/doc/files/compat.qdocconf
@@ -0,0 +1,10 @@
+macro.0 = "\\\\0"
+macro.b = "\\\\b"
+macro.n = "\\\\n"
+macro.r = "\\\\r"
+macro.img = "\\image"
+macro.endquote = "\\endquotation"
+macro.relatesto = "\\relates"
+
+spurious = "Missing comma in .*" \
+ "Missing pattern .*"
diff --git a/src/qdoc/qdoc/doc/files/qtgui.qdocconf b/src/qdoc/qdoc/doc/files/qtgui.qdocconf
new file mode 100644
index 000000000..ae873e83d
--- /dev/null
+++ b/src/qdoc/qdoc/doc/files/qtgui.qdocconf
@@ -0,0 +1,45 @@
+include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
+
+project = QtGui
+description = Qt GUI Reference Documentation
+version = $QT_VERSION
+
+examplesinstallpath = gui
+
+qhp.projects = QtGui
+
+qhp.QtGui.file = qtgui.qhp
+qhp.QtGui.namespace = org.qt-project.qtgui.$QT_VERSION_TAG
+qhp.QtGui.virtualFolder = qtgui
+qhp.QtGui.indexTitle = Qt GUI
+qhp.QtGui.indexRoot =
+
+qhp.QtGui.subprojects = classes
+qhp.QtGui.subprojects.classes.title = C++ Classes
+qhp.QtGui.subprojects.classes.indexTitle = Qt GUI C++ Classes
+qhp.QtGui.subprojects.classes.selectors = class fake:headerfile
+qhp.QtGui.subprojects.classes.sortPages = true
+
+tagfile = ../../../doc/qtgui/qtgui.tags
+
+depends += \
+ qtcore \
+ qtnetwork \
+ qtopengl \
+ qtsvg \
+ qtqml \
+ qtquick \
+ qtwidgets \
+ qtdoc
+
+headerdirs += ..
+
+sourcedirs += .. \
+ ../../../examples/gui/doc/src
+
+exampledirs += ../../../examples/gui \
+ snippets
+
+imagedirs += images \
+ ../../../examples/gui/doc/images \
+ ../../../doc/src/images \
diff --git a/src/qdoc/doc/images/happyguy.jpg b/src/qdoc/qdoc/doc/images/happyguy.jpg
index e8604793c..e8604793c 100644
--- a/src/qdoc/doc/images/happyguy.jpg
+++ b/src/qdoc/qdoc/doc/images/happyguy.jpg
Binary files differ
diff --git a/src/qdoc/doc/images/link-to-qquickitem.png b/src/qdoc/qdoc/doc/images/link-to-qquickitem.png
index 00e03c371..00e03c371 100644
--- a/src/qdoc/doc/images/link-to-qquickitem.png
+++ b/src/qdoc/qdoc/doc/images/link-to-qquickitem.png
Binary files differ
diff --git a/src/qdoc/doc/images/links-to-broken-links.png b/src/qdoc/qdoc/doc/images/links-to-broken-links.png
index 775143bd4..775143bd4 100644
--- a/src/qdoc/doc/images/links-to-broken-links.png
+++ b/src/qdoc/qdoc/doc/images/links-to-broken-links.png
Binary files differ
diff --git a/src/qdoc/doc/images/links-to-links.png b/src/qdoc/qdoc/doc/images/links-to-links.png
index 9d2cc2fae..9d2cc2fae 100644
--- a/src/qdoc/doc/images/links-to-links.png
+++ b/src/qdoc/qdoc/doc/images/links-to-links.png
Binary files differ
diff --git a/src/qdoc/qdoc/doc/images/qt-logo.png b/src/qdoc/qdoc/doc/images/qt-logo.png
new file mode 100644
index 000000000..835f5a3fe
--- /dev/null
+++ b/src/qdoc/qdoc/doc/images/qt-logo.png
Binary files differ
diff --git a/src/qdoc/doc/images/training.jpg b/src/qdoc/qdoc/doc/images/training.jpg
index c2ce5c3b2..c2ce5c3b2 100644
--- a/src/qdoc/doc/images/training.jpg
+++ b/src/qdoc/qdoc/doc/images/training.jpg
Binary files differ
diff --git a/src/qdoc/qdoc/doc/images/windows-pushbutton.png b/src/qdoc/qdoc/doc/images/windows-pushbutton.png
new file mode 100644
index 000000000..14528d680
--- /dev/null
+++ b/src/qdoc/qdoc/doc/images/windows-pushbutton.png
Binary files differ
diff --git a/src/qdoc/qdoc/doc/images/windows-toolbutton.png b/src/qdoc/qdoc/doc/images/windows-toolbutton.png
new file mode 100644
index 000000000..9ceb846ed
--- /dev/null
+++ b/src/qdoc/qdoc/doc/images/windows-toolbutton.png
Binary files differ
diff --git a/src/qdoc/qdoc/doc/qdoc-guide/qdoc-guide.qdoc b/src/qdoc/qdoc/doc/qdoc-guide/qdoc-guide.qdoc
new file mode 100644
index 000000000..9bf6aa63a
--- /dev/null
+++ b/src/qdoc/qdoc/doc/qdoc-guide/qdoc-guide.qdoc
@@ -0,0 +1,670 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+/*!
+ \page qdoc-guide.html
+ \title Getting Started with QDoc
+ \nextpage Installing Clang for QDoc
+
+ Qt uses QDoc to generate its documentation set into HTML and DocBook XML
+ formats. QDoc uses a set of configuration files to generate documentation
+ from QDoc comments. The comments have types called
+ \l{writing-topic-commands}{topics} that determine whether a comment is a
+ class documentation or a property documentation. A comment may also have
+ \l{writing-markup}{mark up} to enhance the layout and formatting of the
+ final output.
+
+ There are three essential materials for generating documentation with QDoc:
+ \list
+ \li \c QDoc binary
+ \li \c qdocconf configuration files
+ \li \c Documentation in \c C++, \c QML, and \c .qdoc files
+ \endlist
+
+ \note \l{QDoc Manual}{QDoc} requires \l{http://clang.llvm.org}{Clang}
+ for parsing C++ header and source files, and for parsing the function
+ signatures in \l {fn-command} {\\fn} commands. See \l {Installing Clang for QDoc}
+ for details.
+
+ This section intends to cover the basic necessities for creating a
+ documentation set. Additionally, the guide presents special considerations
+ and options to documenting non-C++ API documentation as well as QML
+ documentation. Finally, the guide will provide a sample project
+ documentation and an example of a QML type documentation.
+
+ For specific QDoc information, consult the
+ \l{QDoc Manual}.
+ \section1 Chapters
+
+ \list 1
+ \li \l{Installing Clang for QDoc}
+ \li \l{Creating QDoc Configuration Files}
+ \li \l{Writing Documentation}
+ \li \l{Categories of Documentation}
+ \list
+ \li \l{C++ Documentation Style}
+ \li \l{QML Documentation Style}
+ \endlist
+ \li \l{How to Resolve QDoc Warnings}
+ \endlist
+
+*/
+
+/*!
+ \page qdoc-guide-conf.html
+ \title Creating QDoc Configuration Files
+ \previouspage Installing Clang for QDoc
+ \nextpage Writing Documentation
+ To generate documentation, QDoc uses configuration files, with the
+ \c qdocconf extension, to store configuration settings.
+
+ The \l{The QDoc Configuration File} article covers the various configuration
+ variables in greater detail.
+
+ \section1 QDoc Configuration Files
+ QDoc's configuration settings can reside in a single \e qdocconf file, but
+ can also be in other qdocconf files. The \c {include(<filepath>)} command
+ allows configuration files to include other configuration files.
+
+ QDoc has two outputs, HTML documentation and documentation in DocBook XML
+ format. The main distinction between the two outputs is that HTML
+ documentation needs to have its HTML styling information in the
+ configuration files. DocBook documentation does not, and a separate process
+ can style the documentation in DocBook at a later time. DocBook therefore
+ more flexible in allowing different styles to apply to the same information.
+
+ To run QDoc, the project configuration file is supplied as an argument.
+ \code
+ qdoc project.qdocconf
+ \endcode
+
+ The project configuration contains information that QDoc uses to create the
+ documentation.
+
+ \section2 Project Information
+
+ QDoc uses the \c project information to generate the documentation.
+ \code
+ project = QDoc Project
+ description = Sample QDoc project
+ \endcode
+
+ \target qdoc-input-output-dir
+ \section2 Input and Output Directories
+
+ Specifying the path to the source directories allow QDoc to find sources and
+ generate documentation.
+
+ \badcode
+ sourcedirs = <path to source code>
+ exampledirs = <path to examples directory>
+ imagedirs = <path to image directory>
+
+ sources.fileextensions = "*.cpp *.qdoc *.mm *.qml"
+ headers.fileextensions = "*.h *.ch *.h++ *.hh *.hpp *.hxx"
+ examples.fileextensions = "*.cpp *.h *.js *.xq *.svg *.xml *.ui *.qhp *.qhcp *.qml"
+ examples.imageextensions = "*.png *.jpeg *.jpg *.gif *.mng"
+ \endcode
+
+ QDoc will process headers and sources from the ones specified in the
+ \c fileextensions variable.
+
+ Likewise, QDoc needs the path to the output directory. The \c outputformats
+ variable determines the type of documentation. These variables should be
+ in separate configuration files to modularize the documentation build.
+ \badcode
+ outputdir = $SAMPLE_PROJECT/doc/html
+ outputformats = HTML
+ \endcode
+
+ QDoc can resolve the paths relative to the qdocconf file as well as
+ environment variables.
+
+ \note During each QDoc run, the output directory is deleted.
+ \section2 Extra Files
+
+ QDoc will output generated documentation into the directory specified in
+ the \l{Input and Output Directories}{output} directory. It is also possible
+ to specify extra files that QDoc should export.
+
+ \badcode
+ HTML.extraimages = extraImage.png \
+ extraImage2.png
+ \endcode
+
+ The \c extraImage.png and the \c extraImage2.png files will be copied to the
+ HTML output directory.
+
+ \section2 Qt Help Framework Configuration
+
+ QDoc will also export a \e {Qt Help Project} file, in a \c qhp file.
+ The qhp file is then used by the \c qhelpgenerator to package the
+ documentation into a \c qch file. Qt Creator and Qt Assistant reads the qch
+ file to display the documentation.
+
+ The \l {Creating Help Project Files} article covers the configuration
+ options.
+
+ \section2 HTML Configuration
+
+ QDoc has an HTML generator that will export a set of documentation into
+ HTML files using various configuration settings. QDoc will place the
+ generated documentation into the directory specified by the \c outputdir
+ variable.
+
+ \badcode
+ outputformats = HTML
+ outputdir = <path to output directory>
+ \endcode
+
+ QDoc needs to know where the styles and templates for generating HTML
+ are located. Typically, the templates directory contains a \c scripts,
+ \c images, and a \c style directory, containing scripts and CSS files.
+
+ The main configuration variables are:
+ \badcode
+ HTML.postheader
+ HTML.postpostheader
+ HTML.postheader
+ HTML.footer
+
+ HTML.headerstyles
+ HTML.stylesheets = template/style/style.css \
+ template/style/style1.css
+
+ HTML.scripts = template/scripts/script.js
+ \endcode
+
+ The \c{HTML.headerstyles} variable inserts the style information into the
+ HTML file and the \c{HTML.stylesheets} specifies which files QDoc should
+ copy into the output directory. In addition, QDoc will embed the string
+ in the \c postheader, \c footer, and related variables into each HTML file.
+
+ The \l {Format-specific Configuration Variables} article outlines the usage
+ of each variable.
+
+ \section2 QDoc Index Files
+
+ Documentation projects can link to targets in other projects by specifying
+ a set of dependencies, or a set of direct paths to index file(s) this
+ project depends on. When QDoc generates documentation for a project,
+ it will also generate an \c .index file containing URLs to each linkable
+ entity in the project. Other projects can then define a dependency to the
+ index file in order to link to the documentation within that project.
+
+ \b {See also}: \l {depends-variable}{depends} and
+ \l {indexes-variable}{indexes}.
+
+ \section1 Macros and Other Configurations
+
+ Macros for substituting HTML characters exist and are helpful for generating
+ specific HTML-valid characters.
+
+ \badcode
+ macro.pi.HTML = "&Pi;"
+ \endcode
+ The snippet code will replace any instances of \c{\\pi} with \c &Pi; in the
+ HTML file, which will appear as the Greek \pi symbol when viewed in
+ browsers.
+
+ \b {See also:} \l {macro-variable}{macro}.
+
+ \section2 QML Additions
+
+ QDoc is able to parse QML files for QDoc comments. QDoc will parse files
+ with the QML extension, \c{.qml}, if the extension type is included in the
+ \l{Input and Output Directories}{fileextensions} variable.
+
+ Also, the generated HTML files can have a prefix and a suffix following the
+ QML module name, specified in the QDoc configuration file.
+ \badcode
+ outputprefixes = QML
+ outputprefixes.QML = uicomponents-
+ outputsuffixes = QML
+ outputsuffixes.QML = -tp
+ \endcode
+
+ \b {See also}: \l {outputprefixes-variable}{outputprefixes},
+ \l {outputsuffixes-variable}{outputsuffixes}.
+
+*/
+
+/*!
+ \page qdoc-guide-writing.html
+ \title Writing Documentation
+ \previouspage Creating QDoc Configuration Files
+ \nextpage Categories of Documentation
+
+ \section1 QDoc Comments
+
+ Documentation is contained within QDoc \e comments, delimited by
+ \beginqdoc and \endqdoc comments. Note that these are valid comments
+ in C++ and QML.
+
+ Within a QDoc comment, \c {//!} is used as a single-line documentation
+ comment; the comment itself and anything after it, until a newline,
+ is omitted from the generated output.
+
+ QDoc will parse C++ and QML files to look for QDoc comments. To explicitly
+ omit a certain file type, omit it from the
+ \l{Input and Output Directories}{configuration} file.
+
+ \section1 QDoc Commands
+
+ QDoc uses \e commands to retrieve information about the documentation. \c
+ Topic commands determine the type of documentation element, the \c context
+ commands provide hints and information about a topic, and \c markup commands
+ provide information on how QDoc should format a piece of documentation.
+
+ \target writing-topic-commands
+ \section2 QDoc Topics
+ Each QDoc comment must have a \e topic type. A topic distinguishes it from
+ other topics. To specify a topic type, use one of the several
+ \l{Topic Commands}{topic commands}.
+
+ QDoc will collect similar topics and create a page for each one. For
+ example, all the enumerations, properties, functions, and class description
+ of a particular C++ class will reside in one page. A generic page is
+ specified using the \l{page-command}{\\page} command and the filename is the
+ argument.
+
+ Example of topic commands:
+ \list
+ \li \l{enum-command}{\\enum} - for enumeration documentation
+ \li \l{class-command}{\\class} - for C++ class documentation
+ \li \l{qmltype-command}{\\qmltype} - for QML type documentation
+ \li \l{page-command}{\\page} - for creating a page.
+ \endlist
+
+ A QDoc comment can contain multiple topic commands in the same category, with
+ some restrictions. This way, it's possible to write a single comment that
+ documents all overloads of a function (using multiple \l {fn-command}{\\fn}
+ commands), or all properties in a QML property group (using
+ \l {qmlproperty-command}{\\qmlproperty} commands) in one go.
+
+ If a QDoc comment contains multiple topic commands, it's possible to
+ provide additional \e {context commands} for individual topics in
+ follow-up comments:
+
+ \badcode *
+ /\1!
+ \qmlproperty string Type::element.name
+ \qmlproperty int Type::element.id
+
+ \brief Holds the element name and id.
+ \1/
+
+ /\1!
+ \qmlproperty int Type::element.id
+ \readonly
+ \1/
+ \endcode
+
+ Here, the follow-up comment marks the \e element.id property as read-only,
+ while \e element.name remains writable.
+
+ \note A follow-up comment cannot contain any additional text, only
+ \l {writing-context}{context commands} that document the context of
+ the item.
+
+ The \l{page-command}{\\page} command is for creating articles that are not
+ part of source documentation. The command can also accept two arguments: the
+ file name of the article and the documentation type. The possible types are:
+ \list
+ \li \c howto
+ \li \c overview
+ \li \c tutorial
+ \li \c faq
+ \li \c attribution - used for documenting license attributions
+ \li \c article - \e default when there is no type
+ \endlist
+
+ \snippet examples/samples.qdocinc sample-faq
+
+ The \l{Topic Commands} page has information on all of the available topic
+ commands.
+
+ \target writing-context
+ \section2 Topic Contexts
+
+ Context commands give QDoc a hint about the \e context of the topic. For
+ example, if a C++ function is deprecated, then it should be marked as such
+ with the \l{deprecated-command}{\\deprecated} command. Likewise,
+ \l{nextpage-command}{page navigation} and \l{title-command}{page title}
+ give extra page information to QDoc.
+
+ QDoc will create additional links or pages for these contexts. For example,
+ a group is created using the \l{group-command}{\\group} command and the
+ members have the \l{ingroup-command}{\\ingroup} command. The group name is
+ supplied as an argument.
+
+ The \l{Context Commands} page has a listing of all the available context
+ commands.
+
+ \target writing-markup
+ \section2 Documentation Markup
+
+ QDoc can do \e markup of text similar to other markup or
+ documentation tools. QDoc can mark a section of text in \b{bold},
+ when the text is marked up with the \l{b-command}{\\b} command.
+
+ \code
+ \b{This} text will be in \b{bold}.
+ \endcode
+
+ The \l{Markup Commands} page has a full listing of the available markup
+ commands.
+
+ \section1 Anatomy of Documentation
+
+ Essentially, for QDoc to create a page, there must be some essential
+ ingredients present.
+
+ \list
+ \li Assign a topic to a QDoc comment - A comment could be a page, a
+ property documentation, a class documentation, or any of the available
+ \l{Topic Commands}{topic commands}.
+
+ \li Give the topic a context - QDoc can associate certain topics to other
+ pages such as associating deprecated functions when the documentation is
+ marked with \l{deprecated-command}{\\deprecated}.
+
+ \li Mark sections of the document with
+ \l{Markup Commands}{markup commands} - QDoc can create layouts and
+ format the documentation for the documentation.
+ \endlist
+
+ In Qt, the \l{QVector3D} class was documented with the following QDoc
+ comment:
+ \snippet examples/samples.qdocinc qvector3d-class
+
+ It has a constructor, \l{QVector3D::QVector3D()}, which was documented with
+ the following QDoc comment:
+ \snippet examples/samples.qdocinc qvector3d-function
+
+ The different comments may reside in different files and QDoc will collect
+ them depending on their topic and their context. The resulting documentation
+ from the snippets are generated into the \l{QVector3D} class documentation.
+
+ Note that if the documentation immediately precedes the function or class
+ in the source code, then it does not need to have a topic. QDoc will assume
+ that the documentation above the code is the documentation for that code.
+
+ An article is created using \l{page-command}{\\page} command. The first
+ argument is the HTML file that QDoc will create. The topic is supplemented
+ with context commands, the \l{title-command}{\\title} and
+ \l{nextpage-command}{\\nextpage} commands. There are several other
+ QDoc commands such as the \l{list-command}{\\list} command.
+ \snippet examples/samples.qdocinc sample-page
+
+ The section on \l{QDoc Topics}{topic commands} gives an overview on several
+ other topic types.
+
+
+*/
+
+/*!
+ \page qdoc-categories.html
+ \title Categories of Documentation
+ \previouspage Writing Documentation
+ \nextpage How to Resolve QDoc Warnings
+ \brief Describes the different types such as How-To's, Tutorials, Overviews,
+ Examples, and Class Documentation.
+
+ There are several types of predefined documentation \e categories or
+ \e types:
+ \list
+ \li How-To's
+ \li Tutorial
+ \li Overview
+ \li Article
+ \li FAQ (Frequently Asked Questions)
+ \li C++ API Documentation
+ \li QML Type Documentation
+ \li Code Example
+ \endlist
+
+ QDoc has the ability to format a page depending on the type. Further,
+ stylesheets can provide additional control on the display of each category.
+
+ \section1 API Documentation
+ QDoc excels in the creation of API documentation given a set of source code
+ and documentation in QDoc comments. Specifically, QDoc is aware of Qt's
+ architecture and can validate the existence of Qt C++ class, function, or
+ property documentation. QDoc gives warnings and errors if it cannot
+ associate a documentation with a code entity or if a code entity does not
+ have documentation.
+
+ In general, every Qt code entity such as properties, classes, methods,
+ signals, and enumerations have a corresponding
+ \l{qdoc-topics}{topic command}. QDoc will associate the documentation to the
+ source using C++ naming rules.
+
+ QDoc will parse the header files (typically \c .h files) to build a tree of
+ the class structures. Then QDoc will parse the source files and
+ documentation files to attach documentation to the class structure.
+ Afterwards, QDoc will generate a page for the class.
+
+ \note QDoc uses the header files to inform itself about the class and will
+ not properly process QDoc comments in header files.
+
+ \section2 Language Styles
+
+ To produce quality API documentation, the Qt API references follow a
+ particular language guidelines. While the contents of this page demonstrates
+ how to create API documentation, the style guidelines demonstrate how
+ the reference materials follow a consistent use of language.
+
+ \list
+ \li \l{C++ Documentation Style}
+ \li \l{QML Documentation Style}
+ \endlist
+
+ \keyword qml-documentation
+ \section2 Documenting QML Types
+
+ In the world of \l{Qt Quick}{QML}, there are additional entities we need to
+ document such as QML signals, attached properties, and QML methods.
+ Internally, they use Qt technologies, however, QML API documentation
+ requires different layout and naming conventions from the Qt C++ API
+ documentation.
+
+ A list of QML related QDoc commands:
+ \list
+ \li \l{qmlattachedproperty-command}{\\qmlattachedproperty}
+ \li \l{qmlattachedsignal-command}{\\qmlattachedsignal}
+ \li \l{qmlvaluetype-command}{\\qmlvaluetype}
+ \li \l{qmltype-command}{\\qmltype} - creates a QML type documentation
+ \li \l{qmlmethod-command}{\\qmlmethod}
+ \li \l{qmlproperty-command}{\\qmlproperty}
+ \li \l{qmlsignal-command}{\\qmlsignal}
+ \li \l{inherits-command}{\\inherits}
+ \li \l{qmlmodule-command}{\\qmlmodule}
+ \li \l{inqmlmodule-command}{\\inqmlmodule}
+ \li \l{instantiates-command}{\\instantiates}
+
+ \endlist
+
+ \note Remember to enable QML parsing by including the \c{*.qml} filetype in
+ the \l{qdoc-input-output-dir}{fileextension} variable.
+
+ To document a QML type, start by creating a QDoc comment that uses the
+ \l{qmltype-command} {\\qmltype} command as its topic command.
+
+ \section3 QML Parser
+
+ 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
+ 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.
+
+ When documenting a QML type in a \e{qml} file, place each QDoc
+ comment directly above the entity to which the comment applies.
+ For example, place the QDoc comment containing the \e{\\qmltype}
+ command (the topic comment) directly above the outer QML type in
+ the \e{qml} file. Place the comment for documenting a QML property
+ directly above the property declaration, and so on for QML signal
+ handlers and QML methods. Note that when documenting QML
+ properties in a \e{qml} file, you don't normally include the
+ \e{\\qmlproperty} command as a topic command (which you must do
+ when documenting QML types in \e{cpp} files), because the QML
+ parser automatically associates each QDoc comment with the next
+ QML declaration it parses. The same is true for QML signal handler
+ and QML method comments. But it is sometimes useful to include one
+ or more \e{\\qmlproperty} commands in the comment, e.g. when the
+ property type is another QML type and you want the user to only
+ use certain properties within that other QML type, but not all of
+ them. But when documenting a property that has an alias, place the
+ QDoc comment for it directly above the alias declaration. In these
+ cases, the QDoc comment \e must contain a \e{\\qmlproperty}
+ command, because that is the only way QDoc can know the type of
+ the aliased property.
+
+ When documenting a QML type in the \e cpp file of its
+ corresponding C++ class (if it has one), you normally place each
+ QDoc comment directly above the entity it documents. However, QDoc
+ does not use the QML parser to parse these files (the C++ parser
+ is used), so these QML QDoc comments can appear anywhere in the
+ \e{cpp} file. Note that QML QDoc comments in \e cpp files \e must
+ use the QML topic commands. i.e., the \l{qmltype-command}
+ {\\qmltype} command \e must appear in the QDoc comment for the
+ QML type, and a \l{qmlproperty-command} {\\qmlproperty} command \e
+ must appear in each QML property QDoc comment.
+
+ \section3 QML Modules
+
+ A QML type belongs to a \e module. The module
+ may include all the related types for a platform or contain a certain
+ version of \l{Qt Quick}. For example, the Qt Quick 2 QML types belong
+ to the Qt Quick 2 module while there is also a Qt Quick 1 module for the older
+ types introduced in Qt 4.
+
+ QML modules allow grouping QML types. The \l{qmltype-command}
+ {\\qmltype} topic command must have an \l{inqmlmodule-command}
+ {\\inqmlmodule} context command to relate the type to a QML
+ module. Similarly, a \l{qmlmodule-command}{\\qmlmodule} topic
+ command must exist in a separate \c{.qdoc} file to create the
+ overview page for the module. The overview page will list the
+ QML types of the QML module.
+
+ The links to the QML types must therefore also contain the module name.
+ For example, if a type called \c TabWidget is in the \c UIComponents
+ module, it must be linked as \c {UIComponents::TabWidget}.
+
+ \section3 Read-only and Internal QML Properties
+
+ QDoc detects QML properties that are marked as \c readonly. Note that the
+ property must be initialized with a value.
+
+ \badcode
+ readonly property int sampleReadOnlyProperty: 0
+ \endcode
+
+ Properties and signals that are not meant for the public interface may
+ be marked with the \l{internal-command}{\\internal} command. QDoc will not
+ publish the documentation in the generated outputs.
+
+ \section1 Articles & Overviews
+
+ Articles and overviews are a style of writing best used for providing
+ summary detail on a topic or concept. It may introduce a technology or
+ discuss how a concept may be applied, but without discussing exact steps
+ in too much detail. However, this type of content could provide the entry
+ point for readers to find instructional and reference materials that do,
+ such as tutorials, examples and class documentation. An example of an
+ overview might be a product page, such as a top level discussion of
+ Qt Quick, individual modules, design principles, or tools.
+
+ To signify that a document is an article, you append the article keyword
+ to the \\page command:
+
+ \snippet examples/samples.qdocinc sample-overview
+
+ The \l{writing-topic-commands}{writing topic commands} section has a listing
+ of the available \\page command arguments.
+
+ \section1 Tutorials, How-To's, FAQ's
+
+ Tutorials, How-To's, and FAQ's are all instructional material, in that they
+ instruct or prescribe to the reader. Tutorials are content designed to guide
+ the reader along a progressive learning path for a concept or technology.
+ How-To's and FAQ's (\e{Frequently Asked Questions}) provide guidance by
+ presenting material in the form of answers to commonly asked topics.
+ How-To's and FAQ's are designed for easy reference and are not necessarily
+ presented in a linear progression.
+
+ To create these types, mark the pages by providing a \c type argument to the
+ \l{page-command}{\\page} command. The \c type argument is the second
+ argument, with the file name being the first.
+ \snippet examples/samples.qdocinc sample-faq
+
+ The \l{writing-topic-commands}{writing topic commands} section has a listing
+ of the available \\page command arguments.
+
+ \section1 Code Examples
+ Examples are an effective way to demonstrate practical usage of a given
+ technology or concept. When it comes to middleware this is usually in the
+ form of an application using simple code and clear explanations of what the
+ code is doing. Any module, API, project, pattern etc. should have at least
+ one good example.
+
+ An example may have an accompanying tutorial. The tutorial instructs and
+ describes the code, while the code example is the code content that users
+ may study. Code examples may have accompanying text that are not in the
+ tutorial.
+
+ QDoc will create a page containing the example code with a description
+ using the \l{example-command}{\\example} command.
+
+ \snippet examples/samples.qdocinc sample-example
+
+ QDoc will use the directory specified in the input
+ \l{Input and Output Directories}{exampledirs} variable to find the Qt
+ Project (\c .pro) file to generate the example files. The generated HTML
+ will have the filename, \c {declarative-ui-components-tabwidget.html}. QDoc
+ will also list all of the example code.
+
+ \note The example's project file must be the same as the
+ directory name.
+*/
+
+
+/*!
+ \page qdoc-guide-clang.html
+ \title Installing Clang for QDoc
+ \previouspage Getting Started with QDoc
+ \nextpage Creating QDoc Configuration Files
+
+ QDoc uses Clang when parsing C++ files as well as function signatures in
+ \l {fn-command} {\\fn} commands. Clang is part of
+ \l {https://llvm.org/}{the LLVM Compiler Infrastructure Project}.
+ If you're going to build QDoc from source, you must install
+ \l{http://clang.llvm.org}{Clang 15.0} or later.
+
+ You can get Clang through various channels:
+
+ \list
+ \li Qt provides the
+ \l{http://download.qt.io/development_releases/prebuilt/libclang/qt}
+ {prebuilt Clang packages} that are used for the Qt binaries in the
+ online installer. These let you link LLVM/Clang libraries statically,
+ but only support Release builds on Windows.
+ \li Linux distributions often provide a package called \e libclang-dev or
+ \e libclang-devel. Qt's build system instructs CMake to look for
+ \e {ClangConfig.cmake}, so make sure you install the package that
+ provides this file if you want to build QDoc. Running QDoc requires
+ only \e libclang.
+ \li On macOS, you can also use Homebrew's
+ \l{https://formulae.brew.sh/formula/llvm}{llvm formula}.
+ \endlist
+
+ \note the prebuilt binaries from \l{http://releases.llvm.org/download.html}
+ cannot be used, as they miss certain components required by QDoc.
+
+ If you install Clang in a custom location you need to tell CMake where
+ to find it. This can be done by specifying your LLVM installation path
+ using the \c LLVM_INSTALL_DIR environment variable when configuring Qt.
+ Alternatively, you can add the installation path to the \c CMAKE_PREFIX_PATH
+ CMake cache variable.
+*/
diff --git a/src/qdoc/qdoc/doc/qdoc-guide/qtwritingstyle-cpp.qdoc b/src/qdoc/qdoc/doc/qdoc-guide/qtwritingstyle-cpp.qdoc
new file mode 100644
index 000000000..43387ca7e
--- /dev/null
+++ b/src/qdoc/qdoc/doc/qdoc-guide/qtwritingstyle-cpp.qdoc
@@ -0,0 +1,163 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+\page qtwritingstyle-cpp.html
+\title C++ Documentation Style
+\brief Style guidelines for C++ documentation
+
+To generate the documentation, QDoc goes through the source code and generates
+documentation for C++ types such as classes. QDoc then associates member
+functions, properties, and other types to the appropriate class.
+
+Note that the documentation must be in the implementation files such as \c .cpp.
+
+\section1 Class Documentation
+
+Class documentation is generated using the \l{class-command}{\\class} command and
+the name of the class as the first argument.
+
+\snippet examples/cpp.qdoc.sample class
+
+\l{Context commands} add information about the class, such as its module or
+which version the class was added.
+
+Some common context commands are:
+\list
+\li \l{brief-command}{\\brief} - the class' brief description \b (mandatory)
+\li \l{since-command}{\\since} - the version to which the class was added \b (mandatory)
+\li \l{internal-command}{\\internal} - marks the class as internal. Internal
+classes do not appear in the public API documentation.
+\endlist
+
+
+\section2 The Brief and Detailed Description
+
+The \e{brief description} is marked with the \l{brief-command}{\\brief} command
+and it is for summarizing the purpose or functionality of the class. For C++
+classes, QDoc will take the class and create annotated information for the
+class. The annotated information appears in lists and tables which display the
+class.
+
+The C++ brief should start with:
+\code
+"The <C++ class name> class"
+\endcode
+
+The \e{detailed description} section starts after the brief description. It
+provides more information about the class. The detailed description may contain
+images, snippet code, or links to other relevant documents. There
+must be an empty line which separates the brief and detailed description.
+
+\section1 Member Functions
+
+Typically, function documentation immediately precedes the implementation of the
+function in the \c .cpp file. For function documentation that is not immediately
+above the implementation, the \l{fn-command}{\\fn} is needed.
+
+\snippet examples/cpp.qdoc.sample function
+
+The function documentation starts with a verb, indicating the operation the
+function performs. This also applies to constructors and destructors.
+
+Some common verbs for function documentation:
+\list
+\li "Constructs..." - for constructors
+\li "Destroys..." - for destructors
+\li "Returns..." - for accessor functions
+\endlist
+
+The function documentation must document:
+\list
+\li the return type
+\li the parameters
+\li the actions of the functions
+\endlist
+
+The \l{a-command}{\\a} command marks the parameter in the documentation.
+The return type documentation should link to the type documentation or be
+marked with the \l{c-command}{\\c} command in the case of boolean values.
+
+\snippet examples/cpp.qdoc.sample return
+
+\section1 Properties
+
+The property documentation resides immediately above the read function's
+implementation. The \l{writing-topic-commands}{topic command} for properties is
+\l{property-command}{\\property}.
+
+\snippet examples/cpp.qdoc.sample property
+
+Property documentation usually starts with "This property...", but these are
+alternate expressions:
+\list
+\li "This property holds..."
+\li "This property describes..."
+\li "This property represents..."
+\li "Returns \c true when... and \c false when..." - for properties that
+are read.
+\li "Sets the..." - for properties that configure a type.
+\endlist
+
+Property documentation must include:
+\list
+\li description and behavior of the property
+\li accepted values for the property
+\li the default value of the property
+\endlist
+Similar to \l{Member Functions}{functions}, the default type may be linked
+or marked with the \c{\c} command.
+
+An example of a value range style is:
+\quotation
+The values range from 0.0 (no blur) to maximumRadius (maximum blur). By default, the property is set to 0.0 (no blur).
+\endquotation
+
+\section1 Signals, Notifiers, and Slots
+The \l{writing-topic-commands}{topic command} for signals, notifiers, and slots
+is \l{fn-command}{\\fn}. Signal documentation state when they are triggered
+or emitted.
+
+\snippet examples/cpp.qdoc.sample signals
+
+Signal documentation typically begin with "This signal is triggered when...".
+Here are alternate styles:
+\list
+\li "This signal is triggered when..."
+\li "Triggered when..."
+\li "Emitted when..."
+\endlist
+
+For slots or notifiers, the condition when they are executed or triggered by
+a signal should be documented.
+\list
+\li "Executed when..."
+\li "This slot is executed when..."
+\endlist
+
+For properties that have overloaded signals, QDoc groups the overloaded
+notifiers together. To refer to a specific version of a notifier or signal,
+simply refer to the property and mention that there are different versions of
+the notifier.
+
+\snippet examples/cpp.qdoc.sample overloaded notifier
+
+\section1 Enums, Namespaces, and Other Types
+
+Enums, namespaces, and macros have a \l{writing-topic-commands}{topic command} for their documentation:
+\list
+\li \l{enum-command}{\\enum}
+\li \l{typedef-command}{\\typedef}
+\li \l{macro-command}{\\macro}
+\endlist
+
+The language style for these types mention that they are an enum or a macro and
+continues with the type description.
+
+For enumerations, the \l{value-command}{\\value} command is for listing the
+values. QDoc creates a table of values for the enum.
+
+\snippet examples/cpp.qdoc.sample enums
+
+*/
+
diff --git a/src/qdoc/qdoc/doc/qdoc-guide/qtwritingstyle-qml.qdoc b/src/qdoc/qdoc/doc/qdoc-guide/qtwritingstyle-qml.qdoc
new file mode 100644
index 000000000..cbf76b175
--- /dev/null
+++ b/src/qdoc/qdoc/doc/qdoc-guide/qtwritingstyle-qml.qdoc
@@ -0,0 +1,142 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+\page qtwritingstyle-qml.html
+\title QML Documentation Style
+\brief Style guidelines for QML documentation
+
+QDoc can process QML types defined as C++ classes and QML types defined in
+\c .qml files. For C++ classes documented as QML types, the QDoc comments are
+in the \c .cpp file while QML types defined in QML are in the \c .qml
+file. The C++ classes must also be documented
+documented with the QML \l{topic-commands}{topic commands}:
+
+\list
+\li \l{qmlattachedproperty-command}{\\qmlattachedproperty}
+\li \l{qmlattachedsignal-command}{\\qmlattachedsignal}
+\li \l{qmlvaluetype-command}{\\qmlvaluetype}
+\li \l{qmltype-command}{\\qmltype}
+\li \l{qmlmethod-command}{\\qmlmethod}
+\li \l{qmlproperty-command}{\\qmlproperty}
+\li \l{qmlsignal-command}{\\qmlsignal}
+\li \l{qmlmodule-command}{\\qmlmodule}
+\li \l{inqmlmodule-command}{\\inqmlmodule}
+\li \l{instantiates-command}{\\instantiates}
+\endlist
+
+For QML types defined in \c .qml files, QDoc will parse the QML and determine
+the properties, signals, and the type within the QML definition. The QDoc
+block then needs to be immediately above the declaration. For QML types
+implemented in C++, QDoc will output warnings if the C++ class documentation
+does not exist. The class documentation may be marked as
+\l{internal-command}{internal} if it is not a public API.
+
+\section1 QML Types
+
+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
+implements the QML type as the argument. For types implemented in QML, this
+is not needed.
+
+The \e{brief description} provides a summary for the QML type. The brief does
+not need to be a complete sentence and may start with a verb. QDoc will append
+the brief description onto the QML type in tables and generated lists.
+
+\code
+\qmltype ColorAnimation
+\brief Animates changes in color values
+\endcode
+
+Here are some alternate verbs for the brief statement:
+\list
+\li "Provides..."
+\li "Specifies..."
+\li "Describes..."
+\endlist
+
+The \e{detailed description} follows the brief and may contain images, snippet,
+and link to other documentation.
+
+\section1 Properties
+
+The property description focuses on what the property \e does and may use the
+following style:
+
+Property documentation usually starts with "This property..." but for certain
+properties, these are the common expressions:
+\list
+\li "This property holds..."
+\li "This property describes..."
+\li "This property represents..."
+\li "Returns \c true when... and \c false when..." - for properties that
+are marked \c{read-only}.
+\li "Sets the..." - for properties that configure a type.
+\endlist
+
+\section1 Signals and Handlers Documentation
+
+QML signals are documented either in the QML file or in the C++ implementation
+with the \l{qmlsignal-command}{\\qmlsignal} command. Signal documentation
+must include the condition for emitting the signal, mention the corresponding
+signal handler, and document whether the signal accepts a parameter.
+
+\snippet examples/qml.qdoc.sample signals
+
+These are the possible documentation styles for signals:
+\list
+\li "This signal is triggered when..."
+\li "Triggered when..."
+\li "Emitted when..."
+\endlist
+
+\section1 Methods and QML Functions
+
+Typically, function documentation immediately precedes the implementation of the
+function in the \c .cpp file. The \l{topic-commands}{topic command} for
+functions is \l{fn-command}{\\fn}. For functions in QML, the
+documentation must reside immediately above the function declaration.
+
+The function documentation starts with a verb, indicating the operation the
+function performs.
+
+\snippet examples/qml.qdoc.sample function
+
+Some common verbs for function documentation:
+\list
+\li "Copies..." - for constructors
+\li "Destroys..." - for destructors
+\li "Returns..." - for accessor functions
+\endlist
+
+The function documentation must document:
+\list
+\li the return type
+\li the parameters
+\li the actions of the functions
+\endlist
+
+The \l{a-command}{\\a} command marks the parameter in the documentation.
+The return type documentation should link to the type documentation or be
+marked with the \l{c-command}{\\c} command in the case of boolean values.
+
+\section1 Enumerations
+
+QML enumerations are documented as QML properties with the
+\l{qmlproperty-command}{\\qmlproperty} command. The type of the property
+is \c enumeration. Use the \l{value-command}{\\value} command to document
+the enum values. Add the type name as a prefix to each value, separated by
+a period (.), as QDoc does not do this automatically.
+
+\snippet examples/qml.qdoc.sample enums
+
+The QDoc comment lists the values of the enumeration. If the enumeration is
+implemented in C++, the documentation may link to the corresponding C++
+enumeration. However, the QDoc comment should advise that the enumeration
+is a C++ enumeration.
+
+*/
+
diff --git a/src/qdoc/qdoc/doc/qdoc-manual-cmdindex.qdoc b/src/qdoc/qdoc/doc/qdoc-manual-cmdindex.qdoc
new file mode 100644
index 000000000..fcab7f316
--- /dev/null
+++ b/src/qdoc/qdoc/doc/qdoc-manual-cmdindex.qdoc
@@ -0,0 +1,141 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page 27-qdoc-commands-alphabetical.html
+ \previouspage Introduction to QDoc
+ \nextpage Topic Commands
+
+ \title Command Index
+
+ This is a complete, alphabetized list of the QDoc commands.
+
+ \list
+
+ \li \l {a-command} {\\a}
+ \li \l {abstract-command} {\\abstract}
+ \li \l {annotatedlist-command} {\\annotatedlist}
+ \li \l {attribution-command} {\\attribution}
+ \li \l {b-command} {\\b}
+ \li \l {badcode-command} {\\badcode}
+ \li \l {b-command} {\\bold} (deprecated, use \\b)
+ \li \l {br-command} {\\br}
+ \li \l {brief-command} {\\brief}
+ \li \l {c-command} {\\c}
+ \li \l {caption-command} {\\caption}
+ \li \l {class-command} {\\class}
+ \li \l {code-command} {\\code}
+ \li \l {codeline-command} {\\codeline}
+ \li \l {compares-command} {\\compares}
+ \li \l {compareswith-command} {\\compareswith}
+ \li \l {deprecated-command} {\\deprecated}
+ \li \l {default-command} {\\default}
+ \li \l {details-command} {\\details}
+ \li \l {div-command} {\\div}
+ \li \l {dots-command} {\\dots}
+ \li \l {e-command} {\\e}
+ \li \l {else-command} {\\else}
+ \li \l {endif-command} {\\endif}
+ \li \l {enum-command} {\\enum}
+ \li \l {example-command} {\\example}
+ \li \l {externalpage-command} {\\externalpage}
+ \li \l {fn-command} {\\fn}
+ \li \l {footnote-command} {\\footnote}
+ \li \l {generatelist-command} {\\generatelist}
+ \li \l {group-command} {\\group}
+ \li \l {header-command} {\\header}
+ \li \l {headerfile-command} {\\headerfile}
+ \li \l {e-command} {\\i} (deprecated, use \\e)
+ \li \l {if-command} {\\if}
+ \li \l {image-command} {\\image}
+ \li \l {include-command} {\\include}
+ \li \l {ingroup-command} {\\ingroup}
+ \li \l {inheaderfile-command}{\\inheaderfile}
+ \li \l {inherits-command}{\\inherits}
+ \li \l {inlineimage-command} {\\inlineimage}
+ \li \l {inmodule-command} {\\inmodule}
+ \li \l {inqmlmodule-command} {\\inqmlmodule}
+ \li \l {instantiates-command} {\\instantiates}
+ \li \l {internal-command} {\\internal}
+ \li \l {keyword-command} {\\keyword}
+ \li \l {l-command} {\\l}
+ \li \l {legalese-command} {\\legalese}
+ \li \l {li-command} {\\li}
+ \li \l {list-command} {\\list}
+ \li \l {macro-command} {\\macro}
+ \li \l {meta-command} {\\meta}
+ \li \l {module-command} {\\module}
+ \li \l {modulestate-command} {\\modulestate}
+ \li \l {namespace-command} {\\namespace}
+ \li \l {nextpage-command} {\\nextpage}
+ \li \l {noautolist-command} {\\noautolist}
+ \li \l {nonreentrant-command} {\\nonreentrant}
+ \li \l {note-command} {\\note}
+ \li \l {li-command} {\\o} (deprecated, use \\li)
+ \li \l {omit-command} {\\omit}
+ \li \l {omitvalue-command} {\\omitvalue}
+ \li \l {overload-command} {\\overload}
+ \li \l {page-command} {\\page}
+ \li \l {preliminary-command} {\\preliminary}
+ \li \l {previouspage-command} {\\previouspage}
+ \li \l {printline-command} {\\printline}
+ \li \l {printto-command} {\\printto}
+ \li \l {printuntil-command} {\\printuntil}
+ \li \l {property-command} {\\property}
+ \li \l {qml-command} {\\qml}
+ \li \l {qmlabstract-command} {\\qmlabstract}
+ \li \l {qmlattachedproperty-command} {\\qmlattachedproperty}
+ \li \l {qmlattachedsignal-command} {\\qmlattachedsignal}
+ \li \l {qmlvaluetype-command} {\\qmlvaluetype}
+ \li \l {qmlclass-command} {\\qmlclass} (deprecated, use \\qmltype)
+ \li \l {qmldefault-command} {\\qmldefault}
+ \li \qdoccmd qmlenumeratorsfrom
+ \li \l {qmltype-command} {\\qmltype}
+ \li \l {qmlmethod-command} {\\qmlmethod}
+ \li \l {qmlproperty-command} {\\qmlproperty}
+ \li \l {qmlsignal-command} {\\qmlsignal}
+ \li \l {qmlmodule-command} {\\qmlmodule}
+ \li \l {qtcmakepackage-command} {\\qtcmakepackage}
+ \li \l {qtcmaketargetitem-command} {\\qtcmaketargetitem}
+ \li \l {quotation-command} {\\quotation}
+ \li \l {quotefile-command} {\\quotefile}
+ \li \l {quotefromfile-command} {\\quotefromfile}
+ \li \l {raw-command} {\\raw}
+ \li \l {readonly-command} {\\readonly}
+ \li \l {reentrant-command} {\\reentrant}
+ \li \l {reimp-command} {\\reimp}
+ \li \l {relates-command} {\\relates}
+ \li \l {required-command} {\\required}
+ \li \l {row-command} {\\row}
+ \li \l {sa-command} {\\sa}
+ \li \l {sectionOne-command} {\\section1}
+ \li \l {sectionTwo-command} {\\section2}
+ \li \l {sectionThree-command} {\\section3}
+ \li \l {sectionFour-command} {\\section4}
+ \li \l {since-command} {\\since}
+ \li \l {sincelist-command} {\\sincelist}
+ \li \l {skipline-command} {\\skipline}
+ \li \l {skipto-command} {\\skipto}
+ \li \l {skipuntil-command} {\\skipuntil}
+ \li \l {snippet-command} {\\snippet}
+ \li \l {span-command} {\\span}
+ \li \l {startpage-command} {\\startpage}
+ \li \l {sub-command} {\\sub}
+ \li \l {subtitle-command} {\\subtitle}
+ \li \l {sup-command} {\\sup}
+ \li \l {table-command} {\\table}
+ \li \l {tableofcontents-command} {\\tableofcontents}
+ \li \l {target-command} {\\target}
+ \li \l {threadsafe-command} {\\threadsafe}
+ \li \l {title-command} {\\title}
+ \li \l {tt-command} {\\tt}
+ \li \l {typealias-command} {\\typealias}
+ \li \l {typedef-command} {\\typedef}
+ \li \l {uicontrol-command} {\\uicontrol}
+ \li \l {underline-command} {\\underline}
+ \li \l {variable-command} {\\variable}
+ \li \l {value-command} {\\value}
+ \li \l {warning-command} {\\warning}
+ \li \l {wrapper-command} {\\wrapper}
+ \endlist
+*/
diff --git a/src/qdoc/qdoc/doc/qdoc-manual-contextcmds.qdoc b/src/qdoc/qdoc/doc/qdoc-manual-contextcmds.qdoc
new file mode 100644
index 000000000..bc5e36532
--- /dev/null
+++ b/src/qdoc/qdoc/doc/qdoc-manual-contextcmds.qdoc
@@ -0,0 +1,1002 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page 14-qdoc-commands-contextcommands.html
+ \previouspage Topic Commands
+ \nextpage Document Navigation
+
+ \title Context Commands
+
+ The context commands provide information about the element being
+ documented that QDoc can't deduce on its own. For example:
+ \list
+ \li Is this class thread-safe?
+ \li Is this function reentrant?
+ \li Of which module is this class a member?
+ \li Which include statement is needed to use this class?
+ \endlist
+
+ Context commands can appear anywhere in a QDoc comment,
+ but they are normally placed near the top of the comment, just
+ below the \l {Topic Commands} {topic} command.
+
+ \list
+ \li \l {abstract-command} {\\abstract}
+ \li \l {attribution-command} {\\attribution}
+ \li \l {compares-command}{\\compares} (Since QDoc 6.7)
+ \li \l {compareswith-command}{\\compareswith} (Since QDoc 6.7)
+ \li \l {default-command} {\\default}
+ \li \l {deprecated-command}{\\deprecated}
+ \li \l {ingroup-command}{\\ingroup}
+ \li \l {inheaderfile-command}{\\inheaderfile}
+ \li \l {inherits-command}{\\inherits}
+ \li \l {inmodule-command}{\\inmodule}
+ \li \l {internal-command}{\\internal}
+ \li \l {modulestate-command} {\\modulestate} (Since QDoc 6.5)
+ \li \l {nextpage-command}{\\nextpage}
+ \li \l {nonreentrant-command}{\\nonreentrant}
+ \li \l {overload-command}{\\overload}
+ \li \l {preliminary-command}{\\preliminary}
+ \li \l {previouspage-command}{\\previouspage}
+ \li \l {qmlabstract-command} {\\qmlabstract}
+ \li \l {qmldefault-command} {\\qmldefault}
+ \li \qdoccmd qmlenumeratorsfrom (Since QDoc 6.8)
+ \li \l {qtcmakepackage-command} {\\qtcmakepackage}
+ \li \l {qtcmaketargetitem-command} {\\qtcmaketargetitem}
+ \li \l {readonly-command} {\\readonly}
+ \li \l {reentrant-command}{\\reentrant}
+ \li \l {reimp-command}{\\reimp}
+ \li \l {relates-command}{\\relates}
+ \li \l {required-command} {\\required}
+ \li \l {since-command}{\\since}
+ \li \l {startpage-command}{\\startpage}
+ \li \l {subtitle-command}{\\subtitle}
+ \li \l {threadsafe-command}{\\threadsafe}
+ \li \l {title-command}{\\title}
+ \li \l {wrapper-command}{\\wrapper}
+ \endlist
+
+*/
+
+/*!
+ \page 15-qdoc-commands-navigation.html
+ \previouspage Context Commands
+ \nextpage Status
+
+ \title Document Navigation
+
+ The navigation commands are for linking the pages of a document in
+ a meaningful sequence. Below is a sequence of QDoc comments that
+ shows a typical use of the navigation commands.
+
+ \section1 Example
+ \quotefile files/basicqt.qdoc.sample
+
+ The \l {startpage-command} {\\startpage} command creates a link to
+ the page the author wants as the first page of a multipage document.
+
+ The link is included in the generated HTML source code but has no
+ visual effect on the documentation:
+
+ \code
+ <head>
+ ...
+ <link rel="start" href="basicqt.html" />
+ ...
+ </head>
+ \endcode
+
+ \section1 Commands
+
+ \target previouspage-command
+ \section2 \\previouspage
+
+ The \\previouspage command links the current page to the previous
+ page in a sequence. The command has two arguments, each enclosed
+ by curly braces: the first is the link target (the title of
+ the previous page), the second is the link text. If the page's
+ title is equivalent to the link text, the second argument can be
+ omitted.
+
+ The command must stand alone on its own line.
+
+ \target nextpage-command
+ \section2 \\nextpage
+
+ The \\nextpage command links the current page to the next page in
+ a sequence. The command follows the same syntax and argument
+ convention as the \l {previouspage-command} {\\previouspage}
+ command.
+
+ \target startpage-command
+ \section2 \\startpage
+
+ The \\startpage command specifies the first page of a sequence of
+ pages. The command must stand alone on its own line, and its
+ unique argument is the title of the first document.
+
+ QDoc will generate a link to the start page and include it in the
+ generated HTML file, but this has no visual effect on the
+ documentation. The generated link type tells browsers and search
+ engines which document is considered by the author to be the
+ starting point of the collection.
+*/
+
+/*!
+ \page 16-qdoc-commands-status.html
+ \previouspage Document Navigation
+ \nextpage Thread Support
+
+ \title Status
+
+ These commands are for indicating that a documented element has
+ some special status. The element could be marked \e deprecated,
+ that is, it's about to be made obsolete and no longer included
+ in the public interface. The \l {since-command}{\\since} command
+ is for specifying the version number in which a function or class
+ first appeared. The \l {qmlabstract-command} {\\qmlabstract} command
+ is for marking a QML type as an abstract base class.
+
+ \target abstract-command
+ \target qmlabstract-command
+ \section1 \\abstract and \\qmlabstract
+
+ \\abstract is a synonym for the \\qmlabstract command. Add this
+ command to the \l {qmltype-command} {\\qmltype} comment for a QML
+ type when that type is meant to be used \e {only} as an abstract
+ base type. When a QML type is abstract, it means that the QML type
+ that can't be instantiated. Instead, the properties in its public
+ API are included in the public properties list on the reference
+ page for each QML type that inherits the abstract QML type. The
+ properties are documented as if they are properties of the
+ inheriting QML type.
+
+ Normally, when a QML type is marked with \e{\\qmlabstract}, it is
+ also marked with \e{\\internal} so that its reference page is not
+ generated. It the abstract QML type is not marked internal, it
+ will have a reference page in the documentation.
+
+ \target attribution-command
+ \section1 \\attribution
+
+ The \\attribution command marks a documented \qdoccmd page as license
+ attribution documentation.
+
+ The \l {annotatedattributions} {\\generatelist annotatedattributions}
+ command generates an annotated list of all license attribution pages
+ in the documentation project.
+
+ \target default-command
+ \section1 \\default
+
+ The \\default command is used for documenting a default value for
+ a QML property. The command takes a single argument, which is
+ displayed in the documentation as the default value.
+
+ \badcode *
+ /\1!
+ \qmlproperty real Item::x
+ \default 0.0
+ \1/
+ \endcode
+
+ If the default value is a non-empty string, use quotes:
+
+ \badcode *
+ /\1!
+ \qmlproperty string Item::state
+ \default "invalid"
+ \1/
+ \endcode
+
+ \target compares-command
+ \section2 \\compares
+
+ Use the \c {\compares} command to describe the comparison results for the
+ documented C++ type when compared to itself. You must use this command in
+ conjunction with the \l {class-command}{\\class} command.
+
+ \c {\compares} takes one of the following arguments:
+
+ //! [comparison-categories]
+ \list
+ \li \c strong
+ \li \c partial
+ \li \c weak
+ \li \c equality
+ \endlist
+
+ \c {strong}, \c {partial}, and \c {weak} relate to the ordering.
+ \c {equality} means that the type is only compared for equality.
+ //! [comparison-categories]
+
+ This command was introduced to QDoc with Qt 6.7.
+
+ See also \l {compareswith-command}{\\compareswith}.
+
+ \target compareswith-command
+ \section1 \\compareswith
+
+ Use the \c {\compareswith .. \endcompareswith} pair of commands to
+ describe the comparison results for the documented C++ type when
+ compared to other types. \c {\compareswith} takes two or more
+ arguments: a comparison category, followed by a type name, or a
+ space-separated list of type names. Any text lines between
+ \c {\compareswith} and \c {\endcompareswith} commands are
+ considered further details that apply to all types subject
+ to the comparison category argument.
+
+ Types that have one or more space in their name, such as
+ \c{unsigned long}, should be enclosed in braces.
+
+ For example:
+
+ \badcode *
+ /\1!
+ ...
+ \compareswith strong int long {unsigned long} {unsigned int} char
+ ...
+ \endcompareswith
+ ...
+ \1/
+ \endcode
+
+ Argument enclosed in braces have their leading and trailing whitespaces
+ removed.
+ For example, \c{unsigned long} and \c{ unsigned long } are equivalent.
+
+ The comparison category argument must be one of the following:
+ \include qdoc-manual-contextcmds.qdoc comparison-categories
+
+ This command was introduced to QDoc with Qt 6.7.
+
+ See also \l {compares-command}{\\compares}.
+
+ \target qmldefault-command
+ \section1 \\qmldefault
+
+ The \\qmldefault command is for marking a QML property as the
+ \l {default-properties}
+ {default property}. The word \c default is displayed in
+ the documentation of the property.
+
+ \badcode *
+ /\1!
+ \qmlproperty list<Change> State::changes
+ This property holds the changes to apply for this state.
+ \qmldefault
+
+ By default, these changes are applied against the default state. If the state
+ extends another state, then the changes are applied against the state being
+ extended.
+ \1/
+ \endcode
+
+ See how QDoc renders this property on the reference page for the
+ \l {QtQuick::State::changes}{State} type.
+
+ \target qmlenumeratorsfrom-command
+ \section1 \\qmlenenumeratorsfrom
+
+ Use the \\qmlenumeratorsfrom command in a \qdoccmd qmlproperty topic
+ with a property type \e enumeration, to automatically replicate the
+ documentation for enumerators from a C++ \qdoccmd enum topic.
+
+ The command takes a fully qualified C++ enum as an argument,
+ and generates a list of enumerators and their descriptions.
+
+ \note The C++ enum must be documented in the same project; QDoc
+ cannot access its documentation if it's part of an external
+ documentation set that the current project \qdocvar depends
+ on.
+
+ By default, each enumerator is prefixed with the type name the
+ property belongs to, with \c{.} as the separator.
+
+ For example:
+
+ \badcode *
+ /\1!
+ \qmlproperty enumeration QtMultimedia::Camera::error
+ \qmlenumeratorsfrom QCamera::Error
+
+ //! Outputs documentation for 'Camera.NoError', 'Camera.CameraError'
+ \1/
+ \endcode
+
+ If the enumerators are registered to QML under a different type
+ name, this name (prefix) can be specified using the optional
+ argument in square brackets:
+
+ \badcode
+ \qmlenumeratorsfrom [Errors] QCamera::Error
+
+ //! Outputs documentation for 'Errors.NoError', 'Errors.CameraError'
+ \1/
+ \endcode
+
+ This command was introduced in QDoc 6.8.
+
+ See also \qdoccmd {qmlproperty}, \qdoccmd {enum}, and \qdoccmd {value}.
+
+ \target dontdocument-command
+ \section1 \\dontdocument
+
+ The \\dontdocument command is only used in a dontdocument.qdoc file
+ for a particular module. This file specifies publically declared
+ classes or structs that are not meant to be documented. QDoc will
+ not print warnings about missing \\class comments for these classes
+ and structs.
+
+ Below you will find the \\dontdocument command in the
+ dontdocument.qdoc for widgets:
+
+ \badcode *
+ /\1!
+ \dontdocument (QTypeInfo QMetaTypeId)
+ \1/
+ \endcode
+
+ \target inheaderfile-command
+ \section1 \\inheaderfile
+
+ The \\inheaderfile meta-command is used for overriding the include statement
+ generated for a C++ class, namespace, or header file reference documentation.
+
+ By default, QDoc documents a \c {\class SomeClass} to be available with
+ a following include statement:
+
+ \code
+ #include <SomeClass>
+ \endcode
+
+ If the actual include statement differs from the default, this can be
+ documented as
+
+ \badcode
+ \class SomeClass
+ \inheaderfile Tools/SomeClass
+ ...
+ \endcode
+
+ See also \l {class-command}{\\class} and
+ \l {headerfile-command}{\\headerfile}.
+
+
+ \target obsolete-command
+ \section1 \\obsolete
+ The \\obsolete command is superceded by the \\deprecated command.
+
+ This command is kept for backwards compatibility reasons only.
+ It may be removed in a future version of QDoc. Use the \\deprecated
+ command instead.
+
+ See also \l {deprecated-command}{\\deprecated}.
+
+ \target deprecated-command
+ \section1 \\deprecated
+
+ The \\deprecated command is for indicating that a function is being
+ deprecated, and that it should no longer be used in new code. There
+ is no guarantee for how long it will remain in the library.
+
+ The \\deprecated command takes two optional arguments:
+ \list
+ \li A version in square brackets (e.g. [6.2]).
+ \li A string with more information, for example a suggested
+ replacement.
+ \endlist
+
+ When generating the reference documentation for a class, QDoc will
+ create and link to a separate page documenting its deprecated
+ functions. It is good practice to suggest an equivalent function
+ as an alternative.
+
+ \badcode *
+ /\1!
+ \fn MyClass::MyDeprecatedFunction
+ \deprecated [6.2] Use MyNewFunction() instead.
+ \1/
+ \endcode
+
+ \target internal-command
+ \section1 \\internal
+
+ The \\internal command indicates that the referenced
+ function is not part of the public interface.
+
+ The command must stand on its own line.
+
+ QDoc ignores the documentation as well as the documented item,
+ when generating the associated class reference documentation.
+
+ \badcode *
+ /\1!
+ \internal
+
+ Tries to find the decimal separator. If it can't find
+ it and the thousand delimiter is != '.' it will try to
+ find a '.';
+ \1/
+ int QDoubleSpinBoxPrivate::findDelimiter
+ (const QString &str, int index) const
+ {
+ int dotindex = str.indexOf(delimiter, index);
+ if (dotindex == -1 && thousand != dot && delimiter != dot)
+ dotindex = str.indexOf(dot, index);
+ return dotindex;
+ }
+ \endcode
+
+ This function will not be included in the documentation, unless QDoc
+ is called with the \c{-showinternal} command line option or the
+ \c{QDOC_SHOW_INTERNAL} environment variable is set.
+
+ \target modulestate-command
+ \section1 \\modulestate
+
+ The \\modulestate command can be used within a \\module or \\qmlmodule
+ topic to provide a module state description other than \e preliminary or
+ \e deprecated.
+
+ Rest of the line is taken as an argument that describes the module's
+ state. For example:
+
+ \badcode *
+ /*!
+ \module QtFoo
+ \modulestate Technical Preview
+ \1/
+ \endcode
+
+ QDoc will then add this information on the module page:
+
+ \quotation
+ This module is in \e {Technical Preview} state.
+ \endquotation
+
+ In HTML output, this state information appears also in the navigation
+ bar (breadcrumbs) of reference pages for the module's members.
+
+ \target preliminary-command
+ \section1 \\preliminary
+
+ The \\preliminary command is for indicating that a referenced
+ function is still under development.
+
+ The command must stand on its own line.
+
+ The \\preliminary command expands to a notification in the
+ function documentation, and marks the function as preliminary when
+ it appears in lists.
+
+ \badcode *
+ /\1!
+ \preliminary
+
+ Returns information about the joining type attributes of the
+ character (needed for certain languages such as Arabic or
+ Syriac).
+
+ \1/
+ QChar::JoiningType QChar::joiningType() const
+ {
+ return QChar::joiningType(ucs);
+ }
+ \endcode
+
+ \target readonly-command
+ \section1 \\readonly
+
+ The \\readonly command is used in conjunction with a \l {qmlproperty-command}
+ {\\qmlproperty} command to mark the QML property as read-only.
+
+ \target required-command
+ \section1 \\required
+
+ The \\required command is used in conjunction with a \l {qmlproperty-command}
+ {\\qmlproperty} command to mark the QML property as required.
+
+ \b {See also} \l {The Property System}.
+
+ \target since-command
+ \section1 \\since
+
+ The \\since command tells in which minor release
+ the associated functionality was added.
+
+ If the argument passed to \\since contains no spaces, it is assumed to be
+ a version number string for the Qt project, and QDoc will prefix it with
+ 'Qt' in the generated output. The argument can also contain the project
+ name explicitly:
+
+ \badcode
+ \since MyFramework 2.0
+ \endcode
+
+ In this case, the arguments (project and version) are used as is.
+
+ \section2 Inheritance of Since Information
+
+ Since QDoc version 6.5, C++ classes and QML types inherit the \\since statement
+ from their respective \l {module-command}{module} or \l {qmlmodule-command}
+ {QML module}, unless \\since is explicitly used in the type documentation.
+
+ \section2 Since Clause
+
+ The \\value command allows an optional \e {since} clause, enclosed in square
+ brackets, to immediately follow the command string. This is used for
+ marking specific C++ enum values with since information.
+
+ See also \l {value-command}{\\value} and \l {ignoresince}.
+
+ \target wrapper-command
+ \section1 \\wrapper
+
+ The \\wrapper command, when used in a C++ class documentation, marks the
+ class as a \e wrapper that provides access to a non-Qt API. This command
+ is used for suppressing warnings that might otherwise be generated for
+ members of such a class.
+*/
+
+
+/*!
+ \page 17-qdoc-commands-thread.html
+ \previouspage Status
+ \nextpage Relating Things
+
+ \title Thread Support
+
+ The thread support commands are for specifying the level of
+ support for multithreaded programming in a class or function.
+ There are three levels of support: \c threadsafe, \c reentrant and
+ \c nonreentrant.
+
+ The default is \c nonreentrant which means that the associated
+ class or function cannot be called by multiple threads. \c
+ Reentrant and \c threadsafe are levels primarily used for classes.
+
+ \c Reentrant means that all the functions in the referenced class
+ can be called simultaneously by multiple threads, provided that
+ each invocation of the functions reference unique data. While \c
+ threadsafe means that all the functions in the referenced class
+ can be called simultaneously by multiple threads even when each
+ invocation references shared data.
+
+ When a class is marked \l {reentrant-command} {\\reentrant} or \l
+ {threadsafe-command} {\\threadsafe}, functions in that class can
+ be marked \c nonreentrant using the \l {nonreentrant-command}
+ {\\nonreentrant} command.
+
+ \section1 Example
+
+ \target reentrant-example
+ \badcode *
+ /\1!
+ \class QLocale
+ \brief The QLocale class converts between numbers and their
+ string representations in various languages.
+
+ \reentrant
+ \ingroup i18n
+ \ingroup text
+
+ QLocale is initialized with a language/country pair in its
+ constructor and offers number-to-string and string-to-number
+ conversion functions similar to those in QString.
+
+ ...
+
+ \nonreentrant
+
+ Sets the global default locale to \a locale. These values are
+ used when a QLocale object is constructed with no
+ arguments. If this function is not called, the system's locale
+ is used.
+
+ \warning In a multithreaded application, the default locale
+ should be set at application startup, before any non-GUI
+ threads are created.
+
+ \sa system(), c()
+ \1/
+ void QLocale::setDefault(const QLocale &locale)
+ {
+ default_d = locale.d;
+ }
+ \endcode
+
+ QDoc generates a notification when a class is
+ declared reentrant, and lists the exceptions (the declared
+ nonreentrant functions). A link to the general documentation on \l
+ {17-qdoc-commands-thread.html#reentrant} {reentrancy and thread-safety} is
+ included. In addition a warning, "\b Warning: This function is
+ not reentrant.", is generated in the nonreentrant functions'
+ documentation.
+
+ QDoc will generate the same notification and warnings when a class
+ is declared threadsafe.
+
+ For more information see the general documentation on \l
+ {17-qdoc-commands-thread.html#reentrant} {reentrancy and thread-safety}.
+
+ \section1 Commands
+
+ \target threadsafe-command
+ \section2 \\threadsafe
+
+ The \\threadsafe command includes a line in the documentation to
+ indicate that the associated class or function is \e threadsafe
+ and can be called simultaneously by multiple threads, even when
+ separate invocations reference shared data.
+
+ The command must stand on its own line.
+
+ The documentation generated from this command will be similar to
+ the what is generated for the \l {reentrant-command} {\\reentrant}
+ command. See the example above in the \l {reentrant-example}
+ {introduction}.
+
+ See also \l{reentrant-command} {\\reentrant} and
+ \l{nonreentrant-command} {\\nonreentrant}.
+
+ \target reentrant-command
+ \section2 \\reentrant
+
+ The \\reentrant command indicates that the associated class or
+ function can be called simultaneously by multiple threads,
+ provided that each invocation references its own data. See the \l
+ {reentrant-example} {example} above.
+
+ The command must stand on its own line.
+
+ See also \l{nonreentrant-command} {\\nonreentrant} and
+ \l{threadsafe-command} {\\threadsafe}.
+
+ \target nonreentrant-command
+ \section2 \\nonreentrant
+
+ The \\nonreentrant command indicates that the associated class or
+ function cannot be called by multiple threads. Nonreentrant is the
+ default case.
+
+ The command must stand on its own line.
+
+ When a class is marked \l {reentrant-command} {\\reentrant} or \l
+ {threadsafe-command} {\\threadsafe}, functions in that class can
+ be marked \c nonreentrant using this command in the \l{fn-command}
+ {\\fn} comment of the functions to be excluded.
+
+ See also \l{reentrant-command} {\\reentrant} and
+ \l{threadsafe-command} {\\threadsafe}.
+*/
+
+/*!
+ \page 18-qdoc-commands-relating.html
+ \previouspage Thread Support
+ \nextpage Grouping Things
+
+ \title Relating Things
+
+ The relating commands are for specifying how one documented
+ element relates to another documented element. Some examples:
+ \list
+ \li This function is an overload of another function.
+ \li This function is a reimplementation of another function.
+ \li This typedef is \e related to some class or header file.
+ \endlist
+
+ There is also a command for documenting that a QML type inherits
+ some other QML type.
+
+ \section1 Commands
+
+ \target inherits-command
+ \section2 \\inherits
+
+ The \\inherits command is for documenting that one QML type
+ inherits some other QML type. It must be included in the
+ inheriting element's \l{qmltype-command}{\\qmltype} comment.
+ The argument is the name of the inherited QML type.
+
+ \badcode *
+ /\1!
+ \qmltype PauseAnimation
+ \instantiates QDeclarativePauseAnimation
+ \ingroup qml-animation-transition
+ \since 4.7
+ \inherits Animation
+ \brief The PauseAnimation element provides a pause for an animation.
+
+ When used in a SequentialAnimation, PauseAnimation is a step
+ when nothing happens, for a specified duration.
+
+ A 500ms animation sequence, with a 100ms pause between two animations:
+
+ SequentialAnimation {
+ NumberAnimation { ... duration: 200 }
+ PauseAnimation { duration: 100 }
+ NumberAnimation { ... duration: 200 }
+ }
+
+ \sa {QML Animation and Transitions}, {declarative/animation/basics}{Animation basics example}
+ \1/
+ \endcode
+
+ QDoc includes this line on the reference page for the
+ \l [QML] PauseAnimation
+ element:
+
+ \quotation
+ Inherits \l [QML] Animation
+ \endquotation
+
+ \target overload-command
+ \section2 \\overload
+
+ The \\overload command is for indicating that a function is a
+ secondary overload of its name.
+
+ The command must stand on its own line.
+
+ For a function name that is overloaded (except constructors), QDoc
+ expects one primary version of the function, and all the others
+ marked with the \b {\\overload command}. The primary version
+ should be fully documented. Each overload can have whatever extra
+ documentation you want to add for just that overloaded version.
+
+ You can include the function name plus '()' as a parameter to
+ the \b{\\overload} command, which will include a standard
+ \e{This function overloads...} line of text with a link
+ to the documentation for the primary version of the function.
+
+ \badcode *
+ /\1!
+ \overload addAction()
+
+ This convenience function creates a new action with an
+ \a icon and some \a text. The function adds the newly
+ created action to the menu's list of actions, and
+ returns it.
+
+ \sa QWidget::addAction()
+ \1/
+ QAction *QMenu::addAction(const QIcon &icon, const QString &text)
+ {
+ QAction *ret = new QAction(icon, text, this);
+ addAction(ret);
+ return ret;
+ }
+ \endcode
+
+ If you don't include the function name with the \b{\\overload}
+ command, then instead of the "This function overloads..." line
+ with the link to the documentation for the primary version, you
+ get the old standard line:
+
+ \quotation
+ This is an overloaded member function, provided for
+ convenience.
+ \endquotation.
+
+ \target reimp-command
+ \section2 \\reimp
+
+ The \\reimp command is for indicating that a function is a
+ reimplementation of a virtual function.
+
+ The command must stand on its own line.
+
+ QDoc will omit the reimplemented function from the class
+ reference.
+
+ \badcode *
+ /\1!
+ \reimp
+ \1/
+ void QToolButton::nextCheckState()
+ {
+ Q_D(QToolButton);
+ if (!d->defaultAction)
+ QAbstractButton::nextCheckState();
+ else
+ d->defaultAction->trigger();
+ }
+ \endcode
+
+ This function will not be included in the documentation. Instead,
+ a link to the base function QAbstractButton::nextCheckState() will
+ appear in the documentation.
+
+ \target relates-command
+ \section2 \\relates
+
+ The \\relates command is for including the documentation of a
+ global element to some class or header file. The argument is a
+ class name or header file. For template types, use the type name only.
+
+ \badcode *
+ /\1!
+ \relates QChar
+
+ Reads a char from the stream \a in into char \a chr.
+
+ \sa {Format of the QDataStream operators}
+ \1/
+ QDataStream &operator>>(QDataStream &in, QChar &chr)
+ {
+ quint16 u;
+ in >> u;
+ chr.unicode() = ushort(u);
+ return in;
+ }
+ \endcode
+
+ The documentation for this function will be included on the reference page
+ for class QChar.
+*/
+
+/*!
+ \page 19-qdoc-commands-grouping.html
+ \previouspage Relating Things
+ \nextpage Naming Things
+
+ \title Grouping Things
+
+ The grouping commands relate classes to defined groups and
+ modules. The groups are used when generating lists of related
+ classes in the documentation, while the modules are elements of
+ Qt's structure.
+
+ \section1 Commands
+
+ \target ingroup-command
+ \section2 \\ingroup
+
+ The \\ingroup command indicates that the given
+ class, page, or other entity belongs to a certain group of
+ related documentation.
+
+ An entity may belong to multiple groups.
+
+ The \\ingroup command's argument is a group name, but note
+ that the command considers the rest of the line as part of
+ its argument. Make sure that the group name is followed by
+ a linebreak.
+
+ \badcode *
+ /\1!
+ \class QDir
+ \brief The QDir class provides access to directory
+ structures and their contents.
+
+ \ingroup io
+ ...
+ \1/
+ \endcode
+
+ This adds the QDir class to the \c io group. An entry for QDir
+ will then appear on the list created with, for example,
+ the \l {annotatedlist-command} {\\annotatedlist} command with
+ an argument \c io.
+
+ QDoc automatically generates links to associated groups on a
+ C++ class, namespace, or header reference page. For example,
+ given the above documentation for class \QDir and the following
+ \l {group-command}{\\group} page:
+
+ \badcode *
+ /\1
+ \group io
+ \title Input/Output and Networking
+ ...
+ \1/
+ \endcode
+
+ QDoc then outputs a statement on the QDir reference page:
+
+ \quotation
+ \list
+ \li \QDir is part of \l {Input/Output and Networking}.
+ \endlist
+ \endquotation
+
+ For HTML output, QDoc also generates a link to the group
+ page as part of the navigation bar (breadcrumbs). If multiple
+ \\ingroup commands are used, the first one that references
+ a documented \\group is selected.
+
+ See also \l {group-command} {\\group}.
+
+ \target inmodule-command
+ \section2 \\inmodule
+
+ The \\inmodule command relates a class to the module specified by
+ the command's argument.
+
+ For the basic classes in Qt, a class's module is determined by its
+ location, namely its directory. However, for extensions like
+ ActiveQt and \QD, a class must be related to a module
+ explicitly.
+
+ The command's argument is a module name, but note that the command
+ considers the rest of the line as part of its argument. Make sure
+ that the module name is followed by a linebreak.
+
+ \code
+ /*!
+ \class QDesignerTaskMenuExtension
+ \inmodule QtDesigner
+ * /
+ \endcode
+
+ This ensures that the QDesignerTaskMenuExtension class is included
+ in the \QD module, which means, for example, that the
+ class will appear on the list created by calling the \l
+ {generatelist-command} {\\generatelist} command with the \c
+ {{classesbymodule QtDesigner}} argument.
+
+ See also \l {module-command} {\\module} and \l
+ {generatelist-command} {\\generatelist}.
+*/
+
+/*!
+ \page 20-qdoc-commands-namingthings.html
+ \previouspage Grouping Things
+ \nextpage Markup Commands
+
+ \title Naming Things
+
+ In general, a title command considers everything that follows it
+ until the first line break as its argument. If the title is so
+ long it must span multiple lines, end each line (except the last
+ one) with a backslash.
+
+ \section1 Commands
+
+ \target title-command
+ \section2 \\title
+
+ The \\title command sets the title for a documentation page, or
+ allows you to override it.
+
+ \badcode *
+ /\1!
+ \page signalandslots.html
+
+ \title Signals & Slots
+
+ Signals and slots are used for communication between
+ objects. The signals and slots mechanism is a central
+ feature of Qt, and probably the part that differs most
+ from the features provided by other frameworks.
+
+ ...
+ \1/
+ \endcode
+
+ See also \l {subtitle-command} {\\subtitle}.
+
+ \target subtitle-command
+ \section2 \\subtitle
+
+ The \\subtitle command sets a subtitle for a documentation page.
+
+ \badcode *
+ /\1!
+ \page qtopiacore-overview.html
+
+ \title Qtopia Core
+ \subtitle Qt for Embedded Linux
+
+ Qt/Embedded, the embedded Linux port of Qt, is a
+ complete and self-contained C++ GUI and platform
+ development tool for Linux-based embedded development.
+ ...
+ \1/
+ \endcode
+
+ See also \l {title-command} {\\title}.
+
+*/
diff --git a/src/qdoc/qdoc/doc/qdoc-manual-intro.qdoc b/src/qdoc/qdoc/doc/qdoc-manual-intro.qdoc
new file mode 100644
index 000000000..0aeb715c9
--- /dev/null
+++ b/src/qdoc/qdoc/doc/qdoc-manual-intro.qdoc
@@ -0,0 +1,299 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page 01-qdoc-manual.html
+ \previouspage QDoc Manual
+ \nextpage Command Index
+
+ \title Introduction to QDoc
+
+ QDoc is a tool used by Qt Developers to generate documentation for
+ software projects. It works by extracting \e {QDoc comments} from
+ project source files and then formatting these comments as HTML
+ pages or DocBook XML documents. QDoc finds QDoc comments in \c
+ {.cpp} files and in \c {.qdoc} files. QDoc does not look for QDoc
+ comments in \c {.h} files. A QDoc comment always begins with an
+ exclamation mark (\b{!})). For example:
+
+ \badcode *
+ /\1!
+ \class QObject
+ \brief The QObject class is the base class of all Qt objects.
+
+ \ingroup objectmodel
+
+ \reentrant
+
+ QObject is the heart of the Qt \l{Object Model}. The
+ central feature in this model is a very powerful mechanism
+ for seamless object communication called \l{signals and
+ slots}. You can connect a signal to a slot with connect()
+ and destroy the connection with disconnect(). To avoid
+ never ending notification loops you can temporarily block
+ signals with blockSignals(). The protected functions
+ connectNotify() and disconnectNotify() make it possible to
+ track connections.
+
+ QObjects organize themselves in \l {Object Trees &
+ Ownership} {object trees}. When you create a QObject with
+ another object as parent, the object will automatically
+ add itself to the parent's \c children() list. The parent
+ takes ownership of the object. It will automatically
+ delete its children in its destructor. You can look for an
+ object by name and optionally type using findChild() or
+ findChildren().
+
+ Every object has an objectName() and its class name can be
+ found via the corresponding metaObject() (see
+ QMetaObject::className()). You can determine whether the
+ object's class inherits another class in the QObject
+ inheritance hierarchy by using the \c inherits() function.
+
+ ....
+ \1/
+ \endcode
+
+ From the QDoc comment above, QDoc generates the HTML \l {QObject}
+ {QObject class reference} page.
+
+ This manual explains how to use the QDoc commands in QDoc comments
+ to embed good documentation in your source files. It also explains
+ how to make a \l {The QDoc Configuration File} {QDoc configuration
+ file}, which you will pass to QDoc on the command line.
+
+ \section1 Running QDoc
+
+ The name of the QDoc program is \c {qdoc}. To run QDoc from the
+ command line, give it the name of a configuration file:
+
+ \quotation
+ \c {$ ../../bin/qdoc ./config.qdocconf}
+ \endquotation
+
+ QDoc recognizes the \c {.qdocconf} suffix as a \l{The QDoc
+ Configuration File} {QDoc configuration file}. The configuration
+ file is where you tell QDoc where to find the project source
+ files, header files, and \c {.qdoc} files. It is also where you
+ tell QDoc what kind of output to generate (HTML, DocBook XML...),
+ and where to put the generated documentation. The configuration
+ file also contains other information for QDoc.
+
+ See \l{The QDoc Configuration File} for instructions on how to
+ set up a QDoc configuration file.
+
+ \section2 Running QDoc in Single Execution Mode
+
+ Beginning with Qt 5.5, a new way to run QDoc is available that
+ reduces the time it takes to generate the Qt5 documentation by as
+ much as 90%. The new way to run QDoc is \e{single execution} mode.
+ Single execution mode is not currently available in the Qt5 build
+ system, which still uses the \e {standard} mode. Single execution
+ mode is only available when you run QDoc yourself, which you will
+ want to do often as you document your module and integrate your
+ documentation with the other Qt modules.
+
+ To run QDoc in single execution mode, add \c {-single-exec} to the
+ command line and pass QDoc a master \c qdocconf file that is
+ simply a list of file paths for qdocconf files of all the Qt5
+ modules. For example:
+
+ \code
+ /Users/me/qt5/qtbase/bin/qdoc -outputdir /Users/me/qt5/qtbase/doc -installdir /Users/me/qt5/qtbase/doc /Users/me/qt5/master.qdocconf -single-exec
+ \endcode
+
+ The qdocconf file, \c {master.qdocconf}, just lists the qdocconf files for all the Qt5 modules to be processed:
+
+ \badcode
+ /Users/me/qt5/qtbase/src/corelib/doc/qtcore.qdocconf
+ /Users/me/qt5/qtbase/src/network/doc/qtnetwork.qdocconf
+ /Users/me/qt5/qtbase/src/sql/doc/qtsql.qdocconf
+ /Users/me/qt5/qtbase/src/xml/doc/qtxml.qdocconf
+ /Users/me/qt5/qtbase/src/testlib/doc/qttestlib.qdocconf
+ /Users/me/qt5/qtbase/src/concurrent/doc/qtconcurrent.qdocconf
+ /Users/me/qt5/qtbase/src/gui/doc/qtgui.qdocconf
+ /Users/me/qt5/qtbase/src/platformheaders/doc/qtplatformheaders.qdocconf
+ /Users/me/qt5/qtbase/src/widgets/doc/qtwidgets.qdocconf
+ /Users/me/qt5/qtbase/src/opengl/doc/qtopengl.qdocconf
+ /Users/me/qt5/qtbase/src/printsupport/doc/qtprintsupport.qdocconf
+ /Users/me/qt5/qtbase/src/tools/qdoc/doc/config/qdoc.qdocconf
+ /Users/me/qt5/qtbase/qmake/doc/qmake.qdocconf
+ /Users/me/qt5/qtsvg/src/svg/doc/qtsvg.qdocconf
+ /Users/me/qt5/qtxmlpatterns/src/xmlpatterns/doc/qtxmlpatterns.qdocconf
+ /Users/me/qt5/qtdeclarative/src/qml/doc/qtqml.qdocconf
+ /Users/me/qt5/qtdeclarative/src/quick/doc/qtquick.qdocconf
+ /Users/me/qt5/qtquickcontrols/src/controls/doc/qtquickcontrols.qdocconf
+ /Users/me/qt5/qtquickcontrols/src/layouts/doc/qtquicklayouts.qdocconf
+ /Users/me/qt5/qtquickcontrols/src/dialogs/doc/qtquickdialogs.qdocconf
+ /Users/me/qt5/qtmultimedia/src/multimedia/doc/qtmultimedia.qdocconf
+ /Users/me/qt5/qtmultimedia/src/multimediawidgets/doc/qtmultimediawidgets.qdocconf
+ /Users/me/qt5/qtactiveqt/src/activeqt/doc/activeqt.qdocconf
+ /Users/me/qt5/qtsensors/src/sensors/doc/qtsensors.qdocconf
+ /Users/me/qt5/qtwebkit/Source/qtwebkit.qdocconf
+ /Users/me/qt5/qttools/src/assistant/help/doc/qthelp.qdocconf
+ /Users/me/qt5/qttools/src/assistant/assistant/doc/qtassistant.qdocconf
+ /Users/me/qt5/qttools/src/designer/src/uitools/doc/qtuitools.qdocconf
+ /Users/me/qt5/qttools/src/designer/src/designer/doc/qtdesigner.qdocconf
+ /Users/me/qt5/qttools/src/linguist/linguist/doc/qtlinguist.qdocconf
+ /Users/me/qt5/qtwebkit-examples/doc/qtwebkitexamples.qdocconf
+ /Users/me/qt5/qtgraphicaleffects/src/effects/doc/qtgraphicaleffects.qdocconf
+ /Users/me/qt5/qtscript/src/script/doc/qtscript.qdocconf
+ /Users/me/qt5/qtscript/src/scripttools/doc/qtscripttools.qdocconf
+ /Users/me/qt5/qtserialport/src/serialport/doc/qtserialport.qdocconf
+ /Users/me/qt5/qtdoc/doc/config/qtdoc.qdocconf
+ \endcode
+
+ \section3 Why Standard Mode Is Slow
+
+ Currently, the Qt5 build system does not use QDoc's \e {single
+ execution} mode for generating the Qt5 documentation. It runs QDoc
+ in the \e {standard} mode. The standard mode was came about
+ because it was the easiest way to get convert the Qt4 QDoc to
+ handle the modularization of Qt in Qt5. In Qt4, QDoc ran once over
+ all the Qt4 sources to generate the HTML documentation for Qt.
+ While generating the Qt documentation, Qt4 QDoc also generated an
+ \e {index file} for Qt. That index file was meant to be used as
+ input to subsequent QDoc runs for generating HTML documentation
+ for other software libraries/products that were based on Qt. The
+ Qt index file allowed QDoc to link documentation written for those
+ other libraries/products to the Qt4 documentation.
+
+ When Qt5 came along, Qt was divided into modules. Since then,
+ many new modules have been added to Qt. As of version 5.5, there
+ are over 40 separate modules in Qt5, each with its own
+ documentation that links to (depends on) the documentation of
+ other Qt modules.
+
+ In \e {standard mode}, QDoc runs twice for each module. The first
+ QDoc run for a particular Qt module, parses all the module's
+ source files and then uses the information to generate the
+ module's index file. It is called the \e{prepare phase} because
+ it \e prepares the module's index file. The second QDoc run for
+ the module also parses all the module's source files and then
+ generates the module's documentation pages. This is called the \e
+ {generate phase} because it generates the module's documentation.
+
+ The module's documentation will likely contain HTML links to the
+ documentation of one or more of the other Qt modules. For example,
+ most Qt5 modules contain links to documentation in QtCore. When a
+ Qt module contains links into the documentation of other Qt
+ module's, that module is said to depend on those other Qt modules.
+ Hence when QDoc runs the \e {generate phase} for that module, it
+ must also load the index files for those modules so it can create
+ those links.
+
+ Hence, when the Qt build system generates the Qt documentation, it
+ first runs QDoc once for each module to perform the \e {prepare
+ phase} to generate all the index files. Then it runs QDoc once for
+ each module to perform the \e {generate phase}, where it uses the
+ dependent index files to generate the module's documentation,
+ including any cross-module links it finds. Each execution of
+ QDoc, both \e {prepare phase} and \e {generate phase}, parses
+ all the source files that are included in the module, and in the
+ \e {generate phase} also parses the index files for the dependent
+ modules. Nothing is retained or retainable between QDoc runs.
+
+ \section3 Why Single Execution Mode Is Much Faster
+
+ As the name implies, single execution mode uses a single QDoc
+ process to generate all the Qt5 documentation. The single QDoc
+ process still performs a \e{prepare phase} for each module and
+ then a \e{generate phase} for each module, but there are a few
+ differences. It begins by reading the master qdocconf file. Then
+ it reads each qdocconf file in the master list and performs the
+ \e{prepare phase} for each module. During the \e{prepare phase},
+ all the source files for the module are parsed to build a syntax
+ tree for the module. The module's index file is then generated,
+ although QDoc will not re-read the index files in the \e{generate
+ phase}. The important difference here is that the module's syntax
+ tree is retained after the index file is generated, so that after
+ the \e{prepare phase} has been run for all the modules, QDoc still
+ has all the syntax trees it built.
+
+ QDoc then processes each module again for the \e{generate phase}.
+ But now QDoc doesn't need to re-parse each module's source files,
+ because the module's syntax tree is still in memory. Nor does QDoc
+ need to re-read the index files for the dependent modules, again
+ because it still has the syntax trees for those modules in memory.
+ It remains only to traverse each module's syntax tree to generate
+ the documentation pages.
+
+ Hence, QDoc parses each source file once and only once and doesn't
+ need to read index files. This is what makes single execution mode
+ much faster than the standard mode. It is anticipated that the Qt
+ build system will eventually run QDoc in single execution mode.
+ However, changes to the master qdocconf file might be required, so
+ the method described above for running QDoc in single execution
+ mode might have to change, watch this space for updates.
+
+ \section1 How QDoc Works
+
+ QDoc begins by reading the configuration file you specified on the
+ command line. It stores all the variables from the configuration
+ file for later use. One of the first variables it uses is \c
+ {outputformats}. This variable tells QDoc which output generators
+ it will run. The default value is \e {HTML}, so if you don't set
+ \c {outputformats} in your configuration file, QDoc will generate
+ HTML output. That's usually what you will want anyway, but you can
+ also specify \e {DocBook} to get DocBook output instead.
+
+ Next, QDoc uses the values of the
+ \l {headerdirs-variable}
+ {headerdirs} variable and/or the \l
+ {22-qdoc-configuration-generalvariables.html#headers-variable}
+ {headers} variable to find and parse all the header files for your
+ project. QDoc does \e not scan header files for QDoc comments. It
+ parses the header files to build a master tree of all the items
+ that should be documented, in other words, the items that QDoc should find
+ QDoc comments for.
+
+ After parsing all the header files and building the master tree of
+ items to be documented, QDoc uses the value of the \l
+ {22-qdoc-configuration-generalvariables.html#sourcedirs-variable}
+ {sourcedirs} variable and/or the value of the \l
+ {22-qdoc-configuration-generalvariables.html#sources-variable}
+ {sources} variable to find and parse all the \c {.cpp} and \c
+ {.qdoc} files for your project. These are the files QDoc scans for
+ \e {QDoc comments}. Remember that a QDoc comment begins with
+ an exclamation mark: \b {/*!} .
+
+ For each QDoc comment it finds, it searches the master tree for
+ the item where the documentation belongs. Then it interprets the
+ QDoc commands in the comment and stores the interpreted commands
+ and the comment text in the tree node for the item.
+
+ Finally, QDoc traverses the master tree. For each node, if the
+ node has stored documentation, QDoc calls the output generator
+ specified by the \c {outputformats} variable to format and write
+ the documentation in the directory specified in the configuration
+ file in the \l
+ {22-qdoc-configuration-generalvariables.html#outputdir-variable}
+ {outputdir} variable.
+
+ \section1 Command Types
+
+ QDoc interprets three types of commands:
+
+ \list
+ \li \l {Topic Commands}
+ \li \l {Context Commands}
+ \li \l {Markup Commands}
+ \endlist
+
+ Topic commands identify the element you are documenting, for example
+ a C++ class, function, type, or an extra page of text
+ that doesn't map to an underlying C++ element.
+
+ Context commands tell QDoc how the element being documented
+ relates to other documented elements, for example, next and previous page
+ links, inclusion in page groups, or library modules. Context
+ commands can also provide information about the documented element
+ that QDoc can't get from the source files, for example, whether the
+ element is thread-safe, whether it is an overloaded or reimplemented function,
+ or whether it has been deprecated.
+
+ Markup commands tell QDoc how text and image elements in the
+ document should be rendered, or about the document's outline
+ structure.
+*/
+
diff --git a/src/qdoc/qdoc/doc/qdoc-manual-macros.qdoc b/src/qdoc/qdoc/doc/qdoc-manual-macros.qdoc
new file mode 100644
index 000000000..78b56068e
--- /dev/null
+++ b/src/qdoc/qdoc/doc/qdoc-manual-macros.qdoc
@@ -0,0 +1,470 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qdoc-macros.html
+ \previouspage 12-0-qdoc-commands-miscellaneous.html
+ \nextpage qdoc-macros-cmake-text-snippets.html
+ \title Macros
+
+ Use the \l {macro-variable}{macro} variable to create your own simple QDoc
+ commands.
+
+ Macros are useful for:
+
+ \list
+ \li Including recurring text, such as formatted text snippets,
+ into documentation.
+ \li Pulling in information, such as version strings, from the build
+ system into .documentation.
+ \li Maintaining a single location for strings that are likely to change
+ in the future, such as product names.
+ \li Making sure that a term or product name is used consistently.
+ \li Styling the generated documentation by using HTML and DocBook
+ elements, such as forced line breaks and special characters.
+ \li Using tabs to show examples of content for different programming
+ languages, operating systems, or tools, for example.
+ \endlist
+
+ \section1 Global Macros
+
+ For a set of predefined global macros that you can use in all documentation
+ projects and their current values, see
+ \l{https://github.com/qt/qtbase/blob/e4315204b1412d74842b3167c3eb9a49dc233355/doc/global/macros.qdocconf}
+ {/qtbase/doc/global/macros.qdocconf} and
+ \l{https://github.com/qt/qtbase/blob/e4315204b1412d74842b3167c3eb9a49dc233355/doc/global/htmltabs.qdocconf}
+ {/qtbase/doc/global/htmltabs.qdocconf}. They have macros that include:
+
+ \list
+ \li \l {CMake Text Snippets}
+ \li \l {HTML and DocBook Formatting}
+ \li \l {Product Names}
+ \li \l {Product Versions}
+ \li \l {Tabbed Content}
+ \li \l {youtube-macro}{Links to YouTube content}
+ \li \l {Miscellaneous Macros}
+ \endlist
+
+ \QOI copies the macros files to your Qt installation folder, so you can use
+ the macros even if you build the documentation using QDoc from an installed
+ Qt (as opposed to building QDoc yourself from sources).
+
+ \note The values of the global macros might change between Qt versions,
+ so the macros might be extended differently depending on the Qt version that
+ you use to build the documentation.
+
+ \section1 Adding Macros
+
+ You can add macros for a particular documentation project in the
+ .qdocconf file of the project or any .qdocconf file that you include into it.
+ If the macro could be useful in more than one documentation project, add it
+ to the global macros file.
+
+ For more information about the macro syntax and options, see
+ \l {macro-variable}{macro}.
+
+ \section1 Using Macros
+
+ You can use macros in the same way as the built-in QDoc commands in:
+
+ \list
+ \li Code source files, in documentation comments (.cpp, .qml)
+ \li Documentation source files (.qdoc, .qdocinc)
+ \endlist
+
+ For example:
+
+ \badcode
+ \QOI copies the macros files to your Qt installation folder.
+ \endcode
+
+ \section1 Obsolete Macros
+
+ The global macros file contains the following obsolete macros for
+ compatibility with older documentation sets.
+
+ \table
+ \header
+ \li Don't Use
+ \li Use
+ \row
+ \li \\gui
+ \li \l{uicontrol-command}{\\uicontrol}
+ \row
+ \li \\menu
+ \li \l{uicontrol-command}{\\uicontrol}
+ \row
+ \li \\param
+ \li \l{a-command}{\\a}
+ \row
+ \li \\return
+ \li Write \e Returns or \e returns.
+ \endtable
+
+ \sa {macro-variable}{macro}, {Unknown macro}
+*/
+
+/*!
+ \page qdoc-macros-cmake-text-snippets.html
+ \previouspage qdoc-macros.html
+ \nextpage qdoc-macros-formatting.html
+
+ \title CMake Text Snippets
+
+ See \l{https://github.com/qt/qtbase/blob/e4315204b1412d74842b3167c3eb9a49dc233355/doc/global/macros.qdocconf}
+ {/qtbase/doc/global/macros.qdocconf} for standard text snippets that you
+ should use when writing \l {Building with CMake}
+ {Qt-specific CMake documentation}:
+
+ \table
+ \header
+ \li Macro
+ \li Use
+ \row
+ \li \\cmakecommandandroidonly
+ \li For Android targets
+ \row
+ \li \\cmakecommandsince
+ \li To indicate which Qt version introduced the command
+ \row
+ \li \\cmakepropertyandroidonly
+ \li For Android targets
+ \row
+ \li \\cmakepropertyiosonly
+ \li For iOS targets
+ \row
+ \li \\cmakepropertysince
+ \li To indicate which Qt version introduced the property
+ \row
+ \li \\cmakepropertywebassemblyonly
+ \li For WebAssembly targets
+ \row
+ \li \\cmakevariableandroidonly
+ \li For Android targets
+ \row
+ \li \\cmakevariableiosonly
+ \li For iOS targets
+ \row
+ \li \\cmakevariablesince
+ \li To indicate which Qt version introduced the variable
+ \row
+ \li \\preliminarycmakecommand
+ \li To indicate that the command may change in future versions
+ \row
+ \li \\preliminarycmakeproperty
+ \li To indicate that the property may change in future versions
+ \row
+ \li \\preliminarycmakevariable
+ \li To indicate that the variable may change in future versions
+ \row
+ \li \\versionlessCMakeCommandsNote
+ \li For all commands, to tell users how to use versioned commands
+ \endtable
+
+ \sa {macro-variable}{macro}, {Macros}
+*/
+
+/*!
+ \page qdoc-macros-formatting.html
+ \previouspage qdoc-macros.html
+ \nextpage qdoc-macros-product-names.html
+
+ \title HTML and DocBook Formatting
+
+ See \l{https://github.com/qt/qtbase/blob/e4315204b1412d74842b3167c3eb9a49dc233355/doc/global/macros.qdocconf}
+ {/qtbase/doc/global/macros.qdocconf} for HTML and DocBook elements and
+ special characters that you can use in documentation source files.
+
+ \sa {Macros and Other Configurations}, {macro-variable}{macro}, {Macros}
+
+*/
+
+/*!
+ \page qdoc-macros-product-names.html
+ \previouspage qdoc-macros-formatting.html
+ \nextpage qdoc-macros-tabbed-content.html
+
+ \title Product Names
+
+ Use the following macros to refer to products:
+
+ \table
+ \header
+ \li Macro
+ \li Expands To
+ \row
+ \li \\macos
+ \li macOS
+ \row
+ \li \\QA
+ \li Qt Assistant
+ \row
+ \li \\QB
+ \li Qt Bridge
+ \row
+ \li \\QBF
+ \li Qt Bridge for Figma
+ \row
+ \li \\QBPS
+ \li Qt Bridge for Adobe Photoshop
+ \row
+ \li \\QBSK
+ \li Qt Bridge for Sketch
+ \row
+ \li \\QBXD
+ \li Qt Bridge for Adobe XD
+ \row
+ \li \\QD
+ \li Qt Widgets Designer
+ \row
+ \li \\QDS
+ \li Qt Design Studio
+ \row
+ \li \\QDV
+ \li Qt Design Viewer
+ \row
+ \li \\QL
+ \li Qt Linguist
+ \row
+ \li \\QMCU
+ \li Qt for MCUs
+ \row
+ \li \\QMLLS
+ \li QML Language Server
+ \row
+ \li \\QMT
+ \li Qt Maintenance Tool
+ \row
+ \li \\QOI
+ \li Qt Online Installer
+ \row
+ \li \\QQV
+ \li Qt QML Viewer
+ \row
+ \li \\QtAA
+ \li Qt for Android Automotive
+ \row
+ \li \\QUL
+ \li Qt Quick Ultralite
+ \endtable
+
+ \sa {macro-variable}{macro}, {Macros}
+*/
+
+/*!
+ \page qdoc-macros-product-versions.html
+ \previouspage qdoc-macros-product-names.html
+ \nextpage qdoc-macros-tabbed-content.html
+
+ \title Product Versions
+
+ Use the following macros to display version and status information about a
+ topic:
+
+ \table
+ \header
+ \li Macro
+ \li Expands To
+ \row
+ \li \\QtMajorVersion
+ \li The major version number based on the $QT_VER environment variable
+ \row
+ \li \\QtMinorVersion
+ \li The minor version number based on the $QT_VER environment variable
+ \row
+ \li \\QtVersion
+ \li The value of the $QT_VERSION environment variable
+ \row
+ \li \\QtVer
+ \li The value of the $QT_VER environment variable
+ \row
+ \li \\techpreview
+ \li The statement that a module or class is preliminary and might change
+ \endtable
+
+ \section1 \\techpreview
+
+ Appends the tech preview link to the brief sentence and adds the topic to
+ the \c tech_preview group.
+
+ Must be placed directly under a \brief command.
+
+ \sa {macro-variable}{macro}, {Macros}
+*/
+
+/*!
+ \page qdoc-macros-tabbed-content.html
+ \previouspage qdoc-macros-formatting.html
+ \nextpage qdoc-macros-youtube-videos.html
+
+ \title Tabbed Content
+
+ Use the following macros to create \e {tab groups} of labeled HTML tabs that
+ have comparable or alternative content. For example, you can show code
+ snippets for different programming languages.
+
+ \list
+ \li \l{tab-macro}{\\tab}
+ \li \l{tabcontent-macro}{\\tabcontent}
+ \li \l{endtabcontent-macro}{\\endtabcontent}
+ \endlist
+
+ \section1 Using Tab Macros
+
+ \badcode
+ \tab {name}{tab-id}{title}{checked}
+ \tabcontent {tab-id}
+ content
+ \endtabcontent
+ \endcode
+
+ \note These macros only work with the online template, so you usually
+ need to use conditional text to get good results also for the offline help.
+
+ For example, to show instructions for the CMake and qmake build systems in
+ tabs:
+
+ \badcode
+ \if defined(onlinedocs)
+ \tab {build-qt-app}{tab-cmake}{CMake}{checked}
+ \tab {build-qt-app}{tab-qmake}{qmake}{}
+ \tabcontent {tab-cmake}
+ \else
+ \section1 Using CMake
+ \endif
+ CMake-specific instructions go here
+ \if defined(onlinedocs)
+ \endtabcontent
+ \tabcontent {tab-qmake}
+ \else
+ \section1 Using qmake
+ \endif
+ qmake-specific instructions go here
+ \if defined(onlinedocs)
+ \endtabcontent
+ \endif
+ \endcode
+
+ \target tab-macro
+ \section1 \\tab
+
+ \badcode
+ \tab {name}{tab-id}{title}{checked}
+ \endcode
+
+ Specifies a tab in a tab group with a name, ID, title, and default state.
+
+ Use a unique \e {name} to specify which tabs belong to a tab group. That is,
+ all tabs in a group have the same name. To separate the tabs from each other,
+ give them each a unique \e {tab-id} within the group. Use this \e {tab-id}
+ as the value of the \\tabcontent macro to add content to the tab.
+
+ The \e {checked} argument selects the tab by default when the HTML page is
+ loaded. For the initially hidden tabs, pass an empty argument {}.
+
+ \target tabcontent-macro
+ \section1 \\tabcontent
+
+ \badcode
+ \tabcontent {tab-id}
+ \endcode
+
+ Adds content to the tab with the \e {tab-id} you specify.
+
+ \target endtabcontent-macro
+ \section1 \\endtabcontent
+
+ Marks the end of the tab content that you begin with \\tabcontent.
+
+ \sa {Macros}
+*/
+
+/*!
+ \page qdoc-macros-youtube-videos.html
+ \previouspage qdoc-macros-tabbed-content.html
+ \nextpage qdoc-macros-misc.html
+
+ \target youtube-macro
+ \title \\youtube
+
+ When generating online documentation, embeds a YouTube video in the HTML.
+ When generating offline documentation (.qch), adds an external link to the
+ video with a thumbnail image. The HTML docs show a thumbnail of the video
+ with a play button. You need to save the thumbnail in
+ \c {\images\extraimages\} in your project folder.
+
+ Use the following URL to open the thumbnail image in a browser:
+ \c {https://img.youtube.com/vi/<ID>/0.jpg}. The \c <ID> is the ID of
+ the video on YouTube. For example, if the URL to the video is
+ \c {https://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=youtu.be},
+ the ID is \c dQw4w9WgXcQ. Save the image file as \c dQw4w9WgXcQ.jpg.
+
+ You must add the filename of the thumbnail file to
+ \c {\images\extraimages\extraimages.qdocconf}. For example:
+
+ \badcode
+ {HTML.extraimages,qhp.qtdesignstudio.extraFiles} += \
+ images/dQw4w9WgXcQ.jpg
+ \endcode
+
+ To add a link to the video in text, write:
+
+ \badcode
+ \youtube dQw4w9WgXcQ
+ \endcode
+
+ \sa {Macros}
+*/
+
+/*!
+ \page qdoc-macros-misc.html
+ \previouspage qdoc-macros-youtube-videos.html
+ \nextpage 21-0-qdoc-configuration.html
+
+ \title Miscellaneous Macros
+
+ You can use the following macros to affect the HTML output and to use
+ standard terminology:
+
+ \list
+ \li \l {borderedimage-macro}{\\borderedimage}
+ \li \l {examplecategory-macro}{\\examplecategory}
+ \li \l {key-macro}{\\key}
+ \li \l {nullptr-macro}{\\nullptr}
+ \li \l {summary-macro}{\\summary}
+ \endlist
+
+ \target borderedimage-macro
+ \section1 \\borderedimage
+
+ Like \l{image-command}{\\image}, but adds a border around the image.
+
+ \target examplecategory-macro
+ \section1 \\examplecategory
+
+ Describes the category an example is sorted to in the Qt Creator
+ \uicontrol Examples tab.
+
+ \target key-macro
+ \section1 \\key
+
+ Formats keyboard key names.
+
+ \target nullptr-macro
+ \section1 \\nullptr
+
+ Expands to the term to use for null pointers.
+
+ \target summary-macro
+ \section1 \\summary
+
+ Like \l{brief-command}{\\brief}, but replicates the sentence also as text.
+
+ Wrap the entire sentence within \c {{}}. For example:
+
+ \badcode
+ \summary {Creates a build target.}
+ \endcode
+
+ \sa {macro-variable}{macro}, {Macros}
+*/
diff --git a/src/qdoc/qdoc/doc/qdoc-manual-markupcmds.qdoc b/src/qdoc/qdoc/doc/qdoc-manual-markupcmds.qdoc
new file mode 100644
index 000000000..bd31bdc07
--- /dev/null
+++ b/src/qdoc/qdoc/doc/qdoc-manual-markupcmds.qdoc
@@ -0,0 +1,3134 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page 03-qdoc-commands-markup.html
+ \previouspage Naming Things
+ \nextpage Macros
+
+ \title Markup Commands
+
+ The markup commands indicate the generated documentation's visual
+ appearance and logical structure.
+
+ \list
+ \li \l {a-command} {\\a}
+ \li \l {annotatedlist-command} {\\annotatedlist}
+ \li \l {b-command} {\\b}
+ \li \l {badcode-command} {\\badcode}
+ \li \l {b-command} {\\bold} (deprecated, use \\b)
+ \li \l {br-command} {\\br}
+ \li \l {brief-command} {\\brief}
+ \li \l {c-command} {\\c}
+ \li \l {caption-command} {\\caption}
+ \li \l {code-command} {\\code}
+ \li \l {codeline-command} {\\codeline}
+ \li \l {details-command} {\\details}
+ \li \l {div-command} {\\div}
+ \li \l {dots-command} {\\dots}
+ \li \l {e-command} {\\e}
+ \li \l {else-command} {\\else}
+ \li \l {endif-command} {\\endif}
+ \li \l {footnote-command} {\\footnote}
+ \li \l {generatelist-command} {\\generatelist}
+ \li \l {header-command} {\\header}
+ \li \l {e-command} {\\i} (deprecated, use \\e)
+ \li \l {if-command} {\\if}
+ \li \l {image-command} {\\image}
+ \li \l {include-command} {\\include}
+ \li \l {inlineimage-command} {\\inlineimage}
+ \li \l {keyword-command} {\\keyword}
+ \li \l {l-command} {\\l}
+ \li \l {legalese-command} {\\legalese}
+ \li \l {li-command} {\\li}
+ \li \l {list-command} {\\list}
+ \li \l {meta-command} {\\meta}
+ \li \l {noautolist-command} {\\noautolist}
+ \li \l {li-command} {\\o} (deprecated, use \\li)
+ \li \l {note-command} {\\note}
+ \li \l {omit-command} {\\omit}
+ \li \l {printline-command} {\\printline}
+ \li \l {printto-command} {\\printto}
+ \li \l {printuntil-command} {\\printuntil}
+ \li \l {qml-command}{\\qml}
+ \li \l {quotation-command} {\\quotation}
+ \li \l {quotefile-command} {\\quotefile}
+ \li \l {quotefromfile-command} {\\quotefromfile}
+ \li \l {raw-command} {\\raw}
+ \li \l {row-command} {\\row}
+ \li \l {sa-command} {\\sa}
+ \li \l {sectionOne-command} {\\section1}
+ \li \l {sectionTwo-command} {\\section2}
+ \li \l {sectionThree-command} {\\section3}
+ \li \l {sectionFour-command} {\\section4}
+ \li \l {sincelist-command} {\\sincelist}
+ \li \l {skipline-command} {\\skipline}
+ \li \l {skipto-command} {\\skipto}
+ \li \l {skipuntil-command} {\\skipuntil}
+ \li \l {snippet-command} {\\snippet}
+ \li \l {span-command} {\\span}
+ \li \l {sub-command} {\\sub}
+ \li \l {sup-command} {\\sup}
+ \li \l {table-command} {\\table}
+ \li \l {tableofcontents-command} {\\tableofcontents}
+ \li \l {target-command} {\\target}
+ \li \l {tt-command} {\\tt}
+ \li \l {uicontrol-command} {\\uicontrol}
+ \li \l {underline-command} {\\underline}
+ \li \l {raw-command} {\\unicode}
+ \li \l {warning-command} {\\warning}
+ \li \l {backslash-sequence} {\\\\}
+ \li \l {endash-sequence} {\--}
+ \li \l {emdash-sequence} {-\--}
+ \endlist
+*/
+
+
+/*!
+ \page 04-qdoc-commands-textmarkup.html
+ \previouspage Markup Commands
+ \nextpage Document Structure
+
+ \title Text Markup
+
+ The text formatting commands indicate how text is to be rendered.
+
+ \target a-command
+ \section1 \\a (parameter marker)
+
+ The \\a command tells QDoc the next word is a formal parameter name.
+
+ A warning is emitted when a formal parameter is not documented or
+ is misspelled, so when you document a function you should mention
+ each formal parameter by name in the function description,
+ preceded by the \\a command. The parameter name is then rendered
+ in italics.
+
+ The formal parameter name may be enclosed between curly brackets,
+ but that isn't required.
+
+ \target c-command
+ \section1 \\c (code font)
+
+ The \\c command is used for rendering variable names, user-defined
+ class names, and C++ keywords (for example, \c int and \c for) in the code
+ font.
+
+ The command renders its argument using a monospace font. If the text to be
+ rendered in the code font contains spaces, enclose the entire text in curly
+ brackets:
+
+ \code
+ \c {QLineEdit::QLineEdit(const QString &contents, QWidget *parent) : QWidget(parent)}
+ \endcode
+
+ The \\c command accepts the special character \c \ within its
+ argument, which renders it as a normal character. So if you want
+ to use nested commands, you must use the \l {tt-command} {teletype
+ (\\tt)} command instead.
+
+ See also \l {tt-command} {\\tt} and \l {code-command} {\\code}.
+
+ \target details-command
+ \section1 \\details (collapsible)
+
+ The \\details and \\enddetails commands generates a collapsible <details>
+ element with a <summary> to control the hidden/visible state.
+
+ When generating HTML output, use the \\details and \\enddetails commands to
+ generate a collapsible \c{<details>} HTML element. The command takes an
+ optional summary string enclosed in curly braces. This optional argument
+ specifies a visible heading for the details.
+
+ For example, with the following input:
+ \badcode *
+ /\1!
+ \details {QDoc details}
+ \note You're looking at detailed information.
+ \enddetails
+ \1/
+ \endcode
+
+ If QDoc is generating HTML, it will translate these commands to:
+
+ \badcode
+ <summary>QDoc details</summary><div class="admonition note"><p><b>Note: </b>You're looking at detailed information.</p></div>
+ \endcode
+
+ QDoc renders this as:
+
+ \details {QDoc details}
+ \note You're looking at detailed information.
+ \enddetails
+
+ For any other output format, QDoc generates the contents as a normal paragraph,
+ ignoring the summary string. This command was introduced to QDoc in Qt6.6.
+
+ \target div-command
+ \section1 \\div
+
+ The \\div and \\enddiv commands delimit a large or small block of
+ text (which may include other QDoc commands) to which special
+ formatting attributes should be applied.
+
+ An argument must be provided in curly braces, as in the QDoc
+ comment shown below. The argument is not interpreted but is used
+ as attribute(s) of the tag that is output by QDoc.
+
+ For example, we might want to render an inline image so that it
+ floats to the right of the current block of text:
+
+ \badcode *
+ /\1!
+ \div {class="float-right"}
+ \inlineimage qml-column.png
+ \enddiv
+ \1/
+ \endcode
+
+ If QDoc is generating HTML, it will translate these commands to:
+
+ \code
+ <div class="float-right"><p><img src="images/qml-column.png" /></p></div>
+ \endcode
+
+ For HTML, the attribute value \e {float-right} then will refer to
+ a clause in the style.css file, which in this case could be:
+
+ \code
+ div.float-right
+ {
+ float: right; margin-left: 2em
+ }
+ \endcode
+
+ \note Note that the \b {\\div} command can be nested.
+
+ Below you can find an example taken from the index.qdoc file used to
+ generate index.html for Qt 4.7:
+
+ \code
+ \div {class="indexbox guide"}
+ \div {class="heading"}
+ Qt Developer Guide
+ \enddiv
+ \div {class="indexboxcont indexboxbar"}
+ \div {class="section indexIcon"} \emptyspan
+ \enddiv
+ \div {class="section"}
+ Qt is a cross-platform application and UI
+ framework. Using Qt, you can write web-enabled
+ applications once and deploy them across desktop,
+ mobile and embedded operating systems without
+ rewriting the source code.
+ \enddiv
+ \div {class="section sectionlist"}
+ \list
+ \li \l{Getting Started}
+ \li \l{Installation} {Installation}
+ \li \l{how-to-learn-qt.html} {How to learn Qt}
+ \li \l{tutorials.html} {Tutorials}
+ \li \l{Qt Examples} {Examples}
+ \li \l{qt4-7-intro.html} {What's new in Qt 4.7}
+ \endlist
+ \enddiv
+ \enddiv
+ \enddiv
+ \endcode
+
+ When all the class attribute values are defined as they are in the
+ style.css file that is used for rendering the Qt documentation,
+ the above example is rendered as:
+
+ \div {class="indexbox guide"}
+ \div {class="heading"}
+ Qt Developer Guide
+ \enddiv
+ \div {class="indexboxcont indexboxbar"}
+ \div {class="section indexIcon"} \emptyspan
+ \enddiv
+ \div {class="section"}
+ Qt is a cross-platform application and UI
+ framework. Using Qt, you can write web-enabled
+ applications once and deploy them across desktop,
+ mobile and embedded operating systems without
+ rewriting the source code.
+ \enddiv
+ \div {class="section sectionlist"}
+ \list
+ \li Getting Started
+ \li Installation
+ \li How to learn Qt
+ \li Tutorials
+ \li Examples
+ \li What's new in Qt 4.7
+ \endlist
+ \enddiv
+ \enddiv
+ \enddiv
+
+ See also \l {span-command} {\\span}.
+
+ \target span-command
+ \section1 \\span
+
+ The \\span command applies special formatting to a small block of text.
+
+ Two arguments must be provided, each argument in curly braces, as
+ shown in the QDoc comment below. The first argument is not
+ interpreted, but specifies the formatting attribute(s) of the tag
+ output by QDoc. The second argument is the text to be rendered with
+ the special formatting attributes.
+
+ For example, we might want to render the first word of each
+ element in a numeric list in blue.
+
+ \badcode *
+ /\1!
+ Global variables with complex types:
+ \list 1
+ \li \span {class="variableName"} {mutableComplex1} in globals.cpp at line 14
+ \li \span {class="variableName"} {mutableComplex2} in globals.cpp at line 15
+ \li \span {class="variableName"} {constComplex1} in globals.cpp at line 16
+ \li \span {class="variableName"} {constComplex2} in globals.cpp at line 17
+ \endlist
+ \1/
+ \endcode
+
+ Class \e {variableName} refers to a clause in your style.css.
+
+ \code
+ .variableName
+ {
+ font-family: courier;
+ color: blue
+ }
+ \endcode
+
+ Using the \e {variableName} clause shown above, the example is rendered as:
+
+ Global variables with complex types:
+ \list 1
+ \li \span {class="variableName"} {mutableComplex1} in globals.cpp at line 14
+ \li \span {class="variableName"} {mutableComplex2} in globals.cpp at line 15
+ \li \span {class="variableName"} {constComplex1} in globals.cpp at line 16
+ \li \span {class="variableName"} {constComplex2} in globals.cpp at line 17
+ \endlist
+
+ \note The \b span command does not cause a new paragraph to be
+ started.
+
+ See also \l {div-command} {\\div}.
+
+ \target tt-command
+ \section1 \\tt (teletype font)
+
+ The \\tt command renders its argument in a monospace font. This
+ command behaves just like the \l {c-command} {\\c} command, except
+ that \\tt allows you to nest QDoc commands within the argument
+ (e.g. \l {e-command} {\\e}, \l {b-command} {\\b} and \l
+ {underline-command} {\\underline}).
+
+ \badcode *
+ /\1!
+ After having populated the main container with
+ child widgets, \c setupUi() scans the main container's list of
+ slots for names with the form
+ \tt{on_\e{objectName}_\e{signalName}().}
+ \1/
+ \endcode
+
+ If the text to be rendered in the code font contains spaces, enclose the
+ entire text in curly brackets.
+
+ \code
+ \tt {QLineEdit::QLineEdit(const QString &contents, QWidget *parent) :QWidget(parent)}
+ \endcode
+
+ See also \l {c-command} {\\c}.
+
+ \target b-command
+ \section1 \\b
+
+ The \\b command renders its argument in bold font. This command used
+ to be called \\bold.
+
+ \badcode *
+ /\1!
+ This is regular text; \b {this text is
+ rendered using the \\b command}.
+ \1/
+ \endcode
+
+ \target br-command
+ \section1 \\br
+
+ The \\br command forces a line break.
+
+ \target e-command
+ \section1 \\e (emphasis, italics)
+
+ The \\e command renders its argument in a special font, normally italics. This
+ command used to be called \\i, which is now deprecated.
+
+ If the argument contains spaces or other punctuation, enclose the
+ argument in curly brackets.
+
+ \badcode *
+ /\1!
+ Here, we render \e {a few words} in italics.
+ \1/
+ \endcode
+
+ If you want to use other QDoc commands within an argument that
+ contains spaces, you always need to enclose the argument in
+ braces. But QDoc is smart enough to count parentheses, so you
+ don't need braces in cases like this:
+
+ \badcode *
+ /\1!
+ An argument can sometimes contain whitespaces,
+ for example: \e QPushButton(tr("A Brand New Button"))
+ \1/
+ \endcode
+
+ Finally, trailing punctuation is not included in an argument,
+ nor is "'s".
+
+ \target sub-command
+ \section1 \\sub
+
+ The \\sub command renders its argument lower than the baseline of
+ the regular text, using a smaller font.
+
+ \badcode *
+ /\1!
+ Definition (Range): Consider the sequence
+ {x\sub n}\sub {n > 1} . The set
+
+ {x\sub 2, x\sub 3, x\sub 4, ...} = {x\sub n ; n = 2, 3, 4, ...}
+
+ is called the range of the sequence.
+ \1/
+ \endcode
+
+ If the argument contains spaces or other punctuation, enclose the
+ argument in curly brackets.
+
+ \target sup-command
+ \section1 \\sup
+
+ The \\sup command renders its argument higher than
+ the baseline of the regular text, using a smaller font.
+
+ \badcode *
+ /\1!
+ The series
+
+ 1 + a + a\sup 2 + a\sup 3 + a\sup 4 + ...
+
+ is called the \i {geometric series}.
+ \1/
+ \endcode
+
+ If the argument contains spaces or other punctuation, enclose the
+ argument in curly brackets.
+
+ \target uicontrol-command
+ \section1 \\uicontrol
+
+ The \\uicontrol command is used to mark content as being used for UI
+ control elements. When using HTML, the output is rendered in bold.
+
+ See also \l {b-command}{\\b}.
+
+ \target underline-command
+ \section1 \\underline
+
+ The \\underline command renders its argument underlined.
+
+ \badcode *
+ /\1!
+ The \underline {F}ile menu gives the users the possibility
+ to edit an existing file, or save a new or modified
+ file, and exit the application.
+ \1/
+ \endcode
+
+ If the argument contains spaces or other punctuation, enclose the
+ argument in curly brackets.
+
+ \target backslash-sequence
+ \section1 \\\\ (double backslash)
+
+ The sequence \\\\ expands to a single backslash.
+
+ QDoc commands always start with a single backslash. To display a
+ single backslash in the text, you must type two backslashes. If
+ you want to display two backslashes, you must type four.
+
+ \badcode *
+ /\1!
+ The \\\\ command is useful if you want a
+ backslash to appear verbatim, for example,
+ writing C:\\windows\\home\\.
+ \1/
+ \endcode
+
+ However, if you want your text to appear in a monospace font as
+ well, you can use the \l {c-command} {\\c} command instead, which
+ accepts and renders the backslash as any other character. For
+ example:
+
+ \badcode *
+ /\1!
+ The \\c command is useful if you want a
+ backslash to appear verbatim, and the word
+ that contains it written in a monospace font,
+ like this: \c {C:\windows\home\}.
+ \1/
+ \endcode
+
+ \target endash-sequence
+ \section1 \-- (en dash)
+ QDoc renders double hyphens as an en dash. QDoc markup commands
+ designed to make their input appear verbatim---such as the \\c
+ command---won't replace the double hyphens with an en dash character.
+ For example:
+
+ \badcode *
+ /\1!
+ The \\c command -- useful if you want text in a monospace font --
+ is well documented.
+ \1/
+ \endcode
+
+ However, other commands may require that the hyphens are escaped to ensure
+ QDoc renders the output as expected. For example;
+
+ \badcode *
+ /\1!
+ This \l {endash-sequence}{link to the -- (endash) sequence}
+ isn't escaped and QDoc therefore renders an endash in the link
+ text. However, the escaped
+ \l {endash-sequence}{link to the \-- (endash) sequence}
+ renders both hyphens as intended.
+ \1/
+ \endcode
+
+ See also \l {emdash-sequence}{\-\-- (em dash)}.
+
+ \target emdash-sequence
+ \section1 -\-- (em dash)
+
+ QDoc renders triple hyphens as an en dash. QDoc markup commands
+ designed to make their input appear verbatim---such as the \\c
+ command---won't replace the triple hyphens with an en dash character.
+ For example:
+
+ \badcode *
+ /\1!
+ The \\c command---useful when you want text to be rendered
+ verbatim---is well documented.
+ \1/
+ \endcode
+
+ However, other commands may require that the hyphens are escaped to ensure
+ QDoc renders the output as expected. For example;
+
+ \badcode *
+ /\1!
+ This \l {emdash-sequence}{link to the --- (emdash) sequence}
+ isn't escaped and QDoc therefore renders an emdash in the link
+ text. However, the escaped
+ \l {emdash-sequence}{link to the -\-- (emdash) sequence}
+ renders both hyphens as intended.
+ \1/
+ \endcode
+
+ \note The escaped control sequence in this example is for the en dash.
+ This avoids a hyphen followed by an en dash in the output.
+
+ See also \l {endash-sequence}{\-- (en dash)}.
+*/
+
+
+/*!
+ \page 05-qdoc-commands-documentstructure.html
+ \previouspage Text Markup
+ \nextpage Including Code Inline
+
+ \title Document Structure
+
+ The document structuring commands are for dividing your document
+ into sections. QDoc supports four levels of section: \c \section1,
+ \c \section2, \c \section3, and \c \section4. The section commands
+ correspond to the traditional section, subsection, etc used in
+ outlining.
+
+ \section1 Section commands
+
+ In general a document structuring command considers everything
+ that follows it until the first line break as its argument. The
+ argument is rendered as the unit's title. If the title needs to be
+ spanned over several lines, make sure that each line (except the
+ last one) is ended with a backslash.
+
+ In total, there are four levels for sections in QDoc: \c \section1,
+ \c \section2, \c \section3 and \c \section4. These correspond to the
+ traditional section, subsection, subsubsection and subsubsubsection.
+
+ There is a strict ordering of the section units:
+
+ \code
+ section1
+ |
+ section2
+ |
+ section3
+ |
+ section4
+ \endcode
+
+ When sections are used, the first section command should be \c section1.
+
+ \badcode *
+ /\1!
+ \section1 Basic Qt
+
+ This is the first section.
+
+
+ \section2 Getting Started
+
+ This is the first subsection.
+
+
+ \section3 Hello Qt
+
+ This is the first subsubsection.
+
+
+ \section3 Making Connections
+
+ This is the second subsubsection.
+
+
+ \section3 Using the Reference Documentation
+
+ This is the third subsubsection.
+
+
+ \section2 Creating Dialogs
+
+ This is the second subsection.
+
+
+ \section3 Subclassing QDialog
+
+ This is the first subsubsection.
+
+ ...
+
+
+ \section1 Intermediate Qt
+
+ This is the second section.
+
+
+ \section2 Layout Management
+
+ This is the second section's first subsection.
+
+
+ \section3 Basic Layouts
+
+ This is the first subsubsection.
+
+ ...
+ \1/
+ \endcode
+
+ Each section is a logical unit in the document. The section
+ heading appears in the automatically generated table of contents
+ that normally appears in the upper right-hand corner of the page.
+
+ \target sectionOne-command
+ \section1 \\section1
+
+ The \\section1 command starts a new section.
+
+ See \l{section-commands} {Section commands} for an explanation of the various
+ section units, command argument, and rendering.
+
+ \target sectionTwo-command
+ \section1 \\section2
+
+ The \\section2 command starts a new section.
+
+ See \l{section-commands} {Section commands} for an explanation of the various
+ section units, command argument, and rendering.
+
+ \target sectionThree-command
+ \section1 \\section3
+
+ The \\section3 command starts a new section.
+
+ See \l{section-commands} {Section commands} for an explanation of the various
+ section units, command argument, and rendering.
+
+ \target sectionFour-command
+ \section1 \\section4
+
+ The \\section4 command starts a new section.
+
+ See \l{section-commands} {Section commands} for an explanation of the various
+ section units, command argument, and rendering.
+
+*/
+
+
+/*!
+ \page 06-qdoc-commands-includecodeinline.html
+ \previouspage Document Structure
+ \nextpage Including External Code
+
+ \title Including Code Inline
+
+ The following commands are used to render source code without
+ formatting. The source code begins on a new line, rendered in the
+ code.
+
+ \note Although most of these commands are for rendering C++
+ code, the
+ \l{07-0-qdoc-commands-includingexternalcode.html#snippet-command}
+ {\\snippet} and
+ \l{07-0-qdoc-commands-includingexternalcode.html#codeline-command}
+ {\\codeline} commands are preferred over the others. These
+ commands allow equivalent code snippets for other Qt language
+ bindings to be substituted for the C++ snippets in the
+ documentation.
+
+ \target code-command
+ \section1 \\code
+
+ The \\code and \\endcode commands enclose a snippet of source code.
+
+ \note The \l {c-command} {\\c} command can be used for short code
+ fragments within a sentence. The \\code command is for longer code
+ snippets. It renders the code verbatim in a separate paragraph in
+ a html <pre> element, and parses the enclosed snippet, creating links
+ to any known types in the code.
+
+ For documenting command-line instructions, shell scripts, or any
+ content that is not in a Qt language recognized by QDoc, use
+ \l {badcode-command}{\\badcode} instead.
+
+ When processing the \\code command, QDoc removes all indentation
+ that is common for the verbatim code blocks within a \c{/}\c{*!}
+ ... \c{*}\c{/} comment before it adds the standard indentation.
+
+ \note This doesn't apply to externally quoted code using the \l
+ {quotefromfile-command} {\\quotefromfile} or \l
+ {quotefile-command} {\\quotefile} command.
+
+ \code \\endcode *
+ /*!
+ \code
+ #include <QApplication>
+ #include <QPushButton>
+
+ int main(int argc, char *argv[])
+ {
+ ...
+ }
+ \1
+ \2/
+ \endcode
+
+ Other QDoc commands are disabled within \\code... \\endcode, and
+ the special character '\\' is accepted and rendered like the rest
+ of the code, unless it is followed by a digit and parameters were
+ passed to \\code.
+
+ \section2 Highlighting and autolinking
+
+ The \\code commands attempts to parse its contents as code of a
+ specific language, as defined in the \l {language-variable}{language}
+ configuration variable. This provides highlighting and automatic
+ linking to types detected in the code.
+
+ As an exception since QDoc version 6.4, when the \\code command
+ is used within a QML-specific \l {Topic Commands}{topic}, QDoc
+ first attempts to recognize the code as QML; for other topics,
+ the language configuration variable takes precedence. To
+ explicitly mark the code snippet as QML, use the \l {qml-command}
+ {\\qml} command instead.
+
+ \section2 Code snippet parameters
+
+ Since QDoc version 5.12, \\code command accepts also optional
+ parameters. Parameters are useful for injecting simple
+ strings into the code snippet. To inject a string to a specific
+ location in the snippet, add a backslash followed by a digit (1..8).
+ The digits correspond with the order of the argument list, where
+ arguments are separated by spaces.
+
+ For example:
+
+ \badcode 1 2 * endcode
+ /\3!
+ \code * hello
+ /\\1 \\2 \\1/
+ \\4
+ \3/
+ \endcode
+
+ For the above snippet, QDoc renders the word \e hello enclosed in
+ a C-style comment.
+
+ \section2 Including code from external files
+
+ To include code snippets from an external file, use the
+ \l{snippet-command}{\\snippet} and \l{codeline-command}
+ {\\codeline} commands.
+
+ See also \l {c-command}{\\c}, \l {qml-command}{\\qml},
+ \l {badcode-command}{\\badcode}, \l {quotefromfile-command}
+ {\\quotefromfile}, and \l {language-variable}{language}.
+
+ \target badcode-command
+ \section1 \\badcode
+
+ Similar to \l {code-command}{\\code}, \\badcode and \\endcode commands
+ enclose content that is rendered verbatim in a separate paragraph, but no
+ parsing or automatic link creation is performed. Instead, the content is
+ treated as plain text.
+
+ Substitute \\code with this command when documenting command-line
+ instructions, shell scripts or any other content that is not in a Qt
+ language, but should still be styled similarly to a \\code paragraph.
+
+ Like \\code, \\badcode accepts also optional parameters.
+
+ \target qml-command
+ \section1 \\qml
+
+ The \\qml and \\endqml commands enclose a snippet of QML source
+ code. Use these for proper syntax highlighting of QML code snippets.
+ The enclosed snippet must be complete as if it was a valid .qml file.
+ If the snippet is incomplete, QDoc will issue a warning and ignore the
+ snippet.
+
+ \badcode *
+ /\1!
+ \qml
+ import QtQuick 2.0
+
+ Row {
+ Rectangle {
+ width: 100; height: 100
+ color: "blue"
+ transform: Translate { y: 20 }
+ }
+ Rectangle {
+ width: 100; height: 100
+ color: "red"
+ transform: Translate { y: -20 }
+ }
+ }
+ \endqml
+ \1/
+ \endcode
+
+ Like the \l{code-command}{\\code} command, \\qml accepts optional
+ parameters.
+*/
+
+
+/*!
+ \page 07-0-qdoc-commands-includingexternalcode.html
+ \previouspage Including Code Inline
+ \nextpage Creating Links
+
+ \title Including External Code
+
+ The following commands enable you to include code snippets from
+ external files. You can make QDoc include the complete contents of
+ a file, or you can quote specific parts of the file and skip
+ others. The typical use of the latter is to quote a file chunk by
+ chunk.
+
+ \note Although all these commands can be used for rendering C++
+ code, the
+ \l{07-0-qdoc-commands-includingexternalcode.html#snippet-command}
+ {\\snippet} and
+ \l{07-0-qdoc-commands-includingexternalcode.html#codeline-command}
+ {\\codeline} commands are preferred over the others. These
+ commands allow equivalent code snippets for other Qt language
+ bindings to be substituted for the C++ snippets in the
+ documentation.
+
+ \target quotefile-command
+ \section1 \\quotefile
+
+ The \\quotefile command expands to the complete contents of the
+ file given as argument.
+
+ The command considers the rest of the line as part of its
+ argument, make sure to follow the file name with a line break.
+
+ The file's contents is rendered in a separate paragraph, using a
+ monospace font and the standard indentation. The code is shown
+ verbatim.
+
+ \badcode *
+ /\1!
+ This is a simple "Hello world" example:
+
+ \quotefile examples/main.cpp
+
+ It contains only the bare minimum you need
+ to get a Qt application up and running.
+ \1/
+ \endcode
+
+ See also \l {quotefromfile-command} {\\quotefromfile} and
+ \l {code-command} {\\code}.
+
+
+ \target quotefromfile-command
+ \section1 \\quotefromfile
+
+ The \\quotefromfile command opens the file given as argument for
+ quoting.
+
+ The command considers the rest of the line as part of its
+ argument, make sure to follow the file name with a line break.
+
+ The command is intended for use when quoting parts from file with
+ the walkthrough commands: \l {printline-command} {\\printline}, \l
+ {printto-command} {\\printto}, \l {printuntil-command}
+ {\\printuntil}, \l {skipline-command} {\\skipline}, \l
+ {skipto-command} {\\skipto}, \l {skipuntil-command}
+ {\\skipuntil}. This enables you to quote specific portions of a
+ file.
+
+ \badcode *
+ /\1!
+ The whole application is contained within
+ the \c main() function:
+
+ \quotefromfile examples/main.cpp
+
+ \skipto main
+ \printuntil app(argc, argv)
+
+ First we create a QApplication object using
+ the \c argc and \c argv parameters.
+
+ \skipto QPushButton
+ \printuntil resize
+
+ Then we create a QPushButton, and give it a reasonable
+ size using the QWidget::resize() function.
+
+ ...
+ \1/
+ \endcode
+
+ QDoc remembers which file it is quoting from, and the current
+ position in that file (see \l {file} {\\printline} for more
+ information). There is no need to "close" the file.
+
+ See also \l {quotefile-command} {\\quotefile}, \l {code-command}
+ {\\code} and \l {dots} {\\dots}.
+
+ \target printline-command
+ \section1 \\printline
+
+ The \\printline command expands to the line from the current
+ position to the next non-blank line of the current source file.
+
+ To ensure that the documentation remains synchronized with the
+ source file, a substring of the line must be specified as an
+ argument to the command. Note that the command considers the rest
+ of the line as part of its argument, make sure to follow the
+ substring with a line break.
+
+ The line from the source file is rendered as a separate paragraph,
+ using a monospace font and the standard indentation. The code is
+ shown verbatim.
+
+ \badcode *
+ /\1!
+ There has to be exactly one QApplication object
+ in every GUI application that uses Qt.
+
+ \quotefromfile examples/main.cpp
+
+ \printline QApplication
+
+ This line includes the QApplication class
+ definition. QApplication manages various
+ application-wide resources, such as the
+ default font and cursor.
+
+ \printline QPushButton
+
+ This line includes the QPushButton class
+ definition. The QPushButton widget provides a command
+ button.
+
+ \printline main
+
+ The main function...
+ \1/
+ \endcode
+
+ \target file
+
+ QDoc reads the file sequentially. To move the current position
+ forward you can use either of the \l {skipline-command}
+ {\\skip...} commands. To move the current position backward, you
+ can use the \l {quotefromfile-command} {\\quotefromfile} command
+ again.
+
+ \target substring
+
+ If the substring argument is surrounded by slashes it is
+ interpreted as a \l {QRegularExpression}{regular expression}.
+
+ \badcode *
+ /\1!
+ \quotefromfile examples/mainwindow.cpp
+
+ \skipto closeEvent
+ \printuntil /^\}/
+
+ Close events are sent to widgets that the users want to
+ close, usually by clicking \c File|Exit or by clicking
+ the \c X title bar button. By reimplementing the event
+ handler, we can intercept attempts to close the
+ application.
+ \1/
+ \endcode
+
+ (\l {widgets/scribble} {The complete example file...})
+
+ The regular expression \c /^\}/ makes QDoc print until the first
+ '}' character occurring at the beginning of the line without
+ indentation. /.../ encloses the regular expression, and '^' means
+ the beginning of the line. The '}' character must be escaped since
+ it is a special character in regular expressions.
+
+ QDoc will emit a warning if the specified substring or regular
+ expression cannot be located, i.e. if the source code has changed.
+
+ See also \l {printto-command} {\\printto} and \l
+ {printuntil-command} {\\printuntil}.
+
+ \target printto-command
+ \section1 \\printto
+
+ The \\printto command expands to all the lines from the current
+ position up to and \e excluding the next line containing a given
+ substring.
+
+ The command considers the rest of the line as part of its
+ argument, make sure to follow the substring with a line break. The
+ command also follows the same conventions for \l {file}
+ {positioning} and \l {substring} {argument} as the \l
+ {printline-command} {\\printline} command.
+
+ The lines from the source file are rendered in a separate
+ paragraph, using a monospace font and the standard
+ indentation. The code is shown verbatim.
+
+ \badcode *
+ /\1!
+ The whole application is contained within the
+ \c main() function:
+
+ \quotefromfile examples/main.cpp
+ \printto hello
+
+ First we create a QApplication object using the \c argc and
+ \c argv parameters...
+ \1/
+ \endcode
+
+ See also \l {printline-command} {\\printline} and \l
+ {printuntil-command} {\\printuntil}.
+
+ \target printuntil-command
+ \section1 \\printuntil
+
+ The \\printuntil command expands to all the lines from the current
+ position up to and \e including the next line containing a given
+ substring.
+
+ The command considers the rest of the line as part of its
+ argument, make sure to follow the substring with a line break. The
+ command also follows the same conventions for \l {file}
+ {positioning} and \l {substring} {argument} as the \l
+ {printline-command} {\\printline} command.
+
+ If \\printuntil is used without an argument, it expands to all the
+ lines from the current position to the end of the quoted file.
+
+ The lines from the source file are rendered in a separate
+ paragraph, using a monospace font and the standard
+ indentation. The code is shown verbatim.
+
+ \badcode *
+ /\1!
+ The whole application is contained within the
+ \c main() function:
+
+ \quotefromfile examples/main.cpp
+ \skipto main
+ \printuntil hello
+
+ First we create a QApplication object using the
+ \c argc and \c argv parameters, then we create
+ a QPushButton.
+ \1/
+ \endcode
+
+ See also \l {printline-command} {\\printline} and \l
+ {printto-command} {\\printto}.
+
+ \target skipline-command
+ \section1 \\skipline
+
+ The \\skipline command ignores the next non-blank line in the
+ current source file.
+
+ Doc reads the file sequentially, and the \\skipline command is
+ used to move the current position (omitting a line of the source
+ file). See the remark about \l {file} {file positioning} above.
+
+ The command considers the rest of the line as part of its
+ argument, make sure to follow the substring with a line break. The
+ command also follows the same conventions for \l {substring}
+ {argument} as the \l {printline-command} {\\printline} command,
+ and it is used in conjunction with the \l {quotefromfile-command}
+ {\\quotefromfile} command.
+
+ \badcode *
+ /\1!
+ QPushButton is a GUI push button that the user
+ can press and release.
+
+ \quotefromfile examples/main.cpp
+ \skipline QApplication
+ \printline QPushButton
+
+ This line includes the QPushButton class
+ definition. For each class that is part of the
+ public Qt API, there exists a header file of
+ the same name that contains its definition.
+ \1/
+ \endcode
+
+
+ See also \l {skipto-command} {\\skipto}, \l {skipuntil-command}
+ {\\skipuntil} and \l {dots} {\\dots}.
+
+ \target skipto-command
+ \section1 \\skipto
+
+ The \\skipto command ignores all the lines from the current
+ position up to and \e excluding the next line containing a given
+ substring.
+
+ QDoc reads the file sequentially, and the \\skipto command is used
+ to move the current position (omitting one or several lines of the
+ source file). See the remark about \l {file} {file positioning}
+ above.
+
+ The command considers the rest of the line as part of its
+ argument, make sure to follow the substring with a line break.
+
+ The command also follows the same conventions for \l {substring}
+ {argument} as the \l {printline-command} {\\printline} command,
+ and it is used in conjunction with the \l {quotefromfile-command}
+ {\\quotefromfile} command.
+
+ \badcode *
+ /\1!
+ The whole application is contained within
+ the \c main() function:
+
+ \quotefromfile examples/main.cpp
+ \skipto main
+ \printuntil }
+
+ First we create a QApplication object. There
+ has to be exactly one such object in
+ every GUI application that uses Qt. Then
+ we create a QPushButton, resize it to a reasonable
+ size ...
+ \1/
+ \endcode
+
+ See also \l {skipline-command} {\\skipline}, \l
+ {skipuntil-command} {\\skipuntil} and \l {dots} {\\dots}.
+
+ \target skipuntil-command
+ \section1 \\skipuntil
+
+ The \\skipuntil command ignores all the lines from the current
+ position up to and \e including the next line containing a given
+ substring.
+
+ QDoc reads the file sequentially, and the \\skipuntil command is
+ used to move the current position (omitting one or several lines
+ of the source file). See the remark about \l {file} {file
+ positioning} above.
+
+ The command considers the rest of the line as part of its
+ argument, make sure to follow the substring with a line break.
+
+ The command also follows the same conventions for \l {substring}
+ {argument} as the \l {printline-command} {\\printline} command,
+ and it is used in conjunction with the \l {quotefromfile-command}
+ {\\quotefromfile} command.
+
+ \badcode *
+ /\1!
+ The first thing we did in the \c main() function
+ was to create a QApplication object \c app.
+
+ \quotefromfile examples/main.cpp
+ \skipuntil show
+ \dots
+ \printuntil }
+
+ In the end we must remember to make \c main() pass the
+ control to Qt. QCoreApplication::exec() will return when
+ the application exits...
+ \1/
+ \endcode
+
+ See also \l {skipline-command} {\\skipline}, \l {skipto-command}
+ {\\skipto} and \l {dots} {\\dots}.
+
+ \target dots-command
+ \section1 \\dots
+
+ The \\dots command indicates that parts of the source file have
+ been omitted when quoting a file.
+
+ The command is used in conjunction with the \l
+ {quotefromfile-command} {\\quotefromfile} command, and should be
+ stated on its own line. The dots are rendered on a new line, using
+ a monospace font.
+
+ \badcode *
+ /\1!
+ \quotefromfile examples/main.cpp
+ \skipto main
+ \printuntil {
+ \dots
+ \skipuntil exec
+ \printline }
+ \1/
+ \endcode
+
+ The default indentation is 4 spaces, but this can be adjusted
+ using the command's optional argument.
+
+ \badcode *
+ /\1!
+ \dots 0
+ \dots
+ \dots 8
+ \dots 12
+ \dots 16
+ \1/
+ \endcode
+
+ See also \l {skipline-command} {\\skipline}, \l {skipto-command}
+ {\\skipto} and \l {skipuntil-command} {\\skipuntil}.
+
+ \target snippet-command
+ \section1 \\snippet
+
+ The \\snippet command causes a code snippet to be included
+ verbatim as preformatted text, which may be syntax highlighted.
+
+ Each code snippet is referenced by the file that holds it and by
+ a unique identifier for that file. Snippet files are typically
+ stored in a \c{snippets} directory inside the documentation
+ directory (for example, \c{$QTDIR/doc/src/snippets}).
+
+ For example, the following documentation references a snippet in a
+ file residing in a subdirectory of the documentation directory:
+
+ \code
+ \snippet snippets/textdocument-resources/main.cpp Adding a resource
+ \endcode
+
+ The text following the file name is the unique identifier for the
+ snippet. This is used to delimit the quoted code in the relevant
+ snippet file, as shown in the following example that corresponds to
+ the above \c{\snippet} command:
+
+ \code
+ ...
+ QImage image(64, 64, QImage::Format_RGB32);
+ image.fill(qRgb(255, 160, 128));
+
+//! [Adding a resource]
+ document->addResource(QTextDocument::ImageResource,
+ QUrl("mydata://image.png"), QVariant(image));
+//! [Adding a resource]
+ ...
+ \endcode
+
+ By default, QDoc looks for \c{//!} as a code snippet marker.
+ For \c{.pro}, \c{.py}, \c{.cmake}, and \c{CMakeLists.txt}
+ files, \c {#!} is detected. Finally, \c{<!--} is accepted in
+ \c{.html}, \c{.qrc}, \c{.ui}, \c{.xml}, and \c{.xq} files.
+
+ \target codeline-command
+ \section1 \\codeline
+
+ The \\codeline command inserts a blank line of preformatted
+ text. It is used to insert gaps between snippets without closing
+ the current preformatted text area and opening a new one.
+
+*/
+
+
+/*!
+ \page 08-qdoc-commands-creatinglinks.html
+ \previouspage Including External Code
+ \nextpage Including Images
+
+ \title Creating Links
+
+ These commands are for creating hyperlinks to classes, functions,
+ examples, and other targets.
+
+ \target l-command
+ \section1 \\l (link)
+
+ The \\l link command is used to create a hyperlink to many
+ different kinds of targets. The command's general syntax is:
+
+ \code
+ \l [ link criteria ] { link target } { link text }
+ \endcode
+
+ ...where the \c {link criteria} in square brackets are optional
+ but may be required when the \c {link target} is ambiguous. See
+ \l {Fixing Ambiguous Links} below.
+
+ Here is an example using the \\l command to link to an external page:
+
+ \badcode *
+ /\1!
+ Read the \l {http://doc.qt.io/qt-6/}
+ {Qt 6 Documentation} carefully.
+ \1/
+ \endcode
+
+ If the link target is equivalent to the link text, the second
+ argument can be omitted.
+
+ For example, if you have documentation like:
+
+ \badcode *
+ /\1!
+ \target assertions
+
+ Assertions make some statement about the text at the
+ point where they occur in the regexp, but they do not
+ match any characters.
+
+ ...
+
+ Regexps are built up from expressions, quantifiers, and
+ \l {assertions} {assertions}.
+ \1/
+ \endcode
+
+ You can simplify this as follows:
+
+ \badcode *
+ /\1!
+ \target assertions
+
+ Assertions make some statement about the text at the
+ point where they occur in the regexp, but they do not
+ match any characters.
+
+ ...
+
+ Regexps are built up from expressions, quantifiers, and
+ \l assertions.
+ \1/
+ \endcode
+
+ For the one-parameter version, the braces can often be omitted.
+ The \\l command supports several ways of linking:
+
+ \list
+
+ \li \c {\l QWidget} - The name of a class documented with the \l
+ {class-command} {\\class} command.
+
+ \li \c {\l QWidget::sizeHint()} - The signature of a function without
+ parameters. If a matching function without parameters can't be found,
+ the link is satisfied with the first matching function found.
+
+ \li \c {\l QWidget::removeAction(QAction* action)} - The signature
+ of a function with parameters. If an exact match is not found, the
+ link is not satisfied and QDoc reports a \e {Can't link to...} error.
+
+ \li \c {\l <QtGlobal>} - The subject of a \l {headerfile-command}
+ {\\headerfile} command.
+
+ \li \c {\l widgets/wiggly} - The relative path used in an \l
+ {example-command} {\\example} command.
+
+ \li \c {\l {QWidget Class Reference}} - The title used in a
+ \l {title-command} {\\title} command.
+
+ \li \c {\l {Introduction to QDoc}}- The text from one of the
+ \l{section-commands} {Section commands}.
+
+ \li \c {\l fontmatching} - The argument of a \l {target-command}
+ {\\target} command.
+
+ \li \c {\l {Shared Classes}} - A keyword named in a \l
+ {keyword-command} {\\keyword} command.
+
+ \li \c {\l http://qt-project.org/} - A URL.
+
+ \endlist
+
+ QDoc also tries to make a link out of any word that doesn't
+ resemble a normal English word, for example, Qt class names or
+ functions, like QWidget or QWidget::sizeHint(). In these cases,
+ the \\l command can actually be omitted, but by using the command,
+ you ensure that QDoc will emit a warning if it cannot find the
+ link target. In addition, if you only want the function name to
+ appear in the link, you can use the following syntax:
+
+ \list
+ \li \c {\l {QWidget::} {sizeHint()}}
+ \endlist
+
+ \section2 Fixing Ambiguous Links
+
+ Because of the modularization of Qt beginning with Qt 5.0, The
+ possibility that QDoc will have to deal with ambiguous links has
+ increased. An ambiguous link is one that has a matching target in
+ more than one Qt module, e.g. the same section title can appear in
+ more than one Qt module, or the name of a C++ class in one module
+ can also be the name of a QML type in another module. A real
+ example in Qt5 is the name Qt itself. Qt is the name of both a C++
+ namespace in QtCore and a QML type in QtQml.
+
+ Suppose we want to link to the \l {Qt} {Qt C++ namespace}. At the
+ time QDoc generated this HTML page, that link was correct. Does
+ it still go to the C++ namespace? Qdoc generated that link from
+ this link command:
+
+ \list
+ \li \c {\l {Qt} {Qt C++ namespace}}
+ \endlist
+
+ Now suppose we want to link to the \l [QML] {Qt} {Qt QML type}.
+ At the time QDoc generated this HTML page, that link was also
+ correct, but we had to use this link command:
+
+ \list
+ \li \c {\l [QML] {Qt} {Qt QML type}}
+ \endlist
+
+ The \e {QML} in \e {square brackets} tells QDoc to accept a
+ matching target only if the target is on a QML page. Qdoc actually
+ finds the C++ namespace target first, but since that target is on
+ a C++ page, QDoc ignores it and keeps looking until it finds the
+ same target on a QML page.
+
+ Without the guidance in the \e{\\l command} in the optional \e
+ {square bracket} argument, QDoc links to the first matching target
+ it finds. QDoc can't warn that the link was ambiguous in such
+ cases because it doesn't know that another matching target exists.
+
+ \section2 What arguments can appear in square brackets?
+
+ A link command with square bracket argument has the following syntax:
+ \list
+ \c {\l [QML|CPP|DOC|QtModuleName] {link target} {link text}}
+ \endlist
+
+ The \e {square bracket} argument is only allowed in the \c {\l
+ (link)} command. The example above shows how \c QML is used as the
+ \e {square brackets} argument to force QDoc to match a QML target.
+ Most often, this will be a QML type, but it can also be a QML
+ member function of property.
+
+ In the example, QDoc didn't need a \e {square bracket} argument to
+ find the Qt C++ namespace page, because that one was the first
+ matching target QDoc found anyway. However, to force QDoc to find
+ a C++ target when a matching QML target gets in the way, \c CPP
+ can be used as the \e {square bracket} argument. For example:
+
+ \list
+ \li \c {\l [CPP] {Qt} {Qt C++ namespace}}
+ \endlist
+
+ ...will force QDoc to ignore the Qt QML type and continue
+ searching until it matches the Qt C++ namespace.
+
+ If the link target is neither a C++ nor a QML entity, \c {DOC} can
+ be used as the \e {square bracket} argument to prevent QDoc from
+ matching either of those. At this writing, there were no cases of
+ ambiguous links where using \c {DOC} was required.
+
+ Often, the documentor knows which Qt module the link target is
+ in. When the module name is known, use the module name as the \e
+ {square bracket} argument. In the example above, if we know that
+ the QML type named Qt is located in the QtQml module, we can write
+ the link command like this:
+
+ \list
+ \li \c {\l [QtQml] {Qt} {Qt QML type}}
+ \endlist
+
+ When a module name is used as the \e {square bracket} argument,
+ QDoc will search for the link target in that module only. This
+ makes searching for link targets more efficient.
+
+ Finally, the module name and entity type arguments can be
+ combined, separated by a blank, so something like this is also
+ allowed:
+
+ \list
+ \li \c {\l [CPP QtQml] {Window} {C++ class Window}}
+ \endlist
+
+ As of this writing, there were no cases where combining the two
+ was required.
+
+ See also \l {sa-command} {\\sa}, \l {target-command} {\\target},
+ and \l {keyword-command} {\\keyword}.
+
+
+ \target sa-command
+ \section1 \\sa (see also)
+
+ The \\sa command defines a list of links that will be rendered in
+ a separate "See also" section at the bottom of the documentation
+ unit.
+
+ The command takes a comma-separated list of links as its
+ argument. If the line ends with a comma, you can continue
+ the list on the next line. The general syntax is:
+
+ \code
+ \sa {the first link}, {the second link},
+ {the third link}, ...
+ \endcode
+
+ QDoc will automatically try to generate "See also" links
+ interconnecting a property's various functions. For example, a
+ setVisible() function will automatically get a link to visible()
+ and vice versa.
+
+ In general, QDoc will generate "See also" links that interconnect
+ the functions that access the same property. It recognizes four
+ different syntax versions:
+
+ \list
+ \li \c property()
+ \li \c setProperty()
+ \li \c isProperty()
+ \li \c hasProperty()
+ \endlist
+
+ The \\sa command supports the same kind of links as the \l
+ {l-command} {\\l} command.
+
+ \badcode *
+ /\1!
+ Appends the actions \a actions to this widget's
+ list of actions.
+
+ \sa removeAction(), QMenu, addAction()
+ \1/
+ void QWidget::addActions(QList<QAction *> actions)
+ {
+ ...
+ }
+ \endcode
+
+ See also \l {l-command} {\\l}, \l {target-command} {\\target} and
+ \l {keyword-command} {\\keyword}.
+
+
+ \target target-command
+ \section1 \\target
+
+ The \\target command names a place in the documentation that you
+ can link to using the \l {l-command} {\\l (link)} and \l
+ {sa-command} {\\sa (see also)} commands.
+
+ \e{The text up to the line break becomes the target name}. Be sure
+ to follow the target name with a line break. Curly brackets are not
+ required around the target name, but they may be required when the
+ target name is used in a link command. See below.
+
+ \badcode *
+ /\1!
+ \target capturing parentheses
+ \section1 Capturing Text
+
+ Parentheses allow us to group elements together so that
+ we can quantify and capture them.
+
+ ...
+ \1/
+ \endcode
+
+ The target name \e{capturing parentheses} can be linked to
+ in the following way:
+
+ \list
+ \li \c {\l {capturing parentheses}}
+ \endlist
+
+ \note The brackets in the link example are required because the
+ target name contains spaces.
+
+ \section2 \\target in a \\table
+ When you use the \\target command in a table, make sure that the
+ \\target command follows a \l {li-command}{\\li}-command (table
+ cell), and that it's either on a separate line, or the last content
+ that occurs in the line it's in. This is due to how the \\target
+ command works; it consumes anything up to the next line break as
+ its parameter. In other words, if you have a table and need a
+ \\target within it, make sure that it follows the following
+ structure:
+
+ \badcode
+ \table
+ \row
+ \li \target my-target
+ My text goes here.
+ \li This is my next table cell.
+ \endtable
+ \endcode
+
+ See also \l {l-command} {\\l}, \l {sa-command} {\\sa} and \l
+ {keyword-command} {\\keyword}.
+
+ \target keyword-command
+ \section1 \\keyword
+
+ The \\keyword command names a place in the documentation that you
+ can link to using the \l {l-command} {\\l (link)} and \l
+ {sa-command} {\\sa (see also)} commands.
+
+ The \\keyword command is like the \l {target-command} {\\target}
+ command, except when linking to keyword the link goes to the top of
+ the QDoc comment where the \\keyword appears in. If you want to
+ create a link target to a \c section unit within a \\page, use
+ \\target instead. A keyword can be linked from anywhere using a
+ simple syntax.
+
+ Keywords must be unique over all the documents processed during
+ the QDoc run. The command uses the rest of the line as its
+ argument. Be sure to follow the keyword with a line break.
+
+
+ \badcode *
+ /\1!
+ \class QRegularExpression
+ \reentrant
+ \brief The QRegularExpression class provides pattern
+ matching using regular expressions.
+ \ingroup tools
+ \ingroup misc
+ \ingroup shared
+
+ \keyword regular expression
+
+ Regular expressions, or "regexps", provide a way to
+ find patterns within text.
+
+ ...
+ \1/
+ \endcode
+
+ The location marked with the keyword can be linked to with:
+
+ \badcode *
+ /\1!
+ When a string is surrounded by slashes, it is
+ interpreted as a \l {regular expression}.
+ \1/
+ \endcode
+
+ If the keyword text contains spaces, the brackets are required.
+
+ See also \l {l-command} {\\l (link)}, \l {sa-command} {\\sa (see
+ also)} and \l {target-command} {\\target}.
+
+*/
+
+
+/*!
+ \page 09-qdoc-commands-includingimages.html
+ \previouspage Creating Links
+ \nextpage Tables and Lists
+
+ \title Including Images
+
+ The graphic commands makes it possible to include images in the
+ documentation. The images can be rendered as separate paragraphs,
+ or within running text.
+
+ \target image-command
+ \section1 \\image
+
+ The \\image command expands to the image specified by its first
+ argument, and renders it centered as a separate paragraph.
+
+ The command takes two arguments. The first argument is the name of
+ the image file. The second argument is optional and is a simple
+ description of the image, equivalent to the HTML alt="" in an image
+ tag. The description is used for tooltips and for browsers that don't
+ support images, like the Lynx text browser.
+
+ The remaining text \e{after} the file name is the optional,
+ description argument. Be sure to follow the file name or the
+ description with a line break. Curly brackets are required if the
+ description argument spans multiple lines.
+
+ \badcode *
+ /\1!
+ Qt is a C++ toolkit for cross-platform GUI application development.
+
+ \image happyguy.jpg "Happy guy"
+
+ Qt provides single-source portability across Microsoft
+ Windows, macOS, Linux, and all major commercial Unix
+ variants. It is also available for embedded devices.
+ \1/
+ \endcode
+
+ See also \l {inlineimage-command} {\\inlineimage} and \l
+ {caption-command} {\\caption}.
+
+ \target inlineimage-command
+ \section1 \\inlineimage
+
+ The \\inlineimage command expands to the image specified by its
+ argument. The image is rendered inline with the rest of the text.
+
+ The command takes two arguments. The first argument is the name of
+ the image file. The second argument is optional and is a simple
+ description of the image within braces {}, equivalent to the HTML
+ alt="" in an image tag. The description is used for tooltips, and
+ for when a browser doesn't support images, like the Lynx text browser.
+
+ The most common use of the \\inlineimage command is in lists and
+ tables. Here is an example of including inline images in a list:
+
+ \badcode *
+ /\1!
+ \list 1
+ \li \inlineimage happy.gif {Oh so happy, I am a caption!}
+ \li \inlineimage happy.gif Oh so happy, but I'm not a caption.
+ \endlist
+ \1/
+ \endcode
+
+ Here is an example of including inline images in a table:
+
+ \badcode *
+ /\1!
+ \table
+ \header
+ \li Qt
+ \li Qt Creator
+ \row
+ \li \inlineimage happy.gif {Oh so happy!}
+ \li \inlineimage happy.gif Oh so happy!
+ \row
+ \li \inlineimage happy.gif Oh so happy!
+ \li \inlineimage happy.gif {Oh so happy!}
+ \endtable
+ \1/
+ \endcode
+
+ The command can also be used to insert an image inline with the
+ text.
+
+ \badcode *
+ /\1!
+ \inlineimage training.jpg {Qt Training} The Qt Programming course is
+ offered as a five day Open Enrollment Course. The classes are open to
+ the public. Although the course is open to anyone who wants to learn,
+ attendees should have significant experience in C++ development to
+ derive maximum benefit from the course.
+ \1/
+ \endcode
+
+ See also \l {image-command} {\\image} and \l {caption-command} {\\caption}.
+
+ \target caption-command
+ \section1 \\caption
+
+ The \\caption command provides a caption for an image.
+
+ The command takes all the text up to the end of the paragraph to
+ be the caption. Experiment until you get the effect you want.
+
+ \badcode *
+ /\1!
+ \table 100%
+ \row
+ \li \image windows-pushbutton.png
+ \caption The QPushButton widget provides a command button.
+ \li \image windows-toolbutton.png
+ \caption The QToolButton class provides a quick-access button to commands
+ or options, usually used inside a QToolBar.
+ \endtable
+ \1/
+ \endcode
+
+ See also \l {image-command} {\\image} and \l {inlineimage-command}
+ {\\inlineimage}
+*/
+
+
+/*!
+ \page 10-qdoc-commands-tablesandlists.html
+ \previouspage Including Images
+ \nextpage Special Content
+
+ \title Tables and Lists
+
+ These commands enable creating lists and tables. A list is
+ rendered left aligned as a separate paragraph. A table is rendered
+ centered as a separate paragraph. The table width depends on the
+ width of its contents.
+
+ \target table-command
+ \section1 \\table
+
+ The \\table and \\endtable commands delimit the contents of a
+ table.
+
+ The command accepts a single argument specifying the table's width
+ as a percentage of the page width:
+
+ \badcode *
+ /\1!
+ \table 100 %
+
+ ...
+
+ \endtable
+ \1/
+ \endcode
+
+ The code above ensures that the table will fill all available
+ space. If the table's width is smaller than 100 %, the table will
+ be centered in the generated documentation.
+
+ A table can contain headers, rows and columns. A row starts with a
+ \l {row-command} {\\row} command and consists of cells, each of which
+ starts with an \l {li-command} {\\li} command. There is also a \l
+ {header-command} {\\header} command which is a special kind of row
+ that has a special format.
+
+ \badcode *
+ /\1!
+ \table
+ \header
+ \li Qt Core Feature
+ \li Brief Description
+ \row
+ \li \l {Signal and Slots}
+ \li Signals and slots are used for communication
+ between objects.
+ \row
+ \li \l {Layout Management}
+ \li The Qt layout system provides a simple
+ and powerful way of specifying the layout
+ of child widgets.
+ \row
+ \li \l {Drag and Drop}
+ \li Drag and drop provides a simple visual
+ mechanism which users can use to transfer
+ information between and within applications.
+ \endtable
+ \1/
+ \endcode
+
+ You can also make cells span several rows and columns. For
+ example:
+
+ \badcode *
+ /\1!
+ \table
+ \header
+ \li {3,1} This header cell spans three columns,
+ but only one row.
+ \row
+ \li {2, 1} This table cell spans two columns,
+ but only one row
+ \li {1, 2} This table cell spans only one column,
+ but two rows.
+ \row
+ \li A regular table cell
+ \li A regular table cell
+ \endtable
+ \1/
+ \endcode
+
+ See also \l {header-command} {\\header}, \l {row-command} {\\row} and \l {li-command} {\\li}.
+
+ \target header-command
+ \section1 \\header
+
+ The \\header command indicates that the following table cells are
+ the current table's column headers.
+
+ The command can only be used within the \l{table-command}
+ {\\table...\\endtable} commands. A header can contain several
+ cells. A cell is created with the \l {li-command} {\\li} command.
+
+ A header cell's text is centered within the table cell and
+ rendered using a bold font.
+
+ \badcode *
+ /\1!
+ \table
+ \header
+ \li Qt Core Feature
+ \li Brief Description
+ \row
+ \li \l {Signal and Slots}
+ \li Signals and slots are used for communication
+ between objects.
+ \endtable
+ \1/
+ \endcode
+
+ See also \l {table-command} {\\table}, \l {row-command} {\\row} and \l {li-command} {\\li}.
+
+ \target row-command
+ \section1 \\row
+
+ The \\row command begins a new row in a table. The \l {li-command}
+ {\\li items} that belong in the new row will immediately follow the
+ \\row.
+
+ The command can only be used within the \l{table-command}
+ {\\table...\\endtable} commands. A row can contain several
+ cells. A cell is created with the \l {li-command} {\\li} command.
+
+ The background cell color of each row alternates between two
+ shades of grey, making it easier to distinguish the rows from each
+ other. The cells' contents is left aligned.
+
+ \badcode *
+ /\1!
+ \table
+ \header
+ \li Qt Core Feature
+ \li Brief Description
+ \row
+ \li \l {Signal and Slots}
+ \li Signals and slots are used for communication
+ between objects.
+ \row
+ \li \l {Layout Management}
+ \li The Qt layout system provides a simple
+ and powerful way of specifying the layout
+ of child widgets.
+ \row
+ \li \l {Drag and Drop}
+ \li Drag and drop provides a simple visual
+ mechanism which users can use to transfer
+ information between and within applications.
+ \endtable
+ \1/
+ \endcode
+
+ See also \l {table-command} {\\table}, \l {header-command}
+ {\\header}, and \l {li-command} {\\li}.
+
+ \target value-command
+ \section1 \\value
+
+ The \\value command starts the documentation of a C++ enum item.
+
+ The command's first argument is the value name. The value name may
+ be preceded by an optional \e since clause enclosed in square
+ brackets. The value description follows the value name. The description
+ ends at the next blank line or \\value. The arguments are rendered in a
+ table.
+
+ \note To include images in the \\value description, use the
+ \l {inlineimage-command}{\\inlineimage} command.
+
+ Without a \e since clause, a \\value command could look like this:
+
+ \code
+ \value QtInfoMsg A message generated by the qInfo() function.
+ \endcode
+
+ The same command with a \e since clause would look like this:
+
+ \code
+ \value [since 5.5] QtInfoMsg A message generated by the qInfo() function.
+ \endcode
+
+ The documentation will be located in the associated class, header
+ file or namespace documentation. See the \l {enum-command}
+ {\\enum} documentation for an example.
+
+ \note Since Qt 5.4, \\value command can also be used outside the
+ \l {enum-command} {\\enum} topic. In this case, QDoc renders a
+ two-column table listing the constant name (taken as-is from the
+ first argument) and its description. This can be used, for
+ example, in \l {qmlproperty-command}{\\qmlproperty} topic for
+ documenting acceptable values for a QML enumeration property.
+
+ See also \l {enum-command} {\\enum} and \l {omitvalue-command} {\\omitvalue}.
+
+ \target omitvalue-command
+ \section1 \\omitvalue
+
+ The \\omitvalue command excludes a C++ enum item from the
+ documentation.
+
+ The command's only mandatory argument is the name of the enum item
+ that will be omitted. If the enum item is followed by a single-line
+ description, that is also omitted.
+
+ See the \l {enum-command} {\\enum} documentation for an example.
+
+ See also \l {enum-command} {\\enum} and \l {value-command}
+ {\\value} \l {since-command}{\\since}
+
+ \target list-command
+ \section1 \\list
+
+ The \\list and \\endlist commands delimit a list of items.
+
+ Create each list item with the \l {li-command} {\\li} command. A
+ list always contains one or more items. Lists can be nested. For
+ example:
+
+ \badcode *
+ /\1!
+ \list
+ \li Qt Reference Documentation: Getting Started
+ \list
+ \li How to Learn Qt
+ \li Installation
+ \list
+ \li Qt/X11
+ \li Qt/Windows
+ \li Qt/Mac
+ \li Qt/Embedded
+ \endlist
+ \li Tutorial and Examples
+ \endlist
+ \endlist
+ \1/
+ \endcode
+
+ The \\list command takes an optional argument providing
+ alternative appearances for the list items.
+
+ \badcode *
+ /\1!
+ \list
+ \li How to Learn Qt
+ \li Installation
+ \li Tutorial and Examples
+ \endlist
+ \1/
+ \endcode
+
+ If you provide 'A' as an argument to the \\list command, the
+ bullets are replaced with characters in alphabetical order:
+
+ \list A
+ \li How to Learn Qt
+ \li Installation
+ \li Tutorial and Examples
+ \endlist
+
+ If you replace 'A' with '1', the list items are numbered in
+ ascending order:
+
+ \list 1
+ \li How to Learn Qt
+ \li Installation
+ \li Tutorial and Examples
+ \endlist
+
+ If you provide 'i' as the argument, the bullets are replaced with
+ roman numerals:
+
+ \list i
+ \li How to Learn Qt
+ \li Installation
+ \li Tutorial and Examples
+ \endlist
+
+ Finally, you can make the list items appear with roman numbers
+ following in ascending order if you provide 'I' as the optional
+ argument:
+
+ \list I
+ \li How to Learn Qt
+ \li Installation
+ \li Tutorial and Examples
+ \endlist
+
+ You can also make the listing start at any character or number by
+ simply provide the number or character you want to start at. For
+ example:
+
+ \badcode *
+ /\1!
+ \list G
+ \li How to Learn Qt
+ \li Installation
+ \li Tutorial and Examples
+ \endlist
+ \1/
+ \endcode
+
+ See also \l {li-command} {\\li}.
+
+ \target li-command
+ \section1 \\li (table cell, list item)
+
+ The \\li command marks a table cell or a list item. This command
+ is only used in \l{table-command} {tables} and \l{list-command}
+ {lists}.
+
+ It considers everything as its argument until the next \\li command, until the
+ next \l {table-command} {\\endtable}, or \l {list-command} {\\endlist}
+ command. See \l {table-command} {\\table} and \l {list-command} {\\list}
+ for examples.
+
+ If the command is used within a table, you can also specify
+ how many rows or columns the item should span.
+
+ \badcode *
+ /\1!
+ \table
+ \header
+ \li {3,1} This header cell spans three columns
+ but only one row.
+ \row
+ \li {2, 1} This table item spans two columns
+ but only one row
+ \li {1, 2} This table item spans only one column,
+ but two rows.
+ \row
+ \li A regular table item
+ \li A regular table item
+ \endtable
+ \1/
+ \endcode
+
+ If not specified, the item will span one column and one row.
+
+ See also \l {table-command} {\\table}, \l {header-command}
+ {\\header}, and \l {list-command} {\\list}.
+
+*/
+
+
+/*!
+ \page 11-qdoc-commands-specialcontent.html
+ \previouspage Tables and Lists
+ \nextpage Miscellaneous
+
+ \title Special Content
+
+ The document contents commands identify parts of the documentation,
+ parts with a special rendering, conceptual meaning or
+ function.
+
+ \target quotation-command
+ \section1 \\quotation
+
+ The \\quotation and \\endquotation commands delimit a long quotation.
+
+ The text in the delimited block is surrounded by
+ \b{<blockquote>} and \b{</blockquote>} in the html output,
+ e.g.:
+
+ \badcode *
+ /\1!
+ Although the prospect of a significantly broader market is
+ good news for Firstlogic, the notion also posed some
+ challenges. Dave Dobson, director of technology for the La
+ Crosse, Wisconsin-based company, said:
+
+ \quotation
+ As our solutions were being adopted into new
+ environments, we saw an escalating need for easier
+ integration with a wider range of enterprise
+ applications.
+ \endquotation
+ \1/
+ \endcode
+
+ The text in the \b{\\quotation} block will appear in the generated HTML as:
+
+ \badcode
+ <blockquote>
+ <p>As our solutions were being adopted into new environments,
+ we saw an escalating need for easier integration with a wider
+ range of enterprise applications.</p>
+ </blockquote>
+ \endcode
+
+ The built-in style sheet for most browsers will render the
+ contents of the <blockquote> tag with left and right
+ indentations. The example above would be rendered as:
+
+ \quotation
+ As our solutions were being adopted into new
+ environments, we saw an escalating need for easier
+ integration with a wider range of enterprise
+ applications.
+ \endquotation
+
+ But you can redefine the \b{<blockquote>} tag in your style.css file.
+
+ \target footnote-command
+ \section1 \\footnote
+
+ The \\footnote and \\endfootnote commands delimit a footnote.
+
+ The footnote is rendered at the bottom of the page.
+
+ \warning The \b{\\footnote} and \b{\\endfootnote} commands
+ have not been implemented. The footnote is rendered as a regular
+ HTML paragraph.
+
+ \target note-command
+ \section1 \\note
+
+ The \\note command defines a new paragraph preceded by "Note:"
+ in bold.
+
+ \target tableofcontents-command
+ \section1 \\tableofcontents
+
+ The \\tableofcontents command has been disabled because QDoc
+ now generates a table of contents automatically.
+
+ The automatically generated table of contents appears in the upper
+ righthand corner of the page.
+
+ \target brief-command
+ \section1 \\brief
+
+ The \\brief command introduces a one-sentence description of
+ any of the \l{Topic Commands}.
+
+ The brief text is used to introduce the documentation of the
+ associated object, and in lists generated using the \l
+ {generatelist-command} {\\generatelist} command and the \l
+ {annotatedlist-command} {\\annotatedlist} command.
+
+ The brief text will be displayed in the documentation
+ for that particular topic.
+
+ For example the boolean QWidget::isWindow property:
+
+ \badcode *
+ /\1!
+ \property QWidget::isActiveWindow
+ \brief Whether this widget's window is the active window.
+
+ The active window is the window that contains the widget that
+ has keyboard focus.
+
+ When popup windows are visible, this property is \c true
+ for both the active window \e and the popup.
+
+ \sa activateWindow(), QApplication::activeWindow()
+ \1/
+ \endcode
+
+ and the QWidget::geometry property
+
+ \badcode *
+ /\1!
+ \property QWidget::geometry
+ \brief The geometry of the widget relative to its parent and
+ excluding the window frame.
+
+ When changing the geometry, the widget, if visible,
+ receives a move event (moveEvent()) and/or a resize
+ event (resizeEvent()) immediately.
+
+ ...
+
+ \sa frameGeometry(), rect(), ...
+ \1/
+ \endcode
+
+ When the \\brief command is used to describe a class, we recommend
+ using a complete sentence like this:
+
+ \badcode
+ The <classname> class is|provides|contains|specifies...
+ \endcode
+
+ \warning Do not repeat your detailed description with the same sentence as
+ the brief statement will be the first paragraph of the detailed
+ description.
+
+ \badcode *
+ /\1!
+ \class PreviewWindow
+ \brief The PreviewWindow class is a custom widget
+ displaying the names of its currently set
+ window flags in a read-only text editor.
+
+ The PreviewWindow class inherits QWidget. The widget
+ displays the names of its window flags set with the
+ setWindowFlags() function. It is also provided with a
+ QPushButton that closes the window.
+
+ ...
+
+ \sa QWidget
+ \1/
+ \endcode
+
+ Using \\brief in a \l{namespace-command}{\\namespace}:
+
+ \badcode *
+ /\1!
+ \namespace Qt
+
+ \brief The Qt namespace contains miscellaneous identifiers
+ used throughout the Qt library.
+ \1/
+ \endcode
+
+ Using \\brief in a \l{headerfile-command}{\\headerfile}:
+
+ \badcode *
+ /\1!
+ \headerfile <QtGlobal>
+ \title Global Qt Declarations
+
+ \brief The <QtGlobal> header file provides basic
+ declarations and is included by all other Qt headers.
+
+ \sa <QtAlgorithms>
+ \1/
+ \endcode
+
+ See also \l{property-command} {\\property}, \l{class-command}
+ {\\class}, \l{namespace-command} {\\namespace} and
+ \l{headerfile-command} {\\headerfile}.
+
+ \target legalese-command
+ \section1 \\legalese
+
+ The \\legalese and \\endlegalese commands delimit a license agreement.
+
+ In the generated HTML, the delimited text is surrounded by a \b
+ {<div class="LegaleseLeft">} and \b {</div>} tags.
+
+ An example of a license agreement enclosed in \\legalese
+ and \\endlegalese:
+
+ \badcode *
+ /\1!
+ \legalese
+ Copyright 1996 Daniel Dardailler.
+
+ Permission to use, copy, modify, distribute, and sell this
+ software for any purpose is hereby granted without fee,
+ provided that the above copyright notice appear in all
+ copies and that both that copyright notice and this
+ permission notice appear in supporting documentation, and
+ that the name of Daniel Dardailler not be used in
+ advertising or publicity pertaining to distribution of the
+ software without specific, written prior permission. Daniel
+ Dardailler makes no representations about the suitability of
+ this software for any purpose. It is provided "as is"
+ without express or implied warranty.
+
+ Modifications Copyright 1999 Matt Koss, under the same
+ license as above.
+ \endlegalese
+ \1/
+ \endcode
+
+ It will appear in the generated HTML as:
+
+ \badcode
+ <div class="LegaleseLeft">
+ <p>Copyright 1996 Daniel Dardailler.</p>
+ <p>Permission to use, copy, modify, distribute, and sell
+ this software for any purpose is hereby granted without fee,
+ provided that the above copyright notice appear in all
+ copies and that both that copyright notice and this
+ permission notice appear in supporting documentation, and
+ that the name of Daniel Dardailler not be used in
+ advertising or publicity pertaining to distribution of the
+ software without specific, written prior permission. Daniel
+ Dardailler makes no representations about the suitability of
+ this software for any purpose. It is provided "as is"
+ without express or implied warranty.</p>
+
+ <p>Modifications Copyright 1999 Matt Koss, under the same
+ license as above.</p>
+ </div>
+ \endcode
+
+ If the \\endlegalese command is omitted, QDoc will process the
+ \\legalese command but considers the rest of the documentation
+ page as the license agreement.
+
+ Ideally, the license text is located with the licensed code.
+
+ Elsewhere, the documentation identified as \e{\\legalese} command
+ can be accumulated using \l {generatelist-command} {\\generatelist}
+ with \c {legalese} as the argument. This is useful for generating
+ an overview of the license agreements associated with the source
+ code.
+
+ \note The output of the \c {\generatelist legalese} command includes
+ the \\legalese texts in the current documentation project only. If
+ the current documentation project depends on other modules, their
+ license texts will not be listed.
+
+ \target warning-command
+ \section1 \\warning
+
+ The \\warning command prepends "Warning:" to the command's
+ argument, in bold font.
+
+ \badcode *
+ /\1!
+ Qt::HANDLE is a platform-specific handle type
+ for system objects. This is equivalent to
+ \c{void *} on Windows and macOS, and to
+ \c{unsigned long} on X11.
+
+ \warning Using this type is not portable.
+ \1/
+ \endcode
+*/
+
+
+/*!
+ \page 12-0-qdoc-commands-miscellaneous.html
+ \previouspage Special Content
+ \nextpage The QDoc Configuration File
+
+ \title Miscellaneous
+
+ These commands provide miscellaneous functions connected to the
+ visual appearance of the documentation, and to the process of
+ generating the documentation.
+
+ \target annotatedlist-command
+ \section1 \\annotatedlist
+
+ The \\annotatedlist command expands to a list of the members of a
+ group, each member listed with its \e {brief} text. Below is an
+ example from the Qt Reference Documentation:
+
+ \badcode *
+ /\1!
+ ...
+ \section1 Drag and Drop Classes
+
+ These classes deal with drag and drop and the necessary mime type
+ encoding and decoding.
+
+ \annotatedlist draganddrop
+ \1/
+ \endcode
+
+ This generates a list of all the C++ classes and/or QML types in
+ the \e{draganddrop} group. A C++ class or QML type in the
+ \e{draganddrop} group will have \e{\\ingroup draganddrop} in its
+ \e{\\class} or \e{\\qmltype} comment.
+
+
+ \target qtcmakepackage-command
+ \section1 \\qtcmakepackage
+
+ Use the \\qtcmakepackage command to add CMake package information to classes
+ and namespaces. This information will then appear in a table at the top of
+ the class or namespace documentation page. For example:
+
+ \badcode *
+ /*!
+ \namespace Foo
+ \inheaderfile Bar
+ \qtcmakepackage Baz
+ \brief A namespace.
+
+ ...
+ \1/
+ \endcode
+
+ QDoc will output this as
+
+ \quotation
+ \raw HTML
+ <h1 class="title">Foo Namespace</h1>
+ <p>A namespace. <a>More...</a></p>
+ <div class="table"><table class="alignedsummary">
+ <tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;Bar&gt;</span></td></tr>
+ <tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS Baz)</td></tr>
+ </table></div>
+ \endraw
+ \endquotation
+
+
+ \target qtcmaketargetitem-command
+ \section1 \\qtcmaketargetitem
+
+ Use the \\qtcmaketargetitem command to override the \e {item} part of the
+ CMake \c{target_link_libraries} information that's added to classes and
+ namespaces. The command must be used in conjunction with the
+ \l{module-command}{\\module} and \l{qtcmakepackage}{\\qtcmakepackage}}
+ commands.
+
+ \e{See also} \l{module-command}{\\module} and
+ \l{qtcmakepackage}{\\qtcmakepackage}}
+
+
+ \target generatelist-command
+ \section1 \\generatelist
+
+ The \\generatelist command expands to a list of links to the
+ documentation entities grouped with an \l {ingroup-command}
+ {\\ingroup} command or entities that match one of the arguments
+ listed below. An example from the Qt Reference Documentation:
+
+ \badcode *
+ /\1!
+ \page classes.html
+ \title All Classes
+
+ For a shorter list that only includes the most
+ frequently used classes, see \l{Qt's Main Classes}.
+
+ \generatelist classes Q
+ \1/
+ \endcode
+
+ This generates the \e {All Classes} page. The command accepts the
+ following arguments:
+
+ \section2 \c {<group-name>}
+
+ With a group name as the only argument, QDoc lists all entities that
+ use the \c {\ingroup <group-name>} command.
+
+ \target table example
+ \section2 \c annotatedclasses
+
+ The \c annotatedclasses argument provides a table containing the
+ names of all the classes, and a description of each class. Each
+ class name is a link to the class's reference documentation. For
+ example:
+
+ \table
+ \row
+ \li QDial
+ \li Rounded range control (like a speedometer or potentiometer)
+ \row
+ \li QDialog
+ \li The base class of dialog windows
+ \row
+ \li QDir
+ \li Access to directory structures and their contents
+ \endtable
+
+ A C++ class is documented with the \l {class-command} {\\class}
+ command. The annotation for the class is taken from the argument
+ of the class comment's \l {brief-command} {\\brief} command.
+
+ \section2 \c annotatedexamples
+
+ The \c annotatedexamples argument provides a complete list of all
+ examples as a set of tables containing the titles of all the
+ examples, and a description of each example. Each title is a
+ link to the example's documentation.
+
+ A separate table for each module (that has documented examples)
+ is generated, provided that the module has defined a
+ navigation.landingpage configuration variable. The \e landingpage
+ variable is used as a title for a header that precedes each table.
+
+ \section2 \c annotatedattributions
+
+ The \c annotatedattributions argument provides a complete list of all
+ attributions as a set of tables containing the titles of all the
+ attributions, and a description of each attribution. Each title is a
+ link to the attribution's page.
+
+ A separate table for each module (that has attributions)
+ is generated, provided that the module has defined a
+ navigation.landingpage configuration variable. The \e landingpage
+ variable is used as a title for a header that precedes each table.
+
+ \target list example
+ \section2 \c {classes <prefix>}
+
+ The \c classes argument provides a complete alphabetical list of
+ the classes. The second argument, \c{<prefix>}, is the common
+ prefix for the class names. The class names will be sorted on the
+ character that follows the common prefix. e.g. The common prefix
+ for the Qt classes is \c Q. The common prefix argument is
+ optional. If no common prefix is provided, the class names will
+ be sorted on their first character.
+
+ Each class name becomes a link to the class's reference
+ documentation. This command is used to generate the
+ \e {All Classes} page this way:
+
+ \badcode *
+ /\1!
+ \page classes.html
+ \title All Classes
+ \ingroup classlists
+
+ \brief Alphabetical list of classes.
+
+ This is a list of all Qt classes. For classes that
+ have been deprecated, see the \l{Obsolete Classes}
+ list.
+
+ \generatelist classes Q
+ \1/
+ \endcode
+
+ A C++ class is documented with the \l {class-command} {\\class}
+ command.
+
+ \section2 \c classesbymodule
+
+ When this argument is used, a second argument is required, which
+ specifies the module whose classes are to be listed. QDoc
+ generates a table containing those classes. Each class is listed
+ with the text of its \l{brief-command} {\\brief} command.
+
+ For example, this command can be used on a module page as follows:
+
+ \badcode *
+ /\1!
+ \page phonon-module.html
+ \module Phonon
+ \title Phonon Module
+ \ingroup modules
+
+ \brief Contains namespaces and classes for multimedia functionality.
+
+ \generatelist{classesbymodule Phonon}
+
+ ...
+ \1/
+ \endcode
+
+ Each class that is a member of the specified module must be marked
+ with the \l {inmodule-command} {\\inmodule} command in its \\class
+ comment.
+
+ \section2 \c qmltypesbymodule
+
+ Similar to \c classesbymodule argument, but used for listing the
+ QML types (excluding QML value types) from the QML module specified
+ with the second argument.
+
+ \note Support for this argument was introduced in QDoc 5.6.
+
+ \section2 \c qmlvaluetypesbymodule
+
+ Similar to \c qmltypesbymodule argument, but lists QML value
+ types instead.
+
+ \note Support for this argument was introduced in QDoc 6.7.
+
+ \section2 \c functionindex
+
+ The \c functionindex argument provides a complete alphabetical
+ list of all the documented member functions. It is normally used
+ only to generate the \e {Qt function index} page
+ this way:
+
+ \badcode *
+ /\1!
+ \page functions.html
+ \title All Functions
+ \ingroup funclists
+
+ \brief All documented Qt functions listed alphabetically with a
+ link to where each one is declared.
+
+ This is the list of all documented member functions and global
+ functions in the Qt API. Each function has a link to the
+ class or header file where it is declared and documented.
+
+ \generatelist functionindex
+ \1/
+ \endcode
+
+ \section2 \c legalese
+
+ The \c legalese argument tells QDoc to generate a list of licenses in
+ the current documentation project. Each license is identified using
+ the \l {legalese-command} {\\legalese} command.
+
+ \section2 \c overviews
+
+ The \c overviews argument is used to tell QDoc to generate a list
+ by concatenating the contents of all the \l {group-command}
+ {\\group} pages. Qt uses it to generate the \e {overviews} page
+ this way:
+
+ \badcode *
+ /\1!
+ \page overviews.html
+
+ \title All Overviews and HOWTOs
+
+ \generatelist overviews
+ \1/
+ \endcode
+
+ \section2 \c attributions
+
+ The \c attributions argument is used to tell QDoc to generate a list
+ of attributions in the documentation.
+
+ \section2 \c related
+
+ The \c related argument is used in combination with the \l
+ {group-command} {\\group} and \l {ingroup-command} {\\ingroup}
+ commands to list all the overviews related to a specified
+ group. For example, the page for the \e {Programming with Qt}
+ page is generated this way:
+
+ \badcode *
+ /\1!
+ \group qt-basic-concepts
+ \title Programming with Qt
+
+ \brief The basic architecture of the Qt cross-platform application and UI framework.
+
+ Qt is a cross-platform application and UI framework for
+ writing web-enabled applications for desktop, mobile, and
+ embedded operating systems. This page contains links to
+ articles and overviews explaining key components and
+ techniuqes used in Qt development.
+
+ \generatelist {related}
+ \1/
+ \endcode
+
+ Each page listed on this group page contains the command:
+
+ \code
+ \ingroup qt-basic-concepts
+ \endcode
+
+ \target if-command
+ \section1 \\if
+
+ The \\if command and the corresponding \\endif command
+ enclose parts of a QDoc comment that only will be included if
+ the condition specified by the command's argument is true.
+
+ The command reads the rest of the line and parses it as an C++ #if
+ statement.
+
+ \badcode *
+ /\1!
+ \if defined(opensourceedition)
+
+ \note This edition is for the development of
+ \l{Qt Open Source Edition} {Free and Open Source}
+ software only; see \l{Qt Commercial Editions}.
+
+ \endif
+ \1/
+ \endcode
+
+ This QDoc comment will only be rendered if the \c
+ opensourceedition preprocessor symbol is defined, and specified in
+ the \l {defines-variable} {defines} variable in the configuration
+ file to make QDoc process the code within #ifdef and #endif:
+
+ \badcode
+ defines = opensourceedition
+ \endcode
+
+ You can also define the preprocessor symbol manually on the
+ command line. For more information see the documentation of the \l
+ {defines-variable} {defines} variable.
+
+ See also \l{endif-command} {\\endif}, \l{else-command} {\\else},
+ \l {defines-variable} {defines} and \l {falsehoods-variable}
+ {falsehoods}.
+
+ \target endif-command
+ \section1 \\endif
+
+ The \\endif command and the corresponding \\if command
+ enclose parts of a QDoc comment that will be included if
+ the condition specified by the \l {if-command} {\\if} command's
+ argument is true.
+
+ For more information, see the documentation of the \l {if-command}
+ {\\if} command.
+
+ See also \l{if-command} {\\if}, \l{else-command} {\\else}, \l
+ {defines-variable} {defines} and \l {falsehoods-variable}
+ {falsehoods}.
+
+ \target else-command
+ \section1 \\else
+
+ The \\else command specifies an alternative if the
+ condition in the \l {if-command} {\\if} command is false.
+
+ The \\else command can only be used within \l {if-command}
+ {\\if...\\endif} commands, but is useful when there is only two
+ alternatives.
+
+ \target include-command
+ \section1 \\include
+
+ The \\include command sends all or part of the file specified by
+ its first argument to the QDoc input stream to be processed as a
+ QDoc comment snippet.
+
+ The command is useful when some snippet of commands or text is to
+ be used in multiple places in the documentation. Use the \\include
+ command wherever you want to insert a snippet into the documentation.
+ The file containing the snippet to include, must be located under the
+ path(s) listed in the \l{sourcedirs-variable}{sourcedirs} or
+ \l{exampledirs-variable}{exampledirs} QDoc configuration variable.
+ It can be either any source file parsed by QDoc (or even the same one
+ where \\include command is used), or any other text file. To store
+ snippets in a separate file that is not meant to be parsed by QDoc,
+ use a file extension that is not listed in
+ \l{sources.fileextensions-variable}{sources.fileextensions};
+ for example, \c .qdocinc.
+
+ The command can have one or more arguments. The first
+ argument is always a file name. The contents of the file must be
+ QDoc input, in other words, a sequence of QDoc commands and text, but
+ without the enclosing QDoc comment \c{/}\c{*!} ... \c{*}\c{/} delimiters.
+ If you want to include the entire named file, leave the second argument
+ empty. If you want to include only part of the file, see the
+ \l{2-argument-form}{two argument form} below. Here is an example
+ of the one argument form:
+
+ \badcode *
+ /\1!
+ \page corefeatures.html
+ \title Core Features
+
+ \include examples/signalandslots.qdocinc
+ \include examples/objectmodel.qdocinc
+ \include examples/layoutmanagement.qdocinc
+ \1/
+ \endcode
+
+ QDoc renders this page \l{corefeatures.html} {as shown here}.
+
+ \target 2-argument-form
+ \section2 \\include filename snippet-identifier
+
+ It is a waste of time to make a separate \c .qdocinc file for every
+ QDoc include snippet you want to use in multiple places in the
+ documentation, especially given that you probably have to put the
+ copyright/license notice in every one of these files. If you
+ have multiple snippets to be included, you can put them all in a
+ single file and surround each one with:
+
+ \badcode
+ //! [snippet-id1]
+
+ QDoc commands and text...
+
+ //! [snippet-id1]
+
+ //! [snippet-id2]
+
+ More QDoc commands and text...
+
+ //! [snippet-id2]
+ \endcode
+
+ Then you can use the two-argument form of the command:
+
+ \badcode
+ \include examples/signalandslots.qdocinc snippet-id2
+ \include examples/objectmodel.qdocinc another-snippet-id
+ \endcode
+
+ The sequence of QDoc commands and text found between the two tags
+ with the same name as the second argument is sent to the QDoc input
+ stream. You can even have nested snippets.
+
+ \note Snippet identifiers work also within documentation comment
+ (\beginqdoc .. \endqdoc) blocks, so it's not necessary to use a
+ separate \c .qdocinc file. When processing a comment block, QDoc
+ removes any \c {//!} comment lines from the generated output.
+
+ \section2 Extra arguments
+
+ Since QDoc 6.3, any further arguments passed to the \\include command
+ are used for injecting strings into the included content. To inject a
+ string to a specific location in the content, add a backslash followed
+ by a digit (1..9). The digits correspond with the order of the argument
+ list. Enclose arguments in curly braces to ensure that QDoc renders the
+ entire argument, including possible whitespace characters, as you expect.
+
+ \important Each additional argument (including the snippet ID) must be
+ enclosed in braces. If you want to include the entire file,
+ use an empty snippet ID: \c {{}}.
+
+ For example, given the following snippet in a file \c includes.qdocinc:
+
+ \badcode
+ //! [usage]
+ To enable \e{\1}, select \uicontrol {\2} > \uicontrol Enable.
+ //! [usage]
+ \endcode
+
+ Then, the following \\include line:
+
+ \badcode
+ \include includes.qdocinc {usage} {detailed output} {Verbose}
+ \endcode
+
+ Renders
+ \quotation
+ To enable \e {detailed output}, select \uicontrol {Verbose} >
+ \uicontrol Enable.
+ \endquotation
+
+ \target meta-command
+ \section1 \\meta
+
+ The \\meta command is used for adding metadata to documentation.
+ The command has two arguments: the first argument is the name of the
+ metadata attribute, and the second argument is the value for the attribute.
+ Each argument should be enclosed in curly brackets, as shown in this
+ example:
+
+ \badcode *
+ /\1!
+ \example demos/coffee
+ \title Coffee Machine
+ \brief A Qt Quick application with a state-based custom user interface.
+
+ \meta {tags} {quick,embedded,states,touch}
+ \meta {category} {Application Examples}
+ \1/
+ \endcode
+
+ A number of metadata attributes have a specific purpose:
+
+ \b {Example Metadata}
+
+ Another use for \\meta command is to include metadata (tags) in
+ \l {example-command}{\\example} documentation. By default, QDoc
+ generates example tags based on the example's \l {title-command}{\\title}
+ and module name. These tags are displayed in Qt Creator's Welcome mode,
+ helping users navigate the list of examples.
+
+ Additional tags can be created with \c {\meta {tag} {tag1}}
+ or \c {\meta {tags} {tag1,[tag2,...]}}.
+ For example:
+
+ \badcode *
+ /\1!
+ \example helloworld
+ \title Hello World Example
+ \meta {tags} {tutorial,basic}
+ \1/
+ \endcode
+
+ This would result in the following tags: \e {tutorial,basic,hello,world}.
+ Common words such as \e example are ignored.
+
+ \b {Excluding Examples}
+
+ Marking an example \e broken will exclude it from the generated manifest
+ file, effectively removing it from Qt Creator's Welcome mode.
+
+ \badcode
+ \meta {tag} {broken}
+ \endcode
+
+ \b {Example Install Paths}
+
+ The \\meta command combined with an argument \c installpath specifies the
+ location of an installed example. This value overrides the one that is set
+ using the \c examplesinstallpath configuration variable.
+
+ \badcode *
+ /\1!
+ \example helloworld
+ \title Hello World Example
+ \meta {installpath} {tutorials}
+ \1/
+ \endcode
+
+ See also \l {examplesinstallpath}.
+
+ \b {Status}
+
+ A \c status argument for the \\meta command adds a custom status description
+ for a \l {class-command}{\\class} or a \l {qmltype-command}{\\qmltype}. This
+ description will then appear in a table at the top of the type reference page.
+
+ \badcode *
+ /\1!
+ \class QNativeInterface::QAndroidApplication
+ \meta {status} {Android-specific}
+ \1/
+ \endcode
+
+ See also \l {Status}{status-related commands}.
+
+ \target noautolist-command
+ \section1 \\noautolist
+
+ The \\noautolist command indicates that the annotated list of C++
+ classes or QML types, which is automatically generated at the
+ bottom of the C++ or QML module page should be omitted, because
+ the classes or types have been listed manually. This command can
+ also be used with the \l {group-command}{\\group} command to omit
+ the list of group members, when they are listed manually.
+
+ The command must stand on its own line. See \l {Qt Quick Controls QML Types}
+ for an example. The page is generated from \c {qtquickcontrols2-qmlmodule.qdoc}.
+ There you will find a QDoc comment containing the \c{\qmlmodule} command for
+ the QtQuick.Controls module. The same comment contains a \c {\noautolist}
+ command to disable automatic list generation, and a \l {generatelist-command}
+ {\\generatelist} to list the QML types in a specific section of the document.
+
+ This command was introduced in QDoc 5.6.
+
+ Since Qt 5.10, this command can be applied also to \l{example-command}
+ {\\example} documentation, where it causes the automatically generated
+ list of files and images belonging to an example project to be omitted.
+
+ \target omit-command
+ \section1 \\omit
+
+ The \\omit command and the corresponding \\endomit command
+ delimit parts of the documentation that you want QDoc to skip. For
+ example:
+
+ \badcode *
+ /\1!
+ \table
+ \row
+ \li Basic Widgets
+ \li Basic GUI widgets such as buttons, comboboxes
+ and scrollbars.
+
+ \omit
+ \row
+ \li Component Model
+ \li Interfaces and helper classes for the Qt
+ Component Model.
+ \endomit
+
+ \row
+ \li Database Classes
+ \li Database related classes, e.g. for SQL databases.
+ \endtable
+ \1/
+ \endcode
+
+ \target raw-command
+ \section1 \\raw (avoid!)
+
+ The \\raw command and the corresponding
+ \\endraw command delimit a block of raw mark-up language code.
+
+ \warning Avoid using this command if possible. If you are trying to
+ generate special table or list behavior, try to get the behavior you want
+ using the \l {span-command} {\\span} and \l {div-command} {\\div}
+ commands in your \l {table-command} {\\table} or \l {list-command}
+ {\\list}.
+
+ The command takes an argument specifying the code's format.
+
+ QDoc generates the given code only when generating the format that
+ was specified by the user.
+
+ For example, "\\raw HTML" will only generate code when QDoc
+ generates HTML documentation.
+
+ \note You can often achieve the intended purpose by using QDoc commands,
+ while reducing the chance of mistakes or content becoming unmaintained.
+
+ \target sincelist-command
+ \section1 \\sincelist
+
+ The \\sincelist command expands to a detailed breakdown of new
+ inclusions to the documented API in a specified version. Example
+ usage:
+
+ \badcode * \QtMajorVersion \QtMinorVersion \QtVer
+ /\1!
+ \page newclasses\2\3.html
+ \title New Classes and Functions in \4
+ \brief A comprehensive list of new classes and functions in \4.
+
+ \sincelist \4
+ \1/
+ \endcode
+
+ \\sincelist takes a single argument, a version string. The generated
+ output includes all functionality that is marked with a
+ \l {since-command}{\\since} command or a \l {since clause} matching
+ the version string.
+
+ \target unicode-command
+ \section1 \\unicode
+
+ The \\unicode command allows you to insert an arbitrary Unicode
+ character in the document.
+
+ The command takes an argument specifying the character as an
+ integer. By default, base 10 is assumed, unless a '0x' or '0'
+ prefix is specified (for base 16 and 8, respectively).
+*/
+
diff --git a/src/qdoc/qdoc/doc/qdoc-manual-qdocconf.qdoc b/src/qdoc/qdoc/doc/qdoc-manual-qdocconf.qdoc
new file mode 100644
index 000000000..eb05a1758
--- /dev/null
+++ b/src/qdoc/qdoc/doc/qdoc-manual-qdocconf.qdoc
@@ -0,0 +1,1976 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page 21-0-qdoc-configuration.html
+ \previouspage Miscellaneous Macros
+ \nextpage Generic Configuration Variables
+
+ \title The QDoc Configuration File
+
+ Before running QDoc, you must create a QDoc configuration file to
+ tell QDoc where to find the source files that contain the QDoc
+ comments. The pathname to your configuration file is passed to
+ QDoc on the command line:
+
+ \quotation
+ \c {/current/dir$ ../../bin/qdoc ./config.qdocconf}
+ \endquotation
+
+ \section1 General Description
+
+ The configuration file is a list of entries of the form \e
+ {"variable = value"}. Using the configuration variables, you can
+ define where QDoc should find the various source files, images and
+ examples, where to put generated documentation etc. The
+ configuration file can also contain directives like \c
+ include. For an example, see \l minimum.qdocconf.
+
+ You can also use configuration variables to get QDoc to support
+ \l{Supporting Derived Projects} {derived projects}, i.e QDoc can
+ generate links in your project's documentation to elements in the
+ Qt online documentation. See the \l {Supporting Derived projects}
+ section.
+
+ A valid configuration variable name can include upper and lower case
+ letters, numbers, and an underscore, '_'.
+
+ The value of a configuration variable can be set using either '='
+ or '+='. The difference is that '=' overrides the previous value,
+ while '+=' adds a new value to the current one.
+
+ Values of some configuration variables are interpreted as a list of
+ strings, for example:
+ \l {sourcedirs-variable}
+ {\c{sourcedirs}}, while others are treated as a single string. Double
+ quotes around a value string are optional, but including them allows
+ you to use special characters like '=' and ' \" ' within the value
+ string, for example:
+
+ \badcode
+ HTML.postheader = "<a href=\"index.html\">Home</a>"
+ \endcode
+
+ If an entry spans many lines, use a backslash at the end of every
+ line but the last:
+
+ \badcode
+ sourcedirs = kernel tools widgets
+ \endcode
+
+ This can be written as:
+ \badcode
+ sourcedirs = kernel \
+ tools \
+ widgets
+ \endcode
+
+ If a value spans multiple lines but is interpreted as a single string,
+ the lines are joined with spaces.
+
+ \section1 Expansion of Configuration Values
+
+ QDoc supports expanding environment variables within configuration files.
+ For example, Qt modules rely on the environment variable QT_INSTALL_DOCS
+ to include definitions related to all Qt module documentation projects:
+
+ \badcode
+ include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
+ \endcode
+
+ A variable to expand is prefixed with '$'. To use the literal character
+ '$' within a value string, escape it with a backslash: '\\$'.
+
+ Since QDoc 6.0, values can be expanded also from other configuration
+ variables. In addition to the \c {$variable} syntax, also \c {${variable}}
+ is valid. The latter eliminates the need to separate the variable
+ name with whitespace or non-variable characters. For example:
+
+ \badcode
+ baseurl = https://doc.qt.io/
+ ...
+ url = ${baseurl}qtcreator
+ \endcode
+
+ If the target variable refers to a list of strings, they will be
+ joined using spaces in the expanded value:
+
+ \badcode
+ vars = foo \
+ bar \
+ baz
+
+ items = "Items: $vars" # Expands to "Items: foo bar baz"
+ \endcode
+
+ Controlling which character is used for joining the string list is also
+ possible:
+
+ \badcode
+ items = "Items: ${vars,|}" # Expands to "Items: foo|bar|baz"
+ items = "Items: ${vars,,}" # Expands to "Items: foo,bar,baz"
+ items = "Items: ${vars,}" # Expands to "Items: foobarbaz"
+ \endcode
+
+ As the expansion is performed after reading in all variables, the order
+ in which they are defined does not matter.
+
+ \note Nested variable expansion is not supported.
+
+ \section2 Expanding Environment Variables
+
+ When expanding environment variables, the \c {${variable}} syntax has
+ different behavior compared to \c {$variable}. The former expands the
+ content of the variable in place to be parsed as part of the
+ configuration file, while the latter simply assigns the content as a
+ value for the current configuration variable. This has implications if
+ the environment variable contains a list of elements separated by
+ whitespace, or other formatting recognized by QDoc.
+
+ For example, if the value of an environment variable \c SRCDIRS is
+ \c {"../src/a ../src/b"}, then
+
+ \badcode
+ sourcedirs = $SRCDIRS # Fail - value is interpreted as a single path.
+ sourcedirs = ${SRCDIRS} # Ok - whitespace is used as a delimiter.
+ \endcode
+
+ \section1 Configuration Variables
+
+ \section1 Variable List
+
+ \list
+ \li \l {defines-variable} {defines}
+ \li \l {depends-variable} {depends}
+ \li \l {exampledirs-variable} {exampledirs}
+ \li \l {examples-variable} {examples}
+ \li \l {examplesinstallpath-variable} {examplesinstallpath}
+ \li \l {examples.fileextensions-variable} {examples.fileextensions}
+ \li \l {excludedirs-variable} {excludedirs}
+ \li \l {excludefiles-variable} {excludefiles}
+ \li \l {extraimages-variable} {extraimages}
+ \li \l {falsehoods-variable} {falsehoods}
+ \li \l {headerdirs-variable} {headerdirs}
+ \li \l {headers-variable} {headers}
+ \li \l {headers.fileextensions-variable} {headers.fileextensions}
+ \li \l {HTML.footer-variable} {HTML.footer}
+ \li \l {HTML.postheader-variable} {HTML.postheader}
+ \li \l {HTML.style-variable} {HTML.style}
+ \li \l {includepaths-variable} {includepaths}
+ \li \l {ignorewords-variable} {ignorewords}
+ \li \l {ignoresince-variable} {ignoresince}
+ \li \l {imagedirs-variable} {imagedirs}
+ \li \l {indexes-variable} {indexes}
+ \li \l {language-variable} {language}
+ \li \l {locationinfo-variable} {locationinfo}
+ \li \l {macro-variable} {macro}
+ \li \l {manifestmeta-variable} {manifestmeta}
+ \li \l {moduleheader-variable} {moduleheader}
+ \li \l {navigation-variable} {navigation}
+ \li \l {outputdir-variable} {outputdir}
+ \li \l {outputformats-variable} {outputformats}
+ \li \l {outputprefixes-variable} {outputprefixes}
+ \li \l {outputsuffixes-variable} {outputsuffixes}
+ \li \l {project-variable} {project}
+ \li \l {sourcedirs-variable} {sourcedirs}
+ \li \l {sources-variable} {sources}
+ \li \l {sources.fileextensions-variable} {sources.fileextensions}
+ \li \l {spurious-variable} {spurious}
+ \li \l {tabsize-variable} {tabsize}
+ \li \l {url-variable} {url}
+ \li \l {url.examples-variable} {url.examples}
+ \li \l {version-variable} {version}
+ \li \l {versionsym-variable} {versionsym}
+ \li \l {warninglimit-variable} {warninglimit}
+ \endlist
+
+ \section1 Categories
+
+ \list
+ \li \l {Generic Configuration Variables}
+ \li \l {Format-specific Configuration Variables}
+ \endlist
+
+ \section1 Configuration File Examples
+
+ \list
+ \li A minimum configuration file: \l minimum.qdocconf
+ \li The Qt configuration file: \l qtgui.qdocconf
+ \endlist
+*/
+
+
+/*!
+ \page 22-qdoc-configuration-generalvariables.html
+ \previouspage The QDoc Configuration File
+ \nextpage Creating Help Project Files
+
+ \title Generic Configuration Variables
+
+ With the general QDoc configuration variables, you can define
+ where QDoc will find the various source files it needs to generate
+ the documentation, as well as the directory to put the generated
+ documentation. You can also do some minor manipulation of QDoc
+ itself, controlling its output and processing behavior.
+
+ \target codeindent-variable
+ \section1 codeindent
+
+ The \c codeindent variable specifies the level of indentation that
+ QDoc uses when writing code snippets.
+
+ QDoc originally used a hard-coded value of four spaces for code
+ indentation to ensure that code snippets could be easily
+ distinguished from surrounding text. Since we can use \l{HTML
+ Specific Configuration Variables#HTML.stylesheets} {stylesheets}
+ to adjust the appearance of certain types of HTML elements, this
+ level of indentation is not always required.
+
+ \target codeprefix-variable
+ \target codesuffix-variable
+ \section1 codeprefix, codesuffix
+
+ The \c codeprefix and \c codesuffix variables specify a pair of
+ strings that each code snippet is enclosed in.
+
+ \target defines-variable
+ \section1 defines
+
+ The \c defines variable specifies the C++ preprocessor symbols
+ that QDoc will recognize and respond to.
+
+ When a preprocessor symbol is specified using the \c defines
+ variable, you can also use the \l {if-command} {\\if} command to
+ enclose documentation that only will be included if the
+ preprocessor symbol is defined.
+
+ \badcode
+ defines = QT_GUI_LIB
+ \endcode
+
+ This ensures that QDoc will process the code that requires these
+ symbols to be defined. For example:
+
+ \code
+ #ifdef Q_GUI_LIB
+ void keyClick(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
+ #endif
+ \endcode
+
+
+ You can also define preprocessor symbols manually on the command
+ line using the -D option. For example:
+
+ \badcode
+ currentdirectory$ qdoc -Dqtforpython qtgui.qdocconf
+ \endcode
+
+ In this case the -D option ensures that the \c qtforpython
+ preprocessor symbol is defined when QDoc processes the source
+ files defined in the qtgui.qdocconf file.
+
+ See also \l {falsehoods-variable} {falsehoods} and \l {if-command} {\\if}.
+
+ \target depends-variable
+ \section1 depends
+
+ The \c depends variable defines a list of other documentation projects
+ that this project depends on for resolving link targets for type
+ inheritance and anything else the documentation needs to link to.
+
+ Like Qt itself, documentation for Qt is distributed across multiple
+ modules. In a multi-module documentation project, the minimum set
+ of dependencies for a single module consists of actual build
+ dependencies. In addition, if there is a documentation project
+ (module) that acts as a top-level entry point for the entire
+ documentation set and provides \l {navigation-variable}{navigation}
+ links, each module documentation should include it as a dependency.
+
+ When QDoc generates documentation for a project, it will also generate
+ an \c .index file containing URLs to each linkable entity in the project.
+ Each dependency is a (lowercase) name of a project. This name must
+ match with the base name of the index file generated for that
+ project.
+
+ \badcode
+ depends = \
+ qtdoc \
+ qtcore \
+ qtquick
+ \endcode
+
+ When invoking QDoc on a project that has dependencies and uses the
+ \c depends variable, one or more \c -indexdir path(s) must be passed
+ as command line option(s). QDoc uses these paths to search for
+ the dependencies' index files.
+
+ \badcode
+ qdoc mydoc.qdocconf -outputdir $PWD/html -indexdir $QT_INSTALL_DOCS
+ \endcode
+
+ With above, QDoc will search for a file
+ \c {$QT_INSTALL_DOCS/qtdoc/qtdoc.index} for a dependency to \c qtdoc.
+ If an index file for a dependency is not found, QDoc will output a
+ warning.
+
+ The \c depends command accepts also a special value of '*'. This
+ instructs QDoc to load all index files found in specified index
+ directories; that is, "depends on everything".
+
+ \badcode
+ depends = *
+ \endcode
+
+ See also \l indexes, \l project, and \l url.
+
+ \target exampledirs-variable
+ \section1 exampledirs
+
+ The \c exampledirs variable specifies the directories containing
+ the source code of the example files.
+
+ The \l {examples-variable} {examples} and \l
+ {exampledirs-variable} {exampledirs} variables are used by the \l
+ {quotefromfile-command} {\\quotefromfile}, \l {quotefile-command}
+ {\\quotefile} and \l {example-command} {\\example} commands. If
+ both the \l {examples-variable} {examples} and \l
+ {exampledirs-variable} {exampledirs} variables are defined, QDoc
+ will search in both, first in \l {examples-variable} {examples}
+ then in \l {exampledirs-variable} {exampledirs}.
+
+ QDoc will search through the directories in the specified order,
+ and accept the first matching file it finds. It will only search
+ in the specified directories, \e not in subdirectories.
+
+ \badcode
+ exampledirs = $QTDIR/doc/src \
+ $QTDIR/examples \
+ $QTDIR \
+ $QTDIR/qmake/examples
+
+ examples = $QTDIR/examples/widgets/analogclock/analogclock.cpp
+ \endcode
+
+ When processing
+
+ \badcode
+ \quotefromfile widgets/calculator/calculator.cpp
+ \endcode
+
+ QDoc will see if there is a file called \c calculator.cpp
+ listed as a value in the \l {examples-variable} {\c examples} variable. If
+ there isn't, it will search in the \c exampledirs variable, and
+ first see if there exists a file called
+
+ \badcode
+ $QTDIR/doc/src/widgets/calculator/calculator.cpp
+ \endcode
+
+ If it doesn't, QDoc will continue looking for a file called
+
+ \badcode
+ $QTDIR/examples/widgets/calculator/calculator.cpp
+ \endcode
+
+ and so forth.
+
+ See also \l {examples-variable}{examples}.
+
+ \target examples-variable
+ \section1 examples
+
+ The \c examples variable allows you to specify individual example
+ files in addition to those located in the directories specified by
+ the \l {exampledirs-variable} {\c exampledirs} variable.
+
+ The \c examples and \l {exampledirs-variable} {\c exampledirs}
+ variables are used by the \l {quotefromfile-command}
+ {\\quotefromfile}, \l {quotefile-command} {\\quotefile} and \l
+ {example-command} {\\example} commands. If both the \c examples and \l
+ {exampledirs-variable} {\c exampledirs} variables are defined,
+ QDoc will search in both, first in \c examples then in \l
+ {exampledirs-variable} {\c exampledirs}.
+
+ QDoc will search through the values listed for the \c examples
+ variable, in the specified order, and accept the first one it
+ finds.
+
+ For an extensive example, see the \l {exampledirs-variable} {\c
+ exampledirs} command. But note that if you know the file is listed
+ in the \c examples variable, you don't need to specify its path:
+
+ \badcode
+ \quotefromfile calculator.cpp
+ \endcode
+
+ See also \l {exampledirs-variable} {exampledirs}.
+
+ \target examplesinstallpath-variable
+ \section1 examplesinstallpath
+
+ The \c examplesinstallpath variable sets the root path for this
+ project's examples under the \e installed example directory.
+
+ Assuming a root install path of \c QT_INSTALL_EXAMPLES for all
+ examples, then the path
+
+ \badcode
+ <QT_INSTALL_EXAMPLES>/<examplesinstallpath>/<example_path>
+ \endcode
+
+ will be used to refer to a path of a single example within this
+ documentation project. These paths are recorded in the
+ \l {Example Manifest Files} {example manifest file}, read by Qt
+ Creator.
+
+ To ensure correct paths, \c examplesinstallpath must match with
+ one of the directories listed in \l {exampledirs-variable}
+ {exampledirs}. The path passed as an argument for each
+ \l {example-command} {\\example} command is relative to
+ the path in \e exampledirs.
+
+ For example:
+
+ \badcode
+ exampledirs = ./snippets \
+ ../../../examples/mymodule
+
+ examplesinstallpath = mymodule
+ \endcode
+
+ And given a following \\example command:
+
+ \badcode *
+ /*!
+ \example basic/hello
+ ...
+ \1/
+ \endcode
+
+ Then, the path \c {mymodule/basic/hello} is recorded in the manifest file
+ for this example.
+
+ \note It is possible to override \c examplesinstallpath for an individual
+ \l {example-command}{\\example} using the \l {meta-command}{\\meta}
+ command.
+
+ \b {See also}: \l {exampledirs}, \l {example-command} {\\example}, and
+ \l {meta-command}{\\meta}.
+
+ \target examples.fileextensions-variable
+ \section1 examples.fileextensions
+
+ The \c examples.fileextensions variable specifies the file
+ extensions that QDoc will look for when collecting example files
+ for display in the documentation.
+
+ The default extensions are *.cpp, *.h, *.js, *.xq, *.svg, *.xml
+ and *.ui.
+
+ The extensions are given as standard wildcard expressions. You
+ can add a file extension to the filter using '+='. For example:
+
+ \badcode
+ examples.fileextensions += *.qrc
+ \endcode
+
+ See also \l{headers.fileextensions}.
+
+ \target excludedirs-variable
+ \section1 excludedirs
+
+ The \c excludedirs variable is for listing directories that should \e{not}
+ be processed by QDoc, even if the same directories are included by the
+ \l {sourcedirs-variable} {sourcedirs} or \l {headerdirs-variable} {headerdirs}
+ variables.
+
+ For example:
+
+ \badcode
+ sourcedirs = src/corelib
+ excludedirs = src/corelib/tmp
+ \endcode
+
+ When executed, QDoc will exclude the listed directories from
+ further consideration. Files in these directories will not be
+ read by QDoc.
+
+ See also \l {excludefiles-variable} {excludefiles}.
+
+ \target excludefiles-variable
+ \section1 excludefiles
+
+ The \c excludefiles variable allows you to specify individual files
+ that should \e{not} be processed by QDoc.
+
+ \badcode
+ excludefiles += $QT_CORE_SOURCES/../../src/widgets/kernel/qwidget.h \
+ $QT_CORE_SOURCES/../../src/widgets/kernel/qwidget.cpp
+ \endcode
+
+ If you include the above in your qdocconf file for qtbase, there
+ will be no class documentation generated for QWidget.
+
+ Since Qt 5.6, also simple wildcards ('*' and '?') are recognized by
+ \c excludefiles. For example, to exclude all private Qt header files
+ from being parsed, define the following:
+
+ \badcode
+ excludefiles += "*_p.h"
+ \endcode
+
+ See also \l {excludedirs-variable} {excludedirs}.
+
+ \target extraimages-variable
+ \section1 extraimages
+
+ The \c extraimages variable tells QDoc to incorporate specific
+ images in the generated documentation.
+
+ QDoc automatically copies an image file from \l imagedirs to the output
+ directory if it's referenced by the \l {image-command} {\c{\image}} or
+ \l {inlineimage-command} {\c{\inlineimage}} command. If you want to copy
+ additional images, you must specify them using the \c extraimages variable.
+
+ The general syntax is \tt {\e{format}.extraimages = \e image}.
+
+ For a contextualized example, refer to the description of the
+ \l {HTML.postheader-variable}{HTML.postheader} variable.
+
+ Example:
+ \badcode
+ HTML.extraimages = images/qt-logo.png
+ \endcode
+
+ See also \l images and \l imagedirs.
+
+ \target falsehoods-variable
+ \section1 falsehoods
+
+ The \c falsehoods variable defines the truth value of specified
+ preprocessor symbols as false.
+
+ The values of the variable are regular expressions (see QRegularExpression
+ for details). If this variable is not set for a preprocessor
+ symbol, QDoc assumes its truth value is true. The exception is
+ '0', which is always false.
+
+ QDoc will recognize, and is able to evaluate, the following
+ preprocessor syntax:
+
+ \code
+ #ifdef NOTYET
+ ...
+ #endif
+
+ #if defined (NOTYET)
+ ...
+ #end if
+ \endcode
+
+ However, faced with unknown syntax like
+
+ \code
+ #if NOTYET
+ ...
+ #endif
+ \endcode
+
+ QDoc will evaluate it as true by default, \e unless the
+ preprocessor symbol is specified within the \c falsehoods variable
+ entry:
+
+ \badcode
+ falsehoods = NOTYET
+ \endcode
+
+ See also \l defines.
+
+ \target generateindex-variable
+ \section1 generateindex
+
+ The \c generateindex variable contains a boolean value that
+ specifies whether to generate an index file when HTML
+ documentation is generated.
+
+ By default, an index file is always generated with HTML
+ documentation, so this variable is typically only used when
+ disabling this feature (by setting the value to \c false) or when
+ enabling index generation for the WebXML output (by setting the
+ value to \c true).
+
+ \target headerdirs-variable
+ \section1 headerdirs
+
+ The \c headerdirs variable specifies the directories containing
+ the header files associated with the \c .cpp source files used in
+ the documentation.
+
+ \badcode
+ headerdirs = $QTDIR/src \
+ $QTDIR/extensions/activeqt \
+ $QTDIR/extensions/motif \
+ $QTDIR/tools/designer/src/lib/extension \
+ $QTDIR/tools/designer/src/lib/sdk \
+ $QTDIR/tools/designer/src/lib/uilib
+ \endcode
+
+ When executed, the first thing QDoc will do is to read through the
+ headers specified in the \l {headers} {\c headers} variable, and
+ the ones located in the directories specified in the \c headerdir
+ variable (including all subdirectories), building an internal
+ structure of the classes and their functions.
+
+ Then it will read through the sources specified in the \l
+ {sources-variable} {\c sources}, and the ones located in the
+ directories specified in the \l {sourcedirs-variable} {\c
+ sourcedirs} varible (including all subdirectories), merging the
+ documentation with the structure it retrieved from the header
+ files.
+
+ If both the \c headers and \c headerdirs variables are defined,
+ QDoc will read through both, first \l {headers} {\c headers} then
+ \c headerdirs.
+
+ In the specified directories, QDoc will only read the files with
+ the \c fileextensions specified in the \l {headers.fileextensions}
+ {\c headers.fileextensions} variable. The files specified by
+ \l {headers} {\c headers} will be read without taking into account
+ their fileextensions.
+
+ See also \l headers and \l headers.fileextensions.
+
+ \target headers-variable
+ \section1 headers
+
+ The \c headers variable allows you to specify individual header
+ files in addition to those located in the directories specified by
+ the \l {headerdirs} {\c headerdirs} variable.
+
+ \badcode
+ headers = $QTDIR/src/gui/widgets/qlineedit.h \
+ $QTDIR/src/gui/widgets/qpushbutton.h
+ \endcode
+
+ When processing the \c headers variable, QDoc behaves in the same
+ way as it does when processing the \l {headerdirs} {\c headerdirs}
+ variable. For more information, see the \l {headerdirs} {\c
+ headerdirs} variable.
+
+ See also \l headerdirs.
+
+ \target headers.fileextensions-variable
+ \section1 headers.fileextensions
+
+ The \c headers.fileextensions variable specify the extension used
+ by the headers.
+
+ When processing the header files specified in the \l {headerdirs}
+ {\c headerdirs} variable, QDoc will only read the files with the
+ fileextensions specified in the \c headers.fileextensions
+ variable. In this way QDoc avoids spending time reading irrelevant
+ files.
+
+ The default extensions are *.ch, *.h, *.h++, *.hh, *.hpp, and
+ *.hxx.
+
+ The extensions are given as standard wildcard expressions. You
+ can add a file extension to the filter using '+='. For example:
+
+ \badcode
+ header.fileextensions += *.H
+ \endcode
+
+ \warning The above assignment may not work as described.
+
+ See also \l headerdirs.
+
+ \target includepaths-variable
+ \section1 includepaths
+
+ The \c includepaths variable is used for passing additional
+ include paths to the Clang parser that QDoc uses for parsing C++
+ code for documentation comments.
+
+ The variable accepts a list of paths, prefixed with \c{-I} (include
+ path), \c {-F} (\macos framework include path), or \c{-isystem}
+ (system include path). If a prefix is omitted, \c{-I} is used by
+ default.
+
+ Paths relative to the current .qdocconf file are resolved into
+ absolute paths. Paths that do not exist in the file system are
+ ignored.
+
+ \note For Qt documentation projects, the build system typically
+ provides the required include paths as command line
+ arguments when invoking QDoc.
+
+ See also \l moduleheader.
+
+ \target ignorewords-variable
+ \section1 ignorewords
+
+ The \c ignorewords variable is used for specifying a list of strings
+ that QDoc will ignore when resolving hyperlink targets.
+
+ QDoc has an auto-linking feature, where linking is attempted for words
+ that resemble C++ or QML entities. Specifically, a string
+ qualifies for auto-linking if it is at least three characters in
+ length, has no whitespace, and it
+
+ \list
+ \li is a \e camelCase word, that is, it contains at least one
+ uppercase character at index greater than zero, or
+ \li contains the substring \c {()} or \c {::}, or
+ \li contains at least one special character, \c {@} or \c {_}.
+ \endlist
+
+ Adding a qualified word to \c ignorewords stops QDoc from linking
+ that word automatically. For example, if the word \e OpenGL is a
+ valid link target (a section, \l{page-command}{\\page}, or
+ \l {externalpage-command}{\\externalpage} title), a hyperlink for
+ each occurrence can be avoided with
+
+ \badcode
+ ignorewords += OpenGL
+ \endcode
+
+ Linking explicitly with \l {l-command}{\\l} continues to work for
+ ignored words.
+
+ The \c ignorewords variable was introduced in QDoc 5.14.
+
+ \target ignoresince-variable
+ \section1 ignoresince
+
+ The \c ignoresince variable is used for setting a cutoff value for
+ versions passed to the \l {since-command}{\\since} command. All
+ \\since commands that define a version lower than the cutoff are
+ ignored and do not generate output.
+
+ The cutoff values are project-specific. The project name can be
+ defined as a subvariable. The default project name is \e Qt. For
+ example:
+
+ \badcode
+ ignoresince = 5.0
+ ignoresince.QDoc = 5.0
+ \endcode
+
+ These will ignore \\since commands where the major version is 4
+ or lower and the project is either \c QDoc or undefined.
+
+ \badcode
+ \since 3.2 # Ignored
+ \since 5.2 # Documented (as 'Qt 5.2')
+ \since QDoc 4.6 # Ignored
+ \since QtQuick 2.5 # Documented
+ \endcode
+
+ The \c ignoresince variable was introduced in QDoc 5.15.
+
+ See also \l {since-command}{\\since}.
+
+ \target imagedirs-variable
+ \section1 imagedirs
+
+ The \c imagedirs variable specifies the directories containing the
+ images used in the documentation.
+
+ The \l {images} {\c images} and \c imagedirs variables are used by
+ the \l {image-command} {\\image} and \l {inlineimage-command}
+ {\\inlineimage} commands. If both the \l {images} {\c images} and
+ \c imagedirs variables are defined, QDoc will search in both. First
+ in \l {images} {\c images}, then in \c imagedirs.
+
+ QDoc will search through the directories in the specified order,
+ and accept the first matching file it finds. It will only search
+ in the specified directories, \e not in subdirectories.
+
+ \badcode
+ imagedirs = $QTDIR/doc/src/images \
+ $QTDIR/examples
+
+ images = $QTDIR/doc/src/images/calculator-example.png
+ \endcode
+
+ When processing
+
+ \badcode
+ \image calculator-example.png
+ \endcode
+
+ QDoc will then see if there is a file called
+ calculator-example.png listed as a value in the \c images
+ variable. If there isn't, it will search in the \c imagedirs
+ variable for:
+
+ \badcode
+ $QTDIR/doc/src/images/calculator-example.png
+ \endcode
+
+ If the file doesn't exist, QDoc will look for a file called
+
+ \badcode
+ $QTDIR/examples/calculator-example.png
+ \endcode
+
+ \target language-variable
+ \section1 language
+
+ The \c language variable specifies the language of the source code
+ that is used in the documentation. Specifically, it defines the
+ default language for parsing source code within \\code .. \\endcode
+ blocks.
+
+ \badcode
+ language = Cpp
+ \endcode
+
+ The default language is C++ (Cpp), and doesn't need to be explicitly
+ specified. If the code snippets in the documentation consist mainly
+ of QML code, set QML as the default:
+
+ \badcode
+ language = QML
+ \endcode
+
+ See also \l {code-command}[\\code}.
+
+ \target locationinfo-variable
+ \section1 locationinfo
+
+ The \c locationinfo boolean variable determines whether detailed
+ location information about each entity is written to
+ \c {.index}-files and \c {.webxml}-files (when using the WebXML
+ output format).
+
+ Location information consists of the full path and line
+ number of either the declaration or documentation comment block
+ in the source code.
+
+ Setting this to \c false turns off location info:
+
+ \badcode
+ locationinfo = false
+ \endcode
+
+ The default value is \c true.
+
+ The \c locationinfo variable was introduced in QDoc 5.15.
+
+ \target macro-variable
+ \section1 macro
+
+ The \c macro variable is used to create your own simple QDoc
+ commands. The syntax is \tt {macro.\e{command} = \e{definition}},
+ where the definition is written using QDoc syntax.
+
+ A macro variable can be restricted for use in one type of output
+ generation. By appending \c {.HTML} to the macro name, for
+ example, the macro is only used when generating HTML output.
+
+ \badcode
+ macro.key = "\\b"
+ macro.raisedaster.HTML = "<sup>*</sup>"
+ \endcode
+
+ The first macro defines the \\key command to render its argument
+ using a bold font. The second macro defines the \\raisedaster
+ command to render a superscript asterisk, but only when generating
+ HTML.
+
+ A macro can also take up to seven parameters:
+
+ \badcode
+ macro.hello = "Hello \1!"
+ \endcode
+
+ Parameters are passed to macros the same way as to other commands:
+
+ \badcode
+ \hello World
+ \endcode
+
+ When using more than one parameter, or when an argument
+ contains whitespace, enclose each argument in braces:
+
+ \badcode
+ macro.verinfo = "\1 (version \2)"
+ \endcode
+
+ \badcode
+ \verinfo {QFooBar} {1.0 beta}
+ \endcode
+
+ A special macro option, \e match, can be added for additional
+ regular expression pattern matching for expanded macros.
+
+ For example,
+
+ \badcode
+ macro.qtminorversion = "$QT_VER"
+ macro.qtminorversion.match = "\\d+\\.(\\d+)"
+ \endcode
+
+ This creates a macro \\qtminorversion that expands to the minor
+ version based on the QT_VER environment variable.
+
+ A macro that defines a match pattern outputs all capture groups
+ (parentheses) concatenated together, or the exact matched string
+ if the pattern does not contain any capture groups.
+
+ For more information about pre-defined macros, see \l {Macros}.
+
+ \target manifestmeta-variable
+ \section1 manifestmeta
+
+ The \c manifestmeta variable specifies additional meta-content
+ for the example manifest files generated by QDoc.
+
+ See the \l{Manifest Meta Content} section for more information.
+
+ \target moduleheader-variable
+ \section1 moduleheader
+
+ The \c moduleheader variable defines the name of the module
+ header of a documented C++ module.
+
+ Projects that document C++ APIs require a module-level header
+ that includes all public classes, namespaces and header files
+ for the module. The Clang parser in QDoc uses this file to
+ build a pre-compiled header (PCH) for the module to increase
+ the speed of parsing source files.
+
+ By default, the \l{project-variable}{project} name is used
+ also as the module header name.
+
+ \badcode
+ project = QtCore
+ \endcode
+
+ With the above project name, QDoc searches a module header
+ \e QtCore in all known include paths; first using the paths
+ passed as command line arguments, then the paths listed in
+ the \l includepaths variable.
+
+ QDoc will issue a warning if the module header is not found.
+ It will then attempt to build an artificial module header
+ based on the headers listed in the \l {headerdirs-variable}
+ {headerdirs} variable.
+
+ For Qt documentation projects, the build system typically
+ provides QDoc with correct include paths to locate the
+ module header, provided that the \c project variable is set
+ correctly. The \c moduleheader variable provides an
+ alternative file name for QDoc to search for.
+
+ If the project contains no C++ documentation, QDoc should be
+ instructed to skip generating a PCH by setting \c moduleheader
+ to an empty string:
+
+ \badcode
+ # No C++ code to document in this project
+ moduleheader =
+ \endcode
+
+ See also \l includepaths and \l project.
+
+ \target naturallanguage-variable
+ \section1 naturallanguage
+
+ The \c naturallanguage variable specifies the natural language
+ used for the documentation generated by QDoc.
+
+ \badcode
+ naturallanguage = zh-Hans
+ \endcode
+
+ By default, the natural language is \c en for compatibility with
+ legacy documentation.
+
+ QDoc will add the natural language information to the HTML it
+ generates, using the \c lang and \c xml:lang attributes.
+
+ See also \l {sourceencoding-variable} {sourceencoding},
+ \l {outputencoding-variable} {outputencoding},
+ \l{http://www.w3.org/TR/xhtml1/#C_7}
+ {C.7. The lang and xml:lang Attributes} and
+ \l{http://www.w3.org/TR/i18n-html-tech-lang/#ri20040429.113217290}
+ {Best Practice 13: Using Hans and Hant codes}.
+
+ \target navigation-variable
+ \section1 navigation
+
+ The \c navigation sub-variables, if defined, set the home page, landing
+ page, C++ classes page, and QML types page that are visible in the
+ generated navigation bar for each page.
+
+ In a project with multiple sub-projects (for example, Qt modules), each
+ sub-project typically defines its own landing page while the same home
+ page is used across all sub-projects.
+
+ \b Sub-variables
+
+ \table
+ \row \li \c navigation.homepage
+ \li Project home page.
+ \row \li \c navigation.hometitle
+ \li (Optional) User-visible title for the home page.
+ Default value is taken from \c homepage.
+ \row \li \c navigation.landingpage
+ \li Sub-project landing page.
+ \row \li \c navigation.landingtitle
+ \li (Optional) User-visible title for the landing page.
+ Defaults value is taken from \c landingpage.
+ \row \li \c navigation.cppclassespage
+ \li Top-level page that lists all C++ classes for this (sub-)project.
+ Typically, the title of a \l {module-command}{\\module} page.
+ \row \li \c navigation.cppclassestitle
+ \li (Optional) User-visible title for the C++ classes page.
+ Default is "C++ Classes".
+ \row \li \c navigation.qmltypespage
+ \li Top-level page that lists all QML types for this (sub-)project.
+ Typically, the title of a \l {qmlmodule-command}{\\qmlmodule} page.
+ \row \li \c navigation.qmltypestitle
+ \li (Optional) User-visible title for the QML types page.
+ Default is "QML Types".
+ \row \li \c navigation.toctitles (Since QDoc 6.0)
+ \li Page title(s) containing a \l {list-command}{\\list} structure that
+ acts as a table of contents (TOC). QDoc generates navigation links
+ for pages listed in the TOC, without the need for
+ \l {nextpage-command}{\\nextpage} and \l {previouspage-command}
+ {\\previouspage} commands, as well as a navigation hierarchy that's
+ visible in the navigation bar (breadcrumbs) for HTML output.
+ \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.
+ \endtable
+
+ For example:
+
+ \badcode
+ # Common configuration
+ navigation.homepage = index.html
+ navigation.hometitle = "Qt $QT_VER"
+
+ # qtquick.qdocconf
+ navigation.landingpage = "Qt Quick"
+ navigation.cppclassespage = "Qt Quick C++ Classes"
+ navigation.qmltypespage = "Qt Quick QML Types"
+ \endcode
+
+ The above configuration produces the following navigation bar for \c Item QML type:
+
+ \badcode
+ Qt 5.10 > Qt Quick > QML Types > Item QML Type
+ \endcode
+
+ \target outputdir-variable
+ \section1 outputdir
+
+ The \c outputdir variable specifies the directory where QDoc will
+ put the generated documentation.
+
+ \badcode
+ outputdir = $QTDIR/doc/html
+ \endcode
+
+ locates the generated Qt reference documentation in
+ $QTDIR/doc/html. For example, the documentation of the QWidget
+ class is located in
+
+ \badcode
+ $QTDIR/doc/html/qwidget.html
+ \endcode
+
+ The associated images will be put in an \c images subdirectory.
+
+ \warning When running QDoc multiple times using the same output
+ directory, all files from the previous run will be lost.
+
+ \target outputencoding-variable
+ \section1 outputencoding
+
+ The \c outputencoding variable specifies the encoding used for the
+ documentation generated by QDoc.
+
+ \badcode
+ outputencoding = UTF-8
+ \endcode
+
+ By default, the output encoding is \c ISO-8859-1 (Latin1) for
+ compatibility with legacy documentation. When generating
+ documentation for some languages, particularly non-European
+ languages, this is not sufficient and an encoding such as UTF-8 is
+ required.
+
+ QDoc will encode HTML using this encoding and generate the correct
+ declarations to indicate to browsers which encoding is being
+ used. The \l naturallanguage configuration variable should also be
+ specified to provide browsers with a complete set of character
+ encoding and language information.
+
+ See also \l outputencoding and \l naturallanguage.
+
+ \target outputformats-variable
+ \section1 outputformats
+
+ The \c outputformats variable specifies the format(s) of
+ the generated documentation.
+
+ Since Qt 5.11, QDoc supports the HTML and WebXML formats; since
+ Qt 5.15, it can also generate the documentation in DocBook. If no
+ \c outputformats are specified, QDoc generates the documentation
+ in HTML (the default format). All output formats can be specified,
+ with dedicated output directories and other settings. For example:
+
+ \badcode
+ outputformats = WebXML HTML
+ WebXML.nosubdirs = true
+ WebXML.outputsubdir = webxml
+ WebXML.quotinginformation = true
+ \endcode
+
+ This generates HTML documentation using the default settings, as well
+ as WebXML documentation into output subdirectory \e webxml.
+
+ \target outputprefixes-variable
+ \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
+ documentation.
+
+ \badcode
+ outputprefixes = QML
+ outputprefixes.QML = uicomponents-
+ \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.
+
+ The output prefix is applied to file names for documentation on
+ QML.
+
+ \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.
+
+ \badcode
+ outputsuffixes = QML
+ outputsuffixes.QML = -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
+ \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.
+
+ The \c outputsuffixes variable was introduced in QDoc 5.6.
+
+ \target qhp-variable
+ \section1 qhp
+
+ The \c qhp sub-variables are used to define the information to be
+ written out to Qt Help Project (\c{qhp}) files.
+
+ See the \l{Creating Help Project Files} chapter for information
+ about this process.
+
+ Since QDoc 6.6, setting the base \c qhp variable to \c true means
+ that a valid help project configuration is expected:
+
+ \badcode
+ qhp = true
+ \endcode
+
+ Then, if a project configuration did not define \c {qhp.projects},
+ QDoc issues a warning. This is useful for ensuring that all
+ documentation projects with a shared top-level \e .qdocconf file
+ (as in Qt) are configured correctly.
+
+ To turn off the warning, set the variable to \c false.
+
+ \target sourcedirs-variable
+ \section1 sourcedirs
+
+ The \c sourcedirs variable specifies the directories containing
+ the \c .cpp or \c .qdoc files used in the documentation.
+
+ \badcode
+ sourcedirs += .. \
+ ../../../examples/gui/doc/src
+ \endcode
+
+ When executed, the first thing QDoc will do is to read through the
+ headers specified in the \l {header-command} {\c header} variable,
+ and the ones located in the directories specified in the \c
+ headerdir variable (including all subdirectories), building an
+ internal structure of the classes and their functions.
+
+ Then it will read through the sources specified in the \l
+ {sources} {\c sources}, and the ones located in the directories
+ specified in the \l {sourcedirs} {\c sourcedirs} variable
+ (including all subdirectories), merging the documentation with the
+ structure it retrieved from the header files.
+
+ If both the \c sources and \c sourcedirs variables are defined,
+ QDoc will read through both, first \l {sources} {\c sources} then
+ \c sourcedirs.
+
+ In the specified directories, QDoc will only read the files with
+ the \c fileextensions specified in the \l {sources.fileextensions}
+ {\c sources.fileextensions} variable. The files specified by \l {sources}
+ {\c sources} will be read independent of their fileextensions.
+
+ See also \l {sources-variable} {sources} and
+ \l {sources.fileextensions-variable} {sources.fileextensions}.
+
+ \target sourceencoding-variable
+ \section1 sourceencoding
+
+ The \c sourceencoding variable specifies the encoding used for the
+ source code and documentation.
+
+ \badcode
+ sourceencoding = UTF-8
+ \endcode
+
+ By default, the source encoding is \c ISO-8859-1 (Latin1) for
+ compatibility with legacy documentation. For some languages,
+ particularly non-European languages, this is not sufficient and an
+ encoding such as UTF-8 is required.
+
+ Although QDoc will use the encoding to read source and
+ documentation files, limitations of C++ compilers may prevent you
+ from using non-ASCII characters in source code comments. In cases
+ like these, it is possible to write API documentation completely
+ in documentation files.
+
+ See also \l {naturallanguage-variable} {naturallanguage} and
+ \l {outputencoding-variable} {outputencoding}.
+
+ \target sources-variable
+ \section1 sources
+
+ The \c sources variable allows you to specify individual source
+ files in addition to those located in the directories specified by
+ the \l {sourcedirs-variable} {sourcedirs} variable.
+
+ \badcode
+ sources = $QTDIR/src/gui/widgets/qlineedit.cpp \
+ $QTDIR/src/gui/widgets/qpushbutton.cpp
+ \endcode
+
+ When processing the \c sources variable, QDoc behaves in the same
+ way as it does when processing the \l {sourcedirs-variable}
+ {sourcedirs} variable. For more information, see the \l
+ {sourcedirs-variable} {sourcedirs} variable.
+
+ See also \l {sourcedirs-variable} {sourcedirs}.
+
+ \target sources.fileextensions-variable
+ \section1 sources.fileextensions
+
+ The \c sources.fileextensions variable filters the files within a
+ source directory.
+
+ When processing the source files specified in the \l {sourcedirs}
+ {\c sourcedirs} variable, QDoc will only read the files with the
+ fileextensions specified in the \c sources.fileextensions
+ variable. In this way QDoc avoid spending time reading irrelevant
+ files.
+
+ The default extensions are *.c++, *.cc, *.cpp, *.cxx, *.mm, *.qml
+ and *.qdoc.
+
+ The extensions are given as standard wildcard expressions. You
+ can add a file extension to the filter using '+='. For example:
+
+ \badcode
+ sources.fileextensions += *.CC
+ \endcode
+
+ \warning The above assignment may not work as described.
+
+ See also \l {sourcedirs-variable} {sourcedirs} and \l
+ {sources-variable} {sources}.
+
+
+ \target spurious-variable
+ \section1 spurious
+
+ The \c spurious variable excludes specified QDoc warnings from the
+ output. The warnings are specified using standard wildcard
+ expressions.
+
+ \badcode
+ spurious = "Cannot find .*" \
+ "Missing .*"
+ \endcode
+
+ makes sure that warnings matching either of these expressions,
+ will not be part of the output when running QDoc. For example
+ would the following warning be omitted from the output:
+
+ \badcode
+ src/opengl/qgl_mac.cpp:156: Missing parameter name
+ \endcode
+
+ \target syntaxhighlighting
+ \section1 syntaxhighlighting
+
+ The \c syntaxhighlighting variable specifies whether QDoc should
+ perform syntax highlighting on source code quoted in the
+ documentation it generates.
+
+ \badcode
+ syntaxhighlighting = true
+ \endcode
+
+ will enable syntax highlighting for all supported programming
+ languages.
+
+ \target tabsize-variable
+ \section1 tabsize
+
+ The \c tabsize variable defines the size of a tab character.
+
+ \badcode
+ tabsize = 4
+ \endcode
+
+ will give the tab character the size of 4 spaces. The default
+ value of the variable is 8, and doesn't need to be specified.
+
+ \target tagfile-variable
+ \section1 tagfile
+
+ The \c tagfile variable specifies the Doxygen tag file to be
+ written when HTML is generated.
+
+ \target version-variable
+ \section1 version
+
+ The \c version variable specifies the version number of the
+ documented software.
+
+ \badcode
+ version = 5.6.0
+ \endcode
+
+ When a version number is specified (using the \tt{\l version} or
+ \tt {\l versionsym} variables in a \c .qdocconf file), it is
+ accessible through the corresponding \\version command for use in
+ the documentation.
+
+ \warning The \\version command's functionality is not fully
+ implemented; currently it only works within raw HTML code.
+
+ See also \l versionsym.
+
+ \target versionsym-variable
+ \section1 versionsym
+
+ The \c versionsym variable specifies a C++ preprocessor symbol
+ that defines the version number of the documented software.
+
+ \badcode
+ versionsym = QT_VERSION_STR
+ \endcode
+
+ QT_VERSION_STR is defined in qglobal.h as follows
+
+ \badcode
+ #define QT_VERSION_STR "5.14.1"
+ \endcode
+
+ When a version number is specified (using the \tt{\l version} or
+ \tt {\l versionsym} variables in a \c .qdocconf file), it is
+ accessible through the corresponding \\version command for use in
+ the documentation.
+
+ \warning The \\version command's functionality is not fully
+ implemented. Currently, it only works within raw HTML code.
+
+ See also \l {version} {\\version}.
+
+ \target warninglimit-variable
+ \section1 warninglimit
+
+ The \c warninglimit variable sets the maximum number of documentation
+ warnings allowed. If this limit is exceeded, QDoc continues as normal
+ but exits with the warning count as the error code. If the limit was
+ not exceeded or \c warninglimit was not defined, QDoc process exits
+ with 0, assuming there were no other critical errors.
+
+ Setting the \c warninglimit to \c 0 means failure on any warning.
+
+ \note By default, QDoc does not enforce the warning limit. Enable it
+ with \c {warninglimit.enabled = true} or by defining
+ the \c QDOC_ENABLE_WARNINGLIMIT environment variable.
+
+ For example,
+
+ \badcode
+ # Fail the documentation build if we have more than 100 warnings
+ warninglimit = 100
+ warninglimit.enabled = true
+ \endcode
+
+ The \c warninglimit variable was introduced in Qt 5.11.
+*/
+
+/*!
+ \page 22-creating-help-project-files.html
+ \previouspage Generic Configuration Variables
+ \nextpage Format-specific Configuration Variables
+
+ \title Creating Help Project Files
+
+ \section1 Overview
+
+ Qt Assistant uses a system for managing Qt documentation that requires
+ QDoc to generate inventories of files.
+
+ QDoc allows configuration variables to be used to specify which pages are
+ to be used in each documentation set it generates. These are specified as
+ subvariables of the \c qhp variable with each set declared using a unique
+ identifier as a subvariable.
+
+ For example, the configuration file for the Qt Quick documentation set
+ specifies information about the set as subvariables with the
+ \c{qhp.QtQuick} prefix:
+
+ \badcode
+ qhp.projects = QtQuick
+
+ qhp.QtQuick.file = qtquick.qhp
+ qhp.QtQuick.namespace = org.qt-project.qtquick.$QT_VERSION_TAG
+ qhp.QtQuick.virtualFolder = qtquick
+ qhp.QtQuick.indexTitle = Qt Quick
+ qhp.QtQuick.indexRoot =
+
+ qhp.QtQuick.subprojects = qmltypes classes examples
+
+ qhp.QtQuick.subprojects.qmltypes.title = QML Types
+ qhp.QtQuick.subprojects.qmltypes.indexTitle = Qt Quick QML Types
+ qhp.QtQuick.subprojects.qmltypes.selectors = qmlclass
+ qhp.QtQuick.subprojects.qmltypes.sortPages = true
+
+ qhp.QtQuick.subprojects.classes.title = Classes
+ qhp.QtQuick.subprojects.classes.title = C++ Classes
+ qhp.QtQuick.subprojects.classes.indexTitle = Qt Quick C++ Classes
+ qhp.QtQuick.subprojects.classes.selectors = class fake:headerfile
+ qhp.QtQuick.subprojects.classes.sortPages = true
+
+ qhp.QtQuick.subprojects.examples.title = Examples
+ qhp.QtQuick.subprojects.examples.indexTitle = Qt Quick Examples and Tutorials
+ qhp.QtQuick.subprojects.examples.selectors = fake:example
+ \endcode
+
+ The documentation set may include one or more subprojects, which are added
+ to the table of contents under the name specified by \c title. The page
+ in the documentation referred to by the \c indexTitle acts as the index page
+ for the subproject. The page types to list under the subproject are specified
+ by \c selectors. The entries are alphabetically sorted if \c sortPages is set
+ to \c true.
+
+ \section2 Using Selectors
+
+ The \c selectors property specifies which page types are listed under the
+ table of contents entry for a subproject. Multiple selectors can be listed,
+ separated by whitespace.
+
+ \table
+ \header \li Selector \li Description
+ \row \li \c namespace \li Namespaces
+ \row \li \c class \li Classes
+ \row \li \c qmltype \li QML Types
+ \row \li \c qmlclass \li Alias for \c qmltype.
+ \row \li \c module[:name] \li C++ modules or members of the module
+ with a specified name.
+ \row \li \c qmlmodule[:name] \li QML modules or members of the module
+ with a specified name.
+ \row \li \c doc[:subtype] \li Documentation pages with a specified
+ \c subtype. Multiple subtypes can be
+ listed as a comma-separated list.
+ \row \li \c fake \li Alias for \c doc.
+ \row \li \c group[:groupname] \li Documentation pages for members of a
+ specified group, as added using the
+ \l {ingroup-command}
+ {\\ingroup} groupname command.
+ Multiple group names can be listed as
+ a comma-separated list.
+ (Introduced in QDoc 5.6).
+ \endtable
+
+ Available subtypes for the \c doc selector:
+
+ \table
+ \header \li Subtype \li Description
+ \row \li \c example \li Examples
+ \row \li \c headerfile \li Header files
+ \row \li \c page \li Documentation pages defined with the
+ \l {page-command} {\\page} command.
+ \endtable
+
+ For example, the following configuration would select example pages and
+ pages that include the \c {\ingroup tutorials} command:
+
+ \badcode
+ qhp.QtQuickControls.subprojects = examples
+ qhp.QtQuickControls.subprojects.examples.title = Examples and Tutorials
+ qhp.QtQuickControls.subprojects.examples.indexTitle = Qt Quick Controls Examples
+ qhp.QtQuickControls.subprojects.examples.selectors = doc:example group:tutorials
+ qhp.QtQuickControls.subprojects.examples.sortPages = true
+ \endcode
+
+ \section2 Adding Table of Contents
+
+ To create a table of contents for a manual, create a subproject with
+ a \c{type} property and set it to \c{manual}. The page in the documentation
+ referred to by the \c{indexTitle} property must contain a list of links
+ that acts as a table of contents for the whole manual. QDoc will take the
+ information in this list and create a table of contents for the subproject.
+
+ For example, the configuration file for Qt Creator defines only one
+ subproject for its documentation, including all the documentation in a
+ single manual:
+
+ \badcode
+ qhp.QtCreator.subprojects = manual
+ qhp.QtCreator.subprojects.manual.title = Qt Creator Manual
+ qhp.QtCreator.subprojects.manual.indexTitle = Qt Creator Manual
+ qhp.QtCreator.subprojects.manual.type = manual
+ \endcode
+
+ In this example, the page entitled "Qt Creator Manual" contains a nested
+ list of links to pages in the documentation which is duplicated in
+ Qt Assistant's Contents tab.
+*/
+
+/*!
+ \page 24-qdoc-configuration-htmlvariables.html
+ \previouspage Creating Help Project Files
+ \nextpage Supporting Derived Projects
+
+ \keyword HTML Specific Configuration Variables
+ \title Format-specific Configuration Variables
+
+ The format-specific configuration variables define the generated
+ documentation's style, or define the contents of the
+ documentation's footer or postheader.
+
+ Some of the configuration values are relevant only for the HTML
+ output format and their values contain raw HTML.
+
+ \target HTML.footer-variable
+ \section1 HTML.footer
+
+ The \c HTML.footer variable defines the content of the generated
+ HTML documentation's footer.
+
+ The footer is rendered at the bottom of the generated
+ documentation page.
+
+ The variable's value is given as raw HTML code enclosed by
+ quotation marks. Note that if the value spans several lines, each
+ line needs to be enclosed by quotation marks.
+
+ \badcode
+ HTML.footer = "<p /><address><hr /><div align=\"center\">\n" \
+ ...
+ "</tr></table></div></address>"
+ \endcode
+
+ \target FORMAT.nosubdirs
+ \section1 <FORMAT>.nosubdirs
+
+ A boolean value which, when \c true, enables single-directory output
+ mode; all generated files go to \l {FORMAT.outputsubdir} directory,
+ instead of a subdirectory based on the documentation project name.
+
+ \target FORMAT.outputsubdir
+ \section1 <FORMAT>.outputsubdir
+
+ Defines the subdirectory under \l outputdir where documentation is
+ generated.
+
+ \badcode
+ HTML.nosubdirs = true
+ HTML.outputsubdir = html
+ \endcode
+
+ With above, the output goes to \c {<outputdir>/html}.
+
+ \target HTML.postheader-variable
+ \section1 HTML.postheader
+
+ The \c HTML.postheader variable defines the content of the
+ generated HTML documentation's postheader.
+
+ The header is rendered at the top of the generated documentation
+ page.
+
+ The variable's value is given as raw HTML enclosed by quotation
+ marks. Note that if the value spans several lines, each line needs
+ to be enclosed by quotation marks.
+
+ \badcode
+ HTML.postheader = "<table border=\"0\"..." \
+ ...
+ "<img src=\"images/qt-logo.png\" \
+ "align=\"right\" width=\"203\" height=\"32\""\
+ "border=\"0\" />" \
+ "</td></tr>" \
+ "</table>"
+ \endcode
+
+ The complete variable entry in \l qtgui.qdocconf provides the
+ standard header of the \l {http://doc.qt.io/qt-5/qtgui-index.html}
+ {Qt GUI Documentation}.
+
+ \target FORMAT.quotinginformation
+ \section1 <FORMAT>.quotinginformation
+
+ A boolean value which, when \c true, generates references to
+ quoted content (for example, \l {quotefromfile-command}{\\quotefromfile}
+ and \l {snippet-command}{\\snippet} commands) instead of including
+ the content directly.
+
+ Used currently for the \c WebXML output format.
+
+ \badcode
+ WebXML.quotinginformation = true
+ \endcode
+
+ \target HTML.style-variable
+ \section1 HTML.style
+
+ The HTML.style variable defines the style for
+ the generated HTML documentation.
+
+ The variable's value is given as raw HTML enclosed by quotation
+ marks. Note that if the value spans several lines, each line needs
+ to be enclosed by quotation marks.
+
+ \badcode
+ HTML.style = "h3.fn,span.fn" \
+ "{ margin-left: 1cm; text-indent: -1cm; }\n" \
+ "a:link { color: #004faf; text-decoration: none }\n" \
+ "a:visited" \
+ "{ color: #672967; text-decoration: none }\n" \
+ "td.postheader { font-family: sans-serif }\n" \
+ "tr.address { font-family: sans-serif }\n" \
+ "body { background: #ffffff; color: black; }"
+ \endcode
+
+ \target HTML.stylesheets-variable
+ \section1 HTML.stylesheets
+
+ The HTML.stylesheets variable defines a list of stylesheets
+ to use for the generated HTML documentation.
+
+ Using separate stylesheets for the documentation makes it easier
+ to customize and experiment with the style used once the contents
+ has been generated. Typically, it is only necessary to define a
+ single stylesheet for any set of documentation; for example:
+
+ \badcode
+ HTML.stylesheets = path/to/classic.css
+ \endcode
+
+ QDoc expects to find stylesheets in the directory containing the
+ \l qtgui.qdocconf file, and it will copy those specified to the output
+ directory alongside the HTML pages.
+
+ \target HTML.tocdepth
+ \section1 <FORMAT>.tocdepth
+
+ The \c {<FORMAT>.tocdepth} variable defines how many document sections
+ are printed in the table of contents. Setting tocdepth to \c 0 disables
+ the table of contents while leaving it undefined prints all document
+ sections.
+
+ Currently only has an effect for the HTML format:
+
+ \badcode
+ HTML.tocdepth = 3
+ \endcode
+*/
+
+/*!
+ \page 25-qdoc-configuration-derivedprojects.html
+ \previouspage Format-specific Configuration Variables
+ \nextpage Example Manifest Files
+
+ \title Supporting Derived Projects
+
+ Some configuration variables allow you to use QDoc to support
+ Qt-based projects. They allow your project to contain links to the
+ online Qt documentation, which means that QDoc will be able to
+ create links to the class reference documentation, without any
+ explicit linking command.
+
+ \target description-variable
+ \section1 description
+
+ The description variable holds a short description of the
+ associated project.
+
+ See also \l project.
+
+ \target indexes-variable
+ \section1 indexes
+
+ The \c indexes variable defines a set of paths to index files to load.
+
+ \badcode
+ indexes = \
+ $QT_INSTALL_DOCS/qtcore/qtcore.index \
+ $SOME_OTHER_PROJECT/doc/foo.index
+ \endcode
+
+ The \c indexes variable provides an alternative to \l depends for
+ defining project's dependencies. As direct paths are provided, no
+ \c -indexdir command line option(s) are required when invoking QDoc.
+
+ It is possible to define dependencies using either variable. Qt
+ documentation only uses the \c depends variable.
+
+ See also \l depends, \l project and \l url.
+
+ \target project-variable
+ \section1 project
+
+ The \c project variable provides a name for the project associated
+ with the \c .qdocconf file. This is a mandatory variable that all
+ projects must set.
+
+ The project's name is used to form a file name for the associated
+ project's \e index file.
+
+ \badcode
+ project = QtCreator
+ \endcode
+
+ This will cause an index file called \c qtcreator.index to be
+ created.
+
+ If the project name contains whitespace or special characters,
+ these are replaced with dashes ('-') in the generated index file
+ name.
+
+ See also \l depends, \l indexes, and \l description.
+
+ \target url-variable
+ \section1 url
+
+ The \c url variable holds the base URL for the
+ documentation associated with the current project.
+
+ The URL is stored in the generated index file for the
+ project. When we use the index on its own, QDoc will use this as
+ the base URL when constructing links to classes, functions, and
+ other things listed in the index.
+
+ \badcode
+ project = QtCore
+ description = Qt Core Reference Documentation
+ url = https://doc.qt.io/qt/
+
+ ...
+ \endcode
+
+ This ensures that whenever QDoc generates
+ references to entities in the Qt Core module, the base URL is
+ \c https://doc.qt.io/qt/.
+
+ See also \l depends, \l indexes and \l {url.examples}.
+
+ \target url.examples-variable
+ \section1 url.examples
+
+ The \c url.examples variable holds the base URL for the examples
+ associated with the current project.
+
+ If defined, a link to the example project directory is generated
+ at the end of each example documentation page. The \c url.examples
+ variable refers to the root directory of the examples related to
+ this project; it can be a link to an online repository (starting
+ with \e http:// or \e https://), or to the local file system
+ (\c file://).
+
+ If \c url.examples is not defined, QDoc will output a list of
+ example's files and images instead.
+
+ For example, given these definitions:
+
+ \badcode
+ url.examples = "https://code.qt.io/cgit/qt/qtbase.git/tree/examples/"
+ examplesinstallpath = corelib
+ \endcode
+
+ Then, for the following \l {example-command}{\\example} command:
+
+ \badcode *
+ /\1!
+ \example threads/semaphores
+ ...
+ \1/
+ \endcode
+
+ QDoc generates a link to
+ \c https://code.qt.io/cgit/qt/qtbase.git/tree/examples/corelib/threads/semaphores.
+
+ If the URL contains more components (for example, a query string)
+ after the example path, \\1 can be used as a placeholder for the
+ path:
+
+ \badcode
+ url.examples = "https://code.qt.io/cgit/qt/qtbase.git/tree/examples/\1?h=$QT_VER"
+ examplesinstallpath = corelib
+ \endcode
+
+ Given the same \\example command as above and assuming that
+ \c $QT_VER expands to \c {5.13}, the generated URL is
+ \c https://code.qt.io/cgit/qt/qtbase.git/tree/examples/corelib/threads/semaphores?h=5.13.
+
+ \c {url.examples} variable was introduced in QDoc version 5.13.
+
+ See also \l url, \l examplesinstallpath, and \l {example-command}{\\example}.
+
+ \target howto
+ \section1 How to Support Derived Projects
+
+ This feature makes use of the comprehensive indexes generated by
+ QDoc when it creates the Qt reference documentation.
+
+ For example, \l qtgui.qdocconf (the configuration file for Qt GUI)
+ contains the following variable definitions:
+
+ \badcode
+ project = QtGui
+ description = Qt GUI Reference Documentation
+ url = http://doc.qt.io/qt/
+
+ ...
+ \endcode
+
+ The \l project variable name is used to form a file name for the
+ index file; in this case the \c qtgui.index file is created. The \l
+ url is stored in the index file. Afterwards, QDoc will use this
+ as the base URL when constructing links to classes, functions,
+ and other things listed in the index.
+
+ See also \l depends, \l indexes, \l project, and \l url.
+*/
+
+/*!
+ \page 26-qdoc-configuration-example-manifest-files.html
+ \previouspage Supporting Derived Projects
+
+ \title Example Manifest Files
+
+ QDoc generates example-manifest.xml files that contain information about
+ all documented examples. These files are used by Qt Creator to present a
+ list of examples in its welcome screen and to link to their documentation.
+
+ \section1 Manifest XML Structure
+
+ A manifest file has the following structure:
+
+ \badcode
+ <?xml version="1.0" encoding="UTF-8"?>
+ <instructionals module="QtGui">
+ <examples>
+ <example
+ name="Analog Clock Window"
+ docUrl="qthelp://org.qt-project.qtgui.502/qtgui/analogclock.html"
+ projectPath="gui/analogclock/analogclock.pro"
+ imageUrl="qthelp://org.qt-project.qtgui.502/qtgui/images/analogclock-window.png">
+ <description><![CDATA[The Analog Clock Window example shows how
+ to draw the contents of a custom window.]]></description>
+ <tags>analog,clock,window</tags>
+ <fileToOpen>gui/analogclock/main.cpp</fileToOpen>
+ </example>
+ ...
+ </examples>
+ </instructionals>
+ \endcode
+
+ Each \c {<example>} element contains information about a name,
+ description, the location of the project file and documentation,
+ as well as a list of tags associated with the example.
+
+ \target metacontent
+ \section1 Manifest Meta Content
+
+ It is possible to augment the manifest files with additional
+ meta-content - that is, extra attributes and tags for selected
+ examples, using the \c manifestmeta configuration command.
+
+ One use case for meta-content is highlighting a number of prominent
+ examples. Another is improving search functionality by adding
+ relevant keywords as tags for a certain category of examples.
+
+ The examples for which meta-content is applied to is specified using
+ one or more filters. Matching examples to filters is done based on
+ names, with each example name prefixed with a module name and a
+ slash. Simple wildcard matching is supported; by using \c {*} at the
+ end it's possible to match multiple examples with a single string.
+
+ Example:
+
+ \badcode
+ manifestmeta.filters = highlighted sql webkit global
+
+ manifestmeta.highlighted.names = "QtGui/Analog Clock Window" \
+ "QtWidgets/Analog Clock"
+ manifestmeta.highlighted.attributes = isHighlighted:true
+
+ manifestmeta.sql.names = "QtSql/*"
+ manifestmeta.sql.tags = database,sql
+
+ manifestmeta.webkit.names = "QtWebKitExamples/*"
+ manifestmeta.webkit.tags = webkit
+
+ manifestmeta.global.names = *
+ manifestmeta.global.tags = qt6
+ \endcode
+
+ Above, an \c isHighlighted attribute is added to two examples. If
+ the attribute value is omitted, QDoc uses the string \c {true} by
+ default. Extra tags are added for Qt WebKit and Qt SQL examples, and
+ another tag is applied to all examples by using just \c {*} as the
+ match string.
+*/
+
+/*!
+ \page 21-1-minimum-qdocconf.html
+ \previouspage qtgui.qdocconf
+ \nextpage The QDoc Configuration File
+
+ \title minimum.qdocconf
+
+ \quotefile examples/minimum.qdocconf
+*/
+
+/*!
+ \page 21-2-qtgui-qdocconf.html
+ \previouspage Supporting Derived Projects
+ \nextpage minimum.qdocconf
+
+ \title qtgui.qdocconf
+
+ \quotefile files/qtgui.qdocconf
+*/
diff --git a/src/qdoc/qdoc/doc/qdoc-manual-topiccmds.qdoc b/src/qdoc/qdoc/doc/qdoc-manual-topiccmds.qdoc
new file mode 100644
index 000000000..e03ea7b28
--- /dev/null
+++ b/src/qdoc/qdoc/doc/qdoc-manual-topiccmds.qdoc
@@ -0,0 +1,1035 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page 13-qdoc-commands-topics.html
+ \previouspage Command Index
+ \nextpage Context Commands
+
+ \title Topic Commands
+
+ A topic command tells QDoc which source code element is being
+ documented. Some topic commands allow you to create documentation
+ pages that aren't tied to any underlying source code element.
+
+ When QDoc processes a QDoc comment, it tries to connect the
+ comment to an element in the source code by first looking for a
+ topic command that names the source code element. If there is no
+ topic command, QDoc tries to connect the comment to the source
+ code element that immediately follows the comment. If it can't do
+ either of these and if there is no topic command that indicates
+ the comment does not have an underlying source code element (e.g.
+ \l{page-command} {\\page}), then the comment is discarded.
+
+ \target topic argument
+
+ The name of the entity being documented is usually the only
+ argument for a topic command. Use the complete name. Sometimes
+ there can be a second parameter in the argument. See e.g. \l
+ {page-command} {\\page}.
+
+ \code
+ \enum QComboBox::InsertPolicy
+ \endcode
+
+ The \l {fn-command} {\\fn} command is a special case. For the \l
+ {fn-command} {\\fn} command, use the function's signature
+ including the class qualifier.
+
+ \code
+ \fn void QGraphicsWidget::setWindowFlags(Qt::WindowFlags wFlags)
+ \endcode
+
+ A topic command can appear anywhere in a comment but must stand
+ alone on its own line. It is good practice is to let the topic command
+ be the first line of the comment. If the argument spans several
+ lines, make sure that each line (except the last one) is ended
+ with a backslash. Moreover, QDoc counts parentheses, which means
+ that if it encounters a '(' it considers everything until the
+ closing ')' as its argument.
+
+ If a topic command is repeated with different arguments, the
+ same documentation will appear for both the units.
+
+ \badcode *
+ /\1!
+ \fn void PreviewWindow::setWindowFlags()
+ \fn void ControllerWindow::setWindowFlags()
+
+ Sets the widgets flags using the QWidget::setWindowFlags()
+ function.
+
+ Then runs through the available window flags, creating a text
+ that contains the names of the flags that matches the flags
+ parameter, displaying the text in the widgets text editor.
+ \1/
+ \endcode
+
+ The \c PreviewWindow::setWindowFlags() and \c
+ ControllerWindow::setWindowFlags() functions will get the same
+ documentation.
+
+ \section2 Nomenclature for files generated by topic commands
+
+ For many topic commands, such as \l {page-command}{\\page}, QDoc
+ generates a file when processing the documentation.
+
+ QDoc normalizes the name of each file before writing it to disk.
+ The following operations are performed:
+
+ \list
+ \li All sequences of non alphanumeric characters are replaced with a hyphen, '-'.
+ \li All uppercase letters are replaced with their lowercase equivalent.
+ \li All trailing hyphens are removed.
+ \endlist
+
+ For example, the following command generates a file named
+ \c{this-generates-a-file-and-writes-it-to-disk.html}:
+
+ \badcode
+ \page this_generates_a_file_(and_writes_it_to_DISK)-.html
+ \endcode
+
+ As the example shows, the name that is given to the file in the
+ command might differ from the name of the actual file that is
+ written to disk.
+
+ \section3 Prefixes and Suffixes for generated files
+
+ When QDoc generates a file, it may add a prefix, a suffix, or both,
+ depending on the element that the file will document.
+
+ The table below shows what those prefixes and suffixes are for
+ various elements.
+
+ \table
+ \header
+ \li Element
+ \li Prefix
+ \li Suffix
+ \li Command
+ \row
+ \li QML Modules
+ \li None
+ \li "-qmlmodule"
+ \li \l {qmlmodule-command}{\\qmlmodule}
+ \row
+ \li Modules
+ \li None
+ \li "-module"
+ \li \l {module-command}{\\module}
+ \row
+ \li Examples
+ \li The project name, as given by the \l
+ {project-variable}{project configuration variable},
+ followed by a hyphen.
+ \li "-example"
+ \li \l {example-command}{\\example}
+ \row
+ \li QML Types
+ \li The output prefix for QML, as given by the \l
+ {outputprefixes-variable}{outputprefixes configuration
+ variable}.
+
+ If the module that contains this type is known to QDoc,
+ the module name is added as a prefix, followed by the QML
+ output suffix, as defined by the \l
+ {outputsuffixes-variable}{outputsuffixes configuration
+ variable} and a hyphen.
+ \li None
+ \li \l {qmltype-command}{\\qmltype}
+ \endtable
+
+ \target class-command
+ \section1 \\class
+
+ The \\class command is for documenting a C++ \e class, a C/C++
+ \e struct, or a \e union. The argument is the complete, qualified
+ name of the class. The command tells QDoc that a class is part of
+ the public API, and lets you enter a detailed description.
+
+ \badcode *
+ /\1!
+ \class QMap::iterator
+ \inmodule QtCore
+
+ \brief The QMap::iterator class provides an STL-style
+ non-const iterator for QMap and QMultiMap.
+
+ QMap features both \l{STL-style iterators} and
+ \l{Java-style iterators}. The STL-style iterators ...
+ \1/
+ \endcode
+
+ The HTML documentation for the named class is written to a
+ \c{.html} file named from the class name, in lower case, and with
+ the double colon qualifiers replaced with '-'. For example, the
+ documentation for the \c QMap::iterator class is written to \c
+ qmap-iterator.html.
+
+ The file contains the class description from the \\class comment,
+ plus the documentation generated from QDoc comments for all the
+ class members: a list of the class's types, properties,
+ functions, signals, and slots.
+
+ In addition to the detailed description of the class, the \\class
+ comment typically contains an \l {inmodule-command} {\\inmodule}
+ command, as well as a \l {brief-command} {\\brief} description.
+ Here is a very simple example:
+
+ \badcode *
+ /\1!
+ \class PreviewWindow
+ \inmodule CustomWidgets
+ \brief The PreviewWindow class is a custom widget.
+ displaying the names of its currently set
+ window flags in a read-only text editor.
+
+ \ingroup miscellaneous
+
+ The PreviewWindow class inherits QWidget. The widget
+ displays the names of its window flags set with the \l
+ {function} {setWindowFlags()} function. It is also
+ provided with a QPushButton that closes the window.
+
+ ...
+
+ \sa QWidget
+ \1/
+ \endcode
+
+ The way QDoc renders this \\class depends on your \c {style.css}
+ file.
+
+ \target enum-command
+ \section1 \\enum
+
+ The \\enum command is for documenting a C++ enum type. The
+ argument is the full name of the enum type.
+
+ The enum values are documented in the \\enum comment using the \l
+ {value-command} {\\value} command. If an enum value is not
+ documented with \\value, QDoc emits a warning. These warnings can
+ be avoided using the \l {omitvalue-command} {\\omitvalue} command
+ to tell QDoc that an enum value should not be documented. The enum
+ documentation will be included on the class reference page, header
+ file page, or namespace page where the enum type is defined. For
+ example, consider the enum type \c {Corner} in the Qt namespace:
+
+ \code
+ enum Corner {
+ TopLeftCorner = 0x00000,
+ TopRightCorner = 0x00001,
+ BottomLeftCorner = 0x00002,
+ BottomRightCorner = 0x00003
+ #if defined(QT3_SUPPORT) && !defined(Q_MOC_RUN)
+ ,TopLeft = TopLeftCorner,
+ TopRight = TopRightCorner,
+ BottomLeft = BottomLeftCorner,
+ BottomRight = BottomRightCorner
+ #endif
+ };
+ \endcode
+
+ This enum can be cocumented this way:
+
+ \badcode *
+ /\1!
+ \enum Qt::Corner
+
+ This enum type specifies a corner in a rectangle:
+
+ \value TopLeftCorner
+ The top-left corner of the rectangle.
+ \value TopRightCorner
+ The top-right corner of the rectangle.
+ \value BottomLeftCorner
+ The bottom-left corner of the rectangle.
+ \value BottomRightCorner
+ The bottom-right corner of the rectangle.
+
+ \omitvalue TopLeft
+ \omitvalue TopRight
+ \omitvalue BottomLeft
+ \omitvalue BottomRight
+ Bottom-right (omitted; not documented).
+ \1/
+ \endcode
+
+ Note the inclusion of the namespace qualifier.
+
+ See also \l {value-command} {\\value} and \l {omitvalue-command} {\\omitvalue}.
+
+ \target example-command
+ \section1 \\example
+
+ The \\example command is for documenting an example. The argument
+ is the example's path relative to one of the paths listed in the
+ \l {exampledirs-variable} {exampledirs} variable in the QDoc
+ configuration file.
+
+ The documentation page will be output to \c {modulename-path-to-example}.html.
+ QDoc will add a list of all the example's source and images files at the end
+ of the page, unless \l {noautolist-command}{\\noautolist} command is used or
+ the configuration variable \l {url.examples-variable}{url.examples} is defined
+ for the project.
+
+ For example, if \l {exampledirs-variable} {exampledirs} contains
+ \c $QTDIR/examples/widgets/imageviewer, then
+
+ \badcode *
+ /\1!
+ \example widgets/imageviewer
+ \title ImageViewer Example
+ \subtitle
+
+ The example shows how to combine QLabel and QScrollArea
+ to display an image.
+
+ ...
+ \1/
+ \endcode
+
+ \b {See also:} \l {noautolist-command}{\\noautolist},
+ \l {url.examples-variable}{url.examples},
+ \l {meta-command}{\\meta}
+
+ \target externalpage-command
+ \section1 \\externalpage
+
+ The \\externalpage command assigns a title to an external URL.
+
+ \badcode *
+ /\1!
+ \externalpage http://doc.qt.io/
+ \title Qt Documentation Site
+ \1/
+ \endcode
+
+ This allows you to include a link to the external page in your
+ documentation this way:
+
+ \badcode *
+ /\1!
+ At the \l {Qt Documentation Site} you can find the latest
+ documentation for Qt, Qt Creator, the Qt SDK and much more.
+ \1/
+ \endcode
+
+ To achieve the same result without using the \\externalpage
+ command, you would have to hard-code the address into your
+ documentation:
+
+ \badcode *
+ /\1!
+ At the \l {http://doc.qt.io/}{Qt Documentation Site}
+ you can find the latest documentation for Qt, Qt Creator, the Qt SDK
+ and much more.
+ \1/
+ \endcode
+
+ The \\externalpage command makes it easier to maintain the
+ documentation. If the address changes, you only need to change the
+ argument of the \\externalpage command.
+
+ \target fn-command
+ \section1 \\fn (function)
+
+ The \\fn command is for documenting a function. The argument is
+ the function's signature, including its template parameters (if
+ any), return type, const-ness, and list of formal arguments with
+ types. If the named function doesn't exist, QDoc emits a warning.
+
+ Since QDoc version 6.0, the \\fn command can be used for documenting
+ class members that are not explicitly declared in the header,
+ but are implicitly generated by the compiler; default constructor
+ and destructor, copy constructor and move-copy constructor,
+ assignment operator, and move-assignment operator.
+
+ When documenting an hidden friend, it is required to prepend the
+ enclosing class name to the function name.
+ For example, for:
+
+ \code
+ class Foo {
+ ...
+ friend bool operator==(const Foo&, const Foo&) { ... }
+ ...
+ }
+ \endcode
+
+ The command should be written as \c{"\fn Foo::operator==(const
+ Foo&, const Foo&)"} and not as the free function \c{"\fn
+ operator==(const Foo&, const Foo&)"}.
+
+ Failure to do so will have QDoc complaining about being unable to
+ resolve the function.
+
+ \note The \\fn command is QDoc's default command: when no
+ topic command can be found in a QDoc comment, QDoc tries to tie
+ the documentation to the following code as if it is the
+ documentation for a function. Hence, it is normally not necessary
+ to include this command when documenting a function, if the
+ function's QDoc comment is written immediately above the function
+ implementation in the \c .cpp file. But it must be present when
+ documenting an inline function in the \c .cpp file that is
+ implemented in the \c .h file.
+
+ \badcode *
+ /\1!
+ \fn bool QToolBar::isAreaAllowed(Qt::ToolBarArea area) const
+
+ Returns \c true if this toolbar is dockable in the given
+ \a area; otherwise returns \c false.
+ \1/
+ \endcode
+
+ \note Running in debug mode (pass the \c {-debug} command line option
+ or set the \c QDOC_DEBUG environment variable before invoking QDoc)
+ can help troubleshoot \\fn commands that QDoc fails to parse. In
+ debug mode, additional diagnostic information is available.
+
+ See also \l {overload-command} {\\overload}.
+
+ \target group-command
+ \section1 \\group
+
+ The \\group command creates a separate page that lists the classes,
+ pages, or other entities belonging to a named group. The argument
+ is the group name.
+
+ A class is included in a group by using the \l {ingroup-command}
+ {\\ingroup} command. Overview pages can also be related to a group
+ using the same command, but the list of overview pages must be
+ requested explicitly using the \l {generatelist-command}
+ {\\generatelist} command (see example below).
+
+ The \\group command is typically followed by a \l {title-command}
+ {\\title} command and a short introduction to the group. The
+ HTML page for the group is written to an \c {.html} file named
+ <lower-case-group-name>.html.
+
+ Each entity in the group is listed as a link (using page title
+ or class name), followed by a decription from the \l {brief-command}
+ {\\brief} command in the entity's documentation.
+
+ \badcode *
+ /\1!
+ \group io
+ \title Input/Output and Networking
+ \1/
+ \endcode
+
+ QDoc generates a group page \c{io.html}.
+
+ Note that overview pages related to the group must be listed
+ explicitly using the \l {generatelist-command} {\\generatelist}
+ command with the \c related argument.
+
+ \badcode *
+ /\1!
+ \group architecture
+
+ \title Architecture
+
+ These documents describe aspects of Qt's architecture
+ and design, including overviews of core Qt features and
+ technologies.
+
+ \generatelist{related}
+ \1/
+ \endcode
+
+ See also \l {ingroup-command} {\\ingroup}, \l {annotatedlist-command}
+ {\\annotatedlist}, \l {generatelist-command} {\\generatelist}, and
+ \l {noautolist-command}{\\noautolist}.
+
+ \target headerfile-command
+ \section1 \\headerfile
+
+ The \\headerfile command is for documenting the global functions,
+ types and macros that are declared in a header file, but not in a
+ namespace. The argument is the name of the header file. The HTML
+ page is written to a \c {.html} file constructed from the header
+ file argument.
+
+ The documentation for a function, type, or macro that is declared
+ in the header file being documented, is included in the header file
+ page using the \l {relates-command} {\\relates} command.
+
+ If the argument doesn't exist as a header file, the \\headerfile
+ command creates a documentation page for the header file anyway.
+
+ \badcode *
+ /\1!
+ \headerfile <QtAlgorithms>
+
+ \title Generic Algorithms
+
+ \brief The <QtAlgorithms> header file provides
+ generic template-based algorithms.
+
+ Qt provides a number of global template functions in \c
+ <QtAlgorithms> that work on containers and perform
+ well-know algorithms.
+ \1/
+ \endcode
+
+ QDoc generates a header file page, \c{qtalgorithms.html}.
+
+ See also \l {inheaderfile-command}{\\inheaderfile}.
+
+ \target macro-command
+ \section1 \\macro
+
+ The \\macro command is for documenting a C++ macro. The argument
+ is the macro in one of three styles: function-like macros like
+ Q_ASSERT(), declaration-style macros like Q_PROPERTY(), and macros
+ without parentheses like Q_OBJECT.
+
+ The \\macro comment must contain a \l {relates-command}
+ {\\relates} command that attaches the macro comment to a class,
+ header file, or namespace. Otherwise, the documentation will be
+ lost.
+
+ \target module-command
+ \section1 \\module
+
+ The \\module creates a page that lists the classes belonging to
+ the module specified by the command's argument. A class included
+ in the module by including the \l {inmodule-command} {\\inmodule}
+ command in the \\class comment.
+
+ The \\module command is typically followed by a \l {title-command}
+ {\\title} and a \l {brief-command} {\\brief} command. Each class
+ is listed as a link to the class reference page followed by the
+ text from the class's \l {brief-command} {\\brief} command. For
+ example:
+
+ \badcode *
+ /\1!
+ \module QtNetwork
+
+ \title Qt Network Module
+
+ \brief Contains classes for writing TCP/IP clients and servers.
+
+ The network module provides classes to make network
+ programming easier and portable. It offers both
+ high-level classes such as QNetworkAccessManager that
+ implements application-level protocols, and
+ lower-level classes such as QTcpSocket, QTcpServer, and
+ QUdpSocket.
+ \1/
+ \endcode
+
+ The \l {noautolist-command} {\\noautolist} command can be used here
+ to omit the automatically generated list of classes at the end.
+
+ See also \l {inmodule-command} {\\inmodule}
+
+ \target namespace-command
+ \section1 \\namespace
+
+ The \\namespace command is for documenting the contents of the C++
+ namespace named as its argument. The reference page QDoc generates
+ for a namespace is similar to the reference page it generates for a
+ C++ class.
+
+ \badcode *
+ /\1!
+ \namespace Qt
+
+ \brief Contains miscellaneous identifiers used throughout the Qt library.
+ \1/
+ \endcode
+
+ Note that in C++, a particular namespace can be used in more
+ than one module, but when C++ elements from different modules
+ are declared in the same namespace, the namespace itself must
+ be documented in one module only. For example, namespace Qt in
+ the example above contains types and functions from both QtCore
+ and QtGui, but it is documented with the \\namespace command
+ only in QtCore.
+
+ \target page-command
+ \section1 \\page
+
+ The \\page command is for creating a stand-alone documentation
+ page.
+
+ The \\page command expects a single argument that represents the
+ name of the file where QDoc should store the page.
+
+ The page title is set using the \l {title-command} {\\title}
+ command.
+
+ \badcode *
+ /\1!
+ \page aboutqt.html
+
+ \title About Qt
+
+ Qt is a C++ toolkit for cross-platform GUI
+ application development. Qt provides single-source
+ portability across Microsoft Windows, macOS, Linux,
+ and all major commercial Unix variants.
+
+ Qt provides application developers with all the
+ functionality needed to build applications with
+ state-of-the-art graphical user interfaces. Qt is fully
+ object-oriented, easily extensible, and allows true
+ component programming.
+
+ ...
+ \1/
+ \endcode
+
+ QDoc renders this page in \c {aboutqt.html}.
+
+ \target property-command
+ \section1 \\property
+
+ The \\property command is for documenting a Qt property. The
+ argument is the full property name.
+
+ A property is defined using the Q_PROPERTY() macro. The macro
+ takes as arguments the property's name and its set, reset and get
+ functions.
+
+ \badcode
+ Q_PROPERTY(QString state READ state WRITE setState)
+ \endcode
+
+ The set, reset and get functions don't need to be documented,
+ documenting the property is sufficient. QDoc will generate a list
+ of the access function that will appear in the property
+ documentation which in turn will be located in the documentation
+ of the class that defines the property.
+
+ The \\property command comment typically includes a \l
+ {brief-command} {\\brief} command. For properties the \l
+ {brief-command} {\\brief} command's argument is a sentence
+ fragment that will be included in a one line description of the
+ property. The command follows the same rules for the
+ description as the \l {variable-command} {\\variable} command.
+
+ \badcode *
+ /\1!
+ \property QPushButton::flat
+ \brief Whether the border is disabled.
+
+ This property's default is false.
+ \1/
+ \endcode
+
+ \target qmlattachedproperty-command
+ \section1 \\qmlattachedproperty
+
+ The \\qmlattachedproperty command is for documenting a QML
+ property that will be attached to some QML type. See
+ \l{Attached Properties and Attached Signal Handlers}
+ {Attached Properties}. The argument is the rest of the line.
+ It must start with the property type, followed by the QML
+ type name where the property is declared, the \c{::}
+ qualifier, and finally the property name.
+
+ For example, to document a boolean QML attached property named
+ \c isCurrentItem for the \c ListView type:
+
+ \badcode *
+ /\1!
+ \qmlattachedproperty bool ListView::isCurrentItem
+
+ This attached property is \c true if this delegate is the current
+ item; otherwise false.
+
+ It is attached to each instance of the delegate.
+
+ This property may be used to adjust the appearance of the current
+ item, for example:
+
+ \snippet doc/src/snippets/declarative/listview/listview.qml isCurrentItem
+ \1/
+ \endcode
+
+ QDoc includes this attached property on the QML reference page for the
+ \l [QML] {ListView} type.
+
+ \note Like \l{qmlproperty-command}{\\qmlproperty}, \\qmlattachedproperty
+ accepts a QML module identifier as part of its argument.
+
+ \target qmlattachedsignal-command
+ \section1 \\qmlattachedsignal
+
+ The \\qmlattachedsignal command is for documenting an attachable
+ \l{Signal and Handler Event System}{signal}. The \\qmlattachedsignal
+ command is used just like the \l{qmlsignal-command} {\\qmlsignal} command.
+
+ The argument is the rest of the line. It should be the name of the
+ QML type where the signal is declared, the \c{::}
+ qualifier, and finally the signal name. For example, a QML
+ attached signal named \c add() in the \c GridView
+ element is documented like this:
+
+ \badcode *
+ /\1!
+ \qmlattachedsignal GridView::add()
+ This attached signal is emitted immediately after an item is added to the view.
+ \1/
+ \endcode
+
+ QDoc includes this documentation on the QML reference page for the
+ \l GridView element.
+
+ \note Like \l{qmlproperty-command}{\\qmlproperty}, \\qmlattachedsignal accepts
+ a QML module identifier as part of its argument.
+
+ \target qmlvaluetype-command
+ \section1 \\qmlvaluetype
+
+ The \\qmlvaluetype command is for documenting a \l [QtQml]
+ {QML Value Types}{value type} for QML. The command takes
+ a type name as its only argument.
+
+ \\qmlvaluetype is functionally identical to the
+ \l {qmltype-command}{\\qmltype} command. The only difference
+ is that the type will be titled (and grouped) as a
+ \e {QML value type}.
+
+ \target qmlclass-command
+ \section1 \\qmlclass
+
+ This command is deprecated. Use \l{qmltype-command} {\\qmltype}
+ instead.
+
+ \target qmlmethod-command
+ \section1 \\qmlmethod
+
+ The \\qmlmethod command is for documenting a QML method. The
+ argument is the complete method signature, including return
+ type and parameter names and types.
+
+ \badcode *
+ /\1!
+ \qmlmethod void TextInput::select(int start, int end)
+
+ Causes the text from \a start to \a end to be selected.
+
+ If either start or end is out of range, the selection is not changed.
+
+ After having called this, selectionStart will become the lesser, and
+ selectionEnd the greater (regardless of the order passed to this method).
+
+ \sa selectionStart, selectionEnd
+ \1/
+ \endcode
+
+ QDoc includes this documentation on the element reference page for the
+ \l{http://doc.qt.io/qt-5/qml-qtquick-textinput.html#select-method}
+ {TextInput} element.
+
+ \target qmltype-command
+ \section1 \\qmltype
+
+ 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.
+
+ The \l {inqmlmodule-command}{\\inqmlmodule} command documents the
+ QML module the type belongs to. The argument passed to this command
+ must match with a documented \l {qmlmodule-command}{\\qmlmodule}
+ page.
+
+ \badcode *
+ /\1!
+ \qmltype Transform
+ \instantiates QGraphicsTransform
+ \inqmlmodule QtQuick
+
+ \brief Provides a way to build advanced transformations on Items.
+
+ The Transform element is a base type which cannot be
+ instantiated directly.
+ \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
+ 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,
+ the \\qmltype comment should include one or more \l{ingroup-command}
+ {\\ingroup} commands.
+
+ \target qmlproperty-command
+ \section1 \\qmlproperty
+
+ The \\qmlproperty command is for documenting a QML property. The
+ argument is the rest of the line. The argument text should be the
+ property type, followed by the QML type name, the \c{::}
+ qualifier, and finally the property name. If we have a QML
+ property named \c x in QML type \c Translate, and the property
+ has type \c {real}, the \\qmlproperty for it would look like this:
+
+ \badcode *
+ /\1!
+ \qmlproperty real Translate::x
+
+ The translation along the X axis.
+ \1/
+ \endcode
+
+ QDoc includes this QML property on the QML reference page for the
+ \l [QML] {Translate} type.
+
+ If the QML property is of enumeration type, or it holds a bit-wise
+ combination of flags, the \l{value-command}{\\value} command can
+ be used to document the acceptable values.
+
+ QDoc accepts also a fully qualified property name, including the
+ QML module identifier:
+
+ \badcode
+ \qmlproperty bool QtQuick.Controls::Button::highlighted
+ \endcode
+
+ If specified, the module identifier (above, \c {QtQuick.Controls})
+ must match with value passed to \l {inqmlmodule-command}{\\inqmlmodule}
+ command in the associated \\qmltype documentation. If the name of
+ the QML type the property belongs to is unique across all types in
+ the documentation project, the module identifier can be omitted.
+
+ \target qmlsignal-command
+ \section1 \\qmlsignal
+
+ The \\qmlsignal command is for documenting a QML signal.
+ The argument is the rest of the line. The arguments should be: the QML type
+ where the signal is declared, the \c{::} qualifier, and finally the signal
+ name. If we have a QML signal named \c clicked(), the documentation for it
+ would look like this:
+
+ \badcode *
+ /\1!
+ \qmlsignal MouseArea::clicked(MouseEvent mouse)
+
+ This signal is emitted when there is a click. A click is defined as a
+ press followed by a release, both inside the MouseArea.
+ \1/
+ \endcode
+
+ QDoc includes this documentation on the QML reference page for the
+ \l [QML] {MouseArea} type.
+
+ \note Like \l{qmlproperty-command}{\\qmlproperty}, \\qmlsignal
+ accepts a QML module identifier as part of its argument.
+
+ \target qmlmodule-command
+ \section1 \\qmlmodule
+
+ Use the \c{\qmlmodule} command to create a \c QML module page. A QML
+ module page is a collection of QML types or any related material. The
+ command takes an optional \c <VERSION> number argument, and is similar
+ to the \l{group-command}.
+
+ A QML type is associated with a module by adding the
+ \l{inqmlmodule-command}{\\inqmlmodule} command to the comment-block that
+ documents the type. You can link to any member of a QML module using the
+ module name and two colons (\c{::}) prefix.
+
+ \badcode *
+ /\1!
+ A link to the TabWidget of the UI Component is \l {UIComponent::TabWidget}.
+ \1/
+ \endcode
+
+ QDoc generates a page for the module that lists all the members of the
+ module.
+
+ \badcode *
+ /\1!
+ \qmlmodule ClickableComponents
+
+ This is a list of the Clickable Components set. A Clickable component
+ responds to a \c clicked() event.
+ \1/
+ \endcode
+
+ \target inqmlmodule-command
+ \section1 \\inqmlmodule
+
+ A QML type is marked as being available under a specific QML module
+ import by inserting the \\inqmlmodule command in a
+ \l {qmltype-command}{\\qmltype} topic. The command takes the module
+ (import) name, without a version number, as the only argument.
+
+ The QML module name must match with a QML module documented with
+ the (\l{qmlmodule-command}{\\qmlmodule} command).
+
+ \badcode *
+ /\1!
+ \qmltype ClickableButton
+ \inqmlmodule ClickableComponents
+
+ A clickable button that responds to the \c click() event.
+ \1/
+ \endcode
+
+ QDoc outputs a row \e {Import statement: import <qmlmodule>}
+ in a table at the top of the QML type reference page.
+
+ When linking to QML types, the QML module identifier may appear in
+ the link target. For example:
+
+ \badcode
+ \l {ClickableComponents::}{ClickableButton}
+ \endcode
+
+ Links to the type reference page, with \e ClickableButton as the
+ link text.
+
+ \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.
+
+ If the QML type is not instantiated by a C++ class, this command
+ is not used.
+
+ \badcode *
+ /\1!
+ \qmltype Transform
+ \instantiates QGraphicsTransform
+ \inqmlmodule QtQuick
+
+ \brief Provides a way to build advanced transformations on Items.
+
+ The Transform element is a base type which cannot be
+ instantiated directly.
+ \1/
+ \endcode
+
+ Here, the \e{\\qmltype} comment includes \l{instantiates-command}
+ {\\instantiates} to specify that a Transform is instantiated by
+ the C++ class QGraphicsTransform.
+
+ \target typealias-command
+ \section1 \\typealias
+
+ The \\typealias command is similar to \l {typedef-command}{\\typedef},
+ but specific to documenting a C++ type alias:
+
+ \code
+ class Foo
+ {
+ public:
+ using ptr = void*;
+ // ...
+ }
+ \endcode
+
+ This can be documented as
+
+ \badcode *
+ /\1!
+ \typealias Foo::ptr
+ \1/
+ \endcode
+
+ The \\typealias command was introduced in QDoc 5.15.
+
+ See also \l {typedef-command}{\\typedef}.
+
+ \target typedef-command
+ \section1 \\typedef
+
+ The \\typedef command is for documenting a C++ typedef. The
+ argument is the name of the typedef. The documentation for
+ the typedef will be included in the reference documentation
+ for the class, namespace, or header file in which the typedef
+ is declared. To relate the \\typedef to a class, namespace, or
+ header file, the \\typedef comment must contain a
+ \l {relates-command} {\\relates} command.
+
+ \badcode *
+ /\1!
+ \typedef QObjectList
+ \relates QObject
+
+ Synonym for QList<QObject>.
+ \1/
+ \endcode
+
+ Other typedefs are located on the reference page for the class
+ that defines them.
+
+ \badcode *
+ /\1!
+ \typedef QList::Iterator
+
+ Qt-style synonym for QList::iterator.
+ \1/
+ \endcode
+
+ See also \l {typealias-command}{\\typealias}.
+
+ \target variable-command
+ \section1 \\variable
+
+ The \\variable command is for documenting a class member variable
+ or a constant. The argument is the variable or constant name. The
+ \\variable command comment includes a \l {brief-command} {\\brief}
+ command. QDoc generates the documentation based on the text from
+ \\brief command.
+
+ The documentation will be located in the in the associated class,
+ header file, or namespace documentation.
+
+ In case of a member variable:
+
+ \badcode *
+ /\1!
+ \variable QStyleOption::palette
+ \brief The palette that should be used when painting
+ the control
+ \1/
+ \endcode
+
+ You can also document constants with the \\variable command. For
+ example, suppose you have the \c Type and \c UserType constants in
+ the QTreeWidgetItem class:
+
+ \code
+ enum { Type = 0, UserType = 1000 };
+ \endcode
+
+ For these, the \\variable command can be used this way:
+
+ \badcode *
+ /\1!
+ \variable QTreeWidgetItem::Type
+
+ The default type for tree widget items.
+
+ \sa UserType, type()
+ \1/
+ \endcode
+
+ \badcode *
+ /\1!
+ \variable QTreeWidgetItem::UserType
+
+ The minimum value for custom types. Values below
+ UserType are reserved by Qt.
+
+ \sa Type, type()
+ \1/
+ \endcode
+
+*/
diff --git a/src/qdoc/qdoc/doc/qdoc-manual.qdoc b/src/qdoc/qdoc/doc/qdoc-manual.qdoc
new file mode 100644
index 000000000..da84fe430
--- /dev/null
+++ b/src/qdoc/qdoc/doc/qdoc-manual.qdoc
@@ -0,0 +1,59 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qdoc-index.html
+ \nextpage Introduction to QDoc
+
+ \title QDoc Manual
+
+ \list
+ \li \l {Introduction to QDoc}
+ \li \l {Getting Started with QDoc}
+ \li \l {Command Index}
+ \li \l {Topic Commands}
+ \li \l {Context Commands}
+ \list
+ \li \l {Document Navigation}
+ \li \l {Status}
+ \li \l {Thread Support}
+ \li \l {Relating Things}
+ \li \l {Grouping Things}
+ \li \l {Naming Things}
+ \endlist
+ \li \l{Markup Commands}
+ \list
+ \li \l {Text Markup}
+ \li \l {Document Structure}
+ \li \l {Including Code Inline}
+ \li \l {Including External Code}
+ \li \l {Creating Links}
+ \li \l {Including Images}
+ \li \l {Tables and Lists}
+ \li \l {Special Content}
+ \li \l {Miscellaneous}
+ \endlist
+ \li \l {Macros}
+ \list
+ \li \l {CMake Text Snippets}
+ \li \l {HTML and DocBook Formatting}
+ \li \l {Product Names}
+ \li \l {Product Versions}
+ \li \l {Tabbed Content}
+ \li \l {youtube-macro}{Linking to YouTube content}
+ \li \l {Miscellaneous Macros}
+ \endlist
+ \li \l {The QDoc Configuration File}
+ \list
+ \li \l {Generic Configuration Variables}
+ \li \l {Creating Help Project Files}
+ \li \l {Format-specific Configuration Variables}
+ \li \l {Supporting Derived Projects}
+ \li \l {Example Manifest Files}
+ \li \l {qtgui.qdocconf}
+ \li \l {minimum.qdocconf}
+ \endlist
+ \li \l {How to Resolve QDoc Warnings}
+ \endlist
+*/
+
diff --git a/src/qdoc/qdoc/doc/qdoc-warnings.qdoc b/src/qdoc/qdoc/doc/qdoc-warnings.qdoc
new file mode 100644
index 000000000..1be57f03d
--- /dev/null
+++ b/src/qdoc/qdoc/doc/qdoc-warnings.qdoc
@@ -0,0 +1,839 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qdoc-warnings.html
+ \previouspage Categories of Documentation
+
+ \title How to Resolve QDoc Warnings
+
+ QDoc may issue warnings when generating your documentation set.
+ This section describes what these warnings mean and how to resolve
+ them. This document does not describe warnings generated by Clang.
+
+ \section1 Can't link to <target>
+
+ QDoc issues this warning when one part of the documentation
+ (identified in the warning message) tries to refer to another,
+ but doesn't correctly specify that other, the target of the link.
+ This may arise because the reference to it is mistyped or because
+ the target has changed name (for a function or type) or title
+ (for another section).
+
+ Search the source code for that particular link target. If you get no
+ results, gradually make the search less specific until you find a match.
+
+ If the link target looks like the name of a type or function,
+ this could also be due to:
+
+ \list
+ \li The name (or, for functions, where specified, signature) used
+ where it is documented not matching the name used in its
+ declaration.
+ \li The link target being marked as \l {internal-command}{\\internal} when the linking
+ text was not.
+ \endlist
+
+ \section1 Found a \\target command outside table item in a table
+
+ If QDoc encounters a \l {target-command}{\\target command} that is not
+ preceded by an \\li command within a \l {table-command}
+ {\\table ... \\endtable block}, it issues this warning. The warning is
+ followed by the text
+ \e {Move the \\target inside the \\li to resolve this warning}.
+
+ \section1 Cannot find snippets file to quote from
+
+ QDoc issues this warning if it is unable to find the file named
+ after a \l {snippet-command}{\\snippet} or \l {quotefromfile-command}{\\quotefromfile} command.
+
+ Some useful steps for correcting this:
+
+ \list
+ \li Check if the snippet file name is correct. QDoc appends the
+ snippet file name to each of the directories given in the
+ search path, to get a path-name for a candidate file to look
+ for. It produces this error when none of these candidates exist.
+ \li Check the search path for snippets, given by the \c exampledirs
+ configuration variable in the \c{*.qdocconf} file. You may need
+ to add an entry to this path, or correct an existing entry.
+ \li Check if the snippet file exists, or if it has been moved, renamed
+ or removed, which may happen when there are changes to the source
+ code that QDoc tries to quote from.
+ \endlist
+
+ \section1 Unexpected \\snippet
+
+ QDoc issues this warning if it is unable to locate the snippet file
+ quoted in a \l {snippet-command}{\\snippet} command.
+
+ \section1 Undocumented QML <module> referred by <type> or its members
+
+ QDoc issues this warning if it is unable to locate a QML module
+ based on the identifier passed to the
+ \l {inqmlmodule-command}{\\inqmlmodule} or \l {qmlproperty-command}
+ {\\qmlproperty} commands associated with a QML \e type.
+
+ This means that either documentation for the \l {qmlmodule-command}
+ {\\qmlmodule} is missing, or an incorrect module identifier was
+ used in \\qmlproperty, \\qmlmethod, or \\qmlsignal command(s).
+
+ \section1 No such <type> in QML <module>
+
+ QDoc issues this warning if a \l {qmlproperty-command} {\\qmlproperty},
+ \l {qmlmethod-command} {\\qmlmethod}, or \l {qmlsignal-command}
+ {\\qmlsignal} command argument uses a QML module identifier, but
+ the associated \l {qmltype-command}{\\qmltype} does not belong to
+ that module.
+
+ The QML module identifier, if defined, \b must match with the
+ \l {inqmlmodule-command} {\\inqmlmodule} argument in the QML type
+ documentation. In most cases, QDoc is able to locate the QML type
+ without a module identifier.
+
+ \section1 Undocumented return value
+
+ For functions whose return-type is not void, QDoc checks if the return
+ value is documented. This warning is issued if the documentation for a
+ function or method doesn't contain a word starting with "return".
+
+ \section1 Undocumented parameter
+
+ QDoc requires the documentation of a function or method to describe
+ every parameter. It recognizes this by each parameter name (as
+ specified where the function or method is declared in a header file)
+ appearing after a \l {a-command}{\\a} command.
+
+ This requirement is not imposed for function overload documentation,
+ provided that the overload is marked with the \qdoccmd overload command
+ and a fully-documented function with the same name exists.
+
+ \section1 No such parameter
+
+ QDoc issues this warning when the parameter name given after an
+ \l{a-command}{\\a} command does not match any of the parameters named
+ in the header-file's declaration of the function or method being
+ documented.
+
+ \section1 Unknown macro
+
+ QDoc issues this warning when it sees a backslash, \c{\}, followed
+ by a token it doesn't recognize as the name of either a built-in command
+ or a \l {macro-variable}{user-defined macro}. When quoting code
+ that contains character escape sequences, you should enclose the
+ code in \\c{...} to prevent this warning against the escape sequences.
+
+ \section1 Failed to find function when parsing \\fn <signature>
+
+ When Clang parses a function signature following an \qdoccmd fn command,
+ it checks this against the declaration in the header file. If Clang
+ discovers discrepancies, it issues this warning message.
+
+ The signature must be fully qualified. Typical issues include missing or
+ incorrect template arguments, return type, or qualifiers such as
+ \e const.
+
+ \note The \c{\fn} signature for a \e {hidden friend} should be
+ fully qualified with the scope of the class that declares
+ the function.
+
+ \section1 C++ class <ClassName> not found: \\instantiates <ClassName>
+
+ 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
+
+ QDoc found a \beginqdoc ... \endqdoc comment, with no \l{Topic Commands}{topic command}, that was
+ not immediately followed by a class, function or property definition.
+ It thus does not know what the comment documents.
+
+ \section1 This qdoc comment contains no topic command (e.g., \\module, \\page)
+
+ If a QDoc comment doesn't contain a \l {Topic Commands}{topic command}, QDoc does
+ not know what the comment documents, and issues this warning.
+ Very similar to \l {Cannot tie this documentation to anything}, but
+ specific to comments that are not in C++ or QML files.
+
+ \section1 <name> documented more than once
+
+ QDoc issues this warning when it finds two comments that
+ document the same item. The location of the previously seen
+ comment is provided in warning details.
+
+ For example, you see this warning when a function has a documentation
+ comment preceding its definition, and a separate \\fn comment
+ elsewhere.
+
+ \section1 Namespace <name> documented more than once
+
+ This warning means that a documentation set contains two comments
+ containing \l {namespace-command}{\\namespace} commands with the same
+ argument, <name>.
+
+ \section1 <name> is documented, but namespace <namespace> is not documented in any module
+
+ The documentation for \e {<name>} was found, but \e{<name>} is declared
+ under a namespace that is either undocumented or QDoc was unable to
+ locate the documentation for it.
+
+ This can be resolved by either documenting \e{<namespace>}, or if it is
+ already documented in another module, ensure that this module has
+ a dependency to it.
+
+ See also \l {depends-variable}{depends} and {indexes-variable}{indexes}.
+
+ \section1 Has no \\inmodule command
+
+ QDoc issues this warning if the QDoc comments do not relate
+ a class, namespace, or headerfile to a module with the
+ \l{inmodule-command}{\\inmodule} command.
+
+ If the QDoc comment describes an entity that's not a member of
+ some other entity (typically a namespace or class), it should use
+ either \l {relates-command}{\\relates} or \l {inmodule-command}{\\inmodule}
+ to associate it with its broader context. This warning is raised
+ if it does not.
+
+ \section1 Cannot find <name> specified with \\<command> in any header file
+
+ This means that QDoc cannot find a declaration of <name> in any
+ header file, but has found a comment that claims to document it.
+
+ An example:
+ \badcode
+ Cannot find 'Color::Red' specified with '\enum' in any header file.
+ \endcode
+
+ A documentation comment claims to describe an enum, but QDoc didn't
+ find a definition of that enum in a header file.
+
+ This may also be due to:
+
+ \list
+ \li a typo in <name> or <command>
+ \li a missing namespace-or-class prefix
+ \li <name> having moved to another namespace or class
+ \endlist
+
+ \section1 Unrecognizable QML module/component qualifier for <identifier>
+
+ A parameter passed to \l {qmlproperty-command}{\\qmlproperty} or
+ \l {qmlmethod-command}{\\qmlmethod} contains a combination of
+ qmlModule::qmlType::identifier that is not defined anywhere.
+
+ Example:
+ \badcode
+ Unrecognizable QML module/component qualifier for real QtQuick::DragHandler::DragAxis::minimum
+ \endcode
+
+ DragHandler doesn't have a property called DragAxis.
+
+ \section1 Missing property type for <name>
+
+ A declaration of a \l {qmlproperty-command}{\\qmlproperty} is missing its property type.
+
+ The \\qmlproperty command expects to be followed by the property type, then the
+ fully-qualified name of the property (i.e. the name ::-joined after the name of the
+ class it belongs to).
+
+ Incorrect:
+ \badcode
+ \qmlproperty MyWidget::count
+ \endcode
+
+ Correct:
+ \badcode
+ \qmlproperty int MyWidget::count
+ \endcode
+
+ \section1 QML property documented multiple times: <identifier>
+
+ QDoc uses this warning when it finds two QDoc comments that document
+ the same QML property, either by appearing just before its definition,
+ or using the \l {qmlproperty-command}{\\qmlproperty} command.
+
+ \section1 Command <command> not allowed with QML property commands
+
+ Example:
+
+ \badcode
+ \qmlproperty real QtQuick.Controls::RangeSlider::first.value
+ \qmlproperty real QtQuick.Controls::RangeSlider::first.position
+ \qmlproperty real QtQuick.Controls::RangeSlider::first.visualPosition
+ \qmlsignal void QtQuick.Controls::RangeSlider::first.moved()
+ \qmlsignal void QtQuick.Controls::RangeSlider::second.moved()
+ \endcode
+
+ Error message:
+
+ \badcode
+ Command '\\qmlsignal' not allowed with QML property commands
+ \endcode
+
+ This warning is specific to property group documentation. QDoc
+ allows multiple qmlproperty or qmlattachedproperty topic commands
+ in a single documentation comment to document a property group
+ where the last element in the path is <group>.<property>. Any other topic
+ commands triggers this warning.
+
+ \section1 Cannot find base function for <method> in <class>
+
+ QDoc produces this warning if \\reimp is used to document a method,
+ as an override of a virtual method, when no base class has a virtual
+ method with the given name and signature. This may happen because
+ the method it was written to override has changed its signature, or is
+ no longer virtual.
+
+ \section1 Illegal \\reimp; no documented virtual function for <command>
+
+ Qdoc tries to create a link to the function that this one reimplements,
+ but it could not find the link target, likely because that
+ function is not documented. This can also arise if no base class
+ has a virtual method with this name and signature; which might
+ arise due to a renaming, a change in signature or the base no
+ longer declaring it virtual.
+
+ \section1 <class> tries to inherit itself
+
+ The \l {inherits-command}{\\inherits} command is used to document that a QMl type
+ inherits some other QML type. This warning is issued if that other
+ QML type is the same as the QML type documented.
+
+ Example:
+
+ \badcode
+ \qmltype Foo
+ \inherits Foo
+ \endcode
+
+ \section1 \\instantiates is only allowed in \\qmltype
+
+ The \l{instantiates-command}{\\instantiates} 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>
+
+ When documenting QML property groups, all properties listed in
+ the comment block must belong to the same QML type.
+
+ \section1 Cannot find project file for example <name>
+
+ In the example's source directory, QDoc expects to find a project
+ file named \c{CMakeLists.txt}, or a file with a \c{.pro}, \c{.qmlproject}, or
+ \c{.pyproject} extension where the base name matches that of the example
+ directory. For example, \c {examples/mymodule/helloworld/helloworld.pro}.
+
+ \section1 Cannot open file to quote from: <filename>
+
+ The search path for <filename> is defined by the following
+ variables in the \c{.qdocconf} file: \c{sources}, \c{sourcedirs},
+ and \c{exampledirs}.
+
+ QDoc failed to find a file named in a command (such as
+ \l {quotefromfile-command}{\\quotefromfile},
+ \l {snippet-command}{\\snippet}, \l {include-command}{\\include})
+ that tells it to retrieve content from the named file. It searches
+ each directory named in the search path. If there is no file with
+ this name in any of those directories, or the file is found but not
+ readable, QDoc issues this warning. Check that the combination of
+ search path and <filename> is correctly spelled, and that you have
+ read permissions for the file.
+
+ \note <filename> may include a directory name prefix; the whole
+ <filename> is appended to each directory in the search path.
+
+ \sa {Cannot find qdoc include file <filename>}
+
+ \section1 Missing format name after \\raw
+
+ The \l {raw-command}{\\raw} command and the corresponding \l {raw-command}{\\endraw}
+ command delimit a block of raw mark-up language code. The \\raw
+ command must be followed by the format name.
+
+ \section1 Macro cannot have both format-specific and qdoc-syntax definitions
+
+ A \l {macro-variable}{\\macro} that specifies an output format cannot also
+ have a generic definition.
+
+ An example of a configuration that triggers this warning:
+
+ \badcode
+ macro.gui = \b
+ macro.gui.HTML = "<b>\1</b>"
+ \endcode
+
+ \section1 Unknown command <name>
+
+ When a QDoc comment uses a backslash followed by a token that is not a QDoc
+ built-in command and has not been defined as a custom command
+ \l {macro-variable}{macro}, QDoc produces this warning. Check the spelling
+ of the command name, and check whether your QDoc configuration doesn't
+ include whatever would have defined it, if it's a custom command.
+
+ This may also be produced due to code being quoted in the QDoc comment,
+ for example the author may have referred to the C string termination
+ character \c{'\0'} or one of the other C string escape sequences such
+ as \c{'\n'} without escaping the backslash. Escape the backslash
+ as \c{\} to include a literal backslash in the documentation, or
+ enclose the code fragment in \c{\c{...}}, which suppresses
+ interpretation of backslashes as introducing QDoc commands.
+
+ \section1 Duplicate target name <target>
+
+ This warning is issued if you define two targets with the same parameter,
+ using either the \l {target-command}{\\target} or the \l {keyword-command}
+ {\\keyword} command. The target name given as parameter to these commands
+ must be unique. The warning is followed by "The previous occurrence is
+ here: [location]", where location contains a file name and line number.
+
+ \section1 Cannot find qdoc include file <filename>
+
+ QDoc failed to find an include file named in a command.
+ QDoc searches each directory named in the search path.
+ If there is no file with this name in any of those directories,
+ or the file found in that search is not readable, QDoc issues
+ this warning. Check that the combination of search path and
+ <filename> is correctly spelled, and that you have read permissions
+ for the file.
+
+ \note <filename> may include a directory name prefix; the whole
+ <filename> is appended to each directory in the search path.
+
+ \sa {Cannot open file to quote from: <filename>}
+
+ \section1 Cannot find <tag> in <file>
+
+ This means QDoc cannot find the identifier <id> in the
+ \l{include-command}{\\include} <file> or {snippet-command}{\\snippet} <file>.
+
+ \section1 Empty qdoc snippet <tag> in <file>
+
+ The snippet <tag> was found in the \l {snippet-command}{\\snippet} <file>, but it is empty.
+
+ \section1 Cannot nest <command> commands
+
+ This warning concerns formatting commands: bold, italic,
+ index, link, span, subscript, superscript, teletype, uicontrol,
+ underline. A formatting command cannot be used within the text
+ it applies to. An example of this:
+
+ \badcode
+ There is \b{no \b{super-}bold}.
+ \encode
+
+ \section1 Can't use <inner> in <outer>
+
+ This warning is issued for commands that cannot be nested.
+
+ Example:
+ \badcode
+ \list
+ \li \table
+ \row \li Hello \li Hi
+ \endtable
+ \endlist
+ \endcode
+
+ Results in the QDoc warning "Can't use '\\table' in '\\list'".
+
+ \section1 Missing <outer> before <inner>
+
+ Some examples:
+
+ \list
+ \li The \l {li-command}{\\li} command can only be used inside a \l {list-command}{\\list}
+ or a \l {row-command}{\\row} of a \l {table-command}{\\table}.
+ \li The \l {row-command}{\\row} and \l {header-command}{\\header} commands can only be
+ used within a \l {table-command}{\\table}.
+ \endlist
+
+ \section1 Unexpected <end_command>
+
+ This warning is issued if, for example, you have an \l {list-command}{\\endlist} without
+ a preceding \l {list-command}{\\list}. It applies to all commands that come in pairs (e.g.
+ startFoo/endFoo).
+
+ \section1 Missing comma in \\sa
+
+ The titles listed for a \l {sa-command}{\\sa} command should be separated
+ from one another with commas.
+
+ \section1 Macro <command> does not have a default definition
+
+ QDoc is attempting to expand a macro, and expects that macro to
+ have a default definition. Some macros may only have format-specific
+ definitions.
+
+ Example:
+ \badcode
+ macro.pi.HTML = "&pi;" # encodes the pi symbol for HTML output format
+ \endcode
+
+ There are however instances where macro expansion requires a
+ format-independent macro. For example, you can have macros in
+ section titles, but they must have default definitions.
+
+ \section1 Macro <macro> invoked with too few arguments (expected <many>, got <few>)
+
+ The given macro needs more parameters than it was given. See
+ the definition of the macro in the configuration for further
+ details.
+
+ \section1 Unbalanced parentheses in <text>
+
+ Points to a '(' without a corresponding ')', or vice versa.
+
+ \section1 No documentation for <name>
+
+ Example:
+
+ \badcode
+ Warning "No documentation for QNativeInterface."
+ \endcode
+
+ QDoc detects the declaration of namespace QNativeInterface in
+ a header file, but does not find a QDoc comment where that
+ namespace has been documented.
+
+ \section1 No such enum item <name> in <class>
+
+ Example:
+
+ \badcode
+ Cannot find 'QSGMaterialRhiShader::RenderState::DirtyState' specified
+ with \enum in any header file.
+ \endcode
+
+ QDoc issues this warning when it finds a \l{value-command}{\\value} directive in an
+ \l{enum-command}{\\enum} comment that names a value not found in the header file that declared
+ the enumerated type documented.
+
+ \section1 Undocumented enum item <enum> in <enum list>
+
+ <enum list>'s \l {value-command}{\\value} or \l {omitvalue-command}{\\omitvalue} entries
+ did not include one for \l {enum-command}{<enum>}, which is named in the
+ declaration of <enum list> in the header file.
+
+ \section1 Failed to find index: <filename>
+
+ Example:
+
+ \badcode
+ Failed to find index: path/to/QtCrator/appmanplugin/manual.index
+ \endcode
+
+ In this case, it clearly means the indexes variable contains a
+ typo in the path of the index file.
+
+ Incorrect:
+ \badcode
+ indexes += path/to/QtCrator/appmanplugin/manual.index
+ \endcode
+
+ Correct:
+ \badcode
+ indexes += path/to/QtCreator/appmanplugin/manual.index
+ \endcode
+
+ \section1 \\generatelist <group> is empty
+
+ Below a short overview of all possible arguments for \l {generatelist-command}{\\generatelist}:
+ \list
+ \li \\generatelist annotatedexamples
+ \li \\generatelist annotatedattributions
+ \li \\generatelist classes <prefix>
+ \li \\generatelist classesbymodule <module name>
+ \li \\generatelist qmltypesbymodule <module name>
+ \li \\generatelist functionindex
+ \li \\generatelist legalese
+ \li \\generatelist overviews
+ \li \\generatelist attributions
+ \li \\generatelist related
+ \endlist
+
+ QDoc issues this warning if you specify \c{\generatelist <group>}
+ and the group does not contain any items, or if you specify
+ \c{\generatelist <group> <pattern>} and no item in the group
+ matches the pattern.
+
+ \section1 \\generatelist <group> no such group
+
+ This warning issues if the argument to \l {generatelist-command}{\\generatelist}
+ is a non-existing group.
+
+ Example:
+
+ \code
+ \generatelist draganddrop
+ \endcode
+
+ This statement generates a list of classes or QML types in the
+ draganddrop group. Classes or QML types are added to the
+ draganddrop group by the \c{\l {ingroup-command}{\ingroup} draganddrop} command in their
+ \l {class-command}{\\class} or \l {qmltype-command}{\\qmltype} comment.
+
+ QDoc issues this warning message if no entity has
+ this \c{\ingroup draganddrop} statement.
+
+ \section1 Missing image: <imagefile>
+
+ The search path to the image is wrong, or the image file does not exist.
+
+ \section1 Can't link to <target>
+
+ This can have a variety of causes:
+
+ \list
+ \li The link target has not been defined with a QDoc topic command,
+ e.g. {title-command}{\\title} <target>.
+ \li The <target> contains a typo.
+ \li The document that contains that link target did not get compiled.
+ \li The document that contains that link target is in a module that is
+ not in the compilation path.
+ \li The link target is in another module, and a dependency to that
+ module was not set in the configuration or QDoc failed to locate
+ the index file for the dependency.
+ \endlist
+
+ \section1 Could not resolve QML import statement for type <name>
+
+ QDoc issues this warning if you document a QML type, but omit
+ the \l{inqmlmodule-command}{\\inqmlmodule} command.
+ Example:
+
+ \badcode
+ Could not resolve QML import statement for type 'ItemSelectionModel'
+ \encode
+
+ Incorrect:
+ \badcode
+ \qmltype ItemSelectionModel
+ \instantiates QItemSelectionModel
+ \since 5.5
+ \ingroup qtquick-models
+ \endcode
+ Correct:
+ \badcode
+ \qmltype ItemSelectionModel
+ \instantiates QItemSelectionModel
+ \inqmlmodule QtQml.Models
+ \since 5.5
+ \ingroup qtquick-models
+ \endcode
+
+ \section1 \\brief statement does not end with a full stop
+
+ The argument to the \\brief command is a sentence, summarizing
+ the topic documented, so should end in a full stop. It should
+ also be brief.
+
+ \section1 QtDeclarative not installed; cannot parse QML
+
+ QDoc issues this warning if it has been compiled without support
+ for QML parsing. This should not happen unless you have a
+ custom build of QDoc.
+
+ \section1 Invalid regular expression <regex>
+
+ Some QDoc commands take regular expressions as parameters. QDoc
+ gives this warning when the text given as such a parameter is not
+ a valid regular expression, usually due to it containing characters
+ with special meanings in regular expressions, that should have been
+ escaped.
+
+ Example:
+
+ \badcode
+ notifications.qdoc:56: (qdoc) warning: Invalid regular expression '^})$'
+ \endcode
+
+ \badcode
+ \quotefromfile webenginewidgets/notifications/data/index.html
+ \skipuntil resetPermission
+ \endcode
+
+ Invalid regular expression:
+ \badcode
+ \printuntil /^})$/
+ \endcode
+
+ Valid regular expression:
+ \badcode
+ \printuntil /^\}\)$/
+ \endcode
+
+
+ The \l {printuntil-command}{\\printuntil} command prints until it
+ meets a line consisting of only a right curly brace followed by a
+ right parenthesis. In this case, the curly brace and the parenthesis
+ need to be escaped because they have special meanings in regular
+ expressions.
+
+ \section1 Multiple index files found for dependency <indexfile>:<depend>
+ Using <indexfile> as index file for dependency <depend>
+
+ Multiple \c{-indexdir} paths were passed to QDoc as command line options,
+ and more than one contained an \c{.index} file that matches a dependency.
+ QDoc picks the one with the latest timestamp automatically.
+
+ Typically, this warning indicates that there are build artifacts left
+ from a previous documentation build.
+
+ \section1 Cannot locate index file for dependency <depend>
+
+ Example:
+
+ \badcode
+ "QMake" Cannot locate index file for dependency "activeqt"
+ \endcode
+
+ The documentation project QMake could not locate activeqt.index
+ in any of the specified index directories. In this case, the
+ specified index directories are specified in qmake.qdocconf.
+
+ \section1 Dependent modules specified, but no index directories were set.
+
+ QDoc expected to see one or more -indexdir arguments on the command line.
+ Without them, QDoc cannot locate the index files of any dependencies
+ defined with the 'depends' configuration variable.
+
+ \section1 Overrides a previous doc
+
+ QDoc issues this warning when it finds two comments that appear to
+ describe the same entity. The location of the previously seen
+ comment is provided in warning details.
+
+ \section1 Unrecognized list style <name>
+
+ \\list can take an optional argument: a single number or character
+ that modifies the list style. Refer to the {list-command}{\\list}
+ documentation for more details. If you use an argument that is
+ not recognized, QDoc issues this warning.
+
+ \section1 Unable to parse QML snippet: <code> at line <y>, column <x>
+
+ QDoc comments can contain QML code. This code can be found in a snippet,
+ or in the QDoc comments delimited by \l {qml-command}{\\qml} and {endqml-command}{\\endqml}.
+
+ Example:
+
+ If there is a syntax error in the QML code, QDoc issues the warning
+ \badcode
+ Unable to parse QML snippet: Syntax error at line 97, column 42
+ \endcode
+
+ Snippets can also contain QML and also there the code is checked. If there is
+ for example a missing curly brace in the code, QDoc issues the warning
+ \badcode
+ Unable to parse QML snippet: Expected token '{' at line 63, column 52
+ \endcode
+
+ QDoc often fails to parse incomplete QML snippets; in these cases,
+ it's often OK to replace the \\qml ... \\endqml commands with
+ \\code ... \\endcode to suppress this warning.
+
+ \section1 Command <command> failed at end of file <filename>
+
+ Example:
+
+ \badcode
+ Command "\snippet (//! [2]) failed at end of file qmlbars/qml/qmlbars/main.qml".
+ \endcode
+
+ In this case the warning means that the \l {snippet-command}{\\snippet} command did not find a second
+ label "\/\/! [2]" to mark the end of the snippet. It could also mean that it didn't
+ find any occurrence of that snippet tag in this snippet file.
+
+ Another example:
+
+ \badcode
+ Command '\skipto' failed at end of file 'styling/CMakeLists.txt".
+ \endcode
+
+ The \l {skipto-command}{\\skipto} + <pattern> moves the cursor to the next line containing
+ that pattern. If \\skipto doesn't find it, QDoc issues this warning.
+
+ \section1 Failed to open <file> for writing
+
+ This warning clearly means it cannot open a file for writing, probably because
+ of a wrong path, or permission to write in a certain directory.
+
+ \section1 This page title exists in more than one file
+
+ The \l {title-command}{\\title} command sets the title for a page.
+
+ \code
+ \page activeqt-server.html
+ \title Building ActiveX servers in Qt
+ \endcode
+
+ QDoc issues this warning if a certain title is used in more than one page.
+
+
+ \section1 The content is too long
+
+ QDoc uses a fixed-size buffer when tokenizing source files. If any single
+ token in the file has more characters than the maximum limit, QDoc issues
+ this warning.
+
+ While QDoc continues parsing the file, only the part of the token that
+ fits into the buffer is considered, meaning that the output might be
+ mangled.
+
+ To resolve this warning, the relevant content must be reduced in size,
+ either by splitting it, if possible, or by removing some of its parts.
+
+ The maximum amount of characters for a single token is shown alongside
+ the warning, for example:
+
+ \badcode
+ file.qdoc:71154: (qdoc) warning: The content is too long.
+
+ [The maximum amount of characters for this content is 524288.
+ Consider splitting it or reducing its size.]
+ \endcode
+
+ \note Since content that is too long is not parsed in full, QDoc may
+ issue warnings that are false positives. Resolve all warnings of this type
+ before fixing other warnings.
+
+ \section1 No documentation generated for function <name> in global scope
+
+ QDoc was able to match the documentation for a function \e {<name>} to its
+ declaration, but no output was generated because the function is declared
+ in the global namespace.
+
+ Use the \l {relates-command}{\\relates} command to associate the function
+ with a documented type, namespace, or a header file. The function is then
+ listed as a \e {related non-member} on the associated reference page.
+
+ \section1 Documentation configuration for <project> doesn't define a help project (qhp)
+
+ A valid Qt help configuration was expected but not provided in the project's
+ .qdocconf file.
+
+ See also \l{Creating Help Project Files} and \l {qhp-variable}{qhp}.
+
+ \section1 Already generated FILE for this project
+
+ While generating the documentation for a project, QDoc keeps track of the
+ file names of the files it has generated. QDoc will issue a warning when it
+ opens a file for writing if that file is known to have been generated
+ previously, in the current execution. This can happen if a \qdoccmd page
+ command uses the same name as \qdoccmd group, for example.
+
+ You can set the environment variable \c QDOC_ALL_OVERWRITES_ARE_WARNINGS to
+ unconditionally warn about all such events. This may be useful when tracking
+ down the offending definitions.
+
+*/
diff --git a/src/qdoc/qdoc/doc/qtgui-qdocconf.qdoc b/src/qdoc/qdoc/doc/qtgui-qdocconf.qdoc
new file mode 100644
index 000000000..b72f97271
--- /dev/null
+++ b/src/qdoc/qdoc/doc/qtgui-qdocconf.qdoc
@@ -0,0 +1,260 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+
+\page qtgui-qdocconf.html
+\title qtgui.qdocconf with Comments
+
+\brief A walkthrough of a typical qdocconf file.
+
+This document goes through a typical Qt 5 qdocconf file. The contents is taken from
+Qt GUI's \e qtgui.qdocconf file.
+
+Below you will find the full contents of \c qtgui.qdocconf. The subsequent section will discuss
+every statement in the qdocconf file.
+
+\badcode
+ include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
+
+ project = QtGui
+ description = Qt GUI Reference Documentation
+ url = http://doc.qt.io/qt
+ version = $QT_VERSION
+
+ examplesinstallpath = gui
+
+ qhp.projects = QtGui
+
+ qhp.QtGui.file = qtgui.qhp
+ qhp.QtGui.namespace = org.qt-project.qtgui.$QT_VERSION_TAG
+ qhp.QtGui.virtualFolder = qtgui
+ qhp.QtGui.indexTitle = Qt GUI
+ qhp.QtGui.indexRoot =
+
+ qhp.QtGui.subprojects = classes
+ qhp.QtGui.subprojects.classes.title = C++ Classes
+ qhp.QtGui.subprojects.classes.indexTitle = Qt GUI C++ Classes
+ qhp.QtGui.subprojects.classes.selectors = class headerfile
+ qhp.QtGui.subprojects.classes.sortPages = true
+
+ tagfile = qtgui.tags
+
+ depends += \
+ qtcore \
+ qtnetwork \
+ qtopengl \
+ qtsvg \
+ qtqml \
+ qtquick \
+ qtwidgets \
+ qtdoc
+
+ headerdirs += ..
+
+ sourcedirs += .. \
+ ../../../examples/gui/doc/src
+
+ excludedirs = ../../../examples/gui/doc/src/tmp
+
+ exampledirs += ../../../examples/gui \
+ snippets
+
+ imagedirs += images \
+ ../../../examples/gui/doc/images \
+ ../../../doc/src/images
+\endcode
+
+\title Qtgui.qdocconf with notes
+
+\badcode
+ include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
+\endcode
+
+QDoc inherits the default templates, macros, and settings from the directory
+specified from the \c $QT_INSTALL_DOCS variable. \c qmake prints the value of
+the variable.
+\badcode
+ qmake -query
+\endcode
+
+\b {See also}: \l {include}.
+
+\badcode
+ project = QtGui
+\endcode
+
+The \c project variable sets the name of the QDoc build. This name is also
+used to form the index file, which, in this case, will be \e qtgui.index. The
+name of the index file doesn't adopt the uppercase letters of the project name.
+
+\b {See also}: \l {project}.
+
+\badcode
+ description = Qt GUI Reference Documentation
+\endcode
+
+A short description of the project concerned.
+
+\badcode
+ url = http://doc.qt.io/qt-5
+\endcode
+
+The \c url variable holds the base url of the project.
+
+The URL is stored in the generated index file for the project.
+QDoc will use this as the base URL when constructing external links
+to content listed in the index.
+
+\note QDoc omits this value when the -installdir argument
+is specified when running QDoc.
+
+\badcode
+ examplesinstallpath = gui
+\endcode
+
+The \c examplesinstallpath variable indicates that the examples will be
+installed in the \e gui directory under the parent examples directory
+(for Qt, this is $QT_INSTALL_EXAMPLES).
+
+\note The examplepath variable has to match the example directory specified in
+ \c exampledirs.
+
+\note It is possible to override \c examplesinstallpath for a specific
+ \l {example-command}{\\example} using the \l {meta-command}{\\meta}
+ command.
+
+\b {See also}: \l {examplesinstallpath}, \l {exampledirs}, and
+\l {meta-command}{\\meta}.
+
+\badcode
+ qhp.projects = QtGui
+ qhp.QtGui.file = qtgui.qhp
+\endcode
+
+The following parameters are for creating a QHP file (\e .qhp). The
+\e qhelpgenerator program can convert the QHP file into a QCH file (\e .qch),
+which can be opened in Qt Assistant or Qt Creator.
+
+\badcode
+ qhp.QtGui.namespace = org.qt-project.qtgui.$QT_VERSION_TAG
+\endcode
+
+A unique identifier which enables QHelpEngine to retrieve the helpfile
+from a given link. This namespace is also used as a base url for links
+to the helpfile.
+
+\badcode
+ qhp.QtGui.virtualFolder = qtgui
+\endcode
+
+Virtual folders group documentation together into a single location. A
+virtual folder will become the root directory of all files referenced in
+a compressed help file.
+
+When two manuals are located in the same virtual folder, it is possible to
+refer to sections of the other manual using relative paths. The virtual
+folder tag is mandatory and the folder must not contain any '/'.
+
+\badcode
+ qhp.QtGui.indexTitle = Qt GUI
+\endcode
+
+This is the title of the page that has the contents.
+
+\badcode
+ qhp.QtGui.indexRoot =
+\endcode
+
+Specifies the title of the root (namespace) page to generate the documentation for.
+Typically defined as an empty string.
+
+\badcode
+ qhp.QtGui.subprojects = classes
+ qhp.QtGui.subprojects.classes.title = C++ Classes
+ qhp.QtGui.subprojects.classes.indexTitle = Qt GUI C++ Classes
+\endcode
+The subprojects specify the sections that are displayed in the table of contents
+for this project. In this example, the subproject, which is displayed in
+the Assistant's sidebar, is named "C++ Classes" and its index is the page
+titled "QT GUI C++ Classes".
+
+\badcode
+ qhp.QtGui.subprojects.classes.selectors = class fake:headerfile
+\endcode
+
+Lists all C++ classes and header files.
+
+See \l {Creating Help Project Files} for more information.
+
+\badcode
+ tagfile = ../../../doc/qtgui/qtgui.tags
+\endcode
+
+This specifies the Doxygen tag file that needs to be written when the html is generated
+by QDoc.
+
+\badcode
+depends += \
+ qtcore \
+ qtnetwork \
+ qtopengl \
+ qtsvg \
+ qtqml \
+ qtquick \
+ qtwidgets \
+ qtdoc
+\endcode
+
+Specifies the modules QDoc needs to load for generating output for Qt GUI.
+QDoc loads the index files for all modules listed in the depends statement in
+order to enable linking to pages in these modules.
+
+\badcode
+ headerdirs += ..
+\endcode
+
+Add the parent directory to the list of directories containing the header files
+associated with the \e .cpp source files.
+
+\badcode
+ sourcedirs += .. \
+ ../../../examples/gui/doc/src
+\endcode
+
+Add the specified directories to the list of directories containing the \e .cpp and
+\e .qdoc files used in the documentation.
+
+\badcode
+ excludedirs = ../../../examples/gui/doc/src/tmp
+\endcode
+
+The \c excludedirs variable is for listing directories that should not be processed
+by QDoc, even if the same directories are included by the \c sourcedirs or \c headerdirs
+variables.
+
+When executed, QDoc will ignore the directories listed.
+\b {See also}: \l {excludefiles}.
+
+\badcode
+ exampledirs += ../../../examples/gui \
+ snippets
+\endcode
+\b {See also}: \l {examples-variable}{examples}, \l {examplesinstallpath}.
+
+Add the two directories specified to the list of directories containing the source
+code of the example files.
+
+If QDoc encounters both \c exampledirs and \c examples, it will look first in the
+\c examples directory. QDoc will accept the first matching file it finds. QDoc will
+search in the directories specified, not in their subdirectories.
+
+\badcode
+ imagedirs += images \
+ ../../../examples/gui/doc/images \
+ ../../../doc/src/images \
+\endcode
+
+Add the directories specified above to the list of directories where the images
+can be found.
+*/
diff --git a/src/qdoc/qdoc/src/qdoc/access.h b/src/qdoc/qdoc/src/qdoc/access.h
new file mode 100644
index 000000000..96cad686b
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/access.h
@@ -0,0 +1,15 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include <QtCore/qglobal.h>
+
+#ifndef ACCESS_H
+#define ACCESS_H
+
+QT_BEGIN_NAMESPACE
+
+enum class Access : unsigned char { Public, Protected, Private };
+
+QT_END_NAMESPACE
+
+#endif // ACCESS_H
diff --git a/src/qdoc/qdoc/src/qdoc/aggregate.cpp b/src/qdoc/qdoc/src/qdoc/aggregate.cpp
new file mode 100644
index 000000000..bf210ba17
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/aggregate.cpp
@@ -0,0 +1,762 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "aggregate.h"
+
+#include "functionnode.h"
+#include "parameters.h"
+#include "typedefnode.h"
+#include "qdocdatabase.h"
+#include "qmlpropertynode.h"
+#include "qmltypenode.h"
+#include "sharedcommentnode.h"
+#include <vector>
+
+using namespace Qt::Literals::StringLiterals;
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class Aggregate
+ */
+
+/*! \fn Aggregate::Aggregate(NodeType type, Aggregate *parent, const QString &name)
+ The constructor should never be called directly. It is only called
+ by the constructors of subclasses of Aggregate. Those constructors
+ pass the node \a type they want to create, the \a parent of the new
+ node, and its \a name.
+ */
+
+/*!
+ Recursively set all non-related members in the list of children to
+ \nullptr, after which each aggregate can safely delete all children
+ in their list. Aggregate's destructor calls this only on the root
+ namespace node.
+ */
+void Aggregate::dropNonRelatedMembers()
+{
+ for (auto &child : m_children) {
+ if (!child)
+ continue;
+ if (child->parent() != this)
+ child = nullptr;
+ else if (child->isAggregate())
+ static_cast<Aggregate*>(child)->dropNonRelatedMembers();
+ }
+}
+
+/*!
+ Destroys this Aggregate; deletes each child.
+ */
+Aggregate::~Aggregate()
+{
+ // If this is the root, clear non-related children first
+ if (isNamespace() && name().isEmpty())
+ dropNonRelatedMembers();
+
+ m_enumChildren.clear();
+ m_nonfunctionMap.clear();
+ m_functionMap.clear();
+ qDeleteAll(m_children.begin(), m_children.end());
+ m_children.clear();
+}
+
+/*!
+ If \a genus is \c{Node::DontCare}, find the first node in
+ this node's child list that has the given \a name. If this
+ node is a QML type, be sure to also look in the children
+ of its property group nodes. Return the matching node or \c nullptr.
+
+ If \a genus is either \c{Node::CPP} or \c {Node::QML}, then
+ find all this node's children that have the given \a name,
+ and return the one that satisfies the \a genus requirement.
+ */
+Node *Aggregate::findChildNode(const QString &name, Node::Genus genus, int findFlags) const
+{
+ if (genus == Node::DontCare) {
+ Node *node = m_nonfunctionMap.value(name);
+ if (node)
+ return node;
+ } else {
+ const NodeList &nodes = m_nonfunctionMap.values(name);
+ for (auto *node : nodes) {
+ if (genus & node->genus()) {
+ if (findFlags & TypesOnly) {
+ if (!node->isTypedef() && !node->isClassNode()
+ && !node->isQmlType() && !node->isEnumType())
+ continue;
+ } else if (findFlags & IgnoreModules && node->isModule())
+ continue;
+ return node;
+ }
+ }
+ }
+ if (genus != Node::DontCare && !(genus & this->genus()))
+ return nullptr;
+
+ auto it = m_functionMap.find(name);
+ return it != m_functionMap.end() ? (*(*it).begin()) : nullptr;
+}
+
+/*!
+ Find all the child nodes of this node that are named
+ \a name and return them in \a nodes.
+ */
+void Aggregate::findChildren(const QString &name, NodeVector &nodes) const
+{
+ nodes.clear();
+ const auto &functions = m_functionMap.value(name);
+ nodes.reserve(functions.size() + m_nonfunctionMap.count(name));
+ for (auto f : functions)
+ nodes.emplace_back(f);
+ auto [it, end] = m_nonfunctionMap.equal_range(name);
+ while (it != end) {
+ nodes.emplace_back(*it);
+ ++it;
+ }
+}
+
+/*!
+ This function searches for a child node of this Aggregate,
+ such that the child node has the spacified \a name and the
+ function \a isMatch returns true for the node. The function
+ passed must be one of the isXxx() functions in class Node
+ that tests the node type.
+ */
+Node *Aggregate::findNonfunctionChild(const QString &name, bool (Node::*isMatch)() const)
+{
+ const NodeList &nodes = m_nonfunctionMap.values(name);
+ for (auto *node : nodes) {
+ if ((node->*(isMatch))())
+ return node;
+ }
+ return nullptr;
+}
+
+/*!
+ Find a function node that is a child of this node, such that
+ the function node has the specified \a name and \a parameters.
+ If \a parameters is empty but no matching function is found
+ that has no parameters, return the first non-internal primary
+ function or overload, whether it has parameters or not.
+
+ \sa normalizeOverloads()
+ */
+FunctionNode *Aggregate::findFunctionChild(const QString &name, const Parameters &parameters)
+{
+ auto map_it = m_functionMap.find(name);
+ if (map_it == m_functionMap.end())
+ return nullptr;
+
+ auto match_it = std::find_if((*map_it).begin(), (*map_it).end(),
+ [&parameters](const FunctionNode *fn) {
+ if (fn->isInternal())
+ return false;
+ if (parameters.count() != fn->parameters().count())
+ return false;
+ for (int i = 0; i < parameters.count(); ++i)
+ if (parameters.at(i).type() != fn->parameters().at(i).type())
+ return false;
+ return true;
+ });
+
+ if (match_it != (*map_it).end())
+ return *match_it;
+
+ // Assumes that overloads are already normalized; i.e, if there's
+ // an active function, it'll be found at the start of the list.
+ auto *fn = (*(*map_it).begin());
+ return (parameters.isEmpty() && !fn->isInternal()) ? fn : nullptr;
+}
+
+/*!
+ Returns the function node that is a child of this node, such
+ that the function described has the same name and signature
+ as the function described by the function node \a clone.
+
+ Returns \nullptr if no matching function was found.
+ */
+FunctionNode *Aggregate::findFunctionChild(const FunctionNode *clone)
+{
+ auto funcs_it = m_functionMap.find(clone->name());
+ if (funcs_it == m_functionMap.end())
+ return nullptr;
+
+ auto func_it = std::find_if((*funcs_it).begin(), (*funcs_it).end(),
+ [clone](const FunctionNode *fn) {
+ return compare(clone, fn) == 0;
+ });
+
+ return func_it != (*funcs_it).end() ? *func_it : nullptr;
+}
+
+/*!
+ Mark all child nodes that have no documentation as having
+ private access and internal status. qdoc will then ignore
+ them for documentation purposes.
+ */
+void Aggregate::markUndocumentedChildrenInternal()
+{
+ for (auto *child : std::as_const(m_children)) {
+ if (!child->hasDoc() && !child->isDontDocument()) {
+ if (!child->docMustBeGenerated()) {
+ if (child->isFunction()) {
+ if (static_cast<FunctionNode *>(child)->hasAssociatedProperties())
+ continue;
+ } else if (child->isTypedef()) {
+ if (static_cast<TypedefNode *>(child)->hasAssociatedEnum())
+ continue;
+ }
+ child->setAccess(Access::Private);
+ child->setStatus(Node::Internal);
+ }
+ }
+ if (child->isAggregate()) {
+ static_cast<Aggregate *>(child)->markUndocumentedChildrenInternal();
+ }
+ }
+}
+
+/*!
+ Adopts each non-aggregate C++ node (function/macro, typedef, enum, variable,
+ or a shared comment node with genus Node::CPP) in the global scope to the
+ aggregate specified in the node's documentation using the \\relates command.
+
+ If the target Aggregate is not found in the primary tree, creates a new
+ ProxyNode to use as the parent.
+*/
+void Aggregate::resolveRelates()
+{
+ Q_ASSERT(name().isEmpty()); // Must be called on the root namespace
+ auto *database = QDocDatabase::qdocDB();
+
+ for (auto *node : m_children) {
+ if (node->isRelatedNonmember() || node->isAggregate())
+ continue;
+ if (node->genus() != Node::CPP)
+ continue;
+
+ const auto &relates_args = node->doc().metaCommandArgs("relates"_L1);
+ if (relates_args.isEmpty())
+ continue;
+
+ auto *aggregate = database->findRelatesNode(relates_args[0].first.split("::"_L1));
+ if (!aggregate)
+ aggregate = new ProxyNode(this, relates_args[0].first);
+ else if (node->parent() == aggregate)
+ continue;
+
+ aggregate->adoptChild(node);
+ node->setRelatedNonmember(true);
+ }
+}
+
+/*!
+ Sorts the lists of overloads in the function map and assigns overload
+ numbers.
+
+ For sorting, active functions take precedence over internal ones, as well
+ as ones marked as \\overload - the latter ones typically do not contain
+ full documentation, so selecting them as the \e primary function
+ would cause unnecessary warnings to be generated.
+
+ Otherwise, the order is set as determined by FunctionNode::compare().
+ */
+void Aggregate::normalizeOverloads()
+{
+ for (auto map_it = m_functionMap.begin(); map_it != m_functionMap.end(); ++map_it) {
+ if ((*map_it).size() > 1) {
+ std::sort((*map_it).begin(), (*map_it).end(),
+ [](const FunctionNode *f1, const FunctionNode *f2) -> bool {
+ if (f1->isInternal() != f2->isInternal())
+ return f2->isInternal();
+ if (f1->isOverload() != f2->isOverload())
+ return f2->isOverload();
+ // Prioritize documented over undocumented
+ if (f1->hasDoc() != f2->hasDoc())
+ return f1->hasDoc();
+ return (compare(f1, f2) < 0);
+ });
+ // Set overload numbers
+ signed short n{0};
+ for (auto *fn : (*map_it))
+ fn->setOverloadNumber(n++);
+ }
+ }
+
+ for (auto *node : std::as_const(m_children)) {
+ if (node->isAggregate())
+ static_cast<Aggregate *>(node)->normalizeOverloads();
+ }
+}
+
+/*!
+ Returns a const reference to the list of child nodes of this
+ aggregate that are not function nodes. Duplicate nodes are
+ removed from the list.
+ */
+const NodeList &Aggregate::nonfunctionList()
+{
+ m_nonfunctionList = m_nonfunctionMap.values();
+ std::sort(m_nonfunctionList.begin(), m_nonfunctionList.end(), Node::nodeNameLessThan);
+ m_nonfunctionList.erase(std::unique(m_nonfunctionList.begin(), m_nonfunctionList.end()),
+ m_nonfunctionList.end());
+ return m_nonfunctionList;
+}
+
+/*! \fn bool Aggregate::isAggregate() const
+ Returns \c true because this node is an instance of Aggregate,
+ which means it can have children.
+ */
+
+/*!
+ Finds the enum type node that has \a enumValue as one of
+ its enum values and returns a pointer to it. Returns 0 if
+ no enum type node is found that has \a enumValue as one
+ of its values.
+ */
+const EnumNode *Aggregate::findEnumNodeForValue(const QString &enumValue) const
+{
+ for (const auto *node : m_enumChildren) {
+ const auto *en = static_cast<const EnumNode *>(node);
+ if (en->hasItem(enumValue))
+ return en;
+ }
+ return nullptr;
+}
+
+/*!
+ Adds the \a child to this node's child map using \a title
+ as the key. The \a child is not added to the child list
+ again, because it is presumed to already be there. We just
+ want to be able to find the child by its \a title.
+ */
+void Aggregate::addChildByTitle(Node *child, const QString &title)
+{
+ m_nonfunctionMap.insert(title, child);
+}
+
+/*!
+ Adds the \a child to this node's child list and sets the child's
+ parent pointer to this Aggregate. It then mounts the child with
+ mountChild().
+
+ The \a child is then added to this Aggregate's searchable maps
+ and lists.
+
+ \note This function does not test the child's parent pointer
+ for null before changing it. If the child's parent pointer
+ is not null, then it is being reparented. The child becomes
+ a child of this Aggregate, but it also remains a child of
+ the Aggregate that is it's old parent. But the child will
+ only have one parent, and it will be this Aggregate. The is
+ because of the \c relates command.
+
+ \sa mountChild(), dismountChild()
+ */
+void Aggregate::addChild(Node *child)
+{
+ m_children.append(child);
+ child->setParent(this);
+ child->setUrl(QString());
+ child->setIndexNodeFlag(isIndexNode());
+
+ if (child->isFunction()) {
+ m_functionMap[child->name()].emplace_back(static_cast<FunctionNode *>(child));
+ } else if (!child->name().isEmpty()) {
+ m_nonfunctionMap.insert(child->name(), child);
+ if (child->isEnumType())
+ m_enumChildren.append(child);
+ }
+}
+
+/*!
+ This Aggregate becomes the adoptive parent of \a child. The
+ \a child knows this Aggregate as its parent, but its former
+ parent continues to have pointers to the child in its child
+ list and in its searchable data structures. But the child is
+ also added to the child list and searchable data structures
+ of this Aggregate.
+ */
+void Aggregate::adoptChild(Node *child)
+{
+ if (child->parent() != this) {
+ m_children.append(child);
+ child->setParent(this);
+ if (child->isFunction()) {
+ m_functionMap[child->name()].emplace_back(static_cast<FunctionNode *>(child));
+ } else if (!child->name().isEmpty()) {
+ m_nonfunctionMap.insert(child->name(), child);
+ if (child->isEnumType())
+ m_enumChildren.append(child);
+ }
+ if (child->isSharedCommentNode()) {
+ auto *scn = static_cast<SharedCommentNode *>(child);
+ for (Node *n : scn->collective())
+ adoptChild(n);
+ }
+ }
+}
+
+/*!
+ If this node has a child that is a QML property named \a n, return a
+ pointer to that child. Otherwise, return \nullptr.
+ */
+QmlPropertyNode *Aggregate::hasQmlProperty(const QString &n) const
+{
+ NodeType goal = Node::QmlProperty;
+ for (auto *child : std::as_const(m_children)) {
+ if (child->nodeType() == goal) {
+ if (child->name() == n)
+ return static_cast<QmlPropertyNode *>(child);
+ }
+ }
+ return nullptr;
+}
+
+/*!
+ If this node has a child that is a QML property named \a n and that
+ also matches \a attached, return a pointer to that child.
+ */
+QmlPropertyNode *Aggregate::hasQmlProperty(const QString &n, bool attached) const
+{
+ NodeType goal = Node::QmlProperty;
+ for (auto *child : std::as_const(m_children)) {
+ if (child->nodeType() == goal) {
+ if (child->name() == n && child->isAttached() == attached)
+ return static_cast<QmlPropertyNode *>(child);
+ }
+ }
+ return nullptr;
+}
+
+/*!
+ Returns \c true if this aggregate has multiple function
+ overloads matching the name of \a fn.
+
+ \note Assumes \a fn is a member of this aggregate.
+*/
+bool Aggregate::hasOverloads(const FunctionNode *fn) const
+{
+ auto it = m_functionMap.find(fn->name());
+ return !(it == m_functionMap.end()) && (it.value().size() > 1);
+}
+
+/*
+ When deciding whether to include a function in the function
+ index, if the function is marked private, don't include it.
+ If the function is marked obsolete, don't include it. If the
+ function is marked internal, don't include it. Or if the
+ function is a destructor or any kind of constructor, don't
+ include it. Otherwise include it.
+ */
+static bool keep(FunctionNode *fn)
+{
+ if (fn->isPrivate() || fn->isDeprecated() || fn->isInternal() || fn->isSomeCtor() || fn->isDtor())
+ return false;
+ return true;
+}
+
+/*!
+ Insert all functions declared in this aggregate into the
+ \a functionIndex. Call the function recursively for each
+ child that is an aggregate.
+
+ Only include functions that are in the public API and
+ that are not constructors or destructors.
+ */
+void Aggregate::findAllFunctions(NodeMapMap &functionIndex)
+{
+ for (auto functions : m_functionMap) {
+ std::for_each(functions.begin(), functions.end(),
+ [&functionIndex](FunctionNode *fn) {
+ if (keep(fn))
+ functionIndex[fn->name()].insert(fn->parent()->fullDocumentName(), fn);
+ }
+ );
+ }
+
+ for (Node *node : std::as_const(m_children)) {
+ if (node->isAggregate() && !node->isPrivate() && !node->isDontDocument())
+ static_cast<Aggregate *>(node)->findAllFunctions(functionIndex);
+ }
+}
+
+/*!
+ For each child of this node, if the child is a namespace node,
+ insert the child into the \a namespaces multimap. If the child
+ is an aggregate, call this function recursively for that child.
+
+ When the function called with the root node of a tree, it finds
+ all the namespace nodes in that tree and inserts them into the
+ \a namespaces multimap.
+
+ The root node of a tree is a namespace, but it has no name, so
+ it is not inserted into the map. So, if this function is called
+ for each tree in the qdoc database, it finds all the namespace
+ nodes in the database.
+ */
+void Aggregate::findAllNamespaces(NodeMultiMap &namespaces)
+{
+ for (auto *node : std::as_const(m_children)) {
+ if (node->isAggregate() && !node->isPrivate()) {
+ if (node->isNamespace() && !node->name().isEmpty())
+ namespaces.insert(node->name(), node);
+ static_cast<Aggregate *>(node)->findAllNamespaces(namespaces);
+ }
+ }
+}
+
+/*!
+ Returns true if this aggregate contains at least one child
+ that is marked obsolete. Otherwise returns false.
+ */
+bool Aggregate::hasObsoleteMembers() const
+{
+ for (const auto *node : m_children)
+ if (!node->isPrivate() && node->isDeprecated()) {
+ if (node->isFunction() || node->isProperty() || node->isEnumType() || node->isTypedef()
+ || node->isTypeAlias() || node->isVariable() || node->isQmlProperty())
+ return true;
+ }
+ return false;
+}
+
+/*!
+ Finds all the obsolete C++ classes and QML types in this
+ aggregate and all the C++ classes and QML types with obsolete
+ members, and inserts them into maps used elsewhere for
+ generating documentation.
+ */
+void Aggregate::findAllObsoleteThings()
+{
+ for (auto *node : std::as_const(m_children)) {
+ if (!node->isPrivate()) {
+ if (node->isDeprecated()) {
+ if (node->isClassNode())
+ QDocDatabase::obsoleteClasses().insert(node->qualifyCppName(), node);
+ else if (node->isQmlType())
+ QDocDatabase::obsoleteQmlTypes().insert(node->qualifyQmlName(), node);
+ } else if (node->isClassNode()) {
+ auto *a = static_cast<Aggregate *>(node);
+ if (a->hasObsoleteMembers())
+ QDocDatabase::classesWithObsoleteMembers().insert(node->qualifyCppName(), node);
+ } else if (node->isQmlType()) {
+ auto *a = static_cast<Aggregate *>(node);
+ if (a->hasObsoleteMembers())
+ QDocDatabase::qmlTypesWithObsoleteMembers().insert(node->qualifyQmlName(),
+ node);
+ } else if (node->isAggregate()) {
+ static_cast<Aggregate *>(node)->findAllObsoleteThings();
+ }
+ }
+ }
+}
+
+/*!
+ Finds all the C++ classes, QML types, QML basic types, and examples
+ in this aggregate and inserts them into appropriate maps for later
+ use in generating documentation.
+ */
+void Aggregate::findAllClasses()
+{
+ for (auto *node : std::as_const(m_children)) {
+ if (!node->isPrivate() && !node->isInternal() && !node->isDontDocument()
+ && node->tree()->camelCaseModuleName() != QString("QDoc")) {
+ if (node->isClassNode()) {
+ QDocDatabase::cppClasses().insert(node->qualifyCppName().toLower(), node);
+ } else if (node->isQmlType()) {
+ QString name = node->name().toLower();
+ QDocDatabase::qmlTypes().insert(name, node);
+ // also add to the QML basic type map
+ if (node->isQmlBasicType())
+ QDocDatabase::qmlBasicTypes().insert(name, node);
+ } else if (node->isExample()) {
+ // use the module index title as key for the example map
+ QString title = node->tree()->indexTitle();
+ if (!QDocDatabase::examples().contains(title, node))
+ QDocDatabase::examples().insert(title, node);
+ } else if (node->isAggregate()) {
+ static_cast<Aggregate *>(node)->findAllClasses();
+ }
+ }
+ }
+}
+
+/*!
+ Find all the attribution pages in this node and insert them
+ into \a attributions.
+ */
+void Aggregate::findAllAttributions(NodeMultiMap &attributions)
+{
+ for (auto *node : std::as_const(m_children)) {
+ if (!node->isPrivate()) {
+ if (node->isPageNode() && static_cast<PageNode*>(node)->isAttribution())
+ attributions.insert(node->tree()->indexTitle(), node);
+ else if (node->isAggregate())
+ static_cast<Aggregate *>(node)->findAllAttributions(attributions);
+ }
+ }
+}
+
+/*!
+ Finds all the nodes in this node where a \e{since} command appeared
+ in the qdoc comment and sorts them into maps according to the kind
+ of node.
+
+ This function is used for generating the "New Classes... in x.y"
+ section on the \e{What's New in Qt x.y} page.
+ */
+void Aggregate::findAllSince()
+{
+ for (auto *node : std::as_const(m_children)) {
+ if (node->isRelatedNonmember() && node->parent() != this)
+ continue;
+ QString sinceString = node->since();
+ // Insert a new entry into each map for each new since string found.
+ if (node->isInAPI() && !sinceString.isEmpty()) {
+ // operator[] will insert a default-constructed value into the
+ // map if key is not found, which is what we want here.
+ auto &nsmap = QDocDatabase::newSinceMaps()[sinceString];
+ auto &ncmap = QDocDatabase::newClassMaps()[sinceString];
+ auto &nqcmap = QDocDatabase::newQmlTypeMaps()[sinceString];
+
+ if (node->isFunction()) {
+ // Insert functions into the general since map.
+ auto *fn = static_cast<FunctionNode *>(node);
+ if (!fn->isDeprecated() && !fn->isSomeCtor() && !fn->isDtor())
+ nsmap.insert(fn->name(), fn);
+ } else if (node->isClassNode()) {
+ // Insert classes into the since and class maps.
+ QString name = node->qualifyWithParentName();
+ nsmap.insert(name, node);
+ ncmap.insert(name, node);
+ } else if (node->isQmlType()) {
+ // Insert QML elements into the since and element maps.
+ QString name = node->qualifyWithParentName();
+ nsmap.insert(name, node);
+ nqcmap.insert(name, node);
+ } else if (node->isQmlProperty()) {
+ // Insert QML properties into the since map.
+ nsmap.insert(node->name(), node);
+ } else {
+ // Insert external documents into the general since map.
+ QString name = node->qualifyWithParentName();
+ nsmap.insert(name, node);
+ }
+ }
+ // Enum values - a special case as EnumItem is not a Node subclass
+ if (node->isInAPI() && node->isEnumType()) {
+ for (const auto &val : static_cast<EnumNode *>(node)->items()) {
+ sinceString = val.since();
+ if (sinceString.isEmpty())
+ continue;
+ // Insert to enum value map
+ QDocDatabase::newEnumValueMaps()[sinceString].insert(
+ node->name() + "::" + val.name(), node);
+ // Ugly hack: Insert into general map with an empty key -
+ // we need something in there to mark the corresponding
+ // section populated. See Sections class constructor.
+ QDocDatabase::newSinceMaps()[sinceString].replace(QString(), node);
+ }
+ }
+
+ // Recursively find child nodes with since commands.
+ if (node->isAggregate())
+ static_cast<Aggregate *>(node)->findAllSince();
+ }
+}
+
+/*!
+ Resolves the inheritance information for all QML type children
+ of this aggregate.
+*/
+void Aggregate::resolveQmlInheritance()
+{
+ NodeMap previousSearches;
+ for (auto *child : std::as_const(m_children)) {
+ if (!child->isQmlType())
+ continue;
+ static_cast<QmlTypeNode *>(child)->resolveInheritance(previousSearches);
+ }
+}
+
+/*!
+ Returns a word representing the kind of Aggregate this node is.
+ Currently only works for class, struct, and union, but it can
+ easily be extended. If \a cap is true, the word is capitalised.
+ */
+QString Aggregate::typeWord(bool cap) const
+{
+ if (cap) {
+ switch (nodeType()) {
+ case Node::Class:
+ return QLatin1String("Class");
+ case Node::Struct:
+ return QLatin1String("Struct");
+ case Node::Union:
+ return QLatin1String("Union");
+ default:
+ break;
+ }
+ } else {
+ switch (nodeType()) {
+ case Node::Class:
+ return QLatin1String("class");
+ case Node::Struct:
+ return QLatin1String("struct");
+ case Node::Union:
+ return QLatin1String("union");
+ default:
+ break;
+ }
+ }
+ return QString();
+}
+
+/*! \fn int Aggregate::count() const
+ Returns the number of children in the child list.
+ */
+
+/*! \fn const NodeList &Aggregate::childNodes() const
+ Returns a const reference to the child list.
+ */
+
+/*! \fn NodeList::ConstIterator Aggregate::constBegin() const
+ Returns a const iterator pointing at the beginning of the child list.
+ */
+
+/*! \fn NodeList::ConstIterator Aggregate::constEnd() const
+ Returns a const iterator pointing at the end of the child list.
+ */
+
+/*! \fn QmlTypeNode *Aggregate::qmlBaseNode() const
+ If this Aggregate is a QmlTypeNode, this function returns a pointer to
+ the QmlTypeNode that is its base type. Otherwise it returns \c nullptr.
+ A QmlTypeNode doesn't always have a base type, so even when this Aggregate
+ is aQmlTypeNode, the pointer returned can be \c nullptr.
+ */
+
+/*! \fn FunctionMap &Aggregate::functionMap()
+ Returns a reference to this Aggregate's function map, which
+ is a map of all the children of this Aggregate that are
+ FunctionNodes.
+ */
+
+/*! \fn void Aggregate::appendToRelatedByProxy(const NodeList &t)
+ Appends the list of node pointers to the list of elements that are
+ related to this Aggregate but are documented in a different module.
+
+ \sa relatedByProxy()
+ */
+
+/*! \fn NodeList &Aggregate::relatedByProxy()
+ Returns a reference to a list of node pointers where each element
+ points to a node in an index file for some other module, such that
+ whatever the node represents was documented in that other module,
+ but it is related to this Aggregate, so when the documentation for
+ this Aggregate is written, it will contain links to elements in the
+ other module.
+ */
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/aggregate.h b/src/qdoc/qdoc/src/qdoc/aggregate.h
new file mode 100644
index 000000000..a02633e04
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/aggregate.h
@@ -0,0 +1,118 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef AGGREGATE_H
+#define AGGREGATE_H
+
+#include "pagenode.h"
+
+#include <optional>
+#include <vector>
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qstringlist.h>
+
+QT_BEGIN_NAMESPACE
+
+class FunctionNode;
+class QmlTypeNode;
+class QmlPropertyNode;
+
+class Aggregate : public PageNode
+{
+public:
+ using FunctionMap = QMap<QString, std::vector<FunctionNode*>>;
+
+ [[nodiscard]] Node *findChildNode(const QString &name, Node::Genus genus,
+ int findFlags = 0) const;
+ Node *findNonfunctionChild(const QString &name, bool (Node::*)() const);
+ void findChildren(const QString &name, NodeVector &nodes) const;
+ FunctionNode *findFunctionChild(const QString &name, const Parameters &parameters);
+ FunctionNode *findFunctionChild(const FunctionNode *clone);
+
+ void resolveRelates();
+ void normalizeOverloads();
+ void markUndocumentedChildrenInternal();
+
+ [[nodiscard]] bool isAggregate() const override { return true; }
+ [[nodiscard]] const EnumNode *findEnumNodeForValue(const QString &enumValue) const;
+
+ [[nodiscard]] qsizetype count() const { return m_children.size(); }
+ [[nodiscard]] const NodeList &childNodes() const { return m_children; }
+ const NodeList &nonfunctionList();
+ [[nodiscard]] NodeList::ConstIterator constBegin() const { return m_children.constBegin(); }
+ [[nodiscard]] NodeList::ConstIterator constEnd() const { return m_children.constEnd(); }
+
+ inline void setIncludeFile(const QString& include) { m_includeFile.emplace(include); }
+ // REMARK: Albeit not enforced at the API boundaries,
+ // downstream-user can assume that if there is a QString that was
+ // set, then that string is not empty.
+ [[nodiscard]] inline const std::optional<QString>& includeFile() const { return m_includeFile; }
+
+ [[nodiscard]] QmlPropertyNode *hasQmlProperty(const QString &) const;
+ [[nodiscard]] QmlPropertyNode *hasQmlProperty(const QString &, bool attached) const;
+ virtual QmlTypeNode *qmlBaseNode() const { return nullptr; }
+ void addChildByTitle(Node *child, const QString &title);
+ void addChild(Node *child);
+ void adoptChild(Node *child);
+
+ FunctionMap &functionMap() { return m_functionMap; }
+ void findAllFunctions(NodeMapMap &functionIndex);
+ void findAllNamespaces(NodeMultiMap &namespaces);
+ void findAllAttributions(NodeMultiMap &attributions);
+ [[nodiscard]] bool hasObsoleteMembers() const;
+ void findAllObsoleteThings();
+ void findAllClasses();
+ void findAllSince();
+ void resolveQmlInheritance();
+ bool hasOverloads(const FunctionNode *fn) const;
+ void appendToRelatedByProxy(const NodeList &t) { m_relatedByProxy.append(t); }
+ NodeList &relatedByProxy() { return m_relatedByProxy; }
+ [[nodiscard]] QString typeWord(bool cap) const;
+
+protected:
+ Aggregate(NodeType type, Aggregate *parent, const QString &name)
+ : PageNode(type, parent, name) {}
+ ~Aggregate() override;
+
+private:
+ friend class Node;
+ void dropNonRelatedMembers();
+
+protected:
+ NodeList m_children {};
+ NodeList m_relatedByProxy {};
+ FunctionMap m_functionMap {};
+
+private:
+ // REMARK: The member indicates the name of a file where the
+ // aggregate can be found from, for example, an header file that
+ // declares a class.
+ // For aggregates such as classes we expect this to always be set
+ // to a non-empty string after the code-parsing phase.
+ // Indeed, currently, by default, QDoc always generates such a
+ // string using the name of the aggregate if no include file can
+ // be propagated from some of the parents.
+ //
+ // Nonetheless, we are still forced to make this an optional, as
+ // this will not be true for all Aggregates.
+ //
+ // For example, for namespaces, we don't seem to set an include
+ // file and indeed doing so wouldn't be particularly meaningful.
+ //
+ // It is possible to assume in later code, especially the
+ // generation phase, that at least some classes of aggregates
+ // always have a value set here but we should, for the moment,
+ // still check for the possibility of something not to be there,
+ // or warn if we decide to ignore that, to be compliant with the
+ // current interface, whose change would require deep changes to
+ // QDoc internal structures.
+ std::optional<QString> m_includeFile{};
+ NodeList m_enumChildren {};
+ NodeMultiMap m_nonfunctionMap {};
+ NodeList m_nonfunctionList {};
+};
+
+QT_END_NAMESPACE
+
+#endif // AGGREGATE_H
diff --git a/src/qdoc/qdoc/src/qdoc/atom.cpp b/src/qdoc/qdoc/src/qdoc/atom.cpp
new file mode 100644
index 000000000..10f67696c
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/atom.cpp
@@ -0,0 +1,432 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "atom.h"
+
+#include "location.h"
+#include "qdocdatabase.h"
+
+#include <QtCore/qregularexpression.h>
+
+#include <cstdio>
+
+QT_BEGIN_NAMESPACE
+
+/*! \class Atom
+ \brief The Atom class is the fundamental unit for representing
+ documents internally.
+
+ Atoms have a \i type and are completed by a \i string whose
+ meaning depends on the \i type. For example, the string
+ \quotation
+ \i italic text looks nicer than \bold bold text
+ \endquotation
+ is represented by the following atoms:
+ \quotation
+ (FormattingLeft, ATOM_FORMATTING_ITALIC)
+ (String, "italic")
+ (FormattingRight, ATOM_FORMATTING_ITALIC)
+ (String, " text is more attractive than ")
+ (FormattingLeft, ATOM_FORMATTING_BOLD)
+ (String, "bold")
+ (FormattingRight, ATOM_FORMATTING_BOLD)
+ (String, " text")
+ \endquotation
+
+ \also Text
+*/
+
+/*! \enum Atom::AtomType
+
+ \value AnnotatedList
+ \value AutoLink
+ \value BaseName
+ \value BriefLeft
+ \value BriefRight
+ \value C
+ \value CaptionLeft
+ \value CaptionRight
+ \value Code
+ \value CodeBad
+ \value CodeQuoteArgument
+ \value CodeQuoteCommand
+ \value DetailsLeft
+ \value DetailsRight
+ \value DivLeft
+ \value DivRight
+ \value ExampleFileLink
+ \value ExampleImageLink
+ \value FormatElse
+ \value FormatEndif
+ \value FormatIf
+ \value FootnoteLeft
+ \value FootnoteRight
+ \value FormattingLeft
+ \value FormattingRight
+ \value GeneratedList
+ \value Image
+ \value ImageText
+ \value ImportantNote
+ \value InlineImage
+ \value Keyword
+ \value LineBreak
+ \value Link
+ \value LinkNode
+ \value ListLeft
+ \value ListItemNumber
+ \value ListTagLeft
+ \value ListTagRight
+ \value ListItemLeft
+ \value ListItemRight
+ \value ListRight
+ \value NavAutoLink
+ \value NavLink
+ \value Nop
+ \value Note
+ \value ParaLeft
+ \value ParaRight
+ \value Qml
+ \value QuotationLeft
+ \value QuotationRight
+ \value RawString
+ \value SectionLeft
+ \value SectionRight
+ \value SectionHeadingLeft
+ \value SectionHeadingRight
+ \value SidebarLeft
+ \value SidebarRight
+ \value SinceList
+ \value SinceTagLeft
+ \value SinceTagRight
+ \value String
+ \value TableLeft
+ \value TableRight
+ \value TableHeaderLeft
+ \value TableHeaderRight
+ \value TableRowLeft
+ \value TableRowRight
+ \value TableItemLeft
+ \value TableItemRight
+ \value TableOfContents
+ \value Target
+ \value UnhandledFormat
+ \value UnknownCommand
+*/
+
+static const struct
+{
+ const char *english;
+ int no;
+} atms[] = { { "AnnotatedList", Atom::AnnotatedList },
+ { "AutoLink", Atom::AutoLink },
+ { "BaseName", Atom::BaseName },
+ { "br", Atom::BR },
+ { "BriefLeft", Atom::BriefLeft },
+ { "BriefRight", Atom::BriefRight },
+ { "C", Atom::C },
+ { "CaptionLeft", Atom::CaptionLeft },
+ { "CaptionRight", Atom::CaptionRight },
+ { "Code", Atom::Code },
+ { "CodeBad", Atom::CodeBad },
+ { "CodeQuoteArgument", Atom::CodeQuoteArgument },
+ { "CodeQuoteCommand", Atom::CodeQuoteCommand },
+ { "ComparesLeft", Atom::ComparesLeft },
+ { "ComparesRight", Atom::ComparesRight },
+ { "DetailsLeft", Atom::DetailsLeft },
+ { "DetailsRight", Atom::DetailsRight },
+ { "DivLeft", Atom::DivLeft },
+ { "DivRight", Atom::DivRight },
+ { "ExampleFileLink", Atom::ExampleFileLink },
+ { "ExampleImageLink", Atom::ExampleImageLink },
+ { "FootnoteLeft", Atom::FootnoteLeft },
+ { "FootnoteRight", Atom::FootnoteRight },
+ { "FormatElse", Atom::FormatElse },
+ { "FormatEndif", Atom::FormatEndif },
+ { "FormatIf", Atom::FormatIf },
+ { "FormattingLeft", Atom::FormattingLeft },
+ { "FormattingRight", Atom::FormattingRight },
+ { "GeneratedList", Atom::GeneratedList },
+ { "hr", Atom::HR },
+ { "Image", Atom::Image },
+ { "ImageText", Atom::ImageText },
+ { "ImportantLeft", Atom::ImportantLeft },
+ { "ImportantRight", Atom::ImportantRight },
+ { "InlineImage", Atom::InlineImage },
+ { "Keyword", Atom::Keyword },
+ { "LegaleseLeft", Atom::LegaleseLeft },
+ { "LegaleseRight", Atom::LegaleseRight },
+ { "LineBreak", Atom::LineBreak },
+ { "Link", Atom::Link },
+ { "LinkNode", Atom::LinkNode },
+ { "ListLeft", Atom::ListLeft },
+ { "ListItemNumber", Atom::ListItemNumber },
+ { "ListTagLeft", Atom::ListTagLeft },
+ { "ListTagRight", Atom::ListTagRight },
+ { "ListItemLeft", Atom::ListItemLeft },
+ { "ListItemRight", Atom::ListItemRight },
+ { "ListRight", Atom::ListRight },
+ { "NavAutoLink", Atom::NavAutoLink },
+ { "NavLink", Atom::NavLink },
+ { "Nop", Atom::Nop },
+ { "NoteLeft", Atom::NoteLeft },
+ { "NoteRight", Atom::NoteRight },
+ { "ParaLeft", Atom::ParaLeft },
+ { "ParaRight", Atom::ParaRight },
+ { "Qml", Atom::Qml },
+ { "QuotationLeft", Atom::QuotationLeft },
+ { "QuotationRight", Atom::QuotationRight },
+ { "RawString", Atom::RawString },
+ { "SectionLeft", Atom::SectionLeft },
+ { "SectionRight", Atom::SectionRight },
+ { "SectionHeadingLeft", Atom::SectionHeadingLeft },
+ { "SectionHeadingRight", Atom::SectionHeadingRight },
+ { "SidebarLeft", Atom::SidebarLeft },
+ { "SidebarRight", Atom::SidebarRight },
+ { "SinceList", Atom::SinceList },
+ { "SinceTagLeft", Atom::SinceTagLeft },
+ { "SinceTagRight", Atom::SinceTagRight },
+ { "SnippetCommand", Atom::SnippetCommand },
+ { "SnippetIdentifier", Atom::SnippetIdentifier },
+ { "SnippetLocation", Atom::SnippetLocation },
+ { "String", Atom::String },
+ { "TableLeft", Atom::TableLeft },
+ { "TableRight", Atom::TableRight },
+ { "TableHeaderLeft", Atom::TableHeaderLeft },
+ { "TableHeaderRight", Atom::TableHeaderRight },
+ { "TableRowLeft", Atom::TableRowLeft },
+ { "TableRowRight", Atom::TableRowRight },
+ { "TableItemLeft", Atom::TableItemLeft },
+ { "TableItemRight", Atom::TableItemRight },
+ { "TableOfContents", Atom::TableOfContents },
+ { "Target", Atom::Target },
+ { "UnhandledFormat", Atom::UnhandledFormat },
+ { "WarningLeft", Atom::WarningLeft },
+ { "WarningRight", Atom::WarningRight },
+ { "UnknownCommand", Atom::UnknownCommand },
+ { nullptr, 0 } };
+
+/*! \fn Atom::Atom(AtomType type, const QString &string)
+
+ Constructs an atom of the specified \a type with the single
+ parameter \a string and does not put the new atom in a list.
+*/
+
+/*! \fn Atom::Atom(AtomType type, const QString &p1, const QString &p2)
+
+ Constructs an atom of the specified \a type with the two
+ parameters \a p1 and \a p2 and does not put the new atom
+ in a list.
+*/
+
+/*! \fn Atom(Atom *previous, AtomType type, const QString &string)
+
+ Constructs an atom of the specified \a type with the single
+ parameter \a string and inserts the new atom into the list
+ after the \a previous atom.
+*/
+
+/*! \fn Atom::Atom(Atom *previous, AtomType type, const QString &p1, const QString &p2)
+
+ Constructs an atom of the specified \a type with the two
+ parameters \a p1 and \a p2 and inserts the new atom into
+ the list after the \a previous atom.
+*/
+
+/*! \fn void Atom::appendChar(QChar ch)
+
+ Appends \a ch to the string parameter of this atom.
+
+ \also string()
+*/
+
+/*! \fn void Atom::concatenateString(const QString &string)
+
+ Appends \a string to the string parameter of this atom.
+
+ \also string()
+*/
+
+/*! \fn void Atom::chopString()
+
+ \also string()
+*/
+
+/*! \fn Atom *Atom::next()
+ Return the next atom in the atom list.
+ \also type(), string()
+*/
+
+/*!
+ Return the next Atom in the list if it is of AtomType \a t.
+ Otherwise return 0.
+ */
+const Atom *Atom::next(AtomType t) const
+{
+ return (m_next && (m_next->type() == t)) ? m_next : nullptr;
+}
+
+/*!
+ Return the next Atom in the list if it is of AtomType \a t
+ and its string part is \a s. Otherwise return 0.
+ */
+const Atom *Atom::next(AtomType t, const QString &s) const
+{
+ return (m_next && (m_next->type() == t) && (m_next->string() == s)) ? m_next : nullptr;
+}
+
+/*! \fn const Atom *Atom::next() const
+ Return the next atom in the atom list.
+ \also type(), string()
+*/
+
+/*! \fn AtomType Atom::type() const
+ Return the type of this atom.
+ \also string(), next()
+*/
+
+/*!
+ Return the type of this atom as a string. Return "Invalid" if
+ type() returns an impossible value.
+
+ This is only useful for debugging.
+
+ \also type()
+*/
+QString Atom::typeString() const
+{
+ static bool deja = false;
+
+ if (!deja) {
+ int i = 0;
+ while (atms[i].english != nullptr) {
+ if (atms[i].no != i)
+ Location::internalError(QStringLiteral("QDoc::Atom: atom %1 missing").arg(i));
+ ++i;
+ }
+ deja = true;
+ }
+
+ int i = static_cast<int>(type());
+ if (i < 0 || i > static_cast<int>(Last))
+ return QLatin1String("Invalid");
+ return QLatin1String(atms[i].english);
+}
+
+/*! \fn const QString &Atom::string() const
+
+ Returns the string parameter that together with the type
+ characterizes this atom.
+
+ \also type(), next()
+*/
+
+/*!
+ For a link atom, returns the string representing the link text
+ if one exist in the list of atoms.
+*/
+QString Atom::linkText() const
+{
+ Q_ASSERT(m_type == Atom::Link);
+ QString result;
+
+ if (next() && next()->string() == ATOM_FORMATTING_LINK) {
+ auto *atom = next()->next();
+ while (atom && atom->type() != Atom::FormattingRight) {
+ result += atom->string();
+ atom = atom->next();
+ }
+ return result;
+ }
+
+ return string();
+}
+
+/*!
+ The only constructor for LinkAtom. It creates an Atom of
+ type Atom::Link. \a p1 being the link target. \a p2 is the
+ parameters in square brackets. Normally there is just one
+ word in the square brackets, but there can be up to three
+ words separated by spaces. The constructor splits \a p2 on
+ the space character.
+ */
+LinkAtom::LinkAtom(const QString &p1, const QString &p2, Location location)
+ : Atom(Atom::Link, p1),
+ location(location),
+ m_resolved(false),
+ m_genus(Node::DontCare),
+ m_domain(nullptr),
+ m_squareBracketParams(p2)
+{
+ // nada.
+}
+
+/*!
+ This function resolves the parameters that were enclosed in
+ square brackets. If the parameters have already been resolved,
+ it does nothing and returns immediately.
+ */
+void LinkAtom::resolveSquareBracketParams()
+{
+ if (m_resolved)
+ return;
+ const QStringList params = m_squareBracketParams.toLower().split(QLatin1Char(' '));
+ for (const auto &param : params) {
+ if (!m_domain) {
+ m_domain = QDocDatabase::qdocDB()->findTree(param);
+ if (m_domain) {
+ continue;
+ }
+ }
+
+ if (param == "qml") {
+ m_genus = Node::QML;
+ continue;
+ }
+ if (param == "cpp") {
+ m_genus = Node::CPP;
+ continue;
+ }
+ if (param == "doc") {
+ m_genus = Node::DOC;
+ continue;
+ }
+ if (param == "api") {
+ m_genus = Node::API;
+ continue;
+ }
+ break;
+ }
+ m_resolved = true;
+}
+
+/*!
+ Standard copy constructor of LinkAtom \a t.
+ */
+LinkAtom::LinkAtom(const LinkAtom &t)
+ : Atom(Link, t.string()),
+ location(t.location),
+ m_resolved(t.m_resolved),
+ m_genus(t.m_genus),
+ m_domain(t.m_domain),
+ m_squareBracketParams(t.m_squareBracketParams)
+{
+ // nothing
+}
+
+/*!
+ Special copy constructor of LinkAtom \a t, where
+ where the new LinkAtom will not be the first one
+ in the list.
+ */
+LinkAtom::LinkAtom(Atom *previous, const LinkAtom &t)
+ : Atom(previous, Link, t.string()),
+ location(t.location),
+ m_resolved(t.m_resolved),
+ m_genus(t.m_genus),
+ m_domain(t.m_domain),
+ m_squareBracketParams(t.m_squareBracketParams)
+{
+ previous->m_next = this;
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/atom.h b/src/qdoc/qdoc/src/qdoc/atom.h
new file mode 100644
index 000000000..dbfd0c4a9
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/atom.h
@@ -0,0 +1,220 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef ATOM_H
+#define ATOM_H
+
+#include "node.h"
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qstringlist.h>
+
+QT_BEGIN_NAMESPACE
+
+class Tree;
+class LinkAtom;
+
+class Atom
+{
+public:
+ enum AtomType {
+ AnnotatedList,
+ AutoLink,
+ BaseName,
+ BR,
+ BriefLeft,
+ BriefRight,
+ C,
+ CaptionLeft,
+ CaptionRight,
+ Code,
+ CodeBad,
+ CodeQuoteArgument,
+ CodeQuoteCommand,
+ ComparesLeft,
+ ComparesRight,
+ DetailsLeft,
+ DetailsRight,
+ DivLeft,
+ DivRight,
+ ExampleFileLink,
+ ExampleImageLink,
+ FootnoteLeft,
+ FootnoteRight,
+ FormatElse,
+ FormatEndif,
+ FormatIf,
+ FormattingLeft,
+ FormattingRight,
+ GeneratedList,
+ HR,
+ Image,
+ ImageText,
+ ImportantLeft,
+ ImportantRight,
+ InlineImage,
+ Keyword,
+ LegaleseLeft,
+ LegaleseRight,
+ LineBreak,
+ Link,
+ LinkNode,
+ ListLeft,
+ ListItemNumber,
+ ListTagLeft,
+ ListTagRight,
+ ListItemLeft,
+ ListItemRight,
+ ListRight,
+ NavAutoLink,
+ NavLink,
+ Nop,
+ NoteLeft,
+ NoteRight,
+ ParaLeft,
+ ParaRight,
+ Qml,
+ QuotationLeft,
+ QuotationRight,
+ RawString,
+ SectionLeft,
+ SectionRight,
+ SectionHeadingLeft,
+ SectionHeadingRight,
+ SidebarLeft,
+ SidebarRight,
+ SinceList,
+ SinceTagLeft,
+ SinceTagRight,
+ SnippetCommand,
+ SnippetIdentifier,
+ SnippetLocation,
+ String,
+ TableLeft,
+ TableRight,
+ TableHeaderLeft,
+ TableHeaderRight,
+ TableRowLeft,
+ TableRowRight,
+ TableItemLeft,
+ TableItemRight,
+ TableOfContents,
+ Target,
+ UnhandledFormat,
+ WarningLeft,
+ WarningRight,
+ UnknownCommand,
+ Last = UnknownCommand
+ };
+
+ friend class LinkAtom;
+
+ explicit Atom(AtomType type, const QString &string = "") : m_type(type), m_strs(string) { }
+
+ Atom(AtomType type, const QString &p1, const QString &p2) : m_type(type), m_strs(p1)
+ {
+ if (!p2.isEmpty())
+ m_strs << p2;
+ }
+
+ Atom(Atom *previous, AtomType type, const QString &string)
+ : m_next(previous->m_next), m_type(type), m_strs(string)
+ {
+ previous->m_next = this;
+ }
+
+ Atom(Atom *previous, AtomType type, const QString &p1, const QString &p2)
+ : m_next(previous->m_next), m_type(type), m_strs(p1)
+ {
+ if (!p2.isEmpty())
+ m_strs << p2;
+ previous->m_next = this;
+ }
+
+ virtual ~Atom() = default;
+
+ void appendChar(QChar ch) { m_strs[0] += ch; }
+ void concatenateString(const QString &string) { m_strs[0] += string; }
+ void append(const QString &string) { m_strs << string; }
+ void chopString() { m_strs[0].chop(1); }
+ void setString(const QString &string) { m_strs[0] = string; }
+ Atom *next() { return m_next; }
+ void setNext(Atom *newNext) { m_next = newNext; }
+
+ [[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;
+ [[nodiscard]] AtomType type() const { return m_type; }
+ [[nodiscard]] QString typeString() const;
+ [[nodiscard]] const QString &string() const { return m_strs[0]; }
+ [[nodiscard]] const QString &string(int i) const { return m_strs[i]; }
+ [[nodiscard]] qsizetype count() const { return m_strs.size(); }
+ [[nodiscard]] QString linkText() const;
+ [[nodiscard]] const QStringList &strings() const { return m_strs; }
+
+ [[nodiscard]] virtual bool isLinkAtom() const { return false; }
+ virtual Node::Genus genus() { return Node::DontCare; }
+ virtual Tree *domain() { return nullptr; }
+ virtual void resolveSquareBracketParams() {}
+
+protected:
+ Atom *m_next = nullptr;
+ AtomType m_type {};
+ QStringList m_strs {};
+};
+
+class LinkAtom : public Atom
+{
+public:
+ LinkAtom(const QString &p1, const QString &p2, Location location = Location());
+ LinkAtom(const LinkAtom &t);
+ LinkAtom(Atom *previous, const LinkAtom &t);
+ ~LinkAtom() override = default;
+
+ [[nodiscard]] bool isLinkAtom() const override { return true; }
+ Node::Genus genus() override
+ {
+ resolveSquareBracketParams();
+ return m_genus;
+ }
+ Tree *domain() override
+ {
+ resolveSquareBracketParams();
+ return m_domain;
+ }
+ void resolveSquareBracketParams() override;
+
+public:
+ Location location;
+
+protected:
+ bool m_resolved {};
+ Node::Genus m_genus {};
+ Tree *m_domain {};
+ QString m_squareBracketParams {};
+};
+
+#define ATOM_FORMATTING_BOLD "bold"
+#define ATOM_FORMATTING_INDEX "index"
+#define ATOM_FORMATTING_ITALIC "italic"
+#define ATOM_FORMATTING_LINK "link"
+#define ATOM_FORMATTING_PARAMETER "parameter"
+#define ATOM_FORMATTING_SPAN "span "
+#define ATOM_FORMATTING_SUBSCRIPT "subscript"
+#define ATOM_FORMATTING_SUPERSCRIPT "superscript"
+#define ATOM_FORMATTING_TELETYPE "teletype"
+#define ATOM_FORMATTING_UICONTROL "uicontrol"
+#define ATOM_FORMATTING_UNDERLINE "underline"
+
+#define ATOM_LIST_BULLET "bullet"
+#define ATOM_LIST_TAG "tag"
+#define ATOM_LIST_VALUE "value"
+#define ATOM_LIST_LOWERALPHA "loweralpha"
+#define ATOM_LIST_LOWERROMAN "lowerroman"
+#define ATOM_LIST_NUMERIC "numeric"
+#define ATOM_LIST_UPPERALPHA "upperalpha"
+#define ATOM_LIST_UPPERROMAN "upperroman"
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/boundaries/filesystem/directorypath.cpp b/src/qdoc/qdoc/src/qdoc/boundaries/filesystem/directorypath.cpp
new file mode 100644
index 000000000..799582139
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/boundaries/filesystem/directorypath.cpp
@@ -0,0 +1,126 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "directorypath.h"
+
+/*!
+ * \class DirectoryPath
+ *
+ * \brief Represents a path to a directory that was known to exist on the
+ * filesystem.
+ *
+ * An instance of this type guarantees that, at the time of creation
+ * of the instance, the contained path represented an existing,
+ * readable, executable directory.
+ *
+ * The type is intended to be used whenever a user-provided path to a
+ * directory is encountered the first time, validating that it can be
+ * used later on for the duration of a QDoc execution and
+ * canonicalizing the original path.
+ *
+ * Such a usage example could be during the configuration process,
+ * when encountering the paths that defines where QDoc should search
+ * for images or other files.
+ *
+ * Similarly, it is intended to be used at the API boundaries,
+ * internally, to relieve the called element of the requirement to
+ * check the validity of a path when a directory is required and to
+ * ensure that a single format of the path is encountered.
+ *
+ * Do note that the guarantees provided by this type do not
+ * necessarily hold after the time of creation of an instance.
+ * Indeed, the underlying filesystem may have changed.
+ *
+ * It is possible to renew the contract by obtaining a new instance:
+ *
+ * \code
+ * DirectoryPath old...
+ *
+ * ...
+ *
+ * auto current{DirectoryPath:refine(old.value())};
+ * \endcode
+ *
+ * QDoc itself will not generally perform destructive operations on
+ * its input files during an execution and, as such, it is never
+ * required to renew a contract. Ensuring that the underlying input
+ * files are indeed immutable is out-of-scope for QDoc and it is
+ * allowed to consider a case where the contract was invalidated as
+ * undefined behavior.
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {wrapped_type_documentation} {DirectoryPath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {has_equality_operator_documentation} {DirectoryPath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {has_less_than_operator_documentation} {DirectoryPath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {has_strictly_less_than_operator_documentation} {DirectoryPath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {has_greater_than_operator_documentation} {DirectoryPath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {has_strictly_greater_than_operator_documentation} {DirectoryPath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {refine_documentation} {DirectoryPath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {value_documentation} {DirectoryPath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {copy_constructor_documentation} {DirectoryPath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {copy_assignment_documentation} {DirectoryPath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {move_constructor_documentation} {DirectoryPath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {move_assignment_documentation} {DirectoryPath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {conversion_documentation} {DirectoryPath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {operator_equal_documentation} {DirectoryPath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {operator_unequal_documentation} {DirectoryPath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {operator_less_than_documentation} {DirectoryPath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {operator_less_than_or_equal_documentation} {DirectoryPath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {operator_greater_than_documentation} {DirectoryPath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {operator_greater_than_or_equal_documentation} {DirectoryPath}
+ */
diff --git a/src/qdoc/qdoc/src/qdoc/boundaries/filesystem/directorypath.h b/src/qdoc/qdoc/src/qdoc/boundaries/filesystem/directorypath.h
new file mode 100644
index 000000000..7ec1dd415
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/boundaries/filesystem/directorypath.h
@@ -0,0 +1,17 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include "../refined_typedef.h"
+
+#include <optional>
+
+#include <QtCore/qstring.h>
+#include <QtCore/qfileinfo.h>
+
+QDOC_REFINED_TYPEDEF(QString, DirectoryPath) {
+ QFileInfo info{value};
+
+ return (info.isDir() && info.isReadable() && info.isExecutable()) ? std::optional(DirectoryPath{info.canonicalFilePath()}) : std::nullopt;
+}
diff --git a/src/qdoc/qdoc/src/qdoc/boundaries/filesystem/filepath.cpp b/src/qdoc/qdoc/src/qdoc/boundaries/filesystem/filepath.cpp
new file mode 100644
index 000000000..d8964b6a6
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/boundaries/filesystem/filepath.cpp
@@ -0,0 +1,125 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "filepath.h"
+
+/*!
+ * \class FilePath
+ *
+ * \brief Represents a path to a file that was known to exist on the
+ * filesystem.
+ *
+ * An instance of this type guarantees that, at the time of creation
+ * of the instance, the contained path represented an existing,
+ * readable file.
+ *
+ * The type is intended to be used whenever a user-provided path to a
+ * file is encountered the first time, validating that it can be
+ * used later on for the duration of a QDoc execution and
+ * canonicalizing the original path.
+ *
+ * Such a usage example could be when resolving a file whose path is
+ * provided by the user.
+ *
+ * Similarly, it is intended to be used at the API boundaries,
+ * internally, to relieve the called element of the requirement to
+ * check the validity of a path when a file is required and to
+ * ensure that a single format of the path is encountered.
+ *
+ * Do note that the guarantees provided by this type do not
+ * necessarily hold after the time of creation of an instance.
+ * Indeed, the underlying filesystem may have changed.
+ *
+ * It is possible to renew the contract by obtaining a new instance:
+ *
+ * \code
+ * FilePath old...
+ *
+ * ...
+ *
+ * auto current{FilePath::refine(old.value())};
+ * \endcode
+ *
+ * QDoc itself will not generally perform destructive operations on
+ * its input files during an execution and, as such, it is never
+ * required to renew a contract. Ensuring that the underlying input
+ * files are indeed immutable is out-of-scope for QDoc and it is
+ * allowed to consider a case where the contract was invalidated as
+ * undefined behavior.
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {wrapped_type_documentation} {FilePath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {has_equality_operator_documentation} {FilePath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {has_less_than_operator_documentation} {FilePath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {has_strictly_less_than_operator_documentation} {FilePath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {has_greater_than_operator_documentation} {FilePath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {has_strictly_greater_than_operator_documentation} {FilePath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {refine_documentation} {FilePath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {value_documentation} {FilePath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {copy_constructor_documentation} {FilePath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {copy_assignment_documentation} {FilePath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {move_constructor_documentation} {FilePath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {move_assignment_documentation} {FilePath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {conversion_documentation} {FilePath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {operator_equal_documentation} {FilePath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {operator_unequal_documentation} {FilePath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {operator_less_than_documentation} {FilePath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {operator_less_than_or_equal_documentation} {FilePath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {operator_greater_than_documentation} {FilePath}
+ */
+
+/*!
+ * \include boundaries/refined_typedef_members.qdocinc {operator_greater_than_or_equal_documentation} {FilePath}
+ */
diff --git a/src/qdoc/qdoc/src/qdoc/boundaries/filesystem/filepath.h b/src/qdoc/qdoc/src/qdoc/boundaries/filesystem/filepath.h
new file mode 100644
index 000000000..e8a9b2d35
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/boundaries/filesystem/filepath.h
@@ -0,0 +1,17 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include "qdoc/boundaries/refined_typedef.h"
+
+#include <optional>
+
+#include <QtCore/qstring.h>
+#include <QtCore/qfileinfo.h>
+
+QDOC_REFINED_TYPEDEF(QString, FilePath) {
+ QFileInfo info{value};
+
+ return (info.isFile() && info.isReadable()) ? std::optional(FilePath{info.canonicalFilePath()}) : std::nullopt;
+}
diff --git a/src/qdoc/qdoc/src/qdoc/boundaries/filesystem/resolvedfile.cpp b/src/qdoc/qdoc/src/qdoc/boundaries/filesystem/resolvedfile.cpp
new file mode 100644
index 000000000..4d5eca512
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/boundaries/filesystem/resolvedfile.cpp
@@ -0,0 +1,96 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "resolvedfile.h"
+
+/*!
+ * \class ResolvedFile
+ *
+ * \brief Represents a file that is reachable by QDoc based on its
+ * current configuration.
+ *
+ * Instances of this type are, generally, intended to be generated by
+ * any process that needs to query the filesystem for the presence of
+ * some files based on a user-inputted path to ensure their
+ * availability.
+ *
+ * Such an example might be when QDoc is searching for a file whose
+ * path is provided by the user, such as the one in a snippet command,
+ * that should represent a file that is reachable with the current
+ * configuration.
+ *
+ * On the other side, logic that requires access to files that are
+ * known to be user-provided, such as the quoting of snippets, can use
+ * this type at the API boundary to signal that the file should be
+ * accessible so that they avoid the need to search for the file
+ * themselves.
+ *
+ * Do note that, semantically, this type doesn't actually guarantee
+ * anything about its origin and only guarantees whatever its members
+ * guarantee.
+ *
+ * The reasoning behind this lack of enforcement is to allow for an
+ * easier testing.
+ * As many parts of QDoc might require the presence of an instance of
+ * this type, we want to be able to construct those instances without
+ * the need to pass trough whichever valid generator for them.
+ *
+ * Nonetheless, inside QDoc, any boundary that requires an instance of
+ * this type can consider it guaranteed that the instance was
+ * generated trough some appropriate logic, and consider it a bug if
+ * such is not the case.
+ *
+ * An instance of this type provides two pieces of information.
+ *
+ * The path to the file that is considered resolved, accessible trough
+ * the get_path() method and the string that was used to resolve the
+ * file in the first place, accessible trough the get_query() method.
+ *
+ * The first should be used by consumer who needs to interact with the
+ * file itself, such as reading from it or copying it.
+ *
+ * The second is provided for context and can be used when consumers
+ * need to know what the user-inputted path was in the first place,
+ * for example when presenting debug information.
+ *
+ * It is not semantically guaranteed that this two pieces of
+ * information are actually related. Any such instance for which this
+ * is true should be considered malformed. Inside QDoc, tough,
+ * consumer of this type can consider it guaranteed that no malformed
+ * instance will be passed to them, and consider it a bug if it
+ * happens otherwise.
+ */
+
+/*!
+ * \fn ResolvedFile::ResolvedFile(QString query, FilePath filepath)
+ *
+ * Constructs an instance of this type from \a query and \a filepath.
+ *
+ * \a query should represent the user-inputted path that was used to
+ * resolve the file that this instance represents.
+ *
+ * \a filepath should represent the file that is found querying the
+ * filesystem trough \a query using an appropriate logic for resolving
+ * files.
+ *
+ * An instance that is built from \a query and \a filepath is
+ * guaranteed to return a value that is equivalent to \a query when
+ * get_query() is called and a value that is equivalent to \a
+ * filepath.value() when get_path() is called.
+ */
+
+/*!
+ * \fn const QString& ResolvedFile::get_query() const
+ *
+ * Returns a string representing the user-inputted path that was used
+ * to resolve the file.
+ */
+
+/*!
+ * \fn const QString& ResolvedFile::get_path() const
+ *
+ * Returns a string representing the canonicalized path to the file
+ * that was resolved.
+ *
+ * Access to this file is to be considered guranteed to be available.
+ */
diff --git a/src/qdoc/qdoc/src/qdoc/boundaries/filesystem/resolvedfile.h b/src/qdoc/qdoc/src/qdoc/boundaries/filesystem/resolvedfile.h
new file mode 100644
index 000000000..e21120ab1
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/boundaries/filesystem/resolvedfile.h
@@ -0,0 +1,20 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include "qdoc/boundaries/filesystem/filepath.h"
+
+#include <QString>
+
+struct ResolvedFile {
+public:
+ ResolvedFile(QString query, FilePath filepath) : query{query}, filepath{filepath} {}
+
+ [[nodiscard]] const QString& get_query() const { return query; }
+ [[nodiscard]] const QString& get_path() const { return filepath.value(); }
+
+private:
+ QString query;
+ FilePath filepath;
+};
diff --git a/src/qdoc/qdoc/src/qdoc/boundaries/refined_typedef.h b/src/qdoc/qdoc/src/qdoc/boundaries/refined_typedef.h
new file mode 100644
index 000000000..4f3a13b7c
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/boundaries/refined_typedef.h
@@ -0,0 +1,207 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include <QtCore/qglobal.h>
+
+#include <functional>
+#include <optional>
+#include <type_traits>
+
+// TODO: Express the documentation such that QDoc would be able to see
+// it and process it correctly. This probably means that we would like
+// to associate the definition with a namespace, albeit we could use
+// the header file too, and put the documentation in an empty cpp
+// file. This is delayed as there currently isn't much namespacing for
+// anything in QDoc and such a namespacing should be added gradually
+// and attentively.
+
+// TODO: Review the semantics for construction and optmize it. Should we copy the
+// value? Should we only allow rvalues?
+
+// TODO: There is an high chance that we will need to "compose"
+// refinitions later on when dealing, for example, with the basics of
+// user-provided paths.
+// For example, when requiring that each user-inputted path is purged
+// as per QFileInfo definition of purging.
+// For example, it might be that instead of passing QString around we
+// might pass some Path type that is a purged QString.
+// Then, any other refinement over paths will need to use that as a
+// base type.
+// To avoid the clutter that comes from that, if such will be the
+// case, we will need to change the definition of refine and value if
+// the passed in type was refined already.
+// That is, such that if we have:
+//
+// QDOC_REFINE_TYPE(QString, Path) { ... }
+// QDOC_REFINE_TYPE(Path, Foo) { ... }
+//
+// Foo refines a QString and Foo.value returns a QString. This should
+// in general be trivial as long as we add a way to identify, such as
+// a tag that refinements derive from, what type was declared through
+// QDOC_REFINED_TYPEDEF and what type was not.
+
+// TODO: Provide a way to generate a standard documentation for all
+// members of a type generated by QDOC_REFINED_TYPEDEF without having
+// to copy-paste include command everywhere.
+// The main problem of doing this is that the preprocessor strips
+// comments away, making it impossible to generate comments, and hence
+// QDoc documentation, with the preprocessor.
+
+/*!
+ * \macro QDOC_REFINED_TYPEDEF(_type, _name)
+ * \relates refined_typedef.hpp
+ *
+ * Declares a wrapper type for \c {_type}, with identifier \c {_name},
+ * that represents a subset of \c {_type} for which some conditions
+ * hold.
+ *
+ * For example:
+ *
+ * \code
+ QDOC_REFINED_TYPEDEF(std::size_t, Fin5) {
+ return (value < 5) : std::make_optional<Fin5>{value} : std::nullopt;
+ }
+ * \endcode
+ *
+ * Represents the subset of \c {std::size_t} that contains the value 0, 1,
+ * 2, 3 and 4, that is, the general finite set of cardinality 5.
+ *
+ * As the example shows, usages of the macro require some type, an
+ * identifier and some code.
+ *
+ * The type that is provided is the type that will be wrapped.
+ * Do note that we expect a type with no-qualifiers and that is not a
+ * pointer type. Types passed with those kind of qualifiers will be
+ * simplified to their base type.
+ *
+ * That is, for example, \c {int*}, \c {const int}, \c {const int&},
+ * \c {int&} all counts as \c {int}.
+ *
+ * The identifier that is passed is used as the name for the newly
+ * declared type that wraps the original type.
+ *
+ * The code block that is passed will be run when an instance of the
+ * newly created wrapper type is being obtained.
+ * If the wrapper type is T, the codeblock must return a \c
+ * {std::optional<T>}.
+ * The code block should perform any check that ensures that the
+ * guarantees provided by the wrapper type holds and return a value if
+ * such is the case, otherwise returning \c {std::nullopt}.
+ *
+ * Inside the code block, the identifier \e {value} is implicitly
+ * bound to an element of the wrapped type that the instance is being
+ * built from and for which the guarantees provided by the wrapper
+ * type must hold.
+ *
+ * When a call to QDOC_REFINED_TYPEDEF is successful, a type with the
+ * provided identifier is declared.
+ *
+ * Let T be a type declared trough a call of QDOC_REFINED_TYPEDEF and
+ * W be the type that it wraps.
+ *
+ * An instance of T can be obtained by calling T::refine with an
+ * element of W.
+ *
+ * If the element of W respects the guarantees that T provides, then
+ * the call will return an optional that contains an instance of T,
+ * othewise it will return an empty optional.
+ *
+ * When an instance of T is obtained, it will wrap the element of W that
+ * was used to obtain it.
+ *
+ * The wrapped value can be accessed trough the \c {value} method.
+ *
+ * For example, considering \c {Fin5}, we could obtain an instance of
+ * it as follows:
+ *
+ * \code
+ * auto instance = *(Fin5::refine(std::size_t{1}));
+ * \endcode
+ *
+ * With that instance available we can retrieve the original value as
+ * follows:
+ *
+ * \code
+ * instance.value(); // The value 1
+ * \endcode
+ */
+
+#define QDOC_REFINED_TYPEDEF(_type, _name) \
+ struct _name { \
+ public: \
+ using wrapped_type = std::remove_reference_t<std::remove_cv_t<std::remove_pointer_t<_type>>>; \
+ \
+ inline static constexpr auto has_equality_operator_v = std::is_invocable_r_v<bool, std::equal_to<>, wrapped_type, wrapped_type>; \
+ inline static constexpr auto has_less_than_operator_v = std::is_invocable_r_v<bool, std::less_equal<>, wrapped_type, wrapped_type>; \
+ inline static constexpr auto has_strictly_less_than_operator_v = std::is_invocable_r_v<bool, std::less<>, wrapped_type, wrapped_type>; \
+ inline static constexpr auto has_greater_than_operator_v = std::is_invocable_r_v<bool, std::greater_equal<>, wrapped_type, wrapped_type>; \
+ inline static constexpr auto has_strictly_greater_than_operator_v = std::is_invocable_r_v<bool, std::greater<>, wrapped_type, wrapped_type>; \
+ \
+ public: \
+ static std::optional<_name> refine(wrapped_type value); \
+ \
+ [[nodiscard]] const wrapped_type& value() const noexcept { return _value; } \
+ \
+ _name(const _name&) = default; \
+ _name& operator=(const _name&) = default; \
+ \
+ _name(_name&&) = default; \
+ _name& operator=(_name&&) = default; \
+ \
+ operator wrapped_type() const { return _value; } \
+ \
+ public: \
+ \
+ template< \
+ typename = std::enable_if_t< \
+ has_equality_operator_v \
+ > \
+ > \
+ bool operator==(const _name& rhs) const noexcept { return _value == rhs._value; } \
+ \
+ template< \
+ typename = std::enable_if_t< \
+ has_equality_operator_v \
+ > \
+ > \
+ bool operator!=(const _name& rhs) const noexcept { return !(_value == rhs._value); } \
+ \
+ template< \
+ typename = std::enable_if_t< \
+ has_less_than_operator_v \
+ > \
+ > \
+ bool operator<=(const _name& rhs) const noexcept { return _value <= rhs._value; } \
+ \
+ \
+ template< \
+ typename = std::enable_if_t< \
+ has_strictly_less_than_operator_v \
+ > \
+ > \
+ bool operator<(const _name& rhs) const noexcept { return _value < rhs._value; } \
+ \
+ template< \
+ typename = std::enable_if_t< \
+ has_greater_than_operator_v \
+ > \
+ > \
+ bool operator>=(const _name& rhs) const noexcept { return _value >= rhs._value; } \
+ \
+ template< \
+ typename = std::enable_if_t< \
+ has_strictly_greater_than_operator_v \
+ > \
+ > \
+ bool operator>(const _name& rhs) const noexcept { return _value > rhs._value; } \
+ \
+ private: \
+ _name(wrapped_type value) : _value{std::move(value)} {} \
+ \
+ private: \
+ wrapped_type _value; \
+ }; \
+ \
+ inline std::optional<_name> _name::refine(wrapped_type value)
diff --git a/src/qdoc/qdoc/src/qdoc/boundaries/refined_typedef_members.qdocinc b/src/qdoc/qdoc/src/qdoc/boundaries/refined_typedef_members.qdocinc
new file mode 100644
index 000000000..ab956f49f
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/boundaries/refined_typedef_members.qdocinc
@@ -0,0 +1,162 @@
+//! [wrapped_type_documentation]
+\typealias \1::wrapped_type
+
+The type that is wrapped by this type.
+
+This type is always deprived of qualifiers and is never a pointer
+type.
+//! [wrapped_type_documentation]
+
+//! [has_equality_operator_documentation]
+\variable \1::has_equality_operator_v
+
+True when the wrapped_type can be compared for equality.
+
+When this is the case, \1 can be compared for equality and inequality.
+//! [has_equality_operator_documentation]
+
+//! [has_less_than_operator_documentation]
+\variable \1::has_less_than_operator_v
+
+True when the wrapped_type can be compared for lesserness.
+
+When this is the case, \1 can be compared for lesserness.
+//! [has_less_than_operator_documentation]
+
+//! [has_strictly_less_than_operator_documentation]
+\variable \1::has_strictly_less_than_operator_v
+
+True when the wrapped_type can be compared for strict lesserness.
+
+When this is the case, \1 can be compared for strict lesserness.
+//! [has_stricly_less_than_operator_documentation]
+
+//! [has_greater_than_operator_documentation]
+\variable \1::has_greater_than_operator_v
+
+True when the wrapped_type can be compared for greaterness.
+
+When this is the case, \1 can be compared for greaterness.
+//! [has_less_than_operator_documentation]
+
+//! [has_strictly_greater_than_operator_documentation]
+\variable \1::has_strictly_greater_than_operator_v
+
+True when the wrapped_type can be compared for strict greaterness.
+
+When this is the case, \1 can be compared for strict greaterness.
+//! [has_stricly_greater_than_operator_documentation]
+
+//! [refine_documentation]
+\fn static std::optional<\1> \1::refine(wrapped_type value)
+
+Returns an instance of \1 wrapping \a value if \a value respects the
+guarantees that are required by \1.
+
+If such is not the case, \c {std::nullopt} is returned instead.
+//! [refine_documentation]
+
+//! [value_documentation]
+\fn const wrapped_type& \1::value() const noexcept
+
+Returns a const reference to the value that is wrapped by this
+instance.
+//! [value_documentation]
+
+//! [copy_constructor_documentation]
+\fn \1::\1(const \1& other)
+
+Copy-constructs an instance of \1 from \a other.
+
+This constructor is generated by the compiler.
+//! [copy_constructor_documentation]
+
+//! [copy_assignment_documentation]
+\fn \1::operator=(const \1& other)
+
+Copy-assigns to this instance of \1 from \a other.
+
+This constructor is generated by the compiler.
+//! [copy_assignment_documentation]
+
+//! [move_constructor_documentation]
+\fn \1::\1(\1&& other)
+
+Move-constructs an instance of \1 from \a other.
+
+The only valid operations on an instance that was moved-from are
+destruction and reassignment.
+
+This constructor is generated by the compiler.
+//! [move_constructor_documentation]
+
+//! [move_assignment_documentation]
+\fn \1::operator=(\1&& other)
+
+Move-assigns to this instance of \1 from \a other.
+
+The only valid operations on an instance that was moved-from are
+destruction and reassignment.
+
+This constructor is generated by the compiler.
+//! [move_assignment_documentation]
+
+//! [conversion_documentation]
+\fn operator wrapped_type() const
+
+Converts this instance to its wrapped value.
+//! [conversion_documentation]
+
+//! [operator_equal_documentation]
+\fn bool operator=(const \1& rhs) const noexcept
+
+Returns true if the value wrapped by this instance and \a rhs compare
+equal.
+
+Returns false otherwise.
+//! [operator_equal_documentation]
+
+//! [operator_unequal_documentation]
+\fn bool operator!=(const \1& rhs) const noexcept
+
+Returns true if the value wrapped by this instance and \a rhs do not
+compare equal.
+
+Returns false otherwise.
+//! [operator_unequal_documentation]
+
+//! [operator_less_than_documentation]
+\fn bool operator<(const \1& rhs) const noexcept
+
+Returns true if the value wrapped by this instance compares less than
+the value wrapped by \a rhs.
+
+Returns false otherwise.
+//! [operator_less_than_documentation]
+
+//! [operator_less_than_or_equal_documentation]
+\fn bool operator<=(const \1& rhs) const noexcept
+
+Returns true if the value wrapped by this instance compares less than
+or equal than the value wrapped by \a rhs.
+
+Returns false otherwise.
+//! [operator_less_than_or_equal_documentation]
+
+//! [operator_greater_than_documentation]
+\fn bool operator>(const \1& rhs) const noexcept
+
+Returns true if the value wrapped by this instance compares greater
+than the value wrapped by \a rhs.
+
+Returns false otherwise.
+//! [operator_greater_than_documentation]
+
+//! [operator_greater_than_or_equal_documentation]
+\fn bool operator>=(const \1& rhs) const noexcept
+
+Returns true if the value wrapped by this instance compares greater
+than or equal or equal than the value wrapped by \a rhs.
+
+Returns false otherwise.
+//! [operator_greater_than_or_equal_documentation]
diff --git a/src/qdoc/qdoc/src/qdoc/clang/AST/LLVM_LICENSE.txt b/src/qdoc/qdoc/src/qdoc/clang/AST/LLVM_LICENSE.txt
new file mode 100644
index 000000000..fa6ac5400
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/clang/AST/LLVM_LICENSE.txt
@@ -0,0 +1,279 @@
+==============================================================================
+The LLVM Project is under the Apache License v2.0 with LLVM Exceptions:
+==============================================================================
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+---- LLVM Exceptions to the Apache 2.0 License ----
+
+As an exception, if, as a result of your compiling your source code, portions
+of this Software are embedded into an Object form of such source code, you
+may redistribute such embedded portions in such Object form without complying
+with the conditions of Sections 4(a), 4(b) and 4(d) of the License.
+
+In addition, if you combine or link compiled forms of this Software with
+software that is licensed under the GPLv2 ("Combined Software") and if a
+court of competent jurisdiction determines that the patent provision (Section
+3), the indemnity provision (Section 9) or other Section of the License
+conflicts with the conditions of the GPLv2, you may retroactively and
+prospectively choose to deem waived or otherwise exclude such Section(s) of
+the License, but only in their entirety and only with respect to the Combined
+Software.
+
+==============================================================================
+Software from third parties included in the LLVM Project:
+==============================================================================
+The LLVM Project contains third party software which is under different license
+terms. All such code will be identified clearly using at least one of two
+mechanisms:
+1) It will be in a separate directory tree with its own `LICENSE.txt` or
+ `LICENSE` file at the top containing the specific license and restrictions
+ which apply to that software, or
+2) It will contain specific license and restriction terms at the top of every
+ file.
+
+==============================================================================
+Legacy LLVM License (https://llvm.org/docs/DeveloperPolicy.html#legacy):
+==============================================================================
+University of Illinois/NCSA
+Open Source License
+
+Copyright (c) 2003-2019 University of Illinois at Urbana-Champaign.
+All rights reserved.
+
+Developed by:
+
+ LLVM Team
+
+ University of Illinois at Urbana-Champaign
+
+ http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimers.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimers in the
+ documentation and/or other materials provided with the distribution.
+
+ * Neither the names of the LLVM Team, University of Illinois at
+ Urbana-Champaign, nor the names of its contributors may be used to
+ endorse or promote products derived from this Software without specific
+ prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
+
diff --git a/src/qdoc/qdoc/src/qdoc/clang/AST/QualTypeNames.h b/src/qdoc/qdoc/src/qdoc/clang/AST/QualTypeNames.h
new file mode 100644
index 000000000..c6d331ea8
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/clang/AST/QualTypeNames.h
@@ -0,0 +1,491 @@
+//===------- QualTypeNames.cpp - Generate Complete QualType Names ---------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#pragma once
+
+// Those directives indirectly includes "clang/AST/Attrs.h" which
+// includes "clang/AST/Attrs.inc".
+// "clang/AST/Attrs.inc", produces some "C4267" warnings specifically
+// on MSVC 2019.
+// This in turn blocks CI integrations for configuration with that
+// compiler that treats warnings as errors.
+// As that header is not under our control, we disable the warning
+// completely when going through those includes.
+#include <QtCore/qcompilerdetection.h>
+
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_MSVC(4267)
+
+#include "clang/AST/DeclTemplate.h"
+#include "clang/AST/DeclarationName.h"
+#include "clang/AST/GlobalDecl.h"
+#include "clang/AST/Mangle.h"
+
+QT_WARNING_POP
+
+#include <stdio.h>
+#include <memory>
+
+namespace clang {
+
+namespace TypeName {
+
+inline QualType getFullyQualifiedType(QualType QT, const ASTContext &Ctx,
+ bool WithGlobalNsPrefix);
+
+/// Create a NestedNameSpecifier for Namesp and its enclosing
+/// scopes.
+///
+/// \param[in] Ctx - the AST Context to be used.
+/// \param[in] Namesp - the NamespaceDecl for which a NestedNameSpecifier
+/// is requested.
+/// \param[in] WithGlobalNsPrefix - Indicate whether the global namespace
+/// specifier "::" should be prepended or not.
+static inline NestedNameSpecifier *createNestedNameSpecifier(
+ const ASTContext &Ctx,
+ const NamespaceDecl *Namesp,
+ bool WithGlobalNsPrefix);
+
+/// Create a NestedNameSpecifier for TagDecl and its enclosing
+/// scopes.
+///
+/// \param[in] Ctx - the AST Context to be used.
+/// \param[in] TD - the TagDecl for which a NestedNameSpecifier is
+/// requested.
+/// \param[in] FullyQualify - Convert all template arguments into fully
+/// qualified names.
+/// \param[in] WithGlobalNsPrefix - Indicate whether the global namespace
+/// specifier "::" should be prepended or not.
+static inline NestedNameSpecifier *createNestedNameSpecifier(
+ const ASTContext &Ctx, const TypeDecl *TD,
+ bool FullyQualify, bool WithGlobalNsPrefix);
+
+static inline NestedNameSpecifier *createNestedNameSpecifierForScopeOf(
+ const ASTContext &Ctx, const Decl *decl,
+ bool FullyQualified, bool WithGlobalNsPrefix);
+
+static inline NestedNameSpecifier *getFullyQualifiedNestedNameSpecifier(
+ const ASTContext &Ctx, NestedNameSpecifier *scope, bool WithGlobalNsPrefix);
+
+static inline bool getFullyQualifiedTemplateName(const ASTContext &Ctx,
+ TemplateName &TName,
+ bool WithGlobalNsPrefix) {
+ bool Changed = false;
+ NestedNameSpecifier *NNS = nullptr;
+
+ TemplateDecl *ArgTDecl = TName.getAsTemplateDecl();
+ // ArgTDecl won't be NULL because we asserted that this isn't a
+ // dependent context very early in the call chain.
+ assert(ArgTDecl != nullptr);
+ QualifiedTemplateName *QTName = TName.getAsQualifiedTemplateName();
+
+ if (QTName && !QTName->hasTemplateKeyword()) {
+ NNS = QTName->getQualifier();
+ NestedNameSpecifier *QNNS = getFullyQualifiedNestedNameSpecifier(
+ Ctx, NNS, WithGlobalNsPrefix);
+ if (QNNS != NNS) {
+ Changed = true;
+ NNS = QNNS;
+ } else {
+ NNS = nullptr;
+ }
+ } else {
+ NNS = createNestedNameSpecifierForScopeOf(
+ Ctx, ArgTDecl, true, WithGlobalNsPrefix);
+ }
+ if (NNS) {
+ TemplateName UnderlyingTN(ArgTDecl);
+ if (UsingShadowDecl *USD = TName.getAsUsingShadowDecl())
+ UnderlyingTN = TemplateName(USD);
+ TName =
+ Ctx.getQualifiedTemplateName(NNS,
+ /*TemplateKeyword=*/false, UnderlyingTN);
+ Changed = true;
+ }
+ return Changed;
+}
+
+static inline bool getFullyQualifiedTemplateArgument(const ASTContext &Ctx,
+ TemplateArgument &Arg,
+ bool WithGlobalNsPrefix) {
+ bool Changed = false;
+
+ // Note: we do not handle TemplateArgument::Expression, to replace it
+ // we need the information for the template instance decl.
+
+ if (Arg.getKind() == TemplateArgument::Template) {
+ TemplateName TName = Arg.getAsTemplate();
+ Changed = getFullyQualifiedTemplateName(Ctx, TName, WithGlobalNsPrefix);
+ if (Changed) {
+ Arg = TemplateArgument(TName);
+ }
+ } else if (Arg.getKind() == TemplateArgument::Type) {
+ QualType SubTy = Arg.getAsType();
+ // Check if the type needs more desugaring and recurse.
+ QualType QTFQ = getFullyQualifiedType(SubTy, Ctx, WithGlobalNsPrefix);
+ if (QTFQ != SubTy) {
+ Arg = TemplateArgument(QTFQ);
+ Changed = true;
+ }
+ }
+ return Changed;
+}
+
+static inline const Type *getFullyQualifiedTemplateType(const ASTContext &Ctx,
+ const Type *TypePtr,
+ bool WithGlobalNsPrefix) {
+ // DependentTemplateTypes exist within template declarations and
+ // definitions. Therefore we shouldn't encounter them at the end of
+ // a translation unit. If we do, the caller has made an error.
+ assert(!isa<DependentTemplateSpecializationType>(TypePtr));
+ // In case of template specializations, iterate over the arguments
+ // and fully qualify them as well.
+ if (const auto *TST = dyn_cast<const TemplateSpecializationType>(TypePtr)) {
+ bool MightHaveChanged = false;
+ SmallVector<TemplateArgument, 4> FQArgs;
+ // Cheap to copy and potentially modified by
+ // getFullyQualifedTemplateArgument.
+ for (TemplateArgument Arg : TST->template_arguments()) {
+ MightHaveChanged |= getFullyQualifiedTemplateArgument(
+ Ctx, Arg, WithGlobalNsPrefix);
+ FQArgs.push_back(Arg);
+ }
+
+ // If a fully qualified arg is different from the unqualified arg,
+ // allocate new type in the AST.
+ if (MightHaveChanged) {
+ QualType QT = Ctx.getTemplateSpecializationType(
+ TST->getTemplateName(), FQArgs,
+ TST->getCanonicalTypeInternal());
+ // getTemplateSpecializationType returns a fully qualified
+ // version of the specialization itself, so no need to qualify
+ // it.
+ return QT.getTypePtr();
+ }
+ } else if (const auto *TSTRecord = dyn_cast<const RecordType>(TypePtr)) {
+ // We are asked to fully qualify and we have a Record Type,
+ // which can point to a template instantiation with no sugar in any of
+ // its template argument, however we still need to fully qualify them.
+
+ if (const auto *TSTDecl =
+ dyn_cast<ClassTemplateSpecializationDecl>(TSTRecord->getDecl())) {
+ const TemplateArgumentList &TemplateArgs = TSTDecl->getTemplateArgs();
+
+ bool MightHaveChanged = false;
+ SmallVector<TemplateArgument, 4> FQArgs;
+ for (unsigned int I = 0, E = TemplateArgs.size(); I != E; ++I) {
+ // cheap to copy and potentially modified by
+ // getFullyQualifedTemplateArgument
+ TemplateArgument Arg(TemplateArgs[I]);
+ MightHaveChanged |= getFullyQualifiedTemplateArgument(
+ Ctx, Arg, WithGlobalNsPrefix);
+ FQArgs.push_back(Arg);
+ }
+
+ // If a fully qualified arg is different from the unqualified arg,
+ // allocate new type in the AST.
+ if (MightHaveChanged) {
+ TemplateName TN(TSTDecl->getSpecializedTemplate());
+ QualType QT = Ctx.getTemplateSpecializationType(
+ TN, FQArgs,
+ TSTRecord->getCanonicalTypeInternal());
+ // getTemplateSpecializationType returns a fully qualified
+ // version of the specialization itself, so no need to qualify
+ // it.
+ return QT.getTypePtr();
+ }
+ }
+ }
+ return TypePtr;
+}
+
+static inline NestedNameSpecifier *createOuterNNS(const ASTContext &Ctx, const Decl *D,
+ bool FullyQualify,
+ bool WithGlobalNsPrefix) {
+ const DeclContext *DC = D->getDeclContext();
+ if (const auto *NS = dyn_cast<NamespaceDecl>(DC)) {
+ while (NS && NS->isInline()) {
+ // Ignore inline namespace;
+ NS = dyn_cast<NamespaceDecl>(NS->getDeclContext());
+ }
+ if (NS && NS->getDeclName()) {
+ return createNestedNameSpecifier(Ctx, NS, WithGlobalNsPrefix);
+ }
+ return nullptr; // no starting '::', no anonymous
+ } else if (const auto *TD = dyn_cast<TagDecl>(DC)) {
+ return createNestedNameSpecifier(Ctx, TD, FullyQualify, WithGlobalNsPrefix);
+ } else if (const auto *TDD = dyn_cast<TypedefNameDecl>(DC)) {
+ return createNestedNameSpecifier(
+ Ctx, TDD, FullyQualify, WithGlobalNsPrefix);
+ } else if (WithGlobalNsPrefix && DC->isTranslationUnit()) {
+ return NestedNameSpecifier::GlobalSpecifier(Ctx);
+ }
+ return nullptr; // no starting '::' if |WithGlobalNsPrefix| is false
+}
+
+/// Return a fully qualified version of this name specifier.
+static inline NestedNameSpecifier *getFullyQualifiedNestedNameSpecifier(
+ const ASTContext &Ctx, NestedNameSpecifier *Scope,
+ bool WithGlobalNsPrefix) {
+ switch (Scope->getKind()) {
+ case NestedNameSpecifier::Global:
+ // Already fully qualified
+ return Scope;
+ case NestedNameSpecifier::Namespace:
+ return TypeName::createNestedNameSpecifier(
+ Ctx, Scope->getAsNamespace(), WithGlobalNsPrefix);
+ case NestedNameSpecifier::NamespaceAlias:
+ // Namespace aliases are only valid for the duration of the
+ // scope where they were introduced, and therefore are often
+ // invalid at the end of the TU. So use the namespace name more
+ // likely to be valid at the end of the TU.
+ return TypeName::createNestedNameSpecifier(
+ Ctx,
+ Scope->getAsNamespaceAlias()->getNamespace()->getCanonicalDecl(),
+ WithGlobalNsPrefix);
+ case NestedNameSpecifier::Identifier:
+ // A function or some other construct that makes it un-namable
+ // at the end of the TU. Skip the current component of the name,
+ // but use the name of it's prefix.
+ return getFullyQualifiedNestedNameSpecifier(
+ Ctx, Scope->getPrefix(), WithGlobalNsPrefix);
+ case NestedNameSpecifier::Super:
+ case NestedNameSpecifier::TypeSpec:
+ case NestedNameSpecifier::TypeSpecWithTemplate: {
+ const Type *Type = Scope->getAsType();
+ // Find decl context.
+ const TagDecl *TD = nullptr;
+ if (const TagType *TagDeclType = Type->getAs<TagType>()) {
+ TD = TagDeclType->getDecl();
+ } else {
+ TD = Type->getAsCXXRecordDecl();
+ }
+ if (TD) {
+ return TypeName::createNestedNameSpecifier(Ctx, TD,
+ true /*FullyQualified*/,
+ WithGlobalNsPrefix);
+ } else if (const auto *TDD = dyn_cast<TypedefType>(Type)) {
+ return TypeName::createNestedNameSpecifier(Ctx, TDD->getDecl(),
+ true /*FullyQualified*/,
+ WithGlobalNsPrefix);
+ }
+ return Scope;
+ }
+ }
+ llvm_unreachable("bad NNS kind");
+}
+
+/// Create a nested name specifier for the declaring context of
+/// the type.
+static inline NestedNameSpecifier *createNestedNameSpecifierForScopeOf(
+ const ASTContext &Ctx, const Decl *Decl,
+ bool FullyQualified, bool WithGlobalNsPrefix) {
+ assert(Decl);
+
+ const DeclContext *DC = Decl->getDeclContext()->getRedeclContext();
+ const auto *Outer = dyn_cast_or_null<NamedDecl>(DC);
+ const auto *OuterNS = dyn_cast_or_null<NamespaceDecl>(DC);
+ if (Outer && !(OuterNS && OuterNS->isAnonymousNamespace())) {
+ if (OuterNS) {
+ return createNestedNameSpecifier(Ctx, OuterNS, WithGlobalNsPrefix);
+ } else if (const auto *TD = dyn_cast<TagDecl>(Outer)) {
+ return createNestedNameSpecifier(
+ Ctx, TD, FullyQualified, WithGlobalNsPrefix);
+ } else if (isa<TranslationUnitDecl>(Outer)) {
+ // Context is the TU. Nothing needs to be done.
+ return nullptr;
+ } else {
+ // Decl's context was neither the TU, a namespace, nor a
+ // TagDecl, which means it is a type local to a scope, and not
+ // accessible at the end of the TU.
+ return nullptr;
+ }
+ } else if (WithGlobalNsPrefix && DC->isTranslationUnit()) {
+ return NestedNameSpecifier::GlobalSpecifier(Ctx);
+ }
+ return nullptr;
+}
+
+/// Create a nested name specifier for the declaring context of
+/// the type.
+static inline NestedNameSpecifier *createNestedNameSpecifierForScopeOf(
+ const ASTContext &Ctx, const Type *TypePtr,
+ bool FullyQualified, bool WithGlobalNsPrefix) {
+ if (!TypePtr) return nullptr;
+
+ Decl *Decl = nullptr;
+ // There are probably other cases ...
+ if (const auto *TDT = dyn_cast<TypedefType>(TypePtr)) {
+ Decl = TDT->getDecl();
+ } else if (const auto *TagDeclType = dyn_cast<TagType>(TypePtr)) {
+ Decl = TagDeclType->getDecl();
+ } else if (const auto *TST = dyn_cast<TemplateSpecializationType>(TypePtr)) {
+ Decl = TST->getTemplateName().getAsTemplateDecl();
+ } else {
+ Decl = TypePtr->getAsCXXRecordDecl();
+ }
+
+ if (!Decl) return nullptr;
+
+ return createNestedNameSpecifierForScopeOf(
+ Ctx, Decl, FullyQualified, WithGlobalNsPrefix);
+}
+
+inline NestedNameSpecifier *createNestedNameSpecifier(const ASTContext &Ctx,
+ const NamespaceDecl *Namespace,
+ bool WithGlobalNsPrefix) {
+ while (Namespace && Namespace->isInline()) {
+ // Ignore inline namespace;
+ Namespace = dyn_cast<NamespaceDecl>(Namespace->getDeclContext());
+ }
+ if (!Namespace) return nullptr;
+
+ bool FullyQualified = true; // doesn't matter, DeclContexts are namespaces
+ return NestedNameSpecifier::Create(
+ Ctx,
+ createOuterNNS(Ctx, Namespace, FullyQualified, WithGlobalNsPrefix),
+ Namespace);
+}
+
+inline NestedNameSpecifier *createNestedNameSpecifier(const ASTContext &Ctx,
+ const TypeDecl *TD,
+ bool FullyQualify,
+ bool WithGlobalNsPrefix) {
+ const Type *TypePtr = TD->getTypeForDecl();
+ if (isa<const TemplateSpecializationType>(TypePtr) ||
+ isa<const RecordType>(TypePtr)) {
+ // We are asked to fully qualify and we have a Record Type (which
+ // may point to a template specialization) or Template
+ // Specialization Type. We need to fully qualify their arguments.
+
+ TypePtr = getFullyQualifiedTemplateType(Ctx, TypePtr, WithGlobalNsPrefix);
+ }
+
+ return NestedNameSpecifier::Create(
+ Ctx, createOuterNNS(Ctx, TD, FullyQualify, WithGlobalNsPrefix),
+ false /*No TemplateKeyword*/, TypePtr);
+}
+
+/// Return the fully qualified type, including fully-qualified
+/// versions of any template parameters.
+inline QualType getFullyQualifiedType(QualType QT, const ASTContext &Ctx,
+ bool WithGlobalNsPrefix = false) {
+ // In case of myType* we need to strip the pointer first, fully
+ // qualify and attach the pointer once again.
+ if (isa<PointerType>(QT.getTypePtr())) {
+ // Get the qualifiers.
+ Qualifiers Quals = QT.getQualifiers();
+ QT = getFullyQualifiedType(QT->getPointeeType(), Ctx, WithGlobalNsPrefix);
+ QT = Ctx.getPointerType(QT);
+ // Add back the qualifiers.
+ QT = Ctx.getQualifiedType(QT, Quals);
+ return QT;
+ }
+
+ if (auto *MPT = dyn_cast<MemberPointerType>(QT.getTypePtr())) {
+ // Get the qualifiers.
+ Qualifiers Quals = QT.getQualifiers();
+ // Fully qualify the pointee and class types.
+ QT = getFullyQualifiedType(QT->getPointeeType(), Ctx, WithGlobalNsPrefix);
+ QualType Class = getFullyQualifiedType(QualType(MPT->getClass(), 0), Ctx,
+ WithGlobalNsPrefix);
+ QT = Ctx.getMemberPointerType(QT, Class.getTypePtr());
+ // Add back the qualifiers.
+ QT = Ctx.getQualifiedType(QT, Quals);
+ return QT;
+ }
+
+ // In case of myType& we need to strip the reference first, fully
+ // qualify and attach the reference once again.
+ if (isa<ReferenceType>(QT.getTypePtr())) {
+ // Get the qualifiers.
+ bool IsLValueRefTy = isa<LValueReferenceType>(QT.getTypePtr());
+ Qualifiers Quals = QT.getQualifiers();
+ QT = getFullyQualifiedType(QT->getPointeeType(), Ctx, WithGlobalNsPrefix);
+ // Add the r- or l-value reference type back to the fully
+ // qualified one.
+ if (IsLValueRefTy)
+ QT = Ctx.getLValueReferenceType(QT);
+ else
+ QT = Ctx.getRValueReferenceType(QT);
+ // Add back the qualifiers.
+ QT = Ctx.getQualifiedType(QT, Quals);
+ return QT;
+ }
+
+ // Remove the part of the type related to the type being a template
+ // parameter (we won't report it as part of the 'type name' and it
+ // is actually make the code below to be more complex (to handle
+ // those)
+ while (isa<SubstTemplateTypeParmType>(QT.getTypePtr())) {
+ // Get the qualifiers.
+ Qualifiers Quals = QT.getQualifiers();
+
+ QT = cast<SubstTemplateTypeParmType>(QT.getTypePtr())->desugar();
+
+ // Add back the qualifiers.
+ QT = Ctx.getQualifiedType(QT, Quals);
+ }
+
+ NestedNameSpecifier *Prefix = nullptr;
+ // Local qualifiers are attached to the QualType outside of the
+ // elaborated type. Retrieve them before descending into the
+ // elaborated type.
+ Qualifiers PrefixQualifiers = QT.getLocalQualifiers();
+ QT = QualType(QT.getTypePtr(), 0);
+#if LIBCLANG_VERSION_MAJOR >= 18
+ constexpr ElaboratedTypeKeyword ETK_None = ElaboratedTypeKeyword::None;
+#endif
+ ElaboratedTypeKeyword Keyword = ETK_None;
+ if (const auto *ETypeInput = dyn_cast<ElaboratedType>(QT.getTypePtr())) {
+ QT = ETypeInput->getNamedType();
+ assert(!QT.hasLocalQualifiers());
+ Keyword = ETypeInput->getKeyword();
+ }
+
+ // We don't consider the alias introduced by `using a::X` as a new type.
+ // The qualified name is still a::X.
+ if (const auto *UT = QT->getAs<UsingType>()) {
+ QT = Ctx.getQualifiedType(UT->getUnderlyingType(), PrefixQualifiers);
+ return getFullyQualifiedType(QT, Ctx, WithGlobalNsPrefix);
+ }
+
+ // Create a nested name specifier if needed.
+ Prefix = createNestedNameSpecifierForScopeOf(Ctx, QT.getTypePtr(),
+ true /*FullyQualified*/,
+ WithGlobalNsPrefix);
+
+ // In case of template specializations iterate over the arguments and
+ // fully qualify them as well.
+ if (isa<const TemplateSpecializationType>(QT.getTypePtr()) ||
+ isa<const RecordType>(QT.getTypePtr())) {
+ // We are asked to fully qualify and we have a Record Type (which
+ // may point to a template specialization) or Template
+ // Specialization Type. We need to fully qualify their arguments.
+
+ const Type *TypePtr = getFullyQualifiedTemplateType(
+ Ctx, QT.getTypePtr(), WithGlobalNsPrefix);
+ QT = QualType(TypePtr, 0);
+ }
+ if (Prefix || Keyword != ETK_None) {
+ QT = Ctx.getElaboratedType(Keyword, Prefix, QT);
+ }
+ QT = Ctx.getQualifiedType(QT, PrefixQualifiers);
+ return QT;
+}
+
+inline std::string getFullyQualifiedName(QualType QT,
+ const ASTContext &Ctx,
+ const PrintingPolicy &Policy,
+ bool WithGlobalNsPrefix = false) {
+ QualType FQQT = getFullyQualifiedType(QT, Ctx, WithGlobalNsPrefix);
+ return FQQT.getAsString(Policy);
+}
+
+} // end namespace TypeName
+} // end namespace clang
diff --git a/src/qdoc/qdoc/src/qdoc/clang/AST/qt_attribution.json b/src/qdoc/qdoc/src/qdoc/clang/AST/qt_attribution.json
new file mode 100644
index 000000000..13219767d
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/clang/AST/qt_attribution.json
@@ -0,0 +1,20 @@
+[
+ {
+ "Id": "llvm_clang_typename_namespace",
+ "Name": "QualTypeNames",
+ "QDocModule": "qdoc",
+ "QtUsage": "Used to have access to a version of clang::TypeName::getFullyQualifiedName that does not expand templates to an instance.",
+ "QtParts": [
+ "tools"
+ ],
+ "Files": "QualTypeNames.h",
+
+ "Description": "A part of Clang's C++ API that deals with fully qualifying types.",
+ "Homepage": "https://github.com/llvm/llvm-project",
+ "Version": "16.0",
+ "License": "Apache License 2.0",
+ "LicenseId": "Apache-2.0 WITH LLVM-exception",
+ "LicenseFile": "LLVM_LICENSE.txt",
+ "Copyright": "Copyright assigned to LLVM project contributors."
+ }
+]
diff --git a/src/qdoc/qdoc/src/qdoc/clangcodeparser.cpp b/src/qdoc/qdoc/src/qdoc/clangcodeparser.cpp
new file mode 100644
index 000000000..a414b55a3
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/clangcodeparser.cpp
@@ -0,0 +1,1904 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "clangcodeparser.h"
+#include "cppcodeparser.h"
+
+#include "access.h"
+#include "classnode.h"
+#include "codechunk.h"
+#include "config.h"
+#include "enumnode.h"
+#include "functionnode.h"
+#include "namespacenode.h"
+#include "propertynode.h"
+#include "qdocdatabase.h"
+#include "typedefnode.h"
+#include "variablenode.h"
+#include "utilities.h"
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qelapsedtimer.h>
+#include <QtCore/qfile.h>
+#include <QtCore/qscopedvaluerollback.h>
+#include <QtCore/qtemporarydir.h>
+#include <QtCore/qtextstream.h>
+#include <QtCore/qvarlengtharray.h>
+
+#include <clang-c/Index.h>
+
+#include <clang/AST/Decl.h>
+#include <clang/AST/DeclFriend.h>
+#include <clang/AST/DeclTemplate.h>
+#include <clang/AST/Expr.h>
+#include <clang/AST/Type.h>
+#include <clang/AST/TypeLoc.h>
+#include <clang/Basic/SourceLocation.h>
+#include <clang/Frontend/ASTUnit.h>
+#include <clang/Lex/Lexer.h>
+#include <llvm/Support/Casting.h>
+
+#include "clang/AST/QualTypeNames.h"
+#include "template_declaration.h"
+
+#include <cstdio>
+
+QT_BEGIN_NAMESPACE
+
+struct CompilationIndex {
+ CXIndex index = nullptr;
+
+ operator CXIndex() {
+ return index;
+ }
+
+ ~CompilationIndex() {
+ clang_disposeIndex(index);
+ }
+};
+
+struct TranslationUnit {
+ CXTranslationUnit tu = nullptr;
+
+ operator CXTranslationUnit() {
+ return tu;
+ }
+
+ operator bool() {
+ return tu;
+ }
+
+ ~TranslationUnit() {
+ clang_disposeTranslationUnit(tu);
+ }
+};
+
+// We're printing diagnostics in ClangCodeParser::printDiagnostics,
+// so avoid clang itself printing them.
+static const auto kClangDontDisplayDiagnostics = 0;
+
+static CXTranslationUnit_Flags flags_ = static_cast<CXTranslationUnit_Flags>(0);
+
+constexpr const char fnDummyFileName[] = "/fn_dummyfile.cpp";
+
+#ifndef QT_NO_DEBUG_STREAM
+template<class T>
+static QDebug operator<<(QDebug debug, const std::vector<T> &v)
+{
+ QDebugStateSaver saver(debug);
+ debug.noquote();
+ debug.nospace();
+ const size_t size = v.size();
+ debug << "std::vector<>[" << size << "](";
+ for (size_t i = 0; i < size; ++i) {
+ if (i)
+ debug << ", ";
+ debug << v[i];
+ }
+ debug << ')';
+ return debug;
+}
+#endif // !QT_NO_DEBUG_STREAM
+
+static void printDiagnostics(const CXTranslationUnit &translationUnit)
+{
+ if (!lcQdocClang().isDebugEnabled())
+ return;
+
+ static const auto displayOptions = CXDiagnosticDisplayOptions::CXDiagnostic_DisplaySourceLocation
+ | CXDiagnosticDisplayOptions::CXDiagnostic_DisplayColumn
+ | CXDiagnosticDisplayOptions::CXDiagnostic_DisplayOption;
+
+ for (unsigned i = 0, numDiagnostics = clang_getNumDiagnostics(translationUnit); i < numDiagnostics; ++i) {
+ auto diagnostic = clang_getDiagnostic(translationUnit, i);
+ auto formattedDiagnostic = clang_formatDiagnostic(diagnostic, displayOptions);
+ qCDebug(lcQdocClang) << clang_getCString(formattedDiagnostic);
+ clang_disposeString(formattedDiagnostic);
+ clang_disposeDiagnostic(diagnostic);
+ }
+}
+
+/*!
+ * Returns the underlying Decl that \a cursor represents.
+ *
+ * This can be used to drop back down from a LibClang's CXCursor to
+ * the underlying C++ AST that Clang provides.
+ *
+ * It should be used when LibClang does not expose certain
+ * functionalities that are available in the C++ AST.
+ *
+ * The CXCursor should represent a declaration. Usages of this
+ * function on CXCursors that do not represent a declaration may
+ * produce undefined results.
+ */
+static const clang::Decl* get_cursor_declaration(CXCursor cursor) {
+ assert(clang_isDeclaration(clang_getCursorKind(cursor)));
+
+ return static_cast<const clang::Decl*>(cursor.data[0]);
+}
+
+
+/*!
+ * Returns a string representing the name of \a type as if it was
+ * referred to at the end of the translation unit that it was parsed
+ * from.
+ *
+ * For example, given the following code:
+ *
+ * \code
+ * namespace foo {
+ * template<typename T>
+ * struct Bar {
+ * using Baz = const T&;
+ *
+ * void bam(Baz);
+ * };
+ * }
+ * \endcode
+ *
+ * Given a parsed translation unit and an AST node, say \e {decl},
+ * representing the parameter declaration of the first argument of \c {bam},
+ * calling \c{get_fully_qualified_name(decl->getType(), * decl->getASTContext())}
+ * would result in the string \c {foo::Bar<T>::Baz}.
+ *
+ * This should generally be used every time the stringified
+ * representation of a type is acquired as part of parsing with Clang,
+ * so as to ensure a consistent behavior and output.
+ */
+static std::string get_fully_qualified_type_name(clang::QualType type, const clang::ASTContext& declaration_context) {
+ return clang::TypeName::getFullyQualifiedName(
+ type,
+ declaration_context,
+ declaration_context.getPrintingPolicy()
+ );
+}
+
+/*
+ * Retrieves expression as written in the original source code.
+ *
+ * declaration_context should be the ASTContext of the declaration
+ * from which the expression was extracted from.
+ *
+ * If the expression contains a leading equal sign it will be removed.
+ *
+ * Leading and trailing spaces will be similarly removed from the expression.
+ */
+static std::string get_expression_as_string(const clang::Expr* expression, const clang::ASTContext& declaration_context) {
+ QString default_value = QString::fromStdString(clang::Lexer::getSourceText(
+ clang::CharSourceRange::getTokenRange(expression->getSourceRange()),
+ declaration_context.getSourceManager(),
+ declaration_context.getLangOpts()
+ ).str());
+
+ if (default_value.startsWith("="))
+ default_value.remove(0, 1);
+
+ default_value = default_value.trimmed();
+
+ return default_value.toStdString();
+}
+
+/*
+ * Retrieves the default value of the passed in type template parameter as a string.
+ *
+ * The default value of a type template parameter is always a type,
+ * and its stringified representation will be return as the fully
+ * qualified version of the type.
+ *
+ * If the parameter has no default value the empty string will be returned.
+ */
+static std::string get_default_value_initializer_as_string(const clang::TemplateTypeParmDecl* parameter) {
+ return (parameter && parameter->hasDefaultArgument()) ?
+ get_fully_qualified_type_name(parameter->getDefaultArgument(), parameter->getASTContext()) :
+ "";
+
+}
+
+/*
+ * Retrieves the default value of the passed in non-type template parameter as a string.
+ *
+ * The default value of a non-type template parameter is an expression
+ * and its stringified representation will be return as it was written
+ * in the original code.
+ *
+ * If the parameter as no default value the empty string will be returned.
+ */
+static std::string get_default_value_initializer_as_string(const clang::NonTypeTemplateParmDecl* parameter) {
+ return (parameter && parameter->hasDefaultArgument()) ?
+ get_expression_as_string(parameter->getDefaultArgument(), parameter->getASTContext()) : "";
+
+}
+
+/*
+ * Retrieves the default value of the passed in template template parameter as a string.
+ *
+ * The default value of a template template parameter is a template
+ * name and its stringified representation will be returned as a fully
+ * qualified version of that name.
+ *
+ * If the parameter as no default value the empty string will be returned.
+ */
+static std::string get_default_value_initializer_as_string(const clang::TemplateTemplateParmDecl* parameter) {
+ std::string default_value{};
+
+ if (parameter && parameter->hasDefaultArgument()) {
+ const clang::TemplateName template_name = parameter->getDefaultArgument().getArgument().getAsTemplate();
+
+ llvm::raw_string_ostream ss{default_value};
+ template_name.print(ss, parameter->getASTContext().getPrintingPolicy(), clang::TemplateName::Qualified::Fully);
+ }
+
+ return default_value;
+}
+
+/*
+ * Retrieves the default value of the passed in function parameter as
+ * a string.
+ *
+ * The default value of a function parameter is an expression and its
+ * stringified representation will be returned as it was written in
+ * the original code.
+ *
+ * If the parameter as no default value or Clang was not able to yet
+ * parse it at this time the empty string will be returned.
+ */
+static std::string get_default_value_initializer_as_string(const clang::ParmVarDecl* parameter) {
+ if (!parameter || !parameter->hasDefaultArg() || parameter->hasUnparsedDefaultArg())
+ return "";
+
+ return get_expression_as_string(
+ parameter->hasUninstantiatedDefaultArg() ? parameter->getUninstantiatedDefaultArg() : parameter->getDefaultArg(),
+ parameter->getASTContext()
+ );
+}
+
+/*
+ * Retrieves the default value of the passed in declaration, based on
+ * its concrete type, as a string.
+ *
+ * If the declaration is a nullptr or the concrete type of the
+ * declaration is not a supported one, the returned string will be the
+ * empty string.
+ */
+static std::string get_default_value_initializer_as_string(const clang::NamedDecl* declaration) {
+ if (!declaration) return "";
+
+ if (auto type_template_parameter = llvm::dyn_cast<clang::TemplateTypeParmDecl>(declaration))
+ return get_default_value_initializer_as_string(type_template_parameter);
+
+ if (auto non_type_template_parameter = llvm::dyn_cast<clang::NonTypeTemplateParmDecl>(declaration))
+ return get_default_value_initializer_as_string(non_type_template_parameter);
+
+ if (auto template_template_parameter = llvm::dyn_cast<clang::TemplateTemplateParmDecl>(declaration)) {
+ return get_default_value_initializer_as_string(template_template_parameter);
+ }
+
+ if (auto function_parameter = llvm::dyn_cast<clang::ParmVarDecl>(declaration)) {
+ return get_default_value_initializer_as_string(function_parameter);
+ }
+
+ return "";
+}
+
+/*!
+ Call clang_visitChildren on the given cursor with the lambda as a callback
+ T can be any functor that is callable with a CXCursor parameter and returns a CXChildVisitResult
+ (in other word compatible with function<CXChildVisitResult(CXCursor)>
+ */
+template<typename T>
+bool visitChildrenLambda(CXCursor cursor, T &&lambda)
+{
+ CXCursorVisitor visitor = [](CXCursor c, CXCursor,
+ CXClientData client_data) -> CXChildVisitResult {
+ return (*static_cast<T *>(client_data))(c);
+ };
+ return clang_visitChildren(cursor, visitor, &lambda);
+}
+
+/*!
+ convert a CXString to a QString, and dispose the CXString
+ */
+static QString fromCXString(CXString &&string)
+{
+ QString ret = QString::fromUtf8(clang_getCString(string));
+ clang_disposeString(string);
+ return ret;
+}
+
+/*
+ * Returns an intermediate representation that models the the given
+ * template declaration.
+ */
+static RelaxedTemplateDeclaration get_template_declaration(const clang::TemplateDecl* template_declaration) {
+ assert(template_declaration);
+
+ RelaxedTemplateDeclaration template_declaration_ir{};
+
+ auto template_parameters = template_declaration->getTemplateParameters();
+ for (auto template_parameter : template_parameters->asArray()) {
+ auto kind{RelaxedTemplateParameter::Kind::TypeTemplateParameter};
+ std::string type{};
+
+ if (auto non_type_template_parameter = llvm::dyn_cast<clang::NonTypeTemplateParmDecl>(template_parameter)) {
+ kind = RelaxedTemplateParameter::Kind::NonTypeTemplateParameter;
+ type = get_fully_qualified_type_name(non_type_template_parameter->getType(), non_type_template_parameter->getASTContext());
+
+ // REMARK: QDoc uses this information to match a user
+ // provided documentation (for example from an "\fn"
+ // command) with a `Node` that was extracted from the
+ // code-base.
+ //
+ // Due to how QDoc obtains an AST for documentation that
+ // is provided by the user, there might be a mismatch in
+ // the type of certain non type template parameters.
+ //
+ // QDoc generally builds a fake out-of-line definition for
+ // a callable provided through an "\fn" command, when it
+ // needs to match it.
+ // In that context, certain type names may be dependent
+ // names, while they may not be when the element they
+ // represent is extracted from the code-base.
+ //
+ // This in turn makes their stringified representation
+ // different in the two contextes, as a dependent name may
+ // require the "typename" keyword to precede it.
+ //
+ // Since QDoc uses a very simplified model, and it
+ // generally doesn't need care about the exact name
+ // resolution rules for C++, since it passes by
+ // Clang-validated data, we remove the "typename" keyword
+ // if it prefixes the type representation, so that it
+ // doesn't impact the matching procedure..
+
+ // KLUDGE: Waiting for C++20 to avoid the conversion.
+ // Doesn't really impact performance in a
+ // meaningful way so it can be kept while waiting.
+ if (QString::fromStdString(type).startsWith("typename ")) type.erase(0, std::string("typename ").size());
+ }
+
+ auto template_template_parameter = llvm::dyn_cast<clang::TemplateTemplateParmDecl>(template_parameter);
+ if (template_template_parameter) kind = RelaxedTemplateParameter::Kind::TemplateTemplateParameter;
+
+ template_declaration_ir.parameters.push_back({
+ kind,
+ template_parameter->isTemplateParameterPack(),
+ {
+ type,
+ template_parameter->getNameAsString(),
+ get_default_value_initializer_as_string(template_parameter)
+ },
+ (template_template_parameter ?
+ std::optional<TemplateDeclarationStorage>(TemplateDeclarationStorage{
+ get_template_declaration(template_template_parameter).parameters
+ }) : std::nullopt)
+ });
+ }
+
+ return template_declaration_ir;
+}
+
+/*!
+ convert a CXSourceLocation to a qdoc Location
+ */
+static Location fromCXSourceLocation(CXSourceLocation location)
+{
+ unsigned int line, column;
+ CXString file;
+ clang_getPresumedLocation(location, &file, &line, &column);
+ Location l(fromCXString(std::move(file)));
+ l.setColumnNo(column);
+ l.setLineNo(line);
+ return l;
+}
+
+/*!
+ convert a CX_CXXAccessSpecifier to Node::Access
+ */
+static Access fromCX_CXXAccessSpecifier(CX_CXXAccessSpecifier spec)
+{
+ switch (spec) {
+ case CX_CXXPrivate:
+ return Access::Private;
+ case CX_CXXProtected:
+ return Access::Protected;
+ case CX_CXXPublic:
+ return Access::Public;
+ default:
+ return Access::Public;
+ }
+}
+
+/*!
+ Returns the spelling in the file for a source range
+ */
+
+struct FileCacheEntry
+{
+ QByteArray fileName;
+ QByteArray content;
+};
+
+static inline QString fromCache(const QByteArray &cache,
+ unsigned int offset1, unsigned int offset2)
+{
+ return QString::fromUtf8(cache.mid(offset1, offset2 - offset1));
+}
+
+static QString readFile(CXFile cxFile, unsigned int offset1, unsigned int offset2)
+{
+ using FileCache = QList<FileCacheEntry>;
+ static FileCache cache;
+
+ CXString cxFileName = clang_getFileName(cxFile);
+ const QByteArray fileName = clang_getCString(cxFileName);
+ clang_disposeString(cxFileName);
+
+ for (const auto &entry : std::as_const(cache)) {
+ if (fileName == entry.fileName)
+ return fromCache(entry.content, offset1, offset2);
+ }
+
+ QFile file(QString::fromUtf8(fileName));
+ if (file.open(QIODeviceBase::ReadOnly)) { // binary to match clang offsets
+ FileCacheEntry entry{fileName, file.readAll()};
+ cache.prepend(entry);
+ while (cache.size() > 5)
+ cache.removeLast();
+ return fromCache(entry.content, offset1, offset2);
+ }
+ return {};
+}
+
+static QString getSpelling(CXSourceRange range)
+{
+ auto start = clang_getRangeStart(range);
+ auto end = clang_getRangeEnd(range);
+ CXFile file1, file2;
+ unsigned int offset1, offset2;
+ clang_getFileLocation(start, &file1, nullptr, nullptr, &offset1);
+ clang_getFileLocation(end, &file2, nullptr, nullptr, &offset2);
+
+ if (file1 != file2 || offset2 <= offset1)
+ return QString();
+
+ return readFile(file1, offset1, offset2);
+}
+
+/*!
+ Returns the function name from a given cursor representing a
+ function declaration. This is usually clang_getCursorSpelling, but
+ not for the conversion function in which case it is a bit more complicated
+ */
+QString functionName(CXCursor cursor)
+{
+ if (clang_getCursorKind(cursor) == CXCursor_ConversionFunction) {
+ // For a CXCursor_ConversionFunction we don't want the spelling which would be something
+ // like "operator type-parameter-0-0" or "operator unsigned int". we want the actual name as
+ // spelled;
+ auto conversion_declaration =
+ static_cast<const clang::CXXConversionDecl*>(get_cursor_declaration(cursor));
+
+ return QLatin1String("operator ") + QString::fromStdString(get_fully_qualified_type_name(
+ conversion_declaration->getConversionType(),
+ conversion_declaration->getASTContext()
+ ));
+ }
+
+ QString name = fromCXString(clang_getCursorSpelling(cursor));
+
+ // Remove template stuff from constructor and destructor but not from operator<
+ auto ltLoc = name.indexOf('<');
+ if (ltLoc > 0 && !name.startsWith("operator<"))
+ name = name.left(ltLoc);
+ return name;
+}
+
+/*!
+ Reconstruct the qualified path name of a function that is
+ being overridden.
+ */
+static QString reconstructQualifiedPathForCursor(CXCursor cur)
+{
+ QString path;
+ auto kind = clang_getCursorKind(cur);
+ while (!clang_isInvalid(kind) && kind != CXCursor_TranslationUnit) {
+ switch (kind) {
+ case CXCursor_Namespace:
+ case CXCursor_StructDecl:
+ case CXCursor_ClassDecl:
+ case CXCursor_UnionDecl:
+ case CXCursor_ClassTemplate:
+ path.prepend("::");
+ path.prepend(fromCXString(clang_getCursorSpelling(cur)));
+ break;
+ case CXCursor_FunctionDecl:
+ case CXCursor_FunctionTemplate:
+ case CXCursor_CXXMethod:
+ case CXCursor_Constructor:
+ case CXCursor_Destructor:
+ case CXCursor_ConversionFunction:
+ path = functionName(cur);
+ break;
+ default:
+ break;
+ }
+ cur = clang_getCursorSemanticParent(cur);
+ kind = clang_getCursorKind(cur);
+ }
+ return path;
+}
+
+/*!
+ Find the node from the QDocDatabase \a qdb that corrseponds to the declaration
+ represented by the cursor \a cur, if it exists.
+ */
+static Node *findNodeForCursor(QDocDatabase *qdb, CXCursor cur)
+{
+ auto kind = clang_getCursorKind(cur);
+ if (clang_isInvalid(kind))
+ return nullptr;
+ if (kind == CXCursor_TranslationUnit)
+ return qdb->primaryTreeRoot();
+
+ Node *p = findNodeForCursor(qdb, clang_getCursorSemanticParent(cur));
+ if (p == nullptr)
+ return nullptr;
+ if (!p->isAggregate())
+ return nullptr;
+ auto parent = static_cast<Aggregate *>(p);
+
+ QString name = fromCXString(clang_getCursorSpelling(cur));
+ switch (kind) {
+ case CXCursor_Namespace:
+ return parent->findNonfunctionChild(name, &Node::isNamespace);
+ case CXCursor_StructDecl:
+ case CXCursor_ClassDecl:
+ case CXCursor_UnionDecl:
+ case CXCursor_ClassTemplate:
+ return parent->findNonfunctionChild(name, &Node::isClassNode);
+ case CXCursor_FunctionDecl:
+ case CXCursor_FunctionTemplate:
+ case CXCursor_CXXMethod:
+ case CXCursor_Constructor:
+ case CXCursor_Destructor:
+ case CXCursor_ConversionFunction: {
+ NodeVector candidates;
+ parent->findChildren(functionName(cur), candidates);
+ if (candidates.isEmpty())
+ return nullptr;
+
+ CXType funcType = clang_getCursorType(cur);
+ auto numArg = clang_getNumArgTypes(funcType);
+ bool isVariadic = clang_isFunctionTypeVariadic(funcType);
+ QVarLengthArray<QString, 20> args;
+
+ std::optional<RelaxedTemplateDeclaration> relaxed_template_declaration{std::nullopt};
+ if (kind == CXCursor_FunctionTemplate)
+ relaxed_template_declaration = get_template_declaration(
+ get_cursor_declaration(cur)->getAsFunction()->getDescribedFunctionTemplate()
+ );
+
+ for (Node *candidate : std::as_const(candidates)) {
+ if (!candidate->isFunction(Node::CPP))
+ continue;
+
+ auto fn = static_cast<FunctionNode *>(candidate);
+
+ if (!fn->templateDecl() && relaxed_template_declaration)
+ continue;
+
+ if (fn->templateDecl() && !relaxed_template_declaration)
+ continue;
+
+ if (fn->templateDecl() && relaxed_template_declaration &&
+ !are_template_declarations_substitutable(*fn->templateDecl(), *relaxed_template_declaration))
+ continue;
+
+ const Parameters &parameters = fn->parameters();
+
+ if (parameters.count() != numArg + isVariadic)
+ continue;
+
+ if (fn->isConst() != bool(clang_CXXMethod_isConst(cur)))
+ continue;
+
+ if (isVariadic && parameters.last().type() != QLatin1String("..."))
+ continue;
+
+ if (fn->isRef() != (clang_Type_getCXXRefQualifier(funcType) == CXRefQualifier_LValue))
+ continue;
+
+ if (fn->isRefRef() != (clang_Type_getCXXRefQualifier(funcType) == CXRefQualifier_RValue))
+ continue;
+
+ auto function_declaration = get_cursor_declaration(cur)->getAsFunction();
+
+ bool different = false;
+ for (int i = 0; i < numArg; ++i) {
+ CXType argType = clang_getArgType(funcType, i);
+
+ if (args.size() <= i)
+ args.append(QString::fromStdString(get_fully_qualified_type_name(
+ function_declaration->getParamDecl(i)->getOriginalType(),
+ function_declaration->getASTContext()
+ )));
+
+ QString recordedType = parameters.at(i).type();
+ QString typeSpelling = args.at(i);
+
+ different = recordedType != typeSpelling;
+
+ // Retry with a canonical type spelling
+ if (different && (argType.kind == CXType_Typedef || argType.kind == CXType_Elaborated)) {
+ QStringView canonicalType = parameters.at(i).canonicalType();
+ if (!canonicalType.isEmpty()) {
+ different = canonicalType !=
+ QString::fromStdString(get_fully_qualified_type_name(
+ function_declaration->getParamDecl(i)->getOriginalType().getCanonicalType(),
+ function_declaration->getASTContext()
+ ));
+ }
+ }
+
+ if (different) {
+ break;
+ }
+ }
+
+ if (!different)
+ return fn;
+ }
+ return nullptr;
+ }
+ case CXCursor_EnumDecl:
+ return parent->findNonfunctionChild(name, &Node::isEnumType);
+ case CXCursor_FieldDecl:
+ case CXCursor_VarDecl:
+ return parent->findNonfunctionChild(name, &Node::isVariable);
+ case CXCursor_TypedefDecl:
+ return parent->findNonfunctionChild(name, &Node::isTypedef);
+ default:
+ return nullptr;
+ }
+}
+
+static void setOverridesForFunction(FunctionNode *fn, CXCursor cursor)
+{
+ CXCursor *overridden;
+ unsigned int numOverridden = 0;
+ clang_getOverriddenCursors(cursor, &overridden, &numOverridden);
+ for (uint i = 0; i < numOverridden; ++i) {
+ QString path = reconstructQualifiedPathForCursor(overridden[i]);
+ if (!path.isEmpty()) {
+ fn->setOverride(true);
+ fn->setOverridesThis(path);
+ break;
+ }
+ }
+ clang_disposeOverriddenCursors(overridden);
+}
+
+class ClangVisitor
+{
+public:
+ ClangVisitor(QDocDatabase *qdb, const std::set<Config::HeaderFilePath> &allHeaders)
+ : qdb_(qdb), parent_(qdb->primaryTreeRoot())
+ {
+ std::transform(allHeaders.cbegin(), allHeaders.cend(), std::inserter(allHeaders_, allHeaders_.begin()),
+ [](const auto& header_file_path) { return header_file_path.filename; });
+ }
+
+ QDocDatabase *qdocDB() { return qdb_; }
+
+ CXChildVisitResult visitChildren(CXCursor cursor)
+ {
+ auto ret = visitChildrenLambda(cursor, [&](CXCursor cur) {
+ auto loc = clang_getCursorLocation(cur);
+ if (clang_Location_isFromMainFile(loc))
+ return visitSource(cur, loc);
+ CXFile file;
+ clang_getFileLocation(loc, &file, nullptr, nullptr, nullptr);
+ bool isInteresting = false;
+ auto it = isInterestingCache_.find(file);
+ if (it != isInterestingCache_.end()) {
+ isInteresting = *it;
+ } else {
+ QFileInfo fi(fromCXString(clang_getFileName(file)));
+ // Match by file name in case of PCH/installed headers
+ isInteresting = allHeaders_.find(fi.fileName()) != allHeaders_.end();
+ isInterestingCache_[file] = isInteresting;
+ }
+ if (isInteresting) {
+ return visitHeader(cur, loc);
+ }
+
+ return CXChildVisit_Continue;
+ });
+ return ret ? CXChildVisit_Break : CXChildVisit_Continue;
+ }
+
+ /*
+ Not sure about all the possibilities, when the cursor
+ location is not in the main file.
+ */
+ CXChildVisitResult visitFnArg(CXCursor cursor, Node **fnNode, bool &ignoreSignature)
+ {
+ auto ret = visitChildrenLambda(cursor, [&](CXCursor cur) {
+ auto loc = clang_getCursorLocation(cur);
+ if (clang_Location_isFromMainFile(loc))
+ return visitFnSignature(cur, loc, fnNode, ignoreSignature);
+ return CXChildVisit_Continue;
+ });
+ return ret ? CXChildVisit_Break : CXChildVisit_Continue;
+ }
+
+ Node *nodeForCommentAtLocation(CXSourceLocation loc, CXSourceLocation nextCommentLoc);
+
+private:
+ /*!
+ SimpleLoc represents a simple location in the main source file,
+ which can be used as a key in a QMap.
+ */
+ struct SimpleLoc
+ {
+ unsigned int line {}, column {};
+ friend bool operator<(const SimpleLoc &a, const SimpleLoc &b)
+ {
+ return a.line != b.line ? a.line < b.line : a.column < b.column;
+ }
+ };
+ /*!
+ \variable ClangVisitor::declMap_
+ Map of all the declarations in the source file so we can match them
+ with a documentation comment.
+ */
+ QMap<SimpleLoc, CXCursor> declMap_;
+
+ QDocDatabase *qdb_;
+ Aggregate *parent_;
+ std::set<QString> allHeaders_;
+ QHash<CXFile, bool> isInterestingCache_; // doing a canonicalFilePath is slow, so keep a cache.
+
+ /*!
+ Returns true if the symbol should be ignored for the documentation.
+ */
+ bool ignoredSymbol(const QString &symbolName)
+ {
+ if (symbolName == QLatin1String("QPrivateSignal"))
+ return true;
+ // Ignore functions generated by property macros
+ if (symbolName.startsWith("_qt_property_"))
+ return true;
+ // Ignore template argument deduction guides
+ if (symbolName.startsWith("<deduction guide"))
+ return true;
+ return false;
+ }
+
+ CXChildVisitResult visitSource(CXCursor cursor, CXSourceLocation loc);
+ CXChildVisitResult visitHeader(CXCursor cursor, CXSourceLocation loc);
+ CXChildVisitResult visitFnSignature(CXCursor cursor, CXSourceLocation loc, Node **fnNode,
+ bool &ignoreSignature);
+ void processFunction(FunctionNode *fn, CXCursor cursor);
+ bool parseProperty(const QString &spelling, const Location &loc);
+ void readParameterNamesAndAttributes(FunctionNode *fn, CXCursor cursor);
+ Aggregate *getSemanticParent(CXCursor cursor);
+};
+
+/*!
+ Visits a cursor in the .cpp file.
+ This fills the declMap_
+ */
+CXChildVisitResult ClangVisitor::visitSource(CXCursor cursor, CXSourceLocation loc)
+{
+ auto kind = clang_getCursorKind(cursor);
+ if (clang_isDeclaration(kind)) {
+ SimpleLoc l;
+ clang_getPresumedLocation(loc, nullptr, &l.line, &l.column);
+ declMap_.insert(l, cursor);
+ return CXChildVisit_Recurse;
+ }
+ return CXChildVisit_Continue;
+}
+
+/*!
+ If the semantic and lexical parent cursors of \a cursor are
+ not the same, find the Aggregate node for the semantic parent
+ cursor and return it. Otherwise return the current parent.
+ */
+Aggregate *ClangVisitor::getSemanticParent(CXCursor cursor)
+{
+ CXCursor sp = clang_getCursorSemanticParent(cursor);
+ CXCursor lp = clang_getCursorLexicalParent(cursor);
+ if (!clang_equalCursors(sp, lp) && clang_isDeclaration(clang_getCursorKind(sp))) {
+ Node *spn = findNodeForCursor(qdb_, sp);
+ if (spn && spn->isAggregate()) {
+ return static_cast<Aggregate *>(spn);
+ }
+ }
+ return parent_;
+}
+
+CXChildVisitResult ClangVisitor::visitFnSignature(CXCursor cursor, CXSourceLocation, Node **fnNode,
+ bool &ignoreSignature)
+{
+ switch (clang_getCursorKind(cursor)) {
+ case CXCursor_Namespace:
+ return CXChildVisit_Recurse;
+ case CXCursor_FunctionDecl:
+ case CXCursor_FunctionTemplate:
+ case CXCursor_CXXMethod:
+ case CXCursor_Constructor:
+ case CXCursor_Destructor:
+ case CXCursor_ConversionFunction: {
+ ignoreSignature = false;
+ if (ignoredSymbol(functionName(cursor))) {
+ *fnNode = nullptr;
+ ignoreSignature = true;
+ } else {
+ *fnNode = findNodeForCursor(qdb_, cursor);
+ if (*fnNode) {
+ if ((*fnNode)->isFunction(Node::CPP)) {
+ auto *fn = static_cast<FunctionNode *>(*fnNode);
+ readParameterNamesAndAttributes(fn, cursor);
+ }
+ } else { // Possibly an implicitly generated special member
+ QString name = functionName(cursor);
+ if (ignoredSymbol(name))
+ return CXChildVisit_Continue;
+ Aggregate *semanticParent = getSemanticParent(cursor);
+ if (semanticParent && semanticParent->isClass()) {
+ auto *candidate = new FunctionNode(nullptr, name);
+ processFunction(candidate, cursor);
+ if (!candidate->isSpecialMemberFunction()) {
+ delete candidate;
+ return CXChildVisit_Continue;
+ }
+ candidate->setDefault(true);
+ semanticParent->addChild(*fnNode = candidate);
+ }
+ }
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ return CXChildVisit_Continue;
+}
+
+CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation loc)
+{
+ auto kind = clang_getCursorKind(cursor);
+
+ switch (kind) {
+ case CXCursor_TypeAliasTemplateDecl:
+ case CXCursor_TypeAliasDecl: {
+ QString aliasDecl = getSpelling(clang_getCursorExtent(cursor)).simplified();
+ QStringList typeAlias = aliasDecl.split(QLatin1Char('='));
+ if (typeAlias.size() == 2) {
+ typeAlias[0] = typeAlias[0].trimmed();
+ const QLatin1String usingString("using ");
+ qsizetype usingPos = typeAlias[0].indexOf(usingString);
+ if (usingPos != -1) {
+ typeAlias[0].remove(0, usingPos + usingString.size());
+ typeAlias[0] = typeAlias[0].split(QLatin1Char(' ')).first();
+ typeAlias[1] = typeAlias[1].trimmed();
+ auto *ta = new TypeAliasNode(parent_, typeAlias[0], typeAlias[1]);
+ ta->setAccess(fromCX_CXXAccessSpecifier(clang_getCXXAccessSpecifier(cursor)));
+ ta->setLocation(fromCXSourceLocation(clang_getCursorLocation(cursor)));
+
+ if (kind == CXCursor_TypeAliasTemplateDecl) {
+ auto template_decl = llvm::dyn_cast<clang::TemplateDecl>(get_cursor_declaration(cursor));
+ ta->setTemplateDecl(get_template_declaration(template_decl));
+ }
+ }
+ }
+ return CXChildVisit_Continue;
+ }
+ case CXCursor_StructDecl:
+ case CXCursor_UnionDecl:
+ if (fromCXString(clang_getCursorSpelling(cursor)).isEmpty()) // anonymous struct or union
+ return CXChildVisit_Continue;
+ Q_FALLTHROUGH();
+ case CXCursor_ClassTemplate:
+ Q_FALLTHROUGH();
+ case CXCursor_ClassDecl: {
+ if (!clang_isCursorDefinition(cursor))
+ return CXChildVisit_Continue;
+
+ if (findNodeForCursor(qdb_, cursor)) // Was already parsed, probably in another TU
+ return CXChildVisit_Continue;
+
+ QString className = fromCXString(clang_getCursorSpelling(cursor));
+
+ Aggregate *semanticParent = getSemanticParent(cursor);
+ if (semanticParent && semanticParent->findNonfunctionChild(className, &Node::isClassNode)) {
+ return CXChildVisit_Continue;
+ }
+
+ CXCursorKind actualKind = (kind == CXCursor_ClassTemplate) ?
+ clang_getTemplateCursorKind(cursor) : kind;
+
+ Node::NodeType type = Node::Class;
+ if (actualKind == CXCursor_StructDecl)
+ type = Node::Struct;
+ else if (actualKind == CXCursor_UnionDecl)
+ type = Node::Union;
+
+ auto *classe = new ClassNode(type, semanticParent, className);
+ classe->setAccess(fromCX_CXXAccessSpecifier(clang_getCXXAccessSpecifier(cursor)));
+ classe->setLocation(fromCXSourceLocation(clang_getCursorLocation(cursor)));
+
+ if (kind == CXCursor_ClassTemplate) {
+ auto template_declaration = llvm::dyn_cast<clang::TemplateDecl>(get_cursor_declaration(cursor));
+ classe->setTemplateDecl(get_template_declaration(template_declaration));
+ }
+
+ QScopedValueRollback<Aggregate *> setParent(parent_, classe);
+ return visitChildren(cursor);
+ }
+ case CXCursor_CXXBaseSpecifier: {
+ if (!parent_->isClassNode())
+ return CXChildVisit_Continue;
+ auto access = fromCX_CXXAccessSpecifier(clang_getCXXAccessSpecifier(cursor));
+ auto type = clang_getCursorType(cursor);
+ auto baseCursor = clang_getTypeDeclaration(type);
+ auto baseNode = findNodeForCursor(qdb_, baseCursor);
+ auto classe = static_cast<ClassNode *>(parent_);
+ if (baseNode == nullptr || !baseNode->isClassNode()) {
+ QString bcName = reconstructQualifiedPathForCursor(baseCursor);
+ classe->addUnresolvedBaseClass(access,
+ bcName.split(QLatin1String("::"), Qt::SkipEmptyParts));
+ return CXChildVisit_Continue;
+ }
+ auto baseClasse = static_cast<ClassNode *>(baseNode);
+ classe->addResolvedBaseClass(access, baseClasse);
+ return CXChildVisit_Continue;
+ }
+ case CXCursor_Namespace: {
+ QString namespaceName = fromCXString(clang_getCursorDisplayName(cursor));
+ NamespaceNode *ns = nullptr;
+ if (parent_)
+ ns = static_cast<NamespaceNode *>(
+ parent_->findNonfunctionChild(namespaceName, &Node::isNamespace));
+ if (!ns) {
+ ns = new NamespaceNode(parent_, namespaceName);
+ ns->setAccess(Access::Public);
+ ns->setLocation(fromCXSourceLocation(clang_getCursorLocation(cursor)));
+ }
+ QScopedValueRollback<Aggregate *> setParent(parent_, ns);
+ return visitChildren(cursor);
+ }
+ case CXCursor_FunctionTemplate:
+ Q_FALLTHROUGH();
+ case CXCursor_FunctionDecl:
+ case CXCursor_CXXMethod:
+ case CXCursor_Constructor:
+ case CXCursor_Destructor:
+ case CXCursor_ConversionFunction: {
+ if (findNodeForCursor(qdb_, cursor)) // Was already parsed, probably in another TU
+ return CXChildVisit_Continue;
+ QString name = functionName(cursor);
+ if (ignoredSymbol(name))
+ return CXChildVisit_Continue;
+ // constexpr constructors generate also a global instance; ignore
+ if (kind == CXCursor_Constructor && parent_ == qdb_->primaryTreeRoot())
+ return CXChildVisit_Continue;
+
+ auto *fn = new FunctionNode(parent_, name);
+ CXSourceRange range = clang_Cursor_getCommentRange(cursor);
+ if (!clang_Range_isNull(range)) {
+ QString comment = getSpelling(range);
+ if (comment.startsWith("//!")) {
+ qsizetype tag = comment.indexOf(QChar('['));
+ if (tag > 0) {
+ qsizetype end = comment.indexOf(QChar(']'), ++tag);
+ if (end > 0)
+ fn->setTag(comment.mid(tag, end - tag));
+ }
+ }
+ }
+
+ processFunction(fn, cursor);
+
+ if (kind == CXCursor_FunctionTemplate) {
+ auto template_declaration = get_cursor_declaration(cursor)->getAsFunction()->getDescribedFunctionTemplate();
+ fn->setTemplateDecl(get_template_declaration(template_declaration));
+ }
+
+ return CXChildVisit_Continue;
+ }
+#if CINDEX_VERSION >= 36
+ case CXCursor_FriendDecl: {
+ return visitChildren(cursor);
+ }
+#endif
+ case CXCursor_EnumDecl: {
+ auto *en = static_cast<EnumNode *>(findNodeForCursor(qdb_, cursor));
+ if (en && en->items().size())
+ return CXChildVisit_Continue; // Was already parsed, probably in another TU
+
+ QString enumTypeName = fromCXString(clang_getCursorSpelling(cursor));
+
+ if (clang_Cursor_isAnonymous(cursor)) {
+ enumTypeName = "anonymous";
+ if (parent_ && (parent_->isClassNode() || parent_->isNamespace())) {
+ Node *n = parent_->findNonfunctionChild(enumTypeName, &Node::isEnumType);
+ if (n)
+ en = static_cast<EnumNode *>(n);
+ }
+ }
+ if (!en) {
+ en = new EnumNode(parent_, enumTypeName, clang_EnumDecl_isScoped(cursor));
+ en->setAccess(fromCX_CXXAccessSpecifier(clang_getCXXAccessSpecifier(cursor)));
+ en->setLocation(fromCXSourceLocation(clang_getCursorLocation(cursor)));
+ }
+
+ // Enum values
+ visitChildrenLambda(cursor, [&](CXCursor cur) {
+ if (clang_getCursorKind(cur) != CXCursor_EnumConstantDecl)
+ return CXChildVisit_Continue;
+
+ QString value;
+ visitChildrenLambda(cur, [&](CXCursor cur) {
+ if (clang_isExpression(clang_getCursorKind(cur))) {
+ value = getSpelling(clang_getCursorExtent(cur));
+ return CXChildVisit_Break;
+ }
+ return CXChildVisit_Continue;
+ });
+ if (value.isEmpty()) {
+ QLatin1String hex("0x");
+ if (!en->items().isEmpty() && en->items().last().value().startsWith(hex)) {
+ value = hex + QString::number(clang_getEnumConstantDeclValue(cur), 16);
+ } else {
+ value = QString::number(clang_getEnumConstantDeclValue(cur));
+ }
+ }
+
+ en->addItem(EnumItem(fromCXString(clang_getCursorSpelling(cur)), value));
+ return CXChildVisit_Continue;
+ });
+ return CXChildVisit_Continue;
+ }
+ case CXCursor_FieldDecl:
+ case CXCursor_VarDecl: {
+ if (findNodeForCursor(qdb_, cursor)) // Was already parsed, probably in another TU
+ return CXChildVisit_Continue;
+
+ auto value_declaration =
+ llvm::dyn_cast<clang::ValueDecl>(get_cursor_declaration(cursor));
+ assert(value_declaration);
+
+ auto access = fromCX_CXXAccessSpecifier(clang_getCXXAccessSpecifier(cursor));
+ auto var = new VariableNode(parent_, fromCXString(clang_getCursorSpelling(cursor)));
+
+ var->setAccess(access);
+ var->setLocation(fromCXSourceLocation(clang_getCursorLocation(cursor)));
+ var->setLeftType(QString::fromStdString(get_fully_qualified_type_name(
+ value_declaration->getType(),
+ value_declaration->getASTContext()
+ )));
+ var->setStatic(kind == CXCursor_VarDecl && parent_->isClassNode());
+
+ return CXChildVisit_Continue;
+ }
+ case CXCursor_TypedefDecl: {
+ if (findNodeForCursor(qdb_, cursor)) // Was already parsed, probably in another TU
+ return CXChildVisit_Continue;
+ auto *td = new TypedefNode(parent_, fromCXString(clang_getCursorSpelling(cursor)));
+ td->setAccess(fromCX_CXXAccessSpecifier(clang_getCXXAccessSpecifier(cursor)));
+ td->setLocation(fromCXSourceLocation(clang_getCursorLocation(cursor)));
+ // Search to see if this is a Q_DECLARE_FLAGS (if the type is QFlags<ENUM>)
+ visitChildrenLambda(cursor, [&](CXCursor cur) {
+ if (clang_getCursorKind(cur) != CXCursor_TemplateRef
+ || fromCXString(clang_getCursorSpelling(cur)) != QLatin1String("QFlags"))
+ return CXChildVisit_Continue;
+ // Found QFlags<XXX>
+ visitChildrenLambda(cursor, [&](CXCursor cur) {
+ if (clang_getCursorKind(cur) != CXCursor_TypeRef)
+ return CXChildVisit_Continue;
+ auto *en =
+ findNodeForCursor(qdb_, clang_getTypeDeclaration(clang_getCursorType(cur)));
+ if (en && en->isEnumType())
+ static_cast<EnumNode *>(en)->setFlagsType(td);
+ return CXChildVisit_Break;
+ });
+ return CXChildVisit_Break;
+ });
+ return CXChildVisit_Continue;
+ }
+ default:
+ if (clang_isDeclaration(kind) && parent_->isClassNode()) {
+ // may be a property macro or a static_assert
+ // which is not exposed from the clang API
+ parseProperty(getSpelling(clang_getCursorExtent(cursor)),
+ fromCXSourceLocation(loc));
+ }
+ return CXChildVisit_Continue;
+ }
+}
+
+void ClangVisitor::readParameterNamesAndAttributes(FunctionNode *fn, CXCursor cursor)
+{
+ Parameters &parameters = fn->parameters();
+ // Visit the parameters and attributes
+ int i = 0;
+ visitChildrenLambda(cursor, [&](CXCursor cur) {
+ auto kind = clang_getCursorKind(cur);
+ if (kind == CXCursor_AnnotateAttr) {
+ QString annotation = fromCXString(clang_getCursorDisplayName(cur));
+ if (annotation == QLatin1String("qt_slot")) {
+ fn->setMetaness(FunctionNode::Slot);
+ } else if (annotation == QLatin1String("qt_signal")) {
+ fn->setMetaness(FunctionNode::Signal);
+ }
+ if (annotation == QLatin1String("qt_invokable"))
+ fn->setInvokable(true);
+ } else if (kind == CXCursor_CXXOverrideAttr) {
+ fn->setOverride(true);
+ } else if (kind == CXCursor_ParmDecl) {
+ if (i >= parameters.count())
+ return CXChildVisit_Break; // Attributes comes before parameters so we can break.
+
+ if (QString name = fromCXString(clang_getCursorSpelling(cur)); !name.isEmpty())
+ parameters[i].setName(name);
+
+ const clang::ParmVarDecl* parameter_declaration = llvm::dyn_cast<const clang::ParmVarDecl>(get_cursor_declaration(cur));
+ Q_ASSERT(parameter_declaration);
+
+ std::string default_value = get_default_value_initializer_as_string(parameter_declaration);
+
+ if (!default_value.empty())
+ parameters[i].setDefaultValue(QString::fromStdString(default_value));
+
+ ++i;
+ }
+ return CXChildVisit_Continue;
+ });
+}
+
+void ClangVisitor::processFunction(FunctionNode *fn, CXCursor cursor)
+{
+ CXCursorKind kind = clang_getCursorKind(cursor);
+ CXType funcType = clang_getCursorType(cursor);
+ fn->setAccess(fromCX_CXXAccessSpecifier(clang_getCXXAccessSpecifier(cursor)));
+ fn->setLocation(fromCXSourceLocation(clang_getCursorLocation(cursor)));
+ fn->setStatic(clang_CXXMethod_isStatic(cursor));
+ fn->setConst(clang_CXXMethod_isConst(cursor));
+ fn->setVirtualness(!clang_CXXMethod_isVirtual(cursor)
+ ? FunctionNode::NonVirtual
+ : clang_CXXMethod_isPureVirtual(cursor)
+ ? FunctionNode::PureVirtual
+ : FunctionNode::NormalVirtual);
+
+ // REMARK: We assume that the following operations and casts are
+ // generally safe.
+ // Callers of those methods will generally check at the LibClang
+ // level the kind of cursor we are dealing with and will pass on
+ // only valid cursors that are of a function kind and that are at
+ // least a declaration.
+ //
+ // Failure to do so implies a bug in the call chain and should be
+ // dealt with as such.
+ const clang::Decl* declaration = get_cursor_declaration(cursor);
+
+ assert(declaration);
+
+ const clang::FunctionDecl* function_declaration = declaration->getAsFunction();
+
+ if (kind == CXCursor_Constructor
+ // a constructor template is classified as CXCursor_FunctionTemplate
+ || (kind == CXCursor_FunctionTemplate && fn->name() == parent_->name()))
+ fn->setMetaness(FunctionNode::Ctor);
+ else if (kind == CXCursor_Destructor)
+ fn->setMetaness(FunctionNode::Dtor);
+ else
+ fn->setReturnType(QString::fromStdString(get_fully_qualified_type_name(
+ function_declaration->getReturnType(),
+ function_declaration->getASTContext()
+ )));
+
+ const clang::CXXConstructorDecl* constructor_declaration = llvm::dyn_cast<const clang::CXXConstructorDecl>(function_declaration);
+
+ if (constructor_declaration && constructor_declaration->isCopyConstructor()) fn->setMetaness(FunctionNode::CCtor);
+ else if (constructor_declaration && constructor_declaration->isMoveConstructor()) fn->setMetaness(FunctionNode::MCtor);
+
+ const clang::CXXConversionDecl* conversion_declaration = llvm::dyn_cast<const clang::CXXConversionDecl>(function_declaration);
+
+ if (function_declaration->isConstexpr()) fn->markConstexpr();
+ if (
+ (constructor_declaration && constructor_declaration->isExplicit()) ||
+ (conversion_declaration && conversion_declaration->isExplicit())
+ ) fn->markExplicit();
+
+ const clang::CXXMethodDecl* method_declaration = llvm::dyn_cast<const clang::CXXMethodDecl>(function_declaration);
+
+ if (method_declaration && method_declaration->isCopyAssignmentOperator()) fn->setMetaness(FunctionNode::CAssign);
+ else if (method_declaration && method_declaration->isMoveAssignmentOperator()) fn->setMetaness(FunctionNode::MAssign);
+
+ const clang::FunctionType* function_type = function_declaration->getFunctionType();
+ const clang::FunctionProtoType* function_prototype = static_cast<const clang::FunctionProtoType*>(function_type);
+
+ if (function_prototype) {
+ clang::FunctionProtoType::ExceptionSpecInfo exception_specification = function_prototype->getExceptionSpecInfo();
+
+ if (exception_specification.Type != clang::ExceptionSpecificationType::EST_None) {
+ const std::string exception_specification_spelling =
+ exception_specification.NoexceptExpr ? get_expression_as_string(
+ exception_specification.NoexceptExpr,
+ function_declaration->getASTContext()
+ ) : "";
+
+ if (exception_specification_spelling != "false")
+ fn->markNoexcept(QString::fromStdString(exception_specification_spelling));
+ }
+ }
+
+ CXRefQualifierKind refQualKind = clang_Type_getCXXRefQualifier(funcType);
+ if (refQualKind == CXRefQualifier_LValue)
+ fn->setRef(true);
+ else if (refQualKind == CXRefQualifier_RValue)
+ fn->setRefRef(true);
+ // For virtual functions, determine what it overrides
+ // (except for destructor for which we do not want to classify as overridden)
+ if (!fn->isNonvirtual() && kind != CXCursor_Destructor)
+ setOverridesForFunction(fn, cursor);
+
+ Parameters &parameters = fn->parameters();
+ parameters.clear();
+ parameters.reserve(function_declaration->getNumParams());
+
+ for (clang::ParmVarDecl* const parameter_declaration : function_declaration->parameters()) {
+ clang::QualType parameter_type = parameter_declaration->getOriginalType();
+
+ parameters.append(QString::fromStdString(get_fully_qualified_type_name(
+ parameter_type,
+ parameter_declaration->getASTContext()
+ )));
+
+ if (!parameter_type.isCanonical())
+ parameters.last().setCanonicalType(QString::fromStdString(get_fully_qualified_type_name(
+ parameter_type.getCanonicalType(),
+ parameter_declaration->getASTContext()
+ )));
+ }
+
+ if (parameters.count() > 0) {
+ if (parameters.last().type().endsWith(QLatin1String("QPrivateSignal"))) {
+ parameters.pop_back(); // remove the QPrivateSignal argument
+ parameters.setPrivateSignal();
+ }
+ }
+
+ if (clang_isFunctionTypeVariadic(funcType))
+ parameters.append(QStringLiteral("..."));
+ readParameterNamesAndAttributes(fn, cursor);
+
+ if (declaration->getFriendObjectKind() != clang::Decl::FOK_None)
+ fn->setRelatedNonmember(true);
+}
+
+bool ClangVisitor::parseProperty(const QString &spelling, const Location &loc)
+{
+ if (!spelling.startsWith(QLatin1String("Q_PROPERTY"))
+ && !spelling.startsWith(QLatin1String("QDOC_PROPERTY"))
+ && !spelling.startsWith(QLatin1String("Q_OVERRIDE")))
+ return false;
+
+ qsizetype lpIdx = spelling.indexOf(QChar('('));
+ qsizetype rpIdx = spelling.lastIndexOf(QChar(')'));
+ if (lpIdx <= 0 || rpIdx <= lpIdx)
+ return false;
+
+ QString signature = spelling.mid(lpIdx + 1, rpIdx - lpIdx - 1);
+ signature = signature.simplified();
+ QStringList parts = signature.split(QChar(' '), Qt::SkipEmptyParts);
+
+ static const QStringList attrs =
+ QStringList() << "READ" << "MEMBER" << "WRITE"
+ << "NOTIFY" << "CONSTANT" << "FINAL"
+ << "REQUIRED" << "BINDABLE" << "DESIGNABLE"
+ << "RESET" << "REVISION" << "SCRIPTABLE"
+ << "STORED" << "USER";
+
+ // Find the location of the first attribute. All preceding parts
+ // represent the property type + name.
+ auto it = std::find_if(parts.cbegin(), parts.cend(),
+ [](const QString &attr) -> bool {
+ return attrs.contains(attr);
+ });
+
+ if (it == parts.cend() || std::distance(parts.cbegin(), it) < 2)
+ return false;
+
+ QStringList typeParts;
+ std::copy(parts.cbegin(), it, std::back_inserter(typeParts));
+ parts.erase(parts.cbegin(), it);
+ QString name = typeParts.takeLast();
+
+ // Move the pointer operator(s) from name to type
+ while (!name.isEmpty() && name.front() == QChar('*')) {
+ typeParts.last().push_back(name.front());
+ name.removeFirst();
+ }
+
+ // Need at least READ or MEMBER + getter/member name
+ if (parts.size() < 2 || name.isEmpty())
+ return false;
+
+ auto *property = new PropertyNode(parent_, name);
+ property->setAccess(Access::Public);
+ property->setLocation(loc);
+ property->setDataType(typeParts.join(QChar(' ')));
+
+ int i = 0;
+ while (i < parts.size()) {
+ const QString &key = parts.at(i++);
+ // Keywords with no associated values
+ if (key == "CONSTANT") {
+ property->setConstant();
+ } else if (key == "REQUIRED") {
+ property->setRequired();
+ }
+ if (i < parts.size()) {
+ QString value = parts.at(i++);
+ if (key == "READ") {
+ qdb_->addPropertyFunction(property, value, PropertyNode::FunctionRole::Getter);
+ } else if (key == "WRITE") {
+ qdb_->addPropertyFunction(property, value, PropertyNode::FunctionRole::Setter);
+ property->setWritable(true);
+ } else if (key == "MEMBER") {
+ property->setWritable(true);
+ } else if (key == "STORED") {
+ property->setStored(value.toLower() == "true");
+ } else if (key == "BINDABLE") {
+ property->setPropertyType(PropertyNode::PropertyType::BindableProperty);
+ qdb_->addPropertyFunction(property, value, PropertyNode::FunctionRole::Bindable);
+ } else if (key == "RESET") {
+ qdb_->addPropertyFunction(property, value, PropertyNode::FunctionRole::Resetter);
+ } else if (key == "NOTIFY") {
+ qdb_->addPropertyFunction(property, value, PropertyNode::FunctionRole::Notifier);
+ }
+ }
+ }
+ return true;
+}
+
+/*!
+ Given a comment at location \a loc, return a Node for this comment
+ \a nextCommentLoc is the location of the next comment so the declaration
+ must be inbetween.
+ Returns nullptr if no suitable declaration was found between the two comments.
+ */
+Node *ClangVisitor::nodeForCommentAtLocation(CXSourceLocation loc, CXSourceLocation nextCommentLoc)
+{
+ ClangVisitor::SimpleLoc docloc;
+ clang_getPresumedLocation(loc, nullptr, &docloc.line, &docloc.column);
+ auto decl_it = declMap_.upperBound(docloc);
+ if (decl_it == declMap_.end())
+ return nullptr;
+
+ unsigned int declLine = decl_it.key().line;
+ unsigned int nextCommentLine;
+ clang_getPresumedLocation(nextCommentLoc, nullptr, &nextCommentLine, nullptr);
+ if (nextCommentLine < declLine)
+ return nullptr; // there is another comment before the declaration, ignore it.
+
+ // make sure the previous decl was finished.
+ if (decl_it != declMap_.begin()) {
+ CXSourceLocation prevDeclEnd = clang_getRangeEnd(clang_getCursorExtent(*(std::prev(decl_it))));
+ unsigned int prevDeclLine;
+ clang_getPresumedLocation(prevDeclEnd, nullptr, &prevDeclLine, nullptr);
+ if (prevDeclLine >= docloc.line) {
+ // The previous declaration was still going. This is only valid if the previous
+ // declaration is a parent of the next declaration.
+ auto parent = clang_getCursorLexicalParent(*decl_it);
+ if (!clang_equalCursors(parent, *(std::prev(decl_it))))
+ return nullptr;
+ }
+ }
+ auto *node = findNodeForCursor(qdb_, *decl_it);
+ // borrow the parameter name from the definition
+ if (node && node->isFunction(Node::CPP))
+ readParameterNamesAndAttributes(static_cast<FunctionNode *>(node), *decl_it);
+ return node;
+}
+
+ClangCodeParser::ClangCodeParser(
+ QDocDatabase* qdb,
+ Config& config,
+ const std::vector<QByteArray>& include_paths,
+ const QList<QByteArray>& defines,
+ std::optional<std::reference_wrapper<const PCHFile>> pch
+) : m_qdb{qdb},
+ m_includePaths{include_paths},
+ m_defines{defines},
+ m_pch{pch}
+{
+ m_allHeaders = config.getHeaderFiles();
+}
+
+static const char *defaultArgs_[] = {
+/*
+ https://bugreports.qt.io/browse/QTBUG-94365
+ An unidentified bug in Clang 15.x causes parsing failures due to errors in
+ the AST. This replicates only with C++20 support enabled - avoid the issue
+ by using C++17 with Clang 15.
+ */
+#if LIBCLANG_VERSION_MAJOR == 15
+ "-std=c++17",
+#else
+ "-std=c++20",
+#endif
+#ifndef Q_OS_WIN
+ "-fPIC",
+#else
+ "-fms-compatibility-version=19",
+#endif
+ "-DQ_QDOC",
+ "-DQ_CLANG_QDOC",
+ "-DQT_DISABLE_DEPRECATED_UP_TO=0",
+ "-DQT_ANNOTATE_CLASS(type,...)=static_assert(sizeof(#__VA_ARGS__),#type);",
+ "-DQT_ANNOTATE_CLASS2(type,a1,a2)=static_assert(sizeof(#a1,#a2),#type);",
+ "-DQT_ANNOTATE_FUNCTION(a)=__attribute__((annotate(#a)))",
+ "-DQT_ANNOTATE_ACCESS_SPECIFIER(a)=__attribute__((annotate(#a)))",
+ "-Wno-constant-logical-operand",
+ "-Wno-macro-redefined",
+ "-Wno-nullability-completeness",
+ "-fvisibility=default",
+ "-ferror-limit=0",
+ ("-I" CLANG_RESOURCE_DIR)
+};
+
+/*!
+ Load the default arguments and the defines into \a args.
+ Clear \a args first.
+ */
+void getDefaultArgs(const QList<QByteArray>& defines, std::vector<const char*>& args)
+{
+ args.clear();
+ args.insert(args.begin(), std::begin(defaultArgs_), std::end(defaultArgs_));
+
+ // Add the defines from the qdocconf file.
+ for (const auto &p : std::as_const(defines))
+ args.push_back(p.constData());
+}
+
+static QList<QByteArray> includePathsFromHeaders(const std::set<Config::HeaderFilePath> &allHeaders)
+{
+ QList<QByteArray> result;
+ for (const auto& [header_path, _] : allHeaders) {
+ const QByteArray path = "-I" + header_path.toLatin1();
+ const QByteArray parent =
+ "-I" + QDir::cleanPath(header_path + QLatin1String("/../")).toLatin1();
+ }
+
+ return result;
+}
+
+/*!
+ Load the include paths into \a moreArgs. If no include paths
+ were provided, try to guess reasonable include paths.
+ */
+void getMoreArgs(
+ const std::vector<QByteArray>& include_paths,
+ const std::set<Config::HeaderFilePath>& all_headers,
+ std::vector<const char*>& args
+) {
+ if (include_paths.empty()) {
+ /*
+ The include paths provided are inadequate. Make a list
+ of reasonable places to look for include files and use
+ that list instead.
+ */
+ qCWarning(lcQdoc) << "No include paths passed to qdoc; guessing reasonable include paths";
+
+ QString basicIncludeDir = QDir::cleanPath(QString(Config::installDir + "/../include"));
+ args.emplace_back(QByteArray("-I" + basicIncludeDir.toLatin1()).constData());
+
+ auto include_paths_from_headers = includePathsFromHeaders(all_headers);
+ args.insert(args.end(), include_paths_from_headers.begin(), include_paths_from_headers.end());
+ } else {
+ std::copy(include_paths.begin(), include_paths.end(), std::back_inserter(args));
+ }
+}
+
+/*!
+ Building the PCH must be possible when there are no .cpp
+ files, so it is moved here to its own member function, and
+ it is called after the list of header files is complete.
+ */
+std::optional<PCHFile> buildPCH(
+ QDocDatabase* qdb,
+ QString module_header,
+ const std::set<Config::HeaderFilePath>& all_headers,
+ const std::vector<QByteArray>& include_paths,
+ const QList<QByteArray>& defines
+) {
+ static std::vector<const char*> arguments{};
+
+ if (module_header.isEmpty()) return std::nullopt;
+
+ getDefaultArgs(defines, arguments);
+ getMoreArgs(include_paths, all_headers, arguments);
+
+ flags_ = static_cast<CXTranslationUnit_Flags>(CXTranslationUnit_Incomplete
+ | CXTranslationUnit_SkipFunctionBodies
+ | CXTranslationUnit_KeepGoing);
+
+ CompilationIndex index{ clang_createIndex(1, kClangDontDisplayDiagnostics) };
+
+ QTemporaryDir pch_directory{QDir::tempPath() + QLatin1String("/qdoc_pch")};
+ if (!pch_directory.isValid()) return std::nullopt;
+
+ const QByteArray module = module_header.toUtf8();
+ QByteArray header;
+
+ qCDebug(lcQdoc) << "Build and visit PCH for" << module_header;
+ // A predicate for std::find_if() to locate a path to the module's header
+ // (e.g. QtGui/QtGui) to be used as pre-compiled header
+ struct FindPredicate
+ {
+ enum SearchType { Any, Module };
+ QByteArray &candidate_;
+ const QByteArray &module_;
+ SearchType type_;
+ FindPredicate(QByteArray &candidate, const QByteArray &module,
+ SearchType type = Any)
+ : candidate_(candidate), module_(module), type_(type)
+ {
+ }
+
+ bool operator()(const QByteArray &p) const
+ {
+ if (type_ != Any && !p.endsWith(module_))
+ return false;
+ candidate_ = p + "/";
+ candidate_.append(module_);
+ if (p.startsWith("-I"))
+ candidate_ = candidate_.mid(2);
+ return QFile::exists(QString::fromUtf8(candidate_));
+ }
+ };
+
+ // First, search for an include path that contains the module name, then any path
+ QByteArray candidate;
+ auto it = std::find_if(include_paths.begin(), include_paths.end(),
+ FindPredicate(candidate, module, FindPredicate::Module));
+ if (it == include_paths.end())
+ it = std::find_if(include_paths.begin(), include_paths.end(),
+ FindPredicate(candidate, module, FindPredicate::Any));
+ if (it != include_paths.end())
+ header = candidate;
+
+ if (header.isEmpty()) {
+ qWarning() << "(qdoc) Could not find the module header in include paths for module"
+ << module << " (include paths: " << include_paths << ")";
+ qWarning() << " Artificial module header built from header dirs in qdocconf "
+ "file";
+ }
+ arguments.push_back("-xc++");
+
+ TranslationUnit tu;
+
+ QString tmpHeader = pch_directory.path() + "/" + module;
+ if (QFile tmpHeaderFile(tmpHeader); tmpHeaderFile.open(QIODevice::Text | QIODevice::WriteOnly)) {
+ QTextStream out(&tmpHeaderFile);
+ if (header.isEmpty()) {
+ for (const auto& [header_path, header_name] : all_headers) {
+ if (!header_name.endsWith(QLatin1String("_p.h"))
+ && !header_name.startsWith(QLatin1String("moc_"))) {
+ QString line = QLatin1String("#include \"") + header_path
+ + QLatin1String("/") + header_name + QLatin1String("\"");
+ out << line << "\n";
+
+ }
+ }
+ } else {
+ QFileInfo headerFile(header);
+ if (!headerFile.exists()) {
+ qWarning() << "Could not find module header file" << header;
+ return std::nullopt;
+ }
+ out << QLatin1String("#include \"") + header + QLatin1String("\"");
+ }
+ }
+
+ CXErrorCode err =
+ clang_parseTranslationUnit2(index, tmpHeader.toLatin1().data(), arguments.data(),
+ static_cast<int>(arguments.size()), nullptr, 0,
+ flags_ | CXTranslationUnit_ForSerialization, &tu.tu);
+ qCDebug(lcQdoc) << __FUNCTION__ << "clang_parseTranslationUnit2(" << tmpHeader << arguments
+ << ") returns" << err;
+
+ printDiagnostics(tu);
+
+ if (err || !tu) {
+ qCCritical(lcQdoc) << "Could not create PCH file for " << module_header;
+ return std::nullopt;
+ }
+
+ QByteArray pch_name = pch_directory.path().toUtf8() + "/" + module + ".pch";
+ auto error = clang_saveTranslationUnit(tu, pch_name.constData(),
+ clang_defaultSaveOptions(tu));
+ if (error) {
+ qCCritical(lcQdoc) << "Could not save PCH file for" << module_header;
+ return std::nullopt;
+ }
+
+ // Visit the header now, as token from pre-compiled header won't be visited
+ // later
+ CXCursor cur = clang_getTranslationUnitCursor(tu);
+ ClangVisitor visitor(qdb, all_headers);
+ visitor.visitChildren(cur);
+ qCDebug(lcQdoc) << "PCH built and visited for" << module_header;
+
+ return std::make_optional(PCHFile{std::move(pch_directory), pch_name});
+}
+
+static float getUnpatchedVersion(QString t)
+{
+ if (t.count(QChar('.')) > 1)
+ t.truncate(t.lastIndexOf(QChar('.')));
+ return t.toFloat();
+}
+
+/*!
+ Get ready to parse the C++ cpp file identified by \a filePath
+ and add its parsed contents to the database. \a location is
+ used for reporting errors.
+
+ Call matchDocsAndStuff() to do all the parsing and tree building.
+ */
+ParsedCppFileIR ClangCodeParser::parse_cpp_file(const QString &filePath)
+{
+ flags_ = static_cast<CXTranslationUnit_Flags>(CXTranslationUnit_Incomplete
+ | CXTranslationUnit_SkipFunctionBodies
+ | CXTranslationUnit_KeepGoing);
+
+ CompilationIndex index{ clang_createIndex(1, kClangDontDisplayDiagnostics) };
+
+ getDefaultArgs(m_defines, m_args);
+ if (m_pch && !filePath.endsWith(".mm")) {
+ m_args.push_back("-w");
+ m_args.push_back("-include-pch");
+ m_args.push_back((*m_pch).get().name.constData());
+ }
+ getMoreArgs(m_includePaths, m_allHeaders, m_args);
+
+ TranslationUnit tu;
+ CXErrorCode err =
+ clang_parseTranslationUnit2(index, filePath.toLocal8Bit(), m_args.data(),
+ static_cast<int>(m_args.size()), nullptr, 0, flags_, &tu.tu);
+ qCDebug(lcQdoc) << __FUNCTION__ << "clang_parseTranslationUnit2(" << filePath << m_args
+ << ") returns" << err;
+ printDiagnostics(tu);
+
+ if (err || !tu) {
+ qWarning() << "(qdoc) Could not parse source file" << filePath << " error code:" << err;
+ return {};
+ }
+
+ ParsedCppFileIR parse_result{};
+
+ CXCursor tuCur = clang_getTranslationUnitCursor(tu);
+ ClangVisitor visitor(m_qdb, m_allHeaders);
+ visitor.visitChildren(tuCur);
+
+ CXToken *tokens;
+ unsigned int numTokens = 0;
+ const QSet<QString> &commands = CppCodeParser::topic_commands + CppCodeParser::meta_commands;
+ clang_tokenize(tu, clang_getCursorExtent(tuCur), &tokens, &numTokens);
+
+ for (unsigned int i = 0; i < numTokens; ++i) {
+ if (clang_getTokenKind(tokens[i]) != CXToken_Comment)
+ continue;
+ QString comment = fromCXString(clang_getTokenSpelling(tu, tokens[i]));
+ if (!comment.startsWith("/*!"))
+ continue;
+
+ auto commentLoc = clang_getTokenLocation(tu, tokens[i]);
+ auto loc = fromCXSourceLocation(commentLoc);
+ auto end_loc = fromCXSourceLocation(clang_getRangeEnd(clang_getTokenExtent(tu, tokens[i])));
+ Doc::trimCStyleComment(loc, comment);
+
+ // Doc constructor parses the comment.
+ Doc doc(loc, end_loc, comment, commands, CppCodeParser::topic_commands);
+ if (hasTooManyTopics(doc))
+ continue;
+
+ if (doc.topicsUsed().isEmpty()) {
+ Node *n = nullptr;
+ if (i + 1 < numTokens) {
+ // Try to find the next declaration.
+ CXSourceLocation nextCommentLoc = commentLoc;
+ while (i + 2 < numTokens && clang_getTokenKind(tokens[i + 1]) != CXToken_Comment)
+ ++i; // already skip all the tokens that are not comments
+ nextCommentLoc = clang_getTokenLocation(tu, tokens[i + 1]);
+ n = visitor.nodeForCommentAtLocation(commentLoc, nextCommentLoc);
+ }
+
+ if (n) {
+ parse_result.tied.emplace_back(TiedDocumentation{doc, n});
+ } else if (CodeParser::isWorthWarningAbout(doc)) {
+ bool future = false;
+ if (doc.metaCommandsUsed().contains(COMMAND_SINCE)) {
+ QString sinceVersion = doc.metaCommandArgs(COMMAND_SINCE).at(0).first;
+ if (getUnpatchedVersion(sinceVersion) >
+ getUnpatchedVersion(Config::instance().get(CONFIG_VERSION).asString()))
+ future = true;
+ }
+ if (!future) {
+ doc.location().warning(
+ QStringLiteral("Cannot tie this documentation to anything"),
+ QStringLiteral("qdoc found a /*! ... */ comment, but there was no "
+ "topic command (e.g., '\\%1', '\\%2') in the "
+ "comment and no function definition following "
+ "the comment.")
+ .arg(COMMAND_FN, COMMAND_PAGE));
+ }
+ }
+ } else {
+ parse_result.untied.emplace_back(UntiedDocumentation{doc, QStringList()});
+
+ CXCursor cur = clang_getCursor(tu, commentLoc);
+ while (true) {
+ CXCursorKind kind = clang_getCursorKind(cur);
+ if (clang_isTranslationUnit(kind) || clang_isInvalid(kind))
+ break;
+ if (kind == CXCursor_Namespace) {
+ parse_result.untied.back().context << fromCXString(clang_getCursorSpelling(cur));
+ }
+ cur = clang_getCursorLexicalParent(cur);
+ }
+ }
+ }
+
+ clang_disposeTokens(tu, tokens, numTokens);
+ m_namespaceScope.clear();
+ s_fn.clear();
+
+ return parse_result;
+}
+
+/*!
+ Use clang to parse the function signature from a function
+ command. \a location is used for reporting errors. \a fnSignature
+ is the string to parse. It is always a function decl.
+ \a idTag is the optional bracketed argument passed to \\fn, or
+ an empty string.
+ \a context is a string list representing the scope (namespaces)
+ under which the function is declared.
+
+ Returns a variant that's either a Node instance tied to the
+ function declaration, or a parsing failure for later processing.
+ */
+std::variant<Node*, FnMatchError> FnCommandParser::operator()(const Location &location, const QString &fnSignature,
+ const QString &idTag, QStringList context)
+{
+ Node *fnNode = nullptr;
+ /*
+ If the \fn command begins with a tag, then don't try to
+ parse the \fn command with clang. Use the tag to search
+ for the correct function node. It is an error if it can
+ not be found. Return 0 in that case.
+ */
+ if (!idTag.isEmpty()) {
+ fnNode = m_qdb->findFunctionNodeForTag(idTag);
+ if (!fnNode) {
+ location.error(
+ QStringLiteral("tag \\fn [%1] not used in any include file in current module").arg(idTag));
+ } else {
+ /*
+ The function node was found. Use the formal
+ parameter names from the \fn command, because
+ they will be the names used in the documentation.
+ */
+ auto *fn = static_cast<FunctionNode *>(fnNode);
+ QStringList leftParenSplit = fnSignature.mid(fnSignature.indexOf(fn->name())).split('(');
+ if (leftParenSplit.size() > 1) {
+ QStringList rightParenSplit = leftParenSplit[1].split(')');
+ if (!rightParenSplit.empty()) {
+ QString params = rightParenSplit[0];
+ if (!params.isEmpty()) {
+ QStringList commaSplit = params.split(',');
+ Parameters &parameters = fn->parameters();
+ if (parameters.count() == commaSplit.size()) {
+ for (int i = 0; i < parameters.count(); ++i) {
+ QStringList blankSplit = commaSplit[i].split(' ', Qt::SkipEmptyParts);
+ if (blankSplit.size() > 1) {
+ QString pName = blankSplit.last();
+ // Remove any non-letters from the start of parameter name
+ auto it = std::find_if(std::begin(pName), std::end(pName),
+ [](const QChar &c) { return c.isLetter(); });
+ parameters[i].setName(
+ pName.remove(0, std::distance(std::begin(pName), it)));
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return fnNode;
+ }
+ auto flags = static_cast<CXTranslationUnit_Flags>(CXTranslationUnit_Incomplete
+ | CXTranslationUnit_SkipFunctionBodies
+ | CXTranslationUnit_KeepGoing);
+
+ CompilationIndex index{ clang_createIndex(1, kClangDontDisplayDiagnostics) };
+
+ getDefaultArgs(m_defines, m_args);
+
+ if (m_pch) {
+ m_args.push_back("-w");
+ m_args.push_back("-include-pch");
+ m_args.push_back((*m_pch).get().name.constData());
+ }
+
+ TranslationUnit tu;
+ QByteArray s_fn{};
+ for (const auto &ns : std::as_const(context))
+ s_fn.prepend("namespace " + ns.toUtf8() + " {");
+ s_fn += fnSignature.toUtf8();
+ if (!s_fn.endsWith(";"))
+ s_fn += "{ }";
+ s_fn.append(context.size(), '}');
+
+ const char *dummyFileName = fnDummyFileName;
+ CXUnsavedFile unsavedFile { dummyFileName, s_fn.constData(),
+ static_cast<unsigned long>(s_fn.size()) };
+ CXErrorCode err = clang_parseTranslationUnit2(index, dummyFileName, m_args.data(),
+ int(m_args.size()), &unsavedFile, 1, flags, &tu.tu);
+ qCDebug(lcQdoc) << __FUNCTION__ << "clang_parseTranslationUnit2(" << dummyFileName << m_args
+ << ") returns" << err;
+ printDiagnostics(tu);
+ if (err || !tu) {
+ location.error(QStringLiteral("clang could not parse \\fn %1").arg(fnSignature));
+ return fnNode;
+ } else {
+ /*
+ Always visit the tu if one is constructed, because
+ it might be possible to find the correct node, even
+ if clang detected diagnostics. Only bother to report
+ the diagnostics if they stop us finding the node.
+ */
+ CXCursor cur = clang_getTranslationUnitCursor(tu);
+ ClangVisitor visitor(m_qdb, m_allHeaders);
+ bool ignoreSignature = false;
+ visitor.visitFnArg(cur, &fnNode, ignoreSignature);
+
+ if (!fnNode) {
+ unsigned diagnosticCount = clang_getNumDiagnostics(tu);
+ const auto &config = Config::instance();
+ if (diagnosticCount > 0 && (!config.preparing() || config.singleExec())) {
+ return FnMatchError{ fnSignature, location };
+ }
+ }
+ }
+ return fnNode;
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/clangcodeparser.h b/src/qdoc/qdoc/src/qdoc/clangcodeparser.h
new file mode 100644
index 000000000..d7568f9a4
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/clangcodeparser.h
@@ -0,0 +1,94 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef CLANGCODEPARSER_H
+#define CLANGCODEPARSER_H
+
+#include "codeparser.h"
+#include "parsererror.h"
+#include "config.h"
+
+#include <QtCore/qtemporarydir.h>
+#include <QtCore/QStringList>
+
+#include <optional>
+
+typedef struct CXTranslationUnitImpl *CXTranslationUnit;
+
+class CppCodeParser;
+
+QT_BEGIN_NAMESPACE
+
+struct ParsedCppFileIR {
+ std::vector<UntiedDocumentation> untied;
+ std::vector<TiedDocumentation> tied;
+};
+
+struct PCHFile {
+ QTemporaryDir dir;
+ QByteArray name;
+};
+
+std::optional<PCHFile> buildPCH(
+ QDocDatabase* qdb,
+ QString module_header,
+ const std::set<Config::HeaderFilePath>& all_headers,
+ const std::vector<QByteArray>& include_paths,
+ const QList<QByteArray>& defines
+);
+
+struct FnCommandParser {
+ FnCommandParser(
+ QDocDatabase* qdb,
+ const std::set<Config::HeaderFilePath>& all_headers,
+ const QList<QByteArray>& defines,
+ std::optional<std::reference_wrapper<const PCHFile>> pch
+ ) : m_qdb{qdb},
+ m_allHeaders{all_headers},
+ m_defines{defines},
+ m_args{},
+ m_pch{pch}
+ {}
+
+ std::variant<Node*, FnMatchError> operator()(
+ const Location &location,
+ const QString &fnSignature,
+ const QString &idTag,
+ QStringList context
+ );
+
+private:
+ QDocDatabase* m_qdb;
+ const std::set<Config::HeaderFilePath>& m_allHeaders; // file name->path
+ QList<QByteArray> m_defines {};
+ std::vector<const char *> m_args {};
+ std::optional<std::reference_wrapper<const PCHFile>> m_pch;
+};
+
+class ClangCodeParser
+{
+public:
+ ClangCodeParser(
+ QDocDatabase* qdb,
+ Config&,
+ const std::vector<QByteArray>& include_paths,
+ const QList<QByteArray>& defines,
+ std::optional<std::reference_wrapper<const PCHFile>> pch
+ );
+
+ ParsedCppFileIR parse_cpp_file(const QString &filePath);
+
+private:
+ QDocDatabase* m_qdb{};
+ std::set<Config::HeaderFilePath> m_allHeaders {}; // file name->path
+ const std::vector<QByteArray>& m_includePaths;
+ QList<QByteArray> m_defines {};
+ std::vector<const char *> m_args {};
+ QStringList m_namespaceScope {};
+ QByteArray s_fn;
+ std::optional<std::reference_wrapper<const PCHFile>> m_pch;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/classnode.cpp b/src/qdoc/qdoc/src/qdoc/classnode.cpp
new file mode 100644
index 000000000..f6de10f78
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/classnode.cpp
@@ -0,0 +1,291 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "classnode.h"
+
+#include "functionnode.h"
+#include "propertynode.h"
+#include "qdocdatabase.h"
+#include "qmltypenode.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class ClassNode
+ \brief The ClassNode represents a C++ class.
+
+ It is also used to represent a C++ struct or union. There are some
+ actual uses for structs, but I don't think any unions have been
+ documented yet.
+ */
+
+/*!
+ Adds the base class \a node to this class's list of base
+ classes. The base class has the specified \a access. This
+ is a resolved base class.
+ */
+void ClassNode::addResolvedBaseClass(Access access, ClassNode *node)
+{
+ m_bases.append(RelatedClass(access, node));
+ node->m_derived.append(RelatedClass(access, this));
+}
+
+/*!
+ Adds the derived class \a node to this class's list of derived
+ classes. The derived class inherits this class with \a access.
+ */
+void ClassNode::addDerivedClass(Access access, ClassNode *node)
+{
+ m_derived.append(RelatedClass(access, node));
+}
+
+/*!
+ Add an unresolved base class to this class node's list of
+ base classes. The unresolved base class will be resolved
+ before the generate phase of qdoc. In an unresolved base
+ class, the pointer to the base class node is 0.
+ */
+void ClassNode::addUnresolvedBaseClass(Access access, const QStringList &path)
+{
+ m_bases.append(RelatedClass(access, path));
+}
+
+/*!
+ Search the child list to find the property node with the
+ specified \a name.
+ */
+PropertyNode *ClassNode::findPropertyNode(const QString &name)
+{
+ Node *n = findNonfunctionChild(name, &Node::isProperty);
+
+ if (n)
+ return static_cast<PropertyNode *>(n);
+
+ PropertyNode *pn = nullptr;
+
+ const QList<RelatedClass> &bases = baseClasses();
+ if (!bases.isEmpty()) {
+ for (const RelatedClass &base : bases) {
+ ClassNode *cn = base.m_node;
+ if (cn) {
+ pn = cn->findPropertyNode(name);
+ if (pn)
+ break;
+ }
+ }
+ }
+ const QList<RelatedClass> &ignoredBases = ignoredBaseClasses();
+ if (!ignoredBases.isEmpty()) {
+ for (const RelatedClass &base : ignoredBases) {
+ ClassNode *cn = base.m_node;
+ if (cn) {
+ pn = cn->findPropertyNode(name);
+ if (pn)
+ break;
+ }
+ }
+ }
+
+ return pn;
+}
+
+/*!
+ 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
+ class's base classes. Return a pointer to the overridden
+ function or return 0.
+
+ This should be revised because clang provides the path to the
+ overridden function. mws 15/12/2018
+ */
+FunctionNode *ClassNode::findOverriddenFunction(const FunctionNode *fn)
+{
+ for (auto &bc : m_bases) {
+ ClassNode *cn = bc.m_node;
+ if (cn == nullptr) {
+ cn = QDocDatabase::qdocDB()->findClassNode(bc.m_path);
+ bc.m_node = cn;
+ }
+ if (cn != nullptr) {
+ FunctionNode *result = cn->findFunctionChild(fn);
+ if (result != nullptr && !result->isInternal() && !result->isNonvirtual()
+ && result->hasDoc())
+ return result;
+ result = cn->findOverriddenFunction(fn);
+ if (result != nullptr && !result->isNonvirtual())
+ return result;
+ }
+ }
+ return nullptr;
+}
+
+/*!
+ \a fn is an overriding function in this class or in a class
+ derived from this class. Find the node for the property that
+ \a fn overrides in this class's children or in one of this
+ class's base classes. Return a pointer to the overridden
+ property or return 0.
+ */
+PropertyNode *ClassNode::findOverriddenProperty(const FunctionNode *fn)
+{
+ for (auto &baseClass : m_bases) {
+ ClassNode *cn = baseClass.m_node;
+ if (cn == nullptr) {
+ cn = QDocDatabase::qdocDB()->findClassNode(baseClass.m_path);
+ baseClass.m_node = cn;
+ }
+ if (cn != nullptr) {
+ const NodeList &children = cn->childNodes();
+ for (const auto &child : children) {
+ if (child->isProperty()) {
+ auto *pn = static_cast<PropertyNode *>(child);
+ if (pn->name() == fn->name() || pn->hasAccessFunction(fn->name())) {
+ if (pn->hasDoc())
+ return pn;
+ }
+ }
+ }
+ PropertyNode *result = cn->findOverriddenProperty(fn);
+ if (result != nullptr)
+ return result;
+ }
+ }
+ return nullptr;
+}
+
+/*!
+ Returns true if the class or struct represented by this class
+ node must be documented. If this function returns true, then
+ qdoc must find a qdoc comment for this class. If it returns
+ false, then the class need not be documented.
+ */
+bool ClassNode::docMustBeGenerated() const
+{
+ if (!hasDoc() || isPrivate() || isInternal() || isDontDocument())
+ return false;
+ if (declLocation().fileName().endsWith(QLatin1String("_p.h")) && !hasDoc())
+ return false;
+
+ return true;
+}
+
+/*!
+ A base class of this class node was private or internal.
+ That node's list of \a bases is traversed in this function.
+ Each of its public base classes is promoted to be a base
+ class of this node for documentation purposes. For each
+ private or internal class node in \a bases, this function
+ is called recursively with the list of base classes from
+ that private or internal class node.
+ */
+void ClassNode::promotePublicBases(const QList<RelatedClass> &bases)
+{
+ if (!bases.isEmpty()) {
+ for (qsizetype i = bases.size() - 1; i >= 0; --i) {
+ ClassNode *bc = bases.at(i).m_node;
+ if (bc == nullptr)
+ bc = QDocDatabase::qdocDB()->findClassNode(bases.at(i).m_path);
+ if (bc != nullptr) {
+ if (bc->isPrivate() || bc->isInternal())
+ promotePublicBases(bc->baseClasses());
+ else
+ m_bases.append(bases.at(i));
+ }
+ }
+ }
+}
+
+/*!
+ Remove private and internal bases classes from this class's list
+ of base classes. When a base class is removed from the list, add
+ its base classes to this class's list of base classes.
+ */
+void ClassNode::removePrivateAndInternalBases()
+{
+ int i;
+ i = 0;
+ QSet<ClassNode *> found;
+
+ // Remove private and duplicate base classes.
+ while (i < m_bases.size()) {
+ ClassNode *bc = m_bases.at(i).m_node;
+ if (bc == nullptr)
+ bc = QDocDatabase::qdocDB()->findClassNode(m_bases.at(i).m_path);
+ if (bc != nullptr
+ && (bc->isPrivate() || bc->isInternal() || bc->isDontDocument()
+ || found.contains(bc))) {
+ RelatedClass rc = m_bases.at(i);
+ m_bases.removeAt(i);
+ m_ignoredBases.append(rc);
+ promotePublicBases(bc->baseClasses());
+ } else {
+ ++i;
+ }
+ found.insert(bc);
+ }
+
+ i = 0;
+ while (i < m_derived.size()) {
+ ClassNode *dc = m_derived.at(i).m_node;
+ if (dc != nullptr && (dc->isPrivate() || dc->isInternal() || dc->isDontDocument())) {
+ m_derived.removeAt(i);
+ const QList<RelatedClass> &dd = dc->derivedClasses();
+ for (qsizetype j = dd.size() - 1; j >= 0; --j)
+ m_derived.insert(i, dd.at(j));
+ } else {
+ ++i;
+ }
+ }
+}
+
+/*!
+ */
+void ClassNode::resolvePropertyOverriddenFromPtrs(PropertyNode *pn)
+{
+ for (const auto &baseClass : std::as_const(baseClasses())) {
+ ClassNode *cn = baseClass.m_node;
+ if (cn) {
+ Node *n = cn->findNonfunctionChild(pn->name(), &Node::isProperty);
+ if (n) {
+ auto *baseProperty = static_cast<PropertyNode *>(n);
+ cn->resolvePropertyOverriddenFromPtrs(baseProperty);
+ pn->setOverriddenFrom(baseProperty);
+ } else
+ cn->resolvePropertyOverriddenFromPtrs(pn);
+ }
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/classnode.h b/src/qdoc/qdoc/src/qdoc/classnode.h
new file mode 100644
index 000000000..d5efe51f4
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/classnode.h
@@ -0,0 +1,68 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef CLASSNODE_H
+#define CLASSNODE_H
+
+#include "aggregate.h"
+#include "relatedclass.h"
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qlist.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+class FunctionNode;
+class PropertyNode;
+class QmlTypeNode;
+
+class ClassNode : public Aggregate
+{
+public:
+ ClassNode(NodeType type, Aggregate *parent, const QString &name) : Aggregate(type, parent, name)
+ {
+ }
+ [[nodiscard]] bool isFirstClassAggregate() const override { return true; }
+ [[nodiscard]] bool isClassNode() const override { return true; }
+ [[nodiscard]] bool isRelatableType() const override { return true; }
+ [[nodiscard]] bool isWrapper() const override { return m_wrapper; }
+ void setWrapper() override { m_wrapper = true; }
+
+ void addResolvedBaseClass(Access access, ClassNode *node);
+ void addDerivedClass(Access access, ClassNode *node);
+ void addUnresolvedBaseClass(Access access, const QStringList &path);
+ void removePrivateAndInternalBases();
+ void resolvePropertyOverriddenFromPtrs(PropertyNode *pn);
+
+ QList<RelatedClass> &baseClasses() { return m_bases; }
+ QList<RelatedClass> &derivedClasses() { return m_derived; }
+ QList<RelatedClass> &ignoredBaseClasses() { return m_ignoredBases; }
+
+ [[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;
+
+private:
+ void promotePublicBases(const QList<RelatedClass> &bases);
+
+private:
+ QList<RelatedClass> m_bases {};
+ QList<RelatedClass> m_derived {};
+ QList<RelatedClass> m_ignoredBases {};
+ bool m_abstract { false };
+ bool m_wrapper { false };
+ QmlTypeNode *m_qmlElement { nullptr };
+};
+
+QT_END_NAMESPACE
+
+#endif // CLASSNODE_H
diff --git a/src/qdoc/qdoc/src/qdoc/codechunk.cpp b/src/qdoc/qdoc/src/qdoc/codechunk.cpp
new file mode 100644
index 000000000..889e091af
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/codechunk.cpp
@@ -0,0 +1,104 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "codechunk.h"
+
+QT_BEGIN_NAMESPACE
+
+enum { Other, Alnum, Gizmo, Comma, LBrace, RBrace, RAngle, Colon, Paren };
+
+// entries 128 and above are Other
+static const int charCategory[256] = { Other, Other, Other, Other, Other, Other, Other, Other,
+ Other, Other, Other, Other, Other, Other, Other, Other,
+ Other, Other, Other, Other, Other, Other, Other, Other,
+ Other, Other, Other, Other, Other, Other, Other, Other,
+ // ! " # $ % & '
+ Other, Other, Other, Other, Other, Gizmo, Gizmo, Other,
+ // ( ) * + , - . /
+ Paren, Paren, Gizmo, Gizmo, Comma, Other, Other, Gizmo,
+ // 0 1 2 3 4 5 6 7
+ Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum,
+ // 8 9 : ; < = > ?
+ Alnum, Alnum, Colon, Other, Other, Gizmo, RAngle, Gizmo,
+ // @ A B C D E F G
+ Other, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum,
+ // H I J K L M N O
+ Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum,
+ // P Q R S T U V W
+ Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum,
+ // X Y Z [ \ ] ^ _
+ Alnum, Alnum, Alnum, Other, Other, Other, Gizmo, Alnum,
+ // ` a b c d e f g
+ Other, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum,
+ // h i j k l m n o
+ Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum,
+ // p q r s t u v w
+ Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum, Alnum,
+ // x y z { | } ~
+ Alnum, Alnum, Alnum, LBrace, Gizmo, RBrace, Other, Other };
+
+static const bool needSpace[9][9] = {
+ /* [ a + , { } > : ) */
+ /* [ */ { false, false, false, false, false, true, false, false, false },
+ /* a */ { false, true, true, false, false, true, false, false, false },
+ /* + */ { false, true, false, false, false, true, false, true, false },
+ /* , */ { true, true, true, true, true, true, true, true, false },
+ /* { */ { false, false, false, false, false, false, false, false, false },
+ /* } */ { false, false, false, false, false, false, false, false, false },
+ /* > */ { true, true, true, false, true, true, true, false, false },
+ /* : */ { false, false, true, true, true, true, true, false, false },
+ /* ( */ { false, false, false, false, false, false, false, false, false },
+};
+
+static int category(QChar ch)
+{
+ return charCategory[static_cast<int>(ch.toLatin1())];
+}
+
+/*!
+ \class CodeChunk
+
+ \brief The CodeChunk class represents a tiny piece of C++ code.
+
+ \note I think this class should be eliminated (mws 11/12/2018
+
+ The class provides conversion between a list of lexemes and a string. It adds
+ spaces at the right place for consistent style. The tiny pieces of code it
+ represents are data types, enum values, and default parameter values.
+
+ Apart from the piece of code itself, there are two bits of metainformation
+ stored in CodeChunk: the base and the hotspot. The base is the part of the
+ piece that may be a hypertext link. The base of
+
+ QMap<QString, QString>
+
+ is QMap.
+
+ The hotspot is the place the variable name should be inserted in the case of a
+ variable (or parameter) declaration. The hotspot of
+
+ char * []
+
+ is between '*' and '[]'.
+*/
+
+/*!
+ Appends \a lexeme to the current string contents, inserting
+ a space if appropriate.
+ */
+void CodeChunk::append(const QString &lexeme)
+{
+ if (!m_str.isEmpty() && !lexeme.isEmpty()) {
+ /*
+ Should there be a space or not between the code chunk so far and the
+ new lexeme?
+ */
+ int cat1 = category(m_str.at(m_str.size() - 1));
+ int cat2 = category(lexeme[0]);
+ if (needSpace[cat1][cat2])
+ m_str += QLatin1Char(' ');
+ }
+ m_str += lexeme;
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/codechunk.h b/src/qdoc/qdoc/src/qdoc/codechunk.h
new file mode 100644
index 000000000..00ad26c6d
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/codechunk.h
@@ -0,0 +1,74 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef CODECHUNK_H
+#define CODECHUNK_H
+
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+// ### get rid of that class
+
+class CodeChunk
+{
+public:
+ CodeChunk() : m_hotspot(-1) { }
+
+ void append(const QString &lexeme);
+ void appendHotspot()
+ {
+ if (m_hotspot == -1)
+ m_hotspot = m_str.size();
+ }
+
+ [[nodiscard]] bool isEmpty() const { return m_str.isEmpty(); }
+ void clear() { m_str.clear(); }
+ [[nodiscard]] QString toString() const { return m_str; }
+ [[nodiscard]] QString left() const
+ {
+ return m_str.left(m_hotspot == -1 ? m_str.size() : m_hotspot);
+ }
+ [[nodiscard]] QString right() const
+ {
+ return m_str.mid(m_hotspot == -1 ? m_str.size() : m_hotspot);
+ }
+
+private:
+ QString m_str {};
+ qsizetype m_hotspot {};
+};
+
+inline bool operator==(const CodeChunk &c, const CodeChunk &d)
+{
+ return c.toString() == d.toString();
+}
+
+inline bool operator!=(const CodeChunk &c, const CodeChunk &d)
+{
+ return !(c == d);
+}
+
+inline bool operator<(const CodeChunk &c, const CodeChunk &d)
+{
+ return c.toString() < d.toString();
+}
+
+inline bool operator>(const CodeChunk &c, const CodeChunk &d)
+{
+ return d < c;
+}
+
+inline bool operator<=(const CodeChunk &c, const CodeChunk &d)
+{
+ return !(c > d);
+}
+
+inline bool operator>=(const CodeChunk &c, const CodeChunk &d)
+{
+ return !(c < d);
+}
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/codemarker.cpp b/src/qdoc/qdoc/src/qdoc/codemarker.cpp
new file mode 100644
index 000000000..28f84a946
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/codemarker.cpp
@@ -0,0 +1,448 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "codemarker.h"
+
+#include "classnode.h"
+#include "config.h"
+#include "functionnode.h"
+#include "node.h"
+#include "propertynode.h"
+#include "qmlpropertynode.h"
+
+#include <QtCore/qobjectdefs.h>
+
+QT_BEGIN_NAMESPACE
+
+using namespace Qt::StringLiterals;
+
+QString CodeMarker::s_defaultLang;
+QList<CodeMarker *> CodeMarker::s_markers;
+
+
+/*!
+ When a code marker constructs itself, it puts itself into
+ the static list of code markers. All the code markers in
+ the static list get initialized in initialize(), which is
+ not called until after the qdoc configuration file has
+ been read.
+ */
+CodeMarker::CodeMarker()
+{
+ s_markers.prepend(this);
+}
+
+/*!
+ When a code marker destroys itself, it removes itself from
+ the static list of code markers.
+ */
+CodeMarker::~CodeMarker()
+{
+ s_markers.removeAll(this);
+}
+
+/*!
+ A code market performs no initialization by default. Marker-specific
+ initialization is performed in subclasses.
+ */
+void CodeMarker::initializeMarker() {}
+
+/*!
+ Terminating a code marker is trivial.
+ */
+void CodeMarker::terminateMarker()
+{
+ // nothing.
+}
+
+/*!
+ All the code markers in the static list are initialized
+ here, after the qdoc configuration file has been loaded.
+ */
+void CodeMarker::initialize()
+{
+ s_defaultLang = Config::instance().get(CONFIG_LANGUAGE).asString();
+ for (const auto &marker : std::as_const(s_markers))
+ marker->initializeMarker();
+}
+
+/*!
+ All the code markers in the static list are terminated here.
+ */
+void CodeMarker::terminate()
+{
+ for (const auto &marker : std::as_const(s_markers))
+ marker->terminateMarker();
+}
+
+CodeMarker *CodeMarker::markerForCode(const QString &code)
+{
+ CodeMarker *defaultMarker = markerForLanguage(s_defaultLang);
+ if (defaultMarker != nullptr && defaultMarker->recognizeCode(code))
+ return defaultMarker;
+
+ for (const auto &marker : std::as_const(s_markers)) {
+ if (marker->recognizeCode(code))
+ return marker;
+ }
+
+ return defaultMarker;
+}
+
+CodeMarker *CodeMarker::markerForFileName(const QString &fileName)
+{
+ CodeMarker *defaultMarker = markerForLanguage(s_defaultLang);
+ qsizetype dot = -1;
+ while ((dot = fileName.lastIndexOf(QLatin1Char('.'), dot)) != -1) {
+ QString ext = fileName.mid(dot + 1);
+ if (defaultMarker != nullptr && defaultMarker->recognizeExtension(ext))
+ return defaultMarker;
+ for (const auto &marker : std::as_const(s_markers)) {
+ if (marker->recognizeExtension(ext))
+ return marker;
+ }
+ --dot;
+ }
+ return defaultMarker;
+}
+
+CodeMarker *CodeMarker::markerForLanguage(const QString &lang)
+{
+ for (const auto &marker : std::as_const(s_markers)) {
+ if (marker->recognizeLanguage(lang))
+ return marker;
+ }
+ return nullptr;
+}
+
+const Node *CodeMarker::nodeForString(const QString &string)
+{
+#if QT_POINTER_SIZE == 4
+ const quintptr n = string.toUInt();
+#else
+ const quintptr n = string.toULongLong();
+#endif
+ return reinterpret_cast<const Node *>(n);
+}
+
+QString CodeMarker::stringForNode(const Node *node)
+{
+ return QString::number(reinterpret_cast<quintptr>(node));
+}
+
+/*!
+ Returns a string representing the \a node status, set using \preliminary, \since,
+ and \deprecated commands.
+
+ If a string is returned, it is one of:
+ \list
+ \li \c {"preliminary"}
+ \li \c {"since <version_since>, deprecated in <version_deprecated>"}
+ \li \c {"since <version_since>, until <version_deprecated>"}
+ \li \c {"since <version_since>"}
+ \li \c {"since <version_since>, deprecated"}
+ \li \c {"deprecated in <version_deprecated>"}
+ \li \c {"until <version_deprecated>"}
+ \li \c {"deprecated"}
+ \endlist
+
+ If \a node has no related status information, returns std::nullopt.
+*/
+static std::optional<QString> nodeStatusAsString(const Node *node)
+{
+ if (node->isPreliminary())
+ return std::optional(u"preliminary"_s);
+
+ QStringList result;
+ if (const auto &since = node->since(); !since.isEmpty())
+ result << "since %1"_L1.arg(since);
+ if (const auto &deprecated = node->deprecatedSince(); !deprecated.isEmpty()) {
+ if (node->isDeprecated())
+ result << "deprecated in %1"_L1.arg(deprecated);
+ else
+ result << "until %1"_L1.arg(deprecated);
+ } else if (node->isDeprecated()) {
+ result << u"deprecated"_s;
+ }
+
+ return result.isEmpty() ? std::nullopt : std::optional(result.join(u", "_s));
+}
+
+/*!
+ Returns the 'extra' synopsis string for \a node with status information,
+ using a specified section \a style.
+*/
+QString CodeMarker::extraSynopsis(const Node *node, Section::Style style)
+{
+ if (style != Section::Summary && style != Section::Details)
+ return {};
+
+ QStringList extra;
+ if (style == Section::Details) {
+ switch (node->nodeType()) {
+ case Node::Function: {
+ const auto *func = static_cast<const FunctionNode *>(node);
+ if (func->isStatic()) {
+ extra << "static";
+ } else if (!func->isNonvirtual()) {
+ if (func->isFinal())
+ extra << "final";
+ if (func->isOverride())
+ extra << "override";
+ if (func->isPureVirtual())
+ extra << "pure";
+ extra << "virtual";
+ }
+
+ if (func->isExplicit()) extra << "explicit";
+ if (func->isConstexpr()) extra << "constexpr";
+ if (auto noexcept_info = func->getNoexcept()) {
+ extra << (QString("noexcept") + (!(*noexcept_info).isEmpty() ? "(...)" : ""));
+ }
+
+ if (func->access() == Access::Protected)
+ extra << "protected";
+ else if (func->access() == Access::Private)
+ extra << "private";
+
+ if (func->isSignal()) {
+ if (func->parameters().isPrivateSignal())
+ extra << "private";
+ extra << "signal";
+ } else if (func->isSlot())
+ extra << "slot";
+ else if (func->isDefault())
+ extra << "default";
+ else if (func->isInvokable())
+ extra << "invokable";
+ }
+ break;
+ case Node::TypeAlias:
+ extra << "alias";
+ break;
+ case Node::Property: {
+ auto propertyNode = static_cast<const PropertyNode *>(node);
+ if (propertyNode->propertyType() == PropertyNode::PropertyType::BindableProperty)
+ extra << "bindable";
+ if (!propertyNode->isWritable())
+ extra << "read-only";
+ }
+ break;
+ case Node::QmlProperty: {
+ auto qmlProperty = static_cast<const QmlPropertyNode *>(node);
+ if (qmlProperty->isDefault())
+ extra << u"default"_s;
+ // Call non-const overloads to ensure attributes are fetched from
+ // associated C++ properties
+ else if (const_cast<QmlPropertyNode *>(qmlProperty)->isReadOnly())
+ extra << u"read-only"_s;
+ else if (const_cast<QmlPropertyNode *>(qmlProperty)->isRequired())
+ extra << u"required"_s;
+ else if (!qmlProperty->defaultValue().isEmpty()) {
+ extra << u"default: "_s + qmlProperty->defaultValue();
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ // Add status for both Summary and Details
+ if (auto status = nodeStatusAsString(node)) {
+ if (!extra.isEmpty())
+ extra.last() += ','_L1;
+ extra << *status;
+ }
+
+ QString extraStr = extra.join(QLatin1Char(' '));
+ if (!extraStr.isEmpty()) {
+ extraStr.prepend(style == Section::Details ? '[' : '(');
+ extraStr.append(style == Section::Details ? ']' : ')');
+ }
+
+ return extraStr;
+}
+
+static const QString samp = QLatin1String("&amp;");
+static const QString slt = QLatin1String("&lt;");
+static const QString sgt = QLatin1String("&gt;");
+static const QString squot = QLatin1String("&quot;");
+
+QString CodeMarker::protect(const QString &str)
+{
+ qsizetype n = str.size();
+ QString marked;
+ marked.reserve(n * 2 + 30);
+ const QChar *data = str.constData();
+ for (int i = 0; i != n; ++i) {
+ switch (data[i].unicode()) {
+ case '&':
+ marked += samp;
+ break;
+ case '<':
+ marked += slt;
+ break;
+ case '>':
+ marked += sgt;
+ break;
+ case '"':
+ marked += squot;
+ break;
+ default:
+ marked += data[i];
+ }
+ }
+ return marked;
+}
+
+void CodeMarker::appendProtectedString(QString *output, QStringView str)
+{
+ qsizetype n = str.size();
+ output->reserve(output->size() + n * 2 + 30);
+ const QChar *data = str.constData();
+ for (int i = 0; i != n; ++i) {
+ switch (data[i].unicode()) {
+ case '&':
+ *output += samp;
+ break;
+ case '<':
+ *output += slt;
+ break;
+ case '>':
+ *output += sgt;
+ break;
+ case '"':
+ *output += squot;
+ break;
+ default:
+ *output += data[i];
+ }
+ }
+}
+
+QString CodeMarker::typified(const QString &string, bool trailingSpace)
+{
+ QString result;
+ QString pendingWord;
+
+ for (int i = 0; i <= string.size(); ++i) {
+ QChar ch;
+ if (i != string.size())
+ ch = string.at(i);
+
+ QChar lower = ch.toLower();
+ if ((lower >= QLatin1Char('a') && lower <= QLatin1Char('z')) || ch.digitValue() >= 0
+ || ch == QLatin1Char('_') || ch == QLatin1Char(':')) {
+ pendingWord += ch;
+ } else {
+ if (!pendingWord.isEmpty()) {
+ bool isProbablyType = (pendingWord != QLatin1String("const"));
+ if (isProbablyType)
+ result += QLatin1String("<@type>");
+ result += pendingWord;
+ if (isProbablyType)
+ result += QLatin1String("</@type>");
+ }
+ pendingWord.clear();
+
+ switch (ch.unicode()) {
+ case '\0':
+ break;
+ case '&':
+ result += QLatin1String("&amp;");
+ break;
+ case '<':
+ result += QLatin1String("&lt;");
+ break;
+ case '>':
+ result += QLatin1String("&gt;");
+ break;
+ default:
+ result += ch;
+ }
+ }
+ }
+ if (trailingSpace && string.size()) {
+ if (!string.endsWith(QLatin1Char('*')) && !string.endsWith(QLatin1Char('&')))
+ result += QLatin1Char(' ');
+ }
+ return result;
+}
+
+QString CodeMarker::taggedNode(const Node *node)
+{
+ QString tag;
+ const QString &name = node->name();
+
+ switch (node->nodeType()) {
+ case Node::Namespace:
+ tag = QLatin1String("@namespace");
+ break;
+ case Node::Class:
+ case Node::Struct:
+ case Node::Union:
+ tag = QLatin1String("@class");
+ break;
+ case Node::Enum:
+ tag = QLatin1String("@enum");
+ break;
+ case Node::TypeAlias:
+ case Node::Typedef:
+ tag = QLatin1String("@typedef");
+ break;
+ case Node::Function:
+ tag = QLatin1String("@function");
+ break;
+ case Node::Property:
+ tag = QLatin1String("@property");
+ break;
+ case Node::QmlType:
+ tag = QLatin1String("@property");
+ break;
+ case Node::Page:
+ tag = QLatin1String("@property");
+ break;
+ default:
+ tag = QLatin1String("@unknown");
+ break;
+ }
+ return (QLatin1Char('<') + tag + QLatin1Char('>') + protect(name) + QLatin1String("</") + tag
+ + QLatin1Char('>'));
+}
+
+QString CodeMarker::taggedQmlNode(const Node *node)
+{
+ QString tag;
+ if (node->isFunction()) {
+ const auto *fn = static_cast<const FunctionNode *>(node);
+ switch (fn->metaness()) {
+ case FunctionNode::QmlSignal:
+ tag = QLatin1String("@signal");
+ break;
+ case FunctionNode::QmlSignalHandler:
+ tag = QLatin1String("@signalhandler");
+ break;
+ case FunctionNode::QmlMethod:
+ tag = QLatin1String("@method");
+ break;
+ default:
+ tag = QLatin1String("@unknown");
+ break;
+ }
+ } else if (node->isQmlProperty()) {
+ tag = QLatin1String("@property");
+ } else {
+ tag = QLatin1String("@unknown");
+ }
+ return QLatin1Char('<') + tag + QLatin1Char('>') + protect(node->name()) + QLatin1String("</")
+ + tag + QLatin1Char('>');
+}
+
+QString CodeMarker::linkTag(const Node *node, const QString &body)
+{
+ return QLatin1String("<@link node=\"") + stringForNode(node) + QLatin1String("\">") + body
+ + QLatin1String("</@link>");
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/codemarker.h b/src/qdoc/qdoc/src/qdoc/codemarker.h
new file mode 100644
index 000000000..af668b650
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/codemarker.h
@@ -0,0 +1,67 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef CODEMARKER_H
+#define CODEMARKER_H
+
+#include "atom.h"
+#include "sections.h"
+
+QT_BEGIN_NAMESPACE
+
+class CodeMarker
+{
+public:
+ CodeMarker();
+ virtual ~CodeMarker();
+
+ virtual void initializeMarker();
+ virtual void terminateMarker();
+ virtual bool recognizeCode(const QString & /*code*/) { return true; }
+ virtual bool recognizeExtension(const QString & /*extension*/) { return true; }
+ virtual bool recognizeLanguage(const QString & /*language*/) { return false; }
+ [[nodiscard]] virtual Atom::AtomType atomType() const { return Atom::Code; }
+ virtual QString markedUpCode(const QString &code, const Node * /*relative*/,
+ const Location & /*location*/)
+ {
+ return protect(code);
+ }
+ virtual QString markedUpSynopsis(const Node * /*node*/, const Node * /*relative*/,
+ Section::Style /*style*/)
+ {
+ return QString();
+ }
+ virtual QString markedUpQmlItem(const Node *, bool) { return QString(); }
+ virtual QString markedUpName(const Node * /*node*/) { return QString(); }
+ virtual QString markedUpEnumValue(const QString & /*enumValue*/, const Node * /*relative*/)
+ {
+ return QString();
+ }
+ virtual QString markedUpInclude(const QString & /*include*/) { return QString(); }
+
+ static void initialize();
+ static void terminate();
+ static CodeMarker *markerForCode(const QString &code);
+ static CodeMarker *markerForFileName(const QString &fileName);
+ static CodeMarker *markerForLanguage(const QString &lang);
+ static const Node *nodeForString(const QString &string);
+ static QString stringForNode(const Node *node);
+ static QString extraSynopsis(const Node *node, Section::Style style);
+
+ QString typified(const QString &string, bool trailingSpace = false);
+
+protected:
+ static QString protect(const QString &string);
+ static void appendProtectedString(QString *output, QStringView str);
+ QString taggedNode(const Node *node);
+ QString taggedQmlNode(const Node *node);
+ QString linkTag(const Node *node, const QString &body);
+
+private:
+ static QString s_defaultLang;
+ static QList<CodeMarker *> s_markers;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/codeparser.cpp b/src/qdoc/qdoc/src/qdoc/codeparser.cpp
new file mode 100644
index 000000000..ad35e6d65
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/codeparser.cpp
@@ -0,0 +1,139 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "codeparser.h"
+
+#include "config.h"
+#include "generator.h"
+#include "node.h"
+#include "qdocdatabase.h"
+
+#include <QtCore/qregularexpression.h>
+
+QT_BEGIN_NAMESPACE
+
+QList<CodeParser *> CodeParser::s_parsers;
+
+/*!
+ The constructor adds this code parser to the static
+ list of code parsers.
+ */
+CodeParser::CodeParser()
+{
+ m_qdb = QDocDatabase::qdocDB();
+ s_parsers.prepend(this);
+}
+
+/*!
+ The destructor removes this code parser from the static
+ list of code parsers.
+ */
+CodeParser::~CodeParser()
+{
+ s_parsers.removeAll(this);
+}
+
+/*!
+ Terminating a code parser is trivial.
+ */
+void CodeParser::terminateParser()
+{
+ // nothing.
+}
+
+/*!
+ All the code parsers in the static list are initialized here,
+ after the qdoc configuration variables have been set.
+ */
+void CodeParser::initialize()
+{
+ for (const auto &parser : std::as_const(s_parsers))
+ parser->initializeParser();
+}
+
+/*!
+ All the code parsers in the static list are terminated here.
+ */
+void CodeParser::terminate()
+{
+ for (const auto parser : s_parsers)
+ parser->terminateParser();
+}
+
+CodeParser *CodeParser::parserForLanguage(const QString &language)
+{
+ for (const auto parser : std::as_const(s_parsers)) {
+ if (parser->language() == language)
+ return parser;
+ }
+ return nullptr;
+}
+
+CodeParser *CodeParser::parserForSourceFile(const QString &filePath)
+{
+ QString fileName = QFileInfo(filePath).fileName();
+
+ for (const auto &parser : s_parsers) {
+ const QStringList sourcePatterns = parser->sourceFileNameFilter();
+ for (const QString &pattern : sourcePatterns) {
+ auto re = QRegularExpression::fromWildcard(pattern, Qt::CaseInsensitive);
+ if (re.match(fileName).hasMatch())
+ return parser;
+ }
+ }
+ return nullptr;
+}
+
+/*!
+ \internal
+ */
+void CodeParser::extractPageLinkAndDesc(QStringView arg, QString *link, QString *desc)
+{
+ static const QRegularExpression bracedRegExp(
+ QRegularExpression::anchoredPattern(QLatin1String(R"(\{([^{}]*)\}(?:\{([^{}]*)\})?)")));
+ auto match = bracedRegExp.matchView(arg);
+ if (match.hasMatch()) {
+ *link = match.captured(1);
+ *desc = match.captured(2);
+ if (desc->isEmpty())
+ *desc = *link;
+ } else {
+ qsizetype spaceAt = arg.indexOf(QLatin1Char(' '));
+ if (arg.contains(QLatin1String(".html")) && spaceAt != -1) {
+ *link = arg.left(spaceAt).trimmed().toString();
+ *desc = arg.mid(spaceAt).trimmed().toString();
+ } else {
+ *link = arg.toString();
+ *desc = *link;
+ }
+ }
+}
+
+/*!
+ \internal
+ */
+void CodeParser::setLink(Node *node, Node::LinkType linkType, const QString &arg)
+{
+ QString link;
+ QString desc;
+ extractPageLinkAndDesc(arg, &link, &desc);
+ node->setLink(linkType, link, desc);
+}
+
+/*!
+ \brief Test for whether a doc comment warrants warnings.
+
+ Returns true if qdoc should report that it has found something
+ wrong with the qdoc comment in \a doc. Sometimes, qdoc should
+ not report the warning, for example, when the comment contains
+ the \c internal command, which normally means qdoc will not use
+ the comment in the documentation anyway, so there is no point
+ in reporting warnings about it.
+ */
+bool CodeParser::isWorthWarningAbout(const Doc &doc)
+{
+ return (Config::instance().showInternal()
+ || !doc.metaCommandsUsed().contains(QStringLiteral("internal")));
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/codeparser.h b/src/qdoc/qdoc/src/qdoc/codeparser.h
new file mode 100644
index 000000000..6357b3a21
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/codeparser.h
@@ -0,0 +1,141 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef CODEPARSER_H
+#define CODEPARSER_H
+
+#include "node.h"
+
+#include <QtCore/qset.h>
+
+QT_BEGIN_NAMESPACE
+
+#define COMMAND_ABSTRACT QLatin1String("abstract")
+#define COMMAND_CLASS QLatin1String("class")
+#define COMMAND_COMPARES QLatin1String("compares")
+#define COMMAND_COMPARESWITH QLatin1String("compareswith")
+#define COMMAND_DEFAULT QLatin1String("default")
+#define COMMAND_DEPRECATED QLatin1String("deprecated") // ### don't document
+#define COMMAND_DONTDOCUMENT QLatin1String("dontdocument")
+#define COMMAND_ENUM QLatin1String("enum")
+#define COMMAND_EXAMPLE QLatin1String("example")
+#define COMMAND_EXTERNALPAGE QLatin1String("externalpage")
+#define COMMAND_FN QLatin1String("fn")
+#define COMMAND_GROUP QLatin1String("group")
+#define COMMAND_HEADERFILE QLatin1String("headerfile")
+#define COMMAND_INGROUP QLatin1String("ingroup")
+#define COMMAND_INHEADERFILE QLatin1String("inheaderfile")
+#define COMMAND_INMODULE QLatin1String("inmodule") // ### don't document
+#define COMMAND_INPUBLICGROUP QLatin1String("inpublicgroup")
+#define COMMAND_INQMLMODULE QLatin1String("inqmlmodule")
+#define COMMAND_INTERNAL QLatin1String("internal")
+#define COMMAND_MACRO QLatin1String("macro")
+#define COMMAND_MODULE QLatin1String("module")
+#define COMMAND_MODULESTATE QLatin1String("modulestate")
+#define COMMAND_NAMESPACE QLatin1String("namespace")
+#define COMMAND_NEXTPAGE QLatin1String("nextpage")
+#define COMMAND_NOAUTOLIST QLatin1String("noautolist")
+#define COMMAND_NONREENTRANT QLatin1String("nonreentrant")
+#define COMMAND_OBSOLETE QLatin1String("obsolete")
+#define COMMAND_OVERLOAD QLatin1String("overload")
+#define COMMAND_PAGE QLatin1String("page")
+#define COMMAND_PRELIMINARY QLatin1String("preliminary")
+#define COMMAND_PREVIOUSPAGE QLatin1String("previouspage")
+#define COMMAND_PROPERTY QLatin1String("property")
+#define COMMAND_QMLABSTRACT QLatin1String("qmlabstract")
+#define COMMAND_QMLATTACHEDMETHOD QLatin1String("qmlattachedmethod")
+#define COMMAND_QMLATTACHEDPROPERTY QLatin1String("qmlattachedproperty")
+#define COMMAND_QMLATTACHEDSIGNAL QLatin1String("qmlattachedsignal")
+#define COMMAND_QMLVALUETYPE QLatin1String("qmlvaluetype")
+#define COMMAND_QMLCLASS QLatin1String("qmlclass")
+#define COMMAND_QMLDEFAULT QLatin1String("qmldefault")
+#define COMMAND_QMLENUMERATORSFROM QLatin1String("qmlenumeratorsfrom")
+#define COMMAND_QMLINHERITS QLatin1String("inherits")
+#define COMMAND_QMLINSTANTIATES QLatin1String("instantiates")
+#define COMMAND_QMLMETHOD QLatin1String("qmlmethod")
+#define COMMAND_QMLMODULE QLatin1String("qmlmodule")
+#define COMMAND_QMLPROPERTY QLatin1String("qmlproperty")
+#define COMMAND_QMLPROPERTYGROUP QLatin1String("qmlpropertygroup")
+#define COMMAND_QMLREADONLY QLatin1String("readonly")
+#define COMMAND_QMLREQUIRED QLatin1String("required")
+#define COMMAND_QMLSIGNAL QLatin1String("qmlsignal")
+#define COMMAND_QMLTYPE QLatin1String("qmltype")
+#define COMMAND_QTCMAKEPACKAGE QLatin1String("qtcmakepackage")
+#define COMMAND_QTCMAKETARGETITEM QLatin1String("qtcmaketargetitem")
+#define COMMAND_QTVARIABLE QLatin1String("qtvariable")
+#define COMMAND_REENTRANT QLatin1String("reentrant")
+#define COMMAND_REIMP QLatin1String("reimp")
+#define COMMAND_RELATES QLatin1String("relates")
+#define COMMAND_SINCE QLatin1String("since")
+#define COMMAND_STRUCT QLatin1String("struct")
+#define COMMAND_SUBTITLE QLatin1String("subtitle")
+#define COMMAND_STARTPAGE QLatin1String("startpage")
+#define COMMAND_THREADSAFE QLatin1String("threadsafe")
+#define COMMAND_TITLE QLatin1String("title")
+#define COMMAND_TYPEALIAS QLatin1String("typealias")
+#define COMMAND_TYPEDEF QLatin1String("typedef")
+#define COMMAND_VARIABLE QLatin1String("variable")
+#define COMMAND_VERSION QLatin1String("version")
+#define COMMAND_UNION QLatin1String("union")
+#define COMMAND_WRAPPER QLatin1String("wrapper")
+#define COMMAND_ATTRIBUTION QLatin1String("attribution")
+
+// deprecated alias of qmlvaluetype
+#define COMMAND_QMLBASICTYPE QLatin1String("qmlbasictype")
+
+class Location;
+class QString;
+class QDocDatabase;
+class CppCodeParser;
+
+struct UntiedDocumentation {
+ Doc documentation;
+ QStringList context;
+};
+
+struct TiedDocumentation {
+ Doc documentation;
+ Node* node;
+};
+
+class CodeParser
+{
+public:
+ static inline const QSet<QString> common_meta_commands{
+ COMMAND_ABSTRACT, COMMAND_DEFAULT, COMMAND_DEPRECATED, COMMAND_INGROUP,
+ COMMAND_INMODULE, COMMAND_INPUBLICGROUP, COMMAND_INQMLMODULE, COMMAND_INTERNAL,
+ COMMAND_MODULESTATE, COMMAND_NOAUTOLIST, COMMAND_NONREENTRANT, COMMAND_OBSOLETE,
+ COMMAND_PRELIMINARY, COMMAND_QMLABSTRACT, COMMAND_QMLDEFAULT, COMMAND_QMLENUMERATORSFROM, COMMAND_QMLINHERITS,
+ COMMAND_QMLREADONLY, COMMAND_QMLREQUIRED, COMMAND_QTCMAKEPACKAGE, COMMAND_QTCMAKETARGETITEM,
+ COMMAND_QTVARIABLE, COMMAND_REENTRANT, COMMAND_SINCE, COMMAND_STARTPAGE, COMMAND_SUBTITLE,
+ COMMAND_THREADSAFE, COMMAND_TITLE, COMMAND_WRAPPER, COMMAND_ATTRIBUTION,
+ };
+
+public:
+ CodeParser();
+ virtual ~CodeParser();
+
+ virtual void initializeParser() = 0;
+ virtual void terminateParser();
+ virtual QString language() = 0;
+ virtual QStringList sourceFileNameFilter() = 0;
+ virtual void parseSourceFile(const Location &location, const QString &filePath, CppCodeParser& cpp_code_parser) = 0;
+
+ static void initialize();
+ static void terminate();
+ static CodeParser *parserForLanguage(const QString &language);
+ static CodeParser *parserForSourceFile(const QString &filePath);
+ static void setLink(Node *node, Node::LinkType linkType, const QString &arg);
+ static bool isWorthWarningAbout(const Doc &doc);
+
+protected:
+ static void extractPageLinkAndDesc(QStringView arg, QString *link, QString *desc);
+ QDocDatabase *m_qdb {};
+
+private:
+ static QList<CodeParser *> s_parsers;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/collectionnode.cpp b/src/qdoc/qdoc/src/qdoc/collectionnode.cpp
new file mode 100644
index 000000000..833a9d037
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/collectionnode.cpp
@@ -0,0 +1,104 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "collectionnode.h"
+
+#include <QtCore/qstringlist.h>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class CollectionNode
+ \brief A class for holding the members of a collection of doc pages.
+ */
+
+/*!
+ Appends \a node to the collection node's member list, if
+ and only if it isn't already in the member list.
+ */
+void CollectionNode::addMember(Node *node)
+{
+ if (!m_members.contains(node))
+ m_members.append(node);
+}
+
+/*!
+ Returns \c true if this collection node contains at least
+ one namespace node.
+ */
+bool CollectionNode::hasNamespaces() const
+{
+ return std::any_of(m_members.cbegin(), m_members.cend(), [](const Node *member) {
+ return member->isClassNode() && member->isInAPI();
+ });
+}
+
+/*!
+ Returns \c true if this collection node contains at least
+ one class node.
+ */
+bool CollectionNode::hasClasses() const
+{
+ return std::any_of(m_members.cbegin(), m_members.cend(), [](const Node *member) {
+ return member->isClassNode() && member->isInAPI();
+ });
+}
+
+/*!
+ \fn template <typename F> NodeMap CollectionNode::getMembers(const F &&predicate) const
+
+ Returns a map containing this collection node's member nodes for which \c
+ predicate(node) returns \c true. The \a predicate is a function or a
+ lambda that takes a const Node pointer as an argument and returns a bool.
+*/
+
+/*!
+ \fn NodeMap CollectionNode::getMembers(Node::NodeType type) const
+
+ Returns a map containing this collection node's member nodes with
+ a specified node \a type.
+*/
+
+/*!
+ Returns the logical module version.
+*/
+QString CollectionNode::logicalModuleVersion() const
+{
+ QStringList version;
+ version << m_logicalModuleVersionMajor << m_logicalModuleVersionMinor;
+ version.removeAll(QString());
+ return version.join(".");
+}
+
+/*!
+ This function accepts the logical module \a info as a string
+ list. If the logical module info contains the version number,
+ it splits the version number on the '.' character to get the
+ major and minor version numbers. Both major and minor version
+ numbers should be provided, but the minor version number is
+ not strictly necessary.
+ */
+void CollectionNode::setLogicalModuleInfo(const QStringList &info)
+{
+ m_logicalModuleName = info[0];
+ if (info.size() > 1) {
+ QStringList dotSplit = info[1].split(QLatin1Char('.'));
+ m_logicalModuleVersionMajor = dotSplit[0];
+ if (dotSplit.size() > 1)
+ m_logicalModuleVersionMinor = dotSplit[1];
+ else
+ m_logicalModuleVersionMinor = "0";
+ }
+}
+
+/*!
+ \fn void CollectionNode::setState(const QString &state)
+ \fn QString CollectionNode::state()
+
+ Sets or gets a description of this module's state. For example,
+ \e {"Technical Preview"}. This string is used when generating the
+ module's documentation page and reference pages of the module's
+ members.
+*/
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/collectionnode.h b/src/qdoc/qdoc/src/qdoc/collectionnode.h
new file mode 100644
index 000000000..3756d3534
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/collectionnode.h
@@ -0,0 +1,126 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef COLLECTIONNODE_H
+#define COLLECTIONNODE_H
+
+#include "pagenode.h"
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+class CollectionNode : public PageNode
+{
+public:
+ CollectionNode(NodeType type, Aggregate *parent, const QString &name)
+ : PageNode(type, parent, name)
+ {
+ }
+
+ [[nodiscard]] bool isCollectionNode() const override { return true; }
+ [[nodiscard]] QString qtVariable() const override { return m_qtVariable; }
+ void setQtVariable(const QString &v) override { m_qtVariable = v; }
+ [[nodiscard]] QString qtCMakeComponent() const override { return m_qtCMakeComponent; }
+ [[nodiscard]] QString qtCMakeTargetItem() const override { return m_qtCMakeTargetItem; }
+ void setQtCMakeComponent(const QString &target) override { m_qtCMakeComponent = target; }
+ void setQtCMakeTargetItem(const QString &target) override { m_qtCMakeTargetItem = target; }
+ void addMember(Node *node) override;
+ [[nodiscard]] bool hasNamespaces() const override;
+ [[nodiscard]] bool hasClasses() const override;
+ [[nodiscard]] bool wasSeen() const override { return m_seen; }
+
+ [[nodiscard]] QString fullTitle() const override { return title(); }
+ [[nodiscard]] QString logicalModuleName() const override { return m_logicalModuleName; }
+ [[nodiscard]] QString logicalModuleVersion() const override;
+ [[nodiscard]] QString logicalModuleIdentifier() const override
+ {
+ return m_logicalModuleName + m_logicalModuleVersionMajor;
+ }
+ [[nodiscard]] QString state() const { return m_state; }
+
+ template <typename F>
+ NodeMap getMembers(F &&predicate) const
+ {
+ NodeMap result;
+ for (const auto &member : std::as_const(m_members)) {
+ if (std::invoke(predicate, member) && member->isInAPI())
+ result.insert(member->name(), member);
+ }
+ return result;
+ }
+
+ NodeMap getMembers(Node::NodeType type) const
+ {
+ return getMembers([type](const Node *n) {
+ return n->nodeType() == type;
+ });
+ }
+
+ void setLogicalModuleInfo(const QStringList &info) override;
+ void setState(const QString &state) { m_state = state; }
+
+ // REMARK: Those methods are used by QDocDatabase as a performance
+ // detail to avoid merging a collection node multiple times. They
+ // should not be addressed in any other part of the code nor
+ // should their usage appear more than once in QDocDatabase,
+ // albeit this is not enforced.
+ // More information are provided in the comment for the definition
+ // of m_merged.
+ void markMerged() { m_merged = true; }
+ bool isMerged() { return m_merged; }
+
+ [[nodiscard]] const NodeList &members() const { return m_members; }
+
+ void markSeen() { m_seen = true; }
+ void markNotSeen() { m_seen = false; }
+
+private:
+ bool m_seen { false };
+ // REMARK: This is set by the database when merging the collection
+ // node and is later used to avoid merging the same collection
+ // multiple times.
+ // Currently, collection nodes may come from multiple projects,
+ // such that to have a complete overview of the members of a
+ // collection we need to rejoin all members for all instances of
+ // the "same" collection.
+ // This is done in QDocDatabase, generally through an external
+ // method call that is done ad-hoc when a source-of-truth
+ // collection node is needed.
+ // As each part of the code that need such a source-of-truth will
+ // need to merge the node, to avoid the overhead of a relatively
+ // expensive operation being performed multiple times, we expose
+ // this detail so that QDocDatabase can avoid performing the
+ // operation again.
+ // To avoid the coupling, QDocDatabase could keep track of the
+ // merged nodes itself, this is a bit less trivial that this
+ // implementation and doesn't address the source of the problem
+ // (the multiple merges themselves and the sequencing of the
+ // related operations) and as such was discarded in favor of this
+ // simpler implementation.
+ // Do note that outside the very specific purpose for which this
+ // member was made, no part of the code should refer to it and its
+ // associated methods.
+ // Should this start to be the case, we can switch to the more
+ // complex encapsulation into QDocDatabase without having to touch
+ // the outside user of the merges.
+ // Further down the line, this is expected to go away completely
+ // as other part of the code are streamlined.
+ // KLUDGE: Note that this whole exposure is done as a hackish
+ // solution to QTBUG-104237 and should not be considered final or
+ // dependable.
+ bool m_merged { false };
+ NodeList m_members {};
+ QString m_logicalModuleName {};
+ QString m_logicalModuleVersionMajor {};
+ QString m_logicalModuleVersionMinor {};
+ QString m_qtVariable {};
+ QString m_qtCMakeComponent {};
+ QString m_qtCMakeTargetItem {};
+ QString m_state {};
+};
+
+QT_END_NAMESPACE
+
+#endif // COLLECTIONNODE_H
diff --git a/src/qdoc/qdoc/src/qdoc/comparisoncategory.cpp b/src/qdoc/qdoc/src/qdoc/comparisoncategory.cpp
new file mode 100644
index 000000000..98f7aaf66
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/comparisoncategory.cpp
@@ -0,0 +1,28 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+/*!
+ \enum ComparisonCategory
+ \internal
+
+ \value None No comparison is defined.
+ \value Strong Strong comparison is defined, see std::strong_ordering.
+ \value Weak Weak comparison is defined, see std::weak_ordering.
+ \value Partial A partial ordering is defined, see std::partial_ordering.
+ \value Equality Only (in)equality comparison is defined.
+*/
+
+/*!
+ \fn static inline std::string comparisonCategoryAsString(const ComparisonCategory &category)
+ \internal
+
+ Returns a string representation of the comparison category \a category.
+*/
+
+/*!
+ \fn static ComparisonCategory comparisonCategoryFromString(const std::string &string)
+ \internal
+
+ Returns a matching comparison category for a \a string representation, or
+ ComparisonCategory::None for an unknown category string.
+*/
diff --git a/src/qdoc/qdoc/src/qdoc/comparisoncategory.h b/src/qdoc/qdoc/src/qdoc/comparisoncategory.h
new file mode 100644
index 000000000..d3f36654b
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/comparisoncategory.h
@@ -0,0 +1,54 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef COMPARISONCATEGORY_H
+#define COMPARISONCATEGORY_H
+
+#include <string>
+
+QT_BEGIN_NAMESPACE
+
+enum struct ComparisonCategory : unsigned char {
+ None,
+ Strong,
+ Weak,
+ Partial,
+ Equality
+};
+
+static inline std::string comparisonCategoryAsString(ComparisonCategory category)
+{
+ switch (category) {
+ case ComparisonCategory::Strong:
+ return "strong";
+ case ComparisonCategory::Weak:
+ return "weak";
+ case ComparisonCategory::Partial:
+ return "partial";
+ case ComparisonCategory::Equality:
+ return "equality";
+ case ComparisonCategory::None:
+ [[fallthrough]];
+ default:
+ break;
+ }
+ return {};
+}
+
+static inline ComparisonCategory comparisonCategoryFromString(const std::string &string)
+{
+ if (string == "strong")
+ return ComparisonCategory::Strong;
+ if (string == "weak")
+ return ComparisonCategory::Weak;
+ if (string == "partial")
+ return ComparisonCategory::Partial;
+ if (string == "equality")
+ return ComparisonCategory::Equality;
+
+ return ComparisonCategory::None;
+}
+
+QT_END_NAMESPACE
+
+#endif // COMPARISONCATEGORY_H
diff --git a/src/qdoc/qdoc/src/qdoc/config.cpp b/src/qdoc/qdoc/src/qdoc/config.cpp
new file mode 100644
index 000000000..c60ef9fac
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/config.cpp
@@ -0,0 +1,1438 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "config.h"
+#include "utilities.h"
+
+#include <QtCore/qdir.h>
+#include <QtCore/qfile.h>
+#include <QtCore/qtemporaryfile.h>
+#include <QtCore/qtextstream.h>
+#include <QtCore/qvariant.h>
+#include <QtCore/qregularexpression.h>
+
+QT_BEGIN_NAMESPACE
+
+QString ConfigStrings::AUTOLINKERRORS = QStringLiteral("autolinkerrors");
+QString ConfigStrings::BUILDVERSION = QStringLiteral("buildversion");
+QString ConfigStrings::CODEINDENT = QStringLiteral("codeindent");
+QString ConfigStrings::CODEPREFIX = QStringLiteral("codeprefix");
+QString ConfigStrings::CODESUFFIX = QStringLiteral("codesuffix");
+QString ConfigStrings::CPPCLASSESPAGE = QStringLiteral("cppclassespage");
+QString ConfigStrings::CPPCLASSESTITLE = QStringLiteral("cppclassestitle");
+QString ConfigStrings::DEFINES = QStringLiteral("defines");
+QString ConfigStrings::DEPENDS = QStringLiteral("depends");
+QString ConfigStrings::DESCRIPTION = QStringLiteral("description");
+QString ConfigStrings::DOCBOOKEXTENSIONS = QStringLiteral("usedocbookextensions");
+QString ConfigStrings::ENDHEADER = QStringLiteral("endheader");
+QString ConfigStrings::EXAMPLEDIRS = QStringLiteral("exampledirs");
+QString ConfigStrings::EXAMPLES = QStringLiteral("examples");
+QString ConfigStrings::EXAMPLESINSTALLPATH = QStringLiteral("examplesinstallpath");
+QString ConfigStrings::EXCLUDEDIRS = QStringLiteral("excludedirs");
+QString ConfigStrings::EXCLUDEFILES = QStringLiteral("excludefiles");
+QString ConfigStrings::EXTRAIMAGES = QStringLiteral("extraimages");
+QString ConfigStrings::FALSEHOODS = QStringLiteral("falsehoods");
+QString ConfigStrings::FORMATTING = QStringLiteral("formatting");
+QString ConfigStrings::HEADERDIRS = QStringLiteral("headerdirs");
+QString ConfigStrings::HEADERS = QStringLiteral("headers");
+QString ConfigStrings::HEADERSCRIPTS = QStringLiteral("headerscripts");
+QString ConfigStrings::HEADERSTYLES = QStringLiteral("headerstyles");
+QString ConfigStrings::HOMEPAGE = QStringLiteral("homepage");
+QString ConfigStrings::HOMETITLE = QStringLiteral("hometitle");
+QString ConfigStrings::IGNOREDIRECTIVES = QStringLiteral("ignoredirectives");
+QString ConfigStrings::IGNORESINCE = QStringLiteral("ignoresince");
+QString ConfigStrings::IGNORETOKENS = QStringLiteral("ignoretokens");
+QString ConfigStrings::IGNOREWORDS = QStringLiteral("ignorewords");
+QString ConfigStrings::IMAGEDIRS = QStringLiteral("imagedirs");
+QString ConfigStrings::INCLUDEPATHS = QStringLiteral("includepaths");
+QString ConfigStrings::INCLUSIVE = QStringLiteral("inclusive");
+QString ConfigStrings::INDEXES = QStringLiteral("indexes");
+QString ConfigStrings::LANDINGPAGE = QStringLiteral("landingpage");
+QString ConfigStrings::LANDINGTITLE = QStringLiteral("landingtitle");
+QString ConfigStrings::LANGUAGE = QStringLiteral("language");
+QString ConfigStrings::LOCATIONINFO = QStringLiteral("locationinfo");
+QString ConfigStrings::LOGPROGRESS = QStringLiteral("logprogress");
+QString ConfigStrings::MACRO = QStringLiteral("macro");
+QString ConfigStrings::MANIFESTMETA = QStringLiteral("manifestmeta");
+QString ConfigStrings::MODULEHEADER = QStringLiteral("moduleheader");
+QString ConfigStrings::NATURALLANGUAGE = QStringLiteral("naturallanguage");
+QString ConfigStrings::NAVIGATION = QStringLiteral("navigation");
+QString ConfigStrings::NOLINKERRORS = QStringLiteral("nolinkerrors");
+QString ConfigStrings::OUTPUTDIR = QStringLiteral("outputdir");
+QString ConfigStrings::OUTPUTFORMATS = QStringLiteral("outputformats");
+QString ConfigStrings::OUTPUTPREFIXES = QStringLiteral("outputprefixes");
+QString ConfigStrings::OUTPUTSUFFIXES = QStringLiteral("outputsuffixes");
+QString ConfigStrings::PROJECT = QStringLiteral("project");
+QString ConfigStrings::REDIRECTDOCUMENTATIONTODEVNULL =
+ QStringLiteral("redirectdocumentationtodevnull");
+QString ConfigStrings::QHP = QStringLiteral("qhp");
+QString ConfigStrings::QUOTINGINFORMATION = QStringLiteral("quotinginformation");
+QString ConfigStrings::SCRIPTS = QStringLiteral("scripts");
+QString ConfigStrings::SHOWINTERNAL = QStringLiteral("showinternal");
+QString ConfigStrings::SINGLEEXEC = QStringLiteral("singleexec");
+QString ConfigStrings::SOURCEDIRS = QStringLiteral("sourcedirs");
+QString ConfigStrings::SOURCEENCODING = QStringLiteral("sourceencoding");
+QString ConfigStrings::SOURCES = QStringLiteral("sources");
+QString ConfigStrings::SPURIOUS = QStringLiteral("spurious");
+QString ConfigStrings::STYLESHEETS = QStringLiteral("stylesheets");
+QString ConfigStrings::SYNTAXHIGHLIGHTING = QStringLiteral("syntaxhighlighting");
+QString ConfigStrings::TABSIZE = QStringLiteral("tabsize");
+QString ConfigStrings::TAGFILE = QStringLiteral("tagfile");
+QString ConfigStrings::TIMESTAMPS = QStringLiteral("timestamps");
+QString ConfigStrings::TOCTITLES = QStringLiteral("toctitles");
+QString ConfigStrings::URL = QStringLiteral("url");
+QString ConfigStrings::VERSION = QStringLiteral("version");
+QString ConfigStrings::VERSIONSYM = QStringLiteral("versionsym");
+QString ConfigStrings::FILEEXTENSIONS = QStringLiteral("fileextensions");
+QString ConfigStrings::IMAGEEXTENSIONS = QStringLiteral("imageextensions");
+QString ConfigStrings::QMLTYPESPAGE = QStringLiteral("qmltypespage");
+QString ConfigStrings::QMLTYPESTITLE = QStringLiteral("qmltypestitle");
+QString ConfigStrings::WARNINGLIMIT = QStringLiteral("warninglimit");
+
+/*!
+ An entry in a stack, where each entry is a list
+ of string values.
+ */
+class MetaStackEntry
+{
+public:
+ void open();
+ void close();
+
+ QStringList accum;
+ QStringList next;
+};
+Q_DECLARE_TYPEINFO(MetaStackEntry, Q_RELOCATABLE_TYPE);
+
+/*!
+ Start accumulating values in a list by appending an empty
+ string to the list.
+ */
+void MetaStackEntry::open()
+{
+ next.append(QString());
+}
+
+/*!
+ Stop accumulating values and append the list of accumulated
+ values to the complete list of accumulated values.
+
+ */
+void MetaStackEntry::close()
+{
+ accum += next;
+ next.clear();
+}
+
+/*!
+ \class MetaStack
+
+ This class maintains a stack of values of config file variables.
+*/
+class MetaStack : private QStack<MetaStackEntry>
+{
+public:
+ MetaStack();
+
+ void process(QChar ch, const Location &location);
+ QStringList getExpanded(const Location &location);
+};
+
+/*!
+ The default constructor pushes a new stack entry and
+ opens it.
+ */
+MetaStack::MetaStack()
+{
+ push(MetaStackEntry());
+ top().open();
+}
+
+/*!
+ Processes the character \a ch using the \a location.
+ It really just builds up a name by appending \a ch to
+ it.
+ */
+void MetaStack::process(QChar ch, const Location &location)
+{
+ if (ch == QLatin1Char('{')) {
+ push(MetaStackEntry());
+ top().open();
+ } else if (ch == QLatin1Char('}')) {
+ if (size() == 1)
+ location.fatal(QStringLiteral("Unexpected '}'"));
+
+ top().close();
+ const QStringList suffixes = pop().accum;
+ const QStringList prefixes = top().next;
+
+ top().next.clear();
+ for (const auto &prefix : prefixes) {
+ for (const auto &suffix : suffixes)
+ top().next << prefix + suffix;
+ }
+ } else if (ch == QLatin1Char(',') && size() > 1) {
+ top().close();
+ top().open();
+ } else {
+ for (QString &topNext : top().next)
+ topNext += ch;
+ }
+}
+
+/*!
+ Returns the accumulated string values.
+ */
+QStringList MetaStack::getExpanded(const Location &location)
+{
+ if (size() > 1)
+ location.fatal(QStringLiteral("Missing '}'"));
+
+ top().close();
+ return top().accum;
+}
+
+const QString Config::dot = QLatin1String(".");
+bool Config::m_debug = false;
+bool Config::m_atomsDump = false;
+bool Config::generateExamples = true;
+QString Config::overrideOutputDir;
+QString Config::installDir;
+QSet<QString> Config::overrideOutputFormats;
+QMap<QString, QString> Config::m_extractedDirs;
+QStack<QString> Config::m_workingDirs;
+QMap<QString, QStringList> Config::m_includeFilesMap;
+
+/*!
+ \class ConfigVar
+ \brief contains all the information for a single config variable in a
+ .qdocconf file.
+*/
+
+/*!
+ Returns this configuration variable as a string.
+
+ If the variable is not defined, returns \a defaultString.
+
+ \note By default, \a defaultString is a null string.
+ This allows determining whether a configuration variable is
+ undefined (returns a null string) or defined as empty
+ (returns a non-null, empty string).
+*/
+QString ConfigVar::asString(const QString defaultString) const
+{
+ if (m_name.isEmpty())
+ return defaultString;
+
+ QString result(""); // an empty but non-null string
+ for (const auto &value : std::as_const(m_values)) {
+ if (!result.isEmpty() && !result.endsWith(QChar('\n')))
+ result.append(QChar(' '));
+ result.append(value.m_value);
+ }
+ return result;
+}
+
+/*!
+ Returns this config variable as a string list.
+*/
+QStringList ConfigVar::asStringList() const
+{
+ QStringList result;
+ for (const auto &value : std::as_const(m_values))
+ result << value.m_value;
+ return result;
+}
+
+/*!
+ Returns this config variable as a string set.
+*/
+QSet<QString> ConfigVar::asStringSet() const
+{
+ const auto &stringList = asStringList();
+ return QSet<QString>(stringList.cbegin(), stringList.cend());
+}
+
+/*!
+ Returns this config variable as a boolean.
+*/
+bool ConfigVar::asBool() const
+{
+ return QVariant(asString()).toBool();
+}
+
+/*!
+ Returns this configuration variable as an integer; iterates
+ through the string list, interpreting each
+ string in the list as an integer and adding it to a total sum.
+
+ Returns 0 if this variable is defined as empty, and
+ -1 if it's is not defined.
+ */
+int ConfigVar::asInt() const
+{
+ const QStringList strs = asStringList();
+ if (strs.isEmpty())
+ return -1;
+
+ int sum = 0;
+ for (const auto &str : strs)
+ sum += str.toInt();
+ return sum;
+}
+
+/*!
+ Appends values to this ConfigVar, and adjusts the ExpandVar
+ parameters so that they continue to refer to the correct values.
+*/
+void ConfigVar::append(const ConfigVar &other)
+{
+ m_expandVars << other.m_expandVars;
+ QList<ExpandVar>::Iterator it = m_expandVars.end();
+ it -= other.m_expandVars.size();
+ std::for_each(it, m_expandVars.end(), [this](ExpandVar &v) {
+ v.m_valueIndex += m_values.size();
+ });
+ m_values << other.m_values;
+ m_location = other.m_location;
+}
+
+/*!
+ \class Config
+ \brief The Config class contains the configuration variables
+ for controlling how qdoc produces documentation.
+
+ Its load() function reads, parses, and processes a qdocconf file.
+ */
+
+/*!
+ \enum Config::PathFlags
+
+ Flags used for retrieving canonicalized paths from Config.
+
+ \value Validate
+ Issue a warning for paths that do not exist and
+ remove them from the returned list.
+
+ \value IncludePaths
+ Assume the variable contains include paths with
+ prefixes such as \c{-I} that are to be removed
+ before canonicalizing and then re-inserted.
+
+ \omitvalue None
+
+ \sa getCanonicalPathList()
+*/
+
+/*!
+ Initializes the Config with \a programName and sets all
+ internal state variables to either default values or to ones
+ defined in command line arguments \a args.
+ */
+void Config::init(const QString &programName, const QStringList &args)
+{
+ m_prog = programName;
+ processCommandLineOptions(args);
+ reset();
+}
+
+Config::~Config()
+{
+ clear();
+}
+
+/*!
+ Clears the location and internal maps for config variables.
+ */
+void Config::clear()
+{
+ m_location = Location();
+ m_configVars.clear();
+ m_includeFilesMap.clear();
+ m_excludedPaths.reset();
+}
+
+/*!
+ Resets the Config instance - used by load()
+ */
+void Config::reset()
+{
+ clear();
+
+ // Default values
+ setStringList(CONFIG_CODEINDENT, QStringList("0"));
+ setStringList(CONFIG_FALSEHOODS, QStringList("0"));
+ setStringList(CONFIG_HEADERS + dot + CONFIG_FILEEXTENSIONS, QStringList("*.ch *.h *.h++ *.hh *.hpp *.hxx"));
+ setStringList(CONFIG_SOURCES + dot + CONFIG_FILEEXTENSIONS, QStringList("*.c++ *.cc *.cpp *.cxx *.mm *.qml *.qdoc"));
+ setStringList(CONFIG_LANGUAGE, QStringList("Cpp")); // i.e. C++
+ setStringList(CONFIG_OUTPUTFORMATS, QStringList("HTML"));
+ setStringList(CONFIG_TABSIZE, QStringList("8"));
+ setStringList(CONFIG_LOCATIONINFO, QStringList("true"));
+
+ // Publish options from the command line as config variables
+ const auto setListFlag = [this](const QString &key, bool test) {
+ setStringList(key, QStringList(test ? QStringLiteral("true") : QStringLiteral("false")));
+ };
+#define SET(opt, test) setListFlag(opt, m_parser.isSet(m_parser.test))
+ SET(CONFIG_SYNTAXHIGHLIGHTING, highlightingOption);
+ SET(CONFIG_SHOWINTERNAL, showInternalOption);
+ SET(CONFIG_SINGLEEXEC, singleExecOption);
+ SET(CONFIG_REDIRECTDOCUMENTATIONTODEVNULL, redirectDocumentationToDevNullOption);
+ SET(CONFIG_AUTOLINKERRORS, autoLinkErrorsOption);
+#undef SET
+ m_showInternal = m_configVars.value(CONFIG_SHOWINTERNAL).asBool();
+ setListFlag(CONFIG_NOLINKERRORS,
+ m_parser.isSet(m_parser.noLinkErrorsOption)
+ || qEnvironmentVariableIsSet("QDOC_NOLINKERRORS"));
+
+ // CONFIG_DEFINES and CONFIG_INCLUDEPATHS are set in load()
+}
+
+/*!
+ Loads and parses the qdoc configuration file \a fileName.
+ If a previous project was loaded, this function first resets the
+ Config instance. Then it calls the other load() function, which
+ does the loading, parsing, and processing of the configuration file.
+ */
+void Config::load(const QString &fileName)
+{
+ // Reset if a previous project was loaded
+ if (m_configVars.contains(CONFIG_PROJECT))
+ reset();
+
+ load(Location(), fileName);
+ if (m_location.isEmpty())
+ m_location = Location(fileName);
+ else
+ m_location.setEtc(true);
+
+ expandVariables();
+
+ // Add defines and includepaths from command line to their
+ // respective configuration variables. Values set here are
+ // always added to what's defined in configuration file.
+ insertStringList(CONFIG_DEFINES, m_defines);
+ insertStringList(CONFIG_INCLUDEPATHS, m_includePaths);
+
+ // Prefetch values that are used internally
+ m_exampleFiles = getCanonicalPathList(CONFIG_EXAMPLES);
+ m_exampleDirs = getCanonicalPathList(CONFIG_EXAMPLEDIRS);
+}
+
+/*!
+ Expands other config variables referred to in all stored ConfigVars.
+*/
+void Config::expandVariables()
+{
+ for (auto &configVar : m_configVars) {
+ for (auto it = configVar.m_expandVars.crbegin(); it != configVar.m_expandVars.crend(); ++it) {
+ Q_ASSERT(it->m_valueIndex < configVar.m_values.size());
+ const QString &key = it->m_var;
+ const auto &refVar = m_configVars.value(key);
+ if (refVar.m_name.isEmpty()) {
+ configVar.m_location.fatal(
+ QStringLiteral("Environment or configuration variable '%1' undefined")
+ .arg(it->m_var));
+ } else if (!refVar.m_expandVars.empty()) {
+ configVar.m_location.fatal(
+ QStringLiteral("Nested variable expansion not allowed"),
+ QStringLiteral("When expanding '%1' at %2:%3")
+ .arg(refVar.m_name, refVar.m_location.filePath(),
+ QString::number(refVar.m_location.lineNo())));
+ }
+ QString expanded;
+ if (it->m_delim.isNull())
+ expanded = m_configVars.value(key).asStringList().join(QString());
+ else
+ expanded = m_configVars.value(key).asStringList().join(it->m_delim);
+ configVar.m_values[it->m_valueIndex].m_value.insert(it->m_index, expanded);
+ }
+ configVar.m_expandVars.clear();
+ }
+}
+
+/*!
+ Sets the \a values of a configuration variable \a var from a string list.
+ */
+void Config::setStringList(const QString &var, const QStringList &values)
+{
+ m_configVars.insert(var, ConfigVar(var, values, QDir::currentPath()));
+}
+
+/*!
+ Adds the \a values from a string list to the configuration variable \a var.
+ Existing value(s) are kept.
+*/
+void Config::insertStringList(const QString &var, const QStringList &values)
+{
+ m_configVars[var].append(ConfigVar(var, values, QDir::currentPath()));
+}
+
+/*!
+ Process and store variables from the command line.
+ */
+void Config::processCommandLineOptions(const QStringList &args)
+{
+ m_parser.process(args);
+
+ m_defines = m_parser.values(m_parser.defineOption);
+ m_dependModules = m_parser.values(m_parser.dependsOption);
+ setIndexDirs();
+ setIncludePaths();
+
+ generateExamples = !m_parser.isSet(m_parser.noExamplesOption);
+ if (m_parser.isSet(m_parser.installDirOption))
+ installDir = m_parser.value(m_parser.installDirOption);
+ if (m_parser.isSet(m_parser.outputDirOption))
+ overrideOutputDir = QDir(m_parser.value(m_parser.outputDirOption)).absolutePath();
+
+ const auto outputFormats = m_parser.values(m_parser.outputFormatOption);
+ for (const auto &format : outputFormats)
+ overrideOutputFormats.insert(format);
+ m_debug = m_parser.isSet(m_parser.debugOption) || qEnvironmentVariableIsSet("QDOC_DEBUG");
+ m_atomsDump = m_parser.isSet(m_parser.atomsDumpOption);
+ m_showInternal = m_parser.isSet(m_parser.showInternalOption)
+ || qEnvironmentVariableIsSet("QDOC_SHOW_INTERNAL");
+
+ if (m_parser.isSet(m_parser.prepareOption))
+ m_qdocPass = Prepare;
+ if (m_parser.isSet(m_parser.generateOption))
+ m_qdocPass = Generate;
+ if (m_debug || m_parser.isSet(m_parser.logProgressOption))
+ setStringList(CONFIG_LOGPROGRESS, QStringList("true"));
+ if (m_parser.isSet(m_parser.timestampsOption))
+ setStringList(CONFIG_TIMESTAMPS, QStringList("true"));
+ if (m_parser.isSet(m_parser.useDocBookExtensions))
+ setStringList(CONFIG_DOCBOOKEXTENSIONS, QStringList("true"));
+}
+
+void Config::setIncludePaths()
+{
+ QDir currentDir = QDir::current();
+ const auto addIncludePaths = [this, currentDir](const char *flag, const QStringList &paths) {
+ for (const auto &path : paths)
+ m_includePaths << currentDir.absoluteFilePath(path).insert(0, flag);
+ };
+
+ addIncludePaths("-I", m_parser.values(m_parser.includePathOption));
+#ifdef QDOC_PASS_ISYSTEM
+ addIncludePaths("-isystem", m_parser.values(m_parser.includePathSystemOption));
+#endif
+ addIncludePaths("-F", m_parser.values(m_parser.frameworkOption));
+}
+
+/*!
+ Stores paths from -indexdir command line option(s).
+ */
+void Config::setIndexDirs()
+{
+ m_indexDirs = m_parser.values(m_parser.indexDirOption);
+ auto it = std::remove_if(m_indexDirs.begin(), m_indexDirs.end(),
+ [](const QString &s) { return !QFile::exists(s); });
+
+ std::for_each(it, m_indexDirs.end(), [](const QString &s) {
+ qCWarning(lcQdoc) << "Cannot find index directory: " << s;
+ });
+ m_indexDirs.erase(it, m_indexDirs.end());
+}
+
+/*!
+ Function to return the correct outputdir for the output \a format.
+ If \a format is not specified, defaults to 'HTML'.
+ outputdir can be set using the qdocconf or the command-line
+ variable -outputdir.
+ */
+QString Config::getOutputDir(const QString &format) const
+{
+ QString t;
+ if (overrideOutputDir.isNull())
+ t = m_configVars.value(CONFIG_OUTPUTDIR).asString();
+ else
+ t = overrideOutputDir;
+ if (m_configVars.value(CONFIG_SINGLEEXEC).asBool()) {
+ QString project = m_configVars.value(CONFIG_PROJECT).asString();
+ t += QLatin1Char('/') + project.toLower();
+ }
+ if (m_configVars.value(format + Config::dot + "nosubdirs").asBool()) {
+ QString singleOutputSubdir = m_configVars.value(format + Config::dot + "outputsubdir").asString();
+ if (singleOutputSubdir.isEmpty())
+ singleOutputSubdir = "html";
+ t += QLatin1Char('/') + singleOutputSubdir;
+ }
+ return QDir::cleanPath(t);
+}
+
+/*!
+ Function to return the correct outputformats.
+ outputformats can be set using the qdocconf or the command-line
+ variable -outputformat.
+ */
+QSet<QString> Config::getOutputFormats() const
+{
+ if (overrideOutputFormats.isEmpty())
+ return m_configVars.value(CONFIG_OUTPUTFORMATS).asStringSet();
+ else
+ return overrideOutputFormats;
+}
+
+// TODO: [late-canonicalization][pod-configuration]
+// The canonicalization for paths is done at the time where they are
+// required, and done each time they are requested.
+// Instead, config should be parsed to an intermediate format that is
+// a POD type that already contains canonicalized representations for
+// each element.
+// Those representations should provide specific guarantees about
+// their format and be representable at the API boundaries.
+//
+// This would ensure that the correct canonicalization is always
+// applied, is applied only once and that dependent sub-logics can be
+// written in a way that doesn't require branching or futher
+// canonicalization.
+
+/*!
+ Returns a path list where all paths from the config variable \a var
+ are canonicalized. If \a flags contains \c Validate, outputs a warning
+ for invalid paths. The \c IncludePaths flag is used as a hint to strip
+ away potential prefixes found in include paths before attempting to
+ canonicalize.
+ */
+QStringList Config::getCanonicalPathList(const QString &var, PathFlags flags) const
+{
+ QStringList result;
+ const auto &configVar = m_configVars.value(var);
+
+ for (const auto &value : configVar.m_values) {
+ const QString &currentPath = value.m_path;
+ QString rawValue = value.m_value.simplified();
+ QString prefix;
+
+ if (flags & IncludePaths) {
+ const QStringList prefixes = QStringList()
+ << QLatin1String("-I")
+ << QLatin1String("-F")
+ << QLatin1String("-isystem");
+ const auto end = std::end(prefixes);
+ const auto it =
+ std::find_if(std::begin(prefixes), end,
+ [&rawValue](const QString &p) {
+ return rawValue.startsWith(p);
+ });
+ if (it != end) {
+ prefix = *it;
+ rawValue.remove(0, it->size());
+ if (rawValue.isEmpty())
+ continue;
+ } else {
+ prefix = prefixes[0]; // -I as default
+ }
+ }
+
+ QDir dir(rawValue.trimmed());
+ const QString path = dir.path();
+
+ if (dir.isRelative())
+ dir.setPath(currentPath + QLatin1Char('/') + path);
+ if ((flags & Validate) && !QFileInfo::exists(dir.path()))
+ configVar.m_location.warning(QStringLiteral("Cannot find file or directory: %1").arg(path));
+ else {
+ const QString canonicalPath = dir.canonicalPath();
+ if (!canonicalPath.isEmpty())
+ result.append(prefix + canonicalPath);
+ else if (path.contains(QLatin1Char('*')) || path.contains(QLatin1Char('?')))
+ result.append(path);
+ else
+ qCDebug(lcQdoc) <<
+ qUtf8Printable(QStringLiteral("%1: Ignored nonexistent path \'%2\'")
+ .arg(configVar.m_location.toString(), rawValue));
+ }
+ }
+ return result;
+}
+
+/*!
+ Calls getRegExpList() with the control variable \a var and
+ iterates through the resulting list of regular expressions,
+ concatenating them with extra characters to form a single
+ QRegularExpression, which is then returned.
+
+ \sa getRegExpList()
+ */
+QRegularExpression Config::getRegExp(const QString &var) const
+{
+ QString pattern;
+ const auto subRegExps = getRegExpList(var);
+
+ for (const auto &regExp : subRegExps) {
+ if (!regExp.isValid())
+ return regExp;
+ if (!pattern.isEmpty())
+ pattern += QLatin1Char('|');
+ pattern += QLatin1String("(?:") + regExp.pattern() + QLatin1Char(')');
+ }
+ if (pattern.isEmpty())
+ pattern = QLatin1String("$x"); // cannot match
+ return QRegularExpression(pattern);
+}
+
+/*!
+ Looks up the configuration variable \a var in the string list
+ map, converts the string list to a list of regular expressions,
+ and returns it.
+ */
+QList<QRegularExpression> Config::getRegExpList(const QString &var) const
+{
+ const QStringList strs = m_configVars.value(var).asStringList();
+ QList<QRegularExpression> regExps;
+ for (const auto &str : strs)
+ regExps += QRegularExpression(str);
+ return regExps;
+}
+
+/*!
+ This function is slower than it could be. What it does is
+ find all the keys that begin with \a var + dot and return
+ the matching keys in a set, stripped of the matching prefix
+ and dot.
+ */
+QSet<QString> Config::subVars(const QString &var) const
+{
+ QSet<QString> result;
+ QString varDot = var + QLatin1Char('.');
+ for (auto it = m_configVars.constBegin(); it != m_configVars.constEnd(); ++it) {
+ if (it.key().startsWith(varDot)) {
+ QString subVar = it.key().mid(varDot.size());
+ int dot = subVar.indexOf(QLatin1Char('.'));
+ if (dot != -1)
+ subVar.truncate(dot);
+ result.insert(subVar);
+ }
+ }
+ return result;
+}
+
+/*!
+ Searches for a path to \a fileName in 'sources', 'sourcedirs', and
+ 'exampledirs' config variables and returns a full path to the first
+ match found. If the file is not found, returns an empty string.
+ */
+QString Config::getIncludeFilePath(const QString &fileName) const
+{
+ QString ext = QFileInfo(fileName).suffix();
+
+ if (!m_includeFilesMap.contains(ext)) {
+ QStringList result = getCanonicalPathList(CONFIG_SOURCES);
+ result.erase(std::remove_if(result.begin(), result.end(),
+ [&](const QString &s) { return !s.endsWith(ext); }),
+ result.end());
+ const QStringList dirs =
+ getCanonicalPathList(CONFIG_SOURCEDIRS) +
+ getCanonicalPathList(CONFIG_EXAMPLEDIRS);
+
+ for (const auto &dir : dirs)
+ result += getFilesHere(dir, "*." + ext, location());
+ result.removeDuplicates();
+ m_includeFilesMap.insert(ext, result);
+ }
+ const QStringList &paths = (*m_includeFilesMap.find(ext));
+ QString match = fileName;
+ if (!match.startsWith('/'))
+ match.prepend('/');
+ for (const auto &path : paths) {
+ if (path.endsWith(match))
+ return path;
+ }
+ return QString();
+}
+
+/*!
+ Builds and returns a list of file pathnames for the file
+ type specified by \a filesVar (e.g. "headers" or "sources").
+ The files are found in the directories specified by
+ \a dirsVar, and they are filtered by \a defaultNameFilter
+ if a better filter can't be constructed from \a filesVar.
+ The directories in \a excludedDirs are avoided. The files
+ in \a excludedFiles are not included in the return list.
+ */
+QStringList Config::getAllFiles(const QString &filesVar, const QString &dirsVar,
+ const QSet<QString> &excludedDirs,
+ const QSet<QString> &excludedFiles)
+{
+ QStringList result = getCanonicalPathList(filesVar, Validate);
+ const QStringList dirs = getCanonicalPathList(dirsVar, Validate);
+
+ const QString nameFilter = m_configVars.value(filesVar + dot + CONFIG_FILEEXTENSIONS).asString();
+
+ for (const auto &dir : dirs)
+ result += getFilesHere(dir, nameFilter, location(), excludedDirs, excludedFiles);
+ return result;
+}
+
+QStringList Config::getExampleQdocFiles(const QSet<QString> &excludedDirs,
+ const QSet<QString> &excludedFiles)
+{
+ QStringList result;
+ const QStringList dirs = getCanonicalPathList("exampledirs");
+ const QString nameFilter = " *.qdoc";
+
+ for (const auto &dir : dirs)
+ result += getFilesHere(dir, nameFilter, location(), excludedDirs, excludedFiles);
+ return result;
+}
+
+QStringList Config::getExampleImageFiles(const QSet<QString> &excludedDirs,
+ const QSet<QString> &excludedFiles)
+{
+ QStringList result;
+ const QStringList dirs = getCanonicalPathList("exampledirs");
+ const QString nameFilter = m_configVars.value(CONFIG_EXAMPLES + dot + CONFIG_IMAGEEXTENSIONS).asString();
+
+ for (const auto &dir : dirs)
+ result += getFilesHere(dir, nameFilter, location(), excludedDirs, excludedFiles);
+ return result;
+}
+
+// TODO: [misplaced-logic][examples][pod-configuration]
+// The definition of how an example is structured and how to find its
+// components should not be part of Config or, for that matter,
+// CppCodeParser, which is the actual caller of this method.
+// Move this method to a more appropriate place as soon as a suitable
+// place is available for it.
+
+/*!
+ Returns the path to the project file for \a examplePath, or an empty string
+ if no project file was found.
+ */
+QString Config::getExampleProjectFile(const QString &examplePath)
+{
+ QFileInfo fileInfo(examplePath);
+ QStringList validNames;
+ validNames << QLatin1String("CMakeLists.txt")
+ << fileInfo.fileName() + QLatin1String(".pro")
+ << fileInfo.fileName() + QLatin1String(".qmlproject")
+ << fileInfo.fileName() + QLatin1String(".pyproject")
+ << QLatin1String("qbuild.pro"); // legacy
+
+ QString projectFile;
+
+ for (const auto &name : std::as_const(validNames)) {
+ projectFile = Config::findFile(Location(), m_exampleFiles, m_exampleDirs,
+ examplePath + QLatin1Char('/') + name);
+ if (!projectFile.isEmpty())
+ return projectFile;
+ }
+
+ return projectFile;
+}
+
+// TODO: [pod-configuration]
+// Remove findFile completely from the configuration.
+// External usages of findFile were already removed but a last caller
+// of this method exists internally to Config in
+// `getExampleProjectFile`.
+// That method has to be removed at some point and this method should
+// go with it.
+// Do notice that FileResolver is the replacement for findFile but it
+// is designed, for now, with a scope that does only care about the
+// usages of findFile that are outside the Config class.
+// More specifically, it was designed to replace only the uses of
+// findFile that deal with user provided queries or queries related to
+// that.
+// The logic that is used internally in Config is the same, but has a
+// different conceptual meaning.
+// When findFile is permanently removed, it must be considered whether
+// FileResolver itself should be used for the same logic or not.
+
+/*!
+ \a fileName is the path of the file to find.
+
+ \a files and \a dirs are the lists where we must find the
+ components of \a fileName.
+
+ \a location is used for obtaining the file and line numbers
+ for report qdoc errors.
+ */
+QString Config::findFile(const Location &location, const QStringList &files,
+ const QStringList &dirs, const QString &fileName,
+ QString *userFriendlyFilePath)
+{
+ if (fileName.isEmpty() || fileName.startsWith(QLatin1Char('/'))) {
+ if (userFriendlyFilePath)
+ *userFriendlyFilePath = fileName;
+ return fileName;
+ }
+
+ QFileInfo fileInfo;
+ QStringList components = fileName.split(QLatin1Char('?'));
+ QString firstComponent = components.first();
+
+ for (const auto &file : files) {
+ if (file == firstComponent || file.endsWith(QLatin1Char('/') + firstComponent)) {
+ fileInfo.setFile(file);
+ if (!fileInfo.exists())
+ location.fatal(QStringLiteral("File '%1' does not exist").arg(file));
+ break;
+ }
+ }
+
+ if (fileInfo.fileName().isEmpty()) {
+ for (const auto &dir : dirs) {
+ fileInfo.setFile(QDir(dir), firstComponent);
+ if (fileInfo.exists())
+ break;
+ }
+ }
+
+ if (userFriendlyFilePath)
+ userFriendlyFilePath->clear();
+ if (!fileInfo.exists())
+ return QString();
+
+ // <<REMARK: This is actually dead code. It is unclear what it tries
+ // to do and why but its usage is unnecessary in the current
+ // codebase.
+ // Indeed, the whole concept of the "userFriendlyFilePath" is
+ // removed for file searching.
+ // It will be removed directly with the whole of findFile, but it
+ // should not be considered anymore until then.
+ if (userFriendlyFilePath) {
+ for (auto c = components.constBegin();;) {
+ bool isArchive = (c != components.constEnd() - 1);
+ userFriendlyFilePath->append(*c);
+
+ if (isArchive) {
+ QString extracted = m_extractedDirs[fileInfo.filePath()];
+
+ ++c;
+ fileInfo.setFile(QDir(extracted), *c);
+ } else {
+ break;
+ }
+
+ userFriendlyFilePath->append(QLatin1Char('?'));
+ }
+ }
+ // REMARK>>
+
+ return fileInfo.filePath();
+}
+
+// TODO: [pod-configuration]
+// An intermediate representation for the configuration should only
+// contain data that will later be destructured into subsystem that
+// care about specific subsets of the configuration and can carry that
+// information with them, uniquely.
+// Remove copyFile, moving it into whatever will have the unique
+// resposability of knowing how to build an output directory for a
+// QDoc execution.
+// Should copy file being used for not only copying file to the build
+// output directory, split its responsabilities into smaller elements
+// instead of forcing the logic together.
+
+/*!
+ Copies the \a sourceFilePath to the file name constructed by
+ concatenating \a targetDirPath and the file name from the
+ \a userFriendlySourceFilePath. \a location is for identifying
+ the file and line number where a qdoc error occurred. The
+ constructed output file name is returned.
+ */
+QString Config::copyFile(const Location &location, const QString &sourceFilePath,
+ const QString &userFriendlySourceFilePath, const QString &targetDirPath)
+{
+ // TODO: A copying operation should only be performed on files
+ // that we assume to be available. Ensure that this is true at the
+ // API boundary and bubble up the error checking and reporting to
+ // call-site users. Possibly this will be as simple as
+ // ResolvedFile, but could not be done at the time of the introduction of
+ // that type as we first need to encapsulate the logic for
+ // copying files into an appropriate subsystem and have a better
+ // understanding of call-site usages.
+
+ QFile inFile(sourceFilePath);
+ if (!inFile.open(QFile::ReadOnly)) {
+ location.warning(QStringLiteral("Cannot open input file for copy: '%1': %2")
+ .arg(sourceFilePath, inFile.errorString()));
+ return QString();
+ }
+
+ // TODO: [non-canonical-representation]
+ // Similar to other part of QDoc, we do a series of non-intuitive
+ // checks to canonicalize some multi-format parameter into
+ // something we can use.
+ // Understand which of those formats are actually in use and
+ // provide a canonicalized version that can be requested at the
+ // API boundary to ensure that correct formatting is used.
+ // If possible, gradually bubble up the canonicalization until a
+ // single entry-point in the program exists where the
+ // canonicalization can be processed to avoid complicating
+ // intermediate steps.
+ // ADDENDUM 1: At least one usage of this seems to depend on the
+ // processing done for files coming from
+ // Generator::copyTemplateFile, which are expressed as absolute
+ // paths. This seems to be the only usage that is currently
+ // needed, hence a temporary new implementation is provided that
+ // only takes this case into account.
+ // Do notice that we assume that in this case we always want a
+ // flat structure, that is, we are copying the file as a direct
+ // child of the target directory.
+ // Nonetheless, it is possible that this case will not be needed,
+ // such that it can be removed later on, or that it will be nedeed
+ // in multiple places such that an higher level interface for it
+ // should be provided.
+ // Furthermoe, it might be possible that there is an edge case
+ // that is now not considered, as it is unknown, that was
+ // considered before.
+ // As it is now unclear what kind of paths are used here, what
+ // format they have, why they are used and why they have some
+ // specific format, further processing is avoided but a more
+ // torough overview of what should is needed must be done when
+ // more information are gathered and this function is extracted
+ // away from config.
+
+ QString outFileName{userFriendlySourceFilePath};
+ QFileInfo outFileNameInfo{userFriendlySourceFilePath};
+ if (outFileNameInfo.isAbsolute())
+ outFileName = outFileNameInfo.fileName();
+
+ outFileName = targetDirPath + "/" + outFileName;
+ QDir targetDir(targetDirPath);
+ if (!targetDir.exists())
+ targetDir.mkpath(".");
+
+ QFile outFile(outFileName);
+ if (!outFile.open(QFile::WriteOnly)) {
+ // TODO: [uncrentralized-warning]
+ location.warning(QStringLiteral("Cannot open output file for copy: '%1': %2")
+ .arg(outFileName, outFile.errorString()));
+ return QString();
+ }
+
+ // TODO: There shouldn't be any particular advantage to copying
+ // the file by readying its content and writing it compared to
+ // asking the underlying system to do the copy for us.
+ // Consider simplifying this part by avoiding doing the manual
+ // work ourselves.
+
+ char buffer[1024];
+ qsizetype len;
+ while ((len = inFile.read(buffer, sizeof(buffer))) > 0)
+ outFile.write(buffer, len);
+ return outFileName;
+}
+
+/*!
+ Finds the largest unicode digit in \a value in the range
+ 1..7 and returns it.
+ */
+int Config::numParams(const QString &value)
+{
+ int max = 0;
+ for (int i = 0; i != value.size(); ++i) {
+ uint c = value[i].unicode();
+ if (c > 0 && c < 8)
+ max = qMax(max, static_cast<int>(c));
+ }
+ return max;
+}
+
+/*!
+ Returns \c true if \a ch is a letter, number, '_', '.',
+ '{', '}', or ','.
+ */
+bool Config::isMetaKeyChar(QChar ch)
+{
+ return ch.isLetterOrNumber() || ch == QLatin1Char('_') || ch == QLatin1Char('.')
+ || ch == QLatin1Char('{') || ch == QLatin1Char('}') || ch == QLatin1Char(',');
+}
+
+/*!
+ \a fileName is a master qdocconf file. It contains a list of
+ qdocconf files and nothing else. Read the list and return it.
+ */
+QStringList Config::loadMaster(const QString &fileName)
+{
+ Location location;
+ QFile fin(fileName);
+ if (!fin.open(QFile::ReadOnly | QFile::Text)) {
+ if (!Config::installDir.isEmpty()) {
+ qsizetype prefix = location.filePath().size() - location.fileName().size();
+ fin.setFileName(Config::installDir + QLatin1Char('/')
+ + fileName.right(fileName.size() - prefix));
+ }
+ if (!fin.open(QFile::ReadOnly | QFile::Text))
+ location.fatal(QStringLiteral("Cannot open master qdocconf file '%1': %2")
+ .arg(fileName, fin.errorString()));
+ }
+ QTextStream stream(&fin);
+ QStringList qdocFiles;
+ QDir configDir(QFileInfo(fileName).canonicalPath());
+ QString line = stream.readLine();
+ while (!line.isNull()) {
+ if (!line.isEmpty())
+ qdocFiles.append(QFileInfo(configDir, line).filePath());
+ line = stream.readLine();
+ }
+ fin.close();
+ return qdocFiles;
+}
+
+/*!
+ Load, parse, and process a qdoc configuration file. This
+ function is only called by the other load() function, but
+ this one is recursive, i.e., it calls itself when it sees
+ an \c{include} statement in the qdoc configuration file.
+ */
+void Config::load(Location location, const QString &fileName)
+{
+ QFileInfo fileInfo(fileName);
+ pushWorkingDir(fileInfo.canonicalPath());
+ static const QRegularExpression keySyntax(QRegularExpression::anchoredPattern(QLatin1String("\\w+(?:\\.\\w+)*")));
+
+#define SKIP_CHAR() \
+ do { \
+ location.advance(c); \
+ ++i; \
+ c = text.at(i); \
+ cc = c.unicode(); \
+ } while (0)
+
+#define SKIP_SPACES() \
+ while (c.isSpace() && cc != '\n') \
+ SKIP_CHAR()
+
+#define PUT_CHAR() \
+ word += c; \
+ SKIP_CHAR();
+
+ if (location.depth() > 16)
+ location.fatal(QStringLiteral("Too many nested includes"));
+
+ QFile fin(fileInfo.fileName());
+ if (!fin.open(QFile::ReadOnly | QFile::Text)) {
+ if (!Config::installDir.isEmpty()) {
+ qsizetype prefix = location.filePath().size() - location.fileName().size();
+ fin.setFileName(Config::installDir + QLatin1Char('/')
+ + fileName.right(fileName.size() - prefix));
+ }
+ if (!fin.open(QFile::ReadOnly | QFile::Text))
+ location.fatal(
+ QStringLiteral("Cannot open file '%1': %2").arg(fileName, fin.errorString()));
+ }
+
+ QTextStream stream(&fin);
+ QString text = stream.readAll();
+ text += QLatin1String("\n\n");
+ text += QLatin1Char('\0');
+ fin.close();
+
+ location.push(fileName);
+ location.start();
+
+ int i = 0;
+ QChar c = text.at(0);
+ uint cc = c.unicode();
+ while (i < text.size()) {
+ if (cc == 0) {
+ ++i;
+ } else if (c.isSpace()) {
+ SKIP_CHAR();
+ } else if (cc == '#') {
+ do {
+ SKIP_CHAR();
+ } while (cc != '\n');
+ } else if (isMetaKeyChar(c)) {
+ Location keyLoc = location;
+ bool plus = false;
+ QStringList rhsValues;
+ QList<ExpandVar> expandVars;
+ QString word;
+ bool inQuote = false;
+ bool needsExpansion = false;
+
+ MetaStack stack;
+ do {
+ stack.process(c, location);
+ SKIP_CHAR();
+ } while (isMetaKeyChar(c));
+
+ const QStringList keys = stack.getExpanded(location);
+ SKIP_SPACES();
+
+ if (keys.size() == 1 && keys.first() == QLatin1String("include")) {
+ QString includeFile;
+
+ if (cc != '(')
+ location.fatal(QStringLiteral("Bad include syntax"));
+ SKIP_CHAR();
+ SKIP_SPACES();
+
+ while (!c.isSpace() && cc != '#' && cc != ')') {
+
+ if (cc == '$') {
+ QString var;
+ SKIP_CHAR();
+ while (c.isLetterOrNumber() || cc == '_') {
+ var += c;
+ SKIP_CHAR();
+ }
+ if (!var.isEmpty()) {
+ const QByteArray val = qgetenv(var.toLatin1().data());
+ if (val.isNull()) {
+ location.fatal(QStringLiteral("Environment variable '%1' undefined")
+ .arg(var));
+ } else {
+ includeFile += QString::fromLatin1(val);
+ }
+ }
+ } else {
+ includeFile += c;
+ SKIP_CHAR();
+ }
+ }
+ SKIP_SPACES();
+ if (cc != ')')
+ location.fatal(QStringLiteral("Bad include syntax"));
+ SKIP_CHAR();
+ SKIP_SPACES();
+ if (cc != '#' && cc != '\n')
+ location.fatal(QStringLiteral("Trailing garbage"));
+
+ /*
+ Here is the recursive call.
+ */
+ load(location, QFileInfo(QDir(m_workingDirs.top()), includeFile).filePath());
+ } else {
+ /*
+ It wasn't an include statement, so it's something else.
+ We must see either '=' or '+=' next. If not, fatal error.
+ */
+ if (cc == '+') {
+ plus = true;
+ SKIP_CHAR();
+ }
+ if (cc != '=')
+ location.fatal(QStringLiteral("Expected '=' or '+=' after key"));
+ SKIP_CHAR();
+ SKIP_SPACES();
+
+ for (;;) {
+ if (cc == '\\') {
+ qsizetype metaCharPos;
+
+ SKIP_CHAR();
+ if (cc == '\n') {
+ SKIP_CHAR();
+ } else if (cc > '0' && cc < '8') {
+ word += QChar(c.digitValue());
+ SKIP_CHAR();
+ } else if ((metaCharPos = QString::fromLatin1("abfnrtv").indexOf(c))
+ != -1) {
+ word += QLatin1Char("\a\b\f\n\r\t\v"[metaCharPos]);
+ SKIP_CHAR();
+ } else {
+ PUT_CHAR();
+ }
+ } else if (c.isSpace() || cc == '#') {
+ if (inQuote) {
+ if (cc == '\n')
+ location.fatal(QStringLiteral("Unterminated string"));
+ PUT_CHAR();
+ } else {
+ if (!word.isEmpty() || needsExpansion) {
+ rhsValues << word;
+ word.clear();
+ needsExpansion = false;
+ }
+ if (cc == '\n' || cc == '#')
+ break;
+ SKIP_SPACES();
+ }
+ } else if (cc == '"') {
+ if (inQuote) {
+ if (!word.isEmpty() || needsExpansion)
+ rhsValues << word;
+ word.clear();
+ needsExpansion = false;
+ }
+ inQuote = !inQuote;
+ SKIP_CHAR();
+ } else if (cc == '$') {
+ QString var;
+ QChar delim(' ');
+ bool braces = false;
+ SKIP_CHAR();
+ if (cc == '{') {
+ SKIP_CHAR();
+ braces = true;
+ }
+ while (c.isLetterOrNumber() || cc == '_') {
+ var += c;
+ SKIP_CHAR();
+ }
+ if (braces) {
+ if (cc == ',') {
+ SKIP_CHAR();
+ delim = c;
+ SKIP_CHAR();
+ }
+ if (cc == '}')
+ SKIP_CHAR();
+ else if (delim == '}')
+ delim = QChar(); // null delimiter
+ else
+ location.fatal(QStringLiteral("Missing '}'"));
+ }
+ if (!var.isEmpty()) {
+ const QByteArray val = qgetenv(var.toLatin1().constData());
+ if (val.isNull()) {
+ expandVars << ExpandVar(rhsValues.size(), word.size(), var, delim);
+ needsExpansion = true;
+ } else if (braces) { // ${VAR} inserts content from an env. variable for processing
+ text.insert(i, QString::fromLatin1(val));
+ c = text.at(i);
+ cc = c.unicode();
+ } else { // while $VAR simply reads the value and stores it to a config variable.
+ word += QString::fromLatin1(val);
+ }
+ }
+ } else {
+ if (!inQuote && cc == '=')
+ location.fatal(QStringLiteral("Unexpected '='"));
+ PUT_CHAR();
+ }
+ }
+ for (const auto &key : keys) {
+ if (!keySyntax.match(key).hasMatch())
+ keyLoc.fatal(QStringLiteral("Invalid key '%1'").arg(key));
+
+ ConfigVar configVar(key, rhsValues, QDir::currentPath(), keyLoc, expandVars);
+ if (plus && m_configVars.contains(key)) {
+ m_configVars[key].append(configVar);
+ } else {
+ m_configVars.insert(key, configVar);
+ }
+ }
+ }
+ } else {
+ location.fatal(QStringLiteral("Unexpected character '%1' at beginning of line").arg(c));
+ }
+ }
+ popWorkingDir();
+
+#undef SKIP_CHAR
+#undef SKIP_SPACES
+#undef PUT_CHAR
+}
+
+bool Config::isFileExcluded(const QString &fileName, const QSet<QString> &excludedFiles)
+{
+ for (const QString &entry : excludedFiles) {
+ if (entry.contains(QLatin1Char('*')) || entry.contains(QLatin1Char('?'))) {
+ QRegularExpression re(QRegularExpression::wildcardToRegularExpression(entry));
+ if (re.match(fileName).hasMatch())
+ return true;
+ }
+ }
+ return excludedFiles.contains(fileName);
+}
+
+QStringList Config::getFilesHere(const QString &uncleanDir, const QString &nameFilter,
+ const Location &location, const QSet<QString> &excludedDirs,
+ const QSet<QString> &excludedFiles)
+{
+ // TODO: Understand why location is used to branch the
+ // canonicalization and why the two different methods are used.
+ QString dir =
+ location.isEmpty() ? QDir::cleanPath(uncleanDir) : QDir(uncleanDir).canonicalPath();
+ QStringList result;
+ if (excludedDirs.contains(dir))
+ return result;
+
+ QDir dirInfo(dir);
+
+ dirInfo.setNameFilters(nameFilter.split(QLatin1Char(' ')));
+ dirInfo.setSorting(QDir::Name);
+ dirInfo.setFilter(QDir::Files);
+ QStringList fileNames = dirInfo.entryList();
+ for (const auto &file : std::as_const(fileNames)) {
+ // TODO: Understand if this is needed and, should it be, if it
+ // is indeed the only case that should be considered.
+ if (!file.startsWith(QLatin1Char('~'))) {
+ QString s = dirInfo.filePath(file);
+ QString c = QDir::cleanPath(s);
+ if (!isFileExcluded(c, excludedFiles))
+ result.append(c);
+ }
+ }
+
+ dirInfo.setNameFilters(QStringList(QLatin1String("*")));
+ dirInfo.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
+ fileNames = dirInfo.entryList();
+ for (const auto &file : fileNames)
+ result += getFilesHere(dirInfo.filePath(file), nameFilter, location, excludedDirs,
+ excludedFiles);
+ return result;
+}
+
+/*!
+ Set \a dir as the working directory and push it onto the
+ stack of working directories.
+ */
+void Config::pushWorkingDir(const QString &dir)
+{
+ m_workingDirs.push(dir);
+ QDir::setCurrent(dir);
+}
+
+/*!
+ Pop the top entry from the stack of working directories.
+ Set the working directory to the next one on the stack,
+ if one exists.
+ */
+void Config::popWorkingDir()
+{
+ Q_ASSERT(!m_workingDirs.isEmpty());
+ m_workingDirs.pop();
+ if (!m_workingDirs.isEmpty())
+ QDir::setCurrent(m_workingDirs.top());
+}
+
+const Config::ExcludedPaths& Config::getExcludedPaths() {
+ if (m_excludedPaths)
+ return *m_excludedPaths;
+
+ const auto &excludedDirList = getCanonicalPathList(CONFIG_EXCLUDEDIRS);
+ const auto &excludedFilesList = getCanonicalPathList(CONFIG_EXCLUDEFILES);
+
+ QSet<QString> excludedDirs = QSet<QString>(excludedDirList.cbegin(), excludedDirList.cend());
+ QSet<QString> excludedFiles = QSet<QString>(excludedFilesList.cbegin(), excludedFilesList.cend());
+
+ m_excludedPaths.emplace(ExcludedPaths{excludedDirs, excludedFiles});
+
+ return *m_excludedPaths;
+}
+
+std::set<Config::HeaderFilePath> Config::getHeaderFiles() {
+ static QStringList accepted_header_file_extensions{
+ "ch", "h", "h++", "hh", "hpp", "hxx"
+ };
+
+ const auto& [excludedDirs, excludedFiles] = getExcludedPaths();
+
+ QStringList headerList =
+ getAllFiles(CONFIG_HEADERS, CONFIG_HEADERDIRS, excludedDirs, excludedFiles);
+
+ std::set<HeaderFilePath> headers{};
+
+ for (const auto& header : headerList) {
+ if (header.contains("doc/snippets")) continue;
+
+ if (!accepted_header_file_extensions.contains(QFileInfo{header}.suffix()))
+ continue;
+
+ headers.insert(HeaderFilePath{QFileInfo{header}.canonicalPath(), QFileInfo{header}.fileName()});
+ }
+
+ return headers;
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/config.h b/src/qdoc/qdoc/src/qdoc/config.h
new file mode 100644
index 000000000..d8ff80a40
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/config.h
@@ -0,0 +1,407 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "location.h"
+#include "qdoccommandlineparser.h"
+#include "singleton.h"
+
+#include <QtCore/qmap.h>
+#include <QtCore/qset.h>
+#include <QtCore/qstack.h>
+#include <QtCore/qstringlist.h>
+
+#include <set>
+#include <utility>
+
+QT_BEGIN_NAMESPACE
+
+class Config;
+
+/*
+ Contains information about a location
+ where a ConfigVar string needs to be expanded
+ from another config variable.
+*/
+struct ExpandVar
+{
+ int m_valueIndex {};
+ int m_index {};
+ QString m_var {};
+ QChar m_delim {};
+
+ ExpandVar(int valueIndex, int index, QString var, const QChar &delim)
+ : m_valueIndex(valueIndex), m_index(index), m_var(std::move(var)), m_delim(delim)
+ {
+ }
+};
+
+class ConfigVar
+{
+public:
+ struct ConfigValue {
+ QString m_value;
+ QString m_path;
+ };
+
+ [[nodiscard]] QString asString(const QString defaultString = QString()) const;
+ [[nodiscard]] QStringList asStringList() const;
+ [[nodiscard]] QSet<QString> asStringSet() const;
+ [[nodiscard]] bool asBool() const;
+ [[nodiscard]] int asInt() const;
+ [[nodiscard]] const Location &location() const { return m_location; }
+
+ ConfigVar() = default;
+ ConfigVar(QString name, const QStringList &values, const QString &dir,
+ const Location &loc = Location(),
+ const QList<ExpandVar> &expandVars = QList<ExpandVar>())
+ : m_name(std::move(name)), m_location(loc), m_expandVars(expandVars)
+ {
+ for (const auto &v : values)
+ m_values << ConfigValue {v, dir};
+ }
+
+private:
+ void append(const ConfigVar &other);
+
+private:
+ QString m_name {};
+ QList<ConfigValue> m_values {};
+ Location m_location {};
+ QList<ExpandVar> m_expandVars {};
+
+ friend class Config;
+};
+
+/*
+ In this multimap, the key is a config variable name.
+ */
+typedef QMap<QString, ConfigVar> ConfigVarMap;
+
+class Config : public Singleton<Config>
+{
+public:
+ ~Config();
+
+ enum QDocPass { Neither, Prepare, Generate };
+
+ enum PathFlags : unsigned char {
+ None = 0x0,
+ // TODO: [unenforced-unclear-validation]
+ // The Validate flag is used, for example, during the retrival
+ // of paths in getCanonicalPathList.
+ // It is unclear what kind of validation it performs, if any,
+ // and when this validation is required.
+ // Instead, remove this kind of flag and ensure that any
+ // amount of required validation is performed during the
+ // parsing step, if possilbe, and only once.
+ // Furthemore, ensure any such validation removes some
+ // uncertainty on dependent subsystems, moving constraints to
+ // preconditions and expressing them at the API boundaries.
+ Validate = 0x1,
+ IncludePaths = 0x2
+ };
+
+ void init(const QString &programName, const QStringList &args);
+ [[nodiscard]] bool getDebug() const { return m_debug; }
+ [[nodiscard]] bool getAtomsDump() const { return m_atomsDump; }
+ [[nodiscard]] bool showInternal() const { return m_showInternal; }
+
+ void clear();
+ void reset();
+ void load(const QString &fileName);
+ void setStringList(const QString &var, const QStringList &values);
+ void insertStringList(const QString &var, const QStringList &values);
+
+ void showHelp(int exitCode = 0) { m_parser.showHelp(exitCode); }
+ [[nodiscard]] QStringList qdocFiles() const { return m_parser.positionalArguments(); }
+ [[nodiscard]] const QString &programName() const { return m_prog; }
+ [[nodiscard]] const Location &location() const { return m_location; }
+ [[nodiscard]] const ConfigVar &get(const QString &var) const
+ {
+ // Avoid injecting default-constructed values to map if var doesn't exist
+ static ConfigVar empty;
+ auto it = m_configVars.constFind(var);
+ return (it != m_configVars.constEnd()) ? *it : empty;
+ }
+ [[nodiscard]] QString getOutputDir(const QString &format = QString("HTML")) const;
+ [[nodiscard]] QSet<QString> getOutputFormats() const;
+ [[nodiscard]] QStringList getCanonicalPathList(const QString &var,
+ PathFlags flags = None) const;
+ [[nodiscard]] QRegularExpression getRegExp(const QString &var) const;
+ [[nodiscard]] QList<QRegularExpression> getRegExpList(const QString &var) const;
+ [[nodiscard]] QSet<QString> subVars(const QString &var) const;
+ QStringList getAllFiles(const QString &filesVar, const QString &dirsVar,
+ const QSet<QString> &excludedDirs = QSet<QString>(),
+ const QSet<QString> &excludedFiles = QSet<QString>());
+ [[nodiscard]] QString getIncludeFilePath(const QString &fileName) const;
+ QStringList getExampleQdocFiles(const QSet<QString> &excludedDirs,
+ const QSet<QString> &excludedFiles);
+ QStringList getExampleImageFiles(const QSet<QString> &excludedDirs,
+ const QSet<QString> &excludedFiles);
+ QString getExampleProjectFile(const QString &examplePath);
+
+ static QStringList loadMaster(const QString &fileName);
+ static bool isFileExcluded(const QString &fileName, const QSet<QString> &excludedFiles);
+ static QStringList getFilesHere(const QString &dir, const QString &nameFilter,
+ const Location &location = Location(),
+ const QSet<QString> &excludedDirs = QSet<QString>(),
+ const QSet<QString> &excludedFiles = QSet<QString>());
+ static QString findFile(const Location &location, const QStringList &files,
+ const QStringList &dirs, const QString &fileName,
+ QString *userFriendlyFilePath = nullptr);
+ static QString copyFile(const Location &location, const QString &sourceFilePath,
+ const QString &userFriendlySourceFilePath,
+ const QString &targetDirPath);
+ static int numParams(const QString &value);
+ static void pushWorkingDir(const QString &dir);
+ static void popWorkingDir();
+
+ static const QString dot;
+
+ static bool generateExamples;
+ static QString installDir;
+ static QString overrideOutputDir;
+ static QSet<QString> overrideOutputFormats;
+
+ [[nodiscard]] inline bool singleExec() const;
+ [[nodiscard]] inline bool dualExec() const;
+ QStringList &defines() { return m_defines; }
+ QStringList &dependModules() { return m_dependModules; }
+ QStringList &includePaths() { return m_includePaths; }
+ QStringList &indexDirs() { return m_indexDirs; }
+ [[nodiscard]] QString currentDir() const { return m_currentDir; }
+ void setCurrentDir(const QString &path) { m_currentDir = path; }
+ [[nodiscard]] QString previousCurrentDir() const { return m_previousCurrentDir; }
+ void setPreviousCurrentDir(const QString &path) { m_previousCurrentDir = path; }
+
+ void setQDocPass(const QDocPass &pass) { m_qdocPass = pass; };
+ [[nodiscard]] bool preparing() const { return (m_qdocPass == Prepare); }
+ [[nodiscard]] bool generating() const { return (m_qdocPass == Generate); }
+
+ struct ExcludedPaths {
+ QSet<QString> excluded_directories;
+ QSet<QString> excluded_files;
+ };
+ const ExcludedPaths& getExcludedPaths();
+
+ struct HeaderFilePath {
+ QString path;
+ QString filename;
+
+ friend bool operator<(const HeaderFilePath& lhs, const HeaderFilePath& rhs) {
+ return std::tie(lhs.path, lhs.filename) < std::tie(rhs.path, rhs.filename);
+ }
+ };
+ std::set<HeaderFilePath> getHeaderFiles();
+
+private:
+ void processCommandLineOptions(const QStringList &args);
+ void setIncludePaths();
+ void setIndexDirs();
+ void expandVariables();
+
+ QStringList m_dependModules {};
+ QStringList m_defines {};
+ QStringList m_includePaths {};
+ QStringList m_indexDirs {};
+ QStringList m_exampleFiles {};
+ QStringList m_exampleDirs {};
+ QString m_currentDir {};
+ QString m_previousCurrentDir {};
+ std::optional<ExcludedPaths> m_excludedPaths{};
+
+ bool m_showInternal { false };
+ static bool m_debug;
+
+ // An option that can be set trough a similarly named command-line option.
+ // When this is set, every time QDoc parses a block-comment, a
+ // human-readable presentation of the `Atom`s structure for that
+ // block will shown to the user.
+ static bool m_atomsDump;
+
+ static bool isMetaKeyChar(QChar ch);
+ void load(Location location, const QString &fileName);
+
+ QString m_prog {};
+ Location m_location {};
+ ConfigVarMap m_configVars {};
+
+ static QMap<QString, QString> m_extractedDirs;
+ static QStack<QString> m_workingDirs;
+ static QMap<QString, QStringList> m_includeFilesMap;
+ QDocCommandLineParser m_parser {};
+
+ QDocPass m_qdocPass { Neither };
+};
+
+struct ConfigStrings
+{
+ static QString ALIAS;
+ static QString AUTOLINKERRORS;
+ static QString BUILDVERSION;
+ static QString CODEINDENT;
+ static QString CODEPREFIX;
+ static QString CODESUFFIX;
+ static QString CPPCLASSESPAGE;
+ static QString CPPCLASSESTITLE;
+ static QString DEFINES;
+ static QString DEPENDS;
+ static QString DESCRIPTION;
+ static QString DOCBOOKEXTENSIONS;
+ static QString ENDHEADER;
+ static QString EXAMPLEDIRS;
+ static QString EXAMPLES;
+ static QString EXAMPLESINSTALLPATH;
+ static QString EXCLUDEDIRS;
+ static QString EXCLUDEFILES;
+ static QString EXTRAIMAGES;
+ static QString FALSEHOODS;
+ static QString FORMATTING;
+ static QString HEADERDIRS;
+ static QString HEADERS;
+ static QString HEADERSCRIPTS;
+ static QString HEADERSTYLES;
+ static QString HOMEPAGE;
+ static QString HOMETITLE;
+ static QString IGNOREDIRECTIVES;
+ static QString IGNORETOKENS;
+ static QString IGNORESINCE;
+ static QString IGNOREWORDS;
+ static QString IMAGEDIRS;
+ static QString IMAGES;
+ static QString INCLUDEPATHS;
+ static QString INCLUSIVE;
+ static QString INDEXES;
+ static QString LANDINGPAGE;
+ static QString LANDINGTITLE;
+ static QString LANGUAGE;
+ static QString LOCATIONINFO;
+ static QString LOGPROGRESS;
+ static QString MACRO;
+ static QString MANIFESTMETA;
+ static QString MODULEHEADER;
+ static QString NATURALLANGUAGE;
+ static QString NAVIGATION;
+ static QString NOLINKERRORS;
+ static QString OUTPUTDIR;
+ static QString OUTPUTFORMATS;
+ static QString OUTPUTPREFIXES;
+ static QString OUTPUTSUFFIXES;
+ static QString PROJECT;
+ static QString REDIRECTDOCUMENTATIONTODEVNULL;
+ static QString QHP;
+ static QString QUOTINGINFORMATION;
+ static QString SCRIPTS;
+ static QString SHOWINTERNAL;
+ static QString SINGLEEXEC;
+ static QString SOURCEDIRS;
+ static QString SOURCEENCODING;
+ static QString SOURCES;
+ static QString SPURIOUS;
+ static QString STYLESHEETS;
+ static QString SYNTAXHIGHLIGHTING;
+ static QString TABSIZE;
+ static QString TAGFILE;
+ static QString TIMESTAMPS;
+ static QString TOCTITLES;
+ static QString URL;
+ static QString VERSION;
+ static QString VERSIONSYM;
+ static QString FILEEXTENSIONS;
+ static QString IMAGEEXTENSIONS;
+ static QString QMLTYPESPAGE;
+ static QString QMLTYPESTITLE;
+ static QString WARNINGLIMIT;
+};
+
+#define CONFIG_AUTOLINKERRORS ConfigStrings::AUTOLINKERRORS
+#define CONFIG_BUILDVERSION ConfigStrings::BUILDVERSION
+#define CONFIG_CODEINDENT ConfigStrings::CODEINDENT
+#define CONFIG_CODEPREFIX ConfigStrings::CODEPREFIX
+#define CONFIG_CODESUFFIX ConfigStrings::CODESUFFIX
+#define CONFIG_CPPCLASSESPAGE ConfigStrings::CPPCLASSESPAGE
+#define CONFIG_CPPCLASSESTITLE ConfigStrings::CPPCLASSESTITLE
+#define CONFIG_DEFINES ConfigStrings::DEFINES
+#define CONFIG_DEPENDS ConfigStrings::DEPENDS
+#define CONFIG_DESCRIPTION ConfigStrings::DESCRIPTION
+#define CONFIG_DOCBOOKEXTENSIONS ConfigStrings::DOCBOOKEXTENSIONS
+#define CONFIG_ENDHEADER ConfigStrings::ENDHEADER
+#define CONFIG_EXAMPLEDIRS ConfigStrings::EXAMPLEDIRS
+#define CONFIG_EXAMPLES ConfigStrings::EXAMPLES
+#define CONFIG_EXAMPLESINSTALLPATH ConfigStrings::EXAMPLESINSTALLPATH
+#define CONFIG_EXCLUDEDIRS ConfigStrings::EXCLUDEDIRS
+#define CONFIG_EXCLUDEFILES ConfigStrings::EXCLUDEFILES
+#define CONFIG_EXTRAIMAGES ConfigStrings::EXTRAIMAGES
+#define CONFIG_FALSEHOODS ConfigStrings::FALSEHOODS
+#define CONFIG_FORMATTING ConfigStrings::FORMATTING
+#define CONFIG_HEADERDIRS ConfigStrings::HEADERDIRS
+#define CONFIG_HEADERS ConfigStrings::HEADERS
+#define CONFIG_HEADERSCRIPTS ConfigStrings::HEADERSCRIPTS
+#define CONFIG_HEADERSTYLES ConfigStrings::HEADERSTYLES
+#define CONFIG_HOMEPAGE ConfigStrings::HOMEPAGE
+#define CONFIG_HOMETITLE ConfigStrings::HOMETITLE
+#define CONFIG_IGNOREDIRECTIVES ConfigStrings::IGNOREDIRECTIVES
+#define CONFIG_IGNORESINCE ConfigStrings::IGNORESINCE
+#define CONFIG_IGNORETOKENS ConfigStrings::IGNORETOKENS
+#define CONFIG_IGNOREWORDS ConfigStrings::IGNOREWORDS
+#define CONFIG_IMAGEDIRS ConfigStrings::IMAGEDIRS
+#define CONFIG_INCLUDEPATHS ConfigStrings::INCLUDEPATHS
+#define CONFIG_INCLUSIVE ConfigStrings::INCLUSIVE
+#define CONFIG_INDEXES ConfigStrings::INDEXES
+#define CONFIG_LANDINGPAGE ConfigStrings::LANDINGPAGE
+#define CONFIG_LANDINGTITLE ConfigStrings::LANDINGTITLE
+#define CONFIG_LANGUAGE ConfigStrings::LANGUAGE
+#define CONFIG_LOCATIONINFO ConfigStrings::LOCATIONINFO
+#define CONFIG_LOGPROGRESS ConfigStrings::LOGPROGRESS
+#define CONFIG_MACRO ConfigStrings::MACRO
+#define CONFIG_MANIFESTMETA ConfigStrings::MANIFESTMETA
+#define CONFIG_MODULEHEADER ConfigStrings::MODULEHEADER
+#define CONFIG_NATURALLANGUAGE ConfigStrings::NATURALLANGUAGE
+#define CONFIG_NAVIGATION ConfigStrings::NAVIGATION
+#define CONFIG_NOLINKERRORS ConfigStrings::NOLINKERRORS
+#define CONFIG_OUTPUTDIR ConfigStrings::OUTPUTDIR
+#define CONFIG_OUTPUTFORMATS ConfigStrings::OUTPUTFORMATS
+#define CONFIG_OUTPUTPREFIXES ConfigStrings::OUTPUTPREFIXES
+#define CONFIG_OUTPUTSUFFIXES ConfigStrings::OUTPUTSUFFIXES
+#define CONFIG_PROJECT ConfigStrings::PROJECT
+#define CONFIG_REDIRECTDOCUMENTATIONTODEVNULL ConfigStrings::REDIRECTDOCUMENTATIONTODEVNULL
+#define CONFIG_QHP ConfigStrings::QHP
+#define CONFIG_QUOTINGINFORMATION ConfigStrings::QUOTINGINFORMATION
+#define CONFIG_SCRIPTS ConfigStrings::SCRIPTS
+#define CONFIG_SHOWINTERNAL ConfigStrings::SHOWINTERNAL
+#define CONFIG_SINGLEEXEC ConfigStrings::SINGLEEXEC
+#define CONFIG_SOURCEDIRS ConfigStrings::SOURCEDIRS
+#define CONFIG_SOURCEENCODING ConfigStrings::SOURCEENCODING
+#define CONFIG_SOURCES ConfigStrings::SOURCES
+#define CONFIG_SPURIOUS ConfigStrings::SPURIOUS
+#define CONFIG_STYLESHEETS ConfigStrings::STYLESHEETS
+#define CONFIG_SYNTAXHIGHLIGHTING ConfigStrings::SYNTAXHIGHLIGHTING
+#define CONFIG_TABSIZE ConfigStrings::TABSIZE
+#define CONFIG_TAGFILE ConfigStrings::TAGFILE
+#define CONFIG_TIMESTAMPS ConfigStrings::TIMESTAMPS
+#define CONFIG_TOCTITLES ConfigStrings::TOCTITLES
+#define CONFIG_URL ConfigStrings::URL
+#define CONFIG_VERSION ConfigStrings::VERSION
+#define CONFIG_VERSIONSYM ConfigStrings::VERSIONSYM
+#define CONFIG_FILEEXTENSIONS ConfigStrings::FILEEXTENSIONS
+#define CONFIG_IMAGEEXTENSIONS ConfigStrings::IMAGEEXTENSIONS
+#define CONFIG_QMLTYPESPAGE ConfigStrings::QMLTYPESPAGE
+#define CONFIG_QMLTYPESTITLE ConfigStrings::QMLTYPESTITLE
+#define CONFIG_WARNINGLIMIT ConfigStrings::WARNINGLIMIT
+
+inline bool Config::singleExec() const
+{
+ return m_configVars.value(CONFIG_SINGLEEXEC).asBool();
+}
+
+inline bool Config::dualExec() const
+{
+ return !m_configVars.value(CONFIG_SINGLEEXEC).asBool();
+}
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/cppcodemarker.cpp b/src/qdoc/qdoc/src/qdoc/cppcodemarker.cpp
new file mode 100644
index 000000000..7fb26db0c
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/cppcodemarker.cpp
@@ -0,0 +1,594 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "cppcodemarker.h"
+
+#include "access.h"
+#include "enumnode.h"
+#include "functionnode.h"
+#include "namespacenode.h"
+#include "propertynode.h"
+#include "qmlpropertynode.h"
+#include "text.h"
+#include "tree.h"
+#include "typedefnode.h"
+#include "variablenode.h"
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qregularexpression.h>
+
+QT_BEGIN_NAMESPACE
+
+using namespace Qt::StringLiterals;
+
+/*!
+ Returns \c true.
+ */
+bool CppCodeMarker::recognizeCode(const QString & /* code */)
+{
+ return true;
+}
+
+/*!
+ Returns \c true if \a ext is any of a list of file extensions
+ for the C++ language.
+ */
+bool CppCodeMarker::recognizeExtension(const QString &extension)
+{
+ QByteArray ext = extension.toLatin1();
+ return ext == "c" || ext == "c++" || ext == "qdoc" || ext == "qtt" || ext == "qtx"
+ || ext == "cc" || ext == "cpp" || ext == "cxx" || ext == "ch" || ext == "h"
+ || ext == "h++" || ext == "hh" || ext == "hpp" || ext == "hxx";
+}
+
+/*!
+ Returns \c true if \a lang is either "C" or "Cpp".
+ */
+bool CppCodeMarker::recognizeLanguage(const QString &lang)
+{
+ return lang == QLatin1String("C") || lang == QLatin1String("Cpp");
+}
+
+/*!
+ Returns the type of atom used to represent C++ code in the documentation.
+*/
+Atom::AtomType CppCodeMarker::atomType() const
+{
+ return Atom::Code;
+}
+
+QString CppCodeMarker::markedUpCode(const QString &code, const Node *relative,
+ const Location &location)
+{
+ return addMarkUp(code, relative, location);
+}
+
+QString CppCodeMarker::markedUpSynopsis(const Node *node, const Node * /* relative */,
+ Section::Style style)
+{
+ const int MaxEnumValues = 6;
+ const FunctionNode *func;
+ const VariableNode *variable;
+ const EnumNode *enume;
+ QString synopsis;
+ QString name;
+
+ name = taggedNode(node);
+ if (style != Section::Details)
+ name = linkTag(node, name);
+ name = "<@name>" + name + "</@name>";
+
+ if (style == Section::Details) {
+ if (!node->isRelatedNonmember() && !node->isProxyNode() && !node->parent()->name().isEmpty()
+ && !node->parent()->isHeader() && !node->isProperty() && !node->isQmlNode()) {
+ name.prepend(taggedNode(node->parent()) + "::");
+ }
+ }
+
+ switch (node->nodeType()) {
+ case Node::Namespace:
+ case Node::Class:
+ case Node::Struct:
+ case Node::Union:
+ synopsis = Node::nodeTypeString(node->nodeType());
+ synopsis += QLatin1Char(' ') + name;
+ break;
+ case Node::Function:
+ func = (const FunctionNode *)node;
+ if (style == Section::Details) {
+ auto templateDecl = node->templateDecl();
+ if (templateDecl)
+ synopsis = protect((*templateDecl).to_qstring()) + QLatin1Char(' ');
+ }
+ if (style != Section::AllMembers && !func->returnType().isEmpty())
+ synopsis += typified(func->returnType(), true);
+ synopsis += name;
+ if (!func->isMacroWithoutParams()) {
+ synopsis += QLatin1Char('(');
+ if (!func->parameters().isEmpty()) {
+ const Parameters &parameters = func->parameters();
+ for (int i = 0; i < parameters.count(); ++i) {
+ if (i > 0)
+ synopsis += ", ";
+ QString name = parameters.at(i).name();
+ QString type = parameters.at(i).type();
+ QString value = parameters.at(i).defaultValue();
+ bool trailingSpace = style != Section::AllMembers && !name.isEmpty();
+ synopsis += typified(type, trailingSpace);
+ if (style != Section::AllMembers && !name.isEmpty())
+ synopsis += "<@param>" + protect(name) + "</@param>";
+ if (style != Section::AllMembers && !value.isEmpty())
+ synopsis += " = " + protect(value);
+ }
+ }
+ synopsis += QLatin1Char(')');
+ }
+ if (func->isConst())
+ synopsis += " const";
+
+ if (style == Section::Summary || style == Section::Accessors) {
+ if (!func->isNonvirtual())
+ synopsis.prepend("virtual ");
+ if (func->isFinal())
+ synopsis.append(" final");
+ if (func->isOverride())
+ synopsis.append(" override");
+ if (func->isPureVirtual())
+ synopsis.append(" = 0");
+ if (func->isRef())
+ synopsis.append(" &");
+ else if (func->isRefRef())
+ synopsis.append(" &&");
+ } else if (style == Section::AllMembers) {
+ if (!func->returnType().isEmpty() && func->returnType() != "void")
+ synopsis += " : " + typified(func->returnType());
+ } else {
+ if (func->isRef())
+ synopsis.append(" &");
+ else if (func->isRefRef())
+ synopsis.append(" &&");
+ }
+ break;
+ case Node::Enum:
+ enume = static_cast<const EnumNode *>(node);
+ synopsis = "enum ";
+ if (enume->isScoped())
+ synopsis += "class ";
+ synopsis += name;
+ if (style == Section::Summary) {
+ synopsis += " { ";
+
+ QStringList documentedItems = enume->doc().enumItemNames();
+ if (documentedItems.isEmpty()) {
+ const auto &enumItems = enume->items();
+ for (const auto &item : enumItems)
+ documentedItems << item.name();
+ }
+ const QStringList omitItems = enume->doc().omitEnumItemNames();
+ for (const auto &item : omitItems)
+ documentedItems.removeAll(item);
+
+ if (documentedItems.size() > MaxEnumValues) {
+ // Take the last element and keep it safe, then elide the surplus.
+ const QString last = documentedItems.last();
+ documentedItems = documentedItems.mid(0, MaxEnumValues - 1);
+ documentedItems += "&hellip;";
+ documentedItems += last;
+ }
+ synopsis += documentedItems.join(QLatin1String(", "));
+
+ if (!documentedItems.isEmpty())
+ synopsis += QLatin1Char(' ');
+ synopsis += QLatin1Char('}');
+ }
+ break;
+ case Node::TypeAlias:
+ if (style == Section::Details) {
+ auto templateDecl = node->templateDecl();
+ if (templateDecl)
+ synopsis += protect((*templateDecl).to_qstring()) + QLatin1Char(' ');
+ }
+ synopsis += name;
+ break;
+ case Node::Typedef:
+ if (static_cast<const TypedefNode *>(node)->associatedEnum())
+ synopsis = "flags ";
+ synopsis += name;
+ break;
+ case Node::Property: {
+ auto property = static_cast<const PropertyNode *>(node);
+ synopsis = name + " : " + typified(property->qualifiedDataType());
+ break;
+ }
+ case Node::QmlProperty: {
+ auto property = static_cast<const QmlPropertyNode *>(node);
+ synopsis = name + " : " + typified(property->dataType());
+ break;
+ }
+ case Node::Variable:
+ variable = static_cast<const VariableNode *>(node);
+ if (style == Section::AllMembers) {
+ synopsis = name + " : " + typified(variable->dataType());
+ } else {
+ synopsis = typified(variable->leftType(), true) + name + protect(variable->rightType());
+ }
+ break;
+ default:
+ synopsis = name;
+ }
+
+ QString extra = CodeMarker::extraSynopsis(node, style);
+ if (!extra.isEmpty()) {
+ extra.prepend(u"<@extra>"_s);
+ extra.append(u"</@extra> "_s);
+ }
+
+ return extra + synopsis;
+}
+
+/*!
+ */
+QString CppCodeMarker::markedUpQmlItem(const Node *node, bool summary)
+{
+ QString name = taggedQmlNode(node);
+ QString synopsis;
+
+ if (summary) {
+ name = linkTag(node, name);
+ } else if (node->isQmlProperty()) {
+ const auto *pn = static_cast<const QmlPropertyNode *>(node);
+ if (pn->isAttached())
+ name.prepend(pn->element() + QLatin1Char('.'));
+ }
+ name = "<@name>" + name + "</@name>";
+ if (node->isQmlProperty()) {
+ const auto *pn = static_cast<const QmlPropertyNode *>(node);
+ synopsis = name + " : " + typified(pn->dataType());
+ } else if (node->isFunction(Node::QML)) {
+ const auto *func = static_cast<const FunctionNode *>(node);
+ if (!func->returnType().isEmpty())
+ synopsis = typified(func->returnType(), true) + name;
+ else
+ synopsis = name;
+ synopsis += QLatin1Char('(');
+ if (!func->parameters().isEmpty()) {
+ const Parameters &parameters = func->parameters();
+ for (int i = 0; i < parameters.count(); ++i) {
+ if (i > 0)
+ synopsis += ", ";
+ QString name = parameters.at(i).name();
+ QString type = parameters.at(i).type();
+ QString paramName;
+ if (!name.isEmpty()) {
+ synopsis += typified(type, true);
+ paramName = name;
+ } else {
+ paramName = type;
+ }
+ synopsis += "<@param>" + protect(paramName) + "</@param>";
+ }
+ }
+ synopsis += QLatin1Char(')');
+ } else {
+ synopsis = name;
+ }
+
+ QString extra = CodeMarker::extraSynopsis(node, summary ? Section::Summary : Section::Details);
+ if (!extra.isEmpty()) {
+ extra.prepend(u" <@extra>"_s);
+ extra.append(u"</@extra>"_s);
+ }
+
+ return synopsis + extra;
+}
+
+QString CppCodeMarker::markedUpName(const Node *node)
+{
+ QString name = linkTag(node, taggedNode(node));
+ if (node->isFunction() && !node->isMacro())
+ name += "()";
+ return name;
+}
+
+QString CppCodeMarker::markedUpEnumValue(const QString &enumValue, const Node *relative)
+{
+ const auto *node = relative->parent();
+
+ if (relative->isQmlProperty()) {
+ const auto *qpn = static_cast<const QmlPropertyNode*>(relative);
+ if (qpn->enumNode() && !enumValue.startsWith("%1."_L1.arg(qpn->enumPrefix())))
+ return "%1<@op>.</@op>%2"_L1.arg(qpn->enumPrefix(), enumValue);
+ }
+
+ if (!relative->isEnumType()) {
+ return enumValue;
+ }
+
+ QStringList parts;
+ while (!node->isHeader() && node->parent()) {
+ parts.prepend(markedUpName(node));
+ if (node->parent() == relative || node->parent()->name().isEmpty())
+ break;
+ node = node->parent();
+ }
+ if (static_cast<const EnumNode *>(relative)->isScoped())
+ parts.append(relative->name());
+
+ parts.append(enumValue);
+ return parts.join(QLatin1String("<@op>::</@op>"));
+}
+
+QString CppCodeMarker::markedUpInclude(const QString &include)
+{
+ return "<@preprocessor>#include &lt;<@headerfile>" + include + "</@headerfile>&gt;</@preprocessor>";
+}
+
+/*
+ @char
+ @class
+ @comment
+ @function
+ @keyword
+ @number
+ @op
+ @preprocessor
+ @string
+ @type
+*/
+
+QString CppCodeMarker::addMarkUp(const QString &in, const Node * /* relative */,
+ const Location & /* location */)
+{
+ static QSet<QString> types{
+ QLatin1String("bool"), QLatin1String("char"), QLatin1String("double"),
+ QLatin1String("float"), QLatin1String("int"), QLatin1String("long"),
+ QLatin1String("short"), QLatin1String("signed"), QLatin1String("unsigned"),
+ QLatin1String("uint"), QLatin1String("ulong"), QLatin1String("ushort"),
+ QLatin1String("uchar"), QLatin1String("void"), QLatin1String("qlonglong"),
+ QLatin1String("qulonglong"), QLatin1String("qint"), QLatin1String("qint8"),
+ QLatin1String("qint16"), QLatin1String("qint32"), QLatin1String("qint64"),
+ QLatin1String("quint"), QLatin1String("quint8"), QLatin1String("quint16"),
+ QLatin1String("quint32"), QLatin1String("quint64"), QLatin1String("qreal"),
+ QLatin1String("cond")
+ };
+
+ static QSet<QString> keywords{
+ QLatin1String("and"), QLatin1String("and_eq"), QLatin1String("asm"), QLatin1String("auto"),
+ QLatin1String("bitand"), QLatin1String("bitor"), QLatin1String("break"),
+ QLatin1String("case"), QLatin1String("catch"), QLatin1String("class"),
+ QLatin1String("compl"), QLatin1String("const"), QLatin1String("const_cast"),
+ QLatin1String("continue"), QLatin1String("default"), QLatin1String("delete"),
+ QLatin1String("do"), QLatin1String("dynamic_cast"), QLatin1String("else"),
+ QLatin1String("enum"), QLatin1String("explicit"), QLatin1String("export"),
+ QLatin1String("extern"), QLatin1String("false"), QLatin1String("for"),
+ QLatin1String("friend"), QLatin1String("goto"), QLatin1String("if"),
+ QLatin1String("include"), QLatin1String("inline"), QLatin1String("monitor"),
+ QLatin1String("mutable"), QLatin1String("namespace"), QLatin1String("new"),
+ QLatin1String("not"), QLatin1String("not_eq"), QLatin1String("operator"),
+ QLatin1String("or"), QLatin1String("or_eq"), QLatin1String("private"),
+ QLatin1String("protected"), QLatin1String("public"), QLatin1String("register"),
+ QLatin1String("reinterpret_cast"), QLatin1String("return"), QLatin1String("sizeof"),
+ QLatin1String("static"), QLatin1String("static_cast"), QLatin1String("struct"),
+ QLatin1String("switch"), QLatin1String("template"), QLatin1String("this"),
+ QLatin1String("throw"), QLatin1String("true"), QLatin1String("try"),
+ QLatin1String("typedef"), QLatin1String("typeid"), QLatin1String("typename"),
+ QLatin1String("union"), QLatin1String("using"), QLatin1String("virtual"),
+ QLatin1String("volatile"), QLatin1String("wchar_t"), QLatin1String("while"),
+ QLatin1String("xor"), QLatin1String("xor_eq"), QLatin1String("synchronized"),
+ // Qt specific
+ QLatin1String("signals"), QLatin1String("slots"), QLatin1String("emit")
+ };
+
+ QString code = in;
+ QString out;
+ QStringView text;
+ int braceDepth = 0;
+ int parenDepth = 0;
+ int i = 0;
+ int start = 0;
+ int finish = 0;
+ QChar ch;
+ static const QRegularExpression classRegExp(QRegularExpression::anchoredPattern("Qt?(?:[A-Z3]+[a-z][A-Za-z]*|t)"));
+ static const QRegularExpression functionRegExp(QRegularExpression::anchoredPattern("q([A-Z][a-z]+)+"));
+ static const QRegularExpression findFunctionRegExp(QStringLiteral("^\\s*\\("));
+ bool atEOF = false;
+
+ auto readChar = [&]() {
+ if (i < code.size())
+ ch = code[i++];
+ else
+ atEOF = true;
+ };
+
+ readChar();
+ while (!atEOF) {
+ QString tag;
+ bool target = false;
+
+ if (ch.isLetter() || ch == '_') {
+ QString ident;
+ do {
+ ident += ch;
+ finish = i;
+ readChar();
+ } while (!atEOF && (ch.isLetterOrNumber() || ch == '_'));
+
+ if (classRegExp.match(ident).hasMatch()) {
+ tag = QStringLiteral("type");
+ } else if (functionRegExp.match(ident).hasMatch()) {
+ tag = QStringLiteral("func");
+ target = true;
+ } else if (types.contains(ident)) {
+ tag = QStringLiteral("type");
+ } else if (keywords.contains(ident)) {
+ tag = QStringLiteral("keyword");
+ } else if (braceDepth == 0 && parenDepth == 0) {
+ if (code.indexOf(findFunctionRegExp, i - 1) == i - 1)
+ tag = QStringLiteral("func");
+ target = true;
+ }
+ } else if (ch.isDigit()) {
+ do {
+ finish = i;
+ readChar();
+ } while (!atEOF && (ch.isLetterOrNumber() || ch == '.' || ch == '\''));
+ tag = QStringLiteral("number");
+ } else {
+ switch (ch.unicode()) {
+ case '+':
+ case '-':
+ case '!':
+ case '%':
+ case '^':
+ case '&':
+ case '*':
+ case ',':
+ case '.':
+ case '<':
+ case '=':
+ case '>':
+ case '?':
+ case '[':
+ case ']':
+ case '|':
+ case '~':
+ finish = i;
+ readChar();
+ tag = QStringLiteral("op");
+ break;
+ case '"':
+ finish = i;
+ readChar();
+
+ while (!atEOF && ch != '"') {
+ if (ch == '\\')
+ readChar();
+ readChar();
+ }
+ finish = i;
+ readChar();
+ tag = QStringLiteral("string");
+ break;
+ case '#':
+ finish = i;
+ readChar();
+ while (!atEOF && ch != '\n') {
+ if (ch == '\\')
+ readChar();
+ finish = i;
+ readChar();
+ }
+ tag = QStringLiteral("preprocessor");
+ break;
+ case '\'':
+ finish = i;
+ readChar();
+
+ while (!atEOF && ch != '\'') {
+ if (ch == '\\')
+ readChar();
+ readChar();
+ }
+ finish = i;
+ readChar();
+ tag = QStringLiteral("char");
+ break;
+ case '(':
+ finish = i;
+ readChar();
+ ++parenDepth;
+ break;
+ case ')':
+ finish = i;
+ readChar();
+ --parenDepth;
+ break;
+ case ':':
+ finish = i;
+ readChar();
+ if (!atEOF && ch == ':') {
+ finish = i;
+ readChar();
+ tag = QStringLiteral("op");
+ }
+ break;
+ case '/':
+ finish = i;
+ readChar();
+ if (!atEOF && ch == '/') {
+ do {
+ finish = i;
+ readChar();
+ } while (!atEOF && ch != '\n');
+ tag = QStringLiteral("comment");
+ } else if (ch == '*') {
+ bool metAster = false;
+ bool metAsterSlash = false;
+
+ finish = i;
+ readChar();
+
+ while (!metAsterSlash) {
+ if (atEOF)
+ break;
+ if (ch == '*')
+ metAster = true;
+ else if (metAster && ch == '/')
+ metAsterSlash = true;
+ else
+ metAster = false;
+ finish = i;
+ readChar();
+ }
+ tag = QStringLiteral("comment");
+ } else {
+ tag = QStringLiteral("op");
+ }
+ break;
+ case '{':
+ finish = i;
+ readChar();
+ braceDepth++;
+ break;
+ case '}':
+ finish = i;
+ readChar();
+ braceDepth--;
+ break;
+ default:
+ finish = i;
+ readChar();
+ }
+ }
+
+ text = QStringView{code}.mid(start, finish - start);
+ start = finish;
+
+ if (!tag.isEmpty()) {
+ out += QStringLiteral("<@");
+ out += tag;
+ if (target) {
+ out += QStringLiteral(" target=\"");
+ out += text;
+ out += QStringLiteral("()\"");
+ }
+ out += QStringLiteral(">");
+ }
+
+ appendProtectedString(&out, text);
+
+ if (!tag.isEmpty()) {
+ out += QStringLiteral("</@");
+ out += tag;
+ out += QStringLiteral(">");
+ }
+ }
+
+ if (start < code.size()) {
+ appendProtectedString(&out, QStringView{code}.mid(start));
+ }
+
+ return out;
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/cppcodemarker.h b/src/qdoc/qdoc/src/qdoc/cppcodemarker.h
new file mode 100644
index 000000000..b0c5f3615
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/cppcodemarker.h
@@ -0,0 +1,35 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef CPPCODEMARKER_H
+#define CPPCODEMARKER_H
+
+#include "codemarker.h"
+
+QT_BEGIN_NAMESPACE
+
+class CppCodeMarker : public CodeMarker
+{
+public:
+ CppCodeMarker() = default;
+ ~CppCodeMarker() override = default;
+
+ bool recognizeCode(const QString &code) override;
+ bool recognizeExtension(const QString &ext) override;
+ bool recognizeLanguage(const QString &lang) override;
+ [[nodiscard]] Atom::AtomType atomType() const override;
+ QString markedUpCode(const QString &code, const Node *relative,
+ const Location &location) override;
+ QString markedUpSynopsis(const Node *node, const Node *relative, Section::Style style) override;
+ QString markedUpQmlItem(const Node *node, bool summary) override;
+ QString markedUpName(const Node *node) override;
+ QString markedUpEnumValue(const QString &enumValue, const Node *relative) override;
+ QString markedUpInclude(const QString &include) override;
+
+private:
+ QString addMarkUp(const QString &protectedCode, const Node *relative, const Location &location);
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/cppcodeparser.cpp b/src/qdoc/qdoc/src/qdoc/cppcodeparser.cpp
new file mode 100644
index 000000000..82bc09064
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/cppcodeparser.cpp
@@ -0,0 +1,997 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "cppcodeparser.h"
+
+#include "access.h"
+#include "classnode.h"
+#include "clangcodeparser.h"
+#include "collectionnode.h"
+#include "comparisoncategory.h"
+#include "config.h"
+#include "examplenode.h"
+#include "externalpagenode.h"
+#include "functionnode.h"
+#include "generator.h"
+#include "headernode.h"
+#include "namespacenode.h"
+#include "qdocdatabase.h"
+#include "qmltypenode.h"
+#include "qmlpropertynode.h"
+#include "sharedcommentnode.h"
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qmap.h>
+
+#include <algorithm>
+
+using namespace Qt::Literals::StringLiterals;
+
+QT_BEGIN_NAMESPACE
+
+/*
+ All these can appear in a C++ namespace. Don't add
+ anything that can't be in a C++ namespace.
+ */
+static const QMap<QString, Node::NodeType> s_nodeTypeMap{
+ { COMMAND_NAMESPACE, Node::Namespace }, { COMMAND_NAMESPACE, Node::Namespace },
+ { COMMAND_CLASS, Node::Class }, { COMMAND_STRUCT, Node::Struct },
+ { COMMAND_UNION, Node::Union }, { COMMAND_ENUM, Node::Enum },
+ { COMMAND_TYPEALIAS, Node::TypeAlias }, { COMMAND_TYPEDEF, Node::Typedef },
+ { COMMAND_PROPERTY, Node::Property }, { COMMAND_VARIABLE, Node::Variable }
+};
+
+typedef bool (Node::*NodeTypeTestFunc)() const;
+static const QMap<QString, NodeTypeTestFunc> s_nodeTypeTestFuncMap{
+ { COMMAND_NAMESPACE, &Node::isNamespace }, { COMMAND_CLASS, &Node::isClassNode },
+ { COMMAND_STRUCT, &Node::isStruct }, { COMMAND_UNION, &Node::isUnion },
+ { COMMAND_ENUM, &Node::isEnumType }, { COMMAND_TYPEALIAS, &Node::isTypeAlias },
+ { COMMAND_TYPEDEF, &Node::isTypedef }, { COMMAND_PROPERTY, &Node::isProperty },
+ { COMMAND_VARIABLE, &Node::isVariable },
+};
+
+CppCodeParser::CppCodeParser(FnCommandParser&& parser)
+ : fn_parser{parser}
+{
+ Config &config = Config::instance();
+ QStringList exampleFilePatterns{config.get(CONFIG_EXAMPLES
+ + Config::dot
+ + CONFIG_FILEEXTENSIONS).asStringList()};
+
+ if (!exampleFilePatterns.isEmpty())
+ m_exampleNameFilter = exampleFilePatterns.join(' ');
+ else
+ m_exampleNameFilter = "*.cpp *.h *.js *.xq *.svg *.xml *.ui";
+
+ QStringList exampleImagePatterns{config.get(CONFIG_EXAMPLES
+ + Config::dot
+ + CONFIG_IMAGEEXTENSIONS).asStringList()};
+
+ if (!exampleImagePatterns.isEmpty())
+ m_exampleImageFilter = exampleImagePatterns.join(' ');
+ else
+ m_exampleImageFilter = "*.png";
+
+ m_showLinkErrors = !config.get(CONFIG_NOLINKERRORS).asBool();
+}
+
+/*!
+ Process the topic \a command found in the \a doc with argument \a arg.
+ */
+Node *CppCodeParser::processTopicCommand(const Doc &doc, const QString &command,
+ const ArgPair &arg)
+{
+ QDocDatabase* database = QDocDatabase::qdocDB();
+
+ if (command == COMMAND_FN) {
+ Q_UNREACHABLE();
+ } else if (s_nodeTypeMap.contains(command)) {
+ /*
+ We should only get in here if the command refers to
+ something that can appear in a C++ namespace,
+ i.e. a class, another namespace, an enum, a typedef,
+ a property or a variable. I think these are handled
+ this way to allow the writer to refer to the entity
+ without including the namespace qualifier.
+ */
+ Node::NodeType type = s_nodeTypeMap[command];
+ QStringList words = arg.first.split(QLatin1Char(' '));
+ QStringList path;
+ qsizetype idx = 0;
+ Node *node = nullptr;
+
+ if (type == Node::Variable && words.size() > 1)
+ idx = words.size() - 1;
+ path = words[idx].split("::");
+
+ node = database->findNodeByNameAndType(path, s_nodeTypeTestFuncMap[command]);
+ // Allow representing a type alias as a class
+ if (node == nullptr && command == COMMAND_CLASS) {
+ node = database->findNodeByNameAndType(path, &Node::isTypeAlias);
+ if (node) {
+ auto access = node->access();
+ auto loc = node->location();
+ auto templateDecl = node->templateDecl();
+ node = new ClassNode(Node::Class, node->parent(), node->name());
+ node->setAccess(access);
+ node->setLocation(loc);
+ node->setTemplateDecl(templateDecl);
+ }
+ }
+ if (node == nullptr) {
+ if (CodeParser::isWorthWarningAbout(doc)) {
+ doc.location().warning(
+ QStringLiteral("Cannot find '%1' specified with '\\%2' in any header file")
+ .arg(arg.first, command));
+ }
+ } else if (node->isAggregate()) {
+ if (type == Node::Namespace) {
+ auto *ns = static_cast<NamespaceNode *>(node);
+ ns->markSeen();
+ ns->setWhereDocumented(ns->tree()->camelCaseModuleName());
+ }
+ }
+ return node;
+ } else if (command == COMMAND_EXAMPLE) {
+ if (Config::generateExamples) {
+ auto *en = new ExampleNode(database->primaryTreeRoot(), arg.first);
+ en->setLocation(doc.startLocation());
+ setExampleFileLists(en);
+ return en;
+ }
+ } else if (command == COMMAND_EXTERNALPAGE) {
+ auto *epn = new ExternalPageNode(database->primaryTreeRoot(), arg.first);
+ epn->setLocation(doc.startLocation());
+ return epn;
+ } else if (command == COMMAND_HEADERFILE) {
+ auto *hn = new HeaderNode(database->primaryTreeRoot(), arg.first);
+ hn->setLocation(doc.startLocation());
+ return hn;
+ } else if (command == COMMAND_GROUP) {
+ CollectionNode *cn = database->addGroup(arg.first);
+ cn->setLocation(doc.startLocation());
+ cn->markSeen();
+ return cn;
+ } else if (command == COMMAND_MODULE) {
+ CollectionNode *cn = database->addModule(arg.first);
+ cn->setLocation(doc.startLocation());
+ cn->markSeen();
+ return cn;
+ } else if (command == COMMAND_QMLMODULE) {
+ QStringList blankSplit = arg.first.split(QLatin1Char(' '));
+ CollectionNode *cn = database->addQmlModule(blankSplit[0]);
+ cn->setLogicalModuleInfo(blankSplit);
+ cn->setLocation(doc.startLocation());
+ cn->markSeen();
+ return cn;
+ } else if (command == COMMAND_PAGE) {
+ auto *pn = new PageNode(database->primaryTreeRoot(), arg.first.split(' ').front());
+ pn->setLocation(doc.startLocation());
+ return pn;
+ } else if (command == COMMAND_QMLTYPE ||
+ command == COMMAND_QMLVALUETYPE ||
+ command == COMMAND_QMLBASICTYPE) {
+ auto nodeType = (command == COMMAND_QMLTYPE) ? Node::QmlType : Node::QmlValueType;
+ QString qmid;
+ if (auto args = doc.metaCommandArgs(COMMAND_INQMLMODULE); !args.isEmpty())
+ qmid = args.first().first;
+ auto *qcn = database->findQmlTypeInPrimaryTree(qmid, arg.first);
+ // A \qmlproperty may have already constructed a placeholder type
+ // without providing a module identifier; allow such cases
+ if (!qcn && !qmid.isEmpty())
+ qcn = database->findQmlTypeInPrimaryTree(QString(), arg.first);
+ if (!qcn || qcn->nodeType() != nodeType)
+ qcn = new QmlTypeNode(database->primaryTreeRoot(), arg.first, nodeType);
+ if (!qmid.isEmpty())
+ database->addToQmlModule(qmid, qcn);
+ qcn->setLocation(doc.startLocation());
+ return qcn;
+ } else if ((command == COMMAND_QMLSIGNAL) || (command == COMMAND_QMLMETHOD)
+ || (command == COMMAND_QMLATTACHEDSIGNAL) || (command == COMMAND_QMLATTACHEDMETHOD)) {
+ Q_UNREACHABLE();
+ }
+ return nullptr;
+}
+
+/*!
+ A QML property argument has the form...
+
+ <type> <QML-type>::<name>
+ <type> <QML-module>::<QML-type>::<name>
+
+ This function splits the argument into one of those
+ two forms. The three part form is the old form, which
+ was used before the creation of Qt Quick 2 and Qt
+ Components. A <QML-module> is the QML equivalent of a
+ C++ namespace. So this function splits \a arg on "::"
+ and stores the parts in \a type, \a module, \a qmlTypeName,
+ and \a name, and returns \c true. If any part other than
+ \a module is not found, a qdoc warning is emitted and
+ false is returned.
+
+ \note The two QML types \e{Component} and \e{QtObject}
+ never have a module qualifier.
+ */
+bool CppCodeParser::splitQmlPropertyArg(const QString &arg, QString &type, QString &module,
+ QString &qmlTypeName, QString &name,
+ const Location &location)
+{
+ QStringList blankSplit = arg.split(QLatin1Char(' '));
+ if (blankSplit.size() > 1) {
+ type = blankSplit[0];
+ QStringList colonSplit(blankSplit[1].split("::"));
+ if (colonSplit.size() == 3) {
+ module = colonSplit[0];
+ qmlTypeName = colonSplit[1];
+ name = colonSplit[2];
+ return true;
+ }
+ if (colonSplit.size() == 2) {
+ module.clear();
+ qmlTypeName = colonSplit[0];
+ name = colonSplit[1];
+ return true;
+ }
+ location.warning(
+ QStringLiteral("Unrecognizable QML module/component qualifier for %1").arg(arg));
+ } else {
+ location.warning(QStringLiteral("Missing property type for %1").arg(arg));
+ }
+ return false;
+}
+
+std::vector<TiedDocumentation> CppCodeParser::processQmlProperties(const UntiedDocumentation &untied)
+{
+ const Doc &doc = untied.documentation;
+ const TopicList &topics = doc.topicsUsed();
+ if (topics.isEmpty())
+ return {};
+
+ QString arg;
+ QString type;
+ QString group;
+ QString qmlModule;
+ QString property;
+ QString qmlTypeName;
+
+ std::vector<TiedDocumentation> tied{};
+
+ Topic topic = topics.at(0);
+ arg = topic.m_args;
+ if (splitQmlPropertyArg(arg, type, qmlModule, qmlTypeName, property, doc.location())) {
+ qsizetype i = property.indexOf('.');
+ if (i != -1)
+ group = property.left(i);
+ }
+
+ QDocDatabase *database = QDocDatabase::qdocDB();
+
+ NodeList sharedNodes;
+ QmlTypeNode *qmlType = database->findQmlTypeInPrimaryTree(qmlModule, qmlTypeName);
+ // Note: Constructing a QmlType node by default, as opposed to QmlValueType.
+ // This may lead to unexpected behavior if documenting \qmlvaluetype's properties
+ // before the type itself.
+ if (qmlType == nullptr) {
+ qmlType = new QmlTypeNode(database->primaryTreeRoot(), qmlTypeName, Node::QmlType);
+ qmlType->setLocation(doc.startLocation());
+ if (!qmlModule.isEmpty())
+ database->addToQmlModule(qmlModule, qmlType);
+ }
+
+ for (const auto &topicCommand : topics) {
+ QString cmd = topicCommand.m_topic;
+ arg = topicCommand.m_args;
+ if ((cmd == COMMAND_QMLPROPERTY) || (cmd == COMMAND_QMLATTACHEDPROPERTY)) {
+ bool attached = cmd.contains(QLatin1String("attached"));
+ if (splitQmlPropertyArg(arg, type, qmlModule, qmlTypeName, property, doc.location())) {
+ if (qmlType != database->findQmlTypeInPrimaryTree(qmlModule, qmlTypeName)) {
+ doc.startLocation().warning(
+ QStringLiteral(
+ "All properties in a group must belong to the same type: '%1'")
+ .arg(arg));
+ continue;
+ }
+ QmlPropertyNode *existingProperty = qmlType->hasQmlProperty(property, attached);
+ if (existingProperty) {
+ processMetaCommands(doc, existingProperty);
+ if (!doc.body().isEmpty()) {
+ doc.startLocation().warning(
+ QStringLiteral("QML property documented multiple times: '%1'")
+ .arg(arg), QStringLiteral("also seen here: %1")
+ .arg(existingProperty->location().toString()));
+ }
+ continue;
+ }
+ auto *qpn = new QmlPropertyNode(qmlType, property, type, attached);
+ qpn->setLocation(doc.startLocation());
+ qpn->setGenus(Node::QML);
+
+ tied.emplace_back(TiedDocumentation{doc, qpn});
+
+ sharedNodes << qpn;
+ }
+ } else {
+ doc.startLocation().warning(
+ QStringLiteral("Command '\\%1'; not allowed with QML property commands")
+ .arg(cmd));
+ }
+ }
+
+ // Construct a SharedCommentNode (scn) if multiple topics generated
+ // valid nodes. Note that it's important to do this *after* constructing
+ // the topic nodes - which need to be written to index before the related
+ // scn.
+ if (sharedNodes.size() > 1) {
+ auto *scn = new SharedCommentNode(qmlType, sharedNodes.size(), group);
+ scn->setLocation(doc.startLocation());
+
+ tied.emplace_back(TiedDocumentation{doc, scn});
+
+ for (const auto n : sharedNodes)
+ scn->append(n);
+ scn->sort();
+ }
+
+ return tied;
+}
+
+/*!
+ Process the metacommand \a command in the context of the
+ \a node associated with the topic command and the \a doc.
+ \a arg is the argument to the metacommand.
+
+ \a node is guaranteed to be non-null.
+ */
+void CppCodeParser::processMetaCommand(const Doc &doc, const QString &command,
+ const ArgPair &argPair, Node *node)
+{
+ QDocDatabase* database = QDocDatabase::qdocDB();
+
+ QString arg = argPair.first;
+ if (command == COMMAND_INHEADERFILE) {
+ // TODO: [incorrect-constructs][header-arg]
+ // The emptiness check for arg is required as,
+ // currently, DocParser fancies passing (without any warning)
+ // incorrect constructs doen the chain, such as an
+ // "\inheaderfile" command with no argument.
+ //
+ // As it is the case here, we require further sanity checks to
+ // preserve some of the semantic for the later phases.
+ // This generally has a ripple effect on the whole codebase,
+ // making it more complex and increasesing the surface of bugs.
+ //
+ // The following emptiness check should be removed as soon as
+ // DocParser is enhanced with correct semantics.
+ if (node->isAggregate() && !arg.isEmpty())
+ static_cast<Aggregate *>(node)->setIncludeFile(arg);
+ else
+ doc.location().warning(QStringLiteral("Ignored '\\%1'").arg(COMMAND_INHEADERFILE));
+ } else if (command == COMMAND_COMPARES) {
+ processComparesCommand(node, arg, doc.location());
+ } else if (command == COMMAND_COMPARESWITH) {
+ if (!node->isClassNode())
+ doc.location().warning(
+ u"Found \\%1 command outside of \\%2 context."_s
+ .arg(COMMAND_COMPARESWITH, COMMAND_CLASS));
+ } else if (command == COMMAND_OVERLOAD) {
+ /*
+ Note that this might set the overload flag of the
+ primary function. This is ok because the overload
+ flags and overload numbers will be resolved later
+ in Aggregate::normalizeOverloads().
+ */
+ if (node->isFunction())
+ static_cast<FunctionNode *>(node)->setOverloadFlag();
+ else if (node->isSharedCommentNode())
+ static_cast<SharedCommentNode *>(node)->setOverloadFlags();
+ else
+ doc.location().warning(QStringLiteral("Ignored '\\%1'").arg(COMMAND_OVERLOAD));
+ } else if (command == COMMAND_REIMP) {
+ if (node->parent() && !node->parent()->isInternal()) {
+ if (node->isFunction()) {
+ auto *fn = static_cast<FunctionNode *>(node);
+ // The clang visitor class will have set the
+ // qualified name of the overridden function.
+ // If the name of the overridden function isn't
+ // set, issue a warning.
+ if (fn->overridesThis().isEmpty() && CodeParser::isWorthWarningAbout(doc)) {
+ doc.location().warning(
+ QStringLiteral("Cannot find base function for '\\%1' in %2()")
+ .arg(COMMAND_REIMP, node->name()),
+ QStringLiteral("The function either doesn't exist in any "
+ "base class with the same signature or it "
+ "exists but isn't virtual."));
+ }
+ fn->setReimpFlag();
+ } else {
+ doc.location().warning(
+ QStringLiteral("Ignored '\\%1' in %2").arg(COMMAND_REIMP, node->name()));
+ }
+ }
+ } else if (command == COMMAND_RELATES) {
+ // REMARK: Generates warnings only; Node instances are
+ // adopted from the root namespace to other Aggregates
+ // in a post-processing step, Aggregate::resolveRelates(),
+ // after all topic commands are processed.
+ if (node->isAggregate()) {
+ doc.location().warning("Invalid '\\%1' not allowed in '\\%2'"_L1
+ .arg(COMMAND_RELATES, node->nodeTypeString()));
+ } else if (!node->isRelatedNonmember() && node->parent()->isClassNode()) {
+ if (!doc.isInternal()) {
+ doc.location().warning("Invalid '\\%1' ('%2' must be global)"_L1
+ .arg(COMMAND_RELATES, node->name()));
+ }
+ }
+ } else if (command == COMMAND_NEXTPAGE) {
+ CodeParser::setLink(node, Node::NextLink, arg);
+ } else if (command == COMMAND_PREVIOUSPAGE) {
+ CodeParser::setLink(node, Node::PreviousLink, arg);
+ } else if (command == COMMAND_STARTPAGE) {
+ CodeParser::setLink(node, Node::StartLink, arg);
+ } else if (command == COMMAND_QMLINHERITS) {
+ if (node->name() == arg)
+ doc.location().warning(QStringLiteral("%1 tries to inherit itself").arg(arg));
+ else if (node->isQmlType()) {
+ 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_DEFAULT) {
+ if (!node->isQmlProperty()) {
+ doc.location().warning(QStringLiteral("Ignored '\\%1', applies only to '\\%2'")
+ .arg(command, COMMAND_QMLPROPERTY));
+ } else if (arg.isEmpty()) {
+ doc.location().warning(QStringLiteral("Expected an argument for '\\%1' (maybe you meant '\\%2'?)")
+ .arg(command, COMMAND_QMLDEFAULT));
+ } else {
+ static_cast<QmlPropertyNode *>(node)->setDefaultValue(arg);
+ }
+ } else if (command == COMMAND_QMLDEFAULT) {
+ node->markDefault();
+ } else if (command == COMMAND_QMLENUMERATORSFROM) {
+ if (!node->isQmlProperty()) {
+ doc.location().warning("Ignored '\\%1', applies only to '\\%2'"_L1
+ .arg(command, COMMAND_QMLPROPERTY));
+ } else if (!static_cast<QmlPropertyNode*>(node)->setEnumNode(argPair.first, argPair.second)) {
+ doc.location().warning("Failed to find C++ enumeration '%2' passed to \\%1"_L1
+ .arg(command, arg), "Use \\value commands instead"_L1);
+ }
+ } else if (command == COMMAND_QMLREADONLY) {
+ node->markReadOnly(true);
+ } else if (command == COMMAND_QMLREQUIRED) {
+ if (!node->isQmlProperty())
+ doc.location().warning(QStringLiteral("Ignored '\\%1'").arg(COMMAND_QMLREQUIRED));
+ else
+ static_cast<QmlPropertyNode *>(node)->setRequired();
+ } else if ((command == COMMAND_QMLABSTRACT) || (command == COMMAND_ABSTRACT)) {
+ if (node->isQmlType())
+ node->setAbstract(true);
+ } else if (command == COMMAND_DEPRECATED) {
+ node->setDeprecated(argPair.second);
+ } else if (command == COMMAND_INGROUP || command == COMMAND_INPUBLICGROUP) {
+ // Note: \ingroup and \inpublicgroup are the same (and now recognized as such).
+ database->addToGroup(arg, node);
+ } else if (command == COMMAND_INMODULE) {
+ database->addToModule(arg, node);
+ } else if (command == COMMAND_INQMLMODULE) {
+ // Handled when parsing topic commands
+ } else if (command == COMMAND_OBSOLETE) {
+ node->setStatus(Node::Deprecated);
+ } else if (command == COMMAND_NONREENTRANT) {
+ node->setThreadSafeness(Node::NonReentrant);
+ } else if (command == COMMAND_PRELIMINARY) {
+ // \internal wins.
+ if (!node->isInternal())
+ node->setStatus(Node::Preliminary);
+ } else if (command == COMMAND_INTERNAL) {
+ if (!Config::instance().showInternal())
+ node->markInternal();
+ } else if (command == COMMAND_REENTRANT) {
+ node->setThreadSafeness(Node::Reentrant);
+ } else if (command == COMMAND_SINCE) {
+ node->setSince(arg);
+ } else if (command == COMMAND_WRAPPER) {
+ node->setWrapper();
+ } else if (command == COMMAND_THREADSAFE) {
+ node->setThreadSafeness(Node::ThreadSafe);
+ } else if (command == COMMAND_TITLE) {
+ if (!node->setTitle(arg))
+ doc.location().warning(QStringLiteral("Ignored '\\%1'").arg(COMMAND_TITLE));
+ else if (node->isExample())
+ database->addExampleNode(static_cast<ExampleNode *>(node));
+ } else if (command == COMMAND_SUBTITLE) {
+ if (!node->setSubtitle(arg))
+ doc.location().warning(QStringLiteral("Ignored '\\%1'").arg(COMMAND_SUBTITLE));
+ } else if (command == COMMAND_QTVARIABLE) {
+ node->setQtVariable(arg);
+ if (!node->isModule() && !node->isQmlModule())
+ doc.location().warning(
+ QStringLiteral(
+ "Command '\\%1' is only meaningful in '\\module' and '\\qmlmodule'.")
+ .arg(COMMAND_QTVARIABLE));
+ } else if (command == COMMAND_QTCMAKEPACKAGE) {
+ if (node->isModule())
+ node->setQtCMakeComponent(arg);
+ else
+ doc.location().warning(
+ QStringLiteral("Command '\\%1' is only meaningful in '\\module'.")
+ .arg(COMMAND_QTCMAKEPACKAGE));
+ } else if (command == COMMAND_QTCMAKETARGETITEM) {
+ if (node->isModule())
+ node->setQtCMakeTargetItem(arg);
+ else
+ doc.location().warning(
+ QStringLiteral("Command '\\%1' is only meaningful in '\\module'.")
+ .arg(COMMAND_QTCMAKETARGETITEM));
+ } else if (command == COMMAND_MODULESTATE ) {
+ if (!node->isModule() && !node->isQmlModule()) {
+ doc.location().warning(
+ QStringLiteral(
+ "Command '\\%1' is only meaningful in '\\module' and '\\qmlmodule'.")
+ .arg(COMMAND_MODULESTATE));
+ } else {
+ static_cast<CollectionNode*>(node)->setState(arg);
+ }
+ } else if (command == COMMAND_NOAUTOLIST) {
+ if (!node->isCollectionNode() && !node->isExample()) {
+ doc.location().warning(
+ QStringLiteral(
+ "Command '\\%1' is only meaningful in '\\module', '\\qmlmodule', `\\group` and `\\example`.")
+ .arg(COMMAND_NOAUTOLIST));
+ } else {
+ static_cast<PageNode*>(node)->setNoAutoList(true);
+ }
+ } else if (command == COMMAND_ATTRIBUTION) {
+ // TODO: This condition is not currently exact enough, as it
+ // will allow any non-aggregate `PageNode` to use the command,
+ // For example, an `ExampleNode`.
+ //
+ // The command is intended only for internal usage by
+ // "qattributionscanner" and should only work on `PageNode`s
+ // that are generated from a "\page" command.
+ //
+ // It is already possible to provide a more restricted check,
+ // albeit in a somewhat dirty way. It is not expected that
+ // this warning will have any particular use.
+ // If it so happens that a case where the too-broad scope of
+ // the warning is a problem or hides a bug, modify the
+ // condition to be restrictive enough.
+ // Otherwise, wait until a more torough look at QDoc's
+ // internal representations an way to enable "Attribution
+ // Pages" is performed before looking at the issue again.
+ if (!node->isTextPageNode()) {
+ doc.location().warning(u"Command '\\%1' is only meaningful in '\\%2'"_s.arg(COMMAND_ATTRIBUTION, COMMAND_PAGE));
+ } else { static_cast<PageNode*>(node)->markAttribution(); }
+ }
+}
+
+/*!
+ \internal
+ Processes the argument \a arg that's passed to the \\compares command,
+ and sets the comparison category of the \a node accordingly.
+
+ If the argument is invalid, issue a warning at the location the command
+ appears through \a loc.
+*/
+void CppCodeParser::processComparesCommand(Node *node, const QString &arg, const Location &loc)
+{
+ if (!node->isClassNode()) {
+ loc.warning(u"Found \\%1 command outside of \\%2 context."_s.arg(COMMAND_COMPARES,
+ COMMAND_CLASS));
+ return;
+ }
+
+ if (auto category = comparisonCategoryFromString(arg.toStdString());
+ category != ComparisonCategory::None) {
+ node->setComparisonCategory(category);
+ } else {
+ loc.warning(u"Invalid argument to \\%1 command: `%2`"_s.arg(COMMAND_COMPARES, arg),
+ u"Valid arguments are `strong`, `weak`, `partial`, or `equality`."_s);
+ }
+}
+
+/*!
+ The topic command has been processed, and now \a doc and
+ \a node are passed to this function to get the metacommands
+ from \a doc and process them one at a time. \a node is the
+ node where \a doc resides.
+ */
+void CppCodeParser::processMetaCommands(const Doc &doc, Node *node)
+{
+ std::vector<Node*> nodes_to_process{};
+ if (node->isSharedCommentNode()) {
+ auto scn = static_cast<SharedCommentNode*>(node);
+
+ nodes_to_process.reserve(scn->count() + 1);
+ std::copy(scn->collective().cbegin(), scn->collective().cend(), std::back_inserter(nodes_to_process));
+ }
+
+ // REMARK: Ordering is important here. If node is a
+ // SharedCommentNode it MUST be processed after all its child
+ // nodes.
+ // Failure to do so can incur in incorrect warnings.
+ // For example, if a shared documentation has a "\relates" command.
+ // When the command is processed for the SharedCommentNode it will
+ // apply to all its child nodes.
+ // If a child node is processed after the SharedCommentNode that
+ // contains it, that "\relates" command will be considered applied
+ // already, resulting in a warning.
+ nodes_to_process.push_back(node);
+
+ const QStringList metaCommandsUsed = doc.metaCommandsUsed().values();
+ for (const auto &command : metaCommandsUsed) {
+ const ArgList args = doc.metaCommandArgs(command);
+ for (const auto &arg : args) {
+ std::for_each(nodes_to_process.cbegin(), nodes_to_process.cend(), [this, doc, command, arg](auto node){
+ processMetaCommand(doc, command, arg, node);
+ });
+ }
+ }
+}
+
+/*!
+ Parse QML signal/method topic commands.
+ */
+FunctionNode *CppCodeParser::parseOtherFuncArg(const QString &topic, const Location &location,
+ const QString &funcArg)
+{
+ QString funcName;
+ QString returnType;
+
+ qsizetype leftParen = funcArg.indexOf(QChar('('));
+ if (leftParen > 0)
+ funcName = funcArg.left(leftParen);
+ else
+ funcName = funcArg;
+ qsizetype firstBlank = funcName.indexOf(QChar(' '));
+ if (firstBlank > 0) {
+ returnType = funcName.left(firstBlank);
+ funcName = funcName.right(funcName.size() - firstBlank - 1);
+ }
+
+ QStringList colonSplit(funcName.split("::"));
+ if (colonSplit.size() < 2) {
+ QString msg = "Unrecognizable QML module/component qualifier for " + funcArg;
+ location.warning(msg.toLatin1().data());
+ return nullptr;
+ }
+ QString moduleName;
+ QString elementName;
+ if (colonSplit.size() > 2) {
+ moduleName = colonSplit[0];
+ elementName = colonSplit[1];
+ } else {
+ elementName = colonSplit[0];
+ }
+ funcName = colonSplit.last();
+
+ QDocDatabase* database = QDocDatabase::qdocDB();
+
+ auto *aggregate = database->findQmlTypeInPrimaryTree(moduleName, elementName);
+ // Note: Constructing a QmlType node by default, as opposed to QmlValueType.
+ // This may lead to unexpected behavior if documenting \qmlvaluetype's methods
+ // before the type itself.
+ if (!aggregate) {
+ aggregate = new QmlTypeNode(database->primaryTreeRoot(), elementName, Node::QmlType);
+ aggregate->setLocation(location);
+ if (!moduleName.isEmpty())
+ database->addToQmlModule(moduleName, aggregate);
+ }
+
+ QString params;
+ QStringList leftParenSplit = funcArg.split('(');
+ if (leftParenSplit.size() > 1) {
+ QStringList rightParenSplit = leftParenSplit[1].split(')');
+ if (!rightParenSplit.empty())
+ params = rightParenSplit[0];
+ }
+
+ FunctionNode::Metaness metaness = FunctionNode::getMetanessFromTopic(topic);
+ bool attached = topic.contains(QLatin1String("attached"));
+ auto *fn = new FunctionNode(metaness, aggregate, funcName, attached);
+ fn->setAccess(Access::Public);
+ fn->setLocation(location);
+ fn->setReturnType(returnType);
+ fn->setParameters(params);
+ return fn;
+}
+
+/*!
+ Parse the macro arguments in \a macroArg ad hoc, without using
+ any actual parser. If successful, return a pointer to the new
+ FunctionNode for the macro. Otherwise return null. \a location
+ is used for reporting errors.
+ */
+FunctionNode *CppCodeParser::parseMacroArg(const Location &location, const QString &macroArg)
+{
+ QDocDatabase* database = QDocDatabase::qdocDB();
+
+ QStringList leftParenSplit = macroArg.split('(');
+ if (leftParenSplit.isEmpty())
+ return nullptr;
+ QString macroName;
+ FunctionNode *oldMacroNode = nullptr;
+ QStringList blankSplit = leftParenSplit[0].split(' ');
+ if (!blankSplit.empty()) {
+ macroName = blankSplit.last();
+ oldMacroNode = database->findMacroNode(macroName);
+ }
+ QString returnType;
+ if (blankSplit.size() > 1) {
+ blankSplit.removeLast();
+ returnType = blankSplit.join(' ');
+ }
+ QString params;
+ if (leftParenSplit.size() > 1) {
+ const QString &afterParen = leftParenSplit.at(1);
+ qsizetype rightParen = afterParen.indexOf(')');
+ if (rightParen >= 0)
+ params = afterParen.left(rightParen);
+ }
+ int i = 0;
+ while (i < macroName.size() && !macroName.at(i).isLetter())
+ i++;
+ if (i > 0) {
+ returnType += QChar(' ') + macroName.left(i);
+ macroName = macroName.mid(i);
+ }
+ FunctionNode::Metaness metaness = FunctionNode::MacroWithParams;
+ if (params.isEmpty())
+ metaness = FunctionNode::MacroWithoutParams;
+ auto *macro = new FunctionNode(metaness, database->primaryTreeRoot(), macroName);
+ macro->setAccess(Access::Public);
+ macro->setLocation(location);
+ macro->setReturnType(returnType);
+ macro->setParameters(params);
+ if (oldMacroNode && macro->parent() == oldMacroNode->parent()
+ && compare(macro, oldMacroNode) == 0) {
+ location.warning(QStringLiteral("\\macro %1 documented more than once")
+ .arg(macroArg), QStringLiteral("also seen here: %1")
+ .arg(oldMacroNode->doc().location().toString()));
+ }
+ return macro;
+}
+
+void CppCodeParser::setExampleFileLists(ExampleNode *en)
+{
+ Config &config = Config::instance();
+ QString fullPath = config.getExampleProjectFile(en->name());
+ if (fullPath.isEmpty()) {
+ QString details = QLatin1String("Example directories: ")
+ + config.getCanonicalPathList(CONFIG_EXAMPLEDIRS).join(QLatin1Char(' '));
+ en->location().warning(
+ QStringLiteral("Cannot find project file for example '%1'").arg(en->name()),
+ details);
+ return;
+ }
+
+ QDir exampleDir(QFileInfo(fullPath).dir());
+
+ const auto& [excludeDirs, excludeFiles] = config.getExcludedPaths();
+
+ QStringList exampleFiles = Config::getFilesHere(exampleDir.path(), m_exampleNameFilter,
+ Location(), excludeDirs, excludeFiles);
+ // Search for all image files under the example project, excluding doc/images directory.
+ QSet<QString> excludeDocDirs(excludeDirs);
+ excludeDocDirs.insert(exampleDir.path() + QLatin1String("/doc/images"));
+ QStringList imageFiles = Config::getFilesHere(exampleDir.path(), m_exampleImageFilter,
+ Location(), excludeDocDirs, excludeFiles);
+ if (!exampleFiles.isEmpty()) {
+ // move main.cpp to the end, if it exists
+ QString mainCpp;
+
+ const auto isGeneratedOrMainCpp = [&mainCpp](const QString &fileName) {
+ if (fileName.endsWith("/main.cpp")) {
+ if (mainCpp.isEmpty())
+ mainCpp = fileName;
+ return true;
+ }
+ return fileName.contains("/qrc_") || fileName.contains("/moc_")
+ || fileName.contains("/ui_");
+ };
+
+ exampleFiles.erase(
+ std::remove_if(exampleFiles.begin(), exampleFiles.end(), isGeneratedOrMainCpp),
+ exampleFiles.end());
+
+ if (!mainCpp.isEmpty())
+ exampleFiles.append(mainCpp);
+
+ // Add any resource and project files
+ exampleFiles += Config::getFilesHere(exampleDir.path(),
+ QLatin1String("*.qrc *.pro *.qmlproject *.pyproject CMakeLists.txt qmldir"),
+ Location(), excludeDirs, excludeFiles);
+ }
+
+ const qsizetype pathLen = exampleDir.path().size() - en->name().size();
+ for (auto &file : exampleFiles)
+ file = file.mid(pathLen);
+ for (auto &file : imageFiles)
+ file = file.mid(pathLen);
+
+ en->setFiles(exampleFiles, fullPath.mid(pathLen));
+ en->setImages(imageFiles);
+}
+
+/*!
+ returns true if \a t is \e {qmlsignal}, \e {qmlmethod},
+ \e {qmlattachedsignal}, or \e {qmlattachedmethod}.
+ */
+bool CppCodeParser::isQMLMethodTopic(const QString &t)
+{
+ return (t == COMMAND_QMLSIGNAL || t == COMMAND_QMLMETHOD || t == COMMAND_QMLATTACHEDSIGNAL
+ || t == COMMAND_QMLATTACHEDMETHOD);
+}
+
+/*!
+ Returns true if \a t is \e {qmlproperty}, \e {qmlpropertygroup},
+ or \e {qmlattachedproperty}.
+ */
+bool CppCodeParser::isQMLPropertyTopic(const QString &t)
+{
+ return (t == COMMAND_QMLPROPERTY || t == COMMAND_QMLATTACHEDPROPERTY);
+}
+
+std::pair<std::vector<TiedDocumentation>, std::vector<FnMatchError>>
+CppCodeParser::processTopicArgs(const UntiedDocumentation &untied)
+{
+ const Doc &doc = untied.documentation;
+
+ if (doc.topicsUsed().isEmpty())
+ return {};
+
+ QDocDatabase *database = QDocDatabase::qdocDB();
+
+ const QString topic = doc.topicsUsed().first().m_topic;
+
+ std::vector<TiedDocumentation> tied{};
+ std::vector<FnMatchError> errors{};
+
+ if (isQMLPropertyTopic(topic)) {
+ auto tied_qml = processQmlProperties(untied);
+ tied.insert(tied.end(), tied_qml.begin(), tied_qml.end());
+ } else {
+ ArgList args = doc.metaCommandArgs(topic);
+ Node *node = nullptr;
+ if (args.size() == 1) {
+ if (topic == COMMAND_FN) {
+ if (Config::instance().showInternal() || !doc.isInternal()) {
+ auto result = fn_parser(doc.location(), args[0].first, args[0].second, untied.context);
+ if (auto *error = std::get_if<FnMatchError>(&result))
+ errors.emplace_back(*error);
+ else
+ node = std::get<Node*>(result);
+ }
+ } else if (topic == COMMAND_MACRO) {
+ node = parseMacroArg(doc.location(), args[0].first);
+ } else if (isQMLMethodTopic(topic)) {
+ node = parseOtherFuncArg(topic, doc.location(), args[0].first);
+ } else if (topic == COMMAND_DONTDOCUMENT) {
+ database->primaryTree()->addToDontDocumentMap(args[0].first);
+ } else {
+ node = processTopicCommand(doc, topic, args[0]);
+ }
+ if (node != nullptr) {
+ tied.emplace_back(TiedDocumentation{doc, node});
+ }
+ } else if (args.size() > 1) {
+ QList<SharedCommentNode *> sharedCommentNodes;
+ for (const auto &arg : std::as_const(args)) {
+ node = nullptr;
+ if (topic == COMMAND_FN) {
+ if (Config::instance().showInternal() || !doc.isInternal()) {
+ auto result = fn_parser(doc.location(), arg.first, arg.second, untied.context);
+ if (auto *error = std::get_if<FnMatchError>(&result))
+ errors.emplace_back(*error);
+ else
+ node = std::get<Node*>(result);
+ }
+ } else if (topic == COMMAND_MACRO) {
+ node = parseMacroArg(doc.location(), arg.first);
+ } else if (isQMLMethodTopic(topic)) {
+ node = parseOtherFuncArg(topic, doc.location(), arg.first);
+ } else {
+ node = processTopicCommand(doc, topic, arg);
+ }
+ if (node != nullptr) {
+ bool found = false;
+ for (SharedCommentNode *scn : sharedCommentNodes) {
+ if (scn->parent() == node->parent()) {
+ scn->append(node);
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ auto *scn = new SharedCommentNode(node);
+ sharedCommentNodes.append(scn);
+ tied.emplace_back(TiedDocumentation{doc, scn});
+ }
+ }
+ }
+ for (auto *scn : sharedCommentNodes)
+ scn->sort();
+ }
+ }
+ return std::make_pair(tied, errors);
+}
+
+/*!
+ For each node that is part of C++ API and produces a documentation
+ page, this function ensures that the node belongs to a module.
+ */
+static void checkModuleInclusion(Node *n)
+{
+ if (n->physicalModuleName().isEmpty()) {
+ if (n->isInAPI() && !n->name().isEmpty()) {
+ switch (n->nodeType()) {
+ case Node::Class:
+ case Node::Struct:
+ case Node::Union:
+ case Node::Namespace:
+ case Node::HeaderFile:
+ break;
+ default:
+ return;
+ }
+ n->setPhysicalModuleName(Generator::defaultModuleName());
+ QDocDatabase::qdocDB()->addToModule(Generator::defaultModuleName(), n);
+ n->doc().location().warning(
+ QStringLiteral("Documentation for %1 '%2' has no \\inmodule command; "
+ "using project name by default: %3")
+ .arg(Node::nodeTypeString(n->nodeType()), n->name(),
+ n->physicalModuleName()));
+ }
+ }
+}
+
+void CppCodeParser::processMetaCommands(const std::vector<TiedDocumentation> &tied)
+{
+ for (auto [doc, node] : tied) {
+ processMetaCommands(doc, node);
+ node->setDoc(doc);
+ checkModuleInclusion(node);
+ if (node->isAggregate()) {
+ auto *aggregate = static_cast<Aggregate *>(node);
+
+ if (!aggregate->includeFile()) {
+ Aggregate *parent = aggregate;
+ while (parent->physicalModuleName().isEmpty() && (parent->parent() != nullptr))
+ parent = parent->parent();
+
+ if (parent == aggregate)
+ // TODO: Understand if the name can be empty.
+ // In theory it should not be possible as
+ // there would be no aggregate to refer to
+ // such that this code is never reached.
+ //
+ // If the name can be empty, this would
+ // endanger users of the include file down the
+ // line, forcing them to ensure that, further
+ // to there being an actual include file, that
+ // include file is not an empty string, such
+ // that we would require a different way to
+ // generate the include file here.
+ aggregate->setIncludeFile(aggregate->name());
+ else if (aggregate->includeFile())
+ aggregate->setIncludeFile(*parent->includeFile());
+ }
+ }
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/cppcodeparser.h b/src/qdoc/qdoc/src/qdoc/cppcodeparser.h
new file mode 100644
index 000000000..621dcf3a8
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/cppcodeparser.h
@@ -0,0 +1,110 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef CPPCODEPARSER_H
+#define CPPCODEPARSER_H
+
+#include "clangcodeparser.h"
+#include "codeparser.h"
+#include "parsererror.h"
+#include "utilities.h"
+
+QT_BEGIN_NAMESPACE
+
+class ClassNode;
+class ExampleNode;
+class FunctionNode;
+class Aggregate;
+
+class CppCodeParser
+{
+public:
+ static inline const QSet<QString> topic_commands{
+ COMMAND_CLASS, COMMAND_DONTDOCUMENT, COMMAND_ENUM, COMMAND_EXAMPLE,
+ COMMAND_EXTERNALPAGE, COMMAND_FN, COMMAND_GROUP, COMMAND_HEADERFILE,
+ COMMAND_MACRO, COMMAND_MODULE, COMMAND_NAMESPACE, COMMAND_PAGE,
+ COMMAND_PROPERTY, COMMAND_TYPEALIAS, COMMAND_TYPEDEF, COMMAND_VARIABLE,
+ COMMAND_QMLTYPE, COMMAND_QMLPROPERTY, COMMAND_QMLPROPERTYGROUP,
+ COMMAND_QMLATTACHEDPROPERTY, COMMAND_QMLSIGNAL, COMMAND_QMLATTACHEDSIGNAL,
+ COMMAND_QMLMETHOD, COMMAND_QMLATTACHEDMETHOD, COMMAND_QMLVALUETYPE, COMMAND_QMLBASICTYPE,
+ COMMAND_QMLMODULE, COMMAND_STRUCT, COMMAND_UNION,
+ };
+
+ 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;
+
+public:
+ CppCodeParser(FnCommandParser&& parser);
+
+ FunctionNode *parseMacroArg(const Location &location, const QString &macroArg);
+ FunctionNode *parseOtherFuncArg(const QString &topic, const Location &location,
+ const QString &funcArg);
+ static bool isQMLMethodTopic(const QString &t);
+ static bool isQMLPropertyTopic(const QString &t);
+
+ std::pair<std::vector<TiedDocumentation>, std::vector<FnMatchError>>
+ processTopicArgs(const UntiedDocumentation &untied);
+
+ void processMetaCommand(const Doc &doc, const QString &command, const ArgPair &argLocPair,
+ Node *node);
+ void processMetaCommands(const Doc &doc, Node *node);
+ void processMetaCommands(const std::vector<TiedDocumentation> &tied);
+
+protected:
+ virtual Node *processTopicCommand(const Doc &doc, const QString &command,
+ const ArgPair &arg);
+ std::vector<TiedDocumentation> processQmlProperties(const UntiedDocumentation& untied);
+ bool splitQmlPropertyArg(const QString &arg, QString &type, QString &module, QString &element,
+ QString &name, const Location &location);
+
+private:
+ void setExampleFileLists(ExampleNode *en);
+ static void processComparesCommand(Node *node, const QString &arg, const Location &loc);
+
+private:
+ FnCommandParser fn_parser;
+ QString m_exampleNameFilter;
+ QString m_exampleImageFilter;
+ bool m_showLinkErrors { false };
+};
+
+/*!
+ * \internal
+ * \brief Checks if there are too many topic commands in \a doc.
+ *
+ * This method compares the commands used in \a doc with the set of topic
+ * commands. If zero or one topic command is found, or if all found topic
+ * commands are {\\qml*}-commands, the method returns \c false.
+ *
+ * If more than one topic command is found, QDoc issues a warning and the list
+ * of topic commands used in \a doc, and the method returns \c true.
+ */
+[[nodiscard]] inline bool hasTooManyTopics(const Doc &doc)
+{
+ const QSet<QString> topicCommandsUsed = CppCodeParser::topic_commands & doc.metaCommandsUsed();
+
+ if (topicCommandsUsed.empty() || topicCommandsUsed.size() == 1)
+ return false;
+ if (std::all_of(topicCommandsUsed.cbegin(), topicCommandsUsed.cend(),
+ [](const auto &cmd) { return cmd.startsWith(QLatin1String("qml")); }))
+ return false;
+
+ const QStringList commands = topicCommandsUsed.values();
+ const QString topicCommands{ std::accumulate(
+ commands.cbegin(), commands.cend(), QString{},
+ [index = qsizetype{ 0 }, numberOfCommands = commands.size()](
+ const QString &accumulator, const QString &topic) mutable -> QString {
+ return accumulator + QLatin1String("\\") + topic
+ + Utilities::separator(index++, numberOfCommands);
+ }) };
+
+ doc.location().warning(
+ QStringLiteral("Multiple topic commands found in comment: %1").arg(topicCommands));
+ return true;
+}
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/doc.cpp b/src/qdoc/qdoc/src/qdoc/doc.cpp
new file mode 100644
index 000000000..c994dc807
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/doc.cpp
@@ -0,0 +1,420 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "doc.h"
+
+#include "atom.h"
+#include "config.h"
+#include "codemarker.h"
+#include "docparser.h"
+#include "docprivate.h"
+#include "generator.h"
+#include "qmltypenode.h"
+#include "quoter.h"
+#include "text.h"
+#include "utilities.h"
+
+#include <qcryptographichash.h>
+
+QT_BEGIN_NAMESPACE
+
+using namespace Qt::StringLiterals;
+
+DocUtilities &Doc::m_utilities = DocUtilities::instance();
+
+/*!
+ \typedef ArgList
+ \relates Doc
+
+ A list of metacommand arguments that appear in a Doc. Each entry
+ in the list is a <QString, QString> pair (ArgPair):
+
+ \list
+ \li \c {ArgPair.first} - arguments passed to the command.
+ \li \c {ArgPair.second} - optional argument string passed
+ within brackets immediately following the command.
+ \endlist
+*/
+
+/*!
+ Parse the qdoc comment \a source. Build up a list of all the topic
+ commands found including their arguments. This constructor is used
+ when there can be more than one topic command in theqdoc comment.
+ Normally, there is only one topic command in a qdoc comment, but in
+ QML documentation, there is the case where the qdoc \e{qmlproperty}
+ command can appear multiple times in a qdoc comment.
+ */
+Doc::Doc(const Location &start_loc, const Location &end_loc, const QString &source,
+ const QSet<QString> &metaCommandSet, const QSet<QString> &topics)
+{
+ m_priv = new DocPrivate(start_loc, end_loc, source);
+ DocParser parser;
+ parser.parse(source, m_priv, metaCommandSet, topics);
+
+ if (Config::instance().getAtomsDump()) {
+ start_loc.information(u"==== Atoms Structure for block comment starting at %1 ===="_s.arg(
+ start_loc.toString()));
+ body().dump();
+ end_loc.information(
+ u"==== Ending atoms Structure for block comment ending at %1 ===="_s.arg(
+ end_loc.toString()));
+ }
+}
+
+Doc::Doc(const Doc &doc) : m_priv(nullptr)
+{
+ operator=(doc);
+}
+
+Doc::~Doc()
+{
+ if (m_priv && m_priv->deref())
+ delete m_priv;
+}
+
+Doc &Doc::operator=(const Doc &doc)
+{
+ if (&doc == this)
+ return *this;
+ if (doc.m_priv)
+ doc.m_priv->ref();
+ if (m_priv && m_priv->deref())
+ delete m_priv;
+ m_priv = doc.m_priv;
+ return *this;
+}
+
+/*!
+ Returns the starting location of a qdoc comment.
+ */
+const Location &Doc::location() const
+{
+ static const Location dummy;
+ return m_priv == nullptr ? dummy : m_priv->m_start_loc;
+}
+
+/*!
+ Returns the starting location of a qdoc comment.
+ */
+const Location &Doc::startLocation() const
+{
+ return location();
+}
+
+const QString &Doc::source() const
+{
+ static QString null;
+ return m_priv == nullptr ? null : m_priv->m_src;
+}
+
+bool Doc::isEmpty() const
+{
+ return m_priv == nullptr || m_priv->m_src.isEmpty();
+}
+
+const Text &Doc::body() const
+{
+ static const Text dummy;
+ return m_priv == nullptr ? dummy : m_priv->m_text;
+}
+
+Text Doc::briefText(bool inclusive) const
+{
+ return body().subText(Atom::BriefLeft, Atom::BriefRight, nullptr, inclusive);
+}
+
+Text Doc::trimmedBriefText(const QString &className) const
+{
+ QString classNameOnly = className;
+ if (className.contains("::"))
+ classNameOnly = className.split("::").last();
+
+ Text originalText = briefText();
+ Text resultText;
+ const Atom *atom = originalText.firstAtom();
+ if (atom) {
+ QString briefStr;
+ QString whats;
+ /*
+ This code is really ugly. The entire \brief business
+ should be rethought.
+ */
+ while (atom) {
+ if (atom->type() == Atom::AutoLink || atom->type() == Atom::String) {
+ briefStr += atom->string();
+ } else if (atom->type() == Atom::C) {
+ briefStr += Generator::plainCode(atom->string());
+ }
+ atom = atom->next();
+ }
+
+ QStringList w = briefStr.split(QLatin1Char(' '));
+ if (!w.isEmpty() && w.first() == "Returns") {
+ } else {
+ if (!w.isEmpty() && w.first() == "The")
+ w.removeFirst();
+
+ if (!w.isEmpty() && (w.first() == className || w.first() == classNameOnly))
+ w.removeFirst();
+
+ if (!w.isEmpty()
+ && ((w.first() == "class") || (w.first() == "function") || (w.first() == "macro")
+ || (w.first() == "widget") || (w.first() == "namespace")
+ || (w.first() == "header")))
+ w.removeFirst();
+
+ if (!w.isEmpty() && (w.first() == "is" || w.first() == "provides"))
+ w.removeFirst();
+
+ if (!w.isEmpty() && (w.first() == "a" || w.first() == "an"))
+ w.removeFirst();
+ }
+
+ whats = w.join(' ');
+
+ if (whats.endsWith(QLatin1Char('.')))
+ whats.truncate(whats.size() - 1);
+
+ if (!whats.isEmpty())
+ whats[0] = whats[0].toUpper();
+
+ // ### move this once \brief is abolished for properties
+ resultText << whats;
+ }
+ return resultText;
+}
+
+Text Doc::legaleseText() const
+{
+ if (m_priv == nullptr || !m_priv->m_hasLegalese)
+ return Text();
+ else
+ return body().subText(Atom::LegaleseLeft, Atom::LegaleseRight);
+}
+
+QSet<QString> Doc::parameterNames() const
+{
+ return m_priv == nullptr ? QSet<QString>() : m_priv->m_params;
+}
+
+QStringList Doc::enumItemNames() const
+{
+ return m_priv == nullptr ? QStringList() : m_priv->m_enumItemList;
+}
+
+QStringList Doc::omitEnumItemNames() const
+{
+ return m_priv == nullptr ? QStringList() : m_priv->m_omitEnumItemList;
+}
+
+QSet<QString> Doc::metaCommandsUsed() const
+{
+ return m_priv == nullptr ? QSet<QString>() : m_priv->m_metacommandsUsed;
+}
+
+/*!
+ Returns true if the set of metacommands used in the doc
+ comment contains \e {internal}.
+ */
+bool Doc::isInternal() const
+{
+ return metaCommandsUsed().contains(QLatin1String("internal"));
+}
+
+/*!
+ Returns true if the set of metacommands used in the doc
+ comment contains \e {reimp}.
+ */
+bool Doc::isMarkedReimp() const
+{
+ return metaCommandsUsed().contains(QLatin1String("reimp"));
+}
+
+/*!
+ Returns a reference to the list of topic commands used in the
+ current qdoc comment. Normally there is only one, but there
+ can be multiple \e{qmlproperty} commands, for example.
+ */
+TopicList Doc::topicsUsed() const
+{
+ return m_priv == nullptr ? TopicList() : m_priv->m_topics;
+}
+
+ArgList Doc::metaCommandArgs(const QString &metacommand) const
+{
+ return m_priv == nullptr ? ArgList() : m_priv->m_metaCommandMap.value(metacommand);
+}
+
+QList<Text> Doc::alsoList() const
+{
+ return m_priv == nullptr ? QList<Text>() : m_priv->m_alsoList;
+}
+
+bool Doc::hasTableOfContents() const
+{
+ return m_priv && m_priv->extra && !m_priv->extra->m_tableOfContents.isEmpty();
+}
+
+bool Doc::hasKeywords() const
+{
+ return m_priv && m_priv->extra && !m_priv->extra->m_keywords.isEmpty();
+}
+
+bool Doc::hasTargets() const
+{
+ return m_priv && m_priv->extra && !m_priv->extra->m_targets.isEmpty();
+}
+
+const QList<Atom *> &Doc::tableOfContents() const
+{
+ m_priv->constructExtra();
+ return m_priv->extra->m_tableOfContents;
+}
+
+const QList<int> &Doc::tableOfContentsLevels() const
+{
+ m_priv->constructExtra();
+ return m_priv->extra->m_tableOfContentsLevels;
+}
+
+const QList<Atom *> &Doc::keywords() const
+{
+ m_priv->constructExtra();
+ return m_priv->extra->m_keywords;
+}
+
+const QList<Atom *> &Doc::targets() const
+{
+ m_priv->constructExtra();
+ return m_priv->extra->m_targets;
+}
+
+QStringMultiMap *Doc::metaTagMap() const
+{
+ return m_priv && m_priv->extra ? &m_priv->extra->m_metaMap : nullptr;
+}
+
+QMultiMap<ComparisonCategory, Text> *Doc::comparesWithMap() const
+{
+ return m_priv && m_priv->extra ? &m_priv->extra->m_comparesWithMap : nullptr;
+}
+
+void Doc::initialize(FileResolver& file_resolver)
+{
+ Config &config = Config::instance();
+ DocParser::initialize(config, file_resolver);
+
+ const auto &configMacros = config.subVars(CONFIG_MACRO);
+ for (const auto &macroName : configMacros) {
+ QString macroDotName = CONFIG_MACRO + Config::dot + macroName;
+ Macro macro;
+ macro.numParams = -1;
+ const auto &macroConfigVar = config.get(macroDotName);
+ macro.m_defaultDef = macroConfigVar.asString();
+ if (!macro.m_defaultDef.isEmpty()) {
+ macro.m_defaultDefLocation = macroConfigVar.location();
+ macro.numParams = Config::numParams(macro.m_defaultDef);
+ }
+ bool silent = false;
+
+ const auto &macroDotNames = config.subVars(macroDotName);
+ for (const auto &f : macroDotNames) {
+ const auto &macroSubVar = config.get(macroDotName + Config::dot + f);
+ QString def{macroSubVar.asString()};
+ if (!def.isEmpty()) {
+ macro.m_otherDefs.insert(f, def);
+ int m = Config::numParams(def);
+ if (macro.numParams == -1)
+ macro.numParams = m;
+ // .match definition is a regular expression that contains no params
+ else if (macro.numParams != m && f != QLatin1String("match")) {
+ if (!silent) {
+ QString other = QStringLiteral("default");
+ if (macro.m_defaultDef.isEmpty())
+ other = macro.m_otherDefs.constBegin().key();
+ macroSubVar.location().warning(
+ QStringLiteral("Macro '\\%1' takes inconsistent number of "
+ "arguments (%2 %3, %4 %5)")
+ .arg(macroName, f, QString::number(m), other,
+ QString::number(macro.numParams)));
+ silent = true;
+ }
+ if (macro.numParams < m)
+ macro.numParams = m;
+ }
+ }
+ }
+ if (macro.numParams != -1)
+ m_utilities.macroHash.insert(macroName, macro);
+ }
+}
+
+/*!
+ All the heap allocated variables are deleted.
+ */
+void Doc::terminate()
+{
+ m_utilities.cmdHash.clear();
+ m_utilities.macroHash.clear();
+}
+
+/*!
+ Trims the deadwood out of \a str. i.e., this function
+ cleans up \a str.
+ */
+void Doc::trimCStyleComment(Location &location, QString &str)
+{
+ QString cleaned;
+ Location m = location;
+ bool metAsterColumn = true;
+ int asterColumn = location.columnNo() + 1;
+ int i;
+
+ for (i = 0; i < str.size(); ++i) {
+ if (m.columnNo() == asterColumn) {
+ if (str[i] != '*')
+ break;
+ cleaned += ' ';
+ metAsterColumn = true;
+ } else {
+ if (str[i] == '\n') {
+ if (!metAsterColumn)
+ break;
+ metAsterColumn = false;
+ }
+ cleaned += str[i];
+ }
+ m.advance(str[i]);
+ }
+ if (cleaned.size() == str.size())
+ str = cleaned;
+
+ for (int i = 0; i < 3; ++i)
+ location.advance(str[i]);
+ str = str.mid(3, str.size() - 5);
+}
+
+void Doc::quoteFromFile(const Location &location, Quoter &quoter, ResolvedFile resolved_file)
+{
+ // TODO: quoteFromFile should not care about modifying a stateful
+ // quoter from the outside, instead, it should produce a quoter
+ // that allows the caller to retrieve the required information
+ // about the quoted file.
+ //
+ // When changing the way in which quoting works, this kind of
+ // spread resposability should be removed, together with quoteFromFile.
+ quoter.reset();
+
+ QString code;
+ {
+ QFile input_file{resolved_file.get_path()};
+ if (!input_file.open(QFile::ReadOnly))
+ return;
+ code = DocParser::untabifyEtc(QTextStream{&input_file}.readAll());
+ }
+
+ CodeMarker *marker = CodeMarker::markerForFileName(resolved_file.get_path());
+ quoter.quoteFromFile(resolved_file.get_path(), code, marker->markedUpCode(code, nullptr, location));
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/doc.h b/src/qdoc/qdoc/src/qdoc/doc.h
new file mode 100644
index 000000000..50e88c72f
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/doc.h
@@ -0,0 +1,92 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef DOC_H
+#define DOC_H
+
+#include "location.h"
+#include "comparisoncategory.h"
+#include "docutilities.h"
+#include "topic.h"
+
+#include "filesystem/fileresolver.h"
+#include "boundaries/filesystem/resolvedfile.h"
+
+#include <QtCore/qmap.h>
+#include <QtCore/qset.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+class Atom;
+class DocPrivate;
+class Quoter;
+class Text;
+
+typedef std::pair<QString, QString> ArgPair;
+typedef QList<ArgPair> ArgList;
+typedef QMultiMap<QString, QString> QStringMultiMap;
+
+class Doc
+{
+public:
+ // the order is important
+ enum Sections {
+ NoSection = -1,
+ Section1 = 1,
+ Section2 = 2,
+ Section3 = 3,
+ Section4 = 4
+ };
+
+ Doc() = default;
+ Doc(const Location &start_loc, const Location &end_loc, const QString &source,
+ const QSet<QString> &metaCommandSet, const QSet<QString> &topics);
+ Doc(const Doc &doc);
+ ~Doc();
+
+ Doc &operator=(const Doc &doc);
+
+ [[nodiscard]] const Location &location() const;
+ [[nodiscard]] const Location &startLocation() const;
+ [[nodiscard]] bool isEmpty() const;
+ [[nodiscard]] const QString &source() const;
+ [[nodiscard]] const Text &body() const;
+ [[nodiscard]] Text briefText(bool inclusive = false) const;
+ [[nodiscard]] Text trimmedBriefText(const QString &className) const;
+ [[nodiscard]] Text legaleseText() const;
+ [[nodiscard]] QSet<QString> parameterNames() const;
+ [[nodiscard]] QStringList enumItemNames() const;
+ [[nodiscard]] QStringList omitEnumItemNames() const;
+ [[nodiscard]] QSet<QString> metaCommandsUsed() const;
+ [[nodiscard]] TopicList topicsUsed() const;
+ [[nodiscard]] ArgList metaCommandArgs(const QString &metaCommand) const;
+ [[nodiscard]] QList<Text> alsoList() const;
+ [[nodiscard]] bool hasTableOfContents() const;
+ [[nodiscard]] bool hasKeywords() const;
+ [[nodiscard]] bool hasTargets() const;
+ [[nodiscard]] bool isInternal() const;
+ [[nodiscard]] bool isMarkedReimp() const;
+ [[nodiscard]] const QList<Atom *> &tableOfContents() const;
+ [[nodiscard]] const QList<int> &tableOfContentsLevels() const;
+ [[nodiscard]] const QList<Atom *> &keywords() const;
+ [[nodiscard]] const QList<Atom *> &targets() const;
+ [[nodiscard]] QStringMultiMap *metaTagMap() const;
+ [[nodiscard]] QMultiMap<ComparisonCategory, Text> *comparesWithMap() const;
+
+ static void initialize(FileResolver& file_resolver);
+ static void terminate();
+ static void trimCStyleComment(Location &location, QString &str);
+ static void quoteFromFile(const Location &location, Quoter &quoter,
+ ResolvedFile resolved_file);
+
+private:
+ DocPrivate *m_priv { nullptr };
+ static DocUtilities &m_utilities;
+};
+Q_DECLARE_TYPEINFO(Doc, Q_RELOCATABLE_TYPE);
+typedef QList<Doc> DocList;
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/docbookgenerator.cpp b/src/qdoc/qdoc/src/qdoc/docbookgenerator.cpp
new file mode 100644
index 000000000..9e99b3b15
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/docbookgenerator.cpp
@@ -0,0 +1,4750 @@
+// Copyright (C) 2019 Thibaut Cuvelier
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "docbookgenerator.h"
+
+#include "access.h"
+#include "aggregate.h"
+#include "classnode.h"
+#include "codemarker.h"
+#include "collectionnode.h"
+#include "comparisoncategory.h"
+#include "config.h"
+#include "enumnode.h"
+#include "examplenode.h"
+#include "functionnode.h"
+#include "generator.h"
+#include "node.h"
+#include "propertynode.h"
+#include "quoter.h"
+#include "qdocdatabase.h"
+#include "qmlpropertynode.h"
+#include "sharedcommentnode.h"
+#include "typedefnode.h"
+#include "variablenode.h"
+
+#include <QtCore/qlist.h>
+#include <QtCore/qmap.h>
+#include <QtCore/quuid.h>
+#include <QtCore/qurl.h>
+#include <QtCore/qregularexpression.h>
+#include <QtCore/qversionnumber.h>
+
+#include <cctype>
+
+QT_BEGIN_NAMESPACE
+
+using namespace Qt::StringLiterals;
+
+static const char dbNamespace[] = "http://docbook.org/ns/docbook";
+static const char xlinkNamespace[] = "http://www.w3.org/1999/xlink";
+static const char itsNamespace[] = "http://www.w3.org/2005/11/its";
+
+DocBookGenerator::DocBookGenerator(FileResolver& file_resolver) : XmlGenerator(file_resolver) {}
+
+inline void DocBookGenerator::newLine()
+{
+ m_writer->writeCharacters("\n");
+}
+
+void DocBookGenerator::writeXmlId(const QString &id)
+{
+ if (id.isEmpty())
+ return;
+
+ m_writer->writeAttribute("xml:id", registerRef(id, true));
+}
+
+void DocBookGenerator::writeXmlId(const Node *node)
+{
+ if (!node)
+ return;
+
+ // Specifically for nodes, do not use the same code path as for QString
+ // inputs, as refForNode calls registerRef in all cases. Calling
+ // registerRef a second time adds a character to "disambiguate" the two IDs
+ // (the one returned by refForNode, then the one that is written as
+ // xml:id).
+ QString id = Generator::cleanRef(refForNode(node), true);
+ if (!id.isEmpty())
+ m_writer->writeAttribute("xml:id", id);
+}
+
+void DocBookGenerator::startSectionBegin(const QString &id)
+{
+ m_hasSection = true;
+
+ m_writer->writeStartElement(dbNamespace, "section");
+ writeXmlId(id);
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "title");
+}
+
+void DocBookGenerator::startSectionBegin(const Node *node)
+{
+ m_writer->writeStartElement(dbNamespace, "section");
+ writeXmlId(node);
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "title");
+}
+
+void DocBookGenerator::startSectionEnd()
+{
+ m_writer->writeEndElement(); // title
+ newLine();
+}
+
+void DocBookGenerator::startSection(const QString &id, const QString &title)
+{
+ startSectionBegin(id);
+ m_writer->writeCharacters(title);
+ startSectionEnd();
+}
+
+void DocBookGenerator::startSection(const Node *node, const QString &title)
+{
+ startSectionBegin(node);
+ m_writer->writeCharacters(title);
+ startSectionEnd();
+}
+
+void DocBookGenerator::startSection(const QString &title)
+{
+ // No xml:id given: down the calls, "" is interpreted as "no ID".
+ startSection("", title);
+}
+
+void DocBookGenerator::endSection()
+{
+ m_writer->writeEndElement(); // section
+ newLine();
+}
+
+void DocBookGenerator::writeAnchor(const QString &id)
+{
+ if (id.isEmpty())
+ return;
+
+ m_writer->writeEmptyElement(dbNamespace, "anchor");
+ writeXmlId(id);
+ newLine();
+}
+
+/*!
+ Initializes the DocBook output generator's data structures
+ from the configuration (Config).
+ */
+void DocBookGenerator::initializeGenerator()
+{
+ // Excerpts from HtmlGenerator::initializeGenerator.
+ Generator::initializeGenerator();
+ m_config = &Config::instance();
+
+ m_project = m_config->get(CONFIG_PROJECT).asString();
+
+ m_projectDescription = m_config->get(CONFIG_DESCRIPTION).asString();
+ if (m_projectDescription.isEmpty() && !m_project.isEmpty())
+ m_projectDescription = m_project + QLatin1String(" Reference Documentation");
+
+ m_naturalLanguage = m_config->get(CONFIG_NATURALLANGUAGE).asString();
+ if (m_naturalLanguage.isEmpty())
+ m_naturalLanguage = QLatin1String("en");
+
+ m_buildVersion = m_config->get(CONFIG_BUILDVERSION).asString();
+ m_useDocBook52 = m_config->get(CONFIG_DOCBOOKEXTENSIONS).asBool() ||
+ m_config->get(format() + Config::dot + "usedocbookextensions").asBool();
+ m_useITS = m_config->get(format() + Config::dot + "its").asBool();
+}
+
+QString DocBookGenerator::format()
+{
+ return "DocBook";
+}
+
+/*!
+ Returns "xml" for this subclass of Generator.
+ */
+QString DocBookGenerator::fileExtension() const
+{
+ return "xml";
+}
+
+/*!
+ Generate the documentation for \a relative. i.e. \a relative
+ is the node that represents the entity where a qdoc comment
+ was found, and \a text represents the qdoc comment.
+ */
+bool DocBookGenerator::generateText(const Text &text, const Node *relative)
+{
+ // From Generator::generateText.
+ if (!text.firstAtom())
+ return false;
+
+ int numAtoms = 0;
+ initializeTextOutput();
+ generateAtomList(text.firstAtom(), relative, nullptr, true, numAtoms);
+ closeTextSections();
+ return true;
+}
+
+QString removeCodeMarkers(const QString& code) {
+ QString rewritten = code;
+ static const QRegularExpression re("(<@[^>&]*>)|(<\\/@[^&>]*>)");
+ rewritten.replace(re, "");
+ return rewritten;
+}
+
+/*!
+ Generate DocBook from an instance of Atom.
+ */
+qsizetype DocBookGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMarker*)
+{
+ Q_ASSERT(m_writer);
+ // From HtmlGenerator::generateAtom, without warning generation.
+ int idx = 0;
+ int skipAhead = 0;
+ Node::Genus genus = Node::DontCare;
+
+ switch (atom->type()) {
+ case Atom::AutoLink:
+ // Allow auto-linking to nodes in API reference
+ genus = Node::API;
+ Q_FALLTHROUGH();
+ case Atom::NavAutoLink:
+ if (!m_inLink && !m_inContents && !m_inSectionHeading) {
+ const Node *node = nullptr;
+ QString link = getAutoLink(atom, relative, &node, genus);
+ if (!link.isEmpty() && node && node->isDeprecated()
+ && relative->parent() != node && !relative->isDeprecated()) {
+ link.clear();
+ }
+ if (link.isEmpty()) {
+ m_writer->writeCharacters(atom->string());
+ } else {
+ beginLink(link, node, relative);
+ generateLink(atom);
+ endLink();
+ }
+ } else {
+ m_writer->writeCharacters(atom->string());
+ }
+ break;
+ case Atom::BaseName:
+ break;
+ case Atom::BriefLeft:
+ if (!hasBrief(relative)) {
+ skipAhead = skipAtoms(atom, Atom::BriefRight);
+ break;
+ }
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_inPara = true;
+ rewritePropertyBrief(atom, relative);
+ break;
+ case Atom::BriefRight:
+ if (hasBrief(relative)) {
+ m_writer->writeEndElement(); // para
+ m_inPara = false;
+ newLine();
+ }
+ break;
+ case Atom::C:
+ // This may at one time have been used to mark up C++ code but it is
+ // now widely used to write teletype text. As a result, text marked
+ // with the \c command is not passed to a code marker.
+ if (m_inTeletype)
+ m_writer->writeCharacters(plainCode(atom->string()));
+ else
+ m_writer->writeTextElement(dbNamespace, "code", plainCode(atom->string()));
+ break;
+ case Atom::CaptionLeft:
+ m_writer->writeStartElement(dbNamespace, "title");
+ break;
+ case Atom::CaptionRight:
+ endLink();
+ m_writer->writeEndElement(); // title
+ newLine();
+ break;
+ case Atom::Qml:
+ m_writer->writeStartElement(dbNamespace, "programlisting");
+ m_writer->writeAttribute("language", "qml");
+ if (m_useITS)
+ m_writer->writeAttribute(itsNamespace, "translate", "no");
+ m_writer->writeCharacters(removeCodeMarkers(atom->string()));
+ m_writer->writeEndElement(); // programlisting
+ newLine();
+ break;
+ case Atom::Code:
+ m_writer->writeStartElement(dbNamespace, "programlisting");
+ m_writer->writeAttribute("language", "cpp");
+ if (m_useITS)
+ m_writer->writeAttribute(itsNamespace, "translate", "no");
+ m_writer->writeCharacters(removeCodeMarkers(atom->string()));
+ m_writer->writeEndElement(); // programlisting
+ newLine();
+ break;
+ case Atom::CodeBad:
+ m_writer->writeStartElement(dbNamespace, "programlisting");
+ m_writer->writeAttribute("language", "cpp");
+ m_writer->writeAttribute("role", "bad");
+ if (m_useITS)
+ m_writer->writeAttribute(itsNamespace, "translate", "no");
+ m_writer->writeCharacters(removeCodeMarkers(atom->string()));
+ m_writer->writeEndElement(); // programlisting
+ newLine();
+ break;
+ case Atom::DetailsLeft:
+ case Atom::DetailsRight:
+ break;
+ case Atom::DivLeft:
+ case Atom::DivRight:
+ break;
+ case Atom::FootnoteLeft:
+ m_writer->writeStartElement(dbNamespace, "footnote");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_inPara = true;
+ break;
+ case Atom::FootnoteRight:
+ m_writer->writeEndElement(); // para
+ m_inPara = false;
+ newLine();
+ m_writer->writeEndElement(); // footnote
+ break;
+ case Atom::FormatElse:
+ case Atom::FormatEndif:
+ case Atom::FormatIf:
+ break;
+ case Atom::FormattingLeft:
+ if (atom->string() == ATOM_FORMATTING_BOLD) {
+ m_writer->writeStartElement(dbNamespace, "emphasis");
+ m_writer->writeAttribute("role", "bold");
+ } else if (atom->string() == ATOM_FORMATTING_ITALIC) {
+ m_writer->writeStartElement(dbNamespace, "emphasis");
+ } else if (atom->string() == ATOM_FORMATTING_UNDERLINE) {
+ m_writer->writeStartElement(dbNamespace, "emphasis");
+ m_writer->writeAttribute("role", "underline");
+ } else if (atom->string() == ATOM_FORMATTING_SUBSCRIPT) {
+ m_writer->writeStartElement(dbNamespace, "subscript");
+ } else if (atom->string() == ATOM_FORMATTING_SUPERSCRIPT) {
+ m_writer->writeStartElement(dbNamespace, "superscript");
+ } else if (atom->string() == ATOM_FORMATTING_TELETYPE
+ || atom->string() == ATOM_FORMATTING_PARAMETER) {
+ m_writer->writeStartElement(dbNamespace, "code");
+ if (m_useITS)
+ m_writer->writeAttribute(itsNamespace, "translate", "no");
+
+ if (atom->string() == ATOM_FORMATTING_PARAMETER)
+ m_writer->writeAttribute("role", "parameter");
+ else // atom->string() == ATOM_FORMATTING_TELETYPE
+ m_inTeletype = true;
+ } else if (atom->string() == ATOM_FORMATTING_UICONTROL) {
+ m_writer->writeStartElement(dbNamespace, "guilabel");
+ if (m_useITS)
+ m_writer->writeAttribute(itsNamespace, "translate", "no");
+ } else {
+ relative->location().warning(QStringLiteral("Unsupported formatting: %1").arg(atom->string()));
+ }
+ break;
+ case Atom::FormattingRight:
+ if (atom->string() == ATOM_FORMATTING_BOLD || atom->string() == ATOM_FORMATTING_ITALIC
+ || atom->string() == ATOM_FORMATTING_UNDERLINE
+ || atom->string() == ATOM_FORMATTING_SUBSCRIPT
+ || atom->string() == ATOM_FORMATTING_SUPERSCRIPT
+ || atom->string() == ATOM_FORMATTING_TELETYPE
+ || atom->string() == ATOM_FORMATTING_PARAMETER
+ || atom->string() == ATOM_FORMATTING_UICONTROL) {
+ m_writer->writeEndElement();
+ } else if (atom->string() == ATOM_FORMATTING_LINK) {
+ if (atom->string() == ATOM_FORMATTING_TELETYPE)
+ m_inTeletype = false;
+ endLink();
+ } else {
+ relative->location().warning(QStringLiteral("Unsupported formatting: %1").arg(atom->string()));
+ }
+ break;
+ case Atom::AnnotatedList:
+ if (const CollectionNode *cn = m_qdb->getCollectionNode(atom->string(), Node::Group))
+ generateList(cn, atom->string());
+ break;
+ case Atom::GeneratedList: {
+ bool hasGeneratedSomething = false;
+ if (atom->string() == QLatin1String("annotatedclasses")
+ || atom->string() == QLatin1String("attributions")
+ || atom->string() == QLatin1String("namespaces")) {
+ const NodeMultiMap things = atom->string() == QLatin1String("annotatedclasses")
+ ? m_qdb->getCppClasses()
+ : atom->string() == QLatin1String("attributions") ? m_qdb->getAttributions()
+ : m_qdb->getNamespaces();
+ generateAnnotatedList(relative, things.values(), atom->string());
+ hasGeneratedSomething = !things.isEmpty();
+ } else if (atom->string() == QLatin1String("annotatedexamples")
+ || atom->string() == QLatin1String("annotatedattributions")) {
+ const NodeMultiMap things = atom->string() == QLatin1String("annotatedexamples")
+ ? m_qdb->getAttributions()
+ : m_qdb->getExamples();
+ generateAnnotatedLists(relative, things, atom->string());
+ hasGeneratedSomething = !things.isEmpty();
+ } else if (atom->string() == QLatin1String("classes")
+ || atom->string() == QLatin1String("qmlbasictypes") // deprecated!
+ || atom->string() == QLatin1String("qmlvaluetypes")
+ || atom->string() == QLatin1String("qmltypes")) {
+ const NodeMultiMap things = atom->string() == QLatin1String("classes")
+ ? m_qdb->getCppClasses()
+ : (atom->string() == QLatin1String("qmlvaluetypes")
+ || atom->string() == QLatin1String("qmlbasictypes"))
+ ? m_qdb->getQmlValueTypes()
+ : m_qdb->getQmlTypes();
+ generateCompactList(relative, things, true, QString(), atom->string());
+ hasGeneratedSomething = !things.isEmpty();
+ } else if (atom->string().contains("classes ")) {
+ QString rootName = atom->string().mid(atom->string().indexOf("classes") + 7).trimmed();
+ NodeMultiMap things = m_qdb->getCppClasses();
+
+ hasGeneratedSomething = !things.isEmpty();
+ generateCompactList(relative, things, true, rootName, atom->string());
+ } else if ((idx = atom->string().indexOf(QStringLiteral("bymodule"))) != -1) {
+ QString moduleName = atom->string().mid(idx + 8).trimmed();
+ Node::NodeType moduleType = typeFromString(atom);
+ QDocDatabase *qdb = QDocDatabase::qdocDB();
+ if (const CollectionNode *cn = qdb->getCollectionNode(moduleName, moduleType)) {
+ NodeMap map;
+ switch (moduleType) {
+ case Node::Module:
+ // classesbymodule <module_name>
+ map = cn->getMembers([](const Node *n){ return n->isClassNode(); });
+ 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>
+ break;
+ default: // fall back to generating all members
+ generateAnnotatedList(relative, cn->members(), atom->string());
+ hasGeneratedSomething = !cn->members().isEmpty();
+ break;
+ }
+ if (!map.isEmpty()) {
+ generateAnnotatedList(relative, map.values(), atom->string());
+ hasGeneratedSomething = true;
+ }
+ }
+ } else if (atom->string() == QLatin1String("classhierarchy")) {
+ generateClassHierarchy(relative, m_qdb->getCppClasses());
+ hasGeneratedSomething = !m_qdb->getCppClasses().isEmpty();
+ } else if (atom->string().startsWith("obsolete")) {
+ QString prefix = atom->string().contains("cpp") ? QStringLiteral("Q") : QString();
+ const NodeMultiMap &things = atom->string() == QLatin1String("obsoleteclasses")
+ ? m_qdb->getObsoleteClasses()
+ : atom->string() == QLatin1String("obsoleteqmltypes")
+ ? m_qdb->getObsoleteQmlTypes()
+ : atom->string() == QLatin1String("obsoletecppmembers")
+ ? m_qdb->getClassesWithObsoleteMembers()
+ : m_qdb->getQmlTypesWithObsoleteMembers();
+ generateCompactList(relative, things, false, prefix, atom->string());
+ hasGeneratedSomething = !things.isEmpty();
+ } else if (atom->string() == QLatin1String("functionindex")) {
+ generateFunctionIndex(relative);
+ hasGeneratedSomething = !m_qdb->getFunctionIndex().isEmpty();
+ } else if (atom->string() == QLatin1String("legalese")) {
+ generateLegaleseList(relative);
+ hasGeneratedSomething = !m_qdb->getLegaleseTexts().isEmpty();
+ } else if (atom->string() == QLatin1String("overviews")
+ || atom->string() == QLatin1String("cpp-modules")
+ || atom->string() == QLatin1String("qml-modules")
+ || atom->string() == QLatin1String("related")) {
+ generateList(relative, atom->string());
+ 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);
+ hasGeneratedSomething = true; // Approximation
+ }
+
+ // There must still be some content generated for the DocBook document
+ // to be valid (except if already in a paragraph).
+ if (!hasGeneratedSomething && !m_inPara) {
+ m_writer->writeEmptyElement(dbNamespace, "para");
+ newLine();
+ }
+ }
+ break;
+ case Atom::SinceList:
+ // Table of contents, should automatically be generated by the DocBook processor.
+ Q_FALLTHROUGH();
+ case Atom::LineBreak:
+ case Atom::BR:
+ case Atom::HR:
+ // Not supported in DocBook.
+ break;
+ case Atom::Image: // mediaobject
+ // An Image atom is always followed by an ImageText atom,
+ // containing the alternative text.
+ // If no caption is present, we just output a <db:mediaobject>,
+ // avoiding the wrapper as it is not required.
+ // For bordered images, there is another atom before the
+ // caption, DivRight (the corresponding DivLeft being just
+ // before the image).
+
+ if (atom->next() && matchAhead(atom->next(), Atom::DivRight) && atom->next()->next()
+ && matchAhead(atom->next()->next(), Atom::CaptionLeft)) {
+ // If there is a caption, there must be a <db:figure>
+ // wrapper starting with the caption.
+ Q_ASSERT(atom->next());
+ Q_ASSERT(atom->next()->next());
+ Q_ASSERT(atom->next()->next()->next());
+ Q_ASSERT(atom->next()->next()->next()->next());
+ Q_ASSERT(atom->next()->next()->next()->next()->next());
+
+ m_writer->writeStartElement(dbNamespace, "figure");
+ newLine();
+
+ const Atom *current = atom->next()->next()->next();
+ skipAhead += 2;
+
+ Q_ASSERT(current->type() == Atom::CaptionLeft);
+ generateAtom(current, relative, nullptr);
+ current = current->next();
+ ++skipAhead;
+
+ while (current->type() != Atom::CaptionRight) { // The actual caption.
+ generateAtom(current, relative, nullptr);
+ current = current->next();
+ ++skipAhead;
+ }
+
+ Q_ASSERT(current->type() == Atom::CaptionRight);
+ generateAtom(current, relative, nullptr);
+ current = current->next();
+ ++skipAhead;
+
+ m_closeFigureWrapper = true;
+ }
+
+ if (atom->next() && matchAhead(atom->next(), Atom::CaptionLeft)) {
+ // If there is a caption, there must be a <db:figure>
+ // wrapper starting with the caption.
+ Q_ASSERT(atom->next());
+ Q_ASSERT(atom->next()->next());
+ Q_ASSERT(atom->next()->next()->next());
+ Q_ASSERT(atom->next()->next()->next()->next());
+
+ m_writer->writeStartElement(dbNamespace, "figure");
+ newLine();
+
+ const Atom *current = atom->next()->next();
+ ++skipAhead;
+
+ Q_ASSERT(current->type() == Atom::CaptionLeft);
+ generateAtom(current, relative, nullptr);
+ current = current->next();
+ ++skipAhead;
+
+ while (current->type() != Atom::CaptionRight) { // The actual caption.
+ generateAtom(current, relative, nullptr);
+ current = current->next();
+ ++skipAhead;
+ }
+
+ Q_ASSERT(current->type() == Atom::CaptionRight);
+ generateAtom(current, relative, nullptr);
+ current = current->next();
+ ++skipAhead;
+
+ m_closeFigureWrapper = true;
+ }
+
+ Q_FALLTHROUGH();
+ case Atom::InlineImage: { // inlinemediaobject
+ // TODO: [generator-insufficient-structural-abstraction]
+ // The structure of the computations for this part of the
+ // docbook generation and the same parts in other format
+ // generators is the same.
+ //
+ // The difference, instead, lies in what the generated output
+ // is like. A correct abstraction for a generator would take
+ // this structural equivalence into account and encapsulate it
+ // into a driver for the format generators.
+ //
+ // This would avoid the replication of content, and the
+ // subsequent friction for changes and desynchronization
+ // between generators.
+ //
+ // Review all the generators routines and find the actual
+ // skeleton that is shared between them, then consider it when
+ // extracting the logic for the generation phase.
+ QString tag = atom->type() == Atom::Image ? "mediaobject" : "inlinemediaobject";
+ m_writer->writeStartElement(dbNamespace, tag);
+ newLine();
+
+ auto maybe_resolved_file{file_resolver.resolve(atom->string())};
+ if (!maybe_resolved_file) {
+ // TODO: [uncetnralized-admonition][failed-resolve-file]
+ relative->location().warning(QStringLiteral("Missing image: %1").arg(atom->string()));
+
+ m_writer->writeStartElement(dbNamespace, "textobject");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeTextElement(dbNamespace, "emphasis",
+ "[Missing image " + atom->string() + "]");
+ m_writer->writeEndElement(); // para
+ newLine();
+ m_writer->writeEndElement(); // textobject
+ newLine();
+ } else {
+ ResolvedFile file{*maybe_resolved_file};
+ QString file_name{QFileInfo{file.get_path()}.fileName()};
+
+ // TODO: [uncentralized-output-directory-structure]
+ Config::copyFile(relative->doc().location(), file.get_path(), file_name, outputDir() + QLatin1String("/images"));
+
+ if (atom->next() && !atom->next()->string().isEmpty()
+ && atom->next()->type() == Atom::ImageText) {
+ m_writer->writeTextElement(dbNamespace, "alt", atom->next()->string());
+ newLine();
+ }
+
+ m_writer->writeStartElement(dbNamespace, "imageobject");
+ newLine();
+ m_writer->writeEmptyElement(dbNamespace, "imagedata");
+ // TODO: [uncentralized-output-directory-structure]
+ m_writer->writeAttribute("fileref", "images/" + file_name);
+ newLine();
+ m_writer->writeEndElement(); // imageobject
+ newLine();
+
+ // TODO: [uncentralized-output-directory-structure]
+ setImageFileName(relative, "images/" + file_name);
+ }
+
+ m_writer->writeEndElement(); // [inline]mediaobject
+ if (atom->type() == Atom::Image)
+ newLine();
+
+ if (m_closeFigureWrapper) {
+ m_writer->writeEndElement(); // figure
+ newLine();
+ m_closeFigureWrapper = false;
+ }
+ } break;
+ case Atom::ImageText:
+ break;
+ case Atom::ImportantLeft:
+ case Atom::NoteLeft:
+ case Atom::WarningLeft: {
+ QString admonType = atom->typeString().toLower();
+ // Remove 'Left' to get the admonition type
+ admonType.chop(4);
+ m_writer->writeStartElement(dbNamespace, admonType);
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_inPara = true;
+ } break;
+ case Atom::ImportantRight:
+ case Atom::NoteRight:
+ case Atom::WarningRight:
+ m_writer->writeEndElement(); // para
+ m_inPara = false;
+ newLine();
+ m_writer->writeEndElement(); // note/important
+ newLine();
+ break;
+ case Atom::LegaleseLeft:
+ case Atom::LegaleseRight:
+ break;
+ case Atom::Link:
+ case Atom::NavLink: {
+ const Node *node = nullptr;
+ QString link = getLink(atom, relative, &node);
+ beginLink(link, node, relative); // Ended at Atom::FormattingRight
+ skipAhead = 1;
+ } break;
+ case Atom::LinkNode: {
+ const Node *node = CodeMarker::nodeForString(atom->string());
+ beginLink(linkForNode(node, relative), node, relative);
+ skipAhead = 1;
+ } break;
+ case Atom::ListLeft:
+ if (m_inPara) {
+ // The variable m_inPara is not set in a very smart way, because
+ // it ignores nesting. This might in theory create false positives
+ // here. A better solution would be to track the depth of
+ // paragraphs the generator is in, but determining the right check
+ // for this condition is far from trivial (think of nested lists).
+ m_writer->writeEndElement(); // para
+ newLine();
+ m_inPara = false;
+ }
+
+ if (atom->string() == ATOM_LIST_BULLET) {
+ m_writer->writeStartElement(dbNamespace, "itemizedlist");
+ newLine();
+ } else if (atom->string() == ATOM_LIST_TAG) {
+ m_writer->writeStartElement(dbNamespace, "variablelist");
+ newLine();
+ } else if (atom->string() == ATOM_LIST_VALUE) {
+ m_writer->writeStartElement(dbNamespace, "informaltable");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "thead");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "tr");
+ newLine();
+ m_writer->writeTextElement(dbNamespace, "th", "Constant");
+ newLine();
+
+ m_threeColumnEnumValueTable = isThreeColumnEnumValueTable(atom);
+ if (m_threeColumnEnumValueTable && relative->nodeType() == Node::Enum) {
+ // With three columns, if not in \enum topic, skip the value column
+ m_writer->writeTextElement(dbNamespace, "th", "Value");
+ newLine();
+ }
+
+ if (!isOneColumnValueTable(atom)) {
+ m_writer->writeTextElement(dbNamespace, "th", "Description");
+ newLine();
+ }
+
+ m_writer->writeEndElement(); // tr
+ newLine();
+ m_writer->writeEndElement(); // thead
+ newLine();
+ } else { // No recognized list type.
+ m_writer->writeStartElement(dbNamespace, "orderedlist");
+
+ if (atom->next() != nullptr && atom->next()->string().toInt() > 1)
+ m_writer->writeAttribute("startingnumber", atom->next()->string());
+
+ if (atom->string() == ATOM_LIST_UPPERALPHA)
+ m_writer->writeAttribute("numeration", "upperalpha");
+ else if (atom->string() == ATOM_LIST_LOWERALPHA)
+ m_writer->writeAttribute("numeration", "loweralpha");
+ else if (atom->string() == ATOM_LIST_UPPERROMAN)
+ m_writer->writeAttribute("numeration", "upperroman");
+ else if (atom->string() == ATOM_LIST_LOWERROMAN)
+ m_writer->writeAttribute("numeration", "lowerroman");
+ else // (atom->string() == ATOM_LIST_NUMERIC)
+ m_writer->writeAttribute("numeration", "arabic");
+
+ newLine();
+ }
+ m_inList++;
+ break;
+ case Atom::ListItemNumber:
+ break;
+ case Atom::ListTagLeft:
+ if (atom->string() == ATOM_LIST_TAG) {
+ m_writer->writeStartElement(dbNamespace, "varlistentry");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "item");
+ } else { // (atom->string() == ATOM_LIST_VALUE)
+ std::pair<QString, int> pair = getAtomListValue(atom);
+ skipAhead = pair.second;
+
+ m_writer->writeStartElement(dbNamespace, "tr");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "td");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "para");
+ if (m_useITS)
+ m_writer->writeAttribute(itsNamespace, "translate", "no");
+ generateEnumValue(pair.first, relative);
+ m_writer->writeEndElement(); // para
+ newLine();
+ m_writer->writeEndElement(); // td
+ newLine();
+
+ if (relative->nodeType() == Node::Enum) {
+ const auto enume = static_cast<const EnumNode *>(relative);
+ QString itemValue = enume->itemValue(atom->next()->string());
+
+ m_writer->writeStartElement(dbNamespace, "td");
+ if (itemValue.isEmpty())
+ m_writer->writeCharacters("?");
+ else {
+ m_writer->writeStartElement(dbNamespace, "code");
+ if (m_useITS)
+ m_writer->writeAttribute(itsNamespace, "translate", "no");
+ m_writer->writeCharacters(itemValue);
+ m_writer->writeEndElement(); // code
+ }
+ m_writer->writeEndElement(); // td
+ newLine();
+ }
+ }
+ m_inList++;
+ break;
+ case Atom::SinceTagRight:
+ if (atom->string() == ATOM_LIST_TAG) {
+ m_writer->writeEndElement(); // item
+ newLine();
+ }
+ break;
+ case Atom::ListTagRight:
+ if (m_inList > 0 && atom->string() == ATOM_LIST_TAG) {
+ m_writer->writeEndElement(); // item
+ newLine();
+ m_inList = false;
+ }
+ break;
+ case Atom::ListItemLeft:
+ if (m_inList > 0) {
+ m_inListItemLineOpen = false;
+ if (atom->string() == ATOM_LIST_TAG) {
+ m_writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_inPara = true;
+ } else if (atom->string() == ATOM_LIST_VALUE) {
+ if (m_threeColumnEnumValueTable) {
+ if (matchAhead(atom, Atom::ListItemRight)) {
+ m_writer->writeEmptyElement(dbNamespace, "td");
+ newLine();
+ m_inListItemLineOpen = false;
+ } else {
+ m_writer->writeStartElement(dbNamespace, "td");
+ newLine();
+ m_inListItemLineOpen = true;
+ }
+ }
+ } else {
+ m_writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ }
+ // Don't skip a paragraph, DocBook requires them within list items.
+ }
+ break;
+ case Atom::ListItemRight:
+ if (m_inList > 0) {
+ if (atom->string() == ATOM_LIST_TAG) {
+ m_writer->writeEndElement(); // para
+ m_inPara = false;
+ newLine();
+ m_writer->writeEndElement(); // listitem
+ newLine();
+ m_writer->writeEndElement(); // varlistentry
+ newLine();
+ } else if (atom->string() == ATOM_LIST_VALUE) {
+ if (m_inListItemLineOpen) {
+ m_writer->writeEndElement(); // td
+ newLine();
+ m_inListItemLineOpen = false;
+ }
+ m_writer->writeEndElement(); // tr
+ newLine();
+ } else {
+ m_writer->writeEndElement(); // listitem
+ newLine();
+ }
+ }
+ break;
+ case Atom::ListRight:
+ // Depending on atom->string(), closing a different item:
+ // - ATOM_LIST_BULLET: itemizedlist
+ // - ATOM_LIST_TAG: variablelist
+ // - ATOM_LIST_VALUE: informaltable
+ // - ATOM_LIST_NUMERIC: orderedlist
+ m_writer->writeEndElement();
+ newLine();
+ m_inList--;
+ break;
+ case Atom::Nop:
+ break;
+ case Atom::ParaLeft:
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_inPara = true;
+ break;
+ case Atom::ParaRight:
+ endLink();
+ if (m_inPara) {
+ m_writer->writeEndElement(); // para
+ newLine();
+ m_inPara = false;
+ }
+ break;
+ case Atom::QuotationLeft:
+ m_writer->writeStartElement(dbNamespace, "blockquote");
+ m_inBlockquote = true;
+ break;
+ case Atom::QuotationRight:
+ m_writer->writeEndElement(); // blockquote
+ newLine();
+ m_inBlockquote = false;
+ break;
+ case Atom::RawString: {
+ m_writer->device()->write(atom->string().toUtf8());
+ }
+ break;
+ case Atom::SectionLeft:
+ m_hasSection = true;
+
+ currentSectionLevel = atom->string().toInt() + hOffset(relative);
+ // Level 1 is dealt with at the header level (info tag).
+ if (currentSectionLevel > 1) {
+ // Unfortunately, SectionRight corresponds to the end of any section,
+ // i.e. going to a new section, even deeper.
+ while (!sectionLevels.empty() && sectionLevels.top() >= currentSectionLevel) {
+ sectionLevels.pop();
+ m_writer->writeEndElement(); // section
+ newLine();
+ }
+
+ sectionLevels.push(currentSectionLevel);
+
+ m_writer->writeStartElement(dbNamespace, "section");
+ writeXmlId(Tree::refForAtom(atom));
+ newLine();
+ // Unlike startSectionBegin, don't start a title here.
+ }
+
+ if (matchAhead(atom, Atom::SectionHeadingLeft) &&
+ matchAhead(atom->next(), Atom::String) &&
+ matchAhead(atom->next()->next(), Atom::SectionHeadingRight) &&
+ matchAhead(atom->next()->next()->next(), Atom::SectionRight) &&
+ !atom->next()->next()->next()->next()->next()) {
+ // A lonely section at the end of the document indicates that a
+ // generated list of some sort should be within this section.
+ // Close this section later on, in generateFooter().
+ generateAtom(atom->next(), relative, nullptr);
+ generateAtom(atom->next()->next(), relative, nullptr);
+ generateAtom(atom->next()->next()->next(), relative, nullptr);
+
+ m_closeSectionAfterGeneratedList = true;
+ skipAhead += 4;
+ sectionLevels.pop();
+ }
+
+ if (!matchAhead(atom, Atom::SectionHeadingLeft)) {
+ // No section title afterwards, make one up. This likely indicates a problem in the original documentation.
+ m_writer->writeTextElement(dbNamespace, "title", "");
+ }
+ break;
+ case Atom::SectionRight:
+ // All the logic about closing sections is done in the SectionLeft case
+ // and generateFooter() for the end of the page.
+ break;
+ case Atom::SectionHeadingLeft:
+ // Level 1 is dealt with at the header level (info tag).
+ if (currentSectionLevel > 1) {
+ m_writer->writeStartElement(dbNamespace, "title");
+ m_inSectionHeading = true;
+ }
+ break;
+ case Atom::SectionHeadingRight:
+ // Level 1 is dealt with at the header level (info tag).
+ if (currentSectionLevel > 1) {
+ m_writer->writeEndElement(); // title
+ newLine();
+ m_inSectionHeading = false;
+ }
+ break;
+ case Atom::SidebarLeft:
+ m_writer->writeStartElement(dbNamespace, "sidebar");
+ break;
+ case Atom::SidebarRight:
+ m_writer->writeEndElement(); // sidebar
+ newLine();
+ break;
+ case Atom::String:
+ if (m_inLink && !m_inContents && !m_inSectionHeading)
+ generateLink(atom);
+ else
+ m_writer->writeCharacters(atom->string());
+ break;
+ case Atom::TableLeft: {
+ std::pair<QString, QString> pair = getTableWidthAttr(atom);
+ QString attr = pair.second;
+ QString width = pair.first;
+
+ if (m_inPara) {
+ m_writer->writeEndElement(); // para or blockquote
+ newLine();
+ m_inPara = false;
+ }
+
+ m_tableHeaderAlreadyOutput = false;
+
+ m_writer->writeStartElement(dbNamespace, "informaltable");
+ m_writer->writeAttribute("style", attr);
+ if (!width.isEmpty())
+ m_writer->writeAttribute("width", width);
+ newLine();
+ } break;
+ case Atom::TableRight:
+ m_tableWidthAttr = {"", ""};
+ m_writer->writeEndElement(); // table
+ newLine();
+ break;
+ case Atom::TableHeaderLeft: {
+ if (matchAhead(atom, Atom::TableHeaderRight)) {
+ ++skipAhead;
+ break;
+ }
+
+ if (m_tableHeaderAlreadyOutput) {
+ // Headers are only allowed at the beginning of the table: close
+ // the table and reopen one.
+ m_writer->writeEndElement(); // table
+ newLine();
+
+ const QString &attr = m_tableWidthAttr.second;
+ const QString &width = m_tableWidthAttr.first;
+
+ m_writer->writeStartElement(dbNamespace, "informaltable");
+ m_writer->writeAttribute("style", attr);
+ if (!width.isEmpty())
+ m_writer->writeAttribute("width", width);
+ newLine();
+ } else {
+ m_tableHeaderAlreadyOutput = true;
+ }
+
+ const Atom *next = atom->next();
+ QString id{""};
+ if (matchAhead(atom, Atom::Target)) {
+ id = Utilities::asAsciiPrintable(next->string());
+ next = next->next();
+ ++skipAhead;
+ }
+
+ m_writer->writeStartElement(dbNamespace, "thead");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "tr");
+ writeXmlId(id);
+ newLine();
+ m_inTableHeader = true;
+
+ if (!matchAhead(atom, Atom::TableItemLeft)) {
+ m_closeTableCell = true;
+ m_writer->writeStartElement(dbNamespace, "td");
+ newLine();
+ }
+ }
+ break;
+ case Atom::TableHeaderRight:
+ if (m_closeTableCell) {
+ m_closeTableCell = false;
+ m_writer->writeEndElement(); // td
+ newLine();
+ }
+
+ m_writer->writeEndElement(); // tr
+ newLine();
+ if (matchAhead(atom, Atom::TableHeaderLeft)) {
+ skipAhead = 1;
+ m_writer->writeStartElement(dbNamespace, "tr");
+ newLine();
+ } else {
+ m_writer->writeEndElement(); // thead
+ newLine();
+ m_inTableHeader = false;
+ }
+ break;
+ case Atom::TableRowLeft: {
+ if (matchAhead(atom, Atom::TableRowRight)) {
+ skipAhead = 1;
+ break;
+ }
+
+ QString id{""};
+ bool hasTarget {false};
+ if (matchAhead(atom, Atom::Target)) {
+ id = Utilities::asAsciiPrintable(atom->next()->string());
+ ++skipAhead;
+ hasTarget = true;
+ }
+
+ m_writer->writeStartElement(dbNamespace, "tr");
+ writeXmlId(id);
+
+ if (atom->string().isEmpty()) {
+ m_writer->writeAttribute("valign", "top");
+ } else {
+ // Basic parsing of attributes, should be enough. The input string (atom->string())
+ // looks like:
+ // arg1="val1" arg2="val2"
+ QStringList args = atom->string().split("\"", Qt::SkipEmptyParts);
+ // arg1=, val1, arg2=, val2,
+ // \-- 1st --/ \-- 2nd --/ \-- remainder
+ const int nArgs = args.size();
+
+ if (nArgs % 2) {
+ // Problem...
+ relative->doc().location().warning(
+ QStringLiteral("Error when parsing attributes for the table: got \"%1\"")
+ .arg(atom->string()));
+ }
+ for (int i = 0; i + 1 < nArgs; i += 2) {
+ // args.at(i): name of the attribute being set.
+ // args.at(i + 1): value of the said attribute.
+ const QString &attr = args.at(i).chopped(1);
+ if (attr == "id") { // Too bad if there is an anchor later on
+ // (currently never happens).
+ writeXmlId(args.at(i + 1));
+ } else {
+ m_writer->writeAttribute(attr, args.at(i + 1));
+ }
+ }
+ }
+ newLine();
+
+ // If there is nothing in this row, close it right now. There might be keywords before the row contents.
+ bool isRowEmpty = hasTarget ? !matchAhead(atom->next(), Atom::TableItemLeft) : !matchAhead(atom, Atom::TableItemLeft);
+ if (isRowEmpty && matchAhead(atom, Atom::Keyword)) {
+ const Atom* next = atom->next();
+ while (matchAhead(next, Atom::Keyword))
+ next = next->next();
+ isRowEmpty = !matchAhead(next, Atom::TableItemLeft);
+ }
+
+ if (isRowEmpty) {
+ m_closeTableRow = true;
+ m_writer->writeEndElement(); // td
+ newLine();
+ }
+ }
+ break;
+ case Atom::TableRowRight:
+ if (m_closeTableRow) {
+ m_closeTableRow = false;
+ m_writer->writeEndElement(); // td
+ newLine();
+ }
+
+ m_writer->writeEndElement(); // tr
+ newLine();
+ break;
+ case Atom::TableItemLeft:
+ m_writer->writeStartElement(dbNamespace, m_inTableHeader ? "th" : "td");
+
+ for (int i = 0; i < atom->count(); ++i) {
+ const QString &p = atom->string(i);
+ if (p.contains('=')) {
+ QStringList lp = p.split(QLatin1Char('='));
+ m_writer->writeAttribute(lp.at(0), lp.at(1));
+ } else {
+ QStringList spans = p.split(QLatin1Char(','));
+ if (spans.size() == 2) {
+ if (spans.at(0) != "1")
+ m_writer->writeAttribute("colspan", spans.at(0).trimmed());
+ if (spans.at(1) != "1")
+ m_writer->writeAttribute("rowspan", spans.at(1).trimmed());
+ }
+ }
+ }
+ newLine();
+ // No skipahead, as opposed to HTML: in DocBook, the text must be wrapped in paragraphs.
+ break;
+ case Atom::TableItemRight:
+ m_writer->writeEndElement(); // th if m_inTableHeader, otherwise td
+ newLine();
+ break;
+ case Atom::TableOfContents:
+ Q_FALLTHROUGH();
+ case Atom::Keyword:
+ break;
+ case Atom::Target:
+ // Sometimes, there is a \target just before a section title with the same ID. Only output one xml:id.
+ if (matchAhead(atom, Atom::SectionRight) && matchAhead(atom->next(), Atom::SectionLeft)) {
+ QString nextId = Utilities::asAsciiPrintable(
+ Text::sectionHeading(atom->next()->next()).toString());
+ QString ownId = Utilities::asAsciiPrintable(atom->string());
+ if (nextId == ownId)
+ break;
+ }
+
+ writeAnchor(Utilities::asAsciiPrintable(atom->string()));
+ break;
+ case Atom::UnhandledFormat:
+ m_writer->writeStartElement(dbNamespace, "emphasis");
+ m_writer->writeAttribute("role", "bold");
+ m_writer->writeCharacters("<Missing DocBook>");
+ m_writer->writeEndElement(); // emphasis
+ break;
+ case Atom::UnknownCommand:
+ m_writer->writeStartElement(dbNamespace, "emphasis");
+ m_writer->writeAttribute("role", "bold");
+ if (m_useITS)
+ m_writer->writeAttribute(itsNamespace, "translate", "no");
+ m_writer->writeCharacters("<Unknown command>");
+ m_writer->writeStartElement(dbNamespace, "code");
+ m_writer->writeCharacters(atom->string());
+ m_writer->writeEndElement(); // code
+ m_writer->writeEndElement(); // emphasis
+ break;
+ case Atom::CodeQuoteArgument:
+ case Atom::CodeQuoteCommand:
+ case Atom::ComparesLeft:
+ case Atom::ComparesRight:
+ case Atom::SnippetCommand:
+ case Atom::SnippetIdentifier:
+ case Atom::SnippetLocation:
+ // No output (ignore).
+ break;
+ default:
+ unknownAtom(atom);
+ }
+ return skipAhead;
+}
+
+void DocBookGenerator::generateClassHierarchy(const Node *relative, NodeMultiMap &classMap)
+{
+ // From HtmlGenerator::generateClassHierarchy.
+ if (classMap.isEmpty())
+ return;
+
+ std::function<void(ClassNode *)> generateClassAndChildren
+ = [this, &relative, &generateClassAndChildren](ClassNode * classe) {
+ m_writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+
+ // This class.
+ m_writer->writeStartElement(dbNamespace, "para");
+ generateFullName(classe, relative);
+ m_writer->writeEndElement(); // para
+ newLine();
+
+ // Children, if any.
+ bool hasChild = false;
+ for (const RelatedClass &relatedClass : classe->derivedClasses()) {
+ if (relatedClass.m_node && relatedClass.m_node->isInAPI()) {
+ hasChild = true;
+ break;
+ }
+ }
+
+ if (hasChild) {
+ m_writer->writeStartElement(dbNamespace, "itemizedlist");
+ newLine();
+
+ for (const RelatedClass &relatedClass: classe->derivedClasses()) {
+ if (relatedClass.m_node && relatedClass.m_node->isInAPI()) {
+ generateClassAndChildren(relatedClass.m_node);
+ }
+ }
+
+ m_writer->writeEndElement(); // itemizedlist
+ newLine();
+ }
+
+ // End this class.
+ m_writer->writeEndElement(); // listitem
+ newLine();
+ };
+
+ m_writer->writeStartElement(dbNamespace, "itemizedlist");
+ newLine();
+
+ for (const auto &it : classMap) {
+ auto *classe = static_cast<ClassNode *>(it);
+ if (classe->baseClasses().isEmpty())
+ generateClassAndChildren(classe);
+ }
+
+ m_writer->writeEndElement(); // itemizedlist
+ newLine();
+}
+
+void DocBookGenerator::generateLink(const Atom *atom)
+{
+ Q_ASSERT(m_inLink);
+
+ // From HtmlGenerator::generateLink.
+ if (m_linkNode && m_linkNode->isFunction()) {
+ auto match = XmlGenerator::m_funcLeftParen.match(atom->string());
+ if (match.hasMatch()) {
+ // C++: move () outside of link
+ qsizetype leftParenLoc = match.capturedStart(1);
+ m_writer->writeCharacters(atom->string().left(leftParenLoc));
+ endLink();
+ m_writer->writeCharacters(atom->string().mid(leftParenLoc));
+ return;
+ }
+ }
+ m_writer->writeCharacters(atom->string());
+}
+
+/*!
+ This version of the function is called when the \a link is known
+ to be correct.
+ */
+void DocBookGenerator::beginLink(const QString &link, const Node *node, const Node *relative)
+{
+ // From HtmlGenerator::beginLink.
+ m_writer->writeStartElement(dbNamespace, "link");
+ m_writer->writeAttribute(xlinkNamespace, "href", link);
+ if (node && !(relative && node->status() == relative->status())
+ && node->isDeprecated())
+ m_writer->writeAttribute("role", "deprecated");
+ m_inLink = true;
+ m_linkNode = node;
+}
+
+void DocBookGenerator::endLink()
+{
+ // From HtmlGenerator::endLink.
+ if (m_inLink)
+ m_writer->writeEndElement(); // link
+ m_inLink = false;
+ m_linkNode = nullptr;
+}
+
+void DocBookGenerator::generateList(const Node *relative, const QString &selector)
+{
+ // From HtmlGenerator::generateList, without warnings, changing prototype.
+ CNMap cnm;
+ Node::NodeType type = Node::NoType;
+ if (selector == QLatin1String("overviews"))
+ type = Node::Group;
+ else if (selector == QLatin1String("cpp-modules"))
+ type = Node::Module;
+ else if (selector == QLatin1String("qml-modules"))
+ type = Node::QmlModule;
+
+ if (type != Node::NoType) {
+ NodeList nodeList;
+ m_qdb->mergeCollections(type, cnm, relative);
+ const QList<CollectionNode *> collectionList = cnm.values();
+ nodeList.reserve(collectionList.size());
+ for (auto *collectionNode : collectionList)
+ nodeList.append(collectionNode);
+ generateAnnotatedList(relative, nodeList, selector);
+ } else {
+ /*
+ \generatelist {selector} is only allowed in a comment where
+ the topic is \group, \module, or \qmlmodule.
+ */
+ Node *n = const_cast<Node *>(relative);
+ auto *cn = static_cast<CollectionNode *>(n);
+ m_qdb->mergeCollections(cn);
+ generateAnnotatedList(cn, cn->members(), selector);
+ }
+}
+
+/*!
+ Outputs an annotated list of the nodes in \a nodeList.
+ A two-column table is output.
+ */
+void DocBookGenerator::generateAnnotatedList(const Node *relative, const NodeList &nodeList,
+ const QString &selector, GeneratedListType type)
+{
+ if (nodeList.isEmpty())
+ return;
+
+ // Do nothing if all items are internal or obsolete.
+ if (std::all_of(nodeList.cbegin(), nodeList.cend(), [](const Node *n) {
+ return n->isInternal() || n->isDeprecated(); })) {
+ return;
+ }
+
+ // Detect if there is a need for a variablelist (i.e. titles mapped to
+ // descriptions) or a regular itemizedlist (only titles).
+ bool noItemsHaveTitle =
+ type == ItemizedList || std::all_of(nodeList.begin(), nodeList.end(),
+ [](const Node* node) {
+ return node->doc().briefText().toString().isEmpty();
+ });
+
+ // Wrap the list in a section if needed.
+ if (type == AutoSection && m_hasSection)
+ startSection("", "Contents");
+
+ // From WebXMLGenerator::generateAnnotatedList.
+ if (!nodeList.isEmpty()) {
+ m_writer->writeStartElement(dbNamespace, noItemsHaveTitle ? "itemizedlist" : "variablelist");
+ m_writer->writeAttribute("role", selector);
+ newLine();
+
+ NodeList members{nodeList};
+ std::sort(members.begin(), members.end(), Node::nodeNameLessThan);
+ for (const auto &node : std::as_const(members)) {
+ if (node->isInternal() || node->isDeprecated())
+ continue;
+
+ if (noItemsHaveTitle) {
+ m_writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "para");
+ } else {
+ m_writer->writeStartElement(dbNamespace, "varlistentry");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "term");
+ }
+ generateFullName(node, relative);
+ if (noItemsHaveTitle) {
+ m_writer->writeEndElement(); // para
+ newLine();
+ m_writer->writeEndElement(); // listitem
+ } else {
+ m_writer->writeEndElement(); // term
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeCharacters(node->doc().briefText().toString());
+ m_writer->writeEndElement(); // para
+ newLine();
+ m_writer->writeEndElement(); // listitem
+ newLine();
+ m_writer->writeEndElement(); // varlistentry
+ }
+ newLine();
+ }
+
+ m_writer->writeEndElement(); // itemizedlist or variablelist
+ newLine();
+ }
+
+ if (type == AutoSection && m_hasSection)
+ endSection();
+}
+
+/*!
+ Outputs a series of annotated lists from the nodes in \a nmm,
+ divided into sections based by the key names in the multimap.
+ */
+void DocBookGenerator::generateAnnotatedLists(const Node *relative, const NodeMultiMap &nmm,
+ const QString &selector)
+{
+ // From HtmlGenerator::generateAnnotatedLists.
+ for (const QString &name : nmm.uniqueKeys()) {
+ if (!name.isEmpty())
+ startSection(name.toLower(), name);
+ generateAnnotatedList(relative, nmm.values(name), selector);
+ if (!name.isEmpty())
+ endSection();
+ }
+}
+
+/*!
+ This function finds the common prefix of the names of all
+ the classes in the class map \a nmm and then generates a
+ compact list of the class names alphabetized on the part
+ of the name not including the common prefix. You can tell
+ the function to use \a comonPrefix as the common prefix,
+ but normally you let it figure it out itself by looking at
+ the name of the first and last classes in the class map
+ \a nmm.
+ */
+void DocBookGenerator::generateCompactList(const Node *relative, const NodeMultiMap &nmm,
+ bool includeAlphabet, const QString &commonPrefix,
+ const QString &selector)
+{
+ // From HtmlGenerator::generateCompactList. No more "includeAlphabet", this should be handled by
+ // the DocBook toolchain afterwards.
+ // TODO: In DocBook, probably no need for this method: this is purely presentational, i.e. to be
+ // fully handled by the DocBook toolchain.
+
+ if (nmm.isEmpty())
+ return;
+
+ const int NumParagraphs = 37; // '0' to '9', 'A' to 'Z', '_'
+ qsizetype commonPrefixLen = commonPrefix.size();
+
+ /*
+ Divide the data into 37 paragraphs: 0, ..., 9, A, ..., Z,
+ underscore (_). QAccel will fall in paragraph 10 (A) and
+ QXtWidget in paragraph 33 (X). This is the only place where we
+ assume that NumParagraphs is 37. Each paragraph is a NodeMultiMap.
+ */
+ NodeMultiMap paragraph[NumParagraphs + 1];
+ QString paragraphName[NumParagraphs + 1];
+ QSet<char> usedParagraphNames;
+
+ for (auto c = nmm.constBegin(); c != nmm.constEnd(); ++c) {
+ QStringList pieces = c.key().split("::");
+ int idx = commonPrefixLen;
+ if (idx > 0 && !pieces.last().startsWith(commonPrefix, Qt::CaseInsensitive))
+ idx = 0;
+ QString last = pieces.last().toLower();
+ QString key = last.mid(idx);
+
+ int paragraphNr = NumParagraphs - 1;
+
+ if (key[0].digitValue() != -1) {
+ paragraphNr = key[0].digitValue();
+ } else if (key[0] >= QLatin1Char('a') && key[0] <= QLatin1Char('z')) {
+ paragraphNr = 10 + key[0].unicode() - 'a';
+ }
+
+ paragraphName[paragraphNr] = key[0].toUpper();
+ usedParagraphNames.insert(key[0].toLower().cell());
+ paragraph[paragraphNr].insert(last, c.value());
+ }
+
+ /*
+ Each paragraph j has a size: paragraph[j].count(). In the
+ discussion, we will assume paragraphs 0 to 5 will have sizes
+ 3, 1, 4, 1, 5, 9.
+
+ We now want to compute the paragraph offset. Paragraphs 0 to 6
+ start at offsets 0, 3, 4, 8, 9, 14, 23.
+ */
+ int paragraphOffset[NumParagraphs + 1]; // 37 + 1
+ paragraphOffset[0] = 0;
+ for (int i = 0; i < NumParagraphs; i++) // i = 0..36
+ paragraphOffset[i + 1] = paragraphOffset[i] + paragraph[i].size();
+
+ // Output the alphabet as a row of links.
+ if (includeAlphabet && !usedParagraphNames.isEmpty()) {
+ m_writer->writeStartElement(dbNamespace, "simplelist");
+ newLine();
+
+ for (int i = 0; i < 26; i++) {
+ QChar ch('a' + i);
+ if (usedParagraphNames.contains(char('a' + i))) {
+ m_writer->writeStartElement(dbNamespace, "member");
+ generateSimpleLink(ch, ch.toUpper());
+ m_writer->writeEndElement(); // member
+ newLine();
+ }
+ }
+
+ m_writer->writeEndElement(); // simplelist
+ newLine();
+ }
+
+ // Actual output.
+ int curParNr = 0;
+ int curParOffset = 0;
+ QString previousName;
+ bool multipleOccurrences = false;
+
+ m_writer->writeStartElement(dbNamespace, "variablelist");
+ m_writer->writeAttribute("role", selector);
+ newLine();
+
+ for (int i = 0; i < nmm.size(); i++) {
+ while ((curParNr < NumParagraphs) && (curParOffset == paragraph[curParNr].size())) {
+
+ ++curParNr;
+ curParOffset = 0;
+ }
+
+ // Starting a new paragraph means starting a new varlistentry.
+ if (curParOffset == 0) {
+ if (i > 0) {
+ m_writer->writeEndElement(); // itemizedlist
+ newLine();
+ m_writer->writeEndElement(); // listitem
+ newLine();
+ m_writer->writeEndElement(); // varlistentry
+ newLine();
+ }
+
+ m_writer->writeStartElement(dbNamespace, "varlistentry");
+ if (includeAlphabet)
+ writeXmlId(paragraphName[curParNr][0].toLower());
+ newLine();
+
+ m_writer->writeStartElement(dbNamespace, "term");
+ m_writer->writeStartElement(dbNamespace, "emphasis");
+ m_writer->writeAttribute("role", "bold");
+ m_writer->writeCharacters(paragraphName[curParNr]);
+ m_writer->writeEndElement(); // emphasis
+ m_writer->writeEndElement(); // term
+ newLine();
+
+ m_writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "itemizedlist");
+ newLine();
+ }
+
+ // Output a listitem for the current offset in the current paragraph.
+ m_writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "para");
+
+ if ((curParNr < NumParagraphs) && !paragraphName[curParNr].isEmpty()) {
+ NodeMultiMap::Iterator it;
+ NodeMultiMap::Iterator next;
+ it = paragraph[curParNr].begin();
+ for (int j = 0; j < curParOffset; j++)
+ ++it;
+
+ // 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("::");
+
+ // Write the link to the element, which is identical if the element is obsolete or not.
+ m_writer->writeStartElement(dbNamespace, "link");
+ m_writer->writeAttribute(xlinkNamespace, "href", linkForNode(*it, relative));
+ if (const QString type = targetType(it.value()); !type.isEmpty())
+ m_writer->writeAttribute("role", type);
+ m_writer->writeCharacters(pieces.last());
+ m_writer->writeEndElement(); // link
+
+ // Outside the link, give the full name of the node if it is complex.
+ if (pieces.size() > 1) {
+ m_writer->writeCharacters(" (");
+ generateFullName(it.value()->parent(), relative);
+ m_writer->writeCharacters(")");
+ }
+ }
+
+ m_writer->writeEndElement(); // para
+ newLine();
+ m_writer->writeEndElement(); // listitem
+ newLine();
+
+ curParOffset++;
+ }
+ m_writer->writeEndElement(); // itemizedlist
+ newLine();
+ m_writer->writeEndElement(); // listitem
+ newLine();
+ m_writer->writeEndElement(); // varlistentry
+ newLine();
+
+ m_writer->writeEndElement(); // variablelist
+ newLine();
+}
+
+void DocBookGenerator::generateFunctionIndex(const Node *relative)
+{
+ // From HtmlGenerator::generateFunctionIndex.
+
+ // First list: links to parts of the second list, one item per letter.
+ m_writer->writeStartElement(dbNamespace, "simplelist");
+ m_writer->writeAttribute("role", "functionIndex");
+ newLine();
+ for (int i = 0; i < 26; i++) {
+ QChar ch('a' + i);
+ m_writer->writeStartElement(dbNamespace, "member");
+ m_writer->writeAttribute(xlinkNamespace, "href", QString("#") + ch);
+ m_writer->writeCharacters(ch.toUpper());
+ m_writer->writeEndElement(); // member
+ newLine();
+ }
+ m_writer->writeEndElement(); // simplelist
+ newLine();
+
+ // Second list: the actual list of functions, sorted by alphabetical
+ // order. One entry of the list per letter.
+ if (m_qdb->getFunctionIndex().isEmpty())
+ return;
+ char nextLetter = 'a';
+ char currentLetter;
+
+ m_writer->writeStartElement(dbNamespace, "itemizedlist");
+ newLine();
+
+ NodeMapMap &funcIndex = m_qdb->getFunctionIndex();
+ QMap<QString, NodeMap>::ConstIterator f = funcIndex.constBegin();
+ while (f != funcIndex.constEnd()) {
+ m_writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeCharacters(f.key() + ": ");
+
+ currentLetter = f.key()[0].unicode();
+ while (islower(currentLetter) && currentLetter >= nextLetter) {
+ writeAnchor(QString(nextLetter));
+ nextLetter++;
+ }
+
+ NodeMap::ConstIterator s = (*f).constBegin();
+ while (s != (*f).constEnd()) {
+ m_writer->writeCharacters(" ");
+ generateFullName((*s)->parent(), relative);
+ ++s;
+ }
+
+ m_writer->writeEndElement(); // para
+ newLine();
+ m_writer->writeEndElement(); // listitem
+ newLine();
+ ++f;
+ }
+ m_writer->writeEndElement(); // itemizedlist
+ newLine();
+}
+
+void DocBookGenerator::generateLegaleseList(const Node *relative)
+{
+ // From HtmlGenerator::generateLegaleseList.
+ TextToNodeMap &legaleseTexts = m_qdb->getLegaleseTexts();
+ for (auto it = legaleseTexts.cbegin(), end = legaleseTexts.cend(); it != end; ++it) {
+ Text text = it.key();
+ generateText(text, relative);
+ m_writer->writeStartElement(dbNamespace, "itemizedlist");
+ newLine();
+ do {
+ m_writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "para");
+ generateFullName(it.value(), relative);
+ m_writer->writeEndElement(); // para
+ newLine();
+ m_writer->writeEndElement(); // listitem
+ newLine();
+ ++it;
+ } while (it != legaleseTexts.constEnd() && it.key() == text);
+ m_writer->writeEndElement(); // itemizedlist
+ newLine();
+ }
+}
+
+void DocBookGenerator::generateBrief(const Node *node)
+{
+ // From HtmlGenerator::generateBrief. Also see generateHeader, which is specifically dealing
+ // with the DocBook header (and thus wraps the brief in an abstract).
+ Text brief = node->doc().briefText();
+
+ if (!brief.isEmpty()) {
+ if (!brief.lastAtom()->string().endsWith('.'))
+ brief << Atom(Atom::String, ".");
+
+ m_writer->writeStartElement(dbNamespace, "para");
+ generateText(brief, node);
+ m_writer->writeEndElement(); // para
+ newLine();
+ }
+}
+
+bool DocBookGenerator::generateSince(const Node *node)
+{
+ // From Generator::generateSince.
+ if (!node->since().isEmpty()) {
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeCharacters("This " + typeString(node) + " was introduced in ");
+ m_writer->writeCharacters(formatSince(node) + ".");
+ m_writer->writeEndElement(); // para
+ newLine();
+
+ return true;
+ }
+
+ return false;
+}
+
+/*!
+ Generate the DocBook header for the file, including the abstract.
+ Equivalent to calling generateTitle and generateBrief in HTML.
+*/
+void DocBookGenerator::generateHeader(const QString &title, const QString &subTitle,
+ const Node *node)
+{
+ refMap.clear();
+
+ // Output the DocBook header.
+ m_writer->writeStartElement(dbNamespace, "info");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "title");
+ if (node->genus() & Node::API && m_useITS)
+ m_writer->writeAttribute(itsNamespace, "translate", "no");
+ m_writer->writeCharacters(title);
+ m_writer->writeEndElement(); // title
+ newLine();
+
+ if (!subTitle.isEmpty()) {
+ m_writer->writeStartElement(dbNamespace, "subtitle");
+ if (node->genus() & Node::API && m_useITS)
+ m_writer->writeAttribute(itsNamespace, "translate", "no");
+ m_writer->writeCharacters(subTitle);
+ m_writer->writeEndElement(); // subtitle
+ newLine();
+ }
+
+ if (!m_project.isEmpty()) {
+ m_writer->writeTextElement(dbNamespace, "productname", m_project);
+ newLine();
+ }
+
+ if (!m_buildVersion.isEmpty()) {
+ m_writer->writeTextElement(dbNamespace, "edition", m_buildVersion);
+ newLine();
+ }
+
+ if (!m_projectDescription.isEmpty()) {
+ m_writer->writeTextElement(dbNamespace, "titleabbrev", m_projectDescription);
+ newLine();
+ }
+
+ // Deal with links.
+ // Adapted from HtmlGenerator::generateHeader (output part: no need to update a navigationLinks
+ // or useSeparator field, as this content is only output in the info tag, not in the main
+ // content).
+ if (node && !node->links().empty()) {
+ std::pair<QString, QString> linkPair;
+ std::pair<QString, QString> anchorPair;
+ const Node *linkNode;
+
+ if (node->links().contains(Node::PreviousLink)) {
+ linkPair = node->links()[Node::PreviousLink];
+ linkNode = m_qdb->findNodeForTarget(linkPair.first, node);
+ if (!linkNode || linkNode == node)
+ anchorPair = linkPair;
+ else
+ anchorPair = anchorForNode(linkNode);
+
+ m_writer->writeStartElement(dbNamespace, "extendedlink");
+ m_writer->writeAttribute(xlinkNamespace, "type", "extended");
+ m_writer->writeEmptyElement(dbNamespace, "link");
+ m_writer->writeAttribute(xlinkNamespace, "to", anchorPair.first);
+ m_writer->writeAttribute(xlinkNamespace, "type", "arc");
+ m_writer->writeAttribute(xlinkNamespace, "arcrole", "prev");
+ if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty())
+ m_writer->writeAttribute(xlinkNamespace, "title", anchorPair.second);
+ else
+ m_writer->writeAttribute(xlinkNamespace, "title", linkPair.second);
+ m_writer->writeEndElement(); // extendedlink
+ newLine();
+ }
+ if (node->links().contains(Node::NextLink)) {
+ linkPair = node->links()[Node::NextLink];
+ linkNode = m_qdb->findNodeForTarget(linkPair.first, node);
+ if (!linkNode || linkNode == node)
+ anchorPair = linkPair;
+ else
+ anchorPair = anchorForNode(linkNode);
+
+ m_writer->writeStartElement(dbNamespace, "extendedlink");
+ m_writer->writeAttribute(xlinkNamespace, "type", "extended");
+ m_writer->writeEmptyElement(dbNamespace, "link");
+ m_writer->writeAttribute(xlinkNamespace, "to", anchorPair.first);
+ m_writer->writeAttribute(xlinkNamespace, "type", "arc");
+ m_writer->writeAttribute(xlinkNamespace, "arcrole", "next");
+ if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty())
+ m_writer->writeAttribute(xlinkNamespace, "title", anchorPair.second);
+ else
+ m_writer->writeAttribute(xlinkNamespace, "title", linkPair.second);
+ m_writer->writeEndElement(); // extendedlink
+ newLine();
+ }
+ if (node->links().contains(Node::StartLink)) {
+ linkPair = node->links()[Node::StartLink];
+ linkNode = m_qdb->findNodeForTarget(linkPair.first, node);
+ if (!linkNode || linkNode == node)
+ anchorPair = linkPair;
+ else
+ anchorPair = anchorForNode(linkNode);
+
+ m_writer->writeStartElement(dbNamespace, "extendedlink");
+ m_writer->writeAttribute(xlinkNamespace, "type", "extended");
+ m_writer->writeEmptyElement(dbNamespace, "link");
+ m_writer->writeAttribute(xlinkNamespace, "to", anchorPair.first);
+ m_writer->writeAttribute(xlinkNamespace, "type", "arc");
+ m_writer->writeAttribute(xlinkNamespace, "arcrole", "start");
+ if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty())
+ m_writer->writeAttribute(xlinkNamespace, "title", anchorPair.second);
+ else
+ m_writer->writeAttribute(xlinkNamespace, "title", linkPair.second);
+ m_writer->writeEndElement(); // extendedlink
+ newLine();
+ }
+ }
+
+ // Deal with the abstract (what qdoc calls brief).
+ if (node) {
+ // Adapted from HtmlGenerator::generateBrief, without extraction marks. The parameter
+ // addLink is always false. Factoring this function out is not as easy as in HtmlGenerator:
+ // abstracts only happen in the header (info tag), slightly different tags must be used at
+ // other places. Also includes code from HtmlGenerator::generateCppReferencePage to handle
+ // the name spaces.
+ m_writer->writeStartElement(dbNamespace, "abstract");
+ newLine();
+
+ bool generatedSomething = false;
+
+ Text brief;
+ const NamespaceNode *ns =
+ node->isNamespace() ? static_cast<const NamespaceNode *>(node) : nullptr;
+ if (ns && !ns->hasDoc() && ns->docNode()) {
+ NamespaceNode *NS = ns->docNode();
+ brief << "The " << ns->name()
+ << " namespace includes the following elements from module "
+ << ns->tree()->camelCaseModuleName() << ". The full namespace is "
+ << "documented in module " << NS->tree()->camelCaseModuleName()
+ << Atom(Atom::LinkNode, fullDocumentLocation(NS))
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
+ << Atom(Atom::String, " here.")
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
+ } else {
+ brief = node->doc().briefText();
+ }
+
+ if (!brief.isEmpty()) {
+ if (!brief.lastAtom()->string().endsWith('.'))
+ brief << Atom(Atom::String, ".");
+
+ m_writer->writeStartElement(dbNamespace, "para");
+ generateText(brief, node);
+ m_writer->writeEndElement(); // para
+ newLine();
+
+ generatedSomething = true;
+ }
+
+ // Generate other paragraphs that should go into the abstract.
+ generatedSomething |= generateStatus(node);
+ generatedSomething |= generateSince(node);
+ generatedSomething |= generateThreadSafeness(node);
+ generatedSomething |= generateComparisonCategory(node);
+ generatedSomething |= generateComparisonList(node);
+
+ // An abstract cannot be empty, hence use the project description.
+ if (!generatedSomething)
+ m_writer->writeTextElement(dbNamespace, "para", m_projectDescription + ".");
+
+ m_writer->writeEndElement(); // abstract
+ newLine();
+ }
+
+ // End of the DocBook header.
+ m_writer->writeEndElement(); // info
+ newLine();
+}
+
+void DocBookGenerator::closeTextSections()
+{
+ while (!sectionLevels.isEmpty()) {
+ sectionLevels.pop();
+ endSection();
+ }
+}
+
+void DocBookGenerator::generateFooter()
+{
+ if (m_closeSectionAfterGeneratedList) {
+ m_closeSectionAfterGeneratedList = false;
+ endSection();
+ }
+ if (m_closeSectionAfterRawTitle) {
+ m_closeSectionAfterRawTitle = false;
+ endSection();
+ }
+
+ closeTextSections();
+ m_writer->writeEndElement(); // article
+}
+
+void DocBookGenerator::generateSimpleLink(const QString &href, const QString &text)
+{
+ m_writer->writeStartElement(dbNamespace, "link");
+ m_writer->writeAttribute(xlinkNamespace, "href", href);
+ m_writer->writeCharacters(text);
+ m_writer->writeEndElement(); // link
+}
+
+void DocBookGenerator::generateObsoleteMembers(const Sections &sections)
+{
+ // From HtmlGenerator::generateObsoleteMembersFile.
+ SectionPtrVector summary_spv; // Summaries are ignored in DocBook (table of contents).
+ SectionPtrVector details_spv;
+ if (!sections.hasObsoleteMembers(&summary_spv, &details_spv))
+ return;
+
+ Aggregate *aggregate = sections.aggregate();
+ startSection("obsolete", "Obsolete Members for " + aggregate->name());
+
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeStartElement(dbNamespace, "emphasis");
+ m_writer->writeAttribute("role", "bold");
+ m_writer->writeCharacters("The following members of class ");
+ generateSimpleLink(linkForNode(aggregate, nullptr), aggregate->name());
+ m_writer->writeCharacters(" are deprecated.");
+ m_writer->writeEndElement(); // emphasis bold
+ m_writer->writeCharacters(" We strongly advise against using them in new code.");
+ m_writer->writeEndElement(); // para
+ newLine();
+
+ for (const Section *section : details_spv) {
+ const QString &title = "Obsolete " + section->title();
+ startSection(title.toLower(), title);
+
+ const NodeVector &members = section->obsoleteMembers();
+ NodeVector::ConstIterator m = members.constBegin();
+ while (m != members.constEnd()) {
+ if ((*m)->access() != Access::Private)
+ generateDetailedMember(*m, aggregate);
+ ++m;
+ }
+
+ endSection();
+ }
+
+ endSection();
+}
+
+/*!
+ Generates a separate section where obsolete members of the QML
+ type \a qcn are listed. The \a marker is used to generate
+ the section lists, which are then traversed and output here.
+
+ Note that this function currently only handles correctly the
+ case where \a status is \c {Section::Deprecated}.
+ */
+void DocBookGenerator::generateObsoleteQmlMembers(const Sections &sections)
+{
+ // From HtmlGenerator::generateObsoleteQmlMembersFile.
+ SectionPtrVector summary_spv; // Summaries are not useful in DocBook.
+ SectionPtrVector details_spv;
+ if (!sections.hasObsoleteMembers(&summary_spv, &details_spv))
+ return;
+
+ Aggregate *aggregate = sections.aggregate();
+ startSection("obsolete", "Obsolete Members for " + aggregate->name());
+
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeStartElement(dbNamespace, "emphasis");
+ m_writer->writeAttribute("role", "bold");
+ m_writer->writeCharacters("The following members of QML type ");
+ generateSimpleLink(linkForNode(aggregate, nullptr), aggregate->name());
+ m_writer->writeCharacters(" are deprecated.");
+ m_writer->writeEndElement(); // emphasis bold
+ m_writer->writeCharacters(" We strongly advise against using them in new code.");
+ m_writer->writeEndElement(); // para
+ newLine();
+
+ for (const auto *section : details_spv) {
+ const QString &title = "Obsolete " + section->title();
+ startSection(title.toLower(), title);
+
+ const NodeVector &members = section->obsoleteMembers();
+ NodeVector::ConstIterator m = members.constBegin();
+ while (m != members.constEnd()) {
+ if ((*m)->access() != Access::Private)
+ generateDetailedQmlMember(*m, aggregate);
+ ++m;
+ }
+
+ endSection();
+ }
+
+ endSection();
+}
+
+static QString nodeToSynopsisTag(const Node *node)
+{
+ // Order from Node::nodeTypeString.
+ if (node->isClass() || node->isQmlType())
+ return QStringLiteral("classsynopsis");
+ if (node->isNamespace())
+ return QStringLiteral("packagesynopsis");
+ if (node->isPageNode()) {
+ node->doc().location().warning("Unexpected document node in nodeToSynopsisTag");
+ return QString();
+ }
+ if (node->isEnumType())
+ return QStringLiteral("enumsynopsis");
+ if (node->isTypedef())
+ return QStringLiteral("typedefsynopsis");
+ if (node->isFunction()) {
+ // Signals are also encoded as functions (including QML ones).
+ const auto fn = static_cast<const FunctionNode *>(node);
+ if (fn->isCtor() || fn->isCCtor() || fn->isMCtor())
+ return QStringLiteral("constructorsynopsis");
+ if (fn->isDtor())
+ return QStringLiteral("destructorsynopsis");
+ return QStringLiteral("methodsynopsis");
+ }
+ if (node->isProperty() || node->isVariable() || node->isQmlProperty())
+ return QStringLiteral("fieldsynopsis");
+
+ node->doc().location().warning(QString("Unknown node tag %1").arg(node->nodeTypeString()));
+ return QStringLiteral("synopsis");
+}
+
+void DocBookGenerator::generateStartRequisite(const QString &description)
+{
+ m_writer->writeStartElement(dbNamespace, "varlistentry");
+ newLine();
+ m_writer->writeTextElement(dbNamespace, "term", description);
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_inPara = true;
+}
+
+void DocBookGenerator::generateEndRequisite()
+{
+ m_writer->writeEndElement(); // para
+ m_inPara = false;
+ newLine();
+ m_writer->writeEndElement(); // listitem
+ newLine();
+ m_writer->writeEndElement(); // varlistentry
+ newLine();
+}
+
+void DocBookGenerator::generateRequisite(const QString &description, const QString &value)
+{
+ generateStartRequisite(description);
+ m_writer->writeCharacters(value);
+ generateEndRequisite();
+}
+
+/*!
+ * \internal
+ * Generates the CMake (\a description) requisites
+ */
+void DocBookGenerator::generateCMakeRequisite(const QStringList &values)
+{
+ const QString description("CMake");
+ generateStartRequisite(description);
+ m_writer->writeCharacters(values.first());
+ m_writer->writeEndElement(); // para
+ newLine();
+
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeCharacters(values.last());
+ generateEndRequisite();
+}
+
+void DocBookGenerator::generateSortedNames(const ClassNode *cn, const QList<RelatedClass> &rc)
+{
+ // From Generator::appendSortedNames.
+ QMap<QString, ClassNode *> classMap;
+ QList<RelatedClass>::ConstIterator r = rc.constBegin();
+ while (r != rc.constEnd()) {
+ ClassNode *rcn = (*r).m_node;
+ if (rcn && rcn->access() == Access::Public && rcn->status() != Node::Internal
+ && !rcn->doc().isEmpty()) {
+ classMap[rcn->plainFullName(cn).toLower()] = rcn;
+ }
+ ++r;
+ }
+
+ QStringList classNames = classMap.keys();
+ classNames.sort();
+
+ int index = 0;
+ for (const QString &className : classNames) {
+ generateFullName(classMap.value(className), cn);
+ m_writer->writeCharacters(Utilities::comma(index++, classNames.size()));
+ }
+}
+
+void DocBookGenerator::generateSortedQmlNames(const Node *base, const NodeList &subs)
+{
+ // From Generator::appendSortedQmlNames.
+ QMap<QString, Node *> classMap;
+
+ for (auto sub : subs)
+ classMap[sub->plainFullName(base).toLower()] = sub;
+
+ QStringList names = classMap.keys();
+ names.sort();
+
+ int index = 0;
+ for (const QString &name : names) {
+ generateFullName(classMap.value(name), base);
+ m_writer->writeCharacters(Utilities::comma(index++, names.size()));
+ }
+}
+
+/*!
+ Lists the required imports and includes.
+*/
+void DocBookGenerator::generateRequisites(const Aggregate *aggregate)
+{
+ // Adapted from HtmlGenerator::generateRequisites, but simplified: no need to store all the
+ // elements, they can be produced one by one.
+
+ // Generate the requisites first separately: if some of them are generated, output them in a wrapper.
+ // This complexity is required to ensure the DocBook file is valid: an empty list is not valid. It is not easy
+ // to write a truly comprehensive condition.
+ QXmlStreamWriter* oldWriter = m_writer;
+ QString output;
+ m_writer = new QXmlStreamWriter(&output);
+
+ // Includes.
+ if (aggregate->includeFile()) generateRequisite("Header", *aggregate->includeFile());
+
+ // Since and project.
+ if (!aggregate->since().isEmpty())
+ generateRequisite("Since", formatSince(aggregate));
+
+ if (aggregate->isClassNode() || aggregate->isNamespace()) {
+ // CMake and QT variable.
+ const CollectionNode *cn =
+ m_qdb->getCollectionNode(aggregate->physicalModuleName(), Node::Module);
+ if (cn && !cn->qtCMakeComponent().isEmpty()) {
+ const QString qtComponent = "Qt" + QString::number(QT_VERSION_MAJOR);
+ const QString findpackageText = "find_package(" + qtComponent
+ + " REQUIRED COMPONENTS " + cn->qtCMakeComponent() + ")";
+ const QString targetItem =
+ cn->qtCMakeTargetItem().isEmpty() ? cn->qtCMakeComponent() : cn->qtCMakeTargetItem();
+ const QString targetLinkLibrariesText = "target_link_libraries(mytarget PRIVATE "
+ + qtComponent + "::" + targetItem + ")";
+ const QStringList cmakeInfo { findpackageText, targetLinkLibrariesText };
+ generateCMakeRequisite(cmakeInfo);
+ }
+ if (cn && !cn->qtVariable().isEmpty())
+ generateRequisite("qmake", "QT += " + cn->qtVariable());
+ }
+
+ if (aggregate->nodeType() == Node::Class) {
+ // Instantiated by.
+ 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());
+ generateEndRequisite();
+ generateRequisite("Instantiated By", fullDocumentLocation(classe->qmlElement()));
+ }
+
+ // Inherits.
+ QList<RelatedClass>::ConstIterator r;
+ if (!classe->baseClasses().isEmpty()) {
+ generateStartRequisite("Inherits");
+
+ r = classe->baseClasses().constBegin();
+ int index = 0;
+ while (r != classe->baseClasses().constEnd()) {
+ if ((*r).m_node) {
+ generateFullName((*r).m_node, classe);
+
+ if ((*r).m_access == Access::Protected)
+ m_writer->writeCharacters(" (protected)");
+ else if ((*r).m_access == Access::Private)
+ m_writer->writeCharacters(" (private)");
+ m_writer->writeCharacters(
+ Utilities::comma(index++, classe->baseClasses().size()));
+ }
+ ++r;
+ }
+
+ generateEndRequisite();
+ }
+
+ // Inherited by.
+ if (!classe->derivedClasses().isEmpty()) {
+ generateStartRequisite("Inherited By");
+ generateSortedNames(classe, classe->derivedClasses());
+ generateEndRequisite();
+ }
+ }
+
+ // Group.
+ if (!aggregate->groupNames().empty()) {
+ generateStartRequisite("Group");
+ generateGroupReferenceText(aggregate);
+ generateEndRequisite();
+ }
+
+ // Status.
+ if (auto status = formatStatus(aggregate, m_qdb); status)
+ generateRequisite("Status", status.value());
+
+ // Write the elements as a list if not empty.
+ delete m_writer;
+ m_writer = oldWriter;
+
+ if (!output.isEmpty()) {
+ // Namespaces are mangled in this output, because QXmlStreamWriter doesn't know about them. (Letting it know
+ // would imply generating the xmlns declaration one more time.)
+ static const QRegularExpression xmlTag(R"(<(/?)n\d+:)"); // Only for DocBook tags.
+ static const QRegularExpression xmlnsDocBookDefinition(R"( xmlns:n\d+=")" + QString{dbNamespace} + "\"");
+ static const QRegularExpression xmlnsXLinkDefinition(R"( xmlns:n\d+=")" + QString{xlinkNamespace} + "\"");
+ static const QRegularExpression xmlAttr(R"( n\d+:)"); // Only for XLink attributes.
+ // Space at the beginning!
+ const QString cleanOutput = output.replace(xmlTag, R"(<\1db:)")
+ .replace(xmlnsDocBookDefinition, "")
+ .replace(xmlnsXLinkDefinition, "")
+ .replace(xmlAttr, " xlink:");
+
+ m_writer->writeStartElement(dbNamespace, "variablelist");
+ if (m_useITS)
+ m_writer->writeAttribute(itsNamespace, "translate", "no");
+ newLine();
+
+ m_writer->device()->write(cleanOutput.toUtf8());
+
+ m_writer->writeEndElement(); // variablelist
+ newLine();
+ }
+}
+
+/*!
+ Lists the required imports and includes.
+*/
+void DocBookGenerator::generateQmlRequisites(const QmlTypeNode *qcn)
+{
+ // From HtmlGenerator::generateQmlRequisites, but simplified: no need to store all the elements,
+ // they can be produced one by one.
+ if (!qcn)
+ return;
+
+ const CollectionNode *collection = qcn->logicalModule();
+
+ NodeList subs;
+ QmlTypeNode::subclasses(qcn, subs);
+
+ QmlTypeNode *base = qcn->qmlBaseNode();
+ while (base && base->isInternal()) {
+ base = base->qmlBaseNode();
+ }
+
+ // Skip import statement for \internal collections
+ const bool generate_import_statement = !qcn->logicalModuleName().isEmpty() && (!collection || !collection->isInternal() || m_showInternal);
+ // Detect if anything is generated in this method. If not, exit early to avoid having an empty list.
+ const bool generates_something = generate_import_statement || !qcn->since().isEmpty() || !subs.isEmpty() || base;
+
+ if (!generates_something)
+ return;
+
+ // Start writing the elements as a list.
+ m_writer->writeStartElement(dbNamespace, "variablelist");
+ if (m_useITS)
+ m_writer->writeAttribute(itsNamespace, "translate", "no");
+ newLine();
+
+ if (generate_import_statement) {
+ QStringList parts = QStringList() << "import" << qcn->logicalModuleName() << qcn->logicalModuleVersion();
+ generateRequisite("Import Statement", parts.join(' ').trimmed());
+ }
+
+ // Since and project.
+ if (!qcn->since().isEmpty())
+ generateRequisite("Since:", formatSince(qcn));
+
+ // Inherited by.
+ if (!subs.isEmpty()) {
+ generateStartRequisite("Inherited By:");
+ generateSortedQmlNames(qcn, subs);
+ generateEndRequisite();
+ }
+
+ // Inherits.
+ if (base) {
+ const Node *otherNode = nullptr;
+ Atom a = Atom(Atom::LinkNode, CodeMarker::stringForNode(base));
+ QString link = getAutoLink(&a, qcn, &otherNode);
+
+ generateStartRequisite("Inherits:");
+ generateSimpleLink(link, base->name());
+ generateEndRequisite();
+ }
+
+ // Instantiates.
+ ClassNode *cn = (const_cast<QmlTypeNode *>(qcn))->classNode();
+ if (cn && (cn->status() != Node::Internal)) {
+ Atom a = Atom(Atom::LinkNode, CodeMarker::stringForNode(qcn));
+
+ generateStartRequisite("Instantiates:");
+ generateSimpleLink(fullDocumentLocation(cn), cn->name());
+ generateEndRequisite();
+ }
+
+ // Group.
+ if (!qcn->groupNames().empty()) {
+ generateStartRequisite("Group");
+ generateGroupReferenceText(qcn);
+ generateEndRequisite();
+ }
+
+ // Status.
+ if (auto status = formatStatus(qcn, m_qdb); status)
+ generateRequisite("Status:", status.value());
+
+ m_writer->writeEndElement(); // variablelist
+ newLine();
+}
+
+bool DocBookGenerator::generateStatus(const Node *node)
+{
+ // From Generator::generateStatus.
+ switch (node->status()) {
+ case Node::Active:
+ // Output the module 'state' description if set.
+ if (node->isModule() || node->isQmlModule()) {
+ const QString &state = static_cast<const CollectionNode*>(node)->state();
+ if (!state.isEmpty()) {
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeCharacters("This " + typeString(node) + " is in ");
+ m_writer->writeStartElement(dbNamespace, "emphasis");
+ m_writer->writeCharacters(state);
+ m_writer->writeEndElement(); // emphasis
+ m_writer->writeCharacters(" state.");
+ m_writer->writeEndElement(); // para
+ newLine();
+ return true;
+ }
+ }
+ if (const auto version = node->deprecatedSince(); !version.isEmpty()) {
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeCharacters("This " + typeString(node)
+ + " is scheduled for deprecation in version "
+ + version + ".");
+ m_writer->writeEndElement(); // para
+ newLine();
+ return true;
+ }
+ return false;
+ case Node::Preliminary:
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeStartElement(dbNamespace, "emphasis");
+ m_writer->writeAttribute("role", "bold");
+ m_writer->writeCharacters("This " + typeString(node)
+ + " is under development and is subject to change.");
+ m_writer->writeEndElement(); // emphasis
+ m_writer->writeEndElement(); // para
+ newLine();
+ return true;
+ case Node::Deprecated:
+ m_writer->writeStartElement(dbNamespace, "para");
+ if (node->isAggregate()) {
+ m_writer->writeStartElement(dbNamespace, "emphasis");
+ m_writer->writeAttribute("role", "bold");
+ }
+ m_writer->writeCharacters("This " + typeString(node) + " is deprecated");
+ if (const QString &version = node->deprecatedSince(); !version.isEmpty()) {
+ m_writer->writeCharacters(" since ");
+ if (node->isQmlNode() && !node->logicalModuleName().isEmpty())
+ m_writer->writeCharacters(node->logicalModuleName() + " ");
+ m_writer->writeCharacters(version);
+ }
+ m_writer->writeCharacters(". We strongly advise against using it in new code.");
+ if (node->isAggregate())
+ m_writer->writeEndElement(); // emphasis
+ m_writer->writeEndElement(); // para
+ newLine();
+ return true;
+ case Node::Internal:
+ default:
+ return false;
+ }
+}
+
+/*!
+ Generate a list of function signatures. The function nodes
+ are in \a nodes.
+ */
+void DocBookGenerator::generateSignatureList(const NodeList &nodes)
+{
+ // From Generator::signatureList and Generator::appendSignature.
+ m_writer->writeStartElement(dbNamespace, "itemizedlist");
+ newLine();
+
+ NodeList::ConstIterator n = nodes.constBegin();
+ while (n != nodes.constEnd()) {
+ m_writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "para");
+
+ generateSimpleLink(currentGenerator()->fullDocumentLocation(*n),
+ (*n)->signature(Node::SignaturePlain));
+
+ m_writer->writeEndElement(); // para
+ newLine();
+ m_writer->writeEndElement(); // itemizedlist
+ newLine();
+ ++n;
+ }
+
+ m_writer->writeEndElement(); // itemizedlist
+ newLine();
+}
+
+/*!
+ * Return a string representing a text that exposes information about
+ * the groups that the \a node is part of.
+ */
+void DocBookGenerator::generateGroupReferenceText(const Node* node)
+{
+ // From HtmlGenerator::groupReferenceText
+
+ if (!node->isAggregate())
+ return;
+ const auto aggregate = static_cast<const Aggregate *>(node);
+
+ const QStringList &groups_names{aggregate->groupNames()};
+ if (!groups_names.empty()) {
+ m_writer->writeCharacters(aggregate->name() + " is part of ");
+ m_writer->writeStartElement(dbNamespace, "simplelist");
+
+ for (qsizetype index{0}; index < groups_names.size(); ++index) {
+ CollectionNode* group{m_qdb->groups()[groups_names[index]]};
+ m_qdb->mergeCollections(group);
+
+ m_writer->writeStartElement(dbNamespace, "member");
+ if (QString target{linkForNode(group, nullptr)}; !target.isEmpty())
+ generateSimpleLink(target, group->fullTitle());
+ else
+ m_writer->writeCharacters(group->name());
+ m_writer->writeEndElement(); // member
+ }
+
+ m_writer->writeEndElement(); // simplelist
+ newLine();
+ }
+}
+
+/*!
+ Generates text that explains how threadsafe and/or reentrant
+ \a node is.
+ */
+bool DocBookGenerator::generateThreadSafeness(const Node *node)
+{
+ // From Generator::generateThreadSafeness
+ Node::ThreadSafeness ts = node->threadSafeness();
+
+ const Node *reentrantNode;
+ Atom reentrantAtom = Atom(Atom::Link, "reentrant");
+ QString linkReentrant = getAutoLink(&reentrantAtom, node, &reentrantNode);
+ const Node *threadSafeNode;
+ Atom threadSafeAtom = Atom(Atom::Link, "thread-safe");
+ QString linkThreadSafe = getAutoLink(&threadSafeAtom, node, &threadSafeNode);
+
+ if (ts == Node::NonReentrant) {
+ m_writer->writeStartElement(dbNamespace, "warning");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeCharacters("This " + typeString(node) + " is not ");
+ generateSimpleLink(linkReentrant, "reentrant");
+ m_writer->writeCharacters(".");
+ m_writer->writeEndElement(); // para
+ newLine();
+ m_writer->writeEndElement(); // warning
+
+ return true;
+ } else if (ts == Node::Reentrant || ts == Node::ThreadSafe) {
+ m_writer->writeStartElement(dbNamespace, "note");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "para");
+
+ if (node->isAggregate()) {
+ m_writer->writeCharacters("All functions in this " + typeString(node) + " are ");
+ if (ts == Node::ThreadSafe)
+ generateSimpleLink(linkThreadSafe, "thread-safe");
+ else
+ generateSimpleLink(linkReentrant, "reentrant");
+
+ NodeList reentrant;
+ NodeList threadsafe;
+ NodeList nonreentrant;
+ bool exceptions = hasExceptions(node, reentrant, threadsafe, nonreentrant);
+ if (!exceptions || (ts == Node::Reentrant && !threadsafe.isEmpty())) {
+ m_writer->writeCharacters(".");
+ m_writer->writeEndElement(); // para
+ newLine();
+ } else {
+ m_writer->writeCharacters(" with the following exceptions:");
+ m_writer->writeEndElement(); // para
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "para");
+
+ if (ts == Node::Reentrant) {
+ if (!nonreentrant.isEmpty()) {
+ m_writer->writeCharacters("These functions are not ");
+ generateSimpleLink(linkReentrant, "reentrant");
+ m_writer->writeCharacters(":");
+ m_writer->writeEndElement(); // para
+ newLine();
+ generateSignatureList(nonreentrant);
+ }
+ if (!threadsafe.isEmpty()) {
+ m_writer->writeCharacters("These functions are also ");
+ generateSimpleLink(linkThreadSafe, "thread-safe");
+ m_writer->writeCharacters(":");
+ m_writer->writeEndElement(); // para
+ newLine();
+ generateSignatureList(threadsafe);
+ }
+ } else { // thread-safe
+ if (!reentrant.isEmpty()) {
+ m_writer->writeCharacters("These functions are only ");
+ generateSimpleLink(linkReentrant, "reentrant");
+ m_writer->writeCharacters(":");
+ m_writer->writeEndElement(); // para
+ newLine();
+ generateSignatureList(reentrant);
+ }
+ if (!nonreentrant.isEmpty()) {
+ m_writer->writeCharacters("These functions are not ");
+ generateSimpleLink(linkReentrant, "reentrant");
+ m_writer->writeCharacters(":");
+ m_writer->writeEndElement(); // para
+ newLine();
+ generateSignatureList(nonreentrant);
+ }
+ }
+ }
+ } else {
+ m_writer->writeCharacters("This " + typeString(node) + " is ");
+ if (ts == Node::ThreadSafe)
+ generateSimpleLink(linkThreadSafe, "thread-safe");
+ else
+ generateSimpleLink(linkReentrant, "reentrant");
+ m_writer->writeCharacters(".");
+ m_writer->writeEndElement(); // para
+ newLine();
+ }
+ m_writer->writeEndElement(); // note
+ newLine();
+
+ return true;
+ }
+
+ return false;
+}
+
+/*!
+ Generate the body of the documentation from the qdoc comment
+ found with the entity represented by the \a node.
+ */
+void DocBookGenerator::generateBody(const Node *node)
+{
+ // From Generator::generateBody, without warnings.
+ const FunctionNode *fn = node->isFunction() ? static_cast<const FunctionNode *>(node) : nullptr;
+
+ if (!node->hasDoc()) {
+ /*
+ Test for special function, like a destructor or copy constructor,
+ that has no documentation.
+ */
+ if (fn) {
+ QString t;
+ if (fn->isDtor()) {
+ t = "Destroys the instance of " + fn->parent()->name() + ".";
+ if (fn->isVirtual())
+ t += " The destructor is virtual.";
+ } else if (fn->isCtor()) {
+ t = "Default constructs an instance of " + fn->parent()->name() + ".";
+ } else if (fn->isCCtor()) {
+ t = "Copy constructor.";
+ } else if (fn->isMCtor()) {
+ t = "Move-copy constructor.";
+ } else if (fn->isCAssign()) {
+ t = "Copy-assignment constructor.";
+ } else if (fn->isMAssign()) {
+ t = "Move-assignment constructor.";
+ }
+
+ if (!t.isEmpty())
+ m_writer->writeTextElement(dbNamespace, "para", t);
+ }
+ } else if (!node->isSharingComment()) {
+ // Reimplements clause and type alias info precede body text
+ if (fn && !fn->overridesThis().isEmpty())
+ generateReimplementsClause(fn);
+ else if (node->isProperty()) {
+ if (static_cast<const PropertyNode *>(node)->propertyType() != PropertyNode::PropertyType::StandardProperty)
+ generateAddendum(node, BindableProperty, nullptr, false);
+ }
+
+ // Generate the body.
+ if (!generateText(node->doc().body(), node)) {
+ if (node->isMarkedReimp())
+ return;
+ }
+
+ // Output what is after the main body.
+ if (fn) {
+ if (fn->isQmlSignal())
+ generateAddendum(node, QmlSignalHandler, nullptr, true);
+ if (fn->isPrivateSignal())
+ generateAddendum(node, PrivateSignal, nullptr, true);
+ if (fn->isInvokable())
+ generateAddendum(node, Invokable, nullptr, true);
+ if (fn->hasAssociatedProperties())
+ generateAddendum(node, AssociatedProperties, nullptr, true);
+ }
+
+ // Warning generation skipped with respect to Generator::generateBody.
+ }
+
+ generateEnumValuesForQmlProperty(node, nullptr);
+ generateRequiredLinks(node);
+}
+
+/*!
+ Generates either a link to the project folder for example \a node, or a list
+ of links files/images if 'url.examples config' variable is not defined.
+
+ Does nothing for non-example nodes.
+*/
+void DocBookGenerator::generateRequiredLinks(const Node *node)
+{
+ // From Generator::generateRequiredLinks.
+ if (!node->isExample())
+ return;
+
+ const auto en = static_cast<const ExampleNode *>(node);
+ QString exampleUrl{Config::instance().get(CONFIG_URL + Config::dot + CONFIG_EXAMPLES).asString()};
+
+ if (exampleUrl.isEmpty()) {
+ if (!en->noAutoList()) {
+ generateFileList(en, false); // files
+ generateFileList(en, true); // images
+ }
+ } else {
+ generateLinkToExample(en, exampleUrl);
+ }
+}
+
+/*!
+ The path to the example replaces a placeholder '\1' character if
+ one is found in the \a baseUrl string. If no such placeholder is found,
+ the path is appended to \a baseUrl, after a '/' character if \a baseUrl did
+ not already end in one.
+*/
+void DocBookGenerator::generateLinkToExample(const ExampleNode *en, const QString &baseUrl)
+{
+ // From Generator::generateLinkToExample.
+ QString exampleUrl(baseUrl);
+ QString link;
+#ifndef QT_BOOTSTRAPPED
+ link = QUrl(exampleUrl).host();
+#endif
+ if (!link.isEmpty())
+ link.prepend(" @ ");
+ link.prepend("Example project");
+
+ const QLatin1Char separator('/');
+ const QLatin1Char placeholder('\1');
+ if (!exampleUrl.contains(placeholder)) {
+ if (!exampleUrl.endsWith(separator))
+ exampleUrl += separator;
+ exampleUrl += placeholder;
+ }
+
+ // Construct a path to the example; <install path>/<example name>
+ QStringList path = QStringList()
+ << Config::instance().get(CONFIG_EXAMPLESINSTALLPATH).asString() << en->name();
+ path.removeAll(QString());
+
+ // Write the link to the example. Typically, this link comes after sections, hence
+ // wrap it in a section too.
+ startSection("Example project");
+
+ m_writer->writeStartElement(dbNamespace, "para");
+ generateSimpleLink(exampleUrl.replace(placeholder, path.join(separator)), link);
+ m_writer->writeEndElement(); // para
+ newLine();
+
+ endSection();
+}
+
+// TODO: [multi-purpose-function-with-flag][generate-file-list]
+
+/*!
+ This function is called when the documentation for an example is
+ being formatted. It outputs a list of files for the example, which
+ can be the example's source files or the list of images used by the
+ example. The images are copied into a subtree of
+ \c{...doc/html/images/used-in-examples/...}
+*/
+void DocBookGenerator::generateFileList(const ExampleNode *en, bool images)
+{
+ // TODO: [possibly-stale-duplicate-code][generator-insufficient-structural-abstraction]
+ // Review and compare this code with
+ // Generator::generateFileList.
+ // Some subtle changes that might be semantically equivalent are
+ // present between the two.
+ // Supposedly, this version is to be considered stale compared to
+ // Generator's one and it might be possible to remove it in favor
+ // of that as long as the difference in output are taken into consideration.
+
+ // From Generator::generateFileList
+ QString tag;
+ QStringList paths;
+ if (images) {
+ paths = en->images();
+ tag = "Images:";
+ } else { // files
+ paths = en->files();
+ tag = "Files:";
+ }
+ std::sort(paths.begin(), paths.end(), Generator::comparePaths);
+
+ if (paths.isEmpty())
+ return;
+
+ startSection("", "List of Files");
+
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeCharacters(tag);
+ m_writer->writeEndElement(); // para
+ newLine();
+
+ startSection("List of Files");
+
+ m_writer->writeStartElement(dbNamespace, "itemizedlist");
+ newLine();
+
+ for (const auto &path : std::as_const(paths)) {
+ auto maybe_resolved_file{file_resolver.resolve(path)};
+ if (!maybe_resolved_file) {
+ // TODO: [uncentralized-admonition][failed-resolve-file]
+ QString details = std::transform_reduce(
+ file_resolver.get_search_directories().cbegin(),
+ file_resolver.get_search_directories().cend(),
+ u"Searched directories:"_s,
+ std::plus(),
+ [](const DirectoryPath &directory_path) -> QString { return u' ' + directory_path.value(); }
+ );
+
+ en->location().warning(u"Cannot find file to quote from: %1"_s.arg(path), details);
+
+ continue;
+ }
+
+ auto file{*maybe_resolved_file};
+ if (images) addImageToCopy(en, file);
+ else generateExampleFilePage(en, file);
+
+ m_writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "para");
+ generateSimpleLink(file.get_query(), file.get_query());
+ m_writer->writeEndElement(); // para
+ m_writer->writeEndElement(); // listitem
+ newLine();
+ }
+
+ m_writer->writeEndElement(); // itemizedlist
+ newLine();
+
+ endSection();
+}
+
+/*!
+ Generate a file with the contents of a C++ or QML source file.
+ */
+void DocBookGenerator::generateExampleFilePage(const Node *node, ResolvedFile resolved_file, CodeMarker*)
+{
+ // TODO: [generator-insufficient-structural-abstraction]
+
+ // From HtmlGenerator::generateExampleFilePage.
+ if (!node->isExample())
+ return;
+
+ // TODO: Understand if this is safe.
+ const auto en = static_cast<const ExampleNode *>(node);
+
+ // Store current (active) writer
+ QXmlStreamWriter *currentWriter = m_writer;
+ m_writer = startDocument(en, resolved_file.get_query());
+ generateHeader(en->fullTitle(), en->subtitle(), en);
+
+ Text text;
+ Quoter quoter;
+ Doc::quoteFromFile(en->doc().location(), quoter, resolved_file);
+ QString code = quoter.quoteTo(en->location(), QString(), QString());
+ CodeMarker *codeMarker = CodeMarker::markerForFileName(resolved_file.get_path());
+ text << Atom(codeMarker->atomType(), code);
+ Atom a(codeMarker->atomType(), code);
+ generateText(text, en);
+
+ endDocument(); // Delete m_writer.
+ m_writer = currentWriter; // Restore writer.
+}
+
+void DocBookGenerator::generateReimplementsClause(const FunctionNode *fn)
+{
+ // From Generator::generateReimplementsClause, without warning generation.
+ if (fn->overridesThis().isEmpty() || !fn->parent()->isClassNode())
+ return;
+
+ auto cn = static_cast<ClassNode *>(fn->parent());
+
+ if (const FunctionNode *overrides = cn->findOverriddenFunction(fn);
+ overrides && !overrides->isPrivate() && !overrides->parent()->isPrivate()) {
+ if (overrides->hasDoc()) {
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeCharacters("Reimplements: ");
+ QString fullName =
+ overrides->parent()->name() + "::" + overrides->signature(Node::SignaturePlain);
+ generateFullName(overrides->parent(), fullName, overrides);
+ m_writer->writeCharacters(".");
+ m_writer->writeEndElement(); // para
+ newLine();
+ return;
+ }
+ }
+
+ if (const PropertyNode *sameName = cn->findOverriddenProperty(fn); sameName && sameName->hasDoc()) {
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeCharacters("Reimplements an access function for property: ");
+ QString fullName = sameName->parent()->name() + "::" + sameName->name();
+ generateFullName(sameName->parent(), fullName, sameName);
+ m_writer->writeCharacters(".");
+ m_writer->writeEndElement(); // para
+ newLine();
+ return;
+ }
+}
+
+void DocBookGenerator::generateAlsoList(const Node *node)
+{
+ // From Generator::generateAlsoList.
+ QList<Text> alsoList = node->doc().alsoList();
+ supplementAlsoList(node, alsoList);
+
+ if (!alsoList.isEmpty()) {
+ startSection("See Also");
+
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeStartElement(dbNamespace, "emphasis");
+ m_writer->writeCharacters("See also ");
+ m_writer->writeEndElement(); // emphasis
+ newLine();
+
+ m_writer->writeStartElement(dbNamespace, "simplelist");
+ m_writer->writeAttribute("type", "vert");
+ m_writer->writeAttribute("role", "see-also");
+ newLine();
+
+ for (const Text &text : alsoList) {
+ m_writer->writeStartElement(dbNamespace, "member");
+ generateText(text, node);
+ m_writer->writeEndElement(); // member
+ newLine();
+ }
+
+ m_writer->writeEndElement(); // simplelist
+ newLine();
+
+ m_writer->writeEndElement(); // para
+ newLine();
+
+ endSection();
+ }
+}
+
+/*!
+ Open a new file to write XML contents, including the DocBook
+ opening tag.
+ */
+QXmlStreamWriter *DocBookGenerator::startGenericDocument(const Node *node, const QString &fileName)
+{
+ QFile *outFile = openSubPageFile(node, fileName);
+ m_writer = new QXmlStreamWriter(outFile);
+ m_writer->setAutoFormatting(false); // We need a precise handling of line feeds.
+
+ m_writer->writeStartDocument();
+ newLine();
+ m_writer->writeNamespace(dbNamespace, "db");
+ m_writer->writeNamespace(xlinkNamespace, "xlink");
+ if (m_useITS)
+ m_writer->writeNamespace(itsNamespace, "its");
+ m_writer->writeStartElement(dbNamespace, "article");
+ m_writer->writeAttribute("version", "5.2");
+ if (!m_naturalLanguage.isEmpty())
+ m_writer->writeAttribute("xml:lang", m_naturalLanguage);
+ newLine();
+
+ // Reset the state for the new document.
+ sectionLevels.resize(0);
+ m_inPara = false;
+ m_inList = 0;
+
+ return m_writer;
+}
+
+QXmlStreamWriter *DocBookGenerator::startDocument(const Node *node)
+{
+ m_hasSection = false;
+ refMap.clear();
+
+ QString fileName = Generator::fileName(node, fileExtension());
+ return startGenericDocument(node, fileName);
+}
+
+QXmlStreamWriter *DocBookGenerator::startDocument(const ExampleNode *en, const QString &file)
+{
+ m_hasSection = false;
+
+ QString fileName = linkForExampleFile(file);
+ return startGenericDocument(en, fileName);
+}
+
+void DocBookGenerator::endDocument()
+{
+ m_writer->writeEndElement(); // article
+ m_writer->writeEndDocument();
+
+ m_writer->device()->close();
+ delete m_writer->device();
+ delete m_writer;
+ m_writer = nullptr;
+}
+
+/*!
+ Generate a reference page for the C++ class, namespace, or
+ header file documented in \a node.
+ */
+void DocBookGenerator::generateCppReferencePage(Node *node)
+{
+ // Based on HtmlGenerator::generateCppReferencePage.
+ Q_ASSERT(node->isAggregate());
+ const auto aggregate = static_cast<const Aggregate *>(node);
+
+ QString title;
+ QString rawTitle;
+ QString fullTitle;
+ if (aggregate->isNamespace()) {
+ rawTitle = aggregate->plainName();
+ fullTitle = aggregate->plainFullName();
+ title = rawTitle + " Namespace";
+ } else if (aggregate->isClass()) {
+ rawTitle = aggregate->plainName();
+
+ auto templateDecl = node->templateDecl();
+ if (templateDecl)
+ fullTitle = QString("%1 %2 ").arg((*templateDecl).to_qstring(), aggregate->typeWord(false));
+
+ fullTitle += aggregate->plainFullName();
+ title = rawTitle + QLatin1Char(' ') + aggregate->typeWord(true);
+ } else if (aggregate->isHeader()) {
+ title = fullTitle = rawTitle = aggregate->fullTitle();
+ }
+
+ QString subtitleText;
+ if (rawTitle != fullTitle)
+ subtitleText = fullTitle;
+
+ // Start producing the DocBook file.
+ m_writer = startDocument(node);
+
+ // Info container.
+ generateHeader(title, subtitleText, aggregate);
+
+ generateRequisites(aggregate);
+ generateStatus(aggregate);
+
+ // Element synopsis.
+ generateDocBookSynopsis(node);
+
+ // Actual content.
+ if (!aggregate->doc().isEmpty()) {
+ startSection("details", "Detailed Description");
+
+ generateBody(aggregate);
+ generateAlsoList(aggregate);
+
+ endSection();
+ }
+
+ Sections sections(const_cast<Aggregate *>(aggregate));
+ SectionVector sectionVector =
+ (aggregate->isNamespace() || aggregate->isHeader()) ?
+ sections.stdDetailsSections() :
+ sections.stdCppClassDetailsSections();
+ for (const Section &section : sectionVector) {
+ if (section.members().isEmpty())
+ continue;
+
+ startSection(section.title().toLower(), section.title());
+
+ for (const Node *member : section.members()) {
+ if (member->access() == Access::Private) // ### check necessary?
+ continue;
+
+ if (member->nodeType() != Node::Class) {
+ // This function starts its own section.
+ generateDetailedMember(member, aggregate);
+ } else {
+ startSectionBegin();
+ m_writer->writeCharacters("class ");
+ generateFullName(member, aggregate);
+ startSectionEnd();
+
+ generateBrief(member);
+
+ endSection();
+ }
+ }
+
+ endSection();
+ }
+
+ generateObsoleteMembers(sections);
+
+ endDocument();
+}
+
+void DocBookGenerator::generateSynopsisInfo(const QString &key, const QString &value)
+{
+ m_writer->writeStartElement(dbNamespace, "synopsisinfo");
+ m_writer->writeAttribute("role", key);
+ m_writer->writeCharacters(value);
+ m_writer->writeEndElement(); // synopsisinfo
+ newLine();
+}
+
+void DocBookGenerator::generateModifier(const QString &value)
+{
+ m_writer->writeTextElement(dbNamespace, "modifier", value);
+ newLine();
+}
+
+/*!
+ Generate the metadata for the given \a node in DocBook.
+ */
+void DocBookGenerator::generateDocBookSynopsis(const Node *node)
+{
+ if (!node)
+ return;
+
+ // From Generator::generateStatus, HtmlGenerator::generateRequisites,
+ // Generator::generateThreadSafeness, QDocIndexFiles::generateIndexSection.
+
+ // This function is the major place where DocBook extensions are used.
+ if (!m_useDocBook52)
+ return;
+
+ // Nothing to export in some cases. Note that isSharedCommentNode() returns
+ // true also for QML property groups.
+ if (node->isGroup() || node->isSharedCommentNode() || node->isModule() || node->isQmlModule() || node->isPageNode())
+ return;
+
+ // Cast the node to several subtypes (null pointer if the node is not of the required type).
+ const Aggregate *aggregate =
+ node->isAggregate() ? static_cast<const Aggregate *>(node) : nullptr;
+ const ClassNode *classNode = node->isClass() ? static_cast<const ClassNode *>(node) : nullptr;
+ const FunctionNode *functionNode =
+ node->isFunction() ? static_cast<const FunctionNode *>(node) : nullptr;
+ const PropertyNode *propertyNode =
+ node->isProperty() ? static_cast<const PropertyNode *>(node) : nullptr;
+ const VariableNode *variableNode =
+ node->isVariable() ? static_cast<const VariableNode *>(node) : nullptr;
+ const EnumNode *enumNode = node->isEnumType() ? static_cast<const EnumNode *>(node) : nullptr;
+ const QmlPropertyNode *qpn =
+ node->isQmlProperty() ? static_cast<const QmlPropertyNode *>(node) : nullptr;
+ const QmlTypeNode *qcn = node->isQmlType() ? static_cast<const QmlTypeNode *>(node) : nullptr;
+ // Typedefs are ignored, as they correspond to enums.
+ // Groups and modules are ignored.
+ // Documents are ignored, they have no interesting metadata.
+
+ // Start the synopsis tag.
+ QString synopsisTag = nodeToSynopsisTag(node);
+ m_writer->writeStartElement(dbNamespace, synopsisTag);
+ newLine();
+
+ // Name and basic properties of each tag (like types and parameters).
+ if (node->isClass()) {
+ m_writer->writeStartElement(dbNamespace, "ooclass");
+ m_writer->writeTextElement(dbNamespace, "classname", node->plainName());
+ m_writer->writeEndElement(); // ooclass
+ newLine();
+ } else if (node->isNamespace()) {
+ m_writer->writeTextElement(dbNamespace, "namespacename", node->plainName());
+ newLine();
+ } else if (node->isQmlType()) {
+ m_writer->writeStartElement(dbNamespace, "ooclass");
+ m_writer->writeTextElement(dbNamespace, "classname", node->plainName());
+ m_writer->writeEndElement(); // ooclass
+ newLine();
+ if (!qcn->groupNames().isEmpty())
+ m_writer->writeAttribute("groups", qcn->groupNames().join(QLatin1Char(',')));
+ } else if (node->isProperty()) {
+ m_writer->writeTextElement(dbNamespace, "modifier", "(Qt property)");
+ newLine();
+ m_writer->writeTextElement(dbNamespace, "type", propertyNode->dataType());
+ newLine();
+ m_writer->writeTextElement(dbNamespace, "varname", node->plainName());
+ newLine();
+ } else if (node->isVariable()) {
+ if (variableNode->isStatic()) {
+ m_writer->writeTextElement(dbNamespace, "modifier", "static");
+ newLine();
+ }
+ m_writer->writeTextElement(dbNamespace, "type", variableNode->dataType());
+ newLine();
+ m_writer->writeTextElement(dbNamespace, "varname", node->plainName());
+ newLine();
+ } else if (node->isEnumType()) {
+ m_writer->writeTextElement(dbNamespace, "enumname", node->plainName());
+ newLine();
+ } else if (node->isQmlProperty()) {
+ QString name = node->name();
+ if (qpn->isAttached())
+ name.prepend(qpn->element() + QLatin1Char('.'));
+
+ m_writer->writeTextElement(dbNamespace, "type", qpn->dataType());
+ newLine();
+ m_writer->writeTextElement(dbNamespace, "varname", name);
+ newLine();
+
+ if (qpn->isAttached()) {
+ m_writer->writeTextElement(dbNamespace, "modifier", "attached");
+ newLine();
+ }
+ if (!(const_cast<QmlPropertyNode *>(qpn))->isReadOnly()) {
+ m_writer->writeTextElement(dbNamespace, "modifier", "writable");
+ newLine();
+ }
+ if ((const_cast<QmlPropertyNode *>(qpn))->isRequired()) {
+ m_writer->writeTextElement(dbNamespace, "modifier", "required");
+ newLine();
+ }
+ if (qpn->isReadOnly()) {
+ generateModifier("[read-only]");
+ newLine();
+ }
+ if (qpn->isDefault()) {
+ generateModifier("[default]");
+ newLine();
+ }
+ } else if (node->isFunction()) {
+ if (functionNode->virtualness() != "non")
+ generateModifier("virtual");
+ if (functionNode->isConst())
+ generateModifier("const");
+ if (functionNode->isStatic())
+ generateModifier("static");
+
+ if (!functionNode->isMacro() && !functionNode->isCtor() &&
+ !functionNode->isCCtor() && !functionNode->isMCtor()
+ && !functionNode->isDtor()) {
+ if (functionNode->returnType() == "void")
+ m_writer->writeEmptyElement(dbNamespace, "void");
+ else
+ m_writer->writeTextElement(dbNamespace, "type", functionNode->returnType());
+ newLine();
+ }
+ // Remove two characters from the plain name to only get the name
+ // of the method without parentheses (only for functions, not macros).
+ QString name = node->plainName();
+ if (name.endsWith("()"))
+ name.chop(2);
+ m_writer->writeTextElement(dbNamespace, "methodname", name);
+ newLine();
+
+ if (functionNode->parameters().isEmpty()) {
+ m_writer->writeEmptyElement(dbNamespace, "void");
+ newLine();
+ }
+
+ const Parameters &lp = functionNode->parameters();
+ for (int i = 0; i < lp.count(); ++i) {
+ const Parameter &parameter = lp.at(i);
+ m_writer->writeStartElement(dbNamespace, "methodparam");
+ newLine();
+ m_writer->writeTextElement(dbNamespace, "type", parameter.type());
+ newLine();
+ m_writer->writeTextElement(dbNamespace, "parameter", parameter.name());
+ newLine();
+ if (!parameter.defaultValue().isEmpty()) {
+ m_writer->writeTextElement(dbNamespace, "initializer", parameter.defaultValue());
+ newLine();
+ }
+ m_writer->writeEndElement(); // methodparam
+ newLine();
+ }
+
+ if (functionNode->isDefault())
+ generateModifier("default");
+ if (functionNode->isFinal())
+ generateModifier("final");
+ if (functionNode->isOverride())
+ generateModifier("override");
+ } else if (node->isTypedef()) {
+ m_writer->writeTextElement(dbNamespace, "typedefname", node->plainName());
+ newLine();
+ } else {
+ node->doc().location().warning(
+ QStringLiteral("Unexpected node type in generateDocBookSynopsis: %1")
+ .arg(node->nodeTypeString()));
+ newLine();
+ }
+
+ // Enums and typedefs.
+ if (enumNode) {
+ for (const EnumItem &item : enumNode->items()) {
+ m_writer->writeStartElement(dbNamespace, "enumitem");
+ newLine();
+ m_writer->writeTextElement(dbNamespace, "enumidentifier", item.name());
+ newLine();
+ m_writer->writeTextElement(dbNamespace, "enumvalue", item.value());
+ newLine();
+ m_writer->writeEndElement(); // enumitem
+ newLine();
+ }
+
+ if (enumNode->items().isEmpty()) {
+ // If the enumeration is empty (really rare case), still produce
+ // something for the DocBook document to be valid.
+ m_writer->writeStartElement(dbNamespace, "enumitem");
+ newLine();
+ m_writer->writeEmptyElement(dbNamespace, "enumidentifier");
+ newLine();
+ m_writer->writeEndElement(); // enumitem
+ newLine();
+ }
+ }
+
+ // Below: only synopsisinfo within synopsisTag. These elements must be at
+ // the end of the tag, as per DocBook grammar.
+
+ // Information for functions that could not be output previously
+ // (synopsisinfo).
+ if (node->isFunction()) {
+ generateSynopsisInfo("meta", functionNode->metanessString());
+
+ if (functionNode->isOverload()) {
+ generateSynopsisInfo("overload", "overload");
+ generateSynopsisInfo("overload-number",
+ QString::number(functionNode->overloadNumber()));
+ }
+
+ if (functionNode->isRef())
+ generateSynopsisInfo("refness", QString::number(1));
+ else if (functionNode->isRefRef())
+ generateSynopsisInfo("refness", QString::number(2));
+
+ if (functionNode->hasAssociatedProperties()) {
+ QStringList associatedProperties;
+ const auto &nodes = functionNode->associatedProperties();
+ for (const Node *n : nodes) {
+ const auto pn = static_cast<const PropertyNode *>(n);
+ associatedProperties << pn->name();
+ }
+ associatedProperties.sort();
+ generateSynopsisInfo("associated-property",
+ associatedProperties.join(QLatin1Char(',')));
+ }
+
+ QString signature = functionNode->signature(Node::SignatureReturnType);
+ // 'const' is already part of FunctionNode::signature()
+ if (functionNode->isFinal())
+ signature += " final";
+ if (functionNode->isOverride())
+ signature += " override";
+ if (functionNode->isPureVirtual())
+ signature += " = 0";
+ else if (functionNode->isDefault())
+ signature += " = default";
+ generateSynopsisInfo("signature", signature);
+ }
+
+ // Accessibility status.
+ if (!node->isPageNode() && !node->isCollectionNode()) {
+ switch (node->access()) {
+ case Access::Public:
+ generateSynopsisInfo("access", "public");
+ break;
+ case Access::Protected:
+ generateSynopsisInfo("access", "protected");
+ break;
+ case Access::Private:
+ generateSynopsisInfo("access", "private");
+ break;
+ default:
+ break;
+ }
+ if (node->isAbstract())
+ generateSynopsisInfo("abstract", "true");
+ }
+
+ // Status.
+ switch (node->status()) {
+ case Node::Active:
+ generateSynopsisInfo("status", "active");
+ break;
+ case Node::Preliminary:
+ generateSynopsisInfo("status", "preliminary");
+ break;
+ case Node::Deprecated:
+ generateSynopsisInfo("status", "deprecated");
+ break;
+ case Node::Internal:
+ generateSynopsisInfo("status", "internal");
+ break;
+ default:
+ generateSynopsisInfo("status", "main");
+ break;
+ }
+
+ // C++ classes and name spaces.
+ if (aggregate) {
+ // Includes.
+ if (aggregate->includeFile()) generateSynopsisInfo("headers", *aggregate->includeFile());
+
+ // Since and project.
+ if (!aggregate->since().isEmpty())
+ generateSynopsisInfo("since", formatSince(aggregate));
+
+ if (aggregate->nodeType() == Node::Class || aggregate->nodeType() == Node::Namespace) {
+ // CMake and QT variable.
+ if (!aggregate->physicalModuleName().isEmpty()) {
+ const CollectionNode *cn =
+ m_qdb->getCollectionNode(aggregate->physicalModuleName(), Node::Module);
+ if (cn && !cn->qtCMakeComponent().isEmpty()) {
+ const QString qtComponent = "Qt" + QString::number(QT_VERSION_MAJOR);
+ const QString findpackageText = "find_package(" + qtComponent
+ + " REQUIRED COMPONENTS " + cn->qtCMakeComponent() + ")";
+ const QString targetLinkLibrariesText =
+ "target_link_libraries(mytarget PRIVATE " + qtComponent + "::" + cn->qtCMakeComponent()
+ + ")";
+ generateSynopsisInfo("cmake-find-package", findpackageText);
+ generateSynopsisInfo("cmake-target-link-libraries", targetLinkLibrariesText);
+ }
+ if (cn && !cn->qtVariable().isEmpty())
+ generateSynopsisInfo("qmake", "QT += " + cn->qtVariable());
+ }
+ }
+
+ if (aggregate->nodeType() == Node::Class) {
+ // Instantiated by.
+ 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);
+
+ m_writer->writeStartElement(dbNamespace, "synopsisinfo");
+ m_writer->writeAttribute("role", "instantiatedBy");
+ generateSimpleLink(link, classe->qmlElement()->name());
+ m_writer->writeEndElement(); // synopsisinfo
+ newLine();
+ }
+
+ // Inherits.
+ QList<RelatedClass>::ConstIterator r;
+ if (!classe->baseClasses().isEmpty()) {
+ m_writer->writeStartElement(dbNamespace, "synopsisinfo");
+ m_writer->writeAttribute("role", "inherits");
+
+ r = classe->baseClasses().constBegin();
+ int index = 0;
+ while (r != classe->baseClasses().constEnd()) {
+ if ((*r).m_node) {
+ generateFullName((*r).m_node, classe);
+
+ if ((*r).m_access == Access::Protected) {
+ m_writer->writeCharacters(" (protected)");
+ } else if ((*r).m_access == Access::Private) {
+ m_writer->writeCharacters(" (private)");
+ }
+ m_writer->writeCharacters(
+ Utilities::comma(index++, classe->baseClasses().size()));
+ }
+ ++r;
+ }
+
+ m_writer->writeEndElement(); // synopsisinfo
+ newLine();
+ }
+
+ // Inherited by.
+ if (!classe->derivedClasses().isEmpty()) {
+ m_writer->writeStartElement(dbNamespace, "synopsisinfo");
+ m_writer->writeAttribute("role", "inheritedBy");
+ generateSortedNames(classe, classe->derivedClasses());
+ m_writer->writeEndElement(); // synopsisinfo
+ newLine();
+ }
+ }
+ }
+
+ // QML types.
+ if (qcn) {
+ // Module name and version (i.e. import).
+ QString logicalModuleVersion;
+ const CollectionNode *collection =
+ m_qdb->getCollectionNode(qcn->logicalModuleName(), qcn->nodeType());
+ if (collection)
+ logicalModuleVersion = collection->logicalModuleVersion();
+ else
+ logicalModuleVersion = qcn->logicalModuleVersion();
+
+ QStringList importText;
+ importText << "import " + qcn->logicalModuleName();
+ if (!logicalModuleVersion.isEmpty())
+ importText << logicalModuleVersion;
+ generateSynopsisInfo("import", importText.join(' '));
+
+ // Since and project.
+ if (!qcn->since().isEmpty())
+ generateSynopsisInfo("since", formatSince(qcn));
+
+ // Inherited by.
+ NodeList subs;
+ QmlTypeNode::subclasses(qcn, subs);
+ if (!subs.isEmpty()) {
+ m_writer->writeTextElement(dbNamespace, "synopsisinfo");
+ m_writer->writeAttribute("role", "inheritedBy");
+ generateSortedQmlNames(qcn, subs);
+ m_writer->writeEndElement(); // synopsisinfo
+ newLine();
+ }
+
+ // Inherits.
+ QmlTypeNode *base = qcn->qmlBaseNode();
+ while (base && base->isInternal())
+ base = base->qmlBaseNode();
+ if (base) {
+ const Node *otherNode = nullptr;
+ Atom a = Atom(Atom::LinkNode, CodeMarker::stringForNode(base));
+ QString link = getAutoLink(&a, base, &otherNode);
+
+ m_writer->writeTextElement(dbNamespace, "synopsisinfo");
+ m_writer->writeAttribute("role", "inherits");
+ generateSimpleLink(link, base->name());
+ m_writer->writeEndElement(); // synopsisinfo
+ newLine();
+ }
+
+ // Instantiates.
+ ClassNode *cn = (const_cast<QmlTypeNode *>(qcn))->classNode();
+ if (cn && (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");
+ generateSimpleLink(link, cn->name());
+ m_writer->writeEndElement(); // synopsisinfo
+ newLine();
+ }
+ }
+
+ // Thread safeness.
+ switch (node->threadSafeness()) {
+ case Node::UnspecifiedSafeness:
+ generateSynopsisInfo("threadsafeness", "unspecified");
+ break;
+ case Node::NonReentrant:
+ generateSynopsisInfo("threadsafeness", "non-reentrant");
+ break;
+ case Node::Reentrant:
+ generateSynopsisInfo("threadsafeness", "reentrant");
+ break;
+ case Node::ThreadSafe:
+ generateSynopsisInfo("threadsafeness", "thread safe");
+ break;
+ default:
+ generateSynopsisInfo("threadsafeness", "unspecified");
+ break;
+ }
+
+ // Module.
+ if (!node->physicalModuleName().isEmpty())
+ generateSynopsisInfo("module", node->physicalModuleName());
+
+ // Group.
+ if (classNode && !classNode->groupNames().isEmpty()) {
+ generateSynopsisInfo("groups", classNode->groupNames().join(QLatin1Char(',')));
+ } else if (qcn && !qcn->groupNames().isEmpty()) {
+ generateSynopsisInfo("groups", qcn->groupNames().join(QLatin1Char(',')));
+ }
+
+ // Properties.
+ if (propertyNode) {
+ for (const Node *fnNode : propertyNode->getters()) {
+ if (fnNode) {
+ const auto funcNode = static_cast<const FunctionNode *>(fnNode);
+ generateSynopsisInfo("getter", funcNode->name());
+ }
+ }
+ for (const Node *fnNode : propertyNode->setters()) {
+ if (fnNode) {
+ const auto funcNode = static_cast<const FunctionNode *>(fnNode);
+ generateSynopsisInfo("setter", funcNode->name());
+ }
+ }
+ for (const Node *fnNode : propertyNode->resetters()) {
+ if (fnNode) {
+ const auto funcNode = static_cast<const FunctionNode *>(fnNode);
+ generateSynopsisInfo("resetter", funcNode->name());
+ }
+ }
+ for (const Node *fnNode : propertyNode->notifiers()) {
+ if (fnNode) {
+ const auto funcNode = static_cast<const FunctionNode *>(fnNode);
+ generateSynopsisInfo("notifier", funcNode->name());
+ }
+ }
+ }
+
+ m_writer->writeEndElement(); // nodeToSynopsisTag (like classsynopsis)
+ newLine();
+
+ // The typedef associated to this enum. It is output *after* the main tag,
+ // i.e. it must be after the synopsisinfo.
+ if (enumNode && enumNode->flagsType()) {
+ m_writer->writeStartElement(dbNamespace, "typedefsynopsis");
+ newLine();
+
+ m_writer->writeTextElement(dbNamespace, "typedefname",
+ enumNode->flagsType()->fullDocumentName());
+ newLine();
+
+ m_writer->writeEndElement(); // typedefsynopsis
+ newLine();
+ }
+}
+
+QString taggedNode(const Node *node)
+{
+ // From CodeMarker::taggedNode, but without the tag part (i.e. only the QML specific case
+ // remaining).
+ // TODO: find a better name for this.
+ if (node->nodeType() == Node::QmlType && node->name().startsWith(QLatin1String("QML:")))
+ return node->name().mid(4);
+ return node->name();
+}
+
+/*!
+ Parses a string with method/variable name and (return) type
+ to include type tags.
+ */
+void DocBookGenerator::typified(const QString &string, const Node *relative, bool trailingSpace,
+ bool generateType)
+{
+ // Adapted from CodeMarker::typified and HtmlGenerator::highlightedCode.
+ // Note: CppCodeMarker::markedUpIncludes is not needed for DocBook, as this part is natively
+ // generated as DocBook. Hence, there is no need to reimplement <@headerfile> from
+ // HtmlGenerator::highlightedCode.
+ QString result;
+ QString pendingWord;
+
+ for (int i = 0; i <= string.size(); ++i) {
+ QChar ch;
+ if (i != string.size())
+ ch = string.at(i);
+
+ QChar lower = ch.toLower();
+ if ((lower >= QLatin1Char('a') && lower <= QLatin1Char('z')) || ch.digitValue() >= 0
+ || ch == QLatin1Char('_') || ch == QLatin1Char(':')) {
+ pendingWord += ch;
+ } else {
+ if (!pendingWord.isEmpty()) {
+ bool isProbablyType = (pendingWord != QLatin1String("const"));
+ if (generateType && isProbablyType) {
+ // Flush the current buffer.
+ m_writer->writeCharacters(result);
+ result.truncate(0);
+
+ // Add the link, logic from HtmlGenerator::highlightedCode.
+ const Node *n = m_qdb->findTypeNode(pendingWord, relative, Node::DontCare);
+ QString href;
+ if (!(n && n->isQmlBasicType())
+ || (relative
+ && (relative->genus() == n->genus() || Node::DontCare == n->genus()))) {
+ href = linkForNode(n, relative);
+ }
+
+ m_writer->writeStartElement(dbNamespace, "type");
+ if (href.isEmpty())
+ m_writer->writeCharacters(pendingWord);
+ else
+ generateSimpleLink(href, pendingWord);
+ m_writer->writeEndElement(); // type
+ } else {
+ result += pendingWord;
+ }
+ }
+ pendingWord.clear();
+
+ if (ch.unicode() != '\0')
+ result += ch;
+ }
+ }
+
+ if (trailingSpace && string.size()) {
+ if (!string.endsWith(QLatin1Char('*')) && !string.endsWith(QLatin1Char('&')))
+ result += QLatin1Char(' ');
+ }
+
+ m_writer->writeCharacters(result);
+}
+
+void DocBookGenerator::generateSynopsisName(const Node *node, const Node *relative,
+ bool generateNameLink)
+{
+ // Implements the rewriting of <@link> from HtmlGenerator::highlightedCode, only due to calls to
+ // CodeMarker::linkTag in CppCodeMarker::markedUpSynopsis.
+ QString name = taggedNode(node);
+
+ if (!generateNameLink) {
+ m_writer->writeCharacters(name);
+ return;
+ }
+
+ m_writer->writeStartElement(dbNamespace, "emphasis");
+ m_writer->writeAttribute("role", "bold");
+ generateSimpleLink(linkForNode(node, relative), name);
+ m_writer->writeEndElement(); // emphasis
+}
+
+void DocBookGenerator::generateParameter(const Parameter &parameter, const Node *relative,
+ bool generateExtra, bool generateType)
+{
+ const QString &pname = parameter.name();
+ const QString &ptype = parameter.type();
+ QString paramName;
+ if (!pname.isEmpty()) {
+ typified(ptype, relative, true, generateType);
+ paramName = pname;
+ } else {
+ paramName = ptype;
+ }
+
+ if (generateExtra || pname.isEmpty()) {
+ m_writer->writeStartElement(dbNamespace, "emphasis");
+ m_writer->writeCharacters(paramName);
+ m_writer->writeEndElement(); // emphasis
+ }
+
+ const QString &pvalue = parameter.defaultValue();
+ if (generateExtra && !pvalue.isEmpty())
+ m_writer->writeCharacters(" = " + pvalue);
+}
+
+void DocBookGenerator::generateSynopsis(const Node *node, const Node *relative,
+ Section::Style style)
+{
+ // From HtmlGenerator::generateSynopsis (conditions written as booleans).
+ const bool generateExtra = style != Section::AllMembers;
+ const bool generateType = style != Section::Details;
+ const bool generateNameLink = style != Section::Details;
+
+ // From CppCodeMarker::markedUpSynopsis, reversed the generation of "extra" and "synopsis".
+ const int MaxEnumValues = 6;
+
+ if (generateExtra) {
+ if (auto extra = CodeMarker::extraSynopsis(node, style); !extra.isEmpty())
+ m_writer->writeCharacters(extra + " ");
+ }
+
+ // Then generate the synopsis.
+ QString namePrefix {};
+ if (style == Section::Details) {
+ if (!node->isRelatedNonmember() && !node->isProxyNode() && !node->parent()->name().isEmpty()
+ && !node->parent()->isHeader() && !node->isProperty() && !node->isQmlNode()) {
+ namePrefix = taggedNode(node->parent()) + "::";
+ }
+ }
+
+ switch (node->nodeType()) {
+ case Node::Namespace:
+ m_writer->writeCharacters("namespace ");
+ m_writer->writeCharacters(namePrefix);
+ generateSynopsisName(node, relative, generateNameLink);
+ break;
+ case Node::Class:
+ m_writer->writeCharacters("class ");
+ m_writer->writeCharacters(namePrefix);
+ generateSynopsisName(node, relative, generateNameLink);
+ break;
+ case Node::Function: {
+ const auto func = (const FunctionNode *)node;
+
+ // First, the part coming before the name.
+ if (style == Section::Summary || style == Section::Accessors) {
+ if (!func->isNonvirtual())
+ m_writer->writeCharacters(QStringLiteral("virtual "));
+ }
+
+ // Name and parameters.
+ if (style != Section::AllMembers && !func->returnType().isEmpty())
+ typified(func->returnType(), relative, true, generateType);
+ m_writer->writeCharacters(namePrefix);
+ generateSynopsisName(node, relative, generateNameLink);
+
+ if (!func->isMacroWithoutParams()) {
+ m_writer->writeCharacters(QStringLiteral("("));
+ if (!func->parameters().isEmpty()) {
+ const Parameters &parameters = func->parameters();
+ for (int i = 0; i < parameters.count(); i++) {
+ if (i > 0)
+ m_writer->writeCharacters(QStringLiteral(", "));
+ generateParameter(parameters.at(i), relative, generateExtra, generateType);
+ }
+ }
+ m_writer->writeCharacters(QStringLiteral(")"));
+ }
+
+ if (func->isConst())
+ m_writer->writeCharacters(QStringLiteral(" const"));
+
+ if (style == Section::Summary || style == Section::Accessors) {
+ // virtual is prepended, if needed.
+ QString synopsis;
+ if (func->isFinal())
+ synopsis += QStringLiteral(" final");
+ if (func->isOverride())
+ synopsis += QStringLiteral(" override");
+ if (func->isPureVirtual())
+ synopsis += QStringLiteral(" = 0");
+ if (func->isRef())
+ synopsis += QStringLiteral(" &");
+ else if (func->isRefRef())
+ synopsis += QStringLiteral(" &&");
+ m_writer->writeCharacters(synopsis);
+ } else if (style == Section::AllMembers) {
+ if (!func->returnType().isEmpty() && func->returnType() != "void") {
+ m_writer->writeCharacters(QStringLiteral(" : "));
+ typified(func->returnType(), relative, false, generateType);
+ }
+ } else {
+ QString synopsis;
+ if (func->isRef())
+ synopsis += QStringLiteral(" &");
+ else if (func->isRefRef())
+ synopsis += QStringLiteral(" &&");
+ m_writer->writeCharacters(synopsis);
+ }
+ } break;
+ case Node::Enum: {
+ const auto enume = static_cast<const EnumNode *>(node);
+ m_writer->writeCharacters(QStringLiteral("enum "));
+ m_writer->writeCharacters(namePrefix);
+ generateSynopsisName(node, relative, generateNameLink);
+
+ QString synopsis;
+ if (style == Section::Summary) {
+ synopsis += " { ";
+
+ QStringList documentedItems = enume->doc().enumItemNames();
+ if (documentedItems.isEmpty()) {
+ const auto &enumItems = enume->items();
+ for (const auto &item : enumItems)
+ documentedItems << item.name();
+ }
+ const QStringList omitItems = enume->doc().omitEnumItemNames();
+ for (const auto &item : omitItems)
+ documentedItems.removeAll(item);
+
+ if (documentedItems.size() > MaxEnumValues) {
+ // Take the last element and keep it safe, then elide the surplus.
+ const QString last = documentedItems.last();
+ documentedItems = documentedItems.mid(0, MaxEnumValues - 1);
+ documentedItems += "&#x2026;"; // Ellipsis: in HTML, &hellip;.
+ documentedItems += last;
+ }
+ synopsis += documentedItems.join(QLatin1String(", "));
+
+ if (!documentedItems.isEmpty())
+ synopsis += QLatin1Char(' ');
+ synopsis += QLatin1Char('}');
+ }
+ m_writer->writeCharacters(synopsis);
+ } break;
+ case Node::TypeAlias: {
+ if (style == Section::Details) {
+ auto templateDecl = node->templateDecl();
+ if (templateDecl)
+ m_writer->writeCharacters((*templateDecl).to_qstring() + QLatin1Char(' '));
+ }
+ m_writer->writeCharacters(namePrefix);
+ generateSynopsisName(node, relative, generateNameLink);
+ } break;
+ case Node::Typedef: {
+ if (static_cast<const TypedefNode *>(node)->associatedEnum())
+ m_writer->writeCharacters("flags ");
+ m_writer->writeCharacters(namePrefix);
+ generateSynopsisName(node, relative, generateNameLink);
+ } break;
+ case Node::Property: {
+ const auto property = static_cast<const PropertyNode *>(node);
+ m_writer->writeCharacters(namePrefix);
+ generateSynopsisName(node, relative, generateNameLink);
+ m_writer->writeCharacters(" : ");
+ typified(property->qualifiedDataType(), relative, false, generateType);
+ } break;
+ case Node::Variable: {
+ const auto variable = static_cast<const VariableNode *>(node);
+ if (style == Section::AllMembers) {
+ generateSynopsisName(node, relative, generateNameLink);
+ m_writer->writeCharacters(" : ");
+ typified(variable->dataType(), relative, false, generateType);
+ } else {
+ typified(variable->leftType(), relative, false, generateType);
+ m_writer->writeCharacters(" ");
+ m_writer->writeCharacters(namePrefix);
+ generateSynopsisName(node, relative, generateNameLink);
+ m_writer->writeCharacters(variable->rightType());
+ }
+ } break;
+ default:
+ m_writer->writeCharacters(namePrefix);
+ generateSynopsisName(node, relative, generateNameLink);
+ }
+}
+
+void DocBookGenerator::generateEnumValue(const QString &enumValue, const Node *relative)
+{
+ // From CppCodeMarker::markedUpEnumValue, simplifications from Generator::plainCode (removing
+ // <@op>). With respect to CppCodeMarker::markedUpEnumValue, the order of generation of parents
+ // must be reversed so that they are processed in the order
+ const auto *node = relative->parent();
+
+ if (relative->isQmlProperty()) {
+ const auto *qpn = static_cast<const QmlPropertyNode*>(relative);
+ if (qpn->enumNode() && !enumValue.startsWith("%1."_L1.arg(qpn->enumPrefix()))) {
+ m_writer->writeCharacters("%1.%2"_L1.arg(qpn->enumPrefix(), enumValue));
+ return;
+ }
+ }
+
+ if (!relative->isEnumType()) {
+ m_writer->writeCharacters(enumValue);
+ return;
+ }
+
+ QList<const Node *> parents;
+ while (!node->isHeader() && node->parent()) {
+ parents.prepend(node);
+ if (node->parent() == relative || node->parent()->name().isEmpty())
+ break;
+ node = node->parent();
+ }
+ if (static_cast<const EnumNode *>(relative)->isScoped())
+ parents << relative;
+
+ m_writer->writeStartElement(dbNamespace, "code");
+ for (auto parent : parents) {
+ generateSynopsisName(parent, relative, true);
+ m_writer->writeCharacters("::");
+ }
+
+ m_writer->writeCharacters(enumValue);
+ m_writer->writeEndElement(); // code
+}
+
+/*!
+ If the node is an overloaded signal, and a node with an
+ example on how to connect to it
+
+ Someone didn't finish writing this comment, and I don't know what this
+ function is supposed to do, so I have not tried to complete the comment
+ yet.
+ */
+void DocBookGenerator::generateOverloadedSignal(const Node *node)
+{
+ // From Generator::generateOverloadedSignal.
+ QString code = getOverloadedSignalCode(node);
+ if (code.isEmpty())
+ return;
+
+ m_writer->writeStartElement(dbNamespace, "note");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeCharacters("Signal ");
+ m_writer->writeTextElement(dbNamespace, "emphasis", node->name());
+ m_writer->writeCharacters(" is overloaded in this class. To connect to this "
+ "signal by using the function pointer syntax, Qt "
+ "provides a convenient helper for obtaining the "
+ "function pointer as shown in this example:");
+ m_writer->writeTextElement(dbNamespace, "code", code);
+ m_writer->writeEndElement(); // para
+ newLine();
+ m_writer->writeEndElement(); // note
+ newLine();
+}
+
+/*!
+ Generates an addendum note of type \a type for \a node. \a marker
+ is unused in this generator.
+*/
+void DocBookGenerator::generateAddendum(const Node *node, Addendum type, CodeMarker *marker,
+ bool generateNote)
+{
+ Q_UNUSED(marker)
+ Q_ASSERT(node && !node->name().isEmpty());
+ if (generateNote) {
+ m_writer->writeStartElement(dbNamespace, "note");
+ newLine();
+ }
+ switch (type) {
+ case Invokable:
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeCharacters(
+ "This function can be invoked via the meta-object system and from QML. See ");
+ generateSimpleLink(node->url(), "Q_INVOKABLE");
+ m_writer->writeCharacters(".");
+ m_writer->writeEndElement(); // para
+ newLine();
+ break;
+ case PrivateSignal:
+ m_writer->writeTextElement(
+ dbNamespace, "para",
+ "This is a private signal. It can be used in signal connections but "
+ "cannot be emitted by the user.");
+ break;
+ case QmlSignalHandler:
+ {
+ QString handler(node->name());
+ int prefixLocation = handler.lastIndexOf('.', -2) + 1;
+ handler[prefixLocation] = handler[prefixLocation].toTitleCase();
+ handler.insert(prefixLocation, QLatin1String("on"));
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeCharacters("The corresponding handler is ");
+ m_writer->writeTextElement(dbNamespace, "code", handler);
+ m_writer->writeCharacters(".");
+ m_writer->writeEndElement(); // para
+ newLine();
+ break;
+ }
+ case AssociatedProperties:
+ {
+ if (!node->isFunction())
+ return;
+ const auto *fn = static_cast<const FunctionNode *>(node);
+ auto propertyNodes = fn->associatedProperties();
+ if (propertyNodes.isEmpty())
+ return;
+ std::sort(propertyNodes.begin(), propertyNodes.end(), Node::nodeNameLessThan);
+ for (const auto propertyNode : std::as_const(propertyNodes)) {
+ QString msg;
+ const auto pn = static_cast<const PropertyNode *>(propertyNode);
+ switch (pn->role(fn)) {
+ case PropertyNode::FunctionRole::Getter:
+ msg = QStringLiteral("Getter function");
+ break;
+ case PropertyNode::FunctionRole::Setter:
+ msg = QStringLiteral("Setter function");
+ break;
+ case PropertyNode::FunctionRole::Resetter:
+ msg = QStringLiteral("Resetter function");
+ break;
+ case PropertyNode::FunctionRole::Notifier:
+ msg = QStringLiteral("Notifier signal");
+ break;
+ default:
+ continue;
+ }
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeCharacters(msg + " for property ");
+ generateSimpleLink(linkForNode(pn, nullptr), pn->name());
+ m_writer->writeCharacters(". ");
+ m_writer->writeEndElement(); // para
+ newLine();
+ }
+ break;
+ }
+ case BindableProperty:
+ {
+ const Node *linkNode;
+ Atom linkAtom = Atom(Atom::Link, "QProperty");
+ QString link = getAutoLink(&linkAtom, node, &linkNode);
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeCharacters("This property supports ");
+ generateSimpleLink(link, "QProperty");
+ m_writer->writeCharacters(" bindings.");
+ m_writer->writeEndElement(); // para
+ newLine();
+ break;
+ }
+ default:
+ break;
+ }
+
+ if (generateNote) {
+ m_writer->writeEndElement(); // note
+ newLine();
+ }
+}
+
+void DocBookGenerator::generateDetailedMember(const Node *node, const PageNode *relative)
+{
+ // From HtmlGenerator::generateDetailedMember.
+ bool closeSupplementarySection = false;
+
+ if (node->isSharedCommentNode()) {
+ const auto *scn = reinterpret_cast<const SharedCommentNode *>(node);
+ const QList<Node *> &collective = scn->collective();
+
+ bool firstFunction = true;
+ for (const auto *sharedNode : collective) {
+ if (firstFunction) {
+ startSectionBegin(sharedNode);
+ } else {
+ m_writer->writeStartElement(dbNamespace, "bridgehead");
+ m_writer->writeAttribute("renderas", "sect2");
+ writeXmlId(sharedNode);
+ }
+ if (m_useITS)
+ m_writer->writeAttribute(itsNamespace, "translate", "no");
+
+ generateSynopsis(sharedNode, relative, Section::Details);
+
+ if (firstFunction) {
+ startSectionEnd();
+ firstFunction = false;
+ } else {
+ m_writer->writeEndElement(); // bridgehead
+ newLine();
+ }
+ }
+ } else {
+ const EnumNode *etn;
+ if (node->isEnumType() && (etn = static_cast<const EnumNode *>(node))->flagsType()) {
+ startSectionBegin(node);
+ if (m_useITS)
+ m_writer->writeAttribute(itsNamespace, "translate", "no");
+ generateSynopsis(etn, relative, Section::Details);
+ startSectionEnd();
+
+ m_writer->writeStartElement(dbNamespace, "bridgehead");
+ m_writer->writeAttribute("renderas", "sect2");
+ generateSynopsis(etn->flagsType(), relative, Section::Details);
+ m_writer->writeEndElement(); // bridgehead
+ newLine();
+ } else {
+ startSectionBegin(node);
+ if (m_useITS)
+ m_writer->writeAttribute(itsNamespace, "translate", "no");
+ generateSynopsis(node, relative, Section::Details);
+ startSectionEnd();
+ }
+ }
+ Q_ASSERT(m_hasSection);
+
+ generateDocBookSynopsis(node);
+
+ generateStatus(node);
+ generateBody(node);
+
+ // If the body ends with a section, the rest of the description must be wrapped in a section too.
+ if (node->hasDoc() && node->doc().body().firstAtom() && node->doc().body().lastAtom()->type() == Atom::SectionRight) {
+ closeSupplementarySection = true;
+ startSection("", "Notes");
+ }
+
+ generateOverloadedSignal(node);
+ generateComparisonCategory(node);
+ generateThreadSafeness(node);
+ generateSince(node);
+
+ if (node->isProperty()) {
+ const auto property = static_cast<const PropertyNode *>(node);
+ if (property->propertyType() == PropertyNode::PropertyType::StandardProperty) {
+ Section section("", "", "", "", Section::Accessors);
+
+ section.appendMembers(property->getters().toVector());
+ section.appendMembers(property->setters().toVector());
+ section.appendMembers(property->resetters().toVector());
+
+ if (!section.members().isEmpty()) {
+ m_writer->writeStartElement(dbNamespace, "para");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "emphasis");
+ m_writer->writeAttribute("role", "bold");
+ m_writer->writeCharacters("Access functions:");
+ newLine();
+ m_writer->writeEndElement(); // emphasis
+ newLine();
+ m_writer->writeEndElement(); // para
+ newLine();
+ generateSectionList(section, node);
+ }
+
+ Section notifiers("", "", "", "", Section::Accessors);
+ notifiers.appendMembers(property->notifiers().toVector());
+
+ if (!notifiers.members().isEmpty()) {
+ m_writer->writeStartElement(dbNamespace, "para");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "emphasis");
+ m_writer->writeAttribute("role", "bold");
+ m_writer->writeCharacters("Notifier signal:");
+ newLine();
+ m_writer->writeEndElement(); // emphasis
+ newLine();
+ m_writer->writeEndElement(); // para
+ newLine();
+ generateSectionList(notifiers, node);
+ }
+ }
+ } else if (node->isEnumType()) {
+ const auto en = static_cast<const EnumNode *>(node);
+
+ if (m_qflagsHref.isEmpty()) {
+ Node *qflags = m_qdb->findClassNode(QStringList("QFlags"));
+ if (qflags)
+ m_qflagsHref = linkForNode(qflags, nullptr);
+ }
+
+ if (en->flagsType()) {
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeCharacters("The ");
+ m_writer->writeStartElement(dbNamespace, "code");
+ m_writer->writeCharacters(en->flagsType()->name());
+ m_writer->writeEndElement(); // code
+ m_writer->writeCharacters(" type is a typedef for ");
+ m_writer->writeStartElement(dbNamespace, "code");
+ generateSimpleLink(m_qflagsHref, "QFlags");
+ m_writer->writeCharacters("<" + en->name() + ">. ");
+ m_writer->writeEndElement(); // code
+ m_writer->writeCharacters("It stores an OR combination of ");
+ m_writer->writeStartElement(dbNamespace, "code");
+ m_writer->writeCharacters(en->name());
+ m_writer->writeEndElement(); // code
+ m_writer->writeCharacters(" values.");
+ m_writer->writeEndElement(); // para
+ newLine();
+ }
+ }
+
+ if (closeSupplementarySection)
+ endSection();
+
+ // The list of linked pages is always in its own section.
+ generateAlsoList(node);
+
+ // Close the section for this member.
+ endSection(); // section
+}
+
+void DocBookGenerator::generateSectionList(const Section &section, const Node *relative,
+ bool useObsoleteMembers)
+{
+ // From HtmlGenerator::generateSectionList, just generating a list (not tables).
+ const NodeVector &members =
+ (useObsoleteMembers ? section.obsoleteMembers() : section.members());
+ if (!members.isEmpty()) {
+ bool hasPrivateSignals = false;
+ bool isInvokable = false;
+
+ m_writer->writeStartElement(dbNamespace, "itemizedlist");
+ if (m_useITS)
+ m_writer->writeAttribute(itsNamespace, "translate", "no");
+ newLine();
+
+ NodeVector::ConstIterator m = members.constBegin();
+ while (m != members.constEnd()) {
+ if ((*m)->access() == Access::Private) {
+ ++m;
+ continue;
+ }
+
+ m_writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ m_writer->writeStartElement(dbNamespace, "para");
+
+ // prefix no more needed.
+ generateSynopsis(*m, relative, section.style());
+ if ((*m)->isFunction()) {
+ const auto fn = static_cast<const FunctionNode *>(*m);
+ if (fn->isPrivateSignal())
+ hasPrivateSignals = true;
+ else if (fn->isInvokable())
+ isInvokable = true;
+ }
+
+ m_writer->writeEndElement(); // para
+ newLine();
+ m_writer->writeEndElement(); // listitem
+ newLine();
+
+ ++m;
+ }
+
+ m_writer->writeEndElement(); // itemizedlist
+ newLine();
+
+ if (hasPrivateSignals)
+ generateAddendum(relative, Generator::PrivateSignal, nullptr, true);
+ if (isInvokable)
+ generateAddendum(relative, Generator::Invokable, nullptr, true);
+ }
+
+ if (!useObsoleteMembers && section.style() == Section::Summary
+ && !section.inheritedMembers().isEmpty()) {
+ m_writer->writeStartElement(dbNamespace, "itemizedlist");
+ if (m_useITS)
+ m_writer->writeAttribute(itsNamespace, "translate", "no");
+ newLine();
+
+ generateSectionInheritedList(section, relative);
+
+ m_writer->writeEndElement(); // itemizedlist
+ newLine();
+ }
+}
+
+void DocBookGenerator::generateSectionInheritedList(const Section &section, const Node *relative)
+{
+ // From HtmlGenerator::generateSectionInheritedList.
+ QList<std::pair<Aggregate *, int>>::ConstIterator p = section.inheritedMembers().constBegin();
+ while (p != section.inheritedMembers().constEnd()) {
+ m_writer->writeStartElement(dbNamespace, "listitem");
+ m_writer->writeCharacters(QString::number((*p).second) + u' ');
+ if ((*p).second == 1)
+ m_writer->writeCharacters(section.singular());
+ else
+ m_writer->writeCharacters(section.plural());
+ m_writer->writeCharacters(" inherited from ");
+ generateSimpleLink(fileName((*p).first) + '#'
+ + Generator::cleanRef(section.title().toLower()),
+ (*p).first->plainFullName(relative));
+ ++p;
+ }
+}
+
+/*!
+ Generate the DocBook page for an entity that doesn't map
+ to any underlying parsable C++ or QML element.
+ */
+void DocBookGenerator::generatePageNode(PageNode *pn)
+{
+ // From HtmlGenerator::generatePageNode, remove anything related to TOCs.
+ Q_ASSERT(m_writer == nullptr);
+ m_writer = startDocument(pn);
+
+ generateHeader(pn->fullTitle(), pn->subtitle(), pn);
+ generateBody(pn);
+ generateAlsoList(pn);
+ generateFooter();
+
+ endDocument();
+}
+
+/*!
+ Generate the DocBook page for a QML type. \qcn is the QML type.
+ */
+void DocBookGenerator::generateQmlTypePage(QmlTypeNode *qcn)
+{
+ // From HtmlGenerator::generateQmlTypePage.
+ // Start producing the DocBook file.
+ Q_ASSERT(m_writer == nullptr);
+ m_writer = startDocument(qcn);
+
+ Generator::setQmlTypeContext(qcn);
+ QString title = qcn->fullTitle();
+ if (qcn->isQmlBasicType())
+ title.append(" QML Value Type");
+ else
+ title.append(" QML Type");
+ // TODO: for ITS attribute, only apply translate="no" on qcn->fullTitle(),
+ // not its suffix (which should be translated). generateHeader doesn't
+ // allow this kind of input, the title isn't supposed to be structured.
+ // Ideally, do the same in HTML.
+
+ generateHeader(title, qcn->subtitle(), qcn);
+ generateQmlRequisites(qcn);
+ generateStatus(qcn);
+
+ startSection("details", "Detailed Description");
+ generateBody(qcn);
+
+ generateAlsoList(qcn);
+
+ endSection();
+
+ Sections sections(qcn);
+ for (const auto &section : sections.stdQmlTypeDetailsSections()) {
+ if (!section.isEmpty()) {
+ startSection(section.title().toLower(), section.title());
+
+ for (const auto &member : section.members())
+ generateDetailedQmlMember(member, qcn);
+
+ endSection();
+ }
+ }
+
+ generateObsoleteQmlMembers(sections);
+
+ generateFooter();
+ Generator::setQmlTypeContext(nullptr);
+
+ endDocument();
+}
+
+/*!
+ Outputs the DocBook detailed documentation for a section
+ on a QML element reference page.
+ */
+void DocBookGenerator::generateDetailedQmlMember(Node *node, const Aggregate *relative)
+{
+ // From HtmlGenerator::generateDetailedQmlMember, with elements from
+ // CppCodeMarker::markedUpQmlItem and HtmlGenerator::generateQmlItem.
+ auto getQmlPropertyTitle = [&](QmlPropertyNode *n) {
+ QString title{CodeMarker::extraSynopsis(n, Section::Details)};
+ if (!title.isEmpty())
+ title += ' '_L1;
+ // Finalise generation of name, as per CppCodeMarker::markedUpQmlItem.
+ if (n->isAttached())
+ title += n->element() + QLatin1Char('.');
+ title += n->name() + " : " + n->dataType();
+
+ return title;
+ };
+
+ auto generateQmlMethodTitle = [&](Node *node) {
+ generateSynopsis(node, relative, Section::Details);
+ };
+
+ if (node->isPropertyGroup()) {
+ const auto *scn = static_cast<const SharedCommentNode *>(node);
+
+ QString heading;
+ if (!scn->name().isEmpty())
+ heading = scn->name() + " group";
+ else
+ heading = node->name();
+ startSection(scn, heading);
+ // This last call creates a title for this section. In other words,
+ // titles are forbidden for the rest of the section, hence the use of
+ // bridgehead.
+
+ const QList<Node *> sharedNodes = scn->collective();
+ for (const auto &sharedNode : sharedNodes) {
+ if (sharedNode->isQmlProperty()) {
+ auto *qpn = static_cast<QmlPropertyNode *>(sharedNode);
+
+ m_writer->writeStartElement(dbNamespace, "bridgehead");
+ m_writer->writeAttribute("renderas", "sect2");
+ writeXmlId(qpn);
+ m_writer->writeCharacters(getQmlPropertyTitle(qpn));
+ m_writer->writeEndElement(); // bridgehead
+ newLine();
+
+ generateDocBookSynopsis(qpn);
+ }
+ }
+ } else if (node->isQmlProperty()) {
+ auto qpn = static_cast<QmlPropertyNode *>(node);
+ startSection(qpn, getQmlPropertyTitle(qpn));
+ generateDocBookSynopsis(qpn);
+ } else if (node->isSharedCommentNode()) {
+ const auto scn = reinterpret_cast<const SharedCommentNode *>(node);
+ const QList<Node *> &sharedNodes = scn->collective();
+
+ // In the section, generate a title for the first node, then bridgeheads for
+ // the next ones.
+ int i = 0;
+ for (const auto &sharedNode : sharedNodes) {
+ // Ignore this element if there is nothing to generate.
+ if (!sharedNode->isFunction(Node::QML) && !sharedNode->isQmlProperty()) {
+ continue;
+ }
+
+ // Write the tag containing the title.
+ if (i == 0) {
+ startSectionBegin(sharedNode);
+ } else {
+ m_writer->writeStartElement(dbNamespace, "bridgehead");
+ m_writer->writeAttribute("renderas", "sect2");
+ }
+
+ // Write the title.
+ if (sharedNode->isFunction(Node::QML))
+ generateQmlMethodTitle(sharedNode);
+ else if (sharedNode->isQmlProperty())
+ m_writer->writeCharacters(
+ getQmlPropertyTitle(static_cast<QmlPropertyNode *>(sharedNode)));
+
+ // Complete the title and the synopsis.
+ if (i == 0)
+ startSectionEnd();
+ else
+ m_writer->writeEndElement(); // bridgehead
+ generateDocBookSynopsis(sharedNode);
+ ++i;
+ }
+
+ // If the list is empty, still generate a section.
+ if (i == 0) {
+ startSectionBegin(refForNode(node));
+
+ if (node->isFunction(Node::QML))
+ generateQmlMethodTitle(node);
+ else if (node->isQmlProperty())
+ m_writer->writeCharacters(
+ getQmlPropertyTitle(static_cast<QmlPropertyNode *>(node)));
+
+ startSectionEnd();
+ }
+ } else { // assume the node is a method/signal handler
+ startSectionBegin(node);
+ generateQmlMethodTitle(node);
+ startSectionEnd();
+ }
+
+ generateStatus(node);
+ generateBody(node);
+ generateThreadSafeness(node);
+ generateSince(node);
+ generateAlsoList(node);
+
+ endSection();
+}
+
+/*!
+ Recursive writing of DocBook files from the root \a node.
+ */
+void DocBookGenerator::generateDocumentation(Node *node)
+{
+ // Mainly from Generator::generateDocumentation, with parts from
+ // Generator::generateDocumentation and WebXMLGenerator::generateDocumentation.
+ // Don't generate nodes that are already processed, or if they're not
+ // supposed to generate output, ie. external, index or images nodes.
+ if (!node->url().isNull())
+ return;
+ if (node->isIndexNode())
+ return;
+ if (node->isInternal() && !m_showInternal)
+ return;
+ if (node->isExternalPage())
+ return;
+
+ if (node->parent()) {
+ if (node->isCollectionNode()) {
+ /*
+ A collection node collects: groups, C++ modules, or QML
+ modules. Testing for a CollectionNode must be done
+ before testing for a TextPageNode because a
+ CollectionNode is a PageNode at this point.
+
+ Don't output an HTML page for the collection node unless
+ the \group, \module, or \qmlmodule command was actually
+ seen by qdoc in the qdoc comment for the node.
+
+ A key prerequisite in this case is the call to
+ mergeCollections(cn). We must determine whether this
+ group, module, or QML module has members in other
+ modules. We know at this point that cn's members list
+ contains only members in the current module. Therefore,
+ before outputting the page for cn, we must search for
+ members of cn in the other modules and add them to the
+ members list.
+ */
+ auto cn = static_cast<CollectionNode *>(node);
+ if (cn->wasSeen()) {
+ m_qdb->mergeCollections(cn);
+ generateCollectionNode(cn);
+ } else if (cn->isGenericCollection()) {
+ // Currently used only for the module's related orphans page
+ // but can be generalized for other kinds of collections if
+ // other use cases pop up.
+ generateGenericCollectionPage(cn);
+ }
+ } else if (node->isTextPageNode()) { // Pages.
+ generatePageNode(static_cast<PageNode *>(node));
+ } else if (node->isAggregate()) { // Aggregates.
+ if ((node->isClassNode() || node->isHeader() || node->isNamespace())
+ && node->docMustBeGenerated()) {
+ generateCppReferencePage(static_cast<Aggregate *>(node));
+ } else if (node->isQmlType()) { // Includes QML value types
+ generateQmlTypePage(static_cast<QmlTypeNode *>(node));
+ } else if (node->isProxyNode()) {
+ generateProxyPage(static_cast<Aggregate *>(node));
+ }
+ }
+ }
+
+ if (node->isAggregate()) {
+ auto *aggregate = static_cast<Aggregate *>(node);
+ for (auto c : aggregate->childNodes()) {
+ if (node->isPageNode() && !node->isPrivate())
+ generateDocumentation(c);
+ }
+ }
+}
+
+void DocBookGenerator::generateProxyPage(Aggregate *aggregate)
+{
+ // Adapted from HtmlGenerator::generateProxyPage.
+ Q_ASSERT(aggregate->isProxyNode());
+
+ // Start producing the DocBook file.
+ Q_ASSERT(m_writer == nullptr);
+ m_writer = startDocument(aggregate);
+
+ // Info container.
+ generateHeader(aggregate->plainFullName(), "", aggregate);
+
+ // No element synopsis.
+
+ // Actual content.
+ if (!aggregate->doc().isEmpty()) {
+ startSection("details", "Detailed Description");
+
+ generateBody(aggregate);
+ generateAlsoList(aggregate);
+
+ endSection();
+ }
+
+ Sections sections(aggregate);
+ SectionVector *detailsSections = &sections.stdDetailsSections();
+
+ for (const auto &section : std::as_const(*detailsSections)) {
+ if (section.isEmpty())
+ continue;
+
+ startSection(section.title().toLower(), section.title());
+
+ const QList<Node *> &members = section.members();
+ for (const auto &member : members) {
+ if (!member->isPrivate()) { // ### check necessary?
+ if (!member->isClassNode()) {
+ generateDetailedMember(member, aggregate);
+ } else {
+ startSectionBegin();
+ generateFullName(member, aggregate);
+ startSectionEnd();
+
+ generateBrief(member);
+ endSection();
+ }
+ }
+ }
+
+ endSection();
+ }
+
+ generateFooter();
+
+ endDocument();
+}
+
+/*!
+ Generate the HTML page for a group, module, or QML module.
+ */
+void DocBookGenerator::generateCollectionNode(CollectionNode *cn)
+{
+ // Adapted from HtmlGenerator::generateCollectionNode.
+ // Start producing the DocBook file.
+ Q_ASSERT(m_writer == nullptr);
+ m_writer = startDocument(cn);
+
+ // Info container.
+ generateHeader(cn->fullTitle(), cn->subtitle(), cn);
+
+ // Element synopsis.
+ generateDocBookSynopsis(cn);
+
+ // Generate brief for C++ modules, status for all modules.
+ if (cn->genus() != Node::DOC && cn->genus() != Node::DontCare) {
+ if (cn->isModule())
+ generateBrief(cn);
+ generateStatus(cn);
+ generateSince(cn);
+ }
+
+ // Actual content.
+ if (cn->isModule()) {
+ if (!cn->noAutoList()) {
+ NodeMap nmm{cn->getMembers(Node::Namespace)};
+ if (!nmm.isEmpty()) {
+ startSection("namespaces", "Namespaces");
+ generateAnnotatedList(cn, nmm.values(), "namespaces");
+ endSection();
+ }
+ nmm = cn->getMembers([](const Node *n){ return n->isClassNode(); });
+ if (!nmm.isEmpty()) {
+ startSection("classes", "Classes");
+ generateAnnotatedList(cn, nmm.values(), "classes");
+ endSection();
+ }
+ }
+ }
+
+ bool generatedTitle = false;
+ if (cn->isModule() && !cn->doc().briefText().isEmpty()) {
+ startSection("details", "Detailed Description");
+ generatedTitle = true;
+ }
+ // The anchor is only needed if the node has a body.
+ else if (
+ // generateBody generates something.
+ !cn->doc().body().isEmpty() ||
+ // generateAlsoList generates something.
+ !cn->doc().alsoList().empty() ||
+ // generateAnnotatedList generates something.
+ (!cn->noAutoList() && (cn->isGroup() || cn->isQmlModule()))) {
+ writeAnchor("details");
+ }
+
+ generateBody(cn);
+ generateAlsoList(cn);
+
+ if (!cn->noAutoList() && (cn->isGroup() || cn->isQmlModule()))
+ generateAnnotatedList(cn, cn->members(), "members", AutoSection);
+
+ if (generatedTitle)
+ endSection();
+
+ generateFooter();
+
+ endDocument();
+}
+
+/*!
+ Generate the HTML page for a generic collection. This is usually
+ a collection of C++ elements that are related to an element in
+ a different module.
+ */
+void DocBookGenerator::generateGenericCollectionPage(CollectionNode *cn)
+{
+ // Adapted from HtmlGenerator::generateGenericCollectionPage.
+ // TODO: factor out this code to generate a file name.
+ QString name = cn->name().toLower();
+ name.replace(QChar(' '), QString("-"));
+ QString filename = cn->tree()->physicalModuleName() + "-" + name + "." + fileExtension();
+
+ // Start producing the DocBook file.
+ Q_ASSERT(m_writer == nullptr);
+ m_writer = startGenericDocument(cn, filename);
+
+ // Info container.
+ generateHeader(cn->fullTitle(), cn->subtitle(), cn);
+
+ // Element synopsis.
+ generateDocBookSynopsis(cn);
+
+ // Actual content.
+ m_writer->writeStartElement(dbNamespace, "para");
+ m_writer->writeCharacters("Each function or type documented here is related to a class or "
+ "namespace that is documented in a different module. The reference "
+ "page for that class or namespace will link to the function or type "
+ "on this page.");
+ m_writer->writeEndElement(); // para
+
+ const CollectionNode *cnc = cn;
+ const QList<Node *> members = cn->members();
+ for (const auto &member : members)
+ generateDetailedMember(member, cnc);
+
+ generateFooter();
+
+ endDocument();
+}
+
+void DocBookGenerator::generateFullName(const Node *node, const Node *relative)
+{
+ Q_ASSERT(node);
+ Q_ASSERT(relative);
+
+ // From Generator::appendFullName.
+ m_writer->writeStartElement(dbNamespace, "link");
+ m_writer->writeAttribute(xlinkNamespace, "href", fullDocumentLocation(node));
+ m_writer->writeAttribute(xlinkNamespace, "role", targetType(node));
+ m_writer->writeCharacters(node->fullName(relative));
+ m_writer->writeEndElement(); // link
+}
+
+void DocBookGenerator::generateFullName(const Node *apparentNode, const QString &fullName,
+ const Node *actualNode)
+{
+ Q_ASSERT(apparentNode);
+ Q_ASSERT(actualNode);
+
+ // From Generator::appendFullName.
+ m_writer->writeStartElement(dbNamespace, "link");
+ m_writer->writeAttribute(xlinkNamespace, "href", fullDocumentLocation(actualNode));
+ m_writer->writeAttribute("role", targetType(actualNode));
+ m_writer->writeCharacters(fullName);
+ m_writer->writeEndElement(); // link
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/docbookgenerator.h b/src/qdoc/qdoc/src/qdoc/docbookgenerator.h
new file mode 100644
index 000000000..5defbeb82
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/docbookgenerator.h
@@ -0,0 +1,168 @@
+// Copyright (C) 2019 Thibaut Cuvelier
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef DOCBOOKGENERATOR_H
+#define DOCBOOKGENERATOR_H
+
+#include "codemarker.h"
+#include "config.h"
+#include "xmlgenerator.h"
+#include "filesystem/fileresolver.h"
+
+#include <QtCore/qhash.h>
+#include <QtCore/qxmlstream.h>
+
+QT_BEGIN_NAMESPACE
+
+class Aggregate;
+class ExampleNode;
+class FunctionNode;
+
+class DocBookGenerator : public XmlGenerator
+{
+public:
+ explicit DocBookGenerator(FileResolver& file_resolver);
+
+ void initializeGenerator() override;
+ QString format() override;
+
+protected:
+ [[nodiscard]] QString fileExtension() const override;
+ void generateDocumentation(Node *node) override;
+ using Generator::generateCppReferencePage;
+ void generateCppReferencePage(Node *node);
+ using Generator::generatePageNode;
+ void generatePageNode(PageNode *pn);
+ using Generator::generateQmlTypePage;
+ void generateQmlTypePage(QmlTypeNode *qcn);
+ using Generator::generateCollectionNode;
+ void generateCollectionNode(CollectionNode *cn);
+ using Generator::generateGenericCollectionPage;
+ void generateGenericCollectionPage(CollectionNode *cn);
+ using Generator::generateProxyPage;
+ void generateProxyPage(Aggregate *aggregate);
+
+ void generateList(const Node *relative, const QString &selector);
+ void generateHeader(const QString &title, const QString &subtitle, const Node *node);
+ void closeTextSections();
+ void generateFooter();
+ void generateDocBookSynopsis(const Node *node);
+ void generateRequisites(const Aggregate *inner);
+ void generateQmlRequisites(const QmlTypeNode *qcn);
+ void generateSortedNames(const ClassNode *cn, const QList<RelatedClass> &rc);
+ void generateSortedQmlNames(const Node *base, const NodeList &subs);
+ bool generateStatus(const Node *node);
+ void generateGroupReferenceText(const Node *node);
+ bool generateThreadSafeness(const Node *node);
+ bool generateSince(const Node *node);
+ void generateAddendum(const Node *node, Generator::Addendum type, CodeMarker *marker,
+ bool generateNote) override;
+ using Generator::generateBody;
+ void generateBody(const Node *node);
+
+ bool generateText(const Text &text, const Node *relative) override;
+ qsizetype generateAtom(const Atom *atom, const Node *relative, CodeMarker*) override;
+
+private:
+
+ enum GeneratedListType { Auto, AutoSection, ItemizedList };
+
+ QXmlStreamWriter *startDocument(const Node *node);
+ QXmlStreamWriter *startDocument(const ExampleNode *en, const QString &file);
+ QXmlStreamWriter *startGenericDocument(const Node *node, const QString &fileName);
+ void endDocument();
+
+ void generateAnnotatedList(const Node *relative, const NodeList &nodeList,
+ const QString &selector, GeneratedListType type = Auto);
+ void generateAnnotatedLists(const Node *relative, const NodeMultiMap &nmm,
+ const QString &selector);
+ void generateCompactList(const Node *relative, const NodeMultiMap &nmm, bool includeAlphabet,
+ const QString &commonPrefix, const QString &selector);
+ using Generator::generateFileList;
+ void generateFileList(const ExampleNode *en, bool images);
+ void generateObsoleteMembers(const Sections &sections);
+ void generateObsoleteQmlMembers(const Sections &sections);
+ void generateSectionList(const Section &section, const Node *relative,
+ bool useObsoleteMembers = false);
+ void generateSectionInheritedList(const Section &section, const Node *relative);
+ void generateSynopsisName(const Node *node, const Node *relative, bool generateNameLink);
+ void generateParameter(const Parameter &parameter, const Node *relative, bool generateExtra,
+ bool generateType);
+ void generateSynopsis(const Node *node, const Node *relative, Section::Style style);
+ void generateEnumValue(const QString &enumValue, const Node *relative);
+ void generateDetailedMember(const Node *node, const PageNode *relative);
+ void generateDetailedQmlMember(Node *node, const Aggregate *relative);
+
+ void generateFullName(const Node *node, const Node *relative);
+ void generateFullName(const Node *apparentNode, const QString &fullName,
+ const Node *actualNode);
+ void generateBrief(const Node *node);
+ void generateAlsoList(const Node *node) override;
+ void generateSignatureList(const NodeList &nodes);
+ void generateReimplementsClause(const FunctionNode *fn);
+ void generateClassHierarchy(const Node *relative, NodeMultiMap &classMap);
+ void generateFunctionIndex(const Node *relative);
+ void generateLegaleseList(const Node *relative);
+ void generateExampleFilePage(const Node *en, ResolvedFile resolved_file, CodeMarker* = nullptr) override;
+ void generateOverloadedSignal(const Node *node);
+ void generateRequiredLinks(const Node *node);
+ void generateLinkToExample(const ExampleNode *en, const QString &baseUrl);
+
+ void typified(const QString &string, const Node *relative, bool trailingSpace = false,
+ bool generateType = true);
+ void generateLink(const Atom *atom);
+ void beginLink(const QString &link, const Node *node, const Node *relative);
+ void endLink();
+ void writeXmlId(const QString &id);
+ void writeXmlId(const Node *node);
+ inline void newLine();
+ void startSectionBegin(const QString &id = "");
+ void startSectionBegin(const Node *node);
+ void startSectionEnd();
+ void startSection(const QString &id, const QString &title);
+ void startSection(const Node *node, const QString &title);
+ void startSection(const QString &title);
+ void endSection();
+ void writeAnchor(const QString &id);
+ void generateSimpleLink(const QString &href, const QString &text);
+ void generateStartRequisite(const QString &description);
+ void generateEndRequisite();
+ void generateRequisite(const QString &description, const QString &value);
+ void generateCMakeRequisite(const QStringList &values);
+ void generateSynopsisInfo(const QString &key, const QString &value);
+ void generateModifier(const QString &value);
+
+ // Generator state when outputting the documentation.
+ bool m_inListItemLineOpen { false };
+ int currentSectionLevel { 0 };
+ QStack<int> sectionLevels {};
+ QString m_qflagsHref {};
+ bool m_inTeletype { false };
+ bool m_hasSection { false };
+ bool m_closeSectionAfterGeneratedList { false };
+ bool m_closeSectionAfterRawTitle { false };
+ bool m_closeFigureWrapper { false };
+ bool m_tableHeaderAlreadyOutput { false };
+ bool m_closeTableRow { false };
+ bool m_closeTableCell { false };
+ std::pair<QString, QString> m_tableWidthAttr {};
+ bool m_inPara { false }; // Ignores nesting of paragraphs (like list items).
+ bool m_inBlockquote { false };
+ unsigned m_inList { 0 }; // Depth in number of nested lists.
+
+ // Generator configuration, set before starting the generation.
+ QString m_project {};
+ QString m_projectDescription {};
+ QString m_naturalLanguage {};
+ QString m_buildVersion {};
+ QXmlStreamWriter *m_writer { nullptr };
+ bool m_useDocBook52 { false }; // Enable tags from DocBook 5.2. Also called "extensions".
+ bool m_useITS { false }; // Enable ITS attributes for parts that should not be translated.
+
+ Config *m_config { nullptr };
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/docparser.cpp b/src/qdoc/qdoc/src/qdoc/docparser.cpp
new file mode 100644
index 000000000..b6304a960
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/docparser.cpp
@@ -0,0 +1,2798 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#include "docparser.h"
+
+#include "codemarker.h"
+#include "doc.h"
+#include "docprivate.h"
+#include "editdistance.h"
+#include "macro.h"
+#include "openedlist.h"
+#include "tokenizer.h"
+
+#include <QtCore/qfile.h>
+#include <QtCore/qregularexpression.h>
+#include <QtCore/qtextstream.h>
+
+#include <cctype>
+#include <climits>
+#include <functional>
+
+QT_BEGIN_NAMESPACE
+
+using namespace Qt::StringLiterals;
+
+DocUtilities &DocParser::s_utilities = DocUtilities::instance();
+
+enum {
+ CMD_A,
+ CMD_ANNOTATEDLIST,
+ CMD_B,
+ CMD_BADCODE,
+ CMD_BOLD,
+ CMD_BR,
+ CMD_BRIEF,
+ CMD_C,
+ CMD_CAPTION,
+ CMD_CODE,
+ CMD_CODELINE,
+ CMD_COMPARESWITH,
+ CMD_DETAILS,
+ CMD_DIV,
+ CMD_DOTS,
+ CMD_E,
+ CMD_ELSE,
+ CMD_ENDCODE,
+ CMD_ENDCOMPARESWITH,
+ CMD_ENDDETAILS,
+ CMD_ENDDIV,
+ CMD_ENDFOOTNOTE,
+ CMD_ENDIF,
+ CMD_ENDLEGALESE,
+ CMD_ENDLINK,
+ CMD_ENDLIST,
+ CMD_ENDMAPREF,
+ CMD_ENDOMIT,
+ CMD_ENDQUOTATION,
+ CMD_ENDRAW,
+ CMD_ENDSECTION1,
+ CMD_ENDSECTION2,
+ CMD_ENDSECTION3,
+ CMD_ENDSECTION4,
+ CMD_ENDSIDEBAR,
+ CMD_ENDTABLE,
+ CMD_FOOTNOTE,
+ CMD_GENERATELIST,
+ CMD_HEADER,
+ CMD_HR,
+ CMD_I,
+ CMD_IF,
+ CMD_IMAGE,
+ CMD_IMPORTANT,
+ CMD_INCLUDE,
+ CMD_INLINEIMAGE,
+ CMD_INDEX,
+ CMD_INPUT,
+ CMD_KEYWORD,
+ CMD_L,
+ CMD_LEGALESE,
+ CMD_LI,
+ CMD_LINK,
+ CMD_LIST,
+ CMD_META,
+ CMD_NOTE,
+ CMD_O,
+ CMD_OMIT,
+ CMD_OMITVALUE,
+ CMD_OVERLOAD,
+ CMD_PRINTLINE,
+ CMD_PRINTTO,
+ CMD_PRINTUNTIL,
+ CMD_QUOTATION,
+ CMD_QUOTEFILE,
+ CMD_QUOTEFROMFILE,
+ CMD_RAW,
+ CMD_ROW,
+ CMD_SA,
+ CMD_SECTION1,
+ CMD_SECTION2,
+ CMD_SECTION3,
+ CMD_SECTION4,
+ CMD_SIDEBAR,
+ CMD_SINCELIST,
+ CMD_SKIPLINE,
+ CMD_SKIPTO,
+ CMD_SKIPUNTIL,
+ CMD_SNIPPET,
+ CMD_SPAN,
+ CMD_SUB,
+ CMD_SUP,
+ CMD_TABLE,
+ CMD_TABLEOFCONTENTS,
+ CMD_TARGET,
+ CMD_TT,
+ CMD_UICONTROL,
+ CMD_UNDERLINE,
+ CMD_UNICODE,
+ CMD_VALUE,
+ CMD_WARNING,
+ CMD_QML,
+ CMD_ENDQML,
+ CMD_CPP,
+ CMD_ENDCPP,
+ CMD_CPPTEXT,
+ CMD_ENDCPPTEXT,
+ NOT_A_CMD
+};
+
+static struct
+{
+ const char *name;
+ int no;
+} cmds[] = { { "a", CMD_A },
+ { "annotatedlist", CMD_ANNOTATEDLIST },
+ { "b", CMD_B },
+ { "badcode", CMD_BADCODE },
+ { "bold", CMD_BOLD },
+ { "br", CMD_BR },
+ { "brief", CMD_BRIEF },
+ { "c", CMD_C },
+ { "caption", CMD_CAPTION },
+ { "code", CMD_CODE },
+ { "codeline", CMD_CODELINE },
+ { "compareswith", CMD_COMPARESWITH },
+ { "details", CMD_DETAILS },
+ { "div", CMD_DIV },
+ { "dots", CMD_DOTS },
+ { "e", CMD_E },
+ { "else", CMD_ELSE },
+ { "endcode", CMD_ENDCODE },
+ { "endcompareswith", CMD_ENDCOMPARESWITH },
+ { "enddetails", CMD_ENDDETAILS },
+ { "enddiv", CMD_ENDDIV },
+ { "endfootnote", CMD_ENDFOOTNOTE },
+ { "endif", CMD_ENDIF },
+ { "endlegalese", CMD_ENDLEGALESE },
+ { "endlink", CMD_ENDLINK },
+ { "endlist", CMD_ENDLIST },
+ { "endmapref", CMD_ENDMAPREF },
+ { "endomit", CMD_ENDOMIT },
+ { "endquotation", CMD_ENDQUOTATION },
+ { "endraw", CMD_ENDRAW },
+ { "endsection1", CMD_ENDSECTION1 }, // ### don't document for now
+ { "endsection2", CMD_ENDSECTION2 }, // ### don't document for now
+ { "endsection3", CMD_ENDSECTION3 }, // ### don't document for now
+ { "endsection4", CMD_ENDSECTION4 }, // ### don't document for now
+ { "endsidebar", CMD_ENDSIDEBAR },
+ { "endtable", CMD_ENDTABLE },
+ { "footnote", CMD_FOOTNOTE },
+ { "generatelist", CMD_GENERATELIST },
+ { "header", CMD_HEADER },
+ { "hr", CMD_HR },
+ { "i", CMD_I },
+ { "if", CMD_IF },
+ { "image", CMD_IMAGE },
+ { "important", CMD_IMPORTANT },
+ { "include", CMD_INCLUDE },
+ { "inlineimage", CMD_INLINEIMAGE },
+ { "index", CMD_INDEX }, // ### don't document for now
+ { "input", CMD_INPUT },
+ { "keyword", CMD_KEYWORD },
+ { "l", CMD_L },
+ { "legalese", CMD_LEGALESE },
+ { "li", CMD_LI },
+ { "link", CMD_LINK },
+ { "list", CMD_LIST },
+ { "meta", CMD_META },
+ { "note", CMD_NOTE },
+ { "o", CMD_O },
+ { "omit", CMD_OMIT },
+ { "omitvalue", CMD_OMITVALUE },
+ { "overload", CMD_OVERLOAD },
+ { "printline", CMD_PRINTLINE },
+ { "printto", CMD_PRINTTO },
+ { "printuntil", CMD_PRINTUNTIL },
+ { "quotation", CMD_QUOTATION },
+ { "quotefile", CMD_QUOTEFILE },
+ { "quotefromfile", CMD_QUOTEFROMFILE },
+ { "raw", CMD_RAW },
+ { "row", CMD_ROW },
+ { "sa", CMD_SA },
+ { "section1", CMD_SECTION1 },
+ { "section2", CMD_SECTION2 },
+ { "section3", CMD_SECTION3 },
+ { "section4", CMD_SECTION4 },
+ { "sidebar", CMD_SIDEBAR },
+ { "sincelist", CMD_SINCELIST },
+ { "skipline", CMD_SKIPLINE },
+ { "skipto", CMD_SKIPTO },
+ { "skipuntil", CMD_SKIPUNTIL },
+ { "snippet", CMD_SNIPPET },
+ { "span", CMD_SPAN },
+ { "sub", CMD_SUB },
+ { "sup", CMD_SUP },
+ { "table", CMD_TABLE },
+ { "tableofcontents", CMD_TABLEOFCONTENTS },
+ { "target", CMD_TARGET },
+ { "tt", CMD_TT },
+ { "uicontrol", CMD_UICONTROL },
+ { "underline", CMD_UNDERLINE },
+ { "unicode", CMD_UNICODE },
+ { "value", CMD_VALUE },
+ { "warning", CMD_WARNING },
+ { "qml", CMD_QML },
+ { "endqml", CMD_ENDQML },
+ { "cpp", CMD_CPP },
+ { "endcpp", CMD_ENDCPP },
+ { "cpptext", CMD_CPPTEXT },
+ { "endcpptext", CMD_ENDCPPTEXT },
+ { nullptr, 0 } };
+
+int DocParser::s_tabSize;
+QStringList DocParser::s_ignoreWords;
+bool DocParser::s_quoting = false;
+FileResolver *DocParser::file_resolver{ nullptr };
+static void processComparesWithCommand(DocPrivate *priv, const Location &location);
+
+static QString cleanLink(const QString &link)
+{
+ qsizetype colonPos = link.indexOf(':');
+ if ((colonPos == -1) || (!link.startsWith("file:") && !link.startsWith("mailto:")))
+ return link;
+ return link.mid(colonPos + 1).simplified();
+}
+
+void DocParser::initialize(const Config &config, FileResolver &file_resolver)
+{
+ s_tabSize = config.get(CONFIG_TABSIZE).asInt();
+ s_ignoreWords = config.get(CONFIG_IGNOREWORDS).asStringList();
+
+ int i = 0;
+ while (cmds[i].name) {
+ s_utilities.cmdHash.insert(cmds[i].name, cmds[i].no);
+
+ if (cmds[i].no != i)
+ Location::internalError(QStringLiteral("command %1 missing").arg(i));
+ ++i;
+ }
+
+ // If any of the formats define quotinginformation, activate quoting
+ DocParser::s_quoting = config.get(CONFIG_QUOTINGINFORMATION).asBool();
+ const auto &outputFormats = config.getOutputFormats();
+ for (const auto &format : outputFormats)
+ DocParser::s_quoting = DocParser::s_quoting
+ || config.get(format + Config::dot + CONFIG_QUOTINGINFORMATION).asBool();
+
+ // KLUDGE: file_resolver is temporarily a pointer. See the
+ // comment for file_resolver in the header file for more context.
+ DocParser::file_resolver = &file_resolver;
+}
+
+/*!
+ Parse the \a source string to build a Text data structure
+ in \a docPrivate. The Text data structure is a linked list
+ of Atoms.
+
+ \a metaCommandSet is the set of metacommands that may be
+ found in \a source. These metacommands are not markup text
+ commands. They are topic commands and related metacommands.
+ */
+void DocParser::parse(const QString &source, DocPrivate *docPrivate,
+ const QSet<QString> &metaCommandSet, const QSet<QString> &possibleTopics)
+{
+ m_input = source;
+ m_position = 0;
+ m_inputLength = m_input.size();
+ m_cachedLocation = docPrivate->m_start_loc;
+ m_cachedPosition = 0;
+ m_private = docPrivate;
+ m_private->m_text << Atom::Nop;
+ m_private->m_topics.clear();
+
+ m_paragraphState = OutsideParagraph;
+ m_inTableHeader = false;
+ m_inTableRow = false;
+ m_inTableItem = false;
+ m_indexStartedParagraph = false;
+ m_pendingParagraphLeftType = Atom::Nop;
+ m_pendingParagraphRightType = Atom::Nop;
+
+ m_braceDepth = 0;
+ m_currentSection = Doc::NoSection;
+ m_openedCommands.push(CMD_OMIT);
+ m_quoter.reset();
+
+ CodeMarker *marker = nullptr;
+ Atom *currentLinkAtom = nullptr;
+ QString p1, p2;
+ QStack<bool> preprocessorSkipping;
+ int numPreprocessorSkipping = 0;
+
+ while (m_position < m_inputLength) {
+ QChar ch = m_input.at(m_position);
+
+ switch (ch.unicode()) {
+ case '\\': {
+ QString cmdStr;
+ m_backslashPosition = m_position;
+ ++m_position;
+ while (m_position < m_inputLength) {
+ ch = m_input.at(m_position);
+ if (ch.isLetterOrNumber()) {
+ cmdStr += ch;
+ ++m_position;
+ } else {
+ break;
+ }
+ }
+ m_endPosition = m_position;
+ if (cmdStr.isEmpty()) {
+ if (m_position < m_inputLength) {
+ enterPara();
+ if (m_input.at(m_position).isSpace()) {
+ skipAllSpaces();
+ appendChar(QLatin1Char(' '));
+ } else {
+ appendChar(m_input.at(m_position++));
+ }
+ }
+ } else {
+ // Ignore quoting atoms to make appendToCode()
+ // append to the correct atom.
+ if (!s_quoting || !isQuote(m_private->m_text.lastAtom()))
+ m_lastAtom = m_private->m_text.lastAtom();
+
+ int cmd = s_utilities.cmdHash.value(cmdStr, NOT_A_CMD);
+ switch (cmd) {
+ case CMD_A:
+ enterPara();
+ p1 = getArgument();
+ appendAtom(Atom(Atom::FormattingLeft, ATOM_FORMATTING_PARAMETER));
+ appendAtom(Atom(Atom::String, p1));
+ appendAtom(Atom(Atom::FormattingRight, ATOM_FORMATTING_PARAMETER));
+ m_private->m_params.insert(p1);
+ break;
+ case CMD_BADCODE:
+ leavePara();
+ appendAtom(Atom(Atom::CodeBad,
+ getCode(CMD_BADCODE, marker, getMetaCommandArgument(cmdStr))));
+ break;
+ case CMD_BR:
+ enterPara();
+ appendAtom(Atom(Atom::BR));
+ break;
+ case CMD_BOLD:
+ location().warning(QStringLiteral("'\\bold' is deprecated. Use '\\b'"));
+ Q_FALLTHROUGH();
+ case CMD_B:
+ startFormat(ATOM_FORMATTING_BOLD, cmd);
+ break;
+ case CMD_BRIEF:
+ leavePara();
+ enterPara(Atom::BriefLeft, Atom::BriefRight);
+ break;
+ case CMD_C:
+ enterPara();
+ p1 = untabifyEtc(getArgument(true));
+ marker = CodeMarker::markerForCode(p1);
+ appendAtom(Atom(Atom::C, marker->markedUpCode(p1, nullptr, location())));
+ break;
+ case CMD_CAPTION:
+ leavePara();
+ enterPara(Atom::CaptionLeft, Atom::CaptionRight);
+ break;
+ case CMD_CODE:
+ leavePara();
+ appendAtom(Atom(Atom::Code, getCode(CMD_CODE, nullptr, getMetaCommandArgument(cmdStr))));
+ break;
+ case CMD_QML:
+ leavePara();
+ appendAtom(Atom(Atom::Qml,
+ getCode(CMD_QML, CodeMarker::markerForLanguage(QLatin1String("QML")),
+ getMetaCommandArgument(cmdStr))));
+ break;
+ case CMD_DETAILS:
+ leavePara();
+ appendAtom(Atom(Atom::DetailsLeft, getArgument()));
+ m_openedCommands.push(cmd);
+ break;
+ case CMD_ENDDETAILS:
+ leavePara();
+ appendAtom(Atom(Atom::DetailsRight));
+ closeCommand(cmd);
+ break;
+ case CMD_DIV:
+ leavePara();
+ p1 = getArgument(true);
+ appendAtom(Atom(Atom::DivLeft, p1));
+ m_openedCommands.push(cmd);
+ break;
+ case CMD_ENDDIV:
+ leavePara();
+ appendAtom(Atom(Atom::DivRight));
+ closeCommand(cmd);
+ break;
+ case CMD_CODELINE:
+ if (s_quoting) {
+ appendAtom(Atom(Atom::CodeQuoteCommand, cmdStr));
+ appendAtom(Atom(Atom::CodeQuoteArgument, " "));
+ }
+ if (isCode(m_lastAtom) && m_lastAtom->string().endsWith("\n\n"))
+ m_lastAtom->chopString();
+ appendToCode("\n");
+ break;
+ case CMD_DOTS: {
+ QString arg = getOptionalArgument();
+ if (arg.isEmpty())
+ arg = "4";
+ if (s_quoting) {
+ appendAtom(Atom(Atom::CodeQuoteCommand, cmdStr));
+ appendAtom(Atom(Atom::CodeQuoteArgument, arg));
+ }
+ if (isCode(m_lastAtom) && m_lastAtom->string().endsWith("\n\n"))
+ m_lastAtom->chopString();
+
+ int indent = arg.toInt();
+ for (int i = 0; i < indent; ++i)
+ appendToCode(" ");
+ appendToCode("...\n");
+ break;
+ }
+ case CMD_ELSE:
+ if (!preprocessorSkipping.empty()) {
+ if (preprocessorSkipping.top()) {
+ --numPreprocessorSkipping;
+ } else {
+ ++numPreprocessorSkipping;
+ }
+ preprocessorSkipping.top() = !preprocessorSkipping.top();
+ (void)getRestOfLine(); // ### should ensure that it's empty
+ if (numPreprocessorSkipping)
+ skipToNextPreprocessorCommand();
+ } else {
+ location().warning(
+ QStringLiteral("Unexpected '\\%1'").arg(cmdName(CMD_ELSE)));
+ }
+ break;
+ case CMD_ENDCODE:
+ closeCommand(cmd);
+ break;
+ case CMD_ENDQML:
+ closeCommand(cmd);
+ break;
+ case CMD_ENDFOOTNOTE:
+ if (closeCommand(cmd)) {
+ leavePara();
+ appendAtom(Atom(Atom::FootnoteRight));
+ }
+ break;
+ case CMD_ENDIF:
+ if (preprocessorSkipping.size() > 0) {
+ if (preprocessorSkipping.pop())
+ --numPreprocessorSkipping;
+ (void)getRestOfLine(); // ### should ensure that it's empty
+ if (numPreprocessorSkipping)
+ skipToNextPreprocessorCommand();
+ } else {
+ location().warning(
+ QStringLiteral("Unexpected '\\%1'").arg(cmdName(CMD_ENDIF)));
+ }
+ break;
+ case CMD_ENDLEGALESE:
+ if (closeCommand(cmd)) {
+ leavePara();
+ appendAtom(Atom(Atom::LegaleseRight));
+ }
+ break;
+ case CMD_ENDLINK:
+ if (closeCommand(cmd)) {
+ if (m_private->m_text.lastAtom()->type() == Atom::String
+ && m_private->m_text.lastAtom()->string().endsWith(QLatin1Char(' ')))
+ m_private->m_text.lastAtom()->chopString();
+ appendAtom(Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK));
+ }
+ break;
+ case CMD_ENDLIST:
+ if (closeCommand(cmd)) {
+ leavePara();
+ if (m_openedLists.top().isStarted()) {
+ appendAtom(Atom(Atom::ListItemRight, m_openedLists.top().styleString()));
+ appendAtom(Atom(Atom::ListRight, m_openedLists.top().styleString()));
+ }
+ m_openedLists.pop();
+ }
+ break;
+ case CMD_ENDOMIT:
+ closeCommand(cmd);
+ break;
+ case CMD_ENDQUOTATION:
+ if (closeCommand(cmd)) {
+ leavePara();
+ appendAtom(Atom(Atom::QuotationRight));
+ }
+ break;
+ case CMD_ENDRAW:
+ location().warning(
+ QStringLiteral("Unexpected '\\%1'").arg(cmdName(CMD_ENDRAW)));
+ break;
+ case CMD_ENDSECTION1:
+ endSection(Doc::Section1, cmd);
+ break;
+ case CMD_ENDSECTION2:
+ endSection(Doc::Section2, cmd);
+ break;
+ case CMD_ENDSECTION3:
+ endSection(Doc::Section3, cmd);
+ break;
+ case CMD_ENDSECTION4:
+ endSection(Doc::Section4, cmd);
+ break;
+ case CMD_ENDSIDEBAR:
+ if (closeCommand(cmd)) {
+ leavePara();
+ appendAtom(Atom(Atom::SidebarRight));
+ }
+ break;
+ case CMD_ENDTABLE:
+ if (closeCommand(cmd)) {
+ leaveTableRow();
+ appendAtom(Atom(Atom::TableRight));
+ }
+ break;
+ case CMD_FOOTNOTE:
+ if (openCommand(cmd)) {
+ enterPara();
+ appendAtom(Atom(Atom::FootnoteLeft));
+ }
+ break;
+ case CMD_ANNOTATEDLIST:
+ appendAtom(Atom(Atom::AnnotatedList, getArgument()));
+ break;
+ case CMD_SINCELIST:
+ leavePara();
+ appendAtom(Atom(Atom::SinceList, getRestOfLine().simplified()));
+ break;
+ case CMD_GENERATELIST: {
+ QString arg1 = getArgument();
+ QString arg2 = getOptionalArgument();
+ if (!arg2.isEmpty())
+ arg1 += " " + arg2;
+ appendAtom(Atom(Atom::GeneratedList, arg1));
+ } break;
+ case CMD_HEADER:
+ if (m_openedCommands.top() == CMD_TABLE) {
+ leaveTableRow();
+ appendAtom(Atom(Atom::TableHeaderLeft));
+ m_inTableHeader = true;
+ } else {
+ if (m_openedCommands.contains(CMD_TABLE))
+ location().warning(QStringLiteral("Cannot use '\\%1' within '\\%2'")
+ .arg(cmdName(CMD_HEADER),
+ cmdName(m_openedCommands.top())));
+ else
+ location().warning(
+ QStringLiteral("Cannot use '\\%1' outside of '\\%2'")
+ .arg(cmdName(CMD_HEADER), cmdName(CMD_TABLE)));
+ }
+ break;
+ case CMD_I:
+ location().warning(QStringLiteral(
+ "'\\i' is deprecated. Use '\\e' for italic or '\\li' for list item"));
+ Q_FALLTHROUGH();
+ case CMD_E:
+ startFormat(ATOM_FORMATTING_ITALIC, cmd);
+ break;
+ case CMD_HR:
+ leavePara();
+ appendAtom(Atom(Atom::HR));
+ break;
+ case CMD_IF:
+ preprocessorSkipping.push(!Tokenizer::isTrue(getRestOfLine()));
+ if (preprocessorSkipping.top())
+ ++numPreprocessorSkipping;
+ if (numPreprocessorSkipping)
+ skipToNextPreprocessorCommand();
+ break;
+ case CMD_IMAGE:
+ leaveValueList();
+ appendAtom(Atom(Atom::Image, getArgument()));
+ appendAtom(Atom(Atom::ImageText, getRestOfLine()));
+ break;
+ case CMD_IMPORTANT:
+ leavePara();
+ enterPara(Atom::ImportantLeft, Atom::ImportantRight);
+ break;
+ case CMD_INCLUDE:
+ case CMD_INPUT: {
+ QString fileName = getArgument();
+ QStringList parameters;
+ QString identifier;
+ if (isLeftBraceAhead()) {
+ identifier = getArgument();
+ while (isLeftBraceAhead() && parameters.size() < 9)
+ parameters << getArgument();
+ } else {
+ identifier = getRestOfLine();
+ }
+ include(fileName, identifier, parameters);
+ break;
+ }
+ case CMD_INLINEIMAGE:
+ enterPara();
+ appendAtom(Atom(Atom::InlineImage, getArgument()));
+ //Append ImageText only if the following
+ //argument is enclosed in braces.
+ if (isLeftBraceAhead()) {
+ appendAtom(Atom(Atom::ImageText, getArgument()));
+ appendAtom(Atom(Atom::String, " "));
+ }
+ break;
+ case CMD_INDEX:
+ if (m_paragraphState == OutsideParagraph) {
+ enterPara();
+ m_indexStartedParagraph = true;
+ } else {
+ const Atom *last = m_private->m_text.lastAtom();
+ if (m_indexStartedParagraph
+ && (last->type() != Atom::FormattingRight
+ || last->string() != ATOM_FORMATTING_INDEX))
+ m_indexStartedParagraph = false;
+ }
+ startFormat(ATOM_FORMATTING_INDEX, cmd);
+ break;
+ case CMD_KEYWORD:
+ leavePara();
+ insertKeyword(getRestOfLine());
+ break;
+ case CMD_L:
+ enterPara();
+ if (isLeftBracketAhead())
+ p2 = getBracketedArgument();
+
+ p1 = getArgument();
+
+ appendAtom(LinkAtom(p1, p2, location()));
+
+ if (isLeftBraceAhead()) {
+ currentLinkAtom = m_private->m_text.lastAtom();
+ startFormat(ATOM_FORMATTING_LINK, cmd);
+ } else {
+ appendAtom(Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK));
+ appendAtom(Atom(Atom::String, cleanLink(p1)));
+ appendAtom(Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK));
+ }
+
+ p2.clear();
+
+ break;
+ case CMD_LEGALESE:
+ leavePara();
+ if (openCommand(cmd))
+ appendAtom(Atom(Atom::LegaleseLeft));
+ docPrivate->m_hasLegalese = true;
+ break;
+ case CMD_LINK:
+ if (openCommand(cmd)) {
+ enterPara();
+ p1 = getArgument();
+ appendAtom(Atom(Atom::Link, p1));
+ appendAtom(Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK));
+ skipSpacesOrOneEndl();
+ }
+ break;
+ case CMD_LIST:
+ if (openCommand(cmd)) {
+ leavePara();
+ m_openedLists.push(OpenedList(location(), getOptionalArgument()));
+ }
+ break;
+ case CMD_META:
+ m_private->constructExtra();
+ p1 = getArgument();
+ m_private->extra->m_metaMap.insert(p1, getArgument());
+ break;
+ case CMD_NOTE:
+ leavePara();
+ enterPara(Atom::NoteLeft, Atom::NoteRight);
+ break;
+ case CMD_O:
+ location().warning(QStringLiteral("'\\o' is deprecated. Use '\\li'"));
+ Q_FALLTHROUGH();
+ case CMD_LI:
+ leavePara();
+ if (m_openedCommands.top() == CMD_LIST) {
+ if (m_openedLists.top().isStarted())
+ appendAtom(Atom(Atom::ListItemRight, m_openedLists.top().styleString()));
+ else
+ appendAtom(Atom(Atom::ListLeft, m_openedLists.top().styleString()));
+ m_openedLists.top().next();
+ appendAtom(Atom(Atom::ListItemNumber, m_openedLists.top().numberString()));
+ appendAtom(Atom(Atom::ListItemLeft, m_openedLists.top().styleString()));
+ enterPara();
+ } else if (m_openedCommands.top() == CMD_TABLE) {
+ p1 = "1,1";
+ p2.clear();
+ if (isLeftBraceAhead()) {
+ p1 = getArgument();
+ if (isLeftBraceAhead())
+ p2 = getArgument();
+ }
+
+ if (!m_inTableHeader && !m_inTableRow) {
+ location().warning(
+ QStringLiteral("Missing '\\%1' or '\\%2' before '\\%3'")
+ .arg(cmdName(CMD_HEADER), cmdName(CMD_ROW),
+ cmdName(CMD_LI)));
+ appendAtom(Atom(Atom::TableRowLeft));
+ m_inTableRow = true;
+ } else if (m_inTableItem) {
+ appendAtom(Atom(Atom::TableItemRight));
+ m_inTableItem = false;
+ }
+
+ appendAtom(Atom(Atom::TableItemLeft, p1, p2));
+ m_inTableItem = true;
+ } else
+ location().warning(
+ QStringLiteral("Command '\\%1' outside of '\\%2' and '\\%3'")
+ .arg(cmdName(cmd), cmdName(CMD_LIST), cmdName(CMD_TABLE)));
+ break;
+ case CMD_OMIT:
+ getUntilEnd(cmd);
+ break;
+ case CMD_OMITVALUE: {
+ leavePara();
+ p1 = getArgument();
+ if (!m_private->m_enumItemList.contains(p1))
+ m_private->m_enumItemList.append(p1);
+ if (!m_private->m_omitEnumItemList.contains(p1))
+ m_private->m_omitEnumItemList.append(p1);
+ skipSpacesOrOneEndl();
+ // Skip potential description paragraph
+ while (m_position < m_inputLength && !isBlankLine()) {
+ skipAllSpaces();
+ if (qsizetype pos = m_position; pos < m_input.size()
+ && m_input.at(pos++).unicode() == '\\') {
+ QString nextCmdStr;
+ while (pos < m_input.size() && m_input[pos].isLetterOrNumber())
+ nextCmdStr += m_input[pos++];
+ int nextCmd = s_utilities.cmdHash.value(cmdStr, NOT_A_CMD);
+ if (nextCmd == cmd || nextCmd == CMD_VALUE)
+ break;
+ }
+ getRestOfLine();
+ }
+ break;
+ }
+ case CMD_COMPARESWITH:
+ leavePara();
+ p1 = getRestOfLine();
+ if (openCommand(cmd))
+ appendAtom(Atom(Atom::ComparesLeft, p1));
+ break;
+ case CMD_ENDCOMPARESWITH:
+ if (closeCommand(cmd)) {
+ leavePara();
+ appendAtom(Atom(Atom::ComparesRight));
+ processComparesWithCommand(m_private, location());
+ }
+ break;
+ case CMD_PRINTLINE: {
+ leavePara();
+ QString rest = getRestOfLine();
+ if (s_quoting) {
+ appendAtom(Atom(Atom::CodeQuoteCommand, cmdStr));
+ appendAtom(Atom(Atom::CodeQuoteArgument, rest));
+ }
+ appendToCode(m_quoter.quoteLine(location(), cmdStr, rest));
+ break;
+ }
+ case CMD_PRINTTO: {
+ leavePara();
+ QString rest = getRestOfLine();
+ if (s_quoting) {
+ appendAtom(Atom(Atom::CodeQuoteCommand, cmdStr));
+ appendAtom(Atom(Atom::CodeQuoteArgument, rest));
+ }
+ appendToCode(m_quoter.quoteTo(location(), cmdStr, rest));
+ break;
+ }
+ case CMD_PRINTUNTIL: {
+ leavePara();
+ QString rest = getRestOfLine();
+ if (s_quoting) {
+ appendAtom(Atom(Atom::CodeQuoteCommand, cmdStr));
+ appendAtom(Atom(Atom::CodeQuoteArgument, rest));
+ }
+ appendToCode(m_quoter.quoteUntil(location(), cmdStr, rest));
+ break;
+ }
+ case CMD_QUOTATION:
+ if (openCommand(cmd)) {
+ leavePara();
+ appendAtom(Atom(Atom::QuotationLeft));
+ }
+ break;
+ case CMD_QUOTEFILE: {
+ leavePara();
+
+ QString fileName = getArgument();
+ quoteFromFile(fileName);
+ if (s_quoting) {
+ appendAtom(Atom(Atom::CodeQuoteCommand, cmdStr));
+ appendAtom(Atom(Atom::CodeQuoteArgument, fileName));
+ }
+ appendAtom(Atom(Atom::Code, m_quoter.quoteTo(location(), cmdStr, QString())));
+ m_quoter.reset();
+ break;
+ }
+ case CMD_QUOTEFROMFILE: {
+ leavePara();
+ QString arg = getArgument();
+ if (s_quoting) {
+ appendAtom(Atom(Atom::CodeQuoteCommand, cmdStr));
+ appendAtom(Atom(Atom::CodeQuoteArgument, arg));
+ }
+ quoteFromFile(arg);
+ break;
+ }
+ case CMD_RAW:
+ leavePara();
+ p1 = getRestOfLine();
+ if (p1.isEmpty())
+ location().warning(QStringLiteral("Missing format name after '\\%1'")
+ .arg(cmdName(CMD_RAW)));
+ appendAtom(Atom(Atom::FormatIf, p1));
+ appendAtom(Atom(Atom::RawString, untabifyEtc(getUntilEnd(cmd))));
+ appendAtom(Atom(Atom::FormatElse));
+ appendAtom(Atom(Atom::FormatEndif));
+ break;
+ case CMD_ROW:
+ if (m_openedCommands.top() == CMD_TABLE) {
+ p1.clear();
+ if (isLeftBraceAhead())
+ p1 = getArgument(true);
+ leaveTableRow();
+ appendAtom(Atom(Atom::TableRowLeft, p1));
+ m_inTableRow = true;
+ } else {
+ if (m_openedCommands.contains(CMD_TABLE))
+ location().warning(QStringLiteral("Cannot use '\\%1' within '\\%2'")
+ .arg(cmdName(CMD_ROW),
+ cmdName(m_openedCommands.top())));
+ else
+ location().warning(QStringLiteral("Cannot use '\\%1' outside of '\\%2'")
+ .arg(cmdName(CMD_ROW), cmdName(CMD_TABLE)));
+ }
+ break;
+ case CMD_SA:
+ parseAlso();
+ break;
+ case CMD_SECTION1:
+ startSection(Doc::Section1, cmd);
+ break;
+ case CMD_SECTION2:
+ startSection(Doc::Section2, cmd);
+ break;
+ case CMD_SECTION3:
+ startSection(Doc::Section3, cmd);
+ break;
+ case CMD_SECTION4:
+ startSection(Doc::Section4, cmd);
+ break;
+ case CMD_SIDEBAR:
+ if (openCommand(cmd)) {
+ leavePara();
+ appendAtom(Atom(Atom::SidebarLeft));
+ }
+ break;
+ case CMD_SKIPLINE: {
+ leavePara();
+ QString rest = getRestOfLine();
+ if (s_quoting) {
+ appendAtom(Atom(Atom::CodeQuoteCommand, cmdStr));
+ appendAtom(Atom(Atom::CodeQuoteArgument, rest));
+ }
+ m_quoter.quoteLine(location(), cmdStr, rest);
+ break;
+ }
+ case CMD_SKIPTO: {
+ leavePara();
+ QString rest = getRestOfLine();
+ if (s_quoting) {
+ appendAtom(Atom(Atom::CodeQuoteCommand, cmdStr));
+ appendAtom(Atom(Atom::CodeQuoteArgument, rest));
+ }
+ m_quoter.quoteTo(location(), cmdStr, rest);
+ break;
+ }
+ case CMD_SKIPUNTIL: {
+ leavePara();
+ QString rest = getRestOfLine();
+ if (s_quoting) {
+ appendAtom(Atom(Atom::CodeQuoteCommand, cmdStr));
+ appendAtom(Atom(Atom::CodeQuoteArgument, rest));
+ }
+ m_quoter.quoteUntil(location(), cmdStr, rest);
+ break;
+ }
+ case CMD_SPAN:
+ p1 = ATOM_FORMATTING_SPAN + getArgument(true);
+ startFormat(p1, cmd);
+ break;
+ case CMD_SNIPPET: {
+ leavePara();
+ QString snippet = getArgument();
+ QString identifier = getRestOfLine();
+ if (s_quoting) {
+ appendAtom(Atom(Atom::SnippetCommand, cmdStr));
+ appendAtom(Atom(Atom::SnippetLocation, snippet));
+ appendAtom(Atom(Atom::SnippetIdentifier, identifier));
+ }
+ marker = CodeMarker::markerForFileName(snippet);
+ quoteFromFile(snippet);
+ appendToCode(m_quoter.quoteSnippet(location(), identifier), marker->atomType());
+ break;
+ }
+ case CMD_SUB:
+ startFormat(ATOM_FORMATTING_SUBSCRIPT, cmd);
+ break;
+ case CMD_SUP:
+ startFormat(ATOM_FORMATTING_SUPERSCRIPT, cmd);
+ break;
+ case CMD_TABLE:
+ leaveValueList();
+ p1 = getOptionalArgument();
+ p2 = getOptionalArgument();
+ if (openCommand(cmd)) {
+ leavePara();
+ appendAtom(Atom(Atom::TableLeft, p1, p2));
+ m_inTableHeader = false;
+ m_inTableRow = false;
+ m_inTableItem = false;
+ }
+ break;
+ case CMD_TABLEOFCONTENTS:
+ p1 = "1";
+ if (isLeftBraceAhead())
+ p1 = getArgument();
+ p1 += QLatin1Char(',');
+ p1 += QString::number((int)getSectioningUnit());
+ appendAtom(Atom(Atom::TableOfContents, p1));
+ break;
+ case CMD_TARGET:
+ if (m_openedCommands.top() == CMD_TABLE && !m_inTableItem) {
+ location().warning("Found a \\target command outside table item in a table.\n"
+ "Move the \\target inside the \\li to resolve this warning.");
+ }
+ insertTarget(getRestOfLine());
+ break;
+ case CMD_TT:
+ startFormat(ATOM_FORMATTING_TELETYPE, cmd);
+ break;
+ case CMD_UICONTROL:
+ startFormat(ATOM_FORMATTING_UICONTROL, cmd);
+ break;
+ case CMD_UNDERLINE:
+ startFormat(ATOM_FORMATTING_UNDERLINE, cmd);
+ break;
+ case CMD_UNICODE: {
+ enterPara();
+ p1 = getArgument();
+ bool ok;
+ uint unicodeChar = p1.toUInt(&ok, 0);
+ if (!ok || (unicodeChar == 0x0000) || (unicodeChar > 0xFFFE))
+ location().warning(
+ QStringLiteral("Invalid Unicode character '%1' specified with '%2'")
+ .arg(p1, cmdName(CMD_UNICODE)));
+ else
+ appendAtom(Atom(Atom::String, QChar(unicodeChar)));
+ break;
+ }
+ case CMD_VALUE:
+ leaveValue();
+ if (m_openedLists.top().style() == OpenedList::Value) {
+ QString p2;
+ p1 = getArgument();
+ if (p1.startsWith(QLatin1String("[since "))
+ && p1.endsWith(QLatin1String("]"))) {
+ p2 = p1.mid(7, p1.size() - 8);
+ p1 = getArgument();
+ }
+ if (!m_private->m_enumItemList.contains(p1))
+ m_private->m_enumItemList.append(p1);
+
+ m_openedLists.top().next();
+ appendAtom(Atom(Atom::ListTagLeft, ATOM_LIST_VALUE));
+ appendAtom(Atom(Atom::String, p1));
+ appendAtom(Atom(Atom::ListTagRight, ATOM_LIST_VALUE));
+ if (!p2.isEmpty()) {
+ appendAtom(Atom(Atom::SinceTagLeft, ATOM_LIST_VALUE));
+ appendAtom(Atom(Atom::String, p2));
+ appendAtom(Atom(Atom::SinceTagRight, ATOM_LIST_VALUE));
+ }
+ appendAtom(Atom(Atom::ListItemLeft, ATOM_LIST_VALUE));
+
+ skipSpacesOrOneEndl();
+ if (isBlankLine())
+ appendAtom(Atom(Atom::Nop));
+ } else {
+ // ### unknown problems
+ }
+ break;
+ case CMD_WARNING:
+ leavePara();
+ enterPara(Atom::WarningLeft, Atom::WarningRight);
+ break;
+ case CMD_OVERLOAD:
+ leavePara();
+ m_private->m_metacommandsUsed.insert(cmdStr);
+ p1.clear();
+ if (!isBlankLine())
+ p1 = getRestOfLine();
+ if (!p1.isEmpty()) {
+ appendAtom(Atom(Atom::ParaLeft));
+ appendAtom(Atom(Atom::String, "This function overloads "));
+ appendAtom(Atom(Atom::AutoLink, p1));
+ appendAtom(Atom(Atom::String, "."));
+ appendAtom(Atom(Atom::ParaRight));
+ } else {
+ appendAtom(Atom(Atom::ParaLeft));
+ appendAtom(Atom(Atom::String, "This is an overloaded function."));
+ appendAtom(Atom(Atom::ParaRight));
+ p1 = getMetaCommandArgument(cmdStr);
+ }
+ m_private->m_metaCommandMap[cmdStr].append(ArgPair(p1, QString()));
+ break;
+ case NOT_A_CMD:
+ if (metaCommandSet.contains(cmdStr)) {
+ QString arg;
+ QString bracketedArg;
+ m_private->m_metacommandsUsed.insert(cmdStr);
+ if (isLeftBracketAhead())
+ bracketedArg = getBracketedArgument();
+ // Force a linebreak after \obsolete or \deprecated
+ // to treat potential arguments as a new text paragraph.
+ if (m_position < m_inputLength
+ && (cmdStr == QLatin1String("obsolete")
+ || cmdStr == QLatin1String("deprecated")))
+ m_input[m_position] = '\n';
+ else
+ arg = getMetaCommandArgument(cmdStr);
+ m_private->m_metaCommandMap[cmdStr].append(ArgPair(arg, bracketedArg));
+ if (possibleTopics.contains(cmdStr)) {
+ if (!cmdStr.endsWith(QLatin1String("propertygroup")))
+ m_private->m_topics.append(Topic(cmdStr, arg));
+ }
+ } else if (s_utilities.macroHash.contains(cmdStr)) {
+ const Macro &macro = s_utilities.macroHash.value(cmdStr);
+ QStringList macroArgs;
+ int numPendingFi = 0;
+ int numFormatDefs = 0;
+ for (auto it = macro.m_otherDefs.constBegin();
+ it != macro.m_otherDefs.constEnd(); ++it) {
+ if (it.key() != "match") {
+ if (numFormatDefs == 0)
+ macroArgs = getMacroArguments(cmdStr, macro);
+ appendAtom(Atom(Atom::FormatIf, it.key()));
+ expandMacro(*it, macroArgs);
+ ++numFormatDefs;
+ if (it == macro.m_otherDefs.constEnd()) {
+ appendAtom(Atom(Atom::FormatEndif));
+ } else {
+ appendAtom(Atom(Atom::FormatElse));
+ ++numPendingFi;
+ }
+ }
+ }
+ while (numPendingFi-- > 0)
+ appendAtom(Atom(Atom::FormatEndif));
+
+ if (!macro.m_defaultDef.isEmpty()) {
+ if (numFormatDefs > 0) {
+ macro.m_defaultDefLocation.warning(
+ QStringLiteral("Macro cannot have both "
+ "format-specific and qdoc-"
+ "syntax definitions"));
+ } else {
+ QString expanded = expandMacroToString(cmdStr, macro);
+ m_input.replace(m_backslashPosition,
+ m_endPosition - m_backslashPosition, expanded);
+ m_inputLength = m_input.size();
+ m_position = m_backslashPosition;
+ }
+ }
+ } else if (isAutoLinkString(cmdStr)) {
+ appendWord(cmdStr);
+ } else {
+ if (!cmdStr.endsWith("propertygroup")) {
+ // The QML property group commands are no longer required
+ // for grouping QML properties. They are allowed but ignored.
+ location().warning(QStringLiteral("Unknown command '\\%1'").arg(cmdStr),
+ detailsUnknownCommand(metaCommandSet, cmdStr));
+ }
+ enterPara();
+ appendAtom(Atom(Atom::UnknownCommand, cmdStr));
+ }
+ }
+ } // case '\\' (qdoc markup command)
+ break;
+ }
+ case '-': { // Catch en-dash (--) and em-dash (---) markup here.
+ enterPara();
+ qsizetype dashCount = 1;
+ ++m_position;
+
+ // Figure out how many hyphens in a row.
+ while ((m_position < m_inputLength) && (m_input.at(m_position) == '-')) {
+ ++dashCount;
+ ++m_position;
+ }
+
+ if (dashCount == 3) {
+ // 3 hyphens, append an em-dash character.
+ const QChar emDash(8212);
+ appendChar(emDash);
+ } else if (dashCount == 2) {
+ // 2 hyphens; append an en-dash character.
+ const QChar enDash(8211);
+ appendChar(enDash);
+ } else {
+ // dashCount is either one or more than three. Append a hyphen
+ // the appropriate number of times. This ensures '----' doesn't
+ // end up as an em-dash followed by a hyphen in the output.
+ for (qsizetype i = 0; i < dashCount; ++i)
+ appendChar('-');
+ }
+ break;
+ }
+ case '{':
+ enterPara();
+ appendChar('{');
+ ++m_braceDepth;
+ ++m_position;
+ break;
+ case '}': {
+ --m_braceDepth;
+ ++m_position;
+
+ auto format = m_pendingFormats.find(m_braceDepth);
+ if (format == m_pendingFormats.end()) {
+ enterPara();
+ appendChar('}');
+ } else {
+ appendAtom(Atom(Atom::FormattingRight, *format));
+ if (*format == ATOM_FORMATTING_INDEX) {
+ if (m_indexStartedParagraph)
+ skipAllSpaces();
+ } else if (*format == ATOM_FORMATTING_LINK) {
+ // hack for C++ to support links like
+ // \l{QString::}{count()}
+ if (currentLinkAtom && currentLinkAtom->string().endsWith("::")) {
+ QString suffix =
+ Text::subText(currentLinkAtom, m_private->m_text.lastAtom())
+ .toString();
+ currentLinkAtom->concatenateString(suffix);
+ }
+ currentLinkAtom = nullptr;
+ }
+ m_pendingFormats.erase(format);
+ }
+ break;
+ }
+ // Do not parse content after '//!' comments
+ case '/': {
+ if (m_position + 2 < m_inputLength)
+ if (m_input.at(m_position + 1) == '/')
+ if (m_input.at(m_position + 2) == '!') {
+ m_position += 2;
+ getRestOfLine();
+ if (m_input.at(m_position - 1) == '\n')
+ --m_position;
+ break;
+ }
+ Q_FALLTHROUGH(); // fall through
+ }
+ default: {
+ bool newWord;
+ switch (m_private->m_text.lastAtom()->type()) {
+ case Atom::ParaLeft:
+ newWord = true;
+ break;
+ default:
+ newWord = false;
+ }
+
+ if (m_paragraphState == OutsideParagraph) {
+ if (ch.isSpace()) {
+ ++m_position;
+ newWord = false;
+ } else {
+ enterPara();
+ newWord = true;
+ }
+ } else {
+ if (ch.isSpace()) {
+ ++m_position;
+ if ((ch == '\n')
+ && (m_paragraphState == InSingleLineParagraph || isBlankLine())) {
+ leavePara();
+ newWord = false;
+ } else {
+ appendChar(' ');
+ newWord = true;
+ }
+ } else {
+ newWord = true;
+ }
+ }
+
+ if (newWord) {
+ qsizetype startPos = m_position;
+ // No auto-linking inside links
+ bool autolink = (!m_pendingFormats.isEmpty() &&
+ m_pendingFormats.last() == ATOM_FORMATTING_LINK) ?
+ false : isAutoLinkString(m_input, m_position);
+ if (m_position == startPos) {
+ if (!ch.isSpace()) {
+ appendChar(ch);
+ ++m_position;
+ }
+ } else {
+ QString word = m_input.mid(startPos, m_position - startPos);
+ if (autolink) {
+ if (s_ignoreWords.contains(word) || word.startsWith(QString("__")))
+ appendWord(word);
+ else
+ appendAtom(Atom(Atom::AutoLink, word));
+ } else {
+ appendWord(word);
+ }
+ }
+ }
+ } // default:
+ } // switch (ch.unicode())
+ }
+ leaveValueList();
+
+ // for compatibility
+ if (m_openedCommands.top() == CMD_LEGALESE) {
+ appendAtom(Atom(Atom::LegaleseRight));
+ m_openedCommands.pop();
+ }
+
+ if (m_openedCommands.top() != CMD_OMIT) {
+ location().warning(
+ QStringLiteral("Missing '\\%1'").arg(endCmdName(m_openedCommands.top())));
+ } else if (preprocessorSkipping.size() > 0) {
+ location().warning(QStringLiteral("Missing '\\%1'").arg(cmdName(CMD_ENDIF)));
+ }
+
+ if (m_currentSection > Doc::NoSection) {
+ appendAtom(Atom(Atom::SectionRight, QString::number(m_currentSection)));
+ m_currentSection = Doc::NoSection;
+ }
+
+ m_private->m_text.stripFirstAtom();
+}
+
+/*!
+ Returns the current location.
+ */
+Location &DocParser::location()
+{
+ while (!m_openedInputs.isEmpty() && m_openedInputs.top() <= m_position) {
+ m_cachedLocation.pop();
+ m_cachedPosition = m_openedInputs.pop();
+ }
+ while (m_cachedPosition < m_position)
+ m_cachedLocation.advance(m_input.at(m_cachedPosition++));
+ return m_cachedLocation;
+}
+
+QString DocParser::detailsUnknownCommand(const QSet<QString> &metaCommandSet, const QString &str)
+{
+ QSet<QString> commandSet = metaCommandSet;
+ int i = 0;
+ while (cmds[i].name != nullptr) {
+ commandSet.insert(cmds[i].name);
+ ++i;
+ }
+
+ QString best = nearestName(str, commandSet);
+ if (best.isEmpty())
+ return QString();
+ return QStringLiteral("Maybe you meant '\\%1'?").arg(best);
+}
+
+/*!
+ \internal
+
+ Issues a warning about the duplicate definition of a target or keyword in
+ at \a location. \a duplicateDefinition is the target being processed; the
+ already registered definition is \a previousDefinition.
+ */
+static void warnAboutPreexistingTarget(const Location &location, const QString &duplicateDefinition, const QString &previousDefinition)
+{
+ location.warning(
+ QStringLiteral("Duplicate target name '%1'. The previous occurrence is here: %2")
+ .arg(duplicateDefinition, previousDefinition));
+}
+
+/*!
+ \internal
+
+ \brief Registers \a target as a linkable entity.
+
+ The main purpose of this method is to register a target as defined
+ along with its location, so that becomes a valid link target from other
+ parts of the documentation.
+
+ If the \a target name is already registered, a warning is issued,
+ as multiple definitions are problematic.
+
+ \sa insertKeyword, target-command
+ */
+void DocParser::insertTarget(const QString &target)
+{
+ if (m_targetMap.contains(target))
+ return warnAboutPreexistingTarget(location(), target, m_targetMap[target].toString());
+
+ m_targetMap.insert(target, location());
+ m_private->constructExtra();
+
+ appendAtom(Atom(Atom::Target, target));
+ m_private->extra->m_targets.append(m_private->m_text.lastAtom());
+}
+
+/*!
+ \internal
+
+ \brief Registers \a keyword as a linkable entity.
+
+ The main purpose of this method is to register a keyword as defined
+ along with its location, so that becomes a valid link target from other
+ parts of the documentation.
+
+ If the \a keyword name is already registered, a warning is issued,
+ as multiple definitions are problematic.
+
+ \sa insertTarget, keyword-command
+ */
+void DocParser::insertKeyword(const QString &keyword)
+{
+ if (m_targetMap.contains(keyword))
+ return warnAboutPreexistingTarget(location(), keyword, m_targetMap[keyword].toString());
+
+ m_targetMap.insert(keyword, location());
+ m_private->constructExtra();
+
+ appendAtom(Atom(Atom::Keyword, keyword));
+ m_private->extra->m_keywords.append(m_private->m_text.lastAtom());
+}
+
+void DocParser::include(const QString &fileName, const QString &identifier, const QStringList &parameters)
+{
+ if (location().depth() > 16)
+ location().fatal(QStringLiteral("Too many nested '\\%1's").arg(cmdName(CMD_INCLUDE)));
+ QString filePath = Config::instance().getIncludeFilePath(fileName);
+ if (filePath.isEmpty()) {
+ location().warning(QStringLiteral("Cannot find qdoc include file '%1'").arg(fileName));
+ } else {
+ QFile inFile(filePath);
+ if (!inFile.open(QFile::ReadOnly)) {
+ location().warning(
+ QStringLiteral("Cannot open qdoc include file '%1'").arg(filePath));
+ } else {
+ location().push(fileName);
+ QTextStream inStream(&inFile);
+ QString includedContent = inStream.readAll();
+ inFile.close();
+
+ if (identifier.isEmpty()) {
+ expandArgumentsInString(includedContent, parameters);
+ m_input.insert(m_position, includedContent);
+ m_inputLength = m_input.size();
+ m_openedInputs.push(m_position + includedContent.size());
+ } else {
+ QStringList lineBuffer = includedContent.split(QLatin1Char('\n'));
+ qsizetype bufLen{lineBuffer.size()};
+ qsizetype i;
+ QStringView trimmedLine;
+ for (i = 0; i < bufLen; ++i) {
+ trimmedLine = QStringView{lineBuffer[i]}.trimmed();
+ if (trimmedLine.startsWith(QLatin1String("//!")) &&
+ trimmedLine.contains(identifier))
+ break;
+ }
+ if (i < bufLen - 1) {
+ ++i;
+ } else {
+ location().warning(
+ QStringLiteral("Cannot find '%1' in '%2'").arg(identifier, filePath));
+ return;
+ }
+ QString result;
+ do {
+ trimmedLine = QStringView{lineBuffer[i]}.trimmed();
+ if (trimmedLine.startsWith(QLatin1String("//!")) &&
+ trimmedLine.contains(identifier))
+ break;
+ else
+ result += lineBuffer[i] + QLatin1Char('\n');
+ ++i;
+ } while (i < bufLen);
+
+ expandArgumentsInString(result, parameters);
+ if (result.isEmpty()) {
+ location().warning(QStringLiteral("Empty qdoc snippet '%1' in '%2'")
+ .arg(identifier, filePath));
+ } else {
+ m_input.insert(m_position, result);
+ m_inputLength = m_input.size();
+ m_openedInputs.push(m_position + result.size());
+ }
+ }
+ }
+ }
+}
+
+void DocParser::startFormat(const QString &format, int cmd)
+{
+ enterPara();
+
+ for (const auto &item : std::as_const(m_pendingFormats)) {
+ if (item == format) {
+ location().warning(QStringLiteral("Cannot nest '\\%1' commands").arg(cmdName(cmd)));
+ return;
+ }
+ }
+
+ appendAtom(Atom(Atom::FormattingLeft, format));
+
+ if (isLeftBraceAhead()) {
+ skipSpacesOrOneEndl();
+ m_pendingFormats.insert(m_braceDepth, format);
+ ++m_braceDepth;
+ ++m_position;
+ } else {
+ appendAtom(Atom(Atom::String, getArgument()));
+ appendAtom(Atom(Atom::FormattingRight, format));
+ if (format == ATOM_FORMATTING_INDEX && m_indexStartedParagraph) {
+ skipAllSpaces();
+ m_indexStartedParagraph = false;
+ }
+ }
+}
+
+bool DocParser::openCommand(int cmd)
+{
+ int outer = m_openedCommands.top();
+ bool ok = true;
+
+ if (cmd == CMD_COMPARESWITH && m_openedCommands.contains(cmd)) {
+ location().warning(u"Cannot nest '\\%1' commands"_s.arg(cmdName(cmd)));
+ return false;
+ } else if (cmd != CMD_LINK) {
+ if (outer == CMD_LIST) {
+ ok = (cmd == CMD_FOOTNOTE || cmd == CMD_LIST);
+ } else if (outer == CMD_SIDEBAR) {
+ ok = (cmd == CMD_LIST || cmd == CMD_QUOTATION || cmd == CMD_SIDEBAR);
+ } else if (outer == CMD_QUOTATION) {
+ ok = (cmd == CMD_LIST);
+ } else if (outer == CMD_TABLE) {
+ ok = (cmd == CMD_LIST || cmd == CMD_FOOTNOTE || cmd == CMD_QUOTATION);
+ } else if (outer == CMD_FOOTNOTE || outer == CMD_LINK) {
+ ok = false;
+ }
+ }
+
+ if (ok) {
+ m_openedCommands.push(cmd);
+ } else {
+ location().warning(
+ QStringLiteral("Can't use '\\%1' in '\\%2'").arg(cmdName(cmd), cmdName(outer)));
+ }
+ return ok;
+}
+
+/*!
+ Returns \c true if \a word qualifies for auto-linking.
+
+ A word qualifies for auto-linking if either:
+
+ \list
+ \li It is composed of only upper and lowercase characters
+ \li AND It contains at least one uppercase character that is not
+ the first character of word
+ \li AND it contains at least two lowercase characters
+ \endlist
+
+ Or
+
+ \list
+ \li It is composed only of uppercase characters, lowercase
+ characters, characters in [_@] and the \c {"::"} sequence.
+ \li It contains at least one uppercase character that is not
+ the first character of word or it contains at least one
+ lowercase character
+ \li AND it contains at least one character in [_@] or it
+ contains at least one \c {"::"} sequence.
+ \endlist
+
+ Inserting or suffixing, but not prefixing, any sequence in [0-9]+
+ in a word that qualifies for auto-linking by the above rules
+ preserves the auto-linkability of the word.
+
+ Suffixing the sequence \c {"()"} to a word that qualifies for
+ auto-linking by the above rules preserves the auto-linkability of
+ a word.
+
+ FInally, a word qualifies for auto-linking if:
+
+ \list
+ \li It is composed of only uppercase characters, lowercase
+ characters and the sequence \c {"()"}
+ \li AND it contains one lowercase character and a sequence of zero, one
+ or two upper or lowercase characters
+ \li AND it contains exactly one sequence \c {"()"}
+ \li AND it contains one sequence \c {"()"} as the last two
+ characters of word
+ \endlist
+
+ For example, \c {"fOo"}, \c {"FooBar"} and \c {"foobaR"} qualify
+ for auto-linking by the first rule.
+
+ \c {"QT_DEBUG"}, \c {"::Qt"} and \c {"std::move"} qualifies for
+ auto-linking by the second rule.
+
+ \c {"SIMDVector256"} qualifies by suffixing \c {"SIMDVector"},
+ which qualifies by the first rule, with the sequence \c {"256"}
+
+ \c {"FooBar::Bar()"} qualifies by suffixing \c {"FooBar::Bar"},
+ which qualifies by the first and second rule, with the sequence \c
+ {"()"}.
+
+ \c {"Foo()"} and \c {"a()"} qualifies by the last rule.
+
+ Instead, \c {"Q"}, \c {"flower"}, \c {"_"} and \c {"()"} do not
+ qualify for auto-linking.
+
+ The rules are intended as a heuristic to catch common cases in the
+ Qt documentation where a word might represent an important
+ documented element such as a class or a method that could be
+ linked to while at the same time avoiding catching common words
+ such as \c {"A"} or \c {"Nonetheless"}.
+
+ The heuristic assumes that Qt's codebase respects a style where
+ camelCasing is the standard for most of the elements, a function
+ call is identified by the use of parenthesis and certain elements,
+ such as macros, might be fully uppercase.
+
+ Furthemore, it assumes that the Qt codebase is written in a
+ language that has an identifier grammar similar to the one for
+ C++.
+*/
+inline bool DocParser::isAutoLinkString(const QString &word)
+{
+ qsizetype start = 0;
+ return isAutoLinkString(word, start) && (start == word.size());
+}
+
+/*!
+ Returns \c true if a prefix of a substring of \a word qualifies
+ for auto-linking.
+
+ Respects the same parsing rules as the unary overload.
+
+ \a curPos defines the offset, from the first character of \ word,
+ at which the parsed substring starts.
+
+ When the call completes, \a curPos represents the offset, from the
+ first character of word, that is the successor of the offset of
+ the last parsed character.
+
+ If the return value of the call is \c true, it is guaranteed that
+ the prefix of the substring of \word that contains the characters
+ from the initial value of \a curPos and up to but not including \a
+ curPos qualifies for auto-linking.
+
+ If \a curPos is initially zero, the considered substring is the
+ entirety of \a word.
+*/
+bool DocParser::isAutoLinkString(const QString &word, qsizetype &curPos)
+{
+ qsizetype len = word.size();
+ qsizetype startPos = curPos;
+ int numUppercase = 0;
+ int numLowercase = 0;
+ int numStrangeSymbols = 0;
+
+ while (curPos < len) {
+ unsigned char latin1Ch = word.at(curPos).toLatin1();
+ if (islower(latin1Ch)) {
+ ++numLowercase;
+ ++curPos;
+ } else if (isupper(latin1Ch)) {
+ if (curPos > startPos)
+ ++numUppercase;
+ ++curPos;
+ } else if (isdigit(latin1Ch)) {
+ if (curPos > startPos)
+ ++curPos;
+ else
+ break;
+ } else if (latin1Ch == '_' || latin1Ch == '@') {
+ ++numStrangeSymbols;
+ ++curPos;
+ } else if ((latin1Ch == ':') && (curPos < len - 1)
+ && (word.at(curPos + 1) == QLatin1Char(':'))) {
+ ++numStrangeSymbols;
+ curPos += 2;
+ } else if (latin1Ch == '(') {
+ if ((curPos < len - 1) && (word.at(curPos + 1) == QLatin1Char(')'))) {
+ ++numStrangeSymbols;
+ m_position += 2;
+ }
+
+ break;
+ } else {
+ break;
+ }
+ }
+
+ return ((numUppercase >= 1 && numLowercase >= 2) || (numStrangeSymbols > 0 && (numUppercase + numLowercase >= 1)));
+}
+
+bool DocParser::closeCommand(int endCmd)
+{
+ if (endCmdFor(m_openedCommands.top()) == endCmd && m_openedCommands.size() > 1) {
+ m_openedCommands.pop();
+ return true;
+ } else {
+ bool contains = false;
+ QStack<int> opened2 = m_openedCommands;
+ while (opened2.size() > 1) {
+ if (endCmdFor(opened2.top()) == endCmd) {
+ contains = true;
+ break;
+ }
+ opened2.pop();
+ }
+
+ if (contains) {
+ while (endCmdFor(m_openedCommands.top()) != endCmd && m_openedCommands.size() > 1) {
+ location().warning(
+ QStringLiteral("Missing '\\%1' before '\\%2'")
+ .arg(endCmdName(m_openedCommands.top()), cmdName(endCmd)));
+ m_openedCommands.pop();
+ }
+ } else {
+ location().warning(QStringLiteral("Unexpected '\\%1'").arg(cmdName(endCmd)));
+ }
+ return false;
+ }
+}
+
+void DocParser::startSection(Doc::Sections unit, int cmd)
+{
+ leaveValueList();
+
+ if (m_currentSection == Doc::NoSection) {
+ m_currentSection = static_cast<Doc::Sections>(unit);
+ m_private->constructExtra();
+ } else {
+ endSection(unit, cmd);
+ }
+
+ appendAtom(Atom(Atom::SectionLeft, QString::number(unit)));
+ m_private->constructExtra();
+ m_private->extra->m_tableOfContents.append(m_private->m_text.lastAtom());
+ m_private->extra->m_tableOfContentsLevels.append(unit);
+ enterPara(Atom::SectionHeadingLeft, Atom::SectionHeadingRight, QString::number(unit));
+ m_currentSection = unit;
+}
+
+void DocParser::endSection(int, int) // (int unit, int endCmd)
+{
+ leavePara();
+ appendAtom(Atom(Atom::SectionRight, QString::number(m_currentSection)));
+ m_currentSection = (Doc::NoSection);
+}
+
+/*!
+ \internal
+ \brief Parses arguments to QDoc's see also command.
+
+ Parses space or comma separated arguments passed to the \\sa command.
+ Multi-line input requires that the arguments are comma separated. Wrap
+ arguments in curly braces for multi-word targets, and for scope resolution
+ (for example, {QString::}{count()}).
+
+ This method updates the list of links for the See also section.
+
+ \sa {DocPrivate::}{addAlso()}, getArgument()
+ */
+void DocParser::parseAlso()
+{
+ auto line_comment = [this]() -> bool {
+ skipSpacesOnLine();
+ if (m_position + 2 > m_inputLength)
+ return false;
+ if (m_input[m_position].unicode() == '/') {
+ if (m_input[m_position + 1].unicode() == '/') {
+ if (m_input[m_position + 2].unicode() == '!') {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+
+ auto skip_everything_until_newline = [this]() -> void {
+ while (m_position < m_inputLength && m_input[m_position] != '\n')
+ ++m_position;
+ };
+
+ leavePara();
+ skipSpacesOnLine();
+ while (m_position < m_inputLength && m_input[m_position] != '\n') {
+ QString target;
+ QString str;
+ bool skipMe = false;
+
+ if (m_input[m_position] == '{') {
+ target = getArgument();
+ skipSpacesOnLine();
+ if (m_position < m_inputLength && m_input[m_position] == '{') {
+ str = getArgument();
+
+ // hack for C++ to support links like \l{QString::}{count()}
+ if (target.endsWith("::"))
+ target += str;
+ } else {
+ str = target;
+ }
+ } else {
+ target = getArgument();
+ str = cleanLink(target);
+ if (target == QLatin1String("and") || target == QLatin1String("."))
+ skipMe = true;
+ }
+
+ if (!skipMe) {
+ Text also;
+ also << Atom(Atom::Link, target) << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
+ << str << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
+ m_private->addAlso(also);
+ }
+
+ skipSpacesOnLine();
+
+ if (line_comment())
+ skip_everything_until_newline();
+
+ if (m_position < m_inputLength && m_input[m_position] == ',') {
+ m_position++;
+ if (line_comment())
+ skip_everything_until_newline();
+ skipSpacesOrOneEndl();
+ } else if (m_position >= m_inputLength || m_input[m_position] != '\n') {
+ location().warning(QStringLiteral("Missing comma in '\\%1'").arg(cmdName(CMD_SA)));
+ }
+ }
+}
+
+void DocParser::appendAtom(const Atom& atom) {
+ m_private->m_text << atom;
+}
+
+void DocParser::appendAtom(const LinkAtom& atom) {
+ m_private->m_text << atom;
+}
+
+void DocParser::appendChar(QChar ch)
+{
+ if (m_private->m_text.lastAtom()->type() != Atom::String)
+ appendAtom(Atom(Atom::String));
+ Atom *atom = m_private->m_text.lastAtom();
+ if (ch == QLatin1Char(' ')) {
+ if (!atom->string().endsWith(QLatin1Char(' ')))
+ atom->appendChar(QLatin1Char(' '));
+ } else
+ atom->appendChar(ch);
+}
+
+void DocParser::appendWord(const QString &word)
+{
+ if (m_private->m_text.lastAtom()->type() != Atom::String) {
+ appendAtom(Atom(Atom::String, word));
+ } else
+ m_private->m_text.lastAtom()->concatenateString(word);
+}
+
+void DocParser::appendToCode(const QString &markedCode)
+{
+ if (!isCode(m_lastAtom)) {
+ appendAtom(Atom(Atom::Code));
+ m_lastAtom = m_private->m_text.lastAtom();
+ }
+ m_lastAtom->concatenateString(markedCode);
+}
+
+void DocParser::appendToCode(const QString &markedCode, Atom::AtomType defaultType)
+{
+ if (!isCode(m_lastAtom)) {
+ appendAtom(Atom(defaultType, markedCode));
+ m_lastAtom = m_private->m_text.lastAtom();
+ } else {
+ m_lastAtom->concatenateString(markedCode);
+ }
+}
+
+void DocParser::enterPara(Atom::AtomType leftType, Atom::AtomType rightType, const QString &string)
+{
+ if (m_paragraphState != OutsideParagraph)
+ return;
+
+ if ((m_private->m_text.lastAtom()->type() != Atom::ListItemLeft)
+ && (m_private->m_text.lastAtom()->type() != Atom::DivLeft)
+ && (m_private->m_text.lastAtom()->type() != Atom::DetailsLeft)) {
+ leaveValueList();
+ }
+
+ appendAtom(Atom(leftType, string));
+ m_indexStartedParagraph = false;
+ m_pendingParagraphLeftType = leftType;
+ m_pendingParagraphRightType = rightType;
+ m_pendingParagraphString = string;
+ if (leftType == Atom::SectionHeadingLeft) {
+ m_paragraphState = InSingleLineParagraph;
+ } else {
+ m_paragraphState = InMultiLineParagraph;
+ }
+ skipSpacesOrOneEndl();
+}
+
+void DocParser::leavePara()
+{
+ if (m_paragraphState == OutsideParagraph)
+ return;
+
+ if (!m_pendingFormats.isEmpty()) {
+ location().warning(QStringLiteral("Missing '}'"));
+ m_pendingFormats.clear();
+ }
+
+ if (m_private->m_text.lastAtom()->type() == m_pendingParagraphLeftType) {
+ m_private->m_text.stripLastAtom();
+ } else {
+ if (m_private->m_text.lastAtom()->type() == Atom::String
+ && m_private->m_text.lastAtom()->string().endsWith(QLatin1Char(' '))) {
+ m_private->m_text.lastAtom()->chopString();
+ }
+ appendAtom(Atom(m_pendingParagraphRightType, m_pendingParagraphString));
+ }
+ m_paragraphState = OutsideParagraph;
+ m_indexStartedParagraph = false;
+ m_pendingParagraphRightType = Atom::Nop;
+ m_pendingParagraphString.clear();
+}
+
+void DocParser::leaveValue()
+{
+ leavePara();
+ if (m_openedLists.isEmpty()) {
+ m_openedLists.push(OpenedList(OpenedList::Value));
+ appendAtom(Atom(Atom::ListLeft, ATOM_LIST_VALUE));
+ } else {
+ if (m_private->m_text.lastAtom()->type() == Atom::Nop)
+ m_private->m_text.stripLastAtom();
+ appendAtom(Atom(Atom::ListItemRight, ATOM_LIST_VALUE));
+ }
+}
+
+void DocParser::leaveValueList()
+{
+ leavePara();
+ if (!m_openedLists.isEmpty() && (m_openedLists.top().style() == OpenedList::Value)) {
+ if (m_private->m_text.lastAtom()->type() == Atom::Nop)
+ m_private->m_text.stripLastAtom();
+ appendAtom(Atom(Atom::ListItemRight, ATOM_LIST_VALUE));
+ appendAtom(Atom(Atom::ListRight, ATOM_LIST_VALUE));
+ m_openedLists.pop();
+ }
+}
+
+void DocParser::leaveTableRow()
+{
+ if (m_inTableItem) {
+ leavePara();
+ appendAtom(Atom(Atom::TableItemRight));
+ m_inTableItem = false;
+ }
+ if (m_inTableHeader) {
+ appendAtom(Atom(Atom::TableHeaderRight));
+ m_inTableHeader = false;
+ }
+ if (m_inTableRow) {
+ appendAtom(Atom(Atom::TableRowRight));
+ m_inTableRow = false;
+ }
+}
+
+void DocParser::quoteFromFile(const QString &filename)
+{
+ // KLUDGE: We dereference file_resolver as it is temporarily a pointer.
+ // See the comment for file_resolver in the header files for more context.
+ //
+ // We spefically dereference it, instead of using the arrow
+ // operator, to better represent that we do not consider this as
+ // an actual pointer, as it should not be.
+ //
+ // Do note that we are considering it informally safe to
+ // dereference the pointer, as we expect it to always hold a value
+ // at this point, but actual enforcement of this appears nowhere
+ // in the codebase.
+ auto maybe_resolved_file{(*file_resolver).resolve(filename)};
+ if (!maybe_resolved_file) {
+ // TODO: [uncentralized-admonition][failed-resolve-file]
+ // This warning is required in multiple places.
+ // To ensure the consistency of the warning and avoid
+ // duplicating code everywhere, provide a centralized effort
+ // where the warning message can be generated (but not
+ // issued).
+ // The current format is based on what was used before, review
+ // it when it is moved out.
+ QString details = std::transform_reduce(
+ (*file_resolver).get_search_directories().cbegin(),
+ (*file_resolver).get_search_directories().cend(),
+ u"Searched directories:"_s,
+ std::plus(),
+ [](const DirectoryPath &directory_path) -> QString { return u' ' + directory_path.value(); }
+ );
+
+ location().warning(u"Cannot find file to quote from: %1"_s.arg(filename), details);
+
+ // REMARK: The following is duplicated from
+ // Doc::quoteFromFile. If, for some reason (such as a file
+ // that is inaccessible), the quoting fails but, previously,
+ // the logic duplicated here was still run.
+ // This is not true anymore as quoteFromFile does require a
+ // resolved file to be run now.
+ // It is not entirely clear if this is required for the
+ // semantics of DocParser to be preserved, but for the sake of
+ // avoiding premature breakages this was retained.
+ // Do note that this should be considered temporary as the
+ // quoter state, if any will be preserved, should not be
+ // managed in such a spread and unlocal way.
+ m_quoter.reset();
+
+ CodeMarker *marker = CodeMarker::markerForFileName(QString{});
+ m_quoter.quoteFromFile(filename, QString{}, marker->markedUpCode(QString{}, nullptr, location()));
+ } else Doc::quoteFromFile(location(), m_quoter, *maybe_resolved_file);
+}
+
+/*!
+ 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.
+
+ \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
+ lines by escaping newlines. Escaping is also handled here.
+
+ Returns \c true on successful macro expansion.
+ */
+bool DocParser::expandMacro()
+{
+ Q_ASSERT(m_input[m_position].unicode() == '\\');
+
+ QString cmdStr;
+ qsizetype backslashPos = m_position++;
+ while (m_position < m_input.size() && m_input[m_position].isLetterOrNumber())
+ cmdStr += m_input[m_position++];
+
+ m_endPosition = m_position;
+ if (!cmdStr.isEmpty()) {
+ if (s_utilities.macroHash.contains(cmdStr)) {
+ const Macro &macro = s_utilities.macroHash.value(cmdStr);
+ if (!macro.m_defaultDef.isEmpty()) {
+ QString expanded = expandMacroToString(cmdStr, macro);
+ m_input.replace(backslashPos, m_position - backslashPos, expanded);
+ m_inputLength = m_input.size();
+ m_position = backslashPos;
+ return true;
+ } else {
+ location().warning(QStringLiteral("Macro '%1' does not have a default definition")
+ .arg(cmdStr));
+ }
+ } else {
+ location().warning(QStringLiteral("Unknown macro '%1'").arg(cmdStr));
+ m_position = ++backslashPos;
+ }
+ } else if (m_input[m_position].isSpace()) {
+ skipAllSpaces();
+ } else if (m_input[m_position].unicode() == '\\') {
+ // allow escaping a backslash
+ m_input.remove(m_position--, 1);
+ --m_inputLength;
+ }
+ return false;
+}
+
+void DocParser::expandMacro(const QString &def, const QStringList &args)
+{
+ if (args.isEmpty()) {
+ appendAtom(Atom(Atom::RawString, def));
+ } else {
+ QString rawString;
+
+ for (int j = 0; j < def.size(); ++j) {
+ if (int paramNo = def[j].unicode(); paramNo >= 1 && paramNo <= args.length()) {
+ if (!rawString.isEmpty()) {
+ appendAtom(Atom(Atom::RawString, rawString));
+ rawString.clear();
+ }
+ appendAtom(Atom(Atom::String, args[paramNo - 1]));
+ } else {
+ rawString += def[j];
+ }
+ }
+ if (!rawString.isEmpty())
+ appendAtom(Atom(Atom::RawString, rawString));
+ }
+}
+
+QString DocParser::expandMacroToString(const QString &name, const Macro &macro)
+{
+ const QString &def{macro.m_defaultDef};
+ QString rawString;
+
+ if (macro.numParams == 0) {
+ rawString = macro.m_defaultDef;
+ } else {
+ QStringList args{getMacroArguments(name, macro)};
+
+ for (int j = 0; j < def.size(); ++j) {
+ int paramNo = def[j].unicode();
+ rawString += (paramNo >= 1 && paramNo <= args.length()) ? args[paramNo - 1] : def[j];
+ }
+ }
+ QString matchExpr{macro.m_otherDefs.value("match")};
+ if (matchExpr.isEmpty())
+ return rawString;
+
+ QString result;
+ QRegularExpression re(matchExpr);
+ int capStart = (re.captureCount() > 0) ? 1 : 0;
+ qsizetype i = 0;
+ QRegularExpressionMatch match;
+ while ((match = re.match(rawString, i)).hasMatch()) {
+ for (int c = capStart; c <= re.captureCount(); ++c)
+ result += match.captured(c);
+ i = match.capturedEnd();
+ }
+
+ return result;
+}
+
+Doc::Sections DocParser::getSectioningUnit()
+{
+ QString name = getOptionalArgument();
+
+ if (name == "section1") {
+ return Doc::Section1;
+ } else if (name == "section2") {
+ return Doc::Section2;
+ } else if (name == "section3") {
+ return Doc::Section3;
+ } else if (name == "section4") {
+ return Doc::Section4;
+ } else if (name.isEmpty()) {
+ return Doc::NoSection;
+ } else {
+ location().warning(QStringLiteral("Invalid section '%1'").arg(name));
+ return Doc::NoSection;
+ }
+}
+
+/*!
+ Gets an argument that is enclosed in braces and returns it
+ without the enclosing braces. On entry, the current character
+ 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.
+ */
+QString DocParser::getBracedArgument(bool verbatim)
+{
+ QString arg;
+ int delimDepth = 0;
+ if (m_position < m_input.size() && m_input[m_position] == '{') {
+ ++m_position;
+ while (m_position < m_input.size() && delimDepth >= 0) {
+ switch (m_input[m_position].unicode()) {
+ case '{':
+ ++delimDepth;
+ arg += QLatin1Char('{');
+ ++m_position;
+ break;
+ case '}':
+ --delimDepth;
+ if (delimDepth >= 0)
+ arg += QLatin1Char('}');
+ ++m_position;
+ break;
+ case '\\':
+ if (verbatim || !expandMacro())
+ arg += m_input[m_position++];
+ break;
+ default:
+ if (m_input[m_position].isSpace() && !verbatim)
+ arg += QChar(' ');
+ else
+ arg += m_input[m_position];
+ ++m_position;
+ }
+ }
+ if (delimDepth > 0)
+ location().warning(QStringLiteral("Missing '}'"));
+ }
+ m_endPosition = m_position;
+ return arg;
+}
+
+/*!
+ Typically, an argument ends at the next white-space. However,
+ braces can be used to group words:
+
+ {a few words}
+
+ Also, opening and closing parentheses have to match. Thus,
+
+ printf("%d\n", x)
+
+ 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)
+{
+ skipSpacesOrOneEndl();
+
+ int delimDepth = 0;
+ qsizetype startPos = m_position;
+ QString arg = getBracedArgument(verbatim);
+ if (arg.isEmpty()) {
+ while ((m_position < m_input.size())
+ && ((delimDepth > 0) || ((delimDepth == 0) && !m_input[m_position].isSpace()))) {
+ switch (m_input[m_position].unicode()) {
+ case '(':
+ case '[':
+ case '{':
+ ++delimDepth;
+ arg += m_input[m_position];
+ ++m_position;
+ break;
+ case ')':
+ case ']':
+ case '}':
+ --delimDepth;
+ if (m_position == startPos || delimDepth >= 0) {
+ arg += m_input[m_position];
+ ++m_position;
+ }
+ break;
+ case '\\':
+ if (verbatim || !expandMacro())
+ arg += m_input[m_position++];
+ break;
+ default:
+ arg += m_input[m_position];
+ ++m_position;
+ }
+ }
+ m_endPosition = m_position;
+ if ((arg.size() > 1) && (QString(".,:;!?").indexOf(m_input[m_position - 1]) != -1)
+ && !arg.endsWith("...")) {
+ arg.truncate(arg.size() - 1);
+ --m_position;
+ }
+ if (arg.size() > 2 && m_input.mid(m_position - 2, 2) == "'s") {
+ arg.truncate(arg.size() - 2);
+ m_position -= 2;
+ }
+ }
+ return arg.simplified();
+}
+
+/*!
+ Gets an argument that is enclosed in brackets and returns it
+ without the enclosing brackets. On entry, the current character
+ is the left bracket. On exit, the current character is the one
+ that comes after the right bracket.
+ */
+QString DocParser::getBracketedArgument()
+{
+ QString arg;
+ int delimDepth = 0;
+ skipSpacesOrOneEndl();
+ if (m_position < m_input.size() && m_input[m_position] == '[') {
+ ++m_position;
+ while (m_position < m_input.size() && delimDepth >= 0) {
+ switch (m_input[m_position].unicode()) {
+ case '[':
+ ++delimDepth;
+ arg += QLatin1Char('[');
+ ++m_position;
+ break;
+ case ']':
+ --delimDepth;
+ if (delimDepth >= 0)
+ arg += QLatin1Char(']');
+ ++m_position;
+ break;
+ case '\\':
+ arg += m_input[m_position];
+ ++m_position;
+ break;
+ default:
+ arg += m_input[m_position];
+ ++m_position;
+ }
+ }
+ if (delimDepth > 0)
+ location().warning(QStringLiteral("Missing ']'"));
+ }
+ return arg;
+}
+
+
+/*!
+ Returns the list of arguments passed to a \a macro with name \a name.
+
+ If a macro takes more than a single argument, they are expected to be
+ wrapped in braces.
+*/
+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();
+ } else {
+ location().warning(QStringLiteral("Macro '\\%1' invoked with too few"
+ " arguments (expected %2, got %3)")
+ .arg(name)
+ .arg(macro.numParams)
+ .arg(i));
+ break;
+ }
+ }
+ return args;
+}
+
+QString DocParser::getOptionalArgument()
+{
+ skipSpacesOrOneEndl();
+ if (m_position + 1 < m_input.size() && m_input[m_position] == '\\'
+ && m_input[m_position + 1].isLetterOrNumber()) {
+ return QString();
+ } else {
+ return getArgument();
+ }
+}
+
+/*!
+ \brief Create a string that may optionally span multiple lines as one line.
+
+ Process a block of text that may span multiple lines using trailing
+ backslashes (`\`) as line continuation character. Trailing backslashes and
+ any newline character that follow them are removed.
+
+ Returns a string as if it was one continuous line of text. If trailing
+ backslashes are removed, the method returns a "simplified" QString, which
+ means any sequence of internal whitespace is replaced with a single space.
+
+ Whitespace at the start and end is always removed from the returned string.
+
+ \sa QString::simplified(), QString::trimmed().
+ */
+QString DocParser::getRestOfLine()
+{
+ auto lineHasTrailingBackslash = [this](bool trailingBackslash) -> bool {
+ while (m_position < m_inputLength && m_input[m_position] != '\n') {
+ if (m_input[m_position] == '\\' && !trailingBackslash) {
+ trailingBackslash = true;
+ ++m_position;
+ skipSpacesOnLine();
+ } else {
+ trailingBackslash = false;
+ ++m_position;
+ }
+ }
+ return trailingBackslash;
+ };
+
+ QString rest_of_line;
+ skipSpacesOnLine();
+ bool trailing_backslash{ false };
+ bool return_simplified_string{ false };
+
+ for (qsizetype start_position = m_position; m_position < m_inputLength; ++m_position) {
+ trailing_backslash = lineHasTrailingBackslash(trailing_backslash);
+
+ if (!rest_of_line.isEmpty())
+ rest_of_line += QLatin1Char(' ');
+ rest_of_line += m_input.sliced(start_position, m_position - start_position);
+
+ if (trailing_backslash) {
+ rest_of_line.truncate(rest_of_line.lastIndexOf('\\'));
+ return_simplified_string = true;
+ }
+
+ if (m_position < m_inputLength)
+ ++m_position;
+
+ if (!trailing_backslash)
+ break;
+ start_position = m_position;
+ }
+
+ if (return_simplified_string)
+ return rest_of_line.simplified();
+
+ return rest_of_line.trimmed();
+}
+
+/*!
+ The metacommand argument is normally the remaining text to
+ the right of the metacommand itself. The extra blanks are
+ stripped and the argument string is returned.
+ */
+QString DocParser::getMetaCommandArgument(const QString &cmdStr)
+{
+ skipSpacesOnLine();
+
+ qsizetype begin = m_position;
+ int parenDepth = 0;
+
+ while (m_position < m_input.size() && (m_input[m_position] != '\n' || parenDepth > 0)) {
+ if (m_input.at(m_position) == '(')
+ ++parenDepth;
+ else if (m_input.at(m_position) == ')')
+ --parenDepth;
+ else if (m_input.at(m_position) == '\\' && expandMacro())
+ continue;
+ ++m_position;
+ }
+ if (m_position == m_input.size() && parenDepth > 0) {
+ m_position = begin;
+ location().warning(QStringLiteral("Unbalanced parentheses in '%1'").arg(cmdStr));
+ }
+
+ QString t = m_input.mid(begin, m_position - begin).simplified();
+ skipSpacesOnLine();
+ return t;
+}
+
+QString DocParser::getUntilEnd(int cmd)
+{
+ int endCmd = endCmdFor(cmd);
+ QRegularExpression rx("\\\\" + cmdName(endCmd) + "\\b");
+ QString t;
+ auto match = rx.match(m_input, m_position);
+
+ if (!match.hasMatch()) {
+ location().warning(QStringLiteral("Missing '\\%1'").arg(cmdName(endCmd)));
+ m_position = m_input.size();
+ } else {
+ qsizetype end = match.capturedStart();
+ t = m_input.mid(m_position, end - m_position);
+ m_position = match.capturedEnd();
+ }
+ return t;
+}
+
+void DocParser::expandArgumentsInString(QString &str, const QStringList &args)
+{
+ if (args.isEmpty())
+ return;
+
+ qsizetype paramNo;
+ qsizetype j = 0;
+ while (j < str.size()) {
+ if (str[j] == '\\' && j < str.size() - 1 && (paramNo = str[j + 1].digitValue()) >= 1
+ && paramNo <= args.size()) {
+ const QString &r = args[paramNo - 1];
+ str.replace(j, 2, r);
+ j += qMin(1, r.size());
+ } else {
+ ++j;
+ }
+ }
+}
+
+/*!
+ Returns the marked-up code following the code-quoting command \a cmd, expanding
+ any arguments passed in \a argStr.
+
+ Uses the \a marker to mark up the code. If it's \c nullptr, resolve the marker
+ based on the topic and the quoted code itself.
+*/
+QString DocParser::getCode(int cmd, CodeMarker *marker, const QString &argStr)
+{
+ QString code = untabifyEtc(getUntilEnd(cmd));
+ expandArgumentsInString(code, argStr.split(" ", Qt::SkipEmptyParts));
+
+ int indent = indentLevel(code);
+ code = dedent(indent, code);
+
+ // If we're in a QML topic, check if the QML marker recognizes the code
+ if (!marker && !m_private->m_topics.isEmpty()
+ && m_private->m_topics[0].m_topic.startsWith("qml")) {
+ auto qmlMarker = CodeMarker::markerForLanguage("QML");
+ marker = (qmlMarker && qmlMarker->recognizeCode(code)) ? qmlMarker : nullptr;
+ }
+ if (marker == nullptr)
+ marker = CodeMarker::markerForCode(code);
+ return marker->markedUpCode(code, nullptr, location());
+}
+
+bool DocParser::isBlankLine()
+{
+ qsizetype i = m_position;
+
+ while (i < m_inputLength && m_input[i].isSpace()) {
+ if (m_input[i] == '\n')
+ return true;
+ ++i;
+ }
+ return false;
+}
+
+bool DocParser::isLeftBraceAhead()
+{
+ int numEndl = 0;
+ qsizetype i = m_position;
+
+ while (i < m_inputLength && m_input[i].isSpace() && numEndl < 2) {
+ // ### bug with '\\'
+ if (m_input[i] == '\n')
+ numEndl++;
+ ++i;
+ }
+ return numEndl < 2 && i < m_inputLength && m_input[i] == '{';
+}
+
+bool DocParser::isLeftBracketAhead()
+{
+ int numEndl = 0;
+ qsizetype i = m_position;
+
+ while (i < m_inputLength && m_input[i].isSpace() && numEndl < 2) {
+ // ### bug with '\\'
+ if (m_input[i] == '\n')
+ numEndl++;
+ ++i;
+ }
+ return numEndl < 2 && i < m_inputLength && m_input[i] == '[';
+}
+
+/*!
+ Skips to the next non-space character or EOL.
+ */
+void DocParser::skipSpacesOnLine()
+{
+ while ((m_position < m_input.size()) && m_input[m_position].isSpace()
+ && (m_input[m_position].unicode() != '\n'))
+ ++m_position;
+}
+
+/*!
+ Skips spaces and one EOL.
+ */
+void DocParser::skipSpacesOrOneEndl()
+{
+ qsizetype firstEndl = -1;
+ while (m_position < m_input.size() && m_input[m_position].isSpace()) {
+ QChar ch = m_input[m_position];
+ if (ch == '\n') {
+ if (firstEndl == -1) {
+ firstEndl = m_position;
+ } else {
+ m_position = firstEndl;
+ break;
+ }
+ }
+ ++m_position;
+ }
+}
+
+void DocParser::skipAllSpaces()
+{
+ while (m_position < m_inputLength && m_input[m_position].isSpace())
+ ++m_position;
+}
+
+void DocParser::skipToNextPreprocessorCommand()
+{
+ QRegularExpression rx("\\\\(?:" + cmdName(CMD_IF) + QLatin1Char('|') + cmdName(CMD_ELSE)
+ + QLatin1Char('|') + cmdName(CMD_ENDIF) + ")\\b");
+ auto match = rx.match(m_input, m_position + 1); // ### + 1 necessary?
+
+ if (!match.hasMatch())
+ m_position = m_input.size();
+ else
+ m_position = match.capturedStart();
+}
+
+int DocParser::endCmdFor(int cmd)
+{
+ switch (cmd) {
+ case CMD_BADCODE:
+ return CMD_ENDCODE;
+ case CMD_CODE:
+ return CMD_ENDCODE;
+ case CMD_COMPARESWITH:
+ return CMD_ENDCOMPARESWITH;
+ case CMD_DETAILS:
+ return CMD_ENDDETAILS;
+ case CMD_DIV:
+ return CMD_ENDDIV;
+ case CMD_QML:
+ return CMD_ENDQML;
+ case CMD_FOOTNOTE:
+ return CMD_ENDFOOTNOTE;
+ case CMD_LEGALESE:
+ return CMD_ENDLEGALESE;
+ case CMD_LINK:
+ return CMD_ENDLINK;
+ case CMD_LIST:
+ return CMD_ENDLIST;
+ case CMD_OMIT:
+ return CMD_ENDOMIT;
+ case CMD_QUOTATION:
+ return CMD_ENDQUOTATION;
+ case CMD_RAW:
+ return CMD_ENDRAW;
+ case CMD_SECTION1:
+ return CMD_ENDSECTION1;
+ case CMD_SECTION2:
+ return CMD_ENDSECTION2;
+ case CMD_SECTION3:
+ return CMD_ENDSECTION3;
+ case CMD_SECTION4:
+ return CMD_ENDSECTION4;
+ case CMD_SIDEBAR:
+ return CMD_ENDSIDEBAR;
+ case CMD_TABLE:
+ return CMD_ENDTABLE;
+ default:
+ return cmd;
+ }
+}
+
+QString DocParser::cmdName(int cmd)
+{
+ return cmds[cmd].name;
+}
+
+QString DocParser::endCmdName(int cmd)
+{
+ return cmdName(endCmdFor(cmd));
+}
+
+QString DocParser::untabifyEtc(const QString &str)
+{
+ QString result;
+ result.reserve(str.size());
+ int column = 0;
+
+ for (const auto &character : str) {
+ if (character == QLatin1Char('\r'))
+ continue;
+ if (character == QLatin1Char('\t')) {
+ result += &" "[column % s_tabSize];
+ column = ((column / s_tabSize) + 1) * s_tabSize;
+ continue;
+ }
+ if (character == QLatin1Char('\n')) {
+ while (result.endsWith(QLatin1Char(' ')))
+ result.chop(1);
+ result += character;
+ column = 0;
+ continue;
+ }
+ result += character;
+ ++column;
+ }
+
+ while (result.endsWith("\n\n"))
+ result.truncate(result.size() - 1);
+ while (result.startsWith(QLatin1Char('\n')))
+ result = result.mid(1);
+
+ return result;
+}
+
+int DocParser::indentLevel(const QString &str)
+{
+ int minIndent = INT_MAX;
+ int column = 0;
+
+ for (const auto &character : str) {
+ if (character == '\n') {
+ column = 0;
+ } else {
+ if (character != ' ' && column < minIndent)
+ minIndent = column;
+ ++column;
+ }
+ }
+ return minIndent;
+}
+
+QString DocParser::dedent(int level, const QString &str)
+{
+ if (level == 0)
+ return str;
+
+ QString result;
+ int column = 0;
+
+ for (const auto &character : str) {
+ if (character == QLatin1Char('\n')) {
+ result += '\n';
+ column = 0;
+ } else {
+ if (column >= level)
+ result += character;
+ ++column;
+ }
+ }
+ return result;
+}
+
+/*!
+ Returns \c true if \a atom represents a code snippet.
+ */
+bool DocParser::isCode(const Atom *atom)
+{
+ Atom::AtomType type = atom->type();
+ return (type == Atom::Code || type == Atom::Qml);
+}
+
+/*!
+ Returns \c true if \a atom represents quoting information.
+ */
+bool DocParser::isQuote(const Atom *atom)
+{
+ Atom::AtomType type = atom->type();
+ return (type == Atom::CodeQuoteArgument || type == Atom::CodeQuoteCommand
+ || type == Atom::SnippetCommand || type == Atom::SnippetIdentifier
+ || type == Atom::SnippetLocation);
+}
+
+/*!
+ \internal
+ Processes the arguments passed to the \\compareswith block command.
+ The arguments are stored as text within the first atom of the block
+ (Atom::ComparesLeft).
+
+ Extracts the comparison category and the list of types, and stores
+ the information into a map accessed via \a priv.
+*/
+static void processComparesWithCommand(DocPrivate *priv, const Location &location)
+{
+ static auto take_while = [](QStringView input, auto predicate) {
+ QStringView::size_type end{0};
+
+ while (end < input.size() && std::invoke(predicate, input[end]))
+ ++end;
+
+ return std::make_tuple(input.sliced(0, end), input.sliced(end));
+ };
+
+ static auto peek = [](QStringView input, QChar c) {
+ return !input.empty() && input.first() == c;
+ };
+
+ static auto skip_one = [](QStringView input) {
+ if (input.empty()) return std::make_tuple(QStringView{}, input);
+ else return std::make_tuple(input.sliced(0, 1), input.sliced(1));
+ };
+
+ static auto enclosed = [](QStringView input, QChar open, QChar close) {
+ if (!peek(input, open)) return std::make_tuple(QStringView{}, input);
+
+ auto [opened, without_open] = skip_one(input);
+ auto [parsed, remaining] = take_while(without_open, [close](QChar c){ return c != close; });
+
+ if (remaining.empty()) return std::make_tuple(QStringView{}, input);
+
+ auto [closed, without_close] = skip_one(remaining);
+
+ return std::make_tuple(parsed.trimmed(), without_close);
+ };
+
+ static auto one_of = [](auto first, auto second) {
+ return [first, second](QStringView input) {
+ auto [parsed, remaining] = std::invoke(first, input);
+
+ if (parsed.empty()) return std::invoke(second, input);
+ else return std::make_tuple(parsed, remaining);
+ };
+ };
+
+ static auto collect = [](QStringView input, auto parser) {
+ QStringList collected{};
+
+ while (true) {
+ auto [parsed, remaining] = std::invoke(parser, input);
+
+ if (parsed.empty()) break;
+ collected.append(parsed.toString());
+
+ input = remaining;
+ };
+
+ return collected;
+ };
+
+ static auto spaces = [](QStringView input) {
+ return take_while(input, [](QChar c){ return c.isSpace(); });
+ };
+
+ static auto word = [](QStringView input) {
+ return take_while(input, [](QChar c){ return !c.isSpace(); });
+ };
+
+ static auto parse_argument = [](QStringView input) {
+ auto [_, without_spaces] = spaces(input);
+
+ return one_of(
+ [](QStringView input){ return enclosed(input, '{', '}'); },
+ word
+ )(without_spaces);
+ };
+
+ const QString cmd{DocParser::cmdName(CMD_COMPARESWITH)};
+ Text text = priv->m_text.splitAtFirst(Atom::ComparesLeft);
+
+ auto *atom = text.firstAtom();
+ QStringList segments = collect(atom->string(), parse_argument);
+
+ QString categoryString;
+ if (!segments.isEmpty())
+ categoryString = segments.takeFirst();
+ auto category = comparisonCategoryFromString(categoryString.toStdString());
+
+ if (category == ComparisonCategory::None) {
+ location.warning(u"Invalid argument to \\%1 command: `%2`"_s.arg(cmd, categoryString),
+ u"Valid arguments are `strong`, `weak`, `partial`, or `equality`."_s);
+ return;
+ }
+
+ if (segments.isEmpty()) {
+ location.warning(u"Missing argument to \\%1 command."_s.arg(cmd),
+ u"Provide at least one type name, or a list of types separated by spaces."_s);
+ return;
+ }
+
+ // Store cleaned-up type names back into the atom
+ segments.removeDuplicates();
+ atom->setString(segments.join(QLatin1Char(';')));
+
+ // Add an entry to meta-command map for error handling in CppCodeParser
+ priv->m_metaCommandMap[cmd].append(ArgPair(categoryString, atom->string()));
+ priv->m_metacommandsUsed.insert(cmd);
+
+ priv->constructExtra();
+ const auto end{priv->extra->m_comparesWithMap.cend()};
+ priv->extra->m_comparesWithMap.insert(end, category, text);
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/docparser.h b/src/qdoc/qdoc/src/qdoc/docparser.h
new file mode 100644
index 000000000..af2d66616
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/docparser.h
@@ -0,0 +1,169 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#ifndef DOCPARSER_H
+#define DOCPARSER_H
+
+#include "atom.h"
+#include "config.h"
+#include "docutilities.h"
+#include "location.h"
+#include "openedlist.h"
+#include "quoter.h"
+
+#include "filesystem/fileresolver.h"
+
+#include <QtCore/QCoreApplication>
+#include <QtCore/qglobalstatic.h>
+#include <QtCore/qhash.h>
+#include <QtCore/qstack.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+class Doc;
+class DocPrivate;
+class CodeMarker;
+struct Macro;
+
+class DocParser
+{
+public:
+ void parse(const QString &source, DocPrivate *docPrivate, const QSet<QString> &metaCommandSet,
+ const QSet<QString> &possibleTopics);
+
+ static void initialize(const Config &config, FileResolver& file_resolver);
+ static int endCmdFor(int cmd);
+ static QString cmdName(int cmd);
+ static QString endCmdName(int cmd);
+ static QString untabifyEtc(const QString &str);
+ static int indentLevel(const QString &str);
+ static QString dedent(int level, const QString &str);
+
+ static int s_tabSize;
+ static QStringList s_ignoreWords;
+ static bool s_quoting;
+
+private:
+ Location &location();
+ QString detailsUnknownCommand(const QSet<QString> &metaCommandSet, const QString &str);
+ void insertTarget(const QString &target);
+ void insertKeyword(const QString &keyword);
+ void include(const QString &fileName, const QString &identifier, const QStringList &parameters);
+ void startFormat(const QString &format, int cmd);
+ bool openCommand(int cmd);
+ bool closeCommand(int endCmd);
+ void startSection(Doc::Sections unit, int cmd);
+ void endSection(int unit, int endCmd);
+ void parseAlso();
+ void appendAtom(const Atom&);
+ void appendAtom(const LinkAtom&);
+ void appendChar(QChar ch);
+ void appendWord(const QString &word);
+ void appendToCode(const QString &code);
+ void appendToCode(const QString &code, Atom::AtomType defaultType);
+ void enterPara(Atom::AtomType leftType = Atom::ParaLeft,
+ Atom::AtomType rightType = Atom::ParaRight, const QString &string = QString());
+ void leavePara();
+ void leaveValue();
+ void leaveValueList();
+ void leaveTableRow();
+ void quoteFromFile(const QString& filename);
+ bool expandMacro();
+ 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 getBracketedArgument();
+ QStringList getMacroArguments(const QString &name, const Macro &macro);
+ QString getOptionalArgument();
+ QString getRestOfLine();
+ QString getMetaCommandArgument(const QString &cmdStr);
+ QString getUntilEnd(int cmd);
+ QString getCode(int cmd, CodeMarker *marker, const QString &argStr = QString());
+
+ inline bool isAutoLinkString(const QString &word);
+ bool isAutoLinkString(const QString &word, qsizetype &curPos);
+ bool isBlankLine();
+ bool isLeftBraceAhead();
+ bool isLeftBracketAhead();
+ void skipSpacesOnLine();
+ void skipSpacesOrOneEndl();
+ void skipAllSpaces();
+ void skipToNextPreprocessorCommand();
+ static bool isCode(const Atom *atom);
+ static bool isQuote(const Atom *atom);
+ static void expandArgumentsInString(QString &str, const QStringList &args);
+
+ QStack<qsizetype> m_openedInputs {};
+
+ QString m_input {};
+ qsizetype m_position {};
+ qsizetype m_backslashPosition {};
+ qsizetype m_endPosition {};
+ qsizetype m_inputLength {};
+ Location m_cachedLocation {};
+ qsizetype m_cachedPosition {};
+
+ DocPrivate *m_private { nullptr };
+ enum ParagraphState { OutsideParagraph, InSingleLineParagraph, InMultiLineParagraph };
+ ParagraphState m_paragraphState {};
+ bool m_inTableHeader {};
+ bool m_inTableRow {};
+ bool m_inTableItem {};
+ bool m_indexStartedParagraph {}; // ### rename
+ Atom::AtomType m_pendingParagraphLeftType {};
+ Atom::AtomType m_pendingParagraphRightType {};
+ QString m_pendingParagraphString {};
+
+ int m_braceDepth {};
+ Doc::Sections m_currentSection {};
+ QMap<QString, Location> m_targetMap {};
+ QMap<int, QString> m_pendingFormats {};
+ QStack<int> m_openedCommands {};
+ QStack<OpenedList> m_openedLists {};
+ Quoter m_quoter {};
+ Atom *m_lastAtom { nullptr };
+
+ static DocUtilities &s_utilities;
+
+ // KLUDGE: When parsing documentation, there is a need to find
+ // files to resolve quoting commands. Ideally, the system that
+ // takes care of this would be a non-static member that is a
+ // reference that is passed at
+ // construction time.
+ // Nonetheless, with how the current codebase is constructed, this
+ // has proven to be extremely difficult until more changes are
+ // done. In particular, the construction of a DocParser happens in
+ // multiple places at multiple depths and, in particular, happens
+ // in one of Doc's constructor.
+ // Doc itself is built, again, in multiple places at multiple
+ // depths, making it clumsy and sometimes infeasible to pass the
+ // dependency around so that it is available at the required
+ // places. In particular, this stems from the fact that Doc is
+ // holding many responsabilities and is spread troughtout much of
+ // the codebase in different ways. DocParser mostly depends on Doc
+ // and Doc currently depends on DocParser, making the two
+ // difficult to separate.
+ //
+ // In the future, we expect Doc to mostly be removed, such as to
+ // remove this dependencies and the parsing of documentation to
+ // happen near main and atomically from other endevours, producing
+ // an intermediate representation that is consumed by later
+ // phases.
+ // At that point, it should be possible to not have this kind of
+ // indirection while, for now, the only accessible way to pass
+ // this dependency is trough the initialize method which passes
+ // for Doc::initialize.
+ //
+ // Furthemore, as we cannot late-bind a reference, and having a
+ // desire to avoid an unnecessary copy, we are thus forced to use
+ // a different storage method, in this case a pointer.
+ // This too should be removed later on, using reference or move
+ // semantic depending on the required data-flow.
+ static FileResolver* file_resolver;
+};
+
+QT_END_NAMESPACE
+
+#endif // DOCPARSER_H
diff --git a/src/qdoc/qdoc/src/qdoc/docprivate.cpp b/src/qdoc/qdoc/src/qdoc/docprivate.cpp
new file mode 100644
index 000000000..a7c178d57
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/docprivate.cpp
@@ -0,0 +1,30 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#include "docprivate.h"
+
+#include "text.h"
+
+#include <QtCore/qhash.h>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ Deletes the DocPrivateExtra.
+ */
+DocPrivate::~DocPrivate()
+{
+ delete extra;
+}
+
+void DocPrivate::addAlso(const Text &also)
+{
+ m_alsoList.append(also);
+}
+
+void DocPrivate::constructExtra()
+{
+ if (extra == nullptr)
+ extra = new DocPrivateExtra;
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/docprivate.h b/src/qdoc/qdoc/src/qdoc/docprivate.h
new file mode 100644
index 000000000..7402290c9
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/docprivate.h
@@ -0,0 +1,76 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#ifndef DOCPRIVATE_H
+#define DOCPRIVATE_H
+
+#include "atom.h"
+#include "config.h"
+#include "codemarker.h"
+#include "doc.h"
+#include "editdistance.h"
+#include "generator.h"
+#include "utilities.h"
+#include "openedlist.h"
+#include "quoter.h"
+#include "text.h"
+#include "tokenizer.h"
+
+#include <QtCore/qdatetime.h>
+#include <QtCore/qfile.h>
+#include <QtCore/qfileinfo.h>
+#include <QtCore/qhash.h>
+#include <QtCore/qmap.h>
+#include <QtCore/qtextstream.h>
+
+#include <cctype>
+#include <climits>
+#include <utility>
+
+QT_BEGIN_NAMESPACE
+
+typedef QMap<QString, ArgList> CommandMap;
+
+struct DocPrivateExtra
+{
+ QList<Atom *> m_tableOfContents {};
+ QList<int> m_tableOfContentsLevels {};
+ QList<Atom *> m_keywords {};
+ QList<Atom *> m_targets {};
+ QStringMultiMap m_metaMap {};
+ QMultiMap<ComparisonCategory, Text> m_comparesWithMap {};
+};
+
+class DocPrivate
+{
+public:
+ explicit DocPrivate(const Location &start = Location(), const Location &end = Location(),
+ QString source = QString())
+ : m_start_loc(start), m_end_loc(end), m_src(std::move(source)), m_hasLegalese(false) {};
+ ~DocPrivate();
+
+ void addAlso(const Text &also);
+ void constructExtra();
+ void ref() { ++count; }
+ bool deref() { return (--count == 0); }
+
+ int count { 1 };
+ // ### move some of this in DocPrivateExtra
+ Location m_start_loc {};
+ Location m_end_loc {};
+ QString m_src {};
+ Text m_text {};
+ QSet<QString> m_params {};
+ QList<Text> m_alsoList {};
+ QStringList m_enumItemList {};
+ QStringList m_omitEnumItemList {};
+ QSet<QString> m_metacommandsUsed {};
+ CommandMap m_metaCommandMap {};
+ DocPrivateExtra *extra { nullptr };
+ TopicList m_topics {};
+
+ bool m_hasLegalese : 1;
+};
+
+QT_END_NAMESPACE
+
+#endif // DOCPRIVATE_H
diff --git a/src/qdoc/qdoc/src/qdoc/docutilities.h b/src/qdoc/qdoc/src/qdoc/docutilities.h
new file mode 100644
index 000000000..d4483ac73
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/docutilities.h
@@ -0,0 +1,28 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#ifndef DOCUTILITIES_H
+#define DOCUTILITIES_H
+
+#include "macro.h"
+#include "singleton.h"
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qhash.h>
+#include <QtCore/qstring.h>
+#include <QtCore/qmap.h>
+
+QT_BEGIN_NAMESPACE
+
+typedef QHash<QString, int> QHash_QString_int;
+typedef QHash<QString, Macro> QHash_QString_Macro;
+
+struct DocUtilities : public Singleton<DocUtilities>
+{
+public:
+ QHash_QString_int cmdHash;
+ QHash_QString_Macro macroHash;
+};
+
+QT_END_NAMESPACE
+
+#endif // DOCUTILITIES_H
diff --git a/src/qdoc/qdoc/src/qdoc/editdistance.cpp b/src/qdoc/qdoc/src/qdoc/editdistance.cpp
new file mode 100644
index 000000000..303979ec3
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/editdistance.cpp
@@ -0,0 +1,68 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "editdistance.h"
+
+QT_BEGIN_NAMESPACE
+
+int editDistance(const QString &s, const QString &t)
+{
+#define D(i, j) d[(i)*n + (j)]
+ int i;
+ int j;
+ qsizetype m = s.size() + 1;
+ qsizetype n = t.size() + 1;
+ int *d = new int[m * n];
+ int result;
+
+ for (i = 0; i < m; ++i)
+ D(i, 0) = i;
+ for (j = 0; j < n; ++j)
+ D(0, j) = j;
+ for (i = 1; i < m; ++i) {
+ for (j = 1; j < n; ++j) {
+ if (s[i - 1] == t[j - 1]) {
+ D(i, j) = D(i - 1, j - 1);
+ } else {
+ int x = D(i - 1, j);
+ int y = D(i - 1, j - 1);
+ int z = D(i, j - 1);
+ D(i, j) = 1 + qMin(qMin(x, y), z);
+ }
+ }
+ }
+ result = D(m - 1, n - 1);
+ delete[] d;
+ return result;
+#undef D
+}
+
+QString nearestName(const QString &actual, const QSet<QString> &candidates)
+{
+ if (actual.isEmpty())
+ return QString();
+
+ int deltaBest = 10000;
+ int numBest = 0;
+ QString best;
+
+ for (const auto &candidate : candidates) {
+ if (candidate[0] == actual[0]) {
+ int delta = editDistance(actual, candidate);
+ if (delta < deltaBest) {
+ deltaBest = delta;
+ numBest = 1;
+ best = candidate;
+ } else if (delta == deltaBest) {
+ ++numBest;
+ }
+ }
+ }
+
+ if (numBest == 1 && deltaBest <= 2 && actual.size() + best.size() >= 5)
+ return best;
+
+ return QString();
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/editdistance.h b/src/qdoc/qdoc/src/qdoc/editdistance.h
new file mode 100644
index 000000000..dfa6a42dd
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/editdistance.h
@@ -0,0 +1,17 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef EDITDISTANCE_H
+#define EDITDISTANCE_H
+
+#include <QtCore/qset.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+int editDistance(const QString &s, const QString &t);
+QString nearestName(const QString &actual, const QSet<QString> &candidates);
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/enumitem.h b/src/qdoc/qdoc/src/qdoc/enumitem.h
new file mode 100644
index 000000000..06e9d42a9
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/enumitem.h
@@ -0,0 +1,36 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef ENUMITEM_H
+#define ENUMITEM_H
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qstring.h>
+
+#include <utility>
+
+QT_BEGIN_NAMESPACE
+
+class EnumItem
+{
+public:
+ EnumItem() = default;
+ EnumItem(QString name, QString value, QString since = QString())
+ : m_name(std::move(name)),
+ m_value(std::move(value)),
+ m_since(std::move(since)) {}
+
+ [[nodiscard]] const QString &name() const { return m_name; }
+ [[nodiscard]] const QString &value() const { return m_value; }
+ [[nodiscard]] const QString &since() const { return m_since; }
+ void setSince(const QString &since) { m_since = since; }
+
+private:
+ QString m_name {};
+ QString m_value {};
+ QString m_since {};
+};
+
+QT_END_NAMESPACE
+
+#endif // ENUMITEM_H
diff --git a/src/qdoc/qdoc/src/qdoc/enumnode.cpp b/src/qdoc/qdoc/src/qdoc/enumnode.cpp
new file mode 100644
index 000000000..48a2f81aa
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/enumnode.cpp
@@ -0,0 +1,82 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "enumnode.h"
+
+#include "aggregate.h"
+#include "typedefnode.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class EnumNode
+ */
+
+/*!
+ Add \a item to the enum type's item list.
+ */
+void EnumNode::addItem(const EnumItem &item)
+{
+ m_items.append(item);
+ m_names.insert(item.name());
+}
+
+/*!
+ Returns the access level of the enumeration item named \a name.
+ Apparently it is private if it has been omitted by qdoc's
+ omitvalue command. Otherwise it is public.
+ */
+Access EnumNode::itemAccess(const QString &name) const
+{
+ if (doc().omitEnumItemNames().contains(name))
+ return Access::Private;
+ return Access::Public;
+}
+
+/*!
+ Returns the enum value associated with the enum \a name.
+ */
+QString EnumNode::itemValue(const QString &name) const
+{
+ for (const auto &item : std::as_const(m_items)) {
+ if (item.name() == name)
+ return item.value();
+ }
+ return QString();
+}
+
+/*!
+ Sets \a since information to a named enum \a value, if it
+ exists in this enum.
+*/
+void EnumNode::setSince(const QString &value, const QString &since)
+{
+ auto it = std::find_if(m_items.begin(), m_items.end(), [value](EnumItem ev) {
+ return ev.name() == value;
+ });
+ if (it != m_items.end())
+ it->setSince(since);
+}
+
+/*!
+ Clone this node on the heap and make the clone a child of
+ \a parent.
+
+ Returns a pointer to the clone.
+ */
+Node *EnumNode::clone(Aggregate *parent)
+{
+ auto *en = new EnumNode(*this); // shallow copy
+ en->setParent(nullptr);
+ parent->addChild(en);
+
+ return en;
+}
+
+void EnumNode::setFlagsType(TypedefNode *typedefNode)
+{
+ m_flagsType = typedefNode;
+ typedefNode->setAssociatedEnum(this);
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/enumnode.h b/src/qdoc/qdoc/src/qdoc/enumnode.h
new file mode 100644
index 000000000..47139ae4d
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/enumnode.h
@@ -0,0 +1,49 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef ENUMNODE_H
+#define ENUMNODE_H
+
+#include "access.h"
+#include "node.h"
+#include "typedefnode.h"
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qlist.h>
+#include <QtCore/qset.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+class Aggregate;
+
+class EnumNode : public Node
+{
+public:
+ EnumNode(Aggregate *parent, const QString &name, bool isScoped = false)
+ : Node(Enum, parent, name), m_isScoped(isScoped)
+ {
+ }
+
+ void addItem(const EnumItem &item);
+ void setFlagsType(TypedefNode *typedefNode);
+ bool hasItem(const QString &name) const { return m_names.contains(name); }
+ bool isScoped() const { return m_isScoped; }
+
+ const QList<EnumItem> &items() const { return m_items; }
+ Access itemAccess(const QString &name) const;
+ const TypedefNode *flagsType() const { return m_flagsType; }
+ QString itemValue(const QString &name) const;
+ Node *clone(Aggregate *parent) override;
+ void setSince(const QString &value, const QString &since);
+
+private:
+ QList<EnumItem> m_items {};
+ QSet<QString> m_names {};
+ const TypedefNode *m_flagsType { nullptr };
+ bool m_isScoped { false };
+};
+
+QT_END_NAMESPACE
+
+#endif // ENUMNODE_H
diff --git a/src/qdoc/qdoc/src/qdoc/examplenode.h b/src/qdoc/qdoc/src/qdoc/examplenode.h
new file mode 100644
index 000000000..920092e4e
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/examplenode.h
@@ -0,0 +1,42 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef EXAMPLENODE_H
+#define EXAMPLENODE_H
+
+#include "pagenode.h"
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qstring.h>
+#include <QtCore/qstringlist.h>
+
+QT_BEGIN_NAMESPACE
+
+class ExampleNode : public PageNode
+{
+public:
+ ExampleNode(Aggregate *parent, const QString &name) : PageNode(Node::Example, parent, name) {}
+ [[nodiscard]] QString imageFileName() const override { return m_imageFileName; }
+ void setImageFileName(const QString &ifn) override { m_imageFileName = ifn; }
+ [[nodiscard]] const QStringList &files() const { return m_files; }
+ [[nodiscard]] const QStringList &images() const { return m_images; }
+ [[nodiscard]] const QString &projectFile() const { return m_projectFile; }
+ void setFiles(const QStringList &files, const QString &projectFile)
+ {
+ m_files = files;
+ m_projectFile = projectFile;
+ }
+ void setImages(const QStringList &images) { m_images = images; }
+ void appendFile(QString &file) { m_files.append(file); }
+ void appendImage(QString &image) { m_images.append(image); }
+
+private:
+ QString m_imageFileName {};
+ QString m_projectFile {};
+ QStringList m_files {};
+ QStringList m_images {};
+};
+
+QT_END_NAMESPACE
+
+#endif // EXAMPLENODE_H
diff --git a/src/qdoc/qdoc/src/qdoc/externalpagenode.cpp b/src/qdoc/qdoc/src/qdoc/externalpagenode.cpp
new file mode 100644
index 000000000..30a583d00
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/externalpagenode.cpp
@@ -0,0 +1,28 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "externalpagenode.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class ExternalPageNode
+
+ \brief The ExternalPageNode represents an external documentation page.
+
+ Qdoc can generate links to pages that are not part of the documentation
+ being generated. 3rd party software pages are often referenced by links
+ from the QT documentation. Qdoc creates an ExternalPageNode when it sees
+ an \c {\\externalpage} command. The HTML generator can then use the node
+ when it needs to create links to the external page.
+
+ ExternalPageNode inherits PageNode.
+*/
+
+/*! \fn ExternalPageNode::ExternalPageNode(Aggregate *parent, const QString &name)
+ The constructor creates an ExternalPageNode as a child node of \a parent.
+ It's \a name is the argument from the \c {\\externalpage} command. The node
+ type is Node::ExternalPage, and the page type is Node::ArticlePage.
+ */
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/externalpagenode.h b/src/qdoc/qdoc/src/qdoc/externalpagenode.h
new file mode 100644
index 000000000..e67aab0e8
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/externalpagenode.h
@@ -0,0 +1,25 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef EXTERNALPAGENODE_H
+#define EXTERNALPAGENODE_H
+
+#include "pagenode.h"
+
+#include <QtCore/qglobal.h>
+
+QT_BEGIN_NAMESPACE
+
+class ExternalPageNode : public PageNode
+{
+public:
+ ExternalPageNode(Aggregate *parent, const QString &url)
+ : PageNode(Node::ExternalPage, parent, url)
+ {
+ setUrl(url);
+ }
+};
+
+QT_END_NAMESPACE
+
+#endif // EXTERNALPAGENODE_H
diff --git a/src/qdoc/qdoc/src/qdoc/filesystem/fileresolver.cpp b/src/qdoc/qdoc/src/qdoc/filesystem/fileresolver.cpp
new file mode 100644
index 000000000..aaa489085
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/filesystem/fileresolver.cpp
@@ -0,0 +1,161 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "fileresolver.h"
+
+#include "qdoc/boundaries/filesystem/filepath.h"
+
+#include <QDir>
+
+#include <iostream>
+#include <algorithm>
+
+/*!
+ * \class FileResolver
+ * \brief Encapsulate the logic that QDoc uses to find files whose
+ * path is provided by the user and that are relative to the current
+ * configuration.
+ *
+ * A FileResolver instance is configured during creation, defining the
+ * root directories that the search should be performed on.
+ *
+ * Afterwards, it can be used to resolve paths relative to those
+ * directories, by querying through the resolve() method.
+ *
+ * Queries are resolved through a linear search through root
+ * directories, finding at most one file each time.
+ * A file is considered to be resolved if, from any root directory,
+ * the query represents an existing file.
+ *
+ * For example, consider the following directory structure on some
+ * filesystem:
+ *
+ * \badcode
+ * foo/
+ * |
+ * |-bar/
+ * |-|
+ * | |-anotherfile.txt
+ * |-file.txt
+ * \endcode
+ *
+ * And consider an instance of FileResolver tha considers \e{foo/} to
+ * be a root directory for search.
+ *
+ * Then, queries such as \e {bar/anotherfile.txt} and \e {file.txt}
+ * will be resolved.
+ *
+ * Instead, queries such as \e {foobar.cpp}, \e {bar}, and \e
+ * {foo/bar/anotherfile.txt} will not be resolved, as they do not
+ * represent any file reachable from a root directory for search.
+ *
+ * It is important to note that FileResolver always searches its root
+ * directories in an order that is based on the lexicographic ordering
+ * of the path of its root directories.
+ *
+ * For example, consider the following directory structure on some
+ * filesystem:
+ *
+ * \badcode
+ * foo/
+ * |
+ * |-bar/
+ * |-|
+ * | |-file.txt
+ * |-foobar/
+ * |-|
+ * | |-file.txt
+ * \endcode
+ *
+ * And consider an instance of FileResolver that considers \e
+ * {foo/bar/} and \e {foo/foobar/} to be root directories for search.
+ *
+ * Then, when the query \e {file.txt} is resolved, it will always
+ * resolve to the file in \e {bar}, as \e {bar} will be searched
+ * before \e {foobar}.
+ *
+ * We say that \e {foobar/file.txt} is shadowed by \e {bar/file.txt}.
+ *
+ * Currently, if this is an issue, it is possible to resolve it by
+ * using a common ancestor as a root directory instead of using
+ * multiples directories.
+ *
+ * In the previous example, if \e {foo} is instead chosen as the root
+ * directory for search, then queries \e {bar/file.txt} and \e
+ * {foobar/file.txt} can be used to uniquely resolve the two files,
+ * removing the shadowing.
+ * */
+
+/*!
+ * Constructs an instance of FileResolver with the directories in \a
+ * search_directories as root directories for searching.
+ *
+ * Duplicates in \a search_directories do not affect the resolution of
+ * files for the instance.
+ *
+ * For example, if \a search_directories contains some directory D
+ * more than once, the constructed instance will resolve files
+ * equivalently to an instance constructed with a single appearance of
+ * D.
+ *
+ * The order of \a search_directories does not affect the resolution
+ * of files for an instance.
+ *
+ * For example, if \a search_directories contains a permutation of
+ * directories D1, D2, ..., Dn, then the constructed instance will
+ * resolve files equivalently to an instance constructed from a
+ * difference permutation of the same directories.
+ */
+FileResolver::FileResolver(std::vector<DirectoryPath>&& search_directories)
+ : search_directories{std::move(search_directories)}
+{
+ std::sort(this->search_directories.begin(), this->search_directories.end());
+ this->search_directories.erase (
+ std::unique(this->search_directories.begin(), this->search_directories.end()),
+ this->search_directories.end()
+ );
+}
+
+// REMARK: Note that we do not treat absolute path specially.
+// This will in general mean that they cannot get resolved (albeit
+// there is a peculiar instance in which they can considering that
+// most path formats treat multiple adjacent separators as one).
+//
+// While we need to treat them at some point with a specific
+// intention, this was avoided at the current moment as it is
+// unrequired to build the actual documentation.
+//
+// In particular, avoiding this choice now allows us to move it to a
+// later stage where we can work with the origin of the data itself.
+// User-inputted paths come into the picture during the configuration
+// process and when parsing qdoc comments, there is a good chance that
+// some amount of sophistication will be required to handle this data
+// at the code level, for example to ensure that multiplatform
+// handling of paths is performed correctly.
+//
+// This will then define how we should handle absolute paths, if we
+// can receive them at all and so on.
+
+/*!
+* Returns a ResolvedFile if \a query can be resolved or std::nullopt
+* otherwise.
+*
+* The returned ResolvedFile, if any, will contain the provided \a
+* query and the path that the \a query was resolved to.
+*/
+[[nodiscard]] std::optional<ResolvedFile> FileResolver::resolve(QString query) const {
+ for (auto& directory_path : search_directories) {
+ auto maybe_filepath = FilePath::refine(QDir(directory_path.value() + "/" + query).path());
+ if (maybe_filepath) return ResolvedFile{std::move(query), std::move(*maybe_filepath)};
+ }
+
+ return std::nullopt;
+}
+
+/*!
+ * \fn FileResolver::get_search_directories() const
+ *
+ * Returns a const-reference to a collection of root search
+ * directories that this instance will use during the resolution of
+ * files.
+ */
diff --git a/src/qdoc/qdoc/src/qdoc/filesystem/fileresolver.h b/src/qdoc/qdoc/src/qdoc/filesystem/fileresolver.h
new file mode 100644
index 000000000..be574da30
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/filesystem/fileresolver.h
@@ -0,0 +1,24 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include "qdoc/boundaries/filesystem/directorypath.h"
+#include "qdoc/boundaries/filesystem/resolvedfile.h"
+
+#include <optional>
+#include <vector>
+
+#include <QtCore/qstring.h>
+
+class FileResolver {
+public:
+ FileResolver(std::vector<DirectoryPath>&& search_directories);
+
+ [[nodiscard]] std::optional<ResolvedFile> resolve(QString filename) const;
+
+ [[nodiscard]] const std::vector<DirectoryPath>& get_search_directories() const { return search_directories; }
+
+private:
+ std::vector<DirectoryPath> search_directories;
+};
diff --git a/src/qdoc/qdoc/src/qdoc/functionnode.cpp b/src/qdoc/qdoc/src/qdoc/functionnode.cpp
new file mode 100644
index 000000000..82933e0ac
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/functionnode.cpp
@@ -0,0 +1,473 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "functionnode.h"
+#include "propertynode.h"
+
+#include <string>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class FunctionNode
+
+ This node is used to represent any kind of function being
+ documented. It can represent a C++ class member function, a C++
+ global function, a QML method, or a macro, with or without
+ parameters.
+
+ A C++ function can be a signal, a slot, a constructor of any
+ kind, a destructor, a copy or move assignment operator, or
+ just a plain old member function or a global function.
+
+ A QML method can be a plain old method, or a
+ signal or signal handler.
+
+ If the function is an overload, its overload flag is
+ true.
+
+ The function node also has an overload number. If the
+ node's overload flag is set, this overload number is
+ positive; otherwise, the overload number is 0.
+ */
+
+/*!
+ Construct a function node for a C++ function. It's parent
+ is \a parent, and it's name is \a name.
+
+ \note The function node's overload flag is set to false, and
+ its overload number is set to 0. These data members are set
+ in normalizeOverloads(), when all the overloads are known.
+ */
+FunctionNode::FunctionNode(Aggregate *parent, const QString &name)
+ : Node(Function, parent, name),
+ m_const(false),
+ m_default(false),
+ m_static(false),
+ m_reimpFlag(false),
+ m_attached(false),
+ m_overloadFlag(false),
+ m_isFinal(false),
+ m_isOverride(false),
+ m_isRef(false),
+ m_isRefRef(false),
+ m_isInvokable(false),
+ m_explicit{false},
+ m_constexpr{false},
+ m_metaness(Plain),
+ m_virtualness(NonVirtual),
+ m_overloadNumber(0)
+{
+ // nothing
+}
+
+/*!
+ Construct a function node for a QML method or signal, specified
+ by ther Metaness value \a type. It's parent is \a parent, and
+ it's name is \a name. If \a attached is true, it is an attached
+ method or signal.
+
+ \note The function node's overload flag is set to false, and
+ its overload number is set to 0. These data members are set
+ in normalizeOverloads(), when all the overloads are known.
+ */
+FunctionNode::FunctionNode(Metaness kind, Aggregate *parent, const QString &name, bool attached)
+ : Node(Function, parent, name),
+ m_const(false),
+ m_default(false),
+ m_static(false),
+ m_reimpFlag(false),
+ m_attached(attached),
+ m_overloadFlag(false),
+ m_isFinal(false),
+ m_isOverride(false),
+ m_isRef(false),
+ m_isRefRef(false),
+ m_isInvokable(false),
+ m_explicit{false},
+ m_constexpr{false},
+ m_metaness(kind),
+ m_virtualness(NonVirtual),
+ m_overloadNumber(0)
+{
+ setGenus(getGenus(m_metaness));
+ if (!isCppNode() && name.startsWith("__"))
+ setStatus(Internal);
+}
+
+/*!
+ Clone this node on the heap and make the clone a child of
+ \a parent. Return the pointer to the clone.
+ */
+Node *FunctionNode::clone(Aggregate *parent)
+{
+ auto *fn = new FunctionNode(*this); // shallow copy
+ fn->setParent(nullptr);
+ parent->addChild(fn);
+ return fn;
+}
+
+/*!
+ Returns this function's virtualness value as a string
+ for use as an attribute value in index files.
+ */
+QString FunctionNode::virtualness() const
+{
+ switch (m_virtualness) {
+ case FunctionNode::NormalVirtual:
+ return QLatin1String("virtual");
+ case FunctionNode::PureVirtual:
+ return QLatin1String("pure");
+ case FunctionNode::NonVirtual:
+ default:
+ break;
+ }
+ return QLatin1String("non");
+}
+
+/*!
+ Sets the function node's virtualness value based on the value
+ of string \a value, which is the value of the function's \e{virtual}
+ attribute in an index file. If \a value is \e{pure}, and if the
+ parent() is a C++ class, set the parent's \e abstract flag to
+ \c {true}.
+ */
+void FunctionNode::setVirtualness(const QString &value)
+{
+ if (value == QLatin1String("pure")) {
+ m_virtualness = PureVirtual;
+ if (parent() && parent()->isClassNode())
+ parent()->setAbstract(true);
+ return;
+ }
+
+ m_virtualness = (value == QLatin1String("virtual")) ? NormalVirtual : NonVirtual;
+}
+
+static QMap<QString, FunctionNode::Metaness> metanessMap_;
+static void buildMetanessMap()
+{
+ metanessMap_["plain"] = FunctionNode::Plain;
+ metanessMap_["signal"] = FunctionNode::Signal;
+ metanessMap_["slot"] = FunctionNode::Slot;
+ metanessMap_["constructor"] = FunctionNode::Ctor;
+ metanessMap_["copy-constructor"] = FunctionNode::CCtor;
+ metanessMap_["move-constructor"] = FunctionNode::MCtor;
+ metanessMap_["destructor"] = FunctionNode::Dtor;
+ metanessMap_["macro"] = FunctionNode::MacroWithParams;
+ metanessMap_["macrowithparams"] = FunctionNode::MacroWithParams;
+ metanessMap_["macrowithoutparams"] = FunctionNode::MacroWithoutParams;
+ metanessMap_["copy-assign"] = FunctionNode::CAssign;
+ metanessMap_["move-assign"] = FunctionNode::MAssign;
+ metanessMap_["native"] = FunctionNode::Native;
+ metanessMap_["qmlsignal"] = FunctionNode::QmlSignal;
+ metanessMap_["qmlsignalhandler"] = FunctionNode::QmlSignalHandler;
+ metanessMap_["qmlmethod"] = FunctionNode::QmlMethod;
+}
+
+static QMap<QString, FunctionNode::Metaness> topicMetanessMap_;
+static void buildTopicMetanessMap()
+{
+ topicMetanessMap_["fn"] = FunctionNode::Plain;
+ topicMetanessMap_["qmlsignal"] = FunctionNode::QmlSignal;
+ topicMetanessMap_["qmlattachedsignal"] = FunctionNode::QmlSignal;
+ topicMetanessMap_["qmlmethod"] = FunctionNode::QmlMethod;
+ topicMetanessMap_["qmlattachedmethod"] = FunctionNode::QmlMethod;
+}
+
+/*!
+ Determines the Genus value for this FunctionNode given the
+ Metaness value \a metaness. Returns the Genus value. \a metaness must be
+ one of the values of Metaness. If not, Node::DontCare is
+ returned.
+ */
+Node::Genus FunctionNode::getGenus(FunctionNode::Metaness metaness)
+{
+ switch (metaness) {
+ case FunctionNode::Plain:
+ case FunctionNode::Signal:
+ case FunctionNode::Slot:
+ case FunctionNode::Ctor:
+ case FunctionNode::Dtor:
+ case FunctionNode::CCtor:
+ case FunctionNode::MCtor:
+ case FunctionNode::MacroWithParams:
+ case FunctionNode::MacroWithoutParams:
+ case FunctionNode::Native:
+ case FunctionNode::CAssign:
+ case FunctionNode::MAssign:
+ return Node::CPP;
+ case FunctionNode::QmlSignal:
+ case FunctionNode::QmlSignalHandler:
+ case FunctionNode::QmlMethod:
+ return Node::QML;
+ }
+
+ return Node::DontCare;
+}
+
+/*!
+ This static function converts the string \a value to an enum
+ value for the kind of function named by \a value.
+ */
+FunctionNode::Metaness FunctionNode::getMetaness(const QString &value)
+{
+ if (metanessMap_.isEmpty())
+ buildMetanessMap();
+ return metanessMap_[value];
+}
+
+/*!
+ This static function converts the topic string \a topic to an enum
+ value for the kind of function this FunctionNode represents.
+ */
+FunctionNode::Metaness FunctionNode::getMetanessFromTopic(const QString &topic)
+{
+ if (topicMetanessMap_.isEmpty())
+ buildTopicMetanessMap();
+ return topicMetanessMap_[topic];
+}
+
+/*!
+ Sets the function node's overload number to \a number. If \a number
+ is 0, the function node's overload flag is set to false. If
+ \a number is greater than 0, the overload flag is set to true.
+ */
+void FunctionNode::setOverloadNumber(signed short number)
+{
+ m_overloadNumber = number;
+ m_overloadFlag = (number > 0);
+}
+
+/*!
+ \fn void FunctionNode::setReimpFlag()
+
+ Sets the function node's reimp flag to \c true, which means
+ the \e {\\reimp} command was used in the qdoc comment. It is
+ supposed to mean that the function reimplements a virtual
+ function in a base class.
+ */
+
+/*!
+ Returns a string representing the kind of function this
+ Function node represents, which depends on the Metaness
+ value.
+ */
+QString FunctionNode::kindString() const
+{
+ switch (m_metaness) {
+ case FunctionNode::QmlSignal:
+ return "QML signal";
+ case FunctionNode::QmlSignalHandler:
+ return "QML signal handler";
+ case FunctionNode::QmlMethod:
+ return "QML method";
+ default:
+ return "function";
+ }
+}
+
+/*!
+ Returns a string representing the Metaness enum value for
+ this function. It is used in index files.
+ */
+QString FunctionNode::metanessString() const
+{
+ switch (m_metaness) {
+ case FunctionNode::Plain:
+ return "plain";
+ case FunctionNode::Signal:
+ return "signal";
+ case FunctionNode::Slot:
+ return "slot";
+ case FunctionNode::Ctor:
+ return "constructor";
+ case FunctionNode::CCtor:
+ return "copy-constructor";
+ case FunctionNode::MCtor:
+ return "move-constructor";
+ case FunctionNode::Dtor:
+ return "destructor";
+ case FunctionNode::MacroWithParams:
+ return "macrowithparams";
+ case FunctionNode::MacroWithoutParams:
+ return "macrowithoutparams";
+ case FunctionNode::Native:
+ return "native";
+ case FunctionNode::CAssign:
+ return "copy-assign";
+ case FunctionNode::MAssign:
+ return "move-assign";
+ case FunctionNode::QmlSignal:
+ return "qmlsignal";
+ case FunctionNode::QmlSignalHandler:
+ return "qmlsignalhandler";
+ case FunctionNode::QmlMethod:
+ return "qmlmethod";
+ default:
+ return "plain";
+ }
+}
+
+/*!
+ Adds the "associated" property \a p to this function node.
+ The function might be the setter or getter for a property,
+ for example.
+ */
+void FunctionNode::addAssociatedProperty(PropertyNode *p)
+{
+ m_associatedProperties.append(p);
+}
+
+/*!
+ \reimp
+
+ Returns \c true if this is an access function for an obsolete property,
+ otherwise calls the base implementation of isDeprecated().
+*/
+bool FunctionNode::isDeprecated() const
+{
+ auto it = std::find_if_not(m_associatedProperties.begin(), m_associatedProperties.end(),
+ [](const Node *p) -> bool { return p->isDeprecated(); });
+
+ if (!m_associatedProperties.isEmpty() && it == m_associatedProperties.end())
+ return true;
+
+ return Node::isDeprecated();
+}
+
+/*! \fn unsigned char FunctionNode::overloadNumber() const
+ Returns the overload number for this function.
+ */
+
+/*!
+ Reconstructs and returns the function's signature.
+
+ Specific parts of the signature are included according to
+ flags in \a options:
+
+ \value Node::SignaturePlain
+ Plain signature
+ \value Node::SignatureDefaultValues
+ Include any default argument values
+ \value Node::SignatureReturnType
+ Include return type
+ \value Node::SignatureTemplateParams
+ Include \c {template <parameter_list>} if one exists
+ */
+QString FunctionNode::signature(Node::SignatureOptions options) const
+{
+ QStringList elements;
+
+ if (options & Node::SignatureTemplateParams && templateDecl())
+ elements << (*templateDecl()).to_qstring();
+ if (options & Node::SignatureReturnType)
+ elements << m_returnType;
+ elements.removeAll(QString());
+
+ if (!isMacroWithoutParams()) {
+ elements << name() + QLatin1Char('(')
+ + m_parameters.signature(options & Node::SignatureDefaultValues)
+ + QLatin1Char(')');
+ if (!isMacro()) {
+ if (isConst())
+ elements << QStringLiteral("const");
+ if (isRef())
+ elements << QStringLiteral("&");
+ else if (isRefRef())
+ elements << QStringLiteral("&&");
+ }
+ } else {
+ elements << name();
+ }
+ return elements.join(QLatin1Char(' '));
+}
+
+/*!
+ \fn int FunctionNode::compare(const FunctionNode *f1, const FunctionNode *f2)
+
+ Compares FunctionNode \a f1 with \a f2, assumed to have identical names.
+ Returns an integer less than, equal to, or greater than zero if f1 is
+ considered less than, equal to, or greater than f2.
+
+ The main purpose is to provide stable ordering for function overloads.
+ */
+[[nodiscard]] int compare(const FunctionNode *f1, const FunctionNode *f2)
+{
+ // Compare parameter count
+ int param_count{f1->parameters().count()};
+
+ if (int param_diff = param_count - f2->parameters().count(); param_diff != 0)
+ return param_diff;
+
+ // Constness
+ if (f1->isConst() != f2->isConst())
+ return f1->isConst() ? 1 : -1;
+
+ // Reference qualifiers
+ if (f1->isRef() != f2->isRef())
+ return f1->isRef() ? 1 : -1;
+ if (f1->isRefRef() != f2->isRefRef())
+ return f1->isRefRef() ? 1 : -1;
+
+ // Attachedness (applies to QML methods)
+ if (f1->isAttached() != f2->isAttached())
+ return f1->isAttached() ? 1 : -1;
+
+ // Parameter types
+ const Parameters &p1{f1->parameters()};
+ const Parameters &p2{f2->parameters()};
+ for (qsizetype i = 0; i < param_count; ++i) {
+ if (int type_comp = QString::compare(p1.at(i).type(), p2.at(i).type());
+ type_comp != 0) {
+ return type_comp;
+ }
+ }
+
+ // Template declarations
+ const auto t1{f1->templateDecl()};
+ const auto t2{f2->templateDecl()};
+ if (!t1 && !t2)
+ return 0;
+
+ if (t1 && t2)
+ return (*t1).to_std_string().compare((*t2).to_std_string());
+
+ return t1 ? 1 : -1;
+}
+
+/*!
+ In some cases, it is ok for a public function to be not documented.
+ For example, the macro Q_OBJECT adds several functions to the API of
+ a class, but these functions are normally not meant to be documented.
+ So if a function node doesn't have documentation, then if its name is
+ in the list of functions that it is ok not to document, this function
+ returns true. Otherwise, it returns false.
+
+ These are the member function names added by macros. Usually they
+ are not documented, but they can be documented, so this test avoids
+ reporting an error if they are not documented.
+
+ But maybe we should generate a standard text for each of them?
+ */
+bool FunctionNode::isIgnored() const
+{
+ if (!hasDoc()) {
+ if (name().startsWith(QLatin1String("qt_")) || name() == QLatin1String("metaObject")
+ || name() == QLatin1String("tr") || name() == QLatin1String("trUtf8")
+ || name() == QLatin1String("d_func")) {
+ return true;
+ }
+ QString s = signature(Node::SignatureReturnType);
+ if (s.contains(QLatin1String("enum_type")) && s.contains(QLatin1String("operator|")))
+ return true;
+ }
+ return false;
+}
+
+/*!
+ \fn bool FunctionNode::hasOverloads() const
+ Returns \c true if this function has overloads.
+ */
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/functionnode.h b/src/qdoc/qdoc/src/qdoc/functionnode.h
new file mode 100644
index 000000000..dca8c7e44
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/functionnode.h
@@ -0,0 +1,202 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef FUNCTIONNODE_H
+#define FUNCTIONNODE_H
+
+#include "aggregate.h"
+#include "node.h"
+#include "parameters.h"
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qstring.h>
+
+#include <optional>
+
+QT_BEGIN_NAMESPACE
+
+class FunctionNode : public Node
+{
+public:
+ enum Virtualness { NonVirtual, NormalVirtual, PureVirtual };
+
+ enum Metaness {
+ Plain,
+ Signal,
+ Slot,
+ Ctor,
+ Dtor,
+ CCtor, // copy constructor
+ MCtor, // move-copy constructor
+ MacroWithParams,
+ MacroWithoutParams,
+ Native,
+ CAssign, // copy-assignment operator
+ MAssign, // move-assignment operator
+ QmlSignal,
+ QmlSignalHandler,
+ QmlMethod,
+ };
+
+ FunctionNode(Aggregate *parent, const QString &name); // C++ function (Plain)
+ FunctionNode(Metaness type, Aggregate *parent, const QString &name, bool attached = false);
+
+ Node *clone(Aggregate *parent) override;
+ [[nodiscard]] Metaness metaness() const { return m_metaness; }
+ [[nodiscard]] QString metanessString() const;
+ void setMetaness(Metaness metaness) { m_metaness = metaness; }
+ [[nodiscard]] QString kindString() const;
+ static Metaness getMetaness(const QString &value);
+ static Metaness getMetanessFromTopic(const QString &topic);
+ static Genus getGenus(Metaness metaness);
+
+ void setReturnType(const QString &type) { m_returnType = type; }
+ void setVirtualness(const QString &value);
+ void setVirtualness(Virtualness virtualness) { m_virtualness = virtualness; }
+ void setConst(bool b) { m_const = b; }
+ void setDefault(bool b) { m_default = b; }
+ void setStatic(bool b) { m_static = b; }
+ void setReimpFlag() { m_reimpFlag = true; }
+ void setOverridesThis(const QString &path) { m_overridesThis = path; }
+
+ [[nodiscard]] const QString &returnType() const { return m_returnType; }
+ [[nodiscard]] QString virtualness() const;
+ [[nodiscard]] bool isConst() const { return m_const; }
+ [[nodiscard]] bool isDefault() const override { return m_default; }
+ [[nodiscard]] bool isStatic() const override { return m_static; }
+ [[nodiscard]] bool isOverload() const { return m_overloadFlag; }
+ [[nodiscard]] bool isMarkedReimp() const override { return m_reimpFlag; }
+ [[nodiscard]] bool isSomeCtor() const { return isCtor() || isCCtor() || isMCtor(); }
+ [[nodiscard]] bool isMacroWithParams() const { return (m_metaness == MacroWithParams); }
+ [[nodiscard]] bool isMacroWithoutParams() const { return (m_metaness == MacroWithoutParams); }
+ [[nodiscard]] bool isMacro() const override
+ {
+ return (isMacroWithParams() || isMacroWithoutParams());
+ }
+ [[nodiscard]] bool isDeprecated() const override;
+
+ void markExplicit() { m_explicit = true; }
+ bool isExplicit() const { return m_explicit; }
+
+ void markConstexpr() { m_constexpr = true; }
+ bool isConstexpr() const { return m_constexpr; }
+
+ void markNoexcept(QString expression = "") { m_noexcept = expression; }
+ const std::optional<QString>& getNoexcept() const { return m_noexcept; }
+
+ [[nodiscard]] bool isCppFunction() const { return m_metaness == Plain; } // Is this correct?
+ [[nodiscard]] bool isSignal() const { return (m_metaness == Signal); }
+ [[nodiscard]] bool isSlot() const { return (m_metaness == Slot); }
+ [[nodiscard]] bool isCtor() const { return (m_metaness == Ctor); }
+ [[nodiscard]] bool isDtor() const { return (m_metaness == Dtor); }
+ [[nodiscard]] bool isCCtor() const { return (m_metaness == CCtor); }
+ [[nodiscard]] bool isMCtor() const { return (m_metaness == MCtor); }
+ [[nodiscard]] bool isCAssign() const { return (m_metaness == CAssign); }
+ [[nodiscard]] bool isMAssign() const { return (m_metaness == MAssign); }
+
+ [[nodiscard]] bool isQmlMethod() const { return (m_metaness == QmlMethod); }
+ [[nodiscard]] bool isQmlSignal() const { return (m_metaness == QmlSignal); }
+ [[nodiscard]] bool isQmlSignalHandler() const { return (m_metaness == QmlSignalHandler); }
+
+ [[nodiscard]] bool isSpecialMemberFunction() const
+ {
+ return (isCtor() || isDtor() || isCCtor() || isMCtor() || isCAssign() || isMAssign());
+ }
+ [[nodiscard]] bool isNonvirtual() const { return (m_virtualness == NonVirtual); }
+ [[nodiscard]] bool isVirtual() const { return (m_virtualness == NormalVirtual); }
+ [[nodiscard]] bool isPureVirtual() const { return (m_virtualness == PureVirtual); }
+ [[nodiscard]] bool returnsBool() const { return (m_returnType == QLatin1String("bool")); }
+
+ Parameters &parameters() { return m_parameters; }
+ [[nodiscard]] const Parameters &parameters() const { return m_parameters; }
+ [[nodiscard]] bool isPrivateSignal() const { return m_parameters.isPrivateSignal(); }
+ void setParameters(const QString &signature) { m_parameters.set(signature); }
+ [[nodiscard]] QString signature(Node::SignatureOptions options) const override;
+
+ [[nodiscard]] const QString &overridesThis() const { return m_overridesThis; }
+ [[nodiscard]] const QList<PropertyNode *> &associatedProperties() const { return m_associatedProperties; }
+ [[nodiscard]] bool hasAssociatedProperties() const { return !m_associatedProperties.isEmpty(); }
+ [[nodiscard]] bool hasOneAssociatedProperty() const
+ {
+ return (m_associatedProperties.size() == 1);
+ }
+ [[nodiscard]] QString element() const override { return parent()->name(); }
+ [[nodiscard]] bool isAttached() const override { return m_attached; }
+ [[nodiscard]] QString qmlTypeName() const override { return parent()->qmlTypeName(); }
+ [[nodiscard]] QString logicalModuleName() const override
+ {
+ return parent()->logicalModuleName();
+ }
+ [[nodiscard]] QString logicalModuleVersion() const override
+ {
+ return parent()->logicalModuleVersion();
+ }
+ [[nodiscard]] QString logicalModuleIdentifier() const override
+ {
+ return parent()->logicalModuleIdentifier();
+ }
+
+ void setFinal(bool b) { m_isFinal = b; }
+ [[nodiscard]] bool isFinal() const { return m_isFinal; }
+
+ void setOverride(bool b) { m_isOverride = b; }
+ [[nodiscard]] bool isOverride() const { return m_isOverride; }
+
+ void setRef(bool b) { m_isRef = b; }
+ [[nodiscard]] bool isRef() const { return m_isRef; }
+
+ void setRefRef(bool b) { m_isRefRef = b; }
+ [[nodiscard]] bool isRefRef() const { return m_isRefRef; }
+
+ void setInvokable(bool b) { m_isInvokable = b; }
+ [[nodiscard]] bool isInvokable() const { return m_isInvokable; }
+
+ [[nodiscard]] bool hasTag(const QString &tag) const override { return (m_tag == tag); }
+ void setTag(const QString &tag) { m_tag = tag; }
+ [[nodiscard]] const QString &tag() const { return m_tag; }
+ [[nodiscard]] bool isIgnored() const;
+ [[nodiscard]] bool hasOverloads() const
+ {
+ return (m_overloadFlag || (parent() && parent()->hasOverloads(this)));
+ }
+ void setOverloadFlag() { m_overloadFlag = true; }
+ void setOverloadNumber(signed short number);
+ [[nodiscard]] signed short overloadNumber() const { return m_overloadNumber; }
+
+ friend int compare(const FunctionNode *f1, const FunctionNode *f2);
+
+private:
+ void addAssociatedProperty(PropertyNode *property);
+
+ friend class Aggregate;
+ friend class PropertyNode;
+
+ bool m_const : 1;
+ bool m_default : 1;
+ bool m_static : 1;
+ bool m_reimpFlag : 1;
+ bool m_attached : 1;
+ bool m_overloadFlag : 1;
+ bool m_isFinal : 1;
+ bool m_isOverride : 1;
+ bool m_isRef : 1;
+ bool m_isRefRef : 1;
+ bool m_isInvokable : 1;
+ bool m_explicit;
+ bool m_constexpr;
+
+ std::optional<QString> m_noexcept;
+
+ Metaness m_metaness {};
+ Virtualness m_virtualness{ NonVirtual };
+ signed short m_overloadNumber {};
+ QString m_returnType {};
+ QString m_overridesThis {};
+ QString m_tag {};
+ QList<PropertyNode *> m_associatedProperties {};
+ Parameters m_parameters {};
+};
+
+QT_END_NAMESPACE
+
+#endif // FUNCTIONNODE_H
diff --git a/src/qdoc/qdoc/src/qdoc/generator.cpp b/src/qdoc/qdoc/src/qdoc/generator.cpp
new file mode 100644
index 000000000..9ba4de976
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/generator.cpp
@@ -0,0 +1,2182 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "generator.h"
+
+#include "access.h"
+#include "aggregate.h"
+#include "classnode.h"
+#include "codemarker.h"
+#include "collectionnode.h"
+#include "comparisoncategory.h"
+#include "config.h"
+#include "doc.h"
+#include "editdistance.h"
+#include "enumnode.h"
+#include "examplenode.h"
+#include "functionnode.h"
+#include "node.h"
+#include "openedlist.h"
+#include "propertynode.h"
+#include "qdocdatabase.h"
+#include "qmltypenode.h"
+#include "qmlpropertynode.h"
+#include "quoter.h"
+#include "sharedcommentnode.h"
+#include "tokenizer.h"
+#include "typedefnode.h"
+#include "utilities.h"
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qdir.h>
+#include <QtCore/qregularexpression.h>
+
+#ifndef QT_BOOTSTRAPPED
+# include "QtCore/qurl.h"
+#endif
+
+#include <string>
+
+using namespace std::literals::string_literals;
+
+QT_BEGIN_NAMESPACE
+
+using namespace Qt::StringLiterals;
+
+Generator *Generator::s_currentGenerator;
+QMap<QString, QMap<QString, QString>> Generator::s_fmtLeftMaps;
+QMap<QString, QMap<QString, QString>> Generator::s_fmtRightMaps;
+QList<Generator *> Generator::s_generators;
+QString Generator::s_outDir;
+QString Generator::s_outSubdir;
+QStringList Generator::s_outFileNames;
+QSet<QString> Generator::s_outputFormats;
+QHash<QString, QString> Generator::s_outputPrefixes;
+QHash<QString, QString> Generator::s_outputSuffixes;
+QString Generator::s_project;
+bool Generator::s_noLinkErrors = false;
+bool Generator::s_autolinkErrors = false;
+bool Generator::s_redirectDocumentationToDevNull = false;
+bool Generator::s_useOutputSubdirs = true;
+QmlTypeNode *Generator::s_qmlTypeContext = nullptr;
+
+static QRegularExpression tag("</?@[^>]*>");
+static QLatin1String amp("&amp;");
+static QLatin1String gt("&gt;");
+static QLatin1String lt("&lt;");
+static QLatin1String quot("&quot;");
+
+/*!
+ Constructs the generator base class. Prepends the newly
+ constructed generator to the list of output generators.
+ Sets a pointer to the QDoc database singleton, which is
+ available to the generator subclasses.
+ */
+Generator::Generator(FileResolver& file_resolver)
+ : file_resolver{file_resolver}
+{
+ m_qdb = QDocDatabase::qdocDB();
+ s_generators.prepend(this);
+}
+
+/*!
+ Destroys the generator after removing it from the list of
+ output generators.
+ */
+Generator::~Generator()
+{
+ s_generators.removeAll(this);
+}
+
+void Generator::appendFullName(Text &text, const Node *apparentNode, const Node *relative,
+ const Node *actualNode)
+{
+ if (actualNode == nullptr)
+ actualNode = apparentNode;
+ text << Atom(Atom::LinkNode, CodeMarker::stringForNode(actualNode))
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
+ << Atom(Atom::String, apparentNode->plainFullName(relative))
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
+}
+
+void Generator::appendFullName(Text &text, const Node *apparentNode, const QString &fullName,
+ const Node *actualNode)
+{
+ if (actualNode == nullptr)
+ actualNode = apparentNode;
+ text << Atom(Atom::LinkNode, CodeMarker::stringForNode(actualNode))
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << Atom(Atom::String, fullName)
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
+}
+
+/*!
+ Append the signature for the function named in \a node to
+ \a text, so that is a link to the documentation for that
+ function.
+ */
+void Generator::appendSignature(Text &text, const Node *node)
+{
+ text << Atom(Atom::LinkNode, CodeMarker::stringForNode(node))
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
+ << Atom(Atom::String, node->signature(Node::SignaturePlain))
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
+}
+
+/*!
+ Generate a bullet list of function signatures. The function
+ nodes are in \a nodes. It uses the \a relative node and the
+ \a marker for the generation.
+ */
+void Generator::signatureList(const NodeList &nodes, const Node *relative, CodeMarker *marker)
+{
+ Text text;
+ int count = 0;
+ text << Atom(Atom::ListLeft, QString("bullet"));
+ for (const auto &node : nodes) {
+ text << Atom(Atom::ListItemNumber, QString::number(++count));
+ text << Atom(Atom::ListItemLeft, QString("bullet"));
+ appendSignature(text, node);
+ text << Atom(Atom::ListItemRight, QString("bullet"));
+ }
+ text << Atom(Atom::ListRight, QString("bullet"));
+ generateText(text, relative, marker);
+}
+
+int Generator::appendSortedNames(Text &text, const ClassNode *cn, const QList<RelatedClass> &rc)
+{
+ QMap<QString, Text> classMap;
+ for (const auto &relatedClass : rc) {
+ ClassNode *rcn = relatedClass.m_node;
+ if (rcn && rcn->isInAPI()) {
+ Text className;
+ appendFullName(className, rcn, cn);
+ classMap[className.toString().toLower()] = className;
+ }
+ }
+
+ int index = 0;
+ const QStringList classNames = classMap.keys();
+ for (const auto &className : classNames) {
+ text << classMap[className];
+ text << Utilities::comma(index++, classNames.size());
+ }
+ return index;
+}
+
+int Generator::appendSortedQmlNames(Text &text, const Node *base, const NodeList &subs)
+{
+ QMap<QString, Text> classMap;
+
+ for (const auto sub : subs) {
+ Text full_name;
+ appendFullName(full_name, sub, base);
+ classMap[full_name.toString().toLower()] = full_name;
+ }
+
+ int index = 0;
+ const auto &names = classMap.keys();
+ for (const auto &name : names)
+ text << classMap[name] << Utilities::comma(index++, names.size());
+ return index;
+}
+
+/*!
+ Creates the file named \a fileName in the output directory
+ and returns a QFile pointing to this file. In particular,
+ this method deals with errors when opening the file:
+ the returned QFile is always valid and can be written to.
+
+ \sa beginSubPage()
+ */
+QFile *Generator::openSubPageFile(const Node *node, const QString &fileName)
+{
+ if (s_outFileNames.contains(fileName))
+ node->location().warning("Already generated %1 for this project"_L1.arg(fileName));
+
+ QString path = outputDir() + QLatin1Char('/') + fileName;
+
+ auto outPath = s_redirectDocumentationToDevNull ? QStringLiteral("/dev/null") : path;
+ auto outFile = new QFile(outPath);
+
+ if (!s_redirectDocumentationToDevNull && outFile->exists()) {
+ const QString warningText {"Output file already exists, overwriting %1"_L1.arg(outFile->fileName())};
+ if (qEnvironmentVariableIsSet("QDOC_ALL_OVERWRITES_ARE_WARNINGS"))
+ node->location().warning(warningText);
+ else
+ qCDebug(lcQdoc) << qUtf8Printable(warningText);
+ }
+
+ if (!outFile->open(QFile::WriteOnly | QFile::Text)) {
+ node->location().fatal(
+ QStringLiteral("Cannot open output file '%1'").arg(outFile->fileName()));
+ }
+
+ qCDebug(lcQdoc, "Writing: %s", qPrintable(path));
+ s_outFileNames << fileName;
+ return outFile;
+}
+
+/*!
+ Creates the file named \a fileName in the output directory.
+ Attaches a QTextStream to the created file, which is written
+ to all over the place using out().
+ */
+void Generator::beginSubPage(const Node *node, const QString &fileName)
+{
+ QFile *outFile = openSubPageFile(node, fileName);
+ auto *out = new QTextStream(outFile);
+ outStreamStack.push(out);
+}
+
+/*!
+ Flush the text stream associated with the subpage, and
+ then pop it off the text stream stack and delete it.
+ This terminates output of the subpage.
+ */
+void Generator::endSubPage()
+{
+ outStreamStack.top()->flush();
+ delete outStreamStack.top()->device();
+ delete outStreamStack.pop();
+}
+
+QString Generator::fileBase(const Node *node) const
+{
+ if (!node->isPageNode() && !node->isCollectionNode())
+ node = node->parent();
+
+ 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);
+
+ if (node->isQmlModule())
+ base.append("-qmlmodule");
+ else if (node->isModule())
+ base.append("-module");
+ // Why not add "-group" for group pages?
+ } 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"));
+ }
+ } 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
+ to the file name. The suffix, if one exists, is appended to the
+ module name.
+
+ For historical reasons, skip the module name qualifier for QML value types
+ in order to avoid excess redirects in the online docs. TODO: re-assess
+ */
+ if (!node->logicalModuleName().isEmpty() && !node->isQmlBasicType()
+ && (!node->logicalModule()->isInternal() || m_showInternal))
+ base.prepend(node->logicalModuleName() + outputSuffix(node) + QLatin1Char('-'));
+
+ base.prepend(outputPrefix(node));
+ } else if (node->isProxyNode()) {
+ base.append("%1-%2-proxy"_L1.arg(node->name(), node->tree()->physicalModuleName()));
+ } else {
+ 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('-'));
+ p = pp;
+ }
+ if (node->isNamespace() && !node->name().isEmpty()) {
+ const auto *ns = static_cast<const NamespaceNode *>(node);
+ if (!ns->isDocumentedHere()) {
+ base.append(QLatin1String("-sub-"));
+ base.append(ns->tree()->camelCaseModuleName());
+ }
+ }
+ }
+
+ QString canonicalName{ Utilities::asAsciiPrintable(base) };
+ Node *n = const_cast<Node *>(node);
+ n->setFileNameBase(canonicalName);
+ return canonicalName;
+}
+
+/*!
+ Constructs an href link from an example file name, which
+ is a \a path to the example file. If \a fileExt is empty
+ (default value), retrieve the file extension from
+ the generator.
+ */
+QString Generator::linkForExampleFile(const QString &path, const QString &fileExt)
+{
+ QString link{path};
+ link.prepend(s_project.toLower() + QLatin1Char('-'));
+
+ QString canonicalName{ Utilities::asAsciiPrintable(link) };
+ canonicalName.append(QLatin1Char('.'));
+ canonicalName.append(fileExt.isEmpty() ? fileExtension() : fileExt);
+ return canonicalName;
+}
+
+/*!
+ Helper function to construct a title for a file or image page
+ included in an example.
+*/
+QString Generator::exampleFileTitle(const ExampleNode *relative, const QString &fileName)
+{
+ QString suffix;
+ if (relative->files().contains(fileName))
+ suffix = QLatin1String(" Example File");
+ else if (relative->images().contains(fileName))
+ suffix = QLatin1String(" Image File");
+ else
+ return suffix;
+
+ return fileName.mid(fileName.lastIndexOf(QLatin1Char('/')) + 1) + suffix;
+}
+
+/*!
+ If the \a node has a URL, return the URL as the file name.
+ Otherwise, construct the file name from the fileBase() and
+ either the provided \a extension or fileExtension(), and
+ return the constructed name.
+ */
+QString Generator::fileName(const Node *node, const QString &extension) const
+{
+ if (!node->url().isEmpty())
+ return node->url();
+
+ QString name = fileBase(node) + QLatin1Char('.');
+ return name + (extension.isNull() ? fileExtension() : extension);
+}
+
+/*!
+ Clean the given \a ref to be used as an HTML anchor or an \c xml:id.
+ If \a xmlCompliant is set to \c true, a stricter process is used, as XML
+ is more rigorous in what it accepts. Otherwise, if \a xmlCompliant is set to
+ \c false, the basic HTML transformations are applied.
+
+ More specifically, only XML NCNames are allowed
+ (https://www.w3.org/TR/REC-xml-names/#NT-NCName).
+ */
+QString Generator::cleanRef(const QString &ref, bool xmlCompliant)
+{
+ // XML-compliance is ensured in two ways:
+ // - no digit (0-9) at the beginning of an ID (many IDs do not respect this property)
+ // - no colon (:) anywhere in the ID (occurs very rarely)
+
+ QString clean;
+
+ if (ref.isEmpty())
+ return clean;
+
+ clean.reserve(ref.size() + 20);
+ const QChar c = ref[0];
+ const uint u = c.unicode();
+
+ if ((u >= 'a' && u <= 'z') || (u >= 'A' && u <= 'Z') || (!xmlCompliant && u >= '0' && u <= '9')) {
+ clean += c;
+ } else if (xmlCompliant && u >= '0' && u <= '9') {
+ clean += QLatin1Char('A') + c;
+ } else if (u == '~') {
+ clean += "dtor.";
+ } else if (u == '_') {
+ clean += "underscore.";
+ } else {
+ clean += QLatin1Char('A');
+ }
+
+ for (int i = 1; i < ref.size(); i++) {
+ const QChar c = ref[i];
+ const uint u = c.unicode();
+ if ((u >= 'a' && u <= 'z') || (u >= 'A' && u <= 'Z') || (u >= '0' && u <= '9') || u == '-'
+ || u == '_' || (xmlCompliant && u == ':') || u == '.') {
+ clean += c;
+ } else if (c.isSpace()) {
+ clean += QLatin1Char('-');
+ } else if (u == '!') {
+ clean += "-not";
+ } else if (u == '&') {
+ clean += "-and";
+ } else if (u == '<') {
+ clean += "-lt";
+ } else if (u == '=') {
+ clean += "-eq";
+ } else if (u == '>') {
+ clean += "-gt";
+ } else if (u == '#') {
+ clean += QLatin1Char('#');
+ } else {
+ clean += QLatin1Char('-');
+ clean += QString::number(static_cast<int>(u), 16);
+ }
+ }
+ return clean;
+}
+
+QMap<QString, QString> &Generator::formattingLeftMap()
+{
+ return s_fmtLeftMaps[format()];
+}
+
+QMap<QString, QString> &Generator::formattingRightMap()
+{
+ return s_fmtRightMaps[format()];
+}
+
+/*!
+ Returns the full document location.
+ */
+QString Generator::fullDocumentLocation(const Node *node)
+{
+ if (node == nullptr)
+ return QString();
+ if (!node->url().isEmpty())
+ return node->url();
+
+ QString parentName;
+ QString anchorRef;
+
+ if (node->isNamespace()) {
+ /*
+ The root namespace has no name - check for this before creating
+ an attribute containing the location of any documentation.
+ */
+ if (!fileBase(node).isEmpty())
+ parentName = fileBase(node) + QLatin1Char('.') + currentGenerator()->fileExtension();
+ else
+ return QString();
+ } else if (node->isQmlType()) {
+ return fileBase(node) + QLatin1Char('.') + currentGenerator()->fileExtension();
+ } else if (node->isTextPageNode() || node->isCollectionNode()) {
+ parentName = fileBase(node) + QLatin1Char('.') + currentGenerator()->fileExtension();
+ } else if (fileBase(node).isEmpty())
+ return QString();
+
+ Node *parentNode = nullptr;
+
+ if ((parentNode = node->parent())) {
+ // use the parent's name unless the parent is the root namespace
+ if (!node->parent()->isNamespace() || !node->parent()->name().isEmpty())
+ parentName = fullDocumentLocation(node->parent());
+ }
+
+ switch (node->nodeType()) {
+ case Node::Class:
+ case Node::Struct:
+ case Node::Union:
+ case Node::Namespace:
+ case Node::Proxy:
+ parentName = fileBase(node) + QLatin1Char('.') + currentGenerator()->fileExtension();
+ break;
+ case Node::Function: {
+ const auto *fn = static_cast<const FunctionNode *>(node);
+ switch (fn->metaness()) {
+ case FunctionNode::QmlSignal:
+ anchorRef = QLatin1Char('#') + node->name() + "-signal";
+ break;
+ case FunctionNode::QmlSignalHandler:
+ anchorRef = QLatin1Char('#') + node->name() + "-signal-handler";
+ break;
+ case FunctionNode::QmlMethod:
+ anchorRef = QLatin1Char('#') + node->name() + "-method";
+ break;
+ default:
+ if (fn->isDtor())
+ anchorRef = "#dtor." + fn->name().mid(1);
+ else if (fn->hasOneAssociatedProperty() && fn->doc().isEmpty())
+ return fullDocumentLocation(fn->associatedProperties()[0]);
+ else if (fn->overloadNumber() > 0)
+ anchorRef = QLatin1Char('#') + cleanRef(fn->name()) + QLatin1Char('-')
+ + QString::number(fn->overloadNumber());
+ else
+ anchorRef = QLatin1Char('#') + cleanRef(fn->name());
+ break;
+ }
+ break;
+ }
+ /*
+ Use node->name() instead of fileBase(node) as
+ the latter returns the name in lower-case. For
+ HTML anchors, we need to preserve the case.
+ */
+ case Node::Enum:
+ anchorRef = QLatin1Char('#') + node->name() + "-enum";
+ break;
+ case Node::Typedef: {
+ const auto *tdef = static_cast<const TypedefNode *>(node);
+ if (tdef->associatedEnum())
+ return fullDocumentLocation(tdef->associatedEnum());
+ } Q_FALLTHROUGH();
+ case Node::TypeAlias:
+ anchorRef = QLatin1Char('#') + node->name() + "-typedef";
+ break;
+ case Node::Property:
+ anchorRef = QLatin1Char('#') + node->name() + "-prop";
+ break;
+ case Node::SharedComment: {
+ if (!node->isPropertyGroup())
+ break;
+ } Q_FALLTHROUGH();
+ case Node::QmlProperty:
+ if (node->isAttached())
+ anchorRef = QLatin1Char('#') + node->name() + "-attached-prop";
+ else
+ anchorRef = QLatin1Char('#') + node->name() + "-prop";
+ break;
+ case Node::Variable:
+ anchorRef = QLatin1Char('#') + node->name() + "-var";
+ break;
+ case Node::QmlType:
+ case Node::Page:
+ case Node::Group:
+ case Node::HeaderFile:
+ case Node::Module:
+ case Node::QmlModule: {
+ parentName = fileBase(node);
+ parentName.replace(QLatin1Char('/'), QLatin1Char('-'))
+ .replace(QLatin1Char('.'), QLatin1Char('-'));
+ parentName += QLatin1Char('.') + currentGenerator()->fileExtension();
+ } break;
+ default:
+ break;
+ }
+
+ if (!node->isClassNode() && !node->isNamespace()) {
+ if (node->isDeprecated())
+ parentName.replace(QLatin1Char('.') + currentGenerator()->fileExtension(),
+ "-obsolete." + currentGenerator()->fileExtension());
+ }
+
+ return parentName.toLower() + anchorRef;
+}
+
+void Generator::generateAlsoList(const Node *node, CodeMarker *marker)
+{
+ QList<Text> alsoList = node->doc().alsoList();
+ supplementAlsoList(node, alsoList);
+
+ if (!alsoList.isEmpty()) {
+ Text text;
+ text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) << "See also "
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD);
+
+ for (int i = 0; i < alsoList.size(); ++i)
+ text << alsoList.at(i) << Utilities::separator(i, alsoList.size());
+
+ text << Atom::ParaRight;
+ generateText(text, node, marker);
+ }
+}
+
+const Atom *Generator::generateAtomList(const Atom *atom, const Node *relative, CodeMarker *marker,
+ bool generate, int &numAtoms)
+{
+ while (atom != nullptr) {
+ if (atom->type() == Atom::FormatIf) {
+ int numAtoms0 = numAtoms;
+ bool rightFormat = canHandleFormat(atom->string());
+ atom = generateAtomList(atom->next(), relative, marker, generate && rightFormat,
+ numAtoms);
+ if (atom == nullptr)
+ return nullptr;
+
+ if (atom->type() == Atom::FormatElse) {
+ ++numAtoms;
+ atom = generateAtomList(atom->next(), relative, marker, generate && !rightFormat,
+ numAtoms);
+ if (atom == nullptr)
+ return nullptr;
+ }
+
+ if (atom->type() == Atom::FormatEndif) {
+ if (generate && numAtoms0 == numAtoms) {
+ relative->location().warning(QStringLiteral("Output format %1 not handled %2")
+ .arg(format(), outFileName()));
+ Atom unhandledFormatAtom(Atom::UnhandledFormat, format());
+ generateAtomList(&unhandledFormatAtom, relative, marker, generate, numAtoms);
+ }
+ atom = atom->next();
+ }
+ } else if (atom->type() == Atom::FormatElse || atom->type() == Atom::FormatEndif) {
+ return atom;
+ } else {
+ int n = 1;
+ if (generate) {
+ n += generateAtom(atom, relative, marker);
+ numAtoms += n;
+ }
+ while (n-- > 0)
+ atom = atom->next();
+ }
+ }
+ return nullptr;
+}
+
+/*!
+ Generate the body of the documentation from the qdoc comment
+ found with the entity represented by the \a node.
+ */
+void Generator::generateBody(const Node *node, CodeMarker *marker)
+{
+ const FunctionNode *fn = node->isFunction() ? static_cast<const FunctionNode *>(node) : nullptr;
+ if (!node->hasDoc()) {
+ /*
+ Test for special function, like a destructor or copy constructor,
+ that has no documentation.
+ */
+ if (fn) {
+ if (fn->isDtor()) {
+ Text text;
+ text << "Destroys the instance of ";
+ text << fn->parent()->name() << ".";
+ if (fn->isVirtual())
+ text << " The destructor is virtual.";
+ out() << "<p>";
+ generateText(text, node, marker);
+ out() << "</p>";
+ } else if (fn->isCtor()) {
+ Text text;
+ text << "Default constructs an instance of ";
+ text << fn->parent()->name() << ".";
+ out() << "<p>";
+ generateText(text, node, marker);
+ out() << "</p>";
+ } else if (fn->isCCtor()) {
+ Text text;
+ text << "Copy constructor.";
+ out() << "<p>";
+ generateText(text, node, marker);
+ out() << "</p>";
+ } else if (fn->isMCtor()) {
+ Text text;
+ text << "Move-copy constructor.";
+ out() << "<p>";
+ generateText(text, node, marker);
+ out() << "</p>";
+ } else if (fn->isCAssign()) {
+ Text text;
+ text << "Copy-assignment operator.";
+ out() << "<p>";
+ generateText(text, node, marker);
+ out() << "</p>";
+ } else if (fn->isMAssign()) {
+ Text text;
+ text << "Move-assignment operator.";
+ out() << "<p>";
+ generateText(text, node, marker);
+ out() << "</p>";
+ } else if (!node->isWrapper() && !node->isMarkedReimp()) {
+ if (!fn->isIgnored()) // undocumented functions added by Q_OBJECT
+ node->location().warning(QStringLiteral("No documentation for '%1'")
+ .arg(node->plainSignature()));
+ }
+ } else if (!node->isWrapper() && !node->isMarkedReimp()) {
+ // Don't require documentation of things defined in Q_GADGET
+ if (node->name() != QLatin1String("QtGadgetHelper"))
+ node->location().warning(
+ QStringLiteral("No documentation for '%1'").arg(node->plainSignature()));
+ }
+ } else if (!node->isSharingComment()) {
+ // Reimplements clause and type alias info precede body text
+ if (fn && !fn->overridesThis().isEmpty())
+ generateReimplementsClause(fn, marker);
+ else if (node->isProperty()) {
+ if (static_cast<const PropertyNode *>(node)->propertyType() != PropertyNode::PropertyType::StandardProperty)
+ generateAddendum(node, BindableProperty, marker);
+ }
+
+ if (!generateText(node->doc().body(), node, marker)) {
+ if (node->isMarkedReimp())
+ return;
+ }
+
+ if (fn) {
+ if (fn->isQmlSignal())
+ generateAddendum(node, QmlSignalHandler, marker);
+ if (fn->isPrivateSignal())
+ generateAddendum(node, PrivateSignal, marker);
+ if (fn->isInvokable())
+ generateAddendum(node, Invokable, marker);
+ if (fn->hasAssociatedProperties())
+ generateAddendum(node, AssociatedProperties, marker);
+ }
+
+ // Generate warnings
+ if (node->isEnumType()) {
+ const auto *enume = static_cast<const EnumNode *>(node);
+
+ QSet<QString> definedItems;
+ const QList<EnumItem> &items = enume->items();
+ for (const auto &item : items)
+ definedItems.insert(item.name());
+
+ const auto &documentedItemList = enume->doc().enumItemNames();
+ QSet<QString> documentedItems(documentedItemList.cbegin(), documentedItemList.cend());
+ const QSet<QString> allItems = definedItems + documentedItems;
+ if (allItems.size() > definedItems.size()
+ || allItems.size() > documentedItems.size()) {
+ for (const auto &it : allItems) {
+ if (!definedItems.contains(it)) {
+ QString details;
+ QString best = nearestName(it, definedItems);
+ if (!best.isEmpty() && !documentedItems.contains(best))
+ details = QStringLiteral("Maybe you meant '%1'?").arg(best);
+
+ node->doc().location().warning(
+ QStringLiteral("No such enum item '%1' in %2")
+ .arg(it, node->plainFullName()),
+ details);
+ } else if (!documentedItems.contains(it)) {
+ node->doc().location().warning(
+ QStringLiteral("Undocumented enum item '%1' in %2")
+ .arg(it, node->plainFullName()));
+ }
+ }
+ }
+ } else if (fn) {
+ const QSet<QString> declaredNames = fn->parameters().getNames();
+ const QSet<QString> documentedNames = fn->doc().parameterNames();
+ if (declaredNames != documentedNames) {
+ for (const auto &name : declaredNames) {
+ if (!documentedNames.contains(name)) {
+ if (fn->isActive() || fn->isPreliminary()) {
+ // Require no parameter documentation for overrides and overloads,
+ // and only require it for non-overloaded constructors.
+ if (!fn->isMarkedReimp() && !fn->isOverload() &&
+ !(fn->isSomeCtor() && fn->hasOverloads())) {
+ fn->doc().location().warning(
+ QStringLiteral("Undocumented parameter '%1' in %2")
+ .arg(name, node->plainFullName()));
+ }
+ }
+ }
+ }
+ for (const auto &name : documentedNames) {
+ if (!declaredNames.contains(name)) {
+ QString best = nearestName(name, declaredNames);
+ QString details;
+ if (!best.isEmpty())
+ details = QStringLiteral("Maybe you meant '%1'?").arg(best);
+ fn->doc().location().warning(QStringLiteral("No such parameter '%1' in %2")
+ .arg(name, fn->plainFullName()),
+ details);
+ }
+ }
+ }
+ /*
+ This return value check should be implemented
+ for all functions with a return type.
+ mws 13/12/2018
+ */
+ if (!fn->isDeprecated() && fn->returnsBool() && !fn->isMarkedReimp()
+ && !fn->isOverload()) {
+ if (!fn->doc().body().contains("return"))
+ node->doc().location().warning(
+ QStringLiteral("Undocumented return value "
+ "(hint: use 'return' or 'returns' in the text"));
+ }
+ }
+ }
+ generateEnumValuesForQmlProperty(node, marker);
+ generateRequiredLinks(node, marker);
+}
+
+/*!
+ Generates either a link to the project folder for example \a node, or a list
+ of links files/images if 'url.examples config' variable is not defined.
+
+ Does nothing for non-example nodes.
+*/
+void Generator::generateRequiredLinks(const Node *node, CodeMarker *marker)
+{
+ if (!node->isExample())
+ return;
+
+ const auto *en = static_cast<const ExampleNode *>(node);
+ QString exampleUrl{Config::instance().get(CONFIG_URL + Config::dot + CONFIG_EXAMPLES).asString()};
+
+ if (exampleUrl.isEmpty()) {
+ if (!en->noAutoList()) {
+ generateFileList(en, marker, false); // files
+ generateFileList(en, marker, true); // images
+ }
+ } else {
+ generateLinkToExample(en, marker, exampleUrl);
+ }
+}
+
+/*!
+ Generates an external link to the project folder for example \a node.
+ The path to the example replaces a placeholder '\1' character if
+ one is found in the \a baseUrl string. If no such placeholder is found,
+ the path is appended to \a baseUrl, after a '/' character if \a baseUrl did
+ not already end in one.
+*/
+void Generator::generateLinkToExample(const ExampleNode *en, CodeMarker *marker,
+ const QString &baseUrl)
+{
+ QString exampleUrl(baseUrl);
+ QString link;
+#ifndef QT_BOOTSTRAPPED
+ link = QUrl(exampleUrl).host();
+#endif
+ if (!link.isEmpty())
+ link.prepend(" @ ");
+ link.prepend("Example project");
+
+ const QLatin1Char separator('/');
+ const QLatin1Char placeholder('\1');
+ if (!exampleUrl.contains(placeholder)) {
+ if (!exampleUrl.endsWith(separator))
+ exampleUrl += separator;
+ exampleUrl += placeholder;
+ }
+
+ // Construct a path to the example; <install path>/<example name>
+ QString pathRoot;
+ QStringMultiMap *metaTagMap = en->doc().metaTagMap();
+ if (metaTagMap)
+ pathRoot = metaTagMap->value(QLatin1String("installpath"));
+ if (pathRoot.isEmpty())
+ pathRoot = Config::instance().get(CONFIG_EXAMPLESINSTALLPATH).asString();
+ QStringList path = QStringList() << pathRoot << en->name();
+ path.removeAll(QString());
+
+ Text text;
+ text << Atom::ParaLeft
+ << Atom(Atom::Link, exampleUrl.replace(placeholder, path.join(separator)))
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << Atom(Atom::String, link)
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom::ParaRight;
+
+ generateText(text, nullptr, marker);
+}
+
+void Generator::addImageToCopy(const ExampleNode *en, const ResolvedFile& resolved_file)
+{
+ QDir dirInfo;
+ // TODO: [uncentralized-output-directory-structure]
+ const QString prefix("/images/used-in-examples");
+
+ // TODO: Generators probably should not need to keep track of which files were generated.
+ // Understand if we really need this information and where it should
+ // belong, considering that it should be part of whichever system
+ // would actually store the file itself.
+ s_outFileNames << prefix.mid(1) + "/" + resolved_file.get_query();
+
+
+ // TODO: [uncentralized-output-directory-structure]
+ QString imgOutDir = s_outDir + prefix + "/" + QFileInfo{resolved_file.get_query()}.path();
+ if (!dirInfo.mkpath(imgOutDir))
+ en->location().fatal(QStringLiteral("Cannot create output directory '%1'").arg(imgOutDir));
+ Config::copyFile(en->location(), resolved_file.get_path(), QFileInfo{resolved_file.get_query()}.fileName(), imgOutDir);
+}
+
+// TODO: [multi-purpose-function-with-flag][generate-file-list]
+// Avoid the use of a boolean flag to dispatch to the correct
+// implementation trough branching.
+// We always have to process both images and files, such that we
+// should consider to remove the branching altogheter, performing both
+// operations in a single call.
+// Otherwise, if this turns out to be infeasible, complex or
+// possibly-confusing, consider extracting the processing code outside
+// the function and provide two higer-level dispathing functions for
+// files and images.
+
+/*!
+ This function is called when the documentation for an example is
+ being formatted. It outputs a list of files for the example, which
+ can be the example's source files or the list of images used by the
+ example. The images are copied into a subtree of
+ \c{...doc/html/images/used-in-examples/...}
+*/
+void Generator::generateFileList(const ExampleNode *en, CodeMarker *marker, bool images)
+{
+ Text text;
+ OpenedList openedList(OpenedList::Bullet);
+ QString tag;
+ QStringList paths;
+ Atom::AtomType atomType = Atom::ExampleFileLink;
+
+ if (images) {
+ paths = en->images();
+ tag = "Images:";
+ atomType = Atom::ExampleImageLink;
+ } else { // files
+ paths = en->files();
+ tag = "Files:";
+ }
+ std::sort(paths.begin(), paths.end(), Generator::comparePaths);
+
+ text << Atom::ParaLeft << tag << Atom::ParaRight;
+ text << Atom(Atom::ListLeft, openedList.styleString());
+
+ for (const auto &path : std::as_const(paths)) {
+ auto maybe_resolved_file{file_resolver.resolve(path)};
+ if (!maybe_resolved_file) {
+ // TODO: [uncentralized-admonition][failed-resolve-file]
+ QString details = std::transform_reduce(
+ file_resolver.get_search_directories().cbegin(),
+ file_resolver.get_search_directories().cend(),
+ u"Searched directories:"_s,
+ std::plus(),
+ [](const DirectoryPath &directory_path) -> QString { return u' ' + directory_path.value(); }
+ );
+
+ en->location().warning(u"(Generator)Cannot find file to quote from: %1"_s.arg(path), details);
+
+ continue;
+ }
+
+ auto file{*maybe_resolved_file};
+ if (images) addImageToCopy(en, file);
+ else generateExampleFilePage(en, file, marker);
+
+ openedList.next();
+ text << Atom(Atom::ListItemNumber, openedList.numberString())
+ << Atom(Atom::ListItemLeft, openedList.styleString()) << Atom::ParaLeft
+ << Atom(atomType, file.get_query()) << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << file.get_query()
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom::ParaRight
+ << Atom(Atom::ListItemRight, openedList.styleString());
+ }
+ text << Atom(Atom::ListRight, openedList.styleString());
+ if (!paths.isEmpty())
+ generateText(text, en, marker);
+}
+
+/*!
+ Recursive writing of HTML files from the root \a node.
+ */
+void Generator::generateDocumentation(Node *node)
+{
+ if (!node->url().isNull())
+ return;
+ if (node->isIndexNode())
+ return;
+ if (node->isInternal() && !m_showInternal)
+ return;
+ if (node->isExternalPage())
+ return;
+
+ /*
+ Obtain a code marker for the source file.
+ */
+ CodeMarker *marker = CodeMarker::markerForFileName(node->location().filePath());
+
+ if (node->parent() != nullptr) {
+ if (node->isCollectionNode()) {
+ /*
+ A collection node collects: groups, C++ modules, or QML
+ modules. Testing for a CollectionNode must be done
+ before testing for a TextPageNode because a
+ CollectionNode is a PageNode at this point.
+
+ Don't output an HTML page for the collection node unless
+ the \group, \module, or \qmlmodule command was actually
+ seen by qdoc in the qdoc comment for the node.
+
+ A key prerequisite in this case is the call to
+ mergeCollections(cn). We must determine whether this
+ group, module or QML module has members in other
+ modules. We know at this point that cn's members list
+ contains only members in the current module. Therefore,
+ before outputting the page for cn, we must search for
+ members of cn in the other modules and add them to the
+ members list.
+ */
+ auto *cn = static_cast<CollectionNode *>(node);
+ if (cn->wasSeen()) {
+ m_qdb->mergeCollections(cn);
+ beginSubPage(node, fileName(node));
+ generateCollectionNode(cn, marker);
+ endSubPage();
+ } else if (cn->isGenericCollection()) {
+ // Currently used only for the module's related orphans page
+ // but can be generalized for other kinds of collections if
+ // other use cases pop up.
+ QString name = cn->name().toLower();
+ name.replace(QChar(' '), QString("-"));
+ QString filename =
+ cn->tree()->physicalModuleName() + "-" + name + "." + fileExtension();
+ beginSubPage(node, filename);
+ generateGenericCollectionPage(cn, marker);
+ endSubPage();
+ }
+ } else if (node->isTextPageNode()) {
+ beginSubPage(node, fileName(node));
+ generatePageNode(static_cast<PageNode *>(node), marker);
+ endSubPage();
+ } else if (node->isAggregate()) {
+ if ((node->isClassNode() || node->isHeader() || node->isNamespace())
+ && node->docMustBeGenerated()) {
+ beginSubPage(node, fileName(node));
+ generateCppReferencePage(static_cast<Aggregate *>(node), marker);
+ endSubPage();
+ } else if (node->isQmlType()) {
+ beginSubPage(node, fileName(node));
+ auto *qcn = static_cast<QmlTypeNode *>(node);
+ generateQmlTypePage(qcn, marker);
+ endSubPage();
+ } else if (node->isProxyNode()) {
+ beginSubPage(node, fileName(node));
+ generateProxyPage(static_cast<Aggregate *>(node), marker);
+ endSubPage();
+ }
+ }
+ }
+
+ if (node->isAggregate()) {
+ auto *aggregate = static_cast<Aggregate *>(node);
+ const NodeList &children = aggregate->childNodes();
+ for (auto *child : children) {
+ if (child->isPageNode() && !child->isPrivate()) {
+ generateDocumentation(child);
+ } else if (!node->parent() && child->isInAPI() && !child->isRelatedNonmember()) {
+ // Warn if there are documented non-page-generating nodes in the root namespace
+ child->location().warning(u"No documentation generated for %1 '%2' in global scope."_s
+ .arg(typeString(child), child->name()),
+ u"Maybe you forgot to use the '\\relates' command?"_s);
+ child->setStatus(Node::DontDocument);
+ } else if (child->isQmlModule() && !child->wasSeen()) {
+ // An undocumented QML module that was constructed as a placeholder
+ auto *qmlModule = static_cast<CollectionNode *>(child);
+ for (const auto *member : qmlModule->members()) {
+ member->location().warning(
+ u"Undocumented QML module '%1' referred by type '%2' or its members"_s
+ .arg(qmlModule->name(), member->name()),
+ u"Maybe you forgot to document '\\qmlmodule %1'?"_s
+ .arg(qmlModule->name()));
+ }
+ } else if (child->isQmlType() && !child->hasDoc()) {
+ // A placeholder QML type with incorrect module identifier
+ auto *qmlType = static_cast<QmlTypeNode *>(child);
+ if (auto qmid = qmlType->logicalModuleName(); !qmid.isEmpty())
+ qmlType->location().warning(u"No such type '%1' in QML module '%2'"_s
+ .arg(qmlType->name(), qmid));
+ }
+ }
+ }
+}
+
+void Generator::generateReimplementsClause(const FunctionNode *fn, CodeMarker *marker)
+{
+ if (fn->overridesThis().isEmpty() || !fn->parent()->isClassNode())
+ return;
+
+ auto *cn = static_cast<ClassNode *>(fn->parent());
+ const FunctionNode *overrides = cn->findOverriddenFunction(fn);
+ if (overrides && !overrides->isPrivate() && !overrides->parent()->isPrivate()) {
+ if (overrides->hasDoc()) {
+ Text text;
+ text << Atom::ParaLeft << "Reimplements: ";
+ QString fullName =
+ overrides->parent()->name()
+ + "::" + overrides->signature(Node::SignaturePlain);
+ appendFullName(text, overrides->parent(), fullName, overrides);
+ text << "." << Atom::ParaRight;
+ generateText(text, fn, marker);
+ } else {
+ fn->doc().location().warning(
+ QStringLiteral("Illegal \\reimp; no documented virtual function for %1")
+ .arg(overrides->plainSignature()));
+ }
+ return;
+ }
+ const PropertyNode *sameName = cn->findOverriddenProperty(fn);
+ if (sameName && sameName->hasDoc()) {
+ Text text;
+ text << Atom::ParaLeft << "Reimplements an access function for property: ";
+ QString fullName = sameName->parent()->name() + "::" + sameName->name();
+ appendFullName(text, sameName->parent(), fullName, sameName);
+ text << "." << Atom::ParaRight;
+ generateText(text, fn, marker);
+ }
+}
+
+QString Generator::formatSince(const Node *node)
+{
+ QStringList since = node->since().split(QLatin1Char(' '));
+
+ // If there is only one argument, assume it is the Qt version number.
+ if (since.size() == 1)
+ return "Qt " + since[0];
+
+ // Otherwise, use the original <project> <version> string.
+ return node->since();
+}
+
+/*!
+ \internal
+ Returns a string representing status information of a \a node.
+
+ If a status description is returned, it is one of:
+ \list
+ \li Custom status set explicitly in node's documentation using
+ \c {\meta {status} {<description>}},
+ \li 'Deprecated [since <version>]' (\\deprecated [<version>]),
+ \li 'Until <version>',
+ \li 'Preliminary' (\\preliminary), or
+ \li The description adopted from associated module's state:
+ \c {\modulestate {<description>}}.
+ \endlist
+
+ Otherwise, returns \c std::nullopt.
+*/
+std::optional<QString> formatStatus(const Node *node, QDocDatabase *qdb)
+{
+ QString status;
+
+ if (const auto metaMap = node->doc().metaTagMap(); metaMap) {
+ status = metaMap->value("status");
+ if (!status.isEmpty())
+ return {status};
+ }
+ const auto since = node->deprecatedSince();
+ if (node->status() == Node::Deprecated) {
+ status = u"Deprecated"_s;
+ if (!since.isEmpty())
+ status += " since %1"_L1.arg(since);
+ } else if (!since.isEmpty()) {
+ status = "Until %1"_L1.arg(since);
+ } else if (node->status() == Node::Preliminary) {
+ status = u"Preliminary"_s;
+ } else if (const auto collection = qdb->getModuleNode(node); collection) {
+ status = collection->state();
+ }
+
+ return status.isEmpty() ? std::nullopt : std::optional(status);
+}
+
+void Generator::generateSince(const Node *node, CodeMarker *marker)
+{
+ if (!node->since().isEmpty()) {
+ Text text;
+ text << Atom::ParaLeft << "This " << typeString(node) << " was introduced in "
+ << formatSince(node) << "." << Atom::ParaRight;
+ generateText(text, node, marker);
+ }
+}
+
+void Generator::generateNoexceptNote(const Node* node, CodeMarker* marker) {
+ std::vector<const Node*> nodes;
+ if (node->isSharedCommentNode()) {
+ auto shared_node = static_cast<const SharedCommentNode*>(node);
+ nodes.reserve(shared_node->collective().size());
+ nodes.insert(nodes.begin(), shared_node->collective().begin(), shared_node->collective().end());
+ } else nodes.push_back(node);
+
+ std::size_t counter{1};
+ for (const Node* node : nodes) {
+ if (node->isFunction(Node::CPP)) {
+ if (auto exception_info = static_cast<const FunctionNode*>(node)->getNoexcept(); exception_info && !(*exception_info).isEmpty()) {
+ Text text;
+ text << Atom::NoteLeft
+ << (nodes.size() > 1 ? QString::fromStdString(" ("s + std::to_string(counter) + ")"s) : QString::fromStdString("This ") + typeString(node))
+ << " does not throw any exception when " << "\"" << *exception_info << "\"" << " is true."
+ << Atom::NoteRight;
+ generateText(text, node, marker);
+ }
+ }
+
+ ++counter;
+ }
+}
+
+void Generator::generateStatus(const Node *node, CodeMarker *marker)
+{
+ Text text;
+
+ switch (node->status()) {
+ case Node::Active:
+ // Output the module 'state' description if set.
+ if (node->isModule() || node->isQmlModule()) {
+ const QString &state = static_cast<const CollectionNode*>(node)->state();
+ if (!state.isEmpty()) {
+ text << Atom::ParaLeft << "This " << typeString(node) << " is in "
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_ITALIC) << state
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_ITALIC) << " state."
+ << Atom::ParaRight;
+ break;
+ }
+ }
+ if (const auto version = node->deprecatedSince(); !version.isEmpty()) {
+ text << Atom::ParaLeft << "This " << typeString(node)
+ << " is scheduled for deprecation in version "
+ << version << "." << Atom::ParaRight;
+ }
+ break;
+ case Node::Preliminary:
+ text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) << "This "
+ << typeString(node) << " is under development and is subject to change."
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) << Atom::ParaRight;
+ break;
+ case Node::Deprecated:
+ text << Atom::ParaLeft;
+ if (node->isAggregate())
+ text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD);
+ text << "This " << typeString(node) << " is deprecated";
+ if (const QString &version = node->deprecatedSince(); !version.isEmpty()) {
+ text << " since ";
+ if (node->isQmlNode() && !node->logicalModuleName().isEmpty())
+ text << node->logicalModuleName() << " ";
+ text << version;
+ }
+
+ text << ". We strongly advise against using it in new code.";
+ if (node->isAggregate())
+ text << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD);
+ text << Atom::ParaRight;
+ break;
+ case Node::Internal:
+ default:
+ break;
+ }
+ generateText(text, node, marker);
+}
+
+/*!
+ Generates an addendum note of type \a type for \a node, using \a marker
+ as the code marker.
+*/
+void Generator::generateAddendum(const Node *node, Addendum type, CodeMarker *marker,
+ bool generateNote)
+{
+ Q_ASSERT(node && !node->name().isEmpty());
+ Text text;
+ text << Atom(Atom::DivLeft,
+ "class=\"admonition %1\""_L1.arg(generateNote ? u"note"_s : u"auto"_s));
+ text << Atom::ParaLeft;
+
+ if (generateNote) {
+ text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD)
+ << "Note: " << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD);
+ }
+
+ switch (type) {
+ case Invokable:
+ text << "This function can be invoked via the meta-object system and from QML. See "
+ << Atom(Atom::AutoLink, "Q_INVOKABLE")
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << ".";
+ break;
+ case PrivateSignal:
+ text << "This is a private signal. It can be used in signal connections "
+ "but cannot be emitted by the user.";
+ break;
+ case QmlSignalHandler:
+ {
+ QString handler(node->name());
+ qsizetype prefixLocation = handler.lastIndexOf('.', -2) + 1;
+ handler[prefixLocation] = handler[prefixLocation].toTitleCase();
+ handler.insert(prefixLocation, QLatin1String("on"));
+ text << "The corresponding handler is "
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_TELETYPE) << handler
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_TELETYPE) << ".";
+ break;
+ }
+ case AssociatedProperties:
+ {
+ if (!node->isFunction())
+ return;
+ const auto *fn = static_cast<const FunctionNode *>(node);
+ auto nodes = fn->associatedProperties();
+ if (nodes.isEmpty())
+ return;
+ std::sort(nodes.begin(), nodes.end(), Node::nodeNameLessThan);
+ for (const auto *n : std::as_const(nodes)) {
+ QString msg;
+ const auto *pn = static_cast<const PropertyNode *>(n);
+ switch (pn->role(fn)) {
+ case PropertyNode::FunctionRole::Getter:
+ msg = QStringLiteral("Getter function");
+ break;
+ case PropertyNode::FunctionRole::Setter:
+ msg = QStringLiteral("Setter function");
+ break;
+ case PropertyNode::FunctionRole::Resetter:
+ msg = QStringLiteral("Resetter function");
+ break;
+ case PropertyNode::FunctionRole::Notifier:
+ msg = QStringLiteral("Notifier signal");
+ break;
+ default:
+ continue;
+ }
+ text << msg << " for property " << Atom(Atom::Link, pn->name())
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << pn->name()
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << ". ";
+ }
+ break;
+ }
+ case BindableProperty:
+ {
+ text << "This property supports "
+ << Atom(Atom::Link, "QProperty")
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << "QProperty"
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
+ text << " bindings.";
+ break;
+ }
+ default:
+ return;
+ }
+
+ text << Atom::ParaRight
+ << Atom::DivRight;
+ generateText(text, node, marker);
+}
+
+/*!
+ Generate the documentation for \a relative. i.e. \a relative
+ is the node that represents the entity where a qdoc comment
+ was found, and \a text represents the qdoc comment.
+ */
+bool Generator::generateText(const Text &text, const Node *relative, CodeMarker *marker)
+{
+ bool result = false;
+ if (text.firstAtom() != nullptr) {
+ int numAtoms = 0;
+ initializeTextOutput();
+ generateAtomList(text.firstAtom(), relative, marker, true, numAtoms);
+ result = true;
+ }
+ return result;
+}
+
+/*
+ The node is an aggregate, typically a class node, which has
+ a threadsafeness level. This function checks all the children
+ of the node to see if they are exceptions to the node's
+ threadsafeness. If there are any exceptions, the exceptions
+ are added to the appropriate set (reentrant, threadsafe, and
+ nonreentrant, and true is returned. If there are no exceptions,
+ the three node lists remain empty and false is returned.
+ */
+bool Generator::hasExceptions(const Node *node, NodeList &reentrant, NodeList &threadsafe,
+ NodeList &nonreentrant)
+{
+ bool result = false;
+ Node::ThreadSafeness ts = node->threadSafeness();
+ const NodeList &children = static_cast<const Aggregate *>(node)->childNodes();
+ for (auto child : children) {
+ if (!child->isDeprecated()) {
+ switch (child->threadSafeness()) {
+ case Node::Reentrant:
+ reentrant.append(child);
+ if (ts == Node::ThreadSafe)
+ result = true;
+ break;
+ case Node::ThreadSafe:
+ threadsafe.append(child);
+ if (ts == Node::Reentrant)
+ result = true;
+ break;
+ case Node::NonReentrant:
+ nonreentrant.append(child);
+ result = true;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ return result;
+}
+
+static void startNote(Text &text)
+{
+ text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD)
+ << "Note:" << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) << " ";
+}
+
+/*!
+ Generates text that explains how threadsafe and/or reentrant
+ \a node is.
+ */
+void Generator::generateThreadSafeness(const Node *node, CodeMarker *marker)
+{
+ Text text, rlink, tlink;
+ NodeList reentrant;
+ NodeList threadsafe;
+ NodeList nonreentrant;
+ Node::ThreadSafeness ts = node->threadSafeness();
+ bool exceptions = false;
+
+ rlink << Atom(Atom::Link, "reentrant") << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
+ << "reentrant" << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
+
+ tlink << Atom(Atom::Link, "thread-safe") << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
+ << "thread-safe" << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
+
+ switch (ts) {
+ case Node::UnspecifiedSafeness:
+ break;
+ case Node::NonReentrant:
+ text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD)
+ << "Warning:" << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) << " This "
+ << typeString(node) << " is not " << rlink << "." << Atom::ParaRight;
+ break;
+ case Node::Reentrant:
+ case Node::ThreadSafe:
+ startNote(text);
+ if (node->isAggregate()) {
+ exceptions = hasExceptions(node, reentrant, threadsafe, nonreentrant);
+ text << "All functions in this " << typeString(node) << " are ";
+ if (ts == Node::ThreadSafe)
+ text << tlink;
+ else
+ text << rlink;
+
+ if (!exceptions || (ts == Node::Reentrant && !threadsafe.isEmpty()))
+ text << ".";
+ else
+ text << " with the following exceptions:";
+ } else {
+ text << "This " << typeString(node) << " is ";
+ if (ts == Node::ThreadSafe)
+ text << tlink;
+ else
+ text << rlink;
+ text << ".";
+ }
+ text << Atom::ParaRight;
+ break;
+ default:
+ break;
+ }
+ generateText(text, node, marker);
+
+ if (exceptions) {
+ text.clear();
+ if (ts == Node::Reentrant) {
+ if (!nonreentrant.isEmpty()) {
+ startNote(text);
+ text << "These functions are not " << rlink << ":" << Atom::ParaRight;
+ signatureList(nonreentrant, node, marker);
+ }
+ if (!threadsafe.isEmpty()) {
+ text.clear();
+ startNote(text);
+ text << "These functions are also " << tlink << ":" << Atom::ParaRight;
+ generateText(text, node, marker);
+ signatureList(threadsafe, node, marker);
+ }
+ } else { // thread-safe
+ if (!reentrant.isEmpty()) {
+ startNote(text);
+ text << "These functions are only " << rlink << ":" << Atom::ParaRight;
+ signatureList(reentrant, node, marker);
+ }
+ if (!nonreentrant.isEmpty()) {
+ text.clear();
+ startNote(text);
+ text << "These functions are not " << rlink << ":" << Atom::ParaRight;
+ signatureList(nonreentrant, node, marker);
+ }
+ }
+ }
+}
+
+/*!
+ \internal
+
+ Generates text that describes the comparison category of \a node.
+ The CodeMarker \a marker is passed along to generateText().
+ */
+bool Generator::generateComparisonCategory(const Node *node, CodeMarker *marker)
+{
+ auto category{node->comparisonCategory()};
+ if (category == ComparisonCategory::None)
+ return false;
+
+ Text text;
+ text << Atom::ParaLeft << "This %1 is "_L1.arg(typeString(node))
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_ITALIC)
+ << QString::fromStdString(comparisonCategoryAsString(category))
+ << ((category == ComparisonCategory::Equality) ? "-"_L1 : "ly "_L1)
+ << Atom(Atom::String, "comparable"_L1)
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_ITALIC)
+ << "."_L1 << Atom::ParaRight;
+ generateText(text, node, marker);
+ return true;
+}
+
+/*!
+ Generates a list of types that compare to \a node with the comparison
+ category that applies for the relationship, followed by (an optional)
+ descriptive text.
+
+ Returns \c true if text was generated, \c false otherwise.
+ */
+bool Generator::generateComparisonList(const Node *node)
+{
+ Q_ASSERT(node);
+ if (!node->doc().comparesWithMap())
+ return false;
+
+ Text relationshipText;
+ for (auto [key, description] : node->doc().comparesWithMap()->asKeyValueRange()) {
+ const QString &category = QString::fromStdString(comparisonCategoryAsString(key));
+
+ relationshipText << Atom::ParaLeft << "This %1 is "_L1.arg(typeString(node))
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) << category
+ << ((key == ComparisonCategory::Equality) ? "-"_L1 : "ly "_L1)
+ << "comparable"_L1
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD)
+ << " with "_L1;
+
+ const QStringList types{description.firstAtom()->string().split(';'_L1)};
+ for (const auto &name : types)
+ relationshipText << Atom(Atom::AutoLink, name)
+ << Utilities::separator(types.indexOf(name), types.size());
+
+ relationshipText << Atom(Atom::ParaRight) << description;
+ }
+
+ generateText(relationshipText, node, nullptr);
+ return !relationshipText.isEmpty();
+}
+
+/*!
+ Returns the string containing an example code of the input node,
+ if it is an overloaded signal. Otherwise, returns an empty string.
+ */
+QString Generator::getOverloadedSignalCode(const Node *node)
+{
+ if (!node->isFunction())
+ return QString();
+ const auto func = static_cast<const FunctionNode *>(node);
+ if (!func->isSignal() || !func->hasOverloads())
+ return QString();
+
+ // Compute a friendly name for the object of that instance.
+ // e.g: "QAbstractSocket" -> "abstractSocket"
+ QString objectName = node->parent()->name();
+ if (objectName.size() >= 2) {
+ if (objectName[0] == 'Q')
+ objectName = objectName.mid(1);
+ objectName[0] = objectName[0].toLower();
+ }
+
+ // We have an overloaded signal, show an example. Note, for const
+ // overloaded signals, one should use Q{Const,NonConst}Overload, but
+ // it is very unlikely that we will ever have public API overloading
+ // signals by const.
+ QString code = "connect(" + objectName + ", QOverload<";
+ code += func->parameters().generateTypeList();
+ code += ">::of(&" + func->parent()->name() + "::" + func->name() + "),\n [=](";
+ code += func->parameters().generateTypeAndNameList();
+ code += "){ /* ... */ });";
+
+ return code;
+}
+
+/*!
+ If the node is an overloaded signal, add a node with an example on how to connect to it
+ */
+void Generator::generateOverloadedSignal(const Node *node, CodeMarker *marker)
+{
+ QString code = getOverloadedSignalCode(node);
+ if (code.isEmpty())
+ return;
+
+ Text text;
+ text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD)
+ << "Note:" << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) << " Signal "
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_ITALIC) << node->name()
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_ITALIC)
+ << " is overloaded in this class. "
+ "To connect to this signal by using the function pointer syntax, Qt "
+ "provides a convenient helper for obtaining the function pointer as "
+ "shown in this example:"
+ << Atom(Atom::Code, marker->markedUpCode(code, node, node->location()));
+
+ generateText(text, node, marker);
+}
+
+/*!
+ Traverses the database recursively to generate all the documentation.
+ */
+void Generator::generateDocs()
+{
+ s_currentGenerator = this;
+ generateDocumentation(m_qdb->primaryTreeRoot());
+}
+
+Generator *Generator::generatorForFormat(const QString &format)
+{
+ for (const auto &generator : std::as_const(s_generators)) {
+ if (generator->format() == format)
+ return generator;
+ }
+ return nullptr;
+}
+
+QString Generator::indent(int level, const QString &markedCode)
+{
+ if (level == 0)
+ return markedCode;
+
+ QString t;
+ int column = 0;
+
+ int i = 0;
+ while (i < markedCode.size()) {
+ if (markedCode.at(i) == QLatin1Char('\n')) {
+ column = 0;
+ } else {
+ if (column == 0) {
+ for (int j = 0; j < level; j++)
+ t += QLatin1Char(' ');
+ }
+ column++;
+ }
+ t += markedCode.at(i++);
+ }
+ return t;
+}
+
+void Generator::initialize()
+{
+ Config &config = Config::instance();
+ s_outputFormats = config.getOutputFormats();
+ s_redirectDocumentationToDevNull = config.get(CONFIG_REDIRECTDOCUMENTATIONTODEVNULL).asBool();
+
+ for (auto &g : s_generators) {
+ if (s_outputFormats.contains(g->format())) {
+ s_currentGenerator = g;
+ g->initializeGenerator();
+ }
+ }
+
+ const auto &configFormatting = config.subVars(CONFIG_FORMATTING);
+ for (const auto &n : configFormatting) {
+ QString formattingDotName = CONFIG_FORMATTING + Config::dot + n;
+ const auto &formattingDotNames = config.subVars(formattingDotName);
+ for (const auto &f : formattingDotNames) {
+ const auto &configVar = config.get(formattingDotName + Config::dot + f);
+ QString def{configVar.asString()};
+ if (!def.isEmpty()) {
+ int numParams = Config::numParams(def);
+ int numOccs = def.count("\1");
+ if (numParams != 1) {
+ configVar.location().warning(QStringLiteral("Formatting '%1' must "
+ "have exactly one "
+ "parameter (found %2)")
+ .arg(n, numParams));
+ } else if (numOccs > 1) {
+ configVar.location().fatal(QStringLiteral("Formatting '%1' must "
+ "contain exactly one "
+ "occurrence of '\\1' "
+ "(found %2)")
+ .arg(n, numOccs));
+ } else {
+ int paramPos = def.indexOf("\1");
+ s_fmtLeftMaps[f].insert(n, def.left(paramPos));
+ s_fmtRightMaps[f].insert(n, def.mid(paramPos + 1));
+ }
+ }
+ }
+ }
+
+ s_project = config.get(CONFIG_PROJECT).asString();
+ s_outDir = config.getOutputDir();
+ s_outSubdir = s_outDir.mid(s_outDir.lastIndexOf('/') + 1);
+
+ s_outputPrefixes.clear();
+ QStringList items{config.get(CONFIG_OUTPUTPREFIXES).asStringList()};
+ if (!items.isEmpty()) {
+ for (const auto &prefix : items)
+ s_outputPrefixes[prefix] =
+ config.get(CONFIG_OUTPUTPREFIXES + Config::dot + prefix).asString();
+ } else {
+ s_outputPrefixes[QLatin1String("QML")] = QLatin1String("qml-");
+ }
+
+ s_outputSuffixes.clear();
+ for (const auto &suffix : config.get(CONFIG_OUTPUTSUFFIXES).asStringList())
+ s_outputSuffixes[suffix] = config.get(CONFIG_OUTPUTSUFFIXES
+ + Config::dot + suffix).asString();
+
+ s_noLinkErrors = config.get(CONFIG_NOLINKERRORS).asBool();
+ s_autolinkErrors = config.get(CONFIG_AUTOLINKERRORS).asBool();
+}
+
+/*!
+ Creates template-specific subdirs (e.g. /styles and /scripts for HTML)
+ and copies the files to them.
+ */
+void Generator::copyTemplateFiles(const QString &configVar, const QString &subDir)
+{
+ // TODO: [resolving-files-unlinked-to-doc]
+ // This is another case of resolving files, albeit it doesn't use Doc::resolveFile.
+ // While it may be left out of a first iteration of the file
+ // resolution logic, it should later be integrated into it.
+ // This should come naturally when the output directory logic is
+ // extracted and copying a file should require a validated
+ // intermediate format.
+ // Do note that what is done here is a bit different from the
+ // resolve file routine that is done for other user-given paths.
+ // Thas is, the paths will always be absolute and not relative as
+ // they are resolved from the configuration.
+ // Ideally, this could be solved in the configuration already,
+ // together with the other configuration resolution processes that
+ // do not abide by the same constraints that, for example, snippet
+ // resolution uses.
+ Config &config = Config::instance();
+ QStringList files = config.getCanonicalPathList(configVar, Config::Validate);
+ const auto &loc = config.get(configVar).location();
+ if (!files.isEmpty()) {
+ QDir dirInfo;
+ // TODO: [uncentralized-output-directory-structure]
+ // As with other places in the generation pass, the details of
+ // where something is saved in the output directory are spread
+ // to whichever part of the generation does the saving.
+ // It is hence complex to build a model of how an output
+ // directory looks like, as the knowledge has no specific
+ // entry point or chain-path that can be followed in full.
+ // Each of those operations should be centralized in a system
+ // that uniquely knows what the format of the output-directory
+ // is and how to perform operations on it.
+ // Later, move this operation to that centralized system.
+ QString templateDir = s_outDir + QLatin1Char('/') + subDir;
+ if (!dirInfo.exists(templateDir) && !dirInfo.mkdir(templateDir)) {
+ // TODO: [uncentralized-admonition]
+ loc.fatal(QStringLiteral("Cannot create %1 directory '%2'").arg(subDir, templateDir));
+ } else {
+ for (const auto &file : files) {
+ if (!file.isEmpty())
+ Config::copyFile(loc, file, file, templateDir);
+ }
+ }
+ }
+}
+
+/*!
+ Reads format-specific variables from config, sets output
+ (sub)directories, creates them on the filesystem and copies the
+ template-specific files.
+ */
+void Generator::initializeFormat()
+{
+ Config &config = Config::instance();
+ s_outFileNames.clear();
+ s_useOutputSubdirs = true;
+ if (config.get(format() + Config::dot + "nosubdirs").asBool())
+ resetUseOutputSubdirs();
+
+ if (s_outputFormats.isEmpty())
+ return;
+
+ s_outDir = config.getOutputDir(format());
+ if (s_outDir.isEmpty()) {
+ Location().fatal(QStringLiteral("No output directory specified in "
+ "configuration file or on the command line"));
+ } else {
+ s_outSubdir = s_outDir.mid(s_outDir.lastIndexOf('/') + 1);
+ }
+
+ QDir outputDir(s_outDir);
+ if (outputDir.exists()) {
+ if (!config.generating() && Generator::useOutputSubdirs()) {
+ if (!outputDir.isEmpty())
+ Location().error(QStringLiteral("Output directory '%1' exists but is not empty")
+ .arg(s_outDir));
+ }
+ } else if (!outputDir.mkpath(QStringLiteral("."))) {
+ Location().fatal(QStringLiteral("Cannot create output directory '%1'").arg(s_outDir));
+ }
+
+ // Output directory exists, which is enough for prepare phase.
+ if (config.preparing())
+ return;
+
+ const QLatin1String imagesDir("images");
+ if (!outputDir.exists(imagesDir) && !outputDir.mkdir(imagesDir))
+ Location().fatal(QStringLiteral("Cannot create images directory '%1'").arg(outputDir.filePath(imagesDir)));
+
+ copyTemplateFiles(format() + Config::dot + CONFIG_STYLESHEETS, "style");
+ copyTemplateFiles(format() + Config::dot + CONFIG_SCRIPTS, "scripts");
+ copyTemplateFiles(format() + Config::dot + CONFIG_EXTRAIMAGES, "images");
+
+ // Use a format-specific .quotinginformation if defined, otherwise a global value
+ if (config.subVars(format()).contains(CONFIG_QUOTINGINFORMATION))
+ m_quoting = config.get(format() + Config::dot + CONFIG_QUOTINGINFORMATION).asBool();
+ else
+ m_quoting = config.get(CONFIG_QUOTINGINFORMATION).asBool();
+}
+
+/*!
+ Updates the generator's m_showInternal from the Config.
+ */
+void Generator::initializeGenerator()
+{
+ m_showInternal = Config::instance().showInternal();
+}
+
+bool Generator::matchAhead(const Atom *atom, Atom::AtomType expectedAtomType)
+{
+ return atom->next() && atom->next()->type() == expectedAtomType;
+}
+
+/*!
+ Used for writing to the current output stream. Returns a
+ reference to the current output stream, which is then used
+ with the \c {<<} operator for writing.
+ */
+QTextStream &Generator::out()
+{
+ return *outStreamStack.top();
+}
+
+QString Generator::outFileName()
+{
+ return QFileInfo(static_cast<QFile *>(out().device())->fileName()).fileName();
+}
+
+QString Generator::outputPrefix(const Node *node)
+{
+ // Prefix is applied to QML types
+ if (node->isQmlType())
+ return s_outputPrefixes[QLatin1String("QML")];
+
+ 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")];
+
+ return QString();
+}
+
+bool Generator::parseArg(const QString &src, const QString &tag, int *pos, int n,
+ QStringView *contents, QStringView *par1)
+{
+#define SKIP_CHAR(c) \
+ if (i >= n || src[i] != c) \
+ return false; \
+ ++i;
+
+#define SKIP_SPACE \
+ while (i < n && src[i] == ' ') \
+ ++i;
+
+ qsizetype i = *pos;
+ qsizetype j {};
+
+ // assume "<@" has been parsed outside
+ // SKIP_CHAR('<');
+ // SKIP_CHAR('@');
+
+ if (tag != QStringView(src).mid(i, tag.size())) {
+ return false;
+ }
+
+ // skip tag
+ i += tag.size();
+
+ // parse stuff like: linkTag("(<@link node=\"([^\"]+)\">).*(</@link>)");
+ if (par1) {
+ SKIP_SPACE;
+ // read parameter name
+ j = i;
+ while (i < n && src[i].isLetter())
+ ++i;
+ if (src[i] == '=') {
+ SKIP_CHAR('=');
+ SKIP_CHAR('"');
+ // skip parameter name
+ j = i;
+ while (i < n && src[i] != '"')
+ ++i;
+ *par1 = QStringView(src).mid(j, i - j);
+ SKIP_CHAR('"');
+ SKIP_SPACE;
+ }
+ }
+ SKIP_SPACE;
+ SKIP_CHAR('>');
+
+ // find contents up to closing "</@tag>
+ j = i;
+ for (; true; ++i) {
+ if (i + 4 + tag.size() > n)
+ return false;
+ if (src[i] != '<')
+ continue;
+ if (src[i + 1] != '/')
+ continue;
+ if (src[i + 2] != '@')
+ continue;
+ if (tag != QStringView(src).mid(i + 3, tag.size()))
+ continue;
+ if (src[i + 3 + tag.size()] != '>')
+ continue;
+ break;
+ }
+
+ *contents = QStringView(src).mid(j, i - j);
+
+ i += tag.size() + 4;
+
+ *pos = i;
+ return true;
+#undef SKIP_CHAR
+#undef SKIP_SPACE
+}
+
+QString Generator::plainCode(const QString &markedCode)
+{
+ QString t = markedCode;
+ t.replace(tag, QString());
+ t.replace(quot, QLatin1String("\""));
+ t.replace(gt, QLatin1String(">"));
+ t.replace(lt, QLatin1String("<"));
+ t.replace(amp, QLatin1String("&"));
+ return t;
+}
+
+int Generator::skipAtoms(const Atom *atom, Atom::AtomType type) const
+{
+ int skipAhead = 0;
+ atom = atom->next();
+ while (atom && atom->type() != type) {
+ skipAhead++;
+ atom = atom->next();
+ }
+ return skipAhead;
+}
+
+/*!
+ Resets the variables used during text output.
+ */
+void Generator::initializeTextOutput()
+{
+ m_inLink = false;
+ m_inContents = false;
+ m_inSectionHeading = false;
+ m_inTableHeader = false;
+ m_numTableRows = 0;
+ m_threeColumnEnumValueTable = true;
+ m_link.clear();
+ m_sectionNumber.clear();
+}
+
+void Generator::supplementAlsoList(const Node *node, QList<Text> &alsoList)
+{
+ if (node->isFunction() && !node->isMacro()) {
+ const auto fn = static_cast<const FunctionNode *>(node);
+ if (fn->overloadNumber() == 0) {
+ QString alternateName;
+ const FunctionNode *alternateFunc = nullptr;
+
+ if (fn->name().startsWith("set") && fn->name().size() >= 4) {
+ alternateName = fn->name()[3].toLower();
+ alternateName += fn->name().mid(4);
+ alternateFunc = fn->parent()->findFunctionChild(alternateName, QString());
+
+ if (!alternateFunc) {
+ alternateName = "is" + fn->name().mid(3);
+ alternateFunc = fn->parent()->findFunctionChild(alternateName, QString());
+ if (!alternateFunc) {
+ alternateName = "has" + fn->name().mid(3);
+ alternateFunc = fn->parent()->findFunctionChild(alternateName, QString());
+ }
+ }
+ } else if (!fn->name().isEmpty()) {
+ alternateName = "set";
+ alternateName += fn->name()[0].toUpper();
+ alternateName += fn->name().mid(1);
+ alternateFunc = fn->parent()->findFunctionChild(alternateName, QString());
+ }
+
+ if (alternateFunc && alternateFunc->access() != Access::Private) {
+ int i;
+ for (i = 0; i < alsoList.size(); ++i) {
+ if (alsoList.at(i).toString().contains(alternateName))
+ break;
+ }
+
+ if (i == alsoList.size()) {
+ if (alternateFunc->isDeprecated() && !fn->isDeprecated())
+ return;
+ alternateName += "()";
+
+ Text also;
+ also << Atom(Atom::Link, alternateName)
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << alternateName
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
+ alsoList.prepend(also);
+ }
+ }
+ }
+ }
+}
+
+void Generator::generateEnumValuesForQmlProperty(const Node *node, CodeMarker *marker)
+{
+ if (!node->isQmlProperty())
+ return;
+
+ const auto *qpn = static_cast<const QmlPropertyNode*>(node);
+
+ 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);
+ // Skip subsequent ListLeft atoms, collating multiple lists into one
+ text << body.subText(text.isEmpty() ? start : start->next(), end);
+ start = end;
+ }
+ if (text.isEmpty())
+ return;
+
+ text << Atom(Atom::ListRight, ATOM_LIST_VALUE);
+ if (marker)
+ generateText(text, qpn, marker);
+ else
+ generateText(text, qpn);
+}
+
+void Generator::terminate()
+{
+ for (const auto &generator : std::as_const(s_generators)) {
+ if (s_outputFormats.contains(generator->format()))
+ generator->terminateGenerator();
+ }
+
+ // REMARK: Generators currently, due to recent changes and the
+ // transitive nature of the current codebase, receive some of
+ // their dependencies in the constructor and some of them in their
+ // initialize-terminate lifetime.
+ // This means that generators need to be constructed and
+ // destructed between usages such that if multiple usages are
+ // required, the generators present in the list will have been
+ // destroyed by then such that accessing them would be an error.
+ // The current codebase calls initialize and the correspective
+ // terminate with the same scope as the lifetime of the
+ // generators.
+ // Then, clearing the list ensures that, if another generator
+ // execution is needed, the stale generators will not be removed
+ // as to be replaced by newly constructed ones.
+ // Do note that it is not clear that this will happen for any call
+ // in Qt's documentation and this should work only because of the
+ // form of the current codebase and the scoping of the
+ // initialize-terminate calls. As such, this should be considered
+ // a patchwork that may or may not be doing anything and that may
+ // break due to changes in other parts of the codebase.
+ //
+ // This is still to be considered temporary as the whole
+ // initialize-terminate idiom must be removed from the codebase.
+ s_generators.clear();
+
+ s_fmtLeftMaps.clear();
+ s_fmtRightMaps.clear();
+ s_outDir.clear();
+}
+
+void Generator::terminateGenerator() {}
+
+/*!
+ Trims trailing whitespace off the \a string and returns
+ the trimmed string.
+ */
+QString Generator::trimmedTrailing(const QString &string, const QString &prefix,
+ const QString &suffix)
+{
+ QString trimmed = string;
+ while (trimmed.size() > 0 && trimmed[trimmed.size() - 1].isSpace())
+ trimmed.truncate(trimmed.size() - 1);
+
+ trimmed.append(suffix);
+ trimmed.prepend(prefix);
+ return trimmed;
+}
+
+QString Generator::typeString(const Node *node)
+{
+ switch (node->nodeType()) {
+ case Node::Namespace:
+ return "namespace";
+ case Node::Class:
+ return "class";
+ case Node::Struct:
+ return "struct";
+ case Node::Union:
+ return "union";
+ case Node::QmlType:
+ case Node::QmlValueType:
+ return "type";
+ case Node::Page:
+ return "documentation";
+ case Node::Enum:
+ return "enum";
+ case Node::Typedef:
+ case Node::TypeAlias:
+ return "typedef";
+ case Node::Function: {
+ const auto fn = static_cast<const FunctionNode *>(node);
+ switch (fn->metaness()) {
+ case FunctionNode::QmlSignal:
+ return "signal";
+ case FunctionNode::QmlSignalHandler:
+ return "signal handler";
+ case FunctionNode::QmlMethod:
+ return "method";
+ case FunctionNode::MacroWithParams:
+ case FunctionNode::MacroWithoutParams:
+ return "macro";
+ default:
+ break;
+ }
+ return "function";
+ }
+ case Node::Property:
+ case Node::QmlProperty:
+ return "property";
+ case Node::Module:
+ case Node::QmlModule:
+ return "module";
+ case Node::SharedComment: {
+ const auto &collective = static_cast<const SharedCommentNode *>(node)->collective();
+ return collective.first()->nodeTypeString();
+ }
+ default:
+ return "documentation";
+ }
+}
+
+void Generator::unknownAtom(const Atom *atom)
+{
+ Location::internalError(QStringLiteral("unknown atom type '%1' in %2 generator")
+ .arg(atom->typeString(), format()));
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/generator.h b/src/qdoc/qdoc/src/qdoc/generator.h
new file mode 100644
index 000000000..8f2b34039
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/generator.h
@@ -0,0 +1,205 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef GENERATOR_H
+#define GENERATOR_H
+
+#include "text.h"
+#include "utilities.h"
+#include "filesystem/fileresolver.h"
+
+#include <QtCore/qlist.h>
+#include <QtCore/qmap.h>
+#include <QtCore/qstring.h>
+#include <QtCore/qstringlist.h>
+#include <QtCore/qtextstream.h>
+#include <optional>
+
+QT_BEGIN_NAMESPACE
+
+typedef QMultiMap<QString, Node *> NodeMultiMap;
+
+class Aggregate;
+class CodeMarker;
+class ExampleNode;
+class FunctionNode;
+class Location;
+class Node;
+class QDocDatabase;
+
+class Generator
+{
+public:
+ enum ListType { Generic, Obsolete };
+
+ enum Addendum {
+ Invokable,
+ PrivateSignal,
+ QmlSignalHandler,
+ AssociatedProperties,
+ BindableProperty
+ };
+
+ Generator(FileResolver& file_resolver);
+ virtual ~Generator();
+
+ virtual bool canHandleFormat(const QString &format) { return format == this->format(); }
+ virtual QString format() = 0;
+ virtual void generateDocs();
+ virtual void initializeGenerator();
+ virtual void initializeFormat();
+ virtual void terminateGenerator();
+ virtual QString typeString(const Node *node);
+
+ QString fullDocumentLocation(const Node *node);
+ QString linkForExampleFile(const QString &path, const QString &fileExt = QString());
+ static QString exampleFileTitle(const ExampleNode *relative, const QString &fileName);
+ static Generator *currentGenerator() { return s_currentGenerator; }
+ static Generator *generatorForFormat(const QString &format);
+ static void initialize();
+ static const QString &outputDir() { return s_outDir; }
+ static const QString &outputSubdir() { return s_outSubdir; }
+ static void terminate();
+ static const QStringList &outputFileNames() { return s_outFileNames; }
+ static bool noLinkErrors() { return s_noLinkErrors; }
+ static bool autolinkErrors() { return s_autolinkErrors; }
+ static QString defaultModuleName() { return s_project; }
+ static void resetUseOutputSubdirs() { s_useOutputSubdirs = false; }
+ static bool useOutputSubdirs() { return s_useOutputSubdirs; }
+ static void setQmlTypeContext(QmlTypeNode *t) { s_qmlTypeContext = t; }
+ static QmlTypeNode *qmlTypeContext() { return s_qmlTypeContext; }
+ static QString cleanRef(const QString &ref, bool xmlCompliant = false);
+ static QString plainCode(const QString &markedCode);
+ virtual QString fileBase(const Node *node) const;
+
+protected:
+ static QFile *openSubPageFile(const Node *node, const QString &fileName);
+ void beginSubPage(const Node *node, const QString &fileName);
+ void endSubPage();
+ [[nodiscard]] virtual QString fileExtension() const = 0;
+ virtual void generateExampleFilePage(const Node *, ResolvedFile, CodeMarker * = nullptr) {}
+ virtual void generateAlsoList(const Node *node, CodeMarker *marker);
+ virtual void generateAlsoList(const Node *node) { generateAlsoList(node, nullptr); }
+ virtual qsizetype generateAtom(const Atom *, const Node *, CodeMarker *) { return 0; }
+ virtual void generateBody(const Node *node, CodeMarker *marker);
+ virtual void generateCppReferencePage(Aggregate *, CodeMarker *) {}
+ virtual void generateProxyPage(Aggregate *, CodeMarker *) {}
+ virtual void generateQmlTypePage(QmlTypeNode *, CodeMarker *) {}
+ virtual void generatePageNode(PageNode *, CodeMarker *) {}
+ virtual void generateCollectionNode(CollectionNode *, CodeMarker *) {}
+ virtual void generateGenericCollectionPage(CollectionNode *, CodeMarker *) {}
+ virtual void generateDocumentation(Node *node);
+ virtual bool generateText(const Text &text, const Node *relative, CodeMarker *marker);
+ virtual bool generateText(const Text &text, const Node *relative)
+ {
+ return generateText(text, relative, nullptr);
+ };
+ virtual int skipAtoms(const Atom *atom, Atom::AtomType type) const;
+
+ static bool matchAhead(const Atom *atom, Atom::AtomType expectedAtomType);
+ static QString outputPrefix(const Node *node);
+ static QString outputSuffix(const Node *node);
+ static void supplementAlsoList(const Node *node, QList<Text> &alsoList);
+ static QString trimmedTrailing(const QString &string, const QString &prefix,
+ const QString &suffix);
+ void initializeTextOutput();
+ QString fileName(const Node *node, const QString &extension = QString()) const;
+ QMap<QString, QString> &formattingLeftMap();
+ QMap<QString, QString> &formattingRightMap();
+ const Atom *generateAtomList(const Atom *atom, const Node *relative, CodeMarker *marker,
+ bool generate, int &numGeneratedAtoms);
+ void generateEnumValuesForQmlProperty(const Node *node, CodeMarker *marker);
+ void generateRequiredLinks(const Node *node, CodeMarker *marker);
+ void generateLinkToExample(const ExampleNode *en, CodeMarker *marker,
+ const QString &exampleUrl);
+ virtual void generateFileList(const ExampleNode *en, CodeMarker *marker, bool images);
+ static QString formatSince(const Node *node);
+ void generateSince(const Node *node, CodeMarker *marker);
+ void generateNoexceptNote(const Node *node, CodeMarker *marker);
+ void generateStatus(const Node *node, CodeMarker *marker);
+ virtual void generateAddendum(const Node *node, Addendum type, CodeMarker *marker,
+ bool generateNote);
+ virtual void generateAddendum(const Node *node, Addendum type, CodeMarker *marker)
+ {
+ generateAddendum(node, type, marker, true);
+ };
+ void generateThreadSafeness(const Node *node, CodeMarker *marker);
+ bool generateComparisonCategory(const Node *node, CodeMarker *marker = nullptr);
+ bool generateComparisonList(const Node *node);
+
+ void generateOverloadedSignal(const Node *node, CodeMarker *marker);
+ static QString getOverloadedSignalCode(const Node *node);
+ QString indent(int level, const QString &markedCode);
+ QTextStream &out();
+ QString outFileName();
+ bool parseArg(const QString &src, const QString &tag, int *pos, int n, QStringView *contents,
+ QStringView *par1 = nullptr);
+ void unknownAtom(const Atom *atom);
+ int appendSortedQmlNames(Text &text, const Node *base, const NodeList &subs);
+
+ static bool hasExceptions(const Node *node, NodeList &reentrant, NodeList &threadsafe,
+ NodeList &nonreentrant);
+
+ QString naturalLanguage;
+ QString tagFile_;
+ QStack<QTextStream *> outStreamStack;
+
+ void appendFullName(Text &text, const Node *apparentNode, const Node *relative,
+ const Node *actualNode = nullptr);
+ void appendFullName(Text &text, const Node *apparentNode, const QString &fullName,
+ const Node *actualNode);
+ int appendSortedNames(Text &text, const ClassNode *classe,
+ const QList<RelatedClass> &classes);
+ void appendSignature(Text &text, const Node *node);
+ void signatureList(const NodeList &nodes, const Node *relative, CodeMarker *marker);
+
+ void addImageToCopy(const ExampleNode *en, const ResolvedFile& resolved_file);
+ // TODO: This seems to be used as the predicate in std::sort calls.
+ // Remove it as it is unneeded.
+ // Indeed, it could be replaced by std::less and, furthermore,
+ // std::sort already defaults to operator< when no predicate is
+ // provided.
+ static bool comparePaths(const QString &a, const QString &b) { return (a < b); }
+
+private:
+ static Generator *s_currentGenerator;
+ static QMap<QString, QMap<QString, QString>> s_fmtLeftMaps;
+ static QMap<QString, QMap<QString, QString>> s_fmtRightMaps;
+ static QList<Generator *> s_generators;
+ static QString s_project;
+ static QString s_outDir;
+ static QString s_outSubdir;
+ static QStringList s_outFileNames;
+ static QSet<QString> s_outputFormats;
+ static QHash<QString, QString> s_outputPrefixes;
+ static QHash<QString, QString> s_outputSuffixes;
+ static bool s_noLinkErrors;
+ static bool s_autolinkErrors;
+ static bool s_redirectDocumentationToDevNull;
+ static bool s_useOutputSubdirs;
+ static QmlTypeNode *s_qmlTypeContext;
+
+ void generateReimplementsClause(const FunctionNode *fn, CodeMarker *marker);
+ static void copyTemplateFiles(const QString &configVar, const QString &subDir);
+
+protected:
+ FileResolver& file_resolver;
+
+ QDocDatabase *m_qdb { nullptr };
+ bool m_inLink { false };
+ bool m_inContents { false };
+ bool m_inSectionHeading { false };
+ bool m_inTableHeader { false };
+ bool m_threeColumnEnumValueTable { true };
+ bool m_showInternal { false };
+ bool m_quoting { false };
+ int m_numTableRows { 0 };
+ QString m_link {};
+ QString m_sectionNumber {};
+};
+
+std::optional<QString> formatStatus(const Node *node, QDocDatabase *qdb);
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/headernode.cpp b/src/qdoc/qdoc/src/qdoc/headernode.cpp
new file mode 100644
index 000000000..ab576fbd6
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/headernode.cpp
@@ -0,0 +1,43 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "headernode.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class Headernode
+ \brief This class represents a C++ header file.
+ */
+
+HeaderNode::HeaderNode(Aggregate *parent, const QString &name) : Aggregate(HeaderFile, parent, name)
+{
+ // Set the include file with enclosing angle brackets removed
+ if (name.startsWith(QChar('<')) && name.size() > 2)
+ Aggregate::setIncludeFile(name.mid(1).chopped(1));
+ else
+ Aggregate::setIncludeFile(name);
+}
+
+/*!
+ Returns true if this header file node is not private and
+ contains at least one public child node with documentation.
+ */
+bool HeaderNode::docMustBeGenerated() const
+{
+ if (isInAPI())
+ return true;
+ return hasDocumentedChildren();
+}
+
+/*!
+ Returns true if this header file node contains at least one
+ child that has documentation and is not private or internal.
+ */
+bool HeaderNode::hasDocumentedChildren() const
+{
+ return std::any_of(m_children.cbegin(), m_children.cend(),
+ [](Node *child) { return child->isInAPI(); });
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/headernode.h b/src/qdoc/qdoc/src/qdoc/headernode.h
new file mode 100644
index 000000000..b20ff8fdb
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/headernode.h
@@ -0,0 +1,46 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef HEADERNODE_H
+#define HEADERNODE_H
+
+#include "aggregate.h"
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+class HeaderNode : public Aggregate
+{
+public:
+ HeaderNode(Aggregate *parent, const QString &name);
+ [[nodiscard]] bool docMustBeGenerated() const override;
+ [[nodiscard]] bool isFirstClassAggregate() const override { return true; }
+ [[nodiscard]] bool isRelatableType() const override { return true; }
+ [[nodiscard]] QString title() const override { return (m_title.isEmpty() ? name() : m_title); }
+ [[nodiscard]] QString subtitle() const override { return m_subtitle; }
+ [[nodiscard]] QString fullTitle() const override
+ {
+ return (m_title.isEmpty() ? name() : name() + " - " + m_title);
+ }
+ bool setTitle(const QString &title) override
+ {
+ m_title = title;
+ return true;
+ }
+ bool setSubtitle(const QString &subtitle) override
+ {
+ m_subtitle = subtitle;
+ return true;
+ }
+ [[nodiscard]] bool hasDocumentedChildren() const;
+
+private:
+ QString m_title {};
+ QString m_subtitle {};
+};
+
+QT_END_NAMESPACE
+
+#endif // HEADERNODE_H
diff --git a/src/qdoc/qdoc/src/qdoc/helpprojectwriter.cpp b/src/qdoc/qdoc/src/qdoc/helpprojectwriter.cpp
new file mode 100644
index 000000000..968bb7b25
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/helpprojectwriter.cpp
@@ -0,0 +1,769 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "helpprojectwriter.h"
+
+#include "access.h"
+#include "aggregate.h"
+#include "atom.h"
+#include "classnode.h"
+#include "collectionnode.h"
+#include "config.h"
+#include "enumnode.h"
+#include "functionnode.h"
+#include "htmlgenerator.h"
+#include "node.h"
+#include "qdocdatabase.h"
+#include "typedefnode.h"
+
+#include <QtCore/qhash.h>
+
+QT_BEGIN_NAMESPACE
+
+using namespace Qt::StringLiterals;
+
+HelpProjectWriter::HelpProjectWriter(const QString &defaultFileName, Generator *g)
+{
+ reset(defaultFileName, g);
+}
+
+void HelpProjectWriter::reset(const QString &defaultFileName, Generator *g)
+{
+ m_projects.clear();
+ m_gen = g;
+ /*
+ Get the pointer to the singleton for the qdoc database and
+ store it locally. This replaces all the local accesses to
+ the node tree, which are now private.
+ */
+ m_qdb = QDocDatabase::qdocDB();
+
+ // The output directory should already have been checked by the calling
+ // generator.
+ Config &config = Config::instance();
+ m_outputDir = config.getOutputDir();
+
+ const QStringList names{config.get(CONFIG_QHP + Config::dot + "projects").asStringList()};
+
+ for (const auto &projectName : names) {
+ HelpProject project;
+ project.m_name = projectName;
+
+ QString prefix = CONFIG_QHP + Config::dot + projectName + Config::dot;
+ project.m_helpNamespace = config.get(prefix + "namespace").asString();
+ project.m_virtualFolder = config.get(prefix + "virtualFolder").asString();
+ project.m_version = config.get(CONFIG_VERSION).asString();
+ project.m_fileName = config.get(prefix + "file").asString();
+ if (project.m_fileName.isEmpty())
+ project.m_fileName = defaultFileName;
+ project.m_extraFiles = config.get(prefix + "extraFiles").asStringSet();
+ project.m_extraFiles += config.get(CONFIG_QHP + Config::dot + "extraFiles").asStringSet();
+ project.m_indexTitle = config.get(prefix + "indexTitle").asString();
+ project.m_indexRoot = config.get(prefix + "indexRoot").asString();
+ project.m_filterAttributes = config.get(prefix + "filterAttributes").asStringSet();
+ project.m_includeIndexNodes = config.get(prefix + "includeIndexNodes").asBool();
+ const QSet<QString> customFilterNames = config.subVars(prefix + "customFilters");
+ for (const auto &filterName : customFilterNames) {
+ QString name{config.get(prefix + "customFilters" + Config::dot + filterName
+ + Config::dot + "name").asString()};
+ project.m_customFilters[name] =
+ config.get(prefix + "customFilters" + Config::dot + filterName
+ + Config::dot + "filterAttributes").asStringSet();
+ }
+
+ const auto excludedPrefixes = config.get(prefix + "excluded").asStringSet();
+ for (auto name : excludedPrefixes)
+ project.m_excluded.insert(name.replace(QLatin1Char('\\'), QLatin1Char('/')));
+
+ const auto subprojectPrefixes{config.get(prefix + "subprojects").asStringList()};
+ for (const auto &name : subprojectPrefixes) {
+ SubProject subproject;
+ QString subprefix = prefix + "subprojects" + Config::dot + name + Config::dot;
+ subproject.m_title = config.get(subprefix + "title").asString();
+ if (subproject.m_title.isEmpty())
+ continue;
+ subproject.m_indexTitle = config.get(subprefix + "indexTitle").asString();
+ subproject.m_sortPages = config.get(subprefix + "sortPages").asBool();
+ subproject.m_type = config.get(subprefix + "type").asString();
+ readSelectors(subproject, config.get(subprefix + "selectors").asStringList());
+ project.m_subprojects.append(subproject);
+ }
+
+ if (project.m_subprojects.isEmpty()) {
+ SubProject subproject;
+ readSelectors(subproject, config.get(prefix + "selectors").asStringList());
+ project.m_subprojects.insert(0, subproject);
+ }
+
+ m_projects.append(project);
+ }
+}
+
+void HelpProjectWriter::readSelectors(SubProject &subproject, const QStringList &selectors)
+{
+ QHash<QString, Node::NodeType> typeHash;
+ typeHash["namespace"] = Node::Namespace;
+ typeHash["class"] = Node::Class;
+ typeHash["struct"] = Node::Struct;
+ typeHash["union"] = Node::Union;
+ typeHash["header"] = Node::HeaderFile;
+ typeHash["headerfile"] = Node::HeaderFile;
+ typeHash["doc"] = Node::Page; // Unused (supported but ignored as a prefix)
+ typeHash["fake"] = Node::Page; // Unused (supported but ignored as a prefix)
+ typeHash["page"] = Node::Page;
+ typeHash["enum"] = Node::Enum;
+ typeHash["example"] = Node::Example;
+ typeHash["externalpage"] = Node::ExternalPage;
+ typeHash["typedef"] = Node::Typedef;
+ typeHash["typealias"] = Node::TypeAlias;
+ typeHash["function"] = Node::Function;
+ typeHash["property"] = Node::Property;
+ typeHash["variable"] = Node::Variable;
+ typeHash["group"] = Node::Group;
+ typeHash["module"] = Node::Module;
+ typeHash["qmlmodule"] = Node::QmlModule;
+ typeHash["qmlproperty"] = Node::QmlProperty;
+ typeHash["qmlclass"] = Node::QmlType; // Legacy alias for 'qmltype'
+ typeHash["qmltype"] = Node::QmlType;
+ typeHash["qmlbasictype"] = Node::QmlValueType; // Legacy alias for 'qmlvaluetype'
+ typeHash["qmlvaluetype"] = Node::QmlValueType;
+
+ for (const QString &selector : selectors) {
+ QStringList pieces = selector.split(QLatin1Char(':'));
+ // Remove doc: or fake: prefix
+ if (pieces.size() > 1 && typeHash.value(pieces[0].toLower()) == Node::Page)
+ pieces.takeFirst();
+
+ QString typeName = pieces.takeFirst().toLower();
+ if (!typeHash.contains(typeName))
+ continue;
+
+ subproject.m_selectors << typeHash.value(typeName);
+ if (!pieces.isEmpty()) {
+ pieces = pieces[0].split(QLatin1Char(','));
+ for (const auto &piece : std::as_const(pieces)) {
+ if (typeHash[typeName] == Node::Group
+ || typeHash[typeName] == Node::Module
+ || typeHash[typeName] == Node::QmlModule) {
+ subproject.m_groups << piece.toLower();
+ }
+ }
+ }
+ }
+}
+
+void HelpProjectWriter::addExtraFile(const QString &file)
+{
+ for (HelpProject &project : m_projects)
+ project.m_extraFiles.insert(file);
+}
+
+Keyword HelpProjectWriter::keywordDetails(const Node *node) const
+{
+ QString ref = m_gen->fullDocumentLocation(node);
+
+ if (node->parent() && !node->parent()->name().isEmpty()) {
+ QString name = (node->isEnumType() || node->isTypedef())
+ ? node->parent()->name()+"::"+node->name()
+ : node->name();
+ QString id = (!node->isRelatedNonmember())
+ ? node->parent()->name()+"::"+node->name()
+ : node->name();
+ return Keyword(name, id, ref);
+ } else if (node->isQmlType()) {
+ const QString &name = node->name();
+ QString moduleName = node->logicalModuleName();
+ QStringList ids("QML." + name);
+ if (!moduleName.isEmpty()) {
+ QString majorVersion = node->logicalModule()
+ ? node->logicalModule()->logicalModuleVersion().split('.')[0]
+ : QString();
+ ids << "QML." + moduleName + majorVersion + "." + name;
+ }
+ return Keyword(name, ids, ref);
+ } else if (node->isQmlModule()) {
+ const QLatin1Char delim('.');
+ QStringList parts = node->logicalModuleName().split(delim) << "QML";
+ std::reverse(parts.begin(), parts.end());
+ return Keyword(node->logicalModuleName(), parts.join(delim), ref);
+ } else if (node->isTextPageNode()) {
+ const auto *pageNode = static_cast<const PageNode *>(node);
+ return Keyword(pageNode->fullTitle(), pageNode->fullTitle(), ref);
+ } else {
+ return Keyword(node->name(), node->name(), ref);
+ }
+}
+
+bool HelpProjectWriter::generateSection(HelpProject &project, QXmlStreamWriter & /* writer */,
+ const Node *node)
+{
+ if (!node->url().isEmpty() && !(project.m_includeIndexNodes && !node->url().startsWith("http")))
+ return false;
+
+ if (node->isPrivate() || node->isInternal() || node->isDontDocument())
+ return false;
+
+ if (node->name().isEmpty())
+ return true;
+
+ QString docPath = node->doc().location().filePath();
+ if (!docPath.isEmpty() && project.m_excluded.contains(docPath))
+ return false;
+
+ QString objName = node->isTextPageNode() ? node->fullTitle() : node->fullDocumentName();
+ // Only add nodes to the set for each subproject if they match a selector.
+ // Those that match will be listed in the table of contents.
+
+ for (int i = 0; i < project.m_subprojects.size(); i++) {
+ SubProject subproject = project.m_subprojects[i];
+ // No selectors: accept all nodes.
+ if (subproject.m_selectors.isEmpty()) {
+ project.m_subprojects[i].m_nodes[objName] = node;
+ } else if (subproject.m_selectors.contains(node->nodeType())) {
+ // Add all group members for '[group|module|qmlmodule]:name' selector
+ if (node->isCollectionNode()) {
+ if (project.m_subprojects[i].m_groups.contains(node->name().toLower())) {
+ const auto *cn = static_cast<const CollectionNode *>(node);
+ const auto members = cn->members();
+ for (const Node *m : members) {
+ if (!m->isInAPI())
+ continue;
+ QString memberName =
+ m->isTextPageNode() ? m->fullTitle() : m->fullDocumentName();
+ project.m_subprojects[i].m_nodes[memberName] = m;
+ }
+ continue;
+ } else if (!project.m_subprojects[i].m_groups.isEmpty()) {
+ continue; // Node does not represent specified group(s)
+ }
+ } else if (node->isTextPageNode()) {
+ if (node->isExternalPage() || node->fullTitle().isEmpty())
+ continue;
+ }
+ project.m_subprojects[i].m_nodes[objName] = node;
+ }
+ }
+
+ switch (node->nodeType()) {
+
+ case Node::Class:
+ case Node::Struct:
+ case Node::Union:
+ project.m_keywords.append(keywordDetails(node));
+ break;
+ case Node::QmlType:
+ case Node::QmlValueType:
+ if (node->doc().hasKeywords()) {
+ const auto keywords = node->doc().keywords();
+ for (const Atom *keyword : keywords) {
+ if (!keyword->string().isEmpty()) {
+ project.m_keywords.append(Keyword(keyword->string(), keyword->string(),
+ m_gen->fullDocumentLocation(node)));
+ }
+ else
+ node->doc().location().warning(
+ QStringLiteral("Bad keyword in %1")
+ .arg(m_gen->fullDocumentLocation(node)));
+ }
+ }
+ project.m_keywords.append(keywordDetails(node));
+ break;
+
+ case Node::Namespace:
+ project.m_keywords.append(keywordDetails(node));
+ break;
+
+ case Node::Enum:
+ project.m_keywords.append(keywordDetails(node));
+ {
+ const auto *enumNode = static_cast<const EnumNode *>(node);
+ const auto items = enumNode->items();
+ for (const auto &item : items) {
+ if (enumNode->itemAccess(item.name()) == Access::Private)
+ continue;
+
+ QString name;
+ QString id;
+ if (!node->parent()->name().isEmpty()) {
+ name = id = node->parent()->name() + "::" + item.name();
+ } else {
+ name = id = item.name();
+ }
+ QString ref = m_gen->fullDocumentLocation(node);
+ project.m_keywords.append(Keyword(name, id, ref));
+ }
+ }
+ break;
+
+ case Node::Group:
+ case Node::Module:
+ case Node::QmlModule: {
+ const auto *cn = static_cast<const CollectionNode *>(node);
+ if (!cn->fullTitle().isEmpty()) {
+ if (cn->doc().hasKeywords()) {
+ const auto keywords = cn->doc().keywords();
+ for (const Atom *keyword : keywords) {
+ if (!keyword->string().isEmpty()) {
+ project.m_keywords.append(
+ Keyword(keyword->string(), keyword->string(),
+ m_gen->fullDocumentLocation(node)));
+ } else
+ cn->doc().location().warning(
+ QStringLiteral("Bad keyword in %1")
+ .arg(m_gen->fullDocumentLocation(node)));
+ }
+ }
+ project.m_keywords.append(keywordDetails(node));
+ }
+ } break;
+
+ case Node::Property:
+ case Node::QmlProperty:
+ project.m_keywords.append(keywordDetails(node));
+ break;
+
+ case Node::Function: {
+ const auto *funcNode = static_cast<const FunctionNode *>(node);
+
+ /*
+ QML methods, signals, and signal handlers used to be node types,
+ but now they are Function nodes with a Metaness value that specifies
+ what kind of function they are, QmlSignal, QmlMethod, etc.
+ */
+ if (funcNode->isQmlNode()) {
+ project.m_keywords.append(keywordDetails(node));
+ break;
+ }
+ // Only insert keywords for non-constructors. Constructors are covered
+ // by the classes themselves.
+
+ if (!funcNode->isSomeCtor())
+ project.m_keywords.append(keywordDetails(node));
+
+ // Insert member status flags into the entries for the parent
+ // node of the function, or the node it is related to.
+ // Since parent nodes should have already been inserted into
+ // the set of files, we only need to ensure that related nodes
+ // are inserted.
+
+ if (node->parent())
+ project.m_memberStatus[node->parent()].insert(node->status());
+ } break;
+ case Node::TypeAlias:
+ case Node::Typedef: {
+ const auto *typedefNode = static_cast<const TypedefNode *>(node);
+ Keyword typedefDetails = keywordDetails(node);
+ const EnumNode *enumNode = typedefNode->associatedEnum();
+ // Use the location of any associated enum node in preference
+ // to that of the typedef.
+ if (enumNode)
+ typedefDetails.m_ref = m_gen->fullDocumentLocation(enumNode);
+
+ project.m_keywords.append(typedefDetails);
+ } break;
+
+ case Node::Variable: {
+ project.m_keywords.append(keywordDetails(node));
+ } break;
+
+ // Page nodes (such as manual pages) contain subtypes, titles and other
+ // attributes.
+ case Node::Page: {
+ const auto *pn = static_cast<const PageNode *>(node);
+ if (!pn->fullTitle().isEmpty()) {
+ if (pn->doc().hasKeywords()) {
+ const auto keywords = pn->doc().keywords();
+ for (const Atom *keyword : keywords) {
+ if (!keyword->string().isEmpty()) {
+ project.m_keywords.append(
+ Keyword(keyword->string(), keyword->string(),
+ m_gen->fullDocumentLocation(node)));
+ } else {
+ QString loc = m_gen->fullDocumentLocation(node);
+ pn->doc().location().warning(QStringLiteral("Bad keyword in %1").arg(loc));
+ }
+ }
+ }
+ project.m_keywords.append(keywordDetails(node));
+ }
+ break;
+ }
+ default:;
+ }
+
+ // Add all images referenced in the page to the set of files to include.
+ const Atom *atom = node->doc().body().firstAtom();
+ while (atom) {
+ if (atom->type() == Atom::Image || atom->type() == Atom::InlineImage) {
+ // Images are all placed within a single directory regardless of
+ // whether the source images are in a nested directory structure.
+ QStringList pieces = atom->string().split(QLatin1Char('/'));
+ project.m_files.insert("images/" + pieces.last());
+ }
+ atom = atom->next();
+ }
+
+ return true;
+}
+
+void HelpProjectWriter::generateSections(HelpProject &project, QXmlStreamWriter &writer,
+ const Node *node)
+{
+ /*
+ Don't include index nodes in the help file.
+ */
+ if (node->isIndexNode())
+ return;
+ if (!generateSection(project, writer, node))
+ return;
+
+ if (node->isAggregate()) {
+ const auto *aggregate = static_cast<const Aggregate *>(node);
+
+ // Ensure that we don't visit nodes more than once.
+ NodeList childSet;
+ NodeList children = aggregate->childNodes();
+ std::sort(children.begin(), children.end(), Node::nodeNameLessThan);
+ for (auto *child : children) {
+ // Skip related non-members adopted by some other aggregate
+ if (child->parent() != aggregate)
+ continue;
+ if (child->isIndexNode() || child->isPrivate())
+ continue;
+ if (child->isTextPageNode()) {
+ if (!childSet.contains(child))
+ childSet << child;
+ } else {
+ // Store member status of children
+ project.m_memberStatus[node].insert(child->status());
+ if (child->isFunction() && static_cast<const FunctionNode *>(child)->isOverload())
+ continue;
+ if (!childSet.contains(child))
+ childSet << child;
+ }
+ }
+ for (const auto *child : std::as_const(childSet))
+ generateSections(project, writer, child);
+ }
+}
+
+void HelpProjectWriter::generate()
+{
+ // Warn if .qhp configuration was expected but not provided
+ if (auto &config = Config::instance(); m_projects.isEmpty() && config.get(CONFIG_QHP).asBool()) {
+ config.location().warning(u"Documentation configuration for '%1' doesn't define a help project (qhp)"_s
+ .arg(config.get(CONFIG_PROJECT).asString()));
+ }
+ for (HelpProject &project : m_projects)
+ generateProject(project);
+}
+
+void HelpProjectWriter::writeSection(QXmlStreamWriter &writer, const QString &path,
+ const QString &value)
+{
+ writer.writeStartElement(QStringLiteral("section"));
+ writer.writeAttribute(QStringLiteral("ref"), path);
+ writer.writeAttribute(QStringLiteral("title"), value);
+ writer.writeEndElement(); // section
+}
+
+/*!
+ Write subsections for all members, compatibility members and obsolete members.
+ */
+void HelpProjectWriter::addMembers(HelpProject &project, QXmlStreamWriter &writer, const Node *node)
+{
+ QString href = m_gen->fullDocumentLocation(node);
+ href = href.left(href.size() - 5);
+ if (href.isEmpty())
+ return;
+
+ bool derivedClass = false;
+ if (node->isClassNode())
+ derivedClass = !(static_cast<const ClassNode *>(node)->baseClasses().isEmpty());
+
+ // Do not generate a 'List of all members' for namespaces or header files,
+ // but always generate it for derived classes and QML types (but not QML value types)
+ if (!node->isNamespace() && !node->isHeader() && !node->isQmlBasicType()
+ && (derivedClass || node->isQmlType() || !project.m_memberStatus[node].isEmpty())) {
+ QString membersPath = href + QStringLiteral("-members.html");
+ writeSection(writer, membersPath, QStringLiteral("List of all members"));
+ }
+ if (project.m_memberStatus[node].contains(Node::Deprecated)) {
+ QString obsoletePath = href + QStringLiteral("-obsolete.html");
+ writeSection(writer, obsoletePath, QStringLiteral("Obsolete members"));
+ }
+}
+
+void HelpProjectWriter::writeNode(HelpProject &project, QXmlStreamWriter &writer, const Node *node)
+{
+ QString href = m_gen->fullDocumentLocation(node);
+ QString objName = node->name();
+
+ switch (node->nodeType()) {
+
+ case Node::Class:
+ case Node::Struct:
+ case Node::Union:
+ case Node::QmlType:
+ case Node::QmlValueType: {
+ QString typeStr = m_gen->typeString(node);
+ if (!typeStr.isEmpty())
+ typeStr[0] = typeStr[0].toTitleCase();
+ writer.writeStartElement("section");
+ writer.writeAttribute("ref", href);
+ if (node->parent() && !node->parent()->name().isEmpty())
+ writer.writeAttribute("title",
+ QStringLiteral("%1::%2 %3 Reference")
+ .arg(node->parent()->name(), objName, typeStr));
+ else
+ writer.writeAttribute("title", QStringLiteral("%1 %2 Reference").arg(objName, typeStr));
+
+ addMembers(project, writer, node);
+ writer.writeEndElement(); // section
+ } break;
+
+ case Node::Namespace:
+ writeSection(writer, href, objName);
+ break;
+
+ case Node::Example:
+ case Node::HeaderFile:
+ case Node::Page:
+ case Node::Group:
+ case Node::Module:
+ case Node::QmlModule: {
+ writer.writeStartElement("section");
+ writer.writeAttribute("ref", href);
+ writer.writeAttribute("title", node->fullTitle());
+ if (node->nodeType() == Node::HeaderFile)
+ addMembers(project, writer, node);
+ writer.writeEndElement(); // section
+ } break;
+ default:;
+ }
+}
+
+void HelpProjectWriter::generateProject(HelpProject &project)
+{
+ const Node *rootNode;
+
+ // Restrict searching only to the local (primary) tree
+ QList<Tree *> searchOrder = m_qdb->searchOrder();
+ m_qdb->setLocalSearch();
+
+ if (!project.m_indexRoot.isEmpty())
+ rootNode = m_qdb->findPageNodeByTitle(project.m_indexRoot);
+ else
+ rootNode = m_qdb->primaryTreeRoot();
+
+ if (rootNode == nullptr)
+ return;
+
+ project.m_files.clear();
+ project.m_keywords.clear();
+
+ QFile file(m_outputDir + QDir::separator() + project.m_fileName);
+ if (!file.open(QFile::WriteOnly))
+ return;
+
+ QXmlStreamWriter writer(&file);
+ writer.setAutoFormatting(true);
+ writer.writeStartDocument();
+ writer.writeStartElement("QtHelpProject");
+ writer.writeAttribute("version", "1.0");
+
+ // Write metaData, virtualFolder and namespace elements.
+ writer.writeTextElement("namespace", project.m_helpNamespace);
+ writer.writeTextElement("virtualFolder", project.m_virtualFolder);
+ writer.writeStartElement("metaData");
+ writer.writeAttribute("name", "version");
+ writer.writeAttribute("value", project.m_version);
+ writer.writeEndElement();
+
+ // Write customFilter elements.
+ for (auto it = project.m_customFilters.constBegin(); it != project.m_customFilters.constEnd();
+ ++it) {
+ writer.writeStartElement("customFilter");
+ writer.writeAttribute("name", it.key());
+ QStringList sortedAttributes = it.value().values();
+ sortedAttributes.sort();
+ for (const auto &filter : std::as_const(sortedAttributes))
+ writer.writeTextElement("filterAttribute", filter);
+ writer.writeEndElement(); // customFilter
+ }
+
+ // Start the filterSection.
+ writer.writeStartElement("filterSection");
+
+ // Write filterAttribute elements.
+ QStringList sortedFilterAttributes = project.m_filterAttributes.values();
+ sortedFilterAttributes.sort();
+ for (const auto &filterName : std::as_const(sortedFilterAttributes))
+ writer.writeTextElement("filterAttribute", filterName);
+
+ writer.writeStartElement("toc");
+ writer.writeStartElement("section");
+ const Node *node = m_qdb->findPageNodeByTitle(project.m_indexTitle);
+ if (!node)
+ node = m_qdb->findNodeByNameAndType(QStringList(project.m_indexTitle), &Node::isPageNode);
+ if (!node)
+ node = m_qdb->findNodeByNameAndType(QStringList("index.html"), &Node::isPageNode);
+ QString indexPath;
+ if (node)
+ indexPath = m_gen->fullDocumentLocation(node);
+ else
+ indexPath = "index.html";
+ writer.writeAttribute("ref", indexPath);
+ writer.writeAttribute("title", project.m_indexTitle);
+
+ generateSections(project, writer, rootNode);
+
+ for (int i = 0; i < project.m_subprojects.size(); i++) {
+ SubProject subproject = project.m_subprojects[i];
+
+ if (subproject.m_type == QLatin1String("manual")) {
+
+ const Node *indexPage = m_qdb->findNodeForTarget(subproject.m_indexTitle, nullptr);
+ if (indexPage) {
+ Text indexBody = indexPage->doc().body();
+ const Atom *atom = indexBody.firstAtom();
+ QStack<int> sectionStack;
+ bool inItem = false;
+
+ while (atom) {
+ switch (atom->type()) {
+ case Atom::ListLeft:
+ sectionStack.push(0);
+ break;
+ case Atom::ListRight:
+ if (sectionStack.pop() > 0)
+ writer.writeEndElement(); // section
+ break;
+ case Atom::ListItemLeft:
+ inItem = true;
+ break;
+ case Atom::ListItemRight:
+ inItem = false;
+ break;
+ case Atom::Link:
+ if (inItem) {
+ if (sectionStack.top() > 0)
+ writer.writeEndElement(); // section
+
+ const Node *page = m_qdb->findNodeForTarget(atom->string(), nullptr);
+ writer.writeStartElement("section");
+ QString indexPath = m_gen->fullDocumentLocation(page);
+ writer.writeAttribute("ref", indexPath);
+ writer.writeAttribute("title", atom->linkText());
+
+ sectionStack.top() += 1;
+ }
+ break;
+ default:;
+ }
+
+ if (atom == indexBody.lastAtom())
+ break;
+ atom = atom->next();
+ }
+ } else
+ rootNode->doc().location().warning(
+ QStringLiteral("Failed to find index: %1").arg(subproject.m_indexTitle));
+
+ } else {
+
+ writer.writeStartElement("section");
+ QString indexPath = m_gen->fullDocumentLocation(
+ m_qdb->findNodeForTarget(subproject.m_indexTitle, nullptr));
+ writer.writeAttribute("ref", indexPath);
+ writer.writeAttribute("title", subproject.m_title);
+
+ if (subproject.m_sortPages) {
+ QStringList titles = subproject.m_nodes.keys();
+ titles.sort();
+ for (const auto &title : std::as_const(titles)) {
+ writeNode(project, writer, subproject.m_nodes[title]);
+ }
+ } else {
+ // Find a contents node and navigate from there, using the NextLink values.
+ QSet<QString> visited;
+ bool contentsFound = false;
+ for (const auto *node : std::as_const(subproject.m_nodes)) {
+ QString nextTitle = node->links().value(Node::NextLink).first;
+ if (!nextTitle.isEmpty()
+ && node->links().value(Node::ContentsLink).first.isEmpty()) {
+
+ const Node *nextPage = m_qdb->findNodeForTarget(nextTitle, nullptr);
+
+ // Write the contents node.
+ writeNode(project, writer, node);
+ contentsFound = true;
+
+ while (nextPage) {
+ writeNode(project, writer, nextPage);
+ nextTitle = nextPage->links().value(Node::NextLink).first;
+ if (nextTitle.isEmpty() || visited.contains(nextTitle))
+ break;
+ nextPage = m_qdb->findNodeForTarget(nextTitle, nullptr);
+ visited.insert(nextTitle);
+ }
+ break;
+ }
+ }
+ // No contents/nextpage links found, write all nodes unsorted
+ if (!contentsFound) {
+ QList<const Node *> subnodes = subproject.m_nodes.values();
+
+ std::sort(subnodes.begin(), subnodes.end(), Node::nodeNameLessThan);
+
+ for (const auto *node : std::as_const(subnodes))
+ writeNode(project, writer, node);
+ }
+ }
+
+ writer.writeEndElement(); // section
+ }
+ }
+
+ // Restore original search order
+ m_qdb->setSearchOrder(searchOrder);
+
+ writer.writeEndElement(); // section
+ writer.writeEndElement(); // toc
+
+ writer.writeStartElement("keywords");
+ std::sort(project.m_keywords.begin(), project.m_keywords.end());
+ for (const auto &k : std::as_const(project.m_keywords)) {
+ for (const auto &id : std::as_const(k.m_ids)) {
+ writer.writeStartElement("keyword");
+ writer.writeAttribute("name", k.m_name);
+ writer.writeAttribute("id", id);
+ writer.writeAttribute("ref", k.m_ref);
+ writer.writeEndElement(); //keyword
+ }
+ }
+ writer.writeEndElement(); // keywords
+
+ writer.writeStartElement("files");
+
+ // The list of files to write is the union of generated files and
+ // other files (images and extras) included in the project
+ QSet<QString> files =
+ QSet<QString>(m_gen->outputFileNames().cbegin(), m_gen->outputFileNames().cend());
+ files.unite(project.m_files);
+ files.unite(project.m_extraFiles);
+ QStringList sortedFiles = files.values();
+ sortedFiles.sort();
+ for (const auto &usedFile : std::as_const(sortedFiles)) {
+ if (!usedFile.isEmpty())
+ writer.writeTextElement("file", usedFile);
+ }
+ writer.writeEndElement(); // files
+
+ writer.writeEndElement(); // filterSection
+ writer.writeEndElement(); // QtHelpProject
+ writer.writeEndDocument();
+ file.close();
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/helpprojectwriter.h b/src/qdoc/qdoc/src/qdoc/helpprojectwriter.h
new file mode 100644
index 000000000..11dd67fb1
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/helpprojectwriter.h
@@ -0,0 +1,106 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef HELPPROJECTWRITER_H
+#define HELPPROJECTWRITER_H
+
+#include "node.h"
+
+#include <QtCore/qstring.h>
+#include <QtCore/qxmlstream.h>
+
+#include <utility>
+
+QT_BEGIN_NAMESPACE
+
+class QDocDatabase;
+class Generator;
+
+using NodeTypeSet = QSet<unsigned char>;
+
+struct SubProject
+{
+ QString m_title {};
+ QString m_indexTitle {};
+ NodeTypeSet m_selectors {};
+ bool m_sortPages {};
+ QString m_type {};
+ QHash<QString, const Node *> m_nodes {};
+ QStringList m_groups {};
+};
+
+/*
+ * Name is the human-readable name to be shown in Assistant.
+ * Ids is a list of unique identifiers.
+ * Ref is the location of the documentation for the keyword.
+ */
+struct Keyword {
+ QString m_name {};
+ QStringList m_ids {};
+ QString m_ref {};
+ Keyword(QString name, const QString &id, QString ref)
+ : m_name(std::move(name)), m_ids(QStringList(id)), m_ref(std::move(ref))
+ {
+ }
+ Keyword(QString name, QStringList ids, QString ref)
+ : m_name(std::move(name)), m_ids(std::move(ids)), m_ref(std::move(ref))
+ {
+ }
+ bool operator<(const Keyword &o) const
+ {
+ // Order by name; use ref as a secondary sort key
+ return (m_name == o.m_name) ? m_ref < o.m_ref : m_name < o.m_name;
+ }
+};
+
+struct HelpProject
+{
+ using NodeStatusSet = QSet<unsigned char>;
+
+ QString m_name {};
+ QString m_helpNamespace {};
+ QString m_virtualFolder {};
+ QString m_version {};
+ QString m_fileName {};
+ QString m_indexRoot {};
+ QString m_indexTitle {};
+ QList<Keyword> m_keywords {};
+ QSet<QString> m_files {};
+ QSet<QString> m_extraFiles {};
+ QSet<QString> m_filterAttributes {};
+ QHash<QString, QSet<QString>> m_customFilters {};
+ QSet<QString> m_excluded {};
+ QList<SubProject> m_subprojects {};
+ QHash<const Node *, NodeStatusSet> m_memberStatus {};
+ bool m_includeIndexNodes {};
+};
+
+
+class HelpProjectWriter
+{
+public:
+ HelpProjectWriter(const QString &defaultFileName, Generator *g);
+ void reset(const QString &defaultFileName, Generator *g);
+ void addExtraFile(const QString &file);
+ void generate();
+
+private:
+ void generateProject(HelpProject &project);
+ void generateSections(HelpProject &project, QXmlStreamWriter &writer, const Node *node);
+ bool generateSection(HelpProject &project, QXmlStreamWriter &writer, const Node *node);
+ Keyword keywordDetails(const Node *node) const;
+ void writeNode(HelpProject &project, QXmlStreamWriter &writer, const Node *node);
+ void readSelectors(SubProject &subproject, const QStringList &selectors);
+ void addMembers(HelpProject &project, QXmlStreamWriter &writer, const Node *node);
+ void writeSection(QXmlStreamWriter &writer, const QString &path, const QString &value);
+
+ QDocDatabase *m_qdb {};
+ Generator *m_gen {};
+
+ QString m_outputDir {};
+ QList<HelpProject> m_projects {};
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/htmlgenerator.cpp b/src/qdoc/qdoc/src/qdoc/htmlgenerator.cpp
new file mode 100644
index 000000000..b27d169d3
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/htmlgenerator.cpp
@@ -0,0 +1,3699 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "htmlgenerator.h"
+
+#include "access.h"
+#include "aggregate.h"
+#include "classnode.h"
+#include "collectionnode.h"
+#include "config.h"
+#include "codemarker.h"
+#include "codeparser.h"
+#include "enumnode.h"
+#include "functionnode.h"
+#include "helpprojectwriter.h"
+#include "manifestwriter.h"
+#include "node.h"
+#include "propertynode.h"
+#include "qdocdatabase.h"
+#include "qmlpropertynode.h"
+#include "sharedcommentnode.h"
+#include "tagfilewriter.h"
+#include "tree.h"
+#include "quoter.h"
+#include "utilities.h"
+
+#include <QtCore/qlist.h>
+#include <QtCore/qmap.h>
+#include <QtCore/quuid.h>
+#include <QtCore/qversionnumber.h>
+#include <QtCore/qregularexpression.h>
+
+#include <cctype>
+#include <deque>
+#include <string>
+
+QT_BEGIN_NAMESPACE
+
+using namespace Qt::StringLiterals;
+
+bool HtmlGenerator::s_inUnorderedList { false };
+
+HtmlGenerator::HtmlGenerator(FileResolver& file_resolver) : XmlGenerator(file_resolver) {}
+
+static void addLink(const QString &linkTarget, QStringView nestedStuff, QString *res)
+{
+ if (!linkTarget.isEmpty()) {
+ *res += QLatin1String("<a href=\"");
+ *res += linkTarget;
+ *res += QLatin1String("\" translate=\"no\">");
+ *res += nestedStuff;
+ *res += QLatin1String("</a>");
+ } else {
+ *res += nestedStuff;
+ }
+}
+
+/*!
+ \internal
+ Convenience method that starts an unordered list if not in one.
+ */
+inline void HtmlGenerator::openUnorderedList()
+{
+ if (!s_inUnorderedList) {
+ out() << "<ul>\n";
+ s_inUnorderedList = true;
+ }
+}
+
+/*!
+ \internal
+ Convenience method that closes an unordered list if in one.
+ */
+inline void HtmlGenerator::closeUnorderedList()
+{
+ if (s_inUnorderedList) {
+ out() << "</ul>\n";
+ s_inUnorderedList = false;
+ }
+}
+
+/*!
+ Destroys the HTML output generator. Deletes the singleton
+ instance of HelpProjectWriter and the ManifestWriter instance.
+ */
+HtmlGenerator::~HtmlGenerator()
+{
+ if (m_helpProjectWriter) {
+ delete m_helpProjectWriter;
+ m_helpProjectWriter = nullptr;
+ }
+
+ if (m_manifestWriter) {
+ delete m_manifestWriter;
+ m_manifestWriter = nullptr;
+ }
+}
+
+/*!
+ Initializes the HTML output generator's data structures
+ from the configuration (Config) singleton.
+ */
+void HtmlGenerator::initializeGenerator()
+{
+ static const struct
+ {
+ const char *key;
+ const char *left;
+ const char *right;
+ } defaults[] = { { ATOM_FORMATTING_BOLD, "<b>", "</b>" },
+ { ATOM_FORMATTING_INDEX, "<!--", "-->" },
+ { ATOM_FORMATTING_ITALIC, "<i>", "</i>" },
+ { ATOM_FORMATTING_PARAMETER, "<i translate=\"no\">", "</i>" },
+ { ATOM_FORMATTING_SUBSCRIPT, "<sub>", "</sub>" },
+ { ATOM_FORMATTING_SUPERSCRIPT, "<sup>", "</sup>" },
+ { ATOM_FORMATTING_TELETYPE, "<code translate=\"no\">",
+ "</code>" }, // <tt> tag is not supported in HTML5
+ { ATOM_FORMATTING_UICONTROL, "<b translate=\"no\">", "</b>" },
+ { ATOM_FORMATTING_UNDERLINE, "<u>", "</u>" },
+ { nullptr, nullptr, nullptr } };
+
+ Generator::initializeGenerator();
+ config = &Config::instance();
+
+ /*
+ The formatting maps are owned by Generator. They are cleared in
+ Generator::terminate().
+ */
+ for (int i = 0; defaults[i].key; ++i) {
+ formattingLeftMap().insert(QLatin1String(defaults[i].key), QLatin1String(defaults[i].left));
+ formattingRightMap().insert(QLatin1String(defaults[i].key),
+ QLatin1String(defaults[i].right));
+ }
+
+ QString formatDot{HtmlGenerator::format() + Config::dot};
+ m_endHeader = config->get(formatDot + CONFIG_ENDHEADER).asString();
+ m_postHeader = config->get(formatDot + HTMLGENERATOR_POSTHEADER).asString();
+ m_postPostHeader = config->get(formatDot + HTMLGENERATOR_POSTPOSTHEADER).asString();
+ m_prologue = config->get(formatDot + HTMLGENERATOR_PROLOGUE).asString();
+
+ m_footer = config->get(formatDot + HTMLGENERATOR_FOOTER).asString();
+ m_address = config->get(formatDot + HTMLGENERATOR_ADDRESS).asString();
+ m_noNavigationBar = config->get(formatDot + HTMLGENERATOR_NONAVIGATIONBAR).asBool();
+ m_navigationSeparator = config->get(formatDot + HTMLGENERATOR_NAVIGATIONSEPARATOR).asString();
+ tocDepth = config->get(formatDot + HTMLGENERATOR_TOCDEPTH).asInt();
+
+ m_project = config->get(CONFIG_PROJECT).asString();
+ m_projectDescription = config->get(CONFIG_DESCRIPTION)
+ .asString(m_project + QLatin1String(" Reference Documentation"));
+
+ m_projectUrl = config->get(CONFIG_URL).asString();
+ tagFile_ = config->get(CONFIG_TAGFILE).asString();
+ naturalLanguage = config->get(CONFIG_NATURALLANGUAGE).asString(QLatin1String("en"));
+
+ m_codeIndent = config->get(CONFIG_CODEINDENT).asInt();
+ m_codePrefix = config->get(CONFIG_CODEPREFIX).asString();
+ m_codeSuffix = config->get(CONFIG_CODESUFFIX).asString();
+
+ /*
+ The help file write should be allocated once and only once
+ per qdoc execution.
+ */
+ if (m_helpProjectWriter)
+ m_helpProjectWriter->reset(m_project.toLower() + ".qhp", this);
+ else
+ m_helpProjectWriter = new HelpProjectWriter(m_project.toLower() + ".qhp", this);
+
+ if (!m_manifestWriter)
+ m_manifestWriter = new ManifestWriter();
+
+ // Documentation template handling
+ m_headerScripts = config->get(formatDot + CONFIG_HEADERSCRIPTS).asString();
+ m_headerStyles = config->get(formatDot + CONFIG_HEADERSTYLES).asString();
+
+ // Retrieve the config for the navigation bar
+ m_homepage = config->get(CONFIG_NAVIGATION
+ + Config::dot + CONFIG_HOMEPAGE).asString();
+
+ m_hometitle = config->get(CONFIG_NAVIGATION
+ + Config::dot + CONFIG_HOMETITLE)
+ .asString(m_homepage);
+
+ m_landingpage = config->get(CONFIG_NAVIGATION
+ + Config::dot + CONFIG_LANDINGPAGE).asString();
+
+ m_landingtitle = config->get(CONFIG_NAVIGATION
+ + Config::dot + CONFIG_LANDINGTITLE)
+ .asString(m_landingpage);
+
+ m_cppclassespage = config->get(CONFIG_NAVIGATION
+ + Config::dot + CONFIG_CPPCLASSESPAGE).asString();
+
+ m_cppclassestitle = config->get(CONFIG_NAVIGATION
+ + Config::dot + CONFIG_CPPCLASSESTITLE)
+ .asString(QLatin1String("C++ Classes"));
+
+ m_qmltypespage = config->get(CONFIG_NAVIGATION
+ + Config::dot + CONFIG_QMLTYPESPAGE).asString();
+
+ m_qmltypestitle = config->get(CONFIG_NAVIGATION
+ + Config::dot + CONFIG_QMLTYPESTITLE)
+ .asString(QLatin1String("QML Types"));
+
+ m_buildversion = config->get(CONFIG_BUILDVERSION).asString();
+}
+
+/*!
+ Gracefully terminates the HTML output generator.
+ */
+void HtmlGenerator::terminateGenerator()
+{
+ Generator::terminateGenerator();
+}
+
+QString HtmlGenerator::format()
+{
+ return "HTML";
+}
+
+/*!
+ If qdoc is in the \c {-prepare} phase, traverse the primary
+ tree to generate the index file for the current module.
+
+ If qdoc is in the \c {-generate} phase, traverse the primary
+ tree to generate all the HTML documentation for the current
+ module. Then generate the help file and the tag file.
+ */
+void HtmlGenerator::generateDocs()
+{
+ Node *qflags = m_qdb->findClassNode(QStringList("QFlags"));
+ if (qflags)
+ m_qflagsHref = linkForNode(qflags, nullptr);
+ if (!config->preparing())
+ Generator::generateDocs();
+
+ if (!config->generating()) {
+ QString fileBase =
+ m_project.toLower().simplified().replace(QLatin1Char(' '), QLatin1Char('-'));
+ m_qdb->generateIndex(outputDir() + QLatin1Char('/') + fileBase + ".index", m_projectUrl,
+ m_projectDescription, this);
+ }
+
+ if (!config->preparing()) {
+ m_helpProjectWriter->generate();
+ m_manifestWriter->generateManifestFiles();
+ /*
+ Generate the XML tag file, if it was requested.
+ */
+ if (!tagFile_.isEmpty()) {
+ TagFileWriter tagFileWriter;
+ tagFileWriter.generateTagFile(tagFile_, this);
+ }
+ }
+}
+
+/*!
+ Generate an html file with the contents of a C++ or QML source file.
+ */
+void HtmlGenerator::generateExampleFilePage(const Node *en, ResolvedFile resolved_file, CodeMarker *marker)
+{
+ SubTitleSize subTitleSize = LargeSubTitle;
+ QString fullTitle = en->fullTitle();
+
+ beginSubPage(en, linkForExampleFile(resolved_file.get_query()));
+ generateHeader(fullTitle, en, marker);
+ generateTitle(fullTitle, Text() << en->subtitle(), subTitleSize, en, marker);
+
+ Text text;
+ Quoter quoter;
+ Doc::quoteFromFile(en->doc().location(), quoter, resolved_file);
+ QString code = quoter.quoteTo(en->location(), QString(), QString());
+ CodeMarker *codeMarker = CodeMarker::markerForFileName(resolved_file.get_path());
+ text << Atom(codeMarker->atomType(), code);
+ Atom a(codeMarker->atomType(), code);
+
+ generateText(text, en, codeMarker);
+ endSubPage();
+}
+
+/*!
+ Generate html from an instance of Atom.
+ */
+qsizetype HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker)
+{
+ qsizetype idx, skipAhead = 0;
+ static bool in_para = false;
+ Node::Genus genus = Node::DontCare;
+
+ switch (atom->type()) {
+ case Atom::AutoLink: {
+ QString name = atom->string();
+ if (relative && relative->name() == name.replace(QLatin1String("()"), QLatin1String())) {
+ out() << protectEnc(atom->string());
+ break;
+ }
+ // Allow auto-linking to nodes in API reference
+ genus = Node::API;
+ }
+ Q_FALLTHROUGH();
+ case Atom::NavAutoLink:
+ if (!m_inLink && !m_inContents && !m_inSectionHeading) {
+ const Node *node = nullptr;
+ QString link = getAutoLink(atom, relative, &node, genus);
+ if (link.isEmpty()) {
+ if (autolinkErrors() && relative)
+ relative->doc().location().warning(
+ QStringLiteral("Can't autolink to '%1'").arg(atom->string()));
+ } else if (node && node->isDeprecated()) {
+ if (relative && (relative->parent() != node) && !relative->isDeprecated())
+ link.clear();
+ }
+ if (link.isEmpty()) {
+ out() << protectEnc(atom->string());
+ } else {
+ beginLink(link, node, relative);
+ generateLink(atom);
+ endLink();
+ }
+ } else {
+ out() << protectEnc(atom->string());
+ }
+ break;
+ case Atom::BaseName:
+ break;
+ case Atom::BriefLeft:
+ if (!hasBrief(relative)) {
+ skipAhead = skipAtoms(atom, Atom::BriefRight);
+ break;
+ }
+ out() << "<p>";
+ rewritePropertyBrief(atom, relative);
+ break;
+ case Atom::BriefRight:
+ if (hasBrief(relative))
+ out() << "</p>\n";
+ break;
+ case Atom::C:
+ // This may at one time have been used to mark up C++ code but it is
+ // now widely used to write teletype text. As a result, text marked
+ // with the \c command is not passed to a code marker.
+ out() << formattingLeftMap()[ATOM_FORMATTING_TELETYPE];
+ out() << protectEnc(plainCode(atom->string()));
+ out() << formattingRightMap()[ATOM_FORMATTING_TELETYPE];
+ break;
+ case Atom::CaptionLeft:
+ out() << "<p class=\"figCaption\">";
+ in_para = true;
+ break;
+ case Atom::CaptionRight:
+ endLink();
+ if (in_para) {
+ out() << "</p>\n";
+ in_para = false;
+ }
+ break;
+ case Atom::Qml:
+ out() << "<pre class=\"qml\" translate=\"no\">"
+ << trimmedTrailing(highlightedCode(indent(m_codeIndent, atom->string()), relative,
+ false, Node::QML),
+ m_codePrefix, m_codeSuffix)
+ << "</pre>\n";
+ break;
+ case Atom::Code:
+ out() << "<pre class=\"cpp\" translate=\"no\">"
+ << trimmedTrailing(highlightedCode(indent(m_codeIndent, atom->string()), relative),
+ m_codePrefix, m_codeSuffix)
+ << "</pre>\n";
+ break;
+ case Atom::CodeBad:
+ out() << "<pre class=\"cpp plain\" translate=\"no\">"
+ << trimmedTrailing(protectEnc(plainCode(indent(m_codeIndent, atom->string()))),
+ m_codePrefix, m_codeSuffix)
+ << "</pre>\n";
+ break;
+ case Atom::DetailsLeft:
+ out() << "<details>\n";
+ if (!atom->string().isEmpty())
+ out() << "<summary>" << protectEnc(atom->string()) << "</summary>\n";
+ else
+ out() << "<summary>...</summary>\n";
+ break;
+ case Atom::DetailsRight:
+ out() << "</details>\n";
+ break;
+ case Atom::DivLeft:
+ out() << "<div";
+ if (!atom->string().isEmpty())
+ out() << ' ' << atom->string();
+ out() << '>';
+ break;
+ case Atom::DivRight:
+ out() << "</div>";
+ break;
+ case Atom::FootnoteLeft:
+ // ### For now
+ if (in_para) {
+ out() << "</p>\n";
+ in_para = false;
+ }
+ out() << "<!-- ";
+ break;
+ case Atom::FootnoteRight:
+ // ### For now
+ out() << "-->\n";
+ break;
+ case Atom::FormatElse:
+ case Atom::FormatEndif:
+ case Atom::FormatIf:
+ break;
+ case Atom::FormattingLeft:
+ if (atom->string().startsWith("span "))
+ out() << '<' + atom->string() << '>';
+ else
+ out() << formattingLeftMap()[atom->string()];
+ break;
+ case Atom::FormattingRight:
+ if (atom->string() == ATOM_FORMATTING_LINK) {
+ endLink();
+ } else if (atom->string().startsWith("span ")) {
+ out() << "</span>";
+ } else {
+ out() << formattingRightMap()[atom->string()];
+ }
+ break;
+ case Atom::AnnotatedList: {
+ const CollectionNode *cn = m_qdb->getCollectionNode(atom->string(), Node::Group);
+ if (cn)
+ generateList(cn, marker, atom->string());
+ } break;
+ case Atom::GeneratedList:
+ if (atom->string() == QLatin1String("annotatedclasses")) {
+ generateAnnotatedList(relative, marker, m_qdb->getCppClasses().values());
+ } else if (atom->string() == QLatin1String("annotatedexamples")) {
+ generateAnnotatedLists(relative, marker, m_qdb->getExamples());
+ } else if (atom->string() == QLatin1String("annotatedattributions")) {
+ generateAnnotatedLists(relative, marker, m_qdb->getAttributions());
+ } else if (atom->string() == QLatin1String("classes")) {
+ generateCompactList(Generic, relative, m_qdb->getCppClasses(), true,
+ QStringLiteral(""));
+ } else if (atom->string().contains("classes ")) {
+ QString rootName = atom->string().mid(atom->string().indexOf("classes") + 7).trimmed();
+ generateCompactList(Generic, relative, m_qdb->getCppClasses(), true, rootName);
+ } else if (atom->string() == QLatin1String("qmlvaluetypes")
+ || atom->string() == QLatin1String("qmlbasictypes")) {
+ generateCompactList(Generic, relative, m_qdb->getQmlValueTypes(), true,
+ QStringLiteral(""));
+ } else if (atom->string() == QLatin1String("qmltypes")) {
+ generateCompactList(Generic, relative, m_qdb->getQmlTypes(), true, QStringLiteral(""));
+ } else if ((idx = atom->string().indexOf(QStringLiteral("bymodule"))) != -1) {
+ QDocDatabase *qdb = QDocDatabase::qdocDB();
+ QString moduleName = atom->string().mid(idx + 8).trimmed();
+ Node::NodeType moduleType = typeFromString(atom);
+ if (const auto *cn = qdb->getCollectionNode(moduleName, moduleType)) {
+ NodeMap map;
+ switch (moduleType) {
+ case Node::Module:
+ // classesbymodule <module_name>
+ map = cn->getMembers([](const Node *n) { return n->isClassNode(); });
+ generateAnnotatedList(relative, marker, map.values());
+ 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());
+ break;
+ default: // fall back to listing all members
+ generateAnnotatedList(relative, marker, cn->members());
+ break;
+ }
+ }
+ } else if (atom->string() == QLatin1String("classhierarchy")) {
+ generateClassHierarchy(relative, m_qdb->getCppClasses());
+ } else if (atom->string() == QLatin1String("obsoleteclasses")) {
+ generateCompactList(Generic, relative, m_qdb->getObsoleteClasses(), false,
+ QStringLiteral("Q"));
+ } else if (atom->string() == QLatin1String("obsoleteqmltypes")) {
+ generateCompactList(Generic, relative, m_qdb->getObsoleteQmlTypes(), false,
+ QStringLiteral(""));
+ } else if (atom->string() == QLatin1String("obsoletecppmembers")) {
+ generateCompactList(Obsolete, relative, m_qdb->getClassesWithObsoleteMembers(), false,
+ QStringLiteral("Q"));
+ } else if (atom->string() == QLatin1String("obsoleteqmlmembers")) {
+ generateCompactList(Obsolete, relative, m_qdb->getQmlTypesWithObsoleteMembers(), false,
+ QStringLiteral(""));
+ } else if (atom->string() == QLatin1String("functionindex")) {
+ generateFunctionIndex(relative);
+ } else if (atom->string() == QLatin1String("attributions")) {
+ generateAnnotatedList(relative, marker, m_qdb->getAttributions().values());
+ } else if (atom->string() == QLatin1String("legalese")) {
+ generateLegaleseList(relative, marker);
+ } else if (atom->string() == QLatin1String("overviews")) {
+ generateList(relative, marker, "overviews");
+ } else if (atom->string() == QLatin1String("cpp-modules")) {
+ generateList(relative, marker, "cpp-modules");
+ } else if (atom->string() == QLatin1String("qml-modules")) {
+ generateList(relative, marker, "qml-modules");
+ } else if (atom->string() == QLatin1String("namespaces")) {
+ generateAnnotatedList(relative, marker, m_qdb->getNamespaces().values());
+ } else if (atom->string() == QLatin1String("related")) {
+ generateList(relative, marker, "related");
+ } else {
+ const CollectionNode *cn = m_qdb->getCollectionNode(atom->string(), Node::Group);
+ if (cn) {
+ if (!generateGroupList(const_cast<CollectionNode *>(cn)))
+ relative->location().warning(
+ QString("'\\generatelist %1' group is empty").arg(atom->string()));
+ } else {
+ relative->location().warning(
+ QString("'\\generatelist %1' no such group").arg(atom->string()));
+ }
+ }
+ break;
+ case Atom::SinceList: {
+ const NodeMultiMap &nsmap = m_qdb->getSinceMap(atom->string());
+ if (nsmap.isEmpty())
+ break;
+
+ const NodeMultiMap &ncmap = m_qdb->getClassMap(atom->string());
+ const NodeMultiMap &nqcmap = m_qdb->getQmlTypeMap(atom->string());
+
+ Sections sections(nsmap);
+ out() << "<ul>\n";
+ const QList<Section> sinceSections = sections.sinceSections();
+ for (const auto &section : sinceSections) {
+ if (!section.members().isEmpty()) {
+ out() << "<li>"
+ << "<a href=\"#" << Utilities::asAsciiPrintable(section.title()) << "\">"
+ << section.title() << "</a></li>\n";
+ }
+ }
+ out() << "</ul>\n";
+
+ int index = 0;
+ for (const auto &section : sinceSections) {
+ if (!section.members().isEmpty()) {
+ out() << "<h3 id=\"" << Utilities::asAsciiPrintable(section.title()) << "\">"
+ << protectEnc(section.title()) << "</h3>\n";
+ if (index == Sections::SinceClasses)
+ generateCompactList(Generic, relative, ncmap, false, QStringLiteral("Q"));
+ else if (index == Sections::SinceQmlTypes)
+ generateCompactList(Generic, relative, nqcmap, false, QStringLiteral(""));
+ else if (index == Sections::SinceMemberFunctions
+ || index == Sections::SinceQmlMethods
+ || index == Sections::SinceQmlProperties) {
+
+ QMap<QString, NodeMultiMap> parentmaps;
+
+ const QList<Node *> &members = section.members();
+ for (const auto &member : members) {
+ QString parent_full_name = (*member).parent()->fullName();
+
+ auto parent_entry = parentmaps.find(parent_full_name);
+ if (parent_entry == parentmaps.end())
+ parent_entry = parentmaps.insert(parent_full_name, NodeMultiMap());
+ parent_entry->insert(member->name(), member);
+ }
+
+ for (auto map = parentmaps.begin(); map != parentmaps.end(); ++map) {
+ NodeVector nv = map->values().toVector();
+ auto parent = nv.front()->parent();
+
+ out() << ((index == Sections::SinceMemberFunctions) ? "<p>Class " : "<p>QML Type ");
+
+ out() << "<a href=\"" << linkForNode(parent, relative) << "\" translate=\"no\">";
+ QStringList pieces = parent->fullName().split("::");
+ out() << protectEnc(pieces.last());
+ out() << "</a>"
+ << ":</p>\n";
+
+ generateSection(nv, relative, marker);
+ out() << "<br/>";
+ }
+ } else if (index == Sections::SinceEnumValues) {
+ out() << "<div class=\"table\"><table class=\"alignedsummary\" translate=\"no\">\n";
+ const auto map_it = m_qdb->newEnumValueMaps().constFind(atom->string());
+ for (auto it = map_it->cbegin(); it != map_it->cend(); ++it) {
+ out() << "<tr><td class=\"memItemLeft\"> enum value </td><td class=\"memItemRight\">"
+ << "<b><a href=\"" << linkForNode(it.value(), nullptr) << "\">"
+ << it.key() << "</a></b></td></tr>\n";
+ }
+ out() << "</table></div>\n";
+ } else {
+ generateSection(section.members(), relative, marker);
+ }
+ }
+ ++index;
+ }
+ } break;
+ case Atom::BR:
+ out() << "<br />\n";
+ break;
+ case Atom::HR:
+ out() << "<hr />\n";
+ break;
+ case Atom::Image:
+ case Atom::InlineImage: {
+ QString text;
+ if (atom->next() && atom->next()->type() == Atom::ImageText)
+ text = atom->next()->string();
+ if (atom->type() == Atom::Image)
+ out() << "<p class=\"centerAlign\">";
+
+ auto maybe_resolved_file{file_resolver.resolve(atom->string())};
+ if (!maybe_resolved_file) {
+ // TODO: [uncentralized-admonition]
+ relative->location().warning(
+ QStringLiteral("Missing image: %1").arg(protectEnc(atom->string())));
+ out() << "<font color=\"red\">[Missing image " << protectEnc(atom->string())
+ << "]</font>";
+ } else {
+ ResolvedFile file{*maybe_resolved_file};
+ QString file_name{QFileInfo{file.get_path()}.fileName()};
+
+ // TODO: [operation-can-fail-making-the-output-incorrect]
+ // The operation of copying the file can fail, making the
+ // output refer to an image that does not exist.
+ // This should be fine as HTML will take care of managing
+ // the rendering of a missing image, but what html will
+ // render is in stark contrast with what we do when the
+ // image does not exist at all.
+ // It may be more correct to unify the behavior between
+ // the two either by considering images that cannot be
+ // copied as missing or letting the HTML renderer
+ // always taking care of the two cases.
+ // Do notice that effectively doing this might be
+ // unnecessary as extracting the output directory logic
+ // should ensure that a safe assumption for copy should be
+ // made at the API boundary.
+
+ // TODO: [uncentralized-output-directory-structure]
+ Config::copyFile(relative->doc().location(), file.get_path(), file_name, outputDir() + QLatin1String("/images"));
+
+ // TODO: [uncentralized-output-directory-structure]
+ out() << "<img src=\"" << "images/" + protectEnc(file_name) << '"';
+
+ // TODO: [same-result-branching]
+ // If text is empty protectEnc should return the empty
+ // string itself, such that the two branches would still
+ // result in the same output.
+ // Ensure that this is the case and then flatten the branch if so.
+ if (!text.isEmpty())
+ out() << " alt=\"" << protectEnc(text) << '"';
+ else
+ out() << " alt=\"\"";
+
+ out() << " />";
+
+ // TODO: [uncentralized-output-directory-structure]
+ m_helpProjectWriter->addExtraFile("images/" + file_name);
+ setImageFileName(relative, "images/" + file_name);
+ }
+
+ if (atom->type() == Atom::Image)
+ out() << "</p>";
+ } break;
+ case Atom::ImageText:
+ break;
+ // Admonitions
+ case Atom::ImportantLeft:
+ case Atom::NoteLeft:
+ case Atom::WarningLeft: {
+ QString admonType = atom->typeString();
+ // Remove 'Left' from atom type to get the admonition type
+ admonType.chop(4);
+ out() << "<div class=\"admonition " << admonType.toLower() << "\">\n"
+ << "<p>";
+ out() << formattingLeftMap()[ATOM_FORMATTING_BOLD];
+ out() << admonType << ": ";
+ out() << formattingRightMap()[ATOM_FORMATTING_BOLD];
+ } break;
+ case Atom::ImportantRight:
+ case Atom::NoteRight:
+ case Atom::WarningRight:
+ out() << "</p>\n"
+ << "</div>\n";
+ break;
+ case Atom::LegaleseLeft:
+ out() << "<div class=\"LegaleseLeft\">";
+ break;
+ case Atom::LegaleseRight:
+ out() << "</div>";
+ break;
+ case Atom::LineBreak:
+ out() << "<br/>";
+ break;
+ case Atom::Link:
+ // Prevent nested links in table of contents
+ if (m_inContents)
+ break;
+ Q_FALLTHROUGH();
+ case Atom::NavLink: {
+ const Node *node = nullptr;
+ QString link = getLink(atom, relative, &node);
+ if (link.isEmpty() && (node != relative) && !noLinkErrors()) {
+ Location location = atom->isLinkAtom() ? static_cast<const LinkAtom*>(atom)->location
+ : relative->doc().location();
+ location.warning(
+ QStringLiteral("Can't link to '%1'").arg(atom->string()));
+ }
+ beginLink(link, nullptr, relative);
+ m_linkNode = node;
+ skipAhead = 1;
+ } break;
+ case Atom::ExampleFileLink: {
+ QString link = linkForExampleFile(atom->string());
+ beginLink(link);
+ skipAhead = 1;
+ } break;
+ case Atom::ExampleImageLink: {
+ QString link = atom->string();
+ link = "images/used-in-examples/" + link;
+ beginLink(link);
+ skipAhead = 1;
+ } break;
+ case Atom::LinkNode: {
+ const Node *node = CodeMarker::nodeForString(atom->string());
+ beginLink(linkForNode(node, relative), node, relative);
+ skipAhead = 1;
+ } break;
+ case Atom::ListLeft:
+ if (in_para) {
+ out() << "</p>\n";
+ in_para = false;
+ }
+ if (atom->string() == ATOM_LIST_BULLET) {
+ out() << "<ul>\n";
+ } else if (atom->string() == ATOM_LIST_TAG) {
+ out() << "<dl>\n";
+ } else if (atom->string() == ATOM_LIST_VALUE) {
+ out() << R"(<div class="table"><table class="valuelist">)";
+ m_threeColumnEnumValueTable = isThreeColumnEnumValueTable(atom);
+ if (m_threeColumnEnumValueTable) {
+ if (++m_numTableRows % 2 == 1)
+ out() << R"(<tr valign="top" class="odd">)";
+ else
+ out() << R"(<tr valign="top" class="even">)";
+
+ out() << "<th class=\"tblConst\">Constant</th>";
+
+ // If not in \enum topic, skip the value column
+ if (relative->isEnumType())
+ out() << "<th class=\"tblval\">Value</th>";
+
+ out() << "<th class=\"tbldscr\">Description</th></tr>\n";
+ } else {
+ out() << "<tr><th class=\"tblConst\">Constant</th><th "
+ "class=\"tblVal\">Value</th></tr>\n";
+ }
+ } else {
+ QString olType;
+ if (atom->string() == ATOM_LIST_UPPERALPHA) {
+ olType = "A";
+ } else if (atom->string() == ATOM_LIST_LOWERALPHA) {
+ olType = "a";
+ } else if (atom->string() == ATOM_LIST_UPPERROMAN) {
+ olType = "I";
+ } else if (atom->string() == ATOM_LIST_LOWERROMAN) {
+ olType = "i";
+ } else { // (atom->string() == ATOM_LIST_NUMERIC)
+ olType = "1";
+ }
+
+ if (atom->next() != nullptr && atom->next()->string().toInt() > 1) {
+ out() << QString(R"(<ol class="%1" type="%1" start="%2">)")
+ .arg(olType, atom->next()->string());
+ } else
+ out() << QString(R"(<ol class="%1" type="%1">)").arg(olType);
+ }
+ break;
+ case Atom::ListItemNumber:
+ break;
+ case Atom::ListTagLeft:
+ if (atom->string() == ATOM_LIST_TAG) {
+ out() << "<dt>";
+ } else { // (atom->string() == ATOM_LIST_VALUE)
+ std::pair<QString, int> pair = getAtomListValue(atom);
+ skipAhead = pair.second;
+ QString t = protectEnc(plainCode(marker->markedUpEnumValue(pair.first, relative)));
+ out() << "<tr><td class=\"topAlign\"><code translate=\"no\">" << t << "</code>";
+
+ if (relative->isEnumType()) {
+ out() << "</td><td class=\"topAlign tblval\">";
+ const auto *enume = static_cast<const EnumNode *>(relative);
+ QString itemValue = enume->itemValue(atom->next()->string());
+ if (itemValue.isEmpty())
+ out() << '?';
+ else
+ out() << "<code translate=\"no\">" << protectEnc(itemValue) << "</code>";
+ }
+ }
+ break;
+ case Atom::SinceTagRight:
+ case Atom::ListTagRight:
+ if (atom->string() == ATOM_LIST_TAG)
+ out() << "</dt>\n";
+ break;
+ case Atom::ListItemLeft:
+ if (atom->string() == ATOM_LIST_TAG) {
+ out() << "<dd>";
+ } else if (atom->string() == ATOM_LIST_VALUE) {
+ if (m_threeColumnEnumValueTable) {
+ out() << "</td><td class=\"topAlign\">";
+ if (matchAhead(atom, Atom::ListItemRight))
+ out() << "&nbsp;";
+ }
+ } else {
+ out() << "<li>";
+ }
+ if (matchAhead(atom, Atom::ParaLeft))
+ skipAhead = 1;
+ break;
+ case Atom::ListItemRight:
+ if (atom->string() == ATOM_LIST_TAG) {
+ out() << "</dd>\n";
+ } else if (atom->string() == ATOM_LIST_VALUE) {
+ out() << "</td></tr>\n";
+ } else {
+ out() << "</li>\n";
+ }
+ break;
+ case Atom::ListRight:
+ if (atom->string() == ATOM_LIST_BULLET) {
+ out() << "</ul>\n";
+ } else if (atom->string() == ATOM_LIST_TAG) {
+ out() << "</dl>\n";
+ } else if (atom->string() == ATOM_LIST_VALUE) {
+ out() << "</table></div>\n";
+ } else {
+ out() << "</ol>\n";
+ }
+ break;
+ case Atom::Nop:
+ break;
+ case Atom::ParaLeft:
+ out() << "<p>";
+ in_para = true;
+ break;
+ case Atom::ParaRight:
+ endLink();
+ if (in_para) {
+ out() << "</p>\n";
+ in_para = false;
+ }
+ // if (!matchAhead(atom, Atom::ListItemRight) && !matchAhead(atom, Atom::TableItemRight))
+ // out() << "</p>\n";
+ break;
+ case Atom::QuotationLeft:
+ out() << "<blockquote>";
+ break;
+ case Atom::QuotationRight:
+ out() << "</blockquote>\n";
+ break;
+ case Atom::RawString:
+ out() << atom->string();
+ break;
+ case Atom::SectionLeft:
+ case Atom::SectionRight:
+ break;
+ case Atom::SectionHeadingLeft: {
+ int unit = atom->string().toInt() + hOffset(relative);
+ out() << "<h" + QString::number(unit) + QLatin1Char(' ') << "id=\""
+ << Tree::refForAtom(atom) << "\">";
+ m_inSectionHeading = true;
+ break;
+ }
+ case Atom::SectionHeadingRight:
+ out() << "</h" + QString::number(atom->string().toInt() + hOffset(relative)) + ">\n";
+ m_inSectionHeading = false;
+ break;
+ case Atom::SidebarLeft:
+ Q_FALLTHROUGH();
+ case Atom::SidebarRight:
+ break;
+ case Atom::String:
+ if (m_inLink && !m_inContents && !m_inSectionHeading) {
+ generateLink(atom);
+ } else {
+ out() << protectEnc(atom->string());
+ }
+ break;
+ case Atom::TableLeft: {
+ std::pair<QString, QString> pair = getTableWidthAttr(atom);
+ QString attr = pair.second;
+ QString width = pair.first;
+
+ if (in_para) {
+ out() << "</p>\n";
+ in_para = false;
+ }
+
+ out() << R"(<div class="table"><table class=")" << attr << '"';
+ if (!width.isEmpty())
+ out() << " width=\"" << width << '"';
+ out() << ">\n ";
+ m_numTableRows = 0;
+ } break;
+ case Atom::TableRight:
+ out() << "</table></div>\n";
+ break;
+ case Atom::TableHeaderLeft:
+ out() << "<thead><tr class=\"qt-style\">";
+ m_inTableHeader = true;
+ break;
+ case Atom::TableHeaderRight:
+ out() << "</tr>";
+ if (matchAhead(atom, Atom::TableHeaderLeft)) {
+ skipAhead = 1;
+ out() << "\n<tr class=\"qt-style\">";
+ } else {
+ out() << "</thead>\n";
+ m_inTableHeader = false;
+ }
+ break;
+ case Atom::TableRowLeft:
+ if (!atom->string().isEmpty())
+ out() << "<tr " << atom->string() << '>';
+ else if (++m_numTableRows % 2 == 1)
+ out() << R"(<tr valign="top" class="odd">)";
+ else
+ out() << R"(<tr valign="top" class="even">)";
+ break;
+ case Atom::TableRowRight:
+ out() << "</tr>\n";
+ break;
+ case Atom::TableItemLeft: {
+ if (m_inTableHeader)
+ out() << "<th ";
+ else
+ out() << "<td ";
+
+ for (int i = 0; i < atom->count(); ++i) {
+ if (i > 0)
+ out() << ' ';
+ const QString &p = atom->string(i);
+ if (p.contains('=')) {
+ out() << p;
+ } else {
+ QStringList spans = p.split(QLatin1Char(','));
+ if (spans.size() == 2) {
+ if (spans.at(0) != "1")
+ out() << " colspan=\"" << spans.at(0) << '"';
+ if (spans.at(1) != "1")
+ out() << " rowspan=\"" << spans.at(1) << '"';
+ }
+ }
+ }
+ out() << '>';
+ if (matchAhead(atom, Atom::ParaLeft))
+ skipAhead = 1;
+ } break;
+ case Atom::TableItemRight:
+ if (m_inTableHeader)
+ out() << "</th>";
+ else {
+ out() << "</td>";
+ }
+ if (matchAhead(atom, Atom::ParaLeft))
+ skipAhead = 1;
+ break;
+ case Atom::TableOfContents:
+ Q_FALLTHROUGH();
+ case Atom::Keyword:
+ break;
+ case Atom::Target:
+ out() << "<span id=\"" << Utilities::asAsciiPrintable(atom->string()) << "\"></span>";
+ break;
+ case Atom::UnhandledFormat:
+ out() << "<b class=\"redFont\">&lt;Missing HTML&gt;</b>";
+ break;
+ case Atom::UnknownCommand:
+ out() << R"(<b class="redFont"><code translate=\"no\">\)" << protectEnc(atom->string()) << "</code></b>";
+ break;
+ case Atom::CodeQuoteArgument:
+ case Atom::CodeQuoteCommand:
+ case Atom::ComparesLeft:
+ case Atom::ComparesRight:
+ case Atom::SnippetCommand:
+ case Atom::SnippetIdentifier:
+ case Atom::SnippetLocation:
+ // no HTML output (ignore)
+ break;
+ default:
+ unknownAtom(atom);
+ }
+ return skipAhead;
+}
+
+/*!
+ * Return a string representing a text that exposes information about
+ * the user-visible groups that the \a node is part of. A user-visible
+ * group is a group that generates an output page, that is, a \\group
+ * topic exists for the group and can be linked to.
+ *
+ * The returned string is composed of comma separated links to the
+ * groups, with their title as the user-facing text, surrounded by
+ * some introductory text.
+ *
+ * For example, if a node named N is part of the groups with title A
+ * and B, the line rendered form of the line will be "N is part of the
+ * A, B groups", where A and B are clickable links that target the
+ * respective page of each group.
+ *
+ * If a node has a single group, the comma is removed for readability
+ * pusposes and "groups" is expressed as a singular noun.
+ * For example, "N is part of the A group".
+ *
+ * The returned string is empty when the node is not linked to any
+ * group that has a valid link target.
+ *
+ * This string is used in the summary of c++ classes or qml types to
+ * link them to some of the overview documentation that is generated
+ * through the "\group" command.
+ *
+ * Note that this is currently, incorrectly, a member of
+ * HtmlGenerator as it requires access to some protected/private
+ * members for escaping and linking.
+ */
+QString HtmlGenerator::groupReferenceText(PageNode* node) {
+ auto link_for_group = [this](const CollectionNode *group) -> QString {
+ QString target{linkForNode(group, nullptr)};
+ return (target.isEmpty()) ? protectEnc(group->name()) : "<a href=\"" + target + "\">" + protectEnc(group->fullTitle()) + "</a>";
+ };
+
+ QString text{};
+
+ const QStringList &groups_names{node->groupNames()};
+ if (groups_names.isEmpty())
+ return text;
+
+ std::vector<CollectionNode *> groups_nodes(groups_names.size(), nullptr);
+ std::transform(groups_names.cbegin(), groups_names.cend(), groups_nodes.begin(),
+ [this](const QString &group_name) -> CollectionNode* {
+ CollectionNode *group{m_qdb->groups()[group_name]};
+ m_qdb->mergeCollections(group);
+ return (group && group->wasSeen()) ? group : nullptr;
+ });
+ groups_nodes.erase(std::remove(groups_nodes.begin(), groups_nodes.end(), nullptr), groups_nodes.end());
+
+ if (!groups_nodes.empty()) {
+ text += node->name() + " is part of ";
+
+ for (std::vector<CollectionNode *>::size_type index{0}; index < groups_nodes.size(); ++index) {
+ text += link_for_group(groups_nodes[index]) + Utilities::separator(index, groups_nodes.size());
+ }
+ }
+ return text;
+}
+
+/*!
+ Generate a reference page for the C++ class, namespace, or
+ header file documented in \a node using the code \a marker
+ provided.
+ */
+void HtmlGenerator::generateCppReferencePage(Aggregate *aggregate, CodeMarker *marker)
+{
+ QString title;
+ QString rawTitle;
+ QString fullTitle;
+ NamespaceNode *ns = nullptr;
+ SectionVector *summarySections = nullptr;
+ SectionVector *detailsSections = nullptr;
+
+ Sections sections(aggregate);
+ QString word = aggregate->typeWord(true);
+ auto templateDecl = aggregate->templateDecl();
+ if (aggregate->isNamespace()) {
+ rawTitle = aggregate->plainName();
+ fullTitle = aggregate->plainFullName();
+ title = rawTitle + " Namespace";
+ ns = static_cast<NamespaceNode *>(aggregate);
+ summarySections = &sections.stdSummarySections();
+ detailsSections = &sections.stdDetailsSections();
+ } else if (aggregate->isClassNode()) {
+ rawTitle = aggregate->plainName();
+ fullTitle = aggregate->plainFullName();
+ title = rawTitle + QLatin1Char(' ') + word;
+ summarySections = &sections.stdCppClassSummarySections();
+ detailsSections = &sections.stdCppClassDetailsSections();
+ } else if (aggregate->isHeader()) {
+ title = fullTitle = rawTitle = aggregate->fullTitle();
+ summarySections = &sections.stdSummarySections();
+ detailsSections = &sections.stdDetailsSections();
+ }
+
+ Text subtitleText;
+ if (rawTitle != fullTitle || templateDecl) {
+ if (aggregate->isClassNode()) {
+ if (templateDecl)
+ subtitleText << (*templateDecl).to_qstring() + QLatin1Char(' ');
+ subtitleText << aggregate->typeWord(false) + QLatin1Char(' ');
+ const QStringList ancestors = fullTitle.split(QLatin1String("::"));
+ for (const auto &a : ancestors) {
+ if (a == rawTitle) {
+ subtitleText << a;
+ break;
+ } else {
+ subtitleText << Atom(Atom::AutoLink, a) << "::";
+ }
+ }
+ } else {
+ subtitleText << fullTitle;
+ }
+ }
+
+ generateHeader(title, aggregate, marker);
+ generateTableOfContents(aggregate, marker, summarySections);
+ generateTitle(title, subtitleText, SmallSubTitle, aggregate, marker);
+ if (ns && !ns->hasDoc() && ns->docNode()) {
+ NamespaceNode *NS = ns->docNode();
+ Text brief;
+ brief << "The " << ns->name() << " namespace includes the following elements from module "
+ << ns->tree()->camelCaseModuleName() << ". The full namespace is "
+ << "documented in module " << NS->tree()->camelCaseModuleName()
+ << Atom(Atom::LinkNode, CodeMarker::stringForNode(NS))
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << Atom(Atom::String, " here.")
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
+ out() << "<p>";
+ generateText(brief, ns, marker);
+ out() << "</p>\n";
+ } else
+ generateBrief(aggregate, marker);
+
+ const auto parentIsClass = aggregate->parent()->isClassNode();
+
+ if (!parentIsClass)
+ generateRequisites(aggregate, marker);
+ generateStatus(aggregate, marker);
+ if (parentIsClass)
+ generateSince(aggregate, marker);
+
+ QString membersLink = generateAllMembersFile(Sections::allMembersSection(), marker);
+ if (!membersLink.isEmpty()) {
+ openUnorderedList();
+ out() << "<li><a href=\"" << membersLink << "\">"
+ << "List of all members, including inherited members</a></li>\n";
+ }
+ QString obsoleteLink = generateObsoleteMembersFile(sections, marker);
+ if (!obsoleteLink.isEmpty()) {
+ openUnorderedList();
+ out() << "<li><a href=\"" << obsoleteLink << "\">"
+ << "Deprecated members</a></li>\n";
+ }
+
+ if (QString groups_text{groupReferenceText(aggregate)}; !groups_text.isEmpty()) {
+ openUnorderedList();
+
+ out() << "<li>" << groups_text << "</li>\n";
+ }
+
+ closeUnorderedList();
+ generateComparisonCategory(aggregate, marker);
+ generateComparisonList(aggregate);
+
+ generateThreadSafeness(aggregate, marker);
+
+ bool needOtherSection = false;
+
+ for (const auto &section : std::as_const(*summarySections)) {
+ if (section.members().isEmpty() && section.reimplementedMembers().isEmpty()) {
+ if (!section.inheritedMembers().isEmpty())
+ needOtherSection = true;
+ } else {
+ if (!section.members().isEmpty()) {
+ QString ref = registerRef(section.title().toLower());
+ out() << "<h2 id=\"" << ref << "\">" << protectEnc(section.title()) << "</h2>\n";
+ generateSection(section.members(), aggregate, marker);
+ }
+ if (!section.reimplementedMembers().isEmpty()) {
+ QString name = QString("Reimplemented ") + section.title();
+ QString ref = registerRef(name.toLower());
+ out() << "<h2 id=\"" << ref << "\">" << protectEnc(name) << "</h2>\n";
+ generateSection(section.reimplementedMembers(), aggregate, marker);
+ }
+
+ if (!section.inheritedMembers().isEmpty()) {
+ out() << "<ul>\n";
+ generateSectionInheritedList(section, aggregate);
+ out() << "</ul>\n";
+ }
+ }
+ }
+
+ if (needOtherSection) {
+ out() << "<h3>Additional Inherited Members</h3>\n"
+ "<ul>\n";
+
+ for (const auto &section : std::as_const(*summarySections)) {
+ if (section.members().isEmpty() && !section.inheritedMembers().isEmpty())
+ generateSectionInheritedList(section, aggregate);
+ }
+ out() << "</ul>\n";
+ }
+
+ if (aggregate->doc().isEmpty()) {
+ QString command = "documentation";
+ if (aggregate->isClassNode())
+ command = R"('\class' comment)";
+ if (!ns || ns->isDocumentedHere()) {
+ aggregate->location().warning(
+ QStringLiteral("No %1 for '%2'").arg(command, aggregate->plainSignature()));
+ }
+ } else {
+ generateExtractionMark(aggregate, DetailedDescriptionMark);
+ out() << "<div class=\"descr\">\n"
+ << "<h2 id=\"" << registerRef("details") << "\">"
+ << "Detailed Description"
+ << "</h2>\n";
+ generateBody(aggregate, marker);
+ out() << "</div>\n";
+ generateAlsoList(aggregate, marker);
+ generateExtractionMark(aggregate, EndMark);
+ }
+
+ for (const auto &section : std::as_const(*detailsSections)) {
+ bool headerGenerated = false;
+ if (section.isEmpty())
+ continue;
+
+ const QList<Node *> &members = section.members();
+ for (const auto &member : members) {
+ if (member->access() == Access::Private) // ### check necessary?
+ continue;
+ if (!headerGenerated) {
+ if (!section.divClass().isEmpty())
+ out() << "<div class=\"" << section.divClass() << "\">\n";
+ out() << "<h2>" << protectEnc(section.title()) << "</h2>\n";
+ headerGenerated = true;
+ }
+ if (!member->isClassNode())
+ generateDetailedMember(member, aggregate, marker);
+ else {
+ out() << "<h3> class ";
+ generateFullName(member, aggregate);
+ out() << "</h3>";
+ generateBrief(member, marker, aggregate);
+ }
+
+ QStringList names;
+ names << member->name();
+ if (member->isFunction()) {
+ const auto *func = reinterpret_cast<const FunctionNode *>(member);
+ if (func->isSomeCtor() || func->isDtor() || func->overloadNumber() != 0)
+ names.clear();
+ } else if (member->isProperty()) {
+ const auto *prop = reinterpret_cast<const PropertyNode *>(member);
+ if (!prop->getters().isEmpty() && !names.contains(prop->getters().first()->name()))
+ names << prop->getters().first()->name();
+ if (!prop->setters().isEmpty())
+ names << prop->setters().first()->name();
+ if (!prop->resetters().isEmpty())
+ names << prop->resetters().first()->name();
+ if (!prop->notifiers().isEmpty())
+ names << prop->notifiers().first()->name();
+ } else if (member->isEnumType()) {
+ const auto *enume = reinterpret_cast<const EnumNode *>(member);
+ if (enume->flagsType())
+ names << enume->flagsType()->name();
+ const auto &enumItemNameList = enume->doc().enumItemNames();
+ const auto &omitEnumItemNameList = enume->doc().omitEnumItemNames();
+ const auto items = QSet<QString>(enumItemNameList.cbegin(), enumItemNameList.cend())
+ - QSet<QString>(omitEnumItemNameList.cbegin(), omitEnumItemNameList.cend());
+ for (const QString &enumName : items) {
+ names << plainCode(marker->markedUpEnumValue(enumName, enume));
+ }
+ }
+ }
+ if (headerGenerated && !section.divClass().isEmpty())
+ out() << "</div>\n";
+ }
+ generateFooter(aggregate);
+}
+
+void HtmlGenerator::generateProxyPage(Aggregate *aggregate, CodeMarker *marker)
+{
+ Q_ASSERT(aggregate->isProxyNode());
+
+ QString title;
+ QString rawTitle;
+ QString fullTitle;
+ Text subtitleText;
+ SectionVector *summarySections = nullptr;
+ SectionVector *detailsSections = nullptr;
+
+ Sections sections(aggregate);
+ rawTitle = aggregate->plainName();
+ fullTitle = aggregate->plainFullName();
+ title = rawTitle + " Proxy Page";
+ summarySections = &sections.stdSummarySections();
+ detailsSections = &sections.stdDetailsSections();
+ generateHeader(title, aggregate, marker);
+ generateTitle(title, subtitleText, SmallSubTitle, aggregate, marker);
+ generateBrief(aggregate, marker);
+ for (auto it = summarySections->constBegin(); it != summarySections->constEnd(); ++it) {
+ if (!it->members().isEmpty()) {
+ QString ref = registerRef(it->title().toLower());
+ out() << "<h2 id=\"" << ref << "\">" << protectEnc(it->title()) << "</h2>\n";
+ generateSection(it->members(), aggregate, marker);
+ }
+ }
+
+ if (!aggregate->doc().isEmpty()) {
+ generateExtractionMark(aggregate, DetailedDescriptionMark);
+ out() << "<div class=\"descr\">\n"
+ << "<h2 id=\"" << registerRef("details") << "\">"
+ << "Detailed Description"
+ << "</h2>\n";
+ generateBody(aggregate, marker);
+ out() << "</div>\n";
+ generateAlsoList(aggregate, marker);
+ generateExtractionMark(aggregate, EndMark);
+ }
+
+ for (const auto &section : std::as_const(*detailsSections)) {
+ if (section.isEmpty())
+ continue;
+
+ if (!section.divClass().isEmpty())
+ out() << "<div class=\"" << section.divClass() << "\">\n";
+ out() << "<h2>" << protectEnc(section.title()) << "</h2>\n";
+
+ const QList<Node *> &members = section.members();
+ for (const auto &member : members) {
+ if (!member->isPrivate()) { // ### check necessary?
+ if (!member->isClassNode())
+ generateDetailedMember(member, aggregate, marker);
+ else {
+ out() << "<h3> class ";
+ generateFullName(member, aggregate);
+ out() << "</h3>";
+ generateBrief(member, marker, aggregate);
+ }
+
+ QStringList names;
+ names << member->name();
+ if (member->isFunction()) {
+ const auto *func = reinterpret_cast<const FunctionNode *>(member);
+ if (func->isSomeCtor() || func->isDtor() || func->overloadNumber() != 0)
+ names.clear();
+ } else if (member->isEnumType()) {
+ const auto *enume = reinterpret_cast<const EnumNode *>(member);
+ if (enume->flagsType())
+ names << enume->flagsType()->name();
+ const auto &enumItemNameList = enume->doc().enumItemNames();
+ const auto &omitEnumItemNameList = enume->doc().omitEnumItemNames();
+ const auto items =
+ QSet<QString>(enumItemNameList.cbegin(), enumItemNameList.cend())
+ - QSet<QString>(omitEnumItemNameList.cbegin(),
+ omitEnumItemNameList.cend());
+ for (const QString &enumName : items)
+ names << plainCode(marker->markedUpEnumValue(enumName, enume));
+ }
+ }
+ }
+ if (!section.divClass().isEmpty())
+ out() << "</div>\n";
+ }
+ generateFooter(aggregate);
+}
+
+/*!
+ Generate the HTML page for a QML type. \qcn is the QML type.
+ \marker is the code markeup object.
+ */
+void HtmlGenerator::generateQmlTypePage(QmlTypeNode *qcn, CodeMarker *marker)
+{
+ Generator::setQmlTypeContext(qcn);
+ SubTitleSize subTitleSize = LargeSubTitle;
+ QString htmlTitle = qcn->fullTitle();
+ if (qcn->isQmlBasicType())
+ htmlTitle.append(" QML Value Type");
+ else
+ htmlTitle.append(" QML Type");
+
+
+ generateHeader(htmlTitle, qcn, marker);
+ Sections sections(qcn);
+ generateTableOfContents(qcn, marker, &sections.stdQmlTypeSummarySections());
+ marker = CodeMarker::markerForLanguage(QLatin1String("QML"));
+ generateTitle(htmlTitle, Text() << qcn->subtitle(), subTitleSize, qcn, marker);
+ generateBrief(qcn, marker);
+ generateQmlRequisites(qcn, marker);
+ generateStatus(qcn, marker);
+
+ QString allQmlMembersLink;
+
+ // No 'All Members' file for QML value types
+ if (!qcn->isQmlBasicType())
+ allQmlMembersLink = generateAllQmlMembersFile(sections, marker);
+ QString obsoleteLink = generateObsoleteQmlMembersFile(sections, marker);
+ if (!allQmlMembersLink.isEmpty() || !obsoleteLink.isEmpty()) {
+ openUnorderedList();
+
+ if (!allQmlMembersLink.isEmpty()) {
+ out() << "<li><a href=\"" << allQmlMembersLink << "\">"
+ << "List of all members, including inherited members</a></li>\n";
+ }
+ if (!obsoleteLink.isEmpty()) {
+ out() << "<li><a href=\"" << obsoleteLink << "\">"
+ << "Deprecated members</a></li>\n";
+ }
+ }
+
+ if (QString groups_text{groupReferenceText(qcn)}; !groups_text.isEmpty()) {
+ openUnorderedList();
+
+ out() << "<li>" << groups_text << "</li>\n";
+ }
+
+ closeUnorderedList();
+
+ const QList<Section> &stdQmlTypeSummarySections = sections.stdQmlTypeSummarySections();
+ for (const auto &section : stdQmlTypeSummarySections) {
+ if (!section.isEmpty()) {
+ QString ref = registerRef(section.title().toLower());
+ out() << "<h2 id=\"" << ref << "\">" << protectEnc(section.title()) << "</h2>\n";
+ generateQmlSummary(section.members(), qcn, marker);
+ }
+ }
+
+ generateExtractionMark(qcn, DetailedDescriptionMark);
+ out() << "<h2 id=\"" << registerRef("details") << "\">"
+ << "Detailed Description"
+ << "</h2>\n";
+ generateBody(qcn, marker);
+ generateAlsoList(qcn, marker);
+ generateExtractionMark(qcn, EndMark);
+
+ const QList<Section> &stdQmlTypeDetailsSections = sections.stdQmlTypeDetailsSections();
+ for (const auto &section : stdQmlTypeDetailsSections) {
+ if (!section.isEmpty()) {
+ out() << "<h2>" << protectEnc(section.title()) << "</h2>\n";
+ const QList<Node *> &members = section.members();
+ for (const auto member : members) {
+ generateDetailedQmlMember(member, qcn, marker);
+ out() << "<br/>\n";
+ }
+ }
+ }
+ generateFooter(qcn);
+ Generator::setQmlTypeContext(nullptr);
+}
+
+/*!
+ Generate the HTML page for an entity that doesn't map
+ to any underlying parsable C++ or QML element.
+ */
+void HtmlGenerator::generatePageNode(PageNode *pn, CodeMarker *marker)
+{
+ SubTitleSize subTitleSize = LargeSubTitle;
+ QString fullTitle = pn->fullTitle();
+
+ generateHeader(fullTitle, pn, marker);
+ /*
+ Generate the TOC for the new doc format.
+ Don't generate a TOC for the home page.
+ */
+ if ((pn->name() != QLatin1String("index.html")))
+ generateTableOfContents(pn, marker, nullptr);
+
+ generateTitle(fullTitle, Text() << pn->subtitle(), subTitleSize, pn, marker);
+ if (pn->isExample()) {
+ generateBrief(pn, marker, nullptr, false);
+ }
+
+ generateExtractionMark(pn, DetailedDescriptionMark);
+ out() << R"(<div class="descr" id=")" << registerRef("details")
+ << "\">\n";
+
+ generateBody(pn, marker);
+ out() << "</div>\n";
+ generateAlsoList(pn, marker);
+ generateExtractionMark(pn, EndMark);
+
+ generateFooter(pn);
+}
+
+/*!
+ Generate the HTML page for a group, module, or QML module.
+ */
+void HtmlGenerator::generateCollectionNode(CollectionNode *cn, CodeMarker *marker)
+{
+ SubTitleSize subTitleSize = LargeSubTitle;
+ QString fullTitle = cn->fullTitle();
+ QString ref;
+
+ generateHeader(fullTitle, cn, marker);
+ generateTableOfContents(cn, marker, nullptr);
+ generateTitle(fullTitle, Text() << cn->subtitle(), subTitleSize, cn, marker);
+
+ // Generate brief for C++ modules, status for all modules.
+ if (cn->genus() != Node::DOC && cn->genus() != Node::DontCare) {
+ if (cn->isModule())
+ generateBrief(cn, marker);
+ generateStatus(cn, marker);
+ generateSince(cn, marker);
+ }
+
+ if (cn->isModule()) {
+ if (!cn->noAutoList()) {
+ NodeMap nmm{cn->getMembers(Node::Namespace)};
+ if (!nmm.isEmpty()) {
+ ref = registerRef("namespaces");
+ out() << "<h2 id=\"" << ref << "\">Namespaces</h2>\n";
+ generateAnnotatedList(cn, marker, nmm.values());
+ }
+ nmm = cn->getMembers([](const Node *n){ return n->isClassNode(); });
+ if (!nmm.isEmpty()) {
+ ref = registerRef("classes");
+ out() << "<h2 id=\"" << ref << "\">Classes</h2>\n";
+ generateAnnotatedList(cn, marker, nmm.values());
+ }
+ }
+ }
+
+ if (cn->isModule() && !cn->doc().briefText().isEmpty()) {
+ generateExtractionMark(cn, DetailedDescriptionMark);
+ ref = registerRef("details");
+ out() << "<div class=\"descr\">\n";
+ out() << "<h2 id=\"" << ref << "\">"
+ << "Detailed Description"
+ << "</h2>\n";
+ } else {
+ generateExtractionMark(cn, DetailedDescriptionMark);
+ out() << R"(<div class="descr" id=")" << registerRef("details")
+ << "\">\n";
+ }
+
+ generateBody(cn, marker);
+ out() << "</div>\n";
+ generateAlsoList(cn, marker);
+ generateExtractionMark(cn, EndMark);
+
+ if (!cn->noAutoList()) {
+ if (cn->isGroup() || cn->isQmlModule())
+ generateAnnotatedList(cn, marker, cn->members());
+ }
+ generateFooter(cn);
+}
+
+/*!
+ Generate the HTML page for a generic collection. This is usually
+ a collection of C++ elements that are related to an element in
+ a different module.
+ */
+void HtmlGenerator::generateGenericCollectionPage(CollectionNode *cn, CodeMarker *marker)
+{
+ SubTitleSize subTitleSize = LargeSubTitle;
+ QString fullTitle = cn->name();
+
+ generateHeader(fullTitle, cn, marker);
+ generateTitle(fullTitle, Text() << cn->subtitle(), subTitleSize, cn, marker);
+
+ Text brief;
+ brief << "Each function or type documented here is related to a class or "
+ << "namespace that is documented in a different module. The reference "
+ << "page for that class or namespace will link to the function or type "
+ << "on this page.";
+ out() << "<p>";
+ generateText(brief, cn, marker);
+ out() << "</p>\n";
+
+ const QList<Node *> members = cn->members();
+ for (const auto &member : members)
+ generateDetailedMember(member, cn, marker);
+
+ generateFooter(cn);
+}
+
+/*!
+ Returns "html" for this subclass of Generator.
+ */
+QString HtmlGenerator::fileExtension() const
+{
+ return "html";
+}
+
+/*!
+ Output a navigation bar (breadcrumbs) for the html file.
+ For API reference pages, items for the navigation bar are (in order):
+ \table
+ \header \li Item \li Related configuration variable \li Notes
+ \row \li home \li navigation.homepage \li e.g. 'Qt 6.2'
+ \row \li landing \li navigation.landingpage \li Module landing page
+ \row \li types \li navigation.cppclassespage (C++)\br
+ navigation.qmltypespage (QML) \li Types only
+ \row \li module \li n/a (automatic) \li Module page if different
+ from previous item
+ \row \li page \li n/a \li Current page title
+ \endtable
+
+ For other page types (page nodes) the navigation bar is constructed from home
+ page, landing page, and the chain of PageNode::navigationParent() items (if one exists).
+ This chain is constructed from the \\list structure on a page or pages defined in
+ \c navigation.toctitles configuration variable.
+
+ Finally, if no other navigation data exists for a page but it is a member of a
+ single group (using \\ingroup), add that group page to the navigation bar.
+ */
+void HtmlGenerator::generateNavigationBar(const QString &title, const Node *node,
+ CodeMarker *marker, const QString &buildversion,
+ bool tableItems)
+{
+ if (m_noNavigationBar || node == nullptr)
+ return;
+
+ Text navigationbar;
+
+ // Set list item types based on the navigation bar type
+ // TODO: Do we still need table items?
+ Atom::AtomType itemLeft = tableItems ? Atom::TableItemLeft : Atom::ListItemLeft;
+ Atom::AtomType itemRight = tableItems ? Atom::TableItemRight : Atom::ListItemRight;
+
+ // Helper to add an item to navigation bar based on a string link target
+ auto addNavItem = [&](const QString &link, const QString &title) {
+ navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, link)
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
+ << Atom(Atom::String, title)
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom(itemRight);
+ };
+
+ // Helper to add an item to navigation bar based on a target node
+ auto addNavItemNode = [&](const Node *node, const QString &title) {
+ navigationbar << Atom(itemLeft) << Atom(Atom::LinkNode, CodeMarker::stringForNode(node))
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
+ << Atom(Atom::String, title)
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom(itemRight);
+ };
+
+ // Resolve the associated module (collection) node and its 'state' description
+ const auto *moduleNode = m_qdb->getModuleNode(node);
+ QString moduleState;
+ if (moduleNode && !moduleNode->state().isEmpty())
+ moduleState = QStringLiteral(" (%1)").arg(moduleNode->state());
+
+ if (m_hometitle == title)
+ return;
+ if (!m_homepage.isEmpty())
+ addNavItem(m_homepage, m_hometitle);
+ if (!m_landingpage.isEmpty() && m_landingtitle != title)
+ addNavItem(m_landingpage, m_landingtitle);
+
+ if (node->isClassNode()) {
+ if (!m_cppclassespage.isEmpty() && !m_cppclassestitle.isEmpty())
+ addNavItem(m_cppclassespage, m_cppclassestitle);
+ if (!node->physicalModuleName().isEmpty()) {
+ // Add explicit link to the \module page if:
+ // - It's not the C++ classes page that's already added, OR
+ // - It has a \modulestate associated with it
+ if (moduleNode && (!moduleState.isEmpty() || moduleNode->title() != m_cppclassespage))
+ addNavItemNode(moduleNode, moduleNode->name() + moduleState);
+ }
+ navigationbar << Atom(itemLeft) << Atom(Atom::String, node->name()) << Atom(itemRight);
+ } else if (node->isQmlType()) {
+ if (!m_qmltypespage.isEmpty() && !m_qmltypestitle.isEmpty())
+ addNavItem(m_qmltypespage, m_qmltypestitle);
+ // Add explicit link to the \qmlmodule page if:
+ // - It's not the QML types page that's already added, OR
+ // - It has a \modulestate associated with it
+ if (moduleNode && (!moduleState.isEmpty() || moduleNode->title() != m_qmltypespage)) {
+ addNavItemNode(moduleNode, moduleNode->name() + moduleState);
+ }
+ navigationbar << Atom(itemLeft) << Atom(Atom::String, node->name()) << Atom(itemRight);
+ } else {
+ if (node->isPageNode()) {
+ auto currentNode{static_cast<const PageNode*>(node)};
+ std::deque<const Node *> navNodes;
+ // Cutoff at 16 items in case there's a circular dependency
+ qsizetype navItems = 0;
+ while (currentNode->navigationParent() && ++navItems < 16) {
+ if (std::find(navNodes.cbegin(), navNodes.cend(),
+ currentNode->navigationParent()) == navNodes.cend())
+ navNodes.push_front(currentNode->navigationParent());
+ currentNode = currentNode->navigationParent();
+ }
+ // If no nav. parent was found but the page is a \group member, add a link to the
+ // (first) group page.
+ if (navNodes.empty()) {
+ const QStringList groups = static_cast<const PageNode *>(node)->groupNames();
+ for (const auto &groupName : groups) {
+ const auto *groupNode = m_qdb->findNodeByNameAndType(QStringList{groupName}, &Node::isGroup);
+ if (groupNode && !groupNode->title().isEmpty()) {
+ navNodes.push_front(groupNode);
+ break;
+ }
+ }
+ }
+ while (!navNodes.empty()) {
+ if (navNodes.front()->isPageNode())
+ addNavItemNode(navNodes.front(), navNodes.front()->title());
+ navNodes.pop_front();
+ }
+ }
+ if (!navigationbar.isEmpty()) {
+ navigationbar << Atom(itemLeft) << Atom(Atom::String, title) << Atom(itemRight);
+ }
+ }
+
+ generateText(navigationbar, node, marker);
+
+ if (buildversion.isEmpty())
+ return;
+
+ navigationbar.clear();
+
+ if (tableItems) {
+ out() << "</tr></table><table class=\"buildversion\"><tr>\n"
+ << R"(<td id="buildversion" width="100%" align="right">)";
+ } else {
+ out() << "<li id=\"buildversion\">";
+ }
+
+ // Link buildversion string to navigation.landingpage
+ if (!m_landingpage.isEmpty() && m_landingtitle != title) {
+ navigationbar << Atom(Atom::NavLink, m_landingpage)
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
+ << Atom(Atom::String, buildversion)
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
+ generateText(navigationbar, node, marker);
+ } else {
+ out() << buildversion;
+ }
+ if (tableItems)
+ out() << "</td>\n";
+ else
+ out() << "</li>\n";
+}
+
+void HtmlGenerator::generateHeader(const QString &title, const Node *node, CodeMarker *marker)
+{
+ out() << "<!DOCTYPE html>\n";
+ out() << QString("<html lang=\"%1\">\n").arg(naturalLanguage);
+ out() << "<head>\n";
+ out() << " <meta charset=\"utf-8\">\n";
+ if (node && !node->doc().location().isEmpty())
+ out() << "<!-- " << node->doc().location().fileName() << " -->\n";
+
+ if (node && !node->doc().briefText().isEmpty()) {
+ out() << " <meta name=\"description\" content=\""
+ << protectEnc(node->doc().briefText().toString())
+ << "\">\n";
+ }
+
+ // determine the rest of the <title> element content: "title | titleSuffix version"
+ QString titleSuffix;
+ if (!m_landingtitle.isEmpty()) {
+ // for normal pages: "title | landingtitle version"
+ titleSuffix = m_landingtitle;
+ } else if (!m_hometitle.isEmpty()) {
+ // for pages that set the homepage title but not landing page title:
+ // "title | hometitle version"
+ if (title != m_hometitle)
+ titleSuffix = m_hometitle;
+ } else if (!m_project.isEmpty()) {
+ // for projects outside of Qt or Qt 5: "title | project version"
+ if (title != m_project)
+ titleSuffix = m_project;
+ } else
+ // default: "title | Qt version"
+ titleSuffix = QLatin1String("Qt ");
+
+ if (title == titleSuffix)
+ titleSuffix.clear();
+
+ QString divider;
+ if (!titleSuffix.isEmpty() && !title.isEmpty())
+ divider = QLatin1String(" | ");
+
+ // Generating page title
+ out() << " <title>" << protectEnc(title) << divider << titleSuffix;
+
+ // append a full version to the suffix if neither suffix nor title
+ // include (a prefix of) version information
+ QVersionNumber projectVersion = QVersionNumber::fromString(m_qdb->version());
+ if (!projectVersion.isNull()) {
+ QVersionNumber titleVersion;
+ static const QRegularExpression re(QLatin1String(R"(\d+\.\d+)"));
+ const QString &versionedTitle = titleSuffix.isEmpty() ? title : titleSuffix;
+ auto match = re.match(versionedTitle);
+ if (match.hasMatch())
+ titleVersion = QVersionNumber::fromString(match.captured());
+ if (titleVersion.isNull() || !titleVersion.isPrefixOf(projectVersion))
+ out() << QLatin1Char(' ') << projectVersion.toString();
+ }
+ out() << "</title>\n";
+
+ // Include style sheet and script links.
+ out() << m_headerStyles;
+ out() << m_headerScripts;
+ if (m_endHeader.isEmpty())
+ out() << "</head>\n<body>\n";
+ else
+ out() << m_endHeader;
+
+ out() << QString(m_postHeader).replace("\\" + COMMAND_VERSION, m_qdb->version());
+ bool usingTable = m_postHeader.trimmed().endsWith(QLatin1String("<tr>"));
+ generateNavigationBar(title, node, marker, m_buildversion, usingTable);
+ out() << QString(m_postPostHeader).replace("\\" + COMMAND_VERSION, m_qdb->version());
+
+ m_navigationLinks.clear();
+ refMap.clear();
+
+ if (node && !node->links().empty()) {
+ std::pair<QString, QString> linkPair;
+ std::pair<QString, QString> anchorPair;
+ const Node *linkNode;
+ bool useSeparator = false;
+
+ if (node->links().contains(Node::PreviousLink)) {
+ linkPair = node->links()[Node::PreviousLink];
+ linkNode = m_qdb->findNodeForTarget(linkPair.first, node);
+ if (linkNode == nullptr && !noLinkErrors())
+ node->doc().location().warning(
+ QStringLiteral("Cannot link to '%1'").arg(linkPair.first));
+ if (linkNode == nullptr || linkNode == node)
+ anchorPair = linkPair;
+ else
+ anchorPair = anchorForNode(linkNode);
+
+ out() << R"( <link rel="prev" href=")" << anchorPair.first << "\" />\n";
+
+ m_navigationLinks += R"(<a class="prevPage" href=")" + anchorPair.first + "\">";
+ if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty())
+ m_navigationLinks += protect(anchorPair.second);
+ else
+ m_navigationLinks += protect(linkPair.second);
+ m_navigationLinks += "</a>\n";
+ useSeparator = !m_navigationSeparator.isEmpty();
+ }
+ if (node->links().contains(Node::NextLink)) {
+ linkPair = node->links()[Node::NextLink];
+ linkNode = m_qdb->findNodeForTarget(linkPair.first, node);
+ if (linkNode == nullptr && !noLinkErrors())
+ node->doc().location().warning(
+ QStringLiteral("Cannot link to '%1'").arg(linkPair.first));
+ if (linkNode == nullptr || linkNode == node)
+ anchorPair = linkPair;
+ else
+ anchorPair = anchorForNode(linkNode);
+
+ out() << R"( <link rel="next" href=")" << anchorPair.first << "\" />\n";
+
+ if (useSeparator)
+ m_navigationLinks += m_navigationSeparator;
+
+ m_navigationLinks += R"(<a class="nextPage" href=")" + anchorPair.first + "\">";
+ if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty())
+ m_navigationLinks += protect(anchorPair.second);
+ else
+ m_navigationLinks += protect(linkPair.second);
+ m_navigationLinks += "</a>\n";
+ }
+ if (node->links().contains(Node::StartLink)) {
+ linkPair = node->links()[Node::StartLink];
+ linkNode = m_qdb->findNodeForTarget(linkPair.first, node);
+ if (linkNode == nullptr && !noLinkErrors())
+ node->doc().location().warning(
+ QStringLiteral("Cannot link to '%1'").arg(linkPair.first));
+ if (linkNode == nullptr || linkNode == node)
+ anchorPair = linkPair;
+ else
+ anchorPair = anchorForNode(linkNode);
+ out() << R"( <link rel="start" href=")" << anchorPair.first << "\" />\n";
+ }
+ }
+
+ if (node && !node->links().empty())
+ out() << "<p class=\"naviNextPrevious headerNavi\">\n" << m_navigationLinks << "</p>\n";
+}
+
+void HtmlGenerator::generateTitle(const QString &title, const Text &subtitle,
+ SubTitleSize subTitleSize, const Node *relative,
+ CodeMarker *marker)
+{
+ out() << QString(m_prologue).replace("\\" + COMMAND_VERSION, m_qdb->version());
+ QString attribute;
+ if (relative->genus() & Node::API)
+ attribute = R"( translate="no")";
+
+ if (!title.isEmpty())
+ out() << "<h1 class=\"title\"" << attribute << ">" << protectEnc(title) << "</h1>\n";
+ if (!subtitle.isEmpty()) {
+ out() << "<span";
+ if (subTitleSize == SmallSubTitle)
+ out() << " class=\"small-subtitle\"" << attribute << ">";
+ else
+ out() << " class=\"subtitle\"" << attribute << ">";
+ generateText(subtitle, relative, marker);
+ out() << "</span>\n";
+ }
+}
+
+void HtmlGenerator::generateFooter(const Node *node)
+{
+ if (node && !node->links().empty())
+ out() << "<p class=\"naviNextPrevious footerNavi\">\n" << m_navigationLinks << "</p>\n";
+
+ out() << QString(m_footer).replace("\\" + COMMAND_VERSION, m_qdb->version())
+ << QString(m_address).replace("\\" + COMMAND_VERSION, m_qdb->version());
+
+ out() << "</body>\n";
+ out() << "</html>\n";
+}
+
+/*!
+Lists the required imports and includes in a table.
+The number of rows is known.
+*/
+void HtmlGenerator::generateRequisites(Aggregate *aggregate, CodeMarker *marker)
+{
+ QMap<QString, Text> requisites;
+ Text text;
+
+ const QString headerText = "Header";
+ const QString sinceText = "Since";
+ const QString inheritedBytext = "Inherited By";
+ const QString inheritsText = "Inherits";
+ const QString instantiatedByText = "Instantiated By";
+ 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 };
+
+ addIncludeFileToMap(aggregate, marker, requisites, text, headerText);
+ addSinceToMap(aggregate, requisites, &text, sinceText);
+
+ if (aggregate->isClassNode() || aggregate->isNamespace()) {
+ addCMakeInfoToMap(aggregate, requisites, &text, cmakeText);
+ addQtVariableToMap(aggregate, requisites, &text, qtVariableText);
+ }
+
+ if (aggregate->isClassNode()) {
+ auto *classe = dynamic_cast<ClassNode *>(aggregate);
+ if (classe->qmlElement() != nullptr && !classe->isInternal())
+ addInstantiatedByToMap(requisites, &text, instantiatedByText, classe);
+
+ addInheritsToMap(requisites, &text, inheritsText, classe);
+ addInheritedByToMap(requisites, &text, inheritedBytext, classe);
+ }
+
+ // Add the state description (if any) to the map
+ addStatusToMap(aggregate, requisites, text, statusText);
+
+ if (!requisites.isEmpty()) {
+ // generate the table
+ generateTheTable(requisiteorder, requisites, headerText, aggregate, marker);
+ }
+}
+
+/*!
+ * \internal
+ */
+void HtmlGenerator::generateTheTable(const QStringList &requisiteOrder,
+ const QMap<QString, Text> &requisites,
+ const QString &headerText, const Aggregate *aggregate,
+ CodeMarker *marker)
+{
+ out() << "<div class=\"table\"><table class=\"alignedsummary\" translate=\"no\">\n";
+
+ for (auto it = requisiteOrder.constBegin(); it != requisiteOrder.constEnd(); ++it) {
+
+ if (requisites.contains(*it)) {
+ out() << "<tr>"
+ << "<td class=\"memItemLeft rightAlign topAlign\"> " << *it
+ << ":"
+ "</td><td class=\"memItemRight bottomAlign\"> ";
+
+ if (*it == headerText)
+ out() << requisites.value(*it).toString();
+ else
+ generateText(requisites.value(*it), aggregate, marker);
+ out() << "</td></tr>\n";
+ }
+ }
+ out() << "</table></div>\n";
+}
+
+/*!
+ * \internal
+ * Adds inherited by information to the map.
+ */
+void HtmlGenerator::addInheritedByToMap(QMap<QString, Text> &requisites, Text *text,
+ const QString &inheritedBytext, ClassNode *classe)
+{
+ if (!classe->derivedClasses().isEmpty()) {
+ text->clear();
+ *text << Atom::ParaLeft;
+ int count = appendSortedNames(*text, classe, classe->derivedClasses());
+ *text << Atom::ParaRight;
+ if (count > 0)
+ requisites.insert(inheritedBytext, *text);
+ }
+}
+
+/*!
+ * \internal
+ * Adds base classes to the map.
+ */
+void HtmlGenerator::addInheritsToMap(QMap<QString, Text> &requisites, Text *text,
+ const QString &inheritsText, ClassNode *classe)
+{
+ if (!classe->baseClasses().isEmpty()) {
+ int index = 0;
+ text->clear();
+ const auto baseClasses = classe->baseClasses();
+ for (const auto &cls : baseClasses) {
+ if (cls.m_node) {
+ appendFullName(*text, cls.m_node, classe);
+
+ if (cls.m_access == Access::Protected) {
+ *text << " (protected)";
+ } else if (cls.m_access == Access::Private) {
+ *text << " (private)";
+ }
+ *text << Utilities::comma(index++, classe->baseClasses().size());
+ }
+ }
+ *text << Atom::ParaRight;
+ if (index > 0)
+ requisites.insert(inheritsText, *text);
+ }
+}
+
+/*!
+ * \internal
+ * Add the instantiated by information to the map.
+ */
+void HtmlGenerator::addInstantiatedByToMap(QMap<QString, Text> &requisites, Text *text,
+ const QString &instantiatedByText,
+ ClassNode *classe) const
+{
+ if (text != nullptr) {
+ text->clear();
+ *text << Atom(Atom::LinkNode, CodeMarker::stringForNode(classe->qmlElement()))
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
+ << Atom(Atom::String, classe->qmlElement()->name())
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
+ requisites.insert(instantiatedByText, *text);
+ }
+}
+
+/*!
+ * \internal
+ * Adds the CMake package and link library information to the map.
+ */
+void HtmlGenerator::addCMakeInfoToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites,
+ Text *text, const QString &CMakeInfo) const
+{
+ if (!aggregate->physicalModuleName().isEmpty() && text != nullptr) {
+ const CollectionNode *cn =
+ m_qdb->getCollectionNode(aggregate->physicalModuleName(), Node::Module);
+ if (!cn || cn->qtCMakeComponent().isEmpty())
+ return;
+
+ text->clear();
+ const QString qtComponent = "Qt" + QString::number(QT_VERSION_MAJOR);
+ const QString findPackageText = "find_package(" + qtComponent + " REQUIRED COMPONENTS "
+ + cn->qtCMakeComponent() + ")";
+ const QString targetText = cn->qtCMakeTargetItem().isEmpty() ? cn->qtCMakeComponent() : cn->qtCMakeTargetItem();
+ const QString targetLinkLibrariesText = "target_link_libraries(mytarget PRIVATE "
+ + qtComponent + "::" + targetText + ")";
+ const Atom lineBreak = Atom(Atom::RawString, " <br/>\n");
+ *text << findPackageText << lineBreak << targetLinkLibrariesText;
+ requisites.insert(CMakeInfo, *text);
+ }
+}
+
+/*!
+ * \internal
+ * Adds the Qt variable (from the \\qtvariable command) to the map.
+ */
+void HtmlGenerator::addQtVariableToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites,
+ Text *text, const QString &qtVariableText) const
+{
+ if (!aggregate->physicalModuleName().isEmpty()) {
+ const CollectionNode *cn =
+ m_qdb->getCollectionNode(aggregate->physicalModuleName(), Node::Module);
+
+ if (cn && !cn->qtVariable().isEmpty()) {
+ text->clear();
+ *text << "QT += " + cn->qtVariable();
+ requisites.insert(qtVariableText, *text);
+ }
+ }
+}
+
+/*!
+ * \internal
+ * Adds the since information (from the \\since command) to the map.
+ *
+ */
+void HtmlGenerator::addSinceToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites,
+ Text *text, const QString &sinceText) const
+{
+ if (!aggregate->since().isEmpty() && text != nullptr) {
+ text->clear();
+ *text << formatSince(aggregate) << Atom::ParaRight;
+ requisites.insert(sinceText, *text);
+ }
+}
+
+/*!
+ * \internal
+ * Adds the status description for \a aggregate, together with a <span> element, to the \a
+ * requisites map.
+ *
+ * The span element can be used for adding CSS styling/icon associated with a specific status.
+ * The span class name is constructed by converting the description (sans \\deprecated
+ * version info) to lowercase and replacing all non-alphanum characters with hyphens. In
+ * addition, the span has a class \c status. For example,
+ * 'Tech Preview' -> class="status tech-preview"
+*/
+void HtmlGenerator::addStatusToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites,
+ Text &text, const QString &statusText) const
+{
+ auto status{formatStatus(aggregate, m_qdb)};
+ if (!status)
+ return;
+
+ QString spanClass;
+ if (aggregate->status() == Node::Deprecated)
+ spanClass = u"deprecated"_s; // Disregard any version info
+ else
+ spanClass = Utilities::asAsciiPrintable(status.value());
+
+ text.clear();
+ text << Atom(Atom::String, status.value())
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_SPAN +
+ "class=\"status %1\""_L1.arg(spanClass))
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_SPAN);
+ requisites.insert(statusText, text);
+}
+
+/*!
+ * \internal
+ * Adds the includes (from the \\includefile command) to the map.
+ */
+void HtmlGenerator::addIncludeFileToMap(const Aggregate *aggregate, CodeMarker *marker,
+ QMap<QString, Text> &requisites, Text& text,
+ const QString &headerText)
+{
+ if (aggregate->includeFile()) {
+ text.clear();
+ text << highlightedCode(
+ indent(m_codeIndent, marker->markedUpInclude(*aggregate->includeFile())),
+ aggregate
+ );
+
+ requisites.insert(headerText, text);
+ }
+}
+
+/*!
+Lists the required imports and includes in a table.
+The number of rows is known.
+*/
+void HtmlGenerator::generateQmlRequisites(QmlTypeNode *qcn, CodeMarker *marker)
+{
+ if (qcn == nullptr)
+ return;
+ QMap<QString, Text> requisites;
+ Text text;
+
+ const QString importText = "Import Statement:";
+ const QString sinceText = "Since:";
+ const QString inheritedBytext = "Inherited By:";
+ const QString inheritsText = "Inherits:";
+ const QString instantiatesText = "Instantiates:";
+ const QString statusText = "Status:";
+
+ // add the module name and version to the map
+ QString logicalModuleVersion;
+ const CollectionNode *collection = qcn->logicalModule();
+
+ // skip import statement of \internal collections
+ if (!qcn->logicalModuleName().isEmpty() && (!collection || !collection->isInternal() || m_showInternal)) {
+ QStringList parts = QStringList() << "import" << qcn->logicalModuleName() << qcn->logicalModuleVersion();
+ text.clear();
+ text << parts.join(' ').trimmed();
+ requisites.insert(importText, text);
+ } else if (!qcn->isQmlBasicType() && qcn->logicalModuleName().isEmpty()) {
+ qcn->doc().location().warning(QStringLiteral("Could not resolve QML import statement for type '%1'").arg(qcn->name()),
+ QStringLiteral("Maybe you forgot to use the '\\%1' command?").arg(COMMAND_INQMLMODULE));
+ }
+
+ // add the since and project into the map
+ if (!qcn->since().isEmpty()) {
+ text.clear();
+ text << formatSince(qcn) << Atom::ParaRight;
+ requisites.insert(sinceText, text);
+ }
+
+ // add the instantiates to the map
+ ClassNode *cn = qcn->classNode();
+ if (cn && !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);
+ }
+
+ // add the inherits to the map
+ QmlTypeNode *base = qcn->qmlBaseNode();
+ while (base && base->isInternal()) {
+ base = base->qmlBaseNode();
+ }
+ if (base) {
+ text.clear();
+ text << Atom::ParaLeft << Atom(Atom::LinkNode, CodeMarker::stringForNode(base))
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << Atom(Atom::String, base->name())
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom::ParaRight;
+ requisites.insert(inheritsText, text);
+ }
+
+ // add the inherited-by to the map
+ NodeList subs;
+ QmlTypeNode::subclasses(qcn, subs);
+ if (!subs.isEmpty()) {
+ text.clear();
+ text << Atom::ParaLeft;
+ int count = appendSortedQmlNames(text, qcn, subs);
+ text << Atom::ParaRight;
+ if (count > 0)
+ requisites.insert(inheritedBytext, text);
+ }
+
+ // Add the state description (if any) to the map
+ addStatusToMap(qcn, requisites, text, statusText);
+
+ // The order of the requisites matter
+ const QStringList requisiteorder { importText, sinceText, instantiatesText, inheritsText,
+ inheritedBytext, statusText };
+
+ if (!requisites.isEmpty()) {
+ // generate the table
+ out() << "<div class=\"table\"><table class=\"alignedsummary\" translate=\"no\">\n";
+ for (const auto &requisite : requisiteorder) {
+
+ if (requisites.contains(requisite)) {
+ out() << "<tr>"
+ << "<td class=\"memItemLeft rightAlign topAlign\"> " << requisite
+ << "</td><td class=\"memItemRight bottomAlign\"> ";
+
+ if (requisite == importText)
+ out() << requisites.value(requisite).toString();
+ else
+ generateText(requisites.value(requisite), qcn, marker);
+ out() << "</td></tr>";
+ }
+ }
+ out() << "</table></div>";
+ }
+}
+
+void HtmlGenerator::generateBrief(const Node *node, CodeMarker *marker, const Node *relative,
+ bool addLink)
+{
+ Text brief = node->doc().briefText();
+
+ if (!brief.isEmpty()) {
+ if (!brief.lastAtom()->string().endsWith('.')) {
+ brief << Atom(Atom::String, ".");
+ node->doc().location().warning(
+ QStringLiteral("'\\brief' statement does not end with a full stop."));
+ }
+ generateExtractionMark(node, BriefMark);
+ out() << "<p>";
+ generateText(brief, node, marker);
+
+ if (addLink) {
+ if (!relative || node == relative)
+ out() << " <a href=\"#";
+ else
+ out() << " <a href=\"" << linkForNode(node, relative) << '#';
+ out() << registerRef("details") << "\">More...</a>";
+ }
+
+ out() << "</p>\n";
+ generateExtractionMark(node, EndMark);
+ }
+}
+
+/*!
+ Revised for the new doc format.
+ Generates a table of contents beginning at \a node.
+ */
+void HtmlGenerator::generateTableOfContents(const Node *node, CodeMarker *marker,
+ QList<Section> *sections)
+{
+ QList<Atom *> toc;
+ if (node->doc().hasTableOfContents())
+ toc = node->doc().tableOfContents();
+ if (tocDepth == 0 || (toc.isEmpty() && !sections && !node->isModule())) {
+ generateSidebar();
+ return;
+ }
+
+ int sectionNumber = 1;
+ int detailsBase = 0;
+
+ // disable nested links in table of contents
+ m_inContents = true;
+
+ out() << "<div class=\"sidebar\">\n";
+ out() << "<div class=\"toc\">\n";
+ out() << "<h3 id=\"toc\">Contents</h3>\n";
+
+ if (node->isModule()) {
+ openUnorderedList();
+ if (!static_cast<const CollectionNode *>(node)->noAutoList()) {
+ if (node->hasNamespaces()) {
+ out() << "<li class=\"level" << sectionNumber << "\"><a href=\"#"
+ << registerRef("namespaces") << "\">Namespaces</a></li>\n";
+ }
+ if (node->hasClasses()) {
+ out() << "<li class=\"level" << sectionNumber << "\"><a href=\"#"
+ << registerRef("classes") << "\">Classes</a></li>\n";
+ }
+ }
+ out() << "<li class=\"level" << sectionNumber << "\"><a href=\"#" << registerRef("details")
+ << "\">Detailed Description</a></li>\n";
+ for (const auto &entry : std::as_const(toc)) {
+ if (entry->string().toInt() == 1) {
+ detailsBase = 1;
+ break;
+ }
+ }
+ } else if (sections && (node->isClassNode() || node->isNamespace() || node->isQmlType())) {
+ for (const auto &section : std::as_const(*sections)) {
+ if (!section.members().isEmpty()) {
+ openUnorderedList();
+ out() << "<li class=\"level" << sectionNumber << "\"><a href=\"#"
+ << registerRef(section.plural()) << "\">" << section.title() << "</a></li>\n";
+ }
+ if (!section.reimplementedMembers().isEmpty()) {
+ openUnorderedList();
+ QString ref = QString("Reimplemented ") + section.plural();
+ out() << "<li class=\"level" << sectionNumber << "\"><a href=\"#"
+ << registerRef(ref.toLower()) << "\">"
+ << QString("Reimplemented ") + section.title() << "</a></li>\n";
+ }
+ }
+ if (!node->isNamespace() || node->hasDoc()) {
+ openUnorderedList();
+ out() << "<li class=\"level" << sectionNumber << "\"><a href=\"#"
+ << registerRef("details") << "\">Detailed Description</a></li>\n";
+ }
+ for (const auto &entry : toc) {
+ if (entry->string().toInt() == 1) {
+ detailsBase = 1;
+ break;
+ }
+ }
+ }
+
+ for (const auto &atom : toc) {
+ sectionNumber = atom->string().toInt() + detailsBase;
+ // restrict the ToC depth to the one set by the HTML.tocdepth variable or
+ // print all levels if tocDepth is not set.
+ if (sectionNumber <= tocDepth || tocDepth < 0) {
+ openUnorderedList();
+ int numAtoms;
+ Text headingText = Text::sectionHeading(atom);
+ out() << "<li class=\"level" << sectionNumber << "\">";
+ out() << "<a href=\"" << '#' << Tree::refForAtom(atom) << "\">";
+ generateAtomList(headingText.firstAtom(), node, marker, true, numAtoms);
+ out() << "</a></li>\n";
+ }
+ }
+ closeUnorderedList();
+ out() << "</div>\n";
+ out() << R"(<div class="sidebar-content" id="sidebar-content"></div>)";
+ out() << "</div>\n";
+ m_inContents = false;
+ m_inLink = false;
+}
+
+/*!
+ Outputs a placeholder div where the style can add customized sidebar content.
+ */
+void HtmlGenerator::generateSidebar()
+{
+ out() << "<div class=\"sidebar\">";
+ out() << R"(<div class="sidebar-content" id="sidebar-content"></div>)";
+ out() << "</div>\n";
+}
+
+QString HtmlGenerator::generateAllMembersFile(const Section &section, CodeMarker *marker)
+{
+ if (section.isEmpty())
+ return QString();
+
+ const Aggregate *aggregate = section.aggregate();
+ QString fileName = fileBase(aggregate) + "-members." + fileExtension();
+ beginSubPage(aggregate, fileName);
+ QString title = "List of All Members for " + aggregate->name();
+ generateHeader(title, aggregate, marker);
+ generateSidebar();
+ generateTitle(title, Text(), SmallSubTitle, aggregate, marker);
+ out() << "<p>This is the complete list of members for ";
+ generateFullName(aggregate, nullptr);
+ out() << ", including inherited members.</p>\n";
+
+ generateSectionList(section, aggregate, marker);
+
+ generateFooter();
+ endSubPage();
+ return fileName;
+}
+
+/*!
+ This function creates an html page on which are listed all
+ the members of the QML class used to generte the \a sections,
+ including the inherited members. The \a marker is used for
+ formatting stuff.
+ */
+QString HtmlGenerator::generateAllQmlMembersFile(const Sections &sections, CodeMarker *marker)
+{
+
+ if (sections.allMembersSection().isEmpty())
+ return QString();
+
+ const Aggregate *aggregate = sections.aggregate();
+ QString fileName = fileBase(aggregate) + "-members." + fileExtension();
+ beginSubPage(aggregate, fileName);
+ QString title = "List of All Members for " + aggregate->name();
+ generateHeader(title, aggregate, marker);
+ generateSidebar();
+ generateTitle(title, Text(), SmallSubTitle, aggregate, marker);
+ out() << "<p>This is the complete list of members for ";
+ generateFullName(aggregate, nullptr);
+ out() << ", including inherited members.</p>\n";
+
+ ClassNodesList &cknl = sections.allMembersSection().classNodesList();
+ for (int i = 0; i < cknl.size(); i++) {
+ ClassNodes ckn = cknl[i];
+ const QmlTypeNode *qcn = ckn.first;
+ NodeVector &nodes = ckn.second;
+ if (nodes.isEmpty())
+ continue;
+ if (i != 0) {
+ out() << "<p>The following members are inherited from ";
+ generateFullName(qcn, nullptr);
+ out() << ".</p>\n";
+ }
+ openUnorderedList();
+ for (int j = 0; j < nodes.size(); j++) {
+ Node *node = nodes[j];
+ if (node->access() == Access::Private || node->isInternal())
+ continue;
+ if (node->isSharingComment() && node->sharedCommentNode()->isPropertyGroup())
+ continue;
+
+ std::function<void(Node *)> generate = [&](Node *n) {
+ out() << "<li class=\"fn\" translate=\"no\">";
+ generateQmlItem(n, aggregate, marker, true);
+ if (n->isDefault())
+ out() << " [default]";
+ else if (n->isAttached())
+ out() << " [attached]";
+ // Indent property group members
+ if (n->isPropertyGroup()) {
+ out() << "<ul>\n";
+ const QList<Node *> &collective =
+ static_cast<SharedCommentNode *>(n)->collective();
+ std::for_each(collective.begin(), collective.end(), generate);
+ out() << "</ul>\n";
+ }
+ out() << "</li>\n";
+ };
+ generate(node);
+ }
+ closeUnorderedList();
+ }
+
+
+ generateFooter();
+ endSubPage();
+ return fileName;
+}
+
+QString HtmlGenerator::generateObsoleteMembersFile(const Sections &sections, CodeMarker *marker)
+{
+ SectionPtrVector summary_spv;
+ SectionPtrVector details_spv;
+ if (!sections.hasObsoleteMembers(&summary_spv, &details_spv))
+ return QString();
+
+ Aggregate *aggregate = sections.aggregate();
+ QString title = "Obsolete Members for " + aggregate->name();
+ QString fileName = fileBase(aggregate) + "-obsolete." + fileExtension();
+
+ beginSubPage(aggregate, fileName);
+ generateHeader(title, aggregate, marker);
+ generateSidebar();
+ generateTitle(title, Text(), SmallSubTitle, aggregate, marker);
+
+ out() << "<p><b>The following members of class "
+ << "<a href=\"" << linkForNode(aggregate, nullptr) << "\" translate=\"no\">"
+ << protectEnc(aggregate->name()) << "</a>"
+ << " are deprecated.</b> "
+ << "They are provided to keep old source code working. "
+ << "We strongly advise against using them in new code.</p>\n";
+
+ for (const auto &section : summary_spv) {
+ out() << "<h2>" << protectEnc(section->title()) << "</h2>\n";
+ generateSectionList(*section, aggregate, marker, true);
+ }
+
+ for (const auto &section : details_spv) {
+ out() << "<h2>" << protectEnc(section->title()) << "</h2>\n";
+
+ const NodeVector &members = section->obsoleteMembers();
+ for (const auto &member : members) {
+ if (member->access() != Access::Private)
+ generateDetailedMember(member, aggregate, marker);
+ }
+ }
+
+ generateFooter();
+ endSubPage();
+ return fileName;
+}
+
+/*!
+ Generates a separate file where deprecated members of the QML
+ type \a qcn are listed. The \a marker is used to generate
+ the section lists, which are then traversed and output here.
+ */
+QString HtmlGenerator::generateObsoleteQmlMembersFile(const Sections &sections, CodeMarker *marker)
+{
+ SectionPtrVector summary_spv;
+ SectionPtrVector details_spv;
+ if (!sections.hasObsoleteMembers(&summary_spv, &details_spv))
+ return QString();
+
+ Aggregate *aggregate = sections.aggregate();
+ QString title = "Obsolete Members for " + aggregate->name();
+ QString fileName = fileBase(aggregate) + "-obsolete." + fileExtension();
+
+ beginSubPage(aggregate, fileName);
+ generateHeader(title, aggregate, marker);
+ generateSidebar();
+ generateTitle(title, Text(), SmallSubTitle, aggregate, marker);
+
+ out() << "<p><b>The following members of QML type "
+ << "<a href=\"" << linkForNode(aggregate, nullptr) << "\">"
+ << protectEnc(aggregate->name()) << "</a>"
+ << " are deprecated.</b> "
+ << "They are provided to keep old source code working. "
+ << "We strongly advise against using them in new code.</p>\n";
+
+ for (const auto &section : summary_spv) {
+ QString ref = registerRef(section->title().toLower());
+ out() << "<h2 id=\"" << ref << "\">" << protectEnc(section->title()) << "</h2>\n";
+ generateQmlSummary(section->obsoleteMembers(), aggregate, marker);
+ }
+
+ for (const auto &section : details_spv) {
+ out() << "<h2>" << protectEnc(section->title()) << "</h2>\n";
+ const NodeVector &members = section->obsoleteMembers();
+ for (const auto &member : members) {
+ generateDetailedQmlMember(member, aggregate, marker);
+ out() << "<br/>\n";
+ }
+ }
+
+ generateFooter();
+ endSubPage();
+ return fileName;
+}
+
+void HtmlGenerator::generateClassHierarchy(const Node *relative, NodeMultiMap &classMap)
+{
+ if (classMap.isEmpty())
+ return;
+
+ NodeMap topLevel;
+ for (const auto &it : classMap) {
+ auto *classe = static_cast<ClassNode *>(it);
+ if (classe->baseClasses().isEmpty())
+ topLevel.insert(classe->name(), classe);
+ }
+
+ QStack<NodeMap> stack;
+ stack.push(topLevel);
+
+ out() << "<ul>\n";
+ while (!stack.isEmpty()) {
+ if (stack.top().isEmpty()) {
+ stack.pop();
+ out() << "</ul>\n";
+ } else {
+ ClassNode *child = static_cast<ClassNode *>(*stack.top().begin());
+ out() << "<li>";
+ generateFullName(child, relative);
+ out() << "</li>\n";
+ stack.top().erase(stack.top().begin());
+
+ NodeMap newTop;
+ const auto derivedClasses = child->derivedClasses();
+ for (const RelatedClass &d : derivedClasses) {
+ if (d.m_node && d.m_node->isInAPI())
+ newTop.insert(d.m_node->name(), d.m_node);
+ }
+ if (!newTop.isEmpty()) {
+ stack.push(newTop);
+ out() << "<ul>\n";
+ }
+ }
+ }
+}
+
+/*!
+ Outputs an annotated list of the nodes in \a unsortedNodes.
+ A two-column table is output.
+ */
+void HtmlGenerator::generateAnnotatedList(const Node *relative, CodeMarker *marker,
+ const NodeList &unsortedNodes)
+{
+ if (unsortedNodes.isEmpty() || relative == nullptr)
+ return;
+
+ NodeMultiMap nmm;
+ bool allInternal = true;
+ for (auto *node : unsortedNodes) {
+ if (!node->isInternal() && !node->isDeprecated()) {
+ allInternal = false;
+ nmm.insert(node->fullName(relative), node);
+ }
+ }
+ if (allInternal)
+ return;
+ out() << "<div class=\"table\"><table class=\"annotated\">\n";
+ int row = 0;
+ NodeList nodes = nmm.values();
+ std::sort(nodes.begin(), nodes.end(), Node::nodeNameLessThan);
+
+ for (const auto *node : std::as_const(nodes)) {
+ if (++row % 2 == 1)
+ out() << "<tr class=\"odd topAlign\">";
+ else
+ out() << "<tr class=\"even topAlign\">";
+ out() << "<td class=\"tblName\" translate=\"no\"><p>";
+ generateFullName(node, relative);
+ out() << "</p></td>";
+
+ if (!node->isTextPageNode()) {
+ Text brief = node->doc().trimmedBriefText(node->name());
+ if (!brief.isEmpty()) {
+ out() << "<td class=\"tblDescr\"><p>";
+ generateText(brief, node, marker);
+ out() << "</p></td>";
+ } else if (!node->reconstitutedBrief().isEmpty()) {
+ out() << "<td class=\"tblDescr\"><p>";
+ out() << node->reconstitutedBrief();
+ out() << "</p></td>";
+ }
+ } else {
+ out() << "<td class=\"tblDescr\"><p>";
+ if (!node->reconstitutedBrief().isEmpty()) {
+ out() << node->reconstitutedBrief();
+ } else
+ out() << protectEnc(node->doc().briefText().toString());
+ out() << "</p></td>";
+ }
+ out() << "</tr>\n";
+ }
+ out() << "</table></div>\n";
+}
+
+/*!
+ Outputs a series of annotated lists from the nodes in \a nmm,
+ divided into sections based by the key names in the multimap.
+ */
+void HtmlGenerator::generateAnnotatedLists(const Node *relative, CodeMarker *marker,
+ const NodeMultiMap &nmm)
+{
+ const auto &uniqueKeys = nmm.uniqueKeys();
+ for (const QString &name : uniqueKeys) {
+ if (!name.isEmpty()) {
+ out() << "<h2 id=\"" << registerRef(name.toLower()) << "\">" << protectEnc(name)
+ << "</h2>\n";
+ }
+ generateAnnotatedList(relative, marker, nmm.values(name));
+ }
+}
+
+/*!
+ This function finds the common prefix of the names of all
+ the classes in the class map \a nmm and then generates a
+ compact list of the class names alphabetized on the part
+ of the name not including the common prefix. You can tell
+ the function to use \a commonPrefix as the common prefix,
+ but normally you let it figure it out itself by looking at
+ the name of the first and last classes in the class map
+ \a nmm.
+ */
+void HtmlGenerator::generateCompactList(ListType listType, const Node *relative,
+ const NodeMultiMap &nmm, bool includeAlphabet,
+ const QString &commonPrefix)
+{
+ if (nmm.isEmpty())
+ return;
+
+ const int NumParagraphs = 37; // '0' to '9', 'A' to 'Z', '_'
+ qsizetype commonPrefixLen = commonPrefix.size();
+
+ /*
+ Divide the data into 37 paragraphs: 0, ..., 9, A, ..., Z,
+ underscore (_). QAccel will fall in paragraph 10 (A) and
+ QXtWidget in paragraph 33 (X). This is the only place where we
+ assume that NumParagraphs is 37. Each paragraph is a NodeMultiMap.
+ */
+ NodeMultiMap paragraph[NumParagraphs + 1];
+ QString paragraphName[NumParagraphs + 1];
+ QSet<char> usedParagraphNames;
+
+ for (auto c = nmm.constBegin(); c != nmm.constEnd(); ++c) {
+ QStringList pieces = c.key().split("::");
+ int idx = commonPrefixLen;
+ if (idx > 0 && !pieces.last().startsWith(commonPrefix, Qt::CaseInsensitive))
+ idx = 0;
+ QString last = pieces.last().toLower();
+ QString key = last.mid(idx);
+
+ int paragraphNr = NumParagraphs - 1;
+
+ if (key[0].digitValue() != -1) {
+ paragraphNr = key[0].digitValue();
+ } else if (key[0] >= QLatin1Char('a') && key[0] <= QLatin1Char('z')) {
+ paragraphNr = 10 + key[0].unicode() - 'a';
+ }
+
+ paragraphName[paragraphNr] = key[0].toUpper();
+ usedParagraphNames.insert(key[0].toLower().cell());
+ paragraph[paragraphNr].insert(last, c.value());
+ }
+
+ /*
+ Each paragraph j has a size: paragraph[j].count(). In the
+ discussion, we will assume paragraphs 0 to 5 will have sizes
+ 3, 1, 4, 1, 5, 9.
+
+ We now want to compute the paragraph offset. Paragraphs 0 to 6
+ start at offsets 0, 3, 4, 8, 9, 14, 23.
+ */
+ qsizetype paragraphOffset[NumParagraphs + 1]; // 37 + 1
+ paragraphOffset[0] = 0;
+ for (int i = 0; i < NumParagraphs; i++) // i = 0..36
+ paragraphOffset[i + 1] = paragraphOffset[i] + paragraph[i].size();
+
+ /*
+ Output the alphabet as a row of links.
+ */
+ if (includeAlphabet) {
+ out() << "<p class=\"centerAlign functionIndex\" translate=\"no\"><b>";
+ for (int i = 0; i < 26; i++) {
+ QChar ch('a' + i);
+ if (usedParagraphNames.contains(char('a' + i)))
+ out() << QString("<a href=\"#%1\">%2</a>&nbsp;").arg(ch).arg(ch.toUpper());
+ }
+ out() << "</b></p>\n";
+ }
+
+ /*
+ Output a <div> element to contain all the <dl> elements.
+ */
+ out() << "<div class=\"flowListDiv\" translate=\"no\">\n";
+ m_numTableRows = 0;
+
+ int curParNr = 0;
+ int curParOffset = 0;
+ QString previousName;
+ bool multipleOccurrences = false;
+
+ for (int i = 0; i < nmm.size(); i++) {
+ while ((curParNr < NumParagraphs) && (curParOffset == paragraph[curParNr].size())) {
+ ++curParNr;
+ curParOffset = 0;
+ }
+
+ /*
+ Starting a new paragraph means starting a new <dl>.
+ */
+ if (curParOffset == 0) {
+ if (i > 0)
+ out() << "</dl>\n";
+ if (++m_numTableRows % 2 == 1)
+ out() << "<dl class=\"flowList odd\">";
+ else
+ out() << "<dl class=\"flowList even\">";
+ out() << "<dt class=\"alphaChar\"";
+ if (includeAlphabet)
+ out() << QString(" id=\"%1\"").arg(paragraphName[curParNr][0].toLower());
+ out() << "><b>" << paragraphName[curParNr] << "</b></dt>\n";
+ }
+
+ /*
+ Output a <dd> for the current offset in the current paragraph.
+ */
+ out() << "<dd>";
+ if ((curParNr < NumParagraphs) && !paragraphName[curParNr].isEmpty()) {
+ NodeMultiMap::Iterator it;
+ NodeMultiMap::Iterator next;
+ it = paragraph[curParNr].begin();
+ for (int j = 0; j < curParOffset; j++)
+ ++it;
+
+ if (listType == Generic) {
+ /*
+ Previously, we used generateFullName() for this, but we
+ require some special formatting.
+ */
+ out() << "<a href=\"" << linkForNode(it.value(), relative) << "\">";
+ } else if (listType == Obsolete) {
+ QString fileName = fileBase(it.value()) + "-obsolete." + fileExtension();
+ QString link;
+ if (useOutputSubdirs())
+ link = "../%1/"_L1.arg(it.value()->tree()->physicalModuleName());
+ link += fileName;
+ 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("::");
+ out() << protectEnc(pieces.last());
+ out() << "</a>";
+ if (pieces.size() > 1) {
+ out() << " (";
+ generateFullName(it.value()->parent(), relative);
+ out() << ')';
+ }
+ }
+ out() << "</dd>\n";
+ curParOffset++;
+ }
+ if (nmm.size() > 0)
+ out() << "</dl>\n";
+
+ out() << "</div>\n";
+}
+
+void HtmlGenerator::generateFunctionIndex(const Node *relative)
+{
+ out() << "<p class=\"centerAlign functionIndex\" translate=\"no\"><b>";
+ for (int i = 0; i < 26; i++) {
+ QChar ch('a' + i);
+ out() << QString("<a href=\"#%1\">%2</a>&nbsp;").arg(ch).arg(ch.toUpper());
+ }
+ out() << "</b></p>\n";
+
+ char nextLetter = 'a';
+
+ out() << "<ul translate=\"no\">\n";
+ NodeMapMap &funcIndex = m_qdb->getFunctionIndex();
+ for (auto fnMap = funcIndex.constBegin(); fnMap != funcIndex.constEnd(); ++fnMap) {
+ const QString &key = fnMap.key();
+ const QChar firstLetter = key.isEmpty() ? QChar('A') : key.front();
+ Q_ASSERT_X(firstLetter.unicode() < 256, "generateFunctionIndex",
+ "Only valid C++ identifiers were expected");
+ const char currentLetter = firstLetter.isLower() ? firstLetter.unicode() : nextLetter - 1;
+
+ if (currentLetter < nextLetter) {
+ out() << "<li>";
+ } else {
+ // TODO: This is not covered by our tests
+ while (nextLetter < currentLetter)
+ out() << QStringLiteral("<li id=\"%1\"></li>").arg(nextLetter++);
+ Q_ASSERT(nextLetter == currentLetter);
+ out() << QStringLiteral("<li id=\"%1\">").arg(nextLetter++);
+ }
+ out() << protectEnc(key) << ':';
+
+ for (auto it = (*fnMap).constBegin(); it != (*fnMap).constEnd(); ++it) {
+ out() << ' ';
+ generateFullName((*it)->parent(), relative, *it);
+ }
+ out() << "</li>\n";
+ }
+ while (nextLetter <= 'z')
+ out() << QStringLiteral("<li id=\"%1\"></li>").arg(nextLetter++);
+ out() << "</ul>\n";
+}
+
+void HtmlGenerator::generateLegaleseList(const Node *relative, CodeMarker *marker)
+{
+ TextToNodeMap &legaleseTexts = m_qdb->getLegaleseTexts();
+ for (auto it = legaleseTexts.cbegin(), end = legaleseTexts.cend(); it != end; ++it) {
+ Text text = it.key();
+ generateText(text, relative, marker);
+ out() << "<ul>\n";
+ do {
+ out() << "<li>";
+ generateFullName(it.value(), relative);
+ out() << "</li>\n";
+ ++it;
+ } while (it != legaleseTexts.constEnd() && it.key() == text);
+ out() << "</ul>\n";
+ }
+}
+
+void HtmlGenerator::generateQmlItem(const Node *node, const Node *relative, CodeMarker *marker,
+ bool summary)
+{
+ QString marked = marker->markedUpQmlItem(node, summary);
+ marked.replace("@param>", "i>");
+
+ marked.replace("<@extra>", "<code class=\"%1 extra\" translate=\"no\">"_L1
+ .arg(summary ? "summary"_L1 : "details"_L1));
+ marked.replace("</@extra>", "</code>");
+
+
+ if (summary) {
+ marked.remove("<@name>");
+ marked.remove("</@name>");
+ marked.remove("<@type>");
+ marked.remove("</@type>");
+ }
+ out() << highlightedCode(marked, relative, false, Node::QML);
+}
+
+/*!
+ 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.
+ */
+bool HtmlGenerator::generateGroupList(CollectionNode *cn)
+{
+ m_qdb->mergeCollections(cn);
+ if (cn->members().isEmpty())
+ return false;
+
+ NodeList members{cn->members()};
+ std::sort(members.begin(), members.end(), Node::nodeNameLessThan);
+ out() << "<ul>\n";
+ for (const auto *node : std::as_const(members)) {
+ out() << "<li translate=\"no\">";
+ generateFullName(node, nullptr);
+ out() << "</li>\n";
+ }
+ out() << "</ul>\n";
+ return true;
+}
+
+void HtmlGenerator::generateList(const Node *relative, CodeMarker *marker, const QString &selector)
+{
+ CNMap cnm;
+ Node::NodeType type = Node::NoType;
+ if (selector == QLatin1String("overviews"))
+ type = Node::Group;
+ else if (selector == QLatin1String("cpp-modules"))
+ type = Node::Module;
+ else if (selector == QLatin1String("qml-modules"))
+ type = Node::QmlModule;
+ if (type != Node::NoType) {
+ NodeList nodeList;
+ m_qdb->mergeCollections(type, cnm, relative);
+ const auto collectionList = cnm.values();
+ nodeList.reserve(collectionList.size());
+ for (auto *collectionNode : collectionList)
+ nodeList.append(collectionNode);
+ generateAnnotatedList(relative, marker, nodeList);
+ } else {
+ /*
+ \generatelist {selector} is only allowed in a
+ comment where the topic is \group, \module, or
+ \qmlmodule.
+ */
+ if (relative && !relative->isCollectionNode()) {
+ relative->doc().location().warning(
+ QStringLiteral("\\generatelist {%1} is only allowed in \\group, "
+ "\\module and \\qmlmodule comments.")
+ .arg(selector));
+ return;
+ }
+ auto *node = const_cast<Node *>(relative);
+ auto *collectionNode = static_cast<CollectionNode *>(node);
+ m_qdb->mergeCollections(collectionNode);
+ generateAnnotatedList(collectionNode, marker, collectionNode->members());
+ }
+}
+
+void HtmlGenerator::generateSection(const NodeVector &nv, const Node *relative, CodeMarker *marker)
+{
+ bool alignNames = true;
+ if (!nv.isEmpty()) {
+ bool twoColumn = false;
+ if (nv.first()->isProperty()) {
+ twoColumn = (nv.size() >= 5);
+ alignNames = false;
+ }
+ if (alignNames) {
+ out() << "<div class=\"table\"><table class=\"alignedsummary\" translate=\"no\">\n";
+ } else {
+ if (twoColumn)
+ out() << "<div class=\"table\"><table class=\"propsummary\" translate=\"no\">\n"
+ << "<tr><td class=\"topAlign\">";
+ out() << "<ul>\n";
+ }
+
+ int i = 0;
+ for (const auto &member : nv) {
+ if (member->access() == Access::Private)
+ continue;
+
+ if (alignNames) {
+ out() << "<tr><td class=\"memItemLeft rightAlign topAlign\"> ";
+ } else {
+ if (twoColumn && i == (nv.size() + 1) / 2)
+ out() << "</ul></td><td class=\"topAlign\"><ul>\n";
+ out() << "<li class=\"fn\" translate=\"no\">";
+ }
+
+ generateSynopsis(member, relative, marker, Section::Summary, alignNames);
+ if (alignNames)
+ out() << "</td></tr>\n";
+ else
+ out() << "</li>\n";
+ i++;
+ }
+ if (alignNames)
+ out() << "</table></div>\n";
+ else {
+ out() << "</ul>\n";
+ if (twoColumn)
+ out() << "</td></tr>\n</table></div>\n";
+ }
+ }
+}
+
+void HtmlGenerator::generateSectionList(const Section &section, const Node *relative,
+ CodeMarker *marker, bool useObsoleteMembers)
+{
+ bool alignNames = true;
+ const NodeVector &members =
+ (useObsoleteMembers ? section.obsoleteMembers() : section.members());
+ if (!members.isEmpty()) {
+ bool hasPrivateSignals = false;
+ bool isInvokable = false;
+ bool twoColumn = false;
+ if (section.style() == Section::AllMembers) {
+ alignNames = false;
+ twoColumn = (members.size() >= 16);
+ } else if (members.first()->isProperty()) {
+ twoColumn = (members.size() >= 5);
+ alignNames = false;
+ }
+ if (alignNames) {
+ out() << "<div class=\"table\"><table class=\"alignedsummary\" translate=\"no\">\n";
+ } else {
+ if (twoColumn)
+ out() << "<div class=\"table\"><table class=\"propsummary\" translate=\"no\">\n"
+ << "<tr><td class=\"topAlign\">";
+ out() << "<ul>\n";
+ }
+
+ int i = 0;
+ for (const auto &member : members) {
+ if (member->access() == Access::Private)
+ continue;
+
+ if (alignNames) {
+ out() << "<tr><td class=\"memItemLeft topAlign rightAlign\"> ";
+ } else {
+ if (twoColumn && i == (members.size() + 1) / 2)
+ out() << "</ul></td><td class=\"topAlign\"><ul>\n";
+ out() << "<li class=\"fn\" translate=\"no\">";
+ }
+
+ generateSynopsis(member, relative, marker, section.style(), alignNames);
+ if (member->isFunction()) {
+ const auto *fn = static_cast<const FunctionNode *>(member);
+ if (fn->isPrivateSignal()) {
+ hasPrivateSignals = true;
+ if (alignNames)
+ out() << "</td><td class=\"memItemRight bottomAlign\">[see note below]";
+ } else if (fn->isInvokable()) {
+ isInvokable = true;
+ if (alignNames)
+ out() << "</td><td class=\"memItemRight bottomAlign\">[see note below]";
+ }
+ }
+ if (alignNames)
+ out() << "</td></tr>\n";
+ else
+ out() << "</li>\n";
+ i++;
+ }
+ if (alignNames)
+ out() << "</table></div>\n";
+ else {
+ out() << "</ul>\n";
+ if (twoColumn)
+ out() << "</td></tr>\n</table></div>\n";
+ }
+ if (alignNames) {
+ if (hasPrivateSignals)
+ generateAddendum(relative, Generator::PrivateSignal, marker);
+ if (isInvokable)
+ generateAddendum(relative, Generator::Invokable, marker);
+ }
+ }
+
+ if (!useObsoleteMembers && section.style() == Section::Summary
+ && !section.inheritedMembers().isEmpty()) {
+ out() << "<ul>\n";
+ generateSectionInheritedList(section, relative);
+ out() << "</ul>\n";
+ }
+}
+
+void HtmlGenerator::generateSectionInheritedList(const Section &section, const Node *relative)
+{
+ const QList<std::pair<Aggregate *, int>> &inheritedMembers = section.inheritedMembers();
+ for (const auto &member : inheritedMembers) {
+ out() << "<li class=\"fn\" translate=\"no\">";
+ out() << member.second << ' ';
+ if (member.second == 1) {
+ out() << section.singular();
+ } else {
+ out() << section.plural();
+ }
+ out() << " inherited from <a href=\"" << fileName(member.first) << '#'
+ << Generator::cleanRef(section.title().toLower()) << "\">"
+ << protectEnc(member.first->plainFullName(relative)) << "</a></li>\n";
+ }
+}
+
+void HtmlGenerator::generateSynopsis(const Node *node, const Node *relative, CodeMarker *marker,
+ Section::Style style, bool alignNames)
+{
+ QString marked = marker->markedUpSynopsis(node, relative, style);
+ marked.replace("@param>", "i>");
+
+ if (style == Section::Summary) {
+ marked.remove("<@name>");
+ marked.remove("</@name>");
+ }
+
+ if (style == Section::AllMembers) {
+ static const QRegularExpression extraRegExp("<@extra>.*</@extra>",
+ QRegularExpression::InvertedGreedinessOption);
+ marked.remove(extraRegExp);
+ } else {
+ marked.replace("<@extra>", "<code class=\"%1 extra\" translate=\"no\">"_L1
+ .arg(style == Section::Summary ? "summary"_L1 : "details"_L1));
+ marked.replace("</@extra>", "</code>");
+ }
+
+ if (style != Section::Details) {
+ marked.remove("<@type>");
+ marked.remove("</@type>");
+ }
+
+ out() << highlightedCode(marked, relative, alignNames);
+}
+
+QString HtmlGenerator::highlightedCode(const QString &markedCode, const Node *relative,
+ bool alignNames, Node::Genus genus)
+{
+ QString src = markedCode;
+ QString html;
+ html.reserve(src.size());
+ QStringView arg;
+ QStringView par1;
+
+ const QChar charLangle = '<';
+ const QChar charAt = '@';
+
+ static const QString typeTag("type");
+ static const QString headerTag("headerfile");
+ static const QString funcTag("func");
+ static const QString linkTag("link");
+
+ // replace all <@link> tags: "(<@link node=\"([^\"]+)\">).*(</@link>)"
+ // replace all <@func> tags: "(<@func target=\"([^\"]*)\">)(.*)(</@func>)"
+ // replace all "(<@(type|headerfile)(?: +[^>]*)?>)(.*)(</@\\2>)" tags
+ bool done = false;
+ for (int i = 0, srcSize = src.size(); i < srcSize;) {
+ if (src.at(i) == charLangle && src.at(i + 1) == charAt) {
+ if (alignNames && !done) {
+ html += QLatin1String("</td><td class=\"memItemRight bottomAlign\">");
+ done = true;
+ }
+ i += 2;
+ if (parseArg(src, linkTag, &i, srcSize, &arg, &par1)) {
+ html += QLatin1String("<b>");
+ const Node *n = CodeMarker::nodeForString(par1.toString());
+ QString link = linkForNode(n, relative);
+ addLink(link, arg, &html);
+ html += QLatin1String("</b>");
+ } else if (parseArg(src, funcTag, &i, srcSize, &arg, &par1)) {
+ const FunctionNode *fn = m_qdb->findFunctionNode(par1.toString(), relative, genus);
+ QString link = linkForNode(fn, relative);
+ addLink(link, arg, &html);
+ par1 = QStringView();
+ } else if (parseArg(src, typeTag, &i, srcSize, &arg, &par1)) {
+ par1 = QStringView();
+ const Node *n = m_qdb->findTypeNode(arg.toString(), relative, genus);
+ html += QLatin1String("<span class=\"type\">");
+ if (n && (n->isQmlBasicType())) {
+ if (relative && (relative->genus() == n->genus() || genus == n->genus()))
+ addLink(linkForNode(n, relative), arg, &html);
+ else
+ html += arg;
+ } else
+ addLink(linkForNode(n, relative), arg, &html);
+ html += QLatin1String("</span>");
+ } else if (parseArg(src, headerTag, &i, srcSize, &arg, &par1)) {
+ par1 = QStringView();
+ if (arg.startsWith(QLatin1Char('&')))
+ html += arg;
+ else {
+ const Node *n = m_qdb->findNodeForInclude(QStringList(arg.toString()));
+ if (n && n != relative)
+ addLink(linkForNode(n, relative), arg, &html);
+ else
+ html += arg;
+ }
+ } else {
+ html += charLangle;
+ html += charAt;
+ }
+ } else {
+ html += src.at(i++);
+ }
+ }
+
+ // replace all
+ // "<@comment>" -> "<span class=\"comment\">";
+ // "<@preprocessor>" -> "<span class=\"preprocessor\">";
+ // "<@string>" -> "<span class=\"string\">";
+ // "<@char>" -> "<span class=\"char\">";
+ // "<@number>" -> "<span class=\"number\">";
+ // "<@op>" -> "<span class=\"operator\">";
+ // "<@type>" -> "<span class=\"type\">";
+ // "<@name>" -> "<span class=\"name\">";
+ // "<@keyword>" -> "<span class=\"keyword\">";
+ // "</@(?:comment|preprocessor|string|char|number|op|type|name|keyword)>" -> "</span>"
+ src = html;
+ html = QString();
+ html.reserve(src.size());
+ static const QLatin1String spanTags[] = {
+ QLatin1String("comment>"), QLatin1String("<span class=\"comment\">"),
+ QLatin1String("preprocessor>"), QLatin1String("<span class=\"preprocessor\">"),
+ QLatin1String("string>"), QLatin1String("<span class=\"string\">"),
+ QLatin1String("char>"), QLatin1String("<span class=\"char\">"),
+ QLatin1String("number>"), QLatin1String("<span class=\"number\">"),
+ QLatin1String("op>"), QLatin1String("<span class=\"operator\">"),
+ QLatin1String("type>"), QLatin1String("<span class=\"type\">"),
+ QLatin1String("name>"), QLatin1String("<span class=\"name\">"),
+ QLatin1String("keyword>"), QLatin1String("<span class=\"keyword\">")
+ };
+ int nTags = 9;
+ // Update the upper bound of k in the following code to match the length
+ // of the above array.
+ for (int i = 0, n = src.size(); i < n;) {
+ if (src.at(i) == QLatin1Char('<')) {
+ if (src.at(i + 1) == QLatin1Char('@')) {
+ i += 2;
+ bool handled = false;
+ for (int k = 0; k != nTags; ++k) {
+ const QLatin1String &tag = spanTags[2 * k];
+ if (i + tag.size() <= src.size() && tag == QStringView(src).mid(i, tag.size())) {
+ html += spanTags[2 * k + 1];
+ i += tag.size();
+ handled = true;
+ break;
+ }
+ }
+ if (!handled) {
+ // drop 'our' unknown tags (the ones still containing '@')
+ while (i < n && src.at(i) != QLatin1Char('>'))
+ ++i;
+ ++i;
+ }
+ continue;
+ } else if (src.at(i + 1) == QLatin1Char('/') && src.at(i + 2) == QLatin1Char('@')) {
+ i += 3;
+ bool handled = false;
+ for (int k = 0; k != nTags; ++k) {
+ const QLatin1String &tag = spanTags[2 * k];
+ if (i + tag.size() <= src.size() && tag == QStringView(src).mid(i, tag.size())) {
+ html += QLatin1String("</span>");
+ i += tag.size();
+ handled = true;
+ break;
+ }
+ }
+ if (!handled) {
+ // drop 'our' unknown tags (the ones still containing '@')
+ while (i < n && src.at(i) != QLatin1Char('>'))
+ ++i;
+ ++i;
+ }
+ continue;
+ }
+ }
+ html += src.at(i);
+ ++i;
+ }
+ return html;
+}
+
+void HtmlGenerator::generateLink(const Atom *atom)
+{
+ Q_ASSERT(m_inLink);
+
+ if (m_linkNode && m_linkNode->isFunction()) {
+ auto match = XmlGenerator::m_funcLeftParen.match(atom->string());
+ if (match.hasMatch()) {
+ // C++: move () outside of link
+ qsizetype leftParenLoc = match.capturedStart(1);
+ out() << protectEnc(atom->string().left(leftParenLoc));
+ endLink();
+ out() << protectEnc(atom->string().mid(leftParenLoc));
+ return;
+ }
+ }
+ out() << protectEnc(atom->string());
+}
+
+QString HtmlGenerator::protectEnc(const QString &string)
+{
+ return protect(string);
+}
+
+QString HtmlGenerator::protect(const QString &string)
+{
+#define APPEND(x) \
+ if (html.isEmpty()) { \
+ html = string; \
+ html.truncate(i); \
+ } \
+ html += (x);
+
+ QString html;
+ qsizetype n = string.size();
+
+ for (int i = 0; i < n; ++i) {
+ QChar ch = string.at(i);
+
+ if (ch == QLatin1Char('&')) {
+ APPEND("&amp;");
+ } else if (ch == QLatin1Char('<')) {
+ APPEND("&lt;");
+ } else if (ch == QLatin1Char('>')) {
+ APPEND("&gt;");
+ } else if (ch == QChar(8211)) {
+ APPEND("&ndash;");
+ } else if (ch == QChar(8212)) {
+ APPEND("&mdash;");
+ } else if (ch == QLatin1Char('"')) {
+ APPEND("&quot;");
+ } else {
+ if (!html.isEmpty())
+ html += ch;
+ }
+ }
+
+ if (!html.isEmpty())
+ return html;
+ return string;
+
+#undef APPEND
+}
+
+QString HtmlGenerator::fileBase(const Node *node) const
+{
+ QString result = Generator::fileBase(node);
+ if (!node->isAggregate() && node->isDeprecated())
+ result += QLatin1String("-obsolete");
+ return result;
+}
+
+QString HtmlGenerator::fileName(const Node *node)
+{
+ if (node->isExternalPage())
+ return node->name();
+ return Generator::fileName(node);
+}
+
+void HtmlGenerator::generateFullName(const Node *apparentNode, const Node *relative,
+ const Node *actualNode)
+{
+ if (actualNode == nullptr)
+ actualNode = apparentNode;
+ bool link = !linkForNode(actualNode, relative).isEmpty();
+ if (link) {
+ out() << "<a href=\"" << linkForNode(actualNode, relative);
+ if (actualNode->isDeprecated())
+ out() << "\" class=\"obsolete";
+ out() << "\">";
+ }
+ out() << protectEnc(apparentNode->fullName(relative));
+ if (link)
+ out() << "</a>";
+}
+
+void HtmlGenerator::generateDetailedMember(const Node *node, const PageNode *relative,
+ CodeMarker *marker)
+{
+ const EnumNode *etn;
+ generateExtractionMark(node, MemberMark);
+ QString nodeRef = nullptr;
+ if (node->isSharedCommentNode()) {
+ const auto *scn = reinterpret_cast<const SharedCommentNode *>(node);
+ const QList<Node *> &collective = scn->collective();
+ if (collective.size() > 1)
+ out() << "<div class=\"fngroup\">\n";
+ for (const auto *sharedNode : collective) {
+ nodeRef = refForNode(sharedNode);
+ out() << R"(<h3 class="fn fngroupitem" translate="no" id=")" << nodeRef << "\">";
+ generateSynopsis(sharedNode, relative, marker, Section::Details);
+ out() << "</h3>";
+ }
+ if (collective.size() > 1)
+ out() << "</div>";
+ out() << '\n';
+ } else {
+ nodeRef = refForNode(node);
+ if (node->isEnumType() && (etn = static_cast<const EnumNode *>(node))->flagsType()) {
+ out() << R"(<h3 class="flags" id=")" << nodeRef << "\">";
+ generateSynopsis(etn, relative, marker, Section::Details);
+ out() << "<br/>";
+ generateSynopsis(etn->flagsType(), relative, marker, Section::Details);
+ out() << "</h3>\n";
+ } else {
+ out() << R"(<h3 class="fn" translate="no" id=")" << nodeRef << "\">";
+ generateSynopsis(node, relative, marker, Section::Details);
+ out() << "</h3>" << '\n';
+ }
+ }
+
+ generateStatus(node, marker);
+ generateBody(node, marker);
+ generateOverloadedSignal(node, marker);
+ generateComparisonCategory(node, marker);
+ generateThreadSafeness(node, marker);
+ generateSince(node, marker);
+ generateNoexceptNote(node, marker);
+
+ if (node->isProperty()) {
+ const auto property = static_cast<const PropertyNode *>(node);
+ if (property->propertyType() == PropertyNode::PropertyType::StandardProperty) {
+ Section section("", "", "", "", Section::Accessors);
+
+ section.appendMembers(property->getters().toVector());
+ section.appendMembers(property->setters().toVector());
+ section.appendMembers(property->resetters().toVector());
+
+ if (!section.members().isEmpty()) {
+ out() << "<p><b>Access functions:</b></p>\n";
+ generateSectionList(section, node, marker);
+ }
+
+ Section notifiers("", "", "", "", Section::Accessors);
+ notifiers.appendMembers(property->notifiers().toVector());
+
+ if (!notifiers.members().isEmpty()) {
+ out() << "<p><b>Notifier signal:</b></p>\n";
+ generateSectionList(notifiers, node, marker);
+ }
+ }
+ } else if (node->isEnumType()) {
+ const auto *enumTypeNode = static_cast<const EnumNode *>(node);
+ if (enumTypeNode->flagsType()) {
+ out() << "<p>The " << protectEnc(enumTypeNode->flagsType()->name())
+ << " type is a typedef for "
+ << "<a href=\"" << m_qflagsHref << "\">QFlags</a>&lt;"
+ << protectEnc(enumTypeNode->name()) << "&gt;. It stores an OR combination of "
+ << protectEnc(enumTypeNode->name()) << " values.</p>\n";
+ }
+ }
+ generateAlsoList(node, marker);
+ generateExtractionMark(node, EndMark);
+}
+
+/*!
+ This version of the function is called when outputting the link
+ to an example file or example image, where the \a link is known
+ to be correct.
+ */
+void HtmlGenerator::beginLink(const QString &link)
+{
+ m_link = link;
+ m_inLink = true;
+ m_linkNode = nullptr;
+
+ if (!m_link.isEmpty())
+ out() << "<a href=\"" << m_link << "\" translate=\"no\">";
+}
+
+void HtmlGenerator::beginLink(const QString &link, const Node *node, const Node *relative)
+{
+ m_link = link;
+ m_inLink = true;
+ m_linkNode = node;
+ if (m_link.isEmpty())
+ return;
+
+ if (node == nullptr || (relative != nullptr && node->status() == relative->status()))
+ out() << "<a href=\"" << m_link << "\" translate=\"no\">";
+ else if (node->isDeprecated())
+ out() << "<a href=\"" << m_link << "\" class=\"obsolete\" translate=\"no\">";
+ else
+ out() << "<a href=\"" << m_link << "\" translate=\"no\">";
+}
+
+void HtmlGenerator::endLink()
+{
+ if (!m_inLink)
+ return;
+
+ m_inLink = false;
+ m_linkNode = nullptr;
+
+ if (!m_link.isEmpty())
+ out() << "</a>";
+}
+
+/*!
+ Generates the summary list for the \a members. Only used for
+ sections of QML element documentation.
+ */
+void HtmlGenerator::generateQmlSummary(const NodeVector &members, const Node *relative,
+ CodeMarker *marker)
+{
+ if (!members.isEmpty()) {
+ out() << "<ul>\n";
+ for (const auto &member : members) {
+ out() << "<li class=\"fn\" translate=\"no\">";
+ generateQmlItem(member, relative, marker, true);
+ if (member->isPropertyGroup()) {
+ const auto *scn = static_cast<const SharedCommentNode *>(member);
+ if (scn->count() > 0) {
+ out() << "<ul>\n";
+ const QList<Node *> &sharedNodes = scn->collective();
+ for (const auto &node : sharedNodes) {
+ if (node->isQmlProperty()) {
+ out() << "<li class=\"fn\" translate=\"no\">";
+ generateQmlItem(node, relative, marker, true);
+ out() << "</li>\n";
+ }
+ }
+ out() << "</ul>\n";
+ }
+ }
+ out() << "</li>\n";
+ }
+ out() << "</ul>\n";
+ }
+}
+
+/*!
+ Outputs the html detailed documentation for a section
+ on a QML element reference page.
+ */
+void HtmlGenerator::generateDetailedQmlMember(Node *node, const Aggregate *relative,
+ CodeMarker *marker)
+{
+ generateExtractionMark(node, MemberMark);
+
+ QString qmlItemHeader("<div class=\"qmlproto\" translate=\"no\">\n"
+ "<div class=\"table\"><table class=\"qmlname\">\n");
+
+ QString qmlItemStart("<tr valign=\"top\" class=\"odd\" id=\"%1\">\n"
+ "<td class=\"%2\"><p>\n");
+ QString qmlItemEnd("</p></td></tr>\n");
+
+ QString qmlItemFooter("</table></div></div>\n");
+
+ auto generateQmlProperty = [&](Node *n) {
+ out() << qmlItemStart.arg(refForNode(n), "tblQmlPropNode");
+ generateQmlItem(n, relative, marker, false);
+ out() << qmlItemEnd;
+ };
+
+ auto generateQmlMethod = [&](Node *n) {
+ out() << qmlItemStart.arg(refForNode(n), "tblQmlFuncNode");
+ generateSynopsis(n, relative, marker, Section::Details, false);
+ out() << qmlItemEnd;
+ };
+
+ out() << "<div class=\"qmlitem\">";
+ if (node->isPropertyGroup()) {
+ const auto *scn = static_cast<const SharedCommentNode *>(node);
+ out() << qmlItemHeader;
+ if (!scn->name().isEmpty()) {
+ const QString nodeRef = refForNode(scn);
+ out() << R"(<tr valign="top" class="even" id=")" << nodeRef << "\">";
+ out() << "<th class=\"centerAlign\"><p>";
+ out() << "<b>" << scn->name() << " group</b>";
+ out() << "</p></th></tr>\n";
+ }
+ const QList<Node *> sharedNodes = scn->collective();
+ for (const auto &sharedNode : sharedNodes) {
+ if (sharedNode->isQmlProperty())
+ generateQmlProperty(sharedNode);
+ }
+ out() << qmlItemFooter;
+ } else if (node->isQmlProperty()) {
+ out() << qmlItemHeader;
+ generateQmlProperty(node);
+ out() << qmlItemFooter;
+ } else if (node->isSharedCommentNode()) {
+ const auto *scn = reinterpret_cast<const SharedCommentNode *>(node);
+ const QList<Node *> &sharedNodes = scn->collective();
+ if (sharedNodes.size() > 1)
+ out() << "<div class=\"fngroup\">\n";
+ out() << qmlItemHeader;
+ for (const auto &sharedNode : sharedNodes) {
+ // Generate the node only if it's a QML method
+ if (sharedNode->isFunction(Node::QML))
+ generateQmlMethod(sharedNode);
+ else if (sharedNode->isQmlProperty())
+ generateQmlProperty(sharedNode);
+ }
+ out() << qmlItemFooter;
+ if (sharedNodes.size() > 1)
+ out() << "</div>"; // fngroup
+ } else { // assume the node is a method/signal handler
+ out() << qmlItemHeader;
+ generateQmlMethod(node);
+ out() << qmlItemFooter;
+ }
+
+ out() << "<div class=\"qmldoc\">";
+ generateStatus(node, marker);
+ generateBody(node, marker);
+ generateThreadSafeness(node, marker);
+ generateSince(node, marker);
+ generateAlsoList(node, marker);
+ out() << "</div></div>";
+ generateExtractionMark(node, EndMark);
+}
+
+void HtmlGenerator::generateExtractionMark(const Node *node, ExtractionMarkType markType)
+{
+ if (markType != EndMark) {
+ out() << "<!-- $$$" + node->name();
+ if (markType == MemberMark) {
+ if (node->isFunction()) {
+ const auto *func = static_cast<const FunctionNode *>(node);
+ if (!func->hasAssociatedProperties()) {
+ if (func->overloadNumber() == 0)
+ out() << "[overload1]";
+ out() << "$$$" + func->name() + func->parameters().rawSignature().remove(' ');
+ }
+ } else if (node->isProperty()) {
+ out() << "-prop";
+ const auto *prop = static_cast<const PropertyNode *>(node);
+ const NodeList &list = prop->functions();
+ for (const auto *propFuncNode : list) {
+ if (propFuncNode->isFunction()) {
+ const auto *func = static_cast<const FunctionNode *>(propFuncNode);
+ out() << "$$$" + func->name()
+ + func->parameters().rawSignature().remove(' ');
+ }
+ }
+ } else if (node->isEnumType()) {
+ const auto *enumNode = static_cast<const EnumNode *>(node);
+ const auto &items = enumNode->items();
+ for (const auto &item : items)
+ out() << "$$$" + item.name();
+ }
+ } else if (markType == BriefMark) {
+ out() << "-brief";
+ } else if (markType == DetailedDescriptionMark) {
+ out() << "-description";
+ }
+ out() << " -->\n";
+ } else {
+ out() << "<!-- @@@" + node->name() + " -->\n";
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/htmlgenerator.h b/src/qdoc/qdoc/src/qdoc/htmlgenerator.h
new file mode 100644
index 000000000..6207fb7be
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/htmlgenerator.h
@@ -0,0 +1,177 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef HTMLGENERATOR_H
+#define HTMLGENERATOR_H
+
+#include "codemarker.h"
+#include "xmlgenerator.h"
+#include "filesystem/fileresolver.h"
+
+#include <QtCore/qhash.h>
+#include <QtCore/qregularexpression.h>
+
+QT_BEGIN_NAMESPACE
+
+class Aggregate;
+class Config;
+class ExampleNode;
+class HelpProjectWriter;
+class ManifestWriter;
+
+class HtmlGenerator : public XmlGenerator
+{
+public:
+ HtmlGenerator(FileResolver& file_resolver);
+ ~HtmlGenerator() override;
+
+ void initializeGenerator() override;
+ void terminateGenerator() override;
+ QString format() override;
+ void generateDocs() override;
+
+ QString protectEnc(const QString &string);
+ static QString protect(const QString &string);
+
+protected:
+ void generateExampleFilePage(const Node *en, ResolvedFile resolved_file, CodeMarker *marker) override;
+ qsizetype generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker) override;
+ void generateCppReferencePage(Aggregate *aggregate, CodeMarker *marker) override;
+ void generateProxyPage(Aggregate *aggregate, CodeMarker *marker) override;
+ void generateQmlTypePage(QmlTypeNode *qcn, CodeMarker *marker) override;
+ void generatePageNode(PageNode *pn, CodeMarker *marker) override;
+ void generateCollectionNode(CollectionNode *cn, CodeMarker *marker) override;
+ void generateGenericCollectionPage(CollectionNode *cn, CodeMarker *marker) override;
+ [[nodiscard]] QString fileExtension() const override;
+
+private:
+ enum SubTitleSize { SmallSubTitle, LargeSubTitle };
+ enum ExtractionMarkType { BriefMark, DetailedDescriptionMark, MemberMark, EndMark };
+
+ void generateNavigationBar(const QString &title, const Node *node, CodeMarker *marker,
+ const QString &buildversion, bool tableItems = false);
+ void generateHeader(const QString &title, const Node *node = nullptr,
+ CodeMarker *marker = nullptr);
+ void generateTitle(const QString &title, const Text &subTitle, SubTitleSize subTitleSize,
+ const Node *relative, CodeMarker *marker);
+ void generateFooter(const Node *node = nullptr);
+ void generateRequisites(Aggregate *inner, CodeMarker *marker);
+ void generateQmlRequisites(QmlTypeNode *qcn, CodeMarker *marker);
+ void generateBrief(const Node *node, CodeMarker *marker, const Node *relative = nullptr,
+ bool addLink = true);
+ void generateTableOfContents(const Node *node, CodeMarker *marker,
+ QList<Section> *sections = nullptr);
+ void generateSidebar();
+ QString generateAllMembersFile(const Section &section, CodeMarker *marker);
+ QString generateAllQmlMembersFile(const Sections &sections, CodeMarker *marker);
+ QString generateObsoleteMembersFile(const Sections &sections, CodeMarker *marker);
+ QString generateObsoleteQmlMembersFile(const Sections &sections, CodeMarker *marker);
+ 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 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);
+ void generateSectionList(const Section &section, const Node *relative, CodeMarker *marker,
+ bool useObsoloteMembers = false);
+ void generateQmlSummary(const NodeVector &members, const Node *relative, CodeMarker *marker);
+ void generateQmlItem(const Node *node, const Node *relative, CodeMarker *marker, bool summary);
+ void generateDetailedQmlMember(Node *node, const Aggregate *relative, CodeMarker *marker);
+
+ void generateSection(const NodeVector &nv, const Node *relative, CodeMarker *marker);
+ void generateSynopsis(const Node *node, const Node *relative, CodeMarker *marker,
+ Section::Style style, bool alignNames = false);
+ void generateSectionInheritedList(const Section &section, const Node *relative);
+ QString highlightedCode(const QString &markedCode, const Node *relative,
+ bool alignNames = false, Node::Genus genus = Node::DontCare);
+
+ void generateFullName(const Node *apparentNode, const Node *relative,
+ const Node *actualNode = nullptr);
+ void generateDetailedMember(const Node *node, const PageNode *relative, CodeMarker *marker);
+ void generateLink(const Atom *atom);
+
+ QString fileBase(const Node *node) const override;
+ QString fileName(const Node *node);
+
+ void beginLink(const QString &link);
+ void beginLink(const QString &link, const Node *node, const Node *relative);
+ void endLink();
+ void generateExtractionMark(const Node *node, ExtractionMarkType markType);
+ void addIncludeFileToMap(const Aggregate *aggregate, CodeMarker *marker,
+ QMap<QString, Text> &requisites, Text& text,
+ const QString &headerText);
+ void addSinceToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites, Text *text,
+ const QString &sinceText) const;
+ void addStatusToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites, Text &text,
+ const QString &statusText) const;
+ void addCMakeInfoToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites, Text *text,
+ 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 addInheritsToMap(QMap<QString, Text> &requisites, Text *text, const QString &inheritsText,
+ ClassNode *classe);
+ void addInheritedByToMap(QMap<QString, Text> &requisites, Text *text,
+ const QString &inheritedBytext, ClassNode *classe);
+ void generateTheTable(const QStringList &requisiteOrder, const QMap<QString, Text> &requisites,
+ const QString &headerText, const Aggregate *aggregate,
+ CodeMarker *marker);
+ inline void openUnorderedList();
+ inline void closeUnorderedList();
+
+ QString groupReferenceText(PageNode* node);
+
+ static bool s_inUnorderedList;
+
+ int m_codeIndent { 0 };
+ QString m_codePrefix {};
+ QString m_codeSuffix {};
+ HelpProjectWriter *m_helpProjectWriter { nullptr };
+ ManifestWriter *m_manifestWriter { nullptr };
+ QString m_headerScripts {};
+ QString m_headerStyles {};
+ QString m_endHeader {};
+ QString m_postHeader {};
+ QString m_postPostHeader {};
+ QString m_prologue {};
+ QString m_footer {};
+ QString m_address {};
+ bool m_noNavigationBar { false };
+ QString m_project {};
+ QString m_projectDescription {};
+ QString m_projectUrl {};
+ QString m_navigationLinks {};
+ QString m_navigationSeparator {};
+ QString m_homepage {};
+ QString m_hometitle {};
+ QString m_landingpage {};
+ QString m_landingtitle {};
+ QString m_cppclassespage {};
+ QString m_cppclassestitle {};
+ QString m_qmltypespage {};
+ QString m_qmltypestitle {};
+ QString m_buildversion {};
+ QString m_qflagsHref {};
+ int tocDepth {};
+
+ Config *config { nullptr };
+
+};
+
+#define HTMLGENERATOR_ADDRESS "address"
+#define HTMLGENERATOR_FOOTER "footer"
+#define HTMLGENERATOR_POSTHEADER "postheader"
+#define HTMLGENERATOR_POSTPOSTHEADER "postpostheader"
+#define HTMLGENERATOR_PROLOGUE "prologue"
+#define HTMLGENERATOR_NONAVIGATIONBAR "nonavigationbar"
+#define HTMLGENERATOR_NAVIGATIONSEPARATOR "navigationseparator"
+#define HTMLGENERATOR_TOCDEPTH "tocdepth"
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/importrec.h b/src/qdoc/qdoc/src/qdoc/importrec.h
new file mode 100644
index 000000000..84f8f35ac
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/importrec.h
@@ -0,0 +1,33 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef IMPORTREC_H
+#define IMPORTREC_H
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qstring.h>
+
+#include <utility>
+
+QT_BEGIN_NAMESPACE
+
+struct ImportRec
+{
+ QString m_moduleName {};
+ QString m_majorMinorVersion {};
+ QString m_importUri {}; // subdirectory of module directory
+
+ ImportRec(QString name, QString version, QString importUri)
+ : m_moduleName(std::move(name)),
+ m_majorMinorVersion(std::move(version)),
+ m_importUri(std::move(importUri))
+ {
+ }
+ QString &name() { return m_moduleName; }
+ QString &version() { return m_majorMinorVersion; }
+ [[nodiscard]] bool isEmpty() const { return m_moduleName.isEmpty(); }
+};
+
+QT_END_NAMESPACE
+
+#endif // IMPORTREC_H
diff --git a/src/qdoc/qdoc/src/qdoc/location.cpp b/src/qdoc/qdoc/src/qdoc/location.cpp
new file mode 100644
index 000000000..714e232d7
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/location.cpp
@@ -0,0 +1,423 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "location.h"
+
+#include "config.h"
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qdir.h>
+#include <QtCore/qregularexpression.h>
+
+#include <climits>
+#include <cstdio>
+#include <cstdlib>
+
+QT_BEGIN_NAMESPACE
+
+int Location::s_tabSize;
+int Location::s_warningCount = 0;
+int Location::s_warningLimit = -1;
+QString Location::s_programName;
+QString Location::s_project;
+QRegularExpression *Location::s_spuriousRegExp = nullptr;
+
+/*!
+ \class Location
+
+ \brief The Location class provides a way to mark a location in a file.
+
+ It maintains a stack of file positions. A file position
+ consists of the file path, line number, and column number.
+ The location is used for printing error messages that are
+ tied to a location in a file.
+ */
+
+/*!
+ Constructs an empty location.
+ */
+Location::Location() : m_stk(nullptr), m_stkTop(&m_stkBottom), m_stkDepth(0), m_etc(false)
+{
+ // nothing.
+}
+
+/*!
+ Constructs a location with (fileName, 1, 1) on its file
+ position stack.
+ */
+Location::Location(const QString &fileName)
+ : m_stk(nullptr), m_stkTop(&m_stkBottom), m_stkDepth(0), m_etc(false)
+{
+ push(fileName);
+}
+
+/*!
+ The copy constructor copies the contents of \a other into
+ this Location using the assignment operator.
+ */
+Location::Location(const Location &other)
+ : m_stk(nullptr), m_stkTop(&m_stkBottom), m_stkDepth(0), m_etc(false)
+{
+ *this = other;
+}
+
+/*!
+ The assignment operator does a deep copy of the entire
+ state of \a other into this Location.
+ */
+Location &Location::operator=(const Location &other)
+{
+ if (this == &other)
+ return *this;
+
+ QStack<StackEntry> *oldStk = m_stk;
+
+ m_stkBottom = other.m_stkBottom;
+ if (other.m_stk == nullptr) {
+ m_stk = nullptr;
+ m_stkTop = &m_stkBottom;
+ } else {
+ m_stk = new QStack<StackEntry>(*other.m_stk);
+ m_stkTop = &m_stk->top();
+ }
+ m_stkDepth = other.m_stkDepth;
+ m_etc = other.m_etc;
+ delete oldStk;
+ return *this;
+}
+
+/*!
+ If the file position on top of the stack has a line number
+ less than 1, set its line number to 1 and its column number
+ to 1. Otherwise, do nothing.
+ */
+void Location::start()
+{
+ if (m_stkTop->m_lineNo < 1) {
+ m_stkTop->m_lineNo = 1;
+ m_stkTop->m_columnNo = 1;
+ }
+}
+
+/*!
+ Advance the current file position, using \a ch to decide how to do
+ that. If \a ch is a \c{'\\n'}, increment the current line number and
+ set the column number to 1. If \ch is a \c{'\\t'}, increment to the
+ next tab column. Otherwise, increment the column number by 1.
+
+ The current file position is the one on top of the position stack.
+ */
+void Location::advance(QChar ch)
+{
+ if (ch == QLatin1Char('\n')) {
+ m_stkTop->m_lineNo++;
+ m_stkTop->m_columnNo = 1;
+ } else if (ch == QLatin1Char('\t')) {
+ m_stkTop->m_columnNo = 1 + s_tabSize * (m_stkTop->m_columnNo + s_tabSize - 1) / s_tabSize;
+ } else {
+ m_stkTop->m_columnNo++;
+ }
+}
+
+/*!
+ Pushes \a filePath onto the file position stack. The current
+ file position becomes (\a filePath, 1, 1).
+
+ \sa pop()
+*/
+void Location::push(const QString &filePath)
+{
+ if (m_stkDepth++ >= 1) {
+ if (m_stk == nullptr)
+ m_stk = new QStack<StackEntry>;
+ m_stk->push(StackEntry());
+ m_stkTop = &m_stk->top();
+ }
+
+ m_stkTop->m_filePath = filePath;
+ m_stkTop->m_lineNo = INT_MIN;
+ m_stkTop->m_columnNo = 1;
+}
+
+/*!
+ Pops the top of the internal stack. The current file position
+ becomes the next one in the new top of stack.
+
+ \sa push()
+*/
+void Location::pop()
+{
+ if (--m_stkDepth == 0) {
+ m_stkBottom = StackEntry();
+ } else {
+ if (!m_stk)
+ return;
+ m_stk->pop();
+ if (m_stk->isEmpty()) {
+ delete m_stk;
+ m_stk = nullptr;
+ m_stkTop = &m_stkBottom;
+ } else {
+ m_stkTop = &m_stk->top();
+ }
+ }
+}
+
+/*! \fn bool Location::isEmpty() const
+
+ Returns \c true if there is no file name set yet; returns \c false
+ otherwise. The functions filePath(), lineNo() and columnNo()
+ must not be called on an empty Location object.
+ */
+
+/*! \fn const QString &Location::filePath() const
+ Returns the current path and file name. If the Location is
+ empty, the returned string is null.
+
+ \sa lineNo(), columnNo()
+ */
+
+/*!
+ Returns the file name part of the file path, ie the current
+ file. Returns an empty string if the file path is empty.
+ */
+QString Location::fileName() const
+{
+ QFileInfo fi(filePath());
+ return fi.fileName();
+}
+
+/*!
+ Returns the suffix of the file name. Returns an empty string
+ if the file path is empty.
+ */
+QString Location::fileSuffix() const
+{
+ QString fp = filePath();
+ return (fp.isEmpty() ? fp : fp.mid(fp.lastIndexOf('.') + 1));
+}
+
+/*! \fn int Location::lineNo() const
+ Returns the current line number.
+ Must not be called on an empty Location object.
+
+ \sa filePath(), columnNo()
+*/
+
+/*! \fn int Location::columnNo() const
+ Returns the current column number.
+ Must not be called on an empty Location object.
+
+ \sa filePath(), lineNo()
+*/
+
+/*!
+ Writes \a message and \a details to stderr as a formatted
+ warning message. Does not write the message if qdoc is in
+ the Prepare phase.
+ */
+void Location::warning(const QString &message, const QString &details) const
+{
+ const auto &config = Config::instance();
+ if (!config.preparing() || config.singleExec())
+ emitMessage(Warning, message, details);
+}
+
+/*!
+ Writes \a message and \a details to stderr as a formatted
+ error message. Does not write the message if qdoc is in
+ the Prepare phase.
+ */
+void Location::error(const QString &message, const QString &details) const
+{
+ const auto &config = Config::instance();
+ if (!config.preparing() || config.singleExec())
+ emitMessage(Error, message, details);
+}
+
+/*!
+ Returns the error code QDoc should exit with; EXIT_SUCCESS
+ or the number of documentation warnings if they exceeded
+ the limit set by warninglimit configuration variable.
+ */
+int Location::exitCode()
+{
+ if (s_warningLimit < 0 || s_warningCount <= s_warningLimit)
+ return EXIT_SUCCESS;
+
+ Location().emitMessage(
+ Error,
+ QStringLiteral("Documentation warnings (%1) exceeded the limit (%2) for '%3'.")
+ .arg(QString::number(s_warningCount), QString::number(s_warningLimit),
+ s_project),
+ QString());
+ return s_warningCount;
+}
+
+/*!
+ Writes \a message and \a details to stderr as a formatted
+ error message and then exits the program. qdoc prints fatal
+ errors in either phase (Prepare or Generate).
+ */
+void Location::fatal(const QString &message, const QString &details) const
+{
+ emitMessage(Error, message, details);
+ information(message);
+ information(details);
+ information("Aborting");
+ exit(EXIT_FAILURE);
+}
+
+/*!
+ Writes \a message and \a details to stderr as a formatted
+ report message.
+ */
+void Location::report(const QString &message, const QString &details) const
+{
+ emitMessage(Report, message, details);
+}
+
+/*!
+ Gets several parameters from the config, including
+ tab size, program name, and a regular expression that
+ appears to be used for matching certain error messages
+ so that emitMessage() can avoid printing them.
+ */
+void Location::initialize()
+{
+ Config &config = Config::instance();
+ s_tabSize = config.get(CONFIG_TABSIZE).asInt();
+ s_programName = config.programName();
+ s_project = config.get(CONFIG_PROJECT).asString();
+ if (!config.singleExec())
+ s_warningCount = 0;
+ if (qEnvironmentVariableIsSet("QDOC_ENABLE_WARNINGLIMIT")
+ || config.get(CONFIG_WARNINGLIMIT + Config::dot + "enabled").asBool())
+ s_warningLimit = config.get(CONFIG_WARNINGLIMIT).asInt();
+
+ QRegularExpression regExp = config.getRegExp(CONFIG_SPURIOUS);
+ if (regExp.isValid()) {
+ s_spuriousRegExp = new QRegularExpression(regExp);
+ } else {
+ config.get(CONFIG_SPURIOUS).location()
+ .warning(QStringLiteral("Invalid regular expression '%1'")
+ .arg(regExp.pattern()));
+ }
+}
+
+/*!
+ Apparently, all this does is delete the regular expression
+ used for intercepting certain error messages that should
+ not be emitted by emitMessage().
+ */
+void Location::terminate()
+{
+ delete s_spuriousRegExp;
+ s_spuriousRegExp = nullptr;
+}
+
+/*!
+ Prints \a message to \c stdout followed by a \c{'\n'}.
+ */
+void Location::information(const QString &message)
+{
+ printf("%s\n", message.toLatin1().data());
+ fflush(stdout);
+}
+
+/*!
+ Report a program bug, including the \a hint.
+ */
+void Location::internalError(const QString &hint)
+{
+ Location().fatal(QStringLiteral("Internal error (%1)").arg(hint),
+ QStringLiteral("There is a bug in %1. Seek advice from your local"
+ " %2 guru.")
+ .arg(s_programName, s_programName));
+}
+
+/*!
+ Formats \a message and \a details into a single string
+ and outputs that string to \c stderr. \a type specifies
+ whether the \a message is an error or a warning.
+ */
+void Location::emitMessage(MessageType type, const QString &message, const QString &details) const
+{
+ if (type == Warning && s_spuriousRegExp != nullptr) {
+ auto match = s_spuriousRegExp->match(message, 0, QRegularExpression::NormalMatch,
+ QRegularExpression::AnchorAtOffsetMatchOption);
+ if (match.hasMatch() && match.capturedLength() == message.size())
+ return;
+ }
+
+ QString result = message;
+ if (!details.isEmpty())
+ result += "\n[" + details + QLatin1Char(']');
+ result.replace("\n", "\n ");
+ if (isEmpty()) {
+ if (type == Error)
+ result.prepend(QStringLiteral(": error: "));
+ else if (type == Warning) {
+ result.prepend(QStringLiteral(": warning: "));
+ ++s_warningCount;
+ }
+ } else {
+ if (type == Error)
+ result.prepend(QStringLiteral(": (qdoc) error: "));
+ else if (type == Warning) {
+ result.prepend(QStringLiteral(": (qdoc) warning: "));
+ ++s_warningCount;
+ }
+ }
+ if (type != Report)
+ result.prepend(toString());
+ fprintf(stderr, "%s\n", result.toLatin1().data());
+ fflush(stderr);
+}
+
+/*!
+ Converts the location to a string to be prepended to error
+ messages.
+ */
+QString Location::toString() const
+{
+ QString str;
+
+ if (isEmpty()) {
+ str = s_programName;
+ } else {
+ Location loc2 = *this;
+ loc2.setEtc(false);
+ loc2.pop();
+ if (!loc2.isEmpty()) {
+ QString blah = QStringLiteral("In file included from ");
+ for (;;) {
+ str += blah;
+ str += loc2.top();
+ loc2.pop();
+ if (loc2.isEmpty())
+ break;
+ str += QStringLiteral(",\n");
+ blah.fill(' ');
+ }
+ str += QStringLiteral(":\n");
+ }
+ str += top();
+ }
+ return str;
+}
+
+QString Location::top() const
+{
+ QDir path(filePath());
+ QString str = path.absolutePath();
+ if (lineNo() >= 1) {
+ str += QLatin1Char(':');
+ str += QString::number(lineNo());
+ }
+ if (etc())
+ str += QLatin1String(" (etc.)");
+ return str;
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/location.h b/src/qdoc/qdoc/src/qdoc/location.h
new file mode 100644
index 000000000..8427bc917
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/location.h
@@ -0,0 +1,92 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef LOCATION_H
+#define LOCATION_H
+
+#include <QtCore/qcoreapplication.h>
+#include <QtCore/qstack.h>
+
+QT_BEGIN_NAMESPACE
+
+class QRegularExpression;
+
+class Location
+{
+public:
+ Location();
+ explicit Location(const QString &filePath);
+ Location(const Location &other);
+ ~Location() { delete m_stk; }
+
+ Location &operator=(const Location &other);
+
+ void start();
+ void advance(QChar ch);
+ void advanceLines(int n)
+ {
+ m_stkTop->m_lineNo += n;
+ m_stkTop->m_columnNo = 1;
+ }
+
+ void push(const QString &filePath);
+ void pop();
+ void setEtc(bool etc) { m_etc = etc; }
+ void setLineNo(int no) { m_stkTop->m_lineNo = no; }
+ void setColumnNo(int no) { m_stkTop->m_columnNo = no; }
+
+ [[nodiscard]] bool isEmpty() const { return m_stkDepth == 0; }
+ [[nodiscard]] int depth() const { return m_stkDepth; }
+ [[nodiscard]] const QString &filePath() const { return m_stkTop->m_filePath; }
+ [[nodiscard]] QString fileName() const;
+ [[nodiscard]] QString fileSuffix() const;
+ [[nodiscard]] int lineNo() const { return m_stkTop->m_lineNo; }
+ [[nodiscard]] int columnNo() const { return m_stkTop->m_columnNo; }
+ [[nodiscard]] bool etc() const { return m_etc; }
+ [[nodiscard]] QString toString() const;
+ void warning(const QString &message, const QString &details = QString()) const;
+ void error(const QString &message, const QString &details = QString()) const;
+ void fatal(const QString &message, const QString &details = QString()) const;
+ void report(const QString &message, const QString &details = QString()) const;
+
+ static void initialize();
+
+ static void terminate();
+ static void information(const QString &message);
+ static void internalError(const QString &hint);
+ static int exitCode();
+
+private:
+ enum MessageType { Warning, Error, Report };
+
+ struct StackEntry
+ {
+ QString m_filePath {};
+ int m_lineNo {};
+ int m_columnNo {};
+ };
+ friend class QTypeInfo<StackEntry>;
+
+ void emitMessage(MessageType type, const QString &message, const QString &details) const;
+ [[nodiscard]] QString top() const;
+
+private:
+ StackEntry m_stkBottom {};
+ QStack<StackEntry> *m_stk {};
+ StackEntry *m_stkTop {};
+ int m_stkDepth {};
+ bool m_etc {};
+
+ static int s_tabSize;
+ static int s_warningCount;
+ static int s_warningLimit;
+ static QString s_programName;
+ static QString s_project;
+ static QRegularExpression *s_spuriousRegExp;
+};
+Q_DECLARE_TYPEINFO(Location::StackEntry, Q_RELOCATABLE_TYPE);
+Q_DECLARE_TYPEINFO(Location, Q_COMPLEX_TYPE); // stkTop = &stkBottom
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/macro.h b/src/qdoc/qdoc/src/qdoc/macro.h
new file mode 100644
index 000000000..11e77fa29
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/macro.h
@@ -0,0 +1,27 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#ifndef MACRO_H
+#define MACRO_H
+
+#include "location.h"
+
+#include <QtCore/qmap.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ * Simple structure used by the Doc and DocParser classes.
+ */
+struct Macro
+{
+public:
+ QString m_defaultDef {};
+ Location m_defaultDefLocation {};
+ QMap<QString, QString> m_otherDefs {};
+ int numParams {};
+};
+
+QT_END_NAMESPACE
+
+#endif // MACRO_H
diff --git a/src/qdoc/qdoc/src/qdoc/main.cpp b/src/qdoc/qdoc/src/qdoc/main.cpp
new file mode 100644
index 000000000..5e48a6a8a
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/main.cpp
@@ -0,0 +1,720 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "clangcodeparser.h"
+#include "codemarker.h"
+#include "codeparser.h"
+#include "config.h"
+#include "cppcodemarker.h"
+#include "doc.h"
+#include "docbookgenerator.h"
+#include "htmlgenerator.h"
+#include "location.h"
+#include "puredocparser.h"
+#include "qdocdatabase.h"
+#include "qmlcodemarker.h"
+#include "qmlcodeparser.h"
+#include "sourcefileparser.h"
+#include "utilities.h"
+#include "tokenizer.h"
+#include "tree.h"
+#include "webxmlgenerator.h"
+
+#include "filesystem/fileresolver.h"
+#include "boundaries/filesystem/directorypath.h"
+
+#include <QtCore/qcompilerdetection.h>
+#include <QtCore/qdatetime.h>
+#include <QtCore/qdebug.h>
+#include <QtCore/qglobal.h>
+#include <QtCore/qhashfunctions.h>
+
+#include <set>
+
+#ifndef QT_BOOTSTRAPPED
+# include <QtCore/qcoreapplication.h>
+#endif
+
+#include <algorithm>
+#include <cstdlib>
+
+QT_BEGIN_NAMESPACE
+
+using namespace Qt::StringLiterals;
+
+bool creationTimeBefore(const QFileInfo &fi1, const QFileInfo &fi2)
+{
+ return fi1.lastModified() < fi2.lastModified();
+}
+
+/*!
+ \internal
+ Inspects each file path in \a sources. File paths with a known
+ source file type are parsed to extract user-provided
+ documentation and information about source code level elements.
+
+ \note Unknown source file types are silently ignored.
+
+ The validity or availability of the file paths may or may not cause QDoc
+ to generate warnings; this depends on the implementation of
+ parseSourceFile() for the relevant parser.
+
+ \sa CodeParser::parserForSourceFile, CodeParser::sourceFileNameFilter
+*/
+static void parseSourceFiles(
+ std::vector<QString>&& sources,
+ SourceFileParser& source_file_parser,
+ CppCodeParser& cpp_code_parser
+) {
+ ParserErrorHandler error_handler{};
+ std::stable_sort(sources.begin(), sources.end());
+
+ sources.erase (
+ std::unique(sources.begin(), sources.end()),
+ sources.end()
+ );
+
+ auto qml_sources =
+ std::stable_partition(sources.begin(), sources.end(), [](const QString& source){
+ return CodeParser::parserForSourceFile(source) == CodeParser::parserForLanguage("QML");
+ });
+
+
+ std::for_each(qml_sources, sources.end(),
+ [&source_file_parser, &cpp_code_parser, &error_handler](const QString& source){
+ qCDebug(lcQdoc, "Parsing %s", qPrintable(source));
+
+ auto [untied_documentation, tied_documentation] = source_file_parser(tag_source_file(source));
+ std::vector<FnMatchError> errors{};
+
+ for (auto untied : untied_documentation) {
+ auto result = cpp_code_parser.processTopicArgs(untied);
+ tied_documentation.insert(tied_documentation.end(), result.first.begin(), result.first.end());
+ };
+
+ cpp_code_parser.processMetaCommands(tied_documentation);
+
+ // Process errors that occurred during parsing
+ for (const auto &e : errors)
+ error_handler(e);
+ });
+
+ std::for_each(sources.begin(), qml_sources, [&cpp_code_parser](const QString& source){
+ auto *codeParser = CodeParser::parserForSourceFile(source);
+ if (!codeParser) return;
+
+ qCDebug(lcQdoc, "Parsing %s", qPrintable(source));
+ codeParser->parseSourceFile(Config::instance().location(), source, cpp_code_parser);
+ });
+
+}
+
+/*!
+ Read some XML indexes containing definitions from other
+ documentation sets. \a config contains a variable that
+ lists directories where index files can be found. It also
+ contains the \c depends variable, which lists the modules
+ that the current module depends on. \a formats contains
+ a list of output formats; each format may have a different
+ output subdirectory where index files are located.
+*/
+static void loadIndexFiles(const QSet<QString> &formats)
+{
+ Config &config = Config::instance();
+ QDocDatabase *qdb = QDocDatabase::qdocDB();
+ QStringList indexFiles;
+ const QStringList configIndexes{config.get(CONFIG_INDEXES).asStringList()};
+ bool warn = !config.get(CONFIG_NOLINKERRORS).asBool();
+
+ for (const auto &index : configIndexes) {
+ QFileInfo fi(index);
+ if (fi.exists() && fi.isFile())
+ indexFiles << index;
+ else if (warn)
+ Location().warning(QString("Index file not found: %1").arg(index));
+ }
+
+ config.dependModules() += config.get(CONFIG_DEPENDS).asStringList();
+ config.dependModules().removeDuplicates();
+ bool useNoSubDirs = false;
+ QSet<QString> subDirs;
+
+ // Add format-specific output subdirectories to the set of
+ // subdirectories where we look for index files
+ for (const auto &format : formats) {
+ if (config.get(format + Config::dot + "nosubdirs").asBool()) {
+ useNoSubDirs = true;
+ const auto singleOutputSubdir{QDir(config.getOutputDir(format)).dirName()};
+ if (!singleOutputSubdir.isEmpty())
+ subDirs << singleOutputSubdir;
+ }
+ }
+
+ if (!config.dependModules().empty()) {
+ if (!config.indexDirs().empty()) {
+ for (auto &dir : config.indexDirs()) {
+ if (dir.startsWith("..")) {
+ const QString prefix(QDir(config.currentDir())
+ .relativeFilePath(config.previousCurrentDir()));
+ if (!prefix.isEmpty())
+ dir.prepend(prefix + QLatin1Char('/'));
+ }
+ }
+ /*
+ Load all dependencies:
+ Either add all subdirectories of the indexdirs as dependModules,
+ when an asterisk is used in the 'depends' list, or
+ when <format>.nosubdirs is set, we need to look for all .index files
+ in the output subdirectory instead.
+ */
+ bool asteriskUsed = false;
+ if (config.dependModules().contains("*")) {
+ config.dependModules().removeOne("*");
+ asteriskUsed = true;
+ if (useNoSubDirs) {
+ std::for_each(formats.begin(), formats.end(), [&](const QString &format) {
+ QDir scanDir(config.getOutputDir(format));
+ QStringList foundModules =
+ scanDir.entryList(QStringList("*.index"), QDir::Files);
+ std::transform(
+ foundModules.begin(), foundModules.end(), foundModules.begin(),
+ [](const QString &index) { return QFileInfo(index).baseName(); });
+ config.dependModules() << foundModules;
+ });
+ } else {
+ for (const auto &indexDir : config.indexDirs()) {
+ QDir scanDir = QDir(indexDir);
+ scanDir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
+ QFileInfoList dirList = scanDir.entryInfoList();
+ for (const auto &dir : dirList)
+ config.dependModules().append(dir.fileName());
+ }
+ }
+ // Remove self-dependencies and possible duplicates
+ QString project{config.get(CONFIG_PROJECT).asString()};
+ config.dependModules().removeAll(project.toLower());
+ config.dependModules().removeDuplicates();
+ qCCritical(lcQdoc) << "Configuration file for"
+ << project << "has depends = *; loading all"
+ << config.dependModules().size()
+ << "index files found";
+ }
+ for (const auto &module : config.dependModules()) {
+ QList<QFileInfo> foundIndices;
+ // Always look in module-specific subdir, even with *.nosubdirs config
+ bool useModuleSubDir = !subDirs.contains(module);
+ subDirs << module;
+
+ for (const auto &dir : config.indexDirs()) {
+ for (const auto &subDir : std::as_const(subDirs)) {
+ QString fileToLookFor = dir + QLatin1Char('/') + subDir + QLatin1Char('/')
+ + module + ".index";
+ if (QFile::exists(fileToLookFor)) {
+ QFileInfo tempFileInfo(fileToLookFor);
+ if (!foundIndices.contains(tempFileInfo))
+ foundIndices.append(tempFileInfo);
+ }
+ }
+ }
+ // Clear the temporary module-specific subdir
+ if (useModuleSubDir)
+ subDirs.remove(module);
+ std::sort(foundIndices.begin(), foundIndices.end(), creationTimeBefore);
+ QString indexToAdd;
+ if (foundIndices.size() > 1) {
+ /*
+ QDoc should always use the last entry in the multimap when there are
+ multiple index files for a module, since the last modified file has the
+ highest UNIX timestamp.
+ */
+ QStringList indexPaths;
+ indexPaths.reserve(foundIndices.size());
+ for (const auto &found : std::as_const(foundIndices))
+ indexPaths << found.absoluteFilePath();
+ if (warn) {
+ Location().warning(
+ QString("Multiple index files found for dependency \"%1\":\n%2")
+ .arg(module, indexPaths.join('\n')));
+ Location().warning(
+ QString("Using %1 as index file for dependency \"%2\"")
+ .arg(foundIndices[foundIndices.size() - 1].absoluteFilePath(),
+ module));
+ }
+ indexToAdd = foundIndices[foundIndices.size() - 1].absoluteFilePath();
+ } else if (foundIndices.size() == 1) {
+ indexToAdd = foundIndices[0].absoluteFilePath();
+ }
+ if (!indexToAdd.isEmpty()) {
+ if (!indexFiles.contains(indexToAdd))
+ indexFiles << indexToAdd;
+ } else if (!asteriskUsed && warn) {
+ Location().warning(
+ QString(R"("%1" Cannot locate index file for dependency "%2")")
+ .arg(config.get(CONFIG_PROJECT).asString(), module));
+ }
+ }
+ } else if (warn) {
+ Location().warning(
+ QLatin1String("Dependent modules specified, but no index directories were set. "
+ "There will probably be errors for missing links."));
+ }
+ }
+ qdb->readIndexes(indexFiles);
+}
+
+/*!
+ \internal
+ Prints to stderr the name of the project that QDoc is running for,
+ in which mode and which phase.
+
+ If QDoc is not running in debug mode or --log-progress command line
+ option is not set, do nothing.
+ */
+void logStartEndMessage(const QLatin1String &startStop, Config &config)
+{
+ if (!config.get(CONFIG_LOGPROGRESS).asBool())
+ return;
+
+ const QString runName = " qdoc for "
+ + config.get(CONFIG_PROJECT).asString()
+ + QLatin1String(" in ")
+ + QLatin1String(config.singleExec() ? "single" : "dual")
+ + QLatin1String(" process mode: ")
+ + QLatin1String(config.preparing() ? "prepare" : "generate")
+ + QLatin1String(" phase.");
+
+ const QString msg = startStop + runName;
+ qCInfo(lcQdoc) << msg.toUtf8().data();
+}
+
+/*!
+ Processes the qdoc config file \a fileName. This is the controller for all
+ of QDoc. The \a config instance represents the configuration data for QDoc.
+ All other classes are initialized with the same config.
+ */
+static void processQdocconfFile(const QString &fileName)
+{
+ Config &config = Config::instance();
+ config.setPreviousCurrentDir(QDir::currentPath());
+
+ /*
+ With the default configuration values in place, load
+ the qdoc configuration file. Note that the configuration
+ file may include other configuration files.
+
+ The Location class keeps track of the current location
+ in the file being processed, mainly for error reporting
+ purposes.
+ */
+ Location::initialize();
+ config.load(fileName);
+ QString project{config.get(CONFIG_PROJECT).asString()};
+ if (project.isEmpty()) {
+ qCCritical(lcQdoc) << QLatin1String("qdoc can't run; no project set in qdocconf file");
+ exit(1);
+ }
+ Location::terminate();
+
+ config.setCurrentDir(QFileInfo(fileName).path());
+ if (!config.currentDir().isEmpty())
+ QDir::setCurrent(config.currentDir());
+
+ logStartEndMessage(QLatin1String("Start"), config);
+
+ if (config.getDebug()) {
+ Utilities::startDebugging(QString("command line"));
+ qCDebug(lcQdoc).noquote() << "Arguments:" << QCoreApplication::arguments();
+ }
+
+ // <<TODO: [cleanup-temporary-kludges]
+ // The underlying validation should be performed at the
+ // configuration level during parsing.
+ // This cannot be done straightforwardly with how the Config class
+ // is implemented.
+ // When the Config class will be deprived of logic and
+ // restructured, the compiler will notify us of this kludge, but
+ // remember to reevaluate the code itself considering the new
+ // data-flow and the possibility for optimizations as this is not
+ // done for temporary code. Indeed some of the code is visibly wasteful.
+ // Similarly, ensure that the loose definition that we use here is
+ // not preserved.
+
+ QStringList search_directories{config.getCanonicalPathList(CONFIG_EXAMPLEDIRS)};
+ QStringList image_search_directories{config.getCanonicalPathList(CONFIG_IMAGEDIRS)};
+
+ const auto& [excludedDirs, excludedFiles] = config.getExcludedPaths();
+
+ qCDebug(lcQdoc, "Adding doc/image dirs found in exampledirs to imagedirs");
+ QSet<QString> exampleImageDirs;
+ QStringList exampleImageList = config.getExampleImageFiles(excludedDirs, excludedFiles);
+ for (const auto &image : exampleImageList) {
+ if (image.contains("doc/images")) {
+ QString t = image.left(image.lastIndexOf("doc/images") + 10);
+ if (!exampleImageDirs.contains(t))
+ exampleImageDirs.insert(t);
+ }
+ }
+
+ // REMARK: The previous system discerned between search directories based on the kind of file that was searched for.
+ // For example, an image search was bounded to some directories
+ // that may or may not be the same as the ones where examples are
+ // searched for.
+ // The current Qt documentation does not use this feature. That
+ // is, the output of QDoc when a unified search list is used is
+ // the same as the output for that of separated lists.
+ // For this reason, we currently simplify the process, albeit this
+ // may at some point change, by joining the various lists into a
+ // single search list and a unified interface.
+ // Do note that the configuration still allows for those
+ // parameters to be user defined in a split-way as this will not
+ // be able to be changed until Config itself is looked upon.
+ // Hence, we join the various directory sources into one list for the time being.
+ // Do note that this means that the amount of searched directories for a file is now increased.
+ // This shouldn't matter as the amount of directories is expected
+ // to be generally small and the search routine complexity is
+ // linear in the amount of directories.
+ // There are some complications that may arise in very specific
+ // cases by this choice (some of which where there before under
+ // possibly different circumstances), making some files
+ // unreachable.
+ // See the remarks in FileResolver for more infomration.
+ std::copy(image_search_directories.begin(), image_search_directories.end(), std::back_inserter(search_directories));
+ std::copy(exampleImageDirs.begin(), exampleImageDirs.end(), std::back_inserter(search_directories));
+
+ std::vector<DirectoryPath> validated_search_directories{};
+ for (const QString& path : search_directories) {
+ auto maybe_validated_path{DirectoryPath::refine(path)};
+ if (!maybe_validated_path)
+ // TODO: [uncentralized-admonition]
+ qCDebug(lcQdoc).noquote() << u"%1 is not a valid path, it will be ignored when resolving a file"_s.arg(path);
+ else validated_search_directories.push_back(*maybe_validated_path);
+ }
+
+ // TODO>>
+
+ FileResolver file_resolver{std::move(validated_search_directories)};
+
+ // REMARK: The constructor for generators doesn't actually perform
+ // initialization of their content.
+ // Indeed, Generators use the general antipattern of the static
+ // initialize-terminate non-scoped mutable state that we see in
+ // many parts of QDoc.
+ // In their constructor, Generators mainly register themselves into a static list.
+ // Previously, this was done at the start of main.
+ // To be able to pass a correct FileResolver or other systems, we
+ // need to construct them after the configuration has been read
+ // and has been destructured.
+ // For this reason, their construction was moved here.
+ // This function may be called more than once for some of QDoc's
+ // call, albeit this should not actually happen in Qt's
+ // documentation.
+ // Then, constructing the generators here might provide for some
+ // unexpected behavior as new generators are appended to the list
+ // and never used, considering that the list is searched in a
+ // linearly fashion and each generator of some type T, in the
+ // current codebase, will always be found if another instance of
+ // that same type would have been found.
+ // Furthermore, those instances would be destroyed by then, such
+ // that accessing them would be erroneous.
+ // To avoid this, the static list was made to be cleared in
+ // Generator::terminate, which, in theory, will be called before
+ // the generators will be constructed again.
+ // We could have used the initialize method for this, but this
+ // would force us into a limited and more complex semantic, see an
+ // example of this in DocParser, and would restrain us further to
+ // the initialize-terminate idiom which is expect to be purged in
+ // the future.
+ HtmlGenerator htmlGenerator{file_resolver};
+ WebXMLGenerator webXMLGenerator{file_resolver};
+ DocBookGenerator docBookGenerator{file_resolver};
+
+ Generator::initialize();
+
+ /*
+ Initialize the qdoc database, where all the parsed source files
+ will be stored. The database includes a tree of nodes, which gets
+ built as the source files are parsed. The documentation output is
+ generated by traversing that tree.
+
+ Note: qdocDB() allocates a new instance only if no instance exists.
+ So it is safe to call qdocDB() any time.
+ */
+ QDocDatabase *qdb = QDocDatabase::qdocDB();
+ qdb->setVersion(config.get(CONFIG_VERSION).asString());
+ /*
+ By default, the only output format is HTML.
+ */
+ const QSet<QString> outputFormats = config.getOutputFormats();
+
+ qdb->clearSearchOrder();
+ if (!config.singleExec()) {
+ if (!config.preparing()) {
+ qCDebug(lcQdoc, " loading index files");
+ loadIndexFiles(outputFormats);
+ qCDebug(lcQdoc, " done loading index files");
+ }
+ qdb->newPrimaryTree(project);
+ } else if (config.preparing())
+ qdb->newPrimaryTree(project);
+ else
+ qdb->setPrimaryTree(project);
+
+ // Retrieve the dependencies if loadIndexFiles() was not called
+ if (config.dependModules().isEmpty()) {
+ config.dependModules() = config.get(CONFIG_DEPENDS).asStringList();
+ config.dependModules().removeDuplicates();
+ }
+ qdb->setSearchOrder(config.dependModules());
+
+ // Store the title of the index (landing) page
+ NamespaceNode *root = qdb->primaryTreeRoot();
+ if (root) {
+ QString title{config.get(CONFIG_NAVIGATION + Config::dot + CONFIG_LANDINGPAGE).asString()};
+ root->tree()->setIndexTitle(
+ config.get(CONFIG_NAVIGATION + Config::dot + CONFIG_LANDINGTITLE).asString(title));
+ }
+
+
+ std::vector<QByteArray> include_paths{};
+ {
+ auto args = config.getCanonicalPathList(CONFIG_INCLUDEPATHS,
+ Config::IncludePaths);
+#ifdef Q_OS_MACOS
+ args.append(Utilities::getInternalIncludePaths(QStringLiteral("clang++")));
+#elif defined(Q_OS_LINUX)
+ args.append(Utilities::getInternalIncludePaths(QStringLiteral("g++")));
+#endif
+
+ for (const auto &path : std::as_const(args)) {
+ if (!path.isEmpty())
+ include_paths.push_back(path.toUtf8());
+ }
+
+ include_paths.erase(std::unique(include_paths.begin(), include_paths.end()),
+ include_paths.end());
+ }
+
+ QList<QByteArray> clang_defines{};
+ {
+ const QStringList config_defines{config.get(CONFIG_DEFINES).asStringList()};
+ for (const QString &def : config_defines) {
+ if (!def.contains(QChar('*'))) {
+ QByteArray tmp("-D");
+ tmp.append(def.toUtf8());
+ clang_defines.append(tmp.constData());
+ }
+ }
+ }
+
+ std::optional<PCHFile> pch = std::nullopt;
+ if (config.dualExec() || config.preparing()) {
+ const QString moduleHeader = config.get(CONFIG_MODULEHEADER).asString();
+ pch = buildPCH(
+ QDocDatabase::qdocDB(),
+ moduleHeader.isNull() ? project : moduleHeader,
+ Config::instance().getHeaderFiles(),
+ include_paths,
+ clang_defines
+ );
+ }
+
+ ClangCodeParser clangParser(QDocDatabase::qdocDB(), Config::instance(), include_paths, clang_defines, pch);
+ PureDocParser docParser{config.location()};
+
+ /*
+ Initialize all the classes and data structures with the
+ qdoc configuration. This is safe to do for each qdocconf
+ file processed, because all the data structures created
+ are either cleared after they have been used, or they
+ are cleared in the terminate() functions below.
+ */
+ Location::initialize();
+ Tokenizer::initialize();
+ CodeMarker::initialize();
+ CodeParser::initialize();
+ Doc::initialize(file_resolver);
+
+ if (config.dualExec() || config.preparing()) {
+ QStringList sourceList;
+
+ qCDebug(lcQdoc, "Reading sourcedirs");
+ sourceList =
+ config.getAllFiles(CONFIG_SOURCES, CONFIG_SOURCEDIRS, excludedDirs, excludedFiles);
+
+ std::vector<QString> sources{};
+ for (const auto &source : sourceList) {
+ if (source.contains(QLatin1String("doc/snippets")))
+ continue;
+ sources.emplace_back(source);
+ }
+ /*
+ Find all the qdoc files in the example dirs, and add
+ them to the source files to be parsed.
+ */
+ qCDebug(lcQdoc, "Reading exampledirs");
+ QStringList exampleQdocList = config.getExampleQdocFiles(excludedDirs, excludedFiles);
+ for (const auto &example : exampleQdocList) {
+ sources.emplace_back(example);
+ }
+
+ /*
+ Parse each source text file in the set using the appropriate parser and
+ add it to the big tree.
+ */
+ if (config.get(CONFIG_LOGPROGRESS).asBool())
+ qCInfo(lcQdoc) << "Parse source files for" << project;
+
+
+ auto headers = config.getHeaderFiles();
+ CppCodeParser cpp_code_parser(FnCommandParser(qdb, headers, clang_defines, pch));
+
+ SourceFileParser source_file_parser{clangParser, docParser};
+ parseSourceFiles(std::move(sources), source_file_parser, cpp_code_parser);
+
+ if (config.get(CONFIG_LOGPROGRESS).asBool())
+ qCInfo(lcQdoc) << "Source files parsed for" << project;
+ }
+ /*
+ Now the primary tree has been built from all the header and
+ source files. Resolve all the class names, function names,
+ targets, URLs, links, and other stuff that needs resolving.
+ */
+ qCDebug(lcQdoc, "Resolving stuff prior to generating docs");
+ qdb->resolveStuff();
+
+ /*
+ The primary tree is built and all the stuff that needed
+ resolving has been resolved. Now traverse the tree and
+ generate the documentation output. More than one output
+ format can be requested. The tree is traversed for each
+ one.
+ */
+ qCDebug(lcQdoc, "Generating docs");
+ for (const auto &format : outputFormats) {
+ auto *generator = Generator::generatorForFormat(format);
+ if (generator) {
+ generator->initializeFormat();
+ generator->generateDocs();
+ } else {
+ config.get(CONFIG_OUTPUTFORMATS)
+ .location()
+ .fatal(QStringLiteral("QDoc: Unknown output format '%1'").arg(format));
+ }
+ }
+
+ qCDebug(lcQdoc, "Terminating qdoc classes");
+ if (Utilities::debugging())
+ Utilities::stopDebugging(project);
+
+ logStartEndMessage(QLatin1String("End"), config);
+ QDocDatabase::qdocDB()->setVersion(QString());
+ Generator::terminate();
+ CodeParser::terminate();
+ CodeMarker::terminate();
+ Doc::terminate();
+ Tokenizer::terminate();
+ Location::terminate();
+ QDir::setCurrent(config.previousCurrentDir());
+
+ qCDebug(lcQdoc, "qdoc classes terminated");
+}
+
+/*!
+ \internal
+ For each file in \a qdocFiles, first clear the configured module
+ dependencies and then pass the file to processQdocconfFile().
+
+ \sa processQdocconfFile(), singleExecutionMode(), dualExecutionMode()
+*/
+static void clearModuleDependenciesAndProcessQdocconfFile(const QStringList &qdocFiles)
+{
+ for (const auto &file : std::as_const(qdocFiles)) {
+ Config::instance().dependModules().clear();
+ processQdocconfFile(file);
+ }
+}
+
+/*!
+ \internal
+
+ A single QDoc process for prepare and generate phases.
+ The purpose is to first generate all index files for all documentation
+ projects that combined make out the documentation set being generated.
+ This allows QDoc to link to all content contained in all projects, e.g.
+ user-defined types or overview documentation, regardless of the project
+ that content belongs to when generating the final output.
+*/
+static void singleExecutionMode()
+{
+ const QStringList qdocFiles = Config::loadMaster(Config::instance().qdocFiles().at(0));
+
+ Config::instance().setQDocPass(Config::Prepare);
+ clearModuleDependenciesAndProcessQdocconfFile(qdocFiles);
+
+ Config::instance().setQDocPass(Config::Generate);
+ QDocDatabase::qdocDB()->processForest();
+ clearModuleDependenciesAndProcessQdocconfFile(qdocFiles);
+}
+
+/*!
+ \internal
+
+ Process each .qdocconf-file passed as command line argument(s).
+*/
+static void dualExecutionMode()
+{
+ const QStringList qdocFiles = Config::instance().qdocFiles();
+ clearModuleDependenciesAndProcessQdocconfFile(qdocFiles);
+}
+
+QT_END_NAMESPACE
+
+int main(int argc, char **argv)
+{
+ QT_USE_NAMESPACE
+
+ // Initialize Qt:
+#ifndef QT_BOOTSTRAPPED
+ // use deterministic hash seed
+ QHashSeed::setDeterministicGlobalSeed();
+#endif
+ QCoreApplication app(argc, argv);
+ app.setApplicationVersion(QLatin1String(QT_VERSION_STR));
+
+ // Instantiate various singletons (used via static methods):
+ /*
+ Create code parsers for the languages to be parsed,
+ and create a tree for C++.
+ */
+ QmlCodeParser qmlParser;
+
+ /*
+ Create code markers for plain text, C++,
+ and QML.
+
+ The plain CodeMarker must be instantiated first because it is used as
+ fallback when the other markers cannot be used.
+
+ Each marker instance is prepended to the CodeMarker::markers list by the
+ base class constructor.
+ */
+ CodeMarker fallbackMarker;
+ CppCodeMarker cppMarker;
+ QmlCodeMarker qmlMarker;
+
+ Config::instance().init("QDoc", app.arguments());
+
+ if (Config::instance().qdocFiles().isEmpty())
+ Config::instance().showHelp();
+
+ if (Config::instance().singleExec()) {
+ singleExecutionMode();
+ } else {
+ dualExecutionMode();
+ }
+
+ // Tidy everything away:
+ QmlTypeNode::terminate();
+ QDocDatabase::destroyQdocDB();
+ return Location::exitCode();
+}
diff --git a/src/qdoc/qdoc/src/qdoc/manifestwriter.cpp b/src/qdoc/qdoc/src/qdoc/manifestwriter.cpp
new file mode 100644
index 000000000..97bf7f190
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/manifestwriter.cpp
@@ -0,0 +1,405 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#include "manifestwriter.h"
+
+#include "config.h"
+#include "examplenode.h"
+#include "generator.h"
+#include "qdocdatabase.h"
+
+#include <QtCore/qmap.h>
+#include <QtCore/qset.h>
+#include <QtCore/qxmlstream.h>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \internal
+
+ For each attribute in a map of attributes, checks if the attribute is
+ found in \a usedAttributes. If it is not found, issues a warning specific
+ to the attribute.
+ */
+void warnAboutUnusedAttributes(const QStringList &usedAttributes, const ExampleNode *example)
+{
+ QMap<QString, QString> attributesToWarnFor;
+ attributesToWarnFor.insert(QStringLiteral("imageUrl"),
+ QStringLiteral("Example documentation should have at least one '\\image'"));
+ attributesToWarnFor.insert(QStringLiteral("projectPath"),
+ QStringLiteral("Example has no project file"));
+
+ for (auto it = attributesToWarnFor.cbegin(); it != attributesToWarnFor.cend(); ++it) {
+ if (!usedAttributes.contains(it.key()))
+ example->doc().location().warning(example->name() + ": " + it.value());
+ }
+}
+
+/*!
+ \internal
+
+ Write the description element. The description for an example is set
+ with the \brief command. If no brief is available, the element is set
+ to "No description available".
+ */
+
+void writeDescription(QXmlStreamWriter *writer, const ExampleNode *example)
+{
+ Q_ASSERT(writer && example);
+ writer->writeStartElement("description");
+ const Text brief = example->doc().briefText();
+ if (!brief.isEmpty())
+ writer->writeCDATA(brief.toString());
+ else
+ writer->writeCDATA(QString("No description available"));
+ writer->writeEndElement(); // description
+}
+
+/*!
+ \internal
+
+ Returns a list of \a files that Qt Creator should open for the \a exampleName.
+ */
+QMap<int, QString> getFilesToOpen(const QStringList &files, const QString &exampleName)
+{
+ QMap<int, QString> filesToOpen;
+ for (const QString &file : files) {
+ QFileInfo fileInfo(file);
+ QString fileName = fileInfo.fileName().toLower();
+ // open .qml, .cpp and .h files with a
+ // basename matching the example (project) name
+ // QMap key indicates the priority -
+ // the lowest value will be the top-most file
+ if ((fileInfo.baseName().compare(exampleName, Qt::CaseInsensitive) == 0)) {
+ if (fileName.endsWith(".qml"))
+ filesToOpen.insert(0, file);
+ else if (fileName.endsWith(".cpp"))
+ filesToOpen.insert(1, file);
+ else if (fileName.endsWith(".h"))
+ filesToOpen.insert(2, file);
+ }
+ // main.qml takes precedence over main.cpp
+ else if (fileName.endsWith("main.qml")) {
+ filesToOpen.insert(3, file);
+ } else if (fileName.endsWith("main.cpp")) {
+ filesToOpen.insert(4, file);
+ }
+ }
+
+ return filesToOpen;
+}
+
+/*!
+ \internal
+ \brief Writes the lists of files to open for the example.
+
+ Writes out the \a filesToOpen and the full \a installPath through \a writer.
+ */
+void writeFilesToOpen(QXmlStreamWriter &writer, const QString &installPath,
+ const QMap<int, QString> &filesToOpen)
+{
+ for (auto it = filesToOpen.constEnd(); it != filesToOpen.constBegin();) {
+ writer.writeStartElement("fileToOpen");
+ if (--it == filesToOpen.constBegin()) {
+ writer.writeAttribute(QStringLiteral("mainFile"), QStringLiteral("true"));
+ }
+ writer.writeCharacters(installPath + it.value());
+ writer.writeEndElement();
+ }
+}
+
+/*!
+ \internal
+ \brief Writes example metadata into \a writer.
+
+ For instance,
+
+
+ \ meta category {Application Example}
+
+ becomes
+
+ <meta>
+ <entry name="category">Application Example</entry>
+ <meta>
+*/
+static void writeMetaInformation(QXmlStreamWriter &writer, const QStringMultiMap &map)
+{
+ if (map.isEmpty())
+ return;
+
+ writer.writeStartElement("meta");
+ for (auto it = map.constBegin(); it != map.constEnd(); ++it) {
+ writer.writeStartElement("entry");
+ writer.writeAttribute(QStringLiteral("name"), it.key());
+ writer.writeCharacters(it.value());
+ writer.writeEndElement(); // tag
+ }
+ writer.writeEndElement(); // meta
+}
+
+/*!
+ \class ManifestWriter
+ \internal
+ \brief The ManifestWriter is responsible for writing manifest files.
+ */
+ManifestWriter::ManifestWriter()
+{
+ Config &config = Config::instance();
+ m_project = config.get(CONFIG_PROJECT).asString();
+ m_outputDirectory = config.getOutputDir();
+ m_qdb = QDocDatabase::qdocDB();
+
+ const QString prefix = CONFIG_QHP + Config::dot + m_project + Config::dot;
+ m_manifestDir =
+ QLatin1String("qthelp://") + config.get(prefix + QLatin1String("namespace")).asString();
+ m_manifestDir +=
+ QLatin1Char('/') + config.get(prefix + QLatin1String("virtualFolder")).asString()
+ + QLatin1Char('/');
+ readManifestMetaContent();
+ m_examplesPath = config.get(CONFIG_EXAMPLESINSTALLPATH).asString();
+ if (!m_examplesPath.isEmpty())
+ m_examplesPath += QLatin1Char('/');
+}
+
+template <typename F>
+void ManifestWriter::processManifestMetaContent(const QString &fullName, F matchFunc)
+{
+ for (const auto &index : m_manifestMetaContent) {
+ const auto &names = index.m_names;
+ for (const QString &name : names) {
+ bool match;
+ qsizetype wildcard = name.indexOf(QChar('*'));
+ switch (wildcard) {
+ case -1: // no wildcard used, exact match required
+ match = (fullName == name);
+ break;
+ case 0: // '*' matches all examples
+ match = true;
+ break;
+ default: // match with wildcard at the end
+ match = fullName.startsWith(name.left(wildcard));
+ }
+ if (match)
+ matchFunc(index);
+ }
+ }
+}
+
+/*!
+ This function outputs one or more manifest files in XML.
+ They are used by Creator.
+ */
+void ManifestWriter::generateManifestFiles()
+{
+ generateExampleManifestFile();
+ m_qdb->exampleNodeMap().clear();
+ m_manifestMetaContent.clear();
+}
+
+/*
+ Returns Qt module name as lower case tag, stripping Qt prefix:
+ QtQuickControls -> quickcontrols
+ QtOpenGL -> opengl
+ QtQuick3D -> quick3d
+ */
+static QString moduleNameAsTag(const QString &module)
+{
+ QString moduleName = module;
+ if (moduleName.startsWith("Qt"))
+ moduleName = moduleName.mid(2);
+ // Some examples are in QtDoc module, but 'doc' as tag makes little sense
+ if (moduleName == "Doc")
+ return QString();
+ return moduleName.toLower();
+}
+
+/*
+ Return tags that were added with
+ \ meta {tag} {tag1[,tag2,...]}
+ or
+ \ meta {tags} {tag1[,tag2,...]}
+ from example metadata
+ */
+static QSet<QString> tagsAddedWithMetaCommand(const ExampleNode *example)
+{
+ Q_ASSERT(example);
+
+ QSet<QString> tags;
+ const QStringMultiMap *metaTagMap = example->doc().metaTagMap();
+ if (metaTagMap) {
+ QStringList originalTags = metaTagMap->values("tag");
+ originalTags << metaTagMap->values("tags");
+ for (const auto &tag : originalTags) {
+ const auto &tagList = tag.toLower().split(QLatin1Char(','), Qt::SkipEmptyParts);
+ tags += QSet<QString>(tagList.constBegin(), tagList.constEnd());
+ }
+ }
+ return tags;
+}
+
+/*
+ Writes the contents of tags into writer, formatted as
+ <tags>tag1,tag2..</tags>
+ */
+static void writeTagsElement(QXmlStreamWriter *writer, const QSet<QString> &tags)
+{
+ Q_ASSERT(writer);
+ if (tags.isEmpty())
+ return;
+
+ writer->writeStartElement("tags");
+ QStringList sortedTags = tags.values();
+ sortedTags.sort();
+ writer->writeCharacters(sortedTags.join(","));
+ writer->writeEndElement(); // tags
+}
+
+/*!
+ This function is called by generateExampleManifestFiles(), once
+ for each manifest file to be generated.
+ */
+void ManifestWriter::generateExampleManifestFile()
+{
+ const ExampleNodeMap &exampleNodeMap = m_qdb->exampleNodeMap();
+ if (exampleNodeMap.isEmpty())
+ return;
+
+ const QString outputFileName = "examples-manifest.xml";
+ QFile outputFile(m_outputDirectory + QLatin1Char('/') + outputFileName);
+ if (!outputFile.open(QFile::WriteOnly | QFile::Text))
+ return;
+
+ QXmlStreamWriter writer(&outputFile);
+ writer.setAutoFormatting(true);
+ writer.writeStartDocument();
+ writer.writeStartElement("instructionals");
+ writer.writeAttribute("module", m_project);
+ writer.writeStartElement("examples");
+
+ for (const auto &example : exampleNodeMap.values()) {
+ QMap<QString, QString> usedAttributes;
+ QSet<QString> tags;
+ const QString installPath = retrieveExampleInstallationPath(example);
+ const QString fullName = m_project + QLatin1Char('/') + example->title();
+
+ processManifestMetaContent(
+ fullName, [&](const ManifestMetaFilter &filter) { tags += filter.m_tags; });
+ tags += tagsAddedWithMetaCommand(example);
+ // omit from the manifest if explicitly marked broken
+ if (tags.contains("broken"))
+ continue;
+
+ // attributes that are always written for the element
+ usedAttributes.insert("name", example->title());
+ usedAttributes.insert("docUrl", m_manifestDir + Generator::currentGenerator()->fileBase(example) + ".html");
+
+ if (!example->projectFile().isEmpty())
+ usedAttributes.insert("projectPath", installPath + example->projectFile());
+ if (!example->imageFileName().isEmpty())
+ usedAttributes.insert("imageUrl", m_manifestDir + example->imageFileName());
+
+ processManifestMetaContent(fullName, [&](const ManifestMetaFilter &filter) {
+ const auto attributes = filter.m_attributes;
+ for (const auto &attribute : attributes) {
+ const QLatin1Char div(':');
+ QStringList attrList = attribute.split(div);
+ if (attrList.size() == 1)
+ attrList.append(QStringLiteral("true"));
+ QString attrName = attrList.takeFirst();
+ if (!usedAttributes.contains(attrName))
+ usedAttributes.insert(attrName, attrList.join(div));
+ }
+ });
+
+ writer.writeStartElement("example");
+ for (auto it = usedAttributes.cbegin(); it != usedAttributes.cend(); ++it)
+ writer.writeAttribute(it.key(), it.value());
+
+ warnAboutUnusedAttributes(usedAttributes.keys(), example);
+ writeDescription(&writer, example);
+
+ const QString moduleNameTag = moduleNameAsTag(m_project);
+ if (!moduleNameTag.isEmpty())
+ tags << moduleNameTag;
+ writeTagsElement(&writer, tags);
+
+ const QString exampleName = example->name().mid(example->name().lastIndexOf('/') + 1);
+ const auto files = example->files();
+ const QMap<int, QString> filesToOpen = getFilesToOpen(files, exampleName);
+ writeFilesToOpen(writer, installPath, filesToOpen);
+
+ if (const QStringMultiMap *metaTagMapP = example->doc().metaTagMap()) {
+ // Write \meta elements into the XML, except for 'tag', 'installpath',
+ // as they are handled separately
+ QStringMultiMap map = *metaTagMapP;
+ erase_if(map, [](QStringMultiMap::iterator iter) {
+ return iter.key() == "tag" || iter.key() == "tags" || iter.key() == "installpath";
+ });
+ writeMetaInformation(writer, map);
+ }
+
+ writer.writeEndElement(); // example
+ }
+
+ writer.writeEndElement(); // examples
+
+ if (!m_exampleCategories.isEmpty()) {
+ writer.writeStartElement("categories");
+ for (const auto &examplecategory : m_exampleCategories) {
+ writer.writeStartElement("category");
+ writer.writeCharacters(examplecategory);
+ writer.writeEndElement();
+ }
+ writer.writeEndElement(); // categories
+ }
+
+ writer.writeEndElement(); // instructionals
+ writer.writeEndDocument();
+ outputFile.close();
+}
+
+/*!
+ Reads metacontent - additional attributes and tags to apply
+ when generating manifest files, read from config.
+
+ The manifest metacontent map is cleared immediately after
+ the manifest files have been generated.
+ */
+void ManifestWriter::readManifestMetaContent()
+{
+ Config &config = Config::instance();
+ const QStringList names{config.get(CONFIG_MANIFESTMETA
+ + Config::dot
+ + QStringLiteral("filters")).asStringList()};
+
+ for (const auto &manifest : names) {
+ ManifestMetaFilter filter;
+ QString prefix = CONFIG_MANIFESTMETA + Config::dot + manifest + Config::dot;
+ filter.m_names = config.get(prefix + QStringLiteral("names")).asStringSet();
+ filter.m_attributes = config.get(prefix + QStringLiteral("attributes")).asStringSet();
+ filter.m_tags = config.get(prefix + QStringLiteral("tags")).asStringSet();
+ m_manifestMetaContent.append(filter);
+ }
+
+ m_exampleCategories = config.get(CONFIG_MANIFESTMETA
+ + QStringLiteral(".examplecategories")).asStringList();
+}
+
+/*!
+ Retrieve the install path for the \a example as specified with
+ the \\meta command, or fall back to the one defined in .qdocconf.
+ */
+QString ManifestWriter::retrieveExampleInstallationPath(const ExampleNode *example) const
+{
+ QString installPath;
+ if (example->doc().metaTagMap())
+ installPath = example->doc().metaTagMap()->value(QLatin1String("installpath"));
+ if (installPath.isEmpty())
+ installPath = m_examplesPath;
+ if (!installPath.isEmpty() && !installPath.endsWith(QLatin1Char('/')))
+ installPath += QLatin1Char('/');
+
+ return installPath;
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/manifestwriter.h b/src/qdoc/qdoc/src/qdoc/manifestwriter.h
new file mode 100644
index 000000000..730835b9e
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/manifestwriter.h
@@ -0,0 +1,46 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#ifndef MANIFESTWRITER_H
+#define MANIFESTWRITER_H
+
+#include <QtCore/qlist.h>
+#include <QtCore/qset.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+class ExampleNode;
+class QDocDatabase;
+class QXmlStreamWriter;
+class ManifestWriter
+{
+ struct ManifestMetaFilter
+ {
+ QSet<QString> m_names {};
+ QSet<QString> m_attributes {};
+ QSet<QString> m_tags {};
+ };
+
+public:
+ ManifestWriter();
+ void generateManifestFiles();
+ void generateExampleManifestFile();
+ void readManifestMetaContent();
+ QString retrieveExampleInstallationPath(const ExampleNode *example) const;
+
+private:
+ QString m_manifestDir {};
+ QString m_examplesPath {};
+ QString m_outputDirectory {};
+ QString m_project {};
+ QDocDatabase *m_qdb { nullptr };
+ QList<ManifestMetaFilter> m_manifestMetaContent {};
+ QStringList m_exampleCategories {};
+
+ template <typename F>
+ void processManifestMetaContent(const QString &fullName, F matchFunc);
+};
+
+QT_END_NAMESPACE
+
+#endif // MANIFESTWRITER_H
diff --git a/src/qdoc/qdoc/src/qdoc/namespacenode.cpp b/src/qdoc/qdoc/src/qdoc/namespacenode.cpp
new file mode 100644
index 000000000..22686c050
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/namespacenode.cpp
@@ -0,0 +1,190 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "namespacenode.h"
+
+#include "codeparser.h"
+#include "tree.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class NamespaceNode
+ \brief This class represents a C++ namespace.
+
+ A namespace can be used in multiple C++ modules, so there
+ can be a NamespaceNode for namespace Xxx in more than one
+ Node tree.
+ */
+
+/*! \fn NamespaceNode(Aggregate *parent, const QString &name)
+ Constructs a NamespaceNode with the specified \a parent and \a name.
+ The node type is Node::Namespace.
+ */
+
+/*!
+ Returns true if this namespace is to be documented in the
+ current module. There can be elements declared in this
+ namespace spread over multiple modules. Those elements are
+ documented in the modules where they are declared, but they
+ are linked to from the namespace page in the module where
+ the namespace itself is documented.
+ */
+bool NamespaceNode::isDocumentedHere() const
+{
+ return m_whereDocumented == tree()->camelCaseModuleName();
+}
+
+/*!
+ Returns true if this namespace node contains at least one
+ child that has documentation and is not private or internal.
+ */
+bool NamespaceNode::hasDocumentedChildren() const
+{
+ return std::any_of(m_children.cbegin(), m_children.cend(),
+ [](Node *child) { return child->isInAPI(); });
+}
+
+/*!
+ Report qdoc warning for each documented child in a namespace
+ that is not documented. This function should only be called
+ when the namespace is not documented.
+ */
+void NamespaceNode::reportDocumentedChildrenInUndocumentedNamespace() const
+{
+ for (const auto *node : std::as_const(m_children)) {
+ if (node->isInAPI()) {
+ QString msg1 = node->name();
+ if (node->isFunction())
+ msg1 += "()";
+ msg1 += QStringLiteral(
+ " is documented, but namespace %1 is not documented in any module.")
+ .arg(name());
+ QString msg2 =
+ QStringLiteral(
+ "Add /*! '\\%1 %2' ... */ or remove the qdoc comment marker (!) at "
+ "that line number.")
+ .arg(COMMAND_NAMESPACE, name());
+
+ node->doc().location().warning(msg1, msg2);
+ }
+ }
+}
+
+/*!
+ Returns true if this namespace node is not private and
+ contains at least one public child node with documentation.
+ */
+bool NamespaceNode::docMustBeGenerated() const
+{
+ if (isInAPI())
+ return true;
+ return hasDocumentedChildren();
+}
+
+/*!
+ Returns a const reference to the namespace node's list of
+ included children, which contains pointers to all the child
+ nodes of other namespace nodes that have the same name as
+ this namespace node. The list is built after the prepare
+ phase has been run but just before the generate phase. It
+ is buils by QDocDatabase::resolveNamespaces().
+
+ \sa QDocDatabase::resolveNamespaces()
+ */
+const NodeList &NamespaceNode::includedChildren() const
+{
+ return m_includedChildren;
+}
+
+/*!
+ This function is only called from QDocDatabase::resolveNamespaces().
+
+ \sa includedChildren(), QDocDatabase::resolveNamespaces()
+ */
+void NamespaceNode::includeChild(Node *child)
+{
+ m_includedChildren.append(child);
+}
+
+/*! \fn Tree* NamespaceNode::tree() const
+ Returns a pointer to the Tree that contains this NamespaceNode.
+ This requires traversing the parent() pointers to the root of
+ the Tree, which is the unnamed NamespaceNode.
+ */
+
+/*! \fn bool NamespaceNode::isFirstClassAggregate() const
+ Returns \c true.
+ */
+
+/*! \fn bool NamespaceNode::isRelatableType() const
+ Returns \c true.
+ */
+
+/*! \fn bool NamespaceNode::wasSeen() const
+ Returns \c true if the \c {\\namespace} command that this NamespaceNode
+ represents has been parsed by qdoc. When \c false is returned, it means
+ that only \c {\\relates} commands have been seen that relate elements to
+ this namespace.
+ */
+
+/*! \fn void NamespaceNode::markSeen()
+ Sets the data member that indicates that the \c {\\namespace} command this
+ NamespaceNode represents has been parsed by qdoc.
+ */
+
+/*! \fn void NamespaceNode::markNotSeen()
+ Clears the data member that indicates that the \c {\\namespace} command this
+ NamespaceNode represents has been parsed by qdoc.
+ */
+
+/*! \fn void NamespaceNode::setTree(Tree* t)
+ Sets the Tree pointer to \a t, which means this NamespaceNode is in the Tree \a t.
+ */
+
+/*! \fn QString NamespaceNode::whereDocumented() const
+ Returns the camel case name of the module where this namespace is documented.
+
+ \sa setWhereDocumented()
+ */
+
+/*! \fn void NamespaceNode::setWhereDocumented(const QString &t)
+ Sets the camel case name of the module where this namespace is documented to
+ the module named \a t.
+
+ This function is called when the \c {\\namespace} command is processed to let
+ qdoc know that this namespace is documented in the current module, so that
+ when something in another module is marked as related to this namespace, it
+ can be documented there with a ProxyNode for this namespace.
+
+ \sa whereDocumented()
+ */
+
+/*! \fn void NamespaceNode::setDocumented()
+ Sets the flag indicating that the \c {\\namespace} command for this
+ namespace was seen.
+ */
+
+/*! \fn bool NamespaceNode::wasDocumented() const
+ Returns \c true if a \c {\\namespace} command for this namespace was seen.
+ Otherwise returns \c false.
+ */
+
+/*! \fn void NamespaceNode::setDocNode(NamespaceNode *ns)
+ Called in QDocDatabase::resolveNamespaces() to set the pointer to the
+ NamespaceNode in which this namespace is documented.
+
+ \sa QDocDatabase::resolveNamespaces()
+ */
+
+/*! \fn NamespaceNode *NamespaceNode::docNode() const
+ Returns a pointer to the NamespaceNode that represents where the namespace
+ documentation is actually generated. API elements in many different modules
+ can be included in a single namespace. That namespace is only documented in
+ one module. The namespace is documented in the module where the \c {\\namespace}
+ command for the namespace appears.
+
+ \sa QDocDatabase::resolveNamespaces()
+ */
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/namespacenode.h b/src/qdoc/qdoc/src/qdoc/namespacenode.h
new file mode 100644
index 000000000..80d068838
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/namespacenode.h
@@ -0,0 +1,48 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef NAMESPACENODE_H
+#define NAMESPACENODE_H
+
+#include "aggregate.h"
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+class Tree;
+
+class NamespaceNode : public Aggregate
+{
+public:
+ NamespaceNode(Aggregate *parent, const QString &name) : Aggregate(Namespace, parent, name) {}
+ ~NamespaceNode() override = default;
+ [[nodiscard]] Tree *tree() const override { return (parent() ? parent()->tree() : m_tree); }
+
+ [[nodiscard]] bool isFirstClassAggregate() const override { return true; }
+ [[nodiscard]] bool isRelatableType() const override { return true; }
+ [[nodiscard]] bool wasSeen() const override { return m_seen; }
+ void markSeen() { m_seen = true; }
+ void setTree(Tree *t) { m_tree = t; }
+ [[nodiscard]] const NodeList &includedChildren() const;
+ void includeChild(Node *child);
+ void setWhereDocumented(const QString &t) { m_whereDocumented = t; }
+ [[nodiscard]] bool isDocumentedHere() const;
+ [[nodiscard]] bool hasDocumentedChildren() const;
+ void reportDocumentedChildrenInUndocumentedNamespace() const;
+ [[nodiscard]] bool docMustBeGenerated() const override;
+ void setDocNode(NamespaceNode *ns) { m_docNode = ns; }
+ [[nodiscard]] NamespaceNode *docNode() const { return m_docNode; }
+
+private:
+ bool m_seen { false };
+ Tree *m_tree { nullptr };
+ QString m_whereDocumented {};
+ NamespaceNode *m_docNode { nullptr };
+ NodeList m_includedChildren {};
+};
+
+QT_END_NAMESPACE
+
+#endif // NAMESPACENODE_H
diff --git a/src/qdoc/qdoc/src/qdoc/node.cpp b/src/qdoc/qdoc/src/qdoc/node.cpp
new file mode 100644
index 000000000..1aadbdeb1
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/node.cpp
@@ -0,0 +1,1383 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "node.h"
+
+#include "aggregate.h"
+#include "codemarker.h"
+#include "config.h"
+#include "enumnode.h"
+#include "functionnode.h"
+#include "generator.h"
+#include "qdocdatabase.h"
+#include "qmltypenode.h"
+#include "qmlpropertynode.h"
+#include "relatedclass.h"
+#include "sharedcommentnode.h"
+#include "tokenizer.h"
+#include "tree.h"
+
+#include <QtCore/quuid.h>
+#include <QtCore/qversionnumber.h>
+
+#include <utility>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class Node
+ \brief The Node class is the base class for all the nodes in QDoc's parse tree.
+
+ Class Node is the base class of all the node subclasses. There is a subclass of Node
+ for each type of entity that QDoc can document. The types of entities that QDoc can
+ document are listed in the enum type NodeType.
+
+ After ClangCodeParser has parsed all the header files to build its precompiled header,
+ it then visits the clang Abstract Syntax Tree (AST). For each node in the AST that it
+ determines is in the public API and must be documented, it creates an instance of one
+ of the Node subclasses and adds it to the QDoc Tree.
+
+ Each instance of a sublass of Node has a parent pointer to link it into the Tree. The
+ parent pointer is obtained by calling \l {parent()}, which returns a pointer to an
+ instance of the Node subclass, Aggregate, which is never instantiated directly, but
+ as the base class for certain subclasses of Node that can have children. For example,
+ ClassNode and QmlTypeNode can have children, so they both inherit Aggregate, while
+ PropertyNode and QmlPropertyNode can not have children, so they both inherit Node.
+
+ \sa Aggregate, ClassNode, PropertyNode
+ */
+
+/*!
+ Returns \c true if the node \a n1 is less than node \a n2. The
+ comparison is performed by comparing properties of the nodes
+ in order of increasing complexity.
+ */
+bool Node::nodeNameLessThan(const Node *n1, const Node *n2)
+{
+#define LT_RETURN_IF_NOT_EQUAL(a, b) \
+ if ((a) != (b)) \
+ return (a) < (b);
+
+ if (n1->isPageNode() && n2->isPageNode()) {
+ LT_RETURN_IF_NOT_EQUAL(n1->fullName(), n2->fullName());
+ LT_RETURN_IF_NOT_EQUAL(n1->fullTitle(), n2->fullTitle());
+ }
+
+ if (n1->isFunction() && n2->isFunction()) {
+ const auto *f1 = static_cast<const FunctionNode *>(n1);
+ const auto *f2 = static_cast<const FunctionNode *>(n2);
+
+ LT_RETURN_IF_NOT_EQUAL(f1->isConst(), f2->isConst());
+ LT_RETURN_IF_NOT_EQUAL(f1->signature(Node::SignatureReturnType),
+ f2->signature(Node::SignatureReturnType));
+ }
+
+ LT_RETURN_IF_NOT_EQUAL(n1->nodeType(), n2->nodeType());
+ LT_RETURN_IF_NOT_EQUAL(n1->name(), n2->name());
+ LT_RETURN_IF_NOT_EQUAL(n1->access(), n2->access());
+ LT_RETURN_IF_NOT_EQUAL(n1->location().filePath(), n2->location().filePath());
+
+ return false;
+}
+
+/*!
+ \enum Node::NodeType
+
+ An unsigned char value that identifies an object as a
+ particular subclass of Node.
+
+ \value NoType The node type has not been set yet.
+ \value Namespace The Node subclass is NamespaceNode, which represents a C++
+ namespace.
+ \value Class The Node subclass is ClassNode, which represents a C++ class.
+ \value Struct The Node subclass is ClassNode, which represents a C struct.
+ \value Union The Node subclass is ClassNode, which represents a C union
+ (currently no known uses).
+ \value HeaderFile The Node subclass is HeaderNode, which represents a header
+ file.
+ \value Page The Node subclass is PageNode, which represents a text page from
+ a .qdoc file.
+ \value Enum The Node subclass is EnumNode, which represents an enum type or
+ enum class.
+ \value Example The Node subclass is ExampleNode, which represents an example
+ subdirectory.
+ \value ExternalPage The Node subclass is ExternalPageNode, which is for
+ linking to an external page.
+ \value Function The Node subclass is FunctionNode, which can represent C++,
+ and QML functions.
+ \value Typedef The Node subclass is TypedefNode, which represents a C++
+ typedef.
+ \value Property The Node subclass is PropertyNode, which represents a use of
+ Q_Property.
+ \value Variable The Node subclass is VariableNode, which represents a global
+ variable or class data member.
+ \value Group The Node subclass is CollectionNode, which represents a group of
+ documents.
+ \value Module The Node subclass is CollectionNode, which represents a C++
+ module.
+ \value QmlType The Node subclass is QmlTypeNode, which represents a QML type.
+ \value QmlModule The Node subclass is CollectionNode, which represents a QML
+ module.
+ \value QmlProperty The Node subclass is QmlPropertyNode, which represents a
+ property in a QML type.
+ \value QmlBasicType The Node subclass is QmlTypeNode, which represents a
+ value type like int, etc.
+ \value SharedComment The Node subclass is SharedCommentNode, which represents
+ a collection of nodes that share the same documentation comment.
+ \omitvalue Collection
+ \value Proxy The Node subclass is ProxyNode, which represents one or more
+ entities that are documented in the current module but which actually
+ reside in a different module.
+ \omitvalue LastType
+*/
+
+/*!
+ \enum Node::Genus
+
+ An unsigned char value that specifies whether the Node represents a
+ C++ element, a QML element, or a text document.
+ The Genus values are also passed to search functions to specify the
+ Genus of Tree Node that can satisfy the search.
+
+ \value DontCare The Genus is not specified. Used when calling Tree search functions to indicate
+ the search can accept any Genus of Node.
+ \value CPP The Node represents a C++ element.
+ \value QML The Node represents a QML element.
+ \value DOC The Node represents a text document.
+*/
+
+/*!
+ \internal
+ \fn setComparisonCategory(const ComparisonCategory category)
+
+ Sets the comparison category of this node to \a category.
+
+ \sa ComparisonCategory, comparisonCategory()
+ */
+
+/*!
+ \internal
+ \fn ComparisonCategory comparisonCategory()
+
+ Returns the comparison category of this node.
+
+ \sa ComparisonCategory, setComparisonCategory()
+ */
+
+/*!
+ \enum Access
+
+ An unsigned char value that indicates the C++ access level.
+
+ \value Public The element has public access.
+ \value Protected The element has protected access.
+ \value Private The element has private access.
+*/
+
+/*!
+ \enum Node::Status
+
+ An unsigned char that specifies the status of the documentation element in
+ the documentation set.
+
+ \value Deprecated The element has been deprecated.
+ \value Preliminary The element is new; the documentation is preliminary.
+ \value Active The element is current.
+ \value Internal The element is for internal use only, not to be published.
+ \value DontDocument The element is not to be documented.
+*/
+
+/*!
+ \enum Node::ThreadSafeness
+
+ An unsigned char that specifies the degree of thread-safeness of the element.
+
+ \value UnspecifiedSafeness The thread-safeness is not specified.
+ \value NonReentrant The element is not reentrant.
+ \value Reentrant The element is reentrant.
+ \value ThreadSafe The element is threadsafe.
+*/
+
+/*!
+ \enum Node::LinkType
+
+ An unsigned char value that probably should be moved out of the Node base class.
+
+ \value StartLink
+ \value NextLink
+ \value PreviousLink
+ \value ContentsLink
+ */
+
+/*!
+ \enum Node::FlagValue
+
+ A value used in PropertyNode and QmlPropertyNode that can be -1, 0, or +1.
+ Properties and QML properties have flags, which can be 0 or 1, false or true,
+ or not set. FlagValueDefault is the not set value. In other words, if a flag
+ is set to FlagValueDefault, the meaning is the flag has not been set.
+
+ \value FlagValueDefault -1 Not set.
+ \value FlagValueFalse 0 False.
+ \value FlagValueTrue 1 True.
+*/
+
+/*!
+ \fn Node::~Node()
+
+ The default destructor is virtual so any subclass of Node can be
+ deleted by deleting a pointer to Node.
+ */
+
+/*! \fn bool Node::isActive() const
+ Returns true if this node's status is \c Active.
+ */
+
+/*! \fn bool Node::isClass() const
+ Returns true if the node type is \c Class.
+ */
+
+/*! \fn bool Node::isCppNode() const
+ Returns true if this node's Genus value is \c CPP.
+ */
+
+/*! \fn bool Node::isDeprecated() const
+ Returns true if this node's status is \c Deprecated.
+ */
+
+/*! \fn bool Node::isDontDocument() const
+ Returns true if this node's status is \c DontDocument.
+ */
+
+/*! \fn bool Node::isEnumType() const
+ Returns true if the node type is \c Enum.
+ */
+
+/*! \fn bool Node::isExample() const
+ Returns true if the node type is \c Example.
+ */
+
+/*! \fn bool Node::isExternalPage() const
+ Returns true if the node type is \c ExternalPage.
+ */
+
+/*! \fn bool Node::isFunction(Genus g = DontCare) const
+ Returns true if this is a FunctionNode and its Genus is set to \a g.
+ */
+
+/*! \fn bool Node::isGroup() const
+ Returns true if the node type is \c Group.
+ */
+
+/*! \fn bool Node::isHeader() const
+ Returns true if the node type is \c HeaderFile.
+ */
+
+/*! \fn bool Node::isIndexNode() const
+ Returns true if this node was created from something in an index file.
+ */
+
+/*! \fn bool Node::isModule() const
+ Returns true if the node type is \c Module.
+ */
+
+/*! \fn bool Node::isNamespace() const
+ Returns true if the node type is \c Namespace.
+ */
+
+/*! \fn bool Node::isPage() const
+ Returns true if the node type is \c Page.
+ */
+
+/*! \fn bool Node::isPreliminary() const
+ Returns true if this node's status is \c Preliminary.
+ */
+
+/*! \fn bool Node::isPrivate() const
+ Returns true if this node's access is \c Private.
+ */
+
+/*! \fn bool Node::isProperty() const
+ Returns true if the node type is \c Property.
+ */
+
+/*! \fn bool Node::isProxyNode() const
+ Returns true if the node type is \c Proxy.
+ */
+
+/*! \fn bool Node::isPublic() const
+ Returns true if this node's access is \c Public.
+ */
+
+/*! \fn bool Node::isProtected() const
+ Returns true if this node's access is \c Protected.
+ */
+
+/*! \fn bool Node::isQmlBasicType() const
+ Returns true if the node type is \c QmlBasicType.
+ */
+
+/*! \fn bool Node::isQmlModule() const
+ Returns true if the node type is \c QmlModule.
+ */
+
+/*! \fn bool Node::isQmlNode() const
+ Returns true if this node's Genus value is \c QML.
+ */
+
+/*! \fn bool Node::isQmlProperty() const
+ Returns true if the node type is \c QmlProperty.
+ */
+
+/*! \fn bool Node::isQmlType() const
+ Returns true if the node type is \c QmlType or \c QmlValueType.
+ */
+
+/*! \fn bool Node::isRelatedNonmember() const
+ Returns true if this is a related nonmember of something.
+ */
+
+/*! \fn bool Node::isStruct() const
+ Returns true if the node type is \c Struct.
+ */
+
+/*! \fn bool Node::isSharedCommentNode() const
+ Returns true if the node type is \c SharedComment.
+ */
+
+/*! \fn bool Node::isTypeAlias() const
+ Returns true if the node type is \c Typedef.
+ */
+
+/*! \fn bool Node::isTypedef() const
+ Returns true if the node type is \c Typedef.
+ */
+
+/*! \fn bool Node::isUnion() const
+ Returns true if the node type is \c Union.
+ */
+
+/*! \fn bool Node::isVariable() const
+ Returns true if the node type is \c Variable.
+ */
+
+/*! \fn bool Node::isGenericCollection() const
+ Returns true if the node type is \c Collection.
+ */
+
+/*! \fn bool Node::isAbstract() const
+ Returns true if the ClassNode or QmlTypeNode is marked abstract.
+*/
+
+/*! \fn bool Node::isAggregate() const
+ Returns true if this node is an aggregate, which means it
+ inherits Aggregate and can therefore have children.
+*/
+
+/*! \fn bool Node::isFirstClassAggregate() const
+ Returns true if this Node is an Aggregate but not a ProxyNode.
+*/
+
+/*! \fn bool Node::isAlias() const
+ Returns true if this QML property is marked as an alias.
+*/
+
+/*! \fn bool Node::isAttached() const
+ Returns true if the QML property or QML method node is marked as attached.
+*/
+
+/*! \fn bool Node::isClassNode() const
+ Returns true if this is an instance of ClassNode.
+*/
+
+/*! \fn bool Node::isCollectionNode() const
+ Returns true if this is an instance of CollectionNode.
+*/
+
+/*! \fn bool Node::isDefault() const
+ Returns true if the QML property node is marked as default.
+*/
+
+/*! \fn bool Node::isMacro() const
+ returns true if either FunctionNode::isMacroWithParams() or
+ FunctionNode::isMacroWithoutParams() returns true.
+*/
+
+/*! \fn bool Node::isPageNode() const
+ Returns true if this node represents something that generates a documentation
+ page. In other words, if this Node's subclass inherits PageNode, then this
+ function will return \e true.
+*/
+
+/*! \fn bool Node::isRelatableType() const
+ Returns true if this node is something you can relate things to with
+ the \e relates command. NamespaceNode, ClassNode, HeaderNode, and
+ ProxyNode are relatable types.
+*/
+
+/*! \fn bool Node::isMarkedReimp() const
+ Returns true if the FunctionNode is marked as a reimplemented function.
+ That means it is virtual in the base class and it is reimplemented in
+ the subclass.
+*/
+
+/*! \fn bool Node::isPropertyGroup() const
+ Returns true if the node is a SharedCommentNode for documenting
+ multiple C++ properties or multiple QML properties.
+*/
+
+/*! \fn bool Node::isStatic() const
+ Returns true if the FunctionNode represents a static function.
+*/
+
+/*! \fn bool Node::isTextPageNode() const
+ Returns true if the node is a PageNode but not an Aggregate.
+*/
+
+/*!
+ Returns this node's name member. Appends "()" to the returned
+ name if this node is a function node, but not if it is a macro
+ because macro names normally appear without parentheses.
+ */
+QString Node::plainName() const
+{
+ if (isFunction() && !isMacro())
+ return m_name + QLatin1String("()");
+ return m_name;
+}
+
+/*!
+ Constructs and returns the node's fully qualified name by
+ recursively ascending the parent links and prepending each
+ parent name + "::". Breaks out when reaching a HeaderNode,
+ or when the parent pointer is \a relative. Typically, calls
+ to this function pass \c nullptr for \a relative.
+ */
+QString Node::plainFullName(const Node *relative) const
+{
+ if (m_name.isEmpty())
+ return QLatin1String("global");
+ if (isHeader())
+ return plainName();
+
+ QStringList parts;
+ const Node *node = this;
+ while (node && !node->isHeader()) {
+ parts.prepend(node->plainName());
+ if (node->parent() == relative || node->parent()->name().isEmpty())
+ break;
+ node = node->parent();
+ }
+ return parts.join(QLatin1String("::"));
+}
+
+/*!
+ Constructs and returns the node's fully qualified signature
+ by recursively ascending the parent links and prepending each
+ parent name + "::" to the plain signature. The return type is
+ not included.
+ */
+QString Node::plainSignature() const
+{
+ if (m_name.isEmpty())
+ return QLatin1String("global");
+
+ QString fullName;
+ const Node *node = this;
+ while (node) {
+ fullName.prepend(node->signature(Node::SignaturePlain));
+ if (node->parent()->name().isEmpty())
+ break;
+ fullName.prepend(QLatin1String("::"));
+ node = node->parent();
+ }
+ return fullName;
+}
+
+/*!
+ Constructs and returns this node's full name. The full name is
+ often just the title(). When it is not the title, it is the
+ plainFullName().
+ */
+QString Node::fullName(const Node *relative) const
+{
+ if ((isTextPageNode() || isGroup()) && !title().isEmpty())
+ return title();
+ return plainFullName(relative);
+}
+
+/*!
+ Sets this Node's Doc to \a doc. If \a replace is false and
+ this Node already has a Doc, and if this doc is not marked
+ with the \\reimp command, a warning is reported that the
+ existing Doc is being overridden, and it reports where the
+ previous Doc was found. If \a replace is true, the Doc is
+ replaced silently.
+ */
+void Node::setDoc(const Doc &doc, bool replace)
+{
+ if (!m_doc.isEmpty() && !replace && !doc.isMarkedReimp()) {
+ doc.location().warning(QStringLiteral("Overrides a previous doc"),
+ QStringLiteral("from here: %1").arg(m_doc.location().toString()));
+ }
+ m_doc = doc;
+}
+
+/*!
+ Sets the node's status to \a t.
+
+ \sa Status
+*/
+void Node::setStatus(Status t)
+{
+ m_status = t;
+
+ // Set non-null, empty URL to nodes that are ignored as
+ // link targets
+ switch (t) {
+ case Internal:
+ if (Config::instance().showInternal())
+ break;
+ Q_FALLTHROUGH();
+ case DontDocument:
+ m_url = QStringLiteral("");
+ break;
+ default:
+ break;
+ }
+}
+
+/*!
+ Construct a node with the given \a type and having the
+ given \a parent and \a name. The new node is added to the
+ parent's child list.
+ */
+Node::Node(NodeType type, Aggregate *parent, QString name)
+ : m_nodeType(type),
+ m_indexNodeFlag(false),
+ m_relatedNonmember(false),
+ m_hadDoc(false),
+ m_parent(parent),
+ m_name(std::move(name))
+{
+ if (m_parent)
+ m_parent->addChild(this);
+
+ setGenus(getGenus(type));
+}
+
+/*!
+ Determines the appropriate Genus value for the NodeType
+ value \a t and returns that Genus value. Note that this
+ function is called in the Node() constructor. It always
+ returns Node::CPP when \a t is Node::Function, which
+ means the FunctionNode() constructor must determine its
+ own Genus value separately, because class FunctionNode
+ is a subclass of Node.
+ */
+Node::Genus Node::getGenus(Node::NodeType t)
+{
+ switch (t) {
+ case Node::Enum:
+ case Node::Class:
+ case Node::Struct:
+ case Node::Union:
+ case Node::Module:
+ case Node::TypeAlias:
+ case Node::Typedef:
+ case Node::Property:
+ case Node::Variable:
+ case Node::Function:
+ case Node::Namespace:
+ case Node::HeaderFile:
+ return Node::CPP;
+ case Node::QmlType:
+ case Node::QmlModule:
+ case Node::QmlProperty:
+ case Node::QmlValueType:
+ return Node::QML;
+ case Node::Page:
+ case Node::Group:
+ case Node::Example:
+ case Node::ExternalPage:
+ return Node::DOC;
+ case Node::Collection:
+ case Node::SharedComment:
+ case Node::Proxy:
+ default:
+ return Node::DontCare;
+ }
+}
+
+/*! \fn QString Node::url() const
+ Returns the node's URL, which is the url of the documentation page
+ created for the node or the url of an external page if the node is
+ an ExternalPageNode. The url is used for generating a link to the
+ page the node represents.
+
+ \sa Node::setUrl()
+ */
+
+/*! \fn void Node::setUrl(const QString &url)
+ Sets the node's URL to \a url, which is the url to the page that the
+ node represents. This function is only called when an index file is
+ read. In other words, a node's url is set when qdoc decides where its
+ page will be and what its name will be, which happens when qdoc writes
+ the index file for the module being documented.
+
+ \sa QDocIndexFiles
+ */
+
+/*!
+ Returns this node's type as a string for use as an
+ attribute value in XML or HTML.
+ */
+QString Node::nodeTypeString() const
+{
+ if (isFunction()) {
+ const auto *fn = static_cast<const FunctionNode *>(this);
+ return fn->kindString();
+ }
+ return nodeTypeString(nodeType());
+}
+
+/*!
+ Returns the node type \a t as a string for use as an
+ attribute value in XML or HTML.
+ */
+QString Node::nodeTypeString(NodeType t)
+{
+ switch (t) {
+ case Namespace:
+ return QLatin1String("namespace");
+ case Class:
+ return QLatin1String("class");
+ case Struct:
+ return QLatin1String("struct");
+ case Union:
+ return QLatin1String("union");
+ case HeaderFile:
+ return QLatin1String("header");
+ case Page:
+ return QLatin1String("page");
+ case Enum:
+ return QLatin1String("enum");
+ case Example:
+ return QLatin1String("example");
+ case ExternalPage:
+ return QLatin1String("external page");
+ case TypeAlias:
+ case Typedef:
+ return QLatin1String("typedef");
+ case Function:
+ return QLatin1String("function");
+ case Property:
+ return QLatin1String("property");
+ case Proxy:
+ return QLatin1String("proxy");
+ case Variable:
+ return QLatin1String("variable");
+ case Group:
+ return QLatin1String("group");
+ case Module:
+ return QLatin1String("module");
+
+ case QmlType:
+ return QLatin1String("QML type");
+ case QmlValueType:
+ return QLatin1String("QML value type");
+ case QmlModule:
+ return QLatin1String("QML module");
+ case QmlProperty:
+ return QLatin1String("QML property");
+
+ case SharedComment:
+ return QLatin1String("shared comment");
+ case Collection:
+ return QLatin1String("collection");
+ default:
+ break;
+ }
+ return QString();
+}
+
+/*! Converts the boolean value \a b to an enum representation
+ of the boolean type, which includes an enum value for the
+ \e {default value} of the item, i.e. true, false, or default.
+ */
+Node::FlagValue Node::toFlagValue(bool b)
+{
+ return b ? FlagValueTrue : FlagValueFalse;
+}
+
+/*!
+ Converts the enum \a fv back to a boolean value.
+ If \a fv is neither the true enum value nor the
+ false enum value, the boolean value returned is
+ \a defaultValue.
+ */
+bool Node::fromFlagValue(FlagValue fv, bool defaultValue)
+{
+ switch (fv) {
+ case FlagValueTrue:
+ return true;
+ case FlagValueFalse:
+ return false;
+ default:
+ return defaultValue;
+ }
+}
+
+/*!
+ This function creates a pair that describes a link.
+ The pair is composed from \a link and \a desc. The
+ \a linkType is the map index the pair is filed under.
+ */
+void Node::setLink(LinkType linkType, const QString &link, const QString &desc)
+{
+ std::pair<QString, QString> linkPair;
+ linkPair.first = link;
+ linkPair.second = desc;
+ m_linkMap[linkType] = linkPair;
+}
+
+/*!
+ Sets the information about the project and version a node was introduced
+ in, unless the version is lower than the 'ignoresince.<project>'
+ configuration variable.
+ */
+void Node::setSince(const QString &since)
+{
+ QStringList parts = since.split(QLatin1Char(' '));
+ QString project;
+ if (parts.size() > 1)
+ project = Config::dot + parts.first();
+
+ QVersionNumber cutoff =
+ QVersionNumber::fromString(Config::instance().get(CONFIG_IGNORESINCE + project).asString())
+ .normalized();
+
+ if (!cutoff.isNull() && QVersionNumber::fromString(parts.last()).normalized() < cutoff)
+ return;
+
+ m_since = parts.join(QLatin1Char(' '));
+}
+
+/*!
+ Extract a class name from the type \a string and return it.
+ */
+QString Node::extractClassName(const QString &string) const
+{
+ QString result;
+ for (int i = 0; i <= string.size(); ++i) {
+ QChar ch;
+ if (i != string.size())
+ ch = string.at(i);
+
+ QChar lower = ch.toLower();
+ if ((lower >= QLatin1Char('a') && lower <= QLatin1Char('z')) || ch.digitValue() >= 0
+ || ch == QLatin1Char('_') || ch == QLatin1Char(':')) {
+ result += ch;
+ } else if (!result.isEmpty()) {
+ if (result != QLatin1String("const"))
+ return result;
+ result.clear();
+ }
+ }
+ return result;
+}
+
+/*!
+ Returns the thread safeness value for whatever this node
+ represents. But if this node has a parent and the thread
+ safeness value of the parent is the same as the thread
+ safeness value of this node, what is returned is the
+ value \c{UnspecifiedSafeness}. Why?
+ */
+Node::ThreadSafeness Node::threadSafeness() const
+{
+ if (m_parent && m_safeness == m_parent->inheritedThreadSafeness())
+ return UnspecifiedSafeness;
+ return m_safeness;
+}
+
+/*!
+ If this node has a parent, the parent's thread safeness
+ value is returned. Otherwise, this node's thread safeness
+ value is returned. Why?
+ */
+Node::ThreadSafeness Node::inheritedThreadSafeness() const
+{
+ if (m_parent && m_safeness == UnspecifiedSafeness)
+ return m_parent->inheritedThreadSafeness();
+ return m_safeness;
+}
+
+/*!
+ Returns \c true if the node's status is \c Internal, or if
+ its parent is a class with \c Internal status.
+ */
+bool Node::isInternal() const
+{
+ if (status() == Internal)
+ return true;
+ return parent() && parent()->status() == Internal && !parent()->isAbstract();
+}
+
+/*! \fn void Node::markInternal()
+ Sets the node's access to Private and its status to Internal.
+ */
+
+/*!
+ Returns a pointer to the root of the Tree this node is in.
+ */
+Aggregate *Node::root() const
+{
+ if (parent() == nullptr)
+ return (this->isAggregate() ? static_cast<Aggregate *>(const_cast<Node *>(this)) : nullptr);
+ Aggregate *t = parent();
+ while (t->parent() != nullptr)
+ t = t->parent();
+ return t;
+}
+
+/*!
+ Returns a pointer to the Tree this node is in.
+ */
+Tree *Node::tree() const
+{
+ return root()->tree();
+}
+
+/*!
+ Sets the node's declaration location, its definition
+ location, or both, depending on the suffix of the file
+ name from the file path in location \a t.
+ */
+void Node::setLocation(const Location &t)
+{
+ QString suffix = t.fileSuffix();
+ if (suffix == "h")
+ m_declLocation = t;
+ else if (suffix == "cpp")
+ m_defLocation = t;
+ else {
+ m_declLocation = t;
+ m_defLocation = t;
+ }
+}
+
+/*!
+ Returns \c true if this node is documented, or it represents
+ a documented node read from the index ('had doc'), or this
+ node is sharing a non-empty doc with other nodes.
+
+ \sa Doc
+ */
+bool Node::hasDoc() const
+{
+ if (m_hadDoc)
+ return true;
+
+ if (!m_doc.isEmpty())
+ return true;
+
+ return (m_sharedCommentNode && m_sharedCommentNode->hasDoc());
+}
+
+/*!
+ Returns the CPP node's qualified name by prepending the
+ namespaces name + "::" if there isw a namespace.
+ */
+QString Node::qualifyCppName()
+{
+ if (m_parent && m_parent->isNamespace() && !m_parent->name().isEmpty())
+ return m_parent->name() + "::" + m_name;
+ return m_name;
+}
+
+/*!
+ Return the name of this node qualified with the parent name
+ and "::" if there is a parent name.
+ */
+QString Node::qualifyWithParentName()
+{
+ if (m_parent && !m_parent->name().isEmpty())
+ return m_parent->name() + "::" + m_name;
+ return m_name;
+}
+
+/*!
+ Returns the QML node's qualified name by prepending the logical
+ module name.
+ */
+QString Node::qualifyQmlName()
+{
+ return logicalModuleName() + "::" + m_name;
+}
+
+/*!
+ Returns \c true if the node is a class node or a QML type node
+ that is marked as being a wrapper class or wrapper QML type,
+ or if it is a member of a wrapper class or type.
+ */
+bool Node::isWrapper() const
+{
+ return m_parent != nullptr && m_parent->isWrapper();
+}
+
+/*!
+ Construct the full document name for this node and return it.
+ */
+QString Node::fullDocumentName() const
+{
+ QStringList pieces;
+ const Node *n = this;
+
+ do {
+ if (!n->name().isEmpty())
+ pieces.insert(0, n->name());
+
+ if (n->isQmlType() && !n->logicalModuleName().isEmpty()) {
+ pieces.insert(0, n->logicalModuleName());
+ break;
+ }
+
+ if (n->isTextPageNode())
+ break;
+
+ // Examine the parent if the node is a member
+ if (!n->parent() || n->isRelatedNonmember())
+ break;
+
+ n = n->parent();
+ } while (true);
+
+ // Create a name based on the type of the ancestor node.
+ QString concatenator = "::";
+ if (n->isQmlType())
+ concatenator = QLatin1Char('.');
+
+ if (n->isTextPageNode())
+ concatenator = QLatin1Char('#');
+
+ return pieces.join(concatenator);
+}
+
+/*!
+ Sets the Node status to Node::Deprecated, unless \a sinceVersion represents
+ a future version.
+
+ Stores \a sinceVersion representing the version in which the deprecation
+ took (or will take) place.
+
+ Fetches the current version from the config ('version' variable) as a
+ string, and compared to \a sinceVersion. If both string represent a valid
+ version and \a sinceVersion is greater than the currect version, do not
+ mark the node as deprecated; leave it active.
+*/
+void Node::setDeprecated(const QString &sinceVersion)
+{
+
+ if (!m_deprecatedSince.isEmpty())
+ qCWarning(lcQdoc) << QStringLiteral(
+ "Setting deprecated since version for %1 to %2 even though it "
+ "was already set to %3. This is very unexpected.")
+ .arg(this->m_name, sinceVersion, this->m_deprecatedSince);
+ m_deprecatedSince = sinceVersion;
+
+ if (!sinceVersion.isEmpty()) {
+ QVersionNumber since = QVersionNumber::fromString(sinceVersion).normalized();
+ QVersionNumber current = QVersionNumber::fromString(
+ Config::instance().get(CONFIG_VERSION).asString())
+ .normalized();
+ if (!current.isNull() && !since.isNull()) {
+ if (current < since)
+ return;
+ }
+ }
+ setStatus(Deprecated);
+}
+
+/*! \fn Node *Node::clone(Aggregate *parent)
+
+ When reimplemented in a subclass, this function creates a
+ clone of this node on the heap and makes the clone a child
+ of \a parent. A pointer to the clone is returned.
+
+ Here in the base class, this function does nothing and returns
+ nullptr.
+ */
+
+/*! \fn NodeType Node::nodeType() const
+ Returns this node's type.
+
+ \sa NodeType
+*/
+
+/*! \fn Genus Node::genus() const
+ Returns this node's Genus.
+
+ \sa Genus
+*/
+
+/*! void Node::setGenus(Genus t)
+ Sets this node's Genus to \a t.
+*/
+
+/*! \fn QString Node::signature(Node::SignatureOptions options) const
+
+ Specific parts of the signature are included according to flags in
+ \a options.
+
+ If this node is not a FunctionNode, this function returns plainName().
+
+ \sa FunctionNode::signature()
+*/
+
+/*! \fn const QString &Node::fileNameBase() const
+ Returns the node's file name base string, which is built once, when
+ Generator::fileBase() is called and stored in the Node.
+*/
+
+/*! \fn bool Node::hasFileNameBase() const
+ Returns true if the node's file name base has been set.
+
+ \sa Node::fileNameBase()
+*/
+
+/*! \fn void Node::setFileNameBase(const QString &t)
+ Sets the node's file name base to \a t. Only called by
+ Generator::fileBase().
+*/
+
+/*! \fn void Node::setAccess(Access t)
+ Sets the node's access type to \a t.
+
+ \sa Access
+*/
+
+/*! \fn void Node::setThreadSafeness(ThreadSafeness t)
+ Sets the node's thread safeness to \a t.
+
+ \sa ThreadSafeness
+*/
+
+/*! \fn void Node::setPhysicalModuleName(const QString &name)
+ Sets the node's physical module \a name.
+*/
+
+/*! \fn void Node::setReconstitutedBrief(const QString &t)
+ When reading an index file, this function is called with the
+ reconstituted brief clause \a t to set the node's brief clause.
+ I think this is needed for linking to something in the brief clause.
+*/
+
+/*! \fn void Node::setParent(Aggregate *n)
+ Sets the node's parent pointer to \a n. Such a thing
+ is not lightly done. All the calls to this function
+ are in other member functions of Node subclasses. See
+ the code in the subclass implementations to understand
+ when this function can be called safely and why it is called.
+*/
+
+/*! \fn void Node::setIndexNodeFlag(bool isIndexNode = true)
+ Sets a flag in this Node that indicates the node was created
+ for something in an index file. This is important to know
+ because an index node is not to be documented in the current
+ module. When the index flag is set, it means the Node
+ represents something in another module, and it will be
+ documented in that module's documentation.
+*/
+
+/*! \fn void Node::setRelatedNonmember(bool b)
+ Sets a flag in the node indicating whether this node is a related nonmember
+ of something. This function is called when the \c relates command is seen.
+ */
+
+/*! \fn void Node::addMember(Node *node)
+ In a CollectionNode, this function adds \a node to the collection
+ node's members list. It does nothing if this node is not a CollectionNode.
+ */
+
+/*! \fn bool Node::hasNamespaces() const
+ Returns \c true if this is a CollectionNode and its members list
+ contains namespace nodes. Otherwise it returns \c false.
+ */
+
+/*! \fn bool Node::hasClasses() const
+ Returns \c true if this is a CollectionNode and its members list
+ contains class nodes. Otherwise it returns \c false.
+ */
+
+/*! \fn void Node::setAbstract(bool b)
+ If this node is a ClassNode or a QmlTypeNode, the node's abstract flag
+ data member is set to \a b.
+ */
+
+/*! \fn void Node::setWrapper()
+ If this node is a ClassNode or a QmlTypeNode, the node's wrapper flag
+ data member is set to \c true.
+ */
+
+/*! \fn void Node::setDataType(const QString &dataType)
+ If this node is a PropertyNode or a QmlPropertyNode, its
+ data type data member is set to \a dataType. Otherwise,
+ this function does nothing.
+ */
+
+/*! \fn bool Node::wasSeen() const
+ Returns the \c seen flag data member of this node if it is a NamespaceNode
+ or a CollectionNode. Otherwise it returns \c false. If \c true is returned,
+ it means that the location where the namespace or collection is to be
+ documented has been found.
+ */
+
+/*! \fn void appendGroupName(const QString &t)
+ If this node is a PageNode, the group name \a t is appended to the node's
+ list of group names. It is not clear to me what this list of group names
+ is used for, but it is written to the index file, and it is used in the
+ navigation bar.
+ */
+
+/*! \fn QString Node::element() const
+ If this node is a QmlPropertyNode or a FunctionNode, this function
+ returns the name of the parent node. Otherwise it returns an empty
+ string.
+ */
+
+/*! \fn bool Node::docMustBeGenerated() const
+ This function is called to perform a test to decide if the node must have
+ documentation generated. In the Node base class, it always returns \c false.
+
+ In the ProxyNode class it always returns \c true. There aren't many proxy
+ nodes, but when one appears, it must generate documentation. In the overrides
+ in NamespaceNode and ClassNode, a meaningful test is performed to decide if
+ documentation must be generated.
+ */
+
+/*! \fn QString Node::title() const
+ Returns a string that can be used to print a title in the documentation for
+ whatever this Node is. In the Node base class, the node's name() is returned.
+ In a PageNode, the function returns the title data member. In a HeaderNode,
+ if the title() is empty, the name() is returned.
+ */
+
+/*! \fn QString Node::subtitle() const { return QString(); }
+ Returns a string that can be used to print a subtitle in the documentation for
+ whatever this Node is. In the Node base class, the empty string is returned.
+ In a PageNode, the function returns the subtitle data member. In a HeaderNode,
+ the subtitle data member is returned.
+ */
+
+/*! \fn QString Node::fullTitle() const
+ Returns a string that can be used as the full title for the documentation of
+ this node. In this base class, the name() is returned. In a PageNode, title()
+ is returned. In a HeaderNode, if the title() is empty, the name() is returned.
+ If the title() is not empty then name-title is returned. In a CollectionNode,
+ the title() is returned.
+ */
+
+/*! \fn bool Node::setTitle(const QString &title)
+ Sets the node's \a title, which is used for the title of
+ the documentation page, if one is generated for this node.
+ Returns \c true if the title is set. In this base class,
+ there is no title string stored, so in the base class,
+ nothing happens and \c false is returned. The override in
+ the PageNode class is where the title is set.
+ */
+
+/*! \fn bool Node::setSubtitle(const QString &subtitle)
+ Sets the node's \a subtitle, which is used for the subtitle
+ of the documentation page, if one is generated for this node.
+ Returns \c true if the subtitle is set. In this base class,
+ there is no subtitle string stored, so in the base class,
+ nothing happens and \c false is returned. The override in
+ the PageNode and HeaderNode classes is where the subtitle is
+ set.
+ */
+
+/*! \fn void Node::markDefault()
+ If this node is a QmlPropertyNode, it is marked as the default property.
+ Otherwise the function does nothing.
+ */
+
+/*! \fn void Node::markReadOnly(bool flag)
+ If this node is a QmlPropertyNode, then the property's read-only
+ flag is set to \a flag.
+ */
+
+/*! \fn Aggregate *Node::parent() const
+ Returns the node's parent pointer.
+*/
+
+/*! \fn const QString &Node::name() const
+ Returns the node's name data member.
+*/
+
+/*! \fn void Node::setQtVariable(const QString &v)
+ If this node is a CollectionNode, its QT variable is set to \a v.
+ Otherwise the function does nothing. I don't know what the QT variable
+ is used for.
+ */
+
+/*! \fn QString Node::qtVariable() const
+ If this node is a CollectionNode, its QT variable is returned.
+ Otherwise an empty string is returned. I don't know what the QT
+ variable is used for.
+ */
+
+/*! \fn bool Node::hasTag(const QString &t) const
+ If this node is a FunctionNode, the function returns \c true if
+ the function has the tag \a t. Otherwise the function returns
+ \c false. I don't know what the tag is used for.
+ */
+
+/*! \fn const QMap<LinkType, std::pair<QString, QString> > &Node::links() const
+ Returns a reference to this node's link map. The link map should
+ probably be moved to the PageNode, because it contains links to the
+ start page, next page, previous page, and contents page, and these
+ are only used in PageNode, I think.
+ */
+
+/*! \fn Access Node::access() const
+ Returns the node's Access setting, which can be \c Public,
+ \c Protected, or \c Private.
+ */
+
+/*! \fn const Location& Node::declLocation() const
+ Returns the Location where this node's declaration was seen.
+ Normally the declaration location is in an \e include file.
+ The declaration location is used in qdoc error/warning messages
+ about the declaration.
+ */
+
+/*! \fn const Location& Node::defLocation() const
+ Returns the Location where this node's dedefinition was seen.
+ Normally the definition location is in a \e .cpp file.
+ The definition location is used in qdoc error/warning messages
+ when the error is discovered at the location of the definition,
+ although the way to correct the problem often requires changing
+ the declaration.
+ */
+
+/*! \fn const Location& Node::location() const
+ If this node's definition location is empty, this function
+ returns this node's declaration location. Otherwise it
+ returns the definition location.
+
+ \sa Location
+ */
+
+/*! \fn const Doc &Node::doc() const
+ Returns a reference to the node's Doc data member.
+
+ \sa Doc
+ */
+
+/*! \fn Status Node::status() const
+ Returns the node's status value.
+
+ \sa Status
+ */
+
+/*! \fn QString Node::since() const
+ Returns the node's since string, which can be empty.
+ */
+
+/*! \fn QString Node::templateStuff() const
+ Returns the node's template parameters string, if this node
+ represents a templated element.
+ */
+
+/*! \fn bool Node::isSharingComment() const
+ This function returns \c true if the node is sharing a comment
+ with other nodes. For example, multiple functions can be documented
+ with a single qdoc comment by listing the \c {\\fn} signatures for
+ all the functions in the single qdoc comment.
+ */
+
+/*! \fn QString Node::qmlTypeName() const
+ If this is a QmlPropertyNode or a FunctionNode representing a QML
+ method, this function returns the qmlTypeName() of
+ the parent() node. Otherwise it returns the name data member.
+ */
+
+/*! \fn QString Node::qmlFullBaseName() const
+ If this is a QmlTypeNode, this function returns the QML full
+ base name. Otherwise it returns an empty string.
+ */
+
+/*! \fn QString Node::logicalModuleName() const
+ If this is a CollectionNode, this function returns the logical
+ module name. Otherwise it returns an empty string.
+ */
+
+/*! \fn QString Node::logicalModuleVersion() const
+ If this is a CollectionNode, this function returns the logical
+ module version number. Otherwise it returns an empty string.
+ */
+
+/*! \fn QString Node::logicalModuleIdentifier() const
+ If this is a CollectionNode, this function returns the logical
+ module identifier. Otherwise it returns an empty string.
+ */
+
+/*! \fn void Node::setLogicalModuleInfo(const QString &arg)
+ If this node is a CollectionNode, this function splits \a arg
+ on the blank character to get a logical module name and version
+ number. If the version number is present, it splits the version
+ number on the '.' character to get a major version number and a
+ minor version number. If the version number is present, both the
+ major and minor version numbers should be there, but the minor
+ version number is not absolutely necessary.
+
+ The strings are stored in the appropriate data members for use
+ when the QML module page is generated.
+ */
+
+/*! \fn void Node::setLogicalModuleInfo(const QStringList &info)
+ If this node is a CollectionNode, this function accepts the
+ logical module \a info as a string list. If the logical module
+ info contains the version number, it splits the version number
+ on the '.' character to get the major and minor version numbers.
+ Both major and minor version numbers should be provided, but
+ the minor version number is not strictly necessary.
+
+ The strings are stored in the appropriate data members for use
+ when the QML module page is generated. This overload
+ of the function is called when qdoc is reading an index file.
+ */
+
+/*! \fn CollectionNode *Node::logicalModule() const
+ If this is a QmlTypeNode, a pointer to its QML module is returned,
+ which is a pointer to a CollectionNode. Otherwise the \c nullptr
+ is returned.
+ */
+
+/*! \fn void Node::setQmlModule(CollectionNode *t)
+ If this is a QmlTypeNode, this function sets the QML type's QML module
+ pointer to the CollectionNode \a t. Otherwise the function does nothing.
+ */
+
+/*! \fn ClassNode *Node::classNode()
+ If this is a QmlTypeNode, this function returns the pointer to
+ the C++ ClassNode that this QML type represents. Otherwise the
+ \c nullptr is returned.
+ */
+
+/*! \fn void Node::setClassNode(ClassNode *cn)
+ If this is a QmlTypeNode, this function sets the C++ class node
+ to \a cn. The C++ ClassNode is the C++ implementation of the QML
+ type.
+ */
+
+/*! \fn NodeType Node::goal(const QString &t)
+ When a square-bracket parameter is used in a qdoc command, this
+ function might be called to convert the text string \a t obtained
+ from inside the square brackets to be a Goal value, which is returned.
+
+ \sa Goal
+ */
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/node.h b/src/qdoc/qdoc/src/qdoc/node.h
new file mode 100644
index 000000000..3b5eb56bd
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/node.h
@@ -0,0 +1,343 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef NODE_H
+#define NODE_H
+
+#include "access.h"
+#include "comparisoncategory.h"
+#include "doc.h"
+#include "enumitem.h"
+#include "importrec.h"
+#include "parameters.h"
+#include "relatedclass.h"
+#include "template_declaration.h"
+
+#include <QtCore/qdir.h>
+#include <QtCore/qlist.h>
+#include <QtCore/qmap.h>
+#include <QtCore/qstringlist.h>
+
+#include <optional>
+
+QT_BEGIN_NAMESPACE
+
+class Aggregate;
+class ClassNode;
+class CollectionNode;
+class EnumNode;
+class ExampleNode;
+class FunctionNode;
+class Node;
+class QDocDatabase;
+class QmlTypeNode;
+class PageNode;
+class PropertyNode;
+class QmlPropertyNode;
+class SharedCommentNode;
+class Tree;
+class TypedefNode;
+
+typedef QList<Node *> NodeList;
+typedef QList<ClassNode *> ClassList;
+typedef QList<Node *> NodeVector;
+typedef QMap<QString, Node *> NodeMap;
+typedef QMap<QString, NodeMap> NodeMapMap;
+typedef QMultiMap<QString, Node *> NodeMultiMap;
+typedef QMap<QString, NodeMultiMap> NodeMultiMapMap;
+typedef QMap<QString, CollectionNode *> CNMap;
+typedef QMultiMap<QString, CollectionNode *> CNMultiMap;
+
+class Node
+{
+public:
+ enum NodeType : unsigned char {
+ NoType,
+ Namespace,
+ Class,
+ Struct,
+ Union,
+ HeaderFile,
+ Page,
+ Enum,
+ Example,
+ ExternalPage,
+ Function,
+ Typedef,
+ TypeAlias,
+ Property,
+ Variable,
+ Group,
+ Module,
+ QmlType,
+ QmlModule,
+ QmlProperty,
+ QmlValueType,
+ SharedComment,
+ Collection,
+ Proxy
+ };
+
+ enum Genus : unsigned char {
+ DontCare = 0x0,
+ CPP = 0x1,
+ QML = 0x4,
+ DOC = 0x8,
+ API = CPP | QML
+ };
+
+ enum Status : unsigned char {
+ Deprecated,
+ Preliminary,
+ Active,
+ Internal,
+ DontDocument
+ }; // don't reorder this enum
+
+ enum ThreadSafeness : unsigned char {
+ UnspecifiedSafeness,
+ NonReentrant,
+ Reentrant,
+ ThreadSafe
+ };
+
+ enum SignatureOption : unsigned char {
+ SignaturePlain = 0x0,
+ SignatureDefaultValues = 0x1,
+ SignatureReturnType = 0x2,
+ SignatureTemplateParams = 0x4
+ };
+ Q_DECLARE_FLAGS(SignatureOptions, SignatureOption)
+
+ enum LinkType : unsigned char { StartLink, NextLink, PreviousLink, ContentsLink };
+
+ enum FlagValue { FlagValueDefault = -1, FlagValueFalse = 0, FlagValueTrue = 1 };
+
+ virtual ~Node() = default;
+ virtual Node *clone(Aggregate *) { return nullptr; } // currently only FunctionNode
+ [[nodiscard]] virtual Tree *tree() const;
+ [[nodiscard]] Aggregate *root() const;
+
+ [[nodiscard]] NodeType nodeType() const { return m_nodeType; }
+ [[nodiscard]] QString nodeTypeString() const;
+
+ [[nodiscard]] Genus genus() const { return m_genus; }
+ void setGenus(Genus t) { m_genus = t; }
+ static Genus getGenus(NodeType t);
+
+ [[nodiscard]] bool isActive() const { return m_status == Active; }
+ [[nodiscard]] bool isClass() const { return m_nodeType == Class; }
+ [[nodiscard]] bool isCppNode() const { return genus() == CPP; }
+ [[nodiscard]] bool isDontDocument() const { return (m_status == DontDocument); }
+ [[nodiscard]] bool isEnumType() const { return m_nodeType == Enum; }
+ [[nodiscard]] bool isExample() const { return m_nodeType == Example; }
+ [[nodiscard]] bool isExternalPage() const { return m_nodeType == ExternalPage; }
+ [[nodiscard]] bool isFunction(Genus g = DontCare) const
+ {
+ return m_nodeType == Function && (genus() == g || g == DontCare);
+ }
+ [[nodiscard]] bool isGroup() const { return m_nodeType == Group; }
+ [[nodiscard]] bool isHeader() const { return m_nodeType == HeaderFile; }
+ [[nodiscard]] bool isIndexNode() const { return m_indexNodeFlag; }
+ [[nodiscard]] bool isModule() const { return m_nodeType == Module; }
+ [[nodiscard]] bool isNamespace() const { return m_nodeType == Namespace; }
+ [[nodiscard]] bool isPage() const { return m_nodeType == Page; }
+ [[nodiscard]] bool isPreliminary() const { return (m_status == Preliminary); }
+ [[nodiscard]] bool isPrivate() const { return m_access == Access::Private; }
+ [[nodiscard]] bool isProperty() const { return m_nodeType == Property; }
+ [[nodiscard]] bool isProxyNode() const { return m_nodeType == Proxy; }
+ [[nodiscard]] bool isPublic() const { return m_access == Access::Public; }
+ [[nodiscard]] bool isProtected() const { return m_access == Access::Protected; }
+ [[nodiscard]] bool isQmlBasicType() const { return m_nodeType == QmlValueType; }
+ [[nodiscard]] bool isQmlModule() const { return m_nodeType == QmlModule; }
+ [[nodiscard]] bool isQmlNode() const { return genus() == QML; }
+ [[nodiscard]] bool isQmlProperty() const { return m_nodeType == QmlProperty; }
+ [[nodiscard]] bool isQmlType() const { return m_nodeType == QmlType || m_nodeType == QmlValueType; }
+ [[nodiscard]] bool isRelatedNonmember() const { return m_relatedNonmember; }
+ [[nodiscard]] bool isStruct() const { return m_nodeType == Struct; }
+ [[nodiscard]] bool isSharedCommentNode() const { return m_nodeType == SharedComment; }
+ [[nodiscard]] bool isTypeAlias() const { return m_nodeType == TypeAlias; }
+ [[nodiscard]] bool isTypedef() const
+ {
+ return m_nodeType == Typedef || m_nodeType == TypeAlias;
+ }
+ [[nodiscard]] bool isUnion() const { return m_nodeType == Union; }
+ [[nodiscard]] bool isVariable() const { return m_nodeType == Variable; }
+ [[nodiscard]] bool isGenericCollection() const { return (m_nodeType == Node::Collection); }
+
+ [[nodiscard]] virtual bool isDeprecated() const { return (m_status == Deprecated); }
+ [[nodiscard]] virtual bool isAbstract() const { return false; }
+ [[nodiscard]] virtual bool isAggregate() const { return false; } // means "can have children"
+ [[nodiscard]] virtual bool isFirstClassAggregate() const
+ {
+ return false;
+ } // Aggregate but not proxy or prop group"
+ [[nodiscard]] virtual bool isAlias() const { return false; }
+ [[nodiscard]] virtual bool isAttached() const { return false; }
+ [[nodiscard]] virtual bool isClassNode() const { return false; }
+ [[nodiscard]] virtual bool isCollectionNode() const { return false; }
+ [[nodiscard]] virtual bool isDefault() const { return false; }
+ [[nodiscard]] virtual bool isInternal() const;
+ [[nodiscard]] virtual bool isMacro() const { return false; }
+ [[nodiscard]] virtual bool isPageNode() const { return false; } // means "generates a doc page"
+ [[nodiscard]] virtual bool isRelatableType() const { return false; }
+ [[nodiscard]] virtual bool isMarkedReimp() const { return false; }
+ [[nodiscard]] virtual bool isPropertyGroup() const { return false; }
+ [[nodiscard]] virtual bool isStatic() const { return false; }
+ [[nodiscard]] virtual bool isTextPageNode() const
+ {
+ return false;
+ } // means PageNode but not Aggregate
+ [[nodiscard]] virtual bool isWrapper() const;
+
+ [[nodiscard]] QString plainName() const;
+ QString plainFullName(const Node *relative = nullptr) const;
+ [[nodiscard]] QString plainSignature() const;
+ QString fullName(const Node *relative = nullptr) const;
+ [[nodiscard]] virtual QString signature(Node::SignatureOptions) const { return plainName(); }
+
+ [[nodiscard]] const QString &fileNameBase() const { return m_fileNameBase; }
+ [[nodiscard]] bool hasFileNameBase() const { return !m_fileNameBase.isEmpty(); }
+ void setFileNameBase(const QString &t) { m_fileNameBase = t; }
+
+ void setAccess(Access t) { m_access = t; }
+ void setLocation(const Location &t);
+ void setDoc(const Doc &doc, bool replace = false);
+ void setStatus(Status t);
+ void setThreadSafeness(ThreadSafeness t) { m_safeness = t; }
+ void setSince(const QString &since);
+ void setPhysicalModuleName(const QString &name) { m_physicalModuleName = name; }
+ void setUrl(const QString &url) { m_url = url; }
+ void setTemplateDecl(std::optional<RelaxedTemplateDeclaration> t) { m_templateDecl = t; }
+ void setReconstitutedBrief(const QString &t) { m_reconstitutedBrief = t; }
+ void setParent(Aggregate *n) { m_parent = n; }
+ void setIndexNodeFlag(bool isIndexNode = true) { m_indexNodeFlag = isIndexNode; }
+ void setHadDoc() { m_hadDoc = true; }
+ void setComparisonCategory(const ComparisonCategory &category) { m_comparisonCategory = category; }
+ [[nodiscard]] ComparisonCategory comparisonCategory() const { return m_comparisonCategory; }
+ virtual void setRelatedNonmember(bool b) { m_relatedNonmember = b; }
+ virtual void addMember(Node *) {}
+ [[nodiscard]] virtual bool hasNamespaces() const { return false; }
+ [[nodiscard]] virtual bool hasClasses() const { return false; }
+ virtual void setAbstract(bool) {}
+ virtual void setWrapper() {}
+ virtual void setDataType(const QString &) {}
+ [[nodiscard]] virtual bool wasSeen() const { return false; }
+ virtual void appendGroupName(const QString &) {}
+ [[nodiscard]] virtual QString element() const { return QString(); }
+ [[nodiscard]] virtual bool docMustBeGenerated() const { return false; }
+
+ [[nodiscard]] virtual QString title() const { return name(); }
+ [[nodiscard]] virtual QString subtitle() const { return QString(); }
+ [[nodiscard]] virtual QString fullTitle() const { return name(); }
+ virtual bool setTitle(const QString &) { return false; }
+ virtual bool setSubtitle(const QString &) { return false; }
+
+ void markInternal()
+ {
+ setAccess(Access::Private);
+ setStatus(Internal);
+ }
+ virtual void markDefault() {}
+ virtual void markReadOnly(bool) {}
+
+ [[nodiscard]] Aggregate *parent() const { return m_parent; }
+ [[nodiscard]] const QString &name() const { return m_name; }
+ [[nodiscard]] QString physicalModuleName() const { return m_physicalModuleName; }
+ [[nodiscard]] QString url() const { return m_url; }
+ virtual void setQtVariable(const QString &) {}
+ [[nodiscard]] virtual QString qtVariable() const { return QString(); }
+ virtual void setQtCMakeComponent(const QString &) {}
+ virtual void setQtCMakeTargetItem(const QString &) {}
+ [[nodiscard]] virtual QString qtCMakeComponent() const { return QString(); }
+ [[nodiscard]] virtual QString qtCMakeTargetItem() const { return QString(); }
+ [[nodiscard]] virtual bool hasTag(const QString &) const { return false; }
+
+ void setDeprecated(const QString &sinceVersion);
+ [[nodiscard]] const QString &deprecatedSince() const { return m_deprecatedSince; }
+
+ [[nodiscard]] const QMap<LinkType, std::pair<QString, QString>> &links() const { return m_linkMap; }
+ void setLink(LinkType linkType, const QString &link, const QString &desc);
+
+ [[nodiscard]] Access access() const { return m_access; }
+ [[nodiscard]] const Location &declLocation() const { return m_declLocation; }
+ [[nodiscard]] const Location &defLocation() const { return m_defLocation; }
+ [[nodiscard]] const Location &location() const
+ {
+ return (m_defLocation.isEmpty() ? m_declLocation : m_defLocation);
+ }
+ [[nodiscard]] const Doc &doc() const { return m_doc; }
+ [[nodiscard]] bool isInAPI() const
+ {
+ return !isPrivate() && !isInternal() && !isDontDocument() && hasDoc();
+ }
+ [[nodiscard]] bool hasDoc() const;
+ [[nodiscard]] bool hadDoc() const { return m_hadDoc; }
+ [[nodiscard]] Status status() const { return m_status; }
+ [[nodiscard]] ThreadSafeness threadSafeness() const;
+ [[nodiscard]] ThreadSafeness inheritedThreadSafeness() const;
+ [[nodiscard]] QString since() const { return m_since; }
+ [[nodiscard]] const std::optional<RelaxedTemplateDeclaration>& templateDecl() const { return m_templateDecl; }
+ [[nodiscard]] const QString &reconstitutedBrief() const { return m_reconstitutedBrief; }
+
+ [[nodiscard]] bool isSharingComment() const { return (m_sharedCommentNode != nullptr); }
+ void setSharedCommentNode(SharedCommentNode *t) { m_sharedCommentNode = t; }
+ SharedCommentNode *sharedCommentNode() { return m_sharedCommentNode; }
+
+ [[nodiscard]] QString extractClassName(const QString &string) const;
+ [[nodiscard]] virtual QString qmlTypeName() const { return m_name; }
+ [[nodiscard]] virtual QString qmlFullBaseName() const { return QString(); }
+ [[nodiscard]] virtual QString logicalModuleName() const { return QString(); }
+ [[nodiscard]] virtual QString logicalModuleVersion() const { return QString(); }
+ [[nodiscard]] virtual QString logicalModuleIdentifier() const { return QString(); }
+
+ virtual void setLogicalModuleInfo(const QStringList &) {}
+ [[nodiscard]] virtual CollectionNode *logicalModule() const { return nullptr; }
+ virtual void setQmlModule(CollectionNode *) {}
+ virtual ClassNode *classNode() { return nullptr; }
+ virtual void setClassNode(ClassNode *) {}
+ [[nodiscard]] QString fullDocumentName() const;
+ QString qualifyCppName();
+ QString qualifyQmlName();
+ QString qualifyWithParentName();
+
+ 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);
+
+protected:
+ Node(NodeType type, Aggregate *parent, QString name);
+
+private:
+ NodeType m_nodeType {};
+ Genus m_genus {};
+ Access m_access { Access::Public };
+ ThreadSafeness m_safeness { UnspecifiedSafeness };
+ Status m_status { Active };
+ ComparisonCategory m_comparisonCategory { ComparisonCategory::None };
+ bool m_indexNodeFlag : 1;
+ bool m_relatedNonmember : 1;
+ bool m_hadDoc : 1;
+
+ Aggregate *m_parent { nullptr };
+ SharedCommentNode *m_sharedCommentNode { nullptr };
+ QString m_name {};
+ Location m_declLocation {};
+ Location m_defLocation {};
+ Doc m_doc {};
+ QMap<LinkType, std::pair<QString, QString>> m_linkMap {};
+ QString m_fileNameBase {};
+ QString m_physicalModuleName {};
+ QString m_url {};
+ QString m_since {};
+ std::optional<RelaxedTemplateDeclaration> m_templateDecl{std::nullopt};
+ QString m_reconstitutedBrief {};
+ QString m_deprecatedSince {};
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(Node::SignatureOptions)
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/openedlist.cpp b/src/qdoc/qdoc/src/qdoc/openedlist.cpp
new file mode 100644
index 000000000..a85e45ec4
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/openedlist.cpp
@@ -0,0 +1,172 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "openedlist.h"
+
+#include "atom.h"
+
+#include <QtCore/qregularexpression.h>
+
+QT_BEGIN_NAMESPACE
+
+static const char roman[] = "m\2d\5c\2l\5x\2v\5i";
+
+OpenedList::OpenedList(ListStyle style) : sty(style), ini(1), nex(0) {}
+
+OpenedList::OpenedList(const Location &location, const QString &hint) : sty(Bullet), ini(1)
+{
+ static const QRegularExpression hintSyntax("^(\\W*)([0-9]+|[A-Z]+|[a-z]+)(\\W*)$");
+
+ auto match = hintSyntax.match(hint);
+ if (match.hasMatch()) {
+ bool ok;
+ int asNumeric = hint.toInt(&ok);
+ int asRoman = fromRoman(match.captured(2));
+ int asAlpha = fromAlpha(match.captured(2));
+
+ if (ok) {
+ sty = Numeric;
+ ini = asNumeric;
+ } else if (asRoman > 0 && asRoman != 100 && asRoman != 500) {
+ sty = (hint == hint.toLower()) ? LowerRoman : UpperRoman;
+ ini = asRoman;
+ } else {
+ sty = (hint == hint.toLower()) ? LowerAlpha : UpperAlpha;
+ ini = asAlpha;
+ }
+ pref = match.captured(1);
+ suff = match.captured(3);
+ } else if (!hint.isEmpty()) {
+ location.warning(QStringLiteral("Unrecognized list style '%1'").arg(hint));
+ }
+ nex = ini - 1;
+}
+
+QString OpenedList::styleString() const
+{
+ switch (style()) {
+ case Bullet:
+ default:
+ return ATOM_LIST_BULLET;
+ case Tag:
+ return ATOM_LIST_TAG;
+ case Value:
+ return ATOM_LIST_VALUE;
+ case Numeric:
+ return ATOM_LIST_NUMERIC;
+ case UpperAlpha:
+ return ATOM_LIST_UPPERALPHA;
+ case LowerAlpha:
+ return ATOM_LIST_LOWERALPHA;
+ case UpperRoman:
+ return ATOM_LIST_UPPERROMAN;
+ case LowerRoman:
+ return ATOM_LIST_LOWERROMAN;
+ }
+}
+
+QString OpenedList::numberString() const
+{
+ return QString::number(number());
+ /*
+ switch ( style() ) {
+ case Numeric:
+ return QString::number( number() );
+ case UpperAlpha:
+ return toAlpha( number() ).toUpper();
+ case LowerAlpha:
+ return toAlpha( number() );
+ case UpperRoman:
+ return toRoman( number() ).toUpper();
+ case LowerRoman:
+ return toRoman( number() );
+ case Bullet:
+ default:
+ return "*";
+ }*/
+}
+
+int OpenedList::fromAlpha(const QString &str)
+{
+ int n = 0;
+ int u;
+
+ for (const QChar &character : str) {
+ u = character.toLower().unicode();
+ if (u >= 'a' && u <= 'z') {
+ n *= 26;
+ n += u - 'a' + 1;
+ } else {
+ return 0;
+ }
+ }
+ return n;
+}
+
+QString OpenedList::toRoman(int n)
+{
+ /*
+ See p. 30 of Donald E. Knuth's "TeX: The Program".
+ */
+ QString str;
+ int j = 0;
+ int k;
+ int u;
+ int v = 1000;
+
+ for (;;) {
+ while (n >= v) {
+ str += roman[j];
+ n -= v;
+ }
+
+ if (n <= 0)
+ break;
+
+ k = j + 2;
+ u = v / roman[k - 1];
+ if (roman[k - 1] == 2) {
+ k += 2;
+ u /= 5;
+ }
+ if (n + u >= v) {
+ str += roman[k];
+ n += u;
+ } else {
+ j += 2;
+ v /= roman[j - 1];
+ }
+ }
+ return str;
+}
+
+int OpenedList::fromRoman(const QString &str)
+{
+ int n = 0;
+ int j;
+ int u;
+ int v = 0;
+
+ for (const QChar &character : str) {
+ j = 0;
+ u = 1000;
+ while (roman[j] != 'i' && roman[j] != character.toLower()) {
+ j += 2;
+ u /= roman[j - 1];
+ }
+ if (u < v) {
+ n -= u;
+ } else {
+ n += u;
+ }
+ v = u;
+ }
+
+ if (str.toLower() == toRoman(n)) {
+ return n;
+ } else {
+ return 0;
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/openedlist.h b/src/qdoc/qdoc/src/qdoc/openedlist.h
new file mode 100644
index 000000000..cd0c54e40
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/openedlist.h
@@ -0,0 +1,47 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef OPENEDLIST_H
+#define OPENEDLIST_H
+
+#include "location.h"
+
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+class OpenedList
+{
+public:
+ enum ListStyle { Bullet, Tag, Value, Numeric, UpperAlpha, LowerAlpha, UpperRoman, LowerRoman };
+
+ OpenedList() : sty(Bullet), ini(1), nex(0) {}
+ explicit OpenedList(ListStyle style);
+ OpenedList(const Location &location, const QString &hint);
+
+ void next() { nex++; }
+
+ [[nodiscard]] bool isStarted() const { return nex >= ini; }
+ [[nodiscard]] ListStyle style() const { return sty; }
+ [[nodiscard]] QString styleString() const;
+ [[nodiscard]] int number() const { return nex; }
+ [[nodiscard]] QString numberString() const;
+ [[nodiscard]] QString prefix() const { return pref; }
+ [[nodiscard]] QString suffix() const { return suff; }
+
+private:
+ static int fromAlpha(const QString &str);
+ static QString toRoman(int n);
+ static int fromRoman(const QString &str);
+
+ ListStyle sty;
+ int ini;
+ int nex;
+ QString pref;
+ QString suff;
+};
+Q_DECLARE_TYPEINFO(OpenedList, Q_RELOCATABLE_TYPE);
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/pagenode.cpp b/src/qdoc/qdoc/src/qdoc/pagenode.cpp
new file mode 100644
index 000000000..5f01bc24f
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/pagenode.cpp
@@ -0,0 +1,117 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "pagenode.h"
+
+#include "aggregate.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class PageNode
+ \brief A PageNode is a Node that generates a documentation page.
+
+ Not all subclasses of Node produce documentation pages. FunctionNode,
+ PropertyNode, and EnumNode are all examples of subclasses of Node that
+ don't produce documentation pages but add documentation to a page.
+ They are always child nodes of an Aggregate, and Aggregate inherits
+ PageNode.
+
+ Not every subclass of PageNode inherits Aggregate. ExternalPageNode,
+ ExampleNode, and CollectionNode are subclasses of PageNode that are
+ not subclasses of Aggregate. Because they are not subclasses of
+ Aggregate, they can't have children. But they still generate, or
+ link to, a documentation page.
+ */
+
+/*! \fn QString PageNode::title() const
+ Returns the node's title, which is used for the page title.
+ */
+
+/*! \fn QString PageNode::subtitle() const
+ Returns the node's subtitle, which may be empty.
+ */
+
+/*!
+ Returns the node's full title.
+ */
+QString PageNode::fullTitle() const
+{
+ return title();
+}
+
+/*!
+ Sets the node's \a title, which is used for the page title.
+ Returns true. Adds the node to the parent() nonfunction map
+ using the \a title as the key.
+ */
+bool PageNode::setTitle(const QString &title)
+{
+ m_title = title;
+ parent()->addChildByTitle(this, title);
+ return true;
+}
+
+/*!
+ \fn bool PageNode::setSubtitle(const QString &subtitle)
+ Sets the node's \a subtitle. Returns true;
+ */
+
+/*! \fn PageNode::PageNode(Aggregate *parent, const QString &name)
+ This constructor sets the PageNode's \a parent and the \a name is the
+ argument of the \c {\\page} command. The node type is set to Node::Page.
+ */
+
+/*! \fn PageNode::PageNode(NodeType type, Aggregate *parent, const QString &name)
+ This constructor is not called directly. It is called by the constructors of
+ subclasses of PageNode, usually Aggregate. The node type is set to \a type,
+ and the parent pointer is set to \a parent. \a name is the argument of the topic
+ command that resulted in the PageNode being created. This could be \c {\\class}
+ or \c {\\namespace}, for example.
+ */
+
+/*! \fn PageNode::~PageNode()
+ The destructor is virtual, and it does nothing.
+ */
+
+/*! \fn bool PageNode::isPageNode() const
+ Always returns \c true because this is a PageNode.
+ */
+
+/*! \fn bool PageNode::isTextPageNode() const
+ Returns \c true if this instance of PageNode is not an Aggregate.
+ The significance of a \c true return value is that this PageNode
+ doesn't have children, because it is not an Aggregate.
+
+ \sa Aggregate.
+ */
+
+/*! \fn QString PageNode::imageFileName() const
+ If this PageNode is an ExampleNode, the image file name
+ data member is returned. Otherwise an empty string is
+ returned.
+ */
+
+/*! \fn void PageNode::setImageFileName(const QString &ifn)
+ If this PageNode is an ExampleNode, the image file name
+ data member is set to \a ifn. Otherwise the function does
+ nothing.
+ */
+
+/*! \fn bool PageNode::noAutoList() const
+ Returns the value of the no auto-list flag.
+ */
+
+/*! \fn void PageNode::setNoAutoList(bool b)
+ Sets the no auto-list flag to \a b.
+ */
+
+/*! \fn const QStringList &PageNode::groupNames() const
+ Returns a const reference to the string list containing all the group names.
+ */
+
+/*! \fn void PageNode::appendGroupName(const QString &t)
+ Appends \a t to the list of group names.
+ */
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/pagenode.h b/src/qdoc/qdoc/src/qdoc/pagenode.h
new file mode 100644
index 000000000..14231bccd
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/pagenode.h
@@ -0,0 +1,82 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef PAGENODE_H
+#define PAGENODE_H
+
+#include "node.h"
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qstring.h>
+#include <QtCore/qstringlist.h>
+
+QT_BEGIN_NAMESPACE
+
+class Aggregate;
+
+class PageNode : public Node
+{
+public:
+ PageNode(Aggregate *parent, const QString &name) : Node(Page, parent, name) {}
+ PageNode(NodeType type, Aggregate *parent, const QString &name) : Node(type, parent, name) {}
+
+ [[nodiscard]] bool isPageNode() const override { return true; }
+ [[nodiscard]] bool isTextPageNode() const override
+ {
+ return !isAggregate();
+ } // PageNode but not Aggregate
+
+ [[nodiscard]] QString title() const override { return m_title; }
+ [[nodiscard]] QString subtitle() const override { return m_subtitle; }
+ [[nodiscard]] QString fullTitle() const override;
+ bool setTitle(const QString &title) override;
+ bool setSubtitle(const QString &subtitle) override
+ {
+ m_subtitle = subtitle;
+ return true;
+ }
+ [[nodiscard]] virtual QString imageFileName() const { return QString(); }
+ virtual void setImageFileName(const QString &) {}
+
+ [[nodiscard]] bool noAutoList() const { return m_noAutoList; }
+ void setNoAutoList(bool b) { m_noAutoList = b; }
+ [[nodiscard]] const QStringList &groupNames() const { return m_groupNames; }
+ void appendGroupName(const QString &t) override { m_groupNames.append(t); }
+
+ [[nodiscard]] const PageNode *navigationParent() const { return m_navParent; }
+ void setNavigationParent(const PageNode *parent) { m_navParent = parent; }
+
+ void markAttribution() { is_attribution = true; }
+ [[nodiscard]] bool isAttribution() const { return is_attribution; }
+
+protected:
+ friend class Node;
+
+protected:
+ bool m_noAutoList { false };
+ QString m_title {};
+ QString m_subtitle {};
+ QStringList m_groupNames {};
+
+ // Marks the PageNode as being or not being an attribution.
+ // A PageNode that is an attribution represents a page that serves
+ // to present the third party software that a project uses,
+ // together with its license, link to the website of the project
+ // and so on.
+ // PageNode that are attribution are expected to be generate only
+ // for the Qt project by the QAttributionScanner, as part of the
+ // built of Qt's documentation.
+ //
+ // PageNodes that are attribution are marked primarily so that
+ // QDoc is able to generate a specialized list of attributions for
+ // a specific module through the use of the "\generatedlist"
+ // command, and behave like any other PageNode otherwise.
+ bool is_attribution{ false };
+
+private:
+ const PageNode *m_navParent { nullptr };
+};
+
+QT_END_NAMESPACE
+
+#endif // PAGENODE_H
diff --git a/src/qdoc/qdoc/src/qdoc/parameters.cpp b/src/qdoc/qdoc/src/qdoc/parameters.cpp
new file mode 100644
index 000000000..39f88b48f
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/parameters.cpp
@@ -0,0 +1,542 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "parameters.h"
+
+#include "codechunk.h"
+#include "generator.h"
+#include "tokenizer.h"
+
+QT_BEGIN_NAMESPACE
+
+QRegularExpression Parameters::s_varComment(R"(^/\*\s*([a-zA-Z_0-9]+)\s*\*/$)");
+
+/*!
+ \class Parameter
+ \brief The Parameter class describes one function parameter.
+
+ A parameter can be a function parameter or a macro parameter.
+ It has a name, a data type, and an optional default value.
+ These are all stored as strings so they can be compared with
+ a parameter in a function signature to find a match.
+ */
+
+/*!
+ \fn Parameter::Parameter(const QString &type, const QString &name, const QString &defaultValue)
+
+ Constructs the parameter from the \a type, the optional \a name,
+ and the optional \a defaultValue.
+ */
+
+/*!
+ Reconstructs the text signature for the parameter and returns
+ it. If \a includeValue is true and there is a default value,
+ the default value is appended with '='.
+ */
+QString Parameter::signature(bool includeValue) const
+{
+ QString p = m_type;
+ if (!p.isEmpty() && !p.endsWith(QChar('*')) && !p.endsWith(QChar('&')) &&
+ !p.endsWith(QChar(' ')) && !m_name.isEmpty()) {
+ p += QLatin1Char(' ');
+ }
+ p += m_name;
+ if (includeValue && !m_defaultValue.isEmpty())
+ p += " = " + m_defaultValue;
+ return p;
+}
+
+/*!
+ \class Parameters
+
+ \brief A class for parsing and managing a function parameter list
+
+ The constructor is passed a string that is the text inside the
+ parentheses of a function declaration. The constructor parses
+ the parameter list into a vector of class Parameter.
+
+ The Parameters object is then used in function searches to find
+ the correct function node given the function name and the signature
+ of its parameters.
+ */
+
+Parameters::Parameters() : m_valid(true), m_privateSignal(false), m_tok(0), m_tokenizer(nullptr)
+{
+ // nothing.
+}
+
+Parameters::Parameters(const QString &signature)
+ : m_valid(true), m_privateSignal(false), m_tok(0), m_tokenizer(nullptr)
+{
+ if (!signature.isEmpty()) {
+ if (!parse(signature)) {
+ m_parameters.clear();
+ m_valid = false;
+ }
+ }
+}
+
+/*!
+ Get the next token from the string being parsed and store
+ it in the token variable.
+ */
+void Parameters::readToken()
+{
+ m_tok = m_tokenizer->getToken();
+}
+
+/*!
+ Return the current lexeme from the string being parsed.
+ */
+QString Parameters::lexeme()
+{
+ return m_tokenizer->lexeme();
+}
+
+/*!
+ Return the previous lexeme read from the string being parsed.
+ */
+QString Parameters::previousLexeme()
+{
+ return m_tokenizer->previousLexeme();
+}
+
+/*!
+ If the current token is \a target, read the next token and
+ return \c true. Otherwise, return false without reading the
+ next token.
+ */
+bool Parameters::match(int target)
+{
+ if (m_tok == target) {
+ readToken();
+ return true;
+ }
+ return false;
+}
+
+/*!
+ Match a template clause in angle brackets, append it to the
+ \a type, and return \c true. If there is no template clause,
+ or if an error is detected, return \c false.
+ */
+void Parameters::matchTemplateAngles(CodeChunk &type)
+{
+ if (m_tok == Tok_LeftAngle) {
+ int leftAngleDepth = 0;
+ int parenAndBraceDepth = 0;
+ do {
+ if (m_tok == Tok_LeftAngle) {
+ leftAngleDepth++;
+ } else if (m_tok == Tok_RightAngle) {
+ leftAngleDepth--;
+ } else if (m_tok == Tok_LeftParen || m_tok == Tok_LeftBrace) {
+ ++parenAndBraceDepth;
+ } else if (m_tok == Tok_RightParen || m_tok == Tok_RightBrace) {
+ if (--parenAndBraceDepth < 0)
+ return;
+ }
+ type.append(lexeme());
+ readToken();
+ } while (leftAngleDepth > 0 && m_tok != Tok_Eoi);
+ }
+}
+
+/*!
+ Uses the current tokenizer to parse the \a name and \a type
+ of the parameter.
+ */
+bool Parameters::matchTypeAndName(CodeChunk &type, QString &name)
+{
+ /*
+ This code is really hard to follow... sorry. The loop is there to match
+ Alpha::Beta::Gamma::...::Omega.
+ */
+ for (;;) {
+ bool virgin = true;
+
+ if (m_tok != Tok_Ident) {
+ /*
+ There is special processing for 'Foo::operator int()'
+ and such elsewhere. This is the only case where we
+ return something with a trailing gulbrandsen ('Foo::').
+ */
+ if (m_tok == Tok_operator)
+ return true;
+
+ /*
+ People may write 'const unsigned short' or
+ 'short unsigned const' or any other permutation.
+ */
+ while (match(Tok_const) || match(Tok_volatile))
+ type.append(previousLexeme());
+ QString pending;
+ while (m_tok == Tok_signed || m_tok == Tok_int || m_tok == Tok_unsigned
+ || m_tok == Tok_short || m_tok == Tok_long || m_tok == Tok_int64) {
+ if (m_tok == Tok_signed)
+ pending = lexeme();
+ else {
+ if (m_tok == Tok_unsigned && !pending.isEmpty())
+ type.append(pending);
+ pending.clear();
+ type.append(lexeme());
+ }
+ readToken();
+ virgin = false;
+ }
+ if (!pending.isEmpty()) {
+ type.append(pending);
+ pending.clear();
+ }
+ while (match(Tok_const) || match(Tok_volatile))
+ type.append(previousLexeme());
+
+ if (match(Tok_Tilde))
+ type.append(previousLexeme());
+ }
+
+ if (virgin) {
+ if (match(Tok_Ident)) {
+ /*
+ This is a hack until we replace this "parser"
+ with the real one used in Qt Creator.
+ Is it still needed? mws 11/12/2018
+ */
+ if (lexeme() == "("
+ && ((previousLexeme() == "QT_PREPEND_NAMESPACE")
+ || (previousLexeme() == "NS"))) {
+ readToken();
+ readToken();
+ type.append(previousLexeme());
+ readToken();
+ } else
+ type.append(previousLexeme());
+ } else if (match(Tok_void) || match(Tok_int) || match(Tok_char) || match(Tok_double)
+ || match(Tok_Ellipsis)) {
+ type.append(previousLexeme());
+ } else {
+ return false;
+ }
+ } else if (match(Tok_int) || match(Tok_char) || match(Tok_double)) {
+ type.append(previousLexeme());
+ }
+
+ matchTemplateAngles(type);
+
+ while (match(Tok_const) || match(Tok_volatile))
+ type.append(previousLexeme());
+
+ if (match(Tok_Gulbrandsen))
+ type.append(previousLexeme());
+ else
+ break;
+ }
+
+ while (match(Tok_Ampersand) || match(Tok_Aster) || match(Tok_const) || match(Tok_Caret)
+ || match(Tok_Ellipsis))
+ type.append(previousLexeme());
+
+ if (match(Tok_LeftParenAster)) {
+ /*
+ A function pointer. This would be rather hard to handle without a
+ tokenizer hack, because a type can be followed with a left parenthesis
+ in some cases (e.g., 'operator int()'). The tokenizer recognizes '(*'
+ as a single token.
+ */
+ type.append(" "); // force a space after the type
+ type.append(previousLexeme());
+ type.appendHotspot();
+ if (match(Tok_Ident))
+ name = previousLexeme();
+ if (!match(Tok_RightParen))
+ return false;
+ type.append(previousLexeme());
+ if (!match(Tok_LeftParen))
+ return false;
+ type.append(previousLexeme());
+
+ /* parse the parameters. Ignore the parameter name from the type */
+ while (m_tok != Tok_RightParen && m_tok != Tok_Eoi) {
+ QString dummy;
+ if (!matchTypeAndName(type, dummy))
+ return false;
+ if (match(Tok_Comma))
+ type.append(previousLexeme());
+ }
+ if (!match(Tok_RightParen))
+ return false;
+ type.append(previousLexeme());
+ } else {
+ /*
+ The common case: Look for an optional identifier, then for
+ some array brackets.
+ */
+ type.appendHotspot();
+
+ if (match(Tok_Ident)) {
+ name = previousLexeme();
+ } else if (match(Tok_Comment)) {
+ /*
+ A neat hack: Commented-out parameter names are
+ recognized by qdoc. It's impossible to illustrate
+ here inside a C-style comment, because it requires
+ an asterslash. It's also impossible to illustrate
+ inside a C++-style comment, because the explanation
+ does not fit on one line.
+ */
+ auto match = s_varComment.match(previousLexeme());
+ if (match.hasMatch())
+ name = match.captured(1);
+ } else if (match(Tok_LeftParen)) {
+ name = "(";
+ while (m_tok != Tok_RightParen && m_tok != Tok_Eoi) {
+ name.append(lexeme());
+ readToken();
+ }
+ name.append(")");
+ readToken();
+ if (match(Tok_LeftBracket)) {
+ name.append("[");
+ while (m_tok != Tok_RightBracket && m_tok != Tok_Eoi) {
+ name.append(lexeme());
+ readToken();
+ }
+ name.append("]");
+ readToken();
+ }
+ }
+
+ if (m_tok == Tok_LeftBracket) {
+ int bracketDepth0 = m_tokenizer->bracketDepth();
+ while ((m_tokenizer->bracketDepth() >= bracketDepth0 && m_tok != Tok_Eoi)
+ || m_tok == Tok_RightBracket) {
+ type.append(lexeme());
+ readToken();
+ }
+ }
+ }
+ return true;
+}
+
+/*!
+ Parse the next function parameter, if there is one, and
+ append it to the internal parameter vector. Return true
+ if a parameter is parsed correctly. Otherwise return false.
+ */
+bool Parameters::matchParameter()
+{
+ if (match(Tok_QPrivateSignal)) {
+ m_privateSignal = true;
+ return true;
+ }
+
+ CodeChunk chunk;
+ QString name;
+ if (!matchTypeAndName(chunk, name))
+ return false;
+ QString type = chunk.toString();
+ QString defaultValue;
+ match(Tok_Comment);
+ if (match(Tok_Equal)) {
+ chunk.clear();
+ int pdepth = m_tokenizer->parenDepth();
+ while (m_tokenizer->parenDepth() >= pdepth
+ && (m_tok != Tok_Comma || (m_tokenizer->parenDepth() > pdepth))
+ && m_tok != Tok_Eoi) {
+ chunk.append(lexeme());
+ readToken();
+ }
+ defaultValue = chunk.toString();
+ }
+ append(type, name, defaultValue);
+ return true;
+}
+
+/*!
+ This function uses a Tokenizer to parse the \a signature,
+ which is a comma-separated list of parameter declarations.
+ If an error is detected, the Parameters object is cleared
+ and \c false is returned. Otherwise \c true is returned.
+ */
+bool Parameters::parse(const QString &signature)
+{
+ Tokenizer *outerTokenizer = m_tokenizer;
+ int outerTok = m_tok;
+
+ QByteArray latin1 = signature.toLatin1();
+ Tokenizer stringTokenizer(Location(), latin1);
+ stringTokenizer.setParsingFnOrMacro(true);
+ m_tokenizer = &stringTokenizer;
+
+ readToken();
+ do {
+ if (!matchParameter()) {
+ m_parameters.clear();
+ m_valid = false;
+ break;
+ }
+ } while (match(Tok_Comma));
+
+ m_tokenizer = outerTokenizer;
+ m_tok = outerTok;
+ return m_valid;
+}
+
+/*!
+ Append a Parameter constructed from \a type, \a name, and \a value
+ to the parameter vector.
+ */
+void Parameters::append(const QString &type, const QString &name, const QString &value)
+{
+ m_parameters.append(Parameter(type, name, value));
+}
+
+/*!
+ Returns the list of reconstructed parameters. If \a includeValues
+ is true, the default values are included, if any are present.
+ */
+QString Parameters::signature(bool includeValues) const
+{
+ QString result;
+ if (!m_parameters.empty()) {
+ for (int i = 0; i < m_parameters.size(); i++) {
+ if (i > 0)
+ result += ", ";
+ result += m_parameters.at(i).signature(includeValues);
+ }
+ }
+ return result;
+}
+
+/*!
+ Returns the signature of all the parameters with all the
+ spaces and commas removed. It is unintelligible, but that
+ is what the caller wants.
+
+ If \a names is true, the parameter names are included. If
+ \a values is true, the default values are included.
+ */
+QString Parameters::rawSignature(bool names, bool values) const
+{
+ QString raw;
+ const auto params = m_parameters;
+ for (const auto &parameter : params) {
+ raw += parameter.type();
+ if (names)
+ raw += parameter.name();
+ if (values)
+ raw += parameter.defaultValue();
+ }
+ return raw;
+}
+
+/*!
+ Parse the parameter \a signature by splitting the string,
+ and store the individual parameters in the parameter vector.
+
+ This method of parsing is naive but sufficient for QML methods
+ and macros.
+ */
+void Parameters::set(const QString &signature)
+{
+ clear();
+ if (!signature.isEmpty()) {
+ QStringList commaSplit = signature.split(',');
+ m_parameters.resize(commaSplit.size());
+ int i = 0;
+ for (const auto &item : std::as_const(commaSplit)) {
+ QStringList blankSplit = item.split(' ', Qt::SkipEmptyParts);
+ QString pDefault;
+ qsizetype defaultIdx = blankSplit.indexOf(QStringLiteral("="));
+ if (defaultIdx != -1) {
+ if (++defaultIdx < blankSplit.size())
+ pDefault = blankSplit.mid(defaultIdx).join(' ');
+ blankSplit = blankSplit.mid(0, defaultIdx - 1);
+ }
+ QString pName = blankSplit.takeLast();
+ QString pType = blankSplit.join(' ');
+ if (pType.isEmpty() && pName == QLatin1String("..."))
+ qSwap(pType, pName);
+ else {
+ int j = 0;
+ while (j < pName.size() && !pName.at(j).isLetter())
+ j++;
+ if (j > 0) {
+ pType += QChar(' ') + pName.left(j);
+ pName = pName.mid(j);
+ }
+ }
+ m_parameters[i++].set(pType, pName, pDefault);
+ }
+ }
+}
+
+/*!
+ Insert all the parameter names into names.
+ */
+QSet<QString> Parameters::getNames() const
+{
+ QSet<QString> names;
+ const auto params = m_parameters;
+ for (const auto &parameter : params) {
+ if (!parameter.name().isEmpty())
+ names.insert(parameter.name());
+ }
+ return names;
+}
+
+/*!
+ Construct a list of the parameter types and return it.
+ */
+QString Parameters::generateTypeList() const
+{
+ QString out;
+ if (count() > 0) {
+ for (int i = 0; i < count(); ++i) {
+ if (i > 0)
+ out += ", ";
+ out += m_parameters.at(i).type();
+ }
+ }
+ return out;
+}
+
+/*!
+ Construct a list of the parameter type/name pairs and
+ return it.
+*/
+QString Parameters::generateTypeAndNameList() const
+{
+ QString out;
+ if (count() > 0) {
+ for (int i = 0; i < count(); ++i) {
+ if (i != 0)
+ out += ", ";
+ const Parameter &p = m_parameters.at(i);
+ out += p.type();
+ if (out[out.size() - 1].isLetterOrNumber())
+ out += QLatin1Char(' ');
+ out += p.name();
+ }
+ }
+ return out;
+}
+
+/*!
+ Returns true if \a parameters contains the same parameter
+ signature as this.
+ */
+bool Parameters::match(const Parameters &parameters) const
+{
+ if (count() != parameters.count())
+ return false;
+ if (count() == 0)
+ return true;
+ for (int i = 0; i < count(); i++) {
+ if (parameters.at(i).type() != m_parameters.at(i).type())
+ return false;
+ }
+ return true;
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/parameters.h b/src/qdoc/qdoc/src/qdoc/parameters.h
new file mode 100644
index 000000000..1417b0958
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/parameters.h
@@ -0,0 +1,113 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef PARAMETERS_H
+#define PARAMETERS_H
+
+#include <QtCore/qlist.h>
+#include <QtCore/qregularexpression.h>
+#include <QtCore/qset.h>
+
+#include <utility>
+
+QT_BEGIN_NAMESPACE
+
+class Location;
+class Tokenizer;
+class CodeChunk;
+
+class Parameter
+{
+public:
+ Parameter() = default;
+ explicit Parameter(QString type, QString name = QString(), QString defaultValue = QString())
+ : m_type(std::move(type)), m_name(std::move(name)), m_defaultValue(std::move(defaultValue))
+ {
+ }
+
+ void setName(const QString &name) { m_name = name; }
+ [[nodiscard]] bool hasType() const { return !m_type.isEmpty(); }
+ [[nodiscard]] const QString &type() const { return m_type; }
+ [[nodiscard]] const QString &name() const { return m_name; }
+ [[nodiscard]] const QString &defaultValue() const { return m_defaultValue; }
+ void setDefaultValue(const QString &t) { m_defaultValue = t; }
+
+ void set(const QString &type, const QString &name, const QString &defaultValue = QString())
+ {
+ m_type = type;
+ m_name = name;
+ m_defaultValue = defaultValue;
+ }
+
+ [[nodiscard]] QString signature(bool includeValue = false) const;
+
+ [[nodiscard]] const QString &canonicalType() const { return m_canonicalType; }
+ void setCanonicalType(const QString &t) { m_canonicalType = t; }
+
+public:
+ QString m_canonicalType {};
+ QString m_type {};
+ QString m_name {};
+ QString m_defaultValue {};
+};
+
+typedef QList<Parameter> ParameterVector;
+
+class Parameters
+{
+public:
+ Parameters();
+ Parameters(const QString &signature); // TODO: Making this explicit breaks QDoc
+
+ void clear()
+ {
+ m_parameters.clear();
+ m_privateSignal = false;
+ m_valid = true;
+ }
+ [[nodiscard]] const ParameterVector &parameters() const { return m_parameters; }
+ [[nodiscard]] bool isPrivateSignal() const { return m_privateSignal; }
+ [[nodiscard]] bool isEmpty() const { return m_parameters.isEmpty(); }
+ [[nodiscard]] bool isValid() const { return m_valid; }
+ [[nodiscard]] int count() const { return m_parameters.size(); }
+ void reserve(int count) { m_parameters.reserve(count); }
+ [[nodiscard]] const Parameter &at(int i) const { return m_parameters.at(i); }
+ Parameter &last() { return m_parameters.last(); }
+ [[nodiscard]] const Parameter &last() const { return m_parameters.last(); }
+ inline Parameter &operator[](int index) { return m_parameters[index]; }
+ void append(const QString &type, const QString &name, const QString &value);
+ void append(const QString &type, const QString &name) { append(type, name, QString()); }
+ void append(const QString &type) { append(type, QString(), QString()); }
+ void pop_back() { m_parameters.pop_back(); }
+ void setPrivateSignal() { m_privateSignal = true; }
+ [[nodiscard]] QString signature(bool includeValues = false) const;
+ [[nodiscard]] QString rawSignature(bool names = false, bool values = false) const;
+ void set(const QString &signature);
+ [[nodiscard]] QSet<QString> getNames() const;
+ [[nodiscard]] QString generateTypeList() const;
+ [[nodiscard]] QString generateTypeAndNameList() const;
+ [[nodiscard]] bool match(const Parameters &parameters) const;
+
+private:
+ void readToken();
+ QString lexeme();
+ QString previousLexeme();
+ bool match(int target);
+ void matchTemplateAngles(CodeChunk &type);
+ bool matchTypeAndName(CodeChunk &type, QString &name);
+ bool matchParameter();
+ bool parse(const QString &signature);
+
+private:
+ static QRegularExpression s_varComment;
+
+ bool m_valid {};
+ bool m_privateSignal {};
+ int m_tok {};
+ Tokenizer *m_tokenizer { nullptr };
+ ParameterVector m_parameters;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/parsererror.cpp b/src/qdoc/qdoc/src/qdoc/parsererror.cpp
new file mode 100644
index 000000000..b55660572
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/parsererror.cpp
@@ -0,0 +1,90 @@
+// 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 "parsererror.h"
+#include "node.h"
+#include "qdocdatabase.h"
+#include "config.h"
+#include "utilities.h"
+
+#include <QtCore/qregularexpression.h>
+
+using namespace Qt::Literals::StringLiterals;
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class FnMatchError
+ \brief Encapsulates information about \fn match error during parsing.
+*/
+
+/*!
+ \variable FnMatchError::signature
+
+ Signature for the \fn topic that failed to match.
+*/
+
+/*!
+ \relates FnMatchError
+
+ Returns \c true if any parent of a C++ function represented by
+ \a signature is documented as \\internal.
+*/
+bool isParentInternal(const QString &signature)
+{
+ const QRegularExpression scoped_fn{R"((?:\w+(?:<[^>]+>)?::)+~?\w\S*\()"};
+ auto match = scoped_fn.match(signature);
+ if (!match.isValid())
+ return false;
+
+ auto scope = match.captured().split("::"_L1);
+ scope.removeLast(); // Drop function name
+
+ for (auto &s : scope)
+ if (qsizetype pos = s.indexOf('<'); pos >= 0)
+ s.truncate(pos);
+
+ auto parent = QDocDatabase::qdocDB()->findNodeByNameAndType(scope, &Node::isCppNode);
+ if (parent && !(parent->isClassNode() || parent->isNamespace())) {
+ qCDebug(lcQdoc).noquote()
+ << "Invalid scope:" << qPrintable(parent->nodeTypeString())
+ << qPrintable(parent->fullName())
+ << "for \\fn" << qPrintable(signature);
+ return false;
+ }
+
+ while (parent) {
+ if (parent->isInternal())
+ return true;
+ parent = parent->parent();
+ }
+
+ return false;
+}
+
+/*!
+ \class ParserErrorHandler
+ \brief Processes parser errors and outputs warnings for them.
+*/
+
+/*!
+ Generates a warning specific to FnMatchError.
+
+ Warnings for internal documentation are omitted. Specifically, this
+ (omission) happens if:
+
+ \list
+ \li \c {--showinternal} command line option is \b not
+ used, and
+ \li The warning is for an \\fn that is declared
+ under a namespace/class that is documented as
+ \\internal.
+ \endlist
+*/
+void ParserErrorHandler::operator()(const FnMatchError &e) const
+{
+ if (Config::instance().showInternal() || !isParentInternal(e.signature))
+ e.location.warning("Failed to find function when parsing \\fn %1"_L1.arg(e.signature));
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/parsererror.h b/src/qdoc/qdoc/src/qdoc/parsererror.h
new file mode 100644
index 000000000..85435366f
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/parsererror.h
@@ -0,0 +1,26 @@
+// 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 PARSERERROR_H
+#define PARSERERROR_H
+
+#include "location.h"
+
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+struct FnMatchError {
+ QString signature {};
+ Location location {};
+
+};
+
+struct ParserErrorHandler
+{
+ void operator()(const FnMatchError &e) const;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/propertynode.cpp b/src/qdoc/qdoc/src/qdoc/propertynode.cpp
new file mode 100644
index 000000000..6607af5bd
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/propertynode.cpp
@@ -0,0 +1,135 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "propertynode.h"
+
+#include "aggregate.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class PropertyNode
+
+ This class describes one instance of using the Q_PROPERTY macro.
+ */
+
+/*!
+ The constructor sets the \a parent and the \a name, but
+ everything else is left to default values.
+ */
+PropertyNode::PropertyNode(Aggregate *parent, const QString &name) : Node(Property, parent, name)
+{
+ // nothing
+}
+
+
+/*!
+ Returns a string representing an access function \a role.
+*/
+QString PropertyNode::roleName(FunctionRole role)
+{
+ switch (role) {
+ case FunctionRole::Getter:
+ return "getter";
+ case FunctionRole::Setter:
+ return "setter";
+ case FunctionRole::Resetter:
+ return "resetter";
+ case FunctionRole::Notifier:
+ return "notifier";
+ case FunctionRole::Bindable:
+ return "bindable";
+ default:
+ break;
+ }
+ return QString();
+}
+
+/*!
+ Sets this property's \e {overridden from} property to
+ \a baseProperty, which indicates that this property
+ overrides \a baseProperty. To begin with, all the values
+ in this property are set to the corresponding values in
+ \a baseProperty.
+
+ We probably should ensure that the constant and final
+ attributes are not being overridden improperly.
+ */
+void PropertyNode::setOverriddenFrom(const PropertyNode *baseProperty)
+{
+ for (qsizetype i{0}; i < (qsizetype)FunctionRole::NumFunctionRoles; ++i) {
+ if (m_functions[i].isEmpty())
+ m_functions[i] = baseProperty->m_functions[i];
+ }
+ if (m_stored == FlagValueDefault)
+ m_stored = baseProperty->m_stored;
+ if (m_writable == FlagValueDefault)
+ m_writable = baseProperty->m_writable;
+ if (m_user == FlagValueDefault)
+ m_user = baseProperty->m_user;
+ m_overrides = baseProperty;
+}
+
+/*!
+ Returns a string containing the data type qualified with "const" either
+ prepended to the data type or appended to it, or without the const
+ qualification, depending circumstances in the PropertyNode internal state.
+ */
+QString PropertyNode::qualifiedDataType() const
+{
+ if (m_propertyType != PropertyType::StandardProperty || m_type.startsWith(QLatin1String("const ")))
+ return m_type;
+
+ if (setters().isEmpty() && resetters().isEmpty()) {
+ if (m_type.contains(QLatin1Char('*')) || m_type.contains(QLatin1Char('&'))) {
+ // 'QWidget *' becomes 'QWidget *' const
+ return m_type + " const";
+ } else {
+ /*
+ 'int' becomes 'const int' ('int const' is
+ correct C++, but looks wrong)
+ */
+ return "const " + m_type;
+ }
+ } else {
+ return m_type;
+ }
+}
+
+/*!
+ Returns true if this property has an access function named \a name.
+ */
+bool PropertyNode::hasAccessFunction(const QString &name) const
+{
+ for (const auto &getter : getters()) {
+ if (getter->name() == name)
+ return true;
+ }
+ for (const auto &setter : setters()) {
+ if (setter->name() == name)
+ return true;
+ }
+ for (const auto &resetter : resetters()) {
+ if (resetter->name() == name)
+ return true;
+ }
+ for (const auto &notifier : notifiers()) {
+ if (notifier->name() == name)
+ return true;
+ }
+ return false;
+}
+
+/*!
+ Returns the role of \a functionNode for this property.
+ */
+PropertyNode::FunctionRole PropertyNode::role(const FunctionNode *functionNode) const
+{
+ for (qsizetype i{0}; i < (qsizetype)FunctionRole::NumFunctionRoles; i++) {
+ if (m_functions[i].contains(const_cast<FunctionNode *>(functionNode)))
+ return (FunctionRole)i;
+ }
+ return FunctionRole::Notifier; // TODO: Figure out a better way to handle 'not found'.
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/propertynode.h b/src/qdoc/qdoc/src/qdoc/propertynode.h
new file mode 100644
index 000000000..9ae59932b
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/propertynode.h
@@ -0,0 +1,93 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef PROPERTYNODE_H
+#define PROPERTYNODE_H
+
+#include "functionnode.h"
+#include "node.h"
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+class Aggregate;
+
+class PropertyNode : public Node
+{
+public:
+ enum class PropertyType { StandardProperty, BindableProperty };
+ enum class FunctionRole { Getter, Setter, Resetter, Notifier, Bindable, NumFunctionRoles };
+ static QString roleName(FunctionRole role);
+
+ PropertyNode(Aggregate *parent, const QString &name);
+
+ void setDataType(const QString &dataType) override { m_type = dataType; }
+ void addFunction(FunctionNode *function, FunctionRole role);
+ void addSignal(FunctionNode *function, FunctionRole role);
+ void setStored(bool stored) { m_stored = toFlagValue(stored); }
+ void setWritable(bool writable) { m_writable = toFlagValue(writable); }
+ void setOverriddenFrom(const PropertyNode *baseProperty);
+ void setConstant() { m_const = true; }
+ void setRequired() { m_required = true; }
+ void setPropertyType(PropertyType type) { m_propertyType = type; }
+
+ [[nodiscard]] const QString &dataType() const { return m_type; }
+ [[nodiscard]] QString qualifiedDataType() const;
+ [[nodiscard]] NodeList functions() const;
+ [[nodiscard]] const NodeList &functions(FunctionRole role) const
+ {
+ return m_functions[(int)role];
+ }
+ [[nodiscard]] const NodeList &getters() const { return functions(FunctionRole::Getter); }
+ [[nodiscard]] const NodeList &setters() const { return functions(FunctionRole::Setter); }
+ [[nodiscard]] const NodeList &resetters() const { return functions(FunctionRole::Resetter); }
+ [[nodiscard]] const NodeList &notifiers() const { return functions(FunctionRole::Notifier); }
+ [[nodiscard]] bool hasAccessFunction(const QString &name) const;
+ FunctionRole role(const FunctionNode *functionNode) const;
+ [[nodiscard]] bool isStored() const { return fromFlagValue(m_stored, storedDefault()); }
+ [[nodiscard]] bool isWritable() const { return fromFlagValue(m_writable, writableDefault()); }
+ [[nodiscard]] bool isConstant() const { return m_const; }
+ [[nodiscard]] bool isRequired() const { return m_required; }
+ [[nodiscard]] PropertyType propertyType() const { return m_propertyType; }
+ [[nodiscard]] const PropertyNode *overriddenFrom() const { return m_overrides; }
+
+ [[nodiscard]] bool storedDefault() const { return true; }
+ [[nodiscard]] bool writableDefault() const { return !setters().isEmpty(); }
+
+private:
+ QString m_type {};
+ PropertyType m_propertyType { PropertyType::StandardProperty };
+ NodeList m_functions[(qsizetype)FunctionRole::NumFunctionRoles] {};
+ FlagValue m_stored { FlagValueDefault };
+ FlagValue m_writable { FlagValueDefault };
+ FlagValue m_user { FlagValueDefault };
+ bool m_const { false };
+ bool m_required { false };
+ const PropertyNode *m_overrides { nullptr };
+};
+
+inline void PropertyNode::addFunction(FunctionNode *function, FunctionRole role)
+{
+ m_functions[(int)role].append(function);
+ function->addAssociatedProperty(this);
+}
+
+inline void PropertyNode::addSignal(FunctionNode *function, FunctionRole role)
+{
+ m_functions[(int)role].append(function);
+ function->addAssociatedProperty(this);
+}
+
+inline NodeList PropertyNode::functions() const
+{
+ NodeList list;
+ for (qsizetype i{0}; i < (qsizetype)FunctionRole::NumFunctionRoles; ++i)
+ list += m_functions[i];
+ return list;
+}
+
+QT_END_NAMESPACE
+
+#endif // PROPERTYNODE_H
diff --git a/src/qdoc/qdoc/src/qdoc/proxynode.cpp b/src/qdoc/qdoc/src/qdoc/proxynode.cpp
new file mode 100644
index 000000000..49e4be34e
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/proxynode.cpp
@@ -0,0 +1,54 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "proxynode.h"
+
+#include "tree.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class ProxyNode
+ \brief A class for representing an Aggregate that is documented in a different module.
+
+ This class is used to represent an Aggregate (usually a class)
+ that is located and documented in a different module. In the
+ current module, a ProxyNode holds child nodes that are related
+ to the class in the other module.
+
+ For example, class QHash is located and documented in QtCore.
+ There are many global functions named qHash() in QtCore that
+ are all related to class QHash using the \c relates command.
+ There are also a few qHash() function in QtNetwork that are
+ related to QHash. These functions must be documented when the
+ documentation for QtNetwork is generated, but the reference
+ page for QHash must link to that documentation in its related
+ nonmembers list.
+
+ The ProxyNode allows qdoc to construct links to the related
+ functions (or other things?) in QtNetwork from the reference
+ page in QtCore.
+ */
+
+/*!
+ Constructs the ProxyNode, which at this point looks like any
+ other Aggregate, and then finds the Tree this node is in and
+ appends this node to that Tree's proxy list so it will be
+ easy to find later.
+ */
+ProxyNode::ProxyNode(Aggregate *parent, const QString &name) : Aggregate(Node::Proxy, parent, name)
+{
+ tree()->appendProxy(this);
+}
+
+/*! \fn bool ProxyNode::docMustBeGenerated() const
+ Returns true because a ProxyNode always means some documentation
+ must be generated.
+*/
+
+/*! \fn bool ProxyNode::isRelatableType() const
+ Returns true because the ProxyNode exists so that elements
+ can be related to it with the \c {\\relates} command.
+*/
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/proxynode.h b/src/qdoc/qdoc/src/qdoc/proxynode.h
new file mode 100644
index 000000000..cced34892
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/proxynode.h
@@ -0,0 +1,23 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef PROXYNODE_H
+#define PROXYNODE_H
+
+#include "aggregate.h"
+
+#include <QtCore/qglobal.h>
+
+QT_BEGIN_NAMESPACE
+
+class ProxyNode : public Aggregate
+{
+public:
+ ProxyNode(Aggregate *parent, const QString &name);
+ [[nodiscard]] bool docMustBeGenerated() const override { return true; }
+ [[nodiscard]] bool isRelatableType() const override { return true; }
+};
+
+QT_END_NAMESPACE
+
+#endif // PROXYNODE_H
diff --git a/src/qdoc/qdoc/src/qdoc/puredocparser.cpp b/src/qdoc/qdoc/src/qdoc/puredocparser.cpp
new file mode 100644
index 000000000..c6de06a9c
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/puredocparser.cpp
@@ -0,0 +1,74 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "puredocparser.h"
+
+#include "qdocdatabase.h"
+#include "tokenizer.h"
+
+#include <cerrno>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ Parses the source file identified by \a filePath and adds its
+ parsed contents to the database. The \a location is used for
+ reporting errors.
+ */
+std::vector<UntiedDocumentation> PureDocParser::parse_qdoc_file(const QString &filePath)
+{
+ QFile in(filePath);
+ if (!in.open(QIODevice::ReadOnly)) {
+ location.error(
+ QStringLiteral("Can't open source file '%1' (%2)").arg(filePath, strerror(errno)));
+ return {};
+ }
+
+ return processQdocComments(in);
+}
+
+/*!
+ This is called by parseSourceFile() to do the actual parsing
+ and tree building. It only processes qdoc comments. It skips
+ everything else.
+ */
+std::vector<UntiedDocumentation> PureDocParser::processQdocComments(QFile& input_file)
+{
+ std::vector<UntiedDocumentation> untied{};
+
+ Tokenizer tokenizer(Location{input_file.fileName()}, input_file);
+
+ const QSet<QString> &commands = CppCodeParser::topic_commands + CppCodeParser::meta_commands;
+
+ int token = tokenizer.getToken();
+ while (token != Tok_Eoi) {
+ if (token != Tok_Doc) {
+ token = tokenizer.getToken();
+ continue;
+ }
+ QString comment = tokenizer.lexeme(); // returns an entire qdoc comment.
+ Location start_loc(tokenizer.location());
+ token = tokenizer.getToken();
+
+ Doc::trimCStyleComment(start_loc, comment);
+ Location end_loc(tokenizer.location());
+
+ // Doc constructor parses the comment.
+ Doc doc(start_loc, end_loc, comment, commands, CppCodeParser::topic_commands);
+ if (doc.topicsUsed().isEmpty()) {
+ doc.location().warning(QStringLiteral("This qdoc comment contains no topic command "
+ "(e.g., '\\%1', '\\%2').")
+ .arg(COMMAND_MODULE, COMMAND_PAGE));
+ continue;
+ }
+
+ if (hasTooManyTopics(doc))
+ continue;
+
+ untied.emplace_back(UntiedDocumentation{doc, QStringList()});
+ }
+
+ return untied;
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/puredocparser.h b/src/qdoc/qdoc/src/qdoc/puredocparser.h
new file mode 100644
index 000000000..d3467ed92
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/puredocparser.h
@@ -0,0 +1,31 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef PUREDOCPARSER_H
+#define PUREDOCPARSER_H
+
+#include "cppcodeparser.h"
+
+#include <QtCore/QFile>
+
+QT_BEGIN_NAMESPACE
+
+class Location;
+
+class PureDocParser
+{
+public:
+ PureDocParser(const Location& location) : location{location} {}
+
+ std::vector<UntiedDocumentation> parse_qdoc_file(const QString& filePath);
+
+private:
+ std::vector<UntiedDocumentation> processQdocComments(QFile& input_file);
+
+private:
+ const Location& location;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/qdoccommandlineparser.cpp b/src/qdoc/qdoc/src/qdoc/qdoccommandlineparser.cpp
new file mode 100644
index 000000000..6586056a4
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/qdoccommandlineparser.cpp
@@ -0,0 +1,177 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "qdoccommandlineparser.h"
+
+#include "utilities.h"
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qfile.h>
+
+QDocCommandLineParser::QDocCommandLineParser()
+ : QCommandLineParser(),
+ defineOption(QStringList() << QStringLiteral("D")),
+ dependsOption(QStringList() << QStringLiteral("depends")),
+ highlightingOption(QStringList() << QStringLiteral("highlighting")),
+ showInternalOption(QStringList() << QStringLiteral("showinternal")),
+ redirectDocumentationToDevNullOption(QStringList()
+ << QStringLiteral("redirect-documentation-to-dev-null")),
+ noExamplesOption(QStringList() << QStringLiteral("no-examples")),
+ indexDirOption(QStringList() << QStringLiteral("indexdir")),
+ installDirOption(QStringList() << QStringLiteral("installdir")),
+ outputDirOption(QStringList() << QStringLiteral("outputdir")),
+ outputFormatOption(QStringList() << QStringLiteral("outputformat")),
+ noLinkErrorsOption(QStringList() << QStringLiteral("no-link-errors")),
+ autoLinkErrorsOption(QStringList() << QStringLiteral("autolink-errors")),
+ debugOption(QStringList() << QStringLiteral("debug")),
+ atomsDumpOption("atoms-dump"),
+ prepareOption(QStringList() << QStringLiteral("prepare")),
+ generateOption(QStringList() << QStringLiteral("generate")),
+ logProgressOption(QStringList() << QStringLiteral("log-progress")),
+ singleExecOption(QStringList() << QStringLiteral("single-exec")),
+ includePathOption("I", "Add dir to the include path for header files.", "path"),
+ includePathSystemOption("isystem", "Add dir to the system include path for header files.",
+ "path"),
+ frameworkOption("F", "Add macOS framework to the include path for header files.",
+ "framework"),
+ timestampsOption(QStringList() << QStringLiteral("timestamps")),
+ useDocBookExtensions(QStringList() << QStringLiteral("docbook-extensions"))
+{
+ setApplicationDescription(QStringLiteral("Qt documentation generator"));
+ addHelpOption();
+ addVersionOption();
+
+ setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions);
+
+ addPositionalArgument("file1.qdocconf ...", QStringLiteral("Input files"));
+
+ defineOption.setDescription(
+ QStringLiteral("Define the argument as a macro while parsing sources"));
+ defineOption.setValueName(QStringLiteral("macro[=def]"));
+ addOption(defineOption);
+
+ dependsOption.setDescription(QStringLiteral("Specify dependent modules"));
+ dependsOption.setValueName(QStringLiteral("module"));
+ addOption(dependsOption);
+
+ highlightingOption.setDescription(
+ QStringLiteral("Turn on syntax highlighting (makes qdoc run slower)"));
+ addOption(highlightingOption);
+
+ showInternalOption.setDescription(QStringLiteral("Include content marked internal"));
+ addOption(showInternalOption);
+
+ redirectDocumentationToDevNullOption.setDescription(
+ QStringLiteral("Save all documentation content to /dev/null. "
+ " Useful if someone is interested in qdoc errors only."));
+ addOption(redirectDocumentationToDevNullOption);
+
+ noExamplesOption.setDescription(QStringLiteral("Do not generate documentation for examples"));
+ addOption(noExamplesOption);
+
+ indexDirOption.setDescription(
+ QStringLiteral("Specify a directory where QDoc should search for index files to load"));
+ indexDirOption.setValueName(QStringLiteral("dir"));
+ addOption(indexDirOption);
+
+ installDirOption.setDescription(QStringLiteral(
+ "Specify the directory where the output will be after running \"make install\""));
+ installDirOption.setValueName(QStringLiteral("dir"));
+ addOption(installDirOption);
+
+ outputDirOption.setDescription(
+ QStringLiteral("Specify output directory, overrides setting in qdocconf file"));
+ outputDirOption.setValueName(QStringLiteral("dir"));
+ addOption(outputDirOption);
+
+ outputFormatOption.setDescription(
+ QStringLiteral("Specify output format, overrides setting in qdocconf file"));
+ outputFormatOption.setValueName(QStringLiteral("format"));
+ addOption(outputFormatOption);
+
+ noLinkErrorsOption.setDescription(
+ QStringLiteral("Do not print link errors (i.e. missing targets)"));
+ addOption(noLinkErrorsOption);
+
+ autoLinkErrorsOption.setDescription(QStringLiteral("Show errors when automatic linking fails"));
+ addOption(autoLinkErrorsOption);
+
+ debugOption.setDescription(QStringLiteral("Enable debug output"));
+ addOption(debugOption);
+
+ atomsDumpOption.setDescription(QStringLiteral(
+ "Shows a human-readable form of the intermediate result of parsing a block-comment."));
+ addOption(atomsDumpOption);
+
+ prepareOption.setDescription(
+ QStringLiteral("Run qdoc only to generate an index file, not the docs"));
+ addOption(prepareOption);
+
+ generateOption.setDescription(
+ QStringLiteral("Run qdoc to read the index files and generate the docs"));
+ addOption(generateOption);
+
+ logProgressOption.setDescription(QStringLiteral("Log progress on stderr."));
+ addOption(logProgressOption);
+
+ singleExecOption.setDescription(QStringLiteral("Run qdoc once over all the qdoc conf files."));
+ addOption(singleExecOption);
+
+ includePathOption.setFlags(QCommandLineOption::ShortOptionStyle);
+ addOption(includePathOption);
+
+ addOption(includePathSystemOption);
+
+ frameworkOption.setFlags(QCommandLineOption::ShortOptionStyle);
+ addOption(frameworkOption);
+
+ timestampsOption.setDescription(QStringLiteral("Timestamp each qdoc log line."));
+ addOption(timestampsOption);
+
+ useDocBookExtensions.setDescription(
+ QStringLiteral("Use the DocBook Library extensions for metadata."));
+ addOption(useDocBookExtensions);
+}
+
+/*!
+ * \internal
+ *
+ * Create a list of arguments from the command line and/or file(s).
+ * This lets QDoc accept arguments contained in a file provided as a
+ * command-line argument prepended by '@'.
+ */
+static QStringList argumentsFromCommandLineAndFile(const QStringList &arguments)
+{
+ QStringList allArguments;
+ allArguments.reserve(arguments.size());
+ for (const QString &argument : arguments) {
+ // "@file" doesn't start with a '-' so we can't use QCommandLineParser for it
+ if (argument.startsWith(QLatin1Char('@'))) {
+ QString optionsFile = argument;
+ optionsFile.remove(0, 1);
+ if (optionsFile.isEmpty())
+ qFatal("The @ option requires an input file");
+ QFile f(optionsFile);
+ if (!f.open(QIODevice::ReadOnly | QIODevice::Text))
+ qFatal("Cannot open options file specified with @: %ls",
+ qUtf16Printable(optionsFile));
+ while (!f.atEnd()) {
+ QString line = QString::fromLocal8Bit(f.readLine().trimmed());
+ if (!line.isEmpty())
+ allArguments << line;
+ }
+ } else {
+ allArguments << argument;
+ }
+ }
+ return allArguments;
+}
+
+void QDocCommandLineParser::process(const QStringList &arguments)
+{
+ auto allArguments = argumentsFromCommandLineAndFile(arguments);
+ QCommandLineParser::process(allArguments);
+
+ if (isSet(singleExecOption) && isSet(indexDirOption))
+ qCWarning(lcQdoc) << "Warning: -indexdir option ignored: Index files are not used in single-exec mode.";
+}
diff --git a/src/qdoc/qdoc/src/qdoc/qdoccommandlineparser.h b/src/qdoc/qdoc/src/qdoc/qdoccommandlineparser.h
new file mode 100644
index 000000000..57b36b582
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/qdoccommandlineparser.h
@@ -0,0 +1,28 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef QDOCCOMMANDLINEPARSER_H
+#define QDOCCOMMANDLINEPARSER_H
+
+#include <QtCore/qcommandlineparser.h>
+
+QT_BEGIN_NAMESPACE
+
+struct QDocCommandLineParser : public QCommandLineParser
+{
+ QDocCommandLineParser();
+ void process(const QStringList &arguments);
+
+ QCommandLineOption defineOption, dependsOption, highlightingOption;
+ QCommandLineOption showInternalOption, redirectDocumentationToDevNullOption;
+ QCommandLineOption noExamplesOption, indexDirOption, installDirOption;
+ QCommandLineOption outputDirOption, outputFormatOption;
+ QCommandLineOption noLinkErrorsOption, autoLinkErrorsOption, debugOption, atomsDumpOption;
+ QCommandLineOption prepareOption, generateOption, logProgressOption, singleExecOption;
+ QCommandLineOption includePathOption, includePathSystemOption, frameworkOption;
+ QCommandLineOption timestampsOption, useDocBookExtensions;
+};
+
+QT_END_NAMESPACE
+
+#endif // QDOCCOMMANDLINEPARSER_H
diff --git a/src/qdoc/qdoc/src/qdoc/qdocdatabase.cpp b/src/qdoc/qdoc/src/qdoc/qdocdatabase.cpp
new file mode 100644
index 000000000..57e88fbde
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/qdocdatabase.cpp
@@ -0,0 +1,1685 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "qdocdatabase.h"
+
+#include "atom.h"
+#include "collectionnode.h"
+#include "functionnode.h"
+#include "generator.h"
+#include "qdocindexfiles.h"
+#include "tree.h"
+
+#include <QtCore/qregularexpression.h>
+#include <stack>
+
+QT_BEGIN_NAMESPACE
+
+using namespace Qt::StringLiterals;
+static NodeMultiMap emptyNodeMultiMap_;
+
+/*!
+ \class QDocForest
+
+ A class representing a forest of Tree objects.
+
+ This private class manages a collection of Tree objects (a
+ forest) for the singleton QDocDatabase object. It is only
+ accessed by that singleton QDocDatabase object, which is a
+ friend. Each tree in the forest is an instance of class
+ Tree, which is a mostly private class. Both QDocForest and
+ QDocDatabase are friends of Tree and have full access.
+
+ There are two kinds of trees in the forest, differing not
+ in structure but in use. One Tree is the primary tree. It
+ is the tree representing the module being documented. All
+ the other trees in the forest are called index trees. Each
+ one represents the contents of the index file for one of
+ the modules the current module must be able to link to.
+
+ The instances of subclasses of Node in the primary tree
+ will contain documentation in an instance of Doc. The
+ index trees contain no documentation, and each Node in
+ an index tree is marked as an index node.
+
+ Each tree is named with the name of its module.
+
+ The search order is created by searchOrder(), if it has
+ not already been created. The search order and module
+ names arrays have parallel structure, i.e. modulNames_[i]
+ is the module name of the Tree at searchOrder_[i].
+
+ The primary tree is always the first tree in the search
+ order. i.e., when the database is searched, the primary
+ tree is always searched first, unless a specific tree is
+ being searched.
+ */
+
+/*!
+ Destroys the qdoc forest. This requires deleting
+ each Tree in the forest. Note that the forest has
+ been transferred into the search order array, so
+ what is really being used to destroy the forest
+ is the search order array.
+ */
+QDocForest::~QDocForest()
+{
+ for (auto *entry : m_searchOrder)
+ delete entry;
+ m_forest.clear();
+ m_searchOrder.clear();
+ m_indexSearchOrder.clear();
+ m_moduleNames.clear();
+ m_primaryTree = nullptr;
+}
+
+/*!
+ Initializes the forest prior to a traversal and
+ returns a pointer to the primary tree. If the
+ forest is empty, it returns \nullptr.
+ */
+Tree *QDocForest::firstTree()
+{
+ m_currentIndex = 0;
+ return (!searchOrder().isEmpty() ? searchOrder()[0] : nullptr);
+}
+
+/*!
+ Increments the forest's current tree index. If the current
+ tree index is still within the forest, the function returns
+ the pointer to the current tree. Otherwise it returns \nullptr.
+ */
+Tree *QDocForest::nextTree()
+{
+ ++m_currentIndex;
+ return (m_currentIndex < searchOrder().size() ? searchOrder()[m_currentIndex] : nullptr);
+}
+
+/*!
+ \fn Tree *QDocForest::primaryTree()
+
+ Returns the pointer to the primary tree.
+ */
+
+/*!
+ Finds the tree for module \a t in the forest and
+ sets the primary tree to be that tree. After the
+ primary tree is set, that tree is removed from the
+ forest.
+
+ \node It gets re-inserted into the forest after the
+ search order is built.
+ */
+void QDocForest::setPrimaryTree(const QString &t)
+{
+ QString T = t.toLower();
+ m_primaryTree = findTree(T);
+ m_forest.remove(T);
+ if (m_primaryTree == nullptr)
+ qCCritical(lcQdoc) << "Error: Could not set primary tree to" << t;
+}
+
+/*!
+ If the search order array is empty, create the search order.
+ If the search order array is not empty, do nothing.
+ */
+void QDocForest::setSearchOrder(const QStringList &t)
+{
+ if (!m_searchOrder.isEmpty())
+ return;
+
+ /* Allocate space for the search order. */
+ m_searchOrder.reserve(m_forest.size() + 1);
+ m_searchOrder.clear();
+ m_moduleNames.reserve(m_forest.size() + 1);
+ m_moduleNames.clear();
+
+ /* The primary tree is always first in the search order. */
+ QString primaryName = primaryTree()->physicalModuleName();
+ m_searchOrder.append(m_primaryTree);
+ m_moduleNames.append(primaryName);
+ m_forest.remove(primaryName);
+
+ for (const QString &m : t) {
+ if (primaryName != m) {
+ auto it = m_forest.find(m);
+ if (it != m_forest.end()) {
+ m_searchOrder.append(it.value());
+ m_moduleNames.append(m);
+ m_forest.remove(m);
+ }
+ }
+ }
+ /*
+ If any trees remain in the forest, just add them
+ to the search order sequentially, because we don't
+ know any better at this point.
+ */
+ if (!m_forest.isEmpty()) {
+ for (auto it = m_forest.begin(); it != m_forest.end(); ++it) {
+ m_searchOrder.append(it.value());
+ m_moduleNames.append(it.key());
+ }
+ m_forest.clear();
+ }
+
+ /*
+ Rebuild the forest after constructing the search order.
+ It was destroyed during construction of the search order,
+ but it is needed for module-specific searches.
+
+ Note that this loop also inserts the primary tree into the
+ forrest. That is a requirement.
+ */
+ for (int i = 0; i < m_searchOrder.size(); ++i) {
+ if (!m_forest.contains(m_moduleNames.at(i))) {
+ m_forest.insert(m_moduleNames.at(i), m_searchOrder.at(i));
+ }
+ }
+}
+
+/*!
+ Returns an ordered array of Tree pointers that represents
+ the order in which the trees should be searched. The first
+ Tree in the array is the tree for the current module, i.e.
+ the module for which qdoc is generating documentation.
+
+ The other Tree pointers in the array represent the index
+ files that were loaded in preparation for generating this
+ module's documentation. Each Tree pointer represents one
+ index file. The index file Tree points have been ordered
+ heuristically to, hopefully, minimize searching. Thr order
+ will probably be changed.
+
+ If the search order array is empty, this function calls
+ indexSearchOrder(). The search order array is empty while
+ the index files are being loaded, but some searches must
+ be performed during this time, notably searches for base
+ class nodes. These searches require a temporary search
+ order. The temporary order changes throughout the loading
+ of the index files, but it is always the tree for the
+ current index file first, followed by the trees for the
+ index files that have already been loaded. The only
+ ordering required in this temporary search order is that
+ the current tree must be searched first.
+ */
+const QList<Tree *> &QDocForest::searchOrder()
+{
+ if (m_searchOrder.isEmpty())
+ return indexSearchOrder();
+ return m_searchOrder;
+}
+
+/*!
+ There are two search orders used by qdoc when searching for
+ things. The normal search order is returned by searchOrder(),
+ but this normal search order is not known until all the index
+ files have been read. At that point, setSearchOrder() is
+ called.
+
+ During the reading of the index files, the vector holding
+ the normal search order remains empty. Whenever the search
+ order is requested, if that vector is empty, this function
+ is called to return a temporary search order, which includes
+ all the index files that have been read so far, plus the
+ one being read now. That one is prepended to the front of
+ the vector.
+ */
+const QList<Tree *> &QDocForest::indexSearchOrder()
+{
+ if (m_forest.size() > m_indexSearchOrder.size())
+ m_indexSearchOrder.prepend(m_primaryTree);
+ return m_indexSearchOrder;
+}
+
+/*!
+ Create a new Tree for the index file for the specified
+ \a module and add it to the forest. Return the pointer
+ to its root.
+ */
+NamespaceNode *QDocForest::newIndexTree(const QString &module)
+{
+ m_primaryTree = new Tree(module, m_qdb);
+ m_forest.insert(module.toLower(), m_primaryTree);
+ return m_primaryTree->root();
+}
+
+/*!
+ Create a new Tree for use as the primary tree. This tree
+ will represent the primary module. \a module is camel case.
+ */
+void QDocForest::newPrimaryTree(const QString &module)
+{
+ m_primaryTree = new Tree(module, m_qdb);
+}
+
+/*!
+ Searches through the forest for a node named \a targetPath
+ and returns a pointer to it if found. The \a relative node
+ is the starting point. It only makes sense for the primary
+ tree, which is searched first. After the primary tree has
+ been searched, \a relative is set to 0 for searching the
+ other trees, which are all index trees. With relative set
+ to 0, the starting point for each index tree is the root
+ of the index tree.
+
+ If \a targetPath is resolved successfully but it refers to
+ a \\section title, continue the search, keeping the section
+ title as a fallback if no higher-priority targets are found.
+ */
+const Node *QDocForest::findNodeForTarget(QStringList &targetPath, const Node *relative,
+ Node::Genus genus, QString &ref)
+{
+ int flags = SearchBaseClasses | SearchEnumValues;
+
+ QString entity = targetPath.takeFirst();
+ QStringList entityPath = entity.split("::");
+
+ QString target;
+ if (!targetPath.isEmpty())
+ target = targetPath.takeFirst();
+
+ TargetRec::TargetType type = TargetRec::Unknown;
+ const Node *tocNode = nullptr;
+ for (const auto *tree : searchOrder()) {
+ const Node *n = tree->findNodeForTarget(entityPath, target, relative, flags, genus, ref, &type);
+ if (n) {
+ // Targets referring to non-section titles are returned immediately
+ if (type != TargetRec::Contents)
+ return n;
+ if (!tocNode)
+ tocNode = n;
+ }
+ relative = nullptr;
+ }
+ return tocNode;
+}
+
+/*!
+ Finds the FunctionNode for the qualified function name
+ in \a path, that also has the specified \a parameters.
+ Returns a pointer to the first matching function.
+
+ \a relative is a node in the primary tree where the search
+ should begin. It is only used when searching the primary
+ tree. \a genus can be used to force the search to find a
+ C++ function or a QML function.
+ */
+const FunctionNode *QDocForest::findFunctionNode(const QStringList &path,
+ const Parameters &parameters, const Node *relative,
+ Node::Genus genus)
+{
+ for (const auto *tree : searchOrder()) {
+ const FunctionNode *fn = tree->findFunctionNode(path, parameters, relative, genus);
+ if (fn)
+ return fn;
+ relative = nullptr;
+ }
+ return nullptr;
+}
+
+/*! \class QDocDatabase
+ This class provides exclusive access to the qdoc database,
+ which consists of a forrest of trees and a lot of maps and
+ other useful data structures.
+ */
+
+QDocDatabase *QDocDatabase::s_qdocDB = nullptr;
+NodeMap QDocDatabase::s_typeNodeMap;
+NodeMultiMap QDocDatabase::s_obsoleteClasses;
+NodeMultiMap QDocDatabase::s_classesWithObsoleteMembers;
+NodeMultiMap QDocDatabase::s_obsoleteQmlTypes;
+NodeMultiMap QDocDatabase::s_qmlTypesWithObsoleteMembers;
+NodeMultiMap QDocDatabase::s_cppClasses;
+NodeMultiMap QDocDatabase::s_qmlBasicTypes;
+NodeMultiMap QDocDatabase::s_qmlTypes;
+NodeMultiMap QDocDatabase::s_examples;
+NodeMultiMapMap QDocDatabase::s_newClassMaps;
+NodeMultiMapMap QDocDatabase::s_newQmlTypeMaps;
+NodeMultiMapMap QDocDatabase::s_newEnumValueMaps;
+NodeMultiMapMap QDocDatabase::s_newSinceMaps;
+
+/*!
+ Constructs the singleton qdoc database object. The singleton
+ constructs the \a forest_ object, which is also a singleton.
+ \a m_showInternal is normally false. If it is true, qdoc will
+ write documentation for nodes marked \c internal.
+
+ \a singleExec_ is false when qdoc is being used in the standard
+ way of running qdoc twices for each module, first with -prepare
+ and then with -generate. First the -prepare phase is run for
+ each module, then the -generate phase is run for each module.
+
+ When \a singleExec_ is true, qdoc is run only once. During the
+ single execution, qdoc processes the qdocconf files for all the
+ modules sequentially in a loop. Each source file for each module
+ is read exactly once.
+ */
+QDocDatabase::QDocDatabase() : m_forest(this)
+{
+ // nothing
+}
+
+/*!
+ Creates the singleton. Allows only one instance of the class
+ to be created. Returns a pointer to the singleton.
+*/
+QDocDatabase *QDocDatabase::qdocDB()
+{
+ if (s_qdocDB == nullptr) {
+ s_qdocDB = new QDocDatabase;
+ initializeDB();
+ }
+ return s_qdocDB;
+}
+
+/*!
+ Destroys the singleton.
+ */
+void QDocDatabase::destroyQdocDB()
+{
+ if (s_qdocDB != nullptr) {
+ delete s_qdocDB;
+ s_qdocDB = nullptr;
+ }
+}
+
+/*!
+ Initialize data structures in the singleton qdoc database.
+
+ In particular, the type node map is initialized with a lot
+ type names that don't refer to documented types. For example,
+ many C++ standard types are included. These might be documented
+ here at some point, but for now they are not. Other examples
+ include \c array and \c data, which are just generic names
+ used as place holders in function signatures that appear in
+ the documentation.
+
+ \note Do not add QML basic types into this list as it will
+ break linking to those types.
+ */
+void QDocDatabase::initializeDB()
+{
+ s_typeNodeMap.insert("accepted", nullptr);
+ s_typeNodeMap.insert("actionPerformed", nullptr);
+ s_typeNodeMap.insert("activated", nullptr);
+ s_typeNodeMap.insert("alias", nullptr);
+ s_typeNodeMap.insert("anchors", nullptr);
+ s_typeNodeMap.insert("any", nullptr);
+ s_typeNodeMap.insert("array", nullptr);
+ s_typeNodeMap.insert("autoSearch", nullptr);
+ s_typeNodeMap.insert("axis", nullptr);
+ s_typeNodeMap.insert("backClicked", nullptr);
+ s_typeNodeMap.insert("boomTime", nullptr);
+ s_typeNodeMap.insert("border", nullptr);
+ s_typeNodeMap.insert("buttonClicked", nullptr);
+ s_typeNodeMap.insert("callback", nullptr);
+ s_typeNodeMap.insert("char", nullptr);
+ s_typeNodeMap.insert("clicked", nullptr);
+ s_typeNodeMap.insert("close", nullptr);
+ s_typeNodeMap.insert("closed", nullptr);
+ s_typeNodeMap.insert("cond", nullptr);
+ s_typeNodeMap.insert("data", nullptr);
+ s_typeNodeMap.insert("dataReady", nullptr);
+ s_typeNodeMap.insert("dateString", nullptr);
+ s_typeNodeMap.insert("dateTimeString", nullptr);
+ s_typeNodeMap.insert("datetime", nullptr);
+ s_typeNodeMap.insert("day", nullptr);
+ s_typeNodeMap.insert("deactivated", nullptr);
+ s_typeNodeMap.insert("drag", nullptr);
+ s_typeNodeMap.insert("easing", nullptr);
+ s_typeNodeMap.insert("error", nullptr);
+ s_typeNodeMap.insert("exposure", nullptr);
+ s_typeNodeMap.insert("fatalError", nullptr);
+ s_typeNodeMap.insert("fileSelected", nullptr);
+ s_typeNodeMap.insert("flags", nullptr);
+ s_typeNodeMap.insert("float", nullptr);
+ s_typeNodeMap.insert("focus", nullptr);
+ s_typeNodeMap.insert("focusZone", nullptr);
+ s_typeNodeMap.insert("format", nullptr);
+ s_typeNodeMap.insert("framePainted", nullptr);
+ s_typeNodeMap.insert("from", nullptr);
+ s_typeNodeMap.insert("frontClicked", nullptr);
+ s_typeNodeMap.insert("function", nullptr);
+ s_typeNodeMap.insert("hasOpened", nullptr);
+ s_typeNodeMap.insert("hovered", nullptr);
+ s_typeNodeMap.insert("hoveredTitle", nullptr);
+ s_typeNodeMap.insert("hoveredUrl", nullptr);
+ s_typeNodeMap.insert("imageCapture", nullptr);
+ s_typeNodeMap.insert("imageProcessing", nullptr);
+ s_typeNodeMap.insert("index", nullptr);
+ s_typeNodeMap.insert("initialized", nullptr);
+ s_typeNodeMap.insert("isLoaded", nullptr);
+ s_typeNodeMap.insert("item", nullptr);
+ s_typeNodeMap.insert("key", nullptr);
+ s_typeNodeMap.insert("keysequence", nullptr);
+ s_typeNodeMap.insert("listViewClicked", nullptr);
+ s_typeNodeMap.insert("loadRequest", nullptr);
+ s_typeNodeMap.insert("locale", nullptr);
+ s_typeNodeMap.insert("location", nullptr);
+ s_typeNodeMap.insert("long", nullptr);
+ s_typeNodeMap.insert("message", nullptr);
+ s_typeNodeMap.insert("messageReceived", nullptr);
+ s_typeNodeMap.insert("mode", nullptr);
+ s_typeNodeMap.insert("month", nullptr);
+ s_typeNodeMap.insert("name", nullptr);
+ s_typeNodeMap.insert("number", nullptr);
+ s_typeNodeMap.insert("object", nullptr);
+ s_typeNodeMap.insert("offset", nullptr);
+ s_typeNodeMap.insert("ok", nullptr);
+ s_typeNodeMap.insert("openCamera", nullptr);
+ s_typeNodeMap.insert("openImage", nullptr);
+ s_typeNodeMap.insert("openVideo", nullptr);
+ s_typeNodeMap.insert("padding", nullptr);
+ s_typeNodeMap.insert("parent", nullptr);
+ s_typeNodeMap.insert("path", nullptr);
+ s_typeNodeMap.insert("photoModeSelected", nullptr);
+ s_typeNodeMap.insert("position", nullptr);
+ s_typeNodeMap.insert("precision", nullptr);
+ s_typeNodeMap.insert("presetClicked", nullptr);
+ s_typeNodeMap.insert("preview", nullptr);
+ s_typeNodeMap.insert("previewSelected", nullptr);
+ s_typeNodeMap.insert("progress", nullptr);
+ s_typeNodeMap.insert("puzzleLost", nullptr);
+ s_typeNodeMap.insert("qmlSignal", nullptr);
+ s_typeNodeMap.insert("rectangle", nullptr);
+ s_typeNodeMap.insert("request", nullptr);
+ s_typeNodeMap.insert("requestId", nullptr);
+ s_typeNodeMap.insert("section", nullptr);
+ s_typeNodeMap.insert("selected", nullptr);
+ s_typeNodeMap.insert("send", nullptr);
+ s_typeNodeMap.insert("settingsClicked", nullptr);
+ s_typeNodeMap.insert("shoe", nullptr);
+ s_typeNodeMap.insert("short", nullptr);
+ s_typeNodeMap.insert("signed", nullptr);
+ s_typeNodeMap.insert("sizeChanged", nullptr);
+ s_typeNodeMap.insert("size_t", nullptr);
+ s_typeNodeMap.insert("sockaddr", nullptr);
+ s_typeNodeMap.insert("someOtherSignal", nullptr);
+ s_typeNodeMap.insert("sourceSize", nullptr);
+ s_typeNodeMap.insert("startButtonClicked", nullptr);
+ s_typeNodeMap.insert("state", nullptr);
+ s_typeNodeMap.insert("std::initializer_list", nullptr);
+ s_typeNodeMap.insert("std::list", nullptr);
+ s_typeNodeMap.insert("std::map", nullptr);
+ s_typeNodeMap.insert("std::pair", nullptr);
+ s_typeNodeMap.insert("std::string", nullptr);
+ s_typeNodeMap.insert("std::vector", nullptr);
+ s_typeNodeMap.insert("stringlist", nullptr);
+ s_typeNodeMap.insert("swapPlayers", nullptr);
+ s_typeNodeMap.insert("symbol", nullptr);
+ s_typeNodeMap.insert("t", nullptr);
+ s_typeNodeMap.insert("T", nullptr);
+ s_typeNodeMap.insert("tagChanged", nullptr);
+ s_typeNodeMap.insert("timeString", nullptr);
+ s_typeNodeMap.insert("timeout", nullptr);
+ s_typeNodeMap.insert("to", nullptr);
+ s_typeNodeMap.insert("toggled", nullptr);
+ s_typeNodeMap.insert("type", nullptr);
+ s_typeNodeMap.insert("unsigned", nullptr);
+ s_typeNodeMap.insert("urllist", nullptr);
+ s_typeNodeMap.insert("va_list", nullptr);
+ s_typeNodeMap.insert("value", nullptr);
+ s_typeNodeMap.insert("valueEmitted", nullptr);
+ s_typeNodeMap.insert("videoFramePainted", nullptr);
+ s_typeNodeMap.insert("videoModeSelected", nullptr);
+ s_typeNodeMap.insert("videoRecorder", nullptr);
+ s_typeNodeMap.insert("void", nullptr);
+ s_typeNodeMap.insert("volatile", nullptr);
+ s_typeNodeMap.insert("wchar_t", nullptr);
+ s_typeNodeMap.insert("x", nullptr);
+ s_typeNodeMap.insert("y", nullptr);
+ s_typeNodeMap.insert("zoom", nullptr);
+ s_typeNodeMap.insert("zoomTo", nullptr);
+}
+
+/*! \fn NamespaceNode *QDocDatabase::primaryTreeRoot()
+ Returns a pointer to the root node of the primary tree.
+ */
+
+/*!
+ \fn const CNMap &QDocDatabase::groups()
+ Returns a const reference to the collection of all
+ group nodes in the primary tree.
+*/
+
+/*!
+ \fn const CNMap &QDocDatabase::modules()
+ Returns a const reference to the collection of all
+ module nodes in the primary tree.
+*/
+
+/*!
+ \fn const CNMap &QDocDatabase::qmlModules()
+ Returns a const reference to the collection of all
+ QML module nodes in the primary tree.
+*/
+
+/*! \fn CollectionNode *QDocDatabase::findGroup(const QString &name)
+ Find the group node named \a name and return a pointer
+ to it. If a matching node is not found, add a new group
+ node named \a name and return a pointer to that one.
+
+ If a new group node is added, its parent is the tree root,
+ and the new group node is marked \e{not seen}.
+ */
+
+/*! \fn CollectionNode *QDocDatabase::findModule(const QString &name)
+ Find the module node named \a name and return a pointer
+ to it. If a matching node is not found, add a new module
+ node named \a name and return a pointer to that one.
+
+ If a new module node is added, its parent is the tree root,
+ and the new module node is marked \e{not seen}.
+ */
+
+/*! \fn CollectionNode *QDocDatabase::addGroup(const QString &name)
+ Looks up the group named \a name in the primary tree. If
+ a match is found, a pointer to the node is returned.
+ Otherwise, a new group node named \a name is created and
+ inserted into the collection, and the pointer to that node
+ is returned.
+ */
+
+/*! \fn CollectionNode *QDocDatabase::addModule(const QString &name)
+ Looks up the module named \a name in the primary tree. If
+ a match is found, a pointer to the node is returned.
+ Otherwise, a new module node named \a name is created and
+ inserted into the collection, and the pointer to that node
+ is returned.
+ */
+
+/*! \fn CollectionNode *QDocDatabase::addQmlModule(const QString &name)
+ Looks up the QML module named \a name in the primary tree.
+ If a match is found, a pointer to the node is returned.
+ Otherwise, a new QML module node named \a name is created
+ and inserted into the collection, and the pointer to that
+ node is returned.
+ */
+
+/*! \fn CollectionNode *QDocDatabase::addToGroup(const QString &name, Node *node)
+ Looks up the group node named \a name in the collection
+ of all group nodes. If a match is not found, a new group
+ node named \a name is created and inserted into the collection.
+ Then append \a node to the group's members list, and append the
+ group node to the member list of the \a node. The parent of the
+ \a node is not changed by this function. Returns a pointer to
+ the group node.
+ */
+
+/*! \fn CollectionNode *QDocDatabase::addToModule(const QString &name, Node *node)
+ Looks up the module node named \a name in the collection
+ of all module nodes. If a match is not found, a new module
+ node named \a name is created and inserted into the collection.
+ Then append \a node to the module's members list. The parent of
+ \a node is not changed by this function. Returns the module node.
+ */
+
+/*! \fn Collection *QDocDatabase::addToQmlModule(const QString &name, Node *node)
+ Looks up the QML module named \a name. If it isn't there,
+ create it. Then append \a node to the QML module's member
+ list. The parent of \a node is not changed by this function.
+ */
+
+/*! \fn QmlTypeNode *QDocDatabase::findQmlType(const QString &name)
+ Returns the QML type node identified by the qualified
+ QML type \a name, or \c nullptr if no type was found.
+ */
+
+/*!
+ Returns the QML type node identified by the QML module id
+ \a qmid and QML type \a name, or \c nullptr if no type
+ was found.
+
+ If the QML module id is empty, looks up the QML type by
+ \a name only.
+ */
+QmlTypeNode *QDocDatabase::findQmlType(const QString &qmid, const QString &name)
+{
+ if (!qmid.isEmpty()) {
+ if (auto *qcn = m_forest.lookupQmlType(qmid + u"::"_s + name); qcn)
+ return qcn;
+ }
+
+ QStringList path(name);
+ return static_cast<QmlTypeNode *>(m_forest.findNodeByNameAndType(path, &Node::isQmlType));
+}
+
+/*!
+ Returns the QML type node identified by the QML module id
+ constructed from the strings in the import \a record and the
+ QML type \a name. Returns \c nullptr if no type was not found.
+ */
+QmlTypeNode *QDocDatabase::findQmlType(const ImportRec &record, const QString &name)
+{
+ if (!record.isEmpty()) {
+ const QString qmName = record.m_importUri.isEmpty() ?
+ record.m_moduleName : record.m_importUri;
+ const QStringList dotSplit{name.split(QLatin1Char('.'))};
+ for (const auto &namePart : dotSplit) {
+ if (auto *qcn = m_forest.lookupQmlType(qmName + u"::"_s + namePart); qcn)
+ return qcn;
+ }
+ }
+ return nullptr;
+}
+
+/*!
+ Returns the QML node identified by the QML module id \a qmid
+ and \a name, searching in the primary tree only. If \a qmid
+ is an empty string, searches for the node using name only.
+
+ Returns \c nullptr if no node was found.
+*/
+QmlTypeNode *QDocDatabase::findQmlTypeInPrimaryTree(const QString &qmid, const QString &name)
+{
+ if (!qmid.isEmpty())
+ return primaryTree()->lookupQmlType(qmid + u"::"_s + name);
+ return static_cast<QmlTypeNode *>(primaryTreeRoot()->findChildNode(name, Node::QML, TypesOnly));
+}
+
+/*!
+ This function calls a set of functions for each tree in the
+ forest that has not already been analyzed. In this way, when
+ running qdoc in \e singleExec mode, each tree is analyzed in
+ turn, and its classes and types are added to the appropriate
+ node maps.
+ */
+void QDocDatabase::processForest()
+{
+ processForest(&QDocDatabase::findAllClasses);
+ processForest(&QDocDatabase::findAllFunctions);
+ processForest(&QDocDatabase::findAllObsoleteThings);
+ processForest(&QDocDatabase::findAllLegaleseTexts);
+ processForest(&QDocDatabase::findAllSince);
+ processForest(&QDocDatabase::findAllAttributions);
+ resolveNamespaces();
+}
+
+/*!
+ This function calls \a func for each tree in the forest,
+ ensuring that \a func is called only once per tree.
+
+ \sa processForest()
+ */
+void QDocDatabase::processForest(FindFunctionPtr func)
+{
+ Tree *t = m_forest.firstTree();
+ while (t) {
+ if (!m_completedFindFunctions.values(t).contains(func)) {
+ (this->*(func))(t->root());
+ m_completedFindFunctions.insert(t, func);
+ }
+ t = m_forest.nextTree();
+ }
+}
+
+/*!
+ Returns a reference to the collection of legalese texts.
+ */
+TextToNodeMap &QDocDatabase::getLegaleseTexts()
+{
+ processForest(&QDocDatabase::findAllLegaleseTexts);
+ return m_legaleseTexts;
+}
+
+/*!
+ Returns a reference to the map of C++ classes with obsolete members.
+ */
+NodeMultiMap &QDocDatabase::getClassesWithObsoleteMembers()
+{
+ processForest(&QDocDatabase::findAllObsoleteThings);
+ return s_classesWithObsoleteMembers;
+}
+
+/*!
+ Returns a reference to the map of obsolete QML types.
+ */
+NodeMultiMap &QDocDatabase::getObsoleteQmlTypes()
+{
+ processForest(&QDocDatabase::findAllObsoleteThings);
+ return s_obsoleteQmlTypes;
+}
+
+/*!
+ Returns a reference to the map of QML types with obsolete members.
+ */
+NodeMultiMap &QDocDatabase::getQmlTypesWithObsoleteMembers()
+{
+ processForest(&QDocDatabase::findAllObsoleteThings);
+ return s_qmlTypesWithObsoleteMembers;
+}
+
+/*!
+ Returns a reference to the map of QML basic types.
+ */
+NodeMultiMap &QDocDatabase::getQmlValueTypes()
+{
+ processForest(&QDocDatabase::findAllClasses);
+ return s_qmlBasicTypes;
+}
+
+/*!
+ Returns a reference to the multimap of QML types.
+ */
+NodeMultiMap &QDocDatabase::getQmlTypes()
+{
+ processForest(&QDocDatabase::findAllClasses);
+ return s_qmlTypes;
+}
+
+/*!
+ Returns a reference to the multimap of example nodes.
+ */
+NodeMultiMap &QDocDatabase::getExamples()
+{
+ processForest(&QDocDatabase::findAllClasses);
+ return s_examples;
+}
+
+/*!
+ Returns a reference to the multimap of attribution nodes.
+ */
+NodeMultiMap &QDocDatabase::getAttributions()
+{
+ processForest(&QDocDatabase::findAllAttributions);
+ return m_attributions;
+}
+
+/*!
+ Returns a reference to the map of obsolete C++ clases.
+ */
+NodeMultiMap &QDocDatabase::getObsoleteClasses()
+{
+ processForest(&QDocDatabase::findAllObsoleteThings);
+ return s_obsoleteClasses;
+}
+
+/*!
+ Returns a reference to the map of all C++ classes.
+ */
+NodeMultiMap &QDocDatabase::getCppClasses()
+{
+ processForest(&QDocDatabase::findAllClasses);
+ return s_cppClasses;
+}
+
+/*!
+ Returns the function index. This data structure is used to
+ output the function index page.
+ */
+NodeMapMap &QDocDatabase::getFunctionIndex()
+{
+ processForest(&QDocDatabase::findAllFunctions);
+ return m_functionIndex;
+}
+
+/*!
+ Finds all the nodes containing legalese text and puts them
+ in a map.
+ */
+void QDocDatabase::findAllLegaleseTexts(Aggregate *node)
+{
+ for (const auto &childNode : node->childNodes()) {
+ if (childNode->isPrivate())
+ continue;
+ if (!childNode->doc().legaleseText().isEmpty())
+ m_legaleseTexts.insert(childNode->doc().legaleseText(), childNode);
+ if (childNode->isAggregate())
+ findAllLegaleseTexts(static_cast<Aggregate *>(childNode));
+ }
+}
+
+/*!
+ \fn void QDocDatabase::findAllObsoleteThings(Aggregate *node)
+
+ Finds all nodes with status = Deprecated and sorts them into
+ maps. They can be C++ classes, QML types, or they can be
+ functions, enum types, typedefs, methods, etc.
+ */
+
+/*!
+ \fn void QDocDatabase::findAllSince(Aggregate *node)
+
+ Finds all the nodes in \a node where a \e{since} command appeared
+ in the qdoc comment and sorts them into maps according to the kind
+ of node.
+
+ This function is used for generating the "New Classes... in x.y"
+ section on the \e{What's New in Qt x.y} page.
+ */
+
+/*!
+ Find the \a key in the map of new class maps, and return a
+ reference to the value, which is a NodeMap. If \a key is not
+ found, return a reference to an empty NodeMap.
+ */
+const NodeMultiMap &QDocDatabase::getClassMap(const QString &key)
+{
+ processForest(&QDocDatabase::findAllSince);
+ auto it = s_newClassMaps.constFind(key);
+ return (it != s_newClassMaps.constEnd()) ? it.value() : emptyNodeMultiMap_;
+}
+
+/*!
+ Find the \a key in the map of new QML type maps, and return a
+ reference to the value, which is a NodeMap. If the \a key is not
+ found, return a reference to an empty NodeMap.
+ */
+const NodeMultiMap &QDocDatabase::getQmlTypeMap(const QString &key)
+{
+ processForest(&QDocDatabase::findAllSince);
+ auto it = s_newQmlTypeMaps.constFind(key);
+ return (it != s_newQmlTypeMaps.constEnd()) ? it.value() : emptyNodeMultiMap_;
+}
+
+/*!
+ Find the \a key in the map of new \e {since} maps, and return
+ a reference to the value, which is a NodeMultiMap. If \a key
+ is not found, return a reference to an empty NodeMultiMap.
+ */
+const NodeMultiMap &QDocDatabase::getSinceMap(const QString &key)
+{
+ processForest(&QDocDatabase::findAllSince);
+ auto it = s_newSinceMaps.constFind(key);
+ return (it != s_newSinceMaps.constEnd()) ? it.value() : emptyNodeMultiMap_;
+}
+
+/*!
+ Performs several housekeeping tasks prior to generating the
+ documentation. These tasks create required data structures
+ and resolve links.
+ */
+void QDocDatabase::resolveStuff()
+{
+ const auto &config = Config::instance();
+ if (config.dualExec() || config.preparing()) {
+ // order matters
+ primaryTree()->resolveBaseClasses(primaryTreeRoot());
+ primaryTree()->resolvePropertyOverriddenFromPtrs(primaryTreeRoot());
+ primaryTreeRoot()->resolveRelates();
+ primaryTreeRoot()->normalizeOverloads();
+ primaryTree()->markDontDocumentNodes();
+ primaryTree()->removePrivateAndInternalBases(primaryTreeRoot());
+ primaryTree()->resolveProperties();
+ primaryTreeRoot()->markUndocumentedChildrenInternal();
+ primaryTreeRoot()->resolveQmlInheritance();
+ primaryTree()->resolveTargets(primaryTreeRoot());
+ primaryTree()->resolveCppToQmlLinks();
+ primaryTree()->resolveSince(*primaryTreeRoot());
+ }
+ if (config.singleExec() && config.generating()) {
+ primaryTree()->resolveBaseClasses(primaryTreeRoot());
+ primaryTree()->resolvePropertyOverriddenFromPtrs(primaryTreeRoot());
+ primaryTreeRoot()->resolveQmlInheritance();
+ primaryTree()->resolveCppToQmlLinks();
+ primaryTree()->resolveSince(*primaryTreeRoot());
+ }
+ if (!config.preparing()) {
+ resolveNamespaces();
+ resolveProxies();
+ resolveBaseClasses();
+ updateNavigation();
+ }
+ if (config.dualExec())
+ QDocIndexFiles::destroyQDocIndexFiles();
+}
+
+void QDocDatabase::resolveBaseClasses()
+{
+ Tree *t = m_forest.firstTree();
+ while (t) {
+ t->resolveBaseClasses(t->root());
+ t = m_forest.nextTree();
+ }
+}
+
+/*!
+ Returns a reference to the namespace map. Constructs the
+ namespace map if it hasn't been constructed yet.
+
+ \note This function must not be called in the prepare phase.
+ */
+NodeMultiMap &QDocDatabase::getNamespaces()
+{
+ resolveNamespaces();
+ return m_namespaceIndex;
+}
+
+/*!
+ Multiple namespace nodes for namespace X can exist in the
+ qdoc database in different trees. This function first finds
+ all namespace nodes in all the trees and inserts them into
+ a multimap. Then it combines all the namespace nodes that
+ have the same name into a single namespace node of that
+ name and inserts that combined namespace node into an index.
+ */
+void QDocDatabase::resolveNamespaces()
+{
+ if (!m_namespaceIndex.isEmpty())
+ return;
+
+ bool linkErrors = !Config::instance().get(CONFIG_NOLINKERRORS).asBool();
+ NodeMultiMap namespaceMultimap;
+ Tree *t = m_forest.firstTree();
+ while (t) {
+ t->root()->findAllNamespaces(namespaceMultimap);
+ t = m_forest.nextTree();
+ }
+ const QList<QString> keys = namespaceMultimap.uniqueKeys();
+ for (const QString &key : keys) {
+ NamespaceNode *ns = nullptr;
+ NamespaceNode *indexNamespace = nullptr;
+ const NodeList namespaces = namespaceMultimap.values(key);
+ qsizetype count = namespaceMultimap.remove(key);
+ if (count > 0) {
+ for (auto *node : namespaces) {
+ ns = static_cast<NamespaceNode *>(node);
+ if (ns->isDocumentedHere())
+ break;
+ else if (ns->hadDoc())
+ indexNamespace = ns; // namespace was documented but in another tree
+ ns = nullptr;
+ }
+ if (ns) {
+ for (auto *node : namespaces) {
+ auto *nsNode = static_cast<NamespaceNode *>(node);
+ if (nsNode->hadDoc() && nsNode != ns) {
+ ns->doc().location().warning(
+ QStringLiteral("Namespace %1 documented more than once")
+ .arg(nsNode->name()), QStringLiteral("also seen here: %1")
+ .arg(nsNode->doc().location().toString()));
+ }
+ }
+ } else if (!indexNamespace) {
+ // Warn about documented children in undocumented namespaces.
+ // As the namespace can be documented outside this project,
+ // skip the warning if -no-link-errors is set
+ if (linkErrors) {
+ for (auto *node : namespaces) {
+ if (!node->isIndexNode())
+ static_cast<NamespaceNode *>(node)->reportDocumentedChildrenInUndocumentedNamespace();
+ }
+ }
+ } else {
+ for (auto *node : namespaces) {
+ auto *nsNode = static_cast<NamespaceNode *>(node);
+ if (nsNode != indexNamespace)
+ nsNode->setDocNode(indexNamespace);
+ }
+ }
+ }
+ /*
+ If there are multiple namespace nodes with the same
+ name where one of them will be the main reference page
+ for the namespace, include all nodes in the public
+ API of the namespace.
+ */
+ if (ns && count > 1) {
+ for (auto *node : namespaces) {
+ auto *nameSpaceNode = static_cast<NamespaceNode *>(node);
+ if (nameSpaceNode != ns) {
+ for (auto it = nameSpaceNode->constBegin(); it != nameSpaceNode->constEnd();
+ ++it) {
+ Node *anotherNs = *it;
+ if (anotherNs && anotherNs->isPublic() && !anotherNs->isInternal())
+ ns->includeChild(anotherNs);
+ }
+ }
+ }
+ }
+ /*
+ Add the main namespace reference node to index, or the last seen
+ namespace if the main one was not found.
+ */
+ if (!ns)
+ ns = indexNamespace ? indexNamespace : static_cast<NamespaceNode *>(namespaces.last());
+ m_namespaceIndex.insert(ns->name(), ns);
+ }
+}
+
+/*!
+ Each instance of class Tree that represents an index file
+ must be traversed to find all instances of class ProxyNode.
+ For each ProxyNode found, look up the ProxyNode's name in
+ the primary Tree. If it is found, it means that the proxy
+ node contains elements (normally just functions) that are
+ documented in the module represented by the Tree containing
+ the proxy node but that are related to the node we found in
+ the primary tree.
+ */
+void QDocDatabase::resolveProxies()
+{
+ // The first tree is the primary tree.
+ // Skip the primary tree.
+ Tree *t = m_forest.firstTree();
+ t = m_forest.nextTree();
+ while (t) {
+ const NodeList &proxies = t->proxies();
+ if (!proxies.isEmpty()) {
+ for (auto *node : proxies) {
+ const auto *pn = static_cast<ProxyNode *>(node);
+ if (pn->count() > 0) {
+ Aggregate *aggregate = primaryTree()->findAggregate(pn->name());
+ if (aggregate != nullptr)
+ aggregate->appendToRelatedByProxy(pn->childNodes());
+ }
+ }
+ }
+ t = m_forest.nextTree();
+ }
+}
+
+/*!
+ Finds the function node for the qualified function path in
+ \a target and returns a pointer to it. The \a target is a
+ function signature with or without parameters but without
+ the return type.
+
+ \a relative is the node in the primary tree where the search
+ begins. It is not used in the other trees, if the node is not
+ found in the primary tree. \a genus can be used to force the
+ search to find a C++ function or a QML function.
+
+ The entire forest is searched, but the first match is accepted.
+ */
+const FunctionNode *QDocDatabase::findFunctionNode(const QString &target, const Node *relative,
+ Node::Genus genus)
+{
+ QString signature;
+ QString function = target;
+ qsizetype length = target.size();
+ if (function.endsWith("()"))
+ function.chop(2);
+ if (function.endsWith(QChar(')'))) {
+ qsizetype position = function.lastIndexOf(QChar('('));
+ signature = function.mid(position + 1, length - position - 2);
+ function = function.left(position);
+ }
+ QStringList path = function.split("::");
+ return m_forest.findFunctionNode(path, Parameters(signature), relative, genus);
+}
+
+/*!
+ This function is called for autolinking to a \a type,
+ which could be a function return type or a parameter
+ type. The tree node that represents the \a type is
+ returned. All the trees are searched until a match is
+ found. When searching the primary tree, the search
+ begins at \a relative and proceeds up the parent chain.
+ When searching the index trees, the search begins at the
+ root.
+ */
+const Node *QDocDatabase::findTypeNode(const QString &type, const Node *relative, Node::Genus genus)
+{
+ QStringList path = type.split("::");
+ if ((path.size() == 1) && (path.at(0)[0].isLower() || path.at(0) == QString("T"))) {
+ auto it = s_typeNodeMap.find(path.at(0));
+ if (it != s_typeNodeMap.end())
+ return it.value();
+ }
+ return m_forest.findTypeNode(path, relative, genus);
+}
+
+/*!
+ Finds the node that will generate the documentation that
+ contains the \a target and returns a pointer to it.
+
+ Can this be improved by using the target map in Tree?
+ */
+const Node *QDocDatabase::findNodeForTarget(const QString &target, const Node *relative)
+{
+ const Node *node = nullptr;
+ if (target.isEmpty())
+ node = relative;
+ else if (target.endsWith(".html"))
+ node = findNodeByNameAndType(QStringList(target), &Node::isPageNode);
+ else {
+ QStringList path = target.split("::");
+ int flags = SearchBaseClasses | SearchEnumValues;
+ for (const auto *tree : searchOrder()) {
+ const Node *n = tree->findNode(path, relative, flags, Node::DontCare);
+ if (n)
+ return n;
+ relative = nullptr;
+ }
+ node = findPageNodeByTitle(target);
+ }
+ return node;
+}
+
+QStringList QDocDatabase::groupNamesForNode(Node *node)
+{
+ QStringList result;
+ CNMap *m = primaryTree()->getCollectionMap(Node::Group);
+
+ if (!m)
+ return result;
+
+ for (auto it = m->cbegin(); it != m->cend(); ++it)
+ if (it.value()->members().contains(node))
+ result << it.key();
+
+ return result;
+}
+
+/*!
+ Reads and parses the qdoc index files listed in \a indexFiles.
+ */
+void QDocDatabase::readIndexes(const QStringList &indexFiles)
+{
+ QStringList filesToRead;
+ for (const QString &file : indexFiles) {
+ QString fn = file.mid(file.lastIndexOf(QChar('/')) + 1);
+ if (!isLoaded(fn))
+ filesToRead << file;
+ else
+ qCCritical(lcQdoc) << "Index file" << file << "is already in memory.";
+ }
+ QDocIndexFiles::qdocIndexFiles()->readIndexes(filesToRead);
+}
+
+/*!
+ Generates a qdoc index file and write it to \a fileName. The
+ index file is generated with the parameters \a url and \a title,
+ using the generator \a g.
+ */
+void QDocDatabase::generateIndex(const QString &fileName, const QString &url, const QString &title,
+ Generator *g)
+{
+ QString t = fileName.mid(fileName.lastIndexOf(QChar('/')) + 1);
+ primaryTree()->setIndexFileName(t);
+ QDocIndexFiles::qdocIndexFiles()->generateIndex(fileName, url, title, g);
+ QDocIndexFiles::destroyQDocIndexFiles();
+}
+
+/*!
+ Returns the collection node representing the module that \a relative
+ node belongs to, or \c nullptr if there is no such module in the
+ primary tree.
+*/
+const CollectionNode *QDocDatabase::getModuleNode(const Node *relative)
+{
+ Node::NodeType moduleType{Node::Module};
+ QString moduleName;
+ switch (relative->genus())
+ {
+ case Node::CPP:
+ moduleType = Node::Module;
+ moduleName = relative->physicalModuleName();
+ break;
+ case Node::QML:
+ moduleType = Node::QmlModule;
+ moduleName = relative->logicalModuleName();
+ break;
+ default:
+ return nullptr;
+ }
+ if (moduleName.isEmpty())
+ return nullptr;
+
+ return primaryTree()->getCollection(moduleName, moduleType);
+}
+
+/*!
+ Finds all the collection nodes of the specified \a type
+ and merges them into the collection node map \a cnm. Nodes
+ that match the \a relative node are not included.
+ */
+void QDocDatabase::mergeCollections(Node::NodeType type, CNMap &cnm, const Node *relative)
+{
+ cnm.clear();
+ CNMultiMap cnmm;
+ for (auto *tree : searchOrder()) {
+ CNMap *m = tree->getCollectionMap(type);
+ if (m && !m->isEmpty()) {
+ for (auto it = m->cbegin(); it != m->cend(); ++it) {
+ if (!it.value()->isInternal())
+ cnmm.insert(it.key(), it.value());
+ }
+ }
+ }
+ if (cnmm.isEmpty())
+ return;
+ static const QRegularExpression singleDigit("\\b([0-9])\\b");
+ const QStringList keys = cnmm.uniqueKeys();
+ for (const auto &key : keys) {
+ const QList<CollectionNode *> values = cnmm.values(key);
+ CollectionNode *n = nullptr;
+ for (auto *value : values) {
+ if (value && value->wasSeen() && value != relative) {
+ n = value;
+ break;
+ }
+ }
+ if (n) {
+ if (values.size() > 1) {
+ for (CollectionNode *value : values) {
+ if (value != n) {
+ // Allow multiple (major) versions of QML modules
+ if ((n->isQmlModule())
+ && n->logicalModuleIdentifier() != value->logicalModuleIdentifier()) {
+ if (value->wasSeen() && value != relative
+ && !value->members().isEmpty())
+ cnm.insert(value->fullTitle().toLower(), value);
+ continue;
+ }
+ for (Node *t : value->members())
+ n->addMember(t);
+ }
+ }
+ }
+ QString sortKey = n->fullTitle().toLower();
+ if (sortKey.startsWith("the "))
+ sortKey.remove(0, 4);
+ sortKey.replace(singleDigit, "0\\1");
+ cnm.insert(sortKey, n);
+ }
+ }
+}
+
+/*!
+ Finds all the collection nodes with the same name
+ and type as \a c and merges their members into the
+ members list of \a c.
+
+ For QML modules, only nodes with matching
+ module identifiers are merged to avoid merging
+ modules with different (major) versions.
+ */
+void QDocDatabase::mergeCollections(CollectionNode *c)
+{
+ if (c == nullptr)
+ return;
+
+ // REMARK: This form of merging is usually called during the
+ // generation phase om-the-fly when a source-of-truth collection
+ // is required.
+ // In practice, this means a collection could be merged many, many
+ // times during the lifetime of a generation.
+ // To avoid repeating the merging process each time, which could
+ // be time consuming, we use a small flag that is set directly on
+ // the collection to bail-out early.
+ //
+ // The merging process is only meaningful for collections when the
+ // collection references are spread troughout multiple projects.
+ // The part of information that exists in other project is read
+ // before the generation phase, such that when the generation
+ // phase comes, we already have all the information we need for
+ // merging such that we can consider all version of a certain
+ // collection node immutable, making the caching inherently
+ // correct at any point of the generation.
+ //
+ // This implies that this operation is unsafe if it is performed
+ // before all the index files are loaded.
+ // Indeed, this is a prerequisite, with the current structure, to
+ // perform this optmization.
+ //
+ // At the current time, this is true and is expected not to
+ // change.
+ //
+ // Do note that this is not applied to the other overload of
+ // mergeCollections as we cannot as safely ensure its consistency
+ // and, as the result of the merging depends on multiple
+ // parameters, it would require an actual memoization of the call.
+ //
+ // Note that this is a defensive optimization and we are assuming
+ // that it is effective based on heuristical data. As this is
+ // expected to disappear, at least in its current form, in the
+ // future, a more thorough analysis was not performed.
+ if (c->isMerged()) {
+ return;
+ }
+
+ for (auto *tree : searchOrder()) {
+ CollectionNode *cn = tree->getCollection(c->name(), c->nodeType());
+ if (cn && cn != c) {
+ if ((cn->isQmlModule())
+ && cn->logicalModuleIdentifier() != c->logicalModuleIdentifier())
+ continue;
+
+ for (auto *node : cn->members())
+ c->addMember(node);
+
+ // REMARK: The merging process is performed to ensure that
+ // references to the collection in external projects are
+ // taken into account before consuming the collection.
+ //
+ // This works by having QDoc construct empty collections
+ // as soon as a reference to a collection is encountered
+ // and filling details later on when its definition is
+ // found.
+ //
+ // This initially-empty collection is always saved to the
+ // primaryTree and it is the collection that is directly
+ // accessible to consumers during the generation process.
+ //
+ // Nonetheless, when the definition for the collection is
+ // not in the same project as the one that is being
+ // compiled, its details will never be filled in.
+ //
+ // Indeed, the details will live in the index file for the
+ // project where the collection is defined, if any, and
+ // the node for it, which has complete information, will
+ // live in some non-primaryTree.
+ //
+ // The merging process itself is used by consumers during
+ // the generation process because they access the
+ // primaryTree version of the collection expecting a
+ // source-of-truth.
+ // To ensure that this is the case for usages that
+ // requires linking, we need to merge not only the members
+ // of the collection that reside in external versions of
+ // the collection; but some of the data that reside in the
+ // definition of the collection intself, namely the title
+ // and the url.
+ //
+ // A collection that contains the data of a definition is
+ // always marked as seen, hence we use that to discern
+ // whether we are working with a placeholder node or not,
+ // and fill in the data if we encounter a node that
+ // represents a definition.
+ //
+ // The way in which QDoc works implies that collection are
+ // globally scoped between projects.
+ // The repetition of the definition for the same
+ // collection is warned for as a duplicate documentation,
+ // such that we can expect a single valid source of truth
+ // for a given collection in each project.
+ // It is currently unknown if this warning is applicable
+ // when the repeated collection is defined in two
+ // different projects.
+ //
+ // As QDoc implicitly would not correctly support this
+ // case, we assume that only one declaration exists for
+ // each collection, such that the first encoutered one
+ // must be the source of truth and that there is no need
+ // to copy any data after the first copy is performed.
+ // KLUDGE: Note that this process is done as a hackish
+ // solution to QTBUG-104237 and should not be considered
+ // final or dependable.
+ if (!c->wasSeen() && cn->wasSeen()) {
+ c->markSeen();
+ c->setTitle(cn->title());
+ c->setUrl(cn->url());
+ }
+ }
+ }
+
+ c->markMerged();
+}
+
+/*!
+ Searches for the node that matches the path in \a atom and the
+ specified \a genus. The \a relative node is used if the first
+ leg of the path is empty, i.e. if the path begins with '#'.
+ The function also sets \a ref if there remains an unused leg
+ in the path after the node is found. The node is returned as
+ well as the \a ref. If the returned node pointer is null,
+ \a ref is also not valid.
+ */
+const Node *QDocDatabase::findNodeForAtom(const Atom *a, const Node *relative, QString &ref,
+ Node::Genus genus)
+{
+ const Node *node = nullptr;
+
+ Atom *atom = const_cast<Atom *>(a);
+ QStringList targetPath = atom->string().split(QLatin1Char('#'));
+ QString first = targetPath.first().trimmed();
+
+ Tree *domain = nullptr;
+
+ if (atom->isLinkAtom()) {
+ domain = atom->domain();
+ genus = atom->genus();
+ }
+
+ if (first.isEmpty())
+ node = relative; // search for a target on the current page.
+ else if (domain) {
+ if (first.endsWith(".html"))
+ node = domain->findNodeByNameAndType(QStringList(first), &Node::isPageNode);
+ else if (first.endsWith(QChar(')'))) {
+ QString signature;
+ QString function = first;
+ qsizetype length = first.size();
+ if (function.endsWith("()"))
+ function.chop(2);
+ if (function.endsWith(QChar(')'))) {
+ qsizetype position = function.lastIndexOf(QChar('('));
+ signature = function.mid(position + 1, length - position - 2);
+ function = function.left(position);
+ }
+ QStringList path = function.split("::");
+ node = domain->findFunctionNode(path, Parameters(signature), nullptr, genus);
+ }
+ if (node == nullptr) {
+ int flags = SearchBaseClasses | SearchEnumValues;
+ QStringList nodePath = first.split("::");
+ QString target;
+ targetPath.removeFirst();
+ if (!targetPath.isEmpty())
+ target = targetPath.takeFirst();
+ if (relative && relative->tree()->physicalModuleName() != domain->physicalModuleName())
+ relative = nullptr;
+ return domain->findNodeForTarget(nodePath, target, relative, flags, genus, ref);
+ }
+ } else {
+ if (first.endsWith(".html"))
+ node = findNodeByNameAndType(QStringList(first), &Node::isPageNode);
+ else if (first.endsWith(QChar(')')))
+ node = findFunctionNode(first, relative, genus);
+ if (node == nullptr)
+ return findNodeForTarget(targetPath, relative, genus, ref);
+ }
+
+ if (node != nullptr && ref.isEmpty()) {
+ if (!node->url().isEmpty())
+ return node;
+ targetPath.removeFirst();
+ if (!targetPath.isEmpty()) {
+ ref = node->root()->tree()->getRef(targetPath.first(), node);
+ if (ref.isEmpty())
+ node = nullptr;
+ }
+ }
+ return node;
+}
+
+/*!
+ Updates navigation (previous/next page links and the navigation parent)
+ for pages listed in the TOC, specified by the \c navigation.toctitles
+ configuration variable.
+
+ if \c navigation.toctitles.inclusive is \c true, include also the TOC
+ page(s) themselves as a 'root' item in the navigation bar (breadcrumbs)
+ that are generated for HTML output.
+*/
+void QDocDatabase::updateNavigation()
+{
+ // Restrict searching only to the local (primary) tree
+ QList<Tree *> searchOrder = this->searchOrder();
+ setLocalSearch();
+
+ const QString configVar = CONFIG_NAVIGATION +
+ Config::dot +
+ CONFIG_TOCTITLES;
+
+ // TODO: [direct-configuration-access]
+ // The configuration is currently a singleton with some generally
+ // global mutable state.
+ //
+ // Accessing the data in this form complicates testing and
+ // requires tests that inhibit any test parallelization, as the
+ // tests are not self contained.
+ //
+ // This should be generally avoived. Possibly, we should strive
+ // for Config to be a POD type that generally is scoped to
+ // main and whose data is destructured into dependencies when
+ // the dependencies are constructed.
+ bool inclusive{Config::instance().get(
+ configVar + Config::dot + CONFIG_INCLUSIVE).asBool()};
+
+ // TODO: [direct-configuration-access]
+ const auto tocTitles{Config::instance().get(configVar).asStringList()};
+
+ for (const auto &tocTitle : tocTitles) {
+ if (const auto candidateTarget = findNodeForTarget(tocTitle, nullptr); candidateTarget && candidateTarget->isPageNode()) {
+ auto tocPage{static_cast<const PageNode*>(candidateTarget)};
+
+ Text body = tocPage->doc().body();
+
+ auto *atom = body.firstAtom();
+
+ std::pair<PageNode *, Atom *> prev { nullptr, nullptr };
+
+ std::stack<const PageNode *> tocStack;
+ tocStack.push(inclusive ? tocPage : nullptr);
+
+ bool inItem = false;
+
+ // TODO: Understand how much we use this form of looping over atoms.
+ // If it is used a few times we might consider providing
+ // an iterator for Text to make use of a simpler
+ // range-for loop.
+ while (atom) {
+ switch (atom->type()) {
+ case Atom::ListItemLeft:
+ // Not known if we're going to have a link, push a temporary
+ tocStack.push(nullptr);
+ inItem = true;
+ break;
+ case Atom::ListItemRight:
+ tocStack.pop();
+ inItem = false;
+ break;
+ case Atom::Link: {
+ if (!inItem)
+ break;
+
+ // TODO: [unnecessary-output-parameter]
+ // We currently need an lvalue string to
+ // pass to findNodeForAtom, as the
+ // outparameter ref.
+ //
+ // Apart from the general problems with output
+ // parameters, we shouldn't be forced to
+ // instanciate an unnecessary object at call
+ // site.
+ //
+ // Understand what the correct way to avoid this is.
+ // This requires changes to findNodeForAtom
+ // and should be addressed in the context of
+ // revising that method.
+ QString unused{};
+ // TODO: Having to const cast is really a code
+ // smell and could result in undefined
+ // behavior in some specific cases (e.g point
+ // to something that is actually const).
+ //
+ // We should understand how to sequence the
+ // code so that we have access to mutable data
+ // when we need it and "freeze" the data
+ // afterwards.
+ //
+ // If it we expect this form of mutability at
+ // this point we should expose a non-const API
+ // for the database, possibly limited to a
+ // very specific scope of execution.
+ //
+ // Understand what the correct sequencing for
+ // this processing is and revise this part.
+ auto candidatePage = const_cast<Node *>(findNodeForAtom(atom, nullptr, unused));
+ if (!candidatePage || !candidatePage->isPageNode()) break;
+
+ auto page{static_cast<PageNode*>(candidatePage)};
+
+ // ignore self-references
+ if (page == prev.first) break;
+
+ if (prev.first) {
+ prev.first->setLink(
+ Node::NextLink,
+ page->title(),
+ // TODO: [possible-assertion-failure][imprecise-types][atoms-link]
+ // As with other structures in QDoc we
+ // are able to call methods that are
+ // valid only on very specific states.
+ //
+ // For some of those calls we have
+ // some defensive programming measures
+ // that allow us to at least identify
+ // the error during debugging, while
+ // for others this may currently hide
+ // some logic error.
+ //
+ // To avoid those cases, we should
+ // strive to move those cases to a
+ // compilation error, requiring a
+ // statically analyzable state that
+ // represents the current model.
+ //
+ // This would ensure that those
+ // lingering class of bugs are
+ // eliminated completely, forces a
+ // more explicit codebase where the
+ // current capabilities do not depend
+ // on runtime values might not be
+ // generally visible, and does not
+ // require us to incur into the
+ // required state, which may be rare,
+ // simplifying our abilities to
+ // evaluate all possible states.
+ //
+ // For linking atoms, LinkAtom is
+ // available and might be a good
+ // enough solution to move linkText
+ // to.
+ atom->linkText()
+ );
+ page->setLink(
+ Node::PreviousLink,
+ prev.first->title(),
+ // TODO: [possible-assertion-failure][imprecise-types][atoms-link]
+ prev.second->linkText()
+ );
+ }
+
+ if (page == tocPage)
+ break;
+
+ // Find the navigation parent from the stack; we may have null pointers
+ // for non-link list items, so skip those.
+ qsizetype popped = 0;
+ while (tocStack.size() > 1 && !tocStack.top()) {
+ tocStack.pop();
+ ++popped;
+ }
+
+ page->setNavigationParent(tocStack.empty() ? nullptr : tocStack.top());
+
+ while (--popped > 0)
+ tocStack.push(nullptr);
+
+ tocStack.push(page);
+ prev = { page, atom };
+ }
+ break;
+ default:
+ break;
+ }
+
+ atom = atom->next();
+ }
+ } else {
+ Config::instance().get(configVar).location()
+ .warning(QStringLiteral("Failed to find table of contents with title '%1'")
+ .arg(tocTitle));
+ }
+ }
+
+ // Restore search order
+ setSearchOrder(searchOrder);
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/qdocdatabase.h b/src/qdoc/qdoc/src/qdoc/qdocdatabase.h
new file mode 100644
index 000000000..df2b4135c
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/qdocdatabase.h
@@ -0,0 +1,395 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef QDOCDATABASE_H
+#define QDOCDATABASE_H
+
+#include "config.h"
+#include "examplenode.h"
+#include "propertynode.h"
+#include "text.h"
+#include "tree.h"
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qmap.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+typedef QMultiMap<Text, const Node *> TextToNodeMap;
+
+class Atom;
+class FunctionNode;
+class Generator;
+class QDocDatabase;
+
+enum FindFlag {
+ SearchBaseClasses = 0x1,
+ SearchEnumValues = 0x2,
+ TypesOnly = 0x4,
+ IgnoreModules = 0x8
+};
+
+class QDocForest
+{
+private:
+ friend class QDocDatabase;
+ explicit QDocForest(QDocDatabase *qdb) : m_qdb(qdb), m_primaryTree(nullptr), m_currentIndex(0)
+ {
+ }
+ ~QDocForest();
+
+ Tree *firstTree();
+ Tree *nextTree();
+ Tree *primaryTree() { return m_primaryTree; }
+ Tree *findTree(const QString &t) { return m_forest.value(t); }
+ QStringList keys() { return m_forest.keys(); }
+ NamespaceNode *primaryTreeRoot() { return (m_primaryTree ? m_primaryTree->root() : nullptr); }
+ bool isEmpty() { return searchOrder().isEmpty(); }
+ bool done() { return (m_currentIndex >= searchOrder().size()); }
+ const QList<Tree *> &searchOrder();
+ const QList<Tree *> &indexSearchOrder();
+ void setSearchOrder(const QStringList &t);
+ bool isLoaded(const QString &fn)
+ {
+ return std::any_of(searchOrder().constBegin(), searchOrder().constEnd(),
+ [fn](Tree *tree) { return fn == tree->indexFileName(); });
+ }
+
+ const Node *findNode(const QStringList &path, const Node *relative, int findFlags,
+ Node::Genus genus)
+ {
+ for (const auto *tree : searchOrder()) {
+ const Node *n = tree->findNode(path, relative, findFlags, genus);
+ if (n)
+ return n;
+ relative = nullptr;
+ }
+ return nullptr;
+ }
+
+ Node *findNodeByNameAndType(const QStringList &path, bool (Node::*isMatch)() const)
+ {
+ for (const auto *tree : searchOrder()) {
+ Node *n = tree->findNodeByNameAndType(path, isMatch);
+ if (n)
+ return n;
+ }
+ return nullptr;
+ }
+
+ ClassNode *findClassNode(const QStringList &path)
+ {
+ for (const auto *tree : searchOrder()) {
+ ClassNode *n = tree->findClassNode(path);
+ if (n)
+ return n;
+ }
+ return nullptr;
+ }
+
+ Node *findNodeForInclude(const QStringList &path)
+ {
+ for (const auto *tree : searchOrder()) {
+ Node *n = tree->findNodeForInclude(path);
+ if (n)
+ return n;
+ }
+ return nullptr;
+ }
+
+ const FunctionNode *findFunctionNode(const QStringList &path, const Parameters &parameters,
+ const Node *relative, Node::Genus genus);
+ const Node *findNodeForTarget(QStringList &targetPath, const Node *relative, Node::Genus genus,
+ QString &ref);
+
+ const Node *findTypeNode(const QStringList &path, const Node *relative, Node::Genus genus)
+ {
+ int flags = SearchBaseClasses | SearchEnumValues | TypesOnly;
+ if (relative && genus == Node::DontCare && relative->genus() != Node::DOC)
+ genus = relative->genus();
+ for (const auto *tree : searchOrder()) {
+ const Node *n = tree->findNode(path, relative, flags, genus);
+ if (n)
+ return n;
+ relative = nullptr;
+ }
+ return nullptr;
+ }
+
+ const PageNode *findPageNodeByTitle(const QString &title)
+ {
+ for (const auto *tree : searchOrder()) {
+ const PageNode *n = tree->findPageNodeByTitle(title);
+ if (n)
+ return n;
+ }
+ return nullptr;
+ }
+
+ const CollectionNode *getCollectionNode(const QString &name, Node::NodeType type)
+ {
+ for (auto *tree : searchOrder()) {
+ const CollectionNode *cn = tree->getCollection(name, type);
+ if (cn)
+ return cn;
+ }
+ return nullptr;
+ }
+
+ QmlTypeNode *lookupQmlType(const QString &name)
+ {
+ for (const auto *tree : searchOrder()) {
+ QmlTypeNode *qcn = tree->lookupQmlType(name);
+ if (qcn)
+ return qcn;
+ }
+ return nullptr;
+ }
+
+ void clearSearchOrder() { m_searchOrder.clear(); }
+ void newPrimaryTree(const QString &module);
+ void setPrimaryTree(const QString &t);
+ NamespaceNode *newIndexTree(const QString &module);
+
+private:
+ QDocDatabase *m_qdb;
+ Tree *m_primaryTree;
+ int m_currentIndex;
+ QMap<QString, Tree *> m_forest;
+ QList<Tree *> m_searchOrder;
+ QList<Tree *> m_indexSearchOrder;
+ QList<QString> m_moduleNames;
+};
+
+class QDocDatabase
+{
+public:
+ static QDocDatabase *qdocDB();
+ static void destroyQdocDB();
+ ~QDocDatabase() = default;
+
+ using FindFunctionPtr = void (QDocDatabase::*)(Aggregate *);
+
+ Tree *findTree(const QString &t) { return m_forest.findTree(t); }
+
+ const CNMap &groups() { return primaryTree()->groups(); }
+ const CNMap &modules() { return primaryTree()->modules(); }
+ const CNMap &qmlModules() { return primaryTree()->qmlModules(); }
+
+ CollectionNode *addGroup(const QString &name) { return primaryTree()->addGroup(name); }
+ CollectionNode *addModule(const QString &name) { return primaryTree()->addModule(name); }
+ CollectionNode *addQmlModule(const QString &name) { return primaryTree()->addQmlModule(name); }
+
+ CollectionNode *addToGroup(const QString &name, Node *node)
+ {
+ return primaryTree()->addToGroup(name, node);
+ }
+ CollectionNode *addToModule(const QString &name, Node *node)
+ {
+ return primaryTree()->addToModule(name, node);
+ }
+ CollectionNode *addToQmlModule(const QString &name, Node *node)
+ {
+ return primaryTree()->addToQmlModule(name, node);
+ }
+
+ void addExampleNode(ExampleNode *n) { primaryTree()->addExampleNode(n); }
+ ExampleNodeMap &exampleNodeMap() { return primaryTree()->exampleNodeMap(); }
+
+ QmlTypeNode *findQmlType(const QString &name)
+ {
+ return m_forest.lookupQmlType(name);
+ }
+ QmlTypeNode *findQmlType(const QString &qmid, const QString &name);
+ QmlTypeNode *findQmlType(const ImportRec &import, const QString &name);
+ QmlTypeNode *findQmlTypeInPrimaryTree(const QString &qmid, const QString &name);
+
+ static NodeMultiMap &obsoleteClasses() { return s_obsoleteClasses; }
+ static NodeMultiMap &obsoleteQmlTypes() { return s_obsoleteQmlTypes; }
+ static NodeMultiMap &classesWithObsoleteMembers() { return s_classesWithObsoleteMembers; }
+ static NodeMultiMap &qmlTypesWithObsoleteMembers() { return s_qmlTypesWithObsoleteMembers; }
+ static NodeMultiMap &cppClasses() { return s_cppClasses; }
+ static NodeMultiMap &qmlBasicTypes() { return s_qmlBasicTypes; }
+ static NodeMultiMap &qmlTypes() { return s_qmlTypes; }
+ static NodeMultiMap &examples() { return s_examples; }
+ static NodeMultiMapMap &newClassMaps() { return s_newClassMaps; }
+ static NodeMultiMapMap &newQmlTypeMaps() { return s_newQmlTypeMaps; }
+ static NodeMultiMapMap &newEnumValueMaps() { return s_newEnumValueMaps; }
+ static NodeMultiMapMap &newSinceMaps() { return s_newSinceMaps; }
+
+private:
+ void findAllClasses(Aggregate *node) { node->findAllClasses(); }
+ void findAllFunctions(Aggregate *node) { node->findAllFunctions(m_functionIndex); }
+ void findAllAttributions(Aggregate *node) { node->findAllAttributions(m_attributions); }
+ void findAllLegaleseTexts(Aggregate *node);
+ void findAllObsoleteThings(Aggregate *node) { node->findAllObsoleteThings(); }
+ void findAllSince(Aggregate *node) { node->findAllSince(); }
+
+public:
+ /*******************************************************************
+ special collection access functions
+ ********************************************************************/
+ NodeMultiMap &getCppClasses();
+ NodeMultiMap &getObsoleteClasses();
+ NodeMultiMap &getClassesWithObsoleteMembers();
+ NodeMultiMap &getObsoleteQmlTypes();
+ NodeMultiMap &getQmlTypesWithObsoleteMembers();
+ NodeMultiMap &getNamespaces();
+ NodeMultiMap &getQmlValueTypes();
+ NodeMultiMap &getQmlTypes();
+ NodeMultiMap &getExamples();
+ NodeMultiMap &getAttributions();
+ NodeMapMap &getFunctionIndex();
+ TextToNodeMap &getLegaleseTexts();
+ const NodeMultiMap &getClassMap(const QString &key);
+ const NodeMultiMap &getQmlTypeMap(const QString &key);
+ const NodeMultiMap &getSinceMap(const QString &key);
+
+ /*******************************************************************
+ Many of these will be either eliminated or replaced.
+ ********************************************************************/
+ void resolveStuff();
+ void insertTarget(const QString &name, const QString &title, TargetRec::TargetType type,
+ Node *node, int priority)
+ {
+ primaryTree()->insertTarget(name, title, type, node, priority);
+ }
+
+ /*******************************************************************
+ The functions declared below are called for the current tree only.
+ ********************************************************************/
+ Aggregate *findRelatesNode(const QStringList &path)
+ {
+ return primaryTree()->findRelatesNode(path);
+ }
+ /*******************************************************************/
+
+ /*****************************************************************************
+ This function can handle parameters enclosed in '[' ']' (domain and genus).
+ ******************************************************************************/
+ const Node *findNodeForAtom(const Atom *atom, const Node *relative, QString &ref,
+ Node::Genus genus = Node::DontCare);
+ /*******************************************************************/
+
+ /*******************************************************************
+ The functions declared below are called for all trees.
+ ********************************************************************/
+ ClassNode *findClassNode(const QStringList &path) { return m_forest.findClassNode(path); }
+ Node *findNodeForInclude(const QStringList &path) { return m_forest.findNodeForInclude(path); }
+ const FunctionNode *findFunctionNode(const QString &target, const Node *relative,
+ Node::Genus genus);
+ const Node *findTypeNode(const QString &type, const Node *relative, Node::Genus genus);
+ const Node *findNodeForTarget(const QString &target, const Node *relative);
+ const PageNode *findPageNodeByTitle(const QString &title)
+ {
+ return m_forest.findPageNodeByTitle(title);
+ }
+ Node *findNodeByNameAndType(const QStringList &path, bool (Node::*isMatch)() const)
+ {
+ return m_forest.findNodeByNameAndType(path, isMatch);
+ }
+ const CollectionNode *getCollectionNode(const QString &name, Node::NodeType type)
+ {
+ return m_forest.getCollectionNode(name, type);
+ }
+ const CollectionNode *getModuleNode(const Node *relative);
+
+ FunctionNode *findFunctionNodeForTag(const QString &tag)
+ {
+ return primaryTree()->findFunctionNodeForTag(tag);
+ }
+ FunctionNode *findMacroNode(const QString &t) { return primaryTree()->findMacroNode(t); }
+
+ QStringList groupNamesForNode(Node *node);
+
+private:
+ const Node *findNodeForTarget(QStringList &targetPath, const Node *relative, Node::Genus genus,
+ QString &ref)
+ {
+ return m_forest.findNodeForTarget(targetPath, relative, genus, ref);
+ }
+ const FunctionNode *findFunctionNode(const QStringList &path, const Parameters &parameters,
+ const Node *relative, Node::Genus genus)
+ {
+ return m_forest.findFunctionNode(path, parameters, relative, genus);
+ }
+
+ /*******************************************************************/
+public:
+ void addPropertyFunction(PropertyNode *property, const QString &funcName,
+ PropertyNode::FunctionRole funcRole)
+ {
+ primaryTree()->addPropertyFunction(property, funcName, funcRole);
+ }
+
+ void setVersion(const QString &v) { m_version = v; }
+ [[nodiscard]] QString version() const { return m_version; }
+
+ void readIndexes(const QStringList &indexFiles);
+ void generateIndex(const QString &fileName, const QString &url, const QString &title,
+ Generator *g);
+
+ void processForest();
+
+ NamespaceNode *primaryTreeRoot() { return m_forest.primaryTreeRoot(); }
+ void newPrimaryTree(const QString &module) { m_forest.newPrimaryTree(module); }
+ void setPrimaryTree(const QString &t) { m_forest.setPrimaryTree(t); }
+ NamespaceNode *newIndexTree(const QString &module) { return m_forest.newIndexTree(module); }
+ const QList<Tree *> &searchOrder() { return m_forest.searchOrder(); }
+ void setLocalSearch() { m_forest.m_searchOrder = QList<Tree *>(1, primaryTree()); }
+ void setSearchOrder(const QList<Tree *> &searchOrder) { m_forest.m_searchOrder = searchOrder; }
+ void setSearchOrder(QStringList &t) { m_forest.setSearchOrder(t); }
+ void mergeCollections(Node::NodeType type, CNMap &cnm, const Node *relative);
+ void mergeCollections(CollectionNode *c);
+ void clearSearchOrder() { m_forest.clearSearchOrder(); }
+ QStringList keys() { return m_forest.keys(); }
+ void resolveNamespaces();
+ void resolveProxies();
+ void resolveBaseClasses();
+ void updateNavigation();
+
+private:
+ friend class Tree;
+
+ void processForest(FindFunctionPtr func);
+ bool isLoaded(const QString &t) { return m_forest.isLoaded(t); }
+ static void initializeDB();
+
+private:
+ QDocDatabase();
+ QDocDatabase(QDocDatabase const &) : m_forest(this) { }
+ QDocDatabase &operator=(QDocDatabase const &);
+
+public:
+ Tree *primaryTree() { return m_forest.primaryTree(); }
+
+private:
+ static QDocDatabase *s_qdocDB;
+ static NodeMap s_typeNodeMap;
+ static NodeMultiMap s_obsoleteClasses;
+ static NodeMultiMap s_classesWithObsoleteMembers;
+ static NodeMultiMap s_obsoleteQmlTypes;
+ static NodeMultiMap s_qmlTypesWithObsoleteMembers;
+ static NodeMultiMap s_cppClasses;
+ static NodeMultiMap s_qmlBasicTypes;
+ static NodeMultiMap s_qmlTypes;
+ static NodeMultiMap s_examples;
+ static NodeMultiMapMap s_newClassMaps;
+ static NodeMultiMapMap s_newQmlTypeMaps;
+ static NodeMultiMapMap s_newEnumValueMaps;
+ static NodeMultiMapMap s_newSinceMaps;
+
+ QString m_version {};
+ QDocForest m_forest;
+
+ NodeMultiMap m_namespaceIndex {};
+ NodeMultiMap m_attributions {};
+ NodeMapMap m_functionIndex {};
+ TextToNodeMap m_legaleseTexts {};
+ QMultiHash<Tree*, FindFunctionPtr> m_completedFindFunctions {};
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/qdocindexfiles.cpp b/src/qdoc/qdoc/src/qdoc/qdocindexfiles.cpp
new file mode 100644
index 000000000..db6852c23
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/qdocindexfiles.cpp
@@ -0,0 +1,1456 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "qdocindexfiles.h"
+
+#include "access.h"
+#include "atom.h"
+#include "classnode.h"
+#include "collectionnode.h"
+#include "comparisoncategory.h"
+#include "config.h"
+#include "enumnode.h"
+#include "examplenode.h"
+#include "externalpagenode.h"
+#include "functionnode.h"
+#include "generator.h"
+#include "headernode.h"
+#include "location.h"
+#include "utilities.h"
+#include "propertynode.h"
+#include "qdocdatabase.h"
+#include "qmlpropertynode.h"
+#include "typedefnode.h"
+#include "variablenode.h"
+
+#include <QtCore/qxmlstream.h>
+
+#include <algorithm>
+
+QT_BEGIN_NAMESPACE
+
+enum QDocAttr {
+ QDocAttrNone,
+ QDocAttrExample,
+ QDocAttrFile,
+ QDocAttrImage,
+ QDocAttrDocument,
+ QDocAttrExternalPage,
+ QDocAttrAttribution
+};
+
+static Node *root_ = nullptr;
+static IndexSectionWriter *post_ = nullptr;
+
+/*!
+ \class QDocIndexFiles
+
+ This class handles qdoc index files.
+ */
+
+QDocIndexFiles *QDocIndexFiles::s_qdocIndexFiles = nullptr;
+
+/*!
+ Constructs the singleton QDocIndexFiles.
+ */
+QDocIndexFiles::QDocIndexFiles() : m_gen(nullptr)
+{
+ m_qdb = QDocDatabase::qdocDB();
+ m_storeLocationInfo = Config::instance().get(CONFIG_LOCATIONINFO).asBool();
+}
+
+/*!
+ Destroys the singleton QDocIndexFiles.
+ */
+QDocIndexFiles::~QDocIndexFiles()
+{
+ m_qdb = nullptr;
+ m_gen = nullptr;
+}
+
+/*!
+ Creates the singleton. Allows only one instance of the class
+ to be created. Returns a pointer to the singleton.
+ */
+QDocIndexFiles *QDocIndexFiles::qdocIndexFiles()
+{
+ if (s_qdocIndexFiles == nullptr)
+ s_qdocIndexFiles = new QDocIndexFiles;
+ return s_qdocIndexFiles;
+}
+
+/*!
+ Destroys the singleton.
+ */
+void QDocIndexFiles::destroyQDocIndexFiles()
+{
+ if (s_qdocIndexFiles != nullptr) {
+ delete s_qdocIndexFiles;
+ s_qdocIndexFiles = nullptr;
+ }
+}
+
+/*!
+ Reads and parses the list of index files in \a indexFiles.
+ */
+void QDocIndexFiles::readIndexes(const QStringList &indexFiles)
+{
+ for (const QString &file : indexFiles) {
+ qCDebug(lcQdoc) << "Loading index file: " << file;
+ readIndexFile(file);
+ }
+}
+
+/*!
+ Reads and parses the index file at \a path.
+ */
+void QDocIndexFiles::readIndexFile(const QString &path)
+{
+ QFile file(path);
+ if (!file.open(QFile::ReadOnly)) {
+ qWarning() << "Could not read index file" << path;
+ return;
+ }
+
+ QXmlStreamReader reader(&file);
+ reader.setNamespaceProcessing(false);
+
+ if (!reader.readNextStartElement())
+ return;
+
+ if (reader.name() != QLatin1String("INDEX"))
+ return;
+
+ QXmlStreamAttributes attrs = reader.attributes();
+
+ QString indexUrl {attrs.value(QLatin1String("url")).toString()};
+
+ // Decide how we link to nodes loaded from this index file:
+ // If building a set that will be installed AND the URL of
+ // the dependency is identical to ours, assume that also
+ // the dependent html files are available under the same
+ // directory tree. Otherwise, link using the full index URL.
+ if (!Config::installDir.isEmpty() && indexUrl == Config::instance().get(CONFIG_URL).asString()) {
+ // Generate a relative URL between the install dir and the index file
+ // when the -installdir command line option is set.
+ QDir installDir(path.section('/', 0, -3) + '/' + Generator::outputSubdir());
+ indexUrl = installDir.relativeFilePath(path).section('/', 0, -2);
+ }
+ m_project = attrs.value(QLatin1String("project")).toString();
+ QString indexTitle = attrs.value(QLatin1String("indexTitle")).toString();
+ m_basesList.clear();
+ m_relatedNodes.clear();
+
+ NamespaceNode *root = m_qdb->newIndexTree(m_project);
+ if (!root) {
+ qWarning() << "Issue parsing index tree" << path;
+ return;
+ }
+
+ root->tree()->setIndexTitle(indexTitle);
+
+ // Scan all elements in the XML file, constructing a map that contains
+ // base classes for each class found.
+ while (reader.readNextStartElement()) {
+ readIndexSection(reader, root, indexUrl);
+ }
+
+ // Now that all the base classes have been found for this index,
+ // arrange them into an inheritance hierarchy.
+ resolveIndex();
+}
+
+/*!
+ Read a <section> element from the index file and create the
+ appropriate node(s).
+ */
+void QDocIndexFiles::readIndexSection(QXmlStreamReader &reader, Node *current,
+ const QString &indexUrl)
+{
+ QXmlStreamAttributes attributes = reader.attributes();
+ QStringView elementName = reader.name();
+
+ QString name = attributes.value(QLatin1String("name")).toString();
+ QString href = attributes.value(QLatin1String("href")).toString();
+ Node *node;
+ Location location;
+ Aggregate *parent = nullptr;
+ bool hasReadChildren = false;
+
+ if (current->isAggregate())
+ parent = static_cast<Aggregate *>(current);
+
+ if (attributes.hasAttribute(QLatin1String("related"))) {
+ bool isIntTypeRelatedValue = false;
+ int relatedIndex = attributes.value(QLatin1String("related")).toInt(&isIntTypeRelatedValue);
+ if (isIntTypeRelatedValue) {
+ if (adoptRelatedNode(parent, relatedIndex)) {
+ reader.skipCurrentElement();
+ return;
+ }
+ } else {
+ QList<Node *>::iterator nodeIterator =
+ std::find_if(m_relatedNodes.begin(), m_relatedNodes.end(), [&](const Node *relatedNode) {
+ return (name == relatedNode->name() && href == relatedNode->url().section(QLatin1Char('/'), -1));
+ });
+
+ if (nodeIterator != m_relatedNodes.end() && parent) {
+ parent->adoptChild(*nodeIterator);
+ reader.skipCurrentElement();
+ return;
+ }
+ }
+ }
+
+ QString filePath;
+ int lineNo = 0;
+ if (attributes.hasAttribute(QLatin1String("filepath"))) {
+ filePath = attributes.value(QLatin1String("filepath")).toString();
+ lineNo = attributes.value("lineno").toInt();
+ }
+ if (elementName == QLatin1String("namespace")) {
+ auto *namespaceNode = new NamespaceNode(parent, name);
+ node = namespaceNode;
+ if (!indexUrl.isEmpty())
+ location = Location(indexUrl + QLatin1Char('/') + name.toLower() + ".html");
+ else if (!indexUrl.isNull())
+ location = Location(name.toLower() + ".html");
+ } else if (elementName == QLatin1String("class") || elementName == QLatin1String("struct")
+ || elementName == QLatin1String("union")) {
+ Node::NodeType type = Node::Class;
+ if (elementName == QLatin1String("class"))
+ type = Node::Class;
+ else if (elementName == QLatin1String("struct"))
+ type = Node::Struct;
+ else if (elementName == QLatin1String("union"))
+ type = Node::Union;
+ node = new ClassNode(type, parent, name);
+ if (attributes.hasAttribute(QLatin1String("bases"))) {
+ QString bases = attributes.value(QLatin1String("bases")).toString();
+ if (!bases.isEmpty())
+ m_basesList.append(
+ std::pair<ClassNode *, QString>(static_cast<ClassNode *>(node), bases));
+ }
+ if (!indexUrl.isEmpty())
+ location = Location(indexUrl + QLatin1Char('/') + name.toLower() + ".html");
+ else if (!indexUrl.isNull())
+ location = Location(name.toLower() + ".html");
+ bool abstract = false;
+ if (attributes.value(QLatin1String("abstract")) == QLatin1String("true"))
+ abstract = true;
+ node->setAbstract(abstract);
+ } else if (elementName == QLatin1String("header")) {
+ node = new HeaderNode(parent, name);
+
+ if (attributes.hasAttribute(QLatin1String("location")))
+ name = attributes.value(QLatin1String("location")).toString();
+
+ if (!indexUrl.isEmpty())
+ location = Location(indexUrl + QLatin1Char('/') + name);
+ else if (!indexUrl.isNull())
+ location = Location(name);
+ } else if (elementName == QLatin1String("qmlclass") || elementName == QLatin1String("qmlvaluetype")
+ || elementName == QLatin1String("qmlbasictype")) {
+ auto *qmlTypeNode = new QmlTypeNode(parent, name,
+ elementName == QLatin1String("qmlclass") ? Node::QmlType : Node::QmlValueType);
+ qmlTypeNode->setTitle(attributes.value(QLatin1String("title")).toString());
+ QString logicalModuleName = attributes.value(QLatin1String("qml-module-name")).toString();
+ if (!logicalModuleName.isEmpty())
+ m_qdb->addToQmlModule(logicalModuleName, qmlTypeNode);
+ bool abstract = false;
+ if (attributes.value(QLatin1String("abstract")) == QLatin1String("true"))
+ abstract = true;
+ qmlTypeNode->setAbstract(abstract);
+ QString qmlFullBaseName = attributes.value(QLatin1String("qml-base-type")).toString();
+ if (!qmlFullBaseName.isEmpty()) {
+ qmlTypeNode->setQmlBaseName(qmlFullBaseName);
+ }
+ if (attributes.hasAttribute(QLatin1String("location")))
+ name = attributes.value("location").toString();
+ if (!indexUrl.isEmpty())
+ location = Location(indexUrl + QLatin1Char('/') + name);
+ else if (!indexUrl.isNull())
+ location = Location(name);
+ node = qmlTypeNode;
+ } else if (elementName == QLatin1String("qmlproperty")) {
+ QString type = attributes.value(QLatin1String("type")).toString();
+ bool attached = false;
+ if (attributes.value(QLatin1String("attached")) == QLatin1String("true"))
+ attached = true;
+ bool readonly = false;
+ if (attributes.value(QLatin1String("writable")) == QLatin1String("false"))
+ readonly = true;
+ auto *qmlPropertyNode = new QmlPropertyNode(parent, name, type, attached);
+ qmlPropertyNode->markReadOnly(readonly);
+ if (attributes.value(QLatin1String("required")) == QLatin1String("true"))
+ qmlPropertyNode->setRequired();
+ node = qmlPropertyNode;
+ } else if (elementName == QLatin1String("group")) {
+ auto *collectionNode = m_qdb->addGroup(name);
+ collectionNode->setTitle(attributes.value(QLatin1String("title")).toString());
+ collectionNode->setSubtitle(attributes.value(QLatin1String("subtitle")).toString());
+ if (attributes.value(QLatin1String("seen")) == QLatin1String("true"))
+ collectionNode->markSeen();
+ node = collectionNode;
+ } else if (elementName == QLatin1String("module")) {
+ auto *collectionNode = m_qdb->addModule(name);
+ collectionNode->setTitle(attributes.value(QLatin1String("title")).toString());
+ collectionNode->setSubtitle(attributes.value(QLatin1String("subtitle")).toString());
+ if (attributes.value(QLatin1String("seen")) == QLatin1String("true"))
+ collectionNode->markSeen();
+ node = collectionNode;
+ } else if (elementName == QLatin1String("qmlmodule")) {
+ auto *collectionNode = m_qdb->addQmlModule(name);
+ const QStringList info = QStringList()
+ << name
+ << QString(attributes.value(QLatin1String("qml-module-version")).toString());
+ collectionNode->setLogicalModuleInfo(info);
+ collectionNode->setTitle(attributes.value(QLatin1String("title")).toString());
+ collectionNode->setSubtitle(attributes.value(QLatin1String("subtitle")).toString());
+ if (attributes.value(QLatin1String("seen")) == QLatin1String("true"))
+ collectionNode->markSeen();
+ node = collectionNode;
+ } else if (elementName == QLatin1String("page")) {
+ QDocAttr subtype = QDocAttrNone;
+ QString attr = attributes.value(QLatin1String("subtype")).toString();
+ if (attr == QLatin1String("attribution")) {
+ subtype = QDocAttrAttribution;
+ } else if (attr == QLatin1String("example")) {
+ subtype = QDocAttrExample;
+ } else if (attr == QLatin1String("file")) {
+ subtype = QDocAttrFile;
+ } else if (attr == QLatin1String("image")) {
+ subtype = QDocAttrImage;
+ } else if (attr == QLatin1String("page")) {
+ subtype = QDocAttrDocument;
+ } else if (attr == QLatin1String("externalpage")) {
+ subtype = QDocAttrExternalPage;
+ } else
+ goto done;
+
+ if (current->isExample()) {
+ auto *exampleNode = static_cast<ExampleNode *>(current);
+ if (subtype == QDocAttrFile) {
+ exampleNode->appendFile(name);
+ goto done;
+ } else if (subtype == QDocAttrImage) {
+ exampleNode->appendImage(name);
+ goto done;
+ }
+ }
+ PageNode *pageNode = nullptr;
+ if (subtype == QDocAttrExample)
+ pageNode = new ExampleNode(parent, name);
+ else if (subtype == QDocAttrExternalPage)
+ pageNode = new ExternalPageNode(parent, name);
+ else {
+ pageNode = new PageNode(parent, name);
+ if (subtype == QDocAttrAttribution) pageNode->markAttribution();
+ }
+
+ pageNode->setTitle(attributes.value(QLatin1String("title")).toString());
+
+ if (attributes.hasAttribute(QLatin1String("location")))
+ name = attributes.value(QLatin1String("location")).toString();
+
+ if (!indexUrl.isEmpty())
+ location = Location(indexUrl + QLatin1Char('/') + name);
+ else if (!indexUrl.isNull())
+ location = Location(name);
+
+ node = pageNode;
+
+ } else if (elementName == QLatin1String("enum")) {
+ auto *enumNode = new EnumNode(parent, name, attributes.hasAttribute("scoped"));
+
+ if (!indexUrl.isEmpty())
+ location = Location(indexUrl + QLatin1Char('/') + parent->name().toLower() + ".html");
+ else if (!indexUrl.isNull())
+ location = Location(parent->name().toLower() + ".html");
+
+ while (reader.readNextStartElement()) {
+ QXmlStreamAttributes childAttributes = reader.attributes();
+ if (reader.name() == QLatin1String("value")) {
+ EnumItem item(childAttributes.value(QLatin1String("name")).toString(),
+ childAttributes.value(QLatin1String("value")).toString(),
+ childAttributes.value(QLatin1String("since")).toString()
+ );
+ enumNode->addItem(item);
+ } else if (reader.name() == QLatin1String("keyword")) {
+ insertTarget(TargetRec::Keyword, childAttributes, enumNode);
+ } else if (reader.name() == QLatin1String("target")) {
+ insertTarget(TargetRec::Target, childAttributes, enumNode);
+ }
+ reader.skipCurrentElement();
+ }
+
+ node = enumNode;
+
+ hasReadChildren = true;
+ } else if (elementName == QLatin1String("typedef")) {
+ if (attributes.hasAttribute("aliasedtype"))
+ node = new TypeAliasNode(parent, name, attributes.value(QLatin1String("aliasedtype")).toString());
+ else
+ node = new TypedefNode(parent, name);
+
+ if (!indexUrl.isEmpty())
+ location = Location(indexUrl + QLatin1Char('/') + parent->name().toLower() + ".html");
+ else if (!indexUrl.isNull())
+ location = Location(parent->name().toLower() + ".html");
+ } else if (elementName == QLatin1String("property")) {
+ auto *propNode = new PropertyNode(parent, name);
+ node = propNode;
+ if (attributes.value(QLatin1String("bindable")) == QLatin1String("true"))
+ propNode->setPropertyType(PropertyNode::PropertyType::BindableProperty);
+
+ propNode->setWritable(attributes.value(QLatin1String("writable")) != QLatin1String("false"));
+
+ if (!indexUrl.isEmpty())
+ location = Location(indexUrl + QLatin1Char('/') + parent->name().toLower() + ".html");
+ else if (!indexUrl.isNull())
+ location = Location(parent->name().toLower() + ".html");
+
+ } else if (elementName == QLatin1String("function")) {
+ QString t = attributes.value(QLatin1String("meta")).toString();
+ bool attached = false;
+ FunctionNode::Metaness metaness = FunctionNode::Plain;
+ if (!t.isEmpty())
+ metaness = FunctionNode::getMetaness(t);
+ if (attributes.value(QLatin1String("attached")) == QLatin1String("true"))
+ attached = true;
+ auto *fn = new FunctionNode(metaness, parent, name, attached);
+
+ fn->setReturnType(attributes.value(QLatin1String("type")).toString());
+
+ if (fn->isCppNode()) {
+ fn->setVirtualness(attributes.value(QLatin1String("virtual")).toString());
+ fn->setConst(attributes.value(QLatin1String("const")) == QLatin1String("true"));
+ fn->setStatic(attributes.value(QLatin1String("static")) == QLatin1String("true"));
+ fn->setFinal(attributes.value(QLatin1String("final")) == QLatin1String("true"));
+ fn->setOverride(attributes.value(QLatin1String("override")) == QLatin1String("true"));
+
+ if (attributes.value(QLatin1String("explicit")) == QLatin1String("true"))
+ fn->markExplicit();
+
+ if (attributes.value(QLatin1String("constexpr")) == QLatin1String("true"))
+ fn->markConstexpr();
+
+ if (attributes.value(QLatin1String("noexcept")) == QLatin1String("true")) {
+ fn->markNoexcept(attributes.value("noexcept_expression").toString());
+ }
+
+ qsizetype refness = attributes.value(QLatin1String("refness")).toUInt();
+ if (refness == 1)
+ fn->setRef(true);
+ else if (refness == 2)
+ fn->setRefRef(true);
+ /*
+ Theoretically, this should ensure that each function
+ node receives the same overload number and overload
+ flag it was written with, and it should be unnecessary
+ to call normalizeOverloads() for index nodes.
+ */
+ if (attributes.value(QLatin1String("overload")) == QLatin1String("true"))
+ fn->setOverloadNumber(attributes.value(QLatin1String("overload-number")).toUInt());
+ else
+ fn->setOverloadNumber(0);
+ }
+
+ /*
+ Note: The "signature" attribute was written to the
+ index file, but it is not read back in. That is ok
+ because we reconstruct the parameter list and the
+ return type, from which the signature was built in
+ the first place and from which it can be rebuilt.
+ */
+ while (reader.readNextStartElement()) {
+ QXmlStreamAttributes childAttributes = reader.attributes();
+ if (reader.name() == QLatin1String("parameter")) {
+ // Do not use the default value for the parameter; it is not
+ // required, and has been known to cause problems.
+ QString type = childAttributes.value(QLatin1String("type")).toString();
+ QString name = childAttributes.value(QLatin1String("name")).toString();
+ fn->parameters().append(type, name);
+ } else if (reader.name() == QLatin1String("keyword")) {
+ insertTarget(TargetRec::Keyword, childAttributes, fn);
+ } else if (reader.name() == QLatin1String("target")) {
+ insertTarget(TargetRec::Target, childAttributes, fn);
+ }
+ reader.skipCurrentElement();
+ }
+
+ node = fn;
+ if (!indexUrl.isEmpty())
+ location = Location(indexUrl + QLatin1Char('/') + parent->name().toLower() + ".html");
+ else if (!indexUrl.isNull())
+ location = Location(parent->name().toLower() + ".html");
+
+ hasReadChildren = true;
+ } else if (elementName == QLatin1String("variable")) {
+ node = new VariableNode(parent, name);
+ if (!indexUrl.isEmpty())
+ location = Location(indexUrl + QLatin1Char('/') + parent->name().toLower() + ".html");
+ else if (!indexUrl.isNull())
+ location = Location(parent->name().toLower() + ".html");
+ } else if (elementName == QLatin1String("keyword")) {
+ insertTarget(TargetRec::Keyword, attributes, current);
+ goto done;
+ } else if (elementName == QLatin1String("target")) {
+ insertTarget(TargetRec::Target, attributes, current);
+ goto done;
+ } else if (elementName == QLatin1String("contents")) {
+ insertTarget(TargetRec::Contents, attributes, current);
+ goto done;
+ } else if (elementName == QLatin1String("proxy")) {
+ node = new ProxyNode(parent, name);
+ if (!indexUrl.isEmpty())
+ location = Location(indexUrl + QLatin1Char('/') + name.toLower() + ".html");
+ else if (!indexUrl.isNull())
+ location = Location(name.toLower() + ".html");
+ } else {
+ goto done;
+ }
+
+ {
+ if (!href.isEmpty()) {
+ node->setUrl(href);
+ // Include the index URL if it exists
+ if (!node->isExternalPage() && !indexUrl.isEmpty())
+ node->setUrl(indexUrl + QLatin1Char('/') + href);
+ }
+
+ const QString access = attributes.value(QLatin1String("access")).toString();
+ if (access == "protected")
+ node->setAccess(Access::Protected);
+ else if ((access == "private") || (access == "internal"))
+ node->setAccess(Access::Private);
+ else
+ node->setAccess(Access::Public);
+
+ if (attributes.hasAttribute(QLatin1String("related"))) {
+ node->setRelatedNonmember(true);
+ m_relatedNodes << node;
+ }
+
+ if (attributes.hasAttribute(QLatin1String("threadsafety"))) {
+ QString threadSafety = attributes.value(QLatin1String("threadsafety")).toString();
+ if (threadSafety == QLatin1String("non-reentrant"))
+ node->setThreadSafeness(Node::NonReentrant);
+ else if (threadSafety == QLatin1String("reentrant"))
+ node->setThreadSafeness(Node::Reentrant);
+ else if (threadSafety == QLatin1String("thread safe"))
+ node->setThreadSafeness(Node::ThreadSafe);
+ else
+ node->setThreadSafeness(Node::UnspecifiedSafeness);
+ } else
+ node->setThreadSafeness(Node::UnspecifiedSafeness);
+
+ const QString category = attributes.value(QLatin1String("comparison_category")).toString();
+ node->setComparisonCategory(comparisonCategoryFromString(category.toStdString()));
+
+ QString status = attributes.value(QLatin1String("status")).toString();
+ // TODO: "obsolete" is kept for backward compatibility, remove in the near future
+ if (status == QLatin1String("obsolete") || status == QLatin1String("deprecated"))
+ node->setStatus(Node::Deprecated);
+ else if (status == QLatin1String("preliminary"))
+ node->setStatus(Node::Preliminary);
+ else if (status == QLatin1String("internal"))
+ node->setStatus(Node::Internal);
+ else if (status == QLatin1String("ignored"))
+ node->setStatus(Node::DontDocument);
+ else
+ node->setStatus(Node::Active);
+
+ QString physicalModuleName = attributes.value(QLatin1String("module")).toString();
+ if (!physicalModuleName.isEmpty())
+ m_qdb->addToModule(physicalModuleName, node);
+
+ QString since = attributes.value(QLatin1String("since")).toString();
+ if (!since.isEmpty()) {
+ node->setSince(since);
+ }
+
+ if (attributes.hasAttribute(QLatin1String("documented"))) {
+ if (attributes.value(QLatin1String("documented")) == QLatin1String("true"))
+ node->setHadDoc();
+ }
+
+ QString groupsAttr = attributes.value(QLatin1String("groups")).toString();
+ if (!groupsAttr.isEmpty()) {
+ const QStringList groupNames = groupsAttr.split(QLatin1Char(','));
+ for (const auto &group : groupNames) {
+ m_qdb->addToGroup(group, node);
+ }
+ }
+
+ // Create some content for the node.
+ QSet<QString> emptySet;
+ Location t(filePath);
+ if (!filePath.isEmpty()) {
+ t.setLineNo(lineNo);
+ node->setLocation(t);
+ location = t;
+ }
+ Doc doc(location, location, QString(), emptySet, emptySet); // placeholder
+ node->setDoc(doc);
+ node->setIndexNodeFlag(); // Important: This node came from an index file.
+ QString briefAttr = attributes.value(QLatin1String("brief")).toString();
+ if (!briefAttr.isEmpty()) {
+ node->setReconstitutedBrief(briefAttr);
+ }
+
+ if (!hasReadChildren) {
+ bool useParent = (elementName == QLatin1String("namespace") && name.isEmpty());
+ while (reader.readNextStartElement()) {
+ if (useParent)
+ readIndexSection(reader, parent, indexUrl);
+ else
+ readIndexSection(reader, node, indexUrl);
+ }
+ }
+ }
+
+done:
+ while (!reader.isEndElement()) {
+ if (reader.readNext() == QXmlStreamReader::Invalid) {
+ break;
+ }
+ }
+}
+
+void QDocIndexFiles::insertTarget(TargetRec::TargetType type,
+ const QXmlStreamAttributes &attributes, Node *node)
+{
+ int priority;
+ switch (type) {
+ case TargetRec::Keyword:
+ priority = 1;
+ break;
+ case TargetRec::Target:
+ priority = 2;
+ break;
+ case TargetRec::Contents:
+ priority = 3;
+ break;
+ default:
+ return;
+ }
+
+ QString name = attributes.value(QLatin1String("name")).toString();
+ QString title = attributes.value(QLatin1String("title")).toString();
+ m_qdb->insertTarget(name, title, type, node, priority);
+}
+
+/*!
+ This function tries to resolve class inheritance immediately
+ after the index file is read. It is not always possible to
+ resolve a class inheritance at this point, because the base
+ class might be in an index file that hasn't been read yet, or
+ it might be in one of the header files that will be read for
+ the current module. These cases will be resolved after all
+ the index files and header and source files have been read,
+ just prior to beginning the generate phase for the current
+ module.
+
+ I don't think this is completely correct because it always
+ sets the access to public.
+ */
+void QDocIndexFiles::resolveIndex()
+{
+ for (const auto &pair : std::as_const(m_basesList)) {
+ const QStringList bases = pair.second.split(QLatin1Char(','));
+ for (const auto &base : bases) {
+ QStringList basePath = base.split(QString("::"));
+ Node *n = m_qdb->findClassNode(basePath);
+ if (n)
+ pair.first->addResolvedBaseClass(Access::Public, static_cast<ClassNode *>(n));
+ else
+ pair.first->addUnresolvedBaseClass(Access::Public, basePath);
+ }
+ }
+ // No longer needed.
+ m_basesList.clear();
+}
+
+static QString getAccessString(Access t)
+{
+
+ switch (t) {
+ case Access::Public:
+ return QLatin1String("public");
+ case Access::Protected:
+ return QLatin1String("protected");
+ case Access::Private:
+ return QLatin1String("private");
+ default:
+ break;
+ }
+ return QLatin1String("public");
+}
+
+static QString getStatusString(Node::Status t)
+{
+ switch (t) {
+ case Node::Deprecated:
+ return QLatin1String("deprecated");
+ case Node::Preliminary:
+ return QLatin1String("preliminary");
+ case Node::Active:
+ return QLatin1String("active");
+ case Node::Internal:
+ return QLatin1String("internal");
+ case Node::DontDocument:
+ return QLatin1String("ignored");
+ default:
+ break;
+ }
+ return QLatin1String("active");
+}
+
+static QString getThreadSafenessString(Node::ThreadSafeness t)
+{
+ switch (t) {
+ case Node::NonReentrant:
+ return QLatin1String("non-reentrant");
+ case Node::Reentrant:
+ return QLatin1String("reentrant");
+ case Node::ThreadSafe:
+ return QLatin1String("thread safe");
+ case Node::UnspecifiedSafeness:
+ default:
+ break;
+ }
+ return QLatin1String("unspecified");
+}
+
+/*!
+ Returns the index of \a node in the list of related non-member nodes.
+*/
+int QDocIndexFiles::indexForNode(Node *node)
+{
+ qsizetype i = m_relatedNodes.indexOf(node);
+ if (i == -1) {
+ i = m_relatedNodes.size();
+ m_relatedNodes << node;
+ }
+ return i;
+}
+
+/*!
+ Adopts the related non-member node identified by \a index to the
+ parent \a adoptiveParent. Returns \c true if successful.
+*/
+bool QDocIndexFiles::adoptRelatedNode(Aggregate *adoptiveParent, int index)
+{
+ Node *related = m_relatedNodes.value(index);
+
+ if (adoptiveParent && related) {
+ adoptiveParent->adoptChild(related);
+ return true;
+ }
+
+ return false;
+}
+
+/*!
+ 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.
+
+ \note Function nodes are processed in generateFunctionSection()
+ */
+bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node,
+ IndexSectionWriter *post)
+{
+ if (m_gen == nullptr)
+ m_gen = Generator::currentGenerator();
+
+ Q_ASSERT(m_gen);
+
+ post_ = nullptr;
+ /*
+ Don't include index nodes in a new index file.
+ */
+ if (node->isIndexNode())
+ return false;
+
+ QString nodeName;
+ QString logicalModuleName;
+ QString logicalModuleVersion;
+ QString qmlFullBaseName;
+ QString baseNameAttr;
+ QString moduleNameAttr;
+ QString moduleVerAttr;
+
+ switch (node->nodeType()) {
+ case Node::Namespace:
+ nodeName = "namespace";
+ break;
+ case Node::Class:
+ nodeName = "class";
+ break;
+ case Node::Struct:
+ nodeName = "struct";
+ break;
+ case Node::Union:
+ nodeName = "union";
+ break;
+ case Node::HeaderFile:
+ nodeName = "header";
+ break;
+ case Node::QmlType:
+ case Node::QmlValueType:
+ nodeName = (node->nodeType() == Node::QmlType) ? "qmlclass" : "qmlvaluetype";
+ logicalModuleName = node->logicalModuleName();
+ baseNameAttr = "qml-base-type";
+ moduleNameAttr = "qml-module-name";
+ moduleVerAttr = "qml-module-version";
+ qmlFullBaseName = node->qmlFullBaseName();
+ break;
+ case Node::Page:
+ case Node::Example:
+ case Node::ExternalPage:
+ nodeName = "page";
+ break;
+ case Node::Group:
+ nodeName = "group";
+ break;
+ case Node::Module:
+ nodeName = "module";
+ break;
+ case Node::QmlModule:
+ nodeName = "qmlmodule";
+ moduleNameAttr = "qml-module-name";
+ moduleVerAttr = "qml-module-version";
+ logicalModuleName = node->logicalModuleName();
+ logicalModuleVersion = node->logicalModuleVersion();
+ break;
+ case Node::Enum:
+ nodeName = "enum";
+ break;
+ case Node::TypeAlias:
+ case Node::Typedef:
+ nodeName = "typedef";
+ break;
+ case Node::Property:
+ nodeName = "property";
+ break;
+ case Node::Variable:
+ nodeName = "variable";
+ break;
+ case Node::SharedComment:
+ if (!node->isPropertyGroup())
+ return false;
+ // Add an entry for property groups so that they can be linked to
+ nodeName = "qmlproperty";
+ break;
+ case Node::QmlProperty:
+ nodeName = "qmlproperty";
+ break;
+ case Node::Proxy:
+ nodeName = "proxy";
+ break;
+ case Node::Function: // Now processed in generateFunctionSection()
+ default:
+ return false;
+ }
+
+ QString objName = node->name();
+ // Special case: only the root node should have an empty name.
+ if (objName.isEmpty() && node != m_qdb->primaryTreeRoot())
+ return false;
+
+ writer.writeStartElement(nodeName);
+
+ if (!node->isTextPageNode() && !node->isCollectionNode() && !node->isHeader()) {
+ if (node->threadSafeness() != Node::UnspecifiedSafeness)
+ writer.writeAttribute("threadsafety", getThreadSafenessString(node->threadSafeness()));
+ }
+
+ writer.writeAttribute("name", objName);
+
+ // Write module and base type info for QML types
+ if (!moduleNameAttr.isEmpty()) {
+ if (!logicalModuleName.isEmpty())
+ writer.writeAttribute(moduleNameAttr, logicalModuleName);
+ if (!logicalModuleVersion.isEmpty())
+ writer.writeAttribute(moduleVerAttr, logicalModuleVersion);
+ }
+ if (!baseNameAttr.isEmpty() && !qmlFullBaseName.isEmpty())
+ writer.writeAttribute(baseNameAttr, qmlFullBaseName);
+
+ QString href;
+ if (!node->isExternalPage()) {
+ QString fullName = node->fullDocumentName();
+ if (fullName != objName)
+ writer.writeAttribute("fullname", fullName);
+ href = m_gen->fullDocumentLocation(node);
+ } else
+ href = node->name();
+ if (node->isQmlNode()) {
+ Aggregate *p = node->parent();
+ if (p && p->isQmlType() && p->isAbstract())
+ href.clear();
+ }
+ if (!href.isEmpty())
+ writer.writeAttribute("href", href);
+
+ writer.writeAttribute("status", getStatusString(node->status()));
+ if (!node->isTextPageNode() && !node->isCollectionNode() && !node->isHeader()) {
+ writer.writeAttribute("access", getAccessString(node->access()));
+ if (node->isAbstract())
+ writer.writeAttribute("abstract", "true");
+ }
+ const Location &declLocation = node->declLocation();
+ if (!declLocation.fileName().isEmpty())
+ writer.writeAttribute("location", declLocation.fileName());
+ if (m_storeLocationInfo && !declLocation.filePath().isEmpty()) {
+ writer.writeAttribute("filepath", declLocation.filePath());
+ writer.writeAttribute("lineno", QString("%1").arg(declLocation.lineNo()));
+ }
+
+ if (node->isRelatedNonmember())
+ writer.writeAttribute("related", QString::number(indexForNode(node)));
+
+ if (!node->since().isEmpty())
+ writer.writeAttribute("since", node->since());
+
+ if (node->hasDoc())
+ writer.writeAttribute("documented", "true");
+
+ QStringList groups = m_qdb->groupNamesForNode(node);
+ if (!groups.isEmpty())
+ writer.writeAttribute("groups", groups.join(QLatin1Char(',')));
+
+ QString brief = node->doc().trimmedBriefText(node->name()).toString();
+ switch (node->nodeType()) {
+ case Node::Class:
+ case Node::Struct:
+ case Node::Union: {
+ // Classes contain information about their base classes.
+ const auto *classNode = static_cast<const ClassNode *>(node);
+ const QList<RelatedClass> &bases = classNode->baseClasses();
+ QSet<QString> baseStrings;
+ for (const auto &related : bases) {
+ ClassNode *n = related.m_node;
+ if (n)
+ baseStrings.insert(n->fullName());
+ else if (!related.m_path.isEmpty())
+ baseStrings.insert(related.m_path.join(QLatin1String("::")));
+ }
+ if (!baseStrings.isEmpty()) {
+ QStringList baseStringsAsList = baseStrings.values();
+ baseStringsAsList.sort();
+ writer.writeAttribute("bases", baseStringsAsList.join(QLatin1Char(',')));
+ }
+ if (!node->physicalModuleName().isEmpty())
+ writer.writeAttribute("module", node->physicalModuleName());
+ if (!brief.isEmpty())
+ writer.writeAttribute("brief", brief);
+ if (auto category = node->comparisonCategory(); category != ComparisonCategory::None)
+ writer.writeAttribute("comparison_category", comparisonCategoryAsString(category));
+ } break;
+ case Node::HeaderFile: {
+ const auto *headerNode = static_cast<const HeaderNode *>(node);
+ if (!headerNode->physicalModuleName().isEmpty())
+ writer.writeAttribute("module", headerNode->physicalModuleName());
+ if (!brief.isEmpty())
+ writer.writeAttribute("brief", brief);
+ writer.writeAttribute("title", headerNode->title());
+ writer.writeAttribute("fulltitle", headerNode->fullTitle());
+ writer.writeAttribute("subtitle", headerNode->subtitle());
+ } break;
+ case Node::Namespace: {
+ const auto *namespaceNode = static_cast<const NamespaceNode *>(node);
+ if (!namespaceNode->physicalModuleName().isEmpty())
+ writer.writeAttribute("module", namespaceNode->physicalModuleName());
+ if (!brief.isEmpty())
+ writer.writeAttribute("brief", brief);
+ } break;
+ case Node::QmlValueType:
+ case Node::QmlType: {
+ const auto *qmlTypeNode = static_cast<const QmlTypeNode *>(node);
+ writer.writeAttribute("title", qmlTypeNode->title());
+ writer.writeAttribute("fulltitle", qmlTypeNode->fullTitle());
+ writer.writeAttribute("subtitle", qmlTypeNode->subtitle());
+ if (!brief.isEmpty())
+ writer.writeAttribute("brief", brief);
+ } break;
+ case Node::Page:
+ case Node::Example:
+ case Node::ExternalPage: {
+ if (node->isExample())
+ writer.writeAttribute("subtype", "example");
+ else if (node->isExternalPage())
+ writer.writeAttribute("subtype", "externalpage");
+ else
+ writer.writeAttribute("subtype", (static_cast<PageNode*>(node)->isAttribution() ? "attribution" : "page"));
+
+ const auto *pageNode = static_cast<const PageNode *>(node);
+ writer.writeAttribute("title", pageNode->title());
+ writer.writeAttribute("fulltitle", pageNode->fullTitle());
+ writer.writeAttribute("subtitle", pageNode->subtitle());
+ if (!brief.isEmpty())
+ writer.writeAttribute("brief", brief);
+ } break;
+ case Node::Group:
+ case Node::Module:
+ case Node::QmlModule: {
+ const auto *collectionNode = static_cast<const CollectionNode *>(node);
+ writer.writeAttribute("seen", collectionNode->wasSeen() ? "true" : "false");
+ writer.writeAttribute("title", collectionNode->title());
+ if (!collectionNode->subtitle().isEmpty())
+ writer.writeAttribute("subtitle", collectionNode->subtitle());
+ if (!collectionNode->physicalModuleName().isEmpty())
+ writer.writeAttribute("module", collectionNode->physicalModuleName());
+ if (!brief.isEmpty())
+ writer.writeAttribute("brief", brief);
+ } break;
+ case Node::QmlProperty: {
+ auto *qmlPropertyNode = static_cast<QmlPropertyNode *>(node);
+ writer.writeAttribute("type", qmlPropertyNode->dataType());
+ writer.writeAttribute("attached", qmlPropertyNode->isAttached() ? "true" : "false");
+ writer.writeAttribute("writable", qmlPropertyNode->isReadOnly() ? "false" : "true");
+ if (qmlPropertyNode->isRequired())
+ writer.writeAttribute("required", "true");
+ if (!brief.isEmpty())
+ writer.writeAttribute("brief", brief);
+ } break;
+ case Node::Property: {
+ const auto *propertyNode = static_cast<const PropertyNode *>(node);
+
+ if (propertyNode->propertyType() == PropertyNode::PropertyType::BindableProperty)
+ writer.writeAttribute("bindable", "true");
+
+ if (!propertyNode->isWritable())
+ writer.writeAttribute("writable", "false");
+
+ if (!brief.isEmpty())
+ writer.writeAttribute("brief", brief);
+ // Property access function names
+ for (qsizetype i{0}; i < (qsizetype)PropertyNode::FunctionRole::NumFunctionRoles; ++i) {
+ auto role{(PropertyNode::FunctionRole)i};
+ for (const auto *fnNode : propertyNode->functions(role)) {
+ writer.writeStartElement(PropertyNode::roleName(role));
+ writer.writeAttribute("name", fnNode->name());
+ writer.writeEndElement();
+ }
+ }
+ } break;
+ case Node::Variable: {
+ const auto *variableNode = static_cast<const VariableNode *>(node);
+ writer.writeAttribute("type", variableNode->dataType());
+ writer.writeAttribute("static", variableNode->isStatic() ? "true" : "false");
+ if (!brief.isEmpty())
+ writer.writeAttribute("brief", brief);
+ } break;
+ case Node::Enum: {
+ const auto *enumNode = static_cast<const EnumNode *>(node);
+ if (enumNode->isScoped())
+ writer.writeAttribute("scoped", "true");
+ if (enumNode->flagsType())
+ writer.writeAttribute("typedef", enumNode->flagsType()->fullDocumentName());
+ const auto &items = enumNode->items();
+ for (const auto &item : items) {
+ writer.writeStartElement("value");
+ writer.writeAttribute("name", item.name());
+ writer.writeAttribute("value", item.value());
+ if (!item.since().isEmpty())
+ writer.writeAttribute("since", item.since());
+ writer.writeEndElement(); // value
+ }
+ } break;
+ case Node::Typedef: {
+ const auto *typedefNode = static_cast<const TypedefNode *>(node);
+ if (typedefNode->associatedEnum())
+ writer.writeAttribute("enum", typedefNode->associatedEnum()->fullDocumentName());
+ } break;
+ case Node::TypeAlias:
+ writer.writeAttribute("aliasedtype", static_cast<const TypeAliasNode *>(node)->aliasedType());
+ break;
+ case Node::Function: // Now processed in generateFunctionSection()
+ default:
+ 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
+ }
+ }
+
+ /*
+ Some nodes have a table of contents. For these, we close
+ the opening tag, create sub-elements for the items in the
+ table of contents, and then add a closing tag for the
+ element. Elements for all other nodes are closed in the
+ opening tag.
+ */
+ if (node->isPageNode() || node->isCollectionNode()) {
+ if (node->doc().hasTableOfContents()) {
+ for (int i = 0; i < node->doc().tableOfContents().size(); ++i) {
+ Atom *item = node->doc().tableOfContents()[i];
+ int level = node->doc().tableOfContentsLevels()[i];
+ QString title = Text::sectionHeading(item).toString();
+ writer.writeStartElement("contents");
+ writer.writeAttribute("name", Tree::refForAtom(item));
+ writer.writeAttribute("title", title);
+ writer.writeAttribute("level", QString::number(level));
+ writer.writeEndElement(); // contents
+ }
+ }
+ }
+ // WebXMLGenerator - skip the nested <page> elements for example
+ // files/images, as the generator produces them separately
+ if (node->isExample() && m_gen->format() != QLatin1String("WebXML")) {
+ const auto *exampleNode = static_cast<const ExampleNode *>(node);
+ const auto &files = exampleNode->files();
+ for (const QString &file : files) {
+ writer.writeStartElement("page");
+ writer.writeAttribute("name", file);
+ QString href = m_gen->linkForExampleFile(file);
+ writer.writeAttribute("href", href);
+ writer.writeAttribute("status", "active");
+ writer.writeAttribute("subtype", "file");
+ writer.writeAttribute("title", "");
+ writer.writeAttribute("fulltitle", Generator::exampleFileTitle(exampleNode, file));
+ writer.writeAttribute("subtitle", file);
+ writer.writeEndElement(); // page
+ }
+ const auto &images = exampleNode->images();
+ for (const QString &file : images) {
+ writer.writeStartElement("page");
+ writer.writeAttribute("name", file);
+ QString href = m_gen->linkForExampleFile(file);
+ writer.writeAttribute("href", href);
+ writer.writeAttribute("status", "active");
+ writer.writeAttribute("subtype", "image");
+ writer.writeAttribute("title", "");
+ writer.writeAttribute("fulltitle", Generator::exampleFileTitle(exampleNode, file));
+ writer.writeAttribute("subtitle", file);
+ writer.writeEndElement(); // page
+ }
+ }
+ // Append to the section if the callback object was set
+ if (post)
+ post->append(writer, node);
+
+ post_ = post;
+ return true;
+}
+
+/*!
+ This function writes a <function> element for \a fn to the
+ index file using \a writer.
+ */
+void QDocIndexFiles::generateFunctionSection(QXmlStreamWriter &writer, FunctionNode *fn)
+{
+ if (fn->isInternal() && !Config::instance().showInternal())
+ return;
+
+ const QString objName = fn->name();
+ writer.writeStartElement("function");
+ writer.writeAttribute("name", objName);
+
+ const QString fullName = fn->fullDocumentName();
+ if (fullName != objName)
+ writer.writeAttribute("fullname", fullName);
+ const QString href = m_gen->fullDocumentLocation(fn);
+ if (!href.isEmpty())
+ writer.writeAttribute("href", href);
+ if (fn->threadSafeness() != Node::UnspecifiedSafeness)
+ writer.writeAttribute("threadsafety", getThreadSafenessString(fn->threadSafeness()));
+ writer.writeAttribute("status", getStatusString(fn->status()));
+ writer.writeAttribute("access", getAccessString(fn->access()));
+
+ const Location &declLocation = fn->declLocation();
+ if (!declLocation.fileName().isEmpty())
+ writer.writeAttribute("location", declLocation.fileName());
+ if (m_storeLocationInfo && !declLocation.filePath().isEmpty()) {
+ writer.writeAttribute("filepath", declLocation.filePath());
+ writer.writeAttribute("lineno", QString("%1").arg(declLocation.lineNo()));
+ }
+
+ if (fn->hasDoc())
+ writer.writeAttribute("documented", "true");
+ if (fn->isRelatedNonmember())
+ writer.writeAttribute("related", QString::number(indexForNode(fn)));
+ if (!fn->since().isEmpty())
+ writer.writeAttribute("since", fn->since());
+
+ const QString brief = fn->doc().trimmedBriefText(fn->name()).toString();
+ writer.writeAttribute("meta", fn->metanessString());
+ if (fn->isCppNode()) {
+ if (!fn->isNonvirtual())
+ writer.writeAttribute("virtual", fn->virtualness());
+
+ if (fn->isConst())
+ writer.writeAttribute("const", "true");
+ if (fn->isStatic())
+ writer.writeAttribute("static", "true");
+ if (fn->isFinal())
+ writer.writeAttribute("final", "true");
+ if (fn->isOverride())
+ writer.writeAttribute("override", "true");
+ if (fn->isExplicit())
+ writer.writeAttribute("explicit", "true");
+ if (fn->isConstexpr())
+ writer.writeAttribute("constexpr", "true");
+
+ if (auto noexcept_info = fn->getNoexcept()) {
+ writer.writeAttribute("noexcept", "true");
+ if (!(*noexcept_info).isEmpty()) writer.writeAttribute("noexcept_expression", *noexcept_info);
+ }
+
+ /*
+ This ensures that for functions that have overloads,
+ the first function written is the one that is not an
+ overload, and the overloads follow it immediately in
+ the index file numbered from 1 to n.
+ */
+ if (fn->isOverload() && (fn->overloadNumber() > 0)) {
+ writer.writeAttribute("overload", "true");
+ writer.writeAttribute("overload-number", QString::number(fn->overloadNumber()));
+ }
+ if (fn->isRef())
+ writer.writeAttribute("refness", QString::number(1));
+ else if (fn->isRefRef())
+ writer.writeAttribute("refness", QString::number(2));
+ if (fn->hasAssociatedProperties()) {
+ QStringList associatedProperties;
+ for (const auto *node : fn->associatedProperties()) {
+ associatedProperties << node->name();
+ }
+ associatedProperties.sort();
+ writer.writeAttribute("associated-property",
+ associatedProperties.join(QLatin1Char(',')));
+ }
+ }
+
+ const auto return_type = fn->returnType();
+ if (!return_type.isEmpty())
+ writer.writeAttribute("type", return_type);
+
+ if (fn->isCppNode()) {
+ if (!brief.isEmpty())
+ writer.writeAttribute("brief", brief);
+
+ /*
+ Note: The "signature" attribute is written to the
+ index file, but it is not read back in by qdoc. However,
+ we need it for the webxml generator.
+ */
+ const QString signature = appendAttributesToSignature(fn);
+ writer.writeAttribute("signature", signature);
+
+ QStringList groups = m_qdb->groupNamesForNode(fn);
+ if (!groups.isEmpty())
+ writer.writeAttribute("groups", groups.join(QLatin1Char(',')));
+ }
+
+ for (int i = 0; i < fn->parameters().count(); ++i) {
+ const Parameter &parameter = fn->parameters().at(i);
+ writer.writeStartElement("parameter");
+ writer.writeAttribute("type", parameter.type());
+ writer.writeAttribute("name", parameter.name());
+ writer.writeAttribute("default", parameter.defaultValue());
+ writer.writeEndElement(); // parameter
+ }
+
+ // Append to the section if the callback object was set
+ if (post_)
+ post_->append(writer, fn);
+
+ writer.writeEndElement(); // function
+}
+
+/*!
+ \internal
+
+ Constructs the signature to be written to an index file for the function
+ represented by FunctionNode \a fn.
+
+ 'const' is already part of FunctionNode::signature(), which forms the basis
+ for the signature returned by this method. The method adds, where
+ applicable, the C++ keywords "final", "override", or "= 0", to the
+ signature carried by the FunctionNode itself.
+ */
+QString QDocIndexFiles::appendAttributesToSignature(const FunctionNode *fn) const noexcept
+{
+ QString signature = fn->signature(Node::SignatureReturnType);
+
+ if (fn->isFinal())
+ signature += " final";
+ if (fn->isOverride())
+ signature += " override";
+ if (fn->isPureVirtual())
+ signature += " = 0";
+
+ return signature;
+}
+
+/*!
+ Outputs a <function> element to the index for each FunctionNode in
+ an \a aggregate, using \a writer.
+ The \a aggregate has a function map that contains all the
+ function nodes (a vector of overloads) indexed by function
+ name.
+
+ If a function element represents an overload, it has an
+ \c overload attribute set to \c true and an \c {overload-number}
+ attribute set to the function's overload number.
+ */
+void QDocIndexFiles::generateFunctionSections(QXmlStreamWriter &writer, Aggregate *aggregate)
+{
+ for (auto functions : std::as_const(aggregate->functionMap())) {
+ std::for_each(functions.begin(), functions.end(),
+ [this,&writer](FunctionNode *fn) {
+ generateFunctionSection(writer, fn);
+ }
+ );
+ }
+}
+
+/*!
+ Generate index sections for the child nodes of the given \a node
+ using the \a writer specified.
+*/
+void QDocIndexFiles::generateIndexSections(QXmlStreamWriter &writer, Node *node,
+ IndexSectionWriter *post)
+{
+ /*
+ Note that groups, modules, and QML modules are written
+ after all the other nodes.
+ */
+ if (node->isCollectionNode() || node->isGroup() || node->isModule() || node->isQmlModule())
+ return;
+
+ if (node->isInternal() && !Config::instance().showInternal())
+ return;
+
+ if (generateIndexSection(writer, node, post)) {
+ if (node->isAggregate()) {
+ auto *aggregate = static_cast<Aggregate *>(node);
+ // First write the function children, then write the nonfunction children.
+ generateFunctionSections(writer, aggregate);
+ const auto &nonFunctionList = aggregate->nonfunctionList();
+ for (auto *node : nonFunctionList)
+ generateIndexSections(writer, node, post);
+ }
+
+ if (node == root_) {
+ /*
+ We wait until the end of the index file to output the group, module,
+ and QML module elements. By outputting them at the end, when we read
+ the index file back in, all the group, module, and QML module member
+ elements will have already been created. It is then only necessary to
+ create the group, module, or QML module element and add each member to
+ its member list.
+ */
+ const CNMap &groups = m_qdb->groups();
+ if (!groups.isEmpty()) {
+ for (auto it = groups.constBegin(); it != groups.constEnd(); ++it) {
+ if (generateIndexSection(writer, it.value(), post))
+ writer.writeEndElement();
+ }
+ }
+
+ const CNMap &modules = m_qdb->modules();
+ if (!modules.isEmpty()) {
+ for (auto it = modules.constBegin(); it != modules.constEnd(); ++it) {
+ if (generateIndexSection(writer, it.value(), post))
+ writer.writeEndElement();
+ }
+ }
+
+ const CNMap &qmlModules = m_qdb->qmlModules();
+ if (!qmlModules.isEmpty()) {
+ for (auto it = qmlModules.constBegin(); it != qmlModules.constEnd(); ++it) {
+ if (generateIndexSection(writer, it.value(), post))
+ writer.writeEndElement();
+ }
+ }
+ }
+
+ writer.writeEndElement();
+ }
+}
+
+/*!
+ Writes a qdoc module index in XML to a file named \a fileName.
+ \a url is the \c url attribute of the <INDEX> element.
+ \a title is the \c title attribute of the <INDEX> element.
+ \a g is a pointer to the current Generator in use, stored for later use.
+ */
+void QDocIndexFiles::generateIndex(const QString &fileName, const QString &url,
+ const QString &title, Generator *g)
+{
+ QFile file(fileName);
+ if (!file.open(QFile::WriteOnly | QFile::Text))
+ return;
+
+ qCDebug(lcQdoc) << "Writing index file:" << fileName;
+
+ m_gen = g;
+ m_relatedNodes.clear();
+ QXmlStreamWriter writer(&file);
+ writer.setAutoFormatting(true);
+ writer.writeStartDocument();
+ writer.writeDTD("<!DOCTYPE QDOCINDEX>");
+
+ writer.writeStartElement("INDEX");
+ writer.writeAttribute("url", url);
+ writer.writeAttribute("title", title);
+ writer.writeAttribute("version", m_qdb->version());
+ writer.writeAttribute("project", Config::instance().get(CONFIG_PROJECT).asString());
+
+ root_ = m_qdb->primaryTreeRoot();
+ if (!root_->tree()->indexTitle().isEmpty())
+ writer.writeAttribute("indexTitle", root_->tree()->indexTitle());
+
+ generateIndexSections(writer, root_, nullptr);
+
+ writer.writeEndElement(); // INDEX
+ writer.writeEndElement(); // QDOCINDEX
+ writer.writeEndDocument();
+ file.close();
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/qdocindexfiles.h b/src/qdoc/qdoc/src/qdoc/qdocindexfiles.h
new file mode 100644
index 000000000..6148c6cd2
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/qdocindexfiles.h
@@ -0,0 +1,72 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef QDOCINDEXFILES_H
+#define QDOCINDEXFILES_H
+
+#include "node.h"
+#include "tree.h"
+
+QT_BEGIN_NAMESPACE
+
+class Atom;
+class FunctionNode;
+class Generator;
+class QDocDatabase;
+class WebXMLGenerator;
+class QXmlStreamReader;
+class QXmlStreamWriter;
+class QXmlStreamAttributes;
+
+// A callback interface for extending index sections
+class IndexSectionWriter
+{
+public:
+ virtual ~IndexSectionWriter() = default;
+ virtual void append(QXmlStreamWriter &writer, Node *node) = 0;
+};
+
+class QDocIndexFiles
+{
+ friend class QDocDatabase;
+ friend class WebXMLGenerator; // for using generateIndexSections()
+
+private:
+ static QDocIndexFiles *qdocIndexFiles();
+ static void destroyQDocIndexFiles();
+
+ QDocIndexFiles();
+ ~QDocIndexFiles();
+
+ void readIndexes(const QStringList &indexFiles);
+ void readIndexFile(const QString &path);
+ void readIndexSection(QXmlStreamReader &reader, Node *current, const QString &indexUrl);
+ void insertTarget(TargetRec::TargetType type, const QXmlStreamAttributes &attributes,
+ Node *node);
+ void resolveIndex();
+ int indexForNode(Node *node);
+ bool adoptRelatedNode(Aggregate *adoptiveParent, int index);
+
+ void generateIndex(const QString &fileName, const QString &url, const QString &title,
+ Generator *g);
+ void generateFunctionSection(QXmlStreamWriter &writer, FunctionNode *fn);
+ void generateFunctionSections(QXmlStreamWriter &writer, Aggregate *aggregate);
+ bool generateIndexSection(QXmlStreamWriter &writer, Node *node,
+ IndexSectionWriter *post = nullptr);
+ void generateIndexSections(QXmlStreamWriter &writer, Node *node,
+ IndexSectionWriter *post = nullptr);
+ QString appendAttributesToSignature(const FunctionNode *fn) const noexcept;
+
+private:
+ static QDocIndexFiles *s_qdocIndexFiles;
+ QDocDatabase *m_qdb {};
+ Generator *m_gen {};
+ QString m_project;
+ QList<std::pair<ClassNode *, QString>> m_basesList;
+ NodeList m_relatedNodes;
+ bool m_storeLocationInfo;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/qmlcodemarker.cpp b/src/qdoc/qdoc/src/qdoc/qmlcodemarker.cpp
new file mode 100644
index 000000000..30dec979e
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/qmlcodemarker.cpp
@@ -0,0 +1,175 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "qmlcodemarker.h"
+
+#include <QtCore/qregularexpression.h>
+
+#include "atom.h"
+#include "node.h"
+#include "qmlmarkupvisitor.h"
+#include "text.h"
+
+#include <private/qqmljsast_p.h>
+#include <private/qqmljsastfwd_p.h>
+#include <private/qqmljsengine_p.h>
+#include <private/qqmljslexer_p.h>
+#include <private/qqmljsparser_p.h>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ Returns \c true if the \a code is recognized by the parser.
+ */
+bool QmlCodeMarker::recognizeCode(const QString &code)
+{
+ // Naive pre-check; starts with an import statement or 'CamelCase {'
+ static const QRegularExpression regExp(QStringLiteral("^\\s*(import |([A-Z][a-z0-9]*)+\\s?{)"));
+ if (!regExp.match(code).hasMatch())
+ return false;
+
+ QQmlJS::Engine engine;
+ QQmlJS::Lexer lexer(&engine);
+ QQmlJS::Parser parser(&engine);
+
+ QString newCode = code;
+ extractPragmas(newCode);
+ lexer.setCode(newCode, 1);
+
+ return parser.parse();
+}
+
+/*!
+ Returns \c true if \a ext is any of a list of file extensions
+ for the QML language.
+ */
+bool QmlCodeMarker::recognizeExtension(const QString &ext)
+{
+ return ext == "qml";
+}
+
+/*!
+ Returns \c true if the \a language is recognized. Only "QML" is
+ recognized by this marker.
+ */
+bool QmlCodeMarker::recognizeLanguage(const QString &language)
+{
+ return language == "QML";
+}
+
+/*!
+ Returns the type of atom used to represent QML code in the documentation.
+*/
+Atom::AtomType QmlCodeMarker::atomType() const
+{
+ return Atom::Qml;
+}
+
+QString QmlCodeMarker::markedUpCode(const QString &code, const Node *relative,
+ const Location &location)
+{
+ return addMarkUp(code, relative, location);
+}
+
+/*!
+ Constructs and returns the marked up name for the \a node.
+ If the node is any kind of QML function (a method,
+ signal, or handler), "()" is appended to the marked up name.
+ */
+QString QmlCodeMarker::markedUpName(const Node *node)
+{
+ QString name = linkTag(node, taggedNode(node));
+ if (node->isFunction())
+ name += "()";
+ return name;
+}
+
+QString QmlCodeMarker::markedUpInclude(const QString &include)
+{
+ return addMarkUp("import " + include, nullptr, Location{});
+}
+
+QString QmlCodeMarker::addMarkUp(const QString &code, const Node * /* relative */,
+ const Location &location)
+{
+ QQmlJS::Engine engine;
+ QQmlJS::Lexer lexer(&engine);
+
+ QString newCode = code;
+ QList<QQmlJS::SourceLocation> pragmas = extractPragmas(newCode);
+ lexer.setCode(newCode, 1);
+
+ QQmlJS::Parser parser(&engine);
+ QString output;
+
+ if (parser.parse()) {
+ QQmlJS::AST::UiProgram *ast = parser.ast();
+ // Pass the unmodified code to the visitor so that pragmas and other
+ // unhandled source text can be output.
+ QmlMarkupVisitor visitor(code, pragmas, &engine);
+ QQmlJS::AST::Node::accept(ast, &visitor);
+ if (visitor.hasError()) {
+ location.warning(
+ location.fileName()
+ + QStringLiteral("Unable to analyze QML snippet. The output is incomplete."));
+ }
+ output = visitor.markedUpCode();
+ } else {
+ location.warning(QStringLiteral("Unable to parse QML snippet: \"%1\" at line %2, column %3")
+ .arg(parser.errorMessage())
+ .arg(parser.errorLineNumber())
+ .arg(parser.errorColumnNumber()));
+ output = protect(code);
+ }
+
+ return output;
+}
+
+/*
+ Copied and pasted from
+ src/declarative/qml/qqmlscriptparser.cpp.
+*/
+void replaceWithSpace(QString &str, int idx, int n); // qmlcodeparser.cpp
+
+/*
+ Copied and pasted from
+ src/declarative/qml/qqmlscriptparser.cpp then modified to
+ return a list of removed pragmas.
+
+ Searches for ".pragma <value>" or ".import <stuff>" declarations
+ in \a script. Currently supported pragmas are: library
+*/
+QList<QQmlJS::SourceLocation> QmlCodeMarker::extractPragmas(QString &script)
+{
+ QList<QQmlJS::SourceLocation> removed;
+
+ QQmlJS::Lexer l(nullptr);
+ l.setCode(script, 0);
+
+ int token = l.lex();
+
+ while (true) {
+ if (token != QQmlJSGrammar::T_DOT)
+ break;
+
+ int startOffset = l.tokenOffset();
+ int startLine = l.tokenStartLine();
+ int startColumn = l.tokenStartColumn();
+
+ token = l.lex();
+
+ if (token != QQmlJSGrammar::T_PRAGMA && token != QQmlJSGrammar::T_IMPORT)
+ break;
+ int endOffset = 0;
+ while (startLine == l.tokenStartLine()) {
+ endOffset = l.tokenLength() + l.tokenOffset();
+ token = l.lex();
+ }
+ replaceWithSpace(script, startOffset, endOffset - startOffset);
+ removed.append(QQmlJS::SourceLocation(startOffset, endOffset - startOffset, startLine,
+ startColumn));
+ }
+ return removed;
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/qmlcodemarker.h b/src/qdoc/qdoc/src/qdoc/qmlcodemarker.h
new file mode 100644
index 000000000..64a1f7c9f
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/qmlcodemarker.h
@@ -0,0 +1,38 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef QMLCODEMARKER_H
+#define QMLCODEMARKER_H
+
+#include "cppcodemarker.h"
+
+#include <private/qqmljsastfwd_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QmlCodeMarker : public CppCodeMarker
+{
+public:
+ QmlCodeMarker() = default;
+ ~QmlCodeMarker() override = default;
+
+ bool recognizeCode(const QString &code) override;
+ bool recognizeExtension(const QString &ext) override;
+ bool recognizeLanguage(const QString &language) override;
+ [[nodiscard]] Atom::AtomType atomType() const override;
+ QString markedUpCode(const QString &code, const Node *relative,
+ const Location &location) override;
+
+ QString markedUpName(const Node *node) override;
+ QString markedUpInclude(const QString &include) override;
+
+ /* Copied from src/declarative/qml/qdeclarativescriptparser.cpp */
+ QList<QQmlJS::SourceLocation> extractPragmas(QString &script);
+
+private:
+ QString addMarkUp(const QString &code, const Node *relative, const Location &location);
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/qmlcodeparser.cpp b/src/qdoc/qdoc/src/qdoc/qmlcodeparser.cpp
new file mode 100644
index 000000000..fadd7c307
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/qmlcodeparser.cpp
@@ -0,0 +1,143 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "qmlcodeparser.h"
+
+#include "node.h"
+#include "qmlvisitor.h"
+#include "utilities.h"
+
+#include <private/qqmljsast_p.h>
+
+#include <qdebug.h>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ Returns "QML".
+ */
+QString QmlCodeParser::language()
+{
+ return "QML";
+}
+
+/*!
+ Returns a string list containing "*.qml". This is the only
+ file type parsed by the QMLN parser.
+ */
+QStringList QmlCodeParser::sourceFileNameFilter()
+{
+ return QStringList() << "*.qml";
+}
+
+/*!
+ Parses the source file at \a filePath and inserts the contents
+ into the database. The \a location is used for error reporting.
+
+ If it can't open the file at \a filePath, it reports an error
+ and returns without doing anything.
+ */
+void QmlCodeParser::parseSourceFile(const Location &location, const QString &filePath, CppCodeParser&)
+{
+ static const QSet<QString> topic_commands{
+ COMMAND_VARIABLE, COMMAND_QMLCLASS, COMMAND_QMLTYPE, COMMAND_QMLPROPERTY,
+ COMMAND_QMLPROPERTYGROUP, COMMAND_QMLATTACHEDPROPERTY, COMMAND_QMLSIGNAL,
+ COMMAND_QMLATTACHEDSIGNAL, COMMAND_QMLMETHOD, COMMAND_QMLATTACHEDMETHOD,
+ COMMAND_QMLVALUETYPE, COMMAND_QMLBASICTYPE,
+ };
+
+ QFile in(filePath);
+ if (!in.open(QIODevice::ReadOnly)) {
+ location.error(QStringLiteral("Cannot open QML file '%1'").arg(filePath));
+ return;
+ }
+
+ QString document = in.readAll();
+ in.close();
+
+ QString newCode = document;
+ extractPragmas(newCode);
+
+ QQmlJS::Engine engine{};
+ QQmlJS::Lexer lexer{&engine};
+ lexer.setCode(newCode, 1);
+
+ QQmlJS::Parser parser{&engine};
+
+ if (parser.parse()) {
+ QQmlJS::AST::UiProgram *ast = parser.ast();
+ QmlDocVisitor visitor(filePath, newCode, &engine, topic_commands + CodeParser::common_meta_commands,
+ topic_commands);
+ QQmlJS::AST::Node::accept(ast, &visitor);
+ if (visitor.hasError())
+ Location(filePath).warning("Could not analyze QML file, output is incomplete.");
+ }
+ const auto &messages = parser.diagnosticMessages();
+ for (const auto &msg : messages) {
+ qCDebug(lcQdoc, "%s: %d: %d: QML syntax error: %s", qUtf8Printable(filePath),
+ msg.loc.startLine, msg.loc.startColumn, qUtf8Printable(msg.message));
+ }
+}
+
+/*!
+ Copy and paste from src/declarative/qml/qdeclarativescriptparser.cpp.
+ This function blanks out the section of the \a str beginning at \a idx
+ and running for \a n characters.
+*/
+void replaceWithSpace(QString &str, int idx, int n) // Also used in qmlcodemarker.cpp.
+{
+ QChar *data = str.data() + idx;
+ const QChar space(QLatin1Char(' '));
+ for (int ii = 0; ii < n; ++ii)
+ *data++ = space;
+}
+
+/*!
+ Copy & paste from src/declarative/qml/qdeclarativescriptparser.cpp,
+ then modified to return no values.
+
+ Searches for ".pragma <value>" declarations within \a script.
+ Currently supported pragmas are: library
+*/
+void QmlCodeParser::extractPragmas(QString &script)
+{
+ const QString pragma(QLatin1String("pragma"));
+
+ QQmlJS::Lexer l(nullptr);
+ l.setCode(script, 0);
+
+ int token = l.lex();
+
+ while (true) {
+ if (token != QQmlJSGrammar::T_DOT)
+ return;
+
+ int startOffset = l.tokenOffset();
+ int startLine = l.tokenStartLine();
+
+ token = l.lex();
+
+ if (token != QQmlJSGrammar::T_IDENTIFIER || l.tokenStartLine() != startLine
+ || script.mid(l.tokenOffset(), l.tokenLength()) != pragma)
+ return;
+
+ token = l.lex();
+
+ if (token != QQmlJSGrammar::T_IDENTIFIER || l.tokenStartLine() != startLine)
+ return;
+
+ QString pragmaValue = script.mid(l.tokenOffset(), l.tokenLength());
+ int endOffset = l.tokenLength() + l.tokenOffset();
+
+ token = l.lex();
+ if (l.tokenStartLine() == startLine)
+ return;
+
+ if (pragmaValue == QLatin1String("library"))
+ replaceWithSpace(script, startOffset, endOffset - startOffset);
+ else
+ return;
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/qmlcodeparser.h b/src/qdoc/qdoc/src/qdoc/qmlcodeparser.h
new file mode 100644
index 000000000..dff493be4
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/qmlcodeparser.h
@@ -0,0 +1,38 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef QMLCODEPARSER_H
+#define QMLCODEPARSER_H
+
+#include "codeparser.h"
+
+#include <QtCore/qset.h>
+
+#include <private/qqmljsengine_p.h>
+#include <private/qqmljslexer_p.h>
+#include <private/qqmljsparser_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class Node;
+class QString;
+
+class QmlCodeParser : public CodeParser
+{
+public:
+ QmlCodeParser() = default;
+ ~QmlCodeParser() override = default;
+
+ void initializeParser() override {}
+ void terminateParser() override {}
+ QString language() override;
+ QStringList sourceFileNameFilter() override;
+ void parseSourceFile(const Location &location, const QString &filePath, CppCodeParser&) override;
+
+ /* Copied from src/declarative/qml/qdeclarativescriptparser.cpp */
+ void extractPragmas(QString &script);
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/qmlmarkupvisitor.cpp b/src/qdoc/qdoc/src/qdoc/qmlmarkupvisitor.cpp
new file mode 100644
index 000000000..31adb838d
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/qmlmarkupvisitor.cpp
@@ -0,0 +1,794 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "qmlmarkupvisitor.h"
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qstringlist.h>
+
+#include <private/qqmljsast_p.h>
+#include <private/qqmljsengine_p.h>
+
+QT_BEGIN_NAMESPACE
+
+QmlMarkupVisitor::QmlMarkupVisitor(const QString &source,
+ const QList<QQmlJS::SourceLocation> &pragmas,
+ QQmlJS::Engine *engine)
+{
+ this->m_source = source;
+ this->m_engine = engine;
+
+ m_cursor = 0;
+ m_extraIndex = 0;
+
+ // Merge the lists of locations of pragmas and comments in the source code.
+ int i = 0;
+ int j = 0;
+ const QList<QQmlJS::SourceLocation> comments = engine->comments();
+ while (i < comments.size() && j < pragmas.size()) {
+ if (comments[i].offset < pragmas[j].offset) {
+ m_extraTypes.append(Comment);
+ m_extraLocations.append(comments[i]);
+ ++i;
+ } else {
+ m_extraTypes.append(Pragma);
+ m_extraLocations.append(comments[j]);
+ ++j;
+ }
+ }
+
+ while (i < comments.size()) {
+ m_extraTypes.append(Comment);
+ m_extraLocations.append(comments[i]);
+ ++i;
+ }
+
+ while (j < pragmas.size()) {
+ m_extraTypes.append(Pragma);
+ m_extraLocations.append(pragmas[j]);
+ ++j;
+ }
+}
+
+// The protect() function is a copy of the one from CppCodeMarker.
+
+static const QString samp = QLatin1String("&amp;");
+static const QString slt = QLatin1String("&lt;");
+static const QString sgt = QLatin1String("&gt;");
+static const QString squot = QLatin1String("&quot;");
+
+QString QmlMarkupVisitor::protect(const QString &str)
+{
+ qsizetype n = str.size();
+ QString marked;
+ marked.reserve(n * 2 + 30);
+ const QChar *data = str.constData();
+ for (int i = 0; i != n; ++i) {
+ switch (data[i].unicode()) {
+ case '&':
+ marked += samp;
+ break;
+ case '<':
+ marked += slt;
+ break;
+ case '>':
+ marked += sgt;
+ break;
+ case '"':
+ marked += squot;
+ break;
+ default:
+ marked += data[i];
+ }
+ }
+ return marked;
+}
+
+QString QmlMarkupVisitor::markedUpCode()
+{
+ if (int(m_cursor) < m_source.size())
+ addExtra(m_cursor, m_source.size());
+
+ return m_output;
+}
+
+bool QmlMarkupVisitor::hasError() const
+{
+ return m_hasRecursionDepthError;
+}
+
+void QmlMarkupVisitor::addExtra(quint32 start, quint32 finish)
+{
+ if (m_extraIndex >= m_extraLocations.size()) {
+ QString extra = m_source.mid(start, finish - start);
+ if (extra.trimmed().isEmpty())
+ m_output += extra;
+ else
+ m_output += protect(extra); // text that should probably have been caught by the parser
+
+ m_cursor = finish;
+ return;
+ }
+
+ while (m_extraIndex < m_extraLocations.size()) {
+ if (m_extraTypes[m_extraIndex] == Comment) {
+ if (m_extraLocations[m_extraIndex].offset - 2 >= start)
+ break;
+ } else {
+ if (m_extraLocations[m_extraIndex].offset >= start)
+ break;
+ }
+ m_extraIndex++;
+ }
+
+ quint32 i = start;
+ while (i < finish && m_extraIndex < m_extraLocations.size()) {
+ quint32 j = m_extraLocations[m_extraIndex].offset - 2;
+ if (i <= j && j < finish) {
+ if (i < j)
+ m_output += protect(m_source.mid(i, j - i));
+
+ quint32 l = m_extraLocations[m_extraIndex].length;
+ if (m_extraTypes[m_extraIndex] == Comment) {
+ if (m_source.mid(j, 2) == QLatin1String("/*"))
+ l += 4;
+ else
+ l += 2;
+ m_output += QLatin1String("<@comment>");
+ m_output += protect(m_source.mid(j, l));
+ m_output += QLatin1String("</@comment>");
+ } else
+ m_output += protect(m_source.mid(j, l));
+
+ m_extraIndex++;
+ i = j + l;
+ } else
+ break;
+ }
+
+ QString extra = m_source.mid(i, finish - i);
+ if (extra.trimmed().isEmpty())
+ m_output += extra;
+ else
+ m_output += protect(extra); // text that should probably have been caught by the parser
+
+ m_cursor = finish;
+}
+
+void QmlMarkupVisitor::addMarkedUpToken(QQmlJS::SourceLocation &location,
+ const QString &tagName,
+ const QHash<QString, QString> &attributes)
+{
+ if (!location.isValid())
+ return;
+
+ if (m_cursor < location.offset)
+ addExtra(m_cursor, location.offset);
+ else if (m_cursor > location.offset)
+ return;
+
+ m_output += QString(QLatin1String("<@%1")).arg(tagName);
+ for (const auto &key : attributes)
+ m_output += QString(QLatin1String(" %1=\"%2\"")).arg(key, attributes[key]);
+ m_output += QString(QLatin1String(">%2</@%3>")).arg(protect(sourceText(location)), tagName);
+ m_cursor += location.length;
+}
+
+QString QmlMarkupVisitor::sourceText(QQmlJS::SourceLocation &location)
+{
+ return m_source.mid(location.offset, location.length);
+}
+
+void QmlMarkupVisitor::addVerbatim(QQmlJS::SourceLocation first,
+ QQmlJS::SourceLocation last)
+{
+ if (!first.isValid())
+ return;
+
+ quint32 start = first.begin();
+ quint32 finish;
+ if (last.isValid())
+ finish = last.end();
+ else
+ finish = first.end();
+
+ if (m_cursor < start)
+ addExtra(m_cursor, start);
+ else if (m_cursor > start)
+ return;
+
+ QString text = m_source.mid(start, finish - start);
+ m_output += protect(text);
+ m_cursor = finish;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::UiImport *uiimport)
+{
+ addVerbatim(uiimport->importToken);
+ if (!uiimport->importUri)
+ addMarkedUpToken(uiimport->fileNameToken, QLatin1String("headerfile"));
+ return false;
+}
+
+void QmlMarkupVisitor::endVisit(QQmlJS::AST::UiImport *uiimport)
+{
+ if (uiimport->version)
+ addVerbatim(uiimport->version->firstSourceLocation(),
+ uiimport->version->lastSourceLocation());
+ addVerbatim(uiimport->asToken);
+ addMarkedUpToken(uiimport->importIdToken, QLatin1String("headerfile"));
+ addVerbatim(uiimport->semicolonToken);
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::UiPublicMember *member)
+{
+ if (member->type == QQmlJS::AST::UiPublicMember::Property) {
+ addVerbatim(member->defaultToken());
+ addVerbatim(member->readonlyToken());
+ addVerbatim(member->propertyToken());
+ addVerbatim(member->typeModifierToken);
+ addMarkedUpToken(member->typeToken, QLatin1String("type"));
+ addMarkedUpToken(member->identifierToken, QLatin1String("name"));
+ addVerbatim(member->colonToken);
+ if (member->binding)
+ QQmlJS::AST::Node::accept(member->binding, this);
+ else if (member->statement)
+ QQmlJS::AST::Node::accept(member->statement, this);
+ } else {
+ addVerbatim(member->propertyToken());
+ addVerbatim(member->typeModifierToken);
+ addMarkedUpToken(member->typeToken, QLatin1String("type"));
+ // addVerbatim(member->identifierToken());
+ QQmlJS::AST::Node::accept(member->parameters, this);
+ }
+ addVerbatim(member->semicolonToken);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::UiObjectInitializer *initializer)
+{
+ addVerbatim(initializer->lbraceToken, initializer->lbraceToken);
+ return true;
+}
+
+void QmlMarkupVisitor::endVisit(QQmlJS::AST::UiObjectInitializer *initializer)
+{
+ addVerbatim(initializer->rbraceToken, initializer->rbraceToken);
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::UiObjectBinding *binding)
+{
+ QQmlJS::AST::Node::accept(binding->qualifiedId, this);
+ addVerbatim(binding->colonToken);
+ QQmlJS::AST::Node::accept(binding->qualifiedTypeNameId, this);
+ QQmlJS::AST::Node::accept(binding->initializer, this);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::UiScriptBinding *binding)
+{
+ QQmlJS::AST::Node::accept(binding->qualifiedId, this);
+ addVerbatim(binding->colonToken);
+ QQmlJS::AST::Node::accept(binding->statement, this);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::UiArrayBinding *binding)
+{
+ QQmlJS::AST::Node::accept(binding->qualifiedId, this);
+ addVerbatim(binding->colonToken);
+ addVerbatim(binding->lbracketToken);
+ QQmlJS::AST::Node::accept(binding->members, this);
+ addVerbatim(binding->rbracketToken);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::UiArrayMemberList *list)
+{
+ for (QQmlJS::AST::UiArrayMemberList *it = list; it; it = it->next) {
+ QQmlJS::AST::Node::accept(it->member, this);
+ // addVerbatim(it->commaToken);
+ }
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::UiQualifiedId *id)
+{
+ addMarkedUpToken(id->identifierToken, QLatin1String("name"));
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::ThisExpression *expression)
+{
+ addVerbatim(expression->thisToken);
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::IdentifierExpression *identifier)
+{
+ addMarkedUpToken(identifier->identifierToken, QLatin1String("name"));
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::NullExpression *null)
+{
+ addMarkedUpToken(null->nullToken, QLatin1String("number"));
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::TrueLiteral *literal)
+{
+ addMarkedUpToken(literal->trueToken, QLatin1String("number"));
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::FalseLiteral *literal)
+{
+ addMarkedUpToken(literal->falseToken, QLatin1String("number"));
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::NumericLiteral *literal)
+{
+ addMarkedUpToken(literal->literalToken, QLatin1String("number"));
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::StringLiteral *literal)
+{
+ addMarkedUpToken(literal->literalToken, QLatin1String("string"));
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::RegExpLiteral *literal)
+{
+ addVerbatim(literal->literalToken);
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::ArrayPattern *literal)
+{
+ addVerbatim(literal->lbracketToken);
+ QQmlJS::AST::Node::accept(literal->elements, this);
+ addVerbatim(literal->rbracketToken);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::ObjectPattern *literal)
+{
+ addVerbatim(literal->lbraceToken);
+ return true;
+}
+
+void QmlMarkupVisitor::endVisit(QQmlJS::AST::ObjectPattern *literal)
+{
+ addVerbatim(literal->rbraceToken);
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::PatternElementList *list)
+{
+ for (QQmlJS::AST::PatternElementList *it = list; it; it = it->next) {
+ QQmlJS::AST::Node::accept(it->element, this);
+ // addVerbatim(it->commaToken);
+ }
+ QQmlJS::AST::Node::accept(list->elision, this);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::Elision *elision)
+{
+ addVerbatim(elision->commaToken, elision->commaToken);
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::PatternProperty *list)
+{
+ QQmlJS::AST::Node::accept(list->name, this);
+ addVerbatim(list->colonToken, list->colonToken);
+ QQmlJS::AST::Node::accept(list->initializer, this);
+ // addVerbatim(list->commaToken, list->commaToken);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::ArrayMemberExpression *expression)
+{
+ QQmlJS::AST::Node::accept(expression->base, this);
+ addVerbatim(expression->lbracketToken);
+ QQmlJS::AST::Node::accept(expression->expression, this);
+ addVerbatim(expression->rbracketToken);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::FieldMemberExpression *expression)
+{
+ QQmlJS::AST::Node::accept(expression->base, this);
+ addVerbatim(expression->dotToken);
+ addMarkedUpToken(expression->identifierToken, QLatin1String("name"));
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::NewMemberExpression *expression)
+{
+ addVerbatim(expression->newToken);
+ QQmlJS::AST::Node::accept(expression->base, this);
+ addVerbatim(expression->lparenToken);
+ QQmlJS::AST::Node::accept(expression->arguments, this);
+ addVerbatim(expression->rparenToken);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::NewExpression *expression)
+{
+ addVerbatim(expression->newToken);
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::ArgumentList *list)
+{
+ addVerbatim(list->commaToken, list->commaToken);
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::PostIncrementExpression *expression)
+{
+ addVerbatim(expression->incrementToken);
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::PostDecrementExpression *expression)
+{
+ addVerbatim(expression->decrementToken);
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::DeleteExpression *expression)
+{
+ addVerbatim(expression->deleteToken);
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::VoidExpression *expression)
+{
+ addVerbatim(expression->voidToken);
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::TypeOfExpression *expression)
+{
+ addVerbatim(expression->typeofToken);
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::PreIncrementExpression *expression)
+{
+ addVerbatim(expression->incrementToken);
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::PreDecrementExpression *expression)
+{
+ addVerbatim(expression->decrementToken);
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::UnaryPlusExpression *expression)
+{
+ addVerbatim(expression->plusToken);
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::UnaryMinusExpression *expression)
+{
+ addVerbatim(expression->minusToken);
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::TildeExpression *expression)
+{
+ addVerbatim(expression->tildeToken);
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::NotExpression *expression)
+{
+ addVerbatim(expression->notToken);
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::BinaryExpression *expression)
+{
+ QQmlJS::AST::Node::accept(expression->left, this);
+ addMarkedUpToken(expression->operatorToken, QLatin1String("op"));
+ QQmlJS::AST::Node::accept(expression->right, this);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::ConditionalExpression *expression)
+{
+ QQmlJS::AST::Node::accept(expression->expression, this);
+ addVerbatim(expression->questionToken);
+ QQmlJS::AST::Node::accept(expression->ok, this);
+ addVerbatim(expression->colonToken);
+ QQmlJS::AST::Node::accept(expression->ko, this);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::Expression *expression)
+{
+ QQmlJS::AST::Node::accept(expression->left, this);
+ addVerbatim(expression->commaToken);
+ QQmlJS::AST::Node::accept(expression->right, this);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::Block *block)
+{
+ addVerbatim(block->lbraceToken);
+ return true;
+}
+
+void QmlMarkupVisitor::endVisit(QQmlJS::AST::Block *block)
+{
+ addVerbatim(block->rbraceToken);
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::VariableStatement *statement)
+{
+ addVerbatim(statement->declarationKindToken);
+ QQmlJS::AST::Node::accept(statement->declarations, this);
+ // addVerbatim(statement->semicolonToken);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::VariableDeclarationList *list)
+{
+ for (QQmlJS::AST::VariableDeclarationList *it = list; it; it = it->next) {
+ QQmlJS::AST::Node::accept(it->declaration, this);
+ addVerbatim(it->commaToken);
+ }
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::EmptyStatement *statement)
+{
+ addVerbatim(statement->semicolonToken);
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::ExpressionStatement *statement)
+{
+ QQmlJS::AST::Node::accept(statement->expression, this);
+ addVerbatim(statement->semicolonToken);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::IfStatement *statement)
+{
+ addMarkedUpToken(statement->ifToken, QLatin1String("keyword"));
+ addVerbatim(statement->lparenToken);
+ QQmlJS::AST::Node::accept(statement->expression, this);
+ addVerbatim(statement->rparenToken);
+ QQmlJS::AST::Node::accept(statement->ok, this);
+ if (statement->ko) {
+ addMarkedUpToken(statement->elseToken, QLatin1String("keyword"));
+ QQmlJS::AST::Node::accept(statement->ko, this);
+ }
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::DoWhileStatement *statement)
+{
+ addMarkedUpToken(statement->doToken, QLatin1String("keyword"));
+ QQmlJS::AST::Node::accept(statement->statement, this);
+ addMarkedUpToken(statement->whileToken, QLatin1String("keyword"));
+ addVerbatim(statement->lparenToken);
+ QQmlJS::AST::Node::accept(statement->expression, this);
+ addVerbatim(statement->rparenToken);
+ addVerbatim(statement->semicolonToken);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::WhileStatement *statement)
+{
+ addMarkedUpToken(statement->whileToken, QLatin1String("keyword"));
+ addVerbatim(statement->lparenToken);
+ QQmlJS::AST::Node::accept(statement->expression, this);
+ addVerbatim(statement->rparenToken);
+ QQmlJS::AST::Node::accept(statement->statement, this);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::ForStatement *statement)
+{
+ addMarkedUpToken(statement->forToken, QLatin1String("keyword"));
+ addVerbatim(statement->lparenToken);
+ QQmlJS::AST::Node::accept(statement->initialiser, this);
+ addVerbatim(statement->firstSemicolonToken);
+ QQmlJS::AST::Node::accept(statement->condition, this);
+ addVerbatim(statement->secondSemicolonToken);
+ QQmlJS::AST::Node::accept(statement->expression, this);
+ addVerbatim(statement->rparenToken);
+ QQmlJS::AST::Node::accept(statement->statement, this);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::ForEachStatement *statement)
+{
+ addMarkedUpToken(statement->forToken, QLatin1String("keyword"));
+ addVerbatim(statement->lparenToken);
+ QQmlJS::AST::Node::accept(statement->lhs, this);
+ addVerbatim(statement->inOfToken);
+ QQmlJS::AST::Node::accept(statement->expression, this);
+ addVerbatim(statement->rparenToken);
+ QQmlJS::AST::Node::accept(statement->statement, this);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::ContinueStatement *statement)
+{
+ addMarkedUpToken(statement->continueToken, QLatin1String("keyword"));
+ addMarkedUpToken(statement->identifierToken, QLatin1String("name"));
+ addVerbatim(statement->semicolonToken);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::BreakStatement *statement)
+{
+ addMarkedUpToken(statement->breakToken, QLatin1String("keyword"));
+ addMarkedUpToken(statement->identifierToken, QLatin1String("name"));
+ addVerbatim(statement->semicolonToken);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::ReturnStatement *statement)
+{
+ addMarkedUpToken(statement->returnToken, QLatin1String("keyword"));
+ QQmlJS::AST::Node::accept(statement->expression, this);
+ addVerbatim(statement->semicolonToken);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::WithStatement *statement)
+{
+ addMarkedUpToken(statement->withToken, QLatin1String("keyword"));
+ addVerbatim(statement->lparenToken);
+ QQmlJS::AST::Node::accept(statement->expression, this);
+ addVerbatim(statement->rparenToken);
+ QQmlJS::AST::Node::accept(statement->statement, this);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::CaseBlock *block)
+{
+ addVerbatim(block->lbraceToken);
+ return true;
+}
+
+void QmlMarkupVisitor::endVisit(QQmlJS::AST::CaseBlock *block)
+{
+ addVerbatim(block->rbraceToken, block->rbraceToken);
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::SwitchStatement *statement)
+{
+ addMarkedUpToken(statement->switchToken, QLatin1String("keyword"));
+ addVerbatim(statement->lparenToken);
+ QQmlJS::AST::Node::accept(statement->expression, this);
+ addVerbatim(statement->rparenToken);
+ QQmlJS::AST::Node::accept(statement->block, this);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::CaseClause *clause)
+{
+ addMarkedUpToken(clause->caseToken, QLatin1String("keyword"));
+ QQmlJS::AST::Node::accept(clause->expression, this);
+ addVerbatim(clause->colonToken);
+ QQmlJS::AST::Node::accept(clause->statements, this);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::DefaultClause *clause)
+{
+ addMarkedUpToken(clause->defaultToken, QLatin1String("keyword"));
+ addVerbatim(clause->colonToken, clause->colonToken);
+ return true;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::LabelledStatement *statement)
+{
+ addMarkedUpToken(statement->identifierToken, QLatin1String("name"));
+ addVerbatim(statement->colonToken);
+ QQmlJS::AST::Node::accept(statement->statement, this);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::ThrowStatement *statement)
+{
+ addMarkedUpToken(statement->throwToken, QLatin1String("keyword"));
+ QQmlJS::AST::Node::accept(statement->expression, this);
+ addVerbatim(statement->semicolonToken);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::Catch *c)
+{
+ addMarkedUpToken(c->catchToken, QLatin1String("keyword"));
+ addVerbatim(c->lparenToken);
+ addMarkedUpToken(c->identifierToken, QLatin1String("name"));
+ addVerbatim(c->rparenToken);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::Finally *f)
+{
+ addMarkedUpToken(f->finallyToken, QLatin1String("keyword"));
+ QQmlJS::AST::Node::accept(f->statement, this);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::TryStatement *statement)
+{
+ addMarkedUpToken(statement->tryToken, QLatin1String("keyword"));
+ QQmlJS::AST::Node::accept(statement->statement, this);
+ QQmlJS::AST::Node::accept(statement->catchExpression, this);
+ QQmlJS::AST::Node::accept(statement->finallyExpression, this);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::FunctionExpression *expression)
+{
+ addMarkedUpToken(expression->functionToken, QLatin1String("keyword"));
+ addMarkedUpToken(expression->identifierToken, QLatin1String("name"));
+ addVerbatim(expression->lparenToken);
+ QQmlJS::AST::Node::accept(expression->formals, this);
+ addVerbatim(expression->rparenToken);
+ addVerbatim(expression->lbraceToken);
+ QQmlJS::AST::Node::accept(expression->body, this);
+ addVerbatim(expression->rbraceToken);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::FunctionDeclaration *declaration)
+{
+ addMarkedUpToken(declaration->functionToken, QLatin1String("keyword"));
+ addMarkedUpToken(declaration->identifierToken, QLatin1String("name"));
+ addVerbatim(declaration->lparenToken);
+ QQmlJS::AST::Node::accept(declaration->formals, this);
+ addVerbatim(declaration->rparenToken);
+ addVerbatim(declaration->lbraceToken);
+ QQmlJS::AST::Node::accept(declaration->body, this);
+ addVerbatim(declaration->rbraceToken);
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::FormalParameterList *list)
+{
+ // addVerbatim(list->commaToken);
+ QQmlJS::AST::Node::accept(list->element, this);
+ // addMarkedUpToken(list->identifierToken, QLatin1String("name"));
+ return false;
+}
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::DebuggerStatement *statement)
+{
+ addVerbatim(statement->debuggerToken);
+ addVerbatim(statement->semicolonToken);
+ return true;
+}
+
+// Elements and items are represented by UiObjectDefinition nodes.
+
+bool QmlMarkupVisitor::visit(QQmlJS::AST::UiObjectDefinition *definition)
+{
+ addMarkedUpToken(definition->qualifiedTypeNameId->identifierToken, QLatin1String("type"));
+ QQmlJS::AST::Node::accept(definition->initializer, this);
+ return false;
+}
+
+void QmlMarkupVisitor::throwRecursionDepthError()
+{
+ m_hasRecursionDepthError = true;
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/qmlmarkupvisitor.h b/src/qdoc/qdoc/src/qdoc/qmlmarkupvisitor.h
new file mode 100644
index 000000000..a19636a67
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/qmlmarkupvisitor.h
@@ -0,0 +1,139 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef QMLMARKUPVISITOR_H
+#define QMLMARKUPVISITOR_H
+
+#include "node.h"
+#include "tree.h"
+
+#include <QtCore/qstring.h>
+
+#include <private/qqmljsastvisitor_p.h>
+#include <private/qqmljsengine_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QmlMarkupVisitor : public QQmlJS::AST::Visitor
+{
+public:
+ enum ExtraType { Comment, Pragma };
+
+ QmlMarkupVisitor(const QString &code, const QList<QQmlJS::SourceLocation> &pragmas,
+ QQmlJS::Engine *engine);
+ ~QmlMarkupVisitor() override = default;
+
+ QString markedUpCode();
+ [[nodiscard]] bool hasError() const;
+
+ bool visit(QQmlJS::AST::UiImport *) override;
+ void endVisit(QQmlJS::AST::UiImport *) override;
+
+ bool visit(QQmlJS::AST::UiPublicMember *) override;
+ bool visit(QQmlJS::AST::UiObjectDefinition *) override;
+
+ bool visit(QQmlJS::AST::UiObjectInitializer *) override;
+ void endVisit(QQmlJS::AST::UiObjectInitializer *) override;
+
+ bool visit(QQmlJS::AST::UiObjectBinding *) override;
+ bool visit(QQmlJS::AST::UiScriptBinding *) override;
+ bool visit(QQmlJS::AST::UiArrayBinding *) override;
+ bool visit(QQmlJS::AST::UiArrayMemberList *) override;
+ bool visit(QQmlJS::AST::UiQualifiedId *) override;
+
+ bool visit(QQmlJS::AST::ThisExpression *) override;
+ bool visit(QQmlJS::AST::IdentifierExpression *) override;
+ bool visit(QQmlJS::AST::NullExpression *) override;
+ bool visit(QQmlJS::AST::TrueLiteral *) override;
+ bool visit(QQmlJS::AST::FalseLiteral *) override;
+ bool visit(QQmlJS::AST::NumericLiteral *) override;
+ bool visit(QQmlJS::AST::StringLiteral *) override;
+ bool visit(QQmlJS::AST::RegExpLiteral *) override;
+ bool visit(QQmlJS::AST::ArrayPattern *) override;
+
+ bool visit(QQmlJS::AST::ObjectPattern *) override;
+ void endVisit(QQmlJS::AST::ObjectPattern *) override;
+
+ bool visit(QQmlJS::AST::PatternElementList *) override;
+ bool visit(QQmlJS::AST::Elision *) override;
+ bool visit(QQmlJS::AST::PatternProperty *) override;
+ bool visit(QQmlJS::AST::ArrayMemberExpression *) override;
+ bool visit(QQmlJS::AST::FieldMemberExpression *) override;
+ bool visit(QQmlJS::AST::NewMemberExpression *) override;
+ bool visit(QQmlJS::AST::NewExpression *) override;
+ bool visit(QQmlJS::AST::ArgumentList *) override;
+ bool visit(QQmlJS::AST::PostIncrementExpression *) override;
+ bool visit(QQmlJS::AST::PostDecrementExpression *) override;
+ bool visit(QQmlJS::AST::DeleteExpression *) override;
+ bool visit(QQmlJS::AST::VoidExpression *) override;
+ bool visit(QQmlJS::AST::TypeOfExpression *) override;
+ bool visit(QQmlJS::AST::PreIncrementExpression *) override;
+ bool visit(QQmlJS::AST::PreDecrementExpression *) override;
+ bool visit(QQmlJS::AST::UnaryPlusExpression *) override;
+ bool visit(QQmlJS::AST::UnaryMinusExpression *) override;
+ bool visit(QQmlJS::AST::TildeExpression *) override;
+ bool visit(QQmlJS::AST::NotExpression *) override;
+ bool visit(QQmlJS::AST::BinaryExpression *) override;
+ bool visit(QQmlJS::AST::ConditionalExpression *) override;
+ bool visit(QQmlJS::AST::Expression *) override;
+
+ bool visit(QQmlJS::AST::Block *) override;
+ void endVisit(QQmlJS::AST::Block *) override;
+
+ bool visit(QQmlJS::AST::VariableStatement *) override;
+ bool visit(QQmlJS::AST::VariableDeclarationList *) override;
+ bool visit(QQmlJS::AST::EmptyStatement *) override;
+ bool visit(QQmlJS::AST::ExpressionStatement *) override;
+ bool visit(QQmlJS::AST::IfStatement *) override;
+ bool visit(QQmlJS::AST::DoWhileStatement *) override;
+ bool visit(QQmlJS::AST::WhileStatement *) override;
+ bool visit(QQmlJS::AST::ForStatement *) override;
+ bool visit(QQmlJS::AST::ForEachStatement *) override;
+ bool visit(QQmlJS::AST::ContinueStatement *) override;
+ bool visit(QQmlJS::AST::BreakStatement *) override;
+ bool visit(QQmlJS::AST::ReturnStatement *) override;
+ bool visit(QQmlJS::AST::WithStatement *) override;
+
+ bool visit(QQmlJS::AST::CaseBlock *) override;
+ void endVisit(QQmlJS::AST::CaseBlock *) override;
+
+ bool visit(QQmlJS::AST::SwitchStatement *) override;
+ bool visit(QQmlJS::AST::CaseClause *) override;
+ bool visit(QQmlJS::AST::DefaultClause *) override;
+ bool visit(QQmlJS::AST::LabelledStatement *) override;
+ bool visit(QQmlJS::AST::ThrowStatement *) override;
+ bool visit(QQmlJS::AST::TryStatement *) override;
+ bool visit(QQmlJS::AST::Catch *) override;
+ bool visit(QQmlJS::AST::Finally *) override;
+ bool visit(QQmlJS::AST::FunctionDeclaration *) override;
+ bool visit(QQmlJS::AST::FunctionExpression *) override;
+ bool visit(QQmlJS::AST::FormalParameterList *) override;
+ bool visit(QQmlJS::AST::DebuggerStatement *) override;
+
+protected:
+ QString protect(const QString &string);
+
+private:
+ typedef QHash<QString, QString> StringHash;
+ void addExtra(quint32 start, quint32 finish);
+ void addMarkedUpToken(QQmlJS::SourceLocation &location, const QString &text,
+ const StringHash &attributes = StringHash());
+ void addVerbatim(QQmlJS::SourceLocation first,
+ QQmlJS::SourceLocation last = QQmlJS::SourceLocation());
+ QString sourceText(QQmlJS::SourceLocation &location);
+ void throwRecursionDepthError() final;
+
+ QQmlJS::Engine *m_engine { nullptr };
+ QList<ExtraType> m_extraTypes {};
+ QList<QQmlJS::SourceLocation> m_extraLocations {};
+ QString m_source {};
+ QString m_output {};
+ quint32 m_cursor {};
+ int m_extraIndex {};
+ bool m_hasRecursionDepthError { false };
+};
+Q_DECLARE_TYPEINFO(QmlMarkupVisitor::ExtraType, Q_PRIMITIVE_TYPE);
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/qmlpropertynode.cpp b/src/qdoc/qdoc/src/qdoc/qmlpropertynode.cpp
new file mode 100644
index 000000000..335b7d870
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/qmlpropertynode.cpp
@@ -0,0 +1,175 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "qmlpropertynode.h"
+
+#include "classnode.h"
+#include "propertynode.h"
+#include "enumnode.h"
+
+#include <utility>
+#include "qdocdatabase.h"
+#include "utilities.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ Constructor for the QML property node.
+ */
+QmlPropertyNode::QmlPropertyNode(Aggregate *parent, const QString &name, QString type,
+ bool attached)
+ : Node(QmlProperty, parent, name),
+ m_type(std::move(type)),
+ m_attached(attached)
+{
+ if (m_type == "alias")
+ m_isAlias = true;
+ if (name.startsWith("__"))
+ setStatus(Internal);
+}
+
+/*!
+ \fn bool QmlPropertyNode::isReadOnly() const
+
+ Returns \c true if this QML property node is marked as a
+ read-only property.
+*/
+
+/*!
+ \fn const EnumNode *QmlPropertyNode::enumNode() const
+
+ Returns the node representing the C++ enumeration associated
+ with this property, or \nullptr.
+*/
+
+/*!
+ Returns the prefix to use for documentated enumerators from
+ the associated C++ enum for this property.
+*/
+const QString &QmlPropertyNode::enumPrefix() const
+{
+ return !m_enumNode.second.isEmpty() ?
+ m_enumNode.second : parent()->name();
+}
+
+/*!
+ Locates the node specified by \a path and sets it as the C++ enumeration
+ associated with this property.
+
+ \a registeredQmlName is used as the prefix in the generated enum value
+ documentation.
+
+ \note The target EnumNode is searched under the primary tree only.
+
+ Returns \c true on success.
+*/
+bool QmlPropertyNode::setEnumNode(const QString &path, const QString &registeredQmlName)
+{
+ m_enumNode.first = static_cast<EnumNode*>(
+ QDocDatabase::qdocDB()->primaryTree()->findNodeByNameAndType(path.split("::"), &Node::isEnumType)
+ );
+ m_enumNode.second = registeredQmlName;
+ return m_enumNode.first != nullptr;
+}
+
+/*!
+ Returns \c true if this QML property or attached property is
+ read-only. If the read-only status is not set explicitly
+ using the \\readonly command, QDoc attempts to resolve it
+ from the associated C++ class instantiated by the QML type
+ that this property belongs to.
+
+ \note Depending on how the QML type is implemented, this
+ information may not be available to QDoc. If so, add a debug
+ line but do not treat it as a warning.
+ */
+bool QmlPropertyNode::isReadOnly()
+{
+ if (m_readOnly != FlagValueDefault)
+ return fromFlagValue(m_readOnly, false);
+
+ // Find the parent QML type node
+ auto *parent{this->parent()};
+ while (parent && !(parent->isQmlType()))
+ parent = parent->parent();
+
+ bool readonly{false};
+ if (auto qcn = static_cast<QmlTypeNode *>(parent); qcn && qcn->classNode()) {
+ if (auto propertyNode = findCorrespondingCppProperty(); propertyNode)
+ readonly = !propertyNode->isWritable();
+ else
+ qCDebug(lcQdoc).nospace()
+ << qPrintable(defLocation().toString())
+ << ": Automatic resolution of QML property attributes failed for "
+ << name()
+ << " (Q_PROPERTY not found in the C++ class hierarchy known to QDoc. "
+ << "Likely, the type is replaced with a private implementation.)";
+ }
+ markReadOnly(readonly);
+ return readonly;
+}
+
+/*!
+ Returns \c true if this QML property is marked with \required or the
+ corresponding C++ property uses the REQUIRED keyword.
+*/
+bool QmlPropertyNode::isRequired()
+{
+ if (m_required != FlagValueDefault)
+ return fromFlagValue(m_required, false);
+
+ PropertyNode *pn = findCorrespondingCppProperty();
+ return pn != nullptr && pn->isRequired();
+}
+
+/*!
+ Returns a pointer this QML property's corresponding C++
+ property, if it has one.
+ */
+PropertyNode *QmlPropertyNode::findCorrespondingCppProperty()
+{
+ PropertyNode *pn;
+ Node *n = parent();
+ while (n && !(n->isQmlType()))
+ n = n->parent();
+ if (n) {
+ auto *qcn = static_cast<QmlTypeNode *>(n);
+ ClassNode *cn = qcn->classNode();
+ if (cn) {
+ /*
+ If there is a dot in the property name, first
+ find the C++ property corresponding to the QML
+ property group.
+ */
+ QStringList dotSplit = name().split(QChar('.'));
+ pn = cn->findPropertyNode(dotSplit[0]);
+ if (pn) {
+ /*
+ Now find the C++ property corresponding to
+ the QML property in the QML property group,
+ <group>.<property>.
+ */
+ if (dotSplit.size() > 1) {
+ QStringList path(extractClassName(pn->qualifiedDataType()));
+ Node *nn = QDocDatabase::qdocDB()->findClassNode(path);
+ if (nn) {
+ auto *cn = static_cast<ClassNode *>(nn);
+ PropertyNode *pn2 = cn->findPropertyNode(dotSplit[1]);
+ /*
+ If found, return the C++ property
+ corresponding to the QML property.
+ Otherwise, return the C++ property
+ corresponding to the QML property
+ group.
+ */
+ return (pn2 ? pn2 : pn);
+ }
+ } else
+ return pn;
+ }
+ }
+ }
+ return nullptr;
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/qmlpropertynode.h b/src/qdoc/qdoc/src/qdoc/qmlpropertynode.h
new file mode 100644
index 000000000..f966949c1
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/qmlpropertynode.h
@@ -0,0 +1,72 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef QMLPROPERTYNODE_H
+#define QMLPROPERTYNODE_H
+
+#include "aggregate.h"
+#include "node.h"
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+class QmlPropertyNode : public Node
+{
+public:
+ QmlPropertyNode(Aggregate *parent, const QString &name, QString type, bool attached);
+
+ void setDataType(const QString &dataType) override { m_type = dataType; }
+ void setStored(bool stored) { m_stored = toFlagValue(stored); }
+ void setDefaultValue(const QString &value) { m_defaultValue = value; }
+ void setRequired() { m_required = toFlagValue(true); }
+ bool setEnumNode(const QString &path, const QString &registeredQmlName);
+
+ [[nodiscard]] const QString &dataType() const { return m_type; }
+ [[nodiscard]] const QString &defaultValue() const { return m_defaultValue; }
+ [[nodiscard]] bool isStored() const { return fromFlagValue(m_stored, true); }
+ bool isRequired();
+ [[nodiscard]] bool isDefault() const override { return m_isDefault; }
+ [[nodiscard]] bool isReadOnly() const { return fromFlagValue(m_readOnly, false); }
+ [[nodiscard]] bool isReadOnly();
+ [[nodiscard]] bool isAlias() const override { return m_isAlias; }
+ [[nodiscard]] bool isAttached() const override { return m_attached; }
+ [[nodiscard]] QString qmlTypeName() const override { return parent()->qmlTypeName(); }
+ [[nodiscard]] QString logicalModuleName() const override
+ {
+ return parent()->logicalModuleName();
+ }
+ [[nodiscard]] QString logicalModuleVersion() const override
+ {
+ return parent()->logicalModuleVersion();
+ }
+ [[nodiscard]] QString logicalModuleIdentifier() const override
+ {
+ return parent()->logicalModuleIdentifier();
+ }
+ [[nodiscard]] QString element() const override { return parent()->name(); }
+ [[nodiscard]] const EnumNode *enumNode() const { return m_enumNode.first; }
+ [[nodiscard]] const QString &enumPrefix() const;
+
+ void markDefault() override { m_isDefault = true; }
+ void markReadOnly(bool flag) override { m_readOnly = toFlagValue(flag); }
+
+private:
+ PropertyNode *findCorrespondingCppProperty();
+
+private:
+ QString m_type {};
+ QString m_defaultValue {};
+ FlagValue m_stored { FlagValueDefault };
+ bool m_isAlias { false };
+ bool m_isDefault { false };
+ bool m_attached {};
+ FlagValue m_readOnly { FlagValueDefault };
+ FlagValue m_required { FlagValueDefault };
+ std::pair<EnumNode *, QString> m_enumNode { nullptr, {} };
+};
+
+QT_END_NAMESPACE
+
+#endif // QMLPROPERTYNODE_H
diff --git a/src/qdoc/qdoc/src/qdoc/qmltypenode.cpp b/src/qdoc/qdoc/src/qdoc/qmltypenode.cpp
new file mode 100644
index 000000000..4285f9b6e
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/qmltypenode.cpp
@@ -0,0 +1,153 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "qmltypenode.h"
+#include "collectionnode.h"
+#include "qdocdatabase.h"
+
+#include <QtCore/qdebug.h>
+
+QT_BEGIN_NAMESPACE
+
+QMultiMap<const Node *, Node *> QmlTypeNode::s_inheritedBy;
+
+/*!
+ Constructs a Qml type.
+
+ The new node has the given \a parent, name \a name, and a specific node
+ \a type. Valid types are Node::QmlType and Node::QmlValueType.
+ */
+QmlTypeNode::QmlTypeNode(Aggregate *parent, const QString &name, Node::NodeType type)
+ : Aggregate(type, parent, name)
+{
+ Q_ASSERT(type == Node::QmlType || type == Node::QmlValueType);
+ setTitle(name);
+}
+
+/*!
+ Clear the static maps so that subsequent runs don't try to use
+ contents from a previous run.
+ */
+void QmlTypeNode::terminate()
+{
+ s_inheritedBy.clear();
+}
+
+/*!
+ Record the fact that QML class \a base is inherited by
+ QML class \a sub.
+ */
+void QmlTypeNode::addInheritedBy(const Node *base, Node *sub)
+{
+ if (sub->isInternal())
+ return;
+ if (!s_inheritedBy.contains(base, sub))
+ s_inheritedBy.insert(base, sub);
+}
+
+/*!
+ Loads the list \a subs with the nodes of all the subclasses of \a base.
+ */
+void QmlTypeNode::subclasses(const Node *base, NodeList &subs)
+{
+ subs.clear();
+ if (s_inheritedBy.count(base) > 0) {
+ subs = s_inheritedBy.values(base);
+ }
+}
+
+/*!
+ If this QML type node has a base type node,
+ return the fully qualified name of that QML
+ type, i.e. <QML-module-name>::<QML-type-name>.
+ */
+QString QmlTypeNode::qmlFullBaseName() const
+{
+ QString result;
+ if (m_qmlBaseNode) {
+ result = m_qmlBaseNode->logicalModuleName() + "::" + m_qmlBaseNode->name();
+ }
+ return result;
+}
+
+/*!
+ If the QML type's QML module pointer is set, return the QML
+ module name from the QML module node. Otherwise, return the
+ empty string.
+ */
+QString QmlTypeNode::logicalModuleName() const
+{
+ return (m_logicalModule ? m_logicalModule->logicalModuleName() : QString());
+}
+
+/*!
+ If the QML type's QML module pointer is set, return the QML
+ module version from the QML module node. Otherwise, return
+ the empty string.
+ */
+QString QmlTypeNode::logicalModuleVersion() const
+{
+ return (m_logicalModule ? m_logicalModule->logicalModuleVersion() : QString());
+}
+
+/*!
+ If the QML type's QML module pointer is set, return the QML
+ module identifier from the QML module node. Otherwise, return
+ the empty string.
+ */
+QString QmlTypeNode::logicalModuleIdentifier() const
+{
+ return (m_logicalModule ? m_logicalModule->logicalModuleIdentifier() : QString());
+}
+
+/*!
+ Returns true if this QML type inherits \a type.
+ */
+bool QmlTypeNode::inherits(Aggregate *type)
+{
+ QmlTypeNode *qtn = qmlBaseNode();
+ while (qtn != nullptr) {
+ if (qtn == type)
+ return true;
+ qtn = qtn->qmlBaseNode();
+ }
+ return false;
+}
+
+/*!
+ Recursively resolves the base node for this QML type when only the name of
+ the base type is known.
+
+ \a previousSearches is used for speeding up the process.
+*/
+void QmlTypeNode::resolveInheritance(NodeMap &previousSearches)
+{
+ if (m_qmlBaseNode || m_qmlBaseName.isEmpty())
+ return;
+
+ auto *base = static_cast<QmlTypeNode *>(previousSearches.value(m_qmlBaseName));
+ if (!previousSearches.contains(m_qmlBaseName)) {
+ for (const auto &imp : std::as_const(m_importList)) {
+ base = QDocDatabase::qdocDB()->findQmlType(imp, m_qmlBaseName);
+ if (base)
+ break;
+ }
+ if (!base) {
+ if (m_qmlBaseName.contains(':'))
+ base = QDocDatabase::qdocDB()->findQmlType(m_qmlBaseName);
+ else
+ base = QDocDatabase::qdocDB()->findQmlType(QString(), m_qmlBaseName);
+ }
+ previousSearches.insert(m_qmlBaseName, base);
+ }
+
+ if (base && base != this) {
+ m_qmlBaseNode = base;
+ QmlTypeNode::addInheritedBy(base, this);
+ // Base types read from the index need resolving as they only have the name set
+ if (base->isIndexNode())
+ base->resolveInheritance(previousSearches);
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/qmltypenode.h b/src/qdoc/qdoc/src/qdoc/qmltypenode.h
new file mode 100644
index 000000000..d7cd5ff2b
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/qmltypenode.h
@@ -0,0 +1,65 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef QMLTYPENODE_H
+#define QMLTYPENODE_H
+
+#include "importrec.h"
+#include "aggregate.h"
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qlist.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+class ClassNode;
+class CollectionNode;
+
+typedef QList<ImportRec> ImportList;
+
+class QmlTypeNode : public Aggregate
+{
+public:
+ QmlTypeNode(Aggregate *parent, const QString &name, Node::NodeType type);
+ [[nodiscard]] bool isFirstClassAggregate() const override { return true; }
+ ClassNode *classNode() override { return m_classNode; }
+ void setClassNode(ClassNode *cn) override { m_classNode = cn; }
+ [[nodiscard]] bool isAbstract() const override { return m_abstract; }
+ [[nodiscard]] bool isWrapper() const override { return m_wrapper; }
+ void setAbstract(bool b) override { m_abstract = b; }
+ void setWrapper() override { m_wrapper = true; }
+ [[nodiscard]] bool isInternal() const override { return (status() == Internal); }
+ [[nodiscard]] QString qmlFullBaseName() const override;
+ [[nodiscard]] QString logicalModuleName() const override;
+ [[nodiscard]] QString logicalModuleVersion() const override;
+ [[nodiscard]] QString logicalModuleIdentifier() const override;
+ [[nodiscard]] CollectionNode *logicalModule() const override { return m_logicalModule; }
+ void setQmlModule(CollectionNode *t) override { m_logicalModule = t; }
+
+ void setImportList(const ImportList &il) { m_importList = il; }
+ [[nodiscard]] const QString &qmlBaseName() const { return m_qmlBaseName; }
+ void setQmlBaseName(const QString &name) { m_qmlBaseName = name; }
+ [[nodiscard]] QmlTypeNode *qmlBaseNode() const override { return m_qmlBaseNode; }
+ void resolveInheritance(NodeMap &previousSearches);
+ static void addInheritedBy(const Node *base, Node *sub);
+ static void subclasses(const Node *base, NodeList &subs);
+ static void terminate();
+ bool inherits(Aggregate *type);
+
+public:
+ static QMultiMap<const Node *, Node *> s_inheritedBy;
+
+private:
+ bool m_abstract { false };
+ bool m_wrapper { false };
+ ClassNode *m_classNode { nullptr };
+ QString m_qmlBaseName {};
+ CollectionNode *m_logicalModule { nullptr };
+ QmlTypeNode *m_qmlBaseNode { nullptr };
+ ImportList m_importList {};
+};
+
+QT_END_NAMESPACE
+
+#endif // QMLTYPENODE_H
diff --git a/src/qdoc/qdoc/src/qdoc/qmlvisitor.cpp b/src/qdoc/qdoc/src/qdoc/qmlvisitor.cpp
new file mode 100644
index 000000000..d6ecf1986
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/qmlvisitor.cpp
@@ -0,0 +1,729 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "qmlvisitor.h"
+
+#include "aggregate.h"
+#include "codechunk.h"
+#include "codeparser.h"
+#include "functionnode.h"
+#include "node.h"
+#include "qdocdatabase.h"
+#include "qmlpropertynode.h"
+#include "tokenizer.h"
+#include "utilities.h"
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qfileinfo.h>
+#include <QtCore/qglobal.h>
+
+#include <private/qqmljsast_p.h>
+#include <private/qqmljsengine_p.h>
+
+QT_BEGIN_NAMESPACE
+
+using namespace Qt::StringLiterals;
+
+/*!
+ The constructor stores all the parameters in local data members.
+ */
+QmlDocVisitor::QmlDocVisitor(const QString &filePath, const QString &code, QQmlJS::Engine *engine,
+ const QSet<QString> &commands, const QSet<QString> &topics)
+ : m_nestingLevel(0)
+{
+ m_lastEndOffset = 0;
+ this->m_filePath = filePath;
+ this->m_name = QFileInfo(filePath).baseName();
+ m_document = code;
+ this->m_engine = engine;
+ this->m_commands = commands;
+ this->m_topics = topics;
+ m_current = QDocDatabase::qdocDB()->primaryTreeRoot();
+}
+
+/*!
+ Returns the location of the nearest comment above the \a offset.
+ */
+QQmlJS::SourceLocation QmlDocVisitor::precedingComment(quint32 offset) const
+{
+ const auto comments = m_engine->comments();
+ for (auto it = comments.rbegin(); it != comments.rend(); ++it) {
+ QQmlJS::SourceLocation loc = *it;
+
+ if (loc.begin() <= m_lastEndOffset) {
+ // Return if we reach the end of the preceding structure.
+ break;
+ } else if (m_usedComments.contains(loc.begin())) {
+ // Return if we encounter a previously used comment.
+ break;
+ } else if (loc.begin() > m_lastEndOffset && loc.end() < offset) {
+ // Only examine multiline comments in order to avoid snippet markers.
+ if (m_document.at(loc.offset - 1) == QLatin1Char('*')) {
+ QString comment = m_document.mid(loc.offset, loc.length);
+ if (comment.startsWith(QLatin1Char('!')) || comment.startsWith(QLatin1Char('*'))) {
+ return loc;
+ }
+ }
+ }
+ }
+
+ return QQmlJS::SourceLocation();
+}
+
+class QmlSignatureParser
+{
+public:
+ QmlSignatureParser(FunctionNode *func, const QString &signature, const Location &loc);
+ void readToken() { tok_ = tokenizer_->getToken(); }
+ QString lexeme() { return tokenizer_->lexeme(); }
+ QString previousLexeme() { return tokenizer_->previousLexeme(); }
+
+ bool match(int target);
+ bool matchTypeAndName(CodeChunk *type, QString *var);
+ bool matchParameter();
+ bool matchFunctionDecl();
+
+private:
+ QString signature_;
+ QStringList names_;
+ Tokenizer *tokenizer_;
+ int tok_;
+ FunctionNode *func_;
+ const Location &location_;
+};
+
+/*!
+ Finds the nearest unused qdoc comment above the QML entity
+ represented by a \a node and processes the qdoc commands
+ in that comment. The processed documentation is stored in
+ \a node.
+
+ If \a node is a \c nullptr and there is a valid comment block,
+ the QML module identifier (\inqmlmodule argument) is used
+ for searching an existing QML type node. If an existing node
+ is not found, constructs a new QmlTypeNode instance.
+
+ Returns a pointer to the QmlTypeNode instance if one was
+ found or constructed. Otherwise, returns a pointer to the \a
+ node that was passed as an argument.
+ */
+Node *QmlDocVisitor::applyDocumentation(QQmlJS::SourceLocation location, Node *node)
+{
+ QQmlJS::SourceLocation loc = precedingComment(location.begin());
+ Location comment_loc(m_filePath);
+
+ // No preceding comment; construct a new QML type if
+ // needed.
+ if (!loc.isValid()) {
+ if (!node)
+ node = new QmlTypeNode(m_current, m_name, Node::QmlType);
+ comment_loc.setLineNo(location.startLine);
+ node->setLocation(comment_loc);
+ return node;
+ }
+
+ QString source = m_document.mid(loc.offset + 1, loc.length - 1);
+ comment_loc.setLineNo(loc.startLine);
+ comment_loc.setColumnNo(loc.startColumn);
+
+ Doc doc(comment_loc, comment_loc, source, m_commands, m_topics);
+ const TopicList &topicsUsed = doc.topicsUsed();
+ NodeList nodes;
+ if (!node) {
+ QString qmid;
+ if (auto args = doc.metaCommandArgs(COMMAND_INQMLMODULE); !args.isEmpty())
+ qmid = args.first().first;
+ node = QDocDatabase::qdocDB()->findQmlTypeInPrimaryTree(qmid, m_name);
+ if (!node) {
+ node = new QmlTypeNode(m_current, m_name, Node::QmlType);
+ node->setLocation(comment_loc);
+ }
+ }
+
+ auto *parent{node->parent()};
+ node->setDoc(doc);
+ nodes.append(node);
+ if (!topicsUsed.empty()) {
+ for (int i = 0; i < topicsUsed.size(); ++i) {
+ QString topic = topicsUsed.at(i).m_topic;
+ QString args = topicsUsed.at(i).m_args;
+ if (topic.endsWith(QLatin1String("property"))) {
+ auto *qmlProperty = static_cast<QmlPropertyNode *>(node);
+ QmlPropArgs qpa;
+ if (splitQmlPropertyArg(doc, args, qpa)) {
+ if (qpa.m_name == node->name()) {
+ if (qmlProperty->isAlias())
+ qmlProperty->setDataType(qpa.m_type);
+ } else {
+ bool isAttached = topic.contains(QLatin1String("attached"));
+ QmlPropertyNode *n = parent->hasQmlProperty(qpa.m_name, isAttached);
+ if (n == nullptr)
+ n = new QmlPropertyNode(parent, qpa.m_name, qpa.m_type, isAttached);
+ n->setLocation(doc.location());
+ n->setDoc(doc);
+ // Use the const-overload of QmlPropertyNode::isReadOnly() as there's
+ // no associated C++ property to resolve the read-only status from
+ n->markReadOnly(const_cast<const QmlPropertyNode *>(qmlProperty)->isReadOnly()
+ && !isAttached);
+ if (qmlProperty->isDefault())
+ n->markDefault();
+ nodes.append(n);
+ }
+ } else
+ qCDebug(lcQdoc) << "Failed to parse QML property:" << topic << args;
+ } else if (topic.endsWith(QLatin1String("method")) || topic == COMMAND_QMLSIGNAL) {
+ if (node->isFunction()) {
+ auto *fn = static_cast<FunctionNode *>(node);
+ QmlSignatureParser qsp(fn, args, doc.location());
+ }
+ }
+ }
+ }
+ for (const auto &node : nodes)
+ applyMetacommands(loc, node, doc);
+
+ m_usedComments.insert(loc.offset);
+ return node;
+}
+
+QmlSignatureParser::QmlSignatureParser(FunctionNode *func, const QString &signature,
+ const Location &loc)
+ : signature_(signature), func_(func), location_(loc)
+{
+ QByteArray latin1 = signature.toLatin1();
+ Tokenizer stringTokenizer(location_, latin1);
+ stringTokenizer.setParsingFnOrMacro(true);
+ tokenizer_ = &stringTokenizer;
+ readToken();
+ matchFunctionDecl();
+}
+
+/*!
+ If the current token matches \a target, read the next
+ token and return true. Otherwise, don't read the next
+ token, and return false.
+ */
+bool QmlSignatureParser::match(int target)
+{
+ if (tok_ == target) {
+ readToken();
+ return true;
+ }
+ return false;
+}
+
+/*!
+ Parse a QML data type into \a type and an optional
+ variable name into \a var.
+ */
+bool QmlSignatureParser::matchTypeAndName(CodeChunk *type, QString *var)
+{
+ /*
+ This code is really hard to follow... sorry. The loop is there to match
+ Alpha::Beta::Gamma::...::Omega.
+ */
+ for (;;) {
+ bool virgin = true;
+
+ if (tok_ != Tok_Ident) {
+ while (match(Tok_signed) || match(Tok_unsigned) || match(Tok_short) || match(Tok_long)
+ || match(Tok_int64)) {
+ type->append(previousLexeme());
+ virgin = false;
+ }
+ }
+
+ if (virgin) {
+ if (match(Tok_Ident)) {
+ type->append(previousLexeme());
+ } else if (match(Tok_void) || match(Tok_int) || match(Tok_char) || match(Tok_double)
+ || match(Tok_Ellipsis))
+ type->append(previousLexeme());
+ else
+ return false;
+ } else if (match(Tok_int) || match(Tok_char) || match(Tok_double)) {
+ type->append(previousLexeme());
+ }
+
+ if (match(Tok_Gulbrandsen))
+ type->append(previousLexeme());
+ else
+ break;
+ }
+
+ while (match(Tok_Ampersand) || match(Tok_Aster) || match(Tok_const) || match(Tok_Caret))
+ type->append(previousLexeme());
+
+ /*
+ The usual case: Look for an optional identifier, then for
+ some array brackets.
+ */
+ type->appendHotspot();
+
+ if ((var != nullptr) && match(Tok_Ident))
+ *var = previousLexeme();
+
+ if (tok_ == Tok_LeftBracket) {
+ int bracketDepth0 = tokenizer_->bracketDepth();
+ while ((tokenizer_->bracketDepth() >= bracketDepth0 && tok_ != Tok_Eoi)
+ || tok_ == Tok_RightBracket) {
+ type->append(lexeme());
+ readToken();
+ }
+ }
+ return true;
+}
+
+bool QmlSignatureParser::matchParameter()
+{
+ QString name;
+ CodeChunk type;
+ CodeChunk defaultValue;
+
+ bool result = matchTypeAndName(&type, &name);
+ if (name.isEmpty()) {
+ name = type.toString();
+ type.clear();
+ }
+
+ if (!result)
+ return false;
+ if (match(Tok_Equal)) {
+ int parenDepth0 = tokenizer_->parenDepth();
+ while (tokenizer_->parenDepth() >= parenDepth0
+ && (tok_ != Tok_Comma || tokenizer_->parenDepth() > parenDepth0)
+ && tok_ != Tok_Eoi) {
+ defaultValue.append(lexeme());
+ readToken();
+ }
+ }
+ func_->parameters().append(type.toString(), name, defaultValue.toString());
+ return true;
+}
+
+bool QmlSignatureParser::matchFunctionDecl()
+{
+ CodeChunk returnType;
+
+ qsizetype firstBlank = signature_.indexOf(QChar(' '));
+ qsizetype leftParen = signature_.indexOf(QChar('('));
+ if ((firstBlank > 0) && (leftParen - firstBlank) > 1) {
+ if (!matchTypeAndName(&returnType, nullptr))
+ return false;
+ }
+
+ while (match(Tok_Ident)) {
+ names_.append(previousLexeme());
+ if (!match(Tok_Gulbrandsen)) {
+ previousLexeme();
+ names_.pop_back();
+ break;
+ }
+ }
+
+ if (tok_ != Tok_LeftParen)
+ return false;
+ /*
+ Parsing the parameters should be moved into class Parameters,
+ but it can wait. mws 14/12/2018
+ */
+ readToken();
+
+ func_->setLocation(location_);
+ func_->setReturnType(returnType.toString());
+
+ if (tok_ != Tok_RightParen) {
+ func_->parameters().clear();
+ do {
+ if (!matchParameter())
+ return false;
+ } while (match(Tok_Comma));
+ }
+ if (!match(Tok_RightParen))
+ return false;
+ return true;
+}
+
+/*!
+ A QML property argument has the form...
+
+ <type> <component>::<name>
+ <type> <QML-module>::<component>::<name>
+
+ This function splits the argument into one of those
+ two forms. The three part form is the old form, which
+ was used before the creation of QtQuick 2 and Qt
+ Components. A <QML-module> is the QML equivalent of a
+ C++ namespace. So this function splits \a arg on "::"
+ and stores the parts in the \e {type}, \e {module},
+ \e {component}, and \a {name}, fields of \a qpa. If it
+ is successful, it returns \c true. If not enough parts
+ are found, a qdoc warning is emitted and false is
+ returned.
+ */
+bool QmlDocVisitor::splitQmlPropertyArg(const Doc &doc, const QString &arg, QmlPropArgs &qpa)
+{
+ qpa.clear();
+ QStringList blankSplit = arg.split(QLatin1Char(' '));
+ if (blankSplit.size() > 1) {
+ qpa.m_type = blankSplit[0];
+ QStringList colonSplit(blankSplit[1].split("::"));
+ if (colonSplit.size() == 3) {
+ qpa.m_module = colonSplit[0];
+ qpa.m_component = colonSplit[1];
+ qpa.m_name = colonSplit[2];
+ return true;
+ } else if (colonSplit.size() == 2) {
+ qpa.m_component = colonSplit[0];
+ qpa.m_name = colonSplit[1];
+ return true;
+ } else if (colonSplit.size() == 1) {
+ qpa.m_name = colonSplit[0];
+ return true;
+ }
+ doc.location().warning(
+ QStringLiteral("Unrecognizable QML module/component qualifier for %1.").arg(arg));
+ } else {
+ doc.location().warning(QStringLiteral("Missing property type for %1.").arg(arg));
+ }
+ return false;
+}
+
+/*!
+ Applies the metacommands found in the comment.
+ */
+void QmlDocVisitor::applyMetacommands(QQmlJS::SourceLocation, Node *node, Doc &doc)
+{
+ QDocDatabase *qdb = QDocDatabase::qdocDB();
+ QSet<QString> metacommands = doc.metaCommandsUsed();
+ if (metacommands.size() > 0) {
+ metacommands.subtract(m_topics);
+ for (const auto &command : std::as_const(metacommands)) {
+ const ArgList args = doc.metaCommandArgs(command);
+ if ((command == COMMAND_QMLABSTRACT) || (command == COMMAND_ABSTRACT)) {
+ if (node->isQmlType()) {
+ node->setAbstract(true);
+ }
+ } else if (command == COMMAND_DEPRECATED) {
+ node->setDeprecated(args[0].second);
+ } else if (command == COMMAND_INQMLMODULE) {
+ qdb->addToQmlModule(args[0].first, node);
+ } else if (command == COMMAND_QMLINHERITS) {
+ if (node->name() == args[0].first)
+ doc.location().warning(
+ QStringLiteral("%1 tries to inherit itself").arg(args[0].first));
+ else if (node->isQmlType()) {
+ auto *qmlType = static_cast<QmlTypeNode *>(node);
+ qmlType->setQmlBaseName(args[0].first);
+ }
+ } else if (command == COMMAND_DEFAULT) {
+ if (!node->isQmlProperty()) {
+ doc.location().warning(QStringLiteral("Ignored '\\%1', applies only to '\\%2'")
+ .arg(command, COMMAND_QMLPROPERTY));
+ } else if (args.isEmpty() || args[0].first.isEmpty()) {
+ doc.location().warning(QStringLiteral("Expected an argument for '\\%1' (maybe you meant '\\%2'?)")
+ .arg(command, COMMAND_QMLDEFAULT));
+ } else {
+ static_cast<QmlPropertyNode *>(node)->setDefaultValue(args[0].first);
+ }
+ } else if (command == COMMAND_QMLDEFAULT) {
+ node->markDefault();
+ } else if (command == COMMAND_QMLENUMERATORSFROM) {
+ if (!node->isQmlProperty()) {
+ doc.location().warning("Ignored '\\%1', applies only to '\\%2'"_L1
+ .arg(command, COMMAND_QMLPROPERTY));
+ } else if (!static_cast<QmlPropertyNode*>(node)->setEnumNode(args[0].first, args[0].second)) {
+ doc.location().warning("Failed to find C++ enumeration '%2' passed to \\%1"_L1
+ .arg(command, args[0].first), "Use \\value commands instead"_L1);
+ }
+ } else if (command == COMMAND_QMLREADONLY) {
+ node->markReadOnly(1);
+ } else if (command == COMMAND_QMLREQUIRED) {
+ if (node->isQmlProperty())
+ static_cast<QmlPropertyNode *>(node)->setRequired();
+ } else if ((command == COMMAND_INGROUP) && !args.isEmpty()) {
+ for (const auto &argument : args)
+ QDocDatabase::qdocDB()->addToGroup(argument.first, node);
+ } else if (command == COMMAND_INTERNAL) {
+ node->setStatus(Node::Internal);
+ } else if (command == COMMAND_OBSOLETE) {
+ node->setStatus(Node::Deprecated);
+ } else if (command == COMMAND_PRELIMINARY) {
+ node->setStatus(Node::Preliminary);
+ } else if (command == COMMAND_SINCE) {
+ QString arg = args[0].first; //.join(' ');
+ node->setSince(arg);
+ } else if (command == COMMAND_WRAPPER) {
+ node->setWrapper();
+ } else {
+ doc.location().warning(
+ QStringLiteral("The \\%1 command is ignored in QML files").arg(command));
+ }
+ }
+ }
+}
+
+/*!
+ Reconstruct the qualified \a id using dot notation
+ and return the fully qualified string.
+ */
+QString QmlDocVisitor::getFullyQualifiedId(QQmlJS::AST::UiQualifiedId *id)
+{
+ QString result;
+ if (id) {
+ result = id->name.toString();
+ id = id->next;
+ while (id != nullptr) {
+ result += QChar('.') + id->name.toString();
+ id = id->next;
+ }
+ }
+ return result;
+}
+
+/*!
+ Begin the visit of the object \a definition, recording it in the
+ qdoc database. Increment the object nesting level, which is used
+ to test whether we are at the public API level. The public level
+ is level 1.
+
+ Defers the construction of a QmlTypeNode instance to
+ applyDocumentation(), by passing \c nullptr as the second
+ argument.
+ */
+bool QmlDocVisitor::visit(QQmlJS::AST::UiObjectDefinition *definition)
+{
+ QString type = getFullyQualifiedId(definition->qualifiedTypeNameId);
+ m_nestingLevel++;
+ if (m_current->isNamespace()) {
+ auto component = applyDocumentation(definition->firstSourceLocation(), nullptr);
+ Q_ASSERT(component);
+ auto *qmlTypeNode = static_cast<QmlTypeNode *>(component);
+ if (!component->doc().isEmpty())
+ qmlTypeNode->setQmlBaseName(type);
+ qmlTypeNode->setTitle(m_name);
+ qmlTypeNode->setImportList(m_importList);
+ m_importList.clear();
+ m_current = qmlTypeNode;
+ }
+
+ return true;
+}
+
+/*!
+ End the visit of the object \a definition. In particular,
+ decrement the object nesting level, which is used to test
+ whether we are at the public API level. The public API
+ level is level 1. It won't decrement below 0.
+ */
+void QmlDocVisitor::endVisit(QQmlJS::AST::UiObjectDefinition *definition)
+{
+ if (m_nestingLevel > 0) {
+ --m_nestingLevel;
+ }
+ m_lastEndOffset = definition->lastSourceLocation().end();
+}
+
+bool QmlDocVisitor::visit(QQmlJS::AST::UiImport *import)
+{
+ QString name = m_document.mid(import->fileNameToken.offset, import->fileNameToken.length);
+ if (name[0] == '\"')
+ name = name.mid(1, name.size() - 2);
+ QString version;
+ if (import->version) {
+ const auto start = import->version->firstSourceLocation().begin();
+ const auto end = import->version->lastSourceLocation().end();
+ version = m_document.mid(start, end - start);
+ }
+ QString importUri = getFullyQualifiedId(import->importUri);
+ m_importList.append(ImportRec(name, version, importUri));
+
+ return true;
+}
+
+void QmlDocVisitor::endVisit(QQmlJS::AST::UiImport *definition)
+{
+ m_lastEndOffset = definition->lastSourceLocation().end();
+}
+
+bool QmlDocVisitor::visit(QQmlJS::AST::UiObjectBinding *)
+{
+ ++m_nestingLevel;
+ return true;
+}
+
+void QmlDocVisitor::endVisit(QQmlJS::AST::UiObjectBinding *)
+{
+ --m_nestingLevel;
+}
+
+bool QmlDocVisitor::visit(QQmlJS::AST::UiArrayBinding *)
+{
+ return true;
+}
+
+void QmlDocVisitor::endVisit(QQmlJS::AST::UiArrayBinding *) {}
+
+static QString qualifiedIdToString(QQmlJS::AST::UiQualifiedId *node)
+{
+ QString s;
+
+ for (QQmlJS::AST::UiQualifiedId *it = node; it; it = it->next) {
+ s.append(it->name);
+
+ if (it->next)
+ s.append(QLatin1Char('.'));
+ }
+
+ return s;
+}
+
+/*!
+ Visits the public \a member declaration, which can be a
+ signal or a property. It is a custom signal or property.
+ Only visit the \a member if the nestingLevel is 1.
+ */
+bool QmlDocVisitor::visit(QQmlJS::AST::UiPublicMember *member)
+{
+ if (m_nestingLevel > 1) {
+ return true;
+ }
+ switch (member->type) {
+ case QQmlJS::AST::UiPublicMember::Signal: {
+ if (m_current->isQmlType()) {
+ auto *qmlType = static_cast<QmlTypeNode *>(m_current);
+ if (qmlType) {
+ FunctionNode::Metaness metaness = FunctionNode::QmlSignal;
+ QString name = member->name.toString();
+ auto *newSignal = new FunctionNode(metaness, m_current, name);
+ Parameters &parameters = newSignal->parameters();
+ for (QQmlJS::AST::UiParameterList *it = member->parameters; it; it = it->next) {
+ const QString type = it->type ? it->type->toString() : QString();
+ if (!type.isEmpty() && !it->name.isEmpty())
+ parameters.append(type, it->name.toString());
+ }
+ applyDocumentation(member->firstSourceLocation(), newSignal);
+ }
+ }
+ break;
+ }
+ case QQmlJS::AST::UiPublicMember::Property: {
+ QString type = qualifiedIdToString(member->memberType);
+ if (m_current->isQmlType()) {
+ auto *qmlType = static_cast<QmlTypeNode *>(m_current);
+ if (qmlType) {
+ QString name = member->name.toString();
+ QmlPropertyNode *qmlPropNode = qmlType->hasQmlProperty(name);
+ if (qmlPropNode == nullptr)
+ qmlPropNode = new QmlPropertyNode(qmlType, name, type, false);
+ qmlPropNode->markReadOnly(member->isReadonly());
+ if (member->isDefaultMember())
+ qmlPropNode->markDefault();
+ if (member->requiredToken().isValid())
+ qmlPropNode->setRequired();
+ applyDocumentation(member->firstSourceLocation(), qmlPropNode);
+ }
+ }
+ break;
+ }
+ default:
+ return false;
+ }
+
+ return true;
+}
+
+/*!
+ End the visit of the \a member.
+ */
+void QmlDocVisitor::endVisit(QQmlJS::AST::UiPublicMember *member)
+{
+ m_lastEndOffset = member->lastSourceLocation().end();
+}
+
+bool QmlDocVisitor::visit(QQmlJS::AST::IdentifierPropertyName *)
+{
+ return true;
+}
+
+/*!
+ Begin the visit of the function declaration \a fd, but only
+ if the nesting level is 1.
+ */
+bool QmlDocVisitor::visit(QQmlJS::AST::FunctionDeclaration *fd)
+{
+ if (m_nestingLevel <= 1) {
+ FunctionNode::Metaness metaness = FunctionNode::QmlMethod;
+ if (!m_current->isQmlType())
+ return true;
+ QString name = fd->name.toString();
+ auto *method = new FunctionNode(metaness, m_current, name);
+ Parameters &parameters = method->parameters();
+ QQmlJS::AST::FormalParameterList *formals = fd->formals;
+ if (formals) {
+ QQmlJS::AST::FormalParameterList *fp = formals;
+ do {
+ QString defaultValue;
+ auto initializer = fp->element->initializer;
+ if (initializer) {
+ auto loc = initializer->firstSourceLocation();
+ defaultValue = m_document.mid(loc.begin(), loc.length);
+ }
+ parameters.append(QString(), fp->element->bindingIdentifier.toString(),
+ defaultValue);
+ fp = fp->next;
+ } while (fp && fp != formals);
+ }
+ applyDocumentation(fd->firstSourceLocation(), method);
+ }
+ return true;
+}
+
+/*!
+ End the visit of the function declaration, \a fd.
+ */
+void QmlDocVisitor::endVisit(QQmlJS::AST::FunctionDeclaration *fd)
+{
+ m_lastEndOffset = fd->lastSourceLocation().end();
+}
+
+/*!
+ Begin the visit of the signal handler declaration \a sb, but only
+ if the nesting level is 1.
+
+ This visit is now deprecated. It has been decided to document
+ public signals. If a signal handler must be discussed in the
+ documentation, that discussion must take place in the comment
+ for the signal.
+ */
+bool QmlDocVisitor::visit(QQmlJS::AST::UiScriptBinding *)
+{
+ return true;
+}
+
+void QmlDocVisitor::endVisit(QQmlJS::AST::UiScriptBinding *sb)
+{
+ m_lastEndOffset = sb->lastSourceLocation().end();
+}
+
+bool QmlDocVisitor::visit(QQmlJS::AST::UiQualifiedId *)
+{
+ return true;
+}
+
+void QmlDocVisitor::endVisit(QQmlJS::AST::UiQualifiedId *)
+{
+ // nothing.
+}
+
+void QmlDocVisitor::throwRecursionDepthError()
+{
+ hasRecursionDepthError = true;
+}
+
+bool QmlDocVisitor::hasError() const
+{
+ return hasRecursionDepthError;
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/qmlvisitor.h b/src/qdoc/qdoc/src/qdoc/qmlvisitor.h
new file mode 100644
index 000000000..201dc0e61
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/qmlvisitor.h
@@ -0,0 +1,93 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef QMLVISITOR_H
+#define QMLVISITOR_H
+
+#include "node.h"
+#include "qmltypenode.h"
+
+#include <QtCore/qstring.h>
+
+#include <private/qqmljsastvisitor_p.h>
+#include <private/qqmljsengine_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class Aggregate;
+
+struct QmlPropArgs
+{
+ QString m_type {};
+ QString m_module {};
+ QString m_component {};
+ QString m_name;
+
+ void clear()
+ {
+ m_type.clear();
+ m_module.clear();
+ m_component.clear();
+ m_name.clear();
+ }
+};
+
+class QmlDocVisitor : public QQmlJS::AST::Visitor
+{
+public:
+ QmlDocVisitor(const QString &filePath, const QString &code, QQmlJS::Engine *engine,
+ const QSet<QString> &commands, const QSet<QString> &topics);
+ ~QmlDocVisitor() override = default;
+
+ bool visit(QQmlJS::AST::UiImport *import) override;
+ void endVisit(QQmlJS::AST::UiImport *definition) override;
+
+ bool visit(QQmlJS::AST::UiObjectDefinition *definition) override;
+ void endVisit(QQmlJS::AST::UiObjectDefinition *definition) override;
+
+ bool visit(QQmlJS::AST::UiPublicMember *member) override;
+ void endVisit(QQmlJS::AST::UiPublicMember *definition) override;
+
+ bool visit(QQmlJS::AST::UiObjectBinding *) override;
+ void endVisit(QQmlJS::AST::UiObjectBinding *) override;
+ void endVisit(QQmlJS::AST::UiArrayBinding *) override;
+ bool visit(QQmlJS::AST::UiArrayBinding *) override;
+
+ bool visit(QQmlJS::AST::IdentifierPropertyName *idproperty) override;
+
+ bool visit(QQmlJS::AST::FunctionDeclaration *) override;
+ void endVisit(QQmlJS::AST::FunctionDeclaration *) override;
+
+ bool visit(QQmlJS::AST::UiScriptBinding *) override;
+ void endVisit(QQmlJS::AST::UiScriptBinding *) override;
+
+ bool visit(QQmlJS::AST::UiQualifiedId *) override;
+ void endVisit(QQmlJS::AST::UiQualifiedId *) override;
+
+ void throwRecursionDepthError() final;
+ [[nodiscard]] bool hasError() const;
+
+private:
+ QString getFullyQualifiedId(QQmlJS::AST::UiQualifiedId *id);
+ [[nodiscard]] QQmlJS::SourceLocation precedingComment(quint32 offset) const;
+ Node *applyDocumentation(QQmlJS::SourceLocation location, Node *node);
+ void applyMetacommands(QQmlJS::SourceLocation location, Node *node, Doc &doc);
+ bool splitQmlPropertyArg(const Doc &doc, const QString &arg, QmlPropArgs &qpa);
+
+ QQmlJS::Engine *m_engine { nullptr };
+ quint32 m_lastEndOffset {};
+ quint32 m_nestingLevel {};
+ QString m_filePath {};
+ QString m_name {};
+ QString m_document {};
+ ImportList m_importList {};
+ QSet<QString> m_commands {};
+ QSet<QString> m_topics {};
+ QSet<quint32> m_usedComments {};
+ Aggregate *m_current { nullptr };
+ bool hasRecursionDepthError { false };
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/quoter.cpp b/src/qdoc/qdoc/src/qdoc/quoter.cpp
new file mode 100644
index 000000000..37799a9e9
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/quoter.cpp
@@ -0,0 +1,338 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "quoter.h"
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qfileinfo.h>
+#include <QtCore/qregularexpression.h>
+
+QT_BEGIN_NAMESPACE
+
+QHash<QString, QString> Quoter::s_commentHash;
+
+static void replaceMultipleNewlines(QString &s)
+{
+ const qsizetype n = s.size();
+ bool slurping = false;
+ int j = -1;
+ const QChar newLine = QLatin1Char('\n');
+ QChar *d = s.data();
+ for (int i = 0; i != n; ++i) {
+ const QChar c = d[i];
+ bool hit = (c == newLine);
+ if (slurping && hit)
+ continue;
+ d[++j] = c;
+ slurping = hit;
+ }
+ s.resize(++j);
+}
+
+// This is equivalent to line.split( QRegularExpression("\n(?!\n|$)") ) but much faster
+QStringList Quoter::splitLines(const QString &line)
+{
+ QStringList result;
+ qsizetype i = line.size();
+ while (true) {
+ qsizetype j = i - 1;
+ while (j >= 0 && line.at(j) == QLatin1Char('\n'))
+ --j;
+ while (j >= 0 && line.at(j) != QLatin1Char('\n'))
+ --j;
+ result.prepend(line.mid(j + 1, i - j - 1));
+ if (j < 0)
+ break;
+ i = j;
+ }
+ return result;
+}
+
+/*
+ Transforms 'int x = 3 + 4' into 'int x=3+4'. A white space is kept
+ between 'int' and 'x' because it is meaningful in C++.
+*/
+static void trimWhiteSpace(QString &str)
+{
+ enum { Normal, MetAlnum, MetSpace } state = Normal;
+ const qsizetype n = str.size();
+
+ int j = -1;
+ QChar *d = str.data();
+ for (int i = 0; i != n; ++i) {
+ const QChar c = d[i];
+ if (c.isLetterOrNumber()) {
+ if (state == Normal) {
+ state = MetAlnum;
+ } else {
+ if (state == MetSpace)
+ str[++j] = c;
+ state = Normal;
+ }
+ str[++j] = c;
+ } else if (c.isSpace()) {
+ if (state == MetAlnum)
+ state = MetSpace;
+ } else {
+ state = Normal;
+ str[++j] = c;
+ }
+ }
+ str.resize(++j);
+}
+
+Quoter::Quoter() : m_silent(false)
+{
+ /* We're going to hard code these delimiters:
+ * C++, Qt, Qt Script, Java:
+ //! [<id>]
+ * .pro, .py, CMake files:
+ #! [<id>]
+ * .html, .qrc, .ui, .xq, .xml files:
+ <!-- [<id>] -->
+ */
+ if (s_commentHash.empty()) {
+ s_commentHash["pro"] = "#!";
+ s_commentHash["py"] = "#!";
+ s_commentHash["cmake"] = "#!";
+ s_commentHash["html"] = "<!--";
+ s_commentHash["qrc"] = "<!--";
+ s_commentHash["ui"] = "<!--";
+ s_commentHash["xml"] = "<!--";
+ s_commentHash["xq"] = "<!--";
+ }
+}
+
+void Quoter::reset()
+{
+ m_silent = false;
+ m_plainLines.clear();
+ m_markedLines.clear();
+ m_codeLocation = Location();
+}
+
+void Quoter::quoteFromFile(const QString &userFriendlyFilePath, const QString &plainCode,
+ const QString &markedCode)
+{
+ m_silent = false;
+
+ /*
+ Split the source code into logical lines. Empty lines are
+ treated specially. Before:
+
+ p->alpha();
+ p->beta();
+
+ p->gamma();
+
+
+ p->delta();
+
+ After:
+
+ p->alpha();
+ p->beta();\n
+ p->gamma();\n\n
+ p->delta();
+
+ Newlines are preserved because they affect codeLocation.
+ */
+ m_codeLocation = Location(userFriendlyFilePath);
+
+ m_plainLines = splitLines(plainCode);
+ m_markedLines = splitLines(markedCode);
+ if (m_markedLines.size() != m_plainLines.size()) {
+ m_codeLocation.warning(
+ QStringLiteral("Something is wrong with qdoc's handling of marked code"));
+ m_markedLines = m_plainLines;
+ }
+
+ /*
+ Squeeze blanks (cat -s).
+ */
+ for (auto &line : m_markedLines)
+ replaceMultipleNewlines(line);
+ m_codeLocation.start();
+}
+
+QString Quoter::quoteLine(const Location &docLocation, const QString &command,
+ const QString &pattern)
+{
+ if (m_plainLines.isEmpty()) {
+ failedAtEnd(docLocation, command);
+ return QString();
+ }
+
+ if (pattern.isEmpty()) {
+ docLocation.warning(QStringLiteral("Missing pattern after '\\%1'").arg(command));
+ return QString();
+ }
+
+ if (match(docLocation, pattern, m_plainLines.first()))
+ return getLine();
+
+ if (!m_silent) {
+ docLocation.warning(QStringLiteral("Command '\\%1' failed").arg(command));
+ m_codeLocation.warning(QStringLiteral("Pattern '%1' didn't match here").arg(pattern));
+ m_silent = true;
+ }
+ return QString();
+}
+
+QString Quoter::quoteSnippet(const Location &docLocation, const QString &identifier)
+{
+ QString comment = commentForCode();
+ QString delimiter = comment + QString(" [%1]").arg(identifier);
+ QString t;
+ int indent = 0;
+
+ while (!m_plainLines.isEmpty()) {
+ if (match(docLocation, delimiter, m_plainLines.first())) {
+ QString startLine = getLine();
+ while (indent < startLine.size() && startLine[indent] == QLatin1Char(' '))
+ indent++;
+ break;
+ }
+ getLine();
+ }
+ while (!m_plainLines.isEmpty()) {
+ QString line = m_plainLines.first();
+ if (match(docLocation, delimiter, line)) {
+ QString lastLine = getLine(indent);
+ qsizetype dIndex = lastLine.indexOf(delimiter);
+ if (dIndex > 0) {
+ // The delimiter might be preceded on the line by other
+ // delimeters, so look for the first comment on the line.
+ QString leading = lastLine.left(dIndex);
+ dIndex = leading.indexOf(comment);
+ if (dIndex != -1)
+ leading = leading.left(dIndex);
+ if (leading.endsWith(QLatin1String("<@comment>")))
+ leading.chop(10);
+ if (!leading.trimmed().isEmpty())
+ t += leading;
+ }
+ return t;
+ }
+
+ t += removeSpecialLines(line, comment, indent);
+ }
+ failedAtEnd(docLocation, QString("snippet (%1)").arg(delimiter));
+ return t;
+}
+
+QString Quoter::quoteTo(const Location &docLocation, const QString &command, const QString &pattern)
+{
+ QString t;
+ QString comment = commentForCode();
+
+ if (pattern.isEmpty()) {
+ while (!m_plainLines.isEmpty()) {
+ QString line = m_plainLines.first();
+ t += removeSpecialLines(line, comment);
+ }
+ } else {
+ while (!m_plainLines.isEmpty()) {
+ if (match(docLocation, pattern, m_plainLines.first())) {
+ return t;
+ }
+ t += getLine();
+ }
+ failedAtEnd(docLocation, command);
+ }
+ return t;
+}
+
+QString Quoter::quoteUntil(const Location &docLocation, const QString &command,
+ const QString &pattern)
+{
+ QString t = quoteTo(docLocation, command, pattern);
+ t += getLine();
+ return t;
+}
+
+QString Quoter::getLine(int unindent)
+{
+ if (m_plainLines.isEmpty())
+ return QString();
+
+ m_plainLines.removeFirst();
+
+ QString t = m_markedLines.takeFirst();
+ int i = 0;
+ while (i < unindent && i < t.size() && t[i] == QLatin1Char(' '))
+ i++;
+
+ t = t.mid(i);
+ t += QLatin1Char('\n');
+ m_codeLocation.advanceLines(t.count(QLatin1Char('\n')));
+ return t;
+}
+
+bool Quoter::match(const Location &docLocation, const QString &pattern0, const QString &line)
+{
+ QString str = line;
+ while (str.endsWith(QLatin1Char('\n')))
+ str.truncate(str.size() - 1);
+
+ QString pattern = pattern0;
+ if (pattern.startsWith(QLatin1Char('/')) && pattern.endsWith(QLatin1Char('/'))
+ && pattern.size() > 2) {
+ QRegularExpression rx(pattern.mid(1, pattern.size() - 2));
+ if (!m_silent && !rx.isValid()) {
+ docLocation.warning(
+ QStringLiteral("Invalid regular expression '%1'").arg(rx.pattern()));
+ m_silent = true;
+ }
+ return str.indexOf(rx) != -1;
+ }
+ trimWhiteSpace(str);
+ trimWhiteSpace(pattern);
+ return str.indexOf(pattern) != -1;
+}
+
+void Quoter::failedAtEnd(const Location &docLocation, const QString &command)
+{
+ if (!m_silent && !command.isEmpty()) {
+ if (m_codeLocation.filePath().isEmpty()) {
+ docLocation.warning(QStringLiteral("Unexpected '\\%1'").arg(command));
+ } else {
+ docLocation.warning(QStringLiteral("Command '\\%1' failed at end of file '%2'")
+ .arg(command, m_codeLocation.filePath()));
+ }
+ m_silent = true;
+ }
+}
+
+QString Quoter::commentForCode() const
+{
+ QFileInfo fi = QFileInfo(m_codeLocation.fileName());
+ if (fi.fileName() == "CMakeLists.txt")
+ return "#!";
+ return s_commentHash.value(fi.suffix(), "//!");
+}
+
+QString Quoter::removeSpecialLines(const QString &line, const QString &comment, int unindent)
+{
+ QString t;
+
+ // Remove special macros to support Qt namespacing.
+ QString trimmed = line.trimmed();
+ if (trimmed.startsWith("QT_BEGIN_NAMESPACE")) {
+ getLine();
+ } else if (trimmed.startsWith("QT_END_NAMESPACE")) {
+ getLine();
+ t += QLatin1Char('\n');
+ } else if (!trimmed.startsWith(comment)) {
+ // Ordinary code
+ t += getLine(unindent);
+ } else {
+ // Comments
+ if (line.contains(QLatin1Char('\n')))
+ t += QLatin1Char('\n');
+ getLine();
+ }
+ return t;
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/quoter.h b/src/qdoc/qdoc/src/qdoc/quoter.h
new file mode 100644
index 000000000..087e9ffd2
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/quoter.h
@@ -0,0 +1,45 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef QUOTER_H
+#define QUOTER_H
+
+#include "location.h"
+
+#include <QtCore/qhash.h>
+#include <QtCore/qstringlist.h>
+
+QT_BEGIN_NAMESPACE
+
+class Quoter
+{
+public:
+ Quoter();
+
+ void reset();
+ void quoteFromFile(const QString &userFriendlyFileName, const QString &plainCode,
+ const QString &markedCode);
+ QString quoteLine(const Location &docLocation, const QString &command, const QString &pattern);
+ QString quoteTo(const Location &docLocation, const QString &command, const QString &pattern);
+ QString quoteUntil(const Location &docLocation, const QString &command, const QString &pattern);
+ QString quoteSnippet(const Location &docLocation, const QString &identifier);
+
+ static QStringList splitLines(const QString &line);
+
+private:
+ QString getLine(int unindent = 0);
+ void failedAtEnd(const Location &docLocation, const QString &command);
+ bool match(const Location &docLocation, const QString &pattern, const QString &line);
+ [[nodiscard]] QString commentForCode() const;
+ QString removeSpecialLines(const QString &line, const QString &comment, int unindent = 0);
+
+ bool m_silent {};
+ QStringList m_plainLines {};
+ QStringList m_markedLines {};
+ Location m_codeLocation {};
+ static QHash<QString, QString> s_commentHash;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/relatedclass.cpp b/src/qdoc/qdoc/src/qdoc/relatedclass.cpp
new file mode 100644
index 000000000..3eea8df92
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/relatedclass.cpp
@@ -0,0 +1,46 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "relatedclass.h"
+
+#include "node.h"
+
+/*!
+ \struct RelatedClass
+ \brief A struct for indicating that a ClassNode is related in some way to another ClassNode.
+
+ This struct has nothing to do with the \c {\\relates} command. This struct
+ is used for indicating that a ClassNode is a base class of another ClassNode,
+ is a derived class of another ClassNode, or is an ignored base class of
+ another ClassNode. This struct is only used in ClassNode.
+*/
+
+/*! \fn RelatedClass::RelatedClass()
+ The default constructor does nothing. It is only used for allocating empty
+ instances of RelatedClass in containers.
+ */
+
+/*! \fn RelatedClass::RelatedClass(Access access, ClassNode *node)
+ This is the constructor used when the related class has been resolved.
+ In other words, when the ClassNode has been created so that \a node is
+ not \c nullptr.
+*/
+
+/*! \fn RelatedClass::RelatedClass(Access access, const QStringList &path, const QString &signature)
+ This is the constructor used when the related class has not bee resolved,
+ because it hasn't been created yet. In that case, we store the qualified
+ \a path name of the class and the \a signature of the class, which I think
+ is just the name of the class.
+
+ \note We might be able to simplify the whole RelatedClass concept. Maybe we
+ can get rid of it completely.
+*/
+
+/*! \fn bool RelatedClass::isPrivate() const
+ Returns \c true if this RelatedClass is marked as Access::Private.
+*/
+bool RelatedClass::isPrivate() const
+{
+ return (m_access == Access::Private);
+}
+
diff --git a/src/qdoc/qdoc/src/qdoc/relatedclass.h b/src/qdoc/qdoc/src/qdoc/relatedclass.h
new file mode 100644
index 000000000..9ca3b849a
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/relatedclass.h
@@ -0,0 +1,34 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef RELATEDCLASS_H
+#define RELATEDCLASS_H
+
+#include "access.h"
+
+#include <QtCore/qstring.h>
+#include <QtCore/qstringlist.h>
+
+#include <utility>
+
+QT_BEGIN_NAMESPACE
+
+class ClassNode;
+
+struct RelatedClass
+{
+ RelatedClass() = default;
+ // constructor for resolved base class
+ RelatedClass(Access access, ClassNode *node) : m_access(access), m_node(node) {}
+ // constructor for unresolved base class
+ RelatedClass(Access access, QStringList path) : m_access(access), m_path(std::move(path)) { }
+ [[nodiscard]] bool isPrivate() const;
+
+ Access m_access {};
+ ClassNode *m_node { nullptr };
+ QStringList m_path {};
+};
+
+QT_END_NAMESPACE
+
+#endif // RELATEDCLASS_H
diff --git a/src/qdoc/qdoc/src/qdoc/sections.cpp b/src/qdoc/qdoc/src/qdoc/sections.cpp
new file mode 100644
index 000000000..bf066c08e
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/sections.cpp
@@ -0,0 +1,992 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "sections.h"
+
+#include "aggregate.h"
+#include "classnode.h"
+#include "config.h"
+#include "enumnode.h"
+#include "functionnode.h"
+#include "generator.h"
+#include "utilities.h"
+#include "namespacenode.h"
+#include "qmlpropertynode.h"
+#include "qmltypenode.h"
+#include "sharedcommentnode.h"
+#include "typedefnode.h"
+#include "variablenode.h"
+
+#include <QtCore/qobjectdefs.h>
+
+QT_BEGIN_NAMESPACE
+
+QList<Section> Sections::s_stdSummarySections {
+ { "Namespaces", "namespace", "namespaces", "", Section::Summary },
+ { "Classes", "class", "classes", "", Section::Summary },
+ { "Types", "type", "types", "", Section::Summary },
+ { "Variables", "variable", "variables", "", Section::Summary },
+ { "Static Variables", "static variable", "static variables", "", Section::Summary },
+ { "Functions", "function", "functions", "", Section::Summary },
+ { "Macros", "macro", "macros", "", Section::Summary },
+};
+
+QList<Section> Sections::s_stdDetailsSections {
+ { "Namespaces", "namespace", "namespaces", "nmspace", Section::Details },
+ { "Classes", "class", "classes", "classes", Section::Details },
+ { "Type Documentation", "type", "types", "types", Section::Details },
+ { "Variable Documentation", "variable", "variables", "vars", Section::Details },
+ { "Static Variables", "static variable", "static variables", QString(), Section::Details },
+ { "Function Documentation", "function", "functions", "func", Section::Details },
+ { "Macro Documentation", "macro", "macros", "macros", Section::Details },
+};
+
+QList<Section> Sections::s_stdCppClassSummarySections {
+ { "Public Types", "public type", "public types", "", Section::Summary },
+ { "Properties", "property", "properties", "", Section::Summary },
+ { "Public Functions", "public function", "public functions", "", Section::Summary },
+ { "Public Slots", "public slot", "public slots", "", Section::Summary },
+ { "Signals", "signal", "signals", "", Section::Summary },
+ { "Public Variables", "public variable", "public variables", "", Section::Summary },
+ { "Static Public Members", "static public member", "static public members", "", Section::Summary },
+ { "Protected Types", "protected type", "protected types", "", Section::Summary },
+ { "Protected Functions", "protected function", "protected functions", "", Section::Summary },
+ { "Protected Slots", "protected slot", "protected slots", "", Section::Summary },
+ { "Protected Variables", "protected type", "protected variables", "", Section::Summary },
+ { "Static Protected Members", "static protected member", "static protected members", "", Section::Summary },
+ { "Private Types", "private type", "private types", "", Section::Summary },
+ { "Private Functions", "private function", "private functions", "", Section::Summary },
+ { "Private Slots", "private slot", "private slots", "", Section::Summary },
+ { "Static Private Members", "static private member", "static private members", "", Section::Summary },
+ { "Related Non-Members", "related non-member", "related non-members", "", Section::Summary },
+ { "Macros", "macro", "macros", "", Section::Summary },
+};
+
+QList<Section> Sections::s_stdCppClassDetailsSections {
+ { "Member Type Documentation", "member", "members", "types", Section::Details },
+ { "Property Documentation", "member", "members", "prop", Section::Details },
+ { "Member Function Documentation", "member", "members", "func", Section::Details },
+ { "Member Variable Documentation", "member", "members", "vars", Section::Details },
+ { "Related Non-Members", "member", "members", "relnonmem", Section::Details },
+ { "Macro Documentation", "member", "members", "macros", Section::Details },
+};
+
+QList<Section> Sections::s_stdQmlTypeSummarySections {
+ { "Properties", "property", "properties", "", Section::Summary },
+ { "Attached Properties", "attached property", "attached properties", "", Section::Summary },
+ { "Signals", "signal", "signals", "", Section::Summary },
+ { "Signal Handlers", "signal handler", "signal handlers", "", Section::Summary },
+ { "Attached Signals", "attached signal", "attached signals", "", Section::Summary },
+ { "Methods", "method", "methods", "", Section::Summary },
+ { "Attached Methods", "attached method", "attached methods", "", Section::Summary },
+};
+
+QList<Section> Sections::s_stdQmlTypeDetailsSections {
+ { "Property Documentation", "member", "members", "qmlprop", Section::Details },
+ { "Attached Property Documentation", "member", "members", "qmlattprop", Section::Details },
+ { "Signal Documentation", "signal", "signals", "qmlsig", Section::Details },
+ { "Signal Handler Documentation", "signal handler", "signal handlers", "qmlsighan", Section::Details },
+ { "Attached Signal Documentation", "signal", "signals", "qmlattsig", Section::Details },
+ { "Method Documentation", "member", "members", "qmlmeth", Section::Details },
+ { "Attached Method Documentation", "member", "members", "qmlattmeth", Section::Details },
+};
+
+QList<Section> Sections::s_sinceSections {
+ { "New Namespaces", "", "", "", Section::Details },
+ { "New Classes", "", "", "", Section::Details },
+ { "New Member Functions", "", "", "", Section::Details },
+ { "New Functions in Namespaces", "", "", "", Section::Details },
+ { "New Global Functions", "", "", "", Section::Details },
+ { "New Macros", "", "", "", Section::Details },
+ { "New Enum Types", "", "", "", Section::Details },
+ { "New Enum Values", "", "", "", Section::Details },
+ { "New Type Aliases", "", "", "", Section::Details },
+ { "New Properties", "", "", "", Section::Details },
+ { "New Variables", "", "", "", Section::Details },
+ { "New QML Types", "", "", "", Section::Details },
+ { "New QML Properties", "", "", "", Section::Details },
+ { "New QML Signals", "", "", "", Section::Details },
+ { "New QML Signal Handlers", "", "", "", Section::Details },
+ { "New QML Methods", "", "", "", Section::Details },
+};
+
+QList<Section> Sections::s_allMembers{ { "", "member", "members", "", Section::AllMembers } };
+
+/*!
+ \class Section
+ \brief A class for containing the elements of one documentation section
+ */
+
+/*!
+ The destructor must delete the members of collections
+ when the members are allocated on the heap.
+ */
+Section::~Section()
+{
+ clear();
+}
+
+/*!
+ A Section is now an element in a static vector, so we
+ don't have to repeatedly construct and destroy them. But
+ we do need to clear them before each call to build the
+ sections for a C++ or QML entity.
+ */
+void Section::clear()
+{
+ m_reimplementedMemberMap.clear();
+ m_members.clear();
+ m_obsoleteMembers.clear();
+ m_reimplementedMembers.clear();
+ m_inheritedMembers.clear();
+ m_classNodesList.clear();
+ m_aggregate = nullptr;
+}
+
+/*!
+ Construct a name for the \a node that can be used for sorting
+ a set of nodes into equivalence classes.
+ */
+QString sortName(const Node *node)
+{
+ QString nodeName{node->name()};
+
+ int numDigits = 0;
+ for (qsizetype i = nodeName.size() - 1; i > 0; --i) {
+ if (nodeName.at(i).digitValue() == -1)
+ break;
+ ++numDigits;
+ }
+
+ // we want 'qint8' to appear before 'qint16'
+ if (numDigits > 0) {
+ for (int i = 0; i < 4 - numDigits; ++i)
+ nodeName.insert(nodeName.size() - numDigits - 1, QLatin1Char('0'));
+ }
+
+ if (node->isClassNode())
+ return QLatin1Char('A') + nodeName;
+
+ if (node->isFunction(Node::CPP)) {
+ const auto *fn = static_cast<const FunctionNode *>(node);
+
+ QString sortNo;
+ if (fn->isCtor())
+ sortNo = QLatin1String("C");
+ else if (fn->isCCtor())
+ sortNo = QLatin1String("D");
+ else if (fn->isMCtor())
+ sortNo = QLatin1String("E");
+ else if (fn->isDtor())
+ sortNo = QLatin1String("F");
+ else if (nodeName.startsWith(QLatin1String("operator")) && nodeName.size() > 8
+ && !nodeName[8].isLetterOrNumber())
+ sortNo = QLatin1String("H");
+ else
+ sortNo = QLatin1String("G");
+
+ return sortNo + nodeName + QLatin1Char(' ') + QString::number(fn->overloadNumber(), 36);
+ }
+
+ if (node->isFunction(Node::QML))
+ return QLatin1Char('E') + nodeName + QLatin1Char(' ') +
+ QString::number(static_cast<const FunctionNode*>(node)->overloadNumber(), 36);
+
+ if (node->isProperty() || node->isVariable())
+ return QLatin1Char('G') + nodeName;
+
+ return QLatin1Char('B') + nodeName;
+}
+
+/*!
+ Inserts the \a node into this section if it is appropriate
+ for this section.
+ */
+void Section::insert(Node *node)
+{
+ bool irrelevant = false;
+ bool inherited = false;
+ if (!node->isRelatedNonmember()) {
+ Aggregate *p = node->parent();
+ if (!p->isNamespace() && p != m_aggregate) {
+ if (!p->isQmlType() || !p->isAbstract())
+ inherited = true;
+ }
+ }
+
+ if (node->isPrivate() || node->isInternal()) {
+ irrelevant = true;
+ } else if (node->isFunction()) {
+ auto *func = static_cast<FunctionNode *>(node);
+ irrelevant = (inherited && (func->isSomeCtor() || func->isDtor()));
+ } else if (node->isClassNode() || node->isEnumType() || node->isTypedef()
+ || node->isVariable()) {
+ irrelevant = (inherited && m_style != AllMembers);
+ if (!irrelevant && m_style == Details && node->isTypedef()) {
+ const auto *tdn = static_cast<const TypedefNode *>(node);
+ if (tdn->associatedEnum())
+ irrelevant = true;
+ }
+ }
+
+ if (!irrelevant) {
+ QString key = sortName(node);
+ if (node->isDeprecated()) {
+ m_obsoleteMembers.push_back(node);
+ } else {
+ if (!inherited || m_style == AllMembers)
+ m_members.push_back(node);
+
+ if (inherited && (node->parent()->isClassNode() || node->parent()->isNamespace())) {
+ if (m_inheritedMembers.isEmpty()
+ || m_inheritedMembers.last().first != node->parent()) {
+ std::pair<Aggregate *, int> p(node->parent(), 0);
+ m_inheritedMembers.append(p);
+ }
+ m_inheritedMembers.last().second++;
+ }
+ }
+ }
+}
+
+/*!
+ Returns \c true if the \a node is a reimplemented member
+ function of the current class. If true, the \a node is
+ inserted into the reimplemented member map. True
+ is returned only if \a node is inserted into the map.
+ That is, false is returned if the \a node is already in
+ the map.
+ */
+bool Section::insertReimplementedMember(Node *node)
+{
+ if (!node->isPrivate() && !node->isRelatedNonmember()) {
+ const auto *fn = static_cast<const FunctionNode *>(node);
+ if (!fn->overridesThis().isEmpty()) {
+ if (fn->parent() == m_aggregate) {
+ QString key = sortName(fn);
+ if (!m_reimplementedMemberMap.contains(key)) {
+ m_reimplementedMemberMap.insert(key, node);
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+}
+
+/*!
+ If this section is not empty, convert its maps to sequential
+ structures for better traversal during doc generation.
+ */
+void Section::reduce()
+{
+ // TODO:TEMPORARY:INTERMEDITATE: Section uses a series of maps
+ // to internally manage the categorization of the various members
+ // of an aggregate. It further uses a secondary "flattened"
+ // (usually vector) version that is later used by consumers of a
+ // Section content.
+ //
+ // One of the uses of those maps is that of ordering, by using
+ // keys generated with `sortName`.
+ // Nonetheless, this is the only usage that comes from the keys,
+ // as they are neither necessary nor used outside of the internal
+ // code for Section.
+ //
+ // Hence, the codebase is moving towards removing the maps in
+ // favor of building a flattened, consumer ready, version of the
+ // categorization directly, cutting the intermediate conversion
+ // step.
+ //
+ // To do so while keeping as much of the old behavior as possible,
+ // we provide a sorting for the flattened version that is based on
+ // `sortName`, as the previous ordering was.
+ //
+ // This acts as a relatively heavy pessimization, as `sortName`,
+ // used as a comparator, can be called multiple times for each
+ // Node, while before it would have been called almost-once.
+ //
+ // Instead of fixing this issue, by for example caching the
+ // sortName of each Node instance, we temporarily keep the
+ // pessimization while the various maps are removed.
+ //
+ // When all the maps are removed, we can remove `sortName`, which
+ // produces strings to use as key requiring a few allocations and
+ // expensive operations, with an actual comparator function, which
+ // should be more lightweight and more than offset the
+ // multiple-calls.
+ static auto node_less_than = [](const Node* left, const Node* right) {
+ return sortName(left) < sortName(right);
+ };
+
+ std::stable_sort(m_members.begin(), m_members.end(), node_less_than);
+ std::stable_sort(m_obsoleteMembers.begin(), m_obsoleteMembers.end(), node_less_than);
+
+ m_reimplementedMembers = m_reimplementedMemberMap.values().toVector();
+
+ for (auto &cn : m_classNodesList) {
+ std::stable_sort(cn.second.begin(), cn.second.end(), node_less_than);
+ }
+}
+
+/*!
+ \class Sections
+ \brief A class for creating vectors of collections for documentation
+
+ Each element in a vector is an instance of Section, which
+ contains all the elements that will be documented in one
+ section of a reference documentation page.
+ */
+
+/*!
+ This constructor builds the vectors of sections based on the
+ type of the \a aggregate node.
+ */
+Sections::Sections(Aggregate *aggregate) : m_aggregate(aggregate)
+{
+ initAggregate(s_allMembers, m_aggregate);
+ switch (m_aggregate->nodeType()) {
+ case Node::Class:
+ case Node::Struct:
+ case Node::Union:
+ initAggregate(s_stdCppClassSummarySections, m_aggregate);
+ initAggregate(s_stdCppClassDetailsSections, m_aggregate);
+ buildStdCppClassRefPageSections();
+ break;
+ case Node::QmlType:
+ case Node::QmlValueType:
+ initAggregate(s_stdQmlTypeSummarySections, m_aggregate);
+ initAggregate(s_stdQmlTypeDetailsSections, m_aggregate);
+ buildStdQmlTypeRefPageSections();
+ break;
+ case Node::Namespace:
+ case Node::HeaderFile:
+ case Node::Proxy:
+ default:
+ initAggregate(s_stdSummarySections, m_aggregate);
+ initAggregate(s_stdDetailsSections, m_aggregate);
+ buildStdRefPageSections();
+ break;
+ }
+}
+
+/*!
+ This constructor builds a vector of sections from the \e since
+ node map, \a nsmap
+ */
+Sections::Sections(const NodeMultiMap &nsmap) : m_aggregate(nullptr)
+{
+ if (nsmap.isEmpty())
+ return;
+ SectionVector &sections = sinceSections();
+ for (auto it = nsmap.constBegin(); it != nsmap.constEnd(); ++it) {
+ Node *node = it.value();
+ switch (node->nodeType()) {
+ case Node::QmlType:
+ sections[SinceQmlTypes].appendMember(node);
+ break;
+ case Node::Namespace:
+ sections[SinceNamespaces].appendMember(node);
+ break;
+ case Node::Class:
+ case Node::Struct:
+ case Node::Union:
+ sections[SinceClasses].appendMember(node);
+ break;
+ case Node::Enum: {
+ // The map can contain an enum node with \since, or an enum node
+ // with \value containing a since-clause. In the latter case,
+ // key() is an empty string.
+ if (!it.key().isEmpty())
+ sections[SinceEnumTypes].appendMember(node);
+ else
+ sections[SinceEnumValues].appendMember(node);
+ break;
+ }
+ case Node::Typedef:
+ case Node::TypeAlias:
+ sections[SinceTypeAliases].appendMember(node);
+ break;
+ case Node::Function: {
+ const auto *fn = static_cast<const FunctionNode *>(node);
+ switch (fn->metaness()) {
+ case FunctionNode::QmlSignal:
+ sections[SinceQmlSignals].appendMember(node);
+ break;
+ case FunctionNode::QmlSignalHandler:
+ sections[SinceQmlSignalHandlers].appendMember(node);
+ break;
+ case FunctionNode::QmlMethod:
+ sections[SinceQmlMethods].appendMember(node);
+ break;
+ default:
+ if (fn->isMacro())
+ sections[SinceMacros].appendMember(node);
+ else {
+ Node *p = fn->parent();
+ if (p) {
+ if (p->isClassNode())
+ sections[SinceMemberFunctions].appendMember(node);
+ else if (p->isNamespace()) {
+ if (p->name().isEmpty())
+ sections[SinceGlobalFunctions].appendMember(node);
+ else
+ sections[SinceNamespaceFunctions].appendMember(node);
+ } else
+ sections[SinceGlobalFunctions].appendMember(node);
+ } else
+ sections[SinceGlobalFunctions].appendMember(node);
+ }
+ break;
+ }
+ break;
+ }
+ case Node::Property:
+ sections[SinceProperties].appendMember(node);
+ break;
+ case Node::Variable:
+ sections[SinceVariables].appendMember(node);
+ break;
+ case Node::QmlProperty:
+ sections[SinceQmlProperties].appendMember(node);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+/*!
+ The behavior of the destructor depends on the type of the
+ Aggregate node that was passed to the constructor. If the
+ constructor was passed a multimap, the destruction is a
+ bit different because there was no Aggregate node.
+ */
+Sections::~Sections()
+{
+ if (m_aggregate) {
+ switch (m_aggregate->nodeType()) {
+ case Node::Class:
+ case Node::Struct:
+ case Node::Union:
+ clear(stdCppClassSummarySections());
+ clear(stdCppClassDetailsSections());
+ allMembersSection().clear();
+ break;
+ case Node::QmlType:
+ case Node::QmlValueType:
+ clear(stdQmlTypeSummarySections());
+ clear(stdQmlTypeDetailsSections());
+ allMembersSection().clear();
+ break;
+ default:
+ clear(stdSummarySections());
+ clear(stdDetailsSections());
+ allMembersSection().clear();
+ break;
+ }
+ m_aggregate = nullptr;
+ } else {
+ clear(sinceSections());
+ }
+}
+
+/*!
+ Initialize the Aggregate in each Section of vector \a v with \a aggregate.
+ */
+void Sections::initAggregate(SectionVector &v, Aggregate *aggregate)
+{
+ for (Section &section : v)
+ section.setAggregate(aggregate);
+}
+
+/*!
+ Reset each Section in vector \a v to its initialized state.
+ */
+void Sections::clear(QList<Section> &v)
+{
+ for (Section &section : v)
+ section.clear();
+}
+
+/*!
+ Linearize the maps in each Section in \a v.
+ */
+void Sections::reduce(QList<Section> &v)
+{
+ for (Section &section : v)
+ section.reduce();
+}
+
+/*!
+ This is a private helper function for buildStdRefPageSections().
+ */
+void Sections::stdRefPageSwitch(SectionVector &v, Node *n, Node *t)
+{
+ // t is the reference node to be tested, n is the node to be distributed.
+ // t differs from n only for shared comment nodes.
+ if (!t)
+ t = n;
+
+ switch (t->nodeType()) {
+ case Node::Namespace:
+ v[StdNamespaces].insert(n);
+ return;
+ case Node::Class:
+ case Node::Struct:
+ case Node::Union:
+ v[StdClasses].insert(n);
+ return;
+ case Node::Enum:
+ case Node::Typedef:
+ case Node::TypeAlias:
+ v[StdTypes].insert(n);
+ return;
+ case Node::Function: {
+ auto *func = static_cast<FunctionNode *>(t);
+ if (func->isMacro())
+ v[StdMacros].insert(n);
+ else
+ v[StdFunctions].insert(n);
+ }
+ return;
+ case Node::Variable: {
+ const auto *var = static_cast<const VariableNode *>(t);
+ if (!var->doc().isEmpty()) {
+ if (var->isStatic())
+ v[StdStaticVariables].insert(n);
+ else
+ v[StdVariables].insert(n);
+ }
+ }
+ return;
+ case Node::SharedComment: {
+ auto *scn = static_cast<SharedCommentNode *>(t);
+ if (!scn->doc().isEmpty() && scn->collective().size())
+ stdRefPageSwitch(
+ v, scn,
+ scn->collective().first()); // TODO: warn about mixed node types in collective?
+ }
+ return;
+ default:
+ return;
+ }
+}
+
+/*!
+ Build the section vectors for a standard reference page,
+ when the aggregate node is not a C++ class or a QML type.
+
+ If this is for a namespace page then if the namespace node
+ itself does not have documentation, only its children that
+ have documentation should be documented. In other words,
+ there are cases where a namespace is declared but does not
+ have documentation, but some of the elements declared in
+ that namespace do have documentation.
+
+ This special processing of namespaces that do not have a
+ documentation comment is meant to allow documenting its
+ members that do have documentation while avoiding posting
+ error messages for its members that are not documented.
+ */
+void Sections::buildStdRefPageSections()
+{
+ const NamespaceNode *ns = nullptr;
+ bool documentAll = true; // document all the children
+ if (m_aggregate->isNamespace()) {
+ ns = static_cast<const NamespaceNode *>(m_aggregate);
+ if (!ns->hasDoc())
+ documentAll = false; // only document children that have documentation
+ }
+ for (auto it = m_aggregate->constBegin(); it != m_aggregate->constEnd(); ++it) {
+ Node *n = *it;
+ if (documentAll || n->hasDoc()) {
+ stdRefPageSwitch(stdSummarySections(), n);
+ stdRefPageSwitch(stdDetailsSections(), n);
+ }
+ }
+ if (!m_aggregate->relatedByProxy().isEmpty()) {
+ const QList<Node *> &relatedBy = m_aggregate->relatedByProxy();
+ for (const auto &node : relatedBy)
+ stdRefPageSwitch(stdSummarySections(), node);
+ }
+ /*
+ If we are building the sections for the reference page
+ for a namespace node, include all the namespace node's
+ included children in the sections.
+ */
+ if (ns && !ns->includedChildren().isEmpty()) {
+ const QList<Node *> &children = ns->includedChildren();
+ for (const auto &child : children) {
+ if (documentAll || child->hasDoc())
+ stdRefPageSwitch(stdSummarySections(), child);
+ }
+ }
+ reduce(stdSummarySections());
+ reduce(stdDetailsSections());
+ allMembersSection().reduce();
+}
+
+/*!
+ Inserts the node \a n in one of the entries in the vector \a v
+ depending on the node's type, access attribute, and a few other
+ attributes if the node is a signal, slot, or function.
+ */
+void Sections::distributeNodeInSummaryVector(SectionVector &sv, Node *n)
+{
+ if (n->isSharedCommentNode())
+ return;
+ if (n->isFunction()) {
+ auto *fn = static_cast<FunctionNode *>(n);
+ if (fn->isRelatedNonmember()) {
+ if (fn->isMacro())
+ sv[Macros].insert(n);
+ else
+ sv[RelatedNonmembers].insert(n);
+ return;
+ }
+ if (fn->isIgnored())
+ return;
+ if (fn->isSlot()) {
+ if (fn->isPublic())
+ sv[PublicSlots].insert(fn);
+ else if (fn->isPrivate())
+ sv[PrivateSlots].insert(fn);
+ else
+ sv[ProtectedSlots].insert(fn);
+ } else if (fn->isSignal()) {
+ if (fn->isPublic())
+ sv[Signals].insert(fn);
+ } else if (fn->isPublic()) {
+ if (fn->isStatic())
+ sv[StaticPublicMembers].insert(fn);
+ else if (!sv[PublicFunctions].insertReimplementedMember(fn))
+ sv[PublicFunctions].insert(fn);
+ } else if (fn->isPrivate()) {
+ if (fn->isStatic())
+ sv[StaticPrivateMembers].insert(fn);
+ else if (!sv[PrivateFunctions].insertReimplementedMember(fn))
+ sv[PrivateFunctions].insert(fn);
+ } else { // protected
+ if (fn->isStatic())
+ sv[StaticProtectedMembers].insert(fn);
+ else if (!sv[ProtectedFunctions].insertReimplementedMember(fn))
+ sv[ProtectedFunctions].insert(fn);
+ }
+ return;
+ }
+ if (n->isRelatedNonmember()) {
+ sv[RelatedNonmembers].insert(n);
+ return;
+ }
+ if (n->isVariable()) {
+ if (n->isStatic()) {
+ if (n->isPublic())
+ sv[StaticPublicMembers].insert(n);
+ else if (n->isPrivate())
+ sv[StaticPrivateMembers].insert(n);
+ else
+ sv[StaticProtectedMembers].insert(n);
+ } else {
+ if (n->isPublic())
+ sv[PublicVariables].insert(n);
+ else if (!n->isPrivate())
+ sv[ProtectedVariables].insert(n);
+ }
+ return;
+ }
+ /*
+ Getting this far means the node is either a property
+ or some kind of type, like an enum or a typedef.
+ */
+ if (n->isTypedef() && (n->name() == QLatin1String("QtGadgetHelper")))
+ return;
+ if (n->isProperty())
+ sv[Properties].insert(n);
+ else if (n->isPublic())
+ sv[PublicTypes].insert(n);
+ else if (n->isPrivate())
+ sv[PrivateTypes].insert(n);
+ else
+ sv[ProtectedTypes].insert(n);
+}
+
+/*!
+ Inserts the node \a n in one of the entries in the vector \a v
+ depending on the node's type, access attribute, and a few other
+ attributes if the node is a signal, slot, or function.
+ */
+void Sections::distributeNodeInDetailsVector(SectionVector &dv, Node *n)
+{
+ if (n->isSharingComment())
+ return;
+
+ // t is the reference node to be tested - typically it's this node (n), but for
+ // shared comment nodes we need to distribute based on the nodes in its collective.
+ Node *t = n;
+
+ if (n->isSharedCommentNode() && n->hasDoc()) {
+ auto *scn = static_cast<SharedCommentNode *>(n);
+ if (scn->collective().size())
+ t = scn->collective().first(); // TODO: warn about mixed node types in collective?
+ }
+
+ if (t->isFunction()) {
+ auto *fn = static_cast<FunctionNode *>(t);
+ if (fn->isRelatedNonmember()) {
+ if (fn->isMacro())
+ dv[DetailsMacros].insert(n);
+ else
+ dv[DetailsRelatedNonmembers].insert(n);
+ return;
+ }
+ if (fn->isIgnored())
+ return;
+ if (!fn->hasAssociatedProperties() || !fn->doc().isEmpty())
+ dv[DetailsMemberFunctions].insert(n);
+ return;
+ }
+ if (t->isRelatedNonmember()) {
+ dv[DetailsRelatedNonmembers].insert(n);
+ return;
+ }
+ if (t->isEnumType() || t->isTypedef()) {
+ if (t->name() != QLatin1String("QtGadgetHelper"))
+ dv[DetailsMemberTypes].insert(n);
+ return;
+ }
+ if (t->isProperty())
+ dv[DetailsProperties].insert(n);
+ else if (t->isVariable() && !t->doc().isEmpty())
+ dv[DetailsMemberVariables].insert(n);
+}
+
+void Sections::distributeQmlNodeInDetailsVector(SectionVector &dv, Node *n)
+{
+ if (n->isSharingComment())
+ return;
+
+ // t is the reference node to be tested - typically it's this node (n), but for
+ // shared comment nodes we need to distribute based on the nodes in its collective.
+ Node *t = n;
+
+ if (n->isSharedCommentNode() && n->hasDoc()) {
+ if (n->isPropertyGroup()) {
+ dv[QmlProperties].insert(n);
+ return;
+ }
+ auto *scn = static_cast<SharedCommentNode *>(n);
+ if (scn->collective().size())
+ t = scn->collective().first(); // TODO: warn about mixed node types in collective?
+ }
+
+ if (t->isQmlProperty()) {
+ auto *pn = static_cast<QmlPropertyNode *>(t);
+ if (pn->isAttached())
+ dv[QmlAttachedProperties].insert(n);
+ else
+ dv[QmlProperties].insert(n);
+ } else if (t->isFunction()) {
+ auto *fn = static_cast<FunctionNode *>(t);
+ if (fn->isQmlSignal()) {
+ if (fn->isAttached())
+ dv[QmlAttachedSignals].insert(n);
+ else
+ dv[QmlSignals].insert(n);
+ } else if (fn->isQmlSignalHandler()) {
+ dv[QmlSignalHandlers].insert(n);
+ } else if (fn->isQmlMethod()) {
+ if (fn->isAttached())
+ dv[QmlAttachedMethods].insert(n);
+ else
+ dv[QmlMethods].insert(n);
+ }
+ }
+}
+
+/*!
+ Distributes a node \a n into the correct place in the summary section vector \a sv.
+ Nodes that are sharing a comment are handled recursively - for recursion, the \a
+ sharing parameter is set to \c true.
+ */
+void Sections::distributeQmlNodeInSummaryVector(SectionVector &sv, Node *n, bool sharing)
+{
+ if (n->isSharingComment() && !sharing)
+ return;
+ if (n->isQmlProperty()) {
+ auto *pn = static_cast<QmlPropertyNode *>(n);
+ if (pn->isAttached())
+ sv[QmlAttachedProperties].insert(pn);
+ else
+ sv[QmlProperties].insert(pn);
+ } else if (n->isFunction()) {
+ auto *fn = static_cast<FunctionNode *>(n);
+ if (fn->isQmlSignal()) {
+ if (fn->isAttached())
+ sv[QmlAttachedSignals].insert(fn);
+ else
+ sv[QmlSignals].insert(fn);
+ } else if (fn->isQmlSignalHandler()) {
+ sv[QmlSignalHandlers].insert(fn);
+ } else if (fn->isQmlMethod()) {
+ if (fn->isAttached())
+ sv[QmlAttachedMethods].insert(fn);
+ else
+ sv[QmlMethods].insert(fn);
+ }
+ } else if (n->isSharedCommentNode()) {
+ auto *scn = static_cast<SharedCommentNode *>(n);
+ if (scn->isPropertyGroup()) {
+ sv[QmlProperties].insert(scn);
+ } else {
+ for (const auto &child : scn->collective())
+ distributeQmlNodeInSummaryVector(sv, child, true);
+ }
+ }
+}
+
+static void pushBaseClasses(QStack<ClassNode *> &stack, ClassNode *cn)
+{
+ const QList<RelatedClass> baseClasses = cn->baseClasses();
+ for (const auto &cls : baseClasses) {
+ if (cls.m_node)
+ stack.prepend(cls.m_node);
+ }
+}
+
+/*!
+ Build the section vectors for a standard reference page,
+ when the aggregate node is a C++.
+ */
+void Sections::buildStdCppClassRefPageSections()
+{
+ SectionVector &summarySections = stdCppClassSummarySections();
+ SectionVector &detailsSections = stdCppClassDetailsSections();
+ Section &allMembers = allMembersSection();
+
+ for (auto it = m_aggregate->constBegin(); it != m_aggregate->constEnd(); ++it) {
+ Node *n = *it;
+ if (!n->isPrivate() && !n->isProperty() && !n->isRelatedNonmember()
+ && !n->isSharedCommentNode())
+ allMembers.insert(n);
+
+ distributeNodeInSummaryVector(summarySections, n);
+ distributeNodeInDetailsVector(detailsSections, n);
+ }
+ if (!m_aggregate->relatedByProxy().isEmpty()) {
+ const QList<Node *> relatedBy = m_aggregate->relatedByProxy();
+ for (const auto &node : relatedBy)
+ distributeNodeInSummaryVector(summarySections, node);
+ }
+
+ QStack<ClassNode *> stack;
+ auto *cn = static_cast<ClassNode *>(m_aggregate);
+ pushBaseClasses(stack, cn);
+ while (!stack.isEmpty()) {
+ ClassNode *cn = stack.pop();
+ for (auto it = cn->constBegin(); it != cn->constEnd(); ++it) {
+ Node *n = *it;
+ if (!n->isPrivate() && !n->isProperty() && !n->isRelatedNonmember()
+ && !n->isSharedCommentNode())
+ allMembers.insert(n);
+ }
+ pushBaseClasses(stack, cn);
+ }
+ reduce(summarySections);
+ reduce(detailsSections);
+ allMembers.reduce();
+}
+
+/*!
+ Build the section vectors for a standard reference page,
+ when the aggregate node is a QML type.
+ */
+void Sections::buildStdQmlTypeRefPageSections()
+{
+ ClassNodes *classNodes = nullptr;
+ SectionVector &summarySections = stdQmlTypeSummarySections();
+ SectionVector &detailsSections = stdQmlTypeDetailsSections();
+ Section &allMembers = allMembersSection();
+
+ const Aggregate *qtn = m_aggregate;
+ while (qtn) {
+ if (!qtn->isAbstract() || !classNodes)
+ classNodes = &allMembers.classNodesList().emplace_back(static_cast<const QmlTypeNode*>(qtn), NodeVector{});
+ for (const auto n : qtn->childNodes()) {
+ if (n->isInternal())
+ continue;
+
+ // Skip overridden property/function documentation from abstract base type
+ if (qtn != m_aggregate && qtn->isAbstract()) {
+ NodeList candidates;
+ m_aggregate->findChildren(n->name(), candidates);
+ if (std::any_of(candidates.cbegin(), candidates.cend(), [&n](const Node *c) {
+ if (c->nodeType() == n->nodeType()) {
+ if (!n->isFunction() ||
+ compare(static_cast<const FunctionNode *>(n),
+ static_cast<const FunctionNode *>(c)) == 0)
+ return true;
+ }
+ return false;
+ })) {
+ continue;
+ }
+ }
+
+ if (!n->isSharedCommentNode() || n->isPropertyGroup()) {
+ allMembers.insert(n);
+ classNodes->second.push_back(n);
+ }
+
+
+ if (qtn == m_aggregate || qtn->isAbstract()) {
+ distributeQmlNodeInSummaryVector(summarySections, n);
+ distributeQmlNodeInDetailsVector(detailsSections, n);
+ }
+ }
+ if (qtn->qmlBaseNode() == qtn) {
+ qCDebug(lcQdoc, "error: circular type definition: '%s' inherits itself",
+ qPrintable(qtn->name()));
+ break;
+ }
+ qtn = static_cast<QmlTypeNode *>(qtn->qmlBaseNode());
+ }
+
+ reduce(summarySections);
+ reduce(detailsSections);
+ allMembers.reduce();
+}
+
+/*!
+ Returns true if any sections in this object contain obsolete
+ members. If it returns false, then \a summary_spv and \a details_spv
+ have not been modified. Otherwise, both vectors will contain pointers
+ to the sections that contain obsolete members.
+ */
+bool Sections::hasObsoleteMembers(SectionPtrVector *summary_spv,
+ SectionPtrVector *details_spv) const
+{
+ const SectionVector *sections = nullptr;
+ if (m_aggregate->isClassNode())
+ sections = &stdCppClassSummarySections();
+ else if (m_aggregate->isQmlType())
+ sections = &stdQmlTypeSummarySections();
+ else
+ sections = &stdSummarySections();
+ for (const auto &section : *sections) {
+ if (!section.obsoleteMembers().isEmpty())
+ summary_spv->append(&section);
+ }
+ if (m_aggregate->isClassNode())
+ sections = &stdCppClassDetailsSections();
+ else if (m_aggregate->isQmlType())
+ sections = &stdQmlTypeDetailsSections();
+ else
+ sections = &stdDetailsSections();
+ for (const auto &it : *sections) {
+ if (!it.obsoleteMembers().isEmpty())
+ details_spv->append(&it);
+ }
+ return !summary_spv->isEmpty();
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/sections.h b/src/qdoc/qdoc/src/qdoc/sections.h
new file mode 100644
index 000000000..70c73a91c
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/sections.h
@@ -0,0 +1,206 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef SECTIONS_H
+#define SECTIONS_H
+
+#include "node.h"
+
+QT_BEGIN_NAMESPACE
+
+class Aggregate;
+
+typedef std::pair<const QmlTypeNode *, NodeVector> ClassNodes;
+typedef QList<ClassNodes> ClassNodesList;
+
+class Section
+{
+public:
+ enum Style { Summary, Details, AllMembers, Accessors };
+
+public:
+ Section(
+ QString title, QString singular, QString plural,
+ QString divclass, Style style
+ ) : m_title{title}, m_singular{singular}, m_plural{plural},
+ m_divClass{divclass}, m_style{style}
+ {}
+
+ ~Section();
+
+ void insert(Node *node);
+ bool insertReimplementedMember(Node *node);
+
+ void appendMember(Node *node) { m_members.append(node); }
+
+ void clear();
+ void reduce();
+ [[nodiscard]] bool isEmpty() const
+ {
+ return (m_members.isEmpty() && m_inheritedMembers.isEmpty()
+ && m_reimplementedMemberMap.isEmpty() && m_classNodesList.isEmpty());
+ }
+
+ [[nodiscard]] Style style() const { return m_style; }
+ [[nodiscard]] const QString &title() const { return m_title; }
+ [[nodiscard]] const QString &divClass() const { return m_divClass; }
+ [[nodiscard]] const QString &singular() const { return m_singular; }
+ [[nodiscard]] const QString &plural() const { return m_plural; }
+ [[nodiscard]] const NodeVector &members() const { return m_members; }
+ [[nodiscard]] const NodeVector &reimplementedMembers() const { return m_reimplementedMembers; }
+ [[nodiscard]] const QList<std::pair<Aggregate *, int>> &inheritedMembers() const
+ {
+ return m_inheritedMembers;
+ }
+ ClassNodesList &classNodesList() { return m_classNodesList; }
+ [[nodiscard]] const NodeVector &obsoleteMembers() const { return m_obsoleteMembers; }
+ void appendMembers(const NodeVector &nv) { m_members.append(nv); }
+ [[nodiscard]] const Aggregate *aggregate() const { return m_aggregate; }
+ void setAggregate(Aggregate *t) { m_aggregate = t; }
+
+private:
+ QString m_title {};
+ QString m_singular {};
+ QString m_plural {};
+ QString m_divClass {};
+ Style m_style {};
+
+ Aggregate *m_aggregate { nullptr };
+ NodeVector m_members {};
+ NodeVector m_obsoleteMembers {};
+ NodeVector m_reimplementedMembers {};
+ QList<std::pair<Aggregate *, int>> m_inheritedMembers {};
+ ClassNodesList m_classNodesList {};
+
+ QMultiMap<QString, Node *> m_reimplementedMemberMap {};
+};
+
+typedef QList<Section> SectionVector;
+typedef QList<const Section *> SectionPtrVector;
+
+class Sections
+{
+public:
+ enum VectorIndex {
+ PublicTypes = 0,
+ DetailsMemberTypes = 0,
+ SinceNamespaces = 0,
+ StdNamespaces = 0,
+ QmlProperties = 0,
+ Properties = 1,
+ DetailsProperties = 1,
+ SinceClasses = 1,
+ StdClasses = 1,
+ QmlAttachedProperties = 1,
+ PublicFunctions = 2,
+ DetailsMemberFunctions = 2,
+ SinceMemberFunctions = 2,
+ StdTypes = 2,
+ QmlSignals = 2,
+ PublicSlots = 3,
+ DetailsMemberVariables = 3,
+ SinceNamespaceFunctions = 3,
+ StdVariables = 3,
+ QmlSignalHandlers = 3,
+ Signals = 4,
+ SinceGlobalFunctions = 4,
+ DetailsRelatedNonmembers = 4,
+ StdStaticVariables = 4,
+ QmlAttachedSignals = 4,
+ PublicVariables = 5,
+ SinceMacros = 5,
+ DetailsMacros = 5,
+ StdFunctions = 5,
+ QmlMethods = 5,
+ StaticPublicMembers = 6,
+ SinceEnumTypes = 6,
+ StdMacros = 6,
+ QmlAttachedMethods = 6,
+ SinceEnumValues = 7,
+ ProtectedTypes = 7,
+ SinceTypeAliases = 8,
+ ProtectedFunctions = 8,
+ SinceProperties = 9,
+ ProtectedSlots = 9,
+ SinceVariables = 10,
+ ProtectedVariables = 10,
+ SinceQmlTypes = 11,
+ StaticProtectedMembers = 11,
+ SinceQmlProperties = 12,
+ PrivateTypes = 12,
+ SinceQmlSignals = 13,
+ PrivateFunctions = 13,
+ SinceQmlSignalHandlers = 14,
+ PrivateSlots = 14,
+ SinceQmlMethods = 15,
+ StaticPrivateMembers = 15,
+ RelatedNonmembers = 16,
+ Macros = 17
+ };
+
+ explicit Sections(Aggregate *aggregate);
+ explicit Sections(const NodeMultiMap &nsmap);
+ ~Sections();
+
+ void clear(SectionVector &v);
+ void reduce(SectionVector &v);
+ void buildStdRefPageSections();
+ void buildStdCppClassRefPageSections();
+ void buildStdQmlTypeRefPageSections();
+
+ bool hasObsoleteMembers(SectionPtrVector *summary_spv, SectionPtrVector *details_spv) const;
+
+ static Section &allMembersSection() { return s_allMembers[0]; }
+ SectionVector &sinceSections() { return s_sinceSections; }
+ SectionVector &stdSummarySections() { return s_stdSummarySections; }
+ SectionVector &stdDetailsSections() { return s_stdDetailsSections; }
+ SectionVector &stdCppClassSummarySections() { return s_stdCppClassSummarySections; }
+ SectionVector &stdCppClassDetailsSections() { return s_stdCppClassDetailsSections; }
+ SectionVector &stdQmlTypeSummarySections() { return s_stdQmlTypeSummarySections; }
+ SectionVector &stdQmlTypeDetailsSections() { return s_stdQmlTypeDetailsSections; }
+
+ [[nodiscard]] const SectionVector &stdSummarySections() const { return s_stdSummarySections; }
+ [[nodiscard]] const SectionVector &stdDetailsSections() const { return s_stdDetailsSections; }
+ [[nodiscard]] const SectionVector &stdCppClassSummarySections() const
+ {
+ return s_stdCppClassSummarySections;
+ }
+ [[nodiscard]] const SectionVector &stdCppClassDetailsSections() const
+ {
+ return s_stdCppClassDetailsSections;
+ }
+ [[nodiscard]] const SectionVector &stdQmlTypeSummarySections() const
+ {
+ return s_stdQmlTypeSummarySections;
+ }
+ [[nodiscard]] const SectionVector &stdQmlTypeDetailsSections() const
+ {
+ return s_stdQmlTypeDetailsSections;
+ }
+
+ [[nodiscard]] Aggregate *aggregate() const { return m_aggregate; }
+
+private:
+ void stdRefPageSwitch(SectionVector &v, Node *n, Node *t = nullptr);
+ void distributeNodeInSummaryVector(SectionVector &sv, Node *n);
+ void distributeNodeInDetailsVector(SectionVector &dv, Node *n);
+ void distributeQmlNodeInDetailsVector(SectionVector &dv, Node *n);
+ void distributeQmlNodeInSummaryVector(SectionVector &sv, Node *n, bool sharing = false);
+ void initAggregate(SectionVector &v, Aggregate *aggregate);
+
+private:
+ Aggregate *m_aggregate { nullptr };
+
+ static SectionVector s_stdSummarySections;
+ static SectionVector s_stdDetailsSections;
+ static SectionVector s_stdCppClassSummarySections;
+ static SectionVector s_stdCppClassDetailsSections;
+ static SectionVector s_stdQmlTypeSummarySections;
+ static SectionVector s_stdQmlTypeDetailsSections;
+ static SectionVector s_sinceSections;
+ static SectionVector s_allMembers;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/sharedcommentnode.cpp b/src/qdoc/qdoc/src/qdoc/sharedcommentnode.cpp
new file mode 100644
index 000000000..05204d1f3
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/sharedcommentnode.cpp
@@ -0,0 +1,56 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "sharedcommentnode.h"
+
+#include "aggregate.h"
+#include "functionnode.h"
+#include "qmltypenode.h"
+
+QT_BEGIN_NAMESPACE
+
+SharedCommentNode::SharedCommentNode(QmlTypeNode *parent, int count, QString &group)
+ : Node(Node::SharedComment, parent, group)
+{
+ m_collective.reserve(count);
+}
+
+/*!
+ Searches the shared comment node's member nodes for function
+ nodes. Each function node's overload flag is set.
+ */
+void SharedCommentNode::setOverloadFlags()
+{
+ for (auto *node : m_collective) {
+ if (node->isFunction())
+ static_cast<FunctionNode *>(node)->setOverloadFlag();
+ }
+}
+
+/*!
+ Clone this node on the heap and make the clone a child of
+ \a parent.
+
+ Returns the pointer to the clone.
+ */
+Node *SharedCommentNode::clone(Aggregate *parent)
+{
+ auto *scn = new SharedCommentNode(*this); // shallow copy
+ scn->setParent(nullptr);
+ parent->addChild(scn);
+
+ return scn;
+}
+
+/*!
+ Sets the related nonmember flag in this node and in each
+ node in the shared comment's collective to \a value.
+ */
+void SharedCommentNode::setRelatedNonmember(bool value)
+{
+ Node::setRelatedNonmember(value);
+ for (auto *node : m_collective)
+ node->setRelatedNonmember(value);
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/sharedcommentnode.h b/src/qdoc/qdoc/src/qdoc/sharedcommentnode.h
new file mode 100644
index 000000000..d319d7c59
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/sharedcommentnode.h
@@ -0,0 +1,51 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef SHAREDCOMMENTNODE_H
+#define SHAREDCOMMENTNODE_H
+
+#include "node.h"
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qlist.h>
+
+QT_BEGIN_NAMESPACE
+
+class Aggregate;
+class QmlTypeNode;
+
+class SharedCommentNode : public Node
+{
+public:
+ explicit SharedCommentNode(Node *node) : Node(Node::SharedComment, node->parent(), QString())
+ {
+ m_collective.reserve(1);
+ append(node);
+ }
+ SharedCommentNode(QmlTypeNode *parent, int count, QString &group);
+ ~SharedCommentNode() override { m_collective.clear(); }
+
+ [[nodiscard]] bool isPropertyGroup() const override
+ {
+ return !name().isEmpty() && !m_collective.isEmpty() && (m_collective.at(0)->isQmlProperty());
+ }
+ [[nodiscard]] qsizetype count() const { return m_collective.size(); }
+ void append(Node *node)
+ {
+ m_collective.append(node);
+ node->setSharedCommentNode(this);
+ setGenus(node->genus());
+ }
+ void sort() { std::sort(m_collective.begin(), m_collective.end(), Node::nodeNameLessThan); }
+ [[nodiscard]] const QList<Node *> &collective() const { return m_collective; }
+ void setOverloadFlags();
+ void setRelatedNonmember(bool value) override;
+ Node *clone(Aggregate *parent) override;
+
+private:
+ QList<Node *> m_collective {};
+};
+
+QT_END_NAMESPACE
+
+#endif // SHAREDCOMMENTNODE_H
diff --git a/src/qdoc/qdoc/src/qdoc/singleton.h b/src/qdoc/qdoc/src/qdoc/singleton.h
new file mode 100644
index 000000000..085a5ea64
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/singleton.h
@@ -0,0 +1,32 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#ifndef SINGLETON_H
+#define SINGLETON_H
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class Singleton
+ \internal
+
+ Class template for singleton objects in QDoc.
+ */
+template<typename T>
+class Singleton
+{
+public:
+ Singleton(const Singleton &) = delete;
+ Singleton &operator=(const Singleton &) = delete;
+ static T &instance()
+ {
+ static T s_instance {};
+ return s_instance;
+ }
+
+protected:
+ Singleton() = default;
+};
+
+QT_END_NAMESPACE
+
+#endif // SINGLETON_H
diff --git a/src/qdoc/qdoc/src/qdoc/sourcefileparser.h b/src/qdoc/qdoc/src/qdoc/sourcefileparser.h
new file mode 100644
index 000000000..95bc71627
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/sourcefileparser.h
@@ -0,0 +1,82 @@
+// 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
+
+#include "clangcodeparser.h"
+#include "puredocparser.h"
+
+#include <variant>
+
+#include <QString>
+#include <QFileInfo>
+
+struct CppSourceFile {};
+struct QDocSourceFile {};
+struct JsSourceFile {};
+struct UnknownSourceFile {};
+
+using SourceFileTag = std::variant<CppSourceFile, QDocSourceFile, JsSourceFile, UnknownSourceFile>;
+using TaggedSourceFile = std::pair<QString, SourceFileTag>;
+
+inline TaggedSourceFile tag_source_file(const QString& path) {
+ static QStringList cpp_file_extensions{
+ "c++", "cc", "cpp", "cxx", "mm"
+ };
+ static QStringList qdoc_file_extensions{ "qdoc" };
+ static QStringList javascript_file_extensions{ "js" };
+
+ QString extension{QFileInfo(path).suffix()};
+
+ if (cpp_file_extensions.contains(extension)) return TaggedSourceFile{path, CppSourceFile{}};
+ else if (qdoc_file_extensions.contains(extension)) return TaggedSourceFile{path, QDocSourceFile{}};
+ else if (javascript_file_extensions.contains(extension)) return TaggedSourceFile{path, JsSourceFile{}};
+
+ return TaggedSourceFile{path, UnknownSourceFile{}};
+}
+
+class SourceFileParser {
+public:
+ struct ParseResult {
+ std::vector<UntiedDocumentation> untied;
+ std::vector<TiedDocumentation> tied;
+ };
+
+public:
+ SourceFileParser(ClangCodeParser& clang_parser, PureDocParser& pure_parser)
+ : cpp_file_parser(clang_parser),
+ pure_file_parser(pure_parser)
+ {}
+
+ ParseResult operator()(const TaggedSourceFile& source) {
+ if (std::holds_alternative<CppSourceFile>(source.second))
+ return (*this)(source.first, std::get<CppSourceFile>(source.second));
+ else if (std::holds_alternative<QDocSourceFile>(source.second))
+ return (*this)(source.first, std::get<QDocSourceFile>(source.second));
+ else if (std::holds_alternative<JsSourceFile>(source.second))
+ return (*this)(source.first, std::get<JsSourceFile>(source.second));
+ else if (std::holds_alternative<UnknownSourceFile>(source.second))
+ return {{}, {}};
+
+ Q_UNREACHABLE();
+ }
+
+private:
+ ParseResult operator()(const QString& path, CppSourceFile) {
+ auto [untied, tied] = cpp_file_parser.parse_cpp_file(path);
+
+ return {untied, tied};
+ }
+
+ ParseResult operator()(const QString& path, QDocSourceFile) {
+ return {pure_file_parser.parse_qdoc_file(path), {}};
+ }
+
+ ParseResult operator()(const QString& path, JsSourceFile) {
+ return {pure_file_parser.parse_qdoc_file(path), {}};
+ }
+
+private:
+ ClangCodeParser& cpp_file_parser;
+ PureDocParser& pure_file_parser;
+};
diff --git a/src/qdoc/qdoc/src/qdoc/tagfilewriter.cpp b/src/qdoc/qdoc/src/qdoc/tagfilewriter.cpp
new file mode 100644
index 000000000..7b6b496ca
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/tagfilewriter.cpp
@@ -0,0 +1,306 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "tagfilewriter.h"
+
+#include "access.h"
+#include "aggregate.h"
+#include "classnode.h"
+#include "enumnode.h"
+#include "functionnode.h"
+#include "htmlgenerator.h"
+#include "location.h"
+#include "node.h"
+#include "propertynode.h"
+#include "qdocdatabase.h"
+#include "typedefnode.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class TagFileWriter
+
+ This class handles the generation of the QDoc tag files.
+ */
+
+/*!
+ Default constructor. \a qdb is the pointer to the
+ qdoc database that is used when reading and writing the
+ index files.
+ */
+TagFileWriter::TagFileWriter() : m_qdb(QDocDatabase::qdocDB()) { }
+
+/*!
+ Generate the tag file section with the given \a writer for the \a parent
+ node.
+ */
+void TagFileWriter::generateTagFileCompounds(QXmlStreamWriter &writer, const Aggregate *parent)
+{
+ const auto &nonFunctionList = const_cast<Aggregate *>(parent)->nonfunctionList();
+ for (const auto *node : nonFunctionList) {
+ if (!node->url().isNull() || node->isPrivate())
+ continue;
+
+ QString kind;
+ switch (node->nodeType()) {
+ case Node::Namespace:
+ kind = "namespace";
+ break;
+ case Node::Class:
+ case Node::Struct:
+ case Node::Union:
+ case Node::QmlType:
+ kind = "class";
+ break;
+ default:
+ continue;
+ }
+ const auto *aggregate = static_cast<const Aggregate *>(node);
+
+ QString access = "public";
+ if (node->isProtected())
+ access = "protected";
+
+ QString objName = node->name();
+
+ // Special case: only the root node should have an empty name.
+ if (objName.isEmpty() && node != m_qdb->primaryTreeRoot())
+ continue;
+
+ // *** Write the starting tag for the element here. ***
+ writer.writeStartElement("compound");
+ writer.writeAttribute("kind", kind);
+
+ if (node->isClassNode()) {
+ writer.writeTextElement("name", node->fullDocumentName());
+ writer.writeTextElement("filename", m_generator->fullDocumentLocation(node));
+
+ // Classes contain information about their base classes.
+ const auto *classNode = static_cast<const ClassNode *>(node);
+ const QList<RelatedClass> &bases = classNode->baseClasses();
+ for (const auto &related : bases) {
+ ClassNode *n = related.m_node;
+ if (n)
+ writer.writeTextElement("base", n->name());
+ }
+
+ // Recurse to write all members.
+ generateTagFileMembers(writer, aggregate);
+ writer.writeEndElement();
+
+ // Recurse to write all compounds.
+ generateTagFileCompounds(writer, aggregate);
+ } else {
+ writer.writeTextElement("name", node->fullDocumentName());
+ writer.writeTextElement("filename", m_generator->fullDocumentLocation(node));
+
+ // Recurse to write all members.
+ generateTagFileMembers(writer, aggregate);
+ writer.writeEndElement();
+
+ // Recurse to write all compounds.
+ generateTagFileCompounds(writer, aggregate);
+ }
+ }
+}
+
+/*!
+ Writes all the members of the \a parent node with the \a writer.
+ The node represents a C++ class, namespace, etc.
+ */
+void TagFileWriter::generateTagFileMembers(QXmlStreamWriter &writer, const Aggregate *parent)
+{
+ auto childNodes = parent->childNodes();
+ std::sort(childNodes.begin(), childNodes.end(), Node::nodeNameLessThan);
+ for (const auto *node : childNodes) {
+ if (!node->url().isNull())
+ continue;
+
+ QString nodeName;
+ QString kind;
+ switch (node->nodeType()) {
+ case Node::Enum:
+ nodeName = "member";
+ kind = "enumeration";
+ break;
+ case Node::TypeAlias: // Treated as typedef
+ case Node::Typedef:
+ nodeName = "member";
+ kind = "typedef";
+ break;
+ case Node::Property:
+ nodeName = "member";
+ kind = "property";
+ break;
+ case Node::Function:
+ nodeName = "member";
+ kind = "function";
+ break;
+ case Node::Namespace:
+ nodeName = "namespace";
+ break;
+ case Node::Class:
+ case Node::Struct:
+ case Node::Union:
+ nodeName = "class";
+ break;
+ case Node::Variable:
+ default:
+ continue;
+ }
+
+ QString access;
+ switch (node->access()) {
+ case Access::Public:
+ access = "public";
+ break;
+ case Access::Protected:
+ access = "protected";
+ break;
+ case Access::Private:
+ default:
+ continue;
+ }
+
+ QString objName = node->name();
+
+ // Special case: only the root node should have an empty name.
+ if (objName.isEmpty() && node != m_qdb->primaryTreeRoot())
+ continue;
+
+ // *** Write the starting tag for the element here. ***
+ writer.writeStartElement(nodeName);
+ if (!kind.isEmpty())
+ writer.writeAttribute("kind", kind);
+
+ switch (node->nodeType()) {
+ case Node::Class:
+ case Node::Struct:
+ case Node::Union:
+ writer.writeCharacters(node->fullDocumentName());
+ writer.writeEndElement();
+ break;
+ case Node::Namespace:
+ writer.writeCharacters(node->fullDocumentName());
+ writer.writeEndElement();
+ break;
+ case Node::Function: {
+ /*
+ Function nodes contain information about
+ the type of function being described.
+ */
+
+ const auto *functionNode = static_cast<const FunctionNode *>(node);
+ writer.writeAttribute("protection", access);
+ writer.writeAttribute("virtualness", functionNode->virtualness());
+ writer.writeAttribute("static", functionNode->isStatic() ? "yes" : "no");
+
+ if (functionNode->isNonvirtual())
+ writer.writeTextElement("type", functionNode->returnType());
+ else
+ writer.writeTextElement("type", "virtual " + functionNode->returnType());
+
+ writer.writeTextElement("name", objName);
+ const QStringList pieces =
+ m_generator->fullDocumentLocation(node).split(QLatin1Char('#'));
+ writer.writeTextElement("anchorfile", pieces[0]);
+ writer.writeTextElement("anchor", pieces[1]);
+ QString signature = functionNode->signature(Node::SignatureReturnType);
+ signature = signature.mid(signature.indexOf(QChar('('))).trimmed();
+ if (functionNode->isConst())
+ signature += " const";
+ if (functionNode->isFinal())
+ signature += " final";
+ if (functionNode->isOverride())
+ signature += " override";
+ if (functionNode->isPureVirtual())
+ signature += " = 0";
+ writer.writeTextElement("arglist", signature);
+ }
+ writer.writeEndElement(); // member
+ break;
+ case Node::Property: {
+ const auto *propertyNode = static_cast<const PropertyNode *>(node);
+ writer.writeAttribute("type", propertyNode->dataType());
+ writer.writeTextElement("name", objName);
+ const QStringList pieces =
+ m_generator->fullDocumentLocation(node).split(QLatin1Char('#'));
+ writer.writeTextElement("anchorfile", pieces[0]);
+ writer.writeTextElement("anchor", pieces[1]);
+ writer.writeTextElement("arglist", QString());
+ }
+ writer.writeEndElement(); // member
+ break;
+ case Node::Enum: {
+ const auto *enumNode = static_cast<const EnumNode *>(node);
+ writer.writeTextElement("name", objName);
+ const QStringList pieces =
+ m_generator->fullDocumentLocation(node).split(QLatin1Char('#'));
+ writer.writeTextElement("anchorfile", pieces[0]);
+ writer.writeTextElement("anchor", pieces[1]);
+ writer.writeEndElement(); // member
+
+ for (const auto &item : enumNode->items()) {
+ writer.writeStartElement("member");
+ writer.writeAttribute("kind", "enumvalue");
+ writer.writeTextElement("name", item.name());
+ writer.writeTextElement("anchorfile", pieces[0]);
+ writer.writeTextElement("anchor", pieces[1]);
+ writer.writeTextElement("arglist", QString());
+ writer.writeEndElement(); // member
+ }
+ } break;
+ case Node::TypeAlias: // Treated as typedef
+ case Node::Typedef: {
+ const auto *typedefNode = static_cast<const TypedefNode *>(node);
+ if (typedefNode->associatedEnum())
+ writer.writeAttribute("type", typedefNode->associatedEnum()->fullDocumentName());
+ else
+ writer.writeAttribute("type", QString());
+ writer.writeTextElement("name", objName);
+ const QStringList pieces =
+ m_generator->fullDocumentLocation(node).split(QLatin1Char('#'));
+ writer.writeTextElement("anchorfile", pieces[0]);
+ writer.writeTextElement("anchor", pieces[1]);
+ writer.writeTextElement("arglist", QString());
+ }
+ writer.writeEndElement(); // member
+ break;
+
+ case Node::Variable:
+ default:
+ break;
+ }
+ }
+}
+
+/*!
+ Writes a tag file named \a fileName.
+ */
+void TagFileWriter::generateTagFile(const QString &fileName, Generator *g)
+{
+ QFile file(fileName);
+ QFileInfo fileInfo(fileName);
+
+ // If no path was specified or it doesn't exist,
+ // default to the output directory
+ if (fileInfo.fileName() == fileName || !fileInfo.dir().exists())
+ file.setFileName(m_generator->outputDir() + QLatin1Char('/') + fileInfo.fileName());
+
+ if (!file.open(QFile::WriteOnly | QFile::Text)) {
+ Location().warning(QString("Failed to open %1 for writing.").arg(file.fileName()));
+ return;
+ }
+
+ m_generator = g;
+ QXmlStreamWriter writer(&file);
+ writer.setAutoFormatting(true);
+ writer.writeStartDocument();
+ writer.writeStartElement("tagfile");
+ generateTagFileCompounds(writer, m_qdb->primaryTreeRoot());
+ writer.writeEndElement(); // tagfile
+ writer.writeEndDocument();
+ file.close();
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/tagfilewriter.h b/src/qdoc/qdoc/src/qdoc/tagfilewriter.h
new file mode 100644
index 000000000..40a1ed399
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/tagfilewriter.h
@@ -0,0 +1,33 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef TAGFILEWRITER_H
+#define TAGFILEWRITER_H
+
+#include <QtCore/qxmlstream.h>
+
+QT_BEGIN_NAMESPACE
+
+class Aggregate;
+class Generator;
+class QDocDatabase;
+
+class TagFileWriter
+{
+public:
+ TagFileWriter();
+ ~TagFileWriter() = default;
+
+ void generateTagFile(const QString &fileName, Generator *generator);
+
+private:
+ void generateTagFileCompounds(QXmlStreamWriter &writer, const Aggregate *inner);
+ void generateTagFileMembers(QXmlStreamWriter &writer, const Aggregate *inner);
+
+ QDocDatabase *m_qdb { nullptr };
+ Generator *m_generator { nullptr };
+};
+
+QT_END_NAMESPACE
+
+#endif // TAGFILEWRITER_H
diff --git a/src/qdoc/qdoc/src/qdoc/template_declaration.h b/src/qdoc/qdoc/src/qdoc/template_declaration.h
new file mode 100644
index 000000000..a0aade682
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/template_declaration.h
@@ -0,0 +1,502 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include <algorithm>
+#include <cstdint>
+#include <functional>
+#include <numeric>
+#include <optional>
+#include <string>
+#include <vector>
+
+#include <QString>
+
+/*
+ * Represents a general declaration that has a form that can be
+ * described by a type, name and initializer triplet, or any such form
+ * that can be described by zero or more of those same parts.
+ *
+ * For example, it can be used to represent a C++ variable declaration
+ * such as:
+ *
+ * std::vector<int> foo = { 1, 2, 3 };
+ *
+ * Where `std::vector<int>` is the type, `foo` is the name and `{ 1, 2,
+ * 3 }` is the initializer.
+ *
+ * Similarly, it can be used to represent a non-type template parameter
+ * declaration, such as the `foo` parameter in:
+ *
+ * template<int foo = 10>
+ *
+ * Where `int` is the type, `foo` is the name and `10` is the
+ * initializer.
+ *
+ * An instance can be used to represent less information dense elements
+ * by setting one or more of the fields as the empty string.
+ *
+ * For example, a template type parameter such as `T` in:
+ *
+ * template<typename T = int>
+ *
+ * Can be represented by an instance that has an empty string as the
+ * type, `T` as the name and `int` as the initializer.
+ *
+ * In general, it can be used to represent any such element that has
+ * zero or more of the three components, albeit, in QDoc, it is
+ * specifically intended to be used to represent various C++
+ * declarations.
+ *
+ * All three fields are lowered stringified version of the original
+ * declaration, so that the type should be used at the end of a
+ * pipeline where the semantic property of the represented code are not
+ * required.
+ */
+struct ValuedDeclaration
+{
+ struct PrintingPolicy
+ {
+ bool include_type = true;
+ bool include_name = true;
+ bool include_initializer = true;
+ };
+
+ std::string type;
+ std::string name;
+ std::string initializer;
+
+ // KLUDGE: Workaround for
+ // https://stackoverflow.com/questions/53408962/try-to-understand-compiler-error-message-default-member-initializer-required-be
+ static PrintingPolicy default_printing_policy() { return PrintingPolicy{}; }
+
+ /*
+ * Constructs and returns a human-readable representation of this
+ * declaration.
+ *
+ * The constructed string is formatted so that as to rebuild a
+ * possible version of the C++ code that is modeled by an instance
+ * of this type.
+ *
+ * Each component participates in the human-presentable version if
+ * it they are not the empty string.
+ *
+ * The "type" and "name" component participate with their literal
+ * representation.
+ *
+ * The "iniitlalizer" components contributes an equal symbol,
+ * followed by a space followed by the literal representation of
+ * the component.
+ *
+ * The component contributes in an ordered way, with "type"
+ * contributing first, "name" contributing second and
+ * "initializer" contributing last.
+ *
+ * Each contribution is separated by a space if the component that
+ * comes before it, if any, has contributed to the human-readable
+ * representation.
+ *
+ * For example, an instance of this type that has "type" component
+ * "int", "name" component "foo" and "iniitializer" component
+ * "100", would be represented as:
+ *
+ * int foo = 100
+ *
+ * Where "int" is the "type" component contribution, "foo" is the
+ * "name" component contribution and "= 100" is the "initializer"
+ * component contribution.
+ * Each of those contribution is separated by a space, as each
+ * "preceding" component has contributed to the representation.
+ *
+ * If we provide a similar instance with, for example, the "type"
+ * and "name" components as the empty string, then the
+ * representation would be "= 100", which is the "initializer"
+ * component contribution, the only component that is not the
+ * empty string.
+ *
+ * The policy argument allows to treat certain components as if
+ * they were the empty string.
+ *
+ * For example, given an instance of this type that has "type"
+ * component "double", "name" component "bar" and "iniitializer"
+ * component "10.2", its human-readable representation would be
+ * "double bar = 10.2".
+ *
+ * If the representation of that same instance was obtained by
+ * using a policy that excludes the "name" component, then that
+ * representation would be "double = 10.2", which is equivalent
+ * to the representation of an instance that is the same as the
+ * orginal one with the "name" component as the empty string.
+ */
+ inline std::string to_std_string(PrintingPolicy policy = default_printing_policy()) const
+ {
+ std::string s{};
+
+ if (!type.empty() && policy.include_type)
+ s += (s.empty() ? "" : " ") + type;
+
+ if (!name.empty() && policy.include_name)
+ s += (s.empty() ? "" : " ") + name;
+
+ if (!initializer.empty() && policy.include_initializer)
+ s += (s.empty() ? "= " : " = ") + initializer;
+
+ return s;
+ }
+};
+
+struct RelaxedTemplateParameter;
+
+struct TemplateDeclarationStorage
+{
+ std::vector<RelaxedTemplateParameter> parameters;
+
+ inline std::string to_std_string() const;
+};
+
+/*
+ * Represents a C++ template parameter.
+ *
+ * The model used by this representation is a slighly simplified
+ * model.
+ *
+ * In the model, template parameters are one of:
+ *
+ * - A type template parameter.
+ * - A non type template parameter.
+ * - A template template parameter.
+ *
+ * Furthermore, each parameter can:
+ *
+ * - Be a parameter pack.
+ * - Carry an additional template declaration (as a template template
+ * parameter would).
+ * - Have no declared type.
+ * - Have no declared name.
+ * - Have no declared initializer.
+ *
+ * Due to this simplified model certain incorrect parameters can be
+ * represented.
+ *
+ * For example, it might be possible to represent a parameter pack
+ * that has a default initializer, a non-type template parameter that
+ * has no type or a template template parameter that carries no
+ * template declaration.
+ *
+ * The model further elides some of the semantic that might be carried
+ * by a parameter.
+ * For example, the model has no specific concept for template
+ * constraints.
+ *
+ * Template parameters can be represented as instances of the type.
+ *
+ * For example, a type template parameter `typename T` can be
+ * represented as the following instance:
+ *
+ * RelaxedTemplateParameter{
+ * RelaxedTemplateParameter::Kind::TypeTemplateParameter,
+ * false,
+ * {
+ * "",
+ * "T",
+ * ""
+ * },
+ * {}
+ * };
+ *
+ * And a non-type template parameter pack "int... Args" as:
+ *
+ * RelaxedTemplateParameter{
+ * RelaxedTemplateParameter::Kind::NonTypeTemplateParameter,
+ * true,
+ * {
+ * "int",
+ * "Args",
+ * ""
+ * },
+ * {}
+ * };
+ *
+ * Due to the relaxed constraint and the representable incorrect
+ * parameters, the type is intended to be used for data that is
+ * already validated and known to be correct, such as data that is
+ * extracted from Clang.
+ */
+struct RelaxedTemplateParameter
+{
+ enum class Kind : std::uint8_t {
+ TypeTemplateParameter,
+ NonTypeTemplateParameter,
+ TemplateTemplateParameter
+ };
+
+ Kind kind;
+ bool is_parameter_pack;
+ ValuedDeclaration valued_declaration;
+ std::optional<TemplateDeclarationStorage> template_declaration;
+
+ /*
+ * Constructs and returns a human-readable representation of this
+ * parameter.
+ *
+ * The constructed string is formatted so that as to rebuild a
+ * possible version of the C++ code that is modeled by an instance
+ * of this type.
+ *
+ * The format of the representation varies based on the "kind" of
+ * the parameter.
+ *
+ * - A "TypeTemplateParameter", is constructed as the
+ * concatenation of the literal "typename", followed by the
+ * literal "..." if the parameter is a pack, followed by the
+ * human-readable representaion of "valued_declaration".
+ *
+ * If the human-readable representation of
+ * "valued_declaration" is not the empty string, it is
+ * preceded by a space when it contributes to the
+ * representation.
+ *
+ * For example, the C++ type template parameter "typename Foo
+ * = int", would be represented by the instance:
+ *
+ * RelaxedTemplateParameter{
+ * RelaxedTemplateParameter::Kind::TypeTemplateParameter,
+ * false,
+ * {
+ * "",
+ * "Foo",
+ * "int"
+ * },
+ * {}
+ * };
+ *
+ * And its representation would be:
+ *
+ * typename Foo = int
+ *
+ * Where "typename" is the added literal and "Foo = int" is
+ * the representation for "valued_declaration", with a space
+ * in-between the two contributions.
+ *
+ * - A "NonTypeTemplateParameter", is constructed by the
+ * contribution of the "type" compoment of "valued_declaration",
+ * followed by the literal "..." if the parameter is a pack,
+ * followed by the human-presentable version of
+ * "valued_declaration" without its "type" component
+ * contribution.
+ *
+ * If the contribution of the "type" component of
+ * "valued_declaration" is not empty, the next contribution is
+ * preceded by a space.
+ *
+ * For example, the C++ non-type template parameter "int...
+ * SIZE", would be represented by the instance:
+ *
+ *
+ * RelaxedTemplateParameter{
+ * RelaxedTemplateParameter::Kind::NonTypeTemplateParameter,
+ * true,
+ * {
+ * "int",
+ * "SIZE",
+ * ""
+ * },
+ * {}
+ * };
+ *
+ * And its representation would be:
+ *
+ * int... SIZE
+ *
+ * Where "int" is the "type" component contribution of
+ * "valued_declaration", "..." is the added literal due to
+ * the parameter being a pack and " SIZE" being the
+ * human-readable representation of "valued_declaration"
+ * without its "type" component contribution, preceded by a
+ * space.
+ *
+ * - A "TemplateTemplateParameter", is constructed by the
+ * contribution of the human-presentable representation of
+ * "template_declaration", followed by the representation of
+ * this parameter if it was a "TypeTemplateParameter", with a
+ * space between the two contributions if the
+ * human-presentable representation of "template_declaration"
+ * is not empty.
+ *
+ * For example, the C++ template template template parameter
+ * "template<typename> T", would be represented by the
+ * instance:
+ *
+ *
+ * RelaxedTemplateParameter{
+ * RelaxedTemplateParameter::Kind::TemplateTemplateParameter,
+ * false,
+ * {
+ * "",
+ * "T",
+ * ""
+ * },
+ * {
+ * RelaxedTemplateParameter{
+ * RelaxedTemplateParameter::Kind::TypeTemplateParameter,
+ * false,
+ * {
+ * "",
+ * "",
+ * ""
+ * },
+ * {}
+ * }
+ * }
+ * };
+ *
+ * And its representation would be:
+ *
+ * template <typename> typename T
+ *
+ * Where "template <typename>" human-presentable version of
+ * "template_declaration" and "typename T" is the
+ * human-presentable version of this parameter if it was a
+ * type template parameter.
+ *
+ * With a space between the two contributions.
+ */
+ inline std::string to_std_string() const
+ {
+ switch (kind) {
+ // TODO: This can probably be moved under the template
+ // template parameter case and reused through a fallback.
+ case Kind::TypeTemplateParameter: {
+ std::string valued_declaration_string = valued_declaration.to_std_string();
+
+ return std::string("typename") + (is_parameter_pack ? "..." : "")
+ + (valued_declaration_string.empty() ? "" : " ") + valued_declaration_string;
+ }
+ case Kind::NonTypeTemplateParameter: {
+ std::string type_string = valued_declaration.type + (is_parameter_pack ? "..." : "");
+
+ return type_string + (type_string.empty() ? "" : " ")
+ + valued_declaration.to_std_string(
+ ValuedDeclaration::PrintingPolicy{ false, true, true });
+ }
+ case Kind::TemplateTemplateParameter: {
+ std::string valued_declaration_string = valued_declaration.to_std_string();
+
+ return (template_declaration ? (*template_declaration).to_std_string() + " " : "")
+ + "typename" + (is_parameter_pack ? "..." : "")
+ + (valued_declaration_string.empty() ? "" : " ") + valued_declaration_string;
+ }
+ default:
+ return "";
+ }
+ }
+};
+
+/*
+ * Represents a C++ template declaration as a collection of template
+ * parameters.
+ *
+ * The parameters for the declaration follow the same relaxed rules as
+ * `RelaxedTemplateParameter` and inherit the possibility of
+ * representing incorrect declarations.
+ *
+ * Due to the relaxed constraint and the representable incorrect
+ * parameters, the type is intended to be used for data that is
+ * already validated and known to be correct, such as data that is
+ * extracted from Clang.
+ */
+struct RelaxedTemplateDeclaration : TemplateDeclarationStorage
+{
+ inline QString to_qstring() const { return QString::fromStdString(to_std_string()); }
+};
+
+/*
+ * Constructs and returns a human-readable representation of this
+ * declaration.
+ *
+ * The constructed string is formatted so as to rebuild a
+ * possible version of the C++ code that is modeled by an instance
+ * of this type.
+ *
+ * The representation of a declaration is constructed by the literal
+ * "template <", followed by the human-presentable version of each
+ * parameter in "parameters", with a comma and a space between each
+ * parameter, followed by a closing literal ">".
+ *
+ * For example, the empty declaration is represented as "template <>".
+ *
+ * While a template declaration that has a type template parameter
+ * "Foo" with initializer "int" and a non-type template parameter pack
+ * with type "int" and name "S" would be represented as:
+ *
+ * template <typename Foo = int, int... S>
+ */
+inline std::string TemplateDeclarationStorage::to_std_string() const
+{
+ if (parameters.empty())
+ return "template <>";
+
+ return "template <"
+ + std::accumulate(std::next(parameters.cbegin()), parameters.cend(),
+ parameters.front().to_std_string(),
+ [](auto &&acc, const RelaxedTemplateParameter &parameter) {
+ return acc + ", " + parameter.to_std_string();
+ })
+ + ">";
+}
+
+/*
+ * Returns true if the two template declaration represented by left
+ * and right are substitutable.
+ *
+ * QDoc uses a simplified model for template declarations and,
+ * similarly, uses a simplified model of "substitutability".
+ *
+ * Two declarations are substitutable if:
+ *
+ * - They have the same amount of parameters
+ * - For each pair of parameters with the same postion:
+ * - They have the same kind
+ * - They are both parameter packs or both are not parameter packs
+ * - If they are non-type template parameters then they have the same type
+ * - If they are both template template parameters then they both
+ * carry an additional template declaration and the additional
+ * template declarations are substitutable
+ *
+ * This means that in the simplified models, we generally ignore default arguments, name and such.
+ *
+ * This model does not follow the way C++ performs disambiguation but
+ * should be enough to handle most cases in the documentation.
+ */
+inline bool are_template_declarations_substitutable(const TemplateDeclarationStorage& left, const TemplateDeclarationStorage& right) {
+ static auto are_template_parameters_substitutable = [](const RelaxedTemplateParameter& left, const RelaxedTemplateParameter& right) {
+ if (left.kind != right.kind) return false;
+ if (left.is_parameter_pack != right.is_parameter_pack) return false;
+
+ if (left.kind == RelaxedTemplateParameter::Kind::NonTypeTemplateParameter &&
+ (left.valued_declaration.type != right.valued_declaration.type))
+ return false;
+
+ if (left.kind == RelaxedTemplateParameter::Kind::TemplateTemplateParameter) {
+ if (!left.template_declaration && right.template_declaration) return false;
+ if (left.template_declaration && !right.template_declaration) return false;
+
+ if (left.template_declaration && right.template_declaration)
+ return are_template_declarations_substitutable(*left.template_declaration, *right.template_declaration);
+ }
+
+ return true;
+ };
+
+ const auto& left_parameters = left.parameters;
+ const auto& right_parameters = right.parameters;
+
+ if (left_parameters.size() != right_parameters.size()) return false;
+
+ return std::transform_reduce(left_parameters.cbegin(), left_parameters.cend(), right_parameters.cbegin(),
+ true,
+ std::logical_and<bool>{},
+ are_template_parameters_substitutable
+ );
+}
diff --git a/src/qdoc/qdoc/src/qdoc/text.cpp b/src/qdoc/qdoc/src/qdoc/text.cpp
new file mode 100644
index 000000000..d3401ce68
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/text.cpp
@@ -0,0 +1,341 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "text.h"
+
+#include <QtCore/qregularexpression.h>
+
+#include <cstdio>
+
+QT_BEGIN_NAMESPACE
+
+Text::Text() : m_first(nullptr), m_last(nullptr) { }
+
+Text::Text(const QString &str) : m_first(nullptr), m_last(nullptr)
+{
+ operator<<(str);
+}
+
+Text::Text(const Text &text) : m_first(nullptr), m_last(nullptr)
+{
+ operator=(text);
+}
+
+Text::~Text()
+{
+ clear();
+}
+
+Text &Text::operator=(const Text &text)
+{
+ if (this != &text) {
+ clear();
+ operator<<(text);
+ }
+ return *this;
+}
+
+Text &Text::operator<<(Atom::AtomType atomType)
+{
+ return operator<<(Atom(atomType));
+}
+
+Text &Text::operator<<(const QString &string)
+{
+ return string.isEmpty() ? *this : operator<<(Atom(Atom::String, string));
+}
+
+Text &Text::operator<<(const Atom &atom)
+{
+ if (atom.count() < 2) {
+ if (m_first == nullptr) {
+ m_first = new Atom(atom.type(), atom.string());
+ m_last = m_first;
+ } else
+ m_last = new Atom(m_last, atom.type(), atom.string());
+ } else {
+ if (m_first == nullptr) {
+ m_first = new Atom(atom.type(), atom.string(), atom.string(1));
+ m_last = m_first;
+ } else
+ m_last = new Atom(m_last, atom.type(), atom.string(), atom.string(1));
+ }
+ return *this;
+}
+
+/*!
+ Special output operator for LinkAtom. It makes a copy of
+ the LinkAtom \a atom and connects the cop;y to the list
+ in this Text.
+ */
+Text &Text::operator<<(const LinkAtom &atom)
+{
+ if (m_first == nullptr) {
+ m_first = new LinkAtom(atom);
+ m_last = m_first;
+ } else
+ m_last = new LinkAtom(m_last, atom);
+ return *this;
+}
+
+Text &Text::operator<<(const Text &text)
+{
+ const Atom *atom = text.firstAtom();
+ while (atom != nullptr) {
+ operator<<(*atom);
+ atom = atom->next();
+ }
+ return *this;
+}
+
+void Text::stripFirstAtom()
+{
+ if (m_first != nullptr) {
+ if (m_first == m_last)
+ m_last = nullptr;
+ Atom *oldFirst = m_first;
+ m_first = m_first->next();
+ delete oldFirst;
+ }
+}
+
+void Text::stripLastAtom()
+{
+ if (m_last != nullptr) {
+ Atom *oldLast = m_last;
+ if (m_first == m_last) {
+ m_first = nullptr;
+ m_last = nullptr;
+ } else {
+ m_last = m_first;
+ while (m_last->next() != oldLast)
+ m_last = m_last->next();
+ m_last->setNext(nullptr);
+ }
+ delete oldLast;
+ }
+}
+
+/*!
+ This function traverses the atom list of the Text object,
+ extracting all the string parts. It concatenates them to
+ a result string and returns it.
+ */
+QString Text::toString() const
+{
+ QString str;
+ const Atom *atom = firstAtom();
+ while (atom != nullptr) {
+ if (atom->type() == Atom::String || atom->type() == Atom::AutoLink
+ || atom->type() == Atom::C)
+ str += atom->string();
+ atom = atom->next();
+ }
+ return str;
+}
+
+/*!
+ Returns true if this Text contains the substring \a str.
+ */
+bool Text::contains(const QString &str) const
+{
+ const Atom *atom = firstAtom();
+ while (atom != nullptr) {
+ if (atom->type() == Atom::String || atom->type() == Atom::AutoLink
+ || atom->type() == Atom::C)
+ if (atom->string().contains(str, Qt::CaseInsensitive))
+ return true;
+ atom = atom->next();
+ }
+ return false;
+}
+
+Text Text::subText(Atom::AtomType left, Atom::AtomType right, const Atom *from,
+ bool inclusive) const
+{
+ const Atom *begin = from ? from : firstAtom();
+ const Atom *end;
+
+ while (begin != nullptr && begin->type() != left)
+ begin = begin->next();
+ if (begin != nullptr) {
+ if (!inclusive)
+ begin = begin->next();
+ }
+
+ end = begin;
+ while (end != nullptr && end->type() != right)
+ end = end->next();
+ if (end == nullptr)
+ begin = nullptr;
+ else if (inclusive)
+ end = end->next();
+ return subText(begin, end);
+}
+
+Text Text::sectionHeading(const Atom *sectionLeft)
+{
+ if (sectionLeft != nullptr) {
+ const Atom *begin = sectionLeft;
+ while (begin != nullptr && begin->type() != Atom::SectionHeadingLeft)
+ begin = begin->next();
+ if (begin != nullptr)
+ begin = begin->next();
+
+ const Atom *end = begin;
+ while (end != nullptr && end->type() != Atom::SectionHeadingRight)
+ end = end->next();
+
+ if (end != nullptr)
+ return subText(begin, end);
+ }
+ return Text();
+}
+
+/*!
+ Prints a human-readable version of the contained atoms to stderr.
+
+ The output is formatted as a linear list of atoms, with each atom
+ being on its own line.
+
+ Each atom is represented by its type and its stringified-contents,
+ if any, with a space between the two.
+
+ Indentation is used to emphasize the possible block-level
+ relationship between consecutive atoms, increasing after a
+ "Left" atom and decreasing just before a "Right" atom.
+
+ For example, if this `Text` represented the block-comment
+ containing the text:
+
+ \c {\l {somelink} {This is a link}}
+
+ Then the human-readable output would look like the following:
+
+ \badcode
+ ParaLeft
+ Link "somelink"
+ FormattingLeft "link"
+ String "This is a link"
+ FormattingRight "link"
+ String
+ ParaRight
+ \endcode
+ */
+void Text::dump() const
+{
+ constexpr int minimum_indentation_level { 1 };
+ int indentation_level { minimum_indentation_level };
+ int indentation_width { 4 };
+
+ const Atom *atom = firstAtom();
+ while (atom != nullptr) {
+ QString str = atom->string();
+ str.replace("\\", "\\\\");
+ str.replace("\"", "\\\"");
+ str.replace("\n", "\\n");
+ static const QRegularExpression re(R"([^ -~])");
+ str.replace(re, "?");
+ if (!str.isEmpty())
+ str = " \"" + str + QLatin1Char('"');
+
+ QString atom_type = atom->typeString();
+ if (atom_type.contains("Right"))
+ indentation_level = std::max(minimum_indentation_level, indentation_level - 1);
+
+ fprintf(stderr, "%s%s%s\n",
+ QString(indentation_level * indentation_width, ' ').toLatin1().data(),
+ atom_type.toLatin1().data(), str.toLatin1().data());
+
+ if (atom_type.contains("Left"))
+ indentation_level += 1;
+
+ atom = atom->next();
+ }
+}
+
+Text Text::subText(const Atom *begin, const Atom *end)
+{
+ Text text;
+ if (begin != nullptr) {
+ while (begin != end) {
+ text << *begin;
+ begin = begin->next();
+ }
+ }
+ return text;
+}
+
+void Text::clear()
+{
+ while (m_first != nullptr) {
+ Atom *atom = m_first;
+ m_first = m_first->next();
+ delete atom;
+ }
+ m_first = nullptr;
+ m_last = nullptr;
+}
+
+int Text::compare(const Text &text1, const Text &text2)
+{
+ if (text1.isEmpty())
+ return text2.isEmpty() ? 0 : -1;
+ if (text2.isEmpty())
+ return 1;
+
+ const Atom *atom1 = text1.firstAtom();
+ const Atom *atom2 = text2.firstAtom();
+
+ for (;;) {
+ if (atom1->type() != atom2->type())
+ return (int)atom1->type() - (int)atom2->type();
+ int cmp = QString::compare(atom1->string(), atom2->string());
+ if (cmp != 0)
+ return cmp;
+
+ if (atom1 == text1.lastAtom())
+ return atom2 == text2.lastAtom() ? 0 : -1;
+ if (atom2 == text2.lastAtom())
+ return 1;
+ atom1 = atom1->next();
+ atom2 = atom2->next();
+ }
+}
+
+/*!
+ \internal
+
+ \brief Splits the current Text from \a start to end into a new Text object.
+
+ Returns a new Text from the first Atom in this Text of atom type \a start.
+ */
+Text Text::splitAtFirst(Atom::AtomType start) {
+ if (m_first == nullptr)
+ return {};
+
+ Atom *previous = nullptr;
+ Atom *current = m_first;
+
+ while (current != nullptr) {
+ if (current->type() == start)
+ break;
+ previous = current;
+ current = current->next();
+ }
+
+ if (!current)
+ return {};
+
+ Text splitText = Text(current, m_last);
+
+ // Reset this Text's first and last atom pointers based on
+ // whether all or part of the content was extracted.
+ m_first = previous ? m_first : nullptr;
+ if (m_last = previous; m_last)
+ m_last->setNext(nullptr);
+
+ return splitText;
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/text.h b/src/qdoc/qdoc/src/qdoc/text.h
new file mode 100644
index 000000000..d42143909
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/text.h
@@ -0,0 +1,87 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef TEXT_H
+#define TEXT_H
+
+#include "atom.h"
+
+QT_BEGIN_NAMESPACE
+
+class Text
+{
+public:
+ Text();
+ explicit Text(const QString &str);
+ Text(const Text &text);
+ ~Text();
+
+ Text &operator=(const Text &text);
+
+ Atom *firstAtom() { return m_first; }
+ Atom *lastAtom() { return m_last; }
+ Text &operator<<(Atom::AtomType atomType);
+ Text &operator<<(const QString &string);
+ Text &operator<<(const Atom &atom);
+ Text &operator<<(const LinkAtom &atom);
+ Text &operator<<(const Text &text);
+ void stripFirstAtom();
+ void stripLastAtom();
+
+ [[nodiscard]] bool isEmpty() const { return m_first == nullptr; }
+ [[nodiscard]] bool contains(const QString &str) const;
+ [[nodiscard]] QString toString() const;
+ [[nodiscard]] const Atom *firstAtom() const { return m_first; }
+ [[nodiscard]] const Atom *lastAtom() const { return m_last; }
+ Text subText(Atom::AtomType left, Atom::AtomType right, const Atom *from = nullptr,
+ bool inclusive = false) const;
+ void dump() const;
+ void clear();
+
+ static Text subText(const Atom *begin, const Atom *end = nullptr);
+ static Text sectionHeading(const Atom *sectionBegin);
+ static int compare(const Text &text1, const Text &text2);
+
+ [[nodiscard]] Text splitAtFirst(Atom::AtomType start);
+
+private:
+ Text(Atom *start, Atom *end) : m_first(start), m_last(end)
+ {
+ Q_ASSERT(m_first != nullptr);
+ Q_ASSERT(m_last != nullptr);
+
+ m_last->setNext(nullptr);
+ }
+
+ Atom *m_first { nullptr };
+ Atom *m_last { nullptr };
+};
+
+inline bool operator==(const Text &text1, const Text &text2)
+{
+ return Text::compare(text1, text2) == 0;
+}
+inline bool operator!=(const Text &text1, const Text &text2)
+{
+ return Text::compare(text1, text2) != 0;
+}
+inline bool operator<(const Text &text1, const Text &text2)
+{
+ return Text::compare(text1, text2) < 0;
+}
+inline bool operator<=(const Text &text1, const Text &text2)
+{
+ return Text::compare(text1, text2) <= 0;
+}
+inline bool operator>(const Text &text1, const Text &text2)
+{
+ return Text::compare(text1, text2) > 0;
+}
+inline bool operator>=(const Text &text1, const Text &text2)
+{
+ return Text::compare(text1, text2) >= 0;
+}
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/tokenizer.cpp b/src/qdoc/qdoc/src/qdoc/tokenizer.cpp
new file mode 100644
index 000000000..bfbfc53c5
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/tokenizer.cpp
@@ -0,0 +1,788 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "tokenizer.h"
+
+#include "config.h"
+#include "generator.h"
+
+#include <QtCore/qfile.h>
+#include <QtCore/qhash.h>
+#include <QtCore/qregularexpression.h>
+#include <QtCore/qstring.h>
+#include <QtCore/qstringconverter.h>
+
+#include <cctype>
+#include <cstring>
+#include <utility>
+
+QT_BEGIN_NAMESPACE
+
+#define LANGUAGE_CPP "Cpp"
+
+/* qmake ignore Q_OBJECT */
+
+/*
+ Keep in sync with tokenizer.h.
+*/
+static const char *kwords[] = { "char",
+ "class",
+ "const",
+ "double",
+ "enum",
+ "explicit",
+ "friend",
+ "inline",
+ "int",
+ "long",
+ "namespace",
+ "operator",
+ "private",
+ "protected",
+ "public",
+ "short",
+ "signals",
+ "signed",
+ "slots",
+ "static",
+ "struct",
+ "template",
+ "typedef",
+ "typename",
+ "union",
+ "unsigned",
+ "using",
+ "virtual",
+ "void",
+ "volatile",
+ "__int64",
+ "default",
+ "delete",
+ "final",
+ "override",
+ "Q_OBJECT",
+ "Q_OVERRIDE",
+ "Q_PROPERTY",
+ "Q_PRIVATE_PROPERTY",
+ "Q_DECLARE_SEQUENTIAL_ITERATOR",
+ "Q_DECLARE_MUTABLE_SEQUENTIAL_ITERATOR",
+ "Q_DECLARE_ASSOCIATIVE_ITERATOR",
+ "Q_DECLARE_MUTABLE_ASSOCIATIVE_ITERATOR",
+ "Q_DECLARE_FLAGS",
+ "Q_SIGNALS",
+ "Q_SLOTS",
+ "QT_COMPAT",
+ "QT_COMPAT_CONSTRUCTOR",
+ "QT_DEPRECATED",
+ "QT_MOC_COMPAT",
+ "QT_MODULE",
+ "QT3_SUPPORT",
+ "QT3_SUPPORT_CONSTRUCTOR",
+ "QT3_MOC_SUPPORT",
+ "QDOC_PROPERTY",
+ "QPrivateSignal" };
+
+static const int KwordHashTableSize = 4096;
+static int kwordHashTable[KwordHashTableSize];
+
+static QHash<QByteArray, bool> *ignoredTokensAndDirectives = nullptr;
+
+static QRegularExpression *comment = nullptr;
+static QRegularExpression *versionX = nullptr;
+static QRegularExpression *definedX = nullptr;
+
+static QRegularExpression *defines = nullptr;
+static QRegularExpression *falsehoods = nullptr;
+
+static QStringDecoder sourceDecoder;
+
+/*
+ This function is a perfect hash function for the 37 keywords of C99
+ (with a hash table size of 512). It should perform well on our
+ Qt-enhanced C++ subset.
+*/
+static int hashKword(const char *s, int len)
+{
+ return (((uchar)s[0]) + (((uchar)s[2]) << 5) + (((uchar)s[len - 1]) << 3)) % KwordHashTableSize;
+}
+
+static void insertKwordIntoHash(const char *s, int number)
+{
+ int k = hashKword(s, int(strlen(s)));
+ while (kwordHashTable[k]) {
+ if (++k == KwordHashTableSize)
+ k = 0;
+ }
+ kwordHashTable[k] = number;
+}
+
+Tokenizer::Tokenizer(const Location &loc, QFile &in)
+{
+ init();
+ m_in = in.readAll();
+ m_pos = 0;
+ start(loc);
+}
+
+Tokenizer::Tokenizer(const Location &loc, QByteArray in) : m_in(std::move(in))
+{
+ init();
+ m_pos = 0;
+ start(loc);
+}
+
+Tokenizer::~Tokenizer()
+{
+ delete[] m_lexBuf1;
+ delete[] m_lexBuf2;
+}
+
+int Tokenizer::getToken()
+{
+ token_too_long_warning_was_issued = false;
+
+ char *t = m_prevLex;
+ m_prevLex = m_lex;
+ m_lex = t;
+
+ while (m_ch != EOF) {
+ m_tokLoc = m_curLoc;
+ m_lexLen = 0;
+
+ if (isspace(m_ch)) {
+ do {
+ m_ch = getChar();
+ } while (isspace(m_ch));
+ } else if (isalpha(m_ch) || m_ch == '_') {
+ do {
+ m_ch = getChar();
+ } while (isalnum(m_ch) || m_ch == '_');
+
+ int k = hashKword(m_lex, int(m_lexLen));
+ for (;;) {
+ int i = kwordHashTable[k];
+ if (i == 0) {
+ return Tok_Ident;
+ } else if (i == -1) {
+ if (!m_parsingMacro && ignoredTokensAndDirectives->contains(m_lex)) {
+ if (ignoredTokensAndDirectives->value(m_lex)) { // it's a directive
+ int parenDepth = 0;
+ while (m_ch != EOF && (m_ch != ')' || parenDepth > 1)) {
+ if (m_ch == '(')
+ ++parenDepth;
+ else if (m_ch == ')')
+ --parenDepth;
+ m_ch = getChar();
+ }
+ if (m_ch == ')')
+ m_ch = getChar();
+ }
+ break;
+ }
+ } else if (strcmp(m_lex, kwords[i - 1]) == 0) {
+ int ret = (int)Tok_FirstKeyword + i - 1;
+ if (ret != Tok_typename)
+ return ret;
+ break;
+ }
+
+ if (++k == KwordHashTableSize)
+ k = 0;
+ }
+ } else if (isdigit(m_ch)) {
+ do {
+ m_ch = getChar();
+ } while (isalnum(m_ch) || m_ch == '.' || m_ch == '+' || m_ch == '-');
+ return Tok_Number;
+ } else {
+ switch (m_ch) {
+ case '!':
+ case '%':
+ m_ch = getChar();
+ if (m_ch == '=')
+ m_ch = getChar();
+ return Tok_SomeOperator;
+ case '"':
+ m_ch = getChar();
+
+ while (m_ch != EOF && m_ch != '"') {
+ if (m_ch == '\\')
+ m_ch = getChar();
+ m_ch = getChar();
+ }
+ m_ch = getChar();
+
+ if (m_ch == EOF)
+ m_tokLoc.warning(
+ QStringLiteral("Unterminated C++ string literal"),
+ QStringLiteral("Maybe you forgot '/*!' at the beginning of the file?"));
+ else
+ return Tok_String;
+ break;
+ case '#':
+ return getTokenAfterPreprocessor();
+ case '&':
+ m_ch = getChar();
+ /*
+ Removed check for '&&', only interpret '&=' as an operator.
+ '&&' is also used for an rvalue reference. QTBUG-32675
+ */
+ if (m_ch == '=') {
+ m_ch = getChar();
+ return Tok_SomeOperator;
+ } else {
+ return Tok_Ampersand;
+ }
+ case '\'':
+ m_ch = getChar();
+ /*
+ Allow empty character literal. QTBUG-25775
+ */
+ if (m_ch == '\'') {
+ m_ch = getChar();
+ break;
+ }
+ if (m_ch == '\\')
+ m_ch = getChar();
+ do {
+ m_ch = getChar();
+ } while (m_ch != EOF && m_ch != '\'');
+
+ if (m_ch == EOF) {
+ m_tokLoc.warning(QStringLiteral("Unterminated C++ character literal"));
+ } else {
+ m_ch = getChar();
+ return Tok_Number;
+ }
+ break;
+ case '(':
+ m_ch = getChar();
+ if (m_numPreprocessorSkipping == 0)
+ m_parenDepth++;
+ if (isspace(m_ch)) {
+ do {
+ m_ch = getChar();
+ } while (isspace(m_ch));
+ m_lexLen = 1;
+ m_lex[1] = '\0';
+ }
+ if (m_ch == '*') {
+ m_ch = getChar();
+ return Tok_LeftParenAster;
+ }
+ return Tok_LeftParen;
+ case ')':
+ m_ch = getChar();
+ if (m_numPreprocessorSkipping == 0)
+ m_parenDepth--;
+ return Tok_RightParen;
+ case '*':
+ m_ch = getChar();
+ if (m_ch == '=') {
+ m_ch = getChar();
+ return Tok_SomeOperator;
+ } else {
+ return Tok_Aster;
+ }
+ case '^':
+ m_ch = getChar();
+ if (m_ch == '=') {
+ m_ch = getChar();
+ return Tok_SomeOperator;
+ } else {
+ return Tok_Caret;
+ }
+ case '+':
+ m_ch = getChar();
+ if (m_ch == '+' || m_ch == '=')
+ m_ch = getChar();
+ return Tok_SomeOperator;
+ case ',':
+ m_ch = getChar();
+ return Tok_Comma;
+ case '-':
+ m_ch = getChar();
+ if (m_ch == '-' || m_ch == '=') {
+ m_ch = getChar();
+ } else if (m_ch == '>') {
+ m_ch = getChar();
+ if (m_ch == '*')
+ m_ch = getChar();
+ }
+ return Tok_SomeOperator;
+ case '.':
+ m_ch = getChar();
+ if (m_ch == '*') {
+ m_ch = getChar();
+ } else if (m_ch == '.') {
+ do {
+ m_ch = getChar();
+ } while (m_ch == '.');
+ return Tok_Ellipsis;
+ } else if (isdigit(m_ch)) {
+ do {
+ m_ch = getChar();
+ } while (isalnum(m_ch) || m_ch == '.' || m_ch == '+' || m_ch == '-');
+ return Tok_Number;
+ }
+ return Tok_SomeOperator;
+ case '/':
+ m_ch = getChar();
+ if (m_ch == '/') {
+ do {
+ m_ch = getChar();
+ } while (m_ch != EOF && m_ch != '\n');
+ } else if (m_ch == '*') {
+ bool metDoc = false; // empty doc is no doc
+ bool metSlashAsterBang = false;
+ bool metAster = false;
+ bool metAsterSlash = false;
+
+ m_ch = getChar();
+ if (m_ch == '!')
+ metSlashAsterBang = true;
+
+ while (!metAsterSlash) {
+ if (m_ch == EOF) {
+ m_tokLoc.warning(QStringLiteral("Unterminated C++ comment"));
+ break;
+ } else {
+ if (m_ch == '*') {
+ metAster = true;
+ } else if (metAster && m_ch == '/') {
+ metAsterSlash = true;
+ } else {
+ metAster = false;
+ if (isgraph(m_ch))
+ metDoc = true;
+ }
+ }
+ m_ch = getChar();
+ }
+ if (metSlashAsterBang && metDoc)
+ return Tok_Doc;
+ else if (m_parenDepth > 0)
+ return Tok_Comment;
+ } else {
+ if (m_ch == '=')
+ m_ch = getChar();
+ return Tok_SomeOperator;
+ }
+ break;
+ case ':':
+ m_ch = getChar();
+ if (m_ch == ':') {
+ m_ch = getChar();
+ return Tok_Gulbrandsen;
+ } else {
+ return Tok_Colon;
+ }
+ case ';':
+ m_ch = getChar();
+ return Tok_Semicolon;
+ case '<':
+ m_ch = getChar();
+ if (m_ch == '<') {
+ m_ch = getChar();
+ if (m_ch == '=')
+ m_ch = getChar();
+ return Tok_SomeOperator;
+ } else if (m_ch == '=') {
+ m_ch = getChar();
+ return Tok_SomeOperator;
+ } else {
+ return Tok_LeftAngle;
+ }
+ case '=':
+ m_ch = getChar();
+ if (m_ch == '=') {
+ m_ch = getChar();
+ return Tok_SomeOperator;
+ } else {
+ return Tok_Equal;
+ }
+ case '>':
+ m_ch = getChar();
+ if (m_ch == '>') {
+ m_ch = getChar();
+ if (m_ch == '=')
+ m_ch = getChar();
+ return Tok_SomeOperator;
+ } else if (m_ch == '=') {
+ m_ch = getChar();
+ return Tok_SomeOperator;
+ } else {
+ return Tok_RightAngle;
+ }
+ case '?':
+ m_ch = getChar();
+ return Tok_SomeOperator;
+ case '[':
+ m_ch = getChar();
+ if (m_numPreprocessorSkipping == 0)
+ m_bracketDepth++;
+ return Tok_LeftBracket;
+ case '\\':
+ m_ch = getChar();
+ m_ch = getChar(); // skip one character
+ break;
+ case ']':
+ m_ch = getChar();
+ if (m_numPreprocessorSkipping == 0)
+ m_bracketDepth--;
+ return Tok_RightBracket;
+ case '{':
+ m_ch = getChar();
+ if (m_numPreprocessorSkipping == 0)
+ m_braceDepth++;
+ return Tok_LeftBrace;
+ case '}':
+ m_ch = getChar();
+ if (m_numPreprocessorSkipping == 0)
+ m_braceDepth--;
+ return Tok_RightBrace;
+ case '|':
+ m_ch = getChar();
+ if (m_ch == '|' || m_ch == '=')
+ m_ch = getChar();
+ return Tok_SomeOperator;
+ case '~':
+ m_ch = getChar();
+ return Tok_Tilde;
+ case '@':
+ m_ch = getChar();
+ return Tok_At;
+ default:
+ // ### We should really prevent qdoc from looking at snippet files rather than
+ // ### suppress warnings when reading them.
+ if (m_numPreprocessorSkipping == 0
+ && !(m_tokLoc.fileName().endsWith(".qdoc")
+ || m_tokLoc.fileName().endsWith(".js"))) {
+ m_tokLoc.warning(QStringLiteral("Hostile character 0x%1 in C++ source")
+ .arg((uchar)m_ch, 1, 16));
+ }
+ m_ch = getChar();
+ }
+ }
+ }
+
+ if (m_preprocessorSkipping.size() > 1) {
+ m_tokLoc.warning(QStringLiteral("Expected #endif before end of file"));
+ // clear it out or we get an infinite loop!
+ while (!m_preprocessorSkipping.isEmpty()) {
+ popSkipping();
+ }
+ }
+
+ strcpy(m_lex, "end-of-input");
+ m_lexLen = strlen(m_lex);
+ return Tok_Eoi;
+}
+
+void Tokenizer::initialize()
+{
+ Config &config = Config::instance();
+ QString versionSym = config.get(CONFIG_VERSIONSYM).asString();
+ const QLatin1String defaultEncoding("UTF-8");
+
+ QString sourceEncoding = config.get(CONFIG_SOURCEENCODING).asString(defaultEncoding);
+ if (!QStringConverter::encodingForName(sourceEncoding.toUtf8().constData())) {
+ Location().warning(QStringLiteral("Source encoding '%1' not supported, using '%2' as default.")
+ .arg(sourceEncoding, defaultEncoding));
+ sourceEncoding = defaultEncoding;
+ }
+ sourceDecoder = QStringDecoder(sourceEncoding.toUtf8().constData());
+ Q_ASSERT(sourceDecoder.isValid());
+
+ comment = new QRegularExpression("/(?:\\*.*\\*/|/.*\n|/[^\n]*$)", QRegularExpression::InvertedGreedinessOption);
+ versionX = new QRegularExpression("$cannot possibly match^");
+ if (!versionSym.isEmpty())
+ versionX->setPattern("^[ \t]*(?:" + QRegularExpression::escape(versionSym)
+ + ")[ \t]+\"([^\"]*)\"[ \t]*$");
+ definedX = new QRegularExpression("^defined ?\\(?([A-Z_0-9a-z]+) ?\\)?$");
+
+ QStringList d{config.get(CONFIG_DEFINES).asStringList()};
+ d += "qdoc";
+ defines = new QRegularExpression(QRegularExpression::anchoredPattern(d.join('|')));
+ falsehoods = new QRegularExpression(QRegularExpression::anchoredPattern(
+ config.get(CONFIG_FALSEHOODS).asStringList().join('|')));
+
+ /*
+ The keyword hash table is always cleared before any words are inserted.
+ */
+ memset(kwordHashTable, 0, sizeof(kwordHashTable));
+ for (int i = 0; i < Tok_LastKeyword - Tok_FirstKeyword + 1; i++)
+ insertKwordIntoHash(kwords[i], i + 1);
+
+ ignoredTokensAndDirectives = new QHash<QByteArray, bool>;
+
+ const QStringList tokens{config.get(LANGUAGE_CPP
+ + Config::dot
+ + CONFIG_IGNORETOKENS).asStringList()};
+ for (const auto &token : tokens) {
+ const QByteArray tb = token.toLatin1();
+ ignoredTokensAndDirectives->insert(tb, false);
+ insertKwordIntoHash(tb.data(), -1);
+ }
+
+ const QStringList directives{config.get(LANGUAGE_CPP
+ + Config::dot
+ + CONFIG_IGNOREDIRECTIVES).asStringList()};
+ for (const auto &directive : directives) {
+ const QByteArray db = directive.toLatin1();
+ ignoredTokensAndDirectives->insert(db, true);
+ insertKwordIntoHash(db.data(), -1);
+ }
+}
+
+/*!
+ The heap allocated variables are freed here. The keyword
+ hash table is not cleared here, but it is cleared in the
+ initialize() function, before any keywords are inserted.
+ */
+void Tokenizer::terminate()
+{
+ delete comment;
+ comment = nullptr;
+ delete versionX;
+ versionX = nullptr;
+ delete definedX;
+ definedX = nullptr;
+ delete defines;
+ defines = nullptr;
+ delete falsehoods;
+ falsehoods = nullptr;
+ delete ignoredTokensAndDirectives;
+ ignoredTokensAndDirectives = nullptr;
+}
+
+void Tokenizer::init()
+{
+ m_lexBuf1 = new char[(int)yyLexBufSize];
+ m_lexBuf2 = new char[(int)yyLexBufSize];
+ m_prevLex = m_lexBuf1;
+ m_prevLex[0] = '\0';
+ m_lex = m_lexBuf2;
+ m_lex[0] = '\0';
+ m_lexLen = 0;
+ m_preprocessorSkipping.push(false);
+ m_numPreprocessorSkipping = 0;
+ m_braceDepth = 0;
+ m_parenDepth = 0;
+ m_bracketDepth = 0;
+ m_ch = '\0';
+ m_parsingMacro = false;
+}
+
+void Tokenizer::start(const Location &loc)
+{
+ m_tokLoc = loc;
+ m_curLoc = loc;
+ m_curLoc.start();
+ strcpy(m_prevLex, "beginning-of-input");
+ strcpy(m_lex, "beginning-of-input");
+ m_lexLen = strlen(m_lex);
+ m_braceDepth = 0;
+ m_parenDepth = 0;
+ m_bracketDepth = 0;
+ m_ch = '\0';
+ m_ch = getChar();
+}
+
+/*
+ Returns the next token, if # was met. This function interprets the
+ preprocessor directive, skips over any #ifdef'd out tokens, and returns the
+ token after all of that.
+*/
+int Tokenizer::getTokenAfterPreprocessor()
+{
+ m_ch = getChar();
+ while (isspace(m_ch) && m_ch != '\n')
+ m_ch = getChar();
+
+ /*
+ #directive condition
+ */
+ QString directive;
+ QString condition;
+
+ while (isalpha(m_ch)) {
+ directive += QChar(m_ch);
+ m_ch = getChar();
+ }
+ if (!directive.isEmpty()) {
+ while (m_ch != EOF && m_ch != '\n') {
+ if (m_ch == '\\') {
+ m_ch = getChar();
+ if (m_ch == '\r')
+ m_ch = getChar();
+ }
+ condition += QChar(m_ch);
+ m_ch = getChar();
+ }
+ condition.remove(*comment);
+ condition = condition.simplified();
+
+ /*
+ The #if, #ifdef, #ifndef, #elif, #else, and #endif
+ directives have an effect on the skipping stack. For
+ instance, if the code processed so far is
+
+ #if 1
+ #if 0
+ #if 1
+ // ...
+ #else
+
+ the skipping stack contains, from bottom to top, false true
+ true (assuming 0 is false and 1 is true). If at least one
+ entry of the stack is true, the tokens are skipped.
+
+ This mechanism is simple yet hard to understand.
+ */
+ if (directive[0] == QChar('i')) {
+ if (directive == QString("if"))
+ pushSkipping(!isTrue(condition));
+ else if (directive == QString("ifdef"))
+ pushSkipping(!defines->match(condition).hasMatch());
+ else if (directive == QString("ifndef"))
+ pushSkipping(defines->match(condition).hasMatch());
+ } else if (directive[0] == QChar('e')) {
+ if (directive == QString("elif")) {
+ bool old = popSkipping();
+ if (old)
+ pushSkipping(!isTrue(condition));
+ else
+ pushSkipping(true);
+ } else if (directive == QString("else")) {
+ pushSkipping(!popSkipping());
+ } else if (directive == QString("endif")) {
+ popSkipping();
+ }
+ } else if (directive == QString("define")) {
+ auto match = versionX->match(condition);
+ if (match.hasMatch())
+ m_version = match.captured(1);
+ }
+ }
+
+ int tok;
+ do {
+ /*
+ We set yyLex now, and after getToken() this will be
+ yyPrevLex. This way, we skip over the preprocessor
+ directive.
+ */
+ qstrcpy(m_lex, m_prevLex);
+
+ /*
+ If getToken() meets another #, it will call
+ getTokenAfterPreprocessor() once again, which could in turn
+ call getToken() again, etc. Unless there are 10,000 or so
+ preprocessor directives in a row, this shouldn't overflow
+ the stack.
+ */
+ tok = getToken();
+ } while (m_numPreprocessorSkipping > 0 && tok != Tok_Eoi);
+ return tok;
+}
+
+/*
+ Pushes a new skipping value onto the stack. This corresponds to entering a
+ new #if block.
+*/
+void Tokenizer::pushSkipping(bool skip)
+{
+ m_preprocessorSkipping.push(skip);
+ if (skip)
+ m_numPreprocessorSkipping++;
+}
+
+/*
+ Pops a skipping value from the stack. This corresponds to reaching a #endif.
+*/
+bool Tokenizer::popSkipping()
+{
+ if (m_preprocessorSkipping.isEmpty()) {
+ m_tokLoc.warning(QStringLiteral("Unexpected #elif, #else or #endif"));
+ return true;
+ }
+
+ bool skip = m_preprocessorSkipping.pop();
+ if (skip)
+ m_numPreprocessorSkipping--;
+ return skip;
+}
+
+/*
+ Returns \c true if the condition evaluates as true, otherwise false. The
+ condition is represented by a string. Unsophisticated parsing techniques are
+ used. The preprocessing method could be named StriNg-Oriented PreProcessing,
+ as SNOBOL stands for StriNg-Oriented symBOlic Language.
+*/
+bool Tokenizer::isTrue(const QString &condition)
+{
+ int firstOr = -1;
+ int firstAnd = -1;
+ int parenDepth = 0;
+
+ /*
+ Find the first logical operator at top level, but be careful
+ about precedence. Examples:
+
+ X || Y // the or
+ X || Y || Z // the leftmost or
+ X || Y && Z // the or
+ X && Y || Z // the or
+ (X || Y) && Z // the and
+ */
+ for (int i = 0; i < condition.size() - 1; i++) {
+ QChar ch = condition[i];
+ if (ch == QChar('(')) {
+ parenDepth++;
+ } else if (ch == QChar(')')) {
+ parenDepth--;
+ } else if (parenDepth == 0) {
+ if (condition[i + 1] == ch) {
+ if (ch == QChar('|')) {
+ firstOr = i;
+ break;
+ } else if (ch == QChar('&')) {
+ if (firstAnd == -1)
+ firstAnd = i;
+ }
+ }
+ }
+ }
+ if (firstOr != -1)
+ return isTrue(condition.left(firstOr)) || isTrue(condition.mid(firstOr + 2));
+ if (firstAnd != -1)
+ return isTrue(condition.left(firstAnd)) && isTrue(condition.mid(firstAnd + 2));
+
+ QString t = condition.simplified();
+ if (t.isEmpty())
+ return true;
+
+ if (t[0] == QChar('!'))
+ return !isTrue(t.mid(1));
+ if (t[0] == QChar('(') && t.endsWith(QChar(')')))
+ return isTrue(t.mid(1, t.size() - 2));
+
+ auto match = definedX->match(t);
+ if (match.hasMatch())
+ return defines->match(match.captured(1)).hasMatch();
+ else
+ return !falsehoods->match(t).hasMatch();
+}
+
+QString Tokenizer::lexeme() const
+{
+ return sourceDecoder(m_lex);
+}
+
+QString Tokenizer::previousLexeme() const
+{
+ return sourceDecoder(m_prevLex);
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/tokenizer.h b/src/qdoc/qdoc/src/qdoc/tokenizer.h
new file mode 100644
index 000000000..d5669dfb7
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/tokenizer.h
@@ -0,0 +1,179 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef TOKENIZER_H
+#define TOKENIZER_H
+
+#include "location.h"
+
+#include <QtCore/qfile.h>
+#include <QtCore/qstack.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+/*
+ Here come the C++ tokens we support. The first part contains
+ all-purpose tokens; then come keywords.
+
+ If you add a keyword, make sure to modify the keyword array in
+ tokenizer.cpp as well, and possibly adjust Tok_FirstKeyword and
+ Tok_LastKeyword.
+*/
+enum {
+ Tok_Eoi,
+ Tok_Ampersand,
+ Tok_Aster,
+ Tok_Caret,
+ Tok_LeftParen,
+ Tok_RightParen,
+ Tok_LeftParenAster,
+ Tok_Equal,
+ Tok_LeftBrace,
+ Tok_RightBrace,
+ Tok_Semicolon,
+ Tok_Colon,
+ Tok_LeftAngle,
+ Tok_RightAngle,
+ Tok_Comma,
+ Tok_Ellipsis,
+ Tok_Gulbrandsen,
+ Tok_LeftBracket,
+ Tok_RightBracket,
+ Tok_Tilde,
+ Tok_SomeOperator,
+ Tok_Number,
+ Tok_String,
+ Tok_Doc,
+ Tok_Comment,
+ Tok_Ident,
+ Tok_At,
+ Tok_char,
+ Tok_class,
+ Tok_const,
+ Tok_double,
+ Tok_int,
+ Tok_long,
+ Tok_operator,
+ Tok_short,
+ Tok_signed,
+ Tok_typename,
+ Tok_unsigned,
+ Tok_void,
+ Tok_volatile,
+ Tok_int64,
+ Tok_QPrivateSignal,
+ Tok_FirstKeyword = Tok_char,
+ Tok_LastKeyword = Tok_QPrivateSignal
+};
+
+/*
+ The Tokenizer class implements lexical analysis of C++ source
+ files.
+
+ Not every operator or keyword of C++ is recognized; only those
+ that are interesting to us. Some Qt keywords or macros are also
+ recognized.
+*/
+
+class Tokenizer
+{
+public:
+ Tokenizer(const Location &loc, QByteArray in);
+ Tokenizer(const Location &loc, QFile &file);
+
+ ~Tokenizer();
+
+ int getToken();
+ void setParsingFnOrMacro(bool macro) { m_parsingMacro = macro; }
+
+ [[nodiscard]] const Location &location() const { return m_tokLoc; }
+ [[nodiscard]] QString previousLexeme() const;
+ [[nodiscard]] QString lexeme() const;
+ [[nodiscard]] QString version() const { return m_version; }
+ [[nodiscard]] int parenDepth() const { return m_parenDepth; }
+ [[nodiscard]] int bracketDepth() const { return m_bracketDepth; }
+
+ static void initialize();
+ static void terminate();
+ static bool isTrue(const QString &condition);
+
+private:
+ void init();
+ void start(const Location &loc);
+ /*
+ Represents the maximum amount of characters that a token can be composed
+ of.
+
+ When a token with more characters than the maximum amount is encountered, a
+ warning is issued and parsing continues, discarding all characters from the
+ currently parsed token that don't fit into the buffer.
+ */
+ enum { yyLexBufSize = 1048576 };
+
+ int getch() { return m_pos == m_in.size() ? EOF : m_in[m_pos++]; }
+
+ inline int getChar()
+ {
+ using namespace Qt::StringLiterals;
+
+ if (m_ch == EOF)
+ return EOF;
+ if (m_lexLen < yyLexBufSize - 1) {
+ m_lex[m_lexLen++] = (char)m_ch;
+ m_lex[m_lexLen] = '\0';
+ } else if (!token_too_long_warning_was_issued) {
+ location().warning(
+ u"The content is too long.\n"_s,
+ u"The maximum amount of characters for this content is %1.\n"_s.arg(yyLexBufSize) +
+ "Consider splitting it or reducing its size."
+ );
+
+ token_too_long_warning_was_issued = true;
+ }
+ m_curLoc.advance(QChar(m_ch));
+ int ch = getch();
+ if (ch == EOF)
+ return EOF;
+ // cast explicitly to make sure the value of ch
+ // is in range [0..255] to avoid assert messages
+ // when using debug CRT that checks its input.
+ return int(uint(uchar(ch)));
+ }
+
+ int getTokenAfterPreprocessor();
+ void pushSkipping(bool skip);
+ bool popSkipping();
+
+ Location m_tokLoc;
+ Location m_curLoc;
+ char *m_lexBuf1 { nullptr };
+ char *m_lexBuf2 { nullptr };
+ char *m_prevLex { nullptr };
+ char *m_lex { nullptr };
+ size_t m_lexLen {};
+ QStack<bool> m_preprocessorSkipping;
+ int m_numPreprocessorSkipping {};
+ int m_braceDepth {};
+ int m_parenDepth {};
+ int m_bracketDepth {};
+ int m_ch {};
+
+ QString m_version {};
+ bool m_parsingMacro {};
+
+ // Used to ensure that the warning that is issued when a token is
+ // too long to fit into our fixed sized buffer is not repeated for each
+ // character of that token after the last saved one.
+ // The flag is reset whenever a new token is requested, so as to allow
+ // reporting all such tokens that are too long during a single execution.
+ bool token_too_long_warning_was_issued{false};
+
+protected:
+ QByteArray m_in {};
+ int m_pos {};
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/topic.h b/src/qdoc/qdoc/src/qdoc/topic.h
new file mode 100644
index 000000000..1f9646864
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/topic.h
@@ -0,0 +1,29 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#ifndef TOPIC_H
+#define TOPIC_H
+
+QT_BEGIN_NAMESPACE
+
+struct Topic
+{
+public:
+ Topic() = default;
+ Topic(QString &t, QString a) : m_topic(t), m_args(std::move(a)) { }
+ ~Topic() = default;
+
+ [[nodiscard]] bool isEmpty() const { return m_topic.isEmpty(); }
+ void clear()
+ {
+ m_topic.clear();
+ m_args.clear();
+ }
+
+ QString m_topic {};
+ QString m_args {};
+};
+typedef QList<Topic> TopicList;
+
+QT_END_NAMESPACE
+
+#endif // TOPIC_H
diff --git a/src/qdoc/qdoc/src/qdoc/tree.cpp b/src/qdoc/qdoc/src/qdoc/tree.cpp
new file mode 100644
index 000000000..b340098b7
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/tree.cpp
@@ -0,0 +1,1363 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "tree.h"
+
+#include "classnode.h"
+#include "collectionnode.h"
+#include "doc.h"
+#include "enumnode.h"
+#include "functionnode.h"
+#include "htmlgenerator.h"
+#include "location.h"
+#include "node.h"
+#include "qdocdatabase.h"
+#include "text.h"
+#include "typedefnode.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class Tree
+
+ This class constructs and maintains a tree of instances of
+ the subclasses of Node.
+
+ This class is now private. Only class QDocDatabase has access.
+ Please don't change this. If you must access class Tree, do it
+ though the pointer to the singleton QDocDatabase.
+
+ Tree is being converted to a forest. A static member provides a
+ map of Tree *values with the module names as the keys. There is
+ one Tree in the map for each index file read, and there is one
+ tree that is not in the map for the module whose documentation
+ is being generated.
+ */
+
+/*!
+ Constructs a Tree. \a qdb is the pointer to the singleton
+ qdoc database that is constructing the tree. This might not
+ be necessary, and it might be removed later.
+
+ \a camelCaseModuleName is the project name for this tree
+ as it appears in the qdocconf file.
+ */
+Tree::Tree(const QString &camelCaseModuleName, QDocDatabase *qdb)
+ : m_camelCaseModuleName(camelCaseModuleName),
+ m_physicalModuleName(camelCaseModuleName.toLower()),
+ m_qdb(qdb),
+ m_root(nullptr, QString())
+{
+ m_root.setPhysicalModuleName(m_physicalModuleName);
+ m_root.setTree(this);
+}
+
+/*!
+ Destroys the Tree.
+
+ There are two maps of targets, keywords, and contents.
+ One map is indexed by ref, the other by title. Both maps
+ use the same set of TargetRec objects as the values,
+ so we only need to delete the values from one of them.
+
+ The Node instances themselves are destroyed by the root
+ node's (\c m_root) destructor.
+ */
+Tree::~Tree()
+{
+ qDeleteAll(m_nodesByTargetRef);
+ m_nodesByTargetRef.clear();
+ m_nodesByTargetTitle.clear();
+}
+
+/* API members */
+
+/*!
+ Calls findClassNode() first with \a path and \a start. If
+ it finds a node, the node is returned. If not, it calls
+ findNamespaceNode() with the same parameters. The result
+ is returned.
+ */
+Node *Tree::findNodeForInclude(const QStringList &path) const
+{
+ Node *n = findClassNode(path);
+ if (n == nullptr)
+ n = findNamespaceNode(path);
+ return n;
+}
+
+/*!
+ This function searches this tree for an Aggregate node with
+ the specified \a name. It returns the pointer to that node
+ or nullptr.
+
+ We might need to split the name on '::' but we assume the
+ name is a single word at the moment.
+ */
+Aggregate *Tree::findAggregate(const QString &name)
+{
+ QStringList path = name.split(QLatin1String("::"));
+ return static_cast<Aggregate *>(findNodeRecursive(path, 0, const_cast<NamespaceNode *>(root()),
+ &Node::isFirstClassAggregate));
+}
+
+/*!
+ Find the C++ class node named \a path. Begin the search at the
+ \a start node. If the \a start node is 0, begin the search
+ at the root of the tree. Only a C++ class node named \a path is
+ acceptible. If one is not found, 0 is returned.
+ */
+ClassNode *Tree::findClassNode(const QStringList &path, const Node *start) const
+{
+ if (start == nullptr)
+ start = const_cast<NamespaceNode *>(root());
+ return static_cast<ClassNode *>(findNodeRecursive(path, 0, start, &Node::isClassNode));
+}
+
+/*!
+ Find the Namespace node named \a path. Begin the search at
+ the root of the tree. Only a Namespace node named \a path
+ is acceptible. If one is not found, 0 is returned.
+ */
+NamespaceNode *Tree::findNamespaceNode(const QStringList &path) const
+{
+ Node *start = const_cast<NamespaceNode *>(root());
+ return static_cast<NamespaceNode *>(findNodeRecursive(path, 0, start, &Node::isNamespace));
+}
+
+/*!
+ This function searches for the node specified by \a path.
+ The matching node can be one of several different types
+ including a C++ class, a C++ namespace, or a C++ header
+ file.
+
+ I'm not sure if it can be a QML type, but if that is a
+ possibility, the code can easily accommodate it.
+
+ If a matching node is found, a pointer to it is returned.
+ Otherwise 0 is returned.
+ */
+Aggregate *Tree::findRelatesNode(const QStringList &path)
+{
+ Node *n = findNodeRecursive(path, 0, root(), &Node::isRelatableType);
+ return (((n != nullptr) && n->isAggregate()) ? static_cast<Aggregate *>(n) : nullptr);
+}
+
+/*!
+ Inserts function name \a funcName and function role \a funcRole into
+ the property function map for the specified \a property.
+ */
+void Tree::addPropertyFunction(PropertyNode *property, const QString &funcName,
+ PropertyNode::FunctionRole funcRole)
+{
+ m_unresolvedPropertyMap[property].insert(funcRole, funcName);
+}
+
+/*!
+ This function resolves C++ inheritance and reimplementation
+ settings for each C++ class node found in the tree beginning
+ at \a n. It also calls itself recursively for each C++ class
+ node or namespace node it encounters.
+
+ This function does not resolve QML inheritance.
+ */
+void Tree::resolveBaseClasses(Aggregate *n)
+{
+ for (auto it = n->constBegin(); it != n->constEnd(); ++it) {
+ if ((*it)->isClassNode()) {
+ auto *cn = static_cast<ClassNode *>(*it);
+ QList<RelatedClass> &bases = cn->baseClasses();
+ for (auto &base : bases) {
+ if (base.m_node == nullptr) {
+ Node *n = m_qdb->findClassNode(base.m_path);
+ /*
+ If the node for the base class was not found,
+ the reason might be that the subclass is in a
+ namespace and the base class is in the same
+ namespace, but the base class name was not
+ qualified with the namespace name. That is the
+ case most of the time. Then restart the search
+ at the parent of the subclass node (the namespace
+ node) using the unqualified base class name.
+ */
+ if (n == nullptr) {
+ Aggregate *parent = cn->parent();
+ if (parent != nullptr)
+ // Exclude the root namespace
+ if (parent->isNamespace() && !parent->name().isEmpty())
+ n = findClassNode(base.m_path, parent);
+ }
+ if (n != nullptr) {
+ auto *bcn = static_cast<ClassNode *>(n);
+ base.m_node = bcn;
+ bcn->addDerivedClass(base.m_access, cn);
+ }
+ }
+ }
+ resolveBaseClasses(cn);
+ } else if ((*it)->isNamespace()) {
+ resolveBaseClasses(static_cast<NamespaceNode *>(*it));
+ }
+ }
+}
+
+/*!
+ */
+void Tree::resolvePropertyOverriddenFromPtrs(Aggregate *n)
+{
+ for (auto node = n->constBegin(); node != n->constEnd(); ++node) {
+ if ((*node)->isClassNode()) {
+ auto *cn = static_cast<ClassNode *>(*node);
+ for (auto property = cn->constBegin(); property != cn->constEnd(); ++property) {
+ if ((*property)->isProperty())
+ cn->resolvePropertyOverriddenFromPtrs(static_cast<PropertyNode *>(*property));
+ }
+ resolvePropertyOverriddenFromPtrs(cn);
+ } else if ((*node)->isNamespace()) {
+ resolvePropertyOverriddenFromPtrs(static_cast<NamespaceNode *>(*node));
+ }
+ }
+}
+
+/*!
+ Resolves access functions associated with each PropertyNode stored
+ in \c m_unresolvedPropertyMap, and adds them into the property node.
+ This allows the property node to list the access functions when
+ generating their documentation.
+ */
+void Tree::resolveProperties()
+{
+ for (auto propEntry = m_unresolvedPropertyMap.constBegin();
+ propEntry != m_unresolvedPropertyMap.constEnd(); ++propEntry) {
+ PropertyNode *property = propEntry.key();
+ Aggregate *parent = property->parent();
+ QString getterName = (*propEntry)[PropertyNode::FunctionRole::Getter];
+ QString setterName = (*propEntry)[PropertyNode::FunctionRole::Setter];
+ QString resetterName = (*propEntry)[PropertyNode::FunctionRole::Resetter];
+ QString notifierName = (*propEntry)[PropertyNode::FunctionRole::Notifier];
+ QString bindableName = (*propEntry)[PropertyNode::FunctionRole::Bindable];
+
+ for (auto it = parent->constBegin(); it != parent->constEnd(); ++it) {
+ if ((*it)->isFunction()) {
+ auto *function = static_cast<FunctionNode *>(*it);
+ if (function->access() == property->access()
+ && (function->status() == property->status() || function->doc().isEmpty())) {
+ if (function->name() == getterName) {
+ property->addFunction(function, PropertyNode::FunctionRole::Getter);
+ } else if (function->name() == setterName) {
+ property->addFunction(function, PropertyNode::FunctionRole::Setter);
+ } else if (function->name() == resetterName) {
+ property->addFunction(function, PropertyNode::FunctionRole::Resetter);
+ } else if (function->name() == notifierName) {
+ property->addSignal(function, PropertyNode::FunctionRole::Notifier);
+ } else if (function->name() == bindableName) {
+ property->addFunction(function, PropertyNode::FunctionRole::Bindable);
+ }
+ }
+ }
+ }
+ }
+
+ for (auto propEntry = m_unresolvedPropertyMap.constBegin();
+ propEntry != m_unresolvedPropertyMap.constEnd(); ++propEntry) {
+ PropertyNode *property = propEntry.key();
+ // redo it to set the property functions
+ if (property->overriddenFrom())
+ property->setOverriddenFrom(property->overriddenFrom());
+ }
+
+ m_unresolvedPropertyMap.clear();
+}
+
+/*!
+ For each QML class node that points to a C++ class node,
+ follow its C++ class node pointer and set the C++ class
+ node's QML class node pointer back to the QML class node.
+ */
+void Tree::resolveCppToQmlLinks()
+{
+
+ const NodeList &children = m_root.childNodes();
+ for (auto *child : children) {
+ if (child->isQmlType()) {
+ auto *qcn = static_cast<QmlTypeNode *>(child);
+ auto *cn = const_cast<ClassNode *>(qcn->classNode());
+ if (cn)
+ cn->setQmlElement(qcn);
+ }
+ }
+}
+
+/*!
+ For each \a aggregate, recursively set the \\since version based on
+ \\since information from the associated physical or logical module.
+ That is, C++ and QML types inherit the \\since of their module,
+ unless that command is explicitly used in the type documentation.
+
+ In addition, resolve the since information for individual enum
+ values.
+*/
+void Tree::resolveSince(Aggregate &aggregate)
+{
+ for (auto *child : aggregate.childNodes()) {
+ // Order matters; resolve since-clauses in enum values
+ // first as EnumNode is not an Aggregate
+ if (child->isEnumType())
+ resolveEnumValueSince(static_cast<EnumNode&>(*child));
+ if (!child->isAggregate())
+ continue;
+ if (!child->since().isEmpty())
+ continue;
+
+ if (const auto collectionNode = m_qdb->getModuleNode(child))
+ child->setSince(collectionNode->since());
+
+ resolveSince(static_cast<Aggregate&>(*child));
+ }
+}
+
+/*!
+ Resolve since information for values of enum node \a en.
+
+ Enum values are not derived from Node, but they can have
+ 'since' information associated with them. Since-strings
+ for each enum item are initially stored in the Doc
+ instance of EnumNode as SinceTag atoms; parse the doc
+ and store them into each EnumItem.
+*/
+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))) {
+ if (atom = atom->next(); !atom)
+ break;
+ if (auto val = atom->string(); enumItems.contains(val)) {
+ if (atom = atom->next(); atom && atom->next(Atom::SinceTagLeft))
+ en.setSince(val, atom->next()->next()->string());
+ }
+ }
+}
+
+/*!
+ Traverse this Tree and for each ClassNode found, remove
+ from its list of base classes any that are marked private
+ or internal. When a class is removed from a base class
+ list, promote its public pase classes to be base classes
+ of the class where the base class was removed. This is
+ done for documentation purposes. The function is recursive
+ on namespace nodes.
+ */
+void Tree::removePrivateAndInternalBases(NamespaceNode *rootNode)
+{
+ if (rootNode == nullptr)
+ rootNode = root();
+
+ for (auto node = rootNode->constBegin(); node != rootNode->constEnd(); ++node) {
+ if ((*node)->isClassNode())
+ static_cast<ClassNode *>(*node)->removePrivateAndInternalBases();
+ else if ((*node)->isNamespace())
+ removePrivateAndInternalBases(static_cast<NamespaceNode *>(*node));
+ }
+}
+
+/*!
+ */
+ClassList Tree::allBaseClasses(const ClassNode *classNode) const
+{
+ ClassList result;
+ const auto &baseClasses = classNode->baseClasses();
+ for (const auto &relatedClass : baseClasses) {
+ if (relatedClass.m_node != nullptr) {
+ result += relatedClass.m_node;
+ result += allBaseClasses(relatedClass.m_node);
+ }
+ }
+ return result;
+}
+
+/*!
+ Find the node with the specified \a path name that is of
+ the specified \a type and \a subtype. Begin the search at
+ the \a start node. If the \a start node is 0, begin the
+ search at the tree root. \a subtype is not used unless
+ \a type is \c{Page}.
+ */
+Node *Tree::findNodeByNameAndType(const QStringList &path, bool (Node::*isMatch)() const) const
+{
+ return findNodeRecursive(path, 0, root(), isMatch);
+}
+
+/*!
+ Recursive search for a node identified by \a path. Each
+ path element is a name. \a pathIndex specifies the index
+ of the name in \a path to try to match. \a start is the
+ node whose children shoulod be searched for one that has
+ that name. Each time a match is found, increment the
+ \a pathIndex and call this function recursively.
+
+ If the end of the path is reached (i.e. if a matching
+ node is found for each name in the \a path), the \a type
+ must match the type of the last matching node, and if the
+ type is \e{Page}, the \a subtype must match as well.
+
+ If the algorithm is successful, the pointer to the final
+ node is returned. Otherwise 0 is returned.
+ */
+Node *Tree::findNodeRecursive(const QStringList &path, int pathIndex, const Node *start,
+ bool (Node::*isMatch)() const) const
+{
+ if (start == nullptr || path.isEmpty())
+ return nullptr;
+ Node *node = const_cast<Node *>(start);
+ if (!node->isAggregate())
+ return ((pathIndex >= path.size()) ? node : nullptr);
+ auto *current = static_cast<Aggregate *>(node);
+ const NodeList &children = current->childNodes();
+ const QString &name = path.at(pathIndex);
+ for (auto *node : children) {
+ if (node == nullptr)
+ continue;
+ if (node->name() == name) {
+ if (pathIndex + 1 >= path.size()) {
+ if ((node->*(isMatch))())
+ return node;
+ continue;
+ } else { // Search the children of n for the next name in the path.
+ node = findNodeRecursive(path, pathIndex + 1, node, isMatch);
+ if (node != nullptr)
+ return node;
+ }
+ }
+ }
+ return nullptr;
+}
+
+/*!
+ Searches the tree for a node that matches the \a path plus
+ the \a target. The search begins at \a start and moves up
+ the parent chain from there, or, if \a start is 0, the search
+ begins at the root.
+
+ The \a flags can indicate whether to search base classes and/or
+ the enum values in enum types. \a genus further restricts
+ the type of nodes to match, i.e. CPP or QML.
+
+ If a matching node is found, \a ref is set to the HTML fragment
+ identifier to use for the link. On return, the optional
+ \a targetType parameter contains the type of the resolved
+ target; section title (Contents), \\target, \\keyword, or other
+ (Unknown).
+ */
+const Node *Tree::findNodeForTarget(const QStringList &path, const QString &target,
+ const Node *start, int flags, Node::Genus genus,
+ QString &ref, TargetRec::TargetType *targetType) const
+{
+ const Node *node = nullptr;
+
+ // Retrieves and sets ref from target for Node n.
+ // Returns n on valid (or empty) target, or nullptr on an invalid target.
+ auto set_ref_from_target = [this, &ref, &target](const Node *n) -> const Node* {
+ if (!target.isEmpty()) {
+ if (ref = getRef(target, n); ref.isEmpty())
+ return nullptr;
+ }
+ return n;
+ };
+
+ if (genus == Node::DontCare || genus == Node::DOC) {
+ if (node = findPageNodeByTitle(path.at(0)); node) {
+ if (node = set_ref_from_target(node); node)
+ return node;
+ }
+ }
+
+ const TargetRec *result = findUnambiguousTarget(path.join(QLatin1String("::")), genus);
+ if (result) {
+ ref = result->m_ref;
+ if (node = set_ref_from_target(result->m_node); node) {
+ // Delay returning references to section titles as we
+ // may find a better match below
+ if (result->m_type != TargetRec::Contents) {
+ if (targetType)
+ *targetType = result->m_type;
+ return node;
+ }
+ ref.clear();
+ }
+ }
+
+ const Node *current = start ? start : root();
+ /*
+ If the path contains one or two double colons ("::"),
+ check if the first two path elements refer to a QML type.
+ If so, path[0] is QML module identifier, and path[1] is
+ the type.
+ */
+ int path_idx = 0;
+ if ((genus == Node::QML || genus == Node::DontCare)
+ && path.size() >= 2 && !path[0].isEmpty()) {
+ if (auto *qcn = lookupQmlType(path.sliced(0, 2).join(QLatin1String("::"))); qcn) {
+ current = qcn;
+ // No further elements in the path, return the type
+ if (path.size() == 2)
+ return set_ref_from_target(qcn);
+ path_idx = 2;
+ }
+ }
+
+ while (current) {
+ if (current->isAggregate()) {
+ if (const Node *match = matchPathAndTarget(
+ path, path_idx, target, current, flags, genus, ref);
+ match != nullptr)
+ return match;
+ }
+ current = current->parent();
+ path_idx = 0;
+ }
+
+ if (node && result) {
+ // Fall back to previously found section title
+ ref = result->m_ref;
+ if (targetType)
+ *targetType = result->m_type;
+ }
+ return node;
+}
+
+/*!
+ First, the \a path is used to find a node. The \a path
+ matches some part of the node's fully quallified name.
+ If the \a target is not empty, it must match a target
+ in the matching node. If the matching of the \a path
+ and the \a target (if present) is successful, \a ref
+ is set from the \a target, and the pointer to the
+ matching node is returned. \a idx is the index into the
+ \a path where to begin the matching. The function is
+ recursive with idx being incremented for each recursive
+ call.
+
+ The matching node must be of the correct \a genus, i.e.
+ either QML or C++, but \a genus can be set to \c DontCare.
+ \a flags indicates whether to search base classes and
+ whether to search for an enum value. \a node points to
+ the node where the search should begin, assuming the
+ \a path is a not a fully-qualified name. \a node is
+ most often the root of this Tree.
+ */
+const Node *Tree::matchPathAndTarget(const QStringList &path, int idx, const QString &target,
+ const Node *node, int flags, Node::Genus genus,
+ QString &ref) const
+{
+ /*
+ If the path has been matched, then if there is a target,
+ try to match the target. If there is a target, but you
+ can't match it at the end of the path, give up; return 0.
+ */
+ if (idx == path.size()) {
+ if (!target.isEmpty()) {
+ ref = getRef(target, node);
+ if (ref.isEmpty())
+ return nullptr;
+ }
+ if (node->isFunction() && node->name() == node->parent()->name())
+ node = node->parent();
+ return node;
+ }
+
+ QString name = path.at(idx);
+ if (node->isAggregate()) {
+ NodeVector nodes;
+ static_cast<const Aggregate *>(node)->findChildren(name, nodes);
+ for (const auto *child : std::as_const(nodes)) {
+ if (genus != Node::DontCare && !(genus & child->genus()))
+ continue;
+ const Node *t = matchPathAndTarget(path, idx + 1, target, child, flags, genus, ref);
+ if (t && !t->isPrivate())
+ return t;
+ }
+ }
+ if (target.isEmpty() && (flags & SearchEnumValues)) {
+ const auto *enumNode = node->isAggregate() ?
+ findEnumNode(nullptr, node, path, idx) :
+ findEnumNode(node, nullptr, path, idx);
+ if (enumNode)
+ return enumNode;
+ }
+ if (((genus == Node::CPP) || (genus == Node::DontCare)) && node->isClassNode()
+ && (flags & SearchBaseClasses)) {
+ const ClassList bases = allBaseClasses(static_cast<const ClassNode *>(node));
+ for (const auto *base : bases) {
+ const Node *t = matchPathAndTarget(path, idx, target, base, flags, genus, ref);
+ if (t && !t->isPrivate())
+ return t;
+ if (target.isEmpty() && (flags & SearchEnumValues)) {
+ if ((t = findEnumNode(base->findChildNode(path.at(idx), genus, flags), base, path, idx)))
+ return t;
+ }
+ }
+ }
+ return nullptr;
+}
+
+/*!
+ Searches the tree for a node that matches the \a path. The
+ search begins at \a start but can move up the parent chain
+ recursively if no match is found. The \a flags are used to
+ restrict the search.
+ */
+const Node *Tree::findNode(const QStringList &path, const Node *start, int flags,
+ Node::Genus genus) const
+{
+ const Node *current = start;
+ if (current == nullptr)
+ current = root();
+
+ do {
+ const Node *node = current;
+ int i;
+ int start_idx = 0;
+
+ /*
+ If the path contains one or two double colons ("::"),
+ check first to see if the first two path strings refer
+ to a QML element. If they do, path[0] will be the QML
+ module identifier, and path[1] will be the QML type.
+ If the answer is yes, the reference identifies a QML
+ type node.
+ */
+ if (((genus == Node::QML) || (genus == Node::DontCare)) && (path.size() >= 2)
+ && !path[0].isEmpty()) {
+ QmlTypeNode *qcn = lookupQmlType(QString(path[0] + "::" + path[1]));
+ if (qcn != nullptr) {
+ node = qcn;
+ if (path.size() == 2)
+ return node;
+ start_idx = 2;
+ }
+ }
+
+ for (i = start_idx; i < path.size(); ++i) {
+ if (node == nullptr || !node->isAggregate())
+ break;
+
+ // Clear the TypesOnly flag until the last path segment, as e.g. namespaces are not
+ // types. We also ignore module nodes as they are not aggregates and thus have no
+ // children.
+ int tmpFlags = (i < path.size() - 1) ? (flags & ~TypesOnly) | IgnoreModules : flags;
+
+ const Node *next = static_cast<const Aggregate *>(node)->findChildNode(path.at(i),
+ genus, tmpFlags);
+ const Node *enumNode = (flags & SearchEnumValues) ?
+ findEnumNode(next, node, path, i) : nullptr;
+
+ if (enumNode)
+ return enumNode;
+
+
+ if (!next && ((genus == Node::CPP) || (genus == Node::DontCare))
+ && node->isClassNode() && (flags & SearchBaseClasses)) {
+ const ClassList bases = allBaseClasses(static_cast<const ClassNode *>(node));
+ for (const auto *base : bases) {
+ next = base->findChildNode(path.at(i), genus, tmpFlags);
+ if (flags & SearchEnumValues)
+ if ((enumNode = findEnumNode(next, base, path, i)))
+ return enumNode;
+ if (next)
+ break;
+ }
+ }
+ node = next;
+ }
+ if ((node != nullptr) && i == path.size())
+ return node;
+ current = current->parent();
+ } while (current != nullptr);
+
+ return nullptr;
+}
+
+
+/*!
+ \internal
+
+ Helper function to return an enum that matches the \a path at a specified \a offset.
+ If \a node is a valid enum node, the enum name is assumed to be included in the path
+ (i.e, a scoped enum). Otherwise, query the \a aggregate (typically, the class node)
+ for enum node that includes the value at the last position in \a path.
+ */
+const Node *Tree::findEnumNode(const Node *node, const Node *aggregate, const QStringList &path, int offset) const
+{
+ // Scoped enum (path ends in enum_name :: enum_value)
+ if (node && node->isEnumType() && offset == path.size() - 1) {
+ const auto *en = static_cast<const EnumNode*>(node);
+ if (en->isScoped() && en->hasItem(path.last()))
+ return en;
+ }
+
+ // Standard enum (path ends in class_name :: enum_value)
+ return (!node && aggregate && offset == path.size() - 1) ?
+ static_cast<const Aggregate *>(aggregate)->findEnumNodeForValue(path.last()) :
+ nullptr;
+}
+
+/*!
+ This function searches for a node with a canonical title
+ constructed from \a target. If the node it finds is \a node,
+ it returns the ref from that node. Otherwise it returns an
+ empty string.
+ */
+QString Tree::getRef(const QString &target, const Node *node) const
+{
+ auto it = m_nodesByTargetTitle.constFind(target);
+ if (it != m_nodesByTargetTitle.constEnd()) {
+ do {
+ if (it.value()->m_node == node)
+ return it.value()->m_ref;
+ ++it;
+ } while (it != m_nodesByTargetTitle.constEnd() && it.key() == target);
+ }
+ QString key = Utilities::asAsciiPrintable(target);
+ it = m_nodesByTargetRef.constFind(key);
+ if (it != m_nodesByTargetRef.constEnd()) {
+ do {
+ if (it.value()->m_node == node)
+ return it.value()->m_ref;
+ ++it;
+ } while (it != m_nodesByTargetRef.constEnd() && it.key() == key);
+ }
+ return QString();
+}
+
+/*!
+ Inserts a new target into the target table. \a name is the
+ key. The target record contains the \a type, a pointer to
+ the \a node, the \a priority. and a canonicalized form of
+ the \a name, which is later used.
+ */
+void Tree::insertTarget(const QString &name, const QString &title, TargetRec::TargetType type,
+ Node *node, int priority)
+{
+ auto *target = new TargetRec(name, type, node, priority);
+ m_nodesByTargetRef.insert(name, target);
+ m_nodesByTargetTitle.insert(title, target);
+}
+
+/*!
+ \internal
+
+ \a root is the root node of the tree to resolve targets for. This function
+ traverses the tree starting from the root node and processes each child
+ node. If the child node is an aggregate node, this function is called
+ recursively on the child node.
+ */
+void Tree::resolveTargets(Aggregate *root)
+{
+ for (auto *child : root->childNodes()) {
+ addToPageNodeByTitleMap(child);
+ populateTocSectionTargetMap(child);
+ addKeywordsToTargetMaps(child);
+ addTargetsToTargetMap(child);
+
+ if (child->isAggregate())
+ resolveTargets(static_cast<Aggregate *>(child));
+ }
+}
+
+/*!
+ \internal
+
+ Updates the target maps for targets associated with the given \a node.
+ */
+void Tree::addTargetsToTargetMap(Node *node) {
+ if (!node || !node->doc().hasTargets())
+ return;
+
+ for (Atom *i : std::as_const(node->doc().targets())) {
+ const QString ref = refForAtom(i);
+ const QString title = i->string();
+ if (!ref.isEmpty() && !title.isEmpty()) {
+ QString key = Utilities::asAsciiPrintable(title);
+ auto *target = new TargetRec(ref, TargetRec::Target, node, 2);
+ m_nodesByTargetRef.insert(key, target);
+ m_nodesByTargetTitle.insert(title, target);
+ }
+ }
+}
+
+/*!
+ \internal
+
+ Updates the target maps for keywords associated with the given \a node.
+ */
+void Tree::addKeywordsToTargetMaps(Node *node) {
+ if (!node->doc().hasKeywords())
+ return;
+
+ for (Atom *i : std::as_const(node->doc().keywords())) {
+ QString ref = refForAtom(i);
+ QString title = i->string();
+ if (!ref.isEmpty() && !title.isEmpty()) {
+ auto *target = new TargetRec(ref, TargetRec::Keyword, node, 1);
+ m_nodesByTargetRef.insert(Utilities::asAsciiPrintable(title), target);
+ m_nodesByTargetTitle.insert(title, target);
+ }
+ }
+}
+
+/*!
+ \internal
+
+ Populates the map of targets for each section in the table of contents for
+ the given \a node while ensuring that each target has a unique reference.
+ */
+void Tree::populateTocSectionTargetMap(Node *node) {
+ if (!node || !node->doc().hasTableOfContents())
+ return;
+
+ QStack<Atom *> tocLevels;
+ QSet<QString> anchors;
+
+ qsizetype index = 0;
+
+ for (Atom *atom: std::as_const(node->doc().tableOfContents())) {
+ while (!tocLevels.isEmpty() && tocLevels.top()->string().toInt() >= atom->string().toInt())
+ tocLevels.pop();
+
+ tocLevels.push(atom);
+
+ QString ref = refForAtom(atom);
+ const QString &title = Text::sectionHeading(atom).toString();
+ if (ref.isEmpty() || title.isEmpty())
+ continue;
+
+ if (anchors.contains(ref)) {
+ QStringList refParts;
+ for (const auto tocLevel : tocLevels)
+ refParts << refForAtom(tocLevel);
+
+ refParts << QString::number(index);
+ ref = refParts.join(QLatin1Char('-'));
+ }
+
+ anchors.insert(ref);
+ if (atom->next(Atom::SectionHeadingLeft))
+ atom->next()->append(ref);
+ ++index;
+
+ const QString &key = Utilities::asAsciiPrintable(title);
+ auto *target = new TargetRec(ref, TargetRec::Contents, node, 3);
+ m_nodesByTargetRef.insert(key, target);
+ m_nodesByTargetTitle.insert(title, target);
+ }
+}
+
+/*!
+ \internal
+
+ Checks if the \a node's title is registered in the page nodes by title map.
+ If not, it stores the page node in the map.
+ */
+void Tree::addToPageNodeByTitleMap(Node *node) {
+ if (!node || !node->isTextPageNode())
+ return;
+
+ auto *pageNode = static_cast<PageNode *>(node);
+ QString key = pageNode->title();
+ if (key.isEmpty())
+ return;
+
+ if (key.contains(QChar(' ')))
+ key = Utilities::asAsciiPrintable(key);
+ const QList<PageNode *> nodes = m_pageNodesByTitle.values(key);
+
+ bool alreadyThere = std::any_of(nodes.cbegin(), nodes.cend(), [&](const auto &knownNode) {
+ return knownNode->isExternalPage() && knownNode->name() == pageNode->name();
+ });
+
+ if (!alreadyThere)
+ m_pageNodesByTitle.insert(key, pageNode);
+}
+
+/*!
+ Searches for a \a target anchor, matching the given \a genus, and returns
+ the associated TargetRec instance.
+ */
+const TargetRec *Tree::findUnambiguousTarget(const QString &target, Node::Genus genus) const
+{
+ auto findBestCandidate = [&](const TargetMap &tgtMap, const QString &key) {
+ TargetRec *best = nullptr;
+ auto [it, end] = tgtMap.equal_range(key);
+ while (it != end) {
+ TargetRec *candidate = it.value();
+ if ((genus == Node::DontCare) || (genus & candidate->genus())) {
+ if (!best || (candidate->m_priority < best->m_priority))
+ best = candidate;
+ }
+ ++it;
+ }
+ return best;
+ };
+
+ TargetRec *bestTarget = findBestCandidate(m_nodesByTargetTitle, target);
+ if (!bestTarget)
+ bestTarget = findBestCandidate(m_nodesByTargetRef, Utilities::asAsciiPrintable(target));
+
+ return bestTarget;
+}
+
+/*!
+ This function searches for a node with the specified \a title.
+ */
+const PageNode *Tree::findPageNodeByTitle(const QString &title) const
+{
+ PageNodeMultiMap::const_iterator it;
+ if (title.contains(QChar(' ')))
+ it = m_pageNodesByTitle.constFind(Utilities::asAsciiPrintable(title));
+ else
+ it = m_pageNodesByTitle.constFind(title);
+ if (it != m_pageNodesByTitle.constEnd()) {
+ /*
+ Reporting all these duplicate section titles is probably
+ overkill. We should report the duplicate file and let
+ that suffice.
+ */
+ PageNodeMultiMap::const_iterator j = it;
+ ++j;
+ if (j != m_pageNodesByTitle.constEnd() && j.key() == it.key()) {
+ while (j != m_pageNodesByTitle.constEnd()) {
+ if (j.key() == it.key() && j.value()->url().isEmpty()) {
+ break; // Just report one duplicate for now.
+ }
+ ++j;
+ }
+ if (j != m_pageNodesByTitle.cend()) {
+ it.value()->location().warning("This page title exists in more than one file: "
+ + title);
+ j.value()->location().warning("[It also exists here]");
+ }
+ }
+ return it.value();
+ }
+ return nullptr;
+}
+
+/*!
+ Returns a canonical title for the \a atom, if the \a atom
+ is a SectionLeft, SectionHeadingLeft, Keyword, or Target.
+ */
+QString Tree::refForAtom(const Atom *atom)
+{
+ Q_ASSERT(atom);
+
+ switch (atom->type()) {
+ case Atom::SectionLeft:
+ atom = atom->next();
+ [[fallthrough]];
+ case Atom::SectionHeadingLeft:
+ if (atom->count() == 2)
+ return atom->string(1);
+ return Utilities::asAsciiPrintable(Text::sectionHeading(atom).toString());
+ case Atom::Target:
+ [[fallthrough]];
+ case Atom::Keyword:
+ return Utilities::asAsciiPrintable(atom->string());
+ default:
+ return {};
+ }
+}
+
+/*!
+ \fn const CNMap &Tree::groups() const
+ Returns a const reference to the collection of all
+ group nodes.
+*/
+
+/*!
+ \fn const ModuleMap &Tree::modules() const
+ Returns a const reference to the collection of all
+ module nodes.
+*/
+
+/*!
+ \fn const QmlModuleMap &Tree::qmlModules() const
+ Returns a const reference to the collection of all
+ QML module nodes.
+*/
+
+/*!
+ Returns a pointer to the collection map specified by \a type.
+ Returns null if \a type is not specified.
+ */
+CNMap *Tree::getCollectionMap(Node::NodeType type)
+{
+ switch (type) {
+ case Node::Group:
+ return &m_groups;
+ case Node::Module:
+ return &m_modules;
+ case Node::QmlModule:
+ return &m_qmlModules;
+ default:
+ break;
+ }
+ return nullptr;
+}
+
+/*!
+ Searches this tree for a collection named \a name with the
+ specified \a type. If the collection is found, a pointer
+ to it is returned. If a collection is not found, null is
+ returned.
+ */
+CollectionNode *Tree::getCollection(const QString &name, Node::NodeType type)
+{
+ CNMap *map = getCollectionMap(type);
+ if (map) {
+ auto it = map->constFind(name);
+ if (it != map->cend())
+ return it.value();
+ }
+ return nullptr;
+}
+
+/*!
+ Find the group, module, or QML module named \a name and return a
+ pointer to that collection node. \a type specifies which kind of
+ collection node you want. If a collection node with the specified \a
+ name and \a type is not found, a new one is created, and the pointer
+ to the new one is returned.
+
+ If a new collection node is created, its parent is the tree
+ root, and the new collection node is marked \e{not seen}.
+
+ \a genus must be specified, i.e. it must not be \c{DontCare}.
+ If it is \c{DontCare}, 0 is returned, which is a programming
+ error.
+ */
+CollectionNode *Tree::findCollection(const QString &name, Node::NodeType type)
+{
+ CNMap *m = getCollectionMap(type);
+ if (!m) // error
+ return nullptr;
+ auto it = m->constFind(name);
+ if (it != m->cend())
+ return it.value();
+ CollectionNode *cn = new CollectionNode(type, root(), name);
+ cn->markNotSeen();
+ m->insert(name, cn);
+ return cn;
+}
+
+/*! \fn CollectionNode *Tree::findGroup(const QString &name)
+ Find the group node named \a name and return a pointer
+ to it. If the group node is not found, add a new group
+ node named \a name and return a pointer to the new one.
+
+ If a new group node is added, its parent is the tree root,
+ and the new group node is marked \e{not seen}.
+ */
+
+/*! \fn CollectionNode *Tree::findModule(const QString &name)
+ Find the module node named \a name and return a pointer
+ to it. If a matching node is not found, add a new module
+ node named \a name and return a pointer to that one.
+
+ If a new module node is added, its parent is the tree root,
+ and the new module node is marked \e{not seen}.
+ */
+
+/*! \fn CollectionNode *Tree::findQmlModule(const QString &name)
+ Find the QML module node named \a name and return a pointer
+ to it. If a matching node is not found, add a new QML module
+ node named \a name and return a pointer to that one.
+
+ If a new QML module node is added, its parent is the tree root,
+ and the new node is marked \e{not seen}.
+ */
+
+/*! \fn CollectionNode *Tree::addGroup(const QString &name)
+ Looks up the group node named \a name in the collection
+ of all group nodes. If a match is found, a pointer to the
+ node is returned. Otherwise, a new group node named \a name
+ is created and inserted into the collection, and the pointer
+ to that node is returned.
+ */
+
+/*! \fn CollectionNode *Tree::addModule(const QString &name)
+ Looks up the module node named \a name in the collection
+ of all module nodes. If a match is found, a pointer to the
+ node is returned. Otherwise, a new module node named \a name
+ is created and inserted into the collection, and the pointer
+ to that node is returned.
+ */
+
+/*! \fn CollectionNode *Tree::addQmlModule(const QString &name)
+ Looks up the QML module node named \a name in the collection
+ of all QML module nodes. If a match is found, a pointer to the
+ node is returned. Otherwise, a new QML module node named \a name
+ is created and inserted into the collection, and the pointer
+ to that node is returned.
+ */
+
+/*!
+ Looks up the group node named \a name in the collection
+ of all group nodes. If a match is not found, a new group
+ node named \a name is created and inserted into the collection.
+ Then append \a node to the group's members list, and append the
+ group name to the list of group names in \a node. The parent of
+ \a node is not changed by this function. Returns a pointer to
+ the group node.
+ */
+CollectionNode *Tree::addToGroup(const QString &name, Node *node)
+{
+ CollectionNode *cn = findGroup(name);
+ if (!node->isInternal()) {
+ cn->addMember(node);
+ node->appendGroupName(name);
+ }
+ return cn;
+}
+
+/*!
+ Looks up the module node named \a name in the collection
+ of all module nodes. If a match is not found, a new module
+ node named \a name is created and inserted into the collection.
+ Then append \a node to the module's members list. The parent of
+ \a node is not changed by this function. Returns the module node.
+ */
+CollectionNode *Tree::addToModule(const QString &name, Node *node)
+{
+ CollectionNode *cn = findModule(name);
+ cn->addMember(node);
+ node->setPhysicalModuleName(name);
+ return cn;
+}
+
+/*!
+ Looks up the QML module named \a name. If it isn't there,
+ create it. Then append \a node to the QML module's member
+ list. The parent of \a node is not changed by this function.
+ Returns the pointer to the QML module node.
+ */
+CollectionNode *Tree::addToQmlModule(const QString &name, Node *node)
+{
+ QStringList qmid;
+ QStringList dotSplit;
+ QStringList blankSplit = name.split(QLatin1Char(' '));
+ qmid.append(blankSplit[0]);
+ if (blankSplit.size() > 1) {
+ qmid.append(blankSplit[0] + blankSplit[1]);
+ dotSplit = blankSplit[1].split(QLatin1Char('.'));
+ qmid.append(blankSplit[0] + dotSplit[0]);
+ }
+
+ CollectionNode *cn = findQmlModule(blankSplit[0]);
+ cn->addMember(node);
+ node->setQmlModule(cn);
+ if (node->isQmlType()) {
+ QmlTypeNode *n = static_cast<QmlTypeNode *>(node);
+ for (int i = 0; i < qmid.size(); ++i) {
+ QString key = qmid[i] + "::" + node->name();
+ insertQmlType(key, n);
+ }
+ }
+ return cn;
+}
+
+/*!
+ If the QML type map does not contain \a key, insert node
+ \a n with the specified \a key.
+ */
+void Tree::insertQmlType(const QString &key, QmlTypeNode *n)
+{
+ if (!m_qmlTypeMap.contains(key))
+ m_qmlTypeMap.insert(key, n);
+}
+
+/*!
+ Finds the function node with the specifried name \a path that
+ also has the specified \a parameters and returns a pointer to
+ the first matching function node if one is found.
+
+ This function begins searching the tree at \a relative for
+ the \l {FunctionNode} {function node} identified by \a path
+ that has the specified \a parameters. The \a flags are
+ used to restrict the search. If a matching node is found, a
+ pointer to it is returned. Otherwise, nullis returned. If
+ \a relative is ull, the search begins at the tree root.
+ */
+const FunctionNode *Tree::findFunctionNode(const QStringList &path, const Parameters &parameters,
+ const Node *relative, Node::Genus genus) const
+{
+ if (path.size() == 3 && !path[0].isEmpty()
+ && ((genus == Node::QML) || (genus == Node::DontCare))) {
+ QmlTypeNode *qcn = lookupQmlType(QString(path[0] + "::" + path[1]));
+ if (qcn == nullptr) {
+ QStringList p(path[1]);
+ Node *n = findNodeByNameAndType(p, &Node::isQmlType);
+ if ((n != nullptr) && n->isQmlType())
+ qcn = static_cast<QmlTypeNode *>(n);
+ }
+ if (qcn != nullptr)
+ return static_cast<const FunctionNode *>(qcn->findFunctionChild(path[2], parameters));
+ }
+
+ if (relative == nullptr)
+ relative = root();
+ else if (genus != Node::DontCare) {
+ if (!(genus & relative->genus()))
+ relative = root();
+ }
+
+ do {
+ Node *node = const_cast<Node *>(relative);
+ int i;
+
+ for (i = 0; i < path.size(); ++i) {
+ if (node == nullptr || !node->isAggregate())
+ break;
+
+ Aggregate *aggregate = static_cast<Aggregate *>(node);
+ Node *next = nullptr;
+ if (i == path.size() - 1)
+ next = aggregate->findFunctionChild(path.at(i), parameters);
+ else
+ next = aggregate->findChildNode(path.at(i), genus);
+
+ if ((next == nullptr) && aggregate->isClassNode()) {
+ const ClassList bases = allBaseClasses(static_cast<const ClassNode *>(aggregate));
+ for (auto *base : bases) {
+ if (i == path.size() - 1)
+ next = base->findFunctionChild(path.at(i), parameters);
+ else
+ next = base->findChildNode(path.at(i), genus);
+
+ if (next != nullptr)
+ break;
+ }
+ }
+
+ node = next;
+ } // for (i = 0; i < path.size(); ++i)
+
+ if (node && i == path.size() && node->isFunction()) {
+ // A function node was found at the end of the path.
+ // If it is not marked private, return it. If it is
+ // marked private, then if it overrides a function,
+ // find that function instead because it might not
+ // be marked private. If all the overloads are
+ // marked private, return the original function node.
+ // This should be replace with findOverriddenFunctionNode().
+ const FunctionNode *fn = static_cast<const FunctionNode *>(node);
+ const FunctionNode *FN = fn;
+ while (FN->isPrivate() && !FN->overridesThis().isEmpty()) {
+ QStringList path = FN->overridesThis().split("::");
+ FN = m_qdb->findFunctionNode(path, parameters, relative, genus);
+ if (FN == nullptr)
+ break;
+ if (!FN->isPrivate())
+ return FN;
+ }
+ return fn;
+ }
+ relative = relative->parent();
+ } while (relative);
+ return nullptr;
+}
+
+/*!
+ Search this tree recursively from \a parent to find a function
+ node with the specified \a tag. If no function node is found
+ with the required \a tag, return 0.
+ */
+FunctionNode *Tree::findFunctionNodeForTag(const QString &tag, Aggregate *parent)
+{
+ if (parent == nullptr)
+ parent = root();
+ const NodeList &children = parent->childNodes();
+ for (Node *n : children) {
+ if (n != nullptr && n->isFunction() && n->hasTag(tag))
+ return static_cast<FunctionNode *>(n);
+ }
+ for (Node *n : children) {
+ if (n != nullptr && n->isAggregate()) {
+ n = findFunctionNodeForTag(tag, static_cast<Aggregate *>(n));
+ if (n != nullptr)
+ return static_cast<FunctionNode *>(n);
+ }
+ }
+ return nullptr;
+}
+
+/*!
+ There should only be one macro node for macro name \a t.
+ The macro node is not built until the \macro command is seen.
+ */
+FunctionNode *Tree::findMacroNode(const QString &t, const Aggregate *parent)
+{
+ if (parent == nullptr)
+ parent = root();
+ const NodeList &children = parent->childNodes();
+ for (Node *n : children) {
+ if (n != nullptr && (n->isMacro() || n->isFunction()) && n->name() == t)
+ return static_cast<FunctionNode *>(n);
+ }
+ for (Node *n : children) {
+ if (n != nullptr && n->isAggregate()) {
+ FunctionNode *fn = findMacroNode(t, static_cast<Aggregate *>(n));
+ if (fn != nullptr)
+ return fn;
+ }
+ }
+ return nullptr;
+}
+
+/*!
+ Add the class and struct names in \a arg to the \e {don't document}
+ map.
+ */
+void Tree::addToDontDocumentMap(QString &arg)
+{
+ arg.remove(QChar('('));
+ arg.remove(QChar(')'));
+ QString t = arg.simplified();
+ QStringList sl = t.split(QChar(' '));
+ if (sl.isEmpty())
+ return;
+ for (const QString &s : sl) {
+ if (!m_dontDocumentMap.contains(s))
+ m_dontDocumentMap.insert(s, nullptr);
+ }
+}
+
+/*!
+ The \e {don't document} map has been loaded with the names
+ of classes and structs in the current module that are not
+ documented and should not be documented. Now traverse the
+ map, and for each class or struct name, find the class node
+ that represents that class or struct and mark it with the
+ \C DontDocument status.
+
+ This results in a map of the class and struct nodes in the
+ module that are in the public API but are not meant to be
+ used by anyone. They are only used internally, but for one
+ reason or another, they must have public visibility.
+ */
+void Tree::markDontDocumentNodes()
+{
+ for (auto it = m_dontDocumentMap.begin(); it != m_dontDocumentMap.end(); ++it) {
+ Aggregate *node = findAggregate(it.key());
+ if (node != nullptr)
+ node->setStatus(Node::DontDocument);
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/tree.h b/src/qdoc/qdoc/src/qdoc/tree.h
new file mode 100644
index 000000000..d0bed25d6
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/tree.h
@@ -0,0 +1,183 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef TREE_H
+#define TREE_H
+
+#include "examplenode.h"
+#include "namespacenode.h"
+#include "node.h"
+#include "propertynode.h"
+#include "proxynode.h"
+#include "qmltypenode.h"
+
+#include <QtCore/qstack.h>
+
+#include <utility>
+
+QT_BEGIN_NAMESPACE
+
+class CollectionNode;
+class FunctionNode;
+class QDocDatabase;
+
+struct TargetRec
+{
+public:
+ enum TargetType { Unknown, Target, Keyword, Contents };
+
+ TargetRec(QString name, TargetRec::TargetType type, Node *node, int priority)
+ : m_node(node), m_ref(std::move(name)), m_type(type), m_priority(priority)
+ {
+ // Discard the dedicated ref for keywords - they always
+ // link to the top of the QDoc comment they appear in
+ if (type == Keyword)
+ m_ref.clear();
+ }
+
+ [[nodiscard]] bool isEmpty() const { return m_ref.isEmpty(); }
+ [[nodiscard]] Node::Genus genus() const { return (m_node ? m_node->genus() : Node::DontCare); }
+
+ Node *m_node { nullptr };
+ QString m_ref {};
+ TargetType m_type {};
+ int m_priority {};
+};
+
+typedef QMultiMap<QString, TargetRec *> TargetMap;
+typedef QMultiMap<QString, PageNode *> PageNodeMultiMap;
+typedef QMap<QString, QmlTypeNode *> QmlTypeMap;
+typedef QMultiMap<QString, const ExampleNode *> ExampleNodeMap;
+
+class Tree
+{
+ friend class QDocForest;
+ friend class QDocDatabase;
+
+private: // Note the constructor and destructor are private.
+ typedef QMap<PropertyNode::FunctionRole, QString> RoleMap;
+ typedef QMap<PropertyNode *, RoleMap> PropertyMap;
+
+ Tree(const QString &camelCaseModuleName, QDocDatabase *qdb);
+ ~Tree();
+
+public: // Of necessity, a few public functions remain.
+ [[nodiscard]] Node *findNodeByNameAndType(const QStringList &path,
+ bool (Node::*isMatch)() const) const;
+
+ [[nodiscard]] const QString &camelCaseModuleName() const { return m_camelCaseModuleName; }
+ [[nodiscard]] const QString &physicalModuleName() const { return m_physicalModuleName; }
+ [[nodiscard]] const QString &indexFileName() const { return m_indexFileName; }
+ [[nodiscard]] const QString &indexTitle() const { return m_indexTitle; }
+ void setIndexTitle(const QString &t) { m_indexTitle = t; }
+ NodeList &proxies() { return m_proxies; }
+ void appendProxy(ProxyNode *t) { m_proxies.append(t); }
+ void addToDontDocumentMap(QString &arg);
+ void markDontDocumentNodes();
+ static QString refForAtom(const Atom *atom);
+
+private: // The rest of the class is private.
+ Aggregate *findAggregate(const QString &name);
+ [[nodiscard]] Node *findNodeForInclude(const QStringList &path) const;
+ ClassNode *findClassNode(const QStringList &path, const Node *start = nullptr) const;
+ [[nodiscard]] NamespaceNode *findNamespaceNode(const QStringList &path) const;
+ const FunctionNode *findFunctionNode(const QStringList &path, const Parameters &parameters,
+ const Node *relative, Node::Genus genus) const;
+ Node *findNodeRecursive(const QStringList &path, int pathIndex, const Node *start,
+ bool (Node::*)() const) const;
+ const Node *findNodeForTarget(const QStringList &path, const QString &target, const Node *node,
+ int flags, Node::Genus genus, QString &ref,
+ TargetRec::TargetType *targetType = nullptr) const;
+ const Node *matchPathAndTarget(const QStringList &path, int idx, const QString &target,
+ const Node *node, int flags, Node::Genus genus,
+ QString &ref) const;
+
+ const Node *findNode(const QStringList &path, const Node *relative, int flags,
+ Node::Genus genus) const;
+
+ Aggregate *findRelatesNode(const QStringList &path);
+ const Node *findEnumNode(const Node *node, const Node *aggregate, const QStringList &path, int offset) const;
+ QString getRef(const QString &target, const Node *node) const;
+ void insertTarget(const QString &name, const QString &title, TargetRec::TargetType type,
+ Node *node, int priority);
+ void resolveTargets(Aggregate *root);
+ void addToPageNodeByTitleMap(Node *node);
+ void populateTocSectionTargetMap(Node *node);
+ void addKeywordsToTargetMaps(Node *node);
+ void addTargetsToTargetMap(Node *node);
+
+ const TargetRec *findUnambiguousTarget(const QString &target, Node::Genus genus) const;
+ [[nodiscard]] const PageNode *findPageNodeByTitle(const QString &title) const;
+
+ void addPropertyFunction(PropertyNode *property, const QString &funcName,
+ PropertyNode::FunctionRole funcRole);
+ void resolveBaseClasses(Aggregate *n);
+ void resolvePropertyOverriddenFromPtrs(Aggregate *n);
+ void resolveProperties();
+ void resolveCppToQmlLinks();
+ void resolveSince(Aggregate &aggregate);
+ void resolveEnumValueSince(EnumNode &en);
+ void removePrivateAndInternalBases(NamespaceNode *rootNode);
+ NamespaceNode *root() { return &m_root; }
+ [[nodiscard]] const NamespaceNode *root() const { return &m_root; }
+
+ ClassList allBaseClasses(const ClassNode *classe) const;
+
+ CNMap *getCollectionMap(Node::NodeType type);
+ [[nodiscard]] const CNMap &groups() const { return m_groups; }
+ [[nodiscard]] const CNMap &modules() const { return m_modules; }
+ [[nodiscard]] const CNMap &qmlModules() const { return m_qmlModules; }
+
+ CollectionNode *getCollection(const QString &name, Node::NodeType type);
+ CollectionNode *findCollection(const QString &name, Node::NodeType type);
+
+ CollectionNode *findGroup(const QString &name) { return findCollection(name, Node::Group); }
+ CollectionNode *findModule(const QString &name) { return findCollection(name, Node::Module); }
+ CollectionNode *findQmlModule(const QString &name)
+ {
+ return findCollection(name, Node::QmlModule);
+ }
+
+ CollectionNode *addGroup(const QString &name) { return findGroup(name); }
+ CollectionNode *addModule(const QString &name) { return findModule(name); }
+ CollectionNode *addQmlModule(const QString &name) { return findQmlModule(name); }
+
+ CollectionNode *addToGroup(const QString &name, Node *node);
+ CollectionNode *addToModule(const QString &name, Node *node);
+ CollectionNode *addToQmlModule(const QString &name, Node *node);
+
+ [[nodiscard]] QmlTypeNode *lookupQmlType(const QString &name) const
+ {
+ return m_qmlTypeMap.value(name);
+ }
+ void insertQmlType(const QString &key, QmlTypeNode *n);
+ void addExampleNode(ExampleNode *n) { m_exampleNodeMap.insert(n->title(), n); }
+ ExampleNodeMap &exampleNodeMap() { return m_exampleNodeMap; }
+ void setIndexFileName(const QString &t) { m_indexFileName = t; }
+
+ FunctionNode *findFunctionNodeForTag(const QString &tag, Aggregate *parent = nullptr);
+ FunctionNode *findMacroNode(const QString &t, const Aggregate *parent = nullptr);
+
+private:
+ QString m_camelCaseModuleName {};
+ QString m_physicalModuleName {};
+ QString m_indexFileName {};
+ QString m_indexTitle {};
+ QDocDatabase *m_qdb { nullptr };
+ NamespaceNode m_root;
+ PropertyMap m_unresolvedPropertyMap {};
+ PageNodeMultiMap m_pageNodesByTitle {};
+ TargetMap m_nodesByTargetRef {};
+ TargetMap m_nodesByTargetTitle {};
+ CNMap m_groups {};
+ CNMap m_modules {};
+ CNMap m_qmlModules {};
+ QmlTypeMap m_qmlTypeMap {};
+ ExampleNodeMap m_exampleNodeMap {};
+ NodeList m_proxies {};
+ NodeMap m_dontDocumentMap {};
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/typedefnode.cpp b/src/qdoc/qdoc/src/qdoc/typedefnode.cpp
new file mode 100644
index 000000000..997e570d3
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/typedefnode.cpp
@@ -0,0 +1,55 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "typedefnode.h"
+
+#include "aggregate.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class TypedefNode
+ */
+
+/*!
+ */
+void TypedefNode::setAssociatedEnum(const EnumNode *enume)
+{
+ m_associatedEnum = enume;
+}
+
+/*!
+ Clone this node on the heap and make the clone a child of
+ \a parent.
+
+ Returns the pointer to the clone.
+ */
+Node *TypedefNode::clone(Aggregate *parent)
+{
+ auto *tn = new TypedefNode(*this); // shallow copy
+ tn->setParent(nullptr);
+ parent->addChild(tn);
+
+ return tn;
+}
+
+/*!
+ \class TypeAliasNode
+ */
+
+/*!
+ Clone this node on the heap and make the clone a child of
+ \a parent.
+
+ Returns the pointer to the clone.
+ */
+Node *TypeAliasNode::clone(Aggregate *parent)
+{
+ auto *tan = new TypeAliasNode(*this); // shallow copy
+ tan->setParent(nullptr);
+ parent->addChild(tan);
+
+ return tan;
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/typedefnode.h b/src/qdoc/qdoc/src/qdoc/typedefnode.h
new file mode 100644
index 000000000..839cd6a0b
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/typedefnode.h
@@ -0,0 +1,54 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef TYPEDEFNODE_H
+#define TYPEDEFNODE_H
+
+#include "enumnode.h"
+#include "node.h"
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+class Aggregate;
+
+class TypedefNode : public Node
+{
+public:
+ TypedefNode(Aggregate *parent, const QString &name, NodeType type = Typedef)
+ : Node(type, parent, name)
+ {
+ }
+
+ bool hasAssociatedEnum() const { return m_associatedEnum != nullptr; }
+ const EnumNode *associatedEnum() const { return m_associatedEnum; }
+ Node *clone(Aggregate *parent) override;
+
+private:
+ void setAssociatedEnum(const EnumNode *t);
+
+ friend class EnumNode;
+
+ const EnumNode *m_associatedEnum { nullptr };
+};
+
+class TypeAliasNode : public TypedefNode
+{
+public:
+ TypeAliasNode(Aggregate *parent, const QString &name, const QString &aliasedType)
+ : TypedefNode(parent, name, NodeType::TypeAlias), m_aliasedType(aliasedType)
+ {
+ }
+
+ const QString &aliasedType() const { return m_aliasedType; }
+ Node *clone(Aggregate *parent) override;
+
+private:
+ QString m_aliasedType {};
+};
+
+QT_END_NAMESPACE
+
+#endif // TYPEDEFNODE_H
diff --git a/src/qdoc/qdoc/src/qdoc/utilities.cpp b/src/qdoc/qdoc/src/qdoc/utilities.cpp
new file mode 100644
index 000000000..2825804d6
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/utilities.cpp
@@ -0,0 +1,254 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include <QtCore/qprocess.h>
+#include <QCryptographicHash>
+#include "location.h"
+#include "utilities.h"
+
+QT_BEGIN_NAMESPACE
+
+Q_LOGGING_CATEGORY(lcQdoc, "qt.qdoc")
+Q_LOGGING_CATEGORY(lcQdocClang, "qt.qdoc.clang")
+
+/*!
+ \namespace Utilities
+ \internal
+ \brief This namespace holds QDoc-internal utility methods.
+ */
+namespace Utilities {
+static inline void setDebugEnabled(bool value)
+{
+ const_cast<QLoggingCategory &>(lcQdoc()).setEnabled(QtDebugMsg, value);
+ const_cast<QLoggingCategory &>(lcQdocClang()).setEnabled(QtDebugMsg, value);
+}
+
+void startDebugging(const QString &message)
+{
+ setDebugEnabled(true);
+ qCDebug(lcQdoc, "START DEBUGGING: %ls", qUtf16Printable(message));
+}
+
+void stopDebugging(const QString &message)
+{
+ qCDebug(lcQdoc, "STOP DEBUGGING: %ls", qUtf16Printable(message));
+ setDebugEnabled(false);
+}
+
+bool debugging()
+{
+ return lcQdoc().isEnabled(QtDebugMsg);
+}
+
+/*!
+ \internal
+ Convenience method that's used to get the correct punctuation character for
+ the words at \a wordPosition in a list of \a numberOfWords length.
+ For the last position in the list, returns "." (full stop). For any other
+ word, this method calls comma().
+
+ \sa comma()
+ */
+QString separator(qsizetype wordPosition, qsizetype numberOfWords)
+{
+ static QString terminator = QStringLiteral(".");
+ if (wordPosition == numberOfWords - 1)
+ return terminator;
+ else
+ return comma(wordPosition, numberOfWords);
+}
+
+/*!
+ \internal
+ Convenience method that's used to get the correct punctuation character for
+ the words at \a wordPosition in a list of \a numberOfWords length.
+
+ For a list of length one, returns an empty QString. For a list of length
+ two, returns the string " and ". For any length beyond two, returns the
+ string ", " until the last element, which returns ", and ".
+
+ \sa comma()
+ */
+QString comma(qsizetype wordPosition, qsizetype numberOfWords)
+{
+ if (wordPosition == numberOfWords - 1)
+ return QString();
+ if (numberOfWords == 2)
+ return QStringLiteral(" and ");
+ if (wordPosition == 0 || wordPosition < numberOfWords - 2)
+ return QStringLiteral(", ");
+ return QStringLiteral(", and ");
+}
+
+/*!
+ \brief Returns an ascii-printable representation of \a str.
+
+ Replace non-ascii-printable characters in \a str from a subset of such
+ characters. The subset includes alphanumeric (alnum) characters
+ ([a-zA-Z0-9]), space, punctuation characters, and common symbols. Non-alnum
+ characters in this subset are replaced by a single hyphen. Leading,
+ trailing, and consecutive hyphens are removed, such that the resulting
+ string does not start or end with a hyphen. All characters are converted to
+ lowercase.
+
+ If any character in \a str is non-latin, or latin and not found in the
+ aforementioned subset (e.g. 'ß', 'å', or 'ö'), a hash of \a str is appended
+ to the final string.
+
+ Returns a string that is normalized for use where ascii-printable strings
+ are required, such as file names or fragment identifiers in URLs.
+
+ The implementation is equivalent to:
+
+ \code
+ name.replace(QRegularExpression("[^A-Za-z0-9]+"), " ");
+ name = name.simplified();
+ name.replace(QLatin1Char(' '), QLatin1Char('-'));
+ name = name.toLower();
+ \endcode
+
+ However, it has been measured to be approximately four times faster.
+*/
+QString asAsciiPrintable(const QString &str)
+{
+ auto legal_ascii = [](const uint value) {
+ const uint start_ascii_subset{ 32 };
+ const uint end_ascii_subset{ 126 };
+
+ return value >= start_ascii_subset && value <= end_ascii_subset;
+ };
+
+ QString result;
+ bool begun = false;
+ bool has_non_alnum_content{ false };
+
+ for (const auto &c : str) {
+ char16_t u = c.unicode();
+ if (!legal_ascii(u))
+ has_non_alnum_content = true;
+ if (u >= 'A' && u <= 'Z')
+ u += 'a' - 'A';
+ if ((u >= 'a' && u <= 'z') || (u >= '0' && u <= '9')) {
+ result += QLatin1Char(u);
+ begun = true;
+ } else if (begun) {
+ result += QLatin1Char('-');
+ begun = false;
+ }
+ }
+ if (result.endsWith(QLatin1Char('-')))
+ result.chop(1);
+
+ if (has_non_alnum_content) {
+ auto title_hash = QString::fromLocal8Bit(
+ QCryptographicHash::hash(str.toUtf8(), QCryptographicHash::Md5).toHex());
+ title_hash.truncate(8);
+ if (!result.isEmpty())
+ result.append(QLatin1Char('-'));
+ result.append(title_hash);
+ }
+
+ return result;
+}
+
+/*!
+ \internal
+*/
+static bool runProcess(const QString &program, const QStringList &arguments,
+ QByteArray *stdOutIn, QByteArray *stdErrIn)
+{
+ QProcess process;
+ process.start(program, arguments, QProcess::ReadWrite);
+ if (!process.waitForStarted()) {
+ qCDebug(lcQdoc).nospace() << "Unable to start " << process.program()
+ << ": " << process.errorString();
+ return false;
+ }
+ process.closeWriteChannel();
+ const bool finished = process.waitForFinished();
+ const QByteArray stdErr = process.readAllStandardError();
+ if (stdErrIn)
+ *stdErrIn = stdErr;
+ if (stdOutIn)
+ *stdOutIn = process.readAllStandardOutput();
+
+ if (!finished) {
+ qCDebug(lcQdoc).nospace() << process.program() << " timed out: " << stdErr;
+ process.kill();
+ return false;
+ }
+
+ if (process.exitStatus() != QProcess::NormalExit) {
+ qCDebug(lcQdoc).nospace() << process.program() << " crashed: " << stdErr;
+ return false;
+ }
+
+ if (process.exitCode() != 0) {
+ qCDebug(lcQdoc).nospace() << process.program() << " exited with "
+ << process.exitCode() << ": " << stdErr;
+ return false;
+ }
+
+ return true;
+}
+
+/*!
+ \internal
+*/
+static QByteArray frameworkSuffix() {
+ return QByteArrayLiteral(" (framework directory)");
+}
+
+/*!
+ \internal
+ Determine the compiler's internal include paths from the output of
+
+ \badcode
+ [clang++|g++] -E -x c++ - -v </dev/null
+ \endcode
+
+ Output looks like:
+
+ \badcode
+ #include <...> search starts here:
+ /usr/local/include
+ /System/Library/Frameworks (framework directory)
+ End of search list.
+ \endcode
+*/
+QStringList getInternalIncludePaths(const QString &compiler)
+{
+ QStringList result;
+ QStringList arguments;
+ arguments << QStringLiteral("-E") << QStringLiteral("-x") << QStringLiteral("c++")
+ << QStringLiteral("-") << QStringLiteral("-v");
+ QByteArray stdOut;
+ QByteArray stdErr;
+ if (!runProcess(compiler, arguments, &stdOut, &stdErr))
+ return result;
+ const QByteArrayList stdErrLines = stdErr.split('\n');
+ bool isIncludeDir = false;
+ for (const QByteArray &line : stdErrLines) {
+ if (isIncludeDir) {
+ if (line.startsWith(QByteArrayLiteral("End of search list"))) {
+ isIncludeDir = false;
+ } else {
+ QByteArray prefix("-I");
+ QByteArray headerPath{line.trimmed()};
+ if (headerPath.endsWith(frameworkSuffix())) {
+ headerPath.truncate(headerPath.size() - frameworkSuffix().size());
+ prefix = QByteArrayLiteral("-F");
+ }
+ result.append(QString::fromLocal8Bit(prefix + headerPath));
+ }
+ } else if (line.startsWith(QByteArrayLiteral("#include <...> search starts here"))) {
+ isIncludeDir = true;
+ }
+ }
+
+ return result;
+}
+
+} // namespace Utilities
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/utilities.h b/src/qdoc/qdoc/src/qdoc/utilities.h
new file mode 100644
index 000000000..0d485f650
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/utilities.h
@@ -0,0 +1,28 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef UTILITIES_H
+#define UTILITIES_H
+
+#include <QtCore/qstring.h>
+#include <QtCore/qloggingcategory.h>
+
+QT_BEGIN_NAMESPACE
+
+Q_DECLARE_LOGGING_CATEGORY(lcQdoc)
+Q_DECLARE_LOGGING_CATEGORY(lcQdocClang)
+
+namespace Utilities {
+void startDebugging(const QString &message);
+void stopDebugging(const QString &message);
+bool debugging();
+
+QString separator(qsizetype wordPosition, qsizetype numberOfWords);
+QString comma(qsizetype wordPosition, qsizetype numberOfWords);
+QString asAsciiPrintable(const QString &name);
+QStringList getInternalIncludePaths(const QString &compiler);
+}
+
+QT_END_NAMESPACE
+
+#endif // UTILITIES_H
diff --git a/src/qdoc/qdoc/src/qdoc/variablenode.cpp b/src/qdoc/qdoc/src/qdoc/variablenode.cpp
new file mode 100644
index 000000000..11c8363f3
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/variablenode.cpp
@@ -0,0 +1,23 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "variablenode.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ Clone this node on the heap and make the clone a child of
+ \a parent.
+
+ Returns a pointer to the clone.
+ */
+Node *VariableNode::clone(Aggregate *parent)
+{
+ auto *vn = new VariableNode(*this); // shallow copy
+ vn->setParent(nullptr);
+ parent->addChild(vn);
+
+ return vn;
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/variablenode.h b/src/qdoc/qdoc/src/qdoc/variablenode.h
new file mode 100644
index 000000000..7db1252fe
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/variablenode.h
@@ -0,0 +1,44 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef VARIABLENODE_H
+#define VARIABLENODE_H
+
+#include "aggregate.h"
+#include "node.h"
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+class VariableNode : public Node
+{
+public:
+ VariableNode(Aggregate *parent, const QString &name);
+
+ void setLeftType(const QString &leftType) { m_leftType = leftType; }
+ void setRightType(const QString &rightType) { m_rightType = rightType; }
+ void setStatic(bool b) { m_static = b; }
+
+ [[nodiscard]] const QString &leftType() const { return m_leftType; }
+ [[nodiscard]] const QString &rightType() const { return m_rightType; }
+ [[nodiscard]] QString dataType() const { return m_leftType + m_rightType; }
+ [[nodiscard]] bool isStatic() const override { return m_static; }
+ Node *clone(Aggregate *parent) override;
+
+private:
+ QString m_leftType {};
+ QString m_rightType {};
+ bool m_static { false };
+};
+
+inline VariableNode::VariableNode(Aggregate *parent, const QString &name)
+ : Node(Variable, parent, name)
+{
+ setGenus(Node::CPP);
+}
+
+QT_END_NAMESPACE
+
+#endif // VARIABLENODE_H
diff --git a/src/qdoc/qdoc/src/qdoc/webxmlgenerator.cpp b/src/qdoc/qdoc/src/qdoc/webxmlgenerator.cpp
new file mode 100644
index 000000000..17822a22b
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/webxmlgenerator.cpp
@@ -0,0 +1,901 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "webxmlgenerator.h"
+
+#include "aggregate.h"
+#include "collectionnode.h"
+#include "config.h"
+#include "helpprojectwriter.h"
+#include "node.h"
+#include "propertynode.h"
+#include "qdocdatabase.h"
+#include "quoter.h"
+#include "utilities.h"
+
+#include <QtCore/qxmlstream.h>
+
+QT_BEGIN_NAMESPACE
+
+using namespace Qt::StringLiterals;
+
+static CodeMarker *marker_ = nullptr;
+
+WebXMLGenerator::WebXMLGenerator(FileResolver& file_resolver) : HtmlGenerator(file_resolver) {}
+
+void WebXMLGenerator::initializeGenerator()
+{
+ HtmlGenerator::initializeGenerator();
+}
+
+void WebXMLGenerator::terminateGenerator()
+{
+ HtmlGenerator::terminateGenerator();
+}
+
+QString WebXMLGenerator::format()
+{
+ return "WebXML";
+}
+
+QString WebXMLGenerator::fileExtension() const
+{
+ // As this is meant to be an intermediate format,
+ // use .html for internal references. The name of
+ // the output file is set separately in
+ // beginSubPage() calls.
+ return "html";
+}
+
+/*!
+ Most of the output is generated by QDocIndexFiles and the append() callback.
+ Some pages produce supplementary output while being generated, and that's
+ handled here.
+*/
+qsizetype WebXMLGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker)
+{
+ if (m_supplement && currentWriter)
+ addAtomElements(*currentWriter.data(), atom, relative, marker);
+ return 0;
+}
+
+void WebXMLGenerator::generateCppReferencePage(Aggregate *aggregate, CodeMarker * /* marker */)
+{
+ QByteArray data;
+ QXmlStreamWriter writer(&data);
+ writer.setAutoFormatting(true);
+ beginSubPage(aggregate, Generator::fileName(aggregate, "webxml"));
+ writer.writeStartDocument();
+ writer.writeStartElement("WebXML");
+ writer.writeStartElement("document");
+
+ generateIndexSections(writer, aggregate);
+
+ writer.writeEndElement(); // document
+ writer.writeEndElement(); // WebXML
+ writer.writeEndDocument();
+
+ out() << data;
+ endSubPage();
+}
+
+void WebXMLGenerator::generatePageNode(PageNode *pn, CodeMarker * /* marker */)
+{
+ QByteArray data;
+ currentWriter.reset(new QXmlStreamWriter(&data));
+ currentWriter->setAutoFormatting(true);
+ beginSubPage(pn, Generator::fileName(pn, "webxml"));
+ currentWriter->writeStartDocument();
+ currentWriter->writeStartElement("WebXML");
+ currentWriter->writeStartElement("document");
+
+ generateIndexSections(*currentWriter.data(), pn);
+
+ currentWriter->writeEndElement(); // document
+ currentWriter->writeEndElement(); // WebXML
+ currentWriter->writeEndDocument();
+
+ out() << data;
+ endSubPage();
+}
+
+void WebXMLGenerator::generateExampleFilePage(const Node *en, ResolvedFile resolved_file, CodeMarker* /* marker */)
+{
+ // TODO: [generator-insufficient-structural-abstraction]
+
+ QByteArray data;
+ QXmlStreamWriter writer(&data);
+ writer.setAutoFormatting(true);
+ beginSubPage(en, linkForExampleFile(resolved_file.get_query(), "webxml"));
+ writer.writeStartDocument();
+ writer.writeStartElement("WebXML");
+ writer.writeStartElement("document");
+ writer.writeStartElement("page");
+ writer.writeAttribute("name", resolved_file.get_query());
+ writer.writeAttribute("href", linkForExampleFile(resolved_file.get_query()));
+ const QString title = exampleFileTitle(static_cast<const ExampleNode *>(en), resolved_file.get_query());
+ writer.writeAttribute("title", title);
+ writer.writeAttribute("fulltitle", title);
+ writer.writeAttribute("subtitle", resolved_file.get_query());
+ writer.writeStartElement("description");
+
+ if (Config::instance().get(CONFIG_LOCATIONINFO).asBool()) {
+ writer.writeAttribute("path", resolved_file.get_path());
+ writer.writeAttribute("line", "0");
+ writer.writeAttribute("column", "0");
+ }
+
+ Quoter quoter;
+ Doc::quoteFromFile(en->doc().location(), quoter, resolved_file);
+ QString code = quoter.quoteTo(en->location(), QString(), QString());
+ writer.writeTextElement("code", trimmedTrailing(code, QString(), QString()));
+
+ writer.writeEndElement(); // description
+ writer.writeEndElement(); // page
+ writer.writeEndElement(); // document
+ writer.writeEndElement(); // WebXML
+ writer.writeEndDocument();
+
+ out() << data;
+ endSubPage();
+}
+
+void WebXMLGenerator::generateIndexSections(QXmlStreamWriter &writer, Node *node)
+{
+ marker_ = CodeMarker::markerForFileName(node->location().filePath());
+ auto qdocIndexFiles = QDocIndexFiles::qdocIndexFiles();
+ if (qdocIndexFiles) {
+ qdocIndexFiles->generateIndexSections(writer, node, this);
+ // generateIndexSections does nothing for groups, so handle them explicitly
+ if (node->isGroup())
+ qdocIndexFiles->generateIndexSection(writer, node, this);
+ }
+}
+
+// Handles callbacks from QDocIndexFiles to add documentation to node
+void WebXMLGenerator::append(QXmlStreamWriter &writer, Node *node)
+{
+ Q_ASSERT(marker_);
+
+ writer.writeStartElement("description");
+ if (Config::instance().get(CONFIG_LOCATIONINFO).asBool()) {
+ writer.writeAttribute("path", node->doc().location().filePath());
+ writer.writeAttribute("line", QString::number(node->doc().location().lineNo()));
+ writer.writeAttribute("column", QString::number(node->doc().location().columnNo()));
+ }
+
+ if (node->isTextPageNode())
+ generateRelations(writer, node);
+
+ if (node->isModule()) {
+ writer.writeStartElement("generatedlist");
+ writer.writeAttribute("contents", "classesbymodule");
+ auto *cnn = static_cast<CollectionNode *>(node);
+
+ if (cnn->hasNamespaces()) {
+ writer.writeStartElement("section");
+ writer.writeStartElement("heading");
+ writer.writeAttribute("level", "1");
+ writer.writeCharacters("Namespaces");
+ writer.writeEndElement(); // heading
+ NodeMap namespaces{cnn->getMembers(Node::Namespace)};
+ generateAnnotatedList(writer, node, namespaces);
+ writer.writeEndElement(); // section
+ }
+ if (cnn->hasClasses()) {
+ writer.writeStartElement("section");
+ writer.writeStartElement("heading");
+ writer.writeAttribute("level", "1");
+ writer.writeCharacters("Classes");
+ writer.writeEndElement(); // heading
+ NodeMap classes{cnn->getMembers([](const Node *n){ return n->isClassNode(); })};
+ generateAnnotatedList(writer, node, classes);
+ writer.writeEndElement(); // section
+ }
+ writer.writeEndElement(); // generatedlist
+ }
+
+ m_inLink = m_inSectionHeading = m_hasQuotingInformation = false;
+
+ const Atom *atom = node->doc().body().firstAtom();
+ while (atom)
+ atom = addAtomElements(writer, atom, node, marker_);
+
+ QList<Text> alsoList = node->doc().alsoList();
+ supplementAlsoList(node, alsoList);
+
+ if (!alsoList.isEmpty()) {
+ writer.writeStartElement("see-also");
+ for (const auto &item : alsoList) {
+ const auto *atom = item.firstAtom();
+ while (atom)
+ atom = addAtomElements(writer, atom, node, marker_);
+ }
+ writer.writeEndElement(); // see-also
+ }
+
+ if (node->isExample()) {
+ m_supplement = true;
+ generateRequiredLinks(node, marker_);
+ m_supplement = false;
+ } else if (node->isGroup()) {
+ auto *cn = static_cast<CollectionNode *>(node);
+ if (!cn->noAutoList())
+ generateAnnotatedList(writer, node, cn->members());
+ }
+
+ writer.writeEndElement(); // description
+}
+
+void WebXMLGenerator::generateDocumentation(Node *node)
+{
+ // Don't generate nodes that are already processed, or if they're not supposed to
+ // generate output, ie. external, index or images nodes.
+ if (!node->url().isNull() || node->isExternalPage() || node->isIndexNode())
+ return;
+
+ if (node->isInternal() && !m_showInternal)
+ return;
+
+ if (node->parent()) {
+ if (node->isNamespace() || node->isClassNode() || node->isHeader())
+ generateCppReferencePage(static_cast<Aggregate *>(node), nullptr);
+ else if (node->isCollectionNode()) {
+ if (node->wasSeen()) {
+ // see remarks in base class impl.
+ m_qdb->mergeCollections(static_cast<CollectionNode *>(node));
+ generatePageNode(static_cast<PageNode *>(node), nullptr);
+ }
+ } else if (node->isTextPageNode())
+ generatePageNode(static_cast<PageNode *>(node), nullptr);
+ // else if TODO: anything else?
+ }
+
+ if (node->isAggregate()) {
+ auto *aggregate = static_cast<Aggregate *>(node);
+ for (auto c : aggregate->childNodes()) {
+ if ((c->isAggregate() || c->isTextPageNode() || c->isCollectionNode())
+ && !c->isPrivate())
+ generateDocumentation(c);
+ }
+ }
+}
+
+const Atom *WebXMLGenerator::addAtomElements(QXmlStreamWriter &writer, const Atom *atom,
+ const Node *relative, CodeMarker *marker)
+{
+ bool keepQuoting = false;
+
+ if (!atom)
+ return nullptr;
+
+ switch (atom->type()) {
+ case Atom::AnnotatedList: {
+ const CollectionNode *cn = m_qdb->getCollectionNode(atom->string(), Node::Group);
+ if (cn)
+ generateAnnotatedList(writer, relative, cn->members());
+ } break;
+ case Atom::AutoLink: {
+ const Node *node{nullptr};
+ QString link{};
+
+ if (!m_inLink && !m_inSectionHeading) {
+ link = getAutoLink(atom, relative, &node, Node::API);
+
+ if (!link.isEmpty() && node && node->isDeprecated()
+ && relative->parent() != node && !relative->isDeprecated()) {
+ link.clear();
+ }
+ }
+
+ startLink(writer, atom, node, link);
+
+ writer.writeCharacters(atom->string());
+
+ if (m_inLink) {
+ writer.writeEndElement(); // link
+ m_inLink = false;
+ }
+
+ break;
+ }
+ case Atom::BaseName:
+ break;
+ case Atom::BriefLeft:
+
+ writer.writeStartElement("brief");
+ switch (relative->nodeType()) {
+ case Node::Property:
+ writer.writeCharacters("This property");
+ break;
+ case Node::Variable:
+ writer.writeCharacters("This variable");
+ break;
+ default:
+ break;
+ }
+ if (relative->isProperty() || relative->isVariable()) {
+ QString str;
+ const Atom *a = atom->next();
+ while (a != nullptr && a->type() != Atom::BriefRight) {
+ if (a->type() == Atom::String || a->type() == Atom::AutoLink)
+ str += a->string();
+ a = a->next();
+ }
+ str[0] = str[0].toLower();
+ if (str.endsWith('.'))
+ str.chop(1);
+
+ const QList<QStringView> words = QStringView{str}.split(' ');
+ if (!words.isEmpty()) {
+ QStringView first(words.at(0));
+ if (!(first == u"contains" || first == u"specifies" || first == u"describes"
+ || first == u"defines" || first == u"holds" || first == u"determines"))
+ writer.writeCharacters(" holds ");
+ else
+ writer.writeCharacters(" ");
+ }
+ }
+ break;
+
+ case Atom::BriefRight:
+ if (relative->isProperty() || relative->isVariable())
+ writer.writeCharacters(".");
+
+ writer.writeEndElement(); // brief
+ break;
+
+ case Atom::C:
+ writer.writeStartElement("teletype");
+ if (m_inLink)
+ writer.writeAttribute("type", "normal");
+ else
+ writer.writeAttribute("type", "highlighted");
+
+ writer.writeCharacters(plainCode(atom->string()));
+ writer.writeEndElement(); // teletype
+ break;
+
+ case Atom::Code:
+ if (!m_hasQuotingInformation)
+ writer.writeTextElement(
+ "code", trimmedTrailing(plainCode(atom->string()), QString(), QString()));
+ else
+ keepQuoting = true;
+ break;
+
+ case Atom::CodeBad:
+ writer.writeTextElement("badcode",
+ trimmedTrailing(plainCode(atom->string()), QString(), QString()));
+ break;
+
+ case Atom::CodeQuoteArgument:
+ if (m_quoting) {
+ if (quoteCommand == "dots") {
+ writer.writeAttribute("indent", atom->string());
+ writer.writeCharacters("...");
+ } else {
+ writer.writeCharacters(atom->string());
+ }
+ writer.writeEndElement(); // code
+ keepQuoting = true;
+ }
+ break;
+
+ case Atom::CodeQuoteCommand:
+ if (m_quoting) {
+ quoteCommand = atom->string();
+ writer.writeStartElement(quoteCommand);
+ }
+ break;
+
+ case Atom::ExampleFileLink: {
+ if (!m_inLink) {
+ QString link = linkForExampleFile(atom->string());
+ if (!link.isEmpty())
+ startLink(writer, atom, relative, link);
+ }
+ } break;
+
+ case Atom::ExampleImageLink: {
+ if (!m_inLink) {
+ QString link = atom->string();
+ if (!link.isEmpty())
+ startLink(writer, atom, nullptr, "images/used-in-examples/" + link);
+ }
+ } break;
+
+ case Atom::FootnoteLeft:
+ writer.writeStartElement("footnote");
+ break;
+
+ case Atom::FootnoteRight:
+ writer.writeEndElement(); // footnote
+ break;
+
+ case Atom::FormatEndif:
+ writer.writeEndElement(); // raw
+ break;
+ case Atom::FormatIf:
+ writer.writeStartElement("raw");
+ writer.writeAttribute("format", atom->string());
+ break;
+ case Atom::FormattingLeft: {
+ if (atom->string() == ATOM_FORMATTING_BOLD)
+ writer.writeStartElement("bold");
+ else if (atom->string() == ATOM_FORMATTING_ITALIC)
+ writer.writeStartElement("italic");
+ else if (atom->string() == ATOM_FORMATTING_UNDERLINE)
+ writer.writeStartElement("underline");
+ else if (atom->string() == ATOM_FORMATTING_SUBSCRIPT)
+ writer.writeStartElement("subscript");
+ else if (atom->string() == ATOM_FORMATTING_SUPERSCRIPT)
+ writer.writeStartElement("superscript");
+ else if (atom->string() == ATOM_FORMATTING_TELETYPE)
+ writer.writeStartElement("teletype");
+ else if (atom->string() == ATOM_FORMATTING_PARAMETER)
+ writer.writeStartElement("argument");
+ else if (atom->string() == ATOM_FORMATTING_INDEX)
+ writer.writeStartElement("index");
+ } break;
+
+ case Atom::FormattingRight: {
+ if (atom->string() == ATOM_FORMATTING_BOLD)
+ writer.writeEndElement();
+ else if (atom->string() == ATOM_FORMATTING_ITALIC)
+ writer.writeEndElement();
+ else if (atom->string() == ATOM_FORMATTING_UNDERLINE)
+ writer.writeEndElement();
+ else if (atom->string() == ATOM_FORMATTING_SUBSCRIPT)
+ writer.writeEndElement();
+ else if (atom->string() == ATOM_FORMATTING_SUPERSCRIPT)
+ writer.writeEndElement();
+ else if (atom->string() == ATOM_FORMATTING_TELETYPE)
+ writer.writeEndElement();
+ else if (atom->string() == ATOM_FORMATTING_PARAMETER)
+ writer.writeEndElement();
+ else if (atom->string() == ATOM_FORMATTING_INDEX)
+ writer.writeEndElement();
+ }
+ if (m_inLink) {
+ writer.writeEndElement(); // link
+ m_inLink = false;
+ }
+ break;
+
+ case Atom::GeneratedList:
+ writer.writeStartElement("generatedlist");
+ writer.writeAttribute("contents", atom->string());
+ writer.writeEndElement();
+ break;
+
+ // TODO: The other generators treat inlineimage and image
+ // simultaneously as the diffirences aren't big. It should be
+ // possible to do the same for webxmlgenerator instead of
+ // repeating the code.
+
+ // TODO: [generator-insufficient-structural-abstraction]
+ case Atom::Image: {
+ auto maybe_resolved_file{file_resolver.resolve(atom->string())};
+ if (!maybe_resolved_file) {
+ // TODO: [uncentralized-admonition][failed-resolve-file]
+ relative->location().warning(QStringLiteral("Missing image: %1").arg(atom->string()));
+ } else {
+ ResolvedFile file{*maybe_resolved_file};
+ QString file_name{QFileInfo{file.get_path()}.fileName()};
+
+ // TODO: [uncentralized-output-directory-structure]
+ Config::copyFile(relative->doc().location(), file.get_path(), file_name, outputDir() + QLatin1String("/images"));
+
+ writer.writeStartElement("image");
+ // TODO: [uncentralized-output-directory-structure]
+ writer.writeAttribute("href", "images/" + file_name);
+ writer.writeEndElement();
+ // TODO: [uncentralized-output-directory-structure]
+ setImageFileName(relative, "images/" + file_name);
+ }
+ break;
+ }
+ // TODO: [generator-insufficient-structural-abstraction]
+ case Atom::InlineImage: {
+ auto maybe_resolved_file{file_resolver.resolve(atom->string())};
+ if (!maybe_resolved_file) {
+ // TODO: [uncentralized-admonition][failed-resolve-file]
+ relative->location().warning(QStringLiteral("Missing image: %1").arg(atom->string()));
+ } else {
+ ResolvedFile file{*maybe_resolved_file};
+ QString file_name{QFileInfo{file.get_path()}.fileName()};
+
+ // TODO: [uncentralized-output-directory-structure]
+ Config::copyFile(relative->doc().location(), file.get_path(), file_name, outputDir() + QLatin1String("/images"));
+
+ writer.writeStartElement("inlineimage");
+ // TODO: [uncentralized-output-directory-structure]
+ writer.writeAttribute("href", "images/" + file_name);
+ writer.writeEndElement();
+ // TODO: [uncentralized-output-directory-structure]
+ setImageFileName(relative, "images/" + file_name);
+ }
+ break;
+ }
+ case Atom::ImageText:
+ break;
+
+ case Atom::ImportantLeft:
+ writer.writeStartElement("para");
+ writer.writeTextElement("bold", "Important:");
+ writer.writeCharacters(" ");
+ break;
+
+ case Atom::LegaleseLeft:
+ writer.writeStartElement("legalese");
+ break;
+
+ case Atom::LegaleseRight:
+ writer.writeEndElement(); // legalese
+ break;
+
+ case Atom::Link:
+ case Atom::LinkNode:
+ if (!m_inLink) {
+ const Node *node = nullptr;
+ QString link = getLink(atom, relative, &node);
+ if (!link.isEmpty())
+ startLink(writer, atom, node, link);
+ }
+ break;
+
+ case Atom::ListLeft:
+ writer.writeStartElement("list");
+
+ if (atom->string() == ATOM_LIST_BULLET)
+ writer.writeAttribute("type", "bullet");
+ else if (atom->string() == ATOM_LIST_TAG)
+ writer.writeAttribute("type", "definition");
+ else if (atom->string() == ATOM_LIST_VALUE) {
+ if (relative->isEnumType())
+ writer.writeAttribute("type", "enum");
+ else
+ writer.writeAttribute("type", "definition");
+ } else {
+ writer.writeAttribute("type", "ordered");
+ if (atom->string() == ATOM_LIST_UPPERALPHA)
+ writer.writeAttribute("start", "A");
+ else if (atom->string() == ATOM_LIST_LOWERALPHA)
+ writer.writeAttribute("start", "a");
+ else if (atom->string() == ATOM_LIST_UPPERROMAN)
+ writer.writeAttribute("start", "I");
+ else if (atom->string() == ATOM_LIST_LOWERROMAN)
+ writer.writeAttribute("start", "i");
+ else // (atom->string() == ATOM_LIST_NUMERIC)
+ writer.writeAttribute("start", "1");
+ }
+ break;
+
+ case Atom::ListItemNumber:
+ break;
+ case Atom::ListTagLeft: {
+ writer.writeStartElement("definition");
+
+ writer.writeTextElement(
+ "term", plainCode(marker->markedUpEnumValue(atom->next()->string(), relative)));
+ } break;
+
+ case Atom::ListTagRight:
+ writer.writeEndElement(); // definition
+ break;
+
+ case Atom::ListItemLeft:
+ writer.writeStartElement("item");
+ break;
+
+ case Atom::ListItemRight:
+ writer.writeEndElement(); // item
+ break;
+
+ case Atom::ListRight:
+ writer.writeEndElement(); // list
+ break;
+
+ case Atom::NoteLeft:
+ writer.writeStartElement("para");
+ writer.writeTextElement("bold", "Note:");
+ writer.writeCharacters(" ");
+ break;
+
+ // End admonition elements
+ case Atom::ImportantRight:
+ case Atom::NoteRight:
+ case Atom::WarningRight:
+ writer.writeEndElement(); // para
+ break;
+
+ case Atom::Nop:
+ break;
+
+ case Atom::CaptionLeft:
+ case Atom::ParaLeft:
+ writer.writeStartElement("para");
+ break;
+
+ case Atom::CaptionRight:
+ case Atom::ParaRight:
+ writer.writeEndElement(); // para
+ break;
+
+ case Atom::QuotationLeft:
+ writer.writeStartElement("quote");
+ break;
+
+ case Atom::QuotationRight:
+ writer.writeEndElement(); // quote
+ break;
+
+ case Atom::RawString:
+ writer.writeCharacters(atom->string());
+ break;
+
+ case Atom::SectionLeft:
+ writer.writeStartElement("section");
+ writer.writeAttribute("id",
+ Utilities::asAsciiPrintable(Text::sectionHeading(atom).toString()));
+ break;
+
+ case Atom::SectionRight:
+ writer.writeEndElement(); // section
+ break;
+
+ case Atom::SectionHeadingLeft: {
+ writer.writeStartElement("heading");
+ int unit = atom->string().toInt(); // + hOffset(relative)
+ writer.writeAttribute("level", QString::number(unit));
+ m_inSectionHeading = true;
+ } break;
+
+ case Atom::SectionHeadingRight:
+ writer.writeEndElement(); // heading
+ m_inSectionHeading = false;
+ break;
+
+ case Atom::SidebarLeft:
+ case Atom::SidebarRight:
+ break;
+
+ case Atom::SnippetCommand:
+ if (m_quoting) {
+ writer.writeStartElement(atom->string());
+ }
+ break;
+
+ case Atom::SnippetIdentifier:
+ if (m_quoting) {
+ writer.writeAttribute("identifier", atom->string());
+ writer.writeEndElement();
+ keepQuoting = true;
+ }
+ break;
+
+ case Atom::SnippetLocation:
+ if (m_quoting) {
+ const QString &location = atom->string();
+ writer.writeAttribute("location", location);
+ auto maybe_resolved_file{file_resolver.resolve(location)};
+ // const QString resolved = Doc::resolveFile(Location(), location);
+ if (maybe_resolved_file)
+ writer.writeAttribute("path", (*maybe_resolved_file).get_path());
+ else {
+ // TODO: [uncetnralized-admonition][failed-resolve-file]
+ QString details = std::transform_reduce(
+ file_resolver.get_search_directories().cbegin(),
+ file_resolver.get_search_directories().cend(),
+ u"Searched directories:"_s,
+ std::plus(),
+ [](const DirectoryPath &directory_path) -> QString { return u' ' + directory_path.value(); }
+ );
+
+ relative->location().warning(u"Cannot find file to quote from: %1"_s.arg(location), details);
+ }
+ }
+ break;
+
+ case Atom::String:
+ writer.writeCharacters(atom->string());
+ break;
+ case Atom::TableLeft:
+ writer.writeStartElement("table");
+ if (atom->string().contains("%"))
+ writer.writeAttribute("width", atom->string());
+ break;
+
+ case Atom::TableRight:
+ writer.writeEndElement(); // table
+ break;
+
+ case Atom::TableHeaderLeft:
+ writer.writeStartElement("header");
+ break;
+
+ case Atom::TableHeaderRight:
+ writer.writeEndElement(); // header
+ break;
+
+ case Atom::TableRowLeft:
+ writer.writeStartElement("row");
+ break;
+
+ case Atom::TableRowRight:
+ writer.writeEndElement(); // row
+ break;
+
+ case Atom::TableItemLeft: {
+ writer.writeStartElement("item");
+ QStringList spans = atom->string().split(",");
+ if (spans.size() == 2) {
+ if (spans.at(0) != "1")
+ writer.writeAttribute("colspan", spans.at(0).trimmed());
+ if (spans.at(1) != "1")
+ writer.writeAttribute("rowspan", spans.at(1).trimmed());
+ }
+ } break;
+ case Atom::TableItemRight:
+ writer.writeEndElement(); // item
+ break;
+
+ case Atom::Target:
+ writer.writeStartElement("target");
+ writer.writeAttribute("name", Utilities::asAsciiPrintable(atom->string()));
+ writer.writeEndElement();
+ break;
+
+ case Atom::WarningLeft:
+ writer.writeStartElement("para");
+ writer.writeTextElement("bold", "Warning:");
+ writer.writeCharacters(" ");
+ break;
+
+ case Atom::UnhandledFormat:
+ case Atom::UnknownCommand:
+ writer.writeCharacters(atom->typeString());
+ break;
+ default:
+ break;
+ }
+
+ m_hasQuotingInformation = keepQuoting;
+ return atom->next();
+}
+
+void WebXMLGenerator::startLink(QXmlStreamWriter &writer, const Atom *atom, const Node *node,
+ const QString &link)
+{
+ QString fullName = link;
+ if (node)
+ fullName = node->fullName();
+ if (!fullName.isEmpty() && !link.isEmpty()) {
+ writer.writeStartElement("link");
+ if (atom && !atom->string().isEmpty())
+ writer.writeAttribute("raw", atom->string());
+ else
+ writer.writeAttribute("raw", fullName);
+ writer.writeAttribute("href", link);
+ writer.writeAttribute("type", targetType(node));
+ if (node) {
+ switch (node->nodeType()) {
+ case Node::Enum:
+ writer.writeAttribute("enum", fullName);
+ break;
+ case Node::Example: {
+ const auto *en = static_cast<const ExampleNode *>(node);
+ const QString fileTitle = atom ? exampleFileTitle(en, atom->string()) : QString();
+ if (!fileTitle.isEmpty()) {
+ writer.writeAttribute("page", fileTitle);
+ break;
+ }
+ }
+ Q_FALLTHROUGH();
+ case Node::Page:
+ writer.writeAttribute("page", fullName);
+ break;
+ case Node::Property: {
+ const auto *propertyNode = static_cast<const PropertyNode *>(node);
+ if (!propertyNode->getters().empty())
+ writer.writeAttribute("getter", propertyNode->getters().at(0)->fullName());
+ } break;
+ default:
+ break;
+ }
+ }
+ m_inLink = true;
+ }
+}
+
+void WebXMLGenerator::endLink(QXmlStreamWriter &writer)
+{
+ if (m_inLink) {
+ writer.writeEndElement(); // link
+ m_inLink = false;
+ }
+}
+
+void WebXMLGenerator::generateRelations(QXmlStreamWriter &writer, const Node *node)
+{
+ if (node && !node->links().empty()) {
+ std::pair<QString, QString> anchorPair;
+ const Node *linkNode;
+
+ for (auto it = node->links().cbegin(); it != node->links().cend(); ++it) {
+
+ linkNode = m_qdb->findNodeForTarget(it.value().first, node);
+
+ if (!linkNode)
+ linkNode = node;
+
+ if (linkNode == node)
+ anchorPair = it.value();
+ else
+ anchorPair = anchorForNode(linkNode);
+
+ writer.writeStartElement("relation");
+ writer.writeAttribute("href", anchorPair.first);
+ writer.writeAttribute("type", targetType(linkNode));
+
+ switch (it.key()) {
+ case Node::StartLink:
+ writer.writeAttribute("meta", "start");
+ break;
+ case Node::NextLink:
+ writer.writeAttribute("meta", "next");
+ break;
+ case Node::PreviousLink:
+ writer.writeAttribute("meta", "previous");
+ break;
+ case Node::ContentsLink:
+ writer.writeAttribute("meta", "contents");
+ break;
+ default:
+ writer.writeAttribute("meta", "");
+ }
+ writer.writeAttribute("description", anchorPair.second);
+ writer.writeEndElement(); // link
+ }
+ }
+}
+
+void WebXMLGenerator::generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative,
+ const NodeMap &nodeMap)
+{
+ generateAnnotatedList(writer, relative, nodeMap.values());
+}
+
+void WebXMLGenerator::generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative,
+ const NodeList &nodeList)
+{
+ writer.writeStartElement("table");
+ writer.writeAttribute("width", "100%");
+
+ for (const auto *node : nodeList) {
+ writer.writeStartElement("row");
+ writer.writeStartElement("item");
+ writer.writeStartElement("para");
+ const QString link = linkForNode(node, relative);
+ startLink(writer, node->doc().body().firstAtom(), node, link);
+ endLink(writer);
+ writer.writeEndElement(); // para
+ writer.writeEndElement(); // item
+
+ writer.writeStartElement("item");
+ writer.writeStartElement("para");
+ writer.writeCharacters(node->doc().briefText().toString());
+ writer.writeEndElement(); // para
+ writer.writeEndElement(); // item
+ writer.writeEndElement(); // row
+ }
+ writer.writeEndElement(); // table
+}
+
+QString WebXMLGenerator::fileBase(const Node *node) const
+{
+ return Generator::fileBase(node);
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/webxmlgenerator.h b/src/qdoc/qdoc/src/qdoc/webxmlgenerator.h
new file mode 100644
index 000000000..7065670b2
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/webxmlgenerator.h
@@ -0,0 +1,60 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef WEBXMLGENERATOR_H
+#define WEBXMLGENERATOR_H
+
+#include "codemarker.h"
+#include "htmlgenerator.h"
+#include "qdocindexfiles.h"
+
+#include <QtCore/qscopedpointer.h>
+#include <QtCore/qxmlstream.h>
+
+QT_BEGIN_NAMESPACE
+
+class Aggregate;
+
+class WebXMLGenerator : public HtmlGenerator, public IndexSectionWriter
+{
+public:
+ WebXMLGenerator(FileResolver& file_resolver);
+
+ void initializeGenerator() override;
+ void terminateGenerator() override;
+ QString format() override;
+ // from IndexSectionWriter
+ void append(QXmlStreamWriter &writer, Node *node) override;
+
+protected:
+ qsizetype generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker) override;
+ void generateCppReferencePage(Aggregate *aggregate, CodeMarker *marker) override;
+ void generatePageNode(PageNode *pn, CodeMarker *marker) override;
+ void generateDocumentation(Node *node) override;
+ void generateExampleFilePage(const Node *en, ResolvedFile file, CodeMarker *marker = nullptr) override;
+ [[nodiscard]] QString fileExtension() const override;
+
+ virtual const Atom *addAtomElements(QXmlStreamWriter &writer, const Atom *atom,
+ const Node *relative, CodeMarker *marker);
+ virtual void generateIndexSections(QXmlStreamWriter &writer, Node *node);
+
+private:
+ void generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative,
+ const NodeMap &nodeMap);
+ void generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative,
+ const NodeList &nodeList);
+ void generateRelations(QXmlStreamWriter &writer, const Node *node);
+ void startLink(QXmlStreamWriter &writer, const Atom *atom, const Node *node,
+ const QString &link);
+ void endLink(QXmlStreamWriter &writer);
+ QString fileBase(const Node *node) const override;
+
+ bool m_hasQuotingInformation { false };
+ QString quoteCommand {};
+ QScopedPointer<QXmlStreamWriter> currentWriter {};
+ bool m_supplement { false };
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/qdoc/qdoc/src/qdoc/xmlgenerator.cpp b/src/qdoc/qdoc/src/qdoc/xmlgenerator.cpp
new file mode 100644
index 000000000..ffad5259d
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/xmlgenerator.cpp
@@ -0,0 +1,487 @@
+// Copyright (C) 2019 Thibaut Cuvelier
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "xmlgenerator.h"
+
+#include "enumnode.h"
+#include "examplenode.h"
+#include "functionnode.h"
+#include "qdocdatabase.h"
+#include "typedefnode.h"
+
+using namespace Qt::Literals::StringLiterals;
+
+QT_BEGIN_NAMESPACE
+
+const QRegularExpression XmlGenerator::m_funcLeftParen(QStringLiteral("^\\S+(\\(.*\\))"));
+
+XmlGenerator::XmlGenerator(FileResolver& file_resolver) : Generator(file_resolver) {}
+
+/*!
+ Do not display \brief for QML types, document and collection nodes
+ */
+bool XmlGenerator::hasBrief(const Node *node)
+{
+ return !(node->isQmlType() || node->isPageNode() || node->isCollectionNode());
+}
+
+/*!
+ Determines whether the list atom should be shown with three columns
+ (constant-value-description).
+ */
+bool XmlGenerator::isThreeColumnEnumValueTable(const Atom *atom)
+{
+ while (atom && !(atom->type() == Atom::ListRight && atom->string() == ATOM_LIST_VALUE)) {
+ if (atom->type() == Atom::ListItemLeft && !matchAhead(atom, Atom::ListItemRight))
+ return true;
+ atom = atom->next();
+ }
+ return false;
+}
+
+/*!
+ Determines whether the list atom should be shown with just one column (value).
+ */
+bool XmlGenerator::isOneColumnValueTable(const Atom *atom)
+{
+ if (atom->type() != Atom::ListLeft || atom->string() != ATOM_LIST_VALUE)
+ return false;
+
+ while (atom && atom->type() != Atom::ListTagRight)
+ atom = atom->next();
+
+ if (atom) {
+ if (!matchAhead(atom, Atom::ListItemLeft))
+ return false;
+ if (!atom->next())
+ return false;
+ return matchAhead(atom->next(), Atom::ListItemRight);
+ }
+ return false;
+}
+
+/*!
+ Header offset depending on the type of the node
+ */
+int XmlGenerator::hOffset(const Node *node)
+{
+ switch (node->nodeType()) {
+ case Node::Namespace:
+ case Node::Class:
+ case Node::Struct:
+ case Node::Union:
+ case Node::Module:
+ return 2;
+ case Node::QmlModule:
+ case Node::QmlValueType:
+ case Node::QmlType:
+ case Node::Page:
+ case Node::Group:
+ return 1;
+ case Node::Enum:
+ case Node::TypeAlias:
+ case Node::Typedef:
+ case Node::Function:
+ case Node::Property:
+ default:
+ return 3;
+ }
+}
+
+/*!
+ Rewrites the brief of this node depending on its first word.
+ Only for properties and variables (does nothing otherwise).
+ */
+void XmlGenerator::rewritePropertyBrief(const Atom *atom, const Node *relative)
+{
+ if (relative->nodeType() != Node::Property && relative->nodeType() != Node::Variable)
+ return;
+ atom = atom->next();
+ if (!atom || atom->type() != Atom::String)
+ return;
+
+ const QString firstWord =
+ atom->string().toLower().section(' ', 0, 0, QString::SectionSkipEmpty);
+ const QStringList words{ "the", "a", "an", "whether", "which" };
+ if (words.contains(firstWord)) {
+ QString str = QLatin1String("This ")
+ + QLatin1String(relative->nodeType() == Node::Property ? "property" : "variable")
+ + QLatin1String(" holds ") + atom->string().left(1).toLower()
+ + atom->string().mid(1);
+ const_cast<Atom *>(atom)->setString(str);
+ }
+}
+
+/*!
+ Returns the type of this atom as an enumeration.
+ */
+Node::NodeType XmlGenerator::typeFromString(const Atom *atom)
+{
+ const auto &name = atom->string();
+ if (name.startsWith(QLatin1String("qml")))
+ return Node::QmlModule;
+ else if (name.startsWith(QLatin1String("groups")))
+ return Node::Group;
+ else
+ return Node::Module;
+}
+
+/*!
+ For images shown in examples, set the image file to the one it
+ will have once the documentation is generated.
+ */
+void XmlGenerator::setImageFileName(const Node *relative, const QString &fileName)
+{
+ if (relative->isExample()) {
+ const auto cen = static_cast<const ExampleNode *>(relative);
+ if (cen->imageFileName().isEmpty()) {
+ auto *en = const_cast<ExampleNode *>(cen);
+ en->setImageFileName(fileName);
+ }
+ }
+}
+
+/*!
+ Handles the differences in lists between list tags and since tags, and
+ returns the content of the list entry \a atom (first member of the pair).
+ It also returns the number of items to skip ahead (second member of the pair).
+ */
+std::pair<QString, int> XmlGenerator::getAtomListValue(const Atom *atom)
+{
+ const Atom *lookAhead = atom->next();
+ if (!lookAhead)
+ return std::pair<QString, int>(QString(), 1);
+
+ QString t = lookAhead->string();
+ lookAhead = lookAhead->next();
+ if (!lookAhead || lookAhead->type() != Atom::ListTagRight)
+ return std::pair<QString, int>(QString(), 1);
+
+ lookAhead = lookAhead->next();
+ int skipAhead;
+ if (lookAhead && lookAhead->type() == Atom::SinceTagLeft) {
+ lookAhead = lookAhead->next();
+ Q_ASSERT(lookAhead && lookAhead->type() == Atom::String);
+ t += QLatin1String(" (since ");
+ if (lookAhead->string().at(0).isDigit())
+ t += QLatin1String("Qt ");
+ t += lookAhead->string() + QLatin1String(")");
+ skipAhead = 4;
+ } else {
+ skipAhead = 1;
+ }
+ return std::pair<QString, int>(t, skipAhead);
+}
+
+/*!
+ Parses the table attributes from the given \a atom.
+ This method returns a pair containing the width (%) and
+ the attribute for this table (either "generic" or
+ "borderless").
+ */
+std::pair<QString, QString> XmlGenerator::getTableWidthAttr(const Atom *atom)
+{
+ QString p0, p1;
+ QString attr = "generic";
+ QString width;
+ if (atom->count() > 0) {
+ p0 = atom->string(0);
+ if (atom->count() > 1)
+ p1 = atom->string(1);
+ }
+ if (!p0.isEmpty()) {
+ if (p0 == QLatin1String("borderless"))
+ attr = p0;
+ else if (p0.contains(QLatin1Char('%')))
+ width = p0;
+ }
+ if (!p1.isEmpty()) {
+ if (p1 == QLatin1String("borderless"))
+ attr = p1;
+ else if (p1.contains(QLatin1Char('%')))
+ width = p1;
+ }
+
+ // Many times, in the documentation, there is a space before the % sign:
+ // this breaks the parsing logic above.
+ if (width == QLatin1String("%")) {
+ // The percentage is typically stored in p0, parse it as an int.
+ bool ok = false;
+ int widthPercentage = p0.toInt(&ok);
+ if (ok) {
+ width = QString::number(widthPercentage) + "%";
+ } else {
+ width = {};
+ }
+ }
+
+ return {width, attr};
+}
+
+/*!
+ Registers an anchor reference and returns a unique
+ and cleaned copy of the reference (the one that should be
+ used in the output).
+ To ensure unicity throughout the document, this method
+ uses the \a refMap cache.
+ */
+QString XmlGenerator::registerRef(const QString &ref, bool xmlCompliant)
+{
+ QString cleanRef = Generator::cleanRef(ref, xmlCompliant);
+
+ for (;;) {
+ QString &prevRef = refMap[cleanRef.toLower()];
+ if (prevRef.isEmpty()) {
+ // This reference has never been met before for this document: register it.
+ prevRef = ref;
+ break;
+ } else if (prevRef == ref) {
+ // This exact same reference was already found. This case typically occurs within refForNode.
+ break;
+ }
+ cleanRef += QLatin1Char('x');
+ }
+ return cleanRef;
+}
+
+/*!
+ Generates a clean and unique reference for the given \a node.
+ This reference may depend on the type of the node (typedef,
+ QML signal, etc.)
+ */
+QString XmlGenerator::refForNode(const Node *node)
+{
+ QString ref;
+ switch (node->nodeType()) {
+ case Node::Enum:
+ ref = node->name() + "-enum";
+ break;
+ case Node::Typedef: {
+ const auto *tdf = static_cast<const TypedefNode *>(node);
+ if (tdf->associatedEnum())
+ return refForNode(tdf->associatedEnum());
+ } Q_FALLTHROUGH();
+ case Node::TypeAlias:
+ ref = node->name() + "-typedef";
+ break;
+ case Node::Function: {
+ const auto fn = static_cast<const FunctionNode *>(node);
+ switch (fn->metaness()) {
+ case FunctionNode::QmlSignal:
+ ref = fn->name() + "-signal";
+ break;
+ case FunctionNode::QmlSignalHandler:
+ ref = fn->name() + "-signal-handler";
+ break;
+ case FunctionNode::QmlMethod:
+ ref = fn->name() + "-method";
+ if (fn->overloadNumber() != 0)
+ ref += QLatin1Char('-') + QString::number(fn->overloadNumber());
+ break;
+ default:
+ if (fn->hasOneAssociatedProperty() && fn->doc().isEmpty()) {
+ return refForNode(fn->associatedProperties()[0]);
+ } else {
+ ref = fn->name();
+ if (fn->overloadNumber() != 0)
+ ref += QLatin1Char('-') + QString::number(fn->overloadNumber());
+ }
+ break;
+ }
+ } break;
+ case Node::SharedComment: {
+ if (!node->isPropertyGroup())
+ break;
+ } Q_FALLTHROUGH();
+ case Node::QmlProperty:
+ if (node->isAttached())
+ ref = node->name() + "-attached-prop";
+ else
+ ref = node->name() + "-prop";
+ break;
+ case Node::Property:
+ ref = node->name() + "-prop";
+ break;
+ case Node::Variable:
+ ref = node->name() + "-var";
+ break;
+ default:
+ break;
+ }
+ return registerRef(ref);
+}
+
+/*!
+ Construct the link string for the \a node and return it.
+ The \a relative node is used to decide whether the link
+ we are generating is in the same file as the target.
+ Note the relative node can be 0, which pretty much
+ guarantees that the link and the target aren't in the
+ same file.
+ */
+QString XmlGenerator::linkForNode(const Node *node, const Node *relative)
+{
+ if (node == nullptr)
+ return QString();
+ if (!node->url().isNull())
+ return node->url();
+ if (fileBase(node).isEmpty())
+ return QString();
+ if (node->isPrivate())
+ return QString();
+
+ QString fn = fileName(node);
+ if (node->parent() && node->parent()->isQmlType() && node->parent()->isAbstract()) {
+ if (Generator::qmlTypeContext()) {
+ if (Generator::qmlTypeContext()->inherits(node->parent())) {
+ fn = fileName(Generator::qmlTypeContext());
+ } else if (node->parent()->isInternal() && !noLinkErrors()) {
+ node->doc().location().warning(
+ QStringLiteral("Cannot link to property in internal type '%1'")
+ .arg(node->parent()->name()));
+ return QString();
+ }
+ }
+ }
+
+ QString link = fn;
+
+ if (!node->isPageNode() || node->isPropertyGroup()) {
+ QString ref = refForNode(node);
+ if (relative && fn == fileName(relative) && ref == refForNode(relative))
+ return QString();
+
+ link += QLatin1Char('#');
+ link += ref;
+ }
+
+ /*
+ If the output is going to subdirectories, the
+ two nodes have different output directories if 'node'
+ was read from index.
+ */
+ if (relative && (node != relative)) {
+ if (useOutputSubdirs() && !node->isExternalPage() && node->isIndexNode())
+ link.prepend("../%1/"_L1.arg(node->tree()->physicalModuleName()));
+ }
+ return link;
+}
+
+/*!
+ This function is called for links, i.e. for words that
+ are marked with the qdoc link command. For autolinks
+ that are not marked with the qdoc link command, the
+ getAutoLink() function is called
+
+ It returns the string for a link found by using the data
+ in the \a atom to search the database. It also sets \a node
+ to point to the target node for that link. \a relative points
+ to the node holding the qdoc comment where the link command
+ was found.
+ */
+QString XmlGenerator::getLink(const Atom *atom, const Node *relative, const Node **node)
+{
+ const QString &t = atom->string();
+
+ if (t.isEmpty())
+ return t;
+
+ if (t.at(0) == QChar('h')) {
+ if (t.startsWith("http:") || t.startsWith("https:"))
+ return t;
+ } else if (t.at(0) == QChar('f')) {
+ if (t.startsWith("file:") || t.startsWith("ftp:"))
+ return t;
+ } else if (t.at(0) == QChar('m')) {
+ if (t.startsWith("mailto:"))
+ return t;
+ }
+ return getAutoLink(atom, relative, node);
+}
+
+/*!
+ This function is called for autolinks, i.e. for words that
+ are not marked with the qdoc link command that qdoc has
+ reason to believe should be links.
+
+ It returns the string for a link found by using the data
+ in the \a atom to search the database. It also sets \a node
+ to point to the target node for that link. \a relative points
+ to the node holding the qdoc comment where the link command
+ was found.
+ */
+QString XmlGenerator::getAutoLink(const Atom *atom, const Node *relative, const Node **node,
+ Node::Genus genus)
+{
+ QString ref;
+
+ *node = m_qdb->findNodeForAtom(atom, relative, ref, genus);
+ if (!(*node))
+ return QString();
+
+ QString link = (*node)->url();
+ if (link.isNull()) {
+ link = linkForNode(*node, relative);
+ } else if (link.isEmpty()) {
+ return link; // Explicit empty url (node is ignored as a link target)
+ }
+ if (!ref.isEmpty()) {
+ qsizetype hashtag = link.lastIndexOf(QChar('#'));
+ if (hashtag != -1)
+ link.truncate(hashtag);
+ link += QLatin1Char('#') + ref;
+ }
+ return link;
+}
+
+std::pair<QString, QString> XmlGenerator::anchorForNode(const Node *node)
+{
+ std::pair<QString, QString> anchorPair;
+
+ anchorPair.first = Generator::fileName(node);
+ if (node->isTextPageNode())
+ anchorPair.second = node->title();
+
+ return anchorPair;
+}
+
+/*!
+ Returns a string describing the \a node type.
+ */
+QString XmlGenerator::targetType(const Node *node)
+{
+ if (!node)
+ return QStringLiteral("external");
+
+ switch (node->nodeType()) {
+ case Node::Namespace:
+ return QStringLiteral("namespace");
+ case Node::Class:
+ case Node::Struct:
+ case Node::Union:
+ return QStringLiteral("class");
+ case Node::Page:
+ case Node::Example:
+ return QStringLiteral("page");
+ case Node::Enum:
+ return QStringLiteral("enum");
+ case Node::TypeAlias:
+ return QStringLiteral("alias");
+ case Node::Typedef:
+ return QStringLiteral("typedef");
+ case Node::Property:
+ return QStringLiteral("property");
+ case Node::Function:
+ return QStringLiteral("function");
+ case Node::Variable:
+ return QStringLiteral("variable");
+ case Node::Module:
+ return QStringLiteral("module");
+ default:
+ break;
+ }
+ return QString();
+}
+
+QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/xmlgenerator.h b/src/qdoc/qdoc/src/qdoc/xmlgenerator.h
new file mode 100644
index 000000000..5f7ba67fd
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/xmlgenerator.h
@@ -0,0 +1,54 @@
+// Copyright (C) 2019 Thibaut Cuvelier
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef XMLGENERATOR_H
+#define XMLGENERATOR_H
+
+#include "node.h"
+#include "generator.h"
+#include "filesystem/fileresolver.h"
+
+#include <QtCore/qmap.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+class XmlGenerator : public Generator
+{
+public:
+ explicit XmlGenerator(FileResolver& file_resolver);
+
+protected:
+ QHash<QString, QString> refMap;
+
+ static bool hasBrief(const Node *node);
+ static bool isThreeColumnEnumValueTable(const Atom *atom);
+ static bool isOneColumnValueTable(const Atom *atom);
+ static int hOffset(const Node *node);
+
+ static void rewritePropertyBrief(const Atom *atom, const Node *relative);
+ static Node::NodeType typeFromString(const Atom *atom);
+ static void setImageFileName(const Node *relative, const QString &fileName);
+ static std::pair<QString, int> getAtomListValue(const Atom *atom);
+ static std::pair<QString, QString> getTableWidthAttr(const Atom *atom);
+
+ QString registerRef(const QString &ref, bool xmlCompliant = false);
+ QString refForNode(const Node *node);
+ QString linkForNode(const Node *node, const Node *relative);
+ QString getLink(const Atom *atom, const Node *relative, const Node **node);
+ QString getAutoLink(const Atom *atom, const Node *relative, const Node **node,
+ Node::Genus = Node::DontCare);
+
+ std::pair<QString, QString> anchorForNode(const Node *node);
+
+ static QString targetType(const Node *node);
+
+protected:
+ static const QRegularExpression m_funcLeftParen;
+ const Node *m_linkNode { nullptr };
+};
+
+QT_END_NAMESPACE
+
+#endif // XMLGENERATOR_H
diff --git a/src/qdoc/qdoc/tests/CMakeLists.txt b/src/qdoc/qdoc/tests/CMakeLists.txt
new file mode 100644
index 000000000..143837517
--- /dev/null
+++ b/src/qdoc/qdoc/tests/CMakeLists.txt
@@ -0,0 +1,6 @@
+add_subdirectory(qdoc)
+add_subdirectory(config)
+add_subdirectory(qdoccommandlineparser)
+add_subdirectory(utilities)
+add_subdirectory(generatedoutput)
+add_subdirectory(validateqdocoutputfiles)
diff --git a/src/qdoc/qdoc/tests/config/CMakeLists.txt b/src/qdoc/qdoc/tests/config/CMakeLists.txt
new file mode 100644
index 000000000..ef483291d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/config/CMakeLists.txt
@@ -0,0 +1,24 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_config Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_config LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_config
+ SOURCES
+ ${CMAKE_CURRENT_LIST_DIR}/tst_config.cpp
+
+ ${CMAKE_CURRENT_LIST_DIR}/../../src/qdoc/config.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/../../src/qdoc/location.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/../../src/qdoc/qdoccommandlineparser.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/../../src/qdoc/utilities.cpp
+ INCLUDE_DIRECTORIES
+ ${CMAKE_CURRENT_LIST_DIR}/../../src/
+)
diff --git a/tests/auto/qdoc/config/testdata/configs/exampletest.qdocconf b/src/qdoc/qdoc/tests/config/testdata/configs/exampletest.qdocconf
index a1459f977..a1459f977 100644
--- a/tests/auto/qdoc/config/testdata/configs/exampletest.qdocconf
+++ b/src/qdoc/qdoc/tests/config/testdata/configs/exampletest.qdocconf
diff --git a/tests/auto/qdoc/config/testdata/configs/expandvars.qdocconf b/src/qdoc/qdoc/tests/config/testdata/configs/expandvars.qdocconf
index ace4ab13b..ace4ab13b 100644
--- a/tests/auto/qdoc/config/testdata/configs/expandvars.qdocconf
+++ b/src/qdoc/qdoc/tests/config/testdata/configs/expandvars.qdocconf
diff --git a/src/qdoc/qdoc/tests/config/testdata/configs/includepaths.qdocconf b/src/qdoc/qdoc/tests/config/testdata/configs/includepaths.qdocconf
new file mode 100644
index 000000000..2d6ff22af
--- /dev/null
+++ b/src/qdoc/qdoc/tests/config/testdata/configs/includepaths.qdocconf
@@ -0,0 +1,2 @@
+project = IncludePaths
+include(../includepaths/includepaths.qdocconf)
diff --git a/tests/auto/qdoc/config/testdata/configs/includes/test.qdoc b/src/qdoc/qdoc/tests/config/testdata/configs/includes/test.qdoc
index 700f1e819..700f1e819 100644
--- a/tests/auto/qdoc/config/testdata/configs/includes/test.qdoc
+++ b/src/qdoc/qdoc/tests/config/testdata/configs/includes/test.qdoc
diff --git a/tests/auto/qdoc/config/testdata/configs/paths.qdocconf b/src/qdoc/qdoc/tests/config/testdata/configs/paths.qdocconf
index 93f7b3586..93f7b3586 100644
--- a/tests/auto/qdoc/config/testdata/configs/paths.qdocconf
+++ b/src/qdoc/qdoc/tests/config/testdata/configs/paths.qdocconf
diff --git a/tests/auto/qdoc/config/testdata/configs/vars.qdocconf b/src/qdoc/qdoc/tests/config/testdata/configs/vars.qdocconf
index 1f5da6eb8..1f5da6eb8 100644
--- a/tests/auto/qdoc/config/testdata/configs/vars.qdocconf
+++ b/src/qdoc/qdoc/tests/config/testdata/configs/vars.qdocconf
diff --git a/tests/auto/qdoc/config/testdata/exampletest/examples/test/empty/test.pro b/src/qdoc/qdoc/tests/config/testdata/exampletest/examples/test/empty/test.pro
index 556df42ea..556df42ea 100644
--- a/tests/auto/qdoc/config/testdata/exampletest/examples/test/empty/test.pro
+++ b/src/qdoc/qdoc/tests/config/testdata/exampletest/examples/test/empty/test.pro
diff --git a/tests/auto/qdoc/config/testdata/exampletest/examples/test/example1/example1.pro b/src/qdoc/qdoc/tests/config/testdata/exampletest/examples/test/example1/example1.pro
index 556df42ea..556df42ea 100644
--- a/tests/auto/qdoc/config/testdata/exampletest/examples/test/example1/example1.pro
+++ b/src/qdoc/qdoc/tests/config/testdata/exampletest/examples/test/example1/example1.pro
diff --git a/tests/auto/qdoc/config/testdata/exampletest/examples/test/example2/example2.qmlproject b/src/qdoc/qdoc/tests/config/testdata/exampletest/examples/test/example2/example2.qmlproject
index 556df42ea..556df42ea 100644
--- a/tests/auto/qdoc/config/testdata/exampletest/examples/test/example2/example2.qmlproject
+++ b/src/qdoc/qdoc/tests/config/testdata/exampletest/examples/test/example2/example2.qmlproject
diff --git a/tests/auto/qdoc/config/testdata/exampletest/examples/test/example3/example3.pyproject b/src/qdoc/qdoc/tests/config/testdata/exampletest/examples/test/example3/example3.pyproject
index 556df42ea..556df42ea 100644
--- a/tests/auto/qdoc/config/testdata/exampletest/examples/test/example3/example3.pyproject
+++ b/src/qdoc/qdoc/tests/config/testdata/exampletest/examples/test/example3/example3.pyproject
diff --git a/tests/auto/qdoc/config/testdata/exampletest/examples/test/example4/CMakeLists.txt b/src/qdoc/qdoc/tests/config/testdata/exampletest/examples/test/example4/CMakeLists.txt
index 556df42ea..556df42ea 100644
--- a/tests/auto/qdoc/config/testdata/exampletest/examples/test/example4/CMakeLists.txt
+++ b/src/qdoc/qdoc/tests/config/testdata/exampletest/examples/test/example4/CMakeLists.txt
diff --git a/tests/auto/qdoc/config/testdata/exampletest/examples/test/example4/example4.pro b/src/qdoc/qdoc/tests/config/testdata/exampletest/examples/test/example4/example4.pro
index 556df42ea..556df42ea 100644
--- a/tests/auto/qdoc/config/testdata/exampletest/examples/test/example4/example4.pro
+++ b/src/qdoc/qdoc/tests/config/testdata/exampletest/examples/test/example4/example4.pro
diff --git a/src/qdoc/qdoc/tests/config/testdata/includepaths/include/framework/ignore.h b/src/qdoc/qdoc/tests/config/testdata/includepaths/include/framework/ignore.h
new file mode 100644
index 000000000..b2a4ba591
--- /dev/null
+++ b/src/qdoc/qdoc/tests/config/testdata/includepaths/include/framework/ignore.h
@@ -0,0 +1 @@
+# nothing here
diff --git a/src/qdoc/qdoc/tests/config/testdata/includepaths/include/more/ignore.h b/src/qdoc/qdoc/tests/config/testdata/includepaths/include/more/ignore.h
new file mode 100644
index 000000000..b2a4ba591
--- /dev/null
+++ b/src/qdoc/qdoc/tests/config/testdata/includepaths/include/more/ignore.h
@@ -0,0 +1 @@
+# nothing here
diff --git a/src/qdoc/qdoc/tests/config/testdata/includepaths/include/purpose.h b/src/qdoc/qdoc/tests/config/testdata/includepaths/include/purpose.h
new file mode 100644
index 000000000..0f7af352b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/config/testdata/includepaths/include/purpose.h
@@ -0,0 +1 @@
+#define PURPOSE "Pass butter"
diff --git a/src/qdoc/qdoc/tests/config/testdata/includepaths/include/system/ignore.h b/src/qdoc/qdoc/tests/config/testdata/includepaths/include/system/ignore.h
new file mode 100644
index 000000000..b2a4ba591
--- /dev/null
+++ b/src/qdoc/qdoc/tests/config/testdata/includepaths/include/system/ignore.h
@@ -0,0 +1 @@
+# nothing here
diff --git a/src/qdoc/qdoc/tests/config/testdata/includepaths/includepaths.qdocconf b/src/qdoc/qdoc/tests/config/testdata/includepaths/includepaths.qdocconf
new file mode 100644
index 000000000..6288c4258
--- /dev/null
+++ b/src/qdoc/qdoc/tests/config/testdata/includepaths/includepaths.qdocconf
@@ -0,0 +1,16 @@
+includepaths = -I./include
+
+# without prefix but same path, should be identical
+# (Config should not remove duplicates)
+includepaths += include
+
+# space between prefix and path - incorrect but we allow it
+includepaths += -I include/more
+
+# system paths and framework paths
+includepaths += \
+ -F./include/framework \
+ -isysteminclude/system
+
+# nonexistent paths are to be ignored
+includepaths += invalid
diff --git a/tests/auto/qdoc/config/testdata/paths/includes/test.qdoc b/src/qdoc/qdoc/tests/config/testdata/paths/includes/test.qdoc
index 700f1e819..700f1e819 100644
--- a/tests/auto/qdoc/config/testdata/paths/includes/test.qdoc
+++ b/src/qdoc/qdoc/tests/config/testdata/paths/includes/test.qdoc
diff --git a/tests/auto/qdoc/config/testdata/paths/paths.qdocconf b/src/qdoc/qdoc/tests/config/testdata/paths/paths.qdocconf
index d360f4c1e..d360f4c1e 100644
--- a/tests/auto/qdoc/config/testdata/paths/paths.qdocconf
+++ b/src/qdoc/qdoc/tests/config/testdata/paths/paths.qdocconf
diff --git a/src/qdoc/qdoc/tests/config/tst_config.cpp b/src/qdoc/qdoc/tests/config/tst_config.cpp
new file mode 100644
index 000000000..0e73130b8
--- /dev/null
+++ b/src/qdoc/qdoc/tests/config/tst_config.cpp
@@ -0,0 +1,180 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "qdoc/config.h"
+
+#include <QtCore/qdir.h>
+#include <QtCore/qfileinfo.h>
+#include <QtCore/qhash.h>
+#include <QtCore/qstringlist.h>
+#include <QtTest/QtTest>
+
+class tst_Config : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void classMembersInitializeToFalseOrEmpty();
+ void includePathsFromCommandLine();
+ void variables();
+ void paths();
+ void includepaths();
+ void getExampleProjectFile();
+ void expandVars();
+
+private:
+ Config &initConfig(const QStringList &args = QStringList(),
+ const char *qdocconf = nullptr);
+ Config &initConfig(const char *qdocconf)
+ {
+ return initConfig(QStringList(), qdocconf);
+ }
+};
+
+/*
+ Initializes the Config with optional arguments and a .qdocconf file
+ to load, and returns a reference to it.
+*/
+Config &tst_Config::initConfig(const QStringList &args, const char *qdocconf)
+{
+ QStringList fullArgs = { QStringLiteral("./qdoc") };
+ fullArgs << args;
+ Config::instance().init("QDoc Test", fullArgs);
+
+ if (qdocconf) {
+ const auto configFile = QFINDTESTDATA(qdocconf);
+ if (!configFile.isEmpty())
+ Config::instance().load(configFile);
+ }
+
+ return Config::instance();
+}
+
+void tst_Config::classMembersInitializeToFalseOrEmpty()
+{
+ auto &config = initConfig();
+ QCOMPARE(config.showInternal(), false);
+ QCOMPARE(config.singleExec(), false);
+
+ QVERIFY(config.defines().isEmpty());
+ QVERIFY(config.includePaths().isEmpty());
+ QVERIFY(config.dependModules().isEmpty());
+ QVERIFY(config.indexDirs().isEmpty());
+ QVERIFY(config.currentDir().isEmpty());
+ QVERIFY(config.previousCurrentDir().isEmpty());
+}
+
+void tst_Config::includePathsFromCommandLine()
+{
+ const auto mockIncludePath1 = QString("-I" + QDir().absoluteFilePath("/qt5/qtdoc/doc/."));
+ const auto mockIncludePath2 = QString("-I" + QDir().absoluteFilePath("/qt5/qtbase/mkspecs/linux-g++"));
+ const QStringList commandLineArgs = { mockIncludePath1, mockIncludePath2 };
+ auto &config = initConfig(commandLineArgs);
+
+ const QStringList expected = { mockIncludePath1, mockIncludePath2 };
+ const QStringList actual = config.includePaths();
+
+ QCOMPARE(actual, expected);
+}
+
+// Tests different types of variables; string, string list, bool, int,
+// empty and undefined variables, and subvariables.
+void tst_Config::variables()
+{
+ auto &config = initConfig("/testdata/configs/vars.qdocconf");
+
+ const QStringList list = { "testing", "line", "by\n", "line" };
+ QCOMPARE(config.get("list").asStringList(), list);
+ QCOMPARE(config.get("list").asString(), "testing line by\nline");
+ QCOMPARE(config.get("true").asBool(), true);
+ QCOMPARE(config.get("untrue").asBool(), false);
+ QCOMPARE(config.get("int").asInt(), 2);
+ QCOMPARE(config.get("void").asString(), QString());
+ QVERIFY(!config.get("void").asString().isNull());
+ QCOMPARE(config.get("void").asString("undefined"), QString());
+ QCOMPARE(config.get("undefined").asString("undefined"), "undefined");
+ QVERIFY(config.get("undefined").asString().isNull());
+
+ QSet<QString> subVars = { "thing", "where", "time" };
+ QCOMPARE(config.subVars("some"), subVars);
+}
+
+// Tests whether paths or variables are resolved correctly.
+void tst_Config::paths()
+{
+ auto &config = initConfig();
+ const auto docConfig = QFINDTESTDATA("/testdata/configs/paths.qdocconf");
+ if (!docConfig.isEmpty())
+ config.load(docConfig);
+
+ auto rootDir = QFileInfo(docConfig).dir();
+ QVERIFY(rootDir.cdUp());
+
+ const auto paths = config.getCanonicalPathList("sourcedirs");
+ QVERIFY(paths.size() == 3);
+
+ QCOMPARE(paths[0], rootDir.absoluteFilePath("paths/includes"));
+ QCOMPARE(paths[1], rootDir.absoluteFilePath("configs"));
+ QCOMPARE(paths[2], rootDir.absoluteFilePath("configs/includes"));
+}
+
+// Tests whether includepaths are resolved correctly
+void tst_Config::includepaths()
+{
+ auto &config = initConfig();
+ const auto docConfig = QFINDTESTDATA("/testdata/configs/includepaths.qdocconf");
+ if (!docConfig.isEmpty())
+ config.load(docConfig);
+
+ auto rootDir = QFileInfo(docConfig).dir();
+ QVERIFY(rootDir.cdUp());
+
+ const auto paths = config.getCanonicalPathList("includepaths",
+ Config::IncludePaths);
+ QVERIFY(paths.size() == 5);
+
+ QCOMPARE(paths[0], "-I" + rootDir.absoluteFilePath("includepaths/include"));
+ QCOMPARE(paths[0], paths[1]);
+ QCOMPARE(paths[2], "-I" + rootDir.absoluteFilePath("includepaths/include/more"));
+ QCOMPARE(paths[3], "-F" + rootDir.absoluteFilePath("includepaths/include/framework"));
+ QCOMPARE(paths[4], "-isystem" + rootDir.absoluteFilePath("includepaths/include/system"));
+}
+
+void::tst_Config::getExampleProjectFile()
+{
+ auto &config = initConfig();
+ const auto docConfig = QFINDTESTDATA("/testdata/configs/exampletest.qdocconf");
+ if (!docConfig.isEmpty())
+ config.load(docConfig);
+
+ auto rootDir = QFileInfo(docConfig).dir();
+ QVERIFY(rootDir.cd("../exampletest/examples/test"));
+
+ QVERIFY(config.getExampleProjectFile("invalid").isEmpty());
+ QVERIFY(config.getExampleProjectFile("test/empty").isEmpty());
+
+ QCOMPARE(config.getExampleProjectFile("test/example1"),
+ rootDir.absoluteFilePath("example1/example1.pro"));
+ QCOMPARE(config.getExampleProjectFile("test/example2"),
+ rootDir.absoluteFilePath("example2/example2.qmlproject"));
+ QCOMPARE(config.getExampleProjectFile("test/example3"),
+ rootDir.absoluteFilePath("example3/example3.pyproject"));
+ QCOMPARE(config.getExampleProjectFile("test/example4"),
+ rootDir.absoluteFilePath("example4/CMakeLists.txt"));
+}
+
+void::tst_Config::expandVars()
+{
+ qputenv("QDOC_TSTCONFIG_LIST", QByteArray("a b c"));
+ auto &config = initConfig("/testdata/configs/expandvars.qdocconf");
+
+ QCOMPARE(config.get("expanded1").asString(), "foo");
+ QCOMPARE(config.get("expanded2").asString(), "foo,bar");
+ QCOMPARE(config.get("expanded3").asString(), "foobar foobar baz");
+ QCOMPARE(config.get("literally").asString(), "$data ${data}");
+ QCOMPARE(config.get("csvlist").asString(), "a,b,c");
+}
+
+QTEST_APPLESS_MAIN(tst_Config)
+
+#include "tst_config.moc"
diff --git a/src/qdoc/qdoc/tests/generatedoutput/CMakeLists.txt b/src/qdoc/qdoc/tests/generatedoutput/CMakeLists.txt
new file mode 100644
index 000000000..1dea3ae59
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/CMakeLists.txt
@@ -0,0 +1,46 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+# It's mostly manually written.
+
+#####################################################################
+## tst_generatedOutput Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_generatedOutput LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_generatedOutput
+ SOURCES
+ ${CMAKE_CURRENT_LIST_DIR}/tst_generatedoutput.cpp
+)
+
+# Write relevant Qt include path to a file, to be read in by QDoc
+set(config_subfolder "")
+get_cmake_property(is_multi_config GENERATOR_IS_MULTI_CONFIG)
+if(is_multi_config)
+ set(config_subfolder "$<CONFIG>/")
+endif()
+set(includepathsfile "${CMAKE_CURRENT_BINARY_DIR}/${config_subfolder}qdocincludepaths.inc")
+set(framework_path "\n")
+
+find_package(Qt6 COMPONENTS Core REQUIRED)
+if(Qt6Core_FOUND)
+ get_target_property(include_paths Qt6::Core INTERFACE_INCLUDE_DIRECTORIES)
+endif()
+
+while(include_paths)
+ list(POP_BACK include_paths inc_path)
+ if(inc_path MATCHES "(.+)/QtCore\.framework$")
+ string(APPEND framework_path "-F${CMAKE_MATCH_1}")
+ break()
+ endif()
+endwhile()
+
+set (include_paths "$<TARGET_PROPERTY:tst_generatedOutput,INCLUDE_DIRECTORIES>")
+file(GENERATE OUTPUT ${includepathsfile} CONTENT "-I$<JOIN:${include_paths},\n-I>${framework_path}")
+
+add_dependencies(tst_generatedOutput Qt::qdoc)
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/autolinking.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/autolinking.html
new file mode 100644
index 000000000..444c3d0d1
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/autolinking.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classlists.qdoc -->
+ <title>Autolinking | TestCPP</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#testqdoc">TestQDoc</a></li>
+<li class="level1"><a href="#someprop">someProp</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Autolinking</h1>
+<!-- $$$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>Autolinks:</p>
+<ul>
+<li><a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></li>
+</ul>
+<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>
+</ul>
+<h2 id="someprop">someProp</h2>
+</div>
+<!-- @@@autolinking.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/cpptypes.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/cpptypes.html
new file mode 100644
index 000000000..8d91afd76
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/cpptypes.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classlists.qdoc -->
+ <title>Test C++ Types | TestCPP</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Test C++ Types</h1>
+<!-- $$$cpptypes-description -->
+<div class="descr" id="details">
+<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>
+<!-- @@@cpptypes -->
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-test.html">TestQDoc::Test</a></p></td><td class="tblDescr"><p>A class in a namespace</p></td></tr>
+</table></div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/crossmodule/all-namespaces.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/crossmodule/all-namespaces.html
new file mode 100644
index 000000000..8d23c2aef
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/crossmodule/all-namespaces.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- namespaces.qdoc -->
+ <title>Namespaces | CrossModule</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Namespaces</h1>
+<!-- $$$all-namespaces.html-description -->
+<div class="descr" id="details">
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="crossmoduleref.html">CrossModuleRef</a></p></td><td class="tblDescr"><p>Namespace that has documented functions in multiple modules</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="testqdoc.html">TestQDoc</a></p></td><td class="tblDescr"><p>A namespace</p></td></tr>
+</table></div>
+</div>
+<!-- @@@all-namespaces.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/crossmodule/testtype-members.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/crossmodule/testtype-members.html
new file mode 100644
index 000000000..0cb92b933
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/crossmodule/testtype-members.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testtype.cpp -->
+ <meta name="description" content="A class inheriting another class that lives in an external doc module.">
+ <title>List of All Members for TestType | CrossModule</title>
+</head>
+<body>
+<li>TestType</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for TestType</h1>
+<p>This is the complete list of members for <a href="testtype.html">TestType</a>, including inherited members.</p>
+<div class="table"><table class="propsummary" translate="no">
+<tr><td class="topAlign"><ul>
+<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#DerivedType-typedef" translate="no">DerivedType</a></b></span></li>
+<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#NotTypedef-typedef" translate="no">NotTypedef</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#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>
+<li class="fn" translate="no"><span class="name"><b><a href="testtype.html#nothing" translate="no">nothing</a></b></span>()</li>
+</ul></td><td class="topAlign"><ul>
+<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>
+<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-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>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/crossmodule/testtype.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/crossmodule/testtype.html
new file mode 100644
index 000000000..ed8bfc96c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/crossmodule/testtype.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testtype.cpp -->
+ <meta name="description" content="A class inheriting another class that lives in an external doc module.">
+ <title>TestType Class | CrossModule</title>
+</head>
+<body>
+<li>TestType</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>
+<li class="level2"><a href="#linking">Linking</a></li>
+<li class="level2"><a href="#generated-lists">Generated Lists</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">TestType Class</h1>
+<!-- $$$TestType-brief -->
+<p>A class inheriting another class that lives in an external doc module. <a href="#details">More...</a></p>
+<!-- @@@TestType -->
+<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;TestType&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> Inherits:</td><td class="memItemRight bottomAlign"> <a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></td></tr>
+</table></div>
+<ul>
+<li><a href="testtype-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"> void </td><td class="memItemRight bottomAlign"><b><a href="testtype.html#nothing" translate="no">nothing</a></b>()</td></tr>
+</table></div>
+<!-- $$$TestType-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<h3 id="linking">Linking</h3>
+<p>These links go to the parent class:</p>
+<ul>
+<li><a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></li>
+<li><a href="testqdoc-test.html" translate="no">Test</a> class <a href="testqdoc.html#usage" translate="no">Usage</a>.</li>
+<li><a href="testqdoc.html#QDOCTEST_MACRO" translate="no">QDOCTEST_MACRO</a></li>
+<li>DontLinkToMe</li>
+</ul>
+<h3 id="generated-lists">Generated Lists</h3>
+<p>This is an annotated list of entries in a group: <div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-test.html">TestQDoc::Test</a></p></td><td class="tblDescr"><p>A class in a namespace</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-test.html#QDOCTEST_MACRO2">TestQDoc::Test::QDOCTEST_MACRO2</a></p></td><td class="tblDescr"><p>A macro with argument x</p></td></tr>
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-test.html#operator-eq">TestQDoc::Test::operator=()</a></p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-test.html#someFunctionDefaultArg">TestQDoc::Test::someFunctionDefaultArg()</a></p></td></tr>
+</table></div>
+</p>
+</div>
+<p><b>See also </b><a href="testqdoc-test.html#someFunction" translate="no">someFunction</a>().</p>
+<!-- @@@TestType -->
+<div class="func">
+<h2>Member Function Documentation</h2>
+<!-- $$$nothing[overload1]$$$nothing -->
+<h3 class="fn" translate="no" id="nothing"><span class="type">void</span> TestType::<span class="name">nothing</span>()</h3>
+<p>Nothing to see here.</p>
+<!-- @@@nothing -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/crossmoduleref-sub-crossmodule.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/crossmoduleref-sub-crossmodule.html
new file mode 100644
index 000000000..7d40a92d6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/crossmoduleref-sub-crossmodule.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>CrossModuleRef Namespace | CrossModule</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#functions">Functions</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">CrossModuleRef Namespace</h1>
+<p>The CrossModuleRef namespace includes the following elements from module CrossModule. The full namespace is documented in module TestCPP<a href="crossmoduleref.html" translate="no"> here.</a></p>
+<h2 id="functions">Functions</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="crossmoduleref-sub-crossmodule.html#documentMeToo" translate="no">documentMeToo</a></b>()</td></tr>
+</table></div>
+<div class="func">
+<h2>Function Documentation</h2>
+<!-- $$$documentMeToo[overload1]$$$documentMeToo -->
+<h3 class="fn" translate="no" id="documentMeToo"><span class="type">void</span> CrossModuleRef::<span class="name">documentMeToo</span>()</h3>
+<p>Function under a namespace that's documented elsewhere.</p>
+<!-- @@@documentMeToo -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/testtype-members.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/testtype-members.html
new file mode 100644
index 000000000..0cb92b933
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/testtype-members.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testtype.cpp -->
+ <meta name="description" content="A class inheriting another class that lives in an external doc module.">
+ <title>List of All Members for TestType | CrossModule</title>
+</head>
+<body>
+<li>TestType</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for TestType</h1>
+<p>This is the complete list of members for <a href="testtype.html">TestType</a>, including inherited members.</p>
+<div class="table"><table class="propsummary" translate="no">
+<tr><td class="topAlign"><ul>
+<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#DerivedType-typedef" translate="no">DerivedType</a></b></span></li>
+<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#NotTypedef-typedef" translate="no">NotTypedef</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#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>
+<li class="fn" translate="no"><span class="name"><b><a href="testtype.html#nothing" translate="no">nothing</a></b></span>()</li>
+</ul></td><td class="topAlign"><ul>
+<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>
+<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-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>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/testtype.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/testtype.html
new file mode 100644
index 000000000..ed8bfc96c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/crossmodule/testtype.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testtype.cpp -->
+ <meta name="description" content="A class inheriting another class that lives in an external doc module.">
+ <title>TestType Class | CrossModule</title>
+</head>
+<body>
+<li>TestType</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>
+<li class="level2"><a href="#linking">Linking</a></li>
+<li class="level2"><a href="#generated-lists">Generated Lists</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">TestType Class</h1>
+<!-- $$$TestType-brief -->
+<p>A class inheriting another class that lives in an external doc module. <a href="#details">More...</a></p>
+<!-- @@@TestType -->
+<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;TestType&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> Inherits:</td><td class="memItemRight bottomAlign"> <a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></td></tr>
+</table></div>
+<ul>
+<li><a href="testtype-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"> void </td><td class="memItemRight bottomAlign"><b><a href="testtype.html#nothing" translate="no">nothing</a></b>()</td></tr>
+</table></div>
+<!-- $$$TestType-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<h3 id="linking">Linking</h3>
+<p>These links go to the parent class:</p>
+<ul>
+<li><a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></li>
+<li><a href="testqdoc-test.html" translate="no">Test</a> class <a href="testqdoc.html#usage" translate="no">Usage</a>.</li>
+<li><a href="testqdoc.html#QDOCTEST_MACRO" translate="no">QDOCTEST_MACRO</a></li>
+<li>DontLinkToMe</li>
+</ul>
+<h3 id="generated-lists">Generated Lists</h3>
+<p>This is an annotated list of entries in a group: <div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-test.html">TestQDoc::Test</a></p></td><td class="tblDescr"><p>A class in a namespace</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-test.html#QDOCTEST_MACRO2">TestQDoc::Test::QDOCTEST_MACRO2</a></p></td><td class="tblDescr"><p>A macro with argument x</p></td></tr>
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-test.html#operator-eq">TestQDoc::Test::operator=()</a></p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-test.html#someFunctionDefaultArg">TestQDoc::Test::someFunctionDefaultArg()</a></p></td></tr>
+</table></div>
+</p>
+</div>
+<p><b>See also </b><a href="testqdoc-test.html#someFunction" translate="no">someFunction</a>().</p>
+<!-- @@@TestType -->
+<div class="func">
+<h2>Member Function Documentation</h2>
+<!-- $$$nothing[overload1]$$$nothing -->
+<h3 class="fn" translate="no" id="nothing"><span class="type">void</span> TestType::<span class="name">nothing</span>()</h3>
+<p>Nothing to see here.</p>
+<!-- @@@nothing -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/includefromexampledirs/index.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/includefromexampledirs/index.html
new file mode 100644
index 000000000..0d984f60d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/includefromexampledirs/index.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- includefromparent.qdoc -->
+ <title>doc index | Test</title>
+</head>
+<body>
+<h1 class="title">doc index</h1>
+<!-- $$$index.html-description -->
+<div class="descr" id="details">
+<h2 id="c-classes">C++ Classes</h2>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-test.html">TestQDoc::Test</a></p></td><td class="tblDescr"><p>A class in a namespace</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></p></td><td class="tblDescr"><p>A class in a namespace, derived from Test</p></td></tr>
+</table></div>
+<h2 id="qml-types">QML Types</h2>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="qml-qdoc-test-abstractparent.html">AbstractParent</a></p></td><td class="tblDescr"><p>Abstract base QML type</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="qml-qdoc-test-child.html">Child</a></p></td><td class="tblDescr"><p>A Child inheriting its parent</p></td></tr>
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="qml-int.html">int</a></p></td><td class="tblDescr"><p>An integer value type</p></td></tr>
+</table></div>
+<p>Test include file that is part of the sourcedirs.</p>
+</div>
+<!-- @@@index.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent-members.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent-members.html
new file mode 100644
index 000000000..beb7792f7
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent-members.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- includefromparent.qdoc -->
+ <meta name="description" content="Abstract base QML type.">
+ <title>List of All Members for AbstractParent | Test</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li>AbstractParent</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for AbstractParent</h1>
+<p>This is the complete list of members for <a href="qml-qdoc-test-abstractparent.html">AbstractParent</a>, including inherited members.</p>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-abstractparent.html#children-prop" translate="no">children</a></b> : list&lt;Child&gt; [default]</li>
+<li class="fn" translate="no">void <b><a href="qml-qdoc-test-abstractparent.html#rear-method" translate="no">rear</a></b>(Child <i>child</i>)</li>
+</ul>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent.html
new file mode 100644
index 000000000..6d6d47838
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- includefromparent.qdoc -->
+ <meta name="description" content="Abstract base QML type.">
+ <title>AbstractParent QML Type | Test</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li>AbstractParent</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#properties">Properties</a></li>
+<li class="level1"><a href="#methods">Methods</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">AbstractParent QML Type</h1>
+<!-- $$$AbstractParent-brief -->
+<p>Abstract base QML type. <a href="#details">More...</a></p>
+<!-- @@@AbstractParent -->
+<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"> Inherited By:</td><td class="memItemRight bottomAlign"> <p><a href="qml-qdoc-test-child.html" translate="no">Child</a></p>
+</td></tr></table></div><ul>
+<li><a href="qml-qdoc-test-abstractparent-members.html">List of all members, including inherited members</a></li>
+</ul>
+<h2 id="properties">Properties</h2>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-abstractparent.html#children-prop" translate="no">children</a></b> : list&lt;Child&gt;</li>
+</ul>
+<h2 id="methods">Methods</h2>
+<ul>
+<li class="fn" translate="no">void <b><a href="qml-qdoc-test-abstractparent.html#rear-method" translate="no">rear</a></b>(Child <i>child</i>)</li>
+</ul>
+<!-- $$$AbstractParent-description -->
+<h2 id="details">Detailed Description</h2>
+<p>Test include file that is part of the sourcedirs.</p>
+<!-- @@@AbstractParent -->
+<h2>Property Documentation</h2>
+<!-- $$$children -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="children-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">children</span> : <span class="type">list</span>&lt;<span class="type"><a href="qml-qdoc-test-child.html" translate="no">Child</a></span>&gt; <code class="details extra" translate="no">[default]</code></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Children of the type.</p>
+<p>Test include file that is part of the sourcedirs.</p>
+</div></div><!-- @@@children -->
+<br/>
+<h2>Method Documentation</h2>
+<!-- $$$rear[overload1]$$$rearChild -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="rear-method">
+<td class="tblQmlFuncNode"><p>
+<span class="type">void</span> <span class="name">rear</span>(<span class="type"><a href="qml-qdoc-test-child.html" translate="no">Child</a></span> <i>child</i>)</p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Do some abstract parenting on <i translate="no">child</i>.</p>
+<p>Test include file that is part of the sourcedirs.</p>
+</div></div><!-- @@@rear -->
+<br/>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/index-linking.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/index-linking.html
new file mode 100644
index 000000000..694a3f061
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/index-linking.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- linking.qdoc -->
+ <title>Linking | IndexLinking</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#qml-properties">QML properties</a></li>
+<li class="level1"><a href="#auto-linking-to-types-in-code-snippets">Auto-linking to types in code snippets</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Linking</h1>
+<!-- $$$index-linking.html-description -->
+<div class="descr" id="details">
+<h2 id="qml-properties">QML properties</h2>
+<ol class="A" type="A"><li>Property group: <a href="https://doc.qt.io/QmlPropertyGroups/qml-qdoc-test-parent.html#group-prop" translate="no">Parent::group</a>.</li>
+<li>Property in a group: <a href="https://doc.qt.io/QmlPropertyGroups/qml-qdoc-test-parent.html#group.c-prop" translate="no">QDoc.Test::Parent::group.c</a>.</li>
+</ol>
+<h2 id="auto-linking-to-types-in-code-snippets">Auto-linking to types in code snippets</h2>
+<pre class="qml" translate="no">import QtQuick
+
+<span class="type"><a href="https://doc.qt.io/QmlPropertyGroups/qml-uicomponents-progressbar.html" translate="no">ProgressBar</a></span> {
+ <span class="comment">// Linking to int value type</span>
+ property <span class="type"><a href="https://doc.qt.io/QmlPropertyGroups/qml-int.html" translate="no">int</a></span> <span class="name">progress</span>: <span class="number">0</span>
+}</pre>
+<pre class="cpp" translate="no"><span class="comment">// 'int' should not link anywhere in C++ code</span>
+<span class="type">int</span> main() { <span class="type">int</span> x{<span class="number">0</span>}; <span class="keyword">return</span> x; }</pre>
+</div>
+<!-- @@@index-linking.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist-docbook/qdoc-test-qmlmodule.xml b/src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist-docbook/qdoc-test-qmlmodule.xml
new file mode 100644
index 000000000..73a5f9653
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist-docbook/qdoc-test-qmlmodule.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>QDoc.Test QML Module</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>QML Types for the Test module.</db:para>
+<db:para><db:emphasis role="bold">This module is under development and is subject to change.</db:emphasis></db:para>
+<db:para>This module was introduced in Qt 1.1.</db:para>
+</db:abstract>
+</db:info>
+<db:para><db:emphasis role="bold">This module is under development and is subject to change.</db:emphasis></db:para>
+<db:para>This module was introduced in Qt 1.1.</db:para>
+<db:anchor xml:id="details"/>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist-docbook/test-componentset-example.xml b/src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist-docbook/test-componentset-example.xml
new file mode 100644
index 000000000..609b7cec9
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist-docbook/test-componentset-example.xml
@@ -0,0 +1,37 @@
+<?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>QML Documentation Example</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>Example for documenting QML types.</db:para>
+</db:abstract>
+</db:info>
+<db:para>This example demonstrates one of the ways to document QML types. It also generates a warning about a missing example image, on purpose.</db:para>
+<db:para>In particular, there are sample types that are documented with QDoc commands comments. There are documentation comments for the QML types and their public interfaces. The types are grouped into a module, the <db:link xlink:href="uicomponents-qmlmodule.xml">UI Components</db:link> module.</db:para>
+<db:para>The uicomponents.qdoc file generates the overview page for the <db:link xlink:href="uicomponents-qmlmodule.xml">UI Components</db:link> module page.</db:para>
+<db:para>The generated documentation is available in the <db:link xlink:href="uicomponents-qmlmodule.xml">UI Components</db:link> module.</db:para>
+<db:section xml:id="qml-class">
+<db:title>QML Class</db:title>
+<db:para>The QML types use the \qmltype to document the type. In addition, they have the \inmodule command in order for QDoc to associate them to the <db:code>UIComponents</db:code> module.</db:para>
+<db:para>QDoc uses the \brief command to place a basic description when listing the types.</db:para>
+</db:section>
+<db:section xml:id="properties-signals-handlers-and-methods">
+<db:title>Properties, Signals, Handlers, and Methods</db:title>
+<db:para>The types have their properties, signals, handlers, and methods defined in their respective QML files. QDoc associates the properties and methods to the types, therefore, you only need to place the documentation above the property, method, or signal.</db:para>
+<db:para>To document the type of a <db:emphasis>property alias</db:emphasis>, you must use the \qmlproperty command to specify the data type.</db:para>
+<db:programlisting language="cpp">\qmlproperty int anAliasedProperty
+An aliased property of type int.
+</db:programlisting>
+<db:section xml:id="internal-documentation">
+<db:title>Internal Documentation</db:title>
+<db:para>You may declare that a documentation is for internal use by placing the \internal command after the beginning QDoc comment <db:code>/*</db:code>. QDoc will prevent the internal documentation from appearing in the public API.</db:para>
+<db:para>If you wish to omit certain parts of the documentation, you may use the \omit and \endomit command.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="qml-types-with-c-implementation">
+<db:title>QML Types with C++ Implementation</db:title>
+<db:para>This example only demonstrates the documentation for types in QML files, but the regular QML commands may be placed inside C++ classes to define the public API of the QML type.</db:para>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist-docbook/testcpp-module.xml b/src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist-docbook/testcpp-module.xml
new file mode 100644
index 000000000..3217c0d94
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist-docbook/testcpp-module.xml
@@ -0,0 +1,49 @@
+<?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>QDoc Test C++ Classes</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A test module page.</db:para>
+<db:para>This module was introduced in Qt 2.0.</db:para>
+</db:abstract>
+</db:info>
+<db:para>A test module page.</db:para>
+<db:para>This module was introduced in Qt 2.0.</db:para>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:note>
+<db:para>This is just a test. /* Look, Ma! {I'm made of arguments!} */</db:para>
+</db:note>
+<db:section xml:id="linking-to-function-like-things">
+<db:title>Linking to function-like things</db:title>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml#someFunctionDefaultArg">someFunctionDefaultArg</db:link>()</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml#QDOCTEST_MACRO2">QDOCTEST_MACRO2</db:link>()</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml#QDOCTEST_MACRO2">QDOCTEST_MACRO2</db:link>(int &amp;x)</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="testcpp-module.xml#section">section()</db:link></db:para>
+</db:listitem>
+<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>
+</db:section>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist/qdoc-test-qmlmodule.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist/qdoc-test-qmlmodule.html
new file mode 100644
index 000000000..23c56acef
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist/qdoc-test-qmlmodule.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- type.cpp -->
+ <meta name="description" content="QML Types for the Test module.">
+ <title>QDoc.Test QML Module | Test</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">QDoc.Test QML Module</h1>
+<p><b>This module is under development and is subject to change.</b></p>
+<p>This module was introduced in Qt 1.1.</p>
+<!-- $$$QDoc.Test-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@QDoc.Test -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist/test-componentset-example.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist/test-componentset-example.html
new file mode 100644
index 000000000..a6d63699b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist/test-componentset-example.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- examples.qdoc -->
+ <meta name="description" content="Example for documenting QML types.">
+ <title>QML Documentation Example | Test</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#qml-class">QML Class</a></li>
+<li class="level1"><a href="#properties-signals-handlers-and-methods">Properties, Signals, Handlers, and Methods</a></li>
+<li class="level2"><a href="#internal-documentation">Internal Documentation</a></li>
+<li class="level1"><a href="#qml-types-with-c-implementation">QML Types with C++ Implementation</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">QML Documentation Example</h1>
+<!-- $$$componentset-brief -->
+<p>Example for documenting QML types.</p>
+<!-- @@@componentset -->
+<!-- $$$componentset-description -->
+<div class="descr" id="details">
+<p>This example demonstrates one of the ways to document QML types. It also generates a warning about a missing example image, on purpose.</p>
+<p>In particular, there are sample types that are documented with QDoc commands comments. There are documentation comments for the QML types and their public interfaces. The types are grouped into a module, the <a href="uicomponents-qmlmodule.html" translate="no">UI Components</a> module.</p>
+<p>The uicomponents.qdoc file generates the overview page for the <a href="uicomponents-qmlmodule.html" translate="no">UI Components</a> module page.</p>
+<p>The generated documentation is available in the <a href="uicomponents-qmlmodule.html" translate="no">UI Components</a> module.</p>
+<h4 id="qml-class">QML Class</h4>
+<p>The QML types use the \qmltype to document the type. In addition, they have the \inmodule command in order for QDoc to associate them to the <code translate="no">UIComponents</code> module.</p>
+<p>QDoc uses the \brief command to place a basic description when listing the types.</p>
+<h4 id="properties-signals-handlers-and-methods">Properties, Signals, Handlers, and Methods</h4>
+<p>The types have their properties, signals, handlers, and methods defined in their respective QML files. QDoc associates the properties and methods to the types, therefore, you only need to place the documentation above the property, method, or signal.</p>
+<p>To document the type of a <i>property alias</i>, you must use the \qmlproperty command to specify the data type.</p>
+<pre class="cpp" translate="no">\qmlproperty <span class="type">int</span> anAliasedProperty
+An aliased property of type <span class="type">int</span><span class="operator">.</span></pre>
+<h5 id="internal-documentation">Internal Documentation</h5>
+<p>You may declare that a documentation is for internal use by placing the \internal command after the beginning QDoc comment <code translate="no">/*</code>. QDoc will prevent the internal documentation from appearing in the public API.</p>
+<p>If you wish to omit certain parts of the documentation, you may use the \omit and \endomit command.</p>
+<h4 id="qml-types-with-c-implementation">QML Types with C++ Implementation</h4>
+<p>This example only demonstrates the documentation for types in QML files, but the regular QML commands may be placed inside C++ classes to define the public API of the QML type.</p>
+</div>
+<!-- @@@componentset -->
+</body>
+</html>
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
new file mode 100644
index 000000000..f413175b0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist/testcpp-module.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A test module page.">
+ <title>QDoc Test C++ Classes | Test</title>
+</head>
+<body>
+<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="#linking-to-function-like-things">Linking to function-like things</a></li>
+<li class="level3"><a href="#section">section()</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">QDoc Test C++ Classes</h1>
+<!-- $$$TestCPP-brief -->
+<p>A test module page. <a href="#details">More...</a></p>
+<!-- @@@TestCPP -->
+<p>This module was introduced in Qt 2.0.</p>
+<!-- $$$TestCPP-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<div class="admonition note">
+<p><b>Note: </b>This is just a test. /* Look, Ma! {I'm made of arguments!} */</p>
+</div>
+<h3 id="linking-to-function-like-things">Linking to function-like things</h3>
+<ul>
+<li><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a>()</li>
+<li><a href="testqdoc-test.html#QDOCTEST_MACRO2" translate="no">QDOCTEST_MACRO2</a>()</li>
+<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>
+<!-- @@@TestCPP -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/obsolete-classes.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/obsolete-classes.html
new file mode 100644
index 000000000..01198c82d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/obsolete-classes.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classlists.qdoc -->
+ <title>Obsolete Classes | TestCPP</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#classes-with-obsolete-members">Classes with obsolete members</a></li>
+<li class="level2"><a href="#testqdoc">TestQDoc</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Obsolete Classes</h1>
+<!-- $$$obsolete-classes.html-description -->
+<div class="descr" id="details">
+<h2 id="classes-with-obsolete-members">Classes with obsolete members</h2>
+<div class="flowListDiv" translate="no">
+<dl class="flowList odd"><dt class="alphaChar"><b>T</b></dt>
+<dd><a href="testqdoc-test-obsolete.html">Test</a> (<a href="testqdoc.html">TestQDoc</a>)</dd>
+<dd><a href="testqdoc-testderived-obsolete.html">TestDerived</a> (<a href="testqdoc.html">TestQDoc</a>)</dd>
+</dl>
+</div>
+<h3 id="testqdoc">TestQDoc</h3>
+</div>
+<!-- @@@obsolete-classes.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/qml-linkmodule-grandchild-members.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/qml-linkmodule-grandchild-members.html
new file mode 100644
index 000000000..7bec0458b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/qml-linkmodule-grandchild-members.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- linking.qdoc -->
+ <title>List of All Members for GrandChild | IndexLinking</title>
+</head>
+<body>
+<li><a href="linkmodule-qmlmodule.html" translate="no">LinkModule</a></li>
+<li>GrandChild</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for GrandChild</h1>
+<p>This is the complete list of members for <a href="qml-linkmodule-grandchild.html">GrandChild</a>, including inherited members.</p>
+<p>The following members are inherited from <a href="https://doc.qt.io/QmlPropertyGroups/qml-qdoc-test-anotherchild.html">AnotherChild</a>.</p>
+<ul>
+<li class="fn" translate="no"><b><a href="https://doc.qt.io/QmlPropertyGroups/qml-qdoc-test-anotherchild.html#name-prop" translate="no">name</a></b> : string</li>
+</ul>
+<p>The following members are inherited from <a href="https://doc.qt.io/QmlPropertyGroups/qml-qdoc-test-parent.html">Parent</a>.</p>
+<ul>
+<li class="fn" translate="no"><b><a href="https://doc.qt.io/QmlPropertyGroups/qml-qdoc-test-parent.html#group-prop" translate="no">group</a></b> : </li>
+<li class="fn" translate="no"><b><a href="https://doc.qt.io/QmlPropertyGroups/qml-qdoc-test-parent.html#group.a-prop" translate="no">group.a</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="https://doc.qt.io/QmlPropertyGroups/qml-qdoc-test-parent.html#group.b-prop" translate="no">group.b</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="https://doc.qt.io/QmlPropertyGroups/qml-qdoc-test-parent.html#group.c-prop" translate="no">group.c</a></b> : int <code class="summary extra" translate="no">(since 2.0)</code></li>
+</ul>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/qmlpropertygroups-docbook/qml-qdoc-test-parent.xml b/src/qdoc/qdoc/tests/generatedoutput/expected_output/qmlpropertygroups-docbook/qml-qdoc-test-parent.xml
new file mode 100644
index 000000000..e223892b1
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/qmlpropertygroups-docbook/qml-qdoc-test-parent.xml
@@ -0,0 +1,45 @@
+<?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>Parent QML Type</db:title>
+<db:productname>QmlPropertyGroups</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>Base QML type.</db:para>
+<db:para>This type was introduced in Qt 1.1.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Import Statement</db:term>
+<db:listitem>
+<db:para>import QDoc.Test 1.1</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since:</db:term>
+<db:listitem>
+<db:para>Qt 1.1</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Inherited By:</db:term>
+<db:listitem>
+<db:para><db:link xlink:href="qml-qdoc-test-anotherchild.xml" xlink:role="">AnotherChild</db:link></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="property-documentation">
+<db:title>Property Documentation</db:title>
+<db:section xml:id="group-prop">
+<db:title>group group</db:title>
+<db:bridgehead renderas="sect2" xml:id="group.a-prop">group.a : int</db:bridgehead>
+<db:bridgehead renderas="sect2" xml:id="group.b-prop">[read-only] group.b : int</db:bridgehead>
+<db:bridgehead renderas="sect2" xml:id="group.c-prop">[since 2.0] group.c : int</db:bridgehead>
+<db:para>Property group.</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-anotherchild-members.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-anotherchild-members.html
new file mode 100644
index 000000000..a52f5e194
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-anotherchild-members.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- parent.qdoc -->
+ <meta name="description" content="Just another child inheriting a parent.">
+ <title>List of All Members for AnotherChild | QmlPropertyGroups</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li>AnotherChild</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for AnotherChild</h1>
+<p>This is the complete list of members for <a href="qml-qdoc-test-anotherchild.html">AnotherChild</a>, including inherited members.</p>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-anotherchild.html#name-prop" translate="no">name</a></b> : string</li>
+</ul>
+<p>The following members are inherited from <a href="qml-qdoc-test-parent.html">Parent</a>.</p>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-parent.html#group-prop" translate="no">group</a></b><ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-parent.html#group.a-prop" translate="no">group.a</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-parent.html#group.b-prop" translate="no">group.b</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-parent.html#group.c-prop" translate="no">group.c</a></b> : int <code class="summary extra" translate="no">(since 2.0)</code></li>
+</ul>
+</li>
+</ul>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-parent.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-parent.html
new file mode 100644
index 000000000..200dd572a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-parent.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- parent.qdoc -->
+ <meta name="description" content="Base QML type.">
+ <title>Parent QML Type | QmlPropertyGroups</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li>Parent</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#properties">Properties</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">Parent QML Type</h1>
+<!-- $$$Parent-brief -->
+<p>Base QML type. <a href="#details">More...</a></p>
+<!-- @@@Parent -->
+<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"> Inherited By:</td><td class="memItemRight bottomAlign"> <p><a href="qml-qdoc-test-anotherchild.html" translate="no">AnotherChild</a></p>
+</td></tr></table></div><ul>
+<li><a href="qml-qdoc-test-parent-members.html">List of all members, including inherited members</a></li>
+</ul>
+<h2 id="properties">Properties</h2>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-parent.html#group-prop" translate="no">group</a></b><ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-parent.html#group.a-prop" translate="no">group.a</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-parent.html#group.b-prop" translate="no">group.b</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-parent.html#group.c-prop" translate="no">group.c</a></b> : int <code class="summary extra" translate="no">(since 2.0)</code></li>
+</ul>
+</li>
+</ul>
+<!-- $$$Parent-description -->
+<h2 id="details">Detailed Description</h2>
+<!-- @@@Parent -->
+<h2>Property Documentation</h2>
+<!-- $$$group -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="even" id="group-prop"><th class="centerAlign"><p><b>group group</b></p></th></tr>
+<tr valign="top" class="odd" id="group.a-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">group.a</span> : <span class="type"><a href="qml-int.html" translate="no">int</a></span></p></td></tr>
+<tr valign="top" class="odd" id="group.b-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">group.b</span> : <span class="type"><a href="qml-int.html" translate="no">int</a></span> <code class="details extra" translate="no">[read-only]</code></p></td></tr>
+<tr valign="top" class="odd" id="group.c-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">group.c</span> : <span class="type"><a href="qml-int.html" translate="no">int</a></span> <code class="details extra" translate="no">[since 2.0]</code></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Property group.</p>
+</div></div><!-- @@@group -->
+<br/>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp-module.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp-module.html
new file mode 100644
index 000000000..826926d59
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp-module.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A test module page.">
+ <title>QDoc Test C++ Classes | TestCPP</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>
+<li class="level2"><a href="#linking-to-function-like-things">Linking to function-like things</a></li>
+<li class="level3"><a href="#section">section()</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">QDoc Test C++ Classes</h1>
+<!-- $$$TestCPP-brief -->
+<p>A test module page. <a href="#details">More...</a></p>
+<!-- @@@TestCPP -->
+<p>This module was introduced in Qt 2.0.</p>
+<h2 id="namespaces">Namespaces</h2>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="crossmoduleref.html">CrossModuleRef</a></p></td><td class="tblDescr"><p>Namespace that has documented functions in multiple modules</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="testqdoc.html">TestQDoc</a></p></td><td class="tblDescr"><p>A namespace</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="testqdoc-test.html">TestQDoc::Test</a></p></td><td class="tblDescr"><p>A class in a namespace</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></p></td><td class="tblDescr"><p>A class in a namespace, derived from Test</p></td></tr>
+</table></div>
+<!-- $$$TestCPP-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<div class="admonition note">
+<p><b>Note: </b>This is just a test. /* Look, Ma! {I'm made of arguments!} */</p>
+</div>
+<h3 id="linking-to-function-like-things">Linking to function-like things</h3>
+<ul>
+<li><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a>()</li>
+<li><a href="testqdoc-test.html#QDOCTEST_MACRO2" translate="no">QDOCTEST_MACRO2</a>()</li>
+<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>
+<!-- @@@TestCPP -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp.index b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp.index
new file mode 100644
index 000000000..9dcb763a8
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp.index
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="TestCPP Reference Documentation" version="" project="TestCPP">
+ <namespace name="" status="active" access="public" module="testcpp">
+ <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="0" meta="macrowithoutparams" signature="QDOCTEST_MACRO"/>
+ <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>
+ <page name="autolinking.html" href="autolinking.html" status="active" location="classlists.qdoc" documented="true" subtype="page" title="Autolinking" fulltitle="Autolinking" subtitle="">
+ <contents name="testqdoc" title="TestQDoc" level="1"/>
+ <contents name="someprop" title="someProp" level="1"/>
+ </page>
+ <namespace name="CrossModuleRef" href="crossmoduleref.html" status="active" access="public" location="testcpp.h" since="3.0" documented="true" module="TestCPP" brief="Namespace that has documented functions in multiple modules">
+ <function name="documentMe" fullname="CrossModuleRef::documentMe" href="crossmoduleref.html#documentMe" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void documentMe()"/>
+ </namespace>
+ <class name="DontLinkToMe" href="dontlinktome.html" status="ignored" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="Class that does not generate documentation"/>
+ <page name="obsolete-classes.html" href="obsolete-classes.html" status="active" location="classlists.qdoc" documented="true" subtype="page" title="Obsolete Classes" fulltitle="Obsolete Classes" subtitle="">
+ <contents name="classes-with-obsolete-members" title="Classes with obsolete members" level="1"/>
+ <contents name="testqdoc" title="TestQDoc" level="2"/>
+ </page>
+ <namespace name="TestQDoc" href="testqdoc.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="A namespace">
+ <contents name="usage" title="Usage" level="1"/>
+ <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="0" meta="macrowithoutparams" signature="QDOCTEST_MACRO"/>
+ <class threadsafety="reentrant" name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" groups="cpptypes,testgroup" module="TestCPP" brief="A class in a namespace">
+ <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)">
+ <parameter type="bool" name="b" default=""/>
+ <parameter type="const char *" name="s" default=""/>
+ </function>
+ <function name="inlineFunction" fullname="TestQDoc::Test::inlineFunction" href="testqdoc-test.html#inlineFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" brief="An inline function, documented using the \fn QDoc command" signature="void inlineFunction()"/>
+ <function name="methodWithEmDashInItsDocs" fullname="TestQDoc::Test::methodWithEmDashInItsDocs" href="testqdoc-test.html#methodWithEmDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEmDashInItsDocs()"/>
+ <function name="methodWithEnDashInItsDocs" fullname="TestQDoc::Test::methodWithEnDashInItsDocs" href="testqdoc-test.html#methodWithEnDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEnDashInItsDocs()"/>
+ <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=""/>
+ </function>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload" status="active" access="protected" location="testcpp.h" documented="true" meta="plain" type="void" signature="void overload()"/>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload-1" status="active" access="protected" location="testcpp.h" documented="true" since="Test 1.2" meta="plain" overload="true" overload-number="1" type="void" signature="void overload(bool b)">
+ <parameter type="bool" name="b" default=""/>
+ </function>
+ <function name="someFunction" fullname="TestQDoc::Test::someFunction" href="testqdoc-test.html#someFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="int" signature="int someFunction(int, int v)">
+ <parameter type="int" name="" default=""/>
+ <parameter type="int" name="v" default="0"/>
+ </function>
+ <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" threadsafety="non-reentrant" status="active" access="public" location="testcpp.h" documented="true" meta="plain" const="true" type="void" signature="void someFunctionDefaultArg(int i, bool b) const" groups="testgroup">
+ <parameter type="int" name="i" default=""/>
+ <parameter type="bool" name="b" default="false"/>
+ </function>
+ <function name="virtualFun" fullname="TestQDoc::Test::virtualFun" href="testqdoc-test.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" type="void" signature="void virtualFun()"/>
+ <typedef name="SomeType" fullname="TestQDoc::Test::SomeType" href="testqdoc-test.html#SomeType-typedef" status="active" access="public" location="testcpp.h" documented="true"/>
+ </class>
+ <class name="TestDerived" fullname="TestQDoc::TestDerived" href="testqdoc-testderived.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" bases="TestQDoc::Test" module="TestCPP" brief="A class in a namespace, derived from Test">
+ <function name="someValue" fullname="TestQDoc::TestDerived::someValue" href="testqdoc-testderived.html#someValue" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::TestDerived::NotTypedef" signature="TestQDoc::TestDerived::NotTypedef someValue()"/>
+ <function name="staticObsoleteMember" fullname="TestQDoc::TestDerived::staticObsoleteMember" href="testqdoc-testderived-obsolete.html#staticObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" static="true" type="void" signature="void staticObsoleteMember()"/>
+ <function name="virtualFun" fullname="TestQDoc::TestDerived::virtualFun" href="testqdoc-testderived.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" override="true" type="void" signature="void virtualFun() override"/>
+ <typedef name="DerivedType" fullname="TestQDoc::TestDerived::DerivedType" href="testqdoc-testderived.html#DerivedType-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="Test::SomeType"/>
+ <typedef name="NotTypedef" fullname="TestQDoc::TestDerived::NotTypedef" href="testqdoc-testderived.html#NotTypedef-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="int"/>
+ </class>
+ </namespace>
+ <page name="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" status="active" location="classlists.qdoc" documented="true" subtype="externalpage" title="reentrant" fulltitle="reentrant" subtitle=""/>
+ <group name="cpptypes" href="cpptypes.html" status="active" location="classlists.qdoc" documented="true" seen="true" title="Test C++ Types"/>
+ <group name="testgroup" href="testgroup.html" status="internal" seen="false" title=""/>
+ <module name="TestCPP" href="testcpp-module.html" status="active" since="2.0" documented="true" seen="true" title="QDoc Test C++ Classes" brief="A test module page">
+ <contents name="linking-to-function-like-things" title="Linking to function-like things" level="1"/>
+ <contents name="section" title="section()" level="2"/>
+ </module>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/crossmoduleref.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/crossmoduleref.html
new file mode 100644
index 000000000..2d073e237
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/crossmoduleref.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="Namespace that has documented functions in multiple modules.">
+ <title>CrossModuleRef Namespace | TestCPP</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#functions">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">CrossModuleRef Namespace</h1>
+<!-- $$$CrossModuleRef-brief -->
+<p>Namespace that has documented functions in multiple modules. <a href="#details">More...</a></p>
+<!-- @@@CrossModuleRef -->
+<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;CrossModuleRef&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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 3.0</td></tr>
+</table></div>
+<h2 id="functions">Functions</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="crossmoduleref.html#documentMe" translate="no">documentMe</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="crossmoduleref-sub-crossmodule.html#documentMeToo" translate="no">documentMeToo</a></b>()</td></tr>
+</table></div>
+<!-- $$$CrossModuleRef-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@CrossModuleRef -->
+<div class="func">
+<h2>Function Documentation</h2>
+<!-- $$$documentMe[overload1]$$$documentMe -->
+<h3 class="fn" translate="no" id="documentMe"><span class="type">void</span> CrossModuleRef::<span class="name">documentMe</span>()</h3>
+<p>Document me!</p>
+<!-- @@@documentMe -->
+</div>
+</body>
+</html>
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
new file mode 100644
index 000000000..826926d59
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testcpp-module.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A test module page.">
+ <title>QDoc Test C++ Classes | TestCPP</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>
+<li class="level2"><a href="#linking-to-function-like-things">Linking to function-like things</a></li>
+<li class="level3"><a href="#section">section()</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">QDoc Test C++ Classes</h1>
+<!-- $$$TestCPP-brief -->
+<p>A test module page. <a href="#details">More...</a></p>
+<!-- @@@TestCPP -->
+<p>This module was introduced in Qt 2.0.</p>
+<h2 id="namespaces">Namespaces</h2>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="crossmoduleref.html">CrossModuleRef</a></p></td><td class="tblDescr"><p>Namespace that has documented functions in multiple modules</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="testqdoc.html">TestQDoc</a></p></td><td class="tblDescr"><p>A namespace</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="testqdoc-test.html">TestQDoc::Test</a></p></td><td class="tblDescr"><p>A class in a namespace</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></p></td><td class="tblDescr"><p>A class in a namespace, derived from Test</p></td></tr>
+</table></div>
+<!-- $$$TestCPP-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<div class="admonition note">
+<p><b>Note: </b>This is just a test. /* Look, Ma! {I'm made of arguments!} */</p>
+</div>
+<h3 id="linking-to-function-like-things">Linking to function-like things</h3>
+<ul>
+<li><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a>()</li>
+<li><a href="testqdoc-test.html#QDOCTEST_MACRO2" translate="no">QDOCTEST_MACRO2</a>()</li>
+<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>
+<!-- @@@TestCPP -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testqdoc-test-members.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testqdoc-test-members.html
new file mode 100644
index 000000000..6749f2332
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testqdoc-test-members.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace.">
+ <title>List of All Members for Test | TestCPP</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>Test</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for Test</h1>
+<p>This is the complete list of members for <a href="testqdoc-test.html">TestQDoc::Test</a>, including inherited members.</p>
+<ul>
+<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>
+<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>
+<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/generatedoutput/expected_output/testcpp/testqdoc-test.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testqdoc-test.html
new file mode 100644
index 000000000..7a0e875f4
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testqdoc-test.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace.">
+ <title>Test Class | TestCPP</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>Test</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#public-types">Public Types</a></li>
+<li class="level1"><a href="#public-functions">Public Functions</a></li>
+<li class="level1"><a href="#protected-functions">Protected Functions</a></li>
+<li class="level1"><a href="#related-non-members">Related Non-Members</a></li>
+<li class="level1"><a href="#macros">Macros</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">Test Class</h1>
+<span class="small-subtitle" translate="no">class <a href="testqdoc.html" translate="no">TestQDoc</a>::Test</span>
+<!-- $$$Test-brief -->
+<p>A class in a namespace. <a href="#details">More...</a></p>
+<!-- @@@Test -->
+<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;Test&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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"> Inherited By:</td><td class="memItemRight bottomAlign"> <p><a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></p>
+</td></tr>
+</table></div>
+<ul>
+<li><a href="testqdoc-test-members.html">List of all members, including inherited members</a></li>
+<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>
+<ul>
+<li><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a>(int i, bool b) const</li>
+</ul>
+<h2 id="public-types">Public Types</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#SomeType-typedef" translate="no">SomeType</a></b></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>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#methodWithEnDashInItsDocs" translate="no">methodWithEnDashInItsDocs</a></b>()</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">
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#overload" translate="no">overload</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since Test 1.2)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#overload-1" translate="no">overload</a></b>(bool <i>b</i>)</td></tr>
+</table></div>
+<h2 id="related-non-members">Related Non-Members</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> bool </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#operator-eq-eq" translate="no">operator==</a></b>(const TestQDoc::Test &amp;<i>lhs</i>, const TestQDoc::Test &amp;<i>rhs</i>)</td></tr>
+</table></div>
+<h2 id="macros">Macros</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since Test 1.1)</code> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#QDOCTEST_MACRO2" translate="no">QDOCTEST_MACRO2</a></b>(int &amp;<i>x</i>)</td></tr>
+</table></div>
+<!-- $$$Test-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Test -->
+<div class="types">
+<h2>Member Type Documentation</h2>
+<!-- $$$SomeType -->
+<h3 class="fn" translate="no" id="SomeType-typedef">Test::<span class="name">SomeType</span></h3>
+<p>A typedef.</p>
+<!-- @@@SomeType -->
+</div>
+<div class="func">
+<h2>Member Function Documentation</h2>
+<!-- $$$ -->
+<div class="fngroup">
+<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>
+<!-- @@@funcPtr -->
+<!-- $$$inlineFunction[overload1]$$$inlineFunction -->
+<h3 class="fn" translate="no" id="inlineFunction"><span class="type">void</span> Test::<span class="name">inlineFunction</span>()</h3>
+<p>An inline function, documented using the \fn QDoc command.</p>
+<!-- @@@inlineFunction -->
+<!-- $$$methodWithEmDashInItsDocs[overload1]$$$methodWithEmDashInItsDocs -->
+<h3 class="fn" translate="no" id="methodWithEmDashInItsDocs"><span class="type">void</span> Test::<span class="name">methodWithEmDashInItsDocs</span>()</h3>
+<p>This method has em dashes in its documentation&mdash;as you'll find represented by <code translate="no">---</code> in the sources&mdash;here and there. The important bit to note is that when passed e.g. to the \c command, the three hyphens are processed as input to the command and not replaced by an em dash.</p>
+<p>-----------------------------------------------------------------------</p>
+<p>People can still add a bunch of dashes, though, without QDoc replacing them all with a series of em dashes.</p>
+<p>&mdash;You can also start a new paragraph with an em dash, if you want to.</p>
+<p><b>See also </b><a href="testqdoc-test.html#methodWithEnDashInItsDocs" translate="no">methodWithEnDashInItsDocs</a>.</p>
+<!-- @@@methodWithEmDashInItsDocs -->
+<!-- $$$methodWithEnDashInItsDocs[overload1]$$$methodWithEnDashInItsDocs -->
+<h3 class="fn" translate="no" id="methodWithEnDashInItsDocs"><span class="type">void</span> Test::<span class="name">methodWithEnDashInItsDocs</span>()</h3>
+<p>This method has en dashes in its documentation &ndash; as you'll find represented by <code translate="no">--</code> in the sources &ndash; here and there. The important bit to note is that when passed e.g. to the \c command, the two hyphens are processed as input to the command and not replaced by an en dash. This also applies to code blocks, where otherwise, the decrement operator would get completely borked:</p>
+<pre class="cpp" translate="no"><span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">42</span>; i <span class="operator">&gt;</span> <span class="number">0</span>; <span class="operator">-</span><span class="operator">-</span>i)
+ <span class="comment">// Do something cool during countdown.</span></pre>
+<p>...as it would be silly if this would output &ndash;i instead of <code translate="no">--i</code>.</p>
+<p>-----------------------------------------------------------------------</p>
+<p>It still allows people to add a bunch of dashes, though, without replacing them all with a series of en dashes. Of course, they might want to use the \hr command instead, like this:</p>
+<hr />
+<p>&ndash; You can also start a new paragraph with an en dash, if you want to.</p>
+<p><b>See also </b>methodWithEnDashInItsDocs.</p>
+<!-- @@@methodWithEnDashInItsDocs -->
+<!-- $$$someFunction[overload1]$$$someFunctionintint -->
+<h3 class="fn" translate="no" id="someFunction"><span class="type">int</span> Test::<span class="name">someFunction</span>(<span class="type">int</span>, <span class="type">int</span> <i>v</i> = 0)</h3>
+<p>Function that takes a parameter <i translate="no">v</i>. Also returns the value of <i translate="no">v</i>.</p>
+<!-- @@@someFunction -->
+<!-- $$$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>
+<!-- @@@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>
+<!-- $$$operator==[overload1]$$$operator==constTestQDoc::Test&constTestQDoc::Test& -->
+<h3 class="fn" translate="no" id="operator-eq-eq"><span class="type">bool</span> <span class="name">operator==</span>(const <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;<i>lhs</i>, const <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;<i>rhs</i>)</h3>
+<p>Returns true if <i translate="no">lhs</i> and <i translate="no">rhs</i> are equal.</p>
+<!-- @@@operator== -->
+</div>
+<div class="macros">
+<h2>Macro Documentation</h2>
+<!-- $$$QDOCTEST_MACRO2[overload1]$$$QDOCTEST_MACRO2int& -->
+<h3 class="fn" translate="no" id="QDOCTEST_MACRO2"><code class="details extra" translate="no">[since Test 1.1]</code> <span class="name">QDOCTEST_MACRO2</span>(<span class="type">int</span> &amp;<i>x</i>)</h3>
+<p>A macro with argument <i translate="no">x</i>.</p>
+<p>This macro was introduced in Test 1.1.</p>
+<!-- @@@QDOCTEST_MACRO2 -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testqdoc.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testqdoc.html
new file mode 100644
index 000000000..425c7b396
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testqdoc.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A namespace.">
+ <title>TestQDoc Namespace | TestCPP</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="#macros">Macros</a></li>
+<li class="level1"><a href="#details">Detailed Description</a></li>
+<li class="level2"><a href="#usage">Usage</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">TestQDoc Namespace</h1>
+<!-- $$$TestQDoc-brief -->
+<p>A namespace. <a href="#details">More...</a></p>
+<!-- @@@TestQDoc -->
+<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;TestCPP&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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>
+</table></div>
+<h2 id="classes">Classes</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since 2.0)</code> class </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html" translate="no">Test</a></b></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since 2.0)</code> class </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html" translate="no">TestDerived</a></b></td></tr>
+</table></div>
+<h2 id="macros">Macros</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc.html#QDOCTEST_MACRO" translate="no">QDOCTEST_MACRO</a></b></td></tr>
+</table></div>
+<!-- $$$TestQDoc-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<h3 id="usage">Usage</h3>
+<p>This namespace is for testing QDoc output.</p>
+</div>
+<!-- @@@TestQDoc -->
+<div class="classes">
+<h2>Classes</h2>
+<h3> class <a href="testqdoc-test.html">Test</a></h3><!-- $$$Test-brief -->
+<p>A class in a namespace. <a href="testqdoc-test.html#details">More...</a></p>
+<!-- @@@Test -->
+<h3> class <a href="testqdoc-testderived.html">TestDerived</a></h3><!-- $$$TestDerived-brief -->
+<p>A class in a namespace, derived from <a href="testqdoc-test.html" translate="no">Test</a>. <a href="testqdoc-testderived.html#details">More...</a></p>
+<!-- @@@TestDerived -->
+</div>
+<div class="macros">
+<h2>Macro Documentation</h2>
+<!-- $$$QDOCTEST_MACRO[overload1]$$$QDOCTEST_MACRO -->
+<h3 class="fn" translate="no" id="QDOCTEST_MACRO"><span class="name">QDOCTEST_MACRO</span></h3>
+<!-- @@@QDOCTEST_MACRO -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-test-members.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-test-members.html
new file mode 100644
index 000000000..6749f2332
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-test-members.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace.">
+ <title>List of All Members for Test | TestCPP</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>Test</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for Test</h1>
+<p>This is the complete list of members for <a href="testqdoc-test.html">TestQDoc::Test</a>, including inherited members.</p>
+<ul>
+<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>
+<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>
+<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/generatedoutput/expected_output/testqdoc-test-obsolete.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-test-obsolete.html
new file mode 100644
index 000000000..2b5192da1
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-test-obsolete.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace.">
+ <title>Obsolete Members for Test | TestCPP</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>Test</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">Obsolete Members for Test</h1>
+<p><b>The following members of class <a href="testqdoc-test.html" translate="no">Test</a> are deprecated.</b> They are provided to keep old source code working. We strongly advise against using them in new code.</p>
+<h2>Public Functions</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#anotherObsoleteMember" translate="no">anotherObsoleteMember</a></b>()</td></tr>
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated in 6.0)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#deprecatedMember" translate="no">deprecatedMember</a></b>()</td></tr>
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#obsoleteMember" translate="no">obsoleteMember</a></b>()</td></tr>
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated)</code> TestQDoc::Test &amp;</td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#operator-2b-2b" translate="no">operator++</a></b>()</td></tr>
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated)</code> TestQDoc::Test &amp;</td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#operator--" translate="no">operator--</a></b>()</td></tr>
+</table></div>
+<h2>Member Function Documentation</h2>
+<!-- $$$ -->
+<div class="fngroup">
+<h3 class="fn fngroupitem" translate="no" id="operator-2b-2b"><code class="details extra" translate="no">[deprecated]</code> <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;Test::<span class="name">operator++</span>()</h3><h3 class="fn fngroupitem" translate="no" id="operator--"><code class="details extra" translate="no">[deprecated]</code> <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;Test::<span class="name">operator--</span>()</h3></div>
+<p>This function is deprecated. We strongly advise against using it in new code.</p>
+<!-- @@@ -->
+<!-- $$$anotherObsoleteMember[overload1]$$$anotherObsoleteMember -->
+<h3 class="fn" translate="no" id="anotherObsoleteMember"><code class="details extra" translate="no">[deprecated]</code> <span class="type">void</span> Test::<span class="name">anotherObsoleteMember</span>()</h3>
+<p>This function is deprecated. We strongly advise against using it in new code.</p>
+<p>Use <a href="testqdoc-test-obsolete.html#obsoleteMember" translate="no">obsoleteMember</a>() instead.</p>
+<!-- @@@anotherObsoleteMember -->
+<!-- $$$deprecatedMember[overload1]$$$deprecatedMember -->
+<h3 class="fn" translate="no" id="deprecatedMember"><code class="details extra" translate="no">[deprecated in 6.0]</code> <span class="type">void</span> Test::<span class="name">deprecatedMember</span>()</h3>
+<p>This function is deprecated since 6.0. We strongly advise against using it in new code.</p>
+<p>Use <a href="testqdoc-test.html#someFunction" translate="no">someFunction</a>() instead.</p>
+<!-- @@@deprecatedMember -->
+<!-- $$$obsoleteMember[overload1]$$$obsoleteMember -->
+<h3 class="fn" translate="no" id="obsoleteMember"><code class="details extra" translate="no">[deprecated]</code> <span class="type">void</span> Test::<span class="name">obsoleteMember</span>()</h3>
+<p>This function is deprecated. We strongly advise against using it in new code.</p>
+<p>Use <a href="testqdoc-test.html#someFunction" translate="no">someFunction</a>() instead.</p>
+<!-- @@@obsoleteMember -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-test.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-test.html
new file mode 100644
index 000000000..7a0e875f4
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-test.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace.">
+ <title>Test Class | TestCPP</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>Test</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#public-types">Public Types</a></li>
+<li class="level1"><a href="#public-functions">Public Functions</a></li>
+<li class="level1"><a href="#protected-functions">Protected Functions</a></li>
+<li class="level1"><a href="#related-non-members">Related Non-Members</a></li>
+<li class="level1"><a href="#macros">Macros</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">Test Class</h1>
+<span class="small-subtitle" translate="no">class <a href="testqdoc.html" translate="no">TestQDoc</a>::Test</span>
+<!-- $$$Test-brief -->
+<p>A class in a namespace. <a href="#details">More...</a></p>
+<!-- @@@Test -->
+<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;Test&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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"> Inherited By:</td><td class="memItemRight bottomAlign"> <p><a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></p>
+</td></tr>
+</table></div>
+<ul>
+<li><a href="testqdoc-test-members.html">List of all members, including inherited members</a></li>
+<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>
+<ul>
+<li><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a>(int i, bool b) const</li>
+</ul>
+<h2 id="public-types">Public Types</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#SomeType-typedef" translate="no">SomeType</a></b></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>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#methodWithEnDashInItsDocs" translate="no">methodWithEnDashInItsDocs</a></b>()</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">
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#overload" translate="no">overload</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since Test 1.2)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#overload-1" translate="no">overload</a></b>(bool <i>b</i>)</td></tr>
+</table></div>
+<h2 id="related-non-members">Related Non-Members</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> bool </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#operator-eq-eq" translate="no">operator==</a></b>(const TestQDoc::Test &amp;<i>lhs</i>, const TestQDoc::Test &amp;<i>rhs</i>)</td></tr>
+</table></div>
+<h2 id="macros">Macros</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since Test 1.1)</code> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#QDOCTEST_MACRO2" translate="no">QDOCTEST_MACRO2</a></b>(int &amp;<i>x</i>)</td></tr>
+</table></div>
+<!-- $$$Test-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Test -->
+<div class="types">
+<h2>Member Type Documentation</h2>
+<!-- $$$SomeType -->
+<h3 class="fn" translate="no" id="SomeType-typedef">Test::<span class="name">SomeType</span></h3>
+<p>A typedef.</p>
+<!-- @@@SomeType -->
+</div>
+<div class="func">
+<h2>Member Function Documentation</h2>
+<!-- $$$ -->
+<div class="fngroup">
+<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>
+<!-- @@@funcPtr -->
+<!-- $$$inlineFunction[overload1]$$$inlineFunction -->
+<h3 class="fn" translate="no" id="inlineFunction"><span class="type">void</span> Test::<span class="name">inlineFunction</span>()</h3>
+<p>An inline function, documented using the \fn QDoc command.</p>
+<!-- @@@inlineFunction -->
+<!-- $$$methodWithEmDashInItsDocs[overload1]$$$methodWithEmDashInItsDocs -->
+<h3 class="fn" translate="no" id="methodWithEmDashInItsDocs"><span class="type">void</span> Test::<span class="name">methodWithEmDashInItsDocs</span>()</h3>
+<p>This method has em dashes in its documentation&mdash;as you'll find represented by <code translate="no">---</code> in the sources&mdash;here and there. The important bit to note is that when passed e.g. to the \c command, the three hyphens are processed as input to the command and not replaced by an em dash.</p>
+<p>-----------------------------------------------------------------------</p>
+<p>People can still add a bunch of dashes, though, without QDoc replacing them all with a series of em dashes.</p>
+<p>&mdash;You can also start a new paragraph with an em dash, if you want to.</p>
+<p><b>See also </b><a href="testqdoc-test.html#methodWithEnDashInItsDocs" translate="no">methodWithEnDashInItsDocs</a>.</p>
+<!-- @@@methodWithEmDashInItsDocs -->
+<!-- $$$methodWithEnDashInItsDocs[overload1]$$$methodWithEnDashInItsDocs -->
+<h3 class="fn" translate="no" id="methodWithEnDashInItsDocs"><span class="type">void</span> Test::<span class="name">methodWithEnDashInItsDocs</span>()</h3>
+<p>This method has en dashes in its documentation &ndash; as you'll find represented by <code translate="no">--</code> in the sources &ndash; here and there. The important bit to note is that when passed e.g. to the \c command, the two hyphens are processed as input to the command and not replaced by an en dash. This also applies to code blocks, where otherwise, the decrement operator would get completely borked:</p>
+<pre class="cpp" translate="no"><span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">42</span>; i <span class="operator">&gt;</span> <span class="number">0</span>; <span class="operator">-</span><span class="operator">-</span>i)
+ <span class="comment">// Do something cool during countdown.</span></pre>
+<p>...as it would be silly if this would output &ndash;i instead of <code translate="no">--i</code>.</p>
+<p>-----------------------------------------------------------------------</p>
+<p>It still allows people to add a bunch of dashes, though, without replacing them all with a series of en dashes. Of course, they might want to use the \hr command instead, like this:</p>
+<hr />
+<p>&ndash; You can also start a new paragraph with an en dash, if you want to.</p>
+<p><b>See also </b>methodWithEnDashInItsDocs.</p>
+<!-- @@@methodWithEnDashInItsDocs -->
+<!-- $$$someFunction[overload1]$$$someFunctionintint -->
+<h3 class="fn" translate="no" id="someFunction"><span class="type">int</span> Test::<span class="name">someFunction</span>(<span class="type">int</span>, <span class="type">int</span> <i>v</i> = 0)</h3>
+<p>Function that takes a parameter <i translate="no">v</i>. Also returns the value of <i translate="no">v</i>.</p>
+<!-- @@@someFunction -->
+<!-- $$$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>
+<!-- @@@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>
+<!-- $$$operator==[overload1]$$$operator==constTestQDoc::Test&constTestQDoc::Test& -->
+<h3 class="fn" translate="no" id="operator-eq-eq"><span class="type">bool</span> <span class="name">operator==</span>(const <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;<i>lhs</i>, const <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;<i>rhs</i>)</h3>
+<p>Returns true if <i translate="no">lhs</i> and <i translate="no">rhs</i> are equal.</p>
+<!-- @@@operator== -->
+</div>
+<div class="macros">
+<h2>Macro Documentation</h2>
+<!-- $$$QDOCTEST_MACRO2[overload1]$$$QDOCTEST_MACRO2int& -->
+<h3 class="fn" translate="no" id="QDOCTEST_MACRO2"><code class="details extra" translate="no">[since Test 1.1]</code> <span class="name">QDOCTEST_MACRO2</span>(<span class="type">int</span> &amp;<i>x</i>)</h3>
+<p>A macro with argument <i translate="no">x</i>.</p>
+<p>This macro was introduced in Test 1.1.</p>
+<!-- @@@QDOCTEST_MACRO2 -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-testderived-members.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-testderived-members.html
new file mode 100644
index 000000000..df89becd0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-testderived-members.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace, derived from Test.">
+ <title>List of All Members for TestDerived | TestCPP</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>TestDerived</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for TestDerived</h1>
+<p>This is the complete list of members for <a href="testqdoc-testderived.html">TestQDoc::TestDerived</a>, including inherited members.</p>
+<ul>
+<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#DerivedType-typedef" translate="no">DerivedType</a></b></span></li>
+<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#NotTypedef-typedef" translate="no">NotTypedef</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#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>
+<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>
+<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-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>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-testderived-obsolete.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-testderived-obsolete.html
new file mode 100644
index 000000000..42b536e09
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-testderived-obsolete.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace, derived from Test.">
+ <title>Obsolete Members for TestDerived | TestCPP</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>TestDerived</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">Obsolete Members for TestDerived</h1>
+<p><b>The following members of class <a href="testqdoc-testderived.html" translate="no">TestDerived</a> are deprecated.</b> They are provided to keep old source code working. We strongly advise against using them in new code.</p>
+<h2>Static Public Members</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived-obsolete.html#staticObsoleteMember" translate="no">staticObsoleteMember</a></b>()</td></tr>
+</table></div>
+<h2>Member Function Documentation</h2>
+<!-- $$$staticObsoleteMember[overload1]$$$staticObsoleteMember -->
+<h3 class="fn" translate="no" id="staticObsoleteMember"><code class="details extra" translate="no">[static, deprecated]</code> <span class="type">void</span> TestDerived::<span class="name">staticObsoleteMember</span>()</h3>
+<p>This function is deprecated. We strongly advise against using it in new code.</p>
+<p>Static obsolete method.</p>
+<!-- @@@staticObsoleteMember -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-testderived.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-testderived.html
new file mode 100644
index 000000000..04f789abb
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-testderived.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace, derived from Test.">
+ <title>TestDerived Class | TestCPP</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>TestDerived</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#public-types">Public Types</a></li>
+<li class="level1"><a href="#public-functions">Public Functions</a></li>
+<li class="level1"><a href="#reimplemented-public-functions">Reimplemented 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">TestDerived Class</h1>
+<span class="small-subtitle" translate="no">class <a href="testqdoc.html" translate="no">TestQDoc</a>::TestDerived</span>
+<!-- $$$TestDerived-brief -->
+<p>A class in a namespace, derived from <a href="testqdoc-test.html" translate="no">Test</a>. <a href="#details">More...</a></p>
+<!-- @@@TestDerived -->
+<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;TestDerived&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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"> Inherits:</td><td class="memItemRight bottomAlign"> <a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></td></tr>
+</table></div>
+<ul>
+<li><a href="testqdoc-testderived-members.html">List of all members, including inherited members</a></li>
+<li><a href="testqdoc-testderived-obsolete.html">Deprecated members</a></li>
+</ul>
+<h2 id="public-types">Public Types</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#DerivedType-typedef" translate="no">DerivedType</a></b></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#NotTypedef-typedef" translate="no">NotTypedef</a></b></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"> TestQDoc::TestDerived::NotTypedef </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#someValue" translate="no">someValue</a></b>()</td></tr>
+</table></div>
+<h2 id="reimplemented-public-functions">Reimplemented Public Functions</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> virtual void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#virtualFun" translate="no">virtualFun</a></b>() override</td></tr>
+</table></div>
+<!-- $$$TestDerived-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@TestDerived -->
+<div class="types">
+<h2>Member Type Documentation</h2>
+<!-- $$$DerivedType -->
+<h3 class="fn" translate="no" id="DerivedType-typedef"><code class="details extra" translate="no">[alias]</code> TestDerived::<span class="name">DerivedType</span></h3>
+<p>An aliased typedef.</p>
+<!-- @@@DerivedType -->
+<!-- $$$NotTypedef -->
+<h3 class="fn" translate="no" id="NotTypedef-typedef"><code class="details extra" translate="no">[alias]</code> TestDerived::<span class="name">NotTypedef</span></h3>
+<p>I'm an alias, not a typedef.</p>
+<!-- @@@NotTypedef -->
+</div>
+<div class="func">
+<h2>Member Function Documentation</h2>
+<!-- $$$someValue[overload1]$$$someValue -->
+<h3 class="fn" translate="no" id="someValue"><span class="type"><a href="testqdoc-testderived.html#NotTypedef-typedef" translate="no">TestQDoc::TestDerived::NotTypedef</a></span> TestDerived::<span class="name">someValue</span>()</h3>
+<p>Returns a value using an aliases type.</p>
+<!-- @@@someValue -->
+<!-- $$$virtualFun[overload1]$$$virtualFun -->
+<h3 class="fn" translate="no" id="virtualFun"><code class="details extra" translate="no">[override virtual]</code> <span class="type">void</span> TestDerived::<span class="name">virtualFun</span>()</h3>
+<p>Reimplements: <a href="testqdoc-test.html#virtualFun" translate="no">Test::virtualFun</a>().</p>
+<!-- @@@virtualFun -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc.html
new file mode 100644
index 000000000..425c7b396
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A namespace.">
+ <title>TestQDoc Namespace | TestCPP</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="#macros">Macros</a></li>
+<li class="level1"><a href="#details">Detailed Description</a></li>
+<li class="level2"><a href="#usage">Usage</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">TestQDoc Namespace</h1>
+<!-- $$$TestQDoc-brief -->
+<p>A namespace. <a href="#details">More...</a></p>
+<!-- @@@TestQDoc -->
+<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;TestCPP&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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>
+</table></div>
+<h2 id="classes">Classes</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since 2.0)</code> class </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html" translate="no">Test</a></b></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since 2.0)</code> class </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html" translate="no">TestDerived</a></b></td></tr>
+</table></div>
+<h2 id="macros">Macros</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc.html#QDOCTEST_MACRO" translate="no">QDOCTEST_MACRO</a></b></td></tr>
+</table></div>
+<!-- $$$TestQDoc-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<h3 id="usage">Usage</h3>
+<p>This namespace is for testing QDoc output.</p>
+</div>
+<!-- @@@TestQDoc -->
+<div class="classes">
+<h2>Classes</h2>
+<h3> class <a href="testqdoc-test.html">Test</a></h3><!-- $$$Test-brief -->
+<p>A class in a namespace. <a href="testqdoc-test.html#details">More...</a></p>
+<!-- @@@Test -->
+<h3> class <a href="testqdoc-testderived.html">TestDerived</a></h3><!-- $$$TestDerived-brief -->
+<p>A class in a namespace, derived from <a href="testqdoc-test.html" translate="no">Test</a>. <a href="testqdoc-testderived.html#details">More...</a></p>
+<!-- @@@TestDerived -->
+</div>
+<div class="macros">
+<h2>Macro Documentation</h2>
+<!-- $$$QDOCTEST_MACRO[overload1]$$$QDOCTEST_MACRO -->
+<h3 class="fn" translate="no" id="QDOCTEST_MACRO"><span class="name">QDOCTEST_MACRO</span></h3>
+<!-- @@@QDOCTEST_MACRO -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/configs/noautolist.qdocconf b/src/qdoc/qdoc/tests/generatedoutput/testdata/configs/noautolist.qdocconf
new file mode 100644
index 000000000..ad3b402ea
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/configs/noautolist.qdocconf
@@ -0,0 +1,64 @@
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ../images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+includepaths += -I../testcpp
+
+headers = ../testcpp/testcpp.h
+sources = ../testcpp/testcpp.cpp \
+ ../testcpp/classlists.qdoc
+
+macro.CMDFN = \\\\fn
+macro.nothing = \\dontdocument ()
+macro.testnoautolist = \\if defined(test_noautolist)\n\\noautolist\n\\endif
+
+navigation.cppclassespage = "QDoc Test C++ Classes"
+
+moduleheader = TestCPP
+
+project = Test
+description = "A test project for QDoc build artifacts"
+outputdir = ./html
+
+exampledirs = ../qml
+
+headerdirs += ../
+sourcedirs += ../qml
+
+# Exclude source files from other tests' subdirs
+excludedirs = ../bug80259
+
+examples.fileextensions = "*.qml *.cpp"
+
+macro.begincomment = "\\c{/*}"
+macro.QDocTestVer = "1.1"
+
+navigation.qmltypespage = "QDoc.Test QML Module"
+navigation.qmltypestitle = "Types"
+warninglimit += 1
+
+manifestmeta.examplecategories = "Application Examples" \
+ "Desktop" \
+ "Mobile" \
+ "Embedded"
+defines += test_noautolist
+
+outputformats = HTML DocBook
+
+HTML.nosubdirs = true
+DocBook.nosubdirs = true
+HTML.outputsubdir = noautolist
+DocBook.outputsubdir = noautolist-docbook
+
+# TODO: DocBook generator has trouble handling shared comment nodes
+# - allow two warnings related to these
+warninglimit = 2
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/configs/testcpp.qdocconf b/src/qdoc/qdoc/tests/generatedoutput/testdata/configs/testcpp.qdocconf
new file mode 100644
index 000000000..1d4ce57a6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/configs/testcpp.qdocconf
@@ -0,0 +1,31 @@
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ../images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+# By default, use -outputdir directly, no subdir.
+# outputsubdir '.' matches the root of expected_output/
+HTML.nosubdirs = true
+HTML.outputsubdir = .
+
+project = TestCPP
+includepaths += -I../testcpp
+
+headers = ../testcpp/testcpp.h
+sources = ../testcpp/testcpp.cpp \
+ ../testcpp/classlists.qdoc
+exampledirs = ../testcpp/snippets
+
+macro.CMDFN = \\\\fn
+macro.nothing = \\dontdocument ()
+macro.testnoautolist = \\if defined(test_noautolist)\n\\noautolist\n\\endif
+
+navigation.cppclassespage = "QDoc Test C++ Classes"
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/configs/testcpp_singleexec.qdocconf b/src/qdoc/qdoc/tests/generatedoutput/testdata/configs/testcpp_singleexec.qdocconf
new file mode 100644
index 000000000..e9b72b75d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/configs/testcpp_singleexec.qdocconf
@@ -0,0 +1,32 @@
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ../images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+# By default, use -outputdir directly, no subdir.
+# outputsubdir '.' matches the root of expected_output/
+HTML.nosubdirs = true
+HTML.outputsubdir = .
+
+project = TestCPP
+includepaths += -I../testcpp
+
+headers = ../testcpp/testcpp.h
+sources = ../testcpp/testcpp.cpp \
+ ../testcpp/classlists.qdoc
+exampledirs = ../testcpp/snippets
+
+macro.CMDFN = \\\\fn
+macro.nothing = \\dontdocument ()
+macro.testnoautolist = \\if defined(test_noautolist)\n\\noautolist\n\\endif
+
+navigation.cppclassespage = "QDoc Test C++ Classes"
+
diff --git a/tests/auto/qdoc/generatedoutput/testdata/crossmodule/CrossModule b/src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/CrossModule
index 50bea93ab..50bea93ab 100644
--- a/tests/auto/qdoc/generatedoutput/testdata/crossmodule/CrossModule
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/CrossModule
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/crossmodule.qdocconf b/src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/crossmodule.qdocconf
new file mode 100644
index 000000000..404981136
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/crossmodule.qdocconf
@@ -0,0 +1,26 @@
+project = CrossModule
+includepaths += -I.
+
+depends = testcpp
+
+headers = testtype.h
+sources = testtype.cpp
+
+HTML.nosubdirs = true
+HTML.outputsubdir = crossmodule
+
+defines += test_crossmodule
+
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ../images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/crossmodule_singleexec.qdocconf b/src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/crossmodule_singleexec.qdocconf
new file mode 100644
index 000000000..1040bb5ad
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/crossmodule_singleexec.qdocconf
@@ -0,0 +1,6 @@
+include(crossmodule.qdocconf)
+
+sources += namespaces.qdoc
+
+HTML.nosubdirs = true
+HTML.outputsubdir = crossmodule
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/namespaces.qdoc b/src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/namespaces.qdoc
new file mode 100644
index 000000000..3732008ac
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/namespaces.qdoc
@@ -0,0 +1,9 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+/*!
+ \page all-namespaces.html
+ \title Namespaces
+
+ \generatelist namespaces
+*/
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/testtype.cpp b/src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/testtype.cpp
new file mode 100644
index 000000000..d7557da73
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/testtype.cpp
@@ -0,0 +1,45 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#include "testtype.h"
+
+/*!
+ \module CrossModule
+*/
+
+/*!
+ Function under a namespace that's documented elsewhere.
+*/
+void CrossModuleRef::documentMeToo()
+{
+}
+
+/*!
+ \class TestType
+ \inmodule CrossModule
+ \brief A class inheriting another class that lives in an external doc
+ module.
+
+ \section1 Linking
+
+ These links go to the parent class:
+ \list
+ \li \l {TestQDoc::TestDerived}
+ \li \l {TestQDoc::}{Test} class \l Usage.
+ \li QDOCTEST_MACRO
+ \li DontLinkToMe
+ \endlist
+
+ \section1 Generated Lists
+
+ This is an annotated list of entries in a group:
+ \annotatedlist testgroup
+
+ \sa {TestQDoc::Test::}{someFunction()}
+*/
+
+/*!
+ Nothing to see here.
+*/
+void TestType::nothing()
+{
+}
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/testtype.h b/src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/testtype.h
new file mode 100644
index 000000000..b6b0d446f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/crossmodule/testtype.h
@@ -0,0 +1,16 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#pragma once
+
+#include "../testcpp/testcpp.h"
+
+namespace CrossModuleRef {
+ void documentMeToo();
+}
+
+class TestType : public TestQDoc::TestDerived
+{
+public:
+ TestType() {}
+ void nothing() {}
+};
diff --git a/tests/auto/qdoc/generatedoutput/testdata/dontdocument/TestCPP b/src/qdoc/qdoc/tests/generatedoutput/testdata/dontdocument/TestCPP
index 7291e6d8f..7291e6d8f 100644
--- a/tests/auto/qdoc/generatedoutput/testdata/dontdocument/TestCPP
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/dontdocument/TestCPP
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/dontdocument/dontdocument.qdocconf b/src/qdoc/qdoc/tests/generatedoutput/testdata/dontdocument/dontdocument.qdocconf
new file mode 100644
index 000000000..605c68b88
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/dontdocument/dontdocument.qdocconf
@@ -0,0 +1,46 @@
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ../images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+project = TestCPP
+includepaths += -I../testcpp
+
+headers = ../testcpp/testcpp.h
+sources = ../testcpp/testcpp.cpp \
+ ../testcpp/classlists.qdoc
+exampledirs = ../testcpp/snippets
+
+macro.CMDFN = \\\\fn
+macro.nothing = \\dontdocument ()
+macro.testnoautolist = \\if defined(test_noautolist)\n\\noautolist\n\\endif
+
+navigation.cppclassespage = "QDoc Test C++ Classes"
+
+headers += dont.h
+sources += dont.cpp test.qdoc
+
+qhp.projects = DontDocument
+
+qhp.DontDocument.file = dontdocument.qhp
+qhp.DontDocument.namespace = org.qt-project.dontdocument.001
+qhp.DontDocument.virtualFolder = test
+qhp.DontDocument.indexTitle = QDoc Test C++ Classes
+qhp.DontDocument.indexRoot =
+
+qhp.DontDocument.subprojects = classes
+qhp.DontDocument.subprojects.classes.title = Classes
+qhp.DontDocument.subprojects.classes.indexTitle = QDoc Test C++ Classes
+qhp.DontDocument.subprojects.classes.selectors = class
+qhp.DontDocument.subprojects.classes.sortPages = true
+
+HTML.nosubdirs = true
+HTML.outputsubdir = dontdocument
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/demo/demo.cpp b/src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/demo/demo.cpp
new file mode 100644
index 000000000..a5e983503
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/demo/demo.cpp
@@ -0,0 +1,11 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+bool isOverThousand(int n)
+{
+//! [integer literal with separator]
+ if (n > 1'000)
+ return true;
+//! [integer literal with separator]
+ return false;
+}
diff --git a/tests/auto/qdoc/generatedoutput/testdata/examples/demos/demo/demo.pro b/src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/demo/demo.pro
index dbe8ff3c0..dbe8ff3c0 100644
--- a/tests/auto/qdoc/generatedoutput/testdata/examples/demos/demo/demo.pro
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/demo/demo.pro
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/demo/doc/src/demo.qdoc b/src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/demo/doc/src/demo.qdoc
new file mode 100644
index 000000000..d06e34ca2
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/demo/doc/src/demo.qdoc
@@ -0,0 +1,11 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+/*!
+ \example demos/demo
+ \title Demo
+ \image leonardo-da-vinci.png
+ //! Icon made by Smashicons from www.flaticon.com
+
+ \snippet demos/demo/demo.cpp integer literal with separator
+*/
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/demo/dontxclude/CMakeLists.txt b/src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/demo/dontxclude/CMakeLists.txt
new file mode 100644
index 000000000..d29157aad
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/demo/dontxclude/CMakeLists.txt
@@ -0,0 +1,2 @@
+cmake_minimum_required(VERSION 3.16)
+project (DONTXCLUDEDIRS_QDOCTEST)
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/demo/excludes/CMakeLists.txt b/src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/demo/excludes/CMakeLists.txt
new file mode 100644
index 000000000..09b447642
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/demo/excludes/CMakeLists.txt
@@ -0,0 +1,2 @@
+cmake_minimum_required(VERSION 3.16)
+project (EXCLUDEDIR_QDOCTEST)
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/hidden/doc/src/hidden.qdoc b/src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/hidden/doc/src/hidden.qdoc
new file mode 100644
index 000000000..9001e3d96
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/hidden/doc/src/hidden.qdoc
@@ -0,0 +1,11 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+/*!
+ \example demos/hidden
+ \title Hidden Demo
+ \meta tag broken
+ \brief Tagged 'broken', does not appear in examples-manifest.xml.
+
+ Also missing an image, but that's OK as it's broken anyway.
+*/
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/hidden/hidden.pro b/src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/hidden/hidden.pro
new file mode 100644
index 000000000..dbe8ff3c0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/examples/demos/hidden/hidden.pro
@@ -0,0 +1,2 @@
+TEMPLATE = aux
+message("Nothing to see here.")
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/images/01.png b/src/qdoc/qdoc/tests/generatedoutput/testdata/images/01.png
new file mode 100644
index 000000000..d73ab969b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/images/01.png
Binary files differ
diff --git a/tests/auto/qdoc/generatedoutput/testdata/images/leonardo-da-vinci.png b/src/qdoc/qdoc/tests/generatedoutput/testdata/images/leonardo-da-vinci.png
index 854acb4ca..854acb4ca 100644
--- a/tests/auto/qdoc/generatedoutput/testdata/images/leonardo-da-vinci.png
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/images/leonardo-da-vinci.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/includefromexampledirs/excludes/anotherindex.qdoc b/src/qdoc/qdoc/tests/generatedoutput/testdata/includefromexampledirs/excludes/anotherindex.qdoc
new file mode 100644
index 000000000..f8436416f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/includefromexampledirs/excludes/anotherindex.qdoc
@@ -0,0 +1,14 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+/*!
+//! exampledirs-include
+ \page index.html
+ \title doc index
+
+ \section1 C++ Classes
+ \generatelist {classesbymodule TestCPP}
+ \section1 QML Types
+ \annotatedlist qmltypes
+//! exampledirs-include
+*/
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/includefromexampledirs/excludes/parentinclude.qdoc b/src/qdoc/qdoc/tests/generatedoutput/testdata/includefromexampledirs/excludes/parentinclude.qdoc
new file mode 100644
index 000000000..4409fba8f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/includefromexampledirs/excludes/parentinclude.qdoc
@@ -0,0 +1,28 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+/*!
+//! abstract-type
+ \qmltype AbstractParent
+ \inqmlmodule QDoc.Test
+ \ingroup qmltypes
+ \qmlabstract
+ \brief Abstract base QML type.
+//! abstract-type
+*/
+
+/*!
+ //! --- Observe the indented snippet tag:
+ //! children-qmlproperty
+ \qmlproperty list<Child> AbstractParent::children
+ \qmldefault
+ \brief Children of the type.
+ //! children-qmlproperty
+*/
+
+/*!
+//! rear-qmlmethod
+ \qmlmethod void AbstractParent::rear(Child child)
+ \brief Do some abstract parenting on \a child.
+//! rear-qmlmethod
+*/
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/includefromexampledirs/includefromexampledirs.qdocconf b/src/qdoc/qdoc/tests/generatedoutput/testdata/includefromexampledirs/includefromexampledirs.qdocconf
new file mode 100644
index 000000000..abbfabb87
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/includefromexampledirs/includefromexampledirs.qdocconf
@@ -0,0 +1,64 @@
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ../images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+includepaths += -I../testcpp
+
+headers = ../testcpp/testcpp.h
+sources = ../testcpp/testcpp.cpp \
+ ../testcpp/classlists.qdoc
+
+macro.CMDFN = \\\\fn
+macro.nothing = \\dontdocument ()
+macro.testnoautolist = \\if defined(test_noautolist)\n\\noautolist\n\\endif
+
+navigation.cppclassespage = "QDoc Test C++ Classes"
+
+moduleheader = TestCPP
+
+project = Test
+description = "A test project for QDoc build artifacts"
+outputdir = ./html
+
+exampledirs = ../qml
+
+headerdirs += ../
+sourcedirs += ../qml
+
+# Exclude source files from other tests' subdirs
+excludedirs = ../bug80259
+
+examples.fileextensions = "*.qml *.cpp"
+
+macro.begincomment = "\\c{/*}"
+macro.QDocTestVer = "1.1"
+
+navigation.qmltypespage = "QDoc.Test QML Module"
+navigation.qmltypestitle = "Types"
+warninglimit += 1
+
+manifestmeta.examplecategories = "Application Examples" \
+ "Desktop" \
+ "Mobile" \
+ "Embedded"
+
+sourcedirs += src
+
+excludedirs += excludes \
+ ../qml/componentset
+
+excludefiles += ../qml/parent.qdoc
+
+exampledirs += excludes
+
+HTML.nosubdirs = true
+HTML.outputsubdir = includefromexampledirs
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/includefromexampledirs/src/includefromparent.qdoc b/src/qdoc/qdoc/tests/generatedoutput/testdata/includefromexampledirs/src/includefromparent.qdoc
new file mode 100644
index 000000000..a7ac5454b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/includefromexampledirs/src/includefromparent.qdoc
@@ -0,0 +1,41 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+/*!
+\include anotherindex.qdoc exampledirs-include
+
+\include parent.qdocinc
+*/
+
+/*!
+\include parentinclude.qdoc abstract-type
+
+\include parent.qdocinc
+*/
+
+/*!
+\include parentinclude.qdoc children-qmlproperty
+
+\include parent.qdocinc
+*/
+
+/*!
+\include parentinclude.qdoc rear-qmlmethod
+
+\include parent.qdocinc
+*/
+
+/*!
+ \qmltype Child
+ \inqmlmodule QDoc.Test
+ \ingroup qmltypes
+ \inherits AbstractParent
+ \brief A Child inheriting its parent.
+*/
+
+/*!
+ \qmlvaluetype int
+ \inqmlmodule QDoc.Test
+ \ingroup qmltypes
+ \brief An integer value type.
+*/
diff --git a/tests/auto/qdoc/generatedoutput/testdata/includefromexampledirs/src/parent.qdocinc b/src/qdoc/qdoc/tests/generatedoutput/testdata/includefromexampledirs/src/parent.qdocinc
index 307c39dbd..307c39dbd 100644
--- a/tests/auto/qdoc/generatedoutput/testdata/includefromexampledirs/src/parent.qdocinc
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/includefromexampledirs/src/parent.qdocinc
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/indexlinking/indexlinking.qdocconf b/src/qdoc/qdoc/tests/generatedoutput/testdata/indexlinking/indexlinking.qdocconf
new file mode 100644
index 000000000..f2c1967de
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/indexlinking/indexlinking.qdocconf
@@ -0,0 +1,29 @@
+# test linking to entities loaded from index
+project = IndexLinking
+
+# Use a URL different from what the dependency below uses,
+# to avoid linking with relative paths. See QTBUG-107762.
+url = indexlinking
+
+depends = \
+ qmlpropertygroups
+
+sources = linking.qdoc
+
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ../images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+# By default, use -outputdir directly, no subdir.
+# outputsubdir '.' matches the root of expected_output/
+HTML.nosubdirs = true
+HTML.outputsubdir = .
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/indexlinking/linking.qdoc b/src/qdoc/qdoc/tests/generatedoutput/testdata/indexlinking/linking.qdoc
new file mode 100644
index 000000000..2206ec712
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/indexlinking/linking.qdoc
@@ -0,0 +1,41 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+/*!
+ \page index-linking.html
+ \title Linking
+
+ \section1 QML properties
+ \list A
+ \li Property group: \l [QML] {Parent::group}.
+ \li Property in a group: \l [QmlPropertyGroups]
+ QDoc.Test::Parent::group.c.
+ \endlist
+
+ \section1 Auto-linking to types in code snippets
+
+ \qml
+ import QtQuick
+
+ ProgressBar {
+ // Linking to int value type
+ property int progress: 0
+ }
+ \endqml
+
+ \code
+ // 'int' should not link anywhere in C++ code
+ int main() { int x{0}; return x; }
+ \endcode
+*/
+
+/*!
+ \title LinkModule QML Types
+ \qmlmodule LinkModule 1.0
+*/
+
+/*!
+ \qmltype GrandChild
+ \inqmlmodule LinkModule
+ \inherits AnotherChild
+*/
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/DocTest.qml b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/DocTest.qml
new file mode 100644
index 000000000..0bf95132d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/DocTest.qml
@@ -0,0 +1,86 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick 2.0
+
+/*!
+ \qmltype DocTest
+ \inherits Test
+ \inqmlmodule QDoc.Test
+ \brief Represents a doc test case.
+ \since QDoc.Test 0.9
+
+ \section1 Introduction
+
+ A documentation test case, itself documented inline in \DocTest.qml.
+*/
+Item {
+ id: testCase
+
+ /*!
+ \qmlsignal QDocTest::completed
+ */
+ signal completed
+
+ /*!
+ \qmlsignal DocTest::test(var bar)
+ Signal with parameter \a bar.
+ */
+ signal foo(var bar)
+
+ /*!
+ Signals that something is \a really happening.
+ */
+ signal itsHappening(bool really)
+
+ /*!
+ \qmlproperty string DocTest::name
+
+ Name of the test.
+ \qml
+ DocTest {
+ name: "test"
+ // ...
+ }
+ \endqml
+ */
+ required property string name
+
+ /*!
+ Whether the test is active.
+ \default true
+
+ \sa name
+ */
+ property bool active: true
+
+ /*! \internal */
+ property int doctest_internal: -1
+
+ /*!
+ \qmlmethod DocTest::fail(message = "oops")
+ \since QDoc.Test 1.0
+
+ Fails the current test case, with the optional \a message.
+ */
+ function fail(msg) {
+ if (msg === undefined)
+ msg = "oops";
+ }
+
+ /*! \internal */
+ function doctest_fail(msg) {
+ if (msg === undefined)
+ msg = "";
+ }
+
+ /*!
+ \brief Fails the current test case, hard.
+ \list
+ \li Prints out \a msg.
+ \li Accepts a random \a option.
+ \endlist
+ */
+ function fail_hard(msg = "facepalm", option = 123) {
+ }
+}
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/cmaketest/CMakeLists.txt b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/cmaketest/CMakeLists.txt
new file mode 100644
index 000000000..89eafa300
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/cmaketest/CMakeLists.txt
@@ -0,0 +1,2 @@
+cmake_minimum_required(VERSION 3.16)
+project (QDOCTEST)
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/cmaketest/doc/src/cmaketest.qdoc b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/cmaketest/doc/src/cmaketest.qdoc
new file mode 100644
index 000000000..bb7b63263
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/cmaketest/doc/src/cmaketest.qdoc
@@ -0,0 +1,9 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+/*!
+ \example cmaketest
+ \title CMake Example Project
+ \image leonardo-da-vinci.png
+ //! Icon made by Smashicons from www.flaticon.com
+*/
diff --git a/tests/auto/qdoc/generatedoutput/testdata/qml/cmaketest/main.cpp b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/cmaketest/main.cpp
index 68d71eb71..68d71eb71 100644
--- a/tests/auto/qdoc/generatedoutput/testdata/qml/cmaketest/main.cpp
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/cmaketest/main.cpp
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/ProgressBar.qml b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/ProgressBar.qml
new file mode 100644
index 000000000..39e48da54
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/ProgressBar.qml
@@ -0,0 +1,98 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick 1.0
+
+/*!
+ \qmltype ProgressBar
+ \inqmlmodule UIComponents
+ \brief A component that shows the progress of an event.
+
+ A ProgressBar shows the linear progress of an event as its \l value.
+ The range is specified using the \l {minimum} and the \l{maximum} values.
+
+ The ProgressBar component is part of the \l {UI Components} module.
+
+ This documentation is part of the \l{componentset}{UIComponents} example.
+*/
+Item {
+ id: progressbar
+
+ /*!
+ The minimum value of the ProgressBar range.
+ The \l value must not be less than this value.
+ */
+ property int minimum: 0
+
+ /*!
+ The maximum value of the ProgressBar range.
+ The \l value must not be more than this value.
+ */
+ property int maximum: 100
+
+ /*!
+ The value of the progress.
+ */
+ property int value: 0
+
+ /*!
+ \qmlproperty color ProgressBar::color
+ The color of the ProgressBar's gradient. Must bind to a color type.
+
+ \omit
+ The "\qmlproperty <type> <property name>" is needed because
+ property alias need to have their types manually entered.
+
+ QDoc will not publish the documentation within omit and endomit.
+ \endomit
+
+ \sa secondColor
+ */
+ property alias color: gradient1.color
+
+ /*!
+ \qmlproperty color ProgressBar::secondColor
+ The second color of the ProgressBar's gradient.
+ Must bind to a color type.
+
+ \omit
+ The "\qmlproperty <type> <property name>" is needed because
+ property alias need to have their types manually entered.
+
+ QDoc will not publish the documentation within omit and endomit.
+ \endomit
+
+ \sa color
+ */
+ property alias secondColor: gradient2.color
+
+ width: 250; height: 23
+ clip: true
+
+ Rectangle {
+ id: highlight
+
+ /*!
+ An internal documentation comment. The widthDest property is not
+ a public API and therefore will not be exposed.
+ */
+ property int widthDest: ((progressbar.width * (value - minimum)) / (maximum - minimum) - 6)
+
+ width: highlight.widthDest
+ Behavior on width { SmoothedAnimation { velocity: 1200 } }
+
+ anchors { left: parent.left; top: parent.top; bottom: parent.bottom; margins: 3 }
+ radius: 1
+ gradient: Gradient {
+ GradientStop { id: gradient1; position: 0.0 }
+ GradientStop { id: gradient2; position: 1.0 }
+ }
+
+ }
+ Text {
+ anchors { right: highlight.right; rightMargin: 6; verticalCenter: parent.verticalCenter }
+ color: "white"
+ font.bold: true
+ text: Math.floor((value - minimum) / (maximum - minimum) * 100) + '%'
+ }
+}
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/Switch.qml b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/Switch.qml
new file mode 100644
index 000000000..2b39bb820
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/Switch.qml
@@ -0,0 +1,105 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick 1.0
+
+/*!
+ \qmltype ToggleSwitch
+ \inqmlmodule UIComponents
+ \brief A component that can be turned on or off.
+
+ A toggle switch has two states: an \c on and an \c off state. The \c off
+ state is when the \l on property is set to \c false.
+
+ The ToggleSwitch component is part of the \l {UI Components} module.
+
+ This documentation is part of the \l{componentset}{UIComponents} example.
+
+*/
+Item {
+ id: toggleswitch
+ width: background.width; height: background.height
+
+ /*!
+ Indicates the state of the switch. If \c false, then the switch is in
+ the \c off state.
+
+ \omit
+ The \qmlproperty <type> <propertyname> is not necessary as QDoc
+ will associate this property to the ToggleSwitch
+
+ QDoc will not publish the documentation within omit and endomit.
+ \endomit
+ */
+ property bool on: false
+
+
+ /*!
+ A method to toggle the switch. If the switch is \c on, the toggling it
+ will turn it \c off. Toggling a switch in the \c off position will
+ turn it \c on.
+ */
+ function toggle() {
+ if (toggleswitch.state == "on")
+ toggleswitch.state = "off";
+ else
+ toggleswitch.state = "on";
+ }
+
+
+ /*!
+ \internal
+
+ An internal function to synchronize the switch's internals. This
+ function is not for public access. The \internal command will
+ prevent QDoc from publishing this comment in the public API.
+ */
+ function releaseSwitch() {
+ if (knob.x == 1) {
+ if (toggleswitch.state == "off") return;
+ }
+ if (knob.x == 78) {
+ if (toggleswitch.state == "on") return;
+ }
+ toggle();
+ }
+
+ Rectangle {
+ id: background
+ width: 130; height: 48
+ radius: 48
+ color: "lightsteelblue"
+ MouseArea { anchors.fill: parent; onClicked: toggle() }
+ }
+
+ Rectangle {
+ id: knob
+ width: 48; height: 48
+ radius: width
+ color: "lightblue"
+
+ MouseArea {
+ anchors.fill: parent
+ drag.target: knob; drag.axis: Drag.XAxis; drag.minimumX: 1; drag.maximumX: 78
+ onClicked: toggle()
+ onReleased: releaseSwitch()
+ }
+ }
+
+ states: [
+ State {
+ name: "on"
+ PropertyChanges { target: knob; x: 78 }
+ PropertyChanges { target: toggleswitch; on: true }
+ },
+ State {
+ name: "off"
+ PropertyChanges { target: knob; x: 1 }
+ PropertyChanges { target: toggleswitch; on: false }
+ }
+ ]
+
+ transitions: Transition {
+ NumberAnimation { properties: "x"; easing.type: Easing.InOutQuad; duration: 200 }
+ }
+}
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/TabWidget.qml b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/TabWidget.qml
new file mode 100644
index 000000000..1816d31c0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/TabWidget.qml
@@ -0,0 +1,146 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick 1.0
+
+/*!
+ \qmltype TabWidget
+ \inqmlmodule UIComponents
+ \brief A widget that places its children as tabs.
+
+ A TabWidget places its children as tabs in a view. Selecting
+ a tab involves selecting the tab at the top.
+
+ The TabWidget component is part of the \l {UI Components} module.
+
+ This documentation is part of the \l{componentset}{UIComponents} example.
+
+ \section1 Adding Tabs
+
+ To add a tab, declare the tab as a child of the TabWidget.
+
+ \code
+ TabWidget {
+ id: tabwidget
+
+ Rectangle {
+ id: tab1
+ color: "red"
+ //... omitted
+ }
+ Rectangle {
+ id: tab2
+ color: "blue"
+ //... omitted
+ }
+
+ }
+ \endcode
+
+*/
+Item {
+ id: tabWidget
+
+ /*!
+ \internal
+
+ Setting the default property to stack.children means any child items
+ of the TabWidget are actually added to the 'stack' item's children.
+
+ See the \l{"Property Binding in QML"}
+ documentation for details on default properties.
+
+ This is an implementation detail, not meant for public knowledge. Putting
+ the \internal command at the beginning will cause QDoc to not publish this
+ documentation in the public API page.
+
+ Normally, a property alias needs to have a
+ "\qmlproperty <type> <propertyname>" to assign the alias a type.
+
+ */
+ default property alias content: stack.children
+
+
+ /*!
+ The currently active tab in the TabWidget.
+ */
+ property int current: 0
+
+ /*!
+ A sample \c{read-only} property.
+ A contrived property to demonstrate QDoc's ability to detect
+ read-only properties.
+
+ The signature is:
+ \code
+ readonly property int sampleReadOnlyProperty: 0
+ \endcode
+
+ Note that the property must be initialized to a value.
+
+ */
+ readonly property int sampleReadOnlyProperty: 0
+
+ /*!
+ \internal
+
+ This handler is an implementation
+ detail. The \c{\internal} command will prevent QDoc from publishing this
+ documentation on the public API.
+ */
+ onCurrentChanged: setOpacities()
+ Component.onCompleted: setOpacities()
+
+ /*!
+ \internal
+
+ An internal function to set the opacity.
+ The \internal command will prevent QDoc from publishing this
+ documentation on the public API.
+ */
+ function setOpacities() {
+ for (var i = 0; i < stack.children.length; ++i) {
+ stack.children[i].opacity = (i == current ? 1 : 0)
+ }
+ }
+
+ Row {
+ id: header
+
+ Repeater {
+ model: stack.children.length
+ delegate: Rectangle {
+ width: tabWidget.width / stack.children.length; height: 36
+
+ Rectangle {
+ width: parent.width; height: 1
+ anchors { bottom: parent.bottom; bottomMargin: 1 }
+ color: "#acb2c2"
+ }
+ BorderImage {
+ anchors { fill: parent; leftMargin: 2; topMargin: 5; rightMargin: 1 }
+ border { left: 7; right: 7 }
+ source: "tab.png"
+ visible: tabWidget.current == index
+ }
+ Text {
+ horizontalAlignment: Qt.AlignHCenter; verticalAlignment: Qt.AlignVCenter
+ anchors.fill: parent
+ text: stack.children[index].title
+ elide: Text.ElideRight
+ font.bold: tabWidget.current == index
+ }
+ MouseArea {
+ anchors.fill: parent
+ onClicked: tabWidget.current = index
+ }
+ }
+ }
+ }
+
+ Item {
+ id: stack
+ width: tabWidget.width
+ anchors.top: header.bottom; anchors.bottom: tabWidget.bottom
+ }
+}
diff --git a/tests/auto/qdoc/generatedoutput/testdata/qml/componentset/componentset.pro b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/componentset.pro
index 5b44737c2..5b44737c2 100644
--- a/tests/auto/qdoc/generatedoutput/testdata/qml/componentset/componentset.pro
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/componentset.pro
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/componentset.qml b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/componentset.qml
new file mode 100644
index 000000000..4f75ece75
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/componentset.qml
@@ -0,0 +1,7 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick 2.0
+
+Item {
+}
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/examples.qdoc b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/examples.qdoc
new file mode 100644
index 000000000..898f706c4
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/examples.qdoc
@@ -0,0 +1,82 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+/*!
+ \example componentset
+ \title QML Documentation Example
+ \brief Example for documenting QML types.
+
+ \testnoautolist
+
+ \meta tags {test,sample}
+ \meta tag {application}
+ \meta category {Application Example}
+ \meta installpath tutorials
+
+ This example demonstrates one of the ways to document QML types. It also
+ generates a warning about a missing example image, on purpose.
+
+ In particular, there are sample types that are documented with QDoc
+ commands comments. There are documentation comments for the QML types
+ and their public interfaces. The types are grouped into a module, the
+ \l{UI Components} module.
+
+ The uicomponents.qdoc file generates
+ the overview page for the \l{UI Components} module page.
+
+ The generated documentation is available in the \l{UI Components} module.
+
+ \section1 QML Class
+
+ The QML types use the \\qmltype to document the
+ type. In addition, they have the \\inmodule
+ command in order for QDoc to associate them to the \c UIComponents module.
+
+ QDoc uses the \\brief command to place a basic
+ description when listing the types.
+
+ \section1 Properties, Signals, Handlers, and Methods
+
+ The types have their properties, signals, handlers, and methods
+ defined in their respective QML files. QDoc associates the properties and
+ methods to the types, therefore, you only need to place the
+ documentation above the property, method, or signal.
+
+ To document the type of a \e {property alias}, you must use the
+ \\qmlproperty command to specify the data type.
+
+ \code
+ \qmlproperty int anAliasedProperty
+ An aliased property of type int.
+ \endcode
+
+ \section2 Internal Documentation
+
+ You may declare that a documentation is for internal use by placing the
+ \\internal command after the beginning QDoc comment
+ \begincomment. QDoc will prevent the internal documentation from appearing
+ in the public API.
+
+ If you wish to omit certain parts of the documentation, you may use the
+ \\omit and \\endomit command.
+
+ \section1 QML Types with C++ Implementation
+
+ This example only demonstrates the documentation for types in QML
+ files, but the regular QML commands may be placed
+ inside C++ classes to define the public API of the QML type.
+
+*/
+
+
+/*!
+ \qmlmodule UIComponents 1.0
+ \title UI Components
+ \brief Basic set of UI components.
+
+ 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.
+
+ This module is part of the \l{componentset}{UIComponents} example.
+*/
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/uicomponents.qdoc.sample b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/uicomponents.qdoc.sample
new file mode 100644
index 000000000..9818adc06
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/componentset/uicomponents.qdoc.sample
@@ -0,0 +1,14 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+/*!
+ \qmlmodule UIComponents 1.0
+ \title UI Components
+ \brief Basic set of UI components
+
+ 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 off the \l{Qt
+ Quick Code Samples}.
+
+ This module is part of the \l{componentset}{UIComponents} example.
+*/
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/doctest/DocTest.qml b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/doctest/DocTest.qml
new file mode 100644
index 000000000..ea2312c4c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/doctest/DocTest.qml
@@ -0,0 +1,11 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick
+
+/*!
+ //! omit the \qmltype command, file name (base) is the type name.
+ \inqmlmodule Test.NoVer
+ \brief Shadows the type name in QDoc.Test module.
+*/
+Item {}
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/modules.qdoc b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/modules.qdoc
new file mode 100644
index 000000000..c3f4379f9
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/modules.qdoc
@@ -0,0 +1,19 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+/*!
+ \page qmlmodules.html
+ \title QML Modules
+
+ \generatelist qml-modules
+
+ \section1 QML types
+
+ \generatelist qmltypesbymodule QDoc.Test
+
+ \section1 QML value types
+
+ \generatelist qmlvaluetypes
+
+ \generatelist qmlvaluetypesbymodule QDoc.Test
+*/
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/parent.qdoc b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/parent.qdoc
new file mode 100644
index 000000000..a2e41eadd
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/parent.qdoc
@@ -0,0 +1,87 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+/*!
+ \qmltype AbstractParent
+ \inqmlmodule QDoc.Test
+ \qmlabstract
+ \brief Abstract base QML type.
+*/
+
+/*!
+ \qmlproperty list<Child> AbstractParent::children
+ \qmldefault
+ \brief Children of the type.
+*/
+
+/*!
+ \qmlmethod void AbstractParent::rear(Child child, var method = Strict)
+ \brief Do some abstract parenting on \a child using a specific \a method.
+*/
+
+/*!
+ \qmlproperty string AbstractParent::name
+ \brief Name of this parent.
+*/
+
+/*!
+ \qmlmethod void AbstractParent::name(Child child, name)
+ \brief Name a \a child using \a name.
+
+*/
+
+/*!
+ \qmlmethod void AbstractParent::name()
+ \brief Name all children with random names.
+*/
+
+/*!
+ \qmltype Child
+ \inqmlmodule QDoc.Test
+ \inherits AbstractParent
+ \brief A Child inheriting its parent.
+*/
+
+/*!
+ //! override from abstract base
+ \qmlproperty string Child::name
+ \brief Name of this child.
+*/
+
+/*!
+ //! override from abstract base
+ \qmlmethod void Child::name(Child child, name)
+ \brief Name a \a child of this child using \a name.
+*/
+
+/*!
+ \qmlvaluetype int
+ \inqmlmodule QDoc.Test
+
+ \brief An integer value type.
+*/
+
+/*!
+ \qmlmethod int int::abs()
+ Returns the absolute value of this integer.
+*/
+
+/*!
+ \qmltype InternParent
+ \inqmlmodule QDoc.Test
+ \internal
+ \qmlabstract
+ \brief Internal abstract base QML type.
+*/
+
+/*!
+ \qmlproperty int InternParent::prop
+ \brief Propagated to inheriting type docs.
+*/
+
+/*!
+ \qmltype YetAnotherChild
+ \inherits InternParent
+ \inqmlmodule QDoc.Test
+ \brief A type inheriting from internal abstract parent.
+*/
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/type.cpp b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/type.cpp
new file mode 100644
index 000000000..f3b8b9f0d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/qml/type.cpp
@@ -0,0 +1,127 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "testcpp.h"
+
+/*!
+ \qmlmodule QDoc.Test \QDocTestVer
+ \title QDoc.Test QML Module
+ \brief QML Types for the Test module.
+ \since 1.1
+ \preliminary
+
+ \testnoautolist
+*/
+
+/*!
+ \qmlmodule Test.Empty 1.0
+ \title No QML Types Here
+ \brief A QML module with no member types.
+*/
+
+/*!
+ \qmlmodule Test.NoVer
+ \title Versionless QML Module
+ \brief QML Types for the Test module without version.
+ \since 1.1
+ \modulestate Tech Preview
+*/
+
+/*!
+ \qmltype Type
+ \instantiates TestQDoc::Test
+ \inqmlmodule QDoc.Test
+ \brief A QML type documented in a .cpp file.
+ \meta status { <Work In Progress> }
+*/
+
+/*!
+ \qmltype TypeNoVersion
+ \instantiates TestQDoc::TestDerived
+ \inqmlmodule Test.NoVer
+ \brief Another QML type documented in a .cpp file.
+*/
+
+/*!
+ \qmltype OldType
+ \inqmlmodule QDoc.Test
+ \brief Deprecated old type.
+ \deprecated [1.0]
+*/
+
+/*!
+ \qmlproperty int Type::id
+ \readonly
+ \brief A read-only property.
+*/
+
+/*!
+ \qmlproperty string QDoc.Test::Type::name
+ \required
+ \brief Name of the Test.
+*/
+
+/*!
+ \qmlattachedproperty enumeration Type::type
+ \default Type.NoType
+
+ \value Type.NoType
+ Nothing
+ \value Type.SomeType
+ Something
+*/
+
+/*!
+ \qmlproperty int Type::group.first
+ \qmlproperty int Type::group.second
+ \qmlproperty int Type::group.third
+
+ \brief A property group.
+*/
+
+/*!
+ \qmlsignal Type::group.created
+
+ This signal is prefixed with \e group.
+*/
+
+/*!
+ \qmlproperty int Type::fourth
+ \qmlproperty int Type::fifth
+
+ \brief A group of properties sharing a documentation comment.
+*/
+
+/*!
+ \qmlmethod Type Type::copy(a)
+
+ Returns another Type based on \a a.
+*/
+
+/*!
+ \qmlmethod Type::enable()
+ \qmlmethod Type::disable()
+
+ Enables or disables this type.
+*/
+
+/*!
+ \qmlsignal Type::completed(int status)
+
+ This signal is emitted when the operation completed with \a status.
+*/
+
+/*!
+ \qmlattachedsignal Type::configured()
+
+ This attached signal is emitted when the type was configured.
+*/
+
+/*!
+ \qmlmethod Type::deprecatedMethod()
+
+ \deprecated [6.2] This method has no replacement.
+
+ This is a method that should include information about being deprecated
+ and that it has been so since 6.2 in its docs.
+*/
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/qmlpropertygroups/parent.qdoc b/src/qdoc/qdoc/tests/generatedoutput/testdata/qmlpropertygroups/parent.qdoc
new file mode 100644
index 000000000..baabde91d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/qmlpropertygroups/parent.qdoc
@@ -0,0 +1,37 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+/*!
+ \qmltype Parent
+ \inqmlmodule QDoc.Test
+ \brief Base QML type.
+*/
+
+/*!
+ \qmlproperty int Parent::group.c
+ \qmlproperty int Parent::group.a
+ \qmlproperty int Parent::group.b
+ \brief Property group.
+*/
+
+/*!
+ \qmlproperty int Parent::group.b
+ \readonly
+*/
+
+/*!
+ \qmlproperty int Parent::group.c
+ \since 2.0
+*/
+
+/*!
+ \qmltype AnotherChild
+ \inqmlmodule QDoc.Test
+ \inherits Parent
+ \brief Just another child inheriting a parent.
+*/
+
+/*!
+ \qmlproperty string AnotherChild::name
+ \brief Name of this child.
+*/
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/qmlpropertygroups/qmlpropertygroups.qdocconf b/src/qdoc/qdoc/tests/generatedoutput/testdata/qmlpropertygroups/qmlpropertygroups.qdocconf
new file mode 100644
index 000000000..b2e569e43
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/qmlpropertygroups/qmlpropertygroups.qdocconf
@@ -0,0 +1,63 @@
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ../images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+includepaths += -I../testcpp
+
+headers = ../testcpp/testcpp.h
+sources = ../testcpp/testcpp.cpp \
+ ../testcpp/classlists.qdoc
+
+macro.CMDFN = \\\\fn
+macro.nothing = \\dontdocument ()
+macro.testnoautolist = \\if defined(test_noautolist)\n\\noautolist\n\\endif
+
+navigation.cppclassespage = "QDoc Test C++ Classes"
+
+moduleheader = TestCPP
+
+project = Test
+description = "A test project for QDoc build artifacts"
+outputdir = ./html
+
+exampledirs = ../qml
+
+headerdirs += ../
+sourcedirs += ../qml
+
+# Exclude source files from other tests' subdirs
+excludedirs = ../bug80259
+
+examples.fileextensions = "*.qml *.cpp"
+
+macro.begincomment = "\\c{/*}"
+macro.QDocTestVer = "1.1"
+
+navigation.qmltypespage = "QDoc.Test QML Module"
+navigation.qmltypestitle = "Types"
+warninglimit += 1
+
+manifestmeta.examplecategories = "Application Examples" \
+ "Desktop" \
+ "Mobile" \
+ "Embedded"
+
+project = QmlPropertyGroups
+url = https://doc.qt.io/${project}
+
+sourcedirs += .
+
+outputformats = HTML DocBook
+
+{HTML.nosubdirs,DocBook.nosubdirs} = true
+HTML.outputsubdir = qmlpropertygroups
+DocBook.outputsubdir = qmlpropertygroups-docbook
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/singleexec/singleexec.qdocconf b/src/qdoc/qdoc/tests/generatedoutput/testdata/singleexec/singleexec.qdocconf
new file mode 100644
index 000000000..7a3354329
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/singleexec/singleexec.qdocconf
@@ -0,0 +1,4 @@
+../configs/testcpp_singleexec.qdocconf
+
+../crossmodule/crossmodule_singleexec.qdocconf
+
diff --git a/tests/auto/qdoc/generatedoutput/testdata/testcpp/TestCPP b/src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/TestCPP
index 4ed786108..4ed786108 100644
--- a/tests/auto/qdoc/generatedoutput/testdata/testcpp/TestCPP
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/TestCPP
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/classlists.qdoc b/src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/classlists.qdoc
new file mode 100644
index 000000000..84b543cb2
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/classlists.qdoc
@@ -0,0 +1,51 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+/*!
+ \page obsolete-classes.html
+ \title Obsolete Classes
+
+ \section1 Classes with obsolete members
+ \generatelist obsoletecppmembers
+
+ \section2 TestQDoc
+*/
+
+/*!
+ \page autolinking.html
+ \title Autolinking
+
+ //! a section title that qualifies for autolinking
+ \section1 TestQDoc
+
+ The string TestQDoc links to the C++ namespace unless linking explicitly,
+ \l {#TestQDoc}{like this}, or \l {TestQDoc}{this}. Also,
+
+ Autolinks:
+
+ \list
+ \li TestQDoc::TestDerived
+ \endlist
+
+ Explicit links:
+
+ \list
+ \li \l [CPP] {TestQDoc::TestDerived}
+ \li \l {Obsolete Classes#TestQDoc}
+ \endlist
+
+ //! a section title shadowing a known property name
+ \section1 someProp
+*/
+
+/*!
+ \group cpptypes
+ \title Test C++ Types
+
+ \generatelist testgroup
+*/
+
+/*!
+ \externalpage https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command
+ \title reentrant
+*/
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/properties.qdoc b/src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/properties.qdoc
new file mode 100644
index 000000000..2de2f93d1
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/properties.qdoc
@@ -0,0 +1,55 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+/*!
+ \property TestQDoc::TestDerived::bindableProp
+ Some property.
+
+ \sa someProp
+*/
+
+/*!
+ \property TestQDoc::TestDerived::someProp
+ Another property.
+*/
+
+/*!
+ \property TestQDoc::TestDerived::name
+ \brief a name.
+*/
+
+/*!
+ \property TestQDoc::TestDerived::intProp
+ An integer property.
+*/
+
+/*!
+ \property TestQDoc::TestDerived::boolProp
+ A boolean property.
+*/
+
+/*!
+ \fn TestQDoc::TestDerived::invokeMe() const
+ \brief Something invokable.
+*/
+
+/*!
+ \qmlmodule TheModule
+*/
+
+/*!
+ \qmltype TheType
+ \instantiates TestQDoc::TestDerived
+ \inqmlmodule TheModule
+*/
+
+/*!
+ \qmlproperty string TheType::name
+ \brief Read-only status of this property is resolved from Q_PROPERTY.
+*/
+
+/*!
+ //! avoid link warnings for auto-generated links to QProperty
+ \externalpage https://wiki.qt.io/QProperty
+ \title QProperty
+*/
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/snippets/snippet_testcpp.cpp b/src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/snippets/snippet_testcpp.cpp
new file mode 100644
index 000000000..1660fbc2b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/snippets/snippet_testcpp.cpp
@@ -0,0 +1,3 @@
+//! [random tag]
+You're not supposed to see this.
+//! [random tag]
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/testcpp.cpp b/src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/testcpp.cpp
new file mode 100644
index 000000000..033db4791
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/testcpp.cpp
@@ -0,0 +1,418 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#include "testcpp.h"
+
+namespace TestQDoc {
+
+/*
+//! [random tag]
+\note This is just a test.
+//! [random tag]
+
+//! [args]
+\1\2 \3 \2\1
+//! [args]
+*/
+
+/*!
+ \module TestCPP
+ \qtvariable testcpp
+ \qtcmakepackage QDocTest
+ \title QDoc Test C++ Classes
+ \brief A test module page.
+ \since 2.0
+
+ \testnoautolist
+
+ \include testcpp.cpp random tag
+ \include testcpp.cpp {args} {/} {*} {Look, Ma! {I'm made of arguments!}}
+
+\if defined(test_nestedmacro)
+ \versionnote {module} {\ver 5.15.0}
+ \ver 1.0.0
+\endif
+
+ \section1 Linking to function-like things
+
+ \list
+ \li \l {TestQDoc::Test::someFunctionDefaultArg}
+ {someFunctionDefaultArg()}
+ \li QDOCTEST_MACRO2()
+ \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()
+*/
+
+/*!
+ \namespace TestQDoc
+ \inheaderfile TestCPP
+ \inmodule TestCPP
+ \brief A namespace.
+
+ \section1 Usage
+ This namespace is for testing QDoc output.
+*/
+
+/*!
+ \class TestQDoc::Test
+ \inmodule TestCPP
+ \brief A class in a namespace.
+
+\if defined(test_ignoresince)
+ //! omitted by ignoresince
+ \since 1.1
+\endif
+ \ingroup testgroup
+ \ingroup cpptypes
+ \reentrant
+*/
+
+/*!
+ \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.
+*/
+
+/*!
+ \macro QDOCTEST_MACRO
+ \relates TestQDoc
+\if defined(test_ignoresince)
+ //! omitted by ignoresince.Test
+ \since Test 0.9
+\endif
+*/
+
+/*!
+ \macro QDOCTEST_MACRO2(int &x)
+ \relates TestQDoc::Test
+ \since Test 1.1
+ \brief A macro with argument \a x.
+ \ingroup testgroup
+*/
+
+/*!
+\if defined(test_properties)
+ \property TestQDoc::Test::id
+\else
+ \nothing
+\endif
+*/
+
+/*!
+ \deprecated [6.0] Use someFunction() instead.
+*/
+void Test::deprecatedMember()
+{
+ return;
+}
+
+/*!
+ \obsolete
+
+ Use someFunction() instead.
+*/
+void Test::obsoleteMember()
+{
+ return;
+}
+
+/*!
+ \obsolete Use obsoleteMember() instead.
+*/
+void Test::anotherObsoleteMember()
+{
+ return;
+}
+
+/*!
+ \nonreentrant
+ Function that takes a parameter \a i and \a b.
+\if defined(test_ignoresince)
+ \since 2.0
+\endif
+ \ingroup testgroup
+*/
+void Test::someFunctionDefaultArg(int i, bool b = false) const
+{
+ return;
+}
+
+/*!
+ \fn void Test::func(bool)
+ \internal
+*/
+
+/*!
+ \fn [funcPtr] void (*funcPtr(bool b, const char *s))(bool)
+
+ Returns a pointer to a function that takes a boolean. Uses \a b and \a s.
+*/
+
+/*!
+ \fn [op-inc] Test::operator++()
+ \fn [op-dec] Test::operator--()
+ \deprecated
+*/
+
+/*!
+ This method has en dashes in its documentation -- as you'll find
+ represented by \c{--} in the sources -- here and there. The important bit
+ to note is that when passed e.g. to the \\c command, the two hyphens are
+ processed as input to the command and not replaced by an en dash. This also
+ applies to code blocks, where otherwise, the decrement operator would get
+ completely borked:
+
+ \code
+ for (int i = 42; i > 0; --i)
+ // Do something cool during countdown.
+ \endcode
+
+ ...as it would be silly if this would output --i instead of \c {--i}.
+
+ -----------------------------------------------------------------------
+
+ It still allows people to add a bunch of dashes, though, without replacing
+ them all with a series of en dashes. Of course, they might want to use the
+ \\hr command instead, like this:
+ \hr
+
+ -- You can also start a new paragraph with an en dash, if you want to.
+
+ //! Self-referencing \sa-command for tests.
+ \sa methodWithEnDashInItsDocs
+*/
+void Test::methodWithEnDashInItsDocs()
+{
+ // Nothing to see here.
+}
+
+/*!
+ This method has em dashes in its documentation---as you'll find
+ represented by \c{---} in the sources---here and there. The important bit
+ to note is that when passed e.g. to the \\c command, the three hyphens are
+ processed as input to the command and not replaced by an em dash.
+
+ -----------------------------------------------------------------------
+
+ People can still add a bunch of dashes, though, without QDoc replacing
+ them all with a series of em dashes.
+
+ ---You can also start a new paragraph with an em dash, if you want to.
+
+ \sa methodWithEnDashInItsDocs
+
+*/
+void Test::methodWithEmDashInItsDocs()
+{
+ // Woah! Look at that!
+}
+
+// Documented below with an \fn command. Unnecessary but we support it, and it's used.
+int Test::someFunction(int, int v)
+{
+ return v;
+}
+
+/*!
+ \fn void TestQDoc::Test::inlineFunction()
+
+ \brief An inline function, documented using the \CMDFN QDoc command.
+*/
+
+/*!
+ \fn int Test::someFunction(int, int v = 0)
+
+ Function that takes a parameter \a v.
+ Also returns the value of \a v.
+\if defined(test_ignoresince)
+ \since Test 1.0
+\endif
+*/
+
+/*!
+ Function that must be reimplemented.
+*/
+void Test::virtualFun()
+{
+ return;
+}
+
+/*!
+ \fn bool Test::operator==(const Test &lhs, const Test &rhs)
+
+ Returns true if \a lhs and \a rhs are equal.
+*/
+
+/*!
+ \typedef TestQDoc::Test::SomeType
+ \brief A typedef.
+*/
+
+/*!
+ \reimp
+*/
+void TestDerived::virtualFun()
+{
+ return;
+}
+
+/*!
+ \fn TestQDoc::Test::overload()
+ \fn Test::overload(bool b)
+ //! The second overload should match even without the fully qualified path
+
+ Overloads that share a documentation comment, optionally taking
+ a parameter \a b.
+*/
+
+/*!
+ \fn Test::overload(bool b)
+ \since Test 1.2
+*/
+
+/*!
+ \typealias TestQDoc::TestDerived::DerivedType
+ An aliased typedef.
+*/
+
+/*!
+ \typedef TestQDoc::TestDerived::NotTypedef
+ I'm an alias, not a typedef.
+*/
+
+/*!
+ \obsolete
+
+ Static obsolete method.
+*/
+void TestDerived::staticObsoleteMember()
+{
+ return;
+}
+
+/*!
+\if defined(test_properties)
+ \fn void TestDerived::emitSomething()
+ Emitted when things happen.
+\else
+ \nothing
+\endif
+*/
+
+/*!
+\if defined(test_properties)
+ \reimp
+\else
+ \nothing
+\endif
+*/
+int TestDerived::id()
+{
+ return 1;
+}
+
+/*!
+ Returns a value using an aliases type.
+*/
+TestDerived::NotTypedef TestDerived::someValue()
+{
+ return 0;
+}
+
+/*!
+\if defined(test_template)
+ \fn template <typename T1, typename T2> void TestQDoc::Test::funcTemplate(T1 a, T2 b)
+ \brief Function template with two parameters, \a a and \a b.
+\else
+ \nothing
+\endif
+*/
+
+/*!
+\if defined(test_template)
+ \struct TestQDoc::Test::Struct
+ \inmodule TestCPP
+ \brief Templated struct.
+\else
+ \nothing
+\endif
+*/
+
+/*!
+\if defined(test_template)
+ \typealias TestQDoc::Test::Specialized
+\else
+ \nothing
+\endif
+*/
+
+/*!
+\if defined(test_template)
+ \class TestQDoc::Vec
+ \inmodule TestCPP
+ \brief Type alias that has its own reference.
+\else
+ \nothing
+\endif
+*/
+
+/*!
+\if defined(test_template)
+ \macro Q_INVOKABLE
+ \relates TestQDoc::Test
+
+ This is a mock Q_INVOKABLE for the purpose of ensuring QDoc autolink to it
+ as expected.
+\else
+ \nothing
+\endif
+*/
+
+} // namespace TestQDoc
+
+
+/*!
+ \namespace CrossModuleRef
+ \inmodule TestCPP
+ \brief Namespace that has documented functions in multiple modules.
+ \since 3.0
+*/
+namespace CrossModuleRef {
+
+/*!
+ Document me!
+*/
+void documentMe()
+{
+}
+
+} // namespace CrossModuleRef
+
+/*!
+ \class DontLinkToMe
+ \inmodule TestCPP
+ \brief Class that does not generate documentation.
+*/
+
+/*!
+ \dontdocument (DontLinkToMe)
+*/
diff --git a/src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/testcpp.h b/src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/testcpp.h
new file mode 100644
index 000000000..a5b2d221f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/testdata/testcpp/testcpp.h
@@ -0,0 +1,137 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#pragma once
+
+#ifdef test_properties
+#include <QtCore/qmetaobject.h>
+#include <QtCore/qproperty.h>
+#include <QtCore/qstring.h>
+#endif
+
+#define QDOCTEST_MACRO test
+#define QDOCTEST_MACRO2(x) (x) < 0 ? 0 : (x))
+
+namespace TestQDoc {
+
+class Test {
+#ifdef test_properties
+ Q_OBJECT
+ Q_PROPERTY(int id READ id)
+#endif
+public:
+
+#ifdef test_template
+template<typename D, typename T> struct Struct {};
+template<typename T>
+using Specialized = Struct<int, T>;
+#endif
+
+#ifdef test_template
+# define Q_INVOKABLE void foo() {};
+#endif
+
+#ifdef test_scopedenum
+ enum ClassicEnum { Yee, Haw, Howdy, Partner };
+
+ enum class ScopedEnum : unsigned char {
+ This = 0x01,
+ That = 0x02,
+ All = This | That,
+ OmittedValue = 99,
+ UselessValue,
+ VeryLastValue
+ };
+#endif
+ typedef struct {
+ int data;
+ } SomeType;
+ int someFunction(int, int v = 0);
+ void someFunctionDefaultArg(int i, bool b) const;
+ void obsoleteMember();
+ void anotherObsoleteMember();
+ void deprecatedMember();
+ void methodWithEnDashInItsDocs();
+ void methodWithEmDashInItsDocs();
+ void func(bool) {};
+ //! [funcPtr]
+ void (*funcPtr(bool b, const char *s))(bool) {
+ return func;
+ }
+ //! [op-inc]
+ Test &operator++() { return *this; }
+ //! [op-dec]
+ Test &operator--() { return *this; }
+
+ void anotherFunc() {};
+ inline void inlineFunction() {};
+ virtual void virtualFun();
+
+ friend bool operator==(const Test &lhs, const Test &rhs) { return false; }
+
+protected:
+ void overload() {}
+ void overload(bool b) { if (!b) return; }
+#ifdef test_template
+ template <typename T1, typename T2> void funcTemplate(T1 a, T2 b) {
+ a = b;
+ }
+#endif
+#ifdef test_properties
+ virtual int id() { return 0; }
+#endif
+};
+
+class TestDerived : public Test {
+#ifdef test_properties
+ Q_OBJECT
+
+ Q_PROPERTY(QString bindableProp READ bindableProp WRITE setBindableProp NOTIFY bindablePropChanged BINDABLE bindableProp)
+ Q_PROPERTY(QString someProp READ someProp BINDABLE somBindableProp)
+ Q_PROPERTY(int *intProp READ getInt STORED false CONSTANT FINAL)
+ Q_PROPERTY(const QString *name READ name)
+ QDOC_PROPERTY(bool boolProp READ boolProp WRITE setBoolProp NOTIFY boolPropChanged RESET resetBoolProp REVISION 1)
+#endif
+
+public:
+ using DerivedType = Test::SomeType;
+ using NotTypedef = int;
+ void virtualFun() override;
+ static void staticObsoleteMember();
+ NotTypedef someValue();
+#ifdef test_properties
+ QBindable<QString> bindableProp();
+ QBindable<QString> someBindableProp();
+ const QString &someProp();
+ int *getInt();
+ bool boolProp();
+ const QString *name() const;
+
+ Q_INVOKABLE void invokeMe() const {}
+ int id() override;
+
+Q_SIGNALS:
+ void emitSomething(QPrivateSignal);
+ void bindablePropChanged();
+ Q_REVISION(1) void boolPropChanged();
+
+public Q_SLOTS:
+ void setBindableProp(const QString &s);
+ void setBoolProp(bool b);
+ void resetBoolProp();
+#endif
+};
+
+#ifdef test_template
+template <typename T>
+struct BaseVec {};
+template <typename T>
+using Vec = BaseVec<T>;
+#endif
+
+} // namespace TestQDoc
+
+namespace CrossModuleRef {
+ void documentMe();
+}
+
+class DontLinkToMe {};
diff --git a/src/qdoc/qdoc/tests/generatedoutput/tst_generatedoutput.cpp b/src/qdoc/qdoc/tests/generatedoutput/tst_generatedoutput.cpp
new file mode 100644
index 000000000..07ded08ad
--- /dev/null
+++ b/src/qdoc/qdoc/tests/generatedoutput/tst_generatedoutput.cpp
@@ -0,0 +1,283 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#include <QProcess>
+#include <QTemporaryDir>
+#include <QDirIterator>
+#include <QtTest>
+
+class tst_generatedOutput : public QObject
+{
+ Q_OBJECT
+
+public:
+ void setRegenerate() { m_regen = true; }
+
+private slots:
+ void initTestCase();
+ void init();
+
+ // HTML generator
+ void htmlFromCpp();
+
+ // Output format independent tests
+ void inheritedQmlPropertyGroups();
+ void crossModuleLinking();
+ void indexLinking();
+ void includeFromExampleDirs();
+ void singleExec();
+ void preparePhase();
+ void generatePhase();
+ void noAutoList();
+
+private:
+ QScopedPointer<QTemporaryDir> m_outputDir;
+ QString m_qdoc;
+ QDir m_expectedDir;
+ QString m_extraParams;
+ bool m_regen = false;
+
+ void runQDocProcess(const QStringList &arguments);
+ void compareLineByLine(const QStringList &expectedFiles);
+ void testAndCompare(const char *input, const char *outNames, const char *extraParams = nullptr);
+ void copyIndexFiles();
+};
+
+void tst_generatedOutput::initTestCase()
+{
+ // 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" : "";
+ m_qdoc = binpath + QLatin1String("/qdoc") + extension;
+ m_expectedDir.setPath(QFINDTESTDATA("expected_output"));
+
+ // Resolve the path to the file containing extra parameters
+ m_extraParams = QFileInfo(QTest::currentAppName()).dir().filePath("qdocincludepaths.inc");
+ if (!QFileInfo::exists(m_extraParams)) {
+ qWarning().nospace() << QStringLiteral("Cannot locate")
+ << qUtf8Printable(m_extraParams);
+ m_extraParams.clear();
+ } else {
+ m_extraParams.insert(0, '@');
+ }
+}
+
+void tst_generatedOutput::init()
+{
+ m_outputDir.reset(new QTemporaryDir());
+ if (!m_outputDir->isValid()) {
+ const QString errorMessage =
+ "Couldn't create temporary directory: " + m_outputDir->errorString();
+ QFAIL(qPrintable(errorMessage));
+ }
+}
+
+void tst_generatedOutput::runQDocProcess(const QStringList &arguments)
+{
+ QProcess qdocProcess;
+ qdocProcess.setProgram(m_qdoc);
+ qdocProcess.setArguments(arguments);
+
+ auto failQDoc = [&](QProcess::ProcessError) {
+ QFAIL(qPrintable(QStringLiteral("Running qdoc failed with exit code %1: %2")
+ .arg(qdocProcess.exitCode()).arg(qdocProcess.errorString())));
+ };
+ QObject::connect(&qdocProcess, &QProcess::errorOccurred, this, failQDoc);
+
+ qdocProcess.start();
+ qdocProcess.waitForFinished();
+ if (qdocProcess.exitCode() == 0)
+ return;
+
+ QString errors = qdocProcess.readAllStandardError();
+ if (!errors.isEmpty())
+ qInfo().nospace() << "Received errors:\n" << qUtf8Printable(errors);
+ if (!QTest::currentTestFailed())
+ failQDoc(QProcess::UnknownError);
+}
+
+void tst_generatedOutput::compareLineByLine(const QStringList &expectedFiles)
+{
+ for (const auto &file : expectedFiles) {
+ QString expected(m_expectedDir.filePath(file));
+ QString actual(m_outputDir->filePath(file));
+
+ QFile expectedFile(expected);
+ if (!expectedFile.open(QIODevice::ReadOnly))
+ QFAIL(qPrintable(QString("Cannot open expected data file: %1").arg(expected)));
+ QTextStream expectedIn(&expectedFile);
+
+ QFile actualFile(actual);
+ if (!actualFile.open(QIODevice::ReadOnly))
+ QFAIL(qPrintable(QString("Cannot open actual data file: %1").arg(actual)));
+ QTextStream actualIn(&actualFile);
+
+ const QLatin1String delim(": ");
+ int lineNumber = 0;
+ while (!expectedIn.atEnd() && !actualIn.atEnd()) {
+ lineNumber++;
+ QString prefix = file + delim + QString::number(lineNumber) + delim;
+ QString expectedLine = prefix + expectedIn.readLine();
+ QString actualLine = prefix + actualIn.readLine();
+ QCOMPARE(actualLine, expectedLine);
+ }
+ }
+}
+
+void tst_generatedOutput::testAndCompare(const char *input, const char *outNames,
+ const char *extraParams)
+{
+ QStringList args{ "-outputdir", m_outputDir->path() + "/", QFINDTESTDATA(input) };
+ if (extraParams)
+ args << QString(QLatin1String(extraParams)).split(QChar(' '));
+
+ runQDocProcess(args);
+
+ if (QTest::currentTestFailed())
+ return;
+
+ QStringList expectedOuts(QString(QLatin1String(outNames)).split(QChar(' ')));
+ if (m_regen) {
+ QVERIFY(m_expectedDir.mkpath(m_expectedDir.path()));
+ for (const auto &file : std::as_const(expectedOuts)) {
+ QFileInfo fileInfo(m_expectedDir.filePath(file));
+ fileInfo.dir().remove(fileInfo.fileName()); // Allowed to fail
+ QVERIFY(m_expectedDir.mkpath(fileInfo.dir().path()));
+ QVERIFY2(QFile::copy(m_outputDir->filePath(file), fileInfo.filePath()),
+ qPrintable(QStringLiteral("Failed to copy '%1'").arg(file)));
+ }
+ QSKIP("Regenerated expected output only.");
+ }
+
+ compareLineByLine(expectedOuts);
+}
+
+// Copy <project>.index to <project>/<project>.index in the outputdir
+void tst_generatedOutput::copyIndexFiles()
+{
+ QDirIterator it(m_outputDir->path(), QStringList("*.index"), QDir::Files, QDirIterator::Subdirectories);
+ while (it.hasNext()) {
+ QFileInfo fileInfo(it.next());
+ QDir indexDir(m_outputDir->path());
+ QVERIFY(indexDir.mkpath(fileInfo.baseName()));
+ QVERIFY(indexDir.cd(fileInfo.baseName()));
+ if (!indexDir.exists(fileInfo.fileName()))
+ QVERIFY(QFile::copy(fileInfo.filePath(), indexDir.filePath(fileInfo.fileName())));
+ }
+}
+
+void tst_generatedOutput::htmlFromCpp()
+{
+ testAndCompare("testdata/configs/testcpp.qdocconf",
+ "testcpp-module.html "
+ "testqdoc-test.html "
+ "testqdoc-test-members.html "
+ "testqdoc-test-obsolete.html "
+ "testqdoc-testderived.html "
+ "testqdoc-testderived-members.html "
+ "testqdoc-testderived-obsolete.html "
+ "obsolete-classes.html "
+ "autolinking.html "
+ "cpptypes.html "
+ "testqdoc.html");
+}
+
+void tst_generatedOutput::inheritedQmlPropertyGroups()
+{
+ testAndCompare("testdata/qmlpropertygroups/qmlpropertygroups.qdocconf",
+ "qmlpropertygroups/qml-qdoc-test-anotherchild-members.html "
+ "qmlpropertygroups/qml-qdoc-test-parent.html "
+ "qmlpropertygroups-docbook/qml-qdoc-test-parent.xml");
+}
+
+void tst_generatedOutput::indexLinking()
+{
+ {
+ QScopedValueRollback<bool> skipRegen(m_regen, false);
+ inheritedQmlPropertyGroups();
+ }
+ copyIndexFiles();
+ QString indexDir = QLatin1String("-indexdir ") + m_outputDir->path();
+ testAndCompare("testdata/indexlinking/indexlinking.qdocconf",
+ "index-linking.html "
+ "qml-linkmodule-grandchild-members.html",
+ indexDir.toLatin1().data());
+}
+
+void tst_generatedOutput::crossModuleLinking()
+{
+ {
+ QScopedValueRollback<bool> skipRegen(m_regen, false);
+ htmlFromCpp();
+ }
+ copyIndexFiles();
+ QString indexDir = QLatin1String("-indexdir ") + m_outputDir->path();
+ testAndCompare("testdata/crossmodule/crossmodule.qdocconf",
+ "crossmodule/testtype.html "
+ "crossmodule/testtype-members.html "
+ "crossmodule/crossmoduleref-sub-crossmodule.html",
+ indexDir.toLatin1().data());
+}
+
+void tst_generatedOutput::includeFromExampleDirs()
+{
+ testAndCompare("testdata/includefromexampledirs/includefromexampledirs.qdocconf",
+ "includefromexampledirs/index.html "
+ "includefromexampledirs/qml-qdoc-test-abstractparent.html "
+ "includefromexampledirs/qml-qdoc-test-abstractparent-members.html");
+}
+
+void tst_generatedOutput::singleExec()
+{
+ // Build both testcpp and crossmodule projects in single-exec mode
+ testAndCompare("testdata/singleexec/singleexec.qdocconf",
+ "testcpp/testcpp-module.html "
+ "testcpp/testqdoc-test.html "
+ "testcpp/testqdoc-test-members.html "
+ "testcpp/testqdoc.html "
+ "testcpp/crossmoduleref.html "
+ "crossmodule/crossmodule/all-namespaces.html "
+ "crossmodule/crossmodule/testtype.html "
+ "crossmodule/crossmodule/testtype-members.html",
+ "-single-exec");
+}
+
+void tst_generatedOutput::preparePhase()
+{
+ testAndCompare("testdata/configs/testcpp.qdocconf",
+ "testcpp.index",
+ "-prepare");
+}
+
+void tst_generatedOutput::generatePhase()
+{
+ testAndCompare("testdata/configs/testcpp.qdocconf",
+ "testcpp-module.html "
+ "testqdoc-test.html "
+ "testqdoc-test-members.html "
+ "testqdoc.html",
+ "-generate");
+}
+
+void tst_generatedOutput::noAutoList()
+{
+ testAndCompare("testdata/configs/noautolist.qdocconf",
+ "noautolist/testcpp-module.html "
+ "noautolist/test-componentset-example.html "
+ "noautolist/qdoc-test-qmlmodule.html "
+ "noautolist-docbook/testcpp-module.xml "
+ "noautolist-docbook/test-componentset-example.xml "
+ "noautolist-docbook/qdoc-test-qmlmodule.xml");
+}
+
+int main(int argc, char *argv[])
+{
+ tst_generatedOutput tc;
+ // Re-populate expected data and skip tests if option -regenerate is set
+ if (argc == 2 && QByteArray(argv[1]) == "-regenerate") {
+ tc.setRegenerate();
+ --argc;
+ }
+ return QTest::qExec(&tc, argc, argv);
+}
+
+#include "tst_generatedoutput.moc"
diff --git a/src/qdoc/qdoc/tests/qdoc/CMakeLists.txt b/src/qdoc/qdoc/tests/qdoc/CMakeLists.txt
new file mode 100644
index 000000000..03c177772
--- /dev/null
+++ b/src/qdoc/qdoc/tests/qdoc/CMakeLists.txt
@@ -0,0 +1,28 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_QDoc LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_QDoc
+ SOURCES
+ ${CMAKE_CURRENT_LIST_DIR}/main.cpp
+
+ ${CMAKE_CURRENT_LIST_DIR}/boundaries/filesystem/catch_filepath.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/boundaries/filesystem/catch_directorypath.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/filesystem/catch_fileresolver.cpp
+
+ ${CMAKE_CURRENT_LIST_DIR}/../../src/qdoc/boundaries/filesystem/filepath.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/../../src/qdoc/boundaries/filesystem/directorypath.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/../../src/qdoc/boundaries/filesystem/resolvedfile.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/../../src/qdoc/filesystem/fileresolver.cpp
+ INCLUDE_DIRECTORIES
+ ${CMAKE_CURRENT_LIST_DIR}/../../src/
+ LIBRARIES
+ Qt::QDocCatchPrivate
+ Qt::QDocCatchConversionsPrivate
+ Qt::QDocCatchGeneratorsPrivate
+)
diff --git a/src/qdoc/qdoc/tests/qdoc/boundaries/filesystem/catch_directorypath.cpp b/src/qdoc/qdoc/tests/qdoc/boundaries/filesystem/catch_directorypath.cpp
new file mode 100644
index 000000000..d590c1c4f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/qdoc/boundaries/filesystem/catch_directorypath.cpp
@@ -0,0 +1,195 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <catch_conversions/qdoc_catch_conversions.h>
+
+#include <catch/catch.hpp>
+
+#include <qdoc/boundaries/filesystem/directorypath.h>
+
+#include <catch_generators/generators/path_generator.h>
+
+#include <QFileInfo>
+#include <QTemporaryDir>
+#include <QDir>
+#include <QIODeviceBase>
+#include <QRegularExpression>
+
+SCENARIO("Obtaining a DirectoryPath", "[DirectoryPath][Boundaries][Validation][Canonicalization][Path]") {
+
+ GIVEN("Any string representing a path that does not represent an existing element on the filesystem") {
+ QString path = GENERATE(take(100, filter([](auto path){ return !QFileInfo{path}.exists(); }, qdoc::catch_generators::native_path())));
+ CAPTURE(path);
+
+ WHEN("A DirectoryPath instance is requested from that string") {
+ auto maybe_directory_path{DirectoryPath::refine(path)};
+
+ THEN("A DirectoryPath instance is not obtained") {
+ REQUIRE(!maybe_directory_path);
+ }
+ }
+ }
+
+ GIVEN("Any string representing a path to a file") {
+ QString relative_path = GENERATE(take(100, qdoc::catch_generators::native_relative_file_path()));
+ CAPTURE(relative_path);
+
+ QTemporaryDir working_directory{};
+ REQUIRE(working_directory.isValid());
+
+ QString path_to_file = working_directory.path() + "/" + relative_path;
+
+ AND_GIVEN("That the path represents an existing file on the filesystem") {
+ REQUIRE(QDir{working_directory.path()}.mkpath(QFileInfo{relative_path}.path()));
+ REQUIRE(QFile{path_to_file}.open(QIODeviceBase::ReadWrite | QIODevice::NewOnly));
+
+ WHEN("A DirectoryPath instance is requested from that string") {
+ auto maybe_directory_path{DirectoryPath::refine(path_to_file)};
+
+ THEN("A DirectoryPath instance is not obtained") {
+ REQUIRE(!maybe_directory_path);
+ }
+ }
+ }
+ }
+
+#if defined(Q_OS_LINUX) || defined(Q_OS_MACOS)
+
+ GIVEN("Any string representing a path to a directory") {
+ // REMARK: [relative-component-permissions]
+ // For tests where we change the permissions of the path, we
+ // want to avoid relative components in a final position.
+ // Relative components are actual objects on the filesystem in
+ // *nix systems.
+ // What this means is that to perform some operations on them,
+ // such as changing permissions, we need the correct
+ // permission in their containing or parent directory.
+ // When we change permissions for those files, the permissions
+ // for their containing or parent directory is actually
+ // changed.
+ // Depending on the way in which the permissions where
+ // changed, it may then be impossible to change them back, as
+ // the containing or parent directory might not provide the
+ // necessary permission to read or change the nodes that it
+ // contains.
+ // For tests in particular, this means that we are not able to
+ // ensure that the correct permissions will be available for
+ // the cleanup of the temporary directories that we need for
+ // testing.
+ // To avoid this situation, we filter out those paths that end
+ // in a relative component.
+ QString relative_path = GENERATE(take(100,
+ filter(
+ [](QString path){
+ QString last_component = path.split(QRegularExpression{R"(\/+)"}, Qt::SkipEmptyParts).last();
+ return (last_component != ".") && (last_component != "..");
+ },
+ qdoc::catch_generators::native_relative_file_path()
+ )
+ ));
+ CAPTURE(relative_path);
+
+ QTemporaryDir working_directory{};
+ REQUIRE(working_directory.isValid());
+
+ QString path_to_directory = working_directory.path() + "/" + relative_path;
+
+ AND_GIVEN("That the path represents an existing directory on the filesystem") {
+ REQUIRE(QDir{working_directory.path()}.mkpath(relative_path));
+
+ AND_GIVEN("That the directory represented by the path is not readable") {
+ REQUIRE(QFile::setPermissions(path_to_directory, QFileDevice::WriteOwner |
+ QFileDevice::ExeOwner |
+ QFileDevice::WriteGroup |
+ QFileDevice::ExeGroup |
+ QFileDevice::WriteOther |
+ QFileDevice::ExeOther));
+
+ CAPTURE(QFileInfo{path_to_directory}.isReadable());
+
+ WHEN("A DirectoryPath instance is requested from that string") {
+ auto maybe_directory_path{DirectoryPath::refine(path_to_directory)};
+
+ THEN("A DirectoryPath instance is not obtained") {
+ // REMARK: [temporary_directory_cleanup]
+ CHECK(!maybe_directory_path);
+ REQUIRE(QFile::setPermissions(path_to_directory, QFileDevice::WriteUser | QFileDevice::ReadUser | QFileDevice::ExeUser));
+ }
+ }
+ }
+
+ AND_GIVEN("That the directory represented by the path is not executable") {
+ REQUIRE(QFile::setPermissions(path_to_directory, QFileDevice::WriteOwner |
+ QFileDevice::ReadOwner |
+ QFileDevice::WriteGroup |
+ QFileDevice::ReadGroup |
+ QFileDevice::WriteOther |
+ QFileDevice::ReadOther));
+
+ WHEN("A DirectoryPath instance is requested from that string") {
+ auto maybe_directory_path{DirectoryPath::refine(path_to_directory)};
+
+ THEN("A DirectoryPath instance is not obtained") {
+ // REMARK: [temporary_directory_cleanup]
+ CHECK(!maybe_directory_path);
+ REQUIRE(QFile::setPermissions(path_to_directory, QFileDevice::WriteUser | QFileDevice::ReadUser | QFileDevice::ExeUser));
+ }
+ }
+ }
+
+ AND_GIVEN("That the directory represented by the path is readable and executable") {
+ REQUIRE(QFile::setPermissions(path_to_directory, QFileDevice::ReadOwner |
+ QFileDevice::ExeOwner |
+ QFileDevice::ReadGroup |
+ QFileDevice::ExeGroup |
+ QFileDevice::ReadOther |
+ QFileDevice::ExeOther));
+
+ WHEN("A DirectoryPath instance is requested from that string") {
+ auto maybe_directory_path{DirectoryPath::refine(path_to_directory)};
+
+ THEN("A DirectoryPath instance is obtained") {
+ // REMARK: [temporary_directory_cleanup]
+ // We restore all permission to
+ // ensure that the temporary directory can be
+ // automatically cleaned up.
+ CHECK(maybe_directory_path);
+ REQUIRE(QFile::setPermissions(path_to_directory, QFileDevice::WriteUser | QFileDevice::ReadUser | QFileDevice::ExeUser));
+ }
+ }
+ }
+ }
+ }
+
+#endif
+
+}
+
+SCENARIO("Inspecting the contents of a DirectoryPath", "[DirectoryPath][Boundaries][Canonicalization][Path][Contents]") {
+ GIVEN("Any string representing a path from which a DirectoryPath instance can be obtained") {
+ QString relative_path = GENERATE(take(100, qdoc::catch_generators::native_relative_directory_path()));
+ CAPTURE(relative_path);
+
+ QTemporaryDir working_directory{};
+ REQUIRE(working_directory.isValid());
+
+ QString path_to_directory = QFileInfo{working_directory.path() + "/" + relative_path}.filePath();
+
+ REQUIRE(QDir{working_directory.path()}.mkpath(relative_path));
+
+ AND_GIVEN("A DirectoryPath instance obtained from that path") {
+ auto maybe_directory_path{DirectoryPath::refine(path_to_directory)};
+ REQUIRE(maybe_directory_path);
+
+ auto directory_path{*maybe_directory_path};
+
+ WHEN("The path that the DirectoryPath contains is inspected") {
+ auto path{directory_path.value()};
+
+ THEN("That path is the same as the canonicazlied version of the path that the DirectoryPath was built from") {
+ REQUIRE(path == QFileInfo(path_to_directory).canonicalFilePath());
+ }
+ }
+ }
+ }
+}
diff --git a/src/qdoc/qdoc/tests/qdoc/boundaries/filesystem/catch_filepath.cpp b/src/qdoc/qdoc/tests/qdoc/boundaries/filesystem/catch_filepath.cpp
new file mode 100644
index 000000000..44d59017b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/qdoc/boundaries/filesystem/catch_filepath.cpp
@@ -0,0 +1,136 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <catch_conversions/qdoc_catch_conversions.h>
+
+#include <catch/catch.hpp>
+
+#include <qdoc/boundaries/filesystem/filepath.h>
+
+#include <catch_generators/generators/path_generator.h>
+
+#include <QFileInfo>
+#include <QTemporaryDir>
+#include <QDir>
+#include <QIODeviceBase>
+
+SCENARIO("Obtaining a FilePath", "[FilePath][Boundaries][Validation][Canonicalization][Path]") {
+
+ GIVEN("Any string representing a path that does not represent an existing element on the filesystem") {
+ QString path = GENERATE(take(100, filter([](auto path){ return !QFileInfo{path}.exists(); }, qdoc::catch_generators::native_path())));
+ CAPTURE(path);
+
+ WHEN("A FilePath instance is requested from that string") {
+ auto maybe_filepath{FilePath::refine(path)};
+
+ THEN("A FilePath instance is not obtained") {
+ REQUIRE(!maybe_filepath);
+ }
+ }
+ }
+
+ GIVEN("Any string representing a path to a directory") {
+ QString relative_path = GENERATE(take(100, qdoc::catch_generators::native_relative_directory_path()));
+ CAPTURE(relative_path);
+
+ QTemporaryDir working_directory{};
+ REQUIRE(working_directory.isValid());
+
+ QString path_to_directory = working_directory.path() + "/" + relative_path;
+
+ AND_GIVEN("That the path represents an existing directory on the filesystem") {
+ REQUIRE(QDir{working_directory.path()}.mkpath(relative_path));
+
+ WHEN("A FilePath instance is requested from that string") {
+ auto maybe_filepath{FilePath::refine(path_to_directory)};
+
+ THEN("A FilePath instance is not obtained") {
+ REQUIRE(!maybe_filepath);
+ }
+ }
+ }
+ }
+
+#if defined(Q_OS_LINUX) || defined(Q_OS_MACOS)
+
+ GIVEN("Any string representing a path to a file") {
+ QString relative_path = GENERATE(take(100, qdoc::catch_generators::native_relative_file_path()));
+ CAPTURE(relative_path);
+
+ QTemporaryDir working_directory{};
+ REQUIRE(working_directory.isValid());
+
+ QString path_to_file = working_directory.path() + "/" + relative_path;
+
+ AND_GIVEN("That the path represents an existing file on the filesystem") {
+ REQUIRE(QDir{working_directory.path()}.mkpath(QFileInfo{relative_path}.path()));
+ REQUIRE(QFile{path_to_file}.open(QIODeviceBase::ReadWrite | QIODeviceBase::NewOnly));
+
+ AND_GIVEN("That the file represented by the path is not readable") {
+ REQUIRE(QFile::setPermissions(path_to_file, QFileDevice::WriteOwner |
+ QFileDevice::ExeOwner |
+ QFileDevice::WriteGroup |
+ QFileDevice::ExeGroup |
+ QFileDevice::WriteOther |
+ QFileDevice::ExeOther));
+
+ WHEN("A FilePath instance is requested from that string") {
+ auto maybe_filepath{FilePath::refine(path_to_file)};
+
+ THEN("A FilePath instance is not obtained") {
+ // REMARK: [temporary_directory_cleanup]
+ CHECK(!maybe_filepath);
+ REQUIRE(QFile::setPermissions(path_to_file, QFileDevice::WriteUser | QFileDevice::ReadUser | QFileDevice::ExeUser));
+ }
+ }
+ }
+
+ AND_GIVEN("That the file represented by the path is readable") {
+ REQUIRE(QFile::setPermissions(path_to_file, QFileDevice::ReadOwner | QFileDevice::ReadGroup | QFileDevice::ReadOther));
+
+ WHEN("A FilePath instance is requested from that string") {
+ auto maybe_filepath{FilePath::refine(path_to_file)};
+
+ THEN("A FilePath instance is obtained") {
+ // REMARK: [temporary_directory_cleanup]
+ CHECK(maybe_filepath);
+ REQUIRE(QFile::setPermissions(path_to_file, QFileDevice::WriteUser | QFileDevice::ReadUser | QFileDevice::ExeUser));
+ }
+ }
+ }
+ }
+ }
+
+#endif
+
+}
+
+SCENARIO("Inspecting the contents of a FilePath", "[FilePath][Boundaries][Canonicalization][Path][Contents]") {
+ GIVEN("Any string representing a path from which a FilePath instance can be obtained") {
+ QString relative_path = GENERATE(take(100, qdoc::catch_generators::native_relative_file_path()));
+ CAPTURE(relative_path);
+
+ QTemporaryDir working_directory{};
+ REQUIRE(working_directory.isValid());
+
+ QString path_to_file = QFileInfo{working_directory.path() + "/" + relative_path}.filePath();
+
+ REQUIRE(QDir{working_directory.path()}.mkpath(QFileInfo{relative_path}.path()));
+ REQUIRE(QFile{path_to_file}.open(QIODeviceBase::ReadWrite | QIODeviceBase::NewOnly));
+
+ AND_GIVEN("A FilePath instance obtained from that path") {
+ auto maybe_filepath{FilePath::refine(path_to_file)};
+ REQUIRE(maybe_filepath);
+
+ auto filepath{*maybe_filepath};
+
+ WHEN("The path that the FilePath contains is inspected") {
+ auto path{filepath.value()};
+
+ THEN("That path is the same as the canonicazlied version of the path that the FilePath was built from") {
+ REQUIRE(path == QFileInfo(path_to_file).canonicalFilePath());
+ }
+ }
+ }
+ }
+}
diff --git a/src/qdoc/qdoc/tests/qdoc/filesystem/catch_fileresolver.cpp b/src/qdoc/qdoc/tests/qdoc/filesystem/catch_fileresolver.cpp
new file mode 100644
index 000000000..f9b5af66b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/qdoc/filesystem/catch_fileresolver.cpp
@@ -0,0 +1,307 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <catch_conversions/qdoc_catch_conversions.h>
+
+#include <catch/catch.hpp>
+
+#include <qdoc/filesystem/fileresolver.h>
+
+#include <catch_generators/generators/path_generator.h>
+
+#include <vector>
+#include <algorithm>
+#include <random>
+
+#include <QTemporaryDir>
+#include <QFileInfo>
+#include <QDir>
+#include <QIODeviceBase>
+
+SCENARIO("Inspecting the directories that will be used for searching", "[ResolvingFiles][Directory][Path][Canonicalization][Contents]") {
+ GIVEN("Some collection of paths representing existing directories on the filesystem") {
+ std::size_t directories_amount = GENERATE(take(10, random(2, 10)));
+
+ std::vector<QTemporaryDir> working_directories(directories_amount);
+
+ std::vector<DirectoryPath> directories;
+ directories.reserve(directories_amount);
+
+ std::transform(
+ working_directories.begin(), working_directories.end(),
+ std::back_inserter(directories),
+ [](auto& dir){ return *DirectoryPath::refine(dir.path()); }
+ );
+
+ AND_GIVEN("That the collection of those paths is ordered and contains no duplicates") {
+ std::sort(directories.begin(), directories.end());
+ directories.erase(std::unique(directories.begin(), directories.end()), directories.end());
+
+ WHEN("A mean of searching for files is obtained from that collection") {
+ FileResolver file_resolver{std::vector(directories)};
+
+ THEN("The collection of directories that will be used for searching is equivalent to the one from which a mean of searching for files was obtained") {
+ REQUIRE(file_resolver.get_search_directories() == directories);
+ }
+ }
+ }
+
+ AND_GIVEN("That the collection of those paths is potentially unordered but contains no duplicates") {
+ std::sort(directories.begin(), directories.end());
+ directories.erase(std::unique(directories.begin(), directories.end()), directories.end());
+
+ std::shuffle(directories.begin(), directories.end(), std::mt19937{std::random_device{}()});
+
+ WHEN("A mean of searching for files is obtained from that collection") {
+ FileResolver file_resolver{std::vector(directories)};
+
+ THEN("The collection of directories that will be used for searching is equivalent to the one from which a mean of searching for files was obtained if it was sorted") {
+ std::sort(directories.begin(), directories.end());
+
+ REQUIRE(file_resolver.get_search_directories() == directories);
+ }
+ }
+ }
+
+ AND_GIVEN("That the collection of those paths is ordered but contains duplicates") {
+ directories.reserve(directories.size());
+
+ std::transform(
+ working_directories.begin(), working_directories.end(),
+ std::back_inserter(directories),
+ [](auto& dir){ return *DirectoryPath::refine(dir.path()); }
+ );
+
+ std::sort(directories.begin(), directories.end());
+
+ WHEN("A mean of searching for files is obtained from that collection") {
+ FileResolver file_resolver{std::vector(directories)};
+
+ THEN("The collection of directories that will be used for searching is equivalent to the one from which a mean of searching for files was obtained if it contained no duplicates") {
+ directories.erase(std::unique(directories.begin(), directories.end()), directories.end());
+
+ REQUIRE(file_resolver.get_search_directories() == directories);
+ }
+ }
+ }
+
+ AND_GIVEN("That the collection of those paths is potentially unordered and contains duplicates") {
+ directories.reserve(directories.size());
+
+ std::transform(
+ working_directories.begin(), working_directories.end(),
+ std::back_inserter(directories),
+ [](auto& dir){ return *DirectoryPath::refine(dir.path()); }
+ );
+
+ std::shuffle(directories.begin(), directories.end(), std::mt19937{std::random_device{}()});
+
+ WHEN("A mean of searching for files is obtained from that collection") {
+ FileResolver file_resolver{std::vector(directories)};
+
+ THEN("The collection of directories that will be used for searching is equivalent to the one from which a mean of searching for files was obtained if it was sorted and it contained no duplicates") {
+ std::sort(directories.begin(), directories.end());
+ directories.erase(std::unique(directories.begin(), directories.end()), directories.end());
+
+ REQUIRE(file_resolver.get_search_directories() == directories);
+ }
+ }
+ }
+ }
+}
+
+SCENARIO("Finding a file based on some root search directories", "[ResolvingFiles][File][Path][Validation]") {
+ // TODO: Rewrite those tests under a single setup. Be careful of
+ // how this is done as Catch will rerun sections only under
+ // specific condition such that we may incur in collisions for the
+ // path if done incorrectly.
+ GIVEN("Some directory on the filesystem") {
+ QTemporaryDir working_directory{};
+ REQUIRE(working_directory.isValid());
+
+ DirectoryPath directory{*DirectoryPath::refine(working_directory.path())};
+
+ AND_GIVEN("A mean of searching for files based on that directory") {
+ FileResolver file_resolver{std::vector{directory}};
+
+ AND_GIVEN("A relative path that does not represent an element on the filesystem that is reachable from that directory") {
+ QString relative_path = GENERATE(filter([](auto& path){ return path != "." && path != ".."; }, take(100, qdoc::catch_generators::native_relative_path())));
+ CAPTURE(relative_path);
+
+ REQUIRE(!QFileInfo{working_directory.path() + '/' + relative_path}.exists());
+
+ WHEN("The relative path is used as a query to resolve a file") {
+ auto maybe_resolved_file{file_resolver.resolve(relative_path)};
+
+ THEN("The query cannot be resolved") {
+ REQUIRE(!maybe_resolved_file);
+ }
+ }
+ }
+ }
+ }
+
+ GIVEN("Some directory on the filesystem") {
+ QTemporaryDir working_directory{};
+ REQUIRE(working_directory.isValid());
+
+ DirectoryPath directory{*DirectoryPath::refine(working_directory.path())};
+
+ AND_GIVEN("A mean of searching for files based on that directory") {
+ FileResolver file_resolver{std::vector{directory}};
+
+ AND_GIVEN("A relative path that represents an existing directory on the filesystem that is reachable from that directory") {
+ QString relative_path = GENERATE(take(100, qdoc::catch_generators::native_relative_directory_path()));
+ CAPTURE(relative_path);
+
+ REQUIRE(QDir{working_directory.path()}.mkpath(relative_path));
+
+ WHEN("The relative path is used as a query to resolve a file") {
+ auto maybe_resolved_file{file_resolver.resolve(relative_path)};
+
+ THEN("The query cannot be resolved") {
+ REQUIRE(!maybe_resolved_file);
+ }
+ }
+ }
+ }
+ }
+
+
+ GIVEN("Some directory on the filesystem") {
+ QTemporaryDir working_directory{};
+ REQUIRE(working_directory.isValid());
+
+ DirectoryPath directory{*DirectoryPath::refine(working_directory.path())};
+
+ AND_GIVEN("A mean of searching for files based on that directory") {
+ FileResolver file_resolver{std::vector{directory}};
+
+ AND_GIVEN("A relative path that represents an existing file on the filesystem that is reachable from that directory") {
+ QString relative_path = GENERATE(take(100, qdoc::catch_generators::native_relative_file_path()));
+ CAPTURE(relative_path);
+
+ REQUIRE(QDir{working_directory.path()}.mkpath(QFileInfo{relative_path}.path()));
+ REQUIRE(QFile{working_directory.path() + "/" + relative_path}.open(QIODeviceBase::ReadWrite | QIODeviceBase::NewOnly));
+
+ WHEN("The relative path is used as a query to resolve a file") {
+ auto maybe_resolved_file{file_resolver.resolve(relative_path)};
+
+ THEN("The query can be resolved") {
+ REQUIRE(maybe_resolved_file);
+ }
+ }
+ }
+ }
+ }
+
+ GIVEN("Some directories on the filesystem") {
+ std::size_t directories_amount = GENERATE(take(10, random(2, 10)));
+
+ std::vector<QTemporaryDir> working_directories(directories_amount);
+ REQUIRE(std::all_of(working_directories.cbegin(), working_directories.cend(), [](auto& dir){ return dir.isValid(); }));
+
+ std::vector<DirectoryPath> directories;
+ directories.reserve(directories_amount);
+
+ std::transform(
+ working_directories.begin(), working_directories.end(),
+ std::back_inserter(directories),
+ [](auto& dir){ return *DirectoryPath::refine(dir.path()); }
+ );
+
+ AND_GIVEN("A relative path that represents an existing file on the filesystem that is reachable from exactly one of those directories") {
+ QString relative_path = GENERATE(take(10, qdoc::catch_generators::native_relative_file_path()));
+ CAPTURE(relative_path);
+
+ std::size_t containing_directory_index = GENERATE_COPY(take(1, random(std::size_t{0}, directories_amount - 1)));
+ CAPTURE(containing_directory_index);
+ CAPTURE(working_directories[containing_directory_index].path());
+
+ REQUIRE(QDir{working_directories[containing_directory_index].path()}.mkpath(QFileInfo{relative_path}.path()));
+ REQUIRE(QFile{working_directories[containing_directory_index].path() + "/" + relative_path}.open(QIODeviceBase::ReadWrite | QIODeviceBase::NewOnly));
+
+ AND_GIVEN("A mean of searching for files based on all of those directories") {
+ FileResolver file_resolver{std::move(directories)};
+
+ WHEN("The relative path is used as a query to resolve a file") {
+ auto maybe_resolved_file{file_resolver.resolve(relative_path)};
+
+ THEN("The query can be resolved") {
+ REQUIRE(maybe_resolved_file);
+ }
+ }
+ }
+ }
+ }
+}
+
+SCENARIO("Inspecting the content of a file that was resolved", "[ResolvingFiles][File][Path][Validation][Contents]") {
+ GIVEN("A mean of resolving files based on some directory") {
+ QTemporaryDir working_directory{};
+ REQUIRE(working_directory.isValid());
+
+ DirectoryPath directory{*DirectoryPath::refine(working_directory.path())};
+
+ FileResolver file_resolver{std::vector{directory}};
+
+ AND_GIVEN("A relative path that represents an existing file on the filesystem that is reachable from that directory") {
+ QString relative_path = GENERATE(take(100, qdoc::catch_generators::native_relative_file_path()));
+ CAPTURE(relative_path);
+
+ REQUIRE(QDir{working_directory.path()}.mkpath(QFileInfo{relative_path}.path()));
+ REQUIRE(QFile{working_directory.path() + "/" + relative_path}.open(QIODeviceBase::ReadWrite | QIODeviceBase::NewOnly));
+
+ WHEN("A file is resolved using that path as a query") {
+ auto resolved_file{*file_resolver.resolve(relative_path)};
+
+ THEN("The resolved file contains the query that was used to resolve it") {
+ REQUIRE(resolved_file.get_query() == relative_path);
+ }
+
+ THEN("The resolved file contains a canonicalized path pointing to the resolved file") {
+ REQUIRE(resolved_file.get_path() == QFileInfo{working_directory.path() + "/" + relative_path}.canonicalFilePath());
+ }
+ }
+ }
+ }
+}
+
+TEST_CASE(
+ "When a query can be resolved in more than one search directory, it is resolved in the greatest lower bound of the set of directories",
+ "[ResolvingFiles][File][Path][Validation][SpecialCase]"
+) {
+ std::size_t directories_amount = GENERATE(take(10, random(2, 10)));
+
+ QString relative_path = GENERATE(take(10, qdoc::catch_generators::native_relative_file_path()));
+ CAPTURE(relative_path);
+
+ std::vector<QTemporaryDir> working_directories(directories_amount);
+ REQUIRE(std::all_of(working_directories.cbegin(), working_directories.cend(), [](auto& dir){ return dir.isValid(); }));
+
+ for (const auto& directory : working_directories) {
+ CAPTURE(directory.path());
+ REQUIRE(QDir{directory.path()}.mkpath(QFileInfo{relative_path}.path()));
+ REQUIRE(QFile{directory.path() + "/" + relative_path}.open(QIODeviceBase::ReadWrite | QIODeviceBase::NewOnly));
+ }
+
+ std::vector<DirectoryPath> directories;
+ directories.reserve(directories_amount);
+
+ std::transform(
+ working_directories.begin(), working_directories.end(),
+ std::back_inserter(directories),
+ [](auto& dir){ return *DirectoryPath::refine(dir.path()); }
+ );
+
+ FileResolver file_resolver{std::move(directories)};
+ auto resolved_file{*file_resolver.resolve(relative_path)};
+
+ auto& greatest_lower_bound{*std::min_element(file_resolver.get_search_directories().cbegin(), file_resolver.get_search_directories().cend())};
+
+ REQUIRE(
+ resolved_file.get_path()
+ ==
+ QFileInfo{greatest_lower_bound.value() + "/" + relative_path}.canonicalFilePath()
+ );
+}
diff --git a/src/qdoc/qdoc/tests/qdoc/main.cpp b/src/qdoc/qdoc/tests/qdoc/main.cpp
new file mode 100644
index 000000000..5f85451f6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/qdoc/main.cpp
@@ -0,0 +1,12 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#define CATCH_CONFIG_RUNNER
+#include <catch/catch.hpp>
+
+// A custom main was provided to avoid linking errors when using minGW
+// that were appearing in CI.
+// See https://github.com/catchorg/Catch2/issues/1287
+int main(int argc, char* argv[]) {
+ return Catch::Session().run(argc, argv);
+}
diff --git a/src/qdoc/qdoc/tests/qdoccommandlineparser/CMakeLists.txt b/src/qdoc/qdoc/tests/qdoccommandlineparser/CMakeLists.txt
new file mode 100644
index 000000000..4adb376d9
--- /dev/null
+++ b/src/qdoc/qdoc/tests/qdoccommandlineparser/CMakeLists.txt
@@ -0,0 +1,41 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+
+#####################################################################
+## tst_qdoccommandlineparser Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdoccommandlineparser LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qdoccommandlineparser
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ SOURCES
+ ${CMAKE_CURRENT_LIST_DIR}/tst_qdoccommandlineparser.cpp
+
+ ${CMAKE_CURRENT_LIST_DIR}/../../src/qdoc/qdoccommandlineparser.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/../../src/qdoc/utilities.cpp
+ INCLUDE_DIRECTORIES
+ ${CMAKE_CURRENT_LIST_DIR}/../../src/
+)
+
+# Resources:
+set_source_files_properties("${CMAKE_CURRENT_LIST_DIR}/tst_arguments.txt"
+ PROPERTIES QT_RESOURCE_ALIAS "tst_arguments.txt"
+)
+
+set(tst_qdoccommandlineparser_resource_files
+ "${CMAKE_CURRENT_LIST_DIR}/tst_arguments.txt"
+)
+
+qt_internal_add_resource(tst_qdoccommandlineparser "tst_qdoccommandlineparser"
+ PREFIX
+ "/"
+ FILES
+ ${tst_qdoccommandlineparser_resource_files}
+)
+
diff --git a/tests/auto/qdoc/qdoccommandlineparser/tst_arguments.txt b/src/qdoc/qdoc/tests/qdoccommandlineparser/tst_arguments.txt
index 5797de394..5797de394 100644
--- a/tests/auto/qdoc/qdoccommandlineparser/tst_arguments.txt
+++ b/src/qdoc/qdoc/tests/qdoccommandlineparser/tst_arguments.txt
diff --git a/src/qdoc/qdoc/tests/qdoccommandlineparser/tst_qdoccommandlineparser.cpp b/src/qdoc/qdoc/tests/qdoccommandlineparser/tst_qdoccommandlineparser.cpp
new file mode 100644
index 000000000..e78de0425
--- /dev/null
+++ b/src/qdoc/qdoc/tests/qdoccommandlineparser/tst_qdoccommandlineparser.cpp
@@ -0,0 +1,161 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "qdoc/qdoccommandlineparser.h"
+
+#include <QtCore/qstringlist.h>
+#include <QtTest/QtTest>
+
+class tst_QDocCommandLineParser : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void defaultConstructor();
+ void process();
+ void argumentsFromCommandLineAndFile();
+};
+
+void tst_QDocCommandLineParser::defaultConstructor()
+{
+ QDocCommandLineParser parser;
+
+ QVERIFY2(parser.applicationDescription() == QStringLiteral("Qt documentation generator"),
+ "The application description is incorrect.");
+}
+
+void tst_QDocCommandLineParser::process()
+{
+ const QStringList arguments =
+ QStringLiteral("/src/qt5/qtbase/bin/qdoc "
+ "-outputdir "
+ "/src/qt5/qtbase/doc/qtgamepad "
+ "-installdir "
+ "/src/qt5/qtbase/doc "
+ "/src/qt5/qtgamepad/src/gamepad/doc/qtgamepad.qdocconf "
+ "-prepare "
+ "-indexdir "
+ "/src/qt5/qtbase/doc "
+ "-no-link-errors "
+ "-I. "
+ "-I/src/qt5/qtbase/include "
+ "-I/src/qt5/qtbase/include/QtGamepad "
+ "-I/src/qt5/qtbase/include/QtGamepad/5.14.0 "
+ "-I/src/qt5/qtbase/include/QtGamepad/5.14.0/QtGamepad "
+ "-I/src/qt5/qtbase/include/QtCore/5.14.0 "
+ "-I/src/qt5/qtbase/include/QtCore/5.14.0/QtCore "
+ "-I/src/qt5/qtbase/include/QtGui "
+ "-I/src/qt5/qtbase/include/QtCore "
+ "-I.moc "
+ "-isystem "
+ "/usr/include/libdrm "
+ "-I/src/qt5/qtbase/mkspecs/linux-g++"
+ ).split(QString(" "));
+ const QStringList expectedIncludePaths =
+ QStringLiteral(". "
+ "/src/qt5/qtbase/include "
+ "/src/qt5/qtbase/include/QtGamepad "
+ "/src/qt5/qtbase/include/QtGamepad/5.14.0 "
+ "/src/qt5/qtbase/include/QtGamepad/5.14.0/QtGamepad "
+ "/src/qt5/qtbase/include/QtCore/5.14.0 "
+ "/src/qt5/qtbase/include/QtCore/5.14.0/QtCore "
+ "/src/qt5/qtbase/include/QtGui "
+ "/src/qt5/qtbase/include/QtCore "
+ ".moc "
+ "/src/qt5/qtbase/mkspecs/linux-g++"
+ ).split(QString(" "));
+ const QStringList expectedSystemIncludePath(QStringLiteral("/usr/include/libdrm"));
+
+ QDocCommandLineParser parser;
+ parser.process(arguments);
+
+ QVERIFY(parser.isSet(parser.outputDirOption));
+ QCOMPARE(parser.value(parser.outputDirOption), QStringLiteral("/src/qt5/qtbase/doc/qtgamepad"));
+ QVERIFY(parser.isSet(parser.installDirOption));
+ QCOMPARE(parser.value(parser.installDirOption), QStringLiteral("/src/qt5/qtbase/doc"));
+ QVERIFY(parser.isSet(parser.prepareOption));
+ QVERIFY(parser.isSet(parser.indexDirOption));
+ QCOMPARE(parser.value(parser.indexDirOption), QStringLiteral("/src/qt5/qtbase/doc"));
+ QVERIFY(parser.isSet(parser.noLinkErrorsOption));
+ QVERIFY(parser.isSet(parser.includePathOption));
+ QCOMPARE(parser.values(parser.includePathOption), expectedIncludePaths);
+ QVERIFY(parser.isSet(parser.includePathSystemOption));
+ QCOMPARE(parser.values(parser.includePathSystemOption), expectedSystemIncludePath);
+
+ QVERIFY(!parser.isSet(parser.timestampsOption));
+ QVERIFY(!parser.isSet(parser.dependsOption));
+ QVERIFY(!parser.isSet(parser.highlightingOption));
+ QVERIFY(!parser.isSet(parser.showInternalOption));
+ QVERIFY(!parser.isSet(parser.redirectDocumentationToDevNullOption));
+ QVERIFY(!parser.isSet(parser.noExamplesOption));
+ QVERIFY(!parser.isSet(parser.autoLinkErrorsOption));
+ QVERIFY(!parser.isSet(parser.debugOption));
+ QVERIFY(!parser.isSet(parser.generateOption));
+ QVERIFY(!parser.isSet(parser.logProgressOption));
+ QVERIFY(!parser.isSet(parser.singleExecOption));
+ QVERIFY(!parser.isSet(parser.frameworkOption));
+
+ const QStringList expectedPositionalArgument = {
+ QStringLiteral("/src/qt5/qtgamepad/src/gamepad/doc/qtgamepad.qdocconf")
+ };
+ QCOMPARE(parser.positionalArguments(), expectedPositionalArgument);
+}
+
+void tst_QDocCommandLineParser::argumentsFromCommandLineAndFile()
+{
+ const QString atFilePath("@" + QFINDTESTDATA("tst_arguments.txt"));
+ const QStringList arguments { "/src/qt5/qtbase/bin/qdoc", atFilePath };
+
+ QDocCommandLineParser parser;
+ parser.process(arguments);
+
+ const QStringList expectedIncludePaths =
+ QStringLiteral(". "
+ "/src/qt5/qtbase/include "
+ "/src/qt5/qtbase/include/QtGamepad "
+ "/src/qt5/qtbase/include/QtGamepad/5.14.0 "
+ "/src/qt5/qtbase/include/QtGamepad/5.14.0/QtGamepad "
+ "/src/qt5/qtbase/include/QtCore/5.14.0 "
+ "/src/qt5/qtbase/include/QtCore/5.14.0/QtCore "
+ "/src/qt5/qtbase/include/QtGui "
+ "/src/qt5/qtbase/include/QtCore "
+ ".moc "
+ "/src/qt5/qtbase/mkspecs/linux-g++"
+ ).split(QString(" "));
+ const QStringList expectedSystemIncludePath(QStringLiteral("/usr/include/libdrm"));
+ const QStringList expectedPositionalArgument = {
+ QStringLiteral("/src/qt5/qtgamepad/src/gamepad/doc/qtgamepad.qdocconf")
+ };
+
+ QVERIFY(parser.isSet(parser.outputDirOption));
+ QCOMPARE(parser.value(parser.outputDirOption), QStringLiteral("/src/qt5/qtbase/doc/qtgamepad"));
+ QVERIFY(parser.isSet(parser.installDirOption));
+ QCOMPARE(parser.value(parser.installDirOption), QStringLiteral("/src/qt5/qtbase/doc"));
+ QVERIFY(parser.isSet(parser.prepareOption));
+ QVERIFY(parser.isSet(parser.indexDirOption));
+ QCOMPARE(parser.value(parser.indexDirOption), QStringLiteral("/src/qt5/qtbase/doc"));
+ QVERIFY(parser.isSet(parser.noLinkErrorsOption));
+ QVERIFY(parser.isSet(parser.includePathOption));
+ QCOMPARE(parser.values(parser.includePathOption), expectedIncludePaths);
+ QVERIFY(parser.isSet(parser.includePathSystemOption));
+ QCOMPARE(parser.values(parser.includePathSystemOption), expectedSystemIncludePath);
+
+ QVERIFY(!parser.isSet(parser.timestampsOption));
+ QVERIFY(!parser.isSet(parser.dependsOption));
+ QVERIFY(!parser.isSet(parser.highlightingOption));
+ QVERIFY(!parser.isSet(parser.showInternalOption));
+ QVERIFY(!parser.isSet(parser.redirectDocumentationToDevNullOption));
+ QVERIFY(!parser.isSet(parser.noExamplesOption));
+ QVERIFY(!parser.isSet(parser.autoLinkErrorsOption));
+ QVERIFY(!parser.isSet(parser.debugOption));
+ QVERIFY(!parser.isSet(parser.generateOption));
+ QVERIFY(!parser.isSet(parser.logProgressOption));
+ QVERIFY(!parser.isSet(parser.singleExecOption));
+ QVERIFY(!parser.isSet(parser.frameworkOption));
+
+ QCOMPARE(parser.positionalArguments(), expectedPositionalArgument);
+}
+
+QTEST_APPLESS_MAIN(tst_QDocCommandLineParser)
+
+#include "tst_qdoccommandlineparser.moc"
diff --git a/src/qdoc/qdoc/tests/utilities/CMakeLists.txt b/src/qdoc/qdoc/tests/utilities/CMakeLists.txt
new file mode 100644
index 000000000..dd2883d32
--- /dev/null
+++ b/src/qdoc/qdoc/tests/utilities/CMakeLists.txt
@@ -0,0 +1,21 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_utilities Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_utilities LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_utilities
+ SOURCES
+ ${CMAKE_CURRENT_LIST_DIR}/tst_utilities.cpp
+
+ ${CMAKE_CURRENT_LIST_DIR}/../../src/qdoc/utilities.cpp
+ INCLUDE_DIRECTORIES
+ ${CMAKE_CURRENT_LIST_DIR}/../../src/
+)
diff --git a/src/qdoc/qdoc/tests/utilities/tst_utilities.cpp b/src/qdoc/qdoc/tests/utilities/tst_utilities.cpp
new file mode 100644
index 000000000..160e4d15c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/utilities/tst_utilities.cpp
@@ -0,0 +1,134 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "qdoc/utilities.h"
+
+#include <QtTest/QtTest>
+
+class tst_Utilities : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void loggingCategoryName();
+ void loggingCategoryDefaults();
+ void startDebugging();
+ void stopDebugging();
+ void debugging();
+ void callSeparatorForOneWord();
+ void callSeparatorForMoreThanOneWord();
+ void callCommaForOneWord();
+ void callCommaForTwoWords();
+ void callCommaForThreeWords();
+};
+
+void tst_Utilities::loggingCategoryName()
+{
+ const QString expected = "qt.qdoc";
+ QCOMPARE(lcQdoc().categoryName(), expected);
+}
+
+void tst_Utilities::loggingCategoryDefaults()
+{
+ QVERIFY(lcQdoc().isCriticalEnabled());
+ QVERIFY(lcQdoc().isWarningEnabled());
+ QVERIFY(!lcQdoc().isDebugEnabled());
+ QVERIFY(lcQdoc().isInfoEnabled());
+}
+
+void tst_Utilities::startDebugging()
+{
+ QVERIFY(!lcQdoc().isDebugEnabled());
+ Utilities::startDebugging("test");
+ QVERIFY(lcQdoc().isDebugEnabled());
+}
+
+void tst_Utilities::stopDebugging()
+{
+ Utilities::startDebugging("test");
+ QVERIFY(lcQdoc().isDebugEnabled());
+ Utilities::stopDebugging("test");
+ QVERIFY(!lcQdoc().isDebugEnabled());
+}
+
+void tst_Utilities::debugging()
+{
+ QVERIFY(!lcQdoc().isDebugEnabled());
+ QVERIFY(!Utilities::debugging());
+ Utilities::startDebugging("test");
+ QVERIFY(lcQdoc().isDebugEnabled());
+ QVERIFY(Utilities::debugging());
+}
+
+void tst_Utilities::callSeparatorForOneWord()
+{
+ const QStringList listOfWords { "one" };
+ const QString expected = QStringLiteral("one.");
+
+ int index = 0;
+ QString result;
+ for (const auto &word : listOfWords) {
+ result.append(word);
+ result.append(Utilities::separator(index++, listOfWords.size()));
+ }
+ QCOMPARE(result, expected);
+}
+
+void tst_Utilities::callSeparatorForMoreThanOneWord()
+{
+ const QStringList listOfWords { "one", "two" };
+ const QString expected = QStringLiteral("one and two.");
+
+ int index = 0;
+ QString result;
+ for (const auto &word : listOfWords) {
+ result.append(word);
+ result.append(Utilities::separator(index++, listOfWords.size()));
+ }
+ QCOMPARE(result, expected);
+}
+
+void tst_Utilities::callCommaForOneWord()
+{
+ const QStringList listOfWords { "one" };
+ const QString expected = QStringLiteral("one");
+
+ int index = 0;
+ QString result;
+ for (const auto &word : listOfWords) {
+ result.append(word);
+ result.append(Utilities::comma(index++, listOfWords.size()));
+ }
+ QCOMPARE(result, expected);
+}
+void tst_Utilities::callCommaForTwoWords()
+{
+ const QStringList listOfWords { "one", "two" };
+ const QString expected = QStringLiteral("one and two");
+
+ int index = 0;
+ QString result;
+ for (const auto &word : listOfWords) {
+ result.append(word);
+ result.append(Utilities::comma(index++, listOfWords.size()));
+ }
+ QCOMPARE(result, expected);
+}
+
+void tst_Utilities::callCommaForThreeWords()
+{
+ const QStringList listOfWords { "one", "two", "three" };
+ const QString expected = QStringLiteral("one, two, and three");
+
+ int index = 0;
+ QString result;
+ for (const auto &word : listOfWords) {
+ result.append(word);
+ result.append(Utilities::comma(index++, listOfWords.size()));
+ }
+ QCOMPARE(result, expected);
+}
+
+QTEST_APPLESS_MAIN(tst_Utilities)
+
+#include "tst_utilities.moc"
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/CMakeLists.txt b/src/qdoc/qdoc/tests/validateqdocoutputfiles/CMakeLists.txt
new file mode 100644
index 000000000..2d7416f82
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/CMakeLists.txt
@@ -0,0 +1,44 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_validateQdocOutputFiles Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_validateQdocOutputFiles LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_validateQdocOutputFiles
+ SOURCES
+ ${CMAKE_CURRENT_LIST_DIR}/tst_validateqdocoutputfiles.cpp
+)
+
+# Write relevant Qt include path to a file, to be read in by QDoc
+set(config_subfolder "")
+get_cmake_property(is_multi_config GENERATOR_IS_MULTI_CONFIG)
+if(is_multi_config)
+ set(config_subfolder "$<CONFIG>/")
+endif()
+set(includepathsfile "${CMAKE_CURRENT_BINARY_DIR}/${config_subfolder}qdocincludepaths.inc")
+set(framework_path "\n")
+
+find_package(Qt6 COMPONENTS Core REQUIRED)
+if(Qt6Core_FOUND)
+ get_target_property(include_paths Qt6::Core INTERFACE_INCLUDE_DIRECTORIES)
+endif()
+
+while(include_paths)
+ list(POP_BACK include_paths inc_path)
+ if(inc_path MATCHES "(.+)/QtCore\.framework$")
+ string(APPEND framework_path "-F${CMAKE_MATCH_1}")
+ break()
+ endif()
+endwhile()
+
+set (include_paths "$<TARGET_PROPERTY:tst_validateQdocOutputFiles,INCLUDE_DIRECTORIES>")
+file(GENERATE OUTPUT ${includepathsfile} CONTENT "-I$<JOIN:${include_paths},\n-I>${framework_path}")
+target_compile_definitions(tst_validateQdocOutputFiles PRIVATE DOCINCPATH="${includepathsfile}")
+add_dependencies(tst_validateQdocOutputFiles Qt::qdoc)
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/README.md b/src/qdoc/qdoc/tests/validateqdocoutputfiles/README.md
new file mode 100644
index 000000000..728cbee62
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/README.md
@@ -0,0 +1,82 @@
+<!--
+ Copyright (C) 2024 The Qt Company Ltd.
+ SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+-->
+
+# QDoc output test
+This is a test that validates the files QDoc generates. It is not a test for
+QDoc itself. The test calls the qdoc executable for each project in the
+`testdata` directory (see [Test project structure](# Test project structure),
+below), and then compares the output to that in the `expected` directory for
+the test project. Each test is identified in the test output by the name of the
+test project directory *and* the name of the .qdocconf-file.
+
+The test creates a new temporary directory for each test project. The
+comparison is done by running `git diff` on the content in this temporary
+directory (the output directory) and the contents in the test's `expected`
+directory. A non-zero exit code fails the test for that project, and the test
+includes the diff in its output if this happens.
+
+## How to add a new test
+1. Create a new directory in the `testdata` directory. The name of the new
+ directory should be descriptive of the test project.
+2. Create a `.qdocconf` file in the new directory. See
+ [The .qdocconf file](# The .qdocconf file) below for further details.
+3. Add the necessary files (.qdoc, .h/.cpp, .qml, etc) so that the project
+ can be built in a meaningful manner.
+4. Run QDoc on the project.
+5. Verify that the output looks correct.
+6. Copy the output into `[testdata/[new test directory]/expected`.
+7. Run the test executable and verify that the test output includes a **PASS**
+ line for the new test-case.
+8. Push your change upstream.
+
+## Update the expected content for all tests
+If you make a change to QDoc that causes significant changes in output, you may
+need to update the expected output for many, or even all, tests. If you set the
+environment variable `QDOC_REGENERATE_TESTDATA=1` before running the test, all
+current test data will be removed, and QDoc will be run on each project to
+generate new output. Note, however, that the comparison per project is skipped
+in this scenario.
+
+## Test project structure
+The `testdata` directory is where the test looks for projects to test. Each
+project has its own directory, a `qdocconf` file, and an `expected`
+directory that contains the expected file output from QDoc.
+
+The project directory must contain a .qdocconf whose name matches that of the
+project directory, otherwise the project won't be picked up by the test.
+
+### The .qdocconf file
+The `.qdocconf` file contains the configuration necessary to build the
+QDoc project in the directory. Observe the following:
+- **Important!** Make sure to set `locationinfo = false` to avoid test failures
+ due to differences in the location information in the generated output.
+- Test projects should be warning free, so set `warninglimit.enabled = true`.
+- The name of the .qdocconf-file must be identical as that of the directory
+ that contains it. This means that for a project **foo**, it should go into
+ `testdata/foo` and the configuration file should be
+ `testdata/foo/foo.qdocconf`.
+- Any other `.qdocconf` file will not be picked up explicitly by the test.
+ This means that for a test project **foo** that resides in `testdata/foo`,
+ `testdata/foo/foo.qdocconf` will be treated as a test-case, while
+ `testdata/foo/bar.qdocconf` will not. However, `foo.qdocconf` may contain
+ `include(bar.qdocconf)`, and this will work as expected.
+- The `warninglimit` should be set to the number of warnings expected
+ from QDoc for that specific project, if any are to be expected at all.
+- You probably want to configure all output formats, otherwise only the HTML
+ output will be generated. The test will compare all output formats that are
+ generated to the expected output, so remember to specify the output directory
+ for each format. By convention, the output directories are named after the
+ format, for example `html`, `docbook`, `webxml`, etc.
+- Place the sources for your new test in a subdirectory of the test project
+ directory. By convention, the sources are placed in a directory named `src`.
+
+### The `expected` directory
+The `expected` directory contains the expected output from QDoc
+for the project. If QDoc generates an empty directory (for example, it
+always creates the `images/` directory for a project, whether
+the project contains any images or not), that directory isn't tracked
+in the `expected` directory, as **git** doesn't track directories, only
+files.
+
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/bug80259.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/bug80259.qdocconf
new file mode 100644
index 000000000..2b7a1e5f4
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/bug80259.qdocconf
@@ -0,0 +1,31 @@
+project = TestModule
+
+moduleheader = TestModule.h
+
+headerdirs = ./src/inc
+sourcedirs = ./src
+includepaths += ./src/inc/testmodule
+
+sources.fileextensions = "*.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+outputdir = doc
+outputformats = HTML WebXML
+
+# images
+imagedirs = ./src/images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+# By default, use -outputdir directly, no subdir.
+# outputsubdir '.' matches the root of expected_output/
+HTML.nosubdirs = true
+HTML.outputsubdir = html
+
+WebXML.nosubdirs = true
+WebXML.outputsubdir = webxml
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/first-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/first-members.html
new file mode 100644
index 000000000..db22018c5
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/first-members.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- main.cpp -->
+ <title>List of All Members for First | TestModule</title>
+</head>
+<body>
+<li>First</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for First</h1>
+<p>This is the complete list of members for <a href="first.html">First</a>, including inherited members.</p>
+<ul>
+<li class="fn" translate="no">class <span class="name"><b><a href="first-nested.html" translate="no">Nested</a></b></span></li>
+</ul>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/first-nested.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/first-nested.html
new file mode 100644
index 000000000..9a8266e7a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/first-nested.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- main.cpp -->
+ <title>Nested Class | TestModule</title>
+</head>
+<body>
+<li>Nested</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">Nested Class</h1>
+<span class="small-subtitle" translate="no">class <a href="first.html" translate="no">First</a>::Nested</span>
+<!-- $$$Nested-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<p>This is a nested class</p>
+</div>
+<!-- @@@Nested -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/first.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/first.html
new file mode 100644
index 000000000..74033f353
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/first.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- main.cpp -->
+ <title>First Struct | TestModule</title>
+</head>
+<body>
+<li>First</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#public-types">Public Types</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">First Struct</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;First&gt;</span></td></tr>
+</table></div>
+<ul>
+<li><a href="first-members.html">List of all members, including inherited members</a></li>
+</ul>
+<h2 id="public-types">Public Types</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> class </td><td class="memItemRight bottomAlign"><b><a href="first-nested.html" translate="no">Nested</a></b></td></tr>
+</table></div>
+<!-- $$$First-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<p>This is a first class</p>
+</div>
+<!-- @@@First -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/index.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/index.html
new file mode 100644
index 000000000..f934cfdca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/index.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- index.qdoc -->
+ <title>doc index | TestModule</title>
+</head>
+<body>
+<h1 class="title">doc index</h1>
+<!-- $$$index.html-description -->
+<div class="descr" id="details">
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="first.html">First</a></p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="first-nested.html">First::Nested</a></p></td></tr>
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="second.html">Second</a></p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="third.html">Third</a></p></td></tr>
+</table></div>
+</div>
+<!-- @@@index.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/second.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/second.html
new file mode 100644
index 000000000..93f492cec
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/second.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- main.cpp -->
+ <title>Second Class | TestModule</title>
+</head>
+<body>
+<li>Second</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">Second Class</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;Second&gt;</span></td></tr>
+</table></div>
+<!-- $$$Second-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<p>This is a second class</p>
+</div>
+<!-- @@@Second -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/testmodule.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/testmodule.index
new file mode 100644
index 000000000..6e8bf310f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/testmodule.index
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="TestModule Reference Documentation" version="" project="TestModule">
+ <namespace name="" status="active" access="public" module="testmodule">
+ <struct name="First" href="first.html" status="active" access="public" location="bbb.h" documented="true" module="TestModule">
+ <class name="Nested" fullname="First::Nested" href="first-nested.html" status="active" access="public" location="bbb.h" documented="true" module="TestModule"/>
+ </struct>
+ <class name="Second" href="second.html" status="active" access="public" location="ccc.h" documented="true" module="TestModule"/>
+ <class name="Third" href="third.html" status="active" access="public" location="aaa.h" documented="true" module="TestModule"/>
+ <page name="index.html" href="index.html" status="active" location="index.qdoc" documented="true" subtype="page" title="doc index" fulltitle="doc index" subtitle=""/>
+ <module name="TestModule" href="testmodule-module.html" status="internal" seen="false" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/third.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/third.html
new file mode 100644
index 000000000..cc8f68404
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/html/third.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- main.cpp -->
+ <title>Third Class | TestModule</title>
+</head>
+<body>
+<li>Third</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">Third Class</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;Third&gt;</span></td></tr>
+</table></div>
+<!-- $$$Third-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<p>This is a third class</p>
+</div>
+<!-- @@@Third -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/first-nested.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/first-nested.webxml
new file mode 100644
index 000000000..842570c13
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/first-nested.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="Nested" fullname="First::Nested" href="first-nested.html" status="active" access="public" location="bbb.h" documented="true" module="TestModule">
+ <description>
+ <para>This is a nested class</para>
+ </description>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/first.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/first.webxml
new file mode 100644
index 000000000..526bbbe73
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/first.webxml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <struct name="First" href="first.html" status="active" access="public" location="bbb.h" documented="true" module="TestModule">
+ <description>
+ <para>This is a first class</para>
+ </description>
+ <class name="Nested" fullname="First::Nested" href="first-nested.html" status="active" access="public" location="bbb.h" documented="true" module="TestModule">
+ <description>
+ <para>This is a nested class</para>
+ </description>
+ </class>
+ </struct>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/index.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/index.webxml
new file mode 100644
index 000000000..659d98f22
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/index.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="index.html" href="index.html" status="active" location="index.qdoc" documented="true" subtype="page" title="doc index" fulltitle="doc index" subtitle="">
+ <description>
+ <generatedlist contents="classesbymodule TestModule"/>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/html/second.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/second.webxml
index 9ecd3c2fe..9ecd3c2fe 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/html/second.webxml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/second.webxml
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/testmodule.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/testmodule.index
new file mode 100644
index 000000000..6e8bf310f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/testmodule.index
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="TestModule Reference Documentation" version="" project="TestModule">
+ <namespace name="" status="active" access="public" module="testmodule">
+ <struct name="First" href="first.html" status="active" access="public" location="bbb.h" documented="true" module="TestModule">
+ <class name="Nested" fullname="First::Nested" href="first-nested.html" status="active" access="public" location="bbb.h" documented="true" module="TestModule"/>
+ </struct>
+ <class name="Second" href="second.html" status="active" access="public" location="ccc.h" documented="true" module="TestModule"/>
+ <class name="Third" href="third.html" status="active" access="public" location="aaa.h" documented="true" module="TestModule"/>
+ <page name="index.html" href="index.html" status="active" location="index.qdoc" documented="true" subtype="page" title="doc index" fulltitle="doc index" subtitle=""/>
+ <module name="TestModule" href="testmodule-module.html" status="internal" seen="false" title=""/>
+ </namespace>
+</INDEX>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/html/third.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/third.webxml
index 529ffd896..529ffd896 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/html/third.webxml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/expected/webxml/third.webxml
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/inc/testmodule/TestModule.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/inc/testmodule/TestModule.h
new file mode 100644
index 000000000..90adda3e2
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/inc/testmodule/TestModule.h
@@ -0,0 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "aaa.h"
+#include "bbb.h"
+#include "ccc.h"
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/inc/testmodule/aaa.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/inc/testmodule/aaa.h
new file mode 100644
index 000000000..5051d60a9
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/inc/testmodule/aaa.h
@@ -0,0 +1,7 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+class Third
+{
+};
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/inc/testmodule/bbb.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/inc/testmodule/bbb.h
new file mode 100644
index 000000000..c17223c2d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/inc/testmodule/bbb.h
@@ -0,0 +1,8 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+struct First
+{
+ class Nested {};
+};
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/inc/testmodule/ccc.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/inc/testmodule/ccc.h
new file mode 100644
index 000000000..8fa00e3e8
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/inc/testmodule/ccc.h
@@ -0,0 +1,7 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+class Second
+{
+};
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/main.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/main.cpp
new file mode 100644
index 000000000..bc92fa921
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/main.cpp
@@ -0,0 +1,29 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+/*!
+\class First
+\inmodule TestModule
+
+This is a first class
+*/
+
+/*!
+\class First::Nested
+\inmodule TestModule
+
+This is a nested class
+*/
+
+/*!
+\class Second
+\inmodule TestModule
+
+This is a second class
+*/
+
+/*!
+\class Third
+\inmodule TestModule
+
+This is a third class
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/qdoc/index.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/qdoc/index.qdoc
new file mode 100644
index 000000000..ae270f378
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/bug80259/src/qdoc/index.qdoc
@@ -0,0 +1,10 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+/*!
+ \page index.html
+ \title doc index
+
+ \generatelist {classesbymodule TestModule}
+
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/cmakedocumentation.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/cmakedocumentation.qdocconf
new file mode 100644
index 000000000..c62f4938e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/cmakedocumentation.qdocconf
@@ -0,0 +1,29 @@
+project = cmakedocumentation
+
+headerdirs = ./src
+sourcedirs = ./src
+exampledirs = ./src
+
+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
+
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/docbook/car.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/docbook/car.xml
new file mode 100644
index 000000000..ee439cdd0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/docbook/car.xml
@@ -0,0 +1,42 @@
+<?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 Class</db:title>
+<db:productname>cmakedocumentation</db:productname>
+<db:titleabbrev>cmakedocumentation Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>Represents a model of a car.</db:para>
+<db:para>This class was introduced in Qt 6.6.6.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>Car</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since</db:term>
+<db:listitem>
+<db:para>Qt 6.6.6</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>CMake</db:term>
+<db:listitem>
+<db:para>find_package(Qt6 REQUIRED COMPONENTS TestCar)</db:para>
+<db:para>target_link_libraries(mytarget PRIVATE Qt6::TestCar)</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>qmake</db:term>
+<db:listitem>
+<db:para>QT += testcar</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/cmakedocumentation/expected/docbook/engine.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/docbook/engine.xml
new file mode 100644
index 000000000..06fcbd4bd
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/docbook/engine.xml
@@ -0,0 +1,42 @@
+<?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>Engine Class</db:title>
+<db:productname>cmakedocumentation</db:productname>
+<db:titleabbrev>cmakedocumentation Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>Represents a model of an engine.</db:para>
+<db:para>This class was introduced in Qt 6.6.6.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>Engine</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since</db:term>
+<db:listitem>
+<db:para>Qt 6.6.6</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>CMake</db:term>
+<db:listitem>
+<db:para>find_package(Qt6 REQUIRED COMPONENTS TestCar)</db:para>
+<db:para>target_link_libraries(mytarget PRIVATE Qt6::TestCarPrivate)</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>qmake</db:term>
+<db:listitem>
+<db:para>QT += testcar-private</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/cmakedocumentation/expected/docbook/testcar-module.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/docbook/testcar-module.xml
new file mode 100644
index 000000000..03f17d47f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/docbook/testcar-module.xml
@@ -0,0 +1,23 @@
+<?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>cmakedocumentation</db:productname>
+<db:titleabbrev>cmakedocumentation Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>This module was introduced in Qt 6.6.6.</db:para>
+</db:abstract>
+</db:info>
+<db:para>This module was introduced in Qt 6.6.6.</db:para>
+<db:section xml:id="classes">
+<db:title>Classes</db:title>
+<db:variablelist role="classes">
+<db:varlistentry>
+<db:term><db:link xlink:href="car.xml" xlink:role="class">Car</db:link></db:term>
+<db:listitem>
+<db:para>Represents a model of a car.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/docbook/testcarprivate-module.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/docbook/testcarprivate-module.xml
new file mode 100644
index 000000000..f89a2679b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/docbook/testcarprivate-module.xml
@@ -0,0 +1,23 @@
+<?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>cmakedocumentation</db:productname>
+<db:titleabbrev>cmakedocumentation Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>This module was introduced in Qt 6.6.6.</db:para>
+</db:abstract>
+</db:info>
+<db:para>This module was introduced in Qt 6.6.6.</db:para>
+<db:section xml:id="classes">
+<db:title>Classes</db:title>
+<db:variablelist role="classes">
+<db:varlistentry>
+<db:term><db:link xlink:href="engine.xml" xlink:role="class">Engine</db:link></db:term>
+<db:listitem>
+<db:para>Represents a model of an engine.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/html/car.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/html/car.html
new file mode 100644
index 000000000..c7ab54dee
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/html/car.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- car.cpp -->
+ <meta name="description" content="Represents a model of a car.">
+ <title>Car Class | cmakedocumentation</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>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">Car Class</h1>
+<!-- $$$Car-brief -->
+<p>Represents a model of a car. <a href="#details">More...</a></p>
+<!-- @@@Car -->
+<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;Car&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS TestCar) <br/>
+target_link_libraries(mytarget PRIVATE Qt6::TestCar)</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> qmake:</td><td class="memItemRight bottomAlign"> QT += testcar</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> Since:</td><td class="memItemRight bottomAlign"> Qt 6.6.6</td></tr>
+</table></div>
+<!-- $$$Car-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Car -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/html/cmakedocumentation.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/html/cmakedocumentation.index
new file mode 100644
index 000000000..87ef31650
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/html/cmakedocumentation.index
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="cmakedocumentation Reference Documentation" version="" project="cmakedocumentation">
+ <namespace name="" status="active" access="public" module="cmakedocumentation">
+ <class name="Car" href="car.html" status="active" access="public" location="car.h" since="6.6.6" documented="true" module="TestCar" brief="Represents a model of a car">
+ <function name="drive" fullname="Car::drive" href="car.html#drive" status="active" access="private" location="car.h" documented="true" meta="plain" type="void" brief="Drives the car" signature="void drive()"/>
+ </class>
+ <class name="Engine" href="engine.html" status="active" access="public" location="car.h" since="6.6.6" documented="true" module="TestCarPrivate" brief="Represents a model of an engine">
+ <function name="start" fullname="Engine::start" href="engine.html#start" status="active" access="private" location="car.h" documented="true" meta="plain" type="void" brief="Starts the engine" signature="void start()"/>
+ <function name="stop" fullname="Engine::stop" href="engine.html#stop" status="active" access="private" location="car.h" documented="true" meta="plain" type="void" brief="Stops the engine" signature="void stop()"/>
+ </class>
+ <module name="TestCar" href="testcar-module.html" status="active" since="6.6.6" documented="true" seen="true" title=""/>
+ <module name="TestCarPrivate" href="testcarprivate-module.html" status="active" since="6.6.6" documented="true" seen="true" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/html/engine.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/html/engine.html
new file mode 100644
index 000000000..36a2a97da
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/html/engine.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- car.cpp -->
+ <meta name="description" content="Represents a model of an engine.">
+ <title>Engine Class | cmakedocumentation</title>
+</head>
+<body>
+<li>Engine</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">Engine Class</h1>
+<!-- $$$Engine-brief -->
+<p>Represents a model of an engine. <a href="#details">More...</a></p>
+<!-- @@@Engine -->
+<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;Engine&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS TestCar) <br/>
+target_link_libraries(mytarget PRIVATE Qt6::TestCarPrivate)</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> qmake:</td><td class="memItemRight bottomAlign"> QT += testcar-private</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> Since:</td><td class="memItemRight bottomAlign"> Qt 6.6.6</td></tr>
+</table></div>
+<!-- $$$Engine-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Engine -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/html/testcar-module.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/html/testcar-module.html
new file mode 100644
index 000000000..5b579cc8a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/html/testcar-module.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- car.cpp -->
+ <title>cmakedocumentation</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>
+<p>This module was introduced in Qt 6.6.6.</p>
+<h2 id="classes">Classes</h2>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="car.html">Car</a></p></td><td class="tblDescr"><p>Represents a model of a car</p></td></tr>
+</table></div>
+<!-- $$$TestCar-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@TestCar -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/html/testcarprivate-module.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/html/testcarprivate-module.html
new file mode 100644
index 000000000..762fe3193
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/html/testcarprivate-module.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- car.cpp -->
+ <title>cmakedocumentation</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>
+<p>This module was introduced in Qt 6.6.6.</p>
+<h2 id="classes">Classes</h2>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="engine.html">Engine</a></p></td><td class="tblDescr"><p>Represents a model of an engine</p></td></tr>
+</table></div>
+<!-- $$$TestCarPrivate-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@TestCarPrivate -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/webxml/car.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/webxml/car.webxml
new file mode 100644
index 000000000..76725762e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/webxml/car.webxml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="Car" href="car.html" status="active" access="public" location="car.h" since="6.6.6" documented="true" module="TestCar" brief="Represents a model of a car">
+ <description>
+ <brief>Represents a model of a car.</brief>
+ </description>
+ <function name="drive" fullname="Car::drive" href="car.html#drive" status="active" access="private" location="car.h" documented="true" meta="plain" type="void" brief="Drives the car" signature="void drive()">
+ <description>
+ <brief>Drives the car.</brief>
+ </description>
+ </function>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/webxml/cmakedocumentation.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/webxml/cmakedocumentation.index
new file mode 100644
index 000000000..87ef31650
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/webxml/cmakedocumentation.index
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="cmakedocumentation Reference Documentation" version="" project="cmakedocumentation">
+ <namespace name="" status="active" access="public" module="cmakedocumentation">
+ <class name="Car" href="car.html" status="active" access="public" location="car.h" since="6.6.6" documented="true" module="TestCar" brief="Represents a model of a car">
+ <function name="drive" fullname="Car::drive" href="car.html#drive" status="active" access="private" location="car.h" documented="true" meta="plain" type="void" brief="Drives the car" signature="void drive()"/>
+ </class>
+ <class name="Engine" href="engine.html" status="active" access="public" location="car.h" since="6.6.6" documented="true" module="TestCarPrivate" brief="Represents a model of an engine">
+ <function name="start" fullname="Engine::start" href="engine.html#start" status="active" access="private" location="car.h" documented="true" meta="plain" type="void" brief="Starts the engine" signature="void start()"/>
+ <function name="stop" fullname="Engine::stop" href="engine.html#stop" status="active" access="private" location="car.h" documented="true" meta="plain" type="void" brief="Stops the engine" signature="void stop()"/>
+ </class>
+ <module name="TestCar" href="testcar-module.html" status="active" since="6.6.6" documented="true" seen="true" title=""/>
+ <module name="TestCarPrivate" href="testcarprivate-module.html" status="active" since="6.6.6" documented="true" seen="true" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/webxml/engine.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/webxml/engine.webxml
new file mode 100644
index 000000000..4eee94b89
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/webxml/engine.webxml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="Engine" href="engine.html" status="active" access="public" location="car.h" since="6.6.6" documented="true" module="TestCarPrivate" brief="Represents a model of an engine">
+ <description>
+ <brief>Represents a model of an engine.</brief>
+ </description>
+ <function name="start" fullname="Engine::start" href="engine.html#start" status="active" access="private" location="car.h" documented="true" meta="plain" type="void" brief="Starts the engine" signature="void start()">
+ <description>
+ <brief>Starts the engine.</brief>
+ </description>
+ </function>
+ <function name="stop" fullname="Engine::stop" href="engine.html#stop" status="active" access="private" location="car.h" documented="true" meta="plain" type="void" brief="Stops the engine" signature="void stop()">
+ <description>
+ <brief>Stops the engine.</brief>
+ </description>
+ </function>
+ </class>
+ </document>
+</WebXML>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/html/testcpp-module.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/webxml/testcar-module.webxml
index 5d24b3077..5d24b3077 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/html/testcpp-module.webxml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/webxml/testcar-module.webxml
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/html/uicomponents-qmlmodule.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/webxml/testcarprivate-module.webxml
index 5d24b3077..5d24b3077 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/html/uicomponents-qmlmodule.webxml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/expected/webxml/testcarprivate-module.webxml
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/src/car.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/src/car.cpp
new file mode 100644
index 000000000..78823d7e3
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/src/car.cpp
@@ -0,0 +1,46 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+#include "car.h"
+
+/*!
+ \module TestCar
+ \since 6.6.6
+ \qtvariable testcar
+ \qtcmakepackage TestCar
+*/
+
+/*!
+ \module TestCarPrivate
+ \since 6.6.6
+ \qtvariable testcar-private
+ \qtcmakepackage TestCar
+ \qtcmaketargetitem TestCarPrivate
+*/
+
+/*!
+ \class Car
+ \inmodule TestCar
+ \brief Represents a model of a car.
+*/
+
+/*!
+ \class Engine
+ \inmodule TestCarPrivate
+ \brief Represents a model of an engine.
+*/
+
+/*!
+ \fn void Car::drive()
+ \brief Drives the car.
+*/
+
+/*!
+ \fn void Engine::start()
+ \brief Starts the engine.
+*/
+
+/*!
+ \fn void Engine::stop()
+ \brief Stops the engine.
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/src/car.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/src/car.h
new file mode 100644
index 000000000..c0203b07c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cmakedocumentation/src/car.h
@@ -0,0 +1,17 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+#ifndef CAR_H
+#define CAR_H
+
+class Car {
+ void drive() {};
+};
+
+class Engine {
+ void start() {};
+ void stop() {};
+};
+
+
+#endif // CAR_H
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/comprehensiveproject.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/comprehensiveproject.qdocconf
new file mode 100644
index 000000000..e6751e2b7
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/comprehensiveproject.qdocconf
@@ -0,0 +1,105 @@
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ./src/images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+outputformats = HTML WebXML DocBook
+HTML.nosubdirs = true
+HTML.outputsubdir = html
+WebXML.nosubdirs = true
+WebXML.outputsubdir = webxml
+DocBook.nosubdirs = true
+DocBook.outputsubdir = docbook
+DocBook.its = true
+DocBook.usedocbookextensions = true
+
+includepaths += -I./src
+
+headerdirs = ./src \
+ ./src/qml
+sourcedirs = ./src \
+ ./src/qml
+exampledirs = ./src/snippets \
+ ./src/qml
+
+macro.CMDFN = \\\\fn
+macro.nothing = \\dontdocument ()
+macro.testnoautolist = \\if defined(test_noautolist)\n\\noautolist\n\\endif
+
+navigation.cppclassespage = "QDoc Test C++ Classes"
+
+defines += test_ignoresince
+defines += test_nestedmacro
+defines += test_properties
+
+macro.ver = "\1"
+macro.ver.match = "^(\\d+\\.\\d+)"
+macro.versionnote.HTML = "<p><b>This \1 was introduced in version \2.</b></p>\n"
+macro.versionnote.DocBook = "<db:para>This \1 was introduced in version \2.</db:para>\n"
+
+moduleheader = TestCPP
+
+project = Test
+description = "A test project for QDoc build artifacts"
+
+examples.fileextensions = "*.qml *.cpp"
+
+macro.begincomment = "\\c{/*}"
+macro.QDocTestVer = "1.1"
+
+navigation.qmltypespage = "QDoc.Test QML Module"
+navigation.qmltypestitle = "Types"
+warninglimit += 1
+
+manifestmeta.examplecategories = "Application Examples" \
+ "Desktop" \
+ "Mobile" \
+ "Embedded"
+tagfile = testtagfile.tags
+version = 6.2.11
+
+examplesinstallpath = test
+
+exampledirs += ./src/examples
+
+excludedirs += ./src/examples/demos/demo/excludes
+
+# Configure .qhp generation
+qhp.projects = Test
+
+qhp.Test.file = test.qhp
+qhp.Test.namespace = org.qt-project.test.001
+qhp.Test.virtualFolder = test
+qhp.Test.indexTitle = UI Components
+qhp.Test.indexRoot =
+
+qhp.Test.subprojects = test classes qmltypes undefined
+qhp.Test.subprojects.test.title = Test
+qhp.Test.subprojects.test.indexTitle = UI Components
+qhp.Test.subprojects.test.selectors = doc:page fake:example module qmlmodule
+qhp.Test.subprojects.test.sortPages = true
+
+qhp.Test.subprojects.classes.title = Classes
+qhp.Test.subprojects.classes.indexTitle = QDoc Test C++ Classes
+qhp.Test.subprojects.classes.selectors = class namespace doc:headerfile boop:whatever
+qhp.Test.subprojects.classes.sortPages = true
+
+qhp.Test.subprojects.qmltypes.title = QML Types
+qhp.Test.subprojects.qmltypes.indexTitle = UI Components
+qhp.Test.subprojects.qmltypes.selectors = qmlmodule:UIComponents,QDoc.Test
+qhp.Test.subprojects.qmltypes.sortPages = true
+
+# Add some meta-data to the example
+manifestmeta.filters = test
+
+manifestmeta.test.names = *
+manifestmeta.test.attributes = isTest:true
+manifestmeta.test.tags = test
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/autolinking.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/autolinking.xml
new file mode 100644
index 000000000..1fde6fac7
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/autolinking.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title>Autolinking</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:section xml:id="testqdoc">
+<db:title>TestQDoc</db:title>
+<db:para>The string <db:link xlink:href="testqdoc.xml">TestQDoc</db:link> links to the C++ namespace unless linking explicitly, <db:link xlink:href="autolinking.xml#testqdoc">like this</db:link>, or <db:link xlink:href="testqdoc.xml">this</db:link>. Also,</db:para>
+<db:para>Autolinks:</db:para>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-testderived.xml">TestQDoc::TestDerived</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+<db:para>Explicit links:</db:para>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-testderived.xml">TestQDoc::TestDerived</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="obsolete-classes.xml#testqdoc">Obsolete Classes#TestQDoc</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+<db:section xml:id="someprop">
+<db:title>someProp</db:title>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/classes.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/classes.xml
new file mode 100644
index 000000000..68d7a4616
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/classes.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" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title>Classes</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:variablelist role="annotatedclasses">
+<db:varlistentry>
+<db:term><db:link xlink:href="seenclass.xml" xlink:role="class">SeenClass</db:link></db:term>
+<db:listitem>
+<db:para>A public but undocumented class.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="testqdoc-test.xml" xlink:role="class">TestQDoc::Test</db:link></db:term>
+<db:listitem>
+<db:para>A class in a namespace.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="testqdoc-testderived.xml" xlink:role="class">TestQDoc::TestDerived</db:link></db:term>
+<db:listitem>
+<db:para>A class in a namespace, derived from Test.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/cpptypes.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/cpptypes.xml
new file mode 100644
index 000000000..727d59fd0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/cpptypes.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title>Test C++ Types</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:anchor xml:id="details"/>
+<db:itemizedlist role="testgroup">
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml" xlink:role="class">TestQDoc::Test</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<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>
+<db:variablelist role="members">
+<db:varlistentry>
+<db:term><db:link xlink:href="testqdoc-test.xml" xlink:role="class">TestQDoc::Test</db:link></db:term>
+<db:listitem>
+<db:para>A class in a namespace.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/crossmoduleref.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/crossmoduleref.xml
new file mode 100644
index 000000000..19e6e28f2
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/crossmoduleref.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">CrossModuleRef Namespace</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>Namespace that has documented functions in multiple modules.</db:para>
+<db:para>This namespace was introduced in Qt 3.0.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist its:translate="no">
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>CrossModuleRef</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since</db:term>
+<db:listitem>
+<db:para>Qt 3.0</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>CMake</db:term>
+<db:listitem>
+<db:para>find_package(Qt6 REQUIRED COMPONENTS QDocTest)</db:para>
+<db:para>target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>qmake</db:term>
+<db:listitem>
+<db:para>QT += testcpp</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="function-documentation">
+<db:title>Function Documentation</db:title>
+<db:section xml:id="documentMe">
+<db:title its:translate="no">void CrossModuleRef::documentMe()</db:title>
+<db:methodsynopsis>
+<db:void/>
+<db:methodname>documentMe</db:methodname>
+<db:void/>
+<db:synopsisinfo role="meta">plain</db:synopsisinfo>
+<db:synopsisinfo role="signature">void documentMe()</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>Document me!</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/images/leonardo-da-vinci.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/images/leonardo-da-vinci.png
new file mode 100644
index 000000000..854acb4ca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/images/leonardo-da-vinci.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/obsolete-classes.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/obsolete-classes.xml
new file mode 100644
index 000000000..f90bcc5ca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/obsolete-classes.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title>Obsolete Classes</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:section xml:id="classes-with-obsolete-members">
+<db:title>Classes with obsolete members</db:title>
+<db:variablelist role="obsoletecppmembers">
+<db:varlistentry>
+<db:term><db:emphasis role="bold">T</db:emphasis></db:term>
+<db:listitem>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml" role="class">Test</db:link> (<db:link xlink:href="testqdoc.xml" xlink:role="namespace">TestQDoc</db:link>)</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-testderived.xml" role="class">TestDerived</db:link> (<db:link xlink:href="testqdoc.xml" xlink:role="namespace">TestQDoc</db:link>)</db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="testqdoc">
+<db:title>TestQDoc</db:title>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qdoc-test-qmlmodule.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qdoc-test-qmlmodule.xml
new file mode 100644
index 000000000..793dc3ea1
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qdoc-test-qmlmodule.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">QDoc.Test QML Module</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>QML Types for the Test module.</db:para>
+<db:para><db:emphasis role="bold">This module is under development and is subject to change.</db:emphasis></db:para>
+<db:para>This module was introduced in Qt 1.1.</db:para>
+</db:abstract>
+</db:info>
+<db:para><db:emphasis role="bold">This module is under development and is subject to change.</db:emphasis></db:para>
+<db:para>This module was introduced in Qt 1.1.</db:para>
+<db:anchor xml:id="details"/>
+<db:variablelist role="members">
+<db:varlistentry>
+<db:term><db:link xlink:href="qml-qdoc-test-abstractparent.xml" xlink:role="">AbstractParent</db:link></db:term>
+<db:listitem>
+<db:para>Abstract base QML type.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="qml-qdoc-test-child.xml" xlink:role="">Child</db:link></db:term>
+<db:listitem>
+<db:para>A Child inheriting its parent.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="qml-qdoc-test-doctest.xml" xlink:role="">DocTest</db:link></db:term>
+<db:listitem>
+<db:para>Represents a doc test case.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="qml-qdoc-test-type.xml" xlink:role="">Type</db:link></db:term>
+<db:listitem>
+<db:para>A QML type documented in a .cpp file.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="qml-qdoc-test-yetanotherchild.xml" xlink:role="">YetAnotherChild</db:link></db:term>
+<db:listitem>
+<db:para>A type inheriting from internal abstract parent.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="qml-int.xml" xlink:role="">int</db:link></db:term>
+<db:listitem>
+<db:para>An integer value type.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-int.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-int.xml
new file mode 100644
index 000000000..f5e99f6ab
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-int.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">int QML Value Type</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>An integer value type.</db:para>
+<db:para>This type was introduced in Qt 1.1.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist its:translate="no">
+<db:varlistentry>
+<db:term>Import Statement</db:term>
+<db:listitem>
+<db:para>import QDoc.Test 1.1</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since:</db:term>
+<db:listitem>
+<db:para>Qt 1.1</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="method-documentation">
+<db:title>Method Documentation</db:title>
+<db:section xml:id="abs-method">
+<db:title>int abs()</db:title>
+<db:para>Returns the absolute value of this integer.</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-abstractparent.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-abstractparent.xml
new file mode 100644
index 000000000..695c7bfe4
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-abstractparent.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">AbstractParent QML Type</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>Abstract base QML type.</db:para>
+<db:para>This type was introduced in Qt 1.1.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist its:translate="no">
+<db:varlistentry>
+<db:term>Import Statement</db:term>
+<db:listitem>
+<db:para>import QDoc.Test 1.1</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since:</db:term>
+<db:listitem>
+<db:para>Qt 1.1</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Inherited By:</db:term>
+<db:listitem>
+<db:para><db:link xlink:href="qml-qdoc-test-child.xml" xlink:role="">Child</db:link></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="property-documentation">
+<db:title>Property Documentation</db:title>
+<db:section xml:id="children-prop">
+<db:title>[default] children : list&lt;Child&gt;</db:title>
+<db:fieldsynopsis>
+<db:type>list&lt;Child&gt;</db:type>
+<db:varname>children</db:varname>
+<db:modifier>writable</db:modifier>
+<db:modifier>[default]</db:modifier>
+
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>Children of the type.</db:para>
+</db:section>
+<db:section xml:id="name-prop">
+<db:title>name : string</db:title>
+<db:fieldsynopsis>
+<db:type>string</db:type>
+<db:varname>name</db:varname>
+<db:modifier>writable</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>Name of this parent.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="method-documentation">
+<db:title>Method Documentation</db:title>
+<db:section xml:id="name-method">
+<db:title>void name()</db:title>
+<db:para>Name all children with random names.</db:para>
+</db:section>
+<db:section xml:id="name-method-1">
+<db:title>void name(Child <db:emphasis>child</db:emphasis>, <db:emphasis>name</db:emphasis>)</db:title>
+<db:para>Name a <db:code its:translate="no" role="parameter">child</db:code> using <db:code its:translate="no" role="parameter">name</db:code>.</db:para>
+</db:section>
+<db:section xml:id="rear-method">
+<db:title>void rear(Child <db:emphasis>child</db:emphasis>, var <db:emphasis>method</db:emphasis> = Strict)</db:title>
+<db:para>Do some abstract parenting on <db:code its:translate="no" role="parameter">child</db:code> using a specific <db:code its:translate="no" role="parameter">method</db:code>.</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-child.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-child.xml
new file mode 100644
index 000000000..26a78038e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-child.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">Child QML Type</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A Child inheriting its parent.</db:para>
+<db:para>This type was introduced in Qt 1.1.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist its:translate="no">
+<db:varlistentry>
+<db:term>Import Statement</db:term>
+<db:listitem>
+<db:para>import QDoc.Test 1.1</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since:</db:term>
+<db:listitem>
+<db:para>Qt 1.1</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Inherits:</db:term>
+<db:listitem>
+<db:para><db:link xlink:href="">AbstractParent</db:link></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="property-documentation">
+<db:title>Property Documentation</db:title>
+<db:section xml:id="children-prop">
+<db:title>[default] children : list&lt;Child&gt;</db:title>
+<db:fieldsynopsis>
+<db:type>list&lt;Child&gt;</db:type>
+<db:varname>children</db:varname>
+<db:modifier>writable</db:modifier>
+<db:modifier>[default]</db:modifier>
+
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>Children of the type.</db:para>
+</db:section>
+<db:section xml:id="name-prop">
+<db:title>name : string</db:title>
+<db:fieldsynopsis>
+<db:type>string</db:type>
+<db:varname>name</db:varname>
+<db:modifier>writable</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>Name of this child.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="method-documentation">
+<db:title>Method Documentation</db:title>
+<db:section xml:id="name-method">
+<db:title>void name(Child <db:emphasis>child</db:emphasis>, <db:emphasis>name</db:emphasis>)</db:title>
+<db:para>Name a <db:code its:translate="no" role="parameter">child</db:code> of this child using <db:code its:translate="no" role="parameter">name</db:code>.</db:para>
+</db:section>
+<db:section xml:id="name-method">
+<db:title>void name()</db:title>
+<db:para>Name all children with random names.</db:para>
+</db:section>
+<db:section xml:id="rear-method">
+<db:title>void rear(Child <db:emphasis>child</db:emphasis>, var <db:emphasis>method</db:emphasis> = Strict)</db:title>
+<db:para>Do some abstract parenting on <db:code its:translate="no" role="parameter">child</db:code> using a specific <db:code its:translate="no" role="parameter">method</db:code>.</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-doctest.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-doctest.xml
new file mode 100644
index 000000000..9a021a6fc
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-doctest.xml
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">DocTest QML Type</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>Represents a doc test case.</db:para>
+<db:para>This type was introduced in QDoc.Test 0.9.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist its:translate="no">
+<db:varlistentry>
+<db:term>Import Statement</db:term>
+<db:listitem>
+<db:para>import QDoc.Test 1.1</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since:</db:term>
+<db:listitem>
+<db:para>QDoc.Test 0.9</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:section xml:id="introduction">
+<db:title>Introduction</db:title>
+<db:para>A documentation test case, itself documented inline in DocTest.qml.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="property-documentation">
+<db:title>Property Documentation</db:title>
+<db:section xml:id="active-prop">
+<db:title>[default: true] active : bool</db:title>
+<db:fieldsynopsis>
+<db:type>bool</db:type>
+<db:varname>active</db:varname>
+<db:modifier>writable</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>Whether the test is active.</db:para>
+<db:section>
+<db:title>See Also</db:title>
+<db:para><db:emphasis>See also </db:emphasis>
+<db:simplelist type="vert" role="see-also">
+<db:member><db:link xlink:href="qml-qdoc-test-doctest.xml#name-prop">name</db:link></db:member>
+</db:simplelist>
+</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="name-prop">
+<db:title>[required] name : string</db:title>
+<db:fieldsynopsis>
+<db:type>string</db:type>
+<db:varname>name</db:varname>
+<db:modifier>writable</db:modifier>
+<db:modifier>required</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>Name of the test.</db:para>
+<db:programlisting language="qml" its:translate="no">DocTest {
+ name: &amp;quot;test&amp;quot;
+ // ...
+}
+</db:programlisting>
+</db:section>
+</db:section>
+<db:section xml:id="signal-documentation">
+<db:title>Signal Documentation</db:title>
+<db:section xml:id="completed-signal">
+<db:title>completed()</db:title>
+<db:note>
+<db:para>The corresponding handler is <db:code>onCompleted</db:code>.</db:para>
+</db:note>
+</db:section>
+<db:section xml:id="foo-signal">
+<db:title>foo(var <db:emphasis>bar</db:emphasis>)</db:title>
+<db:para>Signal with parameter <db:code its:translate="no" role="parameter">bar</db:code>.</db:para>
+<db:note>
+<db:para>The corresponding handler is <db:code>onFoo</db:code>.</db:para>
+</db:note>
+</db:section>
+<db:section xml:id="itsHappening-signal">
+<db:title>itsHappening(bool <db:emphasis>really</db:emphasis>)</db:title>
+<db:para>Signals that something is <db:code its:translate="no" role="parameter">really</db:code> happening.</db:para>
+<db:note>
+<db:para>The corresponding handler is <db:code>onItsHappening</db:code>.</db:para>
+</db:note>
+</db:section>
+</db:section>
+<db:section xml:id="method-documentation">
+<db:title>Method Documentation</db:title>
+<db:section xml:id="fail-method">
+<db:title>[since QDoc.Test 1.0] fail(<db:emphasis>message</db:emphasis> = &quot;oops&quot;)</db:title>
+<db:para>Fails the current test case, with the optional <db:code its:translate="no" role="parameter">message</db:code>.</db:para>
+<db:para>This method was introduced in QDoc.Test 1.0.</db:para>
+</db:section>
+<db:section xml:id="fail_hard-method">
+<db:title>fail_hard(<db:emphasis>msg</db:emphasis> = &quot;facepalm&quot;, <db:emphasis>option</db:emphasis> = 123)</db:title>
+<db:para>Fails the current test case, hard.</db:para>
+<db:itemizedlist>
+<db:listitem>
+<db:para>Prints out <db:code its:translate="no" role="parameter">msg</db:code>.</db:para>
+</db:listitem>
+<db:listitem>
+<db:para>Accepts a random <db:code its:translate="no" role="parameter">option</db:code>.</db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-oldtype.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-oldtype.xml
new file mode 100644
index 000000000..e2d1059b4
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-oldtype.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">OldType QML Type</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>Deprecated old type.</db:para>
+<db:para><db:emphasis role="bold">This type is deprecated since QDoc.Test 1.0. We strongly advise against using it in new code.</db:emphasis></db:para>
+<db:para>This type was introduced in Qt 1.1.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist its:translate="no">
+<db:varlistentry>
+<db:term>Import Statement</db:term>
+<db:listitem>
+<db:para>import QDoc.Test 1.1</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since:</db:term>
+<db:listitem>
+<db:para>Qt 1.1</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Status:</db:term>
+<db:listitem>
+<db:para>Deprecated since 1.0</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:para><db:emphasis role="bold">This type is deprecated since QDoc.Test 1.0. We strongly advise against using it in new code.</db:emphasis></db:para>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+</db:section>
+</db:article>
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
new file mode 100644
index 000000000..176385ad8
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-type.xml
@@ -0,0 +1,237 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">Type QML Type</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A QML type documented in a .cpp file.</db:para>
+<db:para>This type was introduced in Qt 1.1.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist its:translate="no">
+<db:varlistentry>
+<db:term>Import Statement</db:term>
+<db:listitem>
+<db:para>import QDoc.Test 1.1</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since:</db:term>
+<db:listitem>
+<db:para>Qt 1.1</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Instantiates:</db:term>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml">Test</db:link></db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Status:</db:term>
+<db:listitem>
+<db:para>&lt;Work In Progress&gt;</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="property-documentation">
+<db:title>Property Documentation</db:title>
+<db:section xml:id="fifth-prop">
+<db:title>fifth : int</db:title>
+<db:fieldsynopsis>
+<db:type>int</db:type>
+<db:varname>fifth</db:varname>
+<db:modifier>writable</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:bridgehead renderas="sect2">fourth : int</db:bridgehead><db:fieldsynopsis>
+<db:type>int</db:type>
+<db:varname>fourth</db:varname>
+<db:modifier>writable</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>A group of properties sharing a documentation comment.</db:para>
+</db:section>
+<db:section xml:id="group-prop">
+<db:title>group group</db:title>
+<db:bridgehead renderas="sect2" xml:id="group.first-prop">group.first : int</db:bridgehead>
+<db:fieldsynopsis>
+<db:type>int</db:type>
+<db:varname>group.first</db:varname>
+<db:modifier>writable</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:bridgehead renderas="sect2" xml:id="group.second-prop">group.second : int</db:bridgehead>
+<db:fieldsynopsis>
+<db:type>int</db:type>
+<db:varname>group.second</db:varname>
+<db:modifier>writable</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:bridgehead renderas="sect2" xml:id="group.third-prop">group.third : int</db:bridgehead>
+<db:fieldsynopsis>
+<db:type>int</db:type>
+<db:varname>group.third</db:varname>
+<db:modifier>writable</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>A property group.</db:para>
+</db:section>
+<db:section xml:id="id-prop">
+<db:title>[read-only] id : int</db:title>
+<db:fieldsynopsis>
+<db:type>int</db:type>
+<db:varname>id</db:varname>
+<db:modifier>[read-only]</db:modifier>
+
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>A read-only property.</db:para>
+</db:section>
+<db:section xml:id="name-prop">
+<db:title>[required] name : string</db:title>
+<db:fieldsynopsis>
+<db:type>string</db:type>
+<db:varname>name</db:varname>
+<db:modifier>writable</db:modifier>
+<db:modifier>required</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>Name of the Test.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="attached-property-documentation">
+<db:title>Attached Property Documentation</db:title>
+<db:section xml:id="type-attached-prop">
+<db:title>[default: Type.NoType] Type.type : enumeration</db:title>
+<db:fieldsynopsis>
+<db:type>enumeration</db:type>
+<db:varname>Type.type</db:varname>
+<db:modifier>attached</db:modifier>
+<db:modifier>writable</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:informaltable>
+<db:thead>
+<db:tr>
+<db:th>Constant</db:th>
+<db:th>Description</db:th>
+</db:tr>
+</db:thead>
+<db:tr>
+<db:td>
+<db:para its:translate="no">Type.NoType</db:para>
+</db:td>
+<db:td>
+<db:para>Nothing</db:para>
+</db:td>
+</db:tr>
+<db:tr>
+<db:td>
+<db:para its:translate="no">Type.SomeType</db:para>
+</db:td>
+<db:td>
+<db:para>Something</db:para>
+</db:td>
+</db:tr>
+</db:informaltable>
+</db:section>
+</db:section>
+<db:section xml:id="signal-documentation">
+<db:title>Signal Documentation</db:title>
+<db:section xml:id="completed-signal">
+<db:title>completed(int <db:emphasis>status</db:emphasis>)</db:title>
+<db:para>This signal is emitted when the operation completed with <db:code its:translate="no" role="parameter">status</db:code>.</db:para>
+<db:note>
+<db:para>The corresponding handler is <db:code>onCompleted</db:code>.</db:para>
+</db:note>
+</db:section>
+<db:section xml:id="group.created-signal">
+<db:title>group.created()</db:title>
+<db:para>This signal is prefixed with <db:emphasis>group</db:emphasis>.</db:para>
+<db:note>
+<db:para>The corresponding handler is <db:code>group.onCreated</db:code>.</db:para>
+</db:note>
+</db:section>
+</db:section>
+<db:section xml:id="attached-signal-documentation">
+<db:title>Attached Signal Documentation</db:title>
+<db:section xml:id="configured-signal">
+<db:title>configured()</db:title>
+<db:para>This attached signal is emitted when the type was configured.</db:para>
+<db:note>
+<db:para>The corresponding handler is <db:code>onConfigured</db:code>.</db:para>
+</db:note>
+</db:section>
+</db:section>
+<db:section xml:id="method-documentation">
+<db:title>Method Documentation</db:title>
+<db:section xml:id="disable-method">
+<db:title>disable()</db:title>
+<db:methodsynopsis>
+<db:type></db:type>
+<db:methodname>disable</db:methodname>
+<db:void/>
+<db:synopsisinfo role="meta">qmlmethod</db:synopsisinfo>
+<db:synopsisinfo role="signature">disable()</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:bridgehead renderas="sect2">enable()</db:bridgehead><db:methodsynopsis>
+<db:type></db:type>
+<db:methodname>enable</db:methodname>
+<db:void/>
+<db:synopsisinfo role="meta">qmlmethod</db:synopsisinfo>
+<db:synopsisinfo role="signature">enable()</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>Enables or disables this type.</db:para>
+</db:section>
+<db:section xml:id="copy-method">
+<db:title>Type copy(<db:emphasis>a</db:emphasis>)</db:title>
+<db:para>Returns another Type based on <db:code its:translate="no" role="parameter">a</db:code>.</db:para>
+</db:section>
+<db:section xml:id="futureDeprecated-method">
+<db:title>[until 6.3] futureDeprecated()</db:title>
+<db:para>This method is scheduled for deprecation in version 6.3.</db:para>
+<db:para>Use something else instead.</db:para>
+<db:para>This is a method that's marked for deprecation in a future version.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="obsolete">
+<db:title>Obsolete Members for Type</db:title>
+<db:para><db:emphasis role="bold">The following members of QML type <db:link xlink:href="qml-qdoc-test-type.xml">Type</db:link> are deprecated.</db:emphasis> We strongly advise against using them in new code.</db:para>
+<db:section xml:id="obsolete-method-documentation">
+<db:title>Obsolete Method Documentation</db:title>
+<db:section xml:id="deprecatedMethod-method">
+<db:title>[deprecated in 6.2] deprecatedMethod()</db:title>
+<db:para>This method is deprecated since QDoc.Test 6.2. We strongly advise against using it in new code.</db:para>
+<db:para>This method has no replacement.</db:para>
+<db:para>This is a method that should include information about being deprecated and that it has been so since 6.2 in its docs.</db:para>
+</db:section>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-yetanotherchild.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-yetanotherchild.xml
new file mode 100644
index 000000000..040c7360b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-yetanotherchild.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">YetAnotherChild QML Type</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A type inheriting from internal abstract parent.</db:para>
+<db:para>This type was introduced in Qt 1.1.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist its:translate="no">
+<db:varlistentry>
+<db:term>Import Statement</db:term>
+<db:listitem>
+<db:para>import QDoc.Test 1.1</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since:</db:term>
+<db:listitem>
+<db:para>Qt 1.1</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="property-documentation">
+<db:title>Property Documentation</db:title>
+<db:section xml:id="prop-prop">
+<db:title>prop : int</db:title>
+<db:fieldsynopsis>
+<db:type>int</db:type>
+<db:varname>prop</db:varname>
+<db:modifier>writable</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>Propagated to inheriting type docs.</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-test-nover-doctest.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-test-nover-doctest.xml
new file mode 100644
index 000000000..d719d9f6f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-test-nover-doctest.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">DocTest QML Type</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>Shadows the type name in QDoc.Test module.</db:para>
+<db:para>This type was introduced in Qt 1.1.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist its:translate="no">
+<db:varlistentry>
+<db:term>Import Statement</db:term>
+<db:listitem>
+<db:para>import Test.NoVer</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since:</db:term>
+<db:listitem>
+<db:para>Qt 1.1</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Status:</db:term>
+<db:listitem>
+<db:para>Tech Preview</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/comprehensiveproject/expected/docbook/qml-test-nover-typenoversion.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-test-nover-typenoversion.xml
new file mode 100644
index 000000000..581207402
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-test-nover-typenoversion.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">TypeNoVersion QML Type</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>Another QML type documented in a .cpp file.</db:para>
+<db:para>This type was introduced in Qt 1.1.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist its:translate="no">
+<db:varlistentry>
+<db:term>Import Statement</db:term>
+<db:listitem>
+<db:para>import Test.NoVer</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since:</db:term>
+<db:listitem>
+<db:para>Qt 1.1</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Status:</db:term>
+<db:listitem>
+<db:para>Tech Preview</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/comprehensiveproject/expected/docbook/qml-themodule-thetype.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-themodule-thetype.xml
new file mode 100644
index 000000000..13d125c8d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-themodule-thetype.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">TheType QML Type</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:variablelist its:translate="no">
+<db:varlistentry>
+<db:term>Import Statement</db:term>
+<db:listitem>
+<db:para>import TheModule</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Instantiates:</db:term>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-testderived.xml">TestDerived</db:link></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="property-documentation">
+<db:title>Property Documentation</db:title>
+<db:section xml:id="name-prop">
+<db:title>[read-only] name : string</db:title>
+<db:fieldsynopsis>
+<db:type>string</db:type>
+<db:varname>name</db:varname>
+<db:modifier>[read-only]</db:modifier>
+
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>Read-only status of this property is resolved from Q_PROPERTY.</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-uicomponents-progressbar.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-uicomponents-progressbar.xml
new file mode 100644
index 000000000..f1a8d4129
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-uicomponents-progressbar.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">ProgressBar QML Type</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A component that shows the progress of an event.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist its:translate="no">
+<db:varlistentry>
+<db:term>Import Statement</db:term>
+<db:listitem>
+<db:para>import UIComponents 1.0</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:para>A <db:link xlink:href="qml-uicomponents-progressbar.xml">ProgressBar</db:link> shows the linear progress of an event as its <db:link xlink:href="qml-uicomponents-progressbar.xml#value-prop">value</db:link>. The range is specified using the <db:link xlink:href="qml-uicomponents-progressbar.xml#minimum-prop">minimum</db:link> and the <db:link xlink:href="qml-uicomponents-progressbar.xml#maximum-prop">maximum</db:link> values.</db:para>
+<db:para>The <db:link xlink:href="qml-uicomponents-progressbar.xml">ProgressBar</db:link> component is part of the <db:link xlink:href="uicomponents-qmlmodule.xml">UI Components</db:link> module.</db:para>
+<db:para>This documentation is part of the <db:link xlink:href="test-componentset-example.xml">UIComponents</db:link> example.</db:para>
+</db:section>
+<db:section xml:id="property-documentation">
+<db:title>Property Documentation</db:title>
+<db:section xml:id="color-prop">
+<db:title>color : color</db:title>
+<db:fieldsynopsis>
+<db:type>color</db:type>
+<db:varname>color</db:varname>
+<db:modifier>writable</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>The color of the <db:link xlink:href="qml-uicomponents-progressbar.xml">ProgressBar</db:link>'s gradient. Must bind to a color type.</db:para>
+<db:section>
+<db:title>See Also</db:title>
+<db:para><db:emphasis>See also </db:emphasis>
+<db:simplelist type="vert" role="see-also">
+<db:member><db:link xlink:href="qml-uicomponents-progressbar.xml#secondColor-prop">secondColor</db:link></db:member>
+</db:simplelist>
+</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="maximum-prop">
+<db:title>maximum : int</db:title>
+<db:fieldsynopsis>
+<db:type>int</db:type>
+<db:varname>maximum</db:varname>
+<db:modifier>writable</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>The maximum value of the <db:link xlink:href="qml-uicomponents-progressbar.xml">ProgressBar</db:link> range. The <db:link xlink:href="qml-uicomponents-progressbar.xml#value-prop">value</db:link> must not be more than this value.</db:para>
+</db:section>
+<db:section xml:id="minimum-prop">
+<db:title>minimum : int</db:title>
+<db:fieldsynopsis>
+<db:type>int</db:type>
+<db:varname>minimum</db:varname>
+<db:modifier>writable</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>The minimum value of the <db:link xlink:href="qml-uicomponents-progressbar.xml">ProgressBar</db:link> range. The <db:link xlink:href="qml-uicomponents-progressbar.xml#value-prop">value</db:link> must not be less than this value.</db:para>
+</db:section>
+<db:section xml:id="secondColor-prop">
+<db:title>secondColor : color</db:title>
+<db:fieldsynopsis>
+<db:type>color</db:type>
+<db:varname>secondColor</db:varname>
+<db:modifier>writable</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>The second color of the <db:link xlink:href="qml-uicomponents-progressbar.xml">ProgressBar</db:link>'s gradient. Must bind to a color type.</db:para>
+<db:section>
+<db:title>See Also</db:title>
+<db:para><db:emphasis>See also </db:emphasis>
+<db:simplelist type="vert" role="see-also">
+<db:member><db:link xlink:href="qml-uicomponents-progressbar.xml#color-prop">color</db:link></db:member>
+</db:simplelist>
+</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="value-prop">
+<db:title>value : int</db:title>
+<db:fieldsynopsis>
+<db:type>int</db:type>
+<db:varname>value</db:varname>
+<db:modifier>writable</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>The value of the progress.</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-uicomponents-switch.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-uicomponents-switch.xml
new file mode 100644
index 000000000..2ad3a31b5
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-uicomponents-switch.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">Switch QML Type</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A component that can be turned on or off.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist its:translate="no">
+<db:varlistentry>
+<db:term>Import Statement</db:term>
+<db:listitem>
+<db:para>import UIComponents 1.0</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:para>A toggle switch has two states: an <db:code>on</db:code> and an <db:code>off</db:code> state. The <db:code>off</db:code> state is when the <db:link xlink:href="qml-uicomponents-switch.xml#on-prop">on</db:link> property is set to <db:code>false</db:code>.</db:para>
+<db:para>The ToggleSwitch component is part of the <db:link xlink:href="uicomponents-qmlmodule.xml">UI Components</db:link> module.</db:para>
+<db:para>This documentation is part of the <db:link xlink:href="test-componentset-example.xml">UIComponents</db:link> example.</db:para>
+</db:section>
+<db:section xml:id="property-documentation">
+<db:title>Property Documentation</db:title>
+<db:section xml:id="on-prop">
+<db:title>on : bool</db:title>
+<db:fieldsynopsis>
+<db:type>bool</db:type>
+<db:varname>on</db:varname>
+<db:modifier>writable</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>Indicates the state of the switch. If <db:code>false</db:code>, then the switch is in the <db:code>off</db:code> state.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="method-documentation">
+<db:title>Method Documentation</db:title>
+<db:section xml:id="toggle-method">
+<db:title>toggle()</db:title>
+<db:para>A method to toggle the switch. If the switch is <db:code>on</db:code>, the toggling it will turn it <db:code>off</db:code>. Toggling a switch in the <db:code>off</db:code> position will turn it <db:code>on</db:code>.</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-uicomponents-tabwidget.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-uicomponents-tabwidget.xml
new file mode 100644
index 000000000..f0bdf582a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-uicomponents-tabwidget.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">TabWidget QML Type</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A widget that places its children as tabs.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist its:translate="no">
+<db:varlistentry>
+<db:term>Import Statement</db:term>
+<db:listitem>
+<db:para>import UIComponents 1.0</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:para>A <db:link xlink:href="qml-uicomponents-tabwidget.xml">TabWidget</db:link> places its children as tabs in a view. Selecting a tab involves selecting the tab at the top.</db:para>
+<db:para>The <db:link xlink:href="qml-uicomponents-tabwidget.xml">TabWidget</db:link> component is part of the <db:link xlink:href="uicomponents-qmlmodule.xml">UI Components</db:link> module.</db:para>
+<db:para>This documentation is part of the <db:link xlink:href="test-componentset-example.xml">UIComponents</db:link> example.</db:para>
+<db:section xml:id="adding-tabs">
+<db:title>Adding Tabs</db:title>
+<db:para>To add a tab, declare the tab as a child of the <db:link xlink:href="qml-uicomponents-tabwidget.xml">TabWidget</db:link>.</db:para>
+<db:programlisting language="cpp" its:translate="no">TabWidget {
+ id: tabwidget
+
+ Rectangle {
+ id: tab1
+ color: &amp;quot;red&amp;quot;
+ //... omitted
+ }
+ Rectangle {
+ id: tab2
+ color: &amp;quot;blue&amp;quot;
+ //... omitted
+ }
+
+}
+</db:programlisting>
+</db:section>
+</db:section>
+<db:section xml:id="property-documentation">
+<db:title>Property Documentation</db:title>
+<db:section xml:id="current-prop">
+<db:title>current : int</db:title>
+<db:fieldsynopsis>
+<db:type>int</db:type>
+<db:varname>current</db:varname>
+<db:modifier>writable</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>The currently active tab in the <db:link xlink:href="qml-uicomponents-tabwidget.xml">TabWidget</db:link>.</db:para>
+</db:section>
+<db:section xml:id="sampleReadOnlyProperty-prop">
+<db:title>[read-only] sampleReadOnlyProperty : int</db:title>
+<db:fieldsynopsis>
+<db:type>int</db:type>
+<db:varname>sampleReadOnlyProperty</db:varname>
+<db:modifier>[read-only]</db:modifier>
+
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>A sample <db:code>read-only</db:code> property. A contrived property to demonstrate QDoc's ability to detect read-only properties.</db:para>
+<db:para>The signature is:</db:para>
+<db:programlisting language="cpp" its:translate="no">readonly property int sampleReadOnlyProperty: 0
+</db:programlisting>
+<db:para>Note that the property must be initialized to a value.</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qmlmodules.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qmlmodules.xml
new file mode 100644
index 000000000..af130ca0c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qmlmodules.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title>QML Modules</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:variablelist role="qml-modules">
+<db:varlistentry>
+<db:term><db:link xlink:href="test-empty-qmlmodule.xml" xlink:role="">No QML Types Here</db:link></db:term>
+<db:listitem>
+<db:para>A QML module with no member types.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="qdoc-test-qmlmodule.xml" xlink:role="">QDoc.Test QML Module</db:link></db:term>
+<db:listitem>
+<db:para>QML Types for the Test module.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="themodule-qmlmodule.xml" xlink:role="">TheModule</db:link></db:term>
+<db:listitem>
+<db:para></db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="uicomponents-qmlmodule.xml" xlink:role="">UI Components</db:link></db:term>
+<db:listitem>
+<db:para>Basic set of UI components.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="test-nover-qmlmodule.xml" xlink:role="">Versionless QML Module</db:link></db:term>
+<db:listitem>
+<db:para>QML Types for the Test module without version.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="qml-types">
+<db:title>QML types</db:title>
+<db:variablelist role="qmltypesbymodule QDoc.Test">
+<db:varlistentry>
+<db:term><db:link xlink:href="qml-qdoc-test-abstractparent.xml" xlink:role="">AbstractParent</db:link></db:term>
+<db:listitem>
+<db:para>Abstract base QML type.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="qml-qdoc-test-child.xml" xlink:role="">Child</db:link></db:term>
+<db:listitem>
+<db:para>A Child inheriting its parent.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="qml-qdoc-test-doctest.xml" xlink:role="">DocTest</db:link></db:term>
+<db:listitem>
+<db:para>Represents a doc test case.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="qml-qdoc-test-type.xml" xlink:role="">Type</db:link></db:term>
+<db:listitem>
+<db:para>A QML type documented in a .cpp file.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="qml-qdoc-test-yetanotherchild.xml" xlink:role="">YetAnotherChild</db:link></db:term>
+<db:listitem>
+<db:para>A type inheriting from internal abstract parent.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:section>
+<db:section xml:id="qml-value-types">
+<db:title>QML value types</db:title>
+<db:simplelist>
+<db:member><db:link xlink:href="i">I</db:link></db:member>
+</db:simplelist>
+<db:variablelist role="qmlvaluetypes">
+<db:varlistentry xml:id="i">
+<db:term><db:emphasis role="bold">I</db:emphasis></db:term>
+<db:listitem>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="qml-int.xml">int</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:variablelist role="qmlvaluetypesbymodule QDoc.Test">
+<db:varlistentry>
+<db:term><db:link xlink:href="qml-int.xml" xlink:role="">int</db:link></db:term>
+<db:listitem>
+<db:para>An integer value type.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/seenclass.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/seenclass.xml
new file mode 100644
index 000000000..abb697567
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/seenclass.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">SeenClass Class</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A public but undocumented class.</db:para>
+<db:para>This class was introduced in Qt 2.0.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist its:translate="no">
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>SeenClass</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since</db:term>
+<db:listitem>
+<db:para>Qt 2.0</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>CMake</db:term>
+<db:listitem>
+<db:para>find_package(Qt6 REQUIRED COMPONENTS QDocTest)</db:para>
+<db:para>target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>qmake</db:term>
+<db:listitem>
+<db:para>QT += testcpp</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/comprehensiveproject/expected/docbook/test-cmaketest-cmakelists-txt.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-cmaketest-cmakelists-txt.xml
new file mode 100644
index 000000000..a29ba9a12
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-cmaketest-cmakelists-txt.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title>CMake Example Project</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:programlisting language="cpp" its:translate="no">cmake_minimum_required(VERSION 3.16)
+project (QDOCTEST)
+
+</db:programlisting>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-cmaketest-example.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-cmaketest-example.xml
new file mode 100644
index 000000000..549aa1fec
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-cmaketest-example.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" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title>CMake Example Project</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:mediaobject>
+<db:imageobject>
+<db:imagedata fileref="images/leonardo-da-vinci.png"/>
+</db:imageobject>
+</db:mediaobject>
+<db:section>
+<db:title>List of Files</db:title>
+<db:para>Files:</db:para>
+<db:section>
+<db:title>List of Files</db:title>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="cmaketest/CMakeLists.txt">cmaketest/CMakeLists.txt</db:link></db:para></db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="cmaketest/main.cpp">cmaketest/main.cpp</db:link></db:para></db:listitem>
+</db:itemizedlist>
+</db:section>
+</db:section></db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-cmaketest-main-cpp.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-cmaketest-main-cpp.xml
new file mode 100644
index 000000000..d7e7029a2
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-cmaketest-main-cpp.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title>CMake Example Project</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:programlisting language="cpp" its:translate="no">void main(){}
+
+</db:programlisting>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-componentset-pro.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-componentset-pro.xml
new file mode 100644
index 000000000..606a5ac94
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-componentset-pro.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title>QML Documentation Example</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>Example for documenting QML types.</db:para>
+</db:abstract>
+</db:info>
+<db:programlisting language="cpp" its:translate="no">SOURCES = componentset.pro \
+ ProgressBar.qml \
+ Switch.qml \
+ TabWidget.qml \
+ uicomponents.qdoc
+
+</db:programlisting>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-componentset-qml.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-componentset-qml.xml
new file mode 100644
index 000000000..34f5e59b0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-componentset-qml.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title>QML Documentation Example</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>Example for documenting QML types.</db:para>
+</db:abstract>
+</db:info>
+<db:programlisting language="qml" its:translate="no">// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick 2.0
+
+Item {
+}
+
+</db:programlisting>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-example.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-example.xml
new file mode 100644
index 000000000..a5ffd1cd0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-example.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title>QML Documentation Example</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>Example for documenting QML types.</db:para>
+</db:abstract>
+</db:info>
+<db:para>This example demonstrates one of the ways to document QML types. It also generates a warning about a missing example image, on purpose.</db:para>
+<db:para>In particular, there are sample types that are documented with QDoc commands comments. There are documentation comments for the QML types and their public interfaces. The types are grouped into a module, the <db:link xlink:href="uicomponents-qmlmodule.xml">UI Components</db:link> module.</db:para>
+<db:para>The uicomponents.qdoc file generates the overview page for the <db:link xlink:href="uicomponents-qmlmodule.xml">UI Components</db:link> module page.</db:para>
+<db:para>The generated documentation is available in the <db:link xlink:href="uicomponents-qmlmodule.xml">UI Components</db:link> module.</db:para>
+<db:section xml:id="qml-class">
+<db:title>QML Class</db:title>
+<db:para>The QML types use the \qmltype to document the type. In addition, they have the \inmodule command in order for QDoc to associate them to the <db:code>UIComponents</db:code> module.</db:para>
+<db:para>QDoc uses the \brief command to place a basic description when listing the types.</db:para>
+</db:section>
+<db:section xml:id="properties-signals-handlers-and-methods">
+<db:title>Properties, Signals, Handlers, and Methods</db:title>
+<db:para>The types have their properties, signals, handlers, and methods defined in their respective QML files. QDoc associates the properties and methods to the types, therefore, you only need to place the documentation above the property, method, or signal.</db:para>
+<db:para>To document the type of a <db:emphasis>property alias</db:emphasis>, you must use the \qmlproperty command to specify the data type.</db:para>
+<db:programlisting language="cpp" its:translate="no">\qmlproperty int anAliasedProperty
+An aliased property of type int.
+</db:programlisting>
+<db:section xml:id="internal-documentation">
+<db:title>Internal Documentation</db:title>
+<db:para>You may declare that a documentation is for internal use by placing the \internal command after the beginning QDoc comment <db:code>/*</db:code>. QDoc will prevent the internal documentation from appearing in the public API.</db:para>
+<db:para>If you wish to omit certain parts of the documentation, you may use the \omit and \endomit command.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="qml-types-with-c-implementation">
+<db:title>QML Types with C++ Implementation</db:title>
+<db:para>This example only demonstrates the documentation for types in QML files, but the regular QML commands may be placed inside C++ classes to define the public API of the QML type.</db:para>
+</db:section>
+<db:section>
+<db:title>List of Files</db:title>
+<db:para>Files:</db:para>
+<db:section>
+<db:title>List of Files</db:title>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="componentset/ProgressBar.qml">componentset/ProgressBar.qml</db:link></db:para></db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="componentset/Switch.qml">componentset/Switch.qml</db:link></db:para></db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="componentset/TabWidget.qml">componentset/TabWidget.qml</db:link></db:para></db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="componentset/componentset.pro">componentset/componentset.pro</db:link></db:para></db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="componentset/componentset.qml">componentset/componentset.qml</db:link></db:para></db:listitem>
+</db:itemizedlist>
+</db:section>
+</db:section></db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-progressbar-qml.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-progressbar-qml.xml
new file mode 100644
index 000000000..e284bd51a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-progressbar-qml.xml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title>QML Documentation Example</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>Example for documenting QML types.</db:para>
+</db:abstract>
+</db:info>
+<db:programlisting language="qml" its:translate="no">// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick 1.0
+
+/*!
+ \qmltype ProgressBar
+ \inqmlmodule UIComponents
+ \brief A component that shows the progress of an event.
+
+ A ProgressBar shows the linear progress of an event as its \l value.
+ The range is specified using the \l {minimum} and the \l{maximum} values.
+
+ The ProgressBar component is part of the \l {UI Components} module.
+
+ This documentation is part of the \l{componentset}{UIComponents} example.
+*/
+Item {
+ id: progressbar
+
+ /*!
+ The minimum value of the ProgressBar range.
+ The \l value must not be less than this value.
+ */
+ property int minimum: 0
+
+ /*!
+ The maximum value of the ProgressBar range.
+ The \l value must not be more than this value.
+ */
+ property int maximum: 100
+
+ /*!
+ The value of the progress.
+ */
+ property int value: 0
+
+ /*!
+ \qmlproperty color ProgressBar::color
+ The color of the ProgressBar's gradient. Must bind to a color type.
+
+ \omit
+ The &amp;quot;\qmlproperty &amp;lt;type&amp;gt; &amp;lt;property name&amp;gt;&amp;quot; is needed because
+ property alias need to have their types manually entered.
+
+ QDoc will not publish the documentation within omit and endomit.
+ \endomit
+
+ \sa secondColor
+ */
+ property alias color: gradient1.color
+
+ /*!
+ \qmlproperty color ProgressBar::secondColor
+ The second color of the ProgressBar's gradient.
+ Must bind to a color type.
+
+ \omit
+ The &amp;quot;\qmlproperty &amp;lt;type&amp;gt; &amp;lt;property name&amp;gt;&amp;quot; is needed because
+ property alias need to have their types manually entered.
+
+ QDoc will not publish the documentation within omit and endomit.
+ \endomit
+
+ \sa color
+ */
+ property alias secondColor: gradient2.color
+
+ width: 250; height: 23
+ clip: true
+
+ Rectangle {
+ id: highlight
+
+ /*!
+ An internal documentation comment. The widthDest property is not
+ a public API and therefore will not be exposed.
+ */
+ property int widthDest: ((progressbar.width * (value - minimum)) / (maximum - minimum) - 6)
+
+ width: highlight.widthDest
+ Behavior on width { SmoothedAnimation { velocity: 1200 } }
+
+ anchors { left: parent.left; top: parent.top; bottom: parent.bottom; margins: 3 }
+ radius: 1
+ gradient: Gradient {
+ GradientStop { id: gradient1; position: 0.0 }
+ GradientStop { id: gradient2; position: 1.0 }
+ }
+
+ }
+ Text {
+ anchors { right: highlight.right; rightMargin: 6; verticalCenter: parent.verticalCenter }
+ color: &amp;quot;white&amp;quot;
+ font.bold: true
+ text: Math.floor((value - minimum) / (maximum - minimum) * 100) + '%'
+ }
+}
+
+</db:programlisting>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-switch-qml.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-switch-qml.xml
new file mode 100644
index 000000000..93083a18a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-switch-qml.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title>QML Documentation Example</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>Example for documenting QML types.</db:para>
+</db:abstract>
+</db:info>
+<db:programlisting language="qml" its:translate="no">// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick 1.0
+
+/*!
+ \qmltype ToggleSwitch
+ \inqmlmodule UIComponents
+ \brief A component that can be turned on or off.
+
+ A toggle switch has two states: an \c on and an \c off state. The \c off
+ state is when the \l on property is set to \c false.
+
+ The ToggleSwitch component is part of the \l {UI Components} module.
+
+ This documentation is part of the \l{componentset}{UIComponents} example.
+
+*/
+Item {
+ id: toggleswitch
+ width: background.width; height: background.height
+
+ /*!
+ Indicates the state of the switch. If \c false, then the switch is in
+ the \c off state.
+
+ \omit
+ The \qmlproperty &amp;lt;type&amp;gt; &amp;lt;propertyname&amp;gt; is not necessary as QDoc
+ will associate this property to the ToggleSwitch
+
+ QDoc will not publish the documentation within omit and endomit.
+ \endomit
+ */
+ property bool on: false
+
+ /*!
+ A method to toggle the switch. If the switch is \c on, the toggling it
+ will turn it \c off. Toggling a switch in the \c off position will
+ turn it \c on.
+ */
+ function toggle() {
+ if (toggleswitch.state == &amp;quot;on&amp;quot;)
+ toggleswitch.state = &amp;quot;off&amp;quot;;
+ else
+ toggleswitch.state = &amp;quot;on&amp;quot;;
+ }
+
+ /*!
+ \internal
+
+ An internal function to synchronize the switch's internals. This
+ function is not for public access. The \internal command will
+ prevent QDoc from publishing this comment in the public API.
+ */
+ function releaseSwitch() {
+ if (knob.x == 1) {
+ if (toggleswitch.state == &amp;quot;off&amp;quot;) return;
+ }
+ if (knob.x == 78) {
+ if (toggleswitch.state == &amp;quot;on&amp;quot;) return;
+ }
+ toggle();
+ }
+
+ Rectangle {
+ id: background
+ width: 130; height: 48
+ radius: 48
+ color: &amp;quot;lightsteelblue&amp;quot;
+ MouseArea { anchors.fill: parent; onClicked: toggle() }
+ }
+
+ Rectangle {
+ id: knob
+ width: 48; height: 48
+ radius: width
+ color: &amp;quot;lightblue&amp;quot;
+
+ MouseArea {
+ anchors.fill: parent
+ drag.target: knob; drag.axis: Drag.XAxis; drag.minimumX: 1; drag.maximumX: 78
+ onClicked: toggle()
+ onReleased: releaseSwitch()
+ }
+ }
+
+ states: [
+ State {
+ name: &amp;quot;on&amp;quot;
+ PropertyChanges { target: knob; x: 78 }
+ PropertyChanges { target: toggleswitch; on: true }
+ },
+ State {
+ name: &amp;quot;off&amp;quot;
+ PropertyChanges { target: knob; x: 1 }
+ PropertyChanges { target: toggleswitch; on: false }
+ }
+ ]
+
+ transitions: Transition {
+ NumberAnimation { properties: &amp;quot;x&amp;quot;; easing.type: Easing.InOutQuad; duration: 200 }
+ }
+}
+
+</db:programlisting>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-tabwidget-qml.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-tabwidget-qml.xml
new file mode 100644
index 000000000..24c672b9f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-componentset-tabwidget-qml.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title>QML Documentation Example</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>Example for documenting QML types.</db:para>
+</db:abstract>
+</db:info>
+<db:programlisting language="qml" its:translate="no">// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick 1.0
+
+/*!
+ \qmltype TabWidget
+ \inqmlmodule UIComponents
+ \brief A widget that places its children as tabs.
+
+ A TabWidget places its children as tabs in a view. Selecting
+ a tab involves selecting the tab at the top.
+
+ The TabWidget component is part of the \l {UI Components} module.
+
+ This documentation is part of the \l{componentset}{UIComponents} example.
+
+ \section1 Adding Tabs
+
+ To add a tab, declare the tab as a child of the TabWidget.
+
+ \code
+ TabWidget {
+ id: tabwidget
+
+ Rectangle {
+ id: tab1
+ color: &amp;quot;red&amp;quot;
+ //... omitted
+ }
+ Rectangle {
+ id: tab2
+ color: &amp;quot;blue&amp;quot;
+ //... omitted
+ }
+
+ }
+ \endcode
+
+*/
+Item {
+ id: tabWidget
+
+ /*!
+ \internal
+
+ Setting the default property to stack.children means any child items
+ of the TabWidget are actually added to the 'stack' item's children.
+
+ See the \l{&amp;quot;Property Binding in QML&amp;quot;}
+ documentation for details on default properties.
+
+ This is an implementation detail, not meant for public knowledge. Putting
+ the \internal command at the beginning will cause QDoc to not publish this
+ documentation in the public API page.
+
+ Normally, a property alias needs to have a
+ &amp;quot;\qmlproperty &amp;lt;type&amp;gt; &amp;lt;propertyname&amp;gt;&amp;quot; to assign the alias a type.
+
+ */
+ default property alias content: stack.children
+
+ /*!
+ The currently active tab in the TabWidget.
+ */
+ property int current: 0
+
+ /*!
+ A sample \c{read-only} property.
+ A contrived property to demonstrate QDoc's ability to detect
+ read-only properties.
+
+ The signature is:
+ \code
+ readonly property int sampleReadOnlyProperty: 0
+ \endcode
+
+ Note that the property must be initialized to a value.
+
+ */
+ readonly property int sampleReadOnlyProperty: 0
+
+ /*!
+ \internal
+
+ This handler is an implementation
+ detail. The \c{\internal} command will prevent QDoc from publishing this
+ documentation on the public API.
+ */
+ onCurrentChanged: setOpacities()
+ Component.onCompleted: setOpacities()
+
+ /*!
+ \internal
+
+ An internal function to set the opacity.
+ The \internal command will prevent QDoc from publishing this
+ documentation on the public API.
+ */
+ function setOpacities() {
+ for (var i = 0; i &amp;lt; stack.children.length; ++i) {
+ stack.children[i].opacity = (i == current ? 1 : 0)
+ }
+ }
+
+ Row {
+ id: header
+
+ Repeater {
+ model: stack.children.length
+ delegate: Rectangle {
+ width: tabWidget.width / stack.children.length; height: 36
+
+ Rectangle {
+ width: parent.width; height: 1
+ anchors { bottom: parent.bottom; bottomMargin: 1 }
+ color: &amp;quot;#acb2c2&amp;quot;
+ }
+ BorderImage {
+ anchors { fill: parent; leftMargin: 2; topMargin: 5; rightMargin: 1 }
+ border { left: 7; right: 7 }
+ source: &amp;quot;tab.png&amp;quot;
+ visible: tabWidget.current == index
+ }
+ Text {
+ horizontalAlignment: Qt.AlignHCenter; verticalAlignment: Qt.AlignVCenter
+ anchors.fill: parent
+ text: stack.children[index].title
+ elide: Text.ElideRight
+ font.bold: tabWidget.current == index
+ }
+ MouseArea {
+ anchors.fill: parent
+ onClicked: tabWidget.current = index
+ }
+ }
+ }
+ }
+
+ Item {
+ id: stack
+ width: tabWidget.width
+ anchors.top: header.bottom; anchors.bottom: tabWidget.bottom
+ }
+}
+
+</db:programlisting>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-demos-demo-demo-cpp.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-demos-demo-demo-cpp.xml
new file mode 100644
index 000000000..e10690185
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-demos-demo-demo-cpp.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" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title>Demo</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:programlisting language="cpp" its:translate="no">// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+bool isOverThousand(int n)
+{
+ if (n &amp;gt; 1'000)
+ return true;
+ return false;
+}
+
+</db:programlisting>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-demos-demo-demo-pro.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-demos-demo-demo-pro.xml
new file mode 100644
index 000000000..a51cb5a2e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-demos-demo-demo-pro.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title>Demo</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:programlisting language="cpp" its:translate="no">TEMPLATE = aux
+message(&amp;quot;Nothing to see here.&amp;quot;)
+
+</db:programlisting>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-demos-demo-dontxclude-cmakelists-txt.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-demos-demo-dontxclude-cmakelists-txt.xml
new file mode 100644
index 000000000..4cfd84878
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-demos-demo-dontxclude-cmakelists-txt.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title>Demo</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:programlisting language="cpp" its:translate="no">cmake_minimum_required(VERSION 3.16)
+project (DONTXCLUDEDIRS_QDOCTEST)
+
+</db:programlisting>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-demos-demo-example.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-demos-demo-example.xml
new file mode 100644
index 000000000..b81f636ba
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-demos-demo-example.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title>Demo</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:mediaobject>
+<db:imageobject>
+<db:imagedata fileref="images/leonardo-da-vinci.png"/>
+</db:imageobject>
+</db:mediaobject>
+<db:programlisting language="cpp" its:translate="no"> if (n &amp;gt; 1'000)
+ return true;
+</db:programlisting>
+<db:section>
+<db:title>List of Files</db:title>
+<db:para>Files:</db:para>
+<db:section>
+<db:title>List of Files</db:title>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="demos/demo/demo.cpp">demos/demo/demo.cpp</db:link></db:para></db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="demos/demo/demo.pro">demos/demo/demo.pro</db:link></db:para></db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="demos/demo/dontxclude/CMakeLists.txt">demos/demo/dontxclude/CMakeLists.txt</db:link></db:para></db:listitem>
+</db:itemizedlist>
+</db:section>
+</db:section></db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-demos-hidden-example.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-demos-hidden-example.xml
new file mode 100644
index 000000000..b3a1e7996
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-demos-hidden-example.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title>Hidden Demo</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>Tagged 'broken', does not appear in examples-manifest.xml.</db:para>
+</db:abstract>
+</db:info>
+<db:para>Also missing an image, but that's OK as it's broken anyway.</db:para>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-empty-qmlmodule.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-empty-qmlmodule.xml
new file mode 100644
index 000000000..f58917730
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-empty-qmlmodule.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">No QML Types Here</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A QML module with no member types.</db:para>
+</db:abstract>
+</db:info>
+<db:anchor xml:id="details"/>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-nover-qmlmodule.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-nover-qmlmodule.xml
new file mode 100644
index 000000000..091fe4358
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/test-nover-qmlmodule.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" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">Versionless QML Module</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>QML Types for the Test module without version.</db:para>
+<db:para>This module is in <db:emphasis>Tech Preview</db:emphasis> state.</db:para>
+<db:para>This module was introduced in Qt 1.1.</db:para>
+</db:abstract>
+</db:info>
+<db:para>This module is in <db:emphasis>Tech Preview</db:emphasis> state.</db:para>
+<db:para>This module was introduced in Qt 1.1.</db:para>
+<db:anchor xml:id="details"/>
+<db:variablelist role="members">
+<db:varlistentry>
+<db:term><db:link xlink:href="qml-test-nover-doctest.xml" xlink:role="">DocTest</db:link></db:term>
+<db:listitem>
+<db:para>Shadows the type name in QDoc.Test module.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="qml-test-nover-typenoversion.xml" xlink:role="">TypeNoVersion</db:link></db:term>
+<db:listitem>
+<db:para>Another QML type documented in a .cpp file.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testcpp-module.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testcpp-module.xml
new file mode 100644
index 000000000..d8e4647ac
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testcpp-module.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">QDoc Test C++ Classes</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A test module page.</db:para>
+<db:para>This module was introduced in Qt 2.0.</db:para>
+</db:abstract>
+</db:info>
+<db:para>A test module page.</db:para>
+<db:para>This module was introduced in Qt 2.0.</db:para>
+<db:section xml:id="namespaces">
+<db:title>Namespaces</db:title>
+<db:variablelist role="namespaces">
+<db:varlistentry>
+<db:term><db:link xlink:href="crossmoduleref.xml" xlink:role="namespace">CrossModuleRef</db:link></db:term>
+<db:listitem>
+<db:para>Namespace that has documented functions in multiple modules.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="testqdoc.xml" xlink:role="namespace">TestQDoc</db:link></db:term>
+<db:listitem>
+<db:para>A namespace.</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="seenclass.xml" xlink:role="class">SeenClass</db:link></db:term>
+<db:listitem>
+<db:para>A public but undocumented class.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="testqdoc-test.xml" xlink:role="class">TestQDoc::Test</db:link></db:term>
+<db:listitem>
+<db:para>A class in a namespace.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="testqdoc-testderived.xml" xlink:role="class">TestQDoc::TestDerived</db:link></db:term>
+<db:listitem>
+<db:para>A class in a namespace, derived from Test.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:section>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:note>
+<db:para>This is just a test. /* Look, Ma! {I'm made of arguments!} */</db:para>
+</db:note>
+<db:para>This module was introduced in version 5.15.</db:para>
+<db:para>1.0</db:para>
+<db:section xml:id="linking-to-function-like-things">
+<db:title>Linking to function-like things</db:title>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml#someFunctionDefaultArg">someFunctionDefaultArg</db:link>()</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml#QDOCTEST_MACRO2">QDOCTEST_MACRO2</db:link>()</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml#QDOCTEST_MACRO2">QDOCTEST_MACRO2</db:link>(int &amp;x)</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="testcpp-module.xml#section">section()</db:link></db:para>
+</db:listitem>
+<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>
+</db:section>
+</db:section>
+</db:section>
+</db:article>
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
new file mode 100644
index 000000000..06479d2a5
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testqdoc-test.xml
@@ -0,0 +1,384 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">Test Class</db:title>
+<db:subtitle its:translate="no">TestQDoc::Test</db:subtitle>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A class in a namespace.</db:para>
+<db:para>This class was introduced in Qt 1.1.</db:para>
+<db:note>
+<db:para>All functions in this class are <db:link xlink:href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</db:link> with the following exceptions:</db:para>
+<db:para>These functions are not <db:link xlink:href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</db:link>:</db:para>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml#someFunctionDefaultArg">someFunctionDefaultArg(int i, bool b) const</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:note>
+</db:abstract>
+</db:info>
+<db:variablelist its:translate="no">
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>Test</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since</db:term>
+<db:listitem>
+<db:para>Qt 1.1</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>CMake</db:term>
+<db:listitem>
+<db:para>find_package(Qt6 REQUIRED COMPONENTS QDocTest)</db:para>
+<db:para>target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>qmake</db:term>
+<db:listitem>
+<db:para>QT += testcpp</db:para>
+</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:listitem>
+<db:para>qml-qdoc-test-type.xml</db:para>
+</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>Group</db:term>
+<db:listitem>
+<db:para>Test is part of <db:simplelist><db:member>testgroup</db:member><db:member><db:link xlink:href="cpptypes.xml">Test C++ Types</db:link></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>
+<db:section xml:id="member-type-documentation">
+<db:title>Member Type Documentation</db:title>
+<db:section xml:id="SomeType-typedef">
+<db:title its:translate="no">Test::SomeType</db:title>
+<db:typedefsynopsis>
+<db:typedefname>SomeType</db:typedefname>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:typedefsynopsis>
+<db:para>A typedef.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="member-function-documentation">
+<db:title>Member Function Documentation</db:title>
+<db:section xml:id="overload">
+<db:title its:translate="no">[protected] void Test::overload()</db:title>
+<db:bridgehead renderas="sect2" xml:id="overload-1" its:translate="no">[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 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: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="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: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>
+<db:methodsynopsis>
+<db:type>void (*)(bool)</db:type>
+<db:methodname>funcPtr</db:methodname>
+<db:methodparam>
+<db:type>bool</db:type>
+<db:parameter>b</db:parameter>
+</db:methodparam>
+<db:methodparam>
+<db:type>const char *</db:type>
+<db:parameter>s</db:parameter>
+</db:methodparam>
+<db:synopsisinfo role="meta">plain</db:synopsisinfo>
+<db:synopsisinfo role="signature">void (*)(bool) funcPtr(bool b, const char *s)</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>Returns a pointer to a function that takes a boolean. Uses <db:code its:translate="no" role="parameter">b</db:code> and <db:code its:translate="no" role="parameter">s</db:code>.</db:para>
+</db:section>
+<db:section xml:id="inlineFunction">
+<db:title its:translate="no">void Test::inlineFunction()</db:title>
+<db:methodsynopsis>
+<db:void/>
+<db:methodname>inlineFunction</db:methodname>
+<db:void/>
+<db:synopsisinfo role="meta">plain</db:synopsisinfo>
+<db:synopsisinfo role="signature">void inlineFunction()</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>An inline function, documented using the \fn QDoc command.</db:para>
+</db:section>
+<db:section xml:id="methodWithEmDashInItsDocs">
+<db:title its:translate="no">void Test::methodWithEmDashInItsDocs()</db:title>
+<db:methodsynopsis>
+<db:void/>
+<db:methodname>methodWithEmDashInItsDocs</db:methodname>
+<db:void/>
+<db:synopsisinfo role="meta">plain</db:synopsisinfo>
+<db:synopsisinfo role="signature">void methodWithEmDashInItsDocs()</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>This method has em dashes in its documentation—as you'll find represented by <db:code>---</db:code> in the sources—here and there. The important bit to note is that when passed e.g. to the \c command, the three hyphens are processed as input to the command and not replaced by an em dash.</db:para>
+<db:para>-----------------------------------------------------------------------</db:para>
+<db:para>People can still add a bunch of dashes, though, without QDoc replacing them all with a series of em dashes.</db:para>
+<db:para>—You can also start a new paragraph with an em dash, if you want to.</db:para>
+<db:section>
+<db:title>See Also</db:title>
+<db:para><db:emphasis>See also </db:emphasis>
+<db:simplelist type="vert" role="see-also">
+<db:member><db:link xlink:href="testqdoc-test.xml#methodWithEnDashInItsDocs">methodWithEnDashInItsDocs</db:link></db:member>
+</db:simplelist>
+</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="methodWithEnDashInItsDocs">
+<db:title its:translate="no">void Test::methodWithEnDashInItsDocs()</db:title>
+<db:methodsynopsis>
+<db:void/>
+<db:methodname>methodWithEnDashInItsDocs</db:methodname>
+<db:void/>
+<db:synopsisinfo role="meta">plain</db:synopsisinfo>
+<db:synopsisinfo role="signature">void methodWithEnDashInItsDocs()</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>This method has en dashes in its documentation – as you'll find represented by <db:code>--</db:code> in the sources – here and there. The important bit to note is that when passed e.g. to the \c command, the two hyphens are processed as input to the command and not replaced by an en dash. This also applies to code blocks, where otherwise, the decrement operator would get completely borked:</db:para>
+<db:programlisting language="cpp" its:translate="no">for (int i = 42; i &amp;gt; 0; --i)
+ // Do something cool during countdown.
+</db:programlisting>
+<db:para>...as it would be silly if this would output –i instead of <db:code>--i</db:code>.</db:para>
+<db:para>-----------------------------------------------------------------------</db:para>
+<db:para>It still allows people to add a bunch of dashes, though, without replacing them all with a series of en dashes. Of course, they might want to use the \hr command instead, like this:</db:para>
+<db:para>– You can also start a new paragraph with an en dash, if you want to.</db:para>
+<db:section>
+<db:title>See Also</db:title>
+<db:para><db:emphasis>See also </db:emphasis>
+<db:simplelist type="vert" role="see-also">
+<db:member><db:link xlink:href="">methodWithEnDashInItsDocs</db:link></db:member>
+</db:simplelist>
+</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="someFunction">
+<db:title its:translate="no">[since Test 1.0] int Test::someFunction(<db:emphasis>int</db:emphasis>, int <db:emphasis>v</db:emphasis> = 0)</db:title>
+<db:methodsynopsis>
+<db:type>int</db:type>
+<db:methodname>someFunction</db:methodname>
+<db:methodparam>
+<db:type>int</db:type>
+<db:parameter></db:parameter>
+</db:methodparam>
+<db:methodparam>
+<db:type>int</db:type>
+<db:parameter>v</db:parameter>
+<db:initializer>0</db:initializer>
+</db:methodparam>
+<db:synopsisinfo role="meta">plain</db:synopsisinfo>
+<db:synopsisinfo role="signature">int someFunction(int, int v)</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>Function that takes a parameter <db:code its:translate="no" role="parameter">v</db:code>. Also returns the value of <db:code its:translate="no" role="parameter">v</db:code>.</db:para>
+<db:para>This function was introduced in Test 1.0.</db:para>
+</db:section>
+<db:section xml:id="someFunctionDefaultArg">
+<db:title its:translate="no">[since 2.0] void Test::someFunctionDefaultArg(int <db:emphasis>i</db:emphasis>, bool <db:emphasis>b</db:emphasis> = false) const</db:title>
+<db:methodsynopsis>
+<db:modifier>const</db:modifier>
+<db:void/>
+<db:methodname>someFunctionDefaultArg</db:methodname>
+<db:methodparam>
+<db:type>int</db:type>
+<db:parameter>i</db:parameter>
+</db:methodparam>
+<db:methodparam>
+<db:type>bool</db:type>
+<db:parameter>b</db:parameter>
+<db:initializer>false</db:initializer>
+</db:methodparam>
+<db:synopsisinfo role="meta">plain</db:synopsisinfo>
+<db:synopsisinfo role="signature">void someFunctionDefaultArg(int i, bool b) const</db:synopsisinfo>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">non-reentrant</db:synopsisinfo>
+</db:methodsynopsis>
+<db:para>Function that takes a parameter <db:code its:translate="no" role="parameter">i</db:code> and <db:code its:translate="no" role="parameter">b</db:code>.</db:para>
+<db:warning>
+<db:para>This function is not <db:link xlink:href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</db:link>.</db:para>
+</db:warning><db:para>This function was introduced in Qt 2.0.</db:para>
+</db:section>
+<db:section xml:id="virtualFun">
+<db:title its:translate="no">[virtual] void Test::virtualFun()</db:title>
+<db:methodsynopsis>
+<db:modifier>virtual</db:modifier>
+<db:void/>
+<db:methodname>virtualFun</db:methodname>
+<db:void/>
+<db:synopsisinfo role="meta">plain</db:synopsisinfo>
+<db:synopsisinfo role="signature">void virtualFun()</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>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:methodsynopsis>
+<db:type>TestQDoc::Test &amp;</db:type>
+<db:methodname>operator=</db:methodname>
+<db:methodparam>
+<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="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:section>
+</db:section>
+<db:section xml:id="related-non-members">
+<db:title>Related Non-Members</db:title>
+<db:section xml:id="operator-eq-eq">
+<db:title its:translate="no">bool operator==(const TestQDoc::Test &amp;<db:emphasis>lhs</db:emphasis>, const TestQDoc::Test &amp;<db:emphasis>rhs</db:emphasis>)</db:title>
+<db:methodsynopsis>
+<db:type>bool</db:type>
+<db:methodname>operator==</db:methodname>
+<db:methodparam>
+<db:type>const TestQDoc::Test &amp;</db:type>
+<db:parameter>lhs</db:parameter>
+</db:methodparam>
+<db:methodparam>
+<db:type>const TestQDoc::Test &amp;</db:type>
+<db:parameter>rhs</db:parameter>
+</db:methodparam>
+<db:synopsisinfo role="meta">plain</db:synopsisinfo>
+<db:synopsisinfo role="signature">bool operator==(const TestQDoc::Test &amp;lhs, const TestQDoc::Test &amp;rhs)</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>Returns true if <db:code its:translate="no" role="parameter">lhs</db:code> and <db:code its:translate="no" role="parameter">rhs</db:code> are equal.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="macro-documentation">
+<db:title>Macro Documentation</db:title>
+<db:section xml:id="QDOCTEST_MACRO2">
+<db:title its:translate="no">[since Test 1.1] QDOCTEST_MACRO2(int &amp;<db:emphasis>x</db:emphasis>)</db:title>
+<db:methodsynopsis>
+<db:methodname>QDOCTEST_MACRO2</db:methodname>
+<db:methodparam>
+<db:type>int &amp;</db:type>
+<db:parameter>x</db:parameter>
+</db:methodparam>
+<db:synopsisinfo role="meta">macrowithparams</db:synopsisinfo>
+<db:synopsisinfo role="signature">QDOCTEST_MACRO2(int &amp;x)</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>A macro with argument <db:code its:translate="no" role="parameter">x</db:code>.</db:para>
+<db:para>This macro was introduced in Test 1.1.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="obsolete">
+<db:title>Obsolete Members for Test</db:title>
+<db:para><db:emphasis role="bold">The following members of class <db:link xlink:href="testqdoc-test.xml">Test</db:link> are deprecated.</db:emphasis> We strongly advise against using them in new code.</db:para>
+<db:section xml:id="obsolete-member-function-documentation">
+<db:title>Obsolete Member Function Documentation</db:title>
+<db:section xml:id="operator-2b-2b">
+<db:title its:translate="no">[deprecated] TestQDoc::Test &amp;Test::operator++()</db:title>
+<db:bridgehead renderas="sect2" xml:id="operator--" its:translate="no">[deprecated] TestQDoc::Test &amp;Test::operator--()</db:bridgehead>
+<db:para>This function is deprecated. We strongly advise against using it in new code.</db:para>
+</db:section>
+<db:section xml:id="anotherObsoleteMember">
+<db:title its:translate="no">[deprecated] void Test::anotherObsoleteMember()</db:title>
+<db:methodsynopsis>
+<db:void/>
+<db:methodname>anotherObsoleteMember</db:methodname>
+<db:void/>
+<db:synopsisinfo role="meta">plain</db:synopsisinfo>
+<db:synopsisinfo role="signature">void anotherObsoleteMember()</db:synopsisinfo>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">deprecated</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:methodsynopsis>
+<db:para>This function is deprecated. We strongly advise against using it in new code.</db:para>
+<db:para>Use <db:link xlink:href="testqdoc-test.xml#obsoleteMember">obsoleteMember</db:link>() instead.</db:para>
+</db:section>
+<db:section xml:id="deprecatedMember">
+<db:title its:translate="no">[deprecated in 6.0] void Test::deprecatedMember()</db:title>
+<db:methodsynopsis>
+<db:void/>
+<db:methodname>deprecatedMember</db:methodname>
+<db:void/>
+<db:synopsisinfo role="meta">plain</db:synopsisinfo>
+<db:synopsisinfo role="signature">void deprecatedMember()</db:synopsisinfo>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">deprecated</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:methodsynopsis>
+<db:para>This function is deprecated since 6.0. We strongly advise against using it in new code.</db:para>
+<db:para>Use <db:link xlink:href="testqdoc-test.xml#someFunction">someFunction</db:link>() instead.</db:para>
+</db:section>
+<db:section xml:id="obsoleteMember">
+<db:title its:translate="no">[deprecated] void Test::obsoleteMember()</db:title>
+<db:methodsynopsis>
+<db:void/>
+<db:methodname>obsoleteMember</db:methodname>
+<db:void/>
+<db:synopsisinfo role="meta">plain</db:synopsisinfo>
+<db:synopsisinfo role="signature">void obsoleteMember()</db:synopsisinfo>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">deprecated</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:methodsynopsis>
+<db:para>This function is deprecated. We strongly advise against using it in new code.</db:para>
+<db:para>Use <db:link xlink:href="testqdoc-test.xml#someFunction">someFunction</db:link>() instead.</db:para>
+</db:section>
+</db:section>
+</db:section>
+</db:article>
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
new file mode 100644
index 000000000..6f0147dcc
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testqdoc-testderived.xml
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">TestDerived Class</db:title>
+<db:subtitle its:translate="no">TestQDoc::TestDerived</db:subtitle>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A class in a namespace, derived from <db:link xlink:href="testqdoc-test.xml">Test</db:link>.</db:para>
+<db:para>This class was introduced in Qt 2.0.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist its:translate="no">
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>TestDerived</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since</db:term>
+<db:listitem>
+<db:para>Qt 2.0</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>CMake</db:term>
+<db:listitem>
+<db:para>find_package(Qt6 REQUIRED COMPONENTS QDocTest)</db:para>
+<db:para>target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>qmake</db:term>
+<db:listitem>
+<db:para>QT += testcpp</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Inherited By</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:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Inherits</db:term>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml" xlink:role="class">TestQDoc::Test</db:link></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="member-type-documentation">
+<db:title>Member Type Documentation</db:title>
+<db:section xml:id="DerivedType-typedef">
+<db:title its:translate="no">[alias] TestDerived::DerivedType</db:title>
+<db:typedefsynopsis>
+<db:typedefname>DerivedType</db:typedefname>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:typedefsynopsis>
+<db:para>An aliased typedef.</db:para>
+</db:section>
+<db:section xml:id="NotTypedef-typedef">
+<db:title its:translate="no">[alias] TestDerived::NotTypedef</db:title>
+<db:typedefsynopsis>
+<db:typedefname>NotTypedef</db:typedefname>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:typedefsynopsis>
+<db:para>I'm an alias, not a typedef.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="property-documentation">
+<db:title>Property Documentation</db:title>
+<db:section xml:id="bindableProp-prop">
+<db:title its:translate="no">[bindable] bindableProp : QString</db:title>
+<db:fieldsynopsis>
+<db:modifier>(Qt property)</db:modifier>
+<db:type>QString</db:type>
+<db:varname>bindableProp</db:varname>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+<db:synopsisinfo role="getter">bindableProp</db:synopsisinfo>
+<db:synopsisinfo role="setter">setBindableProp</db:synopsisinfo>
+<db:synopsisinfo role="notifier">bindablePropChanged</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>This property supports <db:link xlink:href="https://wiki.qt.io/QProperty">QProperty</db:link> bindings.</db:para>
+<db:para>Some property.</db:para>
+<db:section>
+<db:title>See Also</db:title>
+<db:para><db:emphasis>See also </db:emphasis>
+<db:simplelist type="vert" role="see-also">
+<db:member><db:link xlink:href="testqdoc-testderived.xml#someProp-prop">someProp</db:link></db:member>
+</db:simplelist>
+</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="boolProp-prop">
+<db:title its:translate="no">boolProp : bool</db:title>
+<db:fieldsynopsis>
+<db:modifier>(Qt property)</db:modifier>
+<db:type>bool</db:type>
+<db:varname>boolProp</db:varname>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+<db:synopsisinfo role="getter">boolProp</db:synopsisinfo>
+<db:synopsisinfo role="setter">setBoolProp</db:synopsisinfo>
+<db:synopsisinfo role="resetter">resetBoolProp</db:synopsisinfo>
+<db:synopsisinfo role="notifier">boolPropChanged</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>A boolean property.</db:para>
+<db:para>
+<db:emphasis role="bold">Access functions:
+</db:emphasis>
+</db:para>
+<db:itemizedlist its:translate="no">
+<db:listitem>
+<db:para><db:type>bool</db:type> <db:emphasis role="bold"><db:link xlink:href="">boolProp</db:link></db:emphasis>()</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:type>void</db:type> <db:emphasis role="bold"><db:link xlink:href="">setBoolProp</db:link></db:emphasis>(<db:type>bool</db:type> <db:emphasis>b</db:emphasis>)</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:type>void</db:type> <db:emphasis role="bold"><db:link xlink:href="">resetBoolProp</db:link></db:emphasis>()</db:para>
+</db:listitem>
+</db:itemizedlist>
+<db:para>
+<db:emphasis role="bold">Notifier signal:
+</db:emphasis>
+</db:para>
+<db:itemizedlist its:translate="no">
+<db:listitem>
+<db:para><db:type>void</db:type> <db:emphasis role="bold"><db:link xlink:href="">boolPropChanged</db:link></db:emphasis>()</db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+<db:section xml:id="intProp-prop">
+<db:title its:translate="no">[read-only] intProp : int* const</db:title>
+<db:fieldsynopsis>
+<db:modifier>(Qt property)</db:modifier>
+<db:type>int*</db:type>
+<db:varname>intProp</db:varname>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+<db:synopsisinfo role="getter">getInt</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>An integer property.</db:para>
+<db:para>
+<db:emphasis role="bold">Access functions:
+</db:emphasis>
+</db:para>
+<db:itemizedlist its:translate="no">
+<db:listitem>
+<db:para><db:type>int</db:type> *<db:emphasis role="bold"><db:link xlink:href="">getInt</db:link></db:emphasis>()</db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+<db:section xml:id="name-prop">
+<db:title its:translate="no">[read-only] name : const QString*</db:title>
+<db:fieldsynopsis>
+<db:modifier>(Qt property)</db:modifier>
+<db:type>const QString*</db:type>
+<db:varname>name</db:varname>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+<db:synopsisinfo role="getter">name</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>This property holds a name.</db:para>
+<db:para>
+<db:emphasis role="bold">Access functions:
+</db:emphasis>
+</db:para>
+<db:itemizedlist its:translate="no">
+<db:listitem>
+<db:para>const <db:type>QString</db:type> *<db:emphasis role="bold"><db:link xlink:href="">name</db:link></db:emphasis>() const</db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+<db:section xml:id="someProp-prop">
+<db:title its:translate="no">[bindable read-only] someProp : QString</db:title>
+<db:fieldsynopsis>
+<db:modifier>(Qt property)</db:modifier>
+<db:type>QString</db:type>
+<db:varname>someProp</db:varname>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+<db:synopsisinfo role="getter">someProp</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>This property supports <db:link xlink:href="https://wiki.qt.io/QProperty">QProperty</db:link> bindings.</db:para>
+<db:para>Another property.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="member-function-documentation">
+<db:title>Member Function Documentation</db:title>
+<db:section xml:id="emitSomething">
+<db:title its:translate="no">[private signal] void TestDerived::emitSomething()</db:title>
+<db:methodsynopsis>
+<db:void/>
+<db:methodname>emitSomething</db:methodname>
+<db:void/>
+<db:synopsisinfo role="meta">signal</db:synopsisinfo>
+<db:synopsisinfo role="signature">void emitSomething()</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>Emitted when things happen.</db:para>
+<db:note>
+<db:para>This is a private signal. It can be used in signal connections but cannot be emitted by the user.</db:para></db:note>
+</db:section>
+<db:section xml:id="id">
+<db:title its:translate="no">[override virtual] int TestDerived::id()</db:title>
+<db:methodsynopsis>
+<db:modifier>virtual</db:modifier>
+<db:type>int</db:type>
+<db:methodname>id</db:methodname>
+<db:void/>
+<db:modifier>override</db:modifier>
+<db:synopsisinfo role="meta">plain</db:synopsisinfo>
+<db:synopsisinfo role="signature">int id() override</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:section>
+<db:section xml:id="invokeMe">
+<db:title its:translate="no">[invokable] void TestDerived::invokeMe() const</db:title>
+<db:methodsynopsis>
+<db:modifier>const</db:modifier>
+<db:void/>
+<db:methodname>invokeMe</db:methodname>
+<db:void/>
+<db:synopsisinfo role="meta">plain</db:synopsisinfo>
+<db:synopsisinfo role="signature">void invokeMe() const</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>Something invokable.</db:para>
+<db:note>
+<db:para>This function can be invoked via the meta-object system and from QML. See <db:link xlink:href="">Q_INVOKABLE</db:link>.</db:para>
+</db:note>
+</db:section>
+<db:section xml:id="someValue">
+<db:title its:translate="no">TestQDoc::TestDerived::NotTypedef TestDerived::someValue()</db:title>
+<db:methodsynopsis>
+<db:type>TestQDoc::TestDerived::NotTypedef</db:type>
+<db:methodname>someValue</db:methodname>
+<db:void/>
+<db:synopsisinfo role="meta">plain</db:synopsisinfo>
+<db:synopsisinfo role="signature">TestQDoc::TestDerived::NotTypedef someValue()</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>Returns a value using an aliases type.</db:para>
+</db:section>
+<db:section xml:id="virtualFun">
+<db:title its:translate="no">[override virtual] void TestDerived::virtualFun()</db:title>
+<db:methodsynopsis>
+<db:modifier>virtual</db:modifier>
+<db:void/>
+<db:methodname>virtualFun</db:methodname>
+<db:void/>
+<db:modifier>override</db:modifier>
+<db:synopsisinfo role="meta">plain</db:synopsisinfo>
+<db:synopsisinfo role="signature">void virtualFun() override</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>Reimplements: <db:link xlink:href="testqdoc-test.xml#virtualFun" role="function">Test::virtualFun()</db:link>.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="obsolete">
+<db:title>Obsolete Members for TestDerived</db:title>
+<db:para><db:emphasis role="bold">The following members of class <db:link xlink:href="testqdoc-testderived.xml">TestDerived</db:link> are deprecated.</db:emphasis> We strongly advise against using them in new code.</db:para>
+<db:section xml:id="obsolete-member-function-documentation">
+<db:title>Obsolete Member Function Documentation</db:title>
+<db:section xml:id="staticObsoleteMember">
+<db:title its:translate="no">[static, deprecated] void TestDerived::staticObsoleteMember()</db:title>
+<db:methodsynopsis>
+<db:modifier>static</db:modifier>
+<db:void/>
+<db:methodname>staticObsoleteMember</db:methodname>
+<db:void/>
+<db:synopsisinfo role="meta">plain</db:synopsisinfo>
+<db:synopsisinfo role="signature">void staticObsoleteMember()</db:synopsisinfo>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">deprecated</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:methodsynopsis>
+<db:para>This function is deprecated. We strongly advise against using it in new code.</db:para>
+<db:para>Static obsolete method.</db:para>
+</db:section>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testqdoc.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testqdoc.xml
new file mode 100644
index 000000000..2322302a0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testqdoc.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">TestQDoc Namespace</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A namespace.</db:para>
+<db:para>This namespace was introduced in Qt 2.0.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist its:translate="no">
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>TestCPP</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since</db:term>
+<db:listitem>
+<db:para>Qt 2.0</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>CMake</db:term>
+<db:listitem>
+<db:para>find_package(Qt6 REQUIRED COMPONENTS QDocTest)</db:para>
+<db:para>target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>qmake</db:term>
+<db:listitem>
+<db:para>QT += testcpp</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:section xml:id="usage">
+<db:title>Usage</db:title>
+<db:para>This namespace is for testing QDoc output.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="classes">
+<db:title>Classes</db:title>
+<db:section>
+<db:title>class <db:link xlink:href="testqdoc-test.xml" xlink:role="class">Test</db:link></db:title>
+<db:para>A class in a namespace.</db:para>
+</db:section>
+<db:section>
+<db:title>class <db:link xlink:href="testqdoc-testderived.xml" xlink:role="class">TestDerived</db:link></db:title>
+<db:para>A class in a namespace, derived from <db:link xlink:href="testqdoc-test.xml">Test</db:link>.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="macro-documentation">
+<db:title>Macro Documentation</db:title>
+<db:section xml:id="QDOCTEST_MACRO">
+<db:title its:translate="no">[since Test 0.9] QDOCTEST_MACRO</db:title>
+<db:methodsynopsis>
+<db:methodname>QDOCTEST_MACRO</db:methodname>
+<db:void/>
+<db:synopsisinfo role="meta">macrowithoutparams</db:synopsisinfo>
+<db:synopsisinfo role="signature">QDOCTEST_MACRO</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>This macro was introduced in Test 0.9.</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/themodule-qmlmodule.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/themodule-qmlmodule.xml
new file mode 100644
index 000000000..d3c4ed894
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/themodule-qmlmodule.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" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no"></db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:anchor xml:id="details"/>
+<db:itemizedlist role="members">
+<db:listitem>
+<db:para><db:link xlink:href="qml-themodule-thetype.xml" xlink:role="">TheType</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/uicomponents-qmlmodule.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/uicomponents-qmlmodule.xml
new file mode 100644
index 000000000..80e5b0cdc
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/uicomponents-qmlmodule.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">UI Components</db:title>
+<db:productname>Test</db:productname>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>Basic set of UI components.</db:para>
+</db:abstract>
+</db:info>
+<db:anchor xml:id="details"/>
+<db:para>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.</db:para>
+<db:para>This module is part of the <db:link xlink:href="test-componentset-example.xml">UIComponents</db:link> example.</db:para>
+<db:variablelist role="members">
+<db:varlistentry>
+<db:term><db:link xlink:href="qml-uicomponents-progressbar.xml" xlink:role="">ProgressBar</db:link></db:term>
+<db:listitem>
+<db:para>A component that shows the progress of an event.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="qml-uicomponents-switch.xml" xlink:role="">Switch</db:link></db:term>
+<db:listitem>
+<db:para>A component that can be turned on or off.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="qml-uicomponents-tabwidget.xml" xlink:role="">TabWidget</db:link></db:term>
+<db:listitem>
+<db:para>A widget that places its children as tabs.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:article>
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
new file mode 100644
index 000000000..e486a78e1
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/autolinking.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classlists.qdoc -->
+ <title>Autolinking | Test 6.2.11</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#testqdoc">TestQDoc</a></li>
+<li class="level1"><a href="#someprop">someProp</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Autolinking</h1>
+<!-- $$$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>Autolinks:</p>
+<ul>
+<li><a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></li>
+</ul>
+<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>
+</ul>
+<h2 id="someprop">someProp</h2>
+</div>
+<!-- @@@autolinking.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/classes.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/classes.html
new file mode 100644
index 000000000..6a8df3334
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/classes.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- unseenclass.qdoc -->
+ <title>Classes | Test 6.2.11</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Classes</h1>
+<!-- $$$classes.html-description -->
+<div class="descr" id="details">
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="seenclass.html">SeenClass</a></p></td><td class="tblDescr"><p>A public but undocumented class</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-test.html">TestQDoc::Test</a></p></td><td class="tblDescr"><p>A class in a namespace</p></td></tr>
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></p></td><td class="tblDescr"><p>A class in a namespace, derived from Test</p></td></tr>
+</table></div>
+</div>
+<!-- @@@classes.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/cpptypes.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/cpptypes.html
new file mode 100644
index 000000000..3bd7789ff
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/cpptypes.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classlists.qdoc -->
+ <title>Test C++ Types | Test 6.2.11</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Test C++ Types</h1>
+<!-- $$$cpptypes-description -->
+<div class="descr" id="details">
+<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>
+<!-- @@@cpptypes -->
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-test.html">TestQDoc::Test</a></p></td><td class="tblDescr"><p>A class in a namespace</p></td></tr>
+</table></div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/crossmoduleref.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/crossmoduleref.html
new file mode 100644
index 000000000..f681dbd69
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/crossmoduleref.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="Namespace that has documented functions in multiple modules.">
+ <title>CrossModuleRef Namespace | Test 6.2.11</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#functions">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">CrossModuleRef Namespace</h1>
+<!-- $$$CrossModuleRef-brief -->
+<p>Namespace that has documented functions in multiple modules. <a href="#details">More...</a></p>
+<!-- @@@CrossModuleRef -->
+<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;CrossModuleRef&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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 3.0</td></tr>
+</table></div>
+<h2 id="functions">Functions</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="crossmoduleref.html#documentMe" translate="no">documentMe</a></b>()</td></tr>
+</table></div>
+<!-- $$$CrossModuleRef-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@CrossModuleRef -->
+<div class="func">
+<h2>Function Documentation</h2>
+<!-- $$$documentMe[overload1]$$$documentMe -->
+<h3 class="fn" translate="no" id="documentMe"><span class="type">void</span> CrossModuleRef::<span class="name">documentMe</span>()</h3>
+<p>Document me!</p>
+<!-- @@@documentMe -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/images/leonardo-da-vinci.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/images/leonardo-da-vinci.png
new file mode 100644
index 000000000..854acb4ca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/images/leonardo-da-vinci.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/obsolete-classes.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/obsolete-classes.html
new file mode 100644
index 000000000..575b6e45c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/obsolete-classes.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classlists.qdoc -->
+ <title>Obsolete Classes | Test 6.2.11</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#classes-with-obsolete-members">Classes with obsolete members</a></li>
+<li class="level2"><a href="#testqdoc">TestQDoc</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Obsolete Classes</h1>
+<!-- $$$obsolete-classes.html-description -->
+<div class="descr" id="details">
+<h2 id="classes-with-obsolete-members">Classes with obsolete members</h2>
+<div class="flowListDiv" translate="no">
+<dl class="flowList odd"><dt class="alphaChar"><b>T</b></dt>
+<dd><a href="testqdoc-test-obsolete.html">Test</a> (<a href="testqdoc.html">TestQDoc</a>)</dd>
+<dd><a href="testqdoc-testderived-obsolete.html">TestDerived</a> (<a href="testqdoc.html">TestQDoc</a>)</dd>
+</dl>
+</div>
+<h3 id="testqdoc">TestQDoc</h3>
+</div>
+<!-- @@@obsolete-classes.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qdoc-test-qmlmodule.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qdoc-test-qmlmodule.html
new file mode 100644
index 000000000..6be64618b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qdoc-test-qmlmodule.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- type.cpp -->
+ <meta name="description" content="QML Types for the Test module.">
+ <title>QDoc.Test QML Module | Test 6.2.11</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">QDoc.Test QML Module</h1>
+<p><b>This module is under development and is subject to change.</b></p>
+<p>This module was introduced in Qt 1.1.</p>
+<!-- $$$QDoc.Test-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@QDoc.Test -->
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="qml-qdoc-test-abstractparent.html">AbstractParent</a></p></td><td class="tblDescr"><p>Abstract base QML type</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="qml-qdoc-test-child.html">Child</a></p></td><td class="tblDescr"><p>A Child inheriting its parent</p></td></tr>
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="qml-qdoc-test-doctest.html">DocTest</a></p></td><td class="tblDescr"><p>Represents a doc test case</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="qml-qdoc-test-type.html">Type</a></p></td><td class="tblDescr"><p>A QML type documented in a .cpp file</p></td></tr>
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="qml-qdoc-test-yetanotherchild.html">YetAnotherChild</a></p></td><td class="tblDescr"><p>A type inheriting from internal abstract parent</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="qml-int.html">int</a></p></td><td class="tblDescr"><p>An integer value type</p></td></tr>
+</table></div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-int.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-int.html
new file mode 100644
index 000000000..63ea49e7d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-int.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- parent.qdoc -->
+ <meta name="description" content="An integer value type.">
+ <title>int QML Value Type | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li>int</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#methods">Methods</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">int QML Value Type</h1>
+<!-- $$$int-brief -->
+<p>An integer value type. <a href="#details">More...</a></p>
+<!-- @@@int -->
+<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></table></div><h2 id="methods">Methods</h2>
+<ul>
+<li class="fn" translate="no">int <b><a href="qml-int.html#abs-method" translate="no">abs</a></b>()</li>
+</ul>
+<!-- $$$int-description -->
+<h2 id="details">Detailed Description</h2>
+<!-- @@@int -->
+<h2>Method Documentation</h2>
+<!-- $$$abs[overload1]$$$abs -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="abs-method">
+<td class="tblQmlFuncNode"><p>
+<span class="type"><a href="qml-int.html" translate="no">int</a></span> <span class="name">abs</span>()</p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Returns the absolute value of this integer.</p>
+</div></div><!-- @@@abs -->
+<br/>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-abstractparent-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-abstractparent-members.html
new file mode 100644
index 000000000..af49329a3
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-abstractparent-members.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- parent.qdoc -->
+ <meta name="description" content="Abstract base QML type.">
+ <title>List of All Members for AbstractParent | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li>AbstractParent</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for AbstractParent</h1>
+<p>This is the complete list of members for <a href="qml-qdoc-test-abstractparent.html">AbstractParent</a>, including inherited members.</p>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-abstractparent.html#children-prop" translate="no">children</a></b> : list&lt;Child&gt; [default]</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-abstractparent.html#name-prop" translate="no">name</a></b> : string</li>
+<li class="fn" translate="no">void <b><a href="qml-qdoc-test-abstractparent.html#name-method" translate="no">name</a></b>()</li>
+<li class="fn" translate="no">void <b><a href="qml-qdoc-test-abstractparent.html#name-method-1" translate="no">name</a></b>(Child <i>child</i>, <i>name</i>)</li>
+<li class="fn" translate="no">void <b><a href="qml-qdoc-test-abstractparent.html#rear-method" translate="no">rear</a></b>(Child <i>child</i>, var <i>method</i>)</li>
+</ul>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-abstractparent.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-abstractparent.html
new file mode 100644
index 000000000..8fe88bee7
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-abstractparent.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- parent.qdoc -->
+ <meta name="description" content="Abstract base QML type.">
+ <title>AbstractParent QML Type | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li>AbstractParent</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#properties">Properties</a></li>
+<li class="level1"><a href="#methods">Methods</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">AbstractParent QML Type</h1>
+<!-- $$$AbstractParent-brief -->
+<p>Abstract base QML type. <a href="#details">More...</a></p>
+<!-- @@@AbstractParent -->
+<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"> Inherited By:</td><td class="memItemRight bottomAlign"> <p><a href="qml-qdoc-test-child.html" translate="no">Child</a></p>
+</td></tr></table></div><ul>
+<li><a href="qml-qdoc-test-abstractparent-members.html">List of all members, including inherited members</a></li>
+</ul>
+<h2 id="properties">Properties</h2>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-abstractparent.html#children-prop" translate="no">children</a></b> : list&lt;Child&gt;</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-abstractparent.html#name-prop" translate="no">name</a></b> : string</li>
+</ul>
+<h2 id="methods">Methods</h2>
+<ul>
+<li class="fn" translate="no">void <b><a href="qml-qdoc-test-abstractparent.html#name-method" translate="no">name</a></b>()</li>
+<li class="fn" translate="no">void <b><a href="qml-qdoc-test-abstractparent.html#name-method-1" translate="no">name</a></b>(Child <i>child</i>, <i>name</i>)</li>
+<li class="fn" translate="no">void <b><a href="qml-qdoc-test-abstractparent.html#rear-method" translate="no">rear</a></b>(Child <i>child</i>, var <i>method</i>)</li>
+</ul>
+<!-- $$$AbstractParent-description -->
+<h2 id="details">Detailed Description</h2>
+<!-- @@@AbstractParent -->
+<h2>Property Documentation</h2>
+<!-- $$$children -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="children-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">children</span> : <span class="type">list</span>&lt;<span class="type"><a href="qml-qdoc-test-child.html" translate="no">Child</a></span>&gt; <code class="details extra" translate="no">[default]</code></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Children of the type.</p>
+</div></div><!-- @@@children -->
+<br/>
+<!-- $$$name -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="name-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">name</span> : <span class="type">string</span></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Name of this parent.</p>
+</div></div><!-- @@@name -->
+<br/>
+<h2>Method Documentation</h2>
+<!-- $$$name[overload1]$$$name -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="name-method">
+<td class="tblQmlFuncNode"><p>
+<span class="type">void</span> <span class="name">name</span>()</p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Name all children with random names.</p>
+</div></div><!-- @@@name -->
+<br/>
+<!-- $$$name$$$nameChild -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="name-method-1">
+<td class="tblQmlFuncNode"><p>
+<span class="type">void</span> <span class="name">name</span>(<span class="type"><a href="qml-qdoc-test-child.html" translate="no">Child</a></span> <i>child</i>, <i>name</i>)</p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Name a <i translate="no">child</i> using <i translate="no">name</i>.</p>
+</div></div><!-- @@@name -->
+<br/>
+<!-- $$$rear[overload1]$$$rearChildvar -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="rear-method">
+<td class="tblQmlFuncNode"><p>
+<span class="type">void</span> <span class="name">rear</span>(<span class="type"><a href="qml-qdoc-test-child.html" translate="no">Child</a></span> <i>child</i>, <span class="type">var</span> <i>method</i> = Strict)</p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Do some abstract parenting on <i translate="no">child</i> using a specific <i translate="no">method</i>.</p>
+</div></div><!-- @@@rear -->
+<br/>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-child-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-child-members.html
new file mode 100644
index 000000000..c9a9b0a5c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-child-members.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- parent.qdoc -->
+ <meta name="description" content="A Child inheriting its parent.">
+ <title>List of All Members for Child | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li>Child</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for Child</h1>
+<p>This is the complete list of members for <a href="qml-qdoc-test-child.html">Child</a>, including inherited members.</p>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-child.html#children-prop" translate="no">children</a></b> : list&lt;Child&gt; [default]</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-child.html#name-prop" translate="no">name</a></b> : string</li>
+<li class="fn" translate="no">void <b><a href="qml-qdoc-test-child.html#name-method" translate="no">name</a></b>(Child <i>child</i>, <i>name</i>)</li>
+<li class="fn" translate="no">void <b><a href="qml-qdoc-test-child.html#name-method" translate="no">name</a></b>()</li>
+<li class="fn" translate="no">void <b><a href="qml-qdoc-test-child.html#rear-method" translate="no">rear</a></b>(Child <i>child</i>, var <i>method</i>)</li>
+</ul>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-child.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-child.html
new file mode 100644
index 000000000..578c2f829
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-child.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- parent.qdoc -->
+ <meta name="description" content="A Child inheriting its parent.">
+ <title>Child QML Type | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li>Child</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#properties">Properties</a></li>
+<li class="level1"><a href="#methods">Methods</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">Child QML Type</h1>
+<!-- $$$Child-brief -->
+<p>A Child inheriting its parent. <a href="#details">More...</a></p>
+<!-- @@@Child -->
+<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"> Inherits:</td><td class="memItemRight bottomAlign"> <p><a href="qml-qdoc-test-abstractparent.html" translate="no">AbstractParent</a></p>
+</td></tr></table></div><ul>
+<li><a href="qml-qdoc-test-child-members.html">List of all members, including inherited members</a></li>
+</ul>
+<h2 id="properties">Properties</h2>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-child.html#children-prop" translate="no">children</a></b> : list&lt;Child&gt;</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-child.html#name-prop" translate="no">name</a></b> : string</li>
+</ul>
+<h2 id="methods">Methods</h2>
+<ul>
+<li class="fn" translate="no">void <b><a href="qml-qdoc-test-child.html#name-method" translate="no">name</a></b>(Child <i>child</i>, <i>name</i>)</li>
+<li class="fn" translate="no">void <b><a href="qml-qdoc-test-child.html#name-method" translate="no">name</a></b>()</li>
+<li class="fn" translate="no">void <b><a href="qml-qdoc-test-child.html#rear-method" translate="no">rear</a></b>(Child <i>child</i>, var <i>method</i>)</li>
+</ul>
+<!-- $$$Child-description -->
+<h2 id="details">Detailed Description</h2>
+<!-- @@@Child -->
+<h2>Property Documentation</h2>
+<!-- $$$children -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="children-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">children</span> : <span class="type">list</span>&lt;<span class="type"><a href="qml-qdoc-test-child.html" translate="no">Child</a></span>&gt; <code class="details extra" translate="no">[default]</code></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Children of the type.</p>
+</div></div><!-- @@@children -->
+<br/>
+<!-- $$$name -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="name-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">name</span> : <span class="type">string</span></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Name of this child.</p>
+</div></div><!-- @@@name -->
+<br/>
+<h2>Method Documentation</h2>
+<!-- $$$name[overload1]$$$nameChild -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="name-method">
+<td class="tblQmlFuncNode"><p>
+<span class="type">void</span> <span class="name">name</span>(<span class="type"><a href="qml-qdoc-test-child.html" translate="no">Child</a></span> <i>child</i>, <i>name</i>)</p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Name a <i translate="no">child</i> of this child using <i translate="no">name</i>.</p>
+</div></div><!-- @@@name -->
+<br/>
+<!-- $$$name[overload1]$$$name -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="name-method">
+<td class="tblQmlFuncNode"><p>
+<span class="type">void</span> <span class="name">name</span>()</p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Name all children with random names.</p>
+</div></div><!-- @@@name -->
+<br/>
+<!-- $$$rear[overload1]$$$rearChildvar -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="rear-method">
+<td class="tblQmlFuncNode"><p>
+<span class="type">void</span> <span class="name">rear</span>(<span class="type"><a href="qml-qdoc-test-child.html" translate="no">Child</a></span> <i>child</i>, <span class="type">var</span> <i>method</i> = Strict)</p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Do some abstract parenting on <i translate="no">child</i> using a specific <i translate="no">method</i>.</p>
+</div></div><!-- @@@rear -->
+<br/>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-doctest-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-doctest-members.html
new file mode 100644
index 000000000..706b65b20
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-doctest-members.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- DocTest.qml -->
+ <meta name="description" content="Represents a doc test case.">
+ <title>List of All Members for DocTest | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li>DocTest</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for DocTest</h1>
+<p>This is the complete list of members for <a href="qml-qdoc-test-doctest.html">DocTest</a>, including inherited members.</p>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-doctest.html#active-prop" translate="no">active</a></b> : bool</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-doctest.html#name-prop" translate="no">name</a></b> : string</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-doctest.html#completed-signal" translate="no">completed</a></b>()</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-doctest.html#fail-method" translate="no">fail</a></b>(<i>message</i>) <code class="summary extra" translate="no">(since QDoc.Test 1.0)</code></li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-doctest.html#fail_hard-method" translate="no">fail_hard</a></b>(<i>msg</i>, <i>option</i>)</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-doctest.html#foo-signal" translate="no">foo</a></b>(var <i>bar</i>)</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-doctest.html#itsHappening-signal" translate="no">itsHappening</a></b>(bool <i>really</i>)</li>
+</ul>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-doctest.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-doctest.html
new file mode 100644
index 000000000..37174fb59
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-doctest.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- DocTest.qml -->
+ <meta name="description" content="Represents a doc test case.">
+ <title>DocTest QML Type | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li>DocTest</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#properties">Properties</a></li>
+<li class="level1"><a href="#signals">Signals</a></li>
+<li class="level1"><a href="#methods">Methods</a></li>
+<li class="level1"><a href="#details">Detailed Description</a></li>
+<li class="level2"><a href="#introduction">Introduction</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">DocTest QML Type</h1>
+<!-- $$$DocTest-brief -->
+<p>Represents a doc test case. <a href="#details">More...</a></p>
+<!-- @@@DocTest -->
+<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"> QDoc.Test 0.9</td></tr></table></div><ul>
+<li><a href="qml-qdoc-test-doctest-members.html">List of all members, including inherited members</a></li>
+</ul>
+<h2 id="properties">Properties</h2>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-doctest.html#active-prop" translate="no">active</a></b> : bool</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-doctest.html#name-prop" translate="no">name</a></b> : string</li>
+</ul>
+<h2 id="signals">Signals</h2>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-doctest.html#completed-signal" translate="no">completed</a></b>()</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-doctest.html#foo-signal" translate="no">foo</a></b>(var <i>bar</i>)</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-doctest.html#itsHappening-signal" translate="no">itsHappening</a></b>(bool <i>really</i>)</li>
+</ul>
+<h2 id="methods">Methods</h2>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-doctest.html#fail-method" translate="no">fail</a></b>(<i>message</i>) <code class="summary extra" translate="no">(since QDoc.Test 1.0)</code></li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-doctest.html#fail_hard-method" translate="no">fail_hard</a></b>(<i>msg</i>, <i>option</i>)</li>
+</ul>
+<!-- $$$DocTest-description -->
+<h2 id="details">Detailed Description</h2>
+<h2 id="introduction">Introduction</h2>
+<p>A documentation test case, itself documented inline in DocTest.qml.</p>
+<!-- @@@DocTest -->
+<h2>Property Documentation</h2>
+<!-- $$$active -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="active-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">active</span> : <span class="type">bool</span> <code class="details extra" translate="no">[default: true]</code></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Whether the test is active.</p>
+<p><b>See also </b><a href="qml-qdoc-test-doctest.html#name-prop" translate="no">name</a>.</p>
+</div></div><!-- @@@active -->
+<br/>
+<!-- $$$name -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="name-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">name</span> : <span class="type">string</span> <code class="details extra" translate="no">[required]</code></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Name of the test.</p>
+<pre class="qml" translate="no"><span class="type"><a href="qml-test-nover-doctest.html" translate="no">DocTest</a></span> {
+ <span class="name">name</span>: <span class="string">&quot;test&quot;</span>
+ <span class="comment">// ...</span>
+}</pre>
+</div></div><!-- @@@name -->
+<br/>
+<h2>Signal Documentation</h2>
+<!-- $$$completed[overload1]$$$completed -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="completed-signal">
+<td class="tblQmlFuncNode"><p>
+<span class="name">completed</span>()</p></td></tr>
+</table></div></div>
+<div class="qmldoc"><div class="admonition note"><p><b>Note: </b>The corresponding handler is <code translate="no">onCompleted</code>.</p>
+</div></div></div><!-- @@@completed -->
+<br/>
+<!-- $$$foo[overload1]$$$foovar -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="foo-signal">
+<td class="tblQmlFuncNode"><p>
+<span class="name">foo</span>(<span class="type">var</span> <i>bar</i>)</p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Signal with parameter <i translate="no">bar</i>.</p>
+<div class="admonition note"><p><b>Note: </b>The corresponding handler is <code translate="no">onFoo</code>.</p>
+</div></div></div><!-- @@@foo -->
+<br/>
+<!-- $$$itsHappening[overload1]$$$itsHappeningbool -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="itsHappening-signal">
+<td class="tblQmlFuncNode"><p>
+<span class="name">itsHappening</span>(<span class="type">bool</span> <i>really</i>)</p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Signals that something is <i translate="no">really</i> happening.</p>
+<div class="admonition note"><p><b>Note: </b>The corresponding handler is <code translate="no">onItsHappening</code>.</p>
+</div></div></div><!-- @@@itsHappening -->
+<br/>
+<h2>Method Documentation</h2>
+<!-- $$$fail[overload1]$$$fail -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="fail-method">
+<td class="tblQmlFuncNode"><p>
+<code class="details extra" translate="no">[since QDoc.Test 1.0]</code> <span class="name">fail</span>(<i>message</i> = &quot;oops&quot;)</p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Fails the current test case, with the optional <i translate="no">message</i>.</p>
+<p>This method was introduced in QDoc.Test 1.0.</p>
+</div></div><!-- @@@fail -->
+<br/>
+<!-- $$$fail_hard[overload1]$$$fail_hard -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="fail_hard-method">
+<td class="tblQmlFuncNode"><p>
+<span class="name">fail_hard</span>(<i>msg</i> = &quot;facepalm&quot;, <i>option</i> = 123)</p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Fails the current test case, hard.</p>
+<ul>
+<li>Prints out <i translate="no">msg</i>.</li>
+<li>Accepts a random <i translate="no">option</i>.</li>
+</ul>
+</div></div><!-- @@@fail_hard -->
+<br/>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-oldtype-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-oldtype-members.html
new file mode 100644
index 000000000..6527f5a6c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-oldtype-members.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- type.cpp -->
+ <meta name="description" content="Deprecated old type.">
+ <title>List of All Members for OldType | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li>OldType</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for OldType</h1>
+<p>This is the complete list of members for <a href="qml-qdoc-test-oldtype.html" class="obsolete">OldType</a>, including inherited members.</p>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-oldtype.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-oldtype.html
new file mode 100644
index 000000000..4fe99b259
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-oldtype.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- type.cpp -->
+ <meta name="description" content="Deprecated old type.">
+ <title>OldType QML Type | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li>OldType</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">OldType QML Type</h1>
+<!-- $$$OldType-brief -->
+<p>Deprecated old type. <a href="#details">More...</a></p>
+<!-- @@@OldType -->
+<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"> Status:</td><td class="memItemRight bottomAlign"> Deprecated since 1.0<span class="status deprecated"></span></td></tr></table></div><p><b>This type is deprecated since QDoc.Test 1.0. We strongly advise against using it in new code.</b></p>
+<ul>
+<li><a href="qml-qdoc-test-oldtype-members.html">List of all members, including inherited members</a></li>
+</ul>
+<!-- $$$OldType-description -->
+<h2 id="details">Detailed Description</h2>
+<!-- @@@OldType -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-type-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-type-members.html
new file mode 100644
index 000000000..eb3180a88
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-type-members.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- type.cpp -->
+ <meta name="description" content="A QML type documented in a .cpp file.">
+ <title>List of All Members for Type | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<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-qdoc-test-type.html">Type</a>, including inherited members.</p>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#fifth-prop" translate="no">fifth</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#fourth-prop" translate="no">fourth</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#group-prop" translate="no">group</a></b><ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#group.first-prop" translate="no">group.first</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#group.second-prop" translate="no">group.second</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#group.third-prop" translate="no">group.third</a></b> : int</li>
+</ul>
+</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#id-prop" translate="no">id</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#name-prop" translate="no">name</a></b> : string</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#type-attached-prop" translate="no">type</a></b> : enumeration [attached]</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#completed-signal" translate="no">completed</a></b>(int <i>status</i>)</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#configured-signal" translate="no">configured</a></b>() [attached]</li>
+<li class="fn" translate="no">Type <b><a href="qml-qdoc-test-type.html#copy-method" translate="no">copy</a></b>(<i>a</i>)</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type-obsolete.html#deprecatedMethod-method" translate="no">deprecatedMethod</a></b>() <code class="summary extra" translate="no">(deprecated in 6.2)</code></li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#disable-method" translate="no">disable</a></b>()</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#enable-method" translate="no">enable</a></b>()</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#futureDeprecated-method" translate="no">futureDeprecated</a></b>() <code class="summary extra" translate="no">(until 6.3)</code></li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#group.created-signal" translate="no">group.created</a></b>()</li>
+</ul>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-type-obsolete.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-type-obsolete.html
new file mode 100644
index 000000000..acd56759a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-type-obsolete.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- type.cpp -->
+ <meta name="description" content="A QML type documented in a .cpp file.">
+ <title>Obsolete Members for Type | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li>Type</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">Obsolete Members for Type</h1>
+<p><b>The following members of QML type <a href="qml-qdoc-test-type.html">Type</a> are deprecated.</b> They are provided to keep old source code working. We strongly advise against using them in new code.</p>
+<h2 id="methods">Methods</h2>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type-obsolete.html#deprecatedMethod-method" translate="no">deprecatedMethod</a></b>() <code class="summary extra" translate="no">(deprecated in 6.2)</code></li>
+</ul>
+<h2>Method Documentation</h2>
+<!-- $$$deprecatedMethod[overload1]$$$deprecatedMethod -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="deprecatedMethod-method">
+<td class="tblQmlFuncNode"><p>
+<code class="details extra" translate="no">[deprecated in 6.2]</code> <span class="name">deprecatedMethod</span>()</p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>This method is deprecated since QDoc.Test 6.2. We strongly advise against using it in new code.</p>
+<p>This method has no replacement.</p>
+<p>This is a method that should include information about being deprecated and that it has been so since 6.2 in its docs.</p>
+</div></div><!-- @@@deprecatedMethod -->
+<br/>
+</body>
+</html>
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
new file mode 100644
index 000000000..807a0e07a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-type.html
@@ -0,0 +1,209 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- type.cpp -->
+ <meta name="description" content="A QML type documented in a .cpp file.">
+ <title>Type QML Type | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li>Type</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#properties">Properties</a></li>
+<li class="level1"><a href="#attached-properties">Attached Properties</a></li>
+<li class="level1"><a href="#signals">Signals</a></li>
+<li class="level1"><a href="#attached-signals">Attached Signals</a></li>
+<li class="level1"><a href="#methods">Methods</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">Type QML Type</h1>
+<!-- $$$Type-brief -->
+<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>
+<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>
+<h2 id="properties">Properties</h2>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#fifth-prop" translate="no">fifth</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#fourth-prop" translate="no">fourth</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#group-prop" translate="no">group</a></b><ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#group.first-prop" translate="no">group.first</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#group.second-prop" translate="no">group.second</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#group.third-prop" translate="no">group.third</a></b> : int</li>
+</ul>
+</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#id-prop" translate="no">id</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#name-prop" translate="no">name</a></b> : string</li>
+</ul>
+<h2 id="attached-properties">Attached Properties</h2>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#type-attached-prop" translate="no">type</a></b> : enumeration</li>
+</ul>
+<h2 id="signals">Signals</h2>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#completed-signal" translate="no">completed</a></b>(int <i>status</i>)</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#group.created-signal" translate="no">group.created</a></b>()</li>
+</ul>
+<h2 id="attached-signals">Attached Signals</h2>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#configured-signal" translate="no">configured</a></b>()</li>
+</ul>
+<h2 id="methods">Methods</h2>
+<ul>
+<li class="fn" translate="no">Type <b><a href="qml-qdoc-test-type.html#copy-method" translate="no">copy</a></b>(<i>a</i>)</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#disable-method" translate="no">disable</a></b>()</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#enable-method" translate="no">enable</a></b>()</li>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-type.html#futureDeprecated-method" translate="no">futureDeprecated</a></b>() <code class="summary extra" translate="no">(until 6.3)</code></li>
+</ul>
+<!-- $$$Type-description -->
+<h2 id="details">Detailed Description</h2>
+<!-- @@@Type -->
+<h2>Property Documentation</h2>
+<!-- $$$ -->
+<div class="qmlitem"><div class="fngroup">
+<div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="fifth-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">fifth</span> : <span class="type"><a href="qml-int.html" translate="no">int</a></span></p></td></tr>
+<tr valign="top" class="odd" id="fourth-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">fourth</span> : <span class="type"><a href="qml-int.html" translate="no">int</a></span></p></td></tr>
+</table></div></div>
+</div><div class="qmldoc"><p>A group of properties sharing a documentation comment.</p>
+</div></div><!-- @@@ -->
+<br/>
+<!-- $$$group -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="even" id="group-prop"><th class="centerAlign"><p><b>group group</b></p></th></tr>
+<tr valign="top" class="odd" id="group.first-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">group.first</span> : <span class="type"><a href="qml-int.html" translate="no">int</a></span></p></td></tr>
+<tr valign="top" class="odd" id="group.second-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">group.second</span> : <span class="type"><a href="qml-int.html" translate="no">int</a></span></p></td></tr>
+<tr valign="top" class="odd" id="group.third-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">group.third</span> : <span class="type"><a href="qml-int.html" translate="no">int</a></span></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>A property group.</p>
+</div></div><!-- @@@group -->
+<br/>
+<!-- $$$id -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="id-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">id</span> : <span class="type"><a href="qml-int.html" translate="no">int</a></span> <code class="details extra" translate="no">[read-only]</code></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>A read-only property.</p>
+</div></div><!-- @@@id -->
+<br/>
+<!-- $$$name -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="name-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">name</span> : <span class="type">string</span> <code class="details extra" translate="no">[required]</code></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Name of the Test.</p>
+</div></div><!-- @@@name -->
+<br/>
+<h2>Attached Property Documentation</h2>
+<!-- $$$type -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="type-attached-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">Type.type</span> : <span class="type">enumeration</span> <code class="details extra" translate="no">[default: Type.NoType]</code></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><div class="table"><table class="valuelist"><tr valign="top" class="odd"><th class="tblConst">Constant</th><th class="tbldscr">Description</th></tr>
+<tr><td class="topAlign"><code translate="no">Type.NoType</code></td><td class="topAlign">Nothing</td></tr>
+<tr><td class="topAlign"><code translate="no">Type.SomeType</code></td><td class="topAlign">Something</td></tr>
+</table></div>
+</div></div><!-- @@@type -->
+<br/>
+<h2>Signal Documentation</h2>
+<!-- $$$completed[overload1]$$$completedint -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="completed-signal">
+<td class="tblQmlFuncNode"><p>
+<span class="name">completed</span>(<span class="type"><a href="qml-int.html" translate="no">int</a></span> <i>status</i>)</p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>This signal is emitted when the operation completed with <i translate="no">status</i>.</p>
+<div class="admonition note"><p><b>Note: </b>The corresponding handler is <code translate="no">onCompleted</code>.</p>
+</div></div></div><!-- @@@completed -->
+<br/>
+<!-- $$$group.created[overload1]$$$group.created -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="group.created-signal">
+<td class="tblQmlFuncNode"><p>
+<span class="name">group.created</span>()</p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>This signal is prefixed with <i>group</i>.</p>
+<div class="admonition note"><p><b>Note: </b>The corresponding handler is <code translate="no">group.onCreated</code>.</p>
+</div></div></div><!-- @@@group.created -->
+<br/>
+<h2>Attached Signal Documentation</h2>
+<!-- $$$configured[overload1]$$$configured -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="configured-signal">
+<td class="tblQmlFuncNode"><p>
+<span class="name">configured</span>()</p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>This attached signal is emitted when the type was configured.</p>
+<div class="admonition note"><p><b>Note: </b>The corresponding handler is <code translate="no">onConfigured</code>.</p>
+</div></div></div><!-- @@@configured -->
+<br/>
+<h2>Method Documentation</h2>
+<!-- $$$ -->
+<div class="qmlitem"><div class="fngroup">
+<div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="disable-method">
+<td class="tblQmlFuncNode"><p>
+<span class="name">disable</span>()</p></td></tr>
+<tr valign="top" class="odd" id="enable-method">
+<td class="tblQmlFuncNode"><p>
+<span class="name">enable</span>()</p></td></tr>
+</table></div></div>
+</div><div class="qmldoc"><p>Enables or disables this type.</p>
+</div></div><!-- @@@ -->
+<br/>
+<!-- $$$copy[overload1]$$$copy -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="copy-method">
+<td class="tblQmlFuncNode"><p>
+<span class="type"><a href="qml-qdoc-test-type.html" translate="no">Type</a></span> <span class="name">copy</span>(<i>a</i>)</p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Returns another Type based on <i translate="no">a</i>.</p>
+</div></div><!-- @@@copy -->
+<br/>
+<!-- $$$futureDeprecated[overload1]$$$futureDeprecated -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="futureDeprecated-method">
+<td class="tblQmlFuncNode"><p>
+<code class="details extra" translate="no">[until 6.3]</code> <span class="name">futureDeprecated</span>()</p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>This method is scheduled for deprecation in version 6.3.</p>
+<p>Use something else instead.</p>
+<p>This is a method that's marked for deprecation in a future version.</p>
+</div></div><!-- @@@futureDeprecated -->
+<br/>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-yetanotherchild-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-yetanotherchild-members.html
new file mode 100644
index 000000000..fbab41876
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-yetanotherchild-members.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- parent.qdoc -->
+ <meta name="description" content="A type inheriting from internal abstract parent.">
+ <title>List of All Members for YetAnotherChild | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li>YetAnotherChild</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for YetAnotherChild</h1>
+<p>This is the complete list of members for <a href="qml-qdoc-test-yetanotherchild.html">YetAnotherChild</a>, including inherited members.</p>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-yetanotherchild.html#prop-prop" translate="no">prop</a></b> : int</li>
+</ul>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-yetanotherchild.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-yetanotherchild.html
new file mode 100644
index 000000000..2ecc87355
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-yetanotherchild.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- parent.qdoc -->
+ <meta name="description" content="A type inheriting from internal abstract parent.">
+ <title>YetAnotherChild QML Type | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li>YetAnotherChild</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#properties">Properties</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">YetAnotherChild QML Type</h1>
+<!-- $$$YetAnotherChild-brief -->
+<p>A type inheriting from internal abstract parent. <a href="#details">More...</a></p>
+<!-- @@@YetAnotherChild -->
+<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></table></div><ul>
+<li><a href="qml-qdoc-test-yetanotherchild-members.html">List of all members, including inherited members</a></li>
+</ul>
+<h2 id="properties">Properties</h2>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qdoc-test-yetanotherchild.html#prop-prop" translate="no">prop</a></b> : int</li>
+</ul>
+<!-- $$$YetAnotherChild-description -->
+<h2 id="details">Detailed Description</h2>
+<!-- @@@YetAnotherChild -->
+<h2>Property Documentation</h2>
+<!-- $$$prop -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="prop-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">prop</span> : <span class="type"><a href="qml-int.html" translate="no">int</a></span></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Propagated to inheriting type docs.</p>
+</div></div><!-- @@@prop -->
+<br/>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-test-nover-doctest-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-test-nover-doctest-members.html
new file mode 100644
index 000000000..491427692
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-test-nover-doctest-members.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- DocTest.qml -->
+ <meta name="description" content="Shadows the type name in QDoc.Test module.">
+ <title>List of All Members for DocTest | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li><a href="test-nover-qmlmodule.html" translate="no">Test.NoVer (Tech Preview)</a></li>
+<li>DocTest</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for DocTest</h1>
+<p>This is the complete list of members for <a href="qml-test-nover-doctest.html">DocTest</a>, including inherited members.</p>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-test-nover-doctest.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-test-nover-doctest.html
new file mode 100644
index 000000000..2543b3ce3
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-test-nover-doctest.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- DocTest.qml -->
+ <meta name="description" content="Shadows the type name in QDoc.Test module.">
+ <title>DocTest QML Type | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li><a href="test-nover-qmlmodule.html" translate="no">Test.NoVer (Tech Preview)</a></li>
+<li>DocTest</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">DocTest QML Type</h1>
+<!-- $$$DocTest-brief -->
+<p>Shadows the type name in QDoc.Test module. <a href="#details">More...</a></p>
+<!-- @@@DocTest -->
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> Import Statement:</td><td class="memItemRight bottomAlign"> import Test.NoVer</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"> Status:</td><td class="memItemRight bottomAlign"> Tech Preview<span class="status tech-preview"></span></td></tr></table></div><ul>
+<li><a href="qml-test-nover-doctest-members.html">List of all members, including inherited members</a></li>
+</ul>
+<!-- $$$DocTest-description -->
+<h2 id="details">Detailed Description</h2>
+<!-- @@@DocTest -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-test-nover-typenoversion-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-test-nover-typenoversion-members.html
new file mode 100644
index 000000000..ca2308045
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-test-nover-typenoversion-members.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- type.cpp -->
+ <meta name="description" content="Another QML type documented in a .cpp file.">
+ <title>List of All Members for TypeNoVersion | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li><a href="test-nover-qmlmodule.html" translate="no">Test.NoVer (Tech Preview)</a></li>
+<li>TypeNoVersion</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for TypeNoVersion</h1>
+<p>This is the complete list of members for <a href="qml-test-nover-typenoversion.html">TypeNoVersion</a>, including inherited members.</p>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-test-nover-typenoversion.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-test-nover-typenoversion.html
new file mode 100644
index 000000000..b754038d9
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-test-nover-typenoversion.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- type.cpp -->
+ <meta name="description" content="Another QML type documented in a .cpp file.">
+ <title>TypeNoVersion QML Type | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li><a href="test-nover-qmlmodule.html" translate="no">Test.NoVer (Tech Preview)</a></li>
+<li>TypeNoVersion</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">TypeNoVersion QML Type</h1>
+<!-- $$$TypeNoVersion-brief -->
+<p>Another QML type documented in a .cpp file. <a href="#details">More...</a></p>
+<!-- @@@TypeNoVersion -->
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> Import Statement:</td><td class="memItemRight bottomAlign"> import Test.NoVer</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"> Status:</td><td class="memItemRight bottomAlign"> Tech Preview<span class="status tech-preview"></span></td></tr></table></div><ul>
+<li><a href="qml-test-nover-typenoversion-members.html">List of all members, including inherited members</a></li>
+</ul>
+<!-- $$$TypeNoVersion-description -->
+<h2 id="details">Detailed Description</h2>
+<!-- @@@TypeNoVersion -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-themodule-thetype-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-themodule-thetype-members.html
new file mode 100644
index 000000000..de3143219
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-themodule-thetype-members.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- properties.qdoc -->
+ <title>List of All Members for TheType | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li><a href="themodule-qmlmodule.html" translate="no">TheModule</a></li>
+<li>TheType</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for TheType</h1>
+<p>This is the complete list of members for <a href="qml-themodule-thetype.html">TheType</a>, including inherited members.</p>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-themodule-thetype.html#name-prop" translate="no">name</a></b> : string</li>
+</ul>
+</body>
+</html>
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
new file mode 100644
index 000000000..369d9358e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-themodule-thetype.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- properties.qdoc -->
+ <title>TheType QML Type | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li><a href="themodule-qmlmodule.html" translate="no">TheModule</a></li>
+<li>TheType</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#properties">Properties</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">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>
+<li><a href="qml-themodule-thetype-members.html">List of all members, including inherited members</a></li>
+</ul>
+<h2 id="properties">Properties</h2>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-themodule-thetype.html#name-prop" translate="no">name</a></b> : string</li>
+</ul>
+<!-- $$$TheType-description -->
+<h2 id="details">Detailed Description</h2>
+<!-- @@@TheType -->
+<h2>Property Documentation</h2>
+<!-- $$$name -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="name-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">name</span> : <span class="type">string</span> <code class="details extra" translate="no">[read-only]</code></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Read-only status of this property is resolved from Q_PROPERTY.</p>
+</div></div><!-- @@@name -->
+<br/>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-progressbar-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-progressbar-members.html
new file mode 100644
index 000000000..77c4ef164
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-progressbar-members.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- ProgressBar.qml -->
+ <meta name="description" content="A component that shows the progress of an event.">
+ <title>List of All Members for ProgressBar | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li><a href="uicomponents-qmlmodule.html" translate="no">UIComponents</a></li>
+<li>ProgressBar</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for ProgressBar</h1>
+<p>This is the complete list of members for <a href="qml-uicomponents-progressbar.html">ProgressBar</a>, including inherited members.</p>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-uicomponents-progressbar.html#color-prop" translate="no">color</a></b> : color</li>
+<li class="fn" translate="no"><b><a href="qml-uicomponents-progressbar.html#maximum-prop" translate="no">maximum</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="qml-uicomponents-progressbar.html#minimum-prop" translate="no">minimum</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="qml-uicomponents-progressbar.html#secondColor-prop" translate="no">secondColor</a></b> : color</li>
+<li class="fn" translate="no"><b><a href="qml-uicomponents-progressbar.html#value-prop" translate="no">value</a></b> : int</li>
+</ul>
+</body>
+</html>
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
new file mode 100644
index 000000000..2db9f91d7
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-progressbar.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- ProgressBar.qml -->
+ <meta name="description" content="A component that shows the progress of an event.">
+ <title>ProgressBar QML Type | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li><a href="uicomponents-qmlmodule.html" translate="no">UIComponents</a></li>
+<li>ProgressBar</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#properties">Properties</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">ProgressBar QML Type</h1>
+<!-- $$$ProgressBar-brief -->
+<p>A component that shows the progress of an event. <a href="#details">More...</a></p>
+<!-- @@@ProgressBar -->
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> Import Statement:</td><td class="memItemRight bottomAlign"> import UIComponents 1.0</td></tr></table></div><ul>
+<li><a href="qml-uicomponents-progressbar-members.html">List of all members, including inherited members</a></li>
+</ul>
+<h2 id="properties">Properties</h2>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-uicomponents-progressbar.html#color-prop" translate="no">color</a></b> : color</li>
+<li class="fn" translate="no"><b><a href="qml-uicomponents-progressbar.html#maximum-prop" translate="no">maximum</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="qml-uicomponents-progressbar.html#minimum-prop" translate="no">minimum</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="qml-uicomponents-progressbar.html#secondColor-prop" translate="no">secondColor</a></b> : color</li>
+<li class="fn" translate="no"><b><a href="qml-uicomponents-progressbar.html#value-prop" translate="no">value</a></b> : int</li>
+</ul>
+<!-- $$$ProgressBar-description -->
+<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>
+<!-- @@@ProgressBar -->
+<h2>Property Documentation</h2>
+<!-- $$$color -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="color-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">color</span> : <span class="type">color</span></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>The color of the <a href="qml-uicomponents-progressbar.html" translate="no">ProgressBar</a>'s gradient. Must bind to a color type.</p>
+<p><b>See also </b><a href="qml-uicomponents-progressbar.html#secondColor-prop" translate="no">secondColor</a>.</p>
+</div></div><!-- @@@color -->
+<br/>
+<!-- $$$maximum -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="maximum-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">maximum</span> : <span class="type"><a href="qml-int.html" translate="no">int</a></span></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>The maximum value of the <a href="qml-uicomponents-progressbar.html" translate="no">ProgressBar</a> range. The <a href="qml-uicomponents-progressbar.html#value-prop" translate="no">value</a> must not be more than this value.</p>
+</div></div><!-- @@@maximum -->
+<br/>
+<!-- $$$minimum -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="minimum-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">minimum</span> : <span class="type"><a href="qml-int.html" translate="no">int</a></span></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>The minimum value of the <a href="qml-uicomponents-progressbar.html" translate="no">ProgressBar</a> range. The <a href="qml-uicomponents-progressbar.html#value-prop" translate="no">value</a> must not be less than this value.</p>
+</div></div><!-- @@@minimum -->
+<br/>
+<!-- $$$secondColor -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="secondColor-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">secondColor</span> : <span class="type">color</span></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>The second color of the <a href="qml-uicomponents-progressbar.html" translate="no">ProgressBar</a>'s gradient. Must bind to a color type.</p>
+<p><b>See also </b><a href="qml-uicomponents-progressbar.html#color-prop" translate="no">color</a>.</p>
+</div></div><!-- @@@secondColor -->
+<br/>
+<!-- $$$value -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="value-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">value</span> : <span class="type"><a href="qml-int.html" translate="no">int</a></span></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>The value of the progress.</p>
+</div></div><!-- @@@value -->
+<br/>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-switch-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-switch-members.html
new file mode 100644
index 000000000..df1cd735f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-switch-members.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- Switch.qml -->
+ <meta name="description" content="A component that can be turned on or off.">
+ <title>List of All Members for Switch | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li><a href="uicomponents-qmlmodule.html" translate="no">UIComponents</a></li>
+<li>Switch</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for Switch</h1>
+<p>This is the complete list of members for <a href="qml-uicomponents-switch.html">Switch</a>, including inherited members.</p>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-uicomponents-switch.html#on-prop" translate="no">on</a></b> : bool</li>
+<li class="fn" translate="no"><b><a href="qml-uicomponents-switch.html#toggle-method" translate="no">toggle</a></b>()</li>
+</ul>
+</body>
+</html>
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
new file mode 100644
index 000000000..600c6c164
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-switch.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- Switch.qml -->
+ <meta name="description" content="A component that can be turned on or off.">
+ <title>Switch QML Type | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li><a href="uicomponents-qmlmodule.html" translate="no">UIComponents</a></li>
+<li>Switch</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#properties">Properties</a></li>
+<li class="level1"><a href="#methods">Methods</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">Switch QML Type</h1>
+<!-- $$$Switch-brief -->
+<p>A component that can be turned on or off. <a href="#details">More...</a></p>
+<!-- @@@Switch -->
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> Import Statement:</td><td class="memItemRight bottomAlign"> import UIComponents 1.0</td></tr></table></div><ul>
+<li><a href="qml-uicomponents-switch-members.html">List of all members, including inherited members</a></li>
+</ul>
+<h2 id="properties">Properties</h2>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-uicomponents-switch.html#on-prop" translate="no">on</a></b> : bool</li>
+</ul>
+<h2 id="methods">Methods</h2>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-uicomponents-switch.html#toggle-method" translate="no">toggle</a></b>()</li>
+</ul>
+<!-- $$$Switch-description -->
+<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>
+<!-- @@@Switch -->
+<h2>Property Documentation</h2>
+<!-- $$$on -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="on-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">on</span> : <span class="type">bool</span></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>Indicates the state of the switch. If <code translate="no">false</code>, then the switch is in the <code translate="no">off</code> state.</p>
+</div></div><!-- @@@on -->
+<br/>
+<h2>Method Documentation</h2>
+<!-- $$$toggle[overload1]$$$toggle -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="toggle-method">
+<td class="tblQmlFuncNode"><p>
+<span class="name">toggle</span>()</p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>A method to toggle the switch. If the switch is <code translate="no">on</code>, the toggling it will turn it <code translate="no">off</code>. Toggling a switch in the <code translate="no">off</code> position will turn it <code translate="no">on</code>.</p>
+</div></div><!-- @@@toggle -->
+<br/>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-tabwidget-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-tabwidget-members.html
new file mode 100644
index 000000000..cd459ceff
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-tabwidget-members.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- TabWidget.qml -->
+ <meta name="description" content="A widget that places its children as tabs.">
+ <title>List of All Members for TabWidget | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li><a href="uicomponents-qmlmodule.html" translate="no">UIComponents</a></li>
+<li>TabWidget</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for TabWidget</h1>
+<p>This is the complete list of members for <a href="qml-uicomponents-tabwidget.html">TabWidget</a>, including inherited members.</p>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-uicomponents-tabwidget.html#current-prop" translate="no">current</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="qml-uicomponents-tabwidget.html#sampleReadOnlyProperty-prop" translate="no">sampleReadOnlyProperty</a></b> : int</li>
+</ul>
+</body>
+</html>
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
new file mode 100644
index 000000000..3a55163ff
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-tabwidget.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- TabWidget.qml -->
+ <meta name="description" content="A widget that places its children as tabs.">
+ <title>TabWidget QML Type | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="qdoc-test-qmlmodule.html" translate="no">Types</a></li>
+<li><a href="uicomponents-qmlmodule.html" translate="no">UIComponents</a></li>
+<li>TabWidget</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#properties">Properties</a></li>
+<li class="level1"><a href="#details">Detailed Description</a></li>
+<li class="level2"><a href="#adding-tabs">Adding Tabs</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">TabWidget QML Type</h1>
+<!-- $$$TabWidget-brief -->
+<p>A widget that places its children as tabs. <a href="#details">More...</a></p>
+<!-- @@@TabWidget -->
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> Import Statement:</td><td class="memItemRight bottomAlign"> import UIComponents 1.0</td></tr></table></div><ul>
+<li><a href="qml-uicomponents-tabwidget-members.html">List of all members, including inherited members</a></li>
+</ul>
+<h2 id="properties">Properties</h2>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-uicomponents-tabwidget.html#current-prop" translate="no">current</a></b> : int</li>
+<li class="fn" translate="no"><b><a href="qml-uicomponents-tabwidget.html#sampleReadOnlyProperty-prop" translate="no">sampleReadOnlyProperty</a></b> : int</li>
+</ul>
+<!-- $$$TabWidget-description -->
+<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>
+<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> {
+ <span class="name">id</span>: <span class="name">tabwidget</span>
+
+ <span class="type">Rectangle</span> {
+ <span class="name">id</span>: <span class="name">tab1</span>
+ <span class="name">color</span>: <span class="string">&quot;red&quot;</span>
+ <span class="comment">//... omitted</span>
+ }
+ <span class="type">Rectangle</span> {
+ <span class="name">id</span>: <span class="name">tab2</span>
+ <span class="name">color</span>: <span class="string">&quot;blue&quot;</span>
+ <span class="comment">//... omitted</span>
+ }
+
+}</pre>
+<!-- @@@TabWidget -->
+<h2>Property Documentation</h2>
+<!-- $$$current -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="current-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">current</span> : <span class="type"><a href="qml-int.html" translate="no">int</a></span></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>The currently active tab in the <a href="qml-uicomponents-tabwidget.html" translate="no">TabWidget</a>.</p>
+</div></div><!-- @@@current -->
+<br/>
+<!-- $$$sampleReadOnlyProperty -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="sampleReadOnlyProperty-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">sampleReadOnlyProperty</span> : <span class="type"><a href="qml-int.html" translate="no">int</a></span> <code class="details extra" translate="no">[read-only]</code></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>A sample <code translate="no">read-only</code> property. A contrived property to demonstrate QDoc's ability to detect read-only properties.</p>
+<p>The signature is:</p>
+<pre class="cpp" translate="no">readonly property <span class="type"><a href="qml-int.html" translate="no">int</a></span> sampleReadOnlyProperty: <span class="number">0</span></pre>
+<p>Note that the property must be initialized to a value.</p>
+</div></div><!-- @@@sampleReadOnlyProperty -->
+<br/>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qmlmodules.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qmlmodules.html
new file mode 100644
index 000000000..bd0238d40
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qmlmodules.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- modules.qdoc -->
+ <title>QML Modules | Test 6.2.11</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#qml-types">QML types</a></li>
+<li class="level1"><a href="#qml-value-types">QML value types</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">QML Modules</h1>
+<!-- $$$qmlmodules.html-description -->
+<div class="descr" id="details">
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="test-empty-qmlmodule.html">No QML Types Here</a></p></td><td class="tblDescr"><p>A QML module with no member types.</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="qdoc-test-qmlmodule.html">QDoc.Test QML Module</a></p></td><td class="tblDescr"><p>QML Types for the Test module.</p></td></tr>
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="themodule-qmlmodule.html">TheModule</a></p></td><td class="tblDescr"><p></p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="uicomponents-qmlmodule.html">UI Components</a></p></td><td class="tblDescr"><p>Basic set of UI components.</p></td></tr>
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="test-nover-qmlmodule.html">Versionless QML Module</a></p></td><td class="tblDescr"><p>QML Types for the Test module without version.</p></td></tr>
+</table></div>
+<h2 id="qml-types">QML types</h2>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="qml-qdoc-test-abstractparent.html">AbstractParent</a></p></td><td class="tblDescr"><p>Abstract base QML type</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="qml-qdoc-test-child.html">Child</a></p></td><td class="tblDescr"><p>A Child inheriting its parent</p></td></tr>
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="qml-qdoc-test-doctest.html">DocTest</a></p></td><td class="tblDescr"><p>Represents a doc test case</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="qml-qdoc-test-type.html">Type</a></p></td><td class="tblDescr"><p>A QML type documented in a .cpp file</p></td></tr>
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="qml-qdoc-test-yetanotherchild.html">YetAnotherChild</a></p></td><td class="tblDescr"><p>A type inheriting from internal abstract parent</p></td></tr>
+</table></div>
+<h2 id="qml-value-types">QML value types</h2>
+<p class="centerAlign functionIndex" translate="no"><b><a href="#i">I</a>&nbsp;</b></p>
+<div class="flowListDiv" translate="no">
+<dl class="flowList odd"><dt class="alphaChar" id="i"><b>I</b></dt>
+<dd><a href="qml-int.html">int</a></dd>
+</dl>
+</div>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="qml-int.html">int</a></p></td><td class="tblDescr"><p>An integer value type</p></td></tr>
+</table></div>
+</div>
+<!-- @@@qmlmodules.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/seenclass.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/seenclass.html
new file mode 100644
index 000000000..ece82ceb7
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/seenclass.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- dont.cpp -->
+ <meta name="description" content="A public but undocumented class.">
+ <title>SeenClass Class | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>SeenClass</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">SeenClass Class</h1>
+<!-- $$$SeenClass-brief -->
+<p>A public but undocumented class. <a href="#details">More...</a></p>
+<!-- @@@SeenClass -->
+<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;SeenClass&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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>
+</table></div>
+<!-- $$$SeenClass-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@SeenClass -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-cmaketest-cmakelists-txt.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-cmaketest-cmakelists-txt.html
new file mode 100644
index 000000000..8072df6db
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-cmaketest-cmakelists-txt.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- cmaketest.qdoc -->
+ <title>CMake Example Project | Test 6.2.11</title>
+</head>
+<body>
+<h1 class="title">CMake Example Project</h1>
+<pre class="cpp" translate="no">cmake_minimum_required(VERSION 3.16)
+project (QDOCTEST)</pre>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-cmaketest-example.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-cmaketest-example.html
new file mode 100644
index 000000000..a9ebe9784
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-cmaketest-example.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- cmaketest.qdoc -->
+ <title>CMake Example Project | Test 6.2.11</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">CMake Example Project</h1>
+<!-- $$$cmaketest-description -->
+<div class="descr" id="details">
+<p class="centerAlign"><img src="images/leonardo-da-vinci.png" alt="" /></p><p>Files:</p>
+<ul>
+<li><a href="test-cmaketest-cmakelists-txt.html" translate="no">cmaketest/CMakeLists.txt</a></li>
+<li><a href="test-cmaketest-main-cpp.html" translate="no">cmaketest/main.cpp</a></li>
+</ul>
+</div>
+<!-- @@@cmaketest -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-cmaketest-main-cpp.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-cmaketest-main-cpp.html
new file mode 100644
index 000000000..0acb90579
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-cmaketest-main-cpp.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- cmaketest.qdoc -->
+ <title>CMake Example Project | Test 6.2.11</title>
+</head>
+<body>
+<h1 class="title">CMake Example Project</h1>
+<pre class="cpp" translate="no"><span class="type">void</span> main(){}</pre>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-componentset-pro.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-componentset-pro.html
new file mode 100644
index 000000000..0589f516e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-componentset-pro.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- examples.qdoc -->
+ <meta name="description" content="Example for documenting QML types.">
+ <title>QML Documentation Example | Test 6.2.11</title>
+</head>
+<body>
+<h1 class="title">QML Documentation Example</h1>
+<pre class="cpp" translate="no">SOURCES = componentset.pro \
+ ProgressBar.qml \
+ Switch.qml \
+ TabWidget.qml \
+ uicomponents.qdoc</pre>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-componentset-qml.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-componentset-qml.html
new file mode 100644
index 000000000..8d50b2a3a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-componentset-qml.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- examples.qdoc -->
+ <meta name="description" content="Example for documenting QML types.">
+ <title>QML Documentation Example | Test 6.2.11</title>
+</head>
+<body>
+<h1 class="title">QML Documentation Example</h1>
+<pre class="qml" translate="no"><span class="comment">// Copyright (C) 2023 The Qt Company Ltd.</span>
+<span class="comment">// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0</span>
+
+import QtQuick 2.0
+
+<span class="type">Item</span> {
+}</pre>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-example.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-example.html
new file mode 100644
index 000000000..8227ff937
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-example.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- examples.qdoc -->
+ <meta name="description" content="Example for documenting QML types.">
+ <title>QML Documentation Example | Test 6.2.11</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#qml-class">QML Class</a></li>
+<li class="level1"><a href="#properties-signals-handlers-and-methods">Properties, Signals, Handlers, and Methods</a></li>
+<li class="level2"><a href="#internal-documentation">Internal Documentation</a></li>
+<li class="level1"><a href="#qml-types-with-c-implementation">QML Types with C++ Implementation</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">QML Documentation Example</h1>
+<!-- $$$componentset-brief -->
+<p>Example for documenting QML types.</p>
+<!-- @@@componentset -->
+<!-- $$$componentset-description -->
+<div class="descr" id="details">
+<p>This example demonstrates one of the ways to document QML types. It also generates a warning about a missing example image, on purpose.</p>
+<p>In particular, there are sample types that are documented with QDoc commands comments. There are documentation comments for the QML types and their public interfaces. The types are grouped into a module, the <a href="uicomponents-qmlmodule.html" translate="no">UI Components</a> module.</p>
+<p>The uicomponents.qdoc file generates the overview page for the <a href="uicomponents-qmlmodule.html" translate="no">UI Components</a> module page.</p>
+<p>The generated documentation is available in the <a href="uicomponents-qmlmodule.html" translate="no">UI Components</a> module.</p>
+<h4 id="qml-class">QML Class</h4>
+<p>The QML types use the \qmltype to document the type. In addition, they have the \inmodule command in order for QDoc to associate them to the <code translate="no">UIComponents</code> module.</p>
+<p>QDoc uses the \brief command to place a basic description when listing the types.</p>
+<h4 id="properties-signals-handlers-and-methods">Properties, Signals, Handlers, and Methods</h4>
+<p>The types have their properties, signals, handlers, and methods defined in their respective QML files. QDoc associates the properties and methods to the types, therefore, you only need to place the documentation above the property, method, or signal.</p>
+<p>To document the type of a <i>property alias</i>, you must use the \qmlproperty command to specify the data type.</p>
+<pre class="cpp" translate="no">\qmlproperty <span class="type">int</span> anAliasedProperty
+An aliased property of type <span class="type">int</span><span class="operator">.</span></pre>
+<h5 id="internal-documentation">Internal Documentation</h5>
+<p>You may declare that a documentation is for internal use by placing the \internal command after the beginning QDoc comment <code translate="no">/*</code>. QDoc will prevent the internal documentation from appearing in the public API.</p>
+<p>If you wish to omit certain parts of the documentation, you may use the \omit and \endomit command.</p>
+<h4 id="qml-types-with-c-implementation">QML Types with C++ Implementation</h4>
+<p>This example only demonstrates the documentation for types in QML files, but the regular QML commands may be placed inside C++ classes to define the public API of the QML type.</p>
+<p>Files:</p>
+<ul>
+<li><a href="test-componentset-progressbar-qml.html" translate="no">componentset/ProgressBar.qml</a></li>
+<li><a href="test-componentset-switch-qml.html" translate="no">componentset/Switch.qml</a></li>
+<li><a href="test-componentset-tabwidget-qml.html" translate="no">componentset/TabWidget.qml</a></li>
+<li><a href="test-componentset-componentset-pro.html" translate="no">componentset/componentset.pro</a></li>
+<li><a href="test-componentset-componentset-qml.html" translate="no">componentset/componentset.qml</a></li>
+</ul>
+</div>
+<!-- @@@componentset -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-progressbar-qml.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-progressbar-qml.html
new file mode 100644
index 000000000..41c9c506a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-progressbar-qml.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- examples.qdoc -->
+ <meta name="description" content="Example for documenting QML types.">
+ <title>QML Documentation Example | Test 6.2.11</title>
+</head>
+<body>
+<h1 class="title">QML Documentation Example</h1>
+<pre class="qml" translate="no"><span class="comment">// Copyright (C) 2016 The Qt Company Ltd.</span>
+<span class="comment">// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause</span>
+
+import QtQuick 1.0
+
+<span class="comment">/*!
+ \qmltype ProgressBar
+ \inqmlmodule UIComponents
+ \brief A component that shows the progress of an event.
+
+ A ProgressBar shows the linear progress of an event as its \l value.
+ The range is specified using the \l {minimum} and the \l{maximum} values.
+
+ The ProgressBar component is part of the \l {UI Components} module.
+
+ This documentation is part of the \l{componentset}{UIComponents} example.
+*/</span>
+<span class="type">Item</span> {
+ <span class="name">id</span>: <span class="name">progressbar</span>
+
+ <span class="comment">/*!
+ The minimum value of the ProgressBar range.
+ The \l value must not be less than this value.
+ */</span>
+ property <span class="type"><a href="qml-int.html" translate="no">int</a></span> <span class="name">minimum</span>: <span class="number">0</span>
+
+ <span class="comment">/*!
+ The maximum value of the ProgressBar range.
+ The \l value must not be more than this value.
+ */</span>
+ property <span class="type"><a href="qml-int.html" translate="no">int</a></span> <span class="name">maximum</span>: <span class="number">100</span>
+
+ <span class="comment">/*!
+ The value of the progress.
+ */</span>
+ property <span class="type"><a href="qml-int.html" translate="no">int</a></span> <span class="name">value</span>: <span class="number">0</span>
+
+ <span class="comment">/*!
+ \qmlproperty color ProgressBar::color
+ The color of the ProgressBar's gradient. Must bind to a color type.
+
+ \omit
+ The &quot;\qmlproperty &lt;type&gt; &lt;property name&gt;&quot; is needed because
+ property alias need to have their types manually entered.
+
+ QDoc will not publish the documentation within omit and endomit.
+ \endomit
+
+ \sa secondColor
+ */</span>
+ property <span class="type">alias</span> <span class="name">color</span>: <span class="name">gradient1</span>.<span class="name">color</span>
+
+ <span class="comment">/*!
+ \qmlproperty color ProgressBar::secondColor
+ The second color of the ProgressBar's gradient.
+ Must bind to a color type.
+
+ \omit
+ The &quot;\qmlproperty &lt;type&gt; &lt;property name&gt;&quot; is needed because
+ property alias need to have their types manually entered.
+
+ QDoc will not publish the documentation within omit and endomit.
+ \endomit
+
+ \sa color
+ */</span>
+ property <span class="type">alias</span> <span class="name">secondColor</span>: <span class="name">gradient2</span>.<span class="name">color</span>
+
+ <span class="name">width</span>: <span class="number">250</span>; <span class="name">height</span>: <span class="number">23</span>
+ <span class="name">clip</span>: <span class="number">true</span>
+
+ <span class="type">Rectangle</span> {
+ <span class="name">id</span>: <span class="name">highlight</span>
+
+ <span class="comment">/*!
+ An internal documentation comment. The widthDest property is not
+ a public API and therefore will not be exposed.
+ */</span>
+ property <span class="type"><a href="qml-int.html" translate="no">int</a></span> <span class="name">widthDest</span>: ((<span class="name">progressbar</span>.<span class="name">width</span> <span class="operator">*</span> (<span class="name">value</span> <span class="operator">-</span> <span class="name">minimum</span>)) <span class="operator">/</span> (<span class="name">maximum</span> <span class="operator">-</span> <span class="name">minimum</span>) <span class="operator">-</span> <span class="number">6</span>)
+
+ <span class="name">width</span>: <span class="name">highlight</span>.<span class="name">widthDest</span>
+ Behavior on <span class="name">width</span> { <span class="type">SmoothedAnimation</span> { <span class="name">velocity</span>: <span class="number">1200</span> } }
+
+ <span class="type">anchors</span> { <span class="name">left</span>: <span class="name">parent</span>.<span class="name">left</span>; <span class="name">top</span>: <span class="name">parent</span>.<span class="name">top</span>; <span class="name">bottom</span>: <span class="name">parent</span>.<span class="name">bottom</span>; <span class="name">margins</span>: <span class="number">3</span> }
+ <span class="name">radius</span>: <span class="number">1</span>
+ <span class="name">gradient</span>: <span class="name">Gradient</span> {
+ <span class="type">GradientStop</span> { <span class="name">id</span>: <span class="name">gradient1</span>; <span class="name">position</span>: <span class="number">0.0</span> }
+ <span class="type">GradientStop</span> { <span class="name">id</span>: <span class="name">gradient2</span>; <span class="name">position</span>: <span class="number">1.0</span> }
+ }
+
+ }
+ <span class="type">Text</span> {
+ <span class="type">anchors</span> { <span class="name">right</span>: <span class="name">highlight</span>.<span class="name">right</span>; <span class="name">rightMargin</span>: <span class="number">6</span>; <span class="name">verticalCenter</span>: <span class="name">parent</span>.<span class="name">verticalCenter</span> }
+ <span class="name">color</span>: <span class="string">&quot;white&quot;</span>
+ <span class="name">font</span>.bold: <span class="number">true</span>
+ <span class="name">text</span>: <span class="name">Math</span>.<span class="name">floor</span>((<span class="name">value</span> <span class="operator">-</span> <span class="name">minimum</span>) <span class="operator">/</span> (<span class="name">maximum</span> <span class="operator">-</span> <span class="name">minimum</span>) <span class="operator">*</span> <span class="number">100</span>) <span class="operator">+</span> <span class="string">'%'</span>
+ }
+}</pre>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-switch-qml.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-switch-qml.html
new file mode 100644
index 000000000..958f2f19b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-switch-qml.html
@@ -0,0 +1,113 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- examples.qdoc -->
+ <meta name="description" content="Example for documenting QML types.">
+ <title>QML Documentation Example | Test 6.2.11</title>
+</head>
+<body>
+<h1 class="title">QML Documentation Example</h1>
+<pre class="qml" translate="no"><span class="comment">// Copyright (C) 2016 The Qt Company Ltd.</span>
+<span class="comment">// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause</span>
+
+import QtQuick 1.0
+
+<span class="comment">/*!
+ \qmltype ToggleSwitch
+ \inqmlmodule UIComponents
+ \brief A component that can be turned on or off.
+
+ A toggle switch has two states: an \c on and an \c off state. The \c off
+ state is when the \l on property is set to \c false.
+
+ The ToggleSwitch component is part of the \l {UI Components} module.
+
+ This documentation is part of the \l{componentset}{UIComponents} example.
+
+*/</span>
+<span class="type">Item</span> {
+ <span class="name">id</span>: <span class="name">toggleswitch</span>
+ <span class="name">width</span>: <span class="name">background</span>.<span class="name">width</span>; <span class="name">height</span>: <span class="name">background</span>.<span class="name">height</span>
+
+ <span class="comment">/*!
+ Indicates the state of the switch. If \c false, then the switch is in
+ the \c off state.
+
+ \omit
+ The \qmlproperty &lt;type&gt; &lt;propertyname&gt; is not necessary as QDoc
+ will associate this property to the ToggleSwitch
+
+ QDoc will not publish the documentation within omit and endomit.
+ \endomit
+ */</span>
+ property <span class="type">bool</span> <span class="name">on</span>: <span class="number">false</span>
+
+ <span class="comment">/*!
+ A method to toggle the switch. If the switch is \c on, the toggling it
+ will turn it \c off. Toggling a switch in the \c off position will
+ turn it \c on.
+ */</span>
+ <span class="keyword">function </span><span class="name">toggle</span>() {
+ <span class="keyword">if</span> (<span class="name">toggleswitch</span>.<span class="name">state</span> <span class="operator">==</span> <span class="string">&quot;on&quot;</span>)
+ <span class="name">toggleswitch</span>.<span class="name">state</span> <span class="operator">=</span> <span class="string">&quot;off&quot;</span>;
+ <span class="keyword">else</span>
+ <span class="name">toggleswitch</span>.<span class="name">state</span> <span class="operator">=</span> <span class="string">&quot;on&quot;</span>;
+ }
+
+ <span class="comment">/*!
+ \internal
+
+ An internal function to synchronize the switch's internals. This
+ function is not for public access. The \internal command will
+ prevent QDoc from publishing this comment in the public API.
+ */</span>
+ <span class="keyword">function </span><span class="name">releaseSwitch</span>() {
+ <span class="keyword">if</span> (<span class="name">knob</span>.<span class="name">x</span> <span class="operator">==</span> <span class="number">1</span>) {
+ <span class="keyword">if</span> (<span class="name">toggleswitch</span>.<span class="name">state</span> <span class="operator">==</span> <span class="string">&quot;off&quot;</span>) <span class="keyword">return</span>;
+ }
+ <span class="keyword">if</span> (<span class="name">knob</span>.<span class="name">x</span> <span class="operator">==</span> <span class="number">78</span>) {
+ <span class="keyword">if</span> (<span class="name">toggleswitch</span>.<span class="name">state</span> <span class="operator">==</span> <span class="string">&quot;on&quot;</span>) <span class="keyword">return</span>;
+ }
+ <span class="name">toggle</span>();
+ }
+
+ <span class="type">Rectangle</span> {
+ <span class="name">id</span>: <span class="name">background</span>
+ <span class="name">width</span>: <span class="number">130</span>; <span class="name">height</span>: <span class="number">48</span>
+ <span class="name">radius</span>: <span class="number">48</span>
+ <span class="name">color</span>: <span class="string">&quot;lightsteelblue&quot;</span>
+ <span class="type">MouseArea</span> { <span class="name">anchors</span>.fill: <span class="name">parent</span>; <span class="name">onClicked</span>: <span class="name">toggle</span>() }
+ }
+
+ <span class="type">Rectangle</span> {
+ <span class="name">id</span>: <span class="name">knob</span>
+ <span class="name">width</span>: <span class="number">48</span>; <span class="name">height</span>: <span class="number">48</span>
+ <span class="name">radius</span>: <span class="name">width</span>
+ <span class="name">color</span>: <span class="string">&quot;lightblue&quot;</span>
+
+ <span class="type">MouseArea</span> {
+ <span class="name">anchors</span>.fill: <span class="name">parent</span>
+ <span class="name">drag</span>.target: <span class="name">knob</span>; <span class="name">drag</span>.axis: <span class="name">Drag</span>.<span class="name">XAxis</span>; <span class="name">drag</span>.minimumX: <span class="number">1</span>; <span class="name">drag</span>.maximumX: <span class="number">78</span>
+ <span class="name">onClicked</span>: <span class="name">toggle</span>()
+ <span class="name">onReleased</span>: <span class="name">releaseSwitch</span>()
+ }
+ }
+
+ <span class="name">states</span>: [
+ <span class="type">State</span> {
+ <span class="name">name</span>: <span class="string">&quot;on&quot;</span>
+ <span class="type">PropertyChanges</span> { <span class="name">target</span>: <span class="name">knob</span>; <span class="name">x</span>: <span class="number">78</span> }
+ <span class="type">PropertyChanges</span> { <span class="name">target</span>: <span class="name">toggleswitch</span>; <span class="name">on</span>: <span class="number">true</span> }
+ },
+ <span class="type">State</span> {
+ <span class="name">name</span>: <span class="string">&quot;off&quot;</span>
+ <span class="type">PropertyChanges</span> { <span class="name">target</span>: <span class="name">knob</span>; <span class="name">x</span>: <span class="number">1</span> }
+ <span class="type">PropertyChanges</span> { <span class="name">target</span>: <span class="name">toggleswitch</span>; <span class="name">on</span>: <span class="number">false</span> }
+ }
+ ]
+
+ <span class="name">transitions</span>: <span class="name">Transition</span> {
+ <span class="type">NumberAnimation</span> { <span class="name">properties</span>: <span class="string">&quot;x&quot;</span>; <span class="name">easing</span>.type: <span class="name">Easing</span>.<span class="name">InOutQuad</span>; <span class="name">duration</span>: <span class="number">200</span> }
+ }
+}</pre>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-tabwidget-qml.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-tabwidget-qml.html
new file mode 100644
index 000000000..ea6116dca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-componentset-tabwidget-qml.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- examples.qdoc -->
+ <meta name="description" content="Example for documenting QML types.">
+ <title>QML Documentation Example | Test 6.2.11</title>
+</head>
+<body>
+<h1 class="title">QML Documentation Example</h1>
+<pre class="qml" translate="no"><span class="comment">// Copyright (C) 2016 The Qt Company Ltd.</span>
+<span class="comment">// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause</span>
+
+import QtQuick 1.0
+
+<span class="comment">/*!
+ \qmltype TabWidget
+ \inqmlmodule UIComponents
+ \brief A widget that places its children as tabs.
+
+ A TabWidget places its children as tabs in a view. Selecting
+ a tab involves selecting the tab at the top.
+
+ The TabWidget component is part of the \l {UI Components} module.
+
+ This documentation is part of the \l{componentset}{UIComponents} example.
+
+ \section1 Adding Tabs
+
+ To add a tab, declare the tab as a child of the TabWidget.
+
+ \code
+ TabWidget {
+ id: tabwidget
+
+ Rectangle {
+ id: tab1
+ color: &quot;red&quot;
+ //... omitted
+ }
+ Rectangle {
+ id: tab2
+ color: &quot;blue&quot;
+ //... omitted
+ }
+
+ }
+ \endcode
+
+*/</span>
+<span class="type">Item</span> {
+ <span class="name">id</span>: <span class="name">tabWidget</span>
+
+ <span class="comment">/*!
+ \internal
+
+ Setting the default property to stack.children means any child items
+ of the TabWidget are actually added to the 'stack' item's children.
+
+ See the \l{&quot;Property Binding in QML&quot;}
+ documentation for details on default properties.
+
+ This is an implementation detail, not meant for public knowledge. Putting
+ the \internal command at the beginning will cause QDoc to not publish this
+ documentation in the public API page.
+
+ Normally, a property alias needs to have a
+ &quot;\qmlproperty &lt;type&gt; &lt;propertyname&gt;&quot; to assign the alias a type.
+
+ */</span>
+ default property <span class="type">alias</span> <span class="name">content</span>: <span class="name">stack</span>.<span class="name">children</span>
+
+ <span class="comment">/*!
+ The currently active tab in the TabWidget.
+ */</span>
+ property <span class="type"><a href="qml-int.html" translate="no">int</a></span> <span class="name">current</span>: <span class="number">0</span>
+
+ <span class="comment">/*!
+ A sample \c{read-only} property.
+ A contrived property to demonstrate QDoc's ability to detect
+ read-only properties.
+
+ The signature is:
+ \code
+ readonly property int sampleReadOnlyProperty: 0
+ \endcode
+
+ Note that the property must be initialized to a value.
+
+ */</span>
+ readonly property <span class="type"><a href="qml-int.html" translate="no">int</a></span> <span class="name">sampleReadOnlyProperty</span>: <span class="number">0</span>
+
+ <span class="comment">/*!
+ \internal
+
+ This handler is an implementation
+ detail. The \c{\internal} command will prevent QDoc from publishing this
+ documentation on the public API.
+ */</span>
+ <span class="name">onCurrentChanged</span>: <span class="name">setOpacities</span>()
+ <span class="name">Component</span>.onCompleted: <span class="name">setOpacities</span>()
+
+ <span class="comment">/*!
+ \internal
+
+ An internal function to set the opacity.
+ The \internal command will prevent QDoc from publishing this
+ documentation on the public API.
+ */</span>
+ <span class="keyword">function </span><span class="name">setOpacities</span>() {
+ <span class="keyword">for</span> (var i = 0; <span class="name">i</span> <span class="operator">&lt;</span> <span class="name">stack</span>.<span class="name">children</span>.<span class="name">length</span>; ++<span class="name">i</span>) {
+ <span class="name">stack</span>.<span class="name">children</span>[<span class="name">i</span>].<span class="name">opacity</span> <span class="operator">=</span> (<span class="name">i</span> <span class="operator">==</span> <span class="name">current</span> ? <span class="number">1</span> : <span class="number">0</span>)
+ }
+ }
+
+ <span class="type">Row</span> {
+ <span class="name">id</span>: <span class="name">header</span>
+
+ <span class="type">Repeater</span> {
+ <span class="name">model</span>: <span class="name">stack</span>.<span class="name">children</span>.<span class="name">length</span>
+ <span class="name">delegate</span>: <span class="name">Rectangle</span> {
+ <span class="name">width</span>: <span class="name">tabWidget</span>.<span class="name">width</span> <span class="operator">/</span> <span class="name">stack</span>.<span class="name">children</span>.<span class="name">length</span>; <span class="name">height</span>: <span class="number">36</span>
+
+ <span class="type">Rectangle</span> {
+ <span class="name">width</span>: <span class="name">parent</span>.<span class="name">width</span>; <span class="name">height</span>: <span class="number">1</span>
+ <span class="type">anchors</span> { <span class="name">bottom</span>: <span class="name">parent</span>.<span class="name">bottom</span>; <span class="name">bottomMargin</span>: <span class="number">1</span> }
+ <span class="name">color</span>: <span class="string">&quot;#acb2c2&quot;</span>
+ }
+ <span class="type">BorderImage</span> {
+ <span class="type">anchors</span> { <span class="name">fill</span>: <span class="name">parent</span>; <span class="name">leftMargin</span>: <span class="number">2</span>; <span class="name">topMargin</span>: <span class="number">5</span>; <span class="name">rightMargin</span>: <span class="number">1</span> }
+ <span class="type">border</span> { <span class="name">left</span>: <span class="number">7</span>; <span class="name">right</span>: <span class="number">7</span> }
+ <span class="name">source</span>: <span class="string">&quot;tab.png&quot;</span>
+ <span class="name">visible</span>: <span class="name">tabWidget</span>.<span class="name">current</span> <span class="operator">==</span> <span class="name">index</span>
+ }
+ <span class="type">Text</span> {
+ <span class="name">horizontalAlignment</span>: <span class="name">Qt</span>.<span class="name">AlignHCenter</span>; <span class="name">verticalAlignment</span>: <span class="name">Qt</span>.<span class="name">AlignVCenter</span>
+ <span class="name">anchors</span>.fill: <span class="name">parent</span>
+ <span class="name">text</span>: <span class="name">stack</span>.<span class="name">children</span>[<span class="name">index</span>].<span class="name">title</span>
+ <span class="name">elide</span>: <span class="name">Text</span>.<span class="name">ElideRight</span>
+ <span class="name">font</span>.bold: <span class="name">tabWidget</span>.<span class="name">current</span> <span class="operator">==</span> <span class="name">index</span>
+ }
+ <span class="type">MouseArea</span> {
+ <span class="name">anchors</span>.fill: <span class="name">parent</span>
+ <span class="name">onClicked</span>: <span class="name">tabWidget</span>.<span class="name">current</span> <span class="operator">=</span> <span class="name">index</span>
+ }
+ }
+ }
+ }
+
+ <span class="type">Item</span> {
+ <span class="name">id</span>: <span class="name">stack</span>
+ <span class="name">width</span>: <span class="name">tabWidget</span>.<span class="name">width</span>
+ <span class="name">anchors</span>.top: <span class="name">header</span>.<span class="name">bottom</span>; <span class="name">anchors</span>.bottom: <span class="name">tabWidget</span>.<span class="name">bottom</span>
+ }
+}</pre>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-demos-demo-demo-cpp.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-demos-demo-demo-cpp.html
new file mode 100644
index 000000000..6e1f68232
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-demos-demo-demo-cpp.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- demo.qdoc -->
+ <title>Demo | Test 6.2.11</title>
+</head>
+<body>
+<h1 class="title">Demo</h1>
+<pre class="cpp" translate="no"><span class="comment">// Copyright (C) 2023 The Qt Company Ltd.</span>
+<span class="comment">// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0</span>
+
+<span class="type">bool</span> isOverThousand(<span class="type">int</span> n)
+{
+ <span class="keyword">if</span> (n <span class="operator">&gt;</span> <span class="number">1'000</span>)
+ <span class="keyword">return</span> <span class="keyword">true</span>;
+ <span class="keyword">return</span> <span class="keyword">false</span>;
+}</pre>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-demos-demo-demo-pro.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-demos-demo-demo-pro.html
new file mode 100644
index 000000000..3d59c65b3
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-demos-demo-demo-pro.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- demo.qdoc -->
+ <title>Demo | Test 6.2.11</title>
+</head>
+<body>
+<h1 class="title">Demo</h1>
+<pre class="cpp" translate="no">TEMPLATE = aux
+message(&quot;Nothing to see here.&quot;)</pre>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-demos-demo-dontxclude-cmakelists-txt.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-demos-demo-dontxclude-cmakelists-txt.html
new file mode 100644
index 000000000..c654a3768
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-demos-demo-dontxclude-cmakelists-txt.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- demo.qdoc -->
+ <title>Demo | Test 6.2.11</title>
+</head>
+<body>
+<h1 class="title">Demo</h1>
+<pre class="cpp" translate="no">cmake_minimum_required(VERSION 3.16)
+project (DONTXCLUDEDIRS_QDOCTEST)</pre>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-demos-demo-example.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-demos-demo-example.html
new file mode 100644
index 000000000..8f7c9ace8
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-demos-demo-example.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- demo.qdoc -->
+ <title>Demo | Test 6.2.11</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Demo</h1>
+<!-- $$$demos/demo-description -->
+<div class="descr" id="details">
+<p class="centerAlign"><img src="images/leonardo-da-vinci.png" alt="" /></p><pre class="cpp" translate="no"> <span class="keyword">if</span> (n <span class="operator">&gt;</span> <span class="number">1'000</span>)
+ <span class="keyword">return</span> <span class="keyword">true</span>;</pre>
+<p>Files:</p>
+<ul>
+<li><a href="test-demos-demo-demo-cpp.html" translate="no">demos/demo/demo.cpp</a></li>
+<li><a href="test-demos-demo-demo-pro.html" translate="no">demos/demo/demo.pro</a></li>
+<li><a href="test-demos-demo-dontxclude-cmakelists-txt.html" translate="no">demos/demo/dontxclude/CMakeLists.txt</a></li>
+</ul>
+</div>
+<!-- @@@demos/demo -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-demos-hidden-example.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-demos-hidden-example.html
new file mode 100644
index 000000000..fc123ba60
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-demos-hidden-example.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- hidden.qdoc -->
+ <meta name="description" content="Tagged 'broken', does not appear in examples-manifest.xml.">
+ <title>Hidden Demo | Test 6.2.11</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Hidden Demo</h1>
+<!-- $$$demos/hidden-brief -->
+<p>Tagged 'broken', does not appear in examples-manifest.xml.</p>
+<!-- @@@demos/hidden -->
+<!-- $$$demos/hidden-description -->
+<div class="descr" id="details">
+<p>Also missing an image, but that's OK as it's broken anyway.</p>
+</div>
+<!-- @@@demos/hidden -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-empty-qmlmodule.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-empty-qmlmodule.html
new file mode 100644
index 000000000..eabda8b7a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-empty-qmlmodule.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- type.cpp -->
+ <meta name="description" content="A QML module with no member types.">
+ <title>No QML Types Here | Test 6.2.11</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">No QML Types Here</h1>
+<!-- $$$Test.Empty-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@Test.Empty -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-nover-qmlmodule.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-nover-qmlmodule.html
new file mode 100644
index 000000000..68cdf82d4
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test-nover-qmlmodule.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- type.cpp -->
+ <meta name="description" content="QML Types for the Test module without version.">
+ <title>Versionless QML Module | Test 6.2.11</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">Versionless QML Module</h1>
+<p>This module is in <i>Tech Preview</i> state.</p>
+<p>This module was introduced in Qt 1.1.</p>
+<!-- $$$Test.NoVer-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@Test.NoVer -->
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="qml-test-nover-doctest.html">DocTest</a></p></td><td class="tblDescr"><p>Shadows the type name in QDoc.Test module</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="qml-test-nover-typenoversion.html">TypeNoVersion</a></p></td><td class="tblDescr"><p>Another QML type documented in a .cpp file</p></td></tr>
+</table></div>
+</body>
+</html>
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
new file mode 100644
index 000000000..8375090f0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test.index
@@ -0,0 +1,238 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="A test project for QDoc build artifacts" version="6.2.11" project="Test">
+ <namespace name="" status="active" access="public" module="test">
+ <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="0" since="Test 0.9" meta="macrowithoutparams" signature="QDOCTEST_MACRO"/>
+ <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>
+ <qmlclass name="AbstractParent" qml-module-name="QDoc.Test" fullname="QDoc.Test.AbstractParent" href="qml-qdoc-test-abstractparent.html" status="active" access="public" abstract="true" location="parent.qdoc" since="1.1" documented="true" title="AbstractParent" fulltitle="AbstractParent" subtitle="" brief="Abstract base QML type">
+ <function name="name" fullname="QDoc.Test.AbstractParent.name" href="qml-qdoc-test-abstractparent.html#name-method" status="active" access="public" location="parent.qdoc" documented="true" meta="qmlmethod" type="void"/>
+ <function name="name" fullname="QDoc.Test.AbstractParent.name" href="qml-qdoc-test-abstractparent.html#name-method" status="active" access="public" location="parent.qdoc" documented="true" meta="qmlmethod" type="void">
+ <parameter type="Child" name="child" default=""/>
+ <parameter type="" name="name" default=""/>
+ </function>
+ <function name="rear" fullname="QDoc.Test.AbstractParent.rear" href="qml-qdoc-test-abstractparent.html#rear-method" status="active" access="public" location="parent.qdoc" documented="true" meta="qmlmethod" type="void">
+ <parameter type="Child" name="child" default=""/>
+ <parameter type="var" name="method" default="Strict"/>
+ </function>
+ <qmlproperty name="children" fullname="QDoc.Test.AbstractParent.children" status="active" access="public" location="parent.qdoc" documented="true" type="list&lt;Child&gt;" attached="false" writable="true" brief="Children of the type"/>
+ <qmlproperty name="name" fullname="QDoc.Test.AbstractParent.name" status="active" access="public" location="parent.qdoc" documented="true" type="string" attached="false" writable="true" brief="Name of this parent"/>
+ </qmlclass>
+ <page name="autolinking.html" href="autolinking.html" status="active" location="classlists.qdoc" documented="true" subtype="page" title="Autolinking" fulltitle="Autolinking" subtitle="">
+ <contents name="testqdoc" title="TestQDoc" level="1"/>
+ <contents name="someprop" title="someProp" level="1"/>
+ </page>
+ <page name="cmaketest" href="test-cmaketest-example.html" status="active" location="cmaketest.qdoc" documented="true" subtype="example" title="CMake Example Project" fulltitle="CMake Example Project" subtitle="">
+ <page name="cmaketest/main.cpp" href="test-cmaketest-main-cpp.html" status="active" subtype="file" title="" fulltitle="main.cpp Example File" subtitle="cmaketest/main.cpp"/>
+ <page name="cmaketest/CMakeLists.txt" href="test-cmaketest-cmakelists-txt.html" status="active" subtype="file" title="" fulltitle="CMakeLists.txt Example File" subtitle="cmaketest/CMakeLists.txt"/>
+ </page>
+ <qmlclass name="Child" qml-module-name="QDoc.Test" qml-base-type="QDoc.Test::AbstractParent" fullname="QDoc.Test.Child" href="qml-qdoc-test-child.html" status="active" access="public" location="parent.qdoc" since="1.1" documented="true" title="Child" fulltitle="Child" subtitle="" brief="A Child inheriting its parent">
+ <function name="name" fullname="QDoc.Test.Child.name" href="qml-qdoc-test-child.html#name-method" status="active" access="public" location="parent.qdoc" documented="true" meta="qmlmethod" type="void">
+ <parameter type="Child" name="child" default=""/>
+ <parameter type="" name="name" default=""/>
+ </function>
+ <qmlproperty name="name" fullname="QDoc.Test.Child.name" href="qml-qdoc-test-child.html#name-prop" status="active" access="public" location="parent.qdoc" documented="true" type="string" attached="false" writable="true" brief="Name of this child"/>
+ </qmlclass>
+ <page name="classes.html" href="classes.html" status="active" location="unseenclass.qdoc" documented="true" subtype="page" title="Classes" fulltitle="Classes" subtitle=""/>
+ <namespace name="CrossModuleRef" href="crossmoduleref.html" status="active" access="public" location="testcpp.h" since="3.0" documented="true" module="TestCPP" brief="Namespace that has documented functions in multiple modules">
+ <function name="documentMe" fullname="CrossModuleRef::documentMe" href="crossmoduleref.html#documentMe" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void documentMe()"/>
+ </namespace>
+ <page name="demos/demo" href="test-demos-demo-example.html" status="active" location="demo.qdoc" documented="true" subtype="example" title="Demo" fulltitle="Demo" subtitle="">
+ <page name="demos/demo/demo.cpp" href="test-demos-demo-demo-cpp.html" status="active" subtype="file" title="" fulltitle="demo.cpp Example File" subtitle="demos/demo/demo.cpp"/>
+ <page name="demos/demo/demo.pro" href="test-demos-demo-demo-pro.html" status="active" subtype="file" title="" fulltitle="demo.pro Example File" subtitle="demos/demo/demo.pro"/>
+ <page name="demos/demo/dontxclude/CMakeLists.txt" href="test-demos-demo-dontxclude-cmakelists-txt.html" status="active" subtype="file" title="" fulltitle="CMakeLists.txt Example File" subtitle="demos/demo/dontxclude/CMakeLists.txt"/>
+ </page>
+ <qmlclass name="DocTest" qml-module-name="QDoc.Test" fullname="QDoc.Test.DocTest" href="qml-qdoc-test-doctest.html" status="active" access="public" location="DocTest.qml" since="QDoc.Test 0.9" documented="true" title="DocTest" fulltitle="DocTest" subtitle="" brief="Represents a doc test case">
+ <contents name="introduction" title="Introduction" level="1"/>
+ <function name="completed" fullname="QDoc.Test.DocTest.completed" href="qml-qdoc-test-doctest.html#completed-signal" status="active" access="public" documented="true" meta="qmlsignal"/>
+ <function name="fail" fullname="QDoc.Test.DocTest.fail" href="qml-qdoc-test-doctest.html#fail-method" status="active" access="public" location="DocTest.qml" documented="true" since="QDoc.Test 1.0" meta="qmlmethod">
+ <parameter type="" name="message" default="&quot;oops&quot;"/>
+ </function>
+ <function name="fail_hard" fullname="QDoc.Test.DocTest.fail_hard" href="qml-qdoc-test-doctest.html#fail_hard-method" status="active" access="public" documented="true" meta="qmlmethod">
+ <parameter type="" name="msg" default="&quot;facepalm&quot;"/>
+ <parameter type="" name="option" default="123"/>
+ </function>
+ <function name="foo" fullname="QDoc.Test.DocTest.foo" href="qml-qdoc-test-doctest.html#foo-signal" status="active" access="public" location="DocTest.qml" documented="true" meta="qmlsignal">
+ <parameter type="var" name="bar" default=""/>
+ </function>
+ <function name="itsHappening" fullname="QDoc.Test.DocTest.itsHappening" href="qml-qdoc-test-doctest.html#itsHappening-signal" status="active" access="public" documented="true" meta="qmlsignal">
+ <parameter type="bool" name="really" default=""/>
+ </function>
+ <qmlproperty name="active" fullname="QDoc.Test.DocTest.active" href="qml-qdoc-test-doctest.html#active-prop" status="active" access="public" documented="true" type="bool" attached="false" writable="true"/>
+ <qmlproperty name="name" fullname="QDoc.Test.DocTest.name" href="qml-qdoc-test-doctest.html#name-prop" status="active" access="public" documented="true" type="string" attached="false" writable="true" required="true"/>
+ </qmlclass>
+ <qmlclass name="DocTest" qml-module-name="Test.NoVer" fullname="Test.NoVer.DocTest" href="qml-test-nover-doctest.html" status="active" access="public" location="DocTest.qml" since="1.1" documented="true" title="DocTest" fulltitle="DocTest" subtitle="" brief="Shadows the type name in QDoc.Test module"/>
+ <class name="DontLinkToMe" href="dontlinktome.html" status="ignored" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="Class that does not generate documentation"/>
+ <page name="demos/hidden" href="test-demos-hidden-example.html" status="active" location="hidden.qdoc" documented="true" subtype="example" title="Hidden Demo" fulltitle="Hidden Demo" subtitle="" brief="Tagged 'broken', does not appear in examples-manifest.xml"/>
+ <page name="obsolete-classes.html" href="obsolete-classes.html" status="active" location="classlists.qdoc" documented="true" subtype="page" title="Obsolete Classes" fulltitle="Obsolete Classes" subtitle="">
+ <contents name="classes-with-obsolete-members" title="Classes with obsolete members" level="1"/>
+ <contents name="testqdoc" title="TestQDoc" level="2"/>
+ </page>
+ <qmlclass name="OldType" qml-module-name="QDoc.Test" fullname="QDoc.Test.OldType" href="qml-qdoc-test-oldtype.html" status="deprecated" access="public" since="1.1" documented="true" title="OldType" fulltitle="OldType" subtitle="" brief="Deprecated old type"/>
+ <qmlclass name="ProgressBar" qml-module-name="UIComponents" fullname="UIComponents.ProgressBar" href="qml-uicomponents-progressbar.html" status="active" access="public" location="ProgressBar.qml" documented="true" title="ProgressBar" fulltitle="ProgressBar" subtitle="" brief="A component that shows the progress of an event">
+ <qmlproperty name="color" fullname="UIComponents.ProgressBar.color" href="qml-uicomponents-progressbar.html#color-prop" status="active" access="public" documented="true" type="color" attached="false" writable="true"/>
+ <qmlproperty name="maximum" fullname="UIComponents.ProgressBar.maximum" href="qml-uicomponents-progressbar.html#maximum-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true"/>
+ <qmlproperty name="minimum" fullname="UIComponents.ProgressBar.minimum" href="qml-uicomponents-progressbar.html#minimum-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true"/>
+ <qmlproperty name="secondColor" fullname="UIComponents.ProgressBar.secondColor" href="qml-uicomponents-progressbar.html#secondColor-prop" status="active" access="public" documented="true" type="color" attached="false" writable="true"/>
+ <qmlproperty name="value" fullname="UIComponents.ProgressBar.value" href="qml-uicomponents-progressbar.html#value-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true"/>
+ </qmlclass>
+ <page name="componentset" href="test-componentset-example.html" status="active" location="examples.qdoc" documented="true" subtype="example" title="QML Documentation Example" fulltitle="QML Documentation Example" subtitle="" brief="Example for documenting QML types">
+ <contents name="qml-class" title="QML Class" level="1"/>
+ <contents name="properties-signals-handlers-and-methods" title="Properties, Signals, Handlers, and Methods" level="1"/>
+ <contents name="internal-documentation" title="Internal Documentation" level="2"/>
+ <contents name="qml-types-with-c-implementation" title="QML Types with C++ Implementation" level="1"/>
+ <page name="componentset/ProgressBar.qml" href="test-componentset-progressbar-qml.html" status="active" subtype="file" title="" fulltitle="ProgressBar.qml Example File" subtitle="componentset/ProgressBar.qml"/>
+ <page name="componentset/Switch.qml" href="test-componentset-switch-qml.html" status="active" subtype="file" title="" fulltitle="Switch.qml Example File" subtitle="componentset/Switch.qml"/>
+ <page name="componentset/TabWidget.qml" href="test-componentset-tabwidget-qml.html" status="active" subtype="file" title="" fulltitle="TabWidget.qml Example File" subtitle="componentset/TabWidget.qml"/>
+ <page name="componentset/componentset.qml" href="test-componentset-componentset-qml.html" status="active" subtype="file" title="" fulltitle="componentset.qml Example File" subtitle="componentset/componentset.qml"/>
+ <page name="componentset/componentset.pro" href="test-componentset-componentset-pro.html" status="active" subtype="file" title="" fulltitle="componentset.pro Example File" subtitle="componentset/componentset.pro"/>
+ </page>
+ <page name="qmlmodules.html" href="qmlmodules.html" status="active" location="modules.qdoc" documented="true" subtype="page" title="QML Modules" fulltitle="QML Modules" subtitle="">
+ <contents name="qml-types" title="QML types" level="1"/>
+ <contents name="qml-value-types" title="QML value types" level="1"/>
+ </page>
+ <page name="https://wiki.qt.io/QProperty" href="https://wiki.qt.io/QProperty" status="active" location="properties.qdoc" documented="true" subtype="externalpage" title="QProperty" fulltitle="QProperty" subtitle=""/>
+ <class name="SeenClass" href="seenclass.html" status="active" access="public" location="dont.h" since="2.0" documented="true" module="TestCPP" brief="A public but undocumented class"/>
+ <qmlclass name="Switch" qml-module-name="UIComponents" fullname="UIComponents.Switch" href="qml-uicomponents-switch.html" status="active" access="public" location="Switch.qml" documented="true" title="Switch" fulltitle="Switch" subtitle="" brief="A component that can be turned on or off">
+ <function name="toggle" fullname="UIComponents.Switch.toggle" href="qml-uicomponents-switch.html#toggle-method" status="active" access="public" documented="true" meta="qmlmethod"/>
+ <qmlproperty name="on" fullname="UIComponents.Switch.on" href="qml-uicomponents-switch.html#on-prop" status="active" access="public" documented="true" type="bool" attached="false" writable="true"/>
+ </qmlclass>
+ <qmlclass name="TabWidget" qml-module-name="UIComponents" fullname="UIComponents.TabWidget" href="qml-uicomponents-tabwidget.html" status="active" access="public" location="TabWidget.qml" documented="true" title="TabWidget" fulltitle="TabWidget" subtitle="" brief="A widget that places its children as tabs">
+ <contents name="adding-tabs" title="Adding Tabs" level="1"/>
+ <qmlproperty name="current" fullname="UIComponents.TabWidget.current" href="qml-uicomponents-tabwidget.html#current-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true"/>
+ <qmlproperty name="sampleReadOnlyProperty" fullname="UIComponents.TabWidget.sampleReadOnlyProperty" href="qml-uicomponents-tabwidget.html#sampleReadOnlyProperty-prop" status="active" access="public" documented="true" type="int" attached="false" writable="false"/>
+ </qmlclass>
+ <namespace name="TestQDoc" href="testqdoc.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="A namespace">
+ <contents name="usage" title="Usage" level="1"/>
+ <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="0" since="Test 0.9" meta="macrowithoutparams" signature="QDOCTEST_MACRO"/>
+ <class threadsafety="reentrant" name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" since="1.1" documented="true" groups="cpptypes,testgroup" module="TestCPP" brief="A class in a namespace">
+ <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)">
+ <parameter type="bool" name="b" default=""/>
+ <parameter type="const char *" name="s" default=""/>
+ </function>
+ <function name="inlineFunction" fullname="TestQDoc::Test::inlineFunction" href="testqdoc-test.html#inlineFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" brief="An inline function, documented using the \fn QDoc command" signature="void inlineFunction()"/>
+ <function name="methodWithEmDashInItsDocs" fullname="TestQDoc::Test::methodWithEmDashInItsDocs" href="testqdoc-test.html#methodWithEmDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEmDashInItsDocs()"/>
+ <function name="methodWithEnDashInItsDocs" fullname="TestQDoc::Test::methodWithEnDashInItsDocs" href="testqdoc-test.html#methodWithEnDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEnDashInItsDocs()"/>
+ <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=""/>
+ </function>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload" status="active" access="protected" location="testcpp.h" documented="true" meta="plain" type="void" signature="void overload()"/>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload-1" status="active" access="protected" location="testcpp.h" documented="true" since="Test 1.2" meta="plain" overload="true" overload-number="1" type="void" signature="void overload(bool b)">
+ <parameter type="bool" name="b" default=""/>
+ </function>
+ <function name="someFunction" fullname="TestQDoc::Test::someFunction" href="testqdoc-test.html#someFunction" status="active" access="public" location="testcpp.h" documented="true" since="Test 1.0" meta="plain" type="int" signature="int someFunction(int, int v)">
+ <parameter type="int" name="" default=""/>
+ <parameter type="int" name="v" default="0"/>
+ </function>
+ <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" threadsafety="non-reentrant" status="active" access="public" location="testcpp.h" documented="true" since="2.0" meta="plain" const="true" type="void" signature="void someFunctionDefaultArg(int i, bool b) const" groups="testgroup">
+ <parameter type="int" name="i" default=""/>
+ <parameter type="bool" name="b" default="false"/>
+ </function>
+ <function name="virtualFun" fullname="TestQDoc::Test::virtualFun" href="testqdoc-test.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" type="void" signature="void virtualFun()"/>
+ <typedef name="SomeType" fullname="TestQDoc::Test::SomeType" href="testqdoc-test.html#SomeType-typedef" status="active" access="public" location="testcpp.h" documented="true"/>
+ </class>
+ <class name="TestDerived" fullname="TestQDoc::TestDerived" href="testqdoc-testderived.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" bases="TestQDoc::Test" module="TestCPP" brief="A class in a namespace, derived from Test">
+ <function name="bindableProp" fullname="TestQDoc::TestDerived::bindableProp" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" meta="plain" associated-property="bindableProp" type="QBindable&lt;QString&gt;" signature="QBindable&lt;QString&gt; bindableProp()"/>
+ <function name="bindablePropChanged" fullname="TestQDoc::TestDerived::bindablePropChanged" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" meta="signal" associated-property="bindableProp" type="void" signature="void bindablePropChanged()"/>
+ <function name="boolProp" fullname="TestQDoc::TestDerived::boolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="plain" associated-property="boolProp" type="bool" signature="bool boolProp()"/>
+ <function name="boolPropChanged" fullname="TestQDoc::TestDerived::boolPropChanged" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="signal" associated-property="boolProp" type="void" signature="void boolPropChanged()"/>
+ <function name="emitSomething" fullname="TestQDoc::TestDerived::emitSomething" href="testqdoc-testderived.html#emitSomething" status="active" access="public" location="testcpp.h" documented="true" meta="signal" type="void" signature="void emitSomething()"/>
+ <function name="getInt" fullname="TestQDoc::TestDerived::getInt" href="testqdoc-testderived.html#intProp-prop" status="active" access="public" location="testcpp.h" meta="plain" associated-property="intProp" type="int *" signature="int * getInt()"/>
+ <function name="id" fullname="TestQDoc::TestDerived::id" href="testqdoc-testderived.html#id" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" override="true" type="int" signature="int id() override"/>
+ <function name="invokeMe" fullname="TestQDoc::TestDerived::invokeMe" href="testqdoc-testderived.html#invokeMe" status="active" access="public" location="testcpp.h" documented="true" meta="plain" const="true" type="void" brief="Something invokable" signature="void invokeMe() const"/>
+ <function name="name" fullname="TestQDoc::TestDerived::name" href="testqdoc-testderived.html#name-prop" status="active" access="public" location="testcpp.h" meta="plain" const="true" associated-property="name" type="const QString *" signature="const QString * name() const"/>
+ <function name="resetBoolProp" fullname="TestQDoc::TestDerived::resetBoolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="slot" associated-property="boolProp" type="void" signature="void resetBoolProp()"/>
+ <function name="setBindableProp" fullname="TestQDoc::TestDerived::setBindableProp" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" meta="slot" associated-property="bindableProp" type="void" signature="void setBindableProp(const QString &amp;s)">
+ <parameter type="const QString &amp;" name="s" default=""/>
+ </function>
+ <function name="setBoolProp" fullname="TestQDoc::TestDerived::setBoolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="slot" associated-property="boolProp" type="void" signature="void setBoolProp(bool b)">
+ <parameter type="bool" name="b" default=""/>
+ </function>
+ <function name="someProp" fullname="TestQDoc::TestDerived::someProp" href="testqdoc-testderived.html#someProp-prop" status="active" access="public" location="testcpp.h" meta="plain" associated-property="someProp" type="const QString &amp;" signature="const QString &amp; someProp()"/>
+ <function name="someValue" fullname="TestQDoc::TestDerived::someValue" href="testqdoc-testderived.html#someValue" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::TestDerived::NotTypedef" signature="TestQDoc::TestDerived::NotTypedef someValue()"/>
+ <function name="staticObsoleteMember" fullname="TestQDoc::TestDerived::staticObsoleteMember" href="testqdoc-testderived-obsolete.html#staticObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" static="true" type="void" signature="void staticObsoleteMember()"/>
+ <function name="virtualFun" fullname="TestQDoc::TestDerived::virtualFun" href="testqdoc-testderived.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" override="true" type="void" signature="void virtualFun() override"/>
+ <typedef name="DerivedType" fullname="TestQDoc::TestDerived::DerivedType" href="testqdoc-testderived.html#DerivedType-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="Test::SomeType"/>
+ <typedef name="NotTypedef" fullname="TestQDoc::TestDerived::NotTypedef" href="testqdoc-testderived.html#NotTypedef-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="int"/>
+ <property name="bindableProp" fullname="TestQDoc::TestDerived::bindableProp" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" documented="true" bindable="true">
+ <getter name="bindableProp"/>
+ <setter name="setBindableProp"/>
+ <notifier name="bindablePropChanged"/>
+ </property>
+ <property name="boolProp" fullname="TestQDoc::TestDerived::boolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" documented="true">
+ <getter name="boolProp"/>
+ <setter name="setBoolProp"/>
+ <resetter name="resetBoolProp"/>
+ <notifier name="boolPropChanged"/>
+ </property>
+ <property name="intProp" fullname="TestQDoc::TestDerived::intProp" href="testqdoc-testderived.html#intProp-prop" status="active" access="public" location="testcpp.h" documented="true" writable="false">
+ <getter name="getInt"/>
+ </property>
+ <property name="name" fullname="TestQDoc::TestDerived::name" href="testqdoc-testderived.html#name-prop" status="active" access="public" location="testcpp.h" documented="true" writable="false" brief="This property holds a name">
+ <getter name="name"/>
+ </property>
+ <property name="someProp" fullname="TestQDoc::TestDerived::someProp" href="testqdoc-testderived.html#someProp-prop" status="active" access="public" location="testcpp.h" documented="true" bindable="true" writable="false">
+ <getter name="someProp"/>
+ </property>
+ </class>
+ </namespace>
+ <qmlclass name="TheType" qml-module-name="TheModule" fullname="TheModule.TheType" href="qml-themodule-thetype.html" status="active" access="public" location="properties.qdoc" documented="true" title="TheType" fulltitle="TheType" subtitle="">
+ <qmlproperty name="name" fullname="TheModule.TheType.name" href="qml-themodule-thetype.html#name-prop" status="active" access="public" location="properties.qdoc" documented="true" type="string" attached="false" writable="false" brief="Read-only status of this property is resolved from Q_PROPERTY"/>
+ </qmlclass>
+ <qmlclass name="Type" qml-module-name="QDoc.Test" fullname="QDoc.Test.Type" href="qml-qdoc-test-type.html" status="active" access="public" since="1.1" documented="true" title="Type" fulltitle="Type" subtitle="" brief="A QML type documented in a .cpp file">
+ <function name="completed" fullname="QDoc.Test.Type.completed" href="qml-qdoc-test-type.html#completed-signal" status="active" access="public" documented="true" meta="qmlsignal">
+ <parameter type="int" name="status" default=""/>
+ </function>
+ <function name="configured" fullname="QDoc.Test.Type.configured" href="qml-qdoc-test-type.html#configured-signal" status="active" access="public" documented="true" meta="qmlsignal"/>
+ <function name="copy" fullname="QDoc.Test.Type.copy" href="qml-qdoc-test-type.html#copy-method" status="active" access="public" documented="true" meta="qmlmethod" type="Type">
+ <parameter type="" name="a" default=""/>
+ </function>
+ <function name="deprecatedMethod" fullname="QDoc.Test.Type.deprecatedMethod" href="qml-qdoc-test-type-obsolete.html#deprecatedMethod-method" status="deprecated" access="public" documented="true" meta="qmlmethod"/>
+ <function name="disable" fullname="QDoc.Test.Type.disable" href="qml-qdoc-test-type.html#disable-method" status="active" access="public" documented="true" meta="qmlmethod"/>
+ <function name="enable" fullname="QDoc.Test.Type.enable" href="qml-qdoc-test-type.html#enable-method" status="active" access="public" documented="true" meta="qmlmethod"/>
+ <function name="futureDeprecated" fullname="QDoc.Test.Type.futureDeprecated" href="qml-qdoc-test-type.html#futureDeprecated-method" status="active" access="public" documented="true" meta="qmlmethod"/>
+ <function name="group.created" fullname="QDoc.Test.Type.group.created" href="qml-qdoc-test-type.html#group.created-signal" status="active" access="public" documented="true" meta="qmlsignal"/>
+ <qmlproperty name="fifth" fullname="QDoc.Test.Type.fifth" href="qml-qdoc-test-type.html#fifth-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true" brief="A group of properties sharing a documentation comment"/>
+ <qmlproperty name="fourth" fullname="QDoc.Test.Type.fourth" href="qml-qdoc-test-type.html#fourth-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true" brief="A group of properties sharing a documentation comment"/>
+ <qmlproperty name="group.first" fullname="QDoc.Test.Type.group.first" href="qml-qdoc-test-type.html#group.first-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true" brief="A property group"/>
+ <qmlproperty name="group.second" fullname="QDoc.Test.Type.group.second" href="qml-qdoc-test-type.html#group.second-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true" brief="A property group"/>
+ <qmlproperty name="group.third" fullname="QDoc.Test.Type.group.third" href="qml-qdoc-test-type.html#group.third-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true" brief="A property group"/>
+ <qmlproperty name="id" fullname="QDoc.Test.Type.id" href="qml-qdoc-test-type.html#id-prop" status="active" access="public" documented="true" type="int" attached="false" writable="false" brief="A read-only property"/>
+ <qmlproperty name="name" fullname="QDoc.Test.Type.name" href="qml-qdoc-test-type.html#name-prop" status="active" access="public" documented="true" type="string" attached="false" writable="true" required="true" brief="Name of the Test"/>
+ <qmlproperty name="type" fullname="QDoc.Test.Type.type" href="qml-qdoc-test-type.html#type-attached-prop" status="active" access="public" documented="true" type="enumeration" attached="true" writable="true"/>
+ <qmlproperty name="group" fullname="QDoc.Test.Type.group" href="qml-qdoc-test-type.html#group-prop" status="active" access="public" documented="true"/>
+ </qmlclass>
+ <qmlclass name="TypeNoVersion" qml-module-name="Test.NoVer" fullname="Test.NoVer.TypeNoVersion" href="qml-test-nover-typenoversion.html" status="active" access="public" since="1.1" documented="true" title="TypeNoVersion" fulltitle="TypeNoVersion" subtitle="" brief="Another QML type documented in a .cpp file"/>
+ <class name="UnseenClass" href="unseenclass.html" status="ignored" access="public" location="dont.h" since="2.0" documented="true" module="TestCPP" brief="A public but undocumented class"/>
+ <qmlclass name="YetAnotherChild" qml-module-name="QDoc.Test" qml-base-type="QDoc.Test::InternParent" fullname="QDoc.Test.YetAnotherChild" href="qml-qdoc-test-yetanotherchild.html" status="active" access="public" location="parent.qdoc" since="1.1" documented="true" title="YetAnotherChild" fulltitle="YetAnotherChild" subtitle="" brief="A type inheriting from internal abstract parent"/>
+ <qmlvaluetype name="int" qml-module-name="QDoc.Test" fullname="QDoc.Test.int" href="qml-int.html" status="active" access="public" location="parent.qdoc" since="1.1" documented="true" title="int" fulltitle="int" subtitle="" brief="An integer value type">
+ <function name="abs" fullname="QDoc.Test.int.abs" href="qml-int.html#abs-method" status="active" access="public" location="parent.qdoc" documented="true" meta="qmlmethod" type="int"/>
+ </qmlvaluetype>
+ <page name="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" status="active" location="classlists.qdoc" documented="true" subtype="externalpage" title="reentrant" fulltitle="reentrant" subtitle=""/>
+ <group name="cpptypes" href="cpptypes.html" status="active" location="classlists.qdoc" documented="true" seen="true" title="Test C++ Types"/>
+ <group name="testgroup" href="testgroup.html" status="internal" seen="false" title=""/>
+ <module name="TestCPP" href="testcpp-module.html" status="active" since="2.0" documented="true" seen="true" title="QDoc Test C++ Classes" brief="A test module page">
+ <contents name="linking-to-function-like-things" title="Linking to function-like things" level="1"/>
+ <contents name="section" title="section()" level="2"/>
+ </module>
+ <qmlmodule name="QDoc.Test" qml-module-name="QDoc.Test" qml-module-version="1.1" href="qdoc-test-qmlmodule.html" status="preliminary" since="1.1" documented="true" seen="true" title="QDoc.Test QML Module" brief="QML Types for the Test module"/>
+ <qmlmodule name="Test.Empty" qml-module-name="Test.Empty" qml-module-version="1.0" href="test-empty-qmlmodule.html" status="active" documented="true" seen="true" title="No QML Types Here" brief="A QML module with no member types"/>
+ <qmlmodule name="Test.NoVer" qml-module-name="Test.NoVer" href="test-nover-qmlmodule.html" status="active" since="1.1" documented="true" seen="true" title="Versionless QML Module" brief="QML Types for the Test module without version"/>
+ <qmlmodule name="TheModule" qml-module-name="TheModule" href="themodule-qmlmodule.html" status="active" location="properties.qdoc" documented="true" seen="true" title=""/>
+ <qmlmodule name="UIComponents" qml-module-name="UIComponents" qml-module-version="1.0" href="uicomponents-qmlmodule.html" status="active" location="examples.qdoc" documented="true" seen="true" title="UI Components" brief="Basic set of UI components"/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test.qhp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test.qhp
new file mode 100644
index 000000000..ba54e85ea
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test.qhp
@@ -0,0 +1,260 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<QtHelpProject version="1.0">
+ <namespace>org.qt-project.test.001</namespace>
+ <virtualFolder>test</virtualFolder>
+ <metaData name="version" value="6.2.11"/>
+ <filterSection>
+ <toc>
+ <section ref="uicomponents-qmlmodule.html" title="UI Components">
+ <section ref="uicomponents-qmlmodule.html" title="Test">
+ <section ref="themodule-qmlmodule.html" title=""/>
+ <section ref="autolinking.html" title="Autolinking"/>
+ <section ref="test-cmaketest-example.html" title="CMake Example Project"/>
+ <section ref="classes.html" title="Classes"/>
+ <section ref="test-demos-demo-example.html" title="Demo"/>
+ <section ref="test-demos-hidden-example.html" title="Hidden Demo"/>
+ <section ref="test-empty-qmlmodule.html" title="No QML Types Here"/>
+ <section ref="obsolete-classes.html" title="Obsolete Classes"/>
+ <section ref="testcpp-module.html" title="QDoc Test C++ Classes"/>
+ <section ref="qdoc-test-qmlmodule.html" title="QDoc.Test QML Module"/>
+ <section ref="test-componentset-example.html" title="QML Documentation Example"/>
+ <section ref="qmlmodules.html" title="QML Modules"/>
+ <section ref="uicomponents-qmlmodule.html" title="UI Components"/>
+ <section ref="test-nover-qmlmodule.html" title="Versionless QML Module"/>
+ </section>
+ <section ref="testcpp-module.html" title="Classes">
+ <section ref="crossmoduleref.html" title="CrossModuleRef"/>
+ <section ref="seenclass.html" title="SeenClass Class Reference"/>
+ <section ref="testqdoc.html" title="TestQDoc"/>
+ <section ref="testqdoc-test.html" title="TestQDoc::Test Class Reference">
+ <section ref="testqdoc-test-members.html" title="List of all members"/>
+ <section ref="testqdoc-test-obsolete.html" title="Obsolete members"/>
+ </section>
+ <section ref="testqdoc-testderived.html" title="TestQDoc::TestDerived Class Reference">
+ <section ref="testqdoc-testderived-members.html" title="List of all members"/>
+ <section ref="testqdoc-testderived-obsolete.html" title="Obsolete members"/>
+ </section>
+ </section>
+ <section ref="uicomponents-qmlmodule.html" title="QML Types">
+ <section ref="qml-qdoc-test-abstractparent.html" title="AbstractParent Type Reference">
+ <section ref="qml-qdoc-test-abstractparent-members.html" title="List of all members"/>
+ </section>
+ <section ref="qml-qdoc-test-child.html" title="Child Type Reference">
+ <section ref="qml-qdoc-test-child-members.html" title="List of all members"/>
+ </section>
+ <section ref="qml-qdoc-test-doctest.html" title="DocTest Type Reference">
+ <section ref="qml-qdoc-test-doctest-members.html" title="List of all members"/>
+ </section>
+ <section ref="qml-qdoc-test-oldtype.html" title="OldType Type Reference">
+ <section ref="qml-qdoc-test-oldtype-members.html" title="List of all members"/>
+ </section>
+ <section ref="qml-qdoc-test-type.html" title="Type Type Reference">
+ <section ref="qml-qdoc-test-type-members.html" title="List of all members"/>
+ <section ref="qml-qdoc-test-type-obsolete.html" title="Obsolete members"/>
+ </section>
+ <section ref="qml-qdoc-test-yetanotherchild.html" title="YetAnotherChild Type Reference">
+ <section ref="qml-qdoc-test-yetanotherchild-members.html" title="List of all members"/>
+ </section>
+ <section ref="qml-int.html" title="int Type Reference"/>
+ <section ref="qml-uicomponents-progressbar.html" title="ProgressBar Type Reference">
+ <section ref="qml-uicomponents-progressbar-members.html" title="List of all members"/>
+ </section>
+ <section ref="qml-uicomponents-switch.html" title="Switch Type Reference">
+ <section ref="qml-uicomponents-switch-members.html" title="List of all members"/>
+ </section>
+ <section ref="qml-uicomponents-tabwidget.html" title="TabWidget Type Reference">
+ <section ref="qml-uicomponents-tabwidget-members.html" title="List of all members"/>
+ </section>
+ </section>
+ </section>
+ </toc>
+ <keywords>
+ <keyword name="AbstractParent" id="QML.AbstractParent" ref="qml-qdoc-test-abstractparent.html"/>
+ <keyword name="AbstractParent" id="QML.QDoc.Test1.AbstractParent" ref="qml-qdoc-test-abstractparent.html"/>
+ <keyword name="Autolinking" id="Autolinking" ref="autolinking.html"/>
+ <keyword name="Child" id="QML.Child" ref="qml-qdoc-test-child.html"/>
+ <keyword name="Child" id="QML.QDoc.Test1.Child" ref="qml-qdoc-test-child.html"/>
+ <keyword name="Classes" id="Classes" ref="classes.html"/>
+ <keyword name="CrossModuleRef" id="CrossModuleRef" ref="crossmoduleref.html"/>
+ <keyword name="DocTest" id="QML.DocTest" ref="qml-qdoc-test-doctest.html"/>
+ <keyword name="DocTest" id="QML.QDoc.Test1.DocTest" ref="qml-qdoc-test-doctest.html"/>
+ <keyword name="DocTest" id="QML.DocTest" ref="qml-test-nover-doctest.html"/>
+ <keyword name="DocTest" id="QML.Test.NoVer.DocTest" ref="qml-test-nover-doctest.html"/>
+ <keyword name="Obsolete Classes" id="Obsolete Classes" ref="obsolete-classes.html"/>
+ <keyword name="OldType" id="QML.OldType" ref="qml-qdoc-test-oldtype.html"/>
+ <keyword name="OldType" id="QML.QDoc.Test1.OldType" ref="qml-qdoc-test-oldtype.html"/>
+ <keyword name="ProgressBar" id="QML.ProgressBar" ref="qml-uicomponents-progressbar.html"/>
+ <keyword name="ProgressBar" id="QML.UIComponents1.ProgressBar" ref="qml-uicomponents-progressbar.html"/>
+ <keyword name="QDOCTEST_MACRO" id="QDOCTEST_MACRO" ref="testqdoc.html#QDOCTEST_MACRO"/>
+ <keyword name="QDOCTEST_MACRO2" id="QDOCTEST_MACRO2" ref="testqdoc-test.html#QDOCTEST_MACRO2"/>
+ <keyword name="QDoc Test C++ Classes" id="QDoc Test C++ Classes" ref="testcpp-module.html"/>
+ <keyword name="QDoc.Test" id="QML.Test.QDoc" ref="qdoc-test-qmlmodule.html"/>
+ <keyword name="QML Modules" id="QML Modules" ref="qmlmodules.html"/>
+ <keyword name="SeenClass" id="SeenClass" ref="seenclass.html"/>
+ <keyword name="Switch" id="QML.Switch" ref="qml-uicomponents-switch.html"/>
+ <keyword name="Switch" id="QML.UIComponents1.Switch" ref="qml-uicomponents-switch.html"/>
+ <keyword name="TabWidget" id="QML.TabWidget" ref="qml-uicomponents-tabwidget.html"/>
+ <keyword name="TabWidget" id="QML.UIComponents1.TabWidget" ref="qml-uicomponents-tabwidget.html"/>
+ <keyword name="Test" id="TestQDoc::Test" ref="testqdoc-test.html"/>
+ <keyword name="Test C++ Types" id="Test C++ Types" ref="cpptypes.html"/>
+ <keyword name="Test.Empty" id="QML.Empty.Test" ref="test-empty-qmlmodule.html"/>
+ <keyword name="Test.NoVer" id="QML.NoVer.Test" ref="test-nover-qmlmodule.html"/>
+ <keyword name="Test::SomeType" id="Test::SomeType" ref="testqdoc-test.html#SomeType-typedef"/>
+ <keyword name="TestDerived" id="TestQDoc::TestDerived" ref="testqdoc-testderived.html"/>
+ <keyword name="TestDerived::DerivedType" id="TestDerived::DerivedType" ref="testqdoc-testderived.html#DerivedType-typedef"/>
+ <keyword name="TestDerived::NotTypedef" id="TestDerived::NotTypedef" ref="testqdoc-testderived.html#NotTypedef-typedef"/>
+ <keyword name="TestQDoc" id="TestQDoc" ref="testqdoc.html"/>
+ <keyword name="TheType" id="QML.TheType" ref="qml-themodule-thetype.html"/>
+ <keyword name="TheType" id="QML.TheModule.TheType" ref="qml-themodule-thetype.html"/>
+ <keyword name="Type" id="QML.Type" ref="qml-qdoc-test-type.html"/>
+ <keyword name="Type" id="QML.QDoc.Test1.Type" ref="qml-qdoc-test-type.html"/>
+ <keyword name="TypeNoVersion" id="QML.TypeNoVersion" ref="qml-test-nover-typenoversion.html"/>
+ <keyword name="TypeNoVersion" id="QML.Test.NoVer.TypeNoVersion" ref="qml-test-nover-typenoversion.html"/>
+ <keyword name="UIComponents" id="QML.UIComponents" ref="uicomponents-qmlmodule.html"/>
+ <keyword name="YetAnotherChild" id="QML.YetAnotherChild" ref="qml-qdoc-test-yetanotherchild.html"/>
+ <keyword name="YetAnotherChild" id="QML.QDoc.Test1.YetAnotherChild" ref="qml-qdoc-test-yetanotherchild.html"/>
+ <keyword name="abs" id="int::abs" ref="qml-int.html#abs-method"/>
+ <keyword name="active" id="DocTest::active" ref="qml-qdoc-test-doctest.html#active-prop"/>
+ <keyword name="anotherObsoleteMember" id="Test::anotherObsoleteMember" ref="testqdoc-test-obsolete.html#anotherObsoleteMember"/>
+ <keyword name="bindableProp" id="TestDerived::bindableProp" ref="testqdoc-testderived.html#bindableProp-prop"/>
+ <keyword name="bindableProp" id="TestDerived::bindableProp" ref="testqdoc-testderived.html#bindableProp-prop"/>
+ <keyword name="bindablePropChanged" id="TestDerived::bindablePropChanged" ref="testqdoc-testderived.html#bindableProp-prop"/>
+ <keyword name="boolProp" id="TestDerived::boolProp" ref="testqdoc-testderived.html#boolProp-prop"/>
+ <keyword name="boolProp" id="TestDerived::boolProp" ref="testqdoc-testderived.html#boolProp-prop"/>
+ <keyword name="boolPropChanged" id="TestDerived::boolPropChanged" ref="testqdoc-testderived.html#boolProp-prop"/>
+ <keyword name="children" id="AbstractParent::children" ref="qml-qdoc-test-abstractparent.html#children-prop"/>
+ <keyword name="color" id="ProgressBar::color" ref="qml-uicomponents-progressbar.html#color-prop"/>
+ <keyword name="completed" id="DocTest::completed" ref="qml-qdoc-test-doctest.html#completed-signal"/>
+ <keyword name="completed" id="Type::completed" ref="qml-qdoc-test-type.html#completed-signal"/>
+ <keyword name="configured" id="Type::configured" ref="qml-qdoc-test-type.html#configured-signal"/>
+ <keyword name="copy" id="Type::copy" ref="qml-qdoc-test-type.html#copy-method"/>
+ <keyword name="current" id="TabWidget::current" ref="qml-uicomponents-tabwidget.html#current-prop"/>
+ <keyword name="deprecatedMember" id="Test::deprecatedMember" ref="testqdoc-test-obsolete.html#deprecatedMember"/>
+ <keyword name="deprecatedMethod" id="Type::deprecatedMethod" ref="qml-qdoc-test-type-obsolete.html#deprecatedMethod-method"/>
+ <keyword name="disable" id="Type::disable" ref="qml-qdoc-test-type.html#disable-method"/>
+ <keyword name="documentMe" id="CrossModuleRef::documentMe" ref="crossmoduleref.html#documentMe"/>
+ <keyword name="emitSomething" id="TestDerived::emitSomething" ref="testqdoc-testderived.html#emitSomething"/>
+ <keyword name="enable" id="Type::enable" ref="qml-qdoc-test-type.html#enable-method"/>
+ <keyword name="fail" id="DocTest::fail" ref="qml-qdoc-test-doctest.html#fail-method"/>
+ <keyword name="fail_hard" id="DocTest::fail_hard" ref="qml-qdoc-test-doctest.html#fail_hard-method"/>
+ <keyword name="fifth" id="Type::fifth" ref="qml-qdoc-test-type.html#fifth-prop"/>
+ <keyword name="foo" id="DocTest::foo" ref="qml-qdoc-test-doctest.html#foo-signal"/>
+ <keyword name="fourth" id="Type::fourth" ref="qml-qdoc-test-type.html#fourth-prop"/>
+ <keyword name="funcPtr" id="Test::funcPtr" ref="testqdoc-test.html#funcPtr"/>
+ <keyword name="futureDeprecated" id="Type::futureDeprecated" ref="qml-qdoc-test-type.html#futureDeprecated-method"/>
+ <keyword name="getInt" id="TestDerived::getInt" ref="testqdoc-testderived.html#intProp-prop"/>
+ <keyword name="group.created" id="Type::group.created" ref="qml-qdoc-test-type.html#group.created-signal"/>
+ <keyword name="group.first" id="Type::group.first" ref="qml-qdoc-test-type.html#group.first-prop"/>
+ <keyword name="group.second" id="Type::group.second" ref="qml-qdoc-test-type.html#group.second-prop"/>
+ <keyword name="group.third" id="Type::group.third" ref="qml-qdoc-test-type.html#group.third-prop"/>
+ <keyword name="id" id="Type::id" ref="qml-qdoc-test-type.html#id-prop"/>
+ <keyword name="id" id="TestDerived::id" ref="testqdoc-testderived.html#id"/>
+ <keyword name="inlineFunction" id="Test::inlineFunction" ref="testqdoc-test.html#inlineFunction"/>
+ <keyword name="int" id="QML.int" ref="qml-int.html"/>
+ <keyword name="int" id="QML.QDoc.Test1.int" ref="qml-int.html"/>
+ <keyword name="intProp" id="TestDerived::intProp" ref="testqdoc-testderived.html#intProp-prop"/>
+ <keyword name="invokeMe" id="TestDerived::invokeMe" ref="testqdoc-testderived.html#invokeMe"/>
+ <keyword name="itsHappening" id="DocTest::itsHappening" ref="qml-qdoc-test-doctest.html#itsHappening-signal"/>
+ <keyword name="maximum" id="ProgressBar::maximum" ref="qml-uicomponents-progressbar.html#maximum-prop"/>
+ <keyword name="methodWithEmDashInItsDocs" id="Test::methodWithEmDashInItsDocs" ref="testqdoc-test.html#methodWithEmDashInItsDocs"/>
+ <keyword name="methodWithEnDashInItsDocs" id="Test::methodWithEnDashInItsDocs" ref="testqdoc-test.html#methodWithEnDashInItsDocs"/>
+ <keyword name="minimum" id="ProgressBar::minimum" ref="qml-uicomponents-progressbar.html#minimum-prop"/>
+ <keyword name="name" id="AbstractParent::name" ref="qml-qdoc-test-abstractparent.html#name-method"/>
+ <keyword name="name" id="AbstractParent::name" ref="qml-qdoc-test-abstractparent.html#name-prop"/>
+ <keyword name="name" id="Child::name" ref="qml-qdoc-test-child.html#name-method"/>
+ <keyword name="name" id="Child::name" ref="qml-qdoc-test-child.html#name-prop"/>
+ <keyword name="name" id="DocTest::name" ref="qml-qdoc-test-doctest.html#name-prop"/>
+ <keyword name="name" id="Type::name" ref="qml-qdoc-test-type.html#name-prop"/>
+ <keyword name="name" id="TheType::name" ref="qml-themodule-thetype.html#name-prop"/>
+ <keyword name="name" id="TestDerived::name" ref="testqdoc-testderived.html#name-prop"/>
+ <keyword name="name" id="TestDerived::name" ref="testqdoc-testderived.html#name-prop"/>
+ <keyword name="obsoleteMember" id="Test::obsoleteMember" ref="testqdoc-test-obsolete.html#obsoleteMember"/>
+ <keyword name="on" id="Switch::on" ref="qml-uicomponents-switch.html#on-prop"/>
+ <keyword name="operator++" id="Test::operator++" ref="testqdoc-test-obsolete.html#operator-2b-2b"/>
+ <keyword name="operator--" id="Test::operator--" ref="testqdoc-test-obsolete.html#operator--"/>
+ <keyword name="operator=" id="Test::operator=" ref="testqdoc-test.html#operator-eq"/>
+ <keyword name="operator==" id="operator==" ref="testqdoc-test.html#operator-eq-eq"/>
+ <keyword name="overload" id="Test::overload" ref="testqdoc-test.html#overload"/>
+ <keyword name="rear" id="AbstractParent::rear" ref="qml-qdoc-test-abstractparent.html#rear-method"/>
+ <keyword name="resetBoolProp" id="TestDerived::resetBoolProp" ref="testqdoc-testderived.html#boolProp-prop"/>
+ <keyword name="sampleReadOnlyProperty" id="TabWidget::sampleReadOnlyProperty" ref="qml-uicomponents-tabwidget.html#sampleReadOnlyProperty-prop"/>
+ <keyword name="secondColor" id="ProgressBar::secondColor" ref="qml-uicomponents-progressbar.html#secondColor-prop"/>
+ <keyword name="setBindableProp" id="TestDerived::setBindableProp" ref="testqdoc-testderived.html#bindableProp-prop"/>
+ <keyword name="setBoolProp" id="TestDerived::setBoolProp" ref="testqdoc-testderived.html#boolProp-prop"/>
+ <keyword name="someFunction" id="Test::someFunction" ref="testqdoc-test.html#someFunction"/>
+ <keyword name="someFunctionDefaultArg" id="Test::someFunctionDefaultArg" ref="testqdoc-test.html#someFunctionDefaultArg"/>
+ <keyword name="someProp" id="TestDerived::someProp" ref="testqdoc-testderived.html#someProp-prop"/>
+ <keyword name="someProp" id="TestDerived::someProp" ref="testqdoc-testderived.html#someProp-prop"/>
+ <keyword name="someValue" id="TestDerived::someValue" ref="testqdoc-testderived.html#someValue"/>
+ <keyword name="staticObsoleteMember" id="TestDerived::staticObsoleteMember" ref="testqdoc-testderived-obsolete.html#staticObsoleteMember"/>
+ <keyword name="toggle" id="Switch::toggle" ref="qml-uicomponents-switch.html#toggle-method"/>
+ <keyword name="type" id="Type::type" ref="qml-qdoc-test-type.html#type-attached-prop"/>
+ <keyword name="value" id="ProgressBar::value" ref="qml-uicomponents-progressbar.html#value-prop"/>
+ <keyword name="virtualFun" id="Test::virtualFun" ref="testqdoc-test.html#virtualFun"/>
+ <keyword name="virtualFun" id="TestDerived::virtualFun" ref="testqdoc-testderived.html#virtualFun"/>
+ </keywords>
+ <files>
+ <file>autolinking.html</file>
+ <file>classes.html</file>
+ <file>cpptypes.html</file>
+ <file>crossmoduleref.html</file>
+ <file>images/leonardo-da-vinci.png</file>
+ <file>obsolete-classes.html</file>
+ <file>qdoc-test-qmlmodule.html</file>
+ <file>qml-int.html</file>
+ <file>qml-qdoc-test-abstractparent-members.html</file>
+ <file>qml-qdoc-test-abstractparent.html</file>
+ <file>qml-qdoc-test-child-members.html</file>
+ <file>qml-qdoc-test-child.html</file>
+ <file>qml-qdoc-test-doctest-members.html</file>
+ <file>qml-qdoc-test-doctest.html</file>
+ <file>qml-qdoc-test-oldtype-members.html</file>
+ <file>qml-qdoc-test-oldtype.html</file>
+ <file>qml-qdoc-test-type-members.html</file>
+ <file>qml-qdoc-test-type-obsolete.html</file>
+ <file>qml-qdoc-test-type.html</file>
+ <file>qml-qdoc-test-yetanotherchild-members.html</file>
+ <file>qml-qdoc-test-yetanotherchild.html</file>
+ <file>qml-test-nover-doctest-members.html</file>
+ <file>qml-test-nover-doctest.html</file>
+ <file>qml-test-nover-typenoversion-members.html</file>
+ <file>qml-test-nover-typenoversion.html</file>
+ <file>qml-themodule-thetype-members.html</file>
+ <file>qml-themodule-thetype.html</file>
+ <file>qml-uicomponents-progressbar-members.html</file>
+ <file>qml-uicomponents-progressbar.html</file>
+ <file>qml-uicomponents-switch-members.html</file>
+ <file>qml-uicomponents-switch.html</file>
+ <file>qml-uicomponents-tabwidget-members.html</file>
+ <file>qml-uicomponents-tabwidget.html</file>
+ <file>qmlmodules.html</file>
+ <file>seenclass.html</file>
+ <file>test-cmaketest-cmakelists-txt.html</file>
+ <file>test-cmaketest-example.html</file>
+ <file>test-cmaketest-main-cpp.html</file>
+ <file>test-componentset-componentset-pro.html</file>
+ <file>test-componentset-componentset-qml.html</file>
+ <file>test-componentset-example.html</file>
+ <file>test-componentset-progressbar-qml.html</file>
+ <file>test-componentset-switch-qml.html</file>
+ <file>test-componentset-tabwidget-qml.html</file>
+ <file>test-demos-demo-demo-cpp.html</file>
+ <file>test-demos-demo-demo-pro.html</file>
+ <file>test-demos-demo-dontxclude-cmakelists-txt.html</file>
+ <file>test-demos-demo-example.html</file>
+ <file>test-demos-hidden-example.html</file>
+ <file>test-empty-qmlmodule.html</file>
+ <file>test-nover-qmlmodule.html</file>
+ <file>testcpp-module.html</file>
+ <file>testqdoc-test-members.html</file>
+ <file>testqdoc-test-obsolete.html</file>
+ <file>testqdoc-test.html</file>
+ <file>testqdoc-testderived-members.html</file>
+ <file>testqdoc-testderived-obsolete.html</file>
+ <file>testqdoc-testderived.html</file>
+ <file>testqdoc.html</file>
+ <file>themodule-qmlmodule.html</file>
+ <file>uicomponents-qmlmodule.html</file>
+ </files>
+ </filterSection>
+</QtHelpProject>
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
new file mode 100644
index 000000000..52cebe971
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testcpp-module.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A test module page.">
+ <title>QDoc Test C++ Classes | Test 6.2.11</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>
+<li class="level2"><a href="#linking-to-function-like-things">Linking to function-like things</a></li>
+<li class="level3"><a href="#section">section()</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">QDoc Test C++ Classes</h1>
+<!-- $$$TestCPP-brief -->
+<p>A test module page. <a href="#details">More...</a></p>
+<!-- @@@TestCPP -->
+<p>This module was introduced in Qt 2.0.</p>
+<h2 id="namespaces">Namespaces</h2>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="crossmoduleref.html">CrossModuleRef</a></p></td><td class="tblDescr"><p>Namespace that has documented functions in multiple modules</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="testqdoc.html">TestQDoc</a></p></td><td class="tblDescr"><p>A namespace</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="seenclass.html">SeenClass</a></p></td><td class="tblDescr"><p>A public but undocumented class</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-test.html">TestQDoc::Test</a></p></td><td class="tblDescr"><p>A class in a namespace</p></td></tr>
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></p></td><td class="tblDescr"><p>A class in a namespace, derived from Test</p></td></tr>
+</table></div>
+<!-- $$$TestCPP-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<div class="admonition note">
+<p><b>Note: </b>This is just a test. /* Look, Ma! {I'm made of arguments!} */</p>
+</div>
+<p><b>This module was introduced in version 5.15.</b></p>
+<p>1.0</p>
+<h3 id="linking-to-function-like-things">Linking to function-like things</h3>
+<ul>
+<li><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a>()</li>
+<li><a href="testqdoc-test.html#QDOCTEST_MACRO2" translate="no">QDOCTEST_MACRO2</a>()</li>
+<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>
+<!-- @@@TestCPP -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-test-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-test-members.html
new file mode 100644
index 000000000..3b34571c7
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-test-members.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace.">
+ <title>List of All Members for Test | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>Test</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for Test</h1>
+<p>This is the complete list of members for <a href="testqdoc-test.html">TestQDoc::Test</a>, including inherited members.</p>
+<ul>
+<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>
+<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>
+<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/comprehensiveproject/expected/html/testqdoc-test-obsolete.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-test-obsolete.html
new file mode 100644
index 000000000..81cc19f7d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-test-obsolete.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace.">
+ <title>Obsolete Members for Test | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>Test</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">Obsolete Members for Test</h1>
+<p><b>The following members of class <a href="testqdoc-test.html" translate="no">Test</a> are deprecated.</b> They are provided to keep old source code working. We strongly advise against using them in new code.</p>
+<h2>Public Functions</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#anotherObsoleteMember" translate="no">anotherObsoleteMember</a></b>()</td></tr>
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated in 6.0)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#deprecatedMember" translate="no">deprecatedMember</a></b>()</td></tr>
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#obsoleteMember" translate="no">obsoleteMember</a></b>()</td></tr>
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated)</code> TestQDoc::Test &amp;</td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#operator-2b-2b" translate="no">operator++</a></b>()</td></tr>
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated)</code> TestQDoc::Test &amp;</td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#operator--" translate="no">operator--</a></b>()</td></tr>
+</table></div>
+<h2>Member Function Documentation</h2>
+<!-- $$$ -->
+<div class="fngroup">
+<h3 class="fn fngroupitem" translate="no" id="operator-2b-2b"><code class="details extra" translate="no">[deprecated]</code> <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;Test::<span class="name">operator++</span>()</h3><h3 class="fn fngroupitem" translate="no" id="operator--"><code class="details extra" translate="no">[deprecated]</code> <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;Test::<span class="name">operator--</span>()</h3></div>
+<p>This function is deprecated. We strongly advise against using it in new code.</p>
+<!-- @@@ -->
+<!-- $$$anotherObsoleteMember[overload1]$$$anotherObsoleteMember -->
+<h3 class="fn" translate="no" id="anotherObsoleteMember"><code class="details extra" translate="no">[deprecated]</code> <span class="type">void</span> Test::<span class="name">anotherObsoleteMember</span>()</h3>
+<p>This function is deprecated. We strongly advise against using it in new code.</p>
+<p>Use <a href="testqdoc-test-obsolete.html#obsoleteMember" translate="no">obsoleteMember</a>() instead.</p>
+<!-- @@@anotherObsoleteMember -->
+<!-- $$$deprecatedMember[overload1]$$$deprecatedMember -->
+<h3 class="fn" translate="no" id="deprecatedMember"><code class="details extra" translate="no">[deprecated in 6.0]</code> <span class="type">void</span> Test::<span class="name">deprecatedMember</span>()</h3>
+<p>This function is deprecated since 6.0. We strongly advise against using it in new code.</p>
+<p>Use <a href="testqdoc-test.html#someFunction" translate="no">someFunction</a>() instead.</p>
+<!-- @@@deprecatedMember -->
+<!-- $$$obsoleteMember[overload1]$$$obsoleteMember -->
+<h3 class="fn" translate="no" id="obsoleteMember"><code class="details extra" translate="no">[deprecated]</code> <span class="type">void</span> Test::<span class="name">obsoleteMember</span>()</h3>
+<p>This function is deprecated. We strongly advise against using it in new code.</p>
+<p>Use <a href="testqdoc-test.html#someFunction" translate="no">someFunction</a>() instead.</p>
+<!-- @@@obsoleteMember -->
+</body>
+</html>
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
new file mode 100644
index 000000000..abfd03371
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-test.html
@@ -0,0 +1,165 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace.">
+ <title>Test Class | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>Test</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#public-types">Public Types</a></li>
+<li class="level1"><a href="#public-functions">Public Functions</a></li>
+<li class="level1"><a href="#protected-functions">Protected Functions</a></li>
+<li class="level1"><a href="#related-non-members">Related Non-Members</a></li>
+<li class="level1"><a href="#macros">Macros</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">Test Class</h1>
+<span class="small-subtitle" translate="no">class <a href="testqdoc.html" translate="no">TestQDoc</a>::Test</span>
+<!-- $$$Test-brief -->
+<p>A class in a namespace. <a href="#details">More...</a></p>
+<!-- @@@Test -->
+<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;Test&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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"> Inherited By:</td><td class="memItemRight bottomAlign"> <p><a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></p>
+</td></tr>
+</table></div>
+<ul>
+<li><a href="testqdoc-test-members.html">List of all members, including inherited members</a></li>
+<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>
+<ul>
+<li><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a>(int i, bool b) const</li>
+</ul>
+<h2 id="public-types">Public Types</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#SomeType-typedef" translate="no">SomeType</a></b></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>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#methodWithEnDashInItsDocs" translate="no">methodWithEnDashInItsDocs</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since Test 1.0)</code> 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"> <code class="summary extra" translate="no">(since 2.0)</code> 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">
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#overload" translate="no">overload</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since Test 1.2)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#overload-1" translate="no">overload</a></b>(bool <i>b</i>)</td></tr>
+</table></div>
+<h2 id="related-non-members">Related Non-Members</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> bool </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#operator-eq-eq" translate="no">operator==</a></b>(const TestQDoc::Test &amp;<i>lhs</i>, const TestQDoc::Test &amp;<i>rhs</i>)</td></tr>
+</table></div>
+<h2 id="macros">Macros</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since Test 1.1)</code> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#QDOCTEST_MACRO2" translate="no">QDOCTEST_MACRO2</a></b>(int &amp;<i>x</i>)</td></tr>
+</table></div>
+<!-- $$$Test-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Test -->
+<div class="types">
+<h2>Member Type Documentation</h2>
+<!-- $$$SomeType -->
+<h3 class="fn" translate="no" id="SomeType-typedef">Test::<span class="name">SomeType</span></h3>
+<p>A typedef.</p>
+<!-- @@@SomeType -->
+</div>
+<div class="func">
+<h2>Member Function Documentation</h2>
+<!-- $$$ -->
+<div class="fngroup">
+<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>
+<!-- @@@funcPtr -->
+<!-- $$$inlineFunction[overload1]$$$inlineFunction -->
+<h3 class="fn" translate="no" id="inlineFunction"><span class="type">void</span> Test::<span class="name">inlineFunction</span>()</h3>
+<p>An inline function, documented using the \fn QDoc command.</p>
+<!-- @@@inlineFunction -->
+<!-- $$$methodWithEmDashInItsDocs[overload1]$$$methodWithEmDashInItsDocs -->
+<h3 class="fn" translate="no" id="methodWithEmDashInItsDocs"><span class="type">void</span> Test::<span class="name">methodWithEmDashInItsDocs</span>()</h3>
+<p>This method has em dashes in its documentation&mdash;as you'll find represented by <code translate="no">---</code> in the sources&mdash;here and there. The important bit to note is that when passed e.g. to the \c command, the three hyphens are processed as input to the command and not replaced by an em dash.</p>
+<p>-----------------------------------------------------------------------</p>
+<p>People can still add a bunch of dashes, though, without QDoc replacing them all with a series of em dashes.</p>
+<p>&mdash;You can also start a new paragraph with an em dash, if you want to.</p>
+<p><b>See also </b><a href="testqdoc-test.html#methodWithEnDashInItsDocs" translate="no">methodWithEnDashInItsDocs</a>.</p>
+<!-- @@@methodWithEmDashInItsDocs -->
+<!-- $$$methodWithEnDashInItsDocs[overload1]$$$methodWithEnDashInItsDocs -->
+<h3 class="fn" translate="no" id="methodWithEnDashInItsDocs"><span class="type">void</span> Test::<span class="name">methodWithEnDashInItsDocs</span>()</h3>
+<p>This method has en dashes in its documentation &ndash; as you'll find represented by <code translate="no">--</code> in the sources &ndash; here and there. The important bit to note is that when passed e.g. to the \c command, the two hyphens are processed as input to the command and not replaced by an en dash. This also applies to code blocks, where otherwise, the decrement operator would get completely borked:</p>
+<pre class="cpp" translate="no"><span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">42</span>; i <span class="operator">&gt;</span> <span class="number">0</span>; <span class="operator">-</span><span class="operator">-</span>i)
+ <span class="comment">// Do something cool during countdown.</span></pre>
+<p>...as it would be silly if this would output &ndash;i instead of <code translate="no">--i</code>.</p>
+<p>-----------------------------------------------------------------------</p>
+<p>It still allows people to add a bunch of dashes, though, without replacing them all with a series of en dashes. Of course, they might want to use the \hr command instead, like this:</p>
+<hr />
+<p>&ndash; You can also start a new paragraph with an en dash, if you want to.</p>
+<p><b>See also </b>methodWithEnDashInItsDocs.</p>
+<!-- @@@methodWithEnDashInItsDocs -->
+<!-- $$$someFunction[overload1]$$$someFunctionintint -->
+<h3 class="fn" translate="no" id="someFunction"><code class="details extra" translate="no">[since Test 1.0]</code> <span class="type">int</span> Test::<span class="name">someFunction</span>(<span class="type">int</span>, <span class="type">int</span> <i>v</i> = 0)</h3>
+<p>Function that takes a parameter <i translate="no">v</i>. Also returns the value of <i translate="no">v</i>.</p>
+<p>This function was introduced in Test 1.0.</p>
+<!-- @@@someFunction -->
+<!-- $$$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>This function was introduced in Qt 2.0.</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>
+<!-- $$$operator==[overload1]$$$operator==constTestQDoc::Test&constTestQDoc::Test& -->
+<h3 class="fn" translate="no" id="operator-eq-eq"><span class="type">bool</span> <span class="name">operator==</span>(const <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;<i>lhs</i>, const <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;<i>rhs</i>)</h3>
+<p>Returns true if <i translate="no">lhs</i> and <i translate="no">rhs</i> are equal.</p>
+<!-- @@@operator== -->
+</div>
+<div class="macros">
+<h2>Macro Documentation</h2>
+<!-- $$$QDOCTEST_MACRO2[overload1]$$$QDOCTEST_MACRO2int& -->
+<h3 class="fn" translate="no" id="QDOCTEST_MACRO2"><code class="details extra" translate="no">[since Test 1.1]</code> <span class="name">QDOCTEST_MACRO2</span>(<span class="type">int</span> &amp;<i>x</i>)</h3>
+<p>A macro with argument <i translate="no">x</i>.</p>
+<p>This macro was introduced in Test 1.1.</p>
+<!-- @@@QDOCTEST_MACRO2 -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-testderived-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-testderived-members.html
new file mode 100644
index 000000000..f263a0b7b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-testderived-members.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace, derived from Test.">
+ <title>List of All Members for TestDerived | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>TestDerived</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for TestDerived</h1>
+<p>This is the complete list of members for <a href="testqdoc-testderived.html">TestQDoc::TestDerived</a>, including inherited members.</p>
+<div class="table"><table class="propsummary" translate="no">
+<tr><td class="topAlign"><ul>
+<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#DerivedType-typedef" translate="no">DerivedType</a></b></span></li>
+<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#NotTypedef-typedef" translate="no">NotTypedef</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-testderived.html#bindableProp-prop" translate="no">bindableProp</a></b></span>() : QBindable&lt;QString&gt;</li>
+<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#bindableProp-prop" translate="no">bindablePropChanged</a></b></span>()</li>
+<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#boolProp-prop" translate="no">boolProp</a></b></span>() : bool</li>
+<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#boolProp-prop" translate="no">boolPropChanged</a></b></span>()</li>
+<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#emitSomething" translate="no">emitSomething</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-testderived.html#intProp-prop" translate="no">getInt</a></b></span>() : int *</li>
+<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#id" translate="no">id</a></b></span>() : int</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-testderived.html#invokeMe" translate="no">invokeMe</a></b></span>() const</li>
+<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#methodWithEmDashInItsDocs" translate="no">methodWithEmDashInItsDocs</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-testderived.html#name-prop" translate="no">name</a></b></span>() const : const QString *</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-testderived.html#boolProp-prop" translate="no">resetBoolProp</a></b></span>()</li>
+<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#bindableProp-prop" translate="no">setBindableProp</a></b></span>(const QString &amp;)</li>
+<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#boolProp-prop" translate="no">setBoolProp</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>
+<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-testderived.html#someProp-prop" translate="no">someProp</a></b></span>() : const QString &amp;</li>
+<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>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-testderived-obsolete.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-testderived-obsolete.html
new file mode 100644
index 000000000..e293b8595
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-testderived-obsolete.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace, derived from Test.">
+ <title>Obsolete Members for TestDerived | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>TestDerived</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">Obsolete Members for TestDerived</h1>
+<p><b>The following members of class <a href="testqdoc-testderived.html" translate="no">TestDerived</a> are deprecated.</b> They are provided to keep old source code working. We strongly advise against using them in new code.</p>
+<h2>Static Public Members</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived-obsolete.html#staticObsoleteMember" translate="no">staticObsoleteMember</a></b>()</td></tr>
+</table></div>
+<h2>Member Function Documentation</h2>
+<!-- $$$staticObsoleteMember[overload1]$$$staticObsoleteMember -->
+<h3 class="fn" translate="no" id="staticObsoleteMember"><code class="details extra" translate="no">[static, deprecated]</code> <span class="type">void</span> TestDerived::<span class="name">staticObsoleteMember</span>()</h3>
+<p>This function is deprecated. We strongly advise against using it in new code.</p>
+<p>Static obsolete method.</p>
+<!-- @@@staticObsoleteMember -->
+</body>
+</html>
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
new file mode 100644
index 000000000..9fb47d89a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-testderived.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace, derived from Test.">
+ <title>TestDerived Class | Test 6.2.11</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>TestDerived</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#public-types">Public Types</a></li>
+<li class="level1"><a href="#properties">Properties</a></li>
+<li class="level1"><a href="#public-functions">Public Functions</a></li>
+<li class="level1"><a href="#reimplemented-public-functions">Reimplemented Public Functions</a></li>
+<li class="level1"><a href="#public-slots">Public Slots</a></li>
+<li class="level1"><a href="#signals">Signals</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">TestDerived Class</h1>
+<span class="small-subtitle" translate="no">class <a href="testqdoc.html" translate="no">TestQDoc</a>::TestDerived</span>
+<!-- $$$TestDerived-brief -->
+<p>A class in a namespace, derived from <a href="testqdoc-test.html" translate="no">Test</a>. <a href="#details">More...</a></p>
+<!-- @@@TestDerived -->
+<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;TestDerived&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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"> Inherits:</td><td class="memItemRight bottomAlign"> <a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></td></tr>
+</table></div>
+<ul>
+<li><a href="testqdoc-testderived-members.html">List of all members, including inherited members</a></li>
+<li><a href="testqdoc-testderived-obsolete.html">Deprecated members</a></li>
+</ul>
+<h2 id="public-types">Public Types</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#DerivedType-typedef" translate="no">DerivedType</a></b></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#NotTypedef-typedef" translate="no">NotTypedef</a></b></td></tr>
+</table></div>
+<h2 id="properties">Properties</h2>
+<div class="table"><table class="propsummary" translate="no">
+<tr><td class="topAlign"><ul>
+<li class="fn" translate="no"><b><a href="testqdoc-testderived.html#bindableProp-prop" translate="no">bindableProp</a></b> : QString</li>
+<li class="fn" translate="no"><b><a href="testqdoc-testderived.html#boolProp-prop" translate="no">boolProp</a></b> : bool</li>
+<li class="fn" translate="no"><b><a href="testqdoc-testderived.html#intProp-prop" translate="no">intProp</a></b> : int* const</li>
+</ul></td><td class="topAlign"><ul>
+<li class="fn" translate="no"><b><a href="testqdoc-testderived.html#name-prop" translate="no">name</a></b> : const QString*</li>
+<li class="fn" translate="no"><b><a href="testqdoc-testderived.html#someProp-prop" translate="no">someProp</a></b> : QString</li>
+</ul>
+</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"> QBindable&lt;QString&gt; </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#bindableProp-prop" translate="no">bindableProp</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> bool </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#boolProp-prop" translate="no">boolProp</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> int *</td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#intProp-prop" translate="no">getInt</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#invokeMe" translate="no">invokeMe</a></b>() const</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> const QString *</td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#name-prop" translate="no">name</a></b>() const</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> const QString &amp;</td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#someProp-prop" translate="no">someProp</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> TestQDoc::TestDerived::NotTypedef </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#someValue" translate="no">someValue</a></b>()</td></tr>
+</table></div>
+<h2 id="reimplemented-public-functions">Reimplemented Public Functions</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> virtual int </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#id" translate="no">id</a></b>() override</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> virtual void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#virtualFun" translate="no">virtualFun</a></b>() override</td></tr>
+</table></div>
+<h2 id="public-slots">Public Slots</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#boolProp-prop" translate="no">resetBoolProp</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#bindableProp-prop" translate="no">setBindableProp</a></b>(const QString &amp;<i>s</i>)</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#boolProp-prop" translate="no">setBoolProp</a></b>(bool <i>b</i>)</td></tr>
+</table></div>
+<h2 id="signals">Signals</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#bindableProp-prop" translate="no">bindablePropChanged</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#boolProp-prop" translate="no">boolPropChanged</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#emitSomething" translate="no">emitSomething</a></b>()</td></tr>
+</table></div>
+<!-- $$$TestDerived-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@TestDerived -->
+<div class="types">
+<h2>Member Type Documentation</h2>
+<!-- $$$DerivedType -->
+<h3 class="fn" translate="no" id="DerivedType-typedef"><code class="details extra" translate="no">[alias]</code> TestDerived::<span class="name">DerivedType</span></h3>
+<p>An aliased typedef.</p>
+<!-- @@@DerivedType -->
+<!-- $$$NotTypedef -->
+<h3 class="fn" translate="no" id="NotTypedef-typedef"><code class="details extra" translate="no">[alias]</code> TestDerived::<span class="name">NotTypedef</span></h3>
+<p>I'm an alias, not a typedef.</p>
+<!-- @@@NotTypedef -->
+</div>
+<div class="prop">
+<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><p>Some property.</p>
+<p><b>See also </b><a href="testqdoc-testderived.html#someProp-prop" translate="no">someProp</a>.</p>
+<!-- @@@bindableProp -->
+<!-- $$$boolProp-prop$$$boolProp$$$setBoolPropbool$$$resetBoolProp$$$boolPropChanged -->
+<h3 class="fn" translate="no" id="boolProp-prop"><span class="name">boolProp</span> : <span class="type">bool</span></h3>
+<p>A boolean property.</p>
+<p><b>Access functions:</b></p>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft topAlign rightAlign"> bool </td><td class="memItemRight bottomAlign"><span class="name"><b>boolProp</b></span>()</td></tr>
+<tr><td class="memItemLeft topAlign rightAlign"> void </td><td class="memItemRight bottomAlign"><span class="name"><b>setBoolProp</b></span>(bool <i>b</i>)</td></tr>
+<tr><td class="memItemLeft topAlign rightAlign"> void </td><td class="memItemRight bottomAlign"><span class="name"><b>resetBoolProp</b></span>()</td></tr>
+</table></div>
+<p><b>Notifier signal:</b></p>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft topAlign rightAlign"> void </td><td class="memItemRight bottomAlign"><span class="name"><b>boolPropChanged</b></span>()</td></tr>
+</table></div>
+<!-- @@@boolProp -->
+<!-- $$$intProp-prop$$$getInt -->
+<h3 class="fn" translate="no" id="intProp-prop"><code class="details extra" translate="no">[read-only]</code> <span class="name">intProp</span> : <span class="type">int</span>* const</h3>
+<p>An integer property.</p>
+<p><b>Access functions:</b></p>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft topAlign rightAlign"> int *</td><td class="memItemRight bottomAlign"><span class="name"><b>getInt</b></span>()</td></tr>
+</table></div>
+<!-- @@@intProp -->
+<!-- $$$name-prop$$$name -->
+<h3 class="fn" translate="no" id="name-prop"><code class="details extra" translate="no">[read-only]</code> <span class="name">name</span> : const <span class="type">QString</span>*</h3>
+<p>This property holds a name.</p>
+<p><b>Access functions:</b></p>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft topAlign rightAlign"> const QString *</td><td class="memItemRight bottomAlign"><span class="name"><b>name</b></span>() const</td></tr>
+</table></div>
+<!-- @@@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><p>Another property.</p>
+<!-- @@@someProp -->
+</div>
+<div class="func">
+<h2>Member Function Documentation</h2>
+<!-- $$$emitSomething[overload1]$$$emitSomething -->
+<h3 class="fn" translate="no" id="emitSomething"><code class="details extra" translate="no">[private signal]</code> <span class="type">void</span> TestDerived::<span class="name">emitSomething</span>()</h3>
+<p>Emitted when things happen.</p>
+<div class="admonition note"><p><b>Note: </b>This is a private signal. It can be used in signal connections but cannot be emitted by the user.</p>
+</div><!-- @@@emitSomething -->
+<!-- $$$id[overload1]$$$id -->
+<h3 class="fn" translate="no" id="id"><code class="details extra" translate="no">[override virtual]</code> <span class="type">int</span> TestDerived::<span class="name">id</span>()</h3>
+<!-- @@@id -->
+<!-- $$$invokeMe[overload1]$$$invokeMe -->
+<h3 class="fn" translate="no" id="invokeMe"><code class="details extra" translate="no">[invokable]</code> <span class="type">void</span> TestDerived::<span class="name">invokeMe</span>() const</h3>
+<p>Something invokable.</p>
+<div class="admonition note"><p><b>Note: </b>This function can be invoked via the meta-object system and from QML. See Q_INVOKABLE.</p>
+</div><!-- @@@invokeMe -->
+<!-- $$$someValue[overload1]$$$someValue -->
+<h3 class="fn" translate="no" id="someValue"><span class="type"><a href="testqdoc-testderived.html#NotTypedef-typedef" translate="no">TestQDoc::TestDerived::NotTypedef</a></span> TestDerived::<span class="name">someValue</span>()</h3>
+<p>Returns a value using an aliases type.</p>
+<!-- @@@someValue -->
+<!-- $$$virtualFun[overload1]$$$virtualFun -->
+<h3 class="fn" translate="no" id="virtualFun"><code class="details extra" translate="no">[override virtual]</code> <span class="type">void</span> TestDerived::<span class="name">virtualFun</span>()</h3>
+<p>Reimplements: <a href="testqdoc-test.html#virtualFun" translate="no">Test::virtualFun</a>().</p>
+<!-- @@@virtualFun -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc.html
new file mode 100644
index 000000000..7ccc7f4dd
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A namespace.">
+ <title>TestQDoc Namespace | Test 6.2.11</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="#macros">Macros</a></li>
+<li class="level1"><a href="#details">Detailed Description</a></li>
+<li class="level2"><a href="#usage">Usage</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">TestQDoc Namespace</h1>
+<!-- $$$TestQDoc-brief -->
+<p>A namespace. <a href="#details">More...</a></p>
+<!-- @@@TestQDoc -->
+<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;TestCPP&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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>
+</table></div>
+<h2 id="classes">Classes</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since 1.1)</code> class </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html" translate="no">Test</a></b></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since 2.0)</code> class </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html" translate="no">TestDerived</a></b></td></tr>
+</table></div>
+<h2 id="macros">Macros</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since Test 0.9)</code> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc.html#QDOCTEST_MACRO" translate="no">QDOCTEST_MACRO</a></b></td></tr>
+</table></div>
+<!-- $$$TestQDoc-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<h3 id="usage">Usage</h3>
+<p>This namespace is for testing QDoc output.</p>
+</div>
+<!-- @@@TestQDoc -->
+<div class="classes">
+<h2>Classes</h2>
+<h3> class <a href="testqdoc-test.html">Test</a></h3><!-- $$$Test-brief -->
+<p>A class in a namespace. <a href="testqdoc-test.html#details">More...</a></p>
+<!-- @@@Test -->
+<h3> class <a href="testqdoc-testderived.html">TestDerived</a></h3><!-- $$$TestDerived-brief -->
+<p>A class in a namespace, derived from <a href="testqdoc-test.html" translate="no">Test</a>. <a href="testqdoc-testderived.html#details">More...</a></p>
+<!-- @@@TestDerived -->
+</div>
+<div class="macros">
+<h2>Macro Documentation</h2>
+<!-- $$$QDOCTEST_MACRO[overload1]$$$QDOCTEST_MACRO -->
+<h3 class="fn" translate="no" id="QDOCTEST_MACRO"><code class="details extra" translate="no">[since Test 0.9]</code> <span class="name">QDOCTEST_MACRO</span></h3>
+<p>This macro was introduced in Test 0.9.</p>
+<!-- @@@QDOCTEST_MACRO -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testtagfile.tags b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testtagfile.tags
new file mode 100644
index 000000000..f68dffed6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testtagfile.tags
@@ -0,0 +1,500 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tagfile>
+ <compound kind="class">
+ <name>QDoc.Test.AbstractParent</name>
+ <filename>qml-qdoc-test-abstractparent.html</filename>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>name</name>
+ <anchorfile>qml-qdoc-test-abstractparent.html</anchorfile>
+ <anchor>name-method</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>name</name>
+ <anchorfile>qml-qdoc-test-abstractparent.html</anchorfile>
+ <anchor>name-method</anchor>
+ <arglist>(Child child, name)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>rear</name>
+ <anchorfile>qml-qdoc-test-abstractparent.html</anchorfile>
+ <anchor>rear-method</anchor>
+ <arglist>(Child child, var method)</arglist>
+ </member>
+ </compound>
+ <compound kind="class">
+ <name>QDoc.Test.Child</name>
+ <filename>qml-qdoc-test-child.html</filename>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>name</name>
+ <anchorfile>qml-qdoc-test-child.html</anchorfile>
+ <anchor>name-method</anchor>
+ <arglist>(Child child, name)</arglist>
+ </member>
+ </compound>
+ <compound kind="namespace">
+ <name>CrossModuleRef</name>
+ <filename>crossmoduleref.html</filename>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>documentMe</name>
+ <anchorfile>crossmoduleref.html</anchorfile>
+ <anchor>documentMe</anchor>
+ <arglist>()</arglist>
+ </member>
+ </compound>
+ <compound kind="class">
+ <name>QDoc.Test.DocTest</name>
+ <filename>qml-qdoc-test-doctest.html</filename>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>completed</name>
+ <anchorfile>qml-qdoc-test-doctest.html</anchorfile>
+ <anchor>completed-signal</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>fail</name>
+ <anchorfile>qml-qdoc-test-doctest.html</anchorfile>
+ <anchor>fail-method</anchor>
+ <arglist>(message)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>fail_hard</name>
+ <anchorfile>qml-qdoc-test-doctest.html</anchorfile>
+ <anchor>fail_hard-method</anchor>
+ <arglist>(msg, option)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>foo</name>
+ <anchorfile>qml-qdoc-test-doctest.html</anchorfile>
+ <anchor>foo-signal</anchor>
+ <arglist>(var bar)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>itsHappening</name>
+ <anchorfile>qml-qdoc-test-doctest.html</anchorfile>
+ <anchor>itsHappening-signal</anchor>
+ <arglist>(bool really)</arglist>
+ </member>
+ </compound>
+ <compound kind="class">
+ <name>Test.NoVer.DocTest</name>
+ <filename>qml-test-nover-doctest.html</filename>
+ </compound>
+ <compound kind="class">
+ <name>QDoc.Test.OldType</name>
+ <filename>qml-qdoc-test-oldtype.html</filename>
+ </compound>
+ <compound kind="class">
+ <name>UIComponents.ProgressBar</name>
+ <filename>qml-uicomponents-progressbar.html</filename>
+ </compound>
+ <compound kind="class">
+ <name>SeenClass</name>
+ <filename>seenclass.html</filename>
+ </compound>
+ <compound kind="class">
+ <name>UIComponents.Switch</name>
+ <filename>qml-uicomponents-switch.html</filename>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>toggle</name>
+ <anchorfile>qml-uicomponents-switch.html</anchorfile>
+ <anchor>toggle-method</anchor>
+ <arglist>()</arglist>
+ </member>
+ </compound>
+ <compound kind="class">
+ <name>UIComponents.TabWidget</name>
+ <filename>qml-uicomponents-tabwidget.html</filename>
+ </compound>
+ <compound kind="namespace">
+ <name>TestQDoc</name>
+ <filename>testqdoc.html</filename>
+ <class>TestQDoc::Test</class>
+ <class>TestQDoc::TestDerived</class>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>QDOCTEST_MACRO</name>
+ <anchorfile>testqdoc.html</anchorfile>
+ <anchor>QDOCTEST_MACRO</anchor>
+ <arglist>QDOCTEST_MACRO</arglist>
+ </member>
+ </compound>
+ <compound kind="class">
+ <name>TestQDoc::Test</name>
+ <filename>testqdoc-test.html</filename>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>QDOCTEST_MACRO2</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>QDOCTEST_MACRO2</anchor>
+ <arglist>(int &amp;x)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>Test</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>Test</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>TestQDoc::Test &amp;</type>
+ <name>operator++</name>
+ <anchorfile>testqdoc-test-obsolete.html</anchorfile>
+ <anchor>operator-2b-2b</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>TestQDoc::Test &amp;</type>
+ <name>operator--</name>
+ <anchorfile>testqdoc-test-obsolete.html</anchorfile>
+ <anchor>operator--</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>TestQDoc::Test &amp;</type>
+ <name>operator=</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>operator-eq</anchor>
+ <arglist>(TestQDoc::Test &amp;&amp;other)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>bool</type>
+ <name>operator==</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>operator-eq-eq</anchor>
+ <arglist>(const TestQDoc::Test &amp;lhs, const TestQDoc::Test &amp;rhs)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>int</type>
+ <name>someFunction</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>someFunction</anchor>
+ <arglist>(int, int v)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void (*)(bool)</type>
+ <name>funcPtr</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>funcPtr</anchor>
+ <arglist>(*)(bool) funcPtr(bool b, const char *s)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>anotherObsoleteMember</name>
+ <anchorfile>testqdoc-test-obsolete.html</anchorfile>
+ <anchor>anotherObsoleteMember</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>deprecatedMember</name>
+ <anchorfile>testqdoc-test-obsolete.html</anchorfile>
+ <anchor>deprecatedMember</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>inlineFunction</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>inlineFunction</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>methodWithEmDashInItsDocs</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>methodWithEmDashInItsDocs</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>methodWithEnDashInItsDocs</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>methodWithEnDashInItsDocs</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>obsoleteMember</name>
+ <anchorfile>testqdoc-test-obsolete.html</anchorfile>
+ <anchor>obsoleteMember</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="protected" virtualness="non" static="no">
+ <type>void</type>
+ <name>overload</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>overload</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="protected" virtualness="non" static="no">
+ <type>void</type>
+ <name>overload</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>overload-1</anchor>
+ <arglist>(bool b)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="virtual" static="no">
+ <type>virtual void</type>
+ <name>virtualFun</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>virtualFun</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>someFunctionDefaultArg</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>someFunctionDefaultArg</anchor>
+ <arglist>(int i, bool b) const const</arglist>
+ </member>
+ <member kind="typedef" type="">
+ <name>SomeType</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>SomeType-typedef</anchor>
+ <arglist></arglist>
+ </member>
+ </compound>
+ <compound kind="class">
+ <name>TestQDoc::TestDerived</name>
+ <filename>testqdoc-testderived.html</filename>
+ <base>Test</base>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>QBindable&lt;QString&gt;</type>
+ <name>bindableProp</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>bindableProp-prop</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>TestQDoc::TestDerived::NotTypedef</type>
+ <name>someValue</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>someValue</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>bool</type>
+ <name>boolProp</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>boolProp-prop</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>const QString &amp;</type>
+ <name>someProp</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>someProp-prop</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>int *</type>
+ <name>getInt</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>intProp-prop</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="virtual" static="no">
+ <type>virtual int</type>
+ <name>id</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>id</anchor>
+ <arglist>() override</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>bindablePropChanged</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>bindableProp-prop</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>boolPropChanged</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>boolProp-prop</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>emitSomething</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>emitSomething</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>resetBoolProp</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>boolProp-prop</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>setBindableProp</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>bindableProp-prop</anchor>
+ <arglist>(const QString &amp;s)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>setBoolProp</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>boolProp-prop</anchor>
+ <arglist>(bool b)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="yes">
+ <type>void</type>
+ <name>staticObsoleteMember</name>
+ <anchorfile>testqdoc-testderived-obsolete.html</anchorfile>
+ <anchor>staticObsoleteMember</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="virtual" static="no">
+ <type>virtual void</type>
+ <name>virtualFun</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>virtualFun</anchor>
+ <arglist>() override</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>const QString *</type>
+ <name>name</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>name-prop</anchor>
+ <arglist>() const const</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>invokeMe</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>invokeMe</anchor>
+ <arglist>() const const</arglist>
+ </member>
+ <member kind="typedef" type="">
+ <name>DerivedType</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>DerivedType-typedef</anchor>
+ <arglist></arglist>
+ </member>
+ <member kind="typedef" type="">
+ <name>NotTypedef</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>NotTypedef-typedef</anchor>
+ <arglist></arglist>
+ </member>
+ <member kind="property" type="QString">
+ <name>bindableProp</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>bindableProp-prop</anchor>
+ <arglist></arglist>
+ </member>
+ <member kind="property" type="bool">
+ <name>boolProp</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>boolProp-prop</anchor>
+ <arglist></arglist>
+ </member>
+ <member kind="property" type="int*">
+ <name>intProp</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>intProp-prop</anchor>
+ <arglist></arglist>
+ </member>
+ <member kind="property" type="const QString*">
+ <name>name</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>name-prop</anchor>
+ <arglist></arglist>
+ </member>
+ <member kind="property" type="QString">
+ <name>someProp</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>someProp-prop</anchor>
+ <arglist></arglist>
+ </member>
+ </compound>
+ <compound kind="class">
+ <name>TheModule.TheType</name>
+ <filename>qml-themodule-thetype.html</filename>
+ </compound>
+ <compound kind="class">
+ <name>QDoc.Test.Type</name>
+ <filename>qml-qdoc-test-type.html</filename>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>Type</type>
+ <name>copy</name>
+ <anchorfile>qml-qdoc-test-type.html</anchorfile>
+ <anchor>copy-method</anchor>
+ <arglist>(a)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>completed</name>
+ <anchorfile>qml-qdoc-test-type.html</anchorfile>
+ <anchor>completed-signal</anchor>
+ <arglist>(int status)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>configured</name>
+ <anchorfile>qml-qdoc-test-type.html</anchorfile>
+ <anchor>configured-signal</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>deprecatedMethod</name>
+ <anchorfile>qml-qdoc-test-type-obsolete.html</anchorfile>
+ <anchor>deprecatedMethod-method</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>disable</name>
+ <anchorfile>qml-qdoc-test-type.html</anchorfile>
+ <anchor>disable-method</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>enable</name>
+ <anchorfile>qml-qdoc-test-type.html</anchorfile>
+ <anchor>enable-method</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>futureDeprecated</name>
+ <anchorfile>qml-qdoc-test-type.html</anchorfile>
+ <anchor>futureDeprecated-method</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>group.created</name>
+ <anchorfile>qml-qdoc-test-type.html</anchorfile>
+ <anchor>group.created-signal</anchor>
+ <arglist>()</arglist>
+ </member>
+ </compound>
+ <compound kind="class">
+ <name>Test.NoVer.TypeNoVersion</name>
+ <filename>qml-test-nover-typenoversion.html</filename>
+ </compound>
+ <compound kind="class">
+ <name>QDoc.Test.YetAnotherChild</name>
+ <filename>qml-qdoc-test-yetanotherchild.html</filename>
+ </compound>
+</tagfile>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/themodule-qmlmodule.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/themodule-qmlmodule.html
new file mode 100644
index 000000000..e3d28561d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/themodule-qmlmodule.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- properties.qdoc -->
+ <title>Test 6.2.11</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<!-- $$$TheModule-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@TheModule -->
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="qml-themodule-thetype.html">TheType</a></p></td></tr>
+</table></div>
+</body>
+</html>
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
new file mode 100644
index 000000000..0b7e08864
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/uicomponents-qmlmodule.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- examples.qdoc -->
+ <meta name="description" content="Basic set of UI components.">
+ <title>UI Components | Test 6.2.11</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">UI Components</h1>
+<!-- $$$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>
+</div>
+<!-- @@@UIComponents -->
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="qml-uicomponents-progressbar.html">ProgressBar</a></p></td><td class="tblDescr"><p>A component that shows the progress of an event</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="qml-uicomponents-switch.html">Switch</a></p></td><td class="tblDescr"><p>A component that can be turned on or off</p></td></tr>
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="qml-uicomponents-tabwidget.html">TabWidget</a></p></td><td class="tblDescr"><p>A widget that places its children as tabs</p></td></tr>
+</table></div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/autolinking.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/autolinking.webxml
new file mode 100644
index 000000000..91f35d5d7
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/autolinking.webxml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="autolinking.html" href="autolinking.html" status="active" location="classlists.qdoc" documented="true" subtype="page" title="Autolinking" fulltitle="Autolinking" subtitle="">
+ <contents name="testqdoc" title="TestQDoc" level="1"/>
+ <contents name="someprop" title="someProp" level="1"/>
+ <description>
+ <section id="testqdoc">
+ <heading level="1">TestQDoc</heading>
+ <para>The string <link raw="TestQDoc" href="testqdoc.html" type="namespace">TestQDoc</link> links to the C++ namespace unless linking explicitly, <link raw="#TestQDoc" href="autolinking.html#testqdoc" type="page" page="Autolinking">like this</link>, or <link raw="TestQDoc" href="testqdoc.html" type="namespace">this</link>. Also,</para>
+ <para>Autolinks:</para>
+ <list type="bullet">
+ <item>
+ <para>
+ <link raw="TestQDoc::TestDerived" href="testqdoc-testderived.html" type="class">TestQDoc::TestDerived</link></para>
+ </item>
+ </list>
+ <para>Explicit links:</para>
+ <list type="bullet">
+ <item>
+ <para>
+ <link raw="TestQDoc::TestDerived" href="testqdoc-testderived.html" type="class">TestQDoc::TestDerived</link></para>
+ </item>
+ <item>
+ <para>
+ <link raw="Obsolete Classes#TestQDoc" href="obsolete-classes.html#testqdoc" type="page" page="Obsolete Classes">Obsolete Classes#TestQDoc</link></para>
+ </item>
+ </list>
+ </section>
+ <section id="someprop">
+ <heading level="1">someProp</heading>
+ </section>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/classes.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/classes.webxml
new file mode 100644
index 000000000..55faed6d6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/classes.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="classes.html" href="classes.html" status="active" location="unseenclass.qdoc" documented="true" subtype="page" title="Classes" fulltitle="Classes" subtitle="">
+ <description>
+ <generatedlist contents="annotatedclasses"/>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/cpptypes.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/cpptypes.webxml
new file mode 100644
index 000000000..df7cd7024
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/cpptypes.webxml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <group name="cpptypes" href="cpptypes.html" status="active" location="classlists.qdoc" documented="true" seen="true" title="Test C++ Types">
+ <description>
+ <generatedlist contents="testgroup"/>
+ <table width="100%">
+ <row>
+ <item>
+ <para>
+ <link raw="TestQDoc::Test" href="testqdoc-test.html" type="class"/>
+ </para>
+ </item>
+ <item>
+ <para>A class in a namespace.</para>
+ </item>
+ </row>
+ </table>
+ </description>
+ </group>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/crossmoduleref.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/crossmoduleref.webxml
new file mode 100644
index 000000000..682799bd8
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/crossmoduleref.webxml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <namespace name="CrossModuleRef" href="crossmoduleref.html" status="active" access="public" location="testcpp.h" since="3.0" documented="true" module="TestCPP" brief="Namespace that has documented functions in multiple modules">
+ <description>
+ <brief>Namespace that has documented functions in multiple modules.</brief>
+ </description>
+ <function name="documentMe" fullname="CrossModuleRef::documentMe" href="crossmoduleref.html#documentMe" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void documentMe()">
+ <description>
+ <para>Document me!</para>
+ </description>
+ </function>
+ </namespace>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/images/leonardo-da-vinci.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/images/leonardo-da-vinci.png
new file mode 100644
index 000000000..854acb4ca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/images/leonardo-da-vinci.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/obsolete-classes.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/obsolete-classes.webxml
new file mode 100644
index 000000000..dda841458
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/obsolete-classes.webxml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="obsolete-classes.html" href="obsolete-classes.html" status="active" location="classlists.qdoc" documented="true" subtype="page" title="Obsolete Classes" fulltitle="Obsolete Classes" subtitle="">
+ <contents name="classes-with-obsolete-members" title="Classes with obsolete members" level="1"/>
+ <contents name="testqdoc" title="TestQDoc" level="2"/>
+ <description>
+ <section id="classes-with-obsolete-members">
+ <heading level="1">Classes with obsolete members</heading>
+ <generatedlist contents="obsoletecppmembers"/>
+ </section>
+ <section id="testqdoc">
+ <heading level="2">TestQDoc</heading>
+ </section>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/qdoc-test-qmlmodule.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/qdoc-test-qmlmodule.webxml
new file mode 100644
index 000000000..5d24b3077
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/qdoc-test-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/comprehensiveproject/expected/webxml/qmlmodules.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/qmlmodules.webxml
new file mode 100644
index 000000000..dffd151d2
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/qmlmodules.webxml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="qmlmodules.html" href="qmlmodules.html" status="active" location="modules.qdoc" documented="true" subtype="page" title="QML Modules" fulltitle="QML Modules" subtitle="">
+ <contents name="qml-types" title="QML types" level="1"/>
+ <contents name="qml-value-types" title="QML value types" level="1"/>
+ <description>
+ <generatedlist contents="qml-modules"/>
+ <section id="qml-types">
+ <heading level="1">QML types</heading>
+ <generatedlist contents="qmltypesbymodule QDoc.Test"/>
+ </section>
+ <section id="qml-value-types">
+ <heading level="1">QML value types</heading>
+ <generatedlist contents="qmlvaluetypes"/>
+ <generatedlist contents="qmlvaluetypesbymodule QDoc.Test"/>
+ </section>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/seenclass.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/seenclass.webxml
new file mode 100644
index 000000000..92c2ad8f0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/seenclass.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="SeenClass" href="seenclass.html" status="active" access="public" location="dont.h" since="2.0" documented="true" module="TestCPP" brief="A public but undocumented class">
+ <description>
+ <brief>A public but undocumented class.</brief>
+ </description>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-cmaketest-cmakelists-txt.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-cmaketest-cmakelists-txt.webxml
new file mode 100644
index 000000000..7b4bf2ce6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-cmaketest-cmakelists-txt.webxml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="cmaketest/CMakeLists.txt" href="test-cmaketest-cmakelists-txt.html" title="CMakeLists.txt Example File" fulltitle="CMakeLists.txt Example File" subtitle="cmaketest/CMakeLists.txt">
+ <description>
+ <code>cmake_minimum_required(VERSION 3.16)
+project (QDOCTEST)</code>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-cmaketest-example.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-cmaketest-example.webxml
new file mode 100644
index 000000000..b0cd15b27
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-cmaketest-example.webxml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="cmaketest" href="test-cmaketest-example.html" status="active" location="cmaketest.qdoc" documented="true" subtype="example" title="CMake Example Project" fulltitle="CMake Example Project" subtitle="">
+ <description>
+ <image href="images/leonardo-da-vinci.png"/>
+ <para>Files:</para>
+ <list type="bullet">
+ <item>
+ <para>
+ <link raw="cmaketest/CMakeLists.txt" href="test-cmaketest-cmakelists-txt.html" type="page" page="CMakeLists.txt Example File">cmaketest/CMakeLists.txt</link>
+ </para>
+ </item>
+ <item>
+ <para>
+ <link raw="cmaketest/main.cpp" href="test-cmaketest-main-cpp.html" type="page" page="main.cpp Example File">cmaketest/main.cpp</link>
+ </para>
+ </item>
+ </list>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-cmaketest-main-cpp.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-cmaketest-main-cpp.webxml
new file mode 100644
index 000000000..7d22ced82
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-cmaketest-main-cpp.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="cmaketest/main.cpp" href="test-cmaketest-main-cpp.html" title="main.cpp Example File" fulltitle="main.cpp Example File" subtitle="cmaketest/main.cpp">
+ <description>
+ <code>&lt;@type&gt;void&lt;/@type&gt; main(){}</code>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-componentset-pro.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-componentset-pro.webxml
new file mode 100644
index 000000000..08be3fa28
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-componentset-pro.webxml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="componentset/componentset.pro" href="test-componentset-componentset-pro.html" title="componentset.pro Example File" fulltitle="componentset.pro Example File" subtitle="componentset/componentset.pro">
+ <description>
+ <code>SOURCES = componentset.pro \
+ ProgressBar.qml \
+ Switch.qml \
+ TabWidget.qml \
+ uicomponents.qdoc</code>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-componentset-qml.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-componentset-qml.webxml
new file mode 100644
index 000000000..0a4297da0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-componentset-qml.webxml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="componentset/componentset.qml" href="test-componentset-componentset-qml.html" title="componentset.qml Example File" fulltitle="componentset.qml Example File" subtitle="componentset/componentset.qml">
+ <description>
+ <code>&lt;@comment&gt;// Copyright (C) 2023 The Qt Company Ltd.&lt;/@comment&gt;
+&lt;@comment&gt;// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0&lt;/@comment&gt;
+
+import QtQuick 2.0
+
+&lt;@type&gt;Item&lt;/@type&gt; {
+}</code>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-example.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-example.webxml
new file mode 100644
index 000000000..600f2f3ed
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-example.webxml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="componentset" href="test-componentset-example.html" status="active" location="examples.qdoc" documented="true" subtype="example" title="QML Documentation Example" fulltitle="QML Documentation Example" subtitle="" brief="Example for documenting QML types">
+ <contents name="qml-class" title="QML Class" level="1"/>
+ <contents name="properties-signals-handlers-and-methods" title="Properties, Signals, Handlers, and Methods" level="1"/>
+ <contents name="internal-documentation" title="Internal Documentation" level="2"/>
+ <contents name="qml-types-with-c-implementation" title="QML Types with C++ Implementation" level="1"/>
+ <description>
+ <brief>Example for documenting QML types.</brief>
+ <para>This example demonstrates one of the ways to document QML types. It also generates a warning about a missing example image, on purpose.</para>
+ <para>In particular, there are sample types that are documented with QDoc commands comments. There are documentation comments for the QML types and their public interfaces. The types are grouped into a module, the <link raw="UI Components" href="uicomponents-qmlmodule.html" type="">UI Components</link> module.</para>
+ <para>The uicomponents.qdoc file generates the overview page for the <link raw="UI Components" href="uicomponents-qmlmodule.html" type="">UI Components</link> module page.</para>
+ <para>The generated documentation is available in the <link raw="UI Components" href="uicomponents-qmlmodule.html" type="">UI Components</link> module.</para>
+ <section id="qml-class">
+ <heading level="1">QML Class</heading>
+ <para>The QML types use the \qmltype to document the type. In addition, they have the \inmodule command in order for QDoc to associate them to the <teletype type="highlighted">UIComponents</teletype> module.</para>
+ <para>QDoc uses the \brief command to place a basic description when listing the types.</para>
+ </section>
+ <section id="properties-signals-handlers-and-methods">
+ <heading level="1">Properties, Signals, Handlers, and Methods</heading>
+ <para>The types have their properties, signals, handlers, and methods defined in their respective QML files. QDoc associates the properties and methods to the types, therefore, you only need to place the documentation above the property, method, or signal.</para>
+ <para>To document the type of a <italic>property alias</italic>, you must use the \qmlproperty command to specify the data type.</para>
+ <code>\qmlproperty int anAliasedProperty
+An aliased property of type int.</code>
+ </section>
+ <section id="internal-documentation">
+ <heading level="2">Internal Documentation</heading>
+ <para>You may declare that a documentation is for internal use by placing the \internal command after the beginning QDoc comment <teletype type="highlighted">/*</teletype>. QDoc will prevent the internal documentation from appearing in the public API.</para>
+ <para>If you wish to omit certain parts of the documentation, you may use the \omit and \endomit command.</para>
+ </section>
+ <section id="qml-types-with-c-implementation">
+ <heading level="1">QML Types with C++ Implementation</heading>
+ <para>This example only demonstrates the documentation for types in QML files, but the regular QML commands may be placed inside C++ classes to define the public API of the QML type.</para>
+ </section>
+ <para>Files:</para>
+ <list type="bullet">
+ <item>
+ <para>
+ <link raw="componentset/ProgressBar.qml" href="test-componentset-progressbar-qml.html" type="page" page="ProgressBar.qml Example File">componentset/ProgressBar.qml</link>
+ </para>
+ </item>
+ <item>
+ <para>
+ <link raw="componentset/Switch.qml" href="test-componentset-switch-qml.html" type="page" page="Switch.qml Example File">componentset/Switch.qml</link>
+ </para>
+ </item>
+ <item>
+ <para>
+ <link raw="componentset/TabWidget.qml" href="test-componentset-tabwidget-qml.html" type="page" page="TabWidget.qml Example File">componentset/TabWidget.qml</link>
+ </para>
+ </item>
+ <item>
+ <para>
+ <link raw="componentset/componentset.pro" href="test-componentset-componentset-pro.html" type="page" page="componentset.pro Example File">componentset/componentset.pro</link>
+ </para>
+ </item>
+ <item>
+ <para>
+ <link raw="componentset/componentset.qml" href="test-componentset-componentset-qml.html" type="page" page="componentset.qml Example File">componentset/componentset.qml</link>
+ </para>
+ </item>
+ </list>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-progressbar-qml.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-progressbar-qml.webxml
new file mode 100644
index 000000000..6b5d2f8ac
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-progressbar-qml.webxml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="componentset/ProgressBar.qml" href="test-componentset-progressbar-qml.html" title="ProgressBar.qml Example File" fulltitle="ProgressBar.qml Example File" subtitle="componentset/ProgressBar.qml">
+ <description>
+ <code>&lt;@comment&gt;// Copyright (C) 2016 The Qt Company Ltd.&lt;/@comment&gt;
+&lt;@comment&gt;// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause&lt;/@comment&gt;
+
+import QtQuick 1.0
+
+&lt;@comment&gt;/*!
+ \qmltype ProgressBar
+ \inqmlmodule UIComponents
+ \brief A component that shows the progress of an event.
+
+ A ProgressBar shows the linear progress of an event as its \l value.
+ The range is specified using the \l {minimum} and the \l{maximum} values.
+
+ The ProgressBar component is part of the \l {UI Components} module.
+
+ This documentation is part of the \l{componentset}{UIComponents} example.
+*/&lt;/@comment&gt;
+&lt;@type&gt;Item&lt;/@type&gt; {
+ &lt;@name&gt;id&lt;/@name&gt;: &lt;@name&gt;progressbar&lt;/@name&gt;
+
+ &lt;@comment&gt;/*!
+ The minimum value of the ProgressBar range.
+ The \l value must not be less than this value.
+ */&lt;/@comment&gt;
+ property &lt;@type&gt;int&lt;/@type&gt; &lt;@name&gt;minimum&lt;/@name&gt;: &lt;@number&gt;0&lt;/@number&gt;
+
+ &lt;@comment&gt;/*!
+ The maximum value of the ProgressBar range.
+ The \l value must not be more than this value.
+ */&lt;/@comment&gt;
+ property &lt;@type&gt;int&lt;/@type&gt; &lt;@name&gt;maximum&lt;/@name&gt;: &lt;@number&gt;100&lt;/@number&gt;
+
+ &lt;@comment&gt;/*!
+ The value of the progress.
+ */&lt;/@comment&gt;
+ property &lt;@type&gt;int&lt;/@type&gt; &lt;@name&gt;value&lt;/@name&gt;: &lt;@number&gt;0&lt;/@number&gt;
+
+ &lt;@comment&gt;/*!
+ \qmlproperty color ProgressBar::color
+ The color of the ProgressBar's gradient. Must bind to a color type.
+
+ \omit
+ The &amp;quot;\qmlproperty &amp;lt;type&amp;gt; &amp;lt;property name&amp;gt;&amp;quot; is needed because
+ property alias need to have their types manually entered.
+
+ QDoc will not publish the documentation within omit and endomit.
+ \endomit
+
+ \sa secondColor
+ */&lt;/@comment&gt;
+ property &lt;@type&gt;alias&lt;/@type&gt; &lt;@name&gt;color&lt;/@name&gt;: &lt;@name&gt;gradient1&lt;/@name&gt;.&lt;@name&gt;color&lt;/@name&gt;
+
+ &lt;@comment&gt;/*!
+ \qmlproperty color ProgressBar::secondColor
+ The second color of the ProgressBar's gradient.
+ Must bind to a color type.
+
+ \omit
+ The &amp;quot;\qmlproperty &amp;lt;type&amp;gt; &amp;lt;property name&amp;gt;&amp;quot; is needed because
+ property alias need to have their types manually entered.
+
+ QDoc will not publish the documentation within omit and endomit.
+ \endomit
+
+ \sa color
+ */&lt;/@comment&gt;
+ property &lt;@type&gt;alias&lt;/@type&gt; &lt;@name&gt;secondColor&lt;/@name&gt;: &lt;@name&gt;gradient2&lt;/@name&gt;.&lt;@name&gt;color&lt;/@name&gt;
+
+ &lt;@name&gt;width&lt;/@name&gt;: &lt;@number&gt;250&lt;/@number&gt;; &lt;@name&gt;height&lt;/@name&gt;: &lt;@number&gt;23&lt;/@number&gt;
+ &lt;@name&gt;clip&lt;/@name&gt;: &lt;@number&gt;true&lt;/@number&gt;
+
+ &lt;@type&gt;Rectangle&lt;/@type&gt; {
+ &lt;@name&gt;id&lt;/@name&gt;: &lt;@name&gt;highlight&lt;/@name&gt;
+
+ &lt;@comment&gt;/*!
+ An internal documentation comment. The widthDest property is not
+ a public API and therefore will not be exposed.
+ */&lt;/@comment&gt;
+ property &lt;@type&gt;int&lt;/@type&gt; &lt;@name&gt;widthDest&lt;/@name&gt;: ((&lt;@name&gt;progressbar&lt;/@name&gt;.&lt;@name&gt;width&lt;/@name&gt; &lt;@op&gt;*&lt;/@op&gt; (&lt;@name&gt;value&lt;/@name&gt; &lt;@op&gt;-&lt;/@op&gt; &lt;@name&gt;minimum&lt;/@name&gt;)) &lt;@op&gt;/&lt;/@op&gt; (&lt;@name&gt;maximum&lt;/@name&gt; &lt;@op&gt;-&lt;/@op&gt; &lt;@name&gt;minimum&lt;/@name&gt;) &lt;@op&gt;-&lt;/@op&gt; &lt;@number&gt;6&lt;/@number&gt;)
+
+ &lt;@name&gt;width&lt;/@name&gt;: &lt;@name&gt;highlight&lt;/@name&gt;.&lt;@name&gt;widthDest&lt;/@name&gt;
+ Behavior on &lt;@name&gt;width&lt;/@name&gt; { &lt;@type&gt;SmoothedAnimation&lt;/@type&gt; { &lt;@name&gt;velocity&lt;/@name&gt;: &lt;@number&gt;1200&lt;/@number&gt; } }
+
+ &lt;@type&gt;anchors&lt;/@type&gt; { &lt;@name&gt;left&lt;/@name&gt;: &lt;@name&gt;parent&lt;/@name&gt;.&lt;@name&gt;left&lt;/@name&gt;; &lt;@name&gt;top&lt;/@name&gt;: &lt;@name&gt;parent&lt;/@name&gt;.&lt;@name&gt;top&lt;/@name&gt;; &lt;@name&gt;bottom&lt;/@name&gt;: &lt;@name&gt;parent&lt;/@name&gt;.&lt;@name&gt;bottom&lt;/@name&gt;; &lt;@name&gt;margins&lt;/@name&gt;: &lt;@number&gt;3&lt;/@number&gt; }
+ &lt;@name&gt;radius&lt;/@name&gt;: &lt;@number&gt;1&lt;/@number&gt;
+ &lt;@name&gt;gradient&lt;/@name&gt;: &lt;@name&gt;Gradient&lt;/@name&gt; {
+ &lt;@type&gt;GradientStop&lt;/@type&gt; { &lt;@name&gt;id&lt;/@name&gt;: &lt;@name&gt;gradient1&lt;/@name&gt;; &lt;@name&gt;position&lt;/@name&gt;: &lt;@number&gt;0.0&lt;/@number&gt; }
+ &lt;@type&gt;GradientStop&lt;/@type&gt; { &lt;@name&gt;id&lt;/@name&gt;: &lt;@name&gt;gradient2&lt;/@name&gt;; &lt;@name&gt;position&lt;/@name&gt;: &lt;@number&gt;1.0&lt;/@number&gt; }
+ }
+
+ }
+ &lt;@type&gt;Text&lt;/@type&gt; {
+ &lt;@type&gt;anchors&lt;/@type&gt; { &lt;@name&gt;right&lt;/@name&gt;: &lt;@name&gt;highlight&lt;/@name&gt;.&lt;@name&gt;right&lt;/@name&gt;; &lt;@name&gt;rightMargin&lt;/@name&gt;: &lt;@number&gt;6&lt;/@number&gt;; &lt;@name&gt;verticalCenter&lt;/@name&gt;: &lt;@name&gt;parent&lt;/@name&gt;.&lt;@name&gt;verticalCenter&lt;/@name&gt; }
+ &lt;@name&gt;color&lt;/@name&gt;: &lt;@string&gt;&amp;quot;white&amp;quot;&lt;/@string&gt;
+ &lt;@name&gt;font&lt;/@name&gt;.bold: &lt;@number&gt;true&lt;/@number&gt;
+ &lt;@name&gt;text&lt;/@name&gt;: &lt;@name&gt;Math&lt;/@name&gt;.&lt;@name&gt;floor&lt;/@name&gt;((&lt;@name&gt;value&lt;/@name&gt; &lt;@op&gt;-&lt;/@op&gt; &lt;@name&gt;minimum&lt;/@name&gt;) &lt;@op&gt;/&lt;/@op&gt; (&lt;@name&gt;maximum&lt;/@name&gt; &lt;@op&gt;-&lt;/@op&gt; &lt;@name&gt;minimum&lt;/@name&gt;) &lt;@op&gt;*&lt;/@op&gt; &lt;@number&gt;100&lt;/@number&gt;) &lt;@op&gt;+&lt;/@op&gt; &lt;@string&gt;'%'&lt;/@string&gt;
+ }
+}</code>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-switch-qml.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-switch-qml.webxml
new file mode 100644
index 000000000..4e09d9f25
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-switch-qml.webxml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="componentset/Switch.qml" href="test-componentset-switch-qml.html" title="Switch.qml Example File" fulltitle="Switch.qml Example File" subtitle="componentset/Switch.qml">
+ <description>
+ <code>&lt;@comment&gt;// Copyright (C) 2016 The Qt Company Ltd.&lt;/@comment&gt;
+&lt;@comment&gt;// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause&lt;/@comment&gt;
+
+import QtQuick 1.0
+
+&lt;@comment&gt;/*!
+ \qmltype ToggleSwitch
+ \inqmlmodule UIComponents
+ \brief A component that can be turned on or off.
+
+ A toggle switch has two states: an \c on and an \c off state. The \c off
+ state is when the \l on property is set to \c false.
+
+ The ToggleSwitch component is part of the \l {UI Components} module.
+
+ This documentation is part of the \l{componentset}{UIComponents} example.
+
+*/&lt;/@comment&gt;
+&lt;@type&gt;Item&lt;/@type&gt; {
+ &lt;@name&gt;id&lt;/@name&gt;: &lt;@name&gt;toggleswitch&lt;/@name&gt;
+ &lt;@name&gt;width&lt;/@name&gt;: &lt;@name&gt;background&lt;/@name&gt;.&lt;@name&gt;width&lt;/@name&gt;; &lt;@name&gt;height&lt;/@name&gt;: &lt;@name&gt;background&lt;/@name&gt;.&lt;@name&gt;height&lt;/@name&gt;
+
+ &lt;@comment&gt;/*!
+ Indicates the state of the switch. If \c false, then the switch is in
+ the \c off state.
+
+ \omit
+ The \qmlproperty &amp;lt;type&amp;gt; &amp;lt;propertyname&amp;gt; is not necessary as QDoc
+ will associate this property to the ToggleSwitch
+
+ QDoc will not publish the documentation within omit and endomit.
+ \endomit
+ */&lt;/@comment&gt;
+ property &lt;@type&gt;bool&lt;/@type&gt; &lt;@name&gt;on&lt;/@name&gt;: &lt;@number&gt;false&lt;/@number&gt;
+
+ &lt;@comment&gt;/*!
+ A method to toggle the switch. If the switch is \c on, the toggling it
+ will turn it \c off. Toggling a switch in the \c off position will
+ turn it \c on.
+ */&lt;/@comment&gt;
+ &lt;@keyword&gt;function &lt;/@keyword&gt;&lt;@name&gt;toggle&lt;/@name&gt;() {
+ &lt;@keyword&gt;if&lt;/@keyword&gt; (&lt;@name&gt;toggleswitch&lt;/@name&gt;.&lt;@name&gt;state&lt;/@name&gt; &lt;@op&gt;==&lt;/@op&gt; &lt;@string&gt;&amp;quot;on&amp;quot;&lt;/@string&gt;)
+ &lt;@name&gt;toggleswitch&lt;/@name&gt;.&lt;@name&gt;state&lt;/@name&gt; &lt;@op&gt;=&lt;/@op&gt; &lt;@string&gt;&amp;quot;off&amp;quot;&lt;/@string&gt;;
+ &lt;@keyword&gt;else&lt;/@keyword&gt;
+ &lt;@name&gt;toggleswitch&lt;/@name&gt;.&lt;@name&gt;state&lt;/@name&gt; &lt;@op&gt;=&lt;/@op&gt; &lt;@string&gt;&amp;quot;on&amp;quot;&lt;/@string&gt;;
+ }
+
+ &lt;@comment&gt;/*!
+ \internal
+
+ An internal function to synchronize the switch's internals. This
+ function is not for public access. The \internal command will
+ prevent QDoc from publishing this comment in the public API.
+ */&lt;/@comment&gt;
+ &lt;@keyword&gt;function &lt;/@keyword&gt;&lt;@name&gt;releaseSwitch&lt;/@name&gt;() {
+ &lt;@keyword&gt;if&lt;/@keyword&gt; (&lt;@name&gt;knob&lt;/@name&gt;.&lt;@name&gt;x&lt;/@name&gt; &lt;@op&gt;==&lt;/@op&gt; &lt;@number&gt;1&lt;/@number&gt;) {
+ &lt;@keyword&gt;if&lt;/@keyword&gt; (&lt;@name&gt;toggleswitch&lt;/@name&gt;.&lt;@name&gt;state&lt;/@name&gt; &lt;@op&gt;==&lt;/@op&gt; &lt;@string&gt;&amp;quot;off&amp;quot;&lt;/@string&gt;) &lt;@keyword&gt;return&lt;/@keyword&gt;;
+ }
+ &lt;@keyword&gt;if&lt;/@keyword&gt; (&lt;@name&gt;knob&lt;/@name&gt;.&lt;@name&gt;x&lt;/@name&gt; &lt;@op&gt;==&lt;/@op&gt; &lt;@number&gt;78&lt;/@number&gt;) {
+ &lt;@keyword&gt;if&lt;/@keyword&gt; (&lt;@name&gt;toggleswitch&lt;/@name&gt;.&lt;@name&gt;state&lt;/@name&gt; &lt;@op&gt;==&lt;/@op&gt; &lt;@string&gt;&amp;quot;on&amp;quot;&lt;/@string&gt;) &lt;@keyword&gt;return&lt;/@keyword&gt;;
+ }
+ &lt;@name&gt;toggle&lt;/@name&gt;();
+ }
+
+ &lt;@type&gt;Rectangle&lt;/@type&gt; {
+ &lt;@name&gt;id&lt;/@name&gt;: &lt;@name&gt;background&lt;/@name&gt;
+ &lt;@name&gt;width&lt;/@name&gt;: &lt;@number&gt;130&lt;/@number&gt;; &lt;@name&gt;height&lt;/@name&gt;: &lt;@number&gt;48&lt;/@number&gt;
+ &lt;@name&gt;radius&lt;/@name&gt;: &lt;@number&gt;48&lt;/@number&gt;
+ &lt;@name&gt;color&lt;/@name&gt;: &lt;@string&gt;&amp;quot;lightsteelblue&amp;quot;&lt;/@string&gt;
+ &lt;@type&gt;MouseArea&lt;/@type&gt; { &lt;@name&gt;anchors&lt;/@name&gt;.fill: &lt;@name&gt;parent&lt;/@name&gt;; &lt;@name&gt;onClicked&lt;/@name&gt;: &lt;@name&gt;toggle&lt;/@name&gt;() }
+ }
+
+ &lt;@type&gt;Rectangle&lt;/@type&gt; {
+ &lt;@name&gt;id&lt;/@name&gt;: &lt;@name&gt;knob&lt;/@name&gt;
+ &lt;@name&gt;width&lt;/@name&gt;: &lt;@number&gt;48&lt;/@number&gt;; &lt;@name&gt;height&lt;/@name&gt;: &lt;@number&gt;48&lt;/@number&gt;
+ &lt;@name&gt;radius&lt;/@name&gt;: &lt;@name&gt;width&lt;/@name&gt;
+ &lt;@name&gt;color&lt;/@name&gt;: &lt;@string&gt;&amp;quot;lightblue&amp;quot;&lt;/@string&gt;
+
+ &lt;@type&gt;MouseArea&lt;/@type&gt; {
+ &lt;@name&gt;anchors&lt;/@name&gt;.fill: &lt;@name&gt;parent&lt;/@name&gt;
+ &lt;@name&gt;drag&lt;/@name&gt;.target: &lt;@name&gt;knob&lt;/@name&gt;; &lt;@name&gt;drag&lt;/@name&gt;.axis: &lt;@name&gt;Drag&lt;/@name&gt;.&lt;@name&gt;XAxis&lt;/@name&gt;; &lt;@name&gt;drag&lt;/@name&gt;.minimumX: &lt;@number&gt;1&lt;/@number&gt;; &lt;@name&gt;drag&lt;/@name&gt;.maximumX: &lt;@number&gt;78&lt;/@number&gt;
+ &lt;@name&gt;onClicked&lt;/@name&gt;: &lt;@name&gt;toggle&lt;/@name&gt;()
+ &lt;@name&gt;onReleased&lt;/@name&gt;: &lt;@name&gt;releaseSwitch&lt;/@name&gt;()
+ }
+ }
+
+ &lt;@name&gt;states&lt;/@name&gt;: [
+ &lt;@type&gt;State&lt;/@type&gt; {
+ &lt;@name&gt;name&lt;/@name&gt;: &lt;@string&gt;&amp;quot;on&amp;quot;&lt;/@string&gt;
+ &lt;@type&gt;PropertyChanges&lt;/@type&gt; { &lt;@name&gt;target&lt;/@name&gt;: &lt;@name&gt;knob&lt;/@name&gt;; &lt;@name&gt;x&lt;/@name&gt;: &lt;@number&gt;78&lt;/@number&gt; }
+ &lt;@type&gt;PropertyChanges&lt;/@type&gt; { &lt;@name&gt;target&lt;/@name&gt;: &lt;@name&gt;toggleswitch&lt;/@name&gt;; &lt;@name&gt;on&lt;/@name&gt;: &lt;@number&gt;true&lt;/@number&gt; }
+ },
+ &lt;@type&gt;State&lt;/@type&gt; {
+ &lt;@name&gt;name&lt;/@name&gt;: &lt;@string&gt;&amp;quot;off&amp;quot;&lt;/@string&gt;
+ &lt;@type&gt;PropertyChanges&lt;/@type&gt; { &lt;@name&gt;target&lt;/@name&gt;: &lt;@name&gt;knob&lt;/@name&gt;; &lt;@name&gt;x&lt;/@name&gt;: &lt;@number&gt;1&lt;/@number&gt; }
+ &lt;@type&gt;PropertyChanges&lt;/@type&gt; { &lt;@name&gt;target&lt;/@name&gt;: &lt;@name&gt;toggleswitch&lt;/@name&gt;; &lt;@name&gt;on&lt;/@name&gt;: &lt;@number&gt;false&lt;/@number&gt; }
+ }
+ ]
+
+ &lt;@name&gt;transitions&lt;/@name&gt;: &lt;@name&gt;Transition&lt;/@name&gt; {
+ &lt;@type&gt;NumberAnimation&lt;/@type&gt; { &lt;@name&gt;properties&lt;/@name&gt;: &lt;@string&gt;&amp;quot;x&amp;quot;&lt;/@string&gt;; &lt;@name&gt;easing&lt;/@name&gt;.type: &lt;@name&gt;Easing&lt;/@name&gt;.&lt;@name&gt;InOutQuad&lt;/@name&gt;; &lt;@name&gt;duration&lt;/@name&gt;: &lt;@number&gt;200&lt;/@number&gt; }
+ }
+}</code>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-tabwidget-qml.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-tabwidget-qml.webxml
new file mode 100644
index 000000000..6ee3ce5dc
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-componentset-tabwidget-qml.webxml
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="componentset/TabWidget.qml" href="test-componentset-tabwidget-qml.html" title="TabWidget.qml Example File" fulltitle="TabWidget.qml Example File" subtitle="componentset/TabWidget.qml">
+ <description>
+ <code>&lt;@comment&gt;// Copyright (C) 2016 The Qt Company Ltd.&lt;/@comment&gt;
+&lt;@comment&gt;// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause&lt;/@comment&gt;
+
+import QtQuick 1.0
+
+&lt;@comment&gt;/*!
+ \qmltype TabWidget
+ \inqmlmodule UIComponents
+ \brief A widget that places its children as tabs.
+
+ A TabWidget places its children as tabs in a view. Selecting
+ a tab involves selecting the tab at the top.
+
+ The TabWidget component is part of the \l {UI Components} module.
+
+ This documentation is part of the \l{componentset}{UIComponents} example.
+
+ \section1 Adding Tabs
+
+ To add a tab, declare the tab as a child of the TabWidget.
+
+ \code
+ TabWidget {
+ id: tabwidget
+
+ Rectangle {
+ id: tab1
+ color: &amp;quot;red&amp;quot;
+ //... omitted
+ }
+ Rectangle {
+ id: tab2
+ color: &amp;quot;blue&amp;quot;
+ //... omitted
+ }
+
+ }
+ \endcode
+
+*/&lt;/@comment&gt;
+&lt;@type&gt;Item&lt;/@type&gt; {
+ &lt;@name&gt;id&lt;/@name&gt;: &lt;@name&gt;tabWidget&lt;/@name&gt;
+
+ &lt;@comment&gt;/*!
+ \internal
+
+ Setting the default property to stack.children means any child items
+ of the TabWidget are actually added to the 'stack' item's children.
+
+ See the \l{&amp;quot;Property Binding in QML&amp;quot;}
+ documentation for details on default properties.
+
+ This is an implementation detail, not meant for public knowledge. Putting
+ the \internal command at the beginning will cause QDoc to not publish this
+ documentation in the public API page.
+
+ Normally, a property alias needs to have a
+ &amp;quot;\qmlproperty &amp;lt;type&amp;gt; &amp;lt;propertyname&amp;gt;&amp;quot; to assign the alias a type.
+
+ */&lt;/@comment&gt;
+ default property &lt;@type&gt;alias&lt;/@type&gt; &lt;@name&gt;content&lt;/@name&gt;: &lt;@name&gt;stack&lt;/@name&gt;.&lt;@name&gt;children&lt;/@name&gt;
+
+ &lt;@comment&gt;/*!
+ The currently active tab in the TabWidget.
+ */&lt;/@comment&gt;
+ property &lt;@type&gt;int&lt;/@type&gt; &lt;@name&gt;current&lt;/@name&gt;: &lt;@number&gt;0&lt;/@number&gt;
+
+ &lt;@comment&gt;/*!
+ A sample \c{read-only} property.
+ A contrived property to demonstrate QDoc's ability to detect
+ read-only properties.
+
+ The signature is:
+ \code
+ readonly property int sampleReadOnlyProperty: 0
+ \endcode
+
+ Note that the property must be initialized to a value.
+
+ */&lt;/@comment&gt;
+ readonly property &lt;@type&gt;int&lt;/@type&gt; &lt;@name&gt;sampleReadOnlyProperty&lt;/@name&gt;: &lt;@number&gt;0&lt;/@number&gt;
+
+ &lt;@comment&gt;/*!
+ \internal
+
+ This handler is an implementation
+ detail. The \c{\internal} command will prevent QDoc from publishing this
+ documentation on the public API.
+ */&lt;/@comment&gt;
+ &lt;@name&gt;onCurrentChanged&lt;/@name&gt;: &lt;@name&gt;setOpacities&lt;/@name&gt;()
+ &lt;@name&gt;Component&lt;/@name&gt;.onCompleted: &lt;@name&gt;setOpacities&lt;/@name&gt;()
+
+ &lt;@comment&gt;/*!
+ \internal
+
+ An internal function to set the opacity.
+ The \internal command will prevent QDoc from publishing this
+ documentation on the public API.
+ */&lt;/@comment&gt;
+ &lt;@keyword&gt;function &lt;/@keyword&gt;&lt;@name&gt;setOpacities&lt;/@name&gt;() {
+ &lt;@keyword&gt;for&lt;/@keyword&gt; (var i = 0; &lt;@name&gt;i&lt;/@name&gt; &lt;@op&gt;&amp;lt;&lt;/@op&gt; &lt;@name&gt;stack&lt;/@name&gt;.&lt;@name&gt;children&lt;/@name&gt;.&lt;@name&gt;length&lt;/@name&gt;; ++&lt;@name&gt;i&lt;/@name&gt;) {
+ &lt;@name&gt;stack&lt;/@name&gt;.&lt;@name&gt;children&lt;/@name&gt;[&lt;@name&gt;i&lt;/@name&gt;].&lt;@name&gt;opacity&lt;/@name&gt; &lt;@op&gt;=&lt;/@op&gt; (&lt;@name&gt;i&lt;/@name&gt; &lt;@op&gt;==&lt;/@op&gt; &lt;@name&gt;current&lt;/@name&gt; ? &lt;@number&gt;1&lt;/@number&gt; : &lt;@number&gt;0&lt;/@number&gt;)
+ }
+ }
+
+ &lt;@type&gt;Row&lt;/@type&gt; {
+ &lt;@name&gt;id&lt;/@name&gt;: &lt;@name&gt;header&lt;/@name&gt;
+
+ &lt;@type&gt;Repeater&lt;/@type&gt; {
+ &lt;@name&gt;model&lt;/@name&gt;: &lt;@name&gt;stack&lt;/@name&gt;.&lt;@name&gt;children&lt;/@name&gt;.&lt;@name&gt;length&lt;/@name&gt;
+ &lt;@name&gt;delegate&lt;/@name&gt;: &lt;@name&gt;Rectangle&lt;/@name&gt; {
+ &lt;@name&gt;width&lt;/@name&gt;: &lt;@name&gt;tabWidget&lt;/@name&gt;.&lt;@name&gt;width&lt;/@name&gt; &lt;@op&gt;/&lt;/@op&gt; &lt;@name&gt;stack&lt;/@name&gt;.&lt;@name&gt;children&lt;/@name&gt;.&lt;@name&gt;length&lt;/@name&gt;; &lt;@name&gt;height&lt;/@name&gt;: &lt;@number&gt;36&lt;/@number&gt;
+
+ &lt;@type&gt;Rectangle&lt;/@type&gt; {
+ &lt;@name&gt;width&lt;/@name&gt;: &lt;@name&gt;parent&lt;/@name&gt;.&lt;@name&gt;width&lt;/@name&gt;; &lt;@name&gt;height&lt;/@name&gt;: &lt;@number&gt;1&lt;/@number&gt;
+ &lt;@type&gt;anchors&lt;/@type&gt; { &lt;@name&gt;bottom&lt;/@name&gt;: &lt;@name&gt;parent&lt;/@name&gt;.&lt;@name&gt;bottom&lt;/@name&gt;; &lt;@name&gt;bottomMargin&lt;/@name&gt;: &lt;@number&gt;1&lt;/@number&gt; }
+ &lt;@name&gt;color&lt;/@name&gt;: &lt;@string&gt;&amp;quot;#acb2c2&amp;quot;&lt;/@string&gt;
+ }
+ &lt;@type&gt;BorderImage&lt;/@type&gt; {
+ &lt;@type&gt;anchors&lt;/@type&gt; { &lt;@name&gt;fill&lt;/@name&gt;: &lt;@name&gt;parent&lt;/@name&gt;; &lt;@name&gt;leftMargin&lt;/@name&gt;: &lt;@number&gt;2&lt;/@number&gt;; &lt;@name&gt;topMargin&lt;/@name&gt;: &lt;@number&gt;5&lt;/@number&gt;; &lt;@name&gt;rightMargin&lt;/@name&gt;: &lt;@number&gt;1&lt;/@number&gt; }
+ &lt;@type&gt;border&lt;/@type&gt; { &lt;@name&gt;left&lt;/@name&gt;: &lt;@number&gt;7&lt;/@number&gt;; &lt;@name&gt;right&lt;/@name&gt;: &lt;@number&gt;7&lt;/@number&gt; }
+ &lt;@name&gt;source&lt;/@name&gt;: &lt;@string&gt;&amp;quot;tab.png&amp;quot;&lt;/@string&gt;
+ &lt;@name&gt;visible&lt;/@name&gt;: &lt;@name&gt;tabWidget&lt;/@name&gt;.&lt;@name&gt;current&lt;/@name&gt; &lt;@op&gt;==&lt;/@op&gt; &lt;@name&gt;index&lt;/@name&gt;
+ }
+ &lt;@type&gt;Text&lt;/@type&gt; {
+ &lt;@name&gt;horizontalAlignment&lt;/@name&gt;: &lt;@name&gt;Qt&lt;/@name&gt;.&lt;@name&gt;AlignHCenter&lt;/@name&gt;; &lt;@name&gt;verticalAlignment&lt;/@name&gt;: &lt;@name&gt;Qt&lt;/@name&gt;.&lt;@name&gt;AlignVCenter&lt;/@name&gt;
+ &lt;@name&gt;anchors&lt;/@name&gt;.fill: &lt;@name&gt;parent&lt;/@name&gt;
+ &lt;@name&gt;text&lt;/@name&gt;: &lt;@name&gt;stack&lt;/@name&gt;.&lt;@name&gt;children&lt;/@name&gt;[&lt;@name&gt;index&lt;/@name&gt;].&lt;@name&gt;title&lt;/@name&gt;
+ &lt;@name&gt;elide&lt;/@name&gt;: &lt;@name&gt;Text&lt;/@name&gt;.&lt;@name&gt;ElideRight&lt;/@name&gt;
+ &lt;@name&gt;font&lt;/@name&gt;.bold: &lt;@name&gt;tabWidget&lt;/@name&gt;.&lt;@name&gt;current&lt;/@name&gt; &lt;@op&gt;==&lt;/@op&gt; &lt;@name&gt;index&lt;/@name&gt;
+ }
+ &lt;@type&gt;MouseArea&lt;/@type&gt; {
+ &lt;@name&gt;anchors&lt;/@name&gt;.fill: &lt;@name&gt;parent&lt;/@name&gt;
+ &lt;@name&gt;onClicked&lt;/@name&gt;: &lt;@name&gt;tabWidget&lt;/@name&gt;.&lt;@name&gt;current&lt;/@name&gt; &lt;@op&gt;=&lt;/@op&gt; &lt;@name&gt;index&lt;/@name&gt;
+ }
+ }
+ }
+ }
+
+ &lt;@type&gt;Item&lt;/@type&gt; {
+ &lt;@name&gt;id&lt;/@name&gt;: &lt;@name&gt;stack&lt;/@name&gt;
+ &lt;@name&gt;width&lt;/@name&gt;: &lt;@name&gt;tabWidget&lt;/@name&gt;.&lt;@name&gt;width&lt;/@name&gt;
+ &lt;@name&gt;anchors&lt;/@name&gt;.top: &lt;@name&gt;header&lt;/@name&gt;.&lt;@name&gt;bottom&lt;/@name&gt;; &lt;@name&gt;anchors&lt;/@name&gt;.bottom: &lt;@name&gt;tabWidget&lt;/@name&gt;.&lt;@name&gt;bottom&lt;/@name&gt;
+ }
+}</code>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-demos-demo-demo-cpp.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-demos-demo-demo-cpp.webxml
new file mode 100644
index 000000000..fd0268d30
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-demos-demo-demo-cpp.webxml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="demos/demo/demo.cpp" href="test-demos-demo-demo-cpp.html" title="demo.cpp Example File" fulltitle="demo.cpp Example File" subtitle="demos/demo/demo.cpp">
+ <description>
+ <code>&lt;@comment&gt;// Copyright (C) 2023 The Qt Company Ltd.&lt;/@comment&gt;
+&lt;@comment&gt;// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0&lt;/@comment&gt;
+
+&lt;@type&gt;bool&lt;/@type&gt; isOverThousand(&lt;@type&gt;int&lt;/@type&gt; n)
+{
+ &lt;@keyword&gt;if&lt;/@keyword&gt; (n &lt;@op&gt;&amp;gt;&lt;/@op&gt; &lt;@number&gt;1'000&lt;/@number&gt;)
+ &lt;@keyword&gt;return&lt;/@keyword&gt; &lt;@keyword&gt;true&lt;/@keyword&gt;;
+ &lt;@keyword&gt;return&lt;/@keyword&gt; &lt;@keyword&gt;false&lt;/@keyword&gt;;
+}</code>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-demos-demo-demo-pro.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-demos-demo-demo-pro.webxml
new file mode 100644
index 000000000..45f8457e9
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-demos-demo-demo-pro.webxml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="demos/demo/demo.pro" href="test-demos-demo-demo-pro.html" title="demo.pro Example File" fulltitle="demo.pro Example File" subtitle="demos/demo/demo.pro">
+ <description>
+ <code>TEMPLATE = aux
+message(&amp;quot;Nothing to see here.&amp;quot;)</code>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-demos-demo-dontxclude-cmakelists-txt.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-demos-demo-dontxclude-cmakelists-txt.webxml
new file mode 100644
index 000000000..effb3cfb9
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-demos-demo-dontxclude-cmakelists-txt.webxml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="demos/demo/dontxclude/CMakeLists.txt" href="test-demos-demo-dontxclude-cmakelists-txt.html" title="CMakeLists.txt Example File" fulltitle="CMakeLists.txt Example File" subtitle="demos/demo/dontxclude/CMakeLists.txt">
+ <description>
+ <code>cmake_minimum_required(VERSION 3.16)
+project (DONTXCLUDEDIRS_QDOCTEST)</code>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-demos-demo-example.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-demos-demo-example.webxml
new file mode 100644
index 000000000..71472790d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-demos-demo-example.webxml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="demos/demo" href="test-demos-demo-example.html" status="active" location="demo.qdoc" documented="true" subtype="example" title="Demo" fulltitle="Demo" subtitle="">
+ <description>
+ <image href="images/leonardo-da-vinci.png"/>
+ <code> if (n &gt; 1'000)
+ return true;</code>
+ <para>Files:</para>
+ <list type="bullet">
+ <item>
+ <para>
+ <link raw="demos/demo/demo.cpp" href="test-demos-demo-demo-cpp.html" type="page" page="demo.cpp Example File">demos/demo/demo.cpp</link>
+ </para>
+ </item>
+ <item>
+ <para>
+ <link raw="demos/demo/demo.pro" href="test-demos-demo-demo-pro.html" type="page" page="demo.pro Example File">demos/demo/demo.pro</link>
+ </para>
+ </item>
+ <item>
+ <para>
+ <link raw="demos/demo/dontxclude/CMakeLists.txt" href="test-demos-demo-dontxclude-cmakelists-txt.html" type="page" page="CMakeLists.txt Example File">demos/demo/dontxclude/CMakeLists.txt</link>
+ </para>
+ </item>
+ </list>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-demos-hidden-example.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-demos-hidden-example.webxml
new file mode 100644
index 000000000..4f87887ed
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-demos-hidden-example.webxml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="demos/hidden" href="test-demos-hidden-example.html" status="active" location="hidden.qdoc" documented="true" subtype="example" title="Hidden Demo" fulltitle="Hidden Demo" subtitle="" brief="Tagged 'broken', does not appear in examples-manifest.xml">
+ <description>
+ <brief>Tagged 'broken', does not appear in examples-manifest.xml.</brief>
+ <para>Also missing an image, but that's OK as it's broken anyway.</para>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-empty-qmlmodule.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-empty-qmlmodule.webxml
new file mode 100644
index 000000000..5d24b3077
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-empty-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/comprehensiveproject/expected/webxml/test-nover-qmlmodule.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-nover-qmlmodule.webxml
new file mode 100644
index 000000000..5d24b3077
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test-nover-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/comprehensiveproject/expected/webxml/test.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test.index
new file mode 100644
index 000000000..210262454
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test.index
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="A test project for QDoc build artifacts" version="6.2.11" project="Test">
+ <namespace name="" status="active" access="public" module="test">
+ <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="0" since="Test 0.9" meta="macrowithoutparams" signature="QDOCTEST_MACRO"/>
+ <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>
+ <qmlclass name="AbstractParent" qml-module-name="QDoc.Test" fullname="QDoc.Test.AbstractParent" href="qml-qdoc-test-abstractparent.html" status="active" access="public" abstract="true" location="parent.qdoc" since="1.1" documented="true" title="AbstractParent" fulltitle="AbstractParent" subtitle="" brief="Abstract base QML type">
+ <function name="name" fullname="QDoc.Test.AbstractParent.name" href="qml-qdoc-test-abstractparent.html#name-method" status="active" access="public" location="parent.qdoc" documented="true" meta="qmlmethod" type="void"/>
+ <function name="name" fullname="QDoc.Test.AbstractParent.name" href="qml-qdoc-test-abstractparent.html#name-method" status="active" access="public" location="parent.qdoc" documented="true" meta="qmlmethod" type="void">
+ <parameter type="Child" name="child" default=""/>
+ <parameter type="" name="name" default=""/>
+ </function>
+ <function name="rear" fullname="QDoc.Test.AbstractParent.rear" href="qml-qdoc-test-abstractparent.html#rear-method" status="active" access="public" location="parent.qdoc" documented="true" meta="qmlmethod" type="void">
+ <parameter type="Child" name="child" default=""/>
+ <parameter type="var" name="method" default="Strict"/>
+ </function>
+ <qmlproperty name="children" fullname="QDoc.Test.AbstractParent.children" status="active" access="public" location="parent.qdoc" documented="true" type="list&lt;Child&gt;" attached="false" writable="true" brief="Children of the type"/>
+ <qmlproperty name="name" fullname="QDoc.Test.AbstractParent.name" status="active" access="public" location="parent.qdoc" documented="true" type="string" attached="false" writable="true" brief="Name of this parent"/>
+ </qmlclass>
+ <page name="autolinking.html" href="autolinking.html" status="active" location="classlists.qdoc" documented="true" subtype="page" title="Autolinking" fulltitle="Autolinking" subtitle="">
+ <contents name="testqdoc" title="TestQDoc" level="1"/>
+ <contents name="someprop" title="someProp" level="1"/>
+ </page>
+ <page name="cmaketest" href="test-cmaketest-example.html" status="active" location="cmaketest.qdoc" documented="true" subtype="example" title="CMake Example Project" fulltitle="CMake Example Project" subtitle=""/>
+ <qmlclass name="Child" qml-module-name="QDoc.Test" qml-base-type="QDoc.Test::AbstractParent" fullname="QDoc.Test.Child" href="qml-qdoc-test-child.html" status="active" access="public" location="parent.qdoc" since="1.1" documented="true" title="Child" fulltitle="Child" subtitle="" brief="A Child inheriting its parent">
+ <function name="name" fullname="QDoc.Test.Child.name" href="qml-qdoc-test-child.html#name-method" status="active" access="public" location="parent.qdoc" documented="true" meta="qmlmethod" type="void">
+ <parameter type="Child" name="child" default=""/>
+ <parameter type="" name="name" default=""/>
+ </function>
+ <qmlproperty name="name" fullname="QDoc.Test.Child.name" href="qml-qdoc-test-child.html#name-prop" status="active" access="public" location="parent.qdoc" documented="true" type="string" attached="false" writable="true" brief="Name of this child"/>
+ </qmlclass>
+ <page name="classes.html" href="classes.html" status="active" location="unseenclass.qdoc" documented="true" subtype="page" title="Classes" fulltitle="Classes" subtitle=""/>
+ <namespace name="CrossModuleRef" href="crossmoduleref.html" status="active" access="public" location="testcpp.h" since="3.0" documented="true" module="TestCPP" brief="Namespace that has documented functions in multiple modules">
+ <function name="documentMe" fullname="CrossModuleRef::documentMe" href="crossmoduleref.html#documentMe" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void documentMe()"/>
+ </namespace>
+ <page name="demos/demo" href="test-demos-demo-example.html" status="active" location="demo.qdoc" documented="true" subtype="example" title="Demo" fulltitle="Demo" subtitle=""/>
+ <qmlclass name="DocTest" qml-module-name="QDoc.Test" fullname="QDoc.Test.DocTest" href="qml-qdoc-test-doctest.html" status="active" access="public" location="DocTest.qml" since="QDoc.Test 0.9" documented="true" title="DocTest" fulltitle="DocTest" subtitle="" brief="Represents a doc test case">
+ <contents name="introduction" title="Introduction" level="1"/>
+ <function name="completed" fullname="QDoc.Test.DocTest.completed" href="qml-qdoc-test-doctest.html#completed-signal" status="active" access="public" documented="true" meta="qmlsignal"/>
+ <function name="fail" fullname="QDoc.Test.DocTest.fail" href="qml-qdoc-test-doctest.html#fail-method" status="active" access="public" location="DocTest.qml" documented="true" since="QDoc.Test 1.0" meta="qmlmethod">
+ <parameter type="" name="message" default="&quot;oops&quot;"/>
+ </function>
+ <function name="fail_hard" fullname="QDoc.Test.DocTest.fail_hard" href="qml-qdoc-test-doctest.html#fail_hard-method" status="active" access="public" documented="true" meta="qmlmethod">
+ <parameter type="" name="msg" default="&quot;facepalm&quot;"/>
+ <parameter type="" name="option" default="123"/>
+ </function>
+ <function name="foo" fullname="QDoc.Test.DocTest.foo" href="qml-qdoc-test-doctest.html#foo-signal" status="active" access="public" location="DocTest.qml" documented="true" meta="qmlsignal">
+ <parameter type="var" name="bar" default=""/>
+ </function>
+ <function name="itsHappening" fullname="QDoc.Test.DocTest.itsHappening" href="qml-qdoc-test-doctest.html#itsHappening-signal" status="active" access="public" documented="true" meta="qmlsignal">
+ <parameter type="bool" name="really" default=""/>
+ </function>
+ <qmlproperty name="active" fullname="QDoc.Test.DocTest.active" href="qml-qdoc-test-doctest.html#active-prop" status="active" access="public" documented="true" type="bool" attached="false" writable="true"/>
+ <qmlproperty name="name" fullname="QDoc.Test.DocTest.name" href="qml-qdoc-test-doctest.html#name-prop" status="active" access="public" documented="true" type="string" attached="false" writable="true" required="true"/>
+ </qmlclass>
+ <qmlclass name="DocTest" qml-module-name="Test.NoVer" fullname="Test.NoVer.DocTest" href="qml-test-nover-doctest.html" status="active" access="public" location="DocTest.qml" since="1.1" documented="true" title="DocTest" fulltitle="DocTest" subtitle="" brief="Shadows the type name in QDoc.Test module"/>
+ <class name="DontLinkToMe" href="dontlinktome.html" status="ignored" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="Class that does not generate documentation"/>
+ <page name="demos/hidden" href="test-demos-hidden-example.html" status="active" location="hidden.qdoc" documented="true" subtype="example" title="Hidden Demo" fulltitle="Hidden Demo" subtitle="" brief="Tagged 'broken', does not appear in examples-manifest.xml"/>
+ <page name="obsolete-classes.html" href="obsolete-classes.html" status="active" location="classlists.qdoc" documented="true" subtype="page" title="Obsolete Classes" fulltitle="Obsolete Classes" subtitle="">
+ <contents name="classes-with-obsolete-members" title="Classes with obsolete members" level="1"/>
+ <contents name="testqdoc" title="TestQDoc" level="2"/>
+ </page>
+ <qmlclass name="OldType" qml-module-name="QDoc.Test" fullname="QDoc.Test.OldType" href="qml-qdoc-test-oldtype.html" status="deprecated" access="public" since="1.1" documented="true" title="OldType" fulltitle="OldType" subtitle="" brief="Deprecated old type"/>
+ <qmlclass name="ProgressBar" qml-module-name="UIComponents" fullname="UIComponents.ProgressBar" href="qml-uicomponents-progressbar.html" status="active" access="public" location="ProgressBar.qml" documented="true" title="ProgressBar" fulltitle="ProgressBar" subtitle="" brief="A component that shows the progress of an event">
+ <qmlproperty name="color" fullname="UIComponents.ProgressBar.color" href="qml-uicomponents-progressbar.html#color-prop" status="active" access="public" documented="true" type="color" attached="false" writable="true"/>
+ <qmlproperty name="maximum" fullname="UIComponents.ProgressBar.maximum" href="qml-uicomponents-progressbar.html#maximum-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true"/>
+ <qmlproperty name="minimum" fullname="UIComponents.ProgressBar.minimum" href="qml-uicomponents-progressbar.html#minimum-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true"/>
+ <qmlproperty name="secondColor" fullname="UIComponents.ProgressBar.secondColor" href="qml-uicomponents-progressbar.html#secondColor-prop" status="active" access="public" documented="true" type="color" attached="false" writable="true"/>
+ <qmlproperty name="value" fullname="UIComponents.ProgressBar.value" href="qml-uicomponents-progressbar.html#value-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true"/>
+ </qmlclass>
+ <page name="componentset" href="test-componentset-example.html" status="active" location="examples.qdoc" documented="true" subtype="example" title="QML Documentation Example" fulltitle="QML Documentation Example" subtitle="" brief="Example for documenting QML types">
+ <contents name="qml-class" title="QML Class" level="1"/>
+ <contents name="properties-signals-handlers-and-methods" title="Properties, Signals, Handlers, and Methods" level="1"/>
+ <contents name="internal-documentation" title="Internal Documentation" level="2"/>
+ <contents name="qml-types-with-c-implementation" title="QML Types with C++ Implementation" level="1"/>
+ </page>
+ <page name="qmlmodules.html" href="qmlmodules.html" status="active" location="modules.qdoc" documented="true" subtype="page" title="QML Modules" fulltitle="QML Modules" subtitle="">
+ <contents name="qml-types" title="QML types" level="1"/>
+ <contents name="qml-value-types" title="QML value types" level="1"/>
+ </page>
+ <page name="https://wiki.qt.io/QProperty" href="https://wiki.qt.io/QProperty" status="active" location="properties.qdoc" documented="true" subtype="externalpage" title="QProperty" fulltitle="QProperty" subtitle=""/>
+ <class name="SeenClass" href="seenclass.html" status="active" access="public" location="dont.h" since="2.0" documented="true" module="TestCPP" brief="A public but undocumented class"/>
+ <qmlclass name="Switch" qml-module-name="UIComponents" fullname="UIComponents.Switch" href="qml-uicomponents-switch.html" status="active" access="public" location="Switch.qml" documented="true" title="Switch" fulltitle="Switch" subtitle="" brief="A component that can be turned on or off">
+ <function name="toggle" fullname="UIComponents.Switch.toggle" href="qml-uicomponents-switch.html#toggle-method" status="active" access="public" documented="true" meta="qmlmethod"/>
+ <qmlproperty name="on" fullname="UIComponents.Switch.on" href="qml-uicomponents-switch.html#on-prop" status="active" access="public" documented="true" type="bool" attached="false" writable="true"/>
+ </qmlclass>
+ <qmlclass name="TabWidget" qml-module-name="UIComponents" fullname="UIComponents.TabWidget" href="qml-uicomponents-tabwidget.html" status="active" access="public" location="TabWidget.qml" documented="true" title="TabWidget" fulltitle="TabWidget" subtitle="" brief="A widget that places its children as tabs">
+ <contents name="adding-tabs" title="Adding Tabs" level="1"/>
+ <qmlproperty name="current" fullname="UIComponents.TabWidget.current" href="qml-uicomponents-tabwidget.html#current-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true"/>
+ <qmlproperty name="sampleReadOnlyProperty" fullname="UIComponents.TabWidget.sampleReadOnlyProperty" href="qml-uicomponents-tabwidget.html#sampleReadOnlyProperty-prop" status="active" access="public" documented="true" type="int" attached="false" writable="false"/>
+ </qmlclass>
+ <namespace name="TestQDoc" href="testqdoc.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="A namespace">
+ <contents name="usage" title="Usage" level="1"/>
+ <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="0" since="Test 0.9" meta="macrowithoutparams" signature="QDOCTEST_MACRO"/>
+ <class threadsafety="reentrant" name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" since="1.1" documented="true" groups="cpptypes,testgroup" module="TestCPP" brief="A class in a namespace">
+ <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)">
+ <parameter type="bool" name="b" default=""/>
+ <parameter type="const char *" name="s" default=""/>
+ </function>
+ <function name="inlineFunction" fullname="TestQDoc::Test::inlineFunction" href="testqdoc-test.html#inlineFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" brief="An inline function, documented using the \fn QDoc command" signature="void inlineFunction()"/>
+ <function name="methodWithEmDashInItsDocs" fullname="TestQDoc::Test::methodWithEmDashInItsDocs" href="testqdoc-test.html#methodWithEmDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEmDashInItsDocs()"/>
+ <function name="methodWithEnDashInItsDocs" fullname="TestQDoc::Test::methodWithEnDashInItsDocs" href="testqdoc-test.html#methodWithEnDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEnDashInItsDocs()"/>
+ <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=""/>
+ </function>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload" status="active" access="protected" location="testcpp.h" documented="true" meta="plain" type="void" signature="void overload()"/>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload-1" status="active" access="protected" location="testcpp.h" documented="true" since="Test 1.2" meta="plain" overload="true" overload-number="1" type="void" signature="void overload(bool b)">
+ <parameter type="bool" name="b" default=""/>
+ </function>
+ <function name="someFunction" fullname="TestQDoc::Test::someFunction" href="testqdoc-test.html#someFunction" status="active" access="public" location="testcpp.h" documented="true" since="Test 1.0" meta="plain" type="int" signature="int someFunction(int, int v)">
+ <parameter type="int" name="" default=""/>
+ <parameter type="int" name="v" default="0"/>
+ </function>
+ <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" threadsafety="non-reentrant" status="active" access="public" location="testcpp.h" documented="true" since="2.0" meta="plain" const="true" type="void" signature="void someFunctionDefaultArg(int i, bool b) const" groups="testgroup">
+ <parameter type="int" name="i" default=""/>
+ <parameter type="bool" name="b" default="false"/>
+ </function>
+ <function name="virtualFun" fullname="TestQDoc::Test::virtualFun" href="testqdoc-test.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" type="void" signature="void virtualFun()"/>
+ <typedef name="SomeType" fullname="TestQDoc::Test::SomeType" href="testqdoc-test.html#SomeType-typedef" status="active" access="public" location="testcpp.h" documented="true"/>
+ </class>
+ <class name="TestDerived" fullname="TestQDoc::TestDerived" href="testqdoc-testderived.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" bases="TestQDoc::Test" module="TestCPP" brief="A class in a namespace, derived from Test">
+ <function name="bindableProp" fullname="TestQDoc::TestDerived::bindableProp" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" meta="plain" associated-property="bindableProp" type="QBindable&lt;QString&gt;" signature="QBindable&lt;QString&gt; bindableProp()"/>
+ <function name="bindablePropChanged" fullname="TestQDoc::TestDerived::bindablePropChanged" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" meta="signal" associated-property="bindableProp" type="void" signature="void bindablePropChanged()"/>
+ <function name="boolProp" fullname="TestQDoc::TestDerived::boolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="plain" associated-property="boolProp" type="bool" signature="bool boolProp()"/>
+ <function name="boolPropChanged" fullname="TestQDoc::TestDerived::boolPropChanged" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="signal" associated-property="boolProp" type="void" signature="void boolPropChanged()"/>
+ <function name="emitSomething" fullname="TestQDoc::TestDerived::emitSomething" href="testqdoc-testderived.html#emitSomething" status="active" access="public" location="testcpp.h" documented="true" meta="signal" type="void" signature="void emitSomething()"/>
+ <function name="getInt" fullname="TestQDoc::TestDerived::getInt" href="testqdoc-testderived.html#intProp-prop" status="active" access="public" location="testcpp.h" meta="plain" associated-property="intProp" type="int *" signature="int * getInt()"/>
+ <function name="id" fullname="TestQDoc::TestDerived::id" href="testqdoc-testderived.html#id" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" override="true" type="int" signature="int id() override"/>
+ <function name="invokeMe" fullname="TestQDoc::TestDerived::invokeMe" href="testqdoc-testderived.html#invokeMe" status="active" access="public" location="testcpp.h" documented="true" meta="plain" const="true" type="void" brief="Something invokable" signature="void invokeMe() const"/>
+ <function name="name" fullname="TestQDoc::TestDerived::name" href="testqdoc-testderived.html#name-prop" status="active" access="public" location="testcpp.h" meta="plain" const="true" associated-property="name" type="const QString *" signature="const QString * name() const"/>
+ <function name="resetBoolProp" fullname="TestQDoc::TestDerived::resetBoolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="slot" associated-property="boolProp" type="void" signature="void resetBoolProp()"/>
+ <function name="setBindableProp" fullname="TestQDoc::TestDerived::setBindableProp" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" meta="slot" associated-property="bindableProp" type="void" signature="void setBindableProp(const QString &amp;s)">
+ <parameter type="const QString &amp;" name="s" default=""/>
+ </function>
+ <function name="setBoolProp" fullname="TestQDoc::TestDerived::setBoolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="slot" associated-property="boolProp" type="void" signature="void setBoolProp(bool b)">
+ <parameter type="bool" name="b" default=""/>
+ </function>
+ <function name="someProp" fullname="TestQDoc::TestDerived::someProp" href="testqdoc-testderived.html#someProp-prop" status="active" access="public" location="testcpp.h" meta="plain" associated-property="someProp" type="const QString &amp;" signature="const QString &amp; someProp()"/>
+ <function name="someValue" fullname="TestQDoc::TestDerived::someValue" href="testqdoc-testderived.html#someValue" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::TestDerived::NotTypedef" signature="TestQDoc::TestDerived::NotTypedef someValue()"/>
+ <function name="staticObsoleteMember" fullname="TestQDoc::TestDerived::staticObsoleteMember" href="testqdoc-testderived-obsolete.html#staticObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" static="true" type="void" signature="void staticObsoleteMember()"/>
+ <function name="virtualFun" fullname="TestQDoc::TestDerived::virtualFun" href="testqdoc-testderived.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" override="true" type="void" signature="void virtualFun() override"/>
+ <typedef name="DerivedType" fullname="TestQDoc::TestDerived::DerivedType" href="testqdoc-testderived.html#DerivedType-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="Test::SomeType"/>
+ <typedef name="NotTypedef" fullname="TestQDoc::TestDerived::NotTypedef" href="testqdoc-testderived.html#NotTypedef-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="int"/>
+ <property name="bindableProp" fullname="TestQDoc::TestDerived::bindableProp" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" documented="true" bindable="true">
+ <getter name="bindableProp"/>
+ <setter name="setBindableProp"/>
+ <notifier name="bindablePropChanged"/>
+ </property>
+ <property name="boolProp" fullname="TestQDoc::TestDerived::boolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" documented="true">
+ <getter name="boolProp"/>
+ <setter name="setBoolProp"/>
+ <resetter name="resetBoolProp"/>
+ <notifier name="boolPropChanged"/>
+ </property>
+ <property name="intProp" fullname="TestQDoc::TestDerived::intProp" href="testqdoc-testderived.html#intProp-prop" status="active" access="public" location="testcpp.h" documented="true" writable="false">
+ <getter name="getInt"/>
+ </property>
+ <property name="name" fullname="TestQDoc::TestDerived::name" href="testqdoc-testderived.html#name-prop" status="active" access="public" location="testcpp.h" documented="true" writable="false" brief="Name">
+ <getter name="name"/>
+ </property>
+ <property name="someProp" fullname="TestQDoc::TestDerived::someProp" href="testqdoc-testderived.html#someProp-prop" status="active" access="public" location="testcpp.h" documented="true" bindable="true" writable="false">
+ <getter name="someProp"/>
+ </property>
+ </class>
+ </namespace>
+ <qmlclass name="TheType" qml-module-name="TheModule" fullname="TheModule.TheType" href="qml-themodule-thetype.html" status="active" access="public" location="properties.qdoc" documented="true" title="TheType" fulltitle="TheType" subtitle="">
+ <qmlproperty name="name" fullname="TheModule.TheType.name" href="qml-themodule-thetype.html#name-prop" status="active" access="public" location="properties.qdoc" documented="true" type="string" attached="false" writable="false" brief="Read-only status of this property is resolved from Q_PROPERTY"/>
+ </qmlclass>
+ <qmlclass name="Type" qml-module-name="QDoc.Test" fullname="QDoc.Test.Type" href="qml-qdoc-test-type.html" status="active" access="public" since="1.1" documented="true" title="Type" fulltitle="Type" subtitle="" brief="A QML type documented in a .cpp file">
+ <function name="completed" fullname="QDoc.Test.Type.completed" href="qml-qdoc-test-type.html#completed-signal" status="active" access="public" documented="true" meta="qmlsignal">
+ <parameter type="int" name="status" default=""/>
+ </function>
+ <function name="configured" fullname="QDoc.Test.Type.configured" href="qml-qdoc-test-type.html#configured-signal" status="active" access="public" documented="true" meta="qmlsignal"/>
+ <function name="copy" fullname="QDoc.Test.Type.copy" href="qml-qdoc-test-type.html#copy-method" status="active" access="public" documented="true" meta="qmlmethod" type="Type">
+ <parameter type="" name="a" default=""/>
+ </function>
+ <function name="deprecatedMethod" fullname="QDoc.Test.Type.deprecatedMethod" href="qml-qdoc-test-type-obsolete.html#deprecatedMethod-method" status="deprecated" access="public" documented="true" meta="qmlmethod"/>
+ <function name="disable" fullname="QDoc.Test.Type.disable" href="qml-qdoc-test-type.html#disable-method" status="active" access="public" documented="true" meta="qmlmethod"/>
+ <function name="enable" fullname="QDoc.Test.Type.enable" href="qml-qdoc-test-type.html#enable-method" status="active" access="public" documented="true" meta="qmlmethod"/>
+ <function name="futureDeprecated" fullname="QDoc.Test.Type.futureDeprecated" href="qml-qdoc-test-type.html#futureDeprecated-method" status="active" access="public" documented="true" meta="qmlmethod"/>
+ <function name="group.created" fullname="QDoc.Test.Type.group.created" href="qml-qdoc-test-type.html#group.created-signal" status="active" access="public" documented="true" meta="qmlsignal"/>
+ <qmlproperty name="fifth" fullname="QDoc.Test.Type.fifth" href="qml-qdoc-test-type.html#fifth-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true" brief="A group of properties sharing a documentation comment"/>
+ <qmlproperty name="fourth" fullname="QDoc.Test.Type.fourth" href="qml-qdoc-test-type.html#fourth-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true" brief="A group of properties sharing a documentation comment"/>
+ <qmlproperty name="group.first" fullname="QDoc.Test.Type.group.first" href="qml-qdoc-test-type.html#group.first-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true" brief="A property group"/>
+ <qmlproperty name="group.second" fullname="QDoc.Test.Type.group.second" href="qml-qdoc-test-type.html#group.second-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true" brief="A property group"/>
+ <qmlproperty name="group.third" fullname="QDoc.Test.Type.group.third" href="qml-qdoc-test-type.html#group.third-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true" brief="A property group"/>
+ <qmlproperty name="id" fullname="QDoc.Test.Type.id" href="qml-qdoc-test-type.html#id-prop" status="active" access="public" documented="true" type="int" attached="false" writable="false" brief="A read-only property"/>
+ <qmlproperty name="name" fullname="QDoc.Test.Type.name" href="qml-qdoc-test-type.html#name-prop" status="active" access="public" documented="true" type="string" attached="false" writable="true" required="true" brief="Name of the Test"/>
+ <qmlproperty name="type" fullname="QDoc.Test.Type.type" href="qml-qdoc-test-type.html#type-attached-prop" status="active" access="public" documented="true" type="enumeration" attached="true" writable="true"/>
+ <qmlproperty name="group" fullname="QDoc.Test.Type.group" href="qml-qdoc-test-type.html#group-prop" status="active" access="public" documented="true"/>
+ </qmlclass>
+ <qmlclass name="TypeNoVersion" qml-module-name="Test.NoVer" fullname="Test.NoVer.TypeNoVersion" href="qml-test-nover-typenoversion.html" status="active" access="public" since="1.1" documented="true" title="TypeNoVersion" fulltitle="TypeNoVersion" subtitle="" brief="Another QML type documented in a .cpp file"/>
+ <class name="UnseenClass" href="unseenclass.html" status="ignored" access="public" location="dont.h" since="2.0" documented="true" module="TestCPP" brief="A public but undocumented class"/>
+ <qmlclass name="YetAnotherChild" qml-module-name="QDoc.Test" qml-base-type="QDoc.Test::InternParent" fullname="QDoc.Test.YetAnotherChild" href="qml-qdoc-test-yetanotherchild.html" status="active" access="public" location="parent.qdoc" since="1.1" documented="true" title="YetAnotherChild" fulltitle="YetAnotherChild" subtitle="" brief="A type inheriting from internal abstract parent"/>
+ <qmlvaluetype name="int" qml-module-name="QDoc.Test" fullname="QDoc.Test.int" href="qml-int.html" status="active" access="public" location="parent.qdoc" since="1.1" documented="true" title="int" fulltitle="int" subtitle="" brief="An integer value type">
+ <function name="abs" fullname="QDoc.Test.int.abs" href="qml-int.html#abs-method" status="active" access="public" location="parent.qdoc" documented="true" meta="qmlmethod" type="int"/>
+ </qmlvaluetype>
+ <page name="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" status="active" location="classlists.qdoc" documented="true" subtype="externalpage" title="reentrant" fulltitle="reentrant" subtitle=""/>
+ <group name="cpptypes" href="cpptypes.html" status="active" location="classlists.qdoc" documented="true" seen="true" title="Test C++ Types"/>
+ <group name="testgroup" href="testgroup.html" status="internal" seen="false" title=""/>
+ <module name="TestCPP" href="testcpp-module.html" status="active" since="2.0" documented="true" seen="true" title="QDoc Test C++ Classes" brief="A test module page">
+ <contents name="linking-to-function-like-things" title="Linking to function-like things" level="1"/>
+ <contents name="section" title="section()" level="2"/>
+ </module>
+ <qmlmodule name="QDoc.Test" qml-module-name="QDoc.Test" qml-module-version="1.1" href="qdoc-test-qmlmodule.html" status="preliminary" since="1.1" documented="true" seen="true" title="QDoc.Test QML Module" brief="QML Types for the Test module"/>
+ <qmlmodule name="Test.Empty" qml-module-name="Test.Empty" qml-module-version="1.0" href="test-empty-qmlmodule.html" status="active" documented="true" seen="true" title="No QML Types Here" brief="A QML module with no member types"/>
+ <qmlmodule name="Test.NoVer" qml-module-name="Test.NoVer" href="test-nover-qmlmodule.html" status="active" since="1.1" documented="true" seen="true" title="Versionless QML Module" brief="QML Types for the Test module without version"/>
+ <qmlmodule name="TheModule" qml-module-name="TheModule" href="themodule-qmlmodule.html" status="active" location="properties.qdoc" documented="true" seen="true" title=""/>
+ <qmlmodule name="UIComponents" qml-module-name="UIComponents" qml-module-version="1.0" href="uicomponents-qmlmodule.html" status="active" location="examples.qdoc" documented="true" seen="true" title="UI Components" brief="Basic set of UI components"/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testcpp-module.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testcpp-module.webxml
new file mode 100644
index 000000000..5d24b3077
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testcpp-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/comprehensiveproject/expected/webxml/testqdoc-test.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testqdoc-test.webxml
new file mode 100644
index 000000000..d83642651
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testqdoc-test.webxml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class threadsafety="reentrant" name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" since="1.1" documented="true" groups="cpptypes,testgroup" module="TestCPP" brief="A class in a namespace">
+ <description>
+ <brief>A class in a namespace.</brief>
+ </description>
+ <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=""/>
+ <description>
+ <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>
+ </description>
+ </function>
+ <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()">
+ <description>
+ <para>Use <link raw="someFunction()" href="testqdoc-test.html#someFunction" type="function">someFunction()</link> instead.</para>
+ </description>
+ </function>
+ <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)">
+ <parameter type="bool" name="b" default=""/>
+ <parameter type="const char *" name="s" default=""/>
+ <description>
+ <para>Returns a pointer to a function that takes a boolean. Uses <argument>b</argument> and <argument>s</argument>.</para>
+ </description>
+ </function>
+ <function name="inlineFunction" fullname="TestQDoc::Test::inlineFunction" href="testqdoc-test.html#inlineFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" brief="An inline function, documented using the \fn QDoc command" signature="void inlineFunction()">
+ <description>
+ <brief>An inline function, documented using the \fn QDoc command.</brief>
+ </description>
+ </function>
+ <function name="methodWithEmDashInItsDocs" fullname="TestQDoc::Test::methodWithEmDashInItsDocs" href="testqdoc-test.html#methodWithEmDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEmDashInItsDocs()">
+ <description>
+ <para>This method has em dashes in its documentation—as you'll find represented by <teletype type="highlighted">---</teletype> in the sources—here and there. The important bit to note is that when passed e.g. to the \c command, the three hyphens are processed as input to the command and not replaced by an em dash.</para>
+ <para>-----------------------------------------------------------------------</para>
+ <para>People can still add a bunch of dashes, though, without QDoc replacing them all with a series of em dashes.</para>
+ <para>—You can also start a new paragraph with an em dash, if you want to.</para>
+ <see-also>
+ <link raw="methodWithEnDashInItsDocs" href="testqdoc-test.html#methodWithEnDashInItsDocs" type="function">methodWithEnDashInItsDocs</link>
+ </see-also>
+ </description>
+ </function>
+ <function name="methodWithEnDashInItsDocs" fullname="TestQDoc::Test::methodWithEnDashInItsDocs" href="testqdoc-test.html#methodWithEnDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEnDashInItsDocs()">
+ <description>
+ <para>This method has en dashes in its documentation – as you'll find represented by <teletype type="highlighted">--</teletype> in the sources – here and there. The important bit to note is that when passed e.g. to the \c command, the two hyphens are processed as input to the command and not replaced by an en dash. This also applies to code blocks, where otherwise, the decrement operator would get completely borked:</para>
+ <code>for (int i = 42; i &gt; 0; --i)
+ // Do something cool during countdown.</code>
+ <para>...as it would be silly if this would output –i instead of <teletype type="highlighted">--i</teletype>.</para>
+ <para>-----------------------------------------------------------------------</para>
+ <para>It still allows people to add a bunch of dashes, though, without replacing them all with a series of en dashes. Of course, they might want to use the \hr command instead, like this:</para>
+ <para>– You can also start a new paragraph with an en dash, if you want to.</para>
+ <see-also>methodWithEnDashInItsDocs</see-also>
+ </description>
+ </function>
+ <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()">
+ <description>
+ <para>Use <link raw="someFunction()" href="testqdoc-test.html#someFunction" type="function">someFunction()</link> instead.</para>
+ </description>
+ </function>
+ <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++()">
+ <description/>
+ </function>
+ <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=""/>
+ <description>
+ <para>Returns true if <argument>lhs</argument> and <argument>rhs</argument> are equal.</para>
+ </description>
+ </function>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload" status="active" access="protected" location="testcpp.h" documented="true" meta="plain" type="void" signature="void overload()">
+ <description/>
+ </function>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload-1" status="active" access="protected" location="testcpp.h" documented="true" since="Test 1.2" meta="plain" overload="true" overload-number="1" type="void" signature="void overload(bool b)">
+ <parameter type="bool" name="b" default=""/>
+ <description/>
+ </function>
+ <function name="someFunction" fullname="TestQDoc::Test::someFunction" href="testqdoc-test.html#someFunction" status="active" access="public" location="testcpp.h" documented="true" since="Test 1.0" meta="plain" type="int" signature="int someFunction(int, int v)">
+ <parameter type="int" name="" default=""/>
+ <parameter type="int" name="v" default="0"/>
+ <description>
+ <para>Function that takes a parameter <argument>v</argument>. Also returns the value of <argument>v</argument>.</para>
+ </description>
+ </function>
+ <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" threadsafety="non-reentrant" status="active" access="public" location="testcpp.h" documented="true" since="2.0" meta="plain" const="true" type="void" signature="void someFunctionDefaultArg(int i, bool b) const" groups="testgroup">
+ <parameter type="int" name="i" default=""/>
+ <parameter type="bool" name="b" default="false"/>
+ <description>
+ <para>Function that takes a parameter <argument>i</argument> and <argument>b</argument>.</para>
+ </description>
+ </function>
+ <function name="virtualFun" fullname="TestQDoc::Test::virtualFun" href="testqdoc-test.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" type="void" signature="void virtualFun()">
+ <description>
+ <para>Function that must be reimplemented.</para>
+ </description>
+ </function>
+ <typedef name="SomeType" fullname="TestQDoc::Test::SomeType" href="testqdoc-test.html#SomeType-typedef" status="active" access="public" location="testcpp.h" documented="true">
+ <description>
+ <brief>A typedef.</brief>
+ </description>
+ </typedef>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testqdoc-testderived.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testqdoc-testderived.webxml
new file mode 100644
index 000000000..197cacd1d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testqdoc-testderived.webxml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="TestDerived" fullname="TestQDoc::TestDerived" href="testqdoc-testderived.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" bases="TestQDoc::Test" module="TestCPP" brief="A class in a namespace, derived from Test">
+ <description>
+ <brief>A class in a namespace, derived from <link raw="Test" href="testqdoc-test.html" type="class">Test</link>.</brief>
+ </description>
+ <function name="bindableProp" fullname="TestQDoc::TestDerived::bindableProp" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" meta="plain" associated-property="bindableProp" type="QBindable&lt;QString&gt;" signature="QBindable&lt;QString&gt; bindableProp()">
+ <description>
+ <see-also>setBindableProp()</see-also>
+ </description>
+ </function>
+ <function name="bindablePropChanged" fullname="TestQDoc::TestDerived::bindablePropChanged" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" meta="signal" associated-property="bindableProp" type="void" signature="void bindablePropChanged()">
+ <description/>
+ </function>
+ <function name="boolProp" fullname="TestQDoc::TestDerived::boolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="plain" associated-property="boolProp" type="bool" signature="bool boolProp()">
+ <description>
+ <see-also>setBoolProp()</see-also>
+ </description>
+ </function>
+ <function name="boolPropChanged" fullname="TestQDoc::TestDerived::boolPropChanged" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="signal" associated-property="boolProp" type="void" signature="void boolPropChanged()">
+ <description/>
+ </function>
+ <function name="emitSomething" fullname="TestQDoc::TestDerived::emitSomething" href="testqdoc-testderived.html#emitSomething" status="active" access="public" location="testcpp.h" documented="true" meta="signal" type="void" signature="void emitSomething()">
+ <description>
+ <para>Emitted when things happen.</para>
+ </description>
+ </function>
+ <function name="getInt" fullname="TestQDoc::TestDerived::getInt" href="testqdoc-testderived.html#intProp-prop" status="active" access="public" location="testcpp.h" meta="plain" associated-property="intProp" type="int *" signature="int * getInt()">
+ <description/>
+ </function>
+ <function name="id" fullname="TestQDoc::TestDerived::id" href="testqdoc-testderived.html#id" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" override="true" type="int" signature="int id() override">
+ <description/>
+ </function>
+ <function name="invokeMe" fullname="TestQDoc::TestDerived::invokeMe" href="testqdoc-testderived.html#invokeMe" status="active" access="public" location="testcpp.h" documented="true" meta="plain" const="true" type="void" brief="Something invokable" signature="void invokeMe() const">
+ <description>
+ <brief>Something invokable.</brief>
+ </description>
+ </function>
+ <function name="name" fullname="TestQDoc::TestDerived::name" href="testqdoc-testderived.html#name-prop" status="active" access="public" location="testcpp.h" meta="plain" const="true" associated-property="name" type="const QString *" signature="const QString * name() const">
+ <description/>
+ </function>
+ <function name="resetBoolProp" fullname="TestQDoc::TestDerived::resetBoolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="slot" associated-property="boolProp" type="void" signature="void resetBoolProp()">
+ <description/>
+ </function>
+ <function name="setBindableProp" fullname="TestQDoc::TestDerived::setBindableProp" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" meta="slot" associated-property="bindableProp" type="void" signature="void setBindableProp(const QString &amp;s)">
+ <parameter type="const QString &amp;" name="s" default=""/>
+ <description>
+ <see-also>bindableProp()</see-also>
+ </description>
+ </function>
+ <function name="setBoolProp" fullname="TestQDoc::TestDerived::setBoolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="slot" associated-property="boolProp" type="void" signature="void setBoolProp(bool b)">
+ <parameter type="bool" name="b" default=""/>
+ <description>
+ <see-also>boolProp()</see-also>
+ </description>
+ </function>
+ <function name="someProp" fullname="TestQDoc::TestDerived::someProp" href="testqdoc-testderived.html#someProp-prop" status="active" access="public" location="testcpp.h" meta="plain" associated-property="someProp" type="const QString &amp;" signature="const QString &amp; someProp()">
+ <description/>
+ </function>
+ <function name="someValue" fullname="TestQDoc::TestDerived::someValue" href="testqdoc-testderived.html#someValue" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::TestDerived::NotTypedef" signature="TestQDoc::TestDerived::NotTypedef someValue()">
+ <description>
+ <para>Returns a value using an aliases type.</para>
+ </description>
+ </function>
+ <function name="staticObsoleteMember" fullname="TestQDoc::TestDerived::staticObsoleteMember" href="testqdoc-testderived-obsolete.html#staticObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" static="true" type="void" signature="void staticObsoleteMember()">
+ <description>
+ <para>Static obsolete method.</para>
+ </description>
+ </function>
+ <function name="virtualFun" fullname="TestQDoc::TestDerived::virtualFun" href="testqdoc-testderived.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" override="true" type="void" signature="void virtualFun() override">
+ <description/>
+ </function>
+ <typedef name="DerivedType" fullname="TestQDoc::TestDerived::DerivedType" href="testqdoc-testderived.html#DerivedType-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="Test::SomeType">
+ <description>
+ <para>An aliased typedef.</para>
+ </description>
+ </typedef>
+ <typedef name="NotTypedef" fullname="TestQDoc::TestDerived::NotTypedef" href="testqdoc-testderived.html#NotTypedef-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="int">
+ <description>
+ <para>I'm an alias, not a typedef.</para>
+ </description>
+ </typedef>
+ <property name="bindableProp" fullname="TestQDoc::TestDerived::bindableProp" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" documented="true" bindable="true">
+ <getter name="bindableProp"/>
+ <setter name="setBindableProp"/>
+ <notifier name="bindablePropChanged"/>
+ <description>
+ <para>Some property.</para>
+ <see-also>
+ <link raw="someProp" href="testqdoc-testderived.html#someProp-prop" type="function">someProp</link>
+ </see-also>
+ </description>
+ </property>
+ <property name="boolProp" fullname="TestQDoc::TestDerived::boolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" documented="true">
+ <getter name="boolProp"/>
+ <setter name="setBoolProp"/>
+ <resetter name="resetBoolProp"/>
+ <notifier name="boolPropChanged"/>
+ <description>
+ <para>A boolean property.</para>
+ </description>
+ </property>
+ <property name="intProp" fullname="TestQDoc::TestDerived::intProp" href="testqdoc-testderived.html#intProp-prop" status="active" access="public" location="testcpp.h" documented="true" writable="false">
+ <getter name="getInt"/>
+ <description>
+ <para>An integer property.</para>
+ </description>
+ </property>
+ <property name="name" fullname="TestQDoc::TestDerived::name" href="testqdoc-testderived.html#name-prop" status="active" access="public" location="testcpp.h" documented="true" writable="false" brief="Name">
+ <getter name="name"/>
+ <description>
+ <brief>This property holds a name..</brief>
+ </description>
+ </property>
+ <property name="someProp" fullname="TestQDoc::TestDerived::someProp" href="testqdoc-testderived.html#someProp-prop" status="active" access="public" location="testcpp.h" documented="true" bindable="true" writable="false">
+ <getter name="someProp"/>
+ <description>
+ <para>Another property.</para>
+ </description>
+ </property>
+ </class>
+ </document>
+</WebXML>
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
new file mode 100644
index 000000000..ba3a26373
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testqdoc.webxml
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <namespace name="TestQDoc" href="testqdoc.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="A namespace">
+ <contents name="usage" title="Usage" level="1"/>
+ <description>
+ <brief>A namespace.</brief>
+ <section id="usage">
+ <heading level="1">Usage</heading>
+ <para>This namespace is for testing QDoc output.</para>
+ </section>
+ </description>
+ <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="0" since="Test 0.9" meta="macrowithoutparams" signature="QDOCTEST_MACRO">
+ <description/>
+ </function>
+ <class threadsafety="reentrant" name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" since="1.1" documented="true" groups="cpptypes,testgroup" module="TestCPP" brief="A class in a namespace">
+ <description>
+ <brief>A class in a namespace.</brief>
+ </description>
+ <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=""/>
+ <description>
+ <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>
+ </description>
+ </function>
+ <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()">
+ <description>
+ <para>Use <link raw="someFunction()" href="testqdoc-test.html#someFunction" type="function">someFunction()</link> instead.</para>
+ </description>
+ </function>
+ <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)">
+ <parameter type="bool" name="b" default=""/>
+ <parameter type="const char *" name="s" default=""/>
+ <description>
+ <para>Returns a pointer to a function that takes a boolean. Uses <argument>b</argument> and <argument>s</argument>.</para>
+ </description>
+ </function>
+ <function name="inlineFunction" fullname="TestQDoc::Test::inlineFunction" href="testqdoc-test.html#inlineFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" brief="An inline function, documented using the \fn QDoc command" signature="void inlineFunction()">
+ <description>
+ <brief>An inline function, documented using the \fn QDoc command.</brief>
+ </description>
+ </function>
+ <function name="methodWithEmDashInItsDocs" fullname="TestQDoc::Test::methodWithEmDashInItsDocs" href="testqdoc-test.html#methodWithEmDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEmDashInItsDocs()">
+ <description>
+ <para>This method has em dashes in its documentation—as you'll find represented by <teletype type="highlighted">---</teletype> in the sources—here and there. The important bit to note is that when passed e.g. to the \c command, the three hyphens are processed as input to the command and not replaced by an em dash.</para>
+ <para>-----------------------------------------------------------------------</para>
+ <para>People can still add a bunch of dashes, though, without QDoc replacing them all with a series of em dashes.</para>
+ <para>—You can also start a new paragraph with an em dash, if you want to.</para>
+ <see-also>
+ <link raw="methodWithEnDashInItsDocs" href="testqdoc-test.html#methodWithEnDashInItsDocs" type="function">methodWithEnDashInItsDocs</link>
+ </see-also>
+ </description>
+ </function>
+ <function name="methodWithEnDashInItsDocs" fullname="TestQDoc::Test::methodWithEnDashInItsDocs" href="testqdoc-test.html#methodWithEnDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEnDashInItsDocs()">
+ <description>
+ <para>This method has en dashes in its documentation – as you'll find represented by <teletype type="highlighted">--</teletype> in the sources – here and there. The important bit to note is that when passed e.g. to the \c command, the two hyphens are processed as input to the command and not replaced by an en dash. This also applies to code blocks, where otherwise, the decrement operator would get completely borked:</para>
+ <code>for (int i = 42; i &gt; 0; --i)
+ // Do something cool during countdown.</code>
+ <para>...as it would be silly if this would output –i instead of <teletype type="highlighted">--i</teletype>.</para>
+ <para>-----------------------------------------------------------------------</para>
+ <para>It still allows people to add a bunch of dashes, though, without replacing them all with a series of en dashes. Of course, they might want to use the \hr command instead, like this:</para>
+ <para>– You can also start a new paragraph with an en dash, if you want to.</para>
+ <see-also>methodWithEnDashInItsDocs</see-also>
+ </description>
+ </function>
+ <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()">
+ <description>
+ <para>Use <link raw="someFunction()" href="testqdoc-test.html#someFunction" type="function">someFunction()</link> instead.</para>
+ </description>
+ </function>
+ <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++()">
+ <description/>
+ </function>
+ <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=""/>
+ <description>
+ <para>Returns true if <argument>lhs</argument> and <argument>rhs</argument> are equal.</para>
+ </description>
+ </function>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload" status="active" access="protected" location="testcpp.h" documented="true" meta="plain" type="void" signature="void overload()">
+ <description/>
+ </function>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload-1" status="active" access="protected" location="testcpp.h" documented="true" since="Test 1.2" meta="plain" overload="true" overload-number="1" type="void" signature="void overload(bool b)">
+ <parameter type="bool" name="b" default=""/>
+ <description/>
+ </function>
+ <function name="someFunction" fullname="TestQDoc::Test::someFunction" href="testqdoc-test.html#someFunction" status="active" access="public" location="testcpp.h" documented="true" since="Test 1.0" meta="plain" type="int" signature="int someFunction(int, int v)">
+ <parameter type="int" name="" default=""/>
+ <parameter type="int" name="v" default="0"/>
+ <description>
+ <para>Function that takes a parameter <argument>v</argument>. Also returns the value of <argument>v</argument>.</para>
+ </description>
+ </function>
+ <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" threadsafety="non-reentrant" status="active" access="public" location="testcpp.h" documented="true" since="2.0" meta="plain" const="true" type="void" signature="void someFunctionDefaultArg(int i, bool b) const" groups="testgroup">
+ <parameter type="int" name="i" default=""/>
+ <parameter type="bool" name="b" default="false"/>
+ <description>
+ <para>Function that takes a parameter <argument>i</argument> and <argument>b</argument>.</para>
+ </description>
+ </function>
+ <function name="virtualFun" fullname="TestQDoc::Test::virtualFun" href="testqdoc-test.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" type="void" signature="void virtualFun()">
+ <description>
+ <para>Function that must be reimplemented.</para>
+ </description>
+ </function>
+ <typedef name="SomeType" fullname="TestQDoc::Test::SomeType" href="testqdoc-test.html#SomeType-typedef" status="active" access="public" location="testcpp.h" documented="true">
+ <description>
+ <brief>A typedef.</brief>
+ </description>
+ </typedef>
+ </class>
+ <class name="TestDerived" fullname="TestQDoc::TestDerived" href="testqdoc-testderived.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" bases="TestQDoc::Test" module="TestCPP" brief="A class in a namespace, derived from Test">
+ <description>
+ <brief>A class in a namespace, derived from <link raw="Test" href="testqdoc-test.html" type="class">Test</link>.</brief>
+ </description>
+ <function name="bindableProp" fullname="TestQDoc::TestDerived::bindableProp" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" meta="plain" associated-property="bindableProp" type="QBindable&lt;QString&gt;" signature="QBindable&lt;QString&gt; bindableProp()">
+ <description>
+ <see-also>setBindableProp()</see-also>
+ </description>
+ </function>
+ <function name="bindablePropChanged" fullname="TestQDoc::TestDerived::bindablePropChanged" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" meta="signal" associated-property="bindableProp" type="void" signature="void bindablePropChanged()">
+ <description/>
+ </function>
+ <function name="boolProp" fullname="TestQDoc::TestDerived::boolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="plain" associated-property="boolProp" type="bool" signature="bool boolProp()">
+ <description>
+ <see-also>setBoolProp()</see-also>
+ </description>
+ </function>
+ <function name="boolPropChanged" fullname="TestQDoc::TestDerived::boolPropChanged" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="signal" associated-property="boolProp" type="void" signature="void boolPropChanged()">
+ <description/>
+ </function>
+ <function name="emitSomething" fullname="TestQDoc::TestDerived::emitSomething" href="testqdoc-testderived.html#emitSomething" status="active" access="public" location="testcpp.h" documented="true" meta="signal" type="void" signature="void emitSomething()">
+ <description>
+ <para>Emitted when things happen.</para>
+ </description>
+ </function>
+ <function name="getInt" fullname="TestQDoc::TestDerived::getInt" href="testqdoc-testderived.html#intProp-prop" status="active" access="public" location="testcpp.h" meta="plain" associated-property="intProp" type="int *" signature="int * getInt()">
+ <description/>
+ </function>
+ <function name="id" fullname="TestQDoc::TestDerived::id" href="testqdoc-testderived.html#id" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" override="true" type="int" signature="int id() override">
+ <description/>
+ </function>
+ <function name="invokeMe" fullname="TestQDoc::TestDerived::invokeMe" href="testqdoc-testderived.html#invokeMe" status="active" access="public" location="testcpp.h" documented="true" meta="plain" const="true" type="void" brief="Something invokable" signature="void invokeMe() const">
+ <description>
+ <brief>Something invokable.</brief>
+ </description>
+ </function>
+ <function name="name" fullname="TestQDoc::TestDerived::name" href="testqdoc-testderived.html#name-prop" status="active" access="public" location="testcpp.h" meta="plain" const="true" associated-property="name" type="const QString *" signature="const QString * name() const">
+ <description/>
+ </function>
+ <function name="resetBoolProp" fullname="TestQDoc::TestDerived::resetBoolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="slot" associated-property="boolProp" type="void" signature="void resetBoolProp()">
+ <description/>
+ </function>
+ <function name="setBindableProp" fullname="TestQDoc::TestDerived::setBindableProp" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" meta="slot" associated-property="bindableProp" type="void" signature="void setBindableProp(const QString &amp;s)">
+ <parameter type="const QString &amp;" name="s" default=""/>
+ <description>
+ <see-also>bindableProp()</see-also>
+ </description>
+ </function>
+ <function name="setBoolProp" fullname="TestQDoc::TestDerived::setBoolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="slot" associated-property="boolProp" type="void" signature="void setBoolProp(bool b)">
+ <parameter type="bool" name="b" default=""/>
+ <description>
+ <see-also>boolProp()</see-also>
+ </description>
+ </function>
+ <function name="someProp" fullname="TestQDoc::TestDerived::someProp" href="testqdoc-testderived.html#someProp-prop" status="active" access="public" location="testcpp.h" meta="plain" associated-property="someProp" type="const QString &amp;" signature="const QString &amp; someProp()">
+ <description/>
+ </function>
+ <function name="someValue" fullname="TestQDoc::TestDerived::someValue" href="testqdoc-testderived.html#someValue" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::TestDerived::NotTypedef" signature="TestQDoc::TestDerived::NotTypedef someValue()">
+ <description>
+ <para>Returns a value using an aliases type.</para>
+ </description>
+ </function>
+ <function name="staticObsoleteMember" fullname="TestQDoc::TestDerived::staticObsoleteMember" href="testqdoc-testderived-obsolete.html#staticObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" static="true" type="void" signature="void staticObsoleteMember()">
+ <description>
+ <para>Static obsolete method.</para>
+ </description>
+ </function>
+ <function name="virtualFun" fullname="TestQDoc::TestDerived::virtualFun" href="testqdoc-testderived.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" override="true" type="void" signature="void virtualFun() override">
+ <description/>
+ </function>
+ <typedef name="DerivedType" fullname="TestQDoc::TestDerived::DerivedType" href="testqdoc-testderived.html#DerivedType-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="Test::SomeType">
+ <description>
+ <para>An aliased typedef.</para>
+ </description>
+ </typedef>
+ <typedef name="NotTypedef" fullname="TestQDoc::TestDerived::NotTypedef" href="testqdoc-testderived.html#NotTypedef-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="int">
+ <description>
+ <para>I'm an alias, not a typedef.</para>
+ </description>
+ </typedef>
+ <property name="bindableProp" fullname="TestQDoc::TestDerived::bindableProp" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" documented="true" bindable="true">
+ <getter name="bindableProp"/>
+ <setter name="setBindableProp"/>
+ <notifier name="bindablePropChanged"/>
+ <description>
+ <para>Some property.</para>
+ <see-also>
+ <link raw="someProp" href="testqdoc-testderived.html#someProp-prop" type="function">someProp</link>
+ </see-also>
+ </description>
+ </property>
+ <property name="boolProp" fullname="TestQDoc::TestDerived::boolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" documented="true">
+ <getter name="boolProp"/>
+ <setter name="setBoolProp"/>
+ <resetter name="resetBoolProp"/>
+ <notifier name="boolPropChanged"/>
+ <description>
+ <para>A boolean property.</para>
+ </description>
+ </property>
+ <property name="intProp" fullname="TestQDoc::TestDerived::intProp" href="testqdoc-testderived.html#intProp-prop" status="active" access="public" location="testcpp.h" documented="true" writable="false">
+ <getter name="getInt"/>
+ <description>
+ <para>An integer property.</para>
+ </description>
+ </property>
+ <property name="name" fullname="TestQDoc::TestDerived::name" href="testqdoc-testderived.html#name-prop" status="active" access="public" location="testcpp.h" documented="true" writable="false" brief="Name">
+ <getter name="name"/>
+ <description>
+ <brief>This property holds a name..</brief>
+ </description>
+ </property>
+ <property name="someProp" fullname="TestQDoc::TestDerived::someProp" href="testqdoc-testderived.html#someProp-prop" status="active" access="public" location="testcpp.h" documented="true" bindable="true" writable="false">
+ <getter name="someProp"/>
+ <description>
+ <para>Another property.</para>
+ </description>
+ </property>
+ </class>
+ </namespace>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testtagfile.tags b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testtagfile.tags
new file mode 100644
index 000000000..f68dffed6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testtagfile.tags
@@ -0,0 +1,500 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tagfile>
+ <compound kind="class">
+ <name>QDoc.Test.AbstractParent</name>
+ <filename>qml-qdoc-test-abstractparent.html</filename>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>name</name>
+ <anchorfile>qml-qdoc-test-abstractparent.html</anchorfile>
+ <anchor>name-method</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>name</name>
+ <anchorfile>qml-qdoc-test-abstractparent.html</anchorfile>
+ <anchor>name-method</anchor>
+ <arglist>(Child child, name)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>rear</name>
+ <anchorfile>qml-qdoc-test-abstractparent.html</anchorfile>
+ <anchor>rear-method</anchor>
+ <arglist>(Child child, var method)</arglist>
+ </member>
+ </compound>
+ <compound kind="class">
+ <name>QDoc.Test.Child</name>
+ <filename>qml-qdoc-test-child.html</filename>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>name</name>
+ <anchorfile>qml-qdoc-test-child.html</anchorfile>
+ <anchor>name-method</anchor>
+ <arglist>(Child child, name)</arglist>
+ </member>
+ </compound>
+ <compound kind="namespace">
+ <name>CrossModuleRef</name>
+ <filename>crossmoduleref.html</filename>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>documentMe</name>
+ <anchorfile>crossmoduleref.html</anchorfile>
+ <anchor>documentMe</anchor>
+ <arglist>()</arglist>
+ </member>
+ </compound>
+ <compound kind="class">
+ <name>QDoc.Test.DocTest</name>
+ <filename>qml-qdoc-test-doctest.html</filename>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>completed</name>
+ <anchorfile>qml-qdoc-test-doctest.html</anchorfile>
+ <anchor>completed-signal</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>fail</name>
+ <anchorfile>qml-qdoc-test-doctest.html</anchorfile>
+ <anchor>fail-method</anchor>
+ <arglist>(message)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>fail_hard</name>
+ <anchorfile>qml-qdoc-test-doctest.html</anchorfile>
+ <anchor>fail_hard-method</anchor>
+ <arglist>(msg, option)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>foo</name>
+ <anchorfile>qml-qdoc-test-doctest.html</anchorfile>
+ <anchor>foo-signal</anchor>
+ <arglist>(var bar)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>itsHappening</name>
+ <anchorfile>qml-qdoc-test-doctest.html</anchorfile>
+ <anchor>itsHappening-signal</anchor>
+ <arglist>(bool really)</arglist>
+ </member>
+ </compound>
+ <compound kind="class">
+ <name>Test.NoVer.DocTest</name>
+ <filename>qml-test-nover-doctest.html</filename>
+ </compound>
+ <compound kind="class">
+ <name>QDoc.Test.OldType</name>
+ <filename>qml-qdoc-test-oldtype.html</filename>
+ </compound>
+ <compound kind="class">
+ <name>UIComponents.ProgressBar</name>
+ <filename>qml-uicomponents-progressbar.html</filename>
+ </compound>
+ <compound kind="class">
+ <name>SeenClass</name>
+ <filename>seenclass.html</filename>
+ </compound>
+ <compound kind="class">
+ <name>UIComponents.Switch</name>
+ <filename>qml-uicomponents-switch.html</filename>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>toggle</name>
+ <anchorfile>qml-uicomponents-switch.html</anchorfile>
+ <anchor>toggle-method</anchor>
+ <arglist>()</arglist>
+ </member>
+ </compound>
+ <compound kind="class">
+ <name>UIComponents.TabWidget</name>
+ <filename>qml-uicomponents-tabwidget.html</filename>
+ </compound>
+ <compound kind="namespace">
+ <name>TestQDoc</name>
+ <filename>testqdoc.html</filename>
+ <class>TestQDoc::Test</class>
+ <class>TestQDoc::TestDerived</class>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>QDOCTEST_MACRO</name>
+ <anchorfile>testqdoc.html</anchorfile>
+ <anchor>QDOCTEST_MACRO</anchor>
+ <arglist>QDOCTEST_MACRO</arglist>
+ </member>
+ </compound>
+ <compound kind="class">
+ <name>TestQDoc::Test</name>
+ <filename>testqdoc-test.html</filename>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>QDOCTEST_MACRO2</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>QDOCTEST_MACRO2</anchor>
+ <arglist>(int &amp;x)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>Test</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>Test</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>TestQDoc::Test &amp;</type>
+ <name>operator++</name>
+ <anchorfile>testqdoc-test-obsolete.html</anchorfile>
+ <anchor>operator-2b-2b</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>TestQDoc::Test &amp;</type>
+ <name>operator--</name>
+ <anchorfile>testqdoc-test-obsolete.html</anchorfile>
+ <anchor>operator--</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>TestQDoc::Test &amp;</type>
+ <name>operator=</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>operator-eq</anchor>
+ <arglist>(TestQDoc::Test &amp;&amp;other)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>bool</type>
+ <name>operator==</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>operator-eq-eq</anchor>
+ <arglist>(const TestQDoc::Test &amp;lhs, const TestQDoc::Test &amp;rhs)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>int</type>
+ <name>someFunction</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>someFunction</anchor>
+ <arglist>(int, int v)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void (*)(bool)</type>
+ <name>funcPtr</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>funcPtr</anchor>
+ <arglist>(*)(bool) funcPtr(bool b, const char *s)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>anotherObsoleteMember</name>
+ <anchorfile>testqdoc-test-obsolete.html</anchorfile>
+ <anchor>anotherObsoleteMember</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>deprecatedMember</name>
+ <anchorfile>testqdoc-test-obsolete.html</anchorfile>
+ <anchor>deprecatedMember</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>inlineFunction</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>inlineFunction</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>methodWithEmDashInItsDocs</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>methodWithEmDashInItsDocs</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>methodWithEnDashInItsDocs</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>methodWithEnDashInItsDocs</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>obsoleteMember</name>
+ <anchorfile>testqdoc-test-obsolete.html</anchorfile>
+ <anchor>obsoleteMember</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="protected" virtualness="non" static="no">
+ <type>void</type>
+ <name>overload</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>overload</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="protected" virtualness="non" static="no">
+ <type>void</type>
+ <name>overload</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>overload-1</anchor>
+ <arglist>(bool b)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="virtual" static="no">
+ <type>virtual void</type>
+ <name>virtualFun</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>virtualFun</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>someFunctionDefaultArg</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>someFunctionDefaultArg</anchor>
+ <arglist>(int i, bool b) const const</arglist>
+ </member>
+ <member kind="typedef" type="">
+ <name>SomeType</name>
+ <anchorfile>testqdoc-test.html</anchorfile>
+ <anchor>SomeType-typedef</anchor>
+ <arglist></arglist>
+ </member>
+ </compound>
+ <compound kind="class">
+ <name>TestQDoc::TestDerived</name>
+ <filename>testqdoc-testderived.html</filename>
+ <base>Test</base>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>QBindable&lt;QString&gt;</type>
+ <name>bindableProp</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>bindableProp-prop</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>TestQDoc::TestDerived::NotTypedef</type>
+ <name>someValue</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>someValue</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>bool</type>
+ <name>boolProp</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>boolProp-prop</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>const QString &amp;</type>
+ <name>someProp</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>someProp-prop</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>int *</type>
+ <name>getInt</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>intProp-prop</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="virtual" static="no">
+ <type>virtual int</type>
+ <name>id</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>id</anchor>
+ <arglist>() override</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>bindablePropChanged</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>bindableProp-prop</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>boolPropChanged</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>boolProp-prop</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>emitSomething</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>emitSomething</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>resetBoolProp</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>boolProp-prop</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>setBindableProp</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>bindableProp-prop</anchor>
+ <arglist>(const QString &amp;s)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>setBoolProp</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>boolProp-prop</anchor>
+ <arglist>(bool b)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="yes">
+ <type>void</type>
+ <name>staticObsoleteMember</name>
+ <anchorfile>testqdoc-testderived-obsolete.html</anchorfile>
+ <anchor>staticObsoleteMember</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="virtual" static="no">
+ <type>virtual void</type>
+ <name>virtualFun</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>virtualFun</anchor>
+ <arglist>() override</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>const QString *</type>
+ <name>name</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>name-prop</anchor>
+ <arglist>() const const</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>void</type>
+ <name>invokeMe</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>invokeMe</anchor>
+ <arglist>() const const</arglist>
+ </member>
+ <member kind="typedef" type="">
+ <name>DerivedType</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>DerivedType-typedef</anchor>
+ <arglist></arglist>
+ </member>
+ <member kind="typedef" type="">
+ <name>NotTypedef</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>NotTypedef-typedef</anchor>
+ <arglist></arglist>
+ </member>
+ <member kind="property" type="QString">
+ <name>bindableProp</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>bindableProp-prop</anchor>
+ <arglist></arglist>
+ </member>
+ <member kind="property" type="bool">
+ <name>boolProp</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>boolProp-prop</anchor>
+ <arglist></arglist>
+ </member>
+ <member kind="property" type="int*">
+ <name>intProp</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>intProp-prop</anchor>
+ <arglist></arglist>
+ </member>
+ <member kind="property" type="const QString*">
+ <name>name</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>name-prop</anchor>
+ <arglist></arglist>
+ </member>
+ <member kind="property" type="QString">
+ <name>someProp</name>
+ <anchorfile>testqdoc-testderived.html</anchorfile>
+ <anchor>someProp-prop</anchor>
+ <arglist></arglist>
+ </member>
+ </compound>
+ <compound kind="class">
+ <name>TheModule.TheType</name>
+ <filename>qml-themodule-thetype.html</filename>
+ </compound>
+ <compound kind="class">
+ <name>QDoc.Test.Type</name>
+ <filename>qml-qdoc-test-type.html</filename>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type>Type</type>
+ <name>copy</name>
+ <anchorfile>qml-qdoc-test-type.html</anchorfile>
+ <anchor>copy-method</anchor>
+ <arglist>(a)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>completed</name>
+ <anchorfile>qml-qdoc-test-type.html</anchorfile>
+ <anchor>completed-signal</anchor>
+ <arglist>(int status)</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>configured</name>
+ <anchorfile>qml-qdoc-test-type.html</anchorfile>
+ <anchor>configured-signal</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>deprecatedMethod</name>
+ <anchorfile>qml-qdoc-test-type-obsolete.html</anchorfile>
+ <anchor>deprecatedMethod-method</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>disable</name>
+ <anchorfile>qml-qdoc-test-type.html</anchorfile>
+ <anchor>disable-method</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>enable</name>
+ <anchorfile>qml-qdoc-test-type.html</anchorfile>
+ <anchor>enable-method</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>futureDeprecated</name>
+ <anchorfile>qml-qdoc-test-type.html</anchorfile>
+ <anchor>futureDeprecated-method</anchor>
+ <arglist>()</arglist>
+ </member>
+ <member kind="function" protection="public" virtualness="non" static="no">
+ <type></type>
+ <name>group.created</name>
+ <anchorfile>qml-qdoc-test-type.html</anchorfile>
+ <anchor>group.created-signal</anchor>
+ <arglist>()</arglist>
+ </member>
+ </compound>
+ <compound kind="class">
+ <name>Test.NoVer.TypeNoVersion</name>
+ <filename>qml-test-nover-typenoversion.html</filename>
+ </compound>
+ <compound kind="class">
+ <name>QDoc.Test.YetAnotherChild</name>
+ <filename>qml-qdoc-test-yetanotherchild.html</filename>
+ </compound>
+</tagfile>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/themodule-qmlmodule.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/themodule-qmlmodule.webxml
new file mode 100644
index 000000000..5d24b3077
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/themodule-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/comprehensiveproject/expected/webxml/uicomponents-qmlmodule.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/uicomponents-qmlmodule.webxml
new file mode 100644
index 000000000..5d24b3077
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/uicomponents-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/comprehensiveproject/src/TestCPP b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/TestCPP
new file mode 100644
index 000000000..4ed786108
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/TestCPP
@@ -0,0 +1,5 @@
+#include "testcpp.h"
+
+#ifdef test_template
+# include "testtemplate.h"
+#endif
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/classlists.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/classlists.qdoc
new file mode 100644
index 000000000..2954e5beb
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/classlists.qdoc
@@ -0,0 +1,51 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+/*!
+ \page obsolete-classes.html
+ \title Obsolete Classes
+
+ \section1 Classes with obsolete members
+ \generatelist obsoletecppmembers
+
+ \section2 TestQDoc
+*/
+
+/*!
+ \page autolinking.html
+ \title Autolinking
+
+ //! a section title that qualifies for autolinking
+ \section1 TestQDoc
+
+ The string TestQDoc links to the C++ namespace unless linking explicitly,
+ \l {#TestQDoc}{like this}, or \l {TestQDoc}{this}. Also,
+
+ Autolinks:
+
+ \list
+ \li TestQDoc::TestDerived
+ \endlist
+
+ Explicit links:
+
+ \list
+ \li \l [CPP] {TestQDoc::TestDerived}
+ \li \l {Obsolete Classes#TestQDoc}
+ \endlist
+
+ //! a section title shadowing a known property name
+ \section1 someProp
+*/
+
+/*!
+ \group cpptypes
+ \title Test C++ Types
+
+ \generatelist testgroup
+*/
+
+/*!
+ \externalpage https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command
+ \title reentrant
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/dont.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/dont.cpp
new file mode 100644
index 000000000..39be5bbbf
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/dont.cpp
@@ -0,0 +1,22 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "dont.h"
+
+/*!
+ \class UnseenClass
+ \inmodule TestCPP
+ \brief A public but undocumented class.
+*/
+UnseenClass::UnseenClass()
+{
+}
+
+/*!
+ \class SeenClass
+ \inmodule TestCPP
+ \brief A public but undocumented class.
+*/
+SeenClass::SeenClass()
+{
+}
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/dont.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/dont.h
new file mode 100644
index 000000000..0614c713e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/dont.h
@@ -0,0 +1,16 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#pragma once
+
+class UnseenClass
+{
+public:
+ UnseenClass();
+};
+
+class SeenClass : public UnseenClass
+{
+public:
+ SeenClass();
+};
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/demo/demo.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/demo/demo.cpp
new file mode 100644
index 000000000..906c6292f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/demo/demo.cpp
@@ -0,0 +1,11 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+bool isOverThousand(int n)
+{
+//! [integer literal with separator]
+ if (n > 1'000)
+ return true;
+//! [integer literal with separator]
+ return false;
+}
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/demo/demo.pro b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/demo/demo.pro
new file mode 100644
index 000000000..dbe8ff3c0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/demo/demo.pro
@@ -0,0 +1,2 @@
+TEMPLATE = aux
+message("Nothing to see here.")
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/demo/doc/src/demo.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/demo/doc/src/demo.qdoc
new file mode 100644
index 000000000..21ebc5588
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/demo/doc/src/demo.qdoc
@@ -0,0 +1,11 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+/*!
+ \example demos/demo
+ \title Demo
+ \image leonardo-da-vinci.png
+ //! Icon made by Smashicons from www.flaticon.com
+
+ \snippet demos/demo/demo.cpp integer literal with separator
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/demo/dontxclude/CMakeLists.txt b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/demo/dontxclude/CMakeLists.txt
new file mode 100644
index 000000000..d29157aad
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/demo/dontxclude/CMakeLists.txt
@@ -0,0 +1,2 @@
+cmake_minimum_required(VERSION 3.16)
+project (DONTXCLUDEDIRS_QDOCTEST)
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/demo/excludes/CMakeLists.txt b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/demo/excludes/CMakeLists.txt
new file mode 100644
index 000000000..09b447642
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/demo/excludes/CMakeLists.txt
@@ -0,0 +1,2 @@
+cmake_minimum_required(VERSION 3.16)
+project (EXCLUDEDIR_QDOCTEST)
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/hidden/doc/src/hidden.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/hidden/doc/src/hidden.qdoc
new file mode 100644
index 000000000..dddcbc074
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/hidden/doc/src/hidden.qdoc
@@ -0,0 +1,11 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+/*!
+ \example demos/hidden
+ \title Hidden Demo
+ \meta tag broken
+ \brief Tagged 'broken', does not appear in examples-manifest.xml.
+
+ Also missing an image, but that's OK as it's broken anyway.
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/hidden/hidden.pro b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/hidden/hidden.pro
new file mode 100644
index 000000000..dbe8ff3c0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/examples/demos/hidden/hidden.pro
@@ -0,0 +1,2 @@
+TEMPLATE = aux
+message("Nothing to see here.")
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/images/01.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/images/01.png
new file mode 100644
index 000000000..d73ab969b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/images/01.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/images/leonardo-da-vinci.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/images/leonardo-da-vinci.png
new file mode 100644
index 000000000..854acb4ca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/images/leonardo-da-vinci.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/properties.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/properties.qdoc
new file mode 100644
index 000000000..95aa3635c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/properties.qdoc
@@ -0,0 +1,55 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+/*!
+ \property TestQDoc::TestDerived::bindableProp
+ Some property.
+
+ \sa someProp
+*/
+
+/*!
+ \property TestQDoc::TestDerived::someProp
+ Another property.
+*/
+
+/*!
+ \property TestQDoc::TestDerived::name
+ \brief a name.
+*/
+
+/*!
+ \property TestQDoc::TestDerived::intProp
+ An integer property.
+*/
+
+/*!
+ \property TestQDoc::TestDerived::boolProp
+ A boolean property.
+*/
+
+/*!
+ \fn TestQDoc::TestDerived::invokeMe() const
+ \brief Something invokable.
+*/
+
+/*!
+ \qmlmodule TheModule
+*/
+
+/*!
+ \qmltype TheType
+ \instantiates TestQDoc::TestDerived
+ \inqmlmodule TheModule
+*/
+
+/*!
+ \qmlproperty string TheType::name
+ \brief Read-only status of this property is resolved from Q_PROPERTY.
+*/
+
+/*!
+ //! avoid link warnings for auto-generated links to QProperty
+ \externalpage https://wiki.qt.io/QProperty
+ \title QProperty
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/DocTest.qml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/DocTest.qml
new file mode 100644
index 000000000..dfae6f13d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/DocTest.qml
@@ -0,0 +1,86 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick 2.0
+
+/*!
+ \qmltype DocTest
+ \inherits Test
+ \inqmlmodule QDoc.Test
+ \brief Represents a doc test case.
+ \since QDoc.Test 0.9
+
+ \section1 Introduction
+
+ A documentation test case, itself documented inline in \DocTest.qml.
+*/
+Item {
+ id: testCase
+
+ /*!
+ \qmlsignal QDocTest::completed
+ */
+ signal completed
+
+ /*!
+ \qmlsignal DocTest::test(var bar)
+ Signal with parameter \a bar.
+ */
+ signal foo(var bar)
+
+ /*!
+ Signals that something is \a really happening.
+ */
+ signal itsHappening(bool really)
+
+ /*!
+ \qmlproperty string DocTest::name
+
+ Name of the test.
+ \qml
+ DocTest {
+ name: "test"
+ // ...
+ }
+ \endqml
+ */
+ required property string name
+
+ /*!
+ Whether the test is active.
+ \default true
+
+ \sa name
+ */
+ property bool active: true
+
+ /*! \internal */
+ property int doctest_internal: -1
+
+ /*!
+ \qmlmethod DocTest::fail(message = "oops")
+ \since QDoc.Test 1.0
+
+ Fails the current test case, with the optional \a message.
+ */
+ function fail(msg) {
+ if (msg === undefined)
+ msg = "oops";
+ }
+
+ /*! \internal */
+ function doctest_fail(msg) {
+ if (msg === undefined)
+ msg = "";
+ }
+
+ /*!
+ \brief Fails the current test case, hard.
+ \list
+ \li Prints out \a msg.
+ \li Accepts a random \a option.
+ \endlist
+ */
+ function fail_hard(msg = "facepalm", option = 123) {
+ }
+}
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/cmaketest/CMakeLists.txt b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/cmaketest/CMakeLists.txt
new file mode 100644
index 000000000..89eafa300
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/cmaketest/CMakeLists.txt
@@ -0,0 +1,2 @@
+cmake_minimum_required(VERSION 3.16)
+project (QDOCTEST)
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/cmaketest/doc/src/cmaketest.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/cmaketest/doc/src/cmaketest.qdoc
new file mode 100644
index 000000000..0e8a2ab3c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/cmaketest/doc/src/cmaketest.qdoc
@@ -0,0 +1,9 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+/*!
+ \example cmaketest
+ \title CMake Example Project
+ \image leonardo-da-vinci.png
+ //! Icon made by Smashicons from www.flaticon.com
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/cmaketest/main.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/cmaketest/main.cpp
new file mode 100644
index 000000000..68d71eb71
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/cmaketest/main.cpp
@@ -0,0 +1 @@
+void main(){}
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/ProgressBar.qml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/ProgressBar.qml
new file mode 100644
index 000000000..633a3ff5d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/ProgressBar.qml
@@ -0,0 +1,98 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick 1.0
+
+/*!
+ \qmltype ProgressBar
+ \inqmlmodule UIComponents
+ \brief A component that shows the progress of an event.
+
+ A ProgressBar shows the linear progress of an event as its \l value.
+ The range is specified using the \l {minimum} and the \l{maximum} values.
+
+ The ProgressBar component is part of the \l {UI Components} module.
+
+ This documentation is part of the \l{componentset}{UIComponents} example.
+*/
+Item {
+ id: progressbar
+
+ /*!
+ The minimum value of the ProgressBar range.
+ The \l value must not be less than this value.
+ */
+ property int minimum: 0
+
+ /*!
+ The maximum value of the ProgressBar range.
+ The \l value must not be more than this value.
+ */
+ property int maximum: 100
+
+ /*!
+ The value of the progress.
+ */
+ property int value: 0
+
+ /*!
+ \qmlproperty color ProgressBar::color
+ The color of the ProgressBar's gradient. Must bind to a color type.
+
+ \omit
+ The "\qmlproperty <type> <property name>" is needed because
+ property alias need to have their types manually entered.
+
+ QDoc will not publish the documentation within omit and endomit.
+ \endomit
+
+ \sa secondColor
+ */
+ property alias color: gradient1.color
+
+ /*!
+ \qmlproperty color ProgressBar::secondColor
+ The second color of the ProgressBar's gradient.
+ Must bind to a color type.
+
+ \omit
+ The "\qmlproperty <type> <property name>" is needed because
+ property alias need to have their types manually entered.
+
+ QDoc will not publish the documentation within omit and endomit.
+ \endomit
+
+ \sa color
+ */
+ property alias secondColor: gradient2.color
+
+ width: 250; height: 23
+ clip: true
+
+ Rectangle {
+ id: highlight
+
+ /*!
+ An internal documentation comment. The widthDest property is not
+ a public API and therefore will not be exposed.
+ */
+ property int widthDest: ((progressbar.width * (value - minimum)) / (maximum - minimum) - 6)
+
+ width: highlight.widthDest
+ Behavior on width { SmoothedAnimation { velocity: 1200 } }
+
+ anchors { left: parent.left; top: parent.top; bottom: parent.bottom; margins: 3 }
+ radius: 1
+ gradient: Gradient {
+ GradientStop { id: gradient1; position: 0.0 }
+ GradientStop { id: gradient2; position: 1.0 }
+ }
+
+ }
+ Text {
+ anchors { right: highlight.right; rightMargin: 6; verticalCenter: parent.verticalCenter }
+ color: "white"
+ font.bold: true
+ text: Math.floor((value - minimum) / (maximum - minimum) * 100) + '%'
+ }
+}
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/Switch.qml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/Switch.qml
new file mode 100644
index 000000000..123e86468
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/Switch.qml
@@ -0,0 +1,105 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick 1.0
+
+/*!
+ \qmltype ToggleSwitch
+ \inqmlmodule UIComponents
+ \brief A component that can be turned on or off.
+
+ A toggle switch has two states: an \c on and an \c off state. The \c off
+ state is when the \l on property is set to \c false.
+
+ The ToggleSwitch component is part of the \l {UI Components} module.
+
+ This documentation is part of the \l{componentset}{UIComponents} example.
+
+*/
+Item {
+ id: toggleswitch
+ width: background.width; height: background.height
+
+ /*!
+ Indicates the state of the switch. If \c false, then the switch is in
+ the \c off state.
+
+ \omit
+ The \qmlproperty <type> <propertyname> is not necessary as QDoc
+ will associate this property to the ToggleSwitch
+
+ QDoc will not publish the documentation within omit and endomit.
+ \endomit
+ */
+ property bool on: false
+
+
+ /*!
+ A method to toggle the switch. If the switch is \c on, the toggling it
+ will turn it \c off. Toggling a switch in the \c off position will
+ turn it \c on.
+ */
+ function toggle() {
+ if (toggleswitch.state == "on")
+ toggleswitch.state = "off";
+ else
+ toggleswitch.state = "on";
+ }
+
+
+ /*!
+ \internal
+
+ An internal function to synchronize the switch's internals. This
+ function is not for public access. The \internal command will
+ prevent QDoc from publishing this comment in the public API.
+ */
+ function releaseSwitch() {
+ if (knob.x == 1) {
+ if (toggleswitch.state == "off") return;
+ }
+ if (knob.x == 78) {
+ if (toggleswitch.state == "on") return;
+ }
+ toggle();
+ }
+
+ Rectangle {
+ id: background
+ width: 130; height: 48
+ radius: 48
+ color: "lightsteelblue"
+ MouseArea { anchors.fill: parent; onClicked: toggle() }
+ }
+
+ Rectangle {
+ id: knob
+ width: 48; height: 48
+ radius: width
+ color: "lightblue"
+
+ MouseArea {
+ anchors.fill: parent
+ drag.target: knob; drag.axis: Drag.XAxis; drag.minimumX: 1; drag.maximumX: 78
+ onClicked: toggle()
+ onReleased: releaseSwitch()
+ }
+ }
+
+ states: [
+ State {
+ name: "on"
+ PropertyChanges { target: knob; x: 78 }
+ PropertyChanges { target: toggleswitch; on: true }
+ },
+ State {
+ name: "off"
+ PropertyChanges { target: knob; x: 1 }
+ PropertyChanges { target: toggleswitch; on: false }
+ }
+ ]
+
+ transitions: Transition {
+ NumberAnimation { properties: "x"; easing.type: Easing.InOutQuad; duration: 200 }
+ }
+}
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/TabWidget.qml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/TabWidget.qml
new file mode 100644
index 000000000..57808c1a5
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/TabWidget.qml
@@ -0,0 +1,146 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick 1.0
+
+/*!
+ \qmltype TabWidget
+ \inqmlmodule UIComponents
+ \brief A widget that places its children as tabs.
+
+ A TabWidget places its children as tabs in a view. Selecting
+ a tab involves selecting the tab at the top.
+
+ The TabWidget component is part of the \l {UI Components} module.
+
+ This documentation is part of the \l{componentset}{UIComponents} example.
+
+ \section1 Adding Tabs
+
+ To add a tab, declare the tab as a child of the TabWidget.
+
+ \code
+ TabWidget {
+ id: tabwidget
+
+ Rectangle {
+ id: tab1
+ color: "red"
+ //... omitted
+ }
+ Rectangle {
+ id: tab2
+ color: "blue"
+ //... omitted
+ }
+
+ }
+ \endcode
+
+*/
+Item {
+ id: tabWidget
+
+ /*!
+ \internal
+
+ Setting the default property to stack.children means any child items
+ of the TabWidget are actually added to the 'stack' item's children.
+
+ See the \l{"Property Binding in QML"}
+ documentation for details on default properties.
+
+ This is an implementation detail, not meant for public knowledge. Putting
+ the \internal command at the beginning will cause QDoc to not publish this
+ documentation in the public API page.
+
+ Normally, a property alias needs to have a
+ "\qmlproperty <type> <propertyname>" to assign the alias a type.
+
+ */
+ default property alias content: stack.children
+
+
+ /*!
+ The currently active tab in the TabWidget.
+ */
+ property int current: 0
+
+ /*!
+ A sample \c{read-only} property.
+ A contrived property to demonstrate QDoc's ability to detect
+ read-only properties.
+
+ The signature is:
+ \code
+ readonly property int sampleReadOnlyProperty: 0
+ \endcode
+
+ Note that the property must be initialized to a value.
+
+ */
+ readonly property int sampleReadOnlyProperty: 0
+
+ /*!
+ \internal
+
+ This handler is an implementation
+ detail. The \c{\internal} command will prevent QDoc from publishing this
+ documentation on the public API.
+ */
+ onCurrentChanged: setOpacities()
+ Component.onCompleted: setOpacities()
+
+ /*!
+ \internal
+
+ An internal function to set the opacity.
+ The \internal command will prevent QDoc from publishing this
+ documentation on the public API.
+ */
+ function setOpacities() {
+ for (var i = 0; i < stack.children.length; ++i) {
+ stack.children[i].opacity = (i == current ? 1 : 0)
+ }
+ }
+
+ Row {
+ id: header
+
+ Repeater {
+ model: stack.children.length
+ delegate: Rectangle {
+ width: tabWidget.width / stack.children.length; height: 36
+
+ Rectangle {
+ width: parent.width; height: 1
+ anchors { bottom: parent.bottom; bottomMargin: 1 }
+ color: "#acb2c2"
+ }
+ BorderImage {
+ anchors { fill: parent; leftMargin: 2; topMargin: 5; rightMargin: 1 }
+ border { left: 7; right: 7 }
+ source: "tab.png"
+ visible: tabWidget.current == index
+ }
+ Text {
+ horizontalAlignment: Qt.AlignHCenter; verticalAlignment: Qt.AlignVCenter
+ anchors.fill: parent
+ text: stack.children[index].title
+ elide: Text.ElideRight
+ font.bold: tabWidget.current == index
+ }
+ MouseArea {
+ anchors.fill: parent
+ onClicked: tabWidget.current = index
+ }
+ }
+ }
+ }
+
+ Item {
+ id: stack
+ width: tabWidget.width
+ anchors.top: header.bottom; anchors.bottom: tabWidget.bottom
+ }
+}
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/componentset.pro b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/componentset.pro
new file mode 100644
index 000000000..5b44737c2
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/componentset.pro
@@ -0,0 +1,5 @@
+SOURCES = componentset.pro \
+ ProgressBar.qml \
+ Switch.qml \
+ TabWidget.qml \
+ uicomponents.qdoc
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/componentset.qml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/componentset.qml
new file mode 100644
index 000000000..18b25884a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/componentset.qml
@@ -0,0 +1,7 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick 2.0
+
+Item {
+}
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/examples.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/examples.qdoc
new file mode 100644
index 000000000..1069c55fd
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/examples.qdoc
@@ -0,0 +1,82 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example componentset
+ \title QML Documentation Example
+ \brief Example for documenting QML types.
+
+ \testnoautolist
+
+ \meta tags {test,sample}
+ \meta tag {application}
+ \meta category {Application Example}
+ \meta installpath tutorials
+
+ This example demonstrates one of the ways to document QML types. It also
+ generates a warning about a missing example image, on purpose.
+
+ In particular, there are sample types that are documented with QDoc
+ commands comments. There are documentation comments for the QML types
+ and their public interfaces. The types are grouped into a module, the
+ \l{UI Components} module.
+
+ The uicomponents.qdoc file generates
+ the overview page for the \l{UI Components} module page.
+
+ The generated documentation is available in the \l{UI Components} module.
+
+ \section1 QML Class
+
+ The QML types use the \\qmltype to document the
+ type. In addition, they have the \\inmodule
+ command in order for QDoc to associate them to the \c UIComponents module.
+
+ QDoc uses the \\brief command to place a basic
+ description when listing the types.
+
+ \section1 Properties, Signals, Handlers, and Methods
+
+ The types have their properties, signals, handlers, and methods
+ defined in their respective QML files. QDoc associates the properties and
+ methods to the types, therefore, you only need to place the
+ documentation above the property, method, or signal.
+
+ To document the type of a \e {property alias}, you must use the
+ \\qmlproperty command to specify the data type.
+
+ \code
+ \qmlproperty int anAliasedProperty
+ An aliased property of type int.
+ \endcode
+
+ \section2 Internal Documentation
+
+ You may declare that a documentation is for internal use by placing the
+ \\internal command after the beginning QDoc comment
+ \begincomment. QDoc will prevent the internal documentation from appearing
+ in the public API.
+
+ If you wish to omit certain parts of the documentation, you may use the
+ \\omit and \\endomit command.
+
+ \section1 QML Types with C++ Implementation
+
+ This example only demonstrates the documentation for types in QML
+ files, but the regular QML commands may be placed
+ inside C++ classes to define the public API of the QML type.
+
+*/
+
+
+/*!
+ \qmlmodule UIComponents 1.0
+ \title UI Components
+ \brief Basic set of UI components.
+
+ 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.
+
+ This module is part of the \l{componentset}{UIComponents} example.
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/uicomponents.qdoc.sample b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/uicomponents.qdoc.sample
new file mode 100644
index 000000000..efbcd9511
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/componentset/uicomponents.qdoc.sample
@@ -0,0 +1,14 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \qmlmodule UIComponents 1.0
+ \title UI Components
+ \brief Basic set of UI components
+
+ 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 off the \l{Qt
+ Quick Code Samples}.
+
+ This module is part of the \l{componentset}{UIComponents} example.
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/doctest/DocTest.qml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/doctest/DocTest.qml
new file mode 100644
index 000000000..07201403f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/doctest/DocTest.qml
@@ -0,0 +1,11 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+
+/*!
+ //! omit the \qmltype command, file name (base) is the type name.
+ \inqmlmodule Test.NoVer
+ \brief Shadows the type name in QDoc.Test module.
+*/
+Item {}
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/modules.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/modules.qdoc
new file mode 100644
index 000000000..3b17b5d92
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/modules.qdoc
@@ -0,0 +1,19 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+/*!
+ \page qmlmodules.html
+ \title QML Modules
+
+ \generatelist qml-modules
+
+ \section1 QML types
+
+ \generatelist qmltypesbymodule QDoc.Test
+
+ \section1 QML value types
+
+ \generatelist qmlvaluetypes
+
+ \generatelist qmlvaluetypesbymodule QDoc.Test
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/parent.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/parent.qdoc
new file mode 100644
index 000000000..d6bbb5738
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/parent.qdoc
@@ -0,0 +1,87 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+/*!
+ \qmltype AbstractParent
+ \inqmlmodule QDoc.Test
+ \qmlabstract
+ \brief Abstract base QML type.
+*/
+
+/*!
+ \qmlproperty list<Child> AbstractParent::children
+ \qmldefault
+ \brief Children of the type.
+*/
+
+/*!
+ \qmlmethod void AbstractParent::rear(Child child, var method = Strict)
+ \brief Do some abstract parenting on \a child using a specific \a method.
+*/
+
+/*!
+ \qmlproperty string AbstractParent::name
+ \brief Name of this parent.
+*/
+
+/*!
+ \qmlmethod void AbstractParent::name(Child child, name)
+ \brief Name a \a child using \a name.
+
+*/
+
+/*!
+ \qmlmethod void AbstractParent::name()
+ \brief Name all children with random names.
+*/
+
+/*!
+ \qmltype Child
+ \inqmlmodule QDoc.Test
+ \inherits AbstractParent
+ \brief A Child inheriting its parent.
+*/
+
+/*!
+ //! override from abstract base
+ \qmlproperty string Child::name
+ \brief Name of this child.
+*/
+
+/*!
+ //! override from abstract base
+ \qmlmethod void Child::name(Child child, name)
+ \brief Name a \a child of this child using \a name.
+*/
+
+/*!
+ \qmlvaluetype int
+ \inqmlmodule QDoc.Test
+
+ \brief An integer value type.
+*/
+
+/*!
+ \qmlmethod int int::abs()
+ Returns the absolute value of this integer.
+*/
+
+/*!
+ \qmltype InternParent
+ \inqmlmodule QDoc.Test
+ \internal
+ \qmlabstract
+ \brief Internal abstract base QML type.
+*/
+
+/*!
+ \qmlproperty int InternParent::prop
+ \brief Propagated to inheriting type docs.
+*/
+
+/*!
+ \qmltype YetAnotherChild
+ \inherits InternParent
+ \inqmlmodule QDoc.Test
+ \brief A type inheriting from internal abstract parent.
+*/
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
new file mode 100644
index 000000000..8bd99a82b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/type.cpp
@@ -0,0 +1,133 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "testcpp.h"
+
+/*!
+ \qmlmodule QDoc.Test \QDocTestVer
+ \title QDoc.Test QML Module
+ \brief QML Types for the Test module.
+ \since 1.1
+ \preliminary
+
+ \testnoautolist
+*/
+
+/*!
+ \qmlmodule Test.Empty 1.0
+ \title No QML Types Here
+ \brief A QML module with no member types.
+*/
+
+/*!
+ \qmlmodule Test.NoVer
+ \title Versionless QML Module
+ \brief QML Types for the Test module without version.
+ \since 1.1
+ \modulestate Tech Preview
+*/
+
+/*!
+ \qmltype Type
+ \instantiates TestQDoc::Test
+ \inqmlmodule QDoc.Test
+ \brief A QML type documented in a .cpp file.
+ \meta status { <Work In Progress> }
+*/
+
+/*!
+ \qmltype TypeNoVersion
+ \inqmlmodule Test.NoVer
+ \brief Another QML type documented in a .cpp file.
+*/
+
+/*!
+ \qmltype OldType
+ \inqmlmodule QDoc.Test
+ \brief Deprecated old type.
+ \deprecated [1.0]
+*/
+
+/*!
+ \qmlproperty int Type::id
+ \readonly
+ \brief A read-only property.
+*/
+
+/*!
+ \qmlproperty string QDoc.Test::Type::name
+ \required
+ \brief Name of the Test.
+*/
+
+/*!
+ \qmlattachedproperty enumeration Type::type
+ \default Type.NoType
+
+ \value Type.NoType
+ Nothing
+ \value Type.SomeType
+ Something
+*/
+
+/*!
+ \qmlproperty int Type::group.first
+ \qmlproperty int Type::group.second
+ \qmlproperty int Type::group.third
+
+ \brief A property group.
+*/
+
+/*!
+ \qmlsignal Type::group.created
+
+ This signal is prefixed with \e group.
+*/
+
+/*!
+ \qmlproperty int Type::fourth
+ \qmlproperty int Type::fifth
+
+ \brief A group of properties sharing a documentation comment.
+*/
+
+/*!
+ \qmlmethod Type Type::copy(a)
+
+ Returns another Type based on \a a.
+*/
+
+/*!
+ \qmlmethod Type::enable()
+ \qmlmethod Type::disable()
+
+ Enables or disables this type.
+*/
+
+/*!
+ \qmlsignal Type::completed(int status)
+
+ This signal is emitted when the operation completed with \a status.
+*/
+
+/*!
+ \qmlattachedsignal Type::configured()
+
+ This attached signal is emitted when the type was configured.
+*/
+
+/*!
+ \qmlmethod Type::deprecatedMethod()
+
+ \deprecated [6.2] This method has no replacement.
+
+ This is a method that should include information about being deprecated
+ and that it has been so since 6.2 in its docs.
+*/
+
+/*!
+ \qmlmethod Type::futureDeprecated()
+ \deprecated [6.3] Use something else instead.
+
+ This is a method that's marked for deprecation in a future version.
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/snippets/snippet_testcpp.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/snippets/snippet_testcpp.cpp
new file mode 100644
index 000000000..1660fbc2b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/snippets/snippet_testcpp.cpp
@@ -0,0 +1,3 @@
+//! [random tag]
+You're not supposed to see this.
+//! [random tag]
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/testcpp.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/testcpp.cpp
new file mode 100644
index 000000000..d31167efb
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/testcpp.cpp
@@ -0,0 +1,418 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#include "testcpp.h"
+
+namespace TestQDoc {
+
+/*
+//! [random tag]
+\note This is just a test.
+//! [random tag]
+
+//! [args]
+\1\2 \3 \2\1
+//! [args]
+*/
+
+/*!
+ \module TestCPP
+ \qtvariable testcpp
+ \qtcmakepackage QDocTest
+ \title QDoc Test C++ Classes
+ \brief A test module page.
+ \since 2.0
+
+ \testnoautolist
+
+ \include testcpp.cpp random tag
+ \include testcpp.cpp {args} {/} {*} {Look, Ma! {I'm made of arguments!}}
+
+\if defined(test_nestedmacro)
+ \versionnote {module} {\ver 5.15.0}
+ \ver 1.0.0
+\endif
+
+ \section1 Linking to function-like things
+
+ \list
+ \li \l {TestQDoc::Test::someFunctionDefaultArg}
+ {someFunctionDefaultArg()}
+ \li QDOCTEST_MACRO2()
+ \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()
+*/
+
+/*!
+ \namespace TestQDoc
+ \inheaderfile TestCPP
+ \inmodule TestCPP
+ \brief A namespace.
+
+ \section1 Usage
+ This namespace is for testing QDoc output.
+*/
+
+/*!
+ \class TestQDoc::Test
+ \inmodule TestCPP
+ \brief A class in a namespace.
+
+\if defined(test_ignoresince)
+ //! omitted by ignoresince
+ \since 1.1
+\endif
+ \ingroup testgroup
+ \ingroup cpptypes
+ \reentrant
+*/
+
+/*!
+ \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.
+*/
+
+/*!
+ \macro QDOCTEST_MACRO
+ \relates TestQDoc
+\if defined(test_ignoresince)
+ //! omitted by ignoresince.Test
+ \since Test 0.9
+\endif
+*/
+
+/*!
+ \macro QDOCTEST_MACRO2(int &x)
+ \relates TestQDoc::Test
+ \since Test 1.1
+ \brief A macro with argument \a x.
+ \ingroup testgroup
+*/
+
+/*!
+\if defined(test_properties)
+ \property Test::id
+\else
+ \nothing
+\endif
+*/
+
+/*!
+ \deprecated [6.0] Use someFunction() instead.
+*/
+void Test::deprecatedMember()
+{
+ return;
+}
+
+/*!
+ \obsolete
+
+ Use someFunction() instead.
+*/
+void Test::obsoleteMember()
+{
+ return;
+}
+
+/*!
+ \obsolete Use obsoleteMember() instead.
+*/
+void Test::anotherObsoleteMember()
+{
+ return;
+}
+
+/*!
+ \nonreentrant
+ Function that takes a parameter \a i and \a b.
+\if defined(test_ignoresince)
+ \since 2.0
+\endif
+ \ingroup testgroup
+*/
+void Test::someFunctionDefaultArg(int i, bool b = false) const
+{
+ return;
+}
+
+/*!
+ \fn void Test::func(bool)
+ \internal
+*/
+
+/*!
+ \fn [funcPtr] void (*funcPtr(bool b, const char *s))(bool)
+
+ Returns a pointer to a function that takes a boolean. Uses \a b and \a s.
+*/
+
+/*!
+ \fn [op-inc] Test::operator++()
+ \fn [op-dec] Test::operator--()
+ \deprecated
+*/
+
+/*!
+ This method has en dashes in its documentation -- as you'll find
+ represented by \c{--} in the sources -- here and there. The important bit
+ to note is that when passed e.g. to the \\c command, the two hyphens are
+ processed as input to the command and not replaced by an en dash. This also
+ applies to code blocks, where otherwise, the decrement operator would get
+ completely borked:
+
+ \code
+ for (int i = 42; i > 0; --i)
+ // Do something cool during countdown.
+ \endcode
+
+ ...as it would be silly if this would output --i instead of \c {--i}.
+
+ -----------------------------------------------------------------------
+
+ It still allows people to add a bunch of dashes, though, without replacing
+ them all with a series of en dashes. Of course, they might want to use the
+ \\hr command instead, like this:
+ \hr
+
+ -- You can also start a new paragraph with an en dash, if you want to.
+
+ //! Self-referencing \sa-command for tests.
+ \sa methodWithEnDashInItsDocs
+*/
+void Test::methodWithEnDashInItsDocs()
+{
+ // Nothing to see here.
+}
+
+/*!
+ This method has em dashes in its documentation---as you'll find
+ represented by \c{---} in the sources---here and there. The important bit
+ to note is that when passed e.g. to the \\c command, the three hyphens are
+ processed as input to the command and not replaced by an em dash.
+
+ -----------------------------------------------------------------------
+
+ People can still add a bunch of dashes, though, without QDoc replacing
+ them all with a series of em dashes.
+
+ ---You can also start a new paragraph with an em dash, if you want to.
+
+ \sa methodWithEnDashInItsDocs
+
+*/
+void Test::methodWithEmDashInItsDocs()
+{
+ // Woah! Look at that!
+}
+
+// Documented below with an \fn command. Unnecessary but we support it, and it's used.
+int Test::someFunction(int, int v)
+{
+ return v;
+}
+
+/*!
+ \fn void TestQDoc::Test::inlineFunction()
+
+ \brief An inline function, documented using the \CMDFN QDoc command.
+*/
+
+/*!
+ \fn int Test::someFunction(int, int v = 0)
+
+ Function that takes a parameter \a v.
+ Also returns the value of \a v.
+\if defined(test_ignoresince)
+ \since Test 1.0
+\endif
+*/
+
+/*!
+ Function that must be reimplemented.
+*/
+void Test::virtualFun()
+{
+ return;
+}
+
+/*!
+ \fn bool Test::operator==(const Test &lhs, const Test &rhs)
+
+ Returns true if \a lhs and \a rhs are equal.
+*/
+
+/*!
+ \typedef TestQDoc::Test::SomeType
+ \brief A typedef.
+*/
+
+/*!
+ \reimp
+*/
+void TestDerived::virtualFun()
+{
+ return;
+}
+
+/*!
+ \fn TestQDoc::Test::overload()
+ \fn Test::overload(bool b)
+ //! The second overload should match even without the fully qualified path
+
+ Overloads that share a documentation comment, optionally taking
+ a parameter \a b.
+*/
+
+/*!
+ \fn Test::overload(bool b)
+ \since Test 1.2
+*/
+
+/*!
+ \typealias TestQDoc::TestDerived::DerivedType
+ An aliased typedef.
+*/
+
+/*!
+ \typedef TestQDoc::TestDerived::NotTypedef
+ I'm an alias, not a typedef.
+*/
+
+/*!
+ \obsolete
+
+ Static obsolete method.
+*/
+void TestDerived::staticObsoleteMember()
+{
+ return;
+}
+
+/*!
+\if defined(test_properties)
+ \fn void TestDerived::emitSomething()
+ Emitted when things happen.
+\else
+ \nothing
+\endif
+*/
+
+/*!
+\if defined(test_properties)
+ \reimp
+\else
+ \nothing
+\endif
+*/
+int TestDerived::id()
+{
+ return 1;
+}
+
+/*!
+ Returns a value using an aliases type.
+*/
+TestDerived::NotTypedef TestDerived::someValue()
+{
+ return 0;
+}
+
+/*!
+\if defined(test_template)
+ \fn template <typename T1, typename T2> void TestQDoc::Test::funcTemplate(T1 a, T2 b)
+ \brief Function template with two parameters, \a a and \a b.
+\else
+ \nothing
+\endif
+*/
+
+/*!
+\if defined(test_template)
+ \struct TestQDoc::Test::Struct
+ \inmodule TestCPP
+ \brief Templated struct.
+\else
+ \nothing
+\endif
+*/
+
+/*!
+\if defined(test_template)
+ \typealias TestQDoc::Test::Specialized
+\else
+ \nothing
+\endif
+*/
+
+/*!
+\if defined(test_template)
+ \class TestQDoc::Vec
+ \inmodule TestCPP
+ \brief Type alias that has its own reference.
+\else
+ \nothing
+\endif
+*/
+
+/*!
+\if defined(test_template)
+ \macro Q_INVOKABLE
+ \relates TestQDoc::Test
+
+ This is a mock Q_INVOKABLE for the purpose of ensuring QDoc autolink to it
+ as expected.
+\else
+ \nothing
+\endif
+*/
+
+} // namespace TestQDoc
+
+
+/*!
+ \namespace CrossModuleRef
+ \inmodule TestCPP
+ \brief Namespace that has documented functions in multiple modules.
+ \since 3.0
+*/
+namespace CrossModuleRef {
+
+/*!
+ Document me!
+*/
+void documentMe()
+{
+}
+
+} // namespace CrossModuleRef
+
+/*!
+ \class DontLinkToMe
+ \inmodule TestCPP
+ \brief Class that does not generate documentation.
+*/
+
+/*!
+ \dontdocument (DontLinkToMe)
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/testcpp.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/testcpp.h
new file mode 100644
index 000000000..06126494a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/testcpp.h
@@ -0,0 +1,137 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#pragma once
+
+#ifdef test_properties
+#include <QtCore/qmetaobject.h>
+#include <QtCore/qproperty.h>
+#include <QtCore/qstring.h>
+#endif
+
+#define QDOCTEST_MACRO test
+#define QDOCTEST_MACRO2(x) (x) < 0 ? 0 : (x))
+
+namespace TestQDoc {
+
+class Test {
+#ifdef test_properties
+ Q_OBJECT
+ Q_PROPERTY(int id READ id)
+#endif
+public:
+
+#ifdef test_template
+template<typename D, typename T> struct Struct {};
+template<typename T>
+using Specialized = Struct<int, T>;
+#endif
+
+#ifdef test_template
+# define Q_INVOKABLE void foo() {};
+#endif
+
+#ifdef test_scopedenum
+ enum ClassicEnum { Yee, Haw, Howdy, Partner };
+
+ enum class ScopedEnum : unsigned char {
+ This = 0x01,
+ That = 0x02,
+ All = This | That,
+ OmittedValue = 99,
+ UselessValue,
+ VeryLastValue
+ };
+#endif
+ typedef struct {
+ int data;
+ } SomeType;
+ int someFunction(int, int v = 0);
+ void someFunctionDefaultArg(int i, bool b) const;
+ void obsoleteMember();
+ void anotherObsoleteMember();
+ void deprecatedMember();
+ void methodWithEnDashInItsDocs();
+ void methodWithEmDashInItsDocs();
+ void func(bool) {};
+ //! [funcPtr]
+ void (*funcPtr(bool b, const char *s))(bool) {
+ return func;
+ }
+ //! [op-inc]
+ Test &operator++() { return *this; }
+ //! [op-dec]
+ Test &operator--() { return *this; }
+
+ void anotherFunc() {};
+ inline void inlineFunction() {};
+ virtual void virtualFun();
+
+ friend bool operator==(const Test &lhs, const Test &rhs) { return false; }
+
+protected:
+ void overload() {}
+ void overload(bool b) { if (!b) return; }
+#ifdef test_template
+ template <typename T1, typename T2> void funcTemplate(T1 a, T2 b) {
+ a = b;
+ }
+#endif
+#ifdef test_properties
+ virtual int id() { return 0; }
+#endif
+};
+
+class TestDerived : public Test {
+#ifdef test_properties
+ Q_OBJECT
+
+ Q_PROPERTY(QString bindableProp READ bindableProp WRITE setBindableProp NOTIFY bindablePropChanged BINDABLE bindableProp)
+ Q_PROPERTY(QString someProp READ someProp BINDABLE somBindableProp)
+ Q_PROPERTY(int *intProp READ getInt STORED false CONSTANT FINAL)
+ Q_PROPERTY(const QString *name READ name)
+ QDOC_PROPERTY(bool boolProp READ boolProp WRITE setBoolProp NOTIFY boolPropChanged RESET resetBoolProp REVISION 1)
+#endif
+
+public:
+ using DerivedType = Test::SomeType;
+ using NotTypedef = int;
+ void virtualFun() override;
+ static void staticObsoleteMember();
+ NotTypedef someValue();
+#ifdef test_properties
+ QBindable<QString> bindableProp();
+ QBindable<QString> someBindableProp();
+ const QString &someProp();
+ int *getInt();
+ bool boolProp();
+ const QString *name() const;
+
+ Q_INVOKABLE void invokeMe() const {}
+ int id() override;
+
+Q_SIGNALS:
+ void emitSomething(QPrivateSignal);
+ void bindablePropChanged();
+ Q_REVISION(1) void boolPropChanged();
+
+public Q_SLOTS:
+ void setBindableProp(const QString &s);
+ void setBoolProp(bool b);
+ void resetBoolProp();
+#endif
+};
+
+#ifdef test_template
+template <typename T>
+struct BaseVec {};
+template <typename T>
+using Vec = BaseVec<T>;
+#endif
+
+} // namespace TestQDoc
+
+namespace CrossModuleRef {
+ void documentMe();
+}
+
+class DontLinkToMe {};
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/unseenclass.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/unseenclass.qdoc
new file mode 100644
index 000000000..8798e3147
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/unseenclass.qdoc
@@ -0,0 +1,11 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+/*!
+ \dontdocument (UnseenClass)
+*/
+
+/*! \page classes.html
+ \title Classes
+ \generatelist annotatedclasses
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/cxx20.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/cxx20.qdocconf
new file mode 100644
index 000000000..f8943e417
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/cxx20.qdocconf
@@ -0,0 +1,32 @@
+project = cxx20
+
+headerdirs = ./src
+sourcedirs = ./src
+exampledirs = ./src
+
+macro.equalitycomparesto = "\\compareswith equality \1\n\\endcompareswith"
+
+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
+
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ./src/images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/bar.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/bar.xml
new file mode 100644
index 000000000..5a6754700
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/bar.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>Bar Class</db:title>
+<db:productname>cxx20</db:productname>
+<db:titleabbrev>cxx20 Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>cxx20 Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>Bar</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/cxx20/expected/docbook/baz.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/baz.xml
new file mode 100644
index 000000000..799e31128
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/baz.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>Baz Class</db:title>
+<db:productname>cxx20</db:productname>
+<db:titleabbrev>cxx20 Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>cxx20 Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>Baz</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/cxx20/expected/docbook/comparesstronglywithoneclassandpartiallywithanother.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/comparesstronglywithoneclassandpartiallywithanother.xml
new file mode 100644
index 000000000..bbfadf732
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/comparesstronglywithoneclassandpartiallywithanother.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>ComparesStronglyWithOneClassAndPartiallyWithAnother Class</db:title>
+<db:productname>cxx20</db:productname>
+<db:titleabbrev>cxx20 Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>Class with various comparison relationships.</db:para>
+<db:para>This class is <db:emphasis role="bold">strongly comparable</db:emphasis> with <db:link xlink:href="foo.xml">Foo</db:link>.</db:para>
+<db:para>This class is <db:emphasis role="bold">partially comparable</db:emphasis> with <db:link xlink:href="bar.xml">Bar</db:link>.</db:para>
+<db:para>Here we describe partial comparison with Bar.</db:para>
+<db:para>This class is <db:emphasis role="bold">equality-comparable</db:emphasis> with <db:link xlink:href="foo.xml">Foo</db:link>.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>ComparesStronglyWithOneClassAndPartiallyWithAnother</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:para>This class compares strongly with one type, and partially with another.</db:para>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/comparesstronglywiththreeclasses.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/comparesstronglywiththreeclasses.xml
new file mode 100644
index 000000000..8c39c4fa7
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/comparesstronglywiththreeclasses.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>ComparesStronglyWithThreeClasses Class</db:title>
+<db:productname>cxx20</db:productname>
+<db:titleabbrev>cxx20 Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>This class is <db:emphasis role="bold">strongly comparable</db:emphasis> with <db:link xlink:href="foo.xml">Foo</db:link>, Bar Bar Jinks, and <db:link xlink:href="baz.xml">Baz</db:link>.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>ComparesStronglyWithThreeClasses</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/cxx20/expected/docbook/comparesstronglywiththreeclassesacrossmultiplelines.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/comparesstronglywiththreeclassesacrossmultiplelines.xml
new file mode 100644
index 000000000..b216d2bbc
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/comparesstronglywiththreeclassesacrossmultiplelines.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>ComparesStronglyWithThreeClassesAcrossMultipleLines Class</db:title>
+<db:productname>cxx20</db:productname>
+<db:titleabbrev>cxx20 Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>This class is <db:emphasis role="bold">strongly comparable</db:emphasis> with <db:link xlink:href="foo.xml">Foo</db:link>, <db:link xlink:href="bar.xml">Bar</db:link>, and <db:link xlink:href="baz.xml">Baz</db:link>.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>ComparesStronglyWithThreeClassesAcrossMultipleLines</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/cxx20/expected/docbook/comparesstronglywithtwoclasses.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/comparesstronglywithtwoclasses.xml
new file mode 100644
index 000000000..0c72faed6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/comparesstronglywithtwoclasses.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>ComparesStronglyWithTwoClasses Class</db:title>
+<db:productname>cxx20</db:productname>
+<db:titleabbrev>cxx20 Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>This class is <db:emphasis role="bold">strongly comparable</db:emphasis> with <db:link xlink:href="foo.xml">Foo</db:link>.</db:para>
+<db:para>This class is <db:emphasis role="bold">strongly comparable</db:emphasis> with <db:link xlink:href="bar.xml">Bar</db:link>.</db:para>
+<db:warning>
+<db:para>Always compare twice!</db:para>
+</db:warning>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>ComparesStronglyWithTwoClasses</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/cxx20/expected/docbook/equalitycomparableclass.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/equalitycomparableclass.xml
new file mode 100644
index 000000000..ed91bb03b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/equalitycomparableclass.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>EqualityComparableClass Class</db:title>
+<db:productname>cxx20</db:productname>
+<db:titleabbrev>cxx20 Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>This class is <db:emphasis>equality-comparable</db:emphasis>.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>EqualityComparableClass</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/cxx20/expected/docbook/foo.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/foo.xml
new file mode 100644
index 000000000..6eee2e060
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/foo.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>Foo Class</db:title>
+<db:productname>cxx20</db:productname>
+<db:titleabbrev>cxx20 Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>cxx20 Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>Foo</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/cxx20/expected/docbook/partiallyorderedclass.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/partiallyorderedclass.xml
new file mode 100644
index 000000000..1be6bcba6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/partiallyorderedclass.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>PartiallyOrderedClass Class</db:title>
+<db:productname>cxx20</db:productname>
+<db:titleabbrev>cxx20 Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>This class is <db:emphasis>partially comparable</db:emphasis>.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>PartiallyOrderedClass</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/cxx20/expected/docbook/stronglyorderedclass.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/stronglyorderedclass.xml
new file mode 100644
index 000000000..146860d7b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/stronglyorderedclass.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>StronglyOrderedClass Class</db:title>
+<db:productname>cxx20</db:productname>
+<db:titleabbrev>cxx20 Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>This class is <db:emphasis>strongly comparable</db:emphasis>.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>StronglyOrderedClass</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/cxx20/expected/docbook/weaklyorderedclass.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/weaklyorderedclass.xml
new file mode 100644
index 000000000..39bbdeeb9
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/docbook/weaklyorderedclass.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>WeaklyOrderedClass Class</db:title>
+<db:productname>cxx20</db:productname>
+<db:titleabbrev>cxx20 Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>This class is <db:emphasis>weakly comparable</db:emphasis>.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>WeaklyOrderedClass</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/cxx20/expected/html/bar.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/bar.html
new file mode 100644
index 000000000..a21a45105
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/bar.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classes_with_various_ordering.cpp -->
+ <title>Bar Class | cxx20</title>
+</head>
+<body>
+<li>Bar</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">Bar Class</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;Bar&gt;</span></td></tr>
+</table></div>
+<!-- $$$Bar-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Bar -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/baz.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/baz.html
new file mode 100644
index 000000000..9044101aa
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/baz.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classes_with_various_ordering.cpp -->
+ <title>Baz Class | cxx20</title>
+</head>
+<body>
+<li>Baz</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">Baz Class</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;Baz&gt;</span></td></tr>
+</table></div>
+<!-- $$$Baz-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Baz -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/comparesstronglywithoneclassandpartiallywithanother.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/comparesstronglywithoneclassandpartiallywithanother.html
new file mode 100644
index 000000000..42847f896
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/comparesstronglywithoneclassandpartiallywithanother.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classes_with_various_ordering.cpp -->
+ <meta name="description" content="Class with various comparison relationships.">
+ <title>ComparesStronglyWithOneClassAndPartiallyWithAnother Class | cxx20</title>
+</head>
+<body>
+<li>ComparesStronglyWithOneClassAndPartiallyWithAnother</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">ComparesStronglyWithOneClassAndPartiallyWithAnother Class</h1>
+<!-- $$$ComparesStronglyWithOneClassAndPartiallyWithAnother-brief -->
+<p>Class with various comparison relationships. <a href="#details">More...</a></p>
+<!-- @@@ComparesStronglyWithOneClassAndPartiallyWithAnother -->
+<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;ComparesStronglyWithOneClassAndPartiallyWithAnother&gt;</span></td></tr>
+</table></div>
+<p>This class is <b>strongly comparable</b> with <a href="foo.html" translate="no">Foo</a>.</p>
+<p>This class is <b>partially comparable</b> with <a href="bar.html" translate="no">Bar</a>.</p>
+<p>Here we describe partial comparison with Bar.</p>
+<p>This class is <b>equality-comparable</b> with <a href="foo.html" translate="no">Foo</a>.</p>
+<!-- $$$ComparesStronglyWithOneClassAndPartiallyWithAnother-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<p>This class compares strongly with one type, and partially with another.</p>
+</div>
+<!-- @@@ComparesStronglyWithOneClassAndPartiallyWithAnother -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/comparesstronglywiththreeclasses.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/comparesstronglywiththreeclasses.html
new file mode 100644
index 000000000..a92815465
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/comparesstronglywiththreeclasses.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classes_with_various_ordering.cpp -->
+ <title>ComparesStronglyWithThreeClasses Class | cxx20</title>
+</head>
+<body>
+<li>ComparesStronglyWithThreeClasses</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">ComparesStronglyWithThreeClasses Class</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;ComparesStronglyWithThreeClasses&gt;</span></td></tr>
+</table></div>
+<p>This class is <b>strongly comparable</b> with <a href="foo.html" translate="no">Foo</a>, Bar Bar Jinks, and <a href="baz.html" translate="no">Baz</a>.</p>
+<!-- $$$ComparesStronglyWithThreeClasses-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@ComparesStronglyWithThreeClasses -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/comparesstronglywiththreeclassesacrossmultiplelines.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/comparesstronglywiththreeclassesacrossmultiplelines.html
new file mode 100644
index 000000000..736e433fd
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/comparesstronglywiththreeclassesacrossmultiplelines.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classes_with_various_ordering.cpp -->
+ <title>ComparesStronglyWithThreeClassesAcrossMultipleLines Class | cxx20</title>
+</head>
+<body>
+<li>ComparesStronglyWithThreeClassesAcrossMultipleLines</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">ComparesStronglyWithThreeClassesAcrossMultipleLines Class</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;ComparesStronglyWithThreeClassesAcrossMultipleLines&gt;</span></td></tr>
+</table></div>
+<p>This class is <b>strongly comparable</b> with <a href="foo.html" translate="no">Foo</a>, <a href="bar.html" translate="no">Bar</a>, and <a href="baz.html" translate="no">Baz</a>.</p>
+<!-- $$$ComparesStronglyWithThreeClassesAcrossMultipleLines-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@ComparesStronglyWithThreeClassesAcrossMultipleLines -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/comparesstronglywithtwoclasses.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/comparesstronglywithtwoclasses.html
new file mode 100644
index 000000000..bd86314ae
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/comparesstronglywithtwoclasses.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classes_with_various_ordering.cpp -->
+ <title>ComparesStronglyWithTwoClasses Class | cxx20</title>
+</head>
+<body>
+<li>ComparesStronglyWithTwoClasses</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">ComparesStronglyWithTwoClasses Class</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;ComparesStronglyWithTwoClasses&gt;</span></td></tr>
+</table></div>
+<p>This class is <b>strongly comparable</b> with <a href="foo.html" translate="no">Foo</a>.</p>
+<p>This class is <b>strongly comparable</b> with <a href="bar.html" translate="no">Bar</a>.</p>
+<div class="admonition warning">
+<p><b>Warning: </b>Always compare twice!</p>
+</div>
+<!-- $$$ComparesStronglyWithTwoClasses-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@ComparesStronglyWithTwoClasses -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/cxx20.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/cxx20.index
new file mode 100644
index 000000000..ab2c3e24f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/cxx20.index
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="cxx20 Reference Documentation" version="" project="cxx20">
+ <namespace name="" status="active" access="public" module="cxx20">
+ <class name="Bar" href="bar.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc"/>
+ <class name="Baz" href="baz.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc"/>
+ <class name="ComparesStronglyWithOneClassAndPartiallyWithAnother" href="comparesstronglywithoneclassandpartiallywithanother.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc" brief="Class with various comparison relationships"/>
+ <class name="ComparesStronglyWithThreeClasses" href="comparesstronglywiththreeclasses.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc"/>
+ <class name="ComparesStronglyWithThreeClassesAcrossMultipleLines" href="comparesstronglywiththreeclassesacrossmultiplelines.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc"/>
+ <class name="ComparesStronglyWithTwoClasses" href="comparesstronglywithtwoclasses.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc"/>
+ <class name="EqualityComparableClass" href="equalitycomparableclass.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc" comparison_category="equality"/>
+ <class name="Foo" href="foo.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc"/>
+ <class name="PartiallyOrderedClass" href="partiallyorderedclass.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc" comparison_category="partial"/>
+ <class name="StronglyOrderedClass" href="stronglyorderedclass.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc" comparison_category="strong"/>
+ <class name="WeaklyOrderedClass" href="weaklyorderedclass.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc" comparison_category="weak"/>
+ <module name="TestQDoc" href="testqdoc-module.html" status="internal" seen="false" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/equalitycomparableclass.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/equalitycomparableclass.html
new file mode 100644
index 000000000..24303bb97
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/equalitycomparableclass.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classes_with_various_ordering.cpp -->
+ <title>EqualityComparableClass Class | cxx20</title>
+</head>
+<body>
+<li>EqualityComparableClass</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">EqualityComparableClass Class</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;EqualityComparableClass&gt;</span></td></tr>
+</table></div>
+<p>This class is <i>equality-comparable</i>.</p>
+<!-- $$$EqualityComparableClass-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@EqualityComparableClass -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/foo.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/foo.html
new file mode 100644
index 000000000..ba40175c6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/foo.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classes_with_various_ordering.cpp -->
+ <title>Foo Class | cxx20</title>
+</head>
+<body>
+<li>Foo</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">Foo Class</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;Foo&gt;</span></td></tr>
+</table></div>
+<!-- $$$Foo-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Foo -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/partiallyorderedclass.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/partiallyorderedclass.html
new file mode 100644
index 000000000..359742532
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/partiallyorderedclass.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classes_with_various_ordering.cpp -->
+ <title>PartiallyOrderedClass Class | cxx20</title>
+</head>
+<body>
+<li>PartiallyOrderedClass</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">PartiallyOrderedClass Class</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;PartiallyOrderedClass&gt;</span></td></tr>
+</table></div>
+<p>This class is <i>partially comparable</i>.</p>
+<!-- $$$PartiallyOrderedClass-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@PartiallyOrderedClass -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/stronglyorderedclass.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/stronglyorderedclass.html
new file mode 100644
index 000000000..d4972aaa6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/stronglyorderedclass.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classes_with_various_ordering.cpp -->
+ <title>StronglyOrderedClass Class | cxx20</title>
+</head>
+<body>
+<li>StronglyOrderedClass</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">StronglyOrderedClass Class</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;StronglyOrderedClass&gt;</span></td></tr>
+</table></div>
+<p>This class is <i>strongly comparable</i>.</p>
+<!-- $$$StronglyOrderedClass-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@StronglyOrderedClass -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/weaklyorderedclass.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/weaklyorderedclass.html
new file mode 100644
index 000000000..0849b2a1b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/html/weaklyorderedclass.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classes_with_various_ordering.cpp -->
+ <title>WeaklyOrderedClass Class | cxx20</title>
+</head>
+<body>
+<li>WeaklyOrderedClass</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">WeaklyOrderedClass Class</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;WeaklyOrderedClass&gt;</span></td></tr>
+</table></div>
+<p>This class is <i>weakly comparable</i>.</p>
+<!-- $$$WeaklyOrderedClass-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@WeaklyOrderedClass -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/bar.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/bar.webxml
new file mode 100644
index 000000000..a4e70b190
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/bar.webxml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="Bar" href="bar.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc">
+ <description/>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/baz.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/baz.webxml
new file mode 100644
index 000000000..18eff7e9c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/baz.webxml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="Baz" href="baz.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc">
+ <description/>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/comparesstronglywithoneclassandpartiallywithanother.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/comparesstronglywithoneclassandpartiallywithanother.webxml
new file mode 100644
index 000000000..a296ae73f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/comparesstronglywithoneclassandpartiallywithanother.webxml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="ComparesStronglyWithOneClassAndPartiallyWithAnother" href="comparesstronglywithoneclassandpartiallywithanother.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc" brief="Class with various comparison relationships">
+ <description>
+ <brief>Class with various comparison relationships.</brief>
+ <para>This class compares strongly with one type, and partially with another.</para>
+ </description>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/comparesstronglywiththreeclasses.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/comparesstronglywiththreeclasses.webxml
new file mode 100644
index 000000000..c58fd61a5
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/comparesstronglywiththreeclasses.webxml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="ComparesStronglyWithThreeClasses" href="comparesstronglywiththreeclasses.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc">
+ <description/>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/comparesstronglywiththreeclassesacrossmultiplelines.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/comparesstronglywiththreeclassesacrossmultiplelines.webxml
new file mode 100644
index 000000000..971a554ba
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/comparesstronglywiththreeclassesacrossmultiplelines.webxml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="ComparesStronglyWithThreeClassesAcrossMultipleLines" href="comparesstronglywiththreeclassesacrossmultiplelines.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc">
+ <description/>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/comparesstronglywithtwoclasses.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/comparesstronglywithtwoclasses.webxml
new file mode 100644
index 000000000..524689e0a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/comparesstronglywithtwoclasses.webxml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="ComparesStronglyWithTwoClasses" href="comparesstronglywithtwoclasses.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc">
+ <description/>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/cxx20.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/cxx20.index
new file mode 100644
index 000000000..ab2c3e24f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/cxx20.index
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="cxx20 Reference Documentation" version="" project="cxx20">
+ <namespace name="" status="active" access="public" module="cxx20">
+ <class name="Bar" href="bar.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc"/>
+ <class name="Baz" href="baz.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc"/>
+ <class name="ComparesStronglyWithOneClassAndPartiallyWithAnother" href="comparesstronglywithoneclassandpartiallywithanother.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc" brief="Class with various comparison relationships"/>
+ <class name="ComparesStronglyWithThreeClasses" href="comparesstronglywiththreeclasses.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc"/>
+ <class name="ComparesStronglyWithThreeClassesAcrossMultipleLines" href="comparesstronglywiththreeclassesacrossmultiplelines.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc"/>
+ <class name="ComparesStronglyWithTwoClasses" href="comparesstronglywithtwoclasses.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc"/>
+ <class name="EqualityComparableClass" href="equalitycomparableclass.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc" comparison_category="equality"/>
+ <class name="Foo" href="foo.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc"/>
+ <class name="PartiallyOrderedClass" href="partiallyorderedclass.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc" comparison_category="partial"/>
+ <class name="StronglyOrderedClass" href="stronglyorderedclass.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc" comparison_category="strong"/>
+ <class name="WeaklyOrderedClass" href="weaklyorderedclass.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc" comparison_category="weak"/>
+ <module name="TestQDoc" href="testqdoc-module.html" status="internal" seen="false" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/equalitycomparableclass.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/equalitycomparableclass.webxml
new file mode 100644
index 000000000..32d48bd41
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/equalitycomparableclass.webxml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="EqualityComparableClass" href="equalitycomparableclass.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc" comparison_category="equality">
+ <description/>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/foo.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/foo.webxml
new file mode 100644
index 000000000..e36896ca9
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/foo.webxml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="Foo" href="foo.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc">
+ <description/>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/partiallyorderedclass.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/partiallyorderedclass.webxml
new file mode 100644
index 000000000..fd41aa9a8
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/partiallyorderedclass.webxml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="PartiallyOrderedClass" href="partiallyorderedclass.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc" comparison_category="partial">
+ <description/>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/stronglyorderedclass.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/stronglyorderedclass.webxml
new file mode 100644
index 000000000..7f8440a60
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/stronglyorderedclass.webxml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="StronglyOrderedClass" href="stronglyorderedclass.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc" comparison_category="strong">
+ <description/>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/weaklyorderedclass.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/weaklyorderedclass.webxml
new file mode 100644
index 000000000..d8580e92b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/expected/webxml/weaklyorderedclass.webxml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="WeaklyOrderedClass" href="weaklyorderedclass.html" status="active" access="public" location="classes_with_various_ordering.h" documented="true" module="TestQDoc" comparison_category="weak">
+ <description/>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/src/classes_with_various_ordering.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/src/classes_with_various_ordering.cpp
new file mode 100644
index 000000000..c9029e446
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/src/classes_with_various_ordering.cpp
@@ -0,0 +1,89 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+/*!
+ \class StronglyOrderedClass
+ \inmodule TestQDoc
+ \compares strong
+*/
+
+/*!
+ \class PartiallyOrderedClass
+ \inmodule TestQDoc
+ \compares partial
+*/
+
+/*!
+ \class WeaklyOrderedClass
+ \inmodule TestQDoc
+ \compares weak
+*/
+
+/*!
+ \class EqualityComparableClass
+ \inmodule TestQDoc
+ \compares equality
+*/
+
+/*!
+ \class ComparesStronglyWithTwoClasses
+ \inmodule TestQDoc
+
+ \compareswith strong Foo
+ \endcompareswith
+
+ \compareswith strong Bar
+ \warning Always compare twice!
+ \endcompareswith
+*/
+
+/*!
+ \class ComparesStronglyWithThreeClasses
+ \inmodule TestQDoc
+
+ \compareswith strong Foo {Bar Bar Jinks} Baz
+ \endcompareswith
+*/
+
+/*!
+ \class ComparesStronglyWithThreeClassesAcrossMultipleLines
+ \inmodule TestQDoc
+
+ \compareswith strong Foo \
+ Bar Baz
+ \endcompareswith
+*/
+
+/*!
+ \class ComparesStronglyWithOneClassAndPartiallyWithAnother
+ \inmodule TestQDoc
+ \brief Class with various comparison relationships.
+
+ \compareswith strong Foo
+ \endcompareswith
+
+ \compareswith partial Bar
+ Here we describe partial comparison with Bar.
+ \endcompareswith
+
+ //! using a macro
+ \equalitycomparesto {Foo}
+
+ This class compares strongly with one type, and partially with another.
+*/
+
+
+/*!
+ \class Foo
+ \inmodule TestQDoc
+*/
+
+/*!
+ \class Bar
+ \inmodule TestQDoc
+*/
+
+/*!
+ \class Baz
+ \inmodule TestQDoc
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/src/classes_with_various_ordering.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/src/classes_with_various_ordering.h
new file mode 100644
index 000000000..4c9f6970e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/cxx20/src/classes_with_various_ordering.h
@@ -0,0 +1,41 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef CLASSES_WITH_VARIOUS_ORDERING_H
+#define CLASSES_WITH_VARIOUS_ORDERING_H
+
+class StronglyOrderedClass
+{
+};
+class PartiallyOrderedClass
+{
+};
+class WeaklyOrderedClass
+{
+};
+class EqualityComparableClass
+{
+};
+class ComparesStronglyWithTwoClasses
+{
+};
+class ComparesStronglyWithThreeClasses
+{
+};
+class ComparesStronglyWithThreeClassesAcrossMultipleLines
+{
+};
+class ComparesStronglyWithOneClassAndPartiallyWithAnother
+{
+};
+class Foo
+{
+};
+class Bar
+{
+};
+class Baz
+{
+};
+
+#endif // CLASSES_WITH_VARIOUS_ORDERING_H
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/duplicate_section_titles_have_unique_anchors.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/duplicate_section_titles_have_unique_anchors.qdocconf
new file mode 100644
index 000000000..d1ebe89d0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/duplicate_section_titles_have_unique_anchors.qdocconf
@@ -0,0 +1,25 @@
+project = Duplicate section titles have unique anchors
+
+locationinfo = false
+
+headers.fileextensions = "*.h *.hpp"
+sources.fileextensions = "*.cpp *.qml *.qdoc"
+
+headerdirs = .
+sourcedirs = ./src
+
+warninglimit = 0
+warninglimit.enabled = true
+
+outputformats = WebXML HTML DocBook
+WebXML.quotinginformation = true
+
+HTML.nosubdirs = true
+HTML.outputsubdir = html
+
+WebXML.nosubdirs = true
+WebXML.outputsubdir = webxml
+
+DocBook.nosubdirs = true
+DocBook.outputsubdir = docbook
+
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/expected/docbook/page-one.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/expected/docbook/page-one.xml
new file mode 100644
index 000000000..350130f15
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/expected/docbook/page-one.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>Page One</db:title>
+<db:productname>Duplicate section titles have unique anchors</db:productname>
+<db:titleabbrev>Duplicate section titles have unique anchors Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>Duplicate section titles have unique anchors Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:para>This test is for a documentation project with multiple section titles whose names collide.</db:para>
+<db:section xml:id="section-one">
+<db:title>Section One</db:title>
+<db:para>This is the first section.</db:para>
+<db:section xml:id="section-two">
+<db:title>Section Two</db:title>
+<db:para>This is the first sub-section.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="section-one-2">
+<db:title>Section One</db:title>
+<db:para>This is the second section.</db:para>
+<db:section xml:id="section-one-2-section-two-3">
+<db:title>Section Two</db:title>
+<db:para>This is the second sub-section.</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/expected/html/duplicate-section-titles-have-unique-anchors.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/expected/html/duplicate-section-titles-have-unique-anchors.index
new file mode 100644
index 000000000..3f5d2a9af
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/expected/html/duplicate-section-titles-have-unique-anchors.index
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="Duplicate section titles have unique anchors Reference Documentation" version="" project="Duplicate section titles have unique anchors">
+ <namespace name="" status="active" access="public" module="duplicate section titles have unique anchors">
+ <page name="page_one.html" href="page-one.html" status="active" location="page_one.qdoc" documented="true" subtype="page" title="Page One" fulltitle="Page One" subtitle="">
+ <contents name="section-one" title="Section One" level="1"/>
+ <contents name="section-two" title="Section Two" level="2"/>
+ <contents name="section-one-2" title="Section One" level="1"/>
+ <contents name="section-one-2-section-two-3" title="Section Two" level="2"/>
+ </page>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/expected/html/page-one.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/expected/html/page-one.html
new file mode 100644
index 000000000..5f6501bfa
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/expected/html/page-one.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- page_one.qdoc -->
+ <title>Page One | Duplicate section titles have unique anchors</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#section-one">Section One</a></li>
+<li class="level2"><a href="#section-two">Section Two</a></li>
+<li class="level1"><a href="#section-one-2">Section One</a></li>
+<li class="level2"><a href="#section-one-2-section-two-3">Section Two</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Page One</h1>
+<!-- $$$page_one.html-description -->
+<div class="descr" id="details">
+<p>This test is for a documentation project with multiple section titles whose names collide.</p>
+<h2 id="section-one">Section One</h2>
+<p>This is the first section.</p>
+<h3 id="section-two">Section Two</h3>
+<p>This is the first sub-section.</p>
+<h2 id="section-one-2">Section One</h2>
+<p>This is the second section.</p>
+<h3 id="section-one-2-section-two-3">Section Two</h3>
+<p>This is the second sub-section.</p>
+</div>
+<!-- @@@page_one.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/expected/webxml/duplicate-section-titles-have-unique-anchors.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/expected/webxml/duplicate-section-titles-have-unique-anchors.index
new file mode 100644
index 000000000..3f5d2a9af
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/expected/webxml/duplicate-section-titles-have-unique-anchors.index
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="Duplicate section titles have unique anchors Reference Documentation" version="" project="Duplicate section titles have unique anchors">
+ <namespace name="" status="active" access="public" module="duplicate section titles have unique anchors">
+ <page name="page_one.html" href="page-one.html" status="active" location="page_one.qdoc" documented="true" subtype="page" title="Page One" fulltitle="Page One" subtitle="">
+ <contents name="section-one" title="Section One" level="1"/>
+ <contents name="section-two" title="Section Two" level="2"/>
+ <contents name="section-one-2" title="Section One" level="1"/>
+ <contents name="section-one-2-section-two-3" title="Section Two" level="2"/>
+ </page>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/expected/webxml/page-one.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/expected/webxml/page-one.webxml
new file mode 100644
index 000000000..98c92b784
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/expected/webxml/page-one.webxml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="page_one.html" href="page-one.html" status="active" location="page_one.qdoc" documented="true" subtype="page" title="Page One" fulltitle="Page One" subtitle="">
+ <contents name="section-one" title="Section One" level="1"/>
+ <contents name="section-two" title="Section Two" level="2"/>
+ <contents name="section-one-2" title="Section One" level="1"/>
+ <contents name="section-one-2-section-two-3" title="Section Two" level="2"/>
+ <description>
+ <para>This test is for a documentation project with multiple section titles whose names collide.</para>
+ <section id="section-one">
+ <heading level="1">Section One</heading>
+ <para>This is the first section.</para>
+ </section>
+ <section id="section-two">
+ <heading level="2">Section Two</heading>
+ <para>This is the first sub-section.</para>
+ </section>
+ <section id="section-one">
+ <heading level="1">Section One</heading>
+ <para>This is the second section.</para>
+ </section>
+ <section id="section-two">
+ <heading level="2">Section Two</heading>
+ <para>This is the second sub-section.</para>
+ </section>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/src/page_one.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/src/page_one.qdoc
new file mode 100644
index 000000000..4596ffccd
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/duplicate_section_titles_have_unique_anchors/src/page_one.qdoc
@@ -0,0 +1,21 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page page_one.html
+ \title Page One
+
+ This test is for a documentation project with multiple section titles whose names collide.
+
+ \section1 Section One
+ This is the first section.
+
+ \section2 Section Two
+ This is the first sub-section.
+
+ \section1 Section One
+ This is the second section.
+
+ \section2 Section Two
+ This is the second sub-section.
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/expected/html/globals.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/expected/html/globals.html
new file mode 100644
index 000000000..92f6883ee
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/expected/html/globals.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- global.qdoc -->
+ <title>Globals Class | TestGlobals</title>
+</head>
+<body>
+<li>Globals</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#related-non-members">Related Non-Members</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">Globals Class</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;Globals&gt;</span></td></tr>
+</table></div>
+<h2 id="related-non-members">Related Non-Members</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> int </td><td class="memItemRight bottomAlign"><b><a href="globals.html#foo" translate="no">foo</a></b>(int <i>a</i>)</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> int </td><td class="memItemRight bottomAlign"><b><a href="globals.html#foo-1" translate="no">foo</a></b>(int <i>a</i>, bool <i>b</i>)</td></tr>
+</table></div>
+<!-- $$$Globals-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Globals -->
+<div class="relnonmem">
+<h2>Related Non-Members</h2>
+<!-- $$$foo[overload1]$$$fooint -->
+<h3 class="fn" translate="no" id="foo"><span class="type">int</span> <span class="name">foo</span>(<span class="type">int</span> <i>a</i>)</h3>
+<p>Params: <i translate="no">a</i></p>
+<!-- @@@foo -->
+<!-- $$$foo$$$foointbool -->
+<h3 class="fn" translate="no" id="foo-1"><span class="type">int</span> <span class="name">foo</span>(<span class="type">int</span> <i>a</i>, <span class="type">bool</span> <i>b</i>)</h3>
+<p>Params: <i translate="no">b</i>, <i translate="no">b</i></p>
+<!-- @@@foo -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/expected/html/testglobals-module.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/expected/html/testglobals-module.html
new file mode 100644
index 000000000..23f59510c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/expected/html/testglobals-module.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- global.qdoc -->
+ <title>TestGlobals</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="classes">Classes</h2>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="globals.html">Globals</a></p></td></tr>
+</table></div>
+<!-- $$$TestGlobals-description -->
+<div class="descr" id="details">
+<p>A collection of <a href="globals.html#foo" translate="no">foo</a>() functions.</p>
+</div>
+<!-- @@@TestGlobals -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/expected/html/testglobals.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/expected/html/testglobals.index
new file mode 100644
index 000000000..f1f0871d3
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/expected/html/testglobals.index
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="TestGlobals Reference Documentation" version="" project="TestGlobals">
+ <namespace name="" status="active" access="public" module="testglobals">
+ <function name="foo" href="globals.html#foo" status="active" access="public" location="global.h" documented="true" related="0" meta="plain" type="int" signature="int foo(int a)">
+ <parameter type="int" name="a" default=""/>
+ </function>
+ <function name="foo" href="globals.html#foo-1" status="active" access="public" location="global.h" documented="true" related="1" meta="plain" overload="true" overload-number="1" type="int" signature="int foo(int a, bool b)">
+ <parameter type="int" name="a" default=""/>
+ <parameter type="bool" name="b" default=""/>
+ </function>
+ <class name="Globals" href="globals.html" status="active" access="public" location="global.h" documented="true" module="TestGlobals">
+ <function name="foo" href="globals.html#foo" status="active" access="public" location="global.h" documented="true" related="0" meta="plain" type="int" signature="int foo(int a)">
+ <parameter type="int" name="a" default=""/>
+ </function>
+ <function name="foo" href="globals.html#foo-1" status="active" access="public" location="global.h" documented="true" related="1" meta="plain" overload="true" overload-number="1" type="int" signature="int foo(int a, bool b)">
+ <parameter type="int" name="a" default=""/>
+ <parameter type="bool" name="b" default=""/>
+ </function>
+ </class>
+ <module name="TestGlobals" href="testglobals-module.html" status="active" location="global.qdoc" documented="true" seen="true" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/globalfunc.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/globalfunc.qdocconf
new file mode 100644
index 000000000..fb28478bf
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/globalfunc.qdocconf
@@ -0,0 +1,23 @@
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ./src/images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+# By default, use -outputdir directly, no subdir.
+# outputsubdir '.' matches the root of expected_output/
+HTML.nosubdirs = true
+HTML.outputsubdir = html
+
+project = TestGlobals
+includepaths += -I./src/globalfunc
+
+headers = ./src/global.h
+sources = ./src/global.qdoc
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/src/TestGlobals b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/src/TestGlobals
new file mode 100644
index 000000000..dc4f98a6e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/src/TestGlobals
@@ -0,0 +1 @@
+#include "global.h"
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/src/global.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/src/global.h
new file mode 100644
index 000000000..8b5290072
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/src/global.h
@@ -0,0 +1,8 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+class Globals {};
+inline int foo(int a) { return a; }
+inline int foo(int a, bool b) { return b ? a : -a; }
+// Undocumented overload
+inline int foo(int a, bool b, bool c) { return b || c ? a : -a; }
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/src/global.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/src/global.qdoc
new file mode 100644
index 000000000..f61ed5f58
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/globalfunc/src/global.qdoc
@@ -0,0 +1,25 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+/*!
+ \module TestGlobals
+
+ A collection of \l foo() functions.
+*/
+
+/*!
+ \class Globals
+ \inmodule TestGlobals
+*/
+
+/*!
+ \fn int foo(int a)
+ \relates Globals
+ Params: \a a
+*/
+
+/*!
+ \fn int foo(int a, bool b)
+ \relates Globals
+ Params: \a b, \a b
+*/
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/headerfile-docbook/headers.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/docbook/headers.xml
index 052108b2a..052108b2a 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/headerfile-docbook/headers.xml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/docbook/headers.xml
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/docbook/testheader.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/docbook/testheader.xml
new file mode 100644
index 000000000..03a49cb67
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/docbook/testheader.xml
@@ -0,0 +1,68 @@
+<?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;TestHeader&gt; - Test Header</db:title>
+<db:productname>HeaderFile</db:productname>
+<db:titleabbrev>HeaderFile Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>A header file.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>TestHeader</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Group</db:term>
+<db:listitem>
+<db:para>&lt;TestHeader&gt; is part of <db:simplelist><db:member><db:link xlink:href="headers.xml">Headers</db:link></db:member><db:member><db:link xlink:href="tests.xml">Tests</db:link></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>
+<db:section xml:id="type-documentation">
+<db:title>Type Documentation</db:title>
+<db:section xml:id="Globals-enum">
+<db:title>enum Globals</db:title>
+<db:informaltable>
+<db:thead>
+<db:tr>
+<db:th>Constant</db:th>
+</db:tr>
+</db:thead>
+<db:tr>
+<db:td>
+<db:para><db:code>Glo</db:code></db:para>
+</db:td>
+<db:td><db:code>0</db:code></db:td>
+</db:tr>
+<db:tr>
+<db:td>
+<db:para><db:code>Bal</db:code></db:para>
+</db:td>
+<db:td><db:code>1</db:code></db:td>
+</db:tr>
+</db:informaltable>
+</db:section>
+</db:section>
+<db:section xml:id="variable-documentation">
+<db:title>Variable Documentation</db:title>
+<db:section xml:id="globalVar-var">
+<db:title>const int globalVar</db:title>
+<db:para>Global variable.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="function-documentation">
+<db:title>Function Documentation</db:title>
+<db:section xml:id="globalFunc">
+<db:title>void globalFunc()</db:title>
+<db:para>Global function.</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/docbook/tests.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/docbook/tests.xml
new file mode 100644
index 000000000..25f95affd
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/docbook/tests.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>Tests</db:title>
+<db:productname>HeaderFile</db:productname>
+<db:titleabbrev>HeaderFile Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>HeaderFile 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="testheader.xml" xlink:role="">&lt;TestHeader&gt;</db:link></db:term>
+<db:listitem>
+<db:para>A header file.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/html/headerfile.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/html/headerfile.index
new file mode 100644
index 000000000..cf72522f9
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/html/headerfile.index
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="HeaderFile Reference Documentation" version="" project="HeaderFile">
+ <namespace name="" status="active" access="public" module="headerfile">
+ <function name="globalFunc" href="testheader.html#globalFunc" status="active" access="public" location="testheader.h" documented="true" related="0" meta="plain" type="void" brief="Global function" signature="void globalFunc()"/>
+ <header name="&lt;TestHeader&gt;" href="testheader.html" status="active" documented="true" groups="headers,tests" module="TestCPP" brief="A header file" title="Test Header" fulltitle="&lt;TestHeader&gt; - Test Header" subtitle="">
+ <function name="globalFunc" href="testheader.html#globalFunc" status="active" access="public" location="testheader.h" documented="true" related="0" meta="plain" type="void" brief="Global function" signature="void globalFunc()"/>
+ <enum name="Globals" href="testheader.html#Globals-enum" status="active" access="public" location="testheader.h" related="1" documented="true">
+ <value name="Glo" value="0"/>
+ <value name="Bal" value="1"/>
+ </enum>
+ <variable name="globalVar" href="testheader.html#globalVar-var" status="active" access="public" location="testheader.h" related="2" documented="true" type="const int" static="false" brief="Global variable"/>
+ </header>
+ <enum name="Globals" href="testheader.html#Globals-enum" status="active" access="public" location="testheader.h" related="1" documented="true">
+ <value name="Glo" value="0"/>
+ <value name="Bal" value="1"/>
+ </enum>
+ <variable name="globalVar" href="testheader.html#globalVar-var" status="active" access="public" location="testheader.h" related="2" documented="true" type="const int" static="false" brief="Global variable"/>
+ <group name="headers" href="headers.html" status="active" documented="true" seen="true" title="Headers"/>
+ <group name="tests" href="tests.html" status="active" documented="true" seen="true" title="Tests"/>
+ <module name="TestCPP" href="testcpp-module.html" status="internal" seen="false" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/html/headers.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/html/headers.html
new file mode 100644
index 000000000..1a60ec30b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/html/headers.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testheader.cpp -->
+ <title>Headers | HeaderFile</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Headers</h1>
+<!-- $$$headers-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@headers -->
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="testheader.html">&lt;TestHeader&gt;</a></p></td><td class="tblDescr"><p>A header file</p></td></tr>
+</table></div>
+</body>
+</html>
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
new file mode 100644
index 000000000..9952a0fb3
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/html/testheader.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testheader.cpp -->
+ <meta name="description" content="A header file.">
+ <title>&lt;TestHeader&gt; - Test Header | HeaderFile</title>
+</head>
+<body>
+<li><a href="headers.html" translate="no">Headers</a></li>
+<li>&lt;TestHeader&gt; - Test Header</li>
+<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;TestHeader&gt; - Test Header</h1>
+<!-- $$$<TestHeader>-brief -->
+<p>A header file. <a href="#details">More...</a></p>
+<!-- @@@<TestHeader> -->
+<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;TestHeader&gt;</span></td></tr>
+</table></div>
+<ul>
+<li><TestHeader> is part of <a href="headers.html">Headers</a> and <a href="tests.html">Tests</a>.</li>
+</ul>
+<h2 id="types">Types</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> enum </td><td class="memItemRight bottomAlign"><b><a href="testheader.html#Globals-enum" translate="no">Globals</a></b> { Glo, Bal }</td></tr>
+</table></div>
+<h2 id="variables">Variables</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> const int </td><td class="memItemRight bottomAlign"><b><a href="testheader.html#globalVar-var" translate="no">globalVar</a></b></td></tr>
+</table></div>
+<h2 id="functions">Functions</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testheader.html#globalFunc" translate="no">globalFunc</a></b>()</td></tr>
+</table></div>
+<!-- $$$<TestHeader>-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@<TestHeader> -->
+<div class="types">
+<h2>Type Documentation</h2>
+<!-- $$$Globals$$$Glo$$$Bal -->
+<h3 class="fn" translate="no" id="Globals-enum">enum <span class="name">Globals</span></h3>
+<div class="table"><table class="valuelist"><tr><th class="tblConst">Constant</th><th class="tblVal">Value</th></tr>
+<tr><td class="topAlign"><code translate="no">Glo</code></td><td class="topAlign tblval"><code translate="no">0</code></td></tr>
+<tr><td class="topAlign"><code translate="no">Bal</code></td><td class="topAlign tblval"><code translate="no">1</code></td></tr>
+</table></div>
+<!-- @@@Globals -->
+</div>
+<div class="vars">
+<h2>Variable Documentation</h2>
+<!-- $$$globalVar -->
+<h3 class="fn" translate="no" id="globalVar-var">const <span class="type">int</span> <span class="name">globalVar</span></h3>
+<p>Global variable.</p>
+<!-- @@@globalVar -->
+</div>
+<div class="func">
+<h2>Function Documentation</h2>
+<!-- $$$globalFunc[overload1]$$$globalFunc -->
+<h3 class="fn" translate="no" id="globalFunc"><span class="type">void</span> <span class="name">globalFunc</span>()</h3>
+<p>Global function.</p>
+<!-- @@@globalFunc -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/html/tests.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/html/tests.html
new file mode 100644
index 000000000..a4221f375
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/html/tests.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testheader.cpp -->
+ <title>Tests | HeaderFile</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Tests</h1>
+<!-- $$$tests-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@tests -->
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="testheader.html">&lt;TestHeader&gt;</a></p></td><td class="tblDescr"><p>A header file</p></td></tr>
+</table></div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/webxml/headerfile.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/webxml/headerfile.index
new file mode 100644
index 000000000..cf72522f9
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/webxml/headerfile.index
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="HeaderFile Reference Documentation" version="" project="HeaderFile">
+ <namespace name="" status="active" access="public" module="headerfile">
+ <function name="globalFunc" href="testheader.html#globalFunc" status="active" access="public" location="testheader.h" documented="true" related="0" meta="plain" type="void" brief="Global function" signature="void globalFunc()"/>
+ <header name="&lt;TestHeader&gt;" href="testheader.html" status="active" documented="true" groups="headers,tests" module="TestCPP" brief="A header file" title="Test Header" fulltitle="&lt;TestHeader&gt; - Test Header" subtitle="">
+ <function name="globalFunc" href="testheader.html#globalFunc" status="active" access="public" location="testheader.h" documented="true" related="0" meta="plain" type="void" brief="Global function" signature="void globalFunc()"/>
+ <enum name="Globals" href="testheader.html#Globals-enum" status="active" access="public" location="testheader.h" related="1" documented="true">
+ <value name="Glo" value="0"/>
+ <value name="Bal" value="1"/>
+ </enum>
+ <variable name="globalVar" href="testheader.html#globalVar-var" status="active" access="public" location="testheader.h" related="2" documented="true" type="const int" static="false" brief="Global variable"/>
+ </header>
+ <enum name="Globals" href="testheader.html#Globals-enum" status="active" access="public" location="testheader.h" related="1" documented="true">
+ <value name="Glo" value="0"/>
+ <value name="Bal" value="1"/>
+ </enum>
+ <variable name="globalVar" href="testheader.html#globalVar-var" status="active" access="public" location="testheader.h" related="2" documented="true" type="const int" static="false" brief="Global variable"/>
+ <group name="headers" href="headers.html" status="active" documented="true" seen="true" title="Headers"/>
+ <group name="tests" href="tests.html" status="active" documented="true" seen="true" title="Tests"/>
+ <module name="TestCPP" href="testcpp-module.html" status="internal" seen="false" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/webxml/headers.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/webxml/headers.webxml
new file mode 100644
index 000000000..6fdc7de0b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/webxml/headers.webxml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <group name="headers" href="headers.html" status="active" documented="true" seen="true" title="Headers">
+ <description>
+ <table width="100%">
+ <row>
+ <item>
+ <para>
+ <link raw="&lt;TestHeader&gt;" href="testheader.html" type=""/>
+ </para>
+ </item>
+ <item>
+ <para>A header file.</para>
+ </item>
+ </row>
+ </table>
+ </description>
+ </group>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/webxml/testheader.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/webxml/testheader.webxml
new file mode 100644
index 000000000..fcc37e5ca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/webxml/testheader.webxml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <header name="&lt;TestHeader&gt;" href="testheader.html" status="active" documented="true" groups="headers,tests" module="TestCPP" brief="A header file" title="Test Header" fulltitle="&lt;TestHeader&gt; - Test Header" subtitle="">
+ <description>
+ <brief>A header file.</brief>
+ </description>
+ <function name="globalFunc" href="testheader.html#globalFunc" status="active" access="public" location="testheader.h" documented="true" related="0" meta="plain" type="void" brief="Global function" signature="void globalFunc()">
+ <description>
+ <brief>Global function.</brief>
+ </description>
+ </function>
+ <enum name="Globals" href="testheader.html#Globals-enum" status="active" access="public" location="testheader.h" related="1" documented="true">
+ <value name="Glo" value="0"/>
+ <value name="Bal" value="1"/>
+ <description>
+ <list type="enum">
+ <definition>
+ <term>Glo</term>Glo</definition>
+ <item/>
+ <definition>
+ <term>Bal</term>Bal</definition>
+ <item/>
+ </list>
+ </description>
+ </enum>
+ <variable name="globalVar" href="testheader.html#globalVar-var" status="active" access="public" location="testheader.h" related="2" documented="true" type="const int" static="false" brief="Global variable">
+ <description>
+ <brief>This variable holds Global variable..</brief>
+ </description>
+ </variable>
+ </header>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/webxml/tests.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/webxml/tests.webxml
new file mode 100644
index 000000000..7c3deb373
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/webxml/tests.webxml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <group name="tests" href="tests.html" status="active" documented="true" seen="true" title="Tests">
+ <description>
+ <table width="100%">
+ <row>
+ <item>
+ <para>
+ <link raw="&lt;TestHeader&gt;" href="testheader.html" type=""/>
+ </para>
+ </item>
+ <item>
+ <para>A header file.</para>
+ </item>
+ </row>
+ </table>
+ </description>
+ </group>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/headerfile.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/headerfile.qdocconf
new file mode 100644
index 000000000..b449319cc
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/headerfile.qdocconf
@@ -0,0 +1,25 @@
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ./src/images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+project = HeaderFile
+moduleheader = .src/testheader.h
+
+{includepaths,sourcedirs,headerdirs} += ./src
+
+outputformats = HTML WebXML DocBook
+HTML.nosubdirs = true
+HTML.outputsubdir = html
+WebXML.nosubdirs = true
+WebXML.outputsubdir = webxml
+DocBook.nosubdirs = true
+DocBook.outputsubdir = docbook
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/src/testheader.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/src/testheader.cpp
new file mode 100644
index 000000000..43c512f36
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/src/testheader.cpp
@@ -0,0 +1,43 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "testheader.h"
+
+const int globalVar = 0;
+
+/*!
+ \headerfile <TestHeader>
+ \title Test Header
+ \inmodule TestCPP
+ \brief A header file.
+ \ingroup headers
+ \ingroup tests
+*/
+
+/*!
+ \group headers
+ \title Headers
+*/
+
+/*! \group tests
+ \title Tests
+*/
+
+/*!
+ \fn void globalFunc()
+ \brief Global function.
+ \relates <TestHeader>
+*/
+
+/*!
+ \variable globalVar
+ \brief Global variable.
+ \relates <TestHeader>
+*/
+
+/*!
+ \enum Globals
+ \relates <TestHeader>
+ \value Glo
+ \value Bal
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/src/testheader.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/src/testheader.h
new file mode 100644
index 000000000..5ea361685
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/src/testheader.h
@@ -0,0 +1,8 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+void globalFunc() {};
+enum Globals { Glo, Bal };
+extern const int globalVar;
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/another-page-with-comments-in-the-brief.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/another-page-with-comments-in-the-brief.html
new file mode 100644
index 000000000..71ef2af25
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/another-page-with-comments-in-the-brief.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- brief_adventures.qdoc -->
+ <meta name="description" content="Another test that the \brief command isn't completely borked">
+ <title>There's no end to the possibilities! | IllformattedDocumentation</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">There's no end to the possibilities!</h1>
+<!-- $$$another-page-with-comments-in-the-brief-description -->
+<div class="descr" id="details">
+<p>The brief for this page is: &quot;Another test that the \brief command isn't completely borked&quot;. Notice the lack of a trailing full stop in the brief. QDoc should generate a warning about that when generating HTML.</p>
+</div>
+<!-- @@@another-page-with-comments-in-the-brief -->
+</body>
+</html>
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
new file mode 100644
index 000000000..009104a6f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/brief-adventures.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- brief_adventures.qdoc -->
+ <meta name="description" content="Test that the \brief command doesn't eat content that follows it.">
+ <title>Adventures with QDoc's \brief command | IllformattedDocumentation</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#further-details">Further details</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Adventures with QDoc's \brief command</h1>
+<!-- $$$brief-adventures.html-description -->
+<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>
+</div>
+<!-- @@@brief-adventures.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/illformatted-examples.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/illformatted-examples.html
new file mode 100644
index 000000000..5253ae1d1
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/illformatted-examples.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- illformatted-examples.qdoc -->
+ <meta name="description" content="Demonstrate correctness for example generation.">
+ <title>Test generated output for illformatted examples | IllformattedDocumentation</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#qml-examples">QML Examples</a></li>
+<li class="level1"><a href="#c-examples">C++ Examples</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Test generated output for illformatted examples</h1>
+<!-- $$$illformatted-examples.html-description -->
+<div class="descr" id="details">
+<p>This test includes the following examples:</p>
+<h2 id="qml-examples">QML Examples</h2>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="illformatteddocumentation-someexample-example.html">QDoc: some example</a></p></td><td class="tblDescr"><p></p></td></tr>
+</table></div>
+<h2 id="c-examples">C++ Examples</h2>
+</div>
+<!-- @@@illformatted-examples.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/illformatteddocumentation-someexample-example.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/illformatteddocumentation-someexample-example.html
new file mode 100644
index 000000000..ebeb5a5b4
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/illformatteddocumentation-someexample-example.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- some_example.qdoc -->
+ <title>QDoc: some example | IllformattedDocumentation</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">QDoc: some example</h1>
+<!-- $$$someexample-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@someexample -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/illformatteddocumentation.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/illformatteddocumentation.index
new file mode 100644
index 000000000..e9898cd2e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/illformatteddocumentation.index
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="IllformattedDocumentation Reference Documentation" version="" project="IllformattedDocumentation">
+ <namespace name="" status="active" access="public" module="illformatteddocumentation">
+ <page name="brief-adventures.html" href="brief-adventures.html" status="active" location="brief_adventures.qdoc" documented="true" subtype="page" title="Adventures with QDoc's \brief command" fulltitle="Adventures with QDoc's \brief command" subtitle="" brief="Test that the \brief command doesn't eat content that follows it">
+ <keyword name="some-keyword" title="some_keyword"/>
+ <contents name="further-details" title="Further details" level="1"/>
+ </page>
+ <page name="someexample" href="illformatteddocumentation-someexample-example.html" status="active" location="some_example.qdoc" documented="true" groups="illformatted-examples-qml" subtype="example" title="QDoc: some example" fulltitle="QDoc: some example" subtitle=""/>
+ <page name="illformatted-examples.html" href="illformatted-examples.html" status="active" location="illformatted-examples.qdoc" documented="true" groups="all-examples" subtype="page" title="Test generated output for illformatted examples" fulltitle="Test generated output for illformatted examples" subtitle="" brief="Demonstrate correctness for example generation">
+ <contents name="qml-examples" title="QML Examples" level="1"/>
+ <contents name="c-examples" title="C++ Examples" level="1"/>
+ </page>
+ <page name="another-page-with-comments-in-the-brief" href="another-page-with-comments-in-the-brief.html" status="active" location="brief_adventures.qdoc" documented="true" subtype="page" title="There's no end to the possibilities!" fulltitle="There's no end to the possibilities!" subtitle="" brief="Another test that the \brief command isn't completely borked"/>
+ <page name="page-with-an-image-at-the-top.html" href="page-with-an-image-at-the-top.html" status="active" location="brief_adventures.qdoc" documented="true" subtype="page" title="This page starts with an image" fulltitle="This page starts with an image" subtitle="" brief="This page has an image right at the top"/>
+ <page name="page-with-comment-after-brief.html" href="page-with-comment-after-brief.html" status="active" location="brief_adventures.qdoc" documented="true" subtype="page" title="Yet another adventure with QDoc's \brief command" fulltitle="Yet another adventure with QDoc's \brief command" subtitle="" brief="Another test that the \brief command doesn't eat content that follows it"/>
+ <page name="page-with-comment-in-brief.html" href="page-with-comment-in-brief.html" status="active" location="brief_adventures.qdoc" documented="true" subtype="page" title="Yet, yet another adventure with QDoc's \brief command" fulltitle="Yet, yet another adventure with QDoc's \brief command" subtitle="" brief="Another test that the \brief command isn't entirely broken"/>
+ <group name="all-examples" href="all-examples.html" status="internal" seen="false" title=""/>
+ <group name="illformatted-examples-qml" href="illformatted-examples-qml.html" status="internal" seen="false" title=""/>
+ <module name="sometestgroup" href="sometestgroup-module.html" status="internal" seen="false" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/page-with-an-image-at-the-top.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/page-with-an-image-at-the-top.html
new file mode 100644
index 000000000..e66e6ba51
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/page-with-an-image-at-the-top.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- brief_adventures.qdoc -->
+ <meta name="description" content="This page has an image right at the top.">
+ <title>This page starts with an image | IllformattedDocumentation</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">This page starts with an image</h1>
+<!-- $$$page-with-an-image-at-the-top.html-description -->
+<div class="descr" id="details">
+<p class="centerAlign"><font color="red">[Missing image leonardo-da-vinci.png]</font></p><p>The image should render as expected, and the alternate text should be there, too. This text is contained in its own paragraph following the image.</p>
+<p>This paragraph is a new paragraph, and doesn't contain an image.</p>
+</div>
+<!-- @@@page-with-an-image-at-the-top.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/page-with-comment-after-brief.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/page-with-comment-after-brief.html
new file mode 100644
index 000000000..fc6fa1b92
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/page-with-comment-after-brief.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- brief_adventures.qdoc -->
+ <meta name="description" content="Another test that the \brief command doesn't eat content that follows it.">
+ <title>Yet another adventure with QDoc's \brief command | IllformattedDocumentation</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Yet another adventure with QDoc's \brief command</h1>
+<!-- $$$page-with-comment-after-brief.html-description -->
+<div class="descr" id="details">
+<p>This paragraph should render normally, but might be eaten by the \brief brief because the brief is followed by a QDoc comment (which shouldn't be rendered at all).</p>
+</div>
+<!-- @@@page-with-comment-after-brief.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/page-with-comment-in-brief.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/page-with-comment-in-brief.html
new file mode 100644
index 000000000..4283ae544
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/page-with-comment-in-brief.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- brief_adventures.qdoc -->
+ <meta name="description" content="Another test that the \brief command isn't entirely broken.">
+ <title>Yet, yet another adventure with QDoc's \brief command | IllformattedDocumentation</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Yet, yet another adventure with QDoc's \brief command</h1>
+<!-- $$$page-with-comment-in-brief.html-description -->
+<div class="descr" id="details">
+<p>The brief for this page is: &quot;Another test that the \brief command isn't entirely broken.&quot;</p>
+</div>
+<!-- @@@page-with-comment-in-brief.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/another-page-with-comments-in-the-brief.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/another-page-with-comments-in-the-brief.webxml
new file mode 100644
index 000000000..7e82dfad6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/another-page-with-comments-in-the-brief.webxml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="another-page-with-comments-in-the-brief" href="another-page-with-comments-in-the-brief.html" status="active" location="brief_adventures.qdoc" documented="true" subtype="page" title="There's no end to the possibilities!" fulltitle="There's no end to the possibilities!" subtitle="" brief="Another test that the \brief command isn't completely borked">
+ <description>
+ <brief>Another test that the \brief command isn't completely borked</brief>
+ <para>The brief for this page is: &quot;Another test that the \brief command isn't completely borked&quot;. Notice the lack of a trailing full stop in the brief. QDoc should generate a warning about that when generating HTML.</para>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/brief-adventures.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/brief-adventures.webxml
new file mode 100644
index 000000000..3a6f5f2d5
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/brief-adventures.webxml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="brief-adventures.html" href="brief-adventures.html" status="active" location="brief_adventures.qdoc" documented="true" subtype="page" title="Adventures with QDoc's \brief command" fulltitle="Adventures with QDoc's \brief command" subtitle="" brief="Test that the \brief command doesn't eat content that follows it">
+ <keyword name="some-keyword" title="some_keyword"/>
+ <contents name="further-details" title="Further details" level="1"/>
+ <description>
+ <brief>Test that the \brief command doesn't eat content that follows it.</brief>
+ <para>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.</para>
+ <section id="further-details">
+ <heading level="1">Further details</heading>
+ <para>The bug report is at <link raw="https://bugreports.qt.io/browse/QTBUG-70959" href="https://bugreports.qt.io/browse/QTBUG-70959" type="external">https://bugreports.qt.io/browse/QTBUG-70959</link>. It refers to a change that bypassed the issue by moving the \keyword command, at <link raw="https://codereview.qt-project.org/c/qt/qtdoc/+/242033/" href="https://codereview.qt-project.org/c/qt/qtdoc/+/242033/" type="external">https://codereview.qt-project.org/c/qt/qtdoc/+/242033/</link>.</para>
+ </section>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/illformatted-examples.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/illformatted-examples.webxml
new file mode 100644
index 000000000..b49d1b297
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/illformatted-examples.webxml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="illformatted-examples.html" href="illformatted-examples.html" status="active" location="illformatted-examples.qdoc" documented="true" groups="all-examples" subtype="page" title="Test generated output for illformatted examples" fulltitle="Test generated output for illformatted examples" subtitle="" brief="Demonstrate correctness for example generation">
+ <contents name="qml-examples" title="QML Examples" level="1"/>
+ <contents name="c-examples" title="C++ Examples" level="1"/>
+ <description>
+ <brief>Demonstrate correctness for example generation.</brief>
+ <para>This test includes the following examples:</para>
+ <section id="qml-examples">
+ <heading level="1">QML Examples</heading>
+ <table width="100%">
+ <row>
+ <item>
+ <para>
+ <link raw="QDoc: some example" href="illformatteddocumentation-someexample-example.html" type="page" page="QDoc: some example"/>
+ </para>
+ </item>
+ <item>
+ <para></para>
+ </item>
+ </row>
+ </table>
+ </section>
+ <section id="c-examples">
+ <heading level="1">C++ Examples</heading>
+ </section>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/illformatteddocumentation-someexample-example.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/illformatteddocumentation-someexample-example.webxml
new file mode 100644
index 000000000..675e3d74f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/illformatteddocumentation-someexample-example.webxml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="someexample" href="illformatteddocumentation-someexample-example.html" status="active" location="some_example.qdoc" documented="true" groups="illformatted-examples-qml" subtype="example" title="QDoc: some example" fulltitle="QDoc: some example" subtitle="">
+ <description/>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/illformatteddocumentation.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/illformatteddocumentation.index
new file mode 100644
index 000000000..e9898cd2e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/illformatteddocumentation.index
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="IllformattedDocumentation Reference Documentation" version="" project="IllformattedDocumentation">
+ <namespace name="" status="active" access="public" module="illformatteddocumentation">
+ <page name="brief-adventures.html" href="brief-adventures.html" status="active" location="brief_adventures.qdoc" documented="true" subtype="page" title="Adventures with QDoc's \brief command" fulltitle="Adventures with QDoc's \brief command" subtitle="" brief="Test that the \brief command doesn't eat content that follows it">
+ <keyword name="some-keyword" title="some_keyword"/>
+ <contents name="further-details" title="Further details" level="1"/>
+ </page>
+ <page name="someexample" href="illformatteddocumentation-someexample-example.html" status="active" location="some_example.qdoc" documented="true" groups="illformatted-examples-qml" subtype="example" title="QDoc: some example" fulltitle="QDoc: some example" subtitle=""/>
+ <page name="illformatted-examples.html" href="illformatted-examples.html" status="active" location="illformatted-examples.qdoc" documented="true" groups="all-examples" subtype="page" title="Test generated output for illformatted examples" fulltitle="Test generated output for illformatted examples" subtitle="" brief="Demonstrate correctness for example generation">
+ <contents name="qml-examples" title="QML Examples" level="1"/>
+ <contents name="c-examples" title="C++ Examples" level="1"/>
+ </page>
+ <page name="another-page-with-comments-in-the-brief" href="another-page-with-comments-in-the-brief.html" status="active" location="brief_adventures.qdoc" documented="true" subtype="page" title="There's no end to the possibilities!" fulltitle="There's no end to the possibilities!" subtitle="" brief="Another test that the \brief command isn't completely borked"/>
+ <page name="page-with-an-image-at-the-top.html" href="page-with-an-image-at-the-top.html" status="active" location="brief_adventures.qdoc" documented="true" subtype="page" title="This page starts with an image" fulltitle="This page starts with an image" subtitle="" brief="This page has an image right at the top"/>
+ <page name="page-with-comment-after-brief.html" href="page-with-comment-after-brief.html" status="active" location="brief_adventures.qdoc" documented="true" subtype="page" title="Yet another adventure with QDoc's \brief command" fulltitle="Yet another adventure with QDoc's \brief command" subtitle="" brief="Another test that the \brief command doesn't eat content that follows it"/>
+ <page name="page-with-comment-in-brief.html" href="page-with-comment-in-brief.html" status="active" location="brief_adventures.qdoc" documented="true" subtype="page" title="Yet, yet another adventure with QDoc's \brief command" fulltitle="Yet, yet another adventure with QDoc's \brief command" subtitle="" brief="Another test that the \brief command isn't entirely broken"/>
+ <group name="all-examples" href="all-examples.html" status="internal" seen="false" title=""/>
+ <group name="illformatted-examples-qml" href="illformatted-examples-qml.html" status="internal" seen="false" title=""/>
+ <module name="sometestgroup" href="sometestgroup-module.html" status="internal" seen="false" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/page-with-an-image-at-the-top.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/page-with-an-image-at-the-top.webxml
new file mode 100644
index 000000000..da7b4f1d9
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/page-with-an-image-at-the-top.webxml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="page-with-an-image-at-the-top.html" href="page-with-an-image-at-the-top.html" status="active" location="brief_adventures.qdoc" documented="true" subtype="page" title="This page starts with an image" fulltitle="This page starts with an image" subtitle="" brief="This page has an image right at the top">
+ <description>
+ <brief>This page has an image right at the top.</brief>
+ <para>The image should render as expected, and the alternate text should be there, too. This text is contained in its own paragraph following the image.</para>
+ <para>This paragraph is a new paragraph, and doesn't contain an image.</para>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/page-with-comment-after-brief.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/page-with-comment-after-brief.webxml
new file mode 100644
index 000000000..f5b28e302
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/page-with-comment-after-brief.webxml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="page-with-comment-after-brief.html" href="page-with-comment-after-brief.html" status="active" location="brief_adventures.qdoc" documented="true" subtype="page" title="Yet another adventure with QDoc's \brief command" fulltitle="Yet another adventure with QDoc's \brief command" subtitle="" brief="Another test that the \brief command doesn't eat content that follows it">
+ <description>
+ <brief>Another test that the \brief command doesn't eat content that follows it.</brief>
+ <para>This paragraph should render normally, but might be eaten by the \brief brief because the brief is followed by a QDoc comment (which shouldn't be rendered at all).</para>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/page-with-comment-in-brief.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/page-with-comment-in-brief.webxml
new file mode 100644
index 000000000..575cd111d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/webxml/page-with-comment-in-brief.webxml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="page-with-comment-in-brief.html" href="page-with-comment-in-brief.html" status="active" location="brief_adventures.qdoc" documented="true" subtype="page" title="Yet, yet another adventure with QDoc's \brief command" fulltitle="Yet, yet another adventure with QDoc's \brief command" subtitle="" brief="Another test that the \brief command isn't entirely broken">
+ <description>
+ <brief>Another test that the \brief command isn't entirely broken.</brief>
+ <para>The brief for this page is: &quot;Another test that the \brief command isn't entirely broken.&quot;</para>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/illformatted_documentation.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/illformatted_documentation.qdocconf
new file mode 100644
index 000000000..716882f41
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/illformatted_documentation.qdocconf
@@ -0,0 +1,29 @@
+project = IllformattedDocumentation
+
+headerdirs = ./src
+sourcedirs = ./src
+exampledirs = ./src
+
+outputformats = WebXML HTML
+WebXML.quotinginformation = true
+WebXML.nosubdirs = true
+WebXML.outputsubdir = webxml
+
+warninglimit = 3 # The broken example generates three warnings
+
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ./src/images
+
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+# By default, use -outputdir directly, no subdir.
+# outputsubdir '.' matches the root of expected_output/
+HTML.nosubdirs = true
+HTML.outputsubdir = html
+
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/src/brief_adventures.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/src/brief_adventures.qdoc
new file mode 100644
index 000000000..9bad0106b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/src/brief_adventures.qdoc
@@ -0,0 +1,75 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page brief-adventures.html
+ \title Adventures with QDoc's \\brief command
+ \brief Test that the \\brief command doesn't eat content that follows it.
+ \inmodule sometestgroup
+ \keyword some_keyword
+
+ 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 "eaten". 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.
+
+ \section1 Further details
+ The bug report is at \l https://bugreports.qt.io/browse/QTBUG-70959.
+ It refers to a change that bypassed the issue by moving the \\keyword
+ command, at \l https://codereview.qt-project.org/c/qt/qtdoc/+/242033/.
+*/
+
+/*!
+ \page page-with-an-image-at-the-top.html
+ \title This page starts with an image
+ \brief This page has an image right at the top.
+ \image leonardo-da-vinci.png This is the alternate text for the image
+ The image should render as expected, and the alternate text should be
+ there, too. This text is contained in its own paragraph following the
+ image.
+
+ This paragraph is a new paragraph, and doesn't contain an image.
+*/
+
+/*!
+ \page page-with-comment-after-brief.html
+ \title Yet another adventure with QDoc's \\brief command
+ \brief Another test that the \\brief command doesn't eat content that follows it.
+ //! This QDoc comment might cause an issue, let's try it!
+
+ This paragraph should render normally, but might be eaten by the \\brief
+ brief because the brief is followed by a QDoc comment (which shouldn't be
+ rendered at all).
+*/
+
+/*!
+ \page page-with-comment-in-brief.html
+ \title Yet, yet another adventure with QDoc's \\brief command
+ \brief Another test that the \\brief command //! Brief continues below
+ isn't entirely broken.
+
+ The brief for this page is:
+ "Another test that the \\brief command isn't entirely broken."
+*/
+
+/*!
+ \page another-page-with-comments-in-the-brief
+ \title There's no end to the possibilities!
+ \brief Another test that the \\brief command //! Doesn't contain a full stop.
+ //! QDoc's CMD_BRIEF should issue a warning when it doesn't end with a full
+ //! stop. However, if a \\brief is followed by a line comment (i.e. `//!`),
+ //! the warning isn't issued. This is tied to how `CMD_BRIEF` performs
+ //! macro expansion and command processing; in the case of line comments in
+ //! the argument, the last character of the brief's atom isn't a full stop.
+ isn't completely borked
+
+ The brief for this page is:
+ "Another test that the \\brief command isn't completely borked". Notice the
+ lack of a trailing full stop in the brief. QDoc should generate a warning
+ about that when generating HTML.
+
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/src/illformatted-examples.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/src/illformatted-examples.qdoc
new file mode 100644
index 000000000..5bfa9e7f6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/src/illformatted-examples.qdoc
@@ -0,0 +1,17 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page illformatted-examples.html
+ \ingroup all-examples
+ \title Test generated output for illformatted examples
+ \brief Demonstrate correctness for example generation.
+
+ This test includes the following examples:
+
+ \section1 QML Examples
+ \annotatedlist illformatted-examples-qml
+
+ \section1 C++ Examples
+ \annotatedlist illformatted-examples-cpp
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/src/some_example.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/src/some_example.qdoc
new file mode 100644
index 000000000..a64605b87
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/src/some_example.qdoc
@@ -0,0 +1,8 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example someexample
+ \title QDoc: some example
+ \ingroup illformatted-examples-qml
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/docbook/a-page-with-a-line-comment-in-the-see-also-command.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/docbook/a-page-with-a-line-comment-in-the-see-also-command.xml
new file mode 100644
index 000000000..45be05ac6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/docbook/a-page-with-a-line-comment-in-the-see-also-command.xml
@@ -0,0 +1,20 @@
+<?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>The source for this page has a line comment in its sa command</db:title>
+<db:productname>LineComment</db:productname>
+<db:titleabbrev>LineComment Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>LineComment Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:para>QDoc's \sa command doesn't respect QDoc's line comments.</db:para>
+<db:section>
+<db:title>See Also</db:title>
+<db:para><db:emphasis>See also </db:emphasis>
+<db:simplelist type="vert" role="see-also">
+<db:member><db:link xlink:href="another-page-with-an-image-at-the-top.xml">This page starts with an image</db:link></db:member>
+<db:member><db:link xlink:href="line-comment-adventures.xml">Adventures with QDoc's line comments</db:link></db:member>
+</db:simplelist>
+</db:para>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/docbook/another-page-with-an-image-at-the-top.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/docbook/another-page-with-an-image-at-the-top.xml
new file mode 100644
index 000000000..c905f9c45
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/docbook/another-page-with-an-image-at-the-top.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>This page starts with an image</db:title>
+<db:productname>LineComment</db:productname>
+<db:titleabbrev>LineComment Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>This page has an image right at the top.</db:para>
+</db:abstract>
+</db:info>
+<db:mediaobject>
+<db:alt>This is the alternate text for the image</db:alt>
+<db:imageobject>
+<db:imagedata fileref="images/leonardo-da-vinci.png"/>
+</db:imageobject>
+</db:mediaobject>
+<db:para>The image should render as expected, and the alternate text should be there, too. This text is contained in its own paragraph following the image.</db:para>
+<db:para>This paragraph is a new paragraph, and doesn't contain an image.</db:para>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/docbook/images/leonardo-da-vinci.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/docbook/images/leonardo-da-vinci.png
new file mode 100644
index 000000000..854acb4ca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/docbook/images/leonardo-da-vinci.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/docbook/line-comment-adventures.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/docbook/line-comment-adventures.xml
new file mode 100644
index 000000000..e78104e3d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/docbook/line-comment-adventures.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>Adventures with QDoc's line comments</db:title>
+<db:productname>LineComment</db:productname>
+<db:titleabbrev>LineComment Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>Test that line comments don't break documentation.</db:para>
+</db:abstract>
+</db:info>
+<db:para>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.</db:para>
+<db:section xml:id="further-details">
+<db:title>Further details</db:title>
+<db:para>The bug report is at <db:link xlink:href="https://bugreports.qt.io/browse/QTBUG-105754">https://bugreports.qt.io/browse/QTBUG-105754</db:link>.</db:para>
+</db:section>
+</db:article>
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
new file mode 100644
index 000000000..27ba4c2a3
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/a-page-with-a-line-comment-in-the-see-also-command.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- line_comment_adventures.qdoc -->
+ <title>The source for this page has a line comment in its sa command | LineComment</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">The source for this page has a line comment in its sa command</h1>
+<!-- $$$a-page-with-a-line-comment-in-the-see-also-command.html-description -->
+<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>
+<!-- @@@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/another-page-with-an-image-at-the-top.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/another-page-with-an-image-at-the-top.html
new file mode 100644
index 000000000..27c53b8ac
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/another-page-with-an-image-at-the-top.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- line_comment_adventures.qdoc -->
+ <meta name="description" content="This page has an image right at the top.">
+ <title>This page starts with an image | LineComment</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">This page starts with an image</h1>
+<!-- $$$another-page-with-an-image-at-the-top.html-description -->
+<div class="descr" id="details">
+<p class="centerAlign"><img src="images/leonardo-da-vinci.png" alt="This is the alternate text for the image" /></p><p>The image should render as expected, and the alternate text should be there, too. This text is contained in its own paragraph following the image.</p>
+<p>This paragraph is a new paragraph, and doesn't contain an image.</p>
+</div>
+<!-- @@@another-page-with-an-image-at-the-top.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/images/leonardo-da-vinci.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/images/leonardo-da-vinci.png
new file mode 100644
index 000000000..854acb4ca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/images/leonardo-da-vinci.png
Binary files differ
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
new file mode 100644
index 000000000..1b1ab281c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/line-comment-adventures.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- line_comment_adventures.qdoc -->
+ <meta name="description" content="Test that line comments don't break documentation.">
+ <title>Adventures with QDoc's line comments | LineComment</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#further-details">Further details</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Adventures with QDoc's line comments</h1>
+<!-- $$$line-comment-adventures.html-description -->
+<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>
+</div>
+<!-- @@@line-comment-adventures.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/linecomment.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/linecomment.index
new file mode 100644
index 000000000..f81bef147
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/linecomment.index
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="LineComment Reference Documentation" version="" project="LineComment">
+ <namespace name="" status="active" access="public" module="linecomment">
+ <page name="line-comment-adventures.html" href="line-comment-adventures.html" status="active" location="line_comment_adventures.qdoc" documented="true" subtype="page" title="Adventures with QDoc's line comments" fulltitle="Adventures with QDoc's line comments" subtitle="" brief="Test that line comments don't break documentation">
+ <contents name="further-details" title="Further details" level="1"/>
+ </page>
+ <page name="a-page-with-a-line-comment-in-the-see-also-command.html" href="a-page-with-a-line-comment-in-the-see-also-command.html" status="active" location="line_comment_adventures.qdoc" documented="true" subtype="page" title="The source for this page has a line comment in its sa command" fulltitle="The source for this page has a line comment in its sa command" subtitle=""/>
+ <page name="another-page-with-an-image-at-the-top.html" href="another-page-with-an-image-at-the-top.html" status="active" location="line_comment_adventures.qdoc" documented="true" subtype="page" title="This page starts with an image" fulltitle="This page starts with an image" subtitle="" brief="This page has an image right at the top"/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/webxml/a-page-with-a-line-comment-in-the-see-also-command.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/webxml/a-page-with-a-line-comment-in-the-see-also-command.webxml
new file mode 100644
index 000000000..cb0caedf9
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/webxml/a-page-with-a-line-comment-in-the-see-also-command.webxml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="a-page-with-a-line-comment-in-the-see-also-command.html" href="a-page-with-a-line-comment-in-the-see-also-command.html" status="active" location="line_comment_adventures.qdoc" documented="true" subtype="page" title="The source for this page has a line comment in its sa command" fulltitle="The source for this page has a line comment in its sa command" subtitle="">
+ <description>
+ <para>QDoc's \sa command doesn't respect QDoc's line comments.</para>
+ <see-also>
+ <link raw="This page starts with an image" href="another-page-with-an-image-at-the-top.html" type="page" page="This page starts with an image">This page starts with an image</link>
+ <link raw="Adventures with QDoc's line comments" href="line-comment-adventures.html" type="page" page="Adventures with QDoc's line comments">Adventures with QDoc's line comments</link>
+ </see-also>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/webxml/another-page-with-an-image-at-the-top.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/webxml/another-page-with-an-image-at-the-top.webxml
new file mode 100644
index 000000000..b2551df18
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/webxml/another-page-with-an-image-at-the-top.webxml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="another-page-with-an-image-at-the-top.html" href="another-page-with-an-image-at-the-top.html" status="active" location="line_comment_adventures.qdoc" documented="true" subtype="page" title="This page starts with an image" fulltitle="This page starts with an image" subtitle="" brief="This page has an image right at the top">
+ <description>
+ <brief>This page has an image right at the top.</brief>
+ <image href="images/leonardo-da-vinci.png"/>
+ <para>The image should render as expected, and the alternate text should be there, too. This text is contained in its own paragraph following the image.</para>
+ <para>This paragraph is a new paragraph, and doesn't contain an image.</para>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/webxml/images/leonardo-da-vinci.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/webxml/images/leonardo-da-vinci.png
new file mode 100644
index 000000000..854acb4ca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/webxml/images/leonardo-da-vinci.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/webxml/line-comment-adventures.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/webxml/line-comment-adventures.webxml
new file mode 100644
index 000000000..b84706e96
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/webxml/line-comment-adventures.webxml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="line-comment-adventures.html" href="line-comment-adventures.html" status="active" location="line_comment_adventures.qdoc" documented="true" subtype="page" title="Adventures with QDoc's line comments" fulltitle="Adventures with QDoc's line comments" subtitle="" brief="Test that line comments don't break documentation">
+ <contents name="further-details" title="Further details" level="1"/>
+ <description>
+ <brief>Test that line comments don't break documentation.</brief>
+ <para>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.</para>
+ <section id="further-details">
+ <heading level="1">Further details</heading>
+ <para>The bug report is at <link raw="https://bugreports.qt.io/browse/QTBUG-105754" href="https://bugreports.qt.io/browse/QTBUG-105754" type="external">https://bugreports.qt.io/browse/QTBUG-105754</link>.</para>
+ </section>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/webxml/linecomment.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/webxml/linecomment.index
new file mode 100644
index 000000000..f81bef147
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/webxml/linecomment.index
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="LineComment Reference Documentation" version="" project="LineComment">
+ <namespace name="" status="active" access="public" module="linecomment">
+ <page name="line-comment-adventures.html" href="line-comment-adventures.html" status="active" location="line_comment_adventures.qdoc" documented="true" subtype="page" title="Adventures with QDoc's line comments" fulltitle="Adventures with QDoc's line comments" subtitle="" brief="Test that line comments don't break documentation">
+ <contents name="further-details" title="Further details" level="1"/>
+ </page>
+ <page name="a-page-with-a-line-comment-in-the-see-also-command.html" href="a-page-with-a-line-comment-in-the-see-also-command.html" status="active" location="line_comment_adventures.qdoc" documented="true" subtype="page" title="The source for this page has a line comment in its sa command" fulltitle="The source for this page has a line comment in its sa command" subtitle=""/>
+ <page name="another-page-with-an-image-at-the-top.html" href="another-page-with-an-image-at-the-top.html" status="active" location="line_comment_adventures.qdoc" documented="true" subtype="page" title="This page starts with an image" fulltitle="This page starts with an image" subtitle="" brief="This page has an image right at the top"/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/line_comments.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/line_comments.qdocconf
new file mode 100644
index 000000000..db5b91b55
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/line_comments.qdocconf
@@ -0,0 +1,27 @@
+project = LineComment
+
+{headerdirs,sourcedirs,exampledirs} = ./src
+
+outputformats = WebXML HTML DocBook
+WebXML.quotinginformation = true
+
+HTML.nosubdirs = true
+HTML.outputsubdir = html
+
+WebXML.nosubdirs = true
+WebXML.outputsubdir = webxml
+
+DocBook.nosubdirs = true
+DocBook.outputsubdir = docbook
+
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+imagedirs = ./src/images
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/src/images/leonardo-da-vinci.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/src/images/leonardo-da-vinci.png
new file mode 100644
index 000000000..854acb4ca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/src/images/leonardo-da-vinci.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/src/line_comment_adventures.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/src/line_comment_adventures.qdoc
new file mode 100644
index 000000000..28dfe5c90
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/src/line_comment_adventures.qdoc
@@ -0,0 +1,39 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page line-comment-adventures.html
+ \title Adventures with QDoc's line comments
+ \brief Test that line comments don't break documentation.
+
+ 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 "Missing comma in \\sa" warnings.
+
+ \section1 Further details
+ The bug report is at \l https://bugreports.qt.io/browse/QTBUG-105754.
+*/
+
+/*!
+ \page another-page-with-an-image-at-the-top.html
+ \title This page starts with an image
+ \brief This page has an image right at the top.
+ \image leonardo-da-vinci.png This is the alternate text for the image
+ The image should render as expected, and the alternate text should be
+ there, too. This text is contained in its own paragraph following the
+ image.
+
+ This paragraph is a new paragraph, and doesn't contain an image.
+*/
+
+/*!
+ \page a-page-with-a-line-comment-in-the-see-also-command.html
+ \title The source for this page has a line comment in its sa command
+
+ QDoc's \\sa command doesn't respect QDoc's line comments.
+
+ \sa {This page starts with an image}, //! let's go to bar after this
+ {Adventures with QDoc's line comments}
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/minimal_configuration/expected/a-minimal-qdoc-configuration.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/minimal_configuration/expected/a-minimal-qdoc-configuration.index
new file mode 100644
index 000000000..037f4bc73
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/minimal_configuration/expected/a-minimal-qdoc-configuration.index
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="A minimal QDoc configuration Reference Documentation" version="" project="A minimal QDoc configuration">
+ <namespace name="" status="active" access="public" module="a minimal qdoc configuration">
+ <page name="readme.html" href="readme.html" status="active" location="README.qdoc" documented="true" subtype="page" title="README" fulltitle="README" subtitle=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/minimal_configuration/expected/readme.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/minimal_configuration/expected/readme.html
new file mode 100644
index 000000000..59c54c1b5
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/minimal_configuration/expected/readme.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- README.qdoc -->
+ <title>README | A minimal QDoc configuration</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">README</h1>
+<!-- $$$readme.html-description -->
+<div class="descr" id="details">
+<p>This test is for a minimal .qdocconf file.</p>
+</div>
+<!-- @@@readme.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/minimal_configuration/minimal_configuration.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/minimal_configuration/minimal_configuration.qdocconf
new file mode 100644
index 000000000..6fc9c025e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/minimal_configuration/minimal_configuration.qdocconf
@@ -0,0 +1,12 @@
+project = A minimal QDoc configuration
+
+locationinfo = false
+
+headers.fileextensions = "*.h *.hpp"
+sources.fileextensions = "*.cpp *.qml *.qdoc"
+
+headerdirs = ./src
+sourcedirs = ./src
+
+warninglimit = 0
+warninglimit.enabled = true
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/minimal_configuration/src/README.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/minimal_configuration/src/README.qdoc
new file mode 100644
index 000000000..879370377
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/minimal_configuration/src/README.qdoc
@@ -0,0 +1,9 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page readme.html
+ \title README
+
+ This test is for a minimal .qdocconf file.
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/docbook/boringclass.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/docbook/boringclass.xml
new file mode 100644
index 000000000..df3505cdf
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/docbook/boringclass.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>BoringClass Class</db:title>
+<db:productname>ModuleState</db:productname>
+<db:titleabbrev>ModuleState Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>ModuleState Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>BoringClass</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Status</db:term>
+<db:listitem>
+<db:para>Technical Preview</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:para>There's not much to say about <db:link xlink:href="boringclass.xml">BoringClass</db:link>, really, apart from that it is quite boring.</db:para>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/docbook/excitingclass.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/docbook/excitingclass.xml
new file mode 100644
index 000000000..29fcfa679
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/docbook/excitingclass.xml
@@ -0,0 +1,32 @@
+<?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>ExcitingClass Class</db:title>
+<db:productname>ModuleState</db:productname>
+<db:titleabbrev>ModuleState Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>ModuleState Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>ExcitingClass</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Status</db:term>
+<db:listitem>
+<db:para>Technical Preview</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:para>There's a lot to say about <db:link xlink:href="excitingclass.xml">ExcitingClass</db:link>. Let's dive into the details!</db:para>
+<db:section xml:id="what-makes-excitingclass-more-exciting-than-boringclass">
+<db:title>What makes ExcitingClass more exciting than BoringClass?</db:title>
+<db:para>Well, for one, it has a \section1 heading in it's documentation! How exciting is that?!</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/docbook/moduleinstate-module.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/docbook/moduleinstate-module.xml
new file mode 100644
index 000000000..776969a64
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/docbook/moduleinstate-module.xml
@@ -0,0 +1,23 @@
+<?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>ModuleState</db:productname>
+<db:titleabbrev>ModuleState Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>This module is in <db:emphasis>Technical Preview</db:emphasis> state.</db:para>
+</db:abstract>
+</db:info>
+<db:para>This module is in <db:emphasis>Technical Preview</db:emphasis> state.</db:para>
+<db:section xml:id="classes">
+<db:title>Classes</db:title>
+<db:itemizedlist role="classes">
+<db:listitem>
+<db:para><db:link xlink:href="boringclass.xml" xlink:role="class">BoringClass</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="excitingclass.xml" xlink:role="class">ExcitingClass</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/html/boringclass.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/html/boringclass.html
new file mode 100644
index 000000000..ecee60195
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/html/boringclass.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- module_in_a_state.qdoc -->
+ <title>BoringClass Class | ModuleState</title>
+</head>
+<body>
+<li><a href="moduleinstate-module.html" translate="no">ModuleInState (Technical Preview)</a></li>
+<li>BoringClass</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">BoringClass Class</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;BoringClass&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> Status:</td><td class="memItemRight bottomAlign"> Technical Preview<span class="status technical-preview"></span></td></tr>
+</table></div>
+<!-- $$$BoringClass-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<p>There's not much to say about BoringClass, really, apart from that it is quite boring.</p>
+</div>
+<!-- @@@BoringClass -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/html/excitingclass.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/html/excitingclass.html
new file mode 100644
index 000000000..7d3d13943
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/html/excitingclass.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- module_in_a_state.qdoc -->
+ <title>ExcitingClass Class | ModuleState</title>
+</head>
+<body>
+<li><a href="moduleinstate-module.html" translate="no">ModuleInState (Technical Preview)</a></li>
+<li>ExcitingClass</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="#what-makes-excitingclass-more-exciting-than-boringclass">What makes ExcitingClass more exciting than BoringClass?</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">ExcitingClass Class</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;ExcitingClass&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> Status:</td><td class="memItemRight bottomAlign"> Technical Preview<span class="status technical-preview"></span></td></tr>
+</table></div>
+<!-- $$$ExcitingClass-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<p>There's a lot to say about ExcitingClass. Let's dive into the details!</p>
+<h3 id="what-makes-excitingclass-more-exciting-than-boringclass">What makes ExcitingClass more exciting than BoringClass?</h3>
+<p>Well, for one, it has a \section1 heading in it's documentation! How exciting is that?!</p>
+</div>
+<!-- @@@ExcitingClass -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/html/moduleinstate-module.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/html/moduleinstate-module.html
new file mode 100644
index 000000000..065e85812
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/html/moduleinstate-module.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- module_in_a_state.qdoc -->
+ <title>ModuleState</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>
+<p>This module is in <i>Technical Preview</i> state.</p>
+<h2 id="classes">Classes</h2>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="boringclass.html">BoringClass</a></p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="excitingclass.html">ExcitingClass</a></p></td></tr>
+</table></div>
+<!-- $$$ModuleInState-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@ModuleInState -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/html/modulestate.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/html/modulestate.index
new file mode 100644
index 000000000..3ab02a363
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/html/modulestate.index
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="ModuleState Reference Documentation" version="" project="ModuleState">
+ <namespace name="" status="active" access="public" module="modulestate">
+ <class name="BoringClass" href="boringclass.html" status="active" access="public" location="classes_in_stateful_module.h" documented="true" module="ModuleInState"/>
+ <class name="ExcitingClass" href="excitingclass.html" status="active" access="public" location="classes_in_stateful_module.h" documented="true" module="ModuleInState">
+ <contents name="what-makes-excitingclass-more-exciting-than-boringclass" title="What makes ExcitingClass more exciting than BoringClass?" level="1"/>
+ </class>
+ <module name="ModuleInState" href="moduleinstate-module.html" status="active" location="module_in_a_state.qdoc" documented="true" seen="true" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/webxml/boringclass.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/webxml/boringclass.webxml
new file mode 100644
index 000000000..2e1ea77d8
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/webxml/boringclass.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="BoringClass" href="boringclass.html" status="active" access="public" location="classes_in_stateful_module.h" documented="true" module="ModuleInState">
+ <description>
+ <para>There's not much to say about <link raw="BoringClass" href="boringclass.html" type="class">BoringClass</link>, really, apart from that it is quite boring.</para>
+ </description>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/webxml/excitingclass.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/webxml/excitingclass.webxml
new file mode 100644
index 000000000..5e4c8ff8b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/webxml/excitingclass.webxml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="ExcitingClass" href="excitingclass.html" status="active" access="public" location="classes_in_stateful_module.h" documented="true" module="ModuleInState">
+ <contents name="what-makes-excitingclass-more-exciting-than-boringclass" title="What makes ExcitingClass more exciting than BoringClass?" level="1"/>
+ <description>
+ <para>There's a lot to say about <link raw="ExcitingClass" href="excitingclass.html" type="class">ExcitingClass</link>. Let's dive into the details!</para>
+ <section id="what-makes-excitingclass-more-exciting-than-boringclass">
+ <heading level="1">What makes ExcitingClass more exciting than BoringClass?</heading>
+ <para>Well, for one, it has a \section1 heading in it's documentation! How exciting is that?!</para>
+ </section>
+ </description>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/webxml/moduleinstate-module.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/webxml/moduleinstate-module.webxml
new file mode 100644
index 000000000..5d24b3077
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/webxml/moduleinstate-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/modulestate/expected/webxml/modulestate.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/webxml/modulestate.index
new file mode 100644
index 000000000..3ab02a363
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/expected/webxml/modulestate.index
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="ModuleState Reference Documentation" version="" project="ModuleState">
+ <namespace name="" status="active" access="public" module="modulestate">
+ <class name="BoringClass" href="boringclass.html" status="active" access="public" location="classes_in_stateful_module.h" documented="true" module="ModuleInState"/>
+ <class name="ExcitingClass" href="excitingclass.html" status="active" access="public" location="classes_in_stateful_module.h" documented="true" module="ModuleInState">
+ <contents name="what-makes-excitingclass-more-exciting-than-boringclass" title="What makes ExcitingClass more exciting than BoringClass?" level="1"/>
+ </class>
+ <module name="ModuleInState" href="moduleinstate-module.html" status="active" location="module_in_a_state.qdoc" documented="true" seen="true" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/modulestate.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/modulestate.qdocconf
new file mode 100644
index 000000000..1f75c8036
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/modulestate.qdocconf
@@ -0,0 +1,29 @@
+project = ModuleState
+
+headerdirs = ./src
+sourcedirs = ./src
+exampledirs = ./src
+
+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
+
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ./src/images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/src/classes_in_stateful_module.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/src/classes_in_stateful_module.h
new file mode 100644
index 000000000..21578e91b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/src/classes_in_stateful_module.h
@@ -0,0 +1,15 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef CLASSES_IN_STATEFUL_MODULE_H
+#define CLASSES_IN_STATEFUL_MODULE_H
+
+class BoringClass
+{
+};
+
+class ExcitingClass
+{
+};
+
+#endif // CLASSES_IN_STATEFUL_MODULE_H
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/src/module_in_a_state.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/src/module_in_a_state.qdoc
new file mode 100644
index 000000000..3bdb12503
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modulestate/src/module_in_a_state.qdoc
@@ -0,0 +1,26 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \module ModuleInState
+ \modulestate Technical Preview
+*/
+
+/*!
+ \class BoringClass
+ \inmodule ModuleInState
+
+ There's not much to say about BoringClass, really, apart from that it is
+ quite boring.
+*/
+
+/*!
+ \class ExcitingClass
+ \inmodule ModuleInState
+
+ There's a lot to say about ExcitingClass. Let's dive into the details!
+
+ \section1 What makes ExcitingClass more exciting than BoringClass?
+ Well, for one, it has a \\section1 heading in it's documentation! How
+ exciting is that?!
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/8b5c72eb.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/8b5c72eb.html
new file mode 100644
index 000000000..f52b65618
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/8b5c72eb.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- adventures_with_non_ascii_characters.qdoc -->
+ <title>NonAsciiCharacterInput</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<!-- $$$圣马苏里拉.html-description -->
+<div class="descr" id="details">
+<p>This page exists solely to understand how QDoc will generate the file name for a page with non-latin characters in its name.</p>
+</div>
+<!-- @@@圣马苏里拉.html -->
+</body>
+</html>
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
new file mode 100644
index 000000000..4eeb77a6d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/adventures-with-non-ascii-characters.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- adventures_with_non_ascii_characters.qdoc -->
+ <meta name="description" content="Test that non-ascii characters work as input to QDoc commands.">
+ <title>Adventures with non-ascii characters in QDoc | NonAsciiCharacterInput</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#a-713da3e8">A 大纲视图</a></li>
+<li class="level1"><a href="#3d-42faee45">3D场景视图</a></li>
+<li class="level1"><a href="#3d-c57e864e">这就是3D场景视图</a></li>
+<li class="level1"><a href="#662952c1">属性视图</a></li>
+<li class="level1"><a href="#further-details">Further details</a></li>
+<li class="level2"><a href="#ascii-characters-that-are-non-printable-ascii-such-as-or-521d09f0">Ascii characters that are non-printable ascii, such as ß, ü, or ø</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Adventures with non-ascii characters in QDoc</h1>
+<!-- $$$adventures_with_non_ascii_characters.html-description -->
+<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-64506) that was reported against QDoc's \section1 command. The issue, as experienced by the reporter of the bug, is that if the \section1 command is followed by a non-ascii character (for example Chinese characters), navigation links aren't generated for the section title. The bug was filed against Qt 5.9.2. This test case aims at reproducing the issue as filed by the reporter.</p>
+<p>Such this document snippet:</p>
+<h2 id="a-713da3e8">A 大纲视图</h2>
+<p>The reporter states that this link works, presumably because it begins with the ascii character &quot;A&quot;.</p>
+<p>这就是大纲视图</p>
+<h2 id="3d-42faee45">3D场景视图</h2>
+<p>The reporter states that this link works, presumably because it begins with the digit &quot;3&quot;.</p>
+<p>这就是3D场景视图</p>
+<h2 id="3d-c57e864e">这就是3D场景视图</h2>
+<p>If this section generates a duplicate anchor, &quot;3D&quot;, it's because 3D is the only part of the section title QDoc recognizes. This is an error caused by the same bug, and the link should somehow reflect that QDoc encountered the Chinese (or any non-ascii) characters instead.</p>
+<h2 id="662952c1">属性视图</h2>
+<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>
+<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>
+<!-- @@@adventures_with_non_ascii_characters.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/e85685de.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/e85685de.html
new file mode 100644
index 000000000..ea52873e7
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/e85685de.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- adventures_with_non_ascii_characters.qdoc -->
+ <title>NonAsciiCharacterInput</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<!-- $$$موزاريلا-description -->
+<div class="descr" id="details">
+<p>This page exists solely to understand how QDoc will generate the file name for a page with right-to-left script in its name.</p>
+</div>
+<!-- @@@موزاريلا -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/8b5c72eb.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/8b5c72eb.webxml
new file mode 100644
index 000000000..375c43732
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/8b5c72eb.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="圣马苏里拉.html" href="8b5c72eb.html" status="active" location="adventures_with_non_ascii_characters.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle="">
+ <description>
+ <para>This page exists solely to understand how QDoc will generate the file name for a page with non-latin characters in its name.</para>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/adventures-with-non-ascii-characters.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/adventures-with-non-ascii-characters.webxml
new file mode 100644
index 000000000..91059c165
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/adventures-with-non-ascii-characters.webxml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="adventures_with_non_ascii_characters.html" href="adventures-with-non-ascii-characters.html" status="active" location="adventures_with_non_ascii_characters.qdoc" documented="true" subtype="page" title="Adventures with non-ascii characters in QDoc" fulltitle="Adventures with non-ascii characters in QDoc" subtitle="" brief="Test that non-ascii characters work as input to QDoc commands">
+ <contents name="a-713da3e8" title="A 大纲视图" level="1"/>
+ <contents name="3d-42faee45" title="3D场景视图" level="1"/>
+ <contents name="3d-c57e864e" title="这就是3D场景视图" level="1"/>
+ <contents name="662952c1" title="属性视图" level="1"/>
+ <contents name="further-details" title="Further details" level="1"/>
+ <contents name="ascii-characters-that-are-non-printable-ascii-such-as-or-521d09f0" title="Ascii characters that are non-printable ascii, such as ß, ü, or ø" level="2"/>
+ <description>
+ <brief>Test that non-ascii characters work as input to QDoc commands.</brief>
+ <para>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-64506) that was reported against QDoc's \section1 command. The issue, as experienced by the reporter of the bug, is that if the \section1 command is followed by a non-ascii character (for example Chinese characters), navigation links aren't generated for the section title. The bug was filed against Qt 5.9.2. This test case aims at reproducing the issue as filed by the reporter.</para>
+ <para>Such this document snippet:</para>
+ <section id="a-713da3e8">
+ <heading level="1">A 大纲视图</heading>
+ <para>The reporter states that this link works, presumably because it begins with the ascii character &quot;A&quot;.</para>
+ <para>这就是大纲视图</para>
+ </section>
+ <section id="3d-42faee45">
+ <heading level="1">3D场景视图</heading>
+ <para>The reporter states that this link works, presumably because it begins with the digit &quot;3&quot;.</para>
+ <para>这就是3D场景视图</para>
+ </section>
+ <section id="3d-c57e864e">
+ <heading level="1">这就是3D场景视图</heading>
+ <para>If this section generates a duplicate anchor, &quot;3D&quot;, it's because 3D is the only part of the section title QDoc recognizes. This is an error caused by the same bug, and the link should somehow reflect that QDoc encountered the Chinese (or any non-ascii) characters instead.</para>
+ </section>
+ <section id="662952c1">
+ <heading level="1">属性视图</heading>
+ <para>The reporter states that this link doesn't work, presumably because it begins with the Chinese character &quot;属&quot;.</para>
+ <para>这就是属性视图</para>
+ </section>
+ <section id="further-details">
+ <heading level="1">Further details</heading>
+ <para>The bug report is at <link raw="https://bugreports.qt.io/browse/QTBUG-64506" href="https://bugreports.qt.io/browse/QTBUG-64506" type="external">https://bugreports.qt.io/browse/QTBUG-64506</link>. It contains the content used to trigger the behavior in this test case. The Chinese characters are copied verbatim from the report.</para>
+ </section>
+ <section id="ascii-characters-that-are-non-printable-ascii-such-as-or-521d09f0">
+ <heading level="2">Ascii characters that are non-printable ascii, such as ß, ü, or ø</heading>
+ <para>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.</para>
+ </section>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/e85685de.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/e85685de.webxml
new file mode 100644
index 000000000..beb4df518
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/e85685de.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="موزاريلا" href="e85685de.html" status="active" location="adventures_with_non_ascii_characters.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle="">
+ <description>
+ <para>This page exists solely to understand how QDoc will generate the file name for a page with right-to-left script in its name.</para>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/mozzarella-7c883eff.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/mozzarella-7c883eff.webxml
new file mode 100644
index 000000000..13ce91b72
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/mozzarella-7c883eff.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="桑塔mozzarella.html" href="mozzarella-7c883eff.html" status="active" location="adventures_with_non_ascii_characters.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle="">
+ <description>
+ <para>This page exists solely to understand how QDoc will generate the file name for a page that mixes printable ascii with non-latin characters in its name.</para>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/nonasciicharacterinput.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/nonasciicharacterinput.index
new file mode 100644
index 000000000..aa306d7eb
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/nonasciicharacterinput.index
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="NonAsciiCharacterInput Reference Documentation" version="" project="NonAsciiCharacterInput">
+ <namespace name="" status="active" access="public" module="nonasciicharacterinput">
+ <page name="adventures_with_non_ascii_characters.html" href="adventures-with-non-ascii-characters.html" status="active" location="adventures_with_non_ascii_characters.qdoc" documented="true" subtype="page" title="Adventures with non-ascii characters in QDoc" fulltitle="Adventures with non-ascii characters in QDoc" subtitle="" brief="Test that non-ascii characters work as input to QDoc commands">
+ <contents name="a-713da3e8" title="A 大纲视图" level="1"/>
+ <contents name="3d-42faee45" title="3D场景视图" level="1"/>
+ <contents name="3d-c57e864e" title="这就是3D场景视图" level="1"/>
+ <contents name="662952c1" title="属性视图" level="1"/>
+ <contents name="further-details" title="Further details" level="1"/>
+ <contents name="ascii-characters-that-are-non-printable-ascii-such-as-or-521d09f0" title="Ascii characters that are non-printable ascii, such as ß, ü, or ø" level="2"/>
+ </page>
+ <page name="SEITE_MIT_AUSSCHLIEßLICH_GROßBUCHSTABEN_IM_TITEL_ÜBERSCHRIFT.htm" href="seite-mit-ausschlie-lich-gro-buchstaben-im-titel-berschrift-htm-bfa91582.html" status="active" location="adventures_with_non_ascii_characters.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle=""/>
+ <page name="santaموزاريلا.html" href="santa-14209312.html" status="active" location="adventures_with_non_ascii_characters.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle=""/>
+ <page name="موزاريلا" href="e85685de.html" status="active" location="adventures_with_non_ascii_characters.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle=""/>
+ <page name="圣马苏里拉.html" href="8b5c72eb.html" status="active" location="adventures_with_non_ascii_characters.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle=""/>
+ <page name="桑塔mozzarella.html" href="mozzarella-7c883eff.html" status="active" location="adventures_with_non_ascii_characters.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/santa-14209312.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/santa-14209312.webxml
new file mode 100644
index 000000000..9d07c9da8
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/santa-14209312.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="santaموزاريلا.html" href="santa-14209312.html" status="active" location="adventures_with_non_ascii_characters.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle="">
+ <description>
+ <para>This page exists solely to understand how QDoc will generate the file name for a page that mixes printable ascii with right-to-left script in its name.</para>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/seite-mit-ausschlie-lich-gro-buchstaben-im-titel-berschrift-htm-bfa91582.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/seite-mit-ausschlie-lich-gro-buchstaben-im-titel-berschrift-htm-bfa91582.webxml
new file mode 100644
index 000000000..8fe3c93ee
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/html/seite-mit-ausschlie-lich-gro-buchstaben-im-titel-berschrift-htm-bfa91582.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="SEITE_MIT_AUSSCHLIEßLICH_GROßBUCHSTABEN_IM_TITEL_ÜBERSCHRIFT.htm" href="seite-mit-ausschlie-lich-gro-buchstaben-im-titel-berschrift-htm-bfa91582.html" status="active" location="adventures_with_non_ascii_characters.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle="">
+ <description>
+ <para>This page exists solely to understand how QDoc will generate the file name for a page with non-ascii-printable latin characters in its name.</para>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/mozzarella-7c883eff.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/mozzarella-7c883eff.html
new file mode 100644
index 000000000..bb4b3651d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/mozzarella-7c883eff.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- adventures_with_non_ascii_characters.qdoc -->
+ <title>NonAsciiCharacterInput</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<!-- $$$桑塔mozzarella.html-description -->
+<div class="descr" id="details">
+<p>This page exists solely to understand how QDoc will generate the file name for a page that mixes printable ascii with non-latin characters in its name.</p>
+</div>
+<!-- @@@桑塔mozzarella.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/nonasciicharacterinput.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/nonasciicharacterinput.index
new file mode 100644
index 000000000..aa306d7eb
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/nonasciicharacterinput.index
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="NonAsciiCharacterInput Reference Documentation" version="" project="NonAsciiCharacterInput">
+ <namespace name="" status="active" access="public" module="nonasciicharacterinput">
+ <page name="adventures_with_non_ascii_characters.html" href="adventures-with-non-ascii-characters.html" status="active" location="adventures_with_non_ascii_characters.qdoc" documented="true" subtype="page" title="Adventures with non-ascii characters in QDoc" fulltitle="Adventures with non-ascii characters in QDoc" subtitle="" brief="Test that non-ascii characters work as input to QDoc commands">
+ <contents name="a-713da3e8" title="A 大纲视图" level="1"/>
+ <contents name="3d-42faee45" title="3D场景视图" level="1"/>
+ <contents name="3d-c57e864e" title="这就是3D场景视图" level="1"/>
+ <contents name="662952c1" title="属性视图" level="1"/>
+ <contents name="further-details" title="Further details" level="1"/>
+ <contents name="ascii-characters-that-are-non-printable-ascii-such-as-or-521d09f0" title="Ascii characters that are non-printable ascii, such as ß, ü, or ø" level="2"/>
+ </page>
+ <page name="SEITE_MIT_AUSSCHLIEßLICH_GROßBUCHSTABEN_IM_TITEL_ÜBERSCHRIFT.htm" href="seite-mit-ausschlie-lich-gro-buchstaben-im-titel-berschrift-htm-bfa91582.html" status="active" location="adventures_with_non_ascii_characters.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle=""/>
+ <page name="santaموزاريلا.html" href="santa-14209312.html" status="active" location="adventures_with_non_ascii_characters.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle=""/>
+ <page name="موزاريلا" href="e85685de.html" status="active" location="adventures_with_non_ascii_characters.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle=""/>
+ <page name="圣马苏里拉.html" href="8b5c72eb.html" status="active" location="adventures_with_non_ascii_characters.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle=""/>
+ <page name="桑塔mozzarella.html" href="mozzarella-7c883eff.html" status="active" location="adventures_with_non_ascii_characters.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/santa-14209312.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/santa-14209312.html
new file mode 100644
index 000000000..f40feed36
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/santa-14209312.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- adventures_with_non_ascii_characters.qdoc -->
+ <title>NonAsciiCharacterInput</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<!-- $$$santaموزاريلا.html-description -->
+<div class="descr" id="details">
+<p>This page exists solely to understand how QDoc will generate the file name for a page that mixes printable ascii with right-to-left script in its name.</p>
+</div>
+<!-- @@@santaموزاريلا.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/seite-mit-ausschlie-lich-gro-buchstaben-im-titel-berschrift-htm-bfa91582.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/seite-mit-ausschlie-lich-gro-buchstaben-im-titel-berschrift-htm-bfa91582.html
new file mode 100644
index 000000000..16df49755
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/seite-mit-ausschlie-lich-gro-buchstaben-im-titel-berschrift-htm-bfa91582.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- adventures_with_non_ascii_characters.qdoc -->
+ <title>NonAsciiCharacterInput</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<!-- $$$SEITE_MIT_AUSSCHLIEßLICH_GROßBUCHSTABEN_IM_TITEL_ÜBERSCHRIFT.htm-description -->
+<div class="descr" id="details">
+<p>This page exists solely to understand how QDoc will generate the file name for a page with non-ascii-printable latin characters in its name.</p>
+</div>
+<!-- @@@SEITE_MIT_AUSSCHLIEßLICH_GROßBUCHSTABEN_IM_TITEL_ÜBERSCHRIFT.htm -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/non_ascii_character_input.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/non_ascii_character_input.qdocconf
new file mode 100644
index 000000000..0177b51ac
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/non_ascii_character_input.qdocconf
@@ -0,0 +1,30 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+project = NonAsciiCharacterInput
+
+headerdirs = ./src
+sourcedirs = ./src
+exampledirs = ./src
+
+outputformats = WebXML HTML
+WebXML.quotinginformation = true
+WebXML.nosubdirs = true
+
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ./src/images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+# By default, use -outputdir directly, no subdir.
+# outputsubdir '.' matches the root of expected_output/
+HTML.nosubdirs = true
+HTML.outputsubdir = .
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/src/adventures_with_non_ascii_characters.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/src/adventures_with_non_ascii_characters.qdoc
new file mode 100644
index 000000000..c5f09cb1c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/src/adventures_with_non_ascii_characters.qdoc
@@ -0,0 +1,89 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page adventures_with_non_ascii_characters.html
+ \title Adventures with non-ascii characters in QDoc
+ \brief Test that non-ascii characters work as input to QDoc commands.
+
+ 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-64506)
+ that was reported against QDoc's \\section1 command. The issue, as
+ experienced by the reporter of the bug, is that if the \\section1 command
+ is followed by a non-ascii character (for example Chinese characters),
+ navigation links aren't generated for the section title. The bug was filed
+ against Qt 5.9.2. This test case aims at reproducing the issue as filed by
+ the reporter.
+
+ Such this document snippet:
+
+ \section1 A 大纲视图
+ The reporter states that this link works, presumably because it begins with
+ the ascii character "A".
+
+ 这就是大纲视图
+
+ \section1 3D场景视图
+ The reporter states that this link works, presumably because it begins with
+ the digit "3".
+
+ 这就是3D场景视图
+
+ \section1 这就是3D场景视图
+ If this section generates a duplicate anchor, "3D", it's because 3D
+ is the only part of the section title QDoc recognizes. This is an error
+ caused by the same bug, and the link should somehow reflect that QDoc
+ encountered the Chinese (or any non-ascii) characters instead.
+
+ \section1 属性视图
+ The reporter states that this link doesn't work, presumably because it
+ begins with the Chinese character "属".
+
+ 这就是属性视图
+
+ \section1 Further details
+ The bug report is at \l https://bugreports.qt.io/browse/QTBUG-64506. It
+ contains the content used to trigger the behavior in this test case. The
+ Chinese characters are copied verbatim from the report.
+
+ \section2 Ascii characters that are non-printable ascii, such as ß, ü, or ø
+ 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.
+*/
+
+/*!
+ \page SEITE_MIT_AUSSCHLIEßLICH_GROßBUCHSTABEN_IM_TITEL_ÜBERSCHRIFT.htm
+
+ This page exists solely to understand how QDoc will generate the file name
+ for a page with non-ascii-printable latin characters in its name.
+*/
+
+/*!
+ \page موزاريلا سانتا.html
+
+ This page exists solely to understand how QDoc will generate the file name
+ for a page with right-to-left script in its name.
+*/
+
+/*!
+ \page 圣马苏里拉.html
+
+ This page exists solely to understand how QDoc will generate the file name
+ for a page with non-latin characters in its name.
+*/
+
+/*!
+ \page santaموزاريلا.html
+
+ This page exists solely to understand how QDoc will generate the file name
+ for a page that mixes printable ascii with right-to-left script in its name.
+*/
+
+/*!
+ \page 桑塔mozzarella.html
+
+ This page exists solely to understand how QDoc will generate the file name
+ for a page that mixes printable ascii with non-latin characters in its name.
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/crash.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/crash.xml
new file mode 100644
index 000000000..04e27b4a3
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/crash.xml
@@ -0,0 +1,12 @@
+<?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>OutputFromQDocFiles</db:productname>
+<db:edition>OutputFromQDocFiles - A test project for QDoc build artifacts</db:edition>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:para><db:link xlink:href=""></db:link></db:para>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/images/01.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/images/01.png
new file mode 100644
index 000000000..d73ab969b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/images/01.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/images/leonardo-da-vinci.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/images/leonardo-da-vinci.png
new file mode 100644
index 000000000..854acb4ca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/images/leonardo-da-vinci.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/qdoctests-qdocfileoutput-exhaustive.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/qdoctests-qdocfileoutput-exhaustive.xml
new file mode 100644
index 000000000..237896629
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/qdoctests-qdocfileoutput-exhaustive.xml
@@ -0,0 +1,129 @@
+<?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>Exhaustive testing of QDoc commands</db:title>
+<db:productname>OutputFromQDocFiles</db:productname>
+<db:edition>OutputFromQDocFiles - A test project for QDoc build artifacts</db:edition>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>This page is a dumping ground for QDoc commands under test.</db:para>
+</db:abstract>
+</db:info>
+<db:section xml:id="this-is-a-section1">
+<db:title>This is a section1</db:title>
+<db:section xml:id="this-is-a-section2">
+<db:title>This is a section2</db:title>
+<db:section xml:id="this-is-a-section3">
+<db:title>This is a section3</db:title>
+<db:section xml:id="this-is-a-section4">
+<db:title>This is a section4</db:title>
+<db:programlisting language="cpp" role="bad">This is bad code
+</db:programlisting>
+<db:para>This text should have a line break riiiiight noooow.</db:para>
+<db:para><db:emphasis role="bold">All your text belong to bold</db:emphasis> ...And this is an examble of only <db:emphasis role="bold">bold</db:emphasis> being, well, bold.</db:para>
+<db:programlisting language="cpp"> ...
+</db:programlisting>
+<db:title>This a caption</db:title>
+<db:para>Lorem legal ipsum</db:para>
+<db:blockquote><db:para>This is a quotation.</db:para>
+</db:blockquote>
+<db:sidebar><db:para>Look, ma! I made a sidebar!</db:para>
+</db:sidebar>
+<db:informaltable style="generic">
+<db:tr valign="top">
+<db:td>
+<db:para>Table item in a table row</db:para>
+</db:td>
+</db:tr>
+<db:tr valign="top">
+<db:td>
+<db:para>Another item in a different row</db:para>
+</db:td>
+</db:tr>
+</db:informaltable>
+<db:important>
+<db:para>This is really important.</db:para>
+</db:important>
+<db:note>
+<db:para>The code above doesn't compile</db:para>
+</db:note>
+</db:section>
+</db:section>
+</db:section>
+</db:section>
+<db:section xml:id="images">
+<db:title>Images</db:title>
+<db:para>An image without any text:</db:para>
+<db:mediaobject>
+<db:imageobject>
+<db:imagedata fileref="images/leonardo-da-vinci.png"/>
+</db:imageobject>
+</db:mediaobject>
+<db:para>An image with just an alternative text:</db:para>
+<db:mediaobject>
+<db:alt>Image alt</db:alt>
+<db:imageobject>
+<db:imagedata fileref="images/leonardo-da-vinci.png"/>
+</db:imageobject>
+</db:mediaobject>
+<db:para>An image with alternative text and 1-atom caption:</db:para>
+<db:figure>
+<db:title>Image caption</db:title>
+<db:mediaobject>
+<db:alt>Image alt</db:alt>
+<db:imageobject>
+<db:imagedata fileref="images/leonardo-da-vinci.png"/>
+</db:imageobject>
+</db:mediaobject>
+</db:figure>
+<db:para>An image with alternative text and 2-atom caption:</db:para>
+<db:figure>
+<db:title>Image caption with <db:emphasis role="bold">bold</db:emphasis> text</db:title>
+<db:mediaobject>
+<db:alt>Image alt</db:alt>
+<db:imageobject>
+<db:imagedata fileref="images/leonardo-da-vinci.png"/>
+</db:imageobject>
+</db:mediaobject>
+</db:figure>
+<db:para>A bordered image:</db:para>
+<db:mediaobject>
+<db:imageobject>
+<db:imagedata fileref="images/leonardo-da-vinci.png"/>
+</db:imageobject>
+</db:mediaobject>
+<db:para>A bordered image with a caption:</db:para>
+<db:figure>
+<db:title>Screenshot of the System Tray Icon</db:title>
+<db:mediaobject>
+<db:imageobject>
+<db:imagedata fileref="images/leonardo-da-vinci.png"/>
+</db:imageobject>
+</db:mediaobject>
+</db:figure>
+<db:para>An inline image:</db:para>
+<db:para>The is a paragraph containing an <db:inlinemediaobject>
+<db:imageobject>
+<db:imagedata fileref="images/01.png"/>
+</db:imageobject>
+</db:inlinemediaobject> inline image to test if qdoc handles them properly, without considering rest of the line as alt text for the image.</db:para>
+<db:para>An inline image with alt text:</db:para>
+<db:para>Here is another example of <db:inlinemediaobject>
+<db:alt>No. 1</db:alt>
+<db:imageobject>
+<db:imagedata fileref="images/01.png"/>
+</db:imageobject>
+</db:inlinemediaobject> inline image with alternative text, which should be added as an attribute to the inline image.</db:para>
+<db:para>File quoting:</db:para>
+<db:programlisting language="cpp"> if (false) {
+ return 1;
+ }
+</db:programlisting>
+</db:section>
+<db:section xml:id="commands-not-yet-tested">
+<db:title>Commands not yet tested</db:title>
+<db:warning>
+<db:para>The following commands have yet to be tested: footnote link sincelist header index topicref // or just don’t care, remove it inlineimage printline printto quotefile skipline skipuntil span snippet codeline overload sub sup tableofcontents tt uicontrol endmapref endomit underline unicode</db:para>
+</db:warning>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/qdoctests-qdocfileoutput-linking.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/qdoctests-qdocfileoutput-linking.xml
new file mode 100644
index 000000000..51b7e62b3
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/qdoctests-qdocfileoutput-linking.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>Testing QDoc's link command</db:title>
+<db:productname>OutputFromQDocFiles</db:productname>
+<db:edition>OutputFromQDocFiles - A test project for QDoc build artifacts</db:edition>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:extendedlink xlink:type="extended"><db:link xlink:to="qdoctests-qdocfileoutput.xml" xlink:type="arc" xlink:arcrole="prev" xlink:title="QDoc Testing"/></db:extendedlink>
+<db:extendedlink xlink:type="extended"><db:link xlink:to="toc.xml" xlink:type="arc" xlink:arcrole="next" xlink:title="Table of Contents"/></db:extendedlink>
+<db:abstract>
+<db:para>This is a page for testing QDoc's link command.</db:para>
+</db:abstract>
+</db:info>
+<db:anchor xml:id="link-test-target"/>
+<db:section xml:id="link-targets">
+<db:title>Link targets</db:title>
+<db:para>Valid parameters for the link command (<db:code>\l</db:code>) are page and section titles, targets defined with \target or \keyword commands, and API reference keywords (types, methods, namespaces, and so on).</db:para>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/qdoctests-qdocfileoutput.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/qdoctests-qdocfileoutput.xml
new file mode 100644
index 000000000..72905681d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/qdoctests-qdocfileoutput.xml
@@ -0,0 +1,80 @@
+<?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 QDoc output from .qdoc files</db:title>
+<db:productname>OutputFromQDocFiles</db:productname>
+<db:edition>OutputFromQDocFiles - A test project for QDoc build artifacts</db:edition>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:extendedlink xlink:type="extended"><db:link xlink:to="qdoctests-qdocfileoutput-linking.xml" xlink:type="arc" xlink:arcrole="next" xlink:title="QDoc Linking Test"/></db:extendedlink>
+<db:abstract>
+<db:para>This is a simple page for testing purposes only.</db:para>
+</db:abstract>
+</db:info>
+<db:para>QDoc generates documentation for software projects. It does this by extracting <db:emphasis>QDoc comments</db:emphasis> from project source files. QDoc comments are signified by a C-style-like comment tag followed by an exclamation point, like this: <db:code>/*!</db:code> <db:code>This text is contained within QDoc comment tags.</db:code> <db:code>*/</db:code>.</db:para>
+<db:section xml:id="supported-file-types">
+<db:title>Supported file types</db:title>
+<db:para>QDoc parses <db:code>.cpp</db:code> and <db:code>.qdoc</db:code> files. It does extract comments from header (<db:code>.h</db:code>) files.</db:para>
+</db:section>
+<db:section xml:id="further-information">
+<db:title>Further information</db:title>
+<db:para>This test document is written with the purpose of testing the output QDoc generates when parsing <db:code>.qdoc</db:code> files. It is fairly simple and makes use of a limited subset of QDoc's command. Those commands are:</db:para>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:code>\page</db:code></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:code>\title</db:code></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:code>\brief</db:code></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:code>\e</db:code> (for emphasizing &quot;QDoc comments&quot;)</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:code>\c</db:code> (for multiple monospace-formatted entries)</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:code>\section1</db:code></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:code>\list</db:code></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:code>\li</db:code></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:code>\endlist</db:code></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+<db:section xml:id="linking">
+<db:title>Linking</db:title>
+<db:para>There are multiple ways to create hyperlinks to other topics:</db:para>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="qdoctests-qdocfileoutput-linking.xml">Linking to a page title</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="qdoctests-qdocfileoutput-linking.xml#link-targets">Linking to a section title</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="qdoctests-qdocfileoutput-linking.xml#link-test-target">Linking using a \target string</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="qdoctests-qdocfileoutput-linking.xml">Linking using a \keyword string</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+<db:section xml:id="qdoc-linking-test">
+<db:title>QDoc Linking Test</db:title>
+<db:para>This section title is overridden by another target which takes precedence.</db:para>
+</db:section>
+<db:section xml:id="linking-to-something-in-a-section-title">
+<db:title>Linking to <db:link xlink:href="qdoctests-qdocfileoutput.xml#further-information">something</db:link> in a section title</db:title>
+<db:para>This is allowed but a questionable practice.</db:para>
+<db:note>
+<db:para>You're looking at detailed information.</db:para>
+</db:note>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/qdoctests-qdocmanuallikefileoutput.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/qdoctests-qdocmanuallikefileoutput.xml
new file mode 100644
index 000000000..38e3887ef
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/qdoctests-qdocmanuallikefileoutput.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>Document Navigation</db:title>
+<db:productname>OutputFromQDocFiles</db:productname>
+<db:edition>OutputFromQDocFiles - A test project for QDoc build artifacts</db:edition>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:para>The navigation commands...</db:para>
+<db:blockquote/>
+<db:programlisting language="cpp">&amp;lt;head&amp;gt;
+ ...
+ &amp;lt;link rel=&amp;quot;start&amp;quot; href=&amp;quot;basicqt.html&amp;quot; /&amp;gt;
+ ...
+&amp;lt;/head&amp;gt;
+</db:programlisting>
+<db:section xml:id="commands">
+<db:title>Commands</db:title>
+<db:anchor xml:id="previouspage-command"/>
+<db:section xml:id="previouspage">
+<db:title>\previouspage</db:title>
+<db:para>The \previouspage command...</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/toc.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/toc.xml
new file mode 100644
index 000000000..14ccd795d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/docbook/toc.xml
@@ -0,0 +1,23 @@
+<?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>Table of Contents</db:title>
+<db:productname>OutputFromQDocFiles</db:productname>
+<db:edition>OutputFromQDocFiles - A test project for QDoc build artifacts</db:edition>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:extendedlink xlink:type="extended"><db:link xlink:to="qdoctests-qdocfileoutput-linking.xml" xlink:type="arc" xlink:arcrole="prev" xlink:title="QDoc Linking Test"/></db:extendedlink>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="qdoctests-qdocfileoutput.xml">QDoc Testing</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="qdoctests-qdocfileoutput-linking.xml">QDoc Linking Test</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="toc.xml">Table of Contents</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/crash.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/crash.html
new file mode 100644
index 000000000..7ac452663
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/crash.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- qdoctests-outputfromqdocfiles.qdoc -->
+ <title>OutputFromQDocFiles</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<!-- $$$crash.html-description -->
+<div class="descr" id="details">
+<p></p>
+</div>
+<!-- @@@crash.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/images/01.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/images/01.png
new file mode 100644
index 000000000..d73ab969b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/images/01.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/images/leonardo-da-vinci.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/images/leonardo-da-vinci.png
new file mode 100644
index 000000000..854acb4ca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/images/leonardo-da-vinci.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/outputfromqdocfiles.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/outputfromqdocfiles.index
new file mode 100644
index 000000000..eb63b02c2
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/outputfromqdocfiles.index
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="A test project for QDoc build artifacts" version="" project="OutputFromQDocFiles">
+ <namespace name="" status="active" access="public" module="outputfromqdocfiles">
+ <page name="qdoctests-qdocmanuallikefileoutput.html" href="qdoctests-qdocmanuallikefileoutput.html" status="active" location="qdoctests-outputfromqdocmanuallikefiles.qdoc" documented="true" subtype="page" title="Document Navigation" fulltitle="Document Navigation" subtitle="">
+ <target name="previouspage-command"/>
+ <contents name="commands" title="Commands" level="1"/>
+ <contents name="previouspage" title="\previouspage" level="2"/>
+ </page>
+ <page name="qdoctests-qdocfileoutput-exhaustive.html" href="qdoctests-qdocfileoutput-exhaustive.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Exhaustive testing of QDoc commands" fulltitle="Exhaustive testing of QDoc commands" subtitle="" brief="This page is a dumping ground for QDoc commands under test">
+ <contents name="this-is-a-section1" title="This is a section1" level="1"/>
+ <contents name="this-is-a-section2" title="This is a section2" level="2"/>
+ <contents name="this-is-a-section3" title="This is a section3" level="3"/>
+ <contents name="this-is-a-section4" title="This is a section4" level="4"/>
+ <contents name="images" title="Images" level="1"/>
+ <contents name="commands-not-yet-tested" title="Commands not yet tested" level="1"/>
+ </page>
+ <page name="toc.html" href="toc.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Table of Contents" fulltitle="Table of Contents" subtitle=""/>
+ <page name="qdoctests-qdocfileoutput.html" href="qdoctests-qdocfileoutput.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Testing QDoc output from .qdoc files" fulltitle="Testing QDoc output from .qdoc files" subtitle="" brief="This is a simple page for testing purposes only">
+ <contents name="supported-file-types" title="Supported file types" level="1"/>
+ <contents name="further-information" title="Further information" level="1"/>
+ <contents name="linking" title="Linking" level="1"/>
+ <contents name="qdoc-linking-test" title="QDoc Linking Test" level="1"/>
+ <contents name="linking-to-something-in-a-section-title" title="Linking to something in a section title" level="1"/>
+ </page>
+ <page name="qdoctests-qdocfileoutput-linking.html" href="qdoctests-qdocfileoutput-linking.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Testing QDoc's link command" fulltitle="Testing QDoc's link command" subtitle="" brief="This is a page for testing QDoc's link command">
+ <target name="link-test-target"/>
+ <keyword name="qdoc-linking-test" title="QDoc Linking Test"/>
+ <contents name="link-targets" title="Link targets" level="1"/>
+ </page>
+ <page name="crash.html" href="crash.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/qdoctests-qdocfileoutput-exhaustive.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/qdoctests-qdocfileoutput-exhaustive.html
new file mode 100644
index 000000000..c4cb46759
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/qdoctests-qdocfileoutput-exhaustive.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- qdoctests-outputfromqdocfiles.qdoc -->
+ <meta name="description" content="This page is a dumping ground for QDoc commands under test.">
+ <title>Exhaustive testing of QDoc commands | OutputFromQDocFiles</title>
+</head>
+<body>
+<li id="buildversion">OutputFromQDocFiles - A test project for QDoc build artifacts</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#this-is-a-section1">This is a section1</a></li>
+<li class="level2"><a href="#this-is-a-section2">This is a section2</a></li>
+<li class="level3"><a href="#this-is-a-section3">This is a section3</a></li>
+<li class="level4"><a href="#this-is-a-section4">This is a section4</a></li>
+<li class="level1"><a href="#images">Images</a></li>
+<li class="level1"><a href="#commands-not-yet-tested">Commands not yet tested</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Exhaustive testing of QDoc commands</h1>
+<!-- $$$qdoctests-qdocfileoutput-exhaustive.html-description -->
+<div class="descr" id="details">
+<h2 id="this-is-a-section1">This is a section1</h2>
+<h3 id="this-is-a-section2">This is a section2</h3>
+<h4 id="this-is-a-section3">This is a section3</h4>
+<h5 id="this-is-a-section4">This is a section4</h5>
+<pre class="cpp plain" translate="no">This is bad code</pre>
+<p>This text should have a line break riiiiight <br />
+ noooow.</p>
+<p><b>All your text belong to bold</b> ...And this is an examble of only <b>bold</b> being, well, bold.</p>
+<pre class="cpp" translate="no"> ...</pre>
+<p class="figCaption">This a caption</p>
+<div class="LegaleseLeft"><p>Lorem legal ipsum</p>
+</div><blockquote><p>This is a quotation.</p>
+</blockquote>
+ <html><body>This is <b>raw</b>. Like the <h1>Eddie Murphy</h1> movie. Just not as funny.</body></html>
+ <p>Look, ma! I made a sidebar!</p>
+<div class="table"><table class="generic">
+ <tr valign="top" class="odd"><td >Table item in a table row</td></tr>
+<tr valign="top" class="even"><td >Another item in a different row</td></tr>
+</table></div>
+<div class="admonition important">
+<p><b>Important: </b>This is really important.</p>
+</div>
+<div class="admonition note">
+<p><b>Note: </b>The code above doesn't compile</p>
+</div>
+<hr />
+<h2 id="images">Images</h2>
+<p>An image without any text:</p>
+<p class="centerAlign"><img src="images/leonardo-da-vinci.png" alt="" /></p><p>An image with just an alternative text:</p>
+<p class="centerAlign"><img src="images/leonardo-da-vinci.png" alt="Image alt" /></p><p>An image with alternative text and 1-atom caption:</p>
+<p class="centerAlign"><img src="images/leonardo-da-vinci.png" alt="Image alt" /></p><p class="figCaption">Image caption</p>
+<p>An image with alternative text and 2-atom caption:</p>
+<p class="centerAlign"><img src="images/leonardo-da-vinci.png" alt="Image alt" /></p><p class="figCaption">Image caption with <b>bold</b> text</p>
+<p>A bordered image:</p>
+<div class="border"><p class="centerAlign"><img src="images/leonardo-da-vinci.png" alt="" /></p></div><p>A bordered image with a caption:</p>
+<div class="border"><p class="centerAlign"><img src="images/leonardo-da-vinci.png" alt="" /></p></div><p class="figCaption">Screenshot of the System Tray Icon</p>
+<p>An inline image:</p>
+<p>The is a paragraph containing an <img src="images/01.png" alt="" /> inline image to test if qdoc handles them properly, without considering rest of the line as alt text for the image.</p>
+<p>An inline image with alt text:</p>
+<p>Here is another example of <img src="images/01.png" alt="No. 1" /> inline image with alternative text, which should be added as an attribute to the inline image.</p>
+<p>File quoting:</p>
+<pre class="cpp" translate="no"> <span class="keyword">if</span> (<span class="keyword">false</span>) {
+ <span class="keyword">return</span> <span class="number">1</span>;
+ }</pre>
+<h2 id="commands-not-yet-tested">Commands not yet tested</h2>
+<div class="admonition warning">
+<p><b>Warning: </b>The following commands have yet to be tested: footnote link sincelist header index topicref // or just don’t care, remove it inlineimage printline printto quotefile skipline skipuntil span snippet codeline overload sub sup tableofcontents tt uicontrol endmapref endomit underline unicode</p>
+</div>
+</div>
+<!-- @@@qdoctests-qdocfileoutput-exhaustive.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/qdoctests-qdocfileoutput-linking.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/qdoctests-qdocfileoutput-linking.html
new file mode 100644
index 000000000..b4d63e76e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/qdoctests-qdocfileoutput-linking.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- qdoctests-outputfromqdocfiles.qdoc -->
+ <meta name="description" content="This is a page for testing QDoc's link command.">
+ <title>Testing QDoc's link command | OutputFromQDocFiles</title>
+</head>
+<body>
+<li id="buildversion">OutputFromQDocFiles - A test project for QDoc build artifacts</li>
+ <link rel="prev" href="qdoctests-qdocfileoutput.html" />
+ <link rel="next" href="toc.html" />
+<p class="naviNextPrevious headerNavi">
+<a class="prevPage" href="qdoctests-qdocfileoutput.html">QDoc Testing</a>
+<a class="nextPage" href="toc.html">Table of Contents</a>
+</p>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#link-targets">Link targets</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Testing QDoc's link command</h1>
+<!-- $$$qdoctests-qdocfileoutput-linking.html-description -->
+<div class="descr" id="details">
+<span id="link-test-target"></span><h2 id="link-targets">Link targets</h2>
+<p>Valid parameters for the link command (<code translate="no">\l</code>) are page and section titles, targets defined with \target or \keyword commands, and API reference keywords (types, methods, namespaces, and so on).</p>
+</div>
+<!-- @@@qdoctests-qdocfileoutput-linking.html -->
+<p class="naviNextPrevious footerNavi">
+<a class="prevPage" href="qdoctests-qdocfileoutput.html">QDoc Testing</a>
+<a class="nextPage" href="toc.html">Table of Contents</a>
+</p>
+</body>
+</html>
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
new file mode 100644
index 000000000..74570305c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/qdoctests-qdocfileoutput.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- qdoctests-outputfromqdocfiles.qdoc -->
+ <meta name="description" content="This is a simple page for testing purposes only.">
+ <title>Testing QDoc output from .qdoc files | OutputFromQDocFiles</title>
+</head>
+<body>
+<li id="buildversion">OutputFromQDocFiles - A test project for QDoc build artifacts</li>
+ <link rel="next" href="qdoctests-qdocfileoutput-linking.html" />
+<p class="naviNextPrevious headerNavi">
+<a class="nextPage" href="qdoctests-qdocfileoutput-linking.html">QDoc Linking Test</a>
+</p>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#supported-file-types">Supported file types</a></li>
+<li class="level1"><a href="#further-information">Further information</a></li>
+<li class="level1"><a href="#linking">Linking</a></li>
+<li class="level1"><a href="#qdoc-linking-test">QDoc Linking Test</a></li>
+<li class="level1"><a href="#linking-to-something-in-a-section-title">Linking to something in a section title</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Testing QDoc output from .qdoc files</h1>
+<!-- $$$qdoctests-qdocfileoutput.html-description -->
+<div class="descr" id="details">
+<p>QDoc generates documentation for software projects. It does this by extracting <i>QDoc comments</i> from project source files. QDoc comments are signified by a C-style-like comment tag followed by an exclamation point, like this: <code translate="no">/*!</code> <code translate="no">This text is contained within QDoc comment tags.</code> <code translate="no">*/</code>.</p>
+<h2 id="supported-file-types">Supported file types</h2>
+<p>QDoc parses <code translate="no">.cpp</code> and <code translate="no">.qdoc</code> files. It does extract comments from header (<code translate="no">.h</code>) files.</p>
+<h2 id="further-information">Further information</h2>
+<p>This test document is written with the purpose of testing the output QDoc generates when parsing <code translate="no">.qdoc</code> files. It is fairly simple and makes use of a limited subset of QDoc's command. Those commands are:</p>
+<ul>
+<li><code translate="no">\page</code></li>
+<li><code translate="no">\title</code></li>
+<li><code translate="no">\brief</code></li>
+<li><code translate="no">\e</code> (for emphasizing &quot;QDoc comments&quot;)</li>
+<li><code translate="no">\c</code> (for multiple monospace-formatted entries)</li>
+<li><code translate="no">\section1</code></li>
+<li><code translate="no">\list</code></li>
+<li><code translate="no">\li</code></li>
+<li><code translate="no">\endlist</code></li>
+</ul>
+<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>
+</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>
+<p>This is allowed but a questionable practice.</p>
+<details>
+<summary>QDoc details</summary>
+<div class="admonition note">
+<p><b>Note: </b>You're looking at detailed information.</p>
+</div>
+</details>
+</div>
+<!-- @@@qdoctests-qdocfileoutput.html -->
+<p class="naviNextPrevious footerNavi">
+<a class="nextPage" href="qdoctests-qdocfileoutput-linking.html">QDoc Linking Test</a>
+</p>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/qdoctests-qdocmanuallikefileoutput.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/qdoctests-qdocmanuallikefileoutput.html
new file mode 100644
index 000000000..e4b120bd0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/qdoctests-qdocmanuallikefileoutput.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- qdoctests-outputfromqdocmanuallikefiles.qdoc -->
+ <title>Document Navigation | OutputFromQDocFiles</title>
+</head>
+<body>
+<li id="buildversion">OutputFromQDocFiles - A test project for QDoc build artifacts</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#commands">Commands</a></li>
+<li class="level2"><a href="#previouspage">\previouspage</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Document Navigation</h1>
+<!-- $$$qdoctests-qdocmanuallikefileoutput.html-description -->
+<div class="descr" id="details">
+<p>The navigation commands...</p>
+<blockquote> <table border="0" cellpadding="0" cellspacing="5" width="100%">
+
+ <tr>
+ <p>
+ [Previous: <a href="15-qdoc-commands-navigation.html#deadlink">
+ Basic Qt</a>]
+ [<a href="15-qdoc-commands-navigation.html#deadlink">Contents</a>]
+ [Next: <a href="15-qdoc-commands-navigation.html#deadlink">
+ Creating Dialogs</a>]
+ </p>
+
+ <h1 align="center">Getting Started<br /></h1>
+
+ <p>
+ This chapter shows how to combine basic C++ with the
+ functionality provided by Qt to create a few small graphical
+ interface (GUI) applications.
+ </p>
+
+ <p>
+ [Previous: <a href="15-qdoc-commands-navigation.html#deadlink">
+ Basic Qt</a>]
+ [<a href="15-qdoc-commands-navigation.html#deadlink">Contents</a>]
+ [Next: <a href="15-qdoc-commands-navigation.html#deadlink">
+ Creating Dialogs</a>]
+ </p>
+
+ </table>
+ </blockquote>
+<pre class="cpp" translate="no"><span class="operator">&lt;</span>head<span class="operator">&gt;</span>
+ <span class="operator">.</span><span class="operator">.</span><span class="operator">.</span>
+ <span class="operator">&lt;</span>link rel<span class="operator">=</span><span class="string">&quot;start&quot;</span> href<span class="operator">=</span><span class="string">&quot;basicqt.html&quot;</span> <span class="operator">/</span><span class="operator">&gt;</span>
+ <span class="operator">.</span><span class="operator">.</span><span class="operator">.</span>
+<span class="operator">&lt;</span><span class="operator">/</span>head<span class="operator">&gt;</span></pre>
+<h2 id="commands">Commands</h2>
+<span id="previouspage-command"></span><h3 id="previouspage">\previouspage</h3>
+<p>The \previouspage command...</p>
+</div>
+<!-- @@@qdoctests-qdocmanuallikefileoutput.html -->
+</body>
+</html>
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
new file mode 100644
index 000000000..5901538d0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/toc.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- qdoctests-outputfromqdocfiles.qdoc -->
+ <title>Table of Contents | OutputFromQDocFiles</title>
+</head>
+<body>
+<li id="buildversion">OutputFromQDocFiles - A test project for QDoc build artifacts</li>
+ <link rel="prev" href="qdoctests-qdocfileoutput-linking.html" />
+<p class="naviNextPrevious headerNavi">
+<a class="prevPage" href="qdoctests-qdocfileoutput-linking.html">QDoc Linking Test</a>
+</p>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Table of Contents</h1>
+<!-- $$$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>
+</ul>
+</div>
+<!-- @@@toc.html -->
+<p class="naviNextPrevious footerNavi">
+<a class="prevPage" href="qdoctests-qdocfileoutput-linking.html">QDoc Linking Test</a>
+</p>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/crash.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/crash.webxml
new file mode 100644
index 000000000..38c761f7d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/crash.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="crash.html" href="crash.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle="">
+ <description>
+ <para></para>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/images/01.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/images/01.png
new file mode 100644
index 000000000..d73ab969b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/images/01.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/images/leonardo-da-vinci.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/images/leonardo-da-vinci.png
new file mode 100644
index 000000000..854acb4ca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/images/leonardo-da-vinci.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/outputfromqdocfiles.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/outputfromqdocfiles.index
new file mode 100644
index 000000000..eb63b02c2
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/outputfromqdocfiles.index
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="A test project for QDoc build artifacts" version="" project="OutputFromQDocFiles">
+ <namespace name="" status="active" access="public" module="outputfromqdocfiles">
+ <page name="qdoctests-qdocmanuallikefileoutput.html" href="qdoctests-qdocmanuallikefileoutput.html" status="active" location="qdoctests-outputfromqdocmanuallikefiles.qdoc" documented="true" subtype="page" title="Document Navigation" fulltitle="Document Navigation" subtitle="">
+ <target name="previouspage-command"/>
+ <contents name="commands" title="Commands" level="1"/>
+ <contents name="previouspage" title="\previouspage" level="2"/>
+ </page>
+ <page name="qdoctests-qdocfileoutput-exhaustive.html" href="qdoctests-qdocfileoutput-exhaustive.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Exhaustive testing of QDoc commands" fulltitle="Exhaustive testing of QDoc commands" subtitle="" brief="This page is a dumping ground for QDoc commands under test">
+ <contents name="this-is-a-section1" title="This is a section1" level="1"/>
+ <contents name="this-is-a-section2" title="This is a section2" level="2"/>
+ <contents name="this-is-a-section3" title="This is a section3" level="3"/>
+ <contents name="this-is-a-section4" title="This is a section4" level="4"/>
+ <contents name="images" title="Images" level="1"/>
+ <contents name="commands-not-yet-tested" title="Commands not yet tested" level="1"/>
+ </page>
+ <page name="toc.html" href="toc.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Table of Contents" fulltitle="Table of Contents" subtitle=""/>
+ <page name="qdoctests-qdocfileoutput.html" href="qdoctests-qdocfileoutput.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Testing QDoc output from .qdoc files" fulltitle="Testing QDoc output from .qdoc files" subtitle="" brief="This is a simple page for testing purposes only">
+ <contents name="supported-file-types" title="Supported file types" level="1"/>
+ <contents name="further-information" title="Further information" level="1"/>
+ <contents name="linking" title="Linking" level="1"/>
+ <contents name="qdoc-linking-test" title="QDoc Linking Test" level="1"/>
+ <contents name="linking-to-something-in-a-section-title" title="Linking to something in a section title" level="1"/>
+ </page>
+ <page name="qdoctests-qdocfileoutput-linking.html" href="qdoctests-qdocfileoutput-linking.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Testing QDoc's link command" fulltitle="Testing QDoc's link command" subtitle="" brief="This is a page for testing QDoc's link command">
+ <target name="link-test-target"/>
+ <keyword name="qdoc-linking-test" title="QDoc Linking Test"/>
+ <contents name="link-targets" title="Link targets" level="1"/>
+ </page>
+ <page name="crash.html" href="crash.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/qdoctests-qdocfileoutput-exhaustive.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/qdoctests-qdocfileoutput-exhaustive.webxml
new file mode 100644
index 000000000..05d560a7e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/qdoctests-qdocfileoutput-exhaustive.webxml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="qdoctests-qdocfileoutput-exhaustive.html" href="qdoctests-qdocfileoutput-exhaustive.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Exhaustive testing of QDoc commands" fulltitle="Exhaustive testing of QDoc commands" subtitle="" brief="This page is a dumping ground for QDoc commands under test">
+ <contents name="this-is-a-section1" title="This is a section1" level="1"/>
+ <contents name="this-is-a-section2" title="This is a section2" level="2"/>
+ <contents name="this-is-a-section3" title="This is a section3" level="3"/>
+ <contents name="this-is-a-section4" title="This is a section4" level="4"/>
+ <contents name="images" title="Images" level="1"/>
+ <contents name="commands-not-yet-tested" title="Commands not yet tested" level="1"/>
+ <description>
+ <brief>This page is a dumping ground for QDoc commands under test.</brief>
+ <section id="this-is-a-section1">
+ <heading level="1">This is a section1</heading>
+ </section>
+ <section id="this-is-a-section2">
+ <heading level="2">This is a section2</heading>
+ </section>
+ <section id="this-is-a-section3">
+ <heading level="3">This is a section3</heading>
+ </section>
+ <section id="this-is-a-section4">
+ <heading level="4">This is a section4</heading>
+ </section>
+ </description>
+ </page>
+ </document>
+ <badcode>This is bad code</badcode>
+ <para>This text should have a line break riiiiight noooow.</para>
+ <para>
+ <bold>All your text belong to bold</bold> ...And this is an examble of only <bold>bold</bold> being, well, bold.</para>
+ <dots indent="4">...</dots>
+ <para>This a caption</para>
+ <legalese>
+ <para>Lorem legal ipsum</para>
+ </legalese>
+ <quote>
+ <para>This is a quotation.</para>
+ </quote>
+ <raw format="HTML"> &lt;html&gt;&lt;body&gt;This is &lt;b&gt;raw&lt;/b&gt;. Like the &lt;h1&gt;Eddie Murphy&lt;/h1&gt; movie. Just not as funny.&lt;/body&gt;&lt;/html&gt;
+ </raw>
+ <para>Look, ma! I made a sidebar!</para>
+ <table>
+ <row>
+ <item>
+ <para>Table item in a table row</para>
+ </item>
+ </row>
+ <row>
+ <item>
+ <para>Another item in a different row</para>
+ </item>
+ </row>
+ </table>
+ <para>
+ <bold>Important:</bold> This is really important.</para>
+ <para>
+ <bold>Note:</bold> The code above doesn't compile</para>
+ <section id="images">
+ <heading level="1">Images</heading>
+ <para>An image without any text:</para>
+ <image href="images/leonardo-da-vinci.png"/>
+ <para>An image with just an alternative text:</para>
+ <image href="images/leonardo-da-vinci.png"/>
+ <para>An image with alternative text and 1-atom caption:</para>
+ <image href="images/leonardo-da-vinci.png"/>
+ <para>Image caption</para>
+ <para>An image with alternative text and 2-atom caption:</para>
+ <image href="images/leonardo-da-vinci.png"/>
+ <para>Image caption with <bold>bold</bold> text</para>
+ <para>A bordered image:</para>
+ <image href="images/leonardo-da-vinci.png"/>
+ <para>A bordered image with a caption:</para>
+ <image href="images/leonardo-da-vinci.png"/>
+ <para>Screenshot of the System Tray Icon</para>
+ <para>An inline image:</para>
+ <para>The is a paragraph containing an <inlineimage href="images/01.png"/> inline image to test if qdoc handles them properly, without considering rest of the line as alt text for the image.</para>
+ <para>An inline image with alt text:</para>
+ <para>Here is another example of <inlineimage href="images/01.png"/> inline image with alternative text, which should be added as an attribute to the inline image.</para>
+ <para>File quoting:</para>
+ <quotefromfile>main.cpp</quotefromfile>
+ <skipto>/if \(/</skipto>
+ <printuntil>/^ \}/</printuntil>
+ </section>
+ <section id="commands-not-yet-tested">
+ <heading level="1">Commands not yet tested</heading>
+ <para>
+ <bold>Warning:</bold> The following commands have yet to be tested: footnote link sincelist header index topicref // or just don’t care, remove it inlineimage printline printto quotefile skipline skipuntil span snippet codeline overload sub sup tableofcontents tt uicontrol endmapref endomit underline unicode</para>
+ </section>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/qdoctests-qdocfileoutput-linking.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/qdoctests-qdocfileoutput-linking.webxml
new file mode 100644
index 000000000..1bb19e10e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/qdoctests-qdocfileoutput-linking.webxml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="qdoctests-qdocfileoutput-linking.html" href="qdoctests-qdocfileoutput-linking.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Testing QDoc's link command" fulltitle="Testing QDoc's link command" subtitle="" brief="This is a page for testing QDoc's link command">
+ <target name="link-test-target"/>
+ <keyword name="qdoc-linking-test" title="QDoc Linking Test"/>
+ <contents name="link-targets" title="Link targets" level="1"/>
+ <description>
+ <relation href="toc.html" type="page" meta="next" description="Table of Contents"/>
+ <relation href="qdoctests-qdocfileoutput.html" type="page" meta="previous" description="Testing QDoc output from .qdoc files"/>
+ <brief>This is a page for testing QDoc's link command.</brief>
+ <target name="link-test-target"/>
+ <section id="link-targets">
+ <heading level="1">Link targets</heading>
+ <para>Valid parameters for the link command (<teletype type="highlighted">\l</teletype>) are page and section titles, targets defined with \target or \keyword commands, and API reference keywords (types, methods, namespaces, and so on).</para>
+ </section>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/qdoctests-qdocfileoutput.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/qdoctests-qdocfileoutput.webxml
new file mode 100644
index 000000000..13b3e5c51
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/qdoctests-qdocfileoutput.webxml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="qdoctests-qdocfileoutput.html" href="qdoctests-qdocfileoutput.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Testing QDoc output from .qdoc files" fulltitle="Testing QDoc output from .qdoc files" subtitle="" brief="This is a simple page for testing purposes only">
+ <contents name="supported-file-types" title="Supported file types" level="1"/>
+ <contents name="further-information" title="Further information" level="1"/>
+ <contents name="linking" title="Linking" level="1"/>
+ <contents name="qdoc-linking-test" title="QDoc Linking Test" level="1"/>
+ <contents name="linking-to-something-in-a-section-title" title="Linking to something in a section title" level="1"/>
+ <description>
+ <relation href="qdoctests-qdocfileoutput-linking.html" type="page" meta="next" description="Testing QDoc's link command"/>
+ <brief>This is a simple page for testing purposes only.</brief>
+ <para>QDoc generates documentation for software projects. It does this by extracting <italic>QDoc comments</italic> from project source files. QDoc comments are signified by a C-style-like comment tag followed by an exclamation point, like this: <teletype type="highlighted">/*!</teletype> <teletype type="highlighted">This text is contained within QDoc comment tags.</teletype> <teletype type="highlighted">*/</teletype>.</para>
+ <section id="supported-file-types">
+ <heading level="1">Supported file types</heading>
+ <para>QDoc parses <teletype type="highlighted">.cpp</teletype> and <teletype type="highlighted">.qdoc</teletype> files. It does extract comments from header (<teletype type="highlighted">.h</teletype>) files.</para>
+ </section>
+ <section id="further-information">
+ <heading level="1">Further information</heading>
+ <para>This test document is written with the purpose of testing the output QDoc generates when parsing <teletype type="highlighted">.qdoc</teletype> files. It is fairly simple and makes use of a limited subset of QDoc's command. Those commands are:</para>
+ <list type="bullet">
+ <item>
+ <para>
+ <teletype type="highlighted">\page</teletype></para>
+ </item>
+ <item>
+ <para>
+ <teletype type="highlighted">\title</teletype></para>
+ </item>
+ <item>
+ <para>
+ <teletype type="highlighted">\brief</teletype></para>
+ </item>
+ <item>
+ <para>
+ <teletype type="highlighted">\e</teletype> (for emphasizing &quot;QDoc comments&quot;)</para>
+ </item>
+ <item>
+ <para>
+ <teletype type="highlighted">\c</teletype> (for multiple monospace-formatted entries)</para>
+ </item>
+ <item>
+ <para>
+ <teletype type="highlighted">\section1</teletype></para>
+ </item>
+ <item>
+ <para>
+ <teletype type="highlighted">\list</teletype></para>
+ </item>
+ <item>
+ <para>
+ <teletype type="highlighted">\li</teletype></para>
+ </item>
+ <item>
+ <para>
+ <teletype type="highlighted">\endlist</teletype></para>
+ </item>
+ </list>
+ </section>
+ <section id="linking">
+ <heading level="1">Linking</heading>
+ <para>There are multiple ways to create hyperlinks to other topics:</para>
+ <list type="bullet">
+ <item>
+ <para>
+ <link raw="Testing QDoc's link command" href="qdoctests-qdocfileoutput-linking.html" type="page" page="Testing QDoc's link command">Linking to a page title</link></para>
+ </item>
+ <item>
+ <para>
+ <link raw="Link targets" href="qdoctests-qdocfileoutput-linking.html#link-targets" type="page" page="Testing QDoc's link command">Linking to a section title</link></para>
+ </item>
+ <item>
+ <para>
+ <link raw="link-test-target" href="qdoctests-qdocfileoutput-linking.html#link-test-target" type="page" page="Testing QDoc's link command">Linking using a \target string</link></para>
+ </item>
+ <item>
+ <para>
+ <link raw="QDoc Linking Test" href="qdoctests-qdocfileoutput-linking.html" type="page" page="Testing QDoc's link command">Linking using a \keyword string</link></para>
+ </item>
+ </list>
+ </section>
+ <section id="qdoc-linking-test">
+ <heading level="1">QDoc Linking Test</heading>
+ <para>This section title is overridden by another target which takes precedence.</para>
+ </section>
+ <section id="linking-to-something-in-a-section-title">
+ <heading level="1">Linking to <link raw="Further information" href="qdoctests-qdocfileoutput.html#further-information" type="page" page="Testing QDoc output from .qdoc files">something</link> in a section title</heading>
+ <para>This is allowed but a questionable practice.</para>
+ <para>
+ <bold>Note:</bold> You're looking at detailed information.</para>
+ </section>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/qdoctests-qdocmanuallikefileoutput.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/qdoctests-qdocmanuallikefileoutput.webxml
new file mode 100644
index 000000000..4502dcf7f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/qdoctests-qdocmanuallikefileoutput.webxml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="qdoctests-qdocmanuallikefileoutput.html" href="qdoctests-qdocmanuallikefileoutput.html" status="active" location="qdoctests-outputfromqdocmanuallikefiles.qdoc" documented="true" subtype="page" title="Document Navigation" fulltitle="Document Navigation" subtitle="">
+ <target name="previouspage-command"/>
+ <contents name="commands" title="Commands" level="1"/>
+ <contents name="previouspage" title="\previouspage" level="2"/>
+ <description>
+ <para>The navigation commands...</para>
+ <quote>
+ <raw format="HTML"> &lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;5&quot; width=&quot;100%&quot;&gt;
+
+ &lt;tr&gt;
+ &lt;p&gt;
+ [Previous: &lt;a href=&quot;15-qdoc-commands-navigation.html#deadlink&quot;&gt;
+ Basic Qt&lt;/a&gt;]
+ [&lt;a href=&quot;15-qdoc-commands-navigation.html#deadlink&quot;&gt;Contents&lt;/a&gt;]
+ [Next: &lt;a href=&quot;15-qdoc-commands-navigation.html#deadlink&quot;&gt;
+ Creating Dialogs&lt;/a&gt;]
+ &lt;/p&gt;
+
+ &lt;h1 align=&quot;center&quot;&gt;Getting Started&lt;br /&gt;&lt;/h1&gt;
+
+ &lt;p&gt;
+ This chapter shows how to combine basic C++ with the
+ functionality provided by Qt to create a few small graphical
+ interface (GUI) applications.
+ &lt;/p&gt;
+
+ &lt;p&gt;
+ [Previous: &lt;a href=&quot;15-qdoc-commands-navigation.html#deadlink&quot;&gt;
+ Basic Qt&lt;/a&gt;]
+ [&lt;a href=&quot;15-qdoc-commands-navigation.html#deadlink&quot;&gt;Contents&lt;/a&gt;]
+ [Next: &lt;a href=&quot;15-qdoc-commands-navigation.html#deadlink&quot;&gt;
+ Creating Dialogs&lt;/a&gt;]
+ &lt;/p&gt;
+
+ &lt;/table&gt;
+ </raw>
+ </quote>
+ <code>&lt;head&gt;
+ ...
+ &lt;link rel=&quot;start&quot; href=&quot;basicqt.html&quot; /&gt;
+ ...
+&lt;/head&gt;</code>
+ <section id="commands">
+ <heading level="1">Commands</heading>
+ <target name="previouspage-command"/>
+ </section>
+ <section id="previouspage">
+ <heading level="2">\previouspage</heading>
+ <para>The \previouspage command...</para>
+ </section>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/toc.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/toc.webxml
new file mode 100644
index 000000000..bef07db18
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/webxml/toc.webxml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="toc.html" href="toc.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Table of Contents" fulltitle="Table of Contents" subtitle="">
+ <description>
+ <relation href="qdoctests-qdocfileoutput-linking.html" type="page" meta="previous" description="Testing QDoc's link command"/>
+ <list type="bullet">
+ <item>
+ <para>
+ <link raw="Testing QDoc output from .qdoc files" href="qdoctests-qdocfileoutput.html" type="page" page="Testing QDoc output from .qdoc files">QDoc Testing</link></para>
+ </item>
+ <item>
+ <para>
+ <link raw="QDoc Linking Test" href="qdoctests-qdocfileoutput-linking.html" type="page" page="Testing QDoc's link command">QDoc Linking Test</link></para>
+ </item>
+ <item>
+ <para>
+ <link raw="Table of Contents" href="toc.html" type="page" page="Table of Contents">Table of Contents</link></para>
+ </item>
+ </list>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/outputfromqdocfiles.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/outputfromqdocfiles.qdocconf
new file mode 100644
index 000000000..8a053de44
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/outputfromqdocfiles.qdocconf
@@ -0,0 +1,43 @@
+project = OutputFromQDocFiles
+description = "A test project for QDoc build artifacts"
+buildversion = "$project - $description"
+moduleheader =
+
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ./src/images
+
+# zero warning policy -- here; allow one which is (qdoc) warning: Can't link to ''
+warninglimit = 1
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+outputformats = HTML WebXML DocBook
+HTML.nosubdirs = true
+HTML.outputsubdir = html
+WebXML.quotinginformation = true
+WebXML.nosubdirs = true
+WebXML.outputsubdir = webxml
+DocBook.nosubdirs = true
+DocBook.outputsubdir = docbook
+DocBook.usedocbookextensions = true
+
+sources = ./src/qdoctests-outputfromqdocfiles.qdoc \
+ ./src/qdoctests-outputfromqdocmanuallikefiles.qdoc
+
+exampledirs = ./src/snippets
+
+macro.beginqdoc = "\\c {/*!}"
+macro.endqdoc = "\\c */"
+macro.PROD = QDoc
+
+# Macro from qtbase/doc/global/macros.qdocconf
+# The file cannot be included directly, because it requires many
+# variables to be set, like QT_VER
+macro.borderedimage = "\\div {class=\"border\"} \\image \1\n\\enddiv"
+
+defines = test_navigation
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/src/images/01.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/src/images/01.png
new file mode 100644
index 000000000..d73ab969b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/src/images/01.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/src/images/leonardo-da-vinci.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/src/images/leonardo-da-vinci.png
new file mode 100644
index 000000000..854acb4ca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/src/images/leonardo-da-vinci.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/src/qdoctests-outputfromqdocfiles.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/src/qdoctests-outputfromqdocfiles.qdoc
new file mode 100644
index 000000000..b19905b7e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/src/qdoctests-outputfromqdocfiles.qdoc
@@ -0,0 +1,241 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+\if defined(test_navigation)
+ \nextpage {qdoctests-qdocfileoutput-linking.html}{QDoc Linking Test}
+\endif
+
+ \page qdoctests-qdocfileoutput.html
+ \title Testing \PROD output from .qdoc files
+ \brief This is a simple page for testing purposes only.
+
+ QDoc generates documentation for software projects. It does this by
+ extracting \e {QDoc comments} from project source files. QDoc comments are
+ signified by a C-style-like comment tag followed by an exclamation point,
+ like this:
+ \beginqdoc \c {This text is contained within QDoc comment tags.} \endqdoc.
+
+ \section1 Supported file types
+ QDoc parses \c .cpp and \c .qdoc files. It does extract comments from
+ header (\c {.h}) files.
+
+ \section1 Further information
+ This test document is written with the purpose of testing the output QDoc
+ generates when parsing \c .qdoc files. It is fairly simple and makes use of
+ a limited subset of QDoc's command. Those commands are:
+ \list
+ \li \c {\page}
+ \li \c {\title}
+ \li \c {\brief}
+ \li \c {\e} (for emphasizing "QDoc comments")
+ \li \c {\c} (for multiple monospace-formatted entries)
+ \li \c {\section1}
+ \li \c {\list}
+ \li \c {\li}
+ \li \c {\endlist}
+ \endlist
+
+ \section1 Linking
+
+ There are multiple ways to create hyperlinks to other topics:
+
+ \list
+ \li \l {Testing QDoc's link command}{Linking to a page title}
+ \li \l {Link targets}{Linking to a section title}
+ \li \l {link-test-target}{Linking using a \\target string}
+ \li \l {QDoc Linking Test}{Linking using a \\keyword string}
+ \endlist
+
+ \section1 QDoc Linking Test
+
+ This section title is overridden by another target which takes
+ precedence.
+
+ \section1 Linking to \l {Further information}{something} in a section title
+
+ This is allowed but a questionable practice.
+
+ \details {\PROD details}
+ \note You're looking at detailed information.
+ \enddetails
+*/
+
+/*!
+\if defined(test_navigation)
+ \previouspage qdoctests-qdocfileoutput.html \PROD Testing
+ \nextpage Table of Contents
+\endif
+
+ \keyword QDoc Linking Test
+ \page qdoctests-qdocfileoutput-linking.html
+ \title Testing QDoc's link command
+ \brief This is a page for testing QDoc's link command.
+
+ \target link-test-target
+ \section1 Link targets
+
+ Valid parameters for the link command (\c {\l}) are page and section
+ titles, targets defined with \\target or \\keyword commands, and API
+ reference keywords (types, methods, namespaces, and so on).
+*/
+
+/*!
+\if defined(test_navigation)
+ \previouspage {Testing QDoc's link command}{QDoc Linking Test}
+\endif
+
+ \page toc.html
+ \title Table of Contents
+
+ \list
+ \li \l {Testing \PROD output from .qdoc files}{\PROD Testing}
+ \li \l {QDoc Linking Test}
+ \li \l {Table of Contents}
+ \endlist
+*/
+
+/*!
+ \page qdoctests-qdocfileoutput-exhaustive.html
+ \title Exhaustive testing of QDoc commands
+ \brief This page is a dumping ground for QDoc commands under test.
+
+ \section1 This is a section1
+ \section2 This is a section2
+ \section3 This is a section3
+ \section4 This is a section4
+ \endsection4
+ \endsection3
+ \endsection2
+ \endsection1
+
+ \badcode
+ This is bad code
+ \endcode
+
+ This text should have a line break riiiiight \br noooow.
+
+ \b{All your text belong to bold}
+ ...And this is an examble of only \b bold being, well, bold.
+
+ \dots
+
+ \caption This a caption
+
+ \legalese
+ Lorem legal ipsum
+ \endlegalese
+
+ \quotation
+ This is a quotation.
+ \endquotation
+
+ \raw HTML
+ <html><body>This is <b>raw</b>. Like the <h1>Eddie Murphy</h1> movie. Just not as funny.</body></html>
+ \endraw
+
+ \sidebar
+ Look, ma! I made a sidebar!
+ \endsidebar
+
+ \table
+ \row \li Table item in a table row
+ \row \li Another item in a different row
+ \endtable
+
+ \important This is really important.
+
+ \note The code above doesn't compile
+
+ \hr
+
+ \section1 Images
+
+ An image without any text:
+
+ \image leonardo-da-vinci.png
+
+ An image with just an alternative text:
+
+ \image leonardo-da-vinci.png Image alt
+
+ An image with alternative text and 1-atom caption:
+
+ \image leonardo-da-vinci.png Image alt
+ \caption Image caption
+
+ An image with alternative text and 2-atom caption:
+
+ \image leonardo-da-vinci.png Image alt
+ \caption Image caption with \b {bold} text
+
+ A bordered image:
+
+ \borderedimage leonardo-da-vinci.png
+
+ //! A bordered image with alternative text:
+ //!
+ //! \borderedimage leonardo-da-vinci.png Screenshot of the Drill Down Example
+ //! It looks like this macro is not written to handle alternative text (no \2)
+
+ A bordered image with a caption:
+
+ \borderedimage leonardo-da-vinci.png
+ \caption Screenshot of the System Tray Icon
+
+ An inline image:
+
+ The is a paragraph containing an \inlineimage 01.png inline image to test
+ if qdoc handles them properly, without considering rest of the line as
+ alt text for the image.
+
+ An inline image with alt text:
+
+ Here is another example of \inlineimage 01.png {No. 1} inline image with
+ alternative text, which should be added as an attribute to the inline
+ image.
+
+ File quoting:
+
+ \quotefromfile main.cpp
+ \skipto /if \(/
+ \printuntil /^ \}/
+
+ \section1 Commands not yet tested
+
+ \warning The following commands have yet to be tested:
+ footnote
+ link
+ //! Check why above two (when used in this order) cause missing linefeeds on Windows/webxml
+ sincelist
+ header
+ index
+ topicref // or just don’t care, remove it
+ inlineimage
+ printline
+ printto
+ quotefile
+ skipline
+ skipuntil
+ span
+ snippet
+ codeline
+ overload
+ sub
+ sup
+ tableofcontents
+ tt
+ uicontrol
+ endmapref
+ endomit
+ underline
+ unicode
+
+*/
+
+// Empty link target that was known to assert
+/*!
+ \page crash.html
+
+ \l {}
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/src/qdoctests-outputfromqdocmanuallikefiles.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/src/qdoctests-outputfromqdocmanuallikefiles.qdoc
new file mode 100644
index 000000000..23f229745
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/src/qdoctests-outputfromqdocmanuallikefiles.qdoc
@@ -0,0 +1,59 @@
+// Copyright (C) 2022 Thibaut Cuvelier
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+// Excerpts from src/qdoc/doc/qdoc-guide.qdoc
+
+/*!
+ \page qdoctests-qdocmanuallikefileoutput.html
+
+ \title Document Navigation
+
+ The navigation commands...
+
+ \quotation
+ \raw HTML
+ <table border="0" cellpadding="0" cellspacing="5" width="100%">
+
+ <tr>
+ <p>
+ [Previous: <a href="15-qdoc-commands-navigation.html#deadlink">
+ Basic Qt</a>]
+ [<a href="15-qdoc-commands-navigation.html#deadlink">Contents</a>]
+ [Next: <a href="15-qdoc-commands-navigation.html#deadlink">
+ Creating Dialogs</a>]
+ </p>
+
+ <h1 align="center">Getting Started<br /></h1>
+
+ <p>
+ This chapter shows how to combine basic C++ with the
+ functionality provided by Qt to create a few small graphical
+ interface (GUI) applications.
+ </p>
+
+ <p>
+ [Previous: <a href="15-qdoc-commands-navigation.html#deadlink">
+ Basic Qt</a>]
+ [<a href="15-qdoc-commands-navigation.html#deadlink">Contents</a>]
+ [Next: <a href="15-qdoc-commands-navigation.html#deadlink">
+ Creating Dialogs</a>]
+ </p>
+
+ </table>
+ \endraw
+ \endquotation
+
+ \code
+ <head>
+ ...
+ <link rel="start" href="basicqt.html" />
+ ...
+ </head>
+ \endcode
+
+ \section1 Commands
+
+ \target previouspage-command
+ \section2 \\previouspage
+
+ The \\previouspage command...
+*/ \ No newline at end of file
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/src/snippets/main.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/src/snippets/main.cpp
new file mode 100644
index 000000000..1c886ace4
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/src/snippets/main.cpp
@@ -0,0 +1,10 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+int main()
+{
+ if (false) {
+ return 1;
+ }
+ return 0;
+}
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/expected/docbook/stdpair-proxypage-proxy.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/expected/docbook/stdpair-proxypage-proxy.xml
new file mode 100644
index 000000000..5476d7a21
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/expected/docbook/stdpair-proxypage-proxy.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>StdPair</db:title>
+<db:productname>ProxyPage</db:productname>
+<db:titleabbrev>ProxyPage Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>ProxyPage Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:section xml:id="type-documentation">
+<db:title>Type Documentation</db:title>
+<db:section xml:id="StdPair-typedef">
+<db:title>[alias] template &lt;typename T1, typename T2&gt; StdPair</db:title>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/expected/html/proxypage.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/expected/html/proxypage.index
new file mode 100644
index 000000000..96a5a3d55
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/expected/html/proxypage.index
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="ProxyPage Reference Documentation" version="" project="ProxyPage">
+ <namespace name="" status="active" access="public" module="proxypage">
+ <typedef name="StdPair" href="stdpair-proxypage-proxy.html#StdPair-typedef" status="active" access="public" location="proxy.h" related="0" documented="true" aliasedtype="std::pair&lt;T1, T2&gt;"/>
+ <proxy name="StdPair" href="stdpair-proxypage-proxy.html" status="active" access="public">
+ <typedef name="StdPair" href="stdpair-proxypage-proxy.html#StdPair-typedef" status="active" access="public" location="proxy.h" related="0" documented="true" aliasedtype="std::pair&lt;T1, T2&gt;"/>
+ </proxy>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/expected/html/stdpair-proxypage-proxy.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/expected/html/stdpair-proxypage-proxy.html
new file mode 100644
index 000000000..25241ddcb
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/expected/html/stdpair-proxypage-proxy.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>StdPair Proxy Page | ProxyPage</title>
+</head>
+<body>
+<h1 class="title">StdPair Proxy Page</h1>
+<h2 id="types">Types</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="stdpair-proxypage-proxy.html#StdPair-typedef" translate="no">StdPair</a></b></td></tr>
+</table></div>
+<div class="types">
+<h2>Type Documentation</h2>
+<!-- $$$StdPair -->
+<h3 class="fn" translate="no" id="StdPair-typedef"><code class="details extra" translate="no">[alias]</code> template &lt;typename T1, typename T2&gt; <span class="name">StdPair</span></h3>
+<!-- @@@StdPair -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/proxypage.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/proxypage.qdocconf
new file mode 100644
index 000000000..2f686a44c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/proxypage.qdocconf
@@ -0,0 +1,24 @@
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ./src/images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+project = ProxyPage
+includepaths += ./src
+{sourcedirs,headerdirs} = ./src
+
+moduleheader = proxy.h
+
+outputformats = HTML DocBook
+{HTML.nosubdirs,DocBook.nosubdirs} = true
+HTML.outputsubdir = html
+DocBook.outputsubdir = docbook
+
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/src/proxy.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/src/proxy.h
new file mode 100644
index 000000000..05a17f826
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/src/proxy.h
@@ -0,0 +1,11 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#pragma once
+
+// dummy declaration
+namespace std {
+ template<class T1, class T2> struct pair;
+}
+
+template <class T1, class T2>
+using StdPair = std::pair<T1, T2>;
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/src/proxy.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/src/proxy.qdoc
new file mode 100644
index 000000000..43bf8a013
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/proxypage/src/proxy.qdoc
@@ -0,0 +1,9 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+/*!
+ //! Misuse of QDoc commands that results in the generation of an orphaned
+ //! proxy page; Relate the topic command to itself.
+ \typealias StdPair
+ \relates StdPair
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/docbook/class.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/docbook/class.xml
new file mode 100644
index 000000000..d0bf4bac1
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/docbook/class.xml
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">Class Class</db:title>
+<db:productname>QmlEnumValuesFromCpp</db:productname>
+<db:titleabbrev>QmlEnumValuesFromCpp Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>QmlEnumValuesFromCpp Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:variablelist its:translate="no">
+<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:section xml:id="member-type-documentation">
+<db:title>Member Type Documentation</db:title>
+<db:section xml:id="MoreValues-enum">
+<db:title its:translate="no">enum Class::MoreValues</db:title>
+<db:enumsynopsis>
+<db:enumname>MoreValues</db:enumname>
+<db:enumitem>
+<db:enumidentifier>Something</db:enumidentifier>
+<db:enumvalue>0</db:enumvalue>
+</db:enumitem>
+<db:enumitem>
+<db:enumidentifier>Else</db:enumidentifier>
+<db:enumvalue>1</db:enumvalue>
+</db:enumitem>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:enumsynopsis>
+<db:informaltable>
+<db:thead>
+<db:tr>
+<db:th>Constant</db:th>
+<db:th>Value</db:th>
+<db:th>Description</db:th>
+</db:tr>
+</db:thead>
+<db:tr>
+<db:td>
+<db:para its:translate="no"><db:code><db:emphasis role="bold"><db:link xlink:href="class.xml">Class</db:link></db:emphasis>::<db:emphasis role="bold"><db:link xlink:href="">MoreValues</db:link></db:emphasis>::Something</db:code></db:para>
+</db:td>
+<db:td><db:code its:translate="no">0</db:code></db:td>
+<db:td>
+<db:para>something</db:para>
+</db:td>
+</db:tr>
+<db:tr>
+<db:td>
+<db:para its:translate="no"><db:code><db:emphasis role="bold"><db:link xlink:href="class.xml">Class</db:link></db:emphasis>::<db:emphasis role="bold"><db:link xlink:href="">MoreValues</db:link></db:emphasis>::Else</db:code></db:para>
+</db:td>
+<db:td><db:code its:translate="no">1</db:code></db:td>
+<db:td>
+<db:para>entirely</db:para>
+</db:td>
+</db:tr>
+</db:informaltable>
+</db:section>
+<db:section xml:id="Values-enum">
+<db:title its:translate="no">enum Class::Values</db:title>
+<db:enumsynopsis>
+<db:enumname>Values</db:enumname>
+<db:enumitem>
+<db:enumidentifier>One</db:enumidentifier>
+<db:enumvalue>0</db:enumvalue>
+</db:enumitem>
+<db:enumitem>
+<db:enumidentifier>Two</db:enumidentifier>
+<db:enumvalue>1</db:enumvalue>
+</db:enumitem>
+<db:enumitem>
+<db:enumidentifier>Three</db:enumidentifier>
+<db:enumvalue>2</db:enumvalue>
+</db:enumitem>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:enumsynopsis>
+<db:para>Try now these exciting values in your C++ code:</db:para>
+<db:informaltable>
+<db:thead>
+<db:tr>
+<db:th>Constant</db:th>
+<db:th>Value</db:th>
+<db:th>Description</db:th>
+</db:tr>
+</db:thead>
+<db:tr>
+<db:td>
+<db:para its:translate="no"><db:code><db:emphasis role="bold"><db:link xlink:href="class.xml">Class</db:link></db:emphasis>::One</db:code></db:para>
+</db:td>
+<db:td><db:code its:translate="no">0</db:code></db:td>
+<db:td>
+<db:para>One value</db:para>
+</db:td>
+</db:tr>
+</db:informaltable>
+<db:para>Wait, that's not all!</db:para>
+<db:informaltable>
+<db:thead>
+<db:tr>
+<db:th>Constant</db:th>
+<db:th>Value</db:th>
+<db:th>Description</db:th>
+</db:tr>
+</db:thead>
+<db:tr>
+<db:td>
+<db:para its:translate="no"><db:code><db:emphasis role="bold"><db:link xlink:href="class.xml">Class</db:link></db:emphasis>::Two</db:code></db:para>
+</db:td>
+<db:td><db:code its:translate="no">1</db:code></db:td>
+<db:td>
+<db:para>2nd value</db:para>
+</db:td>
+</db:tr>
+<db:tr>
+<db:td>
+<db:para its:translate="no"><db:code><db:emphasis role="bold"><db:link xlink:href="class.xml">Class</db:link></db:emphasis>::Three</db:code></db:para>
+</db:td>
+<db:td><db:code its:translate="no">2</db:code></db:td>
+<db:td>
+<db:para>3rd value</db:para>
+</db:td>
+</db:tr>
+</db:informaltable>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/docbook/module-module.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/docbook/module-module.xml
new file mode 100644
index 000000000..972603249
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/docbook/module-module.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no"></db:title>
+<db:productname>QmlEnumValuesFromCpp</db:productname>
+<db:titleabbrev>QmlEnumValuesFromCpp Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>QmlEnumValuesFromCpp Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:section xml:id="classes">
+<db:title>Classes</db:title>
+<db:itemizedlist role="classes">
+<db:listitem>
+<db:para><db:link xlink:href="class.xml" xlink:role="class">Class</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/docbook/qml-qmlmodule-type.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/docbook/qml-qmlmodule-type.xml
new file mode 100644
index 000000000..e98a0ff68
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/docbook/qml-qmlmodule-type.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no">Type QML Type</db:title>
+<db:productname>QmlEnumValuesFromCpp</db:productname>
+<db:titleabbrev>QmlEnumValuesFromCpp Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>QmlEnumValuesFromCpp Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:variablelist its:translate="no">
+<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:section xml:id="property-documentation">
+<db:title>Property Documentation</db:title>
+<db:section xml:id="something-prop">
+<db:title>something : enumeration</db:title>
+<db:fieldsynopsis>
+<db:type>enumeration</db:type>
+<db:varname>something</db:varname>
+<db:modifier>writable</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:informaltable>
+<db:thead>
+<db:tr>
+<db:th>Constant</db:th>
+<db:th>Description</db:th>
+</db:tr>
+</db:thead>
+<db:tr>
+<db:td>
+<db:para its:translate="no">SomeType.Something</db:para>
+</db:td>
+<db:td>
+<db:para>something</db:para>
+</db:td>
+</db:tr>
+<db:tr>
+<db:td>
+<db:para its:translate="no">SomeType.Else</db:para>
+</db:td>
+<db:td>
+<db:para>entirely</db:para>
+</db:td>
+</db:tr>
+</db:informaltable>
+</db:section>
+<db:section xml:id="values-prop">
+<db:title>values : enumeration</db:title>
+<db:fieldsynopsis>
+<db:type>enumeration</db:type>
+<db:varname>values</db:varname>
+<db:modifier>writable</db:modifier>
+<db:synopsisinfo role="access">public</db:synopsisinfo>
+<db:synopsisinfo role="status">active</db:synopsisinfo>
+<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
+</db:fieldsynopsis>
+<db:para>You can even use these values in QML.</db:para>
+<db:informaltable>
+<db:thead>
+<db:tr>
+<db:th>Constant</db:th>
+<db:th>Description</db:th>
+</db:tr>
+</db:thead>
+<db:tr>
+<db:td>
+<db:para its:translate="no">Type.One</db:para>
+</db:td>
+<db:td>
+<db:para>One value</db:para>
+</db:td>
+</db:tr>
+<db:tr>
+<db:td>
+<db:para its:translate="no">Type.Two</db:para>
+</db:td>
+<db:td>
+<db:para>2nd value</db:para>
+</db:td>
+</db:tr>
+<db:tr>
+<db:td>
+<db:para its:translate="no">Type.Three</db:para>
+</db:td>
+<db:td>
+<db:para>3rd value</db:para>
+</db:td>
+</db:tr>
+</db:informaltable>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/docbook/qmlmodule-qmlmodule.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/docbook/qmlmodule-qmlmodule.xml
new file mode 100644
index 000000000..12466c566
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/docbook/qmlmodule-qmlmodule.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" xmlns:its="http://www.w3.org/2005/11/its" version="5.2" xml:lang="en">
+<db:info>
+<db:title its:translate="no"></db:title>
+<db:productname>QmlEnumValuesFromCpp</db:productname>
+<db:titleabbrev>QmlEnumValuesFromCpp Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>QmlEnumValuesFromCpp 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-type.xml" xlink:role="">Type</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/class-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/class-members.html
new file mode 100644
index 000000000..8b5efb662
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/class-members.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- class.cpp -->
+ <title>List of All Members for Class | QmlEnumValuesFromCpp</title>
+</head>
+<body>
+<li>Class</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for Class</h1>
+<p>This is the complete list of members for <a href="class.html">Class</a>, including inherited members.</p>
+<ul>
+<li class="fn" translate="no">enum class <span class="name"><b><a href="class.html#MoreValues-enum" translate="no">MoreValues</a></b></span></li>
+<li class="fn" translate="no">enum <span class="name"><b><a href="class.html#Values-enum" translate="no">Values</a></b></span></li>
+</ul>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/class.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/class.html
new file mode 100644
index 000000000..e7d4ddc3d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/class.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- class.cpp -->
+ <title>Class Class | QmlEnumValuesFromCpp</title>
+</head>
+<body>
+<li>Class</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#public-types">Public Types</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">Class Class</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;Class&gt;</span></td></tr>
+</table></div>
+<ul>
+<li><a href="class-members.html">List of all members, including inherited members</a></li>
+</ul>
+<h2 id="public-types">Public Types</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> enum class </td><td class="memItemRight bottomAlign"><b><a href="class.html#MoreValues-enum" translate="no">MoreValues</a></b> { Something, Else }</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> enum </td><td class="memItemRight bottomAlign"><b><a href="class.html#Values-enum" translate="no">Values</a></b> { One, Two, Three }</td></tr>
+</table></div>
+<!-- $$$Class-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Class -->
+<div class="types">
+<h2>Member Type Documentation</h2>
+<!-- $$$MoreValues$$$Something$$$Else -->
+<h3 class="fn" translate="no" id="MoreValues-enum">enum class Class::<span class="name">MoreValues</span></h3>
+<div class="table"><table class="valuelist"><tr valign="top" class="odd"><th class="tblConst">Constant</th><th class="tblval">Value</th><th class="tbldscr">Description</th></tr>
+<tr><td class="topAlign"><code translate="no">Class::MoreValues::Something</code></td><td class="topAlign tblval"><code translate="no">0</code></td><td class="topAlign">something</td></tr>
+<tr><td class="topAlign"><code translate="no">Class::MoreValues::Else</code></td><td class="topAlign tblval"><code translate="no">1</code></td><td class="topAlign">entirely</td></tr>
+</table></div>
+<!-- @@@MoreValues -->
+<!-- $$$Values$$$One$$$Two$$$Three -->
+<h3 class="fn" translate="no" id="Values-enum">enum Class::<span class="name">Values</span></h3>
+<p>Try now these exciting values in your C++ code:</p>
+<div class="table"><table class="valuelist"><tr valign="top" class="odd"><th class="tblConst">Constant</th><th class="tblval">Value</th><th class="tbldscr">Description</th></tr>
+<tr><td class="topAlign"><code translate="no">Class::One</code></td><td class="topAlign tblval"><code translate="no">0</code></td><td class="topAlign">One value</td></tr>
+</table></div>
+<p>Wait, that's not all!</p>
+<div class="table"><table class="valuelist"><tr valign="top" class="even"><th class="tblConst">Constant</th><th class="tblval">Value</th><th class="tbldscr">Description</th></tr>
+<tr><td class="topAlign"><code translate="no">Class::Two</code></td><td class="topAlign tblval"><code translate="no">1</code></td><td class="topAlign">2nd value</td></tr>
+<tr><td class="topAlign"><code translate="no">Class::Three</code></td><td class="topAlign tblval"><code translate="no">2</code></td><td class="topAlign">3rd value</td></tr>
+</table></div>
+<!-- @@@Values -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/module-module.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/module-module.html
new file mode 100644
index 000000000..8bcf61f6b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/module-module.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- class.cpp -->
+ <title>QmlEnumValuesFromCpp</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="classes">Classes</h2>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="class.html">Class</a></p></td></tr>
+</table></div>
+<!-- $$$Module-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@Module -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/qml-qmlmodule-type-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/qml-qmlmodule-type-members.html
new file mode 100644
index 000000000..3270d7158
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/qml-qmlmodule-type-members.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- qmltype.qdoc -->
+ <title>List of All Members for Type | QmlEnumValuesFromCpp</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-type.html">Type</a>, including inherited members.</p>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qmlmodule-type.html#something-prop" translate="no">something</a></b> : enumeration</li>
+<li class="fn" translate="no"><b><a href="qml-qmlmodule-type.html#values-prop" translate="no">values</a></b> : enumeration</li>
+</ul>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/qml-qmlmodule-type.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/qml-qmlmodule-type.html
new file mode 100644
index 000000000..509dd2431
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/qml-qmlmodule-type.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- qmltype.qdoc -->
+ <title>Type QML Type | QmlEnumValuesFromCpp</title>
+</head>
+<body>
+<li>Type</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#properties">Properties</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">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-type-members.html">List of all members, including inherited members</a></li>
+</ul>
+<h2 id="properties">Properties</h2>
+<ul>
+<li class="fn" translate="no"><b><a href="qml-qmlmodule-type.html#something-prop" translate="no">something</a></b> : enumeration</li>
+<li class="fn" translate="no"><b><a href="qml-qmlmodule-type.html#values-prop" translate="no">values</a></b> : enumeration</li>
+</ul>
+<!-- $$$Type-description -->
+<h2 id="details">Detailed Description</h2>
+<!-- @@@Type -->
+<h2>Property Documentation</h2>
+<!-- $$$something -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="something-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">something</span> : <span class="type">enumeration</span></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><div class="table"><table class="valuelist"><tr valign="top" class="odd"><th class="tblConst">Constant</th><th class="tbldscr">Description</th></tr>
+<tr><td class="topAlign"><code translate="no">SomeType.Something</code></td><td class="topAlign">something</td></tr>
+<tr><td class="topAlign"><code translate="no">SomeType.Else</code></td><td class="topAlign">entirely</td></tr>
+</table></div>
+</div></div><!-- @@@something -->
+<br/>
+<!-- $$$values -->
+<div class="qmlitem"><div class="qmlproto" translate="no">
+<div class="table"><table class="qmlname">
+<tr valign="top" class="odd" id="values-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">values</span> : <span class="type">enumeration</span></p></td></tr>
+</table></div></div>
+<div class="qmldoc"><p>You can even use these values in QML.</p>
+<div class="table"><table class="valuelist"><tr valign="top" class="odd"><th class="tblConst">Constant</th><th class="tbldscr">Description</th></tr>
+<tr><td class="topAlign"><code translate="no">Type.One</code></td><td class="topAlign">One value</td></tr>
+<tr><td class="topAlign"><code translate="no">Type.Two</code></td><td class="topAlign">2nd value</td></tr>
+<tr><td class="topAlign"><code translate="no">Type.Three</code></td><td class="topAlign">3rd value</td></tr>
+</table></div>
+</div></div><!-- @@@values -->
+<br/>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/qmlenumvaluesfromcpp.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/qmlenumvaluesfromcpp.index
new file mode 100644
index 000000000..3d9e172a1
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/qmlenumvaluesfromcpp.index
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="QmlEnumValuesFromCpp Reference Documentation" version="" project="QmlEnumValuesFromCpp">
+ <namespace name="" status="active" access="public" module="qmlenumvaluesfromcpp">
+ <class name="Class" href="class.html" status="active" access="public" location="class.h" documented="true" module="Module">
+ <enum name="MoreValues" fullname="Class::MoreValues" href="class.html#MoreValues-enum" status="active" access="public" location="class.h" documented="true" scoped="true">
+ <value name="Something" value="0"/>
+ <value name="Else" value="1"/>
+ </enum>
+ <enum name="Values" fullname="Class::Values" href="class.html#Values-enum" status="active" access="public" location="class.h" documented="true">
+ <value name="One" value="0"/>
+ <value name="Two" value="1"/>
+ <value name="Three" value="2"/>
+ </enum>
+ </class>
+ <qmlclass name="Type" qml-module-name="QmlModule" fullname="QmlModule.Type" href="qml-qmlmodule-type.html" status="active" access="public" location="qmltype.qdoc" documented="true" title="Type" fulltitle="Type" subtitle="">
+ <qmlproperty name="something" fullname="QmlModule.Type.something" href="qml-qmlmodule-type.html#something-prop" status="active" access="public" location="qmltype.qdoc" documented="true" type="enumeration" attached="false" writable="true"/>
+ <qmlproperty name="values" fullname="QmlModule.Type.values" href="qml-qmlmodule-type.html#values-prop" status="active" access="public" location="qmltype.qdoc" documented="true" type="enumeration" attached="false" writable="true"/>
+ </qmlclass>
+ <module name="Module" href="module-module.html" status="active" documented="true" seen="true" title=""/>
+ <qmlmodule name="QmlModule" qml-module-name="QmlModule" href="qmlmodule-qmlmodule.html" status="active" location="qmltype.qdoc" documented="true" seen="true" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/qmlmodule-qmlmodule.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/qmlmodule-qmlmodule.html
new file mode 100644
index 000000000..9cbff451f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/html/qmlmodule-qmlmodule.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- qmltype.qdoc -->
+ <title>QmlEnumValuesFromCpp</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-type.html">Type</a></p></td></tr>
+</table></div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/webxml/class.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/webxml/class.webxml
new file mode 100644
index 000000000..d6b062fa7
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/webxml/class.webxml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="Class" href="class.html" status="active" access="public" location="class.h" documented="true" module="Module">
+ <description/>
+ <enum name="MoreValues" fullname="Class::MoreValues" href="class.html#MoreValues-enum" status="active" access="public" location="class.h" documented="true" scoped="true">
+ <value name="Something" value="0"/>
+ <value name="Else" value="1"/>
+ <description>
+ <list type="enum">
+ <definition>
+ <term>Class::MoreValues::Something</term>Something</definition>
+ <item>
+ <para>something</para>
+ </item>
+ <definition>
+ <term>Class::MoreValues::Else</term>Else</definition>
+ <item>
+ <para>entirely</para>
+ </item>
+ </list>
+ </description>
+ </enum>
+ <enum name="Values" fullname="Class::Values" href="class.html#Values-enum" status="active" access="public" location="class.h" documented="true">
+ <value name="One" value="0"/>
+ <value name="Two" value="1"/>
+ <value name="Three" value="2"/>
+ <description>
+ <para>Try now these exciting values in your C++ code:</para>
+ <list type="enum">
+ <definition>
+ <term>Class::One</term>One</definition>
+ <item>
+ <para>One value</para>
+ </item>
+ </list>
+ <para>Wait, that's not all!</para>
+ <list type="enum">
+ <definition>
+ <term>Class::Two</term>Two</definition>
+ <item>
+ <para>2nd value</para>
+ </item>
+ <definition>
+ <term>Class::Three</term>Three</definition>
+ <item>
+ <para>3rd value</para>
+ </item>
+ </list>
+ </description>
+ </enum>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/webxml/module-module.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/webxml/module-module.webxml
new file mode 100644
index 000000000..5d24b3077
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/webxml/module-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/qmlenumvaluesfromcpp/expected/webxml/qmlenumvaluesfromcpp.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/webxml/qmlenumvaluesfromcpp.index
new file mode 100644
index 000000000..3d9e172a1
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/webxml/qmlenumvaluesfromcpp.index
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="QmlEnumValuesFromCpp Reference Documentation" version="" project="QmlEnumValuesFromCpp">
+ <namespace name="" status="active" access="public" module="qmlenumvaluesfromcpp">
+ <class name="Class" href="class.html" status="active" access="public" location="class.h" documented="true" module="Module">
+ <enum name="MoreValues" fullname="Class::MoreValues" href="class.html#MoreValues-enum" status="active" access="public" location="class.h" documented="true" scoped="true">
+ <value name="Something" value="0"/>
+ <value name="Else" value="1"/>
+ </enum>
+ <enum name="Values" fullname="Class::Values" href="class.html#Values-enum" status="active" access="public" location="class.h" documented="true">
+ <value name="One" value="0"/>
+ <value name="Two" value="1"/>
+ <value name="Three" value="2"/>
+ </enum>
+ </class>
+ <qmlclass name="Type" qml-module-name="QmlModule" fullname="QmlModule.Type" href="qml-qmlmodule-type.html" status="active" access="public" location="qmltype.qdoc" documented="true" title="Type" fulltitle="Type" subtitle="">
+ <qmlproperty name="something" fullname="QmlModule.Type.something" href="qml-qmlmodule-type.html#something-prop" status="active" access="public" location="qmltype.qdoc" documented="true" type="enumeration" attached="false" writable="true"/>
+ <qmlproperty name="values" fullname="QmlModule.Type.values" href="qml-qmlmodule-type.html#values-prop" status="active" access="public" location="qmltype.qdoc" documented="true" type="enumeration" attached="false" writable="true"/>
+ </qmlclass>
+ <module name="Module" href="module-module.html" status="active" documented="true" seen="true" title=""/>
+ <qmlmodule name="QmlModule" qml-module-name="QmlModule" href="qmlmodule-qmlmodule.html" status="active" location="qmltype.qdoc" documented="true" seen="true" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/webxml/qmlmodule-qmlmodule.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/webxml/qmlmodule-qmlmodule.webxml
new file mode 100644
index 000000000..5d24b3077
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/expected/webxml/qmlmodule-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/qmlenumvaluesfromcpp/qmlenumvaluesfromcpp.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/qmlenumvaluesfromcpp.qdocconf
new file mode 100644
index 000000000..218005310
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/qmlenumvaluesfromcpp.qdocconf
@@ -0,0 +1,22 @@
+project = QmlEnumValuesFromCpp
+moduleheader = class.h
+includepaths = ./src
+
+{sourcedirs,headerdirs} = ./src
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+outputformats = HTML WebXML DocBook
+{HTML.nosubdirs,WebXML.nosubdirs,DocBook.nosubdirs} = true
+
+HTML.outputsubdir = html
+WebXML.outputsubdir = webxml
+DocBook.outputsubdir = docbook
+
+DocBook.its = true
+DocBook.usedocbookextensions = true
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/src/class.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/src/class.cpp
new file mode 100644
index 000000000..fa3cc1e31
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/src/class.cpp
@@ -0,0 +1,36 @@
+// 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 "class.h"
+
+/*!
+ \module Module
+*/
+
+/*!
+ \class Class
+ \inmodule Module
+*/
+
+/*!
+ \enum Class::Values
+
+ Try now these exciting values in your C++ code:
+
+ \value One
+ One value
+
+ Wait, that's not all!
+
+ \value Two
+ 2nd value
+ \value Three
+ 3rd value
+*/
+
+/*!
+ \enum Class::MoreValues
+
+ \value Something something
+ \value Else entirely
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/src/class.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/src/class.h
new file mode 100644
index 000000000..8c4967a69
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/src/class.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
+#pragma once
+
+class Class {
+
+public:
+ enum Values { One, Two, Three };
+ enum class MoreValues { Something, Else };
+};
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/src/qmltype.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/src/qmltype.qdoc
new file mode 100644
index 000000000..3cd739c29
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qmlenumvaluesfromcpp/src/qmltype.qdoc
@@ -0,0 +1,23 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+/*!
+ \qmlmodule QmlModule
+*/
+
+/*!
+ \qmltype Type
+ \inqmlmodule QmlModule
+*/
+
+/*!
+ \qmlproperty enumeration Type::values
+ \qmlenumeratorsfrom Class::Values
+
+ You can even use these values in QML.
+*/
+
+/*!
+ \qmlproperty enumeration Type::something
+ \qmlenumeratorsfrom [SomeType] Class::MoreValues
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/a.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/a.cpp
new file mode 100644
index 000000000..c2dd411d7
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/a.cpp
@@ -0,0 +1,11 @@
+// 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 "a.h"
+
+/*!
+ \typealias foo
+ \relates <Bar>
+
+ Related to a header file whose source might be parsed later.
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/a.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/a.h
new file mode 100644
index 000000000..40c4add88
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/a.h
@@ -0,0 +1,5 @@
+// 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
+
+using foo = int;
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/b.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/b.cpp
new file mode 100644
index 000000000..7e3df2f24
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/b.cpp
@@ -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
+
+/*!
+ \module Module
+*/
+
+/*!
+ \headerfile <Bar>
+ \title A header
+ \inmodule Module
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/expected/bar.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/expected/bar.html
new file mode 100644
index 000000000..b8dc9412a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/expected/bar.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- b.cpp -->
+ <title>&lt;Bar&gt; - A header | RelatesOrdering</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;Bar&gt; - A header</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;Bar&gt;</span></td></tr>
+</table></div>
+<h2 id="types">Types</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="bar.html#foo-typedef" translate="no">foo</a></b></td></tr>
+</table></div>
+<!-- $$$<Bar>-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@<Bar> -->
+<div class="types">
+<h2>Type Documentation</h2>
+<!-- $$$foo -->
+<h3 class="fn" translate="no" id="foo-typedef"><code class="details extra" translate="no">[alias]</code> <span class="name">foo</span></h3>
+<p>Related to a header file whose source might be parsed later.</p>
+<!-- @@@foo -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/expected/module-module.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/expected/module-module.html
new file mode 100644
index 000000000..3f123509c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/expected/module-module.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- b.cpp -->
+ <title>RelatesOrdering</title>
+</head>
+<body>
+<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>
+<!-- $$$Module-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@Module -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/expected/relatesordering.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/expected/relatesordering.index
new file mode 100644
index 000000000..905c657aa
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/expected/relatesordering.index
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="RelatesOrdering Reference Documentation" version="" project="RelatesOrdering">
+ <namespace name="" status="active" access="public" module="relatesordering">
+ <header name="&lt;Bar&gt;" href="bar.html" status="active" documented="true" module="Module" title="A header" fulltitle="&lt;Bar&gt; - A header" subtitle="">
+ <typedef name="foo" href="bar.html#foo-typedef" status="active" access="public" location="a.h" related="0" documented="true" aliasedtype="int"/>
+ </header>
+ <typedef name="foo" href="bar.html#foo-typedef" status="active" access="public" location="a.h" related="0" documented="true" aliasedtype="int"/>
+ <module name="Module" href="module-module.html" status="active" documented="true" seen="true" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/relatesordering.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/relatesordering.qdocconf
new file mode 100644
index 000000000..b943729a3
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/relatesordering/relatesordering.qdocconf
@@ -0,0 +1,7 @@
+project = RelatesOrdering
+
+{sourcedirs,headerdirs} = .
+
+locationinfo = false
+warninglimit = 0
+warninglimit.enabled = true
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/autolinking.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/autolinking.xml
new file mode 100644
index 000000000..b976dd6fe
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/autolinking.xml
@@ -0,0 +1,32 @@
+<?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>Autolinking</db:title>
+<db:productname>TestCPP</db:productname>
+<db:titleabbrev>TestCPP Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>TestCPP Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:section xml:id="testqdoc">
+<db:title>TestQDoc</db:title>
+<db:para>The string <db:link xlink:href="testqdoc.xml">TestQDoc</db:link> links to the C++ namespace unless linking explicitly, <db:link xlink:href="autolinking.xml#testqdoc">like this</db:link>, or <db:link xlink:href="testqdoc.xml">this</db:link>. Also,</db:para>
+<db:para>Autolinks:</db:para>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-testderived.xml">TestQDoc::TestDerived</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+<db:para>Explicit links:</db:para>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-testderived.xml">TestQDoc::TestDerived</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="obsolete-classes.xml#testqdoc">Obsolete Classes#TestQDoc</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+<db:section xml:id="someprop">
+<db:title>someProp</db:title>
+</db:section>
+</db:article>
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
new file mode 100644
index 000000000..ad3b41d4f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/cpptypes.xml
@@ -0,0 +1,33 @@
+<?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>Test C++ Types</db:title>
+<db:productname>TestCPP</db:productname>
+<db:titleabbrev>TestCPP Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>TestCPP Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:anchor xml:id="details"/>
+<db:itemizedlist role="testgroup">
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml" xlink:role="class">TestQDoc::Test</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<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>
+<db:variablelist role="members">
+<db:varlistentry>
+<db:term><db:link xlink:href="testqdoc-test.xml" xlink:role="class">TestQDoc::Test</db:link></db:term>
+<db:listitem>
+<db:para>A class in a namespace.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/crossmoduleref.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/crossmoduleref.xml
new file mode 100644
index 000000000..6a16d52f6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/crossmoduleref.xml
@@ -0,0 +1,49 @@
+<?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>CrossModuleRef Namespace</db:title>
+<db:productname>TestCPP</db:productname>
+<db:titleabbrev>TestCPP Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>Namespace that has documented functions in multiple modules.</db:para>
+<db:para>This namespace was introduced in Qt 3.0.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>CrossModuleRef</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since</db:term>
+<db:listitem>
+<db:para>Qt 3.0</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>CMake</db:term>
+<db:listitem>
+<db:para>find_package(Qt6 REQUIRED COMPONENTS QDocTest)</db:para>
+<db:para>target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>qmake</db:term>
+<db:listitem>
+<db:para>QT += testcpp</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="function-documentation">
+<db:title>Function Documentation</db:title>
+<db:section xml:id="documentMe">
+<db:title>void CrossModuleRef::documentMe()</db:title>
+<db:para>Document me!</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/obsolete-classes.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/obsolete-classes.xml
new file mode 100644
index 000000000..62928d5f8
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/obsolete-classes.xml
@@ -0,0 +1,31 @@
+<?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>Obsolete Classes</db:title>
+<db:productname>TestCPP</db:productname>
+<db:titleabbrev>TestCPP Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>TestCPP Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:section xml:id="classes-with-obsolete-members">
+<db:title>Classes with obsolete members</db:title>
+<db:variablelist role="obsoletecppmembers">
+<db:varlistentry>
+<db:term><db:emphasis role="bold">T</db:emphasis></db:term>
+<db:listitem>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml" role="class">Test</db:link> (<db:link xlink:href="testqdoc.xml" xlink:role="namespace">TestQDoc</db:link>)</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-testderived.xml" role="class">TestDerived</db:link> (<db:link xlink:href="testqdoc.xml" xlink:role="namespace">TestQDoc</db:link>)</db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="testqdoc">
+<db:title>TestQDoc</db:title>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/scoped-enum-linking.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/scoped-enum-linking.xml
new file mode 100644
index 000000000..f5c4a05cd
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/scoped-enum-linking.xml
@@ -0,0 +1,12 @@
+<?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>Enum Linking</db:title>
+<db:productname>TestCPP</db:productname>
+<db:titleabbrev>TestCPP Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>TestCPP Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:para>Linking to <db:link xlink:href="testqdoc-test.xml#ScopedEnum-enum">All</db:link>.</db:para>
+<db:para>TestQDoc::Test::ClassicEnum::Howdy does not link, but <db:link xlink:href="testqdoc-test.xml#ClassicEnum-enum">TestQDoc::Test::Howdy</db:link> might.</db:para>
+</db:article>
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
new file mode 100644
index 000000000..277a28f1d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testcpp-module.xml
@@ -0,0 +1,83 @@
+<?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>QDoc Test C++ Classes</db:title>
+<db:productname>TestCPP</db:productname>
+<db:titleabbrev>TestCPP Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>A test module page.</db:para>
+<db:para>This module was introduced in Qt 2.0.</db:para>
+</db:abstract>
+</db:info>
+<db:para>A test module page.</db:para>
+<db:para>This module was introduced in Qt 2.0.</db:para>
+<db:section xml:id="namespaces">
+<db:title>Namespaces</db:title>
+<db:variablelist role="namespaces">
+<db:varlistentry>
+<db:term><db:link xlink:href="crossmoduleref.xml" xlink:role="namespace">CrossModuleRef</db:link></db:term>
+<db:listitem>
+<db:para>Namespace that has documented functions in multiple modules.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="testqdoc.xml" xlink:role="namespace">TestQDoc</db:link></db:term>
+<db:listitem>
+<db:para>A namespace.</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="testqdoc-test.xml" xlink:role="class">TestQDoc::Test</db:link></db:term>
+<db:listitem>
+<db:para>A class in a namespace.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="testqdoc-testderived.xml" xlink:role="class">TestQDoc::TestDerived</db:link></db:term>
+<db:listitem>
+<db:para>A class in a namespace, derived from Test.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:section>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:note>
+<db:para>This is just a test. /* Look, Ma! {I'm made of arguments!} */</db:para>
+</db:note>
+<db:section xml:id="linking-to-function-like-things">
+<db:title>Linking to function-like things</db:title>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml#someFunctionDefaultArg">someFunctionDefaultArg</db:link>()</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml#QDOCTEST_MACRO2">QDOCTEST_MACRO2</db:link>()</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml#QDOCTEST_MACRO2">QDOCTEST_MACRO2</db:link>(int &amp;x)</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="testcpp-module.xml#section">section()</db:link></db:para>
+</db:listitem>
+<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>
+</db:section>
+</db:section>
+</db:section>
+</db:article>
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
new file mode 100644
index 000000000..f4dc3a09f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testqdoc-test.xml
@@ -0,0 +1,261 @@
+<?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>Test Class</db:title>
+<db:subtitle>TestQDoc::Test</db:subtitle>
+<db:productname>TestCPP</db:productname>
+<db:titleabbrev>TestCPP Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>A class in a namespace.</db:para>
+<db:para>This class was introduced in Qt 2.0.</db:para>
+<db:note>
+<db:para>All functions in this class are <db:link xlink:href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</db:link> with the following exceptions:</db:para>
+<db:para>These functions are not <db:link xlink:href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</db:link>:</db:para>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml#someFunctionDefaultArg">someFunctionDefaultArg(int i, bool b) const</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:note>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>Test</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since</db:term>
+<db:listitem>
+<db:para>Qt 2.0</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>CMake</db:term>
+<db:listitem>
+<db:para>find_package(Qt6 REQUIRED COMPONENTS QDocTest)</db:para>
+<db:para>target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>qmake</db:term>
+<db:listitem>
+<db:para>QT += testcpp</db:para>
+</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>Group</db:term>
+<db:listitem>
+<db:para>Test is part of <db:simplelist><db:member>testgroup</db:member><db:member><db:link xlink:href="cpptypes.xml">Test C++ Types</db:link></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>
+<db:section xml:id="member-type-documentation">
+<db:title>Member Type Documentation</db:title>
+<db:section xml:id="ClassicEnum-enum">
+<db:title>enum Test::ClassicEnum</db:title>
+<db:informaltable>
+<db:thead>
+<db:tr>
+<db:th>Constant</db:th>
+</db:tr>
+</db:thead>
+<db:tr>
+<db:td>
+<db:para><db:code><db:emphasis role="bold"><db:link xlink:href="testqdoc.xml">TestQDoc</db:link></db:emphasis>::<db:emphasis role="bold"><db:link xlink:href="testqdoc-test.xml">Test</db:link></db:emphasis>::Yee</db:code></db:para>
+</db:td>
+<db:td><db:code>0</db:code></db:td>
+</db:tr>
+<db:tr>
+<db:td>
+<db:para><db:code><db:emphasis role="bold"><db:link xlink:href="testqdoc.xml">TestQDoc</db:link></db:emphasis>::<db:emphasis role="bold"><db:link xlink:href="testqdoc-test.xml">Test</db:link></db:emphasis>::Haw</db:code></db:para>
+</db:td>
+<db:td><db:code>1</db:code></db:td>
+</db:tr>
+<db:tr>
+<db:td>
+<db:para><db:code><db:emphasis role="bold"><db:link xlink:href="testqdoc.xml">TestQDoc</db:link></db:emphasis>::<db:emphasis role="bold"><db:link xlink:href="testqdoc-test.xml">Test</db:link></db:emphasis>::Howdy</db:code></db:para>
+</db:td>
+<db:td><db:code>2</db:code></db:td>
+</db:tr>
+<db:tr>
+<db:td>
+<db:para><db:code><db:emphasis role="bold"><db:link xlink:href="testqdoc.xml">TestQDoc</db:link></db:emphasis>::<db:emphasis role="bold"><db:link xlink:href="testqdoc-test.xml">Test</db:link></db:emphasis>::Partner</db:code></db:para>
+</db:td>
+<db:td><db:code>3</db:code></db:td>
+</db:tr>
+</db:informaltable>
+</db:section>
+<db:section xml:id="ScopedEnum-enum">
+<db:title>enum Test::ScopedEnum</db:title>
+<db:para>This enum has a brief to trigger a bug in CMD_BRIEF.</db:para>
+<db:informaltable>
+<db:thead>
+<db:tr>
+<db:th>Constant</db:th>
+<db:th>Value</db:th>
+<db:th>Description</db:th>
+</db:tr>
+</db:thead>
+<db:tr>
+<db:td>
+<db:para><db:code><db:emphasis role="bold"><db:link xlink:href="testqdoc.xml">TestQDoc</db:link></db:emphasis>::<db:emphasis role="bold"><db:link xlink:href="testqdoc-test.xml">Test</db:link></db:emphasis>::<db:emphasis role="bold"><db:link xlink:href="">ScopedEnum</db:link></db:emphasis>::This</db:code></db:para>
+</db:td>
+<db:td><db:code>0x01</db:code></db:td>
+<db:td>
+<db:para>Something</db:para>
+</db:td>
+</db:tr>
+<db:tr>
+<db:td>
+<db:para><db:code><db:emphasis role="bold"><db:link xlink:href="testqdoc.xml">TestQDoc</db:link></db:emphasis>::<db:emphasis role="bold"><db:link xlink:href="testqdoc-test.xml">Test</db:link></db:emphasis>::<db:emphasis role="bold"><db:link xlink:href="">ScopedEnum</db:link></db:emphasis>::That</db:code></db:para>
+</db:td>
+<db:td><db:code>0x02</db:code></db:td>
+<db:td>
+<db:para>Something else</db:para>
+</db:td>
+</db:tr>
+<db:tr>
+<db:td>
+<db:para><db:code><db:emphasis role="bold"><db:link xlink:href="testqdoc.xml">TestQDoc</db:link></db:emphasis>::<db:emphasis role="bold"><db:link xlink:href="testqdoc-test.xml">Test</db:link></db:emphasis>::<db:emphasis role="bold"><db:link xlink:href="">ScopedEnum</db:link></db:emphasis>::All (since Qt 2.0)</db:code></db:para>
+</db:td>
+<db:td><db:code>This | That</db:code></db:td>
+<db:td>
+<db:para>Everything</db:para>
+</db:td>
+</db:tr>
+</db:informaltable>
+<db:para>A scoped enum.</db:para>
+</db:section>
+<db:section xml:id="SomeType-typedef">
+<db:title>Test::SomeType</db:title>
+<db:para>A typedef.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="member-function-documentation">
+<db:title>Member Function Documentation</db:title>
+<db:section xml:id="overload">
+<db:title>[protected] void Test::overload()</db:title>
+<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>
+</db:section>
+<db:section xml:id="inlineFunction">
+<db:title>void Test::inlineFunction()</db:title>
+<db:para>An inline function, documented using the \fn QDoc command.</db:para>
+</db:section>
+<db:section xml:id="methodWithEmDashInItsDocs">
+<db:title>void Test::methodWithEmDashInItsDocs()</db:title>
+<db:para>This method has em dashes in its documentation—as you'll find represented by <db:code>---</db:code> in the sources—here and there. The important bit to note is that when passed e.g. to the \c command, the three hyphens are processed as input to the command and not replaced by an em dash.</db:para>
+<db:para>-----------------------------------------------------------------------</db:para>
+<db:para>People can still add a bunch of dashes, though, without QDoc replacing them all with a series of em dashes.</db:para>
+<db:para>—You can also start a new paragraph with an em dash, if you want to.</db:para>
+<db:section>
+<db:title>See Also</db:title>
+<db:para><db:emphasis>See also </db:emphasis>
+<db:simplelist type="vert" role="see-also">
+<db:member><db:link xlink:href="testqdoc-test.xml#methodWithEnDashInItsDocs">methodWithEnDashInItsDocs</db:link></db:member>
+</db:simplelist>
+</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="methodWithEnDashInItsDocs">
+<db:title>void Test::methodWithEnDashInItsDocs()</db:title>
+<db:para>This method has en dashes in its documentation – as you'll find represented by <db:code>--</db:code> in the sources – here and there. The important bit to note is that when passed e.g. to the \c command, the two hyphens are processed as input to the command and not replaced by an en dash. This also applies to code blocks, where otherwise, the decrement operator would get completely borked:</db:para>
+<db:programlisting language="cpp">for (int i = 42; i &amp;gt; 0; --i)
+ // Do something cool during countdown.
+</db:programlisting>
+<db:para>...as it would be silly if this would output –i instead of <db:code>--i</db:code>.</db:para>
+<db:para>-----------------------------------------------------------------------</db:para>
+<db:para>It still allows people to add a bunch of dashes, though, without replacing them all with a series of en dashes. Of course, they might want to use the \hr command instead, like this:</db:para>
+<db:para>– You can also start a new paragraph with an en dash, if you want to.</db:para>
+<db:section>
+<db:title>See Also</db:title>
+<db:para><db:emphasis>See also </db:emphasis>
+<db:simplelist type="vert" role="see-also">
+<db:member><db:link xlink:href="">methodWithEnDashInItsDocs</db:link></db:member>
+</db:simplelist>
+</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="someFunction">
+<db:title>int Test::someFunction(<db:emphasis>int</db:emphasis>, int <db:emphasis>v</db:emphasis> = 0)</db:title>
+<db:para>Function that takes a parameter <db:code role="parameter">v</db:code>. Also returns the value of <db:code role="parameter">v</db:code>.</db:para>
+</db:section>
+<db:section xml:id="someFunctionDefaultArg">
+<db:title>void Test::someFunctionDefaultArg(int <db:emphasis>i</db:emphasis>, bool <db:emphasis>b</db:emphasis> = false) const</db:title>
+<db:para>Function that takes a parameter <db:code role="parameter">i</db:code> and <db:code role="parameter">b</db:code>.</db:para>
+<db:warning>
+<db:para>This function is not <db:link xlink:href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</db:link>.</db:para>
+</db:warning></db:section>
+<db:section xml:id="virtualFun">
+<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>
+<db:section xml:id="operator-eq-eq">
+<db:title>bool operator==(const TestQDoc::Test &amp;<db:emphasis>lhs</db:emphasis>, const TestQDoc::Test &amp;<db:emphasis>rhs</db:emphasis>)</db:title>
+<db:para>Returns true if <db:code role="parameter">lhs</db:code> and <db:code role="parameter">rhs</db:code> are equal.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="macro-documentation">
+<db:title>Macro Documentation</db:title>
+<db:section xml:id="QDOCTEST_MACRO2">
+<db:title>[since Test 1.1] QDOCTEST_MACRO2(int &amp;<db:emphasis>x</db:emphasis>)</db:title>
+<db:para>A macro with argument <db:code role="parameter">x</db:code>.</db:para>
+<db:para>This macro was introduced in Test 1.1.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="obsolete">
+<db:title>Obsolete Members for Test</db:title>
+<db:para><db:emphasis role="bold">The following members of class <db:link xlink:href="testqdoc-test.xml">Test</db:link> are deprecated.</db:emphasis> We strongly advise against using them in new code.</db:para>
+<db:section xml:id="obsolete-member-function-documentation">
+<db:title>Obsolete Member Function Documentation</db:title>
+<db:section xml:id="operator-2b-2b">
+<db:title>[deprecated] TestQDoc::Test &amp;Test::operator++()</db:title>
+<db:bridgehead renderas="sect2" xml:id="operator--">[deprecated] TestQDoc::Test &amp;Test::operator--()</db:bridgehead>
+<db:para>This function is deprecated. We strongly advise against using it in new code.</db:para>
+</db:section>
+<db:section xml:id="anotherObsoleteMember">
+<db:title>[deprecated] void Test::anotherObsoleteMember()</db:title>
+<db:para>This function is deprecated. We strongly advise against using it in new code.</db:para>
+<db:para>Use <db:link xlink:href="testqdoc-test.xml#obsoleteMember">obsoleteMember</db:link>() instead.</db:para>
+</db:section>
+<db:section xml:id="deprecatedMember">
+<db:title>[deprecated in 6.0] void Test::deprecatedMember()</db:title>
+<db:para>This function is deprecated since 6.0. We strongly advise against using it in new code.</db:para>
+<db:para>Use <db:link xlink:href="testqdoc-test.xml#someFunction">someFunction</db:link>() instead.</db:para>
+</db:section>
+<db:section xml:id="obsoleteMember">
+<db:title>[deprecated] void Test::obsoleteMember()</db:title>
+<db:para>This function is deprecated. We strongly advise against using it in new code.</db:para>
+<db:para>Use <db:link xlink:href="testqdoc-test.xml#someFunction">someFunction</db:link>() instead.</db:para>
+</db:section>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testqdoc-testderived.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testqdoc-testderived.xml
new file mode 100644
index 000000000..a54ecaf6f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testqdoc-testderived.xml
@@ -0,0 +1,83 @@
+<?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>TestDerived Class</db:title>
+<db:subtitle>TestQDoc::TestDerived</db:subtitle>
+<db:productname>TestCPP</db:productname>
+<db:titleabbrev>TestCPP Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>A class in a namespace, derived from <db:link xlink:href="testqdoc-test.xml">Test</db:link>.</db:para>
+<db:para>This class was introduced in Qt 2.0.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>TestDerived</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since</db:term>
+<db:listitem>
+<db:para>Qt 2.0</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>CMake</db:term>
+<db:listitem>
+<db:para>find_package(Qt6 REQUIRED COMPONENTS QDocTest)</db:para>
+<db:para>target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>qmake</db:term>
+<db:listitem>
+<db:para>QT += testcpp</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Inherits</db:term>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml" xlink:role="class">TestQDoc::Test</db:link></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="member-type-documentation">
+<db:title>Member Type Documentation</db:title>
+<db:section xml:id="DerivedType-typedef">
+<db:title>[alias] TestDerived::DerivedType</db:title>
+<db:para>An aliased typedef.</db:para>
+</db:section>
+<db:section xml:id="NotTypedef-typedef">
+<db:title>[alias] TestDerived::NotTypedef</db:title>
+<db:para>I'm an alias, not a typedef.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="member-function-documentation">
+<db:title>Member Function Documentation</db:title>
+<db:section xml:id="someValue">
+<db:title>TestQDoc::TestDerived::NotTypedef TestDerived::someValue()</db:title>
+<db:para>Returns a value using an aliases type.</db:para>
+</db:section>
+<db:section xml:id="virtualFun">
+<db:title>[override virtual] void TestDerived::virtualFun()</db:title>
+<db:para>Reimplements: <db:link xlink:href="testqdoc-test.xml#virtualFun" role="function">Test::virtualFun()</db:link>.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="obsolete">
+<db:title>Obsolete Members for TestDerived</db:title>
+<db:para><db:emphasis role="bold">The following members of class <db:link xlink:href="testqdoc-testderived.xml">TestDerived</db:link> are deprecated.</db:emphasis> We strongly advise against using them in new code.</db:para>
+<db:section xml:id="obsolete-member-function-documentation">
+<db:title>Obsolete Member Function Documentation</db:title>
+<db:section xml:id="staticObsoleteMember">
+<db:title>[static, deprecated] void TestDerived::staticObsoleteMember()</db:title>
+<db:para>This function is deprecated. We strongly advise against using it in new code.</db:para>
+<db:para>Static obsolete method.</db:para>
+</db:section>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testqdoc.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testqdoc.xml
new file mode 100644
index 000000000..99a2422ee
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testqdoc.xml
@@ -0,0 +1,63 @@
+<?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>TestQDoc Namespace</db:title>
+<db:productname>TestCPP</db:productname>
+<db:titleabbrev>TestCPP Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>A namespace.</db:para>
+<db:para>This namespace was introduced in Qt 2.0.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>TestCPP</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since</db:term>
+<db:listitem>
+<db:para>Qt 2.0</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>CMake</db:term>
+<db:listitem>
+<db:para>find_package(Qt6 REQUIRED COMPONENTS QDocTest)</db:para>
+<db:para>target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>qmake</db:term>
+<db:listitem>
+<db:para>QT += testcpp</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:section xml:id="usage">
+<db:title>Usage</db:title>
+<db:para>This namespace is for testing QDoc output.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="classes">
+<db:title>Classes</db:title>
+<db:section>
+<db:title>class <db:link xlink:href="testqdoc-test.xml" xlink:role="class">Test</db:link></db:title>
+<db:para>A class in a namespace.</db:para>
+</db:section>
+<db:section>
+<db:title>class <db:link xlink:href="testqdoc-testderived.xml" xlink:role="class">TestDerived</db:link></db:title>
+<db:para>A class in a namespace, derived from <db:link xlink:href="testqdoc-test.xml">Test</db:link>.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="macro-documentation">
+<db:title>Macro Documentation</db:title>
+<db:section xml:id="QDOCTEST_MACRO">
+<db:title>QDOCTEST_MACRO</db:title>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/whatsnew.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/whatsnew.xml
new file mode 100644
index 000000000..b87618d59
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/whatsnew.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>New Classes and Functions</db:title>
+<db:productname>TestCPP</db:productname>
+<db:titleabbrev>TestCPP Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>New classes documentation.</db:para>
+</db:abstract>
+</db:info>
+</db:article>
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
new file mode 100644
index 000000000..444c3d0d1
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/autolinking.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classlists.qdoc -->
+ <title>Autolinking | TestCPP</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#testqdoc">TestQDoc</a></li>
+<li class="level1"><a href="#someprop">someProp</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Autolinking</h1>
+<!-- $$$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>Autolinks:</p>
+<ul>
+<li><a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></li>
+</ul>
+<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>
+</ul>
+<h2 id="someprop">someProp</h2>
+</div>
+<!-- @@@autolinking.html -->
+</body>
+</html>
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
new file mode 100644
index 000000000..8d91afd76
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/cpptypes.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classlists.qdoc -->
+ <title>Test C++ Types | TestCPP</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Test C++ Types</h1>
+<!-- $$$cpptypes-description -->
+<div class="descr" id="details">
+<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>
+<!-- @@@cpptypes -->
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-test.html">TestQDoc::Test</a></p></td><td class="tblDescr"><p>A class in a namespace</p></td></tr>
+</table></div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/crossmoduleref.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/crossmoduleref.html
new file mode 100644
index 000000000..2e938d336
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/crossmoduleref.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="Namespace that has documented functions in multiple modules.">
+ <title>CrossModuleRef Namespace | TestCPP</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#functions">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">CrossModuleRef Namespace</h1>
+<!-- $$$CrossModuleRef-brief -->
+<p>Namespace that has documented functions in multiple modules. <a href="#details">More...</a></p>
+<!-- @@@CrossModuleRef -->
+<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;CrossModuleRef&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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 3.0</td></tr>
+</table></div>
+<h2 id="functions">Functions</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="crossmoduleref.html#documentMe" translate="no">documentMe</a></b>()</td></tr>
+</table></div>
+<!-- $$$CrossModuleRef-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@CrossModuleRef -->
+<div class="func">
+<h2>Function Documentation</h2>
+<!-- $$$documentMe[overload1]$$$documentMe -->
+<h3 class="fn" translate="no" id="documentMe"><span class="type">void</span> CrossModuleRef::<span class="name">documentMe</span>()</h3>
+<p>Document me!</p>
+<!-- @@@documentMe -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/obsolete-classes.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/obsolete-classes.html
new file mode 100644
index 000000000..01198c82d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/obsolete-classes.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classlists.qdoc -->
+ <title>Obsolete Classes | TestCPP</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#classes-with-obsolete-members">Classes with obsolete members</a></li>
+<li class="level2"><a href="#testqdoc">TestQDoc</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Obsolete Classes</h1>
+<!-- $$$obsolete-classes.html-description -->
+<div class="descr" id="details">
+<h2 id="classes-with-obsolete-members">Classes with obsolete members</h2>
+<div class="flowListDiv" translate="no">
+<dl class="flowList odd"><dt class="alphaChar"><b>T</b></dt>
+<dd><a href="testqdoc-test-obsolete.html">Test</a> (<a href="testqdoc.html">TestQDoc</a>)</dd>
+<dd><a href="testqdoc-testderived-obsolete.html">TestDerived</a> (<a href="testqdoc.html">TestQDoc</a>)</dd>
+</dl>
+</div>
+<h3 id="testqdoc">TestQDoc</h3>
+</div>
+<!-- @@@obsolete-classes.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/scoped-enum-linking.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/scoped-enum-linking.html
new file mode 100644
index 000000000..c6229dac2
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/scoped-enum-linking.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- scopedenum.qdoc -->
+ <title>Enum Linking | TestCPP</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Enum Linking</h1>
+<!-- $$$scoped-enum-linking.html-description -->
+<div class="descr" id="details">
+<p>Linking to <a href="testqdoc-test.html#ScopedEnum-enum" translate="no">All</a>.</p>
+<p>TestQDoc::Test::ClassicEnum::Howdy does not link, but <a href="testqdoc-test.html#ClassicEnum-enum" translate="no">TestQDoc::Test::Howdy</a> might.</p>
+</div>
+<!-- @@@scoped-enum-linking.html -->
+</body>
+</html>
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
new file mode 100644
index 000000000..826926d59
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testcpp-module.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A test module page.">
+ <title>QDoc Test C++ Classes | TestCPP</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>
+<li class="level2"><a href="#linking-to-function-like-things">Linking to function-like things</a></li>
+<li class="level3"><a href="#section">section()</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">QDoc Test C++ Classes</h1>
+<!-- $$$TestCPP-brief -->
+<p>A test module page. <a href="#details">More...</a></p>
+<!-- @@@TestCPP -->
+<p>This module was introduced in Qt 2.0.</p>
+<h2 id="namespaces">Namespaces</h2>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="crossmoduleref.html">CrossModuleRef</a></p></td><td class="tblDescr"><p>Namespace that has documented functions in multiple modules</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="testqdoc.html">TestQDoc</a></p></td><td class="tblDescr"><p>A namespace</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="testqdoc-test.html">TestQDoc::Test</a></p></td><td class="tblDescr"><p>A class in a namespace</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></p></td><td class="tblDescr"><p>A class in a namespace, derived from Test</p></td></tr>
+</table></div>
+<!-- $$$TestCPP-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<div class="admonition note">
+<p><b>Note: </b>This is just a test. /* Look, Ma! {I'm made of arguments!} */</p>
+</div>
+<h3 id="linking-to-function-like-things">Linking to function-like things</h3>
+<ul>
+<li><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a>()</li>
+<li><a href="testqdoc-test.html#QDOCTEST_MACRO2" translate="no">QDOCTEST_MACRO2</a>()</li>
+<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>
+<!-- @@@TestCPP -->
+</body>
+</html>
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
new file mode 100644
index 000000000..db507bfe3
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testcpp.index
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="TestCPP Reference Documentation" version="" project="TestCPP">
+ <namespace name="" status="active" access="public" module="testcpp">
+ <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="0" meta="macrowithoutparams" signature="QDOCTEST_MACRO"/>
+ <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>
+ <page name="autolinking.html" href="autolinking.html" status="active" location="classlists.qdoc" documented="true" subtype="page" title="Autolinking" fulltitle="Autolinking" subtitle="">
+ <contents name="testqdoc" title="TestQDoc" level="1"/>
+ <contents name="someprop" title="someProp" level="1"/>
+ </page>
+ <namespace name="CrossModuleRef" href="crossmoduleref.html" status="active" access="public" location="testcpp.h" since="3.0" documented="true" module="TestCPP" brief="Namespace that has documented functions in multiple modules">
+ <function name="documentMe" fullname="CrossModuleRef::documentMe" href="crossmoduleref.html#documentMe" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void documentMe()"/>
+ </namespace>
+ <class name="DontLinkToMe" href="dontlinktome.html" status="ignored" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="Class that does not generate documentation"/>
+ <page name="scoped-enum-linking.html" href="scoped-enum-linking.html" status="active" location="scopedenum.qdoc" documented="true" subtype="page" title="Enum Linking" fulltitle="Enum Linking" subtitle=""/>
+ <page name="whatsnew.html" href="whatsnew.html" status="active" location="scopedenum.qdoc" documented="true" subtype="page" title="New Classes and Functions" fulltitle="New Classes and Functions" subtitle="" brief="New classes documentation"/>
+ <page name="obsolete-classes.html" href="obsolete-classes.html" status="active" location="classlists.qdoc" documented="true" subtype="page" title="Obsolete Classes" fulltitle="Obsolete Classes" subtitle="">
+ <contents name="classes-with-obsolete-members" title="Classes with obsolete members" level="1"/>
+ <contents name="testqdoc" title="TestQDoc" level="2"/>
+ </page>
+ <namespace name="TestQDoc" href="testqdoc.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="A namespace">
+ <contents name="usage" title="Usage" level="1"/>
+ <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="0" meta="macrowithoutparams" signature="QDOCTEST_MACRO"/>
+ <class threadsafety="reentrant" name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" groups="cpptypes,testgroup" module="TestCPP" brief="A class in a namespace">
+ <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)">
+ <parameter type="bool" name="b" default=""/>
+ <parameter type="const char *" name="s" default=""/>
+ </function>
+ <function name="inlineFunction" fullname="TestQDoc::Test::inlineFunction" href="testqdoc-test.html#inlineFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" brief="An inline function, documented using the \fn QDoc command" signature="void inlineFunction()"/>
+ <function name="methodWithEmDashInItsDocs" fullname="TestQDoc::Test::methodWithEmDashInItsDocs" href="testqdoc-test.html#methodWithEmDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEmDashInItsDocs()"/>
+ <function name="methodWithEnDashInItsDocs" fullname="TestQDoc::Test::methodWithEnDashInItsDocs" href="testqdoc-test.html#methodWithEnDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEnDashInItsDocs()"/>
+ <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=""/>
+ </function>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload" status="active" access="protected" location="testcpp.h" documented="true" meta="plain" type="void" signature="void overload()"/>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload-1" status="active" access="protected" location="testcpp.h" documented="true" since="Test 1.2" meta="plain" overload="true" overload-number="1" type="void" signature="void overload(bool b)">
+ <parameter type="bool" name="b" default=""/>
+ </function>
+ <function name="someFunction" fullname="TestQDoc::Test::someFunction" href="testqdoc-test.html#someFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="int" signature="int someFunction(int, int v)">
+ <parameter type="int" name="" default=""/>
+ <parameter type="int" name="v" default="0"/>
+ </function>
+ <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" threadsafety="non-reentrant" status="active" access="public" location="testcpp.h" documented="true" meta="plain" const="true" type="void" signature="void someFunctionDefaultArg(int i, bool b) const" groups="testgroup">
+ <parameter type="int" name="i" default=""/>
+ <parameter type="bool" name="b" default="false"/>
+ </function>
+ <function name="virtualFun" fullname="TestQDoc::Test::virtualFun" href="testqdoc-test.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" type="void" signature="void virtualFun()"/>
+ <enum name="ClassicEnum" fullname="TestQDoc::Test::ClassicEnum" href="testqdoc-test.html#ClassicEnum-enum" status="active" access="public" location="testcpp.h" documented="true">
+ <value name="Yee" value="0"/>
+ <value name="Haw" value="1"/>
+ <value name="Howdy" value="2"/>
+ <value name="Partner" value="3"/>
+ </enum>
+ <enum name="ScopedEnum" fullname="TestQDoc::Test::ScopedEnum" href="testqdoc-test.html#ScopedEnum-enum" status="active" access="public" location="testcpp.h" documented="true" scoped="true">
+ <value name="This" value="0x01"/>
+ <value name="That" value="0x02"/>
+ <value name="All" value="This | That" since="2.0"/>
+ <value name="OmittedValue" value="99"/>
+ <value name="UselessValue" value="100"/>
+ <value name="VeryLastValue" value="101"/>
+ </enum>
+ <typedef name="SomeType" fullname="TestQDoc::Test::SomeType" href="testqdoc-test.html#SomeType-typedef" status="active" access="public" location="testcpp.h" documented="true"/>
+ </class>
+ <class name="TestDerived" fullname="TestQDoc::TestDerived" href="testqdoc-testderived.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" bases="TestQDoc::Test" module="TestCPP" brief="A class in a namespace, derived from Test">
+ <function name="someValue" fullname="TestQDoc::TestDerived::someValue" href="testqdoc-testderived.html#someValue" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::TestDerived::NotTypedef" signature="TestQDoc::TestDerived::NotTypedef someValue()"/>
+ <function name="staticObsoleteMember" fullname="TestQDoc::TestDerived::staticObsoleteMember" href="testqdoc-testderived-obsolete.html#staticObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" static="true" type="void" signature="void staticObsoleteMember()"/>
+ <function name="virtualFun" fullname="TestQDoc::TestDerived::virtualFun" href="testqdoc-testderived.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" override="true" type="void" signature="void virtualFun() override"/>
+ <typedef name="DerivedType" fullname="TestQDoc::TestDerived::DerivedType" href="testqdoc-testderived.html#DerivedType-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="Test::SomeType"/>
+ <typedef name="NotTypedef" fullname="TestQDoc::TestDerived::NotTypedef" href="testqdoc-testderived.html#NotTypedef-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="int"/>
+ </class>
+ </namespace>
+ <page name="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" status="active" location="classlists.qdoc" documented="true" subtype="externalpage" title="reentrant" fulltitle="reentrant" subtitle=""/>
+ <group name="cpptypes" href="cpptypes.html" status="active" location="classlists.qdoc" documented="true" seen="true" title="Test C++ Types"/>
+ <group name="testgroup" href="testgroup.html" status="internal" seen="false" title=""/>
+ <module name="TestCPP" href="testcpp-module.html" status="active" since="2.0" documented="true" seen="true" title="QDoc Test C++ Classes" brief="A test module page">
+ <contents name="linking-to-function-like-things" title="Linking to function-like things" level="1"/>
+ <contents name="section" title="section()" level="2"/>
+ </module>
+ </namespace>
+</INDEX>
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
new file mode 100644
index 000000000..a26f10184
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-test-members.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace.">
+ <title>List of All Members for Test | TestCPP</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>Test</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for Test</h1>
+<p>This is the complete list of members for <a href="testqdoc-test.html">TestQDoc::Test</a>, including inherited members.</p>
+<ul>
+<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>
+<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>
+<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-obsolete.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-test-obsolete.html
new file mode 100644
index 000000000..2b5192da1
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-test-obsolete.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace.">
+ <title>Obsolete Members for Test | TestCPP</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>Test</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">Obsolete Members for Test</h1>
+<p><b>The following members of class <a href="testqdoc-test.html" translate="no">Test</a> are deprecated.</b> They are provided to keep old source code working. We strongly advise against using them in new code.</p>
+<h2>Public Functions</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#anotherObsoleteMember" translate="no">anotherObsoleteMember</a></b>()</td></tr>
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated in 6.0)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#deprecatedMember" translate="no">deprecatedMember</a></b>()</td></tr>
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#obsoleteMember" translate="no">obsoleteMember</a></b>()</td></tr>
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated)</code> TestQDoc::Test &amp;</td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#operator-2b-2b" translate="no">operator++</a></b>()</td></tr>
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated)</code> TestQDoc::Test &amp;</td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#operator--" translate="no">operator--</a></b>()</td></tr>
+</table></div>
+<h2>Member Function Documentation</h2>
+<!-- $$$ -->
+<div class="fngroup">
+<h3 class="fn fngroupitem" translate="no" id="operator-2b-2b"><code class="details extra" translate="no">[deprecated]</code> <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;Test::<span class="name">operator++</span>()</h3><h3 class="fn fngroupitem" translate="no" id="operator--"><code class="details extra" translate="no">[deprecated]</code> <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;Test::<span class="name">operator--</span>()</h3></div>
+<p>This function is deprecated. We strongly advise against using it in new code.</p>
+<!-- @@@ -->
+<!-- $$$anotherObsoleteMember[overload1]$$$anotherObsoleteMember -->
+<h3 class="fn" translate="no" id="anotherObsoleteMember"><code class="details extra" translate="no">[deprecated]</code> <span class="type">void</span> Test::<span class="name">anotherObsoleteMember</span>()</h3>
+<p>This function is deprecated. We strongly advise against using it in new code.</p>
+<p>Use <a href="testqdoc-test-obsolete.html#obsoleteMember" translate="no">obsoleteMember</a>() instead.</p>
+<!-- @@@anotherObsoleteMember -->
+<!-- $$$deprecatedMember[overload1]$$$deprecatedMember -->
+<h3 class="fn" translate="no" id="deprecatedMember"><code class="details extra" translate="no">[deprecated in 6.0]</code> <span class="type">void</span> Test::<span class="name">deprecatedMember</span>()</h3>
+<p>This function is deprecated since 6.0. We strongly advise against using it in new code.</p>
+<p>Use <a href="testqdoc-test.html#someFunction" translate="no">someFunction</a>() instead.</p>
+<!-- @@@deprecatedMember -->
+<!-- $$$obsoleteMember[overload1]$$$obsoleteMember -->
+<h3 class="fn" translate="no" id="obsoleteMember"><code class="details extra" translate="no">[deprecated]</code> <span class="type">void</span> Test::<span class="name">obsoleteMember</span>()</h3>
+<p>This function is deprecated. We strongly advise against using it in new code.</p>
+<p>Use <a href="testqdoc-test.html#someFunction" translate="no">someFunction</a>() instead.</p>
+<!-- @@@obsoleteMember -->
+</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
new file mode 100644
index 000000000..b1efd4d91
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-test.html
@@ -0,0 +1,183 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace.">
+ <title>Test Class | TestCPP</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>Test</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#public-types">Public Types</a></li>
+<li class="level1"><a href="#public-functions">Public Functions</a></li>
+<li class="level1"><a href="#protected-functions">Protected Functions</a></li>
+<li class="level1"><a href="#related-non-members">Related Non-Members</a></li>
+<li class="level1"><a href="#macros">Macros</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">Test Class</h1>
+<span class="small-subtitle" translate="no">class <a href="testqdoc.html" translate="no">TestQDoc</a>::Test</span>
+<!-- $$$Test-brief -->
+<p>A class in a namespace. <a href="#details">More...</a></p>
+<!-- @@@Test -->
+<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;Test&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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"> Inherited By:</td><td class="memItemRight bottomAlign"> <p><a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></p>
+</td></tr>
+</table></div>
+<ul>
+<li><a href="testqdoc-test-members.html">List of all members, including inherited members</a></li>
+<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>
+<ul>
+<li><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a>(int i, bool b) const</li>
+</ul>
+<h2 id="public-types">Public Types</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> enum </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#ClassicEnum-enum" translate="no">ClassicEnum</a></b> { Yee, Haw, Howdy, Partner }</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> enum class </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#ScopedEnum-enum" translate="no">ScopedEnum</a></b> { This, That, All }</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#SomeType-typedef" translate="no">SomeType</a></b></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>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#methodWithEnDashInItsDocs" translate="no">methodWithEnDashInItsDocs</a></b>()</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">
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#overload" translate="no">overload</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since Test 1.2)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#overload-1" translate="no">overload</a></b>(bool <i>b</i>)</td></tr>
+</table></div>
+<h2 id="related-non-members">Related Non-Members</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> bool </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#operator-eq-eq" translate="no">operator==</a></b>(const TestQDoc::Test &amp;<i>lhs</i>, const TestQDoc::Test &amp;<i>rhs</i>)</td></tr>
+</table></div>
+<h2 id="macros">Macros</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since Test 1.1)</code> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#QDOCTEST_MACRO2" translate="no">QDOCTEST_MACRO2</a></b>(int &amp;<i>x</i>)</td></tr>
+</table></div>
+<!-- $$$Test-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Test -->
+<div class="types">
+<h2>Member Type Documentation</h2>
+<!-- $$$ClassicEnum$$$Yee$$$Haw$$$Howdy$$$Partner -->
+<h3 class="fn" translate="no" id="ClassicEnum-enum">enum Test::<span class="name">ClassicEnum</span></h3>
+<div class="table"><table class="valuelist"><tr><th class="tblConst">Constant</th><th class="tblVal">Value</th></tr>
+<tr><td class="topAlign"><code translate="no">TestQDoc::Test::Yee</code></td><td class="topAlign tblval"><code translate="no">0</code></td></tr>
+<tr><td class="topAlign"><code translate="no">TestQDoc::Test::Haw</code></td><td class="topAlign tblval"><code translate="no">1</code></td></tr>
+<tr><td class="topAlign"><code translate="no">TestQDoc::Test::Howdy</code></td><td class="topAlign tblval"><code translate="no">2</code></td></tr>
+<tr><td class="topAlign"><code translate="no">TestQDoc::Test::Partner</code></td><td class="topAlign tblval"><code translate="no">3</code></td></tr>
+</table></div>
+<!-- @@@ClassicEnum -->
+<!-- $$$ScopedEnum$$$This$$$That$$$All$$$OmittedValue$$$UselessValue$$$VeryLastValue -->
+<h3 class="fn" translate="no" id="ScopedEnum-enum">enum class Test::<span class="name">ScopedEnum</span></h3>
+<p>This enum has a brief to trigger a bug in CMD_BRIEF.</p>
+<div class="table"><table class="valuelist"><tr valign="top" class="odd"><th class="tblConst">Constant</th><th class="tblval">Value</th><th class="tbldscr">Description</th></tr>
+<tr><td class="topAlign"><code translate="no">TestQDoc::Test::ScopedEnum::This</code></td><td class="topAlign tblval"><code translate="no">0x01</code></td><td class="topAlign">Something</td></tr>
+<tr><td class="topAlign"><code translate="no">TestQDoc::Test::ScopedEnum::That</code></td><td class="topAlign tblval"><code translate="no">0x02</code></td><td class="topAlign">Something else</td></tr>
+<tr><td class="topAlign"><code translate="no">TestQDoc::Test::ScopedEnum::All (since Qt 2.0)</code></td><td class="topAlign tblval"><code translate="no">This | That</code></td><td class="topAlign">Everything</td></tr>
+</table></div>
+<p>A scoped enum.</p>
+<!-- @@@ScopedEnum -->
+<!-- $$$SomeType -->
+<h3 class="fn" translate="no" id="SomeType-typedef">Test::<span class="name">SomeType</span></h3>
+<p>A typedef.</p>
+<!-- @@@SomeType -->
+</div>
+<div class="func">
+<h2>Member Function Documentation</h2>
+<!-- $$$ -->
+<div class="fngroup">
+<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>
+<!-- @@@funcPtr -->
+<!-- $$$inlineFunction[overload1]$$$inlineFunction -->
+<h3 class="fn" translate="no" id="inlineFunction"><span class="type">void</span> Test::<span class="name">inlineFunction</span>()</h3>
+<p>An inline function, documented using the \fn QDoc command.</p>
+<!-- @@@inlineFunction -->
+<!-- $$$methodWithEmDashInItsDocs[overload1]$$$methodWithEmDashInItsDocs -->
+<h3 class="fn" translate="no" id="methodWithEmDashInItsDocs"><span class="type">void</span> Test::<span class="name">methodWithEmDashInItsDocs</span>()</h3>
+<p>This method has em dashes in its documentation&mdash;as you'll find represented by <code translate="no">---</code> in the sources&mdash;here and there. The important bit to note is that when passed e.g. to the \c command, the three hyphens are processed as input to the command and not replaced by an em dash.</p>
+<p>-----------------------------------------------------------------------</p>
+<p>People can still add a bunch of dashes, though, without QDoc replacing them all with a series of em dashes.</p>
+<p>&mdash;You can also start a new paragraph with an em dash, if you want to.</p>
+<p><b>See also </b><a href="testqdoc-test.html#methodWithEnDashInItsDocs" translate="no">methodWithEnDashInItsDocs</a>.</p>
+<!-- @@@methodWithEmDashInItsDocs -->
+<!-- $$$methodWithEnDashInItsDocs[overload1]$$$methodWithEnDashInItsDocs -->
+<h3 class="fn" translate="no" id="methodWithEnDashInItsDocs"><span class="type">void</span> Test::<span class="name">methodWithEnDashInItsDocs</span>()</h3>
+<p>This method has en dashes in its documentation &ndash; as you'll find represented by <code translate="no">--</code> in the sources &ndash; here and there. The important bit to note is that when passed e.g. to the \c command, the two hyphens are processed as input to the command and not replaced by an en dash. This also applies to code blocks, where otherwise, the decrement operator would get completely borked:</p>
+<pre class="cpp" translate="no"><span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">42</span>; i <span class="operator">&gt;</span> <span class="number">0</span>; <span class="operator">-</span><span class="operator">-</span>i)
+ <span class="comment">// Do something cool during countdown.</span></pre>
+<p>...as it would be silly if this would output &ndash;i instead of <code translate="no">--i</code>.</p>
+<p>-----------------------------------------------------------------------</p>
+<p>It still allows people to add a bunch of dashes, though, without replacing them all with a series of en dashes. Of course, they might want to use the \hr command instead, like this:</p>
+<hr />
+<p>&ndash; You can also start a new paragraph with an en dash, if you want to.</p>
+<p><b>See also </b>methodWithEnDashInItsDocs.</p>
+<!-- @@@methodWithEnDashInItsDocs -->
+<!-- $$$someFunction[overload1]$$$someFunctionintint -->
+<h3 class="fn" translate="no" id="someFunction"><span class="type">int</span> Test::<span class="name">someFunction</span>(<span class="type">int</span>, <span class="type">int</span> <i>v</i> = 0)</h3>
+<p>Function that takes a parameter <i translate="no">v</i>. Also returns the value of <i translate="no">v</i>.</p>
+<!-- @@@someFunction -->
+<!-- $$$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>
+<!-- @@@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>
+<!-- $$$operator==[overload1]$$$operator==constTestQDoc::Test&constTestQDoc::Test& -->
+<h3 class="fn" translate="no" id="operator-eq-eq"><span class="type">bool</span> <span class="name">operator==</span>(const <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;<i>lhs</i>, const <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;<i>rhs</i>)</h3>
+<p>Returns true if <i translate="no">lhs</i> and <i translate="no">rhs</i> are equal.</p>
+<!-- @@@operator== -->
+</div>
+<div class="macros">
+<h2>Macro Documentation</h2>
+<!-- $$$QDOCTEST_MACRO2[overload1]$$$QDOCTEST_MACRO2int& -->
+<h3 class="fn" translate="no" id="QDOCTEST_MACRO2"><code class="details extra" translate="no">[since Test 1.1]</code> <span class="name">QDOCTEST_MACRO2</span>(<span class="type">int</span> &amp;<i>x</i>)</h3>
+<p>A macro with argument <i translate="no">x</i>.</p>
+<p>This macro was introduced in Test 1.1.</p>
+<!-- @@@QDOCTEST_MACRO2 -->
+</div>
+</body>
+</html>
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
new file mode 100644
index 000000000..ea0ed8a44
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-testderived-members.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace, derived from Test.">
+ <title>List of All Members for TestDerived | TestCPP</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>TestDerived</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for TestDerived</h1>
+<p>This is the complete list of members for <a href="testqdoc-testderived.html">TestQDoc::TestDerived</a>, including inherited members.</p>
+<div class="table"><table class="propsummary" translate="no">
+<tr><td class="topAlign"><ul>
+<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"><span class="name"><b><a href="testqdoc-testderived.html#DerivedType-typedef" translate="no">DerivedType</a></b></span></li>
+<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#NotTypedef-typedef" translate="no">NotTypedef</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#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#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>
+<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-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>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-testderived-obsolete.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-testderived-obsolete.html
new file mode 100644
index 000000000..42b536e09
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-testderived-obsolete.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace, derived from Test.">
+ <title>Obsolete Members for TestDerived | TestCPP</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>TestDerived</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">Obsolete Members for TestDerived</h1>
+<p><b>The following members of class <a href="testqdoc-testderived.html" translate="no">TestDerived</a> are deprecated.</b> They are provided to keep old source code working. We strongly advise against using them in new code.</p>
+<h2>Static Public Members</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived-obsolete.html#staticObsoleteMember" translate="no">staticObsoleteMember</a></b>()</td></tr>
+</table></div>
+<h2>Member Function Documentation</h2>
+<!-- $$$staticObsoleteMember[overload1]$$$staticObsoleteMember -->
+<h3 class="fn" translate="no" id="staticObsoleteMember"><code class="details extra" translate="no">[static, deprecated]</code> <span class="type">void</span> TestDerived::<span class="name">staticObsoleteMember</span>()</h3>
+<p>This function is deprecated. We strongly advise against using it in new code.</p>
+<p>Static obsolete method.</p>
+<!-- @@@staticObsoleteMember -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-testderived.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-testderived.html
new file mode 100644
index 000000000..04f789abb
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-testderived.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace, derived from Test.">
+ <title>TestDerived Class | TestCPP</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>TestDerived</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#public-types">Public Types</a></li>
+<li class="level1"><a href="#public-functions">Public Functions</a></li>
+<li class="level1"><a href="#reimplemented-public-functions">Reimplemented 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">TestDerived Class</h1>
+<span class="small-subtitle" translate="no">class <a href="testqdoc.html" translate="no">TestQDoc</a>::TestDerived</span>
+<!-- $$$TestDerived-brief -->
+<p>A class in a namespace, derived from <a href="testqdoc-test.html" translate="no">Test</a>. <a href="#details">More...</a></p>
+<!-- @@@TestDerived -->
+<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;TestDerived&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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"> Inherits:</td><td class="memItemRight bottomAlign"> <a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></td></tr>
+</table></div>
+<ul>
+<li><a href="testqdoc-testderived-members.html">List of all members, including inherited members</a></li>
+<li><a href="testqdoc-testderived-obsolete.html">Deprecated members</a></li>
+</ul>
+<h2 id="public-types">Public Types</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#DerivedType-typedef" translate="no">DerivedType</a></b></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#NotTypedef-typedef" translate="no">NotTypedef</a></b></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"> TestQDoc::TestDerived::NotTypedef </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#someValue" translate="no">someValue</a></b>()</td></tr>
+</table></div>
+<h2 id="reimplemented-public-functions">Reimplemented Public Functions</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> virtual void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#virtualFun" translate="no">virtualFun</a></b>() override</td></tr>
+</table></div>
+<!-- $$$TestDerived-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@TestDerived -->
+<div class="types">
+<h2>Member Type Documentation</h2>
+<!-- $$$DerivedType -->
+<h3 class="fn" translate="no" id="DerivedType-typedef"><code class="details extra" translate="no">[alias]</code> TestDerived::<span class="name">DerivedType</span></h3>
+<p>An aliased typedef.</p>
+<!-- @@@DerivedType -->
+<!-- $$$NotTypedef -->
+<h3 class="fn" translate="no" id="NotTypedef-typedef"><code class="details extra" translate="no">[alias]</code> TestDerived::<span class="name">NotTypedef</span></h3>
+<p>I'm an alias, not a typedef.</p>
+<!-- @@@NotTypedef -->
+</div>
+<div class="func">
+<h2>Member Function Documentation</h2>
+<!-- $$$someValue[overload1]$$$someValue -->
+<h3 class="fn" translate="no" id="someValue"><span class="type"><a href="testqdoc-testderived.html#NotTypedef-typedef" translate="no">TestQDoc::TestDerived::NotTypedef</a></span> TestDerived::<span class="name">someValue</span>()</h3>
+<p>Returns a value using an aliases type.</p>
+<!-- @@@someValue -->
+<!-- $$$virtualFun[overload1]$$$virtualFun -->
+<h3 class="fn" translate="no" id="virtualFun"><code class="details extra" translate="no">[override virtual]</code> <span class="type">void</span> TestDerived::<span class="name">virtualFun</span>()</h3>
+<p>Reimplements: <a href="testqdoc-test.html#virtualFun" translate="no">Test::virtualFun</a>().</p>
+<!-- @@@virtualFun -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc.html
new file mode 100644
index 000000000..425c7b396
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A namespace.">
+ <title>TestQDoc Namespace | TestCPP</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="#macros">Macros</a></li>
+<li class="level1"><a href="#details">Detailed Description</a></li>
+<li class="level2"><a href="#usage">Usage</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">TestQDoc Namespace</h1>
+<!-- $$$TestQDoc-brief -->
+<p>A namespace. <a href="#details">More...</a></p>
+<!-- @@@TestQDoc -->
+<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;TestCPP&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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>
+</table></div>
+<h2 id="classes">Classes</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since 2.0)</code> class </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html" translate="no">Test</a></b></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since 2.0)</code> class </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html" translate="no">TestDerived</a></b></td></tr>
+</table></div>
+<h2 id="macros">Macros</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc.html#QDOCTEST_MACRO" translate="no">QDOCTEST_MACRO</a></b></td></tr>
+</table></div>
+<!-- $$$TestQDoc-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<h3 id="usage">Usage</h3>
+<p>This namespace is for testing QDoc output.</p>
+</div>
+<!-- @@@TestQDoc -->
+<div class="classes">
+<h2>Classes</h2>
+<h3> class <a href="testqdoc-test.html">Test</a></h3><!-- $$$Test-brief -->
+<p>A class in a namespace. <a href="testqdoc-test.html#details">More...</a></p>
+<!-- @@@Test -->
+<h3> class <a href="testqdoc-testderived.html">TestDerived</a></h3><!-- $$$TestDerived-brief -->
+<p>A class in a namespace, derived from <a href="testqdoc-test.html" translate="no">Test</a>. <a href="testqdoc-testderived.html#details">More...</a></p>
+<!-- @@@TestDerived -->
+</div>
+<div class="macros">
+<h2>Macro Documentation</h2>
+<!-- $$$QDOCTEST_MACRO[overload1]$$$QDOCTEST_MACRO -->
+<h3 class="fn" translate="no" id="QDOCTEST_MACRO"><span class="name">QDOCTEST_MACRO</span></h3>
+<!-- @@@QDOCTEST_MACRO -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/whatsnew.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/whatsnew.html
new file mode 100644
index 000000000..356731918
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/whatsnew.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- scopedenum.qdoc -->
+ <meta name="description" content="New classes documentation">
+ <title>New Classes and Functions | TestCPP</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">New Classes and Functions</h1>
+<!-- $$$whatsnew.html-description -->
+<div class="descr" id="details">
+<ul>
+<li><a href="#new-namespaces">New Namespaces</a></li>
+<li><a href="#new-classes">New Classes</a></li>
+<li><a href="#new-enum-values">New Enum Values</a></li>
+</ul>
+<h3 id="new-namespaces">New Namespaces</h3>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since 2.0)</code> namespace </td><td class="memItemRight bottomAlign"><b><a href="testqdoc.html" translate="no">TestQDoc</a></b></td></tr>
+</table></div>
+<h3 id="new-classes">New Classes</h3>
+<div class="flowListDiv" translate="no">
+<dl class="flowList odd"><dt class="alphaChar"><b>T</b></dt>
+<dd><a href="testqdoc-test.html">Test</a> (<a href="testqdoc.html">TestQDoc</a>)</dd>
+<dd><a href="testqdoc-testderived.html">TestDerived</a> (<a href="testqdoc.html">TestQDoc</a>)</dd>
+</dl>
+</div>
+<h3 id="new-enum-values">New Enum Values</h3>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft"> enum value </td><td class="memItemRight"><b><a href="testqdoc-test.html#ScopedEnum-enum">ScopedEnum::All</a></b></td></tr>
+</table></div>
+</div>
+<!-- @@@whatsnew.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/autolinking.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/autolinking.webxml
new file mode 100644
index 000000000..91f35d5d7
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/autolinking.webxml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="autolinking.html" href="autolinking.html" status="active" location="classlists.qdoc" documented="true" subtype="page" title="Autolinking" fulltitle="Autolinking" subtitle="">
+ <contents name="testqdoc" title="TestQDoc" level="1"/>
+ <contents name="someprop" title="someProp" level="1"/>
+ <description>
+ <section id="testqdoc">
+ <heading level="1">TestQDoc</heading>
+ <para>The string <link raw="TestQDoc" href="testqdoc.html" type="namespace">TestQDoc</link> links to the C++ namespace unless linking explicitly, <link raw="#TestQDoc" href="autolinking.html#testqdoc" type="page" page="Autolinking">like this</link>, or <link raw="TestQDoc" href="testqdoc.html" type="namespace">this</link>. Also,</para>
+ <para>Autolinks:</para>
+ <list type="bullet">
+ <item>
+ <para>
+ <link raw="TestQDoc::TestDerived" href="testqdoc-testderived.html" type="class">TestQDoc::TestDerived</link></para>
+ </item>
+ </list>
+ <para>Explicit links:</para>
+ <list type="bullet">
+ <item>
+ <para>
+ <link raw="TestQDoc::TestDerived" href="testqdoc-testderived.html" type="class">TestQDoc::TestDerived</link></para>
+ </item>
+ <item>
+ <para>
+ <link raw="Obsolete Classes#TestQDoc" href="obsolete-classes.html#testqdoc" type="page" page="Obsolete Classes">Obsolete Classes#TestQDoc</link></para>
+ </item>
+ </list>
+ </section>
+ <section id="someprop">
+ <heading level="1">someProp</heading>
+ </section>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/cpptypes.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/cpptypes.webxml
new file mode 100644
index 000000000..df7cd7024
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/cpptypes.webxml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <group name="cpptypes" href="cpptypes.html" status="active" location="classlists.qdoc" documented="true" seen="true" title="Test C++ Types">
+ <description>
+ <generatedlist contents="testgroup"/>
+ <table width="100%">
+ <row>
+ <item>
+ <para>
+ <link raw="TestQDoc::Test" href="testqdoc-test.html" type="class"/>
+ </para>
+ </item>
+ <item>
+ <para>A class in a namespace.</para>
+ </item>
+ </row>
+ </table>
+ </description>
+ </group>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/crossmoduleref.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/crossmoduleref.webxml
new file mode 100644
index 000000000..682799bd8
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/crossmoduleref.webxml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <namespace name="CrossModuleRef" href="crossmoduleref.html" status="active" access="public" location="testcpp.h" since="3.0" documented="true" module="TestCPP" brief="Namespace that has documented functions in multiple modules">
+ <description>
+ <brief>Namespace that has documented functions in multiple modules.</brief>
+ </description>
+ <function name="documentMe" fullname="CrossModuleRef::documentMe" href="crossmoduleref.html#documentMe" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void documentMe()">
+ <description>
+ <para>Document me!</para>
+ </description>
+ </function>
+ </namespace>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/obsolete-classes.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/obsolete-classes.webxml
new file mode 100644
index 000000000..dda841458
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/obsolete-classes.webxml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="obsolete-classes.html" href="obsolete-classes.html" status="active" location="classlists.qdoc" documented="true" subtype="page" title="Obsolete Classes" fulltitle="Obsolete Classes" subtitle="">
+ <contents name="classes-with-obsolete-members" title="Classes with obsolete members" level="1"/>
+ <contents name="testqdoc" title="TestQDoc" level="2"/>
+ <description>
+ <section id="classes-with-obsolete-members">
+ <heading level="1">Classes with obsolete members</heading>
+ <generatedlist contents="obsoletecppmembers"/>
+ </section>
+ <section id="testqdoc">
+ <heading level="2">TestQDoc</heading>
+ </section>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/scoped-enum-linking.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/scoped-enum-linking.webxml
new file mode 100644
index 000000000..62091e656
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/scoped-enum-linking.webxml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="scoped-enum-linking.html" href="scoped-enum-linking.html" status="active" location="scopedenum.qdoc" documented="true" subtype="page" title="Enum Linking" fulltitle="Enum Linking" subtitle="">
+ <description>
+ <para>Linking to <link raw="TestQDoc::Test::ScopedEnum::All" href="testqdoc-test.html#ScopedEnum-enum" type="enum" enum="TestQDoc::Test::ScopedEnum">All</link>.</para>
+ <para>TestQDoc::Test::ClassicEnum::Howdy does not link, but <link raw="TestQDoc::Test::Howdy" href="testqdoc-test.html#ClassicEnum-enum" type="enum" enum="TestQDoc::Test::ClassicEnum">TestQDoc::Test::Howdy</link> might.</para>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testcpp-module.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testcpp-module.webxml
new file mode 100644
index 000000000..5d24b3077
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testcpp-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/scopedenum/expected/webxml/testcpp.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testcpp.index
new file mode 100644
index 000000000..db507bfe3
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testcpp.index
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="TestCPP Reference Documentation" version="" project="TestCPP">
+ <namespace name="" status="active" access="public" module="testcpp">
+ <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="0" meta="macrowithoutparams" signature="QDOCTEST_MACRO"/>
+ <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>
+ <page name="autolinking.html" href="autolinking.html" status="active" location="classlists.qdoc" documented="true" subtype="page" title="Autolinking" fulltitle="Autolinking" subtitle="">
+ <contents name="testqdoc" title="TestQDoc" level="1"/>
+ <contents name="someprop" title="someProp" level="1"/>
+ </page>
+ <namespace name="CrossModuleRef" href="crossmoduleref.html" status="active" access="public" location="testcpp.h" since="3.0" documented="true" module="TestCPP" brief="Namespace that has documented functions in multiple modules">
+ <function name="documentMe" fullname="CrossModuleRef::documentMe" href="crossmoduleref.html#documentMe" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void documentMe()"/>
+ </namespace>
+ <class name="DontLinkToMe" href="dontlinktome.html" status="ignored" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="Class that does not generate documentation"/>
+ <page name="scoped-enum-linking.html" href="scoped-enum-linking.html" status="active" location="scopedenum.qdoc" documented="true" subtype="page" title="Enum Linking" fulltitle="Enum Linking" subtitle=""/>
+ <page name="whatsnew.html" href="whatsnew.html" status="active" location="scopedenum.qdoc" documented="true" subtype="page" title="New Classes and Functions" fulltitle="New Classes and Functions" subtitle="" brief="New classes documentation"/>
+ <page name="obsolete-classes.html" href="obsolete-classes.html" status="active" location="classlists.qdoc" documented="true" subtype="page" title="Obsolete Classes" fulltitle="Obsolete Classes" subtitle="">
+ <contents name="classes-with-obsolete-members" title="Classes with obsolete members" level="1"/>
+ <contents name="testqdoc" title="TestQDoc" level="2"/>
+ </page>
+ <namespace name="TestQDoc" href="testqdoc.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="A namespace">
+ <contents name="usage" title="Usage" level="1"/>
+ <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="0" meta="macrowithoutparams" signature="QDOCTEST_MACRO"/>
+ <class threadsafety="reentrant" name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" groups="cpptypes,testgroup" module="TestCPP" brief="A class in a namespace">
+ <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)">
+ <parameter type="bool" name="b" default=""/>
+ <parameter type="const char *" name="s" default=""/>
+ </function>
+ <function name="inlineFunction" fullname="TestQDoc::Test::inlineFunction" href="testqdoc-test.html#inlineFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" brief="An inline function, documented using the \fn QDoc command" signature="void inlineFunction()"/>
+ <function name="methodWithEmDashInItsDocs" fullname="TestQDoc::Test::methodWithEmDashInItsDocs" href="testqdoc-test.html#methodWithEmDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEmDashInItsDocs()"/>
+ <function name="methodWithEnDashInItsDocs" fullname="TestQDoc::Test::methodWithEnDashInItsDocs" href="testqdoc-test.html#methodWithEnDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEnDashInItsDocs()"/>
+ <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=""/>
+ </function>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload" status="active" access="protected" location="testcpp.h" documented="true" meta="plain" type="void" signature="void overload()"/>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload-1" status="active" access="protected" location="testcpp.h" documented="true" since="Test 1.2" meta="plain" overload="true" overload-number="1" type="void" signature="void overload(bool b)">
+ <parameter type="bool" name="b" default=""/>
+ </function>
+ <function name="someFunction" fullname="TestQDoc::Test::someFunction" href="testqdoc-test.html#someFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="int" signature="int someFunction(int, int v)">
+ <parameter type="int" name="" default=""/>
+ <parameter type="int" name="v" default="0"/>
+ </function>
+ <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" threadsafety="non-reentrant" status="active" access="public" location="testcpp.h" documented="true" meta="plain" const="true" type="void" signature="void someFunctionDefaultArg(int i, bool b) const" groups="testgroup">
+ <parameter type="int" name="i" default=""/>
+ <parameter type="bool" name="b" default="false"/>
+ </function>
+ <function name="virtualFun" fullname="TestQDoc::Test::virtualFun" href="testqdoc-test.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" type="void" signature="void virtualFun()"/>
+ <enum name="ClassicEnum" fullname="TestQDoc::Test::ClassicEnum" href="testqdoc-test.html#ClassicEnum-enum" status="active" access="public" location="testcpp.h" documented="true">
+ <value name="Yee" value="0"/>
+ <value name="Haw" value="1"/>
+ <value name="Howdy" value="2"/>
+ <value name="Partner" value="3"/>
+ </enum>
+ <enum name="ScopedEnum" fullname="TestQDoc::Test::ScopedEnum" href="testqdoc-test.html#ScopedEnum-enum" status="active" access="public" location="testcpp.h" documented="true" scoped="true">
+ <value name="This" value="0x01"/>
+ <value name="That" value="0x02"/>
+ <value name="All" value="This | That" since="2.0"/>
+ <value name="OmittedValue" value="99"/>
+ <value name="UselessValue" value="100"/>
+ <value name="VeryLastValue" value="101"/>
+ </enum>
+ <typedef name="SomeType" fullname="TestQDoc::Test::SomeType" href="testqdoc-test.html#SomeType-typedef" status="active" access="public" location="testcpp.h" documented="true"/>
+ </class>
+ <class name="TestDerived" fullname="TestQDoc::TestDerived" href="testqdoc-testderived.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" bases="TestQDoc::Test" module="TestCPP" brief="A class in a namespace, derived from Test">
+ <function name="someValue" fullname="TestQDoc::TestDerived::someValue" href="testqdoc-testderived.html#someValue" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::TestDerived::NotTypedef" signature="TestQDoc::TestDerived::NotTypedef someValue()"/>
+ <function name="staticObsoleteMember" fullname="TestQDoc::TestDerived::staticObsoleteMember" href="testqdoc-testderived-obsolete.html#staticObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" static="true" type="void" signature="void staticObsoleteMember()"/>
+ <function name="virtualFun" fullname="TestQDoc::TestDerived::virtualFun" href="testqdoc-testderived.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" override="true" type="void" signature="void virtualFun() override"/>
+ <typedef name="DerivedType" fullname="TestQDoc::TestDerived::DerivedType" href="testqdoc-testderived.html#DerivedType-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="Test::SomeType"/>
+ <typedef name="NotTypedef" fullname="TestQDoc::TestDerived::NotTypedef" href="testqdoc-testderived.html#NotTypedef-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="int"/>
+ </class>
+ </namespace>
+ <page name="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" status="active" location="classlists.qdoc" documented="true" subtype="externalpage" title="reentrant" fulltitle="reentrant" subtitle=""/>
+ <group name="cpptypes" href="cpptypes.html" status="active" location="classlists.qdoc" documented="true" seen="true" title="Test C++ Types"/>
+ <group name="testgroup" href="testgroup.html" status="internal" seen="false" title=""/>
+ <module name="TestCPP" href="testcpp-module.html" status="active" since="2.0" documented="true" seen="true" title="QDoc Test C++ Classes" brief="A test module page">
+ <contents name="linking-to-function-like-things" title="Linking to function-like things" level="1"/>
+ <contents name="section" title="section()" level="2"/>
+ </module>
+ </namespace>
+</INDEX>
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
new file mode 100644
index 000000000..0e2cf6c33
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testqdoc-test.webxml
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class threadsafety="reentrant" name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" groups="cpptypes,testgroup" module="TestCPP" brief="A class in a namespace">
+ <description>
+ <brief>A class in a namespace.</brief>
+ </description>
+ <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=""/>
+ <description>
+ <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>
+ </description>
+ </function>
+ <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()">
+ <description>
+ <para>Use <link raw="someFunction()" href="testqdoc-test.html#someFunction" type="function">someFunction()</link> instead.</para>
+ </description>
+ </function>
+ <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)">
+ <parameter type="bool" name="b" default=""/>
+ <parameter type="const char *" name="s" default=""/>
+ <description>
+ <para>Returns a pointer to a function that takes a boolean. Uses <argument>b</argument> and <argument>s</argument>.</para>
+ </description>
+ </function>
+ <function name="inlineFunction" fullname="TestQDoc::Test::inlineFunction" href="testqdoc-test.html#inlineFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" brief="An inline function, documented using the \fn QDoc command" signature="void inlineFunction()">
+ <description>
+ <brief>An inline function, documented using the \fn QDoc command.</brief>
+ </description>
+ </function>
+ <function name="methodWithEmDashInItsDocs" fullname="TestQDoc::Test::methodWithEmDashInItsDocs" href="testqdoc-test.html#methodWithEmDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEmDashInItsDocs()">
+ <description>
+ <para>This method has em dashes in its documentation—as you'll find represented by <teletype type="highlighted">---</teletype> in the sources—here and there. The important bit to note is that when passed e.g. to the \c command, the three hyphens are processed as input to the command and not replaced by an em dash.</para>
+ <para>-----------------------------------------------------------------------</para>
+ <para>People can still add a bunch of dashes, though, without QDoc replacing them all with a series of em dashes.</para>
+ <para>—You can also start a new paragraph with an em dash, if you want to.</para>
+ <see-also>
+ <link raw="methodWithEnDashInItsDocs" href="testqdoc-test.html#methodWithEnDashInItsDocs" type="function">methodWithEnDashInItsDocs</link>
+ </see-also>
+ </description>
+ </function>
+ <function name="methodWithEnDashInItsDocs" fullname="TestQDoc::Test::methodWithEnDashInItsDocs" href="testqdoc-test.html#methodWithEnDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEnDashInItsDocs()">
+ <description>
+ <para>This method has en dashes in its documentation – as you'll find represented by <teletype type="highlighted">--</teletype> in the sources – here and there. The important bit to note is that when passed e.g. to the \c command, the two hyphens are processed as input to the command and not replaced by an en dash. This also applies to code blocks, where otherwise, the decrement operator would get completely borked:</para>
+ <code>for (int i = 42; i &gt; 0; --i)
+ // Do something cool during countdown.</code>
+ <para>...as it would be silly if this would output –i instead of <teletype type="highlighted">--i</teletype>.</para>
+ <para>-----------------------------------------------------------------------</para>
+ <para>It still allows people to add a bunch of dashes, though, without replacing them all with a series of en dashes. Of course, they might want to use the \hr command instead, like this:</para>
+ <para>– You can also start a new paragraph with an en dash, if you want to.</para>
+ <see-also>methodWithEnDashInItsDocs</see-also>
+ </description>
+ </function>
+ <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()">
+ <description>
+ <para>Use <link raw="someFunction()" href="testqdoc-test.html#someFunction" type="function">someFunction()</link> instead.</para>
+ </description>
+ </function>
+ <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++()">
+ <description/>
+ </function>
+ <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=""/>
+ <description>
+ <para>Returns true if <argument>lhs</argument> and <argument>rhs</argument> are equal.</para>
+ </description>
+ </function>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload" status="active" access="protected" location="testcpp.h" documented="true" meta="plain" type="void" signature="void overload()">
+ <description/>
+ </function>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload-1" status="active" access="protected" location="testcpp.h" documented="true" since="Test 1.2" meta="plain" overload="true" overload-number="1" type="void" signature="void overload(bool b)">
+ <parameter type="bool" name="b" default=""/>
+ <description/>
+ </function>
+ <function name="someFunction" fullname="TestQDoc::Test::someFunction" href="testqdoc-test.html#someFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="int" signature="int someFunction(int, int v)">
+ <parameter type="int" name="" default=""/>
+ <parameter type="int" name="v" default="0"/>
+ <description>
+ <para>Function that takes a parameter <argument>v</argument>. Also returns the value of <argument>v</argument>.</para>
+ </description>
+ </function>
+ <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" threadsafety="non-reentrant" status="active" access="public" location="testcpp.h" documented="true" meta="plain" const="true" type="void" signature="void someFunctionDefaultArg(int i, bool b) const" groups="testgroup">
+ <parameter type="int" name="i" default=""/>
+ <parameter type="bool" name="b" default="false"/>
+ <description>
+ <para>Function that takes a parameter <argument>i</argument> and <argument>b</argument>.</para>
+ </description>
+ </function>
+ <function name="virtualFun" fullname="TestQDoc::Test::virtualFun" href="testqdoc-test.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" type="void" signature="void virtualFun()">
+ <description>
+ <para>Function that must be reimplemented.</para>
+ </description>
+ </function>
+ <enum name="ClassicEnum" fullname="TestQDoc::Test::ClassicEnum" href="testqdoc-test.html#ClassicEnum-enum" status="active" access="public" location="testcpp.h" documented="true">
+ <value name="Yee" value="0"/>
+ <value name="Haw" value="1"/>
+ <value name="Howdy" value="2"/>
+ <value name="Partner" value="3"/>
+ <description>
+ <list type="enum">
+ <definition>
+ <term>TestQDoc::Test::Yee</term>Yee</definition>
+ <item/>
+ <definition>
+ <term>TestQDoc::Test::Haw</term>Haw</definition>
+ <item/>
+ <definition>
+ <term>TestQDoc::Test::Howdy</term>Howdy</definition>
+ <item/>
+ <definition>
+ <term>TestQDoc::Test::Partner</term>Partner</definition>
+ <item/>
+ </list>
+ </description>
+ </enum>
+ <enum name="ScopedEnum" fullname="TestQDoc::Test::ScopedEnum" href="testqdoc-test.html#ScopedEnum-enum" status="active" access="public" location="testcpp.h" documented="true" scoped="true">
+ <value name="This" value="0x01"/>
+ <value name="That" value="0x02"/>
+ <value name="All" value="This | That" since="2.0"/>
+ <value name="OmittedValue" value="99"/>
+ <value name="UselessValue" value="100"/>
+ <value name="VeryLastValue" value="101"/>
+ <description>
+ <brief>This enum has a brief to trigger a bug in CMD_BRIEF.</brief>
+ <list type="enum">
+ <definition>
+ <term>TestQDoc::Test::ScopedEnum::This</term>This</definition>
+ <item>
+ <para>Something</para>
+ </item>
+ <definition>
+ <term>TestQDoc::Test::ScopedEnum::That</term>That</definition>
+ <item>
+ <para>Something else</para>
+ </item>
+ <definition>
+ <term>TestQDoc::Test::ScopedEnum::All</term>All</definition>2.0<item>
+ <para>Everything</para>
+ </item>
+ </list>
+ <para>A scoped enum.</para>
+ </description>
+ </enum>
+ <typedef name="SomeType" fullname="TestQDoc::Test::SomeType" href="testqdoc-test.html#SomeType-typedef" status="active" access="public" location="testcpp.h" documented="true">
+ <description>
+ <brief>A typedef.</brief>
+ </description>
+ </typedef>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testqdoc-testderived.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testqdoc-testderived.webxml
new file mode 100644
index 000000000..3752e9950
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testqdoc-testderived.webxml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="TestDerived" fullname="TestQDoc::TestDerived" href="testqdoc-testderived.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" bases="TestQDoc::Test" module="TestCPP" brief="A class in a namespace, derived from Test">
+ <description>
+ <brief>A class in a namespace, derived from <link raw="Test" href="testqdoc-test.html" type="class">Test</link>.</brief>
+ </description>
+ <function name="someValue" fullname="TestQDoc::TestDerived::someValue" href="testqdoc-testderived.html#someValue" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::TestDerived::NotTypedef" signature="TestQDoc::TestDerived::NotTypedef someValue()">
+ <description>
+ <para>Returns a value using an aliases type.</para>
+ </description>
+ </function>
+ <function name="staticObsoleteMember" fullname="TestQDoc::TestDerived::staticObsoleteMember" href="testqdoc-testderived-obsolete.html#staticObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" static="true" type="void" signature="void staticObsoleteMember()">
+ <description>
+ <para>Static obsolete method.</para>
+ </description>
+ </function>
+ <function name="virtualFun" fullname="TestQDoc::TestDerived::virtualFun" href="testqdoc-testderived.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" override="true" type="void" signature="void virtualFun() override">
+ <description/>
+ </function>
+ <typedef name="DerivedType" fullname="TestQDoc::TestDerived::DerivedType" href="testqdoc-testderived.html#DerivedType-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="Test::SomeType">
+ <description>
+ <para>An aliased typedef.</para>
+ </description>
+ </typedef>
+ <typedef name="NotTypedef" fullname="TestQDoc::TestDerived::NotTypedef" href="testqdoc-testderived.html#NotTypedef-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="int">
+ <description>
+ <para>I'm an alias, not a typedef.</para>
+ </description>
+ </typedef>
+ </class>
+ </document>
+</WebXML>
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
new file mode 100644
index 000000000..70c91ac18
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testqdoc.webxml
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <namespace name="TestQDoc" href="testqdoc.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="A namespace">
+ <contents name="usage" title="Usage" level="1"/>
+ <description>
+ <brief>A namespace.</brief>
+ <section id="usage">
+ <heading level="1">Usage</heading>
+ <para>This namespace is for testing QDoc output.</para>
+ </section>
+ </description>
+ <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="0" meta="macrowithoutparams" signature="QDOCTEST_MACRO">
+ <description/>
+ </function>
+ <class threadsafety="reentrant" name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" groups="cpptypes,testgroup" module="TestCPP" brief="A class in a namespace">
+ <description>
+ <brief>A class in a namespace.</brief>
+ </description>
+ <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=""/>
+ <description>
+ <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>
+ </description>
+ </function>
+ <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()">
+ <description>
+ <para>Use <link raw="someFunction()" href="testqdoc-test.html#someFunction" type="function">someFunction()</link> instead.</para>
+ </description>
+ </function>
+ <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)">
+ <parameter type="bool" name="b" default=""/>
+ <parameter type="const char *" name="s" default=""/>
+ <description>
+ <para>Returns a pointer to a function that takes a boolean. Uses <argument>b</argument> and <argument>s</argument>.</para>
+ </description>
+ </function>
+ <function name="inlineFunction" fullname="TestQDoc::Test::inlineFunction" href="testqdoc-test.html#inlineFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" brief="An inline function, documented using the \fn QDoc command" signature="void inlineFunction()">
+ <description>
+ <brief>An inline function, documented using the \fn QDoc command.</brief>
+ </description>
+ </function>
+ <function name="methodWithEmDashInItsDocs" fullname="TestQDoc::Test::methodWithEmDashInItsDocs" href="testqdoc-test.html#methodWithEmDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEmDashInItsDocs()">
+ <description>
+ <para>This method has em dashes in its documentation—as you'll find represented by <teletype type="highlighted">---</teletype> in the sources—here and there. The important bit to note is that when passed e.g. to the \c command, the three hyphens are processed as input to the command and not replaced by an em dash.</para>
+ <para>-----------------------------------------------------------------------</para>
+ <para>People can still add a bunch of dashes, though, without QDoc replacing them all with a series of em dashes.</para>
+ <para>—You can also start a new paragraph with an em dash, if you want to.</para>
+ <see-also>
+ <link raw="methodWithEnDashInItsDocs" href="testqdoc-test.html#methodWithEnDashInItsDocs" type="function">methodWithEnDashInItsDocs</link>
+ </see-also>
+ </description>
+ </function>
+ <function name="methodWithEnDashInItsDocs" fullname="TestQDoc::Test::methodWithEnDashInItsDocs" href="testqdoc-test.html#methodWithEnDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEnDashInItsDocs()">
+ <description>
+ <para>This method has en dashes in its documentation – as you'll find represented by <teletype type="highlighted">--</teletype> in the sources – here and there. The important bit to note is that when passed e.g. to the \c command, the two hyphens are processed as input to the command and not replaced by an en dash. This also applies to code blocks, where otherwise, the decrement operator would get completely borked:</para>
+ <code>for (int i = 42; i &gt; 0; --i)
+ // Do something cool during countdown.</code>
+ <para>...as it would be silly if this would output –i instead of <teletype type="highlighted">--i</teletype>.</para>
+ <para>-----------------------------------------------------------------------</para>
+ <para>It still allows people to add a bunch of dashes, though, without replacing them all with a series of en dashes. Of course, they might want to use the \hr command instead, like this:</para>
+ <para>– You can also start a new paragraph with an en dash, if you want to.</para>
+ <see-also>methodWithEnDashInItsDocs</see-also>
+ </description>
+ </function>
+ <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()">
+ <description>
+ <para>Use <link raw="someFunction()" href="testqdoc-test.html#someFunction" type="function">someFunction()</link> instead.</para>
+ </description>
+ </function>
+ <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++()">
+ <description/>
+ </function>
+ <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=""/>
+ <description>
+ <para>Returns true if <argument>lhs</argument> and <argument>rhs</argument> are equal.</para>
+ </description>
+ </function>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload" status="active" access="protected" location="testcpp.h" documented="true" meta="plain" type="void" signature="void overload()">
+ <description/>
+ </function>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload-1" status="active" access="protected" location="testcpp.h" documented="true" since="Test 1.2" meta="plain" overload="true" overload-number="1" type="void" signature="void overload(bool b)">
+ <parameter type="bool" name="b" default=""/>
+ <description/>
+ </function>
+ <function name="someFunction" fullname="TestQDoc::Test::someFunction" href="testqdoc-test.html#someFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="int" signature="int someFunction(int, int v)">
+ <parameter type="int" name="" default=""/>
+ <parameter type="int" name="v" default="0"/>
+ <description>
+ <para>Function that takes a parameter <argument>v</argument>. Also returns the value of <argument>v</argument>.</para>
+ </description>
+ </function>
+ <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" threadsafety="non-reentrant" status="active" access="public" location="testcpp.h" documented="true" meta="plain" const="true" type="void" signature="void someFunctionDefaultArg(int i, bool b) const" groups="testgroup">
+ <parameter type="int" name="i" default=""/>
+ <parameter type="bool" name="b" default="false"/>
+ <description>
+ <para>Function that takes a parameter <argument>i</argument> and <argument>b</argument>.</para>
+ </description>
+ </function>
+ <function name="virtualFun" fullname="TestQDoc::Test::virtualFun" href="testqdoc-test.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" type="void" signature="void virtualFun()">
+ <description>
+ <para>Function that must be reimplemented.</para>
+ </description>
+ </function>
+ <enum name="ClassicEnum" fullname="TestQDoc::Test::ClassicEnum" href="testqdoc-test.html#ClassicEnum-enum" status="active" access="public" location="testcpp.h" documented="true">
+ <value name="Yee" value="0"/>
+ <value name="Haw" value="1"/>
+ <value name="Howdy" value="2"/>
+ <value name="Partner" value="3"/>
+ <description>
+ <list type="enum">
+ <definition>
+ <term>TestQDoc::Test::Yee</term>Yee</definition>
+ <item/>
+ <definition>
+ <term>TestQDoc::Test::Haw</term>Haw</definition>
+ <item/>
+ <definition>
+ <term>TestQDoc::Test::Howdy</term>Howdy</definition>
+ <item/>
+ <definition>
+ <term>TestQDoc::Test::Partner</term>Partner</definition>
+ <item/>
+ </list>
+ </description>
+ </enum>
+ <enum name="ScopedEnum" fullname="TestQDoc::Test::ScopedEnum" href="testqdoc-test.html#ScopedEnum-enum" status="active" access="public" location="testcpp.h" documented="true" scoped="true">
+ <value name="This" value="0x01"/>
+ <value name="That" value="0x02"/>
+ <value name="All" value="This | That" since="2.0"/>
+ <value name="OmittedValue" value="99"/>
+ <value name="UselessValue" value="100"/>
+ <value name="VeryLastValue" value="101"/>
+ <description>
+ <brief>This enum has a brief to trigger a bug in CMD_BRIEF.</brief>
+ <list type="enum">
+ <definition>
+ <term>TestQDoc::Test::ScopedEnum::This</term>This</definition>
+ <item>
+ <para>Something</para>
+ </item>
+ <definition>
+ <term>TestQDoc::Test::ScopedEnum::That</term>That</definition>
+ <item>
+ <para>Something else</para>
+ </item>
+ <definition>
+ <term>TestQDoc::Test::ScopedEnum::All</term>All</definition>2.0<item>
+ <para>Everything</para>
+ </item>
+ </list>
+ <para>A scoped enum.</para>
+ </description>
+ </enum>
+ <typedef name="SomeType" fullname="TestQDoc::Test::SomeType" href="testqdoc-test.html#SomeType-typedef" status="active" access="public" location="testcpp.h" documented="true">
+ <description>
+ <brief>A typedef.</brief>
+ </description>
+ </typedef>
+ </class>
+ <class name="TestDerived" fullname="TestQDoc::TestDerived" href="testqdoc-testderived.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" bases="TestQDoc::Test" module="TestCPP" brief="A class in a namespace, derived from Test">
+ <description>
+ <brief>A class in a namespace, derived from <link raw="Test" href="testqdoc-test.html" type="class">Test</link>.</brief>
+ </description>
+ <function name="someValue" fullname="TestQDoc::TestDerived::someValue" href="testqdoc-testderived.html#someValue" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::TestDerived::NotTypedef" signature="TestQDoc::TestDerived::NotTypedef someValue()">
+ <description>
+ <para>Returns a value using an aliases type.</para>
+ </description>
+ </function>
+ <function name="staticObsoleteMember" fullname="TestQDoc::TestDerived::staticObsoleteMember" href="testqdoc-testderived-obsolete.html#staticObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" static="true" type="void" signature="void staticObsoleteMember()">
+ <description>
+ <para>Static obsolete method.</para>
+ </description>
+ </function>
+ <function name="virtualFun" fullname="TestQDoc::TestDerived::virtualFun" href="testqdoc-testderived.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" override="true" type="void" signature="void virtualFun() override">
+ <description/>
+ </function>
+ <typedef name="DerivedType" fullname="TestQDoc::TestDerived::DerivedType" href="testqdoc-testderived.html#DerivedType-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="Test::SomeType">
+ <description>
+ <para>An aliased typedef.</para>
+ </description>
+ </typedef>
+ <typedef name="NotTypedef" fullname="TestQDoc::TestDerived::NotTypedef" href="testqdoc-testderived.html#NotTypedef-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="int">
+ <description>
+ <para>I'm an alias, not a typedef.</para>
+ </description>
+ </typedef>
+ </class>
+ </namespace>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/whatsnew.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/whatsnew.webxml
new file mode 100644
index 000000000..99a8c473e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/whatsnew.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="whatsnew.html" href="whatsnew.html" status="active" location="scopedenum.qdoc" documented="true" subtype="page" title="New Classes and Functions" fulltitle="New Classes and Functions" subtitle="" brief="New classes documentation">
+ <description>
+ <brief>New classes documentation</brief>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/scopedenum.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/scopedenum.qdocconf
new file mode 100644
index 000000000..f20a92472
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/scopedenum.qdocconf
@@ -0,0 +1,37 @@
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ./src/images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+project = TestCPP
+includepaths += -I./src
+
+headerdirs = ./src
+sources = ./src/testcpp.cpp \
+ ./src/classlists.qdoc \
+ ./src/scopedenum.qdoc
+exampledirs = snippets
+
+macro.CMDFN = \\\\fn
+macro.nothing = \\dontdocument ()
+macro.testnoautolist = \\if defined(test_noautolist)\n\\noautolist\n\\endif
+
+navigation.cppclassespage = "QDoc Test C++ Classes"
+
+defines += test_scopedenum
+
+outputformats = HTML WebXML DocBook
+
+{HTML.nosubdirs,DocBook.nosubdirs} = true
+HTML.outputsubdir = html
+WebXML.nosubdirs = true
+WebXML.outputsubdir = webxml
+DocBook.outputsubdir = docbook
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/classlists.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/classlists.qdoc
new file mode 100644
index 000000000..2954e5beb
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/classlists.qdoc
@@ -0,0 +1,51 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+/*!
+ \page obsolete-classes.html
+ \title Obsolete Classes
+
+ \section1 Classes with obsolete members
+ \generatelist obsoletecppmembers
+
+ \section2 TestQDoc
+*/
+
+/*!
+ \page autolinking.html
+ \title Autolinking
+
+ //! a section title that qualifies for autolinking
+ \section1 TestQDoc
+
+ The string TestQDoc links to the C++ namespace unless linking explicitly,
+ \l {#TestQDoc}{like this}, or \l {TestQDoc}{this}. Also,
+
+ Autolinks:
+
+ \list
+ \li TestQDoc::TestDerived
+ \endlist
+
+ Explicit links:
+
+ \list
+ \li \l [CPP] {TestQDoc::TestDerived}
+ \li \l {Obsolete Classes#TestQDoc}
+ \endlist
+
+ //! a section title shadowing a known property name
+ \section1 someProp
+*/
+
+/*!
+ \group cpptypes
+ \title Test C++ Types
+
+ \generatelist testgroup
+*/
+
+/*!
+ \externalpage https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command
+ \title reentrant
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/scopedenum.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/scopedenum.qdoc
new file mode 100644
index 000000000..22ef9e3f3
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/scopedenum.qdoc
@@ -0,0 +1,43 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \enum TestQDoc::Test::ClassicEnum
+
+ \value Yee
+ \value Haw
+ \value Howdy
+ \value Partner
+*/
+
+/*!
+ \enum TestQDoc::Test::ScopedEnum
+ \brief This enum has a brief to trigger a bug in CMD_BRIEF.
+ \omitvalue UselessValue
+ \value This Something
+ \value That Something else
+ \omitvalue OmittedValue \omit Unused -
+ This decription is omitted \endomit
+ \value [since 2.0] All Everything
+ \omitvalue VeryLastValue
+ Nothing here
+
+ A scoped enum.
+*/
+
+/*!
+ \page scoped-enum-linking.html
+ \title Enum Linking
+
+ Linking to \l {TestQDoc::Test::ScopedEnum::}{All}.
+
+ TestQDoc::Test::ClassicEnum::Howdy does not link,
+ but TestQDoc::Test::Howdy might.
+*/
+
+/*!
+ \page whatsnew.html
+ \title New Classes and Functions
+ \brief New classes documentation
+ \sincelist 2.0
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/snippets/snippet_testcpp.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/snippets/snippet_testcpp.cpp
new file mode 100644
index 000000000..1660fbc2b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/snippets/snippet_testcpp.cpp
@@ -0,0 +1,3 @@
+//! [random tag]
+You're not supposed to see this.
+//! [random tag]
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/testcpp.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/testcpp.cpp
new file mode 100644
index 000000000..d31167efb
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/testcpp.cpp
@@ -0,0 +1,418 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#include "testcpp.h"
+
+namespace TestQDoc {
+
+/*
+//! [random tag]
+\note This is just a test.
+//! [random tag]
+
+//! [args]
+\1\2 \3 \2\1
+//! [args]
+*/
+
+/*!
+ \module TestCPP
+ \qtvariable testcpp
+ \qtcmakepackage QDocTest
+ \title QDoc Test C++ Classes
+ \brief A test module page.
+ \since 2.0
+
+ \testnoautolist
+
+ \include testcpp.cpp random tag
+ \include testcpp.cpp {args} {/} {*} {Look, Ma! {I'm made of arguments!}}
+
+\if defined(test_nestedmacro)
+ \versionnote {module} {\ver 5.15.0}
+ \ver 1.0.0
+\endif
+
+ \section1 Linking to function-like things
+
+ \list
+ \li \l {TestQDoc::Test::someFunctionDefaultArg}
+ {someFunctionDefaultArg()}
+ \li QDOCTEST_MACRO2()
+ \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()
+*/
+
+/*!
+ \namespace TestQDoc
+ \inheaderfile TestCPP
+ \inmodule TestCPP
+ \brief A namespace.
+
+ \section1 Usage
+ This namespace is for testing QDoc output.
+*/
+
+/*!
+ \class TestQDoc::Test
+ \inmodule TestCPP
+ \brief A class in a namespace.
+
+\if defined(test_ignoresince)
+ //! omitted by ignoresince
+ \since 1.1
+\endif
+ \ingroup testgroup
+ \ingroup cpptypes
+ \reentrant
+*/
+
+/*!
+ \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.
+*/
+
+/*!
+ \macro QDOCTEST_MACRO
+ \relates TestQDoc
+\if defined(test_ignoresince)
+ //! omitted by ignoresince.Test
+ \since Test 0.9
+\endif
+*/
+
+/*!
+ \macro QDOCTEST_MACRO2(int &x)
+ \relates TestQDoc::Test
+ \since Test 1.1
+ \brief A macro with argument \a x.
+ \ingroup testgroup
+*/
+
+/*!
+\if defined(test_properties)
+ \property Test::id
+\else
+ \nothing
+\endif
+*/
+
+/*!
+ \deprecated [6.0] Use someFunction() instead.
+*/
+void Test::deprecatedMember()
+{
+ return;
+}
+
+/*!
+ \obsolete
+
+ Use someFunction() instead.
+*/
+void Test::obsoleteMember()
+{
+ return;
+}
+
+/*!
+ \obsolete Use obsoleteMember() instead.
+*/
+void Test::anotherObsoleteMember()
+{
+ return;
+}
+
+/*!
+ \nonreentrant
+ Function that takes a parameter \a i and \a b.
+\if defined(test_ignoresince)
+ \since 2.0
+\endif
+ \ingroup testgroup
+*/
+void Test::someFunctionDefaultArg(int i, bool b = false) const
+{
+ return;
+}
+
+/*!
+ \fn void Test::func(bool)
+ \internal
+*/
+
+/*!
+ \fn [funcPtr] void (*funcPtr(bool b, const char *s))(bool)
+
+ Returns a pointer to a function that takes a boolean. Uses \a b and \a s.
+*/
+
+/*!
+ \fn [op-inc] Test::operator++()
+ \fn [op-dec] Test::operator--()
+ \deprecated
+*/
+
+/*!
+ This method has en dashes in its documentation -- as you'll find
+ represented by \c{--} in the sources -- here and there. The important bit
+ to note is that when passed e.g. to the \\c command, the two hyphens are
+ processed as input to the command and not replaced by an en dash. This also
+ applies to code blocks, where otherwise, the decrement operator would get
+ completely borked:
+
+ \code
+ for (int i = 42; i > 0; --i)
+ // Do something cool during countdown.
+ \endcode
+
+ ...as it would be silly if this would output --i instead of \c {--i}.
+
+ -----------------------------------------------------------------------
+
+ It still allows people to add a bunch of dashes, though, without replacing
+ them all with a series of en dashes. Of course, they might want to use the
+ \\hr command instead, like this:
+ \hr
+
+ -- You can also start a new paragraph with an en dash, if you want to.
+
+ //! Self-referencing \sa-command for tests.
+ \sa methodWithEnDashInItsDocs
+*/
+void Test::methodWithEnDashInItsDocs()
+{
+ // Nothing to see here.
+}
+
+/*!
+ This method has em dashes in its documentation---as you'll find
+ represented by \c{---} in the sources---here and there. The important bit
+ to note is that when passed e.g. to the \\c command, the three hyphens are
+ processed as input to the command and not replaced by an em dash.
+
+ -----------------------------------------------------------------------
+
+ People can still add a bunch of dashes, though, without QDoc replacing
+ them all with a series of em dashes.
+
+ ---You can also start a new paragraph with an em dash, if you want to.
+
+ \sa methodWithEnDashInItsDocs
+
+*/
+void Test::methodWithEmDashInItsDocs()
+{
+ // Woah! Look at that!
+}
+
+// Documented below with an \fn command. Unnecessary but we support it, and it's used.
+int Test::someFunction(int, int v)
+{
+ return v;
+}
+
+/*!
+ \fn void TestQDoc::Test::inlineFunction()
+
+ \brief An inline function, documented using the \CMDFN QDoc command.
+*/
+
+/*!
+ \fn int Test::someFunction(int, int v = 0)
+
+ Function that takes a parameter \a v.
+ Also returns the value of \a v.
+\if defined(test_ignoresince)
+ \since Test 1.0
+\endif
+*/
+
+/*!
+ Function that must be reimplemented.
+*/
+void Test::virtualFun()
+{
+ return;
+}
+
+/*!
+ \fn bool Test::operator==(const Test &lhs, const Test &rhs)
+
+ Returns true if \a lhs and \a rhs are equal.
+*/
+
+/*!
+ \typedef TestQDoc::Test::SomeType
+ \brief A typedef.
+*/
+
+/*!
+ \reimp
+*/
+void TestDerived::virtualFun()
+{
+ return;
+}
+
+/*!
+ \fn TestQDoc::Test::overload()
+ \fn Test::overload(bool b)
+ //! The second overload should match even without the fully qualified path
+
+ Overloads that share a documentation comment, optionally taking
+ a parameter \a b.
+*/
+
+/*!
+ \fn Test::overload(bool b)
+ \since Test 1.2
+*/
+
+/*!
+ \typealias TestQDoc::TestDerived::DerivedType
+ An aliased typedef.
+*/
+
+/*!
+ \typedef TestQDoc::TestDerived::NotTypedef
+ I'm an alias, not a typedef.
+*/
+
+/*!
+ \obsolete
+
+ Static obsolete method.
+*/
+void TestDerived::staticObsoleteMember()
+{
+ return;
+}
+
+/*!
+\if defined(test_properties)
+ \fn void TestDerived::emitSomething()
+ Emitted when things happen.
+\else
+ \nothing
+\endif
+*/
+
+/*!
+\if defined(test_properties)
+ \reimp
+\else
+ \nothing
+\endif
+*/
+int TestDerived::id()
+{
+ return 1;
+}
+
+/*!
+ Returns a value using an aliases type.
+*/
+TestDerived::NotTypedef TestDerived::someValue()
+{
+ return 0;
+}
+
+/*!
+\if defined(test_template)
+ \fn template <typename T1, typename T2> void TestQDoc::Test::funcTemplate(T1 a, T2 b)
+ \brief Function template with two parameters, \a a and \a b.
+\else
+ \nothing
+\endif
+*/
+
+/*!
+\if defined(test_template)
+ \struct TestQDoc::Test::Struct
+ \inmodule TestCPP
+ \brief Templated struct.
+\else
+ \nothing
+\endif
+*/
+
+/*!
+\if defined(test_template)
+ \typealias TestQDoc::Test::Specialized
+\else
+ \nothing
+\endif
+*/
+
+/*!
+\if defined(test_template)
+ \class TestQDoc::Vec
+ \inmodule TestCPP
+ \brief Type alias that has its own reference.
+\else
+ \nothing
+\endif
+*/
+
+/*!
+\if defined(test_template)
+ \macro Q_INVOKABLE
+ \relates TestQDoc::Test
+
+ This is a mock Q_INVOKABLE for the purpose of ensuring QDoc autolink to it
+ as expected.
+\else
+ \nothing
+\endif
+*/
+
+} // namespace TestQDoc
+
+
+/*!
+ \namespace CrossModuleRef
+ \inmodule TestCPP
+ \brief Namespace that has documented functions in multiple modules.
+ \since 3.0
+*/
+namespace CrossModuleRef {
+
+/*!
+ Document me!
+*/
+void documentMe()
+{
+}
+
+} // namespace CrossModuleRef
+
+/*!
+ \class DontLinkToMe
+ \inmodule TestCPP
+ \brief Class that does not generate documentation.
+*/
+
+/*!
+ \dontdocument (DontLinkToMe)
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/testcpp.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/testcpp.h
new file mode 100644
index 000000000..06126494a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/testcpp.h
@@ -0,0 +1,137 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#pragma once
+
+#ifdef test_properties
+#include <QtCore/qmetaobject.h>
+#include <QtCore/qproperty.h>
+#include <QtCore/qstring.h>
+#endif
+
+#define QDOCTEST_MACRO test
+#define QDOCTEST_MACRO2(x) (x) < 0 ? 0 : (x))
+
+namespace TestQDoc {
+
+class Test {
+#ifdef test_properties
+ Q_OBJECT
+ Q_PROPERTY(int id READ id)
+#endif
+public:
+
+#ifdef test_template
+template<typename D, typename T> struct Struct {};
+template<typename T>
+using Specialized = Struct<int, T>;
+#endif
+
+#ifdef test_template
+# define Q_INVOKABLE void foo() {};
+#endif
+
+#ifdef test_scopedenum
+ enum ClassicEnum { Yee, Haw, Howdy, Partner };
+
+ enum class ScopedEnum : unsigned char {
+ This = 0x01,
+ That = 0x02,
+ All = This | That,
+ OmittedValue = 99,
+ UselessValue,
+ VeryLastValue
+ };
+#endif
+ typedef struct {
+ int data;
+ } SomeType;
+ int someFunction(int, int v = 0);
+ void someFunctionDefaultArg(int i, bool b) const;
+ void obsoleteMember();
+ void anotherObsoleteMember();
+ void deprecatedMember();
+ void methodWithEnDashInItsDocs();
+ void methodWithEmDashInItsDocs();
+ void func(bool) {};
+ //! [funcPtr]
+ void (*funcPtr(bool b, const char *s))(bool) {
+ return func;
+ }
+ //! [op-inc]
+ Test &operator++() { return *this; }
+ //! [op-dec]
+ Test &operator--() { return *this; }
+
+ void anotherFunc() {};
+ inline void inlineFunction() {};
+ virtual void virtualFun();
+
+ friend bool operator==(const Test &lhs, const Test &rhs) { return false; }
+
+protected:
+ void overload() {}
+ void overload(bool b) { if (!b) return; }
+#ifdef test_template
+ template <typename T1, typename T2> void funcTemplate(T1 a, T2 b) {
+ a = b;
+ }
+#endif
+#ifdef test_properties
+ virtual int id() { return 0; }
+#endif
+};
+
+class TestDerived : public Test {
+#ifdef test_properties
+ Q_OBJECT
+
+ Q_PROPERTY(QString bindableProp READ bindableProp WRITE setBindableProp NOTIFY bindablePropChanged BINDABLE bindableProp)
+ Q_PROPERTY(QString someProp READ someProp BINDABLE somBindableProp)
+ Q_PROPERTY(int *intProp READ getInt STORED false CONSTANT FINAL)
+ Q_PROPERTY(const QString *name READ name)
+ QDOC_PROPERTY(bool boolProp READ boolProp WRITE setBoolProp NOTIFY boolPropChanged RESET resetBoolProp REVISION 1)
+#endif
+
+public:
+ using DerivedType = Test::SomeType;
+ using NotTypedef = int;
+ void virtualFun() override;
+ static void staticObsoleteMember();
+ NotTypedef someValue();
+#ifdef test_properties
+ QBindable<QString> bindableProp();
+ QBindable<QString> someBindableProp();
+ const QString &someProp();
+ int *getInt();
+ bool boolProp();
+ const QString *name() const;
+
+ Q_INVOKABLE void invokeMe() const {}
+ int id() override;
+
+Q_SIGNALS:
+ void emitSomething(QPrivateSignal);
+ void bindablePropChanged();
+ Q_REVISION(1) void boolPropChanged();
+
+public Q_SLOTS:
+ void setBindableProp(const QString &s);
+ void setBoolProp(bool b);
+ void resetBoolProp();
+#endif
+};
+
+#ifdef test_template
+template <typename T>
+struct BaseVec {};
+template <typename T>
+using Vec = BaseVec<T>;
+#endif
+
+} // namespace TestQDoc
+
+namespace CrossModuleRef {
+ void documentMe();
+}
+
+class DontLinkToMe {};
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/docbok/tableaftervalue.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/docbok/tableaftervalue.xml
new file mode 100644
index 000000000..99b8fe13a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/docbok/tableaftervalue.xml
@@ -0,0 +1,60 @@
+<?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>TableAfterValue Class</db:title>
+<db:productname>TableAfterValue</db:productname>
+<db:titleabbrev>TableAfterValue Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>Test that the \table command can follow a \value command.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>TableAfterValue</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:section xml:id="background-for-this-test-content">
+<db:title>Background for this test content</db:title>
+<db:para>According to QTBUG-115720, whenever a \value is followed by \table, the contents of the two commands end up being merged. This is likely surprising. The bug report suggests a workaround, which is adding \br between \value and \table.</db:para>
+</db:section>
+<db:section>
+<db:title>See Also</db:title>
+<db:para><db:emphasis>See also </db:emphasis>
+<db:simplelist type="vert" role="see-also">
+<db:member><db:link xlink:href="tableaftervalue.xml#Reproduces-enum">TableAfterValue::Reproduces</db:link></db:member>
+</db:simplelist>
+</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="member-type-documentation">
+<db:title>Member Type Documentation</db:title>
+<db:section xml:id="Reproduces-enum">
+<db:title>enum TableAfterValue::Reproduces</db:title>
+<db:informaltable>
+<db:thead>
+<db:tr>
+<db:th>Constant</db:th>
+</db:tr>
+</db:thead>
+<db:tr>
+<db:td>
+<db:para><db:code><db:emphasis role="bold"><db:link xlink:href="tableaftervalue.xml">TableAfterValue</db:link></db:emphasis>::Problem</db:code></db:para>
+</db:td>
+<db:td><db:code>0</db:code></db:td>
+</db:tr>
+</db:informaltable>
+<db:informaltable style="generic">
+<db:tr valign="top">
+<db:td>
+<db:para>This table shouldn't be mangled by the previous \value command.</db:para>
+</db:td>
+</db:tr>
+</db:informaltable>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/html/tableaftervalue-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/html/tableaftervalue-members.html
new file mode 100644
index 000000000..328848c33
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/html/tableaftervalue-members.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- table-after-value.cpp -->
+ <meta name="description" content="Test that the \table command can follow a \value command.">
+ <title>List of All Members for TableAfterValue | TableAfterValue</title>
+</head>
+<body>
+<li>TableAfterValue</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for TableAfterValue</h1>
+<p>This is the complete list of members for <a href="tableaftervalue.html">TableAfterValue</a>, including inherited members.</p>
+<ul>
+<li class="fn" translate="no">enum <span class="name"><b><a href="tableaftervalue.html#Reproduces-enum" translate="no">Reproduces</a></b></span></li>
+</ul>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/html/tableaftervalue.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/html/tableaftervalue.html
new file mode 100644
index 000000000..d27d77ef6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/html/tableaftervalue.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- table-after-value.cpp -->
+ <meta name="description" content="Test that the \table command can follow a \value command.">
+ <title>TableAfterValue Class | TableAfterValue</title>
+</head>
+<body>
+<li>TableAfterValue</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#public-types">Public Types</a></li>
+<li class="level1"><a href="#details">Detailed Description</a></li>
+<li class="level2"><a href="#background-for-this-test-content">Background for this test content</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">TableAfterValue Class</h1>
+<!-- $$$TableAfterValue-brief -->
+<p>Test that the \table command can follow a \value command. <a href="#details">More...</a></p>
+<!-- @@@TableAfterValue -->
+<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;TableAfterValue&gt;</span></td></tr>
+</table></div>
+<ul>
+<li><a href="tableaftervalue-members.html">List of all members, including inherited members</a></li>
+</ul>
+<h2 id="public-types">Public Types</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> enum </td><td class="memItemRight bottomAlign"><b><a href="tableaftervalue.html#Reproduces-enum" translate="no">Reproduces</a></b> { Problem }</td></tr>
+</table></div>
+<!-- $$$TableAfterValue-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<h3 id="background-for-this-test-content">Background for this test content</h3>
+<p>According to QTBUG-115720, whenever a \value is followed by \table, the contents of the two commands end up being merged. This is likely surprising. The bug report suggests a workaround, which is adding \br between \value and \table.</p>
+</div>
+<p><b>See also </b><a href="tableaftervalue.html#Reproduces-enum" translate="no">TableAfterValue::Reproduces</a>.</p>
+<!-- @@@TableAfterValue -->
+<div class="types">
+<h2>Member Type Documentation</h2>
+<!-- $$$Reproduces$$$Problem -->
+<h3 class="fn" translate="no" id="Reproduces-enum">enum TableAfterValue::<span class="name">Reproduces</span></h3>
+<div class="table"><table class="valuelist"><tr><th class="tblConst">Constant</th><th class="tblVal">Value</th></tr>
+<tr><td class="topAlign"><code translate="no">TableAfterValue::Problem</code></td><td class="topAlign tblval"><code translate="no">0</code></td></tr>
+</table></div>
+<div class="table"><table class="generic">
+ <tr valign="top" class="odd"><td >This table shouldn't be mangled by the previous \value command.</td></tr>
+</table></div>
+<!-- @@@Reproduces -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/html/tableaftervalue.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/html/tableaftervalue.index
new file mode 100644
index 000000000..4f3164508
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/html/tableaftervalue.index
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="TableAfterValue Reference Documentation" version="" project="TableAfterValue">
+ <namespace name="" status="active" access="public" module="tableaftervalue">
+ <class name="TableAfterValue" href="tableaftervalue.html" status="active" access="public" location="table-after-value.h" documented="true" module="Test" brief="Test that the \table command can follow a \value command">
+ <contents name="background-for-this-test-content" title="Background for this test content" level="1"/>
+ <enum name="Reproduces" fullname="TableAfterValue::Reproduces" href="tableaftervalue.html#Reproduces-enum" status="active" access="public" location="table-after-value.h" documented="true">
+ <value name="Problem" value="0"/>
+ </enum>
+ </class>
+ <module name="Test" href="test-module.html" status="internal" seen="false" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/webxml/tableaftervalue.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/webxml/tableaftervalue.index
new file mode 100644
index 000000000..4f3164508
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/webxml/tableaftervalue.index
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="TableAfterValue Reference Documentation" version="" project="TableAfterValue">
+ <namespace name="" status="active" access="public" module="tableaftervalue">
+ <class name="TableAfterValue" href="tableaftervalue.html" status="active" access="public" location="table-after-value.h" documented="true" module="Test" brief="Test that the \table command can follow a \value command">
+ <contents name="background-for-this-test-content" title="Background for this test content" level="1"/>
+ <enum name="Reproduces" fullname="TableAfterValue::Reproduces" href="tableaftervalue.html#Reproduces-enum" status="active" access="public" location="table-after-value.h" documented="true">
+ <value name="Problem" value="0"/>
+ </enum>
+ </class>
+ <module name="Test" href="test-module.html" status="internal" seen="false" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/webxml/tableaftervalue.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/webxml/tableaftervalue.webxml
new file mode 100644
index 000000000..9f7f5e3bb
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/expected/webxml/tableaftervalue.webxml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="TableAfterValue" href="tableaftervalue.html" status="active" access="public" location="table-after-value.h" documented="true" module="Test" brief="Test that the \table command can follow a \value command">
+ <contents name="background-for-this-test-content" title="Background for this test content" level="1"/>
+ <description>
+ <brief>Test that the \table command can follow a \value command.</brief>
+ <section id="background-for-this-test-content">
+ <heading level="1">Background for this test content</heading>
+ <para>According to QTBUG-115720, whenever a \value is followed by \table, the contents of the two commands end up being merged. This is likely surprising. The bug report suggests a workaround, which is adding \br between \value and \table.</para>
+ </section>
+ <see-also>
+ <link raw="TableAfterValue::Reproduces" href="tableaftervalue.html#Reproduces-enum" type="enum" enum="TableAfterValue::Reproduces">TableAfterValue::Reproduces</link>
+ </see-also>
+ </description>
+ <enum name="Reproduces" fullname="TableAfterValue::Reproduces" href="tableaftervalue.html#Reproduces-enum" status="active" access="public" location="table-after-value.h" documented="true">
+ <value name="Problem" value="0"/>
+ <description>
+ <list type="enum">
+ <definition>
+ <term>TableAfterValue::Problem</term>Problem</definition>
+ <item/>
+ </list>
+ <table>
+ <row>
+ <item>
+ <para>This table shouldn't be mangled by the previous \value command.</para>
+ </item>
+ </row>
+ </table>
+ </description>
+ </enum>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/src/table-after-value.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/src/table-after-value.cpp
new file mode 100644
index 000000000..4ad9932d5
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/src/table-after-value.cpp
@@ -0,0 +1,28 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#include "tableaftervalue.h"
+
+/*!
+ \class TableAfterValue
+ \inmodule Test
+ \brief Test that the \\table command can follow a \\value command.
+
+ \section1 Background for this test content
+ According to QTBUG-115720, whenever a \\value is followed by \\table, the
+ contents of the two commands end up being merged. This is likely surprising.
+ The bug report suggests a workaround, which is adding \\br between \\value
+ and \\table.
+
+ \sa TableAfterValue::Reproduces
+*/
+
+/*!
+ \enum TableAfterValue::Reproduces
+
+ \value Problem
+
+ \table
+ \row
+ \li This table shouldn't be mangled by the previous \\value command.
+ \endtable
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/src/table-after-value.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/src/table-after-value.h
new file mode 100644
index 000000000..466242775
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/src/table-after-value.h
@@ -0,0 +1,8 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+class TableAfterValue
+{
+public:
+ enum Reproduces { Problem };
+};
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/tableaftervalue.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/tableaftervalue.qdocconf
new file mode 100644
index 000000000..fb8daa132
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tableaftervalue/tableaftervalue.qdocconf
@@ -0,0 +1,29 @@
+project = TableAfterValue
+
+headerdirs = ./src
+sourcedirs = ./src
+exampledirs = ./src
+
+outputformats = WebXML HTML DocBook
+WebXML.quotinginformation = true
+WebXML.nosubdirs = true
+WebXML.outputsubdir = webxml
+
+HTML.nosubdirs = true
+HTML.outputsubdir = html
+
+DocBook.nosubdirs = true
+DocBook.outputsubdir = docbok
+
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ./src/images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/docbook/templated-callables-h.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/docbook/templated-callables-h.xml
new file mode 100644
index 000000000..2a7204642
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/docbook/templated-callables-h.xml
@@ -0,0 +1,65 @@
+<?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;templated_callables.h&gt;</db:title>
+<db:productname>templatedcallables</db:productname>
+<db:titleabbrev>templatedcallables Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>templatedcallables Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>templated_callables.h</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:para>Containing headers for the tested free functions.</db:para>
+</db:section>
+<db:section xml:id="function-documentation">
+<db:title>Function Documentation</db:title>
+<db:section xml:id="templated_function_with_defaulted_non_type_template_parameter">
+<db:title>void templated_function_with_defaulted_non_type_template_parameter()</db:title>
+<db:para>A templated function with a defaulted non type template parameter.</db:para>
+</db:section>
+<db:section xml:id="templated_function_with_defaulted_template_template_parameter">
+<db:title>void templated_function_with_defaulted_template_template_parameter(<db:emphasis>Container&lt;T, size&gt;</db:emphasis>)</db:title>
+<db:para>A templated function with a defaulted template template parameter.</db:para>
+</db:section>
+<db:section xml:id="templated_function_with_defaulted_type_template_parameter">
+<db:title>void templated_function_with_defaulted_type_template_parameter(<db:emphasis>T</db:emphasis>)</db:title>
+<db:para>A templated function with a defaulted type template parameter.</db:para>
+</db:section>
+<db:section xml:id="templated_function_with_non_type_template_parameter">
+<db:title>void templated_function_with_non_type_template_parameter()</db:title>
+<db:para>A templated function with a non-defaulted non type template parameter.</db:para>
+</db:section>
+<db:section xml:id="templated_function_with_non_type_template_parameter_pack">
+<db:title>void templated_function_with_non_type_template_parameter_pack()</db:title>
+<db:para>A templated function with a non type template parameter pack.</db:para>
+</db:section>
+<db:section xml:id="templated_function_with_placeholder_non_type_template_parameter">
+<db:title>void templated_function_with_placeholder_non_type_template_parameter()</db:title>
+<db:para>A templated function with a placeholder non type template parameter.</db:para>
+</db:section>
+<db:section xml:id="templated_function_with_template_template_parameter">
+<db:title>void templated_function_with_template_template_parameter(<db:emphasis>K&lt;T&gt;</db:emphasis>)</db:title>
+<db:para>A templated function with a non-defaulted template template parameter.</db:para>
+</db:section>
+<db:section xml:id="templated_function_with_template_template_parameter_pack">
+<db:title>void templated_function_with_template_template_parameter_pack(<db:emphasis>Container&lt;T&gt;...</db:emphasis>)</db:title>
+<db:para>A templated function with a template template parameter pack.</db:para>
+</db:section>
+<db:section xml:id="templated_function_with_type_template_parameter">
+<db:title>void templated_function_with_type_template_parameter(<db:emphasis>T</db:emphasis>)</db:title>
+<db:para>A templated function with a non-defaulted type template parameter.</db:para>
+</db:section>
+<db:section xml:id="templated_function_with_type_template_parameter_pack">
+<db:title>void templated_function_with_type_template_parameter_pack(<db:emphasis>Ts...</db:emphasis>)</db:title>
+<db:para>A templated function with a type template parameter pack.</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/docbook/templatedclass.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/docbook/templatedclass.xml
new file mode 100644
index 000000000..427f1cab3
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/docbook/templatedclass.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>TemplatedClass Class</db:title>
+<db:subtitle>template &lt;typename T&gt; class TemplatedClass</db:subtitle>
+<db:productname>templatedcallables</db:productname>
+<db:titleabbrev>templatedcallables Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>templatedcallables Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>TemplatedClass</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:para>Containing record for the tested methods.</db:para>
+</db:section>
+<db:section xml:id="member-function-documentation">
+<db:title>Member Function Documentation</db:title>
+<db:section xml:id="templated_method_with_defaulted_non_type_template_parameter">
+<db:title>void TemplatedClass::templated_method_with_defaulted_non_type_template_parameter()</db:title>
+<db:para>A templated method under a templated class with a defaulted non type template parameter.</db:para>
+</db:section>
+<db:section xml:id="templated_method_with_defaulted_template_template_parameter">
+<db:title>void TemplatedClass::templated_method_with_defaulted_template_template_parameter(<db:emphasis>Container&lt;U, size&gt;</db:emphasis>)</db:title>
+<db:para>A templated method under a templated class with a defaulted template template parameter.</db:para>
+</db:section>
+<db:section xml:id="templated_method_with_defaulted_type_template_parameter">
+<db:title>void TemplatedClass::templated_method_with_defaulted_type_template_parameter(<db:emphasis>U</db:emphasis>)</db:title>
+<db:para>A templated method under a templated class with a defaulted type template parameter.</db:para>
+</db:section>
+<db:section xml:id="templated_method_with_non_type_template_parameter">
+<db:title>void TemplatedClass::templated_method_with_non_type_template_parameter()</db:title>
+<db:para>A templated method under a templated class with a non-defaulted non type template parameter.</db:para>
+</db:section>
+<db:section xml:id="templated_method_with_non_type_template_parameter_pack">
+<db:title>void TemplatedClass::templated_method_with_non_type_template_parameter_pack()</db:title>
+<db:para>A templated method under a templated class with a non type template parameter pack.</db:para>
+</db:section>
+<db:section xml:id="templated_method_with_placeholder_non_type_template_parameter">
+<db:title>void TemplatedClass::templated_method_with_placeholder_non_type_template_parameter()</db:title>
+<db:para>A templated method under a templated class with a placeholder non type template parameter.</db:para>
+</db:section>
+<db:section xml:id="templated_method_with_template_template_parameter">
+<db:title>void TemplatedClass::templated_method_with_template_template_parameter(<db:emphasis>X&lt;U&gt;</db:emphasis>)</db:title>
+<db:para>A templated method under a templated class with a non-defaulted template template parameter.</db:para>
+</db:section>
+<db:section xml:id="templated_method_with_template_template_parameter_pack">
+<db:title>void TemplatedClass::templated_method_with_template_template_parameter_pack(<db:emphasis>Container&lt;U&gt;...</db:emphasis>)</db:title>
+<db:para>A templated method under a templated class with a template template parameter pack.</db:para>
+</db:section>
+<db:section xml:id="templated_method_with_type_template_parameter">
+<db:title>void TemplatedClass::templated_method_with_type_template_parameter(<db:emphasis>U</db:emphasis>)</db:title>
+<db:para>A templated method under a templated class with a non-defaulted type template parameter.</db:para>
+</db:section>
+<db:section xml:id="templated_method_with_type_template_parameter_pack">
+<db:title>void TemplatedClass::templated_method_with_type_template_parameter_pack(<db:emphasis>Ts...</db:emphasis>)</db:title>
+<db:para>A templated method under a templated class with a type template parameter pack.</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/html/templated-callables-h.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/html/templated-callables-h.html
new file mode 100644
index 000000000..4c8bd89c8
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/html/templated-callables-h.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- templated_callables.cpp -->
+ <title>&lt;templated_callables.h&gt; | templatedcallables</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;templated_callables.h&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;templated_callables.h&gt;</span></td></tr>
+</table></div>
+<h2 id="functions">Functions</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="templated-callables-h.html#templated_function_with_defaulted_non_type_template_parameter" translate="no">templated_function_with_defaulted_non_type_template_parameter</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="templated-callables-h.html#templated_function_with_defaulted_template_template_parameter" translate="no">templated_function_with_defaulted_template_template_parameter</a></b>(Container&lt;T, size&gt;)</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="templated-callables-h.html#templated_function_with_defaulted_type_template_parameter" translate="no">templated_function_with_defaulted_type_template_parameter</a></b>(T)</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="templated-callables-h.html#templated_function_with_non_type_template_parameter" translate="no">templated_function_with_non_type_template_parameter</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="templated-callables-h.html#templated_function_with_non_type_template_parameter_pack" translate="no">templated_function_with_non_type_template_parameter_pack</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="templated-callables-h.html#templated_function_with_placeholder_non_type_template_parameter" translate="no">templated_function_with_placeholder_non_type_template_parameter</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="templated-callables-h.html#templated_function_with_template_template_parameter" translate="no">templated_function_with_template_template_parameter</a></b>(K&lt;T&gt;)</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="templated-callables-h.html#templated_function_with_template_template_parameter_pack" translate="no">templated_function_with_template_template_parameter_pack</a></b>(Container&lt;T&gt;...)</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="templated-callables-h.html#templated_function_with_type_template_parameter" translate="no">templated_function_with_type_template_parameter</a></b>(T)</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="templated-callables-h.html#templated_function_with_type_template_parameter_pack" translate="no">templated_function_with_type_template_parameter_pack</a></b>(Ts...)</td></tr>
+</table></div>
+<!-- $$$<templated_callables.h>-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<p>Containing headers for the tested free functions.</p>
+</div>
+<!-- @@@<templated_callables.h> -->
+<div class="func">
+<h2>Function Documentation</h2>
+<!-- $$$templated_function_with_defaulted_non_type_template_parameter[overload1]$$$templated_function_with_defaulted_non_type_template_parameter -->
+<h3 class="fn" translate="no" id="templated_function_with_defaulted_non_type_template_parameter">template &lt;char Category = 'A'&gt; <span class="type">void</span> <span class="name">templated_function_with_defaulted_non_type_template_parameter</span>()</h3>
+<p>A templated function with a defaulted non type template parameter.</p>
+<!-- @@@templated_function_with_defaulted_non_type_template_parameter -->
+<!-- $$$templated_function_with_defaulted_template_template_parameter[overload1]$$$templated_function_with_defaulted_template_template_parameterContainer<T,size> -->
+<h3 class="fn" translate="no" id="templated_function_with_defaulted_template_template_parameter">template &lt;typename T, int size, template &lt;typename, int &gt; typename Container = std::array&gt; <span class="type">void</span> <span class="name">templated_function_with_defaulted_template_template_parameter</span>(<span class="type">Container</span>&lt;<span class="type">T</span>, <span class="type">size</span>&gt;)</h3>
+<p>A templated function with a defaulted template template parameter.</p>
+<!-- @@@templated_function_with_defaulted_template_template_parameter -->
+<!-- $$$templated_function_with_defaulted_type_template_parameter[overload1]$$$templated_function_with_defaulted_type_template_parameterT -->
+<h3 class="fn" translate="no" id="templated_function_with_defaulted_type_template_parameter">template &lt;typename T = char&gt; <span class="type">void</span> <span class="name">templated_function_with_defaulted_type_template_parameter</span>(<span class="type">T</span>)</h3>
+<p>A templated function with a defaulted type template parameter.</p>
+<!-- @@@templated_function_with_defaulted_type_template_parameter -->
+<!-- $$$templated_function_with_non_type_template_parameter[overload1]$$$templated_function_with_non_type_template_parameter -->
+<h3 class="fn" translate="no" id="templated_function_with_non_type_template_parameter">template &lt;char Category&gt; <span class="type">void</span> <span class="name">templated_function_with_non_type_template_parameter</span>()</h3>
+<p>A templated function with a non-defaulted non type template parameter.</p>
+<!-- @@@templated_function_with_non_type_template_parameter -->
+<!-- $$$templated_function_with_non_type_template_parameter_pack[overload1]$$$templated_function_with_non_type_template_parameter_pack -->
+<h3 class="fn" translate="no" id="templated_function_with_non_type_template_parameter_pack">template &lt;unsigned int... Weights&gt; <span class="type">void</span> <span class="name">templated_function_with_non_type_template_parameter_pack</span>()</h3>
+<p>A templated function with a non type template parameter pack.</p>
+<!-- @@@templated_function_with_non_type_template_parameter_pack -->
+<!-- $$$templated_function_with_placeholder_non_type_template_parameter[overload1]$$$templated_function_with_placeholder_non_type_template_parameter -->
+<h3 class="fn" translate="no" id="templated_function_with_placeholder_non_type_template_parameter">template &lt;auto Iterator&gt; <span class="type">void</span> <span class="name">templated_function_with_placeholder_non_type_template_parameter</span>()</h3>
+<p>A templated function with a placeholder non type template parameter.</p>
+<!-- @@@templated_function_with_placeholder_non_type_template_parameter -->
+<!-- $$$templated_function_with_template_template_parameter[overload1]$$$templated_function_with_template_template_parameterK<T> -->
+<h3 class="fn" translate="no" id="templated_function_with_template_template_parameter">template &lt;typename T, template &lt;typename&gt; typename K&gt; <span class="type">void</span> <span class="name">templated_function_with_template_template_parameter</span>(<span class="type">K</span>&lt;<span class="type">T</span>&gt;)</h3>
+<p>A templated function with a non-defaulted template template parameter.</p>
+<!-- @@@templated_function_with_template_template_parameter -->
+<!-- $$$templated_function_with_template_template_parameter_pack[overload1]$$$templated_function_with_template_template_parameter_packContainer<T>... -->
+<h3 class="fn" translate="no" id="templated_function_with_template_template_parameter_pack">template &lt;typename T, template &lt;typename&gt; typename... Container&gt; <span class="type">void</span> <span class="name">templated_function_with_template_template_parameter_pack</span>(<span class="type">Container</span>&lt;<span class="type">T</span>&gt;...)</h3>
+<p>A templated function with a template template parameter pack.</p>
+<!-- @@@templated_function_with_template_template_parameter_pack -->
+<!-- $$$templated_function_with_type_template_parameter[overload1]$$$templated_function_with_type_template_parameterT -->
+<h3 class="fn" translate="no" id="templated_function_with_type_template_parameter">template &lt;typename T&gt; <span class="type">void</span> <span class="name">templated_function_with_type_template_parameter</span>(<span class="type">T</span>)</h3>
+<p>A templated function with a non-defaulted type template parameter.</p>
+<!-- @@@templated_function_with_type_template_parameter -->
+<!-- $$$templated_function_with_type_template_parameter_pack[overload1]$$$templated_function_with_type_template_parameter_packTs... -->
+<h3 class="fn" translate="no" id="templated_function_with_type_template_parameter_pack">template &lt;typename... Ts&gt; <span class="type">void</span> <span class="name">templated_function_with_type_template_parameter_pack</span>(<span class="type">Ts</span>...)</h3>
+<p>A templated function with a type template parameter pack.</p>
+<!-- @@@templated_function_with_type_template_parameter_pack -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/html/templatedcallables.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/html/templatedcallables.index
new file mode 100644
index 000000000..91245c7f8
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/html/templatedcallables.index
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="templatedcallables Reference Documentation" version="" project="templatedcallables">
+ <namespace name="" status="active" access="public" module="templatedcallables">
+ <function name="templated_function_with_defaulted_non_type_template_parameter" href="templated-callables-h.html#templated_function_with_defaulted_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="0" meta="plain" type="void" signature="void templated_function_with_defaulted_non_type_template_parameter()"/>
+ <function name="templated_function_with_defaulted_template_template_parameter" href="templated-callables-h.html#templated_function_with_defaulted_template_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="1" meta="plain" type="void" signature="void templated_function_with_defaulted_template_template_parameter(Container&lt;T, size&gt;)">
+ <parameter type="Container&lt;T, size&gt;" name="" default=""/>
+ </function>
+ <function name="templated_function_with_defaulted_type_template_parameter" href="templated-callables-h.html#templated_function_with_defaulted_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="2" meta="plain" type="void" signature="void templated_function_with_defaulted_type_template_parameter(T)">
+ <parameter type="T" name="" default=""/>
+ </function>
+ <function name="templated_function_with_non_type_template_parameter" href="templated-callables-h.html#templated_function_with_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="3" meta="plain" type="void" signature="void templated_function_with_non_type_template_parameter()"/>
+ <function name="templated_function_with_non_type_template_parameter_pack" href="templated-callables-h.html#templated_function_with_non_type_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" related="4" meta="plain" type="void" signature="void templated_function_with_non_type_template_parameter_pack()"/>
+ <function name="templated_function_with_placeholder_non_type_template_parameter" href="templated-callables-h.html#templated_function_with_placeholder_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="5" meta="plain" type="void" signature="void templated_function_with_placeholder_non_type_template_parameter()"/>
+ <function name="templated_function_with_template_template_parameter" href="templated-callables-h.html#templated_function_with_template_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="6" meta="plain" type="void" signature="void templated_function_with_template_template_parameter(K&lt;T&gt;)">
+ <parameter type="K&lt;T&gt;" name="" default=""/>
+ </function>
+ <function name="templated_function_with_template_template_parameter_pack" href="templated-callables-h.html#templated_function_with_template_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" related="7" meta="plain" type="void" signature="void templated_function_with_template_template_parameter_pack(Container&lt;T&gt;...)">
+ <parameter type="Container&lt;T&gt;..." name="" default=""/>
+ </function>
+ <function name="templated_function_with_type_template_parameter" href="templated-callables-h.html#templated_function_with_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="8" meta="plain" type="void" signature="void templated_function_with_type_template_parameter(T)">
+ <parameter type="T" name="" default=""/>
+ </function>
+ <function name="templated_function_with_type_template_parameter_pack" href="templated-callables-h.html#templated_function_with_type_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" related="9" meta="plain" type="void" signature="void templated_function_with_type_template_parameter_pack(Ts...)">
+ <parameter type="Ts..." name="" default=""/>
+ </function>
+ <header name="&lt;templated_callables.h&gt;" href="templated-callables-h.html" status="active" documented="true" module="TestQDoc" title="&lt;templated_callables.h&gt;" fulltitle="&lt;templated_callables.h&gt;" subtitle="">
+ <function name="templated_function_with_defaulted_non_type_template_parameter" href="templated-callables-h.html#templated_function_with_defaulted_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="0" meta="plain" type="void" signature="void templated_function_with_defaulted_non_type_template_parameter()"/>
+ <function name="templated_function_with_defaulted_template_template_parameter" href="templated-callables-h.html#templated_function_with_defaulted_template_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="1" meta="plain" type="void" signature="void templated_function_with_defaulted_template_template_parameter(Container&lt;T, size&gt;)">
+ <parameter type="Container&lt;T, size&gt;" name="" default=""/>
+ </function>
+ <function name="templated_function_with_defaulted_type_template_parameter" href="templated-callables-h.html#templated_function_with_defaulted_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="2" meta="plain" type="void" signature="void templated_function_with_defaulted_type_template_parameter(T)">
+ <parameter type="T" name="" default=""/>
+ </function>
+ <function name="templated_function_with_non_type_template_parameter" href="templated-callables-h.html#templated_function_with_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="3" meta="plain" type="void" signature="void templated_function_with_non_type_template_parameter()"/>
+ <function name="templated_function_with_non_type_template_parameter_pack" href="templated-callables-h.html#templated_function_with_non_type_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" related="4" meta="plain" type="void" signature="void templated_function_with_non_type_template_parameter_pack()"/>
+ <function name="templated_function_with_placeholder_non_type_template_parameter" href="templated-callables-h.html#templated_function_with_placeholder_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="5" meta="plain" type="void" signature="void templated_function_with_placeholder_non_type_template_parameter()"/>
+ <function name="templated_function_with_template_template_parameter" href="templated-callables-h.html#templated_function_with_template_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="6" meta="plain" type="void" signature="void templated_function_with_template_template_parameter(K&lt;T&gt;)">
+ <parameter type="K&lt;T&gt;" name="" default=""/>
+ </function>
+ <function name="templated_function_with_template_template_parameter_pack" href="templated-callables-h.html#templated_function_with_template_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" related="7" meta="plain" type="void" signature="void templated_function_with_template_template_parameter_pack(Container&lt;T&gt;...)">
+ <parameter type="Container&lt;T&gt;..." name="" default=""/>
+ </function>
+ <function name="templated_function_with_type_template_parameter" href="templated-callables-h.html#templated_function_with_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="8" meta="plain" type="void" signature="void templated_function_with_type_template_parameter(T)">
+ <parameter type="T" name="" default=""/>
+ </function>
+ <function name="templated_function_with_type_template_parameter_pack" href="templated-callables-h.html#templated_function_with_type_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" related="9" meta="plain" type="void" signature="void templated_function_with_type_template_parameter_pack(Ts...)">
+ <parameter type="Ts..." name="" default=""/>
+ </function>
+ </header>
+ <class name="TemplatedClass" href="templatedclass.html" status="active" access="public" location="templated_callables.h" documented="true" module="TestQDoc">
+ <function name="templated_method_with_defaulted_non_type_template_parameter" fullname="TemplatedClass::templated_method_with_defaulted_non_type_template_parameter" href="templatedclass.html#templated_method_with_defaulted_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_defaulted_non_type_template_parameter()"/>
+ <function name="templated_method_with_defaulted_template_template_parameter" fullname="TemplatedClass::templated_method_with_defaulted_template_template_parameter" href="templatedclass.html#templated_method_with_defaulted_template_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_defaulted_template_template_parameter(Container&lt;U, size&gt;)">
+ <parameter type="Container&lt;U, size&gt;" name="" default=""/>
+ </function>
+ <function name="templated_method_with_defaulted_type_template_parameter" fullname="TemplatedClass::templated_method_with_defaulted_type_template_parameter" href="templatedclass.html#templated_method_with_defaulted_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_defaulted_type_template_parameter(U)">
+ <parameter type="U" name="" default=""/>
+ </function>
+ <function name="templated_method_with_non_type_template_parameter" fullname="TemplatedClass::templated_method_with_non_type_template_parameter" href="templatedclass.html#templated_method_with_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_non_type_template_parameter()"/>
+ <function name="templated_method_with_non_type_template_parameter_pack" fullname="TemplatedClass::templated_method_with_non_type_template_parameter_pack" href="templatedclass.html#templated_method_with_non_type_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_non_type_template_parameter_pack()"/>
+ <function name="templated_method_with_placeholder_non_type_template_parameter" fullname="TemplatedClass::templated_method_with_placeholder_non_type_template_parameter" href="templatedclass.html#templated_method_with_placeholder_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_placeholder_non_type_template_parameter()"/>
+ <function name="templated_method_with_template_template_parameter" fullname="TemplatedClass::templated_method_with_template_template_parameter" href="templatedclass.html#templated_method_with_template_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_template_template_parameter(X&lt;U&gt;)">
+ <parameter type="X&lt;U&gt;" name="" default=""/>
+ </function>
+ <function name="templated_method_with_template_template_parameter_pack" fullname="TemplatedClass::templated_method_with_template_template_parameter_pack" href="templatedclass.html#templated_method_with_template_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_template_template_parameter_pack(Container&lt;U&gt;...)">
+ <parameter type="Container&lt;U&gt;..." name="" default=""/>
+ </function>
+ <function name="templated_method_with_type_template_parameter" fullname="TemplatedClass::templated_method_with_type_template_parameter" href="templatedclass.html#templated_method_with_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_type_template_parameter(U)">
+ <parameter type="U" name="" default=""/>
+ </function>
+ <function name="templated_method_with_type_template_parameter_pack" fullname="TemplatedClass::templated_method_with_type_template_parameter_pack" href="templatedclass.html#templated_method_with_type_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_type_template_parameter_pack(Ts...)">
+ <parameter type="Ts..." name="" default=""/>
+ </function>
+ </class>
+ <module name="TestQDoc" href="testqdoc-module.html" status="internal" seen="false" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/html/templatedclass-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/html/templatedclass-members.html
new file mode 100644
index 000000000..8ab0482da
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/html/templatedclass-members.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- templated_callables.cpp -->
+ <title>List of All Members for TemplatedClass | templatedcallables</title>
+</head>
+<body>
+<li>TemplatedClass</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for TemplatedClass</h1>
+<p>This is the complete list of members for <a href="templatedclass.html">TemplatedClass</a>, including inherited members.</p>
+<ul>
+<li class="fn" translate="no"><span class="name"><b><a href="templatedclass.html#templated_method_with_defaulted_non_type_template_parameter" translate="no">templated_method_with_defaulted_non_type_template_parameter</a></b></span>()</li>
+<li class="fn" translate="no"><span class="name"><b><a href="templatedclass.html#templated_method_with_defaulted_template_template_parameter" translate="no">templated_method_with_defaulted_template_template_parameter</a></b></span>(Container&lt;U, size&gt;)</li>
+<li class="fn" translate="no"><span class="name"><b><a href="templatedclass.html#templated_method_with_defaulted_type_template_parameter" translate="no">templated_method_with_defaulted_type_template_parameter</a></b></span>(U)</li>
+<li class="fn" translate="no"><span class="name"><b><a href="templatedclass.html#templated_method_with_non_type_template_parameter" translate="no">templated_method_with_non_type_template_parameter</a></b></span>()</li>
+<li class="fn" translate="no"><span class="name"><b><a href="templatedclass.html#templated_method_with_non_type_template_parameter_pack" translate="no">templated_method_with_non_type_template_parameter_pack</a></b></span>()</li>
+<li class="fn" translate="no"><span class="name"><b><a href="templatedclass.html#templated_method_with_placeholder_non_type_template_parameter" translate="no">templated_method_with_placeholder_non_type_template_parameter</a></b></span>()</li>
+<li class="fn" translate="no"><span class="name"><b><a href="templatedclass.html#templated_method_with_template_template_parameter" translate="no">templated_method_with_template_template_parameter</a></b></span>(X&lt;U&gt;)</li>
+<li class="fn" translate="no"><span class="name"><b><a href="templatedclass.html#templated_method_with_template_template_parameter_pack" translate="no">templated_method_with_template_template_parameter_pack</a></b></span>(Container&lt;U&gt;...)</li>
+<li class="fn" translate="no"><span class="name"><b><a href="templatedclass.html#templated_method_with_type_template_parameter" translate="no">templated_method_with_type_template_parameter</a></b></span>(U)</li>
+<li class="fn" translate="no"><span class="name"><b><a href="templatedclass.html#templated_method_with_type_template_parameter_pack" translate="no">templated_method_with_type_template_parameter_pack</a></b></span>(Ts...)</li>
+</ul>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/html/templatedclass.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/html/templatedclass.html
new file mode 100644
index 000000000..21066cf52
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/html/templatedclass.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- templated_callables.cpp -->
+ <title>TemplatedClass Class | templatedcallables</title>
+</head>
+<body>
+<li>TemplatedClass</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">TemplatedClass Class</h1>
+<span class="small-subtitle" translate="no">template &lt;typename T&gt; class TemplatedClass</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;TemplatedClass&gt;</span></td></tr>
+</table></div>
+<ul>
+<li><a href="templatedclass-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"> void </td><td class="memItemRight bottomAlign"><b><a href="templatedclass.html#templated_method_with_defaulted_non_type_template_parameter" translate="no">templated_method_with_defaulted_non_type_template_parameter</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="templatedclass.html#templated_method_with_defaulted_template_template_parameter" translate="no">templated_method_with_defaulted_template_template_parameter</a></b>(Container&lt;U, size&gt;)</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="templatedclass.html#templated_method_with_defaulted_type_template_parameter" translate="no">templated_method_with_defaulted_type_template_parameter</a></b>(U)</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="templatedclass.html#templated_method_with_non_type_template_parameter" translate="no">templated_method_with_non_type_template_parameter</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="templatedclass.html#templated_method_with_non_type_template_parameter_pack" translate="no">templated_method_with_non_type_template_parameter_pack</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="templatedclass.html#templated_method_with_placeholder_non_type_template_parameter" translate="no">templated_method_with_placeholder_non_type_template_parameter</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="templatedclass.html#templated_method_with_template_template_parameter" translate="no">templated_method_with_template_template_parameter</a></b>(X&lt;U&gt;)</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="templatedclass.html#templated_method_with_template_template_parameter_pack" translate="no">templated_method_with_template_template_parameter_pack</a></b>(Container&lt;U&gt;...)</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="templatedclass.html#templated_method_with_type_template_parameter" translate="no">templated_method_with_type_template_parameter</a></b>(U)</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="templatedclass.html#templated_method_with_type_template_parameter_pack" translate="no">templated_method_with_type_template_parameter_pack</a></b>(Ts...)</td></tr>
+</table></div>
+<!-- $$$TemplatedClass-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<p>Containing record for the tested methods.</p>
+</div>
+<!-- @@@TemplatedClass -->
+<div class="func">
+<h2>Member Function Documentation</h2>
+<!-- $$$templated_method_with_defaulted_non_type_template_parameter[overload1]$$$templated_method_with_defaulted_non_type_template_parameter -->
+<h3 class="fn" translate="no" id="templated_method_with_defaulted_non_type_template_parameter">template &lt;int Size = 10&gt; <span class="type">void</span> TemplatedClass::<span class="name">templated_method_with_defaulted_non_type_template_parameter</span>()</h3>
+<p>A templated method under a templated class with a defaulted non type template parameter.</p>
+<!-- @@@templated_method_with_defaulted_non_type_template_parameter -->
+<!-- $$$templated_method_with_defaulted_template_template_parameter[overload1]$$$templated_method_with_defaulted_template_template_parameterContainer<U,size> -->
+<h3 class="fn" translate="no" id="templated_method_with_defaulted_template_template_parameter">template &lt;typename U, int size, template &lt;typename, int &gt; typename Container = std::array&gt; <span class="type">void</span> TemplatedClass::<span class="name">templated_method_with_defaulted_template_template_parameter</span>(<span class="type">Container</span>&lt;<span class="type">U</span>, <span class="type">size</span>&gt;)</h3>
+<p>A templated method under a templated class with a defaulted template template parameter.</p>
+<!-- @@@templated_method_with_defaulted_template_template_parameter -->
+<!-- $$$templated_method_with_defaulted_type_template_parameter[overload1]$$$templated_method_with_defaulted_type_template_parameterU -->
+<h3 class="fn" translate="no" id="templated_method_with_defaulted_type_template_parameter">template &lt;typename U = bool&gt; <span class="type">void</span> TemplatedClass::<span class="name">templated_method_with_defaulted_type_template_parameter</span>(<span class="type">U</span>)</h3>
+<p>A templated method under a templated class with a defaulted type template parameter.</p>
+<!-- @@@templated_method_with_defaulted_type_template_parameter -->
+<!-- $$$templated_method_with_non_type_template_parameter[overload1]$$$templated_method_with_non_type_template_parameter -->
+<h3 class="fn" translate="no" id="templated_method_with_non_type_template_parameter">template &lt;int Size&gt; <span class="type">void</span> TemplatedClass::<span class="name">templated_method_with_non_type_template_parameter</span>()</h3>
+<p>A templated method under a templated class with a non-defaulted non type template parameter.</p>
+<!-- @@@templated_method_with_non_type_template_parameter -->
+<!-- $$$templated_method_with_non_type_template_parameter_pack[overload1]$$$templated_method_with_non_type_template_parameter_pack -->
+<h3 class="fn" translate="no" id="templated_method_with_non_type_template_parameter_pack">template &lt;int... Dimensions&gt; <span class="type">void</span> TemplatedClass::<span class="name">templated_method_with_non_type_template_parameter_pack</span>()</h3>
+<p>A templated method under a templated class with a non type template parameter pack.</p>
+<!-- @@@templated_method_with_non_type_template_parameter_pack -->
+<!-- $$$templated_method_with_placeholder_non_type_template_parameter[overload1]$$$templated_method_with_placeholder_non_type_template_parameter -->
+<h3 class="fn" translate="no" id="templated_method_with_placeholder_non_type_template_parameter">template &lt;auto Predicate&gt; <span class="type">void</span> TemplatedClass::<span class="name">templated_method_with_placeholder_non_type_template_parameter</span>()</h3>
+<p>A templated method under a templated class with a placeholder non type template parameter.</p>
+<!-- @@@templated_method_with_placeholder_non_type_template_parameter -->
+<!-- $$$templated_method_with_template_template_parameter[overload1]$$$templated_method_with_template_template_parameterX<U> -->
+<h3 class="fn" translate="no" id="templated_method_with_template_template_parameter">template &lt;typename U, template &lt;typename&gt; typename X&gt; <span class="type">void</span> TemplatedClass::<span class="name">templated_method_with_template_template_parameter</span>(<span class="type">X</span>&lt;<span class="type">U</span>&gt;)</h3>
+<p>A templated method under a templated class with a non-defaulted template template parameter.</p>
+<!-- @@@templated_method_with_template_template_parameter -->
+<!-- $$$templated_method_with_template_template_parameter_pack[overload1]$$$templated_method_with_template_template_parameter_packContainer<U>... -->
+<h3 class="fn" translate="no" id="templated_method_with_template_template_parameter_pack">template &lt;typename U, template &lt;typename&gt; typename... Container&gt; <span class="type">void</span> TemplatedClass::<span class="name">templated_method_with_template_template_parameter_pack</span>(<span class="type">Container</span>&lt;<span class="type">U</span>&gt;...)</h3>
+<p>A templated method under a templated class with a template template parameter pack.</p>
+<!-- @@@templated_method_with_template_template_parameter_pack -->
+<!-- $$$templated_method_with_type_template_parameter[overload1]$$$templated_method_with_type_template_parameterU -->
+<h3 class="fn" translate="no" id="templated_method_with_type_template_parameter">template &lt;typename U&gt; <span class="type">void</span> TemplatedClass::<span class="name">templated_method_with_type_template_parameter</span>(<span class="type">U</span>)</h3>
+<p>A templated method under a templated class with a non-defaulted type template parameter.</p>
+<!-- @@@templated_method_with_type_template_parameter -->
+<!-- $$$templated_method_with_type_template_parameter_pack[overload1]$$$templated_method_with_type_template_parameter_packTs... -->
+<h3 class="fn" translate="no" id="templated_method_with_type_template_parameter_pack">template &lt;typename... Ts&gt; <span class="type">void</span> TemplatedClass::<span class="name">templated_method_with_type_template_parameter_pack</span>(<span class="type">Ts</span>...)</h3>
+<p>A templated method under a templated class with a type template parameter pack.</p>
+<!-- @@@templated_method_with_type_template_parameter_pack -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/webxml/templated-callables-h.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/webxml/templated-callables-h.webxml
new file mode 100644
index 000000000..8ae7ad257
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/webxml/templated-callables-h.webxml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <header name="&lt;templated_callables.h&gt;" href="templated-callables-h.html" status="active" documented="true" module="TestQDoc" title="&lt;templated_callables.h&gt;" fulltitle="&lt;templated_callables.h&gt;" subtitle="">
+ <description>
+ <para>Containing headers for the tested free functions.</para>
+ </description>
+ <function name="templated_function_with_defaulted_non_type_template_parameter" href="templated-callables-h.html#templated_function_with_defaulted_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="0" meta="plain" type="void" signature="void templated_function_with_defaulted_non_type_template_parameter()">
+ <description>
+ <para>A templated function with a defaulted non type template parameter.</para>
+ </description>
+ </function>
+ <function name="templated_function_with_defaulted_template_template_parameter" href="templated-callables-h.html#templated_function_with_defaulted_template_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="1" meta="plain" type="void" signature="void templated_function_with_defaulted_template_template_parameter(Container&lt;T, size&gt;)">
+ <parameter type="Container&lt;T, size&gt;" name="" default=""/>
+ <description>
+ <para>A templated function with a defaulted template template parameter.</para>
+ </description>
+ </function>
+ <function name="templated_function_with_defaulted_type_template_parameter" href="templated-callables-h.html#templated_function_with_defaulted_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="2" meta="plain" type="void" signature="void templated_function_with_defaulted_type_template_parameter(T)">
+ <parameter type="T" name="" default=""/>
+ <description>
+ <para>A templated function with a defaulted type template parameter.</para>
+ </description>
+ </function>
+ <function name="templated_function_with_non_type_template_parameter" href="templated-callables-h.html#templated_function_with_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="3" meta="plain" type="void" signature="void templated_function_with_non_type_template_parameter()">
+ <description>
+ <para>A templated function with a non-defaulted non type template parameter.</para>
+ </description>
+ </function>
+ <function name="templated_function_with_non_type_template_parameter_pack" href="templated-callables-h.html#templated_function_with_non_type_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" related="4" meta="plain" type="void" signature="void templated_function_with_non_type_template_parameter_pack()">
+ <description>
+ <para>A templated function with a non type template parameter pack.</para>
+ </description>
+ </function>
+ <function name="templated_function_with_placeholder_non_type_template_parameter" href="templated-callables-h.html#templated_function_with_placeholder_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="5" meta="plain" type="void" signature="void templated_function_with_placeholder_non_type_template_parameter()">
+ <description>
+ <para>A templated function with a placeholder non type template parameter.</para>
+ </description>
+ </function>
+ <function name="templated_function_with_template_template_parameter" href="templated-callables-h.html#templated_function_with_template_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="6" meta="plain" type="void" signature="void templated_function_with_template_template_parameter(K&lt;T&gt;)">
+ <parameter type="K&lt;T&gt;" name="" default=""/>
+ <description>
+ <para>A templated function with a non-defaulted template template parameter.</para>
+ </description>
+ </function>
+ <function name="templated_function_with_template_template_parameter_pack" href="templated-callables-h.html#templated_function_with_template_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" related="7" meta="plain" type="void" signature="void templated_function_with_template_template_parameter_pack(Container&lt;T&gt;...)">
+ <parameter type="Container&lt;T&gt;..." name="" default=""/>
+ <description>
+ <para>A templated function with a template template parameter pack.</para>
+ </description>
+ </function>
+ <function name="templated_function_with_type_template_parameter" href="templated-callables-h.html#templated_function_with_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="8" meta="plain" type="void" signature="void templated_function_with_type_template_parameter(T)">
+ <parameter type="T" name="" default=""/>
+ <description>
+ <para>A templated function with a non-defaulted type template parameter.</para>
+ </description>
+ </function>
+ <function name="templated_function_with_type_template_parameter_pack" href="templated-callables-h.html#templated_function_with_type_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" related="9" meta="plain" type="void" signature="void templated_function_with_type_template_parameter_pack(Ts...)">
+ <parameter type="Ts..." name="" default=""/>
+ <description>
+ <para>A templated function with a type template parameter pack.</para>
+ </description>
+ </function>
+ </header>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/webxml/templatedcallables.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/webxml/templatedcallables.index
new file mode 100644
index 000000000..91245c7f8
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/webxml/templatedcallables.index
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="templatedcallables Reference Documentation" version="" project="templatedcallables">
+ <namespace name="" status="active" access="public" module="templatedcallables">
+ <function name="templated_function_with_defaulted_non_type_template_parameter" href="templated-callables-h.html#templated_function_with_defaulted_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="0" meta="plain" type="void" signature="void templated_function_with_defaulted_non_type_template_parameter()"/>
+ <function name="templated_function_with_defaulted_template_template_parameter" href="templated-callables-h.html#templated_function_with_defaulted_template_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="1" meta="plain" type="void" signature="void templated_function_with_defaulted_template_template_parameter(Container&lt;T, size&gt;)">
+ <parameter type="Container&lt;T, size&gt;" name="" default=""/>
+ </function>
+ <function name="templated_function_with_defaulted_type_template_parameter" href="templated-callables-h.html#templated_function_with_defaulted_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="2" meta="plain" type="void" signature="void templated_function_with_defaulted_type_template_parameter(T)">
+ <parameter type="T" name="" default=""/>
+ </function>
+ <function name="templated_function_with_non_type_template_parameter" href="templated-callables-h.html#templated_function_with_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="3" meta="plain" type="void" signature="void templated_function_with_non_type_template_parameter()"/>
+ <function name="templated_function_with_non_type_template_parameter_pack" href="templated-callables-h.html#templated_function_with_non_type_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" related="4" meta="plain" type="void" signature="void templated_function_with_non_type_template_parameter_pack()"/>
+ <function name="templated_function_with_placeholder_non_type_template_parameter" href="templated-callables-h.html#templated_function_with_placeholder_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="5" meta="plain" type="void" signature="void templated_function_with_placeholder_non_type_template_parameter()"/>
+ <function name="templated_function_with_template_template_parameter" href="templated-callables-h.html#templated_function_with_template_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="6" meta="plain" type="void" signature="void templated_function_with_template_template_parameter(K&lt;T&gt;)">
+ <parameter type="K&lt;T&gt;" name="" default=""/>
+ </function>
+ <function name="templated_function_with_template_template_parameter_pack" href="templated-callables-h.html#templated_function_with_template_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" related="7" meta="plain" type="void" signature="void templated_function_with_template_template_parameter_pack(Container&lt;T&gt;...)">
+ <parameter type="Container&lt;T&gt;..." name="" default=""/>
+ </function>
+ <function name="templated_function_with_type_template_parameter" href="templated-callables-h.html#templated_function_with_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="8" meta="plain" type="void" signature="void templated_function_with_type_template_parameter(T)">
+ <parameter type="T" name="" default=""/>
+ </function>
+ <function name="templated_function_with_type_template_parameter_pack" href="templated-callables-h.html#templated_function_with_type_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" related="9" meta="plain" type="void" signature="void templated_function_with_type_template_parameter_pack(Ts...)">
+ <parameter type="Ts..." name="" default=""/>
+ </function>
+ <header name="&lt;templated_callables.h&gt;" href="templated-callables-h.html" status="active" documented="true" module="TestQDoc" title="&lt;templated_callables.h&gt;" fulltitle="&lt;templated_callables.h&gt;" subtitle="">
+ <function name="templated_function_with_defaulted_non_type_template_parameter" href="templated-callables-h.html#templated_function_with_defaulted_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="0" meta="plain" type="void" signature="void templated_function_with_defaulted_non_type_template_parameter()"/>
+ <function name="templated_function_with_defaulted_template_template_parameter" href="templated-callables-h.html#templated_function_with_defaulted_template_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="1" meta="plain" type="void" signature="void templated_function_with_defaulted_template_template_parameter(Container&lt;T, size&gt;)">
+ <parameter type="Container&lt;T, size&gt;" name="" default=""/>
+ </function>
+ <function name="templated_function_with_defaulted_type_template_parameter" href="templated-callables-h.html#templated_function_with_defaulted_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="2" meta="plain" type="void" signature="void templated_function_with_defaulted_type_template_parameter(T)">
+ <parameter type="T" name="" default=""/>
+ </function>
+ <function name="templated_function_with_non_type_template_parameter" href="templated-callables-h.html#templated_function_with_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="3" meta="plain" type="void" signature="void templated_function_with_non_type_template_parameter()"/>
+ <function name="templated_function_with_non_type_template_parameter_pack" href="templated-callables-h.html#templated_function_with_non_type_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" related="4" meta="plain" type="void" signature="void templated_function_with_non_type_template_parameter_pack()"/>
+ <function name="templated_function_with_placeholder_non_type_template_parameter" href="templated-callables-h.html#templated_function_with_placeholder_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="5" meta="plain" type="void" signature="void templated_function_with_placeholder_non_type_template_parameter()"/>
+ <function name="templated_function_with_template_template_parameter" href="templated-callables-h.html#templated_function_with_template_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="6" meta="plain" type="void" signature="void templated_function_with_template_template_parameter(K&lt;T&gt;)">
+ <parameter type="K&lt;T&gt;" name="" default=""/>
+ </function>
+ <function name="templated_function_with_template_template_parameter_pack" href="templated-callables-h.html#templated_function_with_template_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" related="7" meta="plain" type="void" signature="void templated_function_with_template_template_parameter_pack(Container&lt;T&gt;...)">
+ <parameter type="Container&lt;T&gt;..." name="" default=""/>
+ </function>
+ <function name="templated_function_with_type_template_parameter" href="templated-callables-h.html#templated_function_with_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" related="8" meta="plain" type="void" signature="void templated_function_with_type_template_parameter(T)">
+ <parameter type="T" name="" default=""/>
+ </function>
+ <function name="templated_function_with_type_template_parameter_pack" href="templated-callables-h.html#templated_function_with_type_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" related="9" meta="plain" type="void" signature="void templated_function_with_type_template_parameter_pack(Ts...)">
+ <parameter type="Ts..." name="" default=""/>
+ </function>
+ </header>
+ <class name="TemplatedClass" href="templatedclass.html" status="active" access="public" location="templated_callables.h" documented="true" module="TestQDoc">
+ <function name="templated_method_with_defaulted_non_type_template_parameter" fullname="TemplatedClass::templated_method_with_defaulted_non_type_template_parameter" href="templatedclass.html#templated_method_with_defaulted_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_defaulted_non_type_template_parameter()"/>
+ <function name="templated_method_with_defaulted_template_template_parameter" fullname="TemplatedClass::templated_method_with_defaulted_template_template_parameter" href="templatedclass.html#templated_method_with_defaulted_template_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_defaulted_template_template_parameter(Container&lt;U, size&gt;)">
+ <parameter type="Container&lt;U, size&gt;" name="" default=""/>
+ </function>
+ <function name="templated_method_with_defaulted_type_template_parameter" fullname="TemplatedClass::templated_method_with_defaulted_type_template_parameter" href="templatedclass.html#templated_method_with_defaulted_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_defaulted_type_template_parameter(U)">
+ <parameter type="U" name="" default=""/>
+ </function>
+ <function name="templated_method_with_non_type_template_parameter" fullname="TemplatedClass::templated_method_with_non_type_template_parameter" href="templatedclass.html#templated_method_with_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_non_type_template_parameter()"/>
+ <function name="templated_method_with_non_type_template_parameter_pack" fullname="TemplatedClass::templated_method_with_non_type_template_parameter_pack" href="templatedclass.html#templated_method_with_non_type_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_non_type_template_parameter_pack()"/>
+ <function name="templated_method_with_placeholder_non_type_template_parameter" fullname="TemplatedClass::templated_method_with_placeholder_non_type_template_parameter" href="templatedclass.html#templated_method_with_placeholder_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_placeholder_non_type_template_parameter()"/>
+ <function name="templated_method_with_template_template_parameter" fullname="TemplatedClass::templated_method_with_template_template_parameter" href="templatedclass.html#templated_method_with_template_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_template_template_parameter(X&lt;U&gt;)">
+ <parameter type="X&lt;U&gt;" name="" default=""/>
+ </function>
+ <function name="templated_method_with_template_template_parameter_pack" fullname="TemplatedClass::templated_method_with_template_template_parameter_pack" href="templatedclass.html#templated_method_with_template_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_template_template_parameter_pack(Container&lt;U&gt;...)">
+ <parameter type="Container&lt;U&gt;..." name="" default=""/>
+ </function>
+ <function name="templated_method_with_type_template_parameter" fullname="TemplatedClass::templated_method_with_type_template_parameter" href="templatedclass.html#templated_method_with_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_type_template_parameter(U)">
+ <parameter type="U" name="" default=""/>
+ </function>
+ <function name="templated_method_with_type_template_parameter_pack" fullname="TemplatedClass::templated_method_with_type_template_parameter_pack" href="templatedclass.html#templated_method_with_type_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_type_template_parameter_pack(Ts...)">
+ <parameter type="Ts..." name="" default=""/>
+ </function>
+ </class>
+ <module name="TestQDoc" href="testqdoc-module.html" status="internal" seen="false" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/webxml/templatedclass.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/webxml/templatedclass.webxml
new file mode 100644
index 000000000..29c0bc661
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/expected/webxml/templatedclass.webxml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="TemplatedClass" href="templatedclass.html" status="active" access="public" location="templated_callables.h" documented="true" module="TestQDoc">
+ <description>
+ <para>Containing record for the tested methods.</para>
+ </description>
+ <function name="templated_method_with_defaulted_non_type_template_parameter" fullname="TemplatedClass::templated_method_with_defaulted_non_type_template_parameter" href="templatedclass.html#templated_method_with_defaulted_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_defaulted_non_type_template_parameter()">
+ <description>
+ <para>A templated method under a templated class with a defaulted non type template parameter.</para>
+ </description>
+ </function>
+ <function name="templated_method_with_defaulted_template_template_parameter" fullname="TemplatedClass::templated_method_with_defaulted_template_template_parameter" href="templatedclass.html#templated_method_with_defaulted_template_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_defaulted_template_template_parameter(Container&lt;U, size&gt;)">
+ <parameter type="Container&lt;U, size&gt;" name="" default=""/>
+ <description>
+ <para>A templated method under a templated class with a defaulted template template parameter.</para>
+ </description>
+ </function>
+ <function name="templated_method_with_defaulted_type_template_parameter" fullname="TemplatedClass::templated_method_with_defaulted_type_template_parameter" href="templatedclass.html#templated_method_with_defaulted_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_defaulted_type_template_parameter(U)">
+ <parameter type="U" name="" default=""/>
+ <description>
+ <para>A templated method under a templated class with a defaulted type template parameter.</para>
+ </description>
+ </function>
+ <function name="templated_method_with_non_type_template_parameter" fullname="TemplatedClass::templated_method_with_non_type_template_parameter" href="templatedclass.html#templated_method_with_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_non_type_template_parameter()">
+ <description>
+ <para>A templated method under a templated class with a non-defaulted non type template parameter.</para>
+ </description>
+ </function>
+ <function name="templated_method_with_non_type_template_parameter_pack" fullname="TemplatedClass::templated_method_with_non_type_template_parameter_pack" href="templatedclass.html#templated_method_with_non_type_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_non_type_template_parameter_pack()">
+ <description>
+ <para>A templated method under a templated class with a non type template parameter pack.</para>
+ </description>
+ </function>
+ <function name="templated_method_with_placeholder_non_type_template_parameter" fullname="TemplatedClass::templated_method_with_placeholder_non_type_template_parameter" href="templatedclass.html#templated_method_with_placeholder_non_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_placeholder_non_type_template_parameter()">
+ <description>
+ <para>A templated method under a templated class with a placeholder non type template parameter.</para>
+ </description>
+ </function>
+ <function name="templated_method_with_template_template_parameter" fullname="TemplatedClass::templated_method_with_template_template_parameter" href="templatedclass.html#templated_method_with_template_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_template_template_parameter(X&lt;U&gt;)">
+ <parameter type="X&lt;U&gt;" name="" default=""/>
+ <description>
+ <para>A templated method under a templated class with a non-defaulted template template parameter.</para>
+ </description>
+ </function>
+ <function name="templated_method_with_template_template_parameter_pack" fullname="TemplatedClass::templated_method_with_template_template_parameter_pack" href="templatedclass.html#templated_method_with_template_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_template_template_parameter_pack(Container&lt;U&gt;...)">
+ <parameter type="Container&lt;U&gt;..." name="" default=""/>
+ <description>
+ <para>A templated method under a templated class with a template template parameter pack.</para>
+ </description>
+ </function>
+ <function name="templated_method_with_type_template_parameter" fullname="TemplatedClass::templated_method_with_type_template_parameter" href="templatedclass.html#templated_method_with_type_template_parameter" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_type_template_parameter(U)">
+ <parameter type="U" name="" default=""/>
+ <description>
+ <para>A templated method under a templated class with a non-defaulted type template parameter.</para>
+ </description>
+ </function>
+ <function name="templated_method_with_type_template_parameter_pack" fullname="TemplatedClass::templated_method_with_type_template_parameter_pack" href="templatedclass.html#templated_method_with_type_template_parameter_pack" status="active" access="public" location="templated_callables.h" documented="true" meta="plain" type="void" signature="void templated_method_with_type_template_parameter_pack(Ts...)">
+ <parameter type="Ts..." name="" default=""/>
+ <description>
+ <para>A templated method under a templated class with a type template parameter pack.</para>
+ </description>
+ </function>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/src/templated_callables.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/src/templated_callables.cpp
new file mode 100644
index 000000000..9e91242e3
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/src/templated_callables.cpp
@@ -0,0 +1,149 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#pragma once
+
+#include "templated_callables.h"
+
+/*!
+ * \headerfile <templated_callables.h>
+ * \inmodule TestQDoc
+ *
+ * Containing headers for the tested free functions.
+ */
+
+/*!
+ * \class TemplatedClass
+ * \inmodule TestQDoc
+ *
+ * Containing record for the tested methods.
+ */
+
+/*!
+ * \fn template<typename T> template <typename U> void TemplatedClass<T>::templated_method_with_type_template_parameter(U)
+ *
+ * A templated method under a templated class with a non-defaulted type template parameter.
+ */
+
+/*!
+ * \fn template<typename T> void templated_function_with_type_template_parameter(T)
+ * \relates <templated_callables.h>
+ *
+ * A templated function with a non-defaulted type template parameter.
+ */
+
+/*!
+ * \fn template<typename T> template <typename U> void TemplatedClass<T>::templated_method_with_defaulted_type_template_parameter(U)
+ *
+ * A templated method under a templated class with a defaulted type template parameter.
+ */
+
+/*!
+ * \fn template<typename T> void templated_function_with_defaulted_type_template_parameter(T)
+ * \relates <templated_callables.h>
+ *
+ * A templated function with a defaulted type template parameter.
+ */
+
+/*!
+ * \fn template<typename T> template <typename... Ts> void TemplatedClass<T>::templated_method_with_type_template_parameter_pack(Ts...)
+ *
+ * A templated method under a templated class with a type template parameter pack.
+ */
+
+/*!
+ * \fn template<typename... Ts> void templated_function_with_type_template_parameter_pack(Ts...)
+ * \relates <templated_callables.h>
+ *
+ * A templated function with a type template parameter pack.
+ */
+
+/*!
+ * \fn template<typename T> template <int Size> void TemplatedClass<T>::templated_method_with_non_type_template_parameter()
+ *
+ * A templated method under a templated class with a non-defaulted non type template parameter.
+ */
+
+/*!
+ * \fn template<char Category> void templated_function_with_non_type_template_parameter()
+ * \relates <templated_callables.h>
+ *
+ * A templated function with a non-defaulted non type template parameter.
+ */
+
+/*!
+ * \fn template<typename T> template <int Size = 10> void TemplatedClass<T>::templated_method_with_defaulted_non_type_template_parameter()
+ *
+ * A templated method under a templated class with a defaulted non type template parameter.
+ */
+
+/*!
+ * \fn template<char Category = 'A'> void templated_function_with_defaulted_non_type_template_parameter()
+ * \relates <templated_callables.h>
+ *
+ * A templated function with a defaulted non type template parameter.
+ */
+
+/*!
+ * \fn template<typename T> template <int... Dimensions> void TemplatedClass<T>::templated_method_with_non_type_template_parameter_pack()
+ *
+ * A templated method under a templated class with a non type template parameter pack.
+ */
+
+/*!
+ * \fn template<unsigned... Weights> void templated_function_with_non_type_template_parameter_pack()
+ * \relates <templated_callables.h>
+ *
+ * A templated function with a non type template parameter pack.
+ */
+
+/*!
+ * \fn template<typename T> template <auto Predicate> void TemplatedClass<T>::templated_method_with_placeholder_non_type_template_parameter()
+ *
+ * A templated method under a templated class with a placeholder non type template parameter.
+ */
+
+/*!
+ * \fn template<auto Iterator> void templated_function_with_placeholder_non_type_template_parameter()
+ * \relates <templated_callables.h>
+ *
+ * A templated function with a placeholder non type template parameter.
+ */
+
+/*!
+ * \fn template<typename T> template <typename U, template <typename> typename X> void TemplatedClass<T>::templated_method_with_template_template_parameter(X<U>)
+ *
+ * A templated method under a templated class with a non-defaulted template template parameter.
+ */
+
+/*!
+ * \fn template <typename T, template <typename> typename K> void templated_function_with_template_template_parameter(K<T>)
+ * \relates <templated_callables.h>
+ *
+ * A templated function with a non-defaulted template template parameter.
+ */
+
+/*!
+ * \fn template<typename T> template <typename U, int size, template <typename, int> typename Container = std::array> void TemplatedClass<T>::templated_method_with_defaulted_template_template_parameter(Container<U, size>)
+ *
+ * A templated method under a templated class with a defaulted template template parameter.
+ */
+
+/*!
+ * \fn template <typename T, int size, template <typename, int> typename Container = std::array> void templated_function_with_defaulted_template_template_parameter(Container<T, size>)
+ * \relates <templated_callables.h>
+ *
+ * A templated function with a defaulted template template parameter.
+ */
+
+/*!
+ * \fn template<typename T> template <typename U, template <typename> typename... Container> void TemplatedClass<T>::templated_method_with_template_template_parameter_pack(Container<U>...)
+ *
+ * A templated method under a templated class with a template template parameter pack.
+ */
+
+/*!
+ * \fn template <typename T, template <typename> typename... Container> void templated_function_with_template_template_parameter_pack(Container<T>...)
+ * \relates <templated_callables.h>
+ *
+ * A templated function with a template template parameter pack.
+ */
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/src/templated_callables.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/src/templated_callables.h
new file mode 100644
index 000000000..c745ccad2
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/src/templated_callables.h
@@ -0,0 +1,73 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#pragma once
+
+// dummy declaration
+namespace std {
+ template <class T, int N> struct array;
+}
+
+template <typename T>
+class TemplatedClass
+{
+public:
+ template <typename U>
+ void templated_method_with_type_template_parameter(U);
+
+ template <typename U = bool>
+ void templated_method_with_defaulted_type_template_parameter(U);
+
+ template <typename... Ts>
+ void templated_method_with_type_template_parameter_pack(Ts...);
+
+ template <int Size>
+ void templated_method_with_non_type_template_parameter();
+
+ template <int Size = 10>
+ void templated_method_with_defaulted_non_type_template_parameter();
+
+ template <int... Dimensions>
+ void templated_method_with_non_type_template_parameter_pack();
+
+ template <auto Predicate>
+ void templated_method_with_placeholder_non_type_template_parameter();
+
+ template <typename U, template <typename> typename X>
+ void templated_method_with_template_template_parameter(X<U>);
+
+ template <typename U, int size, template <typename, int> typename Container = std::array>
+ void templated_method_with_defaulted_template_template_parameter(Container<U, size>);
+
+ template <typename U, template <typename> typename... Container>
+ void templated_method_with_template_template_parameter_pack(Container<U>...);
+};
+
+template <typename T>
+void templated_function_with_type_template_parameter(T);
+
+template <typename T = char>
+void templated_function_with_defaulted_type_template_parameter(T);
+
+template <typename... Ts>
+void templated_function_with_type_template_parameter_pack(Ts...);
+
+template <char Category>
+void templated_function_with_non_type_template_parameter();
+
+template <char Category = 'A'>
+void templated_function_with_defaulted_non_type_template_parameter();
+
+template <unsigned... Weights>
+void templated_function_with_non_type_template_parameter_pack();
+
+template <auto Iterator>
+void templated_function_with_placeholder_non_type_template_parameter();
+
+template <typename T, template <typename> typename K>
+void templated_function_with_template_template_parameter(K<T>);
+
+template <typename T, int size, template <typename, int> typename Container = std::array>
+void templated_function_with_defaulted_template_template_parameter(Container<T, size>);
+
+template <typename T, template <typename> typename... Container>
+void templated_function_with_template_template_parameter_pack(Container<T>...);
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/templatedcallables.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/templatedcallables.qdocconf
new file mode 100644
index 000000000..d7a7c46ef
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/templatedcallables/templatedcallables.qdocconf
@@ -0,0 +1,29 @@
+project = templatedcallables
+
+headerdirs = ./src
+sourcedirs = ./src
+exampledirs = ./src
+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
+
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ./src/images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/autolinking.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/autolinking.xml
new file mode 100644
index 000000000..b9e9b7eb0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/autolinking.xml
@@ -0,0 +1,32 @@
+<?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>Autolinking</db:title>
+<db:productname>TestTemplate</db:productname>
+<db:titleabbrev>TestTemplate Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>TestTemplate Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:section xml:id="testqdoc">
+<db:title>TestQDoc</db:title>
+<db:para>The string <db:link xlink:href="testqdoc.xml">TestQDoc</db:link> links to the C++ namespace unless linking explicitly, <db:link xlink:href="autolinking.xml#testqdoc">like this</db:link>, or <db:link xlink:href="testqdoc.xml">this</db:link>. Also,</db:para>
+<db:para>Autolinks:</db:para>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-testderived.xml">TestQDoc::TestDerived</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+<db:para>Explicit links:</db:para>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-testderived.xml">TestQDoc::TestDerived</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="obsolete-classes.xml#testqdoc">Obsolete Classes#TestQDoc</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+<db:section xml:id="someprop">
+<db:title>someProp</db:title>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/bar.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/bar.xml
new file mode 100644
index 000000000..9c54fe914
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/bar.xml
@@ -0,0 +1,43 @@
+<?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>Bar Class</db:title>
+<db:subtitle>template &lt;typename T, typename D&gt; class Bar</db:subtitle>
+<db:productname>TestTemplate</db:productname>
+<db:titleabbrev>TestTemplate Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>Another class template.</db:para>
+<db:para>This class was introduced in Qt 2.0.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>Bar</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since</db:term>
+<db:listitem>
+<db:para>Qt 2.0</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>CMake</db:term>
+<db:listitem>
+<db:para>find_package(Qt6 REQUIRED COMPONENTS QDocTest)</db:para>
+<db:para>target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>qmake</db:term>
+<db:listitem>
+<db:para>QT += testcpp</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/testtemplate/expected/docbook/baz.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/baz.xml
new file mode 100644
index 000000000..cf36a35b1
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/baz.xml
@@ -0,0 +1,42 @@
+<?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>TestTemplate</db:productname>
+<db:titleabbrev>TestTemplate Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>Class template template.</db:para>
+<db:para>This struct was introduced in Qt 2.0.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>Baz</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since</db:term>
+<db:listitem>
+<db:para>Qt 2.0</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>CMake</db:term>
+<db:listitem>
+<db:para>find_package(Qt6 REQUIRED COMPONENTS QDocTest)</db:para>
+<db:para>target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>qmake</db:term>
+<db:listitem>
+<db:para>QT += testcpp</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/testtemplate/expected/docbook/cpptypes.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/cpptypes.xml
new file mode 100644
index 000000000..cdd6401c6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/cpptypes.xml
@@ -0,0 +1,33 @@
+<?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>Test C++ Types</db:title>
+<db:productname>TestTemplate</db:productname>
+<db:titleabbrev>TestTemplate Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>TestTemplate Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:anchor xml:id="details"/>
+<db:itemizedlist role="testgroup">
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml" xlink:role="class">TestQDoc::Test</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<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>
+<db:variablelist role="members">
+<db:varlistentry>
+<db:term><db:link xlink:href="testqdoc-test.xml" xlink:role="class">TestQDoc::Test</db:link></db:term>
+<db:listitem>
+<db:para>A class in a namespace.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/crossmoduleref.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/crossmoduleref.xml
new file mode 100644
index 000000000..b86d8f01b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/crossmoduleref.xml
@@ -0,0 +1,49 @@
+<?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>CrossModuleRef Namespace</db:title>
+<db:productname>TestTemplate</db:productname>
+<db:titleabbrev>TestTemplate Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>Namespace that has documented functions in multiple modules.</db:para>
+<db:para>This namespace was introduced in Qt 3.0.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>CrossModuleRef</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since</db:term>
+<db:listitem>
+<db:para>Qt 3.0</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>CMake</db:term>
+<db:listitem>
+<db:para>find_package(Qt6 REQUIRED COMPONENTS QDocTest)</db:para>
+<db:para>target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>qmake</db:term>
+<db:listitem>
+<db:para>QT += testcpp</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="function-documentation">
+<db:title>Function Documentation</db:title>
+<db:section xml:id="documentMe">
+<db:title>void CrossModuleRef::documentMe()</db:title>
+<db:para>Document me!</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/foo.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/foo.xml
new file mode 100644
index 000000000..da6867876
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/foo.xml
@@ -0,0 +1,43 @@
+<?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>Foo Class</db:title>
+<db:subtitle>template &lt;typename T&gt; class Foo</db:subtitle>
+<db:productname>TestTemplate</db:productname>
+<db:titleabbrev>TestTemplate Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>Class template.</db:para>
+<db:para>This class was introduced in Qt 2.0.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>Foo</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since</db:term>
+<db:listitem>
+<db:para>Qt 2.0</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>CMake</db:term>
+<db:listitem>
+<db:para>find_package(Qt6 REQUIRED COMPONENTS QDocTest)</db:para>
+<db:para>target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>qmake</db:term>
+<db:listitem>
+<db:para>QT += testcpp</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/testtemplate/expected/docbook/obsolete-classes.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/obsolete-classes.xml
new file mode 100644
index 000000000..50090db37
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/obsolete-classes.xml
@@ -0,0 +1,31 @@
+<?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>Obsolete Classes</db:title>
+<db:productname>TestTemplate</db:productname>
+<db:titleabbrev>TestTemplate Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>TestTemplate Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:section xml:id="classes-with-obsolete-members">
+<db:title>Classes with obsolete members</db:title>
+<db:variablelist role="obsoletecppmembers">
+<db:varlistentry>
+<db:term><db:emphasis role="bold">T</db:emphasis></db:term>
+<db:listitem>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml" role="class">Test</db:link> (<db:link xlink:href="testqdoc.xml" xlink:role="namespace">TestQDoc</db:link>)</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-testderived.xml" role="class">TestDerived</db:link> (<db:link xlink:href="testqdoc.xml" xlink:role="namespace">TestQDoc</db:link>)</db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="testqdoc">
+<db:title>TestQDoc</db:title>
+</db:section>
+</db:section>
+</db:article>
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
new file mode 100644
index 000000000..33aa7f2d8
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testcpp-module.xml
@@ -0,0 +1,113 @@
+<?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>QDoc Test C++ Classes</db:title>
+<db:productname>TestTemplate</db:productname>
+<db:titleabbrev>TestTemplate Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>A test module page.</db:para>
+<db:para>This module was introduced in Qt 2.0.</db:para>
+</db:abstract>
+</db:info>
+<db:para>A test module page.</db:para>
+<db:para>This module was introduced in Qt 2.0.</db:para>
+<db:section xml:id="namespaces">
+<db:title>Namespaces</db:title>
+<db:variablelist role="namespaces">
+<db:varlistentry>
+<db:term><db:link xlink:href="crossmoduleref.xml" xlink:role="namespace">CrossModuleRef</db:link></db:term>
+<db:listitem>
+<db:para>Namespace that has documented functions in multiple modules.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="testqdoc.xml" xlink:role="namespace">TestQDoc</db:link></db:term>
+<db:listitem>
+<db:para>A namespace.</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="bar.xml" xlink:role="class">Bar</db:link></db:term>
+<db:listitem>
+<db:para>Another class template.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="baz.xml" xlink:role="class">Baz</db:link></db:term>
+<db:listitem>
+<db:para>Class template template.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="foo.xml" xlink:role="class">Foo</db:link></db:term>
+<db:listitem>
+<db:para>Class template.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="testqdoc-test.xml" xlink:role="class">TestQDoc::Test</db:link></db:term>
+<db:listitem>
+<db:para>A class in a namespace.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="testqdoc-test-struct.xml" xlink:role="class">TestQDoc::Test::Struct</db:link></db:term>
+<db:listitem>
+<db:para>Templated struct.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="testqdoc-testderived.xml" xlink:role="class">TestQDoc::TestDerived</db:link></db:term>
+<db:listitem>
+<db:para>A class in a namespace, derived from Test.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="testqdoc-vec.xml" xlink:role="class">TestQDoc::Vec</db:link></db:term>
+<db:listitem>
+<db:para>Type alias that has its own reference.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:section>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:note>
+<db:para>This is just a test. /* Look, Ma! {I'm made of arguments!} */</db:para>
+</db:note>
+<db:section xml:id="linking-to-function-like-things">
+<db:title>Linking to function-like things</db:title>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml#someFunctionDefaultArg">someFunctionDefaultArg</db:link>()</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml#QDOCTEST_MACRO2">QDOCTEST_MACRO2</db:link>()</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml#QDOCTEST_MACRO2">QDOCTEST_MACRO2</db:link>(int &amp;x)</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="testcpp-module.xml#section">section()</db:link></db:para>
+</db:listitem>
+<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>
+</db:section>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc-test-struct.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc-test-struct.xml
new file mode 100644
index 000000000..67962de28
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc-test-struct.xml
@@ -0,0 +1,42 @@
+<?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>TestTemplate</db:productname>
+<db:titleabbrev>TestTemplate Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>Templated struct.</db:para>
+<db:para>This struct was introduced in Qt 2.0.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>Struct</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since</db:term>
+<db:listitem>
+<db:para>Qt 2.0</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>CMake</db:term>
+<db:listitem>
+<db:para>find_package(Qt6 REQUIRED COMPONENTS QDocTest)</db:para>
+<db:para>target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>qmake</db:term>
+<db:listitem>
+<db:para>QT += testcpp</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/testtemplate/expected/docbook/testqdoc-test.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc-test.xml
new file mode 100644
index 000000000..10e34e985
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc-test.xml
@@ -0,0 +1,197 @@
+<?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>Test Class</db:title>
+<db:subtitle>TestQDoc::Test</db:subtitle>
+<db:productname>TestTemplate</db:productname>
+<db:titleabbrev>TestTemplate Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>A class in a namespace.</db:para>
+<db:para>This class was introduced in Qt 2.0.</db:para>
+<db:note>
+<db:para>All functions in this class are <db:link xlink:href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</db:link> with the following exceptions:</db:para>
+<db:para>These functions are not <db:link xlink:href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</db:link>:</db:para>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml#someFunctionDefaultArg">someFunctionDefaultArg(int i, bool b) const</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:note>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>Test</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since</db:term>
+<db:listitem>
+<db:para>Qt 2.0</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>CMake</db:term>
+<db:listitem>
+<db:para>find_package(Qt6 REQUIRED COMPONENTS QDocTest)</db:para>
+<db:para>target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>qmake</db:term>
+<db:listitem>
+<db:para>QT += testcpp</db:para>
+</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>Group</db:term>
+<db:listitem>
+<db:para>Test is part of <db:simplelist><db:member>testgroup</db:member><db:member><db:link xlink:href="cpptypes.xml">Test C++ Types</db:link></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>
+<db:section xml:id="member-type-documentation">
+<db:title>Member Type Documentation</db:title>
+<db:section xml:id="SomeType-typedef">
+<db:title>Test::SomeType</db:title>
+<db:para>A typedef.</db:para>
+</db:section>
+<db:section xml:id="Specialized-typedef">
+<db:title>[alias] template &lt;typename T&gt; Test::Specialized</db:title>
+</db:section>
+</db:section>
+<db:section xml:id="member-function-documentation">
+<db:title>Member Function Documentation</db:title>
+<db:section xml:id="overload">
+<db:title>[protected] void Test::overload()</db:title>
+<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>
+</db:section>
+<db:section xml:id="funcTemplate">
+<db:title>[protected] void Test::funcTemplate(T1 <db:emphasis>a</db:emphasis>, T2 <db:emphasis>b</db:emphasis>)</db:title>
+<db:para>Function template with two parameters, <db:code role="parameter">a</db:code> and <db:code role="parameter">b</db:code>.</db:para>
+</db:section>
+<db:section xml:id="inlineFunction">
+<db:title>void Test::inlineFunction()</db:title>
+<db:para>An inline function, documented using the \fn QDoc command.</db:para>
+</db:section>
+<db:section xml:id="methodWithEmDashInItsDocs">
+<db:title>void Test::methodWithEmDashInItsDocs()</db:title>
+<db:para>This method has em dashes in its documentation—as you'll find represented by <db:code>---</db:code> in the sources—here and there. The important bit to note is that when passed e.g. to the \c command, the three hyphens are processed as input to the command and not replaced by an em dash.</db:para>
+<db:para>-----------------------------------------------------------------------</db:para>
+<db:para>People can still add a bunch of dashes, though, without QDoc replacing them all with a series of em dashes.</db:para>
+<db:para>—You can also start a new paragraph with an em dash, if you want to.</db:para>
+<db:section>
+<db:title>See Also</db:title>
+<db:para><db:emphasis>See also </db:emphasis>
+<db:simplelist type="vert" role="see-also">
+<db:member><db:link xlink:href="testqdoc-test.xml#methodWithEnDashInItsDocs">methodWithEnDashInItsDocs</db:link></db:member>
+</db:simplelist>
+</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="methodWithEnDashInItsDocs">
+<db:title>void Test::methodWithEnDashInItsDocs()</db:title>
+<db:para>This method has en dashes in its documentation – as you'll find represented by <db:code>--</db:code> in the sources – here and there. The important bit to note is that when passed e.g. to the \c command, the two hyphens are processed as input to the command and not replaced by an en dash. This also applies to code blocks, where otherwise, the decrement operator would get completely borked:</db:para>
+<db:programlisting language="cpp">for (int i = 42; i &amp;gt; 0; --i)
+ // Do something cool during countdown.
+</db:programlisting>
+<db:para>...as it would be silly if this would output –i instead of <db:code>--i</db:code>.</db:para>
+<db:para>-----------------------------------------------------------------------</db:para>
+<db:para>It still allows people to add a bunch of dashes, though, without replacing them all with a series of en dashes. Of course, they might want to use the \hr command instead, like this:</db:para>
+<db:para>– You can also start a new paragraph with an en dash, if you want to.</db:para>
+<db:section>
+<db:title>See Also</db:title>
+<db:para><db:emphasis>See also </db:emphasis>
+<db:simplelist type="vert" role="see-also">
+<db:member><db:link xlink:href="">methodWithEnDashInItsDocs</db:link></db:member>
+</db:simplelist>
+</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="someFunction">
+<db:title>int Test::someFunction(<db:emphasis>int</db:emphasis>, int <db:emphasis>v</db:emphasis> = 0)</db:title>
+<db:para>Function that takes a parameter <db:code role="parameter">v</db:code>. Also returns the value of <db:code role="parameter">v</db:code>.</db:para>
+</db:section>
+<db:section xml:id="someFunctionDefaultArg">
+<db:title>void Test::someFunctionDefaultArg(int <db:emphasis>i</db:emphasis>, bool <db:emphasis>b</db:emphasis> = false) const</db:title>
+<db:para>Function that takes a parameter <db:code role="parameter">i</db:code> and <db:code role="parameter">b</db:code>.</db:para>
+<db:warning>
+<db:para>This function is not <db:link xlink:href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</db:link>.</db:para>
+</db:warning></db:section>
+<db:section xml:id="virtualFun">
+<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>
+<db:section xml:id="operator-eq-eq">
+<db:title>bool operator==(const TestQDoc::Test &amp;<db:emphasis>lhs</db:emphasis>, const TestQDoc::Test &amp;<db:emphasis>rhs</db:emphasis>)</db:title>
+<db:para>Returns true if <db:code role="parameter">lhs</db:code> and <db:code role="parameter">rhs</db:code> are equal.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="macro-documentation">
+<db:title>Macro Documentation</db:title>
+<db:section xml:id="QDOCTEST_MACRO2">
+<db:title>[since Test 1.1] QDOCTEST_MACRO2(int &amp;<db:emphasis>x</db:emphasis>)</db:title>
+<db:para>A macro with argument <db:code role="parameter">x</db:code>.</db:para>
+<db:para>This macro was introduced in Test 1.1.</db:para>
+</db:section>
+<db:section xml:id="Q_INVOKABLE">
+<db:title>Q_INVOKABLE</db:title>
+<db:para>This is a mock Q_INVOKABLE for the purpose of ensuring QDoc autolink to it as expected.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="obsolete">
+<db:title>Obsolete Members for Test</db:title>
+<db:para><db:emphasis role="bold">The following members of class <db:link xlink:href="testqdoc-test.xml">Test</db:link> are deprecated.</db:emphasis> We strongly advise against using them in new code.</db:para>
+<db:section xml:id="obsolete-member-function-documentation">
+<db:title>Obsolete Member Function Documentation</db:title>
+<db:section xml:id="operator-2b-2b">
+<db:title>[deprecated] TestQDoc::Test &amp;Test::operator++()</db:title>
+<db:bridgehead renderas="sect2" xml:id="operator--">[deprecated] TestQDoc::Test &amp;Test::operator--()</db:bridgehead>
+<db:para>This function is deprecated. We strongly advise against using it in new code.</db:para>
+</db:section>
+<db:section xml:id="anotherObsoleteMember">
+<db:title>[deprecated] void Test::anotherObsoleteMember()</db:title>
+<db:para>This function is deprecated. We strongly advise against using it in new code.</db:para>
+<db:para>Use <db:link xlink:href="testqdoc-test.xml#obsoleteMember">obsoleteMember</db:link>() instead.</db:para>
+</db:section>
+<db:section xml:id="deprecatedMember">
+<db:title>[deprecated in 6.0] void Test::deprecatedMember()</db:title>
+<db:para>This function is deprecated since 6.0. We strongly advise against using it in new code.</db:para>
+<db:para>Use <db:link xlink:href="testqdoc-test.xml#someFunction">someFunction</db:link>() instead.</db:para>
+</db:section>
+<db:section xml:id="obsoleteMember">
+<db:title>[deprecated] void Test::obsoleteMember()</db:title>
+<db:para>This function is deprecated. We strongly advise against using it in new code.</db:para>
+<db:para>Use <db:link xlink:href="testqdoc-test.xml#someFunction">someFunction</db:link>() instead.</db:para>
+</db:section>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc-testderived.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc-testderived.xml
new file mode 100644
index 000000000..602faea3b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc-testderived.xml
@@ -0,0 +1,83 @@
+<?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>TestDerived Class</db:title>
+<db:subtitle>TestQDoc::TestDerived</db:subtitle>
+<db:productname>TestTemplate</db:productname>
+<db:titleabbrev>TestTemplate Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>A class in a namespace, derived from <db:link xlink:href="testqdoc-test.xml">Test</db:link>.</db:para>
+<db:para>This class was introduced in Qt 2.0.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>TestDerived</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since</db:term>
+<db:listitem>
+<db:para>Qt 2.0</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>CMake</db:term>
+<db:listitem>
+<db:para>find_package(Qt6 REQUIRED COMPONENTS QDocTest)</db:para>
+<db:para>target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>qmake</db:term>
+<db:listitem>
+<db:para>QT += testcpp</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Inherits</db:term>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml" xlink:role="class">TestQDoc::Test</db:link></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="member-type-documentation">
+<db:title>Member Type Documentation</db:title>
+<db:section xml:id="DerivedType-typedef">
+<db:title>[alias] TestDerived::DerivedType</db:title>
+<db:para>An aliased typedef.</db:para>
+</db:section>
+<db:section xml:id="NotTypedef-typedef">
+<db:title>[alias] TestDerived::NotTypedef</db:title>
+<db:para>I'm an alias, not a typedef.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="member-function-documentation">
+<db:title>Member Function Documentation</db:title>
+<db:section xml:id="someValue">
+<db:title>TestQDoc::TestDerived::NotTypedef TestDerived::someValue()</db:title>
+<db:para>Returns a value using an aliases type.</db:para>
+</db:section>
+<db:section xml:id="virtualFun">
+<db:title>[override virtual] void TestDerived::virtualFun()</db:title>
+<db:para>Reimplements: <db:link xlink:href="testqdoc-test.xml#virtualFun" role="function">Test::virtualFun()</db:link>.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="obsolete">
+<db:title>Obsolete Members for TestDerived</db:title>
+<db:para><db:emphasis role="bold">The following members of class <db:link xlink:href="testqdoc-testderived.xml">TestDerived</db:link> are deprecated.</db:emphasis> We strongly advise against using them in new code.</db:para>
+<db:section xml:id="obsolete-member-function-documentation">
+<db:title>Obsolete Member Function Documentation</db:title>
+<db:section xml:id="staticObsoleteMember">
+<db:title>[static, deprecated] void TestDerived::staticObsoleteMember()</db:title>
+<db:para>This function is deprecated. We strongly advise against using it in new code.</db:para>
+<db:para>Static obsolete method.</db:para>
+</db:section>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc-vec.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc-vec.xml
new file mode 100644
index 000000000..d276da7af
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc-vec.xml
@@ -0,0 +1,43 @@
+<?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>Vec Class</db:title>
+<db:subtitle>template &lt;typename T&gt; class TestQDoc::Vec</db:subtitle>
+<db:productname>TestTemplate</db:productname>
+<db:titleabbrev>TestTemplate Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>Type alias that has its own reference.</db:para>
+<db:para>This class was introduced in Qt 2.0.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>Vec</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since</db:term>
+<db:listitem>
+<db:para>Qt 2.0</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>CMake</db:term>
+<db:listitem>
+<db:para>find_package(Qt6 REQUIRED COMPONENTS QDocTest)</db:para>
+<db:para>target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>qmake</db:term>
+<db:listitem>
+<db:para>QT += testcpp</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/testtemplate/expected/docbook/testqdoc.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc.xml
new file mode 100644
index 000000000..cd575b1e8
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc.xml
@@ -0,0 +1,67 @@
+<?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>TestQDoc Namespace</db:title>
+<db:productname>TestTemplate</db:productname>
+<db:titleabbrev>TestTemplate Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>A namespace.</db:para>
+<db:para>This namespace was introduced in Qt 2.0.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>TestCPP</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since</db:term>
+<db:listitem>
+<db:para>Qt 2.0</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>CMake</db:term>
+<db:listitem>
+<db:para>find_package(Qt6 REQUIRED COMPONENTS QDocTest)</db:para>
+<db:para>target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>qmake</db:term>
+<db:listitem>
+<db:para>QT += testcpp</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:section xml:id="usage">
+<db:title>Usage</db:title>
+<db:para>This namespace is for testing QDoc output.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="classes">
+<db:title>Classes</db:title>
+<db:section>
+<db:title>class <db:link xlink:href="testqdoc-test.xml" xlink:role="class">Test</db:link></db:title>
+<db:para>A class in a namespace.</db:para>
+</db:section>
+<db:section>
+<db:title>class <db:link xlink:href="testqdoc-testderived.xml" xlink:role="class">TestDerived</db:link></db:title>
+<db:para>A class in a namespace, derived from <db:link xlink:href="testqdoc-test.xml">Test</db:link>.</db:para>
+</db:section>
+<db:section>
+<db:title>class <db:link xlink:href="testqdoc-vec.xml" xlink:role="class">Vec</db:link></db:title>
+<db:para>Type alias that has its own reference.</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="macro-documentation">
+<db:title>Macro Documentation</db:title>
+<db:section xml:id="QDOCTEST_MACRO">
+<db:title>QDOCTEST_MACRO</db:title>
+</db:section>
+</db:section>
+</db:article>
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
new file mode 100644
index 000000000..c5c8511d7
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/autolinking.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classlists.qdoc -->
+ <title>Autolinking | TestTemplate</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#testqdoc">TestQDoc</a></li>
+<li class="level1"><a href="#someprop">someProp</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Autolinking</h1>
+<!-- $$$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>Autolinks:</p>
+<ul>
+<li><a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></li>
+</ul>
+<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>
+</ul>
+<h2 id="someprop">someProp</h2>
+</div>
+<!-- @@@autolinking.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/bar.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/bar.html
new file mode 100644
index 000000000..3ce7052c1
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/bar.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testtemplate.cpp -->
+ <meta name="description" content="Another class template.">
+ <title>Bar Class | TestTemplate</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>Bar</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">Bar Class</h1>
+<span class="small-subtitle" translate="no">template &lt;typename T, typename D&gt; class Bar</span>
+<!-- $$$Bar-brief -->
+<p>Another class template. <a href="#details">More...</a></p>
+<!-- @@@Bar -->
+<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;Bar&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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>
+</table></div>
+<!-- $$$Bar-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Bar -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/baz.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/baz.html
new file mode 100644
index 000000000..03738ff89
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/baz.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testtemplate.cpp -->
+ <meta name="description" content="Class template template.">
+ <title>Baz Struct | TestTemplate</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>Baz</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">Baz Struct</h1>
+<span class="small-subtitle" translate="no">template &lt;template &lt;typename&gt; typename X, typename Y&gt; struct Baz</span>
+<!-- $$$Baz-brief -->
+<p>Class template template. <a href="#details">More...</a></p>
+<!-- @@@Baz -->
+<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;Baz&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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>
+</table></div>
+<!-- $$$Baz-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Baz -->
+</body>
+</html>
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
new file mode 100644
index 000000000..8fbea8167
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/cpptypes.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classlists.qdoc -->
+ <title>Test C++ Types | TestTemplate</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Test C++ Types</h1>
+<!-- $$$cpptypes-description -->
+<div class="descr" id="details">
+<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>
+<!-- @@@cpptypes -->
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-test.html">TestQDoc::Test</a></p></td><td class="tblDescr"><p>A class in a namespace</p></td></tr>
+</table></div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/crossmoduleref.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/crossmoduleref.html
new file mode 100644
index 000000000..551b86690
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/crossmoduleref.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="Namespace that has documented functions in multiple modules.">
+ <title>CrossModuleRef Namespace | TestTemplate</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#functions">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">CrossModuleRef Namespace</h1>
+<!-- $$$CrossModuleRef-brief -->
+<p>Namespace that has documented functions in multiple modules. <a href="#details">More...</a></p>
+<!-- @@@CrossModuleRef -->
+<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;CrossModuleRef&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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 3.0</td></tr>
+</table></div>
+<h2 id="functions">Functions</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="crossmoduleref.html#documentMe" translate="no">documentMe</a></b>()</td></tr>
+</table></div>
+<!-- $$$CrossModuleRef-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@CrossModuleRef -->
+<div class="func">
+<h2>Function Documentation</h2>
+<!-- $$$documentMe[overload1]$$$documentMe -->
+<h3 class="fn" translate="no" id="documentMe"><span class="type">void</span> CrossModuleRef::<span class="name">documentMe</span>()</h3>
+<p>Document me!</p>
+<!-- @@@documentMe -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/foo.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/foo.html
new file mode 100644
index 000000000..56e5bdd34
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/foo.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testtemplate.cpp -->
+ <meta name="description" content="Class template.">
+ <title>Foo Class | TestTemplate</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>Foo</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">Foo Class</h1>
+<span class="small-subtitle" translate="no">template &lt;typename T&gt; class Foo</span>
+<!-- $$$Foo-brief -->
+<p>Class template. <a href="#details">More...</a></p>
+<!-- @@@Foo -->
+<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;Foo&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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>
+</table></div>
+<!-- $$$Foo-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Foo -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/obsolete-classes.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/obsolete-classes.html
new file mode 100644
index 000000000..28e5842e7
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/obsolete-classes.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- classlists.qdoc -->
+ <title>Obsolete Classes | TestTemplate</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#classes-with-obsolete-members">Classes with obsolete members</a></li>
+<li class="level2"><a href="#testqdoc">TestQDoc</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Obsolete Classes</h1>
+<!-- $$$obsolete-classes.html-description -->
+<div class="descr" id="details">
+<h2 id="classes-with-obsolete-members">Classes with obsolete members</h2>
+<div class="flowListDiv" translate="no">
+<dl class="flowList odd"><dt class="alphaChar"><b>T</b></dt>
+<dd><a href="testqdoc-test-obsolete.html">Test</a> (<a href="testqdoc.html">TestQDoc</a>)</dd>
+<dd><a href="testqdoc-testderived-obsolete.html">TestDerived</a> (<a href="testqdoc.html">TestQDoc</a>)</dd>
+</dl>
+</div>
+<h3 id="testqdoc">TestQDoc</h3>
+</div>
+<!-- @@@obsolete-classes.html -->
+</body>
+</html>
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
new file mode 100644
index 000000000..77f0d130d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testcpp-module.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A test module page.">
+ <title>QDoc Test C++ Classes | TestTemplate</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>
+<li class="level2"><a href="#linking-to-function-like-things">Linking to function-like things</a></li>
+<li class="level3"><a href="#section">section()</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">QDoc Test C++ Classes</h1>
+<!-- $$$TestCPP-brief -->
+<p>A test module page. <a href="#details">More...</a></p>
+<!-- @@@TestCPP -->
+<p>This module was introduced in Qt 2.0.</p>
+<h2 id="namespaces">Namespaces</h2>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="crossmoduleref.html">CrossModuleRef</a></p></td><td class="tblDescr"><p>Namespace that has documented functions in multiple modules</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="testqdoc.html">TestQDoc</a></p></td><td class="tblDescr"><p>A namespace</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="bar.html">Bar</a></p></td><td class="tblDescr"><p>Another class template</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="baz.html">Baz</a></p></td><td class="tblDescr"><p>Class template template</p></td></tr>
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="foo.html">Foo</a></p></td><td class="tblDescr"><p>Class template</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-test.html">TestQDoc::Test</a></p></td><td class="tblDescr"><p>A class in a namespace</p></td></tr>
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-test-struct.html">TestQDoc::Test::Struct</a></p></td><td class="tblDescr"><p>Templated struct</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></p></td><td class="tblDescr"><p>A class in a namespace, derived from Test</p></td></tr>
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="testqdoc-vec.html">TestQDoc::Vec</a></p></td><td class="tblDescr"><p>Type alias that has its own reference</p></td></tr>
+</table></div>
+<!-- $$$TestCPP-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<div class="admonition note">
+<p><b>Note: </b>This is just a test. /* Look, Ma! {I'm made of arguments!} */</p>
+</div>
+<h3 id="linking-to-function-like-things">Linking to function-like things</h3>
+<ul>
+<li><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a>()</li>
+<li><a href="testqdoc-test.html#QDOCTEST_MACRO2" translate="no">QDOCTEST_MACRO2</a>()</li>
+<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>
+<!-- @@@TestCPP -->
+</body>
+</html>
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
new file mode 100644
index 000000000..63053e36b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test-members.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace.">
+ <title>List of All Members for Test | TestTemplate</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>Test</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for Test</h1>
+<p>This is the complete list of members for <a href="testqdoc-test.html">TestQDoc::Test</a>, including inherited members.</p>
+<ul>
+<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>
+<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>
+<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>
+<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-obsolete.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test-obsolete.html
new file mode 100644
index 000000000..e70edce76
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test-obsolete.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace.">
+ <title>Obsolete Members for Test | TestTemplate</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>Test</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">Obsolete Members for Test</h1>
+<p><b>The following members of class <a href="testqdoc-test.html" translate="no">Test</a> are deprecated.</b> They are provided to keep old source code working. We strongly advise against using them in new code.</p>
+<h2>Public Functions</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#anotherObsoleteMember" translate="no">anotherObsoleteMember</a></b>()</td></tr>
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated in 6.0)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#deprecatedMember" translate="no">deprecatedMember</a></b>()</td></tr>
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#obsoleteMember" translate="no">obsoleteMember</a></b>()</td></tr>
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated)</code> TestQDoc::Test &amp;</td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#operator-2b-2b" translate="no">operator++</a></b>()</td></tr>
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated)</code> TestQDoc::Test &amp;</td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#operator--" translate="no">operator--</a></b>()</td></tr>
+</table></div>
+<h2>Member Function Documentation</h2>
+<!-- $$$ -->
+<div class="fngroup">
+<h3 class="fn fngroupitem" translate="no" id="operator-2b-2b"><code class="details extra" translate="no">[deprecated]</code> <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;Test::<span class="name">operator++</span>()</h3><h3 class="fn fngroupitem" translate="no" id="operator--"><code class="details extra" translate="no">[deprecated]</code> <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;Test::<span class="name">operator--</span>()</h3></div>
+<p>This function is deprecated. We strongly advise against using it in new code.</p>
+<!-- @@@ -->
+<!-- $$$anotherObsoleteMember[overload1]$$$anotherObsoleteMember -->
+<h3 class="fn" translate="no" id="anotherObsoleteMember"><code class="details extra" translate="no">[deprecated]</code> <span class="type">void</span> Test::<span class="name">anotherObsoleteMember</span>()</h3>
+<p>This function is deprecated. We strongly advise against using it in new code.</p>
+<p>Use <a href="testqdoc-test-obsolete.html#obsoleteMember" translate="no">obsoleteMember</a>() instead.</p>
+<!-- @@@anotherObsoleteMember -->
+<!-- $$$deprecatedMember[overload1]$$$deprecatedMember -->
+<h3 class="fn" translate="no" id="deprecatedMember"><code class="details extra" translate="no">[deprecated in 6.0]</code> <span class="type">void</span> Test::<span class="name">deprecatedMember</span>()</h3>
+<p>This function is deprecated since 6.0. We strongly advise against using it in new code.</p>
+<p>Use <a href="testqdoc-test.html#someFunction" translate="no">someFunction</a>() instead.</p>
+<!-- @@@deprecatedMember -->
+<!-- $$$obsoleteMember[overload1]$$$obsoleteMember -->
+<h3 class="fn" translate="no" id="obsoleteMember"><code class="details extra" translate="no">[deprecated]</code> <span class="type">void</span> Test::<span class="name">obsoleteMember</span>()</h3>
+<p>This function is deprecated. We strongly advise against using it in new code.</p>
+<p>Use <a href="testqdoc-test.html#someFunction" translate="no">someFunction</a>() instead.</p>
+<!-- @@@obsoleteMember -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test-struct.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test-struct.html
new file mode 100644
index 000000000..442f1341c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test-struct.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="Templated struct.">
+ <title>Struct Struct | TestTemplate</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>Struct</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">Struct Struct</h1>
+<span class="small-subtitle" translate="no">template &lt;typename D, typename T&gt; struct <a href="testqdoc.html" translate="no">TestQDoc</a>::<a href="testqdoc-test.html" translate="no">Test</a>::Struct</span>
+<!-- $$$Struct-brief -->
+<p>Templated struct. <a href="#details">More...</a></p>
+<!-- @@@Struct -->
+<p>This struct was introduced in Qt 2.0.</p>
+<!-- $$$Struct-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Struct -->
+</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
new file mode 100644
index 000000000..b2eae64e4
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace.">
+ <title>Test Class | TestTemplate</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>Test</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#public-types">Public Types</a></li>
+<li class="level1"><a href="#public-functions">Public Functions</a></li>
+<li class="level1"><a href="#protected-functions">Protected Functions</a></li>
+<li class="level1"><a href="#related-non-members">Related Non-Members</a></li>
+<li class="level1"><a href="#macros">Macros</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">Test Class</h1>
+<span class="small-subtitle" translate="no">class <a href="testqdoc.html" translate="no">TestQDoc</a>::Test</span>
+<!-- $$$Test-brief -->
+<p>A class in a namespace. <a href="#details">More...</a></p>
+<!-- @@@Test -->
+<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;Test&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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"> Inherited By:</td><td class="memItemRight bottomAlign"> <p><a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></p>
+</td></tr>
+</table></div>
+<ul>
+<li><a href="testqdoc-test-members.html">List of all members, including inherited members</a></li>
+<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>
+<ul>
+<li><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a>(int i, bool b) const</li>
+</ul>
+<h2 id="public-types">Public Types</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since 2.0)</code> struct </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-struct.html" translate="no">Struct</a></b></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#SomeType-typedef" translate="no">SomeType</a></b></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#Specialized-typedef" translate="no">Specialized</a></b></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>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#methodWithEnDashInItsDocs" translate="no">methodWithEnDashInItsDocs</a></b>()</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">
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#funcTemplate" translate="no">funcTemplate</a></b>(T1 <i>a</i>, T2 <i>b</i>)</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#overload" translate="no">overload</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since Test 1.2)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#overload-1" translate="no">overload</a></b>(bool <i>b</i>)</td></tr>
+</table></div>
+<h2 id="related-non-members">Related Non-Members</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> bool </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#operator-eq-eq" translate="no">operator==</a></b>(const TestQDoc::Test &amp;<i>lhs</i>, const TestQDoc::Test &amp;<i>rhs</i>)</td></tr>
+</table></div>
+<h2 id="macros">Macros</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since Test 1.1)</code> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#QDOCTEST_MACRO2" translate="no">QDOCTEST_MACRO2</a></b>(int &amp;<i>x</i>)</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#Q_INVOKABLE" translate="no">Q_INVOKABLE</a></b></td></tr>
+</table></div>
+<!-- $$$Test-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Test -->
+<div class="types">
+<h2>Member Type Documentation</h2>
+<!-- $$$SomeType -->
+<h3 class="fn" translate="no" id="SomeType-typedef">Test::<span class="name">SomeType</span></h3>
+<p>A typedef.</p>
+<!-- @@@SomeType -->
+<!-- $$$Specialized -->
+<h3 class="fn" translate="no" id="Specialized-typedef"><code class="details extra" translate="no">[alias]</code> template &lt;typename T&gt; Test::<span class="name">Specialized</span></h3>
+<!-- @@@Specialized -->
+</div>
+<div class="func">
+<h2>Member Function Documentation</h2>
+<!-- $$$ -->
+<div class="fngroup">
+<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>
+<!-- @@@funcPtr -->
+<!-- $$$funcTemplate[overload1]$$$funcTemplateT1T2 -->
+<h3 class="fn" translate="no" id="funcTemplate"><code class="details extra" translate="no">[protected]</code> template &lt;typename T1, typename T2&gt; <span class="type">void</span> Test::<span class="name">funcTemplate</span>(<span class="type">T1</span> <i>a</i>, <span class="type">T2</span> <i>b</i>)</h3>
+<p>Function template with two parameters, <i translate="no">a</i> and <i translate="no">b</i>.</p>
+<!-- @@@funcTemplate -->
+<!-- $$$inlineFunction[overload1]$$$inlineFunction -->
+<h3 class="fn" translate="no" id="inlineFunction"><span class="type">void</span> Test::<span class="name">inlineFunction</span>()</h3>
+<p>An inline function, documented using the \fn QDoc command.</p>
+<!-- @@@inlineFunction -->
+<!-- $$$methodWithEmDashInItsDocs[overload1]$$$methodWithEmDashInItsDocs -->
+<h3 class="fn" translate="no" id="methodWithEmDashInItsDocs"><span class="type">void</span> Test::<span class="name">methodWithEmDashInItsDocs</span>()</h3>
+<p>This method has em dashes in its documentation&mdash;as you'll find represented by <code translate="no">---</code> in the sources&mdash;here and there. The important bit to note is that when passed e.g. to the \c command, the three hyphens are processed as input to the command and not replaced by an em dash.</p>
+<p>-----------------------------------------------------------------------</p>
+<p>People can still add a bunch of dashes, though, without QDoc replacing them all with a series of em dashes.</p>
+<p>&mdash;You can also start a new paragraph with an em dash, if you want to.</p>
+<p><b>See also </b><a href="testqdoc-test.html#methodWithEnDashInItsDocs" translate="no">methodWithEnDashInItsDocs</a>.</p>
+<!-- @@@methodWithEmDashInItsDocs -->
+<!-- $$$methodWithEnDashInItsDocs[overload1]$$$methodWithEnDashInItsDocs -->
+<h3 class="fn" translate="no" id="methodWithEnDashInItsDocs"><span class="type">void</span> Test::<span class="name">methodWithEnDashInItsDocs</span>()</h3>
+<p>This method has en dashes in its documentation &ndash; as you'll find represented by <code translate="no">--</code> in the sources &ndash; here and there. The important bit to note is that when passed e.g. to the \c command, the two hyphens are processed as input to the command and not replaced by an en dash. This also applies to code blocks, where otherwise, the decrement operator would get completely borked:</p>
+<pre class="cpp" translate="no"><span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">42</span>; i <span class="operator">&gt;</span> <span class="number">0</span>; <span class="operator">-</span><span class="operator">-</span>i)
+ <span class="comment">// Do something cool during countdown.</span></pre>
+<p>...as it would be silly if this would output &ndash;i instead of <code translate="no">--i</code>.</p>
+<p>-----------------------------------------------------------------------</p>
+<p>It still allows people to add a bunch of dashes, though, without replacing them all with a series of en dashes. Of course, they might want to use the \hr command instead, like this:</p>
+<hr />
+<p>&ndash; You can also start a new paragraph with an en dash, if you want to.</p>
+<p><b>See also </b>methodWithEnDashInItsDocs.</p>
+<!-- @@@methodWithEnDashInItsDocs -->
+<!-- $$$someFunction[overload1]$$$someFunctionintint -->
+<h3 class="fn" translate="no" id="someFunction"><span class="type">int</span> Test::<span class="name">someFunction</span>(<span class="type">int</span>, <span class="type">int</span> <i>v</i> = 0)</h3>
+<p>Function that takes a parameter <i translate="no">v</i>. Also returns the value of <i translate="no">v</i>.</p>
+<!-- @@@someFunction -->
+<!-- $$$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>
+<!-- @@@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>
+<!-- $$$operator==[overload1]$$$operator==constTestQDoc::Test&constTestQDoc::Test& -->
+<h3 class="fn" translate="no" id="operator-eq-eq"><span class="type">bool</span> <span class="name">operator==</span>(const <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;<i>lhs</i>, const <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;<i>rhs</i>)</h3>
+<p>Returns true if <i translate="no">lhs</i> and <i translate="no">rhs</i> are equal.</p>
+<!-- @@@operator== -->
+</div>
+<div class="macros">
+<h2>Macro Documentation</h2>
+<!-- $$$QDOCTEST_MACRO2[overload1]$$$QDOCTEST_MACRO2int& -->
+<h3 class="fn" translate="no" id="QDOCTEST_MACRO2"><code class="details extra" translate="no">[since Test 1.1]</code> <span class="name">QDOCTEST_MACRO2</span>(<span class="type">int</span> &amp;<i>x</i>)</h3>
+<p>A macro with argument <i translate="no">x</i>.</p>
+<p>This macro was introduced in Test 1.1.</p>
+<!-- @@@QDOCTEST_MACRO2 -->
+<!-- $$$Q_INVOKABLE[overload1]$$$Q_INVOKABLE -->
+<h3 class="fn" translate="no" id="Q_INVOKABLE"><span class="name">Q_INVOKABLE</span></h3>
+<p>This is a mock Q_INVOKABLE for the purpose of ensuring QDoc autolink to it as expected.</p>
+<!-- @@@Q_INVOKABLE -->
+</div>
+</body>
+</html>
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
new file mode 100644
index 000000000..0ab181f71
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-testderived-members.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace, derived from Test.">
+ <title>List of All Members for TestDerived | TestTemplate</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>TestDerived</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for TestDerived</h1>
+<p>This is the complete list of members for <a href="testqdoc-testderived.html">TestQDoc::TestDerived</a>, including inherited members.</p>
+<div class="table"><table class="propsummary" translate="no">
+<tr><td class="topAlign"><ul>
+<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-testderived.html#DerivedType-typedef" translate="no">DerivedType</a></b></span></li>
+<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#NotTypedef-typedef" translate="no">NotTypedef</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#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>
+<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#methodWithEmDashInItsDocs" translate="no">methodWithEmDashInItsDocs</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>
+<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-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>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-testderived-obsolete.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-testderived-obsolete.html
new file mode 100644
index 000000000..3eda5f832
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-testderived-obsolete.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace, derived from Test.">
+ <title>Obsolete Members for TestDerived | TestTemplate</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>TestDerived</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">Obsolete Members for TestDerived</h1>
+<p><b>The following members of class <a href="testqdoc-testderived.html" translate="no">TestDerived</a> are deprecated.</b> They are provided to keep old source code working. We strongly advise against using them in new code.</p>
+<h2>Static Public Members</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft topAlign rightAlign"> <code class="summary extra" translate="no">(deprecated)</code> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived-obsolete.html#staticObsoleteMember" translate="no">staticObsoleteMember</a></b>()</td></tr>
+</table></div>
+<h2>Member Function Documentation</h2>
+<!-- $$$staticObsoleteMember[overload1]$$$staticObsoleteMember -->
+<h3 class="fn" translate="no" id="staticObsoleteMember"><code class="details extra" translate="no">[static, deprecated]</code> <span class="type">void</span> TestDerived::<span class="name">staticObsoleteMember</span>()</h3>
+<p>This function is deprecated. We strongly advise against using it in new code.</p>
+<p>Static obsolete method.</p>
+<!-- @@@staticObsoleteMember -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-testderived.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-testderived.html
new file mode 100644
index 000000000..b96fefe51
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-testderived.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A class in a namespace, derived from Test.">
+ <title>TestDerived Class | TestTemplate</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>TestDerived</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#public-types">Public Types</a></li>
+<li class="level1"><a href="#public-functions">Public Functions</a></li>
+<li class="level1"><a href="#reimplemented-public-functions">Reimplemented 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">TestDerived Class</h1>
+<span class="small-subtitle" translate="no">class <a href="testqdoc.html" translate="no">TestQDoc</a>::TestDerived</span>
+<!-- $$$TestDerived-brief -->
+<p>A class in a namespace, derived from <a href="testqdoc-test.html" translate="no">Test</a>. <a href="#details">More...</a></p>
+<!-- @@@TestDerived -->
+<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;TestDerived&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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"> Inherits:</td><td class="memItemRight bottomAlign"> <a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></td></tr>
+</table></div>
+<ul>
+<li><a href="testqdoc-testderived-members.html">List of all members, including inherited members</a></li>
+<li><a href="testqdoc-testderived-obsolete.html">Deprecated members</a></li>
+</ul>
+<h2 id="public-types">Public Types</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#DerivedType-typedef" translate="no">DerivedType</a></b></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#NotTypedef-typedef" translate="no">NotTypedef</a></b></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"> TestQDoc::TestDerived::NotTypedef </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#someValue" translate="no">someValue</a></b>()</td></tr>
+</table></div>
+<h2 id="reimplemented-public-functions">Reimplemented Public Functions</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> virtual void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#virtualFun" translate="no">virtualFun</a></b>() override</td></tr>
+</table></div>
+<!-- $$$TestDerived-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@TestDerived -->
+<div class="types">
+<h2>Member Type Documentation</h2>
+<!-- $$$DerivedType -->
+<h3 class="fn" translate="no" id="DerivedType-typedef"><code class="details extra" translate="no">[alias]</code> TestDerived::<span class="name">DerivedType</span></h3>
+<p>An aliased typedef.</p>
+<!-- @@@DerivedType -->
+<!-- $$$NotTypedef -->
+<h3 class="fn" translate="no" id="NotTypedef-typedef"><code class="details extra" translate="no">[alias]</code> TestDerived::<span class="name">NotTypedef</span></h3>
+<p>I'm an alias, not a typedef.</p>
+<!-- @@@NotTypedef -->
+</div>
+<div class="func">
+<h2>Member Function Documentation</h2>
+<!-- $$$someValue[overload1]$$$someValue -->
+<h3 class="fn" translate="no" id="someValue"><span class="type"><a href="testqdoc-testderived.html#NotTypedef-typedef" translate="no">TestQDoc::TestDerived::NotTypedef</a></span> TestDerived::<span class="name">someValue</span>()</h3>
+<p>Returns a value using an aliases type.</p>
+<!-- @@@someValue -->
+<!-- $$$virtualFun[overload1]$$$virtualFun -->
+<h3 class="fn" translate="no" id="virtualFun"><code class="details extra" translate="no">[override virtual]</code> <span class="type">void</span> TestDerived::<span class="name">virtualFun</span>()</h3>
+<p>Reimplements: <a href="testqdoc-test.html#virtualFun" translate="no">Test::virtualFun</a>().</p>
+<!-- @@@virtualFun -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-vec.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-vec.html
new file mode 100644
index 000000000..a3085f6b3
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-vec.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="Type alias that has its own reference.">
+ <title>Vec Class | TestTemplate</title>
+</head>
+<body>
+<li><a href="testcpp-module.html" translate="no">C++ Classes</a></li>
+<li>Vec</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">Vec Class</h1>
+<span class="small-subtitle" translate="no">template &lt;typename T&gt; class <a href="testqdoc.html" translate="no">TestQDoc</a>::Vec</span>
+<!-- $$$Vec-brief -->
+<p>Type alias that has its own reference. <a href="#details">More...</a></p>
+<!-- @@@Vec -->
+<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;Vec&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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>
+</table></div>
+<!-- $$$Vec-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Vec -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc.html
new file mode 100644
index 000000000..516e256da
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <meta name="description" content="A namespace.">
+ <title>TestQDoc Namespace | TestTemplate</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="#macros">Macros</a></li>
+<li class="level1"><a href="#details">Detailed Description</a></li>
+<li class="level2"><a href="#usage">Usage</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">TestQDoc Namespace</h1>
+<!-- $$$TestQDoc-brief -->
+<p>A namespace. <a href="#details">More...</a></p>
+<!-- @@@TestQDoc -->
+<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;TestCPP&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 REQUIRED COMPONENTS QDocTest) <br/>
+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>
+</table></div>
+<h2 id="classes">Classes</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since 2.0)</code> class </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html" translate="no">Test</a></b></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since 2.0)</code> class </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html" translate="no">TestDerived</a></b></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> <code class="summary extra" translate="no">(since 2.0)</code> class </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-vec.html" translate="no">Vec</a></b></td></tr>
+</table></div>
+<h2 id="macros">Macros</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc.html#QDOCTEST_MACRO" translate="no">QDOCTEST_MACRO</a></b></td></tr>
+</table></div>
+<!-- $$$TestQDoc-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<h3 id="usage">Usage</h3>
+<p>This namespace is for testing QDoc output.</p>
+</div>
+<!-- @@@TestQDoc -->
+<div class="classes">
+<h2>Classes</h2>
+<h3> class <a href="testqdoc-test.html">Test</a></h3><!-- $$$Test-brief -->
+<p>A class in a namespace. <a href="testqdoc-test.html#details">More...</a></p>
+<!-- @@@Test -->
+<h3> class <a href="testqdoc-testderived.html">TestDerived</a></h3><!-- $$$TestDerived-brief -->
+<p>A class in a namespace, derived from <a href="testqdoc-test.html" translate="no">Test</a>. <a href="testqdoc-testderived.html#details">More...</a></p>
+<!-- @@@TestDerived -->
+<h3> class <a href="testqdoc-vec.html">Vec</a></h3><!-- $$$Vec-brief -->
+<p>Type alias that has its own reference. <a href="testqdoc-vec.html#details">More...</a></p>
+<!-- @@@Vec -->
+</div>
+<div class="macros">
+<h2>Macro Documentation</h2>
+<!-- $$$QDOCTEST_MACRO[overload1]$$$QDOCTEST_MACRO -->
+<h3 class="fn" translate="no" id="QDOCTEST_MACRO"><span class="name">QDOCTEST_MACRO</span></h3>
+<!-- @@@QDOCTEST_MACRO -->
+</div>
+</body>
+</html>
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
new file mode 100644
index 000000000..3f227d133
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testtemplate.index
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="TestTemplate Reference Documentation" version="" project="TestTemplate">
+ <namespace name="" status="active" access="public" module="testtemplate">
+ <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="0" meta="macrowithoutparams" signature="QDOCTEST_MACRO"/>
+ <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="Q_INVOKABLE" href="testqdoc-test.html#Q_INVOKABLE" status="active" access="public" documented="true" related="2" meta="macrowithoutparams" signature="Q_INVOKABLE"/>
+ <page name="autolinking.html" href="autolinking.html" status="active" location="classlists.qdoc" documented="true" subtype="page" title="Autolinking" fulltitle="Autolinking" subtitle="">
+ <contents name="testqdoc" title="TestQDoc" level="1"/>
+ <contents name="someprop" title="someProp" level="1"/>
+ </page>
+ <class name="Bar" href="bar.html" status="active" access="public" location="testtemplate.h" since="2.0" documented="true" module="TestCPP" brief="Another class template"/>
+ <struct name="Baz" href="baz.html" status="active" access="public" location="testtemplate.h" since="2.0" documented="true" module="TestCPP" brief="Class template template"/>
+ <namespace name="CrossModuleRef" href="crossmoduleref.html" status="active" access="public" location="testcpp.h" since="3.0" documented="true" module="TestCPP" brief="Namespace that has documented functions in multiple modules">
+ <function name="documentMe" fullname="CrossModuleRef::documentMe" href="crossmoduleref.html#documentMe" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void documentMe()"/>
+ </namespace>
+ <class name="DontLinkToMe" href="dontlinktome.html" status="ignored" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="Class that does not generate documentation"/>
+ <class name="Foo" href="foo.html" status="active" access="public" location="testtemplate.h" since="2.0" documented="true" module="TestCPP" brief="Class template"/>
+ <page name="obsolete-classes.html" href="obsolete-classes.html" status="active" location="classlists.qdoc" documented="true" subtype="page" title="Obsolete Classes" fulltitle="Obsolete Classes" subtitle="">
+ <contents name="classes-with-obsolete-members" title="Classes with obsolete members" level="1"/>
+ <contents name="testqdoc" title="TestQDoc" level="2"/>
+ </page>
+ <namespace name="TestQDoc" href="testqdoc.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="A namespace">
+ <contents name="usage" title="Usage" level="1"/>
+ <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="0" meta="macrowithoutparams" signature="QDOCTEST_MACRO"/>
+ <class threadsafety="reentrant" name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" groups="cpptypes,testgroup" module="TestCPP" brief="A class in a namespace">
+ <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="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)">
+ <parameter type="bool" name="b" default=""/>
+ <parameter type="const char *" name="s" default=""/>
+ </function>
+ <function name="funcTemplate" fullname="TestQDoc::Test::funcTemplate" href="testqdoc-test.html#funcTemplate" status="active" access="protected" location="testcpp.h" documented="true" meta="plain" type="void" brief="Function template with two parameters, a and b" signature="void funcTemplate(T1 a, T2 b)">
+ <parameter type="T1" name="a" default=""/>
+ <parameter type="T2" name="b" default=""/>
+ </function>
+ <function name="inlineFunction" fullname="TestQDoc::Test::inlineFunction" href="testqdoc-test.html#inlineFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" brief="An inline function, documented using the \fn QDoc command" signature="void inlineFunction()"/>
+ <function name="methodWithEmDashInItsDocs" fullname="TestQDoc::Test::methodWithEmDashInItsDocs" href="testqdoc-test.html#methodWithEmDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEmDashInItsDocs()"/>
+ <function name="methodWithEnDashInItsDocs" fullname="TestQDoc::Test::methodWithEnDashInItsDocs" href="testqdoc-test.html#methodWithEnDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEnDashInItsDocs()"/>
+ <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=""/>
+ </function>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload" status="active" access="protected" location="testcpp.h" documented="true" meta="plain" type="void" signature="void overload()"/>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload-1" status="active" access="protected" location="testcpp.h" documented="true" since="Test 1.2" meta="plain" overload="true" overload-number="1" type="void" signature="void overload(bool b)">
+ <parameter type="bool" name="b" default=""/>
+ </function>
+ <function name="someFunction" fullname="TestQDoc::Test::someFunction" href="testqdoc-test.html#someFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="int" signature="int someFunction(int, int v)">
+ <parameter type="int" name="" default=""/>
+ <parameter type="int" name="v" default="0"/>
+ </function>
+ <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" threadsafety="non-reentrant" status="active" access="public" location="testcpp.h" documented="true" meta="plain" const="true" type="void" signature="void someFunctionDefaultArg(int i, bool b) const" groups="testgroup">
+ <parameter type="int" name="i" default=""/>
+ <parameter type="bool" name="b" default="false"/>
+ </function>
+ <function name="virtualFun" fullname="TestQDoc::Test::virtualFun" href="testqdoc-test.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" type="void" signature="void virtualFun()"/>
+ <struct name="Struct" fullname="TestQDoc::Test::Struct" href="testqdoc-test-struct.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="Templated struct"/>
+ <typedef name="SomeType" fullname="TestQDoc::Test::SomeType" href="testqdoc-test.html#SomeType-typedef" status="active" access="public" location="testcpp.h" documented="true"/>
+ <typedef name="Specialized" fullname="TestQDoc::Test::Specialized" href="testqdoc-test.html#Specialized-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="Struct&lt;int, T&gt;"/>
+ </class>
+ <class name="TestDerived" fullname="TestQDoc::TestDerived" href="testqdoc-testderived.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" bases="TestQDoc::Test" module="TestCPP" brief="A class in a namespace, derived from Test">
+ <function name="someValue" fullname="TestQDoc::TestDerived::someValue" href="testqdoc-testderived.html#someValue" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::TestDerived::NotTypedef" signature="TestQDoc::TestDerived::NotTypedef someValue()"/>
+ <function name="staticObsoleteMember" fullname="TestQDoc::TestDerived::staticObsoleteMember" href="testqdoc-testderived-obsolete.html#staticObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" static="true" type="void" signature="void staticObsoleteMember()"/>
+ <function name="virtualFun" fullname="TestQDoc::TestDerived::virtualFun" href="testqdoc-testderived.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" override="true" type="void" signature="void virtualFun() override"/>
+ <typedef name="DerivedType" fullname="TestQDoc::TestDerived::DerivedType" href="testqdoc-testderived.html#DerivedType-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="Test::SomeType"/>
+ <typedef name="NotTypedef" fullname="TestQDoc::TestDerived::NotTypedef" href="testqdoc-testderived.html#NotTypedef-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="int"/>
+ </class>
+ <class name="Vec" fullname="TestQDoc::Vec" href="testqdoc-vec.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="Type alias that has its own reference"/>
+ </namespace>
+ <page name="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" status="active" location="classlists.qdoc" documented="true" subtype="externalpage" title="reentrant" fulltitle="reentrant" subtitle=""/>
+ <group name="cpptypes" href="cpptypes.html" status="active" location="classlists.qdoc" documented="true" seen="true" title="Test C++ Types"/>
+ <group name="testgroup" href="testgroup.html" status="internal" seen="false" title=""/>
+ <module name="TestCPP" href="testcpp-module.html" status="active" since="2.0" documented="true" seen="true" title="QDoc Test C++ Classes" brief="A test module page">
+ <contents name="linking-to-function-like-things" title="Linking to function-like things" level="1"/>
+ <contents name="section" title="section()" level="2"/>
+ </module>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/autolinking.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/autolinking.webxml
new file mode 100644
index 000000000..91f35d5d7
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/autolinking.webxml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="autolinking.html" href="autolinking.html" status="active" location="classlists.qdoc" documented="true" subtype="page" title="Autolinking" fulltitle="Autolinking" subtitle="">
+ <contents name="testqdoc" title="TestQDoc" level="1"/>
+ <contents name="someprop" title="someProp" level="1"/>
+ <description>
+ <section id="testqdoc">
+ <heading level="1">TestQDoc</heading>
+ <para>The string <link raw="TestQDoc" href="testqdoc.html" type="namespace">TestQDoc</link> links to the C++ namespace unless linking explicitly, <link raw="#TestQDoc" href="autolinking.html#testqdoc" type="page" page="Autolinking">like this</link>, or <link raw="TestQDoc" href="testqdoc.html" type="namespace">this</link>. Also,</para>
+ <para>Autolinks:</para>
+ <list type="bullet">
+ <item>
+ <para>
+ <link raw="TestQDoc::TestDerived" href="testqdoc-testderived.html" type="class">TestQDoc::TestDerived</link></para>
+ </item>
+ </list>
+ <para>Explicit links:</para>
+ <list type="bullet">
+ <item>
+ <para>
+ <link raw="TestQDoc::TestDerived" href="testqdoc-testderived.html" type="class">TestQDoc::TestDerived</link></para>
+ </item>
+ <item>
+ <para>
+ <link raw="Obsolete Classes#TestQDoc" href="obsolete-classes.html#testqdoc" type="page" page="Obsolete Classes">Obsolete Classes#TestQDoc</link></para>
+ </item>
+ </list>
+ </section>
+ <section id="someprop">
+ <heading level="1">someProp</heading>
+ </section>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/bar.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/bar.webxml
new file mode 100644
index 000000000..fd653db97
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/bar.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="Bar" href="bar.html" status="active" access="public" location="testtemplate.h" since="2.0" documented="true" module="TestCPP" brief="Another class template">
+ <description>
+ <brief>Another class template.</brief>
+ </description>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/baz.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/baz.webxml
new file mode 100644
index 000000000..8184ea659
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/baz.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <struct name="Baz" href="baz.html" status="active" access="public" location="testtemplate.h" since="2.0" documented="true" module="TestCPP" brief="Class template template">
+ <description>
+ <brief>Class template template.</brief>
+ </description>
+ </struct>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/cpptypes.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/cpptypes.webxml
new file mode 100644
index 000000000..df7cd7024
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/cpptypes.webxml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <group name="cpptypes" href="cpptypes.html" status="active" location="classlists.qdoc" documented="true" seen="true" title="Test C++ Types">
+ <description>
+ <generatedlist contents="testgroup"/>
+ <table width="100%">
+ <row>
+ <item>
+ <para>
+ <link raw="TestQDoc::Test" href="testqdoc-test.html" type="class"/>
+ </para>
+ </item>
+ <item>
+ <para>A class in a namespace.</para>
+ </item>
+ </row>
+ </table>
+ </description>
+ </group>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/crossmoduleref.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/crossmoduleref.webxml
new file mode 100644
index 000000000..682799bd8
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/crossmoduleref.webxml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <namespace name="CrossModuleRef" href="crossmoduleref.html" status="active" access="public" location="testcpp.h" since="3.0" documented="true" module="TestCPP" brief="Namespace that has documented functions in multiple modules">
+ <description>
+ <brief>Namespace that has documented functions in multiple modules.</brief>
+ </description>
+ <function name="documentMe" fullname="CrossModuleRef::documentMe" href="crossmoduleref.html#documentMe" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void documentMe()">
+ <description>
+ <para>Document me!</para>
+ </description>
+ </function>
+ </namespace>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/foo.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/foo.webxml
new file mode 100644
index 000000000..6135e5c4e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/foo.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="Foo" href="foo.html" status="active" access="public" location="testtemplate.h" since="2.0" documented="true" module="TestCPP" brief="Class template">
+ <description>
+ <brief>Class template.</brief>
+ </description>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/obsolete-classes.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/obsolete-classes.webxml
new file mode 100644
index 000000000..dda841458
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/obsolete-classes.webxml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="obsolete-classes.html" href="obsolete-classes.html" status="active" location="classlists.qdoc" documented="true" subtype="page" title="Obsolete Classes" fulltitle="Obsolete Classes" subtitle="">
+ <contents name="classes-with-obsolete-members" title="Classes with obsolete members" level="1"/>
+ <contents name="testqdoc" title="TestQDoc" level="2"/>
+ <description>
+ <section id="classes-with-obsolete-members">
+ <heading level="1">Classes with obsolete members</heading>
+ <generatedlist contents="obsoletecppmembers"/>
+ </section>
+ <section id="testqdoc">
+ <heading level="2">TestQDoc</heading>
+ </section>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testcpp-module.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testcpp-module.webxml
new file mode 100644
index 000000000..5d24b3077
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testcpp-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/testtemplate/expected/webxml/testqdoc-test-struct.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc-test-struct.webxml
new file mode 100644
index 000000000..f883d421e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc-test-struct.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <struct name="Struct" fullname="TestQDoc::Test::Struct" href="testqdoc-test-struct.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="Templated struct">
+ <description>
+ <brief>Templated struct.</brief>
+ </description>
+ </struct>
+ </document>
+</WebXML>
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
new file mode 100644
index 000000000..2392339c6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc-test.webxml
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class threadsafety="reentrant" name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" groups="cpptypes,testgroup" module="TestCPP" brief="A class in a namespace">
+ <description>
+ <brief>A class in a namespace.</brief>
+ </description>
+ <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=""/>
+ <description>
+ <brief>A macro with argument <argument>x</argument>.</brief>
+ </description>
+ </function>
+ <function name="Q_INVOKABLE" href="testqdoc-test.html#Q_INVOKABLE" status="active" access="public" documented="true" related="2" meta="macrowithoutparams" signature="Q_INVOKABLE">
+ <description>
+ <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>
+ </description>
+ </function>
+ <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()">
+ <description>
+ <para>Use <link raw="someFunction()" href="testqdoc-test.html#someFunction" type="function">someFunction()</link> instead.</para>
+ </description>
+ </function>
+ <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)">
+ <parameter type="bool" name="b" default=""/>
+ <parameter type="const char *" name="s" default=""/>
+ <description>
+ <para>Returns a pointer to a function that takes a boolean. Uses <argument>b</argument> and <argument>s</argument>.</para>
+ </description>
+ </function>
+ <function name="funcTemplate" fullname="TestQDoc::Test::funcTemplate" href="testqdoc-test.html#funcTemplate" status="active" access="protected" location="testcpp.h" documented="true" meta="plain" type="void" brief="Function template with two parameters, a and b" signature="void funcTemplate(T1 a, T2 b)">
+ <parameter type="T1" name="a" default=""/>
+ <parameter type="T2" name="b" default=""/>
+ <description>
+ <brief>Function template with two parameters, <argument>a</argument> and <argument>b</argument>.</brief>
+ </description>
+ </function>
+ <function name="inlineFunction" fullname="TestQDoc::Test::inlineFunction" href="testqdoc-test.html#inlineFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" brief="An inline function, documented using the \fn QDoc command" signature="void inlineFunction()">
+ <description>
+ <brief>An inline function, documented using the \fn QDoc command.</brief>
+ </description>
+ </function>
+ <function name="methodWithEmDashInItsDocs" fullname="TestQDoc::Test::methodWithEmDashInItsDocs" href="testqdoc-test.html#methodWithEmDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEmDashInItsDocs()">
+ <description>
+ <para>This method has em dashes in its documentation—as you'll find represented by <teletype type="highlighted">---</teletype> in the sources—here and there. The important bit to note is that when passed e.g. to the \c command, the three hyphens are processed as input to the command and not replaced by an em dash.</para>
+ <para>-----------------------------------------------------------------------</para>
+ <para>People can still add a bunch of dashes, though, without QDoc replacing them all with a series of em dashes.</para>
+ <para>—You can also start a new paragraph with an em dash, if you want to.</para>
+ <see-also>
+ <link raw="methodWithEnDashInItsDocs" href="testqdoc-test.html#methodWithEnDashInItsDocs" type="function">methodWithEnDashInItsDocs</link>
+ </see-also>
+ </description>
+ </function>
+ <function name="methodWithEnDashInItsDocs" fullname="TestQDoc::Test::methodWithEnDashInItsDocs" href="testqdoc-test.html#methodWithEnDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEnDashInItsDocs()">
+ <description>
+ <para>This method has en dashes in its documentation – as you'll find represented by <teletype type="highlighted">--</teletype> in the sources – here and there. The important bit to note is that when passed e.g. to the \c command, the two hyphens are processed as input to the command and not replaced by an en dash. This also applies to code blocks, where otherwise, the decrement operator would get completely borked:</para>
+ <code>for (int i = 42; i &gt; 0; --i)
+ // Do something cool during countdown.</code>
+ <para>...as it would be silly if this would output –i instead of <teletype type="highlighted">--i</teletype>.</para>
+ <para>-----------------------------------------------------------------------</para>
+ <para>It still allows people to add a bunch of dashes, though, without replacing them all with a series of en dashes. Of course, they might want to use the \hr command instead, like this:</para>
+ <para>– You can also start a new paragraph with an en dash, if you want to.</para>
+ <see-also>methodWithEnDashInItsDocs</see-also>
+ </description>
+ </function>
+ <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()">
+ <description>
+ <para>Use <link raw="someFunction()" href="testqdoc-test.html#someFunction" type="function">someFunction()</link> instead.</para>
+ </description>
+ </function>
+ <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++()">
+ <description/>
+ </function>
+ <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=""/>
+ <description>
+ <para>Returns true if <argument>lhs</argument> and <argument>rhs</argument> are equal.</para>
+ </description>
+ </function>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload" status="active" access="protected" location="testcpp.h" documented="true" meta="plain" type="void" signature="void overload()">
+ <description/>
+ </function>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload-1" status="active" access="protected" location="testcpp.h" documented="true" since="Test 1.2" meta="plain" overload="true" overload-number="1" type="void" signature="void overload(bool b)">
+ <parameter type="bool" name="b" default=""/>
+ <description/>
+ </function>
+ <function name="someFunction" fullname="TestQDoc::Test::someFunction" href="testqdoc-test.html#someFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="int" signature="int someFunction(int, int v)">
+ <parameter type="int" name="" default=""/>
+ <parameter type="int" name="v" default="0"/>
+ <description>
+ <para>Function that takes a parameter <argument>v</argument>. Also returns the value of <argument>v</argument>.</para>
+ </description>
+ </function>
+ <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" threadsafety="non-reentrant" status="active" access="public" location="testcpp.h" documented="true" meta="plain" const="true" type="void" signature="void someFunctionDefaultArg(int i, bool b) const" groups="testgroup">
+ <parameter type="int" name="i" default=""/>
+ <parameter type="bool" name="b" default="false"/>
+ <description>
+ <para>Function that takes a parameter <argument>i</argument> and <argument>b</argument>.</para>
+ </description>
+ </function>
+ <function name="virtualFun" fullname="TestQDoc::Test::virtualFun" href="testqdoc-test.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" type="void" signature="void virtualFun()">
+ <description>
+ <para>Function that must be reimplemented.</para>
+ </description>
+ </function>
+ <struct name="Struct" fullname="TestQDoc::Test::Struct" href="testqdoc-test-struct.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="Templated struct">
+ <description>
+ <brief>Templated struct.</brief>
+ </description>
+ </struct>
+ <typedef name="SomeType" fullname="TestQDoc::Test::SomeType" href="testqdoc-test.html#SomeType-typedef" status="active" access="public" location="testcpp.h" documented="true">
+ <description>
+ <brief>A typedef.</brief>
+ </description>
+ </typedef>
+ <typedef name="Specialized" fullname="TestQDoc::Test::Specialized" href="testqdoc-test.html#Specialized-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="Struct&lt;int, T&gt;">
+ <description/>
+ </typedef>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc-testderived.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc-testderived.webxml
new file mode 100644
index 000000000..3752e9950
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc-testderived.webxml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="TestDerived" fullname="TestQDoc::TestDerived" href="testqdoc-testderived.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" bases="TestQDoc::Test" module="TestCPP" brief="A class in a namespace, derived from Test">
+ <description>
+ <brief>A class in a namespace, derived from <link raw="Test" href="testqdoc-test.html" type="class">Test</link>.</brief>
+ </description>
+ <function name="someValue" fullname="TestQDoc::TestDerived::someValue" href="testqdoc-testderived.html#someValue" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::TestDerived::NotTypedef" signature="TestQDoc::TestDerived::NotTypedef someValue()">
+ <description>
+ <para>Returns a value using an aliases type.</para>
+ </description>
+ </function>
+ <function name="staticObsoleteMember" fullname="TestQDoc::TestDerived::staticObsoleteMember" href="testqdoc-testderived-obsolete.html#staticObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" static="true" type="void" signature="void staticObsoleteMember()">
+ <description>
+ <para>Static obsolete method.</para>
+ </description>
+ </function>
+ <function name="virtualFun" fullname="TestQDoc::TestDerived::virtualFun" href="testqdoc-testderived.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" override="true" type="void" signature="void virtualFun() override">
+ <description/>
+ </function>
+ <typedef name="DerivedType" fullname="TestQDoc::TestDerived::DerivedType" href="testqdoc-testderived.html#DerivedType-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="Test::SomeType">
+ <description>
+ <para>An aliased typedef.</para>
+ </description>
+ </typedef>
+ <typedef name="NotTypedef" fullname="TestQDoc::TestDerived::NotTypedef" href="testqdoc-testderived.html#NotTypedef-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="int">
+ <description>
+ <para>I'm an alias, not a typedef.</para>
+ </description>
+ </typedef>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc-vec.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc-vec.webxml
new file mode 100644
index 000000000..9e3104404
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc-vec.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="Vec" fullname="TestQDoc::Vec" href="testqdoc-vec.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="Type alias that has its own reference">
+ <description>
+ <brief>Type alias that has its own reference.</brief>
+ </description>
+ </class>
+ </document>
+</WebXML>
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
new file mode 100644
index 000000000..77b4b2305
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc.webxml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <namespace name="TestQDoc" href="testqdoc.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="A namespace">
+ <contents name="usage" title="Usage" level="1"/>
+ <description>
+ <brief>A namespace.</brief>
+ <section id="usage">
+ <heading level="1">Usage</heading>
+ <para>This namespace is for testing QDoc output.</para>
+ </section>
+ </description>
+ <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="0" meta="macrowithoutparams" signature="QDOCTEST_MACRO">
+ <description/>
+ </function>
+ <class threadsafety="reentrant" name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" groups="cpptypes,testgroup" module="TestCPP" brief="A class in a namespace">
+ <description>
+ <brief>A class in a namespace.</brief>
+ </description>
+ <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=""/>
+ <description>
+ <brief>A macro with argument <argument>x</argument>.</brief>
+ </description>
+ </function>
+ <function name="Q_INVOKABLE" href="testqdoc-test.html#Q_INVOKABLE" status="active" access="public" documented="true" related="2" meta="macrowithoutparams" signature="Q_INVOKABLE">
+ <description>
+ <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>
+ </description>
+ </function>
+ <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()">
+ <description>
+ <para>Use <link raw="someFunction()" href="testqdoc-test.html#someFunction" type="function">someFunction()</link> instead.</para>
+ </description>
+ </function>
+ <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)">
+ <parameter type="bool" name="b" default=""/>
+ <parameter type="const char *" name="s" default=""/>
+ <description>
+ <para>Returns a pointer to a function that takes a boolean. Uses <argument>b</argument> and <argument>s</argument>.</para>
+ </description>
+ </function>
+ <function name="funcTemplate" fullname="TestQDoc::Test::funcTemplate" href="testqdoc-test.html#funcTemplate" status="active" access="protected" location="testcpp.h" documented="true" meta="plain" type="void" brief="Function template with two parameters, a and b" signature="void funcTemplate(T1 a, T2 b)">
+ <parameter type="T1" name="a" default=""/>
+ <parameter type="T2" name="b" default=""/>
+ <description>
+ <brief>Function template with two parameters, <argument>a</argument> and <argument>b</argument>.</brief>
+ </description>
+ </function>
+ <function name="inlineFunction" fullname="TestQDoc::Test::inlineFunction" href="testqdoc-test.html#inlineFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" brief="An inline function, documented using the \fn QDoc command" signature="void inlineFunction()">
+ <description>
+ <brief>An inline function, documented using the \fn QDoc command.</brief>
+ </description>
+ </function>
+ <function name="methodWithEmDashInItsDocs" fullname="TestQDoc::Test::methodWithEmDashInItsDocs" href="testqdoc-test.html#methodWithEmDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEmDashInItsDocs()">
+ <description>
+ <para>This method has em dashes in its documentation—as you'll find represented by <teletype type="highlighted">---</teletype> in the sources—here and there. The important bit to note is that when passed e.g. to the \c command, the three hyphens are processed as input to the command and not replaced by an em dash.</para>
+ <para>-----------------------------------------------------------------------</para>
+ <para>People can still add a bunch of dashes, though, without QDoc replacing them all with a series of em dashes.</para>
+ <para>—You can also start a new paragraph with an em dash, if you want to.</para>
+ <see-also>
+ <link raw="methodWithEnDashInItsDocs" href="testqdoc-test.html#methodWithEnDashInItsDocs" type="function">methodWithEnDashInItsDocs</link>
+ </see-also>
+ </description>
+ </function>
+ <function name="methodWithEnDashInItsDocs" fullname="TestQDoc::Test::methodWithEnDashInItsDocs" href="testqdoc-test.html#methodWithEnDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEnDashInItsDocs()">
+ <description>
+ <para>This method has en dashes in its documentation – as you'll find represented by <teletype type="highlighted">--</teletype> in the sources – here and there. The important bit to note is that when passed e.g. to the \c command, the two hyphens are processed as input to the command and not replaced by an en dash. This also applies to code blocks, where otherwise, the decrement operator would get completely borked:</para>
+ <code>for (int i = 42; i &gt; 0; --i)
+ // Do something cool during countdown.</code>
+ <para>...as it would be silly if this would output –i instead of <teletype type="highlighted">--i</teletype>.</para>
+ <para>-----------------------------------------------------------------------</para>
+ <para>It still allows people to add a bunch of dashes, though, without replacing them all with a series of en dashes. Of course, they might want to use the \hr command instead, like this:</para>
+ <para>– You can also start a new paragraph with an en dash, if you want to.</para>
+ <see-also>methodWithEnDashInItsDocs</see-also>
+ </description>
+ </function>
+ <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()">
+ <description>
+ <para>Use <link raw="someFunction()" href="testqdoc-test.html#someFunction" type="function">someFunction()</link> instead.</para>
+ </description>
+ </function>
+ <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++()">
+ <description/>
+ </function>
+ <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=""/>
+ <description>
+ <para>Returns true if <argument>lhs</argument> and <argument>rhs</argument> are equal.</para>
+ </description>
+ </function>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload" status="active" access="protected" location="testcpp.h" documented="true" meta="plain" type="void" signature="void overload()">
+ <description/>
+ </function>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload-1" status="active" access="protected" location="testcpp.h" documented="true" since="Test 1.2" meta="plain" overload="true" overload-number="1" type="void" signature="void overload(bool b)">
+ <parameter type="bool" name="b" default=""/>
+ <description/>
+ </function>
+ <function name="someFunction" fullname="TestQDoc::Test::someFunction" href="testqdoc-test.html#someFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="int" signature="int someFunction(int, int v)">
+ <parameter type="int" name="" default=""/>
+ <parameter type="int" name="v" default="0"/>
+ <description>
+ <para>Function that takes a parameter <argument>v</argument>. Also returns the value of <argument>v</argument>.</para>
+ </description>
+ </function>
+ <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" threadsafety="non-reentrant" status="active" access="public" location="testcpp.h" documented="true" meta="plain" const="true" type="void" signature="void someFunctionDefaultArg(int i, bool b) const" groups="testgroup">
+ <parameter type="int" name="i" default=""/>
+ <parameter type="bool" name="b" default="false"/>
+ <description>
+ <para>Function that takes a parameter <argument>i</argument> and <argument>b</argument>.</para>
+ </description>
+ </function>
+ <function name="virtualFun" fullname="TestQDoc::Test::virtualFun" href="testqdoc-test.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" type="void" signature="void virtualFun()">
+ <description>
+ <para>Function that must be reimplemented.</para>
+ </description>
+ </function>
+ <struct name="Struct" fullname="TestQDoc::Test::Struct" href="testqdoc-test-struct.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="Templated struct">
+ <description>
+ <brief>Templated struct.</brief>
+ </description>
+ </struct>
+ <typedef name="SomeType" fullname="TestQDoc::Test::SomeType" href="testqdoc-test.html#SomeType-typedef" status="active" access="public" location="testcpp.h" documented="true">
+ <description>
+ <brief>A typedef.</brief>
+ </description>
+ </typedef>
+ <typedef name="Specialized" fullname="TestQDoc::Test::Specialized" href="testqdoc-test.html#Specialized-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="Struct&lt;int, T&gt;">
+ <description/>
+ </typedef>
+ </class>
+ <class name="TestDerived" fullname="TestQDoc::TestDerived" href="testqdoc-testderived.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" bases="TestQDoc::Test" module="TestCPP" brief="A class in a namespace, derived from Test">
+ <description>
+ <brief>A class in a namespace, derived from <link raw="Test" href="testqdoc-test.html" type="class">Test</link>.</brief>
+ </description>
+ <function name="someValue" fullname="TestQDoc::TestDerived::someValue" href="testqdoc-testderived.html#someValue" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::TestDerived::NotTypedef" signature="TestQDoc::TestDerived::NotTypedef someValue()">
+ <description>
+ <para>Returns a value using an aliases type.</para>
+ </description>
+ </function>
+ <function name="staticObsoleteMember" fullname="TestQDoc::TestDerived::staticObsoleteMember" href="testqdoc-testderived-obsolete.html#staticObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" static="true" type="void" signature="void staticObsoleteMember()">
+ <description>
+ <para>Static obsolete method.</para>
+ </description>
+ </function>
+ <function name="virtualFun" fullname="TestQDoc::TestDerived::virtualFun" href="testqdoc-testderived.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" override="true" type="void" signature="void virtualFun() override">
+ <description/>
+ </function>
+ <typedef name="DerivedType" fullname="TestQDoc::TestDerived::DerivedType" href="testqdoc-testderived.html#DerivedType-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="Test::SomeType">
+ <description>
+ <para>An aliased typedef.</para>
+ </description>
+ </typedef>
+ <typedef name="NotTypedef" fullname="TestQDoc::TestDerived::NotTypedef" href="testqdoc-testderived.html#NotTypedef-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="int">
+ <description>
+ <para>I'm an alias, not a typedef.</para>
+ </description>
+ </typedef>
+ </class>
+ <class name="Vec" fullname="TestQDoc::Vec" href="testqdoc-vec.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="Type alias that has its own reference">
+ <description>
+ <brief>Type alias that has its own reference.</brief>
+ </description>
+ </class>
+ </namespace>
+ </document>
+</WebXML>
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
new file mode 100644
index 000000000..3f227d133
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testtemplate.index
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="TestTemplate Reference Documentation" version="" project="TestTemplate">
+ <namespace name="" status="active" access="public" module="testtemplate">
+ <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="0" meta="macrowithoutparams" signature="QDOCTEST_MACRO"/>
+ <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="Q_INVOKABLE" href="testqdoc-test.html#Q_INVOKABLE" status="active" access="public" documented="true" related="2" meta="macrowithoutparams" signature="Q_INVOKABLE"/>
+ <page name="autolinking.html" href="autolinking.html" status="active" location="classlists.qdoc" documented="true" subtype="page" title="Autolinking" fulltitle="Autolinking" subtitle="">
+ <contents name="testqdoc" title="TestQDoc" level="1"/>
+ <contents name="someprop" title="someProp" level="1"/>
+ </page>
+ <class name="Bar" href="bar.html" status="active" access="public" location="testtemplate.h" since="2.0" documented="true" module="TestCPP" brief="Another class template"/>
+ <struct name="Baz" href="baz.html" status="active" access="public" location="testtemplate.h" since="2.0" documented="true" module="TestCPP" brief="Class template template"/>
+ <namespace name="CrossModuleRef" href="crossmoduleref.html" status="active" access="public" location="testcpp.h" since="3.0" documented="true" module="TestCPP" brief="Namespace that has documented functions in multiple modules">
+ <function name="documentMe" fullname="CrossModuleRef::documentMe" href="crossmoduleref.html#documentMe" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void documentMe()"/>
+ </namespace>
+ <class name="DontLinkToMe" href="dontlinktome.html" status="ignored" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="Class that does not generate documentation"/>
+ <class name="Foo" href="foo.html" status="active" access="public" location="testtemplate.h" since="2.0" documented="true" module="TestCPP" brief="Class template"/>
+ <page name="obsolete-classes.html" href="obsolete-classes.html" status="active" location="classlists.qdoc" documented="true" subtype="page" title="Obsolete Classes" fulltitle="Obsolete Classes" subtitle="">
+ <contents name="classes-with-obsolete-members" title="Classes with obsolete members" level="1"/>
+ <contents name="testqdoc" title="TestQDoc" level="2"/>
+ </page>
+ <namespace name="TestQDoc" href="testqdoc.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="A namespace">
+ <contents name="usage" title="Usage" level="1"/>
+ <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="0" meta="macrowithoutparams" signature="QDOCTEST_MACRO"/>
+ <class threadsafety="reentrant" name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" groups="cpptypes,testgroup" module="TestCPP" brief="A class in a namespace">
+ <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="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)">
+ <parameter type="bool" name="b" default=""/>
+ <parameter type="const char *" name="s" default=""/>
+ </function>
+ <function name="funcTemplate" fullname="TestQDoc::Test::funcTemplate" href="testqdoc-test.html#funcTemplate" status="active" access="protected" location="testcpp.h" documented="true" meta="plain" type="void" brief="Function template with two parameters, a and b" signature="void funcTemplate(T1 a, T2 b)">
+ <parameter type="T1" name="a" default=""/>
+ <parameter type="T2" name="b" default=""/>
+ </function>
+ <function name="inlineFunction" fullname="TestQDoc::Test::inlineFunction" href="testqdoc-test.html#inlineFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" brief="An inline function, documented using the \fn QDoc command" signature="void inlineFunction()"/>
+ <function name="methodWithEmDashInItsDocs" fullname="TestQDoc::Test::methodWithEmDashInItsDocs" href="testqdoc-test.html#methodWithEmDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEmDashInItsDocs()"/>
+ <function name="methodWithEnDashInItsDocs" fullname="TestQDoc::Test::methodWithEnDashInItsDocs" href="testqdoc-test.html#methodWithEnDashInItsDocs" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void methodWithEnDashInItsDocs()"/>
+ <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=""/>
+ </function>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload" status="active" access="protected" location="testcpp.h" documented="true" meta="plain" type="void" signature="void overload()"/>
+ <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload-1" status="active" access="protected" location="testcpp.h" documented="true" since="Test 1.2" meta="plain" overload="true" overload-number="1" type="void" signature="void overload(bool b)">
+ <parameter type="bool" name="b" default=""/>
+ </function>
+ <function name="someFunction" fullname="TestQDoc::Test::someFunction" href="testqdoc-test.html#someFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="int" signature="int someFunction(int, int v)">
+ <parameter type="int" name="" default=""/>
+ <parameter type="int" name="v" default="0"/>
+ </function>
+ <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" threadsafety="non-reentrant" status="active" access="public" location="testcpp.h" documented="true" meta="plain" const="true" type="void" signature="void someFunctionDefaultArg(int i, bool b) const" groups="testgroup">
+ <parameter type="int" name="i" default=""/>
+ <parameter type="bool" name="b" default="false"/>
+ </function>
+ <function name="virtualFun" fullname="TestQDoc::Test::virtualFun" href="testqdoc-test.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" type="void" signature="void virtualFun()"/>
+ <struct name="Struct" fullname="TestQDoc::Test::Struct" href="testqdoc-test-struct.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="Templated struct"/>
+ <typedef name="SomeType" fullname="TestQDoc::Test::SomeType" href="testqdoc-test.html#SomeType-typedef" status="active" access="public" location="testcpp.h" documented="true"/>
+ <typedef name="Specialized" fullname="TestQDoc::Test::Specialized" href="testqdoc-test.html#Specialized-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="Struct&lt;int, T&gt;"/>
+ </class>
+ <class name="TestDerived" fullname="TestQDoc::TestDerived" href="testqdoc-testderived.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" bases="TestQDoc::Test" module="TestCPP" brief="A class in a namespace, derived from Test">
+ <function name="someValue" fullname="TestQDoc::TestDerived::someValue" href="testqdoc-testderived.html#someValue" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::TestDerived::NotTypedef" signature="TestQDoc::TestDerived::NotTypedef someValue()"/>
+ <function name="staticObsoleteMember" fullname="TestQDoc::TestDerived::staticObsoleteMember" href="testqdoc-testderived-obsolete.html#staticObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" static="true" type="void" signature="void staticObsoleteMember()"/>
+ <function name="virtualFun" fullname="TestQDoc::TestDerived::virtualFun" href="testqdoc-testderived.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" override="true" type="void" signature="void virtualFun() override"/>
+ <typedef name="DerivedType" fullname="TestQDoc::TestDerived::DerivedType" href="testqdoc-testderived.html#DerivedType-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="Test::SomeType"/>
+ <typedef name="NotTypedef" fullname="TestQDoc::TestDerived::NotTypedef" href="testqdoc-testderived.html#NotTypedef-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="int"/>
+ </class>
+ <class name="Vec" fullname="TestQDoc::Vec" href="testqdoc-vec.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="Type alias that has its own reference"/>
+ </namespace>
+ <page name="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" status="active" location="classlists.qdoc" documented="true" subtype="externalpage" title="reentrant" fulltitle="reentrant" subtitle=""/>
+ <group name="cpptypes" href="cpptypes.html" status="active" location="classlists.qdoc" documented="true" seen="true" title="Test C++ Types"/>
+ <group name="testgroup" href="testgroup.html" status="internal" seen="false" title=""/>
+ <module name="TestCPP" href="testcpp-module.html" status="active" since="2.0" documented="true" seen="true" title="QDoc Test C++ Classes" brief="A test module page">
+ <contents name="linking-to-function-like-things" title="Linking to function-like things" level="1"/>
+ <contents name="section" title="section()" level="2"/>
+ </module>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/classlists.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/classlists.qdoc
new file mode 100644
index 000000000..2954e5beb
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/classlists.qdoc
@@ -0,0 +1,51 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+/*!
+ \page obsolete-classes.html
+ \title Obsolete Classes
+
+ \section1 Classes with obsolete members
+ \generatelist obsoletecppmembers
+
+ \section2 TestQDoc
+*/
+
+/*!
+ \page autolinking.html
+ \title Autolinking
+
+ //! a section title that qualifies for autolinking
+ \section1 TestQDoc
+
+ The string TestQDoc links to the C++ namespace unless linking explicitly,
+ \l {#TestQDoc}{like this}, or \l {TestQDoc}{this}. Also,
+
+ Autolinks:
+
+ \list
+ \li TestQDoc::TestDerived
+ \endlist
+
+ Explicit links:
+
+ \list
+ \li \l [CPP] {TestQDoc::TestDerived}
+ \li \l {Obsolete Classes#TestQDoc}
+ \endlist
+
+ //! a section title shadowing a known property name
+ \section1 someProp
+*/
+
+/*!
+ \group cpptypes
+ \title Test C++ Types
+
+ \generatelist testgroup
+*/
+
+/*!
+ \externalpage https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command
+ \title reentrant
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/snippets/snippet_testcpp.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/snippets/snippet_testcpp.cpp
new file mode 100644
index 000000000..1660fbc2b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/snippets/snippet_testcpp.cpp
@@ -0,0 +1,3 @@
+//! [random tag]
+You're not supposed to see this.
+//! [random tag]
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testcpp.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testcpp.cpp
new file mode 100644
index 000000000..d31167efb
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testcpp.cpp
@@ -0,0 +1,418 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#include "testcpp.h"
+
+namespace TestQDoc {
+
+/*
+//! [random tag]
+\note This is just a test.
+//! [random tag]
+
+//! [args]
+\1\2 \3 \2\1
+//! [args]
+*/
+
+/*!
+ \module TestCPP
+ \qtvariable testcpp
+ \qtcmakepackage QDocTest
+ \title QDoc Test C++ Classes
+ \brief A test module page.
+ \since 2.0
+
+ \testnoautolist
+
+ \include testcpp.cpp random tag
+ \include testcpp.cpp {args} {/} {*} {Look, Ma! {I'm made of arguments!}}
+
+\if defined(test_nestedmacro)
+ \versionnote {module} {\ver 5.15.0}
+ \ver 1.0.0
+\endif
+
+ \section1 Linking to function-like things
+
+ \list
+ \li \l {TestQDoc::Test::someFunctionDefaultArg}
+ {someFunctionDefaultArg()}
+ \li QDOCTEST_MACRO2()
+ \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()
+*/
+
+/*!
+ \namespace TestQDoc
+ \inheaderfile TestCPP
+ \inmodule TestCPP
+ \brief A namespace.
+
+ \section1 Usage
+ This namespace is for testing QDoc output.
+*/
+
+/*!
+ \class TestQDoc::Test
+ \inmodule TestCPP
+ \brief A class in a namespace.
+
+\if defined(test_ignoresince)
+ //! omitted by ignoresince
+ \since 1.1
+\endif
+ \ingroup testgroup
+ \ingroup cpptypes
+ \reentrant
+*/
+
+/*!
+ \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.
+*/
+
+/*!
+ \macro QDOCTEST_MACRO
+ \relates TestQDoc
+\if defined(test_ignoresince)
+ //! omitted by ignoresince.Test
+ \since Test 0.9
+\endif
+*/
+
+/*!
+ \macro QDOCTEST_MACRO2(int &x)
+ \relates TestQDoc::Test
+ \since Test 1.1
+ \brief A macro with argument \a x.
+ \ingroup testgroup
+*/
+
+/*!
+\if defined(test_properties)
+ \property Test::id
+\else
+ \nothing
+\endif
+*/
+
+/*!
+ \deprecated [6.0] Use someFunction() instead.
+*/
+void Test::deprecatedMember()
+{
+ return;
+}
+
+/*!
+ \obsolete
+
+ Use someFunction() instead.
+*/
+void Test::obsoleteMember()
+{
+ return;
+}
+
+/*!
+ \obsolete Use obsoleteMember() instead.
+*/
+void Test::anotherObsoleteMember()
+{
+ return;
+}
+
+/*!
+ \nonreentrant
+ Function that takes a parameter \a i and \a b.
+\if defined(test_ignoresince)
+ \since 2.0
+\endif
+ \ingroup testgroup
+*/
+void Test::someFunctionDefaultArg(int i, bool b = false) const
+{
+ return;
+}
+
+/*!
+ \fn void Test::func(bool)
+ \internal
+*/
+
+/*!
+ \fn [funcPtr] void (*funcPtr(bool b, const char *s))(bool)
+
+ Returns a pointer to a function that takes a boolean. Uses \a b and \a s.
+*/
+
+/*!
+ \fn [op-inc] Test::operator++()
+ \fn [op-dec] Test::operator--()
+ \deprecated
+*/
+
+/*!
+ This method has en dashes in its documentation -- as you'll find
+ represented by \c{--} in the sources -- here and there. The important bit
+ to note is that when passed e.g. to the \\c command, the two hyphens are
+ processed as input to the command and not replaced by an en dash. This also
+ applies to code blocks, where otherwise, the decrement operator would get
+ completely borked:
+
+ \code
+ for (int i = 42; i > 0; --i)
+ // Do something cool during countdown.
+ \endcode
+
+ ...as it would be silly if this would output --i instead of \c {--i}.
+
+ -----------------------------------------------------------------------
+
+ It still allows people to add a bunch of dashes, though, without replacing
+ them all with a series of en dashes. Of course, they might want to use the
+ \\hr command instead, like this:
+ \hr
+
+ -- You can also start a new paragraph with an en dash, if you want to.
+
+ //! Self-referencing \sa-command for tests.
+ \sa methodWithEnDashInItsDocs
+*/
+void Test::methodWithEnDashInItsDocs()
+{
+ // Nothing to see here.
+}
+
+/*!
+ This method has em dashes in its documentation---as you'll find
+ represented by \c{---} in the sources---here and there. The important bit
+ to note is that when passed e.g. to the \\c command, the three hyphens are
+ processed as input to the command and not replaced by an em dash.
+
+ -----------------------------------------------------------------------
+
+ People can still add a bunch of dashes, though, without QDoc replacing
+ them all with a series of em dashes.
+
+ ---You can also start a new paragraph with an em dash, if you want to.
+
+ \sa methodWithEnDashInItsDocs
+
+*/
+void Test::methodWithEmDashInItsDocs()
+{
+ // Woah! Look at that!
+}
+
+// Documented below with an \fn command. Unnecessary but we support it, and it's used.
+int Test::someFunction(int, int v)
+{
+ return v;
+}
+
+/*!
+ \fn void TestQDoc::Test::inlineFunction()
+
+ \brief An inline function, documented using the \CMDFN QDoc command.
+*/
+
+/*!
+ \fn int Test::someFunction(int, int v = 0)
+
+ Function that takes a parameter \a v.
+ Also returns the value of \a v.
+\if defined(test_ignoresince)
+ \since Test 1.0
+\endif
+*/
+
+/*!
+ Function that must be reimplemented.
+*/
+void Test::virtualFun()
+{
+ return;
+}
+
+/*!
+ \fn bool Test::operator==(const Test &lhs, const Test &rhs)
+
+ Returns true if \a lhs and \a rhs are equal.
+*/
+
+/*!
+ \typedef TestQDoc::Test::SomeType
+ \brief A typedef.
+*/
+
+/*!
+ \reimp
+*/
+void TestDerived::virtualFun()
+{
+ return;
+}
+
+/*!
+ \fn TestQDoc::Test::overload()
+ \fn Test::overload(bool b)
+ //! The second overload should match even without the fully qualified path
+
+ Overloads that share a documentation comment, optionally taking
+ a parameter \a b.
+*/
+
+/*!
+ \fn Test::overload(bool b)
+ \since Test 1.2
+*/
+
+/*!
+ \typealias TestQDoc::TestDerived::DerivedType
+ An aliased typedef.
+*/
+
+/*!
+ \typedef TestQDoc::TestDerived::NotTypedef
+ I'm an alias, not a typedef.
+*/
+
+/*!
+ \obsolete
+
+ Static obsolete method.
+*/
+void TestDerived::staticObsoleteMember()
+{
+ return;
+}
+
+/*!
+\if defined(test_properties)
+ \fn void TestDerived::emitSomething()
+ Emitted when things happen.
+\else
+ \nothing
+\endif
+*/
+
+/*!
+\if defined(test_properties)
+ \reimp
+\else
+ \nothing
+\endif
+*/
+int TestDerived::id()
+{
+ return 1;
+}
+
+/*!
+ Returns a value using an aliases type.
+*/
+TestDerived::NotTypedef TestDerived::someValue()
+{
+ return 0;
+}
+
+/*!
+\if defined(test_template)
+ \fn template <typename T1, typename T2> void TestQDoc::Test::funcTemplate(T1 a, T2 b)
+ \brief Function template with two parameters, \a a and \a b.
+\else
+ \nothing
+\endif
+*/
+
+/*!
+\if defined(test_template)
+ \struct TestQDoc::Test::Struct
+ \inmodule TestCPP
+ \brief Templated struct.
+\else
+ \nothing
+\endif
+*/
+
+/*!
+\if defined(test_template)
+ \typealias TestQDoc::Test::Specialized
+\else
+ \nothing
+\endif
+*/
+
+/*!
+\if defined(test_template)
+ \class TestQDoc::Vec
+ \inmodule TestCPP
+ \brief Type alias that has its own reference.
+\else
+ \nothing
+\endif
+*/
+
+/*!
+\if defined(test_template)
+ \macro Q_INVOKABLE
+ \relates TestQDoc::Test
+
+ This is a mock Q_INVOKABLE for the purpose of ensuring QDoc autolink to it
+ as expected.
+\else
+ \nothing
+\endif
+*/
+
+} // namespace TestQDoc
+
+
+/*!
+ \namespace CrossModuleRef
+ \inmodule TestCPP
+ \brief Namespace that has documented functions in multiple modules.
+ \since 3.0
+*/
+namespace CrossModuleRef {
+
+/*!
+ Document me!
+*/
+void documentMe()
+{
+}
+
+} // namespace CrossModuleRef
+
+/*!
+ \class DontLinkToMe
+ \inmodule TestCPP
+ \brief Class that does not generate documentation.
+*/
+
+/*!
+ \dontdocument (DontLinkToMe)
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testcpp.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testcpp.h
new file mode 100644
index 000000000..06126494a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testcpp.h
@@ -0,0 +1,137 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#pragma once
+
+#ifdef test_properties
+#include <QtCore/qmetaobject.h>
+#include <QtCore/qproperty.h>
+#include <QtCore/qstring.h>
+#endif
+
+#define QDOCTEST_MACRO test
+#define QDOCTEST_MACRO2(x) (x) < 0 ? 0 : (x))
+
+namespace TestQDoc {
+
+class Test {
+#ifdef test_properties
+ Q_OBJECT
+ Q_PROPERTY(int id READ id)
+#endif
+public:
+
+#ifdef test_template
+template<typename D, typename T> struct Struct {};
+template<typename T>
+using Specialized = Struct<int, T>;
+#endif
+
+#ifdef test_template
+# define Q_INVOKABLE void foo() {};
+#endif
+
+#ifdef test_scopedenum
+ enum ClassicEnum { Yee, Haw, Howdy, Partner };
+
+ enum class ScopedEnum : unsigned char {
+ This = 0x01,
+ That = 0x02,
+ All = This | That,
+ OmittedValue = 99,
+ UselessValue,
+ VeryLastValue
+ };
+#endif
+ typedef struct {
+ int data;
+ } SomeType;
+ int someFunction(int, int v = 0);
+ void someFunctionDefaultArg(int i, bool b) const;
+ void obsoleteMember();
+ void anotherObsoleteMember();
+ void deprecatedMember();
+ void methodWithEnDashInItsDocs();
+ void methodWithEmDashInItsDocs();
+ void func(bool) {};
+ //! [funcPtr]
+ void (*funcPtr(bool b, const char *s))(bool) {
+ return func;
+ }
+ //! [op-inc]
+ Test &operator++() { return *this; }
+ //! [op-dec]
+ Test &operator--() { return *this; }
+
+ void anotherFunc() {};
+ inline void inlineFunction() {};
+ virtual void virtualFun();
+
+ friend bool operator==(const Test &lhs, const Test &rhs) { return false; }
+
+protected:
+ void overload() {}
+ void overload(bool b) { if (!b) return; }
+#ifdef test_template
+ template <typename T1, typename T2> void funcTemplate(T1 a, T2 b) {
+ a = b;
+ }
+#endif
+#ifdef test_properties
+ virtual int id() { return 0; }
+#endif
+};
+
+class TestDerived : public Test {
+#ifdef test_properties
+ Q_OBJECT
+
+ Q_PROPERTY(QString bindableProp READ bindableProp WRITE setBindableProp NOTIFY bindablePropChanged BINDABLE bindableProp)
+ Q_PROPERTY(QString someProp READ someProp BINDABLE somBindableProp)
+ Q_PROPERTY(int *intProp READ getInt STORED false CONSTANT FINAL)
+ Q_PROPERTY(const QString *name READ name)
+ QDOC_PROPERTY(bool boolProp READ boolProp WRITE setBoolProp NOTIFY boolPropChanged RESET resetBoolProp REVISION 1)
+#endif
+
+public:
+ using DerivedType = Test::SomeType;
+ using NotTypedef = int;
+ void virtualFun() override;
+ static void staticObsoleteMember();
+ NotTypedef someValue();
+#ifdef test_properties
+ QBindable<QString> bindableProp();
+ QBindable<QString> someBindableProp();
+ const QString &someProp();
+ int *getInt();
+ bool boolProp();
+ const QString *name() const;
+
+ Q_INVOKABLE void invokeMe() const {}
+ int id() override;
+
+Q_SIGNALS:
+ void emitSomething(QPrivateSignal);
+ void bindablePropChanged();
+ Q_REVISION(1) void boolPropChanged();
+
+public Q_SLOTS:
+ void setBindableProp(const QString &s);
+ void setBoolProp(bool b);
+ void resetBoolProp();
+#endif
+};
+
+#ifdef test_template
+template <typename T>
+struct BaseVec {};
+template <typename T>
+using Vec = BaseVec<T>;
+#endif
+
+} // namespace TestQDoc
+
+namespace CrossModuleRef {
+ void documentMe();
+}
+
+class DontLinkToMe {};
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testtemplate.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testtemplate.cpp
new file mode 100644
index 000000000..04be329ea
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testtemplate.cpp
@@ -0,0 +1,23 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "testtemplate.h"
+
+/*!
+ \class Foo
+ \inmodule TestCPP
+ \brief Class template.
+*/
+
+/*!
+ \class Bar
+ \inmodule TestCPP
+ \brief Another class template.
+*/
+
+/*!
+ //! Baz is a struct, QDoc auto-converts this to the correct type
+ \class Baz
+ \inmodule TestCPP
+ \brief Class template template.
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testtemplate.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testtemplate.h
new file mode 100644
index 000000000..68c164e25
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testtemplate.h
@@ -0,0 +1,28 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+template <typename T>
+class Foo {
+public:
+ Foo() {}
+private:
+ T t;
+};
+
+template <typename T, typename D>
+class Bar {
+public:
+ Bar() {}
+private:
+ T t;
+ D d;
+};
+
+template<template<typename> class X, typename Y>
+struct Baz
+{
+ X<Y> z;
+ Baz() : z() {}
+};
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/testtemplate.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/testtemplate.qdocconf
new file mode 100644
index 000000000..188c268bd
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/testtemplate.qdocconf
@@ -0,0 +1,38 @@
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ./src/images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+project = TestTemplate
+includepaths += -I./src
+
+headers = ./src/testcpp.h \
+ ./src/testtemplate.h
+sources = ./src/testcpp.cpp \
+ ./src/testtemplate.cpp \
+ ./src/classlists.qdoc
+exampledirs = ./src/snippets
+
+macro.CMDFN = \\\\fn
+macro.nothing = \\dontdocument ()
+macro.testnoautolist = \\if defined(test_noautolist)\n\\noautolist\n\\endif
+
+navigation.cppclassespage = "QDoc Test C++ Classes"
+
+defines += test_template
+
+outputformats = HTML DocBook WebXML
+HTML.nosubdirs = true
+HTML.outputsubdir = html
+DocBook.nosubdirs = true
+DocBook.outputsubdir = docbook
+WebXML.nosubdirs = true
+WebXML.outputsubdir = webxml
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/crash.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/crash.xml
new file mode 100644
index 000000000..542b9ce59
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/crash.xml
@@ -0,0 +1,14 @@
+<?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>OutputFromQDocFiles</db:productname>
+<db:edition>OutputFromQDocFiles - A test project for QDoc build artifacts</db:edition>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:extendedlink xlink:type="extended"><db:link xlink:to="qdoctests-qdocfileoutput-linking.xml" xlink:type="arc" xlink:arcrole="prev" xlink:title="QDoc Linking Test"/></db:extendedlink>
+<db:extendedlink xlink:type="extended"><db:link xlink:to="toc.xml" xlink:type="arc" xlink:arcrole="next" xlink:title="Table of Contents"/></db:extendedlink>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:para><db:link xlink:href=""></db:link></db:para>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/images/01.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/images/01.png
new file mode 100644
index 000000000..d73ab969b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/images/01.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/images/leonardo-da-vinci.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/images/leonardo-da-vinci.png
new file mode 100644
index 000000000..854acb4ca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/images/leonardo-da-vinci.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/qdoctests-qdocfileoutput-exhaustive.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/qdoctests-qdocfileoutput-exhaustive.xml
new file mode 100644
index 000000000..f7aff1e27
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/qdoctests-qdocfileoutput-exhaustive.xml
@@ -0,0 +1,131 @@
+<?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>Exhaustive testing of QDoc commands</db:title>
+<db:productname>OutputFromQDocFiles</db:productname>
+<db:edition>OutputFromQDocFiles - A test project for QDoc build artifacts</db:edition>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:extendedlink xlink:type="extended"><db:link xlink:to="qdoctests-qdocfileoutput.xml" xlink:type="arc" xlink:arcrole="prev" xlink:title="QDoc Testing"/></db:extendedlink>
+<db:extendedlink xlink:type="extended"><db:link xlink:to="qdoctests-qdocfileoutput-linking.xml" xlink:type="arc" xlink:arcrole="next" xlink:title="QDoc Linking Test"/></db:extendedlink>
+<db:abstract>
+<db:para>This page is a dumping ground for QDoc commands under test.</db:para>
+</db:abstract>
+</db:info>
+<db:section xml:id="this-is-a-section1">
+<db:title>This is a section1</db:title>
+<db:section xml:id="this-is-a-section2">
+<db:title>This is a section2</db:title>
+<db:section xml:id="this-is-a-section3">
+<db:title>This is a section3</db:title>
+<db:section xml:id="this-is-a-section4">
+<db:title>This is a section4</db:title>
+<db:programlisting language="cpp" role="bad">This is bad code
+</db:programlisting>
+<db:para>This text should have a line break riiiiight noooow.</db:para>
+<db:para><db:emphasis role="bold">All your text belong to bold</db:emphasis> ...And this is an examble of only <db:emphasis role="bold">bold</db:emphasis> being, well, bold.</db:para>
+<db:programlisting language="cpp"> ...
+</db:programlisting>
+<db:title>This a caption</db:title>
+<db:para>Lorem legal ipsum</db:para>
+<db:blockquote><db:para>This is a quotation.</db:para>
+</db:blockquote>
+<db:sidebar><db:para>Look, ma! I made a sidebar!</db:para>
+</db:sidebar>
+<db:informaltable style="generic">
+<db:tr valign="top">
+<db:td>
+<db:para>Table item in a table row</db:para>
+</db:td>
+</db:tr>
+<db:tr valign="top">
+<db:td>
+<db:para>Another item in a different row</db:para>
+</db:td>
+</db:tr>
+</db:informaltable>
+<db:important>
+<db:para>This is really important.</db:para>
+</db:important>
+<db:note>
+<db:para>The code above doesn't compile</db:para>
+</db:note>
+</db:section>
+</db:section>
+</db:section>
+</db:section>
+<db:section xml:id="images">
+<db:title>Images</db:title>
+<db:para>An image without any text:</db:para>
+<db:mediaobject>
+<db:imageobject>
+<db:imagedata fileref="images/leonardo-da-vinci.png"/>
+</db:imageobject>
+</db:mediaobject>
+<db:para>An image with just an alternative text:</db:para>
+<db:mediaobject>
+<db:alt>Image alt</db:alt>
+<db:imageobject>
+<db:imagedata fileref="images/leonardo-da-vinci.png"/>
+</db:imageobject>
+</db:mediaobject>
+<db:para>An image with alternative text and 1-atom caption:</db:para>
+<db:figure>
+<db:title>Image caption</db:title>
+<db:mediaobject>
+<db:alt>Image alt</db:alt>
+<db:imageobject>
+<db:imagedata fileref="images/leonardo-da-vinci.png"/>
+</db:imageobject>
+</db:mediaobject>
+</db:figure>
+<db:para>An image with alternative text and 2-atom caption:</db:para>
+<db:figure>
+<db:title>Image caption with <db:emphasis role="bold">bold</db:emphasis> text</db:title>
+<db:mediaobject>
+<db:alt>Image alt</db:alt>
+<db:imageobject>
+<db:imagedata fileref="images/leonardo-da-vinci.png"/>
+</db:imageobject>
+</db:mediaobject>
+</db:figure>
+<db:para>A bordered image:</db:para>
+<db:mediaobject>
+<db:imageobject>
+<db:imagedata fileref="images/leonardo-da-vinci.png"/>
+</db:imageobject>
+</db:mediaobject>
+<db:para>A bordered image with a caption:</db:para>
+<db:figure>
+<db:title>Screenshot of the System Tray Icon</db:title>
+<db:mediaobject>
+<db:imageobject>
+<db:imagedata fileref="images/leonardo-da-vinci.png"/>
+</db:imageobject>
+</db:mediaobject>
+</db:figure>
+<db:para>An inline image:</db:para>
+<db:para>The is a paragraph containing an <db:inlinemediaobject>
+<db:imageobject>
+<db:imagedata fileref="images/01.png"/>
+</db:imageobject>
+</db:inlinemediaobject> inline image to test if qdoc handles them properly, without considering rest of the line as alt text for the image.</db:para>
+<db:para>An inline image with alt text:</db:para>
+<db:para>Here is another example of <db:inlinemediaobject>
+<db:alt>No. 1</db:alt>
+<db:imageobject>
+<db:imagedata fileref="images/01.png"/>
+</db:imageobject>
+</db:inlinemediaobject> inline image with alternative text, which should be added as an attribute to the inline image.</db:para>
+<db:para>File quoting:</db:para>
+<db:programlisting language="cpp"> if (false) {
+ return 1;
+ }
+</db:programlisting>
+</db:section>
+<db:section xml:id="commands-not-yet-tested">
+<db:title>Commands not yet tested</db:title>
+<db:warning>
+<db:para>The following commands have yet to be tested: footnote link sincelist header index topicref // or just don’t care, remove it inlineimage printline printto quotefile skipline skipuntil span snippet codeline overload sub sup tableofcontents tt uicontrol endmapref endomit underline unicode</db:para>
+</db:warning>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/qdoctests-qdocfileoutput-linking.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/qdoctests-qdocfileoutput-linking.xml
new file mode 100644
index 000000000..f7a8c6f59
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/qdoctests-qdocfileoutput-linking.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>Testing QDoc's link command</db:title>
+<db:productname>OutputFromQDocFiles</db:productname>
+<db:edition>OutputFromQDocFiles - A test project for QDoc build artifacts</db:edition>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:extendedlink xlink:type="extended"><db:link xlink:to="qdoctests-qdocfileoutput-exhaustive.xml" xlink:type="arc" xlink:arcrole="prev" xlink:title="Exhaustive testing of QDoc commands"/></db:extendedlink>
+<db:extendedlink xlink:type="extended"><db:link xlink:to="" xlink:type="arc" xlink:arcrole="next" xlink:title="Random page"/></db:extendedlink>
+<db:abstract>
+<db:para>This is a page for testing QDoc's link command.</db:para>
+</db:abstract>
+</db:info>
+<db:anchor xml:id="link-test-target"/>
+<db:section xml:id="link-targets">
+<db:title>Link targets</db:title>
+<db:para>Valid parameters for the link command (<db:code>\l</db:code>) are page and section titles, targets defined with \target or \keyword commands, and API reference keywords (types, methods, namespaces, and so on).</db:para>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/qdoctests-qdocfileoutput.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/qdoctests-qdocfileoutput.xml
new file mode 100644
index 000000000..81b07bf82
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/qdoctests-qdocfileoutput.xml
@@ -0,0 +1,80 @@
+<?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 QDoc output from .qdoc files</db:title>
+<db:productname>OutputFromQDocFiles</db:productname>
+<db:edition>OutputFromQDocFiles - A test project for QDoc build artifacts</db:edition>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:extendedlink xlink:type="extended"><db:link xlink:to="qdoctests-qdocfileoutput-exhaustive.xml" xlink:type="arc" xlink:arcrole="next" xlink:title="Exhaustive testing of QDoc commands"/></db:extendedlink>
+<db:abstract>
+<db:para>This is a simple page for testing purposes only.</db:para>
+</db:abstract>
+</db:info>
+<db:para>QDoc generates documentation for software projects. It does this by extracting <db:emphasis>QDoc comments</db:emphasis> from project source files. QDoc comments are signified by a C-style-like comment tag followed by an exclamation point, like this: <db:code>/*!</db:code> <db:code>This text is contained within QDoc comment tags.</db:code> <db:code>*/</db:code>.</db:para>
+<db:section xml:id="supported-file-types">
+<db:title>Supported file types</db:title>
+<db:para>QDoc parses <db:code>.cpp</db:code> and <db:code>.qdoc</db:code> files. It does extract comments from header (<db:code>.h</db:code>) files.</db:para>
+</db:section>
+<db:section xml:id="further-information">
+<db:title>Further information</db:title>
+<db:para>This test document is written with the purpose of testing the output QDoc generates when parsing <db:code>.qdoc</db:code> files. It is fairly simple and makes use of a limited subset of QDoc's command. Those commands are:</db:para>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:code>\page</db:code></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:code>\title</db:code></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:code>\brief</db:code></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:code>\e</db:code> (for emphasizing &quot;QDoc comments&quot;)</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:code>\c</db:code> (for multiple monospace-formatted entries)</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:code>\section1</db:code></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:code>\list</db:code></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:code>\li</db:code></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:code>\endlist</db:code></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+<db:section xml:id="linking">
+<db:title>Linking</db:title>
+<db:para>There are multiple ways to create hyperlinks to other topics:</db:para>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="qdoctests-qdocfileoutput-linking.xml">Linking to a page title</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="qdoctests-qdocfileoutput-linking.xml#link-targets">Linking to a section title</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="qdoctests-qdocfileoutput-linking.xml#link-test-target">Linking using a \target string</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="qdoctests-qdocfileoutput-linking.xml">Linking using a \keyword string</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+<db:section xml:id="qdoc-linking-test">
+<db:title>QDoc Linking Test</db:title>
+<db:para>This section title is overridden by another target which takes precedence.</db:para>
+</db:section>
+<db:section xml:id="linking-to-something-in-a-section-title">
+<db:title>Linking to <db:link xlink:href="qdoctests-qdocfileoutput.xml#further-information">something</db:link> in a section title</db:title>
+<db:para>This is allowed but a questionable practice.</db:para>
+<db:note>
+<db:para>You're looking at detailed information.</db:para>
+</db:note>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/qdoctests-qdocmanuallikefileoutput.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/qdoctests-qdocmanuallikefileoutput.xml
new file mode 100644
index 000000000..38e3887ef
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/qdoctests-qdocmanuallikefileoutput.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>Document Navigation</db:title>
+<db:productname>OutputFromQDocFiles</db:productname>
+<db:edition>OutputFromQDocFiles - A test project for QDoc build artifacts</db:edition>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:para>The navigation commands...</db:para>
+<db:blockquote/>
+<db:programlisting language="cpp">&amp;lt;head&amp;gt;
+ ...
+ &amp;lt;link rel=&amp;quot;start&amp;quot; href=&amp;quot;basicqt.html&amp;quot; /&amp;gt;
+ ...
+&amp;lt;/head&amp;gt;
+</db:programlisting>
+<db:section xml:id="commands">
+<db:title>Commands</db:title>
+<db:anchor xml:id="previouspage-command"/>
+<db:section xml:id="previouspage">
+<db:title>\previouspage</db:title>
+<db:para>The \previouspage command...</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/toc-test.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/toc-test.xml
new file mode 100644
index 000000000..6230326b7
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/toc-test.xml
@@ -0,0 +1,40 @@
+<?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>TOC</db:title>
+<db:productname>OutputFromQDocFiles</db:productname>
+<db:edition>OutputFromQDocFiles - A test project for QDoc build artifacts</db:edition>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="qdoctests-qdocfileoutput.xml">QDoc Testing</db:link></db:para>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="qdoctests-qdocfileoutput-exhaustive.xml">Exhaustive testing of QDoc commands</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:listitem>
+<db:listitem>
+<db:para>Linking</db:para>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="qdoctests-qdocfileoutput-linking.xml">QDoc Linking Test</db:link></db:para>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="qdoctests-qdocfileoutput-linking.xml#link-targets">Link targets</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="crash.xml">Random page</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="toc.xml">Table of Contents</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:listitem>
+</db:itemizedlist>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/toc.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/toc.xml
new file mode 100644
index 000000000..693673259
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/docbook/toc.xml
@@ -0,0 +1,23 @@
+<?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>Table of Contents</db:title>
+<db:productname>OutputFromQDocFiles</db:productname>
+<db:edition>OutputFromQDocFiles - A test project for QDoc build artifacts</db:edition>
+<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
+<db:extendedlink xlink:type="extended"><db:link xlink:to="" xlink:type="arc" xlink:arcrole="prev" xlink:title="Random page"/></db:extendedlink>
+<db:abstract>
+<db:para>A test project for QDoc build artifacts.</db:para></db:abstract>
+</db:info>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="qdoctests-qdocfileoutput.xml">QDoc Testing</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="qdoctests-qdocfileoutput-linking.xml">QDoc Linking Test</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="toc.xml">Table of Contents</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/crash.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/crash.html
new file mode 100644
index 000000000..3c502d3fc
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/crash.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- qdoctests-outputfromqdocfiles.qdoc -->
+ <title>OutputFromQDocFiles</title>
+</head>
+<body>
+ <link rel="prev" href="qdoctests-qdocfileoutput-linking.html" />
+ <link rel="next" href="toc.html" />
+<p class="naviNextPrevious headerNavi">
+<a class="prevPage" href="qdoctests-qdocfileoutput-linking.html">QDoc Linking Test</a>
+<a class="nextPage" href="toc.html">Table of Contents</a>
+</p>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<!-- $$$crash.html-description -->
+<div class="descr" id="details">
+<p></p>
+</div>
+<!-- @@@crash.html -->
+<p class="naviNextPrevious footerNavi">
+<a class="prevPage" href="qdoctests-qdocfileoutput-linking.html">QDoc Linking Test</a>
+<a class="nextPage" href="toc.html">Table of Contents</a>
+</p>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/images/01.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/images/01.png
new file mode 100644
index 000000000..d73ab969b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/images/01.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/images/leonardo-da-vinci.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/images/leonardo-da-vinci.png
new file mode 100644
index 000000000..854acb4ca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/images/leonardo-da-vinci.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/outputfromqdocfiles.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/outputfromqdocfiles.index
new file mode 100644
index 000000000..c158f9fac
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/outputfromqdocfiles.index
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="A test project for QDoc build artifacts" version="" project="OutputFromQDocFiles">
+ <namespace name="" status="active" access="public" module="outputfromqdocfiles">
+ <page name="qdoctests-qdocmanuallikefileoutput.html" href="qdoctests-qdocmanuallikefileoutput.html" status="active" location="qdoctests-outputfromqdocmanuallikefiles.qdoc" documented="true" subtype="page" title="Document Navigation" fulltitle="Document Navigation" subtitle="">
+ <target name="previouspage-command"/>
+ <contents name="commands" title="Commands" level="1"/>
+ <contents name="previouspage" title="\previouspage" level="2"/>
+ </page>
+ <page name="qdoctests-qdocfileoutput-exhaustive.html" href="qdoctests-qdocfileoutput-exhaustive.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Exhaustive testing of QDoc commands" fulltitle="Exhaustive testing of QDoc commands" subtitle="" brief="This page is a dumping ground for QDoc commands under test">
+ <contents name="this-is-a-section1" title="This is a section1" level="1"/>
+ <contents name="this-is-a-section2" title="This is a section2" level="2"/>
+ <contents name="this-is-a-section3" title="This is a section3" level="3"/>
+ <contents name="this-is-a-section4" title="This is a section4" level="4"/>
+ <contents name="images" title="Images" level="1"/>
+ <contents name="commands-not-yet-tested" title="Commands not yet tested" level="1"/>
+ </page>
+ <page name="toc-test.html" href="toc-test.html" status="active" location="toc.qdoc" documented="true" subtype="page" title="TOC" fulltitle="TOC" subtitle=""/>
+ <page name="toc.html" href="toc.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Table of Contents" fulltitle="Table of Contents" subtitle=""/>
+ <page name="qdoctests-qdocfileoutput.html" href="qdoctests-qdocfileoutput.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Testing QDoc output from .qdoc files" fulltitle="Testing QDoc output from .qdoc files" subtitle="" brief="This is a simple page for testing purposes only">
+ <contents name="supported-file-types" title="Supported file types" level="1"/>
+ <contents name="further-information" title="Further information" level="1"/>
+ <contents name="linking" title="Linking" level="1"/>
+ <contents name="qdoc-linking-test" title="QDoc Linking Test" level="1"/>
+ <contents name="linking-to-something-in-a-section-title" title="Linking to something in a section title" level="1"/>
+ </page>
+ <page name="qdoctests-qdocfileoutput-linking.html" href="qdoctests-qdocfileoutput-linking.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Testing QDoc's link command" fulltitle="Testing QDoc's link command" subtitle="" brief="This is a page for testing QDoc's link command">
+ <target name="link-test-target"/>
+ <keyword name="qdoc-linking-test" title="QDoc Linking Test"/>
+ <contents name="link-targets" title="Link targets" level="1"/>
+ </page>
+ <page name="crash.html" href="crash.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle=""/>
+ </namespace>
+</INDEX>
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
new file mode 100644
index 000000000..ce9c0419f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput-exhaustive.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- qdoctests-outputfromqdocfiles.qdoc -->
+ <meta name="description" content="This page is a dumping ground for QDoc commands under test.">
+ <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>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" />
+ <link rel="next" href="qdoctests-qdocfileoutput-linking.html" />
+<p class="naviNextPrevious headerNavi">
+<a class="prevPage" href="qdoctests-qdocfileoutput.html">QDoc Testing</a>
+<a class="nextPage" href="qdoctests-qdocfileoutput-linking.html">QDoc Linking Test</a>
+</p>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#this-is-a-section1">This is a section1</a></li>
+<li class="level2"><a href="#this-is-a-section2">This is a section2</a></li>
+<li class="level3"><a href="#this-is-a-section3">This is a section3</a></li>
+<li class="level4"><a href="#this-is-a-section4">This is a section4</a></li>
+<li class="level1"><a href="#images">Images</a></li>
+<li class="level1"><a href="#commands-not-yet-tested">Commands not yet tested</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Exhaustive testing of QDoc commands</h1>
+<!-- $$$qdoctests-qdocfileoutput-exhaustive.html-description -->
+<div class="descr" id="details">
+<h2 id="this-is-a-section1">This is a section1</h2>
+<h3 id="this-is-a-section2">This is a section2</h3>
+<h4 id="this-is-a-section3">This is a section3</h4>
+<h5 id="this-is-a-section4">This is a section4</h5>
+<pre class="cpp plain" translate="no">This is bad code</pre>
+<p>This text should have a line break riiiiight <br />
+ noooow.</p>
+<p><b>All your text belong to bold</b> ...And this is an examble of only <b>bold</b> being, well, bold.</p>
+<pre class="cpp" translate="no"> ...</pre>
+<p class="figCaption">This a caption</p>
+<div class="LegaleseLeft"><p>Lorem legal ipsum</p>
+</div><blockquote><p>This is a quotation.</p>
+</blockquote>
+ <html><body>This is <b>raw</b>. Like the <h1>Eddie Murphy</h1> movie. Just not as funny.</body></html>
+ <p>Look, ma! I made a sidebar!</p>
+<div class="table"><table class="generic">
+ <tr valign="top" class="odd"><td >Table item in a table row</td></tr>
+<tr valign="top" class="even"><td >Another item in a different row</td></tr>
+</table></div>
+<div class="admonition important">
+<p><b>Important: </b>This is really important.</p>
+</div>
+<div class="admonition note">
+<p><b>Note: </b>The code above doesn't compile</p>
+</div>
+<hr />
+<h2 id="images">Images</h2>
+<p>An image without any text:</p>
+<p class="centerAlign"><img src="images/leonardo-da-vinci.png" alt="" /></p><p>An image with just an alternative text:</p>
+<p class="centerAlign"><img src="images/leonardo-da-vinci.png" alt="Image alt" /></p><p>An image with alternative text and 1-atom caption:</p>
+<p class="centerAlign"><img src="images/leonardo-da-vinci.png" alt="Image alt" /></p><p class="figCaption">Image caption</p>
+<p>An image with alternative text and 2-atom caption:</p>
+<p class="centerAlign"><img src="images/leonardo-da-vinci.png" alt="Image alt" /></p><p class="figCaption">Image caption with <b>bold</b> text</p>
+<p>A bordered image:</p>
+<div class="border"><p class="centerAlign"><img src="images/leonardo-da-vinci.png" alt="" /></p></div><p>A bordered image with a caption:</p>
+<div class="border"><p class="centerAlign"><img src="images/leonardo-da-vinci.png" alt="" /></p></div><p class="figCaption">Screenshot of the System Tray Icon</p>
+<p>An inline image:</p>
+<p>The is a paragraph containing an <img src="images/01.png" alt="" /> inline image to test if qdoc handles them properly, without considering rest of the line as alt text for the image.</p>
+<p>An inline image with alt text:</p>
+<p>Here is another example of <img src="images/01.png" alt="No. 1" /> inline image with alternative text, which should be added as an attribute to the inline image.</p>
+<p>File quoting:</p>
+<pre class="cpp" translate="no"> <span class="keyword">if</span> (<span class="keyword">false</span>) {
+ <span class="keyword">return</span> <span class="number">1</span>;
+ }</pre>
+<h2 id="commands-not-yet-tested">Commands not yet tested</h2>
+<div class="admonition warning">
+<p><b>Warning: </b>The following commands have yet to be tested: footnote link sincelist header index topicref // or just don’t care, remove it inlineimage printline printto quotefile skipline skipuntil span snippet codeline overload sub sup tableofcontents tt uicontrol endmapref endomit underline unicode</p>
+</div>
+</div>
+<!-- @@@qdoctests-qdocfileoutput-exhaustive.html -->
+<p class="naviNextPrevious footerNavi">
+<a class="prevPage" href="qdoctests-qdocfileoutput.html">QDoc Testing</a>
+<a class="nextPage" href="qdoctests-qdocfileoutput-linking.html">QDoc Linking Test</a>
+</p>
+</body>
+</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
new file mode 100644
index 000000000..4b50d9ee2
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput-linking.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- qdoctests-outputfromqdocfiles.qdoc -->
+ <meta name="description" content="This is a page for testing QDoc's link command.">
+ <title>Testing QDoc's link command | OutputFromQDocFiles</title>
+</head>
+<body>
+<li><a href="toc-test.html" translate="no">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" />
+ <link rel="next" href="" />
+<p class="naviNextPrevious headerNavi">
+<a class="prevPage" href="qdoctests-qdocfileoutput-exhaustive.html">Exhaustive testing of QDoc commands</a>
+<a class="nextPage" href="">Random page</a>
+</p>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#link-targets">Link targets</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Testing QDoc's link command</h1>
+<!-- $$$qdoctests-qdocfileoutput-linking.html-description -->
+<div class="descr" id="details">
+<span id="link-test-target"></span><h2 id="link-targets">Link targets</h2>
+<p>Valid parameters for the link command (<code translate="no">\l</code>) are page and section titles, targets defined with \target or \keyword commands, and API reference keywords (types, methods, namespaces, and so on).</p>
+</div>
+<!-- @@@qdoctests-qdocfileoutput-linking.html -->
+<p class="naviNextPrevious footerNavi">
+<a class="prevPage" href="qdoctests-qdocfileoutput-exhaustive.html">Exhaustive testing of QDoc commands</a>
+<a class="nextPage" href="">Random page</a>
+</p>
+</body>
+</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
new file mode 100644
index 000000000..cbb55db2e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- qdoctests-outputfromqdocfiles.qdoc -->
+ <meta name="description" content="This is a simple page for testing purposes only.">
+ <title>Testing QDoc output from .qdoc files | OutputFromQDocFiles</title>
+</head>
+<body>
+<li><a href="toc-test.html" translate="no">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" />
+<p class="naviNextPrevious headerNavi">
+<a class="nextPage" href="qdoctests-qdocfileoutput-exhaustive.html">Exhaustive testing of QDoc commands</a>
+</p>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#supported-file-types">Supported file types</a></li>
+<li class="level1"><a href="#further-information">Further information</a></li>
+<li class="level1"><a href="#linking">Linking</a></li>
+<li class="level1"><a href="#qdoc-linking-test">QDoc Linking Test</a></li>
+<li class="level1"><a href="#linking-to-something-in-a-section-title">Linking to something in a section title</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Testing QDoc output from .qdoc files</h1>
+<!-- $$$qdoctests-qdocfileoutput.html-description -->
+<div class="descr" id="details">
+<p>QDoc generates documentation for software projects. It does this by extracting <i>QDoc comments</i> from project source files. QDoc comments are signified by a C-style-like comment tag followed by an exclamation point, like this: <code translate="no">/*!</code> <code translate="no">This text is contained within QDoc comment tags.</code> <code translate="no">*/</code>.</p>
+<h2 id="supported-file-types">Supported file types</h2>
+<p>QDoc parses <code translate="no">.cpp</code> and <code translate="no">.qdoc</code> files. It does extract comments from header (<code translate="no">.h</code>) files.</p>
+<h2 id="further-information">Further information</h2>
+<p>This test document is written with the purpose of testing the output QDoc generates when parsing <code translate="no">.qdoc</code> files. It is fairly simple and makes use of a limited subset of QDoc's command. Those commands are:</p>
+<ul>
+<li><code translate="no">\page</code></li>
+<li><code translate="no">\title</code></li>
+<li><code translate="no">\brief</code></li>
+<li><code translate="no">\e</code> (for emphasizing &quot;QDoc comments&quot;)</li>
+<li><code translate="no">\c</code> (for multiple monospace-formatted entries)</li>
+<li><code translate="no">\section1</code></li>
+<li><code translate="no">\list</code></li>
+<li><code translate="no">\li</code></li>
+<li><code translate="no">\endlist</code></li>
+</ul>
+<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>
+</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>
+<p>This is allowed but a questionable practice.</p>
+<details>
+<summary>QDoc details</summary>
+<div class="admonition note">
+<p><b>Note: </b>You're looking at detailed information.</p>
+</div>
+</details>
+</div>
+<!-- @@@qdoctests-qdocfileoutput.html -->
+<p class="naviNextPrevious footerNavi">
+<a class="nextPage" href="qdoctests-qdocfileoutput-exhaustive.html">Exhaustive testing of QDoc commands</a>
+</p>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocmanuallikefileoutput.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocmanuallikefileoutput.html
new file mode 100644
index 000000000..e4b120bd0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocmanuallikefileoutput.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- qdoctests-outputfromqdocmanuallikefiles.qdoc -->
+ <title>Document Navigation | OutputFromQDocFiles</title>
+</head>
+<body>
+<li id="buildversion">OutputFromQDocFiles - A test project for QDoc build artifacts</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#commands">Commands</a></li>
+<li class="level2"><a href="#previouspage">\previouspage</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Document Navigation</h1>
+<!-- $$$qdoctests-qdocmanuallikefileoutput.html-description -->
+<div class="descr" id="details">
+<p>The navigation commands...</p>
+<blockquote> <table border="0" cellpadding="0" cellspacing="5" width="100%">
+
+ <tr>
+ <p>
+ [Previous: <a href="15-qdoc-commands-navigation.html#deadlink">
+ Basic Qt</a>]
+ [<a href="15-qdoc-commands-navigation.html#deadlink">Contents</a>]
+ [Next: <a href="15-qdoc-commands-navigation.html#deadlink">
+ Creating Dialogs</a>]
+ </p>
+
+ <h1 align="center">Getting Started<br /></h1>
+
+ <p>
+ This chapter shows how to combine basic C++ with the
+ functionality provided by Qt to create a few small graphical
+ interface (GUI) applications.
+ </p>
+
+ <p>
+ [Previous: <a href="15-qdoc-commands-navigation.html#deadlink">
+ Basic Qt</a>]
+ [<a href="15-qdoc-commands-navigation.html#deadlink">Contents</a>]
+ [Next: <a href="15-qdoc-commands-navigation.html#deadlink">
+ Creating Dialogs</a>]
+ </p>
+
+ </table>
+ </blockquote>
+<pre class="cpp" translate="no"><span class="operator">&lt;</span>head<span class="operator">&gt;</span>
+ <span class="operator">.</span><span class="operator">.</span><span class="operator">.</span>
+ <span class="operator">&lt;</span>link rel<span class="operator">=</span><span class="string">&quot;start&quot;</span> href<span class="operator">=</span><span class="string">&quot;basicqt.html&quot;</span> <span class="operator">/</span><span class="operator">&gt;</span>
+ <span class="operator">.</span><span class="operator">.</span><span class="operator">.</span>
+<span class="operator">&lt;</span><span class="operator">/</span>head<span class="operator">&gt;</span></pre>
+<h2 id="commands">Commands</h2>
+<span id="previouspage-command"></span><h3 id="previouspage">\previouspage</h3>
+<p>The \previouspage command...</p>
+</div>
+<!-- @@@qdoctests-qdocmanuallikefileoutput.html -->
+</body>
+</html>
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
new file mode 100644
index 000000000..519109bc9
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/toc-test.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- toc.qdoc -->
+ <title>TOC | OutputFromQDocFiles</title>
+</head>
+<body>
+<li id="buildversion">OutputFromQDocFiles - A test project for QDoc build artifacts</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">TOC</h1>
+<!-- $$$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>
+</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>
+</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>
+</ul>
+</li>
+</ul>
+</div>
+<!-- @@@toc-test.html -->
+</body>
+</html>
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
new file mode 100644
index 000000000..d6f423f49
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/toc.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- qdoctests-outputfromqdocfiles.qdoc -->
+ <title>Table of Contents | OutputFromQDocFiles</title>
+</head>
+<body>
+<li><a href="toc-test.html" translate="no">TOC</a></li>
+<li>Table of Contents</li>
+<li id="buildversion">OutputFromQDocFiles - A test project for QDoc build artifacts</li>
+ <link rel="prev" href="" />
+<p class="naviNextPrevious headerNavi">
+<a class="prevPage" href="">Random page</a>
+</p>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Table of Contents</h1>
+<!-- $$$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>
+</ul>
+</div>
+<!-- @@@toc.html -->
+<p class="naviNextPrevious footerNavi">
+<a class="prevPage" href="">Random page</a>
+</p>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/crash.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/crash.webxml
new file mode 100644
index 000000000..6ffdbcba5
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/crash.webxml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="crash.html" href="crash.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle="">
+ <description>
+ <relation href="toc.html" type="page" meta="next" description="Table of Contents"/>
+ <relation href="qdoctests-qdocfileoutput-linking.html" type="page" meta="previous" description="Testing QDoc's link command"/>
+ <para></para>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/images/01.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/images/01.png
new file mode 100644
index 000000000..d73ab969b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/images/01.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/images/leonardo-da-vinci.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/images/leonardo-da-vinci.png
new file mode 100644
index 000000000..854acb4ca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/images/leonardo-da-vinci.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/outputfromqdocfiles.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/outputfromqdocfiles.index
new file mode 100644
index 000000000..c158f9fac
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/outputfromqdocfiles.index
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="A test project for QDoc build artifacts" version="" project="OutputFromQDocFiles">
+ <namespace name="" status="active" access="public" module="outputfromqdocfiles">
+ <page name="qdoctests-qdocmanuallikefileoutput.html" href="qdoctests-qdocmanuallikefileoutput.html" status="active" location="qdoctests-outputfromqdocmanuallikefiles.qdoc" documented="true" subtype="page" title="Document Navigation" fulltitle="Document Navigation" subtitle="">
+ <target name="previouspage-command"/>
+ <contents name="commands" title="Commands" level="1"/>
+ <contents name="previouspage" title="\previouspage" level="2"/>
+ </page>
+ <page name="qdoctests-qdocfileoutput-exhaustive.html" href="qdoctests-qdocfileoutput-exhaustive.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Exhaustive testing of QDoc commands" fulltitle="Exhaustive testing of QDoc commands" subtitle="" brief="This page is a dumping ground for QDoc commands under test">
+ <contents name="this-is-a-section1" title="This is a section1" level="1"/>
+ <contents name="this-is-a-section2" title="This is a section2" level="2"/>
+ <contents name="this-is-a-section3" title="This is a section3" level="3"/>
+ <contents name="this-is-a-section4" title="This is a section4" level="4"/>
+ <contents name="images" title="Images" level="1"/>
+ <contents name="commands-not-yet-tested" title="Commands not yet tested" level="1"/>
+ </page>
+ <page name="toc-test.html" href="toc-test.html" status="active" location="toc.qdoc" documented="true" subtype="page" title="TOC" fulltitle="TOC" subtitle=""/>
+ <page name="toc.html" href="toc.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Table of Contents" fulltitle="Table of Contents" subtitle=""/>
+ <page name="qdoctests-qdocfileoutput.html" href="qdoctests-qdocfileoutput.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Testing QDoc output from .qdoc files" fulltitle="Testing QDoc output from .qdoc files" subtitle="" brief="This is a simple page for testing purposes only">
+ <contents name="supported-file-types" title="Supported file types" level="1"/>
+ <contents name="further-information" title="Further information" level="1"/>
+ <contents name="linking" title="Linking" level="1"/>
+ <contents name="qdoc-linking-test" title="QDoc Linking Test" level="1"/>
+ <contents name="linking-to-something-in-a-section-title" title="Linking to something in a section title" level="1"/>
+ </page>
+ <page name="qdoctests-qdocfileoutput-linking.html" href="qdoctests-qdocfileoutput-linking.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Testing QDoc's link command" fulltitle="Testing QDoc's link command" subtitle="" brief="This is a page for testing QDoc's link command">
+ <target name="link-test-target"/>
+ <keyword name="qdoc-linking-test" title="QDoc Linking Test"/>
+ <contents name="link-targets" title="Link targets" level="1"/>
+ </page>
+ <page name="crash.html" href="crash.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="" fulltitle="" subtitle=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/qdoctests-qdocfileoutput-exhaustive.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/qdoctests-qdocfileoutput-exhaustive.webxml
new file mode 100644
index 000000000..25e3dcc9e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/qdoctests-qdocfileoutput-exhaustive.webxml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="qdoctests-qdocfileoutput-exhaustive.html" href="qdoctests-qdocfileoutput-exhaustive.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Exhaustive testing of QDoc commands" fulltitle="Exhaustive testing of QDoc commands" subtitle="" brief="This page is a dumping ground for QDoc commands under test">
+ <contents name="this-is-a-section1" title="This is a section1" level="1"/>
+ <contents name="this-is-a-section2" title="This is a section2" level="2"/>
+ <contents name="this-is-a-section3" title="This is a section3" level="3"/>
+ <contents name="this-is-a-section4" title="This is a section4" level="4"/>
+ <contents name="images" title="Images" level="1"/>
+ <contents name="commands-not-yet-tested" title="Commands not yet tested" level="1"/>
+ <description>
+ <relation href="qdoctests-qdocfileoutput-linking.html" type="page" meta="next" description="Testing QDoc's link command"/>
+ <relation href="qdoctests-qdocfileoutput.html" type="page" meta="previous" description="Testing QDoc output from .qdoc files"/>
+ <brief>This page is a dumping ground for QDoc commands under test.</brief>
+ <section id="this-is-a-section1">
+ <heading level="1">This is a section1</heading>
+ </section>
+ <section id="this-is-a-section2">
+ <heading level="2">This is a section2</heading>
+ </section>
+ <section id="this-is-a-section3">
+ <heading level="3">This is a section3</heading>
+ </section>
+ <section id="this-is-a-section4">
+ <heading level="4">This is a section4</heading>
+ </section>
+ </description>
+ </page>
+ </document>
+ <badcode>This is bad code</badcode>
+ <para>This text should have a line break riiiiight noooow.</para>
+ <para>
+ <bold>All your text belong to bold</bold> ...And this is an examble of only <bold>bold</bold> being, well, bold.</para>
+ <dots indent="4">...</dots>
+ <para>This a caption</para>
+ <legalese>
+ <para>Lorem legal ipsum</para>
+ </legalese>
+ <quote>
+ <para>This is a quotation.</para>
+ </quote>
+ <raw format="HTML"> &lt;html&gt;&lt;body&gt;This is &lt;b&gt;raw&lt;/b&gt;. Like the &lt;h1&gt;Eddie Murphy&lt;/h1&gt; movie. Just not as funny.&lt;/body&gt;&lt;/html&gt;
+ </raw>
+ <para>Look, ma! I made a sidebar!</para>
+ <table>
+ <row>
+ <item>
+ <para>Table item in a table row</para>
+ </item>
+ </row>
+ <row>
+ <item>
+ <para>Another item in a different row</para>
+ </item>
+ </row>
+ </table>
+ <para>
+ <bold>Important:</bold> This is really important.</para>
+ <para>
+ <bold>Note:</bold> The code above doesn't compile</para>
+ <section id="images">
+ <heading level="1">Images</heading>
+ <para>An image without any text:</para>
+ <image href="images/leonardo-da-vinci.png"/>
+ <para>An image with just an alternative text:</para>
+ <image href="images/leonardo-da-vinci.png"/>
+ <para>An image with alternative text and 1-atom caption:</para>
+ <image href="images/leonardo-da-vinci.png"/>
+ <para>Image caption</para>
+ <para>An image with alternative text and 2-atom caption:</para>
+ <image href="images/leonardo-da-vinci.png"/>
+ <para>Image caption with <bold>bold</bold> text</para>
+ <para>A bordered image:</para>
+ <image href="images/leonardo-da-vinci.png"/>
+ <para>A bordered image with a caption:</para>
+ <image href="images/leonardo-da-vinci.png"/>
+ <para>Screenshot of the System Tray Icon</para>
+ <para>An inline image:</para>
+ <para>The is a paragraph containing an <inlineimage href="images/01.png"/> inline image to test if qdoc handles them properly, without considering rest of the line as alt text for the image.</para>
+ <para>An inline image with alt text:</para>
+ <para>Here is another example of <inlineimage href="images/01.png"/> inline image with alternative text, which should be added as an attribute to the inline image.</para>
+ <para>File quoting:</para>
+ <quotefromfile>main.cpp</quotefromfile>
+ <skipto>/if \(/</skipto>
+ <printuntil>/^ \}/</printuntil>
+ </section>
+ <section id="commands-not-yet-tested">
+ <heading level="1">Commands not yet tested</heading>
+ <para>
+ <bold>Warning:</bold> The following commands have yet to be tested: footnote link sincelist header index topicref // or just don’t care, remove it inlineimage printline printto quotefile skipline skipuntil span snippet codeline overload sub sup tableofcontents tt uicontrol endmapref endomit underline unicode</para>
+ </section>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/qdoctests-qdocfileoutput-linking.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/qdoctests-qdocfileoutput-linking.webxml
new file mode 100644
index 000000000..d2c53d965
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/qdoctests-qdocfileoutput-linking.webxml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="qdoctests-qdocfileoutput-linking.html" href="qdoctests-qdocfileoutput-linking.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Testing QDoc's link command" fulltitle="Testing QDoc's link command" subtitle="" brief="This is a page for testing QDoc's link command">
+ <target name="link-test-target"/>
+ <keyword name="qdoc-linking-test" title="QDoc Linking Test"/>
+ <contents name="link-targets" title="Link targets" level="1"/>
+ <description>
+ <relation href="" type="page" meta="next" description="Random page"/>
+ <relation href="qdoctests-qdocfileoutput-exhaustive.html" type="page" meta="previous" description="Exhaustive testing of QDoc commands"/>
+ <brief>This is a page for testing QDoc's link command.</brief>
+ <target name="link-test-target"/>
+ <section id="link-targets">
+ <heading level="1">Link targets</heading>
+ <para>Valid parameters for the link command (<teletype type="highlighted">\l</teletype>) are page and section titles, targets defined with \target or \keyword commands, and API reference keywords (types, methods, namespaces, and so on).</para>
+ </section>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/qdoctests-qdocfileoutput.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/qdoctests-qdocfileoutput.webxml
new file mode 100644
index 000000000..b6b8dc6cb
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/qdoctests-qdocfileoutput.webxml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="qdoctests-qdocfileoutput.html" href="qdoctests-qdocfileoutput.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Testing QDoc output from .qdoc files" fulltitle="Testing QDoc output from .qdoc files" subtitle="" brief="This is a simple page for testing purposes only">
+ <contents name="supported-file-types" title="Supported file types" level="1"/>
+ <contents name="further-information" title="Further information" level="1"/>
+ <contents name="linking" title="Linking" level="1"/>
+ <contents name="qdoc-linking-test" title="QDoc Linking Test" level="1"/>
+ <contents name="linking-to-something-in-a-section-title" title="Linking to something in a section title" level="1"/>
+ <description>
+ <relation href="qdoctests-qdocfileoutput-exhaustive.html" type="page" meta="next" description="Exhaustive testing of QDoc commands"/>
+ <brief>This is a simple page for testing purposes only.</brief>
+ <para>QDoc generates documentation for software projects. It does this by extracting <italic>QDoc comments</italic> from project source files. QDoc comments are signified by a C-style-like comment tag followed by an exclamation point, like this: <teletype type="highlighted">/*!</teletype> <teletype type="highlighted">This text is contained within QDoc comment tags.</teletype> <teletype type="highlighted">*/</teletype>.</para>
+ <section id="supported-file-types">
+ <heading level="1">Supported file types</heading>
+ <para>QDoc parses <teletype type="highlighted">.cpp</teletype> and <teletype type="highlighted">.qdoc</teletype> files. It does extract comments from header (<teletype type="highlighted">.h</teletype>) files.</para>
+ </section>
+ <section id="further-information">
+ <heading level="1">Further information</heading>
+ <para>This test document is written with the purpose of testing the output QDoc generates when parsing <teletype type="highlighted">.qdoc</teletype> files. It is fairly simple and makes use of a limited subset of QDoc's command. Those commands are:</para>
+ <list type="bullet">
+ <item>
+ <para>
+ <teletype type="highlighted">\page</teletype></para>
+ </item>
+ <item>
+ <para>
+ <teletype type="highlighted">\title</teletype></para>
+ </item>
+ <item>
+ <para>
+ <teletype type="highlighted">\brief</teletype></para>
+ </item>
+ <item>
+ <para>
+ <teletype type="highlighted">\e</teletype> (for emphasizing &quot;QDoc comments&quot;)</para>
+ </item>
+ <item>
+ <para>
+ <teletype type="highlighted">\c</teletype> (for multiple monospace-formatted entries)</para>
+ </item>
+ <item>
+ <para>
+ <teletype type="highlighted">\section1</teletype></para>
+ </item>
+ <item>
+ <para>
+ <teletype type="highlighted">\list</teletype></para>
+ </item>
+ <item>
+ <para>
+ <teletype type="highlighted">\li</teletype></para>
+ </item>
+ <item>
+ <para>
+ <teletype type="highlighted">\endlist</teletype></para>
+ </item>
+ </list>
+ </section>
+ <section id="linking">
+ <heading level="1">Linking</heading>
+ <para>There are multiple ways to create hyperlinks to other topics:</para>
+ <list type="bullet">
+ <item>
+ <para>
+ <link raw="Testing QDoc's link command" href="qdoctests-qdocfileoutput-linking.html" type="page" page="Testing QDoc's link command">Linking to a page title</link></para>
+ </item>
+ <item>
+ <para>
+ <link raw="Link targets" href="qdoctests-qdocfileoutput-linking.html#link-targets" type="page" page="Testing QDoc's link command">Linking to a section title</link></para>
+ </item>
+ <item>
+ <para>
+ <link raw="link-test-target" href="qdoctests-qdocfileoutput-linking.html#link-test-target" type="page" page="Testing QDoc's link command">Linking using a \target string</link></para>
+ </item>
+ <item>
+ <para>
+ <link raw="QDoc Linking Test" href="qdoctests-qdocfileoutput-linking.html" type="page" page="Testing QDoc's link command">Linking using a \keyword string</link></para>
+ </item>
+ </list>
+ </section>
+ <section id="qdoc-linking-test">
+ <heading level="1">QDoc Linking Test</heading>
+ <para>This section title is overridden by another target which takes precedence.</para>
+ </section>
+ <section id="linking-to-something-in-a-section-title">
+ <heading level="1">Linking to <link raw="Further information" href="qdoctests-qdocfileoutput.html#further-information" type="page" page="Testing QDoc output from .qdoc files">something</link> in a section title</heading>
+ <para>This is allowed but a questionable practice.</para>
+ <para>
+ <bold>Note:</bold> You're looking at detailed information.</para>
+ </section>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/qdoctests-qdocmanuallikefileoutput.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/qdoctests-qdocmanuallikefileoutput.webxml
new file mode 100644
index 000000000..4502dcf7f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/qdoctests-qdocmanuallikefileoutput.webxml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="qdoctests-qdocmanuallikefileoutput.html" href="qdoctests-qdocmanuallikefileoutput.html" status="active" location="qdoctests-outputfromqdocmanuallikefiles.qdoc" documented="true" subtype="page" title="Document Navigation" fulltitle="Document Navigation" subtitle="">
+ <target name="previouspage-command"/>
+ <contents name="commands" title="Commands" level="1"/>
+ <contents name="previouspage" title="\previouspage" level="2"/>
+ <description>
+ <para>The navigation commands...</para>
+ <quote>
+ <raw format="HTML"> &lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;5&quot; width=&quot;100%&quot;&gt;
+
+ &lt;tr&gt;
+ &lt;p&gt;
+ [Previous: &lt;a href=&quot;15-qdoc-commands-navigation.html#deadlink&quot;&gt;
+ Basic Qt&lt;/a&gt;]
+ [&lt;a href=&quot;15-qdoc-commands-navigation.html#deadlink&quot;&gt;Contents&lt;/a&gt;]
+ [Next: &lt;a href=&quot;15-qdoc-commands-navigation.html#deadlink&quot;&gt;
+ Creating Dialogs&lt;/a&gt;]
+ &lt;/p&gt;
+
+ &lt;h1 align=&quot;center&quot;&gt;Getting Started&lt;br /&gt;&lt;/h1&gt;
+
+ &lt;p&gt;
+ This chapter shows how to combine basic C++ with the
+ functionality provided by Qt to create a few small graphical
+ interface (GUI) applications.
+ &lt;/p&gt;
+
+ &lt;p&gt;
+ [Previous: &lt;a href=&quot;15-qdoc-commands-navigation.html#deadlink&quot;&gt;
+ Basic Qt&lt;/a&gt;]
+ [&lt;a href=&quot;15-qdoc-commands-navigation.html#deadlink&quot;&gt;Contents&lt;/a&gt;]
+ [Next: &lt;a href=&quot;15-qdoc-commands-navigation.html#deadlink&quot;&gt;
+ Creating Dialogs&lt;/a&gt;]
+ &lt;/p&gt;
+
+ &lt;/table&gt;
+ </raw>
+ </quote>
+ <code>&lt;head&gt;
+ ...
+ &lt;link rel=&quot;start&quot; href=&quot;basicqt.html&quot; /&gt;
+ ...
+&lt;/head&gt;</code>
+ <section id="commands">
+ <heading level="1">Commands</heading>
+ <target name="previouspage-command"/>
+ </section>
+ <section id="previouspage">
+ <heading level="2">\previouspage</heading>
+ <para>The \previouspage command...</para>
+ </section>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/toc-test.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/toc-test.webxml
new file mode 100644
index 000000000..767973fc6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/toc-test.webxml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="toc-test.html" href="toc-test.html" status="active" location="toc.qdoc" documented="true" subtype="page" title="TOC" fulltitle="TOC" subtitle="">
+ <description>
+ <list type="bullet">
+ <item>
+ <para>
+ <link raw="Testing QDoc output from .qdoc files" href="qdoctests-qdocfileoutput.html" type="page" page="Testing QDoc output from .qdoc files">QDoc Testing</link></para>
+ <list type="bullet">
+ <item>
+ <para>
+ <link raw="Exhaustive testing of QDoc commands" href="qdoctests-qdocfileoutput-exhaustive.html" type="page" page="Exhaustive testing of QDoc commands">Exhaustive testing of QDoc commands</link></para>
+ </item>
+ </list>
+ </item>
+ <item>
+ <para>Linking</para>
+ <list type="bullet">
+ <item>
+ <para>
+ <link raw="QDoc Linking Test" href="qdoctests-qdocfileoutput-linking.html" type="page" page="Testing QDoc's link command">QDoc Linking Test</link></para>
+ <list type="bullet">
+ <item>
+ <para>
+ <link raw="Link targets" href="qdoctests-qdocfileoutput-linking.html#link-targets" type="page" page="Testing QDoc's link command">Link targets</link></para>
+ </item>
+ </list>
+ </item>
+ <item>
+ <para>
+ <link raw="crash.html" href="crash.html" type="page" page="crash.html">Random page</link></para>
+ </item>
+ <item>
+ <para>
+ <link raw="Table of Contents" href="toc.html" type="page" page="Table of Contents">Table of Contents</link></para>
+ </item>
+ </list>
+ </item>
+ </list>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/toc.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/toc.webxml
new file mode 100644
index 000000000..9718191e0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/webxml/toc.webxml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="toc.html" href="toc.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Table of Contents" fulltitle="Table of Contents" subtitle="">
+ <description>
+ <relation href="" type="page" meta="previous" description="Random page"/>
+ <list type="bullet">
+ <item>
+ <para>
+ <link raw="Testing QDoc output from .qdoc files" href="qdoctests-qdocfileoutput.html" type="page" page="Testing QDoc output from .qdoc files">QDoc Testing</link></para>
+ </item>
+ <item>
+ <para>
+ <link raw="QDoc Linking Test" href="qdoctests-qdocfileoutput-linking.html" type="page" page="Testing QDoc's link command">QDoc Linking Test</link></para>
+ </item>
+ <item>
+ <para>
+ <link raw="Table of Contents" href="toc.html" type="page" page="Table of Contents">Table of Contents</link></para>
+ </item>
+ </list>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/images/01.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/images/01.png
new file mode 100644
index 000000000..d73ab969b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/images/01.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/images/leonardo-da-vinci.png b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/images/leonardo-da-vinci.png
new file mode 100644
index 000000000..854acb4ca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/images/leonardo-da-vinci.png
Binary files differ
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/qdoctests-outputfromqdocfiles.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/qdoctests-outputfromqdocfiles.qdoc
new file mode 100644
index 000000000..b19905b7e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/qdoctests-outputfromqdocfiles.qdoc
@@ -0,0 +1,241 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+\if defined(test_navigation)
+ \nextpage {qdoctests-qdocfileoutput-linking.html}{QDoc Linking Test}
+\endif
+
+ \page qdoctests-qdocfileoutput.html
+ \title Testing \PROD output from .qdoc files
+ \brief This is a simple page for testing purposes only.
+
+ QDoc generates documentation for software projects. It does this by
+ extracting \e {QDoc comments} from project source files. QDoc comments are
+ signified by a C-style-like comment tag followed by an exclamation point,
+ like this:
+ \beginqdoc \c {This text is contained within QDoc comment tags.} \endqdoc.
+
+ \section1 Supported file types
+ QDoc parses \c .cpp and \c .qdoc files. It does extract comments from
+ header (\c {.h}) files.
+
+ \section1 Further information
+ This test document is written with the purpose of testing the output QDoc
+ generates when parsing \c .qdoc files. It is fairly simple and makes use of
+ a limited subset of QDoc's command. Those commands are:
+ \list
+ \li \c {\page}
+ \li \c {\title}
+ \li \c {\brief}
+ \li \c {\e} (for emphasizing "QDoc comments")
+ \li \c {\c} (for multiple monospace-formatted entries)
+ \li \c {\section1}
+ \li \c {\list}
+ \li \c {\li}
+ \li \c {\endlist}
+ \endlist
+
+ \section1 Linking
+
+ There are multiple ways to create hyperlinks to other topics:
+
+ \list
+ \li \l {Testing QDoc's link command}{Linking to a page title}
+ \li \l {Link targets}{Linking to a section title}
+ \li \l {link-test-target}{Linking using a \\target string}
+ \li \l {QDoc Linking Test}{Linking using a \\keyword string}
+ \endlist
+
+ \section1 QDoc Linking Test
+
+ This section title is overridden by another target which takes
+ precedence.
+
+ \section1 Linking to \l {Further information}{something} in a section title
+
+ This is allowed but a questionable practice.
+
+ \details {\PROD details}
+ \note You're looking at detailed information.
+ \enddetails
+*/
+
+/*!
+\if defined(test_navigation)
+ \previouspage qdoctests-qdocfileoutput.html \PROD Testing
+ \nextpage Table of Contents
+\endif
+
+ \keyword QDoc Linking Test
+ \page qdoctests-qdocfileoutput-linking.html
+ \title Testing QDoc's link command
+ \brief This is a page for testing QDoc's link command.
+
+ \target link-test-target
+ \section1 Link targets
+
+ Valid parameters for the link command (\c {\l}) are page and section
+ titles, targets defined with \\target or \\keyword commands, and API
+ reference keywords (types, methods, namespaces, and so on).
+*/
+
+/*!
+\if defined(test_navigation)
+ \previouspage {Testing QDoc's link command}{QDoc Linking Test}
+\endif
+
+ \page toc.html
+ \title Table of Contents
+
+ \list
+ \li \l {Testing \PROD output from .qdoc files}{\PROD Testing}
+ \li \l {QDoc Linking Test}
+ \li \l {Table of Contents}
+ \endlist
+*/
+
+/*!
+ \page qdoctests-qdocfileoutput-exhaustive.html
+ \title Exhaustive testing of QDoc commands
+ \brief This page is a dumping ground for QDoc commands under test.
+
+ \section1 This is a section1
+ \section2 This is a section2
+ \section3 This is a section3
+ \section4 This is a section4
+ \endsection4
+ \endsection3
+ \endsection2
+ \endsection1
+
+ \badcode
+ This is bad code
+ \endcode
+
+ This text should have a line break riiiiight \br noooow.
+
+ \b{All your text belong to bold}
+ ...And this is an examble of only \b bold being, well, bold.
+
+ \dots
+
+ \caption This a caption
+
+ \legalese
+ Lorem legal ipsum
+ \endlegalese
+
+ \quotation
+ This is a quotation.
+ \endquotation
+
+ \raw HTML
+ <html><body>This is <b>raw</b>. Like the <h1>Eddie Murphy</h1> movie. Just not as funny.</body></html>
+ \endraw
+
+ \sidebar
+ Look, ma! I made a sidebar!
+ \endsidebar
+
+ \table
+ \row \li Table item in a table row
+ \row \li Another item in a different row
+ \endtable
+
+ \important This is really important.
+
+ \note The code above doesn't compile
+
+ \hr
+
+ \section1 Images
+
+ An image without any text:
+
+ \image leonardo-da-vinci.png
+
+ An image with just an alternative text:
+
+ \image leonardo-da-vinci.png Image alt
+
+ An image with alternative text and 1-atom caption:
+
+ \image leonardo-da-vinci.png Image alt
+ \caption Image caption
+
+ An image with alternative text and 2-atom caption:
+
+ \image leonardo-da-vinci.png Image alt
+ \caption Image caption with \b {bold} text
+
+ A bordered image:
+
+ \borderedimage leonardo-da-vinci.png
+
+ //! A bordered image with alternative text:
+ //!
+ //! \borderedimage leonardo-da-vinci.png Screenshot of the Drill Down Example
+ //! It looks like this macro is not written to handle alternative text (no \2)
+
+ A bordered image with a caption:
+
+ \borderedimage leonardo-da-vinci.png
+ \caption Screenshot of the System Tray Icon
+
+ An inline image:
+
+ The is a paragraph containing an \inlineimage 01.png inline image to test
+ if qdoc handles them properly, without considering rest of the line as
+ alt text for the image.
+
+ An inline image with alt text:
+
+ Here is another example of \inlineimage 01.png {No. 1} inline image with
+ alternative text, which should be added as an attribute to the inline
+ image.
+
+ File quoting:
+
+ \quotefromfile main.cpp
+ \skipto /if \(/
+ \printuntil /^ \}/
+
+ \section1 Commands not yet tested
+
+ \warning The following commands have yet to be tested:
+ footnote
+ link
+ //! Check why above two (when used in this order) cause missing linefeeds on Windows/webxml
+ sincelist
+ header
+ index
+ topicref // or just don’t care, remove it
+ inlineimage
+ printline
+ printto
+ quotefile
+ skipline
+ skipuntil
+ span
+ snippet
+ codeline
+ overload
+ sub
+ sup
+ tableofcontents
+ tt
+ uicontrol
+ endmapref
+ endomit
+ underline
+ unicode
+
+*/
+
+// Empty link target that was known to assert
+/*!
+ \page crash.html
+
+ \l {}
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/qdoctests-outputfromqdocmanuallikefiles.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/qdoctests-outputfromqdocmanuallikefiles.qdoc
new file mode 100644
index 000000000..23f229745
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/qdoctests-outputfromqdocmanuallikefiles.qdoc
@@ -0,0 +1,59 @@
+// Copyright (C) 2022 Thibaut Cuvelier
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+// Excerpts from src/qdoc/doc/qdoc-guide.qdoc
+
+/*!
+ \page qdoctests-qdocmanuallikefileoutput.html
+
+ \title Document Navigation
+
+ The navigation commands...
+
+ \quotation
+ \raw HTML
+ <table border="0" cellpadding="0" cellspacing="5" width="100%">
+
+ <tr>
+ <p>
+ [Previous: <a href="15-qdoc-commands-navigation.html#deadlink">
+ Basic Qt</a>]
+ [<a href="15-qdoc-commands-navigation.html#deadlink">Contents</a>]
+ [Next: <a href="15-qdoc-commands-navigation.html#deadlink">
+ Creating Dialogs</a>]
+ </p>
+
+ <h1 align="center">Getting Started<br /></h1>
+
+ <p>
+ This chapter shows how to combine basic C++ with the
+ functionality provided by Qt to create a few small graphical
+ interface (GUI) applications.
+ </p>
+
+ <p>
+ [Previous: <a href="15-qdoc-commands-navigation.html#deadlink">
+ Basic Qt</a>]
+ [<a href="15-qdoc-commands-navigation.html#deadlink">Contents</a>]
+ [Next: <a href="15-qdoc-commands-navigation.html#deadlink">
+ Creating Dialogs</a>]
+ </p>
+
+ </table>
+ \endraw
+ \endquotation
+
+ \code
+ <head>
+ ...
+ <link rel="start" href="basicqt.html" />
+ ...
+ </head>
+ \endcode
+
+ \section1 Commands
+
+ \target previouspage-command
+ \section2 \\previouspage
+
+ The \\previouspage command...
+*/ \ No newline at end of file
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/snippets/main.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/snippets/main.cpp
new file mode 100644
index 000000000..6993849e4
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/snippets/main.cpp
@@ -0,0 +1,10 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+int main()
+{
+ if (false) {
+ return 1;
+ }
+ return 0;
+}
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/toc.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/toc.qdoc
new file mode 100644
index 000000000..6ca61de64
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/src/toc.qdoc
@@ -0,0 +1,23 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+/*!
+ \page toc-test.html
+ \title TOC
+
+ \list
+ \li \l {Testing \PROD output from .qdoc files}{\PROD Testing}
+ \list
+ \li \l {Exhaustive testing of QDoc commands}
+ \endlist
+ \li Linking
+ \list
+ \li \l {QDoc Linking Test}
+ \list
+ \li \l {Link targets}
+ \endlist
+ \li \l {crash.html}{Random page}
+ \li \l {Table of Contents}
+ \endlist
+ \endlist
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/tocnavigation.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/tocnavigation.qdocconf
new file mode 100644
index 000000000..b78d91169
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/tocnavigation.qdocconf
@@ -0,0 +1,48 @@
+project = OutputFromQDocFiles
+description = "A test project for QDoc build artifacts"
+buildversion = "$project - $description"
+moduleheader =
+
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# zero warning policy -- here; allow one which is (qdoc) warning: Can't link to ''
+warninglimit = 1
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+outputformats = HTML WebXML DocBook
+HTML.nosubdirs = true
+HTML.outputsubdir = html
+WebXML.quotinginformation = true
+WebXML.nosubdirs = true
+WebXML.outputsubdir = webxml
+DocBook.nosubdirs = true
+DocBook.outputsubdir = docbook
+DocBook.usedocbookextensions = true
+
+# images
+imagedirs = ./src/images
+
+sources = ./src/qdoctests-outputfromqdocfiles.qdoc \
+ ./src/qdoctests-outputfromqdocmanuallikefiles.qdoc \
+ ./src/toc.qdoc
+
+exampledirs = ./src/snippets
+
+macro.beginqdoc = "\\c {/*!}"
+macro.endqdoc = "\\c */"
+macro.PROD = QDoc
+
+# Macro from qtbase/doc/global/macros.qdocconf
+# The file cannot be included directly, because it requires many
+# variables to be set, like QT_VER
+macro.borderedimage = "\\div {class=\"border\"} \\image \1\n\\enddiv"
+
+defines =
+
+navigation.toctitles = TOC
+navigation.toctitles.inclusive = true
+
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/docbook/struct.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/docbook/struct.xml
new file mode 100644
index 000000000..48efdadb7
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/docbook/struct.xml
@@ -0,0 +1,57 @@
+<?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>TrailingBackslashes</db:productname>
+<db:titleabbrev>TrailingBackslashes Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>TrailingBackslashes Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>Struct</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="member-function-documentation">
+<db:title>Member Function Documentation</db:title>
+<db:section xml:id="MultipleTrailingSlashes">
+<db:title>void Struct::MultipleTrailingSlashes()</db:title>
+<db:section>
+<db:title>See Also</db:title>
+<db:para><db:emphasis>See also </db:emphasis>
+<db:simplelist type="vert" role="see-also">
+<db:member><db:link xlink:href="struct.xml#oneTrailingSlash">one slash</db:link></db:member>
+</db:simplelist>
+</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="multipleTrailingSlashesAndRandomWhitespace">
+<db:title>void Struct::multipleTrailingSlashesAndRandomWhitespace()</db:title>
+<db:section>
+<db:title>See Also</db:title>
+<db:para><db:emphasis>See also </db:emphasis>
+<db:simplelist type="vert" role="see-also">
+<db:member><db:link xlink:href="struct.xml#MultipleTrailingSlashes">two slashes here</db:link></db:member>
+</db:simplelist>
+</db:para>
+</db:section>
+</db:section>
+<db:section xml:id="oneTrailingSlash">
+<db:title>void Struct::oneTrailingSlash()</db:title>
+<db:section>
+<db:title>See Also</db:title>
+<db:para><db:emphasis>See also </db:emphasis>
+<db:simplelist type="vert" role="see-also">
+<db:member><db:link xlink:href="struct.xml#multipleTrailingSlashesAndRandomWhitespace">two slashes again</db:link></db:member>
+</db:simplelist>
+</db:para>
+</db:section>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/html/struct-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/html/struct-members.html
new file mode 100644
index 000000000..7fe474e80
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/html/struct-members.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- trailing_backslashes.cpp -->
+ <title>List of All Members for Struct | TrailingBackslashes</title>
+</head>
+<body>
+<li>Struct</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for Struct</h1>
+<p>This is the complete list of members for <a href="struct.html">Struct</a>, including inherited members.</p>
+<ul>
+<li class="fn" translate="no"><span class="name"><b><a href="struct.html#MultipleTrailingSlashes" translate="no">MultipleTrailingSlashes</a></b></span>()</li>
+<li class="fn" translate="no"><span class="name"><b><a href="struct.html#multipleTrailingSlashesAndRandomWhitespace" translate="no">multipleTrailingSlashesAndRandomWhitespace</a></b></span>()</li>
+<li class="fn" translate="no"><span class="name"><b><a href="struct.html#oneTrailingSlash" translate="no">oneTrailingSlash</a></b></span>()</li>
+</ul>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/html/struct.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/html/struct.html
new file mode 100644
index 000000000..0e5a0b45d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/html/struct.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- trailing_backslashes.cpp -->
+ <title>Struct Struct | TrailingBackslashes</title>
+</head>
+<body>
+<li>Struct</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">Struct Struct</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;Struct&gt;</span></td></tr>
+</table></div>
+<ul>
+<li><a href="struct-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"> void </td><td class="memItemRight bottomAlign"><b><a href="struct.html#MultipleTrailingSlashes" translate="no">MultipleTrailingSlashes</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="struct.html#multipleTrailingSlashesAndRandomWhitespace" translate="no">multipleTrailingSlashesAndRandomWhitespace</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="struct.html#oneTrailingSlash" translate="no">oneTrailingSlash</a></b>()</td></tr>
+</table></div>
+<!-- $$$Struct-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Struct -->
+<div class="func">
+<h2>Member Function Documentation</h2>
+<!-- $$$MultipleTrailingSlashes[overload1]$$$MultipleTrailingSlashes -->
+<h3 class="fn" translate="no" id="MultipleTrailingSlashes"><span class="type">void</span> Struct::<span class="name">MultipleTrailingSlashes</span>()</h3>
+<p><b>See also </b><a href="struct.html#oneTrailingSlash" translate="no">one slash</a>.</p>
+<!-- @@@MultipleTrailingSlashes -->
+<!-- $$$multipleTrailingSlashesAndRandomWhitespace[overload1]$$$multipleTrailingSlashesAndRandomWhitespace -->
+<h3 class="fn" translate="no" id="multipleTrailingSlashesAndRandomWhitespace"><span class="type">void</span> Struct::<span class="name">multipleTrailingSlashesAndRandomWhitespace</span>()</h3>
+<p><b>See also </b><a href="struct.html#MultipleTrailingSlashes" translate="no">two slashes here</a>.</p>
+<!-- @@@multipleTrailingSlashesAndRandomWhitespace -->
+<!-- $$$oneTrailingSlash[overload1]$$$oneTrailingSlash -->
+<h3 class="fn" translate="no" id="oneTrailingSlash"><span class="type">void</span> Struct::<span class="name">oneTrailingSlash</span>()</h3>
+<p><b>See also </b><a href="struct.html#multipleTrailingSlashesAndRandomWhitespace" translate="no">two slashes again</a>.</p>
+<!-- @@@oneTrailingSlash -->
+</div>
+</body>
+</html>
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
new file mode 100644
index 000000000..f9e9c4ff0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/html/trailingbackslashes.index
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<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()"/>
+ </struct>
+ <module name="TrailingBackslashes" href="trailingbackslashes-module.html" status="internal" seen="false" title=""/>
+ </namespace>
+</INDEX>
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
new file mode 100644
index 000000000..86f6fcd59
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/webxml/struct.webxml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <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()">
+ <description>
+ <see-also>
+ <link raw="one slash" href="struct.html#oneTrailingSlash" type="function">one slash</link>
+ </see-also>
+ </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()">
+ <description>
+ <see-also>
+ <link raw="two slashes here" href="struct.html#MultipleTrailingSlashes" type="function">two slashes here</link>
+ </see-also>
+ </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()">
+ <description>
+ <see-also>
+ <link raw="two slashes again" href="struct.html#multipleTrailingSlashesAndRandomWhitespace" type="function">two slashes again</link>
+ </see-also>
+ </description>
+ </function>
+ </struct>
+ </document>
+</WebXML>
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
new file mode 100644
index 000000000..f9e9c4ff0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/webxml/trailingbackslashes.index
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<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()"/>
+ </struct>
+ <module name="TrailingBackslashes" href="trailingbackslashes-module.html" status="internal" seen="false" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/src/trailing_backslashes.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/src/trailing_backslashes.cpp
new file mode 100644
index 000000000..878425613
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/src/trailing_backslashes.cpp
@@ -0,0 +1,32 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+/*!
+ \struct Struct
+*/
+
+/*!
+ \fn void Struct::oneTrailingSlash()
+ \keyword one \
+ slash
+
+ \sa {two slashes again}
+*/
+
+/*!
+ \fn void Struct::MultipleTrailingSlashes()
+ \keyword two \
+ slashes \
+ here
+
+ \sa {one slash}
+*/
+
+/*!
+ \fn void Struct::multipleTrailingSlashesAndRandomWhitespace()
+ \keyword two\
+ slashes \
+ again
+
+ \sa {two slashes here}
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/src/trailing_backslashes.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/src/trailing_backslashes.h
new file mode 100644
index 000000000..0fb059b97
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/src/trailing_backslashes.h
@@ -0,0 +1,14 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef TRAILING_BACKSLASHES_H
+#define TRAILING_BACKSLASHES_H
+
+struct Struct
+{
+ void oneTrailingSlash(){};
+ void MultipleTrailingSlashes(){};
+ void multipleTrailingSlashesAndRandomWhitespace(){};
+};
+
+#endif // TRAILING_BACKSLASHES_H
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/trailing_backslashes.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/trailing_backslashes.qdocconf
new file mode 100644
index 000000000..3f8f4d011
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/trailing_backslashes.qdocconf
@@ -0,0 +1,29 @@
+project = TrailingBackslashes
+
+headerdirs = ./src/
+sourcedirs = ./src/
+exampledirs = ./src/
+
+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
+
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ./src/images
+
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+warninglimit = 1
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/expected/docbook/space.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/expected/docbook/space.xml
new file mode 100644
index 000000000..174b64092
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/expected/docbook/space.xml
@@ -0,0 +1,29 @@
+<?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>Space Namespace</db:title>
+<db:productname>UsingDirective</db:productname>
+<db:titleabbrev>UsingDirective Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>A namespace...in space.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>Space</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="function-documentation">
+<db:title>Function Documentation</db:title>
+<db:section xml:id="spaceFun">
+<db:title>void spaceFun(Space::spacename <db:emphasis>space</db:emphasis>)</db:title>
+<db:para>A <db:code role="parameter">space</db:code> function.</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/expected/html/space.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/expected/html/space.html
new file mode 100644
index 000000000..60e389382
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/expected/html/space.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- space.cpp -->
+ <meta name="description" content="A namespace...in space.">
+ <title>Space Namespace | UsingDirective</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#functions">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">Space Namespace</h1>
+<!-- $$$Space-brief -->
+<p>A namespace...in space. <a href="#details">More...</a></p>
+<!-- @@@Space -->
+<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;Space&gt;</span></td></tr>
+</table></div>
+<h2 id="functions">Functions</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="space.html#spaceFun" translate="no">spaceFun</a></b>(Space::spacename <i>space</i>)</td></tr>
+</table></div>
+<!-- $$$Space-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Space -->
+<div class="func">
+<h2>Function Documentation</h2>
+<!-- $$$spaceFun[overload1]$$$spaceFunSpace::spacename -->
+<h3 class="fn" translate="no" id="spaceFun"><span class="type">void</span> <span class="name">spaceFun</span>(<span class="type">Space::spacename</span> <i>space</i>)</h3>
+<p>A <i translate="no">space</i> function.</p>
+<!-- @@@spaceFun -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/expected/html/usingdirective.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/expected/html/usingdirective.index
new file mode 100644
index 000000000..252512890
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/expected/html/usingdirective.index
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="UsingDirective Reference Documentation" version="" project="UsingDirective">
+ <namespace name="" status="active" access="public" module="usingdirective">
+ <function name="spaceFun" href="space.html#spaceFun" status="active" access="public" location="space.h" documented="true" related="0" meta="plain" type="void" signature="void spaceFun(Space::spacename space)">
+ <parameter type="Space::spacename" name="space" default=""/>
+ </function>
+ <namespace name="Space" href="space.html" status="active" access="public" location="space.h" documented="true" module="UsingDirective" brief="A namespace...in space">
+ <function name="spaceFun" href="space.html#spaceFun" status="active" access="public" location="space.h" documented="true" related="0" meta="plain" type="void" signature="void spaceFun(Space::spacename space)">
+ <parameter type="Space::spacename" name="space" default=""/>
+ </function>
+ </namespace>
+ <module name="UsingDirective" href="usingdirective-module.html" status="internal" seen="false" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/expected/webxml/space.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/expected/webxml/space.webxml
new file mode 100644
index 000000000..15102ba9e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/expected/webxml/space.webxml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <namespace name="Space" href="space.html" status="active" access="public" location="space.h" documented="true" module="UsingDirective" brief="A namespace...in space">
+ <description>
+ <brief>A namespace...in space.</brief>
+ </description>
+ <function name="spaceFun" href="space.html#spaceFun" status="active" access="public" location="space.h" documented="true" related="0" meta="plain" type="void" signature="void spaceFun(Space::spacename space)">
+ <parameter type="Space::spacename" name="space" default=""/>
+ <description>
+ <para>A <argument>space</argument> function.</para>
+ </description>
+ </function>
+ </namespace>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/expected/webxml/usingdirective.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/expected/webxml/usingdirective.index
new file mode 100644
index 000000000..252512890
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/expected/webxml/usingdirective.index
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="UsingDirective Reference Documentation" version="" project="UsingDirective">
+ <namespace name="" status="active" access="public" module="usingdirective">
+ <function name="spaceFun" href="space.html#spaceFun" status="active" access="public" location="space.h" documented="true" related="0" meta="plain" type="void" signature="void spaceFun(Space::spacename space)">
+ <parameter type="Space::spacename" name="space" default=""/>
+ </function>
+ <namespace name="Space" href="space.html" status="active" access="public" location="space.h" documented="true" module="UsingDirective" brief="A namespace...in space">
+ <function name="spaceFun" href="space.html#spaceFun" status="active" access="public" location="space.h" documented="true" related="0" meta="plain" type="void" signature="void spaceFun(Space::spacename space)">
+ <parameter type="Space::spacename" name="space" default=""/>
+ </function>
+ </namespace>
+ <module name="UsingDirective" href="usingdirective-module.html" status="internal" seen="false" title=""/>
+ </namespace>
+</INDEX>
diff --git a/tests/auto/qdoc/generatedoutput/testdata/usingdirective/UsingDirective b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/src/UsingDirective
index 422d01e91..422d01e91 100644
--- a/tests/auto/qdoc/generatedoutput/testdata/usingdirective/UsingDirective
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/src/UsingDirective
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/src/alias.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/src/alias.h
new file mode 100644
index 000000000..5691035da
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/src/alias.h
@@ -0,0 +1,10 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include "space.h"
+
+namespace Alias {
+ using spacename = Space::spacename;
+}
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/src/space.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/src/space.cpp
new file mode 100644
index 000000000..d84156da0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/src/space.cpp
@@ -0,0 +1,21 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "space.h"
+
+/*!
+ \namespace Space
+ \inmodule UsingDirective
+ \brief A namespace...in space.
+*/
+
+using namespace Alias;
+using namespace Space;
+
+/*!
+ \relates Space
+ A \a space function.
+*/
+void spaceFun(spacename space)
+{
+}
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/src/space.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/src/space.h
new file mode 100644
index 000000000..09472535c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/src/space.h
@@ -0,0 +1,10 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+namespace Space {
+ typedef int spacename;
+}
+
+void spaceFun(Space::spacename space);
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/usingdirective.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/usingdirective.qdocconf
new file mode 100644
index 000000000..01456b049
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/usingdirective/usingdirective.qdocconf
@@ -0,0 +1,27 @@
+sources.fileextensions = "*.qml *.cpp *.qdoc"
+headers.fileextensions = "*.h"
+
+# images
+imagedirs = ./src/images
+
+# zero warning policy
+warninglimit = 0
+warninglimit.enabled = true
+
+# don't write host system-specific paths to index files
+locationinfo = false
+
+# by default, use -outputdir directly, no subdir.
+# outputsubdir '.' matches the root of expected_output/
+outputformats = HTML WebXML DocBook
+HTML.nosubdirs = true
+HTML.outputsubdir = html
+
+DocBook.nosubdirs = true
+DocBook.outputsubdir = docbook
+
+WebXML.nosubdirs = true
+WebXML.outputsubdir = webxml
+
+project = UsingDirective
+{includepaths,headerdirs,sourcedirs} = ./src/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/tst_validateqdocoutputfiles.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/tst_validateqdocoutputfiles.cpp
new file mode 100644
index 000000000..bcabb4178
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/tst_validateqdocoutputfiles.cpp
@@ -0,0 +1,171 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtTest/QtTest>
+
+#include <utility>
+
+class tst_validateQdocOutputFiles : public QObject
+{
+ Q_OBJECT
+private:
+ void runQDocProcess(const QStringList &arguments);
+ std::optional<QByteArray> gitDiffDirectories(const QString &actualPath,
+ const QString &expectedPath);
+
+private slots:
+ void initTestCase();
+ void init();
+ void qdocProjects_data();
+ void qdocProjects();
+
+private:
+ const QString m_testDataDirectory = QFINDTESTDATA("testdata");
+ QString m_qdocBinary{};
+ QString m_extraParams{};
+ QScopedPointer<QTemporaryDir> m_outputDir{};
+};
+
+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"};
+
+void tst_validateQdocOutputFiles::initTestCase()
+{
+ QProcessEnvironment environment = QProcessEnvironment::systemEnvironment();
+ if (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);
+ }
+
+ // 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" : "";
+ m_qdocBinary = binpath + QLatin1String("/qdoc") + extension;
+ QVERIFY(QFile::exists(m_qdocBinary));
+
+ // Resolve the path to the file containing extra parameters
+ m_extraParams = QFileInfo(QTest::currentAppName()).dir().filePath(DOCINCPATH);
+ if (!QFileInfo::exists(m_extraParams)) {
+ qWarning("Cannot locate %s", m_extraParams.toLocal8Bit().constData());
+ m_extraParams.clear();
+ } else {
+ m_extraParams.insert(0, '@');
+ }
+}
+
+void tst_validateQdocOutputFiles::init()
+{
+ m_outputDir.reset(new QTemporaryDir());
+ if (!m_outputDir->isValid()) {
+ const QString errorMessage =
+ "Couldn't create temporary directory: " + m_outputDir->errorString();
+ QFAIL(qPrintable(errorMessage));
+ }
+}
+
+void tst_validateQdocOutputFiles::runQDocProcess(const QStringList &arguments)
+{
+ QProcess qdocProcess;
+ qdocProcess.setProgram(m_qdocBinary);
+
+ qdocProcess.setArguments(arguments);
+
+ auto failQDoc = [&](QProcess::ProcessError) {
+ qFatal("Running qdoc failed with exit code %i: %s",
+ qdocProcess.exitCode(), qUtf8Printable(qdocProcess.errorString()));
+ };
+ QObject::connect(&qdocProcess, &QProcess::errorOccurred, this, failQDoc);
+
+ qdocProcess.start();
+ qdocProcess.waitForFinished();
+ if (qdocProcess.exitCode() == 0)
+ return;
+
+ QString errors = qdocProcess.readAllStandardError();
+ if (!errors.isEmpty())
+ qInfo().nospace() << "Received errors:\n" << qUtf8Printable(errors);
+ if (!QTest::currentTestFailed())
+ failQDoc(QProcess::UnknownError);
+}
+
+std::optional<QByteArray>
+tst_validateQdocOutputFiles::gitDiffDirectories(const QString &actualPath, const QString &expectedPath)
+{
+ QProcess gitProcess;
+ gitProcess.setProgram("git");
+
+ const QStringList arguments{"diff", "--", actualPath, expectedPath};
+ gitProcess.setArguments(arguments);
+
+ auto failGit = [&](QProcess::ProcessError) {
+ qFatal("Running git failed with exit code %i: %s",
+ gitProcess.exitCode(), gitProcess.errorString().toLocal8Bit().constData());
+ };
+ QObject::connect(&gitProcess, &QProcess::errorOccurred, this, failGit);
+
+ gitProcess.start();
+ gitProcess.waitForFinished();
+
+ if (gitProcess.exitCode() == 0)
+ return {};
+
+ return gitProcess.readAllStandardOutput();
+}
+
+void tst_validateQdocOutputFiles::qdocProjects_data()
+{
+ using namespace Qt::StringLiterals;
+ QTest::addColumn<QString>("qdocconf");
+ QTest::addColumn<QString>("expectedPath");
+
+ QDirIterator qdocconfit(m_testDataDirectory, QStringList { u"*.qdocconf"_s },
+ QDir::Files | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
+ while (qdocconfit.hasNext()) {
+ const QFileInfo configFile = qdocconfit.nextFileInfo();
+ if (configFile.baseName() != configFile.dir().dirName())
+ continue;
+
+ const QString testName =
+ configFile.dir().dirName() + u'/' + configFile.fileName();
+
+ QTest::newRow(testName.toUtf8().constData())
+ << configFile.absoluteFilePath() << configFile.dir().absolutePath() + "/expected/";
+ }
+}
+
+void tst_validateQdocOutputFiles::qdocProjects()
+{
+ QFETCH(const QString, qdocconf);
+ QFETCH(const QString, expectedPath);
+
+ QString actualPath{m_outputDir->path()};
+ if (regenerate) {
+ actualPath = expectedPath;
+ QDir pathToRemove{expectedPath};
+ if (!pathToRemove.removeRecursively())
+ qCritical("Cannot remove expected output directory, aborting!");
+ }
+
+ const QStringList arguments{ "-outputdir", actualPath, m_extraParams, qdocconf };
+
+ runQDocProcess(arguments);
+
+ if (regenerate) {
+ const QString message = "Regenerated expected output files for" + qdocconf;
+ QSKIP(message.toLocal8Bit().constData());
+ }
+
+ std::optional<QByteArray> gitDiff = gitDiffDirectories(actualPath, expectedPath);
+ if (gitDiff.has_value()) {
+ qInfo() << qUtf8Printable(gitDiff.value());
+ QFAIL("Inspect the output for details.");
+ }
+ QVERIFY(true);
+}
+
+QTEST_MAIN(tst_validateQdocOutputFiles)
+#include "tst_validateqdocoutputfiles.moc"
diff --git a/src/qdoc/qdoccommandlineparser.cpp b/src/qdoc/qdoccommandlineparser.cpp
deleted file mode 100644
index 2076bb01c..000000000
--- a/src/qdoc/qdoccommandlineparser.cpp
+++ /dev/null
@@ -1,206 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdoccommandlineparser.h"
-
-#include "loggingcategory.h"
-#include "utilities.h"
-
-#include <QtCore/qdebug.h>
-#include <QtCore/qfile.h>
-
-QDocCommandLineParser::QDocCommandLineParser()
- : QCommandLineParser(),
- defineOption(QStringList() << QStringLiteral("D")),
- dependsOption(QStringList() << QStringLiteral("depends")),
- highlightingOption(QStringList() << QStringLiteral("highlighting")),
- showInternalOption(QStringList() << QStringLiteral("showinternal")),
- redirectDocumentationToDevNullOption(QStringList()
- << QStringLiteral("redirect-documentation-to-dev-null")),
- noExamplesOption(QStringList() << QStringLiteral("no-examples")),
- indexDirOption(QStringList() << QStringLiteral("indexdir")),
- installDirOption(QStringList() << QStringLiteral("installdir")),
- outputDirOption(QStringList() << QStringLiteral("outputdir")),
- outputFormatOption(QStringList() << QStringLiteral("outputformat")),
- noLinkErrorsOption(QStringList() << QStringLiteral("no-link-errors")),
- autoLinkErrorsOption(QStringList() << QStringLiteral("autolink-errors")),
- debugOption(QStringList() << QStringLiteral("debug")),
- prepareOption(QStringList() << QStringLiteral("prepare")),
- generateOption(QStringList() << QStringLiteral("generate")),
- logProgressOption(QStringList() << QStringLiteral("log-progress")),
- singleExecOption(QStringList() << QStringLiteral("single-exec")),
- includePathOption("I", "Add dir to the include path for header files.", "path"),
- includePathSystemOption("isystem", "Add dir to the system include path for header files.",
- "path"),
- frameworkOption("F", "Add macOS framework to the include path for header files.",
- "framework"),
- timestampsOption(QStringList() << QStringLiteral("timestamps")),
- useDocBookExtensions(QStringList() << QStringLiteral("docbook-extensions"))
-{
- setApplicationDescription(QCoreApplication::translate("qdoc", "Qt documentation generator"));
- addHelpOption();
- addVersionOption();
-
- setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions);
-
- addPositionalArgument("file1.qdocconf ...", QCoreApplication::translate("qdoc", "Input files"));
-
- defineOption.setDescription(QCoreApplication::translate(
- "qdoc", "Define the argument as a macro while parsing sources"));
- defineOption.setValueName(QStringLiteral("macro[=def]"));
- addOption(defineOption);
-
- dependsOption.setDescription(QCoreApplication::translate("qdoc", "Specify dependent modules"));
- dependsOption.setValueName(QStringLiteral("module"));
- addOption(dependsOption);
-
- highlightingOption.setDescription(QCoreApplication::translate(
- "qdoc", "Turn on syntax highlighting (makes qdoc run slower)"));
- addOption(highlightingOption);
-
- showInternalOption.setDescription(
- QCoreApplication::translate("qdoc", "Include content marked internal"));
- addOption(showInternalOption);
-
- redirectDocumentationToDevNullOption.setDescription(
- QCoreApplication::translate("qdoc",
- "Save all documentation content to /dev/null. Useful if "
- "someone is interested in qdoc errors only."));
- addOption(redirectDocumentationToDevNullOption);
-
- noExamplesOption.setDescription(
- QCoreApplication::translate("qdoc", "Do not generate documentation for examples"));
- addOption(noExamplesOption);
-
- indexDirOption.setDescription(QCoreApplication::translate(
- "qdoc", "Specify a directory where QDoc should search for index files to load"));
- indexDirOption.setValueName(QStringLiteral("dir"));
- addOption(indexDirOption);
-
- installDirOption.setDescription(QCoreApplication::translate(
- "qdoc",
- "Specify the directory where the output will be after running \"make install\""));
- installDirOption.setValueName(QStringLiteral("dir"));
- addOption(installDirOption);
-
- outputDirOption.setDescription(QCoreApplication::translate(
- "qdoc", "Specify output directory, overrides setting in qdocconf file"));
- outputDirOption.setValueName(QStringLiteral("dir"));
- addOption(outputDirOption);
-
- outputFormatOption.setDescription(QCoreApplication::translate(
- "qdoc", "Specify output format, overrides setting in qdocconf file"));
- outputFormatOption.setValueName(QStringLiteral("format"));
- addOption(outputFormatOption);
-
- noLinkErrorsOption.setDescription(
- QCoreApplication::translate("qdoc", "Do not print link errors (i.e. missing targets)"));
- addOption(noLinkErrorsOption);
-
- autoLinkErrorsOption.setDescription(
- QCoreApplication::translate("qdoc", "Show errors when automatic linking fails"));
- addOption(autoLinkErrorsOption);
-
- debugOption.setDescription(QCoreApplication::translate("qdoc", "Enable debug output"));
- addOption(debugOption);
-
- prepareOption.setDescription(QCoreApplication::translate(
- "qdoc", "Run qdoc only to generate an index file, not the docs"));
- addOption(prepareOption);
-
- generateOption.setDescription(QCoreApplication::translate(
- "qdoc", "Run qdoc to read the index files and generate the docs"));
- addOption(generateOption);
-
- logProgressOption.setDescription(
- QCoreApplication::translate("qdoc", "Log progress on stderr."));
- addOption(logProgressOption);
-
- singleExecOption.setDescription(
- QCoreApplication::translate("qdoc", "Run qdoc once over all the qdoc conf files."));
- addOption(singleExecOption);
-
- includePathOption.setFlags(QCommandLineOption::ShortOptionStyle);
- addOption(includePathOption);
-
- addOption(includePathSystemOption);
-
- frameworkOption.setFlags(QCommandLineOption::ShortOptionStyle);
- addOption(frameworkOption);
-
- timestampsOption.setDescription(
- QCoreApplication::translate("qdoc", "Timestamp each qdoc log line."));
- addOption(timestampsOption);
-
- useDocBookExtensions.setDescription(QCoreApplication::translate(
- "qdoc", "Use the DocBook Library extensions for metadata."));
- addOption(useDocBookExtensions);
-}
-
-/*!
- * \internal
- *
- * Create a list of arguments from the command line and/or file(s).
- * This lets QDoc accept arguments contained in a file provided as a
- * command-line argument prepended by '@'.
- */
-static QStringList argumentsFromCommandLineAndFile(const QStringList &arguments)
-{
- QStringList allArguments;
- allArguments.reserve(arguments.size());
- for (const QString &argument : arguments) {
- // "@file" doesn't start with a '-' so we can't use QCommandLineParser for it
- if (argument.startsWith(QLatin1Char('@'))) {
- QString optionsFile = argument;
- optionsFile.remove(0, 1);
- if (optionsFile.isEmpty())
- qFatal("The @ option requires an input file");
- QFile f(optionsFile);
- if (!f.open(QIODevice::ReadOnly | QIODevice::Text))
- qFatal("Cannot open options file specified with @: %ls",
- qUtf16Printable(optionsFile));
- while (!f.atEnd()) {
- QString line = QString::fromLocal8Bit(f.readLine().trimmed());
- if (!line.isEmpty())
- allArguments << line;
- }
- } else {
- allArguments << argument;
- }
- }
- return allArguments;
-}
-
-void QDocCommandLineParser::process(const QStringList &arguments)
-{
- auto allArguments = argumentsFromCommandLineAndFile(arguments);
- QCommandLineParser::process(allArguments);
-
- if (isSet(singleExecOption) && isSet(indexDirOption))
- qDebug("WARNING: -indexdir option ignored: Index files are not used in single-exec mode.");
-}
diff --git a/src/qdoc/qdoccommandlineparser.h b/src/qdoc/qdoccommandlineparser.h
deleted file mode 100644
index 911f568c9..000000000
--- a/src/qdoc/qdoccommandlineparser.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDOCCOMMANDLINEPARSER_H
-#define QDOCCOMMANDLINEPARSER_H
-
-#include <QtCore/qcommandlineparser.h>
-
-QT_BEGIN_NAMESPACE
-
-struct QDocCommandLineParser : public QCommandLineParser
-{
- QDocCommandLineParser();
- void process(const QStringList &arguments);
-
- QCommandLineOption defineOption, dependsOption, highlightingOption;
- QCommandLineOption showInternalOption, redirectDocumentationToDevNullOption;
- QCommandLineOption noExamplesOption, indexDirOption, installDirOption;
- QCommandLineOption outputDirOption, outputFormatOption;
- QCommandLineOption noLinkErrorsOption, autoLinkErrorsOption, debugOption;
- QCommandLineOption prepareOption, generateOption, logProgressOption, singleExecOption;
- QCommandLineOption includePathOption, includePathSystemOption, frameworkOption;
- QCommandLineOption timestampsOption, useDocBookExtensions;
-};
-
-QT_END_NAMESPACE
-
-#endif // QDOCCOMMANDLINEPARSER_H
diff --git a/src/qdoc/qdocdatabase.cpp b/src/qdoc/qdocdatabase.cpp
deleted file mode 100644
index 7933006b7..000000000
--- a/src/qdoc/qdocdatabase.cpp
+++ /dev/null
@@ -1,1656 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdocdatabase.h"
-
-#include "atom.h"
-#include "collectionnode.h"
-#include "functionnode.h"
-#include "generator.h"
-#include "qdocindexfiles.h"
-#include "qdoctagfiles.h"
-#include "tree.h"
-
-#include <QtCore/qdebug.h>
-#include <QtCore/qregularexpression.h>
-
-QT_BEGIN_NAMESPACE
-
-static NodeMultiMap emptyNodeMultiMap_;
-bool QDocDatabase::debug = false;
-
-/*!
- \class QDocForest
-
- A class representing a forest of Tree objects.
-
- This private class manages a collection of Tree objects (a
- forest) for the singleton QDocDatabase object. It is only
- accessed by that singleton QDocDatabase object, which is a
- friend. Each tree in the forest is an instance of class
- Tree, which is a mostly private class. Both QDocForest and
- QDocDatabase are friends of Tree and have full access.
-
- There are two kinds of trees in the forest, differing not
- in structure but in use. One Tree is the primary tree. It
- is the tree representing the module being documented. All
- the other trees in the forest are called index trees. Each
- one represents the contents of the index file for one of
- the modules the current module must be able to link to.
-
- The instances of subclasses of Node in the primary tree
- will contain documentation in an instance of Doc. The
- index trees contain no documentation, and each Node in
- an index tree is marked as an index node.
-
- Each tree is named with the name of its module.
-
- The search order is created by searchOrder(), if it has
- not already been created. The search order and module
- names arrays have parallel structure, i.e. modulNames_[i]
- is the module name of the Tree at searchOrder_[i].
-
- The primary tree is always the first tree in the search
- order. i.e., when the database is searched, the primary
- tree is always searched first, unless a specific tree is
- being searched.
- */
-
-/*!
- Destroys the qdoc forest. This requires deleting
- each Tree in the forest. Note that the forest has
- been transferred into the search order array, so
- what is really being used to destroy the forest
- is the search order array.
- */
-QDocForest::~QDocForest()
-{
- for (int i = 0; i < searchOrder_.size(); ++i)
- delete searchOrder_.at(i);
- forest_.clear();
- searchOrder_.clear();
- indexSearchOrder_.clear();
- moduleNames_.clear();
- primaryTree_ = nullptr;
-}
-
-/*!
- Initializes the forest prior to a traversal and
- returns a pointer to the root node of the primary
- tree. If the forest is empty, it return 0
- */
-NamespaceNode *QDocForest::firstRoot()
-{
- currentIndex_ = 0;
- return (!searchOrder().isEmpty() ? searchOrder()[0]->root() : nullptr);
-}
-
-/*!
- Increments the forest's current tree index. If the current
- tree index is still within the forest, the function returns
- the root node of the current tree. Otherwise it returns \nullptr.
- */
-NamespaceNode *QDocForest::nextRoot()
-{
- ++currentIndex_;
- return (currentIndex_ < searchOrder().size() ? searchOrder()[currentIndex_]->root() : nullptr);
-}
-
-/*!
- Initializes the forest prior to a traversal and
- returns a pointer to the primary tree. If the
- forest is empty, it returns \nullptr.
- */
-Tree *QDocForest::firstTree()
-{
- currentIndex_ = 0;
- return (!searchOrder().isEmpty() ? searchOrder()[0] : nullptr);
-}
-
-/*!
- Increments the forest's current tree index. If the current
- tree index is still within the forest, the function returns
- the pointer to the current tree. Otherwise it returns \nullptr.
- */
-Tree *QDocForest::nextTree()
-{
- ++currentIndex_;
- return (currentIndex_ < searchOrder().size() ? searchOrder()[currentIndex_] : nullptr);
-}
-
-/*!
- \fn Tree *QDocForest::primaryTree()
-
- Returns the pointer to the primary tree.
- */
-
-/*!
- Finds the tree for module \a t in the forest and
- sets the primary tree to be that tree. After the
- primary tree is set, that tree is removed from the
- forest.
-
- \node It gets re-inserted into the forest after the
- search order is built.
- */
-void QDocForest::setPrimaryTree(const QString &t)
-{
- QString T = t.toLower();
- primaryTree_ = findTree(T);
- forest_.remove(T);
- if (primaryTree_ == nullptr)
- qDebug() << "ERROR: Could not set primary tree to:" << t;
-}
-
-/*!
- If the search order array is empty, create the search order.
- If the search order array is not empty, do nothing.
- */
-void QDocForest::setSearchOrder(const QStringList &t)
-{
- if (!searchOrder_.isEmpty())
- return;
-
- /* Allocate space for the search order. */
- searchOrder_.reserve(forest_.size() + 1);
- searchOrder_.clear();
- moduleNames_.reserve(forest_.size() + 1);
- moduleNames_.clear();
-
- /* The primary tree is always first in the search order. */
- QString primaryName = primaryTree()->physicalModuleName();
- searchOrder_.append(primaryTree_);
- moduleNames_.append(primaryName);
- forest_.remove(primaryName);
-
- for (const QString &m : t) {
- if (primaryName != m) {
- auto it = forest_.find(m);
- if (it != forest_.end()) {
- searchOrder_.append(it.value());
- moduleNames_.append(m);
- forest_.remove(m);
- }
- }
- }
- /*
- If any trees remain in the forest, just add them
- to the search order sequentially, because we don't
- know any better at this point.
- */
- if (!forest_.isEmpty()) {
- for (auto it = forest_.begin(); it != forest_.end(); ++it) {
- searchOrder_.append(it.value());
- moduleNames_.append(it.key());
- }
- forest_.clear();
- }
-
- /*
- Rebuild the forest after constructing the search order.
- It was destroyed during construction of the search order,
- but it is needed for module-specific searches.
-
- Note that this loop also inserts the primary tree into the
- forrest. That is a requirement.
- */
- for (int i = 0; i < searchOrder_.size(); ++i) {
- if (!forest_.contains(moduleNames_.at(i))) {
- forest_.insert(moduleNames_.at(i), searchOrder_.at(i));
- }
- }
-}
-
-/*!
- Returns an ordered array of Tree pointers that represents
- the order in which the trees should be searched. The first
- Tree in the array is the tree for the current module, i.e.
- the module for which qdoc is generating documentation.
-
- The other Tree pointers in the array represent the index
- files that were loaded in preparation for generating this
- module's documentation. Each Tree pointer represents one
- index file. The index file Tree points have been ordered
- heuristically to, hopefully, minimize searching. Thr order
- will probably be changed.
-
- If the search order array is empty, this function calls
- indexSearchOrder(). The search order array is empty while
- the index files are being loaded, but some searches must
- be performed during this time, notably searches for base
- class nodes. These searches require a temporary search
- order. The temporary order changes throughout the loading
- of the index files, but it is always the tree for the
- current index file first, followed by the trees for the
- index files that have already been loaded. The only
- ordering required in this temporary search order is that
- the current tree must be searched first.
- */
-const QList<Tree *> &QDocForest::searchOrder()
-{
- if (searchOrder_.isEmpty())
- return indexSearchOrder();
- return searchOrder_;
-}
-
-/*!
- There are two search orders used by qdoc when searching for
- things. The normal search order is returned by searchOrder(),
- but this normal search order is not known until all the index
- files have been read. At that point, setSearchOrder() is
- called.
-
- During the reading of the index files, the vector holding
- the normal search order remains empty. Whenever the search
- order is requested, if that vector is empty, this function
- is called to return a temporary search order, which includes
- all the index files that have been read so far, plus the
- one being read now. That one is prepended to the front of
- the vector.
- */
-const QList<Tree *> &QDocForest::indexSearchOrder()
-{
- if (forest_.size() > indexSearchOrder_.size())
- indexSearchOrder_.prepend(primaryTree_);
- return indexSearchOrder_;
-}
-
-/*!
- Create a new Tree for the index file for the specified
- \a module and add it to the forest. Return the pointer
- to its root.
- */
-NamespaceNode *QDocForest::newIndexTree(const QString &module)
-{
- primaryTree_ = new Tree(module, qdb_);
- forest_.insert(module.toLower(), primaryTree_);
- return primaryTree_->root();
-}
-
-/*!
- Create a new Tree for use as the primary tree. This tree
- will represent the primary module. \a module is camel case.
- */
-void QDocForest::newPrimaryTree(const QString &module)
-{
- primaryTree_ = new Tree(module, qdb_);
-}
-
-/*!
- Searches through the forest for a node named \a targetPath
- and returns a pointer to it if found. The \a relative node
- is the starting point. It only makes sense for the primary
- tree, which is searched first. After the primary tree has
- been searched, \a relative is set to 0 for searching the
- other trees, which are all index trees. With relative set
- to 0, the starting point for each index tree is the root
- of the index tree.
- */
-const Node *QDocForest::findNodeForTarget(QStringList &targetPath, const Node *relative,
- Node::Genus genus, QString &ref)
-{
- int flags = SearchBaseClasses | SearchEnumValues;
-
- QString entity = targetPath.takeFirst();
- QStringList entityPath = entity.split("::");
-
- QString target;
- if (!targetPath.isEmpty())
- target = targetPath.takeFirst();
-
- for (const auto *tree : searchOrder()) {
- const Node *n = tree->findNodeForTarget(entityPath, target, relative, flags, genus, ref);
- if (n)
- return n;
- relative = nullptr;
- }
- return nullptr;
-}
-
-/*!
- Print the list of module names ordered according
- to how many successful searches each tree had.
- */
-void QDocForest::printLinkCounts(const QString &project)
-{
- Location().report(QString("%1: Link Counts").arg(project));
- QMultiMap<int, QString> m;
- for (const auto *tree : searchOrder()) {
- if (tree->linkCount() < 0)
- m.insert(tree->linkCount(), tree->physicalModuleName());
- }
- QString depends = "depends +=";
- QString module = project.toLower();
- for (auto it = m.begin(); it != m.end(); ++it) {
- QString line = " " + it.value();
- if (it.value() != module)
- depends += QLatin1Char(' ') + it.value();
- int pad = 30 - line.length();
- for (int k = 0; k < pad; ++k)
- line += QLatin1Char(' ');
- line += "%1";
- Location().report(line.arg(-(it.key())));
- }
- Location().report("Optimal depends variable:");
- Location().report(depends);
-}
-
-/*!
- Print the list of module names ordered according
- to how many successful searches each tree had.
- */
-QString QDocForest::getLinkCounts(QStringList &strings, QList<int> &counts)
-{
- QMultiMap<int, QString> m;
- for (const auto *tree : searchOrder()) {
- if (tree->linkCount() < 0)
- m.insert(tree->linkCount(), tree->physicalModuleName());
- }
- QString depends = "depends +=";
- QString module = Generator::defaultModuleName().toLower();
- for (auto it = m.begin(); it != m.end(); ++it) {
- if (it.value() != module) {
- counts.append(-(it.key()));
- strings.append(it.value());
- depends += QLatin1Char(' ') + it.value();
- }
- }
- return depends;
-}
-
-/*!
- Finds the FunctionNode for the qualified function name
- in \a path, that also has the specified \a parameters.
- Returns a pointer to the first matching function.
-
- \a relative is a node in the primary tree where the search
- should begin. It is only used when searching the primary
- tree. \a genus can be used to force the search to find a
- C++ function or a QML function.
- */
-const FunctionNode *QDocForest::findFunctionNode(const QStringList &path,
- const Parameters &parameters, const Node *relative,
- Node::Genus genus)
-{
- for (const auto *tree : searchOrder()) {
- const FunctionNode *fn = tree->findFunctionNode(path, parameters, relative, genus);
- if (fn)
- return fn;
- relative = nullptr;
- }
- return nullptr;
-}
-
-/*! \class QDocDatabase
- This class provides exclusive access to the qdoc database,
- which consists of a forrest of trees and a lot of maps and
- other useful data structures.
- */
-
-QDocDatabase *QDocDatabase::qdocDB_ = nullptr;
-NodeMap QDocDatabase::typeNodeMap_;
-NodeMultiMap QDocDatabase::obsoleteClasses_;
-NodeMultiMap QDocDatabase::classesWithObsoleteMembers_;
-NodeMultiMap QDocDatabase::obsoleteQmlTypes_;
-NodeMultiMap QDocDatabase::qmlTypesWithObsoleteMembers_;
-NodeMultiMap QDocDatabase::cppClasses_;
-NodeMultiMap QDocDatabase::qmlBasicTypes_;
-NodeMultiMap QDocDatabase::qmlTypes_;
-NodeMultiMap QDocDatabase::examples_;
-NodeMultiMapMap QDocDatabase::newClassMaps_;
-NodeMultiMapMap QDocDatabase::newQmlTypeMaps_;
-NodeMultiMapMap QDocDatabase::newSinceMaps_;
-
-/*!
- Constructs the singleton qdoc database object. The singleton
- constructs the \a forest_ object, which is also a singleton.
- \a m_showInternal is normally false. If it is true, qdoc will
- write documentation for nodes marked \c internal.
-
- \a singleExec_ is false when qdoc is being used in the standard
- way of running qdoc twices for each module, first with -prepare
- and then with -generate. First the -prepare phase is run for
- each module, then the -generate phase is run for each module.
-
- When \a singleExec_ is true, qdoc is run only once. During the
- single execution, qdoc processes the qdocconf files for all the
- modules sequentially in a loop. Each source file for each module
- is read exactly once.
- */
-QDocDatabase::QDocDatabase() : showInternal_(false), singleExec_(false), forest_(this)
-{
- // nothing
-}
-
-/*!
- Destroys the qdoc database object. This requires destroying
- the forest object, which contains an array of tree pointers.
- Each tree is deleted.
- */
-QDocDatabase::~QDocDatabase()
-{
- // nothing.
-}
-
-/*!
- Creates the singleton. Allows only one instance of the class
- to be created. Returns a pointer to the singleton.
-*/
-QDocDatabase *QDocDatabase::qdocDB()
-{
- if (qdocDB_ == nullptr) {
- qdocDB_ = new QDocDatabase;
- initializeDB();
- }
- return qdocDB_;
-}
-
-/*!
- Destroys the singleton.
- */
-void QDocDatabase::destroyQdocDB()
-{
- if (qdocDB_ != nullptr) {
- delete qdocDB_;
- qdocDB_ = nullptr;
- }
-}
-
-/*!
- Initialize data structures in the singleton qdoc database.
-
- In particular, the type node map is initialized with a lot
- type names that don't refer to documented types. For example,
- many C++ standard types are included. These might be documented
- here at some point, but for now they are not. Other examples
- include \c array and \c data, which are just generic names
- used as place holders in function signatures that appear in
- the documentation.
-
- \note Do not add QML basic types into this list as it will
- break linking to those types.
-
- Also calls Node::initialize() to initialize the search goal map.
- */
-void QDocDatabase::initializeDB()
-{
- Node::initialize();
- typeNodeMap_.insert("accepted", nullptr);
- typeNodeMap_.insert("actionPerformed", nullptr);
- typeNodeMap_.insert("activated", nullptr);
- typeNodeMap_.insert("alias", nullptr);
- typeNodeMap_.insert("anchors", nullptr);
- typeNodeMap_.insert("any", nullptr);
- typeNodeMap_.insert("array", nullptr);
- typeNodeMap_.insert("autoSearch", nullptr);
- typeNodeMap_.insert("axis", nullptr);
- typeNodeMap_.insert("backClicked", nullptr);
- typeNodeMap_.insert("boomTime", nullptr);
- typeNodeMap_.insert("border", nullptr);
- typeNodeMap_.insert("buttonClicked", nullptr);
- typeNodeMap_.insert("callback", nullptr);
- typeNodeMap_.insert("char", nullptr);
- typeNodeMap_.insert("clicked", nullptr);
- typeNodeMap_.insert("close", nullptr);
- typeNodeMap_.insert("closed", nullptr);
- typeNodeMap_.insert("cond", nullptr);
- typeNodeMap_.insert("data", nullptr);
- typeNodeMap_.insert("dataReady", nullptr);
- typeNodeMap_.insert("dateString", nullptr);
- typeNodeMap_.insert("dateTimeString", nullptr);
- typeNodeMap_.insert("datetime", nullptr);
- typeNodeMap_.insert("day", nullptr);
- typeNodeMap_.insert("deactivated", nullptr);
- typeNodeMap_.insert("drag", nullptr);
- typeNodeMap_.insert("easing", nullptr);
- typeNodeMap_.insert("error", nullptr);
- typeNodeMap_.insert("exposure", nullptr);
- typeNodeMap_.insert("fatalError", nullptr);
- typeNodeMap_.insert("fileSelected", nullptr);
- typeNodeMap_.insert("flags", nullptr);
- typeNodeMap_.insert("float", nullptr);
- typeNodeMap_.insert("focus", nullptr);
- typeNodeMap_.insert("focusZone", nullptr);
- typeNodeMap_.insert("format", nullptr);
- typeNodeMap_.insert("framePainted", nullptr);
- typeNodeMap_.insert("from", nullptr);
- typeNodeMap_.insert("frontClicked", nullptr);
- typeNodeMap_.insert("function", nullptr);
- typeNodeMap_.insert("hasOpened", nullptr);
- typeNodeMap_.insert("hovered", nullptr);
- typeNodeMap_.insert("hoveredTitle", nullptr);
- typeNodeMap_.insert("hoveredUrl", nullptr);
- typeNodeMap_.insert("imageCapture", nullptr);
- typeNodeMap_.insert("imageProcessing", nullptr);
- typeNodeMap_.insert("index", nullptr);
- typeNodeMap_.insert("initialized", nullptr);
- typeNodeMap_.insert("isLoaded", nullptr);
- typeNodeMap_.insert("item", nullptr);
- typeNodeMap_.insert("jsdict", nullptr);
- typeNodeMap_.insert("jsobject", nullptr);
- typeNodeMap_.insert("key", nullptr);
- typeNodeMap_.insert("keysequence", nullptr);
- typeNodeMap_.insert("listViewClicked", nullptr);
- typeNodeMap_.insert("loadRequest", nullptr);
- typeNodeMap_.insert("locale", nullptr);
- typeNodeMap_.insert("location", nullptr);
- typeNodeMap_.insert("long", nullptr);
- typeNodeMap_.insert("message", nullptr);
- typeNodeMap_.insert("messageReceived", nullptr);
- typeNodeMap_.insert("mode", nullptr);
- typeNodeMap_.insert("month", nullptr);
- typeNodeMap_.insert("name", nullptr);
- typeNodeMap_.insert("number", nullptr);
- typeNodeMap_.insert("object", nullptr);
- typeNodeMap_.insert("offset", nullptr);
- typeNodeMap_.insert("ok", nullptr);
- typeNodeMap_.insert("openCamera", nullptr);
- typeNodeMap_.insert("openImage", nullptr);
- typeNodeMap_.insert("openVideo", nullptr);
- typeNodeMap_.insert("padding", nullptr);
- typeNodeMap_.insert("parent", nullptr);
- typeNodeMap_.insert("path", nullptr);
- typeNodeMap_.insert("photoModeSelected", nullptr);
- typeNodeMap_.insert("position", nullptr);
- typeNodeMap_.insert("precision", nullptr);
- typeNodeMap_.insert("presetClicked", nullptr);
- typeNodeMap_.insert("preview", nullptr);
- typeNodeMap_.insert("previewSelected", nullptr);
- typeNodeMap_.insert("progress", nullptr);
- typeNodeMap_.insert("puzzleLost", nullptr);
- typeNodeMap_.insert("qmlSignal", nullptr);
- typeNodeMap_.insert("rectangle", nullptr);
- typeNodeMap_.insert("request", nullptr);
- typeNodeMap_.insert("requestId", nullptr);
- typeNodeMap_.insert("section", nullptr);
- typeNodeMap_.insert("selected", nullptr);
- typeNodeMap_.insert("send", nullptr);
- typeNodeMap_.insert("settingsClicked", nullptr);
- typeNodeMap_.insert("shoe", nullptr);
- typeNodeMap_.insert("short", nullptr);
- typeNodeMap_.insert("signed", nullptr);
- typeNodeMap_.insert("sizeChanged", nullptr);
- typeNodeMap_.insert("size_t", nullptr);
- typeNodeMap_.insert("sockaddr", nullptr);
- typeNodeMap_.insert("someOtherSignal", nullptr);
- typeNodeMap_.insert("sourceSize", nullptr);
- typeNodeMap_.insert("startButtonClicked", nullptr);
- typeNodeMap_.insert("state", nullptr);
- typeNodeMap_.insert("std::initializer_list", nullptr);
- typeNodeMap_.insert("std::list", nullptr);
- typeNodeMap_.insert("std::map", nullptr);
- typeNodeMap_.insert("std::pair", nullptr);
- typeNodeMap_.insert("std::string", nullptr);
- typeNodeMap_.insert("std::vector", nullptr);
- typeNodeMap_.insert("stringlist", nullptr);
- typeNodeMap_.insert("swapPlayers", nullptr);
- typeNodeMap_.insert("symbol", nullptr);
- typeNodeMap_.insert("t", nullptr);
- typeNodeMap_.insert("T", nullptr);
- typeNodeMap_.insert("tagChanged", nullptr);
- typeNodeMap_.insert("timeString", nullptr);
- typeNodeMap_.insert("timeout", nullptr);
- typeNodeMap_.insert("to", nullptr);
- typeNodeMap_.insert("toggled", nullptr);
- typeNodeMap_.insert("type", nullptr);
- typeNodeMap_.insert("unsigned", nullptr);
- typeNodeMap_.insert("urllist", nullptr);
- typeNodeMap_.insert("va_list", nullptr);
- typeNodeMap_.insert("value", nullptr);
- typeNodeMap_.insert("valueEmitted", nullptr);
- typeNodeMap_.insert("videoFramePainted", nullptr);
- typeNodeMap_.insert("videoModeSelected", nullptr);
- typeNodeMap_.insert("videoRecorder", nullptr);
- typeNodeMap_.insert("void", nullptr);
- typeNodeMap_.insert("volatile", nullptr);
- typeNodeMap_.insert("wchar_t", nullptr);
- typeNodeMap_.insert("x", nullptr);
- typeNodeMap_.insert("y", nullptr);
- typeNodeMap_.insert("zoom", nullptr);
- typeNodeMap_.insert("zoomTo", nullptr);
-}
-
-/*! \fn NamespaceNode *QDocDatabase::primaryTreeRoot()
- Returns a pointer to the root node of the primary tree.
- */
-
-/*!
- \fn const CNMap &QDocDatabase::groups()
- Returns a const reference to the collection of all
- group nodes in the primary tree.
-*/
-
-/*!
- \fn const CNMap &QDocDatabase::modules()
- Returns a const reference to the collection of all
- module nodes in the primary tree.
-*/
-
-/*!
- \fn const CNMap &QDocDatabase::qmlModules()
- Returns a const reference to the collection of all
- QML module nodes in the primary tree.
-*/
-
-/*!
- \fn const CNMap &QDocDatabase::jsModules()
- Returns a const reference to the collection of all
- JovaScript module nodes in the primary tree.
-*/
-
-/*! \fn CollectionNode *QDocDatabase::findGroup(const QString &name)
- Find the group node named \a name and return a pointer
- to it. If a matching node is not found, add a new group
- node named \a name and return a pointer to that one.
-
- If a new group node is added, its parent is the tree root,
- and the new group node is marked \e{not seen}.
- */
-
-/*! \fn CollectionNode *QDocDatabase::findModule(const QString &name)
- Find the module node named \a name and return a pointer
- to it. If a matching node is not found, add a new module
- node named \a name and return a pointer to that one.
-
- If a new module node is added, its parent is the tree root,
- and the new module node is marked \e{not seen}.
- */
-
-/*! \fn CollectionNode *QDocDatabase::findQmlModule(const QString &name, bool javaScript)
- Find the QML module node named \a name and return a pointer
- to it. If a matching node is not found, add a new QML module
- node named \a name and return a pointer to that one.
-
- If \a javaScript is set, the return collection must be a
- JavaScript module.
-
- If a new QML or JavaScript module node is added, its parent
- is the tree root, and the new node is marked \e{not seen}.
- */
-
-/*! \fn CollectionNode *QDocDatabase::addGroup(const QString &name)
- Looks up the group named \a name in the primary tree. If
- a match is found, a pointer to the node is returned.
- Otherwise, a new group node named \a name is created and
- inserted into the collection, and the pointer to that node
- is returned.
- */
-
-/*! \fn CollectionNode *QDocDatabase::addModule(const QString &name)
- Looks up the module named \a name in the primary tree. If
- a match is found, a pointer to the node is returned.
- Otherwise, a new module node named \a name is created and
- inserted into the collection, and the pointer to that node
- is returned.
- */
-
-/*! \fn CollectionNode *QDocDatabase::addQmlModule(const QString &name)
- Looks up the QML module named \a name in the primary tree.
- If a match is found, a pointer to the node is returned.
- Otherwise, a new QML module node named \a name is created
- and inserted into the collection, and the pointer to that
- node is returned.
- */
-
-/*! \fn CollectionNode *QDocDatabase::addJsModule(const QString &name)
- Looks up the JavaScript module named \a name in the primary
- tree. If a match is found, a pointer to the node is returned.
- Otherwise, a new JavaScript module node named \a name is
- created and inserted into the collection, and the pointer to
- that node is returned.
- */
-
-/*! \fn CollectionNode *QDocDatabase::addToGroup(const QString &name, Node *node)
- Looks up the group node named \a name in the collection
- of all group nodes. If a match is not found, a new group
- node named \a name is created and inserted into the collection.
- Then append \a node to the group's members list, and append the
- group node to the member list of the \a node. The parent of the
- \a node is not changed by this function. Returns a pointer to
- the group node.
- */
-
-/*! \fn CollectionNode *QDocDatabase::addToModule(const QString &name, Node *node)
- Looks up the module node named \a name in the collection
- of all module nodes. If a match is not found, a new module
- node named \a name is created and inserted into the collection.
- Then append \a node to the module's members list. The parent of
- \a node is not changed by this function. Returns the module node.
- */
-
-/*! \fn Collection *QDocDatabase::addToQmlModule(const QString &name, Node *node)
- Looks up the QML module named \a name. If it isn't there,
- create it. Then append \a node to the QML module's member
- list. The parent of \a node is not changed by this function.
- */
-
-/*! \fn Collection *QDocDatabase::addToJsModule(const QString &name, Node *node)
- Looks up the JavaScript module named \a name. If it isn't there,
- create it. Then append \a node to the JavaScript module's member
- list. The parent of \a node is not changed by this function.
- */
-
-/*!
- Looks up the QML type node identified by the qualified Qml
- type \a name and returns a pointer to the QML type node.
- */
-QmlTypeNode *QDocDatabase::findQmlType(const QString &name)
-{
- QmlTypeNode *qcn = forest_.lookupQmlType(name);
- if (qcn)
- return qcn;
- return nullptr;
-}
-
-/*!
- Looks up the QML type node identified by the Qml module id
- \a qmid and QML type \a name and returns a pointer to the
- QML type node. The key is \a qmid + "::" + \a name.
-
- If the QML module id is empty, it looks up the QML type by
- \a name only.
- */
-QmlTypeNode *QDocDatabase::findQmlType(const QString &qmid, const QString &name)
-{
- if (!qmid.isEmpty()) {
- QString t = qmid + "::" + name;
- QmlTypeNode *qcn = forest_.lookupQmlType(t);
- if (qcn)
- return qcn;
- }
-
- QStringList path(name);
- Node *n = forest_.findNodeByNameAndType(path, &Node::isQmlType);
- if (n && (n->isQmlType() || n->isJsType()))
- return static_cast<QmlTypeNode *>(n);
- return nullptr;
-}
-
-/*!
- Looks up the QML basic type node identified by the Qml module id
- \a qmid and QML basic type \a name and returns a pointer to the
- QML basic type node. The key is \a qmid + "::" + \a name.
-
- If the QML module id is empty, it looks up the QML basic type by
- \a name only.
- */
-Aggregate *QDocDatabase::findQmlBasicType(const QString &qmid, const QString &name)
-{
- if (!qmid.isEmpty()) {
- QString t = qmid + "::" + name;
- Aggregate *a = forest_.lookupQmlBasicType(t);
- if (a)
- return a;
- }
-
- QStringList path(name);
- Node *n = forest_.findNodeByNameAndType(path, &Node::isQmlBasicType);
- if (n && n->isQmlBasicType())
- return static_cast<Aggregate *>(n);
- return nullptr;
-}
-
-/*!
- Looks up the QML type node identified by the Qml module id
- constructed from the strings in the \a import record and the
- QML type \a name and returns a pointer to the QML type node.
- If a QML type node is not found, 0 is returned.
- */
-QmlTypeNode *QDocDatabase::findQmlType(const ImportRec &import, const QString &name)
-{
- if (!import.isEmpty()) {
- QStringList dotSplit;
- dotSplit = name.split(QLatin1Char('.'));
- QString qmName;
- if (import.m_importUri.isEmpty())
- qmName = import.m_moduleName;
- else
- qmName = import.m_importUri;
- for (int i = 0; i < dotSplit.size(); ++i) {
- QString qualifiedName = qmName + "::" + dotSplit[i];
- QmlTypeNode *qcn = forest_.lookupQmlType(qualifiedName);
- if (qcn)
- return qcn;
- }
- }
- return nullptr;
-}
-
-/*!
- This function calls a set of functions for each tree in the
- forest that has not already been analyzed. In this way, when
- running qdoc in \e singleExec mode, each tree is analyzed in
- turn, and its classes and types are added to the appropriate
- node maps.
- */
-void QDocDatabase::processForest()
-{
- Tree *t = forest_.firstTree();
- while (t) {
- findAllClasses(t->root());
- findAllFunctions(t->root());
- findAllObsoleteThings(t->root());
- findAllLegaleseTexts(t->root());
- findAllSince(t->root());
- findAllAttributions(t->root());
- t->setTreeHasBeenAnalyzed();
- t = forest_.nextTree();
- }
- resolveNamespaces();
-}
-
-/*!
- This function calls \a func for each tree in the forest,
- but only if Tree::treeHasBeenAnalyzed() returns false for
- the tree. In this way, when running qdoc in \e singleExec
- mode, each tree is analyzed in turn, and its classes and
- types are added to the appropriate node maps.
- */
-void QDocDatabase::processForest(void (QDocDatabase::*func)(Aggregate *))
-{
- Tree *t = forest_.firstTree();
- while (t) {
- if (!t->treeHasBeenAnalyzed()) {
- (this->*(func))(t->root());
- }
- t = forest_.nextTree();
- }
-}
-
-/*!
- Constructs the collection of legalese texts, if it has not
- already been constructed, and returns a reference to it.
- */
-TextToNodeMap &QDocDatabase::getLegaleseTexts()
-{
- if (legaleseTexts_.isEmpty())
- processForest(&QDocDatabase::findAllLegaleseTexts);
- return legaleseTexts_;
-}
-
-/*!
- Construct the data structures for obsolete things, if they
- have not already been constructed. Returns a reference to
- the map of C++ classes with obsolete members.
- */
-NodeMultiMap &QDocDatabase::getClassesWithObsoleteMembers()
-{
- if (obsoleteClasses_.isEmpty() && obsoleteQmlTypes_.isEmpty())
- processForest(&QDocDatabase::findAllObsoleteThings);
- return classesWithObsoleteMembers_;
-}
-
-/*!
- Construct the data structures for obsolete things, if they
- have not already been constructed. Returns a reference to
- the map of obsolete QML types.
- */
-NodeMultiMap &QDocDatabase::getObsoleteQmlTypes()
-{
- if (obsoleteClasses_.isEmpty() && obsoleteQmlTypes_.isEmpty())
- processForest(&QDocDatabase::findAllObsoleteThings);
- return obsoleteQmlTypes_;
-}
-
-/*!
- Construct the data structures for obsolete things, if they
- have not already been constructed. Returns a reference to
- the map of QML types with obsolete members.
- */
-NodeMultiMap &QDocDatabase::getQmlTypesWithObsoleteMembers()
-{
- if (obsoleteClasses_.isEmpty() && obsoleteQmlTypes_.isEmpty())
- processForest(&QDocDatabase::findAllObsoleteThings);
- return qmlTypesWithObsoleteMembers_;
-}
-
-/*! \fn NodeMultiMap &QDocDatabase::getNamespaces()
- Returns a reference to the map of all namespace nodes.
- This function must not be called in the -prepare phase.
- */
-
-/*!
- Construct the data structures for QML basic types, if they
- have not already been constructed. Returns a reference to
- the map of QML basic types.
- */
-NodeMultiMap &QDocDatabase::getQmlBasicTypes()
-{
- if (cppClasses_.isEmpty() && qmlBasicTypes_.isEmpty())
- processForest(&QDocDatabase::findAllClasses);
- return qmlBasicTypes_;
-}
-
-/*!
- Construct the data structures for QML types, if they
- have not already been constructed. Returns a reference to
- the multimap of QML types.
- */
-NodeMultiMap &QDocDatabase::getQmlTypes()
-{
- if (cppClasses_.isEmpty() && qmlTypes_.isEmpty())
- processForest(&QDocDatabase::findAllClasses);
- return qmlTypes_;
-}
-
-/*!
- Construct the data structures for examples, if they
- have not already been constructed. Returns a reference to
- the multimap of example nodes.
- */
-NodeMultiMap &QDocDatabase::getExamples()
-{
- if (cppClasses_.isEmpty() && examples_.isEmpty())
- processForest(&QDocDatabase::findAllClasses);
- return examples_;
-}
-
-/*!
- Construct the data structures for attributions, if they
- have not already been constructed. Returns a reference to
- the multimap of attribution nodes.
- */
-NodeMultiMap &QDocDatabase::getAttributions()
-{
- if (attributions_.isEmpty())
- processForest(&QDocDatabase::findAllAttributions);
- return attributions_;
-}
-
-/*!
- Construct the data structures for obsolete things, if they
- have not already been constructed. Returns a reference to
- the map of obsolete C++ clases.
- */
-NodeMultiMap &QDocDatabase::getObsoleteClasses()
-{
- if (obsoleteClasses_.isEmpty() && obsoleteQmlTypes_.isEmpty())
- processForest(&QDocDatabase::findAllObsoleteThings);
- return obsoleteClasses_;
-}
-
-/*!
- Construct the C++ class data structures, if they have not
- already been constructed. Returns a reference to the map
- of all C++ classes.
- */
-NodeMultiMap &QDocDatabase::getCppClasses()
-{
- if (cppClasses_.isEmpty() && qmlTypes_.isEmpty())
- processForest(&QDocDatabase::findAllClasses);
- return cppClasses_;
-}
-
-/*!
- Construct the function index data structure and return it.
- This data structure is used to output the function index page.
- */
-NodeMapMap &QDocDatabase::getFunctionIndex()
-{
- if (functionIndex_.isEmpty())
- processForest(&QDocDatabase::findAllFunctions);
- return functionIndex_;
-}
-
-/*!
- Finds all the nodes containing legalese text and puts them
- in a map.
- */
-void QDocDatabase::findAllLegaleseTexts(Aggregate *node)
-{
- for (auto it = node->constBegin(); it != node->constEnd(); ++it) {
- if (!(*it)->isPrivate()) {
- if (!(*it)->doc().legaleseText().isEmpty())
- legaleseTexts_.insert((*it)->doc().legaleseText(), *it);
- if ((*it)->isAggregate())
- findAllLegaleseTexts(static_cast<Aggregate *>(*it));
- }
- }
-}
-
-/*!
- \fn void QDocDatabase::findAllObsoleteThings(Aggregate *node)
-
- Finds all nodes with status = Obsolete and sorts them into
- maps. They can be C++ classes, QML types, or they can be
- functions, enum types, typedefs, methods, etc.
- */
-
-/*!
- \fn void QDocDatabase::findAllSince(Aggregate *node)
-
- Finds all the nodes in \a node where a \e{since} command appeared
- in the qdoc comment and sorts them into maps according to the kind
- of node.
-
- This function is used for generating the "New Classes... in x.y"
- section on the \e{What's New in Qt x.y} page.
- */
-
-/*!
- Find the \a key in the map of new class maps, and return a
- reference to the value, which is a NodeMap. If \a key is not
- found, return a reference to an empty NodeMap.
- */
-const NodeMultiMap &QDocDatabase::getClassMap(const QString &key)
-{
- if (newSinceMaps_.isEmpty() && newClassMaps_.isEmpty() && newQmlTypeMaps_.isEmpty())
- processForest(&QDocDatabase::findAllSince);
- auto it = newClassMaps_.constFind(key);
- if (it != newClassMaps_.constEnd())
- return it.value();
- return emptyNodeMultiMap_;
-}
-
-/*!
- Find the \a key in the map of new QML type maps, and return a
- reference to the value, which is a NodeMap. If the \a key is not
- found, return a reference to an empty NodeMap.
- */
-const NodeMultiMap &QDocDatabase::getQmlTypeMap(const QString &key)
-{
- if (newSinceMaps_.isEmpty() && newClassMaps_.isEmpty() && newQmlTypeMaps_.isEmpty())
- processForest(&QDocDatabase::findAllSince);
- auto it = newQmlTypeMaps_.constFind(key);
- if (it != newQmlTypeMaps_.constEnd())
- return it.value();
- return emptyNodeMultiMap_;
-}
-
-/*!
- Find the \a key in the map of new \e {since} maps, and return
- a reference to the value, which is a NodeMultiMap. If \a key
- is not found, return a reference to an empty NodeMultiMap.
- */
-const NodeMultiMap &QDocDatabase::getSinceMap(const QString &key)
-{
- if (newSinceMaps_.isEmpty() && newClassMaps_.isEmpty() && newQmlTypeMaps_.isEmpty())
- processForest(&QDocDatabase::findAllSince);
- auto it = newSinceMaps_.constFind(key);
- if (it != newSinceMaps_.constEnd())
- return it.value();
- return emptyNodeMultiMap_;
-}
-
-/*!
- Performs several housekeeping tasks prior to generating the
- documentation. These tasks create required data structures
- and resolve links.
- */
-void QDocDatabase::resolveStuff()
-{
- const auto &config = Config::instance();
- if (config.dualExec() || config.preparing()) {
- // order matters
- primaryTree()->resolveBaseClasses(primaryTreeRoot());
- primaryTree()->resolvePropertyOverriddenFromPtrs(primaryTreeRoot());
- primaryTreeRoot()->normalizeOverloads();
- primaryTree()->markDontDocumentNodes();
- primaryTree()->removePrivateAndInternalBases(primaryTreeRoot());
- primaryTree()->resolveProperties();
- primaryTreeRoot()->markUndocumentedChildrenInternal();
- primaryTreeRoot()->resolveQmlInheritance();
- primaryTree()->resolveTargets(primaryTreeRoot());
- primaryTree()->resolveCppToQmlLinks();
- primaryTree()->resolveUsingClauses();
- }
- if (config.singleExec() && config.generating()) {
- primaryTree()->resolveBaseClasses(primaryTreeRoot());
- primaryTree()->resolvePropertyOverriddenFromPtrs(primaryTreeRoot());
- primaryTreeRoot()->resolveQmlInheritance();
- primaryTree()->resolveCppToQmlLinks();
- primaryTree()->resolveUsingClauses();
- }
- if (!config.preparing()) {
- resolveNamespaces();
- resolveProxies();
- resolveBaseClasses();
- updateNavigation();
- }
- if (config.dualExec())
- QDocIndexFiles::destroyQDocIndexFiles();
-}
-
-void QDocDatabase::resolveBaseClasses()
-{
- Tree *t = forest_.firstTree();
- while (t) {
- t->resolveBaseClasses(t->root());
- t = forest_.nextTree();
- }
-}
-
-/*!
- Returns a reference to the namespace map. Constructs the
- namespace map if it hasn't been constructed yet.
- */
-NodeMultiMap &QDocDatabase::getNamespaces()
-{
- resolveNamespaces();
- return namespaceIndex_;
-}
-
-/*!
- Multiple namespace nodes for namespace X can exist in the
- qdoc database in different trees. This function first finds
- all namespace nodes in all the trees and inserts them into
- a multimap. Then it combines all the namespace nodes that
- have the same name into a single namespace node of that
- name and inserts that combined namespace node into an index.
- */
-void QDocDatabase::resolveNamespaces()
-{
- if (!namespaceIndex_.isEmpty())
- return;
- NodeMultiMap namespaceMultimap;
- Tree *t = forest_.firstTree();
- while (t) {
- t->root()->findAllNamespaces(namespaceMultimap);
- t = forest_.nextTree();
- }
- const QList<QString> keys = namespaceMultimap.uniqueKeys();
- for (const QString &key : keys) {
- NamespaceNode *ns = nullptr;
- NamespaceNode *somewhere = nullptr;
- const NodeList namespaces = namespaceMultimap.values(key);
- int count = namespaceMultimap.remove(key);
- if (count > 0) {
- for (auto *node : namespaces) {
- ns = static_cast<NamespaceNode *>(node);
- if (ns->isDocumentedHere())
- break;
- else if (ns->hadDoc())
- somewhere = ns;
- ns = nullptr;
- }
- if (ns) {
- for (auto *node : namespaces) {
- NamespaceNode *NS = static_cast<NamespaceNode *>(node);
- if (NS->hadDoc() && NS != ns) {
- ns->doc().location().warning(
- QStringLiteral("Namespace %1 documented more than once")
- .arg(NS->name()));
- NS->doc().location().warning(QStringLiteral("...also seen here"));
- }
- }
-
- } else if (somewhere == nullptr) {
- for (auto *node : namespaces) {
- NamespaceNode *NS = static_cast<NamespaceNode *>(node);
- NS->reportDocumentedChildrenInUndocumentedNamespace();
- }
- }
- if (somewhere) {
- for (auto *node : namespaces) {
- NamespaceNode *NS = static_cast<NamespaceNode *>(node);
- if (NS != somewhere)
- NS->setDocNode(somewhere);
- }
- }
- }
- /*
- If there are multiple namespace nodes with the same
- name and one of them will be the reference page for
- the namespace, include all the nodes in the public
- API of the namespace in the single namespace node
- that will generate the namespace reference page for
- the namespace.
- */
- if (ns && count > 1) {
- for (auto *node : namespaces) {
- auto *nameSpaceNode = static_cast<NamespaceNode *>(node);
- if (nameSpaceNode != ns) {
- for (auto it = nameSpaceNode->constBegin(); it != nameSpaceNode->constEnd();
- ++it) {
- Node *N = *it;
- if (N && N->isPublic() && !N->isInternal())
- ns->includeChild(N);
- }
- }
- }
- }
- if (ns == nullptr)
- ns = static_cast<NamespaceNode *>(namespaces.at(0));
- namespaceIndex_.insert(ns->name(), ns);
- }
-}
-
-/*!
- Each instance of class Tree that represents an index file
- must be traversed to find all instances of class ProxyNode.
- For each ProxyNode found, look up the ProxyNode's name in
- the primary Tree. If it is found, it means that the proxy
- node contains elements (normally just functions) that are
- documented in the module represented by the Tree containing
- the proxy node but that are related to the node we found in
- the primary tree.
- */
-void QDocDatabase::resolveProxies()
-{
- // The first tree is the primary tree.
- // Skip the primary tree.
- Tree *t = forest_.firstTree();
- t = forest_.nextTree();
- while (t) {
- const NodeList &proxies = t->proxies();
- if (!proxies.isEmpty()) {
- for (auto *node : proxies) {
- ProxyNode *pn = static_cast<ProxyNode *>(node);
- if (pn->count() > 0) {
- Aggregate *aggregate = primaryTree()->findAggregate(pn->name());
- if (aggregate != nullptr)
- aggregate->appendToRelatedByProxy(pn->childNodes());
- }
- }
- }
- t = forest_.nextTree();
- }
-}
-
-/*!
- Finds the function node for the qualified function path in
- \a target and returns a pointer to it. The \a target is a
- function signature with or without parameters but without
- the return type.
-
- \a relative is the node in the primary tree where the search
- begins. It is not used in the other trees, if the node is not
- found in the primary tree. \a genus can be used to force the
- search to find a C++ function or a QML function.
-
- The entire forest is searched, but the first match is accepted.
- */
-const FunctionNode *QDocDatabase::findFunctionNode(const QString &target, const Node *relative,
- Node::Genus genus)
-{
- QString signature;
- QString function = target;
- int length = target.length();
- if (function.endsWith("()"))
- function.chop(2);
- if (function.endsWith(QChar(')'))) {
- int position = function.lastIndexOf(QChar('('));
- signature = function.mid(position + 1, length - position - 2);
- function = function.left(position);
- }
- QStringList path = function.split("::");
- return forest_.findFunctionNode(path, Parameters(signature), relative, genus);
-}
-
-/*!
- This function is called for autolinking to a \a type,
- which could be a function return type or a parameter
- type. The tree node that represents the \a type is
- returned. All the trees are searched until a match is
- found. When searching the primary tree, the search
- begins at \a relative and proceeds up the parent chain.
- When searching the index trees, the search begins at the
- root.
- */
-const Node *QDocDatabase::findTypeNode(const QString &type, const Node *relative, Node::Genus genus)
-{
- QStringList path = type.split("::");
- if ((path.size() == 1) && (path.at(0)[0].isLower() || path.at(0) == QString("T"))) {
- auto it = typeNodeMap_.find(path.at(0));
- if (it != typeNodeMap_.end())
- return it.value();
- }
- return forest_.findTypeNode(path, relative, genus);
-}
-
-/*!
- Finds the node that will generate the documentation that
- contains the \a target and returns a pointer to it.
-
- Can this be improved by using the target map in Tree?
- */
-const Node *QDocDatabase::findNodeForTarget(const QString &target, const Node *relative)
-{
- const Node *node = nullptr;
- if (target.isEmpty())
- node = relative;
- else if (target.endsWith(".html"))
- node = findNodeByNameAndType(QStringList(target), &Node::isPageNode);
- else {
- QStringList path = target.split("::");
- int flags = SearchBaseClasses | SearchEnumValues;
- for (const auto *tree : searchOrder()) {
- const Node *n = tree->findNode(path, relative, flags, Node::DontCare);
- if (n)
- return n;
- relative = nullptr;
- }
- node = findPageNodeByTitle(target);
- }
- return node;
-}
-
-/*!
- Generates a tag file and writes it to \a name.
- */
-void QDocDatabase::generateTagFile(const QString &name, Generator *g)
-{
- if (!name.isEmpty()) {
- QDocTagFiles::qdocTagFiles()->generateTagFile(name, g);
- QDocTagFiles::destroyQDocTagFiles();
- }
-}
-
-/*!
- Reads and parses the qdoc index files listed in \a indexFiles.
- */
-void QDocDatabase::readIndexes(const QStringList &indexFiles)
-{
- QStringList filesToRead;
- for (const QString &file : indexFiles) {
- QString fn = file.mid(file.lastIndexOf(QChar('/')) + 1);
- if (!isLoaded(fn))
- filesToRead << file;
- else
- qDebug() << "This index file is already in memory:" << file;
- }
- QDocIndexFiles::qdocIndexFiles()->readIndexes(filesToRead);
-}
-
-/*!
- Generates a qdoc index file and write it to \a fileName. The
- index file is generated with the parameters \a url and \a title,
- using the generator \a g.
- */
-void QDocDatabase::generateIndex(const QString &fileName, const QString &url, const QString &title,
- Generator *g)
-{
- QString t = fileName.mid(fileName.lastIndexOf(QChar('/')) + 1);
- primaryTree()->setIndexFileName(t);
- QDocIndexFiles::qdocIndexFiles()->generateIndex(fileName, url, title, g);
- QDocIndexFiles::destroyQDocIndexFiles();
-}
-
-/*!
- Find a node of the specified \a type that is reached with
- the specified \a path qualified with the name of one of the
- open namespaces (might not be any open ones). If the node
- is found in an open namespace, prefix \a path with the name
- of the open namespace and "::" and return a pointer to the
- node. Othewrwise return 0.
-
- This function only searches in the current primary tree.
- */
-Node *QDocDatabase::findNodeInOpenNamespace(QStringList &path, bool (Node::*isMatch)() const)
-{
- if (path.isEmpty())
- return nullptr;
- Node *n = nullptr;
- if (!openNamespaces_.isEmpty()) {
- const auto &openNamespaces = openNamespaces_;
- for (const QString &t : openNamespaces) {
- QStringList p;
- if (t != path[0])
- p = t.split("::") + path;
- else
- p = path;
- n = primaryTree()->findNodeByNameAndType(p, isMatch);
- if (n) {
- path = p;
- break;
- }
- }
- }
- return n;
-}
-
-/*!
- Finds all the collection nodes of the specified \a type
- and merges them into the collection node map \a cnm. Nodes
- that match the \a relative node are not included.
- */
-void QDocDatabase::mergeCollections(Node::NodeType type, CNMap &cnm, const Node *relative)
-{
- cnm.clear();
- CNMultiMap cnmm;
- for (auto *tree : searchOrder()) {
- CNMap *m = tree->getCollectionMap(type);
- if (m && !m->isEmpty()) {
- for (auto it = m->cbegin(); it != m->cend(); ++it) {
- if (!it.value()->isInternal())
- cnmm.insert(it.key(), it.value());
- }
- }
- }
- if (cnmm.isEmpty())
- return;
- QRegularExpression singleDigit("\\b([0-9])\\b");
- const QStringList keys = cnmm.uniqueKeys();
- for (const auto &key : keys) {
- const QList<CollectionNode *> values = cnmm.values(key);
- CollectionNode *n = nullptr;
- for (auto *value : values) {
- if (value && value->wasSeen() && value != relative) {
- n = value;
- break;
- }
- }
- if (n) {
- if (values.size() > 1) {
- for (CollectionNode *value : values) {
- if (value != n) {
- // Allow multiple (major) versions of QML/JS modules
- if ((n->isQmlModule() || n->isJsModule())
- && n->logicalModuleIdentifier() != value->logicalModuleIdentifier()) {
- if (value->wasSeen() && value != relative
- && !value->members().isEmpty())
- cnm.insert(value->fullTitle().toLower(), value);
- continue;
- }
- for (Node *t : value->members())
- n->addMember(t);
- }
- }
- }
- if (!n->members().isEmpty()) {
- QString sortKey = n->fullTitle().toLower();
- if (sortKey.startsWith("the "))
- sortKey.remove(0, 4);
- sortKey.replace(singleDigit, "0\\1");
- cnm.insert(sortKey, n);
- }
- }
- }
-}
-
-/*!
- Finds all the collection nodes with the same name
- and type as \a c and merges their members into the
- members list of \a c.
-
- For QML and JS modules, only nodes with matching
- module identifiers are merged to avoid merging
- modules with different (major) versions.
- */
-void QDocDatabase::mergeCollections(CollectionNode *c)
-{
- if (c == nullptr)
- return;
-
- for (auto *tree : searchOrder()) {
- CollectionNode *cn = tree->getCollection(c->name(), c->nodeType());
- if (cn && cn != c) {
- if ((cn->isQmlModule() || cn->isJsModule())
- && cn->logicalModuleIdentifier() != c->logicalModuleIdentifier())
- continue;
- for (auto *node : cn->members())
- c->addMember(node);
- }
- }
-}
-
-/*!
- Searches for the node that matches the path in \a atom. The
- \a relative node is used if the first leg of the path is
- empty, i.e. if the path begins with a hashtag. The function
- also sets \a ref if there remains an unused leg in the path
- after the node is found. The node is returned as well as the
- \a ref. If the returned node pointer is null, \a ref is not
- valid.
- */
-const Node *QDocDatabase::findNodeForAtom(const Atom *a, const Node *relative, QString &ref)
-{
- const Node *node = nullptr;
-
- Atom *atom = const_cast<Atom *>(a);
- QStringList targetPath = atom->string().split(QLatin1Char('#'));
- QString first = targetPath.first().trimmed();
-
- Tree *domain = nullptr;
- Node::Genus genus = Node::DontCare;
-
- if (atom->isLinkAtom()) {
- domain = atom->domain();
- genus = atom->genus();
- }
-
- if (first.isEmpty())
- node = relative; // search for a target on the current page.
- else if (domain) {
- if (first.endsWith(".html"))
- node = domain->findNodeByNameAndType(QStringList(first), &Node::isPageNode);
- else if (first.endsWith(QChar(')'))) {
- QString signature;
- QString function = first;
- int length = first.length();
- if (function.endsWith("()"))
- function.chop(2);
- if (function.endsWith(QChar(')'))) {
- int position = function.lastIndexOf(QChar('('));
- signature = function.mid(position + 1, length - position - 2);
- function = function.left(position);
- }
- QStringList path = function.split("::");
- node = domain->findFunctionNode(path, Parameters(signature), nullptr, genus);
- }
- if (node == nullptr) {
- int flags = SearchBaseClasses | SearchEnumValues;
- QStringList nodePath = first.split("::");
- QString target;
- targetPath.removeFirst();
- if (!targetPath.isEmpty())
- target = targetPath.takeFirst();
- if (relative && relative->tree()->physicalModuleName() != domain->physicalModuleName())
- relative = nullptr;
- return domain->findNodeForTarget(nodePath, target, relative, flags, genus, ref);
- }
- } else {
- if (first.endsWith(".html"))
- node = findNodeByNameAndType(QStringList(first), &Node::isPageNode);
- else if (first.endsWith(QChar(')')))
- node = findFunctionNode(first, relative, genus);
- if (node == nullptr)
- return findNodeForTarget(targetPath, relative, genus, ref);
- }
-
- if (node != nullptr && ref.isEmpty()) {
- if (!node->url().isEmpty())
- return node;
- targetPath.removeFirst();
- if (!targetPath.isEmpty()) {
- ref = node->root()->tree()->getRef(targetPath.first(), node);
- if (ref.isEmpty())
- node = nullptr;
- }
- }
- return node;
-}
-
-/*!
- Updates navigation (previous/next page links) for pages listed
- in the TOC, specified by the \c navigation.toctitles configuration
- variable.
-*/
-void QDocDatabase::updateNavigation()
-{
- // Restrict searching only to the local (primary) tree
- QList<Tree *> searchOrder = this->searchOrder();
- setLocalSearch();
-
- const auto tocTitles =
- Config::instance().getStringList(CONFIG_NAVIGATION +
- Config::dot +
- CONFIG_TOCTITLES);
-
- for (const auto &tocTitle : tocTitles) {
- if (const auto tocPage = findNodeForTarget(tocTitle, nullptr)) {
- Text body = tocPage->doc().body();
- auto *atom = body.firstAtom();
- std::pair<Node *, Atom *> prev { nullptr, nullptr };
- bool inItem = false;
- while (atom) {
- switch (atom->type()) {
- case Atom::ListItemLeft:
- inItem = true;
- break;
- case Atom::ListItemRight:
- inItem = false;
- break;
- case Atom::Link: {
- if (!inItem)
- break;
- QString ref;
- auto page = const_cast<Node *>(findNodeForAtom(atom, nullptr, ref));
- if (page && page->isPageNode()) {
- if (prev.first) {
- prev.first->setLink(Node::NextLink,
- page->title(),
- atom->linkText());
- page->setLink(Node::PreviousLink,
- prev.first->title(),
- prev.second->linkText());
- }
- prev = { page, atom };
- }
- }
- break;
- default:
- break;
- }
-
- if (atom == body.lastAtom())
- break;
- atom = atom->next();
- }
- } else {
- Config::instance().lastLocation().warning(
- QStringLiteral("Failed to find table of contents with title '%1'")
- .arg(tocTitle));
- }
- }
-
- // Restore search order
- setSearchOrder(searchOrder);
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/qdocdatabase.h b/src/qdoc/qdocdatabase.h
deleted file mode 100644
index 90dc2e966..000000000
--- a/src/qdoc/qdocdatabase.h
+++ /dev/null
@@ -1,453 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDOCDATABASE_H
-#define QDOCDATABASE_H
-
-#include "config.h"
-#include "examplenode.h"
-#include "propertynode.h"
-#include "text.h"
-#include "tree.h"
-
-#include <QtCore/qdebug.h>
-#include <QtCore/qmap.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-typedef QMultiMap<Text, const Node *> TextToNodeMap;
-
-class Atom;
-class FunctionNode;
-class Generator;
-class QDocDatabase;
-
-enum FindFlag {
- SearchBaseClasses = 0x1,
- SearchEnumValues = 0x2,
- TypesOnly = 0x4,
- IgnoreModules = 0x8
-};
-
-class QDocForest
-{
-private:
- friend class QDocDatabase;
- QDocForest(QDocDatabase *qdb) : qdb_(qdb), primaryTree_(nullptr), currentIndex_(0) {}
- ~QDocForest();
-
- NamespaceNode *firstRoot();
- NamespaceNode *nextRoot();
- Tree *firstTree();
- Tree *nextTree();
- Tree *primaryTree() { return primaryTree_; }
- Tree *findTree(const QString &t) { return forest_.value(t); }
- QStringList keys() { return forest_.keys(); }
- NamespaceNode *primaryTreeRoot() { return (primaryTree_ ? primaryTree_->root() : nullptr); }
- bool isEmpty() { return searchOrder().isEmpty(); }
- bool done() { return (currentIndex_ >= searchOrder().size()); }
- const QList<Tree *> &searchOrder();
- const QList<Tree *> &indexSearchOrder();
- void setSearchOrder(const QStringList &t);
- bool isLoaded(const QString &fn)
- {
- return std::any_of(searchOrder().constBegin(), searchOrder().constEnd(),
- [fn](Tree *tree) { return fn == tree->indexFileName(); });
- }
-
- const Node *findNode(const QStringList &path, const Node *relative, int findFlags,
- Node::Genus genus)
- {
- for (const auto *tree : searchOrder()) {
- const Node *n = tree->findNode(path, relative, findFlags, genus);
- if (n)
- return n;
- relative = nullptr;
- }
- return nullptr;
- }
-
- Node *findNodeByNameAndType(const QStringList &path, bool (Node::*isMatch)() const)
- {
- for (const auto *tree : searchOrder()) {
- Node *n = tree->findNodeByNameAndType(path, isMatch);
- if (n)
- return n;
- }
- return nullptr;
- }
-
- ClassNode *findClassNode(const QStringList &path)
- {
- for (const auto *tree : searchOrder()) {
- ClassNode *n = tree->findClassNode(path);
- if (n)
- return n;
- }
- return nullptr;
- }
-
- Node *findNodeForInclude(const QStringList &path)
- {
- for (const auto *tree : searchOrder()) {
- Node *n = tree->findNodeForInclude(path);
- if (n)
- return n;
- }
- return nullptr;
- }
-
- const FunctionNode *findFunctionNode(const QStringList &path, const Parameters &parameters,
- const Node *relative, Node::Genus genus);
- const Node *findNodeForTarget(QStringList &targetPath, const Node *relative, Node::Genus genus,
- QString &ref);
-
- const Node *findTypeNode(const QStringList &path, const Node *relative, Node::Genus genus)
- {
- int flags = SearchBaseClasses | SearchEnumValues | TypesOnly;
- if (relative && genus == Node::DontCare && relative->genus() != Node::DOC)
- genus = relative->genus();
- for (const auto *tree : searchOrder()) {
- const Node *n = tree->findNode(path, relative, flags, genus);
- if (n)
- return n;
- relative = nullptr;
- }
- return nullptr;
- }
-
- const PageNode *findPageNodeByTitle(const QString &title)
- {
- for (const auto *tree : searchOrder()) {
- const PageNode *n = tree->findPageNodeByTitle(title);
- if (n)
- return n;
- }
- return nullptr;
- }
-
- const CollectionNode *getCollectionNode(const QString &name, Node::NodeType type)
- {
- for (auto *tree : searchOrder()) {
- const CollectionNode *cn = tree->getCollection(name, type);
- if (cn)
- return cn;
- }
- return nullptr;
- }
-
- QmlTypeNode *lookupQmlType(const QString &name)
- {
- for (const auto *tree : searchOrder()) {
- QmlTypeNode *qcn = tree->lookupQmlType(name);
- if (qcn)
- return qcn;
- }
- return nullptr;
- }
-
- Aggregate *lookupQmlBasicType(const QString &name)
- {
- for (const auto *tree : searchOrder()) {
- Aggregate *a = tree->lookupQmlBasicType(name);
- if (a)
- return a;
- }
- return nullptr;
- }
- void clearSearchOrder() { searchOrder_.clear(); }
- void clearLinkCounts()
- {
- for (auto *tree : searchOrder())
- tree->clearLinkCount();
- }
- void printLinkCounts(const QString &project);
- QString getLinkCounts(QStringList &strings, QList<int> &counts);
- void newPrimaryTree(const QString &module);
- void setPrimaryTree(const QString &t);
- NamespaceNode *newIndexTree(const QString &module);
-
-private:
- QDocDatabase *qdb_;
- Tree *primaryTree_;
- int currentIndex_;
- QMap<QString, Tree *> forest_;
- QList<Tree *> searchOrder_;
- QList<Tree *> indexSearchOrder_;
- QList<QString> moduleNames_;
-};
-
-class QDocDatabase
-{
-public:
- static QDocDatabase *qdocDB();
- static void destroyQdocDB();
- ~QDocDatabase();
-
- Tree *findTree(const QString &t) { return forest_.findTree(t); }
-
- const CNMap &groups() { return primaryTree()->groups(); }
- const CNMap &modules() { return primaryTree()->modules(); }
- const CNMap &qmlModules() { return primaryTree()->qmlModules(); }
- const CNMap &jsModules() { return primaryTree()->jsModules(); }
-
- CollectionNode *addGroup(const QString &name) { return primaryTree()->addGroup(name); }
- CollectionNode *addModule(const QString &name) { return primaryTree()->addModule(name); }
- CollectionNode *addQmlModule(const QString &name) { return primaryTree()->addQmlModule(name); }
- CollectionNode *addJsModule(const QString &name) { return primaryTree()->addJsModule(name); }
-
- CollectionNode *addToGroup(const QString &name, Node *node)
- {
- return primaryTree()->addToGroup(name, node);
- }
- CollectionNode *addToModule(const QString &name, Node *node)
- {
- return primaryTree()->addToModule(name, node);
- }
- CollectionNode *addToQmlModule(const QString &name, Node *node)
- {
- return primaryTree()->addToQmlModule(name, node);
- }
- CollectionNode *addToJsModule(const QString &name, Node *node)
- {
- return primaryTree()->addToJsModule(name, node);
- }
-
- void addExampleNode(ExampleNode *n) { primaryTree()->addExampleNode(n); }
- ExampleNodeMap &exampleNodeMap() { return primaryTree()->exampleNodeMap(); }
-
- QmlTypeNode *findQmlType(const QString &name);
- QmlTypeNode *findQmlType(const QString &qmid, const QString &name);
- QmlTypeNode *findQmlType(const ImportRec &import, const QString &name);
- Aggregate *findQmlBasicType(const QString &qmid, const QString &name);
-
- static NodeMultiMap &obsoleteClasses() { return obsoleteClasses_; }
- static NodeMultiMap &obsoleteQmlTypes() { return obsoleteQmlTypes_; }
- static NodeMultiMap &classesWithObsoleteMembers() { return classesWithObsoleteMembers_; }
- static NodeMultiMap &qmlTypesWithObsoleteMembers() { return qmlTypesWithObsoleteMembers_; }
- static NodeMultiMap &cppClasses() { return cppClasses_; }
- static NodeMultiMap &qmlBasicTypes() { return qmlBasicTypes_; }
- static NodeMultiMap &qmlTypes() { return qmlTypes_; }
- static NodeMultiMap &examples() { return examples_; }
- static NodeMultiMapMap &newClassMaps() { return newClassMaps_; }
- static NodeMultiMapMap &newQmlTypeMaps() { return newQmlTypeMaps_; }
- static NodeMultiMapMap &newSinceMaps() { return newSinceMaps_; }
-
-private:
- void findAllClasses(Aggregate *node) { node->findAllClasses(); }
- void findAllFunctions(Aggregate *node) { node->findAllFunctions(functionIndex_); }
- void findAllAttributions(Aggregate *node) { node->findAllAttributions(attributions_); }
- void findAllLegaleseTexts(Aggregate *node);
- void findAllObsoleteThings(Aggregate *node) { node->findAllObsoleteThings(); }
- void findAllSince(Aggregate *node) { node->findAllSince(); }
-
-public:
- /*******************************************************************
- special collection access functions
- ********************************************************************/
- NodeMultiMap &getCppClasses();
- NodeMultiMap &getObsoleteClasses();
- NodeMultiMap &getClassesWithObsoleteMembers();
- NodeMultiMap &getObsoleteQmlTypes();
- NodeMultiMap &getQmlTypesWithObsoleteMembers();
- NodeMultiMap &getNamespaces();
- NodeMultiMap &getQmlBasicTypes();
- NodeMultiMap &getQmlTypes();
- NodeMultiMap &getExamples();
- NodeMultiMap &getAttributions();
- NodeMapMap &getFunctionIndex();
- TextToNodeMap &getLegaleseTexts();
- const NodeMultiMap &getClassMap(const QString &key);
- const NodeMultiMap &getQmlTypeMap(const QString &key);
- const NodeMultiMap &getSinceMap(const QString &key);
-
- /*******************************************************************
- Many of these will be either eliminated or replaced.
- ********************************************************************/
- void resolveStuff();
- void insertTarget(const QString &name, const QString &title, TargetRec::TargetType type,
- Node *node, int priority)
- {
- primaryTree()->insertTarget(name, title, type, node, priority);
- }
-
- /*******************************************************************
- The functions declared below are called for the current tree only.
- ********************************************************************/
- Aggregate *findRelatesNode(const QStringList &path)
- {
- return primaryTree()->findRelatesNode(path);
- }
- Node *findNodeInOpenNamespace(QStringList &path, bool (Node::*)() const);
- /*******************************************************************/
-
- /*****************************************************************************
- This function can handle parameters enclosed in '[' ']' (domanin and genus).
- ******************************************************************************/
- const Node *findNodeForAtom(const Atom *atom, const Node *relative, QString &ref);
- /*******************************************************************/
-
- /*******************************************************************
- The functions declared below are called for all trees.
- ********************************************************************/
- ClassNode *findClassNode(const QStringList &path) { return forest_.findClassNode(path); }
- Node *findNodeForInclude(const QStringList &path) { return forest_.findNodeForInclude(path); }
- const FunctionNode *findFunctionNode(const QString &target, const Node *relative,
- Node::Genus genus);
- const Node *findTypeNode(const QString &type, const Node *relative, Node::Genus genus);
- const Node *findNodeForTarget(const QString &target, const Node *relative);
- const PageNode *findPageNodeByTitle(const QString &title)
- {
- return forest_.findPageNodeByTitle(title);
- }
- Node *findNodeByNameAndType(const QStringList &path, bool (Node::*isMatch)() const)
- {
- return forest_.findNodeByNameAndType(path, isMatch);
- }
- const CollectionNode *getCollectionNode(const QString &name, Node::NodeType type)
- {
- return forest_.getCollectionNode(name, type);
- }
- FunctionNode *findFunctionNodeForTag(QString tag)
- {
- return primaryTree()->findFunctionNodeForTag(tag);
- }
- FunctionNode *findMacroNode(const QString &t) { return primaryTree()->findMacroNode(t); }
-
-private:
- const Node *findNodeForTarget(QStringList &targetPath, const Node *relative, Node::Genus genus,
- QString &ref)
- {
- return forest_.findNodeForTarget(targetPath, relative, genus, ref);
- }
- const FunctionNode *findFunctionNode(const QStringList &path, const Parameters &parameters,
- const Node *relative, Node::Genus genus)
- {
- return forest_.findFunctionNode(path, parameters, relative, genus);
- }
-
- /*******************************************************************/
-public:
- void addPropertyFunction(PropertyNode *property, const QString &funcName,
- PropertyNode::FunctionRole funcRole)
- {
- primaryTree()->addPropertyFunction(property, funcName, funcRole);
- }
-
- void setVersion(const QString &v) { version_ = v; }
- QString version() const { return version_; }
-
- void generateTagFile(const QString &name, Generator *g);
- void readIndexes(const QStringList &indexFiles);
- void generateIndex(const QString &fileName, const QString &url, const QString &title,
- Generator *g);
-
- void clearOpenNamespaces() { openNamespaces_.clear(); }
- void insertOpenNamespace(const QString &path) { openNamespaces_.insert(path); }
- void setShowInternal(bool value) { showInternal_ = value; }
- void setSingleExec(bool value) { singleExec_ = value; }
- void processForest();
-
- // Try to make this function private.
- QDocForest &forest() { return forest_; }
- NamespaceNode *primaryTreeRoot() { return forest_.primaryTreeRoot(); }
- void newPrimaryTree(const QString &module) { forest_.newPrimaryTree(module); }
- void setPrimaryTree(const QString &t) { forest_.setPrimaryTree(t); }
- NamespaceNode *newIndexTree(const QString &module) { return forest_.newIndexTree(module); }
- const QList<Tree *> &searchOrder() { return forest_.searchOrder(); }
- void setLocalSearch() { forest_.searchOrder_ = QList<Tree *>(1, primaryTree()); }
- void setSearchOrder(const QList<Tree *> &searchOrder) { forest_.searchOrder_ = searchOrder; }
- void setSearchOrder(QStringList &t) { forest_.setSearchOrder(t); }
- void mergeCollections(Node::NodeType type, CNMap &cnm, const Node *relative);
- void mergeCollections(CollectionNode *c);
- void clearSearchOrder() { forest_.clearSearchOrder(); }
- void incrementLinkCount(const Node *t) { t->tree()->incrementLinkCount(); }
- void clearLinkCounts() { forest_.clearLinkCounts(); }
- void printLinkCounts(const QString &t) { forest_.printLinkCounts(t); }
- QString getLinkCounts(QStringList &strings, QList<int> &counts)
- {
- return forest_.getLinkCounts(strings, counts);
- }
- QStringList keys() { return forest_.keys(); }
- void resolveNamespaces();
- void resolveProxies();
- void resolveBaseClasses();
- void updateNavigation();
-
-private:
- friend class Tree;
-
- const Node *findNode(const QStringList &path, const Node *relative, int findFlags,
- Node::Genus genus)
- {
- return forest_.findNode(path, relative, findFlags, genus);
- }
- void processForest(void (QDocDatabase::*)(Aggregate *));
- bool isLoaded(const QString &t) { return forest_.isLoaded(t); }
- static void initializeDB();
-
-private:
- QDocDatabase();
- QDocDatabase(QDocDatabase const &) : showInternal_(false), forest_(this) {}
- QDocDatabase &operator=(QDocDatabase const &);
-
-public:
- static bool debug;
- Tree *primaryTree() { return forest_.primaryTree(); }
-
-private:
- static QDocDatabase *qdocDB_;
- static NodeMap typeNodeMap_;
- static NodeMultiMap obsoleteClasses_;
- static NodeMultiMap classesWithObsoleteMembers_;
- static NodeMultiMap obsoleteQmlTypes_;
- static NodeMultiMap qmlTypesWithObsoleteMembers_;
- static NodeMultiMap cppClasses_;
- static NodeMultiMap qmlBasicTypes_;
- static NodeMultiMap qmlTypes_;
- static NodeMultiMap examples_;
- static NodeMultiMapMap newClassMaps_;
- static NodeMultiMapMap newQmlTypeMaps_;
- static NodeMultiMapMap newSinceMaps_;
-
- bool showInternal_;
- bool singleExec_;
- QString version_;
- QDocForest forest_;
-
- NodeMultiMap namespaceIndex_;
- NodeMultiMap attributions_;
- NodeMapMap functionIndex_;
- TextToNodeMap legaleseTexts_;
- QSet<QString> openNamespaces_;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/qdocindexfiles.cpp b/src/qdoc/qdocindexfiles.cpp
deleted file mode 100644
index 2b680b586..000000000
--- a/src/qdoc/qdocindexfiles.cpp
+++ /dev/null
@@ -1,1575 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdocindexfiles.h"
-
-#include "access.h"
-#include "atom.h"
-#include "classnode.h"
-#include "collectionnode.h"
-#include "config.h"
-#include "enumnode.h"
-#include "examplenode.h"
-#include "externalpagenode.h"
-#include "functionnode.h"
-#include "generator.h"
-#include "headernode.h"
-#include "location.h"
-#include "loggingcategory.h"
-#include "propertynode.h"
-#include "qdocdatabase.h"
-#include "qmlpropertynode.h"
-#include "typedefnode.h"
-#include "variablenode.h"
-
-#include <QtCore/qxmlstream.h>
-
-#include <algorithm>
-
-QT_BEGIN_NAMESPACE
-
-enum QDocAttr {
- QDocAttrNone,
- QDocAttrAttribution,
- QDocAttrExample,
- QDocAttrFile,
- QDocAttrImage,
- QDocAttrDocument,
- QDocAttrExternalPage
-};
-
-static Node *root_ = nullptr;
-static IndexSectionWriter *post_ = nullptr;
-
-/*!
- \class QDocIndexFiles
-
- This class handles qdoc index files.
- */
-
-QDocIndexFiles *QDocIndexFiles::qdocIndexFiles_ = nullptr;
-
-/*!
- Constructs the singleton QDocIndexFiles.
- */
-QDocIndexFiles::QDocIndexFiles() : gen_(nullptr)
-{
- qdb_ = QDocDatabase::qdocDB();
- storeLocationInfo_ = Config::instance().getBool(CONFIG_LOCATIONINFO);
-}
-
-/*!
- Destroys the singleton QDocIndexFiles.
- */
-QDocIndexFiles::~QDocIndexFiles()
-{
- qdb_ = nullptr;
- gen_ = nullptr;
-}
-
-/*!
- Creates the singleton. Allows only one instance of the class
- to be created. Returns a pointer to the singleton.
- */
-QDocIndexFiles *QDocIndexFiles::qdocIndexFiles()
-{
- if (qdocIndexFiles_ == nullptr)
- qdocIndexFiles_ = new QDocIndexFiles;
- return qdocIndexFiles_;
-}
-
-/*!
- Destroys the singleton.
- */
-void QDocIndexFiles::destroyQDocIndexFiles()
-{
- if (qdocIndexFiles_ != nullptr) {
- delete qdocIndexFiles_;
- qdocIndexFiles_ = nullptr;
- }
-}
-
-/*!
- Reads and parses the list of index files in \a indexFiles.
- */
-void QDocIndexFiles::readIndexes(const QStringList &indexFiles)
-{
- for (const QString &file : indexFiles) {
- qCDebug(lcQdoc) << "Loading index file: " << file;
- readIndexFile(file);
- }
-}
-
-/*!
- Reads and parses the index file at \a path.
- */
-void QDocIndexFiles::readIndexFile(const QString &path)
-{
- QFile file(path);
- if (!file.open(QFile::ReadOnly)) {
- qWarning() << "Could not read index file" << path;
- return;
- }
-
- QXmlStreamReader reader(&file);
- reader.setNamespaceProcessing(false);
-
- if (!reader.readNextStartElement())
- return;
-
- if (reader.name() != QLatin1String("INDEX"))
- return;
-
- QXmlStreamAttributes attrs = reader.attributes();
-
- // Generate a relative URL between the install dir and the index file
- // when the -installdir command line option is set.
- QString indexUrl;
- if (Config::installDir.isEmpty()) {
- indexUrl = attrs.value(QLatin1String("url")).toString();
- } else {
- // Use a fake directory, since we will copy the output to a sub directory of
- // installDir when using "make install". This is just for a proper relative path.
- // QDir installDir(path.section('/', 0, -3) + "/outputdir");
- QDir installDir(path.section('/', 0, -3) + '/' + Generator::outputSubdir());
- indexUrl = installDir.relativeFilePath(path).section('/', 0, -2);
- }
- project_ = attrs.value(QLatin1String("project")).toString();
- QString indexTitle = attrs.value(QLatin1String("indexTitle")).toString();
- basesList_.clear();
-
- NamespaceNode *root = qdb_->newIndexTree(project_);
- if (!root) {
- qWarning() << "Issue parsing index tree" << path;
- return;
- }
-
- root->tree()->setIndexTitle(indexTitle);
-
- // Scan all elements in the XML file, constructing a map that contains
- // base classes for each class found.
- while (reader.readNextStartElement()) {
- readIndexSection(reader, root, indexUrl);
- }
-
- // Now that all the base classes have been found for this index,
- // arrange them into an inheritance hierarchy.
- resolveIndex();
-}
-
-/*!
- Read a <section> element from the index file and create the
- appropriate node(s).
- */
-void QDocIndexFiles::readIndexSection(QXmlStreamReader &reader, Node *current,
- const QString &indexUrl)
-{
- QXmlStreamAttributes attributes = reader.attributes();
- QStringView elementName = reader.name();
-
- QString name = attributes.value(QLatin1String("name")).toString();
- QString href = attributes.value(QLatin1String("href")).toString();
- Node *node;
- Location location;
- Aggregate *parent = nullptr;
-
- bool hasReadChildren = false;
-
- if (current->isAggregate())
- parent = static_cast<Aggregate *>(current);
-
- QString filePath;
- int lineNo = 0;
- if (attributes.hasAttribute(QLatin1String("filepath"))) {
- filePath = attributes.value(QLatin1String("filepath")).toString();
- lineNo = attributes.value("lineno").toInt();
- }
- if (elementName == QLatin1String("namespace")) {
- auto *namespaceNode = new NamespaceNode(parent, name);
- node = namespaceNode;
- if (!indexUrl.isEmpty())
- location = Location(indexUrl + QLatin1Char('/') + name.toLower() + ".html");
- else if (!indexUrl.isNull())
- location = Location(name.toLower() + ".html");
- } else if (elementName == QLatin1String("class") || elementName == QLatin1String("struct")
- || elementName == QLatin1String("union")) {
- Node::NodeType type = Node::Class;
- if (elementName == QLatin1String("class"))
- type = Node::Class;
- else if (elementName == QLatin1String("struct"))
- type = Node::Struct;
- else if (elementName == QLatin1String("union"))
- type = Node::Union;
- node = new ClassNode(type, parent, name);
- if (attributes.hasAttribute(QLatin1String("bases"))) {
- QString bases = attributes.value(QLatin1String("bases")).toString();
- if (!bases.isEmpty())
- basesList_.append(
- QPair<ClassNode *, QString>(static_cast<ClassNode *>(node), bases));
- }
- if (!indexUrl.isEmpty())
- location = Location(indexUrl + QLatin1Char('/') + name.toLower() + ".html");
- else if (!indexUrl.isNull())
- location = Location(name.toLower() + ".html");
- bool abstract = false;
- if (attributes.value(QLatin1String("abstract")) == QLatin1String("true"))
- abstract = true;
- node->setAbstract(abstract);
- } else if (elementName == QLatin1String("header")) {
- node = new HeaderNode(parent, name);
-
- if (attributes.hasAttribute(QLatin1String("location")))
- name = attributes.value(QLatin1String("location")).toString();
-
- if (!indexUrl.isEmpty())
- location = Location(indexUrl + QLatin1Char('/') + name);
- else if (!indexUrl.isNull())
- location = Location(name);
- } else if (elementName == QLatin1String("qmlclass")) {
- auto *qmlTypeNode = new QmlTypeNode(parent, name);
- qmlTypeNode->setTitle(attributes.value(QLatin1String("title")).toString());
- QString logicalModuleName = attributes.value(QLatin1String("qml-module-name")).toString();
- if (!logicalModuleName.isEmpty())
- qdb_->addToQmlModule(logicalModuleName, qmlTypeNode);
- bool abstract = false;
- if (attributes.value(QLatin1String("abstract")) == QLatin1String("true"))
- abstract = true;
- qmlTypeNode->setAbstract(abstract);
- QString qmlFullBaseName = attributes.value(QLatin1String("qml-base-type")).toString();
- if (!qmlFullBaseName.isEmpty()) {
- qmlTypeNode->setQmlBaseName(qmlFullBaseName);
- }
- if (attributes.hasAttribute(QLatin1String("location")))
- name = attributes.value("location").toString();
- if (!indexUrl.isEmpty())
- location = Location(indexUrl + QLatin1Char('/') + name);
- else if (!indexUrl.isNull())
- location = Location(name);
- node = qmlTypeNode;
- } else if (elementName == QLatin1String("jstype")) {
- auto *qmlTypeNode = new QmlTypeNode(parent, name);
- qmlTypeNode->setGenus(Node::JS);
- qmlTypeNode->setTitle(attributes.value(QLatin1String("title")).toString());
- QString logicalModuleName = attributes.value(QLatin1String("js-module-name")).toString();
- if (!logicalModuleName.isEmpty())
- qdb_->addToQmlModule(logicalModuleName, qmlTypeNode);
- bool abstract = false;
- if (attributes.value(QLatin1String("abstract")) == QLatin1String("true"))
- abstract = true;
- qmlTypeNode->setAbstract(abstract);
- QString qmlFullBaseName = attributes.value(QLatin1String("js-base-type")).toString();
- if (!qmlFullBaseName.isEmpty()) {
- qmlTypeNode->setQmlBaseName(qmlFullBaseName);
- }
- if (attributes.hasAttribute(QLatin1String("location")))
- name = attributes.value("location").toString();
- if (!indexUrl.isEmpty())
- location = Location(indexUrl + QLatin1Char('/') + name);
- else if (!indexUrl.isNull())
- location = Location(name);
- node = qmlTypeNode;
- } else if (elementName == QLatin1String("qmlbasictype")) {
- auto *qbtn = new QmlBasicTypeNode(parent, name);
- qbtn->setTitle(attributes.value(QLatin1String("title")).toString());
- if (attributes.hasAttribute(QLatin1String("location")))
- name = attributes.value("location").toString();
- if (!indexUrl.isEmpty())
- location = Location(indexUrl + QLatin1Char('/') + name);
- else if (!indexUrl.isNull())
- location = Location(name);
- node = qbtn;
- } else if (elementName == QLatin1String("jsbasictype")) {
- auto *qbtn = new QmlBasicTypeNode(parent, name);
- qbtn->setGenus(Node::JS);
- qbtn->setTitle(attributes.value(QLatin1String("title")).toString());
- if (attributes.hasAttribute(QLatin1String("location")))
- name = attributes.value("location").toString();
- if (!indexUrl.isEmpty())
- location = Location(indexUrl + QLatin1Char('/') + name);
- else if (!indexUrl.isNull())
- location = Location(name);
- node = qbtn;
- } else if (elementName == QLatin1String("qmlproperty")) {
- QString type = attributes.value(QLatin1String("type")).toString();
- bool attached = false;
- if (attributes.value(QLatin1String("attached")) == QLatin1String("true"))
- attached = true;
- bool readonly = false;
- if (attributes.value(QLatin1String("writable")) == QLatin1String("false"))
- readonly = true;
- auto *qmlPropertyNode = new QmlPropertyNode(parent, name, type, attached);
- qmlPropertyNode->markReadOnly(readonly);
- if (attributes.value(QLatin1String("required")) == QLatin1String("true"))
- qmlPropertyNode->setRequired();
- node = qmlPropertyNode;
- } else if (elementName == QLatin1String("jsproperty")) {
- QString type = attributes.value(QLatin1String("type")).toString();
- bool attached = false;
- if (attributes.value(QLatin1String("attached")) == QLatin1String("true"))
- attached = true;
- bool readonly = false;
- if (attributes.value(QLatin1String("writable")) == QLatin1String("false"))
- readonly = true;
- auto *qmlPropertyNode = new QmlPropertyNode(parent, name, type, attached);
- qmlPropertyNode->setGenus(Node::JS);
- qmlPropertyNode->markReadOnly(readonly);
- node = qmlPropertyNode;
- } else if (elementName == QLatin1String("group")) {
- auto *collectionNode = qdb_->addGroup(name);
- collectionNode->setTitle(attributes.value(QLatin1String("title")).toString());
- collectionNode->setSubtitle(attributes.value(QLatin1String("subtitle")).toString());
- if (attributes.value(QLatin1String("seen")) == QLatin1String("true"))
- collectionNode->markSeen();
- node = collectionNode;
- } else if (elementName == QLatin1String("module")) {
- auto *collectionNode = qdb_->addModule(name);
- collectionNode->setTitle(attributes.value(QLatin1String("title")).toString());
- collectionNode->setSubtitle(attributes.value(QLatin1String("subtitle")).toString());
- if (attributes.value(QLatin1String("seen")) == QLatin1String("true"))
- collectionNode->markSeen();
- node = collectionNode;
- } else if (elementName == QLatin1String("qmlmodule")) {
- QString t = attributes.value(QLatin1String("qml-module-name")).toString();
- auto *collectionNode = qdb_->addQmlModule(t);
- QStringList info;
- info << t << attributes.value(QLatin1String("qml-module-version")).toString();
- collectionNode->setLogicalModuleInfo(info);
- collectionNode->setTitle(attributes.value(QLatin1String("title")).toString());
- collectionNode->setSubtitle(attributes.value(QLatin1String("subtitle")).toString());
- if (attributes.value(QLatin1String("seen")) == QLatin1String("true"))
- collectionNode->markSeen();
- node = collectionNode;
- } else if (elementName == QLatin1String("jsmodule")) {
- QString t = attributes.value(QLatin1String("js-module-name")).toString();
- auto *collectionNode = qdb_->addJsModule(t);
- QStringList info;
- info << t << attributes.value(QLatin1String("js-module-version")).toString();
- collectionNode->setLogicalModuleInfo(info);
- collectionNode->setTitle(attributes.value(QLatin1String("title")).toString());
- collectionNode->setSubtitle(attributes.value(QLatin1String("subtitle")).toString());
- if (attributes.value(QLatin1String("seen")) == QLatin1String("true"))
- collectionNode->markSeen();
- node = collectionNode;
- } else if (elementName == QLatin1String("page")) {
- QDocAttr subtype = QDocAttrNone;
- Node::PageType ptype = Node::NoPageType;
- QString attr = attributes.value(QLatin1String("subtype")).toString();
- if (attr == QLatin1String("attribution")) {
- subtype = QDocAttrDocument;
- ptype = Node::AttributionPage;
- } else if (attr == QLatin1String("example")) {
- subtype = QDocAttrExample;
- ptype = Node::ExamplePage;
- } else if (attr == QLatin1String("file")) {
- subtype = QDocAttrFile;
- ptype = Node::NoPageType;
- } else if (attr == QLatin1String("image")) {
- subtype = QDocAttrImage;
- ptype = Node::NoPageType;
- } else if (attr == QLatin1String("page")) {
- subtype = QDocAttrDocument;
- ptype = Node::ArticlePage;
- } else if (attr == QLatin1String("externalpage")) {
- subtype = QDocAttrExternalPage;
- ptype = Node::ArticlePage;
- } else
- goto done;
-
- if (current->isExample()) {
- auto *exampleNode = static_cast<ExampleNode *>(current);
- if (subtype == QDocAttrFile) {
- exampleNode->appendFile(name);
- goto done;
- } else if (subtype == QDocAttrImage) {
- exampleNode->appendImage(name);
- goto done;
- }
- }
- PageNode *pageNode = nullptr;
- if (subtype == QDocAttrExample)
- pageNode = new ExampleNode(parent, name);
- else if (subtype == QDocAttrExternalPage)
- pageNode = new ExternalPageNode(parent, name);
- else
- pageNode = new PageNode(parent, name, ptype);
- pageNode->setTitle(attributes.value(QLatin1String("title")).toString());
-
- if (attributes.hasAttribute(QLatin1String("location")))
- name = attributes.value(QLatin1String("location")).toString();
-
- if (!indexUrl.isEmpty())
- location = Location(indexUrl + QLatin1Char('/') + name);
- else if (!indexUrl.isNull())
- location = Location(name);
-
- node = pageNode;
-
- } else if (elementName == QLatin1String("enum")) {
- auto *enumNode = new EnumNode(parent, name, attributes.hasAttribute("scoped"));
-
- if (!indexUrl.isEmpty())
- location = Location(indexUrl + QLatin1Char('/') + parent->name().toLower() + ".html");
- else if (!indexUrl.isNull())
- location = Location(parent->name().toLower() + ".html");
-
- while (reader.readNextStartElement()) {
- QXmlStreamAttributes childAttributes = reader.attributes();
- if (reader.name() == QLatin1String("value")) {
-
- EnumItem item(childAttributes.value(QLatin1String("name")).toString(),
- childAttributes.value(QLatin1String("value")).toString());
- enumNode->addItem(item);
- } else if (reader.name() == QLatin1String("keyword")) {
- insertTarget(TargetRec::Keyword, childAttributes, enumNode);
- } else if (reader.name() == QLatin1String("target")) {
- insertTarget(TargetRec::Target, childAttributes, enumNode);
- }
- reader.skipCurrentElement();
- }
-
- node = enumNode;
-
- hasReadChildren = true;
- } else if (elementName == QLatin1String("typedef")) {
- node = new TypedefNode(parent, name);
-
- if (!indexUrl.isEmpty())
- location = Location(indexUrl + QLatin1Char('/') + parent->name().toLower() + ".html");
- else if (!indexUrl.isNull())
- location = Location(parent->name().toLower() + ".html");
-
- } else if (elementName == QLatin1String("alias")) {
- node = new TypeAliasNode(parent, name, attributes.value(QLatin1String("aliasedtype")).toString());
- if (!indexUrl.isEmpty())
- location = Location(indexUrl + QLatin1Char('/') + parent->name().toLower() + ".html");
- else if (!indexUrl.isNull())
- location = Location(parent->name().toLower() + ".html");
-
- } else if (elementName == QLatin1String("property")) {
- PropertyNode *propNode = new PropertyNode(parent, name);
- node = propNode;
- if (attributes.value(QLatin1String("bindable")) == QLatin1String("true"))
- propNode->setPropertyType(PropertyNode::Bindable);
-
- if (!indexUrl.isEmpty())
- location = Location(indexUrl + QLatin1Char('/') + parent->name().toLower() + ".html");
- else if (!indexUrl.isNull())
- location = Location(parent->name().toLower() + ".html");
-
- } else if (elementName == QLatin1String("function")) {
- QString t = attributes.value(QLatin1String("meta")).toString();
- bool attached = false;
- FunctionNode::Metaness metaness = FunctionNode::Plain;
- if (!t.isEmpty())
- metaness = FunctionNode::getMetaness(t);
- if (attributes.value(QLatin1String("attached")) == QLatin1String("true"))
- attached = true;
- auto *fn = new FunctionNode(metaness, parent, name, attached);
- if (fn->isCppNode()) {
- fn->setReturnType(attributes.value(QLatin1String("type")).toString());
- fn->setVirtualness(attributes.value(QLatin1String("virtual")).toString());
- fn->setConst(attributes.value(QLatin1String("const")) == QLatin1String("true"));
- fn->setStatic(attributes.value(QLatin1String("static")) == QLatin1String("true"));
- fn->setFinal(attributes.value(QLatin1String("final")) == QLatin1String("true"));
- fn->setOverride(attributes.value(QLatin1String("override")) == QLatin1String("true"));
- int refness = attributes.value(QLatin1String("refness")).toUInt();
- if (refness == 1)
- fn->setRef(true);
- else if (refness == 2)
- fn->setRefRef(true);
- /*
- Theoretically, this should ensure that each function
- node receives the same overload number and overload
- flag it was written with, and it should be unnecessary
- to call normalizeOverloads() for index nodes.
- */
- if (attributes.value(QLatin1String("overload")) == QLatin1String("true"))
- fn->setOverloadNumber(attributes.value(QLatin1String("overload-number")).toUInt());
- else
- fn->setOverloadNumber(0);
- /*
- Note: The "signature" attribute was written to the
- index file, but it is not read back in. That is ok
- because we reconstruct the parameter list and the
- return type, from which the signature was built in
- the first place and from which it can be rebuilt.
- */
- while (reader.readNextStartElement()) {
- QXmlStreamAttributes childAttributes = reader.attributes();
- if (reader.name() == QLatin1String("parameter")) {
- // Do not use the default value for the parameter; it is not
- // required, and has been known to cause problems.
- QString type = childAttributes.value(QLatin1String("type")).toString();
- QString name = childAttributes.value(QLatin1String("name")).toString();
- fn->parameters().append(type, name);
- } else if (reader.name() == QLatin1String("keyword")) {
- insertTarget(TargetRec::Keyword, childAttributes, fn);
- } else if (reader.name() == QLatin1String("target")) {
- insertTarget(TargetRec::Target, childAttributes, fn);
- }
- reader.skipCurrentElement();
- }
- }
-
- node = fn;
- if (!indexUrl.isEmpty())
- location = Location(indexUrl + QLatin1Char('/') + parent->name().toLower() + ".html");
- else if (!indexUrl.isNull())
- location = Location(parent->name().toLower() + ".html");
-
- hasReadChildren = true;
- } else if (elementName == QLatin1String("variable")) {
- node = new VariableNode(parent, name);
- if (!indexUrl.isEmpty())
- location = Location(indexUrl + QLatin1Char('/') + parent->name().toLower() + ".html");
- else if (!indexUrl.isNull())
- location = Location(parent->name().toLower() + ".html");
- } else if (elementName == QLatin1String("keyword")) {
- insertTarget(TargetRec::Keyword, attributes, current);
- goto done;
- } else if (elementName == QLatin1String("target")) {
- insertTarget(TargetRec::Target, attributes, current);
- goto done;
- } else if (elementName == QLatin1String("contents")) {
- insertTarget(TargetRec::Contents, attributes, current);
- goto done;
- } else if (elementName == QLatin1String("proxy")) {
- node = new ProxyNode(parent, name);
- if (!indexUrl.isEmpty())
- location = Location(indexUrl + QLatin1Char('/') + name.toLower() + ".html");
- else if (!indexUrl.isNull())
- location = Location(name.toLower() + ".html");
- } else {
- goto done;
- }
-
- {
- const QString access = attributes.value(QLatin1String("access")).toString();
- if (access == "protected")
- node->setAccess(Access::Protected);
- else if ((access == "private") || (access == "internal"))
- node->setAccess(Access::Private);
- else
- node->setAccess(Access::Public);
- if (attributes.hasAttribute(QLatin1String("related")))
- node->setRelatedNonmember(attributes.value(QLatin1String("related"))
- == QLatin1String("true"));
-
- if (attributes.hasAttribute(QLatin1String("threadsafety"))) {
- QString threadSafety = attributes.value(QLatin1String("threadsafety")).toString();
- if (threadSafety == QLatin1String("non-reentrant"))
- node->setThreadSafeness(Node::NonReentrant);
- else if (threadSafety == QLatin1String("reentrant"))
- node->setThreadSafeness(Node::Reentrant);
- else if (threadSafety == QLatin1String("thread safe"))
- node->setThreadSafeness(Node::ThreadSafe);
- else
- node->setThreadSafeness(Node::UnspecifiedSafeness);
- } else
- node->setThreadSafeness(Node::UnspecifiedSafeness);
-
- QString status = attributes.value(QLatin1String("status")).toString();
- if (status == QLatin1String("obsolete") || status == QLatin1String("deprecated"))
- node->setStatus(Node::Obsolete);
- else if (status == QLatin1String("preliminary"))
- node->setStatus(Node::Preliminary);
- else if (status == QLatin1String("internal"))
- node->setStatus(Node::Internal);
- else if (status == QLatin1String("ignored"))
- node->setStatus(Node::DontDocument);
- else
- node->setStatus(Node::Active);
-
- QString physicalModuleName = attributes.value(QLatin1String("module")).toString();
- if (!physicalModuleName.isEmpty())
- qdb_->addToModule(physicalModuleName, node);
- if (!href.isEmpty()) {
- node->setUrl(href);
- // Include the index URL if it exists
- if (!node->isExternalPage() && !indexUrl.isEmpty())
- node->setUrl(indexUrl + QLatin1Char('/') + href);
- }
-
- QString since = attributes.value(QLatin1String("since")).toString();
- if (!since.isEmpty()) {
- node->setSince(since);
- }
-
- if (attributes.hasAttribute(QLatin1String("documented"))) {
- if (attributes.value(QLatin1String("documented")) == QLatin1String("true"))
- node->setHadDoc();
- }
-
- QString groupsAttr = attributes.value(QLatin1String("groups")).toString();
- if (!groupsAttr.isEmpty()) {
- const QStringList groupNames = groupsAttr.split(QLatin1Char(','));
- for (const auto &name : groupNames) {
- qdb_->addToGroup(name, node);
- }
- }
-
- // Create some content for the node.
- QSet<QString> emptySet;
- Location t(filePath);
- if (!filePath.isEmpty()) {
- t.setLineNo(lineNo);
- node->setLocation(t);
- location = t;
- }
- Doc doc(location, location, QString(), emptySet, emptySet); // placeholder
- node->setDoc(doc);
- node->setIndexNodeFlag(); // Important: This node came from an index file.
- node->setOutputSubdirectory(project_.toLower());
- QString briefAttr = attributes.value(QLatin1String("brief")).toString();
- if (!briefAttr.isEmpty()) {
- node->setReconstitutedBrief(briefAttr);
- }
-
- if (!hasReadChildren) {
- bool useParent = (elementName == QLatin1String("namespace") && name.isEmpty());
- while (reader.readNextStartElement()) {
- if (useParent)
- readIndexSection(reader, parent, indexUrl);
- else
- readIndexSection(reader, node, indexUrl);
- }
- }
- }
-
-done:
- while (!reader.isEndElement()) {
- if (reader.readNext() == QXmlStreamReader::Invalid) {
- break;
- }
- }
-}
-
-void QDocIndexFiles::insertTarget(TargetRec::TargetType type,
- const QXmlStreamAttributes &attributes, Node *node)
-{
- int priority;
- switch (type) {
- case TargetRec::Keyword:
- priority = 1;
- break;
- case TargetRec::Target:
- priority = 2;
- break;
- case TargetRec::Contents:
- priority = 3;
- break;
- default:
- return;
- }
-
- QString name = attributes.value(QLatin1String("name")).toString();
- QString title = attributes.value(QLatin1String("title")).toString();
- qdb_->insertTarget(name, title, type, node, priority);
-}
-
-/*!
- This function tries to resolve class inheritance immediately
- after the index file is read. It is not always possible to
- resolve a class inheritance at this point, because the base
- class might be in an index file that hasn't been read yet, or
- it might be in one of the header files that will be read for
- the current module. These cases will be resolved after all
- the index files and header and source files have been read,
- just prior to beginning the generate phase for the current
- module.
-
- I don't think this is completely correct because it always
- sets the access to public.
- */
-void QDocIndexFiles::resolveIndex()
-{
- QPair<ClassNode *, QString> pair;
- for (const auto &pair : qAsConst(basesList_)) {
- const QStringList bases = pair.second.split(QLatin1Char(','));
- for (const auto &base : bases) {
- QStringList basePath = base.split(QString("::"));
- Node *n = qdb_->findClassNode(basePath);
- if (n)
- pair.first->addResolvedBaseClass(Access::Public, static_cast<ClassNode *>(n));
- else
- pair.first->addUnresolvedBaseClass(Access::Public, basePath, QString());
- }
- }
- // No longer needed.
- basesList_.clear();
-}
-
-static const QString getAccessString(Access t)
-{
-
- switch (t) {
- case Access::Public:
- return QLatin1String("public");
- case Access::Protected:
- return QLatin1String("protected");
- case Access::Private:
- return QLatin1String("private");
- default:
- break;
- }
- return QLatin1String("public");
-}
-
-static const QString getStatusString(Node::Status t)
-{
- switch (t) {
- case Node::Obsolete:
- case Node::Deprecated:
- return QLatin1String("obsolete");
- case Node::Preliminary:
- return QLatin1String("preliminary");
- case Node::Active:
- return QLatin1String("active");
- case Node::Internal:
- return QLatin1String("internal");
- case Node::DontDocument:
- return QLatin1String("ignored");
- default:
- break;
- }
- return QLatin1String("active");
-}
-
-static const QString getThreadSafenessString(Node::ThreadSafeness t)
-{
- switch (t) {
- case Node::NonReentrant:
- return QLatin1String("non-reentrant");
- case Node::Reentrant:
- return QLatin1String("reentrant");
- case Node::ThreadSafe:
- return QLatin1String("thread safe");
- case Node::UnspecifiedSafeness:
- default:
- break;
- }
- return QLatin1String("unspecified");
-}
-
-/*!
- 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.
-
- \note Function nodes are processed in generateFunctionSection()
- */
-bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node,
- IndexSectionWriter *post)
-{
- if (gen_ == nullptr)
- gen_ = Generator::currentGenerator();
-
- Q_ASSERT(gen_);
-
- post_ = nullptr;
- /*
- Don't include index nodes in a new index file.
- */
- if (node->isIndexNode())
- return false;
-
- QString nodeName;
- QString logicalModuleName;
- QString logicalModuleVersion;
- QString qmlFullBaseName;
- QString baseNameAttr;
- QString moduleNameAttr;
- QString moduleVerAttr;
-
- switch (node->nodeType()) {
- case Node::Namespace:
- nodeName = "namespace";
- break;
- case Node::Class:
- nodeName = "class";
- break;
- case Node::Struct:
- nodeName = "struct";
- break;
- case Node::Union:
- nodeName = "union";
- break;
- case Node::HeaderFile:
- nodeName = "header";
- break;
- case Node::QmlType:
- nodeName = "qmlclass";
- if (node->logicalModule() != nullptr)
- logicalModuleName = node->logicalModule()->logicalModuleName();
- baseNameAttr = "qml-base-type";
- moduleNameAttr = "qml-module-name";
- moduleVerAttr = "qml-module-version";
- qmlFullBaseName = node->qmlFullBaseName();
- break;
- case Node::JsType:
- nodeName = "jstype";
- baseNameAttr = "js-base-type";
- moduleNameAttr = "js-module-name";
- moduleVerAttr = "js-module-version";
- if (node->logicalModule() != nullptr)
- logicalModuleName = node->logicalModule()->logicalModuleName();
- qmlFullBaseName = node->qmlFullBaseName();
- break;
- case Node::QmlBasicType:
- nodeName = "qmlbasictype";
- break;
- case Node::JsBasicType:
- nodeName = "jsbasictype";
- break;
- case Node::Page:
- case Node::Example:
- case Node::ExternalPage:
- nodeName = "page";
- break;
- case Node::Group:
- nodeName = "group";
- break;
- case Node::Module:
- nodeName = "module";
- break;
- case Node::QmlModule:
- nodeName = "qmlmodule";
- moduleNameAttr = "qml-module-name";
- moduleVerAttr = "qml-module-version";
- logicalModuleName = node->logicalModuleName();
- logicalModuleVersion = node->logicalModuleVersion();
- break;
- case Node::JsModule:
- nodeName = "jsmodule";
- moduleNameAttr = "js-module-name";
- moduleVerAttr = "js-module-version";
- logicalModuleName = node->logicalModuleName();
- logicalModuleVersion = node->logicalModuleVersion();
- break;
- case Node::Enum:
- nodeName = "enum";
- break;
- case Node::Typedef:
- nodeName = "typedef";
- break;
- case Node::TypeAlias:
- nodeName = "alias";
- break;
- case Node::Property:
- nodeName = "property";
- break;
- case Node::Variable:
- nodeName = "variable";
- break;
- case Node::QmlProperty:
- nodeName = "qmlproperty";
- break;
- case Node::JsProperty:
- nodeName = "jsProperty";
- break;
- case Node::Proxy:
- nodeName = "proxy";
- break;
- case Node::Function: // Now processed in generateFunctionSection()
- default:
- return false;
- }
-
- QString objName = node->name();
- // Special case: only the root node should have an empty name.
- if (objName.isEmpty() && node != qdb_->primaryTreeRoot())
- return false;
-
- writer.writeStartElement(nodeName);
-
- if (!node->isTextPageNode() && !node->isCollectionNode() && !node->isHeader()) {
- if (node->threadSafeness() != Node::UnspecifiedSafeness)
- writer.writeAttribute("threadsafety", getThreadSafenessString(node->threadSafeness()));
- }
-
- writer.writeAttribute("name", objName);
-
- // Write module and base type info for QML/JS types
- if (!moduleNameAttr.isEmpty()) {
- if (!logicalModuleName.isEmpty())
- writer.writeAttribute(moduleNameAttr, logicalModuleName);
- else
- writer.writeAttribute(moduleNameAttr, node->name());
- if (!logicalModuleVersion.isEmpty())
- writer.writeAttribute(moduleVerAttr, logicalModuleVersion);
- }
- if (!baseNameAttr.isEmpty() && !qmlFullBaseName.isEmpty())
- writer.writeAttribute(baseNameAttr, qmlFullBaseName);
-
- QString href;
- if (!node->isExternalPage()) {
- QString fullName = node->fullDocumentName();
- if (fullName != objName)
- writer.writeAttribute("fullname", fullName);
- href = gen_->fullDocumentLocation(node);
- } else
- href = node->name();
- if (node->isQmlNode() || node->isJsNode()) {
- Aggregate *p = node->parent();
- if (p && (p->isQmlType() || p->isJsType()) && p->isAbstract())
- href.clear();
- }
- if (!href.isEmpty())
- writer.writeAttribute("href", href);
-
- writer.writeAttribute("status", getStatusString(node->status()));
- if (!node->isTextPageNode() && !node->isCollectionNode() && !node->isHeader()) {
- writer.writeAttribute("access", getAccessString(node->access()));
- if (node->isAbstract())
- writer.writeAttribute("abstract", "true");
- }
- const Location &declLocation = node->declLocation();
- if (!declLocation.fileName().isEmpty())
- writer.writeAttribute("location", declLocation.fileName());
- if (storeLocationInfo_ && !declLocation.filePath().isEmpty()) {
- writer.writeAttribute("filepath", declLocation.filePath());
- writer.writeAttribute("lineno", QString("%1").arg(declLocation.lineNo()));
- }
-
- if (node->isRelatedNonmember())
- writer.writeAttribute("related", "true");
-
- if (!node->since().isEmpty())
- writer.writeAttribute("since", node->since());
-
- if (node->hasDoc())
- writer.writeAttribute("documented", "true");
-
- QString brief = node->doc().trimmedBriefText(node->name()).toString();
- switch (node->nodeType()) {
- case Node::Class:
- case Node::Struct:
- case Node::Union: {
- // Classes contain information about their base classes.
- const auto *classNode = static_cast<const ClassNode *>(node);
- const QList<RelatedClass> &bases = classNode->baseClasses();
- QSet<QString> baseStrings;
- for (const auto &related : bases) {
- ClassNode *n = related.m_node;
- if (n)
- baseStrings.insert(n->fullName());
- else if (!related.m_path.isEmpty())
- baseStrings.insert(related.m_path.join(QLatin1String("::")));
- }
- if (!baseStrings.isEmpty()) {
- QStringList baseStringsAsList = baseStrings.values();
- baseStringsAsList.sort();
- writer.writeAttribute("bases", baseStringsAsList.join(QLatin1Char(',')));
- }
- if (!node->physicalModuleName().isEmpty())
- writer.writeAttribute("module", node->physicalModuleName());
- if (!classNode->groupNames().isEmpty())
- writer.writeAttribute("groups", classNode->groupNames().join(QLatin1Char(',')));
- if (!brief.isEmpty())
- writer.writeAttribute("brief", brief);
- } break;
- case Node::HeaderFile: {
- const auto *headerNode = static_cast<const HeaderNode *>(node);
- if (!headerNode->physicalModuleName().isEmpty())
- writer.writeAttribute("module", headerNode->physicalModuleName());
- if (!headerNode->groupNames().isEmpty())
- writer.writeAttribute("groups", headerNode->groupNames().join(QLatin1Char(',')));
- if (!brief.isEmpty())
- writer.writeAttribute("brief", brief);
- writer.writeAttribute("title", headerNode->title());
- writer.writeAttribute("fulltitle", headerNode->fullTitle());
- writer.writeAttribute("subtitle", headerNode->subtitle());
- } break;
- case Node::Namespace: {
- const auto *namespaceNode = static_cast<const NamespaceNode *>(node);
- if (!namespaceNode->physicalModuleName().isEmpty())
- writer.writeAttribute("module", namespaceNode->physicalModuleName());
- if (!namespaceNode->groupNames().isEmpty())
- writer.writeAttribute("groups", namespaceNode->groupNames().join(QLatin1Char(',')));
- if (!brief.isEmpty())
- writer.writeAttribute("brief", brief);
- } break;
- case Node::JsType:
- case Node::QmlType: {
- const auto *qmlTypeNode = static_cast<const QmlTypeNode *>(node);
- writer.writeAttribute("title", qmlTypeNode->title());
- writer.writeAttribute("fulltitle", qmlTypeNode->fullTitle());
- writer.writeAttribute("subtitle", qmlTypeNode->subtitle());
- if (!qmlTypeNode->groupNames().isEmpty())
- writer.writeAttribute("groups", qmlTypeNode->groupNames().join(QLatin1Char(',')));
- if (!brief.isEmpty())
- writer.writeAttribute("brief", brief);
- } break;
- case Node::Page:
- case Node::Example:
- case Node::ExternalPage: {
- /*
- Page nodes (anything that generates a doc page)
- no longer have a subtype. Some of the subtypes
- (Example, External, and Header) have been promoted
- to be node types. They have become subclasses of
- PageNode or, in the case of Header, a subclass of
- Aggregate. The processing for other subtypes that
- have not (yet) been promoted to be node types is
- determined by the PageType enum.
- */
- bool writeModuleName = false;
- if (node->isExample()) {
- writer.writeAttribute("subtype", "example");
- writeModuleName = true;
- } else if (node->isExternalPage()) {
- writer.writeAttribute("subtype", "externalpage");
- } else {
- if (node->pageType() == Node::AttributionPage)
- writer.writeAttribute("subtype", "attribution");
- else
- writer.writeAttribute("subtype", "page");
- writeModuleName = true;
- }
- const auto *pageNode = static_cast<const PageNode *>(node);
- writer.writeAttribute("title", pageNode->title());
- writer.writeAttribute("fulltitle", pageNode->fullTitle());
- writer.writeAttribute("subtitle", pageNode->subtitle());
- if (!node->physicalModuleName().isEmpty() && writeModuleName)
- writer.writeAttribute("module", node->physicalModuleName());
- if (!pageNode->groupNames().isEmpty())
- writer.writeAttribute("groups", pageNode->groupNames().join(QLatin1Char(',')));
- if (!brief.isEmpty())
- writer.writeAttribute("brief", brief);
- } break;
- case Node::Group: {
- const auto *collectionNode = static_cast<const CollectionNode *>(node);
- writer.writeAttribute("seen", collectionNode->wasSeen() ? "true" : "false");
- writer.writeAttribute("title", collectionNode->title());
- if (!collectionNode->subtitle().isEmpty())
- writer.writeAttribute("subtitle", collectionNode->subtitle());
- if (!collectionNode->physicalModuleName().isEmpty())
- writer.writeAttribute("module", collectionNode->physicalModuleName());
- if (!collectionNode->groupNames().isEmpty())
- writer.writeAttribute("groups", collectionNode->groupNames().join(QLatin1Char(',')));
- /*
- This is not read back in, so it probably
- shouldn't be written out in the first place.
- */
- if (!collectionNode->members().isEmpty()) {
- QStringList names;
- const auto &members = collectionNode->members();
- for (const Node *member : members)
- names.append(member->name());
- writer.writeAttribute("members", names.join(QLatin1Char(',')));
- }
- if (!brief.isEmpty())
- writer.writeAttribute("brief", brief);
- } break;
- case Node::Module: {
- const auto *collectionNode = static_cast<const CollectionNode *>(node);
- writer.writeAttribute("seen", collectionNode->wasSeen() ? "true" : "false");
- writer.writeAttribute("title", collectionNode->title());
- if (!collectionNode->subtitle().isEmpty())
- writer.writeAttribute("subtitle", collectionNode->subtitle());
- if (!collectionNode->physicalModuleName().isEmpty())
- writer.writeAttribute("module", collectionNode->physicalModuleName());
- if (!collectionNode->groupNames().isEmpty())
- writer.writeAttribute("groups", collectionNode->groupNames().join(QLatin1Char(',')));
- /*
- This is not read back in, so it probably
- shouldn't be written out in the first place.
- */
- if (!collectionNode->members().isEmpty()) {
- QStringList names;
- const auto &members = collectionNode->members();
- for (const Node *member : members)
- names.append(member->name());
- writer.writeAttribute("members", names.join(QLatin1Char(',')));
- }
- if (!brief.isEmpty())
- writer.writeAttribute("brief", brief);
- } break;
- case Node::JsModule:
- case Node::QmlModule: {
- const auto *collectionNode = static_cast<const CollectionNode *>(node);
- writer.writeAttribute("seen", collectionNode->wasSeen() ? "true" : "false");
- writer.writeAttribute("title", collectionNode->title());
- if (!collectionNode->subtitle().isEmpty())
- writer.writeAttribute("subtitle", collectionNode->subtitle());
- if (!collectionNode->physicalModuleName().isEmpty())
- writer.writeAttribute("module", collectionNode->physicalModuleName());
- if (!collectionNode->groupNames().isEmpty())
- writer.writeAttribute("groups", collectionNode->groupNames().join(QLatin1Char(',')));
- /*
- This is not read back in, so it probably
- shouldn't be written out in the first place.
- */
- if (!collectionNode->members().isEmpty()) {
- QStringList names;
- const auto &members = collectionNode->members();
- for (const Node *member : members)
- names.append(member->name());
- writer.writeAttribute("members", names.join(QLatin1Char(',')));
- }
- if (!brief.isEmpty())
- writer.writeAttribute("brief", brief);
- } break;
- case Node::JsProperty:
- case Node::QmlProperty: {
- auto *qmlPropertyNode = static_cast<QmlPropertyNode *>(node);
- writer.writeAttribute("type", qmlPropertyNode->dataType());
- writer.writeAttribute("attached", qmlPropertyNode->isAttached() ? "true" : "false");
- writer.writeAttribute("writable", qmlPropertyNode->isWritable() ? "true" : "false");
- if (qmlPropertyNode->isRequired())
- writer.writeAttribute("required", "true");
- if (!brief.isEmpty())
- writer.writeAttribute("brief", brief);
- } break;
- case Node::Property: {
- const auto *propertyNode = static_cast<const PropertyNode *>(node);
-
- if (propertyNode->propertyType() == PropertyNode::Bindable)
- writer.writeAttribute("bindable", "true");
-
- if (!brief.isEmpty())
- writer.writeAttribute("brief", brief);
- const auto &getters = propertyNode->getters();
- for (const auto *fnNode : getters) {
- if (fnNode) {
- const auto *functionNode = static_cast<const FunctionNode *>(fnNode);
- writer.writeStartElement("getter");
- writer.writeAttribute("name", functionNode->name());
- writer.writeEndElement(); // getter
- }
- }
- const auto &setters = propertyNode->setters();
- for (const auto *fnNode : setters) {
- if (fnNode) {
- const auto *functionNode = static_cast<const FunctionNode *>(fnNode);
- writer.writeStartElement("setter");
- writer.writeAttribute("name", functionNode->name());
- writer.writeEndElement(); // setter
- }
- }
- const auto &resetters = propertyNode->resetters();
- for (const auto *fnNode : resetters) {
- if (fnNode) {
- const auto *functionNode = static_cast<const FunctionNode *>(fnNode);
- writer.writeStartElement("resetter");
- writer.writeAttribute("name", functionNode->name());
- writer.writeEndElement(); // resetter
- }
- }
- const auto &notifiers = propertyNode->notifiers();
- for (const auto *fnNode : notifiers) {
- if (fnNode) {
- const auto *functionNode = static_cast<const FunctionNode *>(fnNode);
- writer.writeStartElement("notifier");
- writer.writeAttribute("name", functionNode->name());
- writer.writeEndElement(); // notifier
- }
- }
- } break;
- case Node::Variable: {
- const auto *variableNode = static_cast<const VariableNode *>(node);
- writer.writeAttribute("type", variableNode->dataType());
- writer.writeAttribute("static", variableNode->isStatic() ? "true" : "false");
- if (!brief.isEmpty())
- writer.writeAttribute("brief", brief);
- } break;
- case Node::Enum: {
- const auto *enumNode = static_cast<const EnumNode *>(node);
- if (enumNode->isScoped())
- writer.writeAttribute("scoped", "true");
- if (enumNode->flagsType())
- writer.writeAttribute("typedef", enumNode->flagsType()->fullDocumentName());
- const auto &items = enumNode->items();
- for (const auto &item : items) {
- writer.writeStartElement("value");
- writer.writeAttribute("name", item.name());
- writer.writeAttribute("value", item.value());
- writer.writeEndElement(); // value
- }
- } break;
- case Node::Typedef: {
- const auto *typedefNode = static_cast<const TypedefNode *>(node);
- if (typedefNode->associatedEnum())
- writer.writeAttribute("enum", typedefNode->associatedEnum()->fullDocumentName());
- } break;
- case Node::TypeAlias:
- writer.writeAttribute("aliasedtype", static_cast<const TypeAliasNode *>(node)->aliasedType());
- break;
- case Node::Function: // Now processed in generateFunctionSection()
- default:
- 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 = Doc::canonicalTitle(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 = Doc::canonicalTitle(title);
- writer.writeStartElement("keyword");
- writer.writeAttribute("name", name);
- if (name != title)
- writer.writeAttribute("title", title);
- writer.writeEndElement(); // keyword
- }
- }
-
- /*
- Some nodes have a table of contents. For these, we close
- the opening tag, create sub-elements for the items in the
- table of contents, and then add a closing tag for the
- element. Elements for all other nodes are closed in the
- opening tag.
- */
- if (node->isPageNode() || node->isCollectionNode()) {
- if (node->doc().hasTableOfContents()) {
- for (int i = 0; i < node->doc().tableOfContents().size(); ++i) {
- Atom *item = node->doc().tableOfContents()[i];
- int level = node->doc().tableOfContentsLevels()[i];
- QString title = Text::sectionHeading(item).toString();
- writer.writeStartElement("contents");
- writer.writeAttribute("name", Doc::canonicalTitle(title));
- writer.writeAttribute("title", title);
- writer.writeAttribute("level", QString::number(level));
- writer.writeEndElement(); // contents
- }
- }
- }
- // WebXMLGenerator - skip the nested <page> elements for example
- // files/images, as the generator produces them separately
- if (node->isExample() && gen_->format() != QLatin1String("WebXML")) {
- const auto *exampleNode = static_cast<const ExampleNode *>(node);
- const auto &files = exampleNode->files();
- for (const QString &file : files) {
- writer.writeStartElement("page");
- writer.writeAttribute("name", file);
- QString href = gen_->linkForExampleFile(file, exampleNode);
- writer.writeAttribute("href", href);
- writer.writeAttribute("status", "active");
- writer.writeAttribute("subtype", "file");
- writer.writeAttribute("title", "");
- writer.writeAttribute("fulltitle", Generator::exampleFileTitle(exampleNode, file));
- writer.writeAttribute("subtitle", file);
- writer.writeEndElement(); // page
- }
- const auto &images = exampleNode->images();
- for (const QString &file : images) {
- writer.writeStartElement("page");
- writer.writeAttribute("name", file);
- QString href = gen_->linkForExampleFile(file, exampleNode);
- writer.writeAttribute("href", href);
- writer.writeAttribute("status", "active");
- writer.writeAttribute("subtype", "image");
- writer.writeAttribute("title", "");
- writer.writeAttribute("fulltitle", Generator::exampleFileTitle(exampleNode, file));
- writer.writeAttribute("subtitle", file);
- writer.writeEndElement(); // page
- }
- }
- // Append to the section if the callback object was set
- if (post)
- post->append(writer, node);
-
- post_ = post;
- return true;
-}
-
-/*!
- This function writes a <function> element for \a fn to the
- index file using \a writer.
- */
-void QDocIndexFiles::generateFunctionSection(QXmlStreamWriter &writer, FunctionNode *fn)
-{
- QString objName = fn->name();
- writer.writeStartElement("function");
- writer.writeAttribute("name", objName);
-
- QString fullName = fn->fullDocumentName();
- if (fullName != objName)
- writer.writeAttribute("fullname", fullName);
- QString href = gen_->fullDocumentLocation(fn);
- if (!href.isEmpty())
- writer.writeAttribute("href", href);
- if (fn->threadSafeness() != Node::UnspecifiedSafeness)
- writer.writeAttribute("threadsafety", getThreadSafenessString(fn->threadSafeness()));
- writer.writeAttribute("status", getStatusString(fn->status()));
- writer.writeAttribute("access", getAccessString(fn->access()));
-
- const Location &declLocation = fn->declLocation();
- if (!declLocation.fileName().isEmpty())
- writer.writeAttribute("location", declLocation.fileName());
- if (storeLocationInfo_ && !declLocation.filePath().isEmpty()) {
- writer.writeAttribute("filepath", declLocation.filePath());
- writer.writeAttribute("lineno", QString("%1").arg(declLocation.lineNo()));
- }
-
- if (fn->hasDoc())
- writer.writeAttribute("documented", "true");
- if (fn->isRelatedNonmember())
- writer.writeAttribute("related", "true");
- if (!fn->since().isEmpty())
- writer.writeAttribute("since", fn->since());
-
- QString brief = fn->doc().trimmedBriefText(fn->name()).toString();
- writer.writeAttribute("meta", fn->metanessString());
- if (fn->isCppNode()) {
- writer.writeAttribute("virtual", fn->virtualness());
- writer.writeAttribute("const", fn->isConst() ? "true" : "false");
- writer.writeAttribute("static", fn->isStatic() ? "true" : "false");
- writer.writeAttribute("final", fn->isFinal() ? "true" : "false");
- writer.writeAttribute("override", fn->isOverride() ? "true" : "false");
- /*
- This ensures that for functions that have overloads,
- the first function written is the one that is not an
- overload, and the overloads follow it immediately in
- the index file numbered from 1 to n.
- */
- if (fn->isOverload() && (fn->overloadNumber() > 0)) {
- writer.writeAttribute("overload", "true");
- writer.writeAttribute("overload-number", QString::number(fn->overloadNumber()));
- }
- if (fn->isRef())
- writer.writeAttribute("refness", QString::number(1));
- else if (fn->isRefRef())
- writer.writeAttribute("refness", QString::number(2));
- if (fn->hasAssociatedProperties()) {
- QStringList associatedProperties;
- for (const auto *node : fn->associatedProperties()) {
- associatedProperties << node->name();
- }
- associatedProperties.sort();
- writer.writeAttribute("associated-property",
- associatedProperties.join(QLatin1Char(',')));
- }
- writer.writeAttribute("type", fn->returnType());
- if (!brief.isEmpty())
- writer.writeAttribute("brief", brief);
- /*
- Note: The "signature" attribute is written to the
- index file, but it is not read back in by qdoc. However,
- we need it for the webxml generator.
- */
- QString signature = fn->signature(false, false);
- // 'const' is already part of FunctionNode::signature()
- if (fn->isFinal())
- signature += " final";
- if (fn->isOverride())
- signature += " override";
- if (fn->isPureVirtual())
- signature += " = 0";
- writer.writeAttribute("signature", signature);
-
- for (int i = 0; i < fn->parameters().count(); ++i) {
- const Parameter &parameter = fn->parameters().at(i);
- writer.writeStartElement("parameter");
- writer.writeAttribute("type", parameter.type());
- writer.writeAttribute("name", parameter.name());
- writer.writeAttribute("default", parameter.defaultValue());
- writer.writeEndElement(); // parameter
- }
- }
-
- // Append to the section if the callback object was set
- if (post_)
- post_->append(writer, fn);
-
- writer.writeEndElement(); // function
-}
-
-/*!
- This function outputs a <function> element to the index file
- for each FunctionNode in \a aggregate using the \a writer.
- The \a aggregate has a function map that contains all the
- function nodes indexed by function name. But the map is not
- used as a multimap, so if the \a aggregate contains multiple
- functions with the same name, only one of those functions is
- in the function map index. The others are linked to that
- function using the next overload pointer.
-
- So this function generates a <function> element for a function
- followed by a function element for each of its overloads. If a
- <function> element represents an overload, it has an \c overload
- attribute set to \c true and an \c {overload-number} attribute
- set to the function's overload number. If the <function>
- element does not represent an overload, the <function> element
- has neither of these attributes.
- */
-void QDocIndexFiles::generateFunctionSections(QXmlStreamWriter &writer, Aggregate *aggregate)
-{
- FunctionMap &functionMap = aggregate->functionMap();
- if (!functionMap.isEmpty()) {
- for (auto it = functionMap.begin(); it != functionMap.end(); ++it) {
- FunctionNode *fn = it.value();
- while (fn != nullptr) {
- generateFunctionSection(writer, fn);
- fn = fn->nextOverload();
- }
- }
- }
-}
-
-/*!
- Generate index sections for the child nodes of the given \a node
- using the \a writer specified.
-*/
-void QDocIndexFiles::generateIndexSections(QXmlStreamWriter &writer, Node *node,
- IndexSectionWriter *post)
-{
- /*
- Note that groups, modules, and QML modules are written
- after all the other nodes.
- */
- if (node->isCollectionNode() || node->isGroup() || node->isModule() || node->isQmlModule()
- || node->isJsModule())
- return;
-
- if (generateIndexSection(writer, node, post)) {
- if (node->isAggregate()) {
- auto *aggregate = static_cast<Aggregate *>(node);
- // First write the function children, then write the nonfunction children.
- generateFunctionSections(writer, aggregate);
- const auto &nonFunctionList = aggregate->nonfunctionList();
- for (auto *node : nonFunctionList)
- generateIndexSections(writer, node, post);
- }
-
- if (node == root_) {
- /*
- We wait until the end of the index file to output the group, module,
- and QML module elements. By outputting them at the end, when we read
- the index file back in, all the group, module, and QML module member
- elements will have already been created. It is then only necessary to
- create the group, module, or QML module element and add each member to
- its member list.
- */
- const CNMap &groups = qdb_->groups();
- if (!groups.isEmpty()) {
- for (auto it = groups.constBegin(); it != groups.constEnd(); ++it) {
- if (generateIndexSection(writer, it.value(), post))
- writer.writeEndElement();
- }
- }
-
- const CNMap &modules = qdb_->modules();
- if (!modules.isEmpty()) {
- for (auto it = modules.constBegin(); it != modules.constEnd(); ++it) {
- if (generateIndexSection(writer, it.value(), post))
- writer.writeEndElement();
- }
- }
-
- const CNMap &qmlModules = qdb_->qmlModules();
- if (!qmlModules.isEmpty()) {
- for (auto it = qmlModules.constBegin(); it != qmlModules.constEnd(); ++it) {
- if (generateIndexSection(writer, it.value(), post))
- writer.writeEndElement();
- }
- }
-
- const CNMap &jsModules = qdb_->jsModules();
- if (!jsModules.isEmpty()) {
- for (auto it = jsModules.constBegin(); it != jsModules.constEnd(); ++it) {
- if (generateIndexSection(writer, it.value(), post))
- writer.writeEndElement();
- }
- }
- }
-
- writer.writeEndElement();
- }
-}
-
-/*!
- Writes a qdoc module index in XML to a file named \a fileName.
- \a url is the \c url attribute of the <INDEX> element.
- \a title is the \c title attribute of the <INDEX> element.
- \a g is a pointer to the current Generator in use, stored for later use.
- */
-void QDocIndexFiles::generateIndex(const QString &fileName, const QString &url,
- const QString &title, Generator *g)
-{
- QFile file(fileName);
- if (!file.open(QFile::WriteOnly | QFile::Text))
- return;
-
- qCDebug(lcQdoc) << "Writing index file:" << fileName;
-
- gen_ = g;
- QXmlStreamWriter writer(&file);
- writer.setAutoFormatting(true);
- writer.writeStartDocument();
- writer.writeDTD("<!DOCTYPE QDOCINDEX>");
-
- writer.writeStartElement("INDEX");
- writer.writeAttribute("url", url);
- writer.writeAttribute("title", title);
- writer.writeAttribute("version", qdb_->version());
- writer.writeAttribute("project", Config::instance().getString(CONFIG_PROJECT));
-
- root_ = qdb_->primaryTreeRoot();
- if (!root_->tree()->indexTitle().isEmpty())
- writer.writeAttribute("indexTitle", root_->tree()->indexTitle());
-
- generateIndexSections(writer, root_, nullptr);
-
- writer.writeEndElement(); // INDEX
- writer.writeEndElement(); // QDOCINDEX
- writer.writeEndDocument();
- file.close();
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/qdocindexfiles.h b/src/qdoc/qdocindexfiles.h
deleted file mode 100644
index fd89d95ef..000000000
--- a/src/qdoc/qdocindexfiles.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDOCINDEXFILES_H
-#define QDOCINDEXFILES_H
-
-#include "node.h"
-#include "tree.h"
-
-QT_BEGIN_NAMESPACE
-
-class Atom;
-class FunctionNode;
-class Generator;
-class QDocDatabase;
-class WebXMLGenerator;
-class QXmlStreamReader;
-class QXmlStreamWriter;
-class QXmlStreamAttributes;
-
-// A callback interface for extending index sections
-class IndexSectionWriter
-{
-public:
- virtual ~IndexSectionWriter() {}
- virtual void append(QXmlStreamWriter &writer, Node *node) = 0;
-};
-
-class QDocIndexFiles
-{
- friend class QDocDatabase;
- friend class WebXMLGenerator; // for using generateIndexSections()
-
-private:
- static QDocIndexFiles *qdocIndexFiles();
- static void destroyQDocIndexFiles();
-
- QDocIndexFiles();
- ~QDocIndexFiles();
-
- void readIndexes(const QStringList &indexFiles);
- void readIndexFile(const QString &path);
- void readIndexSection(QXmlStreamReader &reader, Node *current, const QString &indexUrl);
- void insertTarget(TargetRec::TargetType type, const QXmlStreamAttributes &attributes,
- Node *node);
- void resolveIndex();
-
- void generateIndex(const QString &fileName, const QString &url, const QString &title,
- Generator *g);
- void generateFunctionSection(QXmlStreamWriter &writer, FunctionNode *fn);
- void generateFunctionSections(QXmlStreamWriter &writer, Aggregate *aggregate);
- bool generateIndexSection(QXmlStreamWriter &writer, Node *node,
- IndexSectionWriter *post = nullptr);
- void generateIndexSections(QXmlStreamWriter &writer, Node *node,
- IndexSectionWriter *post = nullptr);
-
-private:
- static QDocIndexFiles *qdocIndexFiles_;
- QDocDatabase *qdb_;
- Generator *gen_;
- QString project_;
- QList<QPair<ClassNode *, QString>> basesList_;
- bool storeLocationInfo_;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/qdoctagfiles.cpp b/src/qdoc/qdoctagfiles.cpp
deleted file mode 100644
index aab5405c7..000000000
--- a/src/qdoc/qdoctagfiles.cpp
+++ /dev/null
@@ -1,366 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdoctagfiles.h"
-
-#include "access.h"
-#include "aggregate.h"
-#include "classnode.h"
-#include "enumnode.h"
-#include "functionnode.h"
-#include "htmlgenerator.h"
-#include "location.h"
-#include "node.h"
-#include "propertynode.h"
-#include "qdocdatabase.h"
-#include "typedefnode.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QDocTagFiles
-
- This class handles the generation of the qdoc tag file.
- */
-
-QDocTagFiles *QDocTagFiles::s_qdocTagFiles = nullptr;
-
-/*!
- Constructs the singleton. \a qdb is the pointer to the
- qdoc database that is used when reading and writing the
- index files.
- */
-QDocTagFiles::QDocTagFiles()
-{
- m_qdb = QDocDatabase::qdocDB();
-}
-
-/*!
- Destroys the singleton QDocTagFiles.
- */
-QDocTagFiles::~QDocTagFiles()
-{
- m_qdb = nullptr;
-}
-
-/*!
- Creates the singleton. Allows only one instance of the class
- to be created. Returns a pointer to the singleton.
- */
-QDocTagFiles *QDocTagFiles::qdocTagFiles()
-{
- if (s_qdocTagFiles == nullptr)
- s_qdocTagFiles = new QDocTagFiles;
- return s_qdocTagFiles;
-}
-
-/*!
- Destroys the singleton.
- */
-void QDocTagFiles::destroyQDocTagFiles()
-{
- if (s_qdocTagFiles != nullptr) {
- delete s_qdocTagFiles;
- s_qdocTagFiles = nullptr;
- }
-}
-
-/*!
- Generate the tag file section with the given \a writer for the \a parent
- node.
- */
-void QDocTagFiles::generateTagFileCompounds(QXmlStreamWriter &writer, const Aggregate *parent)
-{
- const auto &nonFunctionList = const_cast<Aggregate *>(parent)->nonfunctionList();
- for (const auto *node : nonFunctionList) {
- if (!node->url().isEmpty() || node->isPrivate())
- continue;
-
- QString kind;
- switch (node->nodeType()) {
- case Node::Namespace:
- kind = "namespace";
- break;
- case Node::Class:
- case Node::Struct:
- case Node::Union:
- case Node::QmlType:
- case Node::JsType:
- kind = "class";
- break;
- default:
- continue;
- }
- const auto *aggregate = static_cast<const Aggregate *>(node);
-
- QString access = "public";
- if (node->isProtected())
- access = "protected";
-
- QString objName = node->name();
-
- // Special case: only the root node should have an empty name.
- if (objName.isEmpty() && node != m_qdb->primaryTreeRoot())
- continue;
-
- // *** Write the starting tag for the element here. ***
- writer.writeStartElement("compound");
- writer.writeAttribute("kind", kind);
-
- if (node->isClassNode()) {
- writer.writeTextElement("name", node->fullDocumentName());
- writer.writeTextElement("filename", m_generator->fullDocumentLocation(node, false));
-
- // Classes contain information about their base classes.
- const auto *classNode = static_cast<const ClassNode *>(node);
- const QList<RelatedClass> &bases = classNode->baseClasses();
- for (const auto &related : bases) {
- ClassNode *n = related.m_node;
- if (n)
- writer.writeTextElement("base", n->name());
- }
-
- // Recurse to write all members.
- generateTagFileMembers(writer, aggregate);
- writer.writeEndElement();
-
- // Recurse to write all compounds.
- generateTagFileCompounds(writer, aggregate);
- } else {
- writer.writeTextElement("name", node->fullDocumentName());
- writer.writeTextElement("filename", m_generator->fullDocumentLocation(node, false));
-
- // Recurse to write all members.
- generateTagFileMembers(writer, aggregate);
- writer.writeEndElement();
-
- // Recurse to write all compounds.
- generateTagFileCompounds(writer, aggregate);
- }
- }
-}
-
-/*!
- Writes all the members of the \a parent node with the \a writer.
- The node represents a C++ class, namespace, etc.
- */
-void QDocTagFiles::generateTagFileMembers(QXmlStreamWriter &writer, const Aggregate *parent)
-{
- const auto &childNodes = parent->childNodes();
- for (const auto *node : childNodes) {
- if (!node->url().isEmpty())
- continue;
-
- QString nodeName;
- QString kind;
- switch (node->nodeType()) {
- case Node::Enum:
- nodeName = "member";
- kind = "enumeration";
- break;
- case Node::TypeAlias: // Treated as typedef
- case Node::Typedef:
- nodeName = "member";
- kind = "typedef";
- break;
- case Node::Property:
- nodeName = "member";
- kind = "property";
- break;
- case Node::Function:
- nodeName = "member";
- kind = "function";
- break;
- case Node::Namespace:
- nodeName = "namespace";
- break;
- case Node::Class:
- case Node::Struct:
- case Node::Union:
- nodeName = "class";
- break;
- case Node::Variable:
- default:
- continue;
- }
-
- QString access;
- switch (node->access()) {
- case Access::Public:
- access = "public";
- break;
- case Access::Protected:
- access = "protected";
- break;
- case Access::Private:
- default:
- continue;
- }
-
- QString objName = node->name();
-
- // Special case: only the root node should have an empty name.
- if (objName.isEmpty() && node != m_qdb->primaryTreeRoot())
- continue;
-
- // *** Write the starting tag for the element here. ***
- writer.writeStartElement(nodeName);
- if (!kind.isEmpty())
- writer.writeAttribute("kind", kind);
-
- switch (node->nodeType()) {
- case Node::Class:
- case Node::Struct:
- case Node::Union:
- writer.writeCharacters(node->fullDocumentName());
- writer.writeEndElement();
- break;
- case Node::Namespace:
- writer.writeCharacters(node->fullDocumentName());
- writer.writeEndElement();
- break;
- case Node::Function: {
- /*
- Function nodes contain information about
- the type of function being described.
- */
-
- const auto *functionNode = static_cast<const FunctionNode *>(node);
- writer.writeAttribute("protection", access);
- writer.writeAttribute("virtualness", functionNode->virtualness());
- writer.writeAttribute("static", functionNode->isStatic() ? "yes" : "no");
-
- if (functionNode->isNonvirtual())
- writer.writeTextElement("type", functionNode->returnType());
- else
- writer.writeTextElement("type", "virtual " + functionNode->returnType());
-
- writer.writeTextElement("name", objName);
- const QStringList pieces =
- m_generator->fullDocumentLocation(node, false).split(QLatin1Char('#'));
- writer.writeTextElement("anchorfile", pieces[0]);
- writer.writeTextElement("anchor", pieces[1]);
- QString signature = functionNode->signature(false, false);
- signature = signature.mid(signature.indexOf(QChar('('))).trimmed();
- if (functionNode->isConst())
- signature += " const";
- if (functionNode->isFinal())
- signature += " final";
- if (functionNode->isOverride())
- signature += " override";
- if (functionNode->isPureVirtual())
- signature += " = 0";
- writer.writeTextElement("arglist", signature);
- }
- writer.writeEndElement(); // member
- break;
- case Node::Property: {
- const auto *propertyNode = static_cast<const PropertyNode *>(node);
- writer.writeAttribute("type", propertyNode->dataType());
- writer.writeTextElement("name", objName);
- const QStringList pieces =
- m_generator->fullDocumentLocation(node, false).split(QLatin1Char('#'));
- writer.writeTextElement("anchorfile", pieces[0]);
- writer.writeTextElement("anchor", pieces[1]);
- writer.writeTextElement("arglist", QString());
- }
- writer.writeEndElement(); // member
- break;
- case Node::Enum: {
- const auto *enumNode = static_cast<const EnumNode *>(node);
- writer.writeTextElement("name", objName);
- const QStringList pieces =
- m_generator->fullDocumentLocation(node, false).split(QLatin1Char('#'));
- writer.writeTextElement("anchorfile", pieces[0]);
- writer.writeTextElement("anchor", pieces[1]);
- writer.writeEndElement(); // member
-
- for (const auto &item : enumNode->items()) {
- writer.writeStartElement("member");
- writer.writeAttribute("kind", "enumvalue");
- writer.writeTextElement("name", item.name());
- writer.writeTextElement("anchorfile", pieces[0]);
- writer.writeTextElement("anchor", pieces[1]);
- writer.writeTextElement("arglist", QString());
- writer.writeEndElement(); // member
- }
- } break;
- case Node::TypeAlias: // Treated as typedef
- case Node::Typedef: {
- const auto *typedefNode = static_cast<const TypedefNode *>(node);
- if (typedefNode->associatedEnum())
- writer.writeAttribute("type", typedefNode->associatedEnum()->fullDocumentName());
- else
- writer.writeAttribute("type", QString());
- writer.writeTextElement("name", objName);
- const QStringList pieces =
- m_generator->fullDocumentLocation(node, false).split(QLatin1Char('#'));
- writer.writeTextElement("anchorfile", pieces[0]);
- writer.writeTextElement("anchor", pieces[1]);
- writer.writeTextElement("arglist", QString());
- }
- writer.writeEndElement(); // member
- break;
-
- case Node::Variable:
- default:
- break;
- }
- }
-}
-
-/*!
- Writes a tag file named \a fileName.
- */
-void QDocTagFiles::generateTagFile(const QString &fileName, Generator *g)
-{
- QFile file(fileName);
- QFileInfo fileInfo(fileName);
-
- // If no path was specified or it doesn't exist,
- // default to the output directory
- if (fileInfo.fileName() == fileName || !fileInfo.dir().exists())
- file.setFileName(m_generator->outputDir() + QLatin1Char('/') + fileInfo.fileName());
-
- if (!file.open(QFile::WriteOnly | QFile::Text)) {
- Location().warning(QString("Failed to open %1 for writing.").arg(file.fileName()));
- return;
- }
-
- m_generator = g;
- QXmlStreamWriter writer(&file);
- writer.setAutoFormatting(true);
- writer.writeStartDocument();
- writer.writeStartElement("tagfile");
- generateTagFileCompounds(writer, m_qdb->primaryTreeRoot());
- writer.writeEndElement(); // tagfile
- writer.writeEndDocument();
- file.close();
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/qdoctagfiles.h b/src/qdoc/qdoctagfiles.h
deleted file mode 100644
index 3b2c2dd0b..000000000
--- a/src/qdoc/qdoctagfiles.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDOCTAGFILES_H
-#define QDOCTAGFILES_H
-
-#include <QtCore/qxmlstream.h>
-
-QT_BEGIN_NAMESPACE
-
-class Aggregate;
-class QDocDatabase;
-class Generator;
-
-class QDocTagFiles
-{
- friend class QDocDatabase;
-
-private:
- static QDocTagFiles *qdocTagFiles();
- static void destroyQDocTagFiles();
-
- QDocTagFiles();
- ~QDocTagFiles();
-
- void generateTagFileCompounds(QXmlStreamWriter &writer, const Aggregate *inner);
- void generateTagFileMembers(QXmlStreamWriter &writer, const Aggregate *inner);
- void generateTagFile(const QString &fileName, Generator *g);
-
-private:
- static QDocTagFiles *s_qdocTagFiles;
- QDocDatabase *m_qdb { nullptr };
- Generator *m_generator { nullptr };
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/qmlcodemarker.cpp b/src/qdoc/qmlcodemarker.cpp
deleted file mode 100644
index 62ed7db3b..000000000
--- a/src/qdoc/qmlcodemarker.cpp
+++ /dev/null
@@ -1,259 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- qmlcodemarker.cpp
-*/
-
-#include "qmlcodemarker.h"
-
-#include <QtCore/qregularexpression.h>
-
-#include "atom.h"
-#include "node.h"
-#include "qmlmarkupvisitor.h"
-#include "text.h"
-
-#ifndef QT_NO_DECLARATIVE
-# include <private/qqmljsast_p.h>
-# include <private/qqmljsastfwd_p.h>
-# include <private/qqmljsengine_p.h>
-# include <private/qqmljslexer_p.h>
-# include <private/qqmljsparser_p.h>
-#endif
-
-QT_BEGIN_NAMESPACE
-
-QmlCodeMarker::QmlCodeMarker() {}
-
-QmlCodeMarker::~QmlCodeMarker() {}
-
-/*!
- Returns \c true if the \a code is recognized by the parser.
- */
-bool QmlCodeMarker::recognizeCode(const QString &code)
-{
-#ifndef QT_NO_DECLARATIVE
- QQmlJS::Engine engine;
- QQmlJS::Lexer lexer(&engine);
- QQmlJS::Parser parser(&engine);
-
- QString newCode = code;
- extractPragmas(newCode);
- lexer.setCode(newCode, 1);
-
- return parser.parse();
-#else
- Q_UNUSED(code);
- return false;
-#endif
-}
-
-/*!
- Returns \c true if \a ext is any of a list of file extensions
- for the QML language.
- */
-bool QmlCodeMarker::recognizeExtension(const QString &ext)
-{
- return ext == "qml";
-}
-
-/*!
- Returns \c true if the \a language is recognized. Only "QML" is
- recognized by this marker.
- */
-bool QmlCodeMarker::recognizeLanguage(const QString &language)
-{
- return language == "QML";
-}
-
-/*!
- Returns the type of atom used to represent QML code in the documentation.
-*/
-Atom::AtomType QmlCodeMarker::atomType() const
-{
- return Atom::Qml;
-}
-
-QString QmlCodeMarker::markedUpCode(const QString &code, const Node *relative,
- const Location &location)
-{
- return addMarkUp(code, relative, location);
-}
-
-/*!
- Constructs and returns the marked up name for the \a node.
- If the node is any kind of QML or JS function (a method,
- signal, or handler), "()" is appended to the marked up name.
- */
-QString QmlCodeMarker::markedUpName(const Node *node)
-{
- QString name = linkTag(node, taggedNode(node));
- if (node->isFunction())
- name += "()";
- return name;
-}
-
-QString QmlCodeMarker::markedUpFullName(const Node *node, const Node *relative)
-{
- if (node->name().isEmpty()) {
- return "global";
- } else {
- QString fullName;
- for (;;) {
- fullName.prepend(markedUpName(node));
- if (node->parent() == relative || node->parent()->name().isEmpty())
- break;
- fullName.prepend("<@op>::</@op>");
- node = node->parent();
- }
- return fullName;
- }
-}
-
-QString QmlCodeMarker::markedUpIncludes(const QStringList &includes)
-{
- QString code;
-
- for (const auto &include : includes)
- code += "import " + include + QLatin1Char('\n');
-
- Location location;
- return addMarkUp(code, nullptr, location);
-}
-
-QString QmlCodeMarker::functionBeginRegExp(const QString &funcName)
-{
- return QLatin1Char('^') + QRegularExpression::escape("function " + funcName) + QLatin1Char('$');
-}
-
-QString QmlCodeMarker::functionEndRegExp(const QString & /* funcName */)
-{
- return "^\\}$";
-}
-
-QString QmlCodeMarker::addMarkUp(const QString &code, const Node * /* relative */,
- const Location &location)
-{
-#ifndef QT_NO_DECLARATIVE
- QQmlJS::Engine engine;
- QQmlJS::Lexer lexer(&engine);
-
- QString newCode = code;
- QList<QQmlJS::SourceLocation> pragmas = extractPragmas(newCode);
- lexer.setCode(newCode, 1);
-
- QQmlJS::Parser parser(&engine);
- QString output;
-
- if (parser.parse()) {
- QQmlJS::AST::UiProgram *ast = parser.ast();
- // Pass the unmodified code to the visitor so that pragmas and other
- // unhandled source text can be output.
- QmlMarkupVisitor visitor(code, pragmas, &engine);
- QQmlJS::AST::Node::accept(ast, &visitor);
- if (visitor.hasError()) {
- location.warning(
- location.fileName()
- + QStringLiteral("Unable to analyze QML snippet. The output is incomplete."));
- }
- output = visitor.markedUpCode();
- } else {
- location.warning(QStringLiteral("Unable to parse QML snippet: \"%1\" at line %2, column %3")
- .arg(parser.errorMessage())
- .arg(parser.errorLineNumber())
- .arg(parser.errorColumnNumber()));
- output = protect(code);
- }
-
- return output;
-#else
- Q_UNUSED(code);
- location.warning("QtDeclarative not installed; cannot parse QML or JS.");
- return QString();
-#endif
-}
-
-#ifndef QT_NO_DECLARATIVE
-/*
- Copied and pasted from
- src/declarative/qml/qqmlscriptparser.cpp.
-*/
-static void replaceWithSpace(QString &str, int idx, int n)
-{
- QChar *data = str.data() + idx;
- const QChar space(QLatin1Char(' '));
- for (int ii = 0; ii < n; ++ii)
- *data++ = space;
-}
-
-/*
- Copied and pasted from
- src/declarative/qml/qqmlscriptparser.cpp then modified to
- return a list of removed pragmas.
-
- Searches for ".pragma <value>" or ".import <stuff>" declarations
- in \a script. Currently supported pragmas are: library
-*/
-QList<QQmlJS::SourceLocation> QmlCodeMarker::extractPragmas(QString &script)
-{
- const QString pragma(QLatin1String("pragma"));
- const QString library(QLatin1String("library"));
- QList<QQmlJS::SourceLocation> removed;
-
- QQmlJS::Lexer l(nullptr);
- l.setCode(script, 0);
-
- int token = l.lex();
-
- while (true) {
- if (token != QQmlJSGrammar::T_DOT)
- return removed;
-
- int startOffset = l.tokenOffset();
- int startLine = l.tokenStartLine();
- int startColumn = l.tokenStartColumn();
-
- token = l.lex();
-
- if (token != QQmlJSGrammar::T_PRAGMA && token != QQmlJSGrammar::T_IMPORT)
- return removed;
- int endOffset = 0;
- while (startLine == l.tokenStartLine()) {
- endOffset = l.tokenLength() + l.tokenOffset();
- token = l.lex();
- }
- replaceWithSpace(script, startOffset, endOffset - startOffset);
- removed.append(QQmlJS::SourceLocation(startOffset, endOffset - startOffset, startLine,
- startColumn));
- }
- return removed;
-}
-#endif
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/qmlcodemarker.h b/src/qdoc/qmlcodemarker.h
deleted file mode 100644
index 5624bcffb..000000000
--- a/src/qdoc/qmlcodemarker.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- qmlcodemarker.h
-*/
-
-#ifndef QMLCODEMARKER_H
-#define QMLCODEMARKER_H
-
-#include "cppcodemarker.h"
-
-#ifndef QT_NO_DECLARATIVE
-# include <private/qqmljsastfwd_p.h>
-#endif
-
-QT_BEGIN_NAMESPACE
-
-#ifndef QT_NO_DECLARATIVE
-# include <private/qqmlapiversion_p.h>
-# if Q_QML_PRIVATE_API_VERSION < 8
-namespace QQmlJS {
- using SourceLocation = AST::SourceLocation;
-}
-# endif
-#endif
-
-class QmlCodeMarker : public CppCodeMarker
-{
-public:
- QmlCodeMarker();
- ~QmlCodeMarker() override;
-
- bool recognizeCode(const QString &code) override;
- bool recognizeExtension(const QString &ext) override;
- bool recognizeLanguage(const QString &language) override;
- Atom::AtomType atomType() const override;
- virtual QString markedUpCode(const QString &code, const Node *relative,
- const Location &location) override;
-
- QString markedUpName(const Node *node) override;
- QString markedUpFullName(const Node *node, const Node *relative) override;
- QString markedUpIncludes(const QStringList &includes) override;
- QString functionBeginRegExp(const QString &funcName) override;
- QString functionEndRegExp(const QString &funcName) override;
-
- /* Copied from src/declarative/qml/qdeclarativescriptparser.cpp */
-#ifndef QT_NO_DECLARATIVE
- QList<QQmlJS::SourceLocation> extractPragmas(QString &script);
-#endif
-
-private:
- QString addMarkUp(const QString &code, const Node *relative, const Location &location);
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/qmlcodeparser.cpp b/src/qdoc/qmlcodeparser.cpp
deleted file mode 100644
index e69ea12a4..000000000
--- a/src/qdoc/qmlcodeparser.cpp
+++ /dev/null
@@ -1,242 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- qmlcodeparser.cpp
-*/
-
-#include "qmlcodeparser.h"
-
-#include "node.h"
-#include "qmlvisitor.h"
-
-#ifndef QT_NO_DECLARATIVE
-# include <private/qqmljsast_p.h>
-# include <private/qqmljsastvisitor_p.h>
-#endif
-#include <qdebug.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- Constructs the QML code parser.
- */
-QmlCodeParser::QmlCodeParser()
-#ifndef QT_NO_DECLARATIVE
- : lexer(nullptr), parser(nullptr)
-#endif
-{
-}
-
-/*!
- Destroys the QML code parser.
- */
-QmlCodeParser::~QmlCodeParser() {}
-
-/*!
- Initializes the code parser base class.
- Also creates a lexer and parser from QQmlJS.
- */
-void QmlCodeParser::initializeParser()
-{
- CodeParser::initializeParser();
-
-#ifndef QT_NO_DECLARATIVE
- lexer = new QQmlJS::Lexer(&engine);
- parser = new QQmlJS::Parser(&engine);
-#endif
-}
-
-/*!
- Terminates the QML code parser. Deletes the lexer and parser
- created by the constructor.
- */
-void QmlCodeParser::terminateParser()
-{
-#ifndef QT_NO_DECLARATIVE
- delete lexer;
- delete parser;
-#endif
-}
-
-/*!
- Returns "QML".
- */
-QString QmlCodeParser::language()
-{
- return "QML";
-}
-
-/*!
- Returns a string list containing "*.qml". This is the only
- file type parsed by the QMLN parser.
- */
-QStringList QmlCodeParser::sourceFileNameFilter()
-{
- return QStringList() << "*.qml";
-}
-
-/*!
- Parses the source file at \a filePath and inserts the contents
- into the database. The \a location is used for error reporting.
-
- If it can't open the file at \a filePath, it reports an error
- and returns without doing anything.
- */
-void QmlCodeParser::parseSourceFile(const Location &location, const QString &filePath)
-{
- QFile in(filePath);
- currentFile_ = filePath;
- if (!in.open(QIODevice::ReadOnly)) {
- location.error(QStringLiteral("Cannot open QML file '%1'").arg(filePath));
- currentFile_.clear();
- return;
- }
-
-#ifndef QT_NO_DECLARATIVE
- QString document = in.readAll();
- in.close();
-
- Location fileLocation(filePath);
-
- QString newCode = document;
- extractPragmas(newCode);
- lexer->setCode(newCode, 1);
-
- if (parser->parse()) {
- QQmlJS::AST::UiProgram *ast = parser->ast();
- QmlDocVisitor visitor(filePath, newCode, &engine, topicCommands() + commonMetaCommands(),
- topicCommands());
- QQmlJS::AST::Node::accept(ast, &visitor);
- if (visitor.hasError()) {
- qDebug().nospace() << qPrintable(filePath) << ": Could not analyze QML file. "
- << "The output is incomplete.";
- }
- }
- const auto &messages = parser->diagnosticMessages();
- for (const auto &msg : messages) {
- qDebug().nospace() << qPrintable(filePath) << ':'
-# if Q_QML_PRIVATE_API_VERSION >= 8
- << msg.loc.startLine << ": QML syntax error at col "
- << msg.loc.startColumn
-# else
- << msg.line << ": QML syntax error at col " << msg.column
-# endif
- << ": " << qPrintable(msg.message);
- }
- currentFile_.clear();
-#else
- location.warning("QtDeclarative not installed; cannot parse QML or JS.");
-#endif
-}
-
-static QSet<QString> topicCommands_;
-/*!
- Returns the set of strings representing the topic commands.
- */
-const QSet<QString> &QmlCodeParser::topicCommands()
-{
- if (topicCommands_.isEmpty()) {
- topicCommands_ << COMMAND_VARIABLE << COMMAND_QMLCLASS << COMMAND_QMLTYPE
- << COMMAND_QMLPROPERTY << COMMAND_QMLPROPERTYGROUP // mws 13/03/2019
- << COMMAND_QMLATTACHEDPROPERTY << COMMAND_QMLSIGNAL
- << COMMAND_QMLATTACHEDSIGNAL << COMMAND_QMLMETHOD
- << COMMAND_QMLATTACHEDMETHOD << COMMAND_QMLBASICTYPE << COMMAND_JSTYPE
- << COMMAND_JSPROPERTY << COMMAND_JSPROPERTYGROUP // mws 13/03/2019
- << COMMAND_JSATTACHEDPROPERTY << COMMAND_JSSIGNAL << COMMAND_JSATTACHEDSIGNAL
- << COMMAND_JSMETHOD << COMMAND_JSATTACHEDMETHOD << COMMAND_JSBASICTYPE;
- }
- return topicCommands_;
-}
-
-#ifndef QT_NO_DECLARATIVE
-/*!
- Copy and paste from src/declarative/qml/qdeclarativescriptparser.cpp.
- This function blanks out the section of the \a str beginning at \a idx
- and running for \a n characters.
-*/
-static void replaceWithSpace(QString &str, int idx, int n)
-{
- QChar *data = str.data() + idx;
- const QChar space(QLatin1Char(' '));
- for (int ii = 0; ii < n; ++ii)
- *data++ = space;
-}
-
-/*!
- Copy & paste from src/declarative/qml/qdeclarativescriptparser.cpp,
- then modified to return no values.
-
- Searches for ".pragma <value>" declarations within \a script.
- Currently supported pragmas are: library
-*/
-void QmlCodeParser::extractPragmas(QString &script)
-{
- const QString pragma(QLatin1String("pragma"));
- const QString library(QLatin1String("library"));
-
- QQmlJS::Lexer l(nullptr);
- l.setCode(script, 0);
-
- int token = l.lex();
-
- while (true) {
- if (token != QQmlJSGrammar::T_DOT)
- return;
-
- int startOffset = l.tokenOffset();
- int startLine = l.tokenStartLine();
-
- token = l.lex();
-
- if (token != QQmlJSGrammar::T_IDENTIFIER || l.tokenStartLine() != startLine
- || script.mid(l.tokenOffset(), l.tokenLength()) != pragma)
- return;
-
- token = l.lex();
-
- if (token != QQmlJSGrammar::T_IDENTIFIER || l.tokenStartLine() != startLine)
- return;
-
- QString pragmaValue = script.mid(l.tokenOffset(), l.tokenLength());
- int endOffset = l.tokenLength() + l.tokenOffset();
-
- token = l.lex();
- if (l.tokenStartLine() == startLine)
- return;
-
- if (pragmaValue == QLatin1String("library"))
- replaceWithSpace(script, startOffset, endOffset - startOffset);
- else
- return;
- }
- return;
-}
-#endif
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/qmlcodeparser.h b/src/qdoc/qmlcodeparser.h
deleted file mode 100644
index 67ba628f9..000000000
--- a/src/qdoc/qmlcodeparser.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- qmlcodeparser.h
-*/
-
-#ifndef QMLCODEPARSER_H
-#define QMLCODEPARSER_H
-
-#include "codeparser.h"
-
-#include <QtCore/qset.h>
-
-#ifndef QT_NO_DECLARATIVE
-# include <private/qqmljsengine_p.h>
-# include <private/qqmljslexer_p.h>
-# include <private/qqmljsparser_p.h>
-#endif
-
-QT_BEGIN_NAMESPACE
-
-class Node;
-class QString;
-
-class QmlCodeParser : public CodeParser
-{
-public:
- QmlCodeParser();
- ~QmlCodeParser() override;
-
- void initializeParser() override;
- void terminateParser() override;
- QString language() override;
- QStringList sourceFileNameFilter() override;
- void parseSourceFile(const Location &location, const QString &filePath) override;
-
-#ifndef QT_NO_DECLARATIVE
- /* Copied from src/declarative/qml/qdeclarativescriptparser.cpp */
- void extractPragmas(QString &script);
-#endif
-
-protected:
- const QSet<QString> &topicCommands();
-
-private:
-#ifndef QT_NO_DECLARATIVE
- QQmlJS::Engine engine;
- QQmlJS::Lexer *lexer;
- QQmlJS::Parser *parser;
-#endif
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/qmlmarkupvisitor.cpp b/src/qdoc/qmlmarkupvisitor.cpp
deleted file mode 100644
index fc7f3c784..000000000
--- a/src/qdoc/qmlmarkupvisitor.cpp
+++ /dev/null
@@ -1,828 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qmlmarkupvisitor.h"
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qstringlist.h>
-
-#ifndef QT_NO_DECLARATIVE
-# include <private/qqmljsast_p.h>
-# include <private/qqmljsastfwd_p.h>
-# include <private/qqmljsengine_p.h>
-#endif
-
-QT_BEGIN_NAMESPACE
-
-#ifndef QT_NO_DECLARATIVE
-QmlMarkupVisitor::QmlMarkupVisitor(const QString &source,
- const QList<QQmlJS::SourceLocation> &pragmas,
- QQmlJS::Engine *engine)
-{
- this->source = source;
- this->engine = engine;
-
- cursor = 0;
- extraIndex = 0;
-
- // Merge the lists of locations of pragmas and comments in the source code.
- int i = 0;
- int j = 0;
- const QList<QQmlJS::SourceLocation> comments = engine->comments();
- while (i < comments.size() && j < pragmas.length()) {
- if (comments[i].offset < pragmas[j].offset) {
- extraTypes.append(Comment);
- extraLocations.append(comments[i]);
- ++i;
- } else {
- extraTypes.append(Pragma);
- extraLocations.append(comments[j]);
- ++j;
- }
- }
-
- while (i < comments.size()) {
- extraTypes.append(Comment);
- extraLocations.append(comments[i]);
- ++i;
- }
-
- while (j < pragmas.length()) {
- extraTypes.append(Pragma);
- extraLocations.append(pragmas[j]);
- ++j;
- }
-}
-
-QmlMarkupVisitor::~QmlMarkupVisitor() {}
-
-// The protect() function is a copy of the one from CppCodeMarker.
-
-static const QString samp = QLatin1String("&amp;");
-static const QString slt = QLatin1String("&lt;");
-static const QString sgt = QLatin1String("&gt;");
-static const QString squot = QLatin1String("&quot;");
-
-QString QmlMarkupVisitor::protect(const QString &str)
-{
- int n = str.length();
- QString marked;
- marked.reserve(n * 2 + 30);
- const QChar *data = str.constData();
- for (int i = 0; i != n; ++i) {
- switch (data[i].unicode()) {
- case '&':
- marked += samp;
- break;
- case '<':
- marked += slt;
- break;
- case '>':
- marked += sgt;
- break;
- case '"':
- marked += squot;
- break;
- default:
- marked += data[i];
- }
- }
- return marked;
-}
-
-QString QmlMarkupVisitor::markedUpCode()
-{
- if (int(cursor) < source.length())
- addExtra(cursor, source.length());
-
- return output;
-}
-
-bool QmlMarkupVisitor::hasError() const
-{
- return hasRecursionDepthError;
-}
-
-void QmlMarkupVisitor::addExtra(quint32 start, quint32 finish)
-{
- if (extraIndex >= extraLocations.length()) {
- QString extra = source.mid(start, finish - start);
- if (extra.trimmed().isEmpty())
- output += extra;
- else
- output += protect(extra); // text that should probably have been caught by the parser
-
- cursor = finish;
- return;
- }
-
- while (extraIndex < extraLocations.length()) {
- if (extraTypes[extraIndex] == Comment) {
- if (extraLocations[extraIndex].offset - 2 >= start)
- break;
- } else {
- if (extraLocations[extraIndex].offset >= start)
- break;
- }
- extraIndex++;
- }
-
- quint32 i = start;
- while (i < finish && extraIndex < extraLocations.length()) {
- quint32 j = extraLocations[extraIndex].offset - 2;
- if (i <= j && j < finish) {
- if (i < j)
- output += protect(source.mid(i, j - i));
-
- quint32 l = extraLocations[extraIndex].length;
- if (extraTypes[extraIndex] == Comment) {
- if (source.mid(j, 2) == QLatin1String("/*"))
- l += 4;
- else
- l += 2;
- output += QLatin1String("<@comment>");
- output += protect(source.mid(j, l));
- output += QLatin1String("</@comment>");
- } else
- output += protect(source.mid(j, l));
-
- extraIndex++;
- i = j + l;
- } else
- break;
- }
-
- QString extra = source.mid(i, finish - i);
- if (extra.trimmed().isEmpty())
- output += extra;
- else
- output += protect(extra); // text that should probably have been caught by the parser
-
- cursor = finish;
-}
-
-void QmlMarkupVisitor::addMarkedUpToken(QQmlJS::SourceLocation &location,
- const QString &tagName,
- const QHash<QString, QString> &attributes)
-{
- if (!location.isValid())
- return;
-
- if (cursor < location.offset)
- addExtra(cursor, location.offset);
- else if (cursor > location.offset)
- return;
-
- output += QString(QLatin1String("<@%1")).arg(tagName);
- for (const auto &key : attributes)
- output += QString(QLatin1String(" %1=\"%2\"")).arg(key).arg(attributes[key]);
- output += QString(QLatin1String(">%2</@%3>")).arg(protect(sourceText(location)), tagName);
- cursor += location.length;
-}
-
-QString QmlMarkupVisitor::sourceText(QQmlJS::SourceLocation &location)
-{
- return source.mid(location.offset, location.length);
-}
-
-void QmlMarkupVisitor::addVerbatim(QQmlJS::SourceLocation first,
- QQmlJS::SourceLocation last)
-{
- if (!first.isValid())
- return;
-
- quint32 start = first.begin();
- quint32 finish;
- if (last.isValid())
- finish = last.end();
- else
- finish = first.end();
-
- if (cursor < start)
- addExtra(cursor, start);
- else if (cursor > start)
- return;
-
- QString text = source.mid(start, finish - start);
- output += protect(text);
- cursor = finish;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::UiImport *uiimport)
-{
- addVerbatim(uiimport->importToken);
- if (!uiimport->importUri)
- addMarkedUpToken(uiimport->fileNameToken, QLatin1String("headerfile"));
- return false;
-}
-
-void QmlMarkupVisitor::endVisit(QQmlJS::AST::UiImport *uiimport)
-{
- if (uiimport->version)
- addVerbatim(uiimport->version->firstSourceLocation(),
- uiimport->version->lastSourceLocation());
- addVerbatim(uiimport->asToken);
- addMarkedUpToken(uiimport->importIdToken, QLatin1String("headerfile"));
- addVerbatim(uiimport->semicolonToken);
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::UiPublicMember *member)
-{
- if (member->type == QQmlJS::AST::UiPublicMember::Property) {
- addVerbatim(member->defaultToken);
- addVerbatim(member->readonlyToken);
- addVerbatim(member->propertyToken);
- addVerbatim(member->typeModifierToken);
- addMarkedUpToken(member->typeToken, QLatin1String("type"));
- addMarkedUpToken(member->identifierToken, QLatin1String("name"));
- addVerbatim(member->colonToken);
- if (member->binding)
- QQmlJS::AST::Node::accept(member->binding, this);
- else if (member->statement)
- QQmlJS::AST::Node::accept(member->statement, this);
- } else {
- addVerbatim(member->propertyToken);
- addVerbatim(member->typeModifierToken);
- addMarkedUpToken(member->typeToken, QLatin1String("type"));
- // addVerbatim(member->identifierToken);
- QQmlJS::AST::Node::accept(member->parameters, this);
- }
- addVerbatim(member->semicolonToken);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::UiObjectInitializer *initializer)
-{
- addVerbatim(initializer->lbraceToken, initializer->lbraceToken);
- return true;
-}
-
-void QmlMarkupVisitor::endVisit(QQmlJS::AST::UiObjectInitializer *initializer)
-{
- addVerbatim(initializer->rbraceToken, initializer->rbraceToken);
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::UiObjectBinding *binding)
-{
- QQmlJS::AST::Node::accept(binding->qualifiedId, this);
- addVerbatim(binding->colonToken);
- QQmlJS::AST::Node::accept(binding->qualifiedTypeNameId, this);
- QQmlJS::AST::Node::accept(binding->initializer, this);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::UiScriptBinding *binding)
-{
- QQmlJS::AST::Node::accept(binding->qualifiedId, this);
- addVerbatim(binding->colonToken);
- QQmlJS::AST::Node::accept(binding->statement, this);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::UiArrayBinding *binding)
-{
- QQmlJS::AST::Node::accept(binding->qualifiedId, this);
- addVerbatim(binding->colonToken);
- addVerbatim(binding->lbracketToken);
- QQmlJS::AST::Node::accept(binding->members, this);
- addVerbatim(binding->rbracketToken);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::UiArrayMemberList *list)
-{
- for (QQmlJS::AST::UiArrayMemberList *it = list; it; it = it->next) {
- QQmlJS::AST::Node::accept(it->member, this);
- // addVerbatim(it->commaToken);
- }
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::UiQualifiedId *id)
-{
- addMarkedUpToken(id->identifierToken, QLatin1String("name"));
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::ThisExpression *expression)
-{
- addVerbatim(expression->thisToken);
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::IdentifierExpression *identifier)
-{
- addMarkedUpToken(identifier->identifierToken, QLatin1String("name"));
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::NullExpression *null)
-{
- addMarkedUpToken(null->nullToken, QLatin1String("number"));
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::TrueLiteral *literal)
-{
- addMarkedUpToken(literal->trueToken, QLatin1String("number"));
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::FalseLiteral *literal)
-{
- addMarkedUpToken(literal->falseToken, QLatin1String("number"));
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::NumericLiteral *literal)
-{
- addMarkedUpToken(literal->literalToken, QLatin1String("number"));
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::StringLiteral *literal)
-{
- addMarkedUpToken(literal->literalToken, QLatin1String("string"));
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::RegExpLiteral *literal)
-{
- addVerbatim(literal->literalToken);
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::ArrayPattern *literal)
-{
- addVerbatim(literal->lbracketToken);
- QQmlJS::AST::Node::accept(literal->elements, this);
- addVerbatim(literal->rbracketToken);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::ObjectPattern *literal)
-{
- addVerbatim(literal->lbraceToken);
- return true;
-}
-
-void QmlMarkupVisitor::endVisit(QQmlJS::AST::ObjectPattern *literal)
-{
- addVerbatim(literal->rbraceToken);
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::PatternElementList *list)
-{
- for (QQmlJS::AST::PatternElementList *it = list; it; it = it->next) {
- QQmlJS::AST::Node::accept(it->element, this);
- // addVerbatim(it->commaToken);
- }
- QQmlJS::AST::Node::accept(list->elision, this);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::Elision *elision)
-{
- addVerbatim(elision->commaToken, elision->commaToken);
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::PatternProperty *list)
-{
- QQmlJS::AST::Node::accept(list->name, this);
- addVerbatim(list->colonToken, list->colonToken);
- QQmlJS::AST::Node::accept(list->initializer, this);
- // addVerbatim(list->commaToken, list->commaToken);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::ArrayMemberExpression *expression)
-{
- QQmlJS::AST::Node::accept(expression->base, this);
- addVerbatim(expression->lbracketToken);
- QQmlJS::AST::Node::accept(expression->expression, this);
- addVerbatim(expression->rbracketToken);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::FieldMemberExpression *expression)
-{
- QQmlJS::AST::Node::accept(expression->base, this);
- addVerbatim(expression->dotToken);
- addMarkedUpToken(expression->identifierToken, QLatin1String("name"));
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::NewMemberExpression *expression)
-{
- addVerbatim(expression->newToken);
- QQmlJS::AST::Node::accept(expression->base, this);
- addVerbatim(expression->lparenToken);
- QQmlJS::AST::Node::accept(expression->arguments, this);
- addVerbatim(expression->rparenToken);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::NewExpression *expression)
-{
- addVerbatim(expression->newToken);
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::ArgumentList *list)
-{
- addVerbatim(list->commaToken, list->commaToken);
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::PostIncrementExpression *expression)
-{
- addVerbatim(expression->incrementToken);
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::PostDecrementExpression *expression)
-{
- addVerbatim(expression->decrementToken);
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::DeleteExpression *expression)
-{
- addVerbatim(expression->deleteToken);
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::VoidExpression *expression)
-{
- addVerbatim(expression->voidToken);
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::TypeOfExpression *expression)
-{
- addVerbatim(expression->typeofToken);
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::PreIncrementExpression *expression)
-{
- addVerbatim(expression->incrementToken);
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::PreDecrementExpression *expression)
-{
- addVerbatim(expression->decrementToken);
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::UnaryPlusExpression *expression)
-{
- addVerbatim(expression->plusToken);
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::UnaryMinusExpression *expression)
-{
- addVerbatim(expression->minusToken);
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::TildeExpression *expression)
-{
- addVerbatim(expression->tildeToken);
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::NotExpression *expression)
-{
- addVerbatim(expression->notToken);
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::BinaryExpression *expression)
-{
- QQmlJS::AST::Node::accept(expression->left, this);
- addMarkedUpToken(expression->operatorToken, QLatin1String("op"));
- QQmlJS::AST::Node::accept(expression->right, this);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::ConditionalExpression *expression)
-{
- QQmlJS::AST::Node::accept(expression->expression, this);
- addVerbatim(expression->questionToken);
- QQmlJS::AST::Node::accept(expression->ok, this);
- addVerbatim(expression->colonToken);
- QQmlJS::AST::Node::accept(expression->ko, this);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::Expression *expression)
-{
- QQmlJS::AST::Node::accept(expression->left, this);
- addVerbatim(expression->commaToken);
- QQmlJS::AST::Node::accept(expression->right, this);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::Block *block)
-{
- addVerbatim(block->lbraceToken);
- return true;
-}
-
-void QmlMarkupVisitor::endVisit(QQmlJS::AST::Block *block)
-{
- addVerbatim(block->rbraceToken);
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::VariableStatement *statement)
-{
- addVerbatim(statement->declarationKindToken);
- QQmlJS::AST::Node::accept(statement->declarations, this);
- // addVerbatim(statement->semicolonToken);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::VariableDeclarationList *list)
-{
- for (QQmlJS::AST::VariableDeclarationList *it = list; it; it = it->next) {
- QQmlJS::AST::Node::accept(it->declaration, this);
- addVerbatim(it->commaToken);
- }
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::EmptyStatement *statement)
-{
- addVerbatim(statement->semicolonToken);
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::ExpressionStatement *statement)
-{
- QQmlJS::AST::Node::accept(statement->expression, this);
- addVerbatim(statement->semicolonToken);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::IfStatement *statement)
-{
- addMarkedUpToken(statement->ifToken, QLatin1String("keyword"));
- addVerbatim(statement->lparenToken);
- QQmlJS::AST::Node::accept(statement->expression, this);
- addVerbatim(statement->rparenToken);
- QQmlJS::AST::Node::accept(statement->ok, this);
- if (statement->ko) {
- addMarkedUpToken(statement->elseToken, QLatin1String("keyword"));
- QQmlJS::AST::Node::accept(statement->ko, this);
- }
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::DoWhileStatement *statement)
-{
- addMarkedUpToken(statement->doToken, QLatin1String("keyword"));
- QQmlJS::AST::Node::accept(statement->statement, this);
- addMarkedUpToken(statement->whileToken, QLatin1String("keyword"));
- addVerbatim(statement->lparenToken);
- QQmlJS::AST::Node::accept(statement->expression, this);
- addVerbatim(statement->rparenToken);
- addVerbatim(statement->semicolonToken);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::WhileStatement *statement)
-{
- addMarkedUpToken(statement->whileToken, QLatin1String("keyword"));
- addVerbatim(statement->lparenToken);
- QQmlJS::AST::Node::accept(statement->expression, this);
- addVerbatim(statement->rparenToken);
- QQmlJS::AST::Node::accept(statement->statement, this);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::ForStatement *statement)
-{
- addMarkedUpToken(statement->forToken, QLatin1String("keyword"));
- addVerbatim(statement->lparenToken);
- QQmlJS::AST::Node::accept(statement->initialiser, this);
- addVerbatim(statement->firstSemicolonToken);
- QQmlJS::AST::Node::accept(statement->condition, this);
- addVerbatim(statement->secondSemicolonToken);
- QQmlJS::AST::Node::accept(statement->expression, this);
- addVerbatim(statement->rparenToken);
- QQmlJS::AST::Node::accept(statement->statement, this);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::ForEachStatement *statement)
-{
- addMarkedUpToken(statement->forToken, QLatin1String("keyword"));
- addVerbatim(statement->lparenToken);
- QQmlJS::AST::Node::accept(statement->lhs, this);
- addVerbatim(statement->inOfToken);
- QQmlJS::AST::Node::accept(statement->expression, this);
- addVerbatim(statement->rparenToken);
- QQmlJS::AST::Node::accept(statement->statement, this);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::ContinueStatement *statement)
-{
- addMarkedUpToken(statement->continueToken, QLatin1String("keyword"));
- addMarkedUpToken(statement->identifierToken, QLatin1String("name"));
- addVerbatim(statement->semicolonToken);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::BreakStatement *statement)
-{
- addMarkedUpToken(statement->breakToken, QLatin1String("keyword"));
- addMarkedUpToken(statement->identifierToken, QLatin1String("name"));
- addVerbatim(statement->semicolonToken);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::ReturnStatement *statement)
-{
- addMarkedUpToken(statement->returnToken, QLatin1String("keyword"));
- QQmlJS::AST::Node::accept(statement->expression, this);
- addVerbatim(statement->semicolonToken);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::WithStatement *statement)
-{
- addMarkedUpToken(statement->withToken, QLatin1String("keyword"));
- addVerbatim(statement->lparenToken);
- QQmlJS::AST::Node::accept(statement->expression, this);
- addVerbatim(statement->rparenToken);
- QQmlJS::AST::Node::accept(statement->statement, this);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::CaseBlock *block)
-{
- addVerbatim(block->lbraceToken);
- return true;
-}
-
-void QmlMarkupVisitor::endVisit(QQmlJS::AST::CaseBlock *block)
-{
- addVerbatim(block->rbraceToken, block->rbraceToken);
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::SwitchStatement *statement)
-{
- addMarkedUpToken(statement->switchToken, QLatin1String("keyword"));
- addVerbatim(statement->lparenToken);
- QQmlJS::AST::Node::accept(statement->expression, this);
- addVerbatim(statement->rparenToken);
- QQmlJS::AST::Node::accept(statement->block, this);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::CaseClause *clause)
-{
- addMarkedUpToken(clause->caseToken, QLatin1String("keyword"));
- QQmlJS::AST::Node::accept(clause->expression, this);
- addVerbatim(clause->colonToken);
- QQmlJS::AST::Node::accept(clause->statements, this);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::DefaultClause *clause)
-{
- addMarkedUpToken(clause->defaultToken, QLatin1String("keyword"));
- addVerbatim(clause->colonToken, clause->colonToken);
- return true;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::LabelledStatement *statement)
-{
- addMarkedUpToken(statement->identifierToken, QLatin1String("name"));
- addVerbatim(statement->colonToken);
- QQmlJS::AST::Node::accept(statement->statement, this);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::ThrowStatement *statement)
-{
- addMarkedUpToken(statement->throwToken, QLatin1String("keyword"));
- QQmlJS::AST::Node::accept(statement->expression, this);
- addVerbatim(statement->semicolonToken);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::Catch *c)
-{
- addMarkedUpToken(c->catchToken, QLatin1String("keyword"));
- addVerbatim(c->lparenToken);
- addMarkedUpToken(c->identifierToken, QLatin1String("name"));
- addVerbatim(c->rparenToken);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::Finally *f)
-{
- addMarkedUpToken(f->finallyToken, QLatin1String("keyword"));
- QQmlJS::AST::Node::accept(f->statement, this);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::TryStatement *statement)
-{
- addMarkedUpToken(statement->tryToken, QLatin1String("keyword"));
- QQmlJS::AST::Node::accept(statement->statement, this);
- QQmlJS::AST::Node::accept(statement->catchExpression, this);
- QQmlJS::AST::Node::accept(statement->finallyExpression, this);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::FunctionExpression *expression)
-{
- addMarkedUpToken(expression->functionToken, QLatin1String("keyword"));
- addMarkedUpToken(expression->identifierToken, QLatin1String("name"));
- addVerbatim(expression->lparenToken);
- QQmlJS::AST::Node::accept(expression->formals, this);
- addVerbatim(expression->rparenToken);
- addVerbatim(expression->lbraceToken);
- QQmlJS::AST::Node::accept(expression->body, this);
- addVerbatim(expression->rbraceToken);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::FunctionDeclaration *declaration)
-{
- addMarkedUpToken(declaration->functionToken, QLatin1String("keyword"));
- addMarkedUpToken(declaration->identifierToken, QLatin1String("name"));
- addVerbatim(declaration->lparenToken);
- QQmlJS::AST::Node::accept(declaration->formals, this);
- addVerbatim(declaration->rparenToken);
- addVerbatim(declaration->lbraceToken);
- QQmlJS::AST::Node::accept(declaration->body, this);
- addVerbatim(declaration->rbraceToken);
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::FormalParameterList *list)
-{
- // addVerbatim(list->commaToken);
- QQmlJS::AST::Node::accept(list->element, this);
- // addMarkedUpToken(list->identifierToken, QLatin1String("name"));
- return false;
-}
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::DebuggerStatement *statement)
-{
- addVerbatim(statement->debuggerToken);
- addVerbatim(statement->semicolonToken);
- return true;
-}
-
-// Elements and items are represented by UiObjectDefinition nodes.
-
-bool QmlMarkupVisitor::visit(QQmlJS::AST::UiObjectDefinition *definition)
-{
- QHash<QString, QString> attributes;
- addMarkedUpToken(definition->qualifiedTypeNameId->identifierToken, QLatin1String("type"));
- QQmlJS::AST::Node::accept(definition->initializer, this);
- return false;
-}
-
-void QmlMarkupVisitor::throwRecursionDepthError()
-{
- hasRecursionDepthError = true;
-}
-
-#endif
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/qmlmarkupvisitor.h b/src/qdoc/qmlmarkupvisitor.h
deleted file mode 100644
index 6dca568d3..000000000
--- a/src/qdoc/qmlmarkupvisitor.h
+++ /dev/null
@@ -1,176 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMLMARKUPVISITOR_H
-#define QMLMARKUPVISITOR_H
-
-#include "node.h"
-#include "tree.h"
-
-#include <QtCore/qstring.h>
-
-#ifndef QT_NO_DECLARATIVE
-# include <private/qqmljsastvisitor_p.h>
-# include <private/qqmljsengine_p.h>
-#endif
-
-QT_BEGIN_NAMESPACE
-
-#ifndef QT_NO_DECLARATIVE
-# include <private/qqmlapiversion_p.h>
-# if Q_QML_PRIVATE_API_VERSION < 8
-namespace QQmlJS {
- using SourceLocation = AST::SourceLocation;
-}
-# endif
-
-
-class QmlMarkupVisitor : public QQmlJS::AST::Visitor
-{
-public:
- enum ExtraType { Comment, Pragma };
-
- QmlMarkupVisitor(const QString &code, const QList<QQmlJS::SourceLocation> &pragmas,
- QQmlJS::Engine *engine);
- virtual ~QmlMarkupVisitor();
-
- QString markedUpCode();
- bool hasError() const;
-
- bool visit(QQmlJS::AST::UiImport *) override;
- void endVisit(QQmlJS::AST::UiImport *) override;
-
- bool visit(QQmlJS::AST::UiPublicMember *) override;
- bool visit(QQmlJS::AST::UiObjectDefinition *) override;
-
- bool visit(QQmlJS::AST::UiObjectInitializer *) override;
- void endVisit(QQmlJS::AST::UiObjectInitializer *) override;
-
- bool visit(QQmlJS::AST::UiObjectBinding *) override;
- bool visit(QQmlJS::AST::UiScriptBinding *) override;
- bool visit(QQmlJS::AST::UiArrayBinding *) override;
- bool visit(QQmlJS::AST::UiArrayMemberList *) override;
- bool visit(QQmlJS::AST::UiQualifiedId *) override;
-
- bool visit(QQmlJS::AST::ThisExpression *) override;
- bool visit(QQmlJS::AST::IdentifierExpression *) override;
- bool visit(QQmlJS::AST::NullExpression *) override;
- bool visit(QQmlJS::AST::TrueLiteral *) override;
- bool visit(QQmlJS::AST::FalseLiteral *) override;
- bool visit(QQmlJS::AST::NumericLiteral *) override;
- bool visit(QQmlJS::AST::StringLiteral *) override;
- bool visit(QQmlJS::AST::RegExpLiteral *) override;
- bool visit(QQmlJS::AST::ArrayPattern *) override;
-
- bool visit(QQmlJS::AST::ObjectPattern *) override;
- void endVisit(QQmlJS::AST::ObjectPattern *) override;
-
- bool visit(QQmlJS::AST::PatternElementList *) override;
- bool visit(QQmlJS::AST::Elision *) override;
- bool visit(QQmlJS::AST::PatternProperty *) override;
- bool visit(QQmlJS::AST::ArrayMemberExpression *) override;
- bool visit(QQmlJS::AST::FieldMemberExpression *) override;
- bool visit(QQmlJS::AST::NewMemberExpression *) override;
- bool visit(QQmlJS::AST::NewExpression *) override;
- bool visit(QQmlJS::AST::ArgumentList *) override;
- bool visit(QQmlJS::AST::PostIncrementExpression *) override;
- bool visit(QQmlJS::AST::PostDecrementExpression *) override;
- bool visit(QQmlJS::AST::DeleteExpression *) override;
- bool visit(QQmlJS::AST::VoidExpression *) override;
- bool visit(QQmlJS::AST::TypeOfExpression *) override;
- bool visit(QQmlJS::AST::PreIncrementExpression *) override;
- bool visit(QQmlJS::AST::PreDecrementExpression *) override;
- bool visit(QQmlJS::AST::UnaryPlusExpression *) override;
- bool visit(QQmlJS::AST::UnaryMinusExpression *) override;
- bool visit(QQmlJS::AST::TildeExpression *) override;
- bool visit(QQmlJS::AST::NotExpression *) override;
- bool visit(QQmlJS::AST::BinaryExpression *) override;
- bool visit(QQmlJS::AST::ConditionalExpression *) override;
- bool visit(QQmlJS::AST::Expression *) override;
-
- bool visit(QQmlJS::AST::Block *) override;
- void endVisit(QQmlJS::AST::Block *) override;
-
- bool visit(QQmlJS::AST::VariableStatement *) override;
- bool visit(QQmlJS::AST::VariableDeclarationList *) override;
- bool visit(QQmlJS::AST::EmptyStatement *) override;
- bool visit(QQmlJS::AST::ExpressionStatement *) override;
- bool visit(QQmlJS::AST::IfStatement *) override;
- bool visit(QQmlJS::AST::DoWhileStatement *) override;
- bool visit(QQmlJS::AST::WhileStatement *) override;
- bool visit(QQmlJS::AST::ForStatement *) override;
- bool visit(QQmlJS::AST::ForEachStatement *) override;
- bool visit(QQmlJS::AST::ContinueStatement *) override;
- bool visit(QQmlJS::AST::BreakStatement *) override;
- bool visit(QQmlJS::AST::ReturnStatement *) override;
- bool visit(QQmlJS::AST::WithStatement *) override;
-
- bool visit(QQmlJS::AST::CaseBlock *) override;
- void endVisit(QQmlJS::AST::CaseBlock *) override;
-
- bool visit(QQmlJS::AST::SwitchStatement *) override;
- bool visit(QQmlJS::AST::CaseClause *) override;
- bool visit(QQmlJS::AST::DefaultClause *) override;
- bool visit(QQmlJS::AST::LabelledStatement *) override;
- bool visit(QQmlJS::AST::ThrowStatement *) override;
- bool visit(QQmlJS::AST::TryStatement *) override;
- bool visit(QQmlJS::AST::Catch *) override;
- bool visit(QQmlJS::AST::Finally *) override;
- bool visit(QQmlJS::AST::FunctionDeclaration *) override;
- bool visit(QQmlJS::AST::FunctionExpression *) override;
- bool visit(QQmlJS::AST::FormalParameterList *) override;
- bool visit(QQmlJS::AST::DebuggerStatement *) override;
-
-protected:
- QString protect(const QString &string);
-
-private:
- typedef QHash<QString, QString> StringHash;
- void addExtra(quint32 start, quint32 finish);
- void addMarkedUpToken(QQmlJS::SourceLocation &location, const QString &text,
- const StringHash &attributes = StringHash());
- void addVerbatim(QQmlJS::SourceLocation first,
- QQmlJS::SourceLocation last = QQmlJS::SourceLocation());
- QString sourceText(QQmlJS::SourceLocation &location);
- void throwRecursionDepthError() final;
-
- QQmlJS::Engine *engine;
- QList<ExtraType> extraTypes;
- QList<QQmlJS::SourceLocation> extraLocations;
- QString source;
- QString output;
- quint32 cursor;
- int extraIndex;
- bool hasRecursionDepthError = false;
-};
-Q_DECLARE_TYPEINFO(QmlMarkupVisitor::ExtraType, Q_PRIMITIVE_TYPE);
-#endif
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/qmlpropertynode.cpp b/src/qdoc/qmlpropertynode.cpp
deleted file mode 100644
index d83aa5160..000000000
--- a/src/qdoc/qmlpropertynode.cpp
+++ /dev/null
@@ -1,160 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qmlpropertynode.h"
-
-#include "classnode.h"
-#include "propertynode.h"
-#include "qdocdatabase.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- Constructor for the QML property node.
- */
-QmlPropertyNode::QmlPropertyNode(Aggregate *parent, const QString &name, const QString &type,
- bool attached)
- : Node(parent->isJsType() ? JsProperty : QmlProperty, parent, name),
- m_type(type),
- m_attached(attached)
-{
- if (m_type == "alias")
- m_isAlias = true;
- if (name.startsWith("__"))
- setStatus(Internal);
-}
-
-/*!
- Returns \c true if a QML property or attached property is
- not read-only. The algorithm for figuring this out is long
- amd tedious and almost certainly will break. It currently
- doesn't work for the qmlproperty:
-
- \code
- bool PropertyChanges::explicit,
- \endcode
-
- ...because the tokenizer gets confused on \e{explicit}.
- */
-bool QmlPropertyNode::isWritable()
-{
- if (readOnly_ != FlagValueDefault)
- return !fromFlagValue(readOnly_, false);
-
- QmlTypeNode *qcn = qmlTypeNode();
- if (qcn) {
- if (qcn->cppClassRequired()) {
- if (qcn->classNode()) {
- PropertyNode *pn = findCorrespondingCppProperty();
- if (pn)
- return pn->isWritable();
- else
- defLocation().warning(
- QStringLiteral(
- "No Q_PROPERTY for QML property %1::%2::%3 "
- "in C++ class documented as QML type: "
- "(property not found in the C++ class or its base classes)")
- .arg(logicalModuleName())
- .arg(qmlTypeName())
- .arg(name()));
- } else
- defLocation().warning(QStringLiteral("No Q_PROPERTY for QML property %1::%2::%3 "
- "in C++ class documented as QML type: "
- "(C++ class not specified or not found).")
- .arg(logicalModuleName())
- .arg(qmlTypeName())
- .arg(name()));
- }
- }
- return true;
-}
-
-/*!
- Returns \c true if this QML property is marked with \required or the
- corresponding C++ property uses the REQUIRED keyword.
-*/
-bool QmlPropertyNode::isRequired()
-{
- if (m_required != FlagValueDefault)
- return fromFlagValue(m_required, false);
-
- PropertyNode *pn = findCorrespondingCppProperty();
- return pn ? pn->isRequired() : false;
-}
-
-/*!
- Returns a pointer this QML property's corresponding C++
- property, if it has one.
- */
-PropertyNode *QmlPropertyNode::findCorrespondingCppProperty()
-{
- PropertyNode *pn;
- Node *n = parent();
- while (n && !(n->isQmlType() || n->isJsType()))
- n = n->parent();
- if (n) {
- QmlTypeNode *qcn = static_cast<QmlTypeNode *>(n);
- ClassNode *cn = qcn->classNode();
- if (cn) {
- /*
- If there is a dot in the property name, first
- find the C++ property corresponding to the QML
- property group.
- */
- QStringList dotSplit = name().split(QChar('.'));
- pn = cn->findPropertyNode(dotSplit[0]);
- if (pn) {
- /*
- Now find the C++ property corresponding to
- the QML property in the QML property group,
- <group>.<property>.
- */
- if (dotSplit.size() > 1) {
- QStringList path(extractClassName(pn->qualifiedDataType()));
- Node *nn = QDocDatabase::qdocDB()->findClassNode(path);
- if (nn) {
- ClassNode *cn = static_cast<ClassNode *>(nn);
- PropertyNode *pn2 = cn->findPropertyNode(dotSplit[1]);
- /*
- If found, return the C++ property
- corresponding to the QML property.
- Otherwise, return the C++ property
- corresponding to the QML property
- group.
- */
- return (pn2 ? pn2 : pn);
- }
- } else
- return pn;
- }
- }
- }
- return nullptr;
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/qmlpropertynode.h b/src/qdoc/qmlpropertynode.h
deleted file mode 100644
index e3c63e328..000000000
--- a/src/qdoc/qmlpropertynode.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMLPROPERTYNODE_H
-#define QMLPROPERTYNODE_H
-
-#include "aggregate.h"
-#include "node.h"
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-class QmlPropertyNode : public Node
-{
-public:
- QmlPropertyNode(Aggregate *parent, const QString &name, const QString &type, bool attached);
-
- void setDataType(const QString &dataType) override { m_type = dataType; }
- void setStored(bool stored) { m_stored = toFlagValue(stored); }
- void setDesignable(bool designable) { m_designable = toFlagValue(designable); }
- void setRequired() { m_required = toFlagValue(true); }
-
- const QString &dataType() const { return m_type; }
- QString qualifiedDataType() const { return m_type; }
- bool isReadOnlySet() const { return (readOnly_ != FlagValueDefault); }
- bool isStored() const { return fromFlagValue(m_stored, true); }
- bool isDesignable() const { return fromFlagValue(m_designable, false); }
- bool isWritable();
- bool isRequired();
- bool isDefault() const override { return m_isDefault; }
- bool isReadOnly() const override { return fromFlagValue(readOnly_, false); }
- bool isAlias() const override { return m_isAlias; }
- bool isAttached() const override { return m_attached; }
- bool isQtQuickNode() const override { return parent()->isQtQuickNode(); }
- QString qmlTypeName() const override { return parent()->qmlTypeName(); }
- QString logicalModuleName() const override { return parent()->logicalModuleName(); }
- QString logicalModuleVersion() const override { return parent()->logicalModuleVersion(); }
- QString logicalModuleIdentifier() const override { return parent()->logicalModuleIdentifier(); }
- QString element() const override { return parent()->name(); }
-
- void markDefault() override { m_isDefault = true; }
- void markReadOnly(bool flag) override { readOnly_ = toFlagValue(flag); }
-
-private:
- PropertyNode *findCorrespondingCppProperty();
-
-private:
- QString m_type {};
- FlagValue m_stored { FlagValueDefault };
- FlagValue m_designable { FlagValueDefault };
- bool m_isAlias { false };
- bool m_isDefault { false };
- bool m_attached {};
- FlagValue readOnly_ { FlagValueDefault };
- FlagValue m_required { FlagValueDefault };
-};
-
-QT_END_NAMESPACE
-
-#endif // QMLPROPERTYNODE_H
diff --git a/src/qdoc/qmltypenode.cpp b/src/qdoc/qmltypenode.cpp
deleted file mode 100644
index 05ababb3d..000000000
--- a/src/qdoc/qmltypenode.cpp
+++ /dev/null
@@ -1,159 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qmltypenode.h"
-
-#include "collectionnode.h"
-
-#include <QtCore/qdebug.h>
-
-QT_BEGIN_NAMESPACE
-
-bool QmlTypeNode::qmlOnly = false;
-QMultiMap<const Node *, Node *> QmlTypeNode::inheritedBy;
-
-/*!
- Constructs a Qml type node or a Js type node depending on
- the value of \a type, which is Node::QmlType by default,
- but which can also be Node::JsType. The new node has the
- given \a parent and \a name.
- */
-QmlTypeNode::QmlTypeNode(Aggregate *parent, const QString &name, NodeType type)
- : Aggregate(type, parent, name)
-{
- int i = 0;
- if (name.startsWith("QML:")) {
- qDebug() << "BOGUS QML qualifier:" << name;
- i = 4;
- }
- setTitle(name.mid(i));
-}
-
-/*!
- Clear the static maps so that subsequent runs don't try to use
- contents from a previous run.
- */
-void QmlTypeNode::terminate()
-{
- inheritedBy.clear();
-}
-
-/*!
- Record the fact that QML class \a base is inherited by
- QML class \a sub.
- */
-void QmlTypeNode::addInheritedBy(const Node *base, Node *sub)
-{
- if (sub->isInternal())
- return;
- if (!inheritedBy.contains(base, sub))
- inheritedBy.insert(base, sub);
-}
-
-/*!
- Loads the list \a subs with the nodes of all the subclasses of \a base.
- */
-void QmlTypeNode::subclasses(const Node *base, NodeList &subs)
-{
- subs.clear();
- if (inheritedBy.count(base) > 0) {
- subs = inheritedBy.values(base);
- }
-}
-
-/*!
- If this QML type node has a base type node,
- return the fully qualified name of that QML
- type, i.e. <QML-module-name>::<QML-type-name>.
- */
-QString QmlTypeNode::qmlFullBaseName() const
-{
- QString result;
- if (m_qmlBaseNode) {
- result = m_qmlBaseNode->logicalModuleName() + "::" + m_qmlBaseNode->name();
- }
- return result;
-}
-
-/*!
- If the QML type's QML module pointer is set, return the QML
- module name from the QML module node. Otherwise, return the
- empty string.
- */
-QString QmlTypeNode::logicalModuleName() const
-{
- return (m_logicalModule ? m_logicalModule->logicalModuleName() : QString());
-}
-
-/*!
- If the QML type's QML module pointer is set, return the QML
- module version from the QML module node. Otherwise, return
- the empty string.
- */
-QString QmlTypeNode::logicalModuleVersion() const
-{
- return (m_logicalModule ? m_logicalModule->logicalModuleVersion() : QString());
-}
-
-/*!
- If the QML type's QML module pointer is set, return the QML
- module identifier from the QML module node. Otherwise, return
- the empty string.
- */
-QString QmlTypeNode::logicalModuleIdentifier() const
-{
- return (m_logicalModule ? m_logicalModule->logicalModuleIdentifier() : QString());
-}
-
-/*!
- Returns true if this QML type inherits \a type.
- */
-bool QmlTypeNode::inherits(Aggregate *type)
-{
- QmlTypeNode *qtn = qmlBaseNode();
- while (qtn != nullptr) {
- if (qtn == type)
- return true;
- qtn = qtn->qmlBaseNode();
- }
- return false;
-}
-
-/*!
- Constructs either a Qml basic type node or a Javascript
- basic type node, depending on the value pf \a type, which
- must be either Node::QmlBasicType or Node::JsBasicType.
- The new node has the given \a parent and \a name.
- */
-QmlBasicTypeNode::QmlBasicTypeNode(Aggregate *parent, const QString &name, Node::NodeType type)
- : Aggregate(type, parent, name)
-{
- setTitle(name);
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/qmltypenode.h b/src/qdoc/qmltypenode.h
deleted file mode 100644
index 81a20232e..000000000
--- a/src/qdoc/qmltypenode.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMLTYPENODE_H
-#define QMLTYPENODE_H
-
-#include "importrec.h"
-#include "aggregate.h"
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qlist.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-class ClassNode;
-class CollectionNode;
-
-typedef QList<ImportRec> ImportList;
-
-class QmlTypeNode : public Aggregate
-{
-public:
- QmlTypeNode(Aggregate *parent, const QString &name, NodeType type = QmlType);
- bool isFirstClassAggregate() const override { return true; }
- bool isQtQuickNode() const override
- {
- return (logicalModuleName() == QLatin1String("QtQuick"));
- }
- ClassNode *classNode() override { return m_classNode; }
- void setClassNode(ClassNode *cn) override { m_classNode = cn; }
- bool isAbstract() const override { return m_abstract; }
- bool isWrapper() const override { return m_wrapper; }
- void setAbstract(bool b) override { m_abstract = b; }
- void setWrapper() override { m_wrapper = true; }
- bool isInternal() const override { return (status() == Internal); }
- QString qmlFullBaseName() const override;
- QString obsoleteLink() const override { return m_obsoleteLink; }
- void setObsoleteLink(const QString &t) override { m_obsoleteLink = t; }
- QString logicalModuleName() const override;
- QString logicalModuleVersion() const override;
- QString logicalModuleIdentifier() const override;
- CollectionNode *logicalModule() const override { return m_logicalModule; }
- void setQmlModule(CollectionNode *t) override { m_logicalModule = t; }
-
- const ImportList &importList() const { return m_importList; }
- void setImportList(const ImportList &il) { m_importList = il; }
- const QString &qmlBaseName() const { return m_qmlBaseName; }
- void setQmlBaseName(const QString &name) { m_qmlBaseName = name; }
- QmlTypeNode *qmlBaseNode() const override { return m_qmlBaseNode; }
- void setQmlBaseNode(QmlTypeNode *b) { m_qmlBaseNode = b; }
- void requireCppClass() { m_classNodeRequired = true; }
- bool cppClassRequired() const { return m_classNodeRequired; }
- static void addInheritedBy(const Node *base, Node *sub);
- static void subclasses(const Node *base, NodeList &subs);
- static void terminate();
- bool inherits(Aggregate *type);
-
-public:
- static bool qmlOnly;
- static QMultiMap<const Node *, Node *> inheritedBy;
-
-private:
- bool m_abstract { false };
- bool m_classNodeRequired { false };
- bool m_wrapper { false };
- ClassNode *m_classNode { nullptr };
- QString m_qmlBaseName {};
- QString m_obsoleteLink {};
- CollectionNode *m_logicalModule { nullptr };
- QmlTypeNode *m_qmlBaseNode { nullptr };
- ImportList m_importList {};
-};
-
-class QmlBasicTypeNode : public Aggregate
-{
-public:
- QmlBasicTypeNode(Aggregate *parent, const QString &name, NodeType type = QmlBasicType);
- bool isFirstClassAggregate() const override { return true; }
-};
-
-QT_END_NAMESPACE
-
-#endif // QMLTYPENODE_H
diff --git a/src/qdoc/qmlvisitor.cpp b/src/qdoc/qmlvisitor.cpp
deleted file mode 100644
index fd55cec73..000000000
--- a/src/qdoc/qmlvisitor.cpp
+++ /dev/null
@@ -1,763 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qmlvisitor.h"
-
-#include "aggregate.h"
-#include "codechunk.h"
-#include "codeparser.h"
-#include "functionnode.h"
-#include "node.h"
-#include "qdocdatabase.h"
-#include "qmlpropertynode.h"
-#include "tokenizer.h"
-
-#include <QtCore/qdebug.h>
-#include <QtCore/qfileinfo.h>
-#include <QtCore/qglobal.h>
-#include <QtCore/qstringlist.h>
-
-#ifndef QT_NO_DECLARATIVE
-# include <private/qqmljsast_p.h>
-# include <private/qqmljsastfwd_p.h>
-# include <private/qqmljsengine_p.h>
-#endif
-
-QT_BEGIN_NAMESPACE
-
-#ifndef QT_NO_DECLARATIVE
-/*!
- The constructor stores all the parameters in local data members.
- */
-QmlDocVisitor::QmlDocVisitor(const QString &filePath, const QString &code, QQmlJS::Engine *engine,
- const QSet<QString> &commands, const QSet<QString> &topics)
- : nestingLevel(0)
-{
- lastEndOffset = 0;
- this->filePath_ = filePath;
- this->name = QFileInfo(filePath).baseName();
- document = code;
- this->engine = engine;
- this->commands_ = commands;
- this->topics_ = topics;
- current = QDocDatabase::qdocDB()->primaryTreeRoot();
-}
-
-/*!
- The destructor does nothing.
- */
-QmlDocVisitor::~QmlDocVisitor()
-{
- // nothing.
-}
-
-/*!
- Returns the location of the nearest comment above the \a offset.
- */
-QQmlJS::SourceLocation QmlDocVisitor::precedingComment(quint32 offset) const
-{
- const auto comments = engine->comments();
- for (auto it = comments.rbegin(); it != comments.rend(); ++it) {
- QQmlJS::SourceLocation loc = *it;
-
- if (loc.begin() <= lastEndOffset) {
- // Return if we reach the end of the preceding structure.
- break;
- } else if (usedComments.contains(loc.begin())) {
- // Return if we encounter a previously used comment.
- break;
- } else if (loc.begin() > lastEndOffset && loc.end() < offset) {
- // Only examine multiline comments in order to avoid snippet markers.
- if (document.at(loc.offset - 1) == QLatin1Char('*')) {
- QString comment = document.mid(loc.offset, loc.length);
- if (comment.startsWith(QLatin1Char('!')) || comment.startsWith(QLatin1Char('*'))) {
- return loc;
- }
- }
- }
- }
-
- return QQmlJS::SourceLocation();
-}
-
-class QmlSignatureParser
-{
-public:
- QmlSignatureParser(FunctionNode *func, const QString &signature, const Location &loc);
- void readToken() { tok_ = tokenizer_->getToken(); }
- QString lexeme() { return tokenizer_->lexeme(); }
- QString previousLexeme() { return tokenizer_->previousLexeme(); }
-
- bool match(int target);
- bool matchTypeAndName(CodeChunk *type, QString *var);
- bool matchParameter();
- bool matchFunctionDecl();
-
-private:
- QString signature_;
- QStringList names_;
- QString funcName_;
- Tokenizer *tokenizer_;
- int tok_;
- FunctionNode *func_;
- const Location &location_;
-};
-
-/*!
- Finds the nearest unused qdoc comment above the QML entity
- represented by the \a node and processes the qdoc commands
- in that comment. The processed documentation is stored in
- the \a node.
-
- If a qdoc comment is found for \a location, true is returned.
- If a comment is not found there, false is returned.
- */
-bool QmlDocVisitor::applyDocumentation(QQmlJS::SourceLocation location, Node *node)
-{
- QQmlJS::SourceLocation loc = precedingComment(location.begin());
-
- if (loc.isValid()) {
- QString source = document.mid(loc.offset, loc.length);
- Location start(filePath_);
- start.setLineNo(loc.startLine);
- start.setColumnNo(loc.startColumn);
- Location finish(filePath_);
- finish.setLineNo(loc.startLine);
- finish.setColumnNo(loc.startColumn);
-
- Doc doc(start, finish, source.mid(1), commands_, topics_);
- const TopicList &topicsUsed = doc.topicsUsed();
- NodeList nodes;
- Node *nodePassedIn = node;
- Aggregate *parent = nodePassedIn->parent();
- node->setDoc(doc);
- nodes.append(node);
- if (topicsUsed.size() > 0) {
- for (int i = 0; i < topicsUsed.size(); ++i) {
- QString topic = topicsUsed.at(i).topic;
- if (!topic.startsWith(QLatin1String("qml"))
- && !topic.startsWith(QLatin1String("js")))
- continue; // maybe a qdoc warning here? mws 18/07/18
- QString args = topicsUsed.at(i).args;
- if (topic == COMMAND_JSTYPE) {
- node->changeType(Node::QmlType, Node::JsType);
- } else if (topic.endsWith(QLatin1String("property"))) {
- QmlPropArgs qpa;
- if (splitQmlPropertyArg(doc, args, qpa)) {
- if (qpa.name_ == nodePassedIn->name()) {
- if (nodePassedIn->isAlias())
- nodePassedIn->setDataType(qpa.type_);
- } else {
- bool isAttached = topic.contains(QLatin1String("attached"));
- QmlPropertyNode *n = parent->hasQmlProperty(qpa.name_, isAttached);
- if (n == nullptr)
- n = new QmlPropertyNode(parent, qpa.name_, qpa.type_, isAttached);
- n->setLocation(doc.location());
- n->setDoc(doc);
- n->markReadOnly(nodePassedIn->isReadOnly());
- if (nodePassedIn->isDefault())
- n->markDefault();
- if (isAttached)
- n->markReadOnly(0);
- if ((topic == COMMAND_JSPROPERTY)
- || (topic == COMMAND_JSATTACHEDPROPERTY))
- n->changeType(Node::QmlProperty, Node::JsProperty);
- nodes.append(n);
- }
- } else
- qDebug() << " FAILED TO PARSE QML OR JS PROPERTY:" << topic << args;
- } else if (topic.endsWith(QLatin1String("method")) || topic == COMMAND_QMLSIGNAL) {
- if (node->isFunction()) {
- FunctionNode *fn = static_cast<FunctionNode *>(node);
- QmlSignatureParser qsp(fn, args, doc.location());
- if (topic == COMMAND_JSMETHOD || topic == COMMAND_JSATTACHEDMETHOD)
- fn->changeMetaness(FunctionNode::QmlMethod, FunctionNode::JsMethod);
- }
- }
- }
- }
- for (int i = 0; i < nodes.size(); ++i)
- applyMetacommands(loc, nodes.at(i), doc);
- usedComments.insert(loc.offset);
- if (doc.isEmpty()) {
- return false;
- }
- return true;
- }
- Location codeLoc(filePath_);
- codeLoc.setLineNo(location.startLine);
- node->setLocation(codeLoc);
- return false;
-}
-
-QmlSignatureParser::QmlSignatureParser(FunctionNode *func, const QString &signature,
- const Location &loc)
- : signature_(signature), func_(func), location_(loc)
-{
- QByteArray latin1 = signature.toLatin1();
- Tokenizer stringTokenizer(location_, latin1);
- stringTokenizer.setParsingFnOrMacro(true);
- tokenizer_ = &stringTokenizer;
- readToken();
- matchFunctionDecl();
-}
-
-/*!
- If the current token matches \a target, read the next
- token and return true. Otherwise, don't read the next
- token, and return false.
- */
-bool QmlSignatureParser::match(int target)
-{
- if (tok_ == target) {
- readToken();
- return true;
- }
- return false;
-}
-
-/*!
- Parse a QML data type into \a type and an optional
- variable name into \a var.
- */
-bool QmlSignatureParser::matchTypeAndName(CodeChunk *type, QString *var)
-{
- /*
- This code is really hard to follow... sorry. The loop is there to match
- Alpha::Beta::Gamma::...::Omega.
- */
- for (;;) {
- bool virgin = true;
-
- if (tok_ != Tok_Ident) {
- while (match(Tok_signed) || match(Tok_unsigned) || match(Tok_short) || match(Tok_long)
- || match(Tok_int64)) {
- type->append(previousLexeme());
- virgin = false;
- }
- }
-
- if (virgin) {
- if (match(Tok_Ident)) {
- type->append(previousLexeme());
- } else if (match(Tok_void) || match(Tok_int) || match(Tok_char) || match(Tok_double)
- || match(Tok_Ellipsis))
- type->append(previousLexeme());
- else
- return false;
- } else if (match(Tok_int) || match(Tok_char) || match(Tok_double)) {
- type->append(previousLexeme());
- }
-
- if (match(Tok_Gulbrandsen))
- type->append(previousLexeme());
- else
- break;
- }
-
- while (match(Tok_Ampersand) || match(Tok_Aster) || match(Tok_const) || match(Tok_Caret))
- type->append(previousLexeme());
-
- /*
- The usual case: Look for an optional identifier, then for
- some array brackets.
- */
- type->appendHotspot();
-
- if ((var != nullptr) && match(Tok_Ident))
- *var = previousLexeme();
-
- if (tok_ == Tok_LeftBracket) {
- int bracketDepth0 = tokenizer_->bracketDepth();
- while ((tokenizer_->bracketDepth() >= bracketDepth0 && tok_ != Tok_Eoi)
- || tok_ == Tok_RightBracket) {
- type->append(lexeme());
- readToken();
- }
- }
- return true;
-}
-
-bool QmlSignatureParser::matchParameter()
-{
- QString name;
- CodeChunk type;
- CodeChunk defaultValue;
-
- bool result = matchTypeAndName(&type, &name);
- if (name.isEmpty()) {
- name = type.toString();
- type.clear();
- }
-
- if (!result)
- return false;
- if (match(Tok_Equal)) {
- int parenDepth0 = tokenizer_->parenDepth();
- while (tokenizer_->parenDepth() >= parenDepth0
- && (tok_ != Tok_Comma || tokenizer_->parenDepth() > parenDepth0)
- && tok_ != Tok_Eoi) {
- defaultValue.append(lexeme());
- readToken();
- }
- }
- func_->parameters().append(type.toString(), name, defaultValue.toString());
- return true;
-}
-
-bool QmlSignatureParser::matchFunctionDecl()
-{
- CodeChunk returnType;
-
- int firstBlank = signature_.indexOf(QChar(' '));
- int leftParen = signature_.indexOf(QChar('('));
- if ((firstBlank > 0) && (leftParen - firstBlank) > 1) {
- if (!matchTypeAndName(&returnType, nullptr))
- return false;
- }
-
- while (match(Tok_Ident)) {
- names_.append(previousLexeme());
- if (!match(Tok_Gulbrandsen)) {
- funcName_ = previousLexeme();
- names_.pop_back();
- break;
- }
- }
-
- if (tok_ != Tok_LeftParen)
- return false;
- /*
- Parsing the parameters should be moved into class Parameters,
- but it can wait. mws 14/12/2018
- */
- readToken();
-
- func_->setLocation(location_);
- func_->setReturnType(returnType.toString());
-
- if (tok_ != Tok_RightParen) {
- func_->parameters().clear();
- do {
- if (!matchParameter())
- return false;
- } while (match(Tok_Comma));
- }
- if (!match(Tok_RightParen))
- return false;
- return true;
-}
-
-/*!
- A QML property argument has the form...
-
- <type> <component>::<name>
- <type> <QML-module>::<component>::<name>
-
- This function splits the argument into one of those
- two forms. The three part form is the old form, which
- was used before the creation of QtQuick 2 and Qt
- Components. A <QML-module> is the QML equivalent of a
- C++ namespace. So this function splits \a arg on "::"
- and stores the parts in the \e {type}, \e {module},
- \e {component}, and \a {name}, fields of \a qpa. If it
- is successful, it returns \c true. If not enough parts
- are found, a qdoc warning is emitted and false is
- returned.
- */
-bool QmlDocVisitor::splitQmlPropertyArg(const Doc &doc, const QString &arg, QmlPropArgs &qpa)
-{
- qpa.clear();
- QStringList blankSplit = arg.split(QLatin1Char(' '));
- if (blankSplit.size() > 1) {
- qpa.type_ = blankSplit[0];
- QStringList colonSplit(blankSplit[1].split("::"));
- if (colonSplit.size() == 3) {
- qpa.module_ = colonSplit[0];
- qpa.component_ = colonSplit[1];
- qpa.name_ = colonSplit[2];
- return true;
- } else if (colonSplit.size() == 2) {
- qpa.component_ = colonSplit[0];
- qpa.name_ = colonSplit[1];
- return true;
- } else if (colonSplit.size() == 1) {
- qpa.name_ = colonSplit[0];
- return true;
- }
- doc.location().warning(
- QStringLiteral("Unrecognizable QML module/component qualifier for %1.").arg(arg));
- } else {
- doc.location().warning(QStringLiteral("Missing property type for %1.").arg(arg));
- }
- return false;
-}
-
-/*!
- Applies the metacommands found in the comment.
- */
-void QmlDocVisitor::applyMetacommands(QQmlJS::SourceLocation, Node *node, Doc &doc)
-{
- QDocDatabase *qdb = QDocDatabase::qdocDB();
- QSet<QString> metacommands = doc.metaCommandsUsed();
- if (metacommands.count() > 0) {
- metacommands.subtract(topics_);
- for (const auto &command : qAsConst(metacommands)) {
- const ArgList args = doc.metaCommandArgs(command);
- if ((command == COMMAND_QMLABSTRACT) || (command == COMMAND_ABSTRACT)) {
- if (node->isQmlType() || node->isJsType()) {
- node->setAbstract(true);
- }
- } else if (command == COMMAND_DEPRECATED) {
- node->setStatus(Node::Obsolete);
- } else if ((command == COMMAND_INQMLMODULE) || (command == COMMAND_INJSMODULE)) {
- qdb->addToQmlModule(args[0].first, node);
- } else if (command == COMMAND_QMLINHERITS) {
- if (node->name() == args[0].first)
- doc.location().warning(
- QStringLiteral("%1 tries to inherit itself").arg(args[0].first));
- else if (node->isQmlType() || node->isJsType()) {
- QmlTypeNode *qmlType = static_cast<QmlTypeNode *>(node);
- qmlType->setQmlBaseName(args[0].first);
- }
- } else if (command == COMMAND_QMLDEFAULT) {
- node->markDefault();
- } else if (command == COMMAND_QMLREADONLY) {
- node->markReadOnly(1);
- } else if (command == COMMAND_QMLREQUIRED) {
- if (node->isQmlProperty())
- static_cast<QmlPropertyNode *>(node)->setRequired();
- } else if ((command == COMMAND_INGROUP) && !args.isEmpty()) {
- for (const auto &argument : args)
- QDocDatabase::qdocDB()->addToGroup(argument.first, node);
- } else if (command == COMMAND_INTERNAL) {
- node->setStatus(Node::Internal);
- } else if (command == COMMAND_OBSOLETE) {
- node->setStatus(Node::Obsolete);
- } else if (command == COMMAND_PRELIMINARY) {
- node->setStatus(Node::Preliminary);
- } else if (command == COMMAND_SINCE) {
- QString arg = args[0].first; //.join(' ');
- node->setSince(arg);
- } else if (command == COMMAND_WRAPPER) {
- node->setWrapper();
- } else {
- doc.location().warning(
- QStringLiteral("The \\%1 command is ignored in QML files").arg(command));
- }
- }
- }
-}
-
-/*!
- Reconstruct the qualified \a id using dot notation
- and return the fully qualified string.
- */
-QString QmlDocVisitor::getFullyQualifiedId(QQmlJS::AST::UiQualifiedId *id)
-{
- QString result;
- if (id) {
- result = id->name.toString();
- id = id->next;
- while (id != nullptr) {
- result += QChar('.') + id->name.toString();
- id = id->next;
- }
- }
- return result;
-}
-
-/*!
- Begin the visit of the object \a definition, recording it in the
- qdoc database. Increment the object nesting level, which is used
- to test whether we are at the public API level. The public level
- is level 1.
-
- Note that this visit() function creates the qdoc object node as a
- QmlType. If it is actually a JsType, this fact is discovered when
- the qdoc comment is applied to the node. The node's typet is then
- changed to JsType.
- */
-bool QmlDocVisitor::visit(QQmlJS::AST::UiObjectDefinition *definition)
-{
- QString type = getFullyQualifiedId(definition->qualifiedTypeNameId);
- nestingLevel++;
-
- if (current->isNamespace()) {
- QmlTypeNode *component = nullptr;
- Node *candidate = current->findChildNode(name, Node::QML);
- if (candidate != nullptr)
- component = static_cast<QmlTypeNode *>(candidate);
- else
- component = new QmlTypeNode(current, name);
- component->setTitle(name);
- component->setImportList(importList);
- importList.clear();
- if (applyDocumentation(definition->firstSourceLocation(), component))
- component->setQmlBaseName(type);
- current = component;
- }
-
- return true;
-}
-
-/*!
- End the visit of the object \a definition. In particular,
- decrement the object nesting level, which is used to test
- whether we are at the public API level. The public API
- level is level 1. It won't decrement below 0.
- */
-void QmlDocVisitor::endVisit(QQmlJS::AST::UiObjectDefinition *definition)
-{
- if (nestingLevel > 0) {
- --nestingLevel;
- }
- lastEndOffset = definition->lastSourceLocation().end();
-}
-
-bool QmlDocVisitor::visit(QQmlJS::AST::UiImport *import)
-{
- QString name = document.mid(import->fileNameToken.offset, import->fileNameToken.length);
- if (name[0] == '\"')
- name = name.mid(1, name.length() - 2);
- QString version;
- if (import->version) {
- const auto start = import->version->firstSourceLocation().begin();
- const auto end = import->version->lastSourceLocation().end();
- version = document.mid(start, end - start);
- }
- QString importId = document.mid(import->importIdToken.offset, import->importIdToken.length);
- QString importUri = getFullyQualifiedId(import->importUri);
- importList.append(ImportRec(name, version, importId, importUri));
-
- return true;
-}
-
-void QmlDocVisitor::endVisit(QQmlJS::AST::UiImport *definition)
-{
- lastEndOffset = definition->lastSourceLocation().end();
-}
-
-bool QmlDocVisitor::visit(QQmlJS::AST::UiObjectBinding *)
-{
- ++nestingLevel;
- return true;
-}
-
-void QmlDocVisitor::endVisit(QQmlJS::AST::UiObjectBinding *)
-{
- --nestingLevel;
-}
-
-bool QmlDocVisitor::visit(QQmlJS::AST::UiArrayBinding *)
-{
- return true;
-}
-
-void QmlDocVisitor::endVisit(QQmlJS::AST::UiArrayBinding *) {}
-
-template<typename T>
-QString qualifiedIdToString(T node);
-
-template<>
-QString qualifiedIdToString(QStringView node)
-{
- return node.toString();
-}
-
-template<>
-QString qualifiedIdToString(QQmlJS::AST::UiQualifiedId *node)
-{
- QString s;
-
- for (QQmlJS::AST::UiQualifiedId *it = node; it; it = it->next) {
- s.append(it->name);
-
- if (it->next)
- s.append(QLatin1Char('.'));
- }
-
- return s;
-}
-
-/*!
- Visits the public \a member declaration, which can be a
- signal or a property. It is a custom signal or property.
- Only visit the \a member if the nestingLevel is 1.
- */
-bool QmlDocVisitor::visit(QQmlJS::AST::UiPublicMember *member)
-{
- if (nestingLevel > 1) {
- return true;
- }
- switch (member->type) {
- case QQmlJS::AST::UiPublicMember::Signal: {
- if (current->isQmlType() || current->isJsType()) {
- QmlTypeNode *qmlType = static_cast<QmlTypeNode *>(current);
- if (qmlType) {
- FunctionNode::Metaness metaness = FunctionNode::QmlSignal;
- if (qmlType->isJsType())
- metaness = FunctionNode::JsSignal;
- QString name = member->name.toString();
- FunctionNode *newSignal = new FunctionNode(metaness, current, name);
- Parameters &parameters = newSignal->parameters();
- for (QQmlJS::AST::UiParameterList *it = member->parameters; it; it = it->next) {
- const QString type = qualifiedIdToString(it->type);
- if (!type.isEmpty() && !it->name.isEmpty())
- parameters.append(type, QString(), it->name.toString());
- }
- applyDocumentation(member->firstSourceLocation(), newSignal);
- }
- }
- break;
- }
- case QQmlJS::AST::UiPublicMember::Property: {
- QString type = qualifiedIdToString(member->memberType);
- QString name = member->name.toString();
- if (current->isQmlType() || current->isJsType()) {
- QmlTypeNode *qmlType = static_cast<QmlTypeNode *>(current);
- if (qmlType) {
- QString name = member->name.toString();
- QmlPropertyNode *qmlPropNode = qmlType->hasQmlProperty(name);
- if (qmlPropNode == nullptr)
- qmlPropNode = new QmlPropertyNode(qmlType, name, type, false);
- qmlPropNode->markReadOnly(member->isReadonlyMember);
- if (member->isDefaultMember)
- qmlPropNode->markDefault();
- if (member->requiredToken.isValid())
- qmlPropNode->setRequired();
- applyDocumentation(member->firstSourceLocation(), qmlPropNode);
- }
- }
- break;
- }
- default:
- return false;
- }
-
- return true;
-}
-
-/*!
- End the visit of the \a member.
- */
-void QmlDocVisitor::endVisit(QQmlJS::AST::UiPublicMember *member)
-{
- lastEndOffset = member->lastSourceLocation().end();
-}
-
-bool QmlDocVisitor::visit(QQmlJS::AST::IdentifierPropertyName *)
-{
- return true;
-}
-
-/*!
- Begin the visit of the function declaration \a fd, but only
- if the nesting level is 1.
- */
-bool QmlDocVisitor::visit(QQmlJS::AST::FunctionDeclaration *fd)
-{
- if (nestingLevel <= 1) {
- FunctionNode::Metaness metaness = FunctionNode::QmlMethod;
- if (current->isJsType())
- metaness = FunctionNode::JsMethod;
- else if (!current->isQmlType())
- return true;
- QString name = fd->name.toString();
- FunctionNode *method = new FunctionNode(metaness, current, name);
- Parameters &parameters = method->parameters();
- QQmlJS::AST::FormalParameterList *formals = fd->formals;
- if (formals) {
- QQmlJS::AST::FormalParameterList *fp = formals;
- do {
- QString defaultValue;
- auto initializer = fp->element->initializer;
- if (initializer) {
- auto loc = initializer->firstSourceLocation();
- defaultValue = document.mid(loc.begin(), loc.length);
- }
- parameters.append(QString(), fp->element->bindingIdentifier.toString(),
- defaultValue);
- fp = fp->next;
- } while (fp && fp != formals);
- }
- applyDocumentation(fd->firstSourceLocation(), method);
- }
- return true;
-}
-
-/*!
- End the visit of the function declaration, \a fd.
- */
-void QmlDocVisitor::endVisit(QQmlJS::AST::FunctionDeclaration *fd)
-{
- lastEndOffset = fd->lastSourceLocation().end();
-}
-
-/*!
- Begin the visit of the signal handler declaration \a sb, but only
- if the nesting level is 1.
-
- This visit is now deprecated. It has been decided to document
- public signals. If a signal handler must be discussed in the
- documentation, that discussion must take place in the comment
- for the signal.
- */
-bool QmlDocVisitor::visit(QQmlJS::AST::UiScriptBinding *)
-{
- return true;
-}
-
-void QmlDocVisitor::endVisit(QQmlJS::AST::UiScriptBinding *sb)
-{
- lastEndOffset = sb->lastSourceLocation().end();
-}
-
-bool QmlDocVisitor::visit(QQmlJS::AST::UiQualifiedId *)
-{
- return true;
-}
-
-void QmlDocVisitor::endVisit(QQmlJS::AST::UiQualifiedId *)
-{
- // nothing.
-}
-
-void QmlDocVisitor::throwRecursionDepthError()
-{
- hasRecursionDepthError = true;
-}
-
-bool QmlDocVisitor::hasError() const
-{
- return hasRecursionDepthError;
-}
-
-#endif
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/qmlvisitor.h b/src/qdoc/qmlvisitor.h
deleted file mode 100644
index 578de7997..000000000
--- a/src/qdoc/qmlvisitor.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMLVISITOR_H
-#define QMLVISITOR_H
-
-#include "node.h"
-#include "qmltypenode.h"
-
-#include <QtCore/qstring.h>
-
-#ifndef QT_NO_DECLARATIVE
-# include <private/qqmljsastvisitor_p.h>
-# include <private/qqmljsengine_p.h>
-#endif
-
-QT_BEGIN_NAMESPACE
-
-#ifndef QT_NO_DECLARATIVE
-# include <private/qqmlapiversion_p.h>
-# if Q_QML_PRIVATE_API_VERSION < 8
-namespace QQmlJS {
- using SourceLocation = AST::SourceLocation;
-}
-# endif
-#endif
-
-class Aggregate;
-
-struct QmlPropArgs
-{
- QString type_;
- QString module_;
- QString component_;
- QString name_;
-
- void clear()
- {
- type_.clear();
- module_.clear();
- component_.clear();
- name_.clear();
- }
-};
-
-#ifndef QT_NO_DECLARATIVE
-class QmlDocVisitor : public QQmlJS::AST::Visitor
-{
-public:
- QmlDocVisitor(const QString &filePath, const QString &code, QQmlJS::Engine *engine,
- const QSet<QString> &commands, const QSet<QString> &topics);
- ~QmlDocVisitor() override;
-
- bool visit(QQmlJS::AST::UiImport *import) override;
- void endVisit(QQmlJS::AST::UiImport *definition) override;
-
- bool visit(QQmlJS::AST::UiObjectDefinition *definition) override;
- void endVisit(QQmlJS::AST::UiObjectDefinition *definition) override;
-
- bool visit(QQmlJS::AST::UiPublicMember *member) override;
- void endVisit(QQmlJS::AST::UiPublicMember *definition) override;
-
- bool visit(QQmlJS::AST::UiObjectBinding *) override;
- void endVisit(QQmlJS::AST::UiObjectBinding *) override;
- void endVisit(QQmlJS::AST::UiArrayBinding *) override;
- bool visit(QQmlJS::AST::UiArrayBinding *) override;
-
- bool visit(QQmlJS::AST::IdentifierPropertyName *idproperty) override;
-
- bool visit(QQmlJS::AST::FunctionDeclaration *) override;
- void endVisit(QQmlJS::AST::FunctionDeclaration *) override;
-
- bool visit(QQmlJS::AST::UiScriptBinding *) override;
- void endVisit(QQmlJS::AST::UiScriptBinding *) override;
-
- bool visit(QQmlJS::AST::UiQualifiedId *) override;
- void endVisit(QQmlJS::AST::UiQualifiedId *) override;
-
- void throwRecursionDepthError() final;
- bool hasError() const;
-
-private:
- QString getFullyQualifiedId(QQmlJS::AST::UiQualifiedId *id);
- QQmlJS::SourceLocation precedingComment(quint32 offset) const;
- bool applyDocumentation(QQmlJS::SourceLocation location, Node *node);
- void applyMetacommands(QQmlJS::SourceLocation location, Node *node, Doc &doc);
- bool splitQmlPropertyArg(const Doc &doc, const QString &arg, QmlPropArgs &qpa);
-
- QQmlJS::Engine *engine;
- quint32 lastEndOffset;
- quint32 nestingLevel;
- QString filePath_;
- QString name;
- QString document;
- ImportList importList;
- QSet<QString> commands_;
- QSet<QString> topics_;
- QSet<quint32> usedComments;
- Aggregate *current;
- bool hasRecursionDepthError = false;
-};
-#endif
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/quoter.cpp b/src/qdoc/quoter.cpp
deleted file mode 100644
index bbe0c685d..000000000
--- a/src/qdoc/quoter.cpp
+++ /dev/null
@@ -1,364 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "quoter.h"
-
-#include <QtCore/qdebug.h>
-#include <QtCore/qfileinfo.h>
-#include <QtCore/qregularexpression.h>
-
-QT_BEGIN_NAMESPACE
-
-QHash<QString, QString> Quoter::commentHash;
-
-static void replaceMultipleNewlines(QString &s)
-{
- const int n = s.size();
- bool slurping = false;
- int j = -1;
- const QChar newLine = QLatin1Char('\n');
- QChar *d = s.data();
- for (int i = 0; i != n; ++i) {
- const QChar c = d[i];
- bool hit = (c == newLine);
- if (slurping && hit)
- continue;
- d[++j] = c;
- slurping = hit;
- }
- s.resize(++j);
-}
-
-// This is equivalent to line.split( QRegularExpression("\n(?!\n|$)") ) but much faster
-QStringList Quoter::splitLines(const QString &line)
-{
- QStringList result;
- int i = line.size();
- while (true) {
- int j = i - 1;
- while (j >= 0 && line.at(j) == QLatin1Char('\n'))
- --j;
- while (j >= 0 && line.at(j) != QLatin1Char('\n'))
- --j;
- result.prepend(line.mid(j + 1, i - j - 1));
- if (j < 0)
- break;
- i = j;
- }
- return result;
-}
-
-/*
- Transforms 'int x = 3 + 4' into 'int x=3+4'. A white space is kept
- between 'int' and 'x' because it is meaningful in C++.
-*/
-static void trimWhiteSpace(QString &str)
-{
- enum { Normal, MetAlnum, MetSpace } state = Normal;
- const int n = str.length();
-
- int j = -1;
- QChar *d = str.data();
- for (int i = 0; i != n; ++i) {
- const QChar c = d[i];
- if (c.isLetterOrNumber()) {
- if (state == Normal) {
- state = MetAlnum;
- } else {
- if (state == MetSpace)
- str[++j] = c;
- state = Normal;
- }
- str[++j] = c;
- } else if (c.isSpace()) {
- if (state == MetAlnum)
- state = MetSpace;
- } else {
- state = Normal;
- str[++j] = c;
- }
- }
- str.resize(++j);
-}
-
-Quoter::Quoter() : silent(false)
-{
- /* We're going to hard code these delimiters:
- * C++, Qt, Qt Script, Java:
- //! [<id>]
- * .pro, .py, CMake files:
- #! [<id>]
- * .html, .qrc, .ui, .xq, .xml files:
- <!-- [<id>] -->
- */
- if (!commentHash.size()) {
- commentHash["pro"] = "#!";
- commentHash["py"] = "#!";
- commentHash["cmake"] = "#!";
- commentHash["html"] = "<!--";
- commentHash["qrc"] = "<!--";
- commentHash["ui"] = "<!--";
- commentHash["xml"] = "<!--";
- commentHash["xq"] = "<!--";
- }
-}
-
-void Quoter::reset()
-{
- silent = false;
- plainLines.clear();
- markedLines.clear();
- codeLocation = Location();
-}
-
-void Quoter::quoteFromFile(const QString &userFriendlyFilePath, const QString &plainCode,
- const QString &markedCode)
-{
- silent = false;
-
- /*
- Split the source code into logical lines. Empty lines are
- treated specially. Before:
-
- p->alpha();
- p->beta();
-
- p->gamma();
-
-
- p->delta();
-
- After:
-
- p->alpha();
- p->beta();\n
- p->gamma();\n\n
- p->delta();
-
- Newlines are preserved because they affect codeLocation.
- */
- codeLocation = Location(userFriendlyFilePath);
-
- plainLines = splitLines(plainCode);
- markedLines = splitLines(markedCode);
- if (markedLines.count() != plainLines.count()) {
- codeLocation.warning(
- QStringLiteral("Something is wrong with qdoc's handling of marked code"));
- markedLines = plainLines;
- }
-
- /*
- Squeeze blanks (cat -s).
- */
- for (auto &line : markedLines)
- replaceMultipleNewlines(line);
- codeLocation.start();
-}
-
-QString Quoter::quoteLine(const Location &docLocation, const QString &command,
- const QString &pattern)
-{
- if (plainLines.isEmpty()) {
- failedAtEnd(docLocation, command);
- return QString();
- }
-
- if (pattern.isEmpty()) {
- docLocation.warning(QStringLiteral("Missing pattern after '\\%1'").arg(command));
- return QString();
- }
-
- if (match(docLocation, pattern, plainLines.first()))
- return getLine();
-
- if (!silent) {
- docLocation.warning(QStringLiteral("Command '\\%1' failed").arg(command));
- codeLocation.warning(QStringLiteral("Pattern '%1' didn't match here").arg(pattern));
- silent = true;
- }
- return QString();
-}
-
-QString Quoter::quoteSnippet(const Location &docLocation, const QString &identifier)
-{
- QString comment = commentForCode();
- QString delimiter = comment + QString(" [%1]").arg(identifier);
- QString t;
- int indent = 0;
-
- while (!plainLines.isEmpty()) {
- if (match(docLocation, delimiter, plainLines.first())) {
- QString startLine = getLine();
- while (indent < startLine.length() && startLine[indent] == QLatin1Char(' '))
- indent++;
- break;
- }
- getLine();
- }
- while (!plainLines.isEmpty()) {
- QString line = plainLines.first();
- if (match(docLocation, delimiter, line)) {
- QString lastLine = getLine(indent);
- int dIndex = lastLine.indexOf(delimiter);
- if (dIndex > 0) {
- // The delimiter might be preceded on the line by other
- // delimeters, so look for the first comment on the line.
- QString leading = lastLine.left(dIndex);
- dIndex = leading.indexOf(comment);
- if (dIndex != -1)
- leading = leading.left(dIndex);
- if (leading.endsWith(QLatin1String("<@comment>")))
- leading.chop(10);
- if (!leading.trimmed().isEmpty())
- t += leading;
- }
- return t;
- }
-
- t += removeSpecialLines(line, comment, indent);
- }
- failedAtEnd(docLocation, QString("snippet (%1)").arg(delimiter));
- return t;
-}
-
-QString Quoter::quoteTo(const Location &docLocation, const QString &command, const QString &pattern)
-{
- QString t;
- QString comment = commentForCode();
-
- if (pattern.isEmpty()) {
- while (!plainLines.isEmpty()) {
- QString line = plainLines.first();
- t += removeSpecialLines(line, comment);
- }
- } else {
- while (!plainLines.isEmpty()) {
- if (match(docLocation, pattern, plainLines.first())) {
- return t;
- }
- t += getLine();
- }
- failedAtEnd(docLocation, command);
- }
- return t;
-}
-
-QString Quoter::quoteUntil(const Location &docLocation, const QString &command,
- const QString &pattern)
-{
- QString t = quoteTo(docLocation, command, pattern);
- t += getLine();
- return t;
-}
-
-QString Quoter::getLine(int unindent)
-{
- if (plainLines.isEmpty())
- return QString();
-
- plainLines.removeFirst();
-
- QString t = markedLines.takeFirst();
- int i = 0;
- while (i < unindent && i < t.length() && t[i] == QLatin1Char(' '))
- i++;
-
- t = t.mid(i);
- t += QLatin1Char('\n');
- codeLocation.advanceLines(t.count(QLatin1Char('\n')));
- return t;
-}
-
-bool Quoter::match(const Location &docLocation, const QString &pattern0, const QString &line)
-{
- QString str = line;
- while (str.endsWith(QLatin1Char('\n')))
- str.truncate(str.length() - 1);
-
- QString pattern = pattern0;
- if (pattern.startsWith(QLatin1Char('/')) && pattern.endsWith(QLatin1Char('/'))
- && pattern.length() > 2) {
- QRegularExpression rx(pattern.mid(1, pattern.length() - 2));
- if (!silent && !rx.isValid()) {
- docLocation.warning(
- QStringLiteral("Invalid regular expression '%1'").arg(rx.pattern()));
- silent = true;
- }
- return str.indexOf(rx) != -1;
- }
- trimWhiteSpace(str);
- trimWhiteSpace(pattern);
- return str.indexOf(pattern) != -1;
-}
-
-void Quoter::failedAtEnd(const Location &docLocation, const QString &command)
-{
- if (!silent && !command.isEmpty()) {
- if (codeLocation.filePath().isEmpty()) {
- docLocation.warning(QStringLiteral("Unexpected '\\%1'").arg(command));
- } else {
- docLocation.warning(QStringLiteral("Command '\\%1' failed at end of file '%2'")
- .arg(command)
- .arg(codeLocation.filePath()));
- }
- silent = true;
- }
-}
-
-QString Quoter::commentForCode() const
-{
- QFileInfo fi = QFileInfo(codeLocation.fileName());
- if (fi.fileName() == "CMakeLists.txt")
- return "#!";
- return commentHash.value(fi.suffix(), "//!");
-}
-
-QString Quoter::removeSpecialLines(const QString &line, const QString &comment, int unindent)
-{
- QString t;
-
- // Remove special macros to support Qt namespacing.
- QString trimmed = line.trimmed();
- if (trimmed.startsWith("QT_BEGIN_NAMESPACE")) {
- getLine();
- } else if (trimmed.startsWith("QT_END_NAMESPACE")) {
- getLine();
- t += QLatin1Char('\n');
- } else if (!trimmed.startsWith(comment)) {
- // Ordinary code
- t += getLine(unindent);
- } else {
- // Comments
- if (line.contains(QLatin1Char('\n')))
- t += QLatin1Char('\n');
- getLine();
- }
- return t;
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/quoter.h b/src/qdoc/quoter.h
deleted file mode 100644
index 44f3ee18a..000000000
--- a/src/qdoc/quoter.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- quoter.h
-*/
-
-#ifndef QUOTER_H
-#define QUOTER_H
-
-#include "location.h"
-
-#include <QtCore/qhash.h>
-#include <QtCore/qstringlist.h>
-
-QT_BEGIN_NAMESPACE
-
-class Quoter
-{
-public:
- Quoter();
-
- void reset();
- void quoteFromFile(const QString &userFriendlyFileName, const QString &plainCode,
- const QString &markedCode);
- QString quoteLine(const Location &docLocation, const QString &command, const QString &pattern);
- QString quoteTo(const Location &docLocation, const QString &command, const QString &pattern);
- QString quoteUntil(const Location &docLocation, const QString &command, const QString &pattern);
- QString quoteSnippet(const Location &docLocation, const QString &identifier);
-
- static QStringList splitLines(const QString &line);
-
-private:
- QString getLine(int unindent = 0);
- void failedAtEnd(const Location &docLocation, const QString &command);
- bool match(const Location &docLocation, const QString &pattern, const QString &line);
- QString commentForCode() const;
- QString removeSpecialLines(const QString &line, const QString &comment, int unindent = 0);
-
- bool silent;
- QStringList plainLines;
- QStringList markedLines;
- Location codeLocation;
- static QHash<QString, QString> commentHash;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/relatedclass.cpp b/src/qdoc/relatedclass.cpp
deleted file mode 100644
index e17668b2f..000000000
--- a/src/qdoc/relatedclass.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "relatedclass.h"
-
-#include "node.h"
-
-/*!
- \struct RelatedClass
- \brief A struct for indicating that a ClassNode is related in some way to another ClassNode.
-
- This struct has nothing to do with the \c {\\relates} command. This struct
- is used for indicating that a ClassNode is a base class of another ClassNode,
- is a derived class of another ClassNode, or is an ignored base class of
- another ClassNode. This struct is only used in ClassNode.
-*/
-
-/*! \fn RelatedClass::RelatedClass()
- The default constructor does nothing. It is only used for allocating empty
- instances of RelatedClass in containers.
- */
-
-/*! \fn RelatedClass::RelatedClass(Access access, ClassNode *node)
- This is the constructor used when the related class has been resolved.
- In other words, when the ClassNode has been created so that \a node is
- not \c nullptr.
-*/
-
-/*! \fn RelatedClass::RelatedClass(Access access, const QStringList &path, const QString &signature)
- This is the constructor used when the related class has not bee resolved,
- because it hasn't been created yet. In that case, we store the qualified
- \a path name of the class and the \a signature of the class, which I think
- is just the name of the class.
-
- \note We might be able to simplify the whole RelatedClass concept. Maybe we
- can get rid of it completely.
-*/
-
-/*! \fn bool RelatedClass::isPrivate() const
- Returns \c true if this RelatedClass is marked as Access::Private.
-*/
-bool RelatedClass::isPrivate() const
-{
- return (m_access == Access::Private);
-}
-
-/*!
- Returns a string representing the access specifier.
- */
-QString RelatedClass::accessString() const
-{
- switch (m_access) {
- case Access::Protected:
- return QLatin1String("protected");
- case Access::Private:
- return QLatin1String("private");
- case Access::Public:
- default:
- break;
- }
- return QLatin1String("public");
-}
diff --git a/src/qdoc/relatedclass.h b/src/qdoc/relatedclass.h
deleted file mode 100644
index e8884a097..000000000
--- a/src/qdoc/relatedclass.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef RELATEDCLASS_H
-#define RELATEDCLASS_H
-
-#include "access.h"
-
-#include <QtCore/qstring.h>
-#include <QtCore/qstringlist.h>
-
-QT_BEGIN_NAMESPACE
-
-class ClassNode;
-
-struct RelatedClass
-{
- RelatedClass() = default;
- // constructor for resolved base class
- RelatedClass(Access access, ClassNode *node) : m_access(access), m_node(node) {}
- // constructor for unresolved base class
- RelatedClass(Access access, const QStringList &path, const QString &signature)
- : m_access(access), m_path(path), m_signature(signature)
- {
- }
- QString accessString() const;
- bool isPrivate() const;
-
- Access m_access {};
- ClassNode *m_node { nullptr };
- QStringList m_path {};
- QString m_signature {};
-};
-
-QT_END_NAMESPACE
-
-#endif // RELATEDCLASS_H
diff --git a/src/qdoc/sections.cpp b/src/qdoc/sections.cpp
deleted file mode 100644
index c4029514d..000000000
--- a/src/qdoc/sections.cpp
+++ /dev/null
@@ -1,1071 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "sections.h"
-
-#include "aggregate.h"
-#include "classnode.h"
-#include "config.h"
-#include "enumnode.h"
-#include "functionnode.h"
-#include "generator.h"
-#include "loggingcategory.h"
-#include "namespacenode.h"
-#include "qmlpropertynode.h"
-#include "qmltypenode.h"
-#include "sharedcommentnode.h"
-#include "typedefnode.h"
-#include "variablenode.h"
-
-#include <QtCore/qobjectdefs.h>
-
-QT_BEGIN_NAMESPACE
-
-// Aggregate *Sections::aggregate_ = nullptr;
-
-static bool sectionsInitialized = false;
-QList<Section> Sections::stdSummarySections_(7, Section(Section::Summary, Section::Active));
-QList<Section> Sections::stdDetailsSections_(7, Section(Section::Details, Section::Active));
-QList<Section> Sections::stdCppClassSummarySections_(18,
- Section(Section::Summary, Section::Active));
-QList<Section> Sections::stdCppClassDetailsSections_(6, Section(Section::Details, Section::Active));
-QList<Section> Sections::sinceSections_(15, Section(Section::Details, Section::Active));
-QList<Section> Sections::allMembers_(1, Section(Section::AllMembers, Section::Active));
-QList<Section> Sections::stdQmlTypeSummarySections_(7, Section(Section::Summary, Section::Active));
-QList<Section> Sections::stdQmlTypeDetailsSections_(7, Section(Section::Details, Section::Active));
-
-/*!
- \class Section
- \brief A class for containing the elements of one documentation section
- */
-
-/*!
- The constructor used when the \a style and \a status must
- be provided.
- */
-Section::Section(Style style, Status status) : style_(style), status_(status), aggregate_(nullptr)
-{
- // members_.reserve(100);
- // obsoleteMembers_.reserve(50);
- // reimplementedMembers_.reserve(50);
-}
-
-/*!
- The destructor must delete the members of collections
- when the members are allocated on the heap.
- */
-Section::~Section()
-{
- clear();
-}
-
-/*!
- A Section is now an element in a static vector, so we
- don't have to repeatedly construct and destroy them. But
- we do need to clear them before each call to build the
- sections for a C++ or QML entity.
- */
-void Section::clear()
-{
- memberMap_.clear();
- obsoleteMemberMap_.clear();
- reimplementedMemberMap_.clear();
- if (!classMapList_.isEmpty()) {
- for (int i = 0; i < classMapList_.size(); i++) {
- ClassMap *cm = classMapList_[i];
- classMapList_[i] = nullptr;
- delete cm;
- }
- classMapList_.clear();
- }
- keys_.clear();
- obsoleteKeys_.clear();
- members_.clear();
- obsoleteMembers_.clear();
- reimplementedMembers_.clear();
- inheritedMembers_.clear();
- if (!classKeysNodesList_.isEmpty()) {
- for (int i = 0; i < classKeysNodesList_.size(); i++) {
- ClassKeysNodes *ckn = classKeysNodesList_[i];
- classKeysNodesList_[i] = nullptr;
- delete ckn;
- }
- classKeysNodesList_.clear();
- }
- aggregate_ = nullptr;
-}
-
-/*!
- Construct a name for the \a node that can be used for sorting
- a set of nodes into equivalence classes. If \a name is provided,
- start with that name. Itherwise start with the name in \a node.
- */
-QString Section::sortName(const Node *node, const QString *name)
-{
- QString nodeName;
- if (name != nullptr)
- nodeName = *name;
- else
- nodeName = node->name();
- int numDigits = 0;
- for (int i = nodeName.size() - 1; i > 0; --i) {
- if (nodeName.at(i).digitValue() == -1)
- break;
- ++numDigits;
- }
-
- // we want 'qint8' to appear before 'qint16'
- if (numDigits > 0) {
- for (int i = 0; i < 4 - numDigits; ++i)
- nodeName.insert(nodeName.size() - numDigits - 1, QLatin1Char('0'));
- }
-
- if (node->isFunction()) {
- const FunctionNode *fn = static_cast<const FunctionNode *>(node);
- if (fn->isCppFunction()) {
- QString sortNo;
- if (fn->isSomeCtor())
- sortNo = QLatin1String("C");
- else if (fn->isDtor())
- sortNo = QLatin1String("D");
- else if (nodeName.startsWith(QLatin1String("operator")) && nodeName.length() > 8
- && !nodeName[8].isLetterOrNumber())
- sortNo = QLatin1String("F");
- else
- sortNo = QLatin1String("E");
- return sortNo + nodeName + QLatin1Char(' ') + QString::number(fn->overloadNumber(), 36);
- }
- if (fn->isQmlMethod() || fn->isQmlSignal() || fn->isQmlSignalHandler())
- return QLatin1Char('E') + nodeName;
-
- if (fn->isJsMethod() || fn->isJsSignal() || fn->isJsSignalHandler())
- return QLatin1Char('E') + nodeName;
- }
- if (node->isClassNode())
- return QLatin1Char('A') + nodeName;
-
- if (node->isProperty() || node->isVariable())
- return QLatin1Char('E') + nodeName;
-
- return QLatin1Char('B') + nodeName;
-}
-
-/*!
- Inserts the \a node into this section if it is appropriate
- for this section.
- */
-void Section::insert(Node *node)
-{
- bool irrelevant = false;
- bool inherited = false;
- if (!node->isRelatedNonmember()) {
- Aggregate *p = node->parent();
- if (!p->isNamespace() && p != aggregate_) {
- if ((!p->isQmlType() && !p->isJsType()) || !p->isAbstract())
- inherited = true;
- }
- }
-
- if (node->isPrivate() || node->isInternal()) {
- irrelevant = true;
- } else if (node->isFunction()) {
- FunctionNode *func = static_cast<FunctionNode *>(node);
- irrelevant = (inherited && (func->isSomeCtor() || func->isDtor()));
- } else if (node->isClassNode() || node->isEnumType() || node->isTypedef()
- || node->isVariable()) {
- irrelevant = (inherited && style_ != AllMembers);
- if (!irrelevant && style_ == Details && node->isTypedef()) {
- const TypedefNode *tdn = static_cast<const TypedefNode *>(node);
- if (tdn->associatedEnum())
- irrelevant = true;
- }
- }
-
- if (!irrelevant) {
- QString key = sortName(node);
- if (node->isObsolete()) {
- obsoleteMemberMap_.insert(key, node);
- } else {
- if (!inherited)
- memberMap_.insert(key, node);
- else if (style_ == AllMembers) {
- if (!memberMap_.contains(key))
- memberMap_.insert(key, node);
- }
- if (inherited && (node->parent()->isClassNode() || node->parent()->isNamespace())) {
- if (inheritedMembers_.isEmpty()
- || inheritedMembers_.last().first != node->parent()) {
- QPair<Aggregate *, int> p(node->parent(), 0);
- inheritedMembers_.append(p);
- }
- inheritedMembers_.last().second++;
- }
- }
- }
-}
-
-/*!
- Returns \c true if the \a node is a reimplemented member
- function of the current class. If true, the \a node is
- inserted into the reimplemented member map. The test is
- performed only when the section status is \e Active. True
- is returned only if \a node is inserted into the map.
- That is, false is returned if the \a node is already in
- the map.
- */
-bool Section::insertReimplementedMember(Node *node)
-{
- if (!node->isPrivate() && !node->isRelatedNonmember()) {
- const FunctionNode *fn = static_cast<const FunctionNode *>(node);
- if (!fn->overridesThis().isEmpty() && (status_ == Active)) {
- if (fn->parent() == aggregate_) {
- QString key = sortName(fn);
- if (!reimplementedMemberMap_.contains(key)) {
- reimplementedMemberMap_.insert(key, node);
- return true;
- }
- }
- }
- }
- return false;
-}
-
-/*!
- Allocate a new ClassMap on the heap for the \a aggregate
- node, append it to the list of class maps, and return a
- pointer to the new class map.
- */
-ClassMap *Section::newClassMap(const Aggregate *aggregate)
-{
- ClassMap *classMap = new ClassMap;
- classMap->first = static_cast<const QmlTypeNode *>(aggregate);
- classMapList_.append(classMap);
- return classMap;
-}
-
-/*!
- Add node \a n to the \a classMap and to the member map.
- */
-void Section::add(ClassMap *classMap, Node *n)
-{
- QString key = n->name();
- key = sortName(n, &key);
- memberMap_.insert(key, n);
- classMap->second.insert(key, n);
-}
-
-/*!
- If this section is not empty, convert its maps to sequential
- structures for better traversal during doc generation.
- */
-void Section::reduce()
-{
- if (!isEmpty()) {
- keys_ = memberMap_.keys();
- obsoleteKeys_ = obsoleteMemberMap_.keys();
- members_ = memberMap_.values().toVector();
- obsoleteMembers_ = obsoleteMemberMap_.values().toVector();
- reimplementedMembers_ = reimplementedMemberMap_.values().toVector();
- for (int i = 0; i < classMapList_.size(); i++) {
- ClassMap *cm = classMapList_[i];
- ClassKeysNodes *ckn = new ClassKeysNodes;
- ckn->first = cm->first;
- ckn->second.second = cm->second.values().toVector();
- ckn->second.first = cm->second.keys();
- classKeysNodesList_.append(ckn);
- }
- }
-}
-
-/*!
- \class Sections
- \brief A class for creating vectors of collections for documentation
-
- Each element in a vector is an instance of Section, which
- contains all the elements that will be documented in one
- section of a reference documentation page.
- */
-
-/*!
- This constructor builds the vectors of sections based on the
- type of the \a aggregate node.
- */
-Sections::Sections(Aggregate *aggregate) : aggregate_(aggregate)
-{
- initSections();
- initAggregate(allMembers_, aggregate_);
- switch (aggregate_->nodeType()) {
- case Node::Class:
- case Node::Struct:
- case Node::Union:
- initAggregate(stdCppClassSummarySections_, aggregate_);
- initAggregate(stdCppClassDetailsSections_, aggregate_);
- buildStdCppClassRefPageSections();
- break;
- case Node::JsType:
- case Node::JsBasicType:
- case Node::QmlType:
- case Node::QmlBasicType:
- initAggregate(stdQmlTypeSummarySections_, aggregate_);
- initAggregate(stdQmlTypeDetailsSections_, aggregate_);
- buildStdQmlTypeRefPageSections();
- break;
- case Node::Namespace:
- case Node::HeaderFile:
- case Node::Proxy:
- default:
- initAggregate(stdSummarySections_, aggregate_);
- initAggregate(stdDetailsSections_, aggregate_);
- buildStdRefPageSections();
- break;
- }
-}
-
-/*!
- This constructor builds a vector of sections from the \e since
- node map, \a nsmap
- */
-Sections::Sections(const NodeMultiMap &nsmap) : aggregate_(nullptr)
-{
- initSections();
- if (nsmap.isEmpty())
- return;
- SectionVector &sections = sinceSections();
- for (auto it = nsmap.constBegin(); it != nsmap.constEnd(); ++it) {
- Node *node = it.value();
- switch (node->nodeType()) {
- case Node::JsType:
- case Node::QmlType:
- sections[SinceQmlTypes].appendMember(node);
- break;
- case Node::Namespace:
- sections[SinceNamespaces].appendMember(node);
- break;
- case Node::Class:
- case Node::Struct:
- case Node::Union:
- sections[SinceClasses].appendMember(node);
- break;
- case Node::Enum:
- sections[SinceEnumTypes].appendMember(node);
- break;
- case Node::Typedef:
- sections[SinceTypedefs].appendMember(node);
- break;
- case Node::TypeAlias:
- sections[SinceTypeAliases].appendMember(node);
- break;
- case Node::Function: {
- const FunctionNode *fn = static_cast<const FunctionNode *>(node);
- switch (fn->metaness()) {
- case FunctionNode::JsSignal:
- case FunctionNode::QmlSignal:
- sections[SinceQmlSignals].appendMember(node);
- break;
- case FunctionNode::JsSignalHandler:
- case FunctionNode::QmlSignalHandler:
- sections[SinceQmlSignalHandlers].appendMember(node);
- break;
- case FunctionNode::JsMethod:
- case FunctionNode::QmlMethod:
- sections[SinceQmlMethods].appendMember(node);
- break;
- default:
- if (fn->isMacro())
- sections[SinceMacros].appendMember(node);
- else {
- Node *p = fn->parent();
- if (p) {
- if (p->isClassNode())
- sections[SinceMemberFunctions].appendMember(node);
- else if (p->isNamespace()) {
- if (p->name().isEmpty())
- sections[SinceGlobalFunctions].appendMember(node);
- else
- sections[SinceNamespaceFunctions].appendMember(node);
- } else
- sections[SinceGlobalFunctions].appendMember(node);
- } else
- sections[SinceGlobalFunctions].appendMember(node);
- }
- break;
- }
- break;
- }
- case Node::Property:
- sections[SinceProperties].appendMember(node);
- break;
- case Node::Variable:
- sections[SinceVariables].appendMember(node);
- break;
- case Node::JsProperty:
- case Node::QmlProperty:
- sections[SinceQmlProperties].appendMember(node);
- break;
- default:
- break;
- }
- }
-}
-
-/*!
- The behavior of the destructor depends on the type of the
- Aggregate node that was passed to the constructor. If the
- constructor was passed a multimap, the destruction is a
- bit different because there was no Aggregate node.
- */
-Sections::~Sections()
-{
- if (aggregate_) {
- switch (aggregate_->nodeType()) {
- case Node::Class:
- case Node::Struct:
- case Node::Union:
- clear(stdCppClassSummarySections());
- clear(stdCppClassDetailsSections());
- allMembersSection().clear();
- break;
- case Node::JsType:
- case Node::JsBasicType:
- case Node::QmlType:
- case Node::QmlBasicType:
- clear(stdQmlTypeSummarySections());
- clear(stdQmlTypeDetailsSections());
- allMembersSection().clear();
- break;
- default:
- clear(stdSummarySections());
- clear(stdDetailsSections());
- allMembersSection().clear();
- break;
- }
- aggregate_ = nullptr;
- } else {
- clear(sinceSections());
- }
-}
-
-/*!
- Initialize the Aggregate in each Section of vector \a v with \a aggregate.
- */
-void Sections::initAggregate(SectionVector &v, Aggregate *aggregate)
-{
- for (int i = 0; i < v.size(); ++i)
- v[i].setAggregate(aggregate);
-}
-
-/*!
- This function is called once to initialize all the instances
- of QList<Section>. The lists have already been constructed
- with the correct number of Section entries in each. Each Section
- entry has already been constructed with the correct values of
- Style and Status for the list it is in. This function adds the
- correct text strings to each section in each vector.
- */
-void Sections::initSections()
-{
- if (sectionsInitialized)
- return;
- sectionsInitialized = true;
-
- allMembers_[0].init("member", "members");
- {
- QList<Section> &v = stdCppClassSummarySections_;
- v[0].init("Public Types", "public type", "public types");
- v[1].init("Properties", "property", "properties");
- v[2].init("Public Functions", "public function", "public functions");
- v[3].init("Public Slots", "public slot", "public slots");
- v[4].init("Signals", "signal", "signals");
- v[5].init("Public Variables", "public variable", "public variables");
- v[6].init("Static Public Members", "static public member", "static public members");
- v[7].init("Protected Types", "protected type", "protected types");
- v[8].init("Protected Functions", "protected function", "protected functions");
- v[9].init("Protected Slots", "protected slot", "protected slots");
- v[10].init("Protected Variables", "protected type", "protected variables");
- v[11].init("Static Protected Members", "static protected member",
- "static protected members");
- v[12].init("Private Types", "private type", "private types");
- v[13].init("Private Functions", "private function", "private functions");
- v[14].init("Private Slots", "private slot", "private slots");
- v[15].init("Static Private Members", "static private member", "static private members");
- v[16].init("Related Non-Members", "related non-member", "related non-members");
- v[17].init("Macros", "macro", "macros");
- }
-
- {
- QList<Section> &v = stdCppClassDetailsSections_;
- v[0].init("Member Type Documentation", "types", "member", "members");
- v[1].init("Property Documentation", "prop", "member", "members");
- v[2].init("Member Function Documentation", "func", "member", "members");
- v[3].init("Member Variable Documentation", "vars", "member", "members");
- v[4].init("Related Non-Members", "relnonmem", "member", "members");
- v[5].init("Macro Documentation", "macros", "member", "members");
- }
-
- {
- QList<Section> &v = stdSummarySections_;
- v[0].init("Namespaces", "namespace", "namespaces");
- v[1].init("Classes", "class", "classes");
- v[2].init("Types", "type", "types");
- v[3].init("Variables", "variable", "variables");
- v[4].init("Static Variables", "static variable", "static variables");
- v[5].init("Functions", "function", "functions");
- v[6].init("Macros", "macro", "macros");
- }
-
- {
- QList<Section> &v = stdDetailsSections_;
- v[0].init("Namespaces", "nmspace", "namespace", "namespaces");
- v[1].init("Classes", "classes", "class", "classes");
- v[2].init("Type Documentation", "types", "type", "types");
- v[3].init("Variable Documentation", "vars", "variable", "variables");
- v[4].init("Static Variables", QString(), "static variable", "static variables");
- v[5].init("Function Documentation", "func", "function", "functions");
- v[6].init("Macro Documentation", "macros", "macro", "macros");
- }
-
- {
- QList<Section> &v = sinceSections_;
- v[SinceNamespaces].init(" New Namespaces");
- v[SinceClasses].init(" New Classes");
- v[SinceMemberFunctions].init(" New Member Functions");
- v[SinceNamespaceFunctions].init(" New Functions in Namespaces");
- v[SinceGlobalFunctions].init(" New Global Functions");
- v[SinceMacros].init(" New Macros");
- v[SinceEnumTypes].init(" New Enum Types");
- v[SinceTypedefs].init(" New Typedefs");
- v[SinceTypeAliases].init(" New Type Aliases");
- v[SinceProperties].init(" New Properties");
- v[SinceVariables].init(" New Variables");
- v[SinceQmlTypes].init(" New QML Types");
- v[SinceQmlProperties].init(" New QML Properties");
- v[SinceQmlSignals].init(" New QML Signals");
- v[SinceQmlSignalHandlers].init(" New QML Signal Handlers");
- v[SinceQmlMethods].init(" New QML Methods");
- }
-
- {
- QList<Section> &v = stdQmlTypeSummarySections_;
- v[0].init("Properties", "property", "properties");
- v[1].init("Attached Properties", "attached property", "attached properties");
- v[2].init("Signals", "signal", "signals");
- v[3].init("Signal Handlers", "signal handler", "signal handlers");
- v[4].init("Attached Signals", "attached signal", "attached signals");
- v[5].init("Methods", "method", "methods");
- v[6].init("Attached Methods", "attached method", "attached methods");
- }
-
- {
- QList<Section> &v = stdQmlTypeDetailsSections_;
- v[0].init("Property Documentation", "qmlprop", "member", "members");
- v[1].init("Attached Property Documentation", "qmlattprop", "member", "members");
- v[2].init("Signal Documentation", "qmlsig", "signal", "signals");
- v[3].init("Signal Handler Documentation", "qmlsighan", "signal handler", "signal handlers");
- v[4].init("Attached Signal Documentation", "qmlattsig", "signal", "signals");
- v[5].init("Method Documentation", "qmlmeth", "member", "members");
- v[6].init("Attached Method Documentation", "qmlattmeth", "member", "members");
- }
-}
-
-/*!
- Reset each Section in vector \a v to its initialized state.
- */
-void Sections::clear(QList<Section> &v)
-{
- for (int i = 0; i < v.size(); ++i)
- v[i].clear();
-}
-
-/*!
- Linearize the maps in each Section in \a v.
- */
-void Sections::reduce(QList<Section> &v)
-{
- for (int i = 0; i < v.size(); ++i)
- v[i].reduce();
-}
-
-/*!
- This is a private helper function for buildStdRefPageSections().
- */
-void Sections::stdRefPageSwitch(SectionVector &v, Node *n, Node *t)
-{
- // t is the reference node to be tested, n is the node to be distributed.
- // t differs from n only for shared comment nodes.
- if (!t)
- t = n;
-
- switch (t->nodeType()) {
- case Node::Namespace:
- v[StdNamespaces].insert(n);
- return;
- case Node::Class:
- case Node::Struct:
- case Node::Union:
- v[StdClasses].insert(n);
- return;
- case Node::Enum:
- case Node::Typedef:
- case Node::TypeAlias:
- v[StdTypes].insert(n);
- return;
- case Node::Function: {
- FunctionNode *func = static_cast<FunctionNode *>(t);
- if (func->isMacro())
- v[StdMacros].insert(n);
- else
- v[StdFunctions].insert(n);
- }
- return;
- case Node::Variable: {
- const VariableNode *var = static_cast<const VariableNode *>(t);
- if (!var->doc().isEmpty()) {
- if (var->isStatic())
- v[StdStaticVariables].insert(n);
- else
- v[StdVariables].insert(n);
- }
- }
- return;
- case Node::SharedComment: {
- SharedCommentNode *scn = static_cast<SharedCommentNode *>(t);
- if (!scn->doc().isEmpty() && scn->collective().count())
- stdRefPageSwitch(
- v, scn,
- scn->collective().first()); // TODO: warn about mixed node types in collective?
- }
- return;
- default:
- return;
- }
-}
-
-/*!
- Build the section vectors for a standard reference page,
- when the aggregate node is not a C++ class or a QML type.
-
- If this is for a namespace page then if the namespace node
- itself does not have documentation, only its children that
- have documentation should be documented. In other words,
- there are cases where a namespace is declared but does not
- have documentation, but some of the elements declared in
- that namespace do have documentation.
-
- This special processing of namespaces that do not have a
- documentation comment is meant to allow documenting its
- members that do have documentation while avoiding posting
- error messages for its members that are not documented.
- */
-void Sections::buildStdRefPageSections()
-{
- const NamespaceNode *ns = nullptr;
- bool documentAll = true; // document all the children
- if (aggregate_->isNamespace()) {
- ns = static_cast<const NamespaceNode *>(aggregate_);
- if (!ns->hasDoc())
- documentAll = false; // only document children that have documentation
- }
- for (auto it = aggregate_->constBegin(); it != aggregate_->constEnd(); ++it) {
- Node *n = *it;
- if (documentAll || n->hasDoc()) {
- stdRefPageSwitch(stdSummarySections(), n);
- stdRefPageSwitch(stdDetailsSections(), n);
- }
- }
- if (!aggregate_->relatedByProxy().isEmpty()) {
- const QList<Node *> &relatedBy = aggregate_->relatedByProxy();
- for (const auto &node : relatedBy)
- stdRefPageSwitch(stdSummarySections(), node);
- }
- /*
- If we are building the sections for the reference page
- for a namespace node, include all the namespace node's
- included children in the sections.
- */
- if (ns && !ns->includedChildren().isEmpty()) {
- const QList<Node *> &children = ns->includedChildren();
- for (const auto &child : children) {
- if (documentAll || child->hasDoc())
- stdRefPageSwitch(stdSummarySections(), child);
- }
- }
- reduce(stdSummarySections());
- reduce(stdDetailsSections());
- allMembersSection().reduce();
-}
-
-/*!
- Inserts the node \a n in one of the entries in the vector \a v
- depending on the node's type, access attribute, and a few other
- attributes if the node is a signal, slot, or function.
- */
-void Sections::distributeNodeInSummaryVector(SectionVector &sv, Node *n)
-{
- if (n->isSharedCommentNode())
- return;
- if (n->isFunction()) {
- FunctionNode *fn = static_cast<FunctionNode *>(n);
- if (fn->isRelatedNonmember()) {
- if (fn->isMacro())
- sv[Macros].insert(n);
- else
- sv[RelatedNonmembers].insert(n);
- return;
- }
- if (fn->isIgnored())
- return;
- if (fn->isSlot()) {
- if (fn->isPublic())
- sv[PublicSlots].insert(fn);
- else if (fn->isPrivate())
- sv[PrivateSlots].insert(fn);
- else
- sv[ProtectedSlots].insert(fn);
- } else if (fn->isSignal()) {
- if (fn->isPublic())
- sv[Signals].insert(fn);
- } else if (fn->isPublic()) {
- if (fn->isStatic())
- sv[StaticPublicMembers].insert(fn);
- else if (!sv[PublicFunctions].insertReimplementedMember(fn))
- sv[PublicFunctions].insert(fn);
- } else if (fn->isPrivate()) {
- if (fn->isStatic())
- sv[StaticPrivateMembers].insert(fn);
- else if (!sv[PrivateFunctions].insertReimplementedMember(fn))
- sv[PrivateFunctions].insert(fn);
- } else { // protected
- if (fn->isStatic())
- sv[StaticProtectedMembers].insert(fn);
- else if (!sv[ProtectedFunctions].insertReimplementedMember(fn))
- sv[ProtectedFunctions].insert(fn);
- }
- return;
- }
- if (n->isRelatedNonmember()) {
- sv[RelatedNonmembers].insert(n);
- return;
- }
- if (n->isVariable()) {
- if (n->isStatic()) {
- if (n->isPublic())
- sv[StaticPublicMembers].insert(n);
- else if (n->isPrivate())
- sv[StaticPrivateMembers].insert(n);
- else
- sv[StaticProtectedMembers].insert(n);
- } else {
- if (n->isPublic())
- sv[PublicVariables].insert(n);
- else if (!n->isPrivate())
- sv[ProtectedVariables].insert(n);
- }
- return;
- }
- /*
- Getting this far means the node is either a property
- or some kind of type, like an enum or a typedef.
- */
- if (n->isTypedef() && (n->name() == QLatin1String("QtGadgetHelper")))
- return;
- if (n->isProperty())
- sv[Properties].insert(n);
- else if (n->isPublic())
- sv[PublicTypes].insert(n);
- else if (n->isPrivate())
- sv[PrivateTypes].insert(n);
- else
- sv[ProtectedTypes].insert(n);
-}
-
-/*!
- Inserts the node \a n in one of the entries in the vector \a v
- depending on the node's type, access attribute, and a few other
- attributes if the node is a signal, slot, or function.
- */
-void Sections::distributeNodeInDetailsVector(SectionVector &dv, Node *n)
-{
- if (n->isSharingComment())
- return;
-
- // t is the reference node to be tested - typically it's this node (n), but for
- // shared comment nodes we need to distribute based on the nodes in its collective.
- Node *t = n;
-
- if (n->isSharedCommentNode() && n->hasDoc()) {
- SharedCommentNode *scn = static_cast<SharedCommentNode *>(n);
- if (scn->collective().count())
- t = scn->collective().first(); // TODO: warn about mixed node types in collective?
- }
-
- if (t->isFunction()) {
- FunctionNode *fn = static_cast<FunctionNode *>(t);
- if (fn->isRelatedNonmember()) {
- if (fn->isMacro())
- dv[DetailsMacros].insert(n);
- else
- dv[DetailsRelatedNonmembers].insert(n);
- return;
- }
- if (fn->isIgnored())
- return;
- if (!fn->hasAssociatedProperties() || !fn->doc().isEmpty())
- dv[DetailsMemberFunctions].insert(n);
- return;
- }
- if (t->isRelatedNonmember()) {
- dv[DetailsRelatedNonmembers].insert(n);
- return;
- }
- if (t->isEnumType() || t->isTypedef()) {
- if (t->name() != QLatin1String("QtGadgetHelper"))
- dv[DetailsMemberTypes].insert(n);
- return;
- }
- if (t->isProperty())
- dv[DetailsProperties].insert(n);
- else if (t->isVariable() && !t->doc().isEmpty())
- dv[DetailsMemberVariables].insert(n);
-}
-
-void Sections::distributeQmlNodeInDetailsVector(SectionVector &dv, Node *n)
-{
- if (n->isSharingComment())
- return;
-
- // t is the reference node to be tested - typically it's this node (n), but for
- // shared comment nodes we need to distribute based on the nodes in its collective.
- Node *t = n;
-
- if (n->isSharedCommentNode() && n->hasDoc()) {
- if (n->isPropertyGroup()) {
- dv[QmlProperties].insert(n);
- return;
- }
- SharedCommentNode *scn = static_cast<SharedCommentNode *>(n);
- if (scn->collective().count())
- t = scn->collective().first(); // TODO: warn about mixed node types in collective?
- }
-
- if (t->isQmlProperty() || t->isJsProperty()) {
- QmlPropertyNode *pn = static_cast<QmlPropertyNode *>(t);
- if (pn->isAttached())
- dv[QmlAttachedProperties].insert(n);
- else
- dv[QmlProperties].insert(n);
- } else if (t->isFunction()) {
- FunctionNode *fn = static_cast<FunctionNode *>(t);
- if (fn->isQmlSignal() || fn->isJsSignal()) {
- if (fn->isAttached())
- dv[QmlAttachedSignals].insert(n);
- else
- dv[QmlSignals].insert(n);
- } else if (fn->isQmlSignalHandler() || fn->isJsSignalHandler()) {
- dv[QmlSignalHandlers].insert(n);
- } else if (fn->isQmlMethod() || fn->isJsMethod()) {
- if (fn->isAttached())
- dv[QmlAttachedMethods].insert(n);
- else
- dv[QmlMethods].insert(n);
- }
- }
-}
-
-/*!
- Distributes a node \a n into the correct place in the summary section vector \a sv.
- Nodes that are sharing a comment are handled recursively - for recursion, the \a
- sharing parameter is set to \c true.
- */
-void Sections::distributeQmlNodeInSummaryVector(SectionVector &sv, Node *n, bool sharing)
-{
- if (n->isSharingComment() && !sharing)
- return;
- if (n->isQmlProperty() || n->isJsProperty()) {
- QmlPropertyNode *pn = static_cast<QmlPropertyNode *>(n);
- if (pn->isAttached())
- sv[QmlAttachedProperties].insert(pn);
- else
- sv[QmlProperties].insert(pn);
- } else if (n->isFunction()) {
- FunctionNode *fn = static_cast<FunctionNode *>(n);
- if (fn->isQmlSignal() || fn->isJsSignal()) {
- if (fn->isAttached())
- sv[QmlAttachedSignals].insert(fn);
- else
- sv[QmlSignals].insert(fn);
- } else if (fn->isQmlSignalHandler() || fn->isJsSignalHandler()) {
- sv[QmlSignalHandlers].insert(fn);
- } else if (fn->isQmlMethod() || fn->isJsMethod()) {
- if (fn->isAttached())
- sv[QmlAttachedMethods].insert(fn);
- else
- sv[QmlMethods].insert(fn);
- }
- } else if (n->isSharedCommentNode()) {
- SharedCommentNode *scn = static_cast<SharedCommentNode *>(n);
- if (scn->isPropertyGroup()) {
- sv[QmlProperties].insert(scn);
- } else {
- for (const auto &child : scn->collective())
- distributeQmlNodeInSummaryVector(sv, child, true);
- }
- }
-}
-
-static void pushBaseClasses(QStack<ClassNode *> &stack, ClassNode *cn)
-{
- const QList<RelatedClass> baseClasses = cn->baseClasses();
- for (const auto &cls : baseClasses) {
- if (cls.m_node)
- stack.prepend(cls.m_node);
- }
-}
-
-/*!
- Build the section vectors for a standard reference page,
- when the aggregate node is a C++.
- */
-void Sections::buildStdCppClassRefPageSections()
-{
- SectionVector &summarySections = stdCppClassSummarySections();
- SectionVector &detailsSections = stdCppClassDetailsSections();
- Section &allMembers = allMembersSection();
- bool documentAll = true;
- if (aggregate_->parent() && !aggregate_->name().isEmpty() && !aggregate_->hasDoc())
- documentAll = false;
- for (auto it = aggregate_->constBegin(); it != aggregate_->constEnd(); ++it) {
- Node *n = *it;
- if (!n->isPrivate() && !n->isProperty() && !n->isRelatedNonmember()
- && !n->isSharedCommentNode())
- allMembers.insert(n);
- if (!documentAll && !n->hasDoc())
- continue;
-
- distributeNodeInSummaryVector(summarySections, n);
- distributeNodeInDetailsVector(detailsSections, n);
- }
- if (!aggregate_->relatedByProxy().isEmpty()) {
- const QList<Node *> relatedBy = aggregate_->relatedByProxy();
- for (const auto &node : relatedBy)
- distributeNodeInSummaryVector(summarySections, node);
- }
-
- QStack<ClassNode *> stack;
- ClassNode *cn = static_cast<ClassNode *>(aggregate_);
- pushBaseClasses(stack, cn);
- while (!stack.isEmpty()) {
- ClassNode *cn = stack.pop();
- for (auto it = cn->constBegin(); it != cn->constEnd(); ++it) {
- Node *n = *it;
- if (!n->isPrivate() && !n->isProperty() && !n->isRelatedNonmember()
- && !n->isSharedCommentNode())
- allMembers.insert(n);
- if (!documentAll && !n->hasDoc())
- continue;
- }
- pushBaseClasses(stack, cn);
- }
- reduce(summarySections);
- reduce(detailsSections);
- allMembers.reduce();
-}
-
-/*!
- Build the section vectors for a standard reference page,
- when the aggregate node is a QML type.
- */
-void Sections::buildStdQmlTypeRefPageSections()
-{
- ClassMap *classMap = nullptr;
- SectionVector &summarySections = stdQmlTypeSummarySections();
- SectionVector &detailsSections = stdQmlTypeDetailsSections();
- Section &allMembers = allMembersSection();
-
- const Aggregate *qtn = aggregate_;
- while (qtn) {
- if (!qtn->isAbstract() || !classMap)
- classMap = allMembers.newClassMap(qtn);
- for (const auto n : qtn->childNodes()) {
- if (n->isInternal())
- continue;
-
- if (!n->isSharedCommentNode() || n->isPropertyGroup())
- allMembers.add(classMap, n);
-
- if (qtn == aggregate_ || qtn->isAbstract()) {
- distributeQmlNodeInSummaryVector(summarySections, n);
- distributeQmlNodeInDetailsVector(detailsSections, n);
- }
- }
- if (qtn->qmlBaseNode() == qtn) {
- qCDebug(lcQdoc, "error: circular type definition: '%s' inherits itself",
- qPrintable(qtn->name()));
- break;
- }
- qtn = static_cast<QmlTypeNode *>(qtn->qmlBaseNode());
- }
-
- reduce(summarySections);
- reduce(detailsSections);
- allMembers.reduce();
-}
-
-/*!
- Returns true if any sections in this object contain obsolete
- members. If it returns false, then \a summary_spv and \a details_spv
- have not been modified. Otherwise, both vectors will contain pointers
- to the sections that contain obsolete members.
- */
-bool Sections::hasObsoleteMembers(SectionPtrVector *summary_spv,
- SectionPtrVector *details_spv) const
-{
- const SectionVector *sections = nullptr;
- if (aggregate_->isClassNode())
- sections = &stdCppClassSummarySections();
- else if (aggregate_->isQmlType() || aggregate_->isQmlBasicType())
- sections = &stdQmlTypeSummarySections();
- else
- sections = &stdSummarySections();
- for (const auto &section : *sections) {
- if (!section.obsoleteMembers().isEmpty())
- summary_spv->append(&section);
- }
- if (aggregate_->isClassNode())
- sections = &stdCppClassDetailsSections();
- else if (aggregate_->isQmlType() || aggregate_->isQmlBasicType())
- sections = &stdQmlTypeDetailsSections();
- else
- sections = &stdDetailsSections();
- for (const auto &it : *sections) {
- if (!it.obsoleteMembers().isEmpty())
- details_spv->append(&it);
- }
- return !summary_spv->isEmpty();
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/sections.h b/src/qdoc/sections.h
deleted file mode 100644
index b070c7380..000000000
--- a/src/qdoc/sections.h
+++ /dev/null
@@ -1,259 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef SECTIONS_H
-#define SECTIONS_H
-
-#include "node.h"
-
-#include <QtCore/qpair.h>
-
-QT_BEGIN_NAMESPACE
-
-class Aggregate;
-
-typedef QMultiMap<QString, Node *> MemberMap; // the string is the member signature
-typedef QPair<const QmlTypeNode *, MemberMap> ClassMap; // the node is the QML type
-typedef QList<ClassMap *> ClassMapList;
-
-typedef QPair<QStringList, NodeVector> KeysAndNodes;
-typedef QPair<const QmlTypeNode *, KeysAndNodes> ClassKeysNodes;
-typedef QList<ClassKeysNodes *> ClassKeysNodesList;
-
-class Section
-{
-public:
- enum Style { Summary, Details, AllMembers, Accessors };
- enum Status { Obsolete, Active };
-
-public:
- Section() : style_(Details), status_(Active), aggregate_(nullptr) {}
- Section(Style style, Status status);
- ~Section();
-
- void init(const QString &title) { title_ = title; }
- void init(const QString &singular, const QString &plural)
- {
- singular_ = singular;
- plural_ = plural;
- }
- void init(const QString &title, const QString &singular, const QString &plural)
- {
- title_ = title;
- divClass_.clear();
- singular_ = singular;
- plural_ = plural;
- }
- void init(const QString &title, const QString &divClass, const QString &singular,
- const QString &plural)
- {
- title_ = title;
- divClass_ = divClass;
- singular_ = singular;
- plural_ = plural;
- }
-
- void insert(Node *node);
- void insert(const QString &key, Node *node) { memberMap_.insert(key, node); }
- bool insertReimplementedMember(Node *node);
-
- ClassMap *newClassMap(const Aggregate *aggregate);
- void add(ClassMap *classMap, Node *n);
- void appendMember(Node *node) { members_.append(node); }
- void appendReimplementedMember(Node *node) { reimplementedMembers_.append(node); }
-
- void clear();
- void reduce();
- bool isEmpty() const
- {
- return (memberMap_.isEmpty() && inheritedMembers_.isEmpty()
- && reimplementedMemberMap_.isEmpty() && classMapList_.isEmpty());
- }
-
- Style style() const { return style_; }
- Status status() const { return status_; }
- const QString &title() const { return title_; }
- const QString &divClass() const { return divClass_; }
- const QString &singular() const { return singular_; }
- const QString &plural() const { return plural_; }
- const QStringList &keys() const { return keys_; }
- const QStringList &keys(Status t) const { return (t == Obsolete ? obsoleteKeys_ : keys_); }
- const NodeVector &members() const { return members_; }
- const NodeVector &reimplementedMembers() const { return reimplementedMembers_; }
- const QList<QPair<Aggregate *, int>> &inheritedMembers() const { return inheritedMembers_; }
- ClassKeysNodesList &classKeysNodesList() { return classKeysNodesList_; }
- const NodeVector &obsoleteMembers() const { return obsoleteMembers_; }
- void appendMembers(const NodeVector &nv) { members_.append(nv); }
- const Aggregate *aggregate() const { return aggregate_; }
- void setAggregate(Aggregate *t) { aggregate_ = t; }
-
-private:
- QString sortName(const Node *node, const QString *name = nullptr);
-
-private:
- Style style_;
- Status status_;
- QString title_;
- QString divClass_;
- QString singular_;
- QString plural_;
-
- Aggregate *aggregate_;
- QStringList keys_;
- QStringList obsoleteKeys_;
- NodeVector members_;
- NodeVector obsoleteMembers_;
- NodeVector reimplementedMembers_;
- QList<QPair<Aggregate *, int>> inheritedMembers_;
- ClassKeysNodesList classKeysNodesList_;
-
- QMultiMap<QString, Node *> memberMap_;
- QMultiMap<QString, Node *> obsoleteMemberMap_;
- QMultiMap<QString, Node *> reimplementedMemberMap_;
- ClassMapList classMapList_;
-};
-
-typedef QList<Section> SectionVector;
-typedef QList<const Section *> SectionPtrVector;
-
-class Sections
-{
-public:
- enum VectorIndex {
- AllMembers = 0,
- PublicTypes = 0,
- DetailsMemberTypes = 0,
- SinceNamespaces = 0,
- StdNamespaces = 0,
- QmlProperties = 0,
- Properties = 1,
- DetailsProperties = 1,
- SinceClasses = 1,
- StdClasses = 1,
- QmlAttachedProperties = 1,
- PublicFunctions = 2,
- DetailsMemberFunctions = 2,
- SinceMemberFunctions = 2,
- StdTypes = 2,
- QmlSignals = 2,
- PublicSlots = 3,
- DetailsMemberVariables = 3,
- SinceNamespaceFunctions = 3,
- StdVariables = 3,
- QmlSignalHandlers = 3,
- Signals = 4,
- SinceGlobalFunctions = 4,
- DetailsRelatedNonmembers = 4,
- StdStaticVariables = 4,
- QmlAttachedSignals = 4,
- PublicVariables = 5,
- SinceMacros = 5,
- DetailsMacros = 5,
- StdFunctions = 5,
- QmlMethods = 5,
- StaticPublicMembers = 6,
- SinceEnumTypes = 6,
- StdMacros = 6,
- QmlAttachedMethods = 6,
- ProtectedTypes = 7,
- SinceTypedefs = 7,
- SinceTypeAliases = 7,
- ProtectedFunctions = 8,
- SinceProperties = 8,
- ProtectedSlots = 9,
- SinceVariables = 9,
- ProtectedVariables = 10,
- SinceQmlTypes = 10,
- StaticProtectedMembers = 11,
- SinceQmlProperties = 11,
- PrivateTypes = 12,
- SinceQmlSignals = 12,
- PrivateFunctions = 13,
- SinceQmlSignalHandlers = 13,
- PrivateSlots = 14,
- SinceQmlMethods = 14,
- StaticPrivateMembers = 15,
- RelatedNonmembers = 16,
- Macros = 17
- };
-
- Sections(Aggregate *aggregate);
- Sections(const NodeMultiMap &nsmap);
- ~Sections();
-
- void initSections();
- void clear(SectionVector &v);
- void reduce(SectionVector &v);
- void buildStdRefPageSections();
- void buildStdCppClassRefPageSections();
- void buildStdQmlTypeRefPageSections();
-
- bool hasObsoleteMembers(SectionPtrVector *summary_spv, SectionPtrVector *details_spv) const;
-
- static Section &allMembersSection() { return allMembers_[0]; }
- SectionVector &sinceSections() { return sinceSections_; }
- SectionVector &stdSummarySections() { return stdSummarySections_; }
- SectionVector &stdDetailsSections() { return stdDetailsSections_; }
- SectionVector &stdCppClassSummarySections() { return stdCppClassSummarySections_; }
- SectionVector &stdCppClassDetailsSections() { return stdCppClassDetailsSections_; }
- SectionVector &stdQmlTypeSummarySections() { return stdQmlTypeSummarySections_; }
- SectionVector &stdQmlTypeDetailsSections() { return stdQmlTypeDetailsSections_; }
-
- const SectionVector &stdSummarySections() const { return stdSummarySections_; }
- const SectionVector &stdDetailsSections() const { return stdDetailsSections_; }
- const SectionVector &stdCppClassSummarySections() const { return stdCppClassSummarySections_; }
- const SectionVector &stdCppClassDetailsSections() const { return stdCppClassDetailsSections_; }
- const SectionVector &stdQmlTypeSummarySections() const { return stdQmlTypeSummarySections_; }
- const SectionVector &stdQmlTypeDetailsSections() const { return stdQmlTypeDetailsSections_; }
-
- Aggregate *aggregate() const { return aggregate_; }
-
-private:
- void stdRefPageSwitch(SectionVector &v, Node *n, Node *t = nullptr);
- void distributeNodeInSummaryVector(SectionVector &sv, Node *n);
- void distributeNodeInDetailsVector(SectionVector &dv, Node *n);
- void distributeQmlNodeInDetailsVector(SectionVector &dv, Node *n);
- void distributeQmlNodeInSummaryVector(SectionVector &sv, Node *n, bool sharing = false);
- void initAggregate(SectionVector &v, Aggregate *aggregate);
-
-private:
- Aggregate *aggregate_;
-
- static SectionVector stdSummarySections_;
- static SectionVector stdDetailsSections_;
- static SectionVector stdCppClassSummarySections_;
- static SectionVector stdCppClassDetailsSections_;
- static SectionVector stdQmlTypeSummarySections_;
- static SectionVector stdQmlTypeDetailsSections_;
- static SectionVector sinceSections_;
- static SectionVector allMembers_;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/separator.cpp b/src/qdoc/separator.cpp
deleted file mode 100644
index 80dc39559..000000000
--- a/src/qdoc/separator.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- separator.cpp
-*/
-
-#include "separator.h"
-
-#include <QtCore/qcoreapplication.h>
-
-QT_BEGIN_NAMESPACE
-
-QString separator(int index, int count)
-{
- if (index == count - 1)
- return QCoreApplication::translate("QDoc", ".", "terminator");
- if (count == 2)
- return QCoreApplication::translate("QDoc", " and ", "separator when N = 2");
- if (index == 0)
- return QCoreApplication::translate("QDoc", ", ", "first separator when N > 2");
- if (index < count - 2)
- return QCoreApplication::translate("QDoc", ", ", "general separator when N > 2");
- return QCoreApplication::translate("QDoc", ", and ", "last separator when N > 2");
-}
-
-QString comma(int index, int count)
-{
- if (index == count - 1)
- return QString();
- if (count == 2)
- return QCoreApplication::translate("QDoc", " and ", "separator when N = 2");
- if (index == 0)
- return QCoreApplication::translate("QDoc", ", ", "first separator when N > 2");
- if (index < count - 2)
- return QCoreApplication::translate("QDoc", ", ", "general separator when N > 2");
- return QCoreApplication::translate("QDoc", ", and ", "last separator when N > 2");
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/separator.h b/src/qdoc/separator.h
deleted file mode 100644
index 69346bd0c..000000000
--- a/src/qdoc/separator.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- separator.h
-*/
-
-#ifndef SEPARATOR_H
-#define SEPARATOR_H
-
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-QString separator(int index, int count);
-QString comma(int index, int count);
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/sharedcommentnode.cpp b/src/qdoc/sharedcommentnode.cpp
deleted file mode 100644
index e1190adaa..000000000
--- a/src/qdoc/sharedcommentnode.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "sharedcommentnode.h"
-
-#include "aggregate.h"
-#include "functionnode.h"
-#include "qmltypenode.h"
-
-QT_BEGIN_NAMESPACE
-
-SharedCommentNode::SharedCommentNode(QmlTypeNode *parent, int count, QString &group)
- : Node(Node::SharedComment, parent, group)
-{
- m_collective.reserve(count);
-}
-
-/*!
- Searches the shared comment node's member nodes for function
- nodes. Each function node's overload flag is set.
- */
-void SharedCommentNode::setOverloadFlags()
-{
- for (auto *node : m_collective) {
- if (node->isFunction())
- static_cast<FunctionNode *>(node)->setOverloadFlag();
- }
-}
-
-/*!
- Clone this node on the heap and make the clone a child of
- \a parent.
-
- Returns the pointer to the clone.
- */
-Node *SharedCommentNode::clone(Aggregate *parent)
-{
- SharedCommentNode *scn = new SharedCommentNode(*this); // shallow copy
- scn->setParent(nullptr);
- parent->addChild(scn);
-
- return scn;
-}
-
-/*!
- Sets the related nonmember flag in this node and in each
- node in the shared comment's collective to \a value.
- */
-void SharedCommentNode::setRelatedNonmember(bool value)
-{
- Node::setRelatedNonmember(value);
- for (auto *node : m_collective)
- node->setRelatedNonmember(value);
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/sharedcommentnode.h b/src/qdoc/sharedcommentnode.h
deleted file mode 100644
index 67c3af810..000000000
--- a/src/qdoc/sharedcommentnode.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef SHAREDCOMMENTNODE_H
-#define SHAREDCOMMENTNODE_H
-
-#include "node.h"
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qlist.h>
-
-QT_BEGIN_NAMESPACE
-
-class Aggregate;
-class QmlTypeNode;
-
-class SharedCommentNode : public Node
-{
-public:
- explicit SharedCommentNode(Node *node) : Node(Node::SharedComment, node->parent(), QString())
- {
- m_collective.reserve(1);
- append(node);
- }
- SharedCommentNode(QmlTypeNode *parent, int count, QString &group);
- ~SharedCommentNode() override { m_collective.clear(); }
-
- bool isPropertyGroup() const override
- {
- return !name().isEmpty() && !m_collective.isEmpty()
- && (m_collective.at(0)->isQmlProperty() || m_collective.at(0)->isJsProperty());
- }
- int count() const { return m_collective.size(); }
- void append(Node *node)
- {
- m_collective.append(node);
- node->setSharedCommentNode(this);
- setGenus(node->genus());
- }
- void sort() { std::sort(m_collective.begin(), m_collective.end(), Node::nodeNameLessThan); }
- const QList<Node *> &collective() const { return m_collective; }
- void setOverloadFlags();
- void setRelatedNonmember(bool value) override;
- Node *clone(Aggregate *parent) override;
-
-private:
- QList<Node *> m_collective {};
-};
-
-QT_END_NAMESPACE
-
-#endif // SHAREDCOMMENTNODE_H
diff --git a/src/qdoc/singleton.h b/src/qdoc/singleton.h
deleted file mode 100644
index c81cfc00b..000000000
--- a/src/qdoc/singleton.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef SINGLETON_H
-#define SINGLETON_H
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class Singleton
- \internal
-
- Class template for singleton objects in QDoc.
- */
-template<typename T>
-class Singleton
-{
-public:
- Singleton(const Singleton &) = delete;
- Singleton &operator=(const Singleton &) = delete;
- static T &instance()
- {
- static T instance;
- return instance;
- }
-
-protected:
- Singleton() = default;
-};
-
-QT_END_NAMESPACE
-
-#endif // SINGLETON_H
diff --git a/src/qdoc/text.cpp b/src/qdoc/text.cpp
deleted file mode 100644
index 05c8a00cc..000000000
--- a/src/qdoc/text.cpp
+++ /dev/null
@@ -1,304 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- text.cpp
-*/
-
-#include "text.h"
-
-#include <QtCore/qregularexpression.h>
-
-#include <cstdio>
-
-QT_BEGIN_NAMESPACE
-
-Text::Text() : first(nullptr), last(nullptr) {}
-
-Text::Text(const QString &str) : first(nullptr), last(nullptr)
-{
- operator<<(str);
-}
-
-Text::Text(const Text &text) : first(nullptr), last(nullptr)
-{
- operator=(text);
-}
-
-Text::~Text()
-{
- clear();
-}
-
-Text &Text::operator=(const Text &text)
-{
- if (this != &text) {
- clear();
- operator<<(text);
- }
- return *this;
-}
-
-Text &Text::operator<<(Atom::AtomType atomType)
-{
- return operator<<(Atom(atomType));
-}
-
-Text &Text::operator<<(const QString &string)
-{
- return operator<<(Atom(Atom::String, string));
-}
-
-Text &Text::operator<<(const Atom &atom)
-{
- if (atom.count() < 2) {
- if (first == nullptr) {
- first = new Atom(atom.type(), atom.string());
- last = first;
- } else
- last = new Atom(last, atom.type(), atom.string());
- } else {
- if (first == nullptr) {
- first = new Atom(atom.type(), atom.string(), atom.string(1));
- last = first;
- } else
- last = new Atom(last, atom.type(), atom.string(), atom.string(1));
- }
- return *this;
-}
-
-/*!
- Special output operator for LinkAtom. It makes a copy of
- the LinkAtom \a atom and connects the cop;y to the list
- in this Text.
- */
-Text &Text::operator<<(const LinkAtom &atom)
-{
- if (first == nullptr) {
- first = new LinkAtom(atom);
- last = first;
- } else
- last = new LinkAtom(last, atom);
- return *this;
-}
-
-Text &Text::operator<<(const Text &text)
-{
- const Atom *atom = text.firstAtom();
- while (atom != nullptr) {
- operator<<(*atom);
- atom = atom->next();
- }
- return *this;
-}
-
-void Text::stripFirstAtom()
-{
- if (first != nullptr) {
- if (first == last)
- last = nullptr;
- Atom *oldFirst = first;
- first = first->next();
- delete oldFirst;
- }
-}
-
-void Text::stripLastAtom()
-{
- if (last != nullptr) {
- Atom *oldLast = last;
- if (first == last) {
- first = nullptr;
- last = nullptr;
- } else {
- last = first;
- while (last->next() != oldLast)
- last = last->next();
- last->setNext(nullptr);
- }
- delete oldLast;
- }
-}
-
-/*!
- This function traverses the atom list of the Text object,
- extracting all the string parts. It concatenates them to
- a result string and returns it.
- */
-QString Text::toString() const
-{
- QString str;
- const Atom *atom = firstAtom();
- while (atom != nullptr) {
- if (atom->type() == Atom::String || atom->type() == Atom::AutoLink
- || atom->type() == Atom::C)
- str += atom->string();
- atom = atom->next();
- }
- return str;
-}
-
-/*!
- Returns true if this Text contains the substring \a str.
- */
-bool Text::contains(const QString &str) const
-{
- const Atom *atom = firstAtom();
- while (atom != nullptr) {
- if (atom->type() == Atom::String || atom->type() == Atom::AutoLink
- || atom->type() == Atom::C)
- if (atom->string().contains(str, Qt::CaseInsensitive))
- return true;
- atom = atom->next();
- }
- return false;
-}
-
-Text Text::subText(Atom::AtomType left, Atom::AtomType right, const Atom *from,
- bool inclusive) const
-{
- const Atom *begin = from ? from : firstAtom();
- const Atom *end;
-
- while (begin != nullptr && begin->type() != left)
- begin = begin->next();
- if (begin != nullptr) {
- if (!inclusive)
- begin = begin->next();
- }
-
- end = begin;
- while (end != nullptr && end->type() != right)
- end = end->next();
- if (end == nullptr)
- begin = nullptr;
- else if (inclusive)
- end = end->next();
- return subText(begin, end);
-}
-
-Text Text::sectionHeading(const Atom *sectionLeft)
-{
- if (sectionLeft != nullptr) {
- const Atom *begin = sectionLeft;
- while (begin != nullptr && begin->type() != Atom::SectionHeadingLeft)
- begin = begin->next();
- if (begin != nullptr)
- begin = begin->next();
-
- const Atom *end = begin;
- while (end != nullptr && end->type() != Atom::SectionHeadingRight)
- end = end->next();
-
- if (end != nullptr)
- return subText(begin, end);
- }
- return Text();
-}
-
-const Atom *Text::sectionHeadingAtom(const Atom *sectionLeft)
-{
- if (sectionLeft != nullptr) {
- const Atom *begin = sectionLeft;
- while (begin != nullptr && begin->type() != Atom::SectionHeadingLeft)
- begin = begin->next();
- if (begin != nullptr)
- begin = begin->next();
-
- return begin;
- }
- return nullptr;
-}
-
-void Text::dump() const
-{
- const Atom *atom = firstAtom();
- while (atom != nullptr) {
- QString str = atom->string();
- str.replace("\\", "\\\\");
- str.replace("\"", "\\\"");
- str.replace("\n", "\\n");
- str.replace(QRegularExpression("[^\x20-\x7e]"), "?");
- if (!str.isEmpty())
- str = " \"" + str + QLatin1Char('"');
- fprintf(stderr, " %-15s%s\n", atom->typeString().toLatin1().data(),
- str.toLatin1().data());
- atom = atom->next();
- }
-}
-
-Text Text::subText(const Atom *begin, const Atom *end)
-{
- Text text;
- if (begin != nullptr) {
- while (begin != end) {
- text << *begin;
- begin = begin->next();
- }
- }
- return text;
-}
-
-void Text::clear()
-{
- while (first != nullptr) {
- Atom *atom = first;
- first = first->next();
- delete atom;
- }
- first = nullptr;
- last = nullptr;
-}
-
-int Text::compare(const Text &text1, const Text &text2)
-{
- if (text1.isEmpty())
- return text2.isEmpty() ? 0 : -1;
- if (text2.isEmpty())
- return 1;
-
- const Atom *atom1 = text1.firstAtom();
- const Atom *atom2 = text2.firstAtom();
-
- for (;;) {
- if (atom1->type() != atom2->type())
- return (int)atom1->type() - (int)atom2->type();
- int cmp = QString::compare(atom1->string(), atom2->string());
- if (cmp != 0)
- return cmp;
-
- if (atom1 == text1.lastAtom())
- return atom2 == text2.lastAtom() ? 0 : -1;
- if (atom2 == text2.lastAtom())
- return 1;
- atom1 = atom1->next();
- atom2 = atom2->next();
- }
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/text.h b/src/qdoc/text.h
deleted file mode 100644
index 704a44968..000000000
--- a/src/qdoc/text.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- text.h
-*/
-
-#ifndef TEXT_H
-#define TEXT_H
-
-#include "atom.h"
-
-QT_BEGIN_NAMESPACE
-
-class Text
-{
-public:
- Text();
- explicit Text(const QString &str);
- Text(const Text &text);
- ~Text();
-
- Text &operator=(const Text &text);
-
- Atom *firstAtom() { return first; }
- Atom *lastAtom() { return last; }
- Text &operator<<(Atom::AtomType atomType);
- Text &operator<<(const QString &string);
- Text &operator<<(const Atom &atom);
- Text &operator<<(const LinkAtom &atom);
- Text &operator<<(const Text &text);
- void stripFirstAtom();
- void stripLastAtom();
-
- bool isEmpty() const { return first == nullptr; }
- bool contains(const QString &str) const;
- QString toString() const;
- const Atom *firstAtom() const { return first; }
- const Atom *lastAtom() const { return last; }
- Text subText(Atom::AtomType left, Atom::AtomType right, const Atom *from = nullptr,
- bool inclusive = false) const;
- void dump() const;
- void clear();
-
- static Text subText(const Atom *begin, const Atom *end = nullptr);
- static Text sectionHeading(const Atom *sectionBegin);
- static const Atom *sectionHeadingAtom(const Atom *sectionLeft);
- static int compare(const Text &text1, const Text &text2);
-
-private:
- Atom *first;
- Atom *last;
-};
-
-inline bool operator==(const Text &text1, const Text &text2)
-{
- return Text::compare(text1, text2) == 0;
-}
-inline bool operator!=(const Text &text1, const Text &text2)
-{
- return Text::compare(text1, text2) != 0;
-}
-inline bool operator<(const Text &text1, const Text &text2)
-{
- return Text::compare(text1, text2) < 0;
-}
-inline bool operator<=(const Text &text1, const Text &text2)
-{
- return Text::compare(text1, text2) <= 0;
-}
-inline bool operator>(const Text &text1, const Text &text2)
-{
- return Text::compare(text1, text2) > 0;
-}
-inline bool operator>=(const Text &text1, const Text &text2)
-{
- return Text::compare(text1, text2) >= 0;
-}
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/tokenizer.cpp b/src/qdoc/tokenizer.cpp
deleted file mode 100644
index dd2282995..000000000
--- a/src/qdoc/tokenizer.cpp
+++ /dev/null
@@ -1,806 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "tokenizer.h"
-
-#include "config.h"
-#include "generator.h"
-
-#include <QtCore/qfile.h>
-#include <QtCore/qhash.h>
-#include <QtCore/qregularexpression.h>
-#include <QtCore/qstring.h>
-#include <QtCore/qstringconverter.h>
-
-#include <cctype>
-#include <cstring>
-
-QT_BEGIN_NAMESPACE
-
-#define LANGUAGE_CPP "Cpp"
-
-/* qmake ignore Q_OBJECT */
-
-/*
- Keep in sync with tokenizer.h.
-*/
-static const char *kwords[] = { "char",
- "class",
- "const",
- "double",
- "enum",
- "explicit",
- "friend",
- "inline",
- "int",
- "long",
- "namespace",
- "operator",
- "private",
- "protected",
- "public",
- "short",
- "signals",
- "signed",
- "slots",
- "static",
- "struct",
- "template",
- "typedef",
- "typename",
- "union",
- "unsigned",
- "using",
- "virtual",
- "void",
- "volatile",
- "__int64",
- "default",
- "delete",
- "final",
- "override",
- "Q_OBJECT",
- "Q_OVERRIDE",
- "Q_PROPERTY",
- "Q_PRIVATE_PROPERTY",
- "Q_DECLARE_SEQUENTIAL_ITERATOR",
- "Q_DECLARE_MUTABLE_SEQUENTIAL_ITERATOR",
- "Q_DECLARE_ASSOCIATIVE_ITERATOR",
- "Q_DECLARE_MUTABLE_ASSOCIATIVE_ITERATOR",
- "Q_DECLARE_FLAGS",
- "Q_SIGNALS",
- "Q_SLOTS",
- "QT_COMPAT",
- "QT_COMPAT_CONSTRUCTOR",
- "QT_DEPRECATED",
- "QT_MOC_COMPAT",
- "QT_MODULE",
- "QT3_SUPPORT",
- "QT3_SUPPORT_CONSTRUCTOR",
- "QT3_MOC_SUPPORT",
- "QDOC_PROPERTY",
- "QPrivateSignal" };
-
-static const int KwordHashTableSize = 4096;
-static int kwordHashTable[KwordHashTableSize];
-
-static QHash<QByteArray, bool> *ignoredTokensAndDirectives = nullptr;
-
-static QRegularExpression *comment = nullptr;
-static QRegularExpression *versionX = nullptr;
-static QRegularExpression *definedX = nullptr;
-
-static QRegularExpression *defines = nullptr;
-static QRegularExpression *falsehoods = nullptr;
-
-static QStringDecoder sourceDecoder;
-
-/*
- This function is a perfect hash function for the 37 keywords of C99
- (with a hash table size of 512). It should perform well on our
- Qt-enhanced C++ subset.
-*/
-static int hashKword(const char *s, int len)
-{
- return (((uchar)s[0]) + (((uchar)s[2]) << 5) + (((uchar)s[len - 1]) << 3)) % KwordHashTableSize;
-}
-
-static void insertKwordIntoHash(const char *s, int number)
-{
- int k = hashKword(s, int(strlen(s)));
- while (kwordHashTable[k]) {
- if (++k == KwordHashTableSize)
- k = 0;
- }
- kwordHashTable[k] = number;
-}
-
-Tokenizer::Tokenizer(const Location &loc, QFile &in)
-{
- init();
- yyIn = in.readAll();
- yyPos = 0;
- start(loc);
-}
-
-Tokenizer::Tokenizer(const Location &loc, const QByteArray &in) : yyIn(in)
-{
- init();
- yyPos = 0;
- start(loc);
-}
-
-Tokenizer::~Tokenizer()
-{
- delete[] yyLexBuf1;
- delete[] yyLexBuf2;
-}
-
-int Tokenizer::getToken()
-{
- char *t = yyPrevLex;
- yyPrevLex = yyLex;
- yyLex = t;
-
- while (yyCh != EOF) {
- yyTokLoc = yyCurLoc;
- yyLexLen = 0;
-
- if (isspace(yyCh)) {
- do {
- yyCh = getChar();
- } while (isspace(yyCh));
- } else if (isalpha(yyCh) || yyCh == '_') {
- do {
- yyCh = getChar();
- } while (isalnum(yyCh) || yyCh == '_');
-
- int k = hashKword(yyLex, int(yyLexLen));
- for (;;) {
- int i = kwordHashTable[k];
- if (i == 0) {
- return Tok_Ident;
- } else if (i == -1) {
- if (!parsingMacro && ignoredTokensAndDirectives->contains(yyLex)) {
- if (ignoredTokensAndDirectives->value(yyLex)) { // it's a directive
- int parenDepth = 0;
- while (yyCh != EOF && (yyCh != ')' || parenDepth > 1)) {
- if (yyCh == '(')
- ++parenDepth;
- else if (yyCh == ')')
- --parenDepth;
- yyCh = getChar();
- }
- if (yyCh == ')')
- yyCh = getChar();
- }
- break;
- }
- } else if (strcmp(yyLex, kwords[i - 1]) == 0) {
- int ret = (int)Tok_FirstKeyword + i - 1;
- if (ret != Tok_typename)
- return ret;
- break;
- }
-
- if (++k == KwordHashTableSize)
- k = 0;
- }
- } else if (isdigit(yyCh)) {
- do {
- yyCh = getChar();
- } while (isalnum(yyCh) || yyCh == '.' || yyCh == '+' || yyCh == '-');
- return Tok_Number;
- } else {
- switch (yyCh) {
- case '!':
- case '%':
- yyCh = getChar();
- if (yyCh == '=')
- yyCh = getChar();
- return Tok_SomeOperator;
- case '"':
- yyCh = getChar();
-
- while (yyCh != EOF && yyCh != '"') {
- if (yyCh == '\\')
- yyCh = getChar();
- yyCh = getChar();
- }
- yyCh = getChar();
-
- if (yyCh == EOF)
- yyTokLoc.warning(
- QStringLiteral("Unterminated C++ string literal"),
- QStringLiteral("Maybe you forgot '/*!' at the beginning of the file?"));
- else
- return Tok_String;
- break;
- case '#':
- return getTokenAfterPreprocessor();
- case '&':
- yyCh = getChar();
- /*
- Removed check for '&&', only interpret '&=' as an operator.
- '&&' is also used for an rvalue reference. QTBUG-32675
- */
- if (yyCh == '=') {
- yyCh = getChar();
- return Tok_SomeOperator;
- } else {
- return Tok_Ampersand;
- }
- case '\'':
- yyCh = getChar();
- /*
- Allow empty character literal. QTBUG-25775
- */
- if (yyCh == '\'') {
- yyCh = getChar();
- break;
- }
- if (yyCh == '\\')
- yyCh = getChar();
- do {
- yyCh = getChar();
- } while (yyCh != EOF && yyCh != '\'');
-
- if (yyCh == EOF) {
- yyTokLoc.warning(QStringLiteral("Unterminated C++ character literal"));
- } else {
- yyCh = getChar();
- return Tok_Number;
- }
- break;
- case '(':
- yyCh = getChar();
- if (yyNumPreprocessorSkipping == 0)
- yyParenDepth++;
- if (isspace(yyCh)) {
- do {
- yyCh = getChar();
- } while (isspace(yyCh));
- yyLexLen = 1;
- yyLex[1] = '\0';
- }
- if (yyCh == '*') {
- yyCh = getChar();
- return Tok_LeftParenAster;
- }
- return Tok_LeftParen;
- case ')':
- yyCh = getChar();
- if (yyNumPreprocessorSkipping == 0)
- yyParenDepth--;
- return Tok_RightParen;
- case '*':
- yyCh = getChar();
- if (yyCh == '=') {
- yyCh = getChar();
- return Tok_SomeOperator;
- } else {
- return Tok_Aster;
- }
- case '^':
- yyCh = getChar();
- if (yyCh == '=') {
- yyCh = getChar();
- return Tok_SomeOperator;
- } else {
- return Tok_Caret;
- }
- case '+':
- yyCh = getChar();
- if (yyCh == '+' || yyCh == '=')
- yyCh = getChar();
- return Tok_SomeOperator;
- case ',':
- yyCh = getChar();
- return Tok_Comma;
- case '-':
- yyCh = getChar();
- if (yyCh == '-' || yyCh == '=') {
- yyCh = getChar();
- } else if (yyCh == '>') {
- yyCh = getChar();
- if (yyCh == '*')
- yyCh = getChar();
- }
- return Tok_SomeOperator;
- case '.':
- yyCh = getChar();
- if (yyCh == '*') {
- yyCh = getChar();
- } else if (yyCh == '.') {
- do {
- yyCh = getChar();
- } while (yyCh == '.');
- return Tok_Ellipsis;
- } else if (isdigit(yyCh)) {
- do {
- yyCh = getChar();
- } while (isalnum(yyCh) || yyCh == '.' || yyCh == '+' || yyCh == '-');
- return Tok_Number;
- }
- return Tok_SomeOperator;
- case '/':
- yyCh = getChar();
- if (yyCh == '/') {
- do {
- yyCh = getChar();
- } while (yyCh != EOF && yyCh != '\n');
- } else if (yyCh == '*') {
- bool metDoc = false; // empty doc is no doc
- bool metSlashAsterBang = false;
- bool metAster = false;
- bool metAsterSlash = false;
-
- yyCh = getChar();
- if (yyCh == '!')
- metSlashAsterBang = true;
-
- while (!metAsterSlash) {
- if (yyCh == EOF) {
- yyTokLoc.warning(QStringLiteral("Unterminated C++ comment"));
- break;
- } else {
- if (yyCh == '*') {
- metAster = true;
- } else if (metAster && yyCh == '/') {
- metAsterSlash = true;
- } else {
- metAster = false;
- if (isgraph(yyCh))
- metDoc = true;
- }
- }
- yyCh = getChar();
- }
- if (metSlashAsterBang && metDoc)
- return Tok_Doc;
- else if (yyParenDepth > 0)
- return Tok_Comment;
- } else {
- if (yyCh == '=')
- yyCh = getChar();
- return Tok_SomeOperator;
- }
- break;
- case ':':
- yyCh = getChar();
- if (yyCh == ':') {
- yyCh = getChar();
- return Tok_Gulbrandsen;
- } else {
- return Tok_Colon;
- }
- case ';':
- yyCh = getChar();
- return Tok_Semicolon;
- case '<':
- yyCh = getChar();
- if (yyCh == '<') {
- yyCh = getChar();
- if (yyCh == '=')
- yyCh = getChar();
- return Tok_SomeOperator;
- } else if (yyCh == '=') {
- yyCh = getChar();
- return Tok_SomeOperator;
- } else {
- return Tok_LeftAngle;
- }
- case '=':
- yyCh = getChar();
- if (yyCh == '=') {
- yyCh = getChar();
- return Tok_SomeOperator;
- } else {
- return Tok_Equal;
- }
- case '>':
- yyCh = getChar();
- if (yyCh == '>') {
- yyCh = getChar();
- if (yyCh == '=')
- yyCh = getChar();
- return Tok_SomeOperator;
- } else if (yyCh == '=') {
- yyCh = getChar();
- return Tok_SomeOperator;
- } else {
- return Tok_RightAngle;
- }
- case '?':
- yyCh = getChar();
- return Tok_SomeOperator;
- case '[':
- yyCh = getChar();
- if (yyNumPreprocessorSkipping == 0)
- yyBracketDepth++;
- return Tok_LeftBracket;
- case '\\':
- yyCh = getChar();
- yyCh = getChar(); // skip one character
- break;
- case ']':
- yyCh = getChar();
- if (yyNumPreprocessorSkipping == 0)
- yyBracketDepth--;
- return Tok_RightBracket;
- case '{':
- yyCh = getChar();
- if (yyNumPreprocessorSkipping == 0)
- yyBraceDepth++;
- return Tok_LeftBrace;
- case '}':
- yyCh = getChar();
- if (yyNumPreprocessorSkipping == 0)
- yyBraceDepth--;
- return Tok_RightBrace;
- case '|':
- yyCh = getChar();
- if (yyCh == '|' || yyCh == '=')
- yyCh = getChar();
- return Tok_SomeOperator;
- case '~':
- yyCh = getChar();
- return Tok_Tilde;
- case '@':
- yyCh = getChar();
- return Tok_At;
- default:
- // ### We should really prevent qdoc from looking at snippet files rather than
- // ### suppress warnings when reading them.
- if (yyNumPreprocessorSkipping == 0
- && !(yyTokLoc.fileName().endsWith(".qdoc")
- || yyTokLoc.fileName().endsWith(".js"))) {
- yyTokLoc.warning(QStringLiteral("Hostile character 0x%1 in C++ source")
- .arg((uchar)yyCh, 1, 16));
- }
- yyCh = getChar();
- }
- }
- }
-
- if (yyPreprocessorSkipping.count() > 1) {
- yyTokLoc.warning(QStringLiteral("Expected #endif before end of file"));
- // clear it out or we get an infinite loop!
- while (!yyPreprocessorSkipping.isEmpty()) {
- popSkipping();
- }
- }
-
- strcpy(yyLex, "end-of-input");
- yyLexLen = strlen(yyLex);
- return Tok_Eoi;
-}
-
-void Tokenizer::initialize()
-{
- Config &config = Config::instance();
- QString versionSym = config.getString(CONFIG_VERSIONSYM);
-
- QString sourceEncoding = config.getString(CONFIG_SOURCEENCODING);
- if (sourceEncoding.isEmpty())
- sourceEncoding = QLatin1String("UTF-8");
- sourceDecoder = QStringDecoder(sourceEncoding.toUtf8());
- if (!sourceDecoder.isValid()) {
- qWarning() << "Source encoding" << sourceEncoding << "is not supported. Using UTF-8.";
- sourceDecoder = QStringDecoder::Utf8;
- }
-
- comment = new QRegularExpression("/(?:\\*.*\\*/|/.*\n|/[^\n]*$)", QRegularExpression::InvertedGreedinessOption);
- versionX = new QRegularExpression("$cannot possibly match^");
- if (!versionSym.isEmpty())
- versionX->setPattern("^[ \t]*(?:" + QRegularExpression::escape(versionSym)
- + ")[ \t]+\"([^\"]*)\"[ \t]*$");
- definedX = new QRegularExpression("^defined ?\\(?([A-Z_0-9a-z]+) ?\\)?$");
-
- QStringList d = config.getStringList(CONFIG_DEFINES);
- d += "qdoc";
- defines = new QRegularExpression(QRegularExpression::anchoredPattern(d.join('|')));
- falsehoods = new QRegularExpression(QRegularExpression::anchoredPattern(config.getStringList(CONFIG_FALSEHOODS).join('|')));
-
- /*
- The keyword hash table is always cleared before any words are inserted.
- */
- memset(kwordHashTable, 0, sizeof(kwordHashTable));
- for (int i = 0; i < Tok_LastKeyword - Tok_FirstKeyword + 1; i++)
- insertKwordIntoHash(kwords[i], i + 1);
-
- ignoredTokensAndDirectives = new QHash<QByteArray, bool>;
-
- const QStringList tokens =
- config.getStringList(LANGUAGE_CPP + Config::dot + CONFIG_IGNORETOKENS);
- for (const auto &token : tokens) {
- const QByteArray tb = token.toLatin1();
- ignoredTokensAndDirectives->insert(tb, false);
- insertKwordIntoHash(tb.data(), -1);
- }
-
- const QStringList directives =
- config.getStringList(LANGUAGE_CPP + Config::dot + CONFIG_IGNOREDIRECTIVES);
- for (const auto &directive : directives) {
- const QByteArray db = directive.toLatin1();
- ignoredTokensAndDirectives->insert(db, true);
- insertKwordIntoHash(db.data(), -1);
- }
-}
-
-/*!
- The heap allocated variables are freed here. The keyword
- hash table is not cleared here, but it is cleared in the
- initialize() function, before any keywords are inserted.
- */
-void Tokenizer::terminate()
-{
- delete comment;
- comment = nullptr;
- delete versionX;
- versionX = nullptr;
- delete definedX;
- definedX = nullptr;
- delete defines;
- defines = nullptr;
- delete falsehoods;
- falsehoods = nullptr;
- delete ignoredTokensAndDirectives;
- ignoredTokensAndDirectives = nullptr;
-}
-
-void Tokenizer::init()
-{
- yyLexBuf1 = new char[(int)yyLexBufSize];
- yyLexBuf2 = new char[(int)yyLexBufSize];
- yyPrevLex = yyLexBuf1;
- yyPrevLex[0] = '\0';
- yyLex = yyLexBuf2;
- yyLex[0] = '\0';
- yyLexLen = 0;
- yyPreprocessorSkipping.push(false);
- yyNumPreprocessorSkipping = 0;
- yyBraceDepth = 0;
- yyParenDepth = 0;
- yyBracketDepth = 0;
- yyCh = '\0';
- parsingMacro = false;
-}
-
-void Tokenizer::start(const Location &loc)
-{
- yyTokLoc = loc;
- yyCurLoc = loc;
- yyCurLoc.start();
- strcpy(yyPrevLex, "beginning-of-input");
- strcpy(yyLex, "beginning-of-input");
- yyLexLen = strlen(yyLex);
- yyBraceDepth = 0;
- yyParenDepth = 0;
- yyBracketDepth = 0;
- yyCh = '\0';
- yyCh = getChar();
-}
-
-/*
- Returns the next token, if # was met. This function interprets the
- preprocessor directive, skips over any #ifdef'd out tokens, and returns the
- token after all of that.
-*/
-int Tokenizer::getTokenAfterPreprocessor()
-{
- yyCh = getChar();
- while (isspace(yyCh) && yyCh != '\n')
- yyCh = getChar();
-
- /*
- #directive condition
- */
- QString directive;
- QString condition;
-
- while (isalpha(yyCh)) {
- directive += QChar(yyCh);
- yyCh = getChar();
- }
- if (!directive.isEmpty()) {
- while (yyCh != EOF && yyCh != '\n') {
- if (yyCh == '\\') {
- yyCh = getChar();
- if (yyCh == '\r')
- yyCh = getChar();
- }
- condition += yyCh;
- yyCh = getChar();
- }
- condition.remove(*comment);
- condition = condition.simplified();
-
- /*
- The #if, #ifdef, #ifndef, #elif, #else, and #endif
- directives have an effect on the skipping stack. For
- instance, if the code processed so far is
-
- #if 1
- #if 0
- #if 1
- // ...
- #else
-
- the skipping stack contains, from bottom to top, false true
- true (assuming 0 is false and 1 is true). If at least one
- entry of the stack is true, the tokens are skipped.
-
- This mechanism is simple yet hard to understand.
- */
- if (directive[0] == QChar('i')) {
- if (directive == QString("if"))
- pushSkipping(!isTrue(condition));
- else if (directive == QString("ifdef"))
- pushSkipping(!defines->match(condition).hasMatch());
- else if (directive == QString("ifndef"))
- pushSkipping(defines->match(condition).hasMatch());
- } else if (directive[0] == QChar('e')) {
- if (directive == QString("elif")) {
- bool old = popSkipping();
- if (old)
- pushSkipping(!isTrue(condition));
- else
- pushSkipping(true);
- } else if (directive == QString("else")) {
- pushSkipping(!popSkipping());
- } else if (directive == QString("endif")) {
- popSkipping();
- }
- } else if (directive == QString("define")) {
- auto match = versionX->match(condition);
- if (match.hasMatch())
- yyVersion = match.captured(1);
- }
- }
-
- int tok;
- do {
- /*
- We set yyLex now, and after getToken() this will be
- yyPrevLex. This way, we skip over the preprocessor
- directive.
- */
- qstrcpy(yyLex, yyPrevLex);
-
- /*
- If getToken() meets another #, it will call
- getTokenAfterPreprocessor() once again, which could in turn
- call getToken() again, etc. Unless there are 10,000 or so
- preprocessor directives in a row, this shouldn't overflow
- the stack.
- */
- tok = getToken();
- } while (yyNumPreprocessorSkipping > 0 && tok != Tok_Eoi);
- return tok;
-}
-
-/*
- Pushes a new skipping value onto the stack. This corresponds to entering a
- new #if block.
-*/
-void Tokenizer::pushSkipping(bool skip)
-{
- yyPreprocessorSkipping.push(skip);
- if (skip)
- yyNumPreprocessorSkipping++;
-}
-
-/*
- Pops a skipping value from the stack. This corresponds to reaching a #endif.
-*/
-bool Tokenizer::popSkipping()
-{
- if (yyPreprocessorSkipping.isEmpty()) {
- yyTokLoc.warning(QStringLiteral("Unexpected #elif, #else or #endif"));
- return true;
- }
-
- bool skip = yyPreprocessorSkipping.pop();
- if (skip)
- yyNumPreprocessorSkipping--;
- return skip;
-}
-
-/*
- Returns \c true if the condition evaluates as true, otherwise false. The
- condition is represented by a string. Unsophisticated parsing techniques are
- used. The preprocessing method could be named StriNg-Oriented PreProcessing,
- as SNOBOL stands for StriNg-Oriented symBOlic Language.
-*/
-bool Tokenizer::isTrue(const QString &condition)
-{
- int firstOr = -1;
- int firstAnd = -1;
- int parenDepth = 0;
-
- /*
- Find the first logical operator at top level, but be careful
- about precedence. Examples:
-
- X || Y // the or
- X || Y || Z // the leftmost or
- X || Y && Z // the or
- X && Y || Z // the or
- (X || Y) && Z // the and
- */
- for (int i = 0; i < condition.length() - 1; i++) {
- QChar ch = condition[i];
- if (ch == QChar('(')) {
- parenDepth++;
- } else if (ch == QChar(')')) {
- parenDepth--;
- } else if (parenDepth == 0) {
- if (condition[i + 1] == ch) {
- if (ch == QChar('|')) {
- firstOr = i;
- break;
- } else if (ch == QChar('&')) {
- if (firstAnd == -1)
- firstAnd = i;
- }
- }
- }
- }
- if (firstOr != -1)
- return isTrue(condition.left(firstOr)) || isTrue(condition.mid(firstOr + 2));
- if (firstAnd != -1)
- return isTrue(condition.left(firstAnd)) && isTrue(condition.mid(firstAnd + 2));
-
- QString t = condition.simplified();
- if (t.isEmpty())
- return true;
-
- if (t[0] == QChar('!'))
- return !isTrue(t.mid(1));
- if (t[0] == QChar('(') && t.endsWith(QChar(')')))
- return isTrue(t.mid(1, t.length() - 2));
-
- auto match = definedX->match(t);
- if (match.hasMatch())
- return defines->match(match.captured(1)).hasMatch();
- else
- return !falsehoods->match(t).hasMatch();
-}
-
-QString Tokenizer::lexeme() const
-{
- return sourceDecoder(yyLex);
-}
-
-QString Tokenizer::previousLexeme() const
-{
- return sourceDecoder(yyPrevLex);
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/tokenizer.h b/src/qdoc/tokenizer.h
deleted file mode 100644
index 9842b6761..000000000
--- a/src/qdoc/tokenizer.h
+++ /dev/null
@@ -1,232 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- tokenizer.h
-*/
-
-#ifndef TOKENIZER_H
-#define TOKENIZER_H
-
-#include "location.h"
-
-#include <QtCore/qfile.h>
-#include <QtCore/qstack.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-/*
- Here come the C++ tokens we support. The first part contains
- all-purpose tokens; then come keywords.
-
- If you add a keyword, make sure to modify the keyword array in
- tokenizer.cpp as well, and possibly adjust Tok_FirstKeyword and
- Tok_LastKeyword.
-*/
-enum {
- Tok_Eoi,
- Tok_Ampersand,
- Tok_Aster,
- Tok_Caret,
- Tok_LeftParen,
- Tok_RightParen,
- Tok_LeftParenAster,
- Tok_Equal,
- Tok_LeftBrace,
- Tok_RightBrace,
- Tok_Semicolon,
- Tok_Colon,
- Tok_LeftAngle,
- Tok_RightAngle,
- Tok_Comma,
- Tok_Ellipsis,
- Tok_Gulbrandsen,
- Tok_LeftBracket,
- Tok_RightBracket,
- Tok_Tilde,
- Tok_SomeOperator,
- Tok_Number,
- Tok_String,
- Tok_Doc,
- Tok_Comment,
- Tok_Ident,
- Tok_At,
- Tok_char,
- Tok_class,
- Tok_const,
- Tok_double,
- Tok_enum,
- Tok_explicit,
- Tok_friend,
- Tok_inline,
- Tok_int,
- Tok_long,
- Tok_namespace,
- Tok_operator,
- Tok_private,
- Tok_protected,
- Tok_public,
- Tok_short,
- Tok_signals,
- Tok_signed,
- Tok_slots,
- Tok_static,
- Tok_struct,
- Tok_template,
- Tok_typedef,
- Tok_typename,
- Tok_union,
- Tok_unsigned,
- Tok_using,
- Tok_virtual,
- Tok_void,
- Tok_volatile,
- Tok_int64,
- Tok_default,
- Tok_delete,
- Tok_final,
- Tok_override,
- Tok_Q_OBJECT,
- Tok_Q_OVERRIDE,
- Tok_Q_PROPERTY,
- Tok_Q_PRIVATE_PROPERTY,
- Tok_Q_DECLARE_SEQUENTIAL_ITERATOR,
- Tok_Q_DECLARE_MUTABLE_SEQUENTIAL_ITERATOR,
- Tok_Q_DECLARE_ASSOCIATIVE_ITERATOR,
- Tok_Q_DECLARE_MUTABLE_ASSOCIATIVE_ITERATOR,
- Tok_Q_DECLARE_FLAGS,
- Tok_Q_SIGNALS,
- Tok_Q_SLOTS,
- Tok_QT_COMPAT,
- Tok_QT_COMPAT_CONSTRUCTOR,
- Tok_QT_DEPRECATED,
- Tok_QT_MOC_COMPAT,
- Tok_QT_MODULE,
- Tok_QT3_SUPPORT,
- Tok_QT3_SUPPORT_CONSTRUCTOR,
- Tok_QT3_MOC_SUPPORT,
- Tok_QDOC_PROPERTY,
- Tok_QPrivateSignal,
- Tok_FirstKeyword = Tok_char,
- Tok_LastKeyword = Tok_QPrivateSignal
-};
-
-/*
- The Tokenizer class implements lexical analysis of C++ source
- files.
-
- Not every operator or keyword of C++ is recognized; only those
- that are interesting to us. Some Qt keywords or macros are also
- recognized.
-*/
-
-class Tokenizer
-{
-public:
- Tokenizer(const Location &loc, const QByteArray &in);
- Tokenizer(const Location &loc, QFile &file);
-
- ~Tokenizer();
-
- int getToken();
- void setParsingFnOrMacro(bool macro) { parsingMacro = macro; }
- bool parsingFnOrMacro() const { return parsingMacro; }
-
- const Location &location() const { return yyTokLoc; }
- QString previousLexeme() const;
- QString lexeme() const;
- QString version() const { return yyVersion; }
- int braceDepth() const { return yyBraceDepth; }
- int parenDepth() const { return yyParenDepth; }
- int bracketDepth() const { return yyBracketDepth; }
- Location &tokenLocation() { return yyTokLoc; }
-
- static void initialize();
- static void terminate();
- static bool isTrue(const QString &condition);
-
-private:
- void init();
- void start(const Location &loc);
- /*
- This limit on the length of a lexeme seems fairly high, but a
- doc comment can be arbitrarily long. The previous 65,536 limit
- was reached by Mark Summerfield.
- */
- enum { yyLexBufSize = 524288 };
-
- int getch() { return yyPos == yyIn.size() ? EOF : yyIn[yyPos++]; }
-
- inline int getChar()
- {
- if (yyCh == EOF)
- return EOF;
- if (yyLexLen < yyLexBufSize - 1) {
- yyLex[yyLexLen++] = (char)yyCh;
- yyLex[yyLexLen] = '\0';
- }
- yyCurLoc.advance(yyCh);
- int ch = getch();
- if (ch == EOF)
- return EOF;
- // cast explicitly to make sure the value of ch
- // is in range [0..255] to avoid assert messages
- // when using debug CRT that checks its input.
- return int(uint(uchar(ch)));
- }
-
- int getTokenAfterPreprocessor();
- void pushSkipping(bool skip);
- bool popSkipping();
-
- Location yyTokLoc;
- Location yyCurLoc;
- char *yyLexBuf1;
- char *yyLexBuf2;
- char *yyPrevLex;
- char *yyLex;
- size_t yyLexLen;
- QStack<bool> yyPreprocessorSkipping;
- int yyNumPreprocessorSkipping;
- int yyBraceDepth;
- int yyParenDepth;
- int yyBracketDepth;
- int yyCh;
-
- QString yyVersion;
- bool parsingMacro;
-
-protected:
- QByteArray yyIn;
- int yyPos;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/topic.h b/src/qdoc/topic.h
deleted file mode 100644
index adfa46af9..000000000
--- a/src/qdoc/topic.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef TOPIC_H
-#define TOPIC_H
-
-QT_BEGIN_NAMESPACE
-
-struct Topic
-{
-public:
- Topic() = default;
- Topic(QString &t, QString a) : topic(t), args(std::move(a)) {}
- ~Topic() = default;
-
- bool isEmpty() const { return topic.isEmpty(); }
- void clear()
- {
- topic.clear();
- args.clear();
- }
-
- QString topic;
- QString args;
-};
-typedef QList<Topic> TopicList;
-
-QT_END_NAMESPACE
-
-#endif // TOPIC_H
diff --git a/src/qdoc/tree.cpp b/src/qdoc/tree.cpp
deleted file mode 100644
index 138798d20..000000000
--- a/src/qdoc/tree.cpp
+++ /dev/null
@@ -1,1366 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "tree.h"
-
-#include "classnode.h"
-#include "collectionnode.h"
-#include "doc.h"
-#include "enumnode.h"
-#include "functionnode.h"
-#include "htmlgenerator.h"
-#include "location.h"
-#include "node.h"
-#include "qdocdatabase.h"
-#include "text.h"
-#include "typedefnode.h"
-#include "usingclause.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class Tree
-
- This class constructs and maintains a tree of instances of
- the subclasses of Node.
-
- This class is now private. Only class QDocDatabase has access.
- Please don't change this. If you must access class Tree, do it
- though the pointer to the singleton QDocDatabase.
-
- Tree is being converted to a forest. A static member provides a
- map of Tree *values with the module names as the keys. There is
- one Tree in the map for each index file read, and there is one
- tree that is not in the map for the module whose documentation
- is being generated.
- */
-
-/*!
- Constructs a Tree. \a qdb is the pointer to the singleton
- qdoc database that is constructing the tree. This might not
- be necessary, and it might be removed later.
-
- \a camelCaseModuleName is the project name for this tree
- as it appears in the qdocconf file.
- */
-Tree::Tree(const QString &camelCaseModuleName, QDocDatabase *qdb)
- : treeHasBeenAnalyzed_(false),
- docsHaveBeenGenerated_(false),
- linkCount_(0),
- camelCaseModuleName_(camelCaseModuleName),
- physicalModuleName_(camelCaseModuleName.toLower()),
- qdb_(qdb),
- root_(nullptr, QString())
-{
- root_.setPhysicalModuleName(physicalModuleName_);
- root_.setTree(this);
-}
-
-/*!
- Destroys the Tree. The root node is a data member
- of this object, so its destructor is called. The
- destructor of each child node is called, and these
- destructors are recursive. Thus the entire tree is
- destroyed.
-
- There are two maps of targets, keywords, and contents.
- One map is indexed by ref, the other by title. The ref
- is just the canonical form of the title. Both maps
- use the same set of TargetRec objects as the values,
- so the destructor only deletes the values from one of
- the maps. Then it clears both maps.
- */
-Tree::~Tree()
-{
- for (auto i = nodesByTargetRef_.begin(); i != nodesByTargetRef_.end(); ++i) {
- delete i.value();
- }
- nodesByTargetRef_.clear();
- nodesByTargetTitle_.clear();
-}
-
-/* API members */
-
-/*!
- Calls findClassNode() first with \a path and \a start. If
- it finds a node, the node is returned. If not, it calls
- findNamespaceNode() with the same parameters. The result
- is returned.
- */
-Node *Tree::findNodeForInclude(const QStringList &path) const
-{
- Node *n = findClassNode(path);
- if (n == nullptr)
- n = findNamespaceNode(path);
- return n;
-}
-
-/*!
- This function searches this tree for an Aggregate node with
- the specified \a name. It returns the pointer to that node
- or nullptr.
-
- We might need to split the name on '::' but we assume the
- name is a single word at the moment.
- */
-Aggregate *Tree::findAggregate(const QString &name)
-{
- QStringList path = name.split(QLatin1String("::"));
- return static_cast<Aggregate *>(findNodeRecursive(path, 0, const_cast<NamespaceNode *>(root()),
- &Node::isFirstClassAggregate));
-}
-
-/*!
- Find the C++ class node named \a path. Begin the search at the
- \a start node. If the \a start node is 0, begin the search
- at the root of the tree. Only a C++ class node named \a path is
- acceptible. If one is not found, 0 is returned.
- */
-ClassNode *Tree::findClassNode(const QStringList &path, const Node *start) const
-{
- if (start == nullptr)
- start = const_cast<NamespaceNode *>(root());
- return static_cast<ClassNode *>(findNodeRecursive(path, 0, start, &Node::isClassNode));
-}
-
-/*!
- Find the Namespace node named \a path. Begin the search at
- the root of the tree. Only a Namespace node named \a path
- is acceptible. If one is not found, 0 is returned.
- */
-NamespaceNode *Tree::findNamespaceNode(const QStringList &path) const
-{
- Node *start = const_cast<NamespaceNode *>(root());
- return static_cast<NamespaceNode *>(findNodeRecursive(path, 0, start, &Node::isNamespace));
-}
-
-/*!
- Find the Qml type node named \a path. Begin the search at the
- \a start node. If the \a start node is 0, begin the search
- at the root of the tree. Only a Qml type node named <\a path is
- acceptible. If one is not found, 0 is returned.
- */
-QmlTypeNode *Tree::findQmlTypeNode(const QStringList &path)
-{
- /*
- If the path contains one or two double colons ("::"),
- check first to see if the first two path strings refer
- to a QML element. If they do, path[0] will be the QML
- module identifier, and path[1] will be the QML type.
- If the anser is yes, the reference identifies a QML
- class node.
- */
- if (path.size() >= 2 && !path[0].isEmpty()) {
- QmlTypeNode *qcn = qdb_->findQmlType(path[0], path[1]);
- if (qcn != nullptr)
- return qcn;
- }
- return static_cast<QmlTypeNode *>(findNodeRecursive(path, 0, root(), &Node::isQmlType));
-}
-
-/*!
- This function searches for the node specified by \a path.
- The matching node can be one of several different types
- including a C++ class, a C++ namespace, or a C++ header
- file.
-
- I'm not sure if it can be a QML type, but if that is a
- possibility, the code can easily accommodate it.
-
- If a matching node is found, a pointer to it is returned.
- Otherwise 0 is returned.
- */
-Aggregate *Tree::findRelatesNode(const QStringList &path)
-{
- Node *n = findNodeRecursive(path, 0, root(), &Node::isRelatableType);
- return (((n != nullptr) && n->isAggregate()) ? static_cast<Aggregate *>(n) : nullptr);
-}
-
-/*!
- Inserts function name \a funcName and function role \a funcRole into
- the property function map for the specified \a property.
- */
-void Tree::addPropertyFunction(PropertyNode *property, const QString &funcName,
- PropertyNode::FunctionRole funcRole)
-{
- unresolvedPropertyMap[property].insert(funcRole, funcName);
-}
-
-/*!
- This function resolves C++ inheritance and reimplementation
- settings for each C++ class node found in the tree beginning
- at \a n. It also calls itself recursively for each C++ class
- node or namespace node it encounters.
-
- This function does not resolve QML inheritance.
- */
-void Tree::resolveBaseClasses(Aggregate *n)
-{
- for (auto it = n->constBegin(); it != n->constEnd(); ++it) {
- if ((*it)->isClassNode()) {
- ClassNode *cn = static_cast<ClassNode *>(*it);
- QList<RelatedClass> &bases = cn->baseClasses();
- for (auto &base : bases) {
- if (base.m_node == nullptr) {
- Node *n = qdb_->findClassNode(base.m_path);
- /*
- If the node for the base class was not found,
- the reason might be that the subclass is in a
- namespace and the base class is in the same
- namespace, but the base class name was not
- qualified with the namespace name. That is the
- case most of the time. Then restart the search
- at the parent of the subclass node (the namespace
- node) using the unqualified base class name.
- */
- if (n == nullptr) {
- Aggregate *parent = cn->parent();
- if (parent != nullptr)
- // Exclude the root namespace
- if (parent->isNamespace() && !parent->name().isEmpty())
- n = findClassNode(base.m_path, parent);
- }
- if (n != nullptr) {
- ClassNode *bcn = static_cast<ClassNode *>(n);
- base.m_node = bcn;
- bcn->addDerivedClass(base.m_access, cn);
- }
- }
- }
- resolveBaseClasses(cn);
- } else if ((*it)->isNamespace()) {
- resolveBaseClasses(static_cast<NamespaceNode *>(*it));
- }
- }
-}
-
-/*!
- */
-void Tree::resolvePropertyOverriddenFromPtrs(Aggregate *n)
-{
- for (auto node = n->constBegin(); node != n->constEnd(); ++node) {
- if ((*node)->isClassNode()) {
- ClassNode *cn = static_cast<ClassNode *>(*node);
- for (auto property = cn->constBegin(); property != cn->constEnd(); ++property) {
- if ((*property)->isProperty())
- cn->resolvePropertyOverriddenFromPtrs(static_cast<PropertyNode *>(*property));
- }
- resolvePropertyOverriddenFromPtrs(cn);
- } else if ((*node)->isNamespace()) {
- resolvePropertyOverriddenFromPtrs(static_cast<NamespaceNode *>(*node));
- }
- }
-}
-
-/*!
- */
-void Tree::resolveProperties()
-{
- for (auto propEntry = unresolvedPropertyMap.constBegin();
- propEntry != unresolvedPropertyMap.constEnd(); ++propEntry) {
- PropertyNode *property = propEntry.key();
- Aggregate *parent = property->parent();
- QString getterName = (*propEntry)[PropertyNode::Getter];
- QString setterName = (*propEntry)[PropertyNode::Setter];
- QString resetterName = (*propEntry)[PropertyNode::Resetter];
- QString notifierName = (*propEntry)[PropertyNode::Notifier];
-
- for (auto it = parent->constBegin(); it != parent->constEnd(); ++it) {
- if ((*it)->isFunction()) {
- FunctionNode *function = static_cast<FunctionNode *>(*it);
- if (function->access() == property->access()
- && (function->status() == property->status() || function->doc().isEmpty())) {
- if (function->name() == getterName) {
- property->addFunction(function, PropertyNode::Getter);
- } else if (function->name() == setterName) {
- property->addFunction(function, PropertyNode::Setter);
- } else if (function->name() == resetterName) {
- property->addFunction(function, PropertyNode::Resetter);
- } else if (function->name() == notifierName) {
- property->addSignal(function, PropertyNode::Notifier);
- }
- }
- }
- }
- }
-
- for (auto propEntry = unresolvedPropertyMap.constBegin();
- propEntry != unresolvedPropertyMap.constEnd(); ++propEntry) {
- PropertyNode *property = propEntry.key();
- // redo it to set the property functions
- if (property->overriddenFrom())
- property->setOverriddenFrom(property->overriddenFrom());
- }
-
- unresolvedPropertyMap.clear();
-}
-
-/*!
- For each QML class node that points to a C++ class node,
- follow its C++ class node pointer and set the C++ class
- node's QML class node pointer back to the QML class node.
- */
-void Tree::resolveCppToQmlLinks()
-{
-
- const NodeList &children = root_.childNodes();
- for (auto *child : children) {
- if (child->isQmlType() || child->isJsType()) {
- QmlTypeNode *qcn = static_cast<QmlTypeNode *>(child);
- ClassNode *cn = const_cast<ClassNode *>(qcn->classNode());
- if (cn)
- cn->setQmlElement(qcn);
- }
- }
-}
-
-/*!
- For each C++ class node, resolve any \c using clauses
- that appeared in the class declaration.
-
- For type aliases, resolve the aliased node.
- */
-void Tree::resolveUsingClauses(Aggregate *parent)
-{
- if (!parent)
- parent = &root_;
- for (auto *child : parent->childNodes()) {
- if (child->isClassNode()) {
- ClassNode *cn = static_cast<ClassNode *>(child);
- QList<UsingClause> &usingClauses = cn->usingClauses();
- for (auto &usingClause : usingClauses) {
- if (usingClause.node() == nullptr) {
- const Node *n = qdb_->findFunctionNode(usingClause.signature(), cn, Node::CPP);
- if (n != nullptr)
- usingClause.setNode(n);
- }
- }
- } else if (child->isTypeAlias()) {
- TypeAliasNode *ta = static_cast<TypeAliasNode *>(child);
- ta->setAliasedNode(qdb_->findNodeForTarget(ta->aliasedType(), child->parent()));
- }
-
- if (child->genus() == Node::CPP && child->isAggregate())
- resolveUsingClauses(static_cast<Aggregate *>(child));
- }
-}
-
-/*!
- Traverse this Tree and for each ClassNode found, remove
- from its list of base classes any that are marked private
- or internal. When a class is removed from a base class
- list, promote its public pase classes to be base classes
- of the class where the base class was removed. This is
- done for documentation purposes. The function is recursive
- on namespace nodes.
- */
-void Tree::removePrivateAndInternalBases(NamespaceNode *rootNode)
-{
- if (rootNode == nullptr)
- rootNode = root();
-
- for (auto node = rootNode->constBegin(); node != rootNode->constEnd(); ++node) {
- if ((*node)->isClassNode())
- static_cast<ClassNode *>(*node)->removePrivateAndInternalBases();
- else if ((*node)->isNamespace())
- removePrivateAndInternalBases(static_cast<NamespaceNode *>(*node));
- }
-}
-
-/*!
- */
-ClassList Tree::allBaseClasses(const ClassNode *classNode) const
-{
- ClassList result;
- const auto &baseClasses = classNode->baseClasses();
- for (const auto &relatedClass : baseClasses) {
- if (relatedClass.m_node != nullptr) {
- result += relatedClass.m_node;
- result += allBaseClasses(relatedClass.m_node);
- }
- }
- return result;
-}
-
-/*!
- Find the node with the specified \a path name that is of
- the specified \a type and \a subtype. Begin the search at
- the \a start node. If the \a start node is 0, begin the
- search at the tree root. \a subtype is not used unless
- \a type is \c{Page}.
- */
-Node *Tree::findNodeByNameAndType(const QStringList &path, bool (Node::*isMatch)() const) const
-{
- return findNodeRecursive(path, 0, root(), isMatch);
-}
-
-/*!
- Recursive search for a node identified by \a path. Each
- path element is a name. \a pathIndex specifies the index
- of the name in \a path to try to match. \a start is the
- node whose children shoulod be searched for one that has
- that name. Each time a match is found, increment the
- \a pathIndex and call this function recursively.
-
- If the end of the path is reached (i.e. if a matching
- node is found for each name in the \a path), the \a type
- must match the type of the last matching node, and if the
- type is \e{Page}, the \a subtype must match as well.
-
- If the algorithm is successful, the pointer to the final
- node is returned. Otherwise 0 is returned.
- */
-Node *Tree::findNodeRecursive(const QStringList &path, int pathIndex, const Node *start,
- bool (Node::*isMatch)() const) const
-{
- if (start == nullptr || path.isEmpty())
- return nullptr;
- Node *node = const_cast<Node *>(start);
- if (!node->isAggregate())
- return ((pathIndex >= path.size()) ? node : nullptr);
- Aggregate *current = static_cast<Aggregate *>(node);
- const NodeList &children = current->childNodes();
- const QString &name = path.at(pathIndex);
- for (auto *node : children) {
- if (node == nullptr)
- continue;
- if (node->name() == name) {
- if (pathIndex + 1 >= path.size()) {
- if ((node->*(isMatch))())
- return node;
- continue;
- } else { // Search the children of n for the next name in the path.
- node = findNodeRecursive(path, pathIndex + 1, node, isMatch);
- if (node != nullptr)
- return node;
- }
- }
- }
- return nullptr;
-}
-
-/*!
- Searches the tree for a node that matches the \a path plus
- the \a target. The search begins at \a start and moves up
- the parent chain from there, or, if \a start is 0, the search
- begins at the root.
-
- The \a flags can indicate whether to search base classes and/or
- the enum values in enum types. \a genus can be a further restriction
- on what kind of node is an acceptible match, i.e. CPP or QML.
-
- If a matching node is found, \a ref is an output parameter that
- is set to the HTML reference to use for the link.
- */
-const Node *Tree::findNodeForTarget(const QStringList &path, const QString &target,
- const Node *start, int flags, Node::Genus genus,
- QString &ref) const
-{
- const Node *node = nullptr;
- if ((genus == Node::DontCare) || (genus == Node::DOC)) {
- node = findPageNodeByTitle(path.at(0));
- if (node) {
- if (!target.isEmpty()) {
- ref = getRef(target, node);
- if (ref.isEmpty())
- node = nullptr;
- }
- if (node)
- return node;
- }
- }
-
- node = findUnambiguousTarget(path.join(QLatin1String("::")), genus, ref);
- if (node) {
- if (!target.isEmpty()) {
- ref = getRef(target, node);
- if (ref.isEmpty())
- node = nullptr;
- }
- if (node)
- return node;
- }
-
- const Node *current = start;
- if (current == nullptr)
- current = root();
-
- /*
- If the path contains one or two double colons ("::"),
- check first to see if the first two path strings refer
- to a QML element. If they do, path[0] will be the QML
- module identifier, and path[1] will be the QML type.
- If the answer is yes, the reference identifies a QML
- type node.
- */
- int path_idx = 0;
- if (((genus == Node::QML) || (genus == Node::DontCare)) && (path.size() >= 2)
- && !path[0].isEmpty()) {
- QmlTypeNode *qcn = lookupQmlType(QString(path[0] + "::" + path[1]));
- if (qcn) {
- current = qcn;
- if (path.size() == 2) {
- if (!target.isEmpty()) {
- ref = getRef(target, current);
- if (!ref.isEmpty())
- return current;
- return nullptr;
- } else
- return current;
- }
- path_idx = 2;
- }
- }
-
- while (current != nullptr) {
- if (current->isAggregate()) { // Should this be isPageNode() ???
- const Node *node =
- matchPathAndTarget(path, path_idx, target, current, flags, genus, ref);
- if (node)
- return node;
- }
- current = current->parent();
- path_idx = 0;
- }
- return nullptr;
-}
-
-/*!
- First, the \a path is used to find a node. The \a path
- matches some part of the node's fully quallified name.
- If the \a target is not empty, it must match a target
- in the matching node. If the matching of the \a path
- and the \a target (if present) is successful, \a ref
- is set from the \a target, and the pointer to the
- matching node is returned. \a idx is the index into the
- \a path where to begin the matching. The function is
- recursive with idx being incremented for each recursive
- call.
-
- The matching node must be of the correct \a genus, i.e.
- either QML or C++, but \a genus can be set to \c DontCare.
- \a flags indicates whether to search base classes and
- whether to search for an enum value. \a node points to
- the node where the search should begin, assuming the
- \a path is a not a fully-qualified name. \a node is
- most often the root of this Tree.
- */
-const Node *Tree::matchPathAndTarget(const QStringList &path, int idx, const QString &target,
- const Node *node, int flags, Node::Genus genus,
- QString &ref) const
-{
- /*
- If the path has been matched, then if there is a target,
- try to match the target. If there is a target, but you
- can't match it at the end of the path, give up; return 0.
- */
- if (idx == path.size()) {
- if (!target.isEmpty()) {
- ref = getRef(target, node);
- if (ref.isEmpty())
- return nullptr;
- }
- if (node->isFunction() && node->name() == node->parent()->name())
- node = node->parent();
- return node;
- }
-
- QString name = path.at(idx);
- if (node->isAggregate()) {
- NodeVector nodes;
- static_cast<const Aggregate *>(node)->findChildren(name, nodes);
- for (const auto *node : qAsConst(nodes)) {
- if (genus != Node::DontCare && node->genus() != genus)
- continue;
- const Node *t = matchPathAndTarget(path, idx + 1, target, node, flags, genus, ref);
- if (t && !t->isPrivate())
- return t;
- }
- }
- if (target.isEmpty()) {
- if ((idx) == (path.size() - 1) && node->isAggregate() && (flags & SearchEnumValues)) {
- const Node *t =
- static_cast<const Aggregate *>(node)->findEnumNodeForValue(path.at(idx));
- if (t)
- return t;
- }
- }
- if (((genus == Node::CPP) || (genus == Node::DontCare)) && node->isClassNode()
- && (flags & SearchBaseClasses)) {
- const ClassList bases = allBaseClasses(static_cast<const ClassNode *>(node));
- for (const auto *base : bases) {
- const Node *t = matchPathAndTarget(path, idx, target, base, flags, genus, ref);
- if (t && !t->isPrivate())
- return t;
- if (target.isEmpty()) {
- if ((idx) == (path.size() - 1) && (flags & SearchEnumValues)) {
- t = base->findEnumNodeForValue(path.at(idx));
- if (t)
- return t;
- }
- }
- }
- }
- return nullptr;
-}
-
-/*!
- Searches the tree for a node that matches the \a path. The
- search begins at \a start but can move up the parent chain
- recursively if no match is found. The \a flags are used to
- restrict the search.
- */
-const Node *Tree::findNode(const QStringList &path, const Node *start, int flags,
- Node::Genus genus) const
-{
- const Node *current = start;
- if (current == nullptr)
- current = root();
-
- do {
- const Node *node = current;
- int i;
- int start_idx = 0;
-
- /*
- If the path contains one or two double colons ("::"),
- check first to see if the first two path strings refer
- to a QML element. If they do, path[0] will be the QML
- module identifier, and path[1] will be the QML type.
- If the answer is yes, the reference identifies a QML
- type node.
- */
- if (((genus == Node::QML) || (genus == Node::DontCare)) && (path.size() >= 2)
- && !path[0].isEmpty()) {
- QmlTypeNode *qcn = lookupQmlType(QString(path[0] + "::" + path[1]));
- if (qcn != nullptr) {
- node = qcn;
- if (path.size() == 2)
- return node;
- start_idx = 2;
- }
- }
-
- for (i = start_idx; i < path.size(); ++i) {
- if (node == nullptr || !node->isAggregate())
- break;
-
- // Clear the TypesOnly flag until the last path segment, as e.g. namespaces are not
- // types. We also ignore module nodes as they are not aggregates and thus have no
- // children.
- int tmpFlags = (i < path.size() - 1) ? (flags & ~TypesOnly) | IgnoreModules : flags;
-
- const Node *next = static_cast<const Aggregate *>(node)->findChildNode(path.at(i),
- genus, tmpFlags);
- if ((next == nullptr) && (flags & SearchEnumValues) && i == path.size() - 1) {
- next = static_cast<const Aggregate *>(node)->findEnumNodeForValue(path.at(i));
- }
- if ((next == nullptr) && ((genus == Node::CPP) || (genus == Node::DontCare))
- && node->isClassNode() && (flags & SearchBaseClasses)) {
- const ClassList bases = allBaseClasses(static_cast<const ClassNode *>(node));
- for (const auto *base : bases) {
- next = base->findChildNode(path.at(i), genus, tmpFlags);
- if ((next == nullptr) && (flags & SearchEnumValues) && i == path.size() - 1)
- next = base->findEnumNodeForValue(path.at(i));
- if (next != nullptr)
- break;
- }
- }
- node = next;
- }
- if ((node != nullptr) && i == path.size())
- return node;
- current = current->parent();
- } while (current != nullptr);
-
- return nullptr;
-}
-
-/*!
- This function searches for a node with a canonical title
- constructed from \a target. If the node it finds is \a node,
- it returns the ref from that node. Otherwise it returns an
- empty string.
- */
-QString Tree::getRef(const QString &target, const Node *node) const
-{
- auto it = nodesByTargetTitle_.constFind(target);
- if (it != nodesByTargetTitle_.constEnd()) {
- do {
- if (it.value()->node_ == node)
- return it.value()->ref_;
- ++it;
- } while (it != nodesByTargetTitle_.constEnd() && it.key() == target);
- }
- QString key = Doc::canonicalTitle(target);
- it = nodesByTargetRef_.constFind(key);
- if (it != nodesByTargetRef_.constEnd()) {
- do {
- if (it.value()->node_ == node)
- return it.value()->ref_;
- ++it;
- } while (it != nodesByTargetRef_.constEnd() && it.key() == key);
- }
- return QString();
-}
-
-/*!
- Inserts a new target into the target table. \a name is the
- key. The target record contains the \a type, a pointer to
- the \a node, the \a priority. and a canonicalized form of
- the \a name, which is later used.
- */
-void Tree::insertTarget(const QString &name, const QString &title, TargetRec::TargetType type,
- Node *node, int priority)
-{
- TargetRec *target = new TargetRec(name, title, type, node, priority);
- nodesByTargetRef_.insert(name, target);
- nodesByTargetTitle_.insert(title, target);
-}
-
-/*!
- */
-void Tree::resolveTargets(Aggregate *root)
-{
- for (auto *child : root->childNodes()) {
- if (child->isTextPageNode()) {
- PageNode *node = static_cast<PageNode *>(child);
- QString key = node->title();
- if (!key.isEmpty()) {
- if (key.contains(QChar(' ')))
- key = Doc::canonicalTitle(key);
- QList<PageNode *> nodes = pageNodesByTitle_.values(key);
- bool alreadyThere = false;
- if (!nodes.empty()) {
- for (const auto &node_ : nodes) {
- if (node_->isExternalPage()) {
- if (node->name() == node_->name()) {
- alreadyThere = true;
- break;
- }
- }
- }
- }
- if (!alreadyThere)
- pageNodesByTitle_.insert(key, node);
- }
- }
-
- if (child->doc().hasTableOfContents()) {
- const QList<Atom *> &toc = child->doc().tableOfContents();
- for (int i = 0; i < toc.size(); ++i) {
- QString ref = refForAtom(toc.at(i));
- QString title = Text::sectionHeading(toc.at(i)).toString();
- if (!ref.isEmpty() && !title.isEmpty()) {
- QString key = Doc::canonicalTitle(title);
- TargetRec *target = new TargetRec(ref, title, TargetRec::Contents, child, 3);
- nodesByTargetRef_.insert(key, target);
- nodesByTargetTitle_.insert(title, target);
- }
- }
- }
- if (child->doc().hasKeywords()) {
- const QList<Atom *> &keywords = child->doc().keywords();
- for (int i = 0; i < keywords.size(); ++i) {
- QString ref = refForAtom(keywords.at(i));
- QString title = keywords.at(i)->string();
- if (!ref.isEmpty() && !title.isEmpty()) {
- TargetRec *target = new TargetRec(ref, title, TargetRec::Keyword, child, 1);
- nodesByTargetRef_.insert(Doc::canonicalTitle(title), target);
- nodesByTargetTitle_.insert(title, target);
- }
- }
- }
- if (child->doc().hasTargets()) {
- const QList<Atom *> &targets = child->doc().targets();
- for (int i = 0; i < targets.size(); ++i) {
- QString ref = refForAtom(targets.at(i));
- QString title = targets.at(i)->string();
- if (!ref.isEmpty() && !title.isEmpty()) {
- QString key = Doc::canonicalTitle(title);
- TargetRec *target = new TargetRec(ref, title, TargetRec::Target, child, 2);
- nodesByTargetRef_.insert(key, target);
- nodesByTargetTitle_.insert(title, target);
- }
- }
- }
- if (child->isAggregate())
- resolveTargets(static_cast<Aggregate *>(child));
- }
-}
-
-/*!
- This function searches for a \a target anchor node. If it
- finds one, it sets \a ref and returns the found node.
- */
-const Node *Tree::findUnambiguousTarget(const QString &target, Node::Genus genus,
- QString &ref) const
-{
- int numBestTargets = 0;
- TargetRec *bestTarget = nullptr;
- QList<TargetRec *> bestTargetList;
-
- QString key = target;
- for (auto it = nodesByTargetTitle_.find(key); it != nodesByTargetTitle_.constEnd(); ++it) {
- if (it.key() != key)
- break;
- TargetRec *candidate = it.value();
- if ((genus == Node::DontCare) || (genus == candidate->genus())) {
- if (!bestTarget || (candidate->priority_ < bestTarget->priority_)) {
- bestTarget = candidate;
- bestTargetList.clear();
- bestTargetList.append(candidate);
- numBestTargets = 1;
- } else if (candidate->priority_ == bestTarget->priority_) {
- bestTargetList.append(candidate);
- ++numBestTargets;
- }
- }
- }
- if (bestTarget) {
- ref = bestTarget->ref_;
- return bestTarget->node_;
- }
-
- numBestTargets = 0;
- bestTarget = nullptr;
- key = Doc::canonicalTitle(target);
- for (auto it = nodesByTargetRef_.find(key); it != nodesByTargetRef_.constEnd(); ++it) {
- if (it.key() != key)
- break;
- TargetRec *candidate = it.value();
- if ((genus == Node::DontCare) || (genus == candidate->genus())) {
- if (!bestTarget || (candidate->priority_ < bestTarget->priority_)) {
- bestTarget = candidate;
- bestTargetList.clear();
- bestTargetList.append(candidate);
- numBestTargets = 1;
- } else if (candidate->priority_ == bestTarget->priority_) {
- bestTargetList.append(candidate);
- ++numBestTargets;
- }
- }
- }
- if (bestTarget) {
- ref = bestTarget->ref_;
- return bestTarget->node_;
- }
-
- ref.clear();
- return nullptr;
-}
-
-/*!
- This function searches for a node with the specified \a title.
- */
-const PageNode *Tree::findPageNodeByTitle(const QString &title) const
-{
- PageNodeMultiMap::const_iterator it;
- if (title.contains(QChar(' ')))
- it = pageNodesByTitle_.constFind(Doc::canonicalTitle(title));
- else
- it = pageNodesByTitle_.constFind(title);
- if (it != pageNodesByTitle_.constEnd()) {
- /*
- Reporting all these duplicate section titles is probably
- overkill. We should report the duplicate file and let
- that suffice.
- */
- PageNodeMultiMap::const_iterator j = it;
- ++j;
- if (j != pageNodesByTitle_.constEnd() && j.key() == it.key()) {
- while (j != pageNodesByTitle_.constEnd()) {
- if (j.key() == it.key() && j.value()->url().isEmpty()) {
- break; // Just report one duplicate for now.
- }
- ++j;
- }
- if (j != pageNodesByTitle_.cend()) {
- it.value()->location().warning("This page title exists in more than one file: "
- + title);
- j.value()->location().warning("[It also exists here]");
- }
- }
- return it.value();
- }
- return nullptr;
-}
-
-/*!
- Returns a canonical title for the \a atom, if the \a atom
- is a SectionLeft or a Target.
- */
-QString Tree::refForAtom(const Atom *atom)
-{
- if (atom) {
- if (atom->type() == Atom::SectionLeft)
- return Doc::canonicalTitle(Text::sectionHeading(atom).toString());
- if ((atom->type() == Atom::Target) || (atom->type() == Atom::Keyword))
- return Doc::canonicalTitle(atom->string());
- }
- return QString();
-}
-
-/*!
- \fn const CNMap &Tree::groups() const
- Returns a const reference to the collection of all
- group nodes.
-*/
-
-/*!
- \fn const ModuleMap &Tree::modules() const
- Returns a const reference to the collection of all
- module nodes.
-*/
-
-/*!
- \fn const QmlModuleMap &Tree::qmlModules() const
- Returns a const reference to the collection of all
- QML module nodes.
-*/
-
-/*!
- Returns a pointer to the collection map specified by \a type.
- Returns null if \a type is not specified.
- */
-CNMap *Tree::getCollectionMap(Node::NodeType type)
-{
- switch (type) {
- case Node::Group:
- return &groups_;
- case Node::Module:
- return &modules_;
- case Node::QmlModule:
- return &qmlModules_;
- case Node::JsModule:
- return &jsModules_;
- default:
- break;
- }
- return nullptr;
-}
-
-/*!
- Searches this tree for a collection named \a name with the
- specified \a type. If the collection is found, a pointer
- to it is returned. If a collection is not found, null is
- returned.
- */
-CollectionNode *Tree::getCollection(const QString &name, Node::NodeType type)
-{
- CNMap *map = getCollectionMap(type);
- if (map) {
- auto it = map->constFind(name);
- if (it != map->cend())
- return it.value();
- }
- return nullptr;
-}
-
-/*!
- Find the group, module, QML module, or JavaScript module
- named \a name and return a pointer to that collection node.
- \a type specifies which kind of collection node you want.
- If a collection node with the specified \a name and \a type
- is not found, a new one is created, and the pointer to the
- new one is returned.
-
- If a new collection node is created, its parent is the tree
- root, and the new collection node is marked \e{not seen}.
-
- \a genus must be specified, i.e. it must not be \c{DontCare}.
- If it is \c{DontCare}, 0 is returned, which is a programming
- error.
- */
-CollectionNode *Tree::findCollection(const QString &name, Node::NodeType type)
-{
- CNMap *m = getCollectionMap(type);
- if (!m) // error
- return nullptr;
- auto it = m->constFind(name);
- if (it != m->cend())
- return it.value();
- CollectionNode *cn = new CollectionNode(type, root(), name);
- cn->markNotSeen();
- m->insert(name, cn);
- return cn;
-}
-
-/*! \fn CollectionNode *Tree::findGroup(const QString &name)
- Find the group node named \a name and return a pointer
- to it. If the group node is not found, add a new group
- node named \a name and return a pointer to the new one.
-
- If a new group node is added, its parent is the tree root,
- and the new group node is marked \e{not seen}.
- */
-
-/*! \fn CollectionNode *Tree::findModule(const QString &name)
- Find the module node named \a name and return a pointer
- to it. If a matching node is not found, add a new module
- node named \a name and return a pointer to that one.
-
- If a new module node is added, its parent is the tree root,
- and the new module node is marked \e{not seen}.
- */
-
-/*! \fn CollectionNode *Tree::findQmlModule(const QString &name)
- Find the QML module node named \a name and return a pointer
- to it. If a matching node is not found, add a new QML module
- node named \a name and return a pointer to that one.
-
- If a new QML module node is added, its parent is the tree root,
- and the new node is marked \e{not seen}.
- */
-
-/*! \fn CollectionNode *Tree::findJsModule(const QString &name)
- Find the JavaScript module named \a name and return a pointer
- to it. If a matching node is not found, add a new JavaScript
- module node named \a name and return a pointer to that one.
-
- If a new JavaScript module node is added, its parent is the
- tree root, and the new node is marked \e{not seen}.
- */
-
-/*! \fn CollectionNode *Tree::addGroup(const QString &name)
- Looks up the group node named \a name in the collection
- of all group nodes. If a match is found, a pointer to the
- node is returned. Otherwise, a new group node named \a name
- is created and inserted into the collection, and the pointer
- to that node is returned.
- */
-
-/*! \fn CollectionNode *Tree::addModule(const QString &name)
- Looks up the module node named \a name in the collection
- of all module nodes. If a match is found, a pointer to the
- node is returned. Otherwise, a new module node named \a name
- is created and inserted into the collection, and the pointer
- to that node is returned.
- */
-
-/*! \fn CollectionNode *Tree::addQmlModule(const QString &name)
- Looks up the QML module node named \a name in the collection
- of all QML module nodes. If a match is found, a pointer to the
- node is returned. Otherwise, a new QML module node named \a name
- is created and inserted into the collection, and the pointer
- to that node is returned.
- */
-
-/*! \fn CollectionNode *Tree::addJsModule(const QString &name)
- Looks up the JavaScript module node named \a name in the collection
- of all JavaScript module nodes. If a match is found, a pointer to the
- node is returned. Otherwise, a new JavaScrpt module node named \a name
- is created and inserted into the collection, and the pointer
- to that node is returned.
- */
-
-/*!
- Looks up the group node named \a name in the collection
- of all group nodes. If a match is not found, a new group
- node named \a name is created and inserted into the collection.
- Then append \a node to the group's members list, and append the
- group name to the list of group names in \a node. The parent of
- \a node is not changed by this function. Returns a pointer to
- the group node.
- */
-CollectionNode *Tree::addToGroup(const QString &name, Node *node)
-{
- CollectionNode *cn = findGroup(name);
- if (!node->isInternal()) {
- cn->addMember(node);
- node->appendGroupName(name);
- }
- return cn;
-}
-
-/*!
- Looks up the module node named \a name in the collection
- of all module nodes. If a match is not found, a new module
- node named \a name is created and inserted into the collection.
- Then append \a node to the module's members list. The parent of
- \a node is not changed by this function. Returns the module node.
- */
-CollectionNode *Tree::addToModule(const QString &name, Node *node)
-{
- CollectionNode *cn = findModule(name);
- cn->addMember(node);
- node->setPhysicalModuleName(name);
- return cn;
-}
-
-/*!
- Looks up the QML module named \a name. If it isn't there,
- create it. Then append \a node to the QML module's member
- list. The parent of \a node is not changed by this function.
- Returns the pointer to the QML module node.
- */
-CollectionNode *Tree::addToQmlModule(const QString &name, Node *node)
-{
- QStringList qmid;
- QStringList dotSplit;
- QStringList blankSplit = name.split(QLatin1Char(' '));
- qmid.append(blankSplit[0]);
- if (blankSplit.size() > 1) {
- qmid.append(blankSplit[0] + blankSplit[1]);
- dotSplit = blankSplit[1].split(QLatin1Char('.'));
- qmid.append(blankSplit[0] + dotSplit[0]);
- }
-
- CollectionNode *cn = findQmlModule(blankSplit[0]);
- cn->addMember(node);
- node->setQmlModule(cn);
- if (node->isQmlType()) {
- QmlTypeNode *n = static_cast<QmlTypeNode *>(node);
- for (int i = 0; i < qmid.size(); ++i) {
- QString key = qmid[i] + "::" + node->name();
- insertQmlType(key, n);
- }
- }
- return cn;
-}
-
-/*!
- Looks up the QML module named \a name. If it isn't there,
- create it. Then append \a node to the QML module's member
- list. The parent of \a node is not changed by this function.
- Returns the pointer to the QML module node.
- */
-CollectionNode *Tree::addToJsModule(const QString &name, Node *node)
-{
- QStringList qmid;
- QStringList dotSplit;
- QStringList blankSplit = name.split(QLatin1Char(' '));
- qmid.append(blankSplit[0]);
- if (blankSplit.size() > 1) {
- qmid.append(blankSplit[0] + blankSplit[1]);
- dotSplit = blankSplit[1].split(QLatin1Char('.'));
- qmid.append(blankSplit[0] + dotSplit[0]);
- }
-
- CollectionNode *cn = findJsModule(blankSplit[0]);
- cn->addMember(node);
- node->setQmlModule(cn);
- if (node->isJsType()) {
- QmlTypeNode *n = static_cast<QmlTypeNode *>(node);
- for (int i = 0; i < qmid.size(); ++i) {
- QString key = qmid[i] + "::" + node->name();
- insertQmlType(key, n);
- }
- }
- return cn;
-}
-
-/*!
- If the QML type map does not contain \a key, insert node
- \a n with the specified \a key.
- */
-void Tree::insertQmlType(const QString &key, QmlTypeNode *n)
-{
- if (!qmlTypeMap_.contains(key))
- qmlTypeMap_.insert(key, n);
-}
-
-/*!
- Finds the function node with the specifried name \a path that
- also has the specified \a parameters and returns a pointer to
- the the first matching function node if one is found.
-
- This function begins searching the tree at \a relative for
- the \l {FunctionNode} {function node} identified by \a path
- that has the specified \a parameters. The \a flags are
- used to restrict the search. If a matching node is found, a
- pointer to it is returned. Otherwise, nullis returned. If
- \a relative is ull, the search begins at the tree root.
- */
-const FunctionNode *Tree::findFunctionNode(const QStringList &path, const Parameters &parameters,
- const Node *relative, Node::Genus genus) const
-{
- if (path.size() == 3 && !path[0].isEmpty()
- && ((genus == Node::QML) || (genus == Node::DontCare))) {
- QmlTypeNode *qcn = lookupQmlType(QString(path[0] + "::" + path[1]));
- if (qcn == nullptr) {
- QStringList p(path[1]);
- Node *n = findNodeByNameAndType(p, &Node::isQmlType);
- if ((n != nullptr) && (n->isQmlType() || n->isJsType()))
- qcn = static_cast<QmlTypeNode *>(n);
- }
- if (qcn != nullptr)
- return static_cast<const FunctionNode *>(qcn->findFunctionChild(path[2], parameters));
- }
-
- if (relative == nullptr)
- relative = root();
- else if (genus != Node::DontCare) {
- if (genus != relative->genus())
- relative = root();
- }
-
- do {
- Node *node = const_cast<Node *>(relative);
- int i;
-
- for (i = 0; i < path.size(); ++i) {
- if (node == nullptr || !node->isAggregate())
- break;
-
- Aggregate *aggregate = static_cast<Aggregate *>(node);
- Node *next = nullptr;
- if (i == path.size() - 1)
- next = aggregate->findFunctionChild(path.at(i), parameters);
- else
- next = aggregate->findChildNode(path.at(i), genus);
-
- if ((next == nullptr) && aggregate->isClassNode()) {
- const ClassList bases = allBaseClasses(static_cast<const ClassNode *>(aggregate));
- for (auto *base : bases) {
- if (i == path.size() - 1)
- next = base->findFunctionChild(path.at(i), parameters);
- else
- next = base->findChildNode(path.at(i), genus);
-
- if (next != nullptr)
- break;
- }
- }
-
- node = next;
- } // for (i = 0; i < path.size(); ++i)
-
- if (node && i == path.size() && node->isFunction()) {
- // A function node was found at the end of the path.
- // If it is not marked private, return it. If it is
- // marked private, then if it overrides a function,
- // find that function instead because it might not
- // be marked private. If all the overloads are
- // marked private, return the original function node.
- // This should be replace with findOverriddenFunctionNode().
- const FunctionNode *fn = static_cast<const FunctionNode *>(node);
- const FunctionNode *FN = fn;
- while (FN->isPrivate() && !FN->overridesThis().isEmpty()) {
- QStringList path = FN->overridesThis().split("::");
- FN = qdb_->findFunctionNode(path, parameters, relative, genus);
- if (FN == nullptr)
- break;
- if (!FN->isPrivate())
- return FN;
- }
- return fn;
- }
- relative = relative->parent();
- } while (relative);
- return nullptr;
-}
-
-/*!
- Search this tree recursively from \a parent to find a function
- node with the specified \a tag. If no function node is found
- with the required \a tag, return 0.
- */
-FunctionNode *Tree::findFunctionNodeForTag(const QString &tag, Aggregate *parent)
-{
- if (parent == nullptr)
- parent = root();
- const NodeList &children = parent->childNodes();
- for (Node *n : children) {
- if (n != nullptr && n->isFunction() && n->hasTag(tag))
- return static_cast<FunctionNode *>(n);
- }
- for (Node *n : children) {
- if (n != nullptr && n->isAggregate()) {
- n = findFunctionNodeForTag(tag, static_cast<Aggregate *>(n));
- if (n != nullptr)
- return static_cast<FunctionNode *>(n);
- }
- }
- return nullptr;
-}
-
-/*!
- There should only be one macro node for macro name \a t.
- The macro node is not built until the \macro command is seen.
- */
-FunctionNode *Tree::findMacroNode(const QString &t, const Aggregate *parent)
-{
- if (parent == nullptr)
- parent = root();
- const NodeList &children = parent->childNodes();
- for (Node *n : children) {
- if (n != nullptr && (n->isMacro() || n->isFunction()) && n->name() == t)
- return static_cast<FunctionNode *>(n);
- }
- for (Node *n : children) {
- if (n != nullptr && n->isAggregate()) {
- FunctionNode *fn = findMacroNode(t, static_cast<Aggregate *>(n));
- if (fn != nullptr)
- return fn;
- }
- }
- return nullptr;
-}
-
-/*!
- Add the class and struct names in \a arg to the \e {don't document}
- map.
- */
-void Tree::addToDontDocumentMap(QString &arg)
-{
- arg.remove(QChar('('));
- arg.remove(QChar(')'));
- QString t = arg.simplified();
- QStringList sl = t.split(QChar(' '));
- if (sl.isEmpty())
- return;
- for (const QString &s : sl) {
- if (!dontDocumentMap_.contains(s))
- dontDocumentMap_.insert(s, nullptr);
- }
-}
-
-/*!
- The \e {don't document} map has been loaded with the names
- of classes and structs in the current module that are not
- documented and should not be documented. Now traverse the
- map, and for each class or struct name, find the class node
- that represents that class or struct and mark it with the
- \C DontDocument status.
-
- This results in a map of the class and struct nodes in the
- module that are in the public API but are not meant to be
- used by anyone. They are only used internally, but for one
- reason or another, they must have public visibility.
- */
-void Tree::markDontDocumentNodes()
-{
- for (auto it = dontDocumentMap_.begin(); it != dontDocumentMap_.end(); ++it) {
- Aggregate *node = findAggregate(it.key());
- if (node != nullptr)
- node->setStatus(Node::DontDocument);
- }
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/tree.h b/src/qdoc/tree.h
deleted file mode 100644
index 0a2352903..000000000
--- a/src/qdoc/tree.h
+++ /dev/null
@@ -1,241 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*
- tree.h
-*/
-
-#ifndef TREE_H
-#define TREE_H
-
-#include "examplenode.h"
-#include "namespacenode.h"
-#include "node.h"
-#include "propertynode.h"
-#include "proxynode.h"
-#include "qmltypenode.h"
-
-#include <QtCore/qstack.h>
-
-QT_BEGIN_NAMESPACE
-
-class CollectionNode;
-class FunctionNode;
-class QDocDatabase;
-
-struct TargetRec
-{
-public:
- enum TargetType { Unknown, Target, Keyword, Contents, Class, Function, Page, Subtitle };
-
- TargetRec(const QString &name, const QString &title, TargetRec::TargetType type, Node *node,
- int priority)
- : node_(node), ref_(name), title_(title), priority_(priority), type_(type)
- {
- // Discard the dedicated ref for keywords - they always
- // link to the top of the QDoc comment they appear in
- if (type == Keyword)
- ref_.clear();
- }
-
- bool isEmpty() const { return ref_.isEmpty(); }
- Node::Genus genus() { return (node_ ? node_->genus() : Node::DontCare); }
-
- Node *node_;
- QString ref_;
- QString title_;
- int priority_;
- TargetType type_;
-};
-
-struct TargetLoc
-{
-public:
- TargetLoc(const Node *loc, const QString &t, const QString &fileName, const QString &text,
- bool broken)
- : loc_(loc), target_(t), fileName_(fileName), text_(text), broken_(broken)
- {
- }
- const Node *loc_;
- QString target_;
- QString fileName_;
- QString text_;
- bool broken_;
-};
-
-typedef QMultiMap<QString, TargetRec *> TargetMap;
-typedef QMultiMap<QString, PageNode *> PageNodeMultiMap;
-typedef QMap<QString, QmlTypeNode *> QmlTypeMap;
-typedef QMultiMap<QString, const ExampleNode *> ExampleNodeMap;
-typedef QList<TargetLoc *> TargetList;
-typedef QMap<QString, TargetList *> TargetListMap;
-
-class Tree
-{
- friend class QDocForest;
- friend class QDocDatabase;
-
-private: // Note the constructor and destructor are private.
- typedef QMap<PropertyNode::FunctionRole, QString> RoleMap;
- typedef QMap<PropertyNode *, RoleMap> PropertyMap;
-
- Tree(const QString &camelCaseModuleName, QDocDatabase *qdb);
- ~Tree();
-
-public: // Of necessity, a few public functions remain.
- const QString &camelCaseModuleName() const { return camelCaseModuleName_; }
- const QString &physicalModuleName() const { return physicalModuleName_; }
- const QString &indexFileName() const { return indexFileName_; }
- long incrementLinkCount() { return --linkCount_; }
- void clearLinkCount() { linkCount_ = 0; }
- long linkCount() const { return linkCount_; }
- const QString &indexTitle() const { return indexTitle_; }
- void setIndexTitle(const QString &t) { indexTitle_ = t; }
- NodeList &proxies() { return proxies_; }
- void appendProxy(ProxyNode *t) { proxies_.append(t); }
- void addToDontDocumentMap(QString &arg);
- void markDontDocumentNodes();
-
-private: // The rest of the class is private.
- Aggregate *findAggregate(const QString &name);
- Node *findNodeForInclude(const QStringList &path) const;
- ClassNode *findClassNode(const QStringList &path, const Node *start = nullptr) const;
- NamespaceNode *findNamespaceNode(const QStringList &path) const;
- const FunctionNode *findFunctionNode(const QStringList &path, const Parameters &parameters,
- const Node *relative, Node::Genus genus) const;
- Node *findNodeRecursive(const QStringList &path, int pathIndex, const Node *start,
- bool (Node::*)() const) const;
- const Node *findNodeForTarget(const QStringList &path, const QString &target, const Node *node,
- int flags, Node::Genus genus, QString &ref) const;
- const Node *matchPathAndTarget(const QStringList &path, int idx, const QString &target,
- const Node *node, int flags, Node::Genus genus,
- QString &ref) const;
-
- const Node *findNode(const QStringList &path, const Node *relative, int flags,
- Node::Genus genus) const;
-
- QmlTypeNode *findQmlTypeNode(const QStringList &path);
-
- Node *findNodeByNameAndType(const QStringList &path, bool (Node::*isMatch)() const) const;
- Aggregate *findRelatesNode(const QStringList &path);
- QString getRef(const QString &target, const Node *node) const;
- void insertTarget(const QString &name, const QString &title, TargetRec::TargetType type,
- Node *node, int priority);
- void resolveTargets(Aggregate *root);
- const Node *findUnambiguousTarget(const QString &target, Node::Genus genus, QString &ref) const;
- const PageNode *findPageNodeByTitle(const QString &title) const;
-
- void addPropertyFunction(PropertyNode *property, const QString &funcName,
- PropertyNode::FunctionRole funcRole);
- void resolveBaseClasses(Aggregate *n);
- void resolveBaseClassesHelper(int pass, ClassNode *cn);
- void resolvePropertyOverriddenFromPtrs(Aggregate *n);
- void resolveProperties();
- void resolveCppToQmlLinks();
- void resolveUsingClauses(Aggregate *parent = nullptr);
- void removePrivateAndInternalBases(NamespaceNode *rootNode);
- NamespaceNode *root() { return &root_; }
- const NamespaceNode *root() const { return &root_; }
-
- ClassList allBaseClasses(const ClassNode *classe) const;
- QString refForAtom(const Atom *atom);
-
- CNMap *getCollectionMap(Node::NodeType type);
- const CNMap &groups() const { return groups_; }
- const CNMap &modules() const { return modules_; }
- const CNMap &qmlModules() const { return qmlModules_; }
- const CNMap &jsModules() const { return jsModules_; }
-
- CollectionNode *getCollection(const QString &name, Node::NodeType type);
- CollectionNode *findCollection(const QString &name, Node::NodeType type);
-
- CollectionNode *findGroup(const QString &name) { return findCollection(name, Node::Group); }
- CollectionNode *findModule(const QString &name) { return findCollection(name, Node::Module); }
- CollectionNode *findQmlModule(const QString &name)
- {
- return findCollection(name, Node::QmlModule);
- }
- CollectionNode *findJsModule(const QString &name)
- {
- return findCollection(name, Node::JsModule);
- }
-
- CollectionNode *addGroup(const QString &name) { return findGroup(name); }
- CollectionNode *addModule(const QString &name) { return findModule(name); }
- CollectionNode *addQmlModule(const QString &name) { return findQmlModule(name); }
- CollectionNode *addJsModule(const QString &name) { return findJsModule(name); }
-
- CollectionNode *addToGroup(const QString &name, Node *node);
- CollectionNode *addToModule(const QString &name, Node *node);
- CollectionNode *addToQmlModule(const QString &name, Node *node);
- CollectionNode *addToJsModule(const QString &name, Node *node);
-
- QmlTypeNode *lookupQmlType(const QString &name) const { return qmlTypeMap_.value(name); }
- Aggregate *lookupQmlBasicType(const QString &name) const { return qmlTypeMap_.value(name); }
- void insertQmlType(const QString &key, QmlTypeNode *n);
- void addExampleNode(ExampleNode *n) { exampleNodeMap_.insert(n->title(), n); }
- ExampleNodeMap &exampleNodeMap() { return exampleNodeMap_; }
- void setIndexFileName(const QString &t) { indexFileName_ = t; }
-
- bool treeHasBeenAnalyzed() const { return treeHasBeenAnalyzed_; }
- bool docsHaveBeenGenerated() const { return docsHaveBeenGenerated_; }
- void setTreeHasBeenAnalyzed() { treeHasBeenAnalyzed_ = true; }
- void setdocsHaveBeenGenerated() { docsHaveBeenGenerated_ = true; }
- QString getNewLinkTarget(const Node *locNode, const Node *t, const QString &fileName,
- QString &text, bool broken);
- TargetList *getTargetList(const QString &module);
- FunctionNode *findFunctionNodeForTag(const QString &tag, Aggregate *parent = nullptr);
- FunctionNode *findMacroNode(const QString &t, const Aggregate *parent = nullptr);
-
-private:
- bool treeHasBeenAnalyzed_;
- bool docsHaveBeenGenerated_;
- long linkCount_;
- QString camelCaseModuleName_;
- QString physicalModuleName_;
- QString indexFileName_;
- QString indexTitle_;
- QDocDatabase *qdb_;
- NamespaceNode root_;
- PropertyMap unresolvedPropertyMap;
- PageNodeMultiMap pageNodesByTitle_;
- TargetMap nodesByTargetRef_;
- TargetMap nodesByTargetTitle_;
- CNMap groups_;
- CNMap modules_;
- CNMap qmlModules_;
- CNMap jsModules_;
- QmlTypeMap qmlTypeMap_;
- ExampleNodeMap exampleNodeMap_;
- NodeList proxies_;
- NodeMap dontDocumentMap_;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/typedefnode.cpp b/src/qdoc/typedefnode.cpp
deleted file mode 100644
index 6046a9aaa..000000000
--- a/src/qdoc/typedefnode.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "typedefnode.h"
-
-#include "aggregate.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class TypedefNode
- */
-
-/*!
- */
-void TypedefNode::setAssociatedEnum(const EnumNode *enume)
-{
- m_associatedEnum = enume;
-}
-
-/*!
- Clone this node on the heap and make the clone a child of
- \a parent.
-
- Returns the pointer to the clone.
- */
-Node *TypedefNode::clone(Aggregate *parent)
-{
- auto *tn = new TypedefNode(*this); // shallow copy
- tn->setParent(nullptr);
- parent->addChild(tn);
-
- return tn;
-}
-
-/*!
- \class TypeAliasNode
- */
-
-/*!
- Clone this node on the heap and make the clone a child of
- \a parent.
-
- Returns the pointer to the clone.
- */
-Node *TypeAliasNode::clone(Aggregate *parent)
-{
- auto *tan = new TypeAliasNode(*this); // shallow copy
- tan->setParent(nullptr);
- parent->addChild(tan);
-
- return tan;
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/typedefnode.h b/src/qdoc/typedefnode.h
deleted file mode 100644
index 308f62a3a..000000000
--- a/src/qdoc/typedefnode.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef TYPEDEFNODE_H
-#define TYPEDEFNODE_H
-
-#include "enumnode.h"
-#include "node.h"
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-class Aggregate;
-
-class TypedefNode : public Node
-{
-public:
- TypedefNode(Aggregate *parent, const QString &name, NodeType type = Typedef)
- : Node(type, parent, name)
- {
- }
-
- bool hasAssociatedEnum() const { return m_associatedEnum != nullptr; }
- const EnumNode *associatedEnum() const { return m_associatedEnum; }
- Node *clone(Aggregate *parent) override;
-
-private:
- void setAssociatedEnum(const EnumNode *t);
-
- friend class EnumNode;
-
- const EnumNode *m_associatedEnum { nullptr };
-};
-
-class TypeAliasNode : public TypedefNode
-{
-public:
- TypeAliasNode(Aggregate *parent, const QString &name, const QString &aliasedType)
- : TypedefNode(parent, name, NodeType::TypeAlias), m_aliasedType(aliasedType)
- {
- }
-
- const QString &aliasedType() const { return m_aliasedType; }
- const Node *aliasedNode() const { return m_aliasedNode; }
- void setAliasedNode(const Node *node) { m_aliasedNode = node; }
- Node *clone(Aggregate *parent) override;
-
-private:
- QString m_aliasedType {};
- const Node *m_aliasedNode { nullptr };
-};
-
-QT_END_NAMESPACE
-
-#endif // TYPEDEFNODE_H
diff --git a/src/qdoc/usingclause.cpp b/src/qdoc/usingclause.cpp
deleted file mode 100644
index 23591358a..000000000
--- a/src/qdoc/usingclause.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "usingclause.h"
-
-#include "node.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \struct UsingClause
- \brief This is supposed to describe a using clause, but I think it is not used.
-
- This struct is only used in ClassNode. It describes a \c using clause that
- was parsed. But now it looks like it is not actually used at all.
-
- Maybe we can get rid of it?
-*/
-
-/*! \fn UsingClause::UsingClause()
- The default constructor does nothing. It is only used for allocating empty
- instances of UsingClause in containers.
- */
-
-/*! \fn UsingClause::UsingClause(const QString &signature)
- We assume the node that the using clause refers to has not yet been
- created, so this constructor provides its \a signature, which is the
- qualified path name of whatever it is.
- */
-
-/*! \fn const QString &UsingClause::signature() const
- This function returns a const reference to the signature, which is the qualified
- path name of whatever the using clause refers to.
- */
-
-/*! \fn const Node *UsingClause::node()
- This function returns a pointer to the node which has been resolved by looking
- up the signature in the qdoc database. If it wasn't resolved, \c nullptr is returned.
- */
-
-/*! \fn void UsingClause::setNode(const Node *n)
- This function is called when the signature can be resolved. The node pointer
- is set to \a n.
- */
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/usingclause.h b/src/qdoc/usingclause.h
deleted file mode 100644
index 48db8411b..000000000
--- a/src/qdoc/usingclause.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef USINGCLAUSE_H
-#define USINGCLAUSE_H
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-class Node;
-
-struct UsingClause
-{
- UsingClause() = default;
- explicit UsingClause(const QString &signature) : m_signature(signature) {}
- const QString &signature() const { return m_signature; }
- const Node *node() const { return m_node; }
- void setNode(const Node *n) { m_node = n; }
-
- const Node *m_node { nullptr };
- QString m_signature;
-};
-
-QT_END_NAMESPACE
-
-#endif // USINGCLAUSE_H
diff --git a/src/qdoc/utilities.cpp b/src/qdoc/utilities.cpp
deleted file mode 100644
index 5bcafe0a7..000000000
--- a/src/qdoc/utilities.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "utilities.h"
-#include "loggingcategory.h"
-
-/*!
- \namespace Utilities
- \internal
- \brief This namespace holds QDoc-internal utility methods.
- */
-namespace Utilities {
-static inline void setDebugEnabled(bool value)
-{
- const_cast<QLoggingCategory &>(lcQdoc()).setEnabled(QtDebugMsg, value);
-}
-
-void startDebugging(const QString &message)
-{
- setDebugEnabled(true);
- qCDebug(lcQdoc, "START DEBUGGING: %ls", qUtf16Printable(message));
-}
-
-void stopDebugging(const QString &message)
-{
- qCDebug(lcQdoc, "STOP DEBUGGING: %ls", qUtf16Printable(message));
- setDebugEnabled(false);
-}
-
-bool debugging()
-{
- return lcQdoc().isEnabled(QtDebugMsg);
-}
-}
diff --git a/src/qdoc/utilities.h b/src/qdoc/utilities.h
deleted file mode 100644
index 841099aea..000000000
--- a/src/qdoc/utilities.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef UTILITIES_H
-#define UTILITIES_H
-
-#include <QtCore/qstring.h>
-
-namespace Utilities {
-void startDebugging(const QString &message);
-void stopDebugging(const QString &message);
-bool debugging();
-};
-
-#endif // UTILITIES_H
diff --git a/src/qdoc/variablenode.cpp b/src/qdoc/variablenode.cpp
deleted file mode 100644
index 9fcdb6d26..000000000
--- a/src/qdoc/variablenode.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "variablenode.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- Clone this node on the heap and make the clone a child of
- \a parent.
-
- Returns a pointer to the clone.
- */
-Node *VariableNode::clone(Aggregate *parent)
-{
- auto *vn = new VariableNode(*this); // shallow copy
- vn->setParent(nullptr);
- parent->addChild(vn);
-
- return vn;
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/variablenode.h b/src/qdoc/variablenode.h
deleted file mode 100644
index a197c33a6..000000000
--- a/src/qdoc/variablenode.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef VARIABLENODE_H
-#define VARIABLENODE_H
-
-#include "aggregate.h"
-#include "node.h"
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-class VariableNode : public Node
-{
-public:
- VariableNode(Aggregate *parent, const QString &name);
-
- void setLeftType(const QString &leftType) { m_leftType = leftType; }
- void setRightType(const QString &rightType) { m_rightType = rightType; }
- void setStatic(bool b) { m_static = b; }
-
- const QString &leftType() const { return m_leftType; }
- const QString &rightType() const { return m_rightType; }
- QString dataType() const { return m_leftType + m_rightType; }
- bool isStatic() const override { return m_static; }
- Node *clone(Aggregate *parent) override;
-
-private:
- QString m_leftType {};
- QString m_rightType {};
- bool m_static { false };
-};
-
-inline VariableNode::VariableNode(Aggregate *parent, const QString &name)
- : Node(Variable, parent, name)
-{
- setGenus(Node::CPP);
-}
-
-QT_END_NAMESPACE
-
-#endif // VARIABLENODE_H
diff --git a/src/qdoc/webxmlgenerator.cpp b/src/qdoc/webxmlgenerator.cpp
deleted file mode 100644
index 569e51aa5..000000000
--- a/src/qdoc/webxmlgenerator.cpp
+++ /dev/null
@@ -1,877 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "webxmlgenerator.h"
-
-#include "aggregate.h"
-#include "collectionnode.h"
-#include "config.h"
-#include "helpprojectwriter.h"
-#include "node.h"
-#include "propertynode.h"
-#include "qdocdatabase.h"
-#include "separator.h"
-#include "quoter.h"
-
-#include <QtCore/qxmlstream.h>
-
-QT_BEGIN_NAMESPACE
-
-static CodeMarker *marker_ = nullptr;
-
-void WebXMLGenerator::initializeGenerator()
-{
- HtmlGenerator::initializeGenerator();
-}
-
-void WebXMLGenerator::terminateGenerator()
-{
- Generator::terminateGenerator();
-}
-
-QString WebXMLGenerator::format()
-{
- return "WebXML";
-}
-
-QString WebXMLGenerator::fileExtension() const
-{
- // As this is meant to be an intermediate format,
- // use .html for internal references. The name of
- // the output file is set separately in
- // beginSubPage() calls.
- return "html";
-}
-
-/*!
- Most of the output is generated by QDocIndexFiles and the append() callback.
- Some pages produce supplementary output while being generated, and that's
- handled here.
-*/
-int WebXMLGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker)
-{
- if (m_supplement && currentWriter)
- addAtomElements(*currentWriter.data(), atom, relative, marker);
- return 0;
-}
-
-void WebXMLGenerator::generateCppReferencePage(Aggregate *aggregate, CodeMarker * /* marker */)
-{
- QByteArray data;
- QXmlStreamWriter writer(&data);
- writer.setAutoFormatting(true);
- beginSubPage(aggregate, Generator::fileName(aggregate, "webxml"));
- writer.writeStartDocument();
- writer.writeStartElement("WebXML");
- writer.writeStartElement("document");
-
- generateIndexSections(writer, aggregate);
-
- writer.writeEndElement(); // document
- writer.writeEndElement(); // WebXML
- writer.writeEndDocument();
-
- out() << data;
- endSubPage();
-}
-
-void WebXMLGenerator::generatePageNode(PageNode *pn, CodeMarker * /* marker */)
-{
- QByteArray data;
- currentWriter.reset(new QXmlStreamWriter(&data));
- currentWriter->setAutoFormatting(true);
- beginSubPage(pn, Generator::fileName(pn, "webxml"));
- currentWriter->writeStartDocument();
- currentWriter->writeStartElement("WebXML");
- currentWriter->writeStartElement("document");
-
- generateIndexSections(*currentWriter.data(), pn);
-
- currentWriter->writeEndElement(); // document
- currentWriter->writeEndElement(); // WebXML
- currentWriter->writeEndDocument();
-
- out() << data;
- endSubPage();
-}
-
-void WebXMLGenerator::generateExampleFilePage(const Node *en, const QString &file,
- CodeMarker * /* marker */)
-{
- QByteArray data;
- QXmlStreamWriter writer(&data);
- writer.setAutoFormatting(true);
- beginFilePage(en, linkForExampleFile(file, en, "webxml"));
- writer.writeStartDocument();
- writer.writeStartElement("WebXML");
- writer.writeStartElement("document");
- writer.writeStartElement("page");
- writer.writeAttribute("name", file);
- writer.writeAttribute("href", linkForExampleFile(file, en));
- QString title = exampleFileTitle(static_cast<const ExampleNode *>(en), file);
- writer.writeAttribute("title", title);
- writer.writeAttribute("fulltitle", title);
- writer.writeAttribute("subtitle", file);
- writer.writeStartElement("description");
-
- if (Config::instance().getBool(CONFIG_LOCATIONINFO)) {
- QString userFriendlyFilePath; // unused
- writer.writeAttribute("path",
- Doc::resolveFile(en->doc().location(), file, &userFriendlyFilePath));
- writer.writeAttribute("line", "0");
- writer.writeAttribute("column", "0");
- }
-
- Quoter quoter;
- Doc::quoteFromFile(en->doc().location(), quoter, file);
- QString code = quoter.quoteTo(en->location(), QString(), QString());
- writer.writeTextElement("code", trimmedTrailing(code, QString(), QString()));
-
- writer.writeEndElement(); // description
- writer.writeEndElement(); // page
- writer.writeEndElement(); // document
- writer.writeEndElement(); // WebXML
- writer.writeEndDocument();
-
- out() << data;
- endFilePage();
-}
-
-void WebXMLGenerator::generateIndexSections(QXmlStreamWriter &writer, Node *node)
-{
- marker_ = CodeMarker::markerForFileName(node->location().filePath());
- auto qdocIndexFiles = QDocIndexFiles::qdocIndexFiles();
- if (qdocIndexFiles) {
- qdocIndexFiles->generateIndexSections(writer, node, this);
- // generateIndexSections does nothing for groups, so handle them explicitly
- if (node->isGroup())
- qdocIndexFiles->generateIndexSection(writer, node, this);
- }
-}
-
-// Handles callbacks from QDocIndexFiles to add documentation to node
-void WebXMLGenerator::append(QXmlStreamWriter &writer, Node *node)
-{
- Q_ASSERT(marker_);
-
- writer.writeStartElement("description");
- if (Config::instance().getBool(CONFIG_LOCATIONINFO)) {
- writer.writeAttribute("path", node->doc().location().filePath());
- writer.writeAttribute("line", QString::number(node->doc().location().lineNo()));
- writer.writeAttribute("column", QString::number(node->doc().location().columnNo()));
- }
-
- if (node->isTextPageNode())
- generateRelations(writer, node);
-
- if (node->isModule()) {
- writer.writeStartElement("generatedlist");
- writer.writeAttribute("contents", "classesbymodule");
- auto *cnn = static_cast<CollectionNode *>(node);
-
- if (cnn->hasNamespaces()) {
- writer.writeStartElement("section");
- writer.writeStartElement("heading");
- writer.writeAttribute("level", "1");
- writer.writeCharacters("Namespaces");
- writer.writeEndElement(); // heading
- NodeMap namespaces;
- cnn->getMemberNamespaces(namespaces);
- generateAnnotatedList(writer, node, namespaces);
- writer.writeEndElement(); // section
- }
- if (cnn->hasClasses()) {
- writer.writeStartElement("section");
- writer.writeStartElement("heading");
- writer.writeAttribute("level", "1");
- writer.writeCharacters("Classes");
- writer.writeEndElement(); // heading
- NodeMap classes;
- cnn->getMemberClasses(classes);
- generateAnnotatedList(writer, node, classes);
- writer.writeEndElement(); // section
- }
- writer.writeEndElement(); // generatedlist
- }
-
- m_inLink = m_inSectionHeading = m_hasQuotingInformation = false;
-
- const Atom *atom = node->doc().body().firstAtom();
- while (atom)
- atom = addAtomElements(writer, atom, node, marker_);
-
- QList<Text> alsoList = node->doc().alsoList();
- supplementAlsoList(node, alsoList);
-
- if (!alsoList.isEmpty()) {
- writer.writeStartElement("see-also");
- for (const auto &item : alsoList) {
- const auto *atom = item.firstAtom();
- while (atom)
- atom = addAtomElements(writer, atom, node, marker_);
- }
- writer.writeEndElement(); // see-also
- }
-
- if (node->isExample()) {
- m_supplement = true;
- generateRequiredLinks(node, marker_);
- m_supplement = false;
- } else if (node->isGroup()) {
- auto *cn = static_cast<CollectionNode *>(node);
- if (!cn->noAutoList())
- generateAnnotatedList(writer, node, cn->members());
- }
-
- writer.writeEndElement(); // description
-}
-
-void WebXMLGenerator::generateDocumentation(Node *node)
-{
- // Don't generate nodes that are already processed, or if they're not supposed to
- // generate output, ie. external, index or images nodes.
- if (!node->url().isNull() || node->isExternalPage() || node->isIndexNode())
- return;
-
- if (node->isInternal() && !Config::instance().showInternal())
- return;
-
- if (node->parent()) {
- if (node->isNamespace() || node->isClassNode() || node->isHeader())
- generateCppReferencePage(static_cast<Aggregate *>(node), nullptr);
- else if (node->isCollectionNode()) {
- if (node->wasSeen()) {
- // see remarks in base class impl.
- m_qdb->mergeCollections(static_cast<CollectionNode *>(node));
- generatePageNode(static_cast<PageNode *>(node), nullptr);
- }
- } else if (node->isTextPageNode())
- generatePageNode(static_cast<PageNode *>(node), nullptr);
- // else if TODO: anything else?
- }
-
- if (node->isAggregate()) {
- auto *aggregate = static_cast<Aggregate *>(node);
- for (auto c : aggregate->childNodes()) {
- if ((c->isAggregate() || c->isTextPageNode() || c->isCollectionNode())
- && !c->isPrivate())
- generateDocumentation(c);
- }
- }
-}
-
-const Atom *WebXMLGenerator::addAtomElements(QXmlStreamWriter &writer, const Atom *atom,
- const Node *relative, CodeMarker *marker)
-{
- bool keepQuoting = false;
-
- if (!atom)
- return nullptr;
-
- switch (atom->type()) {
- case Atom::AnnotatedList: {
- const CollectionNode *cn = m_qdb->getCollectionNode(atom->string(), Node::Group);
- if (cn)
- generateAnnotatedList(writer, relative, cn->members());
- } break;
- case Atom::AutoLink:
- if (!m_inLink && !m_inSectionHeading) {
- const Node *node = nullptr;
- QString link = getLink(atom, relative, &node);
- if (node) {
- startLink(writer, atom, node, link);
- if (m_inLink) {
- writer.writeCharacters(atom->string());
- writer.writeEndElement(); // link
- m_inLink = false;
- }
- } else {
- writer.writeCharacters(atom->string());
- }
- } else {
- writer.writeCharacters(atom->string());
- }
- break;
- case Atom::BaseName:
- break;
- case Atom::BriefLeft:
-
- writer.writeStartElement("brief");
- switch (relative->nodeType()) {
- case Node::Property:
- writer.writeCharacters("This property");
- break;
- case Node::Variable:
- writer.writeCharacters("This variable");
- break;
- default:
- break;
- }
- if (relative->isProperty() || relative->isVariable()) {
- QString str;
- const Atom *a = atom->next();
- while (a != nullptr && a->type() != Atom::BriefRight) {
- if (a->type() == Atom::String || a->type() == Atom::AutoLink)
- str += a->string();
- a = a->next();
- }
- str[0] = str[0].toLower();
- if (str.endsWith('.'))
- str.chop(1);
-
- const QList<QStringView> words = QStringView{str}.split(' ');
- if (!words.isEmpty()) {
- QStringView first(words.at(0));
- if (!(first == u"contains" || first == u"specifies" || first == u"describes"
- || first == u"defines" || first == u"holds" || first == u"determines"))
- writer.writeCharacters(" holds ");
- else
- writer.writeCharacters(" ");
- }
- }
- break;
-
- case Atom::BriefRight:
- if (relative->isProperty() || relative->isVariable())
- writer.writeCharacters(".");
-
- writer.writeEndElement(); // brief
- break;
-
- case Atom::C:
- writer.writeStartElement("teletype");
- if (m_inLink)
- writer.writeAttribute("type", "normal");
- else
- writer.writeAttribute("type", "highlighted");
-
- writer.writeCharacters(plainCode(atom->string()));
- writer.writeEndElement(); // teletype
- break;
-
- case Atom::Code:
- if (!m_hasQuotingInformation)
- writer.writeTextElement(
- "code", trimmedTrailing(plainCode(atom->string()), QString(), QString()));
- else
- keepQuoting = true;
- break;
-
-#ifdef QDOC_QML
- case Atom::Qml:
- if (!m_hasQuotingInformation)
- writer.writeTextElement(
- "qml", trimmedTrailing(plainCode(atom->string()), QString(), QString()));
- else
- keepQuoting = true;
-#endif
- case Atom::CodeBad:
- writer.writeTextElement("badcode",
- trimmedTrailing(plainCode(atom->string()), QString(), QString()));
- break;
-
- case Atom::CodeNew:
- writer.writeTextElement("para", "you can rewrite it as");
- writer.writeTextElement("newcode",
- trimmedTrailing(plainCode(atom->string()), QString(), QString()));
- break;
-
- case Atom::CodeOld:
- writer.writeTextElement("para", "For example, if you have code like");
- writer.writeTextElement("oldcode",
- trimmedTrailing(plainCode(atom->string()), QString(), QString()));
- break;
-
- case Atom::CodeQuoteArgument:
- if (m_quoting) {
- if (quoteCommand == "dots") {
- writer.writeAttribute("indent", atom->string());
- writer.writeCharacters("...");
- } else {
- writer.writeCharacters(atom->string());
- }
- writer.writeEndElement(); // code
- keepQuoting = true;
- }
- break;
-
- case Atom::CodeQuoteCommand:
- if (m_quoting) {
- quoteCommand = atom->string();
- writer.writeStartElement(quoteCommand);
- }
- break;
-
- case Atom::ExampleFileLink: {
- if (!m_inLink) {
- QString link = linkForExampleFile(atom->string(), relative);
- if (!link.isEmpty())
- startLink(writer, atom, relative, link);
- }
- } break;
-
- case Atom::ExampleImageLink: {
- if (!m_inLink) {
- QString link = atom->string();
- if (!link.isEmpty())
- startLink(writer, atom, nullptr, "images/used-in-examples/" + link);
- }
- } break;
-
- case Atom::FootnoteLeft:
- writer.writeStartElement("footnote");
- break;
-
- case Atom::FootnoteRight:
- writer.writeEndElement(); // footnote
- break;
-
- case Atom::FormatEndif:
- writer.writeEndElement(); // raw
- break;
- case Atom::FormatIf:
- writer.writeStartElement("raw");
- writer.writeAttribute("format", atom->string());
- break;
- case Atom::FormattingLeft: {
- if (atom->string() == ATOM_FORMATTING_BOLD)
- writer.writeStartElement("bold");
- else if (atom->string() == ATOM_FORMATTING_ITALIC)
- writer.writeStartElement("italic");
- else if (atom->string() == ATOM_FORMATTING_UNDERLINE)
- writer.writeStartElement("underline");
- else if (atom->string() == ATOM_FORMATTING_SUBSCRIPT)
- writer.writeStartElement("subscript");
- else if (atom->string() == ATOM_FORMATTING_SUPERSCRIPT)
- writer.writeStartElement("superscript");
- else if (atom->string() == ATOM_FORMATTING_TELETYPE)
- writer.writeStartElement("teletype");
- else if (atom->string() == ATOM_FORMATTING_PARAMETER)
- writer.writeStartElement("argument");
- else if (atom->string() == ATOM_FORMATTING_INDEX)
- writer.writeStartElement("index");
- } break;
-
- case Atom::FormattingRight: {
- if (atom->string() == ATOM_FORMATTING_BOLD)
- writer.writeEndElement();
- else if (atom->string() == ATOM_FORMATTING_ITALIC)
- writer.writeEndElement();
- else if (atom->string() == ATOM_FORMATTING_UNDERLINE)
- writer.writeEndElement();
- else if (atom->string() == ATOM_FORMATTING_SUBSCRIPT)
- writer.writeEndElement();
- else if (atom->string() == ATOM_FORMATTING_SUPERSCRIPT)
- writer.writeEndElement();
- else if (atom->string() == ATOM_FORMATTING_TELETYPE)
- writer.writeEndElement();
- else if (atom->string() == ATOM_FORMATTING_PARAMETER)
- writer.writeEndElement();
- else if (atom->string() == ATOM_FORMATTING_INDEX)
- writer.writeEndElement();
- }
- if (m_inLink) {
- writer.writeEndElement(); // link
- m_inLink = false;
- }
- break;
-
- case Atom::GeneratedList:
- writer.writeStartElement("generatedlist");
- writer.writeAttribute("contents", atom->string());
- writer.writeEndElement();
- break;
- case Atom::Image:
- writer.writeStartElement("image");
- writer.writeAttribute("href", imageFileName(relative, atom->string()));
- writer.writeEndElement();
- setImageFileName(relative, atom->string());
- break;
-
- case Atom::InlineImage:
- writer.writeStartElement("inlineimage");
- writer.writeAttribute("href", imageFileName(relative, atom->string()));
- writer.writeEndElement();
- setImageFileName(relative, atom->string());
- break;
-
- case Atom::ImageText:
- break;
-
- case Atom::ImportantLeft:
- writer.writeStartElement("para");
- writer.writeTextElement("bold", "Important:");
- writer.writeCharacters(" ");
- break;
-
- case Atom::ImportantRight:
- writer.writeEndElement(); // para
- break;
-
- case Atom::LegaleseLeft:
- writer.writeStartElement("legalese");
- break;
-
- case Atom::LegaleseRight:
- writer.writeEndElement(); // legalese
- break;
-
- case Atom::Link:
- case Atom::LinkNode:
- if (!m_inLink) {
- const Node *node = nullptr;
- QString link = getLink(atom, relative, &node);
- if (!link.isEmpty())
- startLink(writer, atom, node, link);
- }
- break;
-
- case Atom::ListLeft:
- writer.writeStartElement("list");
-
- if (atom->string() == ATOM_LIST_BULLET)
- writer.writeAttribute("type", "bullet");
- else if (atom->string() == ATOM_LIST_TAG)
- writer.writeAttribute("type", "definition");
- else if (atom->string() == ATOM_LIST_VALUE) {
- if (relative->isEnumType())
- writer.writeAttribute("type", "enum");
- else
- writer.writeAttribute("type", "definition");
- } else {
- writer.writeAttribute("type", "ordered");
- if (atom->string() == ATOM_LIST_UPPERALPHA)
- writer.writeAttribute("start", "A");
- else if (atom->string() == ATOM_LIST_LOWERALPHA)
- writer.writeAttribute("start", "a");
- else if (atom->string() == ATOM_LIST_UPPERROMAN)
- writer.writeAttribute("start", "I");
- else if (atom->string() == ATOM_LIST_LOWERROMAN)
- writer.writeAttribute("start", "i");
- else // (atom->string() == ATOM_LIST_NUMERIC)
- writer.writeAttribute("start", "1");
- }
- break;
-
- case Atom::ListItemNumber:
- break;
- case Atom::ListTagLeft: {
- writer.writeStartElement("definition");
-
- writer.writeTextElement(
- "term", plainCode(marker->markedUpEnumValue(atom->next()->string(), relative)));
- } break;
-
- case Atom::ListTagRight:
- writer.writeEndElement(); // definition
- break;
-
- case Atom::ListItemLeft:
- writer.writeStartElement("item");
- break;
-
- case Atom::ListItemRight:
- writer.writeEndElement(); // item
- break;
-
- case Atom::ListRight:
- writer.writeEndElement(); // list
- break;
-
- case Atom::NoteLeft:
- writer.writeStartElement("para");
- writer.writeTextElement("bold", "Note:");
- writer.writeCharacters(" ");
- break;
-
- case Atom::NoteRight:
- writer.writeEndElement(); // para
- break;
-
- case Atom::Nop:
- break;
-
- case Atom::ParaLeft:
- writer.writeStartElement("para");
- break;
-
- case Atom::ParaRight:
- writer.writeEndElement(); // para
- break;
-
- case Atom::QuotationLeft:
- writer.writeStartElement("quote");
- break;
-
- case Atom::QuotationRight:
- writer.writeEndElement(); // quote
- break;
-
- case Atom::RawString:
- writer.writeCharacters(atom->string());
- break;
-
- case Atom::SectionLeft:
- writer.writeStartElement("section");
- writer.writeAttribute("id", Doc::canonicalTitle(Text::sectionHeading(atom).toString()));
- break;
-
- case Atom::SectionRight:
- writer.writeEndElement(); // section
- break;
-
- case Atom::SectionHeadingLeft: {
- writer.writeStartElement("heading");
- int unit = atom->string().toInt(); // + hOffset(relative)
- writer.writeAttribute("level", QString::number(unit));
- m_inSectionHeading = true;
- } break;
-
- case Atom::SectionHeadingRight:
- writer.writeEndElement(); // heading
- m_inSectionHeading = false;
- break;
-
- case Atom::SidebarLeft:
- case Atom::SidebarRight:
- break;
-
- case Atom::SnippetCommand:
- if (m_quoting) {
- writer.writeStartElement(atom->string());
- }
- break;
-
- case Atom::SnippetIdentifier:
- if (m_quoting) {
- writer.writeAttribute("identifier", atom->string());
- writer.writeEndElement();
- keepQuoting = true;
- }
- break;
-
- case Atom::SnippetLocation:
- if (m_quoting) {
- const QString &location = atom->string();
- writer.writeAttribute("location", location);
- const QString resolved = Doc::resolveFile(Location(), location);
- if (!resolved.isEmpty())
- writer.writeAttribute("path", resolved);
- }
- break;
-
- case Atom::String:
- writer.writeCharacters(atom->string());
- break;
- case Atom::TableLeft:
- writer.writeStartElement("table");
- if (atom->string().contains("%"))
- writer.writeAttribute("width", atom->string());
- break;
-
- case Atom::TableRight:
- writer.writeEndElement(); // table
- break;
-
- case Atom::TableHeaderLeft:
- writer.writeStartElement("header");
- break;
-
- case Atom::TableHeaderRight:
- writer.writeEndElement(); // header
- break;
-
- case Atom::TableRowLeft:
- writer.writeStartElement("row");
- break;
-
- case Atom::TableRowRight:
- writer.writeEndElement(); // row
- break;
-
- case Atom::TableItemLeft: {
- writer.writeStartElement("item");
- QStringList spans = atom->string().split(",");
- if (spans.size() == 2) {
- if (spans.at(0) != "1")
- writer.writeAttribute("colspan", spans.at(0).trimmed());
- if (spans.at(1) != "1")
- writer.writeAttribute("rowspan", spans.at(1).trimmed());
- }
- } break;
- case Atom::TableItemRight:
- writer.writeEndElement(); // item
- break;
-
- case Atom::Target:
- writer.writeStartElement("target");
- writer.writeAttribute("name", Doc::canonicalTitle(atom->string()));
- writer.writeEndElement();
- break;
-
- case Atom::UnhandledFormat:
- case Atom::UnknownCommand:
- writer.writeCharacters(atom->typeString());
- break;
- default:
- break;
- }
-
- m_hasQuotingInformation = keepQuoting;
- return atom->next();
-}
-
-void WebXMLGenerator::startLink(QXmlStreamWriter &writer, const Atom *atom, const Node *node,
- const QString &link)
-{
- QString fullName = link;
- if (node)
- fullName = node->fullName();
- if (!fullName.isEmpty() && !link.isEmpty()) {
- writer.writeStartElement("link");
- if (!atom->string().isEmpty())
- writer.writeAttribute("raw", atom->string());
- else
- writer.writeAttribute("raw", fullName);
- writer.writeAttribute("href", link);
- writer.writeAttribute("type", targetType(node));
- if (node) {
- switch (node->nodeType()) {
- case Node::Enum:
- writer.writeAttribute("enum", fullName);
- break;
- case Node::Example: {
- const auto *en = static_cast<const ExampleNode *>(node);
- QString fileTitle = exampleFileTitle(en, atom->string());
- if (!fileTitle.isEmpty()) {
- writer.writeAttribute("page", fileTitle);
- break;
- }
- }
- Q_FALLTHROUGH();
- case Node::Page:
- writer.writeAttribute("page", fullName);
- break;
- case Node::Property: {
- const auto *propertyNode = static_cast<const PropertyNode *>(node);
- if (propertyNode->getters().empty())
- writer.writeAttribute("getter", propertyNode->getters().at(0)->fullName());
- } break;
- default:
- break;
- }
- }
- m_inLink = true;
- }
-}
-
-void WebXMLGenerator::endLink(QXmlStreamWriter &writer)
-{
- if (m_inLink) {
- writer.writeEndElement(); // link
- m_inLink = false;
- }
-}
-
-void WebXMLGenerator::generateRelations(QXmlStreamWriter &writer, const Node *node)
-{
- if (node && !node->links().empty()) {
- QPair<QString, QString> anchorPair;
- const Node *linkNode;
-
- for (auto it = node->links().cbegin(); it != node->links().cend(); ++it) {
-
- linkNode = m_qdb->findNodeForTarget(it.value().first, node);
-
- if (!linkNode)
- linkNode = node;
-
- if (linkNode == node)
- anchorPair = it.value();
- else
- anchorPair = anchorForNode(linkNode);
-
- writer.writeStartElement("relation");
- writer.writeAttribute("href", anchorPair.first);
- writer.writeAttribute("type", targetType(linkNode));
-
- switch (it.key()) {
- case Node::StartLink:
- writer.writeAttribute("meta", "start");
- break;
- case Node::NextLink:
- writer.writeAttribute("meta", "next");
- break;
- case Node::PreviousLink:
- writer.writeAttribute("meta", "previous");
- break;
- case Node::ContentsLink:
- writer.writeAttribute("meta", "contents");
- break;
- default:
- writer.writeAttribute("meta", "");
- }
- writer.writeAttribute("description", anchorPair.second);
- writer.writeEndElement(); // link
- }
- }
-}
-
-void WebXMLGenerator::generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative,
- const NodeMap &nodeMap)
-{
- generateAnnotatedList(writer, relative, nodeMap.values());
-}
-
-void WebXMLGenerator::generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative,
- const NodeList &nodeList)
-{
- writer.writeStartElement("table");
- writer.writeAttribute("width", "100%");
-
- for (const auto *node : nodeList) {
- writer.writeStartElement("row");
- writer.writeStartElement("item");
- writer.writeStartElement("para");
- const QString link = linkForNode(node, relative);
- startLink(writer, node->doc().body().firstAtom(), node, link);
- endLink(writer);
- writer.writeEndElement(); // para
- writer.writeEndElement(); // item
-
- writer.writeStartElement("item");
- writer.writeStartElement("para");
- writer.writeCharacters(node->doc().briefText().toString());
- writer.writeEndElement(); // para
- writer.writeEndElement(); // item
- writer.writeEndElement(); // row
- }
- writer.writeEndElement(); // table
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/webxmlgenerator.h b/src/qdoc/webxmlgenerator.h
deleted file mode 100644
index 187abd93d..000000000
--- a/src/qdoc/webxmlgenerator.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef WEBXMLGENERATOR_H
-#define WEBXMLGENERATOR_H
-
-#include "codemarker.h"
-#include "htmlgenerator.h"
-#include "qdocindexfiles.h"
-
-#include <QtCore/qscopedpointer.h>
-#include <QtCore/qxmlstream.h>
-
-QT_BEGIN_NAMESPACE
-
-class Aggregate;
-
-class WebXMLGenerator : public HtmlGenerator, public IndexSectionWriter
-{
-public:
- WebXMLGenerator() = default;
-
- void initializeGenerator() override;
- void terminateGenerator() override;
- QString format() override;
- // from IndexSectionWriter
- void append(QXmlStreamWriter &writer, Node *node) override;
-
-protected:
- int generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker) override;
- void generateCppReferencePage(Aggregate *aggregate, CodeMarker *marker) override;
- void generatePageNode(PageNode *pn, CodeMarker *marker) override;
- void generateDocumentation(Node *node) override;
- void generateExampleFilePage(const Node *en, const QString &file, CodeMarker *marker) override;
- QString fileExtension() const override;
-
- virtual const Atom *addAtomElements(QXmlStreamWriter &writer, const Atom *atom,
- const Node *relative, CodeMarker *marker);
- virtual void generateIndexSections(QXmlStreamWriter &writer, Node *node);
-
-private:
- void generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative,
- const NodeMap &nodeMap);
- void generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative,
- const NodeList &nodeList);
- void generateRelations(QXmlStreamWriter &writer, const Node *node);
- void startLink(QXmlStreamWriter &writer, const Atom *atom, const Node *node,
- const QString &link);
- void endLink(QXmlStreamWriter &writer);
-
- bool m_inLink { false };
- bool m_inSectionHeading { false };
- bool m_hasQuotingInformation { false };
- QString quoteCommand {};
- QScopedPointer<QXmlStreamWriter> currentWriter {};
- bool m_supplement { false };
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qdoc/xmlgenerator.cpp b/src/qdoc/xmlgenerator.cpp
deleted file mode 100644
index 1e992bc3e..000000000
--- a/src/qdoc/xmlgenerator.cpp
+++ /dev/null
@@ -1,477 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 Thibaut Cuvelier
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "xmlgenerator.h"
-
-#include "enumnode.h"
-#include "examplenode.h"
-#include "functionnode.h"
-#include "qdocdatabase.h"
-#include "typedefnode.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- Do not display \brief for QML/JS types, document and collection nodes
- */
-bool XmlGenerator::hasBrief(const Node *node)
-{
- return !(node->isQmlType() || node->isPageNode() || node->isCollectionNode()
- || node->isJsType());
-}
-
-/*!
- Determines whether the list atom should be shown with three columns
- (constant-value-description).
- */
-bool XmlGenerator::isThreeColumnEnumValueTable(const Atom *atom)
-{
- while (atom && !(atom->type() == Atom::ListRight && atom->string() == ATOM_LIST_VALUE)) {
- if (atom->type() == Atom::ListItemLeft && !matchAhead(atom, Atom::ListItemRight))
- return true;
- atom = atom->next();
- }
- return false;
-}
-
-/*!
- Header offset depending on the type of the node
- */
-int XmlGenerator::hOffset(const Node *node)
-{
- switch (node->nodeType()) {
- case Node::Namespace:
- case Node::Class:
- case Node::Struct:
- case Node::Union:
- case Node::Module:
- return 2;
- case Node::QmlModule:
- case Node::QmlBasicType:
- case Node::QmlType:
- case Node::Page:
- return 1;
- case Node::Enum:
- case Node::TypeAlias:
- case Node::Typedef:
- case Node::Function:
- case Node::Property:
- default:
- return 3;
- }
-}
-
-/*!
- Rewrites the brief of this node depending on its first word.
- Only for properties and variables (does nothing otherwise).
- */
-void XmlGenerator::rewritePropertyBrief(const Atom *atom, const Node *relative)
-{
- if (relative->nodeType() == Node::Property || relative->nodeType() == Node::Variable) {
- atom = atom->next();
- if (atom && atom->type() == Atom::String) {
- QString firstWord =
- atom->string().toLower().section(' ', 0, 0, QString::SectionSkipEmpty);
- if (firstWord == QLatin1String("the") || firstWord == QLatin1String("a")
- || firstWord == QLatin1String("an") || firstWord == QLatin1String("whether")
- || firstWord == QLatin1String("which")) {
- QString str = QLatin1String("This ")
- + QLatin1String(relative->nodeType() == Node::Property ? "property"
- : "variable")
- + QLatin1String(" holds ") + atom->string().left(1).toLower()
- + atom->string().mid(1);
- const_cast<Atom *>(atom)->setString(str);
- }
- }
- }
-}
-
-/*!
- Returns the type of this atom as an enumeration.
- */
-Node::NodeType XmlGenerator::typeFromString(const Atom *atom)
-{
- const auto &name = atom->string();
- if (name.startsWith(QLatin1String("qml")))
- return Node::QmlModule;
- else if (name.startsWith(QLatin1String("js")))
- return Node::JsModule;
- else if (name.startsWith(QLatin1String("groups")))
- return Node::Group;
- else
- return Node::Module;
-}
-
-/*!
- For images shown in examples, set the image file to the one it
- will have once the documentation is generated.
- */
-void XmlGenerator::setImageFileName(const Node *relative, const QString &fileName)
-{
- if (relative->isExample()) {
- const auto cen = static_cast<const ExampleNode *>(relative);
- if (cen->imageFileName().isEmpty()) {
- auto *en = const_cast<ExampleNode *>(cen);
- en->setImageFileName(fileName);
- }
- }
-}
-
-/*!
- Handles the differences in lists between list tags and since tags, and
- returns the content of the list entry \a atom (first member of the pair).
- It also returns the number of items to skip ahead (second member of the pair).
- */
-QPair<QString, int> XmlGenerator::getAtomListValue(const Atom *atom)
-{
- const Atom *lookAhead = atom->next();
- if (!lookAhead)
- return QPair<QString, int>(QString(), 1);
-
- QString t = lookAhead->string();
- lookAhead = lookAhead->next();
- if (!lookAhead || lookAhead->type() != Atom::ListTagRight)
- return QPair<QString, int>(QString(), 1);
-
- lookAhead = lookAhead->next();
- int skipAhead;
- if (lookAhead && lookAhead->type() == Atom::SinceTagLeft) {
- lookAhead = lookAhead->next();
- Q_ASSERT(lookAhead && lookAhead->type() == Atom::String);
- t += QLatin1String(" (since ");
- if (lookAhead->string().at(0).isDigit())
- t += QLatin1String("Qt ");
- t += lookAhead->string() + QLatin1String(")");
- skipAhead = 4;
- } else {
- skipAhead = 1;
- }
- return QPair<QString, int>(t, skipAhead);
-}
-
-/*!
- Parses the table attributes from the given \a atom.
- This method returns a pair containing the width (%) and
- the attribute for this table (either "generic" or
- "borderless").
- */
-QPair<QString, QString> XmlGenerator::getTableWidthAttr(const Atom *atom)
-{
- QString p0, p1;
- QString attr = "generic";
- QString width;
- if (atom->count() > 0) {
- p0 = atom->string(0);
- if (atom->count() > 1)
- p1 = atom->string(1);
- }
- if (!p0.isEmpty()) {
- if (p0 == QLatin1String("borderless"))
- attr = p0;
- else if (p0.contains(QLatin1Char('%')))
- width = p0;
- }
- if (!p1.isEmpty()) {
- if (p1 == QLatin1String("borderless"))
- attr = p1;
- else if (p1.contains(QLatin1Char('%')))
- width = p1;
- }
- return QPair<QString, QString>(width, attr);
-}
-
-/*!
- Registers an anchor reference and returns a unique
- and cleaned copy of the reference (the one that should be
- used in the output).
- To ensure unicity throughout the document, this method
- uses the \a refMap cache.
- */
-QString XmlGenerator::registerRef(const QString &ref)
-{
- QString clean = Generator::cleanRef(ref);
-
- for (;;) {
- QString &prevRef = refMap[clean.toLower()];
- if (prevRef.isEmpty()) {
- prevRef = ref;
- break;
- } else if (prevRef == ref) {
- break;
- }
- clean += QLatin1Char('x');
- }
- return clean;
-}
-
-/*!
- Generates a clean and unique reference for the given \a node.
- This reference may depend on the type of the node (typedef,
- QML signal, etc.)
- */
-QString XmlGenerator::refForNode(const Node *node)
-{
- QString ref;
- switch (node->nodeType()) {
- case Node::Enum:
- ref = node->name() + "-enum";
- break;
- case Node::TypeAlias:
- ref = node->name() + "-alias";
- break;
- case Node::Typedef: {
- const auto tdn = static_cast<const TypedefNode *>(node);
- if (tdn->associatedEnum())
- return refForNode(tdn->associatedEnum());
- ref = node->name() + "-typedef";
- } break;
- case Node::Function: {
- const auto fn = static_cast<const FunctionNode *>(node);
- switch (fn->metaness()) {
- case FunctionNode::JsSignal:
- case FunctionNode::QmlSignal:
- ref = fn->name() + "-signal";
- break;
- case FunctionNode::JsSignalHandler:
- case FunctionNode::QmlSignalHandler:
- ref = fn->name() + "-signal-handler";
- break;
- case FunctionNode::JsMethod:
- case FunctionNode::QmlMethod:
- ref = fn->name() + "-method";
- if (fn->overloadNumber() != 0)
- ref += QLatin1Char('-') + QString::number(fn->overloadNumber());
- break;
- default:
- if (fn->hasOneAssociatedProperty() && fn->doc().isEmpty()) {
- return refForNode(fn->firstAssociatedProperty());
- } else {
- ref = fn->name();
- if (fn->overloadNumber() != 0)
- ref += QLatin1Char('-') + QString::number(fn->overloadNumber());
- }
- break;
- }
- } break;
- case Node::JsProperty:
- case Node::QmlProperty:
- if (node->isAttached())
- ref = node->name() + "-attached-prop";
- else
- ref = node->name() + "-prop";
- break;
- case Node::Property:
- ref = node->name() + "-prop";
- break;
- case Node::Variable:
- ref = node->name() + "-var";
- break;
- case Node::SharedComment:
- if (node->isPropertyGroup())
- ref = node->name() + "-prop";
- break;
- default:
- break;
- }
- return registerRef(ref);
-}
-
-/*!
- Construct the link string for the \a node and return it.
- The \a relative node is used to decide whether the link
- we are generating is in the same file as the target.
- Note the relative node can be 0, which pretty much
- guarantees that the link and the target aren't in the
- same file.
- */
-QString XmlGenerator::linkForNode(const Node *node, const Node *relative)
-{
- if (node == nullptr)
- return QString();
- if (!node->url().isEmpty())
- return node->url();
- if (fileBase(node).isEmpty())
- return QString();
- if (node->isPrivate())
- return QString();
-
- QString fn = fileName(node);
- if (node->parent() && (node->parent()->isQmlType() || node->parent()->isJsType())
- && node->parent()->isAbstract()) {
- if (Generator::qmlTypeContext()) {
- if (Generator::qmlTypeContext()->inherits(node->parent())) {
- fn = fileName(Generator::qmlTypeContext());
- } else if (node->parent()->isInternal() && !noLinkErrors()) {
- node->doc().location().warning(
- QStringLiteral("Cannot link to property in internal type '%1'")
- .arg(node->parent()->name()));
- return QString();
- }
- }
- }
-
- QString link = fn;
-
- if (!node->isPageNode() || node->isPropertyGroup()) {
- QString ref = refForNode(node);
- if (relative && fn == fileName(relative) && ref == refForNode(relative))
- return QString();
-
- link += QLatin1Char('#');
- link += ref;
- }
-
- /*
- If the output is going to subdirectories, then if the
- two nodes will be output to different directories, then
- the link must go up to the parent directory and then
- back down into the other subdirectory.
- */
- if (relative && (node != relative)) {
- if (useOutputSubdirs() && !node->isExternalPage()
- && node->outputSubdirectory() != relative->outputSubdirectory()) {
- if (link.startsWith(QString(node->outputSubdirectory() + QLatin1Char('/')))) {
- link.prepend(QString("../"));
- } else {
- link.prepend(QString("../" + node->outputSubdirectory() + QLatin1Char('/')));
- }
- }
- }
- return link;
-}
-
-/*!
- This function is called for links, i.e. for words that
- are marked with the qdoc link command. For autolinks
- that are not marked with the qdoc link command, the
- getAutoLink() function is called
-
- It returns the string for a link found by using the data
- in the \a atom to search the database. It also sets \a node
- to point to the target node for that link. \a relative points
- to the node holding the qdoc comment where the link command
- was found.
- */
-QString XmlGenerator::getLink(const Atom *atom, const Node *relative, const Node **node)
-{
- const QString &t = atom->string();
- if (t.at(0) == QChar('h')) {
- if (t.startsWith("http:") || t.startsWith("https:"))
- return t;
- } else if (t.at(0) == QChar('f')) {
- if (t.startsWith("file:") || t.startsWith("ftp:"))
- return t;
- } else if (t.at(0) == QChar('m')) {
- if (t.startsWith("mailto:"))
- return t;
- }
- return getAutoLink(atom, relative, node);
-}
-
-/*!
- This function is called for autolinks, i.e. for words that
- are not marked with the qdoc link command that qdoc has
- reason to believe should be links. For links marked with
- the qdoc link command, the getLink() function is called.
-
- It returns the string for a link found by using the data
- in the \a atom to search the database. It also sets \a node
- to point to the target node for that link. \a relative points
- to the node holding the qdoc comment where the link command
- was found.
- */
-QString XmlGenerator::getAutoLink(const Atom *atom, const Node *relative, const Node **node)
-{
- QString ref;
-
- *node = m_qdb->findNodeForAtom(atom, relative, ref);
- if (!(*node))
- return QString();
-
- QString link = (*node)->url();
- if (link.isEmpty())
- link = linkForNode(*node, relative);
- if (!ref.isEmpty()) {
- int hashtag = link.lastIndexOf(QChar('#'));
- if (hashtag != -1)
- link.truncate(hashtag);
- link += QLatin1Char('#') + ref;
- }
- return link;
-}
-
-QPair<QString, QString> XmlGenerator::anchorForNode(const Node *node)
-{
- QPair<QString, QString> anchorPair;
-
- anchorPair.first = Generator::fileName(node);
- if (node->isTextPageNode())
- anchorPair.second = node->title();
-
- return anchorPair;
-}
-
-/*!
- Returns a string describing the \a node type.
- */
-QString XmlGenerator::targetType(const Node *node)
-{
- if (!node)
- return QStringLiteral("external");
-
- switch (node->nodeType()) {
- case Node::Namespace:
- return QStringLiteral("namespace");
- case Node::Class:
- case Node::Struct:
- case Node::Union:
- return QStringLiteral("class");
- case Node::Page:
- case Node::Example:
- return QStringLiteral("page");
- case Node::Enum:
- return QStringLiteral("enum");
- case Node::TypeAlias:
- return QStringLiteral("alias");
- case Node::Typedef:
- return QStringLiteral("typedef");
- case Node::Property:
- return QStringLiteral("property");
- case Node::Function:
- return QStringLiteral("function");
- case Node::Variable:
- return QStringLiteral("variable");
- case Node::Module:
- return QStringLiteral("module");
- default:
- break;
- }
- return QString();
-}
-
-QT_END_NAMESPACE
diff --git a/src/qdoc/xmlgenerator.h b/src/qdoc/xmlgenerator.h
deleted file mode 100644
index 0397096c5..000000000
--- a/src/qdoc/xmlgenerator.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 Thibaut Cuvelier
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef XMLGENERATOR_H
-#define XMLGENERATOR_H
-
-#include "node.h"
-#include "generator.h"
-
-#include <QtCore/qmap.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-class XmlGenerator : public Generator
-{
-public:
- explicit XmlGenerator() = default;
-
-protected:
- QHash<QString, QString> refMap;
-
- static bool hasBrief(const Node *node);
- static bool isThreeColumnEnumValueTable(const Atom *atom);
- static int hOffset(const Node *node);
-
- static void rewritePropertyBrief(const Atom *atom, const Node *relative);
- static Node::NodeType typeFromString(const Atom *atom);
- static void setImageFileName(const Node *relative, const QString &fileName);
- static QPair<QString, int> getAtomListValue(const Atom *atom);
- static QPair<QString, QString> getTableWidthAttr(const Atom *atom);
-
- QString registerRef(const QString &ref);
- QString refForNode(const Node *node);
- QString linkForNode(const Node *node, const Node *relative);
- QString getLink(const Atom *atom, const Node *relative, const Node **node);
- QString getAutoLink(const Atom *atom, const Node *relative, const Node **node);
-
- QPair<QString, QString> anchorForNode(const Node *node);
-
- static QString targetType(const Node *node);
-};
-
-QT_END_NAMESPACE
-
-#endif // XMLGENERATOR_H
diff --git a/src/qev/CMakeLists.txt b/src/qev/CMakeLists.txt
index 54c4eda74..33877da15 100644
--- a/src/qev/CMakeLists.txt
+++ b/src/qev/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qev.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qev App:
@@ -11,7 +12,3 @@ qt_internal_add_app(qev
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qev.pro:<TRUE>:
-# QT_FOR_CONFIG = "tools-private"
-# _REQUIREMENTS = "qtConfig(qev)"
diff --git a/src/qev/qev.cpp b/src/qev/qev.cpp
index 01bfbd9e9..ca30c1173 100644
--- a/src/qev/qev.cpp
+++ b/src/qev/qev.cpp
@@ -1,34 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QWidget>
#include <QApplication>
#include <QDebug>
+#include <QFile>
#include <qevent.h>
QT_USE_NAMESPACE
@@ -39,8 +15,9 @@ class Widget : public QWidget
{
public:
Widget(){ setAttribute(Qt::WA_InputMethodEnabled); }
- QSize sizeHint() const { return QSize(20, 20); }
- bool event(QEvent *e) {
+ QSize sizeHint() const override { return QSize(20, 20); }
+ bool event(QEvent *e) override
+ {
if (e->type() == QEvent::ContextMenu)
return false;
QDebug(qout) << e << Qt::endl;
diff --git a/src/qev/qev.pro b/src/qev/qev.pro
deleted file mode 100644
index 2f2e399b5..000000000
--- a/src/qev/qev.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-include($$OUT_PWD/../../src/global/qttools-config.pri)
-QT_FOR_CONFIG += tools-private
-requires(qtConfig(qev))
-
-QT += widgets
-
-SOURCES += qev.cpp
-
-load(qt_app)
diff --git a/src/qtattributionsscanner/.prev_CMakeLists.txt b/src/qtattributionsscanner/.prev_CMakeLists.txt
deleted file mode 100644
index 70c79444d..000000000
--- a/src/qtattributionsscanner/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-# Generated from qtattributionsscanner.pro.
-
-#####################################################################
-## qtattributionsscanner Tool:
-#####################################################################
-
-qt_get_tool_target_name(target_name qtattributionsscanner)
-qt_add_tool(${target_name}
- TARGET_DESCRIPTION "Qt Source Code Attribution Scanner"
- SOURCES
- jsongenerator.cpp jsongenerator.h
- logging.h
- main.cpp
- package.h
- packagefilter.cpp packagefilter.h
- qdocgenerator.cpp qdocgenerator.h
- scanner.cpp scanner.h
- DEFINES
- QT_NO_CAST_FROM_ASCII
- QT_NO_CAST_TO_ASCII
- PUBLIC_LIBRARIES
- Qt::Gui
-)
-
-#### Keys ignored in scope 1:.:.:qtattributionsscanner.pro:<TRUE>:
-# CMAKE_BIN_DIR = "$$cmakeRelativePath($$[QT_HOST_BINS], $$[QT_INSTALL_PREFIX])"
-# CMAKE_INSTALL_LIBS_DIR = "$$cmakeTargetPath($$[QT_INSTALL_LIBS])"
-# CMAKE_LIB_DIR = "$$cmakeRelativePath($$[QT_INSTALL_LIBS], $$[QT_INSTALL_PREFIX])"
-# CMAKE_PACKAGE_VERSION = "$$MODULE_VERSION"
-# INSTALLS = "cmake_qattributionsscanner_tools_files"
-# QMAKE_SUBSTITUTES = "cmake_qattributionsscanner_config_file" "cmake_qattributionsscanner_config_version_file"
-# QMAKE_TARGET_DESCRIPTION = "Qt Source Code Attribution Scanner"
-# QT_FOR_CONFIG = "tools-private"
-# _OPTION = "host_build"
-# _REQUIREMENTS = "qtConfig(qtattributionsscanner)"
-# cmake_qattributionsscanner_config_file.input = "$$PWD/Qt5AttributionsScannerTools.cmake.in"
-# cmake_qattributionsscanner_config_file.output = "$$MODULE_BASE_OUTDIR/lib/cmake/Qt5AttributionsScannerTools/Qt5AttributionsScannerToolsConfig.cmake"
-# cmake_qattributionsscanner_config_version_file.input = "$$[QT_HOST_DATA/src]/mkspecs/features/data/cmake/Qt5ConfigVersion.cmake.in"
-# cmake_qattributionsscanner_config_version_file.output = "$$MODULE_BASE_OUTDIR/lib/cmake/Qt5AttributionsScannerTools/Qt5AttributionsScannerToolsConfigVersion.cmake"
-# cmake_qattributionsscanner_tools_files.CONFIG = "no_check_exist"
-# cmake_qattributionsscanner_tools_files.files = "$$cmake_qattributionsscanner_config_file.output" "$$cmake_qattributionsscanner_config_version_file.output"
-# cmake_qattributionsscanner_tools_files.path = "$$[QT_INSTALL_LIBS]/cmake/Qt5AttributionsScannerTools"
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 2:.:.:qtattributionsscanner.pro:CMAKE_INSTALL_LIBS_DIR___contains___^(/usr?/lib(64)?._x_):
-# CMAKE_USR_MOVE_WORKAROUND = "$$CMAKE_INSTALL_LIBS_DIR"
-
-#### Keys ignored in scope 3:.:.:qtattributionsscanner.pro:NOT CMAKE_LIB_DIR___contains___^\\.\\./._x_:
-# CMAKE_RELATIVE_INSTALL_DIR = "$${CMAKE_RELATIVE_INSTALL_LIBS_DIR}../../"
-# CMAKE_RELATIVE_INSTALL_LIBS_DIR = "$$cmakeRelativePath($$[QT_INSTALL_PREFIX], $$[QT_INSTALL_LIBS])"
-
-#### Keys ignored in scope 4:.:.:qtattributionsscanner.pro:else:
-# CMAKE_LIB_DIR_IS_ABSOLUTE = "True"
-
-#### Keys ignored in scope 5:.:.:qtattributionsscanner.pro:CMAKE_BIN_DIR___contains___^\\.\\./._x_:
-# CMAKE_BIN_DIR = "$$[QT_HOST_BINS]/"
-# CMAKE_BIN_DIR_IS_ABSOLUTE = "True"
-
-#### Keys ignored in scope 6:.:.:qtattributionsscanner.pro:QMAKE_HOST.os___equals___Windows:
-# CMAKE_BIN_SUFFIX = ".exe"
diff --git a/src/qtattributionsscanner/CMakeLists.txt b/src/qtattributionsscanner/CMakeLists.txt
index 15943a0c5..34770bf4b 100644
--- a/src/qtattributionsscanner/CMakeLists.txt
+++ b/src/qtattributionsscanner/CMakeLists.txt
@@ -1,13 +1,15 @@
-# Generated from qtattributionsscanner.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qtattributionsscanner Tool:
#####################################################################
qt_get_tool_target_name(target_name qtattributionsscanner)
-qt_add_tool(${target_name}
+qt_internal_add_tool(${target_name}
TARGET_DESCRIPTION "Qt Source Code Attribution Scanner"
- TOOLS_TARGET Tools # special case
+ TOOLS_TARGET Tools
+ INSTALL_DIR "${INSTALL_LIBEXECDIR}"
SOURCES
jsongenerator.cpp jsongenerator.h
logging.h
@@ -19,45 +21,5 @@ qt_add_tool(${target_name}
DEFINES
QT_NO_CAST_FROM_ASCII
QT_NO_CAST_TO_ASCII
- PUBLIC_LIBRARIES
- Qt::Gui
)
-
-#### Keys ignored in scope 1:.:.:qtattributionsscanner.pro:<TRUE>:
-# CMAKE_BIN_DIR = "$$cmakeRelativePath($$[QT_HOST_BINS], $$[QT_INSTALL_PREFIX])"
-# CMAKE_INSTALL_LIBS_DIR = "$$cmakeTargetPath($$[QT_INSTALL_LIBS])"
-# CMAKE_LIB_DIR = "$$cmakeRelativePath($$[QT_INSTALL_LIBS], $$[QT_INSTALL_PREFIX])"
-# CMAKE_PACKAGE_VERSION = "$$MODULE_VERSION"
-# INSTALLS = "cmake_qattributionsscanner_tools_files"
-# QMAKE_SUBSTITUTES = "cmake_qattributionsscanner_config_file" "cmake_qattributionsscanner_config_version_file"
-# QMAKE_TARGET_DESCRIPTION = "Qt Source Code Attribution Scanner"
-# QT_FOR_CONFIG = "tools-private"
-# _OPTION = "host_build"
-# _REQUIREMENTS = "qtConfig(qtattributionsscanner)"
-# cmake_qattributionsscanner_config_file.input = "$$PWD/Qt5AttributionsScannerTools.cmake.in"
-# cmake_qattributionsscanner_config_file.output = "$$MODULE_BASE_OUTDIR/lib/cmake/Qt5AttributionsScannerTools/Qt5AttributionsScannerToolsConfig.cmake"
-# cmake_qattributionsscanner_config_version_file.input = "$$[QT_HOST_DATA/src]/mkspecs/features/data/cmake/Qt5ConfigVersion.cmake.in"
-# cmake_qattributionsscanner_config_version_file.output = "$$MODULE_BASE_OUTDIR/lib/cmake/Qt5AttributionsScannerTools/Qt5AttributionsScannerToolsConfigVersion.cmake"
-# cmake_qattributionsscanner_tools_files.CONFIG = "no_check_exist"
-# cmake_qattributionsscanner_tools_files.files = "$$cmake_qattributionsscanner_config_file.output" "$$cmake_qattributionsscanner_config_version_file.output"
-# cmake_qattributionsscanner_tools_files.path = "$$[QT_INSTALL_LIBS]/cmake/Qt5AttributionsScannerTools"
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 2:.:.:qtattributionsscanner.pro:CMAKE_INSTALL_LIBS_DIR___contains___^(/usr?/lib(64)?._x_):
-# CMAKE_USR_MOVE_WORKAROUND = "$$CMAKE_INSTALL_LIBS_DIR"
-
-#### Keys ignored in scope 3:.:.:qtattributionsscanner.pro:NOT CMAKE_LIB_DIR___contains___^\\.\\./._x_:
-# CMAKE_RELATIVE_INSTALL_DIR = "$${CMAKE_RELATIVE_INSTALL_LIBS_DIR}../../"
-# CMAKE_RELATIVE_INSTALL_LIBS_DIR = "$$cmakeRelativePath($$[QT_INSTALL_PREFIX], $$[QT_INSTALL_LIBS])"
-
-#### Keys ignored in scope 4:.:.:qtattributionsscanner.pro:else:
-# CMAKE_LIB_DIR_IS_ABSOLUTE = "True"
-
-#### Keys ignored in scope 5:.:.:qtattributionsscanner.pro:CMAKE_BIN_DIR___contains___^\\.\\./._x_:
-# CMAKE_BIN_DIR = "$$[QT_HOST_BINS]/"
-# CMAKE_BIN_DIR_IS_ABSOLUTE = "True"
-
-#### Keys ignored in scope 6:.:.:qtattributionsscanner.pro:QMAKE_HOST.os___equals___Windows:
-# CMAKE_BIN_SUFFIX = ".exe"
+qt_internal_return_unless_building_tools()
diff --git a/src/qtattributionsscanner/Qt5AttributionsScannerTools.cmake.in b/src/qtattributionsscanner/Qt5AttributionsScannerTools.cmake.in
deleted file mode 100644
index e99540bfa..000000000
--- a/src/qtattributionsscanner/Qt5AttributionsScannerTools.cmake.in
+++ /dev/null
@@ -1,67 +0,0 @@
-if (CMAKE_VERSION VERSION_LESS 2.8.3)
- message(FATAL_ERROR \"Qt 5 requires at least CMake version 2.8.3\")
-endif()
-
-!!IF !isEmpty(CMAKE_USR_MOVE_WORKAROUND)
-!!IF !isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
-set(_qt5_qattributionsscannertools_install_prefix \"$$[QT_INSTALL_PREFIX]\")
-!!ELSE
-get_filename_component(_IMPORT_PREFIX \"${CMAKE_CURRENT_LIST_FILE}\" PATH)
-# Use original install prefix when loaded through a
-# cross-prefix symbolic link such as /lib -> /usr/lib.
-get_filename_component(_realCurr \"${_IMPORT_PREFIX}\" REALPATH)
-get_filename_component(_realOrig \"$$CMAKE_INSTALL_LIBS_DIR/cmake/Qt5AttributionsScannerTools\" REALPATH)
-if(_realCurr STREQUAL _realOrig)
- get_filename_component(_qt5_qattributionsscannertools_install_prefix \"$$CMAKE_INSTALL_LIBS_DIR/$${CMAKE_RELATIVE_INSTALL_LIBS_DIR}\" ABSOLUTE)
-else()
- get_filename_component(_qt5_qattributionsscannertools_install_prefix \"${CMAKE_CURRENT_LIST_DIR}/$${CMAKE_RELATIVE_INSTALL_DIR}\" ABSOLUTE)
-endif()
-unset(_realOrig)
-unset(_realCurr)
-unset(_IMPORT_PREFIX)
-!!ENDIF
-!!ELIF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
-get_filename_component(_qt5_qattributionsscannertools_install_prefix \"${CMAKE_CURRENT_LIST_DIR}/$${CMAKE_RELATIVE_INSTALL_DIR}\" ABSOLUTE)
-!!ELSE
-set(_qt5_qattributionsscannertools_install_prefix \"$$[QT_INSTALL_PREFIX]\")
-!!ENDIF
-
-macro(_qt5_AttributionsScannerTools_check_file_exists file)
- if(NOT EXISTS \"${file}\" )
- message(FATAL_ERROR \"The package \\\"Qt5AttributionsScannerTools\\\" references the file
- \\\"${file}\\\"
-but this file does not exist. Possible reasons include:
-* The file was deleted, renamed, or moved to another location.
-* An install or uninstall procedure did not complete successfully.
-* The installation package was faulty and contained
- \\\"${CMAKE_CURRENT_LIST_FILE}\\\"
-but not all the files it references.
-\")
- endif()
-endmacro()
-
-if (NOT TARGET Qt5::qtattributionsscanner)
- add_executable(Qt5::qtattributionsscanner IMPORTED)
-
-!!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
- set(imported_location \"${_qt5_qattributionsscannertools_install_prefix}/$${CMAKE_BIN_DIR}qtattributionsscanner$$CMAKE_BIN_SUFFIX\")
-!!ELSE
- set(imported_location \"$${CMAKE_BIN_DIR}qtattributionsscanner$$CMAKE_BIN_SUFFIX\")
-!!ENDIF
- _qt5_AttributionsScannerTools_check_file_exists(${imported_location})
-
- set_target_properties(Qt5::qtattributionsscanner PROPERTIES
- IMPORTED_LOCATION ${imported_location}
- )
-endif()
-
-# Create versionless tool targets.
-foreach(__qt_tool qtattributionsscanner)
- if(NOT \"${QT_NO_CREATE_VERSIONLESS_TARGETS}\" AND NOT TARGET Qt::${__qt_tool}
- AND TARGET Qt5::${__qt_tool})
- add_executable(Qt::${__qt_tool} IMPORTED)
- get_target_property(__qt_imported_location Qt5::${__qt_tool} IMPORTED_LOCATION)
- set_target_properties(Qt::${__qt_tool}
- PROPERTIES IMPORTED_LOCATION \"${__qt_imported_location}\")
- endif()
-endforeach()
diff --git a/src/qtattributionsscanner/jsongenerator.cpp b/src/qtattributionsscanner/jsongenerator.cpp
index 593a65295..2a194264e 100644
--- a/src/qtattributionsscanner/jsongenerator.cpp
+++ b/src/qtattributionsscanner/jsongenerator.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "jsongenerator.h"
@@ -34,38 +9,41 @@
#include <iostream>
+using namespace Qt::Literals::StringLiterals;
+
namespace JsonGenerator {
static QJsonObject generate(Package package)
{
QJsonObject obj;
- obj.insert(QStringLiteral("Id"), package.id);
- obj.insert(QStringLiteral("Path"), package.path);
- obj.insert(QStringLiteral("Files"), package.files.join(QLatin1Char(' ')));
- obj.insert(QStringLiteral("QDocModule"), package.qdocModule);
- obj.insert(QStringLiteral("Name"), package.name);
- obj.insert(QStringLiteral("QtUsage"), package.qtUsage);
- obj.insert(QStringLiteral("QtParts"), QJsonArray::fromStringList(package.qtParts));
+ obj.insert(u"Id"_s, package.id);
+ obj.insert(u"Path"_s, package.path);
+ obj.insert(u"Files"_s, package.files.join(QLatin1Char(' ')));
+ obj.insert(u"QDocModule"_s, package.qdocModule);
+ obj.insert(u"Name"_s, package.name);
+ obj.insert(u"QtUsage"_s, package.qtUsage);
+ obj.insert(u"SecurityCritical"_s, package.securityCritical);
+ obj.insert(u"QtParts"_s, QJsonArray::fromStringList(package.qtParts));
- obj.insert(QStringLiteral("Description"), package.description);
- obj.insert(QStringLiteral("Homepage"), package.homepage);
- obj.insert(QStringLiteral("Version"), package.version);
- obj.insert(QStringLiteral("DownloadLocation"), package.downloadLocation);
+ obj.insert(u"Description"_s, package.description);
+ obj.insert(u"Homepage"_s, package.homepage);
+ obj.insert(u"Version"_s, package.version);
+ obj.insert(u"DownloadLocation"_s, package.downloadLocation);
- obj.insert(QStringLiteral("License"), package.license);
- obj.insert(QStringLiteral("LicenseId"), package.licenseId);
+ obj.insert(u"License"_s, package.license);
+ obj.insert(u"LicenseId"_s, package.licenseId);
if (package.licenseFiles.isEmpty())
- obj.insert(QStringLiteral("LicenseFile"), QString());
+ obj.insert(u"LicenseFile"_s, QString());
else if (package.licenseFiles.size() == 1)
- obj.insert(QStringLiteral("LicenseFile"), package.licenseFiles.first());
+ obj.insert(u"LicenseFile"_s, package.licenseFiles.first());
else
- obj.insert(QStringLiteral("LicenseFiles"),
+ obj.insert(u"LicenseFiles"_s,
QJsonArray::fromStringList(package.licenseFiles));
- obj.insert(QStringLiteral("Copyright"), package.copyright);
- obj.insert(QStringLiteral("CopyrightFile"), package.copyrightFile);
- obj.insert(QStringLiteral("PackageComment"), package.packageComment);
+ obj.insert(u"Copyright"_s, package.copyright);
+ obj.insert(u"CopyrightFile"_s, package.copyrightFile);
+ obj.insert(u"PackageComment"_s, package.packageComment);
return obj;
}
diff --git a/src/qtattributionsscanner/jsongenerator.h b/src/qtattributionsscanner/jsongenerator.h
index 5099822e6..06f1acd2c 100644
--- a/src/qtattributionsscanner/jsongenerator.h
+++ b/src/qtattributionsscanner/jsongenerator.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef JSONGENERATOR
#define JSONGENERATOR
diff --git a/src/qtattributionsscanner/logging.h b/src/qtattributionsscanner/logging.h
index 6810da6ca..9d61f97e6 100644
--- a/src/qtattributionsscanner/logging.h
+++ b/src/qtattributionsscanner/logging.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef LOGGING_H
#define LOGGING_H
diff --git a/src/qtattributionsscanner/main.cpp b/src/qtattributionsscanner/main.cpp
index 2684a6207..ed3ccaeeb 100644
--- a/src/qtattributionsscanner/main.cpp
+++ b/src/qtattributionsscanner/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "jsongenerator.h"
#include "logging.h"
@@ -39,55 +14,63 @@
#include <iostream>
+using namespace Qt::Literals::StringLiterals;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
- a.setApplicationName(QStringLiteral("Qt Attributions Scanner"));
- a.setApplicationVersion(QStringLiteral("1.1"));
+ a.setApplicationName(u"Qt Attributions Scanner"_s);
+ a.setApplicationVersion(u"1.3"_s);
QCommandLineParser parser;
parser.setApplicationDescription(tr("Processes attribution files in Qt sources."));
- parser.addPositionalArgument(QStringLiteral("path"),
- tr("Path to a qt_attribution.json/README.chromium file, "
- "or a directory to be scannned recursively."));
+ parser.addPositionalArgument(u"paths"_s,
+ tr("Paths to qt_attribution.json/README.chromium files, "
+ "or directories to be scannned recursively."));
parser.addHelpOption();
parser.addVersionOption();
- QCommandLineOption generatorOption(QStringLiteral("output-format"),
+ QCommandLineOption generatorOption(u"output-format"_s,
tr("Output format (\"qdoc\", \"json\")."),
- QStringLiteral("generator"),
- QStringLiteral("qdoc"));
- QCommandLineOption inputFormatOption(QStringLiteral("input-files"),
- tr("Input files (\"qt_attributions\" scans for qt_attribution.json, "
- "\"chromium_attributions\" for README.Chromium, \"all\" for both)."),
- QStringLiteral("input_format"),
- QStringLiteral("qt_attributions"));
- QCommandLineOption filterOption(QStringLiteral("filter"),
- tr("Filter packages according to <filter> (e.g. QDocModule=qtcore)"),
- QStringLiteral("expression"));
- QCommandLineOption baseDirOption(QStringLiteral("basedir"),
+ u"generator"_s, u"qdoc"_s);
+ QCommandLineOption inputFormatOption(u"input-files"_s,
+ tr("Input files (\"qt_attributions\" scans for "
+ "qt_attribution.json, \"chromium_attributions\" for "
+ "README.Chromium, \"all\" for both)."),
+ u"input_format"_s,
+ u"qt_attributions"_s);
+ QCommandLineOption filterOption(u"filter"_s,
+ tr("Filter packages according to <filter> "
+ "(e.g. QDocModule=qtcore)"),
+ u"expression"_s);
+ QCommandLineOption baseDirOption(u"basedir"_s,
tr("Paths in documentation are made relative to this "
"directory."),
- QStringLiteral("directory"));
- QCommandLineOption outputOption({ QStringLiteral("o"), QStringLiteral("output") },
+ u"directory"_s);
+ QCommandLineOption noCheckPathsOption(
+ u"no-check-paths"_s,
+ tr("Do not check whether referenced file paths exist in basedir."));
+ QCommandLineOption outputOption({ u"o"_s, u"output"_s },
tr("Write generated data to <file>."),
- QStringLiteral("file"));
- QCommandLineOption verboseOption(QStringLiteral("verbose"),
- tr("Verbose output."));
- QCommandLineOption silentOption({ QStringLiteral("s"), QStringLiteral("silent") },
- tr("Minimal output."));
+ u"file"_s);
+ QCommandLineOption verboseOption(u"verbose"_s, tr("Verbose output."));
+ QCommandLineOption silentOption({ u"s"_s, u"silent"_s }, tr("Minimal output."));
parser.addOption(generatorOption);
parser.addOption(inputFormatOption);
parser.addOption(filterOption);
parser.addOption(baseDirOption);
+ parser.addOption(noCheckPathsOption);
parser.addOption(outputOption);
parser.addOption(verboseOption);
parser.addOption(silentOption);
parser.process(a.arguments());
+ using Scanner::Checks, Scanner::Check;
+ Checks checks = Check::All;
+ checks.setFlag(Check::Paths, !parser.isSet(noCheckPathsOption));
+
LogLevel logLevel = NormalLog;
if (parser.isSet(verboseOption) && parser.isSet(silentOption)) {
std::cerr << qPrintable(tr("--verbose and --silent cannot be set simultaneously.")) << std::endl;
@@ -99,18 +82,18 @@ int main(int argc, char *argv[])
else if (parser.isSet(silentOption))
logLevel = SilentLog;
- if (parser.positionalArguments().size() != 1)
+ if (parser.positionalArguments().size() == 0)
parser.showHelp(2);
- const QString path = parser.positionalArguments().constLast();
+ const QStringList paths = parser.positionalArguments();
QString inputFormat = parser.value(inputFormatOption);
Scanner::InputFormats formats;
- if (inputFormat == QLatin1String("qt_attributions"))
+ if (inputFormat == "qt_attributions"_L1)
formats = Scanner::InputFormat::QtAttributions;
- else if (inputFormat == QLatin1String("chromium_attributions"))
+ else if (inputFormat == "chromium_attributions"_L1)
formats = Scanner::InputFormat::ChromiumAttributions;
- else if (inputFormat == QLatin1String("all"))
+ else if (inputFormat == "all"_L1)
formats = Scanner::InputFormat::QtAttributions | Scanner::InputFormat::ChromiumAttributions;
else {
std::cerr << qPrintable(tr("%1 is not a valid input-files argument").arg(inputFormat)) << std::endl << std::endl;
@@ -119,18 +102,28 @@ int main(int argc, char *argv[])
// Parse the attribution files
QList<Package> packages;
- const QFileInfo pathInfo(path);
- if (pathInfo.isDir()) {
- if (logLevel == VerboseLog)
- std::cerr << qPrintable(tr("Recursively scanning %1 for attribution files...").arg(
- QDir::toNativeSeparators(path))) << std::endl;
- packages = Scanner::scanDirectory(path, formats, logLevel);
- } else if (pathInfo.isFile()) {
- packages = Scanner::readFile(path, logLevel);
- } else {
- std::cerr << qPrintable(tr("%1 is not a valid file or directory.").arg(
- QDir::toNativeSeparators(path))) << std::endl << std::endl;
- parser.showHelp(7);
+ for (const QString &path: paths) {
+ const QFileInfo pathInfo(path);
+ if (pathInfo.isDir()) {
+ if (logLevel == VerboseLog)
+ std::cerr << qPrintable(tr("Recursively scanning %1 for attribution files...").arg(
+ QDir::toNativeSeparators(path))) << std::endl;
+ std::optional<QList<Package>> p
+ = Scanner::scanDirectory(path, formats, checks, logLevel);
+ if (!p)
+ return 1;
+ packages.append(*p);
+ } else if (pathInfo.isFile()) {
+ std::optional<QList<Package>> p = Scanner::readFile(path, checks, logLevel);
+ if (!p)
+ return 1;
+ packages.append(*p);
+
+ } else {
+ std::cerr << qPrintable(tr("%1 is not a valid file or directory.").arg(
+ QDir::toNativeSeparators(path))) << std::endl << std::endl;
+ parser.showHelp(7);
+ }
}
// Apply the filter
@@ -147,8 +140,8 @@ int main(int argc, char *argv[])
std::cerr << qPrintable(tr("%1 packages found.").arg(packages.size())) << std::endl;
// Prepare the output text stream
- QTextStream out(stdout);
QFile outFile(parser.value(outputOption));
+ QTextStream out(stdout);
if (!outFile.fileName().isEmpty()) {
if (!outFile.open(QFile::WriteOnly)) {
std::cerr << qPrintable(tr("Cannot open %1 for writing.").arg(
@@ -161,19 +154,25 @@ int main(int argc, char *argv[])
// Generate the output and write it
QString generator = parser.value(generatorOption);
- if (generator == QLatin1String("qdoc")) {
+ if (generator == "qdoc"_L1) {
QString baseDirectory = parser.value(baseDirOption);
if (baseDirectory.isEmpty()) {
+ if (paths.size() != 1) {
+ std::cerr << qPrintable(tr("baseDir option is not optional."));
+ return 1;
+ }
+
+ const QFileInfo pathInfo(paths.last());
if (pathInfo.isDir()) {
// include top level module name in printed paths
- baseDirectory = pathInfo.dir().absoluteFilePath(QStringLiteral(".."));
+ baseDirectory = pathInfo.dir().absoluteFilePath(u".."_s);
} else {
- baseDirectory = pathInfo.absoluteDir().absoluteFilePath(QStringLiteral(".."));
+ baseDirectory = pathInfo.absoluteDir().absoluteFilePath(u".."_s);
}
}
QDocGenerator::generate(out, packages, baseDirectory, logLevel);
- } else if (generator == QLatin1String("json")) {
+ } else if (generator == "json"_L1) {
JsonGenerator::generate(out, packages, logLevel);
} else {
std::cerr << qPrintable(tr("Unknown output-format %1.").arg(generator)) << std::endl;
diff --git a/src/qtattributionsscanner/package.h b/src/qtattributionsscanner/package.h
index 98f55833d..082d60f1e 100644
--- a/src/qtattributionsscanner/package.h
+++ b/src/qtattributionsscanner/package.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PACKAGE_H
#define PACKAGE_H
@@ -40,6 +15,7 @@ struct Package {
QString name; // Descriptive name of the package. Will be used as the title. Mandatory.
QString qdocModule; // QDoc module where the documentation should be included. Mandatory.
QString qtUsage; // How the package is used in Qt. Any way to disable? Mandatory.
+ bool securityCritical = false; // Whether code is security critical in the Qt module. Optional.
QStringList qtParts; // Possible values are "examples", "tests", "tools", or "libs".
// "libs" is the default.
@@ -51,9 +27,11 @@ struct Package {
QString license; // The license under which the package is distributed. Mandatory.
QString licenseId; // see https://spdx.org/licenses/. Optional.
QStringList licenseFiles; // path to files containing the license text. Optional.
+ QStringList licenseFilesContents;
QString copyright; // Text with copyright owner. Optional.
QString copyrightFile; // Path to file containing copyright owners. Optional.
+ QString copyrightFileContents;
QString packageComment; // Further comments about the package. Optional.
};
diff --git a/src/qtattributionsscanner/packagefilter.cpp b/src/qtattributionsscanner/packagefilter.cpp
index 26fdfffc0..478ed7dc7 100644
--- a/src/qtattributionsscanner/packagefilter.cpp
+++ b/src/qtattributionsscanner/packagefilter.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "logging.h"
#include "packagefilter.h"
diff --git a/src/qtattributionsscanner/packagefilter.h b/src/qtattributionsscanner/packagefilter.h
index 968449445..dfebe7db8 100644
--- a/src/qtattributionsscanner/packagefilter.h
+++ b/src/qtattributionsscanner/packagefilter.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PACKAGEFILTER_H
#define PACKAGEFILTER_H
diff --git a/src/qtattributionsscanner/qdocgenerator.cpp b/src/qtattributionsscanner/qdocgenerator.cpp
index 701aa8530..b21a06938 100644
--- a/src/qtattributionsscanner/qdocgenerator.cpp
+++ b/src/qtattributionsscanner/qdocgenerator.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qdocgenerator.h"
@@ -32,6 +7,8 @@
#include <iostream>
+using namespace Qt::Literals::StringLiterals;
+
namespace QDocGenerator {
// See definition of idstring and licenseid in https://spdx.org/spdx-specification-21-web-version
@@ -53,32 +30,43 @@ static QString languageJoin(const QStringList &list)
{
QString result;
for (int i = 0; i < list.size(); ++i) {
- QString delimiter = QStringLiteral(", ");
+ QString delimiter = u", "_s;
if (i == list.size() - 1) // last item
delimiter.clear();
else if (list.size() == 2)
- delimiter = QStringLiteral(" and ");
+ delimiter = u" and "_s;
else if (list.size() > 2 && i == list.size() - 2)
- delimiter = QStringLiteral(", and "); // oxford comma
+ delimiter = u", and "_s; // oxford comma
result += list[i] + delimiter;
}
return result;
}
-static void generate(QTextStream &out, const Package &package, const QDir &baseDir,
- LogLevel logLevel)
+// Embed source code between \badcode ... \endbadcode
+// Also, avoid '*/' breaking qdoc by passing the star as argument
+static void sourceCode(QTextStream &out, const QString &src)
+{
+ out << "\\badcode *\n";
+ out << QString(src).replace(u"*/"_s, u"\\1/"_s);
+ out << "\n\\endcode\n\n";
+}
+
+static void generate(QTextStream &out, const Package &package, const QDir &baseDir)
{
out << "/*!\n\n";
- for (const QString &part: package.qtParts)
+ for (const QString &part : package.qtParts) {
+ out << "\\ingroup attributions-" << package.qdocModule << "-" << part << "\n";
out << "\\ingroup attributions-" << part << "\n";
+ }
- if (package.qtParts.contains(QLatin1String("libs"))) {
+ if (package.qtParts.contains("libs"_L1)) {
// show up in xxx-index.html page of module
out << "\\ingroup attributions-" << package.qdocModule << "\n";
// include in '\generatelist annotatedattributions'
out << "\\page " << package.qdocModule << "-attribution-" << package.id
- << ".html attribution\n";
+ << ".html\n";
+ out << "\\attribution\n";
} else {
out << "\\page " << package.qdocModule << "-attribution-" << package.id
<< ".html \n";
@@ -130,49 +118,28 @@ static void generate(QTextStream &out, const Package &package, const QDir &baseD
QString copyright;
if (!package.copyright.isEmpty())
copyright = package.copyright;
+ else if (!package.copyrightFileContents.isEmpty())
+ copyright = package.copyrightFileContents;
- if (!package.copyrightFile.isEmpty()) {
- const QDir packageDir(package.path);
- QFile file(QDir(package.path).absoluteFilePath(package.copyrightFile));
- if (!file.open(QIODevice::ReadOnly)) {
- if (logLevel != SilentLog) {
- std::cerr << qPrintable(
- tr("Path %1 : cannot open copyright file %2.\n")
- .arg(QDir::toNativeSeparators(package.path))
- .arg(QDir::toNativeSeparators(package.copyrightFile)));
- copyright = QString::fromUtf8(file.readAll());
- }
- }
+ if (!copyright.isEmpty()) {
+ out << "\n";
+ sourceCode(out, copyright);
}
- if (!copyright.isEmpty())
- out << "\n\\badcode\n" << copyright << "\n\\endcode\n\n";
-
- if (isSpdxLicenseId(package.licenseId) && package.licenseId != QLatin1String("NONE")) {
+ if (isSpdxLicenseId(package.licenseId) && !package.licenseId.startsWith("LicenseRef-"_L1)
+ && package.licenseId != "NONE"_L1) {
out << "\\l{https://spdx.org/licenses/" << package.licenseId << ".html}"
<< "{" << package.license << "}.\n\n";
- } else if (package.licenseId.startsWith(QLatin1String("urn:dje:license:"))) {
+ } else if (package.licenseId.startsWith("urn:dje:license:"_L1)) {
out << "\\l{https://enterprise.dejacode.com/licenses/public/" << package.licenseId.mid(16)
<< "/}{" << package.license << "}.\n\n";
} else {
out << package.license << ".\n\n";
}
- foreach (const QString &licenseFile, package.licenseFiles) {
- QFile file(licenseFile);
- if (!file.open(QIODevice::ReadOnly)) {
- if (logLevel != SilentLog) {
- std::cerr << qPrintable(tr("Path %1 : cannot open license file %2.\n")
- .arg(QDir::toNativeSeparators(package.path))
- .arg(QDir::toNativeSeparators(licenseFile)));
- out << "*/\n";
- }
- return;
- }
- out << "\\badcode\n";
- out << QString::fromUtf8(file.readAll()).trimmed();
- out << "\n\\endcode\n\n";
- }
+ for (const QString &license : package.licenseFilesContents)
+ sourceCode(out, license);
+
out << "*/\n";
}
@@ -184,7 +151,7 @@ void generate(QTextStream &out, const QList<Package> &packages, const QString &b
QDir baseDir(baseDirectory);
for (const Package &package : packages)
- generate(out, package, baseDir, logLevel);
+ generate(out, package, baseDir);
}
} // namespace QDocGenerator
diff --git a/src/qtattributionsscanner/qdocgenerator.h b/src/qtattributionsscanner/qdocgenerator.h
index 826f01e01..268ab9752 100644
--- a/src/qtattributionsscanner/qdocgenerator.h
+++ b/src/qtattributionsscanner/qdocgenerator.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QDOCGENERATOR_H
#define QDOCGENERATOR_H
diff --git a/src/qtattributionsscanner/qtattributionsscanner.pro b/src/qtattributionsscanner/qtattributionsscanner.pro
deleted file mode 100644
index 5a5355276..000000000
--- a/src/qtattributionsscanner/qtattributionsscanner.pro
+++ /dev/null
@@ -1,63 +0,0 @@
-include($$OUT_PWD/../../src/global/qttools-config.pri)
-QT_FOR_CONFIG += tools-private
-requires(qtConfig(qtattributionsscanner))
-
-option(host_build)
-CONFIG += console
-
-SOURCES += \
- jsongenerator.cpp \
- main.cpp \
- packagefilter.cpp \
- qdocgenerator.cpp \
- scanner.cpp
-
-HEADERS += \
- jsongenerator.h \
- logging.h \
- package.h \
- packagefilter.h \
- qdocgenerator.h \
- scanner.h
-
-DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII
-
-QMAKE_TARGET_DESCRIPTION = "Qt Source Code Attribution Scanner"
-load(qt_tool)
-
-load(cmake_functions)
-
-CMAKE_INSTALL_LIBS_DIR = $$cmakeTargetPath($$[QT_INSTALL_LIBS])
-contains(CMAKE_INSTALL_LIBS_DIR, ^(/usr)?/lib(64)?.*): CMAKE_USR_MOVE_WORKAROUND = $$CMAKE_INSTALL_LIBS_DIR
-
-CMAKE_LIB_DIR = $$cmakeRelativePath($$[QT_INSTALL_LIBS], $$[QT_INSTALL_PREFIX])
-!contains(CMAKE_LIB_DIR,"^\\.\\./.*") {
- CMAKE_RELATIVE_INSTALL_LIBS_DIR = $$cmakeRelativePath($$[QT_INSTALL_PREFIX], $$[QT_INSTALL_LIBS])
- # We need to go up another two levels because the CMake files are
- # installed in $${CMAKE_LIB_DIR}/cmake/Qt5$${CMAKE_MODULE_NAME}
- CMAKE_RELATIVE_INSTALL_DIR = "$${CMAKE_RELATIVE_INSTALL_LIBS_DIR}../../"
-} else {
- CMAKE_LIB_DIR_IS_ABSOLUTE = True
-}
-
-CMAKE_BIN_DIR = $$cmakeRelativePath($$[QT_HOST_BINS], $$[QT_INSTALL_PREFIX])
-contains(CMAKE_BIN_DIR, "^\\.\\./.*") {
- CMAKE_BIN_DIR = $$[QT_HOST_BINS]/
- CMAKE_BIN_DIR_IS_ABSOLUTE = True
-}
-
-load(qt_build_paths)
-
-equals(QMAKE_HOST.os, Windows): CMAKE_BIN_SUFFIX = ".exe"
-
-cmake_qattributionsscanner_config_file.input = $$PWD/Qt5AttributionsScannerTools.cmake.in
-cmake_qattributionsscanner_config_version_file.input = $$[QT_HOST_DATA/src]/mkspecs/features/data/cmake/Qt5ConfigVersion.cmake.in
-CMAKE_PACKAGE_VERSION = $$MODULE_VERSION
-cmake_qattributionsscanner_config_file.output = $$MODULE_BASE_OUTDIR/lib/cmake/Qt5AttributionsScannerTools/Qt5AttributionsScannerToolsConfig.cmake
-cmake_qattributionsscanner_config_version_file.output = $$MODULE_BASE_OUTDIR/lib/cmake/Qt5AttributionsScannerTools/Qt5AttributionsScannerToolsConfigVersion.cmake
-QMAKE_SUBSTITUTES += cmake_qattributionsscanner_config_file cmake_qattributionsscanner_config_version_file
-
-cmake_qattributionsscanner_tools_files.files += $$cmake_qattributionsscanner_config_file.output $$cmake_qattributionsscanner_config_version_file.output
-cmake_qattributionsscanner_tools_files.path = $$[QT_INSTALL_LIBS]/cmake/Qt5AttributionsScannerTools
-cmake_qattributionsscanner_tools_files.CONFIG = no_check_exist
-INSTALLS += cmake_qattributionsscanner_tools_files
diff --git a/src/qtattributionsscanner/scanner.cpp b/src/qtattributionsscanner/scanner.cpp
index 06abc2310..879ce7c80 100644
--- a/src/qtattributionsscanner/scanner.cpp
+++ b/src/qtattributionsscanner/scanner.cpp
@@ -1,35 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "scanner.h"
#include "logging.h"
#include <QtCore/qdir.h>
+#include <QtCore/qhash.h>
#include <QtCore/qjsonarray.h>
#include <QtCore/qjsondocument.h>
#include <QtCore/qjsonobject.h>
@@ -37,7 +13,8 @@
#include <QtCore/qvariant.h>
#include <iostream>
-#include <optional>
+
+using namespace Qt::Literals::StringLiterals;
namespace Scanner {
@@ -47,45 +24,91 @@ static void missingPropertyWarning(const QString &filePath, const QString &prope
QDir::toNativeSeparators(filePath), property)) << std::endl;
}
-static void validatePackage(Package &p, const QString &filePath, LogLevel logLevel)
+static bool validatePackage(Package &p, const QString &filePath, Checks checks, LogLevel logLevel)
{
+ bool validPackage = true;
+
if (p.qtParts.isEmpty())
- p.qtParts << QStringLiteral("libs");
+ p.qtParts << u"libs"_s;
- if (logLevel != SilentLog) {
- if (p.name.isEmpty()) {
- if (p.id.startsWith(QLatin1String("chromium-"))) // Ignore invalid README.chromium files
- return;
+ if (p.name.isEmpty()) {
+ if (p.id.startsWith("chromium-"_L1)) // Ignore invalid README.chromium files
+ return false;
- missingPropertyWarning(filePath, QStringLiteral("Name"));
- }
+ if (logLevel != SilentLog)
+ missingPropertyWarning(filePath, u"Name"_s);
+ validPackage = false;
+ }
- if (p.id.isEmpty())
- missingPropertyWarning(filePath, QStringLiteral("Id"));
- if (p.license.isEmpty())
- missingPropertyWarning(filePath, QStringLiteral("License"));
+ if (p.id.isEmpty()) {
+ if (logLevel != SilentLog)
+ missingPropertyWarning(filePath, u"Id"_s);
+ validPackage = false;
+ }
+ if (p.license.isEmpty()) {
+ if (logLevel != SilentLog)
+ missingPropertyWarning(filePath, u"License"_s);
+ validPackage = false;
+ }
- if (!p.copyright.isEmpty() && !p.copyrightFile.isEmpty()) {
+ if (!p.copyright.isEmpty() && !p.copyrightFile.isEmpty()) {
+ if (logLevel != SilentLog) {
std::cerr << qPrintable(tr("File %1: Properties 'Copyright' and 'CopyrightFile' are "
"mutually exclusive.")
.arg(QDir::toNativeSeparators(filePath)))
<< std::endl;
}
+ validPackage = false;
+ }
- for (const QString &part : qAsConst(p.qtParts)) {
- if (part != QLatin1String("examples")
- && part != QLatin1String("tests")
- && part != QLatin1String("tools")
- && part != QLatin1String("libs")
- && logLevel != SilentLog) {
+ if (p.securityCritical && p.downloadLocation.isEmpty()) {
+ if (logLevel != SilentLog)
+ missingPropertyWarning(filePath, u"DownloadLocation"_s);
+ validPackage = false;
+ }
+
+ for (const QString &part : std::as_const(p.qtParts)) {
+ if (part != "examples"_L1 && part != "tests"_L1
+ && part != "tools"_L1 && part != "libs"_L1) {
+
+ if (logLevel != SilentLog) {
std::cerr << qPrintable(tr("File %1: Property 'QtPart' contains unknown element "
"'%2'. Valid entries are 'examples', 'tests', 'tools' "
"and 'libs'.").arg(
QDir::toNativeSeparators(filePath), part))
<< std::endl;
}
+ validPackage = false;
}
}
+
+ if (!(checks & Check::Paths))
+ return validPackage;
+
+ const QDir dir = p.path;
+ if (!dir.exists()) {
+ std::cerr << qPrintable(
+ tr("File %1: Directory '%2' does not exist.")
+ .arg(QDir::toNativeSeparators(filePath), QDir::toNativeSeparators(p.path)))
+ << std::endl;
+ validPackage = false;
+ } else {
+ for (const QString &file : std::as_const(p.files)) {
+ if (!dir.exists(file)) {
+ if (logLevel != SilentLog) {
+ std::cerr << qPrintable(
+ tr("File %1: Path '%2' does not exist in directory '%3'.")
+ .arg(QDir::toNativeSeparators(filePath),
+ QDir::toNativeSeparators(file),
+ QDir::toNativeSeparators(p.path)))
+ << std::endl;
+ }
+ validPackage = false;
+ }
+ }
+ }
+
+ return validPackage;
}
static std::optional<QStringList> toStringList(const QJsonValue &value)
@@ -93,7 +116,7 @@ static std::optional<QStringList> toStringList(const QJsonValue &value)
if (!value.isArray())
return std::nullopt;
QStringList result;
- for (auto iter : value.toArray()) {
+ for (const auto &iter : value.toArray()) {
if (iter.type() != QJsonValue::String)
return std::nullopt;
result.push_back(iter.toString());
@@ -101,80 +124,257 @@ static std::optional<QStringList> toStringList(const QJsonValue &value)
return result;
}
+static std::optional<QString> arrayToMultiLineString(const QJsonValue &value)
+{
+ if (!value.isArray())
+ return std::nullopt;
+ QString result;
+ for (const auto &iter : value.toArray()) {
+ if (iter.type() != QJsonValue::String)
+ return std::nullopt;
+ result.append(iter.toString());
+ result.append(QLatin1StringView("\n"));
+ }
+ return result;
+}
+
+// Extracts SPDX license ids from a SPDX license expression.
+// For "(BSD-3-Clause AND BeerWare)" this function returns { "BSD-3-Clause", "BeerWare" }.
+static QStringList extractLicenseIdsFromSPDXExpression(QString expression)
+{
+ const QStringList spdxOperators = {
+ u"AND"_s,
+ u"OR"_s,
+ u"WITH"_s
+ };
+
+ // Replace parentheses with spaces. We're not interested in grouping.
+ const QRegularExpression parensRegex(u"[()]"_s);
+ expression.replace(parensRegex, u" "_s);
+
+ // Split the string at space boundaries to extract tokens.
+ QStringList result;
+ for (const QString &token : expression.split(QLatin1Char(' '), Qt::SkipEmptyParts)) {
+ if (spdxOperators.contains(token))
+ continue;
+
+ // Remove the unary + operator, if present.
+ if (token.endsWith(QLatin1Char('+')))
+ result.append(token.mid(0, token.size() - 1));
+ else
+ result.append(token);
+ }
+ return result;
+}
+
+// Starting at packageDir, look for a LICENSES subdirectory in the directory hierarchy upwards.
+// Return a default-constructed QString if the directory was not found.
+static QString locateLicensesDir(const QString &packageDir)
+{
+ static const QString licensesSubDir = u"LICENSES"_s;
+ QDir dir(packageDir);
+ while (true) {
+ if (!dir.exists())
+ break;
+ if (dir.cd(licensesSubDir))
+ return dir.path();
+ if (dir.isRoot() || !dir.cdUp())
+ break;
+ }
+ return {};
+}
+
+// Locates the license files that belong to the licenses mentioned in LicenseId and stores them in
+// the specified package object.
+static bool autoDetectLicenseFiles(Package &p)
+{
+ const QString licensesDirPath = locateLicensesDir(p.path);
+ const QStringList licenseIds = extractLicenseIdsFromSPDXExpression(p.licenseId);
+ if (!licenseIds.isEmpty() && licensesDirPath.isEmpty()) {
+ std::cerr << qPrintable(tr("LICENSES directory could not be located.")) << std::endl;
+ return false;
+ }
+
+ bool success = true;
+ QDir licensesDir(licensesDirPath);
+ for (const QString &id : licenseIds) {
+ QString fileName = id + u".txt";
+ if (licensesDir.exists(fileName)) {
+ p.licenseFiles.append(licensesDir.filePath(fileName));
+ } else {
+ std::cerr << qPrintable(tr("Expected license file not found: %1").arg(
+ QDir::toNativeSeparators(licensesDir.filePath(fileName))))
+ << std::endl;
+ success = false;
+ }
+ }
+
+ return success;
+}
+
// Transforms a JSON object into a Package object
-static Package readPackage(const QJsonObject &object, const QString &filePath, LogLevel logLevel)
+static std::optional<Package> readPackage(const QJsonObject &object, const QString &filePath,
+ Checks checks, LogLevel logLevel)
{
Package p;
+ bool validPackage = true;
const QString directory = QFileInfo(filePath).absolutePath();
p.path = directory;
for (auto iter = object.constBegin(); iter != object.constEnd(); ++iter) {
const QString key = iter.key();
- if (!iter.value().isString() && key != QLatin1String("QtParts")
- && key != QLatin1String("LicenseFiles")) {
+ if (!iter.value().isString() && key != "QtParts"_L1 && key != "SecurityCritical"_L1
+ && key != "Files"_L1 && key != "LicenseFiles"_L1 && key != "Comment"_L1
+ && key != "Copyright"_L1) {
if (logLevel != SilentLog)
std::cerr << qPrintable(tr("File %1: Expected JSON string as value of %2.").arg(
QDir::toNativeSeparators(filePath), key)) << std::endl;
+ validPackage = false;
continue;
}
const QString value = iter.value().toString();
- if (key == QLatin1String("Name")) {
+ if (key == "Name"_L1) {
p.name = value;
- } else if (key == QLatin1String("Path")) {
+ } else if (key == "Path"_L1) {
p.path = QDir(directory).absoluteFilePath(value);
- } else if (key == QLatin1String("Files")) {
- p.files = value.simplified().split(QLatin1Char(' '), Qt::SkipEmptyParts);
- } else if (key == QLatin1String("Id")) {
+ } else if (key == "Files"_L1) {
+ QJsonValueConstRef jsonValue = iter.value();
+ if (jsonValue.isArray()) {
+ auto maybeStringList = toStringList(jsonValue);
+ if (maybeStringList)
+ p.files = maybeStringList.value();
+ } else if (jsonValue.isString()) {
+ // Legacy format: multiple values separated by space in one string.
+ p.files = value.simplified().split(QLatin1Char(' '), Qt::SkipEmptyParts);
+ } else {
+ if (logLevel != SilentLog) {
+ std::cerr << qPrintable(tr("File %1: Expected JSON array of strings as value "
+ "of Files."));
+ validPackage = false;
+ continue;
+ }
+ }
+ } else if (key == "Comment"_L1) {
+ // Accepted purely to record details of potential interest doing
+ // updates in future. Value is an arbitrary object. Any number of
+ // Comment entries may be present: JSON doesn't require names to be
+ // unique, albeit some linters may kvetch.
+ } else if (key == "Id"_L1) {
p.id = value;
- } else if (key == QLatin1String("Homepage")) {
+ } else if (key == "Homepage"_L1) {
p.homepage = value;
- } else if (key == QLatin1String("Version")) {
+ } else if (key == "Version"_L1) {
p.version = value;
- } else if (key == QLatin1String("DownloadLocation")) {
+ } else if (key == "DownloadLocation"_L1) {
p.downloadLocation = value;
- } else if (key == QLatin1String("License")) {
+ } else if (key == "License"_L1) {
p.license = value;
- } else if (key == QLatin1String("LicenseId")) {
+ } else if (key == "LicenseId"_L1) {
p.licenseId = value;
- } else if (key == QLatin1String("LicenseFile")) {
+ } else if (key == "LicenseFile"_L1) {
p.licenseFiles = QStringList(QDir(directory).absoluteFilePath(value));
- } else if (key == QLatin1String("LicenseFiles")) {
+ } else if (key == "LicenseFiles"_L1) {
auto strings = toStringList(iter.value());
- if (!strings && (logLevel != SilentLog))
- std::cerr << qPrintable(tr("File %1: Expected JSON array of strings in %2.")
- .arg(QDir::toNativeSeparators(filePath), key))
- << std::endl;
+ if (!strings) {
+ if (logLevel != SilentLog)
+ std::cerr << qPrintable(tr("File %1: Expected JSON array of strings in %2.")
+ .arg(QDir::toNativeSeparators(filePath), key))
+ << std::endl;
+ validPackage = false;
+ continue;
+ }
const QDir dir(directory);
- for (auto iter : strings.value())
+ for (const auto &iter : std::as_const(strings.value()))
p.licenseFiles.push_back(dir.absoluteFilePath(iter));
- } else if (key == QLatin1String("Copyright")) {
- p.copyright = value;
- } else if (key == QLatin1String("CopyrightFile")) {
+ } else if (key == "Copyright"_L1) {
+ QJsonValueConstRef jsonValue = iter.value();
+ if (jsonValue.isArray()) {
+ // Array joined with new lines
+ auto maybeString = arrayToMultiLineString(jsonValue);
+ if (maybeString)
+ p.copyright = maybeString.value();
+ } else if (jsonValue.isString()) {
+ // Legacy format: multiple values separated by space in one string.
+ p.copyright = value;
+ } else {
+ if (logLevel != SilentLog) {
+ std::cerr << qPrintable(tr("File %1: Expected JSON array of string or"
+ "string as value of %2.").arg(
+ QDir::toNativeSeparators(filePath), key)) << std::endl;
+ validPackage = false;
+ continue;
+ }
+ }
+ } else if (key == "CopyrightFile"_L1) {
p.copyrightFile = QDir(directory).absoluteFilePath(value);
- } else if (key == QLatin1String("PackageComment")) {
+ } else if (key == "PackageComment"_L1) {
p.packageComment = value;
- } else if (key == QLatin1String("QDocModule")) {
+ } else if (key == "QDocModule"_L1) {
p.qdocModule = value;
- } else if (key == QLatin1String("Description")) {
+ } else if (key == "Description"_L1) {
p.description = value;
- } else if (key == QLatin1String("QtUsage")) {
+ } else if (key == "QtUsage"_L1) {
p.qtUsage = value;
- } else if (key == QLatin1String("QtParts")) {
- auto parts = toStringList(iter.value());
- if (!parts && (logLevel != SilentLog))
- std::cerr << qPrintable(tr("File %1: Expected JSON array of strings in %2.")
+ } else if (key == "SecurityCritical"_L1) {
+ if (!iter.value().isBool()) {
+ std::cerr << qPrintable(tr("File %1: Expected JSON boolean in %2.")
.arg(QDir::toNativeSeparators(filePath), key))
<< std::endl;
+ validPackage = false;
+ continue;
+ }
+ p.securityCritical = iter.value().toBool();
+ } else if (key == "QtParts"_L1) {
+ auto parts = toStringList(iter.value());
+ if (!parts) {
+ if (logLevel != SilentLog) {
+ std::cerr << qPrintable(tr("File %1: Expected JSON array of strings in %2.")
+ .arg(QDir::toNativeSeparators(filePath), key))
+ << std::endl;
+ }
+ validPackage = false;
+ continue;
+ }
p.qtParts = parts.value();
} else {
- if (logLevel != SilentLog)
+ if (logLevel != SilentLog) {
std::cerr << qPrintable(tr("File %1: Unknown key %2.").arg(
QDir::toNativeSeparators(filePath), key)) << std::endl;
+ }
+ validPackage = false;
+ }
+ }
+
+ if (!p.copyrightFile.isEmpty()) {
+ QFile file(p.copyrightFile);
+ if (!file.open(QIODevice::ReadOnly)) {
+ std::cerr << qPrintable(tr("File %1: Cannot open 'CopyrightFile' %2.\n")
+ .arg(QDir::toNativeSeparators(filePath),
+ QDir::toNativeSeparators(p.copyrightFile)));
+ validPackage = false;
+ }
+ p.copyrightFileContents = QString::fromUtf8(file.readAll());
+ }
+
+ if (p.licenseFiles.isEmpty() && !autoDetectLicenseFiles(p))
+ return std::nullopt;
+
+ for (const QString &licenseFile : std::as_const(p.licenseFiles)) {
+ QFile file(licenseFile);
+ if (!file.open(QIODevice::ReadOnly)) {
+ if (logLevel != SilentLog) {
+ std::cerr << qPrintable(tr("File %1: Cannot open 'LicenseFile' %2.\n")
+ .arg(QDir::toNativeSeparators(filePath),
+ QDir::toNativeSeparators(licenseFile)));
+ }
+ validPackage = false;
}
+ p.licenseFilesContents << QString::fromUtf8(file.readAll()).trimmed();
}
- validatePackage(p, filePath, logLevel);
+ if (!validatePackage(p, filePath, checks, logLevel) || !validPackage)
+ return std::nullopt;
return p;
}
@@ -190,9 +390,9 @@ static Package parseChromiumFile(QFile &file, const QString &filePath, LogLevel
QTextStream in(&file);
while (!in.atEnd()) {
QString line = in.readLine().trimmed();
- QStringList parts = line.split(QStringLiteral(":"));
+ QStringList parts = line.split(u":"_s);
- if (parts.count() < 2)
+ if (parts.size() < 2)
continue;
QString key = parts.at(0);
@@ -201,14 +401,14 @@ static Package parseChromiumFile(QFile &file, const QString &filePath, LogLevel
fields[key] = value;
- if (line == QLatin1String("Description:")) { // special field : should handle multi-lines values
+ if (line == "Description:"_L1) { // special field : should handle multi-lines values
while (!in.atEnd()) {
QString line = in.readLine().trimmed();
- if (line.startsWith(QLatin1String("Local Modifications:"))) // Don't include this part
+ if (line.startsWith("Local Modifications:"_L1)) // Don't include this part
break;
- fields[key] += line + QStringLiteral("\n");
+ fields[key] += line + u"\n"_s;
}
break;
@@ -218,30 +418,30 @@ static Package parseChromiumFile(QFile &file, const QString &filePath, LogLevel
// Construct the Package object
Package p;
- QString shortName = fields.contains(QLatin1String("Short Name"))
- ? fields[QLatin1String("Short Name")]
- : fields[QLatin1String("Name")];
- QString version = fields[QStringLiteral("Version")];
+ QString shortName = fields.contains("Short Name"_L1)
+ ? fields["Short Name"_L1]
+ : fields["Name"_L1];
+ QString version = fields[u"Version"_s];
- p.id = QStringLiteral("chromium-") + shortName.toLower().replace(QChar::Space, QStringLiteral("-"));
- p.name = fields[QStringLiteral("Name")];
+ p.id = u"chromium-"_s + shortName.toLower().replace(QChar::Space, u"-"_s);
+ p.name = fields[u"Name"_s];
if (version != QLatin1Char('0')) // "0" : not applicable
p.version = version;
- p.license = fields[QStringLiteral("License")];
- p.homepage = fields[QStringLiteral("URL")];
- p.qdocModule = QStringLiteral("qtwebengine");
- p.qtUsage = QStringLiteral("Used in Qt WebEngine");
- p.description = fields[QStringLiteral("Description")].trimmed();
+ p.license = fields[u"License"_s];
+ p.homepage = fields[u"URL"_s];
+ p.qdocModule = u"qtwebengine"_s;
+ p.qtUsage = u"Used in Qt WebEngine"_s;
+ p.description = fields[u"Description"_s].trimmed();
p.path = directory;
- QString licenseFile = fields[QStringLiteral("License File")];
- if (licenseFile != QString() && licenseFile != QLatin1String("NOT_SHIPPED")) {
+ QString licenseFile = fields[u"License File"_s];
+ if (licenseFile != QString() && licenseFile != "NOT_SHIPPED"_L1) {
p.licenseFiles = QStringList(QDir(directory).absoluteFilePath(licenseFile));
} else {
// Look for a LICENSE or COPYING file as a fallback
QDir dir = directory;
- dir.setNameFilters({ QStringLiteral("LICENSE"), QStringLiteral("COPYING") });
+ dir.setNameFilters({ u"LICENSE"_s, u"COPYING"_s });
dir.setFilter(QDir::Files | QDir::NoDotAndDotDot);
const QFileInfoList entries = dir.entryInfoList();
@@ -249,14 +449,16 @@ static Package parseChromiumFile(QFile &file, const QString &filePath, LogLevel
p.licenseFiles = QStringList(entries.at(0).absoluteFilePath());
}
- validatePackage(p, filePath, logLevel);
+ // let's ignore warnings regarding Chromium files for now
+ Q_UNUSED(validatePackage(p, filePath, {}, logLevel));
return p;
}
-QList<Package> readFile(const QString &filePath, LogLevel logLevel)
+std::optional<QList<Package>> readFile(const QString &filePath, Checks checks, LogLevel logLevel)
{
QList<Package> packages;
+ bool errorsFound = false;
if (logLevel == VerboseLog) {
std::cerr << qPrintable(tr("Reading file %1...").arg(
@@ -267,10 +469,10 @@ QList<Package> readFile(const QString &filePath, LogLevel logLevel)
if (logLevel != SilentLog)
std::cerr << qPrintable(tr("Could not open file %1.").arg(
QDir::toNativeSeparators(file.fileName()))) << std::endl;
- return QList<Package>();
+ return std::nullopt;
}
- if (filePath.endsWith(QLatin1String(".json"))) {
+ if (filePath.endsWith(".json"_L1)) {
QJsonParseError jsonParseError;
const QJsonDocument document = QJsonDocument::fromJson(file.readAll(), &jsonParseError);
if (document.isNull()) {
@@ -279,58 +481,77 @@ QList<Package> readFile(const QString &filePath, LogLevel logLevel)
QDir::toNativeSeparators(file.fileName()),
jsonParseError.errorString()))
<< std::endl;
- return QList<Package>();
+ return std::nullopt;
}
if (document.isObject()) {
- packages << readPackage(document.object(), file.fileName(), logLevel);
+ std::optional<Package> p =
+ readPackage(document.object(), file.fileName(), checks, logLevel);
+ if (p) {
+ packages << *p;
+ } else {
+ errorsFound = true;
+ }
} else if (document.isArray()) {
QJsonArray array = document.array();
for (int i = 0, size = array.size(); i < size; ++i) {
QJsonValue value = array.at(i);
if (value.isObject()) {
- packages << readPackage(value.toObject(), file.fileName(), logLevel);
+ std::optional<Package> p =
+ readPackage(value.toObject(), file.fileName(), checks, logLevel);
+ if (p) {
+ packages << *p;
+ } else {
+ errorsFound = true;
+ }
} else {
- if (logLevel != SilentLog)
+ if (logLevel != SilentLog) {
std::cerr << qPrintable(tr("File %1: Expecting JSON object in array.")
.arg(QDir::toNativeSeparators(file.fileName())))
<< std::endl;
+ }
+ errorsFound = true;
}
}
} else {
- if (logLevel != SilentLog)
+ if (logLevel != SilentLog) {
std::cerr << qPrintable(tr("File %1: Expecting JSON object in array.").arg(
QDir::toNativeSeparators(file.fileName()))) << std::endl;
+ }
+ errorsFound = true;
}
- } else if (filePath.endsWith(QLatin1String(".chromium"))) {
+ } else if (filePath.endsWith(".chromium"_L1)) {
Package chromiumPackage = parseChromiumFile(file, filePath, logLevel);
if (!chromiumPackage.name.isEmpty()) // Skip invalid README.chromium files
packages << chromiumPackage;
} else {
- if (logLevel != SilentLog)
+ if (logLevel != SilentLog) {
std::cerr << qPrintable(tr("File %1: Unsupported file type.")
.arg(QDir::toNativeSeparators(file.fileName())))
<< std::endl;
+ }
+ errorsFound = true;
}
+ if (errorsFound)
+ return std::nullopt;
return packages;
}
-QList<Package> scanDirectory(const QString &directory, InputFormats inputFormats, LogLevel logLevel)
+std::optional<QList<Package>> scanDirectory(const QString &directory, InputFormats inputFormats,
+ Checks checks, LogLevel logLevel)
{
QDir dir(directory);
QList<Package> packages;
+ bool errorsFound = false;
QStringList nameFilters = QStringList();
if (inputFormats & InputFormat::QtAttributions)
- nameFilters << QStringLiteral("qt_attribution.json");
+ nameFilters << u"qt_attribution.json"_s;
if (inputFormats & InputFormat::ChromiumAttributions)
- nameFilters << QStringLiteral("README.chromium");
- if (qEnvironmentVariableIsSet("QT_ATTRIBUTIONSSCANNER_TEST")) {
- nameFilters
- << QStringLiteral("qt_attribution_test.json")
- << QStringLiteral("README_test.chromium");
- }
+ nameFilters << u"README.chromium"_s;
+ if (qEnvironmentVariableIsSet("QT_ATTRIBUTIONSSCANNER_TEST"))
+ nameFilters << u"qt_attribution_test.json"_s << u"README_test.chromium"_s;
dir.setNameFilters(nameFilters);
dir.setFilter(QDir::AllDirs | QDir::NoDotAndDotDot | QDir::Files);
@@ -338,12 +559,23 @@ QList<Package> scanDirectory(const QString &directory, InputFormats inputFormats
const QFileInfoList entries = dir.entryInfoList();
for (const QFileInfo &info : entries) {
if (info.isDir()) {
- packages += scanDirectory(info.filePath(), inputFormats, logLevel);
+ std::optional<QList<Package>> ps =
+ scanDirectory(info.filePath(), inputFormats, checks, logLevel);
+ if (!ps)
+ errorsFound = true;
+ else
+ packages += *ps;
} else {
- packages += readFile(info.filePath(), logLevel);
+ std::optional p = readFile(info.filePath(), checks, logLevel);
+ if (!p)
+ errorsFound = true;
+ else
+ packages += *p;
}
}
+ if (errorsFound)
+ return std::nullopt;
return packages;
}
diff --git a/src/qtattributionsscanner/scanner.h b/src/qtattributionsscanner/scanner.h
index e681c9891..01c9a8b61 100644
--- a/src/qtattributionsscanner/scanner.h
+++ b/src/qtattributionsscanner/scanner.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef SCANNER_H
#define SCANNER_H
@@ -35,6 +10,8 @@
#include <QtCore/qstring.h>
#include <QtCore/qlist.h>
+#include <optional>
+
namespace Scanner {
enum class InputFormat {
@@ -44,9 +21,13 @@ enum class InputFormat {
Q_DECLARE_FLAGS(InputFormats, InputFormat)
Q_DECLARE_OPERATORS_FOR_FLAGS(InputFormats)
-QList<Package> readFile(const QString &filePath, LogLevel logLevel);
-QList<Package> scanDirectory(const QString &directory, InputFormats inputFormats, LogLevel logLevel);
+enum class Check { Paths = 0x1, All = Paths };
+Q_DECLARE_FLAGS(Checks, Check)
+Q_DECLARE_OPERATORS_FOR_FLAGS(Checks)
+std::optional<QList<Package>> readFile(const QString &filePath, Checks checks, LogLevel logLevel);
+std::optional<QList<Package>> scanDirectory(const QString &directory, InputFormats inputFormats,
+ Checks checks, LogLevel logLevel);
}
#endif // SCANNER_H
diff --git a/src/qtconcurrent/codegenerator/codegenerator.pri b/src/qtconcurrent/codegenerator/codegenerator.pri
deleted file mode 100644
index 1ffe5bf8d..000000000
--- a/src/qtconcurrent/codegenerator/codegenerator.pri
+++ /dev/null
@@ -1,4 +0,0 @@
-SOURCES += $$PWD/src/codegenerator.cpp
-HEADERS += $$PWD/src/codegenerator.h
-INCLUDEPATH += $$PWD/src
-
diff --git a/src/qtconcurrent/codegenerator/example/example.pro b/src/qtconcurrent/codegenerator/example/example.pro
deleted file mode 100644
index 502e5b233..000000000
--- a/src/qtconcurrent/codegenerator/example/example.pro
+++ /dev/null
@@ -1,3 +0,0 @@
-include (../codegenerator.pri)
-
-SOURCES += main.cpp
diff --git a/src/qtconcurrent/codegenerator/example/main.cpp b/src/qtconcurrent/codegenerator/example/main.cpp
deleted file mode 100644
index 2b7d4b1d4..000000000
--- a/src/qtconcurrent/codegenerator/example/main.cpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include <QDebug>
-#include "codegenerator.h"
-using namespace CodeGenerator;
-
-int main()
-{
- // The code generator works on items. Each item has a generate() function:
- Item item("");
- qDebug() << item.generate(); // produces "".
-
- // There are several Item subclasses. Text items contains a text string which they
- // reproduce when generate is called:
- Text text(" Hi there");
- qDebug() << text.generate(); // produces " Hi there".
-
- // Items can be concatenated:
- Item sentence = text + Text(" Bye there") ;
- qDebug() << sentence.generate(); // produces "Hi there Bye there".
- // (Internally, this creates a tree of items, and generate is called recursively
- // for items that have children.)
-
- // Repeater items repeat their content when generate is called:
- Repeater repeater = text;
- repeater.setRepeatCount(3);
- qDebug() << repeater.generate(); // produces "Hi there Hi there Hi there".
-
- // Counters evaluate to the current repeat index.
- Repeater repeater2 = text + Counter();
- repeater2.setRepeatCount(3);
- qDebug() << repeater2.generate(); // produces "Hi there0 Hi there1 Hi there2".
-
- // Groups provide sub-groups which are repeated according to the current repeat index.
- // Counters inside Groups evaluate to the local repeat index for the Group.
- Group arguments("Arg" + Counter() + " arg" + Counter());
- Repeater function("void foo(" + arguments + ");\n");
- function.setRepeatCount(3);
- qDebug() << function.generate();
-
- // Produces:
- // void foo(Arg1 arg1);
- // void foo(Arg1 arg1, Arg2 arg2);
- // void foo(Arg1 arg1, Arg2 arg2, Arg3 arg3);
-}
diff --git a/src/qtconcurrent/codegenerator/src/codegenerator.cpp b/src/qtconcurrent/codegenerator/src/codegenerator.cpp
deleted file mode 100644
index 9f3df01eb..000000000
--- a/src/qtconcurrent/codegenerator/src/codegenerator.cpp
+++ /dev/null
@@ -1,127 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "codegenerator.h"
-#include <qdebug.h>
-namespace CodeGenerator
-{
-
-//Convenience constructor so you can say Item("foo")
-Item::Item(const char * const text) : generator(Text(QByteArray(text)).generator) {}
-
-int BaseGenerator::currentCount(GeneratorStack * const stack) const
-{
- const int stackSize = stack->count();
- for (int i = stackSize - 1; i >= 0; --i) {
- BaseGenerator const * const generator = stack->at(i);
- switch (generator->type) {
- case RepeaterType: {
- RepeaterGenerator const * const repeater = static_cast<RepeaterGenerator const * const>(generator);
- return repeater->currentRepeat;
- } break;
- case GroupType: {
- GroupGenerator const * const group = static_cast<GroupGenerator const * const>(generator);
- return group->currentRepeat;
- } break;
- default:
- break;
- }
- }
- return -1;
-}
-
-int BaseGenerator::repeatCount(GeneratorStack * const stack) const
-{
- const int stackSize = stack->count();
- for (int i = stackSize - 1; i >= 0; --i) {
- BaseGenerator const * const generator = stack->at(i);
- switch (generator->type) {
- case RepeaterType: {
- RepeaterGenerator const * const repeater = static_cast<RepeaterGenerator const * const>(generator);
- return repeater->currentRepeat;
- } break;
-/* case GroupType: {
- GroupGenerator const * const group = static_cast<GroupGenerator const * const>(generator);
- return group->currentRepeat;
- } break;
-*/
- default:
- break;
- }
- }
- return -1;
-}
-
-QByteArray RepeaterGenerator::generate(GeneratorStack * const stack)
-{
- GeneratorStacker stacker(stack, this);
- QByteArray generated;
- for (int i = repeatOffset; i < repeatCount + repeatOffset; ++i) {
- currentRepeat = i;
- generated += childGenerator->generate(stack);
- }
- return generated;
-};
-
-QByteArray GroupGenerator::generate(GeneratorStack * const stack)
-{
- const int repeatCount = currentCount(stack);
- GeneratorStacker stacker(stack, this);
- QByteArray generated;
-
- if (repeatCount > 0)
- generated += prefix->generate(stack);
-
- for (int i = 1; i <= repeatCount; ++i) {
- currentRepeat = i;
- generated += childGenerator->generate(stack);
- if (i != repeatCount)
- generated += separator->generate(stack);
- }
-
- if (repeatCount > 0)
- generated += postfix->generate(stack);
-
- return generated;
-};
-
-const Compound operator+(const Item &a, const Item &b)
-{
- return Compound(a, b);
-}
-
-const Compound operator+(const Item &a, const char * const text)
-{
- return Compound(a, Text(text));
-}
-
-const Compound operator+(const char * const text, const Item &b)
-{
- return Compound(Text(text), b);
-}
-
-} \ No newline at end of file
diff --git a/src/qtconcurrent/codegenerator/src/codegenerator.h b/src/qtconcurrent/codegenerator/src/codegenerator.h
deleted file mode 100644
index 8fc92ee58..000000000
--- a/src/qtconcurrent/codegenerator/src/codegenerator.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef CODEGENERATOR_H
-#define CODEGENERATOR_H
-
-#include <QByteArray>
-#include <QString>
-#include <QList>
-#include <QStack>
-
-namespace CodeGenerator
-{
- enum GeneratorType {NoopType, CompoundType, TextType, RepeaterType, CounterType, GroupType};
- class BaseGenerator;
- typedef QStack<BaseGenerator *> GeneratorStack;
-
- template <typename ValueType>
- class Stacker {
- public:
- Stacker(QStack<ValueType> *stack, ValueType value) : stack(stack) { stack->push(value); }
- ~Stacker() { stack->pop();}
- private:
- QStack<ValueType> *stack;
- };
- typedef Stacker<BaseGenerator *> GeneratorStacker;
-
- class BaseGenerator
- {
- public:
- BaseGenerator(GeneratorType type = NoopType) : type(type) {}
- virtual ~BaseGenerator() {};
- virtual QByteArray generate(GeneratorStack *stack) { Q_UNUSED(stack); return QByteArray(); };
- int currentCount(GeneratorStack *stack) const;
- int repeatCount(GeneratorStack *stack) const;
- GeneratorType type;
- };
-
- class Item
- {
- public:
- Item(BaseGenerator * const base) : generator(base) {}
- Item(const char * const text);
- QByteArray generate() const
- { GeneratorStack stack; return generator->generate(&stack); }
- // ### TODO: Fix memory leak!
- // QExplicitlySharedDataPointer<BaseGenerator> generator;
- BaseGenerator * const generator;
- };
-
- class CompoundGenerator : public BaseGenerator
- {
- public:
- CompoundGenerator(BaseGenerator * const a, BaseGenerator * const b)
- : BaseGenerator(CompoundType), a(a), b(b) {}
- virtual QByteArray generate(GeneratorStack *stack)
- { return a->generate(stack) + b->generate(stack); };
- protected:
- BaseGenerator * const a;
- BaseGenerator * const b;
- };
-
- class Compound : public Item
- {
- public:
- Compound(const Item &a, const Item &b) : Item(new CompoundGenerator(a.generator, b.generator)) {}
- };
-
- class TextGenerator : public BaseGenerator
- {
- public:
- TextGenerator(const QByteArray &text) : BaseGenerator(TextType), text(text) {}
- virtual QByteArray generate(GeneratorStack *) { return text; };
- protected:
- QByteArray text;
- };
-
- class Text : public Item {
- public:
- Text(const QByteArray &text) : Item(new TextGenerator(text)) {}
- Text(const char * const text) : Item(new TextGenerator(QByteArray(text))) {}
- };
-
- class RepeaterGenerator : public BaseGenerator
- {
- public:
- RepeaterGenerator(BaseGenerator * const childGenerator)
- : BaseGenerator(RepeaterType), repeatCount(1), repeatOffset(0), childGenerator(childGenerator) {}
- virtual QByteArray generate(GeneratorStack *stack);
-
- int repeatCount;
- int repeatOffset;
- int currentRepeat;
- BaseGenerator * const childGenerator;
- };
-
- class Repeater : public Item {
- public:
- Repeater(const Item &item) : Item(new RepeaterGenerator(item.generator)) {}
- void setRepeatCount(int count)
- { static_cast<RepeaterGenerator * const>(generator)->repeatCount = count; }
- void setRepeatOffset(int offset)
- { static_cast<RepeaterGenerator * const>(generator)->repeatOffset = offset; }
- };
-
- class CounterGenerator : public BaseGenerator
- {
- public:
- CounterGenerator() : BaseGenerator(CounterType), offset(0), increment(1), reverse(false) {}
- QByteArray generate(GeneratorStack *stack)
- {
- if (reverse)
- return QByteArray::number(repeatCount(stack) - (currentCount(stack) * increment) + offset + 1);
- else
- return QByteArray::number((currentCount(stack) * increment) + offset);
- }
- int offset;
- int increment;
- bool reverse;
- };
-
- class Counter : public Item {
- public:
- Counter() : Item(new CounterGenerator()) {}
- Counter(int offset) : Item(new CounterGenerator()) { setOffset(offset); }
- void setOffset(int offset)
- { static_cast<CounterGenerator *>(generator)->offset = offset; }
- void setIncrement(int increment)
- { static_cast<CounterGenerator *>(generator)->increment = increment; }
- void setReverse(bool reverse)
- { static_cast<CounterGenerator *>(generator)->reverse = reverse; }
-
- };
-
- class GroupGenerator : public BaseGenerator
- {
- public:
- GroupGenerator(BaseGenerator * const childGenerator)
- : BaseGenerator(GroupType), currentRepeat(0), childGenerator(childGenerator),
- separator(new BaseGenerator()), prefix(new BaseGenerator()), postfix(new BaseGenerator()) { }
- virtual QByteArray generate(GeneratorStack *stack);
- int currentRepeat;
- BaseGenerator * const childGenerator;
- BaseGenerator *separator;
- BaseGenerator *prefix;
- BaseGenerator *postfix;
- };
-
- class Group : public Item
- {
- public:
- Group(const Item &item) : Item(new GroupGenerator(item.generator)) { setSeparator(", "); }
- void setSeparator(const Item &separator)
- { static_cast<GroupGenerator *>(generator)->separator = separator.generator; }
- void setPrefix(const Item &prefix)
- { static_cast<GroupGenerator *>(generator)->prefix = prefix.generator; }
- void setPostfix(const Item &postfix)
- { static_cast<GroupGenerator *>(generator)->postfix = postfix.generator; }
- };
-
- const Compound operator+(const Item &a, const Item &b);
- const Compound operator+(const Item &a, const char * const text);
- const Compound operator+(const char * const text, const Item &b);
-
-} //namespace CodeGenerator
-
-#endif
diff --git a/src/qtconcurrent/generaterun/main.cpp b/src/qtconcurrent/generaterun/main.cpp
deleted file mode 100644
index ed90acaa4..000000000
--- a/src/qtconcurrent/generaterun/main.cpp
+++ /dev/null
@@ -1,419 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include <QDebug>
-#include <QFile>
-#include <QDir>
-
-#include "codegenerator.h"
-using namespace CodeGenerator;
-
-const Item argument = "arg" + Counter();
-const Item argumentRef = "&arg" + Counter();
-const Item argumentType = "Arg" + Counter();
-const Item constArgumentType = "const Arg" + Counter();
-const Item parameterType = "Param" + Counter();
-
-Group argumentTypes(argumentType); // expands to ",Arg1, Arg2, ..."
-Group argumentTypesNoPrefix(argumentType); // expands to "Arg1, Arg2, ..."
-Group arguments(argument); // expands to ",arg1, arg2, ..."
-Group argumentsNoPrefix(argument); // expands to "arg1, arg2, ..."
-Group parameterTypes(parameterType); // expands to ",Param1, Param2, ..."
-Group parameterTypesNoPrefix(parameterType); // expands to "Param1, Param2, ..."
-Group typenameTypes("typename " + parameterType + ", typename " + argumentType); // expands to " ,typename Param1, typename Arg1, ..."
-Group types(parameterType + ", " + argumentType); // expands to ", Param1, Arg1, ..."
-Group functionParameters(constArgumentType + " " + argumentRef);
-Group typenameArgumentTypes("typename " + argumentType);
-
-Group initializers(argument + "(" + argument + ")");
-Group classData(argumentType +" " + argument + ";");
-Group arglist(argument);
-Group typeList(argumentTypes);
-
-void init()
-{
- argumentTypes.setPrefix(", ");
- arguments.setPrefix(", ");
- parameterTypes.setPrefix(", ");
- typenameTypes.setPrefix(", ");
- types.setPrefix(", ");
- functionParameters.setPrefix(", ");
- typenameArgumentTypes.setPrefix(", ");
-
- initializers.setPrefix(", ");
- classData.setSeparator(" ");
- classData.setPrefix(" ");
- arglist.setPrefix(", ");
- typeList.setPrefix(", ");
-}
-
-
-Item Line(Item item)
-{
- return item + "\n";
-}
-
-Item generateRunFunctions(int repeats, bool withExplicitPoolArg)
-{
- Item functionPointerType = "T (*)(" + parameterTypesNoPrefix + ")";
-
- Item functionPointerParameter = "T (*functionPointer)(" + parameterTypesNoPrefix + ")";
-
- const Item pool = withExplicitPoolArg ? "QThreadPool *pool, " : "";
- const char * const startArg = withExplicitPoolArg ? "pool" : "";
-
- // plain functions
- Repeater functions = Line ("template <typename T" + typenameTypes + ">") +
- Line ("QFuture<T> run(" + pool + functionPointerParameter + functionParameters + ")") +
- Line("{") +
- Line(" return (new StoredFunctorCall" + Counter() + "<T, " +
- functionPointerType + argumentTypes + ">(functionPointer" + arguments + "))->start(" + startArg + ");") +
- Line("}");
- functions.setRepeatCount(repeats);
-
- // function objects by value
- Repeater functionObjects = Line ("template <typename FunctionObject" + typenameArgumentTypes + ">") +
- Line ("QFuture<typename FunctionObject::result_type> run(" + pool + "FunctionObject functionObject" + functionParameters + ")") +
- Line("{") +
- Line(" return (new StoredFunctorCall" + Counter() +
- "<typename FunctionObject::result_type, FunctionObject" +
- argumentTypes + ">(functionObject" + arguments + "))->start(" + startArg + ");") +
- Line("}");
- functionObjects.setRepeatCount(repeats);
-
- // function objects by pointer
- Repeater functionObjectsPointer = Line ("template <typename FunctionObject" + typenameArgumentTypes + ">") +
- Line ("QFuture<typename FunctionObject::result_type> run(" + pool + "FunctionObject *functionObject" + functionParameters + ")") +
- Line("{") +
- Line(" return (new typename SelectStoredFunctorPointerCall" + Counter() +
- "<typename FunctionObject::result_type, FunctionObject" +
- argumentTypes + ">::type(functionObject" + arguments + "))->start(" + startArg + ");") +
- Line("}");
- functionObjectsPointer.setRepeatCount(repeats);
-
- // member functions by value
- Repeater memberFunction = Line ("template <typename T, typename Class" + typenameTypes + ">") +
- Line ("QFuture<T> run(" + pool + "const Class &object, T (Class::*fn)(" + parameterTypesNoPrefix + ")" + functionParameters + ")") +
- Line("{") +
- Line(" return (new typename SelectStoredMemberFunctionCall" + Counter() +
- "<T, Class" +
- types + ">::type(fn, object" + arguments + "))->start(" + startArg + ");") +
- Line("}");
- memberFunction.setRepeatCount(repeats);
-
- // const member functions by value
- Repeater constMemberFunction = Line ("template <typename T, typename Class" + typenameTypes + ">") +
- Line ("QFuture<T> run(" + pool + "const Class &object, T (Class::*fn)(" + parameterTypesNoPrefix + ") const" + functionParameters + ")") +
- Line("{") +
- Line(" return (new typename SelectStoredConstMemberFunctionCall" + Counter() +
- "<T, Class" +
- types + ">::type(fn, object" + arguments + "))->start(" + startArg + ");") +
- Line("}");
- constMemberFunction.setRepeatCount(repeats);
-
- // member functions by class pointer
- Repeater memberFunctionPointer = Line ("template <typename T, typename Class" + typenameTypes + ">") +
- Line ("QFuture<T> run(" + pool + "Class *object, T (Class::*fn)(" + parameterTypesNoPrefix + ")" + functionParameters + ")") +
- Line("{") +
- Line(" return (new typename SelectStoredMemberFunctionPointerCall" + Counter() +
- "<T, Class" +
- types + ">::type(fn, object" + arguments + "))->start(" + startArg + ");") +
- Line("}");
- memberFunctionPointer.setRepeatCount(repeats);
-
- // const member functions by class pointer
- Repeater constMemberFunctionPointer = Line ("template <typename T, typename Class" + typenameTypes + ">") +
- Line ("QFuture<T> run(" + pool + "const Class *object, T (Class::*fn)(" + parameterTypesNoPrefix + ") const" + functionParameters + ")") +
- Line("{") +
- Line(" return (new typename SelectStoredConstMemberFunctionPointerCall" + Counter() +
- "<T, Class" +
- types + ">::type(fn, object" + arguments + "))->start(" + startArg + ");") +
- Line("}");
- constMemberFunctionPointer.setRepeatCount(repeats);
-
-
- Item interfaceFunctionPointerType = "void (*)(QFutureInterface<T> &" + argumentTypes + ")";
- Item interfaceFunctionPointerParameter = "void (*functionPointer)(QFutureInterface<T> &" + argumentTypes + ")";
-/*
- // QFutureInterface functions
- Repeater interfaceFunctions = Line ("template <typename T" + typenameTypes + ">") +
- Line ("QFuture<T> run(" + pool + interfaceFunctionPointerParameter + functionParameters + ")") +
- Line("{") +
- Line(" return (new StoredInterfaceFunctionCall" + Counter() + "<T, " +
- interfaceFunctionPointerType + typenameArgumentTypes + ">(functionPointer" + arguments + "))->start(" + startArg + ");") +
- Line("}");
- functions.setRepeatCount(repeats);
- interfaceFunctions.setRepeatCount(repeats);
-
- // member functions by class pointer
- Repeater interfaceMemberFunction = Line ("template <typename Class, typename T" + typenameTypes + ">") +
- Line ("QFuture<T> run(" + pool + "void (Class::*fn)(QFutureInterface<T> &), Class *object" + functionParameters + ")") +
- Line("{") +
- Line(" return (new StoredInterfaceMemberFunctionCall" + Counter() +
- "<T, void (Class::*)(QFutureInterface<T> &), Class" +
- typenameArgumentTypes + ">(fn, object" + arguments + "))->start(" + startArg + ");") +
- Line("}");
- memberFunctionPointer.setRepeatCount(repeats);
-*/
- return functions + Line("") + functionObjects + Line("") + functionObjectsPointer + Line("")
- + memberFunction + Line("") + constMemberFunction + Line("")
- + memberFunctionPointer + Line("") + constMemberFunctionPointer + Line("")
- /* + interfaceFunctions + Line("") + interfaceMemberFunction + Line("")*/
- ;
-}
-
-
-Item functions(Item className, Item functorType, Item callLine)
-{
- return
- Line("template <typename T, typename FunctionPointer" + typenameArgumentTypes + ">") +
- Line("struct " + className + Counter() +": public RunFunctionTask<T>") +
- Line("{") +
- Line(" inline " + className + Counter() + "(" + functorType + " function" + functionParameters +")") +
- Line(" : function(function)" + initializers + " {}") +
- Line(" void runFunctor() {" + callLine + argumentsNoPrefix + "); }") +
- Line(" " + functorType + " function;") +
- Line( classData) +
- Line("};") +
- Line("");
-}
-
-Item functionSelector(Item classNameBase)
-{
- return
- Line("template <typename T, typename FunctionPointer" + typenameArgumentTypes + ">") +
- Line("struct Select" + classNameBase + Counter()) +
- Line("{") +
- Line(" typedef typename SelectSpecialization<T>::template") +
- Line(" Type<" + classNameBase + Counter() + " <T, FunctionPointer" + argumentTypes + ">,") +
- Line(" Void" + classNameBase + Counter() + "<T, FunctionPointer" + argumentTypes + "> >::type type;") +
- Line("};");
-}
-
-Item memberFunctions(Item className, Item constFunction, Item objectArgument, Item objectMember, Item callLine)
-{
- return
- Line("template <typename T, typename Class" + typenameTypes + ">") +
- Line("class " + className + Counter() + " : public RunFunctionTask<T>") +
- Line("{") +
- Line("public:")+
- Line(" " + className + Counter() + "(T (Class::*fn)(" + parameterTypesNoPrefix + ") " + constFunction + ", " + objectArgument + functionParameters + ")") +
- Line(" : fn(fn), object(object)" + initializers + "{ }" ) +
- Line("")+
- Line(" void runFunctor()")+
- Line(" {")+
- Line(" " + callLine + argumentsNoPrefix + ");")+
- Line(" }")+
- Line("private:")+
- Line(" T (Class::*fn)(" + parameterTypesNoPrefix + ")" + constFunction + ";")+
- Line(" " + objectMember + ";") +
- Line( classData) +
- Line("};");
-}
-
-Item memberFunctionSelector(Item classNameBase)
-{
- return
- Line("template <typename T, typename Class" + typenameTypes + ">") +
- Line("struct Select" + classNameBase + Counter()) +
- Line("{") +
- Line(" typedef typename SelectSpecialization<T>::template") +
- Line(" Type<" + classNameBase + Counter() + " <T, Class" + types + ">,") +
- Line(" Void" + classNameBase + Counter() + "<T, Class" + types + "> >::type type;") +
- Line("};");
-}
-
-Item generateSFCs(int repeats)
-{
-
- Item functionPointerTypedef = "typedef void (*FunctionPointer)(" + argumentTypesNoPrefix + ");";
-
- Repeater dataStructures =
-
- // Function objects by value
- functions(Item("StoredFunctorCall"), Item("FunctionPointer"), Item(" this->result = function(")) +
- functions(Item("VoidStoredFunctorCall"), Item("FunctionPointer"), Item(" function(")) +
- functionSelector(Item("StoredFunctorCall")) +
-
- // Function objects by pointer
- functions(Item("StoredFunctorPointerCall"), Item("FunctionPointer *"), Item(" this->result =(*function)(")) +
- functions(Item("VoidStoredFunctorPointerCall"), Item("FunctionPointer *"), Item("(*function)(")) +
- functionSelector(Item("StoredFunctorPointerCall")) +
-
- // Member functions by value
- memberFunctions(Item("StoredMemberFunctionCall"), Item(""), Item("const Class &object"), Item("Class object"), Item("this->result = (object.*fn)(")) +
- memberFunctions(Item("VoidStoredMemberFunctionCall"), Item(""), Item("const Class &object"), Item("Class object"), Item("(object.*fn)(")) +
- memberFunctionSelector(Item("StoredMemberFunctionCall")) +
-
- // Const Member functions by value
- memberFunctions(Item("StoredConstMemberFunctionCall"), Item("const"), Item("const Class &object"), Item("const Class object"), Item("this->result = (object.*fn)(")) +
- memberFunctions(Item("VoidStoredConstMemberFunctionCall"), Item("const"), Item("const Class &object"), Item("const Class object"), Item("(object.*fn)(")) +
- memberFunctionSelector(Item("StoredConstMemberFunctionCall")) +
-
- // Member functions by pointer
- memberFunctions(Item("StoredMemberFunctionPointerCall"), Item(""), Item("Class *object"), Item("Class *object"), Item("this->result = (object->*fn)(")) +
- memberFunctions(Item("VoidStoredMemberFunctionPointerCall"), Item(""), Item("Class *object"), Item("Class *object"), Item("(object->*fn)(")) +
- memberFunctionSelector(Item("StoredMemberFunctionPointerCall")) +
-
- // const member functions by pointer
- memberFunctions(Item("StoredConstMemberFunctionPointerCall"), Item("const"), Item("Class const *object"), Item("Class const *object"), Item("this->result = (object->*fn)(")) +
- memberFunctions(Item("VoidStoredConstMemberFunctionPointerCall"), Item("const"), Item("Class const *object"), Item("Class const *object"), Item("(object->*fn)(")) +
- memberFunctionSelector(Item("StoredConstMemberFunctionPointerCall"));
-
- dataStructures.setRepeatCount(repeats);
- return dataStructures;
-}
-
-void writeFile(QString fileName, QByteArray contents)
-{
- QFile runFile(fileName);
- if (runFile.open(QIODevice::WriteOnly) == false) {
- qDebug() << "Write to" << fileName << "failed";
- return;
- }
-
- runFile.write(contents);
- runFile.close();
- qDebug() << "Write to" << fileName << "Ok";
-}
-
-Item dollarQuote(Item item)
-{
- return Item("$") + item + Item("$");
-}
-
-static int usage(const char *executable)
-{
- qDebug("Usage: %s path/to/qtconcurrent", executable);
- return EXIT_FAILURE;
-}
-
-int main(int argc, char *argv[])
-{
- if (argc !=2)
- return usage(argv[0]);
-
- const QDir outdir(QFile::decodeName(argv[1]));
-
- const int repeats = 6;
- init();
- Item run = (
- Line("/****************************************************************************") +
- Line("**") +
- Line("** Copyright (C) 2015 The Qt Company Ltd.") +
- Line("** Contact: http://www.qt.io/licensing/") +
- Line("**") +
- Line("** This file is part of the Qt Toolkit.") +
- Line("**") +
- Line("****************************************************************************/") +
- Line("") +
- Line("// Generated code, do not edit! Use generator at tools/qtconcurrent/generaterun/") +
- Line("#ifndef QTCONCURRENT_RUN_H") +
- Line("#define QTCONCURRENT_RUN_H") +
- Line("") +
- Line("#include <QtConcurrent/qtconcurrentcompilertest.h>") +
- Line("") +
- Line("#ifndef QT_NO_CONCURRENT") +
- Line("") +
- Line("#include <QtConcurrent/qtconcurrentrunbase.h>") +
- Line("#include <QtConcurrent/qtconcurrentstoredfunctioncall.h>") +
- Line("") +
- Line("QT_BEGIN_NAMESPACE") +
- Line("") +
- Line("") +
- Line("#ifdef Q_QDOC") +
- Line("") +
- Line("namespace QtConcurrent {") +
- Line("") +
- Line(" template <typename T>") +
- Line(" QFuture<T> run(Function function, ...);") +
- Line("") +
- Line(" template <typename T>") +
- Line(" QFuture<T> run(QThreadPool *pool, Function function, ...);") +
- Line("") +
- Line("} // namespace QtConcurrent") +
- Line("") +
- Line("#else") +
- Line("") +
- Line("namespace QtConcurrent {") +
- Line("") +
- generateRunFunctions(repeats, false) +
- Line("") +
- generateRunFunctions(repeats, true) +
- Line("} //namespace QtConcurrent") +
- Line("") +
- Line("#endif // Q_QDOC") +
- Line("") +
- Line("QT_END_NAMESPACE") +
- Line("") +
- Line("#endif // QT_NO_CONCURRENT") +
- Line("") +
- Line("#endif")
- );
-
- writeFile(outdir.filePath("qtconcurrentrun.h"), run.generate());
-
- Item storedFunctionCall = (
- Line("/****************************************************************************") +
- Line("**") +
- Line("** Copyright (C) 2015 The Qt Company Ltd.") +
- Line("** Contact: http://www.qt.io/licensing/") +
- Line("**") +
- Line("** This file is part of the Qt Toolkit.") +
- Line("**") +
- Line("****************************************************************************/") +
- Line("") +
- Line("// Generated code, do not edit! Use generator at tools/qtconcurrent/generaterun/") +
- Line("#ifndef QTCONCURRENT_STOREDFUNCTIONCALL_H") +
- Line("#define QTCONCURRENT_STOREDFUNCTIONCALL_H") +
- Line("") +
- Line("#include <QtCore/qglobal.h>") +
- Line("") +
- Line("#ifndef QT_NO_CONCURRENT") +
- Line("#include <QtConcurrent/qtconcurrentrunbase.h>") +
- Line("") +
- Line("QT_BEGIN_NAMESPACE") +
- Line("") +
- Line("#ifndef Q_QDOC") +
- Line("") +
- Line("namespace QtConcurrent {") +
- generateSFCs(repeats) +
- Line("} //namespace QtConcurrent") +
- Line("") +
- Line("#endif // Q_QDOC") +
- Line("") +
- Line("QT_END_NAMESPACE") +
- Line("") +
- Line("#endif // QT_NO_CONCURRENT") +
- Line("") +
- Line("#endif")
- );
-
- writeFile(outdir.filePath("qtconcurrentstoredfunctioncall.h"), storedFunctionCall.generate());
-}
-
-
diff --git a/src/qtconcurrent/generaterun/run.pro b/src/qtconcurrent/generaterun/run.pro
deleted file mode 100644
index eb6fd35c8..000000000
--- a/src/qtconcurrent/generaterun/run.pro
+++ /dev/null
@@ -1,3 +0,0 @@
-include(../codegenerator/codegenerator.pri)
-
-SOURCES += main.cpp
diff --git a/src/qtdiag/.prev_CMakeLists.txt b/src/qtdiag/.prev_CMakeLists.txt
deleted file mode 100644
index fe53247d9..000000000
--- a/src/qtdiag/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-# Generated from qtdiag.pro.
-
-#####################################################################
-## qtdiag App:
-#####################################################################
-
-qt_internal_add_app(qtdiag
- SOURCES
- main.cpp
- qtdiag.cpp qtdiag.h
- PUBLIC_LIBRARIES
- Qt::CorePrivate
- Qt::Gui
- Qt::GuiPrivate
-)
-set_target_properties(qtdiag PROPERTIES
- WIN32_EXECUTABLE FALSE
-)
-
-#### Keys ignored in scope 1:.:.:qtdiag.pro:<TRUE>:
-# QT_FOR_CONFIG = "tools-private"
-# _REQUIREMENTS = "qtConfig(qtdiag)"
-
-## Scopes:
-#####################################################################
-
-qt_extend_target(qtdiag CONDITION QT_FEATURE_opengl
- PUBLIC_LIBRARIES
- Qt::OpenGL
-)
-
-qt_extend_target(qtdiag CONDITION TARGET Qt::Widgets
- PUBLIC_LIBRARIES
- Qt::Widgets
-)
-
-qt_extend_target(qtdiag CONDITION TARGET Qt::Network
- DEFINES
- NETWORK_DIAG
- PUBLIC_LIBRARIES
- Qt::Network
-)
diff --git a/src/qtdiag/CMakeLists.txt b/src/qtdiag/CMakeLists.txt
index fb98d4b07..13dca7d11 100644
--- a/src/qtdiag/CMakeLists.txt
+++ b/src/qtdiag/CMakeLists.txt
@@ -1,14 +1,16 @@
-# Generated from qtdiag.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qtdiag App:
#####################################################################
qt_internal_add_app(qtdiag
+ INSTALL_VERSIONED_LINK
SOURCES
main.cpp
qtdiag.cpp qtdiag.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
# Qt::Gui # special case QTBUG-83498
# Qt::GuiPrivate # special case QTBUG-83498
@@ -17,37 +19,31 @@ set_target_properties(qtdiag PROPERTIES
WIN32_EXECUTABLE FALSE
)
-#### Keys ignored in scope 1:.:.:qtdiag.pro:<TRUE>:
-# QT_FOR_CONFIG = "tools-private"
-# _REQUIREMENTS = "qtConfig(qtdiag)"
-
## Scopes:
#####################################################################
-qt_extend_target(qtdiag CONDITION QT_FEATURE_opengl
+qt_internal_extend_target(qtdiag CONDITION QT_FEATURE_opengl
PUBLIC_LIBRARIES
Qt::OpenGL
Qt::Gui # special case QTBUG-83498
Qt::GuiPrivate # special case QTBUG-83498
)
-qt_extend_target(qtdiag CONDITION TARGET Qt::Widgets
+qt_internal_extend_target(qtdiag CONDITION TARGET Qt::Widgets
PUBLIC_LIBRARIES
Qt::Widgets
Qt::Gui # special case QTBUG-83498
Qt::GuiPrivate # special case QTBUG-83498
)
-# special case begin
# QTBUG-83498
-qt_extend_target(qtdiag CONDITION NOT TARGET Qt::Widgets AND NOT QT_FEATURE_opengl
+qt_internal_extend_target(qtdiag CONDITION NOT TARGET Qt::Widgets AND NOT QT_FEATURE_opengl
PUBLIC_LIBRARIES
Qt::Gui
Qt::GuiPrivate # special case QTBUG-83498
)
-# special case end
-qt_extend_target(qtdiag CONDITION TARGET Qt::Network
+qt_internal_extend_target(qtdiag CONDITION TARGET Qt::Network
DEFINES
NETWORK_DIAG
PUBLIC_LIBRARIES
diff --git a/src/qtdiag/main.cpp b/src/qtdiag/main.cpp
index 5851d3450..e52f336f7 100644
--- a/src/qtdiag/main.cpp
+++ b/src/qtdiag/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qtdiag.h"
diff --git a/src/qtdiag/qtdiag.cpp b/src/qtdiag/qtdiag.cpp
index ca7793073..217d4596d 100644
--- a/src/qtdiag/qtdiag.cpp
+++ b/src/qtdiag/qtdiag.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qtdiag.h"
@@ -76,20 +51,8 @@
#include <qpa/qplatformintegration.h>
#include <private/qhighdpiscaling_p.h>
-#include <QtGui/private/qrhi_p.h>
#include <QtGui/QOffscreenSurface>
-#if QT_CONFIG(opengl)
-# include <QtGui/private/qrhigles2_p.h>
-#endif
-#if QT_CONFIG(vulkan)
-# include <QtGui/private/qrhivulkan_p.h>
-#endif
-#ifdef Q_OS_WIN
-#include <QtGui/private/qrhid3d11_p.h>
-#endif
-#if defined(Q_OS_MACOS) || defined(Q_OS_IOS)
-# include <QtGui/private/qrhimetal_p.h>
-#endif
+#include <rhi/qrhi.h>
#ifdef QT_WIDGETS_LIB
# include <QtWidgets/QStyleFactory>
@@ -149,6 +112,19 @@ QTextStream &operator<<(QTextStream &str, QPlatformScreen::SubpixelAntialiasingT
return str;
}
+QTextStream &operator<<(QTextStream &str, const QRhiDriverInfo &info)
+{
+ static const char *enumValues[] = {
+ "Unknown", "Integrated", "Discrete", "External", "Virtual", "Cpu"
+ };
+ str << "Device: " << info.deviceName
+ << " Device ID: 0x" << Qt::hex << info.deviceId
+ << " Vendor ID: 0x" << info.vendorId << Qt::dec
+ << " Device type: " << (size_t(info.deviceType) < sizeof(enumValues) / sizeof(enumValues[0])
+ ? enumValues[info.deviceType] : "<Unknown>");
+ return str;
+}
+
#ifndef QT_NO_OPENGL
QTextStream &operator<<(QTextStream &str, const QSurfaceFormat &format)
@@ -227,7 +203,7 @@ void dumpGlInfo(QTextStream &str, bool listExtensions)
QByteArrayList extensionList = context.extensions().values();
std::sort(extensionList.begin(), extensionList.end());
str << " \nFound " << extensionList.size() << " extensions:\n";
- for (const QByteArray &extension : qAsConst(extensionList))
+ for (const QByteArray &extension : std::as_const(extensionList))
str << " " << extension << '\n';
}
} else {
@@ -302,6 +278,27 @@ void dumpRhiBackendInfo(QTextStream &str, const char *name, QRhi::Implementation
{ "TriangleFanTopology", QRhi::TriangleFanTopology },
{ "ReadBackNonUniformBuffer", QRhi::ReadBackNonUniformBuffer },
{ "ReadBackNonBaseMipLevel", QRhi::ReadBackNonBaseMipLevel },
+ { "TexelFetch", QRhi::TexelFetch },
+ { "RenderToNonBaseMipLevel", QRhi::RenderToNonBaseMipLevel },
+ { "IntAttributes", QRhi::IntAttributes },
+ { "ScreenSpaceDerivatives", QRhi::ScreenSpaceDerivatives },
+ { "ReadBackAnyTextureFormat", QRhi::ReadBackAnyTextureFormat },
+ { "PipelineCacheDataLoadSave", QRhi::PipelineCacheDataLoadSave },
+ { "ImageDataStride", QRhi::ImageDataStride },
+ { "RenderBufferImport", QRhi::RenderBufferImport },
+ { "ThreeDimensionalTextures", QRhi::ThreeDimensionalTextures },
+ { "RenderTo3DTextureSlice", QRhi::RenderTo3DTextureSlice },
+ { "TextureArrays", QRhi::TextureArrays },
+ { "Tessellation", QRhi::Tessellation },
+ { "GeometryShader", QRhi::GeometryShader },
+ { "TextureArrayRange", QRhi::TextureArrayRange },
+ { "NonFillPolygonMode", QRhi::NonFillPolygonMode },
+ { "OneDimensionalTextures", QRhi::OneDimensionalTextures },
+ { "OneDimensionalTextureMipmaps", QRhi::OneDimensionalTextureMipmaps },
+ { "HalfAttributes", QRhi::HalfAttributes },
+ { "RenderToOneDimensionalTexture", QRhi::RenderToOneDimensionalTexture },
+ { "ThreeDimensionalTextureMipmaps", QRhi::ThreeDimensionalTextureMipmaps },
+
{ nullptr, QRhi::Feature(0) }
};
struct RhiTextureFormat {
@@ -312,14 +309,18 @@ void dumpRhiBackendInfo(QTextStream &str, const char *name, QRhi::Implementation
{ "RGBA8", QRhiTexture::RGBA8 },
{ "BGRA8", QRhiTexture::BGRA8 },
{ "R8", QRhiTexture::R8 },
- { "R16", QRhiTexture::R16 },
{ "RG8", QRhiTexture::RG8 },
+ { "R16", QRhiTexture::R16 },
+ { "RG16", QRhiTexture::RG16 },
{ "RED_OR_ALPHA8", QRhiTexture::RED_OR_ALPHA8 },
{ "RGBA16F", QRhiTexture::RGBA16F },
{ "RGBA32F", QRhiTexture::RGBA32F },
{ "R16F", QRhiTexture::R16F },
{ "R32F", QRhiTexture::R32F },
+ { "RGB10A2", QRhiTexture::RGB10A2 },
{ "D16", QRhiTexture::D16 },
+ { "D24", QRhiTexture::D24 },
+ { "D24S8", QRhiTexture::D24S8 },
{ "D32F", QRhiTexture::D32F },
{ "BC1", QRhiTexture::BC1 },
{ "BC2", QRhiTexture::BC2 },
@@ -351,10 +352,21 @@ void dumpRhiBackendInfo(QTextStream &str, const char *name, QRhi::Implementation
QScopedPointer<QRhi> rhi(QRhi::create(impl, initParams, QRhi::Flags(), nullptr));
if (rhi) {
str << name << ":\n";
+ str << " Driver Info: " << rhi->driverInfo() << "\n";
str << " Min Texture Size: " << rhi->resourceLimit(QRhi::TextureSizeMin) << "\n";
str << " Max Texture Size: " << rhi->resourceLimit(QRhi::TextureSizeMax) << "\n";
str << " Max Color Attachments: " << rhi->resourceLimit(QRhi::MaxColorAttachments) << "\n";
str << " Frames in Flight: " << rhi->resourceLimit(QRhi::FramesInFlight) << "\n";
+ str << " Async Readback Limit: " << rhi->resourceLimit(QRhi::MaxAsyncReadbackFrames) << "\n";
+ str << " MaxThreadGroupsPerDimension: " << rhi->resourceLimit(QRhi::MaxThreadGroupsPerDimension) << "\n";
+ str << " MaxThreadsPerThreadGroup: " << rhi->resourceLimit(QRhi::MaxThreadsPerThreadGroup) << "\n";
+ str << " MaxThreadGroupX: " << rhi->resourceLimit(QRhi::MaxThreadGroupX) << "\n";
+ str << " MaxThreadGroupY: " << rhi->resourceLimit(QRhi::MaxThreadGroupY) << "\n";
+ str << " MaxThreadGroupZ: " << rhi->resourceLimit(QRhi::MaxThreadGroupZ) << "\n";
+ str << " TextureArraySizeMax: " << rhi->resourceLimit(QRhi::TextureArraySizeMax) << "\n";
+ str << " MaxUniformBufferRange: " << rhi->resourceLimit(QRhi::MaxUniformBufferRange) << "\n";
+ str << " MaxVertexInputs: " << rhi->resourceLimit(QRhi::MaxVertexInputs) << "\n";
+ str << " MaxVertexOutputs: " << rhi->resourceLimit(QRhi::MaxVertexOutputs) << "\n";
str << " Uniform Buffer Alignment: " << rhi->ubufAlignment() << "\n";
QByteArrayList supportedSampleCounts;
for (int s : rhi->supportedSampleCounts())
@@ -402,6 +414,10 @@ void dumpRhiInfo(QTextStream &str)
QRhiD3D11InitParams params;
dumpRhiBackendInfo(str, "Direct3D 11", QRhi::D3D11, &params);
}
+ {
+ QRhiD3D12InitParams params;
+ dumpRhiBackendInfo(str, "Direct3D 12", QRhi::D3D12, &params);
+ }
#endif
#if defined(Q_OS_MACOS) || defined(Q_OS_IOS)
@@ -437,7 +453,7 @@ static void dumpStandardLocation(QTextStream &str, QStandardPaths::StandardLocat
#define DUMP_CPU_FEATURE(feature, name) \
if (qCpuHasFeature(feature)) \
- str << " " name;
+ str << " " name
#define DUMP_STANDARDPATH(str, location) \
str << " " << #location << ": "; \
@@ -555,6 +571,7 @@ QString qtDiag(unsigned flags)
str << "\nArchitecture: " << QSysInfo::currentCpuArchitecture() << "; features:";
#if defined(Q_PROCESSOR_X86)
+ DUMP_CPU_FEATURE(HYBRID, "hybrid");
DUMP_CPU_FEATURE(SSE2, "SSE2");
DUMP_CPU_FEATURE(SSE3, "SSE3");
DUMP_CPU_FEATURE(SSSE3, "SSSE3");
@@ -562,8 +579,15 @@ QString qtDiag(unsigned flags)
DUMP_CPU_FEATURE(SSE4_2, "SSE4.2");
DUMP_CPU_FEATURE(AVX, "AVX");
DUMP_CPU_FEATURE(AVX2, "AVX2");
- DUMP_CPU_FEATURE(RTM, "RTM");
- DUMP_CPU_FEATURE(HLE, "HLE");
+ DUMP_CPU_FEATURE(AVX512F, "AVX512F");
+ DUMP_CPU_FEATURE(AVX512IFMA, "AVX512IFMA");
+ DUMP_CPU_FEATURE(AVX512VBMI2, "AVX512VBMI2");
+ DUMP_CPU_FEATURE(AVX512FP16, "AVX512FP16");
+ DUMP_CPU_FEATURE(RDRND, "RDRAND");
+ DUMP_CPU_FEATURE(RDSEED, "RDSEED");
+ DUMP_CPU_FEATURE(AES, "AES");
+ DUMP_CPU_FEATURE(VAES, "VAES");
+ DUMP_CPU_FEATURE(SHA, "SHA");
#elif defined(Q_PROCESSOR_ARM)
DUMP_CPU_FEATURE(ARM_NEON, "Neon");
#elif defined(Q_PROCESSOR_MIPS)
@@ -577,8 +601,10 @@ QString qtDiag(unsigned flags)
str << "\nEnvironment:\n";
const QStringList keys = systemEnvironment.keys();
for (const QString &key : keys) {
- if (key.startsWith(QLatin1Char('Q')))
- str << " " << key << "=\"" << systemEnvironment.value(key) << "\"\n";
+ if (key.size() < 2 || !key.startsWith(QLatin1Char('Q')))
+ continue;
+ if (key.at(1) == 'T' || key.at(1) == '_')
+ str << " " << key << "=\"" << systemEnvironment.value(key) << "\"\n";
}
#endif // QT_CONFIG(process)
@@ -594,7 +620,7 @@ QString qtDiag(unsigned flags)
DUMP_LIBRARYPATH(str, LibraryExecutablesPath)
DUMP_LIBRARYPATH(str, BinariesPath)
DUMP_LIBRARYPATH(str, PluginsPath)
- DUMP_LIBRARYPATH(str, Qml2ImportsPath)
+ DUMP_LIBRARYPATH(str, QmlImportsPath)
DUMP_LIBRARYPATH(str, ArchDataPath)
DUMP_LIBRARYPATH(str, DataPath)
DUMP_LIBRARYPATH(str, TranslationsPath)
@@ -672,16 +698,19 @@ QString qtDiag(unsigned flags)
<< " startDragTime: " << styleHints->startDragTime() << '\n'
<< " startDragVelocity: " << styleHints->startDragVelocity() << '\n'
<< " keyboardInputInterval: " << styleHints->keyboardInputInterval() << '\n'
- << " keyboardAutoRepeatRate: " << styleHints->keyboardAutoRepeatRate() << '\n'
+ << " keyboardAutoRepeatRateF: " << styleHints->keyboardAutoRepeatRateF() << '\n'
<< " cursorFlashTime: " << styleHints->cursorFlashTime() << '\n'
<< " showIsFullScreen: " << styleHints->showIsFullScreen() << '\n'
<< " showIsMaximized: " << styleHints->showIsMaximized() << '\n'
<< " passwordMaskDelay: " << styleHints->passwordMaskDelay() << '\n'
<< " passwordMaskCharacter: ";
- if (passwordMaskCharacter.unicode() >= 32 && passwordMaskCharacter.unicode() < 128)
+ const int passwordMaskCharacterUc = passwordMaskCharacter.unicode();
+ if (passwordMaskCharacterUc >= 32 && passwordMaskCharacterUc < 128) {
str << '\'' << passwordMaskCharacter << '\'';
- else
- str << "U+" << qSetFieldWidth(4) << qSetPadChar('0') << Qt::uppercasedigits << Qt::hex << passwordMaskCharacter.unicode() << Qt::dec << qSetFieldWidth(0);
+ } else {
+ str << "U+" << qSetFieldWidth(4) << qSetPadChar('0') << Qt::uppercasedigits << Qt::hex
+ << passwordMaskCharacterUc << Qt::dec << qSetFieldWidth(0);
+ }
str << '\n'
<< " fontSmoothingGamma: " << styleHints->fontSmoothingGamma() << '\n'
<< " useRtlExtensions: " << styleHints->useRtlExtensions() << '\n'
@@ -724,8 +753,7 @@ QString qtDiag(unsigned flags)
<< " Title font : " << QFontDatabase::systemFont(QFontDatabase::TitleFont) << '\n'
<< " Smallest font: " << QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont) << '\n';
if (flags & QtDiagFonts) {
- QFontDatabase fontDatabase;
- const QStringList families = fontDatabase.families();
+ const QStringList families = QFontDatabase::families();
str << "\n Families (" << families.size() << "):\n";
for (int i = 0, count = families.size(); i < count; ++i)
str << " " << families.at(i) << '\n';
@@ -734,7 +762,7 @@ QString qtDiag(unsigned flags)
str << "\n Standard Sizes:";
for (int i = 0, count = standardSizes.size(); i < count; ++i)
str << ' ' << standardSizes.at(i);
- QList<QFontDatabase::WritingSystem> writingSystems = fontDatabase.writingSystems();
+ QList<QFontDatabase::WritingSystem> writingSystems = QFontDatabase::writingSystems();
str << "\n\n Writing systems:\n";
for (int i = 0, count = writingSystems.size(); i < count; ++i)
str << " " << formatValueQDebug(writingSystems.at(i)) << '\n';
@@ -778,8 +806,7 @@ QString qtDiag(unsigned flags)
str << ' ' << platformScreen->subpixelAntialiasingTypeHint() << "\n ";
if (QHighDpiScaling::isActive())
str << "High DPI scaling factor: " << QHighDpiScaling::factor(screen) << ' ';
- str << "DevicePixelRatio: " << screen->devicePixelRatio()
- << " Pixel density: " << platformScreen->pixelDensity();
+ str << "DevicePixelRatio: " << screen->devicePixelRatio();
str << "\n Primary orientation: " << screen->primaryOrientation()
<< " Orientation: " << screen->orientation()
<< " Native orientation: " << screen->nativeOrientation()
@@ -791,9 +818,9 @@ QString qtDiag(unsigned flags)
str << "Input devices: " << inputDevices.size() << '\n';
for (auto device : inputDevices) {
str << " " << formatValueQDebug(device->type())
- << " \"" << device->name() << "\", ";
+ << " \"" << device->name() << "\",";
if (!device->seatName().isEmpty())
- str << '"' << device->seatName() << '"';
+ str << " seat: \"" << device->seatName() << '"';
str << " capabilities:";
const auto capabilities = device->capabilities();
if (capabilities.testFlag(QInputDevice::Capability::Position))
@@ -822,6 +849,11 @@ QString qtDiag(unsigned flags)
str << " TangentialPressure";
if (capabilities.testFlag(QInputDevice::Capability::ZPosition))
str << " ZPosition";
+ if (!device->availableVirtualGeometry().isNull()) {
+ const auto r = device->availableVirtualGeometry();
+ str << " availableVirtualGeometry: " << r.width() << 'x' << r.height()
+ << Qt::forcesign << r.x() << r.y() << Qt::noforcesign;
+ }
str << '\n';
}
str << "\n\n";
@@ -845,10 +877,10 @@ QString qtDiag(unsigned flags)
#ifdef Q_OS_WIN
// On Windows, this will provide addition GPU info similar to the output of dxdiag.
- using QWindowsApplication = QPlatformInterface::Private::QWindowsApplication;
+ using QWindowsApplication = QNativeInterface::Private::QWindowsApplication;
if (auto nativeWindowsApp = dynamic_cast<QWindowsApplication *>(QGuiApplicationPrivate::platformIntegration())) {
const QVariant gpuInfoV = nativeWindowsApp->gpuList();
- if (gpuInfoV.type() == QVariant::List) {
+ if (gpuInfoV.typeId() == QMetaType::QVariantList) {
const auto gpuList = gpuInfoV.toList();
for (int i = 0; i < gpuList.size(); ++i) {
const QString description =
diff --git a/src/qtdiag/qtdiag.h b/src/qtdiag/qtdiag.h
index 1317d5a9b..23467e0f2 100644
--- a/src/qtdiag/qtdiag.h
+++ b/src/qtdiag/qtdiag.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QTDIAG_H
#define QTDIAG_H
diff --git a/src/qtdiag/qtdiag.pro b/src/qtdiag/qtdiag.pro
deleted file mode 100644
index 40e841812..000000000
--- a/src/qtdiag/qtdiag.pro
+++ /dev/null
@@ -1,19 +0,0 @@
-include($$OUT_PWD/../../src/global/qttools-config.pri)
-QT_FOR_CONFIG += tools-private
-requires(qtConfig(qtdiag))
-
-CONFIG += console
-QT += core-private gui-private
-qtConfig(opengl): QT += opengl
-
-qtHaveModule(widgets): QT += widgets
-
-qtHaveModule(network) {
- QT += network
- DEFINES += NETWORK_DIAG
-}
-
-SOURCES += main.cpp qtdiag.cpp
-HEADERS += qtdiag.h
-
-load(qt_app)
diff --git a/src/qtpaths/CMakeLists.txt b/src/qtpaths/CMakeLists.txt
deleted file mode 100644
index 70d4d155f..000000000
--- a/src/qtpaths/CMakeLists.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-# Generated from qtpaths.pro.
-
-#####################################################################
-## qtpaths App:
-#####################################################################
-
-qt_internal_add_app(qtpaths
- SOURCES
- qtpaths.cpp
-)
-
-#### Keys ignored in scope 1:.:.:qtpaths.pro:<TRUE>:
-# QT_FOR_CONFIG = "tools-private"
-# _REQUIREMENTS = "qtConfig(qtpaths)"
-
-## Scopes:
-#####################################################################
-
-if(WIN32)
- set_target_properties(qtpaths PROPERTIES
- WIN32_EXECUTABLE FALSE
- )
-endif()
diff --git a/src/qtpaths/qtpaths.cpp b/src/qtpaths/qtpaths.cpp
deleted file mode 100644
index e03f27cd0..000000000
--- a/src/qtpaths/qtpaths.cpp
+++ /dev/null
@@ -1,311 +0,0 @@
-/****************************************************************************
- * *
- ** Copyright (C) 2016 Sune Vuorela <sune@kde.org>
- ** Contact: http://www.qt-project.org/
- **
- ** This file is part of the tools applications of the Qt Toolkit.
- **
- ** $QT_BEGIN_LICENSE:BSD$
- ** Commercial License Usage
- ** Licensees holding valid commercial Qt licenses may use this file in
- ** accordance with the commercial license agreement provided with the
- ** Software or, alternatively, in accordance with the terms contained in
- ** a written agreement between you and The Qt Company. For licensing terms
- ** and conditions see https://www.qt.io/terms-conditions. For further
- ** information use the contact form at https://www.qt.io/contact-us.
- **
- ** BSD License Usage
- ** Alternatively, you may use this file under the terms of the BSD license
- ** as follows:
- **
- ** "Redistribution and use in source and binary forms, with or without
- ** modification, are permitted provided that the following conditions are
- ** met:
- ** * Redistributions of source code must retain the above copyright
- ** notice, this list of conditions and the following disclaimer.
- ** * Redistributions in binary form must reproduce the above copyright
- ** notice, this list of conditions and the following disclaimer in
- ** the documentation and/or other materials provided with the
- ** distribution.
- ** * Neither the name of The Qt Company Ltd nor the names of its
- ** contributors may be used to endorse or promote products derived
- ** from this software without specific prior written permission.
- **
- **
- ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
- **
- ** $QT_END_LICENSE$
- **
- ****************************************************************************/
-
-#include <QCoreApplication>
-#include <QCommandLineParser>
-#include <QStandardPaths>
-#include <QHash>
-#include <QLibraryInfo>
-
-#include <algorithm>
-
-#include <stdio.h>
-
-QT_USE_NAMESPACE
-
-/**
- * Prints the string on stdout and appends a newline
- * \param string printable string
- */
-static void message(const QString &string)
-{
- fprintf(stdout, "%s\n", qPrintable(string));
-}
-
-/**
- * Writes error message and exits 1
- * \param message to write
- */
-Q_NORETURN static void error(const QString &message)
-{
- fprintf(stderr, "%s\n", qPrintable(message));
- ::exit(EXIT_FAILURE);
-}
-
-
-/*
- * NOTE: that DataLocation and CacheLocation are missing as
- * they don't really make sense for a utility like this because
- * they include the application name.
- */
-static const struct StringEnum {
- const char *stringvalue;
- QStandardPaths::StandardLocation enumvalue;
-} lookupTableData[] = {
- { "ApplicationsLocation", QStandardPaths::ApplicationsLocation },
- { "DesktopLocation", QStandardPaths::DesktopLocation },
- { "DocumentsLocation", QStandardPaths::DocumentsLocation },
- { "FontsLocation", QStandardPaths::FontsLocation },
- { "MusicLocation", QStandardPaths::MusicLocation },
- { "MoviesLocation", QStandardPaths::MoviesLocation },
- { "PicturesLocation", QStandardPaths::PicturesLocation },
- { "HomeLocation", QStandardPaths::HomeLocation },
- { "GenericCacheLocation", QStandardPaths::GenericCacheLocation },
- { "GenericDataLocation", QStandardPaths::GenericDataLocation },
- { "RuntimeLocation", QStandardPaths::RuntimeLocation },
- { "ConfigLocation", QStandardPaths::ConfigLocation },
- { "GenericConfigLocation", QStandardPaths::GenericConfigLocation },
- { "DownloadLocation", QStandardPaths::DownloadLocation }
-};
-
-/**
- * \return available types as a QStringList.
- */
-static QStringList types()
-{
- QStringList typelist;
- for (const StringEnum &se : lookupTableData)
- typelist << QString::fromLatin1(se.stringvalue);
- std::sort(typelist.begin(), typelist.end());
- return typelist;
-}
-
-/**
- * Tries to parse the location string into a StandardLocation or alternatively
- * calls \ref error with a error message
- */
-static QStandardPaths::StandardLocation parseLocationOrError(const QString &locationString)
-{
- for (const StringEnum &se : lookupTableData)
- if (locationString == QLatin1String(se.stringvalue))
- return se.enumvalue;
-
- QString message = QCoreApplication::translate("qtpaths", "Unknown location: %1");
- error(message.arg(locationString));
-}
-
-/**
- * searches for exactly one remaining argument and returns it.
- * If not found, \ref error is called with a error message.
- * \param parser to ask for remaining arguments
- * \return one extra argument
- */
-static QString searchStringOrError(QCommandLineParser *parser)
-{
- int positionalArgumentCount = parser->positionalArguments().size();
- if (positionalArgumentCount != 1)
- error(QCoreApplication::translate("qtpaths", "Exactly one argument needed as searchitem"));
- return parser->positionalArguments().constFirst();
-}
-
-int main(int argc, char **argv)
-{
- QCoreApplication app(argc, argv);
- app.setApplicationVersion("1.0");
-
-#ifdef Q_OS_WIN
- const QLatin1Char pathsep(';');
-#else
- const QLatin1Char pathsep(':');
-#endif
-
- QCommandLineParser parser;
- parser.setApplicationDescription(QCoreApplication::translate("qtpaths", "Command line client to QStandardPaths"));
- parser.addPositionalArgument(QCoreApplication::translate("qtpaths", "[name]"), QCoreApplication::tr("Name of file or directory"));
- parser.addHelpOption();
- parser.addVersionOption();
-
- //setting up options
- QCommandLineOption types(QStringLiteral("types"), QCoreApplication::translate("qtpaths", "Available location types."));
- parser.addOption(types);
-
- QCommandLineOption paths(QStringLiteral("paths"), QCoreApplication::translate("qtpaths", "Find paths for <type>."), QStringLiteral("type"));
- parser.addOption(paths);
-
- QCommandLineOption writablePath(QStringLiteral("writable-path"),
- QCoreApplication::translate("qtpaths", "Find writable path for <type>."), QStringLiteral("type"));
- parser.addOption(writablePath);
-
- QCommandLineOption locateDir(QStringList() << QStringLiteral("locate-dir") << QStringLiteral("locate-directory"),
- QCoreApplication::translate("qtpaths", "Locate directory [name] in <type>."), QStringLiteral("type"));
- parser.addOption(locateDir);
-
- QCommandLineOption locateDirs(QStringList() << QStringLiteral("locate-dirs") << QStringLiteral("locate-directories"),
- QCoreApplication::translate("qtpaths", "Locate directories [name] in all paths for <type>."), QStringLiteral("type"));
- parser.addOption(locateDirs);
-
- QCommandLineOption locateFile(QStringLiteral("locate-file"),
- QCoreApplication::translate("qtpaths", "Locate file [name] for <type>."), QStringLiteral("type"));
- parser.addOption(locateFile);
-
- QCommandLineOption locateFiles(QStringLiteral("locate-files"),
- QCoreApplication::translate("qtpaths", "Locate files [name] in all paths for <type>."), QStringLiteral("type"));
- parser.addOption(locateFiles);
-
- QCommandLineOption findExe(QStringList() << QStringLiteral("find-exe") << QStringLiteral("find-executable"),
- QCoreApplication::translate("qtpaths", "Find executable with [name]."));
- parser.addOption(findExe);
-
- QCommandLineOption display(QStringList() << QStringLiteral("display"),
- QCoreApplication::translate("qtpaths", "Prints user readable name for <type>."), QStringLiteral("type"));
- parser.addOption(display);
-
- QCommandLineOption testmode(QStringList() << QStringLiteral("testmode") << QStringLiteral("test-mode"),
- QCoreApplication::translate("qtpaths", "Use paths specific for unit testing."));
- parser.addOption(testmode);
-
- QCommandLineOption qtversion(QStringLiteral("qt-version"), QCoreApplication::translate("qtpaths", "Qt version."));
- parser.addOption(qtversion);
-
- QCommandLineOption installprefix(QStringLiteral("install-prefix"), QCoreApplication::translate("qtpaths", "Installation prefix for Qt."));
- parser.addOption(installprefix);
-
- QCommandLineOption bindir(QStringList() << QStringLiteral("binaries-dir") << QStringLiteral("binaries-directory"),
- QCoreApplication::translate("qtpaths", "Location of Qt executables."));
- parser.addOption(bindir);
-
- QCommandLineOption plugindir(QStringList() << QStringLiteral("plugin-dir") << QStringLiteral("plugin-directory"),
- QCoreApplication::translate("qtpaths", "Location of Qt plugins."));
- parser.addOption(plugindir);
-
- parser.process(app);
-
- QStandardPaths::setTestModeEnabled(parser.isSet(testmode));
-
- QStringList results;
- if (parser.isSet(qtversion)) {
- QString qtversionstring = QString::fromLatin1(qVersion());
- results << qtversionstring;
- }
-
- if (parser.isSet(installprefix)) {
- QString path = QLibraryInfo::path(QLibraryInfo::PrefixPath);
- results << path;
- }
-
- if (parser.isSet(bindir)) {
- QString path = QLibraryInfo::path(QLibraryInfo::BinariesPath);
- results << path;
- }
-
- if (parser.isSet(plugindir)) {
- QString path = QLibraryInfo::path(QLibraryInfo::PluginsPath);
- results << path;
- }
-
- if (parser.isSet(types)) {
- QStringList typesList = ::types();
- results << typesList.join('\n');
- }
-
- if (parser.isSet(display)) {
- QStandardPaths::StandardLocation location = parseLocationOrError(parser.value(display));
- QString text = QStandardPaths::displayName(location);
- results << text;
- }
-
- if (parser.isSet(paths)) {
- QStandardPaths::StandardLocation location = parseLocationOrError(parser.value(paths));
- QStringList paths = QStandardPaths::standardLocations(location);
- results << paths.join(pathsep);
- }
-
- if (parser.isSet(writablePath)) {
- QStandardPaths::StandardLocation location = parseLocationOrError(parser.value(writablePath));
- QString path = QStandardPaths::writableLocation(location);
- results << path;
- }
-
- if (parser.isSet(findExe)) {
- QString searchitem = searchStringOrError(&parser);
- QString path = QStandardPaths::findExecutable(searchitem);
- results << path;
- }
-
- if (parser.isSet(locateDir)) {
- QStandardPaths::StandardLocation location = parseLocationOrError(parser.value(locateDir));
- QString searchitem = searchStringOrError(&parser);
- QString path = QStandardPaths::locate(location, searchitem, QStandardPaths::LocateDirectory);
- results << path;
- }
-
- if (parser.isSet(locateFile)) {
- QStandardPaths::StandardLocation location = parseLocationOrError(parser.value(locateFile));
- QString searchitem = searchStringOrError(&parser);
- QString path = QStandardPaths::locate(location, searchitem, QStandardPaths::LocateFile);
- results << path;
- }
-
- if (parser.isSet(locateDirs)) {
- QStandardPaths::StandardLocation location = parseLocationOrError(parser.value(locateDirs));
- QString searchitem = searchStringOrError(&parser);
- QStringList paths = QStandardPaths::locateAll(location, searchitem, QStandardPaths::LocateDirectory);
- results << paths.join(pathsep);
- }
-
- if (parser.isSet(locateFiles)) {
- QStandardPaths::StandardLocation location = parseLocationOrError(parser.value(locateFiles));
- QString searchitem = searchStringOrError(&parser);
- QStringList paths = QStandardPaths::locateAll(location, searchitem, QStandardPaths::LocateFile);
- results << paths.join(pathsep);
- }
- if (results.isEmpty()) {
- parser.showHelp();
- } else if (results.size() == 1) {
- const QString &item = results.first();
- message(item);
- if (item.isEmpty())
- return EXIT_FAILURE;
- } else {
- QString errorMessage = QCoreApplication::translate("qtpaths", "Several options given, only one is supported at a time.");
- error(errorMessage);
- }
- return EXIT_SUCCESS;
-}
diff --git a/src/qtpaths/qtpaths.pro b/src/qtpaths/qtpaths.pro
deleted file mode 100644
index f4f69b981..000000000
--- a/src/qtpaths/qtpaths.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-include($$OUT_PWD/../../src/global/qttools-config.pri)
-QT_FOR_CONFIG += tools-private
-requires(qtConfig(qtpaths))
-
-SOURCES = qtpaths.cpp
-QT = core
-win32:CONFIG += console
-
-load(qt_app)
diff --git a/src/qtplugininfo/CMakeLists.txt b/src/qtplugininfo/CMakeLists.txt
index cfc583428..a7d2f7a21 100644
--- a/src/qtplugininfo/CMakeLists.txt
+++ b/src/qtplugininfo/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qtplugininfo.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qtplugininfo App:
@@ -11,7 +12,3 @@ qt_internal_add_app(qtplugininfo
set_target_properties(qtplugininfo PROPERTIES
WIN32_EXECUTABLE FALSE
)
-
-#### Keys ignored in scope 1:.:.:qtplugininfo.pro:<TRUE>:
-# QT_FOR_CONFIG = "tools-private"
-# _REQUIREMENTS = "qtConfig(qtplugininfo)"
diff --git a/src/qtplugininfo/qtplugininfo.cpp b/src/qtplugininfo/qtplugininfo.cpp
index dcda19aff..ababb8ec3 100644
--- a/src/qtplugininfo/qtplugininfo.cpp
+++ b/src/qtplugininfo/qtplugininfo.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Volker Krause <volker.krause@kdab.com>
-** Copyright (C) 2016 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Volker Krause <volker.krause@kdab.com>
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QCommandLineParser>
#include <QCoreApplication>
@@ -55,7 +30,7 @@ int main(int argc, char** argv)
QCoreApplication::setApplicationVersion(QStringLiteral(QT_VERSION_STR));
QCommandLineParser parser;
- parser.setApplicationDescription(QStringLiteral("Qt5 plugin meta-data dumper"));
+ parser.setApplicationDescription(QStringLiteral("Qt plugin meta-data dumper"));
QCommandLineOption jsonFormatOption(QStringList() << "f" << "json-format",
QStringLiteral("Print JSON data as: indented, compact"), QStringLiteral("format"));
QCommandLineOption fullJsonOption("full-json",
diff --git a/src/qtplugininfo/qtplugininfo.pro b/src/qtplugininfo/qtplugininfo.pro
deleted file mode 100644
index 724b83b4e..000000000
--- a/src/qtplugininfo/qtplugininfo.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-include($$OUT_PWD/../../src/global/qttools-config.pri)
-QT_FOR_CONFIG += tools-private
-requires(qtConfig(qtplugininfo))
-
-SOURCES = qtplugininfo.cpp
-QT = core
-CONFIG += console
-
-load(qt_app)
diff --git a/src/shared/corecon/ccapi.h b/src/shared/corecon/ccapi.h
deleted file mode 100644
index 01ec1db54..000000000
--- a/src/shared/corecon/ccapi.h
+++ /dev/null
@@ -1,436 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef CCAPI_VERSIONED_H
-#define CCAPI_VERSIONED_H
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Core Connectivity API (Experimental)
- *
- * These interfaces for deploying to Windows Phone devices are available as
- * registered DLLs if the Windows Phone tools have been installed.
- * As the IDL is not part of the Windows SDK, these interfaces were crafted by
- * hand via the MSDN documentation and the information gathered by OLEView.
- * As a consequence, not all interfaces have been stubbed out, and not all
- * methods have been tested. This means that some methods may end up in the
- * wrong position in the vtable, causing unexpected behavior or crashes.
- * You have been warned!
- *
- * CoreConnectivity documentation:
- * http://msdn.microsoft.com/en-us/library/ee481381.aspx
- * SmartDevice Connectivity documentation:
- * http://msdn.microsoft.com/en-us/library/microsoft.smartdevice.connectivity.aspx
- *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-#include <windows.h>
-
-#ifndef CORECON_VER
-static_assert(false, "You must define the CoreCon version with CORECON_VER.");
-#endif
-
-#if CORECON_VER==11
-
-static const CLSID CLSID_ConMan_11 = { 0x349AB2E8, 0x71B6, 0x4069, 0xAD, 0x9C, 0x11, 0x70, 0x84, 0x9D, 0xA6, 0x4C };
-
-// Undefined
-struct ICcFormFactorContainer_11;
-struct ICcOSImage_11;
-struct ICcOSImageContainer_11;
-struct ICcPackageContainer_11;
-struct ICcProjectContainer_11;
-struct ICcServiceCategoryContainer_11;
-struct ICcServiceCB_11;
-struct ICcServiceInfo_11;
-struct ICcTransportStream_11;
-struct ICcTypeToArchitectureMap_11;
-
-// Defined
-struct ICcConnection_11;
-struct ICcCollection_11;
-struct ICcConnection3_11;
-struct ICcDatastore_11;
-struct ICcDevice_11;
-struct ICcDeviceContainer_11;
-struct ICcObject_11;
-struct ICcObjectContainer_11;
-struct ICcPlatform_11;
-struct ICcPlatformContainer_11;
-struct ICcProperty_11;
-struct ICcPropertyContainer_11;
-struct ICcServer_11;
-
-#elif CORECON_VER==12
-
-static const CLSID CLSID_ConMan_12 = { 0x2D0A16C9, 0x53D9, 0x42C1, 0xBC, 0xC2, 0x8D, 0x2A, 0x13, 0x5E, 0x21, 0x63 };
-
-// Undefined
-struct ICcFormFactorContainer_12;
-struct ICcOSImage_12;
-struct ICcOSImageContainer_12;
-struct ICcPackageContainer_12;
-struct ICcProjectContainer_12;
-struct ICcServiceCategoryContainer_12;
-struct ICcServiceCB_12;
-struct ICcServiceInfo_12;
-struct ICcTransportStream_12;
-struct ICcTypeToArchitectureMap_12;
-
-// Defined
-struct ICcConnection_12;
-struct ICcCollection_12;
-struct ICcConnection3_12;
-struct ICcDatastore_12;
-struct ICcDevice_12;
-struct ICcDeviceContainer_12;
-struct ICcObject_12;
-struct ICcObjectContainer_12;
-struct ICcPlatform_12;
-struct ICcPlatformContainer_12;
-struct ICcProperty_12;
-struct ICcPropertyContainer_12;
-struct ICcServer_12;
-
-#endif
-
-
-#ifndef CCAPI_H
-#define CCAPI_H
-
-typedef struct tagFileInfo{
- LONG m_FileAttribues;
- LONGLONG m_FileSize;
- FILETIME m_CreationTime;
- FILETIME m_LastAccessTime;
- FILETIME m_LastWriteTime;
-} FileInfo;
-
-typedef struct tagFileVerifyVersion{
- DWORD m_Major;
- DWORD m_Minor;
- DWORD m_Build;
- DWORD m_Revision;
-} FileVerifyVersion;
-
-typedef struct tagFileVerifyInfo{
- FileVerifyVersion m_AssemblyVersion;
- FileVerifyVersion m_Win32Version;
- BSTR m_Culture;
- BYTE m_PublicKeyToken[12 + 3/*PUBLIC_KEY_TOKEN_LENGTH*/]; //### What is the key length?
- DWORD m_Flags;
-} FileVerifyInfo;
-
-typedef struct tagFileVerifyReference{
- BSTR m_Name;
- BSTR m_SourcePath;
- FileVerifyInfo m_Info;
-} FileVerifyReference;
-
-typedef struct tagFileVerifyResult{
- DWORD m_Version;
- FileVerifyInfo _Info;
-} FileVerifyResult;
-
-typedef struct tagPlatformInfo{
- DWORD m_OSMajor;
- DWORD m_OSMinor;
- DWORD m_BuildNo;
- DWORD m_ProcessorArchitecture;
- DWORD m_InstructionSet;
-} SystemInfo;
-
-#endif // CCAPI_H
-
-#if CORECON_VER==11
-struct __declspec(uuid("{7A4AA9D3-0F9E-4CD4-8D52-62B6C0653752}")) ICcCollection_11 : public IDispatch
-#elif CORECON_VER==12
-struct __declspec(uuid("{9A83560F-377D-419F-B572-AEC3C1A44671}")) ICcCollection_12 : public IDispatch
-#endif
-{
- virtual HRESULT __stdcall get_Count(long *count) = 0;
-#if CORECON_VER==11
- virtual HRESULT __stdcall get_Item(long index, ICcObject_11 **object) = 0;
-#elif CORECON_VER==12
- virtual HRESULT __stdcall get_Item(long index, ICcObject_12 **object) = 0;
-#endif
- virtual HRESULT __stdcall get_NewEnum(IUnknown **val) = 0;
-};
-
-#if CORECON_VER==11
-struct __declspec(uuid("{CEF4C928-326F-49A9-B7E7-8FE7588B74B5}")) ICcConnection_11 : public IDispatch
-#elif CORECON_VER==12
-struct __declspec(uuid("{906D8E75-8AE6-46B5-B4B6-43B83D9A0948}")) ICcConnection_12 : public IDispatch
-#endif
-{
- virtual HRESULT __stdcall DeviceId(BSTR *deviceId) = 0;
- virtual HRESULT __stdcall GetSystemInfo(SystemInfo *systemInfo) = 0;
- virtual HRESULT __stdcall SendFile(BSTR desktopFile, BSTR deviceFile, DWORD creationFlags, BSTR customFileAction) = 0;
- virtual HRESULT __stdcall ReceiveFile(BSTR deviceFile, BSTR desktopFile, DWORD fileAction) = 0;
- virtual HRESULT __stdcall RemoveFile(BSTR deviceFile) = 0;
- virtual HRESULT __stdcall GetFileInfo(BSTR deviceFile, FileInfo *fileInfo) = 0;
- virtual HRESULT __stdcall SetFileInfo(BSTR deviceFile, FileInfo *fileInfo) = 0;
- virtual HRESULT __stdcall DeleteDirectory(BSTR deviceDirectory, VARIANT_BOOL removeAll) = 0;
- virtual HRESULT __stdcall MakeDirectory(BSTR deviceDirectory) = 0;
- virtual HRESULT __stdcall DownloadPackage(BSTR packageId) = 0;
- virtual HRESULT __stdcall LaunchProcess(BSTR executable, BSTR arguments, DWORD creationFlags, DWORD *processId, DWORD *processHandle) = 0;
- virtual HRESULT __stdcall TerminateProcess(DWORD processId) = 0;
- virtual HRESULT __stdcall GetProcessExitCode(DWORD processId, VARIANT_BOOL *processExited, DWORD *exitCode) = 0;
- virtual HRESULT __stdcall RegistryCreateKey(LONG key, BSTR subKey) = 0;
- virtual HRESULT __stdcall RegistryDeleteKey(LONG key, BSTR subKey) = 0;
- virtual HRESULT __stdcall RegistrySetValue(LONG key, BSTR subKey, BSTR valueName, DWORD type, BSTR data, DWORD length) = 0;
- virtual HRESULT __stdcall RegistryQueryValue(LONG key, BSTR subKey, BSTR valueName, DWORD type, WCHAR *value, LONG *length) = 0;
- virtual HRESULT __stdcall RegistryDeleteValue(LONG key, BSTR subKey, BSTR valueName) = 0;
- virtual HRESULT __stdcall IsConnected(VARIANT_BOOL *connected) = 0;
- virtual HRESULT __stdcall VerifyFilesInstalled(DWORD arraySize, FileVerifyReference *infoArray, FileVerifyResult *existenceArray) = 0;
- virtual HRESULT __stdcall ConnectDevice() = 0;
- virtual HRESULT __stdcall DisconnectDevice() = 0;
- virtual HRESULT __stdcall SearchFileSystem(BSTR criteria, BSTR startingDirectory, SAFEARRAY/*<BSTR>*/ *results) = 0;
-#if CORECON_VER==11
- virtual HRESULT __stdcall CreateStream(BSTR streamId, DWORD timeout, ICcServiceCB_11 *callback, DWORD *cookieId, ICcTransportStream_11 **stream) = 0;
-#elif CORECON_VER==12
- virtual HRESULT __stdcall CreateStream(BSTR streamId, DWORD timeout, ICcServiceCB_12 *callback, DWORD *cookieId, ICcTransportStream_12 **stream) = 0;
-#endif
- virtual HRESULT __stdcall EnumerateProcesses(SAFEARRAY/*<BSTR>*/ **processes, SAFEARRAY/*<DWORD>*/ **processIds) = 0;
- virtual HRESULT __stdcall CloseProcessHandle(DWORD processHandle) = 0;
-};
-
-#if CORECON_VER==11
-struct __declspec(uuid("{F4B43EA3-3106-4D3D-94E3-084D4136C40C}")) ICcConnection3_11 : public IUnknown
-#elif CORECON_VER==12
-struct __declspec(uuid("{B158FE65-7DCC-4809-9054-A7B52FD43DE3}")) ICcConnection3_12 : public IUnknown
-#endif
-{
- virtual HRESULT __stdcall GetInstalledApplicationCount(int *count) = 0; // E_NOTIMPL
- virtual HRESULT __stdcall GetInstalledApplicationIDs(SAFEARRAY/*<BSTR>*/ **productIds, SAFEARRAY/*<BSTR>*/ **instanceIds) = 0;
- virtual HRESULT __stdcall IsApplicationInstalled(BSTR productId, VARIANT_BOOL *installed) = 0;
- virtual HRESULT __stdcall InstallApplication(BSTR productId, BSTR instanceId, BSTR genre, BSTR iconPath, BSTR xapPath) = 0;
- virtual HRESULT __stdcall UpdateApplication(BSTR productId, BSTR instanceId, BSTR genre, BSTR applicationPath, BSTR xapPath) = 0;
- virtual HRESULT __stdcall GetInstalledFileInfo(BSTR productId, BSTR fileName, FileInfo *fileInfo) = 0; // E_NOTIMPL
- virtual HRESULT __stdcall IsApplicationRunning(BSTR productId, VARIANT_BOOL *isRunning) = 0; // E_NOTIMPL
- virtual HRESULT __stdcall UninstallApplication(BSTR productId) = 0;
- virtual HRESULT __stdcall LaunchApplicationWithService(BSTR productId, BSTR serviceInfo) = 0; // E_NOTIMPL
- virtual HRESULT __stdcall TerminateRunningApplicationInstances(BSTR productId) = 0;
- virtual HRESULT __stdcall LaunchApplication(BSTR productId, DWORD *processId) = 0;
-
-// Untested
- virtual HRESULT __stdcall UpdateInstalledFile(BSTR productId, BSTR fileRelativePath, BSTR sourceFilePath, VARIANT_BOOL updateFileInfo) = 0;
- virtual HRESULT __stdcall UpdateInstalledFilesInfo(BSTR productId, SAFEARRAY/*<BSTR>*/ *fileNames, SAFEARRAY/*<BSTR>*/ *xapRelativePaths) = 0;
- virtual HRESULT __stdcall UpdateInstalledFiles(BSTR productId, SAFEARRAY/*<BSTR>*/ *fileNames, SAFEARRAY/*<BSTR>*/ *xapRelativePaths) = 0;
- virtual HRESULT __stdcall ActivateDevice() = 0;
-};
-
-#if CORECON_VER==11
-struct __declspec(uuid("{5F25394E-D9B6-4F8E-A0DF-325610A35BFA}")) ICcConnection4_11 : public IUnknown
-#elif CORECON_VER==12
-struct __declspec(uuid("{68CBC76F-ADF6-4586-B495-E34771B8EAC2}")) ICcConnection4_12 : public IUnknown
-#endif
-{
- virtual HRESULT __stdcall GetDirectoryListing(BSTR deviceDirPath, SAFEARRAY/*<BSTR>*/ **listing) = 0;
- virtual HRESULT __stdcall GetApplicationType(BSTR productId, DWORD *type) = 0;
- virtual HRESULT __stdcall GetEndPoints(int localPort, BSTR localIp, BSTR remoteIp, int remotePort) = 0;
-};
-
-#if CORECON_VER==11
-struct __declspec(uuid("{EDB0A0CA-F0F8-4EBF-9D31-43E182569A5A}")) ICcDatastore_11 : public IDispatch
-#elif CORECON_VER==12
-struct __declspec(uuid("{2E6AF7C6-CBAB-4E6E-B78A-90A04A2CE523}")) ICcDatastore_12 : public IDispatch
-#endif
-{
- virtual HRESULT __stdcall Save() = 0;
- virtual HRESULT __stdcall RegisterRefreshEvent(BSTR eventName) = 0;
- virtual HRESULT __stdcall UnregisterRefreshEvent() = 0;
-#if CORECON_VER==11
- virtual HRESULT __stdcall get_DeviceContainer(ICcDeviceContainer_11 **dc) = 0;
- virtual HRESULT __stdcall get_OSImageContainer(ICcOSImageContainer_11 **oc) = 0;
- virtual HRESULT __stdcall get_PackageContainer(ICcPackageContainer_11 **pc) = 0;
- virtual HRESULT __stdcall get_PlatformContainer(ICcPlatformContainer_11 **pc) = 0;
- virtual HRESULT __stdcall get_PropertyContainer(ICcPropertyContainer_11 **pc) = 0;
- virtual HRESULT __stdcall get_ServiceCategoryContainer(ICcServiceCategoryContainer_11 **scc) = 0;
-#elif CORECON_VER==12
- virtual HRESULT __stdcall get_DeviceContainer(ICcDeviceContainer_12 **dc) = 0;
- virtual HRESULT __stdcall get_OSImageContainer(ICcOSImageContainer_12 **oc) = 0;
- virtual HRESULT __stdcall get_PackageContainer(ICcPackageContainer_12 **pc) = 0;
- virtual HRESULT __stdcall get_PlatformContainer(ICcPlatformContainer_12 **pc) = 0;
- virtual HRESULT __stdcall get_PropertyContainer(ICcPropertyContainer_12 **pc) = 0;
- virtual HRESULT __stdcall get_ServiceCategoryContainer(ICcServiceCategoryContainer_12 **scc) = 0;
-#endif
- virtual HRESULT __stdcall get_Version(BSTR *version) = 0;
-};
-
-#if CORECON_VER==11
-struct __declspec(uuid("{971BF639-8C53-4057-B635-375D7BCDFF3E}")) ICcDevice_11 : public IDispatch
-#elif CORECON_VER==12
-struct __declspec(uuid("{22773666-28CC-4AD6-9F07-E06BE40EEDB3}")) ICcDevice_12 : public IDispatch
-#endif
-{
- virtual HRESULT __stdcall ClearOSImage() = 0;
- virtual HRESULT __stdcall ClearServiceMap(BSTR serviceCatetoryId) = 0;
-#if CORECON_VER==11
- virtual HRESULT __stdcall GetOSImage(ICcOSImage_11 **image) = 0;
- virtual HRESULT __stdcall GetServiceMap(BSTR serviceCategoryId, ICcServiceInfo_11 **serviceInfo) = 0;
-#elif CORECON_VER==12
- virtual HRESULT __stdcall GetOSImage(ICcOSImage_12 **image) = 0;
- virtual HRESULT __stdcall GetServiceMap(BSTR serviceCategoryId, ICcServiceInfo_12 **serviceInfo) = 0;
-#endif
- virtual HRESULT __stdcall SetOSImage(BSTR osImage) = 0;
- virtual HRESULT __stdcall SetServiceMap(BSTR serviceCategoryId, BSTR serviceInfoId) = 0;
-};
-
-#if CORECON_VER==11
-struct __declspec(uuid("{88152DD3-5ECB-47A2-8F15-610C4C390122}")) ICcDeviceContainer_11 : public IDispatch
-#elif CORECON_VER==12
-struct __declspec(uuid("{D747386E-3EAB-4E04-8DD5-7037D192A06D}")) ICcDeviceContainer_12 : public IDispatch
-#endif
-{
-};
-
-#if CORECON_VER==11
-struct __declspec(uuid("{B669EC21-E8FC-42E4-AEC5-8F0EF3673AB8}")) ICcObject_11 : public IDispatch
-#elif CORECON_VER==12
-struct __declspec(uuid("{F84BC223-B877-43A2-BE9C-68CFB0020732}")) ICcObject_12 : public IDispatch
-#endif
-{
- virtual HRESULT __stdcall get_Name(BSTR *name) = 0;
- virtual HRESULT __stdcall put_Name(BSTR name) = 0;
- virtual HRESULT __stdcall get_ID(BSTR *id) = 0;
- virtual HRESULT __stdcall get_IsProtected(VARIANT_BOOL *isProtected) = 0;
-#if CORECON_VER==11
- virtual HRESULT __stdcall get_PropertyContainer(ICcPropertyContainer_11 **pc) = 0;
-#elif CORECON_VER==12
- virtual HRESULT __stdcall get_PropertyContainer(ICcPropertyContainer_12 **pc) = 0;
-#endif
-};
-
-#if CORECON_VER==11
-struct __declspec(uuid("{1C0048A9-A73F-41B3-BD75-467D615CB9E5}")) ICcObjectContainer_11 : public IDispatch
-#elif CORECON_VER==12
-struct __declspec(uuid("{ADEFAC99-D191-46A1-B42F-58B22755C293}")) ICcObjectContainer_12 : public IDispatch
-#endif
-{
-#if CORECON_VER==11
- virtual HRESULT __stdcall FindObject(BSTR nameOrId, ICcObject_11 **object) = 0;
- virtual HRESULT __stdcall EnumerateObjects(ICcCollection_11 **collection) = 0;
- virtual HRESULT __stdcall AddObject(BSTR name, BSTR id, ICcObject_11 **object) = 0;
-#elif CORECON_VER==12
- virtual HRESULT __stdcall FindObject(BSTR nameOrId, ICcObject_12 **object) = 0;
- virtual HRESULT __stdcall EnumerateObjects(ICcCollection_12 **collection) = 0;
- virtual HRESULT __stdcall AddObject(BSTR name, BSTR id, ICcObject_12 **object) = 0;
-#endif
- virtual HRESULT __stdcall DeleteObject(BSTR nameOrId) = 0;
-};
-
-#if CORECON_VER==11
-struct __declspec(uuid("{2E12E75A-1625-44B6-B527-7A1E7ED61577}")) ICcPlatform_11 : public IDispatch
-#elif CORECON_VER==12
-struct __declspec(uuid("{9124335F-7D55-443D-A86C-4DBC245A1051}")) ICcPlatform_12 : public IDispatch
-#endif
-{
-#if CORECON_VER==11
- virtual HRESULT __stdcall get_ProjectContainer(ICcProjectContainer_11 **container) = 0;
- virtual HRESULT __stdcall get_DeviceContainer(ICcDeviceContainer_11 **container) = 0;
- virtual HRESULT __stdcall get_FormFactorContainer(ICcFormFactorContainer_11 **container) = 0;
- virtual HRESULT __stdcall get_TypeToArchitectureMap(ICcTypeToArchitectureMap_11 **map) = 0;
-#elif CORECON_VER==12
- virtual HRESULT __stdcall get_ProjectContainer(ICcProjectContainer_12 **container) = 0;
- virtual HRESULT __stdcall get_DeviceContainer(ICcDeviceContainer_12 **container) = 0;
- virtual HRESULT __stdcall get_FormFactorContainer(ICcFormFactorContainer_12 **container) = 0;
- virtual HRESULT __stdcall get_TypeToArchitectureMap(ICcTypeToArchitectureMap_12 **map) = 0;
-#endif
-};
-
-#if CORECON_VER==11
-struct __declspec(uuid("{C434B7DA-ABAA-428A-944A-3AF1A7419A92}")) ICcPlatformContainer_11 : public IDispatch
-#elif CORECON_VER==12
-struct __declspec(uuid("{2D405E9C-BBA4-406B-9E9F-A4E41CAC520C}")) ICcPlatformContainer_12 : public IDispatch
-#endif
-{
-};
-
-#if CORECON_VER==11
-struct __declspec(uuid("{A918FF41-F287-488D-BE16-99DBF54E331D}")) ICcProperty_11 : public IDispatch
-#elif CORECON_VER==12
-struct __declspec(uuid("{750F503B-6686-4715-81EB-9E23EA0FC424}")) ICcProperty_12 : public IDispatch
-#endif
-{
- virtual HRESULT __stdcall get_Value(BSTR *val) = 0;
- virtual HRESULT __stdcall set_Value(BSTR val) = 0;
- virtual HRESULT __stdcall AddPropertyContainer() = 0;
-};
-
-#if CORECON_VER==11
-struct __declspec(uuid("{9636B4A4-633C-4542-A809-9E96ABF01FA5}")) ICcPropertyContainer_11 : public IDispatch
-#elif CORECON_VER==12
-struct __declspec(uuid("{E92A5704-87B2-4059-81A2-C5C54424CF38}")) ICcPropertyContainer_12 : public IDispatch
-#endif
-{
-};
-
-#if CORECON_VER==11
-struct __declspec(uuid("{F19FF2DB-0A4E-4148-ABE3-47EE7E31194F}")) ICcServer_11 : public IDispatch
-#elif CORECON_VER==12
-struct __declspec(uuid("{D0D076C5-5C71-4947-A056-94E8E760DFFE}")) ICcServer_12 : public IDispatch
-#endif
-{
- virtual HRESULT __stdcall get_Locale(DWORD *locale) = 0;
- virtual HRESULT __stdcall put_Locale(DWORD *locale) = 0;
-#if CORECON_VER==11
- virtual HRESULT __stdcall GetDatastore(DWORD locale, ICcDatastore_11 **datastore) = 0;
- virtual HRESULT __stdcall GetConnection(ICcDevice_11 *device, DWORD timeout, ICcServiceCB_11 *callback, BSTR *connectionId, ICcConnection_11 **connection) = 0;
- virtual HRESULT __stdcall EnumerateConnections(DWORD sizeActual, DWORD *sizeReturned, BSTR *connections, VARIANT_BOOL *moreEntries) = 0;
- virtual HRESULT __stdcall GetConnectionFromId(BSTR connectionId, ICcConnection_11 **connection) = 0;
-#elif CORECON_VER==12
- virtual HRESULT __stdcall GetDatastore(DWORD locale, ICcDatastore_12 **datastore) = 0;
- virtual HRESULT __stdcall GetConnection(ICcDevice_12 *device, DWORD timeout, ICcServiceCB_12 *callback, BSTR *connectionId, ICcConnection_12 **connection) = 0;
- virtual HRESULT __stdcall EnumerateConnections(DWORD sizeActual, DWORD *sizeReturned, BSTR *connections, VARIANT_BOOL *moreEntries) = 0;
- virtual HRESULT __stdcall GetConnectionFromId(BSTR connectionId, ICcConnection_12 **connection) = 0;
-#endif
-};
-
-#endif
diff --git a/src/shared/corecon/ccapi_11.h b/src/shared/corecon/ccapi_11.h
deleted file mode 100644
index b863ad73c..000000000
--- a/src/shared/corecon/ccapi_11.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef CCAPI_11_H
-#define CCAPI_11_H
-
-#define CORECON_VER 11
-#include "ccapi.h"
-
-#define CLSID_ConMan CLSID_ConMan_11;
-typedef ICcCollection_11 ICcCollection;
-typedef ICcConnection_11 ICcConnection;
-typedef ICcConnection3_11 ICcConnection3;
-typedef ICcConnection4_11 ICcConnection4;
-typedef ICcDatastore_11 ICcDatastore;
-typedef ICcDevice_11 ICcDevice;
-typedef ICcDeviceContainer_11 ICcDeviceContainer;
-typedef ICcObject_11 ICcObject;
-typedef ICcObjectContainer_11 ICcObjectContainer;
-typedef ICcPlatform_11 ICcPlatform;
-typedef ICcPlatformContainer_11 ICcPlatformContainer;
-typedef ICcProperty_11 ICcProperty;
-typedef ICcPropertyContainer_11 ICcPropertyContainer;
-typedef ICcServer_11 ICcServer;
-
-#endif // CCAPI_11_H
diff --git a/src/shared/corecon/ccapi_12.h b/src/shared/corecon/ccapi_12.h
deleted file mode 100644
index d4f9bb853..000000000
--- a/src/shared/corecon/ccapi_12.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef CCAPI_12_H
-#define CCAPI_12_H
-
-#define CORECON_VER 12
-#include "ccapi.h"
-
-#define CLSID_ConMan CLSID_ConMan_12;
-typedef ICcCollection_12 ICcCollection;
-typedef ICcConnection_12 ICcConnection;
-typedef ICcConnection3_12 ICcConnection3;
-typedef ICcConnection4_12 ICcConnection4;
-typedef ICcDatastore_12 ICcDatastore;
-typedef ICcDevice_12 ICcDevice;
-typedef ICcDeviceContainer_12 ICcDeviceContainer;
-typedef ICcObject_12 ICcObject;
-typedef ICcObjectContainer_12 ICcObjectContainer;
-typedef ICcPlatform_12 ICcPlatform;
-typedef ICcPlatformContainer_12 ICcPlatformContainer;
-typedef ICcProperty_12 ICcProperty;
-typedef ICcPropertyContainer_12 ICcPropertyContainer;
-typedef ICcServer_12 ICcServer;
-
-#endif // CCAPI_12_H
diff --git a/src/shared/corecon/corecon.cpp b/src/shared/corecon/corecon.cpp
deleted file mode 100644
index faa0a2971..000000000
--- a/src/shared/corecon/corecon.cpp
+++ /dev/null
@@ -1,466 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "corecon.h"
-
-// Force all versions of CoreCon in scope
-#ifdef CCAPI_VERSIONED_H
-#undef CCAPI_VERSIONED_H
-#endif
-#ifdef CORECON_VER
-#undef CORECON_VER
-#endif
-#define CORECON_VER 11
-#include "ccapi.h"
-
-#ifdef CCAPI_VERSIONED_H
-#undef CCAPI_VERSIONED_H
-#endif
-#ifdef CORECON_VER
-#undef CORECON_VER
-#endif
-#define CORECON_VER 12
-#include "ccapi.h"
-
-#include <QtCore/QString>
-#include <QtCore/QMutex>
-#include <QtCore/QMutexLocker>
-
-#include <comdef.h>
-#include <wrl.h>
-using namespace Microsoft::WRL;
-
-QT_USE_NAMESPACE
-
-Q_LOGGING_CATEGORY(lcCoreCon, "qt.corecon")
-
-#define wchar(str) reinterpret_cast<LPCWSTR>(str.utf16())
-
-template <typename ObjectContainerType, typename ContainerType, typename CollectionType>
-static inline HRESULT collectionFor(const ComPtr<ContainerType> &container, ComPtr<CollectionType> &collection)
-{
- ComPtr<ObjectContainerType> objectContainer;
- HRESULT hr = container.As(&objectContainer);
- if (FAILED(hr))
- return hr;
- hr = objectContainer->EnumerateObjects(&collection);
- return hr;
-}
-
-class CoreConDevicePrivate
-{
-public:
- QString name;
- QString id;
- bool isEmulator;
- int version;
-
-protected:
- CoreConDevicePrivate(int version) : version(version) { }
-};
-
-template <typename DeviceType>
-class CoreConDevicePrivateVersioned : public CoreConDevicePrivate
-{
-public:
- CoreConDevicePrivateVersioned(int version) : CoreConDevicePrivate(version) { }
- ComPtr<DeviceType> handle;
-};
-
-CoreConDevice::CoreConDevice(int version)
-{
- if (version == 11)
- d_ptr.reset(new CoreConDevicePrivateVersioned<ICcDevice_11>(version));
- else if (version == 12)
- d_ptr.reset(new CoreConDevicePrivateVersioned<ICcDevice_12>(version));
- else
- qCCritical(lcCoreCon) << "Invalid CoreCon version specified:" << version;
-}
-
-CoreConDevice::~CoreConDevice()
-{
-}
-
-QString CoreConDevice::name() const
-{
- Q_D(const CoreConDevice);
- return d->name;
-}
-
-QString CoreConDevice::id() const
-{
- Q_D(const CoreConDevice);
- return d->id;
-}
-
-bool CoreConDevice::isEmulator() const
-{
- Q_D(const CoreConDevice);
- return d->isEmulator;
-}
-
-Qt::HANDLE CoreConDevice::handle() const
-{
- Q_D(const CoreConDevice);
- if (d->version == 11)
- return static_cast<const CoreConDevicePrivateVersioned<ICcDevice_11> *>(d)->handle.Get();
- if (d->version == 12)
- return static_cast<const CoreConDevicePrivateVersioned<ICcDevice_12> *>(d)->handle.Get();
- return 0;
-}
-
-class ComInitializer
-{
-protected:
- ComInitializer()
- {
- hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
- if (FAILED(hr))
- qCDebug(lcCoreCon) << "Failed to initialize COM.";
- }
- virtual ~ComInitializer()
- {
- if (SUCCEEDED(hr))
- CoUninitialize();
- }
- HRESULT hr;
-};
-
-class CoreConServerPrivate : private ComInitializer
-{
-public:
- CoreConServerPrivate(int version) : version(version), langModule(0)
- {
- }
- ~CoreConServerPrivate()
- {
- qDeleteAll(devices);
- devices.clear();
- }
-
- virtual bool initialize() = 0;
-
- int version;
- QList<CoreConDevice *> devices;
- HMODULE langModule;
-
- template <typename T>
- static CoreConDevicePrivateVersioned<T> *deviceHandle(CoreConDevice *device)
- {
- return static_cast<CoreConDevicePrivateVersioned<T> *>(device->d_ptr.data());
- }
-};
-
-template <typename ServerType, typename DataStoreType, typename PlatformType,
- typename PlatformContainerType, typename CollectionType, typename DeviceType, typename DeviceContainerType,
- typename ObjectType, typename ObjectContainerType, typename PropertyType, typename PropertyContainerType>
-class CoreConServerPrivateVersioned : public CoreConServerPrivate
-{
-public:
- CoreConServerPrivateVersioned(CoreConServer *server, int version)
- : CoreConServerPrivate(version)
- {
- HRESULT hr = E_FAIL;
- if (version == 11)
- hr = CoCreateInstance(CLSID_ConMan_11, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&handle));
- else if (version == 12)
- hr = CoCreateInstance(CLSID_ConMan_12, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&handle));
- else
- qCCritical(lcCoreCon) << "Invalid CoreCon version specified:" << version;
-
- if (FAILED(hr))
- qCWarning(lcCoreCon) << "Failed to initialize connection server." << server->formatError(hr);
-
- // The language module is available as long as the above succeeded
- langModule = GetModuleHandle(L"conmanui");
- }
-
- bool initialize()
- {
- ComPtr<DataStoreType> dataStore;
- HRESULT hr = handle->GetDatastore(GetUserDefaultLCID(), &dataStore);
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "Failed to obtain the data store. HRESULT: 0x%x", hr);
- return false;
- }
-
- ComPtr<PlatformContainerType> platformContainer;
- hr = dataStore->get_PlatformContainer(&platformContainer);
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "Failed to obtain the platform container. HRESULT: 0x%x", hr);
- return false;
- }
-
- ComPtr<CollectionType> platformCollection;
- hr = collectionFor<ObjectContainerType>(platformContainer, platformCollection);
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "Failed to obtain the platform collection. HRESULT: 0x%x", hr);
- return false;
- }
-
- long platformCount;
- hr = platformCollection->get_Count(&platformCount);
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "Failed to obtain the platform object count. HRESULT: 0x%x", hr);
- return false;
- }
- for (long platformIndex = 0; platformIndex < platformCount; ++platformIndex) {
- ComPtr<ObjectType> platformObject;
- hr = platformCollection->get_Item(platformIndex, &platformObject);
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "\1: %d", platformIndex);
- continue;
- }
-
- ComPtr<PlatformType> platform;
- hr = platformObject.As(&platform);
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "\1: %d", platformIndex);
- continue;
- }
-
- ComPtr<DeviceContainerType> deviceContainer;
- hr = platform->get_DeviceContainer(&deviceContainer);
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "Failed to obtain the device container.. 0x%x", hr);
- continue;
- }
-
- ComPtr<CollectionType> deviceCollection;
- hr = collectionFor<ObjectContainerType>(deviceContainer, deviceCollection);
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "Failed to obtain the device object collection.. 0x%x", hr);
- continue;
- }
-
- long deviceCount;
- hr = deviceCollection->get_Count(&deviceCount);
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "Failed to obtain the device object count.. 0x%x", hr);
- continue;
- }
- for (long deviceIndex = 0; deviceIndex < deviceCount; ++deviceIndex) {
- QScopedPointer<CoreConDevice> device(new CoreConDevice(version));
-
- ComPtr<ObjectType> deviceObject;
- hr = deviceCollection->get_Item(deviceIndex, &deviceObject);
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "Failed to obtain the device object at index: %d", deviceIndex);
- continue;
- }
-
- hr = deviceObject.As(&deviceHandle<DeviceType>(device.data())->handle);
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "Failed to confirm a device from the object at index: %d", deviceIndex);
- continue;
- }
-
- _bstr_t deviceId;
- hr = deviceObject->get_ID(deviceId.GetAddress());
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "Failed to obtain device id at index: %d", deviceIndex);
- continue;
- }
- deviceHandle<DeviceType>(device.data())->id = QString::fromWCharArray(deviceId);
- _bstr_t deviceName;
- hr = deviceObject->get_Name(deviceName.GetAddress());
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "Failed to obtain device name at index: %d", deviceIndex);
- continue;
- }
- deviceHandle<DeviceType>(device.data())->name = QString::fromWCharArray(deviceName);
-
- ComPtr<PropertyContainerType> propertyContainer;
- hr = deviceObject->get_PropertyContainer(&propertyContainer);
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "Failed to obtain a property container at index: %d", deviceIndex);
- continue;
- }
-
- ComPtr<CollectionType> propertyCollection;
- hr = collectionFor<ObjectContainerType>(propertyContainer, propertyCollection);
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "Failed to obtain property collection of device at index: %d", deviceIndex);
- continue;
- }
-
- bool isPseudoDevice = false;
- long propertyCount;
- hr = propertyCollection->get_Count(&propertyCount);
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "Failed to obtain property count of device at index: %d", deviceIndex);
- continue;
- }
-
- for (long propertyIndex = 0; propertyIndex < propertyCount; ++propertyIndex) {
- ComPtr<ObjectType> propertyObject;
- hr = propertyCollection->get_Item(propertyIndex, &propertyObject);
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "Failed to obtain property at index: %d", propertyIndex);
- continue;
- }
-
- _bstr_t id;
- hr = propertyObject->get_ID(id.GetAddress());
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "Failed to obtain property id at index: %d", propertyIndex);
- continue;
- }
-
- ComPtr<PropertyType> property;
- hr = propertyObject.As(&property);
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "Failed to cast the property object at index: %d", propertyIndex);
- continue;
- }
-
- if (id == _bstr_t(L"IsPseudoDevice")) {
- _bstr_t value;
- hr = property->get_Value(value.GetAddress());
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "Failed to cast the property value at index: %d", propertyIndex);
- continue;
- }
- if (value == _bstr_t(L"true")) {
- isPseudoDevice = true;
- break; // No need to look at this device further
- }
- }
-
- if (id == _bstr_t(L"Emulator")) {
- _bstr_t value;
- hr = property->get_Value(value.GetAddress());
- if (FAILED(hr)) {
- qCDebug(lcCoreCon, "Failed to cast the property value at index: %d", propertyIndex);
- continue;
- }
- deviceHandle<DeviceType>(device.data())->isEmulator = value == _bstr_t(L"true");
- }
- }
-
- if (!isPseudoDevice)
- devices.append(device.take());
- }
- }
- return true;
- }
-
- ComPtr<ServerType> handle;
-};
-
-typedef CoreConServerPrivateVersioned<ICcServer_11, ICcDatastore_11, ICcPlatform_11,
- ICcPlatformContainer_11, ICcCollection_11, ICcDevice_11, ICcDeviceContainer_11,
- ICcObject_11, ICcObjectContainer_11,
- ICcProperty_11, ICcPropertyContainer_11> CoreConServerPrivate_11;
-
-typedef CoreConServerPrivateVersioned<ICcServer_12, ICcDatastore_12, ICcPlatform_12,
- ICcPlatformContainer_12, ICcCollection_12, ICcDevice_12, ICcDeviceContainer_12,
- ICcObject_12, ICcObjectContainer_12,
- ICcProperty_12, ICcPropertyContainer_12> CoreConServerPrivate_12;
-
-CoreConServer::CoreConServer(int version)
-{
- if (version == 11)
- d_ptr.reset(new CoreConServerPrivate_11(this, version));
- else if (version == 12)
- d_ptr.reset(new CoreConServerPrivate_12(this, version));
- else
- qCCritical(lcCoreCon) << "Invalid CoreCon version specified:" << version;
-
- initialize();
-}
-
-CoreConServer::~CoreConServer()
-{
-}
-
-Qt::HANDLE CoreConServer::handle() const
-{
- Q_D(const CoreConServer);
- if (d->version == 11)
- return static_cast<const CoreConServerPrivate_11 *>(d)->handle.Get();
- if (d->version == 12)
- return static_cast<const CoreConServerPrivate_12 *>(d)->handle.Get();
- return 0;
-}
-
-QList<CoreConDevice *> CoreConServer::devices() const
-{
- Q_D(const CoreConServer);
- return d->devices;
-}
-
-bool CoreConServer::initialize()
-{
- Q_D(CoreConServer);
- if (!d || !handle())
- return false;
-
- if (!d->devices.isEmpty())
- return true;
-
- return d->initialize();
-}
-
-QString CoreConServer::formatError(HRESULT hr) const
-{
- Q_D(const CoreConServer);
- wchar_t error[1024];
- HMODULE module = 0;
- DWORD origin = HRESULT_FACILITY(hr);
- if (origin == 0x973 || origin == 0x974 || origin == 0x103)
- module = d->langModule;
- if (module) {
- int length = LoadString(module, HRESULT_CODE(hr), error, sizeof(error)/sizeof(wchar_t));
- if (length)
- return QString::fromWCharArray(error, length).trimmed();
- }
- return qt_error_string(hr);
-}
diff --git a/src/shared/corecon/corecon.h b/src/shared/corecon/corecon.h
deleted file mode 100644
index 39d8f32a1..000000000
--- a/src/shared/corecon/corecon.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef CORECON_H
-#define CORECON_H
-
-#include <QtCore/qt_windows.h>
-#include <QtCore/QList>
-#include <QtCore/QScopedPointer>
-#include <QtCore/QLoggingCategory>
-
-QT_USE_NAMESPACE
-
-class CoreConDevicePrivate;
-class CoreConDevice
-{
-public:
- explicit CoreConDevice(int version);
- ~CoreConDevice();
- QString name() const;
- QString id() const;
- bool isEmulator() const;
- Qt::HANDLE handle() const;
-private:
- QScopedPointer<CoreConDevicePrivate> d_ptr;
- Q_DECLARE_PRIVATE(CoreConDevice)
-friend class CoreConServerPrivate;
-};
-
-class CoreConServerPrivate;
-class CoreConServer
-{
-public:
- explicit CoreConServer(int version);
- ~CoreConServer();
- bool initialize();
- Qt::HANDLE handle() const;
- QList<CoreConDevice *> devices() const;
- QString formatError(HRESULT hr) const;
-private:
- QScopedPointer<CoreConServerPrivate> d_ptr;
- Q_DECLARE_PRIVATE(CoreConServer)
-};
-
-Q_DECLARE_LOGGING_CATEGORY(lcCoreCon)
-
-#endif // CORECON_H
diff --git a/src/shared/corecon/corecon.pri b/src/shared/corecon/corecon.pri
deleted file mode 100644
index 7ff7c7c70..000000000
--- a/src/shared/corecon/corecon.pri
+++ /dev/null
@@ -1,3 +0,0 @@
-INCLUDEPATH += $$PWD
-HEADERS += $$PWD/ccapi.h $$PWD/ccapi_11.h $$PWD/ccapi_12.h $$PWD/corecon.h
-SOURCES += $$PWD/corecon.cpp
diff --git a/src/shared/deviceskin/deviceskin.cpp b/src/shared/deviceskin/deviceskin.cpp
index 6a0e6c9df..2c6df22c1 100644
--- a/src/shared/deviceskin/deviceskin.cpp
+++ b/src/shared/deviceskin/deviceskin.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "deviceskin.h"
@@ -55,14 +19,16 @@
#include <QtCore/QDebug>
#ifdef TEST_SKIN
-# include <QtGui/QMainWindow>
-# include <QtGui/QDialog>
-# include <QtGui/QDialogButtonBox>
-# include <QtGui/QHBoxLayout>
+# include <QtWidgets/QMainWindow>
+# include <QtWidgets/QDialog>
+# include <QtWidgets/QDialogButtonBox>
+# include <QtWidgets/QHBoxLayout>
#endif
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
namespace {
enum { joydistance = 10, key_repeat_period = 50, key_repeat_delay = 500 };
enum { debugDeviceSkin = 0 };
@@ -117,7 +83,7 @@ bool DeviceSkinParameters::read(const QString &skinDirectory, ReadMode rm, QSt
// Figure out the name. remove ending '/' if present
QString skinFile = skinDirectory;
if (skinFile.endsWith(QLatin1Char('/')))
- skinFile.truncate(skinFile.length() - 1);
+ skinFile.truncate(skinFile.size() - 1);
QFileInfo fi(skinFile);
QString fn;
@@ -126,7 +92,7 @@ bool DeviceSkinParameters::read(const QString &skinDirectory, ReadMode rm, QSt
prefix += QLatin1Char('/');
fn = prefix;
fn += fi.baseName();
- fn += QLatin1String(".skin");
+ fn += ".skin"_L1;
} else if (fi.isFile()){
fn = skinFile;
prefix = fi.path();
@@ -143,7 +109,8 @@ bool DeviceSkinParameters::read(const QString &skinDirectory, ReadMode rm, QSt
QTextStream ts(&f);
const bool rc = read(ts, rm, errorMessage);
if (!rc)
- *errorMessage = DeviceSkin::tr("The skin configuration file '%1' could not be read: %2").arg(fn).arg(*errorMessage);
+ *errorMessage = DeviceSkin::tr("The skin configuration file '%1' could not be read: %2")
+ .arg(fn, *errorMessage);
return rc;
}
bool DeviceSkinParameters::read(QTextStream &ts, ReadMode rm, QString *errorMessage)
@@ -156,31 +123,31 @@ bool DeviceSkinParameters::read(QTextStream &ts, ReadMode rm, QString *errorMess
QString mark;
ts >> mark;
hasMouseHover = true; // historical default
- if ( mark == QLatin1String("[SkinFile]") ) {
- const QString UpKey = QLatin1String("Up");
- const QString DownKey = QLatin1String("Down");
- const QString ClosedKey = QLatin1String("Closed");
- const QString ClosedAreasKey = QLatin1String("ClosedAreas");
- const QString ScreenKey = QLatin1String("Screen");
- const QString ScreenDepthKey = QLatin1String("ScreenDepth");
- const QString BackScreenKey = QLatin1String("BackScreen");
- const QString ClosedScreenKey = QLatin1String("ClosedScreen");
- const QString CursorKey = QLatin1String("Cursor");
- const QString AreasKey = QLatin1String("Areas");
- const QString ToggleAreasKey = QLatin1String("ToggleAreas");
- const QString ToggleActiveAreasKey = QLatin1String("ToggleActiveAreas");
- const QString HasMouseHoverKey = QLatin1String("HasMouseHover");
+ if (mark == "[SkinFile]"_L1) {
+ const QString UpKey = "Up"_L1;
+ const QString DownKey = "Down"_L1;
+ const QString ClosedKey = "Closed"_L1;
+ const QString ClosedAreasKey = "ClosedAreas"_L1;
+ const QString ScreenKey = "Screen"_L1;
+ const QString ScreenDepthKey = "ScreenDepth"_L1;
+ const QString BackScreenKey = "BackScreen"_L1;
+ const QString ClosedScreenKey = "ClosedScreen"_L1;
+ const QString CursorKey = "Cursor"_L1;
+ const QString AreasKey = "Areas"_L1;
+ const QString ToggleAreasKey = "ToggleAreas"_L1;
+ const QString ToggleActiveAreasKey = "ToggleActiveAreas"_L1;
+ const QString HasMouseHoverKey = "HasMouseHover"_L1;
// New
while (!nareas) {
QString line = ts.readLine();
if ( line.isNull() )
break;
- if ( line[0] != QLatin1Char('#') && !line.isEmpty() ) {
+ if (!line.isEmpty() && line.at(0) != u'#') {
int eq = line.indexOf(QLatin1Char('='));
if ( eq >= 0 ) {
const QString key = line.left(eq);
eq++;
- while (eq<line.length()-1 && line[eq].isSpace())
+ while (eq<line.size()-1 && line[eq].isSpace())
eq++;
const QString value = line.mid(eq);
if ( key == UpKey ) {
@@ -210,7 +177,7 @@ bool DeviceSkinParameters::read(QTextStream &ts, ReadMode rm, QString *errorMess
} else if ( key == ToggleActiveAreasKey ) {
toggleActiveAreas = value.split(QLatin1Char(' '));
} else if ( key == HasMouseHoverKey ) {
- hasMouseHover = value == QLatin1String("true") || value == QLatin1String("1");
+ hasMouseHover = value == "true"_L1 || value == "1"_L1;
}
} else {
*errorMessage = DeviceSkin::tr("Syntax error: %1").arg(line);
@@ -284,8 +251,8 @@ bool DeviceSkinParameters::read(QTextStream &ts, ReadMode rm, QString *errorMess
int i = 0;
ts.readLine(); // eol
joystick = -1;
- const QString Joystick = QLatin1String("Joystick");
- const QRegularExpression splitRe(QLatin1String("[ \t][ \t]*"));
+ const QString Joystick = "Joystick"_L1;
+ const QRegularExpression splitRe("[ \t][ \t]*"_L1);
Q_ASSERT(splitRe.isValid());
while (i < nareas && !ts.atEnd() ) {
buttonAreas.push_back(DeviceSkinButtonArea());
@@ -293,20 +260,20 @@ bool DeviceSkinParameters::read(QTextStream &ts, ReadMode rm, QString *errorMess
const QString line = ts.readLine();
if ( !line.isEmpty() && line[0] != QLatin1Char('#') ) {
const QStringList tok = line.split(splitRe);
- if ( tok.count()<6 ) {
+ if ( tok.size()<6 ) {
*errorMessage = DeviceSkin::tr("Syntax error in area definition: %1").arg(line);
return false;
} else {
area.name = tok[0];
QString k = tok[1];
- if ( k.left(2).toLower() == QLatin1String("0x")) {
+ if ( k.left(2).toLower() == "0x"_L1) {
area.keyCode = k.mid(2).toInt(0,16);
} else {
area.keyCode = k.toInt();
}
int p=0;
- for (int j=2; j < tok.count() - 1; ) {
+ for (int j=2; j < tok.size() - 1; ) {
const int x = tok[j++].toInt();
const int y = tok[j++].toInt();
area.area.putPoints(p++,1,x,y);
@@ -317,7 +284,7 @@ bool DeviceSkinParameters::read(QTextStream &ts, ReadMode rm, QString *errorMess
area.name.truncate(area.name.size() - 1);
area.name.remove(0, 1);
}
- if ( area.name.length() == 1 )
+ if ( area.name.size() == 1 )
area.text = area.name;
if ( area.name == Joystick)
joystick = i;
@@ -406,8 +373,8 @@ void DeviceSkin::calcRegions()
{
const int numAreas = m_parameters.buttonAreas.size();
for (int i=0; i<numAreas; i++) {
- QPolygon xa(m_parameters.buttonAreas[i].area.count());
- int n = m_parameters.buttonAreas[i].area.count();
+ QPolygon xa(m_parameters.buttonAreas[i].area.size());
+ int n = m_parameters.buttonAreas[i].area.size();
for (int p = 0; p < n; p++) {
xa.setPoint(p,transform.map(m_parameters.buttonAreas[i].area[p]));
}
@@ -539,17 +506,17 @@ void DeviceSkin::paintEvent( QPaintEvent *)
if ( buttonPressed == true ) {
toDraw += buttonIndex;
}
- for (int toggle : qAsConst(m_parameters.toggleAreaList)) {
+ for (int toggle : std::as_const(m_parameters.toggleAreaList)) {
const DeviceSkinButtonArea &ba = m_parameters.buttonAreas[toggle];
if (flipped_open || ba.activeWhenClosed) {
if (ba.toggleArea && ba.toggleActiveArea)
toDraw += toggle;
}
}
- for (int button : qAsConst(toDraw)) {
+ for (int button : std::as_const(toDraw)) {
const DeviceSkinButtonArea &ba = m_parameters.buttonAreas[button];
const QRect r = buttonRegions[button].boundingRect();
- if ( ba.area.count() > 2 )
+ if ( ba.area.size() > 2 )
p.setClipRegion(buttonRegions[button]);
p.drawPixmap( r.topLeft(), skinImageDown, r);
}
@@ -784,15 +751,9 @@ CursorWindow::CursorWindow(const QImage &img, QPoint hot, QWidget* sk)
QPixmap p;
p = QPixmap::fromImage(img);
if (!p.mask()) {
- if (img.hasAlphaChannel()) {
- QBitmap bm;
- bm = QPixmap::fromImage(img.createAlphaMask());
- p.setMask(bm);
- } else {
- QBitmap bm;
- bm = QPixmap::fromImage(img.createHeuristicMask());
- p.setMask(bm);
- }
+ QBitmap bm = img.hasAlphaChannel() ? QBitmap::fromImage(img.createAlphaMask())
+ : QBitmap::fromImage(img.createHeuristicMask());
+ p.setMask(bm);
}
QPalette palette;
palette.setBrush(backgroundRole(), QBrush(p));
@@ -832,16 +793,16 @@ int main(int argc,char *argv[])
QHBoxLayout *dialogLayout = new QHBoxLayout();
dialog->setLayout(dialogLayout);
QDialogButtonBox *dialogButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
- QObject::connect(dialogButtonBox, SIGNAL(rejected()), dialog, SLOT(reject()));
- QObject::connect(dialogButtonBox, SIGNAL(accepted()), dialog, SLOT(accept()));
+ QObject::connect(dialogButtonBox, &QDialogButtonBox::rejected, dialog, &QDialog::reject);
+ QObject::connect(dialogButtonBox, &QDialogButtonBox::accepted, dialog, &QDialog::accept);
dialogLayout->addWidget(dialogButtonBox);
dialog->setFixedSize(params.screenSize());
dialog->setParent(&ds, Qt::SubWindow);
dialog->setAutoFillBackground(true);
ds.setView(dialog);
- QObject::connect(&ds, SIGNAL(popupMenu()), &mw, SLOT(close()));
- QObject::connect(&ds, SIGNAL(skinKeyPressEvent(int,QString,bool)), &mw, SLOT(close()));
+ QObject::connect(&ds, &DeviceSkin::popupMenu, &mw, &QWidget::close);
+ QObject::connect(&ds, &DeviceSkin::skinKeyPressEvent, &mw, &QWidget::close);
mw.show();
return app.exec();
}
diff --git a/src/shared/deviceskin/deviceskin.h b/src/shared/deviceskin/deviceskin.h
index 2f7d09510..2c27d9b4a 100644
--- a/src/shared/deviceskin/deviceskin.h
+++ b/src/shared/deviceskin/deviceskin.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 SKIN_H
#define SKIN_H
diff --git a/src/shared/deviceskin/deviceskin.pri b/src/shared/deviceskin/deviceskin.pri
deleted file mode 100644
index 3e9935abb..000000000
--- a/src/shared/deviceskin/deviceskin.pri
+++ /dev/null
@@ -1,12 +0,0 @@
-INCLUDEPATH += $$PWD
-HEADERS += $$PWD/deviceskin.h
-SOURCES += $$PWD/deviceskin.cpp
-RESOURCES += $$PWD/skins/ClamshellPhone.qrc \
- $$PWD/skins/SmartPhone2.qrc \
- $$PWD/skins/SmartPhone.qrc \
- $$PWD/skins/SmartPhoneWithButtons.qrc \
- $$PWD/skins/TouchscreenPhone.qrc \
- $$PWD/skins/PortableMedia.qrc \
- $$PWD/skins/S60-QVGA-Candybar.qrc \
- $$PWD/skins/S60-nHD-Touchscreen.qrc
-
diff --git a/src/shared/deviceskin/skins/ClamshellPhone.qrc b/src/shared/deviceskin/skins/ClamshellPhone.qrc
deleted file mode 100644
index 39cd42274..000000000
--- a/src/shared/deviceskin/skins/ClamshellPhone.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource prefix="/skins">
- <file>ClamshellPhone.skin</file>
-</qresource>
-</RCC>
diff --git a/src/shared/deviceskin/skins/PortableMedia.qrc b/src/shared/deviceskin/skins/PortableMedia.qrc
deleted file mode 100644
index a902f1a73..000000000
--- a/src/shared/deviceskin/skins/PortableMedia.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource prefix="/skins">
- <file>PortableMedia.skin</file>
-</qresource>
-</RCC>
diff --git a/src/shared/deviceskin/skins/S60-QVGA-Candybar.qrc b/src/shared/deviceskin/skins/S60-QVGA-Candybar.qrc
deleted file mode 100644
index 813848479..000000000
--- a/src/shared/deviceskin/skins/S60-QVGA-Candybar.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource prefix="/skins">
- <file>S60-QVGA-Candybar.skin</file>
-</qresource>
-</RCC>
diff --git a/src/shared/deviceskin/skins/S60-nHD-Touchscreen.qrc b/src/shared/deviceskin/skins/S60-nHD-Touchscreen.qrc
deleted file mode 100644
index daf0cc363..000000000
--- a/src/shared/deviceskin/skins/S60-nHD-Touchscreen.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource prefix="/skins">
- <file>S60-nHD-Touchscreen.skin</file>
-</qresource>
-</RCC>
diff --git a/src/shared/deviceskin/skins/SmartPhone.qrc b/src/shared/deviceskin/skins/SmartPhone.qrc
deleted file mode 100644
index 8bb53259a..000000000
--- a/src/shared/deviceskin/skins/SmartPhone.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource prefix="/skins">
- <file>SmartPhone.skin</file>
-</qresource>
-</RCC>
diff --git a/src/shared/deviceskin/skins/SmartPhone2.qrc b/src/shared/deviceskin/skins/SmartPhone2.qrc
deleted file mode 100644
index 751e9852b..000000000
--- a/src/shared/deviceskin/skins/SmartPhone2.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource prefix="/skins">
- <file>SmartPhone2.skin</file>
-</qresource>
-</RCC>
diff --git a/src/shared/deviceskin/skins/SmartPhoneWithButtons.qrc b/src/shared/deviceskin/skins/SmartPhoneWithButtons.qrc
deleted file mode 100644
index f3393ba9d..000000000
--- a/src/shared/deviceskin/skins/SmartPhoneWithButtons.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource prefix="/skins">
- <file>SmartPhoneWithButtons.skin</file>
-</qresource>
-</RCC>
diff --git a/src/shared/deviceskin/skins/TouchscreenPhone.qrc b/src/shared/deviceskin/skins/TouchscreenPhone.qrc
deleted file mode 100644
index 023144d2f..000000000
--- a/src/shared/deviceskin/skins/TouchscreenPhone.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource prefix="/skins">
- <file>TouchscreenPhone.skin</file>
-</qresource>
-</RCC>
diff --git a/src/shared/findwidget/abstractfindwidget.cpp b/src/shared/findwidget/abstractfindwidget.cpp
index f627f6b25..1944beaf1 100644
--- a/src/shared/findwidget/abstractfindwidget.cpp
+++ b/src/shared/findwidget/abstractfindwidget.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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
/*! \class AbstractFindWidget
@@ -71,7 +35,9 @@
QT_BEGIN_NAMESPACE
-static QIcon createIconSet(const QString &name)
+using namespace Qt::StringLiterals;
+
+static QIcon afwCreateIconSet(const QString &name)
{
QStringList candidates = QStringList()
<< (QString::fromUtf8(":/qt-project.org/shared/images/") + name)
@@ -81,7 +47,7 @@ static QIcon createIconSet(const QString &name)
<< (QString::fromUtf8(":/qt-project.org/shared/images/win/") + name);
#endif
- for (const QString &f : qAsConst(candidates)) {
+ for (const QString &f : std::as_const(candidates)) {
if (QFile::exists(f))
return QIcon(f);
}
@@ -113,32 +79,32 @@ AbstractFindWidget::AbstractFindWidget(FindFlags flags, QWidget *parent)
#endif
m_toolClose = new QToolButton(this);
- m_toolClose->setIcon(createIconSet(QLatin1String("closetab.png")));
+ m_toolClose->setIcon(afwCreateIconSet("closetab.png"_L1));
m_toolClose->setAutoRaise(true);
layOut->addWidget(m_toolClose);
- connect(m_toolClose, SIGNAL(clicked()), SLOT(deactivate()));
+ connect(m_toolClose, &QAbstractButton::clicked, this, &AbstractFindWidget::deactivate);
m_editFind = new QLineEdit(this);
layOut->addWidget(m_editFind);
- connect(m_editFind, SIGNAL(returnPressed()), SLOT(findNext()));
- connect(m_editFind, SIGNAL(textChanged(QString)), SLOT(findCurrentText()));
- connect(m_editFind, SIGNAL(textChanged(QString)), SLOT(updateButtons()));
+ connect(m_editFind, &QLineEdit::returnPressed, this, &AbstractFindWidget::findNext);
+ connect(m_editFind, &QLineEdit::textChanged, this, &AbstractFindWidget::findCurrentText);
+ connect(m_editFind, &QLineEdit::textChanged, this, &AbstractFindWidget::updateButtons);
m_toolPrevious = new QToolButton(this);
m_toolPrevious->setAutoRaise(true);
m_toolPrevious->setText(tr("&Previous"));
m_toolPrevious->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
- m_toolPrevious->setIcon(createIconSet(QLatin1String("previous.png")));
+ m_toolPrevious->setIcon(afwCreateIconSet("previous.png"_L1));
layOut->addWidget(m_toolPrevious);
- connect(m_toolPrevious, SIGNAL(clicked()), SLOT(findPrevious()));
+ connect(m_toolPrevious, &QAbstractButton::clicked, this, &AbstractFindWidget::findPrevious);
m_toolNext = new QToolButton(this);
m_toolNext->setAutoRaise(true);
m_toolNext->setText(tr("&Next"));
m_toolNext->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
- m_toolNext->setIcon(createIconSet(QLatin1String("next.png")));
+ m_toolNext->setIcon(afwCreateIconSet("next.png"_L1));
layOut->addWidget(m_toolNext);
- connect(m_toolNext, SIGNAL(clicked()), SLOT(findNext()));
+ connect(m_toolNext, &QAbstractButton::clicked, this, &AbstractFindWidget::findNext);
if (flags & NarrowLayout) {
QSizePolicy sp(QSizePolicy::Preferred, QSizePolicy::Fixed);
@@ -160,7 +126,8 @@ AbstractFindWidget::AbstractFindWidget(FindFlags flags, QWidget *parent)
if (!(flags & NoCaseSensitive)) {
m_checkCase = new QCheckBox(tr("&Case sensitive"), this);
layOut->addWidget(m_checkCase);
- connect(m_checkCase, SIGNAL(toggled(bool)), SLOT(findCurrentText()));
+ connect(m_checkCase, &QAbstractButton::toggled,
+ this, &AbstractFindWidget::findCurrentText);
} else {
m_checkCase = 0;
}
@@ -168,7 +135,8 @@ AbstractFindWidget::AbstractFindWidget(FindFlags flags, QWidget *parent)
if (!(flags & NoWholeWords)) {
m_checkWholeWords = new QCheckBox(tr("Whole &words"), this);
layOut->addWidget(m_checkWholeWords);
- connect(m_checkWholeWords, SIGNAL(toggled(bool)), SLOT(findCurrentText()));
+ connect(m_checkWholeWords, &QAbstractButton::toggled,
+ this, &AbstractFindWidget::findCurrentText);
} else {
m_checkWholeWords = 0;
}
@@ -203,7 +171,7 @@ AbstractFindWidget::~AbstractFindWidget() = default;
*/
QIcon AbstractFindWidget::findIconSet()
{
- return createIconSet(QLatin1String("searchfind.png"));
+ return afwCreateIconSet("searchfind.png"_L1);
}
/*!
diff --git a/src/shared/findwidget/abstractfindwidget.h b/src/shared/findwidget/abstractfindwidget.h
index 5e04456c9..ca3ad0d0c 100644
--- a/src/shared/findwidget/abstractfindwidget.h
+++ b/src/shared/findwidget/abstractfindwidget.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 ABSTRACTFINDWIDGET_H
#define ABSTRACTFINDWIDGET_H
diff --git a/src/shared/findwidget/findwidget.pri b/src/shared/findwidget/findwidget.pri
deleted file mode 100644
index 6e0f58aff..000000000
--- a/src/shared/findwidget/findwidget.pri
+++ /dev/null
@@ -1,4 +0,0 @@
-INCLUDEPATH += $$PWD
-HEADERS += $$PWD/abstractfindwidget.h $$PWD/texteditfindwidget.h $$PWD/itemviewfindwidget.h
-SOURCES += $$PWD/abstractfindwidget.cpp $$PWD/texteditfindwidget.cpp $$PWD/itemviewfindwidget.cpp
-RESOURCES += $$PWD/findwidget.qrc
diff --git a/src/shared/findwidget/findwidget.qrc b/src/shared/findwidget/findwidget.qrc
deleted file mode 100644
index 8abc2d8e9..000000000
--- a/src/shared/findwidget/findwidget.qrc
+++ /dev/null
@@ -1,14 +0,0 @@
-<RCC>
- <qresource prefix="/qt-project.org/shared">
- <file>images/mac/closetab.png</file>
- <file>images/mac/next.png</file>
- <file>images/mac/previous.png</file>
- <file>images/mac/searchfind.png</file>
- <file>images/win/closetab.png</file>
- <file>images/win/next.png</file>
- <file>images/win/previous.png</file>
- <file>images/win/searchfind.png</file>
- <file>images/wrap.png</file>
- </qresource>
-</RCC>
-
diff --git a/src/shared/findwidget/itemviewfindwidget.cpp b/src/shared/findwidget/itemviewfindwidget.cpp
index 3ab73f094..3981a4952 100644
--- a/src/shared/findwidget/itemviewfindwidget.cpp
+++ b/src/shared/findwidget/itemviewfindwidget.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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
/*! \class ItemViewFindWidget
@@ -71,6 +35,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
/*!
Constructs a ItemViewFindWidget.
@@ -302,8 +268,8 @@ QModelIndex ItemViewFindWidget::findHelper(const QString &textToFind, bool skipC
Qt::CaseSensitivity cs = caseSensitive() ? Qt::CaseSensitive : Qt::CaseInsensitive;
if (wholeWords()) {
- QString rx = QLatin1String("\\b") + QRegularExpression::escape(textToFind)
- + QLatin1String("\\b");
+ QString rx = "\\b"_L1 + QRegularExpression::escape(textToFind)
+ + "\\b"_L1;
QRegularExpression re(rx);
if (cs == Qt::CaseInsensitive)
re.setPatternOptions(QRegularExpression::CaseInsensitiveOption);
diff --git a/src/shared/findwidget/itemviewfindwidget.h b/src/shared/findwidget/itemviewfindwidget.h
index 07b45a6de..dee3bc31d 100644
--- a/src/shared/findwidget/itemviewfindwidget.h
+++ b/src/shared/findwidget/itemviewfindwidget.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 ITEMVIEWFINDWIDGET_H
#define ITEMVIEWFINDWIDGET_H
diff --git a/src/shared/findwidget/texteditfindwidget.cpp b/src/shared/findwidget/texteditfindwidget.cpp
index bb3c5d4e3..1b3a1b53f 100644
--- a/src/shared/findwidget/texteditfindwidget.cpp
+++ b/src/shared/findwidget/texteditfindwidget.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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
/*! \class TextEditFindWidget
diff --git a/src/shared/findwidget/texteditfindwidget.h b/src/shared/findwidget/texteditfindwidget.h
index 6e676f41d..603ab65ac 100644
--- a/src/shared/findwidget/texteditfindwidget.h
+++ b/src/shared/findwidget/texteditfindwidget.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 TEXTEDITFINDWIDGET_H
#define TEXTEDITFINDWIDGET_H
diff --git a/src/shared/fontpanel/fontpanel.cpp b/src/shared/fontpanel/fontpanel.cpp
index d3c22762a..9a0d892d6 100644
--- a/src/shared/fontpanel/fontpanel.cpp
+++ b/src/shared/fontpanel/fontpanel.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "fontpanel.h"
@@ -49,6 +13,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
FontPanel::FontPanel(QWidget *parentWidget) :
QGroupBox(parentWidget),
m_previewLineEdit(new QLineEdit),
@@ -64,9 +30,9 @@ FontPanel::FontPanel(QWidget *parentWidget) :
// writing systems
m_writingSystemComboBox->setEditable(false);
- auto writingSystems = m_fontDatabase.writingSystems();
+ auto writingSystems = QFontDatabase::writingSystems();
writingSystems.push_front(QFontDatabase::Any);
- for (QFontDatabase::WritingSystem ws : qAsConst(writingSystems))
+ for (QFontDatabase::WritingSystem ws : std::as_const(writingSystems))
m_writingSystemComboBox->addItem(QFontDatabase::writingSystemName(ws), QVariant(ws));
connect(m_writingSystemComboBox, &QComboBox::currentIndexChanged,
this, &FontPanel::slotWritingSystemChanged);
@@ -98,14 +64,14 @@ QFont FontPanel::selectedFont() const
const QString family = rc.family();
rc.setPointSize(pointSize());
const QString styleDescription = styleString();
- if (styleDescription.contains(QLatin1String("Italic")))
+ if (styleDescription.contains("Italic"_L1))
rc.setStyle(QFont::StyleItalic);
- else if (styleDescription.contains(QLatin1String("Oblique")))
+ else if (styleDescription.contains("Oblique"_L1))
rc.setStyle(QFont::StyleOblique);
else
rc.setStyle(QFont::StyleNormal);
- rc.setBold(m_fontDatabase.bold(family, styleDescription));
- rc.setWeight(QFont::Weight(m_fontDatabase.weight(family, styleDescription)));
+ rc.setBold(QFontDatabase::bold(family, styleDescription));
+ rc.setWeight(QFont::Weight(QFontDatabase::weight(family, styleDescription)));
return rc;
}
@@ -114,7 +80,7 @@ void FontPanel::setSelectedFont(const QFont &f)
m_familyComboBox->setCurrentFont(f);
if (m_familyComboBox->currentIndex() < 0) {
// family not in writing system - find the corresponding one?
- QList<QFontDatabase::WritingSystem> familyWritingSystems = m_fontDatabase.writingSystems(f.family());
+ QList<QFontDatabase::WritingSystem> familyWritingSystems = QFontDatabase::writingSystems(f.family());
if (familyWritingSystems.isEmpty())
return;
@@ -127,7 +93,7 @@ void FontPanel::setSelectedFont(const QFont &f)
const int pointSizeIndex = closestPointSizeIndex(f.pointSize());
m_pointSizeComboBox->setCurrentIndex( pointSizeIndex);
- const QString styleString = m_fontDatabase.styleString(f);
+ const QString styleString = QFontDatabase::styleString(f);
const int styleIndex = m_styleComboBox->findText(styleString);
m_styleComboBox->setCurrentIndex(styleIndex);
slotUpdatePreviewFont();
@@ -208,7 +174,7 @@ void FontPanel::updateFamily(const QString &family)
// Try to maintain selection or select normal
const QString &oldStyleString = styleString();
- const QStringList &styles = m_fontDatabase.styles(family);
+ const QStringList &styles = QFontDatabase::styles(family);
const bool hasStyles = !styles.isEmpty();
m_styleComboBox->setCurrentIndex(-1);
@@ -216,7 +182,7 @@ void FontPanel::updateFamily(const QString &family)
m_styleComboBox->setEnabled(hasStyles);
int normalIndex = -1;
- const QString normalStyle = QLatin1String("Normal");
+ const QString normalStyle = "Normal"_L1;
if (hasStyles) {
for (const QString &style : styles) {
@@ -265,7 +231,7 @@ void FontPanel::updatePointSizes(const QString &family, const QString &styleStri
{
const int oldPointSize = pointSize();
- auto pointSizes = m_fontDatabase.pointSizes(family, styleString);
+ auto pointSizes = QFontDatabase::pointSizes(family, styleString);
if (pointSizes.isEmpty())
pointSizes = QFontDatabase::standardSizes();
@@ -277,7 +243,7 @@ void FontPanel::updatePointSizes(const QString &family, const QString &styleStri
// try to maintain selection or select closest.
if (hasSizes) {
QString n;
- for (int pointSize : qAsConst(pointSizes))
+ for (int pointSize : std::as_const(pointSizes))
m_pointSizeComboBox->addItem(n.setNum(pointSize), QVariant(pointSize));
const int closestIndex = closestPointSizeIndex(oldPointSize);
if (closestIndex != -1)
diff --git a/src/shared/fontpanel/fontpanel.h b/src/shared/fontpanel/fontpanel.h
index 4b1160300..1750b4260 100644
--- a/src/shared/fontpanel/fontpanel.h
+++ b/src/shared/fontpanel/fontpanel.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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
//
// W A R N I N G
@@ -92,7 +56,6 @@ private:
void updatePointSizes(const QString &family, const QString &style);
void delayedPreviewFontUpdate();
- QFontDatabase m_fontDatabase;
QLineEdit *m_previewLineEdit;
QComboBox *m_writingSystemComboBox;
QFontComboBox* m_familyComboBox;
diff --git a/src/shared/fontpanel/fontpanel.pri b/src/shared/fontpanel/fontpanel.pri
deleted file mode 100644
index 9504853a7..000000000
--- a/src/shared/fontpanel/fontpanel.pri
+++ /dev/null
@@ -1,3 +0,0 @@
-INCLUDEPATH += $$PWD
-HEADERS += $$PWD/fontpanel.h
-SOURCES += $$PWD/fontpanel.cpp
diff --git a/src/shared/qtgradienteditor/qtcolorbutton.cpp b/src/shared/qtgradienteditor/qtcolorbutton.cpp
index 33b084781..fd824ef74 100644
--- a/src/shared/qtgradienteditor/qtcolorbutton.cpp
+++ b/src/shared/qtgradienteditor/qtcolorbutton.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qtcolorbutton.h"
#include <QtWidgets/QColorDialog>
@@ -47,8 +11,9 @@
QT_BEGIN_NAMESPACE
-class QtColorButtonPrivate
+class QtColorButtonPrivate : public QObject
{
+ Q_OBJECT
QtColorButton *q_ptr;
Q_DECLARE_PUBLIC(QtColorButton)
public:
@@ -124,7 +89,7 @@ QtColorButton::QtColorButton(QWidget *parent)
setAcceptDrops(true);
- connect(this, SIGNAL(clicked()), this, SLOT(slotEditColor()));
+ connect(this, &QToolButton::clicked, d_ptr.data(), &QtColorButtonPrivate::slotEditColor);
setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
}
@@ -268,4 +233,4 @@ void QtColorButton::dropEvent(QDropEvent *event)
QT_END_NAMESPACE
-#include "moc_qtcolorbutton.cpp"
+#include "qtcolorbutton.moc"
diff --git a/src/shared/qtgradienteditor/qtcolorbutton.h b/src/shared/qtgradienteditor/qtcolorbutton.h
index 892b7d465..1dfe56d99 100644
--- a/src/shared/qtgradienteditor/qtcolorbutton.h
+++ b/src/shared/qtgradienteditor/qtcolorbutton.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QTCOLORBUTTON_H
#define QTCOLORBUTTON_H
@@ -58,11 +22,11 @@ public:
QColor color() const;
public slots:
-
void setColor(const QColor &color);
signals:
void colorChanged(const QColor &color);
+
protected:
void paintEvent(QPaintEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
@@ -72,11 +36,11 @@ protected:
void dragLeaveEvent(QDragLeaveEvent *event) override;
void dropEvent(QDropEvent *event) override;
#endif
+
private:
QScopedPointer<class QtColorButtonPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtColorButton)
Q_DISABLE_COPY_MOVE(QtColorButton)
- Q_PRIVATE_SLOT(d_func(), void slotEditColor())
};
QT_END_NAMESPACE
diff --git a/src/shared/qtgradienteditor/qtcolorbutton.pri b/src/shared/qtgradienteditor/qtcolorbutton.pri
deleted file mode 100644
index b9550cb9b..000000000
--- a/src/shared/qtgradienteditor/qtcolorbutton.pri
+++ /dev/null
@@ -1,3 +0,0 @@
-INCLUDEPATH += $$PWD
-SOURCES += $$PWD/qtcolorbutton.cpp
-HEADERS += $$PWD/qtcolorbutton.h
diff --git a/src/shared/qtgradienteditor/qtcolorline.cpp b/src/shared/qtgradienteditor/qtcolorline.cpp
index d67fafe36..425e5471e 100644
--- a/src/shared/qtgradienteditor/qtcolorline.cpp
+++ b/src/shared/qtgradienteditor/qtcolorline.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qtcolorline.h"
#include "qdrawutil.h"
diff --git a/src/shared/qtgradienteditor/qtcolorline.h b/src/shared/qtgradienteditor/qtcolorline.h
index a9d0d191c..24d549a8a 100644
--- a/src/shared/qtgradienteditor/qtcolorline.h
+++ b/src/shared/qtgradienteditor/qtcolorline.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QTCOLORLINE_H
#define QTCOLORLINE_H
@@ -94,15 +58,12 @@ public:
ColorComponent colorComponent() const;
public slots:
-
void setColor(const QColor &color);
signals:
-
void colorChanged(const QColor &color);
protected:
-
void resizeEvent(QResizeEvent *event) override;
void paintEvent(QPaintEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
@@ -111,7 +72,6 @@ protected:
void mouseDoubleClickEvent(QMouseEvent *event) override;
private:
-
QScopedPointer<class QtColorLinePrivate> d_ptr;
Q_DECLARE_PRIVATE(QtColorLine)
Q_DISABLE_COPY_MOVE(QtColorLine)
diff --git a/src/shared/qtgradienteditor/qtgradientdialog.cpp b/src/shared/qtgradienteditor/qtgradientdialog.cpp
index c47a374b4..40f3b6881 100644
--- a/src/shared/qtgradienteditor/qtgradientdialog.cpp
+++ b/src/shared/qtgradienteditor/qtgradientdialog.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qtgradientdialog.h"
#include "ui_qtgradientdialog.h"
@@ -43,12 +7,12 @@
QT_BEGIN_NAMESPACE
-class QtGradientDialogPrivate
+class QtGradientDialogPrivate : public QObject
{
+ Q_OBJECT
QtGradientDialog *q_ptr;
Q_DECLARE_PUBLIC(QtGradientDialog)
public:
-
void slotAboutToShowDetails(bool details, int extensionWidthHint);
Ui::QtGradientDialog m_ui;
@@ -205,8 +169,8 @@ QtGradientDialog::QtGradientDialog(QWidget *parent)
button = d_ptr->m_ui.buttonBox->button(QDialogButtonBox::Cancel);
if (button)
button->setAutoDefault(false);
- connect(d_ptr->m_ui.gradientEditor, SIGNAL(aboutToShowDetails(bool,int)),
- this, SLOT(slotAboutToShowDetails(bool,int)));
+ connect(d_ptr->m_ui.gradientEditor, &QtGradientEditor::aboutToShowDetails,
+ d_ptr.data(), &QtGradientDialogPrivate::slotAboutToShowDetails);
}
/*!
@@ -348,4 +312,4 @@ QGradient QtGradientDialog::getGradient(bool *ok, QWidget *parent, const QString
QT_END_NAMESPACE
-#include "moc_qtgradientdialog.cpp"
+#include "qtgradientdialog.moc"
diff --git a/src/shared/qtgradienteditor/qtgradientdialog.h b/src/shared/qtgradienteditor/qtgradientdialog.h
index 852c3a143..c2d3903c1 100644
--- a/src/shared/qtgradienteditor/qtgradientdialog.h
+++ b/src/shared/qtgradienteditor/qtgradientdialog.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QTGRADIENTDIALOG_H
#define QTGRADIENTDIALOG_H
@@ -77,7 +41,6 @@ private:
QScopedPointer<class QtGradientDialogPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtGradientDialog)
Q_DISABLE_COPY_MOVE(QtGradientDialog)
- Q_PRIVATE_SLOT(d_func(), void slotAboutToShowDetails(bool details, int extensionWidthHint))
};
QT_END_NAMESPACE
diff --git a/src/shared/qtgradienteditor/qtgradientdialog.ui b/src/shared/qtgradienteditor/qtgradientdialog.ui
index e598c4a05..398754a10 100644
--- a/src/shared/qtgradienteditor/qtgradientdialog.ui
+++ b/src/shared/qtgradienteditor/qtgradientdialog.ui
@@ -1,42 +1,8 @@
<ui version="4.0" >
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 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
+</comment>
<class>QtGradientDialog</class>
<widget class="QDialog" name="QtGradientDialog" >
<property name="geometry" >
diff --git a/src/shared/qtgradienteditor/qtgradienteditor.cpp b/src/shared/qtgradienteditor/qtgradienteditor.cpp
index 57d35b83a..e6f01b59f 100644
--- a/src/shared/qtgradienteditor/qtgradienteditor.cpp
+++ b/src/shared/qtgradienteditor/qtgradienteditor.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qtgradienteditor.h"
#include "qtgradientstopscontroller.h"
@@ -45,12 +9,17 @@
QT_BEGIN_NAMESPACE
-class QtGradientEditorPrivate
+using namespace Qt::StringLiterals;
+
+class QtGradientEditorPrivate : public QObject
{
+ Q_OBJECT
QtGradientEditor *q_ptr;
Q_DECLARE_PUBLIC(QtGradientEditor)
public:
- QtGradientEditorPrivate() : m_gradient(QLinearGradient()) {}
+ QtGradientEditorPrivate(QtGradientEditor *q);
+
+ void setBackgroundCheckered(bool checkered);
void slotGradientStopsChanged(const QGradientStops &stops);
void slotTypeChanged(int type);
@@ -89,7 +58,8 @@ public:
void setType(QGradient::Type type);
void showDetails(bool details);
- void setSpinBox(QDoubleSpinBox *spinBox, const char *slot, double max = 1.0, double step = 0.01, int decimals = 3);
+ using DoubleSlotPtr = void (QtGradientEditorPrivate::*)(double);
+ void setupSpinBox(QDoubleSpinBox *spinBox, DoubleSlotPtr slot, double max = 1.0, double step = 0.01, int decimals = 3);
void reset();
void setLayout(bool details);
void layoutDetails(bool details);
@@ -105,39 +75,134 @@ public:
Ui::QtGradientEditor m_ui;
QtGradientStopsController *m_gradientStopsController;
- QDoubleSpinBox *startLinearXSpinBox;
- QDoubleSpinBox *startLinearYSpinBox;
- QDoubleSpinBox *endLinearXSpinBox;
- QDoubleSpinBox *endLinearYSpinBox;
- QDoubleSpinBox *centralRadialXSpinBox;
- QDoubleSpinBox *centralRadialYSpinBox;
- QDoubleSpinBox *focalRadialXSpinBox;
- QDoubleSpinBox *focalRadialYSpinBox;
- QDoubleSpinBox *radiusRadialSpinBox;
- QDoubleSpinBox *centralConicalXSpinBox;
- QDoubleSpinBox *centralConicalYSpinBox;
- QDoubleSpinBox *angleConicalSpinBox;
-
- QButtonGroup *m_typeGroup;
- QButtonGroup *m_spreadGroup;
-
- QGradient::Type m_type;
-
- QGridLayout *m_gridLayout;
- QWidget *m_hiddenWidget;
- QGridLayout *m_hiddenLayout;
- bool m_details;
- bool m_detailsButtonVisible;
- bool m_backgroundCheckered;
+ QDoubleSpinBox *startLinearXSpinBox = nullptr;
+ QDoubleSpinBox *startLinearYSpinBox = nullptr;
+ QDoubleSpinBox *endLinearXSpinBox = nullptr;
+ QDoubleSpinBox *endLinearYSpinBox = nullptr;
+ QDoubleSpinBox *centralRadialXSpinBox = nullptr;
+ QDoubleSpinBox *centralRadialYSpinBox = nullptr;
+ QDoubleSpinBox *focalRadialXSpinBox = nullptr;
+ QDoubleSpinBox *focalRadialYSpinBox = nullptr;
+ QDoubleSpinBox *radiusRadialSpinBox = nullptr;
+ QDoubleSpinBox *centralConicalXSpinBox = nullptr;
+ QDoubleSpinBox *centralConicalYSpinBox = nullptr;
+ QDoubleSpinBox *angleConicalSpinBox = nullptr;
+
+ QButtonGroup *m_typeGroup = nullptr;
+ QButtonGroup *m_spreadGroup = nullptr;
+
+ QGradient::Type m_type = QGradient::RadialGradient;
+
+ QGridLayout *m_gridLayout = nullptr;
+ QWidget *m_hiddenWidget = nullptr;
+ QGridLayout *m_hiddenLayout = nullptr;
+ bool m_details = false;
+ bool m_detailsButtonVisible = true;
+ bool m_backgroundCheckered = true;
QGradient m_gradient;
- bool m_combos;
+ bool m_combos = true;
};
+QtGradientEditorPrivate::QtGradientEditorPrivate(QtGradientEditor *q)
+ : q_ptr(q)
+ , m_gradientStopsController(new QtGradientStopsController(this))
+ , m_gradient(QLinearGradient())
+{
+ m_ui.setupUi(q_ptr);
+ m_gradientStopsController->setUi(&m_ui);
+ reset();
+ setType(QGradient::LinearGradient);
+ setCombos(!m_combos);
+
+ showDetails(m_details);
+ setBackgroundCheckered(m_backgroundCheckered);
+
+ setStartLinear(QPointF(0, 0));
+ setEndLinear(QPointF(1, 1));
+ setCentralRadial(QPointF(0.5, 0.5));
+ setFocalRadial(QPointF(0.5, 0.5));
+ setRadiusRadial(0.5);
+ setCentralConical(QPointF(0.5, 0.5));
+ setAngleConical(0);
+
+ QIcon icon;
+ icon.addPixmap(q_ptr->style()->standardPixmap(QStyle::SP_ArrowRight), QIcon::Normal, QIcon::Off);
+ icon.addPixmap(q_ptr->style()->standardPixmap(QStyle::SP_ArrowLeft), QIcon::Normal, QIcon::On);
+ m_ui.detailsButton->setIcon(icon);
+
+ connect(m_ui.detailsButton, &QAbstractButton::clicked,
+ this, &QtGradientEditorPrivate::slotDetailsChanged);
+ connect(m_gradientStopsController, &QtGradientStopsController::gradientStopsChanged,
+ this, &QtGradientEditorPrivate::slotGradientStopsChanged);
+
+ QIcon iconLinear(":/qt-project.org/qtgradienteditor/images/typelinear.png"_L1);
+ QIcon iconRadial(":/qt-project.org/qtgradienteditor/images/typeradial.png"_L1);
+ QIcon iconConical(":/qt-project.org/qtgradienteditor/images/typeconical.png"_L1);
+
+ m_ui.typeComboBox->addItem(iconLinear, QtGradientEditor::tr("Linear"));
+ m_ui.typeComboBox->addItem(iconRadial, QtGradientEditor::tr("Radial"));
+ m_ui.typeComboBox->addItem(iconConical, QtGradientEditor::tr("Conical"));
+
+ m_ui.linearButton->setIcon(iconLinear);
+ m_ui.radialButton->setIcon(iconRadial);
+ m_ui.conicalButton->setIcon(iconConical);
+
+ m_typeGroup = new QButtonGroup(this);
+ m_typeGroup->addButton(m_ui.linearButton, 0);
+ m_typeGroup->addButton(m_ui.radialButton, 1);
+ m_typeGroup->addButton(m_ui.conicalButton, 2);
+
+ connect(m_typeGroup, &QButtonGroup::idClicked,
+ this, &QtGradientEditorPrivate::slotTypeChanged);
+ connect(m_ui.typeComboBox, &QComboBox::activated,
+ this, &QtGradientEditorPrivate::slotTypeChanged);
+
+ QIcon iconPad(":/qt-project.org/qtgradienteditor/images/spreadpad.png"_L1);
+ QIcon iconRepeat(":/qt-project.org/qtgradienteditor/images/spreadrepeat.png"_L1);
+ QIcon iconReflect(":/qt-project.org/qtgradienteditor/images/spreadreflect.png"_L1);
+
+ m_ui.spreadComboBox->addItem(iconPad, QtGradientEditor::tr("Pad"));
+ m_ui.spreadComboBox->addItem(iconRepeat, QtGradientEditor::tr("Repeat"));
+ m_ui.spreadComboBox->addItem(iconReflect, QtGradientEditor::tr("Reflect"));
+
+ m_ui.padButton->setIcon(iconPad);
+ m_ui.repeatButton->setIcon(iconRepeat);
+ m_ui.reflectButton->setIcon(iconReflect);
+
+ m_spreadGroup = new QButtonGroup(this);
+ m_spreadGroup->addButton(m_ui.padButton, 0);
+ m_spreadGroup->addButton(m_ui.repeatButton, 1);
+ m_spreadGroup->addButton(m_ui.reflectButton, 2);
+ connect(m_spreadGroup, &QButtonGroup::idClicked,
+ this, &QtGradientEditorPrivate::slotSpreadChanged);
+ connect(m_ui.spreadComboBox, &QComboBox::activated,
+ this, &QtGradientEditorPrivate::slotSpreadChanged);
+
+ connect(m_ui.gradientWidget, &QtGradientWidget::startLinearChanged,
+ this, &QtGradientEditorPrivate::startLinearChanged);
+ connect(m_ui.gradientWidget, &QtGradientWidget::endLinearChanged,
+ this, &QtGradientEditorPrivate::endLinearChanged);
+ connect(m_ui.gradientWidget, &QtGradientWidget::centralRadialChanged,
+ this, &QtGradientEditorPrivate::centralRadialChanged);
+ connect(m_ui.gradientWidget, &QtGradientWidget::focalRadialChanged,
+ this, &QtGradientEditorPrivate::focalRadialChanged);
+ connect(m_ui.gradientWidget, &QtGradientWidget::radiusRadialChanged,
+ this, &QtGradientEditorPrivate::radiusRadialChanged);
+ connect(m_ui.gradientWidget, &QtGradientWidget::centralConicalChanged,
+ this, &QtGradientEditorPrivate::centralConicalChanged);
+ connect(m_ui.gradientWidget, &QtGradientWidget::angleConicalChanged,
+ this, &QtGradientEditorPrivate::angleConicalChanged);
+
+ QGradientStops stops = gradient().stops();
+ m_gradientStopsController->setGradientStops(stops);
+ m_ui.gradientWidget->setGradientStops(stops);
+}
+
QGradient QtGradientEditorPrivate::gradient() const
{
- QGradient *gradient = 0;
+ QGradient *gradient = nullptr;
switch (m_ui.gradientWidget->gradientType()) {
case QGradient::LinearGradient:
gradient = new QLinearGradient(m_ui.gradientWidget->startLinear(),
@@ -315,6 +380,9 @@ int QtGradientEditorPrivate::extensionWidthHint() const
void QtGradientEditorPrivate::slotDetailsChanged(bool details)
{
+ if (m_details == details)
+ return;
+
showDetails(details);
}
@@ -334,9 +402,6 @@ bool QtGradientEditorPrivate::row5Visible() const
void QtGradientEditorPrivate::showDetails(bool details)
{
- if (m_details == details)
- return;
-
bool blocked = m_ui.detailsButton->signalsBlocked();
m_ui.detailsButton->blockSignals(true);
m_ui.detailsButton->setChecked(details);
@@ -375,7 +440,8 @@ void QtGradientEditorPrivate::showDetails(bool details)
q_ptr->update();
}
-void QtGradientEditorPrivate::setSpinBox(QDoubleSpinBox *spinBox, const char *slot, double max, double step, int decimals)
+void QtGradientEditorPrivate::setupSpinBox(QDoubleSpinBox *spinBox, DoubleSlotPtr slot,
+ double max, double step, int decimals)
{
bool blocked = spinBox->signalsBlocked();
spinBox->blockSignals(true);
@@ -383,7 +449,7 @@ void QtGradientEditorPrivate::setSpinBox(QDoubleSpinBox *spinBox, const char *sl
spinBox->setMaximum(max);
spinBox->setSingleStep(step);
spinBox->blockSignals(blocked);
- QObject::connect(spinBox, SIGNAL(valueChanged(double)), q_ptr, slot);
+ QObject::connect(spinBox, &QDoubleSpinBox::valueChanged, this, slot);
}
void QtGradientEditorPrivate::reset()
@@ -408,11 +474,11 @@ void QtGradientEditorPrivate::setType(QGradient::Type type)
return;
m_type = type;
- m_ui.spinBox1->disconnect(SIGNAL(valueChanged(double)));
- m_ui.spinBox2->disconnect(SIGNAL(valueChanged(double)));
- m_ui.spinBox3->disconnect(SIGNAL(valueChanged(double)));
- m_ui.spinBox4->disconnect(SIGNAL(valueChanged(double)));
- m_ui.spinBox5->disconnect(SIGNAL(valueChanged(double)));
+ m_ui.spinBox1->disconnect(this);
+ m_ui.spinBox2->disconnect(this);
+ m_ui.spinBox3->disconnect(this);
+ m_ui.spinBox4->disconnect(this);
+ m_ui.spinBox5->disconnect(this);
reset();
@@ -427,42 +493,42 @@ void QtGradientEditorPrivate::setType(QGradient::Type type)
if (type == QGradient::LinearGradient) {
startLinearXSpinBox = m_ui.spinBox1;
- setSpinBox(startLinearXSpinBox, SLOT(slotStartLinearXChanged(double)));
+ setupSpinBox(startLinearXSpinBox, &QtGradientEditorPrivate::slotStartLinearXChanged);
m_ui.label1->setText(QCoreApplication::translate("QtGradientEditor", "Start X"));
startLinearYSpinBox = m_ui.spinBox2;
- setSpinBox(startLinearYSpinBox, SLOT(slotStartLinearYChanged(double)));
+ setupSpinBox(startLinearYSpinBox, &QtGradientEditorPrivate::slotStartLinearYChanged);
m_ui.label2->setText(QCoreApplication::translate("QtGradientEditor", "Start Y"));
endLinearXSpinBox = m_ui.spinBox3;
- setSpinBox(endLinearXSpinBox, SLOT(slotEndLinearXChanged(double)));
+ setupSpinBox(endLinearXSpinBox, &QtGradientEditorPrivate::slotEndLinearXChanged);
m_ui.label3->setText(QCoreApplication::translate("QtGradientEditor", "Final X"));
endLinearYSpinBox = m_ui.spinBox4;
- setSpinBox(endLinearYSpinBox, SLOT(slotEndLinearYChanged(double)));
+ setupSpinBox(endLinearYSpinBox, &QtGradientEditorPrivate::slotEndLinearYChanged);
m_ui.label4->setText(QCoreApplication::translate("QtGradientEditor", "Final Y"));
setStartLinear(m_ui.gradientWidget->startLinear());
setEndLinear(m_ui.gradientWidget->endLinear());
} else if (type == QGradient::RadialGradient) {
centralRadialXSpinBox = m_ui.spinBox1;
- setSpinBox(centralRadialXSpinBox, SLOT(slotCentralRadialXChanged(double)));
+ setupSpinBox(centralRadialXSpinBox, &QtGradientEditorPrivate::slotCentralRadialXChanged);
m_ui.label1->setText(QCoreApplication::translate("QtGradientEditor", "Central X"));
centralRadialYSpinBox = m_ui.spinBox2;
- setSpinBox(centralRadialYSpinBox, SLOT(slotCentralRadialYChanged(double)));
+ setupSpinBox(centralRadialYSpinBox, &QtGradientEditorPrivate::slotCentralRadialYChanged);
m_ui.label2->setText(QCoreApplication::translate("QtGradientEditor", "Central Y"));
focalRadialXSpinBox = m_ui.spinBox3;
- setSpinBox(focalRadialXSpinBox, SLOT(slotFocalRadialXChanged(double)));
+ setupSpinBox(focalRadialXSpinBox, &QtGradientEditorPrivate::slotFocalRadialXChanged);
m_ui.label3->setText(QCoreApplication::translate("QtGradientEditor", "Focal X"));
focalRadialYSpinBox = m_ui.spinBox4;
- setSpinBox(focalRadialYSpinBox, SLOT(slotFocalRadialYChanged(double)));
+ setupSpinBox(focalRadialYSpinBox, &QtGradientEditorPrivate::slotFocalRadialYChanged);
m_ui.label4->setText(QCoreApplication::translate("QtGradientEditor", "Focal Y"));
radiusRadialSpinBox = m_ui.spinBox5;
- setSpinBox(radiusRadialSpinBox, SLOT(slotRadiusRadialChanged(double)), 2.0);
+ setupSpinBox(radiusRadialSpinBox, &QtGradientEditorPrivate::slotRadiusRadialChanged, 2.0);
m_ui.label5->setText(QCoreApplication::translate("QtGradientEditor", "Radius"));
setCentralRadial(m_ui.gradientWidget->centralRadial());
@@ -470,15 +536,15 @@ void QtGradientEditorPrivate::setType(QGradient::Type type)
setRadiusRadial(m_ui.gradientWidget->radiusRadial());
} else if (type == QGradient::ConicalGradient) {
centralConicalXSpinBox = m_ui.spinBox1;
- setSpinBox(centralConicalXSpinBox, SLOT(slotCentralConicalXChanged(double)));
+ setupSpinBox(centralConicalXSpinBox, &QtGradientEditorPrivate::slotCentralConicalXChanged);
m_ui.label1->setText(QCoreApplication::translate("QtGradientEditor", "Central X"));
centralConicalYSpinBox = m_ui.spinBox2;
- setSpinBox(centralConicalYSpinBox, SLOT(slotCentralConicalYChanged(double)));
+ setupSpinBox(centralConicalYSpinBox, &QtGradientEditorPrivate::slotCentralConicalYChanged);
m_ui.label2->setText(QCoreApplication::translate("QtGradientEditor", "Central Y"));
angleConicalSpinBox = m_ui.spinBox3;
- setSpinBox(angleConicalSpinBox, SLOT(slotAngleConicalChanged(double)), 360.0, 1.0, 1);
+ setupSpinBox(angleConicalSpinBox, &QtGradientEditorPrivate::slotAngleConicalChanged, 360.0, 1.0, 1);
m_ui.label3->setText(QCoreApplication::translate("QtGradientEditor", "Angle"));
setCentralConical(m_ui.gradientWidget->centralConical());
@@ -496,9 +562,20 @@ void QtGradientEditorPrivate::setType(QGradient::Type type)
m_ui.label5->setVisible(row5Visible());
m_ui.spinBox5->setVisible(row5Visible());
- if (m_gridLayout) {
+ if (m_gridLayout)
m_gridLayout->setEnabled(ena);
- }
+}
+
+void QtGradientEditorPrivate::setBackgroundCheckered(bool checkered)
+{
+ m_backgroundCheckered = checkered;
+ m_ui.hueColorLine->setBackgroundCheckered(checkered);
+ m_ui.saturationColorLine->setBackgroundCheckered(checkered);
+ m_ui.valueColorLine->setBackgroundCheckered(checkered);
+ m_ui.alphaColorLine->setBackgroundCheckered(checkered);
+ m_ui.gradientWidget->setBackgroundCheckered(checkered);
+ m_ui.gradientStopsWidget->setBackgroundCheckered(checkered);
+ m_ui.colorButton->setBackgroundCheckered(checkered);
}
void QtGradientEditorPrivate::slotGradientStopsChanged(const QGradientStops &stops)
@@ -723,107 +800,8 @@ void QtGradientEditorPrivate::setAngleConical(qreal angle)
}
QtGradientEditor::QtGradientEditor(QWidget *parent)
- : QWidget(parent), d_ptr(new QtGradientEditorPrivate())
-{
- d_ptr->q_ptr = this;
- d_ptr->m_type = QGradient::RadialGradient;
- d_ptr->m_ui.setupUi(this);
- d_ptr->m_gridLayout = 0;
- d_ptr->m_hiddenLayout = 0;
- d_ptr->m_hiddenWidget = 0;
- bool detailsDefault = false;
- d_ptr->m_details = !detailsDefault;
- d_ptr->m_detailsButtonVisible = true;
- bool checkeredDefault = true;
- d_ptr->m_backgroundCheckered = !checkeredDefault;
- d_ptr->m_gradientStopsController = new QtGradientStopsController(this);
- d_ptr->m_gradientStopsController->setUi(&d_ptr->m_ui);
- d_ptr->reset();
- d_ptr->setType(QGradient::LinearGradient);
- d_ptr->m_combos = true;
- d_ptr->setCombos(!d_ptr->m_combos);
-
- d_ptr->showDetails(detailsDefault);
- setBackgroundCheckered(checkeredDefault);
-
- d_ptr->setStartLinear(QPointF(0, 0));
- d_ptr->setEndLinear(QPointF(1, 1));
- d_ptr->setCentralRadial(QPointF(0.5, 0.5));
- d_ptr->setFocalRadial(QPointF(0.5, 0.5));
- d_ptr->setRadiusRadial(0.5);
- d_ptr->setCentralConical(QPointF(0.5, 0.5));
- d_ptr->setAngleConical(0);
-
- QIcon icon;
- icon.addPixmap(style()->standardPixmap(QStyle::SP_ArrowRight), QIcon::Normal, QIcon::Off);
- icon.addPixmap(style()->standardPixmap(QStyle::SP_ArrowLeft), QIcon::Normal, QIcon::On);
- d_ptr->m_ui.detailsButton->setIcon(icon);
-
- connect(d_ptr->m_ui.detailsButton, SIGNAL(clicked(bool)), this, SLOT(slotDetailsChanged(bool)));
- connect(d_ptr->m_gradientStopsController, SIGNAL(gradientStopsChanged(QGradientStops)),
- this, SLOT(slotGradientStopsChanged(QGradientStops)));
-
- QIcon iconLinear(QLatin1String(":/qt-project.org/qtgradienteditor/images/typelinear.png"));
- QIcon iconRadial(QLatin1String(":/qt-project.org/qtgradienteditor/images/typeradial.png"));
- QIcon iconConical(QLatin1String(":/qt-project.org/qtgradienteditor/images/typeconical.png"));
-
- d_ptr->m_ui.typeComboBox->addItem(iconLinear, tr("Linear"));
- d_ptr->m_ui.typeComboBox->addItem(iconRadial, tr("Radial"));
- d_ptr->m_ui.typeComboBox->addItem(iconConical, tr("Conical"));
-
- d_ptr->m_ui.linearButton->setIcon(iconLinear);
- d_ptr->m_ui.radialButton->setIcon(iconRadial);
- d_ptr->m_ui.conicalButton->setIcon(iconConical);
-
- d_ptr->m_typeGroup = new QButtonGroup(this);
- d_ptr->m_typeGroup->addButton(d_ptr->m_ui.linearButton, 0);
- d_ptr->m_typeGroup->addButton(d_ptr->m_ui.radialButton, 1);
- d_ptr->m_typeGroup->addButton(d_ptr->m_ui.conicalButton, 2);
-
- connect(d_ptr->m_typeGroup, SIGNAL(buttonClicked(int)),
- this, SLOT(slotTypeChanged(int)));
- connect(d_ptr->m_ui.typeComboBox, SIGNAL(activated(int)),
- this, SLOT(slotTypeChanged(int)));
-
- QIcon iconPad(QLatin1String(":/qt-project.org/qtgradienteditor/images/spreadpad.png"));
- QIcon iconRepeat(QLatin1String(":/qt-project.org/qtgradienteditor/images/spreadrepeat.png"));
- QIcon iconReflect(QLatin1String(":/qt-project.org/qtgradienteditor/images/spreadreflect.png"));
-
- d_ptr->m_ui.spreadComboBox->addItem(iconPad, tr("Pad"));
- d_ptr->m_ui.spreadComboBox->addItem(iconRepeat, tr("Repeat"));
- d_ptr->m_ui.spreadComboBox->addItem(iconReflect, tr("Reflect"));
-
- d_ptr->m_ui.padButton->setIcon(iconPad);
- d_ptr->m_ui.repeatButton->setIcon(iconRepeat);
- d_ptr->m_ui.reflectButton->setIcon(iconReflect);
-
- d_ptr->m_spreadGroup = new QButtonGroup(this);
- d_ptr->m_spreadGroup->addButton(d_ptr->m_ui.padButton, 0);
- d_ptr->m_spreadGroup->addButton(d_ptr->m_ui.repeatButton, 1);
- d_ptr->m_spreadGroup->addButton(d_ptr->m_ui.reflectButton, 2);
- connect(d_ptr->m_spreadGroup, SIGNAL(buttonClicked(int)),
- this, SLOT(slotSpreadChanged(int)));
- connect(d_ptr->m_ui.spreadComboBox, SIGNAL(activated(int)),
- this, SLOT(slotSpreadChanged(int)));
-
- connect(d_ptr->m_ui.gradientWidget, SIGNAL(startLinearChanged(QPointF)),
- this, SLOT(startLinearChanged(QPointF)));
- connect(d_ptr->m_ui.gradientWidget, SIGNAL(endLinearChanged(QPointF)),
- this, SLOT(endLinearChanged(QPointF)));
- connect(d_ptr->m_ui.gradientWidget, SIGNAL(centralRadialChanged(QPointF)),
- this, SLOT(centralRadialChanged(QPointF)));
- connect(d_ptr->m_ui.gradientWidget, SIGNAL(focalRadialChanged(QPointF)),
- this, SLOT(focalRadialChanged(QPointF)));
- connect(d_ptr->m_ui.gradientWidget, SIGNAL(radiusRadialChanged(qreal)),
- this, SLOT(radiusRadialChanged(qreal)));
- connect(d_ptr->m_ui.gradientWidget, SIGNAL(centralConicalChanged(QPointF)),
- this, SLOT(centralConicalChanged(QPointF)));
- connect(d_ptr->m_ui.gradientWidget, SIGNAL(angleConicalChanged(qreal)),
- this, SLOT(angleConicalChanged(qreal)));
-
- QGradientStops stops = gradient().stops();
- d_ptr->m_gradientStopsController->setGradientStops(stops);
- d_ptr->m_ui.gradientWidget->setGradientStops(stops);
+ : QWidget(parent), d_ptr(new QtGradientEditorPrivate(this))
+{
}
QtGradientEditor::~QtGradientEditor()
@@ -903,14 +881,7 @@ void QtGradientEditor::setBackgroundCheckered(bool checkered)
if (d_ptr->m_backgroundCheckered == checkered)
return;
- d_ptr->m_backgroundCheckered = checkered;
- d_ptr->m_ui.hueColorLine->setBackgroundCheckered(checkered);
- d_ptr->m_ui.saturationColorLine->setBackgroundCheckered(checkered);
- d_ptr->m_ui.valueColorLine->setBackgroundCheckered(checkered);
- d_ptr->m_ui.alphaColorLine->setBackgroundCheckered(checkered);
- d_ptr->m_ui.gradientWidget->setBackgroundCheckered(checkered);
- d_ptr->m_ui.gradientStopsWidget->setBackgroundCheckered(checkered);
- d_ptr->m_ui.colorButton->setBackgroundCheckered(checkered);
+ d_ptr->setBackgroundCheckered(checkered);
}
bool QtGradientEditor::detailsVisible() const
@@ -920,6 +891,9 @@ bool QtGradientEditor::detailsVisible() const
void QtGradientEditor::setDetailsVisible(bool visible)
{
+ if (d_ptr->m_details == visible)
+ return;
+
d_ptr->showDetails(visible);
}
@@ -949,4 +923,4 @@ void QtGradientEditor::setSpec(QColor::Spec spec)
QT_END_NAMESPACE
-#include "moc_qtgradienteditor.cpp"
+#include "qtgradienteditor.moc"
diff --git a/src/shared/qtgradienteditor/qtgradienteditor.h b/src/shared/qtgradienteditor/qtgradienteditor.h
index 5d91fb0d4..8e0fcadfc 100644
--- a/src/shared/qtgradienteditor/qtgradienteditor.h
+++ b/src/shared/qtgradienteditor/qtgradienteditor.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QTGRADIENTEDITOR_H
#define QTGRADIENTEDITOR_H
@@ -71,7 +35,6 @@ public:
void setSpec(QColor::Spec spec);
signals:
-
void gradientChanged(const QGradient &gradient);
void aboutToShowDetails(bool details, int extenstionWidthHint);
@@ -79,29 +42,6 @@ private:
QScopedPointer<class QtGradientEditorPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtGradientEditor)
Q_DISABLE_COPY_MOVE(QtGradientEditor)
- Q_PRIVATE_SLOT(d_func(), void slotGradientStopsChanged(const QGradientStops &stops))
- Q_PRIVATE_SLOT(d_func(), void slotTypeChanged(int type))
- Q_PRIVATE_SLOT(d_func(), void slotSpreadChanged(int type))
- Q_PRIVATE_SLOT(d_func(), void slotStartLinearXChanged(double value))
- Q_PRIVATE_SLOT(d_func(), void slotStartLinearYChanged(double value))
- Q_PRIVATE_SLOT(d_func(), void slotEndLinearXChanged(double value))
- Q_PRIVATE_SLOT(d_func(), void slotEndLinearYChanged(double value))
- Q_PRIVATE_SLOT(d_func(), void slotCentralRadialXChanged(double value))
- Q_PRIVATE_SLOT(d_func(), void slotCentralRadialYChanged(double value))
- Q_PRIVATE_SLOT(d_func(), void slotFocalRadialXChanged(double value))
- Q_PRIVATE_SLOT(d_func(), void slotFocalRadialYChanged(double value))
- Q_PRIVATE_SLOT(d_func(), void slotRadiusRadialChanged(double value))
- Q_PRIVATE_SLOT(d_func(), void slotCentralConicalXChanged(double value))
- Q_PRIVATE_SLOT(d_func(), void slotCentralConicalYChanged(double value))
- Q_PRIVATE_SLOT(d_func(), void slotAngleConicalChanged(double value))
- Q_PRIVATE_SLOT(d_func(), void slotDetailsChanged(bool details))
- Q_PRIVATE_SLOT(d_func(), void startLinearChanged(const QPointF &))
- Q_PRIVATE_SLOT(d_func(), void endLinearChanged(const QPointF &))
- Q_PRIVATE_SLOT(d_func(), void centralRadialChanged(const QPointF &))
- Q_PRIVATE_SLOT(d_func(), void focalRadialChanged(const QPointF &))
- Q_PRIVATE_SLOT(d_func(), void radiusRadialChanged(qreal))
- Q_PRIVATE_SLOT(d_func(), void centralConicalChanged(const QPointF &))
- Q_PRIVATE_SLOT(d_func(), void angleConicalChanged(qreal))
};
QT_END_NAMESPACE
diff --git a/src/shared/qtgradienteditor/qtgradienteditor.pri b/src/shared/qtgradienteditor/qtgradienteditor.pri
deleted file mode 100644
index 6a2a968d7..000000000
--- a/src/shared/qtgradienteditor/qtgradienteditor.pri
+++ /dev/null
@@ -1,32 +0,0 @@
-INCLUDEPATH += $$PWD
-FORMS += $$PWD/qtgradienteditor.ui \
- $$PWD/qtgradientdialog.ui \
- $$PWD/qtgradientview.ui \
- $$PWD/qtgradientviewdialog.ui
-SOURCES += $$PWD/qtgradientstopsmodel.cpp \
- $$PWD/qtgradientstopswidget.cpp \
- $$PWD/qtgradientstopscontroller.cpp \
- $$PWD/qtgradientwidget.cpp \
- $$PWD/qtgradienteditor.cpp \
- $$PWD/qtgradientdialog.cpp \
- $$PWD/qtcolorbutton.cpp \
- $$PWD/qtcolorline.cpp \
- $$PWD/qtgradientview.cpp \
- $$PWD/qtgradientviewdialog.cpp \
- $$PWD/qtgradientmanager.cpp \
- $$PWD/qtgradientutils.cpp
-HEADERS += $$PWD/qtgradientstopsmodel.h \
- $$PWD/qtgradientstopswidget.h \
- $$PWD/qtgradientstopscontroller.h \
- $$PWD/qtgradientwidget.h \
- $$PWD/qtgradienteditor.h \
- $$PWD/qtgradientdialog.h \
- $$PWD/qtcolorbutton.h \
- $$PWD/qtcolorline.h \
- $$PWD/qtgradientview.h \
- $$PWD/qtgradientviewdialog.h \
- $$PWD/qtgradientmanager.h \
- $$PWD/qtgradientutils.h
-RESOURCES += $$PWD/qtgradienteditor.qrc
-
-QT += xml
diff --git a/src/shared/qtgradienteditor/qtgradienteditor.qrc b/src/shared/qtgradienteditor/qtgradienteditor.qrc
deleted file mode 100644
index 74c236202..000000000
--- a/src/shared/qtgradienteditor/qtgradienteditor.qrc
+++ /dev/null
@@ -1,18 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
- <qresource prefix="/qt-project.org/qtgradienteditor">
- <file>images/edit.png</file>
- <file>images/zoomin.png</file>
- <file>images/zoomout.png</file>
- <file>images/up.png</file>
- <file>images/down.png</file>
- <file>images/plus.png</file>
- <file>images/minus.png</file>
- <file>images/editdelete.png</file>
- <file>images/spreadpad.png</file>
- <file>images/spreadrepeat.png</file>
- <file>images/spreadreflect.png</file>
- <file>images/typelinear.png</file>
- <file>images/typeradial.png</file>
- <file>images/typeconical.png</file>
- </qresource>
-</RCC>
diff --git a/src/shared/qtgradienteditor/qtgradienteditor.ui b/src/shared/qtgradienteditor/qtgradienteditor.ui
index d5e6f67bc..c2846774c 100644
--- a/src/shared/qtgradienteditor/qtgradienteditor.ui
+++ b/src/shared/qtgradienteditor/qtgradienteditor.ui
@@ -1,42 +1,8 @@
<ui version="4.0" >
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 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
+</comment>
<class>QtGradientEditor</class>
<widget class="QWidget" name="QtGradientEditor" >
<property name="geometry" >
diff --git a/src/shared/qtgradienteditor/qtgradientmanager.cpp b/src/shared/qtgradienteditor/qtgradientmanager.cpp
index 2662221b5..c0b165e21 100644
--- a/src/shared/qtgradienteditor/qtgradientmanager.cpp
+++ b/src/shared/qtgradienteditor/qtgradientmanager.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qtgradientmanager.h"
#include <QtGui/QPixmap>
@@ -59,8 +23,8 @@ QString QtGradientManager::uniqueId(const QString &id) const
return id;
QString base = id;
- while (base.count() > 0 && base.at(base.count() - 1).isDigit())
- base = base.left(base.count() - 1);
+ while (base.size() > 0 && base.at(base.size() - 1).isDigit())
+ base = base.left(base.size() - 1);
QString newId = base;
int counter = 0;
while (m_idToGradient.contains(newId)) {
diff --git a/src/shared/qtgradienteditor/qtgradientmanager.h b/src/shared/qtgradienteditor/qtgradientmanager.h
index f1cc60656..e3373c0c3 100644
--- a/src/shared/qtgradienteditor/qtgradientmanager.h
+++ b/src/shared/qtgradienteditor/qtgradientmanager.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 GRADIENTMANAGER_H
#define GRADIENTMANAGER_H
diff --git a/src/shared/qtgradienteditor/qtgradientstopscontroller.cpp b/src/shared/qtgradienteditor/qtgradientstopscontroller.cpp
index 9fb44469a..8dcd0171a 100644
--- a/src/shared/qtgradienteditor/qtgradientstopscontroller.cpp
+++ b/src/shared/qtgradienteditor/qtgradientstopscontroller.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qtgradientstopscontroller.h"
#include "ui_qtgradienteditor.h"
@@ -45,13 +9,18 @@
QT_BEGIN_NAMESPACE
-class QtGradientStopsControllerPrivate
+using namespace Qt::StringLiterals;
+
+class QtGradientStopsControllerPrivate : public QObject
{
+ Q_OBJECT
QtGradientStopsController *q_ptr;
Q_DECLARE_PUBLIC(QtGradientStopsController)
public:
- typedef QMap<qreal, QColor> PositionColorMap;
- typedef QMap<qreal, QtGradientStop *> PositionStopMap;
+ using PositionColorMap = QMap<qreal, QColor>;
+ using PositionStopMap = QMap<qreal, QtGradientStop *>;
+
+ void setUi(Ui::QtGradientEditor *ui);
void slotHsvClicked();
void slotRgbClicked();
@@ -66,10 +35,10 @@ public:
void slotUpdatePositionSpinBox();
void slotChangeColor(const QColor &color);
- void slotChangeHue(const QColor &color);
- void slotChangeSaturation(const QColor &color);
- void slotChangeValue(const QColor &color);
- void slotChangeAlpha(const QColor &color);
+ void slotChangeHueColor(const QColor &color);
+ void slotChangeSaturationColor(const QColor &color);
+ void slotChangeValueColor(const QColor &color);
+ void slotChangeAlphaColor(const QColor &color);
void slotChangeHue(int color);
void slotChangeSaturation(int color);
void slotChangeValue(int color);
@@ -88,12 +57,83 @@ public:
QGradientStops makeGradientStops(const PositionColorMap &data) const;
void updateZoom(double zoom);
- QtGradientStopsModel *m_model;
- QColor::Spec m_spec;
+ QtGradientStopsModel *m_model = nullptr;
+ QColor::Spec m_spec = QColor::Hsv;
Ui::QtGradientEditor *m_ui;
};
+void QtGradientStopsControllerPrivate::setUi(Ui::QtGradientEditor *ui)
+{
+ m_ui = ui;
+
+ m_ui->hueColorLine->setColorComponent(QtColorLine::Hue);
+ m_ui->saturationColorLine->setColorComponent(QtColorLine::Saturation);
+ m_ui->valueColorLine->setColorComponent(QtColorLine::Value);
+ m_ui->alphaColorLine->setColorComponent(QtColorLine::Alpha);
+
+ m_model = new QtGradientStopsModel(this);
+ m_ui->gradientStopsWidget->setGradientStopsModel(m_model);
+ connect(m_model, &QtGradientStopsModel::currentStopChanged,
+ this, &QtGradientStopsControllerPrivate::slotCurrentStopChanged);
+ connect(m_model, &QtGradientStopsModel::stopMoved,
+ this, &QtGradientStopsControllerPrivate::slotStopMoved);
+ connect(m_model, &QtGradientStopsModel::stopsSwapped,
+ this, &QtGradientStopsControllerPrivate::slotStopsSwapped);
+ connect(m_model, &QtGradientStopsModel::stopChanged,
+ this, &QtGradientStopsControllerPrivate::slotStopChanged);
+ connect(m_model, &QtGradientStopsModel::stopSelected,
+ this, &QtGradientStopsControllerPrivate::slotStopSelected);
+ connect(m_model, &QtGradientStopsModel::stopAdded,
+ this, &QtGradientStopsControllerPrivate::slotStopAdded);
+ connect(m_model, &QtGradientStopsModel::stopRemoved,
+ this, &QtGradientStopsControllerPrivate::slotStopRemoved);
+
+ connect(m_ui->hueColorLine, &QtColorLine::colorChanged,
+ this, &QtGradientStopsControllerPrivate::slotChangeHueColor);
+ connect(m_ui->saturationColorLine, &QtColorLine::colorChanged,
+ this, &QtGradientStopsControllerPrivate::slotChangeSaturationColor);
+ connect(m_ui->valueColorLine, &QtColorLine::colorChanged,
+ this, &QtGradientStopsControllerPrivate::slotChangeValueColor);
+ connect(m_ui->alphaColorLine, &QtColorLine::colorChanged,
+ this, &QtGradientStopsControllerPrivate::slotChangeAlphaColor);
+ connect(m_ui->colorButton, &QtColorButton::colorChanged,
+ this, &QtGradientStopsControllerPrivate::slotChangeColor);
+
+ connect(m_ui->hueSpinBox, &QSpinBox::valueChanged,
+ this, &QtGradientStopsControllerPrivate::slotChangeHue);
+ connect(m_ui->saturationSpinBox, &QSpinBox::valueChanged,
+ this, &QtGradientStopsControllerPrivate::slotChangeSaturation);
+ connect(m_ui->valueSpinBox, &QSpinBox::valueChanged,
+ this, &QtGradientStopsControllerPrivate::slotChangeValue);
+ connect(m_ui->alphaSpinBox, &QSpinBox::valueChanged,
+ this, &QtGradientStopsControllerPrivate::slotChangeAlpha);
+
+ connect(m_ui->positionSpinBox, &QDoubleSpinBox::valueChanged,
+ this, &QtGradientStopsControllerPrivate::slotChangePosition);
+
+ connect(m_ui->zoomSpinBox, &QSpinBox::valueChanged,
+ this, &QtGradientStopsControllerPrivate::slotChangeZoom);
+ connect(m_ui->zoomInButton, &QToolButton::clicked,
+ this, &QtGradientStopsControllerPrivate::slotZoomIn);
+ connect(m_ui->zoomOutButton, &QToolButton::clicked,
+ this, &QtGradientStopsControllerPrivate::slotZoomOut);
+ connect(m_ui->zoomAllButton, &QToolButton::clicked,
+ this, &QtGradientStopsControllerPrivate::slotZoomAll);
+ connect(m_ui->gradientStopsWidget, &QtGradientStopsWidget::zoomChanged,
+ this, &QtGradientStopsControllerPrivate::slotZoomChanged);
+
+ connect(m_ui->hsvRadioButton, &QRadioButton::clicked,
+ this, &QtGradientStopsControllerPrivate::slotHsvClicked);
+ connect(m_ui->rgbRadioButton, &QRadioButton::clicked,
+ this, &QtGradientStopsControllerPrivate::slotRgbClicked);
+
+ enableCurrent(false);
+ m_ui->zoomInButton->setIcon(QIcon(":/qt-project.org/qtgradienteditor/images/zoomin.png"_L1));
+ m_ui->zoomOutButton->setIcon(QIcon(":/qt-project.org/qtgradienteditor/images/zoomout.png"_L1));
+ updateZoom(1);
+}
+
void QtGradientStopsControllerPrivate::enableCurrent(bool enable)
{
m_ui->positionLabel->setEnabled(enable);
@@ -124,25 +164,16 @@ void QtGradientStopsControllerPrivate::enableCurrent(bool enable)
QtGradientStopsControllerPrivate::PositionColorMap QtGradientStopsControllerPrivate::stopsData(const PositionStopMap &stops) const
{
PositionColorMap data;
- PositionStopMap::ConstIterator itStop = stops.constBegin();
- while (itStop != stops.constEnd()) {
- QtGradientStop *stop = itStop.value();
+ for (QtGradientStop *stop : stops)
data[stop->position()] = stop->color();
-
- ++itStop;
- }
return data;
}
QGradientStops QtGradientStopsControllerPrivate::makeGradientStops(const PositionColorMap &data) const
{
QGradientStops stops;
- PositionColorMap::ConstIterator itData = data.constBegin();
- while (itData != data.constEnd()) {
- stops << QPair<qreal, QColor>(itData.key(), itData.value());
-
- ++itData;
- }
+ for (auto itData = data.cbegin(), cend = data.cend(); itData != cend; ++itData)
+ stops << std::pair<qreal, QColor>(itData.key(), itData.value());
return stops;
}
@@ -274,7 +305,7 @@ void QtGradientStopsControllerPrivate::slotCurrentStopChanged(QtGradientStop *st
}
enableCurrent(true);
- QTimer::singleShot(0, q_ptr, SLOT(slotUpdatePositionSpinBox()));
+ QTimer::singleShot(0, this, &QtGradientStopsControllerPrivate::slotUpdatePositionSpinBox);
m_ui->colorButton->setColor(stop->color());
m_ui->hueColorLine->setColor(stop->color());
@@ -286,7 +317,7 @@ void QtGradientStopsControllerPrivate::slotCurrentStopChanged(QtGradientStop *st
void QtGradientStopsControllerPrivate::slotStopMoved(QtGradientStop *stop, qreal newPos)
{
- QTimer::singleShot(0, q_ptr, SLOT(slotUpdatePositionSpinBox()));
+ QTimer::singleShot(0, this, &QtGradientStopsControllerPrivate::slotUpdatePositionSpinBox);
PositionColorMap stops = stopsData(m_model->stops());
stops.remove(stop->position());
@@ -298,7 +329,7 @@ void QtGradientStopsControllerPrivate::slotStopMoved(QtGradientStop *stop, qreal
void QtGradientStopsControllerPrivate::slotStopsSwapped(QtGradientStop *stop1, QtGradientStop *stop2)
{
- QTimer::singleShot(0, q_ptr, SLOT(slotUpdatePositionSpinBox()));
+ QTimer::singleShot(0, this, &QtGradientStopsControllerPrivate::slotUpdatePositionSpinBox);
PositionColorMap stops = stopsData(m_model->stops());
const qreal pos1 = stop1->position();
@@ -350,7 +381,7 @@ void QtGradientStopsControllerPrivate::slotStopSelected(QtGradientStop *stop, bo
{
Q_UNUSED(stop);
Q_UNUSED(selected);
- QTimer::singleShot(0, q_ptr, SLOT(slotUpdatePositionSpinBox()));
+ QTimer::singleShot(0, this, &QtGradientStopsControllerPrivate::slotUpdatePositionSpinBox);
}
void QtGradientStopsControllerPrivate::slotUpdatePositionSpinBox()
@@ -409,7 +440,7 @@ void QtGradientStopsControllerPrivate::slotChangeColor(const QColor &color)
}
}
-void QtGradientStopsControllerPrivate::slotChangeHue(const QColor &color)
+void QtGradientStopsControllerPrivate::slotChangeHueColor(const QColor &color)
{
QtGradientStop *stop = m_model->currentStop();
if (!stop)
@@ -435,10 +466,10 @@ void QtGradientStopsControllerPrivate::slotChangeHue(int color)
c.setHsvF(qreal(color) / 360.0, c.saturationF(), c.valueF(), c.alphaF());
else
c.setRed(color);
- slotChangeHue(c);
+ slotChangeHueColor(c);
}
-void QtGradientStopsControllerPrivate::slotChangeSaturation(const QColor &color)
+void QtGradientStopsControllerPrivate::slotChangeSaturationColor(const QColor &color)
{
QtGradientStop *stop = m_model->currentStop();
if (!stop)
@@ -468,10 +499,10 @@ void QtGradientStopsControllerPrivate::slotChangeSaturation(int color)
c.setHsvF(c.hueF(), qreal(color) / 255, c.valueF(), c.alphaF());
else
c.setGreen(color);
- slotChangeSaturation(c);
+ slotChangeSaturationColor(c);
}
-void QtGradientStopsControllerPrivate::slotChangeValue(const QColor &color)
+void QtGradientStopsControllerPrivate::slotChangeValueColor(const QColor &color)
{
QtGradientStop *stop = m_model->currentStop();
if (!stop)
@@ -501,10 +532,10 @@ void QtGradientStopsControllerPrivate::slotChangeValue(int color)
c.setHsvF(c.hueF(), c.saturationF(), qreal(color) / 255, c.alphaF());
else
c.setBlue(color);
- slotChangeValue(c);
+ slotChangeValueColor(c);
}
-void QtGradientStopsControllerPrivate::slotChangeAlpha(const QColor &color)
+void QtGradientStopsControllerPrivate::slotChangeAlphaColor(const QColor &color)
{
QtGradientStop *stop = m_model->currentStop();
if (!stop)
@@ -534,7 +565,7 @@ void QtGradientStopsControllerPrivate::slotChangeAlpha(int color)
c.setHsvF(c.hueF(), c.saturationF(), c.valueF(), qreal(color) / 255);
else
c.setAlpha(color);
- slotChangeAlpha(c);
+ slotChangeAlphaColor(c);
}
void QtGradientStopsControllerPrivate::slotChangePosition(double value)
@@ -581,79 +612,11 @@ QtGradientStopsController::QtGradientStopsController(QObject *parent)
: QObject(parent), d_ptr(new QtGradientStopsControllerPrivate())
{
d_ptr->q_ptr = this;
-
- d_ptr->m_spec = QColor::Hsv;
}
void QtGradientStopsController::setUi(Ui::QtGradientEditor *ui)
{
- d_ptr->m_ui = ui;
-
- d_ptr->m_ui->hueColorLine->setColorComponent(QtColorLine::Hue);
- d_ptr->m_ui->saturationColorLine->setColorComponent(QtColorLine::Saturation);
- d_ptr->m_ui->valueColorLine->setColorComponent(QtColorLine::Value);
- d_ptr->m_ui->alphaColorLine->setColorComponent(QtColorLine::Alpha);
-
- d_ptr->m_model = new QtGradientStopsModel(this);
- d_ptr->m_ui->gradientStopsWidget->setGradientStopsModel(d_ptr->m_model);
- connect(d_ptr->m_model, SIGNAL(currentStopChanged(QtGradientStop*)),
- this, SLOT(slotCurrentStopChanged(QtGradientStop*)));
- connect(d_ptr->m_model, SIGNAL(stopMoved(QtGradientStop*,qreal)),
- this, SLOT(slotStopMoved(QtGradientStop*,qreal)));
- connect(d_ptr->m_model, SIGNAL(stopsSwapped(QtGradientStop*,QtGradientStop*)),
- this, SLOT(slotStopsSwapped(QtGradientStop*,QtGradientStop*)));
- connect(d_ptr->m_model, SIGNAL(stopChanged(QtGradientStop*,QColor)),
- this, SLOT(slotStopChanged(QtGradientStop*,QColor)));
- connect(d_ptr->m_model, SIGNAL(stopSelected(QtGradientStop*,bool)),
- this, SLOT(slotStopSelected(QtGradientStop*,bool)));
- connect(d_ptr->m_model, SIGNAL(stopAdded(QtGradientStop*)),
- this, SLOT(slotStopAdded(QtGradientStop*)));
- connect(d_ptr->m_model, SIGNAL(stopRemoved(QtGradientStop*)),
- this, SLOT(slotStopRemoved(QtGradientStop*)));
-
- connect(d_ptr->m_ui->hueColorLine, SIGNAL(colorChanged(QColor)),
- this, SLOT(slotChangeHue(QColor)));
- connect(d_ptr->m_ui->saturationColorLine, SIGNAL(colorChanged(QColor)),
- this, SLOT(slotChangeSaturation(QColor)));
- connect(d_ptr->m_ui->valueColorLine, SIGNAL(colorChanged(QColor)),
- this, SLOT(slotChangeValue(QColor)));
- connect(d_ptr->m_ui->alphaColorLine, SIGNAL(colorChanged(QColor)),
- this, SLOT(slotChangeAlpha(QColor)));
- connect(d_ptr->m_ui->colorButton, SIGNAL(colorChanged(QColor)),
- this, SLOT(slotChangeColor(QColor)));
-
- connect(d_ptr->m_ui->hueSpinBox, SIGNAL(valueChanged(int)),
- this, SLOT(slotChangeHue(int)));
- connect(d_ptr->m_ui->saturationSpinBox, SIGNAL(valueChanged(int)),
- this, SLOT(slotChangeSaturation(int)));
- connect(d_ptr->m_ui->valueSpinBox, SIGNAL(valueChanged(int)),
- this, SLOT(slotChangeValue(int)));
- connect(d_ptr->m_ui->alphaSpinBox, SIGNAL(valueChanged(int)),
- this, SLOT(slotChangeAlpha(int)));
-
- connect(d_ptr->m_ui->positionSpinBox, SIGNAL(valueChanged(double)),
- this, SLOT(slotChangePosition(double)));
-
- connect(d_ptr->m_ui->zoomSpinBox, SIGNAL(valueChanged(int)),
- this, SLOT(slotChangeZoom(int)));
- connect(d_ptr->m_ui->zoomInButton, SIGNAL(clicked()),
- this, SLOT(slotZoomIn()));
- connect(d_ptr->m_ui->zoomOutButton, SIGNAL(clicked()),
- this, SLOT(slotZoomOut()));
- connect(d_ptr->m_ui->zoomAllButton, SIGNAL(clicked()),
- this, SLOT(slotZoomAll()));
- connect(d_ptr->m_ui->gradientStopsWidget, SIGNAL(zoomChanged(double)),
- this, SLOT(slotZoomChanged(double)));
-
- connect(d_ptr->m_ui->hsvRadioButton, SIGNAL(clicked()),
- this, SLOT(slotHsvClicked()));
- connect(d_ptr->m_ui->rgbRadioButton, SIGNAL(clicked()),
- this, SLOT(slotRgbClicked()));
-
- d_ptr->enableCurrent(false);
- d_ptr->m_ui->zoomInButton->setIcon(QIcon(QLatin1String(":/qt-project.org/qtgradienteditor/images/zoomin.png")));
- d_ptr->m_ui->zoomOutButton->setIcon(QIcon(QLatin1String(":/qt-project.org/qtgradienteditor/images/zoomout.png")));
- d_ptr->updateZoom(1);
+ d_ptr->setUi(ui);
}
QtGradientStopsController::~QtGradientStopsController()
@@ -663,8 +626,8 @@ QtGradientStopsController::~QtGradientStopsController()
void QtGradientStopsController::setGradientStops(const QGradientStops &stops)
{
d_ptr->m_model->clear();
- QtGradientStop *first = 0;
- for (const QPair<qreal, QColor> &pair : stops) {
+ QtGradientStop *first = nullptr;
+ for (const std::pair<qreal, QColor> &pair : stops) {
QtGradientStop *stop = d_ptr->m_model->addStop(pair.first, pair.second);
if (!first)
first = stop;
@@ -678,7 +641,7 @@ QGradientStops QtGradientStopsController::gradientStops() const
QGradientStops stops;
const auto stopsList = d_ptr->m_model->stops().values();
for (const QtGradientStop *stop : stopsList)
- stops << QPair<qreal, QColor>(stop->position(), stop->color());
+ stops.append({stop->position(), stop->color()});
return stops;
}
@@ -704,4 +667,4 @@ void QtGradientStopsController::setSpec(QColor::Spec spec)
QT_END_NAMESPACE
-#include "moc_qtgradientstopscontroller.cpp"
+#include "qtgradientstopscontroller.moc"
diff --git a/src/shared/qtgradienteditor/qtgradientstopscontroller.h b/src/shared/qtgradienteditor/qtgradientstopscontroller.h
index 1b3bbd391..c93b91c34 100644
--- a/src/shared/qtgradienteditor/qtgradientstopscontroller.h
+++ b/src/shared/qtgradienteditor/qtgradientstopscontroller.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QTGRADIENTSTOPSCONTROLLER_H
#define QTGRADIENTSTOPSCONTROLLER_H
@@ -64,39 +28,12 @@ public:
void setSpec(QColor::Spec spec);
signals:
-
void gradientStopsChanged(const QGradientStops &stops);
private:
QScopedPointer<class QtGradientStopsControllerPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtGradientStopsController)
Q_DISABLE_COPY_MOVE(QtGradientStopsController)
- Q_PRIVATE_SLOT(d_func(), void slotHsvClicked())
- Q_PRIVATE_SLOT(d_func(), void slotRgbClicked())
- Q_PRIVATE_SLOT(d_func(), void slotCurrentStopChanged(QtGradientStop *stop))
- Q_PRIVATE_SLOT(d_func(), void slotStopMoved(QtGradientStop *stop, qreal newPos))
- Q_PRIVATE_SLOT(d_func(), void slotStopsSwapped(QtGradientStop *stop1, QtGradientStop *stop2))
- Q_PRIVATE_SLOT(d_func(), void slotStopChanged(QtGradientStop *stop, const QColor &newColor))
- Q_PRIVATE_SLOT(d_func(), void slotStopSelected(QtGradientStop *stop, bool selected))
- Q_PRIVATE_SLOT(d_func(), void slotStopAdded(QtGradientStop *stop))
- Q_PRIVATE_SLOT(d_func(), void slotStopRemoved(QtGradientStop *stop))
- Q_PRIVATE_SLOT(d_func(), void slotUpdatePositionSpinBox())
- Q_PRIVATE_SLOT(d_func(), void slotChangeColor(const QColor &color))
- Q_PRIVATE_SLOT(d_func(), void slotChangeHue(const QColor &color))
- Q_PRIVATE_SLOT(d_func(), void slotChangeSaturation(const QColor &color))
- Q_PRIVATE_SLOT(d_func(), void slotChangeValue(const QColor &color))
- Q_PRIVATE_SLOT(d_func(), void slotChangeAlpha(const QColor &color))
- Q_PRIVATE_SLOT(d_func(), void slotChangeHue(int))
- Q_PRIVATE_SLOT(d_func(), void slotChangeSaturation(int))
- Q_PRIVATE_SLOT(d_func(), void slotChangeValue(int))
- Q_PRIVATE_SLOT(d_func(), void slotChangeAlpha(int))
- //Q_PRIVATE_SLOT(d_func(), void slotChangePosition(double newPos))
- Q_PRIVATE_SLOT(d_func(), void slotChangePosition(double value))
- Q_PRIVATE_SLOT(d_func(), void slotChangeZoom(int value))
- Q_PRIVATE_SLOT(d_func(), void slotZoomIn())
- Q_PRIVATE_SLOT(d_func(), void slotZoomOut())
- Q_PRIVATE_SLOT(d_func(), void slotZoomAll())
- Q_PRIVATE_SLOT(d_func(), void slotZoomChanged(double))
};
QT_END_NAMESPACE
diff --git a/src/shared/qtgradienteditor/qtgradientstopsmodel.cpp b/src/shared/qtgradienteditor/qtgradientstopsmodel.cpp
index 0afbf49bb..cea8feb6b 100644
--- a/src/shared/qtgradienteditor/qtgradientstopsmodel.cpp
+++ b/src/shared/qtgradienteditor/qtgradientstopsmodel.cpp
@@ -1,44 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qtgradientstopsmodel.h"
+
#include <QtGui/QColor>
+#include <QtCore/QHash>
QT_BEGIN_NAMESPACE
@@ -93,8 +59,8 @@ class QtGradientStopsModelPrivate
Q_DECLARE_PUBLIC(QtGradientStopsModel)
public:
QMap<qreal, QtGradientStop *> m_posToStop;
- QMap<QtGradientStop *, qreal> m_stopToPos;
- QMap<QtGradientStop *, bool> m_selection;
+ QHash<QtGradientStop *, qreal> m_stopToPos;
+ QHash<QtGradientStop *, bool> m_selection;
QtGradientStop *m_current;
};
@@ -133,7 +99,7 @@ QColor QtGradientStopsModel::color(qreal pos) const
return gradStops[pos]->color();
gradStops[pos] = 0;
- PositionStopMap::ConstIterator itStop = gradStops.constFind(pos);
+ auto itStop = gradStops.constFind(pos);
if (itStop == gradStops.constBegin()) {
++itStop;
return itStop.value()->color();
@@ -142,8 +108,8 @@ QColor QtGradientStopsModel::color(qreal pos) const
--itStop;
return itStop.value()->color();
}
- PositionStopMap::ConstIterator itPrev = itStop;
- PositionStopMap::ConstIterator itNext = itStop;
+ auto itPrev = itStop;
+ auto itNext = itStop;
--itPrev;
++itNext;
@@ -301,7 +267,7 @@ void QtGradientStopsModel::setCurrentStop(QtGradientStop *stop)
QtGradientStop *QtGradientStopsModel::firstSelected() const
{
PositionStopMap stopList = stops();
- PositionStopMap::ConstIterator itStop = stopList.constBegin();
+ auto itStop = stopList.cbegin();
while (itStop != stopList.constEnd()) {
QtGradientStop *stop = itStop.value();
if (isSelected(stop))
@@ -314,7 +280,7 @@ QtGradientStop *QtGradientStopsModel::firstSelected() const
QtGradientStop *QtGradientStopsModel::lastSelected() const
{
PositionStopMap stopList = stops();
- PositionStopMap::ConstIterator itStop = stopList.constEnd();
+ auto itStop = stopList.cend();
while (itStop != stopList.constBegin()) {
--itStop;
@@ -380,7 +346,7 @@ void QtGradientStopsModel::moveStops(double newPosition)
stopList[stop->position()] = stop;
stopList[current->position()] = current;
- PositionStopMap::ConstIterator itStop = forward ? stopList.constBegin() : stopList.constEnd();
+ auto itStop = forward ? stopList.cbegin() : stopList.cend();
while (itStop != (forward ? stopList.constEnd() : stopList.constBegin())) {
if (!forward)
--itStop;
@@ -418,17 +384,12 @@ void QtGradientStopsModel::clearSelection()
selectStop(stop, false);
}
-namespace {
- template <typename BidirectionalIterator>
- std::reverse_iterator<BidirectionalIterator> rev(BidirectionalIterator it)
- { return std::reverse_iterator<BidirectionalIterator>(it); }
-}
-
void QtGradientStopsModel::flipAll()
{
QMap<qreal, QtGradientStop *> stopsMap = stops();
- QMap<QtGradientStop *, bool> swappedList;
- for (auto itStop = rev(stopsMap.keyValueEnd()), end = rev(stopsMap.keyValueBegin()); itStop != end; ++itStop) {
+ QHash<QtGradientStop *, bool> swappedList;
+ for (auto itStop = stopsMap.keyValueEnd(), begin = stopsMap.keyValueBegin(); itStop != begin;) {
+ --itStop;
QtGradientStop *stop = (*itStop).second;
if (swappedList.contains(stop))
continue;
diff --git a/src/shared/qtgradienteditor/qtgradientstopsmodel.h b/src/shared/qtgradienteditor/qtgradientstopsmodel.h
index 71a8783e0..0325501ac 100644
--- a/src/shared/qtgradienteditor/qtgradientstopsmodel.h
+++ b/src/shared/qtgradienteditor/qtgradientstopsmodel.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QTGRADIENTSTOPSMODEL_H
#define QTGRADIENTSTOPSMODEL_H
@@ -69,7 +33,7 @@ class QtGradientStopsModel : public QObject
{
Q_OBJECT
public:
- typedef QMap<qreal, QtGradientStop *> PositionStopMap;
+ using PositionStopMap = QMap<qreal, QtGradientStop *>;
QtGradientStopsModel(QObject *parent = 0);
~QtGradientStopsModel();
diff --git a/src/shared/qtgradienteditor/qtgradientstopswidget.cpp b/src/shared/qtgradienteditor/qtgradientstopswidget.cpp
index 02c6434fe..c0aff22eb 100644
--- a/src/shared/qtgradienteditor/qtgradientstopswidget.cpp
+++ b/src/shared/qtgradienteditor/qtgradientstopswidget.cpp
@@ -1,46 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qtgradientstopswidget.h"
#include "qtgradientstopsmodel.h"
#include <QtCore/QMap>
+#include <QtCore/QHash>
#include <QtCore/QMimeData>
#include <QtGui/QImage>
#include <QtGui/QPainter>
@@ -51,13 +16,13 @@
QT_BEGIN_NAMESPACE
-class QtGradientStopsWidgetPrivate
+class QtGradientStopsWidgetPrivate : public QObject
{
+ Q_OBJECT
QtGradientStopsWidget *q_ptr;
Q_DECLARE_PUBLIC(QtGradientStopsWidget)
public:
- typedef QMap<qreal, QColor> PositionColorMap;
- typedef QMap<QtGradientStop *, qreal> StopPositionMap;
+ void setGradientStopsModel(QtGradientStopsModel *model);
void slotStopAdded(QtGradientStop *stop);
void slotStopRemoved(QtGradientStop *stop);
@@ -109,11 +74,65 @@ public:
bool m_moving;
int m_moveOffset;
- StopPositionMap m_moveStops;
+ QHash<QtGradientStop *, qreal> m_moveStops;
- PositionColorMap m_moveOriginal;
+ QMap<qreal, QColor> m_moveOriginal;
};
+void QtGradientStopsWidgetPrivate::setGradientStopsModel(QtGradientStopsModel *model)
+{
+ if (m_model == model)
+ return;
+
+ if (m_model) {
+ disconnect(m_model, &QtGradientStopsModel::stopAdded,
+ this, &QtGradientStopsWidgetPrivate::slotStopAdded);
+ disconnect(m_model, &QtGradientStopsModel::stopRemoved,
+ this, &QtGradientStopsWidgetPrivate::slotStopRemoved);
+ disconnect(m_model, &QtGradientStopsModel::stopMoved,
+ this, &QtGradientStopsWidgetPrivate::slotStopMoved);
+ disconnect(m_model, &QtGradientStopsModel::stopsSwapped,
+ this, &QtGradientStopsWidgetPrivate::slotStopsSwapped);
+ disconnect(m_model, &QtGradientStopsModel::stopChanged,
+ this, &QtGradientStopsWidgetPrivate::slotStopChanged);
+ disconnect(m_model, &QtGradientStopsModel::stopSelected,
+ this, &QtGradientStopsWidgetPrivate::slotStopSelected);
+ disconnect(m_model, &QtGradientStopsModel::currentStopChanged,
+ this, &QtGradientStopsWidgetPrivate::slotCurrentStopChanged);
+
+ m_stops.clear();
+ }
+
+ m_model = model;
+
+ if (m_model) {
+ connect(m_model, &QtGradientStopsModel::stopAdded,
+ this, &QtGradientStopsWidgetPrivate::slotStopAdded);
+ connect(m_model, &QtGradientStopsModel::stopRemoved,
+ this, &QtGradientStopsWidgetPrivate::slotStopRemoved);
+ connect(m_model, &QtGradientStopsModel::stopMoved,
+ this, &QtGradientStopsWidgetPrivate::slotStopMoved);
+ connect(m_model, &QtGradientStopsModel::stopsSwapped,
+ this, &QtGradientStopsWidgetPrivate::slotStopsSwapped);
+ connect(m_model, &QtGradientStopsModel::stopChanged,
+ this, &QtGradientStopsWidgetPrivate::slotStopChanged);
+ connect(m_model, &QtGradientStopsModel::stopSelected,
+ this, &QtGradientStopsWidgetPrivate::slotStopSelected);
+ connect(m_model, &QtGradientStopsModel::currentStopChanged,
+ this, &QtGradientStopsWidgetPrivate::slotCurrentStopChanged);
+
+ const auto stopsMap = m_model->stops();
+ for (auto it = stopsMap.cbegin(), end = stopsMap.cend(); it != end; ++it)
+ slotStopAdded(it.value());
+
+ const auto selected = m_model->selectedStops();
+ for (QtGradientStop *stop : selected)
+ slotStopSelected(stop, true);
+
+ slotCurrentStopChanged(m_model->currentStop());
+ }
+}
+
double QtGradientStopsWidgetPrivate::fromViewport(int x) const
{
QSize size = q_ptr->viewport()->size();
@@ -406,61 +425,11 @@ bool QtGradientStopsWidget::isBackgroundCheckered() const
void QtGradientStopsWidget::setGradientStopsModel(QtGradientStopsModel *model)
{
- if (d_ptr->m_model == model)
- return;
-
- if (d_ptr->m_model) {
- disconnect(d_ptr->m_model, SIGNAL(stopAdded(QtGradientStop*)),
- this, SLOT(slotStopAdded(QtGradientStop*)));
- disconnect(d_ptr->m_model, SIGNAL(stopRemoved(QtGradientStop*)),
- this, SLOT(slotStopRemoved(QtGradientStop*)));
- disconnect(d_ptr->m_model, SIGNAL(stopMoved(QtGradientStop*,qreal)),
- this, SLOT(slotStopMoved(QtGradientStop*,qreal)));
- disconnect(d_ptr->m_model, SIGNAL(stopsSwapped(QtGradientStop*,QtGradientStop*)),
- this, SLOT(slotStopsSwapped(QtGradientStop*,QtGradientStop*)));
- disconnect(d_ptr->m_model, SIGNAL(stopChanged(QtGradientStop*,QColor)),
- this, SLOT(slotStopChanged(QtGradientStop*,QColor)));
- disconnect(d_ptr->m_model, SIGNAL(stopSelected(QtGradientStop*,bool)),
- this, SLOT(slotStopSelected(QtGradientStop*,bool)));
- disconnect(d_ptr->m_model, SIGNAL(currentStopChanged(QtGradientStop*)),
- this, SLOT(slotCurrentStopChanged(QtGradientStop*)));
-
- d_ptr->m_stops.clear();
- }
-
- d_ptr->m_model = model;
-
- if (d_ptr->m_model) {
- connect(d_ptr->m_model, SIGNAL(stopAdded(QtGradientStop*)),
- this, SLOT(slotStopAdded(QtGradientStop*)));
- connect(d_ptr->m_model, SIGNAL(stopRemoved(QtGradientStop*)),
- this, SLOT(slotStopRemoved(QtGradientStop*)));
- connect(d_ptr->m_model, SIGNAL(stopMoved(QtGradientStop*,qreal)),
- this, SLOT(slotStopMoved(QtGradientStop*,qreal)));
- connect(d_ptr->m_model, SIGNAL(stopsSwapped(QtGradientStop*,QtGradientStop*)),
- this, SLOT(slotStopsSwapped(QtGradientStop*,QtGradientStop*)));
- connect(d_ptr->m_model, SIGNAL(stopChanged(QtGradientStop*,QColor)),
- this, SLOT(slotStopChanged(QtGradientStop*,QColor)));
- connect(d_ptr->m_model, SIGNAL(stopSelected(QtGradientStop*,bool)),
- this, SLOT(slotStopSelected(QtGradientStop*,bool)));
- connect(d_ptr->m_model, SIGNAL(currentStopChanged(QtGradientStop*)),
- this, SLOT(slotCurrentStopChanged(QtGradientStop*)));
-
- const QtGradientStopsModel::PositionStopMap stopsMap = d_ptr->m_model->stops();
- for (auto it = stopsMap.cbegin(), end = stopsMap.cend(); it != end; ++it)
- d_ptr->slotStopAdded(it.value());
-
- const auto selected = d_ptr->m_model->selectedStops();
- for (QtGradientStop *stop : selected)
- d_ptr->slotStopSelected(stop, true);
-
- d_ptr->slotCurrentStopChanged(d_ptr->m_model->currentStop());
- }
+ d_ptr->setGradientStopsModel(model);
}
void QtGradientStopsWidget::mousePressEvent(QMouseEvent *e)
{
- typedef QtGradientStopsModel::PositionStopMap PositionStopMap;
if (!d_ptr->m_model)
return;
@@ -479,8 +448,8 @@ void QtGradientStopsWidget::mousePressEvent(QMouseEvent *e)
} else if (e->modifiers() & Qt::ShiftModifier) {
QtGradientStop *oldCurrent = d_ptr->m_model->currentStop();
if (oldCurrent) {
- PositionStopMap stops = d_ptr->m_model->stops();
- PositionStopMap::ConstIterator itSt = stops.constFind(oldCurrent->position());
+ const auto stops = d_ptr->m_model->stops();
+ auto itSt = stops.constFind(oldCurrent->position());
if (itSt != stops.constEnd()) {
while (itSt != stops.constFind(stop->position())) {
d_ptr->m_model->selectStop(itSt.value(), true);
@@ -523,9 +492,6 @@ void QtGradientStopsWidget::mouseReleaseEvent(QMouseEvent *e)
void QtGradientStopsWidget::mouseMoveEvent(QMouseEvent *e)
{
- typedef QtGradientStopsWidgetPrivate::PositionColorMap PositionColorMap;
- typedef QtGradientStopsModel::PositionStopMap PositionStopMap;
- typedef QtGradientStopsWidgetPrivate::StopPositionMap StopPositionMap;
if (!d_ptr->m_model)
return;
@@ -539,7 +505,7 @@ void QtGradientStopsWidget::mouseMoveEvent(QMouseEvent *e)
double maxOffset = 0.0;
double minOffset = 0.0;
bool first = true;
- StopPositionMap::ConstIterator itStop = d_ptr->m_moveStops.constBegin();
+ auto itStop = d_ptr->m_moveStops.cbegin();
while (itStop != d_ptr->m_moveStops.constEnd()) {
double offset = itStop.value();
@@ -559,7 +525,7 @@ void QtGradientStopsWidget::mouseMoveEvent(QMouseEvent *e)
double viewportMin = d_ptr->toViewport(-minOffset);
double viewportMax = d_ptr->toViewport(1.0 - maxOffset);
- PositionStopMap newPositions;
+ QtGradientStopsModel::PositionStopMap newPositions;
int viewportX = e->position().toPoint().x() - d_ptr->m_moveOffset;
@@ -585,7 +551,7 @@ void QtGradientStopsWidget::mouseMoveEvent(QMouseEvent *e)
}
bool forward = true;
- PositionStopMap::ConstIterator itNewPos = newPositions.constBegin();
+ auto itNewPos = newPositions.cbegin();
if (itNewPos.value()->position() < itNewPos.key())
forward = false;
@@ -609,7 +575,7 @@ void QtGradientStopsWidget::mouseMoveEvent(QMouseEvent *e)
++itNewPos;
}
- PositionColorMap::ConstIterator itOld = d_ptr->m_moveOriginal.constBegin();
+ auto itOld = d_ptr->m_moveOriginal.cbegin();
while (itOld != d_ptr->m_moveOriginal.constEnd()) {
double position = itOld.key();
if (!d_ptr->m_model->at(position))
@@ -658,7 +624,7 @@ void QtGradientStopsWidget::mouseMoveEvent(QMouseEvent *e)
double x1 = d_ptr->fromViewport(xv1);
double x2 = d_ptr->fromViewport(xv2);
- for (QtGradientStop *stop : qAsConst(d_ptr->m_stops)) {
+ for (QtGradientStop *stop : std::as_const(d_ptr->m_stops)) {
if ((stop->position() >= x1 && stop->position() <= x2) ||
beginList.contains(stop) || endList.contains(stop))
d_ptr->m_model->selectStop(stop, true);
@@ -699,7 +665,6 @@ void QtGradientStopsWidget::mouseDoubleClickEvent(QMouseEvent *e)
void QtGradientStopsWidget::keyPressEvent(QKeyEvent *e)
{
- typedef QtGradientStopsModel::PositionStopMap PositionStopMap;
if (!d_ptr->m_model)
return;
@@ -707,10 +672,10 @@ void QtGradientStopsWidget::keyPressEvent(QKeyEvent *e)
d_ptr->m_model->deleteStops();
} else if (e->key() == Qt::Key_Left || e->key() == Qt::Key_Right ||
e->key() == Qt::Key_Home || e->key() == Qt::Key_End) {
- PositionStopMap stops = d_ptr->m_model->stops();
+ const auto stops = d_ptr->m_model->stops();
if (stops.isEmpty())
return;
- QtGradientStop *newCurrent = 0;
+ QtGradientStop *newCurrent = nullptr;
QtGradientStop *current = d_ptr->m_model->currentStop();
if (!current || e->key() == Qt::Key_Home || e->key() == Qt::Key_End) {
if (e->key() == Qt::Key_Left || e->key() == Qt::Key_Home)
@@ -718,7 +683,7 @@ void QtGradientStopsWidget::keyPressEvent(QKeyEvent *e)
else if (e->key() == Qt::Key_Right || e->key() == Qt::Key_End)
newCurrent = (--stops.constEnd()).value();
} else {
- PositionStopMap::ConstIterator itStop = stops.constBegin();
+ auto itStop = stops.cbegin();
while (itStop.value() != current)
++itStop;
if (e->key() == Qt::Key_Left && itStop != stops.constBegin())
@@ -940,13 +905,13 @@ void QtGradientStopsWidget::contextMenuEvent(QContextMenuEvent *e)
} else if (zoom() >= 100) {
zoomInAction->setEnabled(false);
}
- connect(newStopAction, SIGNAL(triggered()), this, SLOT(slotNewStop()));
- connect(deleteAction, SIGNAL(triggered()), this, SLOT(slotDelete()));
- connect(flipAllAction, SIGNAL(triggered()), this, SLOT(slotFlipAll()));
- connect(selectAllAction, SIGNAL(triggered()), this, SLOT(slotSelectAll()));
- connect(zoomInAction, SIGNAL(triggered()), this, SLOT(slotZoomIn()));
- connect(zoomOutAction, SIGNAL(triggered()), this, SLOT(slotZoomOut()));
- connect(zoomAllAction, SIGNAL(triggered()), this, SLOT(slotResetZoom()));
+ connect(newStopAction, &QAction::triggered, d_ptr.data(), &QtGradientStopsWidgetPrivate::slotNewStop);
+ connect(deleteAction, &QAction::triggered, d_ptr.data(), &QtGradientStopsWidgetPrivate::slotDelete);
+ connect(flipAllAction, &QAction::triggered, d_ptr.data(), &QtGradientStopsWidgetPrivate::slotFlipAll);
+ connect(selectAllAction, &QAction::triggered, d_ptr.data(), &QtGradientStopsWidgetPrivate::slotSelectAll);
+ connect(zoomInAction, &QAction::triggered, d_ptr.data(), &QtGradientStopsWidgetPrivate::slotZoomIn);
+ connect(zoomOutAction, &QAction::triggered, d_ptr.data(), &QtGradientStopsWidgetPrivate::slotZoomOut);
+ connect(zoomAllAction, &QAction::triggered, d_ptr.data(), &QtGradientStopsWidgetPrivate::slotResetZoom);
menu.addAction(newStopAction);
menu.addAction(deleteAction);
menu.addAction(flipAllAction);
@@ -1132,4 +1097,4 @@ double QtGradientStopsWidget::zoom() const
QT_END_NAMESPACE
-#include "moc_qtgradientstopswidget.cpp"
+#include "qtgradientstopswidget.moc"
diff --git a/src/shared/qtgradienteditor/qtgradientstopswidget.h b/src/shared/qtgradienteditor/qtgradientstopswidget.h
index 025f72846..57db5a36a 100644
--- a/src/shared/qtgradienteditor/qtgradientstopswidget.h
+++ b/src/shared/qtgradienteditor/qtgradientstopswidget.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QTGRADIENTSTOPSWIDGET_H
#define QTGRADIENTSTOPSWIDGET_H
@@ -67,7 +31,6 @@ public:
double zoom() const;
signals:
-
void zoomChanged(double zoom);
protected:
@@ -92,20 +55,6 @@ private:
QScopedPointer<QtGradientStopsWidgetPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtGradientStopsWidget)
Q_DISABLE_COPY_MOVE(QtGradientStopsWidget)
- Q_PRIVATE_SLOT(d_func(), void slotStopAdded(QtGradientStop *stop))
- Q_PRIVATE_SLOT(d_func(), void slotStopRemoved(QtGradientStop *stop))
- Q_PRIVATE_SLOT(d_func(), void slotStopMoved(QtGradientStop *stop, qreal newPos))
- Q_PRIVATE_SLOT(d_func(), void slotStopsSwapped(QtGradientStop *stop1, QtGradientStop *stop2))
- Q_PRIVATE_SLOT(d_func(), void slotStopChanged(QtGradientStop *stop, const QColor &newColor))
- Q_PRIVATE_SLOT(d_func(), void slotStopSelected(QtGradientStop *stop, bool selected))
- Q_PRIVATE_SLOT(d_func(), void slotCurrentStopChanged(QtGradientStop *stop))
- Q_PRIVATE_SLOT(d_func(), void slotNewStop())
- Q_PRIVATE_SLOT(d_func(), void slotDelete())
- Q_PRIVATE_SLOT(d_func(), void slotFlipAll())
- Q_PRIVATE_SLOT(d_func(), void slotSelectAll())
- Q_PRIVATE_SLOT(d_func(), void slotZoomIn())
- Q_PRIVATE_SLOT(d_func(), void slotZoomOut())
- Q_PRIVATE_SLOT(d_func(), void slotResetZoom())
};
QT_END_NAMESPACE
diff --git a/src/shared/qtgradienteditor/qtgradientutils.cpp b/src/shared/qtgradienteditor/qtgradientutils.cpp
index 11e8d089a..fa79826b9 100644
--- a/src/shared/qtgradienteditor/qtgradientutils.cpp
+++ b/src/shared/qtgradienteditor/qtgradientutils.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qtgradientutils.h"
#include "qtgradientmanager.h"
@@ -47,24 +11,26 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
static QString gradientTypeToString(QGradient::Type type)
{
if (type == QGradient::LinearGradient)
- return QLatin1String("LinearGradient");
+ return "LinearGradient"_L1;
if (type == QGradient::RadialGradient)
- return QLatin1String("RadialGradient");
+ return "RadialGradient"_L1;
if (type == QGradient::ConicalGradient)
- return QLatin1String("ConicalGradient");
- return QLatin1String("NoGradient");
+ return "ConicalGradient"_L1;
+ return "NoGradient"_L1;
}
static QGradient::Type stringToGradientType(const QString &name)
{
- if (name == QLatin1String("LinearGradient"))
+ if (name == "LinearGradient"_L1)
return QGradient::LinearGradient;
- if (name == QLatin1String("RadialGradient"))
+ if (name == "RadialGradient"_L1)
return QGradient::RadialGradient;
- if (name == QLatin1String("ConicalGradient"))
+ if (name == "ConicalGradient"_L1)
return QGradient::ConicalGradient;
return QGradient::NoGradient;
}
@@ -72,21 +38,21 @@ static QGradient::Type stringToGradientType(const QString &name)
static QString gradientSpreadToString(QGradient::Spread spread)
{
if (spread == QGradient::PadSpread)
- return QLatin1String("PadSpread");
+ return "PadSpread"_L1;
if (spread == QGradient::RepeatSpread)
- return QLatin1String("RepeatSpread");
+ return "RepeatSpread"_L1;
if (spread == QGradient::ReflectSpread)
- return QLatin1String("ReflectSpread");
- return QLatin1String("PadSpread");
+ return "ReflectSpread"_L1;
+ return "PadSpread"_L1;
}
static QGradient::Spread stringToGradientSpread(const QString &name)
{
- if (name == QLatin1String("PadSpread"))
+ if (name == "PadSpread"_L1)
return QGradient::PadSpread;
- if (name == QLatin1String("RepeatSpread"))
+ if (name == "RepeatSpread"_L1)
return QGradient::RepeatSpread;
- if (name == QLatin1String("ReflectSpread"))
+ if (name == "ReflectSpread"_L1)
return QGradient::ReflectSpread;
return QGradient::PadSpread;
}
@@ -94,42 +60,42 @@ static QGradient::Spread stringToGradientSpread(const QString &name)
static QString gradientCoordinateModeToString(QGradient::CoordinateMode mode)
{
if (mode == QGradient::LogicalMode)
- return QLatin1String("LogicalMode");
+ return "LogicalMode"_L1;
if (mode == QGradient::StretchToDeviceMode)
- return QLatin1String("StretchToDeviceMode");
+ return "StretchToDeviceMode"_L1;
if (mode == QGradient::ObjectBoundingMode)
- return QLatin1String("ObjectBoundingMode");
- return QLatin1String("StretchToDeviceMode");
+ return "ObjectBoundingMode"_L1;
+ return "StretchToDeviceMode"_L1;
}
static QGradient::CoordinateMode stringToGradientCoordinateMode(const QString &name)
{
- if (name == QLatin1String("LogicalMode"))
+ if (name == "LogicalMode"_L1)
return QGradient::LogicalMode;
- if (name == QLatin1String("StretchToDeviceMode"))
+ if (name == "StretchToDeviceMode"_L1)
return QGradient::StretchToDeviceMode;
- if (name == QLatin1String("ObjectBoundingMode"))
+ if (name == "ObjectBoundingMode"_L1)
return QGradient::ObjectBoundingMode;
return QGradient::StretchToDeviceMode;
}
static QDomElement saveColor(QDomDocument &doc, const QColor &color)
{
- QDomElement colorElem = doc.createElement(QLatin1String("colorData"));
+ QDomElement colorElem = doc.createElement("colorData"_L1);
- colorElem.setAttribute(QLatin1String("r"), QString::number(color.red()));
- colorElem.setAttribute(QLatin1String("g"), QString::number(color.green()));
- colorElem.setAttribute(QLatin1String("b"), QString::number(color.blue()));
- colorElem.setAttribute(QLatin1String("a"), QString::number(color.alpha()));
+ colorElem.setAttribute("r"_L1, QString::number(color.red()));
+ colorElem.setAttribute("g"_L1, QString::number(color.green()));
+ colorElem.setAttribute("b"_L1, QString::number(color.blue()));
+ colorElem.setAttribute("a"_L1, QString::number(color.alpha()));
return colorElem;
}
static QDomElement saveGradientStop(QDomDocument &doc, const QGradientStop &stop)
{
- QDomElement stopElem = doc.createElement(QLatin1String("stopData"));
+ QDomElement stopElem = doc.createElement("stopData"_L1);
- stopElem.setAttribute(QLatin1String("position"), QString::number(stop.first));
+ stopElem.setAttribute("position"_L1, QString::number(stop.first));
const QDomElement colorElem = saveColor(doc, stop.second);
stopElem.appendChild(colorElem);
@@ -139,12 +105,12 @@ static QDomElement saveGradientStop(QDomDocument &doc, const QGradientStop &stop
static QDomElement saveGradient(QDomDocument &doc, const QGradient &gradient)
{
- QDomElement gradElem = doc.createElement(QLatin1String("gradientData"));
+ QDomElement gradElem = doc.createElement("gradientData"_L1);
const QGradient::Type type = gradient.type();
- gradElem.setAttribute(QLatin1String("type"), gradientTypeToString(type));
- gradElem.setAttribute(QLatin1String("spread"), gradientSpreadToString(gradient.spread()));
- gradElem.setAttribute(QLatin1String("coordinateMode"), gradientCoordinateModeToString(gradient.coordinateMode()));
+ gradElem.setAttribute("type"_L1, gradientTypeToString(type));
+ gradElem.setAttribute("spread"_L1, gradientSpreadToString(gradient.spread()));
+ gradElem.setAttribute("coordinateMode"_L1, gradientCoordinateModeToString(gradient.coordinateMode()));
const QGradientStops stops = gradient.stops();
for (const QGradientStop &stop : stops)
@@ -152,22 +118,22 @@ static QDomElement saveGradient(QDomDocument &doc, const QGradient &gradient)
if (type == QGradient::LinearGradient) {
const QLinearGradient &g = *static_cast<const QLinearGradient *>(&gradient);
- gradElem.setAttribute(QLatin1String("startX"), QString::number(g.start().x()));
- gradElem.setAttribute(QLatin1String("startY"), QString::number(g.start().y()));
- gradElem.setAttribute(QLatin1String("endX"), QString::number(g.finalStop().x()));
- gradElem.setAttribute(QLatin1String("endY"), QString::number(g.finalStop().y()));
+ gradElem.setAttribute("startX"_L1, QString::number(g.start().x()));
+ gradElem.setAttribute("startY"_L1, QString::number(g.start().y()));
+ gradElem.setAttribute("endX"_L1, QString::number(g.finalStop().x()));
+ gradElem.setAttribute("endY"_L1, QString::number(g.finalStop().y()));
} else if (type == QGradient::RadialGradient) {
const QRadialGradient &g = *static_cast<const QRadialGradient *>(&gradient);
- gradElem.setAttribute(QLatin1String("centerX"), QString::number(g.center().x()));
- gradElem.setAttribute(QLatin1String("centerY"), QString::number(g.center().y()));
- gradElem.setAttribute(QLatin1String("focalX"), QString::number(g.focalPoint().x()));
- gradElem.setAttribute(QLatin1String("focalY"), QString::number(g.focalPoint().y()));
- gradElem.setAttribute(QLatin1String("radius"), QString::number(g.radius()));
+ gradElem.setAttribute("centerX"_L1, QString::number(g.center().x()));
+ gradElem.setAttribute("centerY"_L1, QString::number(g.center().y()));
+ gradElem.setAttribute("focalX"_L1, QString::number(g.focalPoint().x()));
+ gradElem.setAttribute("focalY"_L1, QString::number(g.focalPoint().y()));
+ gradElem.setAttribute("radius"_L1, QString::number(g.radius()));
} else if (type == QGradient::ConicalGradient) {
const QConicalGradient &g = *static_cast<const QConicalGradient*>(&gradient);
- gradElem.setAttribute(QLatin1String("centerX"), QString::number(g.center().x()));
- gradElem.setAttribute(QLatin1String("centerY"), QString::number(g.center().y()));
- gradElem.setAttribute(QLatin1String("angle"), QString::number(g.angle()));
+ gradElem.setAttribute("centerX"_L1, QString::number(g.center().x()));
+ gradElem.setAttribute("centerY"_L1, QString::number(g.center().y()));
+ gradElem.setAttribute("angle"_L1, QString::number(g.angle()));
}
return gradElem;
@@ -175,50 +141,50 @@ static QDomElement saveGradient(QDomDocument &doc, const QGradient &gradient)
static QColor loadColor(const QDomElement &elem)
{
- if (elem.tagName() != QLatin1String("colorData"))
+ if (elem.tagName() != "colorData"_L1)
return QColor();
- return QColor(elem.attribute(QLatin1String("r")).toInt(),
- elem.attribute(QLatin1String("g")).toInt(),
- elem.attribute(QLatin1String("b")).toInt(),
- elem.attribute(QLatin1String("a")).toInt());
+ return QColor(elem.attribute("r"_L1).toInt(),
+ elem.attribute("g"_L1).toInt(),
+ elem.attribute("b"_L1).toInt(),
+ elem.attribute("a"_L1).toInt());
}
static QGradientStop loadGradientStop(const QDomElement &elem)
{
- if (elem.tagName() != QLatin1String("stopData"))
+ if (elem.tagName() != "stopData"_L1)
return QGradientStop();
- const qreal pos = static_cast<qreal>(elem.attribute(QLatin1String("position")).toDouble());
- return qMakePair(pos, loadColor(elem.firstChild().toElement()));
+ const qreal pos = static_cast<qreal>(elem.attribute("position"_L1).toDouble());
+ return std::make_pair(pos, loadColor(elem.firstChild().toElement()));
}
static QGradient loadGradient(const QDomElement &elem)
{
- if (elem.tagName() != QLatin1String("gradientData"))
+ if (elem.tagName() != "gradientData"_L1)
return QLinearGradient();
- const QGradient::Type type = stringToGradientType(elem.attribute(QLatin1String("type")));
- const QGradient::Spread spread = stringToGradientSpread(elem.attribute(QLatin1String("spread")));
- const QGradient::CoordinateMode mode = stringToGradientCoordinateMode(elem.attribute(QLatin1String("coordinateMode")));
+ const QGradient::Type type = stringToGradientType(elem.attribute("type"_L1));
+ const QGradient::Spread spread = stringToGradientSpread(elem.attribute("spread"_L1));
+ const QGradient::CoordinateMode mode = stringToGradientCoordinateMode(elem.attribute("coordinateMode"_L1));
QGradient gradient = QLinearGradient();
if (type == QGradient::LinearGradient) {
QLinearGradient g;
- g.setStart(elem.attribute(QLatin1String("startX")).toDouble(), elem.attribute(QLatin1String("startY")).toDouble());
- g.setFinalStop(elem.attribute(QLatin1String("endX")).toDouble(), elem.attribute(QLatin1String("endY")).toDouble());
+ g.setStart(elem.attribute("startX"_L1).toDouble(), elem.attribute("startY"_L1).toDouble());
+ g.setFinalStop(elem.attribute("endX"_L1).toDouble(), elem.attribute("endY"_L1).toDouble());
gradient = g;
} else if (type == QGradient::RadialGradient) {
QRadialGradient g;
- g.setCenter(elem.attribute(QLatin1String("centerX")).toDouble(), elem.attribute(QLatin1String("centerY")).toDouble());
- g.setFocalPoint(elem.attribute(QLatin1String("focalX")).toDouble(), elem.attribute(QLatin1String("focalY")).toDouble());
- g.setRadius(elem.attribute(QLatin1String("radius")).toDouble());
+ g.setCenter(elem.attribute("centerX"_L1).toDouble(), elem.attribute("centerY"_L1).toDouble());
+ g.setFocalPoint(elem.attribute("focalX"_L1).toDouble(), elem.attribute("focalY"_L1).toDouble());
+ g.setRadius(elem.attribute("radius"_L1).toDouble());
gradient = g;
} else if (type == QGradient::ConicalGradient) {
QConicalGradient g;
- g.setCenter(elem.attribute(QLatin1String("centerX")).toDouble(), elem.attribute(QLatin1String("centerY")).toDouble());
- g.setAngle(elem.attribute(QLatin1String("angle")).toDouble());
+ g.setCenter(elem.attribute("centerX"_L1).toDouble(), elem.attribute("centerY"_L1).toDouble());
+ g.setAngle(elem.attribute("angle"_L1).toDouble());
gradient = g;
}
@@ -241,12 +207,12 @@ QString QtGradientUtils::saveState(const QtGradientManager *manager)
{
QDomDocument doc;
- QDomElement rootElem = doc.createElement(QLatin1String("gradients"));
+ QDomElement rootElem = doc.createElement("gradients"_L1);
QMap<QString, QGradient> grads = manager->gradients();
for (auto itGrad = grads.cbegin(), end = grads.cend(); itGrad != end; ++itGrad) {
- QDomElement idElem = doc.createElement(QLatin1String("gradient"));
- idElem.setAttribute(QLatin1String("name"), itGrad.key());
+ QDomElement idElem = doc.createElement("gradient"_L1);
+ idElem.setAttribute("name"_L1, itGrad.key());
QDomElement gradElem = saveGradient(doc, itGrad.value());
idElem.appendChild(gradElem);
@@ -269,7 +235,7 @@ void QtGradientUtils::restoreState(QtGradientManager *manager, const QString &st
QDomElement gradElem = rootElem.firstChildElement();
while (!gradElem.isNull()) {
- const QString name = gradElem.attribute(QLatin1String("name"));
+ const QString name = gradElem.attribute("name"_L1);
const QGradient gradient = loadGradient(gradElem.firstChildElement());
manager->addGradient(name, gradient);
@@ -315,13 +281,13 @@ static QString styleSheetFillName(const QGradient &gradient)
switch (gradient.type()) {
case QGradient::LinearGradient:
- result += QLatin1String("qlineargradient");
+ result += "qlineargradient"_L1;
break;
case QGradient::RadialGradient:
- result += QLatin1String("qradialgradient");
+ result += "qradialgradient"_L1;
break;
case QGradient::ConicalGradient:
- result += QLatin1String("qconicalgradient");
+ result += "qconicalgradient"_L1;
break;
default:
qWarning() << "QtGradientUtils::styleSheetFillName(): gradient type" << gradient.type() << "not supported!";
@@ -339,44 +305,44 @@ static QStringList styleSheetParameters(const QGradient &gradient)
QString spread;
switch (gradient.spread()) {
case QGradient::PadSpread:
- spread = QLatin1String("pad");
+ spread = "pad"_L1;
break;
case QGradient::ReflectSpread:
- spread = QLatin1String("reflect");
+ spread = "reflect"_L1;
break;
case QGradient::RepeatSpread:
- spread = QLatin1String("repeat");
+ spread = "repeat"_L1;
break;
default:
qWarning() << "QtGradientUtils::styleSheetParameters(): gradient spread" << gradient.spread() << "not supported!";
break;
}
- result << QLatin1String("spread:") + spread;
+ result << "spread:"_L1 + spread;
}
switch (gradient.type()) {
case QGradient::LinearGradient: {
const QLinearGradient *linearGradient = static_cast<const QLinearGradient*>(&gradient);
- result << QLatin1String("x1:") + QString::number(linearGradient->start().x())
- << QLatin1String("y1:") + QString::number(linearGradient->start().y())
- << QLatin1String("x2:") + QString::number(linearGradient->finalStop().x())
- << QLatin1String("y2:") + QString::number(linearGradient->finalStop().y());
+ result << "x1:"_L1 + QString::number(linearGradient->start().x())
+ << "y1:"_L1 + QString::number(linearGradient->start().y())
+ << "x2:"_L1 + QString::number(linearGradient->finalStop().x())
+ << "y2:"_L1 + QString::number(linearGradient->finalStop().y());
break;
}
case QGradient::RadialGradient: {
const QRadialGradient *radialGradient = static_cast<const QRadialGradient*>(&gradient);
- result << QLatin1String("cx:") + QString::number(radialGradient->center().x())
- << QLatin1String("cy:") + QString::number(radialGradient->center().y())
- << QLatin1String("radius:") + QString::number(radialGradient->radius())
- << QLatin1String("fx:") + QString::number(radialGradient->focalPoint().x())
- << QLatin1String("fy:") + QString::number(radialGradient->focalPoint().y());
+ result << "cx:"_L1 + QString::number(radialGradient->center().x())
+ << "cy:"_L1 + QString::number(radialGradient->center().y())
+ << "radius:"_L1 + QString::number(radialGradient->radius())
+ << "fx:"_L1 + QString::number(radialGradient->focalPoint().x())
+ << "fy:"_L1 + QString::number(radialGradient->focalPoint().y());
break;
}
case QGradient::ConicalGradient: {
const QConicalGradient *conicalGradient = static_cast<const QConicalGradient*>(&gradient);
- result << QLatin1String("cx:") + QString::number(conicalGradient->center().x())
- << QLatin1String("cy:") + QString::number(conicalGradient->center().y())
- << QLatin1String("angle:") + QString::number(conicalGradient->angle());
+ result << "cx:"_L1 + QString::number(conicalGradient->center().x())
+ << "cy:"_L1 + QString::number(conicalGradient->center().y())
+ << "angle:"_L1 + QString::number(conicalGradient->angle());
break;
}
default:
@@ -394,10 +360,10 @@ static QStringList styleSheetStops(const QGradient &gradient)
for (const QGradientStop &stop : stops) {
const QColor color = stop.second;
- const QString stopDescription = QLatin1String("stop:") + QString::number(stop.first) + QLatin1String(" rgba(")
- + QString::number(color.red()) + QLatin1String(", ")
- + QString::number(color.green()) + QLatin1String(", ")
- + QString::number(color.blue()) + QLatin1String(", ")
+ const QString stopDescription = "stop:"_L1 + QString::number(stop.first) + " rgba("_L1
+ + QString::number(color.red()) + ", "_L1
+ + QString::number(color.green()) + ", "_L1
+ + QString::number(color.blue()) + ", "_L1
+ QString::number(color.alpha()) + QLatin1Char(')');
result << stopDescription;
}
@@ -410,7 +376,7 @@ QString QtGradientUtils::styleSheetCode(const QGradient &gradient)
QStringList gradientParameters;
gradientParameters << styleSheetParameters(gradient) << styleSheetStops(gradient);
- return styleSheetFillName(gradient) + QLatin1Char('(') + gradientParameters.join(QLatin1String(", ")) + QLatin1Char(')');
+ return styleSheetFillName(gradient) + QLatin1Char('(') + gradientParameters.join(", "_L1) + QLatin1Char(')');
}
QT_END_NAMESPACE
diff --git a/src/shared/qtgradienteditor/qtgradientutils.h b/src/shared/qtgradienteditor/qtgradientutils.h
index e0fe68193..fb71c7f3c 100644
--- a/src/shared/qtgradienteditor/qtgradientutils.h
+++ b/src/shared/qtgradienteditor/qtgradientutils.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 GRADIENTUTILS_H
#define GRADIENTUTILS_H
@@ -56,7 +20,6 @@ public:
static void restoreState(QtGradientManager *manager, const QString &state);
static QPixmap gradientPixmap(const QGradient &gradient, const QSize &size = QSize(64, 64), bool checkeredBackground = false);
-
};
QT_END_NAMESPACE
diff --git a/src/shared/qtgradienteditor/qtgradientview.cpp b/src/shared/qtgradienteditor/qtgradientview.cpp
index 40e698818..b6828d967 100644
--- a/src/shared/qtgradienteditor/qtgradientview.cpp
+++ b/src/shared/qtgradienteditor/qtgradientview.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qtgradientview.h"
#include "qtgradientmanager.h"
@@ -50,6 +14,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
void QtGradientView::slotGradientAdded(const QString &id, const QGradient &gradient)
{
QListWidgetItem *item = new QListWidgetItem(QtGradientUtils::gradientPixmap(gradient), id, m_ui.listWidget);
@@ -149,7 +115,7 @@ void QtGradientView::slotRenameGradient()
m_ui.listWidget->editItem(item);
}
-void QtGradientView::slotRenameGradient(QListWidgetItem *item)
+void QtGradientView::slotRenameGradientItem(QListWidgetItem *item)
{
if (!item)
return;
@@ -176,7 +142,7 @@ void QtGradientView::slotGradientActivated(QListWidgetItem *item)
QtGradientView::QtGradientView(QWidget *parent)
: QWidget(parent)
{
- m_manager = 0;
+ m_manager = nullptr;
m_ui.setupUi(this);
@@ -202,19 +168,19 @@ QtGradientView::QtGradientView(QWidget *parent)
pal.setBrush(QPalette::Base, QBrush(pm));
m_ui.listWidget->viewport()->setPalette(pal);
- connect(m_ui.listWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(slotGradientActivated(QListWidgetItem*)));
- connect(m_ui.listWidget, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(slotRenameGradient(QListWidgetItem*)));
- connect(m_ui.listWidget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(slotCurrentItemChanged(QListWidgetItem*)));
+ connect(m_ui.listWidget, &QListWidget::itemDoubleClicked, this, &QtGradientView::slotGradientActivated);
+ connect(m_ui.listWidget, &QListWidget::itemChanged, this, &QtGradientView::slotRenameGradientItem);
+ connect(m_ui.listWidget, &QListWidget::currentItemChanged, this, &QtGradientView::slotCurrentItemChanged);
- m_newAction = new QAction(QIcon(QLatin1String(":/qt-project.org/qtgradienteditor/images/plus.png")), tr("New..."), this);
- m_editAction = new QAction(QIcon(QLatin1String(":/qt-project.org/qtgradienteditor/images/edit.png")), tr("Edit..."), this);
+ m_newAction = new QAction(QIcon(":/qt-project.org/qtgradienteditor/images/plus.png"_L1), tr("New..."), this);
+ m_editAction = new QAction(QIcon(":/qt-project.org/qtgradienteditor/images/edit.png"_L1), tr("Edit..."), this);
m_renameAction = new QAction(tr("Rename"), this);
- m_removeAction = new QAction(QIcon(QLatin1String(":/qt-project.org/qtgradienteditor/images/minus.png")), tr("Remove"), this);
+ m_removeAction = new QAction(QIcon(":/qt-project.org/qtgradienteditor/images/minus.png"_L1), tr("Remove"), this);
- connect(m_newAction, SIGNAL(triggered()), this, SLOT(slotNewGradient()));
- connect(m_editAction, SIGNAL(triggered()), this, SLOT(slotEditGradient()));
- connect(m_removeAction, SIGNAL(triggered()), this, SLOT(slotRemoveGradient()));
- connect(m_renameAction, SIGNAL(triggered()), this, SLOT(slotRenameGradient()));
+ connect(m_newAction, &QAction::triggered, this, &QtGradientView::slotNewGradient);
+ connect(m_editAction, &QAction::triggered, this, &QtGradientView::slotEditGradient);
+ connect(m_removeAction, &QAction::triggered, this, &QtGradientView::slotRemoveGradient);
+ connect(m_renameAction, &QAction::triggered, this, &QtGradientView::slotRenameGradient);
m_ui.listWidget->addAction(m_newAction);
m_ui.listWidget->addAction(m_editAction);
@@ -235,14 +201,14 @@ void QtGradientView::setGradientManager(QtGradientManager *manager)
return;
if (m_manager) {
- disconnect(m_manager, SIGNAL(gradientAdded(QString,QGradient)),
- this, SLOT(slotGradientAdded(QString,QGradient)));
- disconnect(m_manager, SIGNAL(gradientRenamed(QString,QString)),
- this, SLOT(slotGradientRenamed(QString,QString)));
- disconnect(m_manager, SIGNAL(gradientChanged(QString,QGradient)),
- this, SLOT(slotGradientChanged(QString,QGradient)));
- disconnect(m_manager, SIGNAL(gradientRemoved(QString)),
- this, SLOT(slotGradientRemoved(QString)));
+ disconnect(m_manager, &QtGradientManager::gradientAdded,
+ this, &QtGradientView::slotGradientAdded);
+ disconnect(m_manager, &QtGradientManager::gradientRenamed,
+ this, &QtGradientView::slotGradientRenamed);
+ disconnect(m_manager, &QtGradientManager::gradientChanged,
+ this, &QtGradientView::slotGradientChanged);
+ disconnect(m_manager, &QtGradientManager::gradientRemoved,
+ this, &QtGradientView::slotGradientRemoved);
m_ui.listWidget->clear();
m_idToItem.clear();
@@ -258,14 +224,14 @@ void QtGradientView::setGradientManager(QtGradientManager *manager)
for (auto itGrad = gradients.cbegin(), end = gradients.cend(); itGrad != end; ++itGrad)
slotGradientAdded(itGrad.key(), itGrad.value());
- connect(m_manager, SIGNAL(gradientAdded(QString,QGradient)),
- this, SLOT(slotGradientAdded(QString,QGradient)));
- connect(m_manager, SIGNAL(gradientRenamed(QString,QString)),
- this, SLOT(slotGradientRenamed(QString,QString)));
- connect(m_manager, SIGNAL(gradientChanged(QString,QGradient)),
- this, SLOT(slotGradientChanged(QString,QGradient)));
- connect(m_manager, SIGNAL(gradientRemoved(QString)),
- this, SLOT(slotGradientRemoved(QString)));
+ connect(m_manager, &QtGradientManager::gradientAdded,
+ this, &QtGradientView::slotGradientAdded);
+ connect(m_manager, &QtGradientManager::gradientRenamed,
+ this, &QtGradientView::slotGradientRenamed);
+ connect(m_manager, &QtGradientManager::gradientChanged,
+ this, &QtGradientView::slotGradientChanged);
+ connect(m_manager, &QtGradientManager::gradientRemoved,
+ this, &QtGradientView::slotGradientRemoved);
}
QtGradientManager *QtGradientView::gradientManager() const
diff --git a/src/shared/qtgradienteditor/qtgradientview.h b/src/shared/qtgradienteditor/qtgradientview.h
index c1637cd8f..53a44cf24 100644
--- a/src/shared/qtgradienteditor/qtgradientview.h
+++ b/src/shared/qtgradienteditor/qtgradientview.h
@@ -1,47 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 GRADIENTVIEW_H
#define GRADIENTVIEW_H
#include <QtWidgets/QWidget>
-#include <QtCore/QMap>
+#include <QtCore/QHash>
#include "ui_qtgradientview.h"
QT_BEGIN_NAMESPACE
@@ -75,13 +39,13 @@ private slots:
void slotEditGradient();
void slotRemoveGradient();
void slotRenameGradient();
- void slotRenameGradient(QListWidgetItem *item);
+ void slotRenameGradientItem(QListWidgetItem *item);
void slotCurrentItemChanged(QListWidgetItem *item);
void slotGradientActivated(QListWidgetItem *item);
private:
- QMap<QString, QListWidgetItem *> m_idToItem;
- QMap<QListWidgetItem *, QString> m_itemToId;
+ QHash<QString, QListWidgetItem *> m_idToItem;
+ QHash<QListWidgetItem *, QString> m_itemToId;
QAction *m_newAction;
QAction *m_editAction;
diff --git a/src/shared/qtgradienteditor/qtgradientviewdialog.cpp b/src/shared/qtgradienteditor/qtgradientviewdialog.cpp
index 103c4492e..6cb49e3bc 100644
--- a/src/shared/qtgradienteditor/qtgradientviewdialog.cpp
+++ b/src/shared/qtgradienteditor/qtgradientviewdialog.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qtgradientviewdialog.h"
#include "qtgradientmanager.h"
@@ -48,10 +12,10 @@ QtGradientViewDialog::QtGradientViewDialog(QWidget *parent)
{
m_ui.setupUi(this);
m_ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
- connect(m_ui.gradientView, SIGNAL(currentGradientChanged(QString)),
- this, SLOT(slotGradientSelected(QString)));
- connect(m_ui.gradientView, SIGNAL(gradientActivated(QString)),
- this, SLOT(slotGradientActivated(QString)));
+ connect(m_ui.gradientView, &QtGradientView::currentGradientChanged,
+ this, &QtGradientViewDialog::slotGradientSelected);
+ connect(m_ui.gradientView, &QtGradientView::gradientActivated,
+ this, &QtGradientViewDialog::slotGradientActivated);
}
void QtGradientViewDialog::setGradientManager(QtGradientManager *manager)
diff --git a/src/shared/qtgradienteditor/qtgradientviewdialog.h b/src/shared/qtgradienteditor/qtgradientviewdialog.h
index bfba02d6c..ecd089a85 100644
--- a/src/shared/qtgradienteditor/qtgradientviewdialog.h
+++ b/src/shared/qtgradienteditor/qtgradientviewdialog.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 GRADIENTVIEWDIALOG_H
#define GRADIENTVIEWDIALOG_H
diff --git a/src/shared/qtgradienteditor/qtgradientviewdialog.ui b/src/shared/qtgradienteditor/qtgradientviewdialog.ui
index 115ee7da8..431e88392 100644
--- a/src/shared/qtgradienteditor/qtgradientviewdialog.ui
+++ b/src/shared/qtgradienteditor/qtgradientviewdialog.ui
@@ -1,42 +1,8 @@
<ui version="4.0" >
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 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
+</comment>
<class>QtGradientViewDialog</class>
<widget class="QDialog" name="QtGradientViewDialog" >
<property name="geometry" >
diff --git a/src/shared/qtgradienteditor/qtgradientwidget.cpp b/src/shared/qtgradienteditor/qtgradientwidget.cpp
index 40c25f785..1816a7e90 100644
--- a/src/shared/qtgradienteditor/qtgradientwidget.cpp
+++ b/src/shared/qtgradienteditor/qtgradientwidget.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qtgradientwidget.h"
#include <QtCore/QMap>
@@ -496,7 +460,7 @@ void QtGradientWidget::paintEvent(QPaintEvent *e)
p.setBrushOrigin(0, 0);
}
- QGradient *gradient = 0;
+ QGradient *gradient = nullptr;
switch (d_ptr->m_gradientType) {
case QGradient::LinearGradient:
gradient = new QLinearGradient(d_ptr->m_startLinear, d_ptr->m_endLinear);
diff --git a/src/shared/qtgradienteditor/qtgradientwidget.h b/src/shared/qtgradienteditor/qtgradientwidget.h
index a5609e77b..5f3ce36af 100644
--- a/src/shared/qtgradienteditor/qtgradientwidget.h
+++ b/src/shared/qtgradienteditor/qtgradientwidget.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QTGRADIENTWIDGET_H
#define QTGRADIENTWIDGET_H
@@ -90,6 +54,7 @@ public:
public slots:
void setGradientStops(const QGradientStops &stops);
+
signals:
void startLinearChanged(const QPointF &point);
diff --git a/src/shared/qtpropertybrowser/qtbuttonpropertybrowser.cpp b/src/shared/qtpropertybrowser/qtbuttonpropertybrowser.cpp
index 144d7bee0..9b1a1ff5a 100644
--- a/src/shared/qtpropertybrowser/qtbuttonpropertybrowser.cpp
+++ b/src/shared/qtpropertybrowser/qtbuttonpropertybrowser.cpp
@@ -1,50 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qtbuttonpropertybrowser.h"
-#include <QtCore/QSet>
+
+#include <QtCore/QHash>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QLabel>
-#include <QtCore/QTimer>
-#include <QtCore/QMap>
#include <QtWidgets/QToolButton>
-#include <QtWidgets/QStyle>
QT_BEGIN_NAMESPACE
@@ -88,10 +50,10 @@ private:
void setExpanded(WidgetItem *item, bool expanded);
QToolButton *createButton(QWidget *panret = 0) const;
- QMap<QtBrowserItem *, WidgetItem *> m_indexToItem;
- QMap<WidgetItem *, QtBrowserItem *> m_itemToIndex;
- QMap<QWidget *, WidgetItem *> m_widgetToItem;
- QMap<QObject *, WidgetItem *> m_buttonToItem;
+ QHash<QtBrowserItem *, WidgetItem *> m_indexToItem;
+ QHash<WidgetItem *, QtBrowserItem *> m_itemToIndex;
+ QHash<QWidget *, WidgetItem *> m_widgetToItem;
+ QHash<QObject *, WidgetItem *> m_buttonToItem;
QGridLayout *m_mainLayout;
QList<WidgetItem *> m_children;
QList<WidgetItem *> m_recreateQueue;
@@ -99,7 +61,7 @@ private:
QToolButton *QtButtonPropertyBrowserPrivate::createButton(QWidget *parent) const
{
- QToolButton *button = new QToolButton(parent);
+ auto *button = new QToolButton(parent);
button->setCheckable(true);
button->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed));
button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
@@ -123,7 +85,7 @@ int QtButtonPropertyBrowserPrivate::gridRow(WidgetItem *item) const
siblings = m_children;
int row = 0;
- for (WidgetItem *sibling : qAsConst(siblings)) {
+ for (WidgetItem *sibling : std::as_const(siblings)) {
if (sibling == item)
return row;
row += gridSpan(sibling);
@@ -142,28 +104,27 @@ void QtButtonPropertyBrowserPrivate::init(QWidget *parent)
{
m_mainLayout = new QGridLayout();
parent->setLayout(m_mainLayout);
- QLayoutItem *item = new QSpacerItem(0, 0,
- QSizePolicy::Fixed, QSizePolicy::Expanding);
+ auto *item = new QSpacerItem(0, 0, QSizePolicy::Fixed, QSizePolicy::Expanding);
m_mainLayout->addItem(item, 0, 0);
}
void QtButtonPropertyBrowserPrivate::slotEditorDestroyed()
{
- QWidget *editor = qobject_cast<QWidget *>(q_ptr->sender());
+ auto *editor = qobject_cast<QWidget *>(q_ptr->sender());
if (!editor)
return;
if (!m_widgetToItem.contains(editor))
return;
- m_widgetToItem[editor]->widget = 0;
+ m_widgetToItem[editor]->widget = nullptr;
m_widgetToItem.remove(editor);
}
void QtButtonPropertyBrowserPrivate::slotUpdate()
{
- for (WidgetItem *item : qAsConst(m_recreateQueue)) {
+ for (WidgetItem *item : std::as_const(m_recreateQueue)) {
WidgetItem *parent = item->parent;
- QWidget *w = 0;
- QGridLayout *l = 0;
+ QWidget *w = nullptr;
+ QGridLayout *l = nullptr;
const int oldRow = gridRow(item);
if (parent) {
w = parent->container;
@@ -196,7 +157,7 @@ void QtButtonPropertyBrowserPrivate::setExpanded(WidgetItem *item, bool expanded
item->expanded = expanded;
const int row = gridRow(item);
WidgetItem *parent = item->parent;
- QGridLayout *l = 0;
+ QGridLayout *l = nullptr;
if (parent)
l = parent->layout;
else
@@ -232,7 +193,7 @@ void QtButtonPropertyBrowserPrivate::slotToggled(bool checked)
void QtButtonPropertyBrowserPrivate::updateLater()
{
- QTimer::singleShot(0, q_ptr, SLOT(slotUpdate()));
+ QMetaObject::invokeMethod(q_ptr, [this] { slotUpdate(); }, Qt::QueuedConnection);
}
void QtButtonPropertyBrowserPrivate::propertyInserted(QtBrowserItem *index, QtBrowserItem *afterIndex)
@@ -240,11 +201,11 @@ void QtButtonPropertyBrowserPrivate::propertyInserted(QtBrowserItem *index, QtBr
WidgetItem *afterItem = m_indexToItem.value(afterIndex);
WidgetItem *parentItem = m_indexToItem.value(index->parent());
- WidgetItem *newItem = new WidgetItem();
+ auto *newItem = new WidgetItem();
newItem->parent = parentItem;
- QGridLayout *layout = 0;
- QWidget *parentWidget = 0;
+ QGridLayout *layout = nullptr;
+ QWidget *parentWidget = nullptr;
int row = -1;
if (!afterItem) {
row = 0;
@@ -267,26 +228,27 @@ void QtButtonPropertyBrowserPrivate::propertyInserted(QtBrowserItem *index, QtBr
if (!parentItem->container) {
m_recreateQueue.removeAll(parentItem);
WidgetItem *grandParent = parentItem->parent;
- QGridLayout *l = 0;
+ QGridLayout *l = nullptr;
const int oldRow = gridRow(parentItem);
if (grandParent) {
l = grandParent->layout;
} else {
l = m_mainLayout;
}
- QFrame *container = new QFrame();
+ auto *container = new QFrame();
container->setFrameShape(QFrame::Panel);
container->setFrameShadow(QFrame::Raised);
parentItem->container = container;
parentItem->button = createButton();
m_buttonToItem[parentItem->button] = parentItem;
- q_ptr->connect(parentItem->button, SIGNAL(toggled(bool)), q_ptr, SLOT(slotToggled(bool)));
+ q_ptr->connect(parentItem->button, &QAbstractButton::toggled,
+ q_ptr, [this](bool checked) { slotToggled(checked); });
parentItem->layout = new QGridLayout();
container->setLayout(parentItem->layout);
if (parentItem->label) {
l->removeWidget(parentItem->label);
delete parentItem->label;
- parentItem->label = 0;
+ parentItem->label = nullptr;
}
int span = 1;
if (!parentItem->widget && !parentItem->widgetLabel)
@@ -302,7 +264,8 @@ void QtButtonPropertyBrowserPrivate::propertyInserted(QtBrowserItem *index, QtBr
newItem->label->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
newItem->widget = createEditor(index->property(), parentWidget);
if (newItem->widget) {
- QObject::connect(newItem->widget, SIGNAL(destroyed()), q_ptr, SLOT(slotEditorDestroyed()));
+ QObject::connect(newItem->widget, &QWidget::destroyed,
+ q_ptr, [this] { slotEditorDestroyed(); });
m_widgetToItem[newItem->widget] = newItem;
} else if (index->property()->hasValue()) {
newItem->widgetLabel = new QLabel(parentWidget);
@@ -360,13 +323,13 @@ void QtButtonPropertyBrowserPrivate::propertyRemoved(QtBrowserItem *index)
removeRow(m_mainLayout, row);
if (colSpan > 1)
removeRow(m_mainLayout, row);
- } else if (parentItem->children.count() != 0) {
+ } else if (parentItem->children.size() != 0) {
removeRow(parentItem->layout, row);
if (colSpan > 1)
removeRow(parentItem->layout, row);
} else {
const WidgetItem *grandParent = parentItem->parent;
- QGridLayout *l = 0;
+ QGridLayout *l = nullptr;
if (grandParent) {
l = grandParent->layout;
} else {
@@ -380,9 +343,9 @@ void QtButtonPropertyBrowserPrivate::propertyRemoved(QtBrowserItem *index)
l->removeWidget(parentItem->container);
delete parentItem->button;
delete parentItem->container;
- parentItem->button = 0;
- parentItem->container = 0;
- parentItem->layout = 0;
+ parentItem->button = nullptr;
+ parentItem->container = nullptr;
+ parentItem->layout = nullptr;
if (!m_recreateQueue.contains(parentItem))
m_recreateQueue.append(parentItem);
if (parentSpan > 1)
@@ -397,7 +360,7 @@ void QtButtonPropertyBrowserPrivate::propertyRemoved(QtBrowserItem *index)
void QtButtonPropertyBrowserPrivate::insertRow(QGridLayout *layout, int row) const
{
- QMap<QLayoutItem *, QRect> itemToPos;
+ QHash<QLayoutItem *, QRect> itemToPos;
int idx = 0;
while (idx < layout->count()) {
int r, c, rs, cs;
@@ -417,7 +380,7 @@ void QtButtonPropertyBrowserPrivate::insertRow(QGridLayout *layout, int row) con
void QtButtonPropertyBrowserPrivate::removeRow(QGridLayout *layout, int row) const
{
- QMap<QLayoutItem *, QRect> itemToPos;
+ QHash<QLayoutItem *, QRect> itemToPos;
int idx = 0;
while (idx < layout->count()) {
int r, c, rs, cs;
@@ -553,8 +516,7 @@ QtButtonPropertyBrowser::QtButtonPropertyBrowser(QWidget *parent)
*/
QtButtonPropertyBrowser::~QtButtonPropertyBrowser()
{
- const QMap<QtButtonPropertyBrowserPrivate::WidgetItem *, QtBrowserItem *>::ConstIterator icend = d_ptr->m_itemToIndex.constEnd();
- for (QMap<QtButtonPropertyBrowserPrivate::WidgetItem *, QtBrowserItem *>::ConstIterator it = d_ptr->m_itemToIndex.constBegin(); it != icend; ++it)
+ for (auto it = d_ptr->m_itemToIndex.cbegin(), icend = d_ptr->m_itemToIndex.cend(); it != icend; ++it)
delete it.key();
}
diff --git a/src/shared/qtpropertybrowser/qtbuttonpropertybrowser.h b/src/shared/qtpropertybrowser/qtbuttonpropertybrowser.h
index f76d476c5..2a02405aa 100644
--- a/src/shared/qtpropertybrowser/qtbuttonpropertybrowser.h
+++ b/src/shared/qtpropertybrowser/qtbuttonpropertybrowser.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QTBUTTONPROPERTYBROWSER_H
#define QTBUTTONPROPERTYBROWSER_H
@@ -50,7 +14,6 @@ class QtButtonPropertyBrowser : public QtAbstractPropertyBrowser
{
Q_OBJECT
public:
-
QtButtonPropertyBrowser(QWidget *parent = 0);
~QtButtonPropertyBrowser();
@@ -58,7 +21,6 @@ public:
bool isExpanded(QtBrowserItem *item) const;
Q_SIGNALS:
-
void collapsed(QtBrowserItem *item);
void expanded(QtBrowserItem *item);
@@ -68,14 +30,9 @@ protected:
void itemChanged(QtBrowserItem *item) override;
private:
-
QScopedPointer<QtButtonPropertyBrowserPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtButtonPropertyBrowser)
Q_DISABLE_COPY_MOVE(QtButtonPropertyBrowser)
- Q_PRIVATE_SLOT(d_func(), void slotUpdate())
- Q_PRIVATE_SLOT(d_func(), void slotEditorDestroyed())
- Q_PRIVATE_SLOT(d_func(), void slotToggled(bool))
-
};
QT_END_NAMESPACE
diff --git a/src/shared/qtpropertybrowser/qteditorfactory.cpp b/src/shared/qtpropertybrowser/qteditorfactory.cpp
index dfb3e92a5..1f51f2ba7 100644
--- a/src/shared/qtpropertybrowser/qteditorfactory.cpp
+++ b/src/shared/qtpropertybrowser/qteditorfactory.cpp
@@ -1,63 +1,28 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qteditorfactory.h"
#include "qtpropertybrowserutils_p.h"
-#include <QtWidgets/QSpinBox>
-#include <QtWidgets/QScrollBar>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QAbstractItemView>
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QDateTimeEdit>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QMenu>
+
+#include <QtCore/QHash>
+#include <QtCore/QRegularExpression>
#include <QtGui/QKeyEvent>
#include <QtGui/QRegularExpressionValidator>
+#include <QtWidgets/QAbstractItemView>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QToolButton>
+#include <QtWidgets/QBoxLayout>
#include <QtWidgets/QColorDialog>
+#include <QtWidgets/QComboBox>
+#include <QtWidgets/QDateTimeEdit>
#include <QtWidgets/QFontDialog>
-#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QKeySequenceEdit>
-#include <QtCore/QMap>
-#include <QtCore/QRegularExpression>
+#include <QtWidgets/QLabel>
+#include <QtWidgets/QLineEdit>
+#include <QtWidgets/QMenu>
+#include <QtWidgets/QScrollBar>
+#include <QtWidgets/QSpacerItem>
+#include <QtWidgets/QSpinBox>
+#include <QtWidgets/QToolButton>
#if defined(Q_CC_MSVC)
# pragma warning(disable: 4786) /* MS VS 6: truncating debug info after 255 characters */
@@ -85,9 +50,9 @@ class EditorFactoryPrivate
{
public:
- typedef QList<Editor *> EditorList;
- typedef QMap<QtProperty *, EditorList> PropertyToEditorListMap;
- typedef QMap<Editor *, QtProperty *> EditorToPropertyMap;
+ using EditorList = QList<Editor *>;
+ using PropertyToEditorListMap = QHash<QtProperty *, EditorList>;
+ using EditorToPropertyMap = QHash<Editor *, QtProperty *>;
Editor *createEditor(QtProperty *property, QWidget *parent);
void initializeEditor(QtProperty *property, Editor *e);
@@ -100,7 +65,7 @@ public:
template <class Editor>
Editor *EditorFactoryPrivate<Editor>::createEditor(QtProperty *property, QWidget *parent)
{
- Editor *editor = new Editor(parent);
+ auto *editor = new Editor(parent);
initializeEditor(property, editor);
return editor;
}
@@ -108,7 +73,7 @@ Editor *EditorFactoryPrivate<Editor>::createEditor(QtProperty *property, QWidget
template <class Editor>
void EditorFactoryPrivate<Editor>::initializeEditor(QtProperty *property, Editor *editor)
{
- typename PropertyToEditorListMap::iterator it = m_createdEditors.find(property);
+ auto it = m_createdEditors.find(property);
if (it == m_createdEditors.end())
it = m_createdEditors.insert(property, EditorList());
it.value().append(editor);
@@ -118,12 +83,12 @@ void EditorFactoryPrivate<Editor>::initializeEditor(QtProperty *property, Editor
template <class Editor>
void EditorFactoryPrivate<Editor>::slotEditorDestroyed(QObject *object)
{
- const typename EditorToPropertyMap::iterator ecend = m_editorToProperty.end();
- for (typename EditorToPropertyMap::iterator itEditor = m_editorToProperty.begin(); itEditor != ecend; ++itEditor) {
+ const auto ecend = m_editorToProperty.end();
+ for (auto itEditor = m_editorToProperty.begin(); itEditor != ecend; ++itEditor) {
if (itEditor.key() == object) {
Editor *editor = itEditor.key();
QtProperty *property = itEditor.value();
- const typename PropertyToEditorListMap::iterator pit = m_createdEditors.find(property);
+ const auto pit = m_createdEditors.find(property);
if (pit != m_createdEditors.end()) {
pit.value().removeAll(editor);
if (pit.value().isEmpty())
@@ -196,8 +161,7 @@ void QtSpinBoxFactoryPrivate::slotSingleStepChanged(QtProperty *property, int st
void QtSpinBoxFactoryPrivate::slotSetValue(int value)
{
QObject *object = q_ptr->sender();
- const QMap<QSpinBox *, QtProperty *>::ConstIterator ecend = m_editorToProperty.constEnd();
- for (QMap<QSpinBox *, QtProperty *>::ConstIterator itEditor = m_editorToProperty.constBegin(); itEditor != ecend; ++itEditor) {
+ for (auto itEditor = m_editorToProperty.cbegin(), ecend = m_editorToProperty.cend(); itEditor != ecend; ++itEditor) {
if (itEditor.key() == object) {
QtProperty *property = itEditor.value();
QtIntPropertyManager *manager = q_ptr->propertyManager(property);
@@ -246,12 +210,15 @@ QtSpinBoxFactory::~QtSpinBoxFactory()
*/
void QtSpinBoxFactory::connectPropertyManager(QtIntPropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotPropertyChanged(QtProperty*,int)));
- connect(manager, SIGNAL(rangeChanged(QtProperty*,int,int)),
- this, SLOT(slotRangeChanged(QtProperty*,int,int)));
- connect(manager, SIGNAL(singleStepChanged(QtProperty*,int)),
- this, SLOT(slotSingleStepChanged(QtProperty*,int)));
+ connect(manager, &QtIntPropertyManager::valueChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotPropertyChanged(property, value); });
+ connect(manager, &QtIntPropertyManager::rangeChanged,
+ this, [this](QtProperty *property, int min, int max)
+ { d_ptr->slotRangeChanged(property, min, max); });
+ connect(manager, &QtIntPropertyManager::singleStepChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotSingleStepChanged(property, value); });
}
/*!
@@ -268,9 +235,10 @@ QWidget *QtSpinBoxFactory::createEditor(QtIntPropertyManager *manager, QtPropert
editor->setValue(manager->value(property));
editor->setKeyboardTracking(false);
- connect(editor, SIGNAL(valueChanged(int)), this, SLOT(slotSetValue(int)));
- connect(editor, SIGNAL(destroyed(QObject*)),
- this, SLOT(slotEditorDestroyed(QObject*)));
+ connect(editor, &QSpinBox::valueChanged,
+ this, [this](int value) { d_ptr->slotSetValue(value); });
+ connect(editor, &QObject::destroyed,
+ this, [this](QObject *object) { d_ptr->slotEditorDestroyed(object); });
return editor;
}
@@ -281,12 +249,9 @@ QWidget *QtSpinBoxFactory::createEditor(QtIntPropertyManager *manager, QtPropert
*/
void QtSpinBoxFactory::disconnectPropertyManager(QtIntPropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotPropertyChanged(QtProperty*,int)));
- disconnect(manager, SIGNAL(rangeChanged(QtProperty*,int,int)),
- this, SLOT(slotRangeChanged(QtProperty*,int,int)));
- disconnect(manager, SIGNAL(singleStepChanged(QtProperty*,int)),
- this, SLOT(slotSingleStepChanged(QtProperty*,int)));
+ disconnect(manager, &QtIntPropertyManager::valueChanged, this, nullptr);
+ disconnect(manager, &QtIntPropertyManager::rangeChanged, this, nullptr);
+ disconnect(manager, &QtIntPropertyManager::singleStepChanged, this, nullptr);
}
// QtSliderFactory
@@ -347,8 +312,7 @@ void QtSliderFactoryPrivate::slotSingleStepChanged(QtProperty *property, int ste
void QtSliderFactoryPrivate::slotSetValue(int value)
{
QObject *object = q_ptr->sender();
- const QMap<QSlider *, QtProperty *>::ConstIterator ecend = m_editorToProperty.constEnd();
- for (QMap<QSlider *, QtProperty *>::ConstIterator itEditor = m_editorToProperty.constBegin(); itEditor != ecend; ++itEditor ) {
+ for (auto itEditor = m_editorToProperty.cbegin(), ecend = m_editorToProperty.cend(); itEditor != ecend; ++itEditor ) {
if (itEditor.key() == object) {
QtProperty *property = itEditor.value();
QtIntPropertyManager *manager = q_ptr->propertyManager(property);
@@ -397,12 +361,15 @@ QtSliderFactory::~QtSliderFactory()
*/
void QtSliderFactory::connectPropertyManager(QtIntPropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotPropertyChanged(QtProperty*,int)));
- connect(manager, SIGNAL(rangeChanged(QtProperty*,int,int)),
- this, SLOT(slotRangeChanged(QtProperty*,int,int)));
- connect(manager, SIGNAL(singleStepChanged(QtProperty*,int)),
- this, SLOT(slotSingleStepChanged(QtProperty*,int)));
+ connect(manager, &QtIntPropertyManager::valueChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotPropertyChanged(property, value); });
+ connect(manager, &QtIntPropertyManager::rangeChanged,
+ this, [this](QtProperty *property, int min, int max)
+ { d_ptr->slotRangeChanged(property, min, max); });
+ connect(manager, &QtIntPropertyManager::singleStepChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotSingleStepChanged(property, value); });
}
/*!
@@ -413,15 +380,16 @@ void QtSliderFactory::connectPropertyManager(QtIntPropertyManager *manager)
QWidget *QtSliderFactory::createEditor(QtIntPropertyManager *manager, QtProperty *property,
QWidget *parent)
{
- QSlider *editor = new QSlider(Qt::Horizontal, parent);
+ auto *editor = new QSlider(Qt::Horizontal, parent);
d_ptr->initializeEditor(property, editor);
editor->setSingleStep(manager->singleStep(property));
editor->setRange(manager->minimum(property), manager->maximum(property));
editor->setValue(manager->value(property));
- connect(editor, SIGNAL(valueChanged(int)), this, SLOT(slotSetValue(int)));
- connect(editor, SIGNAL(destroyed(QObject*)),
- this, SLOT(slotEditorDestroyed(QObject*)));
+ connect(editor, &QSlider::valueChanged,
+ this, [this](int value) { d_ptr->slotSetValue(value); });
+ connect(editor, &QObject::destroyed,
+ this, [this](QObject *object) { d_ptr->slotEditorDestroyed(object); });
return editor;
}
@@ -432,12 +400,9 @@ QWidget *QtSliderFactory::createEditor(QtIntPropertyManager *manager, QtProperty
*/
void QtSliderFactory::disconnectPropertyManager(QtIntPropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotPropertyChanged(QtProperty*,int)));
- disconnect(manager, SIGNAL(rangeChanged(QtProperty*,int,int)),
- this, SLOT(slotRangeChanged(QtProperty*,int,int)));
- disconnect(manager, SIGNAL(singleStepChanged(QtProperty*,int)),
- this, SLOT(slotSingleStepChanged(QtProperty*,int)));
+ disconnect(manager, &QtIntPropertyManager::valueChanged, this, nullptr);
+ disconnect(manager, &QtIntPropertyManager::rangeChanged, this, nullptr);
+ disconnect(manager, &QtIntPropertyManager::singleStepChanged, this, nullptr);
}
// QtSliderFactory
@@ -499,8 +464,7 @@ void QtScrollBarFactoryPrivate::slotSingleStepChanged(QtProperty *property, int
void QtScrollBarFactoryPrivate::slotSetValue(int value)
{
QObject *object = q_ptr->sender();
- const QMap<QScrollBar *, QtProperty *>::ConstIterator ecend = m_editorToProperty.constEnd();
- for (QMap<QScrollBar *, QtProperty *>::ConstIterator itEditor = m_editorToProperty.constBegin(); itEditor != ecend; ++itEditor)
+ for (auto itEditor = m_editorToProperty.cbegin(), ecend = m_editorToProperty.cend(); itEditor != ecend; ++itEditor)
if (itEditor.key() == object) {
QtProperty *property = itEditor.value();
QtIntPropertyManager *manager = q_ptr->propertyManager(property);
@@ -548,12 +512,15 @@ QtScrollBarFactory::~QtScrollBarFactory()
*/
void QtScrollBarFactory::connectPropertyManager(QtIntPropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotPropertyChanged(QtProperty*,int)));
- connect(manager, SIGNAL(rangeChanged(QtProperty*,int,int)),
- this, SLOT(slotRangeChanged(QtProperty*,int,int)));
- connect(manager, SIGNAL(singleStepChanged(QtProperty*,int)),
- this, SLOT(slotSingleStepChanged(QtProperty*,int)));
+ connect(manager, &QtIntPropertyManager::valueChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotPropertyChanged(property, value); });
+ connect(manager, &QtIntPropertyManager::rangeChanged,
+ this, [this](QtProperty *property, int min, int max)
+ { d_ptr->slotRangeChanged(property, min, max); });
+ connect(manager, &QtIntPropertyManager::singleStepChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotSingleStepChanged(property, value); });
}
/*!
@@ -564,14 +531,15 @@ void QtScrollBarFactory::connectPropertyManager(QtIntPropertyManager *manager)
QWidget *QtScrollBarFactory::createEditor(QtIntPropertyManager *manager, QtProperty *property,
QWidget *parent)
{
- QScrollBar *editor = new QScrollBar(Qt::Horizontal, parent);
+ auto *editor = new QScrollBar(Qt::Horizontal, parent);
d_ptr->initializeEditor(property, editor);
editor->setSingleStep(manager->singleStep(property));
editor->setRange(manager->minimum(property), manager->maximum(property));
editor->setValue(manager->value(property));
- connect(editor, SIGNAL(valueChanged(int)), this, SLOT(slotSetValue(int)));
- connect(editor, SIGNAL(destroyed(QObject*)),
- this, SLOT(slotEditorDestroyed(QObject*)));
+ connect(editor, &QScrollBar::valueChanged,
+ this, [this](int value) { d_ptr->slotSetValue(value); });
+ connect(editor, &QObject::destroyed,
+ this, [this](QObject *object) { d_ptr->slotEditorDestroyed(object); });
return editor;
}
@@ -582,12 +550,9 @@ QWidget *QtScrollBarFactory::createEditor(QtIntPropertyManager *manager, QtPrope
*/
void QtScrollBarFactory::disconnectPropertyManager(QtIntPropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotPropertyChanged(QtProperty*,int)));
- disconnect(manager, SIGNAL(rangeChanged(QtProperty*,int,int)),
- this, SLOT(slotRangeChanged(QtProperty*,int,int)));
- disconnect(manager, SIGNAL(singleStepChanged(QtProperty*,int)),
- this, SLOT(slotSingleStepChanged(QtProperty*,int)));
+ disconnect(manager, &QtIntPropertyManager::valueChanged, this, nullptr);
+ disconnect(manager, &QtIntPropertyManager::rangeChanged, this, nullptr);
+ disconnect(manager, &QtIntPropertyManager::singleStepChanged, this, nullptr);
}
// QtCheckBoxFactory
@@ -618,8 +583,7 @@ void QtCheckBoxFactoryPrivate::slotSetValue(bool value)
{
QObject *object = q_ptr->sender();
- const QMap<QtBoolEdit *, QtProperty *>::ConstIterator ecend = m_editorToProperty.constEnd();
- for (QMap<QtBoolEdit *, QtProperty *>::ConstIterator itEditor = m_editorToProperty.constBegin(); itEditor != ecend; ++itEditor)
+ for (auto itEditor = m_editorToProperty.cbegin(), ecend = m_editorToProperty.cend(); itEditor != ecend; ++itEditor)
if (itEditor.key() == object) {
QtProperty *property = itEditor.value();
QtBoolPropertyManager *manager = q_ptr->propertyManager(property);
@@ -667,8 +631,9 @@ QtCheckBoxFactory::~QtCheckBoxFactory()
*/
void QtCheckBoxFactory::connectPropertyManager(QtBoolPropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty*,bool)),
- this, SLOT(slotPropertyChanged(QtProperty*,bool)));
+ connect(manager, &QtBoolPropertyManager::valueChanged,
+ this, [this](QtProperty *property, bool value)
+ { d_ptr->slotPropertyChanged(property, value); });
}
/*!
@@ -682,9 +647,10 @@ QWidget *QtCheckBoxFactory::createEditor(QtBoolPropertyManager *manager, QtPrope
QtBoolEdit *editor = d_ptr->createEditor(property, parent);
editor->setChecked(manager->value(property));
- connect(editor, SIGNAL(toggled(bool)), this, SLOT(slotSetValue(bool)));
- connect(editor, SIGNAL(destroyed(QObject*)),
- this, SLOT(slotEditorDestroyed(QObject*)));
+ connect(editor, &QtBoolEdit::toggled,
+ this, [this](bool value) { d_ptr->slotSetValue(value); });
+ connect(editor, &QObject::destroyed,
+ this, [this](QObject *object) { d_ptr->slotEditorDestroyed(object); });
return editor;
}
@@ -695,8 +661,7 @@ QWidget *QtCheckBoxFactory::createEditor(QtBoolPropertyManager *manager, QtPrope
*/
void QtCheckBoxFactory::disconnectPropertyManager(QtBoolPropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty*,bool)),
- this, SLOT(slotPropertyChanged(QtProperty*,bool)));
+ disconnect(manager, &QtBoolPropertyManager::valueChanged, this, nullptr);
}
// QtDoubleSpinBoxFactory
@@ -785,8 +750,7 @@ void QtDoubleSpinBoxFactoryPrivate::slotDecimalsChanged(QtProperty *property, in
void QtDoubleSpinBoxFactoryPrivate::slotSetValue(double value)
{
QObject *object = q_ptr->sender();
- const QMap<QDoubleSpinBox *, QtProperty *>::ConstIterator itcend = m_editorToProperty.constEnd();
- for (QMap<QDoubleSpinBox *, QtProperty *>::ConstIterator itEditor = m_editorToProperty.constBegin(); itEditor != itcend; ++itEditor) {
+ for (auto itEditor = m_editorToProperty.cbegin(), itcend = m_editorToProperty.cend(); itEditor != itcend; ++itEditor) {
if (itEditor.key() == object) {
QtProperty *property = itEditor.value();
QtDoublePropertyManager *manager = q_ptr->propertyManager(property);
@@ -834,14 +798,18 @@ QtDoubleSpinBoxFactory::~QtDoubleSpinBoxFactory()
*/
void QtDoubleSpinBoxFactory::connectPropertyManager(QtDoublePropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty*,double)),
- this, SLOT(slotPropertyChanged(QtProperty*,double)));
- connect(manager, SIGNAL(rangeChanged(QtProperty*,double,double)),
- this, SLOT(slotRangeChanged(QtProperty*,double,double)));
- connect(manager, SIGNAL(singleStepChanged(QtProperty*,double)),
- this, SLOT(slotSingleStepChanged(QtProperty*,double)));
- connect(manager, SIGNAL(decimalsChanged(QtProperty*,int)),
- this, SLOT(slotDecimalsChanged(QtProperty*,int)));
+ connect(manager, &QtDoublePropertyManager::valueChanged,
+ this, [this](QtProperty *property, double value)
+ { d_ptr->slotPropertyChanged(property, value); });
+ connect(manager, &QtDoublePropertyManager::rangeChanged,
+ this, [this](QtProperty *property, double min, double max)
+ { d_ptr->slotRangeChanged(property, min, max); });
+ connect(manager, &QtDoublePropertyManager::singleStepChanged,
+ this, [this](QtProperty *property, double value)
+ { d_ptr->slotSingleStepChanged(property, value); });
+ connect(manager, &QtDoublePropertyManager::decimalsChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotDecimalsChanged(property, value); });
}
/*!
@@ -859,9 +827,10 @@ QWidget *QtDoubleSpinBoxFactory::createEditor(QtDoublePropertyManager *manager,
editor->setValue(manager->value(property));
editor->setKeyboardTracking(false);
- connect(editor, SIGNAL(valueChanged(double)), this, SLOT(slotSetValue(double)));
- connect(editor, SIGNAL(destroyed(QObject*)),
- this, SLOT(slotEditorDestroyed(QObject*)));
+ connect(editor, &QDoubleSpinBox::valueChanged,
+ this, [this](double value) { d_ptr->slotSetValue(value); });
+ connect(editor, &QObject::destroyed,
+ this, [this](QObject *object) { d_ptr->slotEditorDestroyed(object); });
return editor;
}
@@ -872,14 +841,10 @@ QWidget *QtDoubleSpinBoxFactory::createEditor(QtDoublePropertyManager *manager,
*/
void QtDoubleSpinBoxFactory::disconnectPropertyManager(QtDoublePropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty*,double)),
- this, SLOT(slotPropertyChanged(QtProperty*,double)));
- disconnect(manager, SIGNAL(rangeChanged(QtProperty*,double,double)),
- this, SLOT(slotRangeChanged(QtProperty*,double,double)));
- disconnect(manager, SIGNAL(singleStepChanged(QtProperty*,double)),
- this, SLOT(slotSingleStepChanged(QtProperty*,double)));
- disconnect(manager, SIGNAL(decimalsChanged(QtProperty*,int)),
- this, SLOT(slotDecimalsChanged(QtProperty*,int)));
+ disconnect(manager, &QtDoublePropertyManager::valueChanged, this, nullptr);
+ disconnect(manager, &QtDoublePropertyManager::rangeChanged, this, nullptr);
+ disconnect(manager, &QtDoublePropertyManager::singleStepChanged, this, nullptr);
+ disconnect(manager, &QtDoublePropertyManager::decimalsChanged, this, nullptr);
}
// QtLineEditFactory
@@ -922,7 +887,7 @@ void QtLineEditFactoryPrivate::slotRegExpChanged(QtProperty *property,
for (QLineEdit *editor : it.value()) {
editor->blockSignals(true);
const QValidator *oldValidator = editor->validator();
- QValidator *newValidator = 0;
+ QValidator *newValidator = nullptr;
if (regExp.isValid()) {
newValidator = new QRegularExpressionValidator(regExp, editor);
}
@@ -936,8 +901,7 @@ void QtLineEditFactoryPrivate::slotRegExpChanged(QtProperty *property,
void QtLineEditFactoryPrivate::slotSetValue(const QString &value)
{
QObject *object = q_ptr->sender();
- const QMap<QLineEdit *, QtProperty *>::ConstIterator ecend = m_editorToProperty.constEnd();
- for (QMap<QLineEdit *, QtProperty *>::ConstIterator itEditor = m_editorToProperty.constBegin(); itEditor != ecend; ++itEditor)
+ for (auto itEditor = m_editorToProperty.cbegin(), ecend = m_editorToProperty.cend(); itEditor != ecend; ++itEditor)
if (itEditor.key() == object) {
QtProperty *property = itEditor.value();
QtStringPropertyManager *manager = q_ptr->propertyManager(property);
@@ -985,10 +949,12 @@ QtLineEditFactory::~QtLineEditFactory()
*/
void QtLineEditFactory::connectPropertyManager(QtStringPropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty*,QString)),
- this, SLOT(slotPropertyChanged(QtProperty*,QString)));
- connect(manager, SIGNAL(regExpChanged(QtProperty*,QRegularExpression)),
- this, SLOT(slotRegExpChanged(QtProperty*,QRegularExpression)));
+ connect(manager, &QtStringPropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QString &value)
+ { d_ptr->slotPropertyChanged(property, value); });
+ connect(manager, &QtStringPropertyManager::regExpChanged,
+ this, [this](QtProperty *property, const QRegularExpression &value)
+ { d_ptr->slotRegExpChanged(property, value); });
}
/*!
@@ -999,19 +965,18 @@ void QtLineEditFactory::connectPropertyManager(QtStringPropertyManager *manager)
QWidget *QtLineEditFactory::createEditor(QtStringPropertyManager *manager,
QtProperty *property, QWidget *parent)
{
-
QLineEdit *editor = d_ptr->createEditor(property, parent);
QRegularExpression regExp = manager->regExp(property);
if (regExp.isValid() && !regExp.pattern().isEmpty()) {
- QValidator *validator = new QRegularExpressionValidator(regExp, editor);
+ auto *validator = new QRegularExpressionValidator(regExp, editor);
editor->setValidator(validator);
}
editor->setText(manager->value(property));
- connect(editor, SIGNAL(textEdited(QString)),
- this, SLOT(slotSetValue(QString)));
- connect(editor, SIGNAL(destroyed(QObject*)),
- this, SLOT(slotEditorDestroyed(QObject*)));
+ connect(editor, &QLineEdit::textEdited,
+ this, [this](const QString &value) { d_ptr->slotSetValue(value); });
+ connect(editor, &QObject::destroyed,
+ this, [this](QObject *object) { d_ptr->slotEditorDestroyed(object); });
return editor;
}
@@ -1022,10 +987,8 @@ QWidget *QtLineEditFactory::createEditor(QtStringPropertyManager *manager,
*/
void QtLineEditFactory::disconnectPropertyManager(QtStringPropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty*,QString)),
- this, SLOT(slotPropertyChanged(QtProperty*,QString)));
- disconnect(manager, SIGNAL(regExpChanged(QtProperty*,QRegularExpression)),
- this, SLOT(slotRegExpChanged(QtProperty*,QRegularExpression)));
+ disconnect(manager, &QtStringPropertyManager::valueChanged, this, nullptr);
+ disconnect(manager, &QtStringPropertyManager::regExpChanged, this, nullptr);
}
// QtDateEditFactory
@@ -1074,8 +1037,7 @@ void QtDateEditFactoryPrivate::slotRangeChanged(QtProperty *property, QDate min,
void QtDateEditFactoryPrivate::slotSetValue(QDate value)
{
QObject *object = q_ptr->sender();
- const QMap<QDateEdit *, QtProperty *>::ConstIterator ecend = m_editorToProperty.constEnd();
- for (QMap<QDateEdit *, QtProperty *>::ConstIterator itEditor = m_editorToProperty.constBegin(); itEditor != ecend; ++itEditor)
+ for (auto itEditor = m_editorToProperty.cbegin(), ecend = m_editorToProperty.cend(); itEditor != ecend; ++itEditor)
if (itEditor.key() == object) {
QtProperty *property = itEditor.value();
QtDatePropertyManager *manager = q_ptr->propertyManager(property);
@@ -1123,10 +1085,12 @@ QtDateEditFactory::~QtDateEditFactory()
*/
void QtDateEditFactory::connectPropertyManager(QtDatePropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty*,QDate)),
- this, SLOT(slotPropertyChanged(QtProperty*,QDate)));
- connect(manager, SIGNAL(rangeChanged(QtProperty*,QDate,QDate)),
- this, SLOT(slotRangeChanged(QtProperty*,QDate,QDate)));
+ connect(manager, &QtDatePropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QDate &value)
+ { d_ptr->slotPropertyChanged(property, value); });
+ connect(manager, &QtDatePropertyManager::rangeChanged,
+ this, [this](QtProperty *property, const QDate &min, const QDate &max)
+ { d_ptr->slotRangeChanged(property, min, max); });
}
/*!
@@ -1143,10 +1107,10 @@ QWidget *QtDateEditFactory::createEditor(QtDatePropertyManager *manager, QtPrope
editor->setDateRange(manager->minimum(property), manager->maximum(property));
editor->setDate(manager->value(property));
- connect(editor, SIGNAL(dateChanged(QDate)),
- this, SLOT(slotSetValue(QDate)));
- connect(editor, SIGNAL(destroyed(QObject*)),
- this, SLOT(slotEditorDestroyed(QObject*)));
+ connect(editor, &QDateEdit::dateChanged,
+ this, [this](const QDate &value) { d_ptr->slotSetValue(value); });
+ connect(editor, &QObject::destroyed,
+ this, [this](QObject *object) { d_ptr->slotEditorDestroyed(object); });
return editor;
}
@@ -1157,10 +1121,8 @@ QWidget *QtDateEditFactory::createEditor(QtDatePropertyManager *manager, QtPrope
*/
void QtDateEditFactory::disconnectPropertyManager(QtDatePropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty*,QDate)),
- this, SLOT(slotPropertyChanged(QtProperty*,QDate)));
- disconnect(manager, SIGNAL(rangeChanged(QtProperty*,QDate,QDate)),
- this, SLOT(slotRangeChanged(QtProperty*,QDate,QDate)));
+ disconnect(manager, &QtDatePropertyManager::valueChanged, this, nullptr);
+ disconnect(manager, &QtDatePropertyManager::rangeChanged, this, nullptr);
}
// QtTimeEditFactory
@@ -1190,8 +1152,7 @@ void QtTimeEditFactoryPrivate::slotPropertyChanged(QtProperty *property, QTime v
void QtTimeEditFactoryPrivate::slotSetValue(QTime value)
{
QObject *object = q_ptr->sender();
- const QMap<QTimeEdit *, QtProperty *>::ConstIterator ecend = m_editorToProperty.constEnd();
- for (QMap<QTimeEdit *, QtProperty *>::ConstIterator itEditor = m_editorToProperty.constBegin(); itEditor != ecend; ++itEditor)
+ for (auto itEditor = m_editorToProperty.cbegin(), ecend = m_editorToProperty.cend(); itEditor != ecend; ++itEditor)
if (itEditor.key() == object) {
QtProperty *property = itEditor.value();
QtTimePropertyManager *manager = q_ptr->propertyManager(property);
@@ -1239,8 +1200,9 @@ QtTimeEditFactory::~QtTimeEditFactory()
*/
void QtTimeEditFactory::connectPropertyManager(QtTimePropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty*,QTime)),
- this, SLOT(slotPropertyChanged(QtProperty*,QTime)));
+ connect(manager, &QtTimePropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QTime &value)
+ { d_ptr->slotPropertyChanged(property, value); });
}
/*!
@@ -1255,10 +1217,10 @@ QWidget *QtTimeEditFactory::createEditor(QtTimePropertyManager *manager, QtPrope
editor->setDisplayFormat(QtPropertyBrowserUtils::timeFormat());
editor->setTime(manager->value(property));
- connect(editor, SIGNAL(timeChanged(QTime)),
- this, SLOT(slotSetValue(QTime)));
- connect(editor, SIGNAL(destroyed(QObject*)),
- this, SLOT(slotEditorDestroyed(QObject*)));
+ connect(editor, &QTimeEdit::timeChanged,
+ this, [this](const QTime &value) { d_ptr->slotSetValue(value); });
+ connect(editor, &QObject::destroyed,
+ this, [this](QObject *object) { d_ptr->slotEditorDestroyed(object); });
return editor;
}
@@ -1269,8 +1231,7 @@ QWidget *QtTimeEditFactory::createEditor(QtTimePropertyManager *manager, QtPrope
*/
void QtTimeEditFactory::disconnectPropertyManager(QtTimePropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty*,QTime)),
- this, SLOT(slotPropertyChanged(QtProperty*,QTime)));
+ disconnect(manager, &QtTimePropertyManager::valueChanged, this, nullptr);
}
// QtDateTimeEditFactory
@@ -1303,8 +1264,7 @@ void QtDateTimeEditFactoryPrivate::slotPropertyChanged(QtProperty *property,
void QtDateTimeEditFactoryPrivate::slotSetValue(const QDateTime &value)
{
QObject *object = q_ptr->sender();
- const QMap<QDateTimeEdit *, QtProperty *>::ConstIterator ecend = m_editorToProperty.constEnd();
- for (QMap<QDateTimeEdit *, QtProperty *>::ConstIterator itEditor = m_editorToProperty.constBegin(); itEditor != ecend; ++itEditor)
+ for (auto itEditor = m_editorToProperty.cbegin(), ecend = m_editorToProperty.cend(); itEditor != ecend; ++itEditor)
if (itEditor.key() == object) {
QtProperty *property = itEditor.value();
QtDateTimePropertyManager *manager = q_ptr->propertyManager(property);
@@ -1352,8 +1312,9 @@ QtDateTimeEditFactory::~QtDateTimeEditFactory()
*/
void QtDateTimeEditFactory::connectPropertyManager(QtDateTimePropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty*,QDateTime)),
- this, SLOT(slotPropertyChanged(QtProperty*,QDateTime)));
+ connect(manager, &QtDateTimePropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QDateTime &value)
+ { d_ptr->slotPropertyChanged(property, value); });
}
/*!
@@ -1368,10 +1329,10 @@ QWidget *QtDateTimeEditFactory::createEditor(QtDateTimePropertyManager *manager,
editor->setDisplayFormat(QtPropertyBrowserUtils::dateTimeFormat());
editor->setDateTime(manager->value(property));
- connect(editor, SIGNAL(dateTimeChanged(QDateTime)),
- this, SLOT(slotSetValue(QDateTime)));
- connect(editor, SIGNAL(destroyed(QObject*)),
- this, SLOT(slotEditorDestroyed(QObject*)));
+ connect(editor, &QDateTimeEdit::dateTimeChanged,
+ this, [this](const QDateTime &value) { d_ptr->slotSetValue(value); });
+ connect(editor, &QObject::destroyed,
+ this, [this](QObject *object) { d_ptr->slotEditorDestroyed(object); });
return editor;
}
@@ -1382,8 +1343,7 @@ QWidget *QtDateTimeEditFactory::createEditor(QtDateTimePropertyManager *manager,
*/
void QtDateTimeEditFactory::disconnectPropertyManager(QtDateTimePropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty*,QDateTime)),
- this, SLOT(slotPropertyChanged(QtProperty*,QDateTime)));
+ disconnect(manager, &QtDateTimePropertyManager::valueChanged, this, nullptr);
}
// QtKeySequenceEditorFactory
@@ -1415,8 +1375,7 @@ void QtKeySequenceEditorFactoryPrivate::slotPropertyChanged(QtProperty *property
void QtKeySequenceEditorFactoryPrivate::slotSetValue(const QKeySequence &value)
{
QObject *object = q_ptr->sender();
- const QMap<QKeySequenceEdit *, QtProperty *>::ConstIterator ecend = m_editorToProperty.constEnd();
- for (QMap<QKeySequenceEdit *, QtProperty *>::ConstIterator itEditor = m_editorToProperty.constBegin(); itEditor != ecend; ++itEditor)
+ for (auto itEditor = m_editorToProperty.cbegin(), ecend = m_editorToProperty.cend(); itEditor != ecend; ++itEditor)
if (itEditor.key() == object) {
QtProperty *property = itEditor.value();
QtKeySequencePropertyManager *manager = q_ptr->propertyManager(property);
@@ -1464,8 +1423,9 @@ QtKeySequenceEditorFactory::~QtKeySequenceEditorFactory()
*/
void QtKeySequenceEditorFactory::connectPropertyManager(QtKeySequencePropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty*,QKeySequence)),
- this, SLOT(slotPropertyChanged(QtProperty*,QKeySequence)));
+ connect(manager, &QtKeySequencePropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QKeySequence &value)
+ { d_ptr->slotPropertyChanged(property, value); });
}
/*!
@@ -1479,10 +1439,10 @@ QWidget *QtKeySequenceEditorFactory::createEditor(QtKeySequencePropertyManager *
QKeySequenceEdit *editor = d_ptr->createEditor(property, parent);
editor->setKeySequence(manager->value(property));
- connect(editor, SIGNAL(keySequenceChanged(QKeySequence)),
- this, SLOT(slotSetValue(QKeySequence)));
- connect(editor, SIGNAL(destroyed(QObject*)),
- this, SLOT(slotEditorDestroyed(QObject*)));
+ connect(editor, &QKeySequenceEdit::keySequenceChanged,
+ this, [this](const QKeySequence &value) { d_ptr->slotSetValue(value); });
+ connect(editor, &QObject::destroyed,
+ this, [this](QObject *object) { d_ptr->slotEditorDestroyed(object); });
return editor;
}
@@ -1493,8 +1453,7 @@ QWidget *QtKeySequenceEditorFactory::createEditor(QtKeySequencePropertyManager *
*/
void QtKeySequenceEditorFactory::disconnectPropertyManager(QtKeySequencePropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty*,QKeySequence)),
- this, SLOT(slotPropertyChanged(QtProperty*,QKeySequence)));
+ disconnect(manager, &QtKeySequencePropertyManager::valueChanged, this, nullptr);
}
// QtCharEdit
@@ -1529,7 +1488,7 @@ private:
QtCharEdit::QtCharEdit(QWidget *parent)
: QWidget(parent), m_lineEdit(new QLineEdit(this))
{
- QHBoxLayout *layout = new QHBoxLayout(this);
+ auto *layout = new QHBoxLayout(this);
layout->addWidget(m_lineEdit);
layout->setContentsMargins(QMargins());
m_lineEdit->installEventFilter(this);
@@ -1550,17 +1509,17 @@ bool QtCharEdit::eventFilter(QObject *o, QEvent *e)
QString actionString = action->text();
const int pos = actionString.lastIndexOf(QLatin1Char('\t'));
if (pos > 0)
- actionString = actionString.remove(pos, actionString.length() - pos);
+ actionString = actionString.remove(pos, actionString.size() - pos);
action->setText(actionString);
}
- QAction *actionBefore = 0;
- if (actions.count() > 0)
+ QAction *actionBefore = nullptr;
+ if (actions.size() > 0)
actionBefore = actions[0];
- QAction *clearAction = new QAction(tr("Clear Char"), menu);
+ auto *clearAction = new QAction(tr("Clear Char"), menu);
menu->insertAction(actionBefore, clearAction);
menu->insertSeparator(actionBefore);
clearAction->setEnabled(!m_value.isNull());
- connect(clearAction, SIGNAL(triggered()), this, SLOT(slotClearChar()));
+ connect(clearAction, &QAction::triggered, this, &QtCharEdit::slotClearChar);
menu->exec(c->globalPos());
delete menu;
e->accept();
@@ -1594,7 +1553,7 @@ void QtCharEdit::handleKeyEvent(QKeyEvent *e)
}
const QString text = e->text();
- if (text.count() != 1)
+ if (text.size() != 1)
return;
const QChar c = text.at(0);
@@ -1694,8 +1653,7 @@ void QtCharEditorFactoryPrivate::slotPropertyChanged(QtProperty *property,
void QtCharEditorFactoryPrivate::slotSetValue(const QChar &value)
{
QObject *object = q_ptr->sender();
- const QMap<QtCharEdit *, QtProperty *>::ConstIterator ecend = m_editorToProperty.constEnd();
- for (QMap<QtCharEdit *, QtProperty *>::ConstIterator itEditor = m_editorToProperty.constBegin(); itEditor != ecend; ++itEditor)
+ for (auto itEditor = m_editorToProperty.cbegin(), ecend = m_editorToProperty.cend(); itEditor != ecend; ++itEditor)
if (itEditor.key() == object) {
QtProperty *property = itEditor.value();
QtCharPropertyManager *manager = q_ptr->propertyManager(property);
@@ -1743,8 +1701,9 @@ QtCharEditorFactory::~QtCharEditorFactory()
*/
void QtCharEditorFactory::connectPropertyManager(QtCharPropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty*,QChar)),
- this, SLOT(slotPropertyChanged(QtProperty*,QChar)));
+ connect(manager, &QtCharPropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QChar &value)
+ { d_ptr->slotPropertyChanged(property, value); });
}
/*!
@@ -1758,10 +1717,10 @@ QWidget *QtCharEditorFactory::createEditor(QtCharPropertyManager *manager,
QtCharEdit *editor = d_ptr->createEditor(property, parent);
editor->setValue(manager->value(property));
- connect(editor, SIGNAL(valueChanged(QChar)),
- this, SLOT(slotSetValue(QChar)));
- connect(editor, SIGNAL(destroyed(QObject*)),
- this, SLOT(slotEditorDestroyed(QObject*)));
+ connect(editor, &QtCharEdit::valueChanged,
+ this, [this](const QChar &value) { d_ptr->slotSetValue(value); });
+ connect(editor, &QObject::destroyed,
+ this, [this](QObject *object) { d_ptr->slotEditorDestroyed(object); });
return editor;
}
@@ -1772,8 +1731,7 @@ QWidget *QtCharEditorFactory::createEditor(QtCharPropertyManager *manager,
*/
void QtCharEditorFactory::disconnectPropertyManager(QtCharPropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty*,QChar)),
- this, SLOT(slotPropertyChanged(QtProperty*,QChar)));
+ disconnect(manager, &QtCharPropertyManager::valueChanged, this, nullptr);
}
// QtEnumEditorFactory
@@ -1820,7 +1778,7 @@ void QtEnumEditorFactoryPrivate::slotEnumNamesChanged(QtProperty *property,
editor->blockSignals(true);
editor->clear();
editor->addItems(enumNames);
- const int nameCount = enumNames.count();
+ const int nameCount = enumNames.size();
for (int i = 0; i < nameCount; i++)
editor->setItemIcon(i, enumIcons.value(i));
editor->setCurrentIndex(manager->value(property));
@@ -1842,7 +1800,7 @@ void QtEnumEditorFactoryPrivate::slotEnumIconsChanged(QtProperty *property,
const QStringList enumNames = manager->enumNames(property);
for (QComboBox *editor : it.value()) {
editor->blockSignals(true);
- const int nameCount = enumNames.count();
+ const int nameCount = enumNames.size();
for (int i = 0; i < nameCount; i++)
editor->setItemIcon(i, enumIcons.value(i));
editor->setCurrentIndex(manager->value(property));
@@ -1853,8 +1811,7 @@ void QtEnumEditorFactoryPrivate::slotEnumIconsChanged(QtProperty *property,
void QtEnumEditorFactoryPrivate::slotSetValue(int value)
{
QObject *object = q_ptr->sender();
- const QMap<QComboBox *, QtProperty *>::ConstIterator ecend = m_editorToProperty.constEnd();
- for (QMap<QComboBox *, QtProperty *>::ConstIterator itEditor = m_editorToProperty.constBegin(); itEditor != ecend; ++itEditor)
+ for (auto itEditor = m_editorToProperty.cbegin(), ecend = m_editorToProperty.cend(); itEditor != ecend; ++itEditor)
if (itEditor.key() == object) {
QtProperty *property = itEditor.value();
QtEnumPropertyManager *manager = q_ptr->propertyManager(property);
@@ -1902,10 +1859,12 @@ QtEnumEditorFactory::~QtEnumEditorFactory()
*/
void QtEnumEditorFactory::connectPropertyManager(QtEnumPropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotPropertyChanged(QtProperty*,int)));
- connect(manager, SIGNAL(enumNamesChanged(QtProperty*,QStringList)),
- this, SLOT(slotEnumNamesChanged(QtProperty*,QStringList)));
+ connect(manager, &QtEnumPropertyManager::valueChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotPropertyChanged(property, value); });
+ connect(manager, &QtEnumPropertyManager::enumNamesChanged,
+ this, [this](QtProperty *property, const QStringList &value)
+ { d_ptr->slotEnumNamesChanged(property, value); });
}
/*!
@@ -1922,14 +1881,15 @@ QWidget *QtEnumEditorFactory::createEditor(QtEnumPropertyManager *manager, QtPro
QStringList enumNames = manager->enumNames(property);
editor->addItems(enumNames);
QMap<int, QIcon> enumIcons = manager->enumIcons(property);
- const int enumNamesCount = enumNames.count();
+ const int enumNamesCount = enumNames.size();
for (int i = 0; i < enumNamesCount; i++)
editor->setItemIcon(i, enumIcons.value(i));
editor->setCurrentIndex(manager->value(property));
- connect(editor, SIGNAL(currentIndexChanged(int)), this, SLOT(slotSetValue(int)));
- connect(editor, SIGNAL(destroyed(QObject*)),
- this, SLOT(slotEditorDestroyed(QObject*)));
+ connect(editor, &QComboBox::currentIndexChanged,
+ this, [this](int value) { d_ptr->slotSetValue(value); });
+ connect(editor, &QObject::destroyed,
+ this, [this](QObject *object) { d_ptr->slotEditorDestroyed(object); });
return editor;
}
@@ -1940,16 +1900,12 @@ QWidget *QtEnumEditorFactory::createEditor(QtEnumPropertyManager *manager, QtPro
*/
void QtEnumEditorFactory::disconnectPropertyManager(QtEnumPropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotPropertyChanged(QtProperty*,int)));
- disconnect(manager, SIGNAL(enumNamesChanged(QtProperty*,QStringList)),
- this, SLOT(slotEnumNamesChanged(QtProperty*,QStringList)));
+ disconnect(manager, &QtEnumPropertyManager::valueChanged, this, nullptr);
+ disconnect(manager, &QtEnumPropertyManager::enumNamesChanged, this, nullptr);
}
// QtCursorEditorFactory
-Q_GLOBAL_STATIC(QtCursorDatabase, cursorDatabase)
-
class QtCursorEditorFactoryPrivate
{
QtCursorEditorFactory *q_ptr;
@@ -1964,10 +1920,10 @@ public:
QtEnumEditorFactory *m_enumEditorFactory;
QtEnumPropertyManager *m_enumPropertyManager;
- QMap<QtProperty *, QtProperty *> m_propertyToEnum;
- QMap<QtProperty *, QtProperty *> m_enumToProperty;
- QMap<QtProperty *, QWidgetList > m_enumToEditors;
- QMap<QWidget *, QtProperty *> m_editorToEnum;
+ QHash<QtProperty *, QtProperty *> m_propertyToEnum;
+ QHash<QtProperty *, QtProperty *> m_enumToProperty;
+ QHash<QtProperty *, QWidgetList > m_enumToEditors;
+ QHash<QWidget *, QtProperty *> m_editorToEnum;
bool m_updatingEnum;
};
@@ -1985,7 +1941,8 @@ void QtCursorEditorFactoryPrivate::slotPropertyChanged(QtProperty *property, con
return;
m_updatingEnum = true;
- m_enumPropertyManager->setValue(enumProp, cursorDatabase()->cursorToValue(cursor));
+ auto *cdb = QtCursorDatabase::instance();
+ m_enumPropertyManager->setValue(enumProp, cdb->cursorToValue(cursor));
m_updatingEnum = false;
}
@@ -2001,7 +1958,8 @@ void QtCursorEditorFactoryPrivate::slotEnumChanged(QtProperty *property, int val
if (!cursorManager)
return;
#ifndef QT_NO_CURSOR
- cursorManager->setValue(prop, QCursor(cursorDatabase()->valueToCursor(value)));
+ auto *cdb = QtCursorDatabase::instance();
+ cursorManager->setValue(prop, QCursor(cdb->valueToCursor(value)));
#endif
}
@@ -2010,8 +1968,7 @@ void QtCursorEditorFactoryPrivate::slotEditorDestroyed(QObject *object)
// remove from m_editorToEnum map;
// remove from m_enumToEditors map;
// if m_enumToEditors doesn't contains more editors delete enum property;
- const QMap<QWidget *, QtProperty *>::ConstIterator ecend = m_editorToEnum.constEnd();
- for (QMap<QWidget *, QtProperty *>::ConstIterator itEditor = m_editorToEnum.constBegin(); itEditor != ecend; ++itEditor)
+ for (auto itEditor = m_editorToEnum.cbegin(), ecend = m_editorToEnum.cend(); itEditor != ecend; ++itEditor)
if (itEditor.key() == object) {
QWidget *editor = itEditor.key();
QtProperty *enumProp = itEditor.value();
@@ -2050,8 +2007,9 @@ QtCursorEditorFactory::QtCursorEditorFactory(QObject *parent)
d_ptr->m_enumEditorFactory = new QtEnumEditorFactory(this);
d_ptr->m_enumPropertyManager = new QtEnumPropertyManager(this);
- connect(d_ptr->m_enumPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotEnumChanged(QtProperty*,int)));
+ connect(d_ptr->m_enumPropertyManager, &QtEnumPropertyManager::valueChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotEnumChanged(property, value); });
d_ptr->m_enumEditorFactory->addPropertyManager(d_ptr->m_enumPropertyManager);
}
@@ -2069,8 +2027,9 @@ QtCursorEditorFactory::~QtCursorEditorFactory()
*/
void QtCursorEditorFactory::connectPropertyManager(QtCursorPropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty*,QCursor)),
- this, SLOT(slotPropertyChanged(QtProperty*,QCursor)));
+ connect(manager, &QtCursorPropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QCursor &value)
+ { d_ptr->slotPropertyChanged(property, value); });
}
/*!
@@ -2081,15 +2040,16 @@ void QtCursorEditorFactory::connectPropertyManager(QtCursorPropertyManager *mana
QWidget *QtCursorEditorFactory::createEditor(QtCursorPropertyManager *manager, QtProperty *property,
QWidget *parent)
{
- QtProperty *enumProp = 0;
+ QtProperty *enumProp = nullptr;
if (d_ptr->m_propertyToEnum.contains(property)) {
enumProp = d_ptr->m_propertyToEnum[property];
} else {
enumProp = d_ptr->m_enumPropertyManager->addProperty(property->propertyName());
- d_ptr->m_enumPropertyManager->setEnumNames(enumProp, cursorDatabase()->cursorShapeNames());
- d_ptr->m_enumPropertyManager->setEnumIcons(enumProp, cursorDatabase()->cursorShapeIcons());
+ auto *cdb = QtCursorDatabase::instance();
+ d_ptr->m_enumPropertyManager->setEnumNames(enumProp, cdb->cursorShapeNames());
+ d_ptr->m_enumPropertyManager->setEnumIcons(enumProp, cdb->cursorShapeIcons());
#ifndef QT_NO_CURSOR
- d_ptr->m_enumPropertyManager->setValue(enumProp, cursorDatabase()->cursorToValue(manager->value(property)));
+ d_ptr->m_enumPropertyManager->setValue(enumProp, cdb->cursorToValue(manager->value(property)));
#endif
d_ptr->m_propertyToEnum[property] = enumProp;
d_ptr->m_enumToProperty[enumProp] = property;
@@ -2098,8 +2058,8 @@ QWidget *QtCursorEditorFactory::createEditor(QtCursorPropertyManager *manager, Q
QWidget *editor = af->createEditor(enumProp, parent);
d_ptr->m_enumToEditors[enumProp].append(editor);
d_ptr->m_editorToEnum[editor] = enumProp;
- connect(editor, SIGNAL(destroyed(QObject*)),
- this, SLOT(slotEditorDestroyed(QObject*)));
+ connect(editor, &QObject::destroyed,
+ this, [this](QObject *object) { d_ptr->slotEditorDestroyed(object); });
return editor;
}
@@ -2110,8 +2070,7 @@ QWidget *QtCursorEditorFactory::createEditor(QtCursorPropertyManager *manager, Q
*/
void QtCursorEditorFactory::disconnectPropertyManager(QtCursorPropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty*,QCursor)),
- this, SLOT(slotPropertyChanged(QtProperty*,QCursor)));
+ disconnect(manager, &QtCursorPropertyManager::valueChanged, this, nullptr);
}
// QtColorEditWidget
@@ -2146,7 +2105,7 @@ QtColorEditWidget::QtColorEditWidget(QWidget *parent) :
m_label(new QLabel),
m_button(new QToolButton)
{
- QHBoxLayout *lt = new QHBoxLayout(this);
+ auto *lt = new QHBoxLayout(this);
setupTreeViewEditorMargin(lt);
lt->setSpacing(0);
lt->addWidget(m_pixmapLabel);
@@ -2159,7 +2118,7 @@ QtColorEditWidget::QtColorEditWidget(QWidget *parent) :
setFocusPolicy(m_button->focusPolicy());
m_button->setText(tr("..."));
m_button->installEventFilter(this);
- connect(m_button, SIGNAL(clicked()), this, SLOT(buttonClicked()));
+ connect(m_button, &QAbstractButton::clicked, this, &QtColorEditWidget::buttonClicked);
lt->addWidget(m_button);
m_pixmapLabel->setPixmap(QtPropertyBrowserUtils::brushValuePixmap(QBrush(m_color)));
m_label->setText(QtPropertyBrowserUtils::colorValueText(m_color));
@@ -2222,7 +2181,7 @@ public:
void QtColorEditorFactoryPrivate::slotPropertyChanged(QtProperty *property,
const QColor &value)
{
- const PropertyToEditorListMap::const_iterator it = m_createdEditors.constFind(property);
+ const auto it = m_createdEditors.constFind(property);
if (it == m_createdEditors.constEnd())
return;
@@ -2233,8 +2192,7 @@ void QtColorEditorFactoryPrivate::slotPropertyChanged(QtProperty *property,
void QtColorEditorFactoryPrivate::slotSetValue(const QColor &value)
{
QObject *object = q_ptr->sender();
- const EditorToPropertyMap::ConstIterator ecend = m_editorToProperty.constEnd();
- for (EditorToPropertyMap::ConstIterator itEditor = m_editorToProperty.constBegin(); itEditor != ecend; ++itEditor)
+ for (auto itEditor = m_editorToProperty.cbegin(), ecend = m_editorToProperty.cend(); itEditor != ecend; ++itEditor)
if (itEditor.key() == object) {
QtProperty *property = itEditor.value();
QtColorPropertyManager *manager = q_ptr->propertyManager(property);
@@ -2282,8 +2240,9 @@ QtColorEditorFactory::~QtColorEditorFactory()
*/
void QtColorEditorFactory::connectPropertyManager(QtColorPropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty*,QColor)),
- this, SLOT(slotPropertyChanged(QtProperty*,QColor)));
+ connect(manager, &QtColorPropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QColor &value)
+ { d_ptr->slotPropertyChanged(property, value); });
}
/*!
@@ -2296,8 +2255,10 @@ QWidget *QtColorEditorFactory::createEditor(QtColorPropertyManager *manager,
{
QtColorEditWidget *editor = d_ptr->createEditor(property, parent);
editor->setValue(manager->value(property));
- connect(editor, SIGNAL(valueChanged(QColor)), this, SLOT(slotSetValue(QColor)));
- connect(editor, SIGNAL(destroyed(QObject*)), this, SLOT(slotEditorDestroyed(QObject*)));
+ connect(editor, &QtColorEditWidget::valueChanged,
+ this, [this](const QColor &value) { d_ptr->slotSetValue(value); });
+ connect(editor, &QObject::destroyed,
+ this, [this](QObject *object) { d_ptr->slotEditorDestroyed(object); });
return editor;
}
@@ -2308,7 +2269,7 @@ QWidget *QtColorEditorFactory::createEditor(QtColorPropertyManager *manager,
*/
void QtColorEditorFactory::disconnectPropertyManager(QtColorPropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty*,QColor)), this, SLOT(slotPropertyChanged(QtProperty*,QColor)));
+ disconnect(manager, &QtColorPropertyManager::valueChanged, this, nullptr);
}
// QtFontEditWidget
@@ -2343,7 +2304,7 @@ QtFontEditWidget::QtFontEditWidget(QWidget *parent) :
m_label(new QLabel),
m_button(new QToolButton)
{
- QHBoxLayout *lt = new QHBoxLayout(this);
+ auto *lt = new QHBoxLayout(this);
setupTreeViewEditorMargin(lt);
lt->setSpacing(0);
lt->addWidget(m_pixmapLabel);
@@ -2356,7 +2317,7 @@ QtFontEditWidget::QtFontEditWidget(QWidget *parent) :
setFocusPolicy(m_button->focusPolicy());
m_button->setText(tr("..."));
m_button->installEventFilter(this);
- connect(m_button, SIGNAL(clicked()), this, SLOT(buttonClicked()));
+ connect(m_button, &QAbstractButton::clicked, this, &QtFontEditWidget::buttonClicked);
lt->addWidget(m_button);
m_pixmapLabel->setPixmap(QtPropertyBrowserUtils::fontValuePixmap(m_font));
m_label->setText(QtPropertyBrowserUtils::fontValueText(m_font));
@@ -2434,7 +2395,7 @@ public:
void QtFontEditorFactoryPrivate::slotPropertyChanged(QtProperty *property,
const QFont &value)
{
- const PropertyToEditorListMap::const_iterator it = m_createdEditors.constFind(property);
+ const auto it = m_createdEditors.constFind(property);
if (it == m_createdEditors.constEnd())
return;
@@ -2445,8 +2406,7 @@ void QtFontEditorFactoryPrivate::slotPropertyChanged(QtProperty *property,
void QtFontEditorFactoryPrivate::slotSetValue(const QFont &value)
{
QObject *object = q_ptr->sender();
- const EditorToPropertyMap::ConstIterator ecend = m_editorToProperty.constEnd();
- for (EditorToPropertyMap::ConstIterator itEditor = m_editorToProperty.constBegin(); itEditor != ecend; ++itEditor)
+ for (auto itEditor = m_editorToProperty.cbegin(), ecend = m_editorToProperty.cend(); itEditor != ecend; ++itEditor)
if (itEditor.key() == object) {
QtProperty *property = itEditor.value();
QtFontPropertyManager *manager = q_ptr->propertyManager(property);
@@ -2494,8 +2454,9 @@ QtFontEditorFactory::~QtFontEditorFactory()
*/
void QtFontEditorFactory::connectPropertyManager(QtFontPropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty*,QFont)),
- this, SLOT(slotPropertyChanged(QtProperty*,QFont)));
+ connect(manager, &QtFontPropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QFont &value)
+ { d_ptr->slotPropertyChanged(property, value); });
}
/*!
@@ -2508,8 +2469,10 @@ QWidget *QtFontEditorFactory::createEditor(QtFontPropertyManager *manager,
{
QtFontEditWidget *editor = d_ptr->createEditor(property, parent);
editor->setValue(manager->value(property));
- connect(editor, SIGNAL(valueChanged(QFont)), this, SLOT(slotSetValue(QFont)));
- connect(editor, SIGNAL(destroyed(QObject*)), this, SLOT(slotEditorDestroyed(QObject*)));
+ connect(editor, &QtFontEditWidget::valueChanged,
+ this, [this](const QFont &value) { d_ptr->slotSetValue(value); });
+ connect(editor, &QObject::destroyed,
+ this, [this](QObject *object) { d_ptr->slotEditorDestroyed(object); });
return editor;
}
@@ -2520,7 +2483,7 @@ QWidget *QtFontEditorFactory::createEditor(QtFontPropertyManager *manager,
*/
void QtFontEditorFactory::disconnectPropertyManager(QtFontPropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty*,QFont)), this, SLOT(slotPropertyChanged(QtProperty*,QFont)));
+ disconnect(manager, &QtFontPropertyManager::valueChanged, this, nullptr);
}
QT_END_NAMESPACE
diff --git a/src/shared/qtpropertybrowser/qteditorfactory.h b/src/shared/qtpropertybrowser/qteditorfactory.h
index 84cd797cd..bc848f777 100644
--- a/src/shared/qtpropertybrowser/qteditorfactory.h
+++ b/src/shared/qtpropertybrowser/qteditorfactory.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QTEDITORFACTORY_H
#define QTEDITORFACTORY_H
@@ -63,11 +27,6 @@ private:
QScopedPointer<QtSpinBoxFactoryPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtSpinBoxFactory)
Q_DISABLE_COPY_MOVE(QtSpinBoxFactory)
- Q_PRIVATE_SLOT(d_func(), void slotPropertyChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotRangeChanged(QtProperty *, int, int))
- Q_PRIVATE_SLOT(d_func(), void slotSingleStepChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotSetValue(int))
- Q_PRIVATE_SLOT(d_func(), void slotEditorDestroyed(QObject *))
};
class QtSliderFactoryPrivate;
@@ -87,11 +46,6 @@ private:
QScopedPointer<QtSliderFactoryPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtSliderFactory)
Q_DISABLE_COPY_MOVE(QtSliderFactory)
- Q_PRIVATE_SLOT(d_func(), void slotPropertyChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotRangeChanged(QtProperty *, int, int))
- Q_PRIVATE_SLOT(d_func(), void slotSingleStepChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotSetValue(int))
- Q_PRIVATE_SLOT(d_func(), void slotEditorDestroyed(QObject *))
};
class QtScrollBarFactoryPrivate;
@@ -111,11 +65,6 @@ private:
QScopedPointer<QtScrollBarFactoryPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtScrollBarFactory)
Q_DISABLE_COPY_MOVE(QtScrollBarFactory)
- Q_PRIVATE_SLOT(d_func(), void slotPropertyChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotRangeChanged(QtProperty *, int, int))
- Q_PRIVATE_SLOT(d_func(), void slotSingleStepChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotSetValue(int))
- Q_PRIVATE_SLOT(d_func(), void slotEditorDestroyed(QObject *))
};
class QtCheckBoxFactoryPrivate;
@@ -135,9 +84,6 @@ private:
QScopedPointer<QtCheckBoxFactoryPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtCheckBoxFactory)
Q_DISABLE_COPY_MOVE(QtCheckBoxFactory)
- Q_PRIVATE_SLOT(d_func(), void slotPropertyChanged(QtProperty *, bool))
- Q_PRIVATE_SLOT(d_func(), void slotSetValue(bool))
- Q_PRIVATE_SLOT(d_func(), void slotEditorDestroyed(QObject *))
};
class QtDoubleSpinBoxFactoryPrivate;
@@ -157,12 +103,6 @@ private:
QScopedPointer<QtDoubleSpinBoxFactoryPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtDoubleSpinBoxFactory)
Q_DISABLE_COPY_MOVE(QtDoubleSpinBoxFactory)
- Q_PRIVATE_SLOT(d_func(), void slotPropertyChanged(QtProperty *, double))
- Q_PRIVATE_SLOT(d_func(), void slotRangeChanged(QtProperty *, double, double))
- Q_PRIVATE_SLOT(d_func(), void slotSingleStepChanged(QtProperty *, double))
- Q_PRIVATE_SLOT(d_func(), void slotDecimalsChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotSetValue(double))
- Q_PRIVATE_SLOT(d_func(), void slotEditorDestroyed(QObject *))
};
class QtLineEditFactoryPrivate;
@@ -182,10 +122,6 @@ private:
QScopedPointer<QtLineEditFactoryPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtLineEditFactory)
Q_DISABLE_COPY_MOVE(QtLineEditFactory)
- Q_PRIVATE_SLOT(d_func(), void slotPropertyChanged(QtProperty *, const QString &))
- Q_PRIVATE_SLOT(d_func(), void slotRegExpChanged(QtProperty *, const QRegularExpression &))
- Q_PRIVATE_SLOT(d_func(), void slotSetValue(const QString &))
- Q_PRIVATE_SLOT(d_func(), void slotEditorDestroyed(QObject *))
};
class QtDateEditFactoryPrivate;
@@ -205,10 +141,6 @@ private:
QScopedPointer<QtDateEditFactoryPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtDateEditFactory)
Q_DISABLE_COPY_MOVE(QtDateEditFactory)
- Q_PRIVATE_SLOT(d_func(), void slotPropertyChanged(QtProperty *, QDate))
- Q_PRIVATE_SLOT(d_func(), void slotRangeChanged(QtProperty *, QDate, QDate))
- Q_PRIVATE_SLOT(d_func(), void slotSetValue(QDate))
- Q_PRIVATE_SLOT(d_func(), void slotEditorDestroyed(QObject *))
};
class QtTimeEditFactoryPrivate;
@@ -228,9 +160,6 @@ private:
QScopedPointer<QtTimeEditFactoryPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtTimeEditFactory)
Q_DISABLE_COPY_MOVE(QtTimeEditFactory)
- Q_PRIVATE_SLOT(d_func(), void slotPropertyChanged(QtProperty *, QTime))
- Q_PRIVATE_SLOT(d_func(), void slotSetValue(QTime))
- Q_PRIVATE_SLOT(d_func(), void slotEditorDestroyed(QObject *))
};
class QtDateTimeEditFactoryPrivate;
@@ -250,9 +179,6 @@ private:
QScopedPointer<QtDateTimeEditFactoryPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtDateTimeEditFactory)
Q_DISABLE_COPY_MOVE(QtDateTimeEditFactory)
- Q_PRIVATE_SLOT(d_func(), void slotPropertyChanged(QtProperty *, const QDateTime &))
- Q_PRIVATE_SLOT(d_func(), void slotSetValue(const QDateTime &))
- Q_PRIVATE_SLOT(d_func(), void slotEditorDestroyed(QObject *))
};
class QtKeySequenceEditorFactoryPrivate;
@@ -272,9 +198,6 @@ private:
QScopedPointer<QtKeySequenceEditorFactoryPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtKeySequenceEditorFactory)
Q_DISABLE_COPY_MOVE(QtKeySequenceEditorFactory)
- Q_PRIVATE_SLOT(d_func(), void slotPropertyChanged(QtProperty *, const QKeySequence &))
- Q_PRIVATE_SLOT(d_func(), void slotSetValue(const QKeySequence &))
- Q_PRIVATE_SLOT(d_func(), void slotEditorDestroyed(QObject *))
};
class QtCharEditorFactoryPrivate;
@@ -294,9 +217,6 @@ private:
QScopedPointer<QtCharEditorFactoryPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtCharEditorFactory)
Q_DISABLE_COPY_MOVE(QtCharEditorFactory)
- Q_PRIVATE_SLOT(d_func(), void slotPropertyChanged(QtProperty *, const QChar &))
- Q_PRIVATE_SLOT(d_func(), void slotSetValue(const QChar &))
- Q_PRIVATE_SLOT(d_func(), void slotEditorDestroyed(QObject *))
};
class QtEnumEditorFactoryPrivate;
@@ -316,13 +236,6 @@ private:
QScopedPointer<QtEnumEditorFactoryPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtEnumEditorFactory)
Q_DISABLE_COPY_MOVE(QtEnumEditorFactory)
- Q_PRIVATE_SLOT(d_func(), void slotPropertyChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotEnumNamesChanged(QtProperty *,
- const QStringList &))
- Q_PRIVATE_SLOT(d_func(), void slotEnumIconsChanged(QtProperty *,
- const QMap<int, QIcon> &))
- Q_PRIVATE_SLOT(d_func(), void slotSetValue(int))
- Q_PRIVATE_SLOT(d_func(), void slotEditorDestroyed(QObject *))
};
class QtCursorEditorFactoryPrivate;
@@ -342,9 +255,6 @@ private:
QScopedPointer<QtCursorEditorFactoryPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtCursorEditorFactory)
Q_DISABLE_COPY_MOVE(QtCursorEditorFactory)
- Q_PRIVATE_SLOT(d_func(), void slotPropertyChanged(QtProperty *, const QCursor &))
- Q_PRIVATE_SLOT(d_func(), void slotEnumChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotEditorDestroyed(QObject *))
};
class QtColorEditorFactoryPrivate;
@@ -364,9 +274,6 @@ private:
QScopedPointer<QtColorEditorFactoryPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtColorEditorFactory)
Q_DISABLE_COPY_MOVE(QtColorEditorFactory)
- Q_PRIVATE_SLOT(d_func(), void slotPropertyChanged(QtProperty *, const QColor &))
- Q_PRIVATE_SLOT(d_func(), void slotEditorDestroyed(QObject *))
- Q_PRIVATE_SLOT(d_func(), void slotSetValue(const QColor &))
};
class QtFontEditorFactoryPrivate;
@@ -386,9 +293,6 @@ private:
QScopedPointer<QtFontEditorFactoryPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtFontEditorFactory)
Q_DISABLE_COPY_MOVE(QtFontEditorFactory)
- Q_PRIVATE_SLOT(d_func(), void slotPropertyChanged(QtProperty *, const QFont &))
- Q_PRIVATE_SLOT(d_func(), void slotEditorDestroyed(QObject *))
- Q_PRIVATE_SLOT(d_func(), void slotSetValue(const QFont &))
};
QT_END_NAMESPACE
diff --git a/src/shared/qtpropertybrowser/qtgroupboxpropertybrowser.cpp b/src/shared/qtpropertybrowser/qtgroupboxpropertybrowser.cpp
index b7534e25b..9f08f67a9 100644
--- a/src/shared/qtpropertybrowser/qtgroupboxpropertybrowser.cpp
+++ b/src/shared/qtpropertybrowser/qtgroupboxpropertybrowser.cpp
@@ -1,49 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qtgroupboxpropertybrowser.h"
-#include <QtCore/QSet>
+
+#include <QtCore/QHash>
#include <QtWidgets/QGridLayout>
-#include <QtWidgets/QLabel>
#include <QtWidgets/QGroupBox>
-#include <QtCore/QTimer>
-#include <QtCore/QMap>
+#include <QtWidgets/QLabel>
QT_BEGIN_NAMESPACE
@@ -83,9 +46,9 @@ private:
bool hasHeader(WidgetItem *item) const;
- QMap<QtBrowserItem *, WidgetItem *> m_indexToItem;
- QMap<WidgetItem *, QtBrowserItem *> m_itemToIndex;
- QMap<QWidget *, WidgetItem *> m_widgetToItem;
+ QHash<QtBrowserItem *, WidgetItem *> m_indexToItem;
+ QHash<WidgetItem *, QtBrowserItem *> m_itemToIndex;
+ QHash<QWidget *, WidgetItem *> m_widgetToItem;
QGridLayout *m_mainLayout;
QList<WidgetItem *> m_children;
QList<WidgetItem *> m_recreateQueue;
@@ -95,28 +58,27 @@ void QtGroupBoxPropertyBrowserPrivate::init(QWidget *parent)
{
m_mainLayout = new QGridLayout();
parent->setLayout(m_mainLayout);
- QLayoutItem *item = new QSpacerItem(0, 0,
- QSizePolicy::Fixed, QSizePolicy::Expanding);
+ auto *item = new QSpacerItem(0, 0, QSizePolicy::Fixed, QSizePolicy::Expanding);
m_mainLayout->addItem(item, 0, 0);
}
void QtGroupBoxPropertyBrowserPrivate::slotEditorDestroyed()
{
- QWidget *editor = qobject_cast<QWidget *>(q_ptr->sender());
+ auto *editor = qobject_cast<QWidget *>(q_ptr->sender());
if (!editor)
return;
if (!m_widgetToItem.contains(editor))
return;
- m_widgetToItem[editor]->widget = 0;
+ m_widgetToItem[editor]->widget = nullptr;
m_widgetToItem.remove(editor);
}
void QtGroupBoxPropertyBrowserPrivate::slotUpdate()
{
- for (WidgetItem *item : qAsConst(m_recreateQueue)) {
+ for (WidgetItem *item : std::as_const(m_recreateQueue)) {
WidgetItem *par = item->parent;
- QWidget *w = 0;
- QGridLayout *l = 0;
+ QWidget *w = nullptr;
+ QGridLayout *l = nullptr;
int oldRow = -1;
if (!par) {
w = q_ptr;
@@ -155,7 +117,7 @@ void QtGroupBoxPropertyBrowserPrivate::slotUpdate()
void QtGroupBoxPropertyBrowserPrivate::updateLater()
{
- QTimer::singleShot(0, q_ptr, SLOT(slotUpdate()));
+ QMetaObject::invokeMethod(q_ptr, [this] { slotUpdate(); }, Qt::QueuedConnection);
}
void QtGroupBoxPropertyBrowserPrivate::propertyInserted(QtBrowserItem *index, QtBrowserItem *afterIndex)
@@ -163,11 +125,11 @@ void QtGroupBoxPropertyBrowserPrivate::propertyInserted(QtBrowserItem *index, Qt
WidgetItem *afterItem = m_indexToItem.value(afterIndex);
WidgetItem *parentItem = m_indexToItem.value(index->parent());
- WidgetItem *newItem = new WidgetItem();
+ auto *newItem = new WidgetItem();
newItem->parent = parentItem;
- QGridLayout *layout = 0;
- QWidget *parentWidget = 0;
+ QGridLayout *layout = nullptr;
+ QWidget *parentWidget = nullptr;
int row = -1;
if (!afterItem) {
row = 0;
@@ -194,8 +156,8 @@ void QtGroupBoxPropertyBrowserPrivate::propertyInserted(QtBrowserItem *index, Qt
if (!parentItem->groupBox) {
m_recreateQueue.removeAll(parentItem);
WidgetItem *par = parentItem->parent;
- QWidget *w = 0;
- QGridLayout *l = 0;
+ QWidget *w = nullptr;
+ QGridLayout *l = nullptr;
int oldRow = -1;
if (!par) {
w = q_ptr;
@@ -214,7 +176,7 @@ void QtGroupBoxPropertyBrowserPrivate::propertyInserted(QtBrowserItem *index, Qt
if (parentItem->label) {
l->removeWidget(parentItem->label);
delete parentItem->label;
- parentItem->label = 0;
+ parentItem->label = nullptr;
}
if (parentItem->widget) {
l->removeWidget(parentItem->widget);
@@ -224,7 +186,7 @@ void QtGroupBoxPropertyBrowserPrivate::propertyInserted(QtBrowserItem *index, Qt
} else if (parentItem->widgetLabel) {
l->removeWidget(parentItem->widgetLabel);
delete parentItem->widgetLabel;
- parentItem->widgetLabel = 0;
+ parentItem->widgetLabel = nullptr;
}
if (parentItem->line) {
parentItem->line->setFrameShape(QFrame::HLine);
@@ -244,7 +206,8 @@ void QtGroupBoxPropertyBrowserPrivate::propertyInserted(QtBrowserItem *index, Qt
if (!newItem->widget) {
newItem->widgetLabel = new QLabel(parentWidget);
} else {
- QObject::connect(newItem->widget, SIGNAL(destroyed()), q_ptr, SLOT(slotEditorDestroyed()));
+ QObject::connect(newItem->widget, &QWidget::destroyed,
+ q_ptr, [this] { slotEditorDestroyed(); });
m_widgetToItem[newItem->widget] = newItem;
}
@@ -296,22 +259,11 @@ void QtGroupBoxPropertyBrowserPrivate::propertyRemoved(QtBrowserItem *index)
if (!parentItem) {
removeRow(m_mainLayout, row);
- } else if (parentItem->children.count() != 0) {
+ } else if (parentItem->children.size() != 0) {
removeRow(parentItem->layout, row);
} else {
WidgetItem *par = parentItem->parent;
- QGridLayout *l = 0;
- int oldRow = -1;
- if (!par) {
- l = m_mainLayout;
- oldRow = m_children.indexOf(parentItem);
- } else {
- l = par->layout;
- oldRow = par->children.indexOf(parentItem);
- if (hasHeader(par))
- oldRow += 2;
- }
-
+ QGridLayout *l = (par ? par->layout : m_mainLayout);
if (parentItem->widget) {
parentItem->widget->hide();
parentItem->widget->setParent(0);
@@ -323,9 +275,9 @@ void QtGroupBoxPropertyBrowserPrivate::propertyRemoved(QtBrowserItem *index)
}
l->removeWidget(parentItem->groupBox);
delete parentItem->groupBox;
- parentItem->groupBox = 0;
- parentItem->line = 0;
- parentItem->layout = 0;
+ parentItem->groupBox = nullptr;
+ parentItem->line = nullptr;
+ parentItem->layout = nullptr;
if (!m_recreateQueue.contains(parentItem))
m_recreateQueue.append(parentItem);
updateLater();
@@ -337,7 +289,7 @@ void QtGroupBoxPropertyBrowserPrivate::propertyRemoved(QtBrowserItem *index)
void QtGroupBoxPropertyBrowserPrivate::insertRow(QGridLayout *layout, int row) const
{
- QMap<QLayoutItem *, QRect> itemToPos;
+ QHash<QLayoutItem *, QRect> itemToPos;
int idx = 0;
while (idx < layout->count()) {
int r, c, rs, cs;
@@ -349,8 +301,7 @@ void QtGroupBoxPropertyBrowserPrivate::insertRow(QGridLayout *layout, int row) c
}
}
- const QMap<QLayoutItem *, QRect>::ConstIterator icend = itemToPos.constEnd();
- for (QMap<QLayoutItem *, QRect>::ConstIterator it = itemToPos.constBegin(); it != icend; ++it) {
+ for (auto it = itemToPos.cbegin(), icend = itemToPos.cend(); it != icend; ++it) {
const QRect r = it.value();
layout->addItem(it.key(), r.x(), r.y(), r.width(), r.height());
}
@@ -358,7 +309,7 @@ void QtGroupBoxPropertyBrowserPrivate::insertRow(QGridLayout *layout, int row) c
void QtGroupBoxPropertyBrowserPrivate::removeRow(QGridLayout *layout, int row) const
{
- QMap<QLayoutItem *, QRect> itemToPos;
+ QHash<QLayoutItem *, QRect> itemToPos;
int idx = 0;
while (idx < layout->count()) {
int r, c, rs, cs;
@@ -370,8 +321,7 @@ void QtGroupBoxPropertyBrowserPrivate::removeRow(QGridLayout *layout, int row) c
}
}
- const QMap<QLayoutItem *, QRect>::ConstIterator icend = itemToPos.constEnd();
- for (QMap<QLayoutItem *, QRect>::ConstIterator it = itemToPos.constBegin(); it != icend; ++it) {
+ for (auto it = itemToPos.cbegin(), icend = itemToPos.cend(); it != icend; ++it) {
const QRect r = it.value();
layout->addItem(it.key(), r.x(), r.y(), r.width(), r.height());
}
@@ -379,9 +329,7 @@ void QtGroupBoxPropertyBrowserPrivate::removeRow(QGridLayout *layout, int row) c
bool QtGroupBoxPropertyBrowserPrivate::hasHeader(WidgetItem *item) const
{
- if (item->widget)
- return true;
- return false;
+ return item->widget;
}
void QtGroupBoxPropertyBrowserPrivate::propertyChanged(QtBrowserItem *index)
@@ -486,8 +434,7 @@ QtGroupBoxPropertyBrowser::QtGroupBoxPropertyBrowser(QWidget *parent)
*/
QtGroupBoxPropertyBrowser::~QtGroupBoxPropertyBrowser()
{
- const QMap<QtGroupBoxPropertyBrowserPrivate::WidgetItem *, QtBrowserItem *>::ConstIterator icend = d_ptr->m_itemToIndex.constEnd();
- for (QMap<QtGroupBoxPropertyBrowserPrivate::WidgetItem *, QtBrowserItem *>::ConstIterator it = d_ptr->m_itemToIndex.constBegin(); it != icend; ++it)
+ for (auto it = d_ptr->m_itemToIndex.cbegin(), icend = d_ptr->m_itemToIndex.cend(); it != icend; ++it)
delete it.key();
}
diff --git a/src/shared/qtpropertybrowser/qtgroupboxpropertybrowser.h b/src/shared/qtpropertybrowser/qtgroupboxpropertybrowser.h
index a42b8cf1d..44b790989 100644
--- a/src/shared/qtpropertybrowser/qtgroupboxpropertybrowser.h
+++ b/src/shared/qtpropertybrowser/qtgroupboxpropertybrowser.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QTGROUPBOXPROPERTYBROWSER_H
#define QTGROUPBOXPROPERTYBROWSER_H
@@ -50,7 +14,6 @@ class QtGroupBoxPropertyBrowser : public QtAbstractPropertyBrowser
{
Q_OBJECT
public:
-
QtGroupBoxPropertyBrowser(QWidget *parent = 0);
~QtGroupBoxPropertyBrowser();
@@ -60,13 +23,9 @@ protected:
void itemChanged(QtBrowserItem *item) override;
private:
-
QScopedPointer<QtGroupBoxPropertyBrowserPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtGroupBoxPropertyBrowser)
Q_DISABLE_COPY_MOVE(QtGroupBoxPropertyBrowser)
- Q_PRIVATE_SLOT(d_func(), void slotUpdate())
- Q_PRIVATE_SLOT(d_func(), void slotEditorDestroyed())
-
};
QT_END_NAMESPACE
diff --git a/src/shared/qtpropertybrowser/qtpropertybrowser.cpp b/src/shared/qtpropertybrowser/qtpropertybrowser.cpp
index 601fb854a..2803e2860 100644
--- a/src/shared/qtpropertybrowser/qtpropertybrowser.cpp
+++ b/src/shared/qtpropertybrowser/qtpropertybrowser.cpp
@@ -1,45 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qtpropertybrowser.h"
-#include <QtCore/QSet>
-#include <QtCore/QMap>
+#include <QtCore/QHash>
#include <QtGui/QIcon>
#if defined(Q_CC_MSVC)
@@ -161,15 +124,15 @@ QtProperty::QtProperty(QtAbstractPropertyManager *manager)
*/
QtProperty::~QtProperty()
{
- for (QtProperty *property : qAsConst(d_ptr->m_parentItems))
+ for (QtProperty *property : std::as_const(d_ptr->m_parentItems))
property->d_ptr->m_manager->d_ptr->propertyRemoved(this, property);
d_ptr->m_manager->d_ptr->propertyDestroyed(this);
- for (QtProperty *property : qAsConst(d_ptr->m_subItems))
+ for (QtProperty *property : std::as_const(d_ptr->m_subItems))
property->d_ptr->m_parentItems.remove(this);
- for (QtProperty *property : qAsConst(d_ptr->m_parentItems))
+ for (QtProperty *property : std::as_const(d_ptr->m_parentItems))
property->d_ptr->m_subItems.removeAll(this);
}
@@ -423,8 +386,8 @@ void QtProperty::setModified(bool modified)
*/
void QtProperty::addSubProperty(QtProperty *property)
{
- QtProperty *after = 0;
- if (d_ptr->m_subItems.count() > 0)
+ QtProperty *after = nullptr;
+ if (d_ptr->m_subItems.size() > 0)
after = d_ptr->m_subItems.last();
insertSubProperty(property, after);
}
@@ -453,7 +416,7 @@ void QtProperty::insertSubProperty(QtProperty *property,
// traverse all children of item. if this item is a child of item then cannot add.
auto pendingList = property->subProperties();
- QMap<QtProperty *, bool> visited;
+ QHash<QtProperty *, bool> visited;
while (!pendingList.isEmpty()) {
QtProperty *i = pendingList.first();
if (i == this)
@@ -468,8 +431,8 @@ void QtProperty::insertSubProperty(QtProperty *property,
pendingList = subProperties();
int pos = 0;
int newPos = 0;
- QtProperty *properAfterProperty = 0;
- while (pos < pendingList.count()) {
+ QtProperty *properAfterProperty = nullptr;
+ while (pos < pendingList.size()) {
QtProperty *i = pendingList.at(pos);
if (i == property)
return; // if item is already inserted in this item then cannot add.
@@ -501,7 +464,7 @@ void QtProperty::removeSubProperty(QtProperty *property)
auto pendingList = subProperties();
int pos = 0;
- while (pos < pendingList.count()) {
+ while (pos < pendingList.size()) {
if (pendingList.at(pos) == property) {
d_ptr->m_subItems.removeAt(pos);
property->d_ptr->m_parentItems.remove(this);
@@ -729,7 +692,7 @@ bool QtAbstractPropertyManager::hasValue(const QtProperty *property) const
QIcon QtAbstractPropertyManager::valueIcon(const QtProperty *property) const
{
Q_UNUSED(property);
- return QIcon();
+ return {};
}
/*!
@@ -744,7 +707,7 @@ QIcon QtAbstractPropertyManager::valueIcon(const QtProperty *property) const
QString QtAbstractPropertyManager::valueText(const QtProperty *property) const
{
Q_UNUSED(property);
- return QString();
+ return {};
}
/*!
@@ -1203,10 +1166,11 @@ QtBrowserItem::~QtBrowserItem()
////////////////////////////////////
-typedef QMap<QtAbstractPropertyBrowser *, QMap<QtAbstractPropertyManager *,
- QtAbstractEditorFactoryBase *> > Map1;
-typedef QMap<QtAbstractPropertyManager *, QMap<QtAbstractEditorFactoryBase *,
- QList<QtAbstractPropertyBrowser *> > > Map2;
+using Map1 = QHash<QtAbstractPropertyBrowser *,
+ QHash<QtAbstractPropertyManager *, QtAbstractEditorFactoryBase *>>;
+using Map2 = QHash<QtAbstractPropertyManager *,
+ QHash<QtAbstractEditorFactoryBase *, QList<QtAbstractPropertyBrowser *>>>;
+
Q_GLOBAL_STATIC(Map1, m_viewToManagerToFactory)
Q_GLOBAL_STATIC(Map2, m_managerToFactoryToViews)
@@ -1234,12 +1198,12 @@ public:
void slotPropertyDataChanged(QtProperty *property);
QList<QtProperty *> m_subItems;
- QMap<QtAbstractPropertyManager *, QList<QtProperty *> > m_managerToProperties;
- QMap<QtProperty *, QList<QtProperty *> > m_propertyToParents;
+ QHash<QtAbstractPropertyManager *, QList<QtProperty *> > m_managerToProperties;
+ QHash<QtProperty *, QList<QtProperty *> > m_propertyToParents;
- QMap<QtProperty *, QtBrowserItem *> m_topLevelPropertyToIndex;
+ QHash<QtProperty *, QtBrowserItem *> m_topLevelPropertyToIndex;
QList<QtBrowserItem *> m_topLevelIndexes;
- QMap<QtProperty *, QList<QtBrowserItem *> > m_propertyToIndexes;
+ QHash<QtProperty *, QList<QtBrowserItem *> > m_propertyToIndexes;
QtBrowserItem *m_currentItem;
};
@@ -1264,17 +1228,16 @@ void QtAbstractPropertyBrowserPrivate::insertSubTree(QtProperty *property,
QtAbstractPropertyManager *manager = property->propertyManager();
if (m_managerToProperties[manager].isEmpty()) {
// connect manager's signals
- q_ptr->connect(manager, SIGNAL(propertyInserted(QtProperty *,
- QtProperty *, QtProperty *)),
- q_ptr, SLOT(slotPropertyInserted(QtProperty *,
- QtProperty *, QtProperty *)));
- q_ptr->connect(manager, SIGNAL(propertyRemoved(QtProperty *,
- QtProperty *)),
- q_ptr, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
- q_ptr->connect(manager, SIGNAL(propertyDestroyed(QtProperty*)),
- q_ptr, SLOT(slotPropertyDestroyed(QtProperty*)));
- q_ptr->connect(manager, SIGNAL(propertyChanged(QtProperty*)),
- q_ptr, SLOT(slotPropertyDataChanged(QtProperty*)));
+ q_ptr->connect(manager, &QtAbstractPropertyManager::propertyInserted,
+ q_ptr, [this](QtProperty *property, QtProperty *parent, QtProperty *after)
+ { slotPropertyInserted(property, parent, after); });
+ q_ptr->connect(manager, &QtAbstractPropertyManager::propertyRemoved,
+ q_ptr, [this](QtProperty *property, QtProperty *parent)
+ { slotPropertyRemoved(property, parent); });
+ q_ptr->connect(manager, &QtAbstractPropertyManager::propertyDestroyed,
+ q_ptr, [this](QtProperty *property) { slotPropertyDestroyed(property); });
+ q_ptr->connect(manager, &QtAbstractPropertyManager::propertyChanged,
+ q_ptr, [this](QtProperty *property) { slotPropertyDataChanged(property); });
}
m_managerToProperties[manager].append(property);
m_propertyToParents[property].append(parentProperty);
@@ -1301,17 +1264,10 @@ void QtAbstractPropertyBrowserPrivate::removeSubTree(QtProperty *property,
m_managerToProperties[manager].removeAll(property);
if (m_managerToProperties[manager].isEmpty()) {
// disconnect manager's signals
- q_ptr->disconnect(manager, SIGNAL(propertyInserted(QtProperty *,
- QtProperty *, QtProperty *)),
- q_ptr, SLOT(slotPropertyInserted(QtProperty *,
- QtProperty *, QtProperty *)));
- q_ptr->disconnect(manager, SIGNAL(propertyRemoved(QtProperty *,
- QtProperty *)),
- q_ptr, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
- q_ptr->disconnect(manager, SIGNAL(propertyDestroyed(QtProperty*)),
- q_ptr, SLOT(slotPropertyDestroyed(QtProperty*)));
- q_ptr->disconnect(manager, SIGNAL(propertyChanged(QtProperty*)),
- q_ptr, SLOT(slotPropertyDataChanged(QtProperty*)));
+ q_ptr->disconnect(manager, &QtAbstractPropertyManager::propertyInserted, q_ptr, nullptr);
+ q_ptr->disconnect(manager, &QtAbstractPropertyManager::propertyRemoved, q_ptr, nullptr);
+ q_ptr->disconnect(manager, &QtAbstractPropertyManager::propertyDestroyed, q_ptr, nullptr);
+ q_ptr->disconnect(manager, &QtAbstractPropertyManager::propertyChanged, q_ptr, nullptr);
m_managerToProperties.remove(manager);
}
@@ -1323,7 +1279,7 @@ void QtAbstractPropertyBrowserPrivate::removeSubTree(QtProperty *property,
void QtAbstractPropertyBrowserPrivate::createBrowserIndexes(QtProperty *property, QtProperty *parentProperty, QtProperty *afterProperty)
{
- QMap<QtBrowserItem *, QtBrowserItem *> parentToAfter;
+ QHash<QtBrowserItem *, QtBrowserItem *> parentToAfter;
if (afterProperty) {
const auto it = m_propertyToIndexes.constFind(afterProperty);
if (it == m_propertyToIndexes.constEnd())
@@ -1340,20 +1296,19 @@ void QtAbstractPropertyBrowserPrivate::createBrowserIndexes(QtProperty *property
return;
for (QtBrowserItem *idx : it.value())
- parentToAfter[idx] = 0;
+ parentToAfter[idx] = nullptr;
} else {
- parentToAfter[0] = 0;
+ parentToAfter[nullptr] = nullptr;
}
- const QMap<QtBrowserItem *, QtBrowserItem *>::ConstIterator pcend = parentToAfter.constEnd();
- for (QMap<QtBrowserItem *, QtBrowserItem *>::ConstIterator it = parentToAfter.constBegin(); it != pcend; ++it)
+ for (auto it = parentToAfter.cbegin(), pcend = parentToAfter.cend(); it != pcend; ++it)
createBrowserIndex(property, it.key(), it.value());
}
QtBrowserItem *QtAbstractPropertyBrowserPrivate::createBrowserIndex(QtProperty *property,
QtBrowserItem *parentIndex, QtBrowserItem *afterIndex)
{
- QtBrowserItem *newIndex = new QtBrowserItem(q_ptr, property, parentIndex);
+ auto *newIndex = new QtBrowserItem(q_ptr, property, parentIndex);
if (parentIndex) {
parentIndex->d_ptr->addChild(newIndex, afterIndex);
} else {
@@ -1365,7 +1320,7 @@ QtBrowserItem *QtAbstractPropertyBrowserPrivate::createBrowserIndex(QtProperty *
q_ptr->itemInserted(newIndex, afterIndex);
const auto subItems = property->subProperties();
- QtBrowserItem *afterChild = 0;
+ QtBrowserItem *afterChild = nullptr;
for (QtProperty *child : subItems)
afterChild = createBrowserIndex(child, newIndex, afterChild);
return newIndex;
@@ -1384,14 +1339,14 @@ void QtAbstractPropertyBrowserPrivate::removeBrowserIndexes(QtProperty *property
toRemove.append(idx);
}
- for (QtBrowserItem *index : qAsConst(toRemove))
+ for (QtBrowserItem *index : std::as_const(toRemove))
removeBrowserIndex(index);
}
void QtAbstractPropertyBrowserPrivate::removeBrowserIndex(QtBrowserItem *index)
{
const auto children = index->children();
- for (int i = children.count(); i > 0; i--) {
+ for (int i = children.size(); i > 0; i--) {
removeBrowserIndex(children.at(i - 1));
}
@@ -1606,7 +1561,7 @@ void QtAbstractPropertyBrowserPrivate::slotPropertyDataChanged(QtProperty *prope
\a item of the property as parameters. The passed \a item is
deleted just after this call is finished.
- If the the parent of \a item is 0, the removed \a item was a
+ If the parent of \a item is 0, the removed \a item was a
top level property in this editor.
This function must be reimplemented in derived classes. Note that
@@ -1742,8 +1697,8 @@ void QtAbstractPropertyBrowser::clear()
*/
QtBrowserItem *QtAbstractPropertyBrowser::addProperty(QtProperty *property)
{
- QtProperty *afterProperty = 0;
- if (d_ptr->m_subItems.count() > 0)
+ QtProperty *afterProperty = nullptr;
+ if (d_ptr->m_subItems.size() > 0)
afterProperty = d_ptr->m_subItems.last();
return insertProperty(property, afterProperty);
}
@@ -1768,16 +1723,16 @@ QtBrowserItem *QtAbstractPropertyBrowser::insertProperty(QtProperty *property,
QtProperty *afterProperty)
{
if (!property)
- return 0;
+ return nullptr;
// if item is already inserted in this item then cannot add.
auto pendingList = properties();
int pos = 0;
int newPos = 0;
- while (pos < pendingList.count()) {
+ while (pos < pendingList.size()) {
QtProperty *prop = pendingList.at(pos);
if (prop == property)
- return 0;
+ return nullptr;
if (prop == afterProperty) {
newPos = pos + 1;
}
@@ -1811,7 +1766,7 @@ void QtAbstractPropertyBrowser::removeProperty(QtProperty *property)
auto pendingList = properties();
int pos = 0;
- while (pos < pendingList.count()) {
+ while (pos < pendingList.size()) {
if (pendingList.at(pos) == property) {
d_ptr->m_subItems.removeAt(pos); //perhaps this two lines
d_ptr->removeSubTree(property, 0); //should be moved down after propertyRemoved call.
@@ -1849,7 +1804,7 @@ void QtAbstractPropertyBrowser::removeProperty(QtProperty *property)
QWidget *QtAbstractPropertyBrowser::createEditor(QtProperty *property,
QWidget *parent)
{
- QtAbstractEditorFactoryBase *factory = 0;
+ QtAbstractEditorFactoryBase *factory = nullptr;
QtAbstractPropertyManager *manager = property->propertyManager();
if (m_viewToManagerToFactory()->contains(this) &&
@@ -1858,7 +1813,7 @@ QWidget *QtAbstractPropertyBrowser::createEditor(QtProperty *property,
}
if (!factory)
- return 0;
+ return nullptr;
QWidget *w = factory->createEditor(property, parent);
// Since some editors can be QComboBoxes, and we changed their focus policy in Qt 5
// to make them feel more native on Mac, we need to relax the focus policy to something
diff --git a/src/shared/qtpropertybrowser/qtpropertybrowser.h b/src/shared/qtpropertybrowser/qtpropertybrowser.h
index 697ee4c7d..623ea5d67 100644
--- a/src/shared/qtpropertybrowser/qtpropertybrowser.h
+++ b/src/shared/qtpropertybrowser/qtpropertybrowser.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QTPROPERTYBROWSER_H
#define QTPROPERTYBROWSER_H
@@ -105,9 +69,7 @@ public:
QtProperty *addProperty(const QString &name = QString());
Q_SIGNALS:
-
- void propertyInserted(QtProperty *property,
- QtProperty *parent, QtProperty *after);
+ void propertyInserted(QtProperty *property, QtProperty *parent, QtProperty *after);
void propertyChanged(QtProperty *property);
void propertyRemoved(QtProperty *property, QtProperty *parent);
void propertyDestroyed(QtProperty *property);
@@ -148,7 +110,7 @@ public:
explicit QtAbstractEditorFactory(QObject *parent) : QtAbstractEditorFactoryBase(parent) {}
QWidget *createEditor(QtProperty *property, QWidget *parent) override
{
- for (PropertyManager *manager : qAsConst(m_managers)) {
+ for (PropertyManager *manager : std::as_const(m_managers)) {
if (manager == property->propertyManager()) {
return createEditor(manager, property, parent);
}
@@ -161,15 +123,15 @@ public:
return;
m_managers.insert(manager);
connectPropertyManager(manager);
- connect(manager, SIGNAL(destroyed(QObject *)),
- this, SLOT(managerDestroyed(QObject *)));
+ connect(manager, &QObject::destroyed,
+ this, &QtAbstractEditorFactory<PropertyManager>::managerDestroyed);
}
void removePropertyManager(PropertyManager *manager)
{
if (!m_managers.contains(manager))
return;
- disconnect(manager, SIGNAL(destroyed(QObject *)),
- this, SLOT(managerDestroyed(QObject *)));
+ disconnect(manager, &QObject::destroyed,
+ this, &QtAbstractEditorFactory<PropertyManager>::managerDestroyed);
disconnectPropertyManager(manager);
m_managers.remove(manager);
}
@@ -180,7 +142,7 @@ public:
PropertyManager *propertyManager(QtProperty *property) const
{
QtAbstractPropertyManager *manager = property->propertyManager();
- for (PropertyManager *m : qAsConst(m_managers)) {
+ for (PropertyManager *m : std::as_const(m_managers)) {
if (m == manager) {
return m;
}
@@ -194,7 +156,7 @@ protected:
virtual void disconnectPropertyManager(PropertyManager *manager) = 0;
void managerDestroyed(QObject *manager) override
{
- for (PropertyManager *m : qAsConst(m_managers)) {
+ for (PropertyManager *m : std::as_const(m_managers)) {
if (m == manager) {
m_managers.remove(m);
return;
@@ -204,7 +166,7 @@ protected:
private:
void breakConnection(QtAbstractPropertyManager *manager) override
{
- for (PropertyManager *m : qAsConst(m_managers)) {
+ for (PropertyManager *m : std::as_const(m_managers)) {
if (m == manager) {
removePropertyManager(m);
return;
@@ -289,13 +251,6 @@ private:
QScopedPointer<QtAbstractPropertyBrowserPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtAbstractPropertyBrowser)
Q_DISABLE_COPY_MOVE(QtAbstractPropertyBrowser)
- Q_PRIVATE_SLOT(d_func(), void slotPropertyInserted(QtProperty *,
- QtProperty *, QtProperty *))
- Q_PRIVATE_SLOT(d_func(), void slotPropertyRemoved(QtProperty *,
- QtProperty *))
- Q_PRIVATE_SLOT(d_func(), void slotPropertyDestroyed(QtProperty *))
- Q_PRIVATE_SLOT(d_func(), void slotPropertyDataChanged(QtProperty *))
-
};
QT_END_NAMESPACE
diff --git a/src/shared/qtpropertybrowser/qtpropertybrowser.pri b/src/shared/qtpropertybrowser/qtpropertybrowser.pri
deleted file mode 100644
index 8d767d68e..000000000
--- a/src/shared/qtpropertybrowser/qtpropertybrowser.pri
+++ /dev/null
@@ -1,18 +0,0 @@
-INCLUDEPATH += $$PWD
-SOURCES += $$PWD/qtpropertybrowser.cpp \
- $$PWD/qtpropertymanager.cpp \
- $$PWD/qteditorfactory.cpp \
- $$PWD/qtvariantproperty.cpp \
- $$PWD/qttreepropertybrowser.cpp \
- $$PWD/qtbuttonpropertybrowser.cpp \
- $$PWD/qtgroupboxpropertybrowser.cpp \
- $$PWD/qtpropertybrowserutils.cpp
-HEADERS += $$PWD/qtpropertybrowser.h \
- $$PWD/qtpropertymanager.h \
- $$PWD/qteditorfactory.h \
- $$PWD/qtvariantproperty.h \
- $$PWD/qttreepropertybrowser.h \
- $$PWD/qtbuttonpropertybrowser.h \
- $$PWD/qtgroupboxpropertybrowser.h \
- $$PWD/qtpropertybrowserutils_p.h
-RESOURCES += $$PWD/qtpropertybrowser.qrc
diff --git a/src/shared/qtpropertybrowser/qtpropertybrowser.qrc b/src/shared/qtpropertybrowser/qtpropertybrowser.qrc
deleted file mode 100644
index a7d37dd10..000000000
--- a/src/shared/qtpropertybrowser/qtpropertybrowser.qrc
+++ /dev/null
@@ -1,23 +0,0 @@
-<RCC version="1.0">
- <qresource prefix="/qt-project.org/qtpropertybrowser">
- <file>images/cursor-arrow.png</file>
- <file>images/cursor-busy.png</file>
- <file>images/cursor-closedhand.png</file>
- <file>images/cursor-cross.png</file>
- <file>images/cursor-forbidden.png</file>
- <file>images/cursor-hand.png</file>
- <file>images/cursor-hsplit.png</file>
- <file>images/cursor-ibeam.png</file>
- <file>images/cursor-openhand.png</file>
- <file>images/cursor-sizeall.png</file>
- <file>images/cursor-sizeb.png</file>
- <file>images/cursor-sizef.png</file>
- <file>images/cursor-sizeh.png</file>
- <file>images/cursor-sizev.png</file>
- <file>images/cursor-uparrow.png</file>
- <file>images/cursor-vsplit.png</file>
- <file>images/cursor-wait.png</file>
- <file>images/cursor-whatsthis.png</file>
- </qresource>
-</RCC>
-
diff --git a/src/shared/qtpropertybrowser/qtpropertybrowserutils.cpp b/src/shared/qtpropertybrowser/qtpropertybrowserutils.cpp
index 9602b10d0..9d6aca901 100644
--- a/src/shared/qtpropertybrowser/qtpropertybrowserutils.cpp
+++ b/src/shared/qtpropertybrowser/qtpropertybrowserutils.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qtpropertybrowserutils_p.h"
#include <QtWidgets/QApplication>
@@ -49,46 +13,57 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
+// Make sure icons are removed as soon as QApplication is destroyed, otherwise,
+// handles are leaked on X11.
+static void clearCursorDatabase()
+{
+ QtCursorDatabase::instance()->clear();
+}
+
QtCursorDatabase::QtCursorDatabase()
{
+ qAddPostRoutine(clearCursorDatabase);
+
appendCursor(Qt::ArrowCursor, QCoreApplication::translate("QtCursorDatabase", "Arrow"),
- QIcon(QLatin1String(":/qt-project.org/qtpropertybrowser/images/cursor-arrow.png")));
+ QIcon(":/qt-project.org/qtpropertybrowser/images/cursor-arrow.png"_L1));
appendCursor(Qt::UpArrowCursor, QCoreApplication::translate("QtCursorDatabase", "Up Arrow"),
- QIcon(QLatin1String(":/qt-project.org/qtpropertybrowser/images/cursor-uparrow.png")));
+ QIcon(":/qt-project.org/qtpropertybrowser/images/cursor-uparrow.png"_L1));
appendCursor(Qt::CrossCursor, QCoreApplication::translate("QtCursorDatabase", "Cross"),
- QIcon(QLatin1String(":/qt-project.org/qtpropertybrowser/images/cursor-cross.png")));
+ QIcon(":/qt-project.org/qtpropertybrowser/images/cursor-cross.png"_L1));
appendCursor(Qt::WaitCursor, QCoreApplication::translate("QtCursorDatabase", "Wait"),
- QIcon(QLatin1String(":/qt-project.org/qtpropertybrowser/images/cursor-wait.png")));
+ QIcon(":/qt-project.org/qtpropertybrowser/images/cursor-wait.png"_L1));
appendCursor(Qt::IBeamCursor, QCoreApplication::translate("QtCursorDatabase", "IBeam"),
- QIcon(QLatin1String(":/qt-project.org/qtpropertybrowser/images/cursor-ibeam.png")));
+ QIcon(":/qt-project.org/qtpropertybrowser/images/cursor-ibeam.png"_L1));
appendCursor(Qt::SizeVerCursor, QCoreApplication::translate("QtCursorDatabase", "Size Vertical"),
- QIcon(QLatin1String(":/qt-project.org/qtpropertybrowser/images/cursor-sizev.png")));
+ QIcon(":/qt-project.org/qtpropertybrowser/images/cursor-sizev.png"_L1));
appendCursor(Qt::SizeHorCursor, QCoreApplication::translate("QtCursorDatabase", "Size Horizontal"),
- QIcon(QLatin1String(":/qt-project.org/qtpropertybrowser/images/cursor-sizeh.png")));
+ QIcon(":/qt-project.org/qtpropertybrowser/images/cursor-sizeh.png"_L1));
appendCursor(Qt::SizeFDiagCursor, QCoreApplication::translate("QtCursorDatabase", "Size Backslash"),
- QIcon(QLatin1String(":/qt-project.org/qtpropertybrowser/images/cursor-sizef.png")));
+ QIcon(":/qt-project.org/qtpropertybrowser/images/cursor-sizef.png"_L1));
appendCursor(Qt::SizeBDiagCursor, QCoreApplication::translate("QtCursorDatabase", "Size Slash"),
- QIcon(QLatin1String(":/qt-project.org/qtpropertybrowser/images/cursor-sizeb.png")));
+ QIcon(":/qt-project.org/qtpropertybrowser/images/cursor-sizeb.png"_L1));
appendCursor(Qt::SizeAllCursor, QCoreApplication::translate("QtCursorDatabase", "Size All"),
- QIcon(QLatin1String(":/qt-project.org/qtpropertybrowser/images/cursor-sizeall.png")));
+ QIcon(":/qt-project.org/qtpropertybrowser/images/cursor-sizeall.png"_L1));
appendCursor(Qt::BlankCursor, QCoreApplication::translate("QtCursorDatabase", "Blank"),
QIcon());
appendCursor(Qt::SplitVCursor, QCoreApplication::translate("QtCursorDatabase", "Split Vertical"),
- QIcon(QLatin1String(":/qt-project.org/qtpropertybrowser/images/cursor-vsplit.png")));
+ QIcon(":/qt-project.org/qtpropertybrowser/images/cursor-vsplit.png"_L1));
appendCursor(Qt::SplitHCursor, QCoreApplication::translate("QtCursorDatabase", "Split Horizontal"),
- QIcon(QLatin1String(":/qt-project.org/qtpropertybrowser/images/cursor-hsplit.png")));
+ QIcon(":/qt-project.org/qtpropertybrowser/images/cursor-hsplit.png"_L1));
appendCursor(Qt::PointingHandCursor, QCoreApplication::translate("QtCursorDatabase", "Pointing Hand"),
- QIcon(QLatin1String(":/qt-project.org/qtpropertybrowser/images/cursor-hand.png")));
+ QIcon(":/qt-project.org/qtpropertybrowser/images/cursor-hand.png"_L1));
appendCursor(Qt::ForbiddenCursor, QCoreApplication::translate("QtCursorDatabase", "Forbidden"),
- QIcon(QLatin1String(":/qt-project.org/qtpropertybrowser/images/cursor-forbidden.png")));
+ QIcon(":/qt-project.org/qtpropertybrowser/images/cursor-forbidden.png"_L1));
appendCursor(Qt::OpenHandCursor, QCoreApplication::translate("QtCursorDatabase", "Open Hand"),
- QIcon(QLatin1String(":/qt-project.org/qtpropertybrowser/images/cursor-openhand.png")));
+ QIcon(":/qt-project.org/qtpropertybrowser/images/cursor-openhand.png"_L1));
appendCursor(Qt::ClosedHandCursor, QCoreApplication::translate("QtCursorDatabase", "Closed Hand"),
- QIcon(QLatin1String(":/qt-project.org/qtpropertybrowser/images/cursor-closedhand.png")));
+ QIcon(":/qt-project.org/qtpropertybrowser/images/cursor-closedhand.png"_L1));
appendCursor(Qt::WhatsThisCursor, QCoreApplication::translate("QtCursorDatabase", "What's This"),
- QIcon(QLatin1String(":/qt-project.org/qtpropertybrowser/images/cursor-whatsthis.png")));
+ QIcon(":/qt-project.org/qtpropertybrowser/images/cursor-whatsthis.png"_L1));
appendCursor(Qt::BusyCursor, QCoreApplication::translate("QtCursorDatabase", "Busy"),
- QIcon(QLatin1String(":/qt-project.org/qtpropertybrowser/images/cursor-busy.png")));
+ QIcon(":/qt-project.org/qtpropertybrowser/images/cursor-busy.png"_L1));
}
void QtCursorDatabase::clear()
@@ -103,7 +78,7 @@ void QtCursorDatabase::appendCursor(Qt::CursorShape shape, const QString &name,
{
if (m_cursorShapeToValue.contains(shape))
return;
- const int value = m_cursorNames.count();
+ const int value = m_cursorNames.size();
m_cursorNames.append(name);
m_cursorIcons.insert(value, icon);
m_valueToCursorShape.insert(value, shape);
@@ -125,7 +100,7 @@ QString QtCursorDatabase::cursorToShapeName(const QCursor &cursor) const
int val = cursorToValue(cursor);
if (val >= 0)
return m_cursorNames.at(val);
- return QString();
+ return {};
}
QIcon QtCursorDatabase::cursorToShapeIcon(const QCursor &cursor) const
@@ -149,10 +124,17 @@ QCursor QtCursorDatabase::valueToCursor(int value) const
{
if (m_valueToCursorShape.contains(value))
return QCursor(m_valueToCursorShape[value]);
- return QCursor();
+ return {};
}
#endif
+Q_GLOBAL_STATIC(QtCursorDatabase, cursorDatabase)
+
+QtCursorDatabase *QtCursorDatabase::instance()
+{
+ return cursorDatabase();
+}
+
QPixmap QtPropertyBrowserUtils::brushValuePixmap(const QBrush &b)
{
QImage img(16, 16, QImage::Format_ARGB32_Premultiplied);
@@ -217,7 +199,7 @@ QString QtPropertyBrowserUtils::dateFormat()
QString format = loc.dateFormat(QLocale::ShortFormat);
// Change dd.MM.yy, MM/dd/yy to 4 digit years
if (format.count(QLatin1Char('y')) == 2)
- format.insert(format.indexOf(QLatin1Char('y')), QLatin1String("yy"));
+ format.insert(format.indexOf(QLatin1Char('y')), "yy"_L1);
return format;
}
@@ -241,14 +223,14 @@ QtBoolEdit::QtBoolEdit(QWidget *parent) :
m_checkBox(new QCheckBox(this)),
m_textVisible(true)
{
- QHBoxLayout *lt = new QHBoxLayout;
+ auto *lt = new QHBoxLayout;
if (QApplication::layoutDirection() == Qt::LeftToRight)
lt->setContentsMargins(4, 0, 0, 0);
else
lt->setContentsMargins(0, 0, 4, 0);
lt->addWidget(m_checkBox);
setLayout(lt);
- connect(m_checkBox, SIGNAL(toggled(bool)), this, SIGNAL(toggled(bool)));
+ connect(m_checkBox, &QAbstractButton::toggled, this, &QtBoolEdit::toggled);
setFocusProxy(m_checkBox);
m_checkBox->setText(tr("True"));
}
diff --git a/src/shared/qtpropertybrowser/qtpropertybrowserutils.pri b/src/shared/qtpropertybrowser/qtpropertybrowserutils.pri
deleted file mode 100644
index 22f28a057..000000000
--- a/src/shared/qtpropertybrowser/qtpropertybrowserutils.pri
+++ /dev/null
@@ -1,3 +0,0 @@
-INCLUDEPATH += $$PWD
-SOURCES += $$PWD/qtpropertybrowserutils.cpp
-HEADERS += $$PWD/qtpropertybrowserutils_p.h
diff --git a/src/shared/qtpropertybrowser/qtpropertybrowserutils_p.h b/src/shared/qtpropertybrowser/qtpropertybrowserutils_p.h
index 08de7f0d7..60d19c26d 100644
--- a/src/shared/qtpropertybrowser/qtpropertybrowserutils_p.h
+++ b/src/shared/qtpropertybrowser/qtpropertybrowserutils_p.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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
//
// W A R N I N G
@@ -76,6 +40,9 @@ public:
#ifndef QT_NO_CURSOR
QCursor valueToCursor(int value) const;
#endif
+
+ static QtCursorDatabase *instance();
+
private:
void appendCursor(Qt::CursorShape shape, const QString &name, const QIcon &icon);
QStringList m_cursorNames;
diff --git a/src/shared/qtpropertybrowser/qtpropertymanager.cpp b/src/shared/qtpropertybrowser/qtpropertymanager.cpp
index 4ff304257..e5ed1bf41 100644
--- a/src/shared/qtpropertybrowser/qtpropertymanager.cpp
+++ b/src/shared/qtpropertybrowser/qtpropertymanager.cpp
@@ -1,68 +1,55 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qtpropertymanager.h"
#include "qtpropertybrowserutils_p.h"
+
#include <QtCore/QDateTime>
+#include <QtCore/QHash>
#include <QtCore/QLocale>
#include <QtCore/QMap>
-#include <QtCore/QTimer>
-#include <QtCore/QRegularExpression>
-#include <QtGui/QIcon>
#include <QtCore/QMetaEnum>
+#include <QtCore/QRegularExpression>
+#include <QtCore/QTimer>
#include <QtGui/QFontDatabase>
-#include <QtWidgets/QStyleOption>
-#include <QtWidgets/QStyle>
-#include <QtWidgets/QApplication>
+#include <QtGui/QIcon>
#include <QtGui/QPainter>
+#include <QtWidgets/QApplication>
#include <QtWidgets/QLabel>
+#include <QtWidgets/QStyle>
+#include <QtWidgets/QStyleOption>
#include <limits>
#include <limits.h>
#include <float.h>
+#include <algorithm>
+#include <utility>
+
#if defined(Q_CC_MSVC)
# pragma warning(disable: 4786) /* MS VS 6: truncating debug info after 255 characters */
#endif
QT_BEGIN_NAMESPACE
+using DisambiguatedTranslation = std::pair<const char *, const char *>;
+
+static const QFont::Weight weightValues[] = {
+ QFont::Thin, QFont::ExtraLight, QFont::Light, QFont::Normal, QFont::Medium, QFont::DemiBold,
+ QFont::Bold, QFont::ExtraBold, QFont::Black
+};
+
+static int indexOfFontWeight(QFont::Weight w)
+{
+ auto it = std::find(std::begin(weightValues), std::end(weightValues), w);
+ return int(it - std::begin(weightValues));
+}
+
+static inline QFont::Weight weightFromIndex(int i)
+{
+ return weightValues[i];
+}
+
template <class PrivateData, class Value>
static void setSimpleMinimumData(PrivateData *data, const Value &minVal)
{
@@ -185,7 +172,7 @@ void orderBorders(QSizeF &minVal, QSizeF &maxVal)
////////
template <class Value, class PrivateData>
-static Value getData(const QMap<const QtProperty *, PrivateData> &propertyMap,
+static Value getData(const QHash<const QtProperty *, PrivateData> &propertyMap,
Value PrivateData::*data,
const QtProperty *property, const Value &defaultValue = Value())
{
@@ -196,28 +183,28 @@ static Value getData(const QMap<const QtProperty *, PrivateData> &propertyMap,
}
template <class Value, class PrivateData>
-static Value getValue(const QMap<const QtProperty *, PrivateData> &propertyMap,
+static Value getValue(const QHash<const QtProperty *, PrivateData> &propertyMap,
const QtProperty *property, const Value &defaultValue = Value())
{
return getData<Value>(propertyMap, &PrivateData::val, property, defaultValue);
}
template <class Value, class PrivateData>
-static Value getMinimum(const QMap<const QtProperty *, PrivateData> &propertyMap,
+static Value getMinimum(const QHash<const QtProperty *, PrivateData> &propertyMap,
const QtProperty *property, const Value &defaultValue = Value())
{
return getData<Value>(propertyMap, &PrivateData::minVal, property, defaultValue);
}
template <class Value, class PrivateData>
-static Value getMaximum(const QMap<const QtProperty *, PrivateData> &propertyMap,
+static Value getMaximum(const QHash<const QtProperty *, PrivateData> &propertyMap,
const QtProperty *property, const Value &defaultValue = Value())
{
return getData<Value>(propertyMap, &PrivateData::maxVal, property, defaultValue);
}
template <class ValueChangeParameter, class Value, class PropertyManager>
-static void setSimpleValue(QMap<const QtProperty *, Value> &propertyMap,
+static void setSimpleValue(QHash<const QtProperty *, Value> &propertyMap,
PropertyManager *manager,
void (PropertyManager::*propertyChangedSignal)(QtProperty *),
void (PropertyManager::*valueChangedSignal)(QtProperty *, ValueChangeParameter),
@@ -386,33 +373,35 @@ public:
QStringList policyEnumNames() const { return m_policyEnumNames; }
QStringList languageEnumNames() const { return m_languageEnumNames; }
- QStringList countryEnumNames(QLocale::Language language) const { return m_countryEnumNames.value(language); }
+ QStringList territoryEnumNames(QLocale::Language language) const { return m_territoryEnumNames.value(language); }
QSizePolicy::Policy indexToSizePolicy(int index) const;
int sizePolicyToIndex(QSizePolicy::Policy policy) const;
- void indexToLocale(int languageIndex, int countryIndex, QLocale::Language *language, QLocale::Country *country) const;
- void localeToIndex(QLocale::Language language, QLocale::Country country, int *languageIndex, int *countryIndex) const;
+ void indexToLocale(int languageIndex, int territoryIndex, QLocale::Language *language, QLocale::Territory *territory) const;
+ void localeToIndex(QLocale::Language language, QLocale::Territory territory, int *languageIndex, int *territoryIndex) const;
private:
void initLocale();
QStringList m_policyEnumNames;
QStringList m_languageEnumNames;
- QMap<QLocale::Language, QStringList> m_countryEnumNames;
+ QMap<QLocale::Language, QStringList> m_territoryEnumNames;
QMap<int, QLocale::Language> m_indexToLanguage;
QMap<QLocale::Language, int> m_languageToIndex;
- QMap<int, QMap<int, QLocale::Country> > m_indexToCountry;
- QMap<QLocale::Language, QMap<QLocale::Country, int> > m_countryToIndex;
+ QMap<int, QMap<int, QLocale::Territory> > m_indexToTerritory;
+ QMap<QLocale::Language, QMap<QLocale::Territory, int> > m_territoryToIndex;
QMetaEnum m_policyEnum;
};
-static QList<QLocale::Country> sortCountries(const QList<QLocale::Country> &countries)
+static QList<QLocale::Territory> sortedTerritories(const QList<QLocale> &locales)
{
- QMultiMap<QString, QLocale::Country> nameToCountry;
- for (QLocale::Country country : countries)
- nameToCountry.insert(QLocale::countryToString(country), country);
- return nameToCountry.values();
+ QMultiMap<QString, QLocale::Territory> nameToTerritory;
+ for (const QLocale &locale : locales) {
+ const auto territory = locale.territory();
+ nameToTerritory.insert(QLocale::territoryToString(territory), territory);
+ }
+ return nameToTerritory.values();
}
void QtMetaEnumProvider::initLocale()
@@ -431,26 +420,24 @@ void QtMetaEnumProvider::initLocale()
const auto languages = nameToLanguage.values();
for (QLocale::Language language : languages) {
- QList<QLocale::Country> countries;
- countries = QLocale::countriesForLanguage(language);
- if (countries.isEmpty() && language == system.language())
- countries << system.country();
-
- if (!countries.isEmpty() && !m_languageToIndex.contains(language)) {
- countries = sortCountries(countries);
- int langIdx = m_languageEnumNames.count();
+ auto locales = QLocale::matchingLocales(language, QLocale::AnyScript,
+ QLocale::AnyTerritory);
+
+ if (!locales.isEmpty() && !m_languageToIndex.contains(language)) {
+ const auto territories = sortedTerritories(locales);
+ int langIdx = m_languageEnumNames.size();
m_indexToLanguage[langIdx] = language;
m_languageToIndex[language] = langIdx;
- QStringList countryNames;
- int countryIdx = 0;
- for (QLocale::Country country : qAsConst(countries)) {
- countryNames << QLocale::countryToString(country);
- m_indexToCountry[langIdx][countryIdx] = country;
- m_countryToIndex[language][country] = countryIdx;
- ++countryIdx;
+ QStringList territoryNames;
+ int territoryIdx = 0;
+ for (QLocale::Territory territory : territories) {
+ territoryNames << QLocale::territoryToString(territory);
+ m_indexToTerritory[langIdx][territoryIdx] = territory;
+ m_territoryToIndex[language][territory] = territoryIdx;
+ ++territoryIdx;
}
m_languageEnumNames << QLocale::languageToString(language);
- m_countryEnumNames[language] = countryNames;
+ m_territoryEnumNames[language] = territoryNames;
}
}
}
@@ -464,7 +451,7 @@ QtMetaEnumProvider::QtMetaEnumProvider()
m_policyEnum = p.enumerator();
const int keyCount = m_policyEnum.keyCount();
for (int i = 0; i < keyCount; i++)
- m_policyEnumNames << QLatin1String(m_policyEnum.key(i));
+ m_policyEnumNames << QLatin1StringView(m_policyEnum.key(i));
initLocale();
}
@@ -483,35 +470,35 @@ int QtMetaEnumProvider::sizePolicyToIndex(QSizePolicy::Policy policy) const
return -1;
}
-void QtMetaEnumProvider::indexToLocale(int languageIndex, int countryIndex, QLocale::Language *language, QLocale::Country *country) const
+void QtMetaEnumProvider::indexToLocale(int languageIndex, int territoryIndex, QLocale::Language *language, QLocale::Territory *territory) const
{
QLocale::Language l = QLocale::C;
- QLocale::Country c = QLocale::AnyCountry;
+ QLocale::Territory c = QLocale::AnyTerritory;
if (m_indexToLanguage.contains(languageIndex)) {
l = m_indexToLanguage[languageIndex];
- if (m_indexToCountry.contains(languageIndex) && m_indexToCountry[languageIndex].contains(countryIndex))
- c = m_indexToCountry[languageIndex][countryIndex];
+ if (m_indexToTerritory.contains(languageIndex) && m_indexToTerritory[languageIndex].contains(territoryIndex))
+ c = m_indexToTerritory[languageIndex][territoryIndex];
}
if (language)
*language = l;
- if (country)
- *country = c;
+ if (territory)
+ *territory = c;
}
-void QtMetaEnumProvider::localeToIndex(QLocale::Language language, QLocale::Country country, int *languageIndex, int *countryIndex) const
+void QtMetaEnumProvider::localeToIndex(QLocale::Language language, QLocale::Territory territory, int *languageIndex, int *territoryIndex) const
{
int l = -1;
int c = -1;
if (m_languageToIndex.contains(language)) {
l = m_languageToIndex[language];
- if (m_countryToIndex.contains(language) && m_countryToIndex[language].contains(country))
- c = m_countryToIndex[language][country];
+ if (m_territoryToIndex.contains(language) && m_territoryToIndex[language].contains(territory))
+ c = m_territoryToIndex[language][territory];
}
if (languageIndex)
*languageIndex = l;
- if (countryIndex)
- *countryIndex = c;
+ if (territoryIndex)
+ *territoryIndex = c;
}
Q_GLOBAL_STATIC(QtMetaEnumProvider, metaEnumProvider)
@@ -593,8 +580,7 @@ public:
void setMaximumValue(int newMaxVal) { setSimpleMaximumData(this, newMaxVal); }
};
- typedef QMap<const QtProperty *, Data> PropertyValueMap;
- PropertyValueMap m_values;
+ QHash<const QtProperty *, Data> m_values;
};
/*!
@@ -719,9 +705,9 @@ int QtIntPropertyManager::singleStep(const QtProperty *property) const
*/
QString QtIntPropertyManager::valueText(const QtProperty *property) const
{
- const QtIntPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
return QString::number(it.value().val);
}
@@ -738,7 +724,7 @@ QString QtIntPropertyManager::valueText(const QtProperty *property) const
*/
void QtIntPropertyManager::setValue(QtProperty *property, int val)
{
- void (QtIntPropertyManagerPrivate::*setSubPropertyValue)(QtProperty *, int) = 0;
+ void (QtIntPropertyManagerPrivate::*setSubPropertyValue)(QtProperty *, int) = nullptr;
setValueInRange<int, QtIntPropertyManagerPrivate, QtIntPropertyManager, int>(this, d_ptr.data(),
&QtIntPropertyManager::propertyChanged,
&QtIntPropertyManager::valueChanged,
@@ -797,7 +783,7 @@ void QtIntPropertyManager::setMaximum(QtProperty *property, int maxVal)
*/
void QtIntPropertyManager::setRange(QtProperty *property, int minVal, int maxVal)
{
- void (QtIntPropertyManagerPrivate::*setSubPropertyRange)(QtProperty *, int, int, int) = 0;
+ void (QtIntPropertyManagerPrivate::*setSubPropertyRange)(QtProperty *, int, int, int) = nullptr;
setBorderValues<int, QtIntPropertyManagerPrivate, QtIntPropertyManager, int>(this, d_ptr.data(),
&QtIntPropertyManager::propertyChanged,
&QtIntPropertyManager::valueChanged,
@@ -814,7 +800,7 @@ void QtIntPropertyManager::setRange(QtProperty *property, int minVal, int maxVal
*/
void QtIntPropertyManager::setSingleStep(QtProperty *property, int step)
{
- const QtIntPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -870,8 +856,7 @@ public:
void setMaximumValue(double newMaxVal) { setSimpleMaximumData(this, newMaxVal); }
};
- typedef QMap<const QtProperty *, Data> PropertyValueMap;
- PropertyValueMap m_values;
+ QHash<const QtProperty *, Data> m_values;
};
/*!
@@ -1017,9 +1002,9 @@ int QtDoublePropertyManager::decimals(const QtProperty *property) const
*/
QString QtDoublePropertyManager::valueText(const QtProperty *property) const
{
- const QtDoublePropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
return QString::number(it.value().val, 'f', it.value().decimals);
}
@@ -1036,7 +1021,7 @@ QString QtDoublePropertyManager::valueText(const QtProperty *property) const
*/
void QtDoublePropertyManager::setValue(QtProperty *property, double val)
{
- void (QtDoublePropertyManagerPrivate::*setSubPropertyValue)(QtProperty *, double) = 0;
+ void (QtDoublePropertyManagerPrivate::*setSubPropertyValue)(QtProperty *, double) = nullptr;
setValueInRange<double, QtDoublePropertyManagerPrivate, QtDoublePropertyManager, double>(this, d_ptr.data(),
&QtDoublePropertyManager::propertyChanged,
&QtDoublePropertyManager::valueChanged,
@@ -1052,7 +1037,7 @@ void QtDoublePropertyManager::setValue(QtProperty *property, double val)
*/
void QtDoublePropertyManager::setSingleStep(QtProperty *property, double step)
{
- const QtDoublePropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -1082,7 +1067,7 @@ void QtDoublePropertyManager::setSingleStep(QtProperty *property, double step)
*/
void QtDoublePropertyManager::setDecimals(QtProperty *property, int prec)
{
- const QtDoublePropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -1155,7 +1140,7 @@ void QtDoublePropertyManager::setMaximum(QtProperty *property, double maxVal)
*/
void QtDoublePropertyManager::setRange(QtProperty *property, double minVal, double maxVal)
{
- void (QtDoublePropertyManagerPrivate::*setSubPropertyRange)(QtProperty *, double, double, double) = 0;
+ void (QtDoublePropertyManagerPrivate::*setSubPropertyRange)(QtProperty *, double, double, double) = nullptr;
setBorderValues<double, QtDoublePropertyManagerPrivate, QtDoublePropertyManager, double>(this, d_ptr.data(),
&QtDoublePropertyManager::propertyChanged,
&QtDoublePropertyManager::valueChanged,
@@ -1193,8 +1178,7 @@ public:
QRegularExpression regExp;
};
- typedef QMap<const QtProperty *, Data> PropertyValueMap;
- QMap<const QtProperty *, Data> m_values;
+ QHash<const QtProperty *, Data> m_values;
};
/*!
@@ -1288,9 +1272,9 @@ QRegularExpression QtStringPropertyManager::regExp(const QtProperty *property) c
*/
QString QtStringPropertyManager::valueText(const QtProperty *property) const
{
- const QtStringPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
return it.value().val;
}
@@ -1306,7 +1290,7 @@ QString QtStringPropertyManager::valueText(const QtProperty *property) const
*/
void QtStringPropertyManager::setValue(QtProperty *property, const QString &val)
{
- const QtStringPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -1335,7 +1319,7 @@ void QtStringPropertyManager::setValue(QtProperty *property, const QString &val)
*/
void QtStringPropertyManager::setRegExp(QtProperty *property, const QRegularExpression &regExp)
{
- const QtStringPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -1405,7 +1389,7 @@ class QtBoolPropertyManagerPrivate
public:
QtBoolPropertyManagerPrivate();
- QMap<const QtProperty *, bool> m_values;
+ QHash<const QtProperty *, bool> m_values;
const QIcon m_checkedIcon;
const QIcon m_uncheckedIcon;
};
@@ -1477,9 +1461,9 @@ bool QtBoolPropertyManager::value(const QtProperty *property) const
*/
QString QtBoolPropertyManager::valueText(const QtProperty *property) const
{
- const QMap<const QtProperty *, bool>::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
static const QString trueText = tr("True");
static const QString falseText = tr("False");
@@ -1491,9 +1475,9 @@ QString QtBoolPropertyManager::valueText(const QtProperty *property) const
*/
QIcon QtBoolPropertyManager::valueIcon(const QtProperty *property) const
{
- const QMap<const QtProperty *, bool>::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QIcon();
+ return {};
return it.value() ? d_ptr->m_checkedIcon : d_ptr->m_uncheckedIcon;
}
@@ -1551,8 +1535,7 @@ public:
QString m_format;
- typedef QMap<const QtProperty *, Data> PropertyValueMap;
- QMap<const QtProperty *, Data> m_values;
+ QHash<const QtProperty *, Data> m_values;
};
QtDatePropertyManagerPrivate::QtDatePropertyManagerPrivate(QtDatePropertyManager *q) :
@@ -1660,9 +1643,9 @@ QDate QtDatePropertyManager::maximum(const QtProperty *property) const
*/
QString QtDatePropertyManager::valueText(const QtProperty *property) const
{
- const QtDatePropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
return it.value().val.toString(d_ptr->m_format);
}
@@ -1679,7 +1662,7 @@ QString QtDatePropertyManager::valueText(const QtProperty *property) const
*/
void QtDatePropertyManager::setValue(QtProperty *property, QDate val)
{
- void (QtDatePropertyManagerPrivate::*setSubPropertyValue)(QtProperty *, QDate) = 0;
+ void (QtDatePropertyManagerPrivate::*setSubPropertyValue)(QtProperty *, QDate) = nullptr;
setValueInRange<QDate, QtDatePropertyManagerPrivate, QtDatePropertyManager, const QDate>(this, d_ptr.data(),
&QtDatePropertyManager::propertyChanged,
&QtDatePropertyManager::valueChanged,
@@ -1738,7 +1721,7 @@ void QtDatePropertyManager::setMaximum(QtProperty *property, QDate maxVal)
*/
void QtDatePropertyManager::setRange(QtProperty *property, QDate minVal, QDate maxVal)
{
- void (QtDatePropertyManagerPrivate::*setSubPropertyRange)(QtProperty *, QDate, QDate, QDate) = 0;
+ void (QtDatePropertyManagerPrivate::*setSubPropertyRange)(QtProperty *, QDate, QDate, QDate) = nullptr;
setBorderValues<QDate, QtDatePropertyManagerPrivate, QtDatePropertyManager, QDate>(this, d_ptr.data(),
&QtDatePropertyManager::propertyChanged,
&QtDatePropertyManager::valueChanged,
@@ -1773,8 +1756,7 @@ public:
const QString m_format;
- typedef QMap<const QtProperty *, QTime> PropertyValueMap;
- PropertyValueMap m_values;
+ QHash<const QtProperty *, QTime> m_values;
};
QtTimePropertyManagerPrivate::QtTimePropertyManagerPrivate(QtTimePropertyManager *q) :
@@ -1845,9 +1827,9 @@ QTime QtTimePropertyManager::value(const QtProperty *property) const
*/
QString QtTimePropertyManager::valueText(const QtProperty *property) const
{
- const QtTimePropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
return it.value().toString(d_ptr->m_format);
}
@@ -1893,8 +1875,7 @@ public:
const QString m_format;
- typedef QMap<const QtProperty *, QDateTime> PropertyValueMap;
- PropertyValueMap m_values;
+ QHash<const QtProperty *, QDateTime> m_values;
};
QtDateTimePropertyManagerPrivate::QtDateTimePropertyManagerPrivate(QtDateTimePropertyManager *q) :
@@ -1961,9 +1942,9 @@ QDateTime QtDateTimePropertyManager::value(const QtProperty *property) const
*/
QString QtDateTimePropertyManager::valueText(const QtProperty *property) const
{
- const QtDateTimePropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
return it.value().toString(d_ptr->m_format);
}
@@ -2008,8 +1989,7 @@ public:
QString m_format;
- typedef QMap<const QtProperty *, QKeySequence> PropertyValueMap;
- PropertyValueMap m_values;
+ QHash<const QtProperty *, QKeySequence> m_values;
};
/*! \class QtKeySequencePropertyManager
@@ -2072,9 +2052,9 @@ QKeySequence QtKeySequencePropertyManager::value(const QtProperty *property) con
*/
QString QtKeySequencePropertyManager::valueText(const QtProperty *property) const
{
- const QtKeySequencePropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
return it.value().toString(QKeySequence::NativeText);
}
@@ -2117,8 +2097,7 @@ class QtCharPropertyManagerPrivate
Q_DECLARE_PUBLIC(QtCharPropertyManager)
public:
- typedef QMap<const QtProperty *, QChar> PropertyValueMap;
- PropertyValueMap m_values;
+ QHash<const QtProperty *, QChar> m_values;
};
/*! \class QtCharPropertyManager
@@ -2181,9 +2160,9 @@ QChar QtCharPropertyManager::value(const QtProperty *property) const
*/
QString QtCharPropertyManager::valueText(const QtProperty *property) const
{
- const QtCharPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
const QChar c = it.value();
return c.isNull() ? QString() : QString(c);
}
@@ -2227,54 +2206,47 @@ class QtLocalePropertyManagerPrivate
Q_DECLARE_PUBLIC(QtLocalePropertyManager)
public:
- QtLocalePropertyManagerPrivate();
-
void slotEnumChanged(QtProperty *property, int value);
void slotPropertyDestroyed(QtProperty *property);
- typedef QMap<const QtProperty *, QLocale> PropertyValueMap;
- PropertyValueMap m_values;
+ QHash<const QtProperty *, QLocale> m_values;
- QtEnumPropertyManager *m_enumPropertyManager;
+ QtEnumPropertyManager *m_enumPropertyManager = nullptr;
- QMap<const QtProperty *, QtProperty *> m_propertyToLanguage;
- QMap<const QtProperty *, QtProperty *> m_propertyToCountry;
+ QHash<const QtProperty *, QtProperty *> m_propertyToLanguage;
+ QHash<const QtProperty *, QtProperty *> m_propertyToTerritory;
- QMap<const QtProperty *, QtProperty *> m_languageToProperty;
- QMap<const QtProperty *, QtProperty *> m_countryToProperty;
+ QHash<const QtProperty *, QtProperty *> m_languageToProperty;
+ QHash<const QtProperty *, QtProperty *> m_territoryToProperty;
};
-QtLocalePropertyManagerPrivate::QtLocalePropertyManagerPrivate()
-{
-}
-
void QtLocalePropertyManagerPrivate::slotEnumChanged(QtProperty *property, int value)
{
- if (QtProperty *prop = m_languageToProperty.value(property, 0)) {
+ if (QtProperty *prop = m_languageToProperty.value(property, nullptr)) {
const QLocale loc = m_values[prop];
QLocale::Language newLanguage = loc.language();
- QLocale::Country newCountry = loc.country();
+ QLocale::Territory newTerritory = loc.territory();
metaEnumProvider()->indexToLocale(value, 0, &newLanguage, 0);
- QLocale newLoc(newLanguage, newCountry);
+ QLocale newLoc(newLanguage, newTerritory);
q_ptr->setValue(prop, newLoc);
- } else if (QtProperty *prop = m_countryToProperty.value(property, 0)) {
+ } else if (QtProperty *prop = m_territoryToProperty.value(property, nullptr)) {
const QLocale loc = m_values[prop];
QLocale::Language newLanguage = loc.language();
- QLocale::Country newCountry = loc.country();
- metaEnumProvider()->indexToLocale(m_enumPropertyManager->value(m_propertyToLanguage.value(prop)), value, &newLanguage, &newCountry);
- QLocale newLoc(newLanguage, newCountry);
+ QLocale::Territory newTerritory = loc.territory();
+ metaEnumProvider()->indexToLocale(m_enumPropertyManager->value(m_propertyToLanguage.value(prop)), value, &newLanguage, &newTerritory);
+ QLocale newLoc(newLanguage, newTerritory);
q_ptr->setValue(prop, newLoc);
}
}
void QtLocalePropertyManagerPrivate::slotPropertyDestroyed(QtProperty *property)
{
- if (QtProperty *subProp = m_languageToProperty.value(property, 0)) {
- m_propertyToLanguage[subProp] = 0;
+ if (QtProperty *subProp = m_languageToProperty.value(property, nullptr)) {
+ m_propertyToLanguage[subProp] = nullptr;
m_languageToProperty.remove(property);
- } else if (QtProperty *subProp = m_countryToProperty.value(property, 0)) {
- m_propertyToCountry[subProp] = 0;
- m_countryToProperty.remove(property);
+ } else if (QtProperty *subProp = m_territoryToProperty.value(property, nullptr)) {
+ m_propertyToTerritory[subProp] = nullptr;
+ m_territoryToProperty.remove(property);
}
}
@@ -2286,7 +2258,7 @@ void QtLocalePropertyManagerPrivate::slotPropertyDestroyed(QtProperty *property)
\brief The QtLocalePropertyManager provides and manages QLocale properties.
- A locale property has nested \e language and \e country
+ A locale property has nested \e language and \e territory
subproperties. The top-level property's value can be retrieved
using the value() function, and set using the setValue() slot.
@@ -2321,11 +2293,10 @@ QtLocalePropertyManager::QtLocalePropertyManager(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_enumPropertyManager = new QtEnumPropertyManager(this);
- connect(d_ptr->m_enumPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotEnumChanged(QtProperty*,int)));
-
- connect(d_ptr->m_enumPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
- this, SLOT(slotPropertyDestroyed(QtProperty*)));
+ connect(d_ptr->m_enumPropertyManager, &QtEnumPropertyManager::valueChanged, this,
+ [this](QtProperty *property, int value) { d_ptr->slotEnumChanged(property, value); });
+ connect(d_ptr->m_enumPropertyManager, &QtAbstractPropertyManager::propertyDestroyed, this,
+ [this](QtProperty *property) { d_ptr->slotPropertyDestroyed(property); });
}
/*!
@@ -2338,7 +2309,7 @@ QtLocalePropertyManager::~QtLocalePropertyManager()
/*!
Returns the manager that creates the nested \e language
- and \e country subproperties.
+ and \e territory subproperties.
In order to provide editing widgets for the mentioned subproperties
in a property browser widget, this manager must be associated with
@@ -2369,27 +2340,27 @@ QLocale QtLocalePropertyManager::value(const QtProperty *property) const
*/
QString QtLocalePropertyManager::valueText(const QtProperty *property) const
{
- const QtLocalePropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
const QLocale loc = it.value();
int langIdx = 0;
- int countryIdx = 0;
+ int territoryIdx = 0;
const QtMetaEnumProvider *me = metaEnumProvider();
- me->localeToIndex(loc.language(), loc.country(), &langIdx, &countryIdx);
+ me->localeToIndex(loc.language(), loc.territory(), &langIdx, &territoryIdx);
if (langIdx < 0) {
qWarning("QtLocalePropertyManager::valueText: Unknown language %d", loc.language());
return tr("<Invalid>");
}
const QString languageName = me->languageEnumNames().at(langIdx);
- if (countryIdx < 0) {
- qWarning("QtLocalePropertyManager::valueText: Unknown country %d for %s", loc.country(), qPrintable(languageName));
+ if (territoryIdx < 0) {
+ qWarning("QtLocalePropertyManager::valueText: Unknown territory %d for %s", loc.territory(), qPrintable(languageName));
return languageName;
}
- const QString countryName = me->countryEnumNames(loc.language()).at(countryIdx);
- return tr("%1, %2").arg(languageName, countryName);
+ const QString territoryName = me->territoryEnumNames(loc.language()).at(territoryIdx);
+ return tr("%1, %2").arg(languageName, territoryName);
}
/*!
@@ -2402,7 +2373,7 @@ QString QtLocalePropertyManager::valueText(const QtProperty *property) const
*/
void QtLocalePropertyManager::setValue(QtProperty *property, const QLocale &val)
{
- const QtLocalePropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -2413,14 +2384,14 @@ void QtLocalePropertyManager::setValue(QtProperty *property, const QLocale &val)
it.value() = val;
int langIdx = 0;
- int countryIdx = 0;
- metaEnumProvider()->localeToIndex(val.language(), val.country(), &langIdx, &countryIdx);
+ int territoryIdx = 0;
+ metaEnumProvider()->localeToIndex(val.language(), val.territory(), &langIdx, &territoryIdx);
if (loc.language() != val.language()) {
d_ptr->m_enumPropertyManager->setValue(d_ptr->m_propertyToLanguage.value(property), langIdx);
- d_ptr->m_enumPropertyManager->setEnumNames(d_ptr->m_propertyToCountry.value(property),
- metaEnumProvider()->countryEnumNames(val.language()));
+ d_ptr->m_enumPropertyManager->setEnumNames(d_ptr->m_propertyToTerritory.value(property),
+ metaEnumProvider()->territoryEnumNames(val.language()));
}
- d_ptr->m_enumPropertyManager->setValue(d_ptr->m_propertyToCountry.value(property), countryIdx);
+ d_ptr->m_enumPropertyManager->setValue(d_ptr->m_propertyToTerritory.value(property), territoryIdx);
emit propertyChanged(property);
emit valueChanged(property, val);
@@ -2435,8 +2406,8 @@ void QtLocalePropertyManager::initializeProperty(QtProperty *property)
d_ptr->m_values[property] = val;
int langIdx = 0;
- int countryIdx = 0;
- metaEnumProvider()->localeToIndex(val.language(), val.country(), &langIdx, &countryIdx);
+ int territoryIdx = 0;
+ metaEnumProvider()->localeToIndex(val.language(), val.territory(), &langIdx, &territoryIdx);
QtProperty *languageProp = d_ptr->m_enumPropertyManager->addProperty();
languageProp->setPropertyName(tr("Language"));
@@ -2446,13 +2417,13 @@ void QtLocalePropertyManager::initializeProperty(QtProperty *property)
d_ptr->m_languageToProperty[languageProp] = property;
property->addSubProperty(languageProp);
- QtProperty *countryProp = d_ptr->m_enumPropertyManager->addProperty();
- countryProp->setPropertyName(tr("Country"));
- d_ptr->m_enumPropertyManager->setEnumNames(countryProp, metaEnumProvider()->countryEnumNames(val.language()));
- d_ptr->m_enumPropertyManager->setValue(countryProp, countryIdx);
- d_ptr->m_propertyToCountry[property] = countryProp;
- d_ptr->m_countryToProperty[countryProp] = property;
- property->addSubProperty(countryProp);
+ QtProperty *territoryProp = d_ptr->m_enumPropertyManager->addProperty();
+ territoryProp->setPropertyName(tr("Territory"));
+ d_ptr->m_enumPropertyManager->setEnumNames(territoryProp, metaEnumProvider()->territoryEnumNames(val.language()));
+ d_ptr->m_enumPropertyManager->setValue(territoryProp, territoryIdx);
+ d_ptr->m_propertyToTerritory[property] = territoryProp;
+ d_ptr->m_territoryToProperty[territoryProp] = property;
+ property->addSubProperty(territoryProp);
}
/*!
@@ -2467,12 +2438,12 @@ void QtLocalePropertyManager::uninitializeProperty(QtProperty *property)
}
d_ptr->m_propertyToLanguage.remove(property);
- QtProperty *countryProp = d_ptr->m_propertyToCountry[property];
- if (countryProp) {
- d_ptr->m_countryToProperty.remove(countryProp);
- delete countryProp;
+ QtProperty *territoryProp = d_ptr->m_propertyToTerritory[property];
+ if (territoryProp) {
+ d_ptr->m_territoryToProperty.remove(territoryProp);
+ delete territoryProp;
}
- d_ptr->m_propertyToCountry.remove(property);
+ d_ptr->m_propertyToTerritory.remove(property);
d_ptr->m_values.remove(property);
}
@@ -2488,25 +2459,24 @@ public:
void slotIntChanged(QtProperty *property, int value);
void slotPropertyDestroyed(QtProperty *property);
- typedef QMap<const QtProperty *, QPoint> PropertyValueMap;
- PropertyValueMap m_values;
+ QHash<const QtProperty *, QPoint> m_values;
QtIntPropertyManager *m_intPropertyManager;
- QMap<const QtProperty *, QtProperty *> m_propertyToX;
- QMap<const QtProperty *, QtProperty *> m_propertyToY;
+ QHash<const QtProperty *, QtProperty *> m_propertyToX;
+ QHash<const QtProperty *, QtProperty *> m_propertyToY;
- QMap<const QtProperty *, QtProperty *> m_xToProperty;
- QMap<const QtProperty *, QtProperty *> m_yToProperty;
+ QHash<const QtProperty *, QtProperty *> m_xToProperty;
+ QHash<const QtProperty *, QtProperty *> m_yToProperty;
};
void QtPointPropertyManagerPrivate::slotIntChanged(QtProperty *property, int value)
{
- if (QtProperty *xprop = m_xToProperty.value(property, 0)) {
+ if (QtProperty *xprop = m_xToProperty.value(property, nullptr)) {
QPoint p = m_values[xprop];
p.setX(value);
q_ptr->setValue(xprop, p);
- } else if (QtProperty *yprop = m_yToProperty.value(property, 0)) {
+ } else if (QtProperty *yprop = m_yToProperty.value(property, nullptr)) {
QPoint p = m_values[yprop];
p.setY(value);
q_ptr->setValue(yprop, p);
@@ -2515,11 +2485,11 @@ void QtPointPropertyManagerPrivate::slotIntChanged(QtProperty *property, int val
void QtPointPropertyManagerPrivate::slotPropertyDestroyed(QtProperty *property)
{
- if (QtProperty *pointProp = m_xToProperty.value(property, 0)) {
- m_propertyToX[pointProp] = 0;
+ if (QtProperty *pointProp = m_xToProperty.value(property, nullptr)) {
+ m_propertyToX[pointProp] = nullptr;
m_xToProperty.remove(property);
- } else if (QtProperty *pointProp = m_yToProperty.value(property, 0)) {
- m_propertyToY[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_yToProperty.value(property, nullptr)) {
+ m_propertyToY[pointProp] = nullptr;
m_yToProperty.remove(property);
}
}
@@ -2566,10 +2536,10 @@ QtPointPropertyManager::QtPointPropertyManager(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_intPropertyManager = new QtIntPropertyManager(this);
- connect(d_ptr->m_intPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotIntChanged(QtProperty*,int)));
- connect(d_ptr->m_intPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
- this, SLOT(slotPropertyDestroyed(QtProperty*)));
+ connect(d_ptr->m_intPropertyManager, &QtIntPropertyManager::valueChanged, this,
+ [this](QtProperty *property, int value) { d_ptr->slotIntChanged(property, value); });
+ connect(d_ptr->m_intPropertyManager, &QtAbstractPropertyManager::propertyDestroyed, this,
+ [this](QtProperty *property) { d_ptr->slotPropertyDestroyed(property); });
}
/*!
@@ -2613,12 +2583,11 @@ QPoint QtPointPropertyManager::value(const QtProperty *property) const
*/
QString QtPointPropertyManager::valueText(const QtProperty *property) const
{
- const QtPointPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
const QPoint v = it.value();
- return tr("(%1, %2)").arg(QString::number(v.x()))
- .arg(QString::number(v.y()));
+ return tr("(%1, %2)").arg(v.x()).arg(v.y());
}
/*!
@@ -2631,7 +2600,7 @@ QString QtPointPropertyManager::valueText(const QtProperty *property) const
*/
void QtPointPropertyManager::setValue(QtProperty *property, const QPoint &val)
{
- const QtPointPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -2707,25 +2676,24 @@ public:
void slotDoubleChanged(QtProperty *property, double value);
void slotPropertyDestroyed(QtProperty *property);
- typedef QMap<const QtProperty *, Data> PropertyValueMap;
- PropertyValueMap m_values;
+ QHash<const QtProperty *, Data> m_values;
QtDoublePropertyManager *m_doublePropertyManager;
- QMap<const QtProperty *, QtProperty *> m_propertyToX;
- QMap<const QtProperty *, QtProperty *> m_propertyToY;
+ QHash<const QtProperty *, QtProperty *> m_propertyToX;
+ QHash<const QtProperty *, QtProperty *> m_propertyToY;
- QMap<const QtProperty *, QtProperty *> m_xToProperty;
- QMap<const QtProperty *, QtProperty *> m_yToProperty;
+ QHash<const QtProperty *, QtProperty *> m_xToProperty;
+ QHash<const QtProperty *, QtProperty *> m_yToProperty;
};
void QtPointFPropertyManagerPrivate::slotDoubleChanged(QtProperty *property, double value)
{
- if (QtProperty *prop = m_xToProperty.value(property, 0)) {
+ if (QtProperty *prop = m_xToProperty.value(property, nullptr)) {
QPointF p = m_values[prop].val;
p.setX(value);
q_ptr->setValue(prop, p);
- } else if (QtProperty *prop = m_yToProperty.value(property, 0)) {
+ } else if (QtProperty *prop = m_yToProperty.value(property, nullptr)) {
QPointF p = m_values[prop].val;
p.setY(value);
q_ptr->setValue(prop, p);
@@ -2734,11 +2702,11 @@ void QtPointFPropertyManagerPrivate::slotDoubleChanged(QtProperty *property, dou
void QtPointFPropertyManagerPrivate::slotPropertyDestroyed(QtProperty *property)
{
- if (QtProperty *pointProp = m_xToProperty.value(property, 0)) {
- m_propertyToX[pointProp] = 0;
+ if (QtProperty *pointProp = m_xToProperty.value(property, nullptr)) {
+ m_propertyToX[pointProp] = nullptr;
m_xToProperty.remove(property);
- } else if (QtProperty *pointProp = m_yToProperty.value(property, 0)) {
- m_propertyToY[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_yToProperty.value(property, nullptr)) {
+ m_propertyToY[pointProp] = nullptr;
m_yToProperty.remove(property);
}
}
@@ -2795,10 +2763,10 @@ QtPointFPropertyManager::QtPointFPropertyManager(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_doublePropertyManager = new QtDoublePropertyManager(this);
- connect(d_ptr->m_doublePropertyManager, SIGNAL(valueChanged(QtProperty*,double)),
- this, SLOT(slotDoubleChanged(QtProperty*,double)));
- connect(d_ptr->m_doublePropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
- this, SLOT(slotPropertyDestroyed(QtProperty*)));
+ connect(d_ptr->m_doublePropertyManager, &QtDoublePropertyManager::valueChanged, this,
+ [this](QtProperty *property, double value) { d_ptr->slotDoubleChanged(property, value); });
+ connect(d_ptr->m_doublePropertyManager, &QtAbstractPropertyManager::propertyDestroyed, this,
+ [this](QtProperty *property) { d_ptr->slotPropertyDestroyed(property); });
}
/*!
@@ -2852,13 +2820,13 @@ int QtPointFPropertyManager::decimals(const QtProperty *property) const
*/
QString QtPointFPropertyManager::valueText(const QtProperty *property) const
{
- const QtPointFPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
const QPointF v = it.value().val;
const int dec = it.value().decimals;
- return tr("(%1, %2)").arg(QString::number(v.x(), 'f', dec))
- .arg(QString::number(v.y(), 'f', dec));
+ return tr("(%1, %2)").arg(QString::number(v.x(), 'f', dec),
+ QString::number(v.y(), 'f', dec));
}
/*!
@@ -2871,7 +2839,7 @@ QString QtPointFPropertyManager::valueText(const QtProperty *property) const
*/
void QtPointFPropertyManager::setValue(QtProperty *property, const QPointF &val)
{
- const QtPointFPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -2897,7 +2865,7 @@ void QtPointFPropertyManager::setValue(QtProperty *property, const QPointF &val)
*/
void QtPointFPropertyManager::setDecimals(QtProperty *property, int prec)
{
- const QtPointFPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -2991,25 +2959,24 @@ public:
void setMaximumValue(const QSize &newMaxVal) { setSizeMaximumData(this, newMaxVal); }
};
- typedef QMap<const QtProperty *, Data> PropertyValueMap;
- PropertyValueMap m_values;
+ QHash<const QtProperty *, Data> m_values;
QtIntPropertyManager *m_intPropertyManager;
- QMap<const QtProperty *, QtProperty *> m_propertyToW;
- QMap<const QtProperty *, QtProperty *> m_propertyToH;
+ QHash<const QtProperty *, QtProperty *> m_propertyToW;
+ QHash<const QtProperty *, QtProperty *> m_propertyToH;
- QMap<const QtProperty *, QtProperty *> m_wToProperty;
- QMap<const QtProperty *, QtProperty *> m_hToProperty;
+ QHash<const QtProperty *, QtProperty *> m_wToProperty;
+ QHash<const QtProperty *, QtProperty *> m_hToProperty;
};
void QtSizePropertyManagerPrivate::slotIntChanged(QtProperty *property, int value)
{
- if (QtProperty *prop = m_wToProperty.value(property, 0)) {
+ if (QtProperty *prop = m_wToProperty.value(property, nullptr)) {
QSize s = m_values[prop].val;
s.setWidth(value);
q_ptr->setValue(prop, s);
- } else if (QtProperty *prop = m_hToProperty.value(property, 0)) {
+ } else if (QtProperty *prop = m_hToProperty.value(property, nullptr)) {
QSize s = m_values[prop].val;
s.setHeight(value);
q_ptr->setValue(prop, s);
@@ -3018,11 +2985,11 @@ void QtSizePropertyManagerPrivate::slotIntChanged(QtProperty *property, int valu
void QtSizePropertyManagerPrivate::slotPropertyDestroyed(QtProperty *property)
{
- if (QtProperty *pointProp = m_wToProperty.value(property, 0)) {
- m_propertyToW[pointProp] = 0;
+ if (QtProperty *pointProp = m_wToProperty.value(property, nullptr)) {
+ m_propertyToW[pointProp] = nullptr;
m_wToProperty.remove(property);
- } else if (QtProperty *pointProp = m_hToProperty.value(property, 0)) {
- m_propertyToH[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_hToProperty.value(property, nullptr)) {
+ m_propertyToH[pointProp] = nullptr;
m_hToProperty.remove(property);
}
}
@@ -3105,10 +3072,10 @@ QtSizePropertyManager::QtSizePropertyManager(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_intPropertyManager = new QtIntPropertyManager(this);
- connect(d_ptr->m_intPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotIntChanged(QtProperty*,int)));
- connect(d_ptr->m_intPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
- this, SLOT(slotPropertyDestroyed(QtProperty*)));
+ connect(d_ptr->m_intPropertyManager, &QtIntPropertyManager::valueChanged, this,
+ [this](QtProperty *property, int value) { d_ptr->slotIntChanged(property, value); });
+ connect(d_ptr->m_intPropertyManager, &QtAbstractPropertyManager::propertyDestroyed, this,
+ [this](QtProperty *property) { d_ptr->slotPropertyDestroyed(property); });
}
/*!
@@ -3172,12 +3139,11 @@ QSize QtSizePropertyManager::maximum(const QtProperty *property) const
*/
QString QtSizePropertyManager::valueText(const QtProperty *property) const
{
- const QtSizePropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
const QSize v = it.value().val;
- return tr("%1 x %2").arg(QString::number(v.width()))
- .arg(QString::number(v.height()));
+ return tr("%1 x %2").arg(v.width()).arg(v.height());
}
/*!
@@ -3336,25 +3302,24 @@ public:
void setMaximumValue(const QSizeF &newMaxVal) { setSizeMaximumData(this, newMaxVal); }
};
- typedef QMap<const QtProperty *, Data> PropertyValueMap;
- PropertyValueMap m_values;
+ QHash<const QtProperty *, Data> m_values;
QtDoublePropertyManager *m_doublePropertyManager;
- QMap<const QtProperty *, QtProperty *> m_propertyToW;
- QMap<const QtProperty *, QtProperty *> m_propertyToH;
+ QHash<const QtProperty *, QtProperty *> m_propertyToW;
+ QHash<const QtProperty *, QtProperty *> m_propertyToH;
- QMap<const QtProperty *, QtProperty *> m_wToProperty;
- QMap<const QtProperty *, QtProperty *> m_hToProperty;
+ QHash<const QtProperty *, QtProperty *> m_wToProperty;
+ QHash<const QtProperty *, QtProperty *> m_hToProperty;
};
void QtSizeFPropertyManagerPrivate::slotDoubleChanged(QtProperty *property, double value)
{
- if (QtProperty *prop = m_wToProperty.value(property, 0)) {
+ if (QtProperty *prop = m_wToProperty.value(property, nullptr)) {
QSizeF s = m_values[prop].val;
s.setWidth(value);
q_ptr->setValue(prop, s);
- } else if (QtProperty *prop = m_hToProperty.value(property, 0)) {
+ } else if (QtProperty *prop = m_hToProperty.value(property, nullptr)) {
QSizeF s = m_values[prop].val;
s.setHeight(value);
q_ptr->setValue(prop, s);
@@ -3363,11 +3328,11 @@ void QtSizeFPropertyManagerPrivate::slotDoubleChanged(QtProperty *property, doub
void QtSizeFPropertyManagerPrivate::slotPropertyDestroyed(QtProperty *property)
{
- if (QtProperty *pointProp = m_wToProperty.value(property, 0)) {
- m_propertyToW[pointProp] = 0;
+ if (QtProperty *pointProp = m_wToProperty.value(property, nullptr)) {
+ m_propertyToW[pointProp] = nullptr;
m_wToProperty.remove(property);
- } else if (QtProperty *pointProp = m_hToProperty.value(property, 0)) {
- m_propertyToH[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_hToProperty.value(property, nullptr)) {
+ m_propertyToH[pointProp] = nullptr;
m_hToProperty.remove(property);
}
}
@@ -3458,10 +3423,10 @@ QtSizeFPropertyManager::QtSizeFPropertyManager(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_doublePropertyManager = new QtDoublePropertyManager(this);
- connect(d_ptr->m_doublePropertyManager, SIGNAL(valueChanged(QtProperty*,double)),
- this, SLOT(slotDoubleChanged(QtProperty*,double)));
- connect(d_ptr->m_doublePropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
- this, SLOT(slotPropertyDestroyed(QtProperty*)));
+ connect(d_ptr->m_doublePropertyManager, &QtDoublePropertyManager::valueChanged, this,
+ [this](QtProperty *property, double value) { d_ptr->slotDoubleChanged(property, value); });
+ connect(d_ptr->m_doublePropertyManager, &QtAbstractPropertyManager::propertyDestroyed, this,
+ [this](QtProperty *property) { d_ptr->slotPropertyDestroyed(property); });
}
/*!
@@ -3535,13 +3500,13 @@ QSizeF QtSizeFPropertyManager::maximum(const QtProperty *property) const
*/
QString QtSizeFPropertyManager::valueText(const QtProperty *property) const
{
- const QtSizeFPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
const QSizeF v = it.value().val;
const int dec = it.value().decimals;
- return tr("%1 x %2").arg(QString::number(v.width(), 'f', dec))
- .arg(QString::number(v.height(), 'f', dec));
+ return tr("%1 x %2").arg(QString::number(v.width(), 'f', dec),
+ QString::number(v.height(), 'f', dec));
}
/*!
@@ -3574,7 +3539,7 @@ void QtSizeFPropertyManager::setValue(QtProperty *property, const QSizeF &val)
*/
void QtSizeFPropertyManager::setDecimals(QtProperty *property, int prec)
{
- const QtSizeFPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -3728,25 +3693,24 @@ public:
QRect constraint;
};
- typedef QMap<const QtProperty *, Data> PropertyValueMap;
- PropertyValueMap m_values;
+ QHash<const QtProperty *, Data> m_values;
QtIntPropertyManager *m_intPropertyManager;
- QMap<const QtProperty *, QtProperty *> m_propertyToX;
- QMap<const QtProperty *, QtProperty *> m_propertyToY;
- QMap<const QtProperty *, QtProperty *> m_propertyToW;
- QMap<const QtProperty *, QtProperty *> m_propertyToH;
+ QHash<const QtProperty *, QtProperty *> m_propertyToX;
+ QHash<const QtProperty *, QtProperty *> m_propertyToY;
+ QHash<const QtProperty *, QtProperty *> m_propertyToW;
+ QHash<const QtProperty *, QtProperty *> m_propertyToH;
- QMap<const QtProperty *, QtProperty *> m_xToProperty;
- QMap<const QtProperty *, QtProperty *> m_yToProperty;
- QMap<const QtProperty *, QtProperty *> m_wToProperty;
- QMap<const QtProperty *, QtProperty *> m_hToProperty;
+ QHash<const QtProperty *, QtProperty *> m_xToProperty;
+ QHash<const QtProperty *, QtProperty *> m_yToProperty;
+ QHash<const QtProperty *, QtProperty *> m_wToProperty;
+ QHash<const QtProperty *, QtProperty *> m_hToProperty;
};
void QtRectPropertyManagerPrivate::slotIntChanged(QtProperty *property, int value)
{
- if (QtProperty *prop = m_xToProperty.value(property, 0)) {
+ if (QtProperty *prop = m_xToProperty.value(property, nullptr)) {
QRect r = m_values[prop].val;
r.moveLeft(value);
q_ptr->setValue(prop, r);
@@ -3754,7 +3718,7 @@ void QtRectPropertyManagerPrivate::slotIntChanged(QtProperty *property, int valu
QRect r = m_values[prop].val;
r.moveTop(value);
q_ptr->setValue(prop, r);
- } else if (QtProperty *prop = m_wToProperty.value(property, 0)) {
+ } else if (QtProperty *prop = m_wToProperty.value(property, nullptr)) {
Data data = m_values[prop];
QRect r = data.val;
r.setWidth(value);
@@ -3762,7 +3726,7 @@ void QtRectPropertyManagerPrivate::slotIntChanged(QtProperty *property, int valu
r.moveLeft(data.constraint.left() + data.constraint.width() - r.width());
}
q_ptr->setValue(prop, r);
- } else if (QtProperty *prop = m_hToProperty.value(property, 0)) {
+ } else if (QtProperty *prop = m_hToProperty.value(property, nullptr)) {
Data data = m_values[prop];
QRect r = data.val;
r.setHeight(value);
@@ -3775,17 +3739,17 @@ void QtRectPropertyManagerPrivate::slotIntChanged(QtProperty *property, int valu
void QtRectPropertyManagerPrivate::slotPropertyDestroyed(QtProperty *property)
{
- if (QtProperty *pointProp = m_xToProperty.value(property, 0)) {
- m_propertyToX[pointProp] = 0;
+ if (QtProperty *pointProp = m_xToProperty.value(property, nullptr)) {
+ m_propertyToX[pointProp] = nullptr;
m_xToProperty.remove(property);
- } else if (QtProperty *pointProp = m_yToProperty.value(property, 0)) {
- m_propertyToY[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_yToProperty.value(property, nullptr)) {
+ m_propertyToY[pointProp] = nullptr;
m_yToProperty.remove(property);
- } else if (QtProperty *pointProp = m_wToProperty.value(property, 0)) {
- m_propertyToW[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_wToProperty.value(property, nullptr)) {
+ m_propertyToW[pointProp] = nullptr;
m_wToProperty.remove(property);
- } else if (QtProperty *pointProp = m_hToProperty.value(property, 0)) {
- m_propertyToH[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_hToProperty.value(property, nullptr)) {
+ m_propertyToH[pointProp] = nullptr;
m_hToProperty.remove(property);
}
}
@@ -3871,10 +3835,10 @@ QtRectPropertyManager::QtRectPropertyManager(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_intPropertyManager = new QtIntPropertyManager(this);
- connect(d_ptr->m_intPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotIntChanged(QtProperty*,int)));
- connect(d_ptr->m_intPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
- this, SLOT(slotPropertyDestroyed(QtProperty*)));
+ connect(d_ptr->m_intPropertyManager, &QtIntPropertyManager::valueChanged, this,
+ [this](QtProperty *property, int value) { d_ptr->slotIntChanged(property, value); });
+ connect(d_ptr->m_intPropertyManager, &QtAbstractPropertyManager::propertyDestroyed, this,
+ [this](QtProperty *property) { d_ptr->slotPropertyDestroyed(property); });
}
/*!
@@ -3928,14 +3892,12 @@ QRect QtRectPropertyManager::constraint(const QtProperty *property) const
*/
QString QtRectPropertyManager::valueText(const QtProperty *property) const
{
- const QtRectPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
const QRect v = it.value().val;
- return tr("[(%1, %2), %3 x %4]").arg(QString::number(v.x()))
- .arg(QString::number(v.y()))
- .arg(QString::number(v.width()))
- .arg(QString::number(v.height()));
+ return tr("[(%1, %2), %3 x %4]").arg(v.x()) .arg(v.y())
+ .arg(v.width()).arg(v.height());
}
/*!
@@ -3952,7 +3914,7 @@ QString QtRectPropertyManager::valueText(const QtProperty *property) const
*/
void QtRectPropertyManager::setValue(QtProperty *property, const QRect &val)
{
- const QtRectPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -3997,7 +3959,7 @@ void QtRectPropertyManager::setValue(QtProperty *property, const QRect &val)
*/
void QtRectPropertyManager::setConstraint(QtProperty *property, const QRect &constraint)
{
- const QtRectPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -4137,33 +4099,32 @@ public:
int decimals{2};
};
- typedef QMap<const QtProperty *, Data> PropertyValueMap;
- PropertyValueMap m_values;
+ QHash<const QtProperty *, Data> m_values;
QtDoublePropertyManager *m_doublePropertyManager;
- QMap<const QtProperty *, QtProperty *> m_propertyToX;
- QMap<const QtProperty *, QtProperty *> m_propertyToY;
- QMap<const QtProperty *, QtProperty *> m_propertyToW;
- QMap<const QtProperty *, QtProperty *> m_propertyToH;
+ QHash<const QtProperty *, QtProperty *> m_propertyToX;
+ QHash<const QtProperty *, QtProperty *> m_propertyToY;
+ QHash<const QtProperty *, QtProperty *> m_propertyToW;
+ QHash<const QtProperty *, QtProperty *> m_propertyToH;
- QMap<const QtProperty *, QtProperty *> m_xToProperty;
- QMap<const QtProperty *, QtProperty *> m_yToProperty;
- QMap<const QtProperty *, QtProperty *> m_wToProperty;
- QMap<const QtProperty *, QtProperty *> m_hToProperty;
+ QHash<const QtProperty *, QtProperty *> m_xToProperty;
+ QHash<const QtProperty *, QtProperty *> m_yToProperty;
+ QHash<const QtProperty *, QtProperty *> m_wToProperty;
+ QHash<const QtProperty *, QtProperty *> m_hToProperty;
};
void QtRectFPropertyManagerPrivate::slotDoubleChanged(QtProperty *property, double value)
{
- if (QtProperty *prop = m_xToProperty.value(property, 0)) {
+ if (QtProperty *prop = m_xToProperty.value(property, nullptr)) {
QRectF r = m_values[prop].val;
r.moveLeft(value);
q_ptr->setValue(prop, r);
- } else if (QtProperty *prop = m_yToProperty.value(property, 0)) {
+ } else if (QtProperty *prop = m_yToProperty.value(property, nullptr)) {
QRectF r = m_values[prop].val;
r.moveTop(value);
q_ptr->setValue(prop, r);
- } else if (QtProperty *prop = m_wToProperty.value(property, 0)) {
+ } else if (QtProperty *prop = m_wToProperty.value(property, nullptr)) {
Data data = m_values[prop];
QRectF r = data.val;
r.setWidth(value);
@@ -4171,7 +4132,7 @@ void QtRectFPropertyManagerPrivate::slotDoubleChanged(QtProperty *property, doub
r.moveLeft(data.constraint.left() + data.constraint.width() - r.width());
}
q_ptr->setValue(prop, r);
- } else if (QtProperty *prop = m_hToProperty.value(property, 0)) {
+ } else if (QtProperty *prop = m_hToProperty.value(property, nullptr)) {
Data data = m_values[prop];
QRectF r = data.val;
r.setHeight(value);
@@ -4184,17 +4145,17 @@ void QtRectFPropertyManagerPrivate::slotDoubleChanged(QtProperty *property, doub
void QtRectFPropertyManagerPrivate::slotPropertyDestroyed(QtProperty *property)
{
- if (QtProperty *pointProp = m_xToProperty.value(property, 0)) {
- m_propertyToX[pointProp] = 0;
+ if (QtProperty *pointProp = m_xToProperty.value(property, nullptr)) {
+ m_propertyToX[pointProp] = nullptr;
m_xToProperty.remove(property);
- } else if (QtProperty *pointProp = m_yToProperty.value(property, 0)) {
- m_propertyToY[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_yToProperty.value(property, nullptr)) {
+ m_propertyToY[pointProp] = nullptr;
m_yToProperty.remove(property);
- } else if (QtProperty *pointProp = m_wToProperty.value(property, 0)) {
- m_propertyToW[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_wToProperty.value(property, nullptr)) {
+ m_propertyToW[pointProp] = nullptr;
m_wToProperty.remove(property);
- } else if (QtProperty *pointProp = m_hToProperty.value(property, 0)) {
- m_propertyToH[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_hToProperty.value(property, nullptr)) {
+ m_propertyToH[pointProp] = nullptr;
m_hToProperty.remove(property);
}
}
@@ -4290,10 +4251,10 @@ QtRectFPropertyManager::QtRectFPropertyManager(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_doublePropertyManager = new QtDoublePropertyManager(this);
- connect(d_ptr->m_doublePropertyManager, SIGNAL(valueChanged(QtProperty*,double)),
- this, SLOT(slotDoubleChanged(QtProperty*,double)));
- connect(d_ptr->m_doublePropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
- this, SLOT(slotPropertyDestroyed(QtProperty*)));
+ connect(d_ptr->m_doublePropertyManager, &QtDoublePropertyManager::valueChanged, this,
+ [this](QtProperty *property, double value) { d_ptr->slotDoubleChanged(property, value); });
+ connect(d_ptr->m_doublePropertyManager, &QtAbstractPropertyManager::propertyDestroyed, this,
+ [this](QtProperty *property) { d_ptr->slotPropertyDestroyed(property); });
}
/*!
@@ -4357,15 +4318,15 @@ QRectF QtRectFPropertyManager::constraint(const QtProperty *property) const
*/
QString QtRectFPropertyManager::valueText(const QtProperty *property) const
{
- const QtRectFPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
const QRectF v = it.value().val;
const int dec = it.value().decimals;
- return QString(tr("[(%1, %2), %3 x %4]").arg(QString::number(v.x(), 'f', dec))
- .arg(QString::number(v.y(), 'f', dec))
- .arg(QString::number(v.width(), 'f', dec))
- .arg(QString::number(v.height(), 'f', dec)));
+ return QString(tr("[(%1, %2), %3 x %4]").arg(QString::number(v.x(), 'f', dec),
+ QString::number(v.y(), 'f', dec),
+ QString::number(v.width(), 'f', dec),
+ QString::number(v.height(), 'f', dec)));
}
/*!
@@ -4382,7 +4343,7 @@ QString QtRectFPropertyManager::valueText(const QtProperty *property) const
*/
void QtRectFPropertyManager::setValue(QtProperty *property, const QRectF &val)
{
- const QtRectFPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -4427,7 +4388,7 @@ void QtRectFPropertyManager::setValue(QtProperty *property, const QRectF &val)
*/
void QtRectFPropertyManager::setConstraint(QtProperty *property, const QRectF &constraint)
{
- const QtRectFPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -4485,7 +4446,7 @@ void QtRectFPropertyManager::setConstraint(QtProperty *property, const QRectF &c
*/
void QtRectFPropertyManager::setDecimals(QtProperty *property, int prec)
{
- const QtRectFPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -4603,8 +4564,7 @@ public:
QMap<int, QIcon> enumIcons;
};
- typedef QMap<const QtProperty *, Data> PropertyValueMap;
- PropertyValueMap m_values;
+ QHash<const QtProperty *, Data> m_values;
};
/*!
@@ -4719,16 +4679,16 @@ QMap<int, QIcon> QtEnumPropertyManager::enumIcons(const QtProperty *property) co
*/
QString QtEnumPropertyManager::valueText(const QtProperty *property) const
{
- const QtEnumPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
const QtEnumPropertyManagerPrivate::Data &data = it.value();
const int v = data.val;
- if (v >= 0 && v < data.enumNames.count())
+ if (v >= 0 && v < data.enumNames.size())
return data.enumNames.at(v);
- return QString();
+ return {};
}
/*!
@@ -4736,9 +4696,9 @@ QString QtEnumPropertyManager::valueText(const QtProperty *property) const
*/
QIcon QtEnumPropertyManager::valueIcon(const QtProperty *property) const
{
- const QtEnumPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QIcon();
+ return {};
const QtEnumPropertyManagerPrivate::Data &data = it.value();
@@ -4758,16 +4718,16 @@ QIcon QtEnumPropertyManager::valueIcon(const QtProperty *property) const
*/
void QtEnumPropertyManager::setValue(QtProperty *property, int val)
{
- const QtEnumPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
QtEnumPropertyManagerPrivate::Data data = it.value();
- if (val >= data.enumNames.count())
+ if (val >= data.enumNames.size())
return;
- if (val < 0 && data.enumNames.count() > 0)
+ if (val < 0 && data.enumNames.size() > 0)
return;
if (val < 0)
@@ -4796,7 +4756,7 @@ void QtEnumPropertyManager::setValue(QtProperty *property, int val)
*/
void QtEnumPropertyManager::setEnumNames(QtProperty *property, const QStringList &enumNames)
{
- const QtEnumPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -4809,7 +4769,7 @@ void QtEnumPropertyManager::setEnumNames(QtProperty *property, const QStringList
data.val = -1;
- if (enumNames.count() > 0)
+ if (enumNames.size() > 0)
data.val = 0;
it.value() = data;
@@ -4830,7 +4790,7 @@ void QtEnumPropertyManager::setEnumNames(QtProperty *property, const QStringList
*/
void QtEnumPropertyManager::setEnumIcons(QtProperty *property, const QMap<int, QIcon> &enumIcons)
{
- const QtEnumPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -4874,20 +4834,19 @@ public:
QStringList flagNames;
};
- typedef QMap<const QtProperty *, Data> PropertyValueMap;
- PropertyValueMap m_values;
+ QHash<const QtProperty *, Data> m_values;
QtBoolPropertyManager *m_boolPropertyManager;
- QMap<const QtProperty *, QList<QtProperty *> > m_propertyToFlags;
+ QHash<const QtProperty *, QList<QtProperty *>> m_propertyToFlags;
- QMap<const QtProperty *, QtProperty *> m_flagToProperty;
+ QHash<const QtProperty *, QtProperty *> m_flagToProperty;
};
void QtFlagPropertyManagerPrivate::slotBoolChanged(QtProperty *property, bool value)
{
- QtProperty *prop = m_flagToProperty.value(property, 0);
- if (prop == 0)
+ QtProperty *prop = m_flagToProperty.value(property, nullptr);
+ if (prop == nullptr)
return;
const auto pfit = m_propertyToFlags.constFind(prop);
@@ -4911,8 +4870,8 @@ void QtFlagPropertyManagerPrivate::slotBoolChanged(QtProperty *property, bool va
void QtFlagPropertyManagerPrivate::slotPropertyDestroyed(QtProperty *property)
{
- QtProperty *flagProperty = m_flagToProperty.value(property, 0);
- if (flagProperty == 0)
+ QtProperty *flagProperty = m_flagToProperty.value(property, nullptr);
+ if (flagProperty == nullptr)
return;
m_propertyToFlags[flagProperty].replace(m_propertyToFlags[flagProperty].indexOf(property), 0);
@@ -4982,10 +4941,10 @@ QtFlagPropertyManager::QtFlagPropertyManager(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_boolPropertyManager = new QtBoolPropertyManager(this);
- connect(d_ptr->m_boolPropertyManager, SIGNAL(valueChanged(QtProperty*,bool)),
- this, SLOT(slotBoolChanged(QtProperty*,bool)));
- connect(d_ptr->m_boolPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
- this, SLOT(slotPropertyDestroyed(QtProperty*)));
+ connect(d_ptr->m_boolPropertyManager, &QtBoolPropertyManager::valueChanged, this,
+ [this](QtProperty *property, bool value) { d_ptr->slotBoolChanged(property, value); });
+ connect(d_ptr->m_boolPropertyManager, &QtAbstractPropertyManager::propertyDestroyed, this,
+ [this](QtProperty *property) { d_ptr->slotPropertyDestroyed(property); });
}
/*!
@@ -5039,21 +4998,20 @@ QStringList QtFlagPropertyManager::flagNames(const QtProperty *property) const
*/
QString QtFlagPropertyManager::valueText(const QtProperty *property) const
{
- const QtFlagPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
const QtFlagPropertyManagerPrivate::Data &data = it.value();
QString str;
int level = 0;
const QChar bar = QLatin1Char('|');
- const QStringList::const_iterator fncend = data.flagNames.constEnd();
- for (QStringList::const_iterator it = data.flagNames.constBegin(); it != fncend; ++it) {
+ for (const auto &name : data.flagNames) {
if (data.val & (1 << level)) {
if (!str.isEmpty())
str += bar;
- str += *it;
+ str += name;
}
level++;
@@ -5076,7 +5034,7 @@ QString QtFlagPropertyManager::valueText(const QtProperty *property) const
*/
void QtFlagPropertyManager::setValue(QtProperty *property, int val)
{
- const QtFlagPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -5085,7 +5043,7 @@ void QtFlagPropertyManager::setValue(QtProperty *property, int val)
if (data.val == val)
return;
- if (val > (1 << data.flagNames.count()) - 1)
+ if (val > (1 << data.flagNames.size()) - 1)
return;
if (val < 0)
@@ -5118,7 +5076,7 @@ void QtFlagPropertyManager::setValue(QtProperty *property, int val)
*/
void QtFlagPropertyManager::setFlagNames(QtProperty *property, const QStringList &flagNames)
{
- const QtFlagPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -5134,7 +5092,7 @@ void QtFlagPropertyManager::setFlagNames(QtProperty *property, const QStringList
const auto pfit = d_ptr->m_propertyToFlags.find(property);
if (pfit != d_ptr->m_propertyToFlags.end()) {
- for (QtProperty *prop : qAsConst(pfit.value())) {
+ for (QtProperty *prop : std::as_const(pfit.value())) {
if (prop) {
delete prop;
d_ptr->m_flagToProperty.remove(prop);
@@ -5174,7 +5132,7 @@ void QtFlagPropertyManager::uninitializeProperty(QtProperty *property)
{
const auto it = d_ptr->m_propertyToFlags.find(property);
if (it != d_ptr->m_propertyToFlags.end()) {
- for (QtProperty *prop : qAsConst(it.value())) {
+ for (QtProperty *prop : std::as_const(it.value())) {
if (prop) {
d_ptr->m_flagToProperty.remove(prop);
delete prop;
@@ -5200,21 +5158,20 @@ public:
void slotEnumChanged(QtProperty *property, int value);
void slotPropertyDestroyed(QtProperty *property);
- typedef QMap<const QtProperty *, QSizePolicy> PropertyValueMap;
- PropertyValueMap m_values;
+ QHash<const QtProperty *, QSizePolicy> m_values;
QtIntPropertyManager *m_intPropertyManager;
QtEnumPropertyManager *m_enumPropertyManager;
- QMap<const QtProperty *, QtProperty *> m_propertyToHPolicy;
- QMap<const QtProperty *, QtProperty *> m_propertyToVPolicy;
- QMap<const QtProperty *, QtProperty *> m_propertyToHStretch;
- QMap<const QtProperty *, QtProperty *> m_propertyToVStretch;
+ QHash<const QtProperty *, QtProperty *> m_propertyToHPolicy;
+ QHash<const QtProperty *, QtProperty *> m_propertyToVPolicy;
+ QHash<const QtProperty *, QtProperty *> m_propertyToHStretch;
+ QHash<const QtProperty *, QtProperty *> m_propertyToVStretch;
- QMap<const QtProperty *, QtProperty *> m_hPolicyToProperty;
- QMap<const QtProperty *, QtProperty *> m_vPolicyToProperty;
- QMap<const QtProperty *, QtProperty *> m_hStretchToProperty;
- QMap<const QtProperty *, QtProperty *> m_vStretchToProperty;
+ QHash<const QtProperty *, QtProperty *> m_hPolicyToProperty;
+ QHash<const QtProperty *, QtProperty *> m_vPolicyToProperty;
+ QHash<const QtProperty *, QtProperty *> m_hStretchToProperty;
+ QHash<const QtProperty *, QtProperty *> m_vStretchToProperty;
};
QtSizePolicyPropertyManagerPrivate::QtSizePolicyPropertyManagerPrivate()
@@ -5223,11 +5180,11 @@ QtSizePolicyPropertyManagerPrivate::QtSizePolicyPropertyManagerPrivate()
void QtSizePolicyPropertyManagerPrivate::slotIntChanged(QtProperty *property, int value)
{
- if (QtProperty *prop = m_hStretchToProperty.value(property, 0)) {
+ if (QtProperty *prop = m_hStretchToProperty.value(property, nullptr)) {
QSizePolicy sp = m_values[prop];
sp.setHorizontalStretch(value);
q_ptr->setValue(prop, sp);
- } else if (QtProperty *prop = m_vStretchToProperty.value(property, 0)) {
+ } else if (QtProperty *prop = m_vStretchToProperty.value(property, nullptr)) {
QSizePolicy sp = m_values[prop];
sp.setVerticalStretch(value);
q_ptr->setValue(prop, sp);
@@ -5236,11 +5193,11 @@ void QtSizePolicyPropertyManagerPrivate::slotIntChanged(QtProperty *property, in
void QtSizePolicyPropertyManagerPrivate::slotEnumChanged(QtProperty *property, int value)
{
- if (QtProperty *prop = m_hPolicyToProperty.value(property, 0)) {
+ if (QtProperty *prop = m_hPolicyToProperty.value(property, nullptr)) {
QSizePolicy sp = m_values[prop];
sp.setHorizontalPolicy(metaEnumProvider()->indexToSizePolicy(value));
q_ptr->setValue(prop, sp);
- } else if (QtProperty *prop = m_vPolicyToProperty.value(property, 0)) {
+ } else if (QtProperty *prop = m_vPolicyToProperty.value(property, nullptr)) {
QSizePolicy sp = m_values[prop];
sp.setVerticalPolicy(metaEnumProvider()->indexToSizePolicy(value));
q_ptr->setValue(prop, sp);
@@ -5249,17 +5206,17 @@ void QtSizePolicyPropertyManagerPrivate::slotEnumChanged(QtProperty *property, i
void QtSizePolicyPropertyManagerPrivate::slotPropertyDestroyed(QtProperty *property)
{
- if (QtProperty *pointProp = m_hStretchToProperty.value(property, 0)) {
- m_propertyToHStretch[pointProp] = 0;
+ if (QtProperty *pointProp = m_hStretchToProperty.value(property, nullptr)) {
+ m_propertyToHStretch[pointProp] = nullptr;
m_hStretchToProperty.remove(property);
- } else if (QtProperty *pointProp = m_vStretchToProperty.value(property, 0)) {
- m_propertyToVStretch[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_vStretchToProperty.value(property, nullptr)) {
+ m_propertyToVStretch[pointProp] = nullptr;
m_vStretchToProperty.remove(property);
- } else if (QtProperty *pointProp = m_hPolicyToProperty.value(property, 0)) {
- m_propertyToHPolicy[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_hPolicyToProperty.value(property, nullptr)) {
+ m_propertyToHPolicy[pointProp] = nullptr;
m_hPolicyToProperty.remove(property);
- } else if (QtProperty *pointProp = m_vPolicyToProperty.value(property, 0)) {
- m_propertyToVPolicy[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_vPolicyToProperty.value(property, nullptr)) {
+ m_propertyToVPolicy[pointProp] = nullptr;
m_vPolicyToProperty.remove(property);
}
}
@@ -5309,16 +5266,16 @@ QtSizePolicyPropertyManager::QtSizePolicyPropertyManager(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_intPropertyManager = new QtIntPropertyManager(this);
- connect(d_ptr->m_intPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotIntChanged(QtProperty*,int)));
- d_ptr->m_enumPropertyManager = new QtEnumPropertyManager(this);
- connect(d_ptr->m_enumPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotEnumChanged(QtProperty*,int)));
+ connect(d_ptr->m_intPropertyManager, &QtIntPropertyManager::valueChanged, this,
+ [this](QtProperty *property, int value) { d_ptr->slotIntChanged(property, value); });
+ connect(d_ptr->m_intPropertyManager, &QtAbstractPropertyManager::propertyDestroyed, this,
+ [this](QtProperty *property) { d_ptr->slotPropertyDestroyed(property); });
- connect(d_ptr->m_intPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
- this, SLOT(slotPropertyDestroyed(QtProperty*)));
- connect(d_ptr->m_enumPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
- this, SLOT(slotPropertyDestroyed(QtProperty*)));
+ d_ptr->m_enumPropertyManager = new QtEnumPropertyManager(this);
+ connect(d_ptr->m_enumPropertyManager, &QtEnumPropertyManager::valueChanged, this,
+ [this](QtProperty *property, int value) { d_ptr->slotEnumChanged(property, value); });
+ connect(d_ptr->m_enumPropertyManager, &QtEnumPropertyManager::propertyDestroyed, this,
+ [this](QtProperty *property) { d_ptr->slotPropertyDestroyed(property); });
}
/*!
@@ -5377,9 +5334,9 @@ QSizePolicy QtSizePolicyPropertyManager::value(const QtProperty *property) const
*/
QString QtSizePolicyPropertyManager::valueText(const QtProperty *property) const
{
- const QtSizePolicyPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
const QSizePolicy sp = it.value();
const QtMetaEnumProvider *mep = metaEnumProvider();
@@ -5402,7 +5359,7 @@ QString QtSizePolicyPropertyManager::valueText(const QtProperty *property) const
*/
void QtSizePolicyPropertyManager::setValue(QtProperty *property, const QSizePolicy &val)
{
- const QtSizePolicyPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -5512,8 +5469,6 @@ void QtSizePolicyPropertyManager::uninitializeProperty(QtProperty *property)
// enumeration manager to re-set its strings and index values
// for each property.
-Q_GLOBAL_STATIC(QFontDatabase, fontDatabase)
-
class QtFontPropertyManagerPrivate
{
QtFontPropertyManager *q_ptr;
@@ -5531,28 +5486,29 @@ public:
QStringList m_familyNames;
- typedef QMap<const QtProperty *, QFont> PropertyValueMap;
- PropertyValueMap m_values;
+ QHash<const QtProperty *, QFont> m_values;
QtIntPropertyManager *m_intPropertyManager;
QtEnumPropertyManager *m_enumPropertyManager;
QtBoolPropertyManager *m_boolPropertyManager;
- QMap<const QtProperty *, QtProperty *> m_propertyToFamily;
- QMap<const QtProperty *, QtProperty *> m_propertyToPointSize;
- QMap<const QtProperty *, QtProperty *> m_propertyToBold;
- QMap<const QtProperty *, QtProperty *> m_propertyToItalic;
- QMap<const QtProperty *, QtProperty *> m_propertyToUnderline;
- QMap<const QtProperty *, QtProperty *> m_propertyToStrikeOut;
- QMap<const QtProperty *, QtProperty *> m_propertyToKerning;
-
- QMap<const QtProperty *, QtProperty *> m_familyToProperty;
- QMap<const QtProperty *, QtProperty *> m_pointSizeToProperty;
- QMap<const QtProperty *, QtProperty *> m_boldToProperty;
- QMap<const QtProperty *, QtProperty *> m_italicToProperty;
- QMap<const QtProperty *, QtProperty *> m_underlineToProperty;
- QMap<const QtProperty *, QtProperty *> m_strikeOutToProperty;
- QMap<const QtProperty *, QtProperty *> m_kerningToProperty;
+ QHash<const QtProperty *, QtProperty *> m_propertyToFamily;
+ QHash<const QtProperty *, QtProperty *> m_propertyToPointSize;
+ QHash<const QtProperty *, QtProperty *> m_propertyToBold;
+ QHash<const QtProperty *, QtProperty *> m_propertyToItalic;
+ QHash<const QtProperty *, QtProperty *> m_propertyToUnderline;
+ QHash<const QtProperty *, QtProperty *> m_propertyToStrikeOut;
+ QHash<const QtProperty *, QtProperty *> m_propertyToKerning;
+ QHash<const QtProperty *, QtProperty *> m_propertyToWeight;
+
+ QHash<const QtProperty *, QtProperty *> m_familyToProperty;
+ QHash<const QtProperty *, QtProperty *> m_pointSizeToProperty;
+ QHash<const QtProperty *, QtProperty *> m_boldToProperty;
+ QHash<const QtProperty *, QtProperty *> m_italicToProperty;
+ QHash<const QtProperty *, QtProperty *> m_underlineToProperty;
+ QHash<const QtProperty *, QtProperty *> m_strikeOutToProperty;
+ QHash<const QtProperty *, QtProperty *> m_kerningToProperty;
+ QHash<const QtProperty *, QtProperty *> m_weightToProperty;
bool m_settingValue;
QTimer *m_fontDatabaseChangeTimer;
@@ -5568,7 +5524,7 @@ void QtFontPropertyManagerPrivate::slotIntChanged(QtProperty *property, int valu
{
if (m_settingValue)
return;
- if (QtProperty *prop = m_pointSizeToProperty.value(property, 0)) {
+ if (QtProperty *prop = m_pointSizeToProperty.value(property, nullptr)) {
QFont f = m_values[prop];
f.setPointSize(value);
q_ptr->setValue(prop, f);
@@ -5579,10 +5535,14 @@ void QtFontPropertyManagerPrivate::slotEnumChanged(QtProperty *property, int val
{
if (m_settingValue)
return;
- if (QtProperty *prop = m_familyToProperty.value(property, 0)) {
+ if (QtProperty *prop = m_familyToProperty.value(property, nullptr)) {
QFont f = m_values[prop];
f.setFamily(m_familyNames.at(value));
q_ptr->setValue(prop, f);
+ } else if (auto *prop = m_weightToProperty.value(property, nullptr)) {
+ QFont f = m_values[prop];
+ f.setWeight(weightFromIndex(value));
+ q_ptr->setValue(prop, f);
}
}
@@ -5590,23 +5550,23 @@ void QtFontPropertyManagerPrivate::slotBoolChanged(QtProperty *property, bool va
{
if (m_settingValue)
return;
- if (QtProperty *prop = m_boldToProperty.value(property, 0)) {
+ if (QtProperty *prop = m_boldToProperty.value(property, nullptr)) {
QFont f = m_values[prop];
f.setBold(value);
q_ptr->setValue(prop, f);
- } else if (QtProperty *prop = m_italicToProperty.value(property, 0)) {
+ } else if (QtProperty *prop = m_italicToProperty.value(property, nullptr)) {
QFont f = m_values[prop];
f.setItalic(value);
q_ptr->setValue(prop, f);
- } else if (QtProperty *prop = m_underlineToProperty.value(property, 0)) {
+ } else if (QtProperty *prop = m_underlineToProperty.value(property, nullptr)) {
QFont f = m_values[prop];
f.setUnderline(value);
q_ptr->setValue(prop, f);
- } else if (QtProperty *prop = m_strikeOutToProperty.value(property, 0)) {
+ } else if (QtProperty *prop = m_strikeOutToProperty.value(property, nullptr)) {
QFont f = m_values[prop];
f.setStrikeOut(value);
q_ptr->setValue(prop, f);
- } else if (QtProperty *prop = m_kerningToProperty.value(property, 0)) {
+ } else if (QtProperty *prop = m_kerningToProperty.value(property, nullptr)) {
QFont f = m_values[prop];
f.setKerning(value);
q_ptr->setValue(prop, f);
@@ -5615,37 +5575,41 @@ void QtFontPropertyManagerPrivate::slotBoolChanged(QtProperty *property, bool va
void QtFontPropertyManagerPrivate::slotPropertyDestroyed(QtProperty *property)
{
- if (QtProperty *pointProp = m_pointSizeToProperty.value(property, 0)) {
- m_propertyToPointSize[pointProp] = 0;
+ if (QtProperty *pointProp = m_pointSizeToProperty.value(property, nullptr)) {
+ m_propertyToPointSize[pointProp] = nullptr;
m_pointSizeToProperty.remove(property);
- } else if (QtProperty *pointProp = m_familyToProperty.value(property, 0)) {
- m_propertyToFamily[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_familyToProperty.value(property, nullptr)) {
+ m_propertyToFamily[pointProp] = nullptr;
m_familyToProperty.remove(property);
- } else if (QtProperty *pointProp = m_boldToProperty.value(property, 0)) {
- m_propertyToBold[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_boldToProperty.value(property, nullptr)) {
+ m_propertyToBold[pointProp] = nullptr;
m_boldToProperty.remove(property);
- } else if (QtProperty *pointProp = m_italicToProperty.value(property, 0)) {
- m_propertyToItalic[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_italicToProperty.value(property, nullptr)) {
+ m_propertyToItalic[pointProp] = nullptr;
m_italicToProperty.remove(property);
- } else if (QtProperty *pointProp = m_underlineToProperty.value(property, 0)) {
- m_propertyToUnderline[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_underlineToProperty.value(property, nullptr)) {
+ m_propertyToUnderline[pointProp] = nullptr;
m_underlineToProperty.remove(property);
- } else if (QtProperty *pointProp = m_strikeOutToProperty.value(property, 0)) {
- m_propertyToStrikeOut[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_strikeOutToProperty.value(property, nullptr)) {
+ m_propertyToStrikeOut[pointProp] = nullptr;
m_strikeOutToProperty.remove(property);
- } else if (QtProperty *pointProp = m_kerningToProperty.value(property, 0)) {
- m_propertyToKerning[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_kerningToProperty.value(property, nullptr)) {
+ m_propertyToKerning[pointProp] = nullptr;
m_kerningToProperty.remove(property);
+ } else if (QtProperty *weightProp = m_weightToProperty.value(property, nullptr)) {
+ m_propertyToWeight[weightProp] = nullptr;
+ m_weightToProperty.remove(property);
}
}
-void QtFontPropertyManagerPrivate::slotFontDatabaseChanged()
+void QtFontPropertyManagerPrivate::slotFontDatabaseChanged()
{
if (!m_fontDatabaseChangeTimer) {
m_fontDatabaseChangeTimer = new QTimer(q_ptr);
m_fontDatabaseChangeTimer->setInterval(0);
m_fontDatabaseChangeTimer->setSingleShot(true);
- QObject::connect(m_fontDatabaseChangeTimer, SIGNAL(timeout()), q_ptr, SLOT(slotFontDatabaseDelayedChange()));
+ QObject::connect(m_fontDatabaseChangeTimer, &QTimer::timeout, q_ptr,
+ [this] { slotFontDatabaseDelayedChange(); });
}
if (!m_fontDatabaseChangeTimer->isActive())
m_fontDatabaseChangeTimer->start();
@@ -5653,16 +5617,13 @@ void QtFontPropertyManagerPrivate::slotFontDatabaseChanged()
void QtFontPropertyManagerPrivate::slotFontDatabaseDelayedChange()
{
- typedef QMap<const QtProperty *, QtProperty *> PropertyPropertyMap;
// rescan available font names
const QStringList oldFamilies = m_familyNames;
- m_familyNames = fontDatabase()->families();
+ m_familyNames = QFontDatabase::families();
// Adapt all existing properties
if (!m_propertyToFamily.isEmpty()) {
- PropertyPropertyMap::const_iterator cend = m_propertyToFamily.constEnd();
- for (PropertyPropertyMap::const_iterator it = m_propertyToFamily.constBegin(); it != cend; ++it) {
- QtProperty *familyProp = it.value();
+ for (QtProperty *familyProp : std::as_const(m_propertyToFamily)) {
const int oldIdx = m_enumPropertyManager->value(familyProp);
int newIdx = m_familyNames.indexOf(oldFamilies.at(oldIdx));
if (newIdx < 0)
@@ -5717,24 +5678,26 @@ QtFontPropertyManager::QtFontPropertyManager(QObject *parent)
: QtAbstractPropertyManager(parent), d_ptr(new QtFontPropertyManagerPrivate)
{
d_ptr->q_ptr = this;
- QObject::connect(qApp, SIGNAL(fontDatabaseChanged()), this, SLOT(slotFontDatabaseChanged()));
+ QObject::connect(qApp, &QGuiApplication::fontDatabaseChanged, this,
+ [this] { d_ptr->slotFontDatabaseChanged(); });
d_ptr->m_intPropertyManager = new QtIntPropertyManager(this);
- connect(d_ptr->m_intPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotIntChanged(QtProperty*,int)));
+ connect(d_ptr->m_intPropertyManager, &QtIntPropertyManager::valueChanged, this,
+ [this](QtProperty *property, int value) { d_ptr->slotIntChanged(property, value); });
+ connect(d_ptr->m_intPropertyManager, &QtAbstractPropertyManager::propertyDestroyed, this,
+ [this](QtProperty *property) { d_ptr->slotPropertyDestroyed(property); });
+
d_ptr->m_enumPropertyManager = new QtEnumPropertyManager(this);
- connect(d_ptr->m_enumPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotEnumChanged(QtProperty*,int)));
- d_ptr->m_boolPropertyManager = new QtBoolPropertyManager(this);
- connect(d_ptr->m_boolPropertyManager, SIGNAL(valueChanged(QtProperty*,bool)),
- this, SLOT(slotBoolChanged(QtProperty*,bool)));
+ connect(d_ptr->m_enumPropertyManager, &QtEnumPropertyManager::valueChanged, this,
+ [this](QtProperty *property, int value) { d_ptr->slotEnumChanged(property, value); });
+ connect(d_ptr->m_enumPropertyManager, &QtAbstractPropertyManager::propertyDestroyed, this,
+ [this](QtProperty *property) { d_ptr->slotPropertyDestroyed(property); });
- connect(d_ptr->m_intPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
- this, SLOT(slotPropertyDestroyed(QtProperty*)));
- connect(d_ptr->m_enumPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
- this, SLOT(slotPropertyDestroyed(QtProperty*)));
- connect(d_ptr->m_boolPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
- this, SLOT(slotPropertyDestroyed(QtProperty*)));
+ d_ptr->m_boolPropertyManager = new QtBoolPropertyManager(this);
+ connect(d_ptr->m_boolPropertyManager, &QtBoolPropertyManager::valueChanged, this,
+ [this](QtProperty *property, bool value) { d_ptr->slotBoolChanged(property, value); });
+ connect(d_ptr->m_boolPropertyManager, &QtAbstractPropertyManager::propertyDestroyed, this,
+ [this](QtProperty *property) { d_ptr->slotPropertyDestroyed(property); });
}
/*!
@@ -5807,9 +5770,9 @@ QFont QtFontPropertyManager::value(const QtProperty *property) const
*/
QString QtFontPropertyManager::valueText(const QtProperty *property) const
{
- const QtFontPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
return QtPropertyBrowserUtils::fontValueText(it.value());
}
@@ -5819,9 +5782,9 @@ QString QtFontPropertyManager::valueText(const QtProperty *property) const
*/
QIcon QtFontPropertyManager::valueIcon(const QtProperty *property) const
{
- const QtFontPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QIcon();
+ return {};
return QtPropertyBrowserUtils::fontValueIcon(it.value());
}
@@ -5836,7 +5799,7 @@ QIcon QtFontPropertyManager::valueIcon(const QtProperty *property) const
*/
void QtFontPropertyManager::setValue(QtProperty *property, const QFont &val)
{
- const QtFontPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -5858,12 +5821,34 @@ void QtFontPropertyManager::setValue(QtProperty *property, const QFont &val)
d_ptr->m_boolPropertyManager->setValue(d_ptr->m_propertyToUnderline[property], val.underline());
d_ptr->m_boolPropertyManager->setValue(d_ptr->m_propertyToStrikeOut[property], val.strikeOut());
d_ptr->m_boolPropertyManager->setValue(d_ptr->m_propertyToKerning[property], val.kerning());
+ d_ptr->m_enumPropertyManager->setValue(d_ptr->m_propertyToWeight[property],
+ indexOfFontWeight(val.weight()));
d_ptr->m_settingValue = settingValue;
emit propertyChanged(property);
emit valueChanged(property, val);
}
+static QStringList fontWeightNames()
+{
+ static const DisambiguatedTranslation weightsC[] = {
+ QT_TRANSLATE_NOOP3("FontPropertyManager", "Thin", "QFont::Weight combo"),
+ QT_TRANSLATE_NOOP3("FontPropertyManager", "ExtraLight", "QFont::Weight combo"),
+ QT_TRANSLATE_NOOP3("FontPropertyManager", "Light", "QFont::Weight combo"),
+ QT_TRANSLATE_NOOP3("FontPropertyManager", "Normal", "QFont::Weight combo"),
+ QT_TRANSLATE_NOOP3("FontPropertyManager", "Medium", "QFont::Weight combo"),
+ QT_TRANSLATE_NOOP3("FontPropertyManager", "DemiBold", "QFont::Weight combo"),
+ QT_TRANSLATE_NOOP3("FontPropertyManager", "Bold", "QFont::Weight combo"),
+ QT_TRANSLATE_NOOP3("FontPropertyManager", "ExtraBold", "QFont::Weight combo"),
+ QT_TRANSLATE_NOOP3("FontPropertyManager", "Black", "QFont::Weight combo")
+ };
+
+ QStringList result;
+ for (const auto &w : weightsC)
+ result.append(QCoreApplication::translate("FontPropertyManager", w.first, w.second));
+ return result;
+}
+
/*!
\reimp
*/
@@ -5875,7 +5860,7 @@ void QtFontPropertyManager::initializeProperty(QtProperty *property)
QtProperty *familyProp = d_ptr->m_enumPropertyManager->addProperty();
familyProp->setPropertyName(tr("Family"));
if (d_ptr->m_familyNames.isEmpty())
- d_ptr->m_familyNames = fontDatabase()->families();
+ d_ptr->m_familyNames = QFontDatabase::families();
d_ptr->m_enumPropertyManager->setEnumNames(familyProp, d_ptr->m_familyNames);
int idx = d_ptr->m_familyNames.indexOf(val.family());
if (idx == -1)
@@ -5894,7 +5879,7 @@ void QtFontPropertyManager::initializeProperty(QtProperty *property)
property->addSubProperty(pointSizeProp);
QtProperty *boldProp = d_ptr->m_boolPropertyManager->addProperty();
- boldProp->setPropertyName(tr("Bold"));
+ boldProp->setPropertyName(tr("Bold", "Bold toggle"));
d_ptr->m_boolPropertyManager->setValue(boldProp, val.bold());
d_ptr->m_propertyToBold[property] = boldProp;
d_ptr->m_boldToProperty[boldProp] = property;
@@ -5927,6 +5912,15 @@ void QtFontPropertyManager::initializeProperty(QtProperty *property)
d_ptr->m_propertyToKerning[property] = kerningProp;
d_ptr->m_kerningToProperty[kerningProp] = property;
property->addSubProperty(kerningProp);
+
+ auto *weightProp = d_ptr->m_enumPropertyManager->addProperty();
+ weightProp->setPropertyName(tr("Weight"));
+ static const QStringList weightNames = fontWeightNames();
+ d_ptr->m_enumPropertyManager->setEnumNames(weightProp, weightNames);
+ d_ptr->m_enumPropertyManager->setValue(weightProp, indexOfFontWeight(val.weight()));
+ d_ptr->m_propertyToWeight[property] = weightProp;
+ d_ptr->m_weightToProperty[weightProp] = property;
+ property->addSubProperty(weightProp);
}
/*!
@@ -5983,6 +5977,11 @@ void QtFontPropertyManager::uninitializeProperty(QtProperty *property)
}
d_ptr->m_propertyToKerning.remove(property);
+ if (auto weightProp = d_ptr->m_propertyToWeight[property]) {
+ d_ptr->m_weightToProperty.remove(weightProp);
+ delete weightProp;
+ }
+
d_ptr->m_values.remove(property);
}
@@ -5997,37 +5996,36 @@ public:
void slotIntChanged(QtProperty *property, int value);
void slotPropertyDestroyed(QtProperty *property);
- typedef QMap<const QtProperty *, QColor> PropertyValueMap;
- PropertyValueMap m_values;
+ QHash<const QtProperty *, QColor> m_values;
QtIntPropertyManager *m_intPropertyManager;
- QMap<const QtProperty *, QtProperty *> m_propertyToR;
- QMap<const QtProperty *, QtProperty *> m_propertyToG;
- QMap<const QtProperty *, QtProperty *> m_propertyToB;
- QMap<const QtProperty *, QtProperty *> m_propertyToA;
+ QHash<const QtProperty *, QtProperty *> m_propertyToR;
+ QHash<const QtProperty *, QtProperty *> m_propertyToG;
+ QHash<const QtProperty *, QtProperty *> m_propertyToB;
+ QHash<const QtProperty *, QtProperty *> m_propertyToA;
- QMap<const QtProperty *, QtProperty *> m_rToProperty;
- QMap<const QtProperty *, QtProperty *> m_gToProperty;
- QMap<const QtProperty *, QtProperty *> m_bToProperty;
- QMap<const QtProperty *, QtProperty *> m_aToProperty;
+ QHash<const QtProperty *, QtProperty *> m_rToProperty;
+ QHash<const QtProperty *, QtProperty *> m_gToProperty;
+ QHash<const QtProperty *, QtProperty *> m_bToProperty;
+ QHash<const QtProperty *, QtProperty *> m_aToProperty;
};
void QtColorPropertyManagerPrivate::slotIntChanged(QtProperty *property, int value)
{
- if (QtProperty *prop = m_rToProperty.value(property, 0)) {
+ if (QtProperty *prop = m_rToProperty.value(property, nullptr)) {
QColor c = m_values[prop];
c.setRed(value);
q_ptr->setValue(prop, c);
- } else if (QtProperty *prop = m_gToProperty.value(property, 0)) {
+ } else if (QtProperty *prop = m_gToProperty.value(property, nullptr)) {
QColor c = m_values[prop];
c.setGreen(value);
q_ptr->setValue(prop, c);
- } else if (QtProperty *prop = m_bToProperty.value(property, 0)) {
+ } else if (QtProperty *prop = m_bToProperty.value(property, nullptr)) {
QColor c = m_values[prop];
c.setBlue(value);
q_ptr->setValue(prop, c);
- } else if (QtProperty *prop = m_aToProperty.value(property, 0)) {
+ } else if (QtProperty *prop = m_aToProperty.value(property, nullptr)) {
QColor c = m_values[prop];
c.setAlpha(value);
q_ptr->setValue(prop, c);
@@ -6036,17 +6034,17 @@ void QtColorPropertyManagerPrivate::slotIntChanged(QtProperty *property, int val
void QtColorPropertyManagerPrivate::slotPropertyDestroyed(QtProperty *property)
{
- if (QtProperty *pointProp = m_rToProperty.value(property, 0)) {
- m_propertyToR[pointProp] = 0;
+ if (QtProperty *pointProp = m_rToProperty.value(property, nullptr)) {
+ m_propertyToR[pointProp] = nullptr;
m_rToProperty.remove(property);
- } else if (QtProperty *pointProp = m_gToProperty.value(property, 0)) {
- m_propertyToG[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_gToProperty.value(property, nullptr)) {
+ m_propertyToG[pointProp] = nullptr;
m_gToProperty.remove(property);
- } else if (QtProperty *pointProp = m_bToProperty.value(property, 0)) {
- m_propertyToB[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_bToProperty.value(property, nullptr)) {
+ m_propertyToB[pointProp] = nullptr;
m_bToProperty.remove(property);
- } else if (QtProperty *pointProp = m_aToProperty.value(property, 0)) {
- m_propertyToA[pointProp] = 0;
+ } else if (QtProperty *pointProp = m_aToProperty.value(property, nullptr)) {
+ m_propertyToA[pointProp] = nullptr;
m_aToProperty.remove(property);
}
}
@@ -6095,11 +6093,10 @@ QtColorPropertyManager::QtColorPropertyManager(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_intPropertyManager = new QtIntPropertyManager(this);
- connect(d_ptr->m_intPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotIntChanged(QtProperty*,int)));
-
- connect(d_ptr->m_intPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
- this, SLOT(slotPropertyDestroyed(QtProperty*)));
+ connect(d_ptr->m_intPropertyManager, &QtIntPropertyManager::valueChanged, this,
+ [this](QtProperty *property, int value) { d_ptr->slotIntChanged(property, value); });
+ connect(d_ptr->m_intPropertyManager, &QtAbstractPropertyManager::propertyDestroyed, this,
+ [this](QtProperty *property) { d_ptr->slotPropertyDestroyed(property); });
}
/*!
@@ -6144,9 +6141,9 @@ QColor QtColorPropertyManager::value(const QtProperty *property) const
QString QtColorPropertyManager::valueText(const QtProperty *property) const
{
- const QtColorPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
return QtPropertyBrowserUtils::colorValueText(it.value());
}
@@ -6157,9 +6154,9 @@ QString QtColorPropertyManager::valueText(const QtProperty *property) const
QIcon QtColorPropertyManager::valueIcon(const QtProperty *property) const
{
- const QtColorPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QIcon();
+ return {};
return QtPropertyBrowserUtils::brushValueIcon(QBrush(it.value()));
}
@@ -6173,7 +6170,7 @@ QIcon QtColorPropertyManager::valueIcon(const QtProperty *property) const
*/
void QtColorPropertyManager::setValue(QtProperty *property, const QColor &val)
{
- const QtColorPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
@@ -6270,32 +6267,12 @@ void QtColorPropertyManager::uninitializeProperty(QtProperty *property)
// QtCursorPropertyManager
-// Make sure icons are removed as soon as QApplication is destroyed, otherwise,
-// handles are leaked on X11.
-static void clearCursorDatabase();
-namespace {
-struct CursorDatabase : public QtCursorDatabase
-{
- CursorDatabase()
- {
- qAddPostRoutine(clearCursorDatabase);
- }
-};
-}
-Q_GLOBAL_STATIC(QtCursorDatabase, cursorDatabase)
-
-static void clearCursorDatabase()
-{
- cursorDatabase()->clear();
-}
-
class QtCursorPropertyManagerPrivate
{
QtCursorPropertyManager *q_ptr;
Q_DECLARE_PUBLIC(QtCursorPropertyManager)
public:
- typedef QMap<const QtProperty *, QCursor> PropertyValueMap;
- PropertyValueMap m_values;
+ QHash<const QtProperty *, QCursor> m_values;
};
/*!
@@ -6362,11 +6339,11 @@ QCursor QtCursorPropertyManager::value(const QtProperty *property) const
*/
QString QtCursorPropertyManager::valueText(const QtProperty *property) const
{
- const QtCursorPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QString();
+ return {};
- return cursorDatabase()->cursorToShapeName(it.value());
+ return QtCursorDatabase::instance()->cursorToShapeName(it.value());
}
/*!
@@ -6374,11 +6351,11 @@ QString QtCursorPropertyManager::valueText(const QtProperty *property) const
*/
QIcon QtCursorPropertyManager::valueIcon(const QtProperty *property) const
{
- const QtCursorPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
+ const auto it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
- return QIcon();
+ return {};
- return cursorDatabase()->cursorToShapeIcon(it.value());
+ return QtCursorDatabase::instance()->cursorToShapeIcon(it.value());
}
/*!
@@ -6391,7 +6368,7 @@ QIcon QtCursorPropertyManager::valueIcon(const QtProperty *property) const
void QtCursorPropertyManager::setValue(QtProperty *property, const QCursor &value)
{
#ifndef QT_NO_CURSOR
- const QtCursorPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ const auto it = d_ptr->m_values.find(property);
if (it == d_ptr->m_values.end())
return;
diff --git a/src/shared/qtpropertybrowser/qtpropertymanager.h b/src/shared/qtpropertybrowser/qtpropertymanager.h
index d737fb06d..630f48e1c 100644
--- a/src/shared/qtpropertybrowser/qtpropertymanager.h
+++ b/src/shared/qtpropertybrowser/qtpropertymanager.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QTPROPERTYMANAGER_H
#define QTPROPERTYMANAGER_H
@@ -346,8 +310,6 @@ private:
QScopedPointer<QtLocalePropertyManagerPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtLocalePropertyManager)
Q_DISABLE_COPY_MOVE(QtLocalePropertyManager)
- Q_PRIVATE_SLOT(d_func(), void slotEnumChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotPropertyDestroyed(QtProperty *))
};
class QtPointPropertyManagerPrivate;
@@ -375,8 +337,6 @@ private:
QScopedPointer<QtPointPropertyManagerPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtPointPropertyManager)
Q_DISABLE_COPY_MOVE(QtPointPropertyManager)
- Q_PRIVATE_SLOT(d_func(), void slotIntChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotPropertyDestroyed(QtProperty *))
};
class QtPointFPropertyManagerPrivate;
@@ -407,8 +367,6 @@ private:
QScopedPointer<QtPointFPropertyManagerPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtPointFPropertyManager)
Q_DISABLE_COPY_MOVE(QtPointFPropertyManager)
- Q_PRIVATE_SLOT(d_func(), void slotDoubleChanged(QtProperty *, double))
- Q_PRIVATE_SLOT(d_func(), void slotPropertyDestroyed(QtProperty *))
};
class QtSizePropertyManagerPrivate;
@@ -442,8 +400,6 @@ private:
QScopedPointer<QtSizePropertyManagerPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtSizePropertyManager)
Q_DISABLE_COPY_MOVE(QtSizePropertyManager)
- Q_PRIVATE_SLOT(d_func(), void slotIntChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotPropertyDestroyed(QtProperty *))
};
class QtSizeFPropertyManagerPrivate;
@@ -480,8 +436,6 @@ private:
QScopedPointer<QtSizeFPropertyManagerPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtSizeFPropertyManager)
Q_DISABLE_COPY_MOVE(QtSizeFPropertyManager)
- Q_PRIVATE_SLOT(d_func(), void slotDoubleChanged(QtProperty *, double))
- Q_PRIVATE_SLOT(d_func(), void slotPropertyDestroyed(QtProperty *))
};
class QtRectPropertyManagerPrivate;
@@ -512,8 +466,6 @@ private:
QScopedPointer<QtRectPropertyManagerPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtRectPropertyManager)
Q_DISABLE_COPY_MOVE(QtRectPropertyManager)
- Q_PRIVATE_SLOT(d_func(), void slotIntChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotPropertyDestroyed(QtProperty *))
};
class QtRectFPropertyManagerPrivate;
@@ -547,8 +499,6 @@ private:
QScopedPointer<QtRectFPropertyManagerPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtRectFPropertyManager)
Q_DISABLE_COPY_MOVE(QtRectFPropertyManager)
- Q_PRIVATE_SLOT(d_func(), void slotDoubleChanged(QtProperty *, double))
- Q_PRIVATE_SLOT(d_func(), void slotPropertyDestroyed(QtProperty *))
};
class QtEnumPropertyManagerPrivate;
@@ -611,8 +561,6 @@ private:
QScopedPointer<QtFlagPropertyManagerPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtFlagPropertyManager)
Q_DISABLE_COPY_MOVE(QtFlagPropertyManager)
- Q_PRIVATE_SLOT(d_func(), void slotBoolChanged(QtProperty *, bool))
- Q_PRIVATE_SLOT(d_func(), void slotPropertyDestroyed(QtProperty *))
};
class QtSizePolicyPropertyManagerPrivate;
@@ -641,9 +589,6 @@ private:
QScopedPointer<QtSizePolicyPropertyManagerPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtSizePolicyPropertyManager)
Q_DISABLE_COPY_MOVE(QtSizePolicyPropertyManager)
- Q_PRIVATE_SLOT(d_func(), void slotIntChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotEnumChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotPropertyDestroyed(QtProperty *))
};
class QtFontPropertyManagerPrivate;
@@ -674,12 +619,6 @@ private:
QScopedPointer<QtFontPropertyManagerPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtFontPropertyManager)
Q_DISABLE_COPY_MOVE(QtFontPropertyManager)
- Q_PRIVATE_SLOT(d_func(), void slotIntChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotEnumChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotBoolChanged(QtProperty *, bool))
- Q_PRIVATE_SLOT(d_func(), void slotPropertyDestroyed(QtProperty *))
- Q_PRIVATE_SLOT(d_func(), void slotFontDatabaseChanged())
- Q_PRIVATE_SLOT(d_func(), void slotFontDatabaseDelayedChange())
};
class QtColorPropertyManagerPrivate;
@@ -708,8 +647,6 @@ private:
QScopedPointer<QtColorPropertyManagerPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtColorPropertyManager)
Q_DISABLE_COPY_MOVE(QtColorPropertyManager)
- Q_PRIVATE_SLOT(d_func(), void slotIntChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotPropertyDestroyed(QtProperty *))
};
class QtCursorPropertyManagerPrivate;
diff --git a/src/shared/qtpropertybrowser/qttreepropertybrowser.cpp b/src/shared/qtpropertybrowser/qttreepropertybrowser.cpp
index fb77ee6eb..5142274c4 100644
--- a/src/shared/qtpropertybrowser/qttreepropertybrowser.cpp
+++ b/src/shared/qtpropertybrowser/qttreepropertybrowser.cpp
@@ -1,57 +1,33 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qttreepropertybrowser.h"
-#include <QtCore/QSet>
+
+#include <QtCore/QOperatingSystemVersion>
+#include <QtCore/QHash>
+#include <QtGui/QFocusEvent>
#include <QtGui/QIcon>
-#include <QtWidgets/QTreeWidget>
-#include <QtWidgets/QItemDelegate>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtGui/QPainter>
+#include <QtGui/QPalette>
+#include <QtGui/QStyleHints>
#include <QtWidgets/QApplication>
-#include <QtGui/QFocusEvent>
+#include <QtWidgets/QHBoxLayout>
+#include <QtWidgets/QHeaderView>
+#include <QtWidgets/QItemDelegate>
#include <QtWidgets/QStyle>
-#include <QtGui/QPalette>
+#include <QtWidgets/QTreeWidget>
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
+static constexpr bool isWindows = QOperatingSystemVersion::currentType() == QOperatingSystemVersion::Windows;
+
+static inline bool isLightTheme()
+{
+ return QGuiApplication::styleHints()->colorScheme() != Qt::ColorScheme::Dark;
+}
+
class QtPropertyEditorView;
class QtTreePropertyBrowserPrivate
@@ -96,10 +72,10 @@ public:
private:
void updateItem(QTreeWidgetItem *item);
- QMap<QtBrowserItem *, QTreeWidgetItem *> m_indexToItem;
- QMap<QTreeWidgetItem *, QtBrowserItem *> m_itemToIndex;
+ QHash<QtBrowserItem *, QTreeWidgetItem *> m_indexToItem;
+ QHash<QTreeWidgetItem *, QtBrowserItem *> m_itemToIndex;
- QMap<QtBrowserItem *, QColor> m_indexToBackgroundColor;
+ QHash<QtBrowserItem *, QColor> m_indexToBackgroundColor;
QtPropertyEditorView *m_treeWidget;
@@ -137,7 +113,7 @@ QtPropertyEditorView::QtPropertyEditorView(QWidget *parent) :
QTreeWidget(parent),
m_editorPrivate(0)
{
- connect(header(), SIGNAL(sectionDoubleClicked(int)), this, SLOT(resizeColumnToContents(int)));
+ connect(header(), &QHeaderView::sectionDoubleClicked, this, &QTreeView::resizeColumnToContents);
}
void QtPropertyEditorView::drawRow(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
@@ -250,10 +226,10 @@ private slots:
private:
int indentation(const QModelIndex &index) const;
- typedef QMap<QWidget *, QtProperty *> EditorToPropertyMap;
+ using EditorToPropertyMap = QHash<QWidget *, QtProperty *>;
mutable EditorToPropertyMap m_editorToProperty;
- typedef QMap<QtProperty *, QWidget *> PropertyToEditorMap;
+ using PropertyToEditorMap = QHash<QtProperty *, QWidget *>;
mutable PropertyToEditorMap m_propertyToEditor;
QtTreePropertyBrowserPrivate *m_editorPrivate;
mutable QTreeWidgetItem *m_editedItem;
@@ -278,22 +254,22 @@ int QtPropertyEditorDelegate::indentation(const QModelIndex &index) const
void QtPropertyEditorDelegate::slotEditorDestroyed(QObject *object)
{
- if (QWidget *w = qobject_cast<QWidget *>(object)) {
- const EditorToPropertyMap::iterator it = m_editorToProperty.find(w);
+ if (auto *w = qobject_cast<QWidget *>(object)) {
+ const auto it = m_editorToProperty.find(w);
if (it != m_editorToProperty.end()) {
m_propertyToEditor.remove(it.value());
m_editorToProperty.erase(it);
}
if (m_editedWidget == w) {
- m_editedWidget = 0;
- m_editedItem = 0;
+ m_editedWidget = nullptr;
+ m_editedItem = nullptr;
}
}
}
void QtPropertyEditorDelegate::closeEditor(QtProperty *property)
{
- if (QWidget *w = m_propertyToEditor.value(property, 0))
+ if (QWidget *w = m_propertyToEditor.value(property, nullptr))
w->deleteLater();
}
@@ -308,7 +284,8 @@ QWidget *QtPropertyEditorDelegate::createEditor(QWidget *parent,
if (editor) {
editor->setAutoFillBackground(true);
editor->installEventFilter(const_cast<QtPropertyEditorDelegate *>(this));
- connect(editor, SIGNAL(destroyed(QObject*)), this, SLOT(slotEditorDestroyed(QObject*)));
+ connect(editor, &QObject::destroyed,
+ this, &QtPropertyEditorDelegate::slotEditorDestroyed);
m_propertyToEditor[property] = editor;
m_editorToProperty[editor] = property;
m_editedItem = item;
@@ -317,7 +294,7 @@ QWidget *QtPropertyEditorDelegate::createEditor(QWidget *parent,
return editor;
}
}
- return 0;
+ return nullptr;
}
void QtPropertyEditorDelegate::updateEditorGeometry(QWidget *editor,
@@ -347,7 +324,10 @@ void QtPropertyEditorDelegate::paint(QPainter *painter, const QStyleOptionViewIt
QColor c;
if (!hasValue && m_editorPrivate->markPropertiesWithoutValue()) {
c = opt.palette.color(QPalette::Dark);
- opt.palette.setColor(QPalette::Text, opt.palette.color(QPalette::BrightText));
+ // Hardcode "white" for Windows/light which is otherwise blue
+ const QColor textColor = isWindows && isLightTheme()
+ ? QColor(Qt::white) : opt.palette.color(QPalette::BrightText);
+ opt.palette.setColor(QPalette::Text, textColor);
} else {
c = m_editorPrivate->calculatedBackgroundColor(m_editorPrivate->indexToBrowserItem(index));
if (c.isValid() && (opt.features & QStyleOptionViewItem::Alternate))
@@ -427,7 +407,7 @@ static QIcon drawIndicatorIcon(const QPalette &palette, QStyle *style)
void QtTreePropertyBrowserPrivate::init(QWidget *parent)
{
- QHBoxLayout *layout = new QHBoxLayout(parent);
+ auto *layout = new QHBoxLayout(parent);
layout->setContentsMargins(QMargins());
m_treeWidget = new QtPropertyEditorView(parent);
m_treeWidget->setEditorPrivate(this);
@@ -449,23 +429,27 @@ void QtTreePropertyBrowserPrivate::init(QWidget *parent)
m_expandIcon = drawIndicatorIcon(q_ptr->palette(), q_ptr->style());
- QObject::connect(m_treeWidget, SIGNAL(collapsed(QModelIndex)), q_ptr, SLOT(slotCollapsed(QModelIndex)));
- QObject::connect(m_treeWidget, SIGNAL(expanded(QModelIndex)), q_ptr, SLOT(slotExpanded(QModelIndex)));
- QObject::connect(m_treeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), q_ptr, SLOT(slotCurrentTreeItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)));
+ QObject::connect(m_treeWidget, &QTreeView::collapsed,
+ q_ptr, [this](const QModelIndex &index) { slotCollapsed(index); });
+ QObject::connect(m_treeWidget, &QTreeView::expanded,
+ q_ptr, [this](const QModelIndex &index) { slotExpanded(index); });
+ QObject::connect(m_treeWidget, &QTreeWidget::currentItemChanged,
+ q_ptr, [this](QTreeWidgetItem *current, QTreeWidgetItem *previous)
+ { slotCurrentTreeItemChanged(current, previous); });
}
QtBrowserItem *QtTreePropertyBrowserPrivate::currentItem() const
{
if (QTreeWidgetItem *treeItem = m_treeWidget->currentItem())
return m_itemToIndex.value(treeItem);
- return 0;
+ return nullptr;
}
void QtTreePropertyBrowserPrivate::setCurrentItem(QtBrowserItem *browserItem, bool block)
{
const bool blocked = block ? m_treeWidget->blockSignals(true) : false;
- if (browserItem == 0)
- m_treeWidget->setCurrentItem(0);
+ if (browserItem == nullptr)
+ m_treeWidget->setCurrentItem(nullptr);
else
m_treeWidget->setCurrentItem(m_indexToItem.value(browserItem));
if (block)
@@ -478,7 +462,7 @@ QtProperty *QtTreePropertyBrowserPrivate::indexToProperty(const QModelIndex &ind
QtBrowserItem *idx = m_itemToIndex.value(item);
if (idx)
return idx->property();
- return 0;
+ return nullptr;
}
QtBrowserItem *QtTreePropertyBrowserPrivate::indexToBrowserItem(const QModelIndex &index) const
@@ -540,7 +524,7 @@ void QtTreePropertyBrowserPrivate::propertyInserted(QtBrowserItem *index, QtBrow
QTreeWidgetItem *afterItem = m_indexToItem.value(afterIndex);
QTreeWidgetItem *parentItem = m_indexToItem.value(index->parent());
- QTreeWidgetItem *newItem = 0;
+ QTreeWidgetItem *newItem = nullptr;
if (parentItem) {
newItem = new QTreeWidgetItem(parentItem, afterItem);
} else {
@@ -621,14 +605,14 @@ void QtTreePropertyBrowserPrivate::updateItem(QTreeWidgetItem *item)
QColor QtTreePropertyBrowserPrivate::calculatedBackgroundColor(QtBrowserItem *item) const
{
QtBrowserItem *i = item;
- const QMap<QtBrowserItem *, QColor>::const_iterator itEnd = m_indexToBackgroundColor.constEnd();
+ const auto itEnd = m_indexToBackgroundColor.constEnd();
while (i) {
- QMap<QtBrowserItem *, QColor>::const_iterator it = m_indexToBackgroundColor.constFind(i);
+ auto it = m_indexToBackgroundColor.constFind(i);
if (it != itEnd)
return it.value();
i = i->parent();
}
- return QColor();
+ return {};
}
void QtTreePropertyBrowserPrivate::slotCollapsed(const QModelIndex &index)
@@ -668,7 +652,7 @@ QTreeWidgetItem *QtTreePropertyBrowserPrivate::editedItem() const
void QtTreePropertyBrowserPrivate::editItem(QtBrowserItem *browserItem)
{
- if (QTreeWidgetItem *treeItem = m_indexToItem.value(browserItem, 0)) {
+ if (QTreeWidgetItem *treeItem = m_indexToItem.value(browserItem, nullptr)) {
m_treeWidget->setCurrentItem (treeItem, 1);
m_treeWidget->editItem(treeItem, 1);
}
@@ -729,7 +713,9 @@ QtTreePropertyBrowser::QtTreePropertyBrowser(QWidget *parent)
d_ptr->q_ptr = this;
d_ptr->init(this);
- connect(this, SIGNAL(currentItemChanged(QtBrowserItem*)), this, SLOT(slotCurrentBrowserItemChanged(QtBrowserItem*)));
+ QObject::connect(this, &QtAbstractPropertyBrowser::currentItemChanged,
+ this, [this](QtBrowserItem *current)
+ { d_ptr->slotCurrentBrowserItemChanged(current); });
}
/*!
diff --git a/src/shared/qtpropertybrowser/qttreepropertybrowser.h b/src/shared/qtpropertybrowser/qttreepropertybrowser.h
index ce2a04f04..f86e7b826 100644
--- a/src/shared/qtpropertybrowser/qttreepropertybrowser.h
+++ b/src/shared/qtpropertybrowser/qttreepropertybrowser.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QTTREEPROPERTYBROWSER_H
#define QTTREEPROPERTYBROWSER_H
@@ -58,7 +22,6 @@ class QtTreePropertyBrowser : public QtAbstractPropertyBrowser
Q_PROPERTY(int splitterPosition READ splitterPosition WRITE setSplitterPosition)
Q_PROPERTY(bool propertiesWithoutValueMarked READ propertiesWithoutValueMarked WRITE setPropertiesWithoutValueMarked)
public:
-
enum ResizeMode
{
Interactive,
@@ -105,7 +68,6 @@ public:
void editItem(QtBrowserItem *item);
Q_SIGNALS:
-
void collapsed(QtBrowserItem *item);
void expanded(QtBrowserItem *item);
@@ -115,16 +77,9 @@ protected:
void itemChanged(QtBrowserItem *item) override;
private:
-
QScopedPointer<QtTreePropertyBrowserPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtTreePropertyBrowser)
Q_DISABLE_COPY_MOVE(QtTreePropertyBrowser)
-
- Q_PRIVATE_SLOT(d_func(), void slotCollapsed(const QModelIndex &))
- Q_PRIVATE_SLOT(d_func(), void slotExpanded(const QModelIndex &))
- Q_PRIVATE_SLOT(d_func(), void slotCurrentBrowserItemChanged(QtBrowserItem *))
- Q_PRIVATE_SLOT(d_func(), void slotCurrentTreeItemChanged(QTreeWidgetItem *, QTreeWidgetItem *))
-
};
QT_END_NAMESPACE
diff --git a/src/shared/qtpropertybrowser/qtvariantproperty.cpp b/src/shared/qtpropertybrowser/qtvariantproperty.cpp
index dd7bad01f..e3974a8dd 100644
--- a/src/shared/qtpropertybrowser/qtvariantproperty.cpp
+++ b/src/shared/qtpropertybrowser/qtvariantproperty.cpp
@@ -1,48 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qtvariantproperty.h"
#include "qtpropertymanager.h"
#include "qteditorfactory.h"
+
#include <QtCore/QVariant>
-#include <QtGui/QIcon>
#include <QtCore/QDate>
+#include <QtCore/QHash>
#include <QtCore/QLocale>
#include <QtCore/QRegularExpression>
@@ -52,6 +17,10 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
+using QtIconMap = QMap<int, QIcon>;
+
class QtEnumPropertyType
{
};
@@ -78,7 +47,7 @@ QT_BEGIN_NAMESPACE
Returns the type id for an enum property.
Note that the property's value type can be retrieved using the
- valueType() function (which is QVariant::Int for the enum property
+ valueType() function (which is QMetaType::Int for the enum property
type).
\sa propertyType(), valueType()
@@ -92,7 +61,7 @@ int QtVariantPropertyManager::enumTypeId()
Returns the type id for a flag property.
Note that the property's value type can be retrieved using the
- valueType() function (which is QVariant::Int for the flag property
+ valueType() function (which is QMetaType::Int for the flag property
type).
\sa propertyType(), valueType()
@@ -106,7 +75,7 @@ int QtVariantPropertyManager::flagTypeId()
Returns the type id for a group property.
Note that the property's value type can be retrieved using the
- valueType() function (which is QVariant::Invalid for the group
+ valueType() function (which is QMetaType::UnknownType for the group
property type, since it doesn't provide any value).
\sa propertyType(), valueType()
@@ -129,12 +98,13 @@ int QtVariantPropertyManager::iconMapTypeId()
return qMetaTypeId<QtIconMap>();
}
-typedef QMap<const QtProperty *, QtProperty *> PropertyMap;
-Q_GLOBAL_STATIC(PropertyMap, propertyToWrappedProperty)
+using PropertyPropertyMap = QHash<const QtProperty *, QtProperty *>;
+
+Q_GLOBAL_STATIC(PropertyPropertyMap, propertyToWrappedProperty)
static QtProperty *wrappedProperty(QtProperty *property)
{
- return propertyToWrappedProperty()->value(property, 0);
+ return propertyToWrappedProperty()->value(property, nullptr);
}
class QtVariantPropertyPrivate
@@ -338,12 +308,12 @@ public:
QMap<int, QtAbstractPropertyManager *> m_typeToPropertyManager;
QMap<int, QMap<QString, int> > m_typeToAttributeToAttributeType;
- QMap<const QtProperty *, QPair<QtVariantProperty *, int> > m_propertyToType;
+ QHash<const QtProperty *, std::pair<QtVariantProperty *, int>> m_propertyToType;
QMap<int, int> m_typeToValueType;
- QMap<QtProperty *, QtVariantProperty *> m_internalToProperty;
+ QHash<QtProperty *, QtVariantProperty *> m_internalToProperty;
const QString m_constraintAttribute;
const QString m_singleStepAttribute;
@@ -357,15 +327,15 @@ public:
};
QtVariantPropertyManagerPrivate::QtVariantPropertyManagerPrivate() :
- m_constraintAttribute(QLatin1String("constraint")),
- m_singleStepAttribute(QLatin1String("singleStep")),
- m_decimalsAttribute(QLatin1String("decimals")),
- m_enumIconsAttribute(QLatin1String("enumIcons")),
- m_enumNamesAttribute(QLatin1String("enumNames")),
- m_flagNamesAttribute(QLatin1String("flagNames")),
- m_maximumAttribute(QLatin1String("maximum")),
- m_minimumAttribute(QLatin1String("minimum")),
- m_regExpAttribute(QLatin1String("regExp"))
+ m_constraintAttribute("constraint"_L1),
+ m_singleStepAttribute("singleStep"_L1),
+ m_decimalsAttribute("decimals"_L1),
+ m_enumIconsAttribute("enumIcons"_L1),
+ m_enumNamesAttribute("enumNames"_L1),
+ m_flagNamesAttribute("flagNames"_L1),
+ m_maximumAttribute("maximum"_L1),
+ m_minimumAttribute("minimum"_L1),
+ m_regExpAttribute("regExp"_L1)
{
}
@@ -374,13 +344,13 @@ int QtVariantPropertyManagerPrivate::internalPropertyToType(QtProperty *property
int type = 0;
QtAbstractPropertyManager *internPropertyManager = property->propertyManager();
if (qobject_cast<QtIntPropertyManager *>(internPropertyManager))
- type = QVariant::Int;
+ type = QMetaType::Int;
else if (qobject_cast<QtEnumPropertyManager *>(internPropertyManager))
type = QtVariantPropertyManager::enumTypeId();
else if (qobject_cast<QtBoolPropertyManager *>(internPropertyManager))
- type = QVariant::Bool;
+ type = QMetaType::Bool;
else if (qobject_cast<QtDoublePropertyManager *>(internPropertyManager))
- type = QVariant::Double;
+ type = QMetaType::Double;
return type;
}
@@ -427,13 +397,13 @@ void QtVariantPropertyManagerPrivate::slotPropertyInserted(QtProperty *property,
if (m_creatingProperty)
return;
- QtVariantProperty *varParent = m_internalToProperty.value(parent, 0);
+ QtVariantProperty *varParent = m_internalToProperty.value(parent, nullptr);
if (!varParent)
return;
- QtVariantProperty *varAfter = 0;
+ QtVariantProperty *varAfter = nullptr;
if (after) {
- varAfter = m_internalToProperty.value(after, 0);
+ varAfter = m_internalToProperty.value(after, nullptr);
if (!varAfter)
return;
}
@@ -445,7 +415,7 @@ void QtVariantPropertyManagerPrivate::slotPropertyRemoved(QtProperty *property,
{
Q_UNUSED(parent);
- QtVariantProperty *varProperty = m_internalToProperty.value(property, 0);
+ QtVariantProperty *varProperty = m_internalToProperty.value(property, nullptr);
if (!varProperty)
return;
@@ -454,7 +424,7 @@ void QtVariantPropertyManagerPrivate::slotPropertyRemoved(QtProperty *property,
void QtVariantPropertyManagerPrivate::valueChanged(QtProperty *property, const QVariant &val)
{
- QtVariantProperty *varProp = m_internalToProperty.value(property, 0);
+ QtVariantProperty *varProp = m_internalToProperty.value(property, nullptr);
if (!varProp)
return;
emit q_ptr->valueChanged(varProp, val);
@@ -468,7 +438,7 @@ void QtVariantPropertyManagerPrivate::slotValueChanged(QtProperty *property, int
void QtVariantPropertyManagerPrivate::slotRangeChanged(QtProperty *property, int min, int max)
{
- if (QtVariantProperty *varProp = m_internalToProperty.value(property, 0)) {
+ if (QtVariantProperty *varProp = m_internalToProperty.value(property, nullptr)) {
emit q_ptr->attributeChanged(varProp, m_minimumAttribute, QVariant(min));
emit q_ptr->attributeChanged(varProp, m_maximumAttribute, QVariant(max));
}
@@ -476,7 +446,7 @@ void QtVariantPropertyManagerPrivate::slotRangeChanged(QtProperty *property, int
void QtVariantPropertyManagerPrivate::slotSingleStepChanged(QtProperty *property, int step)
{
- if (QtVariantProperty *varProp = m_internalToProperty.value(property, 0))
+ if (QtVariantProperty *varProp = m_internalToProperty.value(property, nullptr))
emit q_ptr->attributeChanged(varProp, m_singleStepAttribute, QVariant(step));
}
@@ -487,7 +457,7 @@ void QtVariantPropertyManagerPrivate::slotValueChanged(QtProperty *property, dou
void QtVariantPropertyManagerPrivate::slotRangeChanged(QtProperty *property, double min, double max)
{
- if (QtVariantProperty *varProp = m_internalToProperty.value(property, 0)) {
+ if (QtVariantProperty *varProp = m_internalToProperty.value(property, nullptr)) {
emit q_ptr->attributeChanged(varProp, m_minimumAttribute, QVariant(min));
emit q_ptr->attributeChanged(varProp, m_maximumAttribute, QVariant(max));
}
@@ -495,13 +465,13 @@ void QtVariantPropertyManagerPrivate::slotRangeChanged(QtProperty *property, dou
void QtVariantPropertyManagerPrivate::slotSingleStepChanged(QtProperty *property, double step)
{
- if (QtVariantProperty *varProp = m_internalToProperty.value(property, 0))
+ if (QtVariantProperty *varProp = m_internalToProperty.value(property, nullptr))
emit q_ptr->attributeChanged(varProp, m_singleStepAttribute, QVariant(step));
}
void QtVariantPropertyManagerPrivate::slotDecimalsChanged(QtProperty *property, int prec)
{
- if (QtVariantProperty *varProp = m_internalToProperty.value(property, 0))
+ if (QtVariantProperty *varProp = m_internalToProperty.value(property, nullptr))
emit q_ptr->attributeChanged(varProp, m_decimalsAttribute, QVariant(prec));
}
@@ -517,7 +487,7 @@ void QtVariantPropertyManagerPrivate::slotValueChanged(QtProperty *property, con
void QtVariantPropertyManagerPrivate::slotRegExpChanged(QtProperty *property, const QRegularExpression &regExp)
{
- if (QtVariantProperty *varProp = m_internalToProperty.value(property, 0))
+ if (QtVariantProperty *varProp = m_internalToProperty.value(property, nullptr))
emit q_ptr->attributeChanged(varProp, m_regExpAttribute, QVariant(regExp));
}
@@ -528,7 +498,7 @@ void QtVariantPropertyManagerPrivate::slotValueChanged(QtProperty *property, QDa
void QtVariantPropertyManagerPrivate::slotRangeChanged(QtProperty *property, QDate min, QDate max)
{
- if (QtVariantProperty *varProp = m_internalToProperty.value(property, 0)) {
+ if (QtVariantProperty *varProp = m_internalToProperty.value(property, nullptr)) {
emit q_ptr->attributeChanged(varProp, m_minimumAttribute, QVariant(min));
emit q_ptr->attributeChanged(varProp, m_maximumAttribute, QVariant(max));
}
@@ -578,7 +548,7 @@ void QtVariantPropertyManagerPrivate::slotValueChanged(QtProperty *property, con
void QtVariantPropertyManagerPrivate::slotRangeChanged(QtProperty *property, const QSize &min, const QSize &max)
{
- if (QtVariantProperty *varProp = m_internalToProperty.value(property, 0)) {
+ if (QtVariantProperty *varProp = m_internalToProperty.value(property, nullptr)) {
emit q_ptr->attributeChanged(varProp, m_minimumAttribute, QVariant(min));
emit q_ptr->attributeChanged(varProp, m_maximumAttribute, QVariant(max));
}
@@ -591,7 +561,7 @@ void QtVariantPropertyManagerPrivate::slotValueChanged(QtProperty *property, con
void QtVariantPropertyManagerPrivate::slotRangeChanged(QtProperty *property, const QSizeF &min, const QSizeF &max)
{
- if (QtVariantProperty *varProp = m_internalToProperty.value(property, 0)) {
+ if (QtVariantProperty *varProp = m_internalToProperty.value(property, nullptr)) {
emit q_ptr->attributeChanged(varProp, m_minimumAttribute, QVariant(min));
emit q_ptr->attributeChanged(varProp, m_maximumAttribute, QVariant(max));
}
@@ -604,7 +574,7 @@ void QtVariantPropertyManagerPrivate::slotValueChanged(QtProperty *property, con
void QtVariantPropertyManagerPrivate::slotConstraintChanged(QtProperty *property, const QRect &constraint)
{
- if (QtVariantProperty *varProp = m_internalToProperty.value(property, 0))
+ if (QtVariantProperty *varProp = m_internalToProperty.value(property, nullptr))
emit q_ptr->attributeChanged(varProp, m_constraintAttribute, QVariant(constraint));
}
@@ -615,7 +585,7 @@ void QtVariantPropertyManagerPrivate::slotValueChanged(QtProperty *property, con
void QtVariantPropertyManagerPrivate::slotConstraintChanged(QtProperty *property, const QRectF &constraint)
{
- if (QtVariantProperty *varProp = m_internalToProperty.value(property, 0))
+ if (QtVariantProperty *varProp = m_internalToProperty.value(property, nullptr))
emit q_ptr->attributeChanged(varProp, m_constraintAttribute, QVariant(constraint));
}
@@ -626,13 +596,13 @@ void QtVariantPropertyManagerPrivate::slotValueChanged(QtProperty *property, con
void QtVariantPropertyManagerPrivate::slotEnumNamesChanged(QtProperty *property, const QStringList &enumNames)
{
- if (QtVariantProperty *varProp = m_internalToProperty.value(property, 0))
+ if (QtVariantProperty *varProp = m_internalToProperty.value(property, nullptr))
emit q_ptr->attributeChanged(varProp, m_enumNamesAttribute, QVariant(enumNames));
}
void QtVariantPropertyManagerPrivate::slotEnumIconsChanged(QtProperty *property, const QMap<int, QIcon> &enumIcons)
{
- if (QtVariantProperty *varProp = m_internalToProperty.value(property, 0)) {
+ if (QtVariantProperty *varProp = m_internalToProperty.value(property, nullptr)) {
QVariant v;
v.setValue(enumIcons);
emit q_ptr->attributeChanged(varProp, m_enumIconsAttribute, v);
@@ -658,7 +628,7 @@ void QtVariantPropertyManagerPrivate::slotValueChanged(QtProperty *property, con
void QtVariantPropertyManagerPrivate::slotFlagNamesChanged(QtProperty *property, const QStringList &flagNames)
{
- if (QtVariantProperty *varProp = m_internalToProperty.value(property, 0))
+ if (QtVariantProperty *varProp = m_internalToProperty.value(property, nullptr))
emit q_ptr->attributeChanged(varProp, m_flagNamesAttribute, QVariant(flagNames));
}
@@ -682,13 +652,13 @@ void QtVariantPropertyManagerPrivate::slotFlagNamesChanged(QtProperty *property,
the type of its value, can be retrieved using the propertyType()
and valueType() functions respectively.
- A property's type is a QVariant::Type enumerator value, and
+ A property's type is a QMetaType::QType enumerator value, and
usually a property's type is the same as its value type. But for
some properties the types differ, for example for enums, flags and
group types in which case QtVariantPropertyManager provides the
enumTypeId(), flagTypeId() and groupTypeId() functions,
respectively, to identify their property type (the value types are
- QVariant::Int for the enum and flag types, and QVariant::Invalid
+ QMetaType::Int for the enum and flag types, and QMetaType::UnknownType
for the group type).
Use the isPropertyTypeSupported() function to check if a particular
@@ -701,64 +671,64 @@ void QtVariantPropertyManagerPrivate::slotFlagNamesChanged(QtProperty *property,
\li Property Type Id
\row
\li int
- \li QVariant::Int
+ \li QMetaType::Int
\row
\li double
- \li QVariant::Double
+ \li QMetaType::Double
\row
\li bool
- \li QVariant::Bool
+ \li QMetaType::Bool
\row
\li QString
- \li QVariant::String
+ \li QMetaType::QString
\row
\li QDate
- \li QVariant::Date
+ \li QMetaType::QDate
\row
\li QTime
- \li QVariant::Time
+ \li QMetaType::QTime
\row
\li QDateTime
- \li QVariant::DateTime
+ \li QMetaType::QDateTime
\row
\li QKeySequence
- \li QVariant::KeySequence
+ \li QMetaType::QKeySequence
\row
\li QChar
- \li QVariant::Char
+ \li QMetaType::QChar
\row
\li QLocale
- \li QVariant::Locale
+ \li QMetaType::QLocale
\row
\li QPoint
- \li QVariant::Point
+ \li QMetaType::QPoint
\row
\li QPointF
- \li QVariant::PointF
+ \li QMetaType::QPointF
\row
\li QSize
- \li QVariant::Size
+ \li QMetaType::QSize
\row
\li QSizeF
- \li QVariant::SizeF
+ \li QMetaType::QSizeF
\row
\li QRect
- \li QVariant::Rect
+ \li QMetaType::QRect
\row
\li QRectF
- \li QVariant::RectF
+ \li QMetaType::QRectF
\row
\li QColor
- \li QVariant::Color
+ \li QMetaType::QColor
\row
\li QSizePolicy
- \li QVariant::SizePolicy
+ \li QMetaType::QSizePolicy
\row
\li QFont
- \li QVariant::Font
+ \li QMetaType::QFont
\row
\li QCursor
- \li QVariant::Cursor
+ \li QMetaType::QCursor
\row
\li enum
\li enumTypeId()
@@ -771,7 +741,7 @@ void QtVariantPropertyManagerPrivate::slotFlagNamesChanged(QtProperty *property,
\endtable
Each property type can provide additional attributes,
- e.g. QVariant::Int and QVariant::Double provides minimum and
+ e.g. QMetaType::Int and QMetaType::Double provides minimum and
maximum values. The currently supported attributes are:
\table
@@ -782,83 +752,83 @@ void QtVariantPropertyManagerPrivate::slotFlagNamesChanged(QtProperty *property,
\row
\li \c int
\li minimum
- \li QVariant::Int
+ \li QMetaType::Int
\row
\li
\li maximum
- \li QVariant::Int
+ \li QMetaType::Int
\row
\li
\li singleStep
- \li QVariant::Int
+ \li QMetaType::Int
\row
\li \c double
\li minimum
- \li QVariant::Double
+ \li QMetaType::Double
\row
\li
\li maximum
- \li QVariant::Double
+ \li QMetaType::Double
\row
\li
\li singleStep
- \li QVariant::Double
+ \li QMetaType::Double
\row
\li
\li decimals
- \li QVariant::Int
+ \li QMetaType::Int
\row
\li QString
\li regExp
- \li QVariant::RegExp
+ \li QMetaType::QRegExp
\row
\li QDate
\li minimum
- \li QVariant::Date
+ \li QMetaType::QDate
\row
\li
\li maximum
- \li QVariant::Date
+ \li QMetaType::QDate
\row
\li QPointF
\li decimals
- \li QVariant::Int
+ \li QMetaType::Int
\row
\li QSize
\li minimum
- \li QVariant::Size
+ \li QMetaType::QSize
\row
\li
\li maximum
- \li QVariant::Size
+ \li QMetaType::QSize
\row
\li QSizeF
\li minimum
- \li QVariant::SizeF
+ \li QMetaType::QSizeF
\row
\li
\li maximum
- \li QVariant::SizeF
+ \li QMetaType::QSizeF
\row
\li
\li decimals
- \li QVariant::Int
+ \li QMetaType::Int
\row
\li QRect
\li constraint
- \li QVariant::Rect
+ \li QMetaType::QRect
\row
\li QRectF
\li constraint
- \li QVariant::RectF
+ \li QMetaType::QRectF
\row
\li
\li decimals
- \li QVariant::Int
+ \li QMetaType::Int
\row
\li \c enum
\li enumNames
- \li QVariant::StringList
+ \li QMetaType::QStringList
\row
\li
\li enumIcons
@@ -866,7 +836,7 @@ void QtVariantPropertyManagerPrivate::slotFlagNamesChanged(QtProperty *property,
\row
\li \c flag
\li flagNames
- \li QVariant::StringList
+ \li QMetaType::QStringList
\endtable
The attributes for a given property type can be retrieved using
@@ -918,309 +888,384 @@ QtVariantPropertyManager::QtVariantPropertyManager(QObject *parent)
d_ptr->m_propertyType = 0;
// IntPropertyManager
- QtIntPropertyManager *intPropertyManager = new QtIntPropertyManager(this);
- d_ptr->m_typeToPropertyManager[QVariant::Int] = intPropertyManager;
- d_ptr->m_typeToAttributeToAttributeType[QVariant::Int][d_ptr->m_minimumAttribute] = QVariant::Int;
- d_ptr->m_typeToAttributeToAttributeType[QVariant::Int][d_ptr->m_maximumAttribute] = QVariant::Int;
- d_ptr->m_typeToAttributeToAttributeType[QVariant::Int][d_ptr->m_singleStepAttribute] = QVariant::Int;
- d_ptr->m_typeToValueType[QVariant::Int] = QVariant::Int;
- connect(intPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotValueChanged(QtProperty*,int)));
- connect(intPropertyManager, SIGNAL(rangeChanged(QtProperty*,int,int)),
- this, SLOT(slotRangeChanged(QtProperty*,int,int)));
- connect(intPropertyManager, SIGNAL(singleStepChanged(QtProperty*,int)),
- this, SLOT(slotSingleStepChanged(QtProperty*,int)));
+ auto *intPropertyManager = new QtIntPropertyManager(this);
+ d_ptr->m_typeToPropertyManager[QMetaType::Int] = intPropertyManager;
+ d_ptr->m_typeToAttributeToAttributeType[QMetaType::Int][d_ptr->m_minimumAttribute] = QMetaType::Int;
+ d_ptr->m_typeToAttributeToAttributeType[QMetaType::Int][d_ptr->m_maximumAttribute] = QMetaType::Int;
+ d_ptr->m_typeToAttributeToAttributeType[QMetaType::Int][d_ptr->m_singleStepAttribute] = QMetaType::Int;
+ d_ptr->m_typeToValueType[QMetaType::Int] = QMetaType::Int;
+ connect(intPropertyManager, &QtIntPropertyManager::valueChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(intPropertyManager, &QtIntPropertyManager::rangeChanged,
+ this, [this](QtProperty *property, int min, int max)
+ { d_ptr->slotRangeChanged(property, min, max); });
+ connect(intPropertyManager, &QtIntPropertyManager::singleStepChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotSingleStepChanged(property, value); });
// DoublePropertyManager
- QtDoublePropertyManager *doublePropertyManager = new QtDoublePropertyManager(this);
- d_ptr->m_typeToPropertyManager[QVariant::Double] = doublePropertyManager;
- d_ptr->m_typeToAttributeToAttributeType[QVariant::Double][d_ptr->m_minimumAttribute] =
- QVariant::Double;
- d_ptr->m_typeToAttributeToAttributeType[QVariant::Double][d_ptr->m_maximumAttribute] =
- QVariant::Double;
- d_ptr->m_typeToAttributeToAttributeType[QVariant::Double][d_ptr->m_singleStepAttribute] =
- QVariant::Double;
- d_ptr->m_typeToAttributeToAttributeType[QVariant::Double][d_ptr->m_decimalsAttribute] =
- QVariant::Int;
- d_ptr->m_typeToValueType[QVariant::Double] = QVariant::Double;
- connect(doublePropertyManager, SIGNAL(valueChanged(QtProperty*,double)),
- this, SLOT(slotValueChanged(QtProperty*,double)));
- connect(doublePropertyManager, SIGNAL(rangeChanged(QtProperty*,double,double)),
- this, SLOT(slotRangeChanged(QtProperty*,double,double)));
- connect(doublePropertyManager, SIGNAL(singleStepChanged(QtProperty*,double)),
- this, SLOT(slotSingleStepChanged(QtProperty*,double)));
- connect(doublePropertyManager, SIGNAL(decimalsChanged(QtProperty*,int)),
- this, SLOT(slotDecimalsChanged(QtProperty*,int)));
+ auto *doublePropertyManager = new QtDoublePropertyManager(this);
+ d_ptr->m_typeToPropertyManager[QMetaType::Double] = doublePropertyManager;
+ d_ptr->m_typeToAttributeToAttributeType[QMetaType::Double][d_ptr->m_minimumAttribute] =
+ QMetaType::Double;
+ d_ptr->m_typeToAttributeToAttributeType[QMetaType::Double][d_ptr->m_maximumAttribute] =
+ QMetaType::Double;
+ d_ptr->m_typeToAttributeToAttributeType[QMetaType::Double][d_ptr->m_singleStepAttribute] =
+ QMetaType::Double;
+ d_ptr->m_typeToAttributeToAttributeType[QMetaType::Double][d_ptr->m_decimalsAttribute] =
+ QMetaType::Int;
+ d_ptr->m_typeToValueType[QMetaType::Double] = QMetaType::Double;
+ connect(doublePropertyManager, &QtDoublePropertyManager::valueChanged,
+ this, [this](QtProperty *property, double value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(doublePropertyManager, &QtDoublePropertyManager::rangeChanged,
+ this, [this](QtProperty *property, double min, double max)
+ { d_ptr->slotRangeChanged(property, min, max); });
+ connect(doublePropertyManager, &QtDoublePropertyManager::singleStepChanged,
+ this, [this](QtProperty *property, double value)
+ { d_ptr->slotSingleStepChanged(property, value); });
+ connect(doublePropertyManager, &QtDoublePropertyManager::decimalsChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotDecimalsChanged(property, value); });
// BoolPropertyManager
- QtBoolPropertyManager *boolPropertyManager = new QtBoolPropertyManager(this);
- d_ptr->m_typeToPropertyManager[QVariant::Bool] = boolPropertyManager;
- d_ptr->m_typeToValueType[QVariant::Bool] = QVariant::Bool;
- connect(boolPropertyManager, SIGNAL(valueChanged(QtProperty*,bool)),
- this, SLOT(slotValueChanged(QtProperty*,bool)));
+ auto *boolPropertyManager = new QtBoolPropertyManager(this);
+ d_ptr->m_typeToPropertyManager[QMetaType::Bool] = boolPropertyManager;
+ d_ptr->m_typeToValueType[QMetaType::Bool] = QMetaType::Bool;
+ connect(boolPropertyManager, &QtBoolPropertyManager::valueChanged,
+ this, [this](QtProperty *property, bool value)
+ { d_ptr->slotValueChanged(property, value); });
// StringPropertyManager
- QtStringPropertyManager *stringPropertyManager = new QtStringPropertyManager(this);
- d_ptr->m_typeToPropertyManager[QVariant::String] = stringPropertyManager;
- d_ptr->m_typeToValueType[QVariant::String] = QVariant::String;
- d_ptr->m_typeToAttributeToAttributeType[QVariant::String][d_ptr->m_regExpAttribute] =
- QVariant::RegularExpression;
- connect(stringPropertyManager, SIGNAL(valueChanged(QtProperty*,QString)),
- this, SLOT(slotValueChanged(QtProperty*,QString)));
- connect(stringPropertyManager, SIGNAL(regExpChanged(QtProperty*,QRegularExpression)),
- this, SLOT(slotRegExpChanged(QtProperty*,QRegularExpression)));
+ auto *stringPropertyManager = new QtStringPropertyManager(this);
+ d_ptr->m_typeToPropertyManager[QMetaType::QString] = stringPropertyManager;
+ d_ptr->m_typeToValueType[QMetaType::QString] = QMetaType::QString;
+ d_ptr->m_typeToAttributeToAttributeType[QMetaType::QString][d_ptr->m_regExpAttribute] =
+ QMetaType::QRegularExpression;
+ connect(stringPropertyManager, &QtStringPropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QString &value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(stringPropertyManager, &QtStringPropertyManager::regExpChanged,
+ this, [this](QtProperty *property, const QRegularExpression &value)
+ { d_ptr->slotRegExpChanged(property, value); });
// DatePropertyManager
- QtDatePropertyManager *datePropertyManager = new QtDatePropertyManager(this);
- d_ptr->m_typeToPropertyManager[QVariant::Date] = datePropertyManager;
- d_ptr->m_typeToValueType[QVariant::Date] = QVariant::Date;
- d_ptr->m_typeToAttributeToAttributeType[QVariant::Date][d_ptr->m_minimumAttribute] =
- QVariant::Date;
- d_ptr->m_typeToAttributeToAttributeType[QVariant::Date][d_ptr->m_maximumAttribute] =
- QVariant::Date;
- connect(datePropertyManager, SIGNAL(valueChanged(QtProperty*,QDate)),
- this, SLOT(slotValueChanged(QtProperty*,QDate)));
- connect(datePropertyManager, SIGNAL(rangeChanged(QtProperty*,QDate,QDate)),
- this, SLOT(slotRangeChanged(QtProperty*,QDate,QDate)));
+ auto *datePropertyManager = new QtDatePropertyManager(this);
+ d_ptr->m_typeToPropertyManager[QMetaType::QDate] = datePropertyManager;
+ d_ptr->m_typeToValueType[QMetaType::QDate] = QMetaType::QDate;
+ d_ptr->m_typeToAttributeToAttributeType[QMetaType::QDate][d_ptr->m_minimumAttribute] =
+ QMetaType::QDate;
+ d_ptr->m_typeToAttributeToAttributeType[QMetaType::QDate][d_ptr->m_maximumAttribute] =
+ QMetaType::QDate;
+ connect(datePropertyManager, &QtDatePropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QDate &value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(datePropertyManager, &QtDatePropertyManager::rangeChanged,
+ this, [this](QtProperty *property, const QDate &min, const QDate &max)
+ { d_ptr->slotRangeChanged(property, min, max); });
// TimePropertyManager
- QtTimePropertyManager *timePropertyManager = new QtTimePropertyManager(this);
- d_ptr->m_typeToPropertyManager[QVariant::Time] = timePropertyManager;
- d_ptr->m_typeToValueType[QVariant::Time] = QVariant::Time;
- connect(timePropertyManager, SIGNAL(valueChanged(QtProperty*,QTime)),
- this, SLOT(slotValueChanged(QtProperty*,QTime)));
+ auto *timePropertyManager = new QtTimePropertyManager(this);
+ d_ptr->m_typeToPropertyManager[QMetaType::QTime] = timePropertyManager;
+ d_ptr->m_typeToValueType[QMetaType::QTime] = QMetaType::QTime;
+ connect(timePropertyManager, &QtTimePropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QTime &value)
+ { d_ptr->slotValueChanged(property, value); });
// DateTimePropertyManager
- QtDateTimePropertyManager *dateTimePropertyManager = new QtDateTimePropertyManager(this);
- d_ptr->m_typeToPropertyManager[QVariant::DateTime] = dateTimePropertyManager;
- d_ptr->m_typeToValueType[QVariant::DateTime] = QVariant::DateTime;
- connect(dateTimePropertyManager, SIGNAL(valueChanged(QtProperty*,QDateTime)),
- this, SLOT(slotValueChanged(QtProperty*,QDateTime)));
+ auto *dateTimePropertyManager = new QtDateTimePropertyManager(this);
+ d_ptr->m_typeToPropertyManager[QMetaType::QDateTime] = dateTimePropertyManager;
+ d_ptr->m_typeToValueType[QMetaType::QDateTime] = QMetaType::QDateTime;
+ connect(dateTimePropertyManager, &QtDateTimePropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QDateTime &value)
+ { d_ptr->slotValueChanged(property, value); });
// KeySequencePropertyManager
- QtKeySequencePropertyManager *keySequencePropertyManager = new QtKeySequencePropertyManager(this);
- d_ptr->m_typeToPropertyManager[QVariant::KeySequence] = keySequencePropertyManager;
- d_ptr->m_typeToValueType[QVariant::KeySequence] = QVariant::KeySequence;
- connect(keySequencePropertyManager, SIGNAL(valueChanged(QtProperty*,QKeySequence)),
- this, SLOT(slotValueChanged(QtProperty*,QKeySequence)));
+ auto *keySequencePropertyManager = new QtKeySequencePropertyManager(this);
+ d_ptr->m_typeToPropertyManager[QMetaType::QKeySequence] = keySequencePropertyManager;
+ d_ptr->m_typeToValueType[QMetaType::QKeySequence] = QMetaType::QKeySequence;
+ connect(keySequencePropertyManager, &QtKeySequencePropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QKeySequence &value)
+ { d_ptr->slotValueChanged(property, value); });
// CharPropertyManager
- QtCharPropertyManager *charPropertyManager = new QtCharPropertyManager(this);
- d_ptr->m_typeToPropertyManager[QVariant::Char] = charPropertyManager;
- d_ptr->m_typeToValueType[QVariant::Char] = QVariant::Char;
- connect(charPropertyManager, SIGNAL(valueChanged(QtProperty*,QChar)),
- this, SLOT(slotValueChanged(QtProperty*,QChar)));
+ auto *charPropertyManager = new QtCharPropertyManager(this);
+ d_ptr->m_typeToPropertyManager[QMetaType::QChar] = charPropertyManager;
+ d_ptr->m_typeToValueType[QMetaType::QChar] = QMetaType::QChar;
+ connect(charPropertyManager, &QtCharPropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QChar &value)
+ { d_ptr->slotValueChanged(property, value); });
// LocalePropertyManager
- QtLocalePropertyManager *localePropertyManager = new QtLocalePropertyManager(this);
- d_ptr->m_typeToPropertyManager[QVariant::Locale] = localePropertyManager;
- d_ptr->m_typeToValueType[QVariant::Locale] = QVariant::Locale;
- connect(localePropertyManager, SIGNAL(valueChanged(QtProperty*,QLocale)),
- this, SLOT(slotValueChanged(QtProperty*,QLocale)));
- connect(localePropertyManager->subEnumPropertyManager(), SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotValueChanged(QtProperty*,int)));
- connect(localePropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
- connect(localePropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
+ auto *localePropertyManager = new QtLocalePropertyManager(this);
+ d_ptr->m_typeToPropertyManager[QMetaType::QLocale] = localePropertyManager;
+ d_ptr->m_typeToValueType[QMetaType::QLocale] = QMetaType::QLocale;
+ connect(localePropertyManager, &QtLocalePropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QLocale &value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(localePropertyManager->subEnumPropertyManager(), &QtEnumPropertyManager::valueChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(localePropertyManager, &QtAbstractPropertyManager::propertyInserted,
+ this, [this](QtProperty *property, QtProperty *parent, QtProperty *after)
+ { d_ptr->slotPropertyInserted(property, parent, after); });
+ connect(localePropertyManager, &QtAbstractPropertyManager::propertyRemoved,
+ this, [this](QtProperty *property, QtProperty *parent)
+ { d_ptr->slotPropertyRemoved(property, parent); });
// PointPropertyManager
- QtPointPropertyManager *pointPropertyManager = new QtPointPropertyManager(this);
- d_ptr->m_typeToPropertyManager[QVariant::Point] = pointPropertyManager;
- d_ptr->m_typeToValueType[QVariant::Point] = QVariant::Point;
- connect(pointPropertyManager, SIGNAL(valueChanged(QtProperty*,QPoint)),
- this, SLOT(slotValueChanged(QtProperty*,QPoint)));
- connect(pointPropertyManager->subIntPropertyManager(), SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotValueChanged(QtProperty*,int)));
- connect(pointPropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
- connect(pointPropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
+ auto *pointPropertyManager = new QtPointPropertyManager(this);
+ d_ptr->m_typeToPropertyManager[QMetaType::QPoint] = pointPropertyManager;
+ d_ptr->m_typeToValueType[QMetaType::QPoint] = QMetaType::QPoint;
+ connect(pointPropertyManager, &QtPointPropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QPoint &value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(pointPropertyManager->subIntPropertyManager(), &QtIntPropertyManager::valueChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(pointPropertyManager, &QtAbstractPropertyManager::propertyInserted,
+ this, [this](QtProperty *property, QtProperty *parent, QtProperty *after)
+ { d_ptr->slotPropertyInserted(property, parent, after); });
+ connect(pointPropertyManager, &QtAbstractPropertyManager::propertyRemoved,
+ this, [this](QtProperty *property, QtProperty *parent)
+ { d_ptr->slotPropertyRemoved(property, parent); });
// PointFPropertyManager
- QtPointFPropertyManager *pointFPropertyManager = new QtPointFPropertyManager(this);
- d_ptr->m_typeToPropertyManager[QVariant::PointF] = pointFPropertyManager;
- d_ptr->m_typeToValueType[QVariant::PointF] = QVariant::PointF;
- d_ptr->m_typeToAttributeToAttributeType[QVariant::PointF][d_ptr->m_decimalsAttribute] =
- QVariant::Int;
- connect(pointFPropertyManager, SIGNAL(valueChanged(QtProperty*,QPointF)),
- this, SLOT(slotValueChanged(QtProperty*,QPointF)));
- connect(pointFPropertyManager, SIGNAL(decimalsChanged(QtProperty*,int)),
- this, SLOT(slotDecimalsChanged(QtProperty*,int)));
- connect(pointFPropertyManager->subDoublePropertyManager(), SIGNAL(valueChanged(QtProperty*,double)),
- this, SLOT(slotValueChanged(QtProperty*,double)));
- connect(pointFPropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
- connect(pointFPropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
+ auto *pointFPropertyManager = new QtPointFPropertyManager(this);
+ d_ptr->m_typeToPropertyManager[QMetaType::QPointF] = pointFPropertyManager;
+ d_ptr->m_typeToValueType[QMetaType::QPointF] = QMetaType::QPointF;
+ d_ptr->m_typeToAttributeToAttributeType[QMetaType::QPointF][d_ptr->m_decimalsAttribute] =
+ QMetaType::Int;
+ connect(pointFPropertyManager, &QtPointFPropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QPointF &value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(pointFPropertyManager, &QtPointFPropertyManager::decimalsChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotDecimalsChanged(property, value); });
+ connect(pointFPropertyManager->subDoublePropertyManager(), &QtDoublePropertyManager::valueChanged,
+ this, [this](QtProperty *property, double value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(pointFPropertyManager, &QtAbstractPropertyManager::propertyInserted,
+ this, [this](QtProperty *property, QtProperty *parent, QtProperty *after)
+ { d_ptr->slotPropertyInserted(property, parent, after); });
+ connect(pointFPropertyManager, &QtAbstractPropertyManager::propertyRemoved,
+ this, [this](QtProperty *property, QtProperty *parent)
+ { d_ptr->slotPropertyRemoved(property, parent); });
// SizePropertyManager
- QtSizePropertyManager *sizePropertyManager = new QtSizePropertyManager(this);
- d_ptr->m_typeToPropertyManager[QVariant::Size] = sizePropertyManager;
- d_ptr->m_typeToValueType[QVariant::Size] = QVariant::Size;
- d_ptr->m_typeToAttributeToAttributeType[QVariant::Size][d_ptr->m_minimumAttribute] =
- QVariant::Size;
- d_ptr->m_typeToAttributeToAttributeType[QVariant::Size][d_ptr->m_maximumAttribute] =
- QVariant::Size;
- connect(sizePropertyManager, SIGNAL(valueChanged(QtProperty*,QSize)),
- this, SLOT(slotValueChanged(QtProperty*,QSize)));
- connect(sizePropertyManager, SIGNAL(rangeChanged(QtProperty*,QSize,QSize)),
- this, SLOT(slotRangeChanged(QtProperty*,QSize,QSize)));
- connect(sizePropertyManager->subIntPropertyManager(), SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotValueChanged(QtProperty*,int)));
- connect(sizePropertyManager->subIntPropertyManager(), SIGNAL(rangeChanged(QtProperty*,int,int)),
- this, SLOT(slotRangeChanged(QtProperty*,int,int)));
- connect(sizePropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
- connect(sizePropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
+ auto *sizePropertyManager = new QtSizePropertyManager(this);
+ d_ptr->m_typeToPropertyManager[QMetaType::QSize] = sizePropertyManager;
+ d_ptr->m_typeToValueType[QMetaType::QSize] = QMetaType::QSize;
+ d_ptr->m_typeToAttributeToAttributeType[QMetaType::QSize][d_ptr->m_minimumAttribute] =
+ QMetaType::QSize;
+ d_ptr->m_typeToAttributeToAttributeType[QMetaType::QSize][d_ptr->m_maximumAttribute] =
+ QMetaType::QSize;
+ connect(sizePropertyManager, &QtSizePropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QSize &value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(sizePropertyManager, &QtSizePropertyManager::rangeChanged,
+ this, [this](QtProperty *property, const QSize &min, const QSize &max)
+ { d_ptr->slotRangeChanged(property, min, max); });
+ connect(sizePropertyManager->subIntPropertyManager(), &QtIntPropertyManager::valueChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(sizePropertyManager->subIntPropertyManager(), &QtIntPropertyManager::rangeChanged,
+ this, [this](QtProperty *property, int min, int max)
+ { d_ptr->slotRangeChanged(property, min, max); });
+ connect(sizePropertyManager, &QtAbstractPropertyManager::propertyInserted,
+ this, [this](QtProperty *property, QtProperty *parent, QtProperty *after)
+ { d_ptr->slotPropertyInserted(property, parent, after); });
+ connect(sizePropertyManager, &QtAbstractPropertyManager::propertyRemoved,
+ this, [this](QtProperty *property, QtProperty *parent)
+ { d_ptr->slotPropertyRemoved(property, parent); });
// SizeFPropertyManager
- QtSizeFPropertyManager *sizeFPropertyManager = new QtSizeFPropertyManager(this);
- d_ptr->m_typeToPropertyManager[QVariant::SizeF] = sizeFPropertyManager;
- d_ptr->m_typeToValueType[QVariant::SizeF] = QVariant::SizeF;
- d_ptr->m_typeToAttributeToAttributeType[QVariant::SizeF][d_ptr->m_minimumAttribute] =
- QVariant::SizeF;
- d_ptr->m_typeToAttributeToAttributeType[QVariant::SizeF][d_ptr->m_maximumAttribute] =
- QVariant::SizeF;
- d_ptr->m_typeToAttributeToAttributeType[QVariant::SizeF][d_ptr->m_decimalsAttribute] =
- QVariant::Int;
- connect(sizeFPropertyManager, SIGNAL(valueChanged(QtProperty*,QSizeF)),
- this, SLOT(slotValueChanged(QtProperty*,QSizeF)));
- connect(sizeFPropertyManager, SIGNAL(rangeChanged(QtProperty*,QSizeF,QSizeF)),
- this, SLOT(slotRangeChanged(QtProperty*,QSizeF,QSizeF)));
- connect(sizeFPropertyManager, SIGNAL(decimalsChanged(QtProperty*,int)),
- this, SLOT(slotDecimalsChanged(QtProperty*,int)));
- connect(sizeFPropertyManager->subDoublePropertyManager(), SIGNAL(valueChanged(QtProperty*,double)),
- this, SLOT(slotValueChanged(QtProperty*,double)));
- connect(sizeFPropertyManager->subDoublePropertyManager(), SIGNAL(rangeChanged(QtProperty*,double,double)),
- this, SLOT(slotRangeChanged(QtProperty*,double,double)));
- connect(sizeFPropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
- connect(sizeFPropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
+ auto *sizeFPropertyManager = new QtSizeFPropertyManager(this);
+ d_ptr->m_typeToPropertyManager[QMetaType::QSizeF] = sizeFPropertyManager;
+ d_ptr->m_typeToValueType[QMetaType::QSizeF] = QMetaType::QSizeF;
+ d_ptr->m_typeToAttributeToAttributeType[QMetaType::QSizeF][d_ptr->m_minimumAttribute] =
+ QMetaType::QSizeF;
+ d_ptr->m_typeToAttributeToAttributeType[QMetaType::QSizeF][d_ptr->m_maximumAttribute] =
+ QMetaType::QSizeF;
+ d_ptr->m_typeToAttributeToAttributeType[QMetaType::QSizeF][d_ptr->m_decimalsAttribute] =
+ QMetaType::Int;
+ connect(sizeFPropertyManager, &QtSizeFPropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QSizeF &value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(sizeFPropertyManager, &QtSizeFPropertyManager::rangeChanged,
+ this, [this](QtProperty *property, const QSizeF &min, const QSizeF &max)
+ { d_ptr->slotRangeChanged(property, min, max); });
+ connect(sizeFPropertyManager->subDoublePropertyManager(), &QtDoublePropertyManager::valueChanged,
+ this, [this](QtProperty *property, double value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(sizeFPropertyManager->subDoublePropertyManager(), &QtDoublePropertyManager::rangeChanged,
+ this, [this](QtProperty *property, double min, double max)
+ { d_ptr->slotRangeChanged(property, min, max); });
+ connect(sizeFPropertyManager, &QtAbstractPropertyManager::propertyInserted,
+ this, [this](QtProperty *property, QtProperty *parent, QtProperty *after)
+ { d_ptr->slotPropertyInserted(property, parent, after); });
+ connect(sizeFPropertyManager, &QtAbstractPropertyManager::propertyRemoved,
+ this, [this](QtProperty *property, QtProperty *parent)
+ { d_ptr->slotPropertyRemoved(property, parent); });
// RectPropertyManager
- QtRectPropertyManager *rectPropertyManager = new QtRectPropertyManager(this);
- d_ptr->m_typeToPropertyManager[QVariant::Rect] = rectPropertyManager;
- d_ptr->m_typeToValueType[QVariant::Rect] = QVariant::Rect;
- d_ptr->m_typeToAttributeToAttributeType[QVariant::Rect][d_ptr->m_constraintAttribute] =
- QVariant::Rect;
- connect(rectPropertyManager, SIGNAL(valueChanged(QtProperty*,QRect)),
- this, SLOT(slotValueChanged(QtProperty*,QRect)));
- connect(rectPropertyManager, SIGNAL(constraintChanged(QtProperty*,QRect)),
- this, SLOT(slotConstraintChanged(QtProperty*,QRect)));
- connect(rectPropertyManager->subIntPropertyManager(), SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotValueChanged(QtProperty*,int)));
- connect(rectPropertyManager->subIntPropertyManager(), SIGNAL(rangeChanged(QtProperty*,int,int)),
- this, SLOT(slotRangeChanged(QtProperty*,int,int)));
- connect(rectPropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
- connect(rectPropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
+ auto *rectPropertyManager = new QtRectPropertyManager(this);
+ d_ptr->m_typeToPropertyManager[QMetaType::QRect] = rectPropertyManager;
+ d_ptr->m_typeToValueType[QMetaType::QRect] = QMetaType::QRect;
+ d_ptr->m_typeToAttributeToAttributeType[QMetaType::QRect][d_ptr->m_constraintAttribute] =
+ QMetaType::QRect;
+ connect(rectPropertyManager, &QtRectPropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QRect &value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(rectPropertyManager, &QtRectPropertyManager::constraintChanged,
+ this, [this](QtProperty *property, const QRect &value)
+ { d_ptr->slotConstraintChanged(property, value); });
+ connect(rectPropertyManager->subIntPropertyManager(), &QtIntPropertyManager::valueChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(rectPropertyManager->subIntPropertyManager(), &QtIntPropertyManager::rangeChanged,
+ this, [this](QtProperty *property, int min, int max)
+ { d_ptr->slotRangeChanged(property, min, max); });
+ connect(rectPropertyManager, &QtAbstractPropertyManager::propertyInserted,
+ this, [this](QtProperty *property, QtProperty *parent, QtProperty *after)
+ { d_ptr->slotPropertyInserted(property, parent, after); });
+ connect(rectPropertyManager, &QtAbstractPropertyManager::propertyRemoved,
+ this, [this](QtProperty *property, QtProperty *parent)
+ { d_ptr->slotPropertyRemoved(property, parent); });
// RectFPropertyManager
- QtRectFPropertyManager *rectFPropertyManager = new QtRectFPropertyManager(this);
- d_ptr->m_typeToPropertyManager[QVariant::RectF] = rectFPropertyManager;
- d_ptr->m_typeToValueType[QVariant::RectF] = QVariant::RectF;
- d_ptr->m_typeToAttributeToAttributeType[QVariant::RectF][d_ptr->m_constraintAttribute] =
- QVariant::RectF;
- d_ptr->m_typeToAttributeToAttributeType[QVariant::RectF][d_ptr->m_decimalsAttribute] =
- QVariant::Int;
- connect(rectFPropertyManager, SIGNAL(valueChanged(QtProperty*,QRectF)),
- this, SLOT(slotValueChanged(QtProperty*,QRectF)));
- connect(rectFPropertyManager, SIGNAL(constraintChanged(QtProperty*,QRectF)),
- this, SLOT(slotConstraintChanged(QtProperty*,QRectF)));
- connect(rectFPropertyManager, SIGNAL(decimalsChanged(QtProperty*,int)),
- this, SLOT(slotDecimalsChanged(QtProperty*,int)));
- connect(rectFPropertyManager->subDoublePropertyManager(), SIGNAL(valueChanged(QtProperty*,double)),
- this, SLOT(slotValueChanged(QtProperty*,double)));
- connect(rectFPropertyManager->subDoublePropertyManager(), SIGNAL(rangeChanged(QtProperty*,double,double)),
- this, SLOT(slotRangeChanged(QtProperty*,double,double)));
- connect(rectFPropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
- connect(rectFPropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
+ auto *rectFPropertyManager = new QtRectFPropertyManager(this);
+ d_ptr->m_typeToPropertyManager[QMetaType::QRectF] = rectFPropertyManager;
+ d_ptr->m_typeToValueType[QMetaType::QRectF] = QMetaType::QRectF;
+ d_ptr->m_typeToAttributeToAttributeType[QMetaType::QRectF][d_ptr->m_constraintAttribute] =
+ QMetaType::QRectF;
+ d_ptr->m_typeToAttributeToAttributeType[QMetaType::QRectF][d_ptr->m_decimalsAttribute] =
+ QMetaType::Int;
+ connect(rectFPropertyManager, &QtRectFPropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QRectF &value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(rectFPropertyManager, &QtRectFPropertyManager::constraintChanged,
+ this, [this](QtProperty *property, const QRectF &value)
+ { d_ptr->slotConstraintChanged(property, value); });
+ connect(rectFPropertyManager->subDoublePropertyManager(), &QtDoublePropertyManager::valueChanged,
+ this, [this](QtProperty *property, double value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(rectFPropertyManager->subDoublePropertyManager(), &QtDoublePropertyManager::rangeChanged,
+ this, [this](QtProperty *property, double min, double max)
+ { d_ptr->slotRangeChanged(property, min, max); });
+ connect(rectFPropertyManager, &QtAbstractPropertyManager::propertyInserted,
+ this, [this](QtProperty *property, QtProperty *parent, QtProperty *after)
+ { d_ptr->slotPropertyInserted(property, parent, after); });
+ connect(rectFPropertyManager, &QtAbstractPropertyManager::propertyRemoved,
+ this, [this](QtProperty *property, QtProperty *parent)
+ { d_ptr->slotPropertyRemoved(property, parent); });
// ColorPropertyManager
- QtColorPropertyManager *colorPropertyManager = new QtColorPropertyManager(this);
- d_ptr->m_typeToPropertyManager[QVariant::Color] = colorPropertyManager;
- d_ptr->m_typeToValueType[QVariant::Color] = QVariant::Color;
- connect(colorPropertyManager, SIGNAL(valueChanged(QtProperty*,QColor)),
- this, SLOT(slotValueChanged(QtProperty*,QColor)));
- connect(colorPropertyManager->subIntPropertyManager(), SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotValueChanged(QtProperty*,int)));
- connect(colorPropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
- connect(colorPropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
+ auto *colorPropertyManager = new QtColorPropertyManager(this);
+ d_ptr->m_typeToPropertyManager[QMetaType::QColor] = colorPropertyManager;
+ d_ptr->m_typeToValueType[QMetaType::QColor] = QMetaType::QColor;
+ connect(colorPropertyManager, &QtColorPropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QColor &value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(colorPropertyManager->subIntPropertyManager(), &QtIntPropertyManager::valueChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(colorPropertyManager, &QtAbstractPropertyManager::propertyInserted,
+ this, [this](QtProperty *property, QtProperty *parent, QtProperty *after)
+ { d_ptr->slotPropertyInserted(property, parent, after); });
+ connect(colorPropertyManager, &QtAbstractPropertyManager::propertyRemoved,
+ this, [this](QtProperty *property, QtProperty *parent)
+ { d_ptr->slotPropertyRemoved(property, parent); });
// EnumPropertyManager
int enumId = enumTypeId();
- QtEnumPropertyManager *enumPropertyManager = new QtEnumPropertyManager(this);
+ auto *enumPropertyManager = new QtEnumPropertyManager(this);
d_ptr->m_typeToPropertyManager[enumId] = enumPropertyManager;
- d_ptr->m_typeToValueType[enumId] = QVariant::Int;
+ d_ptr->m_typeToValueType[enumId] = QMetaType::Int;
d_ptr->m_typeToAttributeToAttributeType[enumId][d_ptr->m_enumNamesAttribute] =
- QVariant::StringList;
+ QMetaType::QStringList;
d_ptr->m_typeToAttributeToAttributeType[enumId][d_ptr->m_enumIconsAttribute] =
iconMapTypeId();
- connect(enumPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotValueChanged(QtProperty*,int)));
- connect(enumPropertyManager, SIGNAL(enumNamesChanged(QtProperty*,QStringList)),
- this, SLOT(slotEnumNamesChanged(QtProperty*,QStringList)));
- connect(enumPropertyManager, SIGNAL(enumIconsChanged(QtProperty*,QMap<int,QIcon>)),
- this, SLOT(slotEnumIconsChanged(QtProperty*,QMap<int,QIcon>)));
+ connect(enumPropertyManager, &QtEnumPropertyManager::valueChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(enumPropertyManager, &QtEnumPropertyManager::enumNamesChanged,
+ this, [this](QtProperty *property, const QStringList &value)
+ { d_ptr->slotEnumNamesChanged(property, value); });
+ connect(enumPropertyManager, &QtEnumPropertyManager::enumIconsChanged,
+ this, [this](QtProperty *property, const QMap<int,QIcon> &value)
+ { d_ptr->slotEnumIconsChanged(property, value); });
// SizePolicyPropertyManager
- QtSizePolicyPropertyManager *sizePolicyPropertyManager = new QtSizePolicyPropertyManager(this);
- d_ptr->m_typeToPropertyManager[QVariant::SizePolicy] = sizePolicyPropertyManager;
- d_ptr->m_typeToValueType[QVariant::SizePolicy] = QVariant::SizePolicy;
- connect(sizePolicyPropertyManager, SIGNAL(valueChanged(QtProperty*,QSizePolicy)),
- this, SLOT(slotValueChanged(QtProperty*,QSizePolicy)));
- connect(sizePolicyPropertyManager->subIntPropertyManager(), SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotValueChanged(QtProperty*,int)));
- connect(sizePolicyPropertyManager->subIntPropertyManager(), SIGNAL(rangeChanged(QtProperty*,int,int)),
- this, SLOT(slotRangeChanged(QtProperty*,int,int)));
- connect(sizePolicyPropertyManager->subEnumPropertyManager(), SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotValueChanged(QtProperty*,int)));
- connect(sizePolicyPropertyManager->subEnumPropertyManager(),
- SIGNAL(enumNamesChanged(QtProperty*,QStringList)),
- this, SLOT(slotEnumNamesChanged(QtProperty*,QStringList)));
- connect(sizePolicyPropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
- connect(sizePolicyPropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
+ auto *sizePolicyPropertyManager = new QtSizePolicyPropertyManager(this);
+ d_ptr->m_typeToPropertyManager[QMetaType::QSizePolicy] = sizePolicyPropertyManager;
+ d_ptr->m_typeToValueType[QMetaType::QSizePolicy] = QMetaType::QSizePolicy;
+ connect(sizePolicyPropertyManager, &QtSizePolicyPropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QSizePolicy &value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(sizePolicyPropertyManager->subIntPropertyManager(), &QtIntPropertyManager::valueChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(sizePolicyPropertyManager->subIntPropertyManager(), &QtIntPropertyManager::rangeChanged,
+ this, [this](QtProperty *property, int min, int max)
+ { d_ptr->slotRangeChanged(property, min, max); });
+ connect(sizePolicyPropertyManager->subEnumPropertyManager(), &QtEnumPropertyManager::valueChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(sizePolicyPropertyManager->subEnumPropertyManager(), &QtEnumPropertyManager::enumNamesChanged,
+ this, [this](QtProperty *property, const QStringList &value)
+ { d_ptr->slotEnumNamesChanged(property, value); });
+ connect(sizePolicyPropertyManager, &QtAbstractPropertyManager::propertyInserted,
+ this, [this](QtProperty *property, QtProperty *parent, QtProperty *after)
+ { d_ptr->slotPropertyInserted(property, parent, after); });
+ connect(sizePolicyPropertyManager, &QtAbstractPropertyManager::propertyRemoved,
+ this, [this](QtProperty *property, QtProperty *parent)
+ { d_ptr->slotPropertyRemoved(property, parent); });
// FontPropertyManager
- QtFontPropertyManager *fontPropertyManager = new QtFontPropertyManager(this);
- d_ptr->m_typeToPropertyManager[QVariant::Font] = fontPropertyManager;
- d_ptr->m_typeToValueType[QVariant::Font] = QVariant::Font;
- connect(fontPropertyManager, SIGNAL(valueChanged(QtProperty*,QFont)),
- this, SLOT(slotValueChanged(QtProperty*,QFont)));
- connect(fontPropertyManager->subIntPropertyManager(), SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotValueChanged(QtProperty*,int)));
- connect(fontPropertyManager->subIntPropertyManager(), SIGNAL(rangeChanged(QtProperty*,int,int)),
- this, SLOT(slotRangeChanged(QtProperty*,int,int)));
- connect(fontPropertyManager->subEnumPropertyManager(), SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotValueChanged(QtProperty*,int)));
- connect(fontPropertyManager->subEnumPropertyManager(),
- SIGNAL(enumNamesChanged(QtProperty*,QStringList)),
- this, SLOT(slotEnumNamesChanged(QtProperty*,QStringList)));
- connect(fontPropertyManager->subBoolPropertyManager(), SIGNAL(valueChanged(QtProperty*,bool)),
- this, SLOT(slotValueChanged(QtProperty*,bool)));
- connect(fontPropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
- connect(fontPropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
+ auto *fontPropertyManager = new QtFontPropertyManager(this);
+ d_ptr->m_typeToPropertyManager[QMetaType::QFont] = fontPropertyManager;
+ d_ptr->m_typeToValueType[QMetaType::QFont] = QMetaType::QFont;
+ connect(fontPropertyManager, &QtFontPropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QFont &value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(fontPropertyManager->subIntPropertyManager(), &QtIntPropertyManager::valueChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(fontPropertyManager->subIntPropertyManager(), &QtIntPropertyManager::rangeChanged,
+ this, [this](QtProperty *property, int min, int max)
+ { d_ptr->slotRangeChanged(property, min, max); });
+ connect(fontPropertyManager->subEnumPropertyManager(), &QtEnumPropertyManager::valueChanged,
+ this, [this](QtProperty *property, int value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(fontPropertyManager->subEnumPropertyManager(), &QtEnumPropertyManager::enumNamesChanged,
+ this, [this](QtProperty *property, const QStringList &value)
+ { d_ptr->slotEnumNamesChanged(property, value); });
+ connect(fontPropertyManager->subBoolPropertyManager(), &QtBoolPropertyManager::valueChanged,
+ this, [this](QtProperty *property, bool value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(fontPropertyManager, &QtAbstractPropertyManager::propertyInserted,
+ this, [this](QtProperty *property, QtProperty *parent, QtProperty *after)
+ { d_ptr->slotPropertyInserted(property, parent, after); });
+ connect(fontPropertyManager, &QtAbstractPropertyManager::propertyRemoved,
+ this, [this](QtProperty *property, QtProperty *parent)
+ { d_ptr->slotPropertyRemoved(property, parent); });
// CursorPropertyManager
- QtCursorPropertyManager *cursorPropertyManager = new QtCursorPropertyManager(this);
- d_ptr->m_typeToPropertyManager[QVariant::Cursor] = cursorPropertyManager;
- d_ptr->m_typeToValueType[QVariant::Cursor] = QVariant::Cursor;
- connect(cursorPropertyManager, SIGNAL(valueChanged(QtProperty*,QCursor)),
- this, SLOT(slotValueChanged(QtProperty*,QCursor)));
+ auto *cursorPropertyManager = new QtCursorPropertyManager(this);
+ d_ptr->m_typeToPropertyManager[QMetaType::QCursor] = cursorPropertyManager;
+ d_ptr->m_typeToValueType[QMetaType::QCursor] = QMetaType::QCursor;
+ connect(cursorPropertyManager, &QtCursorPropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QCursor &value)
+ { d_ptr->slotValueChanged(property, value); });
// FlagPropertyManager
int flagId = flagTypeId();
- QtFlagPropertyManager *flagPropertyManager = new QtFlagPropertyManager(this);
+ auto *flagPropertyManager = new QtFlagPropertyManager(this);
d_ptr->m_typeToPropertyManager[flagId] = flagPropertyManager;
- d_ptr->m_typeToValueType[flagId] = QVariant::Int;
+ d_ptr->m_typeToValueType[flagId] = QMetaType::Int;
d_ptr->m_typeToAttributeToAttributeType[flagId][d_ptr->m_flagNamesAttribute] =
- QVariant::StringList;
- connect(flagPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
- this, SLOT(slotValueChanged(QtProperty*,int)));
- connect(flagPropertyManager, SIGNAL(flagNamesChanged(QtProperty*,QStringList)),
- this, SLOT(slotFlagNamesChanged(QtProperty*,QStringList)));
- connect(flagPropertyManager->subBoolPropertyManager(), SIGNAL(valueChanged(QtProperty*,bool)),
- this, SLOT(slotValueChanged(QtProperty*,bool)));
- connect(flagPropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
- connect(flagPropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
- this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
+ QMetaType::QStringList;
+ connect(flagPropertyManager, &QtFlagPropertyManager::valueChanged,
+ this, [this](QtProperty *property, const QColor &value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(flagPropertyManager, &QtFlagPropertyManager::flagNamesChanged,
+ this, [this](QtProperty *property, const QStringList &value)
+ { d_ptr->slotFlagNamesChanged(property, value); });
+ connect(flagPropertyManager->subBoolPropertyManager(), &QtBoolPropertyManager::valueChanged,
+ this, [this](QtProperty *property, bool value)
+ { d_ptr->slotValueChanged(property, value); });
+ connect(flagPropertyManager, &QtAbstractPropertyManager::propertyInserted,
+ this, [this](QtProperty *property, QtProperty *parent, QtProperty *after)
+ { d_ptr->slotPropertyInserted(property, parent, after); });
+ connect(flagPropertyManager, &QtAbstractPropertyManager::propertyRemoved,
+ this, [this](QtProperty *property, QtProperty *parent)
+ { d_ptr->slotPropertyRemoved(property, parent); });
// FlagPropertyManager
int groupId = groupTypeId();
- QtGroupPropertyManager *groupPropertyManager = new QtGroupPropertyManager(this);
+ auto *groupPropertyManager = new QtGroupPropertyManager(this);
d_ptr->m_typeToPropertyManager[groupId] = groupPropertyManager;
- d_ptr->m_typeToValueType[groupId] = QVariant::Invalid;
+ d_ptr->m_typeToValueType[groupId] = QMetaType::UnknownType;
}
/*!
@@ -1241,7 +1286,7 @@ QtVariantPropertyManager::~QtVariantPropertyManager()
*/
QtVariantProperty *QtVariantPropertyManager::variantProperty(const QtProperty *property) const
{
- const QMap<const QtProperty *, QPair<QtVariantProperty *, int> >::const_iterator it = d_ptr->m_propertyToType.constFind(property);
+ const auto it = d_ptr->m_propertyToType.constFind(property);
if (it == d_ptr->m_propertyToType.constEnd())
return 0;
return it.value().first;
@@ -1302,60 +1347,60 @@ QtVariantProperty *QtVariantPropertyManager::addProperty(int propertyType, const
*/
QVariant QtVariantPropertyManager::value(const QtProperty *property) const
{
- QtProperty *internProp = propertyToWrappedProperty()->value(property, 0);
- if (internProp == 0)
- return QVariant();
+ QtProperty *internProp = propertyToWrappedProperty()->value(property, nullptr);
+ if (internProp == nullptr)
+ return {};
QtAbstractPropertyManager *manager = internProp->propertyManager();
- if (QtIntPropertyManager *intManager = qobject_cast<QtIntPropertyManager *>(manager)) {
+ if (auto *intManager = qobject_cast<QtIntPropertyManager *>(manager)) {
return intManager->value(internProp);
- } else if (QtDoublePropertyManager *doubleManager = qobject_cast<QtDoublePropertyManager *>(manager)) {
+ } else if (auto *doubleManager = qobject_cast<QtDoublePropertyManager *>(manager)) {
return doubleManager->value(internProp);
- } else if (QtBoolPropertyManager *boolManager = qobject_cast<QtBoolPropertyManager *>(manager)) {
+ } else if (auto *boolManager = qobject_cast<QtBoolPropertyManager *>(manager)) {
return boolManager->value(internProp);
- } else if (QtStringPropertyManager *stringManager = qobject_cast<QtStringPropertyManager *>(manager)) {
+ } else if (auto *stringManager = qobject_cast<QtStringPropertyManager *>(manager)) {
return stringManager->value(internProp);
- } else if (QtDatePropertyManager *dateManager = qobject_cast<QtDatePropertyManager *>(manager)) {
+ } else if (auto *dateManager = qobject_cast<QtDatePropertyManager *>(manager)) {
return dateManager->value(internProp);
- } else if (QtTimePropertyManager *timeManager = qobject_cast<QtTimePropertyManager *>(manager)) {
+ } else if (auto *timeManager = qobject_cast<QtTimePropertyManager *>(manager)) {
return timeManager->value(internProp);
- } else if (QtDateTimePropertyManager *dateTimeManager = qobject_cast<QtDateTimePropertyManager *>(manager)) {
+ } else if (auto *dateTimeManager = qobject_cast<QtDateTimePropertyManager *>(manager)) {
return dateTimeManager->value(internProp);
- } else if (QtKeySequencePropertyManager *keySequenceManager = qobject_cast<QtKeySequencePropertyManager *>(manager)) {
+ } else if (auto *keySequenceManager = qobject_cast<QtKeySequencePropertyManager *>(manager)) {
return QVariant::fromValue(keySequenceManager->value(internProp));
- } else if (QtCharPropertyManager *charManager = qobject_cast<QtCharPropertyManager *>(manager)) {
+ } else if (auto *charManager = qobject_cast<QtCharPropertyManager *>(manager)) {
return charManager->value(internProp);
- } else if (QtLocalePropertyManager *localeManager = qobject_cast<QtLocalePropertyManager *>(manager)) {
+ } else if (auto *localeManager = qobject_cast<QtLocalePropertyManager *>(manager)) {
return localeManager->value(internProp);
- } else if (QtPointPropertyManager *pointManager = qobject_cast<QtPointPropertyManager *>(manager)) {
+ } else if (auto *pointManager = qobject_cast<QtPointPropertyManager *>(manager)) {
return pointManager->value(internProp);
- } else if (QtPointFPropertyManager *pointFManager = qobject_cast<QtPointFPropertyManager *>(manager)) {
+ } else if (auto *pointFManager = qobject_cast<QtPointFPropertyManager *>(manager)) {
return pointFManager->value(internProp);
- } else if (QtSizePropertyManager *sizeManager = qobject_cast<QtSizePropertyManager *>(manager)) {
+ } else if (auto *sizeManager = qobject_cast<QtSizePropertyManager *>(manager)) {
return sizeManager->value(internProp);
- } else if (QtSizeFPropertyManager *sizeFManager = qobject_cast<QtSizeFPropertyManager *>(manager)) {
+ } else if (auto *sizeFManager = qobject_cast<QtSizeFPropertyManager *>(manager)) {
return sizeFManager->value(internProp);
- } else if (QtRectPropertyManager *rectManager = qobject_cast<QtRectPropertyManager *>(manager)) {
+ } else if (auto *rectManager = qobject_cast<QtRectPropertyManager *>(manager)) {
return rectManager->value(internProp);
- } else if (QtRectFPropertyManager *rectFManager = qobject_cast<QtRectFPropertyManager *>(manager)) {
+ } else if (auto *rectFManager = qobject_cast<QtRectFPropertyManager *>(manager)) {
return rectFManager->value(internProp);
- } else if (QtColorPropertyManager *colorManager = qobject_cast<QtColorPropertyManager *>(manager)) {
+ } else if (auto *colorManager = qobject_cast<QtColorPropertyManager *>(manager)) {
return colorManager->value(internProp);
- } else if (QtEnumPropertyManager *enumManager = qobject_cast<QtEnumPropertyManager *>(manager)) {
+ } else if (auto *enumManager = qobject_cast<QtEnumPropertyManager *>(manager)) {
return enumManager->value(internProp);
} else if (QtSizePolicyPropertyManager *sizePolicyManager =
qobject_cast<QtSizePolicyPropertyManager *>(manager)) {
return sizePolicyManager->value(internProp);
- } else if (QtFontPropertyManager *fontManager = qobject_cast<QtFontPropertyManager *>(manager)) {
+ } else if (auto *fontManager = qobject_cast<QtFontPropertyManager *>(manager)) {
return fontManager->value(internProp);
#ifndef QT_NO_CURSOR
- } else if (QtCursorPropertyManager *cursorManager = qobject_cast<QtCursorPropertyManager *>(manager)) {
+ } else if (auto *cursorManager = qobject_cast<QtCursorPropertyManager *>(manager)) {
return cursorManager->value(internProp);
#endif
- } else if (QtFlagPropertyManager *flagManager = qobject_cast<QtFlagPropertyManager *>(manager)) {
+ } else if (auto *flagManager = qobject_cast<QtFlagPropertyManager *>(manager)) {
return flagManager->value(internProp);
}
- return QVariant();
+ return {};
}
/*!
@@ -1388,7 +1433,7 @@ int QtVariantPropertyManager::valueType(int propertyType) const
*/
int QtVariantPropertyManager::propertyType(const QtProperty *property) const
{
- const QMap<const QtProperty *, QPair<QtVariantProperty *, int> >::const_iterator it = d_ptr->m_propertyToType.constFind(property);
+ const auto it = d_ptr->m_propertyToType.constFind(property);
if (it == d_ptr->m_propertyToType.constEnd())
return 0;
return it.value().second;
@@ -1408,32 +1453,31 @@ QVariant QtVariantPropertyManager::attributeValue(const QtProperty *property, co
{
int propType = propertyType(property);
if (!propType)
- return QVariant();
+ return {};
- QMap<int, QMap<QString, int> >::ConstIterator it =
- d_ptr->m_typeToAttributeToAttributeType.find(propType);
+ const auto it = d_ptr->m_typeToAttributeToAttributeType.constFind(propType);
if (it == d_ptr->m_typeToAttributeToAttributeType.constEnd())
- return QVariant();
+ return {};
- QMap<QString, int> attributes = it.value();
- QMap<QString, int>::ConstIterator itAttr = attributes.find(attribute);
+ const QMap<QString, int> &attributes = it.value();
+ const auto itAttr = attributes.constFind(attribute);
if (itAttr == attributes.constEnd())
- return QVariant();
+ return {};
- QtProperty *internProp = propertyToWrappedProperty()->value(property, 0);
- if (internProp == 0)
- return QVariant();
+ QtProperty *internProp = propertyToWrappedProperty()->value(property, nullptr);
+ if (internProp == nullptr)
+ return {};
QtAbstractPropertyManager *manager = internProp->propertyManager();
- if (QtIntPropertyManager *intManager = qobject_cast<QtIntPropertyManager *>(manager)) {
+ if (auto *intManager = qobject_cast<QtIntPropertyManager *>(manager)) {
if (attribute == d_ptr->m_maximumAttribute)
return intManager->maximum(internProp);
if (attribute == d_ptr->m_minimumAttribute)
return intManager->minimum(internProp);
if (attribute == d_ptr->m_singleStepAttribute)
return intManager->singleStep(internProp);
- return QVariant();
- } else if (QtDoublePropertyManager *doubleManager = qobject_cast<QtDoublePropertyManager *>(manager)) {
+ return {};
+ } else if (auto *doubleManager = qobject_cast<QtDoublePropertyManager *>(manager)) {
if (attribute == d_ptr->m_maximumAttribute)
return doubleManager->maximum(internProp);
if (attribute == d_ptr->m_minimumAttribute)
@@ -1442,46 +1486,46 @@ QVariant QtVariantPropertyManager::attributeValue(const QtProperty *property, co
return doubleManager->singleStep(internProp);
if (attribute == d_ptr->m_decimalsAttribute)
return doubleManager->decimals(internProp);
- return QVariant();
- } else if (QtStringPropertyManager *stringManager = qobject_cast<QtStringPropertyManager *>(manager)) {
+ return {};
+ } else if (auto *stringManager = qobject_cast<QtStringPropertyManager *>(manager)) {
if (attribute == d_ptr->m_regExpAttribute)
return stringManager->regExp(internProp);
- return QVariant();
- } else if (QtDatePropertyManager *dateManager = qobject_cast<QtDatePropertyManager *>(manager)) {
+ return {};
+ } else if (auto *dateManager = qobject_cast<QtDatePropertyManager *>(manager)) {
if (attribute == d_ptr->m_maximumAttribute)
return dateManager->maximum(internProp);
if (attribute == d_ptr->m_minimumAttribute)
return dateManager->minimum(internProp);
- return QVariant();
- } else if (QtPointFPropertyManager *pointFManager = qobject_cast<QtPointFPropertyManager *>(manager)) {
+ return {};
+ } else if (auto *pointFManager = qobject_cast<QtPointFPropertyManager *>(manager)) {
if (attribute == d_ptr->m_decimalsAttribute)
return pointFManager->decimals(internProp);
- return QVariant();
- } else if (QtSizePropertyManager *sizeManager = qobject_cast<QtSizePropertyManager *>(manager)) {
+ return {};
+ } else if (auto *sizeManager = qobject_cast<QtSizePropertyManager *>(manager)) {
if (attribute == d_ptr->m_maximumAttribute)
return sizeManager->maximum(internProp);
if (attribute == d_ptr->m_minimumAttribute)
return sizeManager->minimum(internProp);
- return QVariant();
- } else if (QtSizeFPropertyManager *sizeFManager = qobject_cast<QtSizeFPropertyManager *>(manager)) {
+ return {};
+ } else if (auto *sizeFManager = qobject_cast<QtSizeFPropertyManager *>(manager)) {
if (attribute == d_ptr->m_maximumAttribute)
return sizeFManager->maximum(internProp);
if (attribute == d_ptr->m_minimumAttribute)
return sizeFManager->minimum(internProp);
if (attribute == d_ptr->m_decimalsAttribute)
return sizeFManager->decimals(internProp);
- return QVariant();
- } else if (QtRectPropertyManager *rectManager = qobject_cast<QtRectPropertyManager *>(manager)) {
+ return {};
+ } else if (auto *rectManager = qobject_cast<QtRectPropertyManager *>(manager)) {
if (attribute == d_ptr->m_constraintAttribute)
return rectManager->constraint(internProp);
- return QVariant();
- } else if (QtRectFPropertyManager *rectFManager = qobject_cast<QtRectFPropertyManager *>(manager)) {
+ return {};
+ } else if (auto *rectFManager = qobject_cast<QtRectFPropertyManager *>(manager)) {
if (attribute == d_ptr->m_constraintAttribute)
return rectFManager->constraint(internProp);
if (attribute == d_ptr->m_decimalsAttribute)
return rectFManager->decimals(internProp);
- return QVariant();
- } else if (QtEnumPropertyManager *enumManager = qobject_cast<QtEnumPropertyManager *>(manager)) {
+ return {};
+ } else if (auto *enumManager = qobject_cast<QtEnumPropertyManager *>(manager)) {
if (attribute == d_ptr->m_enumNamesAttribute)
return enumManager->enumNames(internProp);
if (attribute == d_ptr->m_enumIconsAttribute) {
@@ -1489,13 +1533,13 @@ QVariant QtVariantPropertyManager::attributeValue(const QtProperty *property, co
v.setValue(enumManager->enumIcons(internProp));
return v;
}
- return QVariant();
- } else if (QtFlagPropertyManager *flagManager = qobject_cast<QtFlagPropertyManager *>(manager)) {
+ return {};
+ } else if (auto *flagManager = qobject_cast<QtFlagPropertyManager *>(manager)) {
if (attribute == d_ptr->m_flagNamesAttribute)
return flagManager->flagNames(internProp);
- return QVariant();
+ return {};
}
- return QVariant();
+ return {};
}
/*!
@@ -1505,10 +1549,9 @@ QVariant QtVariantPropertyManager::attributeValue(const QtProperty *property, co
*/
QStringList QtVariantPropertyManager::attributes(int propertyType) const
{
- QMap<int, QMap<QString, int> >::ConstIterator it =
- d_ptr->m_typeToAttributeToAttributeType.find(propertyType);
+ const auto it = d_ptr->m_typeToAttributeToAttributeType.constFind(propertyType);
if (it == d_ptr->m_typeToAttributeToAttributeType.constEnd())
- return QStringList();
+ return {};
return it.value().keys();
}
@@ -1518,19 +1561,18 @@ QStringList QtVariantPropertyManager::attributes(int propertyType) const
If the given \a propertyType is not supported by \e this manager,
or if the given \a propertyType does not possess the specified \a
- attribute, this function returns QVariant::Invalid.
+ attribute, this function returns QMetaType::UnknownType.
\sa attributes(), valueType()
*/
int QtVariantPropertyManager::attributeType(int propertyType, const QString &attribute) const
{
- QMap<int, QMap<QString, int> >::ConstIterator it =
- d_ptr->m_typeToAttributeToAttributeType.find(propertyType);
+ const auto it = d_ptr->m_typeToAttributeToAttributeType.constFind(propertyType);
if (it == d_ptr->m_typeToAttributeToAttributeType.constEnd())
return 0;
- QMap<QString, int> attributes = it.value();
- QMap<QString, int>::ConstIterator itAttr = attributes.find(attribute);
+ const QMap<QString, int> &attributes = it.value();
+ const auto itAttr = attributes.constFind(attribute);
if (itAttr == attributes.constEnd())
return 0;
return itAttr.value();
@@ -1559,79 +1601,79 @@ void QtVariantPropertyManager::setValue(QtProperty *property, const QVariant &va
if (propType != valType && !val.canConvert(QMetaType(valType)))
return;
- QtProperty *internProp = propertyToWrappedProperty()->value(property, 0);
- if (internProp == 0)
+ QtProperty *internProp = propertyToWrappedProperty()->value(property, nullptr);
+ if (internProp == nullptr)
return;
QtAbstractPropertyManager *manager = internProp->propertyManager();
- if (QtIntPropertyManager *intManager = qobject_cast<QtIntPropertyManager *>(manager)) {
+ if (auto *intManager = qobject_cast<QtIntPropertyManager *>(manager)) {
intManager->setValue(internProp, qvariant_cast<int>(val));
return;
- } else if (QtDoublePropertyManager *doubleManager = qobject_cast<QtDoublePropertyManager *>(manager)) {
+ } else if (auto *doubleManager = qobject_cast<QtDoublePropertyManager *>(manager)) {
doubleManager->setValue(internProp, qvariant_cast<double>(val));
return;
- } else if (QtBoolPropertyManager *boolManager = qobject_cast<QtBoolPropertyManager *>(manager)) {
+ } else if (auto *boolManager = qobject_cast<QtBoolPropertyManager *>(manager)) {
boolManager->setValue(internProp, qvariant_cast<bool>(val));
return;
- } else if (QtStringPropertyManager *stringManager = qobject_cast<QtStringPropertyManager *>(manager)) {
+ } else if (auto *stringManager = qobject_cast<QtStringPropertyManager *>(manager)) {
stringManager->setValue(internProp, qvariant_cast<QString>(val));
return;
- } else if (QtDatePropertyManager *dateManager = qobject_cast<QtDatePropertyManager *>(manager)) {
+ } else if (auto *dateManager = qobject_cast<QtDatePropertyManager *>(manager)) {
dateManager->setValue(internProp, qvariant_cast<QDate>(val));
return;
- } else if (QtTimePropertyManager *timeManager = qobject_cast<QtTimePropertyManager *>(manager)) {
+ } else if (auto *timeManager = qobject_cast<QtTimePropertyManager *>(manager)) {
timeManager->setValue(internProp, qvariant_cast<QTime>(val));
return;
- } else if (QtDateTimePropertyManager *dateTimeManager = qobject_cast<QtDateTimePropertyManager *>(manager)) {
+ } else if (auto *dateTimeManager = qobject_cast<QtDateTimePropertyManager *>(manager)) {
dateTimeManager->setValue(internProp, qvariant_cast<QDateTime>(val));
return;
- } else if (QtKeySequencePropertyManager *keySequenceManager = qobject_cast<QtKeySequencePropertyManager *>(manager)) {
+ } else if (auto *keySequenceManager = qobject_cast<QtKeySequencePropertyManager *>(manager)) {
keySequenceManager->setValue(internProp, qvariant_cast<QKeySequence>(val));
return;
- } else if (QtCharPropertyManager *charManager = qobject_cast<QtCharPropertyManager *>(manager)) {
+ } else if (auto *charManager = qobject_cast<QtCharPropertyManager *>(manager)) {
charManager->setValue(internProp, qvariant_cast<QChar>(val));
return;
- } else if (QtLocalePropertyManager *localeManager = qobject_cast<QtLocalePropertyManager *>(manager)) {
+ } else if (auto *localeManager = qobject_cast<QtLocalePropertyManager *>(manager)) {
localeManager->setValue(internProp, qvariant_cast<QLocale>(val));
return;
- } else if (QtPointPropertyManager *pointManager = qobject_cast<QtPointPropertyManager *>(manager)) {
+ } else if (auto *pointManager = qobject_cast<QtPointPropertyManager *>(manager)) {
pointManager->setValue(internProp, qvariant_cast<QPoint>(val));
return;
- } else if (QtPointFPropertyManager *pointFManager = qobject_cast<QtPointFPropertyManager *>(manager)) {
+ } else if (auto *pointFManager = qobject_cast<QtPointFPropertyManager *>(manager)) {
pointFManager->setValue(internProp, qvariant_cast<QPointF>(val));
return;
- } else if (QtSizePropertyManager *sizeManager = qobject_cast<QtSizePropertyManager *>(manager)) {
+ } else if (auto *sizeManager = qobject_cast<QtSizePropertyManager *>(manager)) {
sizeManager->setValue(internProp, qvariant_cast<QSize>(val));
return;
- } else if (QtSizeFPropertyManager *sizeFManager = qobject_cast<QtSizeFPropertyManager *>(manager)) {
+ } else if (auto *sizeFManager = qobject_cast<QtSizeFPropertyManager *>(manager)) {
sizeFManager->setValue(internProp, qvariant_cast<QSizeF>(val));
return;
- } else if (QtRectPropertyManager *rectManager = qobject_cast<QtRectPropertyManager *>(manager)) {
+ } else if (auto *rectManager = qobject_cast<QtRectPropertyManager *>(manager)) {
rectManager->setValue(internProp, qvariant_cast<QRect>(val));
return;
- } else if (QtRectFPropertyManager *rectFManager = qobject_cast<QtRectFPropertyManager *>(manager)) {
+ } else if (auto *rectFManager = qobject_cast<QtRectFPropertyManager *>(manager)) {
rectFManager->setValue(internProp, qvariant_cast<QRectF>(val));
return;
- } else if (QtColorPropertyManager *colorManager = qobject_cast<QtColorPropertyManager *>(manager)) {
+ } else if (auto *colorManager = qobject_cast<QtColorPropertyManager *>(manager)) {
colorManager->setValue(internProp, qvariant_cast<QColor>(val));
return;
- } else if (QtEnumPropertyManager *enumManager = qobject_cast<QtEnumPropertyManager *>(manager)) {
+ } else if (auto *enumManager = qobject_cast<QtEnumPropertyManager *>(manager)) {
enumManager->setValue(internProp, qvariant_cast<int>(val));
return;
} else if (QtSizePolicyPropertyManager *sizePolicyManager =
qobject_cast<QtSizePolicyPropertyManager *>(manager)) {
sizePolicyManager->setValue(internProp, qvariant_cast<QSizePolicy>(val));
return;
- } else if (QtFontPropertyManager *fontManager = qobject_cast<QtFontPropertyManager *>(manager)) {
+ } else if (auto *fontManager = qobject_cast<QtFontPropertyManager *>(manager)) {
fontManager->setValue(internProp, qvariant_cast<QFont>(val));
return;
#ifndef QT_NO_CURSOR
- } else if (QtCursorPropertyManager *cursorManager = qobject_cast<QtCursorPropertyManager *>(manager)) {
+ } else if (auto *cursorManager = qobject_cast<QtCursorPropertyManager *>(manager)) {
cursorManager->setValue(internProp, qvariant_cast<QCursor>(val));
return;
#endif
- } else if (QtFlagPropertyManager *flagManager = qobject_cast<QtFlagPropertyManager *>(manager)) {
+ } else if (auto *flagManager = qobject_cast<QtFlagPropertyManager *>(manager)) {
flagManager->setValue(internProp, qvariant_cast<int>(val));
return;
}
@@ -1663,12 +1705,12 @@ void QtVariantPropertyManager::setAttribute(QtProperty *property,
!value.canConvert(QMetaType(attrType)))
return;
- QtProperty *internProp = propertyToWrappedProperty()->value(property, 0);
- if (internProp == 0)
+ QtProperty *internProp = propertyToWrappedProperty()->value(property, nullptr);
+ if (internProp == nullptr)
return;
QtAbstractPropertyManager *manager = internProp->propertyManager();
- if (QtIntPropertyManager *intManager = qobject_cast<QtIntPropertyManager *>(manager)) {
+ if (auto *intManager = qobject_cast<QtIntPropertyManager *>(manager)) {
if (attribute == d_ptr->m_maximumAttribute)
intManager->setMaximum(internProp, qvariant_cast<int>(value));
else if (attribute == d_ptr->m_minimumAttribute)
@@ -1676,7 +1718,7 @@ void QtVariantPropertyManager::setAttribute(QtProperty *property,
else if (attribute == d_ptr->m_singleStepAttribute)
intManager->setSingleStep(internProp, qvariant_cast<int>(value));
return;
- } else if (QtDoublePropertyManager *doubleManager = qobject_cast<QtDoublePropertyManager *>(manager)) {
+ } else if (auto *doubleManager = qobject_cast<QtDoublePropertyManager *>(manager)) {
if (attribute == d_ptr->m_maximumAttribute)
doubleManager->setMaximum(internProp, qvariant_cast<double>(value));
if (attribute == d_ptr->m_minimumAttribute)
@@ -1686,27 +1728,27 @@ void QtVariantPropertyManager::setAttribute(QtProperty *property,
if (attribute == d_ptr->m_decimalsAttribute)
doubleManager->setDecimals(internProp, qvariant_cast<int>(value));
return;
- } else if (QtStringPropertyManager *stringManager = qobject_cast<QtStringPropertyManager *>(manager)) {
+ } else if (auto *stringManager = qobject_cast<QtStringPropertyManager *>(manager)) {
if (attribute == d_ptr->m_regExpAttribute)
stringManager->setRegExp(internProp, qvariant_cast<QRegularExpression>(value));
return;
- } else if (QtDatePropertyManager *dateManager = qobject_cast<QtDatePropertyManager *>(manager)) {
+ } else if (auto *dateManager = qobject_cast<QtDatePropertyManager *>(manager)) {
if (attribute == d_ptr->m_maximumAttribute)
dateManager->setMaximum(internProp, qvariant_cast<QDate>(value));
if (attribute == d_ptr->m_minimumAttribute)
dateManager->setMinimum(internProp, qvariant_cast<QDate>(value));
return;
- } else if (QtPointFPropertyManager *pointFManager = qobject_cast<QtPointFPropertyManager *>(manager)) {
+ } else if (auto *pointFManager = qobject_cast<QtPointFPropertyManager *>(manager)) {
if (attribute == d_ptr->m_decimalsAttribute)
pointFManager->setDecimals(internProp, qvariant_cast<int>(value));
return;
- } else if (QtSizePropertyManager *sizeManager = qobject_cast<QtSizePropertyManager *>(manager)) {
+ } else if (auto *sizeManager = qobject_cast<QtSizePropertyManager *>(manager)) {
if (attribute == d_ptr->m_maximumAttribute)
sizeManager->setMaximum(internProp, qvariant_cast<QSize>(value));
if (attribute == d_ptr->m_minimumAttribute)
sizeManager->setMinimum(internProp, qvariant_cast<QSize>(value));
return;
- } else if (QtSizeFPropertyManager *sizeFManager = qobject_cast<QtSizeFPropertyManager *>(manager)) {
+ } else if (auto *sizeFManager = qobject_cast<QtSizeFPropertyManager *>(manager)) {
if (attribute == d_ptr->m_maximumAttribute)
sizeFManager->setMaximum(internProp, qvariant_cast<QSizeF>(value));
if (attribute == d_ptr->m_minimumAttribute)
@@ -1714,23 +1756,23 @@ void QtVariantPropertyManager::setAttribute(QtProperty *property,
if (attribute == d_ptr->m_decimalsAttribute)
sizeFManager->setDecimals(internProp, qvariant_cast<int>(value));
return;
- } else if (QtRectPropertyManager *rectManager = qobject_cast<QtRectPropertyManager *>(manager)) {
+ } else if (auto *rectManager = qobject_cast<QtRectPropertyManager *>(manager)) {
if (attribute == d_ptr->m_constraintAttribute)
rectManager->setConstraint(internProp, qvariant_cast<QRect>(value));
return;
- } else if (QtRectFPropertyManager *rectFManager = qobject_cast<QtRectFPropertyManager *>(manager)) {
+ } else if (auto *rectFManager = qobject_cast<QtRectFPropertyManager *>(manager)) {
if (attribute == d_ptr->m_constraintAttribute)
rectFManager->setConstraint(internProp, qvariant_cast<QRectF>(value));
if (attribute == d_ptr->m_decimalsAttribute)
rectFManager->setDecimals(internProp, qvariant_cast<int>(value));
return;
- } else if (QtEnumPropertyManager *enumManager = qobject_cast<QtEnumPropertyManager *>(manager)) {
+ } else if (auto *enumManager = qobject_cast<QtEnumPropertyManager *>(manager)) {
if (attribute == d_ptr->m_enumNamesAttribute)
enumManager->setEnumNames(internProp, qvariant_cast<QStringList>(value));
if (attribute == d_ptr->m_enumIconsAttribute)
enumManager->setEnumIcons(internProp, qvariant_cast<QtIconMap>(value));
return;
- } else if (QtFlagPropertyManager *flagManager = qobject_cast<QtFlagPropertyManager *>(manager)) {
+ } else if (auto *flagManager = qobject_cast<QtFlagPropertyManager *>(manager)) {
if (attribute == d_ptr->m_flagNamesAttribute)
flagManager->setFlagNames(internProp, qvariant_cast<QStringList>(value));
return;
@@ -1752,7 +1794,7 @@ bool QtVariantPropertyManager::hasValue(const QtProperty *property) const
*/
QString QtVariantPropertyManager::valueText(const QtProperty *property) const
{
- const QtProperty *internProp = propertyToWrappedProperty()->value(property, 0);
+ const QtProperty *internProp = propertyToWrappedProperty()->value(property, nullptr);
return internProp ? internProp->valueText() : QString();
}
@@ -1761,7 +1803,7 @@ QString QtVariantPropertyManager::valueText(const QtProperty *property) const
*/
QIcon QtVariantPropertyManager::valueIcon(const QtProperty *property) const
{
- const QtProperty *internProp = propertyToWrappedProperty()->value(property, 0);
+ const QtProperty *internProp = propertyToWrappedProperty()->value(property, nullptr);
return internProp ? internProp->valueIcon() : QIcon();
}
@@ -1774,10 +1816,9 @@ void QtVariantPropertyManager::initializeProperty(QtProperty *property)
if (!varProp)
return;
- QMap<int, QtAbstractPropertyManager *>::ConstIterator it =
- d_ptr->m_typeToPropertyManager.find(d_ptr->m_propertyType);
+ const auto it = d_ptr->m_typeToPropertyManager.constFind(d_ptr->m_propertyType);
if (it != d_ptr->m_typeToPropertyManager.constEnd()) {
- QtProperty *internProp = 0;
+ QtProperty *internProp = nullptr;
if (!d_ptr->m_creatingSubProperties) {
QtAbstractPropertyManager *manager = it.value();
internProp = manager->addProperty();
@@ -1786,7 +1827,7 @@ void QtVariantPropertyManager::initializeProperty(QtProperty *property)
propertyToWrappedProperty()->insert(varProp, internProp);
if (internProp) {
const auto children = internProp->subProperties();
- QtVariantProperty *lastProperty = 0;
+ QtVariantProperty *lastProperty = nullptr;
for (QtProperty *child : children) {
QtVariantProperty *prop = d_ptr->createSubProperty(varProp, lastProperty, child);
lastProperty = prop ? prop : lastProperty;
@@ -1800,11 +1841,11 @@ void QtVariantPropertyManager::initializeProperty(QtProperty *property)
*/
void QtVariantPropertyManager::uninitializeProperty(QtProperty *property)
{
- const QMap<const QtProperty *, QPair<QtVariantProperty *, int> >::iterator type_it = d_ptr->m_propertyToType.find(property);
+ const auto type_it = d_ptr->m_propertyToType.find(property);
if (type_it == d_ptr->m_propertyToType.end())
return;
- PropertyMap::iterator it = propertyToWrappedProperty()->find(property);
+ const auto it = propertyToWrappedProperty()->find(property);
if (it != propertyToWrappedProperty()->end()) {
QtProperty *internProp = it.value();
if (internProp) {
@@ -1826,8 +1867,8 @@ QtProperty *QtVariantPropertyManager::createProperty()
if (!d_ptr->m_creatingProperty)
return 0;
- QtVariantProperty *property = new QtVariantProperty(this);
- d_ptr->m_propertyToType.insert(property, qMakePair(property, d_ptr->m_propertyType));
+ auto *property = new QtVariantProperty(this);
+ d_ptr->m_propertyToType.insert(property, {property, d_ptr->m_propertyType});
return property;
}
@@ -1854,7 +1895,7 @@ public:
QtColorEditorFactory *m_colorEditorFactory;
QtFontEditorFactory *m_fontEditorFactory;
- QMap<QtAbstractEditorFactoryBase *, int> m_factoryToType;
+ QHash<QtAbstractEditorFactoryBase *, int> m_factoryToType;
QMap<int, QtAbstractEditorFactoryBase *> m_typeToFactory;
};
@@ -1927,52 +1968,52 @@ QtVariantEditorFactory::QtVariantEditorFactory(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_spinBoxFactory = new QtSpinBoxFactory(this);
- d_ptr->m_factoryToType[d_ptr->m_spinBoxFactory] = QVariant::Int;
- d_ptr->m_typeToFactory[QVariant::Int] = d_ptr->m_spinBoxFactory;
+ d_ptr->m_factoryToType[d_ptr->m_spinBoxFactory] = QMetaType::Int;
+ d_ptr->m_typeToFactory[QMetaType::Int] = d_ptr->m_spinBoxFactory;
d_ptr->m_doubleSpinBoxFactory = new QtDoubleSpinBoxFactory(this);
- d_ptr->m_factoryToType[d_ptr->m_doubleSpinBoxFactory] = QVariant::Double;
- d_ptr->m_typeToFactory[QVariant::Double] = d_ptr->m_doubleSpinBoxFactory;
+ d_ptr->m_factoryToType[d_ptr->m_doubleSpinBoxFactory] = QMetaType::Double;
+ d_ptr->m_typeToFactory[QMetaType::Double] = d_ptr->m_doubleSpinBoxFactory;
d_ptr->m_checkBoxFactory = new QtCheckBoxFactory(this);
- d_ptr->m_factoryToType[d_ptr->m_checkBoxFactory] = QVariant::Bool;
- d_ptr->m_typeToFactory[QVariant::Bool] = d_ptr->m_checkBoxFactory;
+ d_ptr->m_factoryToType[d_ptr->m_checkBoxFactory] = QMetaType::Bool;
+ d_ptr->m_typeToFactory[QMetaType::Bool] = d_ptr->m_checkBoxFactory;
d_ptr->m_lineEditFactory = new QtLineEditFactory(this);
- d_ptr->m_factoryToType[d_ptr->m_lineEditFactory] = QVariant::String;
- d_ptr->m_typeToFactory[QVariant::String] = d_ptr->m_lineEditFactory;
+ d_ptr->m_factoryToType[d_ptr->m_lineEditFactory] = QMetaType::QString;
+ d_ptr->m_typeToFactory[QMetaType::QString] = d_ptr->m_lineEditFactory;
d_ptr->m_dateEditFactory = new QtDateEditFactory(this);
- d_ptr->m_factoryToType[d_ptr->m_dateEditFactory] = QVariant::Date;
- d_ptr->m_typeToFactory[QVariant::Date] = d_ptr->m_dateEditFactory;
+ d_ptr->m_factoryToType[d_ptr->m_dateEditFactory] = QMetaType::QDate;
+ d_ptr->m_typeToFactory[QMetaType::QDate] = d_ptr->m_dateEditFactory;
d_ptr->m_timeEditFactory = new QtTimeEditFactory(this);
- d_ptr->m_factoryToType[d_ptr->m_timeEditFactory] = QVariant::Time;
- d_ptr->m_typeToFactory[QVariant::Time] = d_ptr->m_timeEditFactory;
+ d_ptr->m_factoryToType[d_ptr->m_timeEditFactory] = QMetaType::QTime;
+ d_ptr->m_typeToFactory[QMetaType::QTime] = d_ptr->m_timeEditFactory;
d_ptr->m_dateTimeEditFactory = new QtDateTimeEditFactory(this);
- d_ptr->m_factoryToType[d_ptr->m_dateTimeEditFactory] = QVariant::DateTime;
- d_ptr->m_typeToFactory[QVariant::DateTime] = d_ptr->m_dateTimeEditFactory;
+ d_ptr->m_factoryToType[d_ptr->m_dateTimeEditFactory] = QMetaType::QDateTime;
+ d_ptr->m_typeToFactory[QMetaType::QDateTime] = d_ptr->m_dateTimeEditFactory;
d_ptr->m_keySequenceEditorFactory = new QtKeySequenceEditorFactory(this);
- d_ptr->m_factoryToType[d_ptr->m_keySequenceEditorFactory] = QVariant::KeySequence;
- d_ptr->m_typeToFactory[QVariant::KeySequence] = d_ptr->m_keySequenceEditorFactory;
+ d_ptr->m_factoryToType[d_ptr->m_keySequenceEditorFactory] = QMetaType::QKeySequence;
+ d_ptr->m_typeToFactory[QMetaType::QKeySequence] = d_ptr->m_keySequenceEditorFactory;
d_ptr->m_charEditorFactory = new QtCharEditorFactory(this);
- d_ptr->m_factoryToType[d_ptr->m_charEditorFactory] = QVariant::Char;
- d_ptr->m_typeToFactory[QVariant::Char] = d_ptr->m_charEditorFactory;
+ d_ptr->m_factoryToType[d_ptr->m_charEditorFactory] = QMetaType::QChar;
+ d_ptr->m_typeToFactory[QMetaType::QChar] = d_ptr->m_charEditorFactory;
d_ptr->m_cursorEditorFactory = new QtCursorEditorFactory(this);
- d_ptr->m_factoryToType[d_ptr->m_cursorEditorFactory] = QVariant::Cursor;
- d_ptr->m_typeToFactory[QVariant::Cursor] = d_ptr->m_cursorEditorFactory;
+ d_ptr->m_factoryToType[d_ptr->m_cursorEditorFactory] = QMetaType::QCursor;
+ d_ptr->m_typeToFactory[QMetaType::QCursor] = d_ptr->m_cursorEditorFactory;
d_ptr->m_colorEditorFactory = new QtColorEditorFactory(this);
- d_ptr->m_factoryToType[d_ptr->m_colorEditorFactory] = QVariant::Color;
- d_ptr->m_typeToFactory[QVariant::Color] = d_ptr->m_colorEditorFactory;
+ d_ptr->m_factoryToType[d_ptr->m_colorEditorFactory] = QMetaType::QColor;
+ d_ptr->m_typeToFactory[QMetaType::QColor] = d_ptr->m_colorEditorFactory;
d_ptr->m_fontEditorFactory = new QtFontEditorFactory(this);
- d_ptr->m_factoryToType[d_ptr->m_fontEditorFactory] = QVariant::Font;
- d_ptr->m_typeToFactory[QVariant::Font] = d_ptr->m_fontEditorFactory;
+ d_ptr->m_factoryToType[d_ptr->m_fontEditorFactory] = QMetaType::QFont;
+ d_ptr->m_typeToFactory[QMetaType::QFont] = d_ptr->m_fontEditorFactory;
d_ptr->m_comboBoxFactory = new QtEnumEditorFactory(this);
const int enumId = QtVariantPropertyManager::enumTypeId();
@@ -2100,7 +2141,7 @@ QWidget *QtVariantEditorFactory::createEditor(QtVariantPropertyManager *manager,
QWidget *parent)
{
const int propType = manager->propertyType(property);
- QtAbstractEditorFactoryBase *factory = d_ptr->m_typeToFactory.value(propType, 0);
+ QtAbstractEditorFactoryBase *factory = d_ptr->m_typeToFactory.value(propType, nullptr);
if (!factory)
return 0;
return factory->createEditor(wrappedProperty(property), parent);
diff --git a/src/shared/qtpropertybrowser/qtvariantproperty.h b/src/shared/qtpropertybrowser/qtvariantproperty.h
index 77bc52681..5fe231744 100644
--- a/src/shared/qtpropertybrowser/qtvariantproperty.h
+++ b/src/shared/qtpropertybrowser/qtvariantproperty.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 QTVARIANTPROPERTY_H
#define QTVARIANTPROPERTY_H
@@ -48,8 +12,6 @@ QT_BEGIN_NAMESPACE
class QRegularExpression;
-typedef QMap<int, QIcon> QtIconMap;
-
class QtVariantPropertyManager;
class QtVariantProperty : public QtProperty
@@ -112,43 +74,6 @@ protected:
QtProperty *createProperty() override;
private:
QScopedPointer<class QtVariantPropertyManagerPrivate> d_ptr;
- Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotRangeChanged(QtProperty *, int, int))
- Q_PRIVATE_SLOT(d_func(), void slotSingleStepChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, double))
- Q_PRIVATE_SLOT(d_func(), void slotRangeChanged(QtProperty *, double, double))
- Q_PRIVATE_SLOT(d_func(), void slotSingleStepChanged(QtProperty *, double))
- Q_PRIVATE_SLOT(d_func(), void slotDecimalsChanged(QtProperty *, int))
- Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, bool))
- Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QString &))
- Q_PRIVATE_SLOT(d_func(), void slotRegExpChanged(QtProperty *, const QRegularExpression &))
- Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, QDate))
- Q_PRIVATE_SLOT(d_func(), void slotRangeChanged(QtProperty *, QDate, QDate))
- Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, QTime))
- Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QDateTime &))
- Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QKeySequence &))
- Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QChar &))
- Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QLocale &))
- Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QPoint &))
- Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QPointF &))
- Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QSize &))
- Q_PRIVATE_SLOT(d_func(), void slotRangeChanged(QtProperty *, const QSize &, const QSize &))
- Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QSizeF &))
- Q_PRIVATE_SLOT(d_func(), void slotRangeChanged(QtProperty *, const QSizeF &, const QSizeF &))
- Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QRect &))
- Q_PRIVATE_SLOT(d_func(), void slotConstraintChanged(QtProperty *, const QRect &))
- Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QRectF &))
- Q_PRIVATE_SLOT(d_func(), void slotConstraintChanged(QtProperty *, const QRectF &))
- Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QColor &))
- Q_PRIVATE_SLOT(d_func(), void slotEnumNamesChanged(QtProperty *, const QStringList &))
- Q_PRIVATE_SLOT(d_func(), void slotEnumIconsChanged(QtProperty *, const QMap<int, QIcon> &))
- Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QSizePolicy &))
- Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QFont &))
- Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QCursor &))
- Q_PRIVATE_SLOT(d_func(), void slotFlagNamesChanged(QtProperty *, const QStringList &))
-
- Q_PRIVATE_SLOT(d_func(), void slotPropertyInserted(QtProperty *, QtProperty *, QtProperty *))
- Q_PRIVATE_SLOT(d_func(), void slotPropertyRemoved(QtProperty *, QtProperty *))
Q_DECLARE_PRIVATE(QtVariantPropertyManager)
Q_DISABLE_COPY_MOVE(QtVariantPropertyManager)
};
@@ -172,6 +97,4 @@ private:
QT_END_NAMESPACE
-Q_DECLARE_METATYPE(QIcon)
-Q_DECLARE_METATYPE(QtIconMap)
#endif
diff --git a/src/shared/qttoolbardialog/qttoolbardialog.cpp b/src/shared/qttoolbardialog/qttoolbardialog.cpp
index 3e069602c..622f23e82 100644
--- a/src/shared/qttoolbardialog/qttoolbardialog.cpp
+++ b/src/shared/qttoolbardialog/qttoolbardialog.cpp
@@ -1,59 +1,24 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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 "qttoolbardialog.h"
#include "ui_qttoolbardialog.h"
-#include <QtWidgets/QToolBar>
-#include <QtWidgets/QMainWindow>
-#include <QtWidgets/QHeaderView>
-#include <QtWidgets/QPushButton>
-
+#include <QtCore/QMap>
+#include <QtCore/QHash>
+#include <QtCore/QSet>
#include <QtGui/QAction>
#include <QtGui/QtEvents>
-
-#include <QtCore/QSet>
+#include <QtWidgets/QMainWindow>
+#include <QtWidgets/QPushButton>
+#include <QtWidgets/QToolBar>
#include <algorithm>
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
class QtFullToolBarManagerPrivate;
class QtFullToolBarManager : public QObject
@@ -88,7 +53,7 @@ public:
void removeDefaultToolBar(QToolBar *toolBar);
// NULL on action list means separator.
- QMap<QToolBar *, QList<QAction *> > defaultToolBars() const;
+ QHash<QToolBar *, QList<QAction *>> defaultToolBars() const;
bool isDefaultToolBar(QToolBar *toolBar) const;
QToolBar *createToolBar(const QString &toolBarName);
@@ -96,10 +61,10 @@ public:
QList<QAction *> actions(QToolBar *toolBar) const;
- void setToolBars(const QMap<QToolBar *, QList<QAction *> > &actions);
+ void setToolBars(const QHash<QToolBar *, QList<QAction *>> &actions);
void setToolBar(QToolBar *toolBar, const QList<QAction *> &actions);
- QMap<QToolBar *, QList<QAction *> > toolBarsActions() const;
+ QHash<QToolBar *, QList<QAction *>> toolBarsActions() const;
QByteArray saveState(int version = 0) const;
bool restoreState(const QByteArray &state, int version = 0);
@@ -134,7 +99,7 @@ class QtFullToolBarManagerPrivate
public:
QToolBar *toolBarWidgetAction(QAction *action) const;
- void removeWidgetActions(const QMap<QToolBar *, QList<QAction *> > &actions);
+ void removeWidgetActions(const QHash<QToolBar *, QList<QAction *>> &actions);
enum {
VersionMarker = 0xff,
@@ -149,17 +114,17 @@ public:
QToolBar *toolBarByName(const QString &toolBarName) const;
- QMap<QString, QList<QAction *> > categoryToActions;
- QMap<QAction *, QString> actionToCategory;
+ QHash<QString, QList<QAction *>> categoryToActions;
+ QHash<QAction *, QString> actionToCategory;
QSet<QAction *> allActions;
- QMap<QAction *, QToolBar *> widgetActions;
+ QHash<QAction *, QToolBar *> widgetActions;
QSet<QAction *> regularActions;
- QMap<QAction *, QList<QToolBar *> > actionToToolBars;
+ QHash<QAction *, QList<QToolBar *>> actionToToolBars;
- QMap<QToolBar *, QList<QAction *> > toolBars;
- QMap<QToolBar *, QList<QAction *> > toolBarsWithSeparators;
- QMap<QToolBar *, QList<QAction *> > defaultToolBars;
+ QHash<QToolBar *, QList<QAction *>> toolBars;
+ QHash<QToolBar *, QList<QAction *>> toolBarsWithSeparators;
+ QHash<QToolBar *, QList<QAction *>> defaultToolBars;
QList<QToolBar *> customToolBars;
QMainWindow *theMainWindow{nullptr};
@@ -172,7 +137,7 @@ QToolBar *QtFullToolBarManagerPrivate::toolBarWidgetAction(QAction *action) cons
return 0;
}
-void QtFullToolBarManagerPrivate::removeWidgetActions(const QMap<QToolBar *, QList<QAction *> >
+void QtFullToolBarManagerPrivate::removeWidgetActions(const QHash<QToolBar *, QList<QAction *>>
&actions)
{
auto itToolBar = actions.constBegin();
@@ -195,7 +160,7 @@ void QtFullToolBarManagerPrivate::removeWidgetActions(const QMap<QToolBar *, QLi
toolBars.insert(toolBar, newActions);
toolBarsWithSeparators.insert(toolBar, newActionsWithSeparators);
- for (QAction *oldAction : qAsConst(removedActions)) {
+ for (QAction *oldAction : std::as_const(removedActions)) {
widgetActions.insert(oldAction, 0);
actionToToolBars[oldAction].removeAll(toolBar);
}
@@ -347,7 +312,7 @@ bool QtFullToolBarManagerPrivate::restoreState(QDataStream &stream) const
q_ptr->setToolBar(toolBar, actions);
}
}
- for (QToolBar *toolBar : qAsConst(oldCustomToolBars))
+ for (QToolBar *toolBar : std::as_const(oldCustomToolBars))
q_ptr->deleteToolBar(toolBar);
return true;
}
@@ -464,10 +429,7 @@ QList<QAction *> QtFullToolBarManager::categoryActions(const QString &category)
QString QtFullToolBarManager::actionCategory(QAction *action) const
{
- QMap<QAction *, QString>::ConstIterator it = d_ptr->actionToCategory.find(action);
- if (it != d_ptr->actionToCategory.constEnd())
- return it.value();
- return QString();
+ return d_ptr->actionToCategory.value(action, {});
}
void QtFullToolBarManager::addAction(QAction *action, const QString &category)
@@ -478,8 +440,7 @@ void QtFullToolBarManager::addAction(QAction *action, const QString &category)
return;
if (d_ptr->allActions.contains(action))
return;
- if (QLatin1String(action->metaObject()->className()) ==
- QLatin1String("QToolBarWidgetAction"))
+ if (qstrcmp(action->metaObject()->className(), "QToolBarWidgetAction") == 0)
d_ptr->widgetActions.insert(action, 0);
else
d_ptr->regularActions.insert(action);
@@ -584,7 +545,7 @@ void QtFullToolBarManager::removeDefaultToolBar(QToolBar *toolBar)
}
}
-QMap<QToolBar *, QList<QAction *> > QtFullToolBarManager::defaultToolBars() const
+QHash<QToolBar *, QList<QAction *>> QtFullToolBarManager::defaultToolBars() const
{
return d_ptr->defaultToolBars;
}
@@ -602,7 +563,7 @@ QToolBar *QtFullToolBarManager::createToolBar(const QString &toolBarName)
return 0;
QToolBar *toolBar = new QToolBar(toolBarName, mainWindow());
int i = 1;
- const QString prefix = QLatin1String("_Custom_Toolbar_%1");
+ const QString prefix = "_Custom_Toolbar_%1"_L1;
QString name = prefix.arg(i);
while (d_ptr->toolBarByName(name))
name = prefix.arg(++i);
@@ -634,7 +595,7 @@ QList<QAction *> QtFullToolBarManager::actions(QToolBar *toolBar) const
return QList<QAction *>();
}
-void QtFullToolBarManager::setToolBars(const QMap<QToolBar *, QList<QAction *> > &actions)
+void QtFullToolBarManager::setToolBars(const QHash<QToolBar *, QList<QAction *>> &actions)
{
auto it = actions.constBegin();
while (it != actions.constEnd()) {
@@ -653,7 +614,7 @@ void QtFullToolBarManager::setToolBar(QToolBar *toolBar, const QList<QAction *>
if (actions == d_ptr->toolBars[toolBar])
return;
- QMap<QToolBar *, QList<QAction *> > toRemove;
+ QHash<QToolBar *, QList<QAction *>> toRemove;
QList<QAction *> newActions;
for (QAction *action : actions) {
@@ -683,8 +644,8 @@ void QtFullToolBarManager::setToolBar(QToolBar *toolBar, const QList<QAction *>
}
QList<QAction *> newActionsWithSeparators;
- for (QAction *action : qAsConst(newActions)) {
- QAction *newAction = 0;
+ for (QAction *action : std::as_const(newActions)) {
+ QAction *newAction = nullptr;
if (!action)
newAction = toolBar->insertSeparator(0);
if (d_ptr->allActions.contains(action)) {
@@ -698,7 +659,7 @@ void QtFullToolBarManager::setToolBar(QToolBar *toolBar, const QList<QAction *>
d_ptr->toolBarsWithSeparators.insert(toolBar, newActionsWithSeparators);
}
-QMap<QToolBar *, QList<QAction *> > QtFullToolBarManager::toolBarsActions() const
+QHash<QToolBar *, QList<QAction *>> QtFullToolBarManager::toolBarsActions() const
{
return d_ptr->toolBars;
}
@@ -996,8 +957,8 @@ public:
void clearOld();
void fillNew();
QtFullToolBarManager *toolBarManager;
- QMap<ToolBarItem *, QList<QAction *> > currentState;
- QMap<QToolBar *, ToolBarItem *> toolBarItems;
+ QHash<ToolBarItem *, QList<QAction *>> currentState;
+ QHash<QToolBar *, ToolBarItem *> toolBarItems;
QSet<ToolBarItem *> createdItems;
QSet<ToolBarItem *> removedItems;
@@ -1005,20 +966,20 @@ public:
// static
QTreeWidgetItem *currentAction;
- QMap<QAction *, QTreeWidgetItem *> actionToItem;
- QMap<QTreeWidgetItem *, QAction *> itemToAction;
+ QHash<QAction *, QTreeWidgetItem *> actionToItem;
+ QHash<QTreeWidgetItem *, QAction *> itemToAction;
// dynamic
ToolBarItem *currentToolBar;
- QMap<ToolBarItem *, QListWidgetItem *> toolBarToItem;
- QMap<QListWidgetItem *, ToolBarItem *> itemToToolBar;
+ QHash<ToolBarItem *, QListWidgetItem *> toolBarToItem;
+ QHash<QListWidgetItem *, ToolBarItem *> itemToToolBar;
// dynamic
- QMap<QAction *, QListWidgetItem *> actionToCurrentItem;
- QMap<QListWidgetItem *, QAction *> currentItemToAction;
+ QHash<QAction *, QListWidgetItem *> actionToCurrentItem;
+ QHash<QListWidgetItem *, QAction *> currentItemToAction;
- QMap<QAction *, ToolBarItem *> widgetActionToToolBar;
- QMap<ToolBarItem *, QSet<QAction *> > toolBarToWidgetActions;
+ QHash<QAction *, ToolBarItem *> widgetActionToToolBar;
+ QHash<ToolBarItem *, QSet<QAction *>> toolBarToWidgetActions;
QString separatorText;
Ui::QtToolBarDialog ui;
@@ -1076,8 +1037,8 @@ void QtToolBarDialogPrivate::clearOld()
qDeleteAll(allToolBarItems);
allToolBarItems.clear();
- currentToolBar = 0;
- currentAction = 0;
+ currentToolBar = nullptr;
+ currentAction = nullptr;
}
void QtToolBarDialogPrivate::fillNew()
@@ -1100,7 +1061,7 @@ void QtToolBarDialogPrivate::fillNew()
item = new QTreeWidgetItem(categoryItem);
item->setText(0, action->text());
item->setIcon(0, action->icon());
- item->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic);
+ item->setTextAlignment(0, Qt::Alignment(Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic));
actionToItem.insert(action, item);
itemToAction.insert(item, action);
if (toolBarManager->isWidgetAction(action)) {
@@ -1219,7 +1180,7 @@ void QtToolBarDialogPrivate::removeToolBar(ToolBarItem *item)
int row = ui.toolBarList->row(i);
const auto itToolBar = toolBarToWidgetActions.find(item);
if (itToolBar != toolBarToWidgetActions.end()) {
- for (QAction *action : qAsConst(itToolBar.value()))
+ for (QAction *action : std::as_const(itToolBar.value()))
widgetActionToToolBar.insert(action, 0);
toolBarToWidgetActions.erase(itToolBar);
}
@@ -1263,7 +1224,7 @@ void QtToolBarDialogPrivate::defaultClicked()
const auto tbwit = toolBarToWidgetActions.find(toolBarItem);
if (tbwit != toolBarToWidgetActions.end()) {
- for (QAction *action : qAsConst(tbwit.value()))
+ for (QAction *action : std::as_const(tbwit.value()))
widgetActionToToolBar.insert(action, 0);
toolBarToWidgetActions.erase(tbwit);
}
@@ -1413,7 +1374,7 @@ void QtToolBarDialogPrivate::rightClicked()
QListWidgetItem *currentToolBarAction = ui.currentToolBarList->currentItem();
QAction *action = itemToAction.value(currentAction);
- QListWidgetItem *item = 0;
+ QListWidgetItem *item = nullptr;
if (action) {
if (currentState[currentToolBar].contains(action)) {
item = actionToCurrentItem.value(action);
@@ -1426,7 +1387,7 @@ void QtToolBarDialogPrivate::rightClicked()
} else {
item = new QListWidgetItem(action->text());
item->setIcon(action->icon());
- item->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic);
+ item->setTextAlignment(Qt::Alignment(Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic));
currentItemToAction.insert(item, action);
actionToCurrentItem.insert(action, item);
if (widgetActionToToolBar.contains(action)) {
@@ -1499,7 +1460,7 @@ void QtToolBarDialogPrivate::currentToolBarChanged(QListWidgetItem *current)
return;
}
const auto actions = currentState.value(currentToolBar);
- QListWidgetItem *first = 0;
+ QListWidgetItem *first = nullptr;
for (QAction *action : actions) {
QString actionName = separatorText;
if (action)
@@ -1507,7 +1468,7 @@ void QtToolBarDialogPrivate::currentToolBarChanged(QListWidgetItem *current)
QListWidgetItem *item = new QListWidgetItem(actionName, ui.currentToolBarList);
if (action) {
item->setIcon(action->icon());
- item->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic);
+ item->setTextAlignment(Qt::Alignment(Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic));
actionToCurrentItem.insert(action, item);
if (widgetActionToToolBar.contains(action))
item->setData(Qt::ForegroundRole, QColor(Qt::blue));
@@ -1724,40 +1685,43 @@ QtToolBarDialog::QtToolBarDialog(QWidget *parent, Qt::WindowFlags flags)
d_ptr->ui.actionTree->setRootIsDecorated(false);
d_ptr->ui.actionTree->header()->hide();
- d_ptr->ui.upButton->setIcon(QIcon(QLatin1String(":/qt-project.org/qttoolbardialog/images/up.png")));
- d_ptr->ui.downButton->setIcon(QIcon(QLatin1String(":/qt-project.org/qttoolbardialog/images/down.png")));
- d_ptr->ui.leftButton->setIcon(QIcon(QLatin1String(":/qt-project.org/qttoolbardialog/images/back.png")));
- d_ptr->ui.rightButton->setIcon(QIcon(QLatin1String(":/qt-project.org/qttoolbardialog/images/forward.png")));
- d_ptr->ui.newButton->setIcon(QIcon(QLatin1String(":/qt-project.org/qttoolbardialog/images/plus.png")));
- d_ptr->ui.removeButton->setIcon(QIcon(QLatin1String(":/qt-project.org/qttoolbardialog/images/minus.png")));
-
- connect(d_ptr->ui.newButton, SIGNAL(clicked()), this, SLOT(newClicked()));
- connect(d_ptr->ui.removeButton, SIGNAL(clicked()), this, SLOT(removeClicked()));
- connect(d_ptr->ui.renameButton, SIGNAL(clicked()), this, SLOT(renameClicked()));
- connect(d_ptr->ui.upButton, SIGNAL(clicked()), this, SLOT(upClicked()));
- connect(d_ptr->ui.downButton, SIGNAL(clicked()), this, SLOT(downClicked()));
- connect(d_ptr->ui.leftButton, SIGNAL(clicked()), this, SLOT(leftClicked()));
- connect(d_ptr->ui.rightButton, SIGNAL(clicked()), this, SLOT(rightClicked()));
-
- connect(d_ptr->ui.buttonBox->button(QDialogButtonBox::RestoreDefaults), SIGNAL(clicked()), this, SLOT(defaultClicked()));
- connect(d_ptr->ui.buttonBox->button(QDialogButtonBox::Ok), SIGNAL(clicked()), this, SLOT(okClicked()));
- connect(d_ptr->ui.buttonBox->button(QDialogButtonBox::Apply), SIGNAL(clicked()), this, SLOT(applyClicked()));
- connect(d_ptr->ui.buttonBox->button(QDialogButtonBox::Cancel), SIGNAL(clicked()), this, SLOT(cancelClicked()));
-
- connect(d_ptr->ui.actionTree, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),
- this, SLOT(currentActionChanged(QTreeWidgetItem*)));
- connect(d_ptr->ui.toolBarList, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
- this, SLOT(currentToolBarChanged(QListWidgetItem*)));
- connect(d_ptr->ui.currentToolBarList,
- SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
- this, SLOT(currentToolBarActionChanged(QListWidgetItem*)));
-
- connect(d_ptr->ui.actionTree, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),
- this, SLOT(rightClicked()));
- connect(d_ptr->ui.currentToolBarList, SIGNAL(itemDoubleClicked(QListWidgetItem*)),
- this, SLOT(leftClicked()));
- connect(d_ptr->ui.toolBarList, SIGNAL(itemChanged(QListWidgetItem*)),
- this, SLOT(toolBarRenamed(QListWidgetItem*)));
+ d_ptr->ui.upButton->setIcon(QIcon(":/qt-project.org/qttoolbardialog/images/up.png"_L1));
+ d_ptr->ui.downButton->setIcon(QIcon(":/qt-project.org/qttoolbardialog/images/down.png"_L1));
+ d_ptr->ui.leftButton->setIcon(QIcon(":/qt-project.org/qttoolbardialog/images/back.png"_L1));
+ d_ptr->ui.rightButton->setIcon(QIcon(":/qt-project.org/qttoolbardialog/images/forward.png"_L1));
+ d_ptr->ui.newButton->setIcon(QIcon(":/qt-project.org/qttoolbardialog/images/plus.png"_L1));
+ d_ptr->ui.removeButton->setIcon(QIcon(":/qt-project.org/qttoolbardialog/images/minus.png"_L1));
+
+ connect(d_ptr->ui.newButton, &QAbstractButton::clicked, this, [this] { d_ptr->newClicked(); });
+ connect(d_ptr->ui.removeButton, &QAbstractButton::clicked, this, [this] { d_ptr->removeClicked(); });
+ connect(d_ptr->ui.renameButton, &QAbstractButton::clicked, this, [this] { d_ptr->renameClicked(); });
+ connect(d_ptr->ui.upButton, &QAbstractButton::clicked, this, [this] { d_ptr->upClicked(); });
+ connect(d_ptr->ui.downButton, &QAbstractButton::clicked, this, [this] { d_ptr->downClicked(); });
+ connect(d_ptr->ui.leftButton, &QAbstractButton::clicked, this, [this] { d_ptr->leftClicked(); });
+ connect(d_ptr->ui.rightButton, &QAbstractButton::clicked, this, [this] { d_ptr->rightClicked(); });
+
+ connect(d_ptr->ui.buttonBox->button(QDialogButtonBox::RestoreDefaults),
+ &QAbstractButton::clicked, this, [this] { d_ptr->defaultClicked(); });
+ connect(d_ptr->ui.buttonBox->button(QDialogButtonBox::Ok),
+ &QAbstractButton::clicked, this, [this] { d_ptr->okClicked(); });
+ connect(d_ptr->ui.buttonBox->button(QDialogButtonBox::Apply),
+ &QAbstractButton::clicked, this, [this] { d_ptr->applyClicked(); });
+ connect(d_ptr->ui.buttonBox->button(QDialogButtonBox::Cancel),
+ &QAbstractButton::clicked, this, [this] { d_ptr->cancelClicked(); });
+
+ connect(d_ptr->ui.actionTree, &QTreeWidget::currentItemChanged,
+ this, [this](QTreeWidgetItem *current) { d_ptr->currentActionChanged(current); });
+ connect(d_ptr->ui.currentToolBarList, &QListWidget::currentItemChanged,
+ this, [this](QListWidgetItem *current) { d_ptr->currentToolBarActionChanged(current); });
+ connect(d_ptr->ui.toolBarList, &QListWidget::currentItemChanged,
+ this, [this](QListWidgetItem *current) { d_ptr->currentToolBarChanged(current); });
+
+ connect(d_ptr->ui.actionTree, &QTreeWidget::itemDoubleClicked,
+ this, [this] { d_ptr->rightClicked(); });
+ connect(d_ptr->ui.currentToolBarList, &QListWidget::itemDoubleClicked,
+ this, [this] { d_ptr->leftClicked(); });
+ connect(d_ptr->ui.toolBarList, &QListWidget::itemChanged,
+ this, [this](QListWidgetItem *current) { d_ptr->toolBarRenamed(current); });
}
/*!
diff --git a/src/shared/qttoolbardialog/qttoolbardialog.h b/src/shared/qttoolbardialog/qttoolbardialog.h
index 28e08dd4e..3a283a0ec 100644
--- a/src/shared/qttoolbardialog/qttoolbardialog.h
+++ b/src/shared/qttoolbardialog/qttoolbardialog.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 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
//
// W A R N I N G
@@ -113,22 +77,6 @@ private:
QScopedPointer<QtToolBarDialogPrivate> d_ptr;
Q_DECLARE_PRIVATE(QtToolBarDialog)
Q_DISABLE_COPY_MOVE(QtToolBarDialog)
-
- Q_PRIVATE_SLOT(d_func(), void newClicked())
- Q_PRIVATE_SLOT(d_func(), void removeClicked())
- Q_PRIVATE_SLOT(d_func(), void defaultClicked())
- Q_PRIVATE_SLOT(d_func(), void okClicked())
- Q_PRIVATE_SLOT(d_func(), void applyClicked())
- Q_PRIVATE_SLOT(d_func(), void cancelClicked())
- Q_PRIVATE_SLOT(d_func(), void upClicked())
- Q_PRIVATE_SLOT(d_func(), void downClicked())
- Q_PRIVATE_SLOT(d_func(), void leftClicked())
- Q_PRIVATE_SLOT(d_func(), void rightClicked())
- Q_PRIVATE_SLOT(d_func(), void renameClicked())
- Q_PRIVATE_SLOT(d_func(), void toolBarRenamed(QListWidgetItem *))
- Q_PRIVATE_SLOT(d_func(), void currentActionChanged(QTreeWidgetItem *))
- Q_PRIVATE_SLOT(d_func(), void currentToolBarChanged(QListWidgetItem *))
- Q_PRIVATE_SLOT(d_func(), void currentToolBarActionChanged(QListWidgetItem *))
};
QT_END_NAMESPACE
diff --git a/src/shared/qttoolbardialog/qttoolbardialog.pri b/src/shared/qttoolbardialog/qttoolbardialog.pri
deleted file mode 100644
index 6e412520d..000000000
--- a/src/shared/qttoolbardialog/qttoolbardialog.pri
+++ /dev/null
@@ -1,5 +0,0 @@
-INCLUDEPATH += $$PWD
-SOURCES += $$PWD/qttoolbardialog.cpp
-HEADERS += $$PWD/qttoolbardialog.h
-FORMS += $$PWD/qttoolbardialog.ui
-RESOURCES += $$PWD/qttoolbardialog.qrc
diff --git a/src/shared/qttoolbardialog/qttoolbardialog.qrc b/src/shared/qttoolbardialog/qttoolbardialog.qrc
deleted file mode 100644
index efd3825fa..000000000
--- a/src/shared/qttoolbardialog/qttoolbardialog.qrc
+++ /dev/null
@@ -1,10 +0,0 @@
-<RCC version="1.0">
- <qresource prefix="/qt-project.org/qttoolbardialog">
- <file>images/up.png</file>
- <file>images/down.png</file>
- <file>images/forward.png</file>
- <file>images/back.png</file>
- <file>images/plus.png</file>
- <file>images/minus.png</file>
- </qresource>
-</RCC>
diff --git a/src/shared/winutils/elfreader.cpp b/src/shared/winutils/elfreader.cpp
deleted file mode 100644
index f375f5841..000000000
--- a/src/shared/winutils/elfreader.cpp
+++ /dev/null
@@ -1,440 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "elfreader.h"
-
-#include <QDir>
-
-QT_BEGIN_NAMESPACE
-
-/* This is a copy of the ELF reader contained in Qt Creator (src/libs/utils),
- * extended by the dependencies() function to read out the dependencies of a dynamic executable. */
-
-quint16 getHalfWord(const unsigned char *&s, const ElfData &context)
-{
- quint16 res;
- if (context.endian == Elf_ELFDATA2MSB)
- res = qFromBigEndian<quint16>(s);
- else
- res = qFromLittleEndian<quint16>(s);
- s += 2;
- return res;
-}
-
-quint32 getWord(const unsigned char *&s, const ElfData &context)
-{
- quint32 res;
- if (context.endian == Elf_ELFDATA2MSB)
- res = qFromBigEndian<quint32>(s);
- else
- res = qFromLittleEndian<quint32>(s);
- s += 4;
- return res;
-}
-
-quint64 getAddress(const unsigned char *&s, const ElfData &context)
-{
- quint64 res;
- if (context.elfclass == Elf_ELFCLASS32) {
- if (context.endian == Elf_ELFDATA2MSB)
- res = qFromBigEndian<quint32>(s);
- else
- res = qFromLittleEndian<quint32>(s);
- s += 4;
- } else {
- if (context.endian == Elf_ELFDATA2MSB)
- res = qFromBigEndian<quint64>(s);
- else
- res = qFromLittleEndian<quint64>(s);
- s += 8;
- }
- return res;
-}
-
-quint64 getOffset(const unsigned char *&s, const ElfData &context)
-{
- return getAddress(s, context);
-}
-
-static void parseSectionHeader(const uchar *s, ElfSectionHeader *sh, const ElfData &context)
-{
- sh->index = getWord(s, context);
- sh->type = getWord(s, context);
- sh->flags = quint32(getOffset(s, context));
- sh->addr = getAddress(s, context);
- sh->offset = getOffset(s, context);
- sh->size = getOffset(s, context);
-}
-
-static void parseProgramHeader(const uchar *s, ElfProgramHeader *sh, const ElfData &context)
-{
- sh->type = getWord(s, context);
- sh->offset = getOffset(s, context);
- /* p_vaddr = */ getAddress(s, context);
- /* p_paddr = */ getAddress(s, context);
- sh->filesz = getWord(s, context);
- sh->memsz = getWord(s, context);
-}
-
-class ElfMapper
-{
-public:
- ElfMapper(const ElfReader *reader) : file(reader->m_binary) {}
-
- bool map()
- {
- if (!file.open(QIODevice::ReadOnly))
- return false;
-
- fdlen = quint64(file.size());
- ustart = file.map(0, qint64(fdlen));
- if (ustart == 0) {
- // Try reading the data into memory instead.
- raw = file.readAll();
- start = raw.constData();
- fdlen = quint64(raw.size());
- }
- return true;
- }
-
-public:
- QFile file;
- QByteArray raw;
- union { const char *start; const uchar *ustart; };
- quint64 fdlen;
-};
-
-ElfReader::ElfReader(const QString &binary)
- : m_binary(binary)
-{
-}
-
-ElfData ElfReader::readHeaders()
-{
- readIt();
- return m_elfData;
-}
-
-static inline QString msgInvalidElfObject(const QString &binary, const QString &why)
-{
- return QStringLiteral("'%1' is an invalid ELF object (%2)")
- .arg(QDir::toNativeSeparators(binary), why);
-}
-
-ElfReader::Result ElfReader::readIt()
-{
- if (!m_elfData.sectionHeaders.isEmpty())
- return Ok;
- if (!m_elfData.programHeaders.isEmpty())
- return Ok;
-
- ElfMapper mapper(this);
- if (!mapper.map())
- return Corrupt;
-
- const quint64 fdlen = mapper.fdlen;
-
- if (fdlen < 64) {
- m_errorString = QStringLiteral("'%1' is not an ELF object (file too small)").arg(QDir::toNativeSeparators(m_binary));
- return NotElf;
- }
-
- if (strncmp(mapper.start, "\177ELF", 4) != 0) {
- m_errorString = QStringLiteral("'%1' is not an ELF object").arg(QDir::toNativeSeparators(m_binary));
- return NotElf;
- }
-
- // 32 or 64 bit
- m_elfData.elfclass = ElfClass(mapper.start[4]);
- const bool is64Bit = m_elfData.elfclass == Elf_ELFCLASS64;
- if (m_elfData.elfclass != Elf_ELFCLASS32 && m_elfData.elfclass != Elf_ELFCLASS64) {
- m_errorString = msgInvalidElfObject(m_binary, QStringLiteral("odd cpu architecture"));
- return Corrupt;
- }
-
- // int bits = (data[4] << 5);
- // If you remove this check to read ELF objects of a different arch,
- // please make sure you modify the typedefs
- // to match the _plugin_ architecture.
- // if ((sizeof(void*) == 4 && bits != 32)
- // || (sizeof(void*) == 8 && bits != 64)) {
- // if (errorString)
- // *errorString = QLibrary::QStringLiteral("'%1' is an invalid ELF object (%2)")
- // .arg(m_binary).arg(QLatin1String("wrong cpu architecture"));
- // return Corrupt;
- // }
-
- // Read Endianhness.
- m_elfData.endian = ElfEndian(mapper.ustart[5]);
- if (m_elfData.endian != Elf_ELFDATA2LSB && m_elfData.endian != Elf_ELFDATA2MSB) {
- m_errorString = msgInvalidElfObject(m_binary, QStringLiteral("odd endianness"));
- return Corrupt;
- }
-
- const uchar *data = mapper.ustart + 16; // e_ident
- m_elfData.elftype = ElfType(getHalfWord(data, m_elfData));
- m_elfData.elfmachine = ElfMachine(getHalfWord(data, m_elfData));
- /* e_version = */ getWord(data, m_elfData);
- m_elfData.entryPoint = getAddress(data, m_elfData);
-
- quint64 e_phoff = getOffset(data, m_elfData);
- quint64 e_shoff = getOffset(data, m_elfData);
- /* e_flags = */ getWord(data, m_elfData);
-
- quint32 e_shsize = getHalfWord(data, m_elfData);
-
- if (e_shsize > fdlen) {
- m_errorString = msgInvalidElfObject(m_binary, QStringLiteral("unexpected e_shsize"));
- return Corrupt;
- }
-
- quint32 e_phentsize = getHalfWord(data, m_elfData);
- if (e_phentsize != (is64Bit ? 56 : 32)) {
- m_errorString = msgInvalidElfObject(m_binary, QStringLiteral("invalid structure"));
- return ElfReader::Corrupt;
- }
- quint32 e_phnum = getHalfWord(data, m_elfData);
-
- quint32 e_shentsize = getHalfWord(data, m_elfData);
-
- if (e_shentsize % 4) {
- m_errorString = msgInvalidElfObject(m_binary, QStringLiteral("unexpected e_shentsize"));
- return Corrupt;
- }
-
- quint32 e_shnum = getHalfWord(data, m_elfData);
- quint32 e_shtrndx = getHalfWord(data, m_elfData);
- if (data != mapper.ustart + (is64Bit ? 64 : 52)) {
- m_errorString = msgInvalidElfObject(m_binary, QStringLiteral("unexpected e_phentsize"));
- return ElfReader::Corrupt;
- }
-
- if (quint64(e_shnum) * e_shentsize > fdlen) {
- const QString reason = QStringLiteral("announced %1 sections, each %2 bytes, exceed file size").arg(e_shnum).arg(e_shentsize);
- m_errorString = msgInvalidElfObject(m_binary, reason);
- return Corrupt;
- }
-
- quint64 soff = e_shoff + e_shentsize * e_shtrndx;
-
-// if ((soff + e_shentsize) > fdlen || soff % 4 || soff == 0) {
-// m_errorString = QLibrary::QStringLiteral("'%1' is an invalid ELF object (%2)")
-// .arg(m_binary)
-// .arg(QLatin1String("shstrtab section header seems to be at %1"))
-// .arg(QString::number(soff, 16));
-// return Corrupt;
-// }
-
- if (e_shoff) {
- ElfSectionHeader strtab;
- parseSectionHeader(mapper.ustart + soff, &strtab, m_elfData);
- const quint64 stringTableFileOffset = strtab.offset;
- if (quint32(stringTableFileOffset + e_shentsize) >= fdlen
- || stringTableFileOffset == 0) {
- const QString reason = QStringLiteral("string table seems to be at 0x%1").arg(soff, 0, 16);
- m_errorString = msgInvalidElfObject(m_binary, reason);
- return Corrupt;
- }
-
- for (quint32 i = 0; i < e_shnum; ++i) {
- const uchar *s = mapper.ustart + e_shoff + i * e_shentsize;
- ElfSectionHeader sh;
- parseSectionHeader(s, &sh, m_elfData);
-
- if (stringTableFileOffset + sh.index > fdlen) {
- const QString reason = QStringLiteral("section name %1 of %2 behind end of file")
- .arg(i).arg(e_shnum);
- m_errorString = msgInvalidElfObject(m_binary, reason);
- return Corrupt;
- }
-
- sh.name = mapper.start + stringTableFileOffset + sh.index;
- if (sh.name == ".gdb_index") {
- m_elfData.symbolsType = FastSymbols;
- } else if (sh.name == ".debug_info") {
- m_elfData.symbolsType = PlainSymbols;
- } else if (sh.name == ".gnu_debuglink") {
- m_elfData.debugLink = QByteArray(mapper.start + sh.offset);
- m_elfData.symbolsType = LinkedSymbols;
- } else if (sh.name == ".note.gnu.build-id") {
- m_elfData.symbolsType = BuildIdSymbols;
- if (sh.size > 16)
- m_elfData.buildId = QByteArray(mapper.start + sh.offset + 16,
- int(sh.size) - 16).toHex();
- }
- m_elfData.sectionHeaders.append(sh);
- }
- }
-
- if (e_phoff) {
- for (quint32 i = 0; i < e_phnum; ++i) {
- const uchar *s = mapper.ustart + e_phoff + i * e_phentsize;
- ElfProgramHeader ph;
- parseProgramHeader(s, &ph, m_elfData);
- m_elfData.programHeaders.append(ph);
- }
- }
- return Ok;
-}
-
-QByteArray ElfReader::readSection(const QByteArray &name)
-{
- readIt();
- int i = m_elfData.indexOf(name);
- if (i == -1)
- return QByteArray();
-
- ElfMapper mapper(this);
- if (!mapper.map())
- return QByteArray();
-
- const ElfSectionHeader &section = m_elfData.sectionHeaders.at(i);
- return QByteArray(mapper.start + section.offset, int(section.size));
-}
-
-static QByteArray cutout(const char *s)
-{
- QByteArray res(s, 80);
- const int pos = res.indexOf('\0');
- if (pos != -1)
- res.resize(pos - 1);
- return res;
-}
-
-QByteArray ElfReader::readCoreName(bool *isCore)
-{
- *isCore = false;
-
- readIt();
-
- ElfMapper mapper(this);
- if (!mapper.map())
- return QByteArray();
-
- if (m_elfData.elftype != Elf_ET_CORE)
- return QByteArray();
-
- *isCore = true;
-
- for (int i = 0, n = m_elfData.sectionHeaders.size(); i != n; ++i)
- if (m_elfData.sectionHeaders.at(i).type == Elf_SHT_NOTE) {
- const ElfSectionHeader &header = m_elfData.sectionHeaders.at(i);
- return cutout(mapper.start + header.offset + 0x40);
- }
-
- for (int i = 0, n = m_elfData.programHeaders.size(); i != n; ++i)
- if (m_elfData.programHeaders.at(i).type == Elf_PT_NOTE) {
- const ElfProgramHeader &header = m_elfData.programHeaders.at(i);
- return cutout(mapper.start + header.offset + 0xec);
- }
-
- return QByteArray();
-}
-
-int ElfData::indexOf(const QByteArray &name) const
-{
- for (int i = 0, n = sectionHeaders.size(); i != n; ++i)
- if (sectionHeaders.at(i).name == name)
- return i;
- return -1;
-}
-
-/* Helpers for reading out the .dynamic section containing the dependencies.
- * The ".dynamic" section is an array of
- * typedef struct {
- * Elf32_Sword d_tag;
- * union {
- * Elf32_Word d_val;
- * dElf32_Addr d_ptr;
- * } d_un;
- * } Elf32_Dyn
- * with entries where a tag DT_NEEDED indicates that m_val is an offset into
- * the string table ".dynstr". The documentation states that entries with the
- * tag DT_STRTAB contain an offset for the string table to be used, but that
- * has been found not to contain valid entries. */
-
-enum DynamicSectionTags {
- DT_NULL = 0,
- DT_NEEDED = 1,
- DT_STRTAB = 5,
- DT_SONAME = 14,
- DT_RPATH = 15
-};
-
-QList<QByteArray> ElfReader::dependencies()
-{
- QList<QByteArray> result;
-
- ElfMapper mapper(this);
- if (!mapper.map()) {
- m_errorString = QStringLiteral("Mapper failure");
- return result;
- }
- quint64 dynStrOffset = 0;
- quint64 dynamicOffset = 0;
- quint64 dynamicSize = 0;
-
- const QList<ElfSectionHeader> &headers = readHeaders().sectionHeaders;
- for (const ElfSectionHeader &eh : headers) {
- if (eh.name == QByteArrayLiteral(".dynstr")) {
- dynStrOffset = eh.offset;
- } else if (eh.name == QByteArrayLiteral(".dynamic")) {
- dynamicOffset = eh.offset;
- dynamicSize = eh.size;
- }
- if (dynStrOffset && dynamicOffset)
- break;
- }
-
- if (!dynStrOffset || !dynamicOffset) {
- m_errorString = QStringLiteral("Not a dynamically linked executable.");
- return result;
- }
-
- const unsigned char *dynamicData = mapper.ustart + dynamicOffset;
- const unsigned char *dynamicDataEnd = dynamicData + dynamicSize;
- while (dynamicData < dynamicDataEnd) {
- const quint32 tag = getWord(dynamicData, m_elfData);
- if (tag == DT_NULL)
- break;
- if (m_elfData.elfclass == Elf_ELFCLASS64)
- dynamicData += sizeof(quint32); // padding to d_val/d_ptr.
- if (tag == DT_NEEDED) {
- const quint32 offset = getWord(dynamicData, m_elfData);
- if (m_elfData.elfclass == Elf_ELFCLASS64)
- dynamicData += sizeof(quint32); // past d_ptr.
- const char *name = mapper.start + dynStrOffset + offset;
- result.push_back(name);
- } else {
- dynamicData += m_elfData.elfclass == Elf_ELFCLASS64 ? 8 : 4;
- }
- }
- return result;
-}
-
-QT_END_NAMESPACE
diff --git a/src/shared/winutils/elfreader.h b/src/shared/winutils/elfreader.h
deleted file mode 100644
index d84f5a060..000000000
--- a/src/shared/winutils/elfreader.h
+++ /dev/null
@@ -1,176 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef ELFREADER_H
-#define ELFREADER_H
-
-#include <QtCore/QList>
-#include <QtCore/QString>
-#include <QtCore/QtEndian>
-
-QT_BEGIN_NAMESPACE
-
-enum ElfProgramHeaderType
-{
- Elf_PT_NULL = 0,
- Elf_PT_LOAD = 1,
- Elf_PT_DYNAMIC = 2,
- Elf_PT_INTERP = 3,
- Elf_PT_NOTE = 4,
- Elf_PT_SHLIB = 5,
- Elf_PT_PHDR = 6,
- Elf_PT_TLS = 7,
- Elf_PT_NUM = 8
-};
-
-enum ElfSectionHeaderType
-{
- Elf_SHT_NULL = 0,
- Elf_SHT_PROGBITS = 1,
- Elf_SHT_SYMTAB = 2,
- Elf_SHT_STRTAB = 3,
- Elf_SHT_RELA = 4,
- Elf_SHT_HASH = 5,
- Elf_SHT_DYNAMIC = 6,
- Elf_SHT_NOTE = 7,
- Elf_SHT_NOBITS = 8,
- Elf_SHT_REL = 9,
- Elf_SHT_SHLIB = 10,
- Elf_SHT_DYNSYM = 11,
- Elf_SHT_INIT_ARRAY = 14,
- Elf_SHT_FINI_ARRAY = 15,
- Elf_SHT_PREINIT_ARRAY = 16,
- Elf_SHT_GROUP = 17,
- Elf_SHT_SYMTAB_SHNDX = 18
-};
-
-enum ElfEndian
-{
- Elf_ELFDATANONE = 0,
- Elf_ELFDATA2LSB = 1,
- Elf_ELFDATA2MSB = 2,
- Elf_ELFDATANUM = 3
-};
-
-enum ElfClass
-{
- Elf_ELFCLASS32 = 1,
- Elf_ELFCLASS64 = 2
-};
-
-enum ElfType
-{
- Elf_ET_NONE = 0,
- Elf_ET_REL = 1,
- Elf_ET_EXEC = 2,
- Elf_ET_DYN = 3,
- Elf_ET_CORE = 4
-};
-
-enum ElfMachine
-{
- Elf_EM_386 = 3,
- Elf_EM_ARM = 40,
- Elf_EM_X86_64 = 62
-};
-
-enum DebugSymbolsType
-{
- UnknownSymbols = 0, // Unknown.
- NoSymbols = 1, // No usable symbols.
- LinkedSymbols = 2, // Link to symols available.
- BuildIdSymbols = 4, // BuildId available.
- PlainSymbols = 8, // Ordinary symbols available.
- FastSymbols = 16 // Dwarf index available.
-};
-
-class ElfSectionHeader
-{
-public:
- QByteArray name;
- quint32 index;
- quint32 type;
- quint32 flags;
- quint64 offset;
- quint64 size;
- quint64 addr;
-};
-
-class ElfProgramHeader
-{
-public:
- quint32 name;
- quint32 type;
- quint64 offset;
- quint64 filesz;
- quint64 memsz;
-};
-
-class ElfData
-{
-public:
- ElfData() : symbolsType(UnknownSymbols) {}
- int indexOf(const QByteArray &name) const;
-
-public:
- ElfEndian endian;
- ElfType elftype;
- ElfMachine elfmachine;
- ElfClass elfclass;
- quint64 entryPoint;
- QByteArray debugLink;
- QByteArray buildId;
- DebugSymbolsType symbolsType;
- QList<ElfSectionHeader> sectionHeaders;
- QList<ElfProgramHeader> programHeaders;
-};
-
-class ElfReader
-{
-public:
- explicit ElfReader(const QString &binary);
- enum Result { Ok, NotElf, Corrupt };
-
- ElfData readHeaders();
- QByteArray readSection(const QByteArray &sectionName);
- QString errorString() const { return m_errorString; }
- QByteArray readCoreName(bool *isCore);
- QList<QByteArray> dependencies();
-
-private:
- friend class ElfMapper;
- Result readIt();
-
- QString m_binary;
- QString m_errorString;
- ElfData m_elfData;
-};
-
-QT_END_NAMESPACE
-
-#endif // ELFREADER_H
diff --git a/src/shared/winutils/qmlutils.cpp b/src/shared/winutils/qmlutils.cpp
deleted file mode 100644
index 6eebf6d86..000000000
--- a/src/shared/winutils/qmlutils.cpp
+++ /dev/null
@@ -1,160 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qmlutils.h"
-#include "utils.h"
-
-#include <QtCore/QDir>
-#include <QtCore/QFileInfo>
-#include <QtCore/QCoreApplication>
-#include <QtCore/QJsonDocument>
-#include <QtCore/QJsonObject>
-#include <QtCore/QJsonArray>
-#include <QtCore/QJsonParseError>
-
-QT_BEGIN_NAMESPACE
-
-bool operator==(const QmlImportScanResult::Module &m1, const QmlImportScanResult::Module &m2)
-{
- return m1.className.isEmpty() ? m1.name == m2.name : m1.className == m2.className;
-}
-
-// Return install path (cp -r semantics)
-QString QmlImportScanResult::Module::installPath(const QString &root) const
-{
- QString result = root;
- const int lastSlashPos = relativePath.lastIndexOf(QLatin1Char('/'));
- if (lastSlashPos != -1) {
- result += QLatin1Char('/');
- result += QStringView{relativePath}.left(lastSlashPos);
- }
- return result;
-}
-
-static QString qmlDirectoryRecursion(Platform platform, const QString &path)
-{
- QDir dir(path);
- if (!dir.entryList(QStringList(QStringLiteral("*.qml")), QDir::Files, QDir::NoSort).isEmpty())
- return dir.path();
- const QFileInfoList &subDirs = dir.entryInfoList(QStringList(), QDir::Dirs | QDir::NoDotAndDotDot, QDir::NoSort);
- for (const QFileInfo &subDirFi : subDirs) {
- if (!isBuildDirectory(platform, subDirFi.fileName())) {
- const QString subPath = qmlDirectoryRecursion(platform, subDirFi.absoluteFilePath());
- if (!subPath.isEmpty())
- return subPath;
- }
- }
- return QString();
-}
-
-// Find a directory containing QML files in the project
-QString findQmlDirectory(Platform platform, const QString &startDirectoryName)
-{
- QDir startDirectory(startDirectoryName);
- if (isBuildDirectory(platform, startDirectory.dirName()))
- startDirectory.cdUp();
- return qmlDirectoryRecursion(platform, startDirectory.path());
-}
-
-static void findFileRecursion(const QDir &directory, Platform platform,
- DebugMatchMode debugMatchMode, QStringList *matches)
-{
- const QStringList &dlls = findSharedLibraries(directory, platform, debugMatchMode);
- for (const QString &dll : dlls)
- matches->append(directory.filePath(dll));
- const QFileInfoList &subDirs = directory.entryInfoList(QStringList(), QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks);
- for (const QFileInfo &subDirFi : subDirs) {
- QDir subDirectory(subDirFi.absoluteFilePath());
- if (subDirectory.isReadable())
- findFileRecursion(subDirectory, platform, debugMatchMode, matches);
- }
-}
-
-QmlImportScanResult runQmlImportScanner(const QString &directory, const QStringList &qmlImportPaths,
- bool usesWidgets, int platform, DebugMatchMode debugMatchMode,
- QString *errorMessage)
-{
- Q_UNUSED(usesWidgets);
- QmlImportScanResult result;
- QStringList arguments;
- for (const QString &importPath : qmlImportPaths)
- arguments << QStringLiteral("-importPath") << importPath;
- arguments << QStringLiteral("-rootPath") << directory;
- unsigned long exitCode;
- QByteArray stdOut;
- QByteArray stdErr;
- const QString binary = QStringLiteral("qmlimportscanner");
- if (!runProcess(binary, arguments, QDir::currentPath(), &exitCode, &stdOut, &stdErr, errorMessage))
- return result;
- if (exitCode) {
- *errorMessage = binary + QStringLiteral(" returned ") + QString::number(exitCode)
- + QStringLiteral(": ") + QString::fromLocal8Bit(stdErr);
- return result;
- }
- QJsonParseError jsonParseError{};
- const QJsonDocument data = QJsonDocument::fromJson(stdOut, &jsonParseError);
- if (data.isNull() ) {
- *errorMessage = binary + QStringLiteral(" returned invalid JSON output: ")
- + jsonParseError.errorString() + QStringLiteral(" :\"")
- + QString::fromLocal8Bit(stdOut) + QLatin1Char('"');
- return result;
- }
- const QJsonArray array = data.array();
- const int childCount = array.count();
- for (int c = 0; c < childCount; ++c) {
- const QJsonObject object = array.at(c).toObject();
- if (object.value(QStringLiteral("type")).toString() == QLatin1String("module")) {
- const QString path = object.value(QStringLiteral("path")).toString();
- if (!path.isEmpty()) {
- QmlImportScanResult::Module module;
- module.name = object.value(QStringLiteral("name")).toString();
- module.className = object.value(QStringLiteral("classname")).toString();
- module.sourcePath = path;
- module.relativePath = object.value(QStringLiteral("relativePath")).toString();
- result.modules.append(module);
- findFileRecursion(QDir(path), Platform(platform), debugMatchMode, &result.plugins);
- }
- }
- }
- result.ok = true;
- return result;
-}
-
-void QmlImportScanResult::append(const QmlImportScanResult &other)
-{
- for (const QmlImportScanResult::Module &module : other.modules) {
- if (std::find(modules.cbegin(), modules.cend(), module) == modules.cend())
- modules.append(module);
- }
- for (const QString &plugin : other.plugins) {
- if (!plugins.contains(plugin))
- plugins.append(plugin);
- }
-}
-
-QT_END_NAMESPACE
diff --git a/src/shared/winutils/qmlutils.h b/src/shared/winutils/qmlutils.h
deleted file mode 100644
index 572be7cab..000000000
--- a/src/shared/winutils/qmlutils.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMLUTILS_H
-#define QMLUTILS_H
-
-#include "utils.h"
-
-#include <QStringList>
-
-QT_BEGIN_NAMESPACE
-
-QString findQmlDirectory(Platform platform, const QString &startDirectoryName);
-
-struct QmlImportScanResult {
- struct Module {
- QString installPath(const QString &root) const;
-
- QString name;
- QString className;
- QString sourcePath;
- QString relativePath;
- };
-
- void append(const QmlImportScanResult &other);
-
- bool ok = false;
- QList<Module> modules;
- QStringList plugins;
-};
-
-bool operator==(const QmlImportScanResult::Module &m1, const QmlImportScanResult::Module &m2);
-
-QmlImportScanResult runQmlImportScanner(const QString &directory, const QStringList &qmlImportPaths,
- bool usesWidgets, int platform, DebugMatchMode debugMatchMode,
- QString *errorMessage);
-
-QT_END_NAMESPACE
-
-#endif // QMLUTILS_H
diff --git a/src/shared/winutils/utils.cpp b/src/shared/winutils/utils.cpp
deleted file mode 100644
index 4656e0599..000000000
--- a/src/shared/winutils/utils.cpp
+++ /dev/null
@@ -1,1063 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "utils.h"
-#include "elfreader.h"
-
-#include <QtCore/QString>
-#include <QtCore/QDebug>
-#include <QtCore/QDir>
-#include <QtCore/QFile>
-#include <QtCore/QFileInfo>
-#include <QtCore/QTemporaryFile>
-#include <QtCore/QScopedPointer>
-#include <QtCore/QScopedArrayPointer>
-#include <QtCore/QStandardPaths>
-#if defined(Q_OS_WIN)
-# include <QtCore/qt_windows.h>
-# include <shlwapi.h>
-# include <delayimp.h>
-#else // Q_OS_WIN
-# include <sys/wait.h>
-# include <sys/types.h>
-# include <sys/stat.h>
-# include <unistd.h>
-# include <stdlib.h>
-# include <string.h>
-# include <errno.h>
-# include <fcntl.h>
-#endif // !Q_OS_WIN
-
-QT_BEGIN_NAMESPACE
-
-int optVerboseLevel = 1;
-
-bool isBuildDirectory(Platform platform, const QString &dirName)
-{
- return (platform.testFlag(Msvc) || platform.testFlag(ClangMsvc))
- && (dirName == QLatin1String("debug") || dirName == QLatin1String("release"));
-}
-
-// Create a symbolic link by changing to the source directory to make sure the
-// link uses relative paths only (QFile::link() otherwise uses the absolute path).
-bool createSymbolicLink(const QFileInfo &source, const QString &target, QString *errorMessage)
-{
- const QString oldDirectory = QDir::currentPath();
- if (!QDir::setCurrent(source.absolutePath())) {
- *errorMessage = QStringLiteral("Unable to change to directory %1.").arg(QDir::toNativeSeparators(source.absolutePath()));
- return false;
- }
- QFile file(source.fileName());
- const bool success = file.link(target);
- QDir::setCurrent(oldDirectory);
- if (!success) {
- *errorMessage = QString::fromLatin1("Failed to create symbolic link %1 -> %2: %3")
- .arg(QDir::toNativeSeparators(source.absoluteFilePath()),
- QDir::toNativeSeparators(target), file.errorString());
- return false;
- }
- return true;
-}
-
-bool createDirectory(const QString &directory, QString *errorMessage)
-{
- const QFileInfo fi(directory);
- if (fi.isDir())
- return true;
- if (fi.exists()) {
- *errorMessage = QString::fromLatin1("%1 already exists and is not a directory.").
- arg(QDir::toNativeSeparators(directory));
- return false;
- }
- if (optVerboseLevel)
- std::wcout << "Creating " << QDir::toNativeSeparators(directory) << "...\n";
- QDir dir;
- if (!dir.mkpath(directory)) {
- *errorMessage = QString::fromLatin1("Could not create directory %1.").
- arg(QDir::toNativeSeparators(directory));
- return false;
- }
- return true;
-}
-
-// Find shared libraries matching debug/Platform in a directory, return relative names.
-QStringList findSharedLibraries(const QDir &directory, Platform platform,
- DebugMatchMode debugMatchMode,
- const QString &prefix)
-{
- QString nameFilter = prefix;
- if (nameFilter.isEmpty())
- nameFilter += QLatin1Char('*');
- if (debugMatchMode == MatchDebug && platformHasDebugSuffix(platform))
- nameFilter += QLatin1Char('d');
- nameFilter += sharedLibrarySuffix(platform);
- QStringList result;
- QString errorMessage;
- const QFileInfoList &dlls = directory.entryInfoList(QStringList(nameFilter), QDir::Files);
- for (const QFileInfo &dllFi : dlls) {
- const QString dllPath = dllFi.absoluteFilePath();
- bool matches = true;
- if (debugMatchMode != MatchDebugOrRelease && (platform & WindowsBased)) {
- bool debugDll;
- if (readPeExecutable(dllPath, &errorMessage, 0, 0, &debugDll,
- (platform == WindowsDesktopMinGW))) {
- matches = debugDll == (debugMatchMode == MatchDebug);
- } else {
- std::wcerr << "Warning: Unable to read " << QDir::toNativeSeparators(dllPath)
- << ": " << errorMessage;
- }
- } // Windows
- if (matches)
- result += dllFi.fileName();
- } // for
- return result;
-}
-
-#ifdef Q_OS_WIN
-QString winErrorMessage(unsigned long error)
-{
- QString rc = QString::fromLatin1("#%1: ").arg(error);
- char16_t *lpMsgBuf;
-
- const DWORD len = FormatMessage(
- FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL, error, 0, reinterpret_cast<LPTSTR>(&lpMsgBuf), 0, NULL);
- if (len) {
- rc = QString::fromUtf16(lpMsgBuf, int(len));
- LocalFree(lpMsgBuf);
- } else {
- rc += QString::fromLatin1("<unknown error>");
- }
- return rc;
-}
-
-// Case-Normalize file name via GetShortPathNameW()/GetLongPathNameW()
-QString normalizeFileName(const QString &name)
-{
- wchar_t shortBuffer[MAX_PATH];
- const QString nativeFileName = QDir::toNativeSeparators(name);
- if (!GetShortPathNameW(reinterpret_cast<LPCWSTR>(nativeFileName.utf16()), shortBuffer, MAX_PATH))
- return name;
- wchar_t result[MAX_PATH];
- if (!GetLongPathNameW(shortBuffer, result, MAX_PATH))
- return name;
- return QDir::fromNativeSeparators(QString::fromWCharArray(result));
-}
-
-// Find a tool binary in the Windows SDK 8
-QString findSdkTool(const QString &tool)
-{
- QStringList paths = QString::fromLocal8Bit(qgetenv("PATH")).split(QLatin1Char(';'));
- const QByteArray sdkDir = qgetenv("WindowsSdkDir");
- if (!sdkDir.isEmpty())
- paths.prepend(QDir::cleanPath(QString::fromLocal8Bit(sdkDir)) + QLatin1String("/Tools/x64"));
- return QStandardPaths::findExecutable(tool, paths);
-}
-
-// runProcess helper: Create a temporary file for stdout/stderr redirection.
-static HANDLE createInheritableTemporaryFile()
-{
- wchar_t path[MAX_PATH];
- if (!GetTempPath(MAX_PATH, path))
- return INVALID_HANDLE_VALUE;
- wchar_t name[MAX_PATH];
- if (!GetTempFileName(path, L"temp", 0, name)) // Creates file.
- return INVALID_HANDLE_VALUE;
- SECURITY_ATTRIBUTES securityAttributes;
- ZeroMemory(&securityAttributes, sizeof(securityAttributes));
- securityAttributes.nLength = sizeof(securityAttributes);
- securityAttributes.bInheritHandle = TRUE;
- return CreateFile(name, GENERIC_READ | GENERIC_WRITE,
- FILE_SHARE_READ | FILE_SHARE_WRITE, &securityAttributes,
- TRUNCATE_EXISTING,
- FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE, NULL);
-}
-
-// runProcess helper: Rewind and read out a temporary file for stdout/stderr.
-static inline void readTemporaryProcessFile(HANDLE handle, QByteArray *result)
-{
- if (SetFilePointer(handle, 0, 0, FILE_BEGIN) == 0xFFFFFFFF)
- return;
- char buf[1024];
- DWORD bytesRead;
- while (ReadFile(handle, buf, sizeof(buf), &bytesRead, NULL) && bytesRead)
- result->append(buf, int(bytesRead));
- CloseHandle(handle);
-}
-
-static inline void appendToCommandLine(const QString &argument, QString *commandLine)
-{
- const bool needsQuote = argument.contains(QLatin1Char(' '));
- if (!commandLine->isEmpty())
- commandLine->append(QLatin1Char(' '));
- if (needsQuote)
- commandLine->append(QLatin1Char('"'));
- commandLine->append(argument);
- if (needsQuote)
- commandLine->append(QLatin1Char('"'));
-}
-
-// runProcess: Run a command line process (replacement for QProcess which
-// does not exist in the bootstrap library).
-bool runProcess(const QString &binary, const QStringList &args,
- const QString &workingDirectory,
- unsigned long *exitCode, QByteArray *stdOut, QByteArray *stdErr,
- QString *errorMessage)
-{
- if (exitCode)
- *exitCode = 0;
-
- STARTUPINFO si;
- ZeroMemory(&si, sizeof(si));
- si.cb = sizeof(si);
-
- STARTUPINFO myInfo;
- GetStartupInfo(&myInfo);
- si.hStdInput = myInfo.hStdInput;
- si.hStdOutput = myInfo.hStdOutput;
- si.hStdError = myInfo.hStdError;
-
- PROCESS_INFORMATION pi;
- ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
- const QChar backSlash = QLatin1Char('\\');
- QString nativeWorkingDir = QDir::toNativeSeparators(workingDirectory.isEmpty() ? QDir::currentPath() : workingDirectory);
- if (!nativeWorkingDir.endsWith(backSlash))
- nativeWorkingDir += backSlash;
-
- if (stdOut) {
- si.hStdOutput = createInheritableTemporaryFile();
- if (si.hStdOutput == INVALID_HANDLE_VALUE) {
- if (errorMessage)
- *errorMessage = QStringLiteral("Error creating stdout temporary file");
- return false;
- }
- si.dwFlags |= STARTF_USESTDHANDLES;
- }
-
- if (stdErr) {
- si.hStdError = createInheritableTemporaryFile();
- if (si.hStdError == INVALID_HANDLE_VALUE) {
- if (errorMessage)
- *errorMessage = QStringLiteral("Error creating stderr temporary file");
- return false;
- }
- si.dwFlags |= STARTF_USESTDHANDLES;
- }
-
- // Create a copy of the command line which CreateProcessW can modify.
- QString commandLine;
- appendToCommandLine(binary, &commandLine);
- for (const QString &a : args)
- appendToCommandLine(a, &commandLine);
- if (optVerboseLevel > 1)
- std::wcout << "Running: " << commandLine << '\n';
-
- QScopedArrayPointer<wchar_t> commandLineW(new wchar_t[commandLine.size() + 1]);
- commandLine.toWCharArray(commandLineW.data());
- commandLineW[commandLine.size()] = 0;
- if (!CreateProcessW(0, commandLineW.data(), 0, 0, /* InheritHandles */ TRUE, 0, 0,
- reinterpret_cast<LPCWSTR>(nativeWorkingDir.utf16()), &si, &pi)) {
- if (stdOut)
- CloseHandle(si.hStdOutput);
- if (stdErr)
- CloseHandle(si.hStdError);
- if (errorMessage)
- *errorMessage = QStringLiteral("CreateProcessW failed: ") + winErrorMessage(GetLastError());
- return false;
- }
-
- WaitForSingleObject(pi.hProcess, INFINITE);
- CloseHandle(pi.hThread);
- if (exitCode)
- GetExitCodeProcess(pi.hProcess, exitCode);
- CloseHandle(pi.hProcess);
-
- if (stdOut)
- readTemporaryProcessFile(si.hStdOutput, stdOut);
- if (stdErr)
- readTemporaryProcessFile(si.hStdError, stdErr);
- return true;
-}
-
-bool runElevatedBackgroundProcess(const QString &binary, const QStringList &args, Qt::HANDLE *processHandle)
-{
- QScopedArrayPointer<wchar_t> binaryW(new wchar_t[binary.size() + 1]);
- binary.toWCharArray(binaryW.data());
- binaryW[binary.size()] = 0;
-
- const QString arguments = args.join(QLatin1Char(' '));
- QScopedArrayPointer<wchar_t> argumentsW(new wchar_t[arguments.size() + 1]);
- arguments.toWCharArray(argumentsW.data());
- argumentsW[arguments.size()] = 0;
-
- SHELLEXECUTEINFO shellExecute = {};
- shellExecute.cbSize = sizeof(shellExecute);
- shellExecute.fMask = SEE_MASK_NOCLOSEPROCESS;
- shellExecute.hwnd = 0;
- shellExecute.lpVerb = L"runas"; // causes elevation
- shellExecute.lpFile = binaryW.data();
- shellExecute.lpParameters = argumentsW.data();
- shellExecute.lpDirectory = 0;
- shellExecute.nShow = SW_SHOW;
- shellExecute.hInstApp = 0;
-
- bool ret = ShellExecuteEx(&shellExecute);
-
- if (processHandle)
- *processHandle = shellExecute.hProcess;
-
- return ret;
-}
-
-#else // Q_OS_WIN
-
-static inline char *encodeFileName(const QString &f)
-{
- const QByteArray encoded = QFile::encodeName(f);
- char *result = new char[encoded.size() + 1];
- strcpy(result, encoded.constData());
- return result;
-}
-
-static inline char *tempFilePattern()
-{
- QString path = QDir::tempPath();
- if (!path.endsWith(QLatin1Char('/')))
- path += QLatin1Char('/');
- path += QStringLiteral("tmpXXXXXX");
- return encodeFileName(path);
-}
-
-static inline QByteArray readOutRedirectFile(int fd)
-{
- enum { bufSize = 256 };
-
- QByteArray result;
- if (!lseek(fd, 0, 0)) {
- char buf[bufSize];
- while (true) {
- const ssize_t rs = read(fd, buf, bufSize);
- if (rs <= 0)
- break;
- result.append(buf, int(rs));
- }
- }
- close(fd);
- return result;
-}
-
-// runProcess: Run a command line process (replacement for QProcess which
-// does not exist in the bootstrap library).
-bool runProcess(const QString &binary, const QStringList &args,
- const QString &workingDirectory,
- unsigned long *exitCode, QByteArray *stdOut, QByteArray *stdErr,
- QString *errorMessage)
-{
- QScopedArrayPointer<char> stdOutFileName;
- QScopedArrayPointer<char> stdErrFileName;
-
- int stdOutFile = 0;
- if (stdOut) {
- stdOutFileName.reset(tempFilePattern());
- stdOutFile = mkstemp(stdOutFileName.data());
- if (stdOutFile < 0) {
- *errorMessage = QStringLiteral("mkstemp() failed: ") + QString::fromLocal8Bit(strerror(errno));
- return false;
- }
- }
-
- int stdErrFile = 0;
- if (stdErr) {
- stdErrFileName.reset(tempFilePattern());
- stdErrFile = mkstemp(stdErrFileName.data());
- if (stdErrFile < 0) {
- *errorMessage = QStringLiteral("mkstemp() failed: ") + QString::fromLocal8Bit(strerror(errno));
- return false;
- }
- }
-
- const pid_t pID = fork();
-
- if (pID < 0) {
- *errorMessage = QStringLiteral("Fork failed: ") + QString::fromLocal8Bit(strerror(errno));
- return false;
- }
-
- if (!pID) { // Child
- if (stdOut) {
- dup2(stdOutFile, STDOUT_FILENO);
- close(stdOutFile);
- }
- if (stdErr) {
- dup2(stdErrFile, STDERR_FILENO);
- close(stdErrFile);
- }
-
- if (!workingDirectory.isEmpty() && !QDir::setCurrent(workingDirectory)) {
- std::wcerr << "Failed to change working directory to " << workingDirectory << ".\n";
- ::_exit(-1);
- }
-
- char **argv = new char *[args.size() + 2]; // Create argv.
- char **ap = argv;
- *ap++ = encodeFileName(binary);
- for (const QString &a : qAsConst(args))
- *ap++ = encodeFileName(a);
- *ap = 0;
-
- execvp(argv[0], argv);
- ::_exit(-1);
- }
-
- int status;
- pid_t waitResult;
-
- do {
- waitResult = waitpid(pID, &status, 0);
- } while (waitResult == -1 && errno == EINTR);
-
- if (stdOut) {
- *stdOut = readOutRedirectFile(stdOutFile);
- unlink(stdOutFileName.data());
- }
- if (stdErr) {
- *stdErr = readOutRedirectFile(stdErrFile);
- unlink(stdErrFileName.data());
- }
-
- if (waitResult < 0) {
- *errorMessage = QStringLiteral("Wait failed: ") + QString::fromLocal8Bit(strerror(errno));
- return false;
- }
- if (!WIFEXITED(status)) {
- *errorMessage = binary + QStringLiteral(" did not exit cleanly.");
- return false;
- }
- if (exitCode)
- *exitCode = WEXITSTATUS(status);
- return true;
-}
-
-bool runElevatedBackgroundProcess(const QString &binary, const QStringList &args, Qt::HANDLE *processHandle)
-{
- Q_UNUSED(binary);
- Q_UNUSED(args);
- Q_UNUSED(processHandle);
- Q_UNIMPLEMENTED();
- return false;
-}
-
-#endif // !Q_OS_WIN
-
-// Find a file in the path using ShellAPI. This can be used to locate DLLs which
-// QStandardPaths cannot do.
-QString findInPath(const QString &file)
-{
-#if defined(Q_OS_WIN)
- if (file.size() < MAX_PATH - 1) {
- wchar_t buffer[MAX_PATH];
- file.toWCharArray(buffer);
- buffer[file.size()] = 0;
- if (PathFindOnPath(buffer, NULL))
- return QDir::cleanPath(QString::fromWCharArray(buffer));
- }
- return QString();
-#else // Q_OS_WIN
- return QStandardPaths::findExecutable(file);
-#endif // !Q_OS_WIN
-}
-
-const char *qmakeInfixKey = "QT_INFIX";
-
-QMap<QString, QString> queryQMakeAll(const QString &qmakeBinary, QString *errorMessage)
-{
- const QString binary = !qmakeBinary.isEmpty() ? qmakeBinary : QStringLiteral("qmake");
- QByteArray stdOut;
- QByteArray stdErr;
- unsigned long exitCode = 0;
- if (!runProcess(binary, QStringList(QStringLiteral("-query")), QString(), &exitCode, &stdOut, &stdErr, errorMessage))
- return QMap<QString, QString>();
- if (exitCode) {
- *errorMessage = binary + QStringLiteral(" returns ") + QString::number(exitCode)
- + QStringLiteral(": ") + QString::fromLocal8Bit(stdErr);
- return QMap<QString, QString>();
- }
- const QString output = QString::fromLocal8Bit(stdOut).trimmed().remove(QLatin1Char('\r'));
- QMap<QString, QString> result;
- const int size = output.size();
- for (int pos = 0; pos < size; ) {
- const int colonPos = output.indexOf(QLatin1Char(':'), pos);
- if (colonPos < 0)
- break;
- int endPos = output.indexOf(QLatin1Char('\n'), colonPos + 1);
- if (endPos < 0)
- endPos = size;
- const QString key = output.mid(pos, colonPos - pos);
- const QString value = output.mid(colonPos + 1, endPos - colonPos - 1);
- result.insert(key, value);
- pos = endPos + 1;
- }
- QFile qconfigPriFile(result.value(QStringLiteral("QT_HOST_DATA")) + QStringLiteral("/mkspecs/qconfig.pri"));
- if (qconfigPriFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
- while (true) {
- const QByteArray line = qconfigPriFile.readLine();
- if (line.isEmpty())
- break;
- if (line.startsWith("QT_LIBINFIX")) {
- const int pos = line.indexOf('=');
- if (pos >= 0) {
- const QString infix = QString::fromUtf8(line.right(line.size() - pos - 1).trimmed());
- if (!infix.isEmpty())
- result.insert(QLatin1String(qmakeInfixKey), infix);
- }
- break;
- }
- }
- } else {
- std::wcerr << "Warning: Unable to read " << QDir::toNativeSeparators(qconfigPriFile.fileName())
- << ": " << qconfigPriFile.errorString()<< '\n';
- }
- return result;
-}
-
-QString queryQMake(const QString &variable, QString *errorMessage)
-{
- QByteArray stdOut;
- QByteArray stdErr;
- unsigned long exitCode;
- const QString binary = QStringLiteral("qmake");
- QStringList args;
- args << QStringLiteral("-query ") << variable;
- if (!runProcess(binary, args, QString(), &exitCode, &stdOut, &stdErr, errorMessage))
- return QString();
- if (exitCode) {
- *errorMessage = binary + QStringLiteral(" returns ") + QString::number(exitCode)
- + QStringLiteral(": ") + QString::fromLocal8Bit(stdErr);
- return QString();
- }
- return QString::fromLocal8Bit(stdOut).trimmed();
-}
-
-// Update a file or directory.
-bool updateFile(const QString &sourceFileName, const QStringList &nameFilters,
- const QString &targetDirectory, unsigned flags, JsonOutput *json, QString *errorMessage)
-{
- const QFileInfo sourceFileInfo(sourceFileName);
- const QString targetFileName = targetDirectory + QLatin1Char('/') + sourceFileInfo.fileName();
- if (optVerboseLevel > 1)
- std::wcout << "Checking " << sourceFileName << ", " << targetFileName<< '\n';
-
- if (!sourceFileInfo.exists()) {
- *errorMessage = QString::fromLatin1("%1 does not exist.").arg(QDir::toNativeSeparators(sourceFileName));
- return false;
- }
-
- if (sourceFileInfo.isSymLink()) {
- *errorMessage = QString::fromLatin1("Symbolic links are not supported (%1).")
- .arg(QDir::toNativeSeparators(sourceFileName));
- return false;
- }
-
- const QFileInfo targetFileInfo(targetFileName);
-
- if (sourceFileInfo.isDir()) {
- if (targetFileInfo.exists()) {
- if (!targetFileInfo.isDir()) {
- *errorMessage = QString::fromLatin1("%1 already exists and is not a directory.")
- .arg(QDir::toNativeSeparators(targetFileName));
- return false;
- } // Not a directory.
- } else { // exists.
- QDir d(targetDirectory);
- if (optVerboseLevel)
- std::wcout << "Creating " << QDir::toNativeSeparators(targetFileName) << ".\n";
- if (!(flags & SkipUpdateFile) && !d.mkdir(sourceFileInfo.fileName())) {
- *errorMessage = QString::fromLatin1("Cannot create directory %1 under %2.")
- .arg(sourceFileInfo.fileName(), QDir::toNativeSeparators(targetDirectory));
- return false;
- }
- }
- // Recurse into directory
- QDir dir(sourceFileName);
- const QFileInfoList allEntries = dir.entryInfoList(nameFilters, QDir::Files)
- + dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
- for (const QFileInfo &entryFi : allEntries) {
- if (!updateFile(entryFi.absoluteFilePath(), nameFilters, targetFileName, flags, json, errorMessage))
- return false;
- }
- return true;
- } // Source is directory.
-
- if (targetFileInfo.exists()) {
- if (!(flags & ForceUpdateFile)
- && targetFileInfo.lastModified() >= sourceFileInfo.lastModified()) {
- if (optVerboseLevel)
- std::wcout << sourceFileInfo.fileName() << " is up to date.\n";
- if (json)
- json->addFile(sourceFileName, targetDirectory);
- return true;
- }
- QFile targetFile(targetFileName);
- if (!(flags & SkipUpdateFile) && !targetFile.remove()) {
- *errorMessage = QString::fromLatin1("Cannot remove existing file %1: %2")
- .arg(QDir::toNativeSeparators(targetFileName), targetFile.errorString());
- return false;
- }
- } // target exists
- QFile file(sourceFileName);
- if (optVerboseLevel)
- std::wcout << "Updating " << sourceFileInfo.fileName() << ".\n";
- if (!(flags & SkipUpdateFile) && !file.copy(targetFileName)) {
- *errorMessage = QString::fromLatin1("Cannot copy %1 to %2: %3")
- .arg(QDir::toNativeSeparators(sourceFileName),
- QDir::toNativeSeparators(targetFileName),
- file.errorString());
- return false;
- }
- if (json)
- json->addFile(sourceFileName, targetDirectory);
- return true;
-}
-
-bool readElfExecutable(const QString &elfExecutableFileName, QString *errorMessage,
- QStringList *dependentLibraries, unsigned *wordSize,
- bool *isDebug)
-{
- ElfReader elfReader(elfExecutableFileName);
- const ElfData data = elfReader.readHeaders();
- if (data.sectionHeaders.isEmpty()) {
- *errorMessage = QStringLiteral("Unable to read ELF binary \"")
- + QDir::toNativeSeparators(elfExecutableFileName) + QStringLiteral("\": ")
- + elfReader.errorString();
- return false;
- }
- if (wordSize)
- *wordSize = data.elfclass == Elf_ELFCLASS64 ? 64 : 32;
- if (dependentLibraries) {
- dependentLibraries->clear();
- const QList<QByteArray> libs = elfReader.dependencies();
- if (libs.isEmpty()) {
- *errorMessage = QStringLiteral("Unable to read dependenices of ELF binary \"")
- + QDir::toNativeSeparators(elfExecutableFileName) + QStringLiteral("\": ")
- + elfReader.errorString();
- return false;
- }
- for (const QByteArray &l : libs)
- dependentLibraries->push_back(QString::fromLocal8Bit(l));
- }
- if (isDebug)
- *isDebug = data.symbolsType != UnknownSymbols && data.symbolsType != NoSymbols;
- return true;
-}
-
-#ifdef Q_OS_WIN
-
-static inline QString stringFromRvaPtr(const void *rvaPtr)
-{
- return QString::fromLocal8Bit(static_cast<const char *>(rvaPtr));
-}
-
-// Helper for reading out PE executable files: Find a section header for an RVA
-// (IMAGE_NT_HEADERS64, IMAGE_NT_HEADERS32).
-template <class ImageNtHeader>
-const IMAGE_SECTION_HEADER *findSectionHeader(DWORD rva, const ImageNtHeader *nTHeader)
-{
- const IMAGE_SECTION_HEADER *section = IMAGE_FIRST_SECTION(nTHeader);
- const IMAGE_SECTION_HEADER *sectionEnd = section + nTHeader->FileHeader.NumberOfSections;
- for ( ; section < sectionEnd; ++section)
- if (rva >= section->VirtualAddress && rva < (section->VirtualAddress + section->Misc.VirtualSize))
- return section;
- return 0;
-}
-
-// Helper for reading out PE executable files: convert RVA to pointer (IMAGE_NT_HEADERS64, IMAGE_NT_HEADERS32).
-template <class ImageNtHeader>
-inline const void *rvaToPtr(DWORD rva, const ImageNtHeader *nTHeader, const void *imageBase)
-{
- const IMAGE_SECTION_HEADER *sectionHdr = findSectionHeader(rva, nTHeader);
- if (!sectionHdr)
- return 0;
- const DWORD delta = sectionHdr->VirtualAddress - sectionHdr->PointerToRawData;
- return static_cast<const char *>(imageBase) + rva - delta;
-}
-
-// Helper for reading out PE executable files: return word size of a IMAGE_NT_HEADERS64, IMAGE_NT_HEADERS32
-template <class ImageNtHeader>
-inline unsigned ntHeaderWordSize(const ImageNtHeader *header)
-{
- // defines IMAGE_NT_OPTIONAL_HDR32_MAGIC, IMAGE_NT_OPTIONAL_HDR64_MAGIC
- enum { imageNtOptionlHeader32Magic = 0x10b, imageNtOptionlHeader64Magic = 0x20b };
- if (header->OptionalHeader.Magic == imageNtOptionlHeader32Magic)
- return 32;
- if (header->OptionalHeader.Magic == imageNtOptionlHeader64Magic)
- return 64;
- return 0;
-}
-
-// Helper for reading out PE executable files: Retrieve the NT image header of an
-// executable via the legacy DOS header.
-static IMAGE_NT_HEADERS *getNtHeader(void *fileMemory, QString *errorMessage)
-{
- IMAGE_DOS_HEADER *dosHeader = static_cast<PIMAGE_DOS_HEADER>(fileMemory);
- // Check DOS header consistency
- if (IsBadReadPtr(dosHeader, sizeof(IMAGE_DOS_HEADER))
- || dosHeader->e_magic != IMAGE_DOS_SIGNATURE) {
- *errorMessage = QString::fromLatin1("DOS header check failed.");
- return 0;
- }
- // Retrieve NT header
- char *ntHeaderC = static_cast<char *>(fileMemory) + dosHeader->e_lfanew;
- IMAGE_NT_HEADERS *ntHeaders = reinterpret_cast<IMAGE_NT_HEADERS *>(ntHeaderC);
- // check NT header consistency
- if (IsBadReadPtr(ntHeaders, sizeof(ntHeaders->Signature))
- || ntHeaders->Signature != IMAGE_NT_SIGNATURE
- || IsBadReadPtr(&ntHeaders->FileHeader, sizeof(IMAGE_FILE_HEADER))) {
- *errorMessage = QString::fromLatin1("NT header check failed.");
- return 0;
- }
- // Check magic
- if (!ntHeaderWordSize(ntHeaders)) {
- *errorMessage = QString::fromLatin1("NT header check failed; magic %1 is invalid.").
- arg(ntHeaders->OptionalHeader.Magic);
- return 0;
- }
- // Check section headers
- IMAGE_SECTION_HEADER *sectionHeaders = IMAGE_FIRST_SECTION(ntHeaders);
- if (IsBadReadPtr(sectionHeaders, ntHeaders->FileHeader.NumberOfSections * sizeof(IMAGE_SECTION_HEADER))) {
- *errorMessage = QString::fromLatin1("NT header section header check failed.");
- return 0;
- }
- return ntHeaders;
-}
-
-// Helper for reading out PE executable files: Read out import sections from
-// IMAGE_NT_HEADERS64, IMAGE_NT_HEADERS32.
-template <class ImageNtHeader>
-inline QStringList readImportSections(const ImageNtHeader *ntHeaders, const void *base, QString *errorMessage)
-{
- // Get import directory entry RVA and read out
- const DWORD importsStartRVA = ntHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;
- if (!importsStartRVA) {
- *errorMessage = QString::fromLatin1("Failed to find IMAGE_DIRECTORY_ENTRY_IMPORT entry.");
- return QStringList();
- }
- const IMAGE_IMPORT_DESCRIPTOR *importDesc = static_cast<const IMAGE_IMPORT_DESCRIPTOR *>(rvaToPtr(importsStartRVA, ntHeaders, base));
- if (!importDesc) {
- *errorMessage = QString::fromLatin1("Failed to find IMAGE_IMPORT_DESCRIPTOR entry.");
- return QStringList();
- }
- QStringList result;
- for ( ; importDesc->Name; ++importDesc)
- result.push_back(stringFromRvaPtr(rvaToPtr(importDesc->Name, ntHeaders, base)));
-
- // Read delay-loaded DLLs, see http://msdn.microsoft.com/en-us/magazine/cc301808.aspx .
- // Check on grAttr bit 1 whether this is the format using RVA's > VS 6
- if (const DWORD delayedImportsStartRVA = ntHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT].VirtualAddress) {
- const ImgDelayDescr *delayedImportDesc = static_cast<const ImgDelayDescr *>(rvaToPtr(delayedImportsStartRVA, ntHeaders, base));
- for ( ; delayedImportDesc->rvaDLLName && (delayedImportDesc->grAttrs & 1); ++delayedImportDesc)
- result.push_back(stringFromRvaPtr(rvaToPtr(delayedImportDesc->rvaDLLName, ntHeaders, base)));
- }
-
- return result;
-}
-
-// Check for MSCV runtime (MSVCP90D.dll/MSVCP90.dll, MSVCP120D.dll/MSVCP120.dll,
-// VCRUNTIME140D.DLL/VCRUNTIME140.DLL (VS2015) or msvcp120d_app.dll/msvcp120_app.dll).
-enum MsvcDebugRuntimeResult { MsvcDebugRuntime, MsvcReleaseRuntime, NoMsvcRuntime };
-
-static inline MsvcDebugRuntimeResult checkMsvcDebugRuntime(const QStringList &dependentLibraries)
-{
- for (const QString &lib : dependentLibraries) {
- int pos = 0;
- if (lib.startsWith(QLatin1String("MSVCR"), Qt::CaseInsensitive)
- || lib.startsWith(QLatin1String("MSVCP"), Qt::CaseInsensitive)
- || lib.startsWith(QLatin1String("VCRUNTIME"), Qt::CaseInsensitive)) {
- int lastDotPos = lib.lastIndexOf(QLatin1Char('.'));
- pos = -1 == lastDotPos ? 0 : lastDotPos - 1;
- }
-
- if (pos > 0 && lib.contains(QLatin1String("_app"), Qt::CaseInsensitive))
- pos -= 4;
-
- if (pos) {
- return lib.at(pos).toLower() == QLatin1Char('d')
- ? MsvcDebugRuntime : MsvcReleaseRuntime;
- }
- }
- return NoMsvcRuntime;
-}
-
-template <class ImageNtHeader>
-inline void determineDebugAndDependentLibs(const ImageNtHeader *nth, const void *fileMemory,
- bool isMinGW,
- QStringList *dependentLibrariesIn,
- bool *isDebugIn, QString *errorMessage)
-{
- const bool hasDebugEntry = nth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].Size;
- QStringList dependentLibraries;
- if (dependentLibrariesIn || (isDebugIn != nullptr && hasDebugEntry && !isMinGW))
- dependentLibraries = readImportSections(nth, fileMemory, errorMessage);
-
- if (dependentLibrariesIn)
- *dependentLibrariesIn = dependentLibraries;
- if (isDebugIn != nullptr) {
- if (isMinGW) {
- // Use logic that's used e.g. in objdump / pfd library
- *isDebugIn = !(nth->FileHeader.Characteristics & IMAGE_FILE_DEBUG_STRIPPED);
- } else {
- // When an MSVC debug entry is present, check whether the debug runtime
- // is actually used to detect -release / -force-debug-info builds.
- *isDebugIn = hasDebugEntry && checkMsvcDebugRuntime(dependentLibraries) != MsvcReleaseRuntime;
- }
- }
-}
-
-// Read a PE executable and determine dependent libraries, word size
-// and debug flags.
-bool readPeExecutable(const QString &peExecutableFileName, QString *errorMessage,
- QStringList *dependentLibrariesIn, unsigned *wordSizeIn,
- bool *isDebugIn, bool isMinGW, unsigned short *machineArchIn)
-{
- bool result = false;
- HANDLE hFile = NULL;
- HANDLE hFileMap = NULL;
- void *fileMemory = 0;
-
- if (dependentLibrariesIn)
- dependentLibrariesIn->clear();
- if (wordSizeIn)
- *wordSizeIn = 0;
- if (isDebugIn)
- *isDebugIn = false;
-
- do {
- // Create a memory mapping of the file
- hFile = CreateFile(reinterpret_cast<const WCHAR*>(peExecutableFileName.utf16()), GENERIC_READ, FILE_SHARE_READ, NULL,
- OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
- if (hFile == INVALID_HANDLE_VALUE || hFile == NULL) {
- *errorMessage = QString::fromLatin1("Cannot open '%1': %2").arg(peExecutableFileName, winErrorMessage(GetLastError()));
- break;
- }
-
- hFileMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
- if (hFileMap == NULL) {
- *errorMessage = QString::fromLatin1("Cannot create file mapping of '%1': %2").arg(peExecutableFileName, winErrorMessage(GetLastError()));
- break;
- }
-
- fileMemory = MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 0);
- if (!fileMemory) {
- *errorMessage = QString::fromLatin1("Cannot map '%1': %2").arg(peExecutableFileName, winErrorMessage(GetLastError()));
- break;
- }
-
- const IMAGE_NT_HEADERS *ntHeaders = getNtHeader(fileMemory, errorMessage);
- if (!ntHeaders)
- break;
-
- const unsigned wordSize = ntHeaderWordSize(ntHeaders);
- if (wordSizeIn)
- *wordSizeIn = wordSize;
- if (wordSize == 32) {
- determineDebugAndDependentLibs(reinterpret_cast<const IMAGE_NT_HEADERS32 *>(ntHeaders),
- fileMemory, isMinGW, dependentLibrariesIn, isDebugIn, errorMessage);
- } else {
- determineDebugAndDependentLibs(reinterpret_cast<const IMAGE_NT_HEADERS64 *>(ntHeaders),
- fileMemory, isMinGW, dependentLibrariesIn, isDebugIn, errorMessage);
- }
-
- if (machineArchIn)
- *machineArchIn = ntHeaders->FileHeader.Machine;
-
- result = true;
- if (optVerboseLevel > 1) {
- std::wcout << __FUNCTION__ << ": " << QDir::toNativeSeparators(peExecutableFileName)
- << ' ' << wordSize << " bit";
- if (isMinGW)
- std::wcout << ", MinGW";
- if (dependentLibrariesIn) {
- std::wcout << ", dependent libraries: ";
- if (optVerboseLevel > 2)
- std::wcout << dependentLibrariesIn->join(QLatin1Char(' '));
- else
- std::wcout << dependentLibrariesIn->size();
- }
- if (isDebugIn)
- std::wcout << (*isDebugIn ? ", debug" : ", release");
- std::wcout << '\n';
- }
- } while (false);
-
- if (fileMemory)
- UnmapViewOfFile(fileMemory);
-
- if (hFileMap != NULL)
- CloseHandle(hFileMap);
-
- if (hFile != NULL && hFile != INVALID_HANDLE_VALUE)
- CloseHandle(hFile);
-
- return result;
-}
-
-QString findD3dCompiler(Platform platform, const QString &qtBinDir, unsigned wordSize)
-{
- const QString prefix = QStringLiteral("D3Dcompiler_");
- const QString suffix = QLatin1String(windowsSharedLibrarySuffix);
- // Get the DLL from Kit 8.0 onwards
- const QString kitDir = QString::fromLocal8Bit(qgetenv("WindowsSdkDir"));
- if (!kitDir.isEmpty()) {
- QString redistDirPath = QDir::cleanPath(kitDir) + QStringLiteral("/Redist/D3D/");
- if (platform.testFlag(ArmBased)) {
- redistDirPath += QStringLiteral("arm");
- } else {
- redistDirPath += wordSize == 32 ? QStringLiteral("x86") : QStringLiteral("x64");
- }
- QDir redistDir(redistDirPath);
- if (redistDir.exists()) {
- const QFileInfoList files = redistDir.entryInfoList(QStringList(prefix + QLatin1Char('*') + suffix), QDir::Files);
- if (!files.isEmpty())
- return files.front().absoluteFilePath();
- }
- }
- QStringList candidateVersions;
- for (int i = 47 ; i >= 40 ; --i)
- candidateVersions.append(prefix + QString::number(i) + suffix);
- // Check the bin directory of the Qt SDK (in case it is shadowed by the
- // Windows system directory in PATH).
- for (const QString &candidate : qAsConst(candidateVersions)) {
- const QFileInfo fi(qtBinDir + QLatin1Char('/') + candidate);
- if (fi.isFile())
- return fi.absoluteFilePath();
- }
- // Find the latest D3D compiler DLL in path (Windows 8.1 has d3dcompiler_47).
- if (platform.testFlag(IntelBased)) {
- QString errorMessage;
- unsigned detectedWordSize;
- for (const QString &candidate : qAsConst(candidateVersions)) {
- const QString dll = findInPath(candidate);
- if (!dll.isEmpty()
- && readPeExecutable(dll, &errorMessage, 0, &detectedWordSize, 0)
- && detectedWordSize == wordSize) {
- return dll;
- }
- }
- }
- return QString();
-}
-
-#else // Q_OS_WIN
-
-bool readPeExecutable(const QString &, QString *errorMessage,
- QStringList *, unsigned *, bool *, bool, unsigned short *)
-{
- *errorMessage = QStringLiteral("Not implemented.");
- return false;
-}
-
-QString findD3dCompiler(Platform, const QString &, unsigned)
-{
- return QString();
-}
-
-#endif // !Q_OS_WIN
-
-// Search for "qt_prfxpath=xxxx" in \a path, and replace it with "qt_prfxpath=."
-bool patchQtCore(const QString &path, QString *errorMessage)
-{
- if (optVerboseLevel)
- std::wcout << "Patching " << QFileInfo(path).fileName() << "...\n";
-
- QFile file(path);
- if (!file.open(QIODevice::ReadOnly)) {
- *errorMessage = QString::fromLatin1("Unable to patch %1: %2").arg(
- QDir::toNativeSeparators(path), file.errorString());
- return false;
- }
- const QByteArray oldContent = file.readAll();
-
- if (oldContent.isEmpty()) {
- *errorMessage = QString::fromLatin1("Unable to patch %1: Could not read file content").arg(
- QDir::toNativeSeparators(path));
- return false;
- }
- file.close();
-
- QByteArray content = oldContent;
-
- QByteArray prfxpath("qt_prfxpath=");
- int startPos = content.indexOf(prfxpath);
- if (startPos == -1) {
- *errorMessage = QString::fromLatin1(
- "Unable to patch %1: Could not locate pattern \"qt_prfxpath=\"").arg(
- QDir::toNativeSeparators(path));
- return false;
- }
- startPos += prfxpath.length();
- int endPos = content.indexOf(char(0), startPos);
- if (endPos == -1) {
- *errorMessage = QString::fromLatin1("Unable to patch %1: Internal error").arg(
- QDir::toNativeSeparators(path));
- return false;
- }
-
- QByteArray replacement = QByteArray(endPos - startPos, char(0));
- replacement[0] = '.';
- content.replace(startPos, endPos - startPos, replacement);
- if (content == oldContent)
- return true;
-
- if (!file.open(QIODevice::WriteOnly)
- || (file.write(content) != content.size())) {
- *errorMessage = QString::fromLatin1("Unable to patch %1: Could not write to file: %2").arg(
- QDir::toNativeSeparators(path), file.errorString());
- return false;
- }
- return true;
-}
-
-#ifdef Q_OS_WIN
-QString getArchString(unsigned short machineArch)
-{
- switch (machineArch) {
- case IMAGE_FILE_MACHINE_I386:
- return QStringLiteral("x86");
- case IMAGE_FILE_MACHINE_ARM:
- return QStringLiteral("arm");
- case IMAGE_FILE_MACHINE_AMD64:
- return QStringLiteral("x64");
- case IMAGE_FILE_MACHINE_ARM64:
- return QStringLiteral("arm64");
- default:
- break;
- }
- return QString();
-}
-#endif // Q_OS_WIN
-
-QT_END_NAMESPACE
diff --git a/src/shared/winutils/utils.h b/src/shared/winutils/utils.h
deleted file mode 100644
index 548d5305c..000000000
--- a/src/shared/winutils/utils.h
+++ /dev/null
@@ -1,406 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef UTILS_H
-#define UTILS_H
-
-#include <QStringList>
-#include <QMap>
-#include <QtCore/QFile>
-#include <QtCore/QDir>
-#include <QtCore/QDateTime>
-#include <QtCore/QJsonArray>
-#include <QtCore/QJsonObject>
-#include <QtCore/QJsonDocument>
-
-#include <iostream>
-
-QT_BEGIN_NAMESPACE
-
-enum PlatformFlag {
- // OS
- WindowsBased = 0x00001,
- UnixBased = 0x00002,
- // CPU
- IntelBased = 0x00010,
- ArmBased = 0x00020,
- // Compiler
- Msvc = 0x00100,
- MinGW = 0x00200,
- ClangMsvc = 0x00400,
- ClangMinGW = 0x00800,
- // Platforms
- WindowsDesktopMsvc = WindowsBased + IntelBased + Msvc,
- WindowsDesktopMinGW = WindowsBased + IntelBased + MinGW,
- WindowsDesktopClangMsvc = WindowsBased + IntelBased + ClangMsvc,
- WindowsDesktopClangMinGW = WindowsBased + IntelBased + ClangMinGW,
- Unix = UnixBased,
- UnknownPlatform
-};
-
-Q_DECLARE_FLAGS(Platform, PlatformFlag)
-
-Q_DECLARE_OPERATORS_FOR_FLAGS(Platform)
-
-inline bool platformHasDebugSuffix(Platform p) // Uses 'd' debug suffix
-{
- return p.testFlag(Msvc) || p.testFlag(ClangMsvc);
-}
-
-enum ListOption {
- ListNone = 0,
- ListSource,
- ListTarget,
- ListRelative,
- ListMapping
-};
-
-inline std::wostream &operator<<(std::wostream &str, const QString &s)
-{
-#ifdef Q_OS_WIN
- str << reinterpret_cast<const wchar_t *>(s.utf16());
-#else
- str << s.toStdWString();
-#endif
- return str;
-}
-
-// Container class for JSON output
-class JsonOutput
-{
- using SourceTargetMapping = QPair<QString, QString>;
- using SourceTargetMappings = QList<SourceTargetMapping>;
-
-public:
- void addFile(const QString &source, const QString &target)
- {
- m_files.append(SourceTargetMapping(source, target));
- }
-
- void removeTargetDirectory(const QString &targetDirectory)
- {
- for (int i = m_files.size() - 1; i >= 0; --i) {
- if (m_files.at(i).second == targetDirectory)
- m_files.removeAt(i);
- }
- }
-
- QByteArray toJson() const
- {
- QJsonObject document;
- QJsonArray files;
- for (const SourceTargetMapping &mapping : m_files) {
- QJsonObject object;
- object.insert(QStringLiteral("source"), QDir::toNativeSeparators(mapping.first));
- object.insert(QStringLiteral("target"), QDir::toNativeSeparators(mapping.second));
- files.append(object);
- }
- document.insert(QStringLiteral("files"), files);
- return QJsonDocument(document).toJson();
- }
- QByteArray toList(ListOption option, const QDir &base) const
- {
- QByteArray list;
- for (const SourceTargetMapping &mapping : m_files) {
- const QString source = QDir::toNativeSeparators(mapping.first);
- const QString fileName = QFileInfo(mapping.first).fileName();
- const QString target = QDir::toNativeSeparators(mapping.second) + QDir::separator() + fileName;
- switch (option) {
- case ListNone:
- break;
- case ListSource:
- list += source.toUtf8() + '\n';
- break;
- case ListTarget:
- list += target.toUtf8() + '\n';
- break;
- case ListRelative:
- list += QDir::toNativeSeparators(base.relativeFilePath(target)).toUtf8() + '\n';
- break;
- case ListMapping:
- list += '"' + source.toUtf8() + "\" \"" + QDir::toNativeSeparators(base.relativeFilePath(target)).toUtf8() + "\"\n";
- break;
- }
- }
- return list;
- }
-private:
- SourceTargetMappings m_files;
-};
-
-#ifdef Q_OS_WIN
-QString normalizeFileName(const QString &name);
-QString winErrorMessage(unsigned long error);
-QString findSdkTool(const QString &tool);
-#else // !Q_OS_WIN
-inline QString normalizeFileName(const QString &name) { return name; }
-#endif // !Q_OS_WIN
-
-static const char windowsSharedLibrarySuffix[] = ".dll";
-static const char unixSharedLibrarySuffix[] = ".so";
-
-inline QString sharedLibrarySuffix(Platform platform) { return QLatin1String((platform & WindowsBased) ? windowsSharedLibrarySuffix : unixSharedLibrarySuffix); }
-bool isBuildDirectory(Platform platform, const QString &dirName);
-
-bool createSymbolicLink(const QFileInfo &source, const QString &target, QString *errorMessage);
-bool createDirectory(const QString &directory, QString *errorMessage);
-QString findInPath(const QString &file);
-
-extern const char *qmakeInfixKey; // Fake key containing the libinfix
-
-QMap<QString, QString> queryQMakeAll(const QString &qmakeBinary, QString *errorMessage);
-QString queryQMake(const QString &variable, QString *errorMessage);
-
-enum DebugMatchMode {
- MatchDebug,
- MatchRelease,
- MatchDebugOrRelease
-};
-
-QStringList findSharedLibraries(const QDir &directory, Platform platform,
- DebugMatchMode debugMatchMode,
- const QString &prefix = QString());
-
-bool updateFile(const QString &sourceFileName, const QStringList &nameFilters,
- const QString &targetDirectory, unsigned flags, JsonOutput *json, QString *errorMessage);
-bool runProcess(const QString &binary, const QStringList &args,
- const QString &workingDirectory = QString(),
- unsigned long *exitCode = 0, QByteArray *stdOut = 0, QByteArray *stdErr = 0,
- QString *errorMessage = 0);
-bool runElevatedBackgroundProcess(const QString &binary, const QStringList &args, Qt::HANDLE *processHandle);
-
-bool readPeExecutable(const QString &peExecutableFileName, QString *errorMessage,
- QStringList *dependentLibraries = 0, unsigned *wordSize = 0,
- bool *isDebug = 0, bool isMinGW = false, unsigned short *machineArch = nullptr);
-bool readElfExecutable(const QString &elfExecutableFileName, QString *errorMessage,
- QStringList *dependentLibraries = 0, unsigned *wordSize = 0,
- bool *isDebug = 0);
-
-inline bool readExecutable(const QString &executableFileName, Platform platform,
- QString *errorMessage, QStringList *dependentLibraries = 0,
- unsigned *wordSize = 0, bool *isDebug = 0, unsigned short *machineArch = nullptr)
-{
- return platform == Unix ?
- readElfExecutable(executableFileName, errorMessage, dependentLibraries, wordSize, isDebug) :
- readPeExecutable(executableFileName, errorMessage, dependentLibraries, wordSize, isDebug,
- (platform == WindowsDesktopMinGW), machineArch);
-}
-
-#ifdef Q_OS_WIN
-# if !defined(IMAGE_FILE_MACHINE_ARM64)
-# define IMAGE_FILE_MACHINE_ARM64 0xAA64
-# endif
-QString getArchString (unsigned short machineArch);
-#endif // Q_OS_WIN
-
-// Return dependent modules of executable files.
-
-inline QStringList findDependentLibraries(const QString &executableFileName, Platform platform, QString *errorMessage)
-{
- QStringList result;
- readExecutable(executableFileName, platform, errorMessage, &result);
- return result;
-}
-
-QString findD3dCompiler(Platform platform, const QString &qtBinDir, unsigned wordSize);
-
-bool patchQtCore(const QString &path, QString *errorMessage);
-
-extern int optVerboseLevel;
-
-// Recursively update a file or directory, matching DirectoryFileEntryFunction against the QDir
-// to obtain the files.
-enum UpdateFileFlag {
- ForceUpdateFile = 0x1,
- SkipUpdateFile = 0x2,
- RemoveEmptyQmlDirectories = 0x4,
- SkipQmlDesignerSpecificsDirectories = 0x8
-};
-
-template <class DirectoryFileEntryFunction>
-bool updateFile(const QString &sourceFileName,
- DirectoryFileEntryFunction directoryFileEntryFunction,
- const QString &targetDirectory,
- unsigned flags,
- JsonOutput *json,
- QString *errorMessage)
-{
- const QFileInfo sourceFileInfo(sourceFileName);
- const QString targetFileName = targetDirectory + QLatin1Char('/') + sourceFileInfo.fileName();
- if (optVerboseLevel > 1)
- std::wcout << "Checking " << sourceFileName << ", " << targetFileName << '\n';
-
- if (!sourceFileInfo.exists()) {
- *errorMessage = QString::fromLatin1("%1 does not exist.").arg(QDir::toNativeSeparators(sourceFileName));
- return false;
- }
-
- const QFileInfo targetFileInfo(targetFileName);
-
- if (sourceFileInfo.isSymLink()) {
- const QString sourcePath = sourceFileInfo.symLinkTarget();
- const QString relativeSource = QDir(sourceFileInfo.absolutePath()).relativeFilePath(sourcePath);
- if (relativeSource.contains(QLatin1Char('/'))) {
- *errorMessage = QString::fromLatin1("Symbolic links across directories are not supported (%1).")
- .arg(QDir::toNativeSeparators(sourceFileName));
- return false;
- }
-
- // Update the linked-to file
- if (!updateFile(sourcePath, directoryFileEntryFunction, targetDirectory, flags, json, errorMessage))
- return false;
-
- if (targetFileInfo.exists()) {
- if (!targetFileInfo.isSymLink()) {
- *errorMessage = QString::fromLatin1("%1 already exists and is not a symbolic link.")
- .arg(QDir::toNativeSeparators(targetFileName));
- return false;
- } // Not a symlink
- const QString relativeTarget = QDir(targetFileInfo.absolutePath()).relativeFilePath(targetFileInfo.symLinkTarget());
- if (relativeSource == relativeTarget) // Exists and points to same entry: happy.
- return true;
- QFile existingTargetFile(targetFileName);
- if (!(flags & SkipUpdateFile) && !existingTargetFile.remove()) {
- *errorMessage = QString::fromLatin1("Cannot remove existing symbolic link %1: %2")
- .arg(QDir::toNativeSeparators(targetFileName), existingTargetFile.errorString());
- return false;
- }
- } // target symbolic link exists
- return createSymbolicLink(QFileInfo(targetDirectory + QLatin1Char('/') + relativeSource), sourceFileInfo.fileName(), errorMessage);
- } // Source is symbolic link
-
- if (sourceFileInfo.isDir()) {
- if ((flags & SkipQmlDesignerSpecificsDirectories) && sourceFileInfo.fileName() == QLatin1String("designer")) {
- if (optVerboseLevel)
- std::wcout << "Skipping " << QDir::toNativeSeparators(sourceFileName) << ".\n";
- return true;
- }
- bool created = false;
- if (targetFileInfo.exists()) {
- if (!targetFileInfo.isDir()) {
- *errorMessage = QString::fromLatin1("%1 already exists and is not a directory.")
- .arg(QDir::toNativeSeparators(targetFileName));
- return false;
- } // Not a directory.
- } else { // exists.
- QDir d(targetDirectory);
- if (optVerboseLevel)
- std::wcout << "Creating " << targetFileName << ".\n";
- if (!(flags & SkipUpdateFile)) {
- created = d.mkdir(sourceFileInfo.fileName());
- if (!created) {
- *errorMessage = QString::fromLatin1("Cannot create directory %1 under %2.")
- .arg(sourceFileInfo.fileName(), QDir::toNativeSeparators(targetDirectory));
- return false;
- }
- }
- }
- // Recurse into directory
- QDir dir(sourceFileName);
-
- const QStringList allEntries = directoryFileEntryFunction(dir) + dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
- for (const QString &entry : allEntries)
- if (!updateFile(sourceFileName + QLatin1Char('/') + entry, directoryFileEntryFunction, targetFileName, flags, json, errorMessage))
- return false;
- // Remove empty directories, for example QML import folders for which the filter did not match.
- if (created && (flags & RemoveEmptyQmlDirectories)) {
- QDir d(targetFileName);
- const QStringList entries = d.entryList(QStringList(), QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
- if (entries.isEmpty() || (entries.size() == 1 && entries.first() == QLatin1String("qmldir"))) {
- if (!d.removeRecursively()) {
- *errorMessage = QString::fromLatin1("Cannot remove empty directory %1.")
- .arg(QDir::toNativeSeparators(targetFileName));
- return false;
- }
- if (json)
- json->removeTargetDirectory(targetFileName);
- }
- }
- return true;
- } // Source is directory.
-
- if (targetFileInfo.exists()) {
- if (!(flags & ForceUpdateFile)
- && targetFileInfo.lastModified() >= sourceFileInfo.lastModified()) {
- if (optVerboseLevel)
- std::wcout << sourceFileInfo.fileName() << " is up to date.\n";
- if (json)
- json->addFile(sourceFileName, targetDirectory);
- return true;
- }
- QFile targetFile(targetFileName);
- if (!(flags & SkipUpdateFile) && !targetFile.remove()) {
- *errorMessage = QString::fromLatin1("Cannot remove existing file %1: %2")
- .arg(QDir::toNativeSeparators(targetFileName), targetFile.errorString());
- return false;
- }
- } // target exists
- QFile file(sourceFileName);
- if (optVerboseLevel)
- std::wcout << "Updating " << sourceFileInfo.fileName() << ".\n";
- if (!(flags & SkipUpdateFile)) {
- if (!file.copy(targetFileName)) {
- *errorMessage = QString::fromLatin1("Cannot copy %1 to %2: %3")
- .arg(QDir::toNativeSeparators(sourceFileName),
- QDir::toNativeSeparators(targetFileName),
- file.errorString());
- return false;
- }
- if (!(file.permissions() & QFile::WriteUser)) { // QTBUG-40152, clear inherited read-only attribute
- QFile targetFile(targetFileName);
- if (!targetFile.setPermissions(targetFile.permissions() | QFile::WriteUser)) {
- *errorMessage = QString::fromLatin1("Cannot set write permission on %1: %2")
- .arg(QDir::toNativeSeparators(targetFileName), file.errorString());
- return false;
- }
- } // Check permissions
- } // !SkipUpdateFile
- if (json)
- json->addFile(sourceFileName, targetDirectory);
- return true;
-}
-
-// Base class to filter files by name filters functions to be passed to updateFile().
-class NameFilterFileEntryFunction {
-public:
- explicit NameFilterFileEntryFunction(const QStringList &nameFilters) : m_nameFilters(nameFilters) {}
- QStringList operator()(const QDir &dir) const { return dir.entryList(m_nameFilters, QDir::Files); }
-
-private:
- const QStringList m_nameFilters;
-};
-
-// Convenience for all files.
-inline bool updateFile(const QString &sourceFileName, const QString &targetDirectory, unsigned flags, JsonOutput *json, QString *errorMessage)
-{
- return updateFile(sourceFileName, NameFilterFileEntryFunction(QStringList()), targetDirectory, flags, json, errorMessage);
-}
-
-QT_END_NAMESPACE
-
-#endif // UTILS_H
diff --git a/src/shared/winutils/winutils.pri b/src/shared/winutils/winutils.pri
deleted file mode 100644
index df22781eb..000000000
--- a/src/shared/winutils/winutils.pri
+++ /dev/null
@@ -1,8 +0,0 @@
-INCLUDEPATH += $$PWD
-HEADERS += $$PWD/elfreader.h \
- $$PWD/qmlutils.h \
- $$PWD/utils.h
-
-SOURCES += $$PWD/elfreader.cpp \
- $$PWD/utils.cpp \
- $$PWD/qmlutils.cpp
diff --git a/src/src.pro b/src/src.pro
deleted file mode 100644
index 24d0b9c6b..000000000
--- a/src/src.pro
+++ /dev/null
@@ -1,57 +0,0 @@
-TEMPLATE = subdirs
-
-qtHaveModule(widgets) {
- no-png {
- message("Some graphics-related tools are unavailable without PNG support")
- } else {
- QT_FOR_CONFIG += widgets
- qtConfig(pushbutton):qtConfig(toolbutton) {
- SUBDIRS = designer \
- pixeltool
-
- !static|contains(QT_PLUGINS, qsqlite): SUBDIRS += assistant
-
- linguist.depends = designer
- }
- qtHaveModule(quick):qtConfig(thread):qtConfig(toolbutton): SUBDIRS += distancefieldgenerator
- }
-}
-
-SUBDIRS += linguist
-
-qtConfig(commandlineparser) {
- SUBDIRS += qtattributionsscanner
- qtConfig(library) {
- !android|android_app: SUBDIRS += qtplugininfo
- }
-}
-
-
-SUBDIRS += global
-include($$OUT_PWD/../src/global/qttools-config.pri)
-QT_FOR_CONFIG += tools-private
-qtConfig(clang): qtConfig(thread): qtConfig(commandlineparser): SUBDIRS += qdoc
-
-qtConfig(commandlineparser): !android|android_app: SUBDIRS += qtpaths
-
-macos {
- SUBDIRS += macdeployqt
-}
-
-qtHaveModule(dbus): SUBDIRS += qdbus
-
-win32:SUBDIRS += windeployqt
-qtHaveModule(gui):qtConfig(commandlineparser):!wasm:!android:!uikit:!qnx: SUBDIRS += qtdiag
-
-qtNomakeTools( \
- distancefieldgenerator \
- pixeltool \
-)
-
-# This is necessary to avoid a race condition between toolchain.prf
-# invocations in a module-by-module cross-build.
-cross_compile:isEmpty(QMAKE_HOST_CXX.INCDIRS) {
- qdoc.depends += qtattributionsscanner
- windeployqt.depends += qtattributionsscanner
- linguist.depends += qtattributionsscanner
-}
diff --git a/src/uiplugin/CMakeLists.txt b/src/uiplugin/CMakeLists.txt
new file mode 100644
index 000000000..c0193dc3c
--- /dev/null
+++ b/src/uiplugin/CMakeLists.txt
@@ -0,0 +1,27 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## UiPlugin Module:
+#####################################################################
+
+qt_internal_add_module(UiPlugin
+ NO_PRIVATE_MODULE
+ HEADER_MODULE
+ QMAKE_MODULE_CONFIG designer_defines
+ SOURCES
+ customwidget.h
+ qdesignerexportwidget.h
+ PUBLIC_LIBRARIES
+ Qt::Core
+ Qt::Gui
+ Qt::Widgets
+ NO_GENERATE_CPP_EXPORTS
+)
+
+set(is_plugin "$<TARGET_PROPERTY:QT_PLUGIN_CLASS_NAME>")
+target_compile_definitions(
+ UiPlugin
+ INTERFACE
+ $<$<BOOL:${is_plugin}>:QDESIGNER_EXPORT_WIDGETS>
+)
diff --git a/src/uiplugin/customwidget.h b/src/uiplugin/customwidget.h
new file mode 100644
index 000000000..17e1409b3
--- /dev/null
+++ b/src/uiplugin/customwidget.h
@@ -0,0 +1,68 @@
+// Copyright (C) 2016 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 CUSTOMWIDGET_H
+#define CUSTOMWIDGET_H
+
+#include <QtCore/qobject.h>
+#include <QtCore/qstring.h>
+#include <QtGui/qicon.h>
+
+#if 0
+#pragma qt_deprecates(QtDesigner/customwidget.h)
+#pragma qt_deprecates(QtDesigner/QDesignerCustomWidgetInterface)
+#pragma qt_deprecates(QtDesigner/QDesignerCustomWidgetCollectionInterface)
+#endif
+
+QT_BEGIN_NAMESPACE
+
+class QWidget;
+class QDesignerFormEditorInterface;
+
+class QDesignerCustomWidgetInterface
+{
+public:
+ virtual ~QDesignerCustomWidgetInterface() = default; // ### FIXME: weak vtable
+
+ virtual QString name() const = 0;
+ virtual QString group() const = 0;
+ virtual QString toolTip() const = 0;
+ virtual QString whatsThis() const = 0;
+ virtual QString includeFile() const = 0;
+ virtual QIcon icon() const = 0;
+
+ virtual bool isContainer() const = 0;
+
+ virtual QWidget *createWidget(QWidget *parent) = 0;
+
+ virtual bool isInitialized() const { return false; }
+ virtual void initialize(QDesignerFormEditorInterface *core) { Q_UNUSED(core); }
+
+ virtual QString domXml() const
+ {
+ return QLatin1StringView("<widget class=\"%1\" name=\"%2\"/>")
+ .arg(name(), name().toLower());
+ }
+
+ virtual QString codeTemplate() const { return QString(); }
+};
+
+#define QDesignerCustomWidgetInterface_iid "org.qt-project.QDesignerCustomWidgetInterface"
+
+Q_DECLARE_INTERFACE(QDesignerCustomWidgetInterface, QDesignerCustomWidgetInterface_iid)
+
+class QDesignerCustomWidgetCollectionInterface
+{
+public:
+ virtual ~QDesignerCustomWidgetCollectionInterface() = default; // ### FIXME: weak vtable
+
+ virtual QList<QDesignerCustomWidgetInterface*> customWidgets() const = 0;
+};
+
+#define QDesignerCustomWidgetCollectionInterface_iid "org.qt-project.Qt.QDesignerCustomWidgetCollectionInterface"
+
+Q_DECLARE_INTERFACE(QDesignerCustomWidgetCollectionInterface, QDesignerCustomWidgetCollectionInterface_iid)
+
+QT_END_NAMESPACE
+
+#endif // CUSTOMWIDGET_H
diff --git a/src/uiplugin/customwidget.qdoc b/src/uiplugin/customwidget.qdoc
new file mode 100644
index 000000000..7776cac8b
--- /dev/null
+++ b/src/uiplugin/customwidget.qdoc
@@ -0,0 +1,269 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \class QDesignerCustomWidgetInterface
+
+ \brief The QDesignerCustomWidgetInterface class enables \QD
+ to access and construct custom widgets.
+
+ \inmodule QtDesigner
+
+ QDesignerCustomWidgetInterface provides a custom widget with an
+ interface. The class contains a set of functions that must be subclassed
+ to return basic information about the widget, such as its class name and
+ the name of its header file. Other functions must be implemented to
+ initialize the plugin when it is loaded, and to construct instances of
+ the custom widget for \QD to use.
+
+ When implementing a custom widget you must subclass
+ QDesignerCustomWidgetInterface to expose your widget to \QD. For
+ example, this is the declaration for the plugin used in the
+ \l{Custom Widget Plugin} example that
+ enables an analog clock custom widget to be used by \QD:
+
+ \snippet customwidgetplugin/customwidgetplugin.h 0
+
+ Note that the only part of the class definition that is specific
+ to this particular custom widget is the class name. In addition,
+ since we are implementing an interface, we must ensure that it's
+ made known to the meta object system using the Q_INTERFACES()
+ macro. This enables \QD to use the qobject_cast() function to
+ query for supported interfaces using nothing but a QObject
+ pointer.
+
+ After \QD loads a custom widget plugin, it calls the interface's
+ initialize() function to enable it to set up any resources that it
+ may need. This function is called with a QDesignerFormEditorInterface
+ parameter that provides the plugin with a gateway to all of \QD's API.
+
+ \QD constructs instances of the custom widget by calling the plugin's
+ createWidget() function with a suitable parent widget. Plugins must
+ construct and return an instance of a custom widget with the specified
+ parent widget.
+
+ Exporting your custom widget plugin to \QD using the Q_PLUGIN_METADATA()
+ macro. For example, if a library called \c libcustomwidgetplugin.so
+ (on Unix) or \c libcustomwidget.dll (on Windows) contains a widget
+ class called \c MyCustomWidget, we can export it by adding the
+ following line to the file containing the plugin header:
+
+ \snippet plugins/doc_src_qtdesigner.cpp 14
+
+ This macro ensures that \QD can access and construct the custom widget.
+ Without this macro, there is no way for \QD to use it.
+
+ When implementing a custom widget plugin, you build it as a
+ separate library. If you want to include several custom widget
+ plugins in the same library, you must in addition subclass
+ QDesignerCustomWidgetCollectionInterface.
+
+ \warning If your custom widget plugin contains QVariant
+ properties, be aware that only the following \l
+ {QVariant::Type}{types} are supported:
+
+ \list
+ \li QVariant::ByteArray
+ \li QVariant::Bool
+ \li QVariant::Color
+ \li QVariant::Cursor
+ \li QVariant::Date
+ \li QVariant::DateTime
+ \li QVariant::Double
+ \li QVariant::Int
+ \li QVariant::Point
+ \li QVariant::Rect
+ \li QVariant::Size
+ \li QVariant::SizePolicy
+ \li QVariant::String
+ \li QVariant::Time
+ \li QVariant::UInt
+ \endlist
+
+ For a complete example using the QDesignerCustomWidgetInterface
+ class, see the \l {customwidgetplugin}{Custom Widget
+ Example}. The example shows how to create a custom widget plugin
+ for \QD.
+
+ \sa QDesignerCustomWidgetCollectionInterface, {Creating Custom Widgets for Qt Widgets Designer}
+*/
+
+/*!
+ \fn QDesignerCustomWidgetInterface::~QDesignerCustomWidgetInterface()
+
+ Destroys the custom widget interface.
+*/
+
+/*!
+ \fn QString QDesignerCustomWidgetInterface::name() const
+
+ Returns the class name of the custom widget supplied by the interface.
+
+ The name returned \e must be identical to the class name used for the
+ custom widget.
+*/
+
+/*!
+ \fn QString QDesignerCustomWidgetInterface::group() const
+
+ Returns the name of the group to which the custom widget belongs.
+*/
+
+/*!
+ \fn QString QDesignerCustomWidgetInterface::toolTip() const
+
+ Returns a short description of the widget that can be used by \QD
+ in a tool tip.
+*/
+
+/*!
+ \fn QString QDesignerCustomWidgetInterface::whatsThis() const
+
+ Returns a description of the widget that can be used by \QD in
+ "What's This?" help for the widget.
+*/
+
+/*!
+ \fn QString QDesignerCustomWidgetInterface::includeFile() const
+
+ Returns the path to the include file that \l uic uses when
+ creating code for the custom widget.
+*/
+
+/*!
+ \fn QIcon QDesignerCustomWidgetInterface::icon() const
+
+ Returns the icon used to represent the custom widget in \QD's
+ widget box.
+*/
+
+/*!
+ \fn bool QDesignerCustomWidgetInterface::isContainer() const
+
+ Returns true if the custom widget is intended to be used as a
+ container; otherwise returns false.
+
+ Most custom widgets are not used to hold other widgets, so their
+ implementations of this function will return false, but custom
+ containers will return true to ensure that they behave correctly
+ in \QD.
+*/
+
+/*!
+ \fn QWidget *QDesignerCustomWidgetInterface::createWidget(QWidget *parent)
+
+ Returns a new instance of the custom widget, with the given \a
+ parent.
+*/
+
+/*!
+ \fn bool QDesignerCustomWidgetInterface::isInitialized() const
+
+ Returns true if the widget has been initialized; otherwise returns
+ false.
+
+ \sa initialize()
+*/
+
+/*!
+ \fn void QDesignerCustomWidgetInterface::initialize(QDesignerFormEditorInterface *formEditor)
+
+ Initializes the widget for use with the specified \a formEditor
+ interface.
+
+ \sa isInitialized()
+*/
+
+/*!
+ \fn QString QDesignerCustomWidgetInterface::domXml() const
+
+ Returns the XML that is used to describe the custom widget's
+ properties to \QD.
+*/
+
+/*!
+ \fn QString QDesignerCustomWidgetInterface::codeTemplate() const
+
+ This function is reserved for future use by \QD.
+
+ \omit
+ Returns the code template that \QD includes in forms that contain
+ the custom widget when they are saved.
+ \endomit
+*/
+
+/*!
+ \macro QDESIGNER_WIDGET_EXPORT
+ \relates QDesignerCustomWidgetInterface
+ \since 4.1
+
+ This macro is used when defining custom widgets to ensure that they are
+ correctly exported from plugins for use with \QD.
+
+ On some platforms, the symbols required by \QD to create new widgets
+ are removed from plugins by the build system, making them unusable.
+ Using this macro ensures that the symbols are retained on those platforms,
+ and has no side effects on other platforms.
+
+ For example, the \l{customwidgetplugin}{Custom Widget Plugin}
+ example exports a custom widget class with the following declaration:
+
+ \snippet customwidgetplugin/analogclock.h 0
+ \dots
+ \snippet customwidgetplugin/analogclock.h 1
+
+ \sa {Creating Custom Widgets for Qt Widgets Designer}
+*/
+
+
+
+
+
+/*!
+ \class QDesignerCustomWidgetCollectionInterface
+
+ \brief The QDesignerCustomWidgetCollectionInterface class allows
+ you to include several custom widgets in one single library.
+
+ \inmodule QtDesigner
+
+ When implementing a custom widget plugin, you build it as a
+ separate library. If you want to include several custom widget
+ plugins in the same library, you must in addition subclass
+ QDesignerCustomWidgetCollectionInterface.
+
+ QDesignerCustomWidgetCollectionInterface contains one single
+ function returning a list of the collection's
+ QDesignerCustomWidgetInterface objects. For example, if you have
+ several custom widgets \c CustomWidgetOne, \c CustomWidgetTwo and
+ \c CustomWidgetThree, the class definition may look like this:
+
+ \snippet plugins/doc_src_qtdesigner.cpp 12
+
+ In the class constructor you add the interfaces to your custom
+ widgets to the list which you return in the customWidgets()
+ function:
+
+ \snippet plugins/doc_src_qtdesigner.cpp 13
+
+ Note that instead of exporting each custom widget plugin using the
+ Q_PLUGIN_METADATA() macro, you export the entire collection. The
+ Q_PLUGIN_METADATA() macro ensures that \QD can access and construct
+ the custom widgets. Without this macro, there is no way for \QD to
+ use them.
+
+ \sa QDesignerCustomWidgetInterface, {Creating Custom Widgets for
+ Qt Widgets Designer}
+*/
+
+/*!
+ \fn QDesignerCustomWidgetCollectionInterface::~QDesignerCustomWidgetCollectionInterface() {
+
+ Destroys the custom widget collection interface.
+*/
+
+/*!
+ \fn QList<QDesignerCustomWidgetInterface*> QDesignerCustomWidgetCollectionInterface::customWidgets() const
+
+ Returns a list of interfaces to the collection's custom widgets.
+*/
diff --git a/src/uiplugin/qdesignerexportwidget.h b/src/uiplugin/qdesignerexportwidget.h
new file mode 100644
index 000000000..ba32097e7
--- /dev/null
+++ b/src/uiplugin/qdesignerexportwidget.h
@@ -0,0 +1,26 @@
+// Copyright (C) 2016 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 QDESIGNEREXPORTWIDGET_H
+#define QDESIGNEREXPORTWIDGET_H
+
+#include <QtCore/qglobal.h>
+
+QT_BEGIN_NAMESPACE
+
+#if 0
+// pragma for syncqt, don't remove.
+#pragma qt_class(QDesignerExportWidget)
+#pragma qt_deprecates(QtDesigner/qdesignerexportwidget.h)
+#pragma qt_deprecates(QtDesigner/QDesignerExportWidget)
+#endif
+
+#if defined(QDESIGNER_EXPORT_WIDGETS)
+# define QDESIGNER_WIDGET_EXPORT Q_DECL_EXPORT
+#else
+# define QDESIGNER_WIDGET_EXPORT Q_DECL_IMPORT
+#endif
+
+QT_END_NAMESPACE
+
+#endif //QDESIGNEREXPORTWIDGET_H
diff --git a/src/uitools/CMakeLists.txt b/src/uitools/CMakeLists.txt
new file mode 100644
index 000000000..2da290bda
--- /dev/null
+++ b/src/uitools/CMakeLists.txt
@@ -0,0 +1,49 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## UiTools Module:
+#####################################################################
+
+qt_internal_add_module(UiTools
+ SOURCES
+ ../designer/src/lib/uilib/abstractformbuilder.cpp ../designer/src/lib/uilib/abstractformbuilder.h
+ ../designer/src/lib/uilib/formbuilder.cpp ../designer/src/lib/uilib/formbuilder.h
+ ../designer/src/lib/uilib/formbuilderextra.cpp ../designer/src/lib/uilib/formbuilderextra_p.h
+ ../designer/src/lib/uilib/properties.cpp ../designer/src/lib/uilib/properties_p.h
+ ../designer/src/lib/uilib/resourcebuilder.cpp ../designer/src/lib/uilib/resourcebuilder_p.h
+ ../designer/src/lib/uilib/textbuilder.cpp ../designer/src/lib/uilib/textbuilder_p.h
+ ../designer/src/lib/uilib/ui4.cpp ../designer/src/lib/uilib/ui4_p.h
+ quiloader.cpp quiloader.h quiloader_p.h
+ qtuitoolsglobal.h
+ DEFINES
+ QFORMINTERNAL_NAMESPACE
+ QT_DESIGNER
+ QT_DESIGNER_STATIC
+ QT_USE_QSTRINGBUILDER
+ INCLUDE_DIRECTORIES
+ ../designer/src/lib/uilib
+ LIBRARIES
+ Qt::UiPlugin
+ PUBLIC_LIBRARIES
+ Qt::Core
+ Qt::Gui
+ Qt::Widgets
+ NO_GENERATE_CPP_EXPORTS
+)
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(UiTools CONDITION TARGET Qt::OpenGLWidgets
+ PUBLIC_LIBRARIES
+ Qt::OpenGLWidgets
+)
+
+qt_internal_extend_target(UiTools CONDITION TARGET Qt::OpenGL
+ LIBRARIES
+ Qt::OpenGL
+)
+qt_internal_add_docs(UiTools
+ doc/qtuitools.qdocconf
+)
diff --git a/src/uitools/doc/images/textfinder-example-find.webp b/src/uitools/doc/images/textfinder-example-find.webp
new file mode 100644
index 000000000..b2983d70a
--- /dev/null
+++ b/src/uitools/doc/images/textfinder-example-find.webp
Binary files differ
diff --git a/src/uitools/doc/images/textfinder-example-find2.webp b/src/uitools/doc/images/textfinder-example-find2.webp
new file mode 100644
index 000000000..f155c3216
--- /dev/null
+++ b/src/uitools/doc/images/textfinder-example-find2.webp
Binary files differ
diff --git a/src/designer/src/uitools/doc/images/textfinder-example.png b/src/uitools/doc/images/textfinder-example.png
index 87322df98..87322df98 100644
--- a/src/designer/src/uitools/doc/images/textfinder-example.png
+++ b/src/uitools/doc/images/textfinder-example.png
Binary files differ
diff --git a/src/designer/src/uitools/doc/images/uitools-examples.png b/src/uitools/doc/images/uitools-examples.png
index 8c85cdb76..8c85cdb76 100644
--- a/src/designer/src/uitools/doc/images/uitools-examples.png
+++ b/src/uitools/doc/images/uitools-examples.png
Binary files differ
diff --git a/src/uitools/doc/qtuitools.qdocconf b/src/uitools/doc/qtuitools.qdocconf
new file mode 100644
index 000000000..d36b35585
--- /dev/null
+++ b/src/uitools/doc/qtuitools.qdocconf
@@ -0,0 +1,43 @@
+include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
+include($QT_INSTALL_DOCS/config/exampleurl-qttools.qdocconf)
+
+project = QtUiTools
+description = Qt UI Tools Reference Documentation
+version = $QT_VERSION
+
+examplesinstallpath = uitools
+
+qhp.projects = QtUiTools
+
+qhp.QtUiTools.file = qtuitools.qhp
+qhp.QtUiTools.namespace = org.qt-project.qtuitools.$QT_VERSION_TAG
+qhp.QtUiTools.virtualFolder = qtuitools
+qhp.QtUiTools.indexTitle = Qt UI Tools
+qhp.QtHelp.indexRoot =
+
+qhp.QtUiTools.subprojects = classes
+qhp.QtUiTools.subprojects.classes.title = C++ Classes
+qhp.QtUiTools.subprojects.classes.indexTitle = Qt UI Tools C++ Classes
+qhp.QtUiTools.subprojects.classes.selectors = class fake:headerfile
+qhp.QtUiTools.subprojects.classes.sortPages = true
+
+language = Cpp
+
+headerdirs += ..
+
+sourcedirs += ..
+
+exampledirs = ../../../examples/uitools \
+ snippets
+
+imagedirs = images
+
+outputdir = $QT_INSTALL_DOCS/qtuitools
+
+depends += qtdoc qtdesigner qtcore qtwidgets qtcmake qmake
+
+navigation.landingpage = "Qt UI Tools"
+navigation.cppclassespage = "Qt UI Tools C++ Classes"
+
+# Highlighted example for Desktop category
+manifestmeta.highlighted.names = "QtUiTools/Text Finder"
diff --git a/src/uitools/doc/snippets/quiloader/doc_src_qtuiloader.pro b/src/uitools/doc/snippets/quiloader/doc_src_qtuiloader.pro
new file mode 100644
index 000000000..d38258736
--- /dev/null
+++ b/src/uitools/doc/snippets/quiloader/doc_src_qtuiloader.pro
@@ -0,0 +1,6 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#! [0]
+QT += uitools
+#! [0]
diff --git a/src/uitools/doc/snippets/quiloader/main.cpp b/src/uitools/doc/snippets/quiloader/main.cpp
new file mode 100644
index 000000000..921f5c3f7
--- /dev/null
+++ b/src/uitools/doc/snippets/quiloader/main.cpp
@@ -0,0 +1,33 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtGui>
+#include <QtUiTools>
+
+#include "mywidget.h"
+
+//! [0]
+QWidget *loadCustomWidget(QWidget *parent)
+{
+ QUiLoader loader;
+ QWidget *myWidget;
+
+ QStringList availableWidgets = loader.availableWidgets();
+
+ if (availableWidgets.contains("AnalogClock"))
+ myWidget = loader.createWidget("AnalogClock", parent);
+
+ return myWidget;
+}
+//! [0]
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ MyWidget widget;
+ widget.show();
+
+ QWidget *customWidget = loadCustomWidget(0);
+ customWidget->show();
+ return app.exec();
+}
diff --git a/src/designer/src/uitools/doc/snippets/quiloader/myform.ui b/src/uitools/doc/snippets/quiloader/myform.ui
index 00702e860..00702e860 100644
--- a/src/designer/src/uitools/doc/snippets/quiloader/myform.ui
+++ b/src/uitools/doc/snippets/quiloader/myform.ui
diff --git a/src/uitools/doc/snippets/quiloader/mywidget.cpp b/src/uitools/doc/snippets/quiloader/mywidget.cpp
new file mode 100644
index 000000000..e9f5d32af
--- /dev/null
+++ b/src/uitools/doc/snippets/quiloader/mywidget.cpp
@@ -0,0 +1,23 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtGui>
+#include <QtUiTools>
+
+#include "mywidget.h"
+
+//! [0]
+MyWidget::MyWidget(QWidget *parent)
+ : QWidget(parent)
+{
+ QUiLoader loader;
+ QFile file(":/forms/myform.ui");
+ file.open(QFile::ReadOnly);
+ QWidget *myWidget = loader.load(&file, this);
+ file.close();
+
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->addWidget(myWidget);
+ setLayout(layout);
+}
+//! [0]
diff --git a/src/uitools/doc/snippets/quiloader/mywidget.h b/src/uitools/doc/snippets/quiloader/mywidget.h
new file mode 100644
index 000000000..9b5addc92
--- /dev/null
+++ b/src/uitools/doc/snippets/quiloader/mywidget.h
@@ -0,0 +1,15 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef MYWIDGET_H
+#define MYWIDGET_H
+
+#include <QWidget>
+
+class MyWidget : public QWidget
+{
+public:
+ MyWidget(QWidget *parent = 0);
+};
+
+#endif
diff --git a/src/designer/src/uitools/doc/snippets/quiloader/mywidget.qrc b/src/uitools/doc/snippets/quiloader/mywidget.qrc
index 47684d68b..47684d68b 100644
--- a/src/designer/src/uitools/doc/snippets/quiloader/mywidget.qrc
+++ b/src/uitools/doc/snippets/quiloader/mywidget.qrc
diff --git a/src/designer/src/uitools/doc/snippets/quiloader/quiloader.pro b/src/uitools/doc/snippets/quiloader/quiloader.pro
index 31ddf3256..31ddf3256 100644
--- a/src/designer/src/uitools/doc/snippets/quiloader/quiloader.pro
+++ b/src/uitools/doc/snippets/quiloader/quiloader.pro
diff --git a/src/uitools/doc/src/qtuitools-examples.qdoc b/src/uitools/doc/src/qtuitools-examples.qdoc
new file mode 100644
index 000000000..0b005095e
--- /dev/null
+++ b/src/uitools/doc/src/qtuitools-examples.qdoc
@@ -0,0 +1,26 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \group examples-qtuitools
+ \ingroup all-examples
+ \title Qt UI Tools Examples
+ \brief Using Qt UI Tools to process UI forms.
+
+ \image uitools-examples.png UiTools
+
+ The \l{Qt UI Tools} module provides classes to handle UI forms created with
+ \QD. The forms are processed at run-time to dynamically generate
+ user interfaces.
+
+ The following examples illustrate how to use Qt UI Tools to process UI
+ forms.
+*/
+
+/*
+ \list
+ \li \l{Text Finder}\raisedaster
+ \endlist
+
+ Examples marked with an asterisk (*) are fully documented.
+*/
diff --git a/src/uitools/doc/src/qtuitools-index.qdoc b/src/uitools/doc/src/qtuitools-index.qdoc
new file mode 100644
index 000000000..41e665bfe
--- /dev/null
+++ b/src/uitools/doc/src/qtuitools-index.qdoc
@@ -0,0 +1,54 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtuitools-index.html
+ \title Qt UI Tools
+
+ \brief Provides classes to handle forms created with \QD.
+
+ \QD forms are processed at run-time to produce dynamically generated
+ user interfaces. In order to generate a form at run-time, a resource
+ file containing a UI file is needed.
+
+ A form loader object, provided by the QUiLoader class, is used to construct
+ the user interface. This user interface can be retrieved from any QIODevice.
+ For example, a QFile object can be used to obtain a form stored in a
+ project's resources. The QUiLoader::load() function takes the user interface
+ description contained in the file and constructs the form widget.
+
+ \section1 Using the Module
+
+ \include {module-use.qdocinc} {using the c++ api}
+
+ \section2 Building with CMake
+
+ \include {module-use.qdocinc} {building with cmake} {UiTools}
+
+ \section2 Building with qmake
+
+ \include {module-use.qdocinc} {building_with_qmake} {uitools}
+
+ \section1 Licenses and Attributions
+
+ \section1 Examples
+
+ \list
+ \li \l {Qt UI Tools Examples}
+ \endlist
+
+ \section1 Reference
+
+ \list
+ \li \l {Qt UI Tools C++ Classes} {C++ Classes}
+ \endlist
+
+ \section1 Licenses
+
+ Qt UI Tools is available under commercial licenses from \l{The Qt Company}.
+ In addition, it is available under free software licenses. Since Qt 6.0,
+ these free software licenses are
+ \l{GNU Lesser General Public License, version 3}, or
+ the \l{GNU General Public License, version 2}.
+ See \l{Qt Licensing} for further details.
+*/
diff --git a/src/uitools/doc/src/qtuitools-module.qdoc b/src/uitools/doc/src/qtuitools-module.qdoc
new file mode 100644
index 000000000..d57d48aa0
--- /dev/null
+++ b/src/uitools/doc/src/qtuitools-module.qdoc
@@ -0,0 +1,32 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \module QtUiTools
+ \title Qt UI Tools C++ Classes
+ \since 4.1
+ \ingroup modules
+ \qtcmakepackage UiTools
+ \qtvariable uitools
+
+ \brief Provides classes to handle forms created with \QD.
+
+ These forms are processed at run-time to produce dynamically-generated
+ user interfaces. In order to generate a form at run-time, a resource
+ file containing a UI file is needed. Applications that use the
+ form handling classes need to be configured to be built against the
+ QtUiTools module. This is done by including the following declaration
+ in a \c qmake project file to ensure that the application is compiled
+ and linked appropriately.
+
+ \if !defined(qtforpython)
+ \snippet quiloader/doc_src_qtuiloader.pro 0
+ \endif
+
+ A form loader object, provided by the QUiLoader class, is used to
+ construct the user interface. This user interface can
+ be retrieved from any QIODevice; for example, a QFile object can be
+ used to obtain a form stored in a project's resources. The
+ QUiLoader::load() function takes the user interface description
+ contained in the file and constructs the form widget.
+*/
diff --git a/src/uitools/qtuitoolsglobal.h b/src/uitools/qtuitoolsglobal.h
new file mode 100644
index 000000000..a2f967dee
--- /dev/null
+++ b/src/uitools/qtuitoolsglobal.h
@@ -0,0 +1,24 @@
+// Copyright (C) 2020 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 QTUITOOLSGLOBAL_H
+#define QTUITOOLSGLOBAL_H
+
+#include <QtCore/qglobal.h>
+
+QT_BEGIN_NAMESPACE
+
+#ifndef QT_STATIC
+# if defined(QT_BUILD_UITOOLS_LIB)
+# define Q_UITOOLS_EXPORT Q_DECL_EXPORT
+# else
+# define Q_UITOOLS_EXPORT Q_DECL_IMPORT
+# endif
+#else
+# define Q_UITOOLS_EXPORT
+#endif
+
+QT_END_NAMESPACE
+
+#endif // QTUITOOLSGLOBAL_H
+
diff --git a/src/uitools/quiloader.cpp b/src/uitools/quiloader.cpp
new file mode 100644
index 000000000..2621ace1c
--- /dev/null
+++ b/src/uitools/quiloader.cpp
@@ -0,0 +1,917 @@
+// Copyright (C) 2020 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 "quiloader.h"
+#include "quiloader_p.h"
+
+#include <QtUiPlugin/customwidget.h>
+
+#include <formbuilder.h>
+#include <formbuilderextra_p.h>
+#include <textbuilder_p.h>
+#include <ui4_p.h>
+
+#include <QtWidgets/qapplication.h>
+#include <QtWidgets/qlayout.h>
+#include <QtWidgets/qwidget.h>
+#include <QtWidgets/qtabwidget.h>
+#include <QtWidgets/qtreewidget.h>
+#include <QtWidgets/qlistwidget.h>
+#include <QtWidgets/qtablewidget.h>
+#include <QtWidgets/qtoolbox.h>
+#include <QtWidgets/qcombobox.h>
+#include <QtWidgets/qfontcombobox.h>
+
+#include <QtGui/qaction.h>
+#include <QtGui/qactiongroup.h>
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qdatastream.h>
+#include <QtCore/qmap.h>
+#include <QtCore/qdir.h>
+#include <QtCore/qlibraryinfo.h>
+
+QT_BEGIN_NAMESPACE
+
+typedef QMap<QString, bool> widget_map;
+Q_GLOBAL_STATIC(widget_map, g_widgets)
+
+class QUiLoader;
+class QUiLoaderPrivate;
+
+#ifndef QT_NO_DATASTREAM
+// QUiTranslatableStringValue must be streamable since they become part of the QVariant-based
+// mime data when dragging items in views with QAbstractItemView::InternalMove.
+QDataStream &operator<<(QDataStream &out, const QUiTranslatableStringValue &s)
+{
+ out << s.qualifier() << s.value();
+ return out;
+}
+
+QDataStream &operator>>(QDataStream &in, QUiTranslatableStringValue &s)
+{
+ QByteArray qualifier, value;
+ in >> qualifier >> value;
+ s.setQualifier(qualifier);
+ s.setValue(value);
+ return in;
+}
+#endif // QT_NO_DATASTREAM
+
+QString QUiTranslatableStringValue::translate(const QByteArray &className, bool idBased) const
+{
+ return idBased
+ ? qtTrId(m_qualifier.constData())
+ : QCoreApplication::translate(className.constData(), m_value.constData(), m_qualifier.constData());
+}
+
+#ifdef QFORMINTERNAL_NAMESPACE
+namespace QFormInternal
+{
+#endif
+
+class TranslatingTextBuilder : public QTextBuilder
+{
+public:
+ explicit TranslatingTextBuilder(bool idBased, bool trEnabled, const QByteArray &className) :
+ m_idBased(idBased), m_trEnabled(trEnabled), m_className(className) {}
+
+ QVariant loadText(const DomProperty *icon) const override;
+
+ QVariant toNativeValue(const QVariant &value) const override;
+
+ bool idBased() const { return m_idBased; }
+
+private:
+ bool m_idBased;
+ bool m_trEnabled;
+ QByteArray m_className;
+};
+
+QVariant TranslatingTextBuilder::loadText(const DomProperty *text) const
+{
+ const DomString *str = text->elementString();
+ if (!str)
+ return QVariant();
+ if (str->hasAttributeNotr()) {
+ const QString notr = str->attributeNotr();
+ if (notr == QStringLiteral("true") || notr == QStringLiteral("yes"))
+ return QVariant::fromValue(str->text());
+ }
+ QUiTranslatableStringValue strVal;
+ strVal.setValue(str->text().toUtf8());
+ if (m_idBased)
+ strVal.setQualifier(str->attributeId().toUtf8());
+ else if (str->hasAttributeComment())
+ strVal.setQualifier(str->attributeComment().toUtf8());
+ return QVariant::fromValue(strVal);
+}
+
+QVariant TranslatingTextBuilder::toNativeValue(const QVariant &value) const
+{
+ if (value.canConvert<QUiTranslatableStringValue>()) {
+ QUiTranslatableStringValue tsv = qvariant_cast<QUiTranslatableStringValue>(value);
+ if (!m_trEnabled)
+ return QString::fromUtf8(tsv.value().constData());
+ return QVariant::fromValue(tsv.translate(m_className, m_idBased));
+ }
+ if (value.canConvert<QString>())
+ return QVariant::fromValue(qvariant_cast<QString>(value));
+ return value;
+}
+
+// This is "exported" to linguist
+const QUiItemRolePair qUiItemRoles[] = {
+ { Qt::DisplayRole, Qt::DisplayPropertyRole },
+#if QT_CONFIG(tooltip)
+ { Qt::ToolTipRole, Qt::ToolTipPropertyRole },
+#endif
+#if QT_CONFIG(statustip)
+ { Qt::StatusTipRole, Qt::StatusTipPropertyRole },
+#endif
+#if QT_CONFIG(whatsthis)
+ { Qt::WhatsThisRole, Qt::WhatsThisPropertyRole },
+#endif
+ { -1 , -1 }
+};
+
+static void recursiveReTranslate(QTreeWidgetItem *item, const QByteArray &class_name, bool idBased)
+{
+ const QUiItemRolePair *irs = qUiItemRoles;
+
+ int cnt = item->columnCount();
+ for (int i = 0; i < cnt; ++i) {
+ for (unsigned j = 0; irs[j].shadowRole >= 0; j++) {
+ QVariant v = item->data(i, irs[j].shadowRole);
+ if (v.isValid()) {
+ QUiTranslatableStringValue tsv = qvariant_cast<QUiTranslatableStringValue>(v);
+ item->setData(i, irs[j].realRole, tsv.translate(class_name, idBased));
+ }
+ }
+ }
+
+ cnt = item->childCount();
+ for (int i = 0; i < cnt; ++i)
+ recursiveReTranslate(item->child(i), class_name, idBased);
+}
+
+template<typename T>
+static void reTranslateWidgetItem(T *item, const QByteArray &class_name, bool idBased)
+{
+ const QUiItemRolePair *irs = qUiItemRoles;
+
+ for (unsigned j = 0; irs[j].shadowRole >= 0; j++) {
+ QVariant v = item->data(irs[j].shadowRole);
+ if (v.isValid()) {
+ QUiTranslatableStringValue tsv = qvariant_cast<QUiTranslatableStringValue>(v);
+ item->setData(irs[j].realRole, tsv.translate(class_name, idBased));
+ }
+ }
+}
+
+static void reTranslateTableItem(QTableWidgetItem *item, const QByteArray &class_name, bool idBased)
+{
+ if (item)
+ reTranslateWidgetItem(item, class_name, idBased);
+}
+
+#define RETRANSLATE_SUBWIDGET_PROP(mainWidget, setter, propName) \
+ do { \
+ QVariant v = mainWidget->widget(i)->property(propName); \
+ if (v.isValid()) { \
+ QUiTranslatableStringValue tsv = qvariant_cast<QUiTranslatableStringValue>(v); \
+ mainWidget->setter(i, tsv.translate(m_className, m_idBased)); \
+ } \
+ } while (0)
+
+class TranslationWatcher: public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit TranslationWatcher(QObject *parent, const QByteArray &className, bool idBased):
+ QObject(parent),
+ m_className(className),
+ m_idBased(idBased)
+ {
+ }
+
+ bool eventFilter(QObject *o, QEvent *event) override
+ {
+ if (event->type() == QEvent::LanguageChange) {
+ const auto &dynamicPropertyNames = o->dynamicPropertyNames();
+ for (const QByteArray &prop : dynamicPropertyNames) {
+ if (prop.startsWith(PROP_GENERIC_PREFIX)) {
+ const QByteArray propName = prop.mid(sizeof(PROP_GENERIC_PREFIX) - 1);
+ const QUiTranslatableStringValue tsv =
+ qvariant_cast<QUiTranslatableStringValue>(o->property(prop));
+ o->setProperty(propName, tsv.translate(m_className, m_idBased));
+ }
+ }
+ if (0) {
+#if QT_CONFIG(tabwidget)
+ } else if (QTabWidget *tabw = qobject_cast<QTabWidget*>(o)) {
+ const int cnt = tabw->count();
+ for (int i = 0; i < cnt; ++i) {
+ RETRANSLATE_SUBWIDGET_PROP(tabw, setTabText, PROP_TABPAGETEXT);
+#if QT_CONFIG(tooltip)
+ RETRANSLATE_SUBWIDGET_PROP(tabw, setTabToolTip, PROP_TABPAGETOOLTIP);
+# endif
+#if QT_CONFIG(whatsthis)
+ RETRANSLATE_SUBWIDGET_PROP(tabw, setTabWhatsThis, PROP_TABPAGEWHATSTHIS);
+# endif
+ }
+#endif
+#if QT_CONFIG(listwidget)
+ } else if (QListWidget *listw = qobject_cast<QListWidget*>(o)) {
+ const int cnt = listw->count();
+ for (int i = 0; i < cnt; ++i)
+ reTranslateWidgetItem(listw->item(i), m_className, m_idBased);
+#endif
+#if QT_CONFIG(treewidget)
+ } else if (QTreeWidget *treew = qobject_cast<QTreeWidget*>(o)) {
+ if (QTreeWidgetItem *item = treew->headerItem())
+ recursiveReTranslate(item, m_className, m_idBased);
+ const int cnt = treew->topLevelItemCount();
+ for (int i = 0; i < cnt; ++i) {
+ QTreeWidgetItem *item = treew->topLevelItem(i);
+ recursiveReTranslate(item, m_className, m_idBased);
+ }
+#endif
+#if QT_CONFIG(tablewidget)
+ } else if (QTableWidget *tablew = qobject_cast<QTableWidget*>(o)) {
+ const int row_cnt = tablew->rowCount();
+ const int col_cnt = tablew->columnCount();
+ for (int j = 0; j < col_cnt; ++j)
+ reTranslateTableItem(tablew->horizontalHeaderItem(j), m_className, m_idBased);
+ for (int i = 0; i < row_cnt; ++i) {
+ reTranslateTableItem(tablew->verticalHeaderItem(i), m_className, m_idBased);
+ for (int j = 0; j < col_cnt; ++j)
+ reTranslateTableItem(tablew->item(i, j), m_className, m_idBased);
+ }
+#endif
+#if QT_CONFIG(combobox)
+ } else if (QComboBox *combow = qobject_cast<QComboBox*>(o)) {
+ if (!qobject_cast<QFontComboBox*>(o)) {
+ const int cnt = combow->count();
+ for (int i = 0; i < cnt; ++i) {
+ const QVariant v = combow->itemData(i, Qt::DisplayPropertyRole);
+ if (v.isValid()) {
+ QUiTranslatableStringValue tsv = qvariant_cast<QUiTranslatableStringValue>(v);
+ combow->setItemText(i, tsv.translate(m_className, m_idBased));
+ }
+ }
+ }
+#endif
+#if QT_CONFIG(toolbox)
+ } else if (QToolBox *toolw = qobject_cast<QToolBox*>(o)) {
+ const int cnt = toolw->count();
+ for (int i = 0; i < cnt; ++i) {
+ RETRANSLATE_SUBWIDGET_PROP(toolw, setItemText, PROP_TOOLITEMTEXT);
+#if QT_CONFIG(tooltip)
+ RETRANSLATE_SUBWIDGET_PROP(toolw, setItemToolTip, PROP_TOOLITEMTOOLTIP);
+# endif
+ }
+#endif
+ }
+ }
+ return false;
+ }
+
+private:
+ QByteArray m_className;
+ bool m_idBased;
+};
+
+class FormBuilderPrivate: public QFormBuilder
+{
+ friend class QT_PREPEND_NAMESPACE(QUiLoader);
+ friend class QT_PREPEND_NAMESPACE(QUiLoaderPrivate);
+ using ParentClass = QFormBuilder;
+
+public:
+ QUiLoader *loader = nullptr;
+
+ bool dynamicTr = false;
+ bool trEnabled = true;
+
+ FormBuilderPrivate() = default;
+
+ QWidget *defaultCreateWidget(const QString &className, QWidget *parent, const QString &name)
+ {
+ return ParentClass::createWidget(className, parent, name);
+ }
+
+ QLayout *defaultCreateLayout(const QString &className, QObject *parent, const QString &name)
+ {
+ return ParentClass::createLayout(className, parent, name);
+ }
+
+ QAction *defaultCreateAction(QObject *parent, const QString &name)
+ {
+ return ParentClass::createAction(parent, name);
+ }
+
+ QActionGroup *defaultCreateActionGroup(QObject *parent, const QString &name)
+ {
+ return ParentClass::createActionGroup(parent, name);
+ }
+
+ QWidget *createWidget(const QString &className, QWidget *parent, const QString &name) override
+ {
+ if (QWidget *widget = loader->createWidget(className, parent, name)) {
+ widget->setObjectName(name);
+ return widget;
+ }
+
+ return nullptr;
+ }
+
+ QLayout *createLayout(const QString &className, QObject *parent, const QString &name) override
+ {
+ if (QLayout *layout = loader->createLayout(className, parent, name)) {
+ layout->setObjectName(name);
+ return layout;
+ }
+
+ return nullptr;
+ }
+
+ QActionGroup *createActionGroup(QObject *parent, const QString &name) override
+ {
+ if (QActionGroup *actionGroup = loader->createActionGroup(parent, name)) {
+ actionGroup->setObjectName(name);
+ return actionGroup;
+ }
+
+ return nullptr;
+ }
+
+ QAction *createAction(QObject *parent, const QString &name) override
+ {
+ if (QAction *action = loader->createAction(parent, name)) {
+ action->setObjectName(name);
+ return action;
+ }
+
+ return nullptr;
+ }
+
+ void applyProperties(QObject *o, const QList<DomProperty*> &properties) override;
+ QWidget *create(DomUI *ui, QWidget *parentWidget) override;
+ QWidget *create(DomWidget *ui_widget, QWidget *parentWidget) override;
+ bool addItem(DomWidget *ui_widget, QWidget *widget, QWidget *parentWidget) override;
+
+private:
+ QByteArray m_class;
+ TranslationWatcher *m_trwatch = nullptr;
+ bool m_idBased = false;
+};
+
+static QString convertTranslatable(const DomProperty *p, const QByteArray &className,
+ bool idBased, QUiTranslatableStringValue *strVal)
+{
+ if (p->kind() != DomProperty::String)
+ return QString();
+ const DomString *dom_str = p->elementString();
+ if (!dom_str)
+ return QString();
+ if (dom_str->hasAttributeNotr()) {
+ const QString notr = dom_str->attributeNotr();
+ if (notr == QStringLiteral("yes") || notr == QStringLiteral("true"))
+ return QString();
+ }
+ strVal->setValue(dom_str->text().toUtf8());
+ strVal->setQualifier(idBased ? dom_str->attributeId().toUtf8() : dom_str->attributeComment().toUtf8());
+ if (strVal->value().isEmpty() && strVal->qualifier().isEmpty())
+ return QString();
+ return strVal->translate(className, idBased);
+}
+
+void FormBuilderPrivate::applyProperties(QObject *o, const QList<DomProperty*> &properties)
+{
+ QFormBuilder::applyProperties(o, properties);
+
+ if (!m_trwatch)
+ m_trwatch = new TranslationWatcher(o, m_class, m_idBased);
+
+ if (properties.isEmpty())
+ return;
+
+ // Unlike string item roles, string properties are not loaded via the textBuilder
+ // (as they are "shadowed" by the property sheets in designer). So do the initial
+ // translation here.
+ bool anyTrs = false;
+ for (const DomProperty *p : properties) {
+ QUiTranslatableStringValue strVal;
+ const QString text = convertTranslatable(p, m_class, m_idBased, &strVal);
+ if (text.isEmpty())
+ continue;
+ const QByteArray name = p->attributeName().toUtf8();
+ if (dynamicTr) {
+ const QByteArray dynname = QByteArray(PROP_GENERIC_PREFIX + name);
+ o->setProperty(dynname, QVariant::fromValue(strVal));
+ anyTrs = trEnabled;
+ }
+ if (p->elementString()->text() != text)
+ o->setProperty(name, text);
+ }
+ if (anyTrs)
+ o->installEventFilter(m_trwatch);
+}
+
+QWidget *FormBuilderPrivate::create(DomUI *ui, QWidget *parentWidget)
+{
+ m_class = ui->elementClass().toUtf8();
+ m_trwatch = nullptr;
+ m_idBased = ui->attributeIdbasedtr();
+ setTextBuilder(new TranslatingTextBuilder(m_idBased, trEnabled, m_class));
+ return QFormBuilder::create(ui, parentWidget);
+}
+
+QWidget *FormBuilderPrivate::create(DomWidget *ui_widget, QWidget *parentWidget)
+{
+ QWidget *w = QFormBuilder::create(ui_widget, parentWidget);
+ if (w == nullptr)
+ return nullptr;
+
+ if (0) {
+#if QT_CONFIG(tabwidget)
+ } else if (qobject_cast<QTabWidget*>(w)) {
+#endif
+#if QT_CONFIG(listwidget)
+ } else if (qobject_cast<QListWidget*>(w)) {
+#endif
+#if QT_CONFIG(treewidget)
+ } else if (qobject_cast<QTreeWidget*>(w)) {
+#endif
+#if QT_CONFIG(tablewidget)
+ } else if (qobject_cast<QTableWidget*>(w)) {
+#endif
+#if QT_CONFIG(combobox)
+ } else if (qobject_cast<QComboBox*>(w)) {
+ if (qobject_cast<QFontComboBox*>(w))
+ return w;
+#endif
+#if QT_CONFIG(toolbox)
+ } else if (qobject_cast<QToolBox*>(w)) {
+#endif
+ } else {
+ return w;
+ }
+ if (dynamicTr && trEnabled)
+ w->installEventFilter(m_trwatch);
+ return w;
+}
+
+#define TRANSLATE_SUBWIDGET_PROP(mainWidget, attribute, setter, propName) \
+ do { \
+ if (const auto *p = attributes.value(attribute)) { \
+ QUiTranslatableStringValue strVal; \
+ const QString text = convertTranslatable(p, m_class, m_idBased, &strVal); \
+ if (!text.isEmpty()) { \
+ if (dynamicTr) \
+ mainWidget->widget(i)->setProperty(propName, QVariant::fromValue(strVal)); \
+ mainWidget->setter(i, text); \
+ } \
+ } \
+ } while (0)
+
+bool FormBuilderPrivate::addItem(DomWidget *ui_widget, QWidget *widget, QWidget *parentWidget)
+{
+ if (parentWidget == nullptr)
+ return true;
+
+ if (!ParentClass::addItem(ui_widget, widget, parentWidget))
+ return false;
+
+ // Check special cases. First: Custom container
+ const QString className = QLatin1String(parentWidget->metaObject()->className());
+ if (!d->customWidgetAddPageMethod(className).isEmpty())
+ return true;
+
+ if (0) {
+#if QT_CONFIG(tabwidget)
+ } else if (QTabWidget *tabWidget = qobject_cast<QTabWidget*>(parentWidget)) {
+ const DomPropertyHash attributes = propertyMap(ui_widget->elementAttribute());
+ const int i = tabWidget->count() - 1;
+ TRANSLATE_SUBWIDGET_PROP(tabWidget, QFormBuilderStrings::titleAttribute,
+ setTabText, PROP_TABPAGETEXT);
+#if QT_CONFIG(tooltip)
+ TRANSLATE_SUBWIDGET_PROP(tabWidget, QFormBuilderStrings::toolTipAttribute,
+ setTabToolTip, PROP_TABPAGETOOLTIP);
+# endif
+#if QT_CONFIG(whatsthis)
+ TRANSLATE_SUBWIDGET_PROP(tabWidget, QFormBuilderStrings::whatsThisAttribute,
+ setTabWhatsThis, PROP_TABPAGEWHATSTHIS);
+# endif
+#endif
+#if QT_CONFIG(toolbox)
+ } else if (QToolBox *toolBox = qobject_cast<QToolBox*>(parentWidget)) {
+ const DomPropertyHash attributes = propertyMap(ui_widget->elementAttribute());
+ const int i = toolBox->count() - 1;
+ TRANSLATE_SUBWIDGET_PROP(toolBox, QFormBuilderStrings::labelAttribute,
+ setItemText, PROP_TOOLITEMTEXT);
+#if QT_CONFIG(tooltip)
+ TRANSLATE_SUBWIDGET_PROP(toolBox, QFormBuilderStrings::toolTipAttribute,
+ setItemToolTip, PROP_TOOLITEMTOOLTIP);
+# endif
+#endif
+ }
+
+ return true;
+}
+
+#ifdef QFORMINTERNAL_NAMESPACE
+}
+#endif
+
+class QUiLoaderPrivate
+{
+public:
+#ifdef QFORMINTERNAL_NAMESPACE
+ QFormInternal::FormBuilderPrivate builder;
+#else
+ FormBuilderPrivate builder;
+#endif
+
+ void setupWidgetMap() const;
+};
+
+void QUiLoaderPrivate::setupWidgetMap() const
+{
+ if (!g_widgets()->isEmpty())
+ return;
+
+#define DECLARE_WIDGET(a, b) g_widgets()->insert(QLatin1String(#a), true);
+#define DECLARE_LAYOUT(a, b)
+
+#include "widgets.table"
+
+#undef DECLARE_WIDGET
+#undef DECLARE_WIDGET_1
+#undef DECLARE_LAYOUT
+}
+
+/*!
+ \class QUiLoader
+ \inmodule QtUiTools
+
+ \brief The QUiLoader class enables standalone applications to
+ dynamically create user interfaces at run-time using the
+ information stored in UI files or specified in plugin paths.
+
+ In addition, you can customize or create your own user interface by
+ deriving your own loader class.
+
+ If you have a custom component or an application that embeds \QD, you can
+ also use the QFormBuilder class provided by the QtDesigner module to create
+ user interfaces from UI files.
+
+ The QUiLoader class provides a collection of functions allowing you to
+ create widgets based on the information stored in UI files (created
+ with \QD) or available in the specified plugin paths. The specified plugin
+ paths can be retrieved using the pluginPaths() function. Similarly, the
+ contents of a UI file can be retrieved using the load() function. For
+ example:
+
+ \snippet quiloader/mywidget.cpp 0
+
+ \if !defined(qtforpython)
+ By including the user interface in the form's resources (\c myform.qrc), we
+ ensure that it will be present at run-time:
+
+ \quotefile quiloader/mywidget.qrc
+ \endif
+
+ The availableWidgets() function returns a QStringList with the class names
+ of the widgets available in the specified plugin paths. To create these
+ widgets, simply use the createWidget() function. For example:
+
+ \snippet quiloader/main.cpp 0
+
+ To make a custom widget available to the loader, you can use the
+ addPluginPath() function; to remove all available widgets, you can call
+ the clearPluginPaths() function.
+
+ The createAction(), createActionGroup(), createLayout(), and createWidget()
+ functions are used internally by the QUiLoader class whenever it has to
+ create an action, action group, layout, or widget respectively. For that
+ reason, you can subclass the QUiLoader class and reimplement these
+ functions to intervene the process of constructing a user interface. For
+ example, you might want to have a list of the actions created when loading
+ a form or creating a custom widget.
+
+ For a complete example using the QUiLoader class, see the
+ \l{Calculator Builder}.
+
+ \sa {Qt UI Tools}, QFormBuilder
+*/
+
+/*!
+ Creates a form loader with the given \a parent.
+*/
+QUiLoader::QUiLoader(QObject *parent)
+ : QObject(parent), d_ptr(new QUiLoaderPrivate)
+{
+ Q_D(QUiLoader);
+
+#ifndef QT_NO_DATASTREAM
+ static int metaTypeId = 0;
+ if (!metaTypeId) {
+ metaTypeId = qRegisterMetaType<QUiTranslatableStringValue>("QUiTranslatableStringValue");
+ }
+#endif // QT_NO_DATASTREAM
+ d->builder.loader = this;
+
+#if QT_CONFIG(library)
+ QStringList paths;
+ const QStringList &libraryPaths = QApplication::libraryPaths();
+ for (const QString &path : libraryPaths) {
+ QString libPath = path;
+ libPath += QDir::separator();
+ libPath += QStringLiteral("designer");
+ paths.append(libPath);
+ }
+
+ d->builder.setPluginPath(paths);
+#endif // QT_CONFIG(library)
+}
+
+/*!
+ Destroys the loader.
+*/
+QUiLoader::~QUiLoader() = default;
+
+/*!
+ Loads a form from the given \a device and creates a new widget with the
+ given \a parentWidget to hold its contents.
+
+ \sa createWidget(), errorString()
+*/
+QWidget *QUiLoader::load(QIODevice *device, QWidget *parentWidget)
+{
+ Q_D(QUiLoader);
+ // QXmlStreamReader will report errors on open failure.
+ if (!device->isOpen())
+ device->open(QIODevice::ReadOnly|QIODevice::Text);
+ return d->builder.load(device, parentWidget);
+}
+
+/*!
+ Returns a list naming the paths in which the loader will search when
+ locating custom widget plugins.
+
+ \sa addPluginPath(), clearPluginPaths()
+*/
+QStringList QUiLoader::pluginPaths() const
+{
+ Q_D(const QUiLoader);
+ return d->builder.pluginPaths();
+}
+
+/*!
+ Clears the list of paths in which the loader will search when locating
+ plugins.
+
+ \sa addPluginPath(), pluginPaths()
+*/
+void QUiLoader::clearPluginPaths()
+{
+ Q_D(QUiLoader);
+ d->builder.clearPluginPaths();
+}
+
+/*!
+ Adds the given \a path to the list of paths in which the loader will search
+ when locating plugins.
+
+ \sa pluginPaths(), clearPluginPaths()
+*/
+void QUiLoader::addPluginPath(const QString &path)
+{
+ Q_D(QUiLoader);
+ d->builder.addPluginPath(path);
+}
+
+/*!
+ Creates a new widget with the given \a parent and \a name using the class
+ specified by \a className. You can use this function to create any of the
+ widgets returned by the availableWidgets() function.
+
+ The function is also used internally by the QUiLoader class whenever it
+ creates a widget. Hence, you can subclass QUiLoader and reimplement this
+ function to intervene process of constructing a user interface or widget.
+ However, in your implementation, ensure that you call QUiLoader's version
+ first.
+
+ \sa availableWidgets(), load()
+*/
+QWidget *QUiLoader::createWidget(const QString &className, QWidget *parent, const QString &name)
+{
+ Q_D(QUiLoader);
+ return d->builder.defaultCreateWidget(className, parent, name);
+}
+
+/*!
+ Creates a new layout with the given \a parent and \a name using the class
+ specified by \a className.
+
+ The function is also used internally by the QUiLoader class whenever it
+ creates a widget. Hence, you can subclass QUiLoader and reimplement this
+ function to intervene process of constructing a user interface or widget.
+ However, in your implementation, ensure that you call QUiLoader's version
+ first.
+
+ \sa createWidget(), load()
+*/
+QLayout *QUiLoader::createLayout(const QString &className, QObject *parent, const QString &name)
+{
+ Q_D(QUiLoader);
+ return d->builder.defaultCreateLayout(className, parent, name);
+}
+
+/*!
+ Creates a new action group with the given \a parent and \a name.
+
+ The function is also used internally by the QUiLoader class whenever it
+ creates a widget. Hence, you can subclass QUiLoader and reimplement this
+ function to intervene process of constructing a user interface or widget.
+ However, in your implementation, ensure that you call QUiLoader's version
+ first.
+
+ \sa createAction(), createWidget(), load()
+ */
+QActionGroup *QUiLoader::createActionGroup(QObject *parent, const QString &name)
+{
+ Q_D(QUiLoader);
+ return d->builder.defaultCreateActionGroup(parent, name);
+}
+
+/*!
+ Creates a new action with the given \a parent and \a name.
+
+ The function is also used internally by the QUiLoader class whenever it
+ creates a widget. Hence, you can subclass QUiLoader and reimplement this
+ function to intervene process of constructing a user interface or widget.
+ However, in your implementation, ensure that you call QUiLoader's version
+ first.
+
+ \sa createActionGroup(), createWidget(), load()
+*/
+QAction *QUiLoader::createAction(QObject *parent, const QString &name)
+{
+ Q_D(QUiLoader);
+ return d->builder.defaultCreateAction(parent, name);
+}
+
+/*!
+ Returns a list naming all available widgets that can be built using the
+ createWidget() function, i.e all the widgets specified within the given
+ plugin paths.
+
+ \sa pluginPaths(), createWidget()
+
+*/
+QStringList QUiLoader::availableWidgets() const
+{
+ Q_D(const QUiLoader);
+
+ d->setupWidgetMap();
+ widget_map available = *g_widgets();
+
+ const auto &customWidgets = d->builder.customWidgets();
+ for (QDesignerCustomWidgetInterface *plugin : customWidgets)
+ available.insert(plugin->name(), true);
+
+ return available.keys();
+}
+
+
+/*!
+ \since 4.5
+ Returns a list naming all available layouts that can be built using the
+ createLayout() function
+
+ \sa createLayout()
+*/
+
+QStringList QUiLoader::availableLayouts() const
+{
+ QStringList rc;
+#define DECLARE_WIDGET(a, b)
+#define DECLARE_LAYOUT(a, b) rc.push_back(QLatin1String(#a));
+
+#include "widgets.table"
+
+#undef DECLARE_WIDGET
+#undef DECLARE_LAYOUT
+ return rc;
+}
+
+/*!
+ Sets the working directory of the loader to \a dir. The loader will look
+ for other resources, such as icons and resource files, in paths relative to
+ this directory.
+
+ \sa workingDirectory()
+*/
+
+void QUiLoader::setWorkingDirectory(const QDir &dir)
+{
+ Q_D(QUiLoader);
+ d->builder.setWorkingDirectory(dir);
+}
+
+/*!
+ Returns the working directory of the loader.
+
+ \sa setWorkingDirectory()
+*/
+
+QDir QUiLoader::workingDirectory() const
+{
+ Q_D(const QUiLoader);
+ return d->builder.workingDirectory();
+}
+/*!
+ \since 4.5
+
+ If \a enabled is true, user interfaces loaded by this loader will
+ automatically retranslate themselves upon receiving a language change
+ event. Otherwise, the user interfaces will not be retranslated.
+
+ \sa isLanguageChangeEnabled()
+*/
+
+void QUiLoader::setLanguageChangeEnabled(bool enabled)
+{
+ Q_D(QUiLoader);
+ d->builder.dynamicTr = enabled;
+}
+
+/*!
+ \since 4.5
+
+ Returns true if dynamic retranslation on language change is enabled;
+ returns false otherwise.
+
+ \sa setLanguageChangeEnabled()
+*/
+
+bool QUiLoader::isLanguageChangeEnabled() const
+{
+ Q_D(const QUiLoader);
+ return d->builder.dynamicTr;
+}
+
+/*!
+ \internal
+ \since 4.5
+
+ If \a enabled is true, user interfaces loaded by this loader will be
+ translated. Otherwise, the user interfaces will not be translated.
+
+ \note This is orthogonal to languageChangeEnabled.
+
+ \sa isLanguageChangeEnabled(), setLanguageChangeEnabled()
+*/
+
+void QUiLoader::setTranslationEnabled(bool enabled)
+{
+ Q_D(QUiLoader);
+ d->builder.trEnabled = enabled;
+}
+
+/*!
+ \internal
+ \since 4.5
+
+ Returns true if translation is enabled; returns false otherwise.
+
+ \sa setTranslationEnabled()
+*/
+
+bool QUiLoader::isTranslationEnabled() const
+{
+ Q_D(const QUiLoader);
+ return d->builder.trEnabled;
+}
+
+/*!
+ Returns a human-readable description of the last error occurred in load().
+
+ \since 5.0
+ \sa load()
+*/
+
+QString QUiLoader::errorString() const
+{
+ Q_D(const QUiLoader);
+ return d->builder.errorString();
+}
+
+QT_END_NAMESPACE
+
+#include "quiloader.moc"
diff --git a/src/uitools/quiloader.h b/src/uitools/quiloader.h
new file mode 100644
index 000000000..742b5606f
--- /dev/null
+++ b/src/uitools/quiloader.h
@@ -0,0 +1,61 @@
+// Copyright (C) 2020 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 QUILOADER_H
+#define QUILOADER_H
+
+#include <QtUiTools/qtuitoolsglobal.h>
+#include <QtCore/qobject.h>
+#include <QtCore/qscopedpointer.h>
+
+QT_BEGIN_NAMESPACE
+
+class QWidget;
+class QLayout;
+class QAction;
+class QActionGroup;
+class QString;
+class QIODevice;
+class QDir;
+
+class QUiLoaderPrivate;
+class Q_UITOOLS_EXPORT QUiLoader : public QObject
+{
+ Q_OBJECT
+public:
+ explicit QUiLoader(QObject *parent = nullptr);
+ ~QUiLoader() override;
+
+ QStringList pluginPaths() const;
+ void clearPluginPaths();
+ void addPluginPath(const QString &path);
+
+ QWidget *load(QIODevice *device, QWidget *parentWidget = nullptr);
+ QStringList availableWidgets() const;
+ QStringList availableLayouts() const;
+
+ virtual QWidget *createWidget(const QString &className, QWidget *parent = nullptr, const QString &name = QString());
+ virtual QLayout *createLayout(const QString &className, QObject *parent = nullptr, const QString &name = QString());
+ virtual QActionGroup *createActionGroup(QObject *parent = nullptr, const QString &name = QString());
+ virtual QAction *createAction(QObject *parent = nullptr, const QString &name = QString());
+
+ void setWorkingDirectory(const QDir &dir);
+ QDir workingDirectory() const;
+
+ void setLanguageChangeEnabled(bool enabled);
+ bool isLanguageChangeEnabled() const;
+
+ void setTranslationEnabled(bool enabled);
+ bool isTranslationEnabled() const;
+
+ QString errorString() const;
+
+private:
+ QScopedPointer<QUiLoaderPrivate> d_ptr;
+ Q_DECLARE_PRIVATE(QUiLoader)
+ Q_DISABLE_COPY_MOVE(QUiLoader)
+};
+
+QT_END_NAMESPACE
+
+#endif // QUILOADER_H
diff --git a/src/uitools/quiloader_p.h b/src/uitools/quiloader_p.h
new file mode 100644
index 000000000..efd943217
--- /dev/null
+++ b/src/uitools/quiloader_p.h
@@ -0,0 +1,77 @@
+// Copyright (C) 2020 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 QUILOADER_P_H
+#define QUILOADER_P_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 <QtUiTools/qtuitoolsglobal.h>
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+
+QT_FORWARD_DECLARE_CLASS(QDataStream)
+
+// This file is here for use by the form preview in Linguist. If you change anything
+// here or in the code which uses it, remember to adapt Linguist accordingly.
+
+#define PROP_GENERIC_PREFIX "_q_notr_"
+#define PROP_TOOLITEMTEXT "_q_toolItemText_notr"
+#define PROP_TOOLITEMTOOLTIP "_q_toolItemToolTip_notr"
+#define PROP_TABPAGETEXT "_q_tabPageText_notr"
+#define PROP_TABPAGETOOLTIP "_q_tabPageToolTip_notr"
+#define PROP_TABPAGEWHATSTHIS "_q_tabPageWhatsThis_notr"
+
+QT_BEGIN_NAMESPACE
+
+class Q_UITOOLS_EXPORT QUiTranslatableStringValue
+{
+public:
+ QByteArray value() const { return m_value; }
+ void setValue(const QByteArray &value) { m_value = value; }
+ QByteArray qualifier() const { return m_qualifier; }
+ void setQualifier(const QByteArray &qualifier) { m_qualifier = qualifier; }
+
+ QString translate(const QByteArray &className, bool idBased) const;
+
+private:
+ QByteArray m_value;
+ QByteArray m_qualifier; // Comment or ID for id-based tr().
+};
+
+#ifndef QT_NO_DATASTREAM
+Q_UITOOLS_EXPORT QDataStream &operator<<(QDataStream &out, const QUiTranslatableStringValue &s);
+Q_UITOOLS_EXPORT QDataStream &operator>>(QDataStream &in, QUiTranslatableStringValue &s);
+#endif // QT_NO_DATASTREAM
+
+struct QUiItemRolePair {
+ int realRole;
+ int shadowRole;
+};
+
+#ifdef QFORMINTERNAL_NAMESPACE
+namespace QFormInternal
+{
+#endif
+
+extern const Q_UITOOLS_EXPORT QUiItemRolePair qUiItemRoles[];
+
+#ifdef QFORMINTERNAL_NAMESPACE
+}
+#endif
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QUiTranslatableStringValue)
+
+
+#endif // QUILOADER_P_H
diff --git a/src/windeployqt/.prev_CMakeLists.txt b/src/windeployqt/.prev_CMakeLists.txt
deleted file mode 100644
index e317a64e2..000000000
--- a/src/windeployqt/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-# Generated from windeployqt.pro.
-
-#####################################################################
-## windeployqt Tool:
-#####################################################################
-
-qt_get_tool_target_name(target_name windeployqt)
-qt_add_tool(${target_name}
- BOOTSTRAP
- TARGET_DESCRIPTION "Qt Windows Deployment Tool"
- SOURCES
- ../shared/winutils/elfreader.cpp ../shared/winutils/elfreader.h
- ../shared/winutils/qmlutils.cpp ../shared/winutils/qmlutils.h
- ../shared/winutils/utils.cpp ../shared/winutils/utils.h
- main.cpp
- DEFINES
- QT_NO_CAST_FROM_ASCII
- QT_NO_CAST_TO_ASCII
- QT_NO_FOREACH
- INCLUDE_DIRECTORIES
- ../shared/winutils
- PUBLIC_LIBRARIES
- Qt::CorePrivate
-)
-
-#### Keys ignored in scope 1:.:.:windeployqt.pro:<TRUE>:
-# QMAKE_TARGET_DESCRIPTION = "Qt Windows Deployment Tool"
-# QT_FOR_CONFIG = "tools-private"
-# _OPTION = "host_build"
-# _REQUIREMENTS = "qtConfig(windeployqt)"
-
-## Scopes:
-#####################################################################
-
-qt_extend_target(${target_name} CONDITION WIN32
- PUBLIC_LIBRARIES
- shlwapi
-)
-
-qt_extend_target(${target_name} CONDITION QT_FEATURE_relocatable
- DEFINES
- QT_RELOCATABLE
-)
diff --git a/src/windeployqt/CMakeLists.txt b/src/windeployqt/CMakeLists.txt
deleted file mode 100644
index ba6f45431..000000000
--- a/src/windeployqt/CMakeLists.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-# Generated from windeployqt.pro.
-
-#####################################################################
-## windeployqt Tool:
-#####################################################################
-
-qt_add_executable(windeployqt # special case
- #BOOTSTRAP # special case remove
- SOURCES
- ../shared/winutils/elfreader.cpp ../shared/winutils/elfreader.h
- ../shared/winutils/qmlutils.cpp ../shared/winutils/qmlutils.h
- ../shared/winutils/utils.cpp ../shared/winutils/utils.h
- main.cpp
- DEFINES
- QT_NO_CAST_FROM_ASCII
- QT_NO_CAST_TO_ASCII
- QT_NO_FOREACH
- INCLUDE_DIRECTORIES
- ../shared/winutils
- PUBLIC_LIBRARIES
- Qt::CorePrivate
- Qt::Core # special case
-)
-
-#### Keys ignored in scope 1:.:.:windeployqt.pro:<TRUE>:
-# QMAKE_TARGET_DESCRIPTION = "Qt Windows Deployment Tool"
-# QT_FOR_CONFIG = "tools-private"
-# _OPTION = "host_build"
-# _REQUIREMENTS = "qtConfig(windeployqt)"
-
-## Scopes:
-#####################################################################
-
-qt_extend_target(windeployqt CONDITION WIN32
- PUBLIC_LIBRARIES
- shlwapi
-)
-
-qt_extend_target(windeployqt CONDITION QT_FEATURE_relocatable
- DEFINES
- QT_RELOCATABLE
-)
diff --git a/src/windeployqt/main.cpp b/src/windeployqt/main.cpp
deleted file mode 100644
index 213214576..000000000
--- a/src/windeployqt/main.cpp
+++ /dev/null
@@ -1,1724 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "utils.h"
-#include "qmlutils.h"
-
-#include <QtCore/QCommandLineOption>
-#include <QtCore/QCommandLineParser>
-#include <QtCore/QDir>
-#include <QtCore/QFileInfo>
-#include <QtCore/QCoreApplication>
-#include <QtCore/QJsonDocument>
-#include <QtCore/QJsonObject>
-#include <QtCore/QJsonArray>
-#include <QtCore/QList>
-#include <QtCore/QOperatingSystemVersion>
-#include <QtCore/QSharedPointer>
-
-#ifdef Q_OS_WIN
-#include <QtCore/qt_windows.h>
-#else
-#define IMAGE_FILE_MACHINE_ARM64 0xaa64
-#endif
-
-#include <algorithm>
-#include <iostream>
-#include <iterator>
-#include <cstdio>
-
-QT_BEGIN_NAMESPACE
-
-enum QtModule
-#if defined(Q_COMPILER_CLASS_ENUM) || defined(Q_CC_MSVC)
- : quint64
-#endif
-{
- QtBluetoothModule = 0x0000000000000001,
- QtConcurrentModule = 0x0000000000000002,
- QtCoreModule = 0x0000000000000004,
- QtDeclarativeModule = 0x0000000000000008,
- QtDesignerComponents = 0x0000000000000010,
- QtDesignerModule = 0x0000000000000020,
- QtGuiModule = 0x0000000000000040,
- QtHelpModule = 0x0000000000000080,
- QtMultimediaModule = 0x0000000000000100,
- QtMultimediaWidgetsModule = 0x0000000000000200,
- QtMultimediaQuickModule = 0x0000000000000400,
- QtNetworkModule = 0x0000000000000800,
- QtNfcModule = 0x0000000000001000,
- QtOpenGLModule = 0x0000000000002000,
- QtPositioningModule = 0x0000000000004000,
- QtPrintSupportModule = 0x0000000000008000,
- QtQmlModule = 0x0000000000010000,
- QtQuickModule = 0x0000000000020000,
- QtQuickParticlesModule = 0x0000000000040000,
- QtScriptModule = 0x0000000000080000,
- QtScriptToolsModule = 0x0000000000100000,
- QtSensorsModule = 0x0000000000200000,
- QtSerialPortModule = 0x0000000000400000,
- QtSqlModule = 0x0000000000800000,
- QtSvgModule = 0x0000000001000000,
- QtTestModule = 0x0000000002000000,
- QtWidgetsModule = 0x0000000004000000,
- QtWinExtrasModule = 0x0000000008000000,
- QtXmlModule = 0x0000000010000000,
- QtXmlPatternsModule = 0x0000000020000000,
- QtWebKitModule = 0x0000000040000000,
- QtWebKitWidgetsModule = 0x0000000080000000,
- QtQuickWidgetsModule = 0x0000000100000000,
- QtWebSocketsModule = 0x0000000200000000,
- QtEnginioModule = 0x0000000400000000,
- QtWebEngineCoreModule = 0x0000000800000000,
- QtWebEngineModule = 0x0000001000000000,
- QtWebEngineWidgetsModule = 0x0000002000000000,
- QtQmlToolingModule = 0x0000004000000000,
- Qt3DCoreModule = 0x0000008000000000,
- Qt3DRendererModule = 0x0000010000000000,
- Qt3DQuickModule = 0x0000020000000000,
- Qt3DQuickRendererModule = 0x0000040000000000,
- Qt3DInputModule = 0x0000080000000000,
- QtLocationModule = 0x0000100000000000,
- QtWebChannelModule = 0x0000200000000000,
- QtTextToSpeechModule = 0x0000400000000000,
- QtSerialBusModule = 0x0000800000000000,
- QtGamePadModule = 0x0001000000000000,
- Qt3DAnimationModule = 0x0002000000000000,
- QtWebViewModule = 0x0004000000000000,
- Qt3DExtrasModule = 0x0008000000000000
-};
-
-struct QtModuleEntry {
- quint64 module;
- const char *option;
- const char *libraryName;
- const char *translation;
-};
-
-static QtModuleEntry qtModuleEntries[] = {
- { QtBluetoothModule, "bluetooth", "Qt6Bluetooth", nullptr },
- { QtConcurrentModule, "concurrent", "Qt6Concurrent", "qtbase" },
- { QtCoreModule, "core", "Qt6Core", "qtbase" },
- { QtDeclarativeModule, "declarative", "Qt6Declarative", "qtquick1" },
- { QtDesignerModule, "designer", "Qt6Designer", nullptr },
- { QtDesignerComponents, "designercomponents", "Qt6DesignerComponents", nullptr },
- { QtEnginioModule, "enginio", "Enginio", nullptr },
- { QtGamePadModule, "gamepad", "Qt6Gamepad", nullptr },
- { QtGuiModule, "gui", "Qt6Gui", "qtbase" },
- { QtHelpModule, "qthelp", "Qt6Help", "qt_help" },
- { QtMultimediaModule, "multimedia", "Qt6Multimedia", "qtmultimedia" },
- { QtMultimediaWidgetsModule, "multimediawidgets", "Qt6MultimediaWidgets", "qtmultimedia" },
- { QtMultimediaQuickModule, "multimediaquick", "Qt6MultimediaQuick_p", "qtmultimedia" },
- { QtNetworkModule, "network", "Qt6Network", "qtbase" },
- { QtNfcModule, "nfc", "Qt6Nfc", nullptr },
- { QtOpenGLModule, "opengl", "Qt6OpenGL", nullptr },
- { QtPositioningModule, "positioning", "Qt6Positioning", nullptr },
- { QtPrintSupportModule, "printsupport", "Qt6PrintSupport", nullptr },
- { QtQmlModule, "qml", "Qt6Qml", "qtdeclarative" },
- { QtQmlToolingModule, "qmltooling", "qmltooling", nullptr },
- { QtQuickModule, "quick", "Qt6Quick", "qtdeclarative" },
- { QtQuickParticlesModule, "quickparticles", "Qt6QuickParticles", nullptr },
- { QtQuickWidgetsModule, "quickwidgets", "Qt6QuickWidgets", nullptr },
- { QtScriptModule, "script", "Qt6Script", "qtscript" },
- { QtScriptToolsModule, "scripttools", "Qt6ScriptTools", "qtscript" },
- { QtSensorsModule, "sensors", "Qt6Sensors", nullptr },
- { QtSerialPortModule, "serialport", "Qt6SerialPort", "qtserialport" },
- { QtSqlModule, "sql", "Qt6Sql", "qtbase" },
- { QtSvgModule, "svg", "Qt6Svg", nullptr },
- { QtTestModule, "test", "Qt6Test", "qtbase" },
- { QtWebKitModule, "webkit", "Qt6WebKit", nullptr },
- { QtWebKitWidgetsModule, "webkitwidgets", "Qt6WebKitWidgets", nullptr },
- { QtWebSocketsModule, "websockets", "Qt6WebSockets", nullptr },
- { QtWidgetsModule, "widgets", "Qt6Widgets", "qtbase" },
- { QtWinExtrasModule, "winextras", "Qt6WinExtras", nullptr },
- { QtXmlModule, "xml", "Qt6Xml", "qtbase" },
- { QtXmlPatternsModule, "xmlpatterns", "Qt6XmlPatterns", "qtxmlpatterns" },
- { QtWebEngineCoreModule, "webenginecore", "Qt6WebEngineCore", nullptr },
- { QtWebEngineModule, "webengine", "Qt6WebEngine", "qtwebengine" },
- { QtWebEngineWidgetsModule, "webenginewidgets", "Qt6WebEngineWidgets", nullptr },
- { Qt3DCoreModule, "3dcore", "Qt63DCore", nullptr },
- { Qt3DRendererModule, "3drenderer", "Qt63DRender", nullptr },
- { Qt3DQuickModule, "3dquick", "Qt63DQuick", nullptr },
- { Qt3DQuickRendererModule, "3dquickrenderer", "Qt63DQuickRender", nullptr },
- { Qt3DInputModule, "3dinput", "Qt63DInput", nullptr },
- { Qt3DAnimationModule, "3danimation", "Qt63DAnimation", nullptr },
- { Qt3DExtrasModule, "3dextras", "Qt63DExtras", nullptr },
- { QtLocationModule, "geoservices", "Qt6Location", nullptr },
- { QtWebChannelModule, "webchannel", "Qt6WebChannel", nullptr },
- { QtTextToSpeechModule, "texttospeech", "Qt6TextToSpeech", nullptr },
- { QtSerialBusModule, "serialbus", "Qt6SerialBus", nullptr },
- { QtWebViewModule, "webview", "Qt6WebView", nullptr }
-};
-
-enum QtPlugin {
- QtVirtualKeyboardPlugin = 0x1
-};
-
-static const char webKitProcessC[] = "QtWebProcess";
-static const char webEngineProcessC[] = "QtWebEngineProcess";
-
-static inline QString webProcessBinary(const char *binaryName, Platform p)
-{
- const QString webProcess = QLatin1String(binaryName);
- return (p & WindowsBased) ? webProcess + QStringLiteral(".exe") : webProcess;
-}
-
-static QByteArray formatQtModules(quint64 mask, bool option = false)
-{
- QByteArray result;
- for (const auto &qtModule : qtModuleEntries) {
- if (mask & qtModule.module) {
- if (!result.isEmpty())
- result.append(' ');
- result.append(option ? qtModule.option : qtModule.libraryName);
- }
- }
- return result;
-}
-
-static Platform platformFromMkSpec(const QString &xSpec)
-{
- if (xSpec == QLatin1String("linux-g++"))
- return Unix;
- if (xSpec.startsWith(QLatin1String("win32-"))) {
- if (xSpec.contains(QLatin1String("clang-g++")))
- return WindowsDesktopClangMinGW;
- if (xSpec.contains(QLatin1String("clang-msvc++")))
- return WindowsDesktopClangMsvc;
- return xSpec.contains(QLatin1String("g++")) ? WindowsDesktopMinGW : WindowsDesktopMsvc;
- }
- return UnknownPlatform;
-}
-
-// Helpers for exclusive options, "-foo", "--no-foo"
-enum ExlusiveOptionValue {
- OptionAuto,
- OptionEnabled,
- OptionDisabled
-};
-
-static ExlusiveOptionValue parseExclusiveOptions(const QCommandLineParser *parser,
- const QCommandLineOption &enableOption,
- const QCommandLineOption &disableOption)
-{
- const bool enabled = parser->isSet(enableOption);
- const bool disabled = parser->isSet(disableOption);
- if (enabled) {
- if (disabled) {
- std::wcerr << "Warning: both -" << enableOption.names().first()
- << " and -" << disableOption.names().first() << " were specified, defaulting to -"
- << enableOption.names().first() << ".\n";
- }
- return OptionEnabled;
- }
- return disabled ? OptionDisabled : OptionAuto;
-}
-
-static ExlusiveOptionValue optWebKit2 = OptionAuto;
-
-struct Options {
- enum DebugDetection {
- DebugDetectionAuto,
- DebugDetectionForceDebug,
- DebugDetectionForceRelease
- };
-
- bool plugins = true;
- bool libraries = true;
- bool quickImports = true;
- bool translations = true;
- bool systemD3dCompiler = true;
- bool compilerRunTime = false;
- unsigned disabledPlugins = 0;
- bool softwareRasterizer = true;
- Platform platform = WindowsDesktopMsvc;
- quint64 additionalLibraries = 0;
- quint64 disabledLibraries = 0;
- unsigned updateFileFlags = 0;
- QStringList qmlDirectories; // Project's QML files.
- QStringList qmlImportPaths; // Custom QML module locations.
- QString directory;
- QString qmakePath;
- QString translationsDirectory; // Translations target directory
- QStringList languages;
- QString libraryDirectory;
- QString pluginDirectory;
- QStringList binaries;
- JsonOutput *json = nullptr;
- ListOption list = ListNone;
- DebugDetection debugDetection = DebugDetectionAuto;
- bool deployPdb = false;
- bool dryRun = false;
- bool patchQt = true;
- bool ignoreLibraryErrors = false;
-};
-
-// Return binary from folder
-static inline QString findBinary(const QString &directory, Platform platform)
-{
- const QStringList nameFilters = (platform & WindowsBased) ?
- QStringList(QStringLiteral("*.exe")) : QStringList();
- const QFileInfoList &binaries =
- QDir(QDir::cleanPath(directory)).entryInfoList(nameFilters, QDir::Files | QDir::Executable);
- for (const QFileInfo &binaryFi : binaries) {
- const QString binary = binaryFi.fileName();
- if (!binary.contains(QLatin1String(webKitProcessC), Qt::CaseInsensitive)
- && !binary.contains(QLatin1String(webEngineProcessC), Qt::CaseInsensitive)) {
- return binaryFi.absoluteFilePath();
- }
- }
- return QString();
-}
-
-static QString msgFileDoesNotExist(const QString & file)
-{
- return QLatin1Char('"') + QDir::toNativeSeparators(file)
- + QStringLiteral("\" does not exist.");
-}
-
-enum CommandLineParseFlag {
- CommandLineParseError = 0x1,
- CommandLineParseHelpRequested = 0x2
-};
-
-static inline int parseArguments(const QStringList &arguments, QCommandLineParser *parser,
- Options *options, QString *errorMessage)
-{
- using CommandLineOptionPtr = QSharedPointer<QCommandLineOption>;
- using OptionPtrVector = QList<CommandLineOptionPtr>;
-
- parser->setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions);
- parser->setApplicationDescription(QStringLiteral("Qt Deploy Tool ") + QLatin1String(QT_VERSION_STR)
- + QLatin1String("\n\nThe simplest way to use windeployqt is to add the bin directory of your Qt\n"
- "installation (e.g. <QT_DIR\\bin>) to the PATH variable and then run:\n windeployqt <path-to-app-binary>\n"
- "If ICU, etc. are not in the bin directory, they need to be in the PATH\nvariable. "
- "If your application uses Qt Quick, run:\n windeployqt --qmldir <path-to-app-qml-files> <path-to-app-binary>"));
- const QCommandLineOption helpOption = parser->addHelpOption();
- parser->addVersionOption();
-
- QCommandLineOption dirOption(QStringLiteral("dir"),
- QStringLiteral("Use directory instead of binary directory."),
- QStringLiteral("directory"));
- parser->addOption(dirOption);
-
- QCommandLineOption qmakeOption(QStringLiteral("qmake"),
- QStringLiteral("Use specified qmake instead of qmake from PATH."),
- QStringLiteral("path"));
- parser->addOption(qmakeOption);
-
- QCommandLineOption libDirOption(QStringLiteral("libdir"),
- QStringLiteral("Copy libraries to path."),
- QStringLiteral("path"));
- parser->addOption(libDirOption);
-
- QCommandLineOption pluginDirOption(QStringLiteral("plugindir"),
- QStringLiteral("Copy plugins to path."),
- QStringLiteral("path"));
- parser->addOption(pluginDirOption);
-
- QCommandLineOption debugOption(QStringLiteral("debug"),
- QStringLiteral("Assume debug binaries."));
- parser->addOption(debugOption);
- QCommandLineOption releaseOption(QStringLiteral("release"),
- QStringLiteral("Assume release binaries."));
- parser->addOption(releaseOption);
- QCommandLineOption releaseWithDebugInfoOption(QStringLiteral("release-with-debug-info"),
- QStringLiteral("Assume release binaries with debug information."));
- releaseWithDebugInfoOption.setFlags(QCommandLineOption::HiddenFromHelp); // Deprecated by improved debug detection.
- parser->addOption(releaseWithDebugInfoOption);
-
- QCommandLineOption deployPdbOption(QStringLiteral("pdb"),
- QStringLiteral("Deploy .pdb files (MSVC)."));
- parser->addOption(deployPdbOption);
-
- QCommandLineOption forceOption(QStringLiteral("force"),
- QStringLiteral("Force updating files."));
- parser->addOption(forceOption);
-
- QCommandLineOption dryRunOption(QStringLiteral("dry-run"),
- QStringLiteral("Simulation mode. Behave normally, but do not copy/update any files."));
- parser->addOption(dryRunOption);
-
- QCommandLineOption noPatchQtOption(QStringLiteral("no-patchqt"),
- QStringLiteral("Do not patch the Qt6Core library."));
- parser->addOption(noPatchQtOption);
-
- QCommandLineOption ignoreErrorOption(QStringLiteral("ignore-library-errors"),
- QStringLiteral("Ignore errors when libraries cannot be found."));
- parser->addOption(ignoreErrorOption);
-
- QCommandLineOption noPluginsOption(QStringLiteral("no-plugins"),
- QStringLiteral("Skip plugin deployment."));
- parser->addOption(noPluginsOption);
-
- QCommandLineOption noLibraryOption(QStringLiteral("no-libraries"),
- QStringLiteral("Skip library deployment."));
- parser->addOption(noLibraryOption);
-
- QCommandLineOption qmlDirOption(QStringLiteral("qmldir"),
- QStringLiteral("Scan for QML-imports starting from directory."),
- QStringLiteral("directory"));
- parser->addOption(qmlDirOption);
-
- QCommandLineOption qmlImportOption(QStringLiteral("qmlimport"),
- QStringLiteral("Add the given path to the QML module search locations."),
- QStringLiteral("directory"));
- parser->addOption(qmlImportOption);
-
- QCommandLineOption noQuickImportOption(QStringLiteral("no-quick-import"),
- QStringLiteral("Skip deployment of Qt Quick imports."));
- parser->addOption(noQuickImportOption);
-
-
- QCommandLineOption translationOption(QStringLiteral("translations"),
- QStringLiteral("A comma-separated list of languages to deploy (de,fi)."),
- QStringLiteral("languages"));
- parser->addOption(translationOption);
-
- QCommandLineOption noTranslationOption(QStringLiteral("no-translations"),
- QStringLiteral("Skip deployment of translations."));
- parser->addOption(noTranslationOption);
-
- QCommandLineOption noSystemD3DCompilerOption(QStringLiteral("no-system-d3d-compiler"),
- QStringLiteral("Skip deployment of the system D3D compiler."));
- parser->addOption(noSystemD3DCompilerOption);
-
-
- QCommandLineOption compilerRunTimeOption(QStringLiteral("compiler-runtime"),
- QStringLiteral("Deploy compiler runtime (Desktop only)."));
- parser->addOption(compilerRunTimeOption);
-
- QCommandLineOption noVirtualKeyboardOption(QStringLiteral("no-virtualkeyboard"),
- QStringLiteral("Disable deployment of the Virtual Keyboard."));
- parser->addOption(noVirtualKeyboardOption);
-
- QCommandLineOption noCompilerRunTimeOption(QStringLiteral("no-compiler-runtime"),
- QStringLiteral("Do not deploy compiler runtime (Desktop only)."));
- parser->addOption(noCompilerRunTimeOption);
-
- QCommandLineOption webKitOption(QStringLiteral("webkit2"),
- QStringLiteral("Deployment of WebKit2 (web process)."));
- parser->addOption(webKitOption);
-
- QCommandLineOption noWebKitOption(QStringLiteral("no-webkit2"),
- QStringLiteral("Skip deployment of WebKit2."));
- parser->addOption(noWebKitOption);
-
- QCommandLineOption jsonOption(QStringLiteral("json"),
- QStringLiteral("Print to stdout in JSON format."));
- parser->addOption(jsonOption);
-
- QCommandLineOption suppressSoftwareRasterizerOption(QStringLiteral("no-opengl-sw"),
- QStringLiteral("Do not deploy the software rasterizer library."));
- parser->addOption(suppressSoftwareRasterizerOption);
-
- QCommandLineOption listOption(QStringLiteral("list"),
- QLatin1String("Print only the names of the files copied.\n"
- "Available options:\n"
- " source: absolute path of the source files\n"
- " target: absolute path of the target files\n"
- " relative: paths of the target files, relative\n"
- " to the target directory\n"
- " mapping: outputs the source and the relative\n"
- " target, suitable for use within an\n"
- " Appx mapping file"),
- QStringLiteral("option"));
- parser->addOption(listOption);
-
- QCommandLineOption verboseOption(QStringLiteral("verbose"),
- QStringLiteral("Verbose level (0-2)."),
- QStringLiteral("level"));
- parser->addOption(verboseOption);
-
- parser->addPositionalArgument(QStringLiteral("[files]"),
- QStringLiteral("Binaries or directory containing the binary."));
-
- OptionPtrVector enabledModuleOptions;
- OptionPtrVector disabledModuleOptions;
- const int qtModulesCount = int(sizeof(qtModuleEntries) / sizeof(QtModuleEntry));
- enabledModuleOptions.reserve(qtModulesCount);
- disabledModuleOptions.reserve(qtModulesCount);
- for (int i = 0; i < qtModulesCount; ++i) {
- const QString option = QLatin1String(qtModuleEntries[i].option);
- const QString name = QLatin1String(qtModuleEntries[i].libraryName);
- const QString enabledDescription = QStringLiteral("Add ") + name + QStringLiteral(" module.");
- CommandLineOptionPtr enabledOption(new QCommandLineOption(option, enabledDescription));
- parser->addOption(*enabledOption.data());
- enabledModuleOptions.append(enabledOption);
- const QString disabledDescription = QStringLiteral("Remove ") + name + QStringLiteral(" module.");
- CommandLineOptionPtr disabledOption(new QCommandLineOption(QStringLiteral("no-") + option,
- disabledDescription));
- disabledModuleOptions.append(disabledOption);
- parser->addOption(*disabledOption.data());
- }
-
- const bool success = parser->parse(arguments);
- if (parser->isSet(helpOption))
- return CommandLineParseHelpRequested;
- if (!success) {
- *errorMessage = parser->errorText();
- return CommandLineParseError;
- }
-
- options->libraryDirectory = parser->value(libDirOption);
- options->pluginDirectory = parser->value(pluginDirOption);
- options->plugins = !parser->isSet(noPluginsOption);
- options->libraries = !parser->isSet(noLibraryOption);
- options->translations = !parser->isSet(noTranslationOption);
- if (parser->isSet(translationOption))
- options->languages = parser->value(translationOption).split(QLatin1Char(','));
- options->systemD3dCompiler = !parser->isSet(noSystemD3DCompilerOption);
- options->quickImports = !parser->isSet(noQuickImportOption);
-
- if (parser->isSet(compilerRunTimeOption))
- options->compilerRunTime = true;
- else if (parser->isSet(noCompilerRunTimeOption))
- options->compilerRunTime = false;
-
- if (options->compilerRunTime && options->platform != WindowsDesktopMinGW && options->platform != WindowsDesktopMsvc) {
- *errorMessage = QStringLiteral("Deployment of the compiler runtime is implemented for Desktop MSVC/g++ only.");
- return CommandLineParseError;
- }
-
- if (parser->isSet(noVirtualKeyboardOption))
- options->disabledPlugins |= QtVirtualKeyboardPlugin;
-
- if (parser->isSet(releaseWithDebugInfoOption))
- std::wcerr << "Warning: " << releaseWithDebugInfoOption.names().first() << " is obsolete.";
-
- switch (parseExclusiveOptions(parser, debugOption, releaseOption)) {
- case OptionAuto:
- break;
- case OptionEnabled:
- options->debugDetection = Options::DebugDetectionForceDebug;
- break;
- case OptionDisabled:
- options->debugDetection = Options::DebugDetectionForceRelease;
- break;
- }
-
- if (parser->isSet(deployPdbOption)) {
- if (options->platform.testFlag(WindowsBased) && !options->platform.testFlag(MinGW))
- options->deployPdb = true;
- else
- std::wcerr << "Warning: --" << deployPdbOption.names().first() << " is not supported on this platform.\n";
- }
-
- if (parser->isSet(suppressSoftwareRasterizerOption))
- options->softwareRasterizer = false;
-
- optWebKit2 = parseExclusiveOptions(parser, webKitOption, noWebKitOption);
-
- if (parser->isSet(forceOption))
- options->updateFileFlags |= ForceUpdateFile;
- if (parser->isSet(dryRunOption)) {
- options->dryRun = true;
- options->updateFileFlags |= SkipUpdateFile;
- }
-
- options->patchQt = !parser->isSet(noPatchQtOption);
- options->ignoreLibraryErrors = parser->isSet(ignoreErrorOption);
-
- for (int i = 0; i < qtModulesCount; ++i) {
- if (parser->isSet(*enabledModuleOptions.at(i)))
- options->additionalLibraries |= qtModuleEntries[i].module;
- if (parser->isSet(*disabledModuleOptions.at(i)))
- options->disabledLibraries |= qtModuleEntries[i].module;
- }
-
- // Add some dependencies
- if (options->additionalLibraries & QtQuickModule)
- options->additionalLibraries |= QtQmlModule;
- if (options->additionalLibraries & QtDesignerComponents)
- options->additionalLibraries |= QtDesignerModule;
-
- if (parser->isSet(listOption)) {
- const QString value = parser->value(listOption);
- if (value == QStringLiteral("source")) {
- options->list = ListSource;
- } else if (value == QStringLiteral("target")) {
- options->list = ListTarget;
- } else if (value == QStringLiteral("relative")) {
- options->list = ListRelative;
- } else if (value == QStringLiteral("mapping")) {
- options->list = ListMapping;
- } else {
- *errorMessage = QStringLiteral("Please specify a valid option for -list (source, target, relative, mapping).");
- return CommandLineParseError;
- }
- }
-
- if (parser->isSet(jsonOption) || options->list) {
- optVerboseLevel = 0;
- options->json = new JsonOutput;
- } else {
- if (parser->isSet(verboseOption)) {
- bool ok;
- const QString value = parser->value(verboseOption);
- optVerboseLevel = value.toInt(&ok);
- if (!ok || optVerboseLevel < 0) {
- *errorMessage = QStringLiteral("Invalid value \"%1\" passed for verbose level.").arg(value);
- return CommandLineParseError;
- }
- }
- }
-
- const QStringList posArgs = parser->positionalArguments();
- if (posArgs.isEmpty()) {
- *errorMessage = QStringLiteral("Please specify the binary or folder.");
- return CommandLineParseError | CommandLineParseHelpRequested;
- }
-
- if (parser->isSet(dirOption))
- options->directory = parser->value(dirOption);
-
- if (parser->isSet(qmakeOption)) {
- const QString qmakePath = QDir::cleanPath(parser->value(qmakeOption));
- const QFileInfo fi(qmakePath);
- if (!fi.exists()) {
- *errorMessage = msgFileDoesNotExist(qmakePath);
- return CommandLineParseError;
- }
-
- if (!fi.isExecutable()) {
- *errorMessage = QLatin1Char('"') + QDir::toNativeSeparators(qmakePath)
- + QStringLiteral("\" is not an executable.");
- return CommandLineParseError;
- }
- options->qmakePath = qmakePath;
- }
-
- if (parser->isSet(qmlDirOption))
- options->qmlDirectories = parser->values(qmlDirOption);
-
- if (parser->isSet(qmlImportOption))
- options->qmlImportPaths = parser->values(qmlImportOption);
-
- const QString &file = posArgs.front();
- const QFileInfo fi(QDir::cleanPath(file));
- if (!fi.exists()) {
- *errorMessage = msgFileDoesNotExist(file);
- return CommandLineParseError;
- }
-
- if (!options->directory.isEmpty() && !fi.isFile()) { // -dir was specified - expecting file.
- *errorMessage = QLatin1Char('"') + file + QStringLiteral("\" is not an executable file.");
- return CommandLineParseError;
- }
-
- if (fi.isFile()) {
- options->binaries.append(fi.absoluteFilePath());
- if (options->directory.isEmpty())
- options->directory = fi.absolutePath();
- } else {
- const QString binary = findBinary(fi.absoluteFilePath(), options->platform);
- if (binary.isEmpty()) {
- *errorMessage = QStringLiteral("Unable to find binary in \"") + file + QLatin1Char('"');
- return CommandLineParseError;
- }
- options->directory = fi.absoluteFilePath();
- options->binaries.append(binary);
- } // directory.
-
- // Remaining files or plugin directories
- for (int i = 1; i < posArgs.size(); ++i) {
- const QFileInfo fi(QDir::cleanPath(posArgs.at(i)));
- const QString path = fi.absoluteFilePath();
- if (!fi.exists()) {
- *errorMessage = msgFileDoesNotExist(path);
- return CommandLineParseError;
- }
- if (fi.isDir()) {
- const QStringList libraries =
- findSharedLibraries(QDir(path), options->platform, MatchDebugOrRelease, QString());
- for (const QString &library : libraries)
- options->binaries.append(path + QLatin1Char('/') + library);
- } else {
- options->binaries.append(path);
- }
- }
- options->translationsDirectory = options->directory + QLatin1String("/translations");
- return 0;
-}
-
-// Simple line wrapping at 80 character boundaries.
-static inline QString lineBreak(QString s)
-{
- for (int i = 80; i < s.size(); i += 80) {
- const int lastBlank = s.lastIndexOf(QLatin1Char(' '), i);
- if (lastBlank >= 0) {
- s[lastBlank] = QLatin1Char('\n');
- i = lastBlank + 1;
- }
- }
- return s;
-}
-
-static inline QString helpText(const QCommandLineParser &p)
-{
- QString result = p.helpText();
- // Replace the default-generated text which is too long by a short summary
- // explaining how to enable single libraries.
- const int moduleStart = result.indexOf(QLatin1String("\n --bluetooth"));
- const int argumentsStart = result.lastIndexOf(QLatin1String("\nArguments:"));
- if (moduleStart >= argumentsStart)
- return result;
- QString moduleHelp = QLatin1String(
- "\n\nQt libraries can be added by passing their name (-xml) or removed by passing\n"
- "the name prepended by --no- (--no-xml). Available libraries:\n");
- moduleHelp += lineBreak(QString::fromLatin1(formatQtModules(0xFFFFFFFFFFFFFFFFull, true)));
- moduleHelp += QLatin1Char('\n');
- result.replace(moduleStart, argumentsStart - moduleStart, moduleHelp);
- return result;
-}
-
-static inline bool isQtModule(const QString &libName)
-{
- // Match Standard modules named Qt6XX.dll
- if (libName.size() < 3 || !libName.startsWith(QLatin1String("Qt"), Qt::CaseInsensitive))
- return false;
- const QChar version = libName.at(2);
- return version.isDigit() && (version.toLatin1() - '0') == QT_VERSION_MAJOR;
-}
-
-// Helper for recursively finding all dependent Qt libraries.
-static bool findDependentQtLibraries(const QString &qtBinDir, const QString &binary, Platform platform,
- QString *errorMessage, QStringList *result,
- unsigned *wordSize = nullptr, bool *isDebug = nullptr,
- unsigned short *machineArch = nullptr,
- int *directDependencyCount = nullptr, int recursionDepth = 0)
-{
- QStringList dependentLibs;
- if (directDependencyCount)
- *directDependencyCount = 0;
- if (!readExecutable(binary, platform, errorMessage, &dependentLibs, wordSize, isDebug, machineArch)) {
- errorMessage->prepend(QLatin1String("Unable to find dependent libraries of ") +
- QDir::toNativeSeparators(binary) + QLatin1String(" :"));
- return false;
- }
- // Filter out the Qt libraries. Note that depends.exe finds libs from optDirectory if we
- // are run the 2nd time (updating). We want to check against the Qt bin dir libraries
- const int start = result->size();
- for (const QString &lib : qAsConst(dependentLibs)) {
- if (isQtModule(lib)) {
- const QString path = normalizeFileName(qtBinDir + QLatin1Char('/') + QFileInfo(lib).fileName());
- if (!result->contains(path))
- result->append(path);
- }
- }
- const int end = result->size();
- if (directDependencyCount)
- *directDependencyCount = end - start;
- // Recurse
- for (int i = start; i < end; ++i)
- if (!findDependentQtLibraries(qtBinDir, result->at(i), platform, errorMessage, result,
- nullptr, nullptr, nullptr, nullptr, recursionDepth + 1))
- return false;
- return true;
-}
-
-// Base class to filter debug/release Windows DLLs for functions to be passed to updateFile().
-// Tries to pre-filter by namefilter and does check via PE.
-class DllDirectoryFileEntryFunction {
-public:
- explicit DllDirectoryFileEntryFunction(Platform platform,
- DebugMatchMode debugMatchMode, const QString &prefix = QString()) :
- m_platform(platform), m_debugMatchMode(debugMatchMode), m_prefix(prefix) {}
-
- QStringList operator()(const QDir &dir) const
- { return findSharedLibraries(dir, m_platform, m_debugMatchMode, m_prefix); }
-
-private:
- const Platform m_platform;
- const DebugMatchMode m_debugMatchMode;
- const QString m_prefix;
-};
-
-static QString pdbFileName(QString libraryFileName)
-{
- const int lastDot = libraryFileName.lastIndexOf(QLatin1Char('.')) + 1;
- if (lastDot <= 0)
- return QString();
- libraryFileName.replace(lastDot, libraryFileName.size() - lastDot, QLatin1String("pdb"));
- return libraryFileName;
-}
-static inline QStringList qmlCacheFileFilters()
-{
- return QStringList() << QStringLiteral("*.jsc") << QStringLiteral("*.qmlc");
-}
-
-// File entry filter function for updateFile() that returns a list of files for
-// QML import trees: DLLs (matching debgug) and .qml/,js, etc.
-class QmlDirectoryFileEntryFunction {
-public:
- enum Flags {
- DeployPdb = 0x1,
- SkipSources = 0x2
- };
-
- explicit QmlDirectoryFileEntryFunction(Platform platform, DebugMatchMode debugMatchMode, unsigned flags)
- : m_flags(flags), m_qmlNameFilter(QmlDirectoryFileEntryFunction::qmlNameFilters(flags))
- , m_dllFilter(platform, debugMatchMode)
- {}
-
- QStringList operator()(const QDir &dir) const
- {
- QStringList result;
- const QStringList &libraries = m_dllFilter(dir);
- for (const QString &library : libraries) {
- result.append(library);
- if (m_flags & DeployPdb) {
- const QString pdb = pdbFileName(library);
- if (QFileInfo(dir.absoluteFilePath(pdb)).isFile())
- result.append(pdb);
- }
- }
- result.append(m_qmlNameFilter(dir));
- return result;
- }
-
-private:
- static inline QStringList qmlNameFilters(unsigned flags)
- {
- QStringList result;
- result << QStringLiteral("qmldir") << QStringLiteral("*.qmltypes")
- << QStringLiteral("*.frag") << QStringLiteral("*.vert") // Shaders
- << QStringLiteral("*.ttf");
- if (!(flags & SkipSources)) {
- result << QStringLiteral("*.js") << QStringLiteral("*.qml") << QStringLiteral("*.png");
- result.append(qmlCacheFileFilters());
- }
- return result;
- }
-
- const unsigned m_flags;
- NameFilterFileEntryFunction m_qmlNameFilter;
- DllDirectoryFileEntryFunction m_dllFilter;
-};
-
-struct PluginModuleMapping
-{
- const char *directoryName;
- quint64 module;
-};
-
-static const PluginModuleMapping pluginModuleMappings[] =
-{
- {"qml1tooling", QtDeclarativeModule},
- {"gamepads", QtGamePadModule},
- {"accessible", QtGuiModule},
- {"iconengines", QtGuiModule},
- {"imageformats", QtGuiModule},
- {"platforms", QtGuiModule},
- {"platforminputcontexts", QtGuiModule},
- {"virtualkeyboard", QtGuiModule},
- {"geoservices", QtLocationModule},
- {"audio", QtMultimediaModule},
- {"mediaservice", QtMultimediaModule},
- {"playlistformats", QtMultimediaModule},
- {"bearer", QtNetworkModule},
- {"position", QtPositioningModule},
- {"printsupport", QtPrintSupportModule},
- {"scenegraph", QtQuickModule},
- {"qmltooling", QtQuickModule | QtQmlToolingModule},
- {"sensors", QtSensorsModule},
- {"sensorgestures", QtSensorsModule},
- {"canbus", QtSerialBusModule},
- {"sqldrivers", QtSqlModule},
- {"texttospeech", QtTextToSpeechModule},
- {"qtwebengine", QtWebEngineModule | QtWebEngineCoreModule | QtWebEngineWidgetsModule},
- {"styles", QtWidgetsModule},
- {"sceneparsers", Qt3DRendererModule},
- {"renderers", Qt3DRendererModule},
- {"renderplugins", Qt3DRendererModule},
- {"geometryloaders", Qt3DRendererModule},
- {"webview", QtWebViewModule}
-};
-
-static inline quint64 qtModuleForPlugin(const QString &subDirName)
-{
- const auto end = std::end(pluginModuleMappings);
- const auto result =
- std::find_if(std::begin(pluginModuleMappings), end,
- [&subDirName] (const PluginModuleMapping &m) { return subDirName == QLatin1String(m.directoryName); });
- return result != end ? result->module : 0; // "designer"
-}
-
-static quint64 qtModule(QString module, const QString &infix)
-{
- // Match needle 'path/Qt6Core<infix><d>.dll' or 'path/libQt6Core<infix>.so.5.0'
- const int lastSlashPos = module.lastIndexOf(QLatin1Char('/'));
- if (lastSlashPos > 0)
- module.remove(0, lastSlashPos + 1);
- if (module.startsWith(QLatin1String("lib")))
- module.remove(0, 3);
- int endPos = infix.isEmpty() ? -1 : module.lastIndexOf(infix);
- if (endPos == -1)
- endPos = module.indexOf(QLatin1Char('.')); // strip suffixes '.so.5.0'.
- if (endPos > 0)
- module.truncate(endPos);
- // That should leave us with 'Qt6Core<d>'.
- for (const auto &qtModule : qtModuleEntries) {
- const QLatin1String libraryName(qtModule.libraryName);
- if (module == libraryName
- || (module.size() == libraryName.size() + 1 && module.startsWith(libraryName))) {
- return qtModule.module;
- }
- }
- return 0;
-}
-
-QStringList findQtPlugins(quint64 *usedQtModules, quint64 disabledQtModules,
- unsigned disabledPlugins,
- const QString &qtPluginsDirName, const QString &libraryLocation,
- const QString &infix,
- DebugMatchMode debugMatchModeIn, Platform platform, QString *platformPlugin)
-{
- QString errorMessage;
- if (qtPluginsDirName.isEmpty())
- return QStringList();
- QDir pluginsDir(qtPluginsDirName);
- QStringList result;
- const QFileInfoList &pluginDirs = pluginsDir.entryInfoList(QStringList(QLatin1String("*")), QDir::Dirs | QDir::NoDotAndDotDot);
- for (const QFileInfo &subDirFi : pluginDirs) {
- const QString subDirName = subDirFi.fileName();
- const quint64 module = qtModuleForPlugin(subDirName);
- if (module & *usedQtModules) {
- const DebugMatchMode debugMatchMode = (module & QtWebEngineCoreModule)
- ? MatchDebugOrRelease // QTBUG-44331: Debug detection does not work for webengine, deploy all.
- : debugMatchModeIn;
- QDir subDir(subDirFi.absoluteFilePath());
- // Filter out disabled plugins
- if ((disabledPlugins & QtVirtualKeyboardPlugin) && subDirName == QLatin1String("virtualkeyboard"))
- continue;
- if (disabledQtModules & QtQmlToolingModule && subDirName == QLatin1String("qmltooling"))
- continue;
- // Filter for platform or any.
- QString filter;
- const bool isPlatformPlugin = subDirName == QLatin1String("platforms");
- if (isPlatformPlugin) {
- switch (platform) {
- case WindowsDesktopMsvc:
- case WindowsDesktopMinGW:
- filter = QStringLiteral("qwindows");
- break;
- case Unix:
- filter = QStringLiteral("libqxcb");
- break;
- case UnknownPlatform:
- break;
- }
- } else {
- filter = QLatin1String("*");
- }
- const QStringList plugins = findSharedLibraries(subDir, platform, debugMatchMode, filter);
- for (const QString &plugin : plugins) {
- // Filter out disabled plugins
- if ((disabledPlugins & QtVirtualKeyboardPlugin)
- && plugin.startsWith(QLatin1String("qtvirtualkeyboardplugin"))) {
- continue;
- }
- const QString pluginPath = subDir.absoluteFilePath(plugin);
- if (isPlatformPlugin)
- *platformPlugin = pluginPath;
- QStringList dependentQtLibs;
- quint64 neededModules = 0;
- if (findDependentQtLibraries(libraryLocation, pluginPath, platform, &errorMessage, &dependentQtLibs)) {
- for (int d = 0; d < dependentQtLibs.size(); ++ d)
- neededModules |= qtModule(dependentQtLibs.at(d), infix);
- } else {
- std::wcerr << "Warning: Cannot determine dependencies of "
- << QDir::toNativeSeparators(pluginPath) << ": " << errorMessage << '\n';
- }
- if (const quint64 missingModules = neededModules & disabledQtModules) {
- if (optVerboseLevel) {
- std::wcout << "Skipping plugin " << plugin
- << " due to disabled dependencies ("
- << formatQtModules(missingModules).constData() << ").\n";
- }
- } else {
- if (const quint64 missingModules = (neededModules & ~*usedQtModules)) {
- *usedQtModules |= missingModules;
- if (optVerboseLevel)
- std::wcout << "Adding " << formatQtModules(missingModules).constData() << " for " << plugin << '\n';
- }
- result.append(pluginPath);
- }
- } // for filter
- } // type matches
- } // for plugin folder
- return result;
-}
-
-static QStringList translationNameFilters(quint64 modules, const QString &prefix)
-{
- QStringList result;
- for (const auto &qtModule : qtModuleEntries) {
- if ((qtModule.module & modules) && qtModule.translation) {
- const QString name = QLatin1String(qtModule.translation) +
- QLatin1Char('_') + prefix + QStringLiteral(".qm");
- if (!result.contains(name))
- result.push_back(name);
- }
- }
- return result;
-}
-
-static bool deployTranslations(const QString &sourcePath, quint64 usedQtModules,
- const QString &target, const Options &options,
- QString *errorMessage)
-{
- // Find available languages prefixes by checking on qtbase.
- QStringList prefixes;
- QDir sourceDir(sourcePath);
- const QStringList qmFilter = QStringList(QStringLiteral("qtbase_*.qm"));
- const QFileInfoList &qmFiles = sourceDir.entryInfoList(qmFilter);
- for (const QFileInfo &qmFi : qmFiles) {
- const QString prefix = qmFi.baseName().mid(7);
- if (options.languages.isEmpty() || options.languages.contains(prefix))
- prefixes.append(prefix);
- }
- if (prefixes.isEmpty()) {
- std::wcerr << "Warning: Could not find any translations in "
- << QDir::toNativeSeparators(sourcePath) << " (developer build?)\n.";
- return true;
- }
- // Run lconvert to concatenate all files into a single named "qt_<prefix>.qm" in the application folder
- // Use QT_INSTALL_TRANSLATIONS as working directory to keep the command line short.
- const QString absoluteTarget = QFileInfo(target).absoluteFilePath();
- const QString binary = QStringLiteral("lconvert");
- QStringList arguments;
- for (const QString &prefix : qAsConst(prefixes)) {
- arguments.clear();
- const QString targetFile = QStringLiteral("qt_") + prefix + QStringLiteral(".qm");
- arguments.append(QStringLiteral("-o"));
- const QString targetFilePath = absoluteTarget + QLatin1Char('/') + targetFile;
- if (options.json)
- options.json->addFile(sourcePath + QLatin1Char('/') + targetFile, absoluteTarget);
- arguments.append(QDir::toNativeSeparators(targetFilePath));
- const QFileInfoList &langQmFiles = sourceDir.entryInfoList(translationNameFilters(usedQtModules, prefix));
- for (const QFileInfo &langQmFileFi : langQmFiles) {
- if (options.json) {
- options.json->addFile(langQmFileFi.absoluteFilePath(),
- absoluteTarget);
- }
- arguments.append(langQmFileFi.fileName());
- }
- if (optVerboseLevel)
- std::wcout << "Creating " << targetFile << "...\n";
- unsigned long exitCode;
- if ((options.updateFileFlags & SkipUpdateFile) == 0
- && (!runProcess(binary, arguments, sourcePath, &exitCode, nullptr, nullptr, errorMessage)
- || exitCode)) {
- return false;
- }
- } // for prefixes.
- return true;
-}
-
-struct DeployResult
-{
- operator bool() const { return success; }
-
- bool success = false;
- bool isDebug = false;
- quint64 directlyUsedQtLibraries = 0;
- quint64 usedQtLibraries = 0;
- quint64 deployedQtLibraries = 0;
-};
-
-static QString libraryPath(const QString &libraryLocation, const char *name,
- const QString &qtLibInfix, Platform platform, bool debug)
-{
- QString result = libraryLocation + QLatin1Char('/');
- if (platform & WindowsBased) {
- result += QLatin1String(name);
- result += qtLibInfix;
- if (debug && platformHasDebugSuffix(platform))
- result += QLatin1Char('d');
- } else if (platform.testFlag(UnixBased)) {
- result += QStringLiteral("lib");
- result += QLatin1String(name);
- result += qtLibInfix;
- }
- result += sharedLibrarySuffix(platform);
- return result;
-}
-
-static QString vcDebugRedistDir() { return QStringLiteral("Debug_NonRedist"); }
-
-static QString vcRedistDir()
-{
- const char vcDirVar[] = "VCINSTALLDIR";
- const QChar slash(QLatin1Char('/'));
- QString vcRedistDirName = QDir::cleanPath(QFile::decodeName(qgetenv(vcDirVar)));
- if (vcRedistDirName.isEmpty()) {
- std::wcerr << "Warning: Cannot find Visual Studio installation directory, " << vcDirVar
- << " is not set.\n";
- return QString();
- }
- if (!vcRedistDirName.endsWith(slash))
- vcRedistDirName.append(slash);
- vcRedistDirName.append(QStringLiteral("redist"));
- if (!QFileInfo(vcRedistDirName).isDir()) {
- std::wcerr << "Warning: Cannot find Visual Studio redist directory, "
- << QDir::toNativeSeparators(vcRedistDirName).toStdWString() << ".\n";
- return QString();
- }
- const QString vc2017RedistDirName = vcRedistDirName + QStringLiteral("/MSVC");
- if (!QFileInfo(vc2017RedistDirName).isDir())
- return vcRedistDirName; // pre 2017
- // Look in reverse order for folder containing the debug redist folder
- const QFileInfoList subDirs =
- QDir(vc2017RedistDirName).entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name | QDir::Reversed);
- const bool isWindows10 = QOperatingSystemVersion::current() >= QOperatingSystemVersion::Windows10;
- for (const QFileInfo &f : subDirs) {
- QString path = f.absoluteFilePath();
- if (QFileInfo(path + slash + vcDebugRedistDir()).isDir())
- return path;
- if (isWindows10) {
- path += QStringLiteral("/onecore");
- if (QFileInfo(path + slash + vcDebugRedistDir()).isDir())
- return path;
- }
- }
- std::wcerr << "Warning: Cannot find Visual Studio redist directory under "
- << QDir::toNativeSeparators(vc2017RedistDirName).toStdWString() << ".\n";
- return QString();
-}
-
-static QStringList compilerRunTimeLibs(Platform platform, bool isDebug, unsigned short machineArch)
-{
- QStringList result;
- switch (platform) {
- case WindowsDesktopMinGW: { // MinGW: Add runtime libraries
- static const char *minGwRuntimes[] = {"*gcc_", "*stdc++", "*winpthread"};
- const QString gcc = findInPath(QStringLiteral("g++.exe"));
- if (gcc.isEmpty()) {
- std::wcerr << "Warning: Cannot find GCC installation directory. g++.exe must be in the path.\n";
- break;
- }
- const QString binPath = QFileInfo(gcc).absolutePath();
- QStringList filters;
- const QString suffix = QLatin1Char('*') + sharedLibrarySuffix(platform);
- for (auto minGwRuntime : minGwRuntimes)
- filters.append(QLatin1String(minGwRuntime) + suffix);
- const QFileInfoList &dlls = QDir(binPath).entryInfoList(filters, QDir::Files);
- for (const QFileInfo &dllFi : dlls)
- result.append(dllFi.absoluteFilePath());
- }
- break;
-#ifdef Q_OS_WIN
- case WindowsDesktopMsvc: { // MSVC/Desktop: Add redistributable packages.
- QString vcRedistDirName = vcRedistDir();
- if (vcRedistDirName.isEmpty())
- break;
- QStringList redistFiles;
- QDir vcRedistDir(vcRedistDirName);
- const QString machineArchString = getArchString(machineArch);
- if (isDebug) {
- // Append DLLs from Debug_NonRedist\x??\Microsoft.VC<version>.DebugCRT.
- if (vcRedistDir.cd(vcDebugRedistDir()) && vcRedistDir.cd(machineArchString)) {
- const QStringList names = vcRedistDir.entryList(QStringList(QStringLiteral("Microsoft.VC*.DebugCRT")), QDir::Dirs);
- if (!names.isEmpty() && vcRedistDir.cd(names.first())) {
- const QFileInfoList &dlls = vcRedistDir.entryInfoList(QStringList(QLatin1String("*.dll")));
- for (const QFileInfo &dll : dlls)
- redistFiles.append(dll.absoluteFilePath());
- }
- }
- } else { // release: Bundle vcredist<>.exe
- QString releaseRedistDir = vcRedistDirName;
- const QStringList countryCodes = vcRedistDir.entryList(QStringList(QStringLiteral("[0-9]*")), QDir::Dirs);
- if (!countryCodes.isEmpty()) // Pre MSVC2017
- releaseRedistDir += QLatin1Char('/') + countryCodes.constFirst();
- QFileInfo fi(releaseRedistDir + QLatin1Char('/') + QStringLiteral("vc_redist.")
- + machineArchString + QStringLiteral(".exe"));
- if (!fi.isFile()) { // Pre MSVC2017/15.5
- fi.setFile(releaseRedistDir + QLatin1Char('/') + QStringLiteral("vcredist_")
- + machineArchString + QStringLiteral(".exe"));
- }
- if (fi.isFile())
- redistFiles.append(fi.absoluteFilePath());
- }
- if (redistFiles.isEmpty()) {
- std::wcerr << "Warning: Cannot find Visual Studio " << (isDebug ? "debug" : "release")
- << " redistributable files in " << QDir::toNativeSeparators(vcRedistDirName).toStdWString() << ".\n";
- break;
- }
- result.append(redistFiles);
- }
- break;
-#endif // Q_OS_WIN
- default:
- break;
- }
- return result;
-}
-
-static inline int qtVersion(const QMap<QString, QString> &qmakeVariables)
-{
- const QString versionString = qmakeVariables.value(QStringLiteral("QT_VERSION"));
- const QChar dot = QLatin1Char('.');
- const int majorVersion = versionString.section(dot, 0, 0).toInt();
- const int minorVersion = versionString.section(dot, 1, 1).toInt();
- const int patchVersion = versionString.section(dot, 2, 2).toInt();
- return (majorVersion << 16) | (minorVersion << 8) | patchVersion;
-}
-
-// Determine the Qt lib infix from the library path of "Qt6Core<qtblibinfix>[d].dll".
-static inline QString qtlibInfixFromCoreLibName(const QString &path, bool isDebug, Platform platform)
-{
- const int startPos = path.lastIndexOf(QLatin1Char('/')) + 8;
- int endPos = path.lastIndexOf(QLatin1Char('.'));
- if (isDebug && (platform & WindowsBased))
- endPos--;
- return endPos > startPos ? path.mid(startPos, endPos - startPos) : QString();
-}
-
-// Deploy a library along with its .pdb debug info file (MSVC) should it exist.
-static bool updateLibrary(const QString &sourceFileName, const QString &targetDirectory,
- const Options &options, QString *errorMessage)
-{
- if (!updateFile(sourceFileName, targetDirectory, options.updateFileFlags, options.json, errorMessage)) {
- if (options.ignoreLibraryErrors) {
- std::wcerr << "Warning: Could not update " << sourceFileName << " :" << *errorMessage << '\n';
- errorMessage->clear();
- return true;
- }
- return false;
- }
-
- if (options.deployPdb) {
- const QFileInfo pdb(pdbFileName(sourceFileName));
- if (pdb.isFile())
- return updateFile(pdb.absoluteFilePath(), targetDirectory, options.updateFileFlags, nullptr, errorMessage);
- }
- return true;
-}
-
-// Find out the ICU version to add the data library icudtXX.dll, which does not
-// show as a dependency.
-static QString getIcuVersion(const QString &libName)
-{
- QString version;
- std::copy_if(libName.cbegin(), libName.cend(), std::back_inserter(version),
- [](QChar c) { return c.isDigit(); });
- return version;
-}
-
-static DeployResult deploy(const Options &options,
- const QMap<QString, QString> &qmakeVariables,
- QString *errorMessage)
-{
- DeployResult result;
-
- const QChar slash = QLatin1Char('/');
-
- const QString qtBinDir = qmakeVariables.value(QStringLiteral("QT_INSTALL_BINS"));
- const QString libraryLocation = options.platform == Unix ? qmakeVariables.value(QStringLiteral("QT_INSTALL_LIBS")) : qtBinDir;
- const QString infix = qmakeVariables.value(QLatin1String(qmakeInfixKey));
- const int version = qtVersion(qmakeVariables);
- Q_UNUSED(version);
-
- if (optVerboseLevel > 1)
- std::wcout << "Qt binaries in " << QDir::toNativeSeparators(qtBinDir) << '\n';
-
- QStringList dependentQtLibs;
- bool detectedDebug;
- unsigned wordSize;
- unsigned short machineArch;
- int directDependencyCount = 0;
- if (!findDependentQtLibraries(libraryLocation, options.binaries.first(), options.platform, errorMessage, &dependentQtLibs, &wordSize,
- &detectedDebug, &machineArch, &directDependencyCount)) {
- return result;
- }
- for (int b = 1; b < options.binaries.size(); ++b) {
- if (!findDependentQtLibraries(libraryLocation, options.binaries.at(b), options.platform, errorMessage, &dependentQtLibs,
- nullptr, nullptr, nullptr)) {
- return result;
- }
- }
-
- DebugMatchMode debugMatchMode = MatchDebugOrRelease;
- result.isDebug = false;
- switch (options.debugDetection) {
- case Options::DebugDetectionAuto:
- // Debug detection is only relevant for Msvc/ClangMsvc which have distinct
- // runtimes and binaries. For anything else, use MatchDebugOrRelease
- // since also debug cannot be reliably detect for MinGW.
- if (options.platform.testFlag(Msvc) || options.platform.testFlag(ClangMsvc)) {
- result.isDebug = detectedDebug;
- debugMatchMode = result.isDebug ? MatchDebug : MatchRelease;
- }
- break;
- case Options::DebugDetectionForceDebug:
- result.isDebug = true;
- debugMatchMode = MatchDebug;
- break;
- case Options::DebugDetectionForceRelease:
- debugMatchMode = MatchRelease;
- break;
- }
-
- // Determine application type, check Quick2 is used by looking at the
- // direct dependencies (do not be fooled by QtWebKit depending on it).
- QString qtLibInfix;
- for (int m = 0; m < directDependencyCount; ++m) {
- const quint64 module = qtModule(dependentQtLibs.at(m), infix);
- result.directlyUsedQtLibraries |= module;
- if (module == QtCoreModule)
- qtLibInfix = qtlibInfixFromCoreLibName(dependentQtLibs.at(m), detectedDebug, options.platform);
- }
-
- const bool usesQml2 = !(options.disabledLibraries & QtQmlModule)
- && ((result.directlyUsedQtLibraries & (QtQmlModule | QtQuickModule | Qt3DQuickModule))
- || (options.additionalLibraries & QtQmlModule));
-
- if (optVerboseLevel) {
- std::wcout << QDir::toNativeSeparators(options.binaries.first()) << ' '
- << wordSize << " bit, " << (result.isDebug ? "debug" : "release")
- << " executable";
- if (usesQml2)
- std::wcout << " [QML]";
- std::wcout << '\n';
- }
-
- if (dependentQtLibs.isEmpty()) {
- *errorMessage = QDir::toNativeSeparators(options.binaries.first()) + QStringLiteral(" does not seem to be a Qt executable.");
- return result;
- }
-
- // Some Windows-specific checks: Qt5Core depends on ICU when configured with "-icu". Other than
- // that, Qt5WebKit has a hard dependency on ICU.
- if (options.platform.testFlag(WindowsBased)) {
- const QStringList qtLibs = dependentQtLibs.filter(QStringLiteral("Qt6Core"), Qt::CaseInsensitive)
- + dependentQtLibs.filter(QStringLiteral("Qt5WebKit"), Qt::CaseInsensitive);
- for (const QString &qtLib : qtLibs) {
- QStringList icuLibs = findDependentLibraries(qtLib, options.platform, errorMessage).filter(QStringLiteral("ICU"), Qt::CaseInsensitive);
- if (!icuLibs.isEmpty()) {
- // Find out the ICU version to add the data library icudtXX.dll, which does not show
- // as a dependency.
- const QString icuVersion = getIcuVersion(icuLibs.constFirst());
- if (!icuVersion.isEmpty()) {
- if (optVerboseLevel > 1)
- std::wcout << "Adding ICU version " << icuVersion << '\n';
- icuLibs.push_back(QStringLiteral("icudt") + icuVersion + QLatin1String(windowsSharedLibrarySuffix));
- }
- for (const QString &icuLib : qAsConst(icuLibs)) {
- const QString icuPath = findInPath(icuLib);
- if (icuPath.isEmpty()) {
- *errorMessage = QStringLiteral("Unable to locate ICU library ") + icuLib;
- return result;
- }
- dependentQtLibs.push_back(icuPath);
- } // for each icuLib
- break;
- } // !icuLibs.isEmpty()
- } // Qt6Core/Qt6WebKit
- } // Windows
-
- // Scan Quick2 imports
- QmlImportScanResult qmlScanResult;
- if (options.quickImports && usesQml2) {
- // Custom list of import paths provided by user
- QStringList qmlImportPaths = options.qmlImportPaths;
- // Qt's own QML modules
- qmlImportPaths << qmakeVariables.value(QStringLiteral("QT_INSTALL_QML"));
- QStringList qmlDirectories = options.qmlDirectories;
- if (qmlDirectories.isEmpty()) {
- const QString qmlDirectory = findQmlDirectory(options.platform, options.directory);
- if (!qmlDirectory.isEmpty())
- qmlDirectories.append(qmlDirectory);
- }
- for (const QString &qmlDirectory : qAsConst(qmlDirectories)) {
- if (optVerboseLevel >= 1)
- std::wcout << "Scanning " << QDir::toNativeSeparators(qmlDirectory) << ":\n";
- const QmlImportScanResult scanResult =
- runQmlImportScanner(qmlDirectory, qmlImportPaths,
- result.directlyUsedQtLibraries & QtWidgetsModule,
- options.platform, debugMatchMode, errorMessage);
- if (!scanResult.ok)
- return result;
- qmlScanResult.append(scanResult);
- // Additional dependencies of QML plugins.
- for (const QString &plugin : qAsConst(qmlScanResult.plugins)) {
- if (!findDependentQtLibraries(libraryLocation, plugin, options.platform, errorMessage, &dependentQtLibs, &wordSize, &detectedDebug, &machineArch))
- return result;
- }
- if (optVerboseLevel >= 1) {
- std::wcout << "QML imports:\n";
- for (const QmlImportScanResult::Module &mod : qAsConst(qmlScanResult.modules)) {
- std::wcout << " '" << mod.name << "' "
- << QDir::toNativeSeparators(mod.sourcePath) << '\n';
- }
- if (optVerboseLevel >= 2) {
- std::wcout << "QML plugins:\n";
- for (const QString &p : qAsConst(qmlScanResult.plugins))
- std::wcout << " " << QDir::toNativeSeparators(p) << '\n';
- }
- }
- }
- }
-
- QString platformPlugin;
- // Sort apart Qt 5 libraries in the ones that are represented by the
- // QtModule enumeration (and thus controlled by flags) and others.
- QStringList deployedQtLibraries;
- for (int i = 0 ; i < dependentQtLibs.size(); ++i) {
- if (const quint64 qtm = qtModule(dependentQtLibs.at(i), infix))
- result.usedQtLibraries |= qtm;
- else
- deployedQtLibraries.push_back(dependentQtLibs.at(i)); // Not represented by flag.
- }
- result.deployedQtLibraries = (result.usedQtLibraries | options.additionalLibraries) & ~options.disabledLibraries;
-
- const QStringList plugins =
- findQtPlugins(&result.deployedQtLibraries,
- // For non-QML applications, disable QML to prevent it from being pulled in by the qtaccessiblequick plugin.
- options.disabledLibraries | (usesQml2 ? 0 : (QtQmlModule | QtQuickModule)),
- options.disabledPlugins,
- qmakeVariables.value(QStringLiteral("QT_INSTALL_PLUGINS")), libraryLocation, infix,
- debugMatchMode, options.platform, &platformPlugin);
-
- // Apply options flags and re-add library names.
- QString qtGuiLibrary;
- for (const auto &qtModule : qtModuleEntries) {
- if (result.deployedQtLibraries & qtModule.module) {
- const QString library = libraryPath(libraryLocation, qtModule.libraryName, qtLibInfix, options.platform, result.isDebug);
- deployedQtLibraries.append(library);
- if (qtModule.module == QtGuiModule)
- qtGuiLibrary = library;
- }
- }
-
- if (optVerboseLevel >= 1) {
- std::wcout << "Direct dependencies: " << formatQtModules(result.directlyUsedQtLibraries).constData()
- << "\nAll dependencies : " << formatQtModules(result.usedQtLibraries).constData()
- << "\nTo be deployed : " << formatQtModules(result.deployedQtLibraries).constData() << '\n';
- }
-
- if (optVerboseLevel > 1)
- std::wcout << "Plugins: " << plugins.join(QLatin1Char(',')) << '\n';
-
- if ((result.deployedQtLibraries & QtGuiModule) && platformPlugin.isEmpty()) {
- *errorMessage =QStringLiteral("Unable to find the platform plugin.");
- return result;
- }
-
- if (options.platform.testFlag(WindowsBased) && !qtGuiLibrary.isEmpty()) {
- const QStringList guiLibraries = findDependentLibraries(qtGuiLibrary, options.platform, errorMessage);
- const bool dependsOnOpenGl = !guiLibraries.filter(QStringLiteral("opengl32"), Qt::CaseInsensitive).isEmpty();
- if (options.softwareRasterizer && !dependsOnOpenGl) {
- const QFileInfo softwareRasterizer(qtBinDir + slash + QStringLiteral("opengl32sw") + QLatin1String(windowsSharedLibrarySuffix));
- if (softwareRasterizer.isFile())
- deployedQtLibraries.append(softwareRasterizer.absoluteFilePath());
- }
- if (options.systemD3dCompiler && machineArch != IMAGE_FILE_MACHINE_ARM64) {
- const QString d3dCompiler = findD3dCompiler(options.platform, qtBinDir, wordSize);
- if (d3dCompiler.isEmpty()) {
- std::wcerr << "Warning: Cannot find any version of the d3dcompiler DLL.\n";
- } else {
- deployedQtLibraries.push_back(d3dCompiler);
- }
- }
- } // Windows
-
- // Update libraries
- if (options.libraries) {
- const QString targetPath = options.libraryDirectory.isEmpty() ?
- options.directory : options.libraryDirectory;
- QStringList libraries = deployedQtLibraries;
- if (options.compilerRunTime)
- libraries.append(compilerRunTimeLibs(options.platform, result.isDebug, machineArch));
- for (const QString &qtLib : qAsConst(libraries)) {
- if (!updateLibrary(qtLib, targetPath, options, errorMessage))
- return result;
- }
-
- if (options.patchQt && !options.dryRun) {
- const QString qt5CoreName = QFileInfo(libraryPath(libraryLocation, "Qt6Core", qtLibInfix,
- options.platform, result.isDebug)).fileName();
-#ifndef QT_RELOCATABLE
- if (!patchQtCore(targetPath + QLatin1Char('/') + qt6CoreName, errorMessage)) {
- std::wcerr << "Warning: " << *errorMessage << '\n';
- errorMessage->clear();
- }
-#endif
- }
- } // optLibraries
-
- // Update plugins
- if (options.plugins) {
- const QString targetPath = options.pluginDirectory.isEmpty() ?
- options.directory : options.pluginDirectory;
- QDir dir(targetPath);
- if (!dir.exists() && !dir.mkpath(QStringLiteral("."))) {
- *errorMessage = QLatin1String("Cannot create ") +
- QDir::toNativeSeparators(dir.absolutePath()) + QLatin1Char('.');
- return result;
- }
- for (const QString &plugin : plugins) {
- const QString targetDirName = plugin.section(slash, -2, -2);
- const QString targetPath = dir.absoluteFilePath(targetDirName);
- if (!dir.exists(targetDirName)) {
- if (optVerboseLevel)
- std::wcout << "Creating directory " << targetPath << ".\n";
- if (!(options.updateFileFlags & SkipUpdateFile) && !dir.mkdir(targetDirName)) {
- *errorMessage = QStringLiteral("Cannot create ") + targetDirName + QLatin1Char('.');
- return result;
- }
- }
- if (!updateLibrary(plugin, targetPath, options, errorMessage))
- return result;
- }
- } // optPlugins
-
- // Update Quick imports
- const bool usesQuick1 = result.deployedQtLibraries & QtDeclarativeModule;
- // Do not be fooled by QtWebKit.dll depending on Quick into always installing Quick imports
- // for WebKit1-applications. Check direct dependency only.
- if (options.quickImports && (usesQuick1 || usesQml2)) {
- if (usesQml2) {
- for (const QmlImportScanResult::Module &module : qAsConst(qmlScanResult.modules)) {
- const QString installPath = module.installPath(options.directory);
- if (optVerboseLevel > 1)
- std::wcout << "Installing: '" << module.name
- << "' from " << module.sourcePath << " to "
- << QDir::toNativeSeparators(installPath) << '\n';
- if (installPath != options.directory && !createDirectory(installPath, errorMessage))
- return result;
- unsigned updateFileFlags = options.updateFileFlags | SkipQmlDesignerSpecificsDirectories;
- unsigned qmlDirectoryFileFlags = 0;
- if (options.deployPdb)
- qmlDirectoryFileFlags |= QmlDirectoryFileEntryFunction::DeployPdb;
- if (!updateFile(module.sourcePath, QmlDirectoryFileEntryFunction(options.platform, debugMatchMode, qmlDirectoryFileFlags),
- installPath, updateFileFlags, options.json, errorMessage)) {
- return result;
- }
- }
- } // Quick 2
- if (usesQuick1) {
- const QString quick1ImportPath = qmakeVariables.value(QStringLiteral("QT_INSTALL_IMPORTS"));
- const QmlDirectoryFileEntryFunction qmlFileEntryFunction(options.platform, debugMatchMode, options.deployPdb ? QmlDirectoryFileEntryFunction::DeployPdb : 0);
- QStringList quick1Imports(QStringLiteral("Qt"));
- if (result.deployedQtLibraries & QtWebKitModule)
- quick1Imports << QStringLiteral("QtWebKit");
- for (const QString &quick1Import : qAsConst(quick1Imports)) {
- const QString sourceFile = quick1ImportPath + slash + quick1Import;
- if (!updateFile(sourceFile, qmlFileEntryFunction, options.directory, options.updateFileFlags, options.json, errorMessage))
- return result;
- }
- } // Quick 1
- } // optQuickImports
-
- if (options.translations) {
- if (!options.dryRun && !createDirectory(options.translationsDirectory, errorMessage))
- return result;
- if (!deployTranslations(qmakeVariables.value(QStringLiteral("QT_INSTALL_TRANSLATIONS")),
- result.deployedQtLibraries, options.translationsDirectory,
- options, errorMessage)) {
- return result;
- }
- }
-
- result.success = true;
- return result;
-}
-
-static bool deployWebProcess(const QMap<QString, QString> &qmakeVariables,
- const char *binaryName,
- const Options &sourceOptions, QString *errorMessage)
-{
- // Copy the web process and its dependencies
- const QString webProcess = webProcessBinary(binaryName, sourceOptions.platform);
- const QString webProcessSource = qmakeVariables.value(QStringLiteral("QT_INSTALL_LIBEXECS")) +
- QLatin1Char('/') + webProcess;
- if (!updateFile(webProcessSource, sourceOptions.directory, sourceOptions.updateFileFlags, sourceOptions.json, errorMessage))
- return false;
- Options options(sourceOptions);
- options.binaries.append(options.directory + QLatin1Char('/') + webProcess);
- options.quickImports = false;
- options.translations = false;
- return deploy(options, qmakeVariables, errorMessage);
-}
-
-static bool deployWebEngineCore(const QMap<QString, QString> &qmakeVariables,
- const Options &options, bool isDebug, QString *errorMessage)
-{
- static const char *installDataFiles[] = {"icudtl.dat",
- "qtwebengine_devtools_resources.pak",
- "qtwebengine_resources.pak",
- "qtwebengine_resources_100p.pak",
- "qtwebengine_resources_200p.pak"};
- QByteArray webEngineProcessName(webEngineProcessC);
- if (isDebug && platformHasDebugSuffix(options.platform))
- webEngineProcessName.append('d');
- if (optVerboseLevel)
- std::wcout << "Deploying: " << webEngineProcessName.constData() << "...\n";
- if (!deployWebProcess(qmakeVariables, webEngineProcessName, options, errorMessage))
- return false;
- const QString resourcesSubDir = QStringLiteral("/resources");
- const QString resourcesSourceDir
- = qmakeVariables.value(QStringLiteral("QT_INSTALL_DATA")) + resourcesSubDir
- + QLatin1Char('/');
- const QString resourcesTargetDir(options.directory + resourcesSubDir);
- if (!createDirectory(resourcesTargetDir, errorMessage))
- return false;
- for (auto installDataFile : installDataFiles) {
- if (!updateFile(resourcesSourceDir + QLatin1String(installDataFile),
- resourcesTargetDir, options.updateFileFlags, options.json, errorMessage)) {
- return false;
- }
- }
- const QFileInfo translations(qmakeVariables.value(QStringLiteral("QT_INSTALL_TRANSLATIONS"))
- + QStringLiteral("/qtwebengine_locales"));
- if (!translations.isDir()) {
- std::wcerr << "Warning: Cannot find the translation files of the QtWebEngine module at "
- << QDir::toNativeSeparators(translations.absoluteFilePath()) << ".\n";
- return true;
- }
- if (options.translations) {
- // Copy the whole translations directory.
- return createDirectory(options.translationsDirectory, errorMessage)
- && updateFile(translations.absoluteFilePath(), options.translationsDirectory,
- options.updateFileFlags, options.json, errorMessage);
- }
- // Translations have been turned off, but QtWebEngine needs at least one.
- const QFileInfo enUSpak(translations.filePath() + QStringLiteral("/en-US.pak"));
- if (!enUSpak.exists()) {
- std::wcerr << "Warning: Cannot find "
- << QDir::toNativeSeparators(enUSpak.absoluteFilePath()) << ".\n";
- return true;
- }
- const QString webEngineTranslationsDir = options.translationsDirectory + QLatin1Char('/')
- + translations.fileName();
- if (!createDirectory(webEngineTranslationsDir, errorMessage))
- return false;
- return updateFile(enUSpak.absoluteFilePath(), webEngineTranslationsDir,
- options.updateFileFlags, options.json, errorMessage);
-}
-
-int main(int argc, char **argv)
-{
- QCoreApplication a(argc, argv);
- QCoreApplication::setApplicationVersion(QLatin1String(QT_VERSION_STR));
-
- const QByteArray qtBinPath = QFile::encodeName(QDir::toNativeSeparators(QCoreApplication::applicationDirPath()));
- QByteArray path = qgetenv("PATH");
- if (!path.contains(qtBinPath)) { // QTBUG-39177, ensure Qt is in the path so that qt.conf is taken into account.
- path += ';';
- path += qtBinPath;
- qputenv("PATH", path);
- }
-
- Options options;
- QString errorMessage;
-
- { // Command line
- QCommandLineParser parser;
- QString errorMessage;
- const int result = parseArguments(QCoreApplication::arguments(), &parser, &options, &errorMessage);
- if (result & CommandLineParseError)
- std::wcerr << errorMessage << "\n\n";
- if (result & CommandLineParseHelpRequested)
- std::fputs(qPrintable(helpText(parser)), stdout);
- if (result & CommandLineParseError)
- return 1;
- if (result & CommandLineParseHelpRequested)
- return 0;
- }
-
- const QMap<QString, QString> qmakeVariables = queryQMakeAll(options.qmakePath, &errorMessage);
- const QString xSpec = qmakeVariables.value(QStringLiteral("QMAKE_XSPEC"));
- options.platform = platformFromMkSpec(xSpec);
- if (options.platform == WindowsDesktopMinGW || options.platform == WindowsDesktopMsvc)
- options.compilerRunTime = true;
-
- if (qmakeVariables.isEmpty() || xSpec.isEmpty() || !qmakeVariables.contains(QStringLiteral("QT_INSTALL_BINS"))) {
- std::wcerr << "Unable to query qmake: " << errorMessage << '\n';
- return 1;
- }
-
- if (options.platform == UnknownPlatform) {
- std::wcerr << "Unsupported platform " << xSpec << '\n';
- return 1;
- }
-
- // Create directories
- if (!createDirectory(options.directory, &errorMessage)) {
- std::wcerr << errorMessage << '\n';
- return 1;
- }
- if (!options.libraryDirectory.isEmpty() && options.libraryDirectory != options.directory
- && !createDirectory(options.libraryDirectory, &errorMessage)) {
- std::wcerr << errorMessage << '\n';
- return 1;
- }
-
- if (optWebKit2 == OptionEnabled)
- options.additionalLibraries |= QtWebKitModule;
-
-
- const DeployResult result = deploy(options, qmakeVariables, &errorMessage);
- if (!result) {
- std::wcerr << errorMessage << '\n';
- return 1;
- }
-
- if ((optWebKit2 != OptionDisabled)
- && (optWebKit2 == OptionEnabled
- || ((result.deployedQtLibraries & QtWebKitModule)
- && (result.directlyUsedQtLibraries & QtQuickModule)))) {
- if (optVerboseLevel)
- std::wcout << "Deploying: " << webKitProcessC << "...\n";
- if (!deployWebProcess(qmakeVariables, webKitProcessC, options, &errorMessage)) {
- std::wcerr << errorMessage << '\n';
- return 1;
- }
- }
-
- if (result.deployedQtLibraries & QtWebEngineCoreModule) {
- if (!deployWebEngineCore(qmakeVariables, options, result.isDebug, &errorMessage)) {
- std::wcerr << errorMessage << '\n';
- return 1;
- }
- }
-
- if (options.json) {
- if (options.list)
- std::fputs(options.json->toList(options.list, options.directory).constData(), stdout);
- else
- std::fputs(options.json->toJson().constData(), stdout);
- delete options.json;
- options.json = nullptr;
- }
-
- return 0;
-}
-
-QT_END_NAMESPACE
diff --git a/src/windeployqt/windeployqt.pro b/src/windeployqt/windeployqt.pro
deleted file mode 100644
index 19b131089..000000000
--- a/src/windeployqt/windeployqt.pro
+++ /dev/null
@@ -1,20 +0,0 @@
-include($$OUT_PWD/../../src/global/qttools-config.pri)
-QT_FOR_CONFIG += tools-private
-requires(qtConfig(windeployqt))
-
-option(host_build)
-QT = core-private
-DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII QT_NO_FOREACH
-
-include(../shared/winutils/winutils.pri)
-SOURCES += main.cpp
-
-CONFIG += force_bootstrap
-
-win32: LIBS += -lshlwapi
-
-QMAKE_TARGET_DESCRIPTION = "Qt Windows Deployment Tool"
-
-qtConfig(relocatable): DEFINES += QT_RELOCATABLE
-
-load(qt_tool)
diff --git a/sync.profile b/sync.profile
deleted file mode 100644
index de4261afc..000000000
--- a/sync.profile
+++ /dev/null
@@ -1,21 +0,0 @@
-%modules = ( # path to module name map
- "QtTools" => "$basedir/src/global",
- "QtHelp" => "$basedir/src/assistant/help",
- "QtUiTools" => "$basedir/src/designer/src/uitools",
- "QtUiPlugin" => "$basedir/src/designer/src/uiplugin",
- "QtDesigner" => "$basedir/src/designer/src/lib",
- "QtDesignerComponents" => "$basedir/src/designer/src/components/lib",
-);
-%moduleheaders = ( # restrict the module headers to those found in relative path
-);
-%classnames = (
-);
-%deprecatedheaders = (
- "QtDesigner" => {
- "customwidget.h" => "QtUiPlugin/customwidget.h",
- "QDesignerCustomWidgetInterface" => "QtUiPlugin/QDesignerCustomWidgetInterface",
- "QDesignerCustomWidgetCollectionInterface" => "QtUiPlugin/QDesignerCustomWidgetCollectionInterface",
- "qdesignerexportwidget.h" => "QtUiPlugin/qdesignerexportwidget.h",
- "QDesignerExportWidget" => "QtUiPlugin/QDesignerExportWidget"
- }
-);
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 221413713..05cc44c74 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from tests.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
if(QT_BUILD_STANDALONE_TESTS)
# Add qt_find_package calls for extra dependencies that need to be found when building
diff --git a/tests/auto/.prev_CMakeLists.txt b/tests/auto/.prev_CMakeLists.txt
deleted file mode 100644
index af1c24b03..000000000
--- a/tests/auto/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-# Generated from auto.pro.
-
-if(QT_FEATURE_process AND NOT CMAKE_CROSSCOMPILING)
- add_subdirectory(linguist)
- add_subdirectory(qtattributionsscanner)
- add_subdirectory(qtdiag)
-endif()
-if(NOT CMAKE_CROSSCOMPILING)
- add_subdirectory(qdoc)
-endif()
-if(TARGET Qt::Help AND NOT CMAKE_CROSSCOMPILING)
- add_subdirectory(qhelpcontentmodel)
- add_subdirectory(qhelpenginecore)
- add_subdirectory(qhelpgenerator)
- add_subdirectory(qhelpindexmodel)
- add_subdirectory(qhelpprojectdata)
-endif()
-add_subdirectory(cmake)
-add_subdirectory(installed_cmake)
-if(QT_FEATURE_process AND WIN32 AND NOT CMAKE_CROSSCOMPILING)
- add_subdirectory(windeployqt)
-endif()
diff --git a/tests/auto/CMakeLists.txt b/tests/auto/CMakeLists.txt
index 85bbc931d..52f6589f5 100644
--- a/tests/auto/CMakeLists.txt
+++ b/tests/auto/CMakeLists.txt
@@ -1,11 +1,13 @@
-# Generated from auto.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+add_subdirectory(cmake)
if(QT_FEATURE_process AND NOT CMAKE_CROSSCOMPILING)
add_subdirectory(linguist)
add_subdirectory(qtattributionsscanner)
add_subdirectory(qtdiag)
endif()
-if(NOT CMAKE_CROSSCOMPILING)
+if(TARGET Qt::qdoc AND NOT CMAKE_CROSSCOMPILING)
add_subdirectory(qdoc)
endif()
if(TARGET Qt::Help AND NOT CMAKE_CROSSCOMPILING)
@@ -15,10 +17,3 @@ if(TARGET Qt::Help AND NOT CMAKE_CROSSCOMPILING)
add_subdirectory(qhelpindexmodel)
add_subdirectory(qhelpprojectdata)
endif()
-# special case begin
-#add_subdirectory(cmake)
-#add_subdirectory(installed_cmake)
-# special case end
-if(QT_FEATURE_process AND WIN32 AND NOT CMAKE_CROSSCOMPILING)
- add_subdirectory(windeployqt)
-endif()
diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro
deleted file mode 100644
index 486b824bc..000000000
--- a/tests/auto/auto.pro
+++ /dev/null
@@ -1,33 +0,0 @@
-TEMPLATE=subdirs
-SUBDIRS=\
- linguist \
- qdoc \
- qtattributionsscanner \
- qhelpcontentmodel \
- qhelpenginecore \
- qhelpgenerator \
- qhelpindexmodel \
- qhelpprojectdata \
- cmake \
- installed_cmake \
- qtdiag \
- windeployqt
-
-installed_cmake.depends = cmake
-
-# These tests don't make sense for cross-compiled builds
-cross_compile:SUBDIRS -= linguist qdoc qtattributionsscanner windeployqt qhelpgenerator qtdiag
-
-# Tests that might make sense, but currently use SRCDIR
-cross_compile:SUBDIRS -= qhelpcontentmodel qhelpenginecore qhelpindexmodel qhelpprojectdata
-
-# These tests need the QtHelp module
-!qtHaveModule(help): SUBDIRS -= \
- qhelpcontentmodel \
- qhelpenginecore \
- qhelpgenerator \
- qhelpindexmodel \
- qhelpprojectdata \
-
-!qtConfig(process): SUBDIRS -= qtattributionsscanner linguist qtdiag windeployqt
-!win32: SUBDIRS -= windeployqt
diff --git a/tests/auto/bic/data/QtDesigner.6.0.0.linux-gcc-amd64.txt b/tests/auto/bic/data/QtDesigner.6.0.0.linux-gcc-amd64.txt
new file mode 100644
index 000000000..f1468f3a2
--- /dev/null
+++ b/tests/auto/bic/data/QtDesigner.6.0.0.linux-gcc-amd64.txt
@@ -0,0 +1,21454 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f543e7c5660) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f543e81ee40) 0 empty
+
+Class std::__do_is_nt_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_nt_destructible_impl (0x0x7f543e84a0c0) 0 empty
+
+Class std::__do_is_implicitly_default_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_implicitly_default_constructible_impl (0x0x7f543e87a1e0) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7f543eaa79c0) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f543eb217e0) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7f543eb218a0) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7f543eb21d80) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7f543eb21de0) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7f543eb21e40) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7f543eb21ea0) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7f543eb21f00) 0 empty
+
+Class std::__result_of_memfun_ref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memfun_ref_impl (0x0x7f543eb4e000) 0 empty
+
+Class std::__result_of_memfun_deref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memfun_deref_impl (0x0x7f543eb4e0c0) 0 empty
+
+Class std::__result_of_memobj_ref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memobj_ref_impl (0x0x7f543eb4e180) 0 empty
+
+Class std::__result_of_memobj_deref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memobj_deref_impl (0x0x7f543eb4e240) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f543eb4e5a0) 0 empty
+
+Class std::__swappable_details::__do_is_swappable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_details::__do_is_swappable_impl (0x0x7f543eb4e900) 0 empty
+
+Class std::__swappable_details::__do_is_nothrow_swappable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_details::__do_is_nothrow_swappable_impl (0x0x7f543eb4e960) 0 empty
+
+Class std::__swappable_with_details::__do_is_swappable_with_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_with_details::__do_is_swappable_with_impl (0x0x7f543eb4ec00) 0 empty
+
+Class std::__swappable_with_details::__do_is_nothrow_swappable_with_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_with_details::__do_is_nothrow_swappable_with_impl (0x0x7f543eb4ec60) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuch (0x0x7f543eba14e0) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f543ebeaa80) 0 empty
+
+Class std::__nonesuch_no_braces
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch_no_braces (0x0x7f543eb9c888) 0 empty
+ std::__nonesuch (0x0x7f543ebeaf60) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7f543ec6dcc0) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f543ec6df60) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f543e8a5000) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f543e8d6d20) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f543e8d6d80) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f543eb9cdd0) 0 empty
+ std::input_iterator_tag (0x0x7f543e8d6de0) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f543eb9ce38) 0 empty
+ std::forward_iterator_tag (0x0x7f543eb9cea0) 0 empty
+ std::input_iterator_tag (0x0x7f543e8d6e40) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f543eb9cf08) 0 empty
+ std::bidirectional_iterator_tag (0x0x7f543eb9cf70) 0 empty
+ std::forward_iterator_tag (0x0x7f543e8f9000) 0 empty
+ std::input_iterator_tag (0x0x7f543e8d6ea0) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_iter (0x0x7f543e98bba0) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_less_val
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_val (0x0x7f543e98bcc0) 0 empty
+
+Class __gnu_cxx::__ops::_Val_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Val_less_iter (0x0x7f543e9b7000) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_equal_to_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_equal_to_iter (0x0x7f543e9b7300) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_equal_to_val
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_equal_to_val (0x0x7f543e9b7420) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f543ea40c00) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f543ea40f60) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f543dc86000) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f543dc860c0) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7f543dc86120) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7f543dc86180) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7f543dc861e0) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7f543dc86240) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f543dc864e0) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f543dc86780) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f543dc867e0) 0
+
+Vtable for std::exception
+std::exception::_ZTVSt9exception: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9exception)
+16 (int (*)(...))std::exception::~exception
+24 (int (*)(...))std::exception::~exception
+32 (int (*)(...))std::exception::what
+
+Class std::exception
+ size=8 align=8
+ base size=8 base align=8
+std::exception (0x0x7f543dd3a5a0) 0 nearly-empty
+ vptr=((& std::exception::_ZTVSt9exception) + 16)
+
+Vtable for std::bad_exception
+std::bad_exception::_ZTVSt13bad_exception: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13bad_exception)
+16 (int (*)(...))std::bad_exception::~bad_exception
+24 (int (*)(...))std::bad_exception::~bad_exception
+32 (int (*)(...))std::bad_exception::what
+
+Class std::bad_exception
+ size=8 align=8
+ base size=8 base align=8
+std::bad_exception (0x0x7f543e8f93a8) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+ std::exception (0x0x7f543dd3a780) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f543e8f93a8)
+
+Vtable for std::type_info
+std::type_info::_ZTVSt9type_info: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9type_info)
+16 (int (*)(...))std::type_info::~type_info
+24 (int (*)(...))std::type_info::~type_info
+32 (int (*)(...))std::type_info::__is_pointer_p
+40 (int (*)(...))std::type_info::__is_function_p
+48 (int (*)(...))std::type_info::__do_catch
+56 (int (*)(...))std::type_info::__do_upcast
+
+Class std::type_info
+ size=16 align=8
+ base size=16 base align=8
+std::type_info (0x0x7f543dd3a960) 0
+ vptr=((& std::type_info::_ZTVSt9type_info) + 16)
+
+Vtable for std::bad_cast
+std::bad_cast::_ZTVSt8bad_cast: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt8bad_cast)
+16 (int (*)(...))std::bad_cast::~bad_cast
+24 (int (*)(...))std::bad_cast::~bad_cast
+32 (int (*)(...))std::bad_cast::what
+
+Class std::bad_cast
+ size=8 align=8
+ base size=8 base align=8
+std::bad_cast (0x0x7f543e8f9410) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+ std::exception (0x0x7f543dd3ad20) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f543e8f9410)
+
+Vtable for std::bad_typeid
+std::bad_typeid::_ZTVSt10bad_typeid: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt10bad_typeid)
+16 (int (*)(...))std::bad_typeid::~bad_typeid
+24 (int (*)(...))std::bad_typeid::~bad_typeid
+32 (int (*)(...))std::bad_typeid::what
+
+Class std::bad_typeid
+ size=8 align=8
+ base size=8 base align=8
+std::bad_typeid (0x0x7f543e8f9478) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+ std::exception (0x0x7f543dd3af00) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f543e8f9478)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f543dd71120) 0
+
+Vtable for std::nested_exception
+std::nested_exception::_ZTVSt16nested_exception: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt16nested_exception)
+16 (int (*)(...))std::nested_exception::~nested_exception
+24 (int (*)(...))std::nested_exception::~nested_exception
+
+Class std::nested_exception
+ size=16 align=8
+ base size=16 base align=8
+std::nested_exception (0x0x7f543dd71660) 0
+ vptr=((& std::nested_exception::_ZTVSt16nested_exception) + 16)
+
+Vtable for std::bad_alloc
+std::bad_alloc::_ZTVSt9bad_alloc: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9bad_alloc)
+16 (int (*)(...))std::bad_alloc::~bad_alloc
+24 (int (*)(...))std::bad_alloc::~bad_alloc
+32 (int (*)(...))std::bad_alloc::what
+
+Class std::bad_alloc
+ size=8 align=8
+ base size=8 base align=8
+std::bad_alloc (0x0x7f543e8f94e0) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+ std::exception (0x0x7f543dd71d20) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f543e8f94e0)
+
+Vtable for std::bad_array_new_length
+std::bad_array_new_length::_ZTVSt20bad_array_new_length: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt20bad_array_new_length)
+16 (int (*)(...))std::bad_array_new_length::~bad_array_new_length
+24 (int (*)(...))std::bad_array_new_length::~bad_array_new_length
+32 (int (*)(...))std::bad_array_new_length::what
+
+Class std::bad_array_new_length
+ size=8 align=8
+ base size=8 base align=8
+std::bad_array_new_length (0x0x7f543e8f9548) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+ std::bad_alloc (0x0x7f543e8f95b0) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f543e8f9548)
+ std::exception (0x0x7f543dd71f00) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f543e8f95b0)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f543dda5120) 0 empty
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7f543dda5360) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f543de27ae0) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f543da04ea0) 0
+
+Vtable for __cxxabiv1::__forced_unwind
+__cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN10__cxxabiv115__forced_unwindE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class __cxxabiv1::__forced_unwind
+ size=8 align=8
+ base size=8 base align=8
+__cxxabiv1::__forced_unwind (0x0x7f543da04f60) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f543d67be40) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f543d67bf00) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f543d67bf60) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f543d6ac000) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f543d6ac060) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f543d6ac180) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f543d6ac1e0) 0
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f543d73d840) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f543d73d9c0) 0 empty
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7f543d560840) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7f543d5608a0) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f543d560900) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7f543d560960) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f543d1b7120) 0
+
+Vtable for std::logic_error
+std::logic_error::_ZTVSt11logic_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt11logic_error)
+16 (int (*)(...))std::logic_error::~logic_error
+24 (int (*)(...))std::logic_error::~logic_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::logic_error
+ size=16 align=8
+ base size=16 base align=8
+std::logic_error (0x0x7f543d1af548) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+ std::exception (0x0x7f543d1b71e0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f543d1af548)
+
+Vtable for std::domain_error
+std::domain_error::_ZTVSt12domain_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12domain_error)
+16 (int (*)(...))std::domain_error::~domain_error
+24 (int (*)(...))std::domain_error::~domain_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::domain_error
+ size=16 align=8
+ base size=16 base align=8
+std::domain_error (0x0x7f543d1af5b0) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+ std::logic_error (0x0x7f543d1af618) 0
+ primary-for std::domain_error (0x0x7f543d1af5b0)
+ std::exception (0x0x7f543d1b7240) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f543d1af618)
+
+Vtable for std::invalid_argument
+std::invalid_argument::_ZTVSt16invalid_argument: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt16invalid_argument)
+16 (int (*)(...))std::invalid_argument::~invalid_argument
+24 (int (*)(...))std::invalid_argument::~invalid_argument
+32 (int (*)(...))std::logic_error::what
+
+Class std::invalid_argument
+ size=16 align=8
+ base size=16 base align=8
+std::invalid_argument (0x0x7f543d1af680) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+ std::logic_error (0x0x7f543d1af6e8) 0
+ primary-for std::invalid_argument (0x0x7f543d1af680)
+ std::exception (0x0x7f543d1b72a0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f543d1af6e8)
+
+Vtable for std::length_error
+std::length_error::_ZTVSt12length_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12length_error)
+16 (int (*)(...))std::length_error::~length_error
+24 (int (*)(...))std::length_error::~length_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::length_error
+ size=16 align=8
+ base size=16 base align=8
+std::length_error (0x0x7f543d1af750) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+ std::logic_error (0x0x7f543d1af7b8) 0
+ primary-for std::length_error (0x0x7f543d1af750)
+ std::exception (0x0x7f543d1b7300) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f543d1af7b8)
+
+Vtable for std::out_of_range
+std::out_of_range::_ZTVSt12out_of_range: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12out_of_range)
+16 (int (*)(...))std::out_of_range::~out_of_range
+24 (int (*)(...))std::out_of_range::~out_of_range
+32 (int (*)(...))std::logic_error::what
+
+Class std::out_of_range
+ size=16 align=8
+ base size=16 base align=8
+std::out_of_range (0x0x7f543d1af820) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+ std::logic_error (0x0x7f543d1af888) 0
+ primary-for std::out_of_range (0x0x7f543d1af820)
+ std::exception (0x0x7f543d1b7360) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f543d1af888)
+
+Vtable for std::runtime_error
+std::runtime_error::_ZTVSt13runtime_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13runtime_error)
+16 (int (*)(...))std::runtime_error::~runtime_error
+24 (int (*)(...))std::runtime_error::~runtime_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::runtime_error
+ size=16 align=8
+ base size=16 base align=8
+std::runtime_error (0x0x7f543d1af8f0) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+ std::exception (0x0x7f543d1b73c0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f543d1af8f0)
+
+Vtable for std::range_error
+std::range_error::_ZTVSt11range_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt11range_error)
+16 (int (*)(...))std::range_error::~range_error
+24 (int (*)(...))std::range_error::~range_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::range_error
+ size=16 align=8
+ base size=16 base align=8
+std::range_error (0x0x7f543d1af958) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+ std::runtime_error (0x0x7f543d1af9c0) 0
+ primary-for std::range_error (0x0x7f543d1af958)
+ std::exception (0x0x7f543d1b7420) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f543d1af9c0)
+
+Vtable for std::overflow_error
+std::overflow_error::_ZTVSt14overflow_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt14overflow_error)
+16 (int (*)(...))std::overflow_error::~overflow_error
+24 (int (*)(...))std::overflow_error::~overflow_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::overflow_error
+ size=16 align=8
+ base size=16 base align=8
+std::overflow_error (0x0x7f543d1afa28) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+ std::runtime_error (0x0x7f543d1afa90) 0
+ primary-for std::overflow_error (0x0x7f543d1afa28)
+ std::exception (0x0x7f543d1b7480) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f543d1afa90)
+
+Vtable for std::underflow_error
+std::underflow_error::_ZTVSt15underflow_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt15underflow_error)
+16 (int (*)(...))std::underflow_error::~underflow_error
+24 (int (*)(...))std::underflow_error::~underflow_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::underflow_error
+ size=16 align=8
+ base size=16 base align=8
+std::underflow_error (0x0x7f543d1afaf8) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+ std::runtime_error (0x0x7f543d1afb60) 0
+ primary-for std::underflow_error (0x0x7f543d1afaf8)
+ std::exception (0x0x7f543d1b74e0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f543d1afb60)
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7f543d21c7e0) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f543d21c840) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f543d21c9c0) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f543d21ca80) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f543d1afdd0) 0
+ std::__uses_alloc_base (0x0x7f543d21ca20) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f543cfc60c0) 0 empty
+
+Vtable for std::bad_function_call
+std::bad_function_call::_ZTVSt17bad_function_call: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt17bad_function_call)
+16 (int (*)(...))std::bad_function_call::~bad_function_call
+24 (int (*)(...))std::bad_function_call::~bad_function_call
+32 (int (*)(...))std::bad_function_call::what
+
+Class std::bad_function_call
+ size=8 align=8
+ base size=8 base align=8
+std::bad_function_call (0x0x7f543d060208) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+ std::exception (0x0x7f543d059780) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f543d060208)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f543d059840) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f543d0598a0) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f543d059ba0) 0
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7f543cd33a20) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7f543cd33ae0) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7f543cd5d000) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7f543cd5de40) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7f543cd5df00) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7f543cd5df60) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7f543cd89360) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7f543cd89480) 0
+
+Class std::__detail::_Equality_base
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Equality_base (0x0x7f543cb6a540) 0 empty
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7f543cb6ade0) 0 empty
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7f543cbaa7e0) 0 empty
+
+Vtable for std::bad_optional_access
+std::bad_optional_access::_ZTVSt19bad_optional_access: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt19bad_optional_access)
+16 (int (*)(...))std::bad_optional_access::~bad_optional_access
+24 (int (*)(...))std::bad_optional_access::~bad_optional_access
+32 (int (*)(...))std::bad_optional_access::what
+
+Class std::bad_optional_access
+ size=8 align=8
+ base size=8 base align=8
+std::bad_optional_access (0x0x7f543cb8f138) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+ std::exception (0x0x7f543cbaaa20) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7f543cb8f138)
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f543c2803c0) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f543c551c30) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f543c280b40) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f543c551d00) 0
+ std::_Bit_iterator_base (0x0x7f543c551d68) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f543c2b0120) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f543c551e38) 0
+ std::_Bit_iterator_base (0x0x7f543c551ea0) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f543c2b0900) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7f543c091de0) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7f543c091f60) 0 empty
+
+Class __pstl::execution::v1::parallel_unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_unsequenced_policy (0x0x7f543c0c1120) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7f543c0c12a0) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7f543c1bed80) 0 empty
+
+Class std::__detail::__variant::__variant_idx_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_idx_cookie (0x0x7f543c1bede0) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7f543be8f8a0) 0 empty
+
+Vtable for std::bad_variant_access
+std::bad_variant_access::_ZTVSt18bad_variant_access: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt18bad_variant_access)
+16 (int (*)(...))std::bad_variant_access::~bad_variant_access
+24 (int (*)(...))std::bad_variant_access::~bad_variant_access
+32 (int (*)(...))std::bad_variant_access::what
+
+Class std::bad_variant_access
+ size=16 align=8
+ base size=16 base align=8
+std::bad_variant_access (0x0x7f543c26f270) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+ std::exception (0x0x7f543becbde0) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7f543c26f270)
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f543bf7f7e0) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f543bf7f840) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f543bf7fae0) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f543bfc4300) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f543bffc420) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f543bc94240) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f543c02f4e0) 0
+ std::__atomic_flag_base (0x0x7f543bc942a0) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f543bc0f7b8) 0
+ QAtomicInteger<int> (0x0x7f543bc0f820) 0
+ QBasicAtomicInteger<int> (0x0x7f543bc1a180) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f543b482480) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7f543b4824e0) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f543b53e7e0) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7f543b53ef00) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f543b53ef60) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f543b4cdc30) 0
+ QGenericArgument (0x0x7f543b57c240) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7f543b57c720) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7f543b57c780) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7f543b57c6c0) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f543b5c5120) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f543b5f0b40) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f543b61b540) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f543b2f9060) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7f543b2f93c0) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f543b384d80) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f543b384ea0) 0
+
+Vtable for std::locale::facet
+std::locale::facet::_ZTVNSt6locale5facetE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6locale5facetE)
+16 (int (*)(...))std::locale::facet::~facet
+24 (int (*)(...))std::locale::facet::~facet
+
+Class std::locale::facet
+ size=16 align=8
+ base size=12 base align=8
+std::locale::facet (0x0x7f543b3c22a0) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f543b3c2540) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f543b3c2720) 0
+
+Vtable for std::_V2::error_category
+std::_V2::error_category::_ZTVNSt3_V214error_categoryE: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt3_V214error_categoryE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))std::_V2::error_category::_M_message
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))std::_V2::error_category::default_error_condition
+64 (int (*)(...))std::_V2::error_category::equivalent
+72 (int (*)(...))std::_V2::error_category::equivalent
+
+Class std::_V2::error_category
+ size=8 align=8
+ base size=8 base align=8
+std::_V2::error_category (0x0x7f543b40e840) 0 nearly-empty
+ vptr=((& std::_V2::error_category::_ZTVNSt3_V214error_categoryE) + 16)
+
+Class std::error_code
+ size=16 align=8
+ base size=16 base align=8
+std::error_code (0x0x7f543b40eba0) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f543b44c3c0) 0
+
+Vtable for std::system_error
+std::system_error::_ZTVSt12system_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12system_error)
+16 (int (*)(...))std::system_error::~system_error
+24 (int (*)(...))std::system_error::~system_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::system_error
+ size=32 align=8
+ base size=32 base align=8
+std::system_error (0x0x7f543b46e138) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+ std::runtime_error (0x0x7f543b46e1a0) 0
+ primary-for std::system_error (0x0x7f543b46e138)
+ std::exception (0x0x7f543b44cf60) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f543b46e1a0)
+
+Vtable for std::ios_base::failure
+std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt8ios_base7failureB5cxx11E)
+16 (int (*)(...))std::ios_base::failure::~failure
+24 (int (*)(...))std::ios_base::failure::~failure
+32 (int (*)(...))std::ios_base::failure::what
+
+Class std::ios_base::failure
+ size=32 align=8
+ base size=32 base align=8
+std::ios_base::failure (0x0x7f543b46e4e0) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+ std::system_error (0x0x7f543b46e548) 0
+ primary-for std::ios_base::failure (0x0x7f543b46e4e0)
+ std::runtime_error (0x0x7f543b46e5b0) 0
+ primary-for std::system_error (0x0x7f543b46e548)
+ std::exception (0x0x7f543b0b1720) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f543b46e5b0)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f543b0b1780) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f543b0b17e0) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f543b0b1840) 0 empty
+
+Vtable for std::ios_base
+std::ios_base::_ZTVSt8ios_base: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt8ios_base)
+16 (int (*)(...))std::ios_base::~ios_base
+24 (int (*)(...))std::ios_base::~ios_base
+
+Class std::ios_base
+ size=216 align=8
+ base size=216 base align=8
+std::ios_base (0x0x7f543b0b16c0) 0
+ vptr=((& std::ios_base::_ZTVSt8ios_base) + 16)
+
+Class std::ctype_base
+ size=1 align=1
+ base size=0 base align=1
+std::ctype_base (0x0x7f543b16b480) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7f543b227780) 0 empty
+
+VTT for std::basic_ostream<char>
+std::basic_ostream<char>::_ZTTSo: 2 entries
+0 ((& std::basic_ostream<char>::_ZTVSo) + 24)
+8 ((& std::basic_ostream<char>::_ZTVSo) + 64)
+
+VTT for std::basic_ostream<wchar_t>
+std::basic_ostream<wchar_t>::_ZTTSt13basic_ostreamIwSt11char_traitsIwEE: 2 entries
+0 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 64)
+
+VTT for std::basic_istream<char>
+std::basic_istream<char>::_ZTTSi: 2 entries
+0 ((& std::basic_istream<char>::_ZTVSi) + 24)
+8 ((& std::basic_istream<char>::_ZTVSi) + 64)
+
+VTT for std::basic_istream<wchar_t>
+std::basic_istream<wchar_t>::_ZTTSt13basic_istreamIwSt11char_traitsIwEE: 2 entries
+0 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 64)
+
+Construction vtable for std::basic_istream<char> (0x0x7f543adbf138 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd0_Si: 10 entries
+0 24
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISi)
+24 0
+32 0
+40 18446744073709551592
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISi)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<char> (0x0x7f543adbf208 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd16_So: 10 entries
+0 8
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISo)
+24 0
+32 0
+40 18446744073709551608
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISo)
+64 0
+72 0
+
+VTT for std::basic_iostream<char>
+std::basic_iostream<char>::_ZTTSd: 7 entries
+0 ((& std::basic_iostream<char>::_ZTVSd) + 24)
+8 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 24)
+16 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 64)
+24 ((& std::basic_iostream<char>::_ZTCSd16_So) + 24)
+32 ((& std::basic_iostream<char>::_ZTCSd16_So) + 64)
+40 ((& std::basic_iostream<char>::_ZTVSd) + 104)
+48 ((& std::basic_iostream<char>::_ZTVSd) + 64)
+
+Construction vtable for std::basic_istream<wchar_t> (0x0x7f543adbf750 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E: 10 entries
+0 24
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551592
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<wchar_t> (0x0x7f543adbf820 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E: 10 entries
+0 8
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551608
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+VTT for std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTTSt14basic_iostreamIwSt11char_traitsIwEE: 7 entries
+0 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 24)
+16 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 64)
+24 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 24)
+32 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 64)
+40 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 104)
+48 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 64)
+
+Vtable for __gnu_cxx::__concurrence_lock_error
+__gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx24__concurrence_lock_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error
+24 (int (*)(...))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error
+32 (int (*)(...))__gnu_cxx::__concurrence_lock_error::what
+
+Class __gnu_cxx::__concurrence_lock_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_lock_error (0x0x7f543adbfdd0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+ std::exception (0x0x7f543ae15180) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f543adbfdd0)
+
+Vtable for __gnu_cxx::__concurrence_unlock_error
+__gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx26__concurrence_unlock_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error
+24 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error
+32 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::what
+
+Class __gnu_cxx::__concurrence_unlock_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_unlock_error (0x0x7f543adbfe38) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+ std::exception (0x0x7f543ae152a0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f543adbfe38)
+
+Vtable for __gnu_cxx::__concurrence_broadcast_error
+__gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx29__concurrence_broadcast_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::~__concurrence_broadcast_error
+24 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::~__concurrence_broadcast_error
+32 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::what
+
+Class __gnu_cxx::__concurrence_broadcast_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_broadcast_error (0x0x7f543adbfea0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+ std::exception (0x0x7f543ae153c0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f543adbfea0)
+
+Vtable for __gnu_cxx::__concurrence_wait_error
+__gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx24__concurrence_wait_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_wait_error::~__concurrence_wait_error
+24 (int (*)(...))__gnu_cxx::__concurrence_wait_error::~__concurrence_wait_error
+32 (int (*)(...))__gnu_cxx::__concurrence_wait_error::what
+
+Class __gnu_cxx::__concurrence_wait_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_wait_error (0x0x7f543adbff70) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+ std::exception (0x0x7f543ae154e0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f543adbff70)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f543ae15d80) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f543ae420c0) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f543ae423c0) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f543ae42720) 0
+
+Vtable for std::bad_weak_ptr
+std::bad_weak_ptr::_ZTVSt12bad_weak_ptr: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12bad_weak_ptr)
+16 (int (*)(...))std::bad_weak_ptr::~bad_weak_ptr
+24 (int (*)(...))std::bad_weak_ptr::~bad_weak_ptr
+32 (int (*)(...))std::bad_weak_ptr::what
+
+Class std::bad_weak_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::bad_weak_ptr (0x0x7f543adbf3a8) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+ std::exception (0x0x7f543aac3f00) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f543adbf3a8)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f543ab32cc0) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7f543ab5d240) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f543a8a0060) 0
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7f543a9adea0) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7f543a6b28a0) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7f543a4f7f60) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f543a57fa80) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7f543a2bede0) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7f543a2e5240) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7f543a2e52a0) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7f543a362420) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7f543a442a20) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7f543a4429c0) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f543a089a80) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7f543a1e8d80) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7f5439e1a120) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7f5439df6d00) 0
+ QtPrivate::ArgBase (0x0x7f5439e1a180) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7f5439df6dd0) 0
+ QtPrivate::ArgBase (0x0x7f5439e1a3c0) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f5439a8aba0) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f5439a8ac60) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7f543987ce40) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f54398b2f60) 0 empty
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7f5439942c00) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7f5439942e40) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7f54399daf00) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f54398d1270) 0
+ QIODeviceBase (0x0x7f54399daf60) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f5439a1d120) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f54396ac540) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7f54398d1bc8) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f54396ac600) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7f54398d1c98) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f54396ac6c0) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7f54397991e0) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7f54398d1208) 0
+ QMetaContainer (0x0x7f54397993c0) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7f54398d1d68) 0
+ QMetaContainer (0x0x7f5439799780) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f543939fde0) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7f54393d5000) 0
+ std::__detail::_List_node_base (0x0x7f543939fe40) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f543908ef00) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7f54390b32a0) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7f5438f128a0) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f5438f74f00) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7f5438a82d80) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7f5438a82de0) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f54389c74e0) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7f54389c7840) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7f5438a2d8a0) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7f5438a2d9c0) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7f5438698060) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7f5438698000) 0 empty
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7f54386980c0) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7f5438698540) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7f54386985a0) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7f5438698ba0) 0
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7f54386c6300) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7f54386c6600) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7f54386c6720) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7f54386c69c0) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7f54386ff138) 0
+ QPropertyObserverBase (0x0x7f54386c6b40) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7f543872ba20) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7f5438758660) 0
+
+Class QBindingStatus
+ size=16 align=8
+ base size=16 base align=8
+QBindingStatus (0x0x7f5438786900) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7f5438786960) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f543848f540) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f54385422a0) 0 empty
+
+Vtable for QObjectData
+QObjectData::_ZTV11QObjectData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QObjectData)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+
+Class QObjectData
+ size=80 align=8
+ base size=80 base align=8
+QObjectData (0x0x7f543858ec00) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f54386315a0) 0 empty
+
+Vtable for QObject
+QObject::_ZTV7QObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QObject)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QObject::qt_metacall
+40 (int (*)(...))QObject::~QObject
+48 (int (*)(...))QObject::~QObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QObject
+ size=16 align=8
+ base size=16 base align=8
+QObject (0x0x7f5438631540) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f54382e44e0) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f54382e4d80) 0 empty
+
+Vtable for QAbstractAnimation
+QAbstractAnimation::_ZTV18QAbstractAnimation: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractAnimation)
+16 (int (*)(...))QAbstractAnimation::metaObject
+24 (int (*)(...))QAbstractAnimation::qt_metacast
+32 (int (*)(...))QAbstractAnimation::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAbstractAnimation
+ size=16 align=8
+ base size=16 base align=8
+QAbstractAnimation (0x0x7f5438655340) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+ QObject (0x0x7f54382e4d20) 0
+ primary-for QAbstractAnimation (0x0x7f5438655340)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f5438322120) 0 empty
+
+Vtable for QAnimationDriver
+QAnimationDriver::_ZTV16QAnimationDriver: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAnimationDriver)
+16 (int (*)(...))QAnimationDriver::metaObject
+24 (int (*)(...))QAnimationDriver::qt_metacast
+32 (int (*)(...))QAnimationDriver::qt_metacall
+40 (int (*)(...))QAnimationDriver::~QAnimationDriver
+48 (int (*)(...))QAnimationDriver::~QAnimationDriver
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAnimationDriver::advance
+120 (int (*)(...))QAnimationDriver::elapsed
+128 (int (*)(...))QAnimationDriver::start
+136 (int (*)(...))QAnimationDriver::stop
+
+Class QAnimationDriver
+ size=16 align=8
+ base size=16 base align=8
+QAnimationDriver (0x0x7f54386553a8) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+ QObject (0x0x7f54383220c0) 0
+ primary-for QAnimationDriver (0x0x7f54386553a8)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f5438322300) 0 empty
+
+Vtable for QEventLoop
+QEventLoop::_ZTV10QEventLoop: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QEventLoop)
+16 (int (*)(...))QEventLoop::metaObject
+24 (int (*)(...))QEventLoop::qt_metacast
+32 (int (*)(...))QEventLoop::qt_metacall
+40 (int (*)(...))QEventLoop::~QEventLoop
+48 (int (*)(...))QEventLoop::~QEventLoop
+56 (int (*)(...))QEventLoop::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QEventLoop
+ size=16 align=8
+ base size=16 base align=8
+QEventLoop (0x0x7f5438655410) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+ QObject (0x0x7f54383222a0) 0
+ primary-for QEventLoop (0x0x7f5438655410)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f5438322780) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f5438322840) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f54383228a0) 0
+
+Vtable for QAbstractEventDispatcher
+QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractEventDispatcher)
+16 (int (*)(...))QAbstractEventDispatcher::metaObject
+24 (int (*)(...))QAbstractEventDispatcher::qt_metacast
+32 (int (*)(...))QAbstractEventDispatcher::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))QAbstractEventDispatcher::startingUp
+200 (int (*)(...))QAbstractEventDispatcher::closingDown
+
+Class QAbstractEventDispatcher
+ size=16 align=8
+ base size=16 base align=8
+QAbstractEventDispatcher (0x0x7f54386555b0) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+ QObject (0x0x7f54383227e0) 0
+ primary-for QAbstractEventDispatcher (0x0x7f54386555b0)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f54383a5060) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7f543824cae0) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7f543824ca80) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7f5437e7d720) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7f54383f97b8) 0
+ QStringConverterBase (0x0x7f5437e7d6c0) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7f54383f9820) 0
+ QStringConverter (0x0x7f54383f9888) 0
+ QStringConverterBase (0x0x7f5437ebf120) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7f54383f98f0) 0
+ QStringConverter (0x0x7f54383f9958) 0
+ QStringConverterBase (0x0x7f5437ebff60) 0 empty
+
+Vtable for QTextStream
+QTextStream::_ZTV11QTextStream: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTextStream)
+16 (int (*)(...))QTextStream::~QTextStream
+24 (int (*)(...))QTextStream::~QTextStream
+
+Class QTextStream
+ size=16 align=8
+ base size=16 base align=8
+QTextStream (0x0x7f54383f99c0) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+ QIODeviceBase (0x0x7f5437ee9c60) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f5437f4b360) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7f5437fdd3c0) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f5438001de0) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f5438001f60) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7f5437cd8180) 0 empty
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7f5437d02180) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f5437cb4478) 0
+ QIODeviceBase (0x0x7f5437d02120) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f5437e250c0) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f5437e25180) 0 empty
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7f5437bd5ba0) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7f5437bd5c00) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7f5437bd5b40) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7f54379a1000) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7f54379a1240) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7f54379a1420) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7f54379db360) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f5437a26360) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f5437a74540) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f54376e4de0) 0 empty
+
+Vtable for QAbstractItemModel
+QAbstractItemModel::_ZTV18QAbstractItemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractItemModel)
+16 (int (*)(...))QAbstractItemModel::metaObject
+24 (int (*)(...))QAbstractItemModel::qt_metacast
+32 (int (*)(...))QAbstractItemModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractItemModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractItemModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractItemModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModel (0x0x7f54376fd548) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+ QObject (0x0x7f54376e4d80) 0
+ primary-for QAbstractItemModel (0x0x7f54376fd548)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f543780dae0) 0 empty
+
+Vtable for QAbstractTableModel
+QAbstractTableModel::_ZTV19QAbstractTableModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractTableModel)
+16 (int (*)(...))QAbstractTableModel::metaObject
+24 (int (*)(...))QAbstractTableModel::qt_metacast
+32 (int (*)(...))QAbstractTableModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractTableModel::index
+120 (int (*)(...))QAbstractTableModel::parent
+128 (int (*)(...))QAbstractTableModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractTableModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractTableModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractTableModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractTableModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTableModel (0x0x7f54376fddd0) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+ QAbstractItemModel (0x0x7f54376fde38) 0
+ primary-for QAbstractTableModel (0x0x7f54376fddd0)
+ QObject (0x0x7f543780da80) 0
+ primary-for QAbstractItemModel (0x0x7f54376fde38)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f543780dc00) 0 empty
+
+Vtable for QAbstractListModel
+QAbstractListModel::_ZTV18QAbstractListModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractListModel)
+16 (int (*)(...))QAbstractListModel::metaObject
+24 (int (*)(...))QAbstractListModel::qt_metacast
+32 (int (*)(...))QAbstractListModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QAbstractListModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractListModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractListModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractListModel (0x0x7f54376fdea0) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+ QAbstractItemModel (0x0x7f54376fdf08) 0
+ primary-for QAbstractListModel (0x0x7f54376fdea0)
+ QObject (0x0x7f543780dba0) 0
+ primary-for QAbstractItemModel (0x0x7f54376fdf08)
+
+Vtable for QAbstractNativeEventFilter
+QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractNativeEventFilter)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractNativeEventFilter
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNativeEventFilter (0x0x7f543748b060) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f543748b120) 0 empty
+
+Vtable for QAbstractProxyModel
+QAbstractProxyModel::_ZTV19QAbstractProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractProxyModel)
+16 (int (*)(...))QAbstractProxyModel::metaObject
+24 (int (*)(...))QAbstractProxyModel::qt_metacast
+32 (int (*)(...))QAbstractProxyModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractProxyModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QAbstractProxyModel::headerData
+184 (int (*)(...))QAbstractProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QAbstractProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QAbstractProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QAbstractProxyModel::setSourceModel
+416 (int (*)(...))__cxa_pure_virtual
+424 (int (*)(...))__cxa_pure_virtual
+432 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+440 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QAbstractProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractProxyModel (0x0x7f54374812d8) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+ QAbstractItemModel (0x0x7f5437481340) 0
+ primary-for QAbstractProxyModel (0x0x7f54374812d8)
+ QObject (0x0x7f543748b0c0) 0
+ primary-for QAbstractItemModel (0x0x7f5437481340)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f543748b300) 0 empty
+
+Vtable for QAnimationGroup
+QAnimationGroup::_ZTV15QAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAnimationGroup)
+16 (int (*)(...))QAnimationGroup::metaObject
+24 (int (*)(...))QAnimationGroup::qt_metacast
+32 (int (*)(...))QAnimationGroup::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QAnimationGroup (0x0x7f54374813a8) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+ QAbstractAnimation (0x0x7f5437481410) 0
+ primary-for QAnimationGroup (0x0x7f54374813a8)
+ QObject (0x0x7f543748b2a0) 0
+ primary-for QAbstractAnimation (0x0x7f5437481410)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7f5437481548) 0
+ QIterator<QMetaAssociation> (0x0x7f54374815b0) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f543748b720) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7f54374816e8) 0
+ QConstIterator<QMetaAssociation> (0x0x7f5437481750) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f543748bcc0) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7f5437481820) 0
+ QIterable<QMetaAssociation> (0x0x7f54374f81e0) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f54375d4cc0) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7f5437636a20) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7f5437662960) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f54372aa4e0) 0 empty
+
+Vtable for QIODevice
+QIODevice::_ZTV9QIODevice: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QIODevice)
+16 (int (*)(...))QIODevice::metaObject
+24 (int (*)(...))QIODevice::qt_metacast
+32 (int (*)(...))QIODevice::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIODevice::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QIODevice::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))__cxa_pure_virtual
+
+Class QIODevice
+ size=16 align=8
+ base size=16 base align=8
+QIODevice (0x0x7f54372b1070) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+ QObject (0x0x7f54372aa420) 0
+ primary-for QIODevice (0x0x7f54372b1070)
+ QIODeviceBase (0x0x7f54372aa480) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f54372aa840) 0 empty
+
+Vtable for QBuffer
+QBuffer::_ZTV7QBuffer: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QBuffer)
+16 (int (*)(...))QBuffer::metaObject
+24 (int (*)(...))QBuffer::qt_metacast
+32 (int (*)(...))QBuffer::qt_metacall
+40 (int (*)(...))QBuffer::~QBuffer
+48 (int (*)(...))QBuffer::~QBuffer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QBuffer::connectNotify
+104 (int (*)(...))QBuffer::disconnectNotify
+112 (int (*)(...))QIODevice::isSequential
+120 (int (*)(...))QBuffer::open
+128 (int (*)(...))QBuffer::close
+136 (int (*)(...))QBuffer::pos
+144 (int (*)(...))QBuffer::size
+152 (int (*)(...))QBuffer::seek
+160 (int (*)(...))QBuffer::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QBuffer::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QBuffer::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QBuffer::writeData
+
+Class QBuffer
+ size=16 align=8
+ base size=16 base align=8
+QBuffer (0x0x7f54372a8750) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+ QIODevice (0x0x7f54372b10e0) 0
+ primary-for QBuffer (0x0x7f54372a8750)
+ QObject (0x0x7f54372aa780) 0
+ primary-for QIODevice (0x0x7f54372b10e0)
+ QIODeviceBase (0x0x7f54372aa7e0) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f54372aaa80) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7f54372aaa20) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f54372aac00) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f54372aaba0) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f5437350360) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7f5437081120) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7f54370810c0) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f5437081480) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f54370efa80) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f5437139cc0) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f5437139d20) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f5437139c60) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7f54371bff60) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f54371e57e0) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f5436e889c0) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7f5436f101e0) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f5436f10240) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7f5436f10420) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f5436f9b120) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f5437065c60) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7f5436cddde0) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7f5436cddea0) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7f5436e16780) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7f5436e4ccc0) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7f5436e4cd20) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7f5436e4cc60) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7f5436b5d300) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7f5436b5d360) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7f5436b5d2a0) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7f543696e3c0) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7f543696e360) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7f5436a35ba0) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7f5436694540) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f5436694f60) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f54366c7180) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f543676cba0) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7f54367f3480) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7f54367f34e0) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7f54367f3540) 0 empty
+
+Vtable for QEvent
+QEvent::_ZTV6QEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QEvent)
+16 (int (*)(...))QEvent::~QEvent
+24 (int (*)(...))QEvent::~QEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QEvent
+ size=16 align=8
+ base size=16 base align=8
+QEvent (0x0x7f54367f3420) 0
+ vptr=((& QEvent::_ZTV6QEvent) + 16)
+
+Vtable for QTimerEvent
+QTimerEvent::_ZTV11QTimerEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTimerEvent)
+16 (int (*)(...))QTimerEvent::~QTimerEvent
+24 (int (*)(...))QTimerEvent::~QTimerEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QTimerEvent::clone
+
+Class QTimerEvent
+ size=24 align=8
+ base size=20 base align=8
+QTimerEvent (0x0x7f54367eb548) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+ QEvent (0x0x7f54367f3ea0) 0
+ primary-for QTimerEvent (0x0x7f54367eb548)
+
+Vtable for QChildEvent
+QChildEvent::_ZTV11QChildEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QChildEvent)
+16 (int (*)(...))QChildEvent::~QChildEvent
+24 (int (*)(...))QChildEvent::~QChildEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QChildEvent::clone
+
+Class QChildEvent
+ size=24 align=8
+ base size=24 base align=8
+QChildEvent (0x0x7f54367eb5b0) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+ QEvent (0x0x7f54368573c0) 0
+ primary-for QChildEvent (0x0x7f54367eb5b0)
+
+Vtable for QDynamicPropertyChangeEvent
+QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDynamicPropertyChangeEvent)
+16 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+24 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDynamicPropertyChangeEvent::clone
+
+Class QDynamicPropertyChangeEvent
+ size=40 align=8
+ base size=40 base align=8
+QDynamicPropertyChangeEvent (0x0x7f54367eb618) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+ QEvent (0x0x7f54368577e0) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f54367eb618)
+
+Vtable for QDeferredDeleteEvent
+QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDeferredDeleteEvent)
+16 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+24 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDeferredDeleteEvent::clone
+
+Class QDeferredDeleteEvent
+ size=24 align=8
+ base size=20 base align=8
+QDeferredDeleteEvent (0x0x7f54367eb680) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+ QEvent (0x0x7f5436857a80) 0
+ primary-for QDeferredDeleteEvent (0x0x7f54367eb680)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f5436857de0) 0 empty
+
+Vtable for QCoreApplication
+QCoreApplication::_ZTV16QCoreApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QCoreApplication)
+16 (int (*)(...))QCoreApplication::metaObject
+24 (int (*)(...))QCoreApplication::qt_metacast
+32 (int (*)(...))QCoreApplication::qt_metacall
+40 (int (*)(...))QCoreApplication::~QCoreApplication
+48 (int (*)(...))QCoreApplication::~QCoreApplication
+56 (int (*)(...))QCoreApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCoreApplication::notify
+120 (int (*)(...))QCoreApplication::compressEvent
+
+Class QCoreApplication
+ size=16 align=8
+ base size=16 base align=8
+QCoreApplication (0x0x7f54367eb6e8) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+ QObject (0x0x7f5436857d80) 0
+ primary-for QCoreApplication (0x0x7f54367eb6e8)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f543649b000) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7f543649b120) 0 empty
+
+Vtable for QConcatenateTablesProxyModel
+QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QConcatenateTablesProxyModel)
+16 (int (*)(...))QConcatenateTablesProxyModel::metaObject
+24 (int (*)(...))QConcatenateTablesProxyModel::qt_metacast
+32 (int (*)(...))QConcatenateTablesProxyModel::qt_metacall
+40 (int (*)(...))QConcatenateTablesProxyModel::~QConcatenateTablesProxyModel
+48 (int (*)(...))QConcatenateTablesProxyModel::~QConcatenateTablesProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QConcatenateTablesProxyModel::index
+120 (int (*)(...))QConcatenateTablesProxyModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QConcatenateTablesProxyModel::rowCount
+144 (int (*)(...))QConcatenateTablesProxyModel::columnCount
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))QConcatenateTablesProxyModel::data
+168 (int (*)(...))QConcatenateTablesProxyModel::setData
+176 (int (*)(...))QConcatenateTablesProxyModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QConcatenateTablesProxyModel::itemData
+200 (int (*)(...))QConcatenateTablesProxyModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QConcatenateTablesProxyModel::mimeTypes
+224 (int (*)(...))QConcatenateTablesProxyModel::mimeData
+232 (int (*)(...))QConcatenateTablesProxyModel::canDropMimeData
+240 (int (*)(...))QConcatenateTablesProxyModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QConcatenateTablesProxyModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QConcatenateTablesProxyModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QConcatenateTablesProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QConcatenateTablesProxyModel (0x0x7f54367eb750) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+ QAbstractItemModel (0x0x7f54367eb7b8) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7f54367eb750)
+ QObject (0x0x7f543649b0c0) 0
+ primary-for QAbstractItemModel (0x0x7f54367eb7b8)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f543649b2a0) 0
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f543649b3c0) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f543649b6c0) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f54365b47e0) 0 empty
+
+Vtable for QFileDevice
+QFileDevice::_ZTV11QFileDevice: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFileDevice)
+16 (int (*)(...))QFileDevice::metaObject
+24 (int (*)(...))QFileDevice::qt_metacast
+32 (int (*)(...))QFileDevice::qt_metacall
+40 (int (*)(...))QFileDevice::~QFileDevice
+48 (int (*)(...))QFileDevice::~QFileDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFileDevice::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QFileDevice::fileName
+256 (int (*)(...))QFileDevice::resize
+264 (int (*)(...))QFileDevice::permissions
+272 (int (*)(...))QFileDevice::setPermissions
+
+Class QFileDevice
+ size=16 align=8
+ base size=16 base align=8
+QFileDevice (0x0x7f54365b39c0) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+ QIODevice (0x0x7f5436559620) 0
+ primary-for QFileDevice (0x0x7f54365b39c0)
+ QObject (0x0x7f54365b4720) 0
+ primary-for QIODevice (0x0x7f5436559620)
+ QIODeviceBase (0x0x7f54365b4780) 0 empty
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f5436627360) 0 empty
+
+Vtable for QFile
+QFile::_ZTV5QFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QFile)
+16 (int (*)(...))QFile::metaObject
+24 (int (*)(...))QFile::qt_metacast
+32 (int (*)(...))QFile::qt_metacall
+40 (int (*)(...))QFile::~QFile
+48 (int (*)(...))QFile::~QFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QFile::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFile::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QFile::fileName
+256 (int (*)(...))QFile::resize
+264 (int (*)(...))QFile::permissions
+272 (int (*)(...))QFile::setPermissions
+
+Class QFile
+ size=16 align=8
+ base size=16 base align=8
+QFile (0x0x7f54365b3dd0) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+ QFileDevice (0x0x7f54365b3e38) 0
+ primary-for QFile (0x0x7f54365b3dd0)
+ QIODevice (0x0x7f54365cb5b0) 0
+ primary-for QFileDevice (0x0x7f54365b3e38)
+ QObject (0x0x7f54366272a0) 0
+ primary-for QIODevice (0x0x7f54365cb5b0)
+ QIODeviceBase (0x0x7f5436627300) 0 empty
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f5436627600) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f54362f2060) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f54363a7300) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f54363a76c0) 0
+
+Vtable for QException
+QException::_ZTV10QException: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QException)
+16 (int (*)(...))QException::~QException
+24 (int (*)(...))QException::~QException
+32 (int (*)(...))std::exception::what
+40 (int (*)(...))QException::raise
+48 (int (*)(...))QException::clone
+
+Class QException
+ size=8 align=8
+ base size=8 base align=8
+QException (0x0x7f543647aa28) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+ std::exception (0x0x7f543609ede0) 0 nearly-empty
+ primary-for QException (0x0x7f543647aa28)
+
+Vtable for QUnhandledException
+QUnhandledException::_ZTV19QUnhandledException: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QUnhandledException)
+16 (int (*)(...))QUnhandledException::~QUnhandledException
+24 (int (*)(...))QUnhandledException::~QUnhandledException
+32 (int (*)(...))std::exception::what
+40 (int (*)(...))QUnhandledException::raise
+48 (int (*)(...))QUnhandledException::clone
+
+Class QUnhandledException
+ size=16 align=8
+ base size=16 base align=8
+QUnhandledException (0x0x7f543647aa90) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+ QException (0x0x7f543647aaf8) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f543647aa90)
+ std::exception (0x0x7f543609ee40) 0 nearly-empty
+ primary-for QException (0x0x7f543647aaf8)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f54360e8cc0) 0
+
+Vtable for QFactoryInterface
+QFactoryInterface::_ZTV17QFactoryInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFactoryInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QFactoryInterface
+ size=8 align=8
+ base size=8 base align=8
+QFactoryInterface (0x0x7f54360e8d20) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f54360e8f60) 0 empty
+
+Vtable for QFileSelector
+QFileSelector::_ZTV13QFileSelector: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QFileSelector)
+16 (int (*)(...))QFileSelector::metaObject
+24 (int (*)(...))QFileSelector::qt_metacast
+32 (int (*)(...))QFileSelector::qt_metacall
+40 (int (*)(...))QFileSelector::~QFileSelector
+48 (int (*)(...))QFileSelector::~QFileSelector
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSelector
+ size=16 align=8
+ base size=16 base align=8
+QFileSelector (0x0x7f54360f8d00) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+ QObject (0x0x7f54360e8f00) 0
+ primary-for QFileSelector (0x0x7f54360f8d00)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f5436116180) 0 empty
+
+Vtable for QFileSystemWatcher
+QFileSystemWatcher::_ZTV18QFileSystemWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFileSystemWatcher)
+16 (int (*)(...))QFileSystemWatcher::metaObject
+24 (int (*)(...))QFileSystemWatcher::qt_metacast
+32 (int (*)(...))QFileSystemWatcher::qt_metacall
+40 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+48 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSystemWatcher
+ size=16 align=8
+ base size=16 base align=8
+QFileSystemWatcher (0x0x7f54360f8d68) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+ QObject (0x0x7f5436116120) 0
+ primary-for QFileSystemWatcher (0x0x7f54360f8d68)
+
+Vtable for QRunnable
+QRunnable::_ZTV9QRunnable: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QRunnable)
+16 (int (*)(...))__cxa_pure_virtual
+24 0
+32 0
+
+Class QRunnable
+ size=16 align=8
+ base size=9 base align=8
+QRunnable (0x0x7f5436116300) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f54361164e0) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f54360f8e38) 0
+ QBasicMutex (0x0x7f5436187240) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7f5436187660) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f5436187c60) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f54361f52a0) 0
+
+Vtable for QtPrivate::ResultStoreBase
+QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9QtPrivate15ResultStoreBaseE)
+16 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+24 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+
+Class QtPrivate::ResultStoreBase
+ size=48 align=8
+ base size=44 base align=8
+QtPrivate::ResultStoreBase (0x0x7f54361f5f00) 0
+ vptr=((& QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE) + 16)
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f5435f5b960) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f5435f6b0d0) 0
+ std::__mutex_base (0x0x7f5435f5b9c0) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f5435f5bba0) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f5435f5bc00) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f5435f5bc60) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f5435f95660) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f5435f6b138) 0
+ std::__recursive_mutex_base (0x0x7f5435f956c0) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f5436414e00) 0
+ std::__mutex_base (0x0x7f5435f95a80) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7f5435f95ae0) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f5436414e70) 0
+ std::__recursive_mutex_base (0x0x7f5435f95ea0) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f5435f95f00) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f5435fced20) 0
+
+Vtable for QFutureInterfaceBase
+QFutureInterfaceBase::_ZTV20QFutureInterfaceBase: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QFutureInterfaceBase)
+16 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+24 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+
+Class QFutureInterfaceBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureInterfaceBase (0x0x7f5435fcef60) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Vtable for std::thread::_State
+std::thread::_State::_ZTVNSt6thread6_StateE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6thread6_StateE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class std::thread::_State
+ size=8 align=8
+ base size=8 base align=8
+std::thread::_State (0x0x7f5436013ea0) 0 nearly-empty
+ vptr=((& std::thread::_State::_ZTVNSt6thread6_StateE) + 16)
+
+Class std::thread::id
+ size=8 align=8
+ base size=8 base align=8
+std::thread::id (0x0x7f5436013f00) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f5436013e40) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f5435e33180) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f5435e33540) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f5435e335a0) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f5435aeab40) 0 empty
+
+Vtable for std::future_error
+std::future_error::_ZTVSt12future_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12future_error)
+16 (int (*)(...))std::future_error::~future_error
+24 (int (*)(...))std::future_error::~future_error
+32 (int (*)(...))std::future_error::what
+
+Class std::future_error
+ size=32 align=8
+ base size=32 base align=8
+std::future_error (0x0x7f5435ade340) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+ std::logic_error (0x0x7f5435ade3a8) 0
+ primary-for std::future_error (0x0x7f5435ade340)
+ std::exception (0x0x7f5435b1d240) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f5435ade3a8)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f5435b1d960) 0 empty
+
+Vtable for std::__future_base::_Result_base
+std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base12_Result_baseE)
+16 (int (*)(...))__cxa_pure_virtual
+24 0
+32 0
+
+Class std::__future_base::_Result_base
+ size=16 align=8
+ base size=16 base align=8
+std::__future_base::_Result_base (0x0x7f5435b1d900) 0
+ vptr=((& std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE) + 16)
+
+Class std::__future_base::_State_baseV2::__exception_ptr_tag
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_State_baseV2::__exception_ptr_tag (0x0x7f543588d3c0) 0 empty
+
+Class std::__future_base::_State_baseV2::_Make_ready
+ size=32 align=8
+ base size=32 base align=8
+std::__future_base::_State_baseV2::_Make_ready (0x0x7f5435c67bc8) 0
+ std::__at_thread_exit_elt (0x0x7f543588d480) 0
+
+Vtable for std::__future_base::_State_baseV2
+std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base13_State_baseV2E)
+16 (int (*)(...))std::__future_base::_State_baseV2::~_State_baseV2
+24 (int (*)(...))std::__future_base::_State_baseV2::~_State_baseV2
+32 (int (*)(...))std::__future_base::_State_baseV2::_M_complete_async
+40 (int (*)(...))std::__future_base::_State_baseV2::_M_is_deferred_future
+
+Class std::__future_base::_State_baseV2
+ size=32 align=8
+ base size=28 base align=8
+std::__future_base::_State_baseV2 (0x0x7f5435b1dae0) 0
+ vptr=((& std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E) + 16)
+
+Class std::__future_base
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base (0x0x7f5435b1d8a0) 0 empty
+
+Vtable for std::__future_base::_Async_state_commonV2
+std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base21_Async_state_commonV2E)
+16 (int (*)(...))std::__future_base::_Async_state_commonV2::~_Async_state_commonV2
+24 (int (*)(...))std::__future_base::_Async_state_commonV2::~_Async_state_commonV2
+32 (int (*)(...))std::__future_base::_Async_state_commonV2::_M_complete_async
+40 (int (*)(...))std::__future_base::_State_baseV2::_M_is_deferred_future
+
+Class std::__future_base::_Async_state_commonV2
+ size=48 align=8
+ base size=44 base align=8
+std::__future_base::_Async_state_commonV2 (0x0x7f543551af70) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+ std::__future_base::_State_baseV2 (0x0x7f5435590180) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f543551af70)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f5435590a20) 0 empty
+
+Vtable for QThread
+QThread::_ZTV7QThread: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QThread)
+16 (int (*)(...))QThread::metaObject
+24 (int (*)(...))QThread::qt_metacast
+32 (int (*)(...))QThread::qt_metacall
+40 (int (*)(...))QThread::~QThread
+48 (int (*)(...))QThread::~QThread
+56 (int (*)(...))QThread::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QThread::run
+
+Class QThread
+ size=16 align=8
+ base size=16 base align=8
+QThread (0x0x7f543559c270) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+ QObject (0x0x7f54355909c0) 0
+ primary-for QThread (0x0x7f543559c270)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f5435590de0) 0 empty
+
+Vtable for QThreadPool
+QThreadPool::_ZTV11QThreadPool: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QThreadPool)
+16 (int (*)(...))QThreadPool::metaObject
+24 (int (*)(...))QThreadPool::qt_metacast
+32 (int (*)(...))QThreadPool::qt_metacall
+40 (int (*)(...))QThreadPool::~QThreadPool
+48 (int (*)(...))QThreadPool::~QThreadPool
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QThreadPool
+ size=16 align=8
+ base size=16 base align=8
+QThreadPool (0x0x7f543559c2d8) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+ QObject (0x0x7f5435590d80) 0
+ primary-for QThreadPool (0x0x7f543559c2d8)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f5435391540) 0 empty
+
+Vtable for QFutureWatcherBase
+QFutureWatcherBase::_ZTV18QFutureWatcherBase: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFutureWatcherBase)
+16 (int (*)(...))QFutureWatcherBase::metaObject
+24 (int (*)(...))QFutureWatcherBase::qt_metacast
+32 (int (*)(...))QFutureWatcherBase::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QFutureWatcherBase::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QFutureWatcherBase::connectNotify
+104 (int (*)(...))QFutureWatcherBase::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QFutureWatcherBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureWatcherBase (0x0x7f54352ebf70) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+ QObject (0x0x7f54353914e0) 0
+ primary-for QFutureWatcherBase (0x0x7f54352ebf70)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f5435391a80) 0 empty
+
+Vtable for QIdentityProxyModel
+QIdentityProxyModel::_ZTV19QIdentityProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QIdentityProxyModel)
+16 (int (*)(...))QIdentityProxyModel::metaObject
+24 (int (*)(...))QIdentityProxyModel::qt_metacast
+32 (int (*)(...))QIdentityProxyModel::qt_metacall
+40 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+48 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIdentityProxyModel::index
+120 (int (*)(...))QIdentityProxyModel::parent
+128 (int (*)(...))QIdentityProxyModel::sibling
+136 (int (*)(...))QIdentityProxyModel::rowCount
+144 (int (*)(...))QIdentityProxyModel::columnCount
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QIdentityProxyModel::headerData
+184 (int (*)(...))QAbstractProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QIdentityProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QIdentityProxyModel::insertRows
+272 (int (*)(...))QIdentityProxyModel::insertColumns
+280 (int (*)(...))QIdentityProxyModel::removeRows
+288 (int (*)(...))QIdentityProxyModel::removeColumns
+296 (int (*)(...))QIdentityProxyModel::moveRows
+304 (int (*)(...))QIdentityProxyModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QAbstractProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QIdentityProxyModel::match
+360 (int (*)(...))QAbstractProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QIdentityProxyModel::setSourceModel
+416 (int (*)(...))QIdentityProxyModel::mapToSource
+424 (int (*)(...))QIdentityProxyModel::mapFromSource
+432 (int (*)(...))QIdentityProxyModel::mapSelectionToSource
+440 (int (*)(...))QIdentityProxyModel::mapSelectionFromSource
+
+Class QIdentityProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QIdentityProxyModel (0x0x7f54353a41a0) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f54353a4208) 0
+ primary-for QIdentityProxyModel (0x0x7f54353a41a0)
+ QAbstractItemModel (0x0x7f54353a4270) 0
+ primary-for QAbstractProxyModel (0x0x7f54353a4208)
+ QObject (0x0x7f5435391a20) 0
+ primary-for QAbstractItemModel (0x0x7f54353a4270)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f5435391c00) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f543541c7e0) 0 empty
+
+Vtable for QItemSelectionModel
+QItemSelectionModel::_ZTV19QItemSelectionModel: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QItemSelectionModel)
+16 (int (*)(...))QItemSelectionModel::metaObject
+24 (int (*)(...))QItemSelectionModel::qt_metacast
+32 (int (*)(...))QItemSelectionModel::qt_metacall
+40 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+48 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QItemSelectionModel::setCurrentIndex
+120 (int (*)(...))QItemSelectionModel::select
+128 (int (*)(...))QItemSelectionModel::select
+136 (int (*)(...))QItemSelectionModel::clear
+144 (int (*)(...))QItemSelectionModel::reset
+152 (int (*)(...))QItemSelectionModel::clearCurrentIndex
+
+Class QItemSelectionModel
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionModel (0x0x7f543542a000) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+ QObject (0x0x7f543541c780) 0
+ primary-for QItemSelectionModel (0x0x7f543542a000)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7f543542a4e0) 0
+ QList<QItemSelectionRange> (0x0x7f543542a548) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7f543542a5b0) 0 empty
+ QListSpecialMethodsBase<QItemSelectionRange> (0x0x7f543508f1e0) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7f54350e9f00) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7f543511f3c0) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7f5435165600) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7f5435165660) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7f54351655a0) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f5435214060) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f54352140c0) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7f5434fa6600) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7f5434fa6660) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7f5434fa65a0) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f543505e180) 0 empty
+
+Vtable for QLibrary
+QLibrary::_ZTV8QLibrary: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QLibrary)
+16 (int (*)(...))QLibrary::metaObject
+24 (int (*)(...))QLibrary::qt_metacast
+32 (int (*)(...))QLibrary::qt_metacall
+40 (int (*)(...))QLibrary::~QLibrary
+48 (int (*)(...))QLibrary::~QLibrary
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QLibrary
+ size=24 align=8
+ base size=24 base align=8
+QLibrary (0x0x7f5435057680) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+ QObject (0x0x7f543505e120) 0
+ primary-for QLibrary (0x0x7f5435057680)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f543505e780) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f543505e720) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7f5434d5af00) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f5434dcb6c0) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f5434dcb780) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f5434e26de0) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f5434a9b4e0) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f5434ae4ae0) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f5434b62300) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f5434b62540) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f5434b624e0) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f5434ba2420) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f5434c09e40) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f5434891720) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7f54348917e0) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7f5434891780) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7f543490da20) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7f543490d9c0) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7f5434953780) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f5434953720) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7f5434953e40) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7f5434953de0) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f543499fc60) 0 empty
+
+Vtable for QMimeData
+QMimeData::_ZTV9QMimeData: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QMimeData)
+16 (int (*)(...))QMimeData::metaObject
+24 (int (*)(...))QMimeData::qt_metacast
+32 (int (*)(...))QMimeData::qt_metacall
+40 (int (*)(...))QMimeData::~QMimeData
+48 (int (*)(...))QMimeData::~QMimeData
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QMimeData::hasFormat
+120 (int (*)(...))QMimeData::formats
+128 (int (*)(...))QMimeData::retrieveData
+
+Class QMimeData
+ size=16 align=8
+ base size=16 base align=8
+QMimeData (0x0x7f54349b10d0) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+ QObject (0x0x7f543499fc00) 0
+ primary-for QMimeData (0x0x7f54349b10d0)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f543499fde0) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f5434a317e0) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f5434a318a0) 0 empty
+
+Vtable for QObjectCleanupHandler
+QObjectCleanupHandler::_ZTV21QObjectCleanupHandler: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QObjectCleanupHandler)
+16 (int (*)(...))QObjectCleanupHandler::metaObject
+24 (int (*)(...))QObjectCleanupHandler::qt_metacast
+32 (int (*)(...))QObjectCleanupHandler::qt_metacall
+40 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+48 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QObjectCleanupHandler
+ size=40 align=8
+ base size=40 base align=8
+QObjectCleanupHandler (0x0x7f5434a22f70) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+ QObject (0x0x7f5434a31840) 0
+ primary-for QObjectCleanupHandler (0x0x7f5434a22f70)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f5434a31960) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f543468e5a0) 0 empty
+
+Vtable for QParallelAnimationGroup
+QParallelAnimationGroup::_ZTV23QParallelAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QParallelAnimationGroup)
+16 (int (*)(...))QParallelAnimationGroup::metaObject
+24 (int (*)(...))QParallelAnimationGroup::qt_metacast
+32 (int (*)(...))QParallelAnimationGroup::qt_metacall
+40 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+48 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+56 (int (*)(...))QParallelAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QParallelAnimationGroup::duration
+120 (int (*)(...))QParallelAnimationGroup::updateCurrentTime
+128 (int (*)(...))QParallelAnimationGroup::updateState
+136 (int (*)(...))QParallelAnimationGroup::updateDirection
+
+Class QParallelAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QParallelAnimationGroup (0x0x7f543468b9c0) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f543468ba28) 0
+ primary-for QParallelAnimationGroup (0x0x7f543468b9c0)
+ QAbstractAnimation (0x0x7f543468ba90) 0
+ primary-for QAnimationGroup (0x0x7f543468ba28)
+ QObject (0x0x7f543468e540) 0
+ primary-for QAbstractAnimation (0x0x7f543468ba90)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f543468e780) 0 empty
+
+Vtable for QPauseAnimation
+QPauseAnimation::_ZTV15QPauseAnimation: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QPauseAnimation)
+16 (int (*)(...))QPauseAnimation::metaObject
+24 (int (*)(...))QPauseAnimation::qt_metacast
+32 (int (*)(...))QPauseAnimation::qt_metacall
+40 (int (*)(...))QPauseAnimation::~QPauseAnimation
+48 (int (*)(...))QPauseAnimation::~QPauseAnimation
+56 (int (*)(...))QPauseAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPauseAnimation::duration
+120 (int (*)(...))QPauseAnimation::updateCurrentTime
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QPauseAnimation
+ size=16 align=8
+ base size=16 base align=8
+QPauseAnimation (0x0x7f543468baf8) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+ QAbstractAnimation (0x0x7f543468bb60) 0
+ primary-for QPauseAnimation (0x0x7f543468baf8)
+ QObject (0x0x7f543468e720) 0
+ primary-for QAbstractAnimation (0x0x7f543468bb60)
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7f54346c52a0) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7f54346c5300) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f54346e1d20) 0 empty
+
+Vtable for QPluginLoader
+QPluginLoader::_ZTV13QPluginLoader: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPluginLoader)
+16 (int (*)(...))QPluginLoader::metaObject
+24 (int (*)(...))QPluginLoader::qt_metacast
+32 (int (*)(...))QPluginLoader::qt_metacall
+40 (int (*)(...))QPluginLoader::~QPluginLoader
+48 (int (*)(...))QPluginLoader::~QPluginLoader
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPluginLoader
+ size=32 align=8
+ base size=25 base align=8
+QPluginLoader (0x0x7f54346f3750) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+ QObject (0x0x7f54346e1cc0) 0
+ primary-for QPluginLoader (0x0x7f54346f3750)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f54346e1de0) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f5434772540) 0 empty
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7f54347725a0) 0 empty
+
+Vtable for QProcess
+QProcess::_ZTV8QProcess: 32 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QProcess)
+16 (int (*)(...))QProcess::metaObject
+24 (int (*)(...))QProcess::qt_metacast
+32 (int (*)(...))QProcess::qt_metacall
+40 (int (*)(...))QProcess::~QProcess
+48 (int (*)(...))QProcess::~QProcess
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QProcess::isSequential
+120 (int (*)(...))QProcess::open
+128 (int (*)(...))QProcess::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QProcess::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QProcess::waitForReadyRead
+208 (int (*)(...))QProcess::waitForBytesWritten
+216 (int (*)(...))QProcess::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QProcess::writeData
+248 (int (*)(...))QProcess::setupChildProcess
+
+Class QProcess
+ size=16 align=8
+ base size=16 base align=8
+QProcess (0x0x7f543476f7b8) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+ QIODevice (0x0x7f543467cee0) 0
+ primary-for QProcess (0x0x7f543476f7b8)
+ QObject (0x0x7f5434772480) 0
+ primary-for QIODevice (0x0x7f543467cee0)
+ QIODeviceBase (0x0x7f54347724e0) 0 empty
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f54347bb360) 0 empty
+
+Vtable for QVariantAnimation
+QVariantAnimation::_ZTV17QVariantAnimation: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QVariantAnimation)
+16 (int (*)(...))QVariantAnimation::metaObject
+24 (int (*)(...))QVariantAnimation::qt_metacast
+32 (int (*)(...))QVariantAnimation::qt_metacall
+40 (int (*)(...))QVariantAnimation::~QVariantAnimation
+48 (int (*)(...))QVariantAnimation::~QVariantAnimation
+56 (int (*)(...))QVariantAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QVariantAnimation::duration
+120 (int (*)(...))QVariantAnimation::updateCurrentTime
+128 (int (*)(...))QVariantAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+144 (int (*)(...))QVariantAnimation::updateCurrentValue
+152 (int (*)(...))QVariantAnimation::interpolated
+
+Class QVariantAnimation
+ size=16 align=8
+ base size=16 base align=8
+QVariantAnimation (0x0x7f543476f820) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+ QAbstractAnimation (0x0x7f543476f888) 0
+ primary-for QVariantAnimation (0x0x7f543476f820)
+ QObject (0x0x7f54347bb300) 0
+ primary-for QAbstractAnimation (0x0x7f543476f888)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f54347bb5a0) 0 empty
+
+Vtable for QPropertyAnimation
+QPropertyAnimation::_ZTV18QPropertyAnimation: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QPropertyAnimation)
+16 (int (*)(...))QPropertyAnimation::metaObject
+24 (int (*)(...))QPropertyAnimation::qt_metacast
+32 (int (*)(...))QPropertyAnimation::qt_metacall
+40 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+48 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+56 (int (*)(...))QPropertyAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QVariantAnimation::duration
+120 (int (*)(...))QVariantAnimation::updateCurrentTime
+128 (int (*)(...))QPropertyAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+144 (int (*)(...))QPropertyAnimation::updateCurrentValue
+152 (int (*)(...))QVariantAnimation::interpolated
+
+Class QPropertyAnimation
+ size=16 align=8
+ base size=16 base align=8
+QPropertyAnimation (0x0x7f543476f958) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+ QVariantAnimation (0x0x7f543476f9c0) 0
+ primary-for QPropertyAnimation (0x0x7f543476f958)
+ QAbstractAnimation (0x0x7f543476fa28) 0
+ primary-for QVariantAnimation (0x0x7f543476f9c0)
+ QObject (0x0x7f54347bb540) 0
+ primary-for QAbstractAnimation (0x0x7f543476fa28)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f5434848cc0) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f5434563180) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f5434563120) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f5434328900) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f543413f840) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f543413f7e0) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f54341a16e8) 0
+ QRandomGenerator (0x0x7f54341b8ae0) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f54341dc720) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f54341dc960) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f54341dce40) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f5434249360) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f5433e9cd80) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f5433f1c5a0) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f5433ff53c0) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f5433c8ef00) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f5433ce7240) 0 empty
+
+Vtable for QSaveFile
+QSaveFile::_ZTV9QSaveFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSaveFile)
+16 (int (*)(...))QSaveFile::metaObject
+24 (int (*)(...))QSaveFile::qt_metacast
+32 (int (*)(...))QSaveFile::qt_metacall
+40 (int (*)(...))QSaveFile::~QSaveFile
+48 (int (*)(...))QSaveFile::~QSaveFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QSaveFile::open
+128 (int (*)(...))QSaveFile::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFileDevice::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QSaveFile::writeData
+248 (int (*)(...))QSaveFile::fileName
+256 (int (*)(...))QFileDevice::resize
+264 (int (*)(...))QFileDevice::permissions
+272 (int (*)(...))QFileDevice::setPermissions
+
+Class QSaveFile
+ size=16 align=8
+ base size=16 base align=8
+QSaveFile (0x0x7f543405a958) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+ QFileDevice (0x0x7f543405a9c0) 0
+ primary-for QSaveFile (0x0x7f543405a958)
+ QIODevice (0x0x7f5433cec000) 0
+ primary-for QFileDevice (0x0x7f543405a9c0)
+ QObject (0x0x7f5433ce7180) 0
+ primary-for QIODevice (0x0x7f5433cec000)
+ QIODeviceBase (0x0x7f5433ce71e0) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f5433ce7840) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f5433d5a060) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f5433da3d20) 0 empty
+
+Vtable for QSequentialAnimationGroup
+QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QSequentialAnimationGroup)
+16 (int (*)(...))QSequentialAnimationGroup::metaObject
+24 (int (*)(...))QSequentialAnimationGroup::qt_metacast
+32 (int (*)(...))QSequentialAnimationGroup::qt_metacall
+40 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+48 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+56 (int (*)(...))QSequentialAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSequentialAnimationGroup::duration
+120 (int (*)(...))QSequentialAnimationGroup::updateCurrentTime
+128 (int (*)(...))QSequentialAnimationGroup::updateState
+136 (int (*)(...))QSequentialAnimationGroup::updateDirection
+
+Class QSequentialAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QSequentialAnimationGroup (0x0x7f5433db8548) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f5433db85b0) 0
+ primary-for QSequentialAnimationGroup (0x0x7f5433db8548)
+ QAbstractAnimation (0x0x7f5433db8618) 0
+ primary-for QAnimationGroup (0x0x7f5433db85b0)
+ QObject (0x0x7f5433da3cc0) 0
+ primary-for QAbstractAnimation (0x0x7f5433db8618)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7f5433db8750) 0
+ QIterator<QMetaSequence> (0x0x7f5433db87b8) 0
+ QBaseIterator<QMetaSequence> (0x0x7f5433de50c0) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7f5433db8888) 0
+ QConstIterator<QMetaSequence> (0x0x7f5433db88f0) 0
+ QBaseIterator<QMetaSequence> (0x0x7f5433de5660) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7f5433db8958) 0
+ QIterable<QMetaSequence> (0x0x7f5433de5ba0) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f5433af2180) 0 empty
+
+Vtable for QSettings
+QSettings::_ZTV9QSettings: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSettings)
+16 (int (*)(...))QSettings::metaObject
+24 (int (*)(...))QSettings::qt_metacast
+32 (int (*)(...))QSettings::qt_metacall
+40 (int (*)(...))QSettings::~QSettings
+48 (int (*)(...))QSettings::~QSettings
+56 (int (*)(...))QSettings::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSettings
+ size=16 align=8
+ base size=16 base align=8
+QSettings (0x0x7f5433adfd68) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+ QObject (0x0x7f5433af2120) 0
+ primary-for QSettings (0x0x7f5433adfd68)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f5433af25a0) 0 empty
+
+Vtable for QSharedMemory
+QSharedMemory::_ZTV13QSharedMemory: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSharedMemory)
+16 (int (*)(...))QSharedMemory::metaObject
+24 (int (*)(...))QSharedMemory::qt_metacast
+32 (int (*)(...))QSharedMemory::qt_metacall
+40 (int (*)(...))QSharedMemory::~QSharedMemory
+48 (int (*)(...))QSharedMemory::~QSharedMemory
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSharedMemory
+ size=16 align=8
+ base size=16 base align=8
+QSharedMemory (0x0x7f5433adfdd0) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+ QObject (0x0x7f5433af2540) 0
+ primary-for QSharedMemory (0x0x7f5433adfdd0)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f5433af2780) 0 empty
+
+Vtable for QSignalMapper
+QSignalMapper::_ZTV13QSignalMapper: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSignalMapper)
+16 (int (*)(...))QSignalMapper::metaObject
+24 (int (*)(...))QSignalMapper::qt_metacast
+32 (int (*)(...))QSignalMapper::qt_metacall
+40 (int (*)(...))QSignalMapper::~QSignalMapper
+48 (int (*)(...))QSignalMapper::~QSignalMapper
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSignalMapper
+ size=16 align=8
+ base size=16 base align=8
+QSignalMapper (0x0x7f5433adfe38) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+ QObject (0x0x7f5433af2720) 0
+ primary-for QSignalMapper (0x0x7f5433adfe38)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f5432ae61e0) 0 empty
+
+Vtable for QSocketNotifier
+QSocketNotifier::_ZTV15QSocketNotifier: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSocketNotifier)
+16 (int (*)(...))QSocketNotifier::metaObject
+24 (int (*)(...))QSocketNotifier::qt_metacast
+32 (int (*)(...))QSocketNotifier::qt_metacall
+40 (int (*)(...))QSocketNotifier::~QSocketNotifier
+48 (int (*)(...))QSocketNotifier::~QSocketNotifier
+56 (int (*)(...))QSocketNotifier::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSocketNotifier
+ size=16 align=8
+ base size=16 base align=8
+QSocketNotifier (0x0x7f5432a14c98) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+ QObject (0x0x7f5432ae6180) 0
+ primary-for QSocketNotifier (0x0x7f5432a14c98)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7f5432ae6360) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f543cac5240) 0 empty
+
+Vtable for QSortFilterProxyModel
+QSortFilterProxyModel::_ZTV21QSortFilterProxyModel: 59 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QSortFilterProxyModel)
+16 (int (*)(...))QSortFilterProxyModel::metaObject
+24 (int (*)(...))QSortFilterProxyModel::qt_metacast
+32 (int (*)(...))QSortFilterProxyModel::qt_metacall
+40 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+48 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSortFilterProxyModel::index
+120 (int (*)(...))QSortFilterProxyModel::parent
+128 (int (*)(...))QSortFilterProxyModel::sibling
+136 (int (*)(...))QSortFilterProxyModel::rowCount
+144 (int (*)(...))QSortFilterProxyModel::columnCount
+152 (int (*)(...))QSortFilterProxyModel::hasChildren
+160 (int (*)(...))QSortFilterProxyModel::data
+168 (int (*)(...))QSortFilterProxyModel::setData
+176 (int (*)(...))QSortFilterProxyModel::headerData
+184 (int (*)(...))QSortFilterProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QSortFilterProxyModel::mimeTypes
+224 (int (*)(...))QSortFilterProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QSortFilterProxyModel::dropMimeData
+248 (int (*)(...))QSortFilterProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QSortFilterProxyModel::insertRows
+272 (int (*)(...))QSortFilterProxyModel::insertColumns
+280 (int (*)(...))QSortFilterProxyModel::removeRows
+288 (int (*)(...))QSortFilterProxyModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QSortFilterProxyModel::fetchMore
+320 (int (*)(...))QSortFilterProxyModel::canFetchMore
+328 (int (*)(...))QSortFilterProxyModel::flags
+336 (int (*)(...))QSortFilterProxyModel::sort
+344 (int (*)(...))QSortFilterProxyModel::buddy
+352 (int (*)(...))QSortFilterProxyModel::match
+360 (int (*)(...))QSortFilterProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QSortFilterProxyModel::setSourceModel
+416 (int (*)(...))QSortFilterProxyModel::mapToSource
+424 (int (*)(...))QSortFilterProxyModel::mapFromSource
+432 (int (*)(...))QSortFilterProxyModel::mapSelectionToSource
+440 (int (*)(...))QSortFilterProxyModel::mapSelectionFromSource
+448 (int (*)(...))QSortFilterProxyModel::filterAcceptsRow
+456 (int (*)(...))QSortFilterProxyModel::filterAcceptsColumn
+464 (int (*)(...))QSortFilterProxyModel::lessThan
+
+Class QSortFilterProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QSortFilterProxyModel (0x0x7f543551a2d8) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f543551a340) 0
+ primary-for QSortFilterProxyModel (0x0x7f543551a2d8)
+ QAbstractItemModel (0x0x7f5436bd5000) 0
+ primary-for QAbstractProxyModel (0x0x7f543551a340)
+ QObject (0x0x7f543cac5180) 0
+ primary-for QAbstractItemModel (0x0x7f5436bd5000)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f543585d420) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f543ca4ae40) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f543c6c1ae0) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f543acda720) 0 empty
+
+Vtable for QStringListModel
+QStringListModel::_ZTV16QStringListModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QStringListModel)
+16 (int (*)(...))QStringListModel::metaObject
+24 (int (*)(...))QStringListModel::qt_metacast
+32 (int (*)(...))QStringListModel::qt_metacall
+40 (int (*)(...))QStringListModel::~QStringListModel
+48 (int (*)(...))QStringListModel::~QStringListModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QStringListModel::sibling
+136 (int (*)(...))QStringListModel::rowCount
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))QStringListModel::data
+168 (int (*)(...))QStringListModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QStringListModel::itemData
+200 (int (*)(...))QStringListModel::setItemData
+208 (int (*)(...))QStringListModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QStringListModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStringListModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QStringListModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QStringListModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStringListModel::flags
+336 (int (*)(...))QStringListModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QStringListModel
+ size=40 align=8
+ base size=40 base align=8
+QStringListModel (0x0x7f543cad7478) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+ QAbstractListModel (0x0x7f543cad7548) 0
+ primary-for QStringListModel (0x0x7f543cad7478)
+ QAbstractItemModel (0x0x7f543cad75b0) 0
+ primary-for QAbstractListModel (0x0x7f543cad7548)
+ QObject (0x0x7f543afd0d20) 0
+ primary-for QAbstractItemModel (0x0x7f543cad75b0)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f543ae151e0) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f543ae15420) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f543aaf4f60) 0 empty
+
+Vtable for QTemporaryFile
+QTemporaryFile::_ZTV14QTemporaryFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QTemporaryFile)
+16 (int (*)(...))QTemporaryFile::metaObject
+24 (int (*)(...))QTemporaryFile::qt_metacast
+32 (int (*)(...))QTemporaryFile::qt_metacall
+40 (int (*)(...))QTemporaryFile::~QTemporaryFile
+48 (int (*)(...))QTemporaryFile::~QTemporaryFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QTemporaryFile::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFile::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QTemporaryFile::fileName
+256 (int (*)(...))QFile::resize
+264 (int (*)(...))QFile::permissions
+272 (int (*)(...))QFile::setPermissions
+
+Class QTemporaryFile
+ size=16 align=8
+ base size=16 base align=8
+QTemporaryFile (0x0x7f543cad7618) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+ QFile (0x0x7f543cad7680) 0
+ primary-for QTemporaryFile (0x0x7f543cad7618)
+ QFileDevice (0x0x7f543cad76e8) 0
+ primary-for QFile (0x0x7f543cad7680)
+ QIODevice (0x0x7f543cfd4ee0) 0
+ primary-for QFileDevice (0x0x7f543cad76e8)
+ QObject (0x0x7f543aaf4840) 0
+ primary-for QIODevice (0x0x7f543cfd4ee0)
+ QIODeviceBase (0x0x7f543aaf4a20) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7f543ab32360) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f543a6963c0) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f543a8504e0) 0 empty
+
+Vtable for QTimeLine
+QTimeLine::_ZTV9QTimeLine: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTimeLine)
+16 (int (*)(...))QTimeLine::metaObject
+24 (int (*)(...))QTimeLine::qt_metacast
+32 (int (*)(...))QTimeLine::qt_metacall
+40 (int (*)(...))QTimeLine::~QTimeLine
+48 (int (*)(...))QTimeLine::~QTimeLine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTimeLine::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTimeLine::valueForTime
+
+Class QTimeLine
+ size=16 align=8
+ base size=16 base align=8
+QTimeLine (0x0x7f543cad78f0) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+ QObject (0x0x7f543a850420) 0
+ primary-for QTimeLine (0x0x7f543cad78f0)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f543a86b360) 0 empty
+
+Vtable for QTimer
+QTimer::_ZTV6QTimer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QTimer)
+16 (int (*)(...))QTimer::metaObject
+24 (int (*)(...))QTimer::qt_metacast
+32 (int (*)(...))QTimer::qt_metacall
+40 (int (*)(...))QTimer::~QTimer
+48 (int (*)(...))QTimer::~QTimer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTimer::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTimer
+ size=16 align=8
+ base size=16 base align=8
+QTimer (0x0x7f543cad7a90) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+ QObject (0x0x7f543a850b40) 0
+ primary-for QTimer (0x0x7f543cad7a90)
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7f543a2be1e0) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f543a2be180) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f5437a261e0) 0 empty
+
+Vtable for QTranslator
+QTranslator::_ZTV11QTranslator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTranslator)
+16 (int (*)(...))QTranslator::metaObject
+24 (int (*)(...))QTranslator::qt_metacast
+32 (int (*)(...))QTranslator::qt_metacall
+40 (int (*)(...))QTranslator::~QTranslator
+48 (int (*)(...))QTranslator::~QTranslator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTranslator::translate
+120 (int (*)(...))QTranslator::isEmpty
+
+Class QTranslator
+ size=16 align=8
+ base size=16 base align=8
+QTranslator (0x0x7f543c93ad68) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+ QObject (0x0x7f5437a07840) 0
+ primary-for QTranslator (0x0x7f543c93ad68)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7f5437a58660) 0 empty
+
+Vtable for QTransposeProxyModel
+QTransposeProxyModel::_ZTV20QTransposeProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTransposeProxyModel)
+16 (int (*)(...))QTransposeProxyModel::metaObject
+24 (int (*)(...))QTransposeProxyModel::qt_metacast
+32 (int (*)(...))QTransposeProxyModel::qt_metacall
+40 (int (*)(...))QTransposeProxyModel::~QTransposeProxyModel
+48 (int (*)(...))QTransposeProxyModel::~QTransposeProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTransposeProxyModel::index
+120 (int (*)(...))QTransposeProxyModel::parent
+128 (int (*)(...))QAbstractProxyModel::sibling
+136 (int (*)(...))QTransposeProxyModel::rowCount
+144 (int (*)(...))QTransposeProxyModel::columnCount
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QTransposeProxyModel::headerData
+184 (int (*)(...))QTransposeProxyModel::setHeaderData
+192 (int (*)(...))QTransposeProxyModel::itemData
+200 (int (*)(...))QTransposeProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QAbstractProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QTransposeProxyModel::insertRows
+272 (int (*)(...))QTransposeProxyModel::insertColumns
+280 (int (*)(...))QTransposeProxyModel::removeRows
+288 (int (*)(...))QTransposeProxyModel::removeColumns
+296 (int (*)(...))QTransposeProxyModel::moveRows
+304 (int (*)(...))QTransposeProxyModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QTransposeProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QTransposeProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QTransposeProxyModel::setSourceModel
+416 (int (*)(...))QTransposeProxyModel::mapToSource
+424 (int (*)(...))QTransposeProxyModel::mapFromSource
+432 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+440 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QTransposeProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QTransposeProxyModel (0x0x7f543c93add0) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f543c93ae38) 0
+ primary-for QTransposeProxyModel (0x0x7f543c93add0)
+ QAbstractItemModel (0x0x7f543c93aea0) 0
+ primary-for QAbstractProxyModel (0x0x7f543c93ae38)
+ QObject (0x0x7f5437a58240) 0
+ primary-for QAbstractItemModel (0x0x7f543c93aea0)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f5437a743c0) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f5436df5a80) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7f5436e165a0) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7f543656b240) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7f543c6d3138) 0
+ QList<QXmlStreamAttribute> (0x0x7f543c6d3208) 0
+ QListSpecialMethods<QXmlStreamAttribute> (0x0x7f543c6d3270) 0 empty
+ QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7f54358ffe40) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f54357a1e40) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7f54351cdcc0) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7f5434e075a0) 0
+
+Vtable for QXmlStreamEntityResolver
+QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QXmlStreamEntityResolver)
+16 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+24 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+32 (int (*)(...))QXmlStreamEntityResolver::resolveEntity
+40 (int (*)(...))QXmlStreamEntityResolver::resolveUndeclaredEntity
+
+Class QXmlStreamEntityResolver
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamEntityResolver (0x0x7f5434981600) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f5434981660) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f5434a12480) 0
+
+Vtable for QPaintDevice
+QPaintDevice::_ZTV12QPaintDevice: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDevice
+ size=16 align=8
+ base size=10 base align=8
+QPaintDevice (0x0x7f5434a31600) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7f5433e7d960) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7f5436e68d80) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7f5436e68d20) 0
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7f543d1bfde0) 0
+
+Class QPolygon
+ size=24 align=8
+ base size=24 base align=8
+QPolygon (0x0x7f543c7bf340) 0
+ QList<QPoint> (0x0x7f543c7bf3a8) 0
+ QListSpecialMethods<QPoint> (0x0x7f543c7bf2d8) 0 empty
+ QListSpecialMethodsBase<QPoint> (0x0x7f543bd2eae0) 0 empty
+
+Class QPolygonF
+ size=24 align=8
+ base size=24 base align=8
+QPolygonF (0x0x7f543c7c26e8) 0
+ QList<QPointF> (0x0x7f543c7c2750) 0
+ QListSpecialMethods<QPointF> (0x0x7f543c7c2680) 0 empty
+ QListSpecialMethodsBase<QPointF> (0x0x7f543a9ee720) 0 empty
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7f543a217f00) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7f543a217ea0) 0
+
+Class QTransform::Affine
+ size=8 align=8
+ base size=8 base align=8
+QTransform::Affine (0x0x7f5439a0a420) 0
+
+Class QTransform
+ size=80 align=8
+ base size=74 base align=8
+QTransform (0x0x7f5439a0a3c0) 0
+
+Vtable for QImage
+QImage::_ZTV6QImage: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QImage)
+16 (int (*)(...))QImage::~QImage
+24 (int (*)(...))QImage::~QImage
+32 (int (*)(...))QImage::devType
+40 (int (*)(...))QImage::paintEngine
+48 (int (*)(...))QImage::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QImage
+ size=24 align=8
+ base size=24 base align=8
+QImage (0x0x7f543c7dc750) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+ QPaintDevice (0x0x7f54382a6000) 0
+ primary-for QImage (0x0x7f543c7dc750)
+
+Vtable for QPixmap
+QPixmap::_ZTV7QPixmap: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QPixmap)
+16 (int (*)(...))QPixmap::~QPixmap
+24 (int (*)(...))QPixmap::~QPixmap
+32 (int (*)(...))QPixmap::devType
+40 (int (*)(...))QPixmap::paintEngine
+48 (int (*)(...))QPixmap::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPixmap
+ size=24 align=8
+ base size=24 base align=8
+QPixmap (0x0x7f543c4b64e0) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+ QPaintDevice (0x0x7f5437c34780) 0
+ primary-for QPixmap (0x0x7f543c4b64e0)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7f54371692a0) 0
+
+Vtable for QAbstractFileIconProvider
+QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAbstractFileIconProvider)
+16 (int (*)(...))QAbstractFileIconProvider::~QAbstractFileIconProvider
+24 (int (*)(...))QAbstractFileIconProvider::~QAbstractFileIconProvider
+32 (int (*)(...))QAbstractFileIconProvider::icon
+40 (int (*)(...))QAbstractFileIconProvider::icon
+48 (int (*)(...))QAbstractFileIconProvider::type
+56 (int (*)(...))QAbstractFileIconProvider::setOptions
+64 (int (*)(...))QAbstractFileIconProvider::options
+
+Class QAbstractFileIconProvider
+ size=16 align=8
+ base size=16 base align=8
+QAbstractFileIconProvider (0x0x7f5436e4a5a0) 0
+ vptr=((& QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider) + 16)
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7f5436e4aa80) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7f54369947e0) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7f5436186720) 0
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7f5434709f00) 0 empty
+
+Vtable for QScreen
+QScreen::_ZTV7QScreen: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QScreen)
+16 (int (*)(...))QScreen::metaObject
+24 (int (*)(...))QScreen::qt_metacast
+32 (int (*)(...))QScreen::qt_metacall
+40 (int (*)(...))QScreen::~QScreen
+48 (int (*)(...))QScreen::~QScreen
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QScreen
+ size=16 align=8
+ base size=16 base align=8
+QScreen (0x0x7f543c4e7340) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+ QObject (0x0x7f5434709ea0) 0
+ primary-for QScreen (0x0x7f543c4e7340)
+
+Class QInputDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDevice::QPrivateSignal (0x0x7f5433f86120) 0 empty
+
+Vtable for QInputDevice
+QInputDevice::_ZTV12QInputDevice: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputDevice)
+16 (int (*)(...))QInputDevice::metaObject
+24 (int (*)(...))QInputDevice::qt_metacast
+32 (int (*)(...))QInputDevice::qt_metacall
+40 (int (*)(...))QInputDevice::~QInputDevice
+48 (int (*)(...))QInputDevice::~QInputDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QInputDevice
+ size=16 align=8
+ base size=16 base align=8
+QInputDevice (0x0x7f543c4e73a8) 0
+ vptr=((& QInputDevice::_ZTV12QInputDevice) + 16)
+ QObject (0x0x7f5433f860c0) 0
+ primary-for QInputDevice (0x0x7f543c4e73a8)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7f5433f86a20) 0
+
+Class QPointingDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPointingDevice::QPrivateSignal (0x0x7f543c4b73c0) 0 empty
+
+Vtable for QPointingDevice
+QPointingDevice::_ZTV15QPointingDevice: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QPointingDevice)
+16 (int (*)(...))QPointingDevice::metaObject
+24 (int (*)(...))QPointingDevice::qt_metacast
+32 (int (*)(...))QPointingDevice::qt_metacall
+40 (int (*)(...))QPointingDevice::~QPointingDevice
+48 (int (*)(...))QPointingDevice::~QPointingDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPointingDevice
+ size=16 align=8
+ base size=16 base align=8
+QPointingDevice (0x0x7f543c4eb2d8) 0
+ vptr=((& QPointingDevice::_ZTV15QPointingDevice) + 16)
+ QInputDevice (0x0x7f543c4eb340) 0
+ primary-for QPointingDevice (0x0x7f543c4eb2d8)
+ QObject (0x0x7f543c4b7360) 0
+ primary-for QInputDevice (0x0x7f543c4eb340)
+
+Class QEventPoint
+ size=8 align=8
+ base size=8 base align=8
+QEventPoint (0x0x7f543c4b7a20) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7f5439f99840) 0
+
+Vtable for QInputEvent
+QInputEvent::_ZTV11QInputEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QInputEvent)
+16 (int (*)(...))QInputEvent::~QInputEvent
+24 (int (*)(...))QInputEvent::~QInputEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QInputEvent
+ size=40 align=8
+ base size=40 base align=8
+QInputEvent (0x0x7f543c501dd0) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+ QEvent (0x0x7f54378667e0) 0
+ primary-for QInputEvent (0x0x7f543c501dd0)
+
+Vtable for QPointerEvent
+QPointerEvent::_ZTV13QPointerEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPointerEvent)
+16 (int (*)(...))QPointerEvent::~QPointerEvent
+24 (int (*)(...))QPointerEvent::~QPointerEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QPointerEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QPointerEvent::isBeginEvent
+64 (int (*)(...))QPointerEvent::isUpdateEvent
+72 (int (*)(...))QPointerEvent::isEndEvent
+
+Class QPointerEvent
+ size=64 align=8
+ base size=64 base align=8
+QPointerEvent (0x0x7f543c501e38) 0
+ vptr=((& QPointerEvent::_ZTV13QPointerEvent) + 16)
+ QInputEvent (0x0x7f543c501ea0) 0
+ primary-for QPointerEvent (0x0x7f543c501e38)
+ QEvent (0x0x7f5437866cc0) 0
+ primary-for QInputEvent (0x0x7f543c501ea0)
+
+Vtable for QSinglePointEvent
+QSinglePointEvent::_ZTV17QSinglePointEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSinglePointEvent)
+16 (int (*)(...))QSinglePointEvent::~QSinglePointEvent
+24 (int (*)(...))QSinglePointEvent::~QSinglePointEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QSinglePointEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QSinglePointEvent
+ size=80 align=8
+ base size=80 base align=8
+QSinglePointEvent (0x0x7f543c503680) 0
+ vptr=((& QSinglePointEvent::_ZTV17QSinglePointEvent) + 16)
+ QPointerEvent (0x0x7f543c5036e8) 0
+ primary-for QSinglePointEvent (0x0x7f543c503680)
+ QInputEvent (0x0x7f543c503750) 0
+ primary-for QPointerEvent (0x0x7f543c5036e8)
+ QEvent (0x0x7f5436b4ac00) 0
+ primary-for QInputEvent (0x0x7f543c503750)
+
+Vtable for QEnterEvent
+QEnterEvent::_ZTV11QEnterEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QEnterEvent)
+16 (int (*)(...))QEnterEvent::~QEnterEvent
+24 (int (*)(...))QEnterEvent::~QEnterEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QEnterEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QEnterEvent (0x0x7f543c5037b8) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+ QSinglePointEvent (0x0x7f543c503820) 0
+ primary-for QEnterEvent (0x0x7f543c5037b8)
+ QPointerEvent (0x0x7f543c503888) 0
+ primary-for QSinglePointEvent (0x0x7f543c503820)
+ QInputEvent (0x0x7f543c5038f0) 0
+ primary-for QPointerEvent (0x0x7f543c503888)
+ QEvent (0x0x7f5435a290c0) 0
+ primary-for QInputEvent (0x0x7f543c5038f0)
+
+Vtable for QMouseEvent
+QMouseEvent::_ZTV11QMouseEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMouseEvent)
+16 (int (*)(...))QMouseEvent::~QMouseEvent
+24 (int (*)(...))QMouseEvent::~QMouseEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QMouseEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QMouseEvent
+ size=80 align=8
+ base size=80 base align=8
+QMouseEvent (0x0x7f543c503958) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+ QSinglePointEvent (0x0x7f543c5039c0) 0
+ primary-for QMouseEvent (0x0x7f543c503958)
+ QPointerEvent (0x0x7f543c503a28) 0
+ primary-for QSinglePointEvent (0x0x7f543c5039c0)
+ QInputEvent (0x0x7f543c503a90) 0
+ primary-for QPointerEvent (0x0x7f543c503a28)
+ QEvent (0x0x7f5435a29840) 0
+ primary-for QInputEvent (0x0x7f543c503a90)
+
+Vtable for QHoverEvent
+QHoverEvent::_ZTV11QHoverEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHoverEvent)
+16 (int (*)(...))QHoverEvent::~QHoverEvent
+24 (int (*)(...))QHoverEvent::~QHoverEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QHoverEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QHoverEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QHoverEvent
+ size=96 align=8
+ base size=96 base align=8
+QHoverEvent (0x0x7f543c503af8) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+ QSinglePointEvent (0x0x7f543c503b60) 0
+ primary-for QHoverEvent (0x0x7f543c503af8)
+ QPointerEvent (0x0x7f543c503c30) 0
+ primary-for QSinglePointEvent (0x0x7f543c503b60)
+ QInputEvent (0x0x7f543c503c98) 0
+ primary-for QPointerEvent (0x0x7f543c503c30)
+ QEvent (0x0x7f5435a29de0) 0
+ primary-for QInputEvent (0x0x7f543c503c98)
+
+Vtable for QWheelEvent
+QWheelEvent::_ZTV11QWheelEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWheelEvent)
+16 (int (*)(...))QWheelEvent::~QWheelEvent
+24 (int (*)(...))QWheelEvent::~QWheelEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QWheelEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QWheelEvent::isBeginEvent
+64 (int (*)(...))QWheelEvent::isUpdateEvent
+72 (int (*)(...))QWheelEvent::isEndEvent
+
+Class QWheelEvent
+ size=96 align=8
+ base size=96 base align=8
+QWheelEvent (0x0x7f543c503d00) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+ QSinglePointEvent (0x0x7f543c503d68) 0
+ primary-for QWheelEvent (0x0x7f543c503d00)
+ QPointerEvent (0x0x7f543c503dd0) 0
+ primary-for QSinglePointEvent (0x0x7f543c503d68)
+ QInputEvent (0x0x7f543c503e38) 0
+ primary-for QPointerEvent (0x0x7f543c503dd0)
+ QEvent (0x0x7f5434cfb240) 0
+ primary-for QInputEvent (0x0x7f543c503e38)
+
+Vtable for QTabletEvent
+QTabletEvent::_ZTV12QTabletEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTabletEvent)
+16 (int (*)(...))QTabletEvent::~QTabletEvent
+24 (int (*)(...))QTabletEvent::~QTabletEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QTabletEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QTabletEvent
+ size=96 align=8
+ base size=96 base align=8
+QTabletEvent (0x0x7f543c503ea0) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+ QSinglePointEvent (0x0x7f543c503f08) 0
+ primary-for QTabletEvent (0x0x7f543c503ea0)
+ QPointerEvent (0x0x7f543c503f70) 0
+ primary-for QSinglePointEvent (0x0x7f543c503f08)
+ QInputEvent (0x0x7f543c508000) 0
+ primary-for QPointerEvent (0x0x7f543c503f70)
+ QEvent (0x0x7f5434cfb720) 0
+ primary-for QInputEvent (0x0x7f543c508000)
+
+Vtable for QNativeGestureEvent
+QNativeGestureEvent::_ZTV19QNativeGestureEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNativeGestureEvent)
+16 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+24 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QNativeGestureEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QNativeGestureEvent
+ size=112 align=8
+ base size=112 base align=8
+QNativeGestureEvent (0x0x7f543c508068) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+ QSinglePointEvent (0x0x7f543c5080d0) 0
+ primary-for QNativeGestureEvent (0x0x7f543c508068)
+ QPointerEvent (0x0x7f543c508138) 0
+ primary-for QSinglePointEvent (0x0x7f543c5080d0)
+ QInputEvent (0x0x7f543c508208) 0
+ primary-for QPointerEvent (0x0x7f543c508138)
+ QEvent (0x0x7f5434758000) 0
+ primary-for QInputEvent (0x0x7f543c508208)
+
+Vtable for QKeyEvent
+QKeyEvent::_ZTV9QKeyEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QKeyEvent)
+16 (int (*)(...))QKeyEvent::~QKeyEvent
+24 (int (*)(...))QKeyEvent::~QKeyEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QKeyEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QKeyEvent
+ size=88 align=8
+ base size=82 base align=8
+QKeyEvent (0x0x7f543c508270) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+ QInputEvent (0x0x7f543c5082d8) 0
+ primary-for QKeyEvent (0x0x7f543c508270)
+ QEvent (0x0x7f54347584e0) 0
+ primary-for QInputEvent (0x0x7f543c5082d8)
+
+Vtable for QFocusEvent
+QFocusEvent::_ZTV11QFocusEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusEvent)
+16 (int (*)(...))QFocusEvent::~QFocusEvent
+24 (int (*)(...))QFocusEvent::~QFocusEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QFocusEvent::clone
+
+Class QFocusEvent
+ size=24 align=8
+ base size=20 base align=8
+QFocusEvent (0x0x7f543c508340) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+ QEvent (0x0x7f5434758ae0) 0
+ primary-for QFocusEvent (0x0x7f543c508340)
+
+Vtable for QPaintEvent
+QPaintEvent::_ZTV11QPaintEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPaintEvent)
+16 (int (*)(...))QPaintEvent::~QPaintEvent
+24 (int (*)(...))QPaintEvent::~QPaintEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QPaintEvent::clone
+
+Class QPaintEvent
+ size=48 align=8
+ base size=41 base align=8
+QPaintEvent (0x0x7f543c5083a8) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+ QEvent (0x0x7f5434758e40) 0
+ primary-for QPaintEvent (0x0x7f543c5083a8)
+
+Vtable for QMoveEvent
+QMoveEvent::_ZTV10QMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QMoveEvent)
+16 (int (*)(...))QMoveEvent::~QMoveEvent
+24 (int (*)(...))QMoveEvent::~QMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QMoveEvent::clone
+
+Class QMoveEvent
+ size=32 align=8
+ base size=32 base align=8
+QMoveEvent (0x0x7f543c508410) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+ QEvent (0x0x7f543b71d180) 0
+ primary-for QMoveEvent (0x0x7f543c508410)
+
+Vtable for QExposeEvent
+QExposeEvent::_ZTV12QExposeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QExposeEvent)
+16 (int (*)(...))QExposeEvent::~QExposeEvent
+24 (int (*)(...))QExposeEvent::~QExposeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QExposeEvent::clone
+
+Class QExposeEvent
+ size=24 align=8
+ base size=24 base align=8
+QExposeEvent (0x0x7f543c508478) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+ QEvent (0x0x7f543b71d4e0) 0
+ primary-for QExposeEvent (0x0x7f543c508478)
+
+Vtable for QPlatformSurfaceEvent
+QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QPlatformSurfaceEvent)
+16 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+24 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QPlatformSurfaceEvent::clone
+
+Class QPlatformSurfaceEvent
+ size=24 align=8
+ base size=20 base align=8
+QPlatformSurfaceEvent (0x0x7f543c5084e0) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+ QEvent (0x0x7f543b71d780) 0
+ primary-for QPlatformSurfaceEvent (0x0x7f543c5084e0)
+
+Vtable for QResizeEvent
+QResizeEvent::_ZTV12QResizeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QResizeEvent)
+16 (int (*)(...))QResizeEvent::~QResizeEvent
+24 (int (*)(...))QResizeEvent::~QResizeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QResizeEvent::clone
+
+Class QResizeEvent
+ size=32 align=8
+ base size=32 base align=8
+QResizeEvent (0x0x7f543c508548) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+ QEvent (0x0x7f543b71da80) 0
+ primary-for QResizeEvent (0x0x7f543c508548)
+
+Vtable for QCloseEvent
+QCloseEvent::_ZTV11QCloseEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QCloseEvent)
+16 (int (*)(...))QCloseEvent::~QCloseEvent
+24 (int (*)(...))QCloseEvent::~QCloseEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QCloseEvent
+ size=16 align=8
+ base size=16 base align=8
+QCloseEvent (0x0x7f543c5085b0) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+ QEvent (0x0x7f543b71dde0) 0
+ primary-for QCloseEvent (0x0x7f543c5085b0)
+
+Vtable for QIconDragEvent
+QIconDragEvent::_ZTV14QIconDragEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QIconDragEvent)
+16 (int (*)(...))QIconDragEvent::~QIconDragEvent
+24 (int (*)(...))QIconDragEvent::~QIconDragEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QIconDragEvent
+ size=16 align=8
+ base size=16 base align=8
+QIconDragEvent (0x0x7f543c508680) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+ QEvent (0x0x7f543b71de40) 0
+ primary-for QIconDragEvent (0x0x7f543c508680)
+
+Vtable for QShowEvent
+QShowEvent::_ZTV10QShowEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QShowEvent)
+16 (int (*)(...))QShowEvent::~QShowEvent
+24 (int (*)(...))QShowEvent::~QShowEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QShowEvent
+ size=16 align=8
+ base size=16 base align=8
+QShowEvent (0x0x7f543c5086e8) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+ QEvent (0x0x7f543b71dea0) 0
+ primary-for QShowEvent (0x0x7f543c5086e8)
+
+Vtable for QHideEvent
+QHideEvent::_ZTV10QHideEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHideEvent)
+16 (int (*)(...))QHideEvent::~QHideEvent
+24 (int (*)(...))QHideEvent::~QHideEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QHideEvent
+ size=16 align=8
+ base size=16 base align=8
+QHideEvent (0x0x7f543c508750) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+ QEvent (0x0x7f543b71df00) 0
+ primary-for QHideEvent (0x0x7f543c508750)
+
+Vtable for QContextMenuEvent
+QContextMenuEvent::_ZTV17QContextMenuEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QContextMenuEvent)
+16 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+24 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QContextMenuEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QContextMenuEvent
+ size=64 align=8
+ base size=57 base align=8
+QContextMenuEvent (0x0x7f543c5087b8) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+ QInputEvent (0x0x7f543c508820) 0
+ primary-for QContextMenuEvent (0x0x7f543c5087b8)
+ QEvent (0x0x7f543b71df60) 0
+ primary-for QInputEvent (0x0x7f543c508820)
+
+Class QInputMethodEvent::Attribute
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodEvent::Attribute (0x0x7f543629d540) 0
+
+Vtable for QInputMethodEvent
+QInputMethodEvent::_ZTV17QInputMethodEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QInputMethodEvent)
+16 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+24 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputMethodEvent::clone
+
+Class QInputMethodEvent
+ size=96 align=8
+ base size=96 base align=8
+QInputMethodEvent (0x0x7f543c508888) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+ QEvent (0x0x7f543629d4e0) 0
+ primary-for QInputMethodEvent (0x0x7f543c508888)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=40 align=8
+ base size=40 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7f5432c9fd20) 0
+
+Vtable for QInputMethodQueryEvent
+QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QInputMethodQueryEvent)
+16 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+24 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputMethodQueryEvent::clone
+
+Class QInputMethodQueryEvent
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodQueryEvent (0x0x7f543c50baf8) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+ QEvent (0x0x7f5432c9fcc0) 0
+ primary-for QInputMethodQueryEvent (0x0x7f543c50baf8)
+
+Vtable for QDropEvent
+QDropEvent::_ZTV10QDropEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDropEvent)
+16 (int (*)(...))QDropEvent::~QDropEvent
+24 (int (*)(...))QDropEvent::~QDropEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDropEvent::clone
+
+Class QDropEvent
+ size=64 align=8
+ base size=64 base align=8
+QDropEvent (0x0x7f543c513d68) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+ QEvent (0x0x7f5436c8ae40) 0
+ primary-for QDropEvent (0x0x7f543c513d68)
+
+Vtable for QDragMoveEvent
+QDragMoveEvent::_ZTV14QDragMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDragMoveEvent)
+16 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+24 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDragMoveEvent::clone
+
+Class QDragMoveEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragMoveEvent (0x0x7f543c513dd0) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+ QDropEvent (0x0x7f543c513e38) 0
+ primary-for QDragMoveEvent (0x0x7f543c513dd0)
+ QEvent (0x0x7f5432b0d5a0) 0
+ primary-for QDropEvent (0x0x7f543c513e38)
+
+Vtable for QDragEnterEvent
+QDragEnterEvent::_ZTV15QDragEnterEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragEnterEvent)
+16 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+24 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDragMoveEvent::clone
+
+Class QDragEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragEnterEvent (0x0x7f543c513ea0) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+ QDragMoveEvent (0x0x7f543c513f08) 0
+ primary-for QDragEnterEvent (0x0x7f543c513ea0)
+ QDropEvent (0x0x7f543c517000) 0
+ primary-for QDragMoveEvent (0x0x7f543c513f08)
+ QEvent (0x0x7f5432b0da20) 0
+ primary-for QDropEvent (0x0x7f543c517000)
+
+Vtable for QDragLeaveEvent
+QDragLeaveEvent::_ZTV15QDragLeaveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragLeaveEvent)
+16 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+24 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QDragLeaveEvent
+ size=16 align=8
+ base size=16 base align=8
+QDragLeaveEvent (0x0x7f543c517068) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+ QEvent (0x0x7f5432b0da80) 0
+ primary-for QDragLeaveEvent (0x0x7f543c517068)
+
+Vtable for QHelpEvent
+QHelpEvent::_ZTV10QHelpEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHelpEvent)
+16 (int (*)(...))QHelpEvent::~QHelpEvent
+24 (int (*)(...))QHelpEvent::~QHelpEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QHelpEvent::clone
+
+Class QHelpEvent
+ size=32 align=8
+ base size=32 base align=8
+QHelpEvent (0x0x7f543c5170d0) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+ QEvent (0x0x7f5432b0dae0) 0
+ primary-for QHelpEvent (0x0x7f543c5170d0)
+
+Vtable for QStatusTipEvent
+QStatusTipEvent::_ZTV15QStatusTipEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QStatusTipEvent)
+16 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+24 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QStatusTipEvent::clone
+
+Class QStatusTipEvent
+ size=40 align=8
+ base size=40 base align=8
+QStatusTipEvent (0x0x7f543c517138) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+ QEvent (0x0x7f5432b23000) 0
+ primary-for QStatusTipEvent (0x0x7f543c517138)
+
+Vtable for QWhatsThisClickedEvent
+QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QWhatsThisClickedEvent)
+16 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+24 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QWhatsThisClickedEvent::clone
+
+Class QWhatsThisClickedEvent
+ size=40 align=8
+ base size=40 base align=8
+QWhatsThisClickedEvent (0x0x7f543c5171a0) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+ QEvent (0x0x7f5432b232a0) 0
+ primary-for QWhatsThisClickedEvent (0x0x7f543c5171a0)
+
+Vtable for QActionEvent
+QActionEvent::_ZTV12QActionEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionEvent)
+16 (int (*)(...))QActionEvent::~QActionEvent
+24 (int (*)(...))QActionEvent::~QActionEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QActionEvent::clone
+
+Class QActionEvent
+ size=32 align=8
+ base size=32 base align=8
+QActionEvent (0x0x7f543c517208) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+ QEvent (0x0x7f5432b23540) 0
+ primary-for QActionEvent (0x0x7f543c517208)
+
+Vtable for QFileOpenEvent
+QFileOpenEvent::_ZTV14QFileOpenEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QFileOpenEvent)
+16 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+24 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QFileOpenEvent::clone
+
+Class QFileOpenEvent
+ size=48 align=8
+ base size=48 base align=8
+QFileOpenEvent (0x0x7f543c517270) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+ QEvent (0x0x7f5432b238a0) 0
+ primary-for QFileOpenEvent (0x0x7f543c517270)
+
+Vtable for QToolBarChangeEvent
+QToolBarChangeEvent::_ZTV19QToolBarChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QToolBarChangeEvent)
+16 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+24 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QToolBarChangeEvent::clone
+
+Class QToolBarChangeEvent
+ size=24 align=8
+ base size=17 base align=8
+QToolBarChangeEvent (0x0x7f543c5172d8) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+ QEvent (0x0x7f5432b23ba0) 0
+ primary-for QToolBarChangeEvent (0x0x7f543c5172d8)
+
+Vtable for QShortcutEvent
+QShortcutEvent::_ZTV14QShortcutEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QShortcutEvent)
+16 (int (*)(...))QShortcutEvent::~QShortcutEvent
+24 (int (*)(...))QShortcutEvent::~QShortcutEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QShortcutEvent::clone
+
+Class QShortcutEvent
+ size=32 align=8
+ base size=29 base align=8
+QShortcutEvent (0x0x7f543c517340) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+ QEvent (0x0x7f5432b23ea0) 0
+ primary-for QShortcutEvent (0x0x7f543c517340)
+
+Vtable for QWindowStateChangeEvent
+QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QWindowStateChangeEvent)
+16 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+24 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QWindowStateChangeEvent::clone
+
+Class QWindowStateChangeEvent
+ size=24 align=8
+ base size=21 base align=8
+QWindowStateChangeEvent (0x0x7f543c517410) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+ QEvent (0x0x7f5432b3e240) 0
+ primary-for QWindowStateChangeEvent (0x0x7f543c517410)
+
+Vtable for QTouchEvent
+QTouchEvent::_ZTV11QTouchEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTouchEvent)
+16 (int (*)(...))QTouchEvent::~QTouchEvent
+24 (int (*)(...))QTouchEvent::~QTouchEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QTouchEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QTouchEvent::isBeginEvent
+64 (int (*)(...))QTouchEvent::isUpdateEvent
+72 (int (*)(...))QTouchEvent::isEndEvent
+
+Class QTouchEvent
+ size=80 align=8
+ base size=79 base align=8
+QTouchEvent (0x0x7f543c517478) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+ QPointerEvent (0x0x7f543c5174e0) 0
+ primary-for QTouchEvent (0x0x7f543c517478)
+ QInputEvent (0x0x7f543c517548) 0
+ primary-for QPointerEvent (0x0x7f543c5174e0)
+ QEvent (0x0x7f5432b3e540) 0
+ primary-for QInputEvent (0x0x7f543c517548)
+
+Vtable for QScrollPrepareEvent
+QScrollPrepareEvent::_ZTV19QScrollPrepareEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollPrepareEvent)
+16 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+24 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScrollPrepareEvent::clone
+
+Class QScrollPrepareEvent
+ size=96 align=8
+ base size=96 base align=8
+QScrollPrepareEvent (0x0x7f543c5175b0) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+ QEvent (0x0x7f5432b3e8a0) 0
+ primary-for QScrollPrepareEvent (0x0x7f543c5175b0)
+
+Vtable for QScrollEvent
+QScrollEvent::_ZTV12QScrollEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QScrollEvent)
+16 (int (*)(...))QScrollEvent::~QScrollEvent
+24 (int (*)(...))QScrollEvent::~QScrollEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScrollEvent::clone
+
+Class QScrollEvent
+ size=56 align=8
+ base size=52 base align=8
+QScrollEvent (0x0x7f543c517618) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+ QEvent (0x0x7f5432b3ecc0) 0
+ primary-for QScrollEvent (0x0x7f543c517618)
+
+Vtable for QScreenOrientationChangeEvent
+QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QScreenOrientationChangeEvent)
+16 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+24 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScreenOrientationChangeEvent::clone
+
+Class QScreenOrientationChangeEvent
+ size=32 align=8
+ base size=28 base align=8
+QScreenOrientationChangeEvent (0x0x7f543c517680) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+ QEvent (0x0x7f5432b580c0) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7f543c517680)
+
+Vtable for QApplicationStateChangeEvent
+QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QApplicationStateChangeEvent)
+16 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+24 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QApplicationStateChangeEvent::clone
+
+Class QApplicationStateChangeEvent
+ size=24 align=8
+ base size=20 base align=8
+QApplicationStateChangeEvent (0x0x7f543c5176e8) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+ QEvent (0x0x7f5432b58420) 0
+ primary-for QApplicationStateChangeEvent (0x0x7f543c5176e8)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7f5432b58720) 0
+
+Class QFontDatabase
+ size=1 align=1
+ base size=0 base align=1
+QFontDatabase (0x0x7f5432b9a780) 0 empty
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7f5432b9a960) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7f5432bd0840) 0
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7f54307fcf00) 0
+
+Class QBrushData
+ size=104 align=8
+ base size=104 base align=8
+QBrushData (0x0x7f5430822a80) 0
+
+Class QGradient::QGradientData
+ size=48 align=8
+ base size=48 base align=8
+QGradient::QGradientData (0x0x7f5430822cc0) 0
+
+Class QGradient
+ size=88 align=8
+ base size=88 base align=8
+QGradient (0x0x7f5430822c60) 0
+
+Class QLinearGradient
+ size=88 align=8
+ base size=88 base align=8
+QLinearGradient (0x0x7f54376342d8) 0
+ QGradient (0x0x7f543083aba0) 0
+
+Class QRadialGradient
+ size=88 align=8
+ base size=88 base align=8
+QRadialGradient (0x0x7f543728e208) 0
+ QGradient (0x0x7f543083acc0) 0
+
+Class QConicalGradient
+ size=88 align=8
+ base size=88 base align=8
+QConicalGradient (0x0x7f543728e270) 0
+ QGradient (0x0x7f543083ade0) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7f543083aea0) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7f5430888f00) 0
+
+Class QTextOption
+ size=24 align=8
+ base size=24 base align=8
+QTextOption (0x0x7f5430888ea0) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7f5430899c60) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7f54308bd960) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7f5434a68b60) 0
+ QTextFormat (0x0x7f5430929000) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7f5433e72958) 0
+ QTextFormat (0x0x7f5430956300) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7f543096f3a8) 0
+ QTextFormat (0x0x7f543096d840) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7f5430980f70) 0
+ QTextCharFormat (0x0x7f5430989000) 0
+ QTextFormat (0x0x7f5430984720) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7f5430997c30) 0
+ QTextFormat (0x0x7f543099a5a0) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7f54309b4888) 0
+ QTextFrameFormat (0x0x7f54309b48f0) 0
+ QTextFormat (0x0x7f54309b59c0) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7f54309d1548) 0
+ QTextCharFormat (0x0x7f54309d15b0) 0
+ QTextFormat (0x0x7f54309cec60) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7f54309f71e0) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7f543062b840) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7f543062bc60) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7f543062bc00) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7f5430670d20) 0
+
+Vtable for QAbstractUndoItem
+QAbstractUndoItem::_ZTV17QAbstractUndoItem: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAbstractUndoItem)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractUndoItem
+ size=8 align=8
+ base size=8 base align=8
+QAbstractUndoItem (0x0x7f54306811e0) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7f5430681480) 0 empty
+
+Vtable for QTextDocument
+QTextDocument::_ZTV13QTextDocument: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QTextDocument)
+16 (int (*)(...))QTextDocument::metaObject
+24 (int (*)(...))QTextDocument::qt_metacast
+32 (int (*)(...))QTextDocument::qt_metacall
+40 (int (*)(...))QTextDocument::~QTextDocument
+48 (int (*)(...))QTextDocument::~QTextDocument
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextDocument::clear
+120 (int (*)(...))QTextDocument::createObject
+128 (int (*)(...))QTextDocument::loadResource
+
+Class QTextDocument
+ size=16 align=8
+ base size=16 base align=8
+QTextDocument (0x0x7f54306791a0) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+ QObject (0x0x7f5430681420) 0
+ primary-for QTextDocument (0x0x7f54306791a0)
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7f5430681c60) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7f543070b000) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7f543070b060) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=80 align=8
+ base size=80 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7f543070b0c0) 0
+
+Vtable for QAbstractTextDocumentLayout
+QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAbstractTextDocumentLayout)
+16 (int (*)(...))QAbstractTextDocumentLayout::metaObject
+24 (int (*)(...))QAbstractTextDocumentLayout::qt_metacast
+32 (int (*)(...))QAbstractTextDocumentLayout::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractTextDocumentLayout::resizeInlineObject
+176 (int (*)(...))QAbstractTextDocumentLayout::positionInlineObject
+184 (int (*)(...))QAbstractTextDocumentLayout::drawInlineObject
+
+Class QAbstractTextDocumentLayout
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTextDocumentLayout (0x0x7f54306fc4e0) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+ QObject (0x0x7f54306f9f60) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f54306fc4e0)
+
+Vtable for QTextObjectInterface
+QTextObjectInterface::_ZTV20QTextObjectInterface: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextObjectInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QTextObjectInterface
+ size=8 align=8
+ base size=8 base align=8
+QTextObjectInterface (0x0x7f5430759660) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7f54307598a0) 0
+
+Vtable for QAccessible::ActivationObserver
+QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN11QAccessible18ActivationObserverE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessible::ActivationObserver
+ size=8 align=8
+ base size=8 base align=8
+QAccessible::ActivationObserver (0x0x7f5430759900) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7f5430759840) 0 empty
+
+Vtable for QAccessibleInterface
+QAccessibleInterface::_ZTV20QAccessibleInterface: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAccessibleInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QAccessibleInterface::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleInterface::focusChild
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleInterface (0x0x7f543077d180) 0 nearly-empty
+ vptr=((& QAccessibleInterface::_ZTV20QAccessibleInterface) + 16)
+
+Vtable for QAccessibleTextInterface
+QAccessibleTextInterface::_ZTV24QAccessibleTextInterface: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAccessibleTextInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))QAccessibleTextInterface::textBeforeOffset
+104 (int (*)(...))QAccessibleTextInterface::textAfterOffset
+112 (int (*)(...))QAccessibleTextInterface::textAtOffset
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTextInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTextInterface (0x0x7f543077d4e0) 0 nearly-empty
+ vptr=((& QAccessibleTextInterface::_ZTV24QAccessibleTextInterface) + 16)
+
+Vtable for QAccessibleEditableTextInterface
+QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleEditableTextInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleEditableTextInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleEditableTextInterface (0x0x7f543077d540) 0 nearly-empty
+ vptr=((& QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface) + 16)
+
+Vtable for QAccessibleValueInterface
+QAccessibleValueInterface::_ZTV25QAccessibleValueInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleValueInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleValueInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleValueInterface (0x0x7f543077d5a0) 0 nearly-empty
+ vptr=((& QAccessibleValueInterface::_ZTV25QAccessibleValueInterface) + 16)
+
+Vtable for QAccessibleTableCellInterface
+QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTableCellInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTableCellInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTableCellInterface (0x0x7f543077d600) 0 nearly-empty
+ vptr=((& QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface) + 16)
+
+Vtable for QAccessibleTableInterface
+QAccessibleTableInterface::_ZTV25QAccessibleTableInterface: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleTableInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTableInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTableInterface (0x0x7f543077d660) 0 nearly-empty
+ vptr=((& QAccessibleTableInterface::_ZTV25QAccessibleTableInterface) + 16)
+
+Vtable for QAccessibleActionInterface
+QAccessibleActionInterface::_ZTV26QAccessibleActionInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleActionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QAccessibleActionInterface::localizedActionName
+48 (int (*)(...))QAccessibleActionInterface::localizedActionDescription
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleActionInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleActionInterface (0x0x7f543077d6c0) 0 nearly-empty
+ vptr=((& QAccessibleActionInterface::_ZTV26QAccessibleActionInterface) + 16)
+
+Vtable for QAccessibleImageInterface
+QAccessibleImageInterface::_ZTV25QAccessibleImageInterface: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleImageInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleImageInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleImageInterface (0x0x7f543077d780) 0 nearly-empty
+ vptr=((& QAccessibleImageInterface::_ZTV25QAccessibleImageInterface) + 16)
+
+Vtable for QAccessibleEvent
+QAccessibleEvent::_ZTV16QAccessibleEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAccessibleEvent)
+16 (int (*)(...))QAccessibleEvent::~QAccessibleEvent
+24 (int (*)(...))QAccessibleEvent::~QAccessibleEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleEvent
+ size=32 align=8
+ base size=28 base align=8
+QAccessibleEvent (0x0x7f543077d7e0) 0
+ vptr=((& QAccessibleEvent::_ZTV16QAccessibleEvent) + 16)
+
+Vtable for QAccessibleStateChangeEvent
+QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleStateChangeEvent)
+16 (int (*)(...))QAccessibleStateChangeEvent::~QAccessibleStateChangeEvent
+24 (int (*)(...))QAccessibleStateChangeEvent::~QAccessibleStateChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleStateChangeEvent
+ size=40 align=8
+ base size=40 base align=8
+QAccessibleStateChangeEvent (0x0x7f543075c9c0) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f543077dd20) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7f543075c9c0)
+
+Vtable for QAccessibleTextCursorEvent
+QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextCursorEvent)
+16 (int (*)(...))QAccessibleTextCursorEvent::~QAccessibleTextCursorEvent
+24 (int (*)(...))QAccessibleTextCursorEvent::~QAccessibleTextCursorEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextCursorEvent
+ size=32 align=8
+ base size=32 base align=8
+QAccessibleTextCursorEvent (0x0x7f543075ca28) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+ QAccessibleEvent (0x0x7f54307a8120) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f543075ca28)
+
+Vtable for QAccessibleTextSelectionEvent
+QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTextSelectionEvent)
+16 (int (*)(...))QAccessibleTextSelectionEvent::~QAccessibleTextSelectionEvent
+24 (int (*)(...))QAccessibleTextSelectionEvent::~QAccessibleTextSelectionEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextSelectionEvent
+ size=40 align=8
+ base size=40 base align=8
+QAccessibleTextSelectionEvent (0x0x7f543075ca90) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f543075caf8) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7f543075ca90)
+ QAccessibleEvent (0x0x7f54307a8540) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f543075caf8)
+
+Vtable for QAccessibleTextInsertEvent
+QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextInsertEvent)
+16 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+24 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextInsertEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleTextInsertEvent (0x0x7f543075cb60) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f543075cbc8) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7f543075cb60)
+ QAccessibleEvent (0x0x7f54307a89c0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f543075cbc8)
+
+Vtable for QAccessibleTextRemoveEvent
+QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextRemoveEvent)
+16 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+24 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextRemoveEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleTextRemoveEvent (0x0x7f543075cc30) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f543075cc98) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7f543075cc30)
+ QAccessibleEvent (0x0x7f54307a8de0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f543075cc98)
+
+Vtable for QAccessibleTextUpdateEvent
+QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextUpdateEvent)
+16 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+24 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextUpdateEvent
+ size=88 align=8
+ base size=88 base align=8
+QAccessibleTextUpdateEvent (0x0x7f543075cd00) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f543075cd68) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7f543075cd00)
+ QAccessibleEvent (0x0x7f54307bd240) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f543075cd68)
+
+Vtable for QAccessibleValueChangeEvent
+QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleValueChangeEvent)
+16 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+24 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleValueChangeEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleValueChangeEvent (0x0x7f543075cdd0) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f54307bd6c0) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7f543075cdd0)
+
+Vtable for QAccessibleTableModelChangeEvent
+QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleTableModelChangeEvent)
+16 (int (*)(...))QAccessibleTableModelChangeEvent::~QAccessibleTableModelChangeEvent
+24 (int (*)(...))QAccessibleTableModelChangeEvent::~QAccessibleTableModelChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTableModelChangeEvent
+ size=48 align=8
+ base size=48 base align=8
+QAccessibleTableModelChangeEvent (0x0x7f543075ce38) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f54307bdae0) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7f543075ce38)
+
+Vtable for QAccessibleBridge
+QAccessibleBridge::_ZTV17QAccessibleBridge: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleBridge)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridge
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleBridge (0x0x7f54307d13c0) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7f54307d1660) 0 empty
+
+Vtable for QAccessibleBridgePlugin
+QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QAccessibleBridgePlugin)
+16 (int (*)(...))QAccessibleBridgePlugin::metaObject
+24 (int (*)(...))QAccessibleBridgePlugin::qt_metacast
+32 (int (*)(...))QAccessibleBridgePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridgePlugin
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleBridgePlugin (0x0x7f543075cea0) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+ QObject (0x0x7f54307d1600) 0
+ primary-for QAccessibleBridgePlugin (0x0x7f543075cea0)
+
+Vtable for QAccessibleObject
+QAccessibleObject::_ZTV17QAccessibleObject: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleObject)
+16 0
+24 0
+32 (int (*)(...))QAccessibleObject::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleInterface::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleInterface::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleObject::rect
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleObject
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleObject (0x0x7f543075cf08) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+ QAccessibleInterface (0x0x7f54307d1720) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f543075cf08)
+
+Vtable for QAccessibleApplication
+QAccessibleApplication::_ZTV22QAccessibleApplication: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QAccessibleApplication)
+16 (int (*)(...))QAccessibleApplication::~QAccessibleApplication
+24 (int (*)(...))QAccessibleApplication::~QAccessibleApplication
+32 (int (*)(...))QAccessibleObject::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleApplication::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleApplication::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))QAccessibleApplication::parent
+88 (int (*)(...))QAccessibleApplication::child
+96 (int (*)(...))QAccessibleApplication::childCount
+104 (int (*)(...))QAccessibleApplication::indexOfChild
+112 (int (*)(...))QAccessibleApplication::text
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleObject::rect
+136 (int (*)(...))QAccessibleApplication::role
+144 (int (*)(...))QAccessibleApplication::state
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleApplication
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleApplication (0x0x7f543075cf70) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+ QAccessibleObject (0x0x7f54307de000) 0
+ primary-for QAccessibleApplication (0x0x7f543075cf70)
+ QAccessibleInterface (0x0x7f54307d1780) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f54307de000)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7f54307d1840) 0 empty
+
+Vtable for QAccessiblePlugin
+QAccessiblePlugin::_ZTV17QAccessiblePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessiblePlugin)
+16 (int (*)(...))QAccessiblePlugin::metaObject
+24 (int (*)(...))QAccessiblePlugin::qt_metacast
+32 (int (*)(...))QAccessiblePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessiblePlugin
+ size=16 align=8
+ base size=16 base align=8
+QAccessiblePlugin (0x0x7f54307de068) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+ QObject (0x0x7f54307d17e0) 0
+ primary-for QAccessiblePlugin (0x0x7f54307de068)
+
+Class QAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAction::QPrivateSignal (0x0x7f54307d1960) 0 empty
+
+Vtable for QAction
+QAction::_ZTV7QAction: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QAction)
+16 (int (*)(...))QAction::metaObject
+24 (int (*)(...))QAction::qt_metacast
+32 (int (*)(...))QAction::qt_metacall
+40 (int (*)(...))QAction::~QAction
+48 (int (*)(...))QAction::~QAction
+56 (int (*)(...))QAction::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QAction
+ size=16 align=8
+ base size=16 base align=8
+QAction (0x0x7f54307de0d0) 0
+ vptr=((& QAction::_ZTV7QAction) + 16)
+ QObject (0x0x7f54307d1900) 0
+ primary-for QAction (0x0x7f54307de0d0)
+
+Class QActionGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QActionGroup::QPrivateSignal (0x0x7f54303fd2a0) 0 empty
+
+Vtable for QActionGroup
+QActionGroup::_ZTV12QActionGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionGroup)
+16 (int (*)(...))QActionGroup::metaObject
+24 (int (*)(...))QActionGroup::qt_metacast
+32 (int (*)(...))QActionGroup::qt_metacall
+40 (int (*)(...))QActionGroup::~QActionGroup
+48 (int (*)(...))QActionGroup::~QActionGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QActionGroup
+ size=16 align=8
+ base size=16 base align=8
+QActionGroup (0x0x7f54307de138) 0
+ vptr=((& QActionGroup::_ZTV12QActionGroup) + 16)
+ QObject (0x0x7f54303fd240) 0
+ primary-for QActionGroup (0x0x7f54307de138)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7f54303fd540) 0
+
+Vtable for QSurface
+QSurface::_ZTV8QSurface: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSurface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+
+Class QSurface
+ size=24 align=8
+ base size=24 base align=8
+QSurface (0x0x7f54303fdd80) 0
+ vptr=((& QSurface::_ZTV8QSurface) + 16)
+
+Vtable for QBitmap
+QBitmap::_ZTV7QBitmap: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QBitmap)
+16 (int (*)(...))QBitmap::~QBitmap
+24 (int (*)(...))QBitmap::~QBitmap
+32 (int (*)(...))QPixmap::devType
+40 (int (*)(...))QPixmap::paintEngine
+48 (int (*)(...))QPixmap::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QBitmap
+ size=24 align=8
+ base size=24 base align=8
+QBitmap (0x0x7f54307de2d8) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+ QPixmap (0x0x7f54307de340) 0
+ primary-for QBitmap (0x0x7f54307de2d8)
+ QPaintDevice (0x0x7f543042c0c0) 0
+ primary-for QPixmap (0x0x7f54307de340)
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7f543043d9c0) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7f5430463ba0) 0 empty
+
+Vtable for QWindow
+QWindow::_ZTV7QWindow: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWindow)
+16 (int (*)(...))QWindow::metaObject
+24 (int (*)(...))QWindow::qt_metacast
+32 (int (*)(...))QWindow::qt_metacall
+40 (int (*)(...))QWindow::~QWindow
+48 (int (*)(...))QWindow::~QWindow
+56 (int (*)(...))QWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI7QWindow)
+328 (int (*)(...))QWindow::_ZThn16_N7QWindowD1Ev
+336 (int (*)(...))QWindow::_ZThn16_N7QWindowD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QWindow
+ size=40 align=8
+ base size=40 base align=8
+QWindow (0x0x7f5430426930) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+ QObject (0x0x7f5430463ae0) 0
+ primary-for QWindow (0x0x7f5430426930)
+ QSurface (0x0x7f5430463b40) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 328)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7f543048b420) 0
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7f543048b540) 0 empty
+
+Vtable for QClipboard
+QClipboard::_ZTV10QClipboard: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QClipboard)
+16 (int (*)(...))QClipboard::metaObject
+24 (int (*)(...))QClipboard::qt_metacast
+32 (int (*)(...))QClipboard::qt_metacall
+40 (int (*)(...))QClipboard::~QClipboard
+48 (int (*)(...))QClipboard::~QClipboard
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QClipboard
+ size=16 align=8
+ base size=16 base align=8
+QClipboard (0x0x7f54304669c0) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+ QObject (0x0x7f543048b4e0) 0
+ primary-for QClipboard (0x0x7f54304669c0)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7f543048b660) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7f54304ca600) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7f543051c2a0) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7f543051c360) 0 empty
+
+Vtable for QDrag
+QDrag::_ZTV5QDrag: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDrag)
+16 (int (*)(...))QDrag::metaObject
+24 (int (*)(...))QDrag::qt_metacast
+32 (int (*)(...))QDrag::qt_metacall
+40 (int (*)(...))QDrag::~QDrag
+48 (int (*)(...))QDrag::~QDrag
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDrag
+ size=16 align=8
+ base size=16 base align=8
+QDrag (0x0x7f54305183a8) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+ QObject (0x0x7f543051c300) 0
+ primary-for QDrag (0x0x7f54305183a8)
+
+Class QFileSystemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemModel::QPrivateSignal (0x0x7f543051c540) 0 empty
+
+Vtable for QFileSystemModel
+QFileSystemModel::_ZTV16QFileSystemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QFileSystemModel)
+16 (int (*)(...))QFileSystemModel::metaObject
+24 (int (*)(...))QFileSystemModel::qt_metacast
+32 (int (*)(...))QFileSystemModel::qt_metacall
+40 (int (*)(...))QFileSystemModel::~QFileSystemModel
+48 (int (*)(...))QFileSystemModel::~QFileSystemModel
+56 (int (*)(...))QFileSystemModel::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QFileSystemModel::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileSystemModel::index
+120 (int (*)(...))QFileSystemModel::parent
+128 (int (*)(...))QFileSystemModel::sibling
+136 (int (*)(...))QFileSystemModel::rowCount
+144 (int (*)(...))QFileSystemModel::columnCount
+152 (int (*)(...))QFileSystemModel::hasChildren
+160 (int (*)(...))QFileSystemModel::data
+168 (int (*)(...))QFileSystemModel::setData
+176 (int (*)(...))QFileSystemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QFileSystemModel::mimeTypes
+224 (int (*)(...))QFileSystemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QFileSystemModel::dropMimeData
+248 (int (*)(...))QFileSystemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QFileSystemModel::fetchMore
+320 (int (*)(...))QFileSystemModel::canFetchMore
+328 (int (*)(...))QFileSystemModel::flags
+336 (int (*)(...))QFileSystemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QFileSystemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QFileSystemModel
+ size=16 align=8
+ base size=16 base align=8
+QFileSystemModel (0x0x7f5430518410) 0
+ vptr=((& QFileSystemModel::_ZTV16QFileSystemModel) + 16)
+ QAbstractItemModel (0x0x7f5430518478) 0
+ primary-for QFileSystemModel (0x0x7f5430518410)
+ QObject (0x0x7f543051c4e0) 0
+ primary-for QAbstractItemModel (0x0x7f5430518478)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7f543051cb40) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7f5430573480) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7f543058dea0) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7f54305f2cc0) 0 empty
+
+Vtable for QGenericPlugin
+QGenericPlugin::_ZTV14QGenericPlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGenericPlugin)
+16 (int (*)(...))QGenericPlugin::metaObject
+24 (int (*)(...))QGenericPlugin::qt_metacast
+32 (int (*)(...))QGenericPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QGenericPlugin
+ size=16 align=8
+ base size=16 base align=8
+QGenericPlugin (0x0x7f54305c0c98) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+ QObject (0x0x7f54305f2c60) 0
+ primary-for QGenericPlugin (0x0x7f54305c0c98)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7f54305f2d80) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7f54305f2e40) 0 empty
+
+Vtable for QInputMethod
+QInputMethod::_ZTV12QInputMethod: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputMethod)
+16 (int (*)(...))QInputMethod::metaObject
+24 (int (*)(...))QInputMethod::qt_metacast
+32 (int (*)(...))QInputMethod::qt_metacall
+40 (int (*)(...))QInputMethod::~QInputMethod
+48 (int (*)(...))QInputMethod::~QInputMethod
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QInputMethod
+ size=16 align=8
+ base size=16 base align=8
+QInputMethod (0x0x7f54305c0d00) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+ QObject (0x0x7f54305f2de0) 0
+ primary-for QInputMethod (0x0x7f54305c0d00)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7f543020d120) 0 empty
+
+Vtable for QGuiApplication
+QGuiApplication::_ZTV15QGuiApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGuiApplication)
+16 (int (*)(...))QGuiApplication::metaObject
+24 (int (*)(...))QGuiApplication::qt_metacast
+32 (int (*)(...))QGuiApplication::qt_metacall
+40 (int (*)(...))QGuiApplication::~QGuiApplication
+48 (int (*)(...))QGuiApplication::~QGuiApplication
+56 (int (*)(...))QGuiApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGuiApplication::notify
+120 (int (*)(...))QGuiApplication::compressEvent
+
+Class QGuiApplication
+ size=16 align=8
+ base size=16 base align=8
+QGuiApplication (0x0x7f54305c0d68) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+ QCoreApplication (0x0x7f54305c0dd0) 0
+ primary-for QGuiApplication (0x0x7f54305c0d68)
+ QObject (0x0x7f543020d0c0) 0
+ primary-for QCoreApplication (0x0x7f54305c0dd0)
+
+Class QIconEngine::ScaledPixmapArgument
+ size=48 align=8
+ base size=48 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7f543020d3c0) 0
+
+Vtable for QIconEngine
+QIconEngine::_ZTV11QIconEngine: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QIconEngine)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QIconEngine::actualSize
+48 (int (*)(...))QIconEngine::pixmap
+56 (int (*)(...))QIconEngine::addPixmap
+64 (int (*)(...))QIconEngine::addFile
+72 (int (*)(...))QIconEngine::key
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QIconEngine::read
+96 (int (*)(...))QIconEngine::write
+104 (int (*)(...))QIconEngine::availableSizes
+112 (int (*)(...))QIconEngine::iconName
+120 (int (*)(...))QIconEngine::isNull
+128 (int (*)(...))QIconEngine::scaledPixmap
+136 (int (*)(...))QIconEngine::virtual_hook
+
+Class QIconEngine
+ size=8 align=8
+ base size=8 base align=8
+QIconEngine (0x0x7f543020d360) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7f543020d480) 0 empty
+
+Vtable for QIconEnginePlugin
+QIconEnginePlugin::_ZTV17QIconEnginePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QIconEnginePlugin)
+16 (int (*)(...))QIconEnginePlugin::metaObject
+24 (int (*)(...))QIconEnginePlugin::qt_metacast
+32 (int (*)(...))QIconEnginePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QIconEnginePlugin
+ size=16 align=8
+ base size=16 base align=8
+QIconEnginePlugin (0x0x7f54305c0e38) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+ QObject (0x0x7f543020d420) 0
+ primary-for QIconEnginePlugin (0x0x7f54305c0e38)
+
+Vtable for QImageIOHandler
+QImageIOHandler::_ZTV15QImageIOHandler: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QImageIOHandler)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QImageIOHandler::write
+56 (int (*)(...))QImageIOHandler::option
+64 (int (*)(...))QImageIOHandler::setOption
+72 (int (*)(...))QImageIOHandler::supportsOption
+80 (int (*)(...))QImageIOHandler::jumpToNextImage
+88 (int (*)(...))QImageIOHandler::jumpToImage
+96 (int (*)(...))QImageIOHandler::loopCount
+104 (int (*)(...))QImageIOHandler::imageCount
+112 (int (*)(...))QImageIOHandler::nextImageDelay
+120 (int (*)(...))QImageIOHandler::currentImageNumber
+128 (int (*)(...))QImageIOHandler::currentImageRect
+
+Class QImageIOHandler
+ size=16 align=8
+ base size=16 base align=8
+QImageIOHandler (0x0x7f543020d540) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7f543020d780) 0 empty
+
+Vtable for QImageIOPlugin
+QImageIOPlugin::_ZTV14QImageIOPlugin: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QImageIOPlugin)
+16 (int (*)(...))QImageIOPlugin::metaObject
+24 (int (*)(...))QImageIOPlugin::qt_metacast
+32 (int (*)(...))QImageIOPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QImageIOPlugin
+ size=16 align=8
+ base size=16 base align=8
+QImageIOPlugin (0x0x7f54305c0ea0) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+ QObject (0x0x7f543020d720) 0
+ primary-for QImageIOPlugin (0x0x7f54305c0ea0)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7f543020db40) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7f543020dc00) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7f543020dcc0) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7f543029fa20) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7f54302f9ea0) 0 empty
+
+Vtable for QMovie
+QMovie::_ZTV6QMovie: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QMovie)
+16 (int (*)(...))QMovie::metaObject
+24 (int (*)(...))QMovie::qt_metacast
+32 (int (*)(...))QMovie::qt_metacall
+40 (int (*)(...))QMovie::~QMovie
+48 (int (*)(...))QMovie::~QMovie
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QMovie
+ size=16 align=8
+ base size=16 base align=8
+QMovie (0x0x7f54302ed680) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+ QObject (0x0x7f54302f9e40) 0
+ primary-for QMovie (0x0x7f54302ed680)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7f54303192a0) 0 empty
+
+Vtable for QOffscreenSurface
+QOffscreenSurface::_ZTV17QOffscreenSurface: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QOffscreenSurface)
+16 (int (*)(...))QOffscreenSurface::metaObject
+24 (int (*)(...))QOffscreenSurface::qt_metacast
+32 (int (*)(...))QOffscreenSurface::qt_metacall
+40 (int (*)(...))QOffscreenSurface::~QOffscreenSurface
+48 (int (*)(...))QOffscreenSurface::~QOffscreenSurface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QOffscreenSurface::surfaceType
+120 (int (*)(...))QOffscreenSurface::format
+128 (int (*)(...))QOffscreenSurface::size
+136 (int (*)(...))QOffscreenSurface::surfaceHandle
+144 (int (*)(...))-16
+152 (int (*)(...))(& _ZTI17QOffscreenSurface)
+160 (int (*)(...))QOffscreenSurface::_ZThn16_N17QOffscreenSurfaceD1Ev
+168 (int (*)(...))QOffscreenSurface::_ZThn16_N17QOffscreenSurfaceD0Ev
+176 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface6formatEv
+184 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface13surfaceHandleEv
+192 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface11surfaceTypeEv
+200 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface4sizeEv
+
+Class QOffscreenSurface
+ size=40 align=8
+ base size=40 base align=8
+QOffscreenSurface (0x0x7f543030d0e0) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+ QObject (0x0x7f54303191e0) 0
+ primary-for QOffscreenSurface (0x0x7f543030d0e0)
+ QSurface (0x0x7f5430319240) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7f54303194e0) 0 empty
+
+Vtable for QOpenGLContextGroup
+QOpenGLContextGroup::_ZTV19QOpenGLContextGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QOpenGLContextGroup)
+16 (int (*)(...))QOpenGLContextGroup::metaObject
+24 (int (*)(...))QOpenGLContextGroup::qt_metacast
+32 (int (*)(...))QOpenGLContextGroup::qt_metacall
+40 (int (*)(...))QOpenGLContextGroup::~QOpenGLContextGroup
+48 (int (*)(...))QOpenGLContextGroup::~QOpenGLContextGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLContextGroup
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLContextGroup (0x0x7f54302ed6e8) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+ QObject (0x0x7f5430319480) 0
+ primary-for QOpenGLContextGroup (0x0x7f54302ed6e8)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7f54303196c0) 0 empty
+
+Vtable for QOpenGLContext
+QOpenGLContext::_ZTV14QOpenGLContext: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QOpenGLContext)
+16 (int (*)(...))QOpenGLContext::metaObject
+24 (int (*)(...))QOpenGLContext::qt_metacast
+32 (int (*)(...))QOpenGLContext::qt_metacall
+40 (int (*)(...))QOpenGLContext::~QOpenGLContext
+48 (int (*)(...))QOpenGLContext::~QOpenGLContext
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLContext
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLContext (0x0x7f54302ed750) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+ QObject (0x0x7f5430319660) 0
+ primary-for QOpenGLContext (0x0x7f54302ed750)
+
+Vtable for QNativeInterface::QGLXContext
+QNativeInterface::QGLXContext::_ZTVN16QNativeInterface11QGLXContextE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QGLXContextE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QGLXContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QGLXContext (0x0x7f5430319840) 0 nearly-empty
+ vptr=((& QNativeInterface::QGLXContext::_ZTVN16QNativeInterface11QGLXContextE) + 16)
+
+Vtable for QNativeInterface::QEGLContext
+QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QEGLContextE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QEGLContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QEGLContext (0x0x7f54303198a0) 0 nearly-empty
+ vptr=((& QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE) + 16)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7f5430319900) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7f5430319ea0) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7f5430319e40) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7f54302edb60) 0
+ QOpenGLFunctions (0x0x7f542fea8c60) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7f542fef5000) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7f54302edbc8) 0
+ QOpenGLFunctionsPrivate (0x0x7f542fea8f60) 0
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7f542ff85cc0) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7f542ffd6780) 0
+
+Class QPageRanges::Range
+ size=8 align=4
+ base size=8 base align=4
+QPageRanges::Range (0x0x7f542fc2e420) 0
+
+Class QPageRanges
+ size=8 align=8
+ base size=8 base align=8
+QPageRanges (0x0x7f542fc2e3c0) 0
+
+Vtable for QPagedPaintDevice
+QPagedPaintDevice::_ZTV17QPagedPaintDevice: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QPagedPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QPagedPaintDevice::setPageLayout
+96 (int (*)(...))QPagedPaintDevice::setPageSize
+104 (int (*)(...))QPagedPaintDevice::setPageOrientation
+112 (int (*)(...))QPagedPaintDevice::setPageMargins
+120 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPagedPaintDevice
+ size=24 align=8
+ base size=24 base align=8
+QPagedPaintDevice (0x0x7f542fc927b8) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+ QPaintDevice (0x0x7f542fc94540) 0
+ primary-for QPagedPaintDevice (0x0x7f542fc927b8)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7f542fc946c0) 0 empty
+
+Vtable for QPaintDeviceWindow
+QPaintDeviceWindow::_ZTV18QPaintDeviceWindow: 59 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+16 (int (*)(...))QPaintDeviceWindow::metaObject
+24 (int (*)(...))QPaintDeviceWindow::qt_metacast
+32 (int (*)(...))QPaintDeviceWindow::qt_metacall
+40 (int (*)(...))QPaintDeviceWindow::~QPaintDeviceWindow
+48 (int (*)(...))QPaintDeviceWindow::~QPaintDeviceWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QPaintDeviceWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QPaintDeviceWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))-16
+336 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+344 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD1Ev
+352 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD0Ev
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+384 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+392 (int (*)(...))-40
+400 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+408 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD1Ev
+416 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD0Ev
+424 (int (*)(...))QPaintDevice::devType
+432 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+440 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+448 (int (*)(...))QPaintDevice::initPainter
+456 (int (*)(...))QPaintDevice::redirected
+464 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDeviceWindow
+ size=56 align=8
+ base size=50 base align=8
+QPaintDeviceWindow (0x0x7f542fc991c0) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+ QWindow (0x0x7f542fc99230) 0
+ primary-for QPaintDeviceWindow (0x0x7f542fc991c0)
+ QObject (0x0x7f542fc945a0) 0
+ primary-for QWindow (0x0x7f542fc99230)
+ QSurface (0x0x7f542fc94600) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 344)
+ QPaintDevice (0x0x7f542fc94660) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 408)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7f542fc948a0) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7f542fc94840) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7f542fa3b420) 0 empty
+
+Vtable for QPaintEngine
+QPaintEngine::_ZTV12QPaintEngine: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintEngine)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))QPaintEngine::drawRects
+64 (int (*)(...))QPaintEngine::drawRects
+72 (int (*)(...))QPaintEngine::drawLines
+80 (int (*)(...))QPaintEngine::drawLines
+88 (int (*)(...))QPaintEngine::drawEllipse
+96 (int (*)(...))QPaintEngine::drawEllipse
+104 (int (*)(...))QPaintEngine::drawPath
+112 (int (*)(...))QPaintEngine::drawPoints
+120 (int (*)(...))QPaintEngine::drawPoints
+128 (int (*)(...))QPaintEngine::drawPolygon
+136 (int (*)(...))QPaintEngine::drawPolygon
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QPaintEngine::drawTextItem
+160 (int (*)(...))QPaintEngine::drawTiledPixmap
+168 (int (*)(...))QPaintEngine::drawImage
+176 (int (*)(...))QPaintEngine::coordinateOffset
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))QPaintEngine::createPixmap
+200 (int (*)(...))QPaintEngine::createPixmapFromImage
+
+Class QPaintEngine
+ size=32 align=8
+ base size=32 base align=8
+QPaintEngine (0x0x7f542fa4fc00) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7f542fa88240) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7f542fa88cc0) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7f542fa88c60) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7f542fb05c60) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7f542fb1f780) 0 empty
+
+Vtable for QPdfWriter
+QPdfWriter::_ZTV10QPdfWriter: 33 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QPdfWriter)
+16 (int (*)(...))QPdfWriter::metaObject
+24 (int (*)(...))QPdfWriter::qt_metacast
+32 (int (*)(...))QPdfWriter::qt_metacall
+40 (int (*)(...))QPdfWriter::~QPdfWriter
+48 (int (*)(...))QPdfWriter::~QPdfWriter
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPdfWriter::newPage
+120 (int (*)(...))QPdfWriter::paintEngine
+128 (int (*)(...))QPdfWriter::metric
+136 (int (*)(...))-16
+144 (int (*)(...))(& _ZTI10QPdfWriter)
+152 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD1Ev
+160 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD0Ev
+168 (int (*)(...))QPaintDevice::devType
+176 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter11paintEngineEv
+184 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter6metricEN12QPaintDevice17PaintDeviceMetricE
+192 (int (*)(...))QPaintDevice::initPainter
+200 (int (*)(...))QPaintDevice::redirected
+208 (int (*)(...))QPaintDevice::sharedPainter
+216 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter7newPageEv
+224 (int (*)(...))QPagedPaintDevice::setPageLayout
+232 (int (*)(...))QPagedPaintDevice::setPageSize
+240 (int (*)(...))QPagedPaintDevice::setPageOrientation
+248 (int (*)(...))QPagedPaintDevice::setPageMargins
+256 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPdfWriter
+ size=40 align=8
+ base size=40 base align=8
+QPdfWriter (0x0x7f542fa69c40) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+ QObject (0x0x7f542fb1f6c0) 0
+ primary-for QPdfWriter (0x0x7f542fa69c40)
+ QPagedPaintDevice (0x0x7f542fb12618) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 152)
+ QPaintDevice (0x0x7f542fb1f720) 16
+ primary-for QPagedPaintDevice (0x0x7f542fb12618)
+
+Vtable for QPicture
+QPicture::_ZTV8QPicture: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QPicture)
+16 (int (*)(...))QPicture::~QPicture
+24 (int (*)(...))QPicture::~QPicture
+32 (int (*)(...))QPicture::devType
+40 (int (*)(...))QPicture::paintEngine
+48 (int (*)(...))QPicture::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QPicture::setData
+
+Class QPicture
+ size=24 align=8
+ base size=24 base align=8
+QPicture (0x0x7f542fb12680) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+ QPaintDevice (0x0x7f542fb1f960) 0
+ primary-for QPicture (0x0x7f542fb12680)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7f542fb67480) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7f542fb67420) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7f542fba96c0) 0 empty
+
+Vtable for QRasterWindow
+QRasterWindow::_ZTV13QRasterWindow: 60 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QRasterWindow)
+16 (int (*)(...))QRasterWindow::metaObject
+24 (int (*)(...))QRasterWindow::qt_metacast
+32 (int (*)(...))QRasterWindow::qt_metacall
+40 (int (*)(...))QRasterWindow::~QRasterWindow
+48 (int (*)(...))QRasterWindow::~QRasterWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QPaintDeviceWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QRasterWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))QRasterWindow::redirected
+336 (int (*)(...))-16
+344 (int (*)(...))(& _ZTI13QRasterWindow)
+352 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD1Ev
+360 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD0Ev
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+384 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+392 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+400 (int (*)(...))-40
+408 (int (*)(...))(& _ZTI13QRasterWindow)
+416 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD1Ev
+424 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD0Ev
+432 (int (*)(...))QPaintDevice::devType
+440 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+448 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+456 (int (*)(...))QPaintDevice::initPainter
+464 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow10redirectedEP6QPoint
+472 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QRasterWindow
+ size=56 align=8
+ base size=50 base align=8
+QRasterWindow (0x0x7f542fba5bc8) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+ QPaintDeviceWindow (0x0x7f542fb6d850) 0
+ primary-for QRasterWindow (0x0x7f542fba5bc8)
+ QWindow (0x0x7f542fb6d8c0) 0
+ primary-for QPaintDeviceWindow (0x0x7f542fb6d850)
+ QObject (0x0x7f542fba95a0) 0
+ primary-for QWindow (0x0x7f542fb6d8c0)
+ QSurface (0x0x7f542fba9600) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 352)
+ QPaintDevice (0x0x7f542fba9660) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 416)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7f542fba98a0) 0 empty
+
+Vtable for QSessionManager
+QSessionManager::_ZTV15QSessionManager: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSessionManager)
+16 (int (*)(...))QSessionManager::metaObject
+24 (int (*)(...))QSessionManager::qt_metacast
+32 (int (*)(...))QSessionManager::qt_metacall
+40 (int (*)(...))QSessionManager::~QSessionManager
+48 (int (*)(...))QSessionManager::~QSessionManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSessionManager
+ size=16 align=8
+ base size=16 base align=8
+QSessionManager (0x0x7f542fba5c98) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+ QObject (0x0x7f542fba9840) 0
+ primary-for QSessionManager (0x0x7f542fba5c98)
+
+Class QShortcut::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QShortcut::QPrivateSignal (0x0x7f542fba9a80) 0 empty
+
+Vtable for QShortcut
+QShortcut::_ZTV9QShortcut: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QShortcut)
+16 (int (*)(...))QShortcut::metaObject
+24 (int (*)(...))QShortcut::qt_metacast
+32 (int (*)(...))QShortcut::qt_metacall
+40 (int (*)(...))QShortcut::~QShortcut
+48 (int (*)(...))QShortcut::~QShortcut
+56 (int (*)(...))QShortcut::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QShortcut
+ size=16 align=8
+ base size=16 base align=8
+QShortcut (0x0x7f542fba5d00) 0
+ vptr=((& QShortcut::_ZTV9QShortcut) + 16)
+ QObject (0x0x7f542fba9a20) 0
+ primary-for QShortcut (0x0x7f542fba5d00)
+
+Vtable for QStandardItem
+QStandardItem::_ZTV13QStandardItem: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QStandardItem)
+16 (int (*)(...))QStandardItem::~QStandardItem
+24 (int (*)(...))QStandardItem::~QStandardItem
+32 (int (*)(...))QStandardItem::data
+40 (int (*)(...))QStandardItem::multiData
+48 (int (*)(...))QStandardItem::setData
+56 (int (*)(...))QStandardItem::clone
+64 (int (*)(...))QStandardItem::type
+72 (int (*)(...))QStandardItem::read
+80 (int (*)(...))QStandardItem::write
+88 (int (*)(...))QStandardItem::operator<
+
+Class QStandardItem
+ size=16 align=8
+ base size=16 base align=8
+QStandardItem (0x0x7f542fba9f60) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7f542f80b6c0) 0 empty
+
+Vtable for QStandardItemModel
+QStandardItemModel::_ZTV18QStandardItemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QStandardItemModel)
+16 (int (*)(...))QStandardItemModel::metaObject
+24 (int (*)(...))QStandardItemModel::qt_metacast
+32 (int (*)(...))QStandardItemModel::qt_metacall
+40 (int (*)(...))QStandardItemModel::~QStandardItemModel
+48 (int (*)(...))QStandardItemModel::~QStandardItemModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStandardItemModel::index
+120 (int (*)(...))QStandardItemModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QStandardItemModel::rowCount
+144 (int (*)(...))QStandardItemModel::columnCount
+152 (int (*)(...))QStandardItemModel::hasChildren
+160 (int (*)(...))QStandardItemModel::data
+168 (int (*)(...))QStandardItemModel::setData
+176 (int (*)(...))QStandardItemModel::headerData
+184 (int (*)(...))QStandardItemModel::setHeaderData
+192 (int (*)(...))QStandardItemModel::itemData
+200 (int (*)(...))QStandardItemModel::setItemData
+208 (int (*)(...))QStandardItemModel::clearItemData
+216 (int (*)(...))QStandardItemModel::mimeTypes
+224 (int (*)(...))QStandardItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QStandardItemModel::dropMimeData
+248 (int (*)(...))QStandardItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStandardItemModel::insertRows
+272 (int (*)(...))QStandardItemModel::insertColumns
+280 (int (*)(...))QStandardItemModel::removeRows
+288 (int (*)(...))QStandardItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStandardItemModel::flags
+336 (int (*)(...))QStandardItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QStandardItemModel::roleNames
+376 (int (*)(...))QStandardItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QStandardItemModel
+ size=16 align=8
+ base size=16 base align=8
+QStandardItemModel (0x0x7f542f80e680) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+ QAbstractItemModel (0x0x7f542f80e6e8) 0
+ primary-for QStandardItemModel (0x0x7f542f80e680)
+ QObject (0x0x7f542f80bf60) 0
+ primary-for QAbstractItemModel (0x0x7f542f80e6e8)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7f542f865300) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7f542f89ec00) 0 empty
+
+Vtable for QStyleHints
+QStyleHints::_ZTV11QStyleHints: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QStyleHints)
+16 (int (*)(...))QStyleHints::metaObject
+24 (int (*)(...))QStyleHints::qt_metacast
+32 (int (*)(...))QStyleHints::qt_metacall
+40 (int (*)(...))QStyleHints::~QStyleHints
+48 (int (*)(...))QStyleHints::~QStyleHints
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QStyleHints
+ size=16 align=8
+ base size=16 base align=8
+QStyleHints (0x0x7f542f8a7340) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+ QObject (0x0x7f542f89eba0) 0
+ primary-for QStyleHints (0x0x7f542f8a7340)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7f542f89ede0) 0 empty
+
+Vtable for QTextObject
+QTextObject::_ZTV11QTextObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTextObject)
+16 (int (*)(...))QTextObject::metaObject
+24 (int (*)(...))QTextObject::qt_metacast
+32 (int (*)(...))QTextObject::qt_metacall
+40 (int (*)(...))QTextObject::~QTextObject
+48 (int (*)(...))QTextObject::~QTextObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextObject
+ size=16 align=8
+ base size=16 base align=8
+QTextObject (0x0x7f542f8a73a8) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+ QObject (0x0x7f542f89ed80) 0
+ primary-for QTextObject (0x0x7f542f8a73a8)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7f542f8c4000) 0 empty
+
+Vtable for QTextBlockGroup
+QTextBlockGroup::_ZTV15QTextBlockGroup: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QTextBlockGroup)
+16 (int (*)(...))QTextBlockGroup::metaObject
+24 (int (*)(...))QTextBlockGroup::qt_metacast
+32 (int (*)(...))QTextBlockGroup::qt_metacall
+40 (int (*)(...))QTextBlockGroup::~QTextBlockGroup
+48 (int (*)(...))QTextBlockGroup::~QTextBlockGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextBlockGroup::blockInserted
+120 (int (*)(...))QTextBlockGroup::blockRemoved
+128 (int (*)(...))QTextBlockGroup::blockFormatChanged
+
+Class QTextBlockGroup
+ size=16 align=8
+ base size=16 base align=8
+QTextBlockGroup (0x0x7f542f8a7410) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+ QTextObject (0x0x7f542f8a7478) 0
+ primary-for QTextBlockGroup (0x0x7f542f8a7410)
+ QObject (0x0x7f542f89ef60) 0
+ primary-for QTextObject (0x0x7f542f8a7478)
+
+Vtable for QTextFrameLayoutData
+QTextFrameLayoutData::_ZTV20QTextFrameLayoutData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextFrameLayoutData)
+16 (int (*)(...))QTextFrameLayoutData::~QTextFrameLayoutData
+24 (int (*)(...))QTextFrameLayoutData::~QTextFrameLayoutData
+
+Class QTextFrameLayoutData
+ size=8 align=8
+ base size=8 base align=8
+QTextFrameLayoutData (0x0x7f542f8c4180) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7f542f8c4240) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7f542f8c42a0) 0
+
+Vtable for QTextFrame
+QTextFrame::_ZTV10QTextFrame: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextFrame)
+16 (int (*)(...))QTextFrame::metaObject
+24 (int (*)(...))QTextFrame::qt_metacast
+32 (int (*)(...))QTextFrame::qt_metacall
+40 (int (*)(...))QTextFrame::~QTextFrame
+48 (int (*)(...))QTextFrame::~QTextFrame
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextFrame
+ size=16 align=8
+ base size=16 base align=8
+QTextFrame (0x0x7f542f8a74e0) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+ QTextObject (0x0x7f542f8a7548) 0
+ primary-for QTextFrame (0x0x7f542f8a74e0)
+ QObject (0x0x7f542f8c41e0) 0
+ primary-for QTextObject (0x0x7f542f8a7548)
+
+Vtable for QTextBlockUserData
+QTextBlockUserData::_ZTV18QTextBlockUserData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QTextBlockUserData)
+16 (int (*)(...))QTextBlockUserData::~QTextBlockUserData
+24 (int (*)(...))QTextBlockUserData::~QTextBlockUserData
+
+Class QTextBlockUserData
+ size=8 align=8
+ base size=8 base align=8
+QTextBlockUserData (0x0x7f542f8fa120) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7f542f8fa1e0) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7f542f8fa180) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7f542f93da20) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7f542f9648a0) 0 empty
+
+Vtable for QSyntaxHighlighter
+QSyntaxHighlighter::_ZTV18QSyntaxHighlighter: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSyntaxHighlighter)
+16 (int (*)(...))QSyntaxHighlighter::metaObject
+24 (int (*)(...))QSyntaxHighlighter::qt_metacast
+32 (int (*)(...))QSyntaxHighlighter::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QSyntaxHighlighter
+ size=16 align=8
+ base size=16 base align=8
+QSyntaxHighlighter (0x0x7f542f9696e8) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+ QObject (0x0x7f542f964840) 0
+ primary-for QSyntaxHighlighter (0x0x7f542f9696e8)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7f542f964a20) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7f542f964a80) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7f542f964b40) 0 empty
+
+Vtable for QTextList
+QTextList::_ZTV9QTextList: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTextList)
+16 (int (*)(...))QTextList::metaObject
+24 (int (*)(...))QTextList::qt_metacast
+32 (int (*)(...))QTextList::qt_metacall
+40 (int (*)(...))QTextList::~QTextList
+48 (int (*)(...))QTextList::~QTextList
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextBlockGroup::blockInserted
+120 (int (*)(...))QTextBlockGroup::blockRemoved
+128 (int (*)(...))QTextBlockGroup::blockFormatChanged
+
+Class QTextList
+ size=16 align=8
+ base size=16 base align=8
+QTextList (0x0x7f542f969750) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+ QTextBlockGroup (0x0x7f542f9697b8) 0
+ primary-for QTextList (0x0x7f542f969750)
+ QTextObject (0x0x7f542f969820) 0
+ primary-for QTextBlockGroup (0x0x7f542f9697b8)
+ QObject (0x0x7f542f964ae0) 0
+ primary-for QTextObject (0x0x7f542f969820)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7f542f964f00) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7f542f992780) 0 empty
+
+Vtable for QTextTable
+QTextTable::_ZTV10QTextTable: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextTable)
+16 (int (*)(...))QTextTable::metaObject
+24 (int (*)(...))QTextTable::qt_metacast
+32 (int (*)(...))QTextTable::qt_metacall
+40 (int (*)(...))QTextTable::~QTextTable
+48 (int (*)(...))QTextTable::~QTextTable
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextTable
+ size=16 align=8
+ base size=16 base align=8
+QTextTable (0x0x7f542f969888) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+ QTextFrame (0x0x7f542f9698f0) 0
+ primary-for QTextTable (0x0x7f542f969888)
+ QTextObject (0x0x7f542f969958) 0
+ primary-for QTextFrame (0x0x7f542f9698f0)
+ QObject (0x0x7f542f992720) 0
+ primary-for QTextObject (0x0x7f542f969958)
+
+Class QUndoGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoGroup::QPrivateSignal (0x0x7f542f992b40) 0 empty
+
+Vtable for QUndoGroup
+QUndoGroup::_ZTV10QUndoGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUndoGroup)
+16 (int (*)(...))QUndoGroup::metaObject
+24 (int (*)(...))QUndoGroup::qt_metacast
+32 (int (*)(...))QUndoGroup::qt_metacall
+40 (int (*)(...))QUndoGroup::~QUndoGroup
+48 (int (*)(...))QUndoGroup::~QUndoGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QUndoGroup
+ size=16 align=8
+ base size=16 base align=8
+QUndoGroup (0x0x7f542f9699c0) 0
+ vptr=((& QUndoGroup::_ZTV10QUndoGroup) + 16)
+ QObject (0x0x7f542f992ae0) 0
+ primary-for QUndoGroup (0x0x7f542f9699c0)
+
+Vtable for QUndoCommand
+QUndoCommand::_ZTV12QUndoCommand: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QUndoCommand)
+16 (int (*)(...))QUndoCommand::~QUndoCommand
+24 (int (*)(...))QUndoCommand::~QUndoCommand
+32 (int (*)(...))QUndoCommand::undo
+40 (int (*)(...))QUndoCommand::redo
+48 (int (*)(...))QUndoCommand::id
+56 (int (*)(...))QUndoCommand::mergeWith
+
+Class QUndoCommand
+ size=16 align=8
+ base size=16 base align=8
+QUndoCommand (0x0x7f542f992cc0) 0
+ vptr=((& QUndoCommand::_ZTV12QUndoCommand) + 16)
+
+Class QUndoStack::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoStack::QPrivateSignal (0x0x7f542f992d80) 0 empty
+
+Vtable for QUndoStack
+QUndoStack::_ZTV10QUndoStack: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUndoStack)
+16 (int (*)(...))QUndoStack::metaObject
+24 (int (*)(...))QUndoStack::qt_metacast
+32 (int (*)(...))QUndoStack::qt_metacall
+40 (int (*)(...))QUndoStack::~QUndoStack
+48 (int (*)(...))QUndoStack::~QUndoStack
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QUndoStack
+ size=16 align=8
+ base size=16 base align=8
+QUndoStack (0x0x7f542f969a28) 0
+ vptr=((& QUndoStack::_ZTV10QUndoStack) + 16)
+ QObject (0x0x7f542f992d20) 0
+ primary-for QUndoStack (0x0x7f542f969a28)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7f542f992f60) 0 empty
+
+Vtable for QValidator
+QValidator::_ZTV10QValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QValidator)
+16 (int (*)(...))QValidator::metaObject
+24 (int (*)(...))QValidator::qt_metacast
+32 (int (*)(...))QValidator::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))QValidator::fixup
+
+Class QValidator
+ size=16 align=8
+ base size=16 base align=8
+QValidator (0x0x7f542f969a90) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+ QObject (0x0x7f542f992f00) 0
+ primary-for QValidator (0x0x7f542f969a90)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7f542f9c6240) 0 empty
+
+Vtable for QIntValidator
+QIntValidator::_ZTV13QIntValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QIntValidator)
+16 (int (*)(...))QIntValidator::metaObject
+24 (int (*)(...))QIntValidator::qt_metacast
+32 (int (*)(...))QIntValidator::qt_metacall
+40 (int (*)(...))QIntValidator::~QIntValidator
+48 (int (*)(...))QIntValidator::~QIntValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIntValidator::validate
+120 (int (*)(...))QIntValidator::fixup
+
+Class QIntValidator
+ size=24 align=8
+ base size=24 base align=8
+QIntValidator (0x0x7f542f969af8) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+ QValidator (0x0x7f542f969b60) 0
+ primary-for QIntValidator (0x0x7f542f969af8)
+ QObject (0x0x7f542f9c61e0) 0
+ primary-for QValidator (0x0x7f542f969b60)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7f542f9c6420) 0 empty
+
+Vtable for QDoubleValidator
+QDoubleValidator::_ZTV16QDoubleValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QDoubleValidator)
+16 (int (*)(...))QDoubleValidator::metaObject
+24 (int (*)(...))QDoubleValidator::qt_metacast
+32 (int (*)(...))QDoubleValidator::qt_metacall
+40 (int (*)(...))QDoubleValidator::~QDoubleValidator
+48 (int (*)(...))QDoubleValidator::~QDoubleValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDoubleValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QDoubleValidator
+ size=40 align=8
+ base size=36 base align=8
+QDoubleValidator (0x0x7f542f969bc8) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+ QValidator (0x0x7f542f969c30) 0
+ primary-for QDoubleValidator (0x0x7f542f969bc8)
+ QObject (0x0x7f542f9c63c0) 0
+ primary-for QValidator (0x0x7f542f969c30)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7f542f9c67e0) 0 empty
+
+Vtable for QRegularExpressionValidator
+QRegularExpressionValidator::_ZTV27QRegularExpressionValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QRegularExpressionValidator)
+16 (int (*)(...))QRegularExpressionValidator::metaObject
+24 (int (*)(...))QRegularExpressionValidator::qt_metacast
+32 (int (*)(...))QRegularExpressionValidator::qt_metacall
+40 (int (*)(...))QRegularExpressionValidator::~QRegularExpressionValidator
+48 (int (*)(...))QRegularExpressionValidator::~QRegularExpressionValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QRegularExpressionValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QRegularExpressionValidator
+ size=16 align=8
+ base size=16 base align=8
+QRegularExpressionValidator (0x0x7f542f969c98) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+ QValidator (0x0x7f542f969d00) 0
+ primary-for QRegularExpressionValidator (0x0x7f542f969c98)
+ QObject (0x0x7f542f9c6780) 0
+ primary-for QValidator (0x0x7f542f969d00)
+
+Class QSizePolicy::Bits
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy::Bits (0x0x7f542f9c69c0) 0
+
+Class QSizePolicy
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy (0x0x7f542f9c6960) 0
+
+Class QWidgetData
+ size=88 align=8
+ base size=88 base align=8
+QWidgetData (0x0x7f542f634960) 0
+
+Class QWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidget::QPrivateSignal (0x0x7f542f634a80) 0 empty
+
+Vtable for QWidget
+QWidget::_ZTV7QWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWidget)
+16 (int (*)(...))QWidget::metaObject
+24 (int (*)(...))QWidget::qt_metacast
+32 (int (*)(...))QWidget::qt_metacall
+40 (int (*)(...))QWidget::~QWidget
+48 (int (*)(...))QWidget::~QWidget
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI7QWidget)
+448 (int (*)(...))QWidget::_ZThn16_N7QWidgetD1Ev
+456 (int (*)(...))QWidget::_ZThn16_N7QWidgetD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWidget
+ size=40 align=8
+ base size=40 base align=8
+QWidget (0x0x7f542f63f1c0) 0
+ vptr=((& QWidget::_ZTV7QWidget) + 16)
+ QObject (0x0x7f542f6349c0) 0
+ primary-for QWidget (0x0x7f542f63f1c0)
+ QPaintDevice (0x0x7f542f634a20) 16
+ vptr=((& QWidget::_ZTV7QWidget) + 448)
+
+Class QAbstractButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractButton::QPrivateSignal (0x0x7f542f6ce360) 0 empty
+
+Vtable for QAbstractButton
+QAbstractButton::_ZTV15QAbstractButton: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractButton)
+16 (int (*)(...))QAbstractButton::metaObject
+24 (int (*)(...))QAbstractButton::qt_metacast
+32 (int (*)(...))QAbstractButton::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI15QAbstractButton)
+472 0
+480 0
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractButton
+ size=40 align=8
+ base size=40 base align=8
+QAbstractButton (0x0x7f542f637d00) 0
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 16)
+ QWidget (0x0x7f542f63f3f0) 0
+ primary-for QAbstractButton (0x0x7f542f637d00)
+ QObject (0x0x7f542f6ce2a0) 0
+ primary-for QWidget (0x0x7f542f63f3f0)
+ QPaintDevice (0x0x7f542f6ce300) 16
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 472)
+
+Class QAbstractSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSpinBox::QPrivateSignal (0x0x7f542f6ce5a0) 0 empty
+
+Vtable for QAbstractSpinBox
+QAbstractSpinBox::_ZTV16QAbstractSpinBox: 70 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAbstractSpinBox)
+16 (int (*)(...))QAbstractSpinBox::metaObject
+24 (int (*)(...))QAbstractSpinBox::qt_metacast
+32 (int (*)(...))QAbstractSpinBox::qt_metacall
+40 (int (*)(...))QAbstractSpinBox::~QAbstractSpinBox
+48 (int (*)(...))QAbstractSpinBox::~QAbstractSpinBox
+56 (int (*)(...))QAbstractSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSpinBox::validate
+440 (int (*)(...))QAbstractSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI16QAbstractSpinBox)
+496 (int (*)(...))QAbstractSpinBox::_ZThn16_N16QAbstractSpinBoxD1Ev
+504 (int (*)(...))QAbstractSpinBox::_ZThn16_N16QAbstractSpinBoxD0Ev
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QAbstractSpinBox (0x0x7f542f637d68) 0
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 16)
+ QWidget (0x0x7f542f63f460) 0
+ primary-for QAbstractSpinBox (0x0x7f542f637d68)
+ QObject (0x0x7f542f6ce4e0) 0
+ primary-for QWidget (0x0x7f542f63f460)
+ QPaintDevice (0x0x7f542f6ce540) 16
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 496)
+
+Class QAbstractSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSlider::QPrivateSignal (0x0x7f542f6ced20) 0 empty
+
+Vtable for QAbstractSlider
+QAbstractSlider::_ZTV15QAbstractSlider: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractSlider)
+16 (int (*)(...))QAbstractSlider::metaObject
+24 (int (*)(...))QAbstractSlider::qt_metacast
+32 (int (*)(...))QAbstractSlider::qt_metacall
+40 (int (*)(...))QAbstractSlider::~QAbstractSlider
+48 (int (*)(...))QAbstractSlider::~QAbstractSlider
+56 (int (*)(...))QAbstractSlider::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSlider::sliderChange
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI15QAbstractSlider)
+456 (int (*)(...))QAbstractSlider::_ZThn16_N15QAbstractSliderD1Ev
+464 (int (*)(...))QAbstractSlider::_ZThn16_N15QAbstractSliderD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractSlider
+ size=40 align=8
+ base size=40 base align=8
+QAbstractSlider (0x0x7f542f637f08) 0
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 16)
+ QWidget (0x0x7f542f63f9a0) 0
+ primary-for QAbstractSlider (0x0x7f542f637f08)
+ QObject (0x0x7f542f6cec60) 0
+ primary-for QWidget (0x0x7f542f63f9a0)
+ QPaintDevice (0x0x7f542f6cecc0) 16
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 456)
+
+Class QSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSlider::QPrivateSignal (0x0x7f542f6cef60) 0 empty
+
+Vtable for QSlider
+QSlider::_ZTV7QSlider: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QSlider)
+16 (int (*)(...))QSlider::metaObject
+24 (int (*)(...))QSlider::qt_metacast
+32 (int (*)(...))QSlider::qt_metacall
+40 (int (*)(...))QSlider::~QSlider
+48 (int (*)(...))QSlider::~QSlider
+56 (int (*)(...))QSlider::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSlider::sizeHint
+136 (int (*)(...))QSlider::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSlider::mousePressEvent
+176 (int (*)(...))QSlider::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSlider::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSlider::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSlider::sliderChange
+440 (int (*)(...))QSlider::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI7QSlider)
+464 (int (*)(...))QSlider::_ZThn16_N7QSliderD1Ev
+472 (int (*)(...))QSlider::_ZThn16_N7QSliderD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSlider
+ size=40 align=8
+ base size=40 base align=8
+QSlider (0x0x7f542f637f70) 0
+ vptr=((& QSlider::_ZTV7QSlider) + 16)
+ QAbstractSlider (0x0x7f542f730000) 0
+ primary-for QSlider (0x0x7f542f637f70)
+ QWidget (0x0x7f542f63ff50) 0
+ primary-for QAbstractSlider (0x0x7f542f730000)
+ QObject (0x0x7f542f6ceea0) 0
+ primary-for QWidget (0x0x7f542f63ff50)
+ QPaintDevice (0x0x7f542f6cef00) 16
+ vptr=((& QSlider::_ZTV7QSlider) + 464)
+
+Class QStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyle::QPrivateSignal (0x0x7f542f73f240) 0 empty
+
+Vtable for QStyle
+QStyle::_ZTV6QStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QStyle)
+16 (int (*)(...))QStyle::metaObject
+24 (int (*)(...))QStyle::qt_metacast
+32 (int (*)(...))QStyle::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStyle::polish
+120 (int (*)(...))QStyle::unpolish
+128 (int (*)(...))QStyle::polish
+136 (int (*)(...))QStyle::unpolish
+144 (int (*)(...))QStyle::polish
+152 (int (*)(...))QStyle::itemTextRect
+160 (int (*)(...))QStyle::itemPixmapRect
+168 (int (*)(...))QStyle::drawItemText
+176 (int (*)(...))QStyle::drawItemPixmap
+184 (int (*)(...))QStyle::standardPalette
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+232 (int (*)(...))__cxa_pure_virtual
+240 (int (*)(...))__cxa_pure_virtual
+248 (int (*)(...))__cxa_pure_virtual
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))__cxa_pure_virtual
+272 (int (*)(...))__cxa_pure_virtual
+280 (int (*)(...))__cxa_pure_virtual
+288 (int (*)(...))__cxa_pure_virtual
+
+Class QStyle
+ size=16 align=8
+ base size=16 base align=8
+QStyle (0x0x7f542f730068) 0
+ vptr=((& QStyle::_ZTV6QStyle) + 16)
+ QObject (0x0x7f542f73f1e0) 0
+ primary-for QStyle (0x0x7f542f730068)
+
+Class QTabBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabBar::QPrivateSignal (0x0x7f542f79a300) 0 empty
+
+Vtable for QTabBar
+QTabBar::_ZTV7QTabBar: 70 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QTabBar)
+16 (int (*)(...))QTabBar::metaObject
+24 (int (*)(...))QTabBar::qt_metacast
+32 (int (*)(...))QTabBar::qt_metacall
+40 (int (*)(...))QTabBar::~QTabBar
+48 (int (*)(...))QTabBar::~QTabBar
+56 (int (*)(...))QTabBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTabBar::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QTabBar::sizeHint
+136 (int (*)(...))QTabBar::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTabBar::mousePressEvent
+176 (int (*)(...))QTabBar::mouseReleaseEvent
+184 (int (*)(...))QTabBar::mouseDoubleClickEvent
+192 (int (*)(...))QTabBar::mouseMoveEvent
+200 (int (*)(...))QTabBar::wheelEvent
+208 (int (*)(...))QTabBar::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTabBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTabBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QTabBar::showEvent
+352 (int (*)(...))QTabBar::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTabBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QTabBar::tabSizeHint
+440 (int (*)(...))QTabBar::minimumTabSizeHint
+448 (int (*)(...))QTabBar::tabInserted
+456 (int (*)(...))QTabBar::tabRemoved
+464 (int (*)(...))QTabBar::tabLayoutChange
+472 (int (*)(...))QTabBar::initStyleOption
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI7QTabBar)
+496 (int (*)(...))QTabBar::_ZThn16_N7QTabBarD1Ev
+504 (int (*)(...))QTabBar::_ZThn16_N7QTabBarD0Ev
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTabBar
+ size=40 align=8
+ base size=40 base align=8
+QTabBar (0x0x7f542f730340) 0
+ vptr=((& QTabBar::_ZTV7QTabBar) + 16)
+ QWidget (0x0x7f542f76a9a0) 0
+ primary-for QTabBar (0x0x7f542f730340)
+ QObject (0x0x7f542f79a240) 0
+ primary-for QWidget (0x0x7f542f76a9a0)
+ QPaintDevice (0x0x7f542f79a2a0) 16
+ vptr=((& QTabBar::_ZTV7QTabBar) + 496)
+
+Class QTabWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabWidget::QPrivateSignal (0x0x7f542f79a600) 0 empty
+
+Vtable for QTabWidget
+QTabWidget::_ZTV10QTabWidget: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTabWidget)
+16 (int (*)(...))QTabWidget::metaObject
+24 (int (*)(...))QTabWidget::qt_metacast
+32 (int (*)(...))QTabWidget::qt_metacall
+40 (int (*)(...))QTabWidget::~QTabWidget
+48 (int (*)(...))QTabWidget::~QTabWidget
+56 (int (*)(...))QTabWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QTabWidget::sizeHint
+136 (int (*)(...))QTabWidget::minimumSizeHint
+144 (int (*)(...))QTabWidget::heightForWidth
+152 (int (*)(...))QTabWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QTabWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTabWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTabWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QTabWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTabWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QTabWidget::tabInserted
+440 (int (*)(...))QTabWidget::tabRemoved
+448 (int (*)(...))QTabWidget::initStyleOption
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI10QTabWidget)
+472 (int (*)(...))QTabWidget::_ZThn16_N10QTabWidgetD1Ev
+480 (int (*)(...))QTabWidget::_ZThn16_N10QTabWidgetD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTabWidget
+ size=40 align=8
+ base size=40 base align=8
+QTabWidget (0x0x7f542f7303a8) 0
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 16)
+ QWidget (0x0x7f542f7d6000) 0
+ primary-for QTabWidget (0x0x7f542f7303a8)
+ QObject (0x0x7f542f79a540) 0
+ primary-for QWidget (0x0x7f542f7d6000)
+ QPaintDevice (0x0x7f542f79a5a0) 16
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 472)
+
+Class QRubberBand::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRubberBand::QPrivateSignal (0x0x7f542f79a9c0) 0 empty
+
+Vtable for QRubberBand
+QRubberBand::_ZTV11QRubberBand: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QRubberBand)
+16 (int (*)(...))QRubberBand::metaObject
+24 (int (*)(...))QRubberBand::qt_metacast
+32 (int (*)(...))QRubberBand::qt_metacall
+40 (int (*)(...))QRubberBand::~QRubberBand
+48 (int (*)(...))QRubberBand::~QRubberBand
+56 (int (*)(...))QRubberBand::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QRubberBand::paintEvent
+264 (int (*)(...))QRubberBand::moveEvent
+272 (int (*)(...))QRubberBand::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QRubberBand::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QRubberBand::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QRubberBand::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QRubberBand)
+456 (int (*)(...))QRubberBand::_ZThn16_N11QRubberBandD1Ev
+464 (int (*)(...))QRubberBand::_ZThn16_N11QRubberBandD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QRubberBand
+ size=40 align=8
+ base size=40 base align=8
+QRubberBand (0x0x7f542f730410) 0
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 16)
+ QWidget (0x0x7f542f7d6310) 0
+ primary-for QRubberBand (0x0x7f542f730410)
+ QObject (0x0x7f542f79a900) 0
+ primary-for QWidget (0x0x7f542f7d6310)
+ QPaintDevice (0x0x7f542f79a960) 16
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 456)
+
+Class QFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFrame::QPrivateSignal (0x0x7f542f79ade0) 0 empty
+
+Vtable for QFrame
+QFrame::_ZTV6QFrame: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QFrame)
+16 (int (*)(...))QFrame::metaObject
+24 (int (*)(...))QFrame::qt_metacast
+32 (int (*)(...))QFrame::qt_metacall
+40 (int (*)(...))QFrame::~QFrame
+48 (int (*)(...))QFrame::~QFrame
+56 (int (*)(...))QFrame::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI6QFrame)
+456 (int (*)(...))QFrame::_ZThn16_N6QFrameD1Ev
+464 (int (*)(...))QFrame::_ZThn16_N6QFrameD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFrame
+ size=40 align=8
+ base size=40 base align=8
+QFrame (0x0x7f542f730478) 0
+ vptr=((& QFrame::_ZTV6QFrame) + 16)
+ QWidget (0x0x7f542f7d6460) 0
+ primary-for QFrame (0x0x7f542f730478)
+ QObject (0x0x7f542f79ad20) 0
+ primary-for QWidget (0x0x7f542f7d6460)
+ QPaintDevice (0x0x7f542f79ad80) 16
+ vptr=((& QFrame::_ZTV6QFrame) + 456)
+
+Class QStyleOption
+ size=64 align=8
+ base size=64 base align=8
+QStyleOption (0x0x7f542f410120) 0
+
+Class QStyleOptionFocusRect
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFocusRect (0x0x7f542f7304e0) 0
+ QStyleOption (0x0x7f542f410180) 0
+
+Class QStyleOptionFrame
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFrame (0x0x7f543c79a410) 0
+ QStyleOption (0x0x7f542f4103c0) 0
+
+Class QStyleOptionTabWidgetFrame
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionTabWidgetFrame (0x0x7f543c79a618) 0
+ QStyleOption (0x0x7f542f410900) 0
+
+Class QStyleOptionTabBarBase
+ size=104 align=8
+ base size=101 base align=8
+QStyleOptionTabBarBase (0x0x7f542f730548) 0
+ QStyleOption (0x0x7f542f410b40) 0
+
+Class QStyleOptionHeader
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionHeader (0x0x7f542f7305b0) 0
+ QStyleOption (0x0x7f542f410d80) 0
+
+Class QStyleOptionButton
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionButton (0x0x7f542f730618) 0
+ QStyleOption (0x0x7f542f45f000) 0
+
+Class QStyleOptionTab
+ size=160 align=8
+ base size=156 base align=8
+QStyleOptionTab (0x0x7f542f7307b8) 0
+ QStyleOption (0x0x7f542f45f540) 0
+
+Class QStyleOptionToolBar
+ size=88 align=8
+ base size=88 base align=8
+QStyleOptionToolBar (0x0x7f542f730a90) 0
+ QStyleOption (0x0x7f542f45fc60) 0
+
+Class QStyleOptionProgressBar
+ size=112 align=8
+ base size=111 base align=8
+QStyleOptionProgressBar (0x0x7f542f730c30) 0
+ QStyleOption (0x0x7f542f4d21e0) 0
+
+Class QStyleOptionMenuItem
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionMenuItem (0x0x7f542f730c98) 0
+ QStyleOption (0x0x7f542f4d2420) 0
+
+Class QStyleOptionDockWidget
+ size=96 align=8
+ base size=92 base align=8
+QStyleOptionDockWidget (0x0x7f542f730d00) 0
+ QStyleOption (0x0x7f542f4d2660) 0
+
+Class QStyleOptionViewItem
+ size=208 align=8
+ base size=208 base align=8
+QStyleOptionViewItem (0x0x7f542f730d68) 0
+ QStyleOption (0x0x7f542f4d28a0) 0
+
+Class QStyleOptionToolBox
+ size=104 align=8
+ base size=104 base align=8
+QStyleOptionToolBox (0x0x7f542f730f08) 0
+ QStyleOption (0x0x7f542f4d2de0) 0
+
+Class QStyleOptionRubberBand
+ size=72 align=8
+ base size=69 base align=8
+QStyleOptionRubberBand (0x0x7f542f730f70) 0
+ QStyleOption (0x0x7f542f527060) 0
+
+Class QStyleOptionComplex
+ size=72 align=8
+ base size=72 base align=8
+QStyleOptionComplex (0x0x7f542f52e000) 0
+ QStyleOption (0x0x7f542f527300) 0
+
+Class QStyleOptionSlider
+ size=128 align=8
+ base size=128 base align=8
+QStyleOptionSlider (0x0x7f542f52e068) 0
+ QStyleOptionComplex (0x0x7f542f52e0d0) 0
+ QStyleOption (0x0x7f542f5275a0) 0
+
+Class QStyleOptionSpinBox
+ size=88 align=8
+ base size=81 base align=8
+QStyleOptionSpinBox (0x0x7f542f52e1a0) 0
+ QStyleOptionComplex (0x0x7f542f52e208) 0
+ QStyleOption (0x0x7f542f527960) 0
+
+Class QStyleOptionToolButton
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionToolButton (0x0x7f542f52e2d8) 0
+ QStyleOptionComplex (0x0x7f542f52e340) 0
+ QStyleOption (0x0x7f542f527ba0) 0
+
+Class QStyleOptionComboBox
+ size=144 align=8
+ base size=140 base align=8
+QStyleOptionComboBox (0x0x7f542f52e4e0) 0
+ QStyleOptionComplex (0x0x7f542f52e548) 0
+ QStyleOption (0x0x7f542f5600c0) 0
+
+Class QStyleOptionTitleBar
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionTitleBar (0x0x7f542f52e5b0) 0
+ QStyleOptionComplex (0x0x7f542f52e618) 0
+ QStyleOption (0x0x7f542f560300) 0
+
+Class QStyleOptionGroupBox
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionGroupBox (0x0x7f542f52e680) 0
+ QStyleOptionComplex (0x0x7f542f52e6e8) 0
+ QStyleOption (0x0x7f542f560540) 0
+
+Class QStyleOptionSizeGrip
+ size=80 align=8
+ base size=76 base align=8
+QStyleOptionSizeGrip (0x0x7f542f52e750) 0
+ QStyleOptionComplex (0x0x7f542f52e7b8) 0
+ QStyleOption (0x0x7f542f560780) 0
+
+Class QStyleOptionGraphicsItem
+ size=96 align=8
+ base size=96 base align=8
+QStyleOptionGraphicsItem (0x0x7f542f52e820) 0
+ QStyleOption (0x0x7f542f5609c0) 0
+
+Class QStyleHintReturn
+ size=8 align=4
+ base size=8 base align=4
+QStyleHintReturn (0x0x7f542f560d20) 0
+
+Class QStyleHintReturnMask
+ size=16 align=8
+ base size=16 base align=8
+QStyleHintReturnMask (0x0x7f542f52e888) 0
+ QStyleHintReturn (0x0x7f542f560d80) 0
+
+Class QStyleHintReturnVariant
+ size=40 align=8
+ base size=40 base align=8
+QStyleHintReturnVariant (0x0x7f542f52e958) 0
+ QStyleHintReturn (0x0x7f542f560de0) 0
+
+Class QAbstractItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemDelegate::QPrivateSignal (0x0x7f542f560f60) 0 empty
+
+Vtable for QAbstractItemDelegate
+QAbstractItemDelegate::_ZTV21QAbstractItemDelegate: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QAbstractItemDelegate)
+16 (int (*)(...))QAbstractItemDelegate::metaObject
+24 (int (*)(...))QAbstractItemDelegate::qt_metacast
+32 (int (*)(...))QAbstractItemDelegate::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QAbstractItemDelegate::setEditorData
+152 (int (*)(...))QAbstractItemDelegate::setModelData
+160 (int (*)(...))QAbstractItemDelegate::updateEditorGeometry
+168 (int (*)(...))QAbstractItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+
+Class QAbstractItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemDelegate (0x0x7f542f52ea28) 0
+ vptr=((& QAbstractItemDelegate::_ZTV21QAbstractItemDelegate) + 16)
+ QObject (0x0x7f542f560f00) 0
+ primary-for QAbstractItemDelegate (0x0x7f542f52ea28)
+
+Class QAbstractScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractScrollArea::QPrivateSignal (0x0x7f542f5a51e0) 0 empty
+
+Vtable for QAbstractScrollArea
+QAbstractScrollArea::_ZTV19QAbstractScrollArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractScrollArea)
+16 (int (*)(...))QAbstractScrollArea::metaObject
+24 (int (*)(...))QAbstractScrollArea::qt_metacast
+32 (int (*)(...))QAbstractScrollArea::qt_metacall
+40 (int (*)(...))QAbstractScrollArea::~QAbstractScrollArea
+48 (int (*)(...))QAbstractScrollArea::~QAbstractScrollArea
+56 (int (*)(...))QAbstractScrollArea::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractScrollArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QAbstractScrollArea::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI19QAbstractScrollArea)
+488 (int (*)(...))QAbstractScrollArea::_ZThn16_N19QAbstractScrollAreaD1Ev
+496 (int (*)(...))QAbstractScrollArea::_ZThn16_N19QAbstractScrollAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractScrollArea
+ size=40 align=8
+ base size=40 base align=8
+QAbstractScrollArea (0x0x7f542f52ea90) 0
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 16)
+ QFrame (0x0x7f542f52eaf8) 0
+ primary-for QAbstractScrollArea (0x0x7f542f52ea90)
+ QWidget (0x0x7f542f587690) 0
+ primary-for QFrame (0x0x7f542f52eaf8)
+ QObject (0x0x7f542f5a5120) 0
+ primary-for QWidget (0x0x7f542f587690)
+ QPaintDevice (0x0x7f542f5a5180) 16
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 488)
+
+Class QAbstractItemView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemView::QPrivateSignal (0x0x7f542f5a54e0) 0 empty
+
+Vtable for QAbstractItemView
+QAbstractItemView::_ZTV17QAbstractItemView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAbstractItemView)
+16 (int (*)(...))QAbstractItemView::metaObject
+24 (int (*)(...))QAbstractItemView::qt_metacast
+32 (int (*)(...))QAbstractItemView::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QAbstractScrollArea::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))__cxa_pure_virtual
+504 (int (*)(...))__cxa_pure_virtual
+512 (int (*)(...))__cxa_pure_virtual
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QAbstractItemView::setRootIndex
+560 (int (*)(...))QAbstractItemView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QAbstractItemView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QAbstractItemView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))__cxa_pure_virtual
+704 (int (*)(...))__cxa_pure_virtual
+712 (int (*)(...))__cxa_pure_virtual
+720 (int (*)(...))__cxa_pure_virtual
+728 (int (*)(...))__cxa_pure_virtual
+736 (int (*)(...))__cxa_pure_virtual
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI17QAbstractItemView)
+800 0
+808 0
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractItemView
+ size=40 align=8
+ base size=40 base align=8
+QAbstractItemView (0x0x7f542f52eb60) 0
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 16)
+ QAbstractScrollArea (0x0x7f542f52ebc8) 0
+ primary-for QAbstractItemView (0x0x7f542f52eb60)
+ QFrame (0x0x7f542f52ec30) 0
+ primary-for QAbstractScrollArea (0x0x7f542f52ebc8)
+ QWidget (0x0x7f542f587850) 0
+ primary-for QFrame (0x0x7f542f52ec30)
+ QObject (0x0x7f542f5a5420) 0
+ primary-for QWidget (0x0x7f542f587850)
+ QPaintDevice (0x0x7f542f5a5480) 16
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 800)
+
+Vtable for QAccessibleWidget
+QAccessibleWidget::_ZTV17QAccessibleWidget: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleWidget)
+16 (int (*)(...))QAccessibleWidget::~QAccessibleWidget
+24 (int (*)(...))QAccessibleWidget::~QAccessibleWidget
+32 (int (*)(...))QAccessibleWidget::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleWidget::window
+56 (int (*)(...))QAccessibleWidget::relations
+64 (int (*)(...))QAccessibleWidget::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))QAccessibleWidget::parent
+88 (int (*)(...))QAccessibleWidget::child
+96 (int (*)(...))QAccessibleWidget::childCount
+104 (int (*)(...))QAccessibleWidget::indexOfChild
+112 (int (*)(...))QAccessibleWidget::text
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleWidget::rect
+136 (int (*)(...))QAccessibleWidget::role
+144 (int (*)(...))QAccessibleWidget::state
+152 (int (*)(...))QAccessibleWidget::foregroundColor
+160 (int (*)(...))QAccessibleWidget::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleWidget::interface_cast
+184 (int (*)(...))QAccessibleWidget::actionNames
+192 (int (*)(...))QAccessibleWidget::doAction
+200 (int (*)(...))QAccessibleWidget::keyBindingsForAction
+208 (int (*)(...))-16
+216 (int (*)(...))(& _ZTI17QAccessibleWidget)
+224 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidgetD1Ev
+232 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidgetD0Ev
+240 (int (*)(...))QAccessibleWidget::_ZThn16_NK17QAccessibleWidget11actionNamesEv
+248 (int (*)(...))QAccessibleActionInterface::localizedActionName
+256 (int (*)(...))QAccessibleActionInterface::localizedActionDescription
+264 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidget8doActionERK7QString
+272 (int (*)(...))QAccessibleWidget::_ZThn16_NK17QAccessibleWidget20keyBindingsForActionERK7QString
+
+Class QAccessibleWidget
+ size=32 align=8
+ base size=32 base align=8
+QAccessibleWidget (0x0x7f542f5c4d90) 0
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 16)
+ QAccessibleObject (0x0x7f542f52edd0) 0
+ primary-for QAccessibleWidget (0x0x7f542f5c4d90)
+ QAccessibleInterface (0x0x7f542f5a5e40) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f542f52edd0)
+ QAccessibleActionInterface (0x0x7f542f5a5ea0) 16 nearly-empty
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 224)
+
+Class QApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QApplication::QPrivateSignal (0x0x7f542f220000) 0 empty
+
+Vtable for QApplication
+QApplication::_ZTV12QApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QApplication)
+16 (int (*)(...))QApplication::metaObject
+24 (int (*)(...))QApplication::qt_metacast
+32 (int (*)(...))QApplication::qt_metacall
+40 (int (*)(...))QApplication::~QApplication
+48 (int (*)(...))QApplication::~QApplication
+56 (int (*)(...))QApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QApplication::notify
+120 (int (*)(...))QApplication::compressEvent
+
+Class QApplication
+ size=16 align=8
+ base size=16 base align=8
+QApplication (0x0x7f542f52ee38) 0
+ vptr=((& QApplication::_ZTV12QApplication) + 16)
+ QGuiApplication (0x0x7f542f52eea0) 0
+ primary-for QApplication (0x0x7f542f52ee38)
+ QCoreApplication (0x0x7f542f52ef08) 0
+ primary-for QGuiApplication (0x0x7f542f52eea0)
+ QObject (0x0x7f542f5a5f60) 0
+ primary-for QCoreApplication (0x0x7f542f52ef08)
+
+Vtable for QLayoutItem
+QLayoutItem::_ZTV11QLayoutItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QLayoutItem)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QLayoutItem::hasHeightForWidth
+96 (int (*)(...))QLayoutItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QLayoutItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QLayoutItem::controlTypes
+
+Class QLayoutItem
+ size=16 align=8
+ base size=12 base align=8
+QLayoutItem (0x0x7f542f220240) 0
+ vptr=((& QLayoutItem::_ZTV11QLayoutItem) + 16)
+
+Vtable for QSpacerItem
+QSpacerItem::_ZTV11QSpacerItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSpacerItem)
+16 (int (*)(...))QSpacerItem::~QSpacerItem
+24 (int (*)(...))QSpacerItem::~QSpacerItem
+32 (int (*)(...))QSpacerItem::sizeHint
+40 (int (*)(...))QSpacerItem::minimumSize
+48 (int (*)(...))QSpacerItem::maximumSize
+56 (int (*)(...))QSpacerItem::expandingDirections
+64 (int (*)(...))QSpacerItem::setGeometry
+72 (int (*)(...))QSpacerItem::geometry
+80 (int (*)(...))QSpacerItem::isEmpty
+88 (int (*)(...))QLayoutItem::hasHeightForWidth
+96 (int (*)(...))QLayoutItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QLayoutItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QSpacerItem::spacerItem
+144 (int (*)(...))QLayoutItem::controlTypes
+
+Class QSpacerItem
+ size=40 align=8
+ base size=40 base align=8
+QSpacerItem (0x0x7f542f52ef70) 0
+ vptr=((& QSpacerItem::_ZTV11QSpacerItem) + 16)
+ QLayoutItem (0x0x7f542f220480) 0
+ primary-for QSpacerItem (0x0x7f542f52ef70)
+
+Vtable for QWidgetItem
+QWidgetItem::_ZTV11QWidgetItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWidgetItem)
+16 (int (*)(...))QWidgetItem::~QWidgetItem
+24 (int (*)(...))QWidgetItem::~QWidgetItem
+32 (int (*)(...))QWidgetItem::sizeHint
+40 (int (*)(...))QWidgetItem::minimumSize
+48 (int (*)(...))QWidgetItem::maximumSize
+56 (int (*)(...))QWidgetItem::expandingDirections
+64 (int (*)(...))QWidgetItem::setGeometry
+72 (int (*)(...))QWidgetItem::geometry
+80 (int (*)(...))QWidgetItem::isEmpty
+88 (int (*)(...))QWidgetItem::hasHeightForWidth
+96 (int (*)(...))QWidgetItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QWidgetItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QWidgetItem::controlTypes
+
+Class QWidgetItem
+ size=24 align=8
+ base size=24 base align=8
+QWidgetItem (0x0x7f542f52e138) 0
+ vptr=((& QWidgetItem::_ZTV11QWidgetItem) + 16)
+ QLayoutItem (0x0x7f542f2206c0) 0
+ primary-for QWidgetItem (0x0x7f542f52e138)
+
+Vtable for QWidgetItemV2
+QWidgetItemV2::_ZTV13QWidgetItemV2: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QWidgetItemV2)
+16 (int (*)(...))QWidgetItemV2::~QWidgetItemV2
+24 (int (*)(...))QWidgetItemV2::~QWidgetItemV2
+32 (int (*)(...))QWidgetItemV2::sizeHint
+40 (int (*)(...))QWidgetItemV2::minimumSize
+48 (int (*)(...))QWidgetItemV2::maximumSize
+56 (int (*)(...))QWidgetItem::expandingDirections
+64 (int (*)(...))QWidgetItem::setGeometry
+72 (int (*)(...))QWidgetItem::geometry
+80 (int (*)(...))QWidgetItem::isEmpty
+88 (int (*)(...))QWidgetItem::hasHeightForWidth
+96 (int (*)(...))QWidgetItemV2::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QWidgetItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QWidgetItem::controlTypes
+
+Class QWidgetItemV2
+ size=88 align=8
+ base size=88 base align=8
+QWidgetItemV2 (0x0x7f542f245000) 0
+ vptr=((& QWidgetItemV2::_ZTV13QWidgetItemV2) + 16)
+ QWidgetItem (0x0x7f542f245068) 0
+ primary-for QWidgetItemV2 (0x0x7f542f245000)
+ QLayoutItem (0x0x7f542f2208a0) 0
+ primary-for QWidgetItem (0x0x7f542f245068)
+
+Class QLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLayout::QPrivateSignal (0x0x7f542f220a20) 0 empty
+
+Vtable for QLayout
+QLayout::_ZTV7QLayout: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QLayout)
+16 (int (*)(...))QLayout::metaObject
+24 (int (*)(...))QLayout::qt_metacast
+32 (int (*)(...))QLayout::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLayout::spacing
+120 (int (*)(...))QLayout::setSpacing
+128 (int (*)(...))QLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QLayout::expandingDirections
+160 (int (*)(...))QLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QLayout::setGeometry
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))-16
+264 (int (*)(...))(& _ZTI7QLayout)
+272 0
+280 0
+288 (int (*)(...))__cxa_pure_virtual
+296 (int (*)(...))QLayout::_ZThn16_NK7QLayout11minimumSizeEv
+304 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+312 (int (*)(...))QLayout::_ZThn16_NK7QLayout19expandingDirectionsEv
+320 (int (*)(...))QLayout::_ZThn16_N7QLayout11setGeometryERK5QRect
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+336 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+344 (int (*)(...))QLayoutItem::hasHeightForWidth
+352 (int (*)(...))QLayoutItem::heightForWidth
+360 (int (*)(...))QLayoutItem::minimumHeightForWidth
+368 (int (*)(...))QLayout::_ZThn16_N7QLayout10invalidateEv
+376 (int (*)(...))QLayoutItem::widget
+384 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+392 (int (*)(...))QLayoutItem::spacerItem
+400 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QLayout
+ size=32 align=8
+ base size=28 base align=8
+QLayout (0x0x7f542f5c4ee0) 0
+ vptr=((& QLayout::_ZTV7QLayout) + 16)
+ QObject (0x0x7f542f220960) 0
+ primary-for QLayout (0x0x7f542f5c4ee0)
+ QLayoutItem (0x0x7f542f2209c0) 16
+ vptr=((& QLayout::_ZTV7QLayout) + 272)
+
+Class QGridLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGridLayout::QPrivateSignal (0x0x7f542f220d20) 0 empty
+
+Vtable for QGridLayout
+QGridLayout::_ZTV11QGridLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QGridLayout)
+16 (int (*)(...))QGridLayout::metaObject
+24 (int (*)(...))QGridLayout::qt_metacast
+32 (int (*)(...))QGridLayout::qt_metacall
+40 (int (*)(...))QGridLayout::~QGridLayout
+48 (int (*)(...))QGridLayout::~QGridLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGridLayout::spacing
+120 (int (*)(...))QGridLayout::setSpacing
+128 (int (*)(...))QGridLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QGridLayout::addItem
+152 (int (*)(...))QGridLayout::expandingDirections
+160 (int (*)(...))QGridLayout::minimumSize
+168 (int (*)(...))QGridLayout::maximumSize
+176 (int (*)(...))QGridLayout::setGeometry
+184 (int (*)(...))QGridLayout::itemAt
+192 (int (*)(...))QGridLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QGridLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QGridLayout::sizeHint
+264 (int (*)(...))QGridLayout::hasHeightForWidth
+272 (int (*)(...))QGridLayout::heightForWidth
+280 (int (*)(...))QGridLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QGridLayout)
+304 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayoutD1Ev
+312 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayoutD0Ev
+320 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout8sizeHintEv
+328 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout11minimumSizeEv
+336 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout11maximumSizeEv
+344 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout19expandingDirectionsEv
+352 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout17hasHeightForWidthEv
+384 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout14heightForWidthEi
+392 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout21minimumHeightForWidthEi
+400 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QGridLayout
+ size=32 align=8
+ base size=28 base align=8
+QGridLayout (0x0x7f542f2450d0) 0
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 16)
+ QLayout (0x0x7f542f250230) 0
+ primary-for QGridLayout (0x0x7f542f2450d0)
+ QObject (0x0x7f542f220c60) 0
+ primary-for QLayout (0x0x7f542f250230)
+ QLayoutItem (0x0x7f542f220cc0) 16
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 304)
+
+Class QBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBoxLayout::QPrivateSignal (0x0x7f542f27c000) 0 empty
+
+Vtable for QBoxLayout
+QBoxLayout::_ZTV10QBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QBoxLayout)
+16 (int (*)(...))QBoxLayout::metaObject
+24 (int (*)(...))QBoxLayout::qt_metacast
+32 (int (*)(...))QBoxLayout::qt_metacall
+40 (int (*)(...))QBoxLayout::~QBoxLayout
+48 (int (*)(...))QBoxLayout::~QBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI10QBoxLayout)
+304 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayoutD1Ev
+312 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QBoxLayout (0x0x7f542f245138) 0
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 16)
+ QLayout (0x0x7f542f2502a0) 0
+ primary-for QBoxLayout (0x0x7f542f245138)
+ QObject (0x0x7f542f220f00) 0
+ primary-for QLayout (0x0x7f542f2502a0)
+ QLayoutItem (0x0x7f542f220f60) 16
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 304)
+
+Class QHBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHBoxLayout::QPrivateSignal (0x0x7f542f27c240) 0 empty
+
+Vtable for QHBoxLayout
+QHBoxLayout::_ZTV11QHBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHBoxLayout)
+16 (int (*)(...))QHBoxLayout::metaObject
+24 (int (*)(...))QHBoxLayout::qt_metacast
+32 (int (*)(...))QHBoxLayout::qt_metacall
+40 (int (*)(...))QHBoxLayout::~QHBoxLayout
+48 (int (*)(...))QHBoxLayout::~QHBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QHBoxLayout)
+304 (int (*)(...))QHBoxLayout::_ZThn16_N11QHBoxLayoutD1Ev
+312 (int (*)(...))QHBoxLayout::_ZThn16_N11QHBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QHBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QHBoxLayout (0x0x7f542f2451a0) 0
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 16)
+ QBoxLayout (0x0x7f542f245208) 0
+ primary-for QHBoxLayout (0x0x7f542f2451a0)
+ QLayout (0x0x7f542f2505b0) 0
+ primary-for QBoxLayout (0x0x7f542f245208)
+ QObject (0x0x7f542f27c180) 0
+ primary-for QLayout (0x0x7f542f2505b0)
+ QLayoutItem (0x0x7f542f27c1e0) 16
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 304)
+
+Class QVBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVBoxLayout::QPrivateSignal (0x0x7f542f27c3c0) 0 empty
+
+Vtable for QVBoxLayout
+QVBoxLayout::_ZTV11QVBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QVBoxLayout)
+16 (int (*)(...))QVBoxLayout::metaObject
+24 (int (*)(...))QVBoxLayout::qt_metacast
+32 (int (*)(...))QVBoxLayout::qt_metacall
+40 (int (*)(...))QVBoxLayout::~QVBoxLayout
+48 (int (*)(...))QVBoxLayout::~QVBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QVBoxLayout)
+304 (int (*)(...))QVBoxLayout::_ZThn16_N11QVBoxLayoutD1Ev
+312 (int (*)(...))QVBoxLayout::_ZThn16_N11QVBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QVBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QVBoxLayout (0x0x7f542f245270) 0
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 16)
+ QBoxLayout (0x0x7f542f2452d8) 0
+ primary-for QVBoxLayout (0x0x7f542f245270)
+ QLayout (0x0x7f542f250620) 0
+ primary-for QBoxLayout (0x0x7f542f2452d8)
+ QObject (0x0x7f542f27c300) 0
+ primary-for QLayout (0x0x7f542f250620)
+ QLayoutItem (0x0x7f542f27c360) 16
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 304)
+
+Class QButtonGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QButtonGroup::QPrivateSignal (0x0x7f542f27c4e0) 0 empty
+
+Vtable for QButtonGroup
+QButtonGroup::_ZTV12QButtonGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QButtonGroup)
+16 (int (*)(...))QButtonGroup::metaObject
+24 (int (*)(...))QButtonGroup::qt_metacast
+32 (int (*)(...))QButtonGroup::qt_metacall
+40 (int (*)(...))QButtonGroup::~QButtonGroup
+48 (int (*)(...))QButtonGroup::~QButtonGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QButtonGroup
+ size=16 align=8
+ base size=16 base align=8
+QButtonGroup (0x0x7f542f245340) 0
+ vptr=((& QButtonGroup::_ZTV12QButtonGroup) + 16)
+ QObject (0x0x7f542f27c480) 0
+ primary-for QButtonGroup (0x0x7f542f245340)
+
+Class QCalendarWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCalendarWidget::QPrivateSignal (0x0x7f542f27c720) 0 empty
+
+Vtable for QCalendarWidget
+QCalendarWidget::_ZTV15QCalendarWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QCalendarWidget)
+16 (int (*)(...))QCalendarWidget::metaObject
+24 (int (*)(...))QCalendarWidget::qt_metacast
+32 (int (*)(...))QCalendarWidget::qt_metacall
+40 (int (*)(...))QCalendarWidget::~QCalendarWidget
+48 (int (*)(...))QCalendarWidget::~QCalendarWidget
+56 (int (*)(...))QCalendarWidget::event
+64 (int (*)(...))QCalendarWidget::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCalendarWidget::sizeHint
+136 (int (*)(...))QCalendarWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QCalendarWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QCalendarWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QCalendarWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QCalendarWidget::paintCell
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI15QCalendarWidget)
+456 (int (*)(...))QCalendarWidget::_ZThn16_N15QCalendarWidgetD1Ev
+464 (int (*)(...))QCalendarWidget::_ZThn16_N15QCalendarWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCalendarWidget
+ size=40 align=8
+ base size=40 base align=8
+QCalendarWidget (0x0x7f542f2453a8) 0
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 16)
+ QWidget (0x0x7f542f250690) 0
+ primary-for QCalendarWidget (0x0x7f542f2453a8)
+ QObject (0x0x7f542f27c660) 0
+ primary-for QWidget (0x0x7f542f250690)
+ QPaintDevice (0x0x7f542f27c6c0) 16
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 456)
+
+Class QCheckBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCheckBox::QPrivateSignal (0x0x7f542f27cba0) 0 empty
+
+Vtable for QCheckBox
+QCheckBox::_ZTV9QCheckBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QCheckBox)
+16 (int (*)(...))QCheckBox::metaObject
+24 (int (*)(...))QCheckBox::qt_metacast
+32 (int (*)(...))QCheckBox::qt_metacall
+40 (int (*)(...))QCheckBox::~QCheckBox
+48 (int (*)(...))QCheckBox::~QCheckBox
+56 (int (*)(...))QCheckBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCheckBox::sizeHint
+136 (int (*)(...))QCheckBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QCheckBox::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QCheckBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QCheckBox::hitButton
+440 (int (*)(...))QCheckBox::checkStateSet
+448 (int (*)(...))QCheckBox::nextCheckState
+456 (int (*)(...))QCheckBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI9QCheckBox)
+480 (int (*)(...))QCheckBox::_ZThn16_N9QCheckBoxD1Ev
+488 (int (*)(...))QCheckBox::_ZThn16_N9QCheckBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCheckBox
+ size=40 align=8
+ base size=40 base align=8
+QCheckBox (0x0x7f542f245410) 0
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 16)
+ QAbstractButton (0x0x7f542f245478) 0
+ primary-for QCheckBox (0x0x7f542f245410)
+ QWidget (0x0x7f542f250a80) 0
+ primary-for QAbstractButton (0x0x7f542f245478)
+ QObject (0x0x7f542f27cae0) 0
+ primary-for QWidget (0x0x7f542f250a80)
+ QPaintDevice (0x0x7f542f27cb40) 16
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 480)
+
+Class QDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialog::QPrivateSignal (0x0x7f542f27cde0) 0 empty
+
+Vtable for QDialog
+QDialog::_ZTV7QDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QDialog)
+16 (int (*)(...))QDialog::metaObject
+24 (int (*)(...))QDialog::qt_metacast
+32 (int (*)(...))QDialog::qt_metacall
+40 (int (*)(...))QDialog::~QDialog
+48 (int (*)(...))QDialog::~QDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI7QDialog)
+488 (int (*)(...))QDialog::_ZThn16_N7QDialogD1Ev
+496 (int (*)(...))QDialog::_ZThn16_N7QDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDialog
+ size=40 align=8
+ base size=40 base align=8
+QDialog (0x0x7f542f2454e0) 0
+ vptr=((& QDialog::_ZTV7QDialog) + 16)
+ QWidget (0x0x7f542f250af0) 0
+ primary-for QDialog (0x0x7f542f2454e0)
+ QObject (0x0x7f542f27cd20) 0
+ primary-for QWidget (0x0x7f542f250af0)
+ QPaintDevice (0x0x7f542f27cd80) 16
+ vptr=((& QDialog::_ZTV7QDialog) + 488)
+
+Class QColorDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColorDialog::QPrivateSignal (0x0x7f542f2dd060) 0 empty
+
+Vtable for QColorDialog
+QColorDialog::_ZTV12QColorDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QColorDialog)
+16 (int (*)(...))QColorDialog::metaObject
+24 (int (*)(...))QColorDialog::qt_metacast
+32 (int (*)(...))QColorDialog::qt_metacall
+40 (int (*)(...))QColorDialog::~QColorDialog
+48 (int (*)(...))QColorDialog::~QColorDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QColorDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QColorDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QColorDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QColorDialog)
+488 (int (*)(...))QColorDialog::_ZThn16_N12QColorDialogD1Ev
+496 (int (*)(...))QColorDialog::_ZThn16_N12QColorDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QColorDialog
+ size=40 align=8
+ base size=40 base align=8
+QColorDialog (0x0x7f542f245548) 0
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 16)
+ QDialog (0x0x7f542f2455b0) 0
+ primary-for QColorDialog (0x0x7f542f245548)
+ QWidget (0x0x7f542f250c40) 0
+ primary-for QDialog (0x0x7f542f2455b0)
+ QObject (0x0x7f542f27cf60) 0
+ primary-for QWidget (0x0x7f542f250c40)
+ QPaintDevice (0x0x7f542f2dd000) 16
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 488)
+
+Class QColormap
+ size=8 align=8
+ base size=8 base align=8
+QColormap (0x0x7f542f2dd5a0) 0
+
+Class QColumnView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColumnView::QPrivateSignal (0x0x7f542f2dd6c0) 0 empty
+
+Vtable for QColumnView
+QColumnView::_ZTV11QColumnView: 109 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QColumnView)
+16 (int (*)(...))QColumnView::metaObject
+24 (int (*)(...))QColumnView::qt_metacast
+32 (int (*)(...))QColumnView::qt_metacall
+40 (int (*)(...))QColumnView::~QColumnView
+48 (int (*)(...))QColumnView::~QColumnView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QColumnView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QColumnView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QColumnView::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QColumnView::setModel
+480 (int (*)(...))QColumnView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QColumnView::visualRect
+504 (int (*)(...))QColumnView::scrollTo
+512 (int (*)(...))QColumnView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QColumnView::setRootIndex
+560 (int (*)(...))QAbstractItemView::doItemsLayout
+568 (int (*)(...))QColumnView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QColumnView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QColumnView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QAbstractItemView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QColumnView::moveCursor
+704 (int (*)(...))QColumnView::horizontalOffset
+712 (int (*)(...))QColumnView::verticalOffset
+720 (int (*)(...))QColumnView::isIndexHidden
+728 (int (*)(...))QColumnView::setSelection
+736 (int (*)(...))QColumnView::visualRegionForSelection
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QColumnView::createColumn
+792 (int (*)(...))-16
+800 (int (*)(...))(& _ZTI11QColumnView)
+808 (int (*)(...))QColumnView::_ZThn16_N11QColumnViewD1Ev
+816 (int (*)(...))QColumnView::_ZThn16_N11QColumnViewD0Ev
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QColumnView
+ size=40 align=8
+ base size=40 base align=8
+QColumnView (0x0x7f542f245750) 0
+ vptr=((& QColumnView::_ZTV11QColumnView) + 16)
+ QAbstractItemView (0x0x7f542f2457b8) 0
+ primary-for QColumnView (0x0x7f542f245750)
+ QAbstractScrollArea (0x0x7f542f245820) 0
+ primary-for QAbstractItemView (0x0x7f542f2457b8)
+ QFrame (0x0x7f542f245888) 0
+ primary-for QAbstractScrollArea (0x0x7f542f245820)
+ QWidget (0x0x7f542f250f50) 0
+ primary-for QFrame (0x0x7f542f245888)
+ QObject (0x0x7f542f2dd600) 0
+ primary-for QWidget (0x0x7f542f250f50)
+ QPaintDevice (0x0x7f542f2dd660) 16
+ vptr=((& QColumnView::_ZTV11QColumnView) + 808)
+
+Class QComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QComboBox::QPrivateSignal (0x0x7f542f2dd900) 0 empty
+
+Vtable for QComboBox
+QComboBox::_ZTV9QComboBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QComboBox)
+16 (int (*)(...))QComboBox::metaObject
+24 (int (*)(...))QComboBox::qt_metacast
+32 (int (*)(...))QComboBox::qt_metacall
+40 (int (*)(...))QComboBox::~QComboBox
+48 (int (*)(...))QComboBox::~QComboBox
+56 (int (*)(...))QComboBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QComboBox::sizeHint
+136 (int (*)(...))QComboBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QComboBox::mousePressEvent
+176 (int (*)(...))QComboBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QComboBox::wheelEvent
+208 (int (*)(...))QComboBox::keyPressEvent
+216 (int (*)(...))QComboBox::keyReleaseEvent
+224 (int (*)(...))QComboBox::focusInEvent
+232 (int (*)(...))QComboBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QComboBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QComboBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QComboBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QComboBox::showEvent
+352 (int (*)(...))QComboBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QComboBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QComboBox::inputMethodEvent
+416 (int (*)(...))QComboBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QComboBox::setModel
+440 (int (*)(...))QComboBox::showPopup
+448 (int (*)(...))QComboBox::hidePopup
+456 (int (*)(...))QComboBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI9QComboBox)
+480 (int (*)(...))QComboBox::_ZThn16_N9QComboBoxD1Ev
+488 (int (*)(...))QComboBox::_ZThn16_N9QComboBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QComboBox
+ size=40 align=8
+ base size=40 base align=8
+QComboBox (0x0x7f542f2458f0) 0
+ vptr=((& QComboBox::_ZTV9QComboBox) + 16)
+ QWidget (0x0x7f542f324000) 0
+ primary-for QComboBox (0x0x7f542f2458f0)
+ QObject (0x0x7f542f2dd840) 0
+ primary-for QWidget (0x0x7f542f324000)
+ QPaintDevice (0x0x7f542f2dd8a0) 16
+ vptr=((& QComboBox::_ZTV9QComboBox) + 480)
+
+Class QPushButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPushButton::QPrivateSignal (0x0x7f542f2ddea0) 0 empty
+
+Vtable for QPushButton
+QPushButton::_ZTV11QPushButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPushButton)
+16 (int (*)(...))QPushButton::metaObject
+24 (int (*)(...))QPushButton::qt_metacast
+32 (int (*)(...))QPushButton::qt_metacall
+40 (int (*)(...))QPushButton::~QPushButton
+48 (int (*)(...))QPushButton::~QPushButton
+56 (int (*)(...))QPushButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QPushButton::sizeHint
+136 (int (*)(...))QPushButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QPushButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QPushButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QPushButton::focusInEvent
+232 (int (*)(...))QPushButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QPushButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QPushButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QPushButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI11QPushButton)
+480 (int (*)(...))QPushButton::_ZThn16_N11QPushButtonD1Ev
+488 (int (*)(...))QPushButton::_ZThn16_N11QPushButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QPushButton
+ size=40 align=8
+ base size=40 base align=8
+QPushButton (0x0x7f542f245958) 0
+ vptr=((& QPushButton::_ZTV11QPushButton) + 16)
+ QAbstractButton (0x0x7f542f2459c0) 0
+ primary-for QPushButton (0x0x7f542f245958)
+ QWidget (0x0x7f542f3244d0) 0
+ primary-for QAbstractButton (0x0x7f542f2459c0)
+ QObject (0x0x7f542f2ddde0) 0
+ primary-for QWidget (0x0x7f542f3244d0)
+ QPaintDevice (0x0x7f542f2dde40) 16
+ vptr=((& QPushButton::_ZTV11QPushButton) + 480)
+
+Class QCommandLinkButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommandLinkButton::QPrivateSignal (0x0x7f542f356120) 0 empty
+
+Vtable for QCommandLinkButton
+QCommandLinkButton::_ZTV18QCommandLinkButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QCommandLinkButton)
+16 (int (*)(...))QCommandLinkButton::metaObject
+24 (int (*)(...))QCommandLinkButton::qt_metacast
+32 (int (*)(...))QCommandLinkButton::qt_metacall
+40 (int (*)(...))QCommandLinkButton::~QCommandLinkButton
+48 (int (*)(...))QCommandLinkButton::~QCommandLinkButton
+56 (int (*)(...))QCommandLinkButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCommandLinkButton::sizeHint
+136 (int (*)(...))QCommandLinkButton::minimumSizeHint
+144 (int (*)(...))QCommandLinkButton::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QPushButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QPushButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QPushButton::focusInEvent
+232 (int (*)(...))QPushButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QCommandLinkButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QPushButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QPushButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI18QCommandLinkButton)
+480 (int (*)(...))QCommandLinkButton::_ZThn16_N18QCommandLinkButtonD1Ev
+488 (int (*)(...))QCommandLinkButton::_ZThn16_N18QCommandLinkButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCommandLinkButton
+ size=40 align=8
+ base size=40 base align=8
+QCommandLinkButton (0x0x7f542f245a28) 0
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 16)
+ QPushButton (0x0x7f542f245a90) 0
+ primary-for QCommandLinkButton (0x0x7f542f245a28)
+ QAbstractButton (0x0x7f542f245af8) 0
+ primary-for QPushButton (0x0x7f542f245a90)
+ QWidget (0x0x7f542f324540) 0
+ primary-for QAbstractButton (0x0x7f542f245af8)
+ QObject (0x0x7f542f356060) 0
+ primary-for QWidget (0x0x7f542f324540)
+ QPaintDevice (0x0x7f542f3560c0) 16
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 480)
+
+Class QCommonStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommonStyle::QPrivateSignal (0x0x7f542f356300) 0 empty
+
+Vtable for QCommonStyle
+QCommonStyle::_ZTV12QCommonStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QCommonStyle)
+16 (int (*)(...))QCommonStyle::metaObject
+24 (int (*)(...))QCommonStyle::qt_metacast
+32 (int (*)(...))QCommonStyle::qt_metacall
+40 (int (*)(...))QCommonStyle::~QCommonStyle
+48 (int (*)(...))QCommonStyle::~QCommonStyle
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCommonStyle::polish
+120 (int (*)(...))QCommonStyle::unpolish
+128 (int (*)(...))QCommonStyle::polish
+136 (int (*)(...))QCommonStyle::unpolish
+144 (int (*)(...))QCommonStyle::polish
+152 (int (*)(...))QStyle::itemTextRect
+160 (int (*)(...))QStyle::itemPixmapRect
+168 (int (*)(...))QStyle::drawItemText
+176 (int (*)(...))QStyle::drawItemPixmap
+184 (int (*)(...))QStyle::standardPalette
+192 (int (*)(...))QCommonStyle::drawPrimitive
+200 (int (*)(...))QCommonStyle::drawControl
+208 (int (*)(...))QCommonStyle::subElementRect
+216 (int (*)(...))QCommonStyle::drawComplexControl
+224 (int (*)(...))QCommonStyle::hitTestComplexControl
+232 (int (*)(...))QCommonStyle::subControlRect
+240 (int (*)(...))QCommonStyle::pixelMetric
+248 (int (*)(...))QCommonStyle::sizeFromContents
+256 (int (*)(...))QCommonStyle::styleHint
+264 (int (*)(...))QCommonStyle::standardPixmap
+272 (int (*)(...))QCommonStyle::standardIcon
+280 (int (*)(...))QCommonStyle::generatedIconPixmap
+288 (int (*)(...))QCommonStyle::layoutSpacing
+
+Class QCommonStyle
+ size=16 align=8
+ base size=16 base align=8
+QCommonStyle (0x0x7f542f245b60) 0
+ vptr=((& QCommonStyle::_ZTV12QCommonStyle) + 16)
+ QStyle (0x0x7f542f245bc8) 0
+ primary-for QCommonStyle (0x0x7f542f245b60)
+ QObject (0x0x7f542f3562a0) 0
+ primary-for QStyle (0x0x7f542f245bc8)
+
+Class QCompleter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCompleter::QPrivateSignal (0x0x7f542f3564e0) 0 empty
+
+Vtable for QCompleter
+QCompleter::_ZTV10QCompleter: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QCompleter)
+16 (int (*)(...))QCompleter::metaObject
+24 (int (*)(...))QCompleter::qt_metacast
+32 (int (*)(...))QCompleter::qt_metacall
+40 (int (*)(...))QCompleter::~QCompleter
+48 (int (*)(...))QCompleter::~QCompleter
+56 (int (*)(...))QCompleter::event
+64 (int (*)(...))QCompleter::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCompleter::pathFromIndex
+120 (int (*)(...))QCompleter::splitPath
+
+Class QCompleter
+ size=16 align=8
+ base size=16 base align=8
+QCompleter (0x0x7f542f245c30) 0
+ vptr=((& QCompleter::_ZTV10QCompleter) + 16)
+ QObject (0x0x7f542f356480) 0
+ primary-for QCompleter (0x0x7f542f245c30)
+
+Class QDataWidgetMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDataWidgetMapper::QPrivateSignal (0x0x7f542f356840) 0 empty
+
+Vtable for QDataWidgetMapper
+QDataWidgetMapper::_ZTV17QDataWidgetMapper: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QDataWidgetMapper)
+16 (int (*)(...))QDataWidgetMapper::metaObject
+24 (int (*)(...))QDataWidgetMapper::qt_metacast
+32 (int (*)(...))QDataWidgetMapper::qt_metacall
+40 (int (*)(...))QDataWidgetMapper::~QDataWidgetMapper
+48 (int (*)(...))QDataWidgetMapper::~QDataWidgetMapper
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDataWidgetMapper::setCurrentIndex
+
+Class QDataWidgetMapper
+ size=16 align=8
+ base size=16 base align=8
+QDataWidgetMapper (0x0x7f542f245c98) 0
+ vptr=((& QDataWidgetMapper::_ZTV17QDataWidgetMapper) + 16)
+ QObject (0x0x7f542f3567e0) 0
+ primary-for QDataWidgetMapper (0x0x7f542f245c98)
+
+Class QDateTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateTimeEdit::QPrivateSignal (0x0x7f542f356b40) 0 empty
+
+Vtable for QDateTimeEdit
+QDateTimeEdit::_ZTV13QDateTimeEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QDateTimeEdit)
+16 (int (*)(...))QDateTimeEdit::metaObject
+24 (int (*)(...))QDateTimeEdit::qt_metacast
+32 (int (*)(...))QDateTimeEdit::qt_metacall
+40 (int (*)(...))QDateTimeEdit::~QDateTimeEdit
+48 (int (*)(...))QDateTimeEdit::~QDateTimeEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI13QDateTimeEdit)
+512 (int (*)(...))QDateTimeEdit::_ZThn16_N13QDateTimeEditD1Ev
+520 (int (*)(...))QDateTimeEdit::_ZThn16_N13QDateTimeEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDateTimeEdit
+ size=40 align=8
+ base size=40 base align=8
+QDateTimeEdit (0x0x7f542f245d00) 0
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 16)
+ QAbstractSpinBox (0x0x7f542f245d68) 0
+ primary-for QDateTimeEdit (0x0x7f542f245d00)
+ QWidget (0x0x7f542f324930) 0
+ primary-for QAbstractSpinBox (0x0x7f542f245d68)
+ QObject (0x0x7f542f356a80) 0
+ primary-for QWidget (0x0x7f542f324930)
+ QPaintDevice (0x0x7f542f356ae0) 16
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 512)
+
+Class QTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeEdit::QPrivateSignal (0x0x7f542f3c4120) 0 empty
+
+Vtable for QTimeEdit
+QTimeEdit::_ZTV9QTimeEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTimeEdit)
+16 (int (*)(...))QTimeEdit::metaObject
+24 (int (*)(...))QTimeEdit::qt_metacast
+32 (int (*)(...))QTimeEdit::qt_metacall
+40 (int (*)(...))QTimeEdit::~QTimeEdit
+48 (int (*)(...))QTimeEdit::~QTimeEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI9QTimeEdit)
+512 (int (*)(...))QTimeEdit::_ZThn16_N9QTimeEditD1Ev
+520 (int (*)(...))QTimeEdit::_ZThn16_N9QTimeEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTimeEdit
+ size=40 align=8
+ base size=40 base align=8
+QTimeEdit (0x0x7f542f245f08) 0
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 16)
+ QDateTimeEdit (0x0x7f542f245f70) 0
+ primary-for QTimeEdit (0x0x7f542f245f08)
+ QAbstractSpinBox (0x0x7f542f3c5000) 0
+ primary-for QDateTimeEdit (0x0x7f542f245f70)
+ QWidget (0x0x7f542f324e00) 0
+ primary-for QAbstractSpinBox (0x0x7f542f3c5000)
+ QObject (0x0x7f542f3c4060) 0
+ primary-for QWidget (0x0x7f542f324e00)
+ QPaintDevice (0x0x7f542f3c40c0) 16
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 512)
+
+Class QDateEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateEdit::QPrivateSignal (0x0x7f542f3c42a0) 0 empty
+
+Vtable for QDateEdit
+QDateEdit::_ZTV9QDateEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QDateEdit)
+16 (int (*)(...))QDateEdit::metaObject
+24 (int (*)(...))QDateEdit::qt_metacast
+32 (int (*)(...))QDateEdit::qt_metacall
+40 (int (*)(...))QDateEdit::~QDateEdit
+48 (int (*)(...))QDateEdit::~QDateEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI9QDateEdit)
+512 (int (*)(...))QDateEdit::_ZThn16_N9QDateEditD1Ev
+520 (int (*)(...))QDateEdit::_ZThn16_N9QDateEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDateEdit
+ size=40 align=8
+ base size=40 base align=8
+QDateEdit (0x0x7f542f3c5068) 0
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 16)
+ QDateTimeEdit (0x0x7f542f3c50d0) 0
+ primary-for QDateEdit (0x0x7f542f3c5068)
+ QAbstractSpinBox (0x0x7f542f3c5138) 0
+ primary-for QDateTimeEdit (0x0x7f542f3c50d0)
+ QWidget (0x0x7f542f324e70) 0
+ primary-for QAbstractSpinBox (0x0x7f542f3c5138)
+ QObject (0x0x7f542f3c41e0) 0
+ primary-for QWidget (0x0x7f542f324e70)
+ QPaintDevice (0x0x7f542f3c4240) 16
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 512)
+
+Class QDial::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDial::QPrivateSignal (0x0x7f542f3c4540) 0 empty
+
+Vtable for QDial
+QDial::_ZTV5QDial: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDial)
+16 (int (*)(...))QDial::metaObject
+24 (int (*)(...))QDial::qt_metacast
+32 (int (*)(...))QDial::qt_metacall
+40 (int (*)(...))QDial::~QDial
+48 (int (*)(...))QDial::~QDial
+56 (int (*)(...))QDial::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDial::sizeHint
+136 (int (*)(...))QDial::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDial::mousePressEvent
+176 (int (*)(...))QDial::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QDial::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDial::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDial::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDial::sliderChange
+440 (int (*)(...))QDial::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI5QDial)
+464 (int (*)(...))QDial::_ZThn16_N5QDialD1Ev
+472 (int (*)(...))QDial::_ZThn16_N5QDialD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDial
+ size=40 align=8
+ base size=40 base align=8
+QDial (0x0x7f542f3c51a0) 0
+ vptr=((& QDial::_ZTV5QDial) + 16)
+ QAbstractSlider (0x0x7f542f3c5208) 0
+ primary-for QDial (0x0x7f542f3c51a0)
+ QWidget (0x0x7f542f324ee0) 0
+ primary-for QAbstractSlider (0x0x7f542f3c5208)
+ QObject (0x0x7f542f3c4480) 0
+ primary-for QWidget (0x0x7f542f324ee0)
+ QPaintDevice (0x0x7f542f3c44e0) 16
+ vptr=((& QDial::_ZTV5QDial) + 464)
+
+Class QDialogButtonBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialogButtonBox::QPrivateSignal (0x0x7f542f3c4780) 0 empty
+
+Vtable for QDialogButtonBox
+QDialogButtonBox::_ZTV16QDialogButtonBox: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QDialogButtonBox)
+16 (int (*)(...))QDialogButtonBox::metaObject
+24 (int (*)(...))QDialogButtonBox::qt_metacast
+32 (int (*)(...))QDialogButtonBox::qt_metacall
+40 (int (*)(...))QDialogButtonBox::~QDialogButtonBox
+48 (int (*)(...))QDialogButtonBox::~QDialogButtonBox
+56 (int (*)(...))QDialogButtonBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QDialogButtonBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI16QDialogButtonBox)
+448 (int (*)(...))QDialogButtonBox::_ZThn16_N16QDialogButtonBoxD1Ev
+456 (int (*)(...))QDialogButtonBox::_ZThn16_N16QDialogButtonBoxD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDialogButtonBox
+ size=40 align=8
+ base size=40 base align=8
+QDialogButtonBox (0x0x7f542f3c5270) 0
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 16)
+ QWidget (0x0x7f542f324f50) 0
+ primary-for QDialogButtonBox (0x0x7f542f3c5270)
+ QObject (0x0x7f542f3c46c0) 0
+ primary-for QWidget (0x0x7f542f324f50)
+ QPaintDevice (0x0x7f542f3c4720) 16
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 448)
+
+Class QDockWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDockWidget::QPrivateSignal (0x0x7f542f3c4d80) 0 empty
+
+Vtable for QDockWidget
+QDockWidget::_ZTV11QDockWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QDockWidget)
+16 (int (*)(...))QDockWidget::metaObject
+24 (int (*)(...))QDockWidget::qt_metacast
+32 (int (*)(...))QDockWidget::qt_metacall
+40 (int (*)(...))QDockWidget::~QDockWidget
+48 (int (*)(...))QDockWidget::~QDockWidget
+56 (int (*)(...))QDockWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDockWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QDockWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QDockWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDockWidget::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QDockWidget)
+456 (int (*)(...))QDockWidget::_ZThn16_N11QDockWidgetD1Ev
+464 (int (*)(...))QDockWidget::_ZThn16_N11QDockWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDockWidget
+ size=40 align=8
+ base size=40 base align=8
+QDockWidget (0x0x7f542f3c5410) 0
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 16)
+ QWidget (0x0x7f542f3f4070) 0
+ primary-for QDockWidget (0x0x7f542f3c5410)
+ QObject (0x0x7f542f3c4cc0) 0
+ primary-for QWidget (0x0x7f542f3f4070)
+ QPaintDevice (0x0x7f542f3c4d20) 16
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 456)
+
+Class QTileRules
+ size=8 align=4
+ base size=8 base align=4
+QTileRules (0x0x7f542f0383c0) 0
+
+Class QErrorMessage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QErrorMessage::QPrivateSignal (0x0x7f542f038a20) 0 empty
+
+Vtable for QErrorMessage
+QErrorMessage::_ZTV13QErrorMessage: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QErrorMessage)
+16 (int (*)(...))QErrorMessage::metaObject
+24 (int (*)(...))QErrorMessage::qt_metacast
+32 (int (*)(...))QErrorMessage::qt_metacall
+40 (int (*)(...))QErrorMessage::~QErrorMessage
+48 (int (*)(...))QErrorMessage::~QErrorMessage
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QErrorMessage::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QErrorMessage::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI13QErrorMessage)
+488 (int (*)(...))QErrorMessage::_ZThn16_N13QErrorMessageD1Ev
+496 (int (*)(...))QErrorMessage::_ZThn16_N13QErrorMessageD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QErrorMessage
+ size=40 align=8
+ base size=40 base align=8
+QErrorMessage (0x0x7f542f3c56e8) 0
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 16)
+ QDialog (0x0x7f542f3c5750) 0
+ primary-for QErrorMessage (0x0x7f542f3c56e8)
+ QWidget (0x0x7f542f3f4a80) 0
+ primary-for QDialog (0x0x7f542f3c5750)
+ QObject (0x0x7f542f038960) 0
+ primary-for QWidget (0x0x7f542f3f4a80)
+ QPaintDevice (0x0x7f542f0389c0) 16
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 488)
+
+Class QFileDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDialog::QPrivateSignal (0x0x7f542f038c60) 0 empty
+
+Vtable for QFileDialog
+QFileDialog::_ZTV11QFileDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFileDialog)
+16 (int (*)(...))QFileDialog::metaObject
+24 (int (*)(...))QFileDialog::qt_metacast
+32 (int (*)(...))QFileDialog::qt_metacall
+40 (int (*)(...))QFileDialog::~QFileDialog
+48 (int (*)(...))QFileDialog::~QFileDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QFileDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFileDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QFileDialog::done
+456 (int (*)(...))QFileDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QFileDialog)
+488 (int (*)(...))QFileDialog::_ZThn16_N11QFileDialogD1Ev
+496 (int (*)(...))QFileDialog::_ZThn16_N11QFileDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFileDialog
+ size=40 align=8
+ base size=40 base align=8
+QFileDialog (0x0x7f542f3c57b8) 0
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 16)
+ QDialog (0x0x7f542f3c5820) 0
+ primary-for QFileDialog (0x0x7f542f3c57b8)
+ QWidget (0x0x7f542f3f4af0) 0
+ primary-for QDialog (0x0x7f542f3c5820)
+ QObject (0x0x7f542f038ba0) 0
+ primary-for QWidget (0x0x7f542f3f4af0)
+ QPaintDevice (0x0x7f542f038c00) 16
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 488)
+
+Vtable for QFileIconProvider
+QFileIconProvider::_ZTV17QFileIconProvider: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFileIconProvider)
+16 (int (*)(...))QFileIconProvider::~QFileIconProvider
+24 (int (*)(...))QFileIconProvider::~QFileIconProvider
+32 (int (*)(...))QFileIconProvider::icon
+40 (int (*)(...))QFileIconProvider::icon
+48 (int (*)(...))QAbstractFileIconProvider::type
+56 (int (*)(...))QAbstractFileIconProvider::setOptions
+64 (int (*)(...))QAbstractFileIconProvider::options
+
+Class QFileIconProvider
+ size=16 align=8
+ base size=16 base align=8
+QFileIconProvider (0x0x7f542f3c59c0) 0
+ vptr=((& QFileIconProvider::_ZTV17QFileIconProvider) + 16)
+ QAbstractFileIconProvider (0x0x7f542f0ac540) 0
+ primary-for QFileIconProvider (0x0x7f542f3c59c0)
+
+Class QFocusFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFocusFrame::QPrivateSignal (0x0x7f542f0ac720) 0 empty
+
+Vtable for QFocusFrame
+QFocusFrame::_ZTV11QFocusFrame: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusFrame)
+16 (int (*)(...))QFocusFrame::metaObject
+24 (int (*)(...))QFocusFrame::qt_metacast
+32 (int (*)(...))QFocusFrame::qt_metacall
+40 (int (*)(...))QFocusFrame::~QFocusFrame
+48 (int (*)(...))QFocusFrame::~QFocusFrame
+56 (int (*)(...))QFocusFrame::event
+64 (int (*)(...))QFocusFrame::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFocusFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFocusFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QFocusFrame)
+456 (int (*)(...))QFocusFrame::_ZThn16_N11QFocusFrameD1Ev
+464 (int (*)(...))QFocusFrame::_ZThn16_N11QFocusFrameD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFocusFrame
+ size=40 align=8
+ base size=40 base align=8
+QFocusFrame (0x0x7f542f3c5a28) 0
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 16)
+ QWidget (0x0x7f542f07c460) 0
+ primary-for QFocusFrame (0x0x7f542f3c5a28)
+ QObject (0x0x7f542f0ac660) 0
+ primary-for QWidget (0x0x7f542f07c460)
+ QPaintDevice (0x0x7f542f0ac6c0) 16
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 456)
+
+Class QFontComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontComboBox::QPrivateSignal (0x0x7f542f0ac960) 0 empty
+
+Vtable for QFontComboBox
+QFontComboBox::_ZTV13QFontComboBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QFontComboBox)
+16 (int (*)(...))QFontComboBox::metaObject
+24 (int (*)(...))QFontComboBox::qt_metacast
+32 (int (*)(...))QFontComboBox::qt_metacall
+40 (int (*)(...))QFontComboBox::~QFontComboBox
+48 (int (*)(...))QFontComboBox::~QFontComboBox
+56 (int (*)(...))QFontComboBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFontComboBox::sizeHint
+136 (int (*)(...))QComboBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QComboBox::mousePressEvent
+176 (int (*)(...))QComboBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QComboBox::wheelEvent
+208 (int (*)(...))QComboBox::keyPressEvent
+216 (int (*)(...))QComboBox::keyReleaseEvent
+224 (int (*)(...))QComboBox::focusInEvent
+232 (int (*)(...))QComboBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QComboBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QComboBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QComboBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QComboBox::showEvent
+352 (int (*)(...))QComboBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QComboBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QComboBox::inputMethodEvent
+416 (int (*)(...))QComboBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QComboBox::setModel
+440 (int (*)(...))QComboBox::showPopup
+448 (int (*)(...))QComboBox::hidePopup
+456 (int (*)(...))QComboBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI13QFontComboBox)
+480 (int (*)(...))QFontComboBox::_ZThn16_N13QFontComboBoxD1Ev
+488 (int (*)(...))QFontComboBox::_ZThn16_N13QFontComboBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFontComboBox
+ size=40 align=8
+ base size=40 base align=8
+QFontComboBox (0x0x7f542f3c5a90) 0
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 16)
+ QComboBox (0x0x7f542f3c5af8) 0
+ primary-for QFontComboBox (0x0x7f542f3c5a90)
+ QWidget (0x0x7f542f07c4d0) 0
+ primary-for QComboBox (0x0x7f542f3c5af8)
+ QObject (0x0x7f542f0ac8a0) 0
+ primary-for QWidget (0x0x7f542f07c4d0)
+ QPaintDevice (0x0x7f542f0ac900) 16
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 480)
+
+Class QFontDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontDialog::QPrivateSignal (0x0x7f542f0acf60) 0 empty
+
+Vtable for QFontDialog
+QFontDialog::_ZTV11QFontDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFontDialog)
+16 (int (*)(...))QFontDialog::metaObject
+24 (int (*)(...))QFontDialog::qt_metacast
+32 (int (*)(...))QFontDialog::qt_metacall
+40 (int (*)(...))QFontDialog::~QFontDialog
+48 (int (*)(...))QFontDialog::~QFontDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QFontDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QFontDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFontDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QFontDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QFontDialog)
+488 (int (*)(...))QFontDialog::_ZThn16_N11QFontDialogD1Ev
+496 (int (*)(...))QFontDialog::_ZThn16_N11QFontDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFontDialog
+ size=40 align=8
+ base size=40 base align=8
+QFontDialog (0x0x7f542f3c5c98) 0
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 16)
+ QDialog (0x0x7f542f3c5d00) 0
+ primary-for QFontDialog (0x0x7f542f3c5c98)
+ QWidget (0x0x7f542f07c770) 0
+ primary-for QDialog (0x0x7f542f3c5d00)
+ QObject (0x0x7f542f0acea0) 0
+ primary-for QWidget (0x0x7f542f07c770)
+ QPaintDevice (0x0x7f542f0acf00) 16
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 488)
+
+Class QFormLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFormLayout::QPrivateSignal (0x0x7f542f1065a0) 0 empty
+
+Class QFormLayout::TakeRowResult
+ size=16 align=8
+ base size=16 base align=8
+QFormLayout::TakeRowResult (0x0x7f542f106600) 0
+
+Vtable for QFormLayout
+QFormLayout::_ZTV11QFormLayout: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFormLayout)
+16 (int (*)(...))QFormLayout::metaObject
+24 (int (*)(...))QFormLayout::qt_metacast
+32 (int (*)(...))QFormLayout::qt_metacall
+40 (int (*)(...))QFormLayout::~QFormLayout
+48 (int (*)(...))QFormLayout::~QFormLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFormLayout::spacing
+120 (int (*)(...))QFormLayout::setSpacing
+128 (int (*)(...))QFormLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QFormLayout::addItem
+152 (int (*)(...))QFormLayout::expandingDirections
+160 (int (*)(...))QFormLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QFormLayout::setGeometry
+184 (int (*)(...))QFormLayout::itemAt
+192 (int (*)(...))QFormLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QFormLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QFormLayout::sizeHint
+264 (int (*)(...))QFormLayout::hasHeightForWidth
+272 (int (*)(...))QFormLayout::heightForWidth
+280 (int (*)(...))-16
+288 (int (*)(...))(& _ZTI11QFormLayout)
+296 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayoutD1Ev
+304 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayoutD0Ev
+312 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout8sizeHintEv
+320 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout11minimumSizeEv
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+336 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout19expandingDirectionsEv
+344 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayout11setGeometryERK5QRect
+352 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+368 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout17hasHeightForWidthEv
+376 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout14heightForWidthEi
+384 (int (*)(...))QLayoutItem::minimumHeightForWidth
+392 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayout10invalidateEv
+400 (int (*)(...))QLayoutItem::widget
+408 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+416 (int (*)(...))QLayoutItem::spacerItem
+424 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QFormLayout
+ size=32 align=8
+ base size=28 base align=8
+QFormLayout (0x0x7f542f3c5ea0) 0
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 16)
+ QLayout (0x0x7f542f07ca80) 0
+ primary-for QFormLayout (0x0x7f542f3c5ea0)
+ QObject (0x0x7f542f1064e0) 0
+ primary-for QLayout (0x0x7f542f07ca80)
+ QLayoutItem (0x0x7f542f106540) 16
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 296)
+
+Class QGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGesture::QPrivateSignal (0x0x7f542f166120) 0 empty
+
+Vtable for QGesture
+QGesture::_ZTV8QGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QGesture)
+16 (int (*)(...))QGesture::metaObject
+24 (int (*)(...))QGesture::qt_metacast
+32 (int (*)(...))QGesture::qt_metacall
+40 (int (*)(...))QGesture::~QGesture
+48 (int (*)(...))QGesture::~QGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QGesture
+ size=16 align=8
+ base size=16 base align=8
+QGesture (0x0x7f542f15b958) 0
+ vptr=((& QGesture::_ZTV8QGesture) + 16)
+ QObject (0x0x7f542f1660c0) 0
+ primary-for QGesture (0x0x7f542f15b958)
+
+Class QPanGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPanGesture::QPrivateSignal (0x0x7f542f166300) 0 empty
+
+Vtable for QPanGesture
+QPanGesture::_ZTV11QPanGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPanGesture)
+16 (int (*)(...))QPanGesture::metaObject
+24 (int (*)(...))QPanGesture::qt_metacast
+32 (int (*)(...))QPanGesture::qt_metacall
+40 (int (*)(...))QPanGesture::~QPanGesture
+48 (int (*)(...))QPanGesture::~QPanGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPanGesture
+ size=16 align=8
+ base size=16 base align=8
+QPanGesture (0x0x7f542f15b9c0) 0
+ vptr=((& QPanGesture::_ZTV11QPanGesture) + 16)
+ QGesture (0x0x7f542f15ba28) 0
+ primary-for QPanGesture (0x0x7f542f15b9c0)
+ QObject (0x0x7f542f1662a0) 0
+ primary-for QGesture (0x0x7f542f15ba28)
+
+Class QPinchGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPinchGesture::QPrivateSignal (0x0x7f542f1664e0) 0 empty
+
+Vtable for QPinchGesture
+QPinchGesture::_ZTV13QPinchGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPinchGesture)
+16 (int (*)(...))QPinchGesture::metaObject
+24 (int (*)(...))QPinchGesture::qt_metacast
+32 (int (*)(...))QPinchGesture::qt_metacall
+40 (int (*)(...))QPinchGesture::~QPinchGesture
+48 (int (*)(...))QPinchGesture::~QPinchGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPinchGesture
+ size=16 align=8
+ base size=16 base align=8
+QPinchGesture (0x0x7f542f15ba90) 0
+ vptr=((& QPinchGesture::_ZTV13QPinchGesture) + 16)
+ QGesture (0x0x7f542f15baf8) 0
+ primary-for QPinchGesture (0x0x7f542f15ba90)
+ QObject (0x0x7f542f166480) 0
+ primary-for QGesture (0x0x7f542f15baf8)
+
+Class QSwipeGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSwipeGesture::QPrivateSignal (0x0x7f542f166c60) 0 empty
+
+Vtable for QSwipeGesture
+QSwipeGesture::_ZTV13QSwipeGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSwipeGesture)
+16 (int (*)(...))QSwipeGesture::metaObject
+24 (int (*)(...))QSwipeGesture::qt_metacast
+32 (int (*)(...))QSwipeGesture::qt_metacall
+40 (int (*)(...))QSwipeGesture::~QSwipeGesture
+48 (int (*)(...))QSwipeGesture::~QSwipeGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSwipeGesture
+ size=16 align=8
+ base size=16 base align=8
+QSwipeGesture (0x0x7f542f15bc98) 0
+ vptr=((& QSwipeGesture::_ZTV13QSwipeGesture) + 16)
+ QGesture (0x0x7f542f15bd00) 0
+ primary-for QSwipeGesture (0x0x7f542f15bc98)
+ QObject (0x0x7f542f166c00) 0
+ primary-for QGesture (0x0x7f542f15bd00)
+
+Class QTapGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapGesture::QPrivateSignal (0x0x7f542f166f00) 0 empty
+
+Vtable for QTapGesture
+QTapGesture::_ZTV11QTapGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTapGesture)
+16 (int (*)(...))QTapGesture::metaObject
+24 (int (*)(...))QTapGesture::qt_metacast
+32 (int (*)(...))QTapGesture::qt_metacall
+40 (int (*)(...))QTapGesture::~QTapGesture
+48 (int (*)(...))QTapGesture::~QTapGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTapGesture
+ size=16 align=8
+ base size=16 base align=8
+QTapGesture (0x0x7f542f15bd68) 0
+ vptr=((& QTapGesture::_ZTV11QTapGesture) + 16)
+ QGesture (0x0x7f542f15bdd0) 0
+ primary-for QTapGesture (0x0x7f542f15bd68)
+ QObject (0x0x7f542f166ea0) 0
+ primary-for QGesture (0x0x7f542f15bdd0)
+
+Class QTapAndHoldGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapAndHoldGesture::QPrivateSignal (0x0x7f542f1b4120) 0 empty
+
+Vtable for QTapAndHoldGesture
+QTapAndHoldGesture::_ZTV18QTapAndHoldGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QTapAndHoldGesture)
+16 (int (*)(...))QTapAndHoldGesture::metaObject
+24 (int (*)(...))QTapAndHoldGesture::qt_metacast
+32 (int (*)(...))QTapAndHoldGesture::qt_metacall
+40 (int (*)(...))QTapAndHoldGesture::~QTapAndHoldGesture
+48 (int (*)(...))QTapAndHoldGesture::~QTapAndHoldGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTapAndHoldGesture
+ size=16 align=8
+ base size=16 base align=8
+QTapAndHoldGesture (0x0x7f542f15be38) 0
+ vptr=((& QTapAndHoldGesture::_ZTV18QTapAndHoldGesture) + 16)
+ QGesture (0x0x7f542f15bea0) 0
+ primary-for QTapAndHoldGesture (0x0x7f542f15be38)
+ QObject (0x0x7f542f1b40c0) 0
+ primary-for QGesture (0x0x7f542f15bea0)
+
+Vtable for QGestureEvent
+QGestureEvent::_ZTV13QGestureEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGestureEvent)
+16 (int (*)(...))QGestureEvent::~QGestureEvent
+24 (int (*)(...))QGestureEvent::~QGestureEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGestureEvent
+ size=64 align=8
+ base size=64 base align=8
+QGestureEvent (0x0x7f542f15bf08) 0
+ vptr=((& QGestureEvent::_ZTV13QGestureEvent) + 16)
+ QEvent (0x0x7f542f1b42a0) 0
+ primary-for QGestureEvent (0x0x7f542f15bf08)
+
+Vtable for QGestureRecognizer
+QGestureRecognizer::_ZTV18QGestureRecognizer: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGestureRecognizer)
+16 0
+24 0
+32 (int (*)(...))QGestureRecognizer::create
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGestureRecognizer::reset
+
+Class QGestureRecognizer
+ size=8 align=8
+ base size=8 base align=8
+QGestureRecognizer (0x0x7f542f1b4f00) 0 nearly-empty
+ vptr=((& QGestureRecognizer::_ZTV18QGestureRecognizer) + 16)
+
+Vtable for QGraphicsItem
+QGraphicsItem::_ZTV13QGraphicsItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGraphicsItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsItem::isObscuredBy
+88 (int (*)(...))QGraphicsItem::opaqueArea
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))QGraphicsItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsItem (0x0x7f542ee39240) 0
+ vptr=((& QGraphicsItem::_ZTV13QGraphicsItem) + 16)
+
+Class QGraphicsObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsObject::QPrivateSignal (0x0x7f542eec6420) 0 empty
+
+Vtable for QGraphicsObject
+QGraphicsObject::_ZTV15QGraphicsObject: 53 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsObject)
+16 (int (*)(...))QGraphicsObject::metaObject
+24 (int (*)(...))QGraphicsObject::qt_metacast
+32 (int (*)(...))QGraphicsObject::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QGraphicsObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))-16
+120 (int (*)(...))(& _ZTI15QGraphicsObject)
+128 0
+136 0
+144 (int (*)(...))QGraphicsItem::advance
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))QGraphicsItem::shape
+168 (int (*)(...))QGraphicsItem::contains
+176 (int (*)(...))QGraphicsItem::collidesWithItem
+184 (int (*)(...))QGraphicsItem::collidesWithPath
+192 (int (*)(...))QGraphicsItem::isObscuredBy
+200 (int (*)(...))QGraphicsItem::opaqueArea
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))QGraphicsItem::type
+224 (int (*)(...))QGraphicsItem::sceneEventFilter
+232 (int (*)(...))QGraphicsItem::sceneEvent
+240 (int (*)(...))QGraphicsItem::contextMenuEvent
+248 (int (*)(...))QGraphicsItem::dragEnterEvent
+256 (int (*)(...))QGraphicsItem::dragLeaveEvent
+264 (int (*)(...))QGraphicsItem::dragMoveEvent
+272 (int (*)(...))QGraphicsItem::dropEvent
+280 (int (*)(...))QGraphicsItem::focusInEvent
+288 (int (*)(...))QGraphicsItem::focusOutEvent
+296 (int (*)(...))QGraphicsItem::hoverEnterEvent
+304 (int (*)(...))QGraphicsItem::hoverMoveEvent
+312 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+320 (int (*)(...))QGraphicsItem::keyPressEvent
+328 (int (*)(...))QGraphicsItem::keyReleaseEvent
+336 (int (*)(...))QGraphicsItem::mousePressEvent
+344 (int (*)(...))QGraphicsItem::mouseMoveEvent
+352 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+360 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+368 (int (*)(...))QGraphicsItem::wheelEvent
+376 (int (*)(...))QGraphicsItem::inputMethodEvent
+384 (int (*)(...))QGraphicsItem::inputMethodQuery
+392 (int (*)(...))QGraphicsItem::itemChange
+400 (int (*)(...))QGraphicsItem::supportsExtension
+408 (int (*)(...))QGraphicsItem::setExtension
+416 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsObject
+ size=32 align=8
+ base size=32 base align=8
+QGraphicsObject (0x0x7f542ee578c0) 0
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 16)
+ QObject (0x0x7f542eec6360) 0
+ primary-for QGraphicsObject (0x0x7f542ee578c0)
+ QGraphicsItem (0x0x7f542eec63c0) 16
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 128)
+
+Vtable for QAbstractGraphicsShapeItem
+QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractGraphicsShapeItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QAbstractGraphicsShapeItem::isObscuredBy
+88 (int (*)(...))QAbstractGraphicsShapeItem::opaqueArea
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))QGraphicsItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QAbstractGraphicsShapeItem
+ size=16 align=8
+ base size=16 base align=8
+QAbstractGraphicsShapeItem (0x0x7f542f1c79c0) 0
+ vptr=((& QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem) + 16)
+ QGraphicsItem (0x0x7f542eec64e0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f542f1c79c0)
+
+Vtable for QGraphicsPathItem
+QGraphicsPathItem::_ZTV17QGraphicsPathItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsPathItem)
+16 (int (*)(...))QGraphicsPathItem::~QGraphicsPathItem
+24 (int (*)(...))QGraphicsPathItem::~QGraphicsPathItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPathItem::boundingRect
+48 (int (*)(...))QGraphicsPathItem::shape
+56 (int (*)(...))QGraphicsPathItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPathItem::isObscuredBy
+88 (int (*)(...))QGraphicsPathItem::opaqueArea
+96 (int (*)(...))QGraphicsPathItem::paint
+104 (int (*)(...))QGraphicsPathItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPathItem::supportsExtension
+296 (int (*)(...))QGraphicsPathItem::setExtension
+304 (int (*)(...))QGraphicsPathItem::extension
+
+Class QGraphicsPathItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPathItem (0x0x7f542f1c7a28) 0
+ vptr=((& QGraphicsPathItem::_ZTV17QGraphicsPathItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f542f1c7a90) 0
+ primary-for QGraphicsPathItem (0x0x7f542f1c7a28)
+ QGraphicsItem (0x0x7f542eec6600) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f542f1c7a90)
+
+Vtable for QGraphicsRectItem
+QGraphicsRectItem::_ZTV17QGraphicsRectItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsRectItem)
+16 (int (*)(...))QGraphicsRectItem::~QGraphicsRectItem
+24 (int (*)(...))QGraphicsRectItem::~QGraphicsRectItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsRectItem::boundingRect
+48 (int (*)(...))QGraphicsRectItem::shape
+56 (int (*)(...))QGraphicsRectItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsRectItem::isObscuredBy
+88 (int (*)(...))QGraphicsRectItem::opaqueArea
+96 (int (*)(...))QGraphicsRectItem::paint
+104 (int (*)(...))QGraphicsRectItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsRectItem::supportsExtension
+296 (int (*)(...))QGraphicsRectItem::setExtension
+304 (int (*)(...))QGraphicsRectItem::extension
+
+Class QGraphicsRectItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsRectItem (0x0x7f542f1c7af8) 0
+ vptr=((& QGraphicsRectItem::_ZTV17QGraphicsRectItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f542f1c7b60) 0
+ primary-for QGraphicsRectItem (0x0x7f542f1c7af8)
+ QGraphicsItem (0x0x7f542eec6720) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f542f1c7b60)
+
+Vtable for QGraphicsEllipseItem
+QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsEllipseItem)
+16 (int (*)(...))QGraphicsEllipseItem::~QGraphicsEllipseItem
+24 (int (*)(...))QGraphicsEllipseItem::~QGraphicsEllipseItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsEllipseItem::boundingRect
+48 (int (*)(...))QGraphicsEllipseItem::shape
+56 (int (*)(...))QGraphicsEllipseItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsEllipseItem::isObscuredBy
+88 (int (*)(...))QGraphicsEllipseItem::opaqueArea
+96 (int (*)(...))QGraphicsEllipseItem::paint
+104 (int (*)(...))QGraphicsEllipseItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsEllipseItem::supportsExtension
+296 (int (*)(...))QGraphicsEllipseItem::setExtension
+304 (int (*)(...))QGraphicsEllipseItem::extension
+
+Class QGraphicsEllipseItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsEllipseItem (0x0x7f542f1c7bc8) 0
+ vptr=((& QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f542f1c7c30) 0
+ primary-for QGraphicsEllipseItem (0x0x7f542f1c7bc8)
+ QGraphicsItem (0x0x7f542eec68a0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f542f1c7c30)
+
+Vtable for QGraphicsPolygonItem
+QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsPolygonItem)
+16 (int (*)(...))QGraphicsPolygonItem::~QGraphicsPolygonItem
+24 (int (*)(...))QGraphicsPolygonItem::~QGraphicsPolygonItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPolygonItem::boundingRect
+48 (int (*)(...))QGraphicsPolygonItem::shape
+56 (int (*)(...))QGraphicsPolygonItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPolygonItem::isObscuredBy
+88 (int (*)(...))QGraphicsPolygonItem::opaqueArea
+96 (int (*)(...))QGraphicsPolygonItem::paint
+104 (int (*)(...))QGraphicsPolygonItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPolygonItem::supportsExtension
+296 (int (*)(...))QGraphicsPolygonItem::setExtension
+304 (int (*)(...))QGraphicsPolygonItem::extension
+
+Class QGraphicsPolygonItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPolygonItem (0x0x7f542f1c7c98) 0
+ vptr=((& QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f542f1c7d00) 0
+ primary-for QGraphicsPolygonItem (0x0x7f542f1c7c98)
+ QGraphicsItem (0x0x7f542eec6a20) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f542f1c7d00)
+
+Vtable for QGraphicsLineItem
+QGraphicsLineItem::_ZTV17QGraphicsLineItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsLineItem)
+16 (int (*)(...))QGraphicsLineItem::~QGraphicsLineItem
+24 (int (*)(...))QGraphicsLineItem::~QGraphicsLineItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsLineItem::boundingRect
+48 (int (*)(...))QGraphicsLineItem::shape
+56 (int (*)(...))QGraphicsLineItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsLineItem::isObscuredBy
+88 (int (*)(...))QGraphicsLineItem::opaqueArea
+96 (int (*)(...))QGraphicsLineItem::paint
+104 (int (*)(...))QGraphicsLineItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsLineItem::supportsExtension
+296 (int (*)(...))QGraphicsLineItem::setExtension
+304 (int (*)(...))QGraphicsLineItem::extension
+
+Class QGraphicsLineItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLineItem (0x0x7f542f1c7d68) 0
+ vptr=((& QGraphicsLineItem::_ZTV17QGraphicsLineItem) + 16)
+ QGraphicsItem (0x0x7f542eec6b40) 0
+ primary-for QGraphicsLineItem (0x0x7f542f1c7d68)
+
+Vtable for QGraphicsPixmapItem
+QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsPixmapItem)
+16 (int (*)(...))QGraphicsPixmapItem::~QGraphicsPixmapItem
+24 (int (*)(...))QGraphicsPixmapItem::~QGraphicsPixmapItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPixmapItem::boundingRect
+48 (int (*)(...))QGraphicsPixmapItem::shape
+56 (int (*)(...))QGraphicsPixmapItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPixmapItem::isObscuredBy
+88 (int (*)(...))QGraphicsPixmapItem::opaqueArea
+96 (int (*)(...))QGraphicsPixmapItem::paint
+104 (int (*)(...))QGraphicsPixmapItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPixmapItem::supportsExtension
+296 (int (*)(...))QGraphicsPixmapItem::setExtension
+304 (int (*)(...))QGraphicsPixmapItem::extension
+
+Class QGraphicsPixmapItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPixmapItem (0x0x7f542f1c7dd0) 0
+ vptr=((& QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem) + 16)
+ QGraphicsItem (0x0x7f542eec6cc0) 0
+ primary-for QGraphicsPixmapItem (0x0x7f542f1c7dd0)
+
+Class QGraphicsTextItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTextItem::QPrivateSignal (0x0x7f542eec6f00) 0 empty
+
+Vtable for QGraphicsTextItem
+QGraphicsTextItem::_ZTV17QGraphicsTextItem: 82 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsTextItem)
+16 (int (*)(...))QGraphicsTextItem::metaObject
+24 (int (*)(...))QGraphicsTextItem::qt_metacast
+32 (int (*)(...))QGraphicsTextItem::qt_metacall
+40 (int (*)(...))QGraphicsTextItem::~QGraphicsTextItem
+48 (int (*)(...))QGraphicsTextItem::~QGraphicsTextItem
+56 (int (*)(...))QGraphicsObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsTextItem::boundingRect
+120 (int (*)(...))QGraphicsTextItem::shape
+128 (int (*)(...))QGraphicsTextItem::contains
+136 (int (*)(...))QGraphicsTextItem::paint
+144 (int (*)(...))QGraphicsTextItem::isObscuredBy
+152 (int (*)(...))QGraphicsTextItem::opaqueArea
+160 (int (*)(...))QGraphicsTextItem::type
+168 (int (*)(...))QGraphicsTextItem::sceneEvent
+176 (int (*)(...))QGraphicsTextItem::mousePressEvent
+184 (int (*)(...))QGraphicsTextItem::mouseMoveEvent
+192 (int (*)(...))QGraphicsTextItem::mouseReleaseEvent
+200 (int (*)(...))QGraphicsTextItem::mouseDoubleClickEvent
+208 (int (*)(...))QGraphicsTextItem::contextMenuEvent
+216 (int (*)(...))QGraphicsTextItem::keyPressEvent
+224 (int (*)(...))QGraphicsTextItem::keyReleaseEvent
+232 (int (*)(...))QGraphicsTextItem::focusInEvent
+240 (int (*)(...))QGraphicsTextItem::focusOutEvent
+248 (int (*)(...))QGraphicsTextItem::dragEnterEvent
+256 (int (*)(...))QGraphicsTextItem::dragLeaveEvent
+264 (int (*)(...))QGraphicsTextItem::dragMoveEvent
+272 (int (*)(...))QGraphicsTextItem::dropEvent
+280 (int (*)(...))QGraphicsTextItem::inputMethodEvent
+288 (int (*)(...))QGraphicsTextItem::hoverEnterEvent
+296 (int (*)(...))QGraphicsTextItem::hoverMoveEvent
+304 (int (*)(...))QGraphicsTextItem::hoverLeaveEvent
+312 (int (*)(...))QGraphicsTextItem::inputMethodQuery
+320 (int (*)(...))QGraphicsTextItem::supportsExtension
+328 (int (*)(...))QGraphicsTextItem::setExtension
+336 (int (*)(...))QGraphicsTextItem::extension
+344 (int (*)(...))-16
+352 (int (*)(...))(& _ZTI17QGraphicsTextItem)
+360 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItemD1Ev
+368 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItemD0Ev
+376 (int (*)(...))QGraphicsItem::advance
+384 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem12boundingRectEv
+392 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem5shapeEv
+400 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem8containsERK7QPointF
+408 (int (*)(...))QGraphicsItem::collidesWithItem
+416 (int (*)(...))QGraphicsItem::collidesWithPath
+424 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem12isObscuredByEPK13QGraphicsItem
+432 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem10opaqueAreaEv
+440 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+448 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem4typeEv
+456 (int (*)(...))QGraphicsItem::sceneEventFilter
+464 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem10sceneEventEP6QEvent
+472 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem16contextMenuEventEP30QGraphicsSceneContextMenuEvent
+480 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14dragEnterEventEP27QGraphicsSceneDragDropEvent
+488 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14dragLeaveEventEP27QGraphicsSceneDragDropEvent
+496 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13dragMoveEventEP27QGraphicsSceneDragDropEvent
+504 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem9dropEventEP27QGraphicsSceneDragDropEvent
+512 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem12focusInEventEP11QFocusEvent
+520 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13focusOutEventEP11QFocusEvent
+528 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15hoverEnterEventEP24QGraphicsSceneHoverEvent
+536 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14hoverMoveEventEP24QGraphicsSceneHoverEvent
+544 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+552 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13keyPressEventEP9QKeyEvent
+560 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15keyReleaseEventEP9QKeyEvent
+568 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15mousePressEventEP24QGraphicsSceneMouseEvent
+576 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14mouseMoveEventEP24QGraphicsSceneMouseEvent
+584 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem17mouseReleaseEventEP24QGraphicsSceneMouseEvent
+592 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent
+600 (int (*)(...))QGraphicsItem::wheelEvent
+608 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem16inputMethodEventEP17QInputMethodEvent
+616 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem16inputMethodQueryEN2Qt16InputMethodQueryE
+624 (int (*)(...))QGraphicsItem::itemChange
+632 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem17supportsExtensionEN13QGraphicsItem9ExtensionE
+640 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem12setExtensionEN13QGraphicsItem9ExtensionERK8QVariant
+648 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem9extensionERK8QVariant
+
+Class QGraphicsTextItem
+ size=40 align=8
+ base size=40 base align=8
+QGraphicsTextItem (0x0x7f542f1c7e38) 0
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 16)
+ QGraphicsObject (0x0x7f542ee57d20) 0
+ primary-for QGraphicsTextItem (0x0x7f542f1c7e38)
+ QObject (0x0x7f542eec6e40) 0
+ primary-for QGraphicsObject (0x0x7f542ee57d20)
+ QGraphicsItem (0x0x7f542eec6ea0) 16
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 360)
+
+Vtable for QGraphicsSimpleTextItem
+QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSimpleTextItem)
+16 (int (*)(...))QGraphicsSimpleTextItem::~QGraphicsSimpleTextItem
+24 (int (*)(...))QGraphicsSimpleTextItem::~QGraphicsSimpleTextItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsSimpleTextItem::boundingRect
+48 (int (*)(...))QGraphicsSimpleTextItem::shape
+56 (int (*)(...))QGraphicsSimpleTextItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsSimpleTextItem::isObscuredBy
+88 (int (*)(...))QGraphicsSimpleTextItem::opaqueArea
+96 (int (*)(...))QGraphicsSimpleTextItem::paint
+104 (int (*)(...))QGraphicsSimpleTextItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsSimpleTextItem::supportsExtension
+296 (int (*)(...))QGraphicsSimpleTextItem::setExtension
+304 (int (*)(...))QGraphicsSimpleTextItem::extension
+
+Class QGraphicsSimpleTextItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsSimpleTextItem (0x0x7f542f1c7f70) 0
+ vptr=((& QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f542f1c76e8) 0
+ primary-for QGraphicsSimpleTextItem (0x0x7f542f1c7f70)
+ QGraphicsItem (0x0x7f542ef3a1e0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f542f1c76e8)
+
+Vtable for QGraphicsItemGroup
+QGraphicsItemGroup::_ZTV18QGraphicsItemGroup: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGraphicsItemGroup)
+16 (int (*)(...))QGraphicsItemGroup::~QGraphicsItemGroup
+24 (int (*)(...))QGraphicsItemGroup::~QGraphicsItemGroup
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsItemGroup::boundingRect
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsItemGroup::isObscuredBy
+88 (int (*)(...))QGraphicsItemGroup::opaqueArea
+96 (int (*)(...))QGraphicsItemGroup::paint
+104 (int (*)(...))QGraphicsItemGroup::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsItemGroup
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsItemGroup (0x0x7f542ef47000) 0
+ vptr=((& QGraphicsItemGroup::_ZTV18QGraphicsItemGroup) + 16)
+ QGraphicsItem (0x0x7f542ef3a300) 0
+ primary-for QGraphicsItemGroup (0x0x7f542ef47000)
+
+Vtable for QGraphicsLayoutItem
+QGraphicsLayoutItem::_ZTV19QGraphicsLayoutItem: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsLayoutItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsLayoutItem::setGeometry
+40 (int (*)(...))QGraphicsLayoutItem::getContentsMargins
+48 (int (*)(...))QGraphicsLayoutItem::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsLayoutItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLayoutItem (0x0x7f542ef3a600) 0
+ vptr=((& QGraphicsLayoutItem::_ZTV19QGraphicsLayoutItem) + 16)
+
+Vtable for QGraphicsLayout
+QGraphicsLayout::_ZTV15QGraphicsLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsLayout)
+16 0
+24 0
+32 (int (*)(...))QGraphicsLayoutItem::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))QGraphicsLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLayout (0x0x7f542ef47068) 0
+ vptr=((& QGraphicsLayout::_ZTV15QGraphicsLayout) + 16)
+ QGraphicsLayoutItem (0x0x7f542ef3acc0) 0
+ primary-for QGraphicsLayout (0x0x7f542ef47068)
+
+Class QGraphicsAnchor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsAnchor::QPrivateSignal (0x0x7f542ef7d000) 0 empty
+
+Vtable for QGraphicsAnchor
+QGraphicsAnchor::_ZTV15QGraphicsAnchor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsAnchor)
+16 (int (*)(...))QGraphicsAnchor::metaObject
+24 (int (*)(...))QGraphicsAnchor::qt_metacast
+32 (int (*)(...))QGraphicsAnchor::qt_metacall
+40 (int (*)(...))QGraphicsAnchor::~QGraphicsAnchor
+48 (int (*)(...))QGraphicsAnchor::~QGraphicsAnchor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QGraphicsAnchor
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsAnchor (0x0x7f542ef470d0) 0
+ vptr=((& QGraphicsAnchor::_ZTV15QGraphicsAnchor) + 16)
+ QObject (0x0x7f542ef3af60) 0
+ primary-for QGraphicsAnchor (0x0x7f542ef470d0)
+
+Vtable for QGraphicsAnchorLayout
+QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QGraphicsAnchorLayout)
+16 (int (*)(...))QGraphicsAnchorLayout::~QGraphicsAnchorLayout
+24 (int (*)(...))QGraphicsAnchorLayout::~QGraphicsAnchorLayout
+32 (int (*)(...))QGraphicsAnchorLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsAnchorLayout::sizeHint
+72 (int (*)(...))QGraphicsAnchorLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsAnchorLayout::count
+96 (int (*)(...))QGraphicsAnchorLayout::itemAt
+104 (int (*)(...))QGraphicsAnchorLayout::removeAt
+
+Class QGraphicsAnchorLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsAnchorLayout (0x0x7f542ef47138) 0
+ vptr=((& QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout) + 16)
+ QGraphicsLayout (0x0x7f542ef471a0) 0
+ primary-for QGraphicsAnchorLayout (0x0x7f542ef47138)
+ QGraphicsLayoutItem (0x0x7f542ef7d180) 0
+ primary-for QGraphicsLayout (0x0x7f542ef471a0)
+
+Class QGraphicsEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsEffect::QPrivateSignal (0x0x7f542ef7d300) 0 empty
+
+Vtable for QGraphicsEffect
+QGraphicsEffect::_ZTV15QGraphicsEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsEffect)
+16 (int (*)(...))QGraphicsEffect::metaObject
+24 (int (*)(...))QGraphicsEffect::qt_metacast
+32 (int (*)(...))QGraphicsEffect::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsEffect (0x0x7f542ef47208) 0
+ vptr=((& QGraphicsEffect::_ZTV15QGraphicsEffect) + 16)
+ QObject (0x0x7f542ef7d2a0) 0
+ primary-for QGraphicsEffect (0x0x7f542ef47208)
+
+Class QGraphicsColorizeEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsColorizeEffect::QPrivateSignal (0x0x7f542ef7d8a0) 0 empty
+
+Vtable for QGraphicsColorizeEffect
+QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsColorizeEffect)
+16 (int (*)(...))QGraphicsColorizeEffect::metaObject
+24 (int (*)(...))QGraphicsColorizeEffect::qt_metacast
+32 (int (*)(...))QGraphicsColorizeEffect::qt_metacall
+40 (int (*)(...))QGraphicsColorizeEffect::~QGraphicsColorizeEffect
+48 (int (*)(...))QGraphicsColorizeEffect::~QGraphicsColorizeEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))QGraphicsColorizeEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsColorizeEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsColorizeEffect (0x0x7f542ef473a8) 0
+ vptr=((& QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect) + 16)
+ QGraphicsEffect (0x0x7f542ef47410) 0
+ primary-for QGraphicsColorizeEffect (0x0x7f542ef473a8)
+ QObject (0x0x7f542ef7d840) 0
+ primary-for QGraphicsEffect (0x0x7f542ef47410)
+
+Class QGraphicsBlurEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsBlurEffect::QPrivateSignal (0x0x7f542ef7da80) 0 empty
+
+Vtable for QGraphicsBlurEffect
+QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsBlurEffect)
+16 (int (*)(...))QGraphicsBlurEffect::metaObject
+24 (int (*)(...))QGraphicsBlurEffect::qt_metacast
+32 (int (*)(...))QGraphicsBlurEffect::qt_metacall
+40 (int (*)(...))QGraphicsBlurEffect::~QGraphicsBlurEffect
+48 (int (*)(...))QGraphicsBlurEffect::~QGraphicsBlurEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsBlurEffect::boundingRectFor
+120 (int (*)(...))QGraphicsBlurEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsBlurEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsBlurEffect (0x0x7f542ef47478) 0
+ vptr=((& QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect) + 16)
+ QGraphicsEffect (0x0x7f542ef474e0) 0
+ primary-for QGraphicsBlurEffect (0x0x7f542ef47478)
+ QObject (0x0x7f542ef7da20) 0
+ primary-for QGraphicsEffect (0x0x7f542ef474e0)
+
+Class QGraphicsDropShadowEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsDropShadowEffect::QPrivateSignal (0x0x7f542efe3120) 0 empty
+
+Vtable for QGraphicsDropShadowEffect
+QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QGraphicsDropShadowEffect)
+16 (int (*)(...))QGraphicsDropShadowEffect::metaObject
+24 (int (*)(...))QGraphicsDropShadowEffect::qt_metacast
+32 (int (*)(...))QGraphicsDropShadowEffect::qt_metacall
+40 (int (*)(...))QGraphicsDropShadowEffect::~QGraphicsDropShadowEffect
+48 (int (*)(...))QGraphicsDropShadowEffect::~QGraphicsDropShadowEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsDropShadowEffect::boundingRectFor
+120 (int (*)(...))QGraphicsDropShadowEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsDropShadowEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsDropShadowEffect (0x0x7f542ef47680) 0
+ vptr=((& QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect) + 16)
+ QGraphicsEffect (0x0x7f542ef476e8) 0
+ primary-for QGraphicsDropShadowEffect (0x0x7f542ef47680)
+ QObject (0x0x7f542efe30c0) 0
+ primary-for QGraphicsEffect (0x0x7f542ef476e8)
+
+Class QGraphicsOpacityEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsOpacityEffect::QPrivateSignal (0x0x7f542efe3540) 0 empty
+
+Vtable for QGraphicsOpacityEffect
+QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QGraphicsOpacityEffect)
+16 (int (*)(...))QGraphicsOpacityEffect::metaObject
+24 (int (*)(...))QGraphicsOpacityEffect::qt_metacast
+32 (int (*)(...))QGraphicsOpacityEffect::qt_metacall
+40 (int (*)(...))QGraphicsOpacityEffect::~QGraphicsOpacityEffect
+48 (int (*)(...))QGraphicsOpacityEffect::~QGraphicsOpacityEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))QGraphicsOpacityEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsOpacityEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsOpacityEffect (0x0x7f542ef47750) 0
+ vptr=((& QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect) + 16)
+ QGraphicsEffect (0x0x7f542ef477b8) 0
+ primary-for QGraphicsOpacityEffect (0x0x7f542ef47750)
+ QObject (0x0x7f542efe34e0) 0
+ primary-for QGraphicsEffect (0x0x7f542ef477b8)
+
+Vtable for QGraphicsGridLayout
+QGraphicsGridLayout::_ZTV19QGraphicsGridLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsGridLayout)
+16 (int (*)(...))QGraphicsGridLayout::~QGraphicsGridLayout
+24 (int (*)(...))QGraphicsGridLayout::~QGraphicsGridLayout
+32 (int (*)(...))QGraphicsGridLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsGridLayout::sizeHint
+72 (int (*)(...))QGraphicsGridLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsGridLayout::count
+96 (int (*)(...))QGraphicsGridLayout::itemAt
+104 (int (*)(...))QGraphicsGridLayout::removeAt
+
+Class QGraphicsGridLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsGridLayout (0x0x7f542ef47820) 0
+ vptr=((& QGraphicsGridLayout::_ZTV19QGraphicsGridLayout) + 16)
+ QGraphicsLayout (0x0x7f542ef47888) 0
+ primary-for QGraphicsGridLayout (0x0x7f542ef47820)
+ QGraphicsLayoutItem (0x0x7f542efe36c0) 0
+ primary-for QGraphicsLayout (0x0x7f542ef47888)
+
+Class QGraphicsItemAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsItemAnimation::QPrivateSignal (0x0x7f542efe38a0) 0 empty
+
+Vtable for QGraphicsItemAnimation
+QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QGraphicsItemAnimation)
+16 (int (*)(...))QGraphicsItemAnimation::metaObject
+24 (int (*)(...))QGraphicsItemAnimation::qt_metacast
+32 (int (*)(...))QGraphicsItemAnimation::qt_metacall
+40 (int (*)(...))QGraphicsItemAnimation::~QGraphicsItemAnimation
+48 (int (*)(...))QGraphicsItemAnimation::~QGraphicsItemAnimation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsItemAnimation::beforeAnimationStep
+120 (int (*)(...))QGraphicsItemAnimation::afterAnimationStep
+
+Class QGraphicsItemAnimation
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsItemAnimation (0x0x7f542ef479c0) 0
+ vptr=((& QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation) + 16)
+ QObject (0x0x7f542efe3840) 0
+ primary-for QGraphicsItemAnimation (0x0x7f542ef479c0)
+
+Vtable for QGraphicsLinearLayout
+QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QGraphicsLinearLayout)
+16 (int (*)(...))QGraphicsLinearLayout::~QGraphicsLinearLayout
+24 (int (*)(...))QGraphicsLinearLayout::~QGraphicsLinearLayout
+32 (int (*)(...))QGraphicsLinearLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsLinearLayout::sizeHint
+72 (int (*)(...))QGraphicsLinearLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsLinearLayout::count
+96 (int (*)(...))QGraphicsLinearLayout::itemAt
+104 (int (*)(...))QGraphicsLinearLayout::removeAt
+
+Class QGraphicsLinearLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLinearLayout (0x0x7f542ef47a28) 0
+ vptr=((& QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout) + 16)
+ QGraphicsLayout (0x0x7f542ef47a90) 0
+ primary-for QGraphicsLinearLayout (0x0x7f542ef47a28)
+ QGraphicsLayoutItem (0x0x7f542efe3960) 0
+ primary-for QGraphicsLayout (0x0x7f542ef47a90)
+
+Class QGraphicsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsWidget::QPrivateSignal (0x0x7f542efe3c60) 0 empty
+
+Vtable for QGraphicsWidget
+QGraphicsWidget::_ZTV15QGraphicsWidget: 93 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsWidget)
+16 (int (*)(...))QGraphicsWidget::metaObject
+24 (int (*)(...))QGraphicsWidget::qt_metacast
+32 (int (*)(...))QGraphicsWidget::qt_metacall
+40 (int (*)(...))QGraphicsWidget::~QGraphicsWidget
+48 (int (*)(...))QGraphicsWidget::~QGraphicsWidget
+56 (int (*)(...))QGraphicsWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsWidget::setGeometry
+120 (int (*)(...))QGraphicsWidget::getContentsMargins
+128 (int (*)(...))QGraphicsWidget::type
+136 (int (*)(...))QGraphicsWidget::paint
+144 (int (*)(...))QGraphicsWidget::paintWindowFrame
+152 (int (*)(...))QGraphicsWidget::boundingRect
+160 (int (*)(...))QGraphicsWidget::shape
+168 (int (*)(...))QGraphicsWidget::initStyleOption
+176 (int (*)(...))QGraphicsWidget::sizeHint
+184 (int (*)(...))QGraphicsWidget::updateGeometry
+192 (int (*)(...))QGraphicsWidget::itemChange
+200 (int (*)(...))QGraphicsWidget::propertyChange
+208 (int (*)(...))QGraphicsWidget::sceneEvent
+216 (int (*)(...))QGraphicsWidget::windowFrameEvent
+224 (int (*)(...))QGraphicsWidget::windowFrameSectionAt
+232 (int (*)(...))QGraphicsWidget::changeEvent
+240 (int (*)(...))QGraphicsWidget::closeEvent
+248 (int (*)(...))QGraphicsWidget::focusInEvent
+256 (int (*)(...))QGraphicsWidget::focusNextPrevChild
+264 (int (*)(...))QGraphicsWidget::focusOutEvent
+272 (int (*)(...))QGraphicsWidget::hideEvent
+280 (int (*)(...))QGraphicsWidget::moveEvent
+288 (int (*)(...))QGraphicsWidget::polishEvent
+296 (int (*)(...))QGraphicsWidget::resizeEvent
+304 (int (*)(...))QGraphicsWidget::showEvent
+312 (int (*)(...))QGraphicsWidget::hoverMoveEvent
+320 (int (*)(...))QGraphicsWidget::hoverLeaveEvent
+328 (int (*)(...))QGraphicsWidget::grabMouseEvent
+336 (int (*)(...))QGraphicsWidget::ungrabMouseEvent
+344 (int (*)(...))QGraphicsWidget::grabKeyboardEvent
+352 (int (*)(...))QGraphicsWidget::ungrabKeyboardEvent
+360 (int (*)(...))-16
+368 (int (*)(...))(& _ZTI15QGraphicsWidget)
+376 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidgetD1Ev
+384 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidgetD0Ev
+392 (int (*)(...))QGraphicsItem::advance
+400 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget12boundingRectEv
+408 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget5shapeEv
+416 (int (*)(...))QGraphicsItem::contains
+424 (int (*)(...))QGraphicsItem::collidesWithItem
+432 (int (*)(...))QGraphicsItem::collidesWithPath
+440 (int (*)(...))QGraphicsItem::isObscuredBy
+448 (int (*)(...))QGraphicsItem::opaqueArea
+456 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+464 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget4typeEv
+472 (int (*)(...))QGraphicsItem::sceneEventFilter
+480 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10sceneEventEP6QEvent
+488 (int (*)(...))QGraphicsItem::contextMenuEvent
+496 (int (*)(...))QGraphicsItem::dragEnterEvent
+504 (int (*)(...))QGraphicsItem::dragLeaveEvent
+512 (int (*)(...))QGraphicsItem::dragMoveEvent
+520 (int (*)(...))QGraphicsItem::dropEvent
+528 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget12focusInEventEP11QFocusEvent
+536 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget13focusOutEventEP11QFocusEvent
+544 (int (*)(...))QGraphicsItem::hoverEnterEvent
+552 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget14hoverMoveEventEP24QGraphicsSceneHoverEvent
+560 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+568 (int (*)(...))QGraphicsItem::keyPressEvent
+576 (int (*)(...))QGraphicsItem::keyReleaseEvent
+584 (int (*)(...))QGraphicsItem::mousePressEvent
+592 (int (*)(...))QGraphicsItem::mouseMoveEvent
+600 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+608 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+616 (int (*)(...))QGraphicsItem::wheelEvent
+624 (int (*)(...))QGraphicsItem::inputMethodEvent
+632 (int (*)(...))QGraphicsItem::inputMethodQuery
+640 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant
+648 (int (*)(...))QGraphicsItem::supportsExtension
+656 (int (*)(...))QGraphicsItem::setExtension
+664 (int (*)(...))QGraphicsItem::extension
+672 (int (*)(...))-32
+680 (int (*)(...))(& _ZTI15QGraphicsWidget)
+688 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidgetD1Ev
+696 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidgetD0Ev
+704 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget11setGeometryERK6QRectF
+712 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget18getContentsMarginsEPdS0_S0_S0_
+720 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget14updateGeometryEv
+728 (int (*)(...))QGraphicsLayoutItem::isEmpty
+736 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget8sizeHintEN2Qt8SizeHintERK6QSizeF
+
+Class QGraphicsWidget
+ size=48 align=8
+ base size=48 base align=8
+QGraphicsWidget (0x0x7f542ef3b930) 0
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 16)
+ QGraphicsObject (0x0x7f542ef3b9a0) 0
+ primary-for QGraphicsWidget (0x0x7f542ef3b930)
+ QObject (0x0x7f542efe3b40) 0
+ primary-for QGraphicsObject (0x0x7f542ef3b9a0)
+ QGraphicsItem (0x0x7f542efe3ba0) 16
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 376)
+ QGraphicsLayoutItem (0x0x7f542efe3c00) 32
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 688)
+
+Class QGraphicsProxyWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsProxyWidget::QPrivateSignal (0x0x7f542ec4f120) 0 empty
+
+Vtable for QGraphicsProxyWidget
+QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+16 (int (*)(...))QGraphicsProxyWidget::metaObject
+24 (int (*)(...))QGraphicsProxyWidget::qt_metacast
+32 (int (*)(...))QGraphicsProxyWidget::qt_metacall
+40 (int (*)(...))QGraphicsProxyWidget::~QGraphicsProxyWidget
+48 (int (*)(...))QGraphicsProxyWidget::~QGraphicsProxyWidget
+56 (int (*)(...))QGraphicsProxyWidget::event
+64 (int (*)(...))QGraphicsProxyWidget::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsProxyWidget::setGeometry
+120 (int (*)(...))QGraphicsWidget::getContentsMargins
+128 (int (*)(...))QGraphicsProxyWidget::type
+136 (int (*)(...))QGraphicsProxyWidget::paint
+144 (int (*)(...))QGraphicsWidget::paintWindowFrame
+152 (int (*)(...))QGraphicsWidget::boundingRect
+160 (int (*)(...))QGraphicsWidget::shape
+168 (int (*)(...))QGraphicsWidget::initStyleOption
+176 (int (*)(...))QGraphicsProxyWidget::sizeHint
+184 (int (*)(...))QGraphicsWidget::updateGeometry
+192 (int (*)(...))QGraphicsProxyWidget::itemChange
+200 (int (*)(...))QGraphicsWidget::propertyChange
+208 (int (*)(...))QGraphicsWidget::sceneEvent
+216 (int (*)(...))QGraphicsWidget::windowFrameEvent
+224 (int (*)(...))QGraphicsWidget::windowFrameSectionAt
+232 (int (*)(...))QGraphicsWidget::changeEvent
+240 (int (*)(...))QGraphicsWidget::closeEvent
+248 (int (*)(...))QGraphicsProxyWidget::focusInEvent
+256 (int (*)(...))QGraphicsProxyWidget::focusNextPrevChild
+264 (int (*)(...))QGraphicsProxyWidget::focusOutEvent
+272 (int (*)(...))QGraphicsProxyWidget::hideEvent
+280 (int (*)(...))QGraphicsWidget::moveEvent
+288 (int (*)(...))QGraphicsWidget::polishEvent
+296 (int (*)(...))QGraphicsProxyWidget::resizeEvent
+304 (int (*)(...))QGraphicsProxyWidget::showEvent
+312 (int (*)(...))QGraphicsProxyWidget::hoverMoveEvent
+320 (int (*)(...))QGraphicsProxyWidget::hoverLeaveEvent
+328 (int (*)(...))QGraphicsProxyWidget::grabMouseEvent
+336 (int (*)(...))QGraphicsProxyWidget::ungrabMouseEvent
+344 (int (*)(...))QGraphicsWidget::grabKeyboardEvent
+352 (int (*)(...))QGraphicsWidget::ungrabKeyboardEvent
+360 (int (*)(...))QGraphicsProxyWidget::contextMenuEvent
+368 (int (*)(...))QGraphicsProxyWidget::dragEnterEvent
+376 (int (*)(...))QGraphicsProxyWidget::dragLeaveEvent
+384 (int (*)(...))QGraphicsProxyWidget::dragMoveEvent
+392 (int (*)(...))QGraphicsProxyWidget::dropEvent
+400 (int (*)(...))QGraphicsProxyWidget::hoverEnterEvent
+408 (int (*)(...))QGraphicsProxyWidget::mouseMoveEvent
+416 (int (*)(...))QGraphicsProxyWidget::mousePressEvent
+424 (int (*)(...))QGraphicsProxyWidget::mouseReleaseEvent
+432 (int (*)(...))QGraphicsProxyWidget::mouseDoubleClickEvent
+440 (int (*)(...))QGraphicsProxyWidget::wheelEvent
+448 (int (*)(...))QGraphicsProxyWidget::keyPressEvent
+456 (int (*)(...))QGraphicsProxyWidget::keyReleaseEvent
+464 (int (*)(...))QGraphicsProxyWidget::inputMethodQuery
+472 (int (*)(...))QGraphicsProxyWidget::inputMethodEvent
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+496 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidgetD1Ev
+504 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidgetD0Ev
+512 (int (*)(...))QGraphicsItem::advance
+520 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget12boundingRectEv
+528 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget5shapeEv
+536 (int (*)(...))QGraphicsItem::contains
+544 (int (*)(...))QGraphicsItem::collidesWithItem
+552 (int (*)(...))QGraphicsItem::collidesWithPath
+560 (int (*)(...))QGraphicsItem::isObscuredBy
+568 (int (*)(...))QGraphicsItem::opaqueArea
+576 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+584 (int (*)(...))QGraphicsProxyWidget::_ZThn16_NK20QGraphicsProxyWidget4typeEv
+592 (int (*)(...))QGraphicsItem::sceneEventFilter
+600 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10sceneEventEP6QEvent
+608 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget16contextMenuEventEP30QGraphicsSceneContextMenuEvent
+616 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14dragEnterEventEP27QGraphicsSceneDragDropEvent
+624 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14dragLeaveEventEP27QGraphicsSceneDragDropEvent
+632 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13dragMoveEventEP27QGraphicsSceneDragDropEvent
+640 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget9dropEventEP27QGraphicsSceneDragDropEvent
+648 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget12focusInEventEP11QFocusEvent
+656 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13focusOutEventEP11QFocusEvent
+664 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15hoverEnterEventEP24QGraphicsSceneHoverEvent
+672 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14hoverMoveEventEP24QGraphicsSceneHoverEvent
+680 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+688 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13keyPressEventEP9QKeyEvent
+696 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15keyReleaseEventEP9QKeyEvent
+704 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15mousePressEventEP24QGraphicsSceneMouseEvent
+712 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14mouseMoveEventEP24QGraphicsSceneMouseEvent
+720 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget17mouseReleaseEventEP24QGraphicsSceneMouseEvent
+728 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent
+736 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget10wheelEventEP24QGraphicsSceneWheelEvent
+744 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget16inputMethodEventEP17QInputMethodEvent
+752 (int (*)(...))QGraphicsProxyWidget::_ZThn16_NK20QGraphicsProxyWidget16inputMethodQueryEN2Qt16InputMethodQueryE
+760 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant
+768 (int (*)(...))QGraphicsItem::supportsExtension
+776 (int (*)(...))QGraphicsItem::setExtension
+784 (int (*)(...))QGraphicsItem::extension
+792 (int (*)(...))-32
+800 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+808 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidgetD1Ev
+816 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidgetD0Ev
+824 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidget11setGeometryERK6QRectF
+832 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget18getContentsMarginsEPdS0_S0_S0_
+840 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget14updateGeometryEv
+848 (int (*)(...))QGraphicsLayoutItem::isEmpty
+856 (int (*)(...))QGraphicsProxyWidget::_ZThn32_NK20QGraphicsProxyWidget8sizeHintEN2Qt8SizeHintERK6QSizeF
+
+Class QGraphicsProxyWidget
+ size=48 align=8
+ base size=48 base align=8
+QGraphicsProxyWidget (0x0x7f542ef47bc8) 0
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 16)
+ QGraphicsWidget (0x0x7f542ef3baf0) 0
+ primary-for QGraphicsProxyWidget (0x0x7f542ef47bc8)
+ QGraphicsObject (0x0x7f542ef3bb60) 0
+ primary-for QGraphicsWidget (0x0x7f542ef3baf0)
+ QObject (0x0x7f542ec4f000) 0
+ primary-for QGraphicsObject (0x0x7f542ef3bb60)
+ QGraphicsItem (0x0x7f542ec4f060) 16
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 496)
+ QGraphicsLayoutItem (0x0x7f542ec4f0c0) 32
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 808)
+
+Class QGraphicsScene::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScene::QPrivateSignal (0x0x7f542ec4f480) 0 empty
+
+Vtable for QGraphicsScene
+QGraphicsScene::_ZTV14QGraphicsScene: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGraphicsScene)
+16 (int (*)(...))QGraphicsScene::metaObject
+24 (int (*)(...))QGraphicsScene::qt_metacast
+32 (int (*)(...))QGraphicsScene::qt_metacall
+40 (int (*)(...))QGraphicsScene::~QGraphicsScene
+48 (int (*)(...))QGraphicsScene::~QGraphicsScene
+56 (int (*)(...))QGraphicsScene::event
+64 (int (*)(...))QGraphicsScene::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsScene::inputMethodQuery
+120 (int (*)(...))QGraphicsScene::contextMenuEvent
+128 (int (*)(...))QGraphicsScene::dragEnterEvent
+136 (int (*)(...))QGraphicsScene::dragMoveEvent
+144 (int (*)(...))QGraphicsScene::dragLeaveEvent
+152 (int (*)(...))QGraphicsScene::dropEvent
+160 (int (*)(...))QGraphicsScene::focusInEvent
+168 (int (*)(...))QGraphicsScene::focusOutEvent
+176 (int (*)(...))QGraphicsScene::helpEvent
+184 (int (*)(...))QGraphicsScene::keyPressEvent
+192 (int (*)(...))QGraphicsScene::keyReleaseEvent
+200 (int (*)(...))QGraphicsScene::mousePressEvent
+208 (int (*)(...))QGraphicsScene::mouseMoveEvent
+216 (int (*)(...))QGraphicsScene::mouseReleaseEvent
+224 (int (*)(...))QGraphicsScene::mouseDoubleClickEvent
+232 (int (*)(...))QGraphicsScene::wheelEvent
+240 (int (*)(...))QGraphicsScene::inputMethodEvent
+248 (int (*)(...))QGraphicsScene::drawBackground
+256 (int (*)(...))QGraphicsScene::drawForeground
+264 (int (*)(...))QGraphicsScene::drawItems
+272 (int (*)(...))QGraphicsScene::focusNextPrevChild
+
+Class QGraphicsScene
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsScene (0x0x7f542ef47dd0) 0
+ vptr=((& QGraphicsScene::_ZTV14QGraphicsScene) + 16)
+ QObject (0x0x7f542ec4f420) 0
+ primary-for QGraphicsScene (0x0x7f542ef47dd0)
+
+Vtable for QGraphicsSceneEvent
+QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsSceneEvent)
+16 (int (*)(...))QGraphicsSceneEvent::~QGraphicsSceneEvent
+24 (int (*)(...))QGraphicsSceneEvent::~QGraphicsSceneEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneEvent (0x0x7f542eca3820) 0
+ vptr=((& QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent) + 16)
+ QEvent (0x0x7f542ecb47e0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f542eca3820)
+
+Vtable for QGraphicsSceneMouseEvent
+QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneMouseEvent)
+16 (int (*)(...))QGraphicsSceneMouseEvent::~QGraphicsSceneMouseEvent
+24 (int (*)(...))QGraphicsSceneMouseEvent::~QGraphicsSceneMouseEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneMouseEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneMouseEvent (0x0x7f542eca3888) 0
+ vptr=((& QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f542eca38f0) 0
+ primary-for QGraphicsSceneMouseEvent (0x0x7f542eca3888)
+ QEvent (0x0x7f542ecb49c0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f542eca38f0)
+
+Vtable for QGraphicsSceneWheelEvent
+QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneWheelEvent)
+16 (int (*)(...))QGraphicsSceneWheelEvent::~QGraphicsSceneWheelEvent
+24 (int (*)(...))QGraphicsSceneWheelEvent::~QGraphicsSceneWheelEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneWheelEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneWheelEvent (0x0x7f542eca3958) 0
+ vptr=((& QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f542eca39c0) 0
+ primary-for QGraphicsSceneWheelEvent (0x0x7f542eca3958)
+ QEvent (0x0x7f542ecb4ae0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f542eca39c0)
+
+Vtable for QGraphicsSceneContextMenuEvent
+QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI30QGraphicsSceneContextMenuEvent)
+16 (int (*)(...))QGraphicsSceneContextMenuEvent::~QGraphicsSceneContextMenuEvent
+24 (int (*)(...))QGraphicsSceneContextMenuEvent::~QGraphicsSceneContextMenuEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneContextMenuEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneContextMenuEvent (0x0x7f542eca3a28) 0
+ vptr=((& QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f542eca3a90) 0
+ primary-for QGraphicsSceneContextMenuEvent (0x0x7f542eca3a28)
+ QEvent (0x0x7f542ecb4c00) 0
+ primary-for QGraphicsSceneEvent (0x0x7f542eca3a90)
+
+Vtable for QGraphicsSceneHoverEvent
+QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneHoverEvent)
+16 (int (*)(...))QGraphicsSceneHoverEvent::~QGraphicsSceneHoverEvent
+24 (int (*)(...))QGraphicsSceneHoverEvent::~QGraphicsSceneHoverEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneHoverEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneHoverEvent (0x0x7f542eca3af8) 0
+ vptr=((& QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f542eca3b60) 0
+ primary-for QGraphicsSceneHoverEvent (0x0x7f542eca3af8)
+ QEvent (0x0x7f542ecb4d20) 0
+ primary-for QGraphicsSceneEvent (0x0x7f542eca3b60)
+
+Vtable for QGraphicsSceneHelpEvent
+QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSceneHelpEvent)
+16 (int (*)(...))QGraphicsSceneHelpEvent::~QGraphicsSceneHelpEvent
+24 (int (*)(...))QGraphicsSceneHelpEvent::~QGraphicsSceneHelpEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneHelpEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneHelpEvent (0x0x7f542eca3bc8) 0
+ vptr=((& QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f542eca3c30) 0
+ primary-for QGraphicsSceneHelpEvent (0x0x7f542eca3bc8)
+ QEvent (0x0x7f542ecb4e40) 0
+ primary-for QGraphicsSceneEvent (0x0x7f542eca3c30)
+
+Vtable for QGraphicsSceneDragDropEvent
+QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QGraphicsSceneDragDropEvent)
+16 (int (*)(...))QGraphicsSceneDragDropEvent::~QGraphicsSceneDragDropEvent
+24 (int (*)(...))QGraphicsSceneDragDropEvent::~QGraphicsSceneDragDropEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneDragDropEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneDragDropEvent (0x0x7f542eca3c98) 0
+ vptr=((& QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f542eca3d00) 0
+ primary-for QGraphicsSceneDragDropEvent (0x0x7f542eca3c98)
+ QEvent (0x0x7f542ecb4f60) 0
+ primary-for QGraphicsSceneEvent (0x0x7f542eca3d00)
+
+Vtable for QGraphicsSceneResizeEvent
+QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QGraphicsSceneResizeEvent)
+16 (int (*)(...))QGraphicsSceneResizeEvent::~QGraphicsSceneResizeEvent
+24 (int (*)(...))QGraphicsSceneResizeEvent::~QGraphicsSceneResizeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneResizeEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneResizeEvent (0x0x7f542eca3d68) 0
+ vptr=((& QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f542eca3dd0) 0
+ primary-for QGraphicsSceneResizeEvent (0x0x7f542eca3d68)
+ QEvent (0x0x7f542ed2e060) 0
+ primary-for QGraphicsSceneEvent (0x0x7f542eca3dd0)
+
+Vtable for QGraphicsSceneMoveEvent
+QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSceneMoveEvent)
+16 (int (*)(...))QGraphicsSceneMoveEvent::~QGraphicsSceneMoveEvent
+24 (int (*)(...))QGraphicsSceneMoveEvent::~QGraphicsSceneMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneMoveEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneMoveEvent (0x0x7f542eca3e38) 0
+ vptr=((& QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f542eca3ea0) 0
+ primary-for QGraphicsSceneMoveEvent (0x0x7f542eca3e38)
+ QEvent (0x0x7f542ed2e180) 0
+ primary-for QGraphicsSceneEvent (0x0x7f542eca3ea0)
+
+Class QGraphicsTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTransform::QPrivateSignal (0x0x7f542ed2e300) 0 empty
+
+Vtable for QGraphicsTransform
+QGraphicsTransform::_ZTV18QGraphicsTransform: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGraphicsTransform)
+16 (int (*)(...))QGraphicsTransform::metaObject
+24 (int (*)(...))QGraphicsTransform::qt_metacast
+32 (int (*)(...))QGraphicsTransform::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsTransform
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsTransform (0x0x7f542eca3f08) 0
+ vptr=((& QGraphicsTransform::_ZTV18QGraphicsTransform) + 16)
+ QObject (0x0x7f542ed2e2a0) 0
+ primary-for QGraphicsTransform (0x0x7f542eca3f08)
+
+Class QGraphicsScale::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScale::QPrivateSignal (0x0x7f542ed2e4e0) 0 empty
+
+Vtable for QGraphicsScale
+QGraphicsScale::_ZTV14QGraphicsScale: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGraphicsScale)
+16 (int (*)(...))QGraphicsScale::metaObject
+24 (int (*)(...))QGraphicsScale::qt_metacast
+32 (int (*)(...))QGraphicsScale::qt_metacall
+40 (int (*)(...))QGraphicsScale::~QGraphicsScale
+48 (int (*)(...))QGraphicsScale::~QGraphicsScale
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsScale::applyTo
+
+Class QGraphicsScale
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsScale (0x0x7f542eca3f70) 0
+ vptr=((& QGraphicsScale::_ZTV14QGraphicsScale) + 16)
+ QGraphicsTransform (0x0x7f542eca37b8) 0
+ primary-for QGraphicsScale (0x0x7f542eca3f70)
+ QObject (0x0x7f542ed2e480) 0
+ primary-for QGraphicsTransform (0x0x7f542eca37b8)
+
+Class QGraphicsRotation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsRotation::QPrivateSignal (0x0x7f542ed2e6c0) 0 empty
+
+Vtable for QGraphicsRotation
+QGraphicsRotation::_ZTV17QGraphicsRotation: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsRotation)
+16 (int (*)(...))QGraphicsRotation::metaObject
+24 (int (*)(...))QGraphicsRotation::qt_metacast
+32 (int (*)(...))QGraphicsRotation::qt_metacall
+40 (int (*)(...))QGraphicsRotation::~QGraphicsRotation
+48 (int (*)(...))QGraphicsRotation::~QGraphicsRotation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsRotation::applyTo
+
+Class QGraphicsRotation
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsRotation (0x0x7f542ed4a000) 0
+ vptr=((& QGraphicsRotation::_ZTV17QGraphicsRotation) + 16)
+ QGraphicsTransform (0x0x7f542ed4a068) 0
+ primary-for QGraphicsRotation (0x0x7f542ed4a000)
+ QObject (0x0x7f542ed2e660) 0
+ primary-for QGraphicsTransform (0x0x7f542ed4a068)
+
+Class QScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollArea::QPrivateSignal (0x0x7f542ed2e900) 0 empty
+
+Vtable for QScrollArea
+QScrollArea::_ZTV11QScrollArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QScrollArea)
+16 (int (*)(...))QScrollArea::metaObject
+24 (int (*)(...))QScrollArea::qt_metacast
+32 (int (*)(...))QScrollArea::qt_metacall
+40 (int (*)(...))QScrollArea::~QScrollArea
+48 (int (*)(...))QScrollArea::~QScrollArea
+56 (int (*)(...))QScrollArea::event
+64 (int (*)(...))QScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QScrollArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QScrollArea::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QScrollArea::scrollContentsBy
+464 (int (*)(...))QScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QScrollArea)
+488 (int (*)(...))QScrollArea::_ZThn16_N11QScrollAreaD1Ev
+496 (int (*)(...))QScrollArea::_ZThn16_N11QScrollAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QScrollArea
+ size=40 align=8
+ base size=40 base align=8
+QScrollArea (0x0x7f542ed4a0d0) 0
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 16)
+ QAbstractScrollArea (0x0x7f542ed4a138) 0
+ primary-for QScrollArea (0x0x7f542ed4a0d0)
+ QFrame (0x0x7f542ed4a1a0) 0
+ primary-for QAbstractScrollArea (0x0x7f542ed4a138)
+ QWidget (0x0x7f542ec6a380) 0
+ primary-for QFrame (0x0x7f542ed4a1a0)
+ QObject (0x0x7f542ed2e840) 0
+ primary-for QWidget (0x0x7f542ec6a380)
+ QPaintDevice (0x0x7f542ed2e8a0) 16
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 488)
+
+Class QGraphicsView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsView::QPrivateSignal (0x0x7f542ed2eb40) 0 empty
+
+Vtable for QGraphicsView
+QGraphicsView::_ZTV13QGraphicsView: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGraphicsView)
+16 (int (*)(...))QGraphicsView::metaObject
+24 (int (*)(...))QGraphicsView::qt_metacast
+32 (int (*)(...))QGraphicsView::qt_metacall
+40 (int (*)(...))QGraphicsView::~QGraphicsView
+48 (int (*)(...))QGraphicsView::~QGraphicsView
+56 (int (*)(...))QGraphicsView::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QGraphicsView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QGraphicsView::mousePressEvent
+176 (int (*)(...))QGraphicsView::mouseReleaseEvent
+184 (int (*)(...))QGraphicsView::mouseDoubleClickEvent
+192 (int (*)(...))QGraphicsView::mouseMoveEvent
+200 (int (*)(...))QGraphicsView::wheelEvent
+208 (int (*)(...))QGraphicsView::keyPressEvent
+216 (int (*)(...))QGraphicsView::keyReleaseEvent
+224 (int (*)(...))QGraphicsView::focusInEvent
+232 (int (*)(...))QGraphicsView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QGraphicsView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QGraphicsView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QGraphicsView::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QGraphicsView::dragEnterEvent
+320 (int (*)(...))QGraphicsView::dragMoveEvent
+328 (int (*)(...))QGraphicsView::dragLeaveEvent
+336 (int (*)(...))QGraphicsView::dropEvent
+344 (int (*)(...))QGraphicsView::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QGraphicsView::inputMethodEvent
+416 (int (*)(...))QGraphicsView::inputMethodQuery
+424 (int (*)(...))QGraphicsView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QGraphicsView::setupViewport
+448 (int (*)(...))QGraphicsView::viewportEvent
+456 (int (*)(...))QGraphicsView::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QGraphicsView::drawBackground
+480 (int (*)(...))QGraphicsView::drawForeground
+488 (int (*)(...))QGraphicsView::drawItems
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI13QGraphicsView)
+512 (int (*)(...))QGraphicsView::_ZThn16_N13QGraphicsViewD1Ev
+520 (int (*)(...))QGraphicsView::_ZThn16_N13QGraphicsViewD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QGraphicsView
+ size=40 align=8
+ base size=40 base align=8
+QGraphicsView (0x0x7f542ed4a208) 0
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 16)
+ QAbstractScrollArea (0x0x7f542ed4a270) 0
+ primary-for QGraphicsView (0x0x7f542ed4a208)
+ QFrame (0x0x7f542ed4a2d8) 0
+ primary-for QAbstractScrollArea (0x0x7f542ed4a270)
+ QWidget (0x0x7f542ec6a3f0) 0
+ primary-for QFrame (0x0x7f542ed4a2d8)
+ QObject (0x0x7f542ed2ea80) 0
+ primary-for QWidget (0x0x7f542ec6a3f0)
+ QPaintDevice (0x0x7f542ed2eae0) 16
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 512)
+
+Class QGroupBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGroupBox::QPrivateSignal (0x0x7f542ed90a20) 0 empty
+
+Vtable for QGroupBox
+QGroupBox::_ZTV9QGroupBox: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QGroupBox)
+16 (int (*)(...))QGroupBox::metaObject
+24 (int (*)(...))QGroupBox::qt_metacast
+32 (int (*)(...))QGroupBox::qt_metacall
+40 (int (*)(...))QGroupBox::~QGroupBox
+48 (int (*)(...))QGroupBox::~QGroupBox
+56 (int (*)(...))QGroupBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QGroupBox::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QGroupBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QGroupBox::mousePressEvent
+176 (int (*)(...))QGroupBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QGroupBox::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QGroupBox::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QGroupBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QGroupBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QGroupBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QGroupBox::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI9QGroupBox)
+456 (int (*)(...))QGroupBox::_ZThn16_N9QGroupBoxD1Ev
+464 (int (*)(...))QGroupBox::_ZThn16_N9QGroupBoxD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QGroupBox
+ size=40 align=8
+ base size=40 base align=8
+QGroupBox (0x0x7f542ed4a5b0) 0
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 16)
+ QWidget (0x0x7f542ec6ab60) 0
+ primary-for QGroupBox (0x0x7f542ed4a5b0)
+ QObject (0x0x7f542ed90960) 0
+ primary-for QWidget (0x0x7f542ec6ab60)
+ QPaintDevice (0x0x7f542ed909c0) 16
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 456)
+
+Class QHeaderView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHeaderView::QPrivateSignal (0x0x7f542ed90c60) 0 empty
+
+Vtable for QHeaderView
+QHeaderView::_ZTV11QHeaderView: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHeaderView)
+16 (int (*)(...))QHeaderView::metaObject
+24 (int (*)(...))QHeaderView::qt_metacast
+32 (int (*)(...))QHeaderView::qt_metacall
+40 (int (*)(...))QHeaderView::~QHeaderView
+48 (int (*)(...))QHeaderView::~QHeaderView
+56 (int (*)(...))QHeaderView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QHeaderView::setVisible
+128 (int (*)(...))QHeaderView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QHeaderView::mousePressEvent
+176 (int (*)(...))QHeaderView::mouseReleaseEvent
+184 (int (*)(...))QHeaderView::mouseDoubleClickEvent
+192 (int (*)(...))QHeaderView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QHeaderView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QHeaderView::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QHeaderView::viewportEvent
+456 (int (*)(...))QHeaderView::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QHeaderView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QHeaderView::visualRect
+504 (int (*)(...))QHeaderView::scrollTo
+512 (int (*)(...))QHeaderView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QHeaderView::reset
+552 (int (*)(...))QAbstractItemView::setRootIndex
+560 (int (*)(...))QHeaderView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QHeaderView::dataChanged
+584 (int (*)(...))QHeaderView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QHeaderView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QHeaderView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QHeaderView::moveCursor
+704 (int (*)(...))QHeaderView::horizontalOffset
+712 (int (*)(...))QHeaderView::verticalOffset
+720 (int (*)(...))QHeaderView::isIndexHidden
+728 (int (*)(...))QHeaderView::setSelection
+736 (int (*)(...))QHeaderView::visualRegionForSelection
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QHeaderView::paintSection
+792 (int (*)(...))QHeaderView::sectionSizeFromContents
+800 (int (*)(...))QHeaderView::initStyleOptionForIndex
+808 (int (*)(...))QHeaderView::initStyleOption
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI11QHeaderView)
+832 (int (*)(...))QHeaderView::_ZThn16_N11QHeaderViewD1Ev
+840 (int (*)(...))QHeaderView::_ZThn16_N11QHeaderViewD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHeaderView
+ size=40 align=8
+ base size=40 base align=8
+QHeaderView (0x0x7f542ed4a618) 0
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 16)
+ QAbstractItemView (0x0x7f542ed4a680) 0
+ primary-for QHeaderView (0x0x7f542ed4a618)
+ QAbstractScrollArea (0x0x7f542ed4a6e8) 0
+ primary-for QAbstractItemView (0x0x7f542ed4a680)
+ QFrame (0x0x7f542ed4a750) 0
+ primary-for QAbstractScrollArea (0x0x7f542ed4a6e8)
+ QWidget (0x0x7f542ec6abd0) 0
+ primary-for QFrame (0x0x7f542ed4a750)
+ QObject (0x0x7f542ed90ba0) 0
+ primary-for QWidget (0x0x7f542ec6abd0)
+ QPaintDevice (0x0x7f542ed90c00) 16
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 832)
+
+Class QLineEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLineEdit::QPrivateSignal (0x0x7f542e9fe120) 0 empty
+
+Vtable for QLineEdit
+QLineEdit::_ZTV9QLineEdit: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QLineEdit)
+16 (int (*)(...))QLineEdit::metaObject
+24 (int (*)(...))QLineEdit::qt_metacast
+32 (int (*)(...))QLineEdit::qt_metacall
+40 (int (*)(...))QLineEdit::~QLineEdit
+48 (int (*)(...))QLineEdit::~QLineEdit
+56 (int (*)(...))QLineEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QLineEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLineEdit::sizeHint
+136 (int (*)(...))QLineEdit::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QLineEdit::mousePressEvent
+176 (int (*)(...))QLineEdit::mouseReleaseEvent
+184 (int (*)(...))QLineEdit::mouseDoubleClickEvent
+192 (int (*)(...))QLineEdit::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QLineEdit::keyPressEvent
+216 (int (*)(...))QLineEdit::keyReleaseEvent
+224 (int (*)(...))QLineEdit::focusInEvent
+232 (int (*)(...))QLineEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLineEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QLineEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QLineEdit::dragEnterEvent
+320 (int (*)(...))QLineEdit::dragMoveEvent
+328 (int (*)(...))QLineEdit::dragLeaveEvent
+336 (int (*)(...))QLineEdit::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QLineEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QLineEdit::inputMethodEvent
+416 (int (*)(...))QLineEdit::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QLineEdit::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI9QLineEdit)
+456 (int (*)(...))QLineEdit::_ZThn16_N9QLineEditD1Ev
+464 (int (*)(...))QLineEdit::_ZThn16_N9QLineEditD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLineEdit
+ size=40 align=8
+ base size=40 base align=8
+QLineEdit (0x0x7f542ed4a7b8) 0
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 16)
+ QWidget (0x0x7f542ec6ae70) 0
+ primary-for QLineEdit (0x0x7f542ed4a7b8)
+ QObject (0x0x7f542e9fe060) 0
+ primary-for QWidget (0x0x7f542ec6ae70)
+ QPaintDevice (0x0x7f542e9fe0c0) 16
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 456)
+
+Class QInputDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDialog::QPrivateSignal (0x0x7f542e9fe4e0) 0 empty
+
+Vtable for QInputDialog
+QInputDialog::_ZTV12QInputDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputDialog)
+16 (int (*)(...))QInputDialog::metaObject
+24 (int (*)(...))QInputDialog::qt_metacast
+32 (int (*)(...))QInputDialog::qt_metacall
+40 (int (*)(...))QInputDialog::~QInputDialog
+48 (int (*)(...))QInputDialog::~QInputDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QInputDialog::setVisible
+128 (int (*)(...))QInputDialog::sizeHint
+136 (int (*)(...))QInputDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QInputDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QInputDialog)
+488 (int (*)(...))QInputDialog::_ZThn16_N12QInputDialogD1Ev
+496 (int (*)(...))QInputDialog::_ZThn16_N12QInputDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QInputDialog
+ size=40 align=8
+ base size=40 base align=8
+QInputDialog (0x0x7f542ed4a820) 0
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 16)
+ QDialog (0x0x7f542ed4a888) 0
+ primary-for QInputDialog (0x0x7f542ed4a820)
+ QWidget (0x0x7f542ea081c0) 0
+ primary-for QDialog (0x0x7f542ed4a888)
+ QObject (0x0x7f542e9fe420) 0
+ primary-for QWidget (0x0x7f542ea081c0)
+ QPaintDevice (0x0x7f542e9fe480) 16
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 488)
+
+Class QItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemDelegate::QPrivateSignal (0x0x7f542e9fe9c0) 0 empty
+
+Vtable for QItemDelegate
+QItemDelegate::_ZTV13QItemDelegate: 28 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QItemDelegate)
+16 (int (*)(...))QItemDelegate::metaObject
+24 (int (*)(...))QItemDelegate::qt_metacast
+32 (int (*)(...))QItemDelegate::qt_metacall
+40 (int (*)(...))QItemDelegate::~QItemDelegate
+48 (int (*)(...))QItemDelegate::~QItemDelegate
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QItemDelegate::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QItemDelegate::paint
+120 (int (*)(...))QItemDelegate::sizeHint
+128 (int (*)(...))QItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QItemDelegate::setEditorData
+152 (int (*)(...))QItemDelegate::setModelData
+160 (int (*)(...))QItemDelegate::updateEditorGeometry
+168 (int (*)(...))QItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+192 (int (*)(...))QItemDelegate::drawDisplay
+200 (int (*)(...))QItemDelegate::drawDecoration
+208 (int (*)(...))QItemDelegate::drawFocus
+216 (int (*)(...))QItemDelegate::drawCheck
+
+Class QItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QItemDelegate (0x0x7f542ed4aa28) 0
+ vptr=((& QItemDelegate::_ZTV13QItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7f542ed4aa90) 0
+ primary-for QItemDelegate (0x0x7f542ed4aa28)
+ QObject (0x0x7f542e9fe960) 0
+ primary-for QAbstractItemDelegate (0x0x7f542ed4aa90)
+
+Vtable for QItemEditorCreatorBase
+QItemEditorCreatorBase::_ZTV22QItemEditorCreatorBase: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QItemEditorCreatorBase)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QItemEditorCreatorBase
+ size=8 align=8
+ base size=8 base align=8
+QItemEditorCreatorBase (0x0x7f542e9feb40) 0 nearly-empty
+ vptr=((& QItemEditorCreatorBase::_ZTV22QItemEditorCreatorBase) + 16)
+
+Vtable for QItemEditorFactory
+QItemEditorFactory::_ZTV18QItemEditorFactory: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QItemEditorFactory)
+16 (int (*)(...))QItemEditorFactory::~QItemEditorFactory
+24 (int (*)(...))QItemEditorFactory::~QItemEditorFactory
+32 (int (*)(...))QItemEditorFactory::createEditor
+40 (int (*)(...))QItemEditorFactory::valuePropertyName
+
+Class QItemEditorFactory
+ size=16 align=8
+ base size=16 base align=8
+QItemEditorFactory (0x0x7f542e9feea0) 0
+ vptr=((& QItemEditorFactory::_ZTV18QItemEditorFactory) + 16)
+
+Class QKeySequenceEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QKeySequenceEdit::QPrivateSignal (0x0x7f542ea7f3c0) 0 empty
+
+Vtable for QKeySequenceEdit
+QKeySequenceEdit::_ZTV16QKeySequenceEdit: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QKeySequenceEdit)
+16 (int (*)(...))QKeySequenceEdit::metaObject
+24 (int (*)(...))QKeySequenceEdit::qt_metacast
+32 (int (*)(...))QKeySequenceEdit::qt_metacall
+40 (int (*)(...))QKeySequenceEdit::~QKeySequenceEdit
+48 (int (*)(...))QKeySequenceEdit::~QKeySequenceEdit
+56 (int (*)(...))QKeySequenceEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QKeySequenceEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QKeySequenceEdit::keyPressEvent
+216 (int (*)(...))QKeySequenceEdit::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI16QKeySequenceEdit)
+448 (int (*)(...))QKeySequenceEdit::_ZThn16_N16QKeySequenceEditD1Ev
+456 (int (*)(...))QKeySequenceEdit::_ZThn16_N16QKeySequenceEditD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QKeySequenceEdit
+ size=40 align=8
+ base size=40 base align=8
+QKeySequenceEdit (0x0x7f542ed4abc8) 0
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 16)
+ QWidget (0x0x7f542ea084d0) 0
+ primary-for QKeySequenceEdit (0x0x7f542ed4abc8)
+ QObject (0x0x7f542ea7f300) 0
+ primary-for QWidget (0x0x7f542ea084d0)
+ QPaintDevice (0x0x7f542ea7f360) 16
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 448)
+
+Class QLabel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLabel::QPrivateSignal (0x0x7f542ea7f600) 0 empty
+
+Vtable for QLabel
+QLabel::_ZTV6QLabel: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QLabel)
+16 (int (*)(...))QLabel::metaObject
+24 (int (*)(...))QLabel::qt_metacast
+32 (int (*)(...))QLabel::qt_metacall
+40 (int (*)(...))QLabel::~QLabel
+48 (int (*)(...))QLabel::~QLabel
+56 (int (*)(...))QLabel::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLabel::sizeHint
+136 (int (*)(...))QLabel::minimumSizeHint
+144 (int (*)(...))QLabel::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QLabel::mousePressEvent
+176 (int (*)(...))QLabel::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QLabel::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QLabel::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QLabel::focusInEvent
+232 (int (*)(...))QLabel::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLabel::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QLabel::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QLabel::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QLabel::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI6QLabel)
+456 (int (*)(...))QLabel::_ZThn16_N6QLabelD1Ev
+464 (int (*)(...))QLabel::_ZThn16_N6QLabelD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLabel
+ size=40 align=8
+ base size=40 base align=8
+QLabel (0x0x7f542ed4ac30) 0
+ vptr=((& QLabel::_ZTV6QLabel) + 16)
+ QFrame (0x0x7f542ed4ac98) 0
+ primary-for QLabel (0x0x7f542ed4ac30)
+ QWidget (0x0x7f542ea08540) 0
+ primary-for QFrame (0x0x7f542ed4ac98)
+ QObject (0x0x7f542ea7f540) 0
+ primary-for QWidget (0x0x7f542ea08540)
+ QPaintDevice (0x0x7f542ea7f5a0) 16
+ vptr=((& QLabel::_ZTV6QLabel) + 456)
+
+Class QLCDNumber::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLCDNumber::QPrivateSignal (0x0x7f542ea7f900) 0 empty
+
+Vtable for QLCDNumber
+QLCDNumber::_ZTV10QLCDNumber: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QLCDNumber)
+16 (int (*)(...))QLCDNumber::metaObject
+24 (int (*)(...))QLCDNumber::qt_metacast
+32 (int (*)(...))QLCDNumber::qt_metacall
+40 (int (*)(...))QLCDNumber::~QLCDNumber
+48 (int (*)(...))QLCDNumber::~QLCDNumber
+56 (int (*)(...))QLCDNumber::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLCDNumber::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLCDNumber::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI10QLCDNumber)
+456 (int (*)(...))QLCDNumber::_ZThn16_N10QLCDNumberD1Ev
+464 (int (*)(...))QLCDNumber::_ZThn16_N10QLCDNumberD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLCDNumber
+ size=40 align=8
+ base size=40 base align=8
+QLCDNumber (0x0x7f542ed4ad00) 0
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 16)
+ QFrame (0x0x7f542ed4ad68) 0
+ primary-for QLCDNumber (0x0x7f542ed4ad00)
+ QWidget (0x0x7f542ea085b0) 0
+ primary-for QFrame (0x0x7f542ed4ad68)
+ QObject (0x0x7f542ea7f840) 0
+ primary-for QWidget (0x0x7f542ea085b0)
+ QPaintDevice (0x0x7f542ea7f8a0) 16
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 456)
+
+Class QListView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListView::QPrivateSignal (0x0x7f542ea7fcc0) 0 empty
+
+Vtable for QListView
+QListView::_ZTV9QListView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QListView)
+16 (int (*)(...))QListView::metaObject
+24 (int (*)(...))QListView::qt_metacast
+32 (int (*)(...))QListView::qt_metacall
+40 (int (*)(...))QListView::~QListView
+48 (int (*)(...))QListView::~QListView
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI9QListView)
+800 (int (*)(...))QListView::_ZThn16_N9QListViewD1Ev
+808 (int (*)(...))QListView::_ZThn16_N9QListViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QListView
+ size=40 align=8
+ base size=40 base align=8
+QListView (0x0x7f542ed4add0) 0
+ vptr=((& QListView::_ZTV9QListView) + 16)
+ QAbstractItemView (0x0x7f542ed4ae38) 0
+ primary-for QListView (0x0x7f542ed4add0)
+ QAbstractScrollArea (0x0x7f542ed4aea0) 0
+ primary-for QAbstractItemView (0x0x7f542ed4ae38)
+ QFrame (0x0x7f542ed4af08) 0
+ primary-for QAbstractScrollArea (0x0x7f542ed4aea0)
+ QWidget (0x0x7f542ea08930) 0
+ primary-for QFrame (0x0x7f542ed4af08)
+ QObject (0x0x7f542ea7fc00) 0
+ primary-for QWidget (0x0x7f542ea08930)
+ QPaintDevice (0x0x7f542ea7fc60) 16
+ vptr=((& QListView::_ZTV9QListView) + 800)
+
+Vtable for QListWidgetItem
+QListWidgetItem::_ZTV15QListWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QListWidgetItem)
+16 (int (*)(...))QListWidgetItem::~QListWidgetItem
+24 (int (*)(...))QListWidgetItem::~QListWidgetItem
+32 (int (*)(...))QListWidgetItem::clone
+40 (int (*)(...))QListWidgetItem::data
+48 (int (*)(...))QListWidgetItem::setData
+56 (int (*)(...))QListWidgetItem::operator<
+64 (int (*)(...))QListWidgetItem::read
+72 (int (*)(...))QListWidgetItem::write
+
+Class QListWidgetItem
+ size=40 align=8
+ base size=36 base align=8
+QListWidgetItem (0x0x7f542eadb240) 0
+ vptr=((& QListWidgetItem::_ZTV15QListWidgetItem) + 16)
+
+Class QListWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListWidget::QPrivateSignal (0x0x7f542eadbcc0) 0 empty
+
+Vtable for QListWidget
+QListWidget::_ZTV11QListWidget: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QListWidget)
+16 (int (*)(...))QListWidget::metaObject
+24 (int (*)(...))QListWidget::qt_metacast
+32 (int (*)(...))QListWidget::qt_metacall
+40 (int (*)(...))QListWidget::~QListWidget
+48 (int (*)(...))QListWidget::~QListWidget
+56 (int (*)(...))QListWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QListWidget::setModel
+480 (int (*)(...))QListWidget::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))QListWidget::mimeTypes
+792 (int (*)(...))QListWidget::mimeData
+800 (int (*)(...))QListWidget::dropMimeData
+808 (int (*)(...))QListWidget::supportedDropActions
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI11QListWidget)
+832 (int (*)(...))QListWidget::_ZThn16_N11QListWidgetD1Ev
+840 (int (*)(...))QListWidget::_ZThn16_N11QListWidgetD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QListWidget
+ size=40 align=8
+ base size=40 base align=8
+QListWidget (0x0x7f542ed4af70) 0
+ vptr=((& QListWidget::_ZTV11QListWidget) + 16)
+ QListView (0x0x7f542eaf9000) 0
+ primary-for QListWidget (0x0x7f542ed4af70)
+ QAbstractItemView (0x0x7f542eaf9068) 0
+ primary-for QListView (0x0x7f542eaf9000)
+ QAbstractScrollArea (0x0x7f542eaf90d0) 0
+ primary-for QAbstractItemView (0x0x7f542eaf9068)
+ QFrame (0x0x7f542eaf9138) 0
+ primary-for QAbstractScrollArea (0x0x7f542eaf90d0)
+ QWidget (0x0x7f542ea08f50) 0
+ primary-for QFrame (0x0x7f542eaf9138)
+ QObject (0x0x7f542eadbc00) 0
+ primary-for QWidget (0x0x7f542ea08f50)
+ QPaintDevice (0x0x7f542eadbc60) 16
+ vptr=((& QListWidget::_ZTV11QListWidget) + 832)
+
+Class QMainWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMainWindow::QPrivateSignal (0x0x7f542eb121e0) 0 empty
+
+Vtable for QMainWindow
+QMainWindow::_ZTV11QMainWindow: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMainWindow)
+16 (int (*)(...))QMainWindow::metaObject
+24 (int (*)(...))QMainWindow::qt_metacast
+32 (int (*)(...))QMainWindow::qt_metacall
+40 (int (*)(...))QMainWindow::~QMainWindow
+48 (int (*)(...))QMainWindow::~QMainWindow
+56 (int (*)(...))QMainWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QMainWindow::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QMainWindow::createPopupMenu
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QMainWindow)
+456 (int (*)(...))QMainWindow::_ZThn16_N11QMainWindowD1Ev
+464 (int (*)(...))QMainWindow::_ZThn16_N11QMainWindowD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMainWindow
+ size=40 align=8
+ base size=40 base align=8
+QMainWindow (0x0x7f542eaf91a0) 0
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 16)
+ QWidget (0x0x7f542eb16000) 0
+ primary-for QMainWindow (0x0x7f542eaf91a0)
+ QObject (0x0x7f542eb12120) 0
+ primary-for QWidget (0x0x7f542eb16000)
+ QPaintDevice (0x0x7f542eb12180) 16
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 456)
+
+Class QMdiArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiArea::QPrivateSignal (0x0x7f542eb128a0) 0 empty
+
+Vtable for QMdiArea
+QMdiArea::_ZTV8QMdiArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QMdiArea)
+16 (int (*)(...))QMdiArea::metaObject
+24 (int (*)(...))QMdiArea::qt_metacast
+32 (int (*)(...))QMdiArea::qt_metacall
+40 (int (*)(...))QMdiArea::~QMdiArea
+48 (int (*)(...))QMdiArea::~QMdiArea
+56 (int (*)(...))QMdiArea::event
+64 (int (*)(...))QMdiArea::eventFilter
+72 (int (*)(...))QMdiArea::timerEvent
+80 (int (*)(...))QMdiArea::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMdiArea::sizeHint
+136 (int (*)(...))QMdiArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QMdiArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMdiArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QMdiArea::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QMdiArea::setupViewport
+448 (int (*)(...))QMdiArea::viewportEvent
+456 (int (*)(...))QMdiArea::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI8QMdiArea)
+488 (int (*)(...))QMdiArea::_ZThn16_N8QMdiAreaD1Ev
+496 (int (*)(...))QMdiArea::_ZThn16_N8QMdiAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMdiArea
+ size=40 align=8
+ base size=40 base align=8
+QMdiArea (0x0x7f542eaf9340) 0
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 16)
+ QAbstractScrollArea (0x0x7f542eaf93a8) 0
+ primary-for QMdiArea (0x0x7f542eaf9340)
+ QFrame (0x0x7f542eaf9410) 0
+ primary-for QAbstractScrollArea (0x0x7f542eaf93a8)
+ QWidget (0x0x7f542eb16310) 0
+ primary-for QFrame (0x0x7f542eaf9410)
+ QObject (0x0x7f542eb127e0) 0
+ primary-for QWidget (0x0x7f542eb16310)
+ QPaintDevice (0x0x7f542eb12840) 16
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 488)
+
+Class QMdiSubWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiSubWindow::QPrivateSignal (0x0x7f542eb12f60) 0 empty
+
+Vtable for QMdiSubWindow
+QMdiSubWindow::_ZTV13QMdiSubWindow: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QMdiSubWindow)
+16 (int (*)(...))QMdiSubWindow::metaObject
+24 (int (*)(...))QMdiSubWindow::qt_metacast
+32 (int (*)(...))QMdiSubWindow::qt_metacall
+40 (int (*)(...))QMdiSubWindow::~QMdiSubWindow
+48 (int (*)(...))QMdiSubWindow::~QMdiSubWindow
+56 (int (*)(...))QMdiSubWindow::event
+64 (int (*)(...))QMdiSubWindow::eventFilter
+72 (int (*)(...))QMdiSubWindow::timerEvent
+80 (int (*)(...))QMdiSubWindow::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMdiSubWindow::sizeHint
+136 (int (*)(...))QMdiSubWindow::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMdiSubWindow::mousePressEvent
+176 (int (*)(...))QMdiSubWindow::mouseReleaseEvent
+184 (int (*)(...))QMdiSubWindow::mouseDoubleClickEvent
+192 (int (*)(...))QMdiSubWindow::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMdiSubWindow::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QMdiSubWindow::focusInEvent
+232 (int (*)(...))QMdiSubWindow::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QMdiSubWindow::leaveEvent
+256 (int (*)(...))QMdiSubWindow::paintEvent
+264 (int (*)(...))QMdiSubWindow::moveEvent
+272 (int (*)(...))QMdiSubWindow::resizeEvent
+280 (int (*)(...))QMdiSubWindow::closeEvent
+288 (int (*)(...))QMdiSubWindow::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QMdiSubWindow::showEvent
+352 (int (*)(...))QMdiSubWindow::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMdiSubWindow::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI13QMdiSubWindow)
+448 (int (*)(...))QMdiSubWindow::_ZThn16_N13QMdiSubWindowD1Ev
+456 (int (*)(...))QMdiSubWindow::_ZThn16_N13QMdiSubWindowD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMdiSubWindow
+ size=40 align=8
+ base size=40 base align=8
+QMdiSubWindow (0x0x7f542eaf95b0) 0
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 16)
+ QWidget (0x0x7f542eb16690) 0
+ primary-for QMdiSubWindow (0x0x7f542eaf95b0)
+ QObject (0x0x7f542eb12ea0) 0
+ primary-for QWidget (0x0x7f542eb16690)
+ QPaintDevice (0x0x7f542eb12f00) 16
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 448)
+
+Class QMenu::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenu::QPrivateSignal (0x0x7f542eb914e0) 0 empty
+
+Vtable for QMenu
+QMenu::_ZTV5QMenu: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QMenu)
+16 (int (*)(...))QMenu::metaObject
+24 (int (*)(...))QMenu::qt_metacast
+32 (int (*)(...))QMenu::qt_metacall
+40 (int (*)(...))QMenu::~QMenu
+48 (int (*)(...))QMenu::~QMenu
+56 (int (*)(...))QMenu::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QMenu::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMenu::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMenu::mousePressEvent
+176 (int (*)(...))QMenu::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QMenu::mouseMoveEvent
+200 (int (*)(...))QMenu::wheelEvent
+208 (int (*)(...))QMenu::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QMenu::enterEvent
+248 (int (*)(...))QMenu::leaveEvent
+256 (int (*)(...))QMenu::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QMenu::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QMenu::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMenu::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QMenu::focusNextPrevChild
+432 (int (*)(...))QMenu::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI5QMenu)
+456 (int (*)(...))QMenu::_ZThn16_N5QMenuD1Ev
+464 (int (*)(...))QMenu::_ZThn16_N5QMenuD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMenu
+ size=40 align=8
+ base size=40 base align=8
+QMenu (0x0x7f542eaf9750) 0
+ vptr=((& QMenu::_ZTV5QMenu) + 16)
+ QWidget (0x0x7f542eb168c0) 0
+ primary-for QMenu (0x0x7f542eaf9750)
+ QObject (0x0x7f542eb91420) 0
+ primary-for QWidget (0x0x7f542eb168c0)
+ QPaintDevice (0x0x7f542eb91480) 16
+ vptr=((& QMenu::_ZTV5QMenu) + 456)
+
+Class QMenuBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenuBar::QPrivateSignal (0x0x7f542eb918a0) 0 empty
+
+Vtable for QMenuBar
+QMenuBar::_ZTV8QMenuBar: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QMenuBar)
+16 (int (*)(...))QMenuBar::metaObject
+24 (int (*)(...))QMenuBar::qt_metacast
+32 (int (*)(...))QMenuBar::qt_metacall
+40 (int (*)(...))QMenuBar::~QMenuBar
+48 (int (*)(...))QMenuBar::~QMenuBar
+56 (int (*)(...))QMenuBar::event
+64 (int (*)(...))QMenuBar::eventFilter
+72 (int (*)(...))QMenuBar::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QMenuBar::setVisible
+128 (int (*)(...))QMenuBar::sizeHint
+136 (int (*)(...))QMenuBar::minimumSizeHint
+144 (int (*)(...))QMenuBar::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMenuBar::mousePressEvent
+176 (int (*)(...))QMenuBar::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QMenuBar::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMenuBar::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QMenuBar::focusInEvent
+232 (int (*)(...))QMenuBar::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QMenuBar::leaveEvent
+256 (int (*)(...))QMenuBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMenuBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QMenuBar::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMenuBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QMenuBar::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI8QMenuBar)
+456 (int (*)(...))QMenuBar::_ZThn16_N8QMenuBarD1Ev
+464 (int (*)(...))QMenuBar::_ZThn16_N8QMenuBarD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMenuBar
+ size=40 align=8
+ base size=40 base align=8
+QMenuBar (0x0x7f542eaf97b8) 0
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 16)
+ QWidget (0x0x7f542eb16930) 0
+ primary-for QMenuBar (0x0x7f542eaf97b8)
+ QObject (0x0x7f542eb917e0) 0
+ primary-for QWidget (0x0x7f542eb16930)
+ QPaintDevice (0x0x7f542eb91840) 16
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 456)
+
+Class QMessageBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMessageBox::QPrivateSignal (0x0x7f542eb91ba0) 0 empty
+
+Vtable for QMessageBox
+QMessageBox::_ZTV11QMessageBox: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMessageBox)
+16 (int (*)(...))QMessageBox::metaObject
+24 (int (*)(...))QMessageBox::qt_metacast
+32 (int (*)(...))QMessageBox::qt_metacall
+40 (int (*)(...))QMessageBox::~QMessageBox
+48 (int (*)(...))QMessageBox::~QMessageBox
+56 (int (*)(...))QMessageBox::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMessageBox::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMessageBox::resizeEvent
+280 (int (*)(...))QMessageBox::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QMessageBox::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMessageBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QMessageBox)
+488 (int (*)(...))QMessageBox::_ZThn16_N11QMessageBoxD1Ev
+496 (int (*)(...))QMessageBox::_ZThn16_N11QMessageBoxD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMessageBox
+ size=40 align=8
+ base size=40 base align=8
+QMessageBox (0x0x7f542eaf9820) 0
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 16)
+ QDialog (0x0x7f542eaf9888) 0
+ primary-for QMessageBox (0x0x7f542eaf9820)
+ QWidget (0x0x7f542eb169a0) 0
+ primary-for QDialog (0x0x7f542eaf9888)
+ QObject (0x0x7f542eb91ae0) 0
+ primary-for QWidget (0x0x7f542eb169a0)
+ QPaintDevice (0x0x7f542eb91b40) 16
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 488)
+
+Class QTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextEdit::QPrivateSignal (0x0x7f542e819420) 0 empty
+
+Class QTextEdit::ExtraSelection
+ size=24 align=8
+ base size=24 base align=8
+QTextEdit::ExtraSelection (0x0x7f542e819480) 0
+
+Vtable for QTextEdit
+QTextEdit::_ZTV9QTextEdit: 74 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTextEdit)
+16 (int (*)(...))QTextEdit::metaObject
+24 (int (*)(...))QTextEdit::qt_metacast
+32 (int (*)(...))QTextEdit::qt_metacall
+40 (int (*)(...))QTextEdit::~QTextEdit
+48 (int (*)(...))QTextEdit::~QTextEdit
+56 (int (*)(...))QTextEdit::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTextEdit::mousePressEvent
+176 (int (*)(...))QTextEdit::mouseReleaseEvent
+184 (int (*)(...))QTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QTextEdit::mouseMoveEvent
+200 (int (*)(...))QTextEdit::wheelEvent
+208 (int (*)(...))QTextEdit::keyPressEvent
+216 (int (*)(...))QTextEdit::keyReleaseEvent
+224 (int (*)(...))QTextEdit::focusInEvent
+232 (int (*)(...))QTextEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTextEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QTextEdit::dragEnterEvent
+320 (int (*)(...))QTextEdit::dragMoveEvent
+328 (int (*)(...))QTextEdit::dragLeaveEvent
+336 (int (*)(...))QTextEdit::dropEvent
+344 (int (*)(...))QTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QTextEdit::inputMethodEvent
+416 (int (*)(...))QTextEdit::inputMethodQuery
+424 (int (*)(...))QTextEdit::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QTextEdit::loadResource
+480 (int (*)(...))QTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QTextEdit::canInsertFromMimeData
+496 (int (*)(...))QTextEdit::insertFromMimeData
+504 (int (*)(...))QTextEdit::doSetTextCursor
+512 (int (*)(...))-16
+520 (int (*)(...))(& _ZTI9QTextEdit)
+528 (int (*)(...))QTextEdit::_ZThn16_N9QTextEditD1Ev
+536 (int (*)(...))QTextEdit::_ZThn16_N9QTextEditD0Ev
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTextEdit
+ size=40 align=8
+ base size=40 base align=8
+QTextEdit (0x0x7f542eaf9a28) 0
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 16)
+ QAbstractScrollArea (0x0x7f542eaf9a90) 0
+ primary-for QTextEdit (0x0x7f542eaf9a28)
+ QFrame (0x0x7f542eaf9af8) 0
+ primary-for QAbstractScrollArea (0x0x7f542eaf9a90)
+ QWidget (0x0x7f542ebe2d20) 0
+ primary-for QFrame (0x0x7f542eaf9af8)
+ QObject (0x0x7f542e819360) 0
+ primary-for QWidget (0x0x7f542ebe2d20)
+ QPaintDevice (0x0x7f542e8193c0) 16
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 528)
+
+Class QPlainTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextEdit::QPrivateSignal (0x0x7f542e819cc0) 0 empty
+
+Vtable for QPlainTextEdit
+QPlainTextEdit::_ZTV14QPlainTextEdit: 74 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QPlainTextEdit)
+16 (int (*)(...))QPlainTextEdit::metaObject
+24 (int (*)(...))QPlainTextEdit::qt_metacast
+32 (int (*)(...))QPlainTextEdit::qt_metacall
+40 (int (*)(...))QPlainTextEdit::~QPlainTextEdit
+48 (int (*)(...))QPlainTextEdit::~QPlainTextEdit
+56 (int (*)(...))QPlainTextEdit::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QPlainTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QPlainTextEdit::mousePressEvent
+176 (int (*)(...))QPlainTextEdit::mouseReleaseEvent
+184 (int (*)(...))QPlainTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QPlainTextEdit::mouseMoveEvent
+200 (int (*)(...))QPlainTextEdit::wheelEvent
+208 (int (*)(...))QPlainTextEdit::keyPressEvent
+216 (int (*)(...))QPlainTextEdit::keyReleaseEvent
+224 (int (*)(...))QPlainTextEdit::focusInEvent
+232 (int (*)(...))QPlainTextEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QPlainTextEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QPlainTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QPlainTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QPlainTextEdit::dragEnterEvent
+320 (int (*)(...))QPlainTextEdit::dragMoveEvent
+328 (int (*)(...))QPlainTextEdit::dragLeaveEvent
+336 (int (*)(...))QPlainTextEdit::dropEvent
+344 (int (*)(...))QPlainTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QPlainTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QPlainTextEdit::inputMethodEvent
+416 (int (*)(...))QPlainTextEdit::inputMethodQuery
+424 (int (*)(...))QPlainTextEdit::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QPlainTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QPlainTextEdit::loadResource
+480 (int (*)(...))QPlainTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QPlainTextEdit::canInsertFromMimeData
+496 (int (*)(...))QPlainTextEdit::insertFromMimeData
+504 (int (*)(...))QPlainTextEdit::doSetTextCursor
+512 (int (*)(...))-16
+520 (int (*)(...))(& _ZTI14QPlainTextEdit)
+528 (int (*)(...))QPlainTextEdit::_ZThn16_N14QPlainTextEditD1Ev
+536 (int (*)(...))QPlainTextEdit::_ZThn16_N14QPlainTextEditD0Ev
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QPlainTextEdit
+ size=40 align=8
+ base size=40 base align=8
+QPlainTextEdit (0x0x7f542eaf9c98) 0
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 16)
+ QAbstractScrollArea (0x0x7f542eaf9d00) 0
+ primary-for QPlainTextEdit (0x0x7f542eaf9c98)
+ QFrame (0x0x7f542eaf9d68) 0
+ primary-for QAbstractScrollArea (0x0x7f542eaf9d00)
+ QWidget (0x0x7f542e82c0e0) 0
+ primary-for QFrame (0x0x7f542eaf9d68)
+ QObject (0x0x7f542e819c00) 0
+ primary-for QWidget (0x0x7f542e82c0e0)
+ QPaintDevice (0x0x7f542e819c60) 16
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 528)
+
+Class QPlainTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextDocumentLayout::QPrivateSignal (0x0x7f542e896240) 0 empty
+
+Vtable for QPlainTextDocumentLayout
+QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QPlainTextDocumentLayout)
+16 (int (*)(...))QPlainTextDocumentLayout::metaObject
+24 (int (*)(...))QPlainTextDocumentLayout::qt_metacast
+32 (int (*)(...))QPlainTextDocumentLayout::qt_metacall
+40 (int (*)(...))QPlainTextDocumentLayout::~QPlainTextDocumentLayout
+48 (int (*)(...))QPlainTextDocumentLayout::~QPlainTextDocumentLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPlainTextDocumentLayout::draw
+120 (int (*)(...))QPlainTextDocumentLayout::hitTest
+128 (int (*)(...))QPlainTextDocumentLayout::pageCount
+136 (int (*)(...))QPlainTextDocumentLayout::documentSize
+144 (int (*)(...))QPlainTextDocumentLayout::frameBoundingRect
+152 (int (*)(...))QPlainTextDocumentLayout::blockBoundingRect
+160 (int (*)(...))QPlainTextDocumentLayout::documentChanged
+168 (int (*)(...))QAbstractTextDocumentLayout::resizeInlineObject
+176 (int (*)(...))QAbstractTextDocumentLayout::positionInlineObject
+184 (int (*)(...))QAbstractTextDocumentLayout::drawInlineObject
+
+Class QPlainTextDocumentLayout
+ size=16 align=8
+ base size=16 base align=8
+QPlainTextDocumentLayout (0x0x7f542eaf9dd0) 0
+ vptr=((& QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout) + 16)
+ QAbstractTextDocumentLayout (0x0x7f542eaf9e38) 0
+ primary-for QPlainTextDocumentLayout (0x0x7f542eaf9dd0)
+ QObject (0x0x7f542e8961e0) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f542eaf9e38)
+
+Class QProgressBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressBar::QPrivateSignal (0x0x7f542e896480) 0 empty
+
+Vtable for QProgressBar
+QProgressBar::_ZTV12QProgressBar: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QProgressBar)
+16 (int (*)(...))QProgressBar::metaObject
+24 (int (*)(...))QProgressBar::qt_metacast
+32 (int (*)(...))QProgressBar::qt_metacall
+40 (int (*)(...))QProgressBar::~QProgressBar
+48 (int (*)(...))QProgressBar::~QProgressBar
+56 (int (*)(...))QProgressBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QProgressBar::sizeHint
+136 (int (*)(...))QProgressBar::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QProgressBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QProgressBar::text
+440 (int (*)(...))QProgressBar::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI12QProgressBar)
+464 (int (*)(...))QProgressBar::_ZThn16_N12QProgressBarD1Ev
+472 (int (*)(...))QProgressBar::_ZThn16_N12QProgressBarD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QProgressBar
+ size=40 align=8
+ base size=40 base align=8
+QProgressBar (0x0x7f542eaf9ea0) 0
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 16)
+ QWidget (0x0x7f542e82c230) 0
+ primary-for QProgressBar (0x0x7f542eaf9ea0)
+ QObject (0x0x7f542e8963c0) 0
+ primary-for QWidget (0x0x7f542e82c230)
+ QPaintDevice (0x0x7f542e896420) 16
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 464)
+
+Class QProgressDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressDialog::QPrivateSignal (0x0x7f542e896780) 0 empty
+
+Vtable for QProgressDialog
+QProgressDialog::_ZTV15QProgressDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QProgressDialog)
+16 (int (*)(...))QProgressDialog::metaObject
+24 (int (*)(...))QProgressDialog::qt_metacast
+32 (int (*)(...))QProgressDialog::qt_metacall
+40 (int (*)(...))QProgressDialog::~QProgressDialog
+48 (int (*)(...))QProgressDialog::~QProgressDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QProgressDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QProgressDialog::resizeEvent
+280 (int (*)(...))QProgressDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QProgressDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QProgressDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI15QProgressDialog)
+488 (int (*)(...))QProgressDialog::_ZThn16_N15QProgressDialogD1Ev
+496 (int (*)(...))QProgressDialog::_ZThn16_N15QProgressDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QProgressDialog
+ size=40 align=8
+ base size=40 base align=8
+QProgressDialog (0x0x7f542eaf9f08) 0
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 16)
+ QDialog (0x0x7f542eaf9f70) 0
+ primary-for QProgressDialog (0x0x7f542eaf9f08)
+ QWidget (0x0x7f542e82c380) 0
+ primary-for QDialog (0x0x7f542eaf9f70)
+ QObject (0x0x7f542e8966c0) 0
+ primary-for QWidget (0x0x7f542e82c380)
+ QPaintDevice (0x0x7f542e896720) 16
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 488)
+
+Class QProxyStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProxyStyle::QPrivateSignal (0x0x7f542e896960) 0 empty
+
+Vtable for QProxyStyle
+QProxyStyle::_ZTV11QProxyStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QProxyStyle)
+16 (int (*)(...))QProxyStyle::metaObject
+24 (int (*)(...))QProxyStyle::qt_metacast
+32 (int (*)(...))QProxyStyle::qt_metacall
+40 (int (*)(...))QProxyStyle::~QProxyStyle
+48 (int (*)(...))QProxyStyle::~QProxyStyle
+56 (int (*)(...))QProxyStyle::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QProxyStyle::polish
+120 (int (*)(...))QProxyStyle::unpolish
+128 (int (*)(...))QProxyStyle::polish
+136 (int (*)(...))QProxyStyle::unpolish
+144 (int (*)(...))QProxyStyle::polish
+152 (int (*)(...))QProxyStyle::itemTextRect
+160 (int (*)(...))QProxyStyle::itemPixmapRect
+168 (int (*)(...))QProxyStyle::drawItemText
+176 (int (*)(...))QProxyStyle::drawItemPixmap
+184 (int (*)(...))QProxyStyle::standardPalette
+192 (int (*)(...))QProxyStyle::drawPrimitive
+200 (int (*)(...))QProxyStyle::drawControl
+208 (int (*)(...))QProxyStyle::subElementRect
+216 (int (*)(...))QProxyStyle::drawComplexControl
+224 (int (*)(...))QProxyStyle::hitTestComplexControl
+232 (int (*)(...))QProxyStyle::subControlRect
+240 (int (*)(...))QProxyStyle::pixelMetric
+248 (int (*)(...))QProxyStyle::sizeFromContents
+256 (int (*)(...))QProxyStyle::styleHint
+264 (int (*)(...))QProxyStyle::standardPixmap
+272 (int (*)(...))QProxyStyle::standardIcon
+280 (int (*)(...))QProxyStyle::generatedIconPixmap
+288 (int (*)(...))QProxyStyle::layoutSpacing
+
+Class QProxyStyle
+ size=16 align=8
+ base size=16 base align=8
+QProxyStyle (0x0x7f542e8c0000) 0
+ vptr=((& QProxyStyle::_ZTV11QProxyStyle) + 16)
+ QCommonStyle (0x0x7f542e8c0068) 0
+ primary-for QProxyStyle (0x0x7f542e8c0000)
+ QStyle (0x0x7f542e8c00d0) 0
+ primary-for QCommonStyle (0x0x7f542e8c0068)
+ QObject (0x0x7f542e896900) 0
+ primary-for QStyle (0x0x7f542e8c00d0)
+
+Class QRadioButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRadioButton::QPrivateSignal (0x0x7f542e896ba0) 0 empty
+
+Vtable for QRadioButton
+QRadioButton::_ZTV12QRadioButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QRadioButton)
+16 (int (*)(...))QRadioButton::metaObject
+24 (int (*)(...))QRadioButton::qt_metacast
+32 (int (*)(...))QRadioButton::qt_metacall
+40 (int (*)(...))QRadioButton::~QRadioButton
+48 (int (*)(...))QRadioButton::~QRadioButton
+56 (int (*)(...))QRadioButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QRadioButton::sizeHint
+136 (int (*)(...))QRadioButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QRadioButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QRadioButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QRadioButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QRadioButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI12QRadioButton)
+480 (int (*)(...))QRadioButton::_ZThn16_N12QRadioButtonD1Ev
+488 (int (*)(...))QRadioButton::_ZThn16_N12QRadioButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QRadioButton
+ size=40 align=8
+ base size=40 base align=8
+QRadioButton (0x0x7f542e8c0138) 0
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 16)
+ QAbstractButton (0x0x7f542e8c01a0) 0
+ primary-for QRadioButton (0x0x7f542e8c0138)
+ QWidget (0x0x7f542e82c3f0) 0
+ primary-for QAbstractButton (0x0x7f542e8c01a0)
+ QObject (0x0x7f542e896ae0) 0
+ primary-for QWidget (0x0x7f542e82c3f0)
+ QPaintDevice (0x0x7f542e896b40) 16
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 480)
+
+Class QScrollBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollBar::QPrivateSignal (0x0x7f542e896de0) 0 empty
+
+Vtable for QScrollBar
+QScrollBar::_ZTV10QScrollBar: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QScrollBar)
+16 (int (*)(...))QScrollBar::metaObject
+24 (int (*)(...))QScrollBar::qt_metacast
+32 (int (*)(...))QScrollBar::qt_metacall
+40 (int (*)(...))QScrollBar::~QScrollBar
+48 (int (*)(...))QScrollBar::~QScrollBar
+56 (int (*)(...))QScrollBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QScrollBar::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QScrollBar::mousePressEvent
+176 (int (*)(...))QScrollBar::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QScrollBar::mouseMoveEvent
+200 (int (*)(...))QScrollBar::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QScrollBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QScrollBar::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QScrollBar::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QScrollBar::sliderChange
+440 (int (*)(...))QScrollBar::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI10QScrollBar)
+464 (int (*)(...))QScrollBar::_ZThn16_N10QScrollBarD1Ev
+472 (int (*)(...))QScrollBar::_ZThn16_N10QScrollBarD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QScrollBar
+ size=40 align=8
+ base size=40 base align=8
+QScrollBar (0x0x7f542e8c0208) 0
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 16)
+ QAbstractSlider (0x0x7f542e8c0270) 0
+ primary-for QScrollBar (0x0x7f542e8c0208)
+ QWidget (0x0x7f542e82c460) 0
+ primary-for QAbstractSlider (0x0x7f542e8c0270)
+ QObject (0x0x7f542e896d20) 0
+ primary-for QWidget (0x0x7f542e82c460)
+ QPaintDevice (0x0x7f542e896d80) 16
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 464)
+
+Vtable for QScrollerProperties
+QScrollerProperties::_ZTV19QScrollerProperties: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollerProperties)
+16 (int (*)(...))QScrollerProperties::~QScrollerProperties
+24 (int (*)(...))QScrollerProperties::~QScrollerProperties
+
+Class QScrollerProperties
+ size=16 align=8
+ base size=16 base align=8
+QScrollerProperties (0x0x7f542e896f60) 0
+ vptr=((& QScrollerProperties::_ZTV19QScrollerProperties) + 16)
+
+Class QScroller::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScroller::QPrivateSignal (0x0x7f542e8f3300) 0 empty
+
+Vtable for QScroller
+QScroller::_ZTV9QScroller: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QScroller)
+16 (int (*)(...))QScroller::metaObject
+24 (int (*)(...))QScroller::qt_metacast
+32 (int (*)(...))QScroller::qt_metacall
+40 (int (*)(...))QScroller::~QScroller
+48 (int (*)(...))QScroller::~QScroller
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QScroller
+ size=24 align=8
+ base size=24 base align=8
+QScroller (0x0x7f542e8c02d8) 0
+ vptr=((& QScroller::_ZTV9QScroller) + 16)
+ QObject (0x0x7f542e8f32a0) 0
+ primary-for QScroller (0x0x7f542e8c02d8)
+
+Class QSizeGrip::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSizeGrip::QPrivateSignal (0x0x7f542e8f3600) 0 empty
+
+Vtable for QSizeGrip
+QSizeGrip::_ZTV9QSizeGrip: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSizeGrip)
+16 (int (*)(...))QSizeGrip::metaObject
+24 (int (*)(...))QSizeGrip::qt_metacast
+32 (int (*)(...))QSizeGrip::qt_metacall
+40 (int (*)(...))QSizeGrip::~QSizeGrip
+48 (int (*)(...))QSizeGrip::~QSizeGrip
+56 (int (*)(...))QSizeGrip::event
+64 (int (*)(...))QSizeGrip::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QSizeGrip::setVisible
+128 (int (*)(...))QSizeGrip::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSizeGrip::mousePressEvent
+176 (int (*)(...))QSizeGrip::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSizeGrip::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSizeGrip::paintEvent
+264 (int (*)(...))QSizeGrip::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QSizeGrip::showEvent
+352 (int (*)(...))QSizeGrip::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI9QSizeGrip)
+448 (int (*)(...))QSizeGrip::_ZThn16_N9QSizeGripD1Ev
+456 (int (*)(...))QSizeGrip::_ZThn16_N9QSizeGripD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSizeGrip
+ size=40 align=8
+ base size=40 base align=8
+QSizeGrip (0x0x7f542e8c0340) 0
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 16)
+ QWidget (0x0x7f542e8f07e0) 0
+ primary-for QSizeGrip (0x0x7f542e8c0340)
+ QObject (0x0x7f542e8f3540) 0
+ primary-for QWidget (0x0x7f542e8f07e0)
+ QPaintDevice (0x0x7f542e8f35a0) 16
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 448)
+
+Class QSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSpinBox::QPrivateSignal (0x0x7f542e8f3840) 0 empty
+
+Vtable for QSpinBox
+QSpinBox::_ZTV8QSpinBox: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSpinBox)
+16 (int (*)(...))QSpinBox::metaObject
+24 (int (*)(...))QSpinBox::qt_metacast
+32 (int (*)(...))QSpinBox::qt_metacall
+40 (int (*)(...))QSpinBox::~QSpinBox
+48 (int (*)(...))QSpinBox::~QSpinBox
+56 (int (*)(...))QSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QSpinBox::validate
+440 (int (*)(...))QSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))QSpinBox::valueFromText
+488 (int (*)(...))QSpinBox::textFromValue
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI8QSpinBox)
+512 (int (*)(...))QSpinBox::_ZThn16_N8QSpinBoxD1Ev
+520 (int (*)(...))QSpinBox::_ZThn16_N8QSpinBoxD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QSpinBox (0x0x7f542e8c03a8) 0
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 16)
+ QAbstractSpinBox (0x0x7f542e8c0410) 0
+ primary-for QSpinBox (0x0x7f542e8c03a8)
+ QWidget (0x0x7f542e8f0850) 0
+ primary-for QAbstractSpinBox (0x0x7f542e8c0410)
+ QObject (0x0x7f542e8f3780) 0
+ primary-for QWidget (0x0x7f542e8f0850)
+ QPaintDevice (0x0x7f542e8f37e0) 16
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 512)
+
+Class QDoubleSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleSpinBox::QPrivateSignal (0x0x7f542e8f3a80) 0 empty
+
+Vtable for QDoubleSpinBox
+QDoubleSpinBox::_ZTV14QDoubleSpinBox: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDoubleSpinBox)
+16 (int (*)(...))QDoubleSpinBox::metaObject
+24 (int (*)(...))QDoubleSpinBox::qt_metacast
+32 (int (*)(...))QDoubleSpinBox::qt_metacall
+40 (int (*)(...))QDoubleSpinBox::~QDoubleSpinBox
+48 (int (*)(...))QDoubleSpinBox::~QDoubleSpinBox
+56 (int (*)(...))QAbstractSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDoubleSpinBox::validate
+440 (int (*)(...))QDoubleSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))QDoubleSpinBox::valueFromText
+488 (int (*)(...))QDoubleSpinBox::textFromValue
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI14QDoubleSpinBox)
+512 (int (*)(...))QDoubleSpinBox::_ZThn16_N14QDoubleSpinBoxD1Ev
+520 (int (*)(...))QDoubleSpinBox::_ZThn16_N14QDoubleSpinBoxD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDoubleSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QDoubleSpinBox (0x0x7f542e8c0478) 0
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 16)
+ QAbstractSpinBox (0x0x7f542e8c04e0) 0
+ primary-for QDoubleSpinBox (0x0x7f542e8c0478)
+ QWidget (0x0x7f542e8f08c0) 0
+ primary-for QAbstractSpinBox (0x0x7f542e8c04e0)
+ QObject (0x0x7f542e8f39c0) 0
+ primary-for QWidget (0x0x7f542e8f08c0)
+ QPaintDevice (0x0x7f542e8f3a20) 16
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 512)
+
+Class QSplashScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplashScreen::QPrivateSignal (0x0x7f542e8f3cc0) 0 empty
+
+Vtable for QSplashScreen
+QSplashScreen::_ZTV13QSplashScreen: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSplashScreen)
+16 (int (*)(...))QSplashScreen::metaObject
+24 (int (*)(...))QSplashScreen::qt_metacast
+32 (int (*)(...))QSplashScreen::qt_metacall
+40 (int (*)(...))QSplashScreen::~QSplashScreen
+48 (int (*)(...))QSplashScreen::~QSplashScreen
+56 (int (*)(...))QSplashScreen::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSplashScreen::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QSplashScreen::drawContents
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI13QSplashScreen)
+456 (int (*)(...))QSplashScreen::_ZThn16_N13QSplashScreenD1Ev
+464 (int (*)(...))QSplashScreen::_ZThn16_N13QSplashScreenD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplashScreen
+ size=40 align=8
+ base size=40 base align=8
+QSplashScreen (0x0x7f542e8c0548) 0
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 16)
+ QWidget (0x0x7f542e8f0930) 0
+ primary-for QSplashScreen (0x0x7f542e8c0548)
+ QObject (0x0x7f542e8f3c00) 0
+ primary-for QWidget (0x0x7f542e8f0930)
+ QPaintDevice (0x0x7f542e8f3c60) 16
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 456)
+
+Class QSplitter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitter::QPrivateSignal (0x0x7f542e8f3f00) 0 empty
+
+Vtable for QSplitter
+QSplitter::_ZTV9QSplitter: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSplitter)
+16 (int (*)(...))QSplitter::metaObject
+24 (int (*)(...))QSplitter::qt_metacast
+32 (int (*)(...))QSplitter::qt_metacall
+40 (int (*)(...))QSplitter::~QSplitter
+48 (int (*)(...))QSplitter::~QSplitter
+56 (int (*)(...))QSplitter::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QSplitter::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSplitter::sizeHint
+136 (int (*)(...))QSplitter::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QSplitter::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QSplitter::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QSplitter::createHandle
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI9QSplitter)
+464 (int (*)(...))QSplitter::_ZThn16_N9QSplitterD1Ev
+472 (int (*)(...))QSplitter::_ZThn16_N9QSplitterD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplitter
+ size=40 align=8
+ base size=40 base align=8
+QSplitter (0x0x7f542e8c05b0) 0
+ vptr=((& QSplitter::_ZTV9QSplitter) + 16)
+ QFrame (0x0x7f542e8c0618) 0
+ primary-for QSplitter (0x0x7f542e8c05b0)
+ QWidget (0x0x7f542e8f09a0) 0
+ primary-for QFrame (0x0x7f542e8c0618)
+ QObject (0x0x7f542e8f3e40) 0
+ primary-for QWidget (0x0x7f542e8f09a0)
+ QPaintDevice (0x0x7f542e8f3ea0) 16
+ vptr=((& QSplitter::_ZTV9QSplitter) + 464)
+
+Class QSplitterHandle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitterHandle::QPrivateSignal (0x0x7f542e958180) 0 empty
+
+Vtable for QSplitterHandle
+QSplitterHandle::_ZTV15QSplitterHandle: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSplitterHandle)
+16 (int (*)(...))QSplitterHandle::metaObject
+24 (int (*)(...))QSplitterHandle::qt_metacast
+32 (int (*)(...))QSplitterHandle::qt_metacall
+40 (int (*)(...))QSplitterHandle::~QSplitterHandle
+48 (int (*)(...))QSplitterHandle::~QSplitterHandle
+56 (int (*)(...))QSplitterHandle::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSplitterHandle::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSplitterHandle::mousePressEvent
+176 (int (*)(...))QSplitterHandle::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSplitterHandle::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSplitterHandle::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QSplitterHandle::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI15QSplitterHandle)
+448 (int (*)(...))QSplitterHandle::_ZThn16_N15QSplitterHandleD1Ev
+456 (int (*)(...))QSplitterHandle::_ZThn16_N15QSplitterHandleD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplitterHandle
+ size=40 align=8
+ base size=40 base align=8
+QSplitterHandle (0x0x7f542e8c0680) 0
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 16)
+ QWidget (0x0x7f542e8f0a10) 0
+ primary-for QSplitterHandle (0x0x7f542e8c0680)
+ QObject (0x0x7f542e9580c0) 0
+ primary-for QWidget (0x0x7f542e8f0a10)
+ QPaintDevice (0x0x7f542e958120) 16
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 448)
+
+Class QStackedLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedLayout::QPrivateSignal (0x0x7f542e9583c0) 0 empty
+
+Vtable for QStackedLayout
+QStackedLayout::_ZTV14QStackedLayout: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QStackedLayout)
+16 (int (*)(...))QStackedLayout::metaObject
+24 (int (*)(...))QStackedLayout::qt_metacast
+32 (int (*)(...))QStackedLayout::qt_metacall
+40 (int (*)(...))QStackedLayout::~QStackedLayout
+48 (int (*)(...))QStackedLayout::~QStackedLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLayout::spacing
+120 (int (*)(...))QLayout::setSpacing
+128 (int (*)(...))QLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QStackedLayout::addItem
+152 (int (*)(...))QLayout::expandingDirections
+160 (int (*)(...))QStackedLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QStackedLayout::setGeometry
+184 (int (*)(...))QStackedLayout::itemAt
+192 (int (*)(...))QStackedLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QStackedLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QStackedLayout::sizeHint
+264 (int (*)(...))QStackedLayout::hasHeightForWidth
+272 (int (*)(...))QStackedLayout::heightForWidth
+280 (int (*)(...))-16
+288 (int (*)(...))(& _ZTI14QStackedLayout)
+296 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayoutD1Ev
+304 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayoutD0Ev
+312 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout8sizeHintEv
+320 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout11minimumSizeEv
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+336 (int (*)(...))QLayout::_ZThn16_NK7QLayout19expandingDirectionsEv
+344 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayout11setGeometryERK5QRect
+352 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+368 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout17hasHeightForWidthEv
+376 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout14heightForWidthEi
+384 (int (*)(...))QLayoutItem::minimumHeightForWidth
+392 (int (*)(...))QLayout::_ZThn16_N7QLayout10invalidateEv
+400 (int (*)(...))QLayoutItem::widget
+408 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+416 (int (*)(...))QLayoutItem::spacerItem
+424 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QStackedLayout
+ size=32 align=8
+ base size=28 base align=8
+QStackedLayout (0x0x7f542e8c06e8) 0
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 16)
+ QLayout (0x0x7f542e8f0a80) 0
+ primary-for QStackedLayout (0x0x7f542e8c06e8)
+ QObject (0x0x7f542e958300) 0
+ primary-for QLayout (0x0x7f542e8f0a80)
+ QLayoutItem (0x0x7f542e958360) 16
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 296)
+
+Class QStackedWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedWidget::QPrivateSignal (0x0x7f542e9586c0) 0 empty
+
+Vtable for QStackedWidget
+QStackedWidget::_ZTV14QStackedWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QStackedWidget)
+16 (int (*)(...))QStackedWidget::metaObject
+24 (int (*)(...))QStackedWidget::qt_metacast
+32 (int (*)(...))QStackedWidget::qt_metacall
+40 (int (*)(...))QStackedWidget::~QStackedWidget
+48 (int (*)(...))QStackedWidget::~QStackedWidget
+56 (int (*)(...))QStackedWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI14QStackedWidget)
+456 (int (*)(...))QStackedWidget::_ZThn16_N14QStackedWidgetD1Ev
+464 (int (*)(...))QStackedWidget::_ZThn16_N14QStackedWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QStackedWidget
+ size=40 align=8
+ base size=40 base align=8
+QStackedWidget (0x0x7f542e8c0750) 0
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 16)
+ QFrame (0x0x7f542e8c07b8) 0
+ primary-for QStackedWidget (0x0x7f542e8c0750)
+ QWidget (0x0x7f542e8f0bd0) 0
+ primary-for QFrame (0x0x7f542e8c07b8)
+ QObject (0x0x7f542e958600) 0
+ primary-for QWidget (0x0x7f542e8f0bd0)
+ QPaintDevice (0x0x7f542e958660) 16
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 456)
+
+Class QStatusBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStatusBar::QPrivateSignal (0x0x7f542e958900) 0 empty
+
+Vtable for QStatusBar
+QStatusBar::_ZTV10QStatusBar: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QStatusBar)
+16 (int (*)(...))QStatusBar::metaObject
+24 (int (*)(...))QStatusBar::qt_metacast
+32 (int (*)(...))QStatusBar::qt_metacall
+40 (int (*)(...))QStatusBar::~QStatusBar
+48 (int (*)(...))QStatusBar::~QStatusBar
+56 (int (*)(...))QStatusBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QStatusBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QStatusBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QStatusBar::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI10QStatusBar)
+448 (int (*)(...))QStatusBar::_ZThn16_N10QStatusBarD1Ev
+456 (int (*)(...))QStatusBar::_ZThn16_N10QStatusBarD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QStatusBar
+ size=40 align=8
+ base size=40 base align=8
+QStatusBar (0x0x7f542e8c0820) 0
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 16)
+ QWidget (0x0x7f542e8f0c40) 0
+ primary-for QStatusBar (0x0x7f542e8c0820)
+ QObject (0x0x7f542e958840) 0
+ primary-for QWidget (0x0x7f542e8f0c40)
+ QPaintDevice (0x0x7f542e9588a0) 16
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 448)
+
+Class QStyledItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyledItemDelegate::QPrivateSignal (0x0x7f542e958ae0) 0 empty
+
+Vtable for QStyledItemDelegate
+QStyledItemDelegate::_ZTV19QStyledItemDelegate: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QStyledItemDelegate)
+16 (int (*)(...))QStyledItemDelegate::metaObject
+24 (int (*)(...))QStyledItemDelegate::qt_metacast
+32 (int (*)(...))QStyledItemDelegate::qt_metacall
+40 (int (*)(...))QStyledItemDelegate::~QStyledItemDelegate
+48 (int (*)(...))QStyledItemDelegate::~QStyledItemDelegate
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QStyledItemDelegate::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStyledItemDelegate::paint
+120 (int (*)(...))QStyledItemDelegate::sizeHint
+128 (int (*)(...))QStyledItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QStyledItemDelegate::setEditorData
+152 (int (*)(...))QStyledItemDelegate::setModelData
+160 (int (*)(...))QStyledItemDelegate::updateEditorGeometry
+168 (int (*)(...))QStyledItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+192 (int (*)(...))QStyledItemDelegate::displayText
+200 (int (*)(...))QStyledItemDelegate::initStyleOption
+
+Class QStyledItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QStyledItemDelegate (0x0x7f542e8c0888) 0
+ vptr=((& QStyledItemDelegate::_ZTV19QStyledItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7f542e8c08f0) 0
+ primary-for QStyledItemDelegate (0x0x7f542e8c0888)
+ QObject (0x0x7f542e958a80) 0
+ primary-for QAbstractItemDelegate (0x0x7f542e8c08f0)
+
+Class QStyleFactory
+ size=1 align=1
+ base size=0 base align=1
+QStyleFactory (0x0x7f542e958c60) 0 empty
+
+Class QStylePainter
+ size=24 align=8
+ base size=24 base align=8
+QStylePainter (0x0x7f542e8c0958) 0
+ QPainter (0x0x7f542e958cc0) 0
+
+Class QStylePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStylePlugin::QPrivateSignal (0x0x7f542e9a15a0) 0 empty
+
+Vtable for QStylePlugin
+QStylePlugin::_ZTV12QStylePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QStylePlugin)
+16 (int (*)(...))QStylePlugin::metaObject
+24 (int (*)(...))QStylePlugin::qt_metacast
+32 (int (*)(...))QStylePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QStylePlugin
+ size=16 align=8
+ base size=16 base align=8
+QStylePlugin (0x0x7f542e8c09c0) 0
+ vptr=((& QStylePlugin::_ZTV12QStylePlugin) + 16)
+ QObject (0x0x7f542e9a1540) 0
+ primary-for QStylePlugin (0x0x7f542e8c09c0)
+
+Class QSystemTrayIcon::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSystemTrayIcon::QPrivateSignal (0x0x7f542e9a16c0) 0 empty
+
+Vtable for QSystemTrayIcon
+QSystemTrayIcon::_ZTV15QSystemTrayIcon: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSystemTrayIcon)
+16 (int (*)(...))QSystemTrayIcon::metaObject
+24 (int (*)(...))QSystemTrayIcon::qt_metacast
+32 (int (*)(...))QSystemTrayIcon::qt_metacall
+40 (int (*)(...))QSystemTrayIcon::~QSystemTrayIcon
+48 (int (*)(...))QSystemTrayIcon::~QSystemTrayIcon
+56 (int (*)(...))QSystemTrayIcon::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSystemTrayIcon
+ size=16 align=8
+ base size=16 base align=8
+QSystemTrayIcon (0x0x7f542e8c0a28) 0
+ vptr=((& QSystemTrayIcon::_ZTV15QSystemTrayIcon) + 16)
+ QObject (0x0x7f542e9a1660) 0
+ primary-for QSystemTrayIcon (0x0x7f542e8c0a28)
+
+Class QTableView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableView::QPrivateSignal (0x0x7f542e9a19c0) 0 empty
+
+Vtable for QTableView
+QTableView::_ZTV10QTableView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTableView)
+16 (int (*)(...))QTableView::metaObject
+24 (int (*)(...))QTableView::qt_metacast
+32 (int (*)(...))QTableView::qt_metacall
+40 (int (*)(...))QTableView::~QTableView
+48 (int (*)(...))QTableView::~QTableView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTableView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTableView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QTableView::scrollContentsBy
+464 (int (*)(...))QTableView::viewportSizeHint
+472 (int (*)(...))QTableView::setModel
+480 (int (*)(...))QTableView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QTableView::visualRect
+504 (int (*)(...))QTableView::scrollTo
+512 (int (*)(...))QTableView::indexAt
+520 (int (*)(...))QTableView::sizeHintForRow
+528 (int (*)(...))QTableView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QTableView::setRootIndex
+560 (int (*)(...))QTableView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QTableView::selectionChanged
+608 (int (*)(...))QTableView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTableView::updateGeometries
+640 (int (*)(...))QTableView::verticalScrollbarAction
+648 (int (*)(...))QTableView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTableView::moveCursor
+704 (int (*)(...))QTableView::horizontalOffset
+712 (int (*)(...))QTableView::verticalOffset
+720 (int (*)(...))QTableView::isIndexHidden
+728 (int (*)(...))QTableView::setSelection
+736 (int (*)(...))QTableView::visualRegionForSelection
+744 (int (*)(...))QTableView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QTableView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI10QTableView)
+800 (int (*)(...))QTableView::_ZThn16_N10QTableViewD1Ev
+808 (int (*)(...))QTableView::_ZThn16_N10QTableViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTableView
+ size=40 align=8
+ base size=40 base align=8
+QTableView (0x0x7f542e8c0a90) 0
+ vptr=((& QTableView::_ZTV10QTableView) + 16)
+ QAbstractItemView (0x0x7f542e8c0af8) 0
+ primary-for QTableView (0x0x7f542e8c0a90)
+ QAbstractScrollArea (0x0x7f542e8c0b60) 0
+ primary-for QAbstractItemView (0x0x7f542e8c0af8)
+ QFrame (0x0x7f542e8c0bc8) 0
+ primary-for QAbstractScrollArea (0x0x7f542e8c0b60)
+ QWidget (0x0x7f542e9b20e0) 0
+ primary-for QFrame (0x0x7f542e8c0bc8)
+ QObject (0x0x7f542e9a1900) 0
+ primary-for QWidget (0x0x7f542e9b20e0)
+ QPaintDevice (0x0x7f542e9a1960) 16
+ vptr=((& QTableView::_ZTV10QTableView) + 800)
+
+Class QTableWidgetSelectionRange
+ size=16 align=4
+ base size=16 base align=4
+QTableWidgetSelectionRange (0x0x7f542e9a1b40) 0
+
+Vtable for QTableWidgetItem
+QTableWidgetItem::_ZTV16QTableWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QTableWidgetItem)
+16 (int (*)(...))QTableWidgetItem::~QTableWidgetItem
+24 (int (*)(...))QTableWidgetItem::~QTableWidgetItem
+32 (int (*)(...))QTableWidgetItem::clone
+40 (int (*)(...))QTableWidgetItem::data
+48 (int (*)(...))QTableWidgetItem::setData
+56 (int (*)(...))QTableWidgetItem::operator<
+64 (int (*)(...))QTableWidgetItem::read
+72 (int (*)(...))QTableWidgetItem::write
+
+Class QTableWidgetItem
+ size=64 align=8
+ base size=60 base align=8
+QTableWidgetItem (0x0x7f542e9a1f60) 0
+ vptr=((& QTableWidgetItem::_ZTV16QTableWidgetItem) + 16)
+
+Class QTableWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableWidget::QPrivateSignal (0x0x7f542e6352a0) 0 empty
+
+Vtable for QTableWidget
+QTableWidget::_ZTV12QTableWidget: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTableWidget)
+16 (int (*)(...))QTableWidget::metaObject
+24 (int (*)(...))QTableWidget::qt_metacast
+32 (int (*)(...))QTableWidget::qt_metacall
+40 (int (*)(...))QTableWidget::~QTableWidget
+48 (int (*)(...))QTableWidget::~QTableWidget
+56 (int (*)(...))QTableWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTableView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTableView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QTableWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QTableView::scrollContentsBy
+464 (int (*)(...))QTableView::viewportSizeHint
+472 (int (*)(...))QTableWidget::setModel
+480 (int (*)(...))QTableView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QTableView::visualRect
+504 (int (*)(...))QTableView::scrollTo
+512 (int (*)(...))QTableView::indexAt
+520 (int (*)(...))QTableView::sizeHintForRow
+528 (int (*)(...))QTableView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QTableView::setRootIndex
+560 (int (*)(...))QTableView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QTableView::selectionChanged
+608 (int (*)(...))QTableView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTableView::updateGeometries
+640 (int (*)(...))QTableView::verticalScrollbarAction
+648 (int (*)(...))QTableView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTableView::moveCursor
+704 (int (*)(...))QTableView::horizontalOffset
+712 (int (*)(...))QTableView::verticalOffset
+720 (int (*)(...))QTableView::isIndexHidden
+728 (int (*)(...))QTableView::setSelection
+736 (int (*)(...))QTableView::visualRegionForSelection
+744 (int (*)(...))QTableView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QTableView::initViewItemOption
+784 (int (*)(...))QTableWidget::mimeTypes
+792 (int (*)(...))QTableWidget::mimeData
+800 (int (*)(...))QTableWidget::dropMimeData
+808 (int (*)(...))QTableWidget::supportedDropActions
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI12QTableWidget)
+832 (int (*)(...))QTableWidget::_ZThn16_N12QTableWidgetD1Ev
+840 (int (*)(...))QTableWidget::_ZThn16_N12QTableWidgetD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTableWidget
+ size=40 align=8
+ base size=40 base align=8
+QTableWidget (0x0x7f542e9f14e0) 0
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 16)
+ QTableView (0x0x7f542e9f1548) 0
+ primary-for QTableWidget (0x0x7f542e9f14e0)
+ QAbstractItemView (0x0x7f542e9f15b0) 0
+ primary-for QTableView (0x0x7f542e9f1548)
+ QAbstractScrollArea (0x0x7f542e9f1618) 0
+ primary-for QAbstractItemView (0x0x7f542e9f15b0)
+ QFrame (0x0x7f542e9f1680) 0
+ primary-for QAbstractScrollArea (0x0x7f542e9f1618)
+ QWidget (0x0x7f542eb163f0) 0
+ primary-for QFrame (0x0x7f542e9f1680)
+ QObject (0x0x7f542e6351e0) 0
+ primary-for QWidget (0x0x7f542eb163f0)
+ QPaintDevice (0x0x7f542e635240) 16
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 832)
+
+Class QTextBrowser::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBrowser::QPrivateSignal (0x0x7f542e635660) 0 empty
+
+Vtable for QTextBrowser
+QTextBrowser::_ZTV12QTextBrowser: 79 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTextBrowser)
+16 (int (*)(...))QTextBrowser::metaObject
+24 (int (*)(...))QTextBrowser::qt_metacast
+32 (int (*)(...))QTextBrowser::qt_metacall
+40 (int (*)(...))QTextBrowser::~QTextBrowser
+48 (int (*)(...))QTextBrowser::~QTextBrowser
+56 (int (*)(...))QTextBrowser::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTextBrowser::mousePressEvent
+176 (int (*)(...))QTextBrowser::mouseReleaseEvent
+184 (int (*)(...))QTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QTextBrowser::mouseMoveEvent
+200 (int (*)(...))QTextEdit::wheelEvent
+208 (int (*)(...))QTextBrowser::keyPressEvent
+216 (int (*)(...))QTextEdit::keyReleaseEvent
+224 (int (*)(...))QTextEdit::focusInEvent
+232 (int (*)(...))QTextBrowser::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTextBrowser::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QTextEdit::dragEnterEvent
+320 (int (*)(...))QTextEdit::dragMoveEvent
+328 (int (*)(...))QTextEdit::dragLeaveEvent
+336 (int (*)(...))QTextEdit::dropEvent
+344 (int (*)(...))QTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QTextEdit::inputMethodEvent
+416 (int (*)(...))QTextEdit::inputMethodQuery
+424 (int (*)(...))QTextBrowser::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QTextBrowser::loadResource
+480 (int (*)(...))QTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QTextEdit::canInsertFromMimeData
+496 (int (*)(...))QTextEdit::insertFromMimeData
+504 (int (*)(...))QTextEdit::doSetTextCursor
+512 (int (*)(...))QTextBrowser::backward
+520 (int (*)(...))QTextBrowser::forward
+528 (int (*)(...))QTextBrowser::home
+536 (int (*)(...))QTextBrowser::reload
+544 (int (*)(...))QTextBrowser::doSetSource
+552 (int (*)(...))-16
+560 (int (*)(...))(& _ZTI12QTextBrowser)
+568 (int (*)(...))QTextBrowser::_ZThn16_N12QTextBrowserD1Ev
+576 (int (*)(...))QTextBrowser::_ZThn16_N12QTextBrowserD0Ev
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+592 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+600 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+608 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+616 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+624 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTextBrowser
+ size=40 align=8
+ base size=40 base align=8
+QTextBrowser (0x0x7f542e9f16e8) 0
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 16)
+ QTextEdit (0x0x7f542e9f1750) 0
+ primary-for QTextBrowser (0x0x7f542e9f16e8)
+ QAbstractScrollArea (0x0x7f542e9f17b8) 0
+ primary-for QTextEdit (0x0x7f542e9f1750)
+ QFrame (0x0x7f542e9f1820) 0
+ primary-for QAbstractScrollArea (0x0x7f542e9f17b8)
+ QWidget (0x0x7f542e9b2310) 0
+ primary-for QFrame (0x0x7f542e9f1820)
+ QObject (0x0x7f542e6355a0) 0
+ primary-for QWidget (0x0x7f542e9b2310)
+ QPaintDevice (0x0x7f542e635600) 16
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 568)
+
+Class QToolBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBar::QPrivateSignal (0x0x7f542e6358a0) 0 empty
+
+Vtable for QToolBar
+QToolBar::_ZTV8QToolBar: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QToolBar)
+16 (int (*)(...))QToolBar::metaObject
+24 (int (*)(...))QToolBar::qt_metacast
+32 (int (*)(...))QToolBar::qt_metacall
+40 (int (*)(...))QToolBar::~QToolBar
+48 (int (*)(...))QToolBar::~QToolBar
+56 (int (*)(...))QToolBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QToolBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QToolBar::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QToolBar::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI8QToolBar)
+456 (int (*)(...))QToolBar::_ZThn16_N8QToolBarD1Ev
+464 (int (*)(...))QToolBar::_ZThn16_N8QToolBarD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolBar
+ size=40 align=8
+ base size=40 base align=8
+QToolBar (0x0x7f542e9f1888) 0
+ vptr=((& QToolBar::_ZTV8QToolBar) + 16)
+ QWidget (0x0x7f542e9b2380) 0
+ primary-for QToolBar (0x0x7f542e9f1888)
+ QObject (0x0x7f542e6357e0) 0
+ primary-for QWidget (0x0x7f542e9b2380)
+ QPaintDevice (0x0x7f542e635840) 16
+ vptr=((& QToolBar::_ZTV8QToolBar) + 456)
+
+Class QToolBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBox::QPrivateSignal (0x0x7f542e635d20) 0 empty
+
+Vtable for QToolBox
+QToolBox::_ZTV8QToolBox: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QToolBox)
+16 (int (*)(...))QToolBox::metaObject
+24 (int (*)(...))QToolBox::qt_metacast
+32 (int (*)(...))QToolBox::qt_metacall
+40 (int (*)(...))QToolBox::~QToolBox
+48 (int (*)(...))QToolBox::~QToolBox
+56 (int (*)(...))QToolBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QToolBox::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QToolBox::itemInserted
+448 (int (*)(...))QToolBox::itemRemoved
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI8QToolBox)
+472 (int (*)(...))QToolBox::_ZThn16_N8QToolBoxD1Ev
+480 (int (*)(...))QToolBox::_ZThn16_N8QToolBoxD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolBox
+ size=40 align=8
+ base size=40 base align=8
+QToolBox (0x0x7f542e9f18f0) 0
+ vptr=((& QToolBox::_ZTV8QToolBox) + 16)
+ QFrame (0x0x7f542e9f1958) 0
+ primary-for QToolBox (0x0x7f542e9f18f0)
+ QWidget (0x0x7f542e9b23f0) 0
+ primary-for QFrame (0x0x7f542e9f1958)
+ QObject (0x0x7f542e635c60) 0
+ primary-for QWidget (0x0x7f542e9b23f0)
+ QPaintDevice (0x0x7f542e635cc0) 16
+ vptr=((& QToolBox::_ZTV8QToolBox) + 472)
+
+Class QToolButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolButton::QPrivateSignal (0x0x7f542e6900c0) 0 empty
+
+Vtable for QToolButton
+QToolButton::_ZTV11QToolButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QToolButton)
+16 (int (*)(...))QToolButton::metaObject
+24 (int (*)(...))QToolButton::qt_metacast
+32 (int (*)(...))QToolButton::qt_metacall
+40 (int (*)(...))QToolButton::~QToolButton
+48 (int (*)(...))QToolButton::~QToolButton
+56 (int (*)(...))QToolButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QToolButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QToolButton::sizeHint
+136 (int (*)(...))QToolButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QToolButton::mousePressEvent
+176 (int (*)(...))QToolButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QToolButton::enterEvent
+248 (int (*)(...))QToolButton::leaveEvent
+256 (int (*)(...))QToolButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QToolButton::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QToolButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QToolButton::nextCheckState
+456 (int (*)(...))QToolButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI11QToolButton)
+480 (int (*)(...))QToolButton::_ZThn16_N11QToolButtonD1Ev
+488 (int (*)(...))QToolButton::_ZThn16_N11QToolButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolButton
+ size=40 align=8
+ base size=40 base align=8
+QToolButton (0x0x7f542e9f19c0) 0
+ vptr=((& QToolButton::_ZTV11QToolButton) + 16)
+ QAbstractButton (0x0x7f542e9f1a28) 0
+ primary-for QToolButton (0x0x7f542e9f19c0)
+ QWidget (0x0x7f542e9b2460) 0
+ primary-for QAbstractButton (0x0x7f542e9f1a28)
+ QObject (0x0x7f542e690000) 0
+ primary-for QWidget (0x0x7f542e9b2460)
+ QPaintDevice (0x0x7f542e690060) 16
+ vptr=((& QToolButton::_ZTV11QToolButton) + 480)
+
+Class QToolTip
+ size=1 align=1
+ base size=0 base align=1
+QToolTip (0x0x7f542e690300) 0 empty
+
+Class QTreeView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeView::QPrivateSignal (0x0x7f542e690480) 0 empty
+
+Vtable for QTreeView
+QTreeView::_ZTV9QTreeView: 110 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTreeView)
+16 (int (*)(...))QTreeView::metaObject
+24 (int (*)(...))QTreeView::qt_metacast
+32 (int (*)(...))QTreeView::qt_metacall
+40 (int (*)(...))QTreeView::~QTreeView
+48 (int (*)(...))QTreeView::~QTreeView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeView::setModel
+480 (int (*)(...))QTreeView::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))-16
+808 (int (*)(...))(& _ZTI9QTreeView)
+816 (int (*)(...))QTreeView::_ZThn16_N9QTreeViewD1Ev
+824 (int (*)(...))QTreeView::_ZThn16_N9QTreeViewD0Ev
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTreeView
+ size=40 align=8
+ base size=40 base align=8
+QTreeView (0x0x7f542e9f1a90) 0
+ vptr=((& QTreeView::_ZTV9QTreeView) + 16)
+ QAbstractItemView (0x0x7f542e9f1af8) 0
+ primary-for QTreeView (0x0x7f542e9f1a90)
+ QAbstractScrollArea (0x0x7f542e9f1b60) 0
+ primary-for QAbstractItemView (0x0x7f542e9f1af8)
+ QFrame (0x0x7f542e9f1bc8) 0
+ primary-for QAbstractScrollArea (0x0x7f542e9f1b60)
+ QWidget (0x0x7f542e9b2620) 0
+ primary-for QFrame (0x0x7f542e9f1bc8)
+ QObject (0x0x7f542e6903c0) 0
+ primary-for QWidget (0x0x7f542e9b2620)
+ QPaintDevice (0x0x7f542e690420) 16
+ vptr=((& QTreeView::_ZTV9QTreeView) + 816)
+
+Class QTreeWidgetItemIterator
+ size=24 align=8
+ base size=20 base align=8
+QTreeWidgetItemIterator (0x0x7f542e690600) 0
+
+Vtable for QTreeWidgetItem
+QTreeWidgetItem::_ZTV15QTreeWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QTreeWidgetItem)
+16 (int (*)(...))QTreeWidgetItem::~QTreeWidgetItem
+24 (int (*)(...))QTreeWidgetItem::~QTreeWidgetItem
+32 (int (*)(...))QTreeWidgetItem::clone
+40 (int (*)(...))QTreeWidgetItem::data
+48 (int (*)(...))QTreeWidgetItem::setData
+56 (int (*)(...))QTreeWidgetItem::operator<
+64 (int (*)(...))QTreeWidgetItem::read
+72 (int (*)(...))QTreeWidgetItem::write
+
+Class QTreeWidgetItem
+ size=96 align=8
+ base size=92 base align=8
+QTreeWidgetItem (0x0x7f542e690cc0) 0
+ vptr=((& QTreeWidgetItem::_ZTV15QTreeWidgetItem) + 16)
+
+Class QTreeWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeWidget::QPrivateSignal (0x0x7f542e78bae0) 0 empty
+
+Vtable for QTreeWidget
+QTreeWidget::_ZTV11QTreeWidget: 114 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTreeWidget)
+16 (int (*)(...))QTreeWidget::metaObject
+24 (int (*)(...))QTreeWidget::qt_metacast
+32 (int (*)(...))QTreeWidget::qt_metacall
+40 (int (*)(...))QTreeWidget::~QTreeWidget
+48 (int (*)(...))QTreeWidget::~QTreeWidget
+56 (int (*)(...))QTreeWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QTreeWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeWidget::setModel
+480 (int (*)(...))QTreeWidget::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))QTreeWidget::mimeTypes
+808 (int (*)(...))QTreeWidget::mimeData
+816 (int (*)(...))QTreeWidget::dropMimeData
+824 (int (*)(...))QTreeWidget::supportedDropActions
+832 (int (*)(...))-16
+840 (int (*)(...))(& _ZTI11QTreeWidget)
+848 (int (*)(...))QTreeWidget::_ZThn16_N11QTreeWidgetD1Ev
+856 (int (*)(...))QTreeWidget::_ZThn16_N11QTreeWidgetD0Ev
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+896 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+904 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTreeWidget
+ size=40 align=8
+ base size=40 base align=8
+QTreeWidget (0x0x7f542e711f08) 0
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 16)
+ QTreeView (0x0x7f542e711f70) 0
+ primary-for QTreeWidget (0x0x7f542e711f08)
+ QAbstractItemView (0x0x7f542e711618) 0
+ primary-for QTreeView (0x0x7f542e711f70)
+ QAbstractScrollArea (0x0x7f542e711ea0) 0
+ primary-for QAbstractItemView (0x0x7f542e711618)
+ QFrame (0x0x7f542e79b000) 0
+ primary-for QAbstractScrollArea (0x0x7f542e711ea0)
+ QWidget (0x0x7f542e6f23f0) 0
+ primary-for QFrame (0x0x7f542e79b000)
+ QObject (0x0x7f542e78ba20) 0
+ primary-for QWidget (0x0x7f542e6f23f0)
+ QPaintDevice (0x0x7f542e78ba80) 16
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 848)
+
+Class QUndoView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoView::QPrivateSignal (0x0x7f542e7c0120) 0 empty
+
+Vtable for QUndoView
+QUndoView::_ZTV9QUndoView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QUndoView)
+16 (int (*)(...))QUndoView::metaObject
+24 (int (*)(...))QUndoView::qt_metacast
+32 (int (*)(...))QUndoView::qt_metacall
+40 (int (*)(...))QUndoView::~QUndoView
+48 (int (*)(...))QUndoView::~QUndoView
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI9QUndoView)
+800 (int (*)(...))QUndoView::_ZThn16_N9QUndoViewD1Ev
+808 (int (*)(...))QUndoView::_ZThn16_N9QUndoViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QUndoView
+ size=40 align=8
+ base size=40 base align=8
+QUndoView (0x0x7f542e79b208) 0
+ vptr=((& QUndoView::_ZTV9QUndoView) + 16)
+ QListView (0x0x7f542e79b270) 0
+ primary-for QUndoView (0x0x7f542e79b208)
+ QAbstractItemView (0x0x7f542e79b2d8) 0
+ primary-for QListView (0x0x7f542e79b270)
+ QAbstractScrollArea (0x0x7f542e79b340) 0
+ primary-for QAbstractItemView (0x0x7f542e79b2d8)
+ QFrame (0x0x7f542e79b3a8) 0
+ primary-for QAbstractScrollArea (0x0x7f542e79b340)
+ QWidget (0x0x7f542e6f2540) 0
+ primary-for QFrame (0x0x7f542e79b3a8)
+ QObject (0x0x7f542e7c0060) 0
+ primary-for QWidget (0x0x7f542e6f2540)
+ QPaintDevice (0x0x7f542e7c00c0) 16
+ vptr=((& QUndoView::_ZTV9QUndoView) + 800)
+
+Class QWhatsThis
+ size=1 align=1
+ base size=0 base align=1
+QWhatsThis (0x0x7f542e7c02a0) 0 empty
+
+Class QWidgetAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidgetAction::QPrivateSignal (0x0x7f542e7c0360) 0 empty
+
+Vtable for QWidgetAction
+QWidgetAction::_ZTV13QWidgetAction: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QWidgetAction)
+16 (int (*)(...))QWidgetAction::metaObject
+24 (int (*)(...))QWidgetAction::qt_metacast
+32 (int (*)(...))QWidgetAction::qt_metacall
+40 (int (*)(...))QWidgetAction::~QWidgetAction
+48 (int (*)(...))QWidgetAction::~QWidgetAction
+56 (int (*)(...))QWidgetAction::event
+64 (int (*)(...))QWidgetAction::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidgetAction::createWidget
+120 (int (*)(...))QWidgetAction::deleteWidget
+
+Class QWidgetAction
+ size=16 align=8
+ base size=16 base align=8
+QWidgetAction (0x0x7f542e79b410) 0
+ vptr=((& QWidgetAction::_ZTV13QWidgetAction) + 16)
+ QAction (0x0x7f542e79b478) 0
+ primary-for QWidgetAction (0x0x7f542e79b410)
+ QObject (0x0x7f542e7c0300) 0
+ primary-for QAction (0x0x7f542e79b478)
+
+Class QWizard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizard::QPrivateSignal (0x0x7f542e7c05a0) 0 empty
+
+Vtable for QWizard
+QWizard::_ZTV7QWizard: 73 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWizard)
+16 (int (*)(...))QWizard::metaObject
+24 (int (*)(...))QWizard::qt_metacast
+32 (int (*)(...))QWizard::qt_metacall
+40 (int (*)(...))QWizard::~QWizard
+48 (int (*)(...))QWizard::~QWizard
+56 (int (*)(...))QWizard::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWizard::setVisible
+128 (int (*)(...))QWizard::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWizard::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWizard::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QWizard::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))QWizard::validateCurrentPage
+480 (int (*)(...))QWizard::nextId
+488 (int (*)(...))QWizard::initializePage
+496 (int (*)(...))QWizard::cleanupPage
+504 (int (*)(...))-16
+512 (int (*)(...))(& _ZTI7QWizard)
+520 (int (*)(...))QWizard::_ZThn16_N7QWizardD1Ev
+528 (int (*)(...))QWizard::_ZThn16_N7QWizardD0Ev
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWizard
+ size=40 align=8
+ base size=40 base align=8
+QWizard (0x0x7f542e79b4e0) 0
+ vptr=((& QWizard::_ZTV7QWizard) + 16)
+ QDialog (0x0x7f542e79b548) 0
+ primary-for QWizard (0x0x7f542e79b4e0)
+ QWidget (0x0x7f542e6f25b0) 0
+ primary-for QDialog (0x0x7f542e79b548)
+ QObject (0x0x7f542e7c04e0) 0
+ primary-for QWidget (0x0x7f542e6f25b0)
+ QPaintDevice (0x0x7f542e7c0540) 16
+ vptr=((& QWizard::_ZTV7QWizard) + 520)
+
+Class QWizardPage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizardPage::QPrivateSignal (0x0x7f542e7c0d20) 0 empty
+
+Vtable for QWizardPage
+QWizardPage::_ZTV11QWizardPage: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWizardPage)
+16 (int (*)(...))QWizardPage::metaObject
+24 (int (*)(...))QWizardPage::qt_metacast
+32 (int (*)(...))QWizardPage::qt_metacall
+40 (int (*)(...))QWizardPage::~QWizardPage
+48 (int (*)(...))QWizardPage::~QWizardPage
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QWizardPage::initializePage
+440 (int (*)(...))QWizardPage::cleanupPage
+448 (int (*)(...))QWizardPage::validatePage
+456 (int (*)(...))QWizardPage::isComplete
+464 (int (*)(...))QWizardPage::nextId
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QWizardPage)
+488 (int (*)(...))QWizardPage::_ZThn16_N11QWizardPageD1Ev
+496 (int (*)(...))QWizardPage::_ZThn16_N11QWizardPageD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWizardPage
+ size=40 align=8
+ base size=40 base align=8
+QWizardPage (0x0x7f542e79b6e8) 0
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 16)
+ QWidget (0x0x7f542e7db770) 0
+ primary-for QWizardPage (0x0x7f542e79b6e8)
+ QObject (0x0x7f542e7c0c60) 0
+ primary-for QWidget (0x0x7f542e7db770)
+ QPaintDevice (0x0x7f542e7c0cc0) 16
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 488)
+
+Vtable for QDesignerCustomWidgetInterface
+QDesignerCustomWidgetInterface::_ZTV30QDesignerCustomWidgetInterface: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI30QDesignerCustomWidgetInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))QDesignerCustomWidgetInterface::isInitialized
+104 (int (*)(...))QDesignerCustomWidgetInterface::initialize
+112 (int (*)(...))QDesignerCustomWidgetInterface::domXml
+120 (int (*)(...))QDesignerCustomWidgetInterface::codeTemplate
+
+Class QDesignerCustomWidgetInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerCustomWidgetInterface (0x0x7f542e7c0ea0) 0 nearly-empty
+ vptr=((& QDesignerCustomWidgetInterface::_ZTV30QDesignerCustomWidgetInterface) + 16)
+
+Vtable for QDesignerCustomWidgetCollectionInterface
+QDesignerCustomWidgetCollectionInterface::_ZTV40QDesignerCustomWidgetCollectionInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI40QDesignerCustomWidgetCollectionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerCustomWidgetCollectionInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerCustomWidgetCollectionInterface (0x0x7f542e43d3c0) 0 nearly-empty
+ vptr=((& QDesignerCustomWidgetCollectionInterface::_ZTV40QDesignerCustomWidgetCollectionInterface) + 16)
+
+Class QDomImplementation
+ size=8 align=8
+ base size=8 base align=8
+QDomImplementation (0x0x7f542e43d7e0) 0
+
+Class QDomNode
+ size=8 align=8
+ base size=8 base align=8
+QDomNode (0x0x7f542e43d840) 0
+
+Class QDomNodeList
+ size=8 align=8
+ base size=8 base align=8
+QDomNodeList (0x0x7f542e43d8a0) 0
+
+Class QDomDocumentType
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentType (0x0x7f542e43c478) 0
+ QDomNode (0x0x7f542e43da80) 0
+
+Class QDomDocument
+ size=8 align=8
+ base size=8 base align=8
+QDomDocument (0x0x7f542e43c4e0) 0
+ QDomNode (0x0x7f542e43db40) 0
+
+Class QDomNamedNodeMap
+ size=8 align=8
+ base size=8 base align=8
+QDomNamedNodeMap (0x0x7f542e43dc00) 0
+
+Class QDomDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentFragment (0x0x7f542e43c548) 0
+ QDomNode (0x0x7f542e43dd80) 0
+
+Class QDomCharacterData
+ size=8 align=8
+ base size=8 base align=8
+QDomCharacterData (0x0x7f542e43c5b0) 0
+ QDomNode (0x0x7f542e43de40) 0
+
+Class QDomAttr
+ size=8 align=8
+ base size=8 base align=8
+QDomAttr (0x0x7f542e43c618) 0
+ QDomNode (0x0x7f542e43dea0) 0
+
+Class QDomElement
+ size=8 align=8
+ base size=8 base align=8
+QDomElement (0x0x7f542e43c680) 0
+ QDomNode (0x0x7f542e43df60) 0
+
+Class QDomText
+ size=8 align=8
+ base size=8 base align=8
+QDomText (0x0x7f542e43c6e8) 0
+ QDomCharacterData (0x0x7f542e43c750) 0
+ QDomNode (0x0x7f542e4a01e0) 0
+
+Class QDomComment
+ size=8 align=8
+ base size=8 base align=8
+QDomComment (0x0x7f542e43c7b8) 0
+ QDomCharacterData (0x0x7f542e43c820) 0
+ QDomNode (0x0x7f542e4a02a0) 0
+
+Class QDomCDATASection
+ size=8 align=8
+ base size=8 base align=8
+QDomCDATASection (0x0x7f542e43c888) 0
+ QDomText (0x0x7f542e43c8f0) 0
+ QDomCharacterData (0x0x7f542e43c958) 0
+ QDomNode (0x0x7f542e4a0360) 0
+
+Class QDomNotation
+ size=8 align=8
+ base size=8 base align=8
+QDomNotation (0x0x7f542e43c9c0) 0
+ QDomNode (0x0x7f542e4a0420) 0
+
+Class QDomEntity
+ size=8 align=8
+ base size=8 base align=8
+QDomEntity (0x0x7f542e43ca28) 0
+ QDomNode (0x0x7f542e4a04e0) 0
+
+Class QDomEntityReference
+ size=8 align=8
+ base size=8 base align=8
+QDomEntityReference (0x0x7f542e43ca90) 0
+ QDomNode (0x0x7f542e4a05a0) 0
+
+Class QDomProcessingInstruction
+ size=8 align=8
+ base size=8 base align=8
+QDomProcessingInstruction (0x0x7f542e43caf8) 0
+ QDomNode (0x0x7f542e4a0660) 0
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7f542e4a0720) 0
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7f542e4a0ba0) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7f542e52dba0) 0 empty
+
+Vtable for QOpenGLDebugLogger
+QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QOpenGLDebugLogger)
+16 (int (*)(...))QOpenGLDebugLogger::metaObject
+24 (int (*)(...))QOpenGLDebugLogger::qt_metacast
+32 (int (*)(...))QOpenGLDebugLogger::qt_metacall
+40 (int (*)(...))QOpenGLDebugLogger::~QOpenGLDebugLogger
+48 (int (*)(...))QOpenGLDebugLogger::~QOpenGLDebugLogger
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLDebugLogger
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLDebugLogger (0x0x7f542e56d068) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16)
+ QObject (0x0x7f542e52db40) 0
+ primary-for QOpenGLDebugLogger (0x0x7f542e56d068)
+
+Vtable for QOpenGLFramebufferObject
+QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QOpenGLFramebufferObject)
+16 (int (*)(...))QOpenGLFramebufferObject::~QOpenGLFramebufferObject
+24 (int (*)(...))QOpenGLFramebufferObject::~QOpenGLFramebufferObject
+
+Class QOpenGLFramebufferObject
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLFramebufferObject (0x0x7f542e52df00) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7f542e5c61e0) 0
+
+Vtable for QOpenGLPaintDevice
+QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QOpenGLPaintDevice)
+16 (int (*)(...))QOpenGLPaintDevice::~QOpenGLPaintDevice
+24 (int (*)(...))QOpenGLPaintDevice::~QOpenGLPaintDevice
+32 (int (*)(...))QOpenGLPaintDevice::devType
+40 (int (*)(...))QOpenGLPaintDevice::paintEngine
+48 (int (*)(...))QOpenGLPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QOpenGLPaintDevice::ensureActiveTarget
+
+Class QOpenGLPaintDevice
+ size=24 align=8
+ base size=24 base align=8
+QOpenGLPaintDevice (0x0x7f542e56d0d0) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16)
+ QPaintDevice (0x0x7f542e5c6240) 0
+ primary-for QOpenGLPaintDevice (0x0x7f542e56d0d0)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7f542e5c6480) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7f542e20bb40) 0 empty
+
+Vtable for QOpenGLShader
+QOpenGLShader::_ZTV13QOpenGLShader: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QOpenGLShader)
+16 (int (*)(...))QOpenGLShader::metaObject
+24 (int (*)(...))QOpenGLShader::qt_metacast
+32 (int (*)(...))QOpenGLShader::qt_metacall
+40 (int (*)(...))QOpenGLShader::~QOpenGLShader
+48 (int (*)(...))QOpenGLShader::~QOpenGLShader
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLShader
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLShader (0x0x7f542e213a90) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16)
+ QObject (0x0x7f542e20bae0) 0
+ primary-for QOpenGLShader (0x0x7f542e213a90)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7f542e24f060) 0 empty
+
+Vtable for QOpenGLShaderProgram
+QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QOpenGLShaderProgram)
+16 (int (*)(...))QOpenGLShaderProgram::metaObject
+24 (int (*)(...))QOpenGLShaderProgram::qt_metacast
+32 (int (*)(...))QOpenGLShaderProgram::qt_metacall
+40 (int (*)(...))QOpenGLShaderProgram::~QOpenGLShaderProgram
+48 (int (*)(...))QOpenGLShaderProgram::~QOpenGLShaderProgram
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QOpenGLShaderProgram::link
+
+Class QOpenGLShaderProgram
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLShaderProgram (0x0x7f542e213c30) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16)
+ QObject (0x0x7f542e24f000) 0
+ primary-for QOpenGLShaderProgram (0x0x7f542e213c30)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7f542e24f1e0) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7f542e2e9300) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7f542e2e9540) 0 empty
+
+Vtable for QOpenGLTimerQuery
+QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QOpenGLTimerQuery)
+16 (int (*)(...))QOpenGLTimerQuery::metaObject
+24 (int (*)(...))QOpenGLTimerQuery::qt_metacast
+32 (int (*)(...))QOpenGLTimerQuery::qt_metacall
+40 (int (*)(...))QOpenGLTimerQuery::~QOpenGLTimerQuery
+48 (int (*)(...))QOpenGLTimerQuery::~QOpenGLTimerQuery
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLTimerQuery
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLTimerQuery (0x0x7f542e213dd0) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16)
+ QObject (0x0x7f542e2e94e0) 0
+ primary-for QOpenGLTimerQuery (0x0x7f542e213dd0)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7f542e2e9720) 0 empty
+
+Vtable for QOpenGLTimeMonitor
+QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QOpenGLTimeMonitor)
+16 (int (*)(...))QOpenGLTimeMonitor::metaObject
+24 (int (*)(...))QOpenGLTimeMonitor::qt_metacast
+32 (int (*)(...))QOpenGLTimeMonitor::qt_metacall
+40 (int (*)(...))QOpenGLTimeMonitor::~QOpenGLTimeMonitor
+48 (int (*)(...))QOpenGLTimeMonitor::~QOpenGLTimeMonitor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLTimeMonitor
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLTimeMonitor (0x0x7f542e213e38) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16)
+ QObject (0x0x7f542e2e96c0) 0
+ primary-for QOpenGLTimeMonitor (0x0x7f542e213e38)
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7f542e2e98a0) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7f542e3b7900) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7f542e3b7ae0) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7f542e3b7b40) 0
+
+Vtable for QAbstractOpenGLFunctions
+QAbstractOpenGLFunctions::_ZTV24QAbstractOpenGLFunctions: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractOpenGLFunctions)
+16 (int (*)(...))QAbstractOpenGLFunctions::~QAbstractOpenGLFunctions
+24 (int (*)(...))QAbstractOpenGLFunctions::~QAbstractOpenGLFunctions
+32 (int (*)(...))QAbstractOpenGLFunctions::initializeOpenGLFunctions
+
+Class QAbstractOpenGLFunctions
+ size=16 align=8
+ base size=16 base align=8
+QAbstractOpenGLFunctions (0x0x7f542e3b7d20) 0
+ vptr=((& QAbstractOpenGLFunctions::_ZTV24QAbstractOpenGLFunctions) + 16)
+
+Class QOpenGLFunctions_1_0_CoreBackend::Functions
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_1_0_CoreBackend::Functions (0x0x7f542e3b7f00) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7f542e3b06e8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e3b7ea0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7f542e3e72a0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7f542e3b0750) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e3e7240) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7f542e3e7600) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7f542e3b07b8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e3e75a0) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7f542e3e7960) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7f542e3b0820) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e3e7900) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7f542e3e7cc0) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7f542e3b0888) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e3e7c60) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7f542e006060) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7f542e3b08f0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e006000) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7f542e0063c0) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7f542e3b0958) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e006360) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7f542e006720) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7f542e3b09c0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e0066c0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7f542e006a80) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7f542e3b0a28) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e006a20) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7f542e006de0) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7f542e3b0a90) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e006d80) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7f542e03d180) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7f542e3b0af8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e03d120) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7f542e03d4e0) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7f542e3b0b60) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e03d480) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7f542e03d840) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7f542e3b0bc8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e03d7e0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7f542e03dba0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7f542e3b0c30) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e03db40) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7f542e03df00) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7f542e3b0c98) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e03dea0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7f542e0782a0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7f542e3b0d00) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e078240) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7f542e078600) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7f542e3b0d68) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e0785a0) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7f542e078960) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7f542e3b0dd0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e078900) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7f542e078cc0) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7f542e3b0e38) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e078c60) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7f542e0d1060) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7f542e3b0ea0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e0d1000) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7f542e0d13c0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7f542e3b0f08) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e0d1360) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7f542e0d1720) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7f542e3b0f70) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e0d16c0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7f542e0d1a80) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7f542e0ec000) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e0d1a20) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7f542e0d1de0) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7f542e0ec068) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e0d1d80) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7f542e103180) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7f542e0ec0d0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e103120) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7f542e1034e0) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7f542e0ec138) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e103480) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7f542e103840) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7f542e0ec1a0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f542e1037e0) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7f542e103b40) 0
+
+Class QOpenGLVersionFunctionsFactory
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVersionFunctionsFactory (0x0x7f542e103cc0) 0 empty
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7f542e103de0) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7f542e103e40) 0
+
+Vtable for QOpenGLVertexArrayObject
+QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QOpenGLVertexArrayObject)
+16 (int (*)(...))QOpenGLVertexArrayObject::metaObject
+24 (int (*)(...))QOpenGLVertexArrayObject::qt_metacast
+32 (int (*)(...))QOpenGLVertexArrayObject::qt_metacall
+40 (int (*)(...))QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject
+48 (int (*)(...))QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLVertexArrayObject
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLVertexArrayObject (0x0x7f542e0ec208) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16)
+ QObject (0x0x7f542e103d80) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7f542e0ec208)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7f542e1334e0) 0 empty
+
+Vtable for QOpenGLWindow
+QOpenGLWindow::_ZTV13QOpenGLWindow: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QOpenGLWindow)
+16 (int (*)(...))QOpenGLWindow::metaObject
+24 (int (*)(...))QOpenGLWindow::qt_metacast
+32 (int (*)(...))QOpenGLWindow::qt_metacall
+40 (int (*)(...))QOpenGLWindow::~QOpenGLWindow
+48 (int (*)(...))QOpenGLWindow::~QOpenGLWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QOpenGLWindow::resizeEvent
+168 (int (*)(...))QOpenGLWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QOpenGLWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))QOpenGLWindow::initializeGL
+336 (int (*)(...))QOpenGLWindow::resizeGL
+344 (int (*)(...))QOpenGLWindow::paintGL
+352 (int (*)(...))QOpenGLWindow::paintUnderGL
+360 (int (*)(...))QOpenGLWindow::paintOverGL
+368 (int (*)(...))QOpenGLWindow::redirected
+376 (int (*)(...))-16
+384 (int (*)(...))(& _ZTI13QOpenGLWindow)
+392 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD1Ev
+400 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD0Ev
+408 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+416 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+424 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+432 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+440 (int (*)(...))-40
+448 (int (*)(...))(& _ZTI13QOpenGLWindow)
+456 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD1Ev
+464 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD0Ev
+472 (int (*)(...))QPaintDevice::devType
+480 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+488 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QPaintDevice::initPainter
+504 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow10redirectedEP6QPoint
+512 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QOpenGLWindow
+ size=56 align=8
+ base size=50 base align=8
+QOpenGLWindow (0x0x7f542e0ec2d8) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16)
+ QPaintDeviceWindow (0x0x7f542e3cf930) 0
+ primary-for QOpenGLWindow (0x0x7f542e0ec2d8)
+ QWindow (0x0x7f542e3cf9a0) 0
+ primary-for QPaintDeviceWindow (0x0x7f542e3cf930)
+ QObject (0x0x7f542e1333c0) 0
+ primary-for QWindow (0x0x7f542e3cf9a0)
+ QSurface (0x0x7f542e133420) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 392)
+ QPaintDevice (0x0x7f542e133480) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 456)
+
+Class QOpenGLWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWidget::QPrivateSignal (0x0x7f542e133720) 0 empty
+
+Vtable for QOpenGLWidget
+QOpenGLWidget::_ZTV13QOpenGLWidget: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QOpenGLWidget)
+16 (int (*)(...))QOpenGLWidget::metaObject
+24 (int (*)(...))QOpenGLWidget::qt_metacast
+32 (int (*)(...))QOpenGLWidget::qt_metacall
+40 (int (*)(...))QOpenGLWidget::~QOpenGLWidget
+48 (int (*)(...))QOpenGLWidget::~QOpenGLWidget
+56 (int (*)(...))QOpenGLWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QOpenGLWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QOpenGLWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QOpenGLWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QOpenGLWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QOpenGLWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QOpenGLWidget::initializeGL
+440 (int (*)(...))QOpenGLWidget::resizeGL
+448 (int (*)(...))QOpenGLWidget::paintGL
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI13QOpenGLWidget)
+472 (int (*)(...))QOpenGLWidget::_ZThn16_N13QOpenGLWidgetD1Ev
+480 (int (*)(...))QOpenGLWidget::_ZThn16_N13QOpenGLWidgetD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QOpenGLWidget::_ZThn16_NK13QOpenGLWidget11paintEngineEv
+504 (int (*)(...))QOpenGLWidget::_ZThn16_NK13QOpenGLWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QOpenGLWidget::_ZThn16_NK13QOpenGLWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QOpenGLWidget
+ size=40 align=8
+ base size=40 base align=8
+QOpenGLWidget (0x0x7f542e0ec3a8) 0
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 16)
+ QWidget (0x0x7f542e3cfb60) 0
+ primary-for QOpenGLWidget (0x0x7f542e0ec3a8)
+ QObject (0x0x7f542e133660) 0
+ primary-for QWidget (0x0x7f542e3cfb60)
+ QPaintDevice (0x0x7f542e1336c0) 16
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 472)
+
+Class QDesignerActionEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerActionEditorInterface::QPrivateSignal (0x0x7f542e133960) 0 empty
+
+Vtable for QDesignerActionEditorInterface
+QDesignerActionEditorInterface::_ZTV30QDesignerActionEditorInterface: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI30QDesignerActionEditorInterface)
+16 (int (*)(...))QDesignerActionEditorInterface::metaObject
+24 (int (*)(...))QDesignerActionEditorInterface::qt_metacast
+32 (int (*)(...))QDesignerActionEditorInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDesignerActionEditorInterface::core
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))__cxa_pure_virtual
+456 (int (*)(...))__cxa_pure_virtual
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI30QDesignerActionEditorInterface)
+480 0
+488 0
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerActionEditorInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerActionEditorInterface (0x0x7f542e0ec478) 0
+ vptr=((& QDesignerActionEditorInterface::_ZTV30QDesignerActionEditorInterface) + 16)
+ QWidget (0x0x7f542e3cfcb0) 0
+ primary-for QDesignerActionEditorInterface (0x0x7f542e0ec478)
+ QObject (0x0x7f542e1338a0) 0
+ primary-for QWidget (0x0x7f542e3cfcb0)
+ QPaintDevice (0x0x7f542e133900) 16
+ vptr=((& QDesignerActionEditorInterface::_ZTV30QDesignerActionEditorInterface) + 480)
+
+Vtable for QDesignerDnDItemInterface
+QDesignerDnDItemInterface::_ZTV25QDesignerDnDItemInterface: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QDesignerDnDItemInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerDnDItemInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerDnDItemInterface (0x0x7f542e133a20) 0 nearly-empty
+ vptr=((& QDesignerDnDItemInterface::_ZTV25QDesignerDnDItemInterface) + 16)
+
+Vtable for QAbstractFormBuilder
+QAbstractFormBuilder::_ZTV20QAbstractFormBuilder: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAbstractFormBuilder)
+16 (int (*)(...))QAbstractFormBuilder::~QAbstractFormBuilder
+24 (int (*)(...))QAbstractFormBuilder::~QAbstractFormBuilder
+32 (int (*)(...))QAbstractFormBuilder::load
+40 (int (*)(...))QAbstractFormBuilder::save
+48 (int (*)(...))QAbstractFormBuilder::loadExtraInfo
+56 (int (*)(...))QAbstractFormBuilder::create
+64 (int (*)(...))QAbstractFormBuilder::create
+72 (int (*)(...))QAbstractFormBuilder::create
+80 (int (*)(...))QAbstractFormBuilder::create
+88 (int (*)(...))QAbstractFormBuilder::create
+96 (int (*)(...))QAbstractFormBuilder::create
+104 (int (*)(...))QAbstractFormBuilder::addMenuAction
+112 (int (*)(...))QAbstractFormBuilder::applyProperties
+120 (int (*)(...))QAbstractFormBuilder::applyTabStops
+128 (int (*)(...))QAbstractFormBuilder::createWidget
+136 (int (*)(...))QAbstractFormBuilder::createLayout
+144 (int (*)(...))QAbstractFormBuilder::createAction
+152 (int (*)(...))QAbstractFormBuilder::createActionGroup
+160 (int (*)(...))QAbstractFormBuilder::createCustomWidgets
+168 (int (*)(...))QAbstractFormBuilder::createConnections
+176 (int (*)(...))QAbstractFormBuilder::createResources
+184 (int (*)(...))QAbstractFormBuilder::addItem
+192 (int (*)(...))QAbstractFormBuilder::addItem
+200 (int (*)(...))QAbstractFormBuilder::saveExtraInfo
+208 (int (*)(...))QAbstractFormBuilder::saveDom
+216 (int (*)(...))QAbstractFormBuilder::createActionRefDom
+224 (int (*)(...))QAbstractFormBuilder::createDom
+232 (int (*)(...))QAbstractFormBuilder::createDom
+240 (int (*)(...))QAbstractFormBuilder::createDom
+248 (int (*)(...))QAbstractFormBuilder::createDom
+256 (int (*)(...))QAbstractFormBuilder::createDom
+264 (int (*)(...))QAbstractFormBuilder::createDom
+272 (int (*)(...))QAbstractFormBuilder::saveConnections
+280 (int (*)(...))QAbstractFormBuilder::saveCustomWidgets
+288 (int (*)(...))QAbstractFormBuilder::saveTabStops
+296 (int (*)(...))QAbstractFormBuilder::saveResources
+304 (int (*)(...))QAbstractFormBuilder::computeProperties
+312 (int (*)(...))QAbstractFormBuilder::checkProperty
+320 (int (*)(...))QAbstractFormBuilder::createProperty
+328 (int (*)(...))QAbstractFormBuilder::layoutInfo
+
+Class QAbstractFormBuilder
+ size=16 align=8
+ base size=16 base align=8
+QAbstractFormBuilder (0x0x7f542e133a80) 0
+ vptr=((& QAbstractFormBuilder::_ZTV20QAbstractFormBuilder) + 16)
+
+Class QDesignerFormEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormEditorInterface::QPrivateSignal (0x0x7f542e133cc0) 0 empty
+
+Vtable for QDesignerFormEditorInterface
+QDesignerFormEditorInterface::_ZTV28QDesignerFormEditorInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QDesignerFormEditorInterface)
+16 (int (*)(...))QDesignerFormEditorInterface::metaObject
+24 (int (*)(...))QDesignerFormEditorInterface::qt_metacast
+32 (int (*)(...))QDesignerFormEditorInterface::qt_metacall
+40 (int (*)(...))QDesignerFormEditorInterface::~QDesignerFormEditorInterface
+48 (int (*)(...))QDesignerFormEditorInterface::~QDesignerFormEditorInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDesignerFormEditorInterface
+ size=24 align=8
+ base size=24 base align=8
+QDesignerFormEditorInterface (0x0x7f542e0ec4e0) 0
+ vptr=((& QDesignerFormEditorInterface::_ZTV28QDesignerFormEditorInterface) + 16)
+ QObject (0x0x7f542e133c60) 0
+ primary-for QDesignerFormEditorInterface (0x0x7f542e0ec4e0)
+
+Vtable for QDesignerFormEditorPluginInterface
+QDesignerFormEditorPluginInterface::_ZTV34QDesignerFormEditorPluginInterface: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI34QDesignerFormEditorPluginInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerFormEditorPluginInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerFormEditorPluginInterface (0x0x7f542e133de0) 0 nearly-empty
+ vptr=((& QDesignerFormEditorPluginInterface::_ZTV34QDesignerFormEditorPluginInterface) + 16)
+
+Class QDesignerFormWindowInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowInterface::QPrivateSignal (0x0x7f542e1b60c0) 0 empty
+
+Vtable for QDesignerFormWindowInterface
+QDesignerFormWindowInterface::_ZTV28QDesignerFormWindowInterface: 121 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QDesignerFormWindowInterface)
+16 (int (*)(...))QDesignerFormWindowInterface::metaObject
+24 (int (*)(...))QDesignerFormWindowInterface::qt_metacast
+32 (int (*)(...))QDesignerFormWindowInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))__cxa_pure_virtual
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))__cxa_pure_virtual
+456 (int (*)(...))__cxa_pure_virtual
+464 (int (*)(...))__cxa_pure_virtual
+472 (int (*)(...))__cxa_pure_virtual
+480 (int (*)(...))__cxa_pure_virtual
+488 (int (*)(...))__cxa_pure_virtual
+496 (int (*)(...))__cxa_pure_virtual
+504 (int (*)(...))__cxa_pure_virtual
+512 (int (*)(...))__cxa_pure_virtual
+520 (int (*)(...))__cxa_pure_virtual
+528 (int (*)(...))__cxa_pure_virtual
+536 (int (*)(...))__cxa_pure_virtual
+544 (int (*)(...))__cxa_pure_virtual
+552 (int (*)(...))__cxa_pure_virtual
+560 (int (*)(...))__cxa_pure_virtual
+568 (int (*)(...))__cxa_pure_virtual
+576 (int (*)(...))__cxa_pure_virtual
+584 (int (*)(...))__cxa_pure_virtual
+592 (int (*)(...))__cxa_pure_virtual
+600 (int (*)(...))__cxa_pure_virtual
+608 (int (*)(...))__cxa_pure_virtual
+616 (int (*)(...))__cxa_pure_virtual
+624 (int (*)(...))__cxa_pure_virtual
+632 (int (*)(...))QDesignerFormWindowInterface::core
+640 (int (*)(...))__cxa_pure_virtual
+648 (int (*)(...))__cxa_pure_virtual
+656 (int (*)(...))__cxa_pure_virtual
+664 (int (*)(...))__cxa_pure_virtual
+672 (int (*)(...))__cxa_pure_virtual
+680 (int (*)(...))__cxa_pure_virtual
+688 (int (*)(...))__cxa_pure_virtual
+696 (int (*)(...))__cxa_pure_virtual
+704 (int (*)(...))__cxa_pure_virtual
+712 (int (*)(...))__cxa_pure_virtual
+720 (int (*)(...))__cxa_pure_virtual
+728 (int (*)(...))__cxa_pure_virtual
+736 (int (*)(...))__cxa_pure_virtual
+744 (int (*)(...))__cxa_pure_virtual
+752 (int (*)(...))__cxa_pure_virtual
+760 (int (*)(...))__cxa_pure_virtual
+768 (int (*)(...))__cxa_pure_virtual
+776 (int (*)(...))__cxa_pure_virtual
+784 (int (*)(...))__cxa_pure_virtual
+792 (int (*)(...))__cxa_pure_virtual
+800 (int (*)(...))__cxa_pure_virtual
+808 (int (*)(...))__cxa_pure_virtual
+816 (int (*)(...))__cxa_pure_virtual
+824 (int (*)(...))__cxa_pure_virtual
+832 (int (*)(...))__cxa_pure_virtual
+840 (int (*)(...))__cxa_pure_virtual
+848 (int (*)(...))__cxa_pure_virtual
+856 (int (*)(...))__cxa_pure_virtual
+864 (int (*)(...))__cxa_pure_virtual
+872 (int (*)(...))__cxa_pure_virtual
+880 (int (*)(...))__cxa_pure_virtual
+888 (int (*)(...))-16
+896 (int (*)(...))(& _ZTI28QDesignerFormWindowInterface)
+904 0
+912 0
+920 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+928 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+936 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+944 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+952 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+960 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerFormWindowInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerFormWindowInterface (0x0x7f542e0ec548) 0
+ vptr=((& QDesignerFormWindowInterface::_ZTV28QDesignerFormWindowInterface) + 16)
+ QWidget (0x0x7f542e3cfe00) 0
+ primary-for QDesignerFormWindowInterface (0x0x7f542e0ec548)
+ QObject (0x0x7f542e1b6000) 0
+ primary-for QWidget (0x0x7f542e3cfe00)
+ QPaintDevice (0x0x7f542e1b6060) 16
+ vptr=((& QDesignerFormWindowInterface::_ZTV28QDesignerFormWindowInterface) + 904)
+
+Vtable for QDesignerFormWindowCursorInterface
+QDesignerFormWindowCursorInterface::_ZTV34QDesignerFormWindowCursorInterface: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI34QDesignerFormWindowCursorInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerFormWindowCursorInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerFormWindowCursorInterface (0x0x7f542e1b6240) 0 nearly-empty
+ vptr=((& QDesignerFormWindowCursorInterface::_ZTV34QDesignerFormWindowCursorInterface) + 16)
+
+Class QDesignerFormWindowManagerInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowManagerInterface::QPrivateSignal (0x0x7f542e1b6300) 0 empty
+
+Vtable for QDesignerFormWindowManagerInterface
+QDesignerFormWindowManagerInterface::_ZTV35QDesignerFormWindowManagerInterface: 29 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI35QDesignerFormWindowManagerInterface)
+16 (int (*)(...))QDesignerFormWindowManagerInterface::metaObject
+24 (int (*)(...))QDesignerFormWindowManagerInterface::qt_metacast
+32 (int (*)(...))QDesignerFormWindowManagerInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerFormWindowManagerInterface
+ size=16 align=8
+ base size=16 base align=8
+QDesignerFormWindowManagerInterface (0x0x7f542e0ec5b0) 0
+ vptr=((& QDesignerFormWindowManagerInterface::_ZTV35QDesignerFormWindowManagerInterface) + 16)
+ QObject (0x0x7f542e1b62a0) 0
+ primary-for QDesignerFormWindowManagerInterface (0x0x7f542e0ec5b0)
+
+Class QDesignerFormWindowToolInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowToolInterface::QPrivateSignal (0x0x7f542e1b6600) 0 empty
+
+Vtable for QDesignerFormWindowToolInterface
+QDesignerFormWindowToolInterface::_ZTV32QDesignerFormWindowToolInterface: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QDesignerFormWindowToolInterface)
+16 (int (*)(...))QDesignerFormWindowToolInterface::metaObject
+24 (int (*)(...))QDesignerFormWindowToolInterface::qt_metacast
+32 (int (*)(...))QDesignerFormWindowToolInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))QDesignerFormWindowToolInterface::saveToDom
+168 (int (*)(...))QDesignerFormWindowToolInterface::loadFromDom
+176 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerFormWindowToolInterface
+ size=16 align=8
+ base size=16 base align=8
+QDesignerFormWindowToolInterface (0x0x7f542e0ec618) 0
+ vptr=((& QDesignerFormWindowToolInterface::_ZTV32QDesignerFormWindowToolInterface) + 16)
+ QObject (0x0x7f542e1b65a0) 0
+ primary-for QDesignerFormWindowToolInterface (0x0x7f542e0ec618)
+
+Class QDesignerIntegrationInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegrationInterface::QPrivateSignal (0x0x7f542e1b67e0) 0 empty
+
+Vtable for QDesignerIntegrationInterface
+QDesignerIntegrationInterface::_ZTV29QDesignerIntegrationInterface: 34 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QDesignerIntegrationInterface)
+16 (int (*)(...))QDesignerIntegrationInterface::metaObject
+24 (int (*)(...))QDesignerIntegrationInterface::qt_metacast
+32 (int (*)(...))QDesignerIntegrationInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+232 (int (*)(...))__cxa_pure_virtual
+240 (int (*)(...))__cxa_pure_virtual
+248 (int (*)(...))__cxa_pure_virtual
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerIntegrationInterface
+ size=24 align=8
+ base size=24 base align=8
+QDesignerIntegrationInterface (0x0x7f542e0ec680) 0
+ vptr=((& QDesignerIntegrationInterface::_ZTV29QDesignerIntegrationInterface) + 16)
+ QObject (0x0x7f542e1b6780) 0
+ primary-for QDesignerIntegrationInterface (0x0x7f542e0ec680)
+
+Class QDesignerIntegration::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegration::QPrivateSignal (0x0x7f542e1b6a20) 0 empty
+
+Vtable for QDesignerIntegration
+QDesignerIntegration::_ZTV20QDesignerIntegration: 34 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDesignerIntegration)
+16 (int (*)(...))QDesignerIntegration::metaObject
+24 (int (*)(...))QDesignerIntegration::qt_metacast
+32 (int (*)(...))QDesignerIntegration::qt_metacall
+40 (int (*)(...))QDesignerIntegration::~QDesignerIntegration
+48 (int (*)(...))QDesignerIntegration::~QDesignerIntegration
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDesignerIntegration::containerWindow
+120 (int (*)(...))QDesignerIntegration::createResourceBrowser
+128 (int (*)(...))QDesignerIntegration::headerSuffix
+136 (int (*)(...))QDesignerIntegration::setHeaderSuffix
+144 (int (*)(...))QDesignerIntegration::isHeaderLowercase
+152 (int (*)(...))QDesignerIntegration::setHeaderLowercase
+160 (int (*)(...))QDesignerIntegration::features
+168 (int (*)(...))QDesignerIntegration::resourceFileWatcherBehaviour
+176 (int (*)(...))QDesignerIntegration::setResourceFileWatcherBehaviour
+184 (int (*)(...))QDesignerIntegration::contextHelpId
+192 (int (*)(...))QDesignerIntegration::setFeatures
+200 (int (*)(...))QDesignerIntegration::updateProperty
+208 (int (*)(...))QDesignerIntegration::updateProperty
+216 (int (*)(...))QDesignerIntegration::resetProperty
+224 (int (*)(...))QDesignerIntegration::addDynamicProperty
+232 (int (*)(...))QDesignerIntegration::removeDynamicProperty
+240 (int (*)(...))QDesignerIntegration::updateActiveFormWindow
+248 (int (*)(...))QDesignerIntegration::setupFormWindow
+256 (int (*)(...))QDesignerIntegration::updateSelection
+264 (int (*)(...))QDesignerIntegration::updateCustomWidgetPlugins
+
+Class QDesignerIntegration
+ size=32 align=8
+ base size=32 base align=8
+QDesignerIntegration (0x0x7f542e0ec6e8) 0
+ vptr=((& QDesignerIntegration::_ZTV20QDesignerIntegration) + 16)
+ QDesignerIntegrationInterface (0x0x7f542e0ec750) 0
+ primary-for QDesignerIntegration (0x0x7f542e0ec6e8)
+ QObject (0x0x7f542e1b69c0) 0
+ primary-for QDesignerIntegrationInterface (0x0x7f542e0ec750)
+
+Vtable for QAbstractExtensionFactory
+QAbstractExtensionFactory::_ZTV25QAbstractExtensionFactory: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAbstractExtensionFactory)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractExtensionFactory
+ size=8 align=8
+ base size=8 base align=8
+QAbstractExtensionFactory (0x0x7f542e1b6b40) 0 nearly-empty
+ vptr=((& QAbstractExtensionFactory::_ZTV25QAbstractExtensionFactory) + 16)
+
+Vtable for QAbstractExtensionManager
+QAbstractExtensionManager::_ZTV25QAbstractExtensionManager: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAbstractExtensionManager)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractExtensionManager
+ size=8 align=8
+ base size=8 base align=8
+QAbstractExtensionManager (0x0x7f542e1b6f00) 0 nearly-empty
+ vptr=((& QAbstractExtensionManager::_ZTV25QAbstractExtensionManager) + 16)
+
+Vtable for QDesignerLanguageExtension
+QDesignerLanguageExtension::_ZTV26QDesignerLanguageExtension: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QDesignerLanguageExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerLanguageExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerLanguageExtension (0x0x7f542de29360) 0 nearly-empty
+ vptr=((& QDesignerLanguageExtension::_ZTV26QDesignerLanguageExtension) + 16)
+
+Vtable for QDesignerMetaDataBaseItemInterface
+QDesignerMetaDataBaseItemInterface::_ZTV34QDesignerMetaDataBaseItemInterface: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI34QDesignerMetaDataBaseItemInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerMetaDataBaseItemInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerMetaDataBaseItemInterface (0x0x7f542de295a0) 0 nearly-empty
+ vptr=((& QDesignerMetaDataBaseItemInterface::_ZTV34QDesignerMetaDataBaseItemInterface) + 16)
+
+Class QDesignerMetaDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerMetaDataBaseInterface::QPrivateSignal (0x0x7f542de29660) 0 empty
+
+Vtable for QDesignerMetaDataBaseInterface
+QDesignerMetaDataBaseInterface::_ZTV30QDesignerMetaDataBaseInterface: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI30QDesignerMetaDataBaseInterface)
+16 (int (*)(...))QDesignerMetaDataBaseInterface::metaObject
+24 (int (*)(...))QDesignerMetaDataBaseInterface::qt_metacast
+32 (int (*)(...))QDesignerMetaDataBaseInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerMetaDataBaseInterface
+ size=16 align=8
+ base size=16 base align=8
+QDesignerMetaDataBaseInterface (0x0x7f542e0ec7b8) 0
+ vptr=((& QDesignerMetaDataBaseInterface::_ZTV30QDesignerMetaDataBaseInterface) + 16)
+ QObject (0x0x7f542de29600) 0
+ primary-for QDesignerMetaDataBaseInterface (0x0x7f542e0ec7b8)
+
+Class QDesignerNewFormWidgetInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerNewFormWidgetInterface::QPrivateSignal (0x0x7f542de297e0) 0 empty
+
+Vtable for QDesignerNewFormWidgetInterface
+QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI31QDesignerNewFormWidgetInterface)
+16 (int (*)(...))QDesignerNewFormWidgetInterface::metaObject
+24 (int (*)(...))QDesignerNewFormWidgetInterface::qt_metacast
+32 (int (*)(...))QDesignerNewFormWidgetInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))__cxa_pure_virtual
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI31QDesignerNewFormWidgetInterface)
+464 0
+472 0
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerNewFormWidgetInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerNewFormWidgetInterface (0x0x7f542e0ec820) 0
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 16)
+ QWidget (0x0x7f542e1f5310) 0
+ primary-for QDesignerNewFormWidgetInterface (0x0x7f542e0ec820)
+ QObject (0x0x7f542de29720) 0
+ primary-for QWidget (0x0x7f542e1f5310)
+ QPaintDevice (0x0x7f542de29780) 16
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 464)
+
+Class QDesignerObjectInspectorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerObjectInspectorInterface::QPrivateSignal (0x0x7f542de29960) 0 empty
+
+Vtable for QDesignerObjectInspectorInterface
+QDesignerObjectInspectorInterface::_ZTV33QDesignerObjectInspectorInterface: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI33QDesignerObjectInspectorInterface)
+16 (int (*)(...))QDesignerObjectInspectorInterface::metaObject
+24 (int (*)(...))QDesignerObjectInspectorInterface::qt_metacast
+32 (int (*)(...))QDesignerObjectInspectorInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDesignerObjectInspectorInterface::core
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI33QDesignerObjectInspectorInterface)
+464 0
+472 0
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerObjectInspectorInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerObjectInspectorInterface (0x0x7f542e0ec888) 0
+ vptr=((& QDesignerObjectInspectorInterface::_ZTV33QDesignerObjectInspectorInterface) + 16)
+ QWidget (0x0x7f542e1f5380) 0
+ primary-for QDesignerObjectInspectorInterface (0x0x7f542e0ec888)
+ QObject (0x0x7f542de298a0) 0
+ primary-for QWidget (0x0x7f542e1f5380)
+ QPaintDevice (0x0x7f542de29900) 16
+ vptr=((& QDesignerObjectInspectorInterface::_ZTV33QDesignerObjectInspectorInterface) + 464)
+
+Vtable for QDesignerOptionsPageInterface
+QDesignerOptionsPageInterface::_ZTV29QDesignerOptionsPageInterface: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QDesignerOptionsPageInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerOptionsPageInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerOptionsPageInterface (0x0x7f542de29a20) 0 nearly-empty
+ vptr=((& QDesignerOptionsPageInterface::_ZTV29QDesignerOptionsPageInterface) + 16)
+
+Class QDesignerPromotionInterface::PromotedClass
+ size=16 align=8
+ base size=16 base align=8
+QDesignerPromotionInterface::PromotedClass (0x0x7f542de29ae0) 0
+
+Vtable for QDesignerPromotionInterface
+QDesignerPromotionInterface::_ZTV27QDesignerPromotionInterface: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDesignerPromotionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerPromotionInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerPromotionInterface (0x0x7f542de29a80) 0 nearly-empty
+ vptr=((& QDesignerPromotionInterface::_ZTV27QDesignerPromotionInterface) + 16)
+
+Class QDesignerPropertyEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerPropertyEditorInterface::QPrivateSignal (0x0x7f542de29c00) 0 empty
+
+Vtable for QDesignerPropertyEditorInterface
+QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface: 71 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QDesignerPropertyEditorInterface)
+16 (int (*)(...))QDesignerPropertyEditorInterface::metaObject
+24 (int (*)(...))QDesignerPropertyEditorInterface::qt_metacast
+32 (int (*)(...))QDesignerPropertyEditorInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDesignerPropertyEditorInterface::core
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))__cxa_pure_virtual
+456 (int (*)(...))__cxa_pure_virtual
+464 (int (*)(...))__cxa_pure_virtual
+472 (int (*)(...))__cxa_pure_virtual
+480 (int (*)(...))__cxa_pure_virtual
+488 (int (*)(...))-16
+496 (int (*)(...))(& _ZTI32QDesignerPropertyEditorInterface)
+504 0
+512 0
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerPropertyEditorInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerPropertyEditorInterface (0x0x7f542e0ec8f0) 0
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 16)
+ QWidget (0x0x7f542e1f53f0) 0
+ primary-for QDesignerPropertyEditorInterface (0x0x7f542e0ec8f0)
+ QObject (0x0x7f542de29b40) 0
+ primary-for QWidget (0x0x7f542e1f53f0)
+ QPaintDevice (0x0x7f542de29ba0) 16
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 504)
+
+Class QDesignerResourceBrowserInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerResourceBrowserInterface::QPrivateSignal (0x0x7f542de29d80) 0 empty
+
+Vtable for QDesignerResourceBrowserInterface
+QDesignerResourceBrowserInterface::_ZTV33QDesignerResourceBrowserInterface: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI33QDesignerResourceBrowserInterface)
+16 (int (*)(...))QDesignerResourceBrowserInterface::metaObject
+24 (int (*)(...))QDesignerResourceBrowserInterface::qt_metacast
+32 (int (*)(...))QDesignerResourceBrowserInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))__cxa_pure_virtual
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI33QDesignerResourceBrowserInterface)
+464 0
+472 0
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerResourceBrowserInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerResourceBrowserInterface (0x0x7f542e0ec958) 0
+ vptr=((& QDesignerResourceBrowserInterface::_ZTV33QDesignerResourceBrowserInterface) + 16)
+ QWidget (0x0x7f542e1f5460) 0
+ primary-for QDesignerResourceBrowserInterface (0x0x7f542e0ec958)
+ QObject (0x0x7f542de29cc0) 0
+ primary-for QWidget (0x0x7f542e1f5460)
+ QPaintDevice (0x0x7f542de29d20) 16
+ vptr=((& QDesignerResourceBrowserInterface::_ZTV33QDesignerResourceBrowserInterface) + 464)
+
+Vtable for QDesignerSettingsInterface
+QDesignerSettingsInterface::_ZTV26QDesignerSettingsInterface: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QDesignerSettingsInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerSettingsInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerSettingsInterface (0x0x7f542de29e40) 0 nearly-empty
+ vptr=((& QDesignerSettingsInterface::_ZTV26QDesignerSettingsInterface) + 16)
+
+Class QDesignerWidgetBoxInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetBoxInterface::QPrivateSignal (0x0x7f542de29f60) 0 empty
+
+Class QDesignerWidgetBoxInterface::Widget
+ size=8 align=8
+ base size=8 base align=8
+QDesignerWidgetBoxInterface::Widget (0x0x7f542de7d000) 0
+
+Class QDesignerWidgetBoxInterface::Category
+ size=56 align=8
+ base size=56 base align=8
+QDesignerWidgetBoxInterface::Category (0x0x7f542de7d0c0) 0
+
+Vtable for QDesignerWidgetBoxInterface
+QDesignerWidgetBoxInterface::_ZTV27QDesignerWidgetBoxInterface: 77 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDesignerWidgetBoxInterface)
+16 (int (*)(...))QDesignerWidgetBoxInterface::metaObject
+24 (int (*)(...))QDesignerWidgetBoxInterface::qt_metacast
+32 (int (*)(...))QDesignerWidgetBoxInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))__cxa_pure_virtual
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))__cxa_pure_virtual
+456 (int (*)(...))__cxa_pure_virtual
+464 (int (*)(...))__cxa_pure_virtual
+472 (int (*)(...))__cxa_pure_virtual
+480 (int (*)(...))__cxa_pure_virtual
+488 (int (*)(...))__cxa_pure_virtual
+496 (int (*)(...))__cxa_pure_virtual
+504 (int (*)(...))__cxa_pure_virtual
+512 (int (*)(...))__cxa_pure_virtual
+520 (int (*)(...))__cxa_pure_virtual
+528 (int (*)(...))__cxa_pure_virtual
+536 (int (*)(...))-16
+544 (int (*)(...))(& _ZTI27QDesignerWidgetBoxInterface)
+552 0
+560 0
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+592 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+600 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+608 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerWidgetBoxInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerWidgetBoxInterface (0x0x7f542e0ec9c0) 0
+ vptr=((& QDesignerWidgetBoxInterface::_ZTV27QDesignerWidgetBoxInterface) + 16)
+ QWidget (0x0x7f542e1f54d0) 0
+ primary-for QDesignerWidgetBoxInterface (0x0x7f542e0ec9c0)
+ QObject (0x0x7f542de29ea0) 0
+ primary-for QWidget (0x0x7f542e1f54d0)
+ QPaintDevice (0x0x7f542de29f00) 16
+ vptr=((& QDesignerWidgetBoxInterface::_ZTV27QDesignerWidgetBoxInterface) + 552)
+
+Vtable for QDesignerWidgetDataBaseItemInterface
+QDesignerWidgetDataBaseItemInterface::_ZTV36QDesignerWidgetDataBaseItemInterface: 30 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI36QDesignerWidgetDataBaseItemInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+232 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerWidgetDataBaseItemInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerWidgetDataBaseItemInterface (0x0x7f542df025a0) 0 nearly-empty
+ vptr=((& QDesignerWidgetDataBaseItemInterface::_ZTV36QDesignerWidgetDataBaseItemInterface) + 16)
+
+Class QDesignerWidgetDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetDataBaseInterface::QPrivateSignal (0x0x7f542df026c0) 0 empty
+
+Vtable for QDesignerWidgetDataBaseInterface
+QDesignerWidgetDataBaseInterface::_ZTV32QDesignerWidgetDataBaseInterface: 22 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QDesignerWidgetDataBaseInterface)
+16 (int (*)(...))QDesignerWidgetDataBaseInterface::metaObject
+24 (int (*)(...))QDesignerWidgetDataBaseInterface::qt_metacast
+32 (int (*)(...))QDesignerWidgetDataBaseInterface::qt_metacall
+40 (int (*)(...))QDesignerWidgetDataBaseInterface::~QDesignerWidgetDataBaseInterface
+48 (int (*)(...))QDesignerWidgetDataBaseInterface::~QDesignerWidgetDataBaseInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDesignerWidgetDataBaseInterface::count
+120 (int (*)(...))QDesignerWidgetDataBaseInterface::item
+128 (int (*)(...))QDesignerWidgetDataBaseInterface::indexOf
+136 (int (*)(...))QDesignerWidgetDataBaseInterface::insert
+144 (int (*)(...))QDesignerWidgetDataBaseInterface::append
+152 (int (*)(...))QDesignerWidgetDataBaseInterface::indexOfObject
+160 (int (*)(...))QDesignerWidgetDataBaseInterface::indexOfClassName
+168 (int (*)(...))QDesignerWidgetDataBaseInterface::core
+
+Class QDesignerWidgetDataBaseInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerWidgetDataBaseInterface (0x0x7f542dea9208) 0
+ vptr=((& QDesignerWidgetDataBaseInterface::_ZTV32QDesignerWidgetDataBaseInterface) + 16)
+ QObject (0x0x7f542df02660) 0
+ primary-for QDesignerWidgetDataBaseInterface (0x0x7f542dea9208)
+
+Class QDesignerWidgetFactoryInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetFactoryInterface::QPrivateSignal (0x0x7f542df75060) 0 empty
+
+Vtable for QDesignerWidgetFactoryInterface
+QDesignerWidgetFactoryInterface::_ZTV31QDesignerWidgetFactoryInterface: 21 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI31QDesignerWidgetFactoryInterface)
+16 (int (*)(...))QDesignerWidgetFactoryInterface::metaObject
+24 (int (*)(...))QDesignerWidgetFactoryInterface::qt_metacast
+32 (int (*)(...))QDesignerWidgetFactoryInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerWidgetFactoryInterface
+ size=16 align=8
+ base size=16 base align=8
+QDesignerWidgetFactoryInterface (0x0x7f542dea9a28) 0
+ vptr=((& QDesignerWidgetFactoryInterface::_ZTV31QDesignerWidgetFactoryInterface) + 16)
+ QObject (0x0x7f542df75000) 0
+ primary-for QDesignerWidgetFactoryInterface (0x0x7f542dea9a28)
+
+Vtable for QDesignerContainerExtension
+QDesignerContainerExtension::_ZTV27QDesignerContainerExtension: 13 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDesignerContainerExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerContainerExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerContainerExtension (0x0x7f542df75120) 0 nearly-empty
+ vptr=((& QDesignerContainerExtension::_ZTV27QDesignerContainerExtension) + 16)
+
+Vtable for QDesignerDynamicPropertySheetExtension
+QDesignerDynamicPropertySheetExtension::_ZTV38QDesignerDynamicPropertySheetExtension: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI38QDesignerDynamicPropertySheetExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerDynamicPropertySheetExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerDynamicPropertySheetExtension (0x0x7f542df75360) 0 nearly-empty
+ vptr=((& QDesignerDynamicPropertySheetExtension::_ZTV38QDesignerDynamicPropertySheetExtension) + 16)
+
+Vtable for QDesignerExtraInfoExtension
+QDesignerExtraInfoExtension::_ZTV27QDesignerExtraInfoExtension: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDesignerExtraInfoExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerExtraInfoExtension
+ size=32 align=8
+ base size=32 base align=8
+QDesignerExtraInfoExtension (0x0x7f542df75600) 0
+ vptr=((& QDesignerExtraInfoExtension::_ZTV27QDesignerExtraInfoExtension) + 16)
+
+Vtable for QFormBuilder
+QFormBuilder::_ZTV12QFormBuilder: 43 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QFormBuilder)
+16 (int (*)(...))QFormBuilder::~QFormBuilder
+24 (int (*)(...))QFormBuilder::~QFormBuilder
+32 (int (*)(...))QAbstractFormBuilder::load
+40 (int (*)(...))QAbstractFormBuilder::save
+48 (int (*)(...))QAbstractFormBuilder::loadExtraInfo
+56 (int (*)(...))QFormBuilder::create
+64 (int (*)(...))QFormBuilder::create
+72 (int (*)(...))QFormBuilder::create
+80 (int (*)(...))QFormBuilder::create
+88 (int (*)(...))QFormBuilder::create
+96 (int (*)(...))QFormBuilder::create
+104 (int (*)(...))QAbstractFormBuilder::addMenuAction
+112 (int (*)(...))QFormBuilder::applyProperties
+120 (int (*)(...))QAbstractFormBuilder::applyTabStops
+128 (int (*)(...))QFormBuilder::createWidget
+136 (int (*)(...))QFormBuilder::createLayout
+144 (int (*)(...))QAbstractFormBuilder::createAction
+152 (int (*)(...))QAbstractFormBuilder::createActionGroup
+160 (int (*)(...))QAbstractFormBuilder::createCustomWidgets
+168 (int (*)(...))QFormBuilder::createConnections
+176 (int (*)(...))QAbstractFormBuilder::createResources
+184 (int (*)(...))QFormBuilder::addItem
+192 (int (*)(...))QFormBuilder::addItem
+200 (int (*)(...))QAbstractFormBuilder::saveExtraInfo
+208 (int (*)(...))QAbstractFormBuilder::saveDom
+216 (int (*)(...))QAbstractFormBuilder::createActionRefDom
+224 (int (*)(...))QAbstractFormBuilder::createDom
+232 (int (*)(...))QAbstractFormBuilder::createDom
+240 (int (*)(...))QAbstractFormBuilder::createDom
+248 (int (*)(...))QAbstractFormBuilder::createDom
+256 (int (*)(...))QAbstractFormBuilder::createDom
+264 (int (*)(...))QAbstractFormBuilder::createDom
+272 (int (*)(...))QAbstractFormBuilder::saveConnections
+280 (int (*)(...))QAbstractFormBuilder::saveCustomWidgets
+288 (int (*)(...))QAbstractFormBuilder::saveTabStops
+296 (int (*)(...))QAbstractFormBuilder::saveResources
+304 (int (*)(...))QAbstractFormBuilder::computeProperties
+312 (int (*)(...))QAbstractFormBuilder::checkProperty
+320 (int (*)(...))QAbstractFormBuilder::createProperty
+328 (int (*)(...))QAbstractFormBuilder::layoutInfo
+336 (int (*)(...))QFormBuilder::updateCustomWidgets
+
+Class QFormBuilder
+ size=16 align=8
+ base size=16 base align=8
+QFormBuilder (0x0x7f542dea9a90) 0
+ vptr=((& QFormBuilder::_ZTV12QFormBuilder) + 16)
+ QAbstractFormBuilder (0x0x7f542df75840) 0
+ primary-for QFormBuilder (0x0x7f542dea9a90)
+
+Vtable for QDesignerLayoutDecorationExtension
+QDesignerLayoutDecorationExtension::_ZTV34QDesignerLayoutDecorationExtension: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI34QDesignerLayoutDecorationExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerLayoutDecorationExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerLayoutDecorationExtension (0x0x7f542df758a0) 0 nearly-empty
+ vptr=((& QDesignerLayoutDecorationExtension::_ZTV34QDesignerLayoutDecorationExtension) + 16)
+
+Vtable for QDesignerMemberSheetExtension
+QDesignerMemberSheetExtension::_ZTV29QDesignerMemberSheetExtension: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QDesignerMemberSheetExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerMemberSheetExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerMemberSheetExtension (0x0x7f542df75ae0) 0 nearly-empty
+ vptr=((& QDesignerMemberSheetExtension::_ZTV29QDesignerMemberSheetExtension) + 16)
+
+Vtable for QDesignerPropertySheetExtension
+QDesignerPropertySheetExtension::_ZTV31QDesignerPropertySheetExtension: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI31QDesignerPropertySheetExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerPropertySheetExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerPropertySheetExtension (0x0x7f542df75d20) 0 nearly-empty
+ vptr=((& QDesignerPropertySheetExtension::_ZTV31QDesignerPropertySheetExtension) + 16)
+
+Class QExtensionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QExtensionManager::QPrivateSignal (0x0x7f542dfcb060) 0 empty
+
+Vtable for QExtensionManager
+QExtensionManager::_ZTV17QExtensionManager: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QExtensionManager)
+16 (int (*)(...))QExtensionManager::metaObject
+24 (int (*)(...))QExtensionManager::qt_metacast
+32 (int (*)(...))QExtensionManager::qt_metacall
+40 (int (*)(...))QExtensionManager::~QExtensionManager
+48 (int (*)(...))QExtensionManager::~QExtensionManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QExtensionManager::registerExtensions
+120 (int (*)(...))QExtensionManager::unregisterExtensions
+128 (int (*)(...))QExtensionManager::extension
+136 (int (*)(...))-16
+144 (int (*)(...))(& _ZTI17QExtensionManager)
+152 (int (*)(...))QExtensionManager::_ZThn16_N17QExtensionManagerD1Ev
+160 (int (*)(...))QExtensionManager::_ZThn16_N17QExtensionManagerD0Ev
+168 (int (*)(...))QExtensionManager::_ZThn16_N17QExtensionManager18registerExtensionsEP25QAbstractExtensionFactoryRK7QString
+176 (int (*)(...))QExtensionManager::_ZThn16_N17QExtensionManager20unregisterExtensionsEP25QAbstractExtensionFactoryRK7QString
+184 (int (*)(...))QExtensionManager::_ZThn16_NK17QExtensionManager9extensionEP7QObjectRK7QString
+
+Class QExtensionManager
+ size=56 align=8
+ base size=56 base align=8
+QExtensionManager (0x0x7f542e1f5d20) 0
+ vptr=((& QExtensionManager::_ZTV17QExtensionManager) + 16)
+ QObject (0x0x7f542df75f60) 0
+ primary-for QExtensionManager (0x0x7f542e1f5d20)
+ QAbstractExtensionManager (0x0x7f542dfcb000) 16 nearly-empty
+ vptr=((& QExtensionManager::_ZTV17QExtensionManager) + 152)
+
+Vtable for QDesignerTaskMenuExtension
+QDesignerTaskMenuExtension::_ZTV26QDesignerTaskMenuExtension: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QDesignerTaskMenuExtension)
+16 0
+24 0
+32 (int (*)(...))QDesignerTaskMenuExtension::preferredEditAction
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerTaskMenuExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerTaskMenuExtension (0x0x7f542dfcbae0) 0 nearly-empty
+ vptr=((& QDesignerTaskMenuExtension::_ZTV26QDesignerTaskMenuExtension) + 16)
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f542dc5f120) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f542dc5f480) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f542dc5f660) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f542dc5f9c0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f542dc5fba0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f542dc5ff00) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f542dc89060) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f542dc893c0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f542dc895a0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f542dc89900) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f542dc89ae0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f542dc89e40) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f542dcb1060) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f542dcb13c0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f542dcb15a0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f542dcb1900) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f542dcf41e0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f542dcf4540) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f542dcf46c0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f542dcf4a20) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f542dcf4ba0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f542dcf4f00) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f542dd180c0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f542dd18420) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f542dd185a0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f542dd18900) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f542dd18a80) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f542dd18de0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f542dd18f60) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f542dd42300) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f542dd42480) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f542dd427e0) 0 empty
+
diff --git a/tests/auto/bic/data/QtDesigner.6.1.0.linux-gcc-amd64.txt b/tests/auto/bic/data/QtDesigner.6.1.0.linux-gcc-amd64.txt
new file mode 100644
index 000000000..eff774790
--- /dev/null
+++ b/tests/auto/bic/data/QtDesigner.6.1.0.linux-gcc-amd64.txt
@@ -0,0 +1,21466 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f8691138060) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f8691183840) 0 empty
+
+Class std::__do_is_nt_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_nt_destructible_impl (0x0x7f8691183a80) 0 empty
+
+Class std::__do_is_implicitly_default_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_implicitly_default_constructible_impl (0x0x7f86911b1ba0) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7f869140e3c0) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f869148a1e0) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7f869148a2a0) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7f869148a780) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7f869148a7e0) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7f869148a840) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7f869148a8a0) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7f869148a900) 0 empty
+
+Class std::__result_of_memfun_ref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memfun_ref_impl (0x0x7f869148a9c0) 0 empty
+
+Class std::__result_of_memfun_deref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memfun_deref_impl (0x0x7f869148aa80) 0 empty
+
+Class std::__result_of_memobj_ref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memobj_ref_impl (0x0x7f869148ab40) 0 empty
+
+Class std::__result_of_memobj_deref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memobj_deref_impl (0x0x7f869148ac00) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f869148af60) 0 empty
+
+Class std::__swappable_details::__do_is_swappable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_details::__do_is_swappable_impl (0x0x7f86914c3300) 0 empty
+
+Class std::__swappable_details::__do_is_nothrow_swappable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_details::__do_is_nothrow_swappable_impl (0x0x7f86914c3360) 0 empty
+
+Class std::__swappable_with_details::__do_is_swappable_with_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_with_details::__do_is_swappable_with_impl (0x0x7f86914c3600) 0 empty
+
+Class std::__swappable_with_details::__do_is_nothrow_swappable_with_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_with_details::__do_is_nothrow_swappable_with_impl (0x0x7f86914c3660) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuch (0x0x7f86914c3ea0) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f8691555480) 0 empty
+
+Class std::__nonesuch_no_braces
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch_no_braces (0x0x7f86914fa7b8) 0 empty
+ std::__nonesuch (0x0x7f8691555960) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7f86911da6c0) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f86911da960) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f86911da9c0) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f8691237720) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f8691237780) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f86914fad00) 0 empty
+ std::input_iterator_tag (0x0x7f86912377e0) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f86914fad68) 0 empty
+ std::forward_iterator_tag (0x0x7f86914fadd0) 0 empty
+ std::input_iterator_tag (0x0x7f8691237840) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f86914fae38) 0 empty
+ std::bidirectional_iterator_tag (0x0x7f86914faea0) 0 empty
+ std::forward_iterator_tag (0x0x7f86914faf08) 0 empty
+ std::input_iterator_tag (0x0x7f86912378a0) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_iter (0x0x7f86912ed5a0) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_less_val
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_val (0x0x7f86912ed6c0) 0 empty
+
+Class __gnu_cxx::__ops::_Val_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Val_less_iter (0x0x7f86912ed9c0) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_equal_to_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_equal_to_iter (0x0x7f86912edcc0) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_equal_to_val
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_equal_to_val (0x0x7f86912edde0) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f86913ae600) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f86913ae960) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f86913ae9c0) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f86913aea80) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7f86913aeae0) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7f86913aeb40) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7f86913aeba0) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7f86913aec00) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f86913aeea0) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f86905e7180) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f86905e71e0) 0
+
+Vtable for std::exception
+std::exception::_ZTVSt9exception: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9exception)
+16 (int (*)(...))std::exception::~exception
+24 (int (*)(...))std::exception::~exception
+32 (int (*)(...))std::exception::what
+
+Class std::exception
+ size=8 align=8
+ base size=8 base align=8
+std::exception (0x0x7f86905e7f60) 0 nearly-empty
+ vptr=((& std::exception::_ZTVSt9exception) + 16)
+
+Vtable for std::bad_exception
+std::bad_exception::_ZTVSt13bad_exception: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13bad_exception)
+16 (int (*)(...))std::bad_exception::~bad_exception
+24 (int (*)(...))std::bad_exception::~bad_exception
+32 (int (*)(...))std::bad_exception::what
+
+Class std::bad_exception
+ size=8 align=8
+ base size=8 base align=8
+std::bad_exception (0x0x7f86912742d8) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+ std::exception (0x0x7f86906a5180) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f86912742d8)
+
+Vtable for std::type_info
+std::type_info::_ZTVSt9type_info: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9type_info)
+16 (int (*)(...))std::type_info::~type_info
+24 (int (*)(...))std::type_info::~type_info
+32 (int (*)(...))std::type_info::__is_pointer_p
+40 (int (*)(...))std::type_info::__is_function_p
+48 (int (*)(...))std::type_info::__do_catch
+56 (int (*)(...))std::type_info::__do_upcast
+
+Class std::type_info
+ size=16 align=8
+ base size=16 base align=8
+std::type_info (0x0x7f86906a5360) 0
+ vptr=((& std::type_info::_ZTVSt9type_info) + 16)
+
+Vtable for std::bad_cast
+std::bad_cast::_ZTVSt8bad_cast: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt8bad_cast)
+16 (int (*)(...))std::bad_cast::~bad_cast
+24 (int (*)(...))std::bad_cast::~bad_cast
+32 (int (*)(...))std::bad_cast::what
+
+Class std::bad_cast
+ size=8 align=8
+ base size=8 base align=8
+std::bad_cast (0x0x7f8691274340) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+ std::exception (0x0x7f86906a5720) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f8691274340)
+
+Vtable for std::bad_typeid
+std::bad_typeid::_ZTVSt10bad_typeid: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt10bad_typeid)
+16 (int (*)(...))std::bad_typeid::~bad_typeid
+24 (int (*)(...))std::bad_typeid::~bad_typeid
+32 (int (*)(...))std::bad_typeid::what
+
+Class std::bad_typeid
+ size=8 align=8
+ base size=8 base align=8
+std::bad_typeid (0x0x7f86912743a8) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+ std::exception (0x0x7f86906a5900) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f86912743a8)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f86906a5ae0) 0
+
+Vtable for std::nested_exception
+std::nested_exception::_ZTVSt16nested_exception: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt16nested_exception)
+16 (int (*)(...))std::nested_exception::~nested_exception
+24 (int (*)(...))std::nested_exception::~nested_exception
+
+Class std::nested_exception
+ size=16 align=8
+ base size=16 base align=8
+std::nested_exception (0x0x7f86906da060) 0
+ vptr=((& std::nested_exception::_ZTVSt16nested_exception) + 16)
+
+Vtable for std::bad_alloc
+std::bad_alloc::_ZTVSt9bad_alloc: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9bad_alloc)
+16 (int (*)(...))std::bad_alloc::~bad_alloc
+24 (int (*)(...))std::bad_alloc::~bad_alloc
+32 (int (*)(...))std::bad_alloc::what
+
+Class std::bad_alloc
+ size=8 align=8
+ base size=8 base align=8
+std::bad_alloc (0x0x7f8691274410) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+ std::exception (0x0x7f86906da720) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f8691274410)
+
+Vtable for std::bad_array_new_length
+std::bad_array_new_length::_ZTVSt20bad_array_new_length: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt20bad_array_new_length)
+16 (int (*)(...))std::bad_array_new_length::~bad_array_new_length
+24 (int (*)(...))std::bad_array_new_length::~bad_array_new_length
+32 (int (*)(...))std::bad_array_new_length::what
+
+Class std::bad_array_new_length
+ size=8 align=8
+ base size=8 base align=8
+std::bad_array_new_length (0x0x7f8691274478) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+ std::bad_alloc (0x0x7f86912744e0) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f8691274478)
+ std::exception (0x0x7f86906da900) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f86912744e0)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f86906daae0) 0 empty
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7f86906dad20) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f86907904e0) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f869036b8a0) 0
+
+Vtable for __cxxabiv1::__forced_unwind
+__cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN10__cxxabiv115__forced_unwindE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class __cxxabiv1::__forced_unwind
+ size=8 align=8
+ base size=8 base align=8
+__cxxabiv1::__forced_unwind (0x0x7f869036b960) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f868ffe1840) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f868ffe1900) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f868ffe1960) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f868ffe19c0) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f868ffe1a20) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f868ffe1b40) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f868ffe1ba0) 0
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f86900a1240) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f86900a13c0) 0 empty
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7f868fec7240) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7f868fec72a0) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f868fec7300) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7f868fec7360) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f868fae0ae0) 0
+
+Vtable for std::logic_error
+std::logic_error::_ZTVSt11logic_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt11logic_error)
+16 (int (*)(...))std::logic_error::~logic_error
+24 (int (*)(...))std::logic_error::~logic_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::logic_error
+ size=16 align=8
+ base size=16 base align=8
+std::logic_error (0x0x7f868fb09478) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+ std::exception (0x0x7f868fae0ba0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f868fb09478)
+
+Vtable for std::domain_error
+std::domain_error::_ZTVSt12domain_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12domain_error)
+16 (int (*)(...))std::domain_error::~domain_error
+24 (int (*)(...))std::domain_error::~domain_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::domain_error
+ size=16 align=8
+ base size=16 base align=8
+std::domain_error (0x0x7f868fb094e0) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+ std::logic_error (0x0x7f868fb09548) 0
+ primary-for std::domain_error (0x0x7f868fb094e0)
+ std::exception (0x0x7f868fae0c00) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f868fb09548)
+
+Vtable for std::invalid_argument
+std::invalid_argument::_ZTVSt16invalid_argument: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt16invalid_argument)
+16 (int (*)(...))std::invalid_argument::~invalid_argument
+24 (int (*)(...))std::invalid_argument::~invalid_argument
+32 (int (*)(...))std::logic_error::what
+
+Class std::invalid_argument
+ size=16 align=8
+ base size=16 base align=8
+std::invalid_argument (0x0x7f868fb095b0) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+ std::logic_error (0x0x7f868fb09618) 0
+ primary-for std::invalid_argument (0x0x7f868fb095b0)
+ std::exception (0x0x7f868fae0c60) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f868fb09618)
+
+Vtable for std::length_error
+std::length_error::_ZTVSt12length_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12length_error)
+16 (int (*)(...))std::length_error::~length_error
+24 (int (*)(...))std::length_error::~length_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::length_error
+ size=16 align=8
+ base size=16 base align=8
+std::length_error (0x0x7f868fb09680) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+ std::logic_error (0x0x7f868fb096e8) 0
+ primary-for std::length_error (0x0x7f868fb09680)
+ std::exception (0x0x7f868fae0cc0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f868fb096e8)
+
+Vtable for std::out_of_range
+std::out_of_range::_ZTVSt12out_of_range: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12out_of_range)
+16 (int (*)(...))std::out_of_range::~out_of_range
+24 (int (*)(...))std::out_of_range::~out_of_range
+32 (int (*)(...))std::logic_error::what
+
+Class std::out_of_range
+ size=16 align=8
+ base size=16 base align=8
+std::out_of_range (0x0x7f868fb09750) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+ std::logic_error (0x0x7f868fb097b8) 0
+ primary-for std::out_of_range (0x0x7f868fb09750)
+ std::exception (0x0x7f868fae0d20) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f868fb097b8)
+
+Vtable for std::runtime_error
+std::runtime_error::_ZTVSt13runtime_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13runtime_error)
+16 (int (*)(...))std::runtime_error::~runtime_error
+24 (int (*)(...))std::runtime_error::~runtime_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::runtime_error
+ size=16 align=8
+ base size=16 base align=8
+std::runtime_error (0x0x7f868fb09820) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+ std::exception (0x0x7f868fae0d80) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f868fb09820)
+
+Vtable for std::range_error
+std::range_error::_ZTVSt11range_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt11range_error)
+16 (int (*)(...))std::range_error::~range_error
+24 (int (*)(...))std::range_error::~range_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::range_error
+ size=16 align=8
+ base size=16 base align=8
+std::range_error (0x0x7f868fb09888) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+ std::runtime_error (0x0x7f868fb098f0) 0
+ primary-for std::range_error (0x0x7f868fb09888)
+ std::exception (0x0x7f868fae0de0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f868fb098f0)
+
+Vtable for std::overflow_error
+std::overflow_error::_ZTVSt14overflow_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt14overflow_error)
+16 (int (*)(...))std::overflow_error::~overflow_error
+24 (int (*)(...))std::overflow_error::~overflow_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::overflow_error
+ size=16 align=8
+ base size=16 base align=8
+std::overflow_error (0x0x7f868fb09958) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+ std::runtime_error (0x0x7f868fb099c0) 0
+ primary-for std::overflow_error (0x0x7f868fb09958)
+ std::exception (0x0x7f868fae0e40) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f868fb099c0)
+
+Vtable for std::underflow_error
+std::underflow_error::_ZTVSt15underflow_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt15underflow_error)
+16 (int (*)(...))std::underflow_error::~underflow_error
+24 (int (*)(...))std::underflow_error::~underflow_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::underflow_error
+ size=16 align=8
+ base size=16 base align=8
+std::underflow_error (0x0x7f868fb09a28) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+ std::runtime_error (0x0x7f868fb09a90) 0
+ primary-for std::underflow_error (0x0x7f868fb09a28)
+ std::exception (0x0x7f868fae0ea0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f868fb09a90)
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7f868fb831e0) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f868fb83240) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f868fb833c0) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f868fb83480) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f868fb09d00) 0
+ std::__uses_alloc_base (0x0x7f868fb83420) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f868f8f1a80) 0 empty
+
+Vtable for std::bad_function_call
+std::bad_function_call::_ZTVSt17bad_function_call: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt17bad_function_call)
+16 (int (*)(...))std::bad_function_call::~bad_function_call
+24 (int (*)(...))std::bad_function_call::~bad_function_call
+32 (int (*)(...))std::bad_function_call::what
+
+Class std::bad_function_call
+ size=8 align=8
+ base size=8 base align=8
+std::bad_function_call (0x0x7f868f9ba138) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+ std::exception (0x0x7f868f5c6180) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f868f9ba138)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f868f5c6240) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f868f5c62a0) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f868f5c65a0) 0
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7f868f69d420) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7f868f69d4e0) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7f868f69d9c0) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7f868f6c4840) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7f868f6c4900) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7f868f6c4960) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7f868f6c4d20) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7f868f6c4e40) 0
+
+Class std::__detail::_Equality_base
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Equality_base (0x0x7f868f49ff00) 0 empty
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7f868f4db7e0) 0 empty
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7f868f5231e0) 0 empty
+
+Vtable for std::bad_optional_access
+std::bad_optional_access::_ZTVSt19bad_optional_access: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt19bad_optional_access)
+16 (int (*)(...))std::bad_optional_access::~bad_optional_access
+24 (int (*)(...))std::bad_optional_access::~bad_optional_access
+32 (int (*)(...))std::bad_optional_access::what
+
+Class std::bad_optional_access
+ size=8 align=8
+ base size=8 base align=8
+std::bad_optional_access (0x0x7f868f4ea068) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+ std::exception (0x0x7f868f523420) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7f868f4ea068)
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f868ebc6d80) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f868eea8b60) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f868ebe8540) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f868eea8c30) 0
+ std::_Bit_iterator_base (0x0x7f868eea8c98) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f868ebe8ae0) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f868eea8d68) 0
+ std::_Bit_iterator_base (0x0x7f868eea8dd0) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f868ec202a0) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7f868e9f77e0) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7f868e9f7960) 0 empty
+
+Class __pstl::execution::v1::parallel_unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_unsequenced_policy (0x0x7f868e9f7ae0) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7f868e9f7c60) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7f868eb2b780) 0 empty
+
+Class std::__detail::__variant::__variant_idx_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_idx_cookie (0x0x7f868eb2b7e0) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7f868e8082a0) 0 empty
+
+Vtable for std::bad_variant_access
+std::bad_variant_access::_ZTVSt18bad_variant_access: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt18bad_variant_access)
+16 (int (*)(...))std::bad_variant_access::~bad_variant_access
+24 (int (*)(...))std::bad_variant_access::~bad_variant_access
+32 (int (*)(...))std::bad_variant_access::what
+
+Class std::bad_variant_access
+ size=16 align=8
+ base size=16 base align=8
+std::bad_variant_access (0x0x7f868e7ce1a0) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+ std::exception (0x0x7f868e82d7e0) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7f868e7ce1a0)
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f868e8f41e0) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f868e8f4240) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f868e8f44e0) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f868e8f4d20) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f868e947de0) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f868e5dcc00) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f868e985410) 0
+ std::__atomic_flag_base (0x0x7f868e5dcc60) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f868e5666e8) 0
+ QAtomicInteger<int> (0x0x7f868e566750) 0
+ QBasicAtomicInteger<int> (0x0x7f868e55db40) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f868dcfdde0) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7f868dcfde40) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f868d9e7180) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7f868d9e78a0) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f868d9e7900) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f868dd5cb60) 0
+ QGenericArgument (0x0x7f868d9e7ba0) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7f868da1c0c0) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7f868da1c120) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7f868da1c060) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f868da1ca80) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f868da944e0) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f868da94ea0) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f868db769c0) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7f868db76d20) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f868d821720) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f868d821840) 0
+
+Vtable for std::locale::facet
+std::locale::facet::_ZTVNSt6locale5facetE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6locale5facetE)
+16 (int (*)(...))std::locale::facet::~facet
+24 (int (*)(...))std::locale::facet::~facet
+
+Class std::locale::facet
+ size=16 align=8
+ base size=12 base align=8
+std::locale::facet (0x0x7f868d821c00) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f868d821ea0) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f868d8680c0) 0
+
+Vtable for std::_V2::error_category
+std::_V2::error_category::_ZTVNSt3_V214error_categoryE: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt3_V214error_categoryE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))std::_V2::error_category::_M_message
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))std::_V2::error_category::default_error_condition
+64 (int (*)(...))std::_V2::error_category::equivalent
+72 (int (*)(...))std::_V2::error_category::equivalent
+
+Class std::_V2::error_category
+ size=8 align=8
+ base size=8 base align=8
+std::_V2::error_category (0x0x7f868d8b31e0) 0 nearly-empty
+ vptr=((& std::_V2::error_category::_ZTVNSt3_V214error_categoryE) + 16)
+
+Class std::error_code
+ size=16 align=8
+ base size=16 base align=8
+std::error_code (0x0x7f868d8b3540) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f868d8b3d20) 0
+
+Vtable for std::system_error
+std::system_error::_ZTVSt12system_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12system_error)
+16 (int (*)(...))std::system_error::~system_error
+24 (int (*)(...))std::system_error::~system_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::system_error
+ size=32 align=8
+ base size=32 base align=8
+std::system_error (0x0x7f868d908068) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+ std::runtime_error (0x0x7f868d9080d0) 0
+ primary-for std::system_error (0x0x7f868d908068)
+ std::exception (0x0x7f868d8f3900) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f868d9080d0)
+
+Vtable for std::ios_base::failure
+std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt8ios_base7failureB5cxx11E)
+16 (int (*)(...))std::ios_base::failure::~failure
+24 (int (*)(...))std::ios_base::failure::~failure
+32 (int (*)(...))std::ios_base::failure::what
+
+Class std::ios_base::failure
+ size=32 align=8
+ base size=32 base align=8
+std::ios_base::failure (0x0x7f868d908410) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+ std::system_error (0x0x7f868d908478) 0
+ primary-for std::ios_base::failure (0x0x7f868d908410)
+ std::runtime_error (0x0x7f868d9084e0) 0
+ primary-for std::system_error (0x0x7f868d908478)
+ std::exception (0x0x7f868d9520c0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f868d9084e0)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f868d952120) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f868d952180) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f868d9521e0) 0 empty
+
+Vtable for std::ios_base
+std::ios_base::_ZTVSt8ios_base: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt8ios_base)
+16 (int (*)(...))std::ios_base::~ios_base
+24 (int (*)(...))std::ios_base::~ios_base
+
+Class std::ios_base
+ size=216 align=8
+ base size=216 base align=8
+std::ios_base (0x0x7f868d952060) 0
+ vptr=((& std::ios_base::_ZTVSt8ios_base) + 16)
+
+Class std::ctype_base
+ size=1 align=1
+ base size=0 base align=1
+std::ctype_base (0x0x7f868d5e6de0) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7f868d6e7120) 0 empty
+
+VTT for std::basic_ostream<char>
+std::basic_ostream<char>::_ZTTSo: 2 entries
+0 ((& std::basic_ostream<char>::_ZTVSo) + 24)
+8 ((& std::basic_ostream<char>::_ZTVSo) + 64)
+
+VTT for std::basic_ostream<wchar_t>
+std::basic_ostream<wchar_t>::_ZTTSt13basic_ostreamIwSt11char_traitsIwEE: 2 entries
+0 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 64)
+
+VTT for std::basic_istream<char>
+std::basic_istream<char>::_ZTTSi: 2 entries
+0 ((& std::basic_istream<char>::_ZTVSi) + 24)
+8 ((& std::basic_istream<char>::_ZTVSi) + 64)
+
+VTT for std::basic_istream<wchar_t>
+std::basic_istream<wchar_t>::_ZTTSt13basic_istreamIwSt11char_traitsIwEE: 2 entries
+0 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 64)
+
+Construction vtable for std::basic_istream<char> (0x0x7f868d255068 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd0_Si: 10 entries
+0 24
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISi)
+24 0
+32 0
+40 18446744073709551592
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISi)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<char> (0x0x7f868d255138 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd16_So: 10 entries
+0 8
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISo)
+24 0
+32 0
+40 18446744073709551608
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISo)
+64 0
+72 0
+
+VTT for std::basic_iostream<char>
+std::basic_iostream<char>::_ZTTSd: 7 entries
+0 ((& std::basic_iostream<char>::_ZTVSd) + 24)
+8 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 24)
+16 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 64)
+24 ((& std::basic_iostream<char>::_ZTCSd16_So) + 24)
+32 ((& std::basic_iostream<char>::_ZTCSd16_So) + 64)
+40 ((& std::basic_iostream<char>::_ZTVSd) + 104)
+48 ((& std::basic_iostream<char>::_ZTVSd) + 64)
+
+Construction vtable for std::basic_istream<wchar_t> (0x0x7f868d255680 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E: 10 entries
+0 24
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551592
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<wchar_t> (0x0x7f868d255750 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E: 10 entries
+0 8
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551608
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+VTT for std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTTSt14basic_iostreamIwSt11char_traitsIwEE: 7 entries
+0 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 24)
+16 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 64)
+24 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 24)
+32 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 64)
+40 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 104)
+48 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 64)
+
+Vtable for __gnu_cxx::__concurrence_lock_error
+__gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx24__concurrence_lock_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error
+24 (int (*)(...))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error
+32 (int (*)(...))__gnu_cxx::__concurrence_lock_error::what
+
+Class __gnu_cxx::__concurrence_lock_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_lock_error (0x0x7f868d255d00) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+ std::exception (0x0x7f868d28cae0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f868d255d00)
+
+Vtable for __gnu_cxx::__concurrence_unlock_error
+__gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx26__concurrence_unlock_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error
+24 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error
+32 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::what
+
+Class __gnu_cxx::__concurrence_unlock_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_unlock_error (0x0x7f868d255d68) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+ std::exception (0x0x7f868d28cc00) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f868d255d68)
+
+Vtable for __gnu_cxx::__concurrence_broadcast_error
+__gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx29__concurrence_broadcast_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::~__concurrence_broadcast_error
+24 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::~__concurrence_broadcast_error
+32 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::what
+
+Class __gnu_cxx::__concurrence_broadcast_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_broadcast_error (0x0x7f868d255dd0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+ std::exception (0x0x7f868d28cd20) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f868d255dd0)
+
+Vtable for __gnu_cxx::__concurrence_wait_error
+__gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx24__concurrence_wait_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_wait_error::~__concurrence_wait_error
+24 (int (*)(...))__gnu_cxx::__concurrence_wait_error::~__concurrence_wait_error
+32 (int (*)(...))__gnu_cxx::__concurrence_wait_error::what
+
+Class __gnu_cxx::__concurrence_wait_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_wait_error (0x0x7f868d255ea0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+ std::exception (0x0x7f868d28ce40) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f868d255ea0)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f868d2b8720) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f868d2b8a80) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f868d2b8d80) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f868d2e30c0) 0
+
+Vtable for std::bad_weak_ptr
+std::bad_weak_ptr::_ZTVSt12bad_weak_ptr: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12bad_weak_ptr)
+16 (int (*)(...))std::bad_weak_ptr::~bad_weak_ptr
+24 (int (*)(...))std::bad_weak_ptr::~bad_weak_ptr
+32 (int (*)(...))std::bad_weak_ptr::what
+
+Class std::bad_weak_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::bad_weak_ptr (0x0x7f868d255208) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+ std::exception (0x0x7f868d3678a0) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f868d255208)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f868cfd6660) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7f868cfd6ba0) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f868d11e9c0) 0
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7f868ce930c0) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7f868cf7ba80) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7f868cdc1d20) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f868ca4b900) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7f868cbb5780) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7f868cbb5ba0) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7f868cbb5c00) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7f868c833d80) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7f868c9343c0) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7f868c934360) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f868c98c3c0) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7f868c6f2540) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7f868c2e9900) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7f868c2e6c98) 0
+ QtPrivate::ArgBase (0x0x7f868c2e9960) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7f868c2e6d68) 0
+ QtPrivate::ArgBase (0x0x7f868c2e9ba0) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f868c398000) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f868c3980c0) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7f868c19e5a0) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f868be35720) 0 empty
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7f868be5f4e0) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7f868be5f720) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7f868bef7840) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f868c03b958) 0
+ QIODeviceBase (0x0x7f868bef78a0) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f868bef7a20) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f868bf78e40) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7f868bbe2138) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f868bf78f00) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7f868bbe2208) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f868bc1e000) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7f868bca1ae0) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7f868bbe25b0) 0
+ QMetaContainer (0x0x7f868bca1cc0) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7f868bbe2618) 0
+ QMetaContainer (0x0x7f868bcc40c0) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f868bdc1420) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7f868bd59680) 0
+ std::__detail::_List_node_base (0x0x7f868bdc1480) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f868ba98540) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7f868ba988a0) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7f868b902ea0) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f868b984540) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7f868b4a03c0) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7f868b4a0420) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f868b3a5ae0) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7f868b3a5e40) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7f868b019ea0) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7f868b030000) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7f868b081660) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7f868b081600) 0 empty
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7f868b0816c0) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7f868b081b40) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7f868b081ba0) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7f868b0a91e0) 0
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7f868b0a9900) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7f868b0a9c00) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7f868b0a9d20) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7f868b0a9f60) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7f868b085750) 0
+ QPropertyObserverBase (0x0x7f868b0f7120) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7f868b13f060) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7f868b1611e0) 0
+
+Class QBindingStatus
+ size=16 align=8
+ base size=16 base align=8
+QBindingStatus (0x0x7f868b198600) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7f868b198660) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f868aea2300) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f868af52060) 0 empty
+
+Vtable for QObjectData
+QObjectData::_ZTV11QObjectData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QObjectData)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+
+Class QObjectData
+ size=80 align=8
+ base size=80 base align=8
+QObjectData (0x0x7f868abc79c0) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f868ac3c360) 0 empty
+
+Vtable for QObject
+QObject::_ZTV7QObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QObject)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QObject::qt_metacall
+40 (int (*)(...))QObject::~QObject
+48 (int (*)(...))QObject::~QObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QObject
+ size=16 align=8
+ base size=16 base align=8
+QObject (0x0x7f868ac3c300) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f868acf62a0) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f868acf6b40) 0 empty
+
+Vtable for QAbstractAnimation
+QAbstractAnimation::_ZTV18QAbstractAnimation: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractAnimation)
+16 (int (*)(...))QAbstractAnimation::metaObject
+24 (int (*)(...))QAbstractAnimation::qt_metacast
+32 (int (*)(...))QAbstractAnimation::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAbstractAnimation
+ size=16 align=8
+ base size=16 base align=8
+QAbstractAnimation (0x0x7f868ac319c0) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+ QObject (0x0x7f868acf6ae0) 0
+ primary-for QAbstractAnimation (0x0x7f868ac319c0)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f868acf6ea0) 0 empty
+
+Vtable for QAnimationDriver
+QAnimationDriver::_ZTV16QAnimationDriver: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAnimationDriver)
+16 (int (*)(...))QAnimationDriver::metaObject
+24 (int (*)(...))QAnimationDriver::qt_metacast
+32 (int (*)(...))QAnimationDriver::qt_metacall
+40 (int (*)(...))QAnimationDriver::~QAnimationDriver
+48 (int (*)(...))QAnimationDriver::~QAnimationDriver
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAnimationDriver::advance
+120 (int (*)(...))QAnimationDriver::elapsed
+128 (int (*)(...))QAnimationDriver::start
+136 (int (*)(...))QAnimationDriver::stop
+
+Class QAnimationDriver
+ size=16 align=8
+ base size=16 base align=8
+QAnimationDriver (0x0x7f868ac31a28) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+ QObject (0x0x7f868acf6e40) 0
+ primary-for QAnimationDriver (0x0x7f868ac31a28)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f868ad350c0) 0 empty
+
+Vtable for QEventLoop
+QEventLoop::_ZTV10QEventLoop: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QEventLoop)
+16 (int (*)(...))QEventLoop::metaObject
+24 (int (*)(...))QEventLoop::qt_metacast
+32 (int (*)(...))QEventLoop::qt_metacall
+40 (int (*)(...))QEventLoop::~QEventLoop
+48 (int (*)(...))QEventLoop::~QEventLoop
+56 (int (*)(...))QEventLoop::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QEventLoop
+ size=16 align=8
+ base size=16 base align=8
+QEventLoop (0x0x7f868ac31a90) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+ QObject (0x0x7f868ad35060) 0
+ primary-for QEventLoop (0x0x7f868ac31a90)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f868ad35540) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f868ad35600) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f868ad35660) 0
+
+Vtable for QAbstractEventDispatcher
+QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractEventDispatcher)
+16 (int (*)(...))QAbstractEventDispatcher::metaObject
+24 (int (*)(...))QAbstractEventDispatcher::qt_metacast
+32 (int (*)(...))QAbstractEventDispatcher::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))QAbstractEventDispatcher::startingUp
+200 (int (*)(...))QAbstractEventDispatcher::closingDown
+
+Class QAbstractEventDispatcher
+ size=16 align=8
+ base size=16 base align=8
+QAbstractEventDispatcher (0x0x7f868ac31c30) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+ QObject (0x0x7f868ad355a0) 0
+ primary-for QAbstractEventDispatcher (0x0x7f868ac31c30)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f868ad93de0) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7f868a860c60) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7f868a860c00) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7f868a8827e0) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7f868ada4d68) 0
+ QStringConverterBase (0x0x7f868a882780) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7f868ada4dd0) 0
+ QStringConverter (0x0x7f868ada4e38) 0
+ QStringConverterBase (0x0x7f868a8d31e0) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7f868ada4ea0) 0
+ QStringConverter (0x0x7f868ada4f08) 0
+ QStringConverterBase (0x0x7f868a8fa060) 0 empty
+
+Vtable for QTextStream
+QTextStream::_ZTV11QTextStream: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTextStream)
+16 (int (*)(...))QTextStream::~QTextStream
+24 (int (*)(...))QTextStream::~QTextStream
+
+Class QTextStream
+ size=16 align=8
+ base size=16 base align=8
+QTextStream (0x0x7f868ada4f70) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+ QIODeviceBase (0x0x7f868a8fad20) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f868a95d420) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7f868a5ee600) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f868a644060) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f868a6441e0) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7f868a6ef3c0) 0 empty
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7f868a7153c0) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f868a6c3a28) 0
+ QIODeviceBase (0x0x7f868a715360) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f868a43c300) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f868a43c3c0) 0 empty
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7f868a1e2de0) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7f868a1e2e40) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7f868a1e2d80) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7f8689fd25a0) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7f8689fd27e0) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7f8689fd29c0) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7f868a019900) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f868a05d900) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f868a0acae0) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f868a13e3c0) 0 empty
+
+Vtable for QAbstractItemModel
+QAbstractItemModel::_ZTV18QAbstractItemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractItemModel)
+16 (int (*)(...))QAbstractItemModel::metaObject
+24 (int (*)(...))QAbstractItemModel::qt_metacast
+32 (int (*)(...))QAbstractItemModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractItemModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractItemModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractItemModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModel (0x0x7f868a136bc8) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+ QObject (0x0x7f868a13e360) 0
+ primary-for QAbstractItemModel (0x0x7f868a136bc8)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f8689e7a0c0) 0 empty
+
+Vtable for QAbstractTableModel
+QAbstractTableModel::_ZTV19QAbstractTableModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractTableModel)
+16 (int (*)(...))QAbstractTableModel::metaObject
+24 (int (*)(...))QAbstractTableModel::qt_metacast
+32 (int (*)(...))QAbstractTableModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractTableModel::index
+120 (int (*)(...))QAbstractTableModel::parent
+128 (int (*)(...))QAbstractTableModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractTableModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractTableModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractTableModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractTableModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTableModel (0x0x7f8689de6478) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+ QAbstractItemModel (0x0x7f8689de64e0) 0
+ primary-for QAbstractTableModel (0x0x7f8689de6478)
+ QObject (0x0x7f8689e7a060) 0
+ primary-for QAbstractItemModel (0x0x7f8689de64e0)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f8689e7a1e0) 0 empty
+
+Vtable for QAbstractListModel
+QAbstractListModel::_ZTV18QAbstractListModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractListModel)
+16 (int (*)(...))QAbstractListModel::metaObject
+24 (int (*)(...))QAbstractListModel::qt_metacast
+32 (int (*)(...))QAbstractListModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QAbstractListModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractListModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractListModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractListModel (0x0x7f8689de6548) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+ QAbstractItemModel (0x0x7f8689de65b0) 0
+ primary-for QAbstractListModel (0x0x7f8689de6548)
+ QObject (0x0x7f8689e7a180) 0
+ primary-for QAbstractItemModel (0x0x7f8689de65b0)
+
+Vtable for QAbstractNativeEventFilter
+QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractNativeEventFilter)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractNativeEventFilter
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNativeEventFilter (0x0x7f8689ec2600) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f8689ec26c0) 0 empty
+
+Vtable for QAbstractProxyModel
+QAbstractProxyModel::_ZTV19QAbstractProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractProxyModel)
+16 (int (*)(...))QAbstractProxyModel::metaObject
+24 (int (*)(...))QAbstractProxyModel::qt_metacast
+32 (int (*)(...))QAbstractProxyModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractProxyModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QAbstractProxyModel::headerData
+184 (int (*)(...))QAbstractProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QAbstractProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QAbstractProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QAbstractProxyModel::setSourceModel
+416 (int (*)(...))__cxa_pure_virtual
+424 (int (*)(...))__cxa_pure_virtual
+432 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+440 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QAbstractProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractProxyModel (0x0x7f8689ec6958) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+ QAbstractItemModel (0x0x7f8689ec69c0) 0
+ primary-for QAbstractProxyModel (0x0x7f8689ec6958)
+ QObject (0x0x7f8689ec2660) 0
+ primary-for QAbstractItemModel (0x0x7f8689ec69c0)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f8689ec28a0) 0 empty
+
+Vtable for QAnimationGroup
+QAnimationGroup::_ZTV15QAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAnimationGroup)
+16 (int (*)(...))QAnimationGroup::metaObject
+24 (int (*)(...))QAnimationGroup::qt_metacast
+32 (int (*)(...))QAnimationGroup::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QAnimationGroup (0x0x7f8689ec6a28) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+ QAbstractAnimation (0x0x7f8689ec6a90) 0
+ primary-for QAnimationGroup (0x0x7f8689ec6a28)
+ QObject (0x0x7f8689ec2840) 0
+ primary-for QAbstractAnimation (0x0x7f8689ec6a90)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7f8689ec6bc8) 0
+ QIterator<QMetaAssociation> (0x0x7f8689ec6c30) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f8689ec2cc0) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7f8689ec6d68) 0
+ QConstIterator<QMetaAssociation> (0x0x7f8689ec6dd0) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f8689f31240) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7f8689ec6ea0) 0
+ QIterable<QMetaAssociation> (0x0x7f8689f31780) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f8689c332a0) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7f8689c91000) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7f8689c91f00) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f8689ceca80) 0 empty
+
+Vtable for QIODevice
+QIODevice::_ZTV9QIODevice: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QIODevice)
+16 (int (*)(...))QIODevice::metaObject
+24 (int (*)(...))QIODevice::qt_metacast
+32 (int (*)(...))QIODevice::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIODevice::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QIODevice::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))__cxa_pure_virtual
+
+Class QIODevice
+ size=16 align=8
+ base size=16 base align=8
+QIODevice (0x0x7f8689c07850) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+ QObject (0x0x7f8689cec9c0) 0
+ primary-for QIODevice (0x0x7f8689c07850)
+ QIODeviceBase (0x0x7f8689ceca20) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f8689cecde0) 0 empty
+
+Vtable for QBuffer
+QBuffer::_ZTV7QBuffer: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QBuffer)
+16 (int (*)(...))QBuffer::metaObject
+24 (int (*)(...))QBuffer::qt_metacast
+32 (int (*)(...))QBuffer::qt_metacall
+40 (int (*)(...))QBuffer::~QBuffer
+48 (int (*)(...))QBuffer::~QBuffer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QBuffer::connectNotify
+104 (int (*)(...))QBuffer::disconnectNotify
+112 (int (*)(...))QIODevice::isSequential
+120 (int (*)(...))QBuffer::open
+128 (int (*)(...))QBuffer::close
+136 (int (*)(...))QBuffer::pos
+144 (int (*)(...))QBuffer::size
+152 (int (*)(...))QBuffer::seek
+160 (int (*)(...))QBuffer::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QBuffer::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QBuffer::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QBuffer::writeData
+
+Class QBuffer
+ size=16 align=8
+ base size=16 base align=8
+QBuffer (0x0x7f8689ce9dd0) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+ QIODevice (0x0x7f8689c078c0) 0
+ primary-for QBuffer (0x0x7f8689ce9dd0)
+ QObject (0x0x7f8689cecd20) 0
+ primary-for QIODevice (0x0x7f8689c078c0)
+ QIODeviceBase (0x0x7f8689cecd80) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f8689d3a060) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7f8689d3a000) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f8689d3a1e0) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f8689d3a180) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f8689d8e9c0) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7f8689aa3780) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7f8689aa3720) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f8689aa3ae0) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f8689b49120) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f8689b94360) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f8689b943c0) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f8689b94300) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7f868981b600) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f868981bea0) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f86898caf60) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7f8689956720) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f86899567e0) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7f8689956960) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f86895e5960) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f86896ce4e0) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7f868973d660) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7f868973d720) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7f8689475000) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7f86894b2540) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7f86894b25a0) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7f86894b24e0) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7f868959fb40) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7f868959fba0) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7f868959fae0) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7f86893b6c00) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7f86893b6ba0) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7f8689097c60) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7f8689105600) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f8689136060) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f8689136240) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f8688dddc60) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7f8688e64540) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7f8688e645a0) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7f8688e64600) 0 empty
+
+Vtable for QEvent
+QEvent::_ZTV6QEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QEvent)
+16 (int (*)(...))QEvent::~QEvent
+24 (int (*)(...))QEvent::~QEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QEvent
+ size=16 align=8
+ base size=16 base align=8
+QEvent (0x0x7f8688e644e0) 0
+ vptr=((& QEvent::_ZTV6QEvent) + 16)
+
+Vtable for QTimerEvent
+QTimerEvent::_ZTV11QTimerEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTimerEvent)
+16 (int (*)(...))QTimerEvent::~QTimerEvent
+24 (int (*)(...))QTimerEvent::~QTimerEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QTimerEvent::clone
+
+Class QTimerEvent
+ size=24 align=8
+ base size=20 base align=8
+QTimerEvent (0x0x7f8688e59d00) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+ QEvent (0x0x7f8688e64f60) 0
+ primary-for QTimerEvent (0x0x7f8688e59d00)
+
+Vtable for QChildEvent
+QChildEvent::_ZTV11QChildEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QChildEvent)
+16 (int (*)(...))QChildEvent::~QChildEvent
+24 (int (*)(...))QChildEvent::~QChildEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QChildEvent::clone
+
+Class QChildEvent
+ size=24 align=8
+ base size=24 base align=8
+QChildEvent (0x0x7f8688e59d68) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+ QEvent (0x0x7f8688ec7480) 0
+ primary-for QChildEvent (0x0x7f8688e59d68)
+
+Vtable for QDynamicPropertyChangeEvent
+QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDynamicPropertyChangeEvent)
+16 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+24 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDynamicPropertyChangeEvent::clone
+
+Class QDynamicPropertyChangeEvent
+ size=40 align=8
+ base size=40 base align=8
+QDynamicPropertyChangeEvent (0x0x7f8688e59dd0) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+ QEvent (0x0x7f8688ec78a0) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f8688e59dd0)
+
+Vtable for QDeferredDeleteEvent
+QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDeferredDeleteEvent)
+16 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+24 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDeferredDeleteEvent::clone
+
+Class QDeferredDeleteEvent
+ size=24 align=8
+ base size=20 base align=8
+QDeferredDeleteEvent (0x0x7f8688e59e38) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+ QEvent (0x0x7f8688ec7b40) 0
+ primary-for QDeferredDeleteEvent (0x0x7f8688e59e38)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f8688ec7ea0) 0 empty
+
+Vtable for QCoreApplication
+QCoreApplication::_ZTV16QCoreApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QCoreApplication)
+16 (int (*)(...))QCoreApplication::metaObject
+24 (int (*)(...))QCoreApplication::qt_metacast
+32 (int (*)(...))QCoreApplication::qt_metacall
+40 (int (*)(...))QCoreApplication::~QCoreApplication
+48 (int (*)(...))QCoreApplication::~QCoreApplication
+56 (int (*)(...))QCoreApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCoreApplication::notify
+120 (int (*)(...))QCoreApplication::compressEvent
+
+Class QCoreApplication
+ size=16 align=8
+ base size=16 base align=8
+QCoreApplication (0x0x7f8688e59ea0) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+ QObject (0x0x7f8688ec7e40) 0
+ primary-for QCoreApplication (0x0x7f8688e59ea0)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f8688f0f0c0) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7f8688f0f1e0) 0 empty
+
+Vtable for QConcatenateTablesProxyModel
+QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QConcatenateTablesProxyModel)
+16 (int (*)(...))QConcatenateTablesProxyModel::metaObject
+24 (int (*)(...))QConcatenateTablesProxyModel::qt_metacast
+32 (int (*)(...))QConcatenateTablesProxyModel::qt_metacall
+40 (int (*)(...))QConcatenateTablesProxyModel::~QConcatenateTablesProxyModel
+48 (int (*)(...))QConcatenateTablesProxyModel::~QConcatenateTablesProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QConcatenateTablesProxyModel::index
+120 (int (*)(...))QConcatenateTablesProxyModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QConcatenateTablesProxyModel::rowCount
+144 (int (*)(...))QConcatenateTablesProxyModel::columnCount
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))QConcatenateTablesProxyModel::data
+168 (int (*)(...))QConcatenateTablesProxyModel::setData
+176 (int (*)(...))QConcatenateTablesProxyModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QConcatenateTablesProxyModel::itemData
+200 (int (*)(...))QConcatenateTablesProxyModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QConcatenateTablesProxyModel::mimeTypes
+224 (int (*)(...))QConcatenateTablesProxyModel::mimeData
+232 (int (*)(...))QConcatenateTablesProxyModel::canDropMimeData
+240 (int (*)(...))QConcatenateTablesProxyModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QConcatenateTablesProxyModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QConcatenateTablesProxyModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QConcatenateTablesProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QConcatenateTablesProxyModel (0x0x7f8688e59f08) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+ QAbstractItemModel (0x0x7f8688e59f70) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7f8688e59f08)
+ QObject (0x0x7f8688f0f180) 0
+ primary-for QAbstractItemModel (0x0x7f8688e59f70)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f8688f0f360) 0
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f8688f0f480) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f8688f0f780) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f8688c3ed20) 0 empty
+
+Vtable for QFileDevice
+QFileDevice::_ZTV11QFileDevice: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFileDevice)
+16 (int (*)(...))QFileDevice::metaObject
+24 (int (*)(...))QFileDevice::qt_metacast
+32 (int (*)(...))QFileDevice::qt_metacall
+40 (int (*)(...))QFileDevice::~QFileDevice
+48 (int (*)(...))QFileDevice::~QFileDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFileDevice::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QFileDevice::fileName
+256 (int (*)(...))QFileDevice::resize
+264 (int (*)(...))QFileDevice::permissions
+272 (int (*)(...))QFileDevice::setPermissions
+
+Class QFileDevice
+ size=16 align=8
+ base size=16 base align=8
+QFileDevice (0x0x7f8688c4a548) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+ QIODevice (0x0x7f8688c5a000) 0
+ primary-for QFileDevice (0x0x7f8688c4a548)
+ QObject (0x0x7f8688c3ec60) 0
+ primary-for QIODevice (0x0x7f8688c5a000)
+ QIODeviceBase (0x0x7f8688c3ecc0) 0 empty
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f8688c858a0) 0 empty
+
+Vtable for QFile
+QFile::_ZTV5QFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QFile)
+16 (int (*)(...))QFile::metaObject
+24 (int (*)(...))QFile::qt_metacast
+32 (int (*)(...))QFile::qt_metacall
+40 (int (*)(...))QFile::~QFile
+48 (int (*)(...))QFile::~QFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QFile::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFile::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QFile::fileName
+256 (int (*)(...))QFile::resize
+264 (int (*)(...))QFile::permissions
+272 (int (*)(...))QFile::setPermissions
+
+Class QFile
+ size=16 align=8
+ base size=16 base align=8
+QFile (0x0x7f8688c4a958) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+ QFileDevice (0x0x7f8688c4a9c0) 0
+ primary-for QFile (0x0x7f8688c4a958)
+ QIODevice (0x0x7f8688cee000) 0
+ primary-for QFileDevice (0x0x7f8688c4a9c0)
+ QObject (0x0x7f8688c857e0) 0
+ primary-for QIODevice (0x0x7f8688cee000)
+ QIODeviceBase (0x0x7f8688c85840) 0 empty
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f8688c85b40) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f8688d7a5a0) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f8688a36840) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f8688a36c00) 0
+
+Vtable for QException
+QException::_ZTV10QException: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QException)
+16 (int (*)(...))QException::~QException
+24 (int (*)(...))QException::~QException
+32 (int (*)(...))std::exception::what
+40 (int (*)(...))QException::raise
+48 (int (*)(...))QException::clone
+
+Class QException
+ size=8 align=8
+ base size=8 base align=8
+QException (0x0x7f8688b0d5b0) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+ std::exception (0x0x7f8688b47360) 0 nearly-empty
+ primary-for QException (0x0x7f8688b0d5b0)
+
+Vtable for QUnhandledException
+QUnhandledException::_ZTV19QUnhandledException: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QUnhandledException)
+16 (int (*)(...))QUnhandledException::~QUnhandledException
+24 (int (*)(...))QUnhandledException::~QUnhandledException
+32 (int (*)(...))std::exception::what
+40 (int (*)(...))QUnhandledException::raise
+48 (int (*)(...))QUnhandledException::clone
+
+Class QUnhandledException
+ size=16 align=8
+ base size=16 base align=8
+QUnhandledException (0x0x7f8688b0d618) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+ QException (0x0x7f8688b0d680) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f8688b0d618)
+ std::exception (0x0x7f8688b473c0) 0 nearly-empty
+ primary-for QException (0x0x7f8688b0d680)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f8688b93240) 0
+
+Vtable for QFactoryInterface
+QFactoryInterface::_ZTV17QFactoryInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFactoryInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QFactoryInterface
+ size=8 align=8
+ base size=8 base align=8
+QFactoryInterface (0x0x7f8688b932a0) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f8688b934e0) 0 empty
+
+Vtable for QFileSelector
+QFileSelector::_ZTV13QFileSelector: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QFileSelector)
+16 (int (*)(...))QFileSelector::metaObject
+24 (int (*)(...))QFileSelector::qt_metacast
+32 (int (*)(...))QFileSelector::qt_metacall
+40 (int (*)(...))QFileSelector::~QFileSelector
+48 (int (*)(...))QFileSelector::~QFileSelector
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSelector
+ size=16 align=8
+ base size=16 base align=8
+QFileSelector (0x0x7f8688b91888) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+ QObject (0x0x7f8688b93480) 0
+ primary-for QFileSelector (0x0x7f8688b91888)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f8688b936c0) 0 empty
+
+Vtable for QFileSystemWatcher
+QFileSystemWatcher::_ZTV18QFileSystemWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFileSystemWatcher)
+16 (int (*)(...))QFileSystemWatcher::metaObject
+24 (int (*)(...))QFileSystemWatcher::qt_metacast
+32 (int (*)(...))QFileSystemWatcher::qt_metacall
+40 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+48 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSystemWatcher
+ size=16 align=8
+ base size=16 base align=8
+QFileSystemWatcher (0x0x7f8688b918f0) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+ QObject (0x0x7f8688b93660) 0
+ primary-for QFileSystemWatcher (0x0x7f8688b918f0)
+
+Vtable for QRunnable
+QRunnable::_ZTV9QRunnable: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QRunnable)
+16 (int (*)(...))__cxa_pure_virtual
+24 0
+32 0
+
+Class QRunnable
+ size=16 align=8
+ base size=9 base align=8
+QRunnable (0x0x7f8688b93840) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f8688b93a20) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f8688b919c0) 0
+ QBasicMutex (0x0x7f8688814780) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7f8688814ba0) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f86888821e0) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f86888827e0) 0
+
+Vtable for QtPrivate::ResultStoreBase
+QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9QtPrivate15ResultStoreBaseE)
+16 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+24 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+
+Class QtPrivate::ResultStoreBase
+ size=48 align=8
+ base size=44 base align=8
+QtPrivate::ResultStoreBase (0x0x7f8688902480) 0
+ vptr=((& QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE) + 16)
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f86885e1ea0) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f86885f3c30) 0
+ std::__mutex_base (0x0x7f86885e1f00) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f868860a0c0) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f868860a120) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f868860a180) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f868860aba0) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f86885f3c98) 0
+ std::__recursive_mutex_base (0x0x7f868860ac00) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f8688b14850) 0
+ std::__mutex_base (0x0x7f8688644000) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7f8688644060) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f8688b148c0) 0
+ std::__recursive_mutex_base (0x0x7f8688644420) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f8688644480) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f868867f2a0) 0
+
+Vtable for QFutureInterfaceBase
+QFutureInterfaceBase::_ZTV20QFutureInterfaceBase: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QFutureInterfaceBase)
+16 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+24 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+
+Class QFutureInterfaceBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureInterfaceBase (0x0x7f868867f4e0) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Vtable for std::thread::_State
+std::thread::_State::_ZTVNSt6thread6_StateE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6thread6_StateE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class std::thread::_State
+ size=8 align=8
+ base size=8 base align=8
+std::thread::_State (0x0x7f86886d4420) 0 nearly-empty
+ vptr=((& std::thread::_State::_ZTVNSt6thread6_StateE) + 16)
+
+Class std::thread::id
+ size=8 align=8
+ base size=8 base align=8
+std::thread::id (0x0x7f86886d4480) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f86886d43c0) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f86884b46c0) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f86884b4a80) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f86884b4ae0) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f868859e060) 0 empty
+
+Vtable for std::future_error
+std::future_error::_ZTVSt12future_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12future_error)
+16 (int (*)(...))std::future_error::~future_error
+24 (int (*)(...))std::future_error::~future_error
+32 (int (*)(...))std::future_error::what
+
+Class std::future_error
+ size=32 align=8
+ base size=32 base align=8
+std::future_error (0x0x7f86884a8ea0) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+ std::logic_error (0x0x7f86884a8f08) 0
+ primary-for std::future_error (0x0x7f86884a8ea0)
+ std::exception (0x0x7f868859e780) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f86884a8f08)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f868859eea0) 0 empty
+
+Vtable for std::__future_base::_Result_base
+std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base12_Result_baseE)
+16 (int (*)(...))__cxa_pure_virtual
+24 0
+32 0
+
+Class std::__future_base::_Result_base
+ size=16 align=8
+ base size=16 base align=8
+std::__future_base::_Result_base (0x0x7f868859ee40) 0
+ vptr=((& std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE) + 16)
+
+Class std::__future_base::_State_baseV2::__exception_ptr_tag
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_State_baseV2::__exception_ptr_tag (0x0x7f8688318900) 0 empty
+
+Class std::__future_base::_State_baseV2::_Make_ready
+ size=32 align=8
+ base size=32 base align=8
+std::__future_base::_State_baseV2::_Make_ready (0x0x7f86883196e8) 0
+ std::__at_thread_exit_elt (0x0x7f86883189c0) 0
+
+Vtable for std::__future_base::_State_baseV2
+std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base13_State_baseV2E)
+16 (int (*)(...))std::__future_base::_State_baseV2::~_State_baseV2
+24 (int (*)(...))std::__future_base::_State_baseV2::~_State_baseV2
+32 (int (*)(...))std::__future_base::_State_baseV2::_M_complete_async
+40 (int (*)(...))std::__future_base::_State_baseV2::_M_is_deferred_future
+
+Class std::__future_base::_State_baseV2
+ size=32 align=8
+ base size=28 base align=8
+std::__future_base::_State_baseV2 (0x0x7f86881d8060) 0
+ vptr=((& std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E) + 16)
+
+Class std::__future_base
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base (0x0x7f868859ede0) 0 empty
+
+Vtable for std::__future_base::_Async_state_commonV2
+std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base21_Async_state_commonV2E)
+16 (int (*)(...))std::__future_base::_Async_state_commonV2::~_Async_state_commonV2
+24 (int (*)(...))std::__future_base::_Async_state_commonV2::~_Async_state_commonV2
+32 (int (*)(...))std::__future_base::_Async_state_commonV2::_M_complete_async
+40 (int (*)(...))std::__future_base::_State_baseV2::_M_is_deferred_future
+
+Class std::__future_base::_Async_state_commonV2
+ size=48 align=8
+ base size=44 base align=8
+std::__future_base::_Async_state_commonV2 (0x0x7f8687fbeaf8) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+ std::__future_base::_State_baseV2 (0x0x7f8687c1b6c0) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f8687fbeaf8)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f8687c1bf60) 0 empty
+
+Vtable for QThread
+QThread::_ZTV7QThread: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QThread)
+16 (int (*)(...))QThread::metaObject
+24 (int (*)(...))QThread::qt_metacast
+32 (int (*)(...))QThread::qt_metacall
+40 (int (*)(...))QThread::~QThread
+48 (int (*)(...))QThread::~QThread
+56 (int (*)(...))QThread::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QThread::run
+
+Class QThread
+ size=16 align=8
+ base size=16 base align=8
+QThread (0x0x7f8687fbee38) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+ QObject (0x0x7f8687c1bf00) 0
+ primary-for QThread (0x0x7f8687fbee38)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f8687c52360) 0 empty
+
+Vtable for QThreadPool
+QThreadPool::_ZTV11QThreadPool: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QThreadPool)
+16 (int (*)(...))QThreadPool::metaObject
+24 (int (*)(...))QThreadPool::qt_metacast
+32 (int (*)(...))QThreadPool::qt_metacall
+40 (int (*)(...))QThreadPool::~QThreadPool
+48 (int (*)(...))QThreadPool::~QThreadPool
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QThreadPool
+ size=16 align=8
+ base size=16 base align=8
+QThreadPool (0x0x7f8687fbeea0) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+ QObject (0x0x7f8687c52300) 0
+ primary-for QThreadPool (0x0x7f8687fbeea0)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f8687a8e240) 0 empty
+
+Vtable for QFutureWatcherBase
+QFutureWatcherBase::_ZTV18QFutureWatcherBase: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFutureWatcherBase)
+16 (int (*)(...))QFutureWatcherBase::metaObject
+24 (int (*)(...))QFutureWatcherBase::qt_metacast
+32 (int (*)(...))QFutureWatcherBase::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QFutureWatcherBase::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QFutureWatcherBase::connectNotify
+104 (int (*)(...))QFutureWatcherBase::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QFutureWatcherBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureWatcherBase (0x0x7f86879d5d00) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+ QObject (0x0x7f8687a8e1e0) 0
+ primary-for QFutureWatcherBase (0x0x7f86879d5d00)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f8687a8e780) 0 empty
+
+Vtable for QIdentityProxyModel
+QIdentityProxyModel::_ZTV19QIdentityProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QIdentityProxyModel)
+16 (int (*)(...))QIdentityProxyModel::metaObject
+24 (int (*)(...))QIdentityProxyModel::qt_metacast
+32 (int (*)(...))QIdentityProxyModel::qt_metacall
+40 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+48 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIdentityProxyModel::index
+120 (int (*)(...))QIdentityProxyModel::parent
+128 (int (*)(...))QIdentityProxyModel::sibling
+136 (int (*)(...))QIdentityProxyModel::rowCount
+144 (int (*)(...))QIdentityProxyModel::columnCount
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QIdentityProxyModel::headerData
+184 (int (*)(...))QAbstractProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QIdentityProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QIdentityProxyModel::insertRows
+272 (int (*)(...))QIdentityProxyModel::insertColumns
+280 (int (*)(...))QIdentityProxyModel::removeRows
+288 (int (*)(...))QIdentityProxyModel::removeColumns
+296 (int (*)(...))QIdentityProxyModel::moveRows
+304 (int (*)(...))QIdentityProxyModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QAbstractProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QIdentityProxyModel::match
+360 (int (*)(...))QAbstractProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QIdentityProxyModel::setSourceModel
+416 (int (*)(...))QIdentityProxyModel::mapToSource
+424 (int (*)(...))QIdentityProxyModel::mapFromSource
+432 (int (*)(...))QIdentityProxyModel::mapSelectionToSource
+440 (int (*)(...))QIdentityProxyModel::mapSelectionFromSource
+
+Class QIdentityProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QIdentityProxyModel (0x0x7f86879d5f08) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f86879d5f70) 0
+ primary-for QIdentityProxyModel (0x0x7f86879d5f08)
+ QAbstractItemModel (0x0x7f8687aa7000) 0
+ primary-for QAbstractProxyModel (0x0x7f86879d5f70)
+ QObject (0x0x7f8687a8e720) 0
+ primary-for QAbstractItemModel (0x0x7f8687aa7000)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f8687a8e900) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f8687b1c4e0) 0 empty
+
+Vtable for QItemSelectionModel
+QItemSelectionModel::_ZTV19QItemSelectionModel: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QItemSelectionModel)
+16 (int (*)(...))QItemSelectionModel::metaObject
+24 (int (*)(...))QItemSelectionModel::qt_metacast
+32 (int (*)(...))QItemSelectionModel::qt_metacall
+40 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+48 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QItemSelectionModel::setCurrentIndex
+120 (int (*)(...))QItemSelectionModel::select
+128 (int (*)(...))QItemSelectionModel::select
+136 (int (*)(...))QItemSelectionModel::clear
+144 (int (*)(...))QItemSelectionModel::reset
+152 (int (*)(...))QItemSelectionModel::clearCurrentIndex
+
+Class QItemSelectionModel
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionModel (0x0x7f8687b14d68) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+ QObject (0x0x7f8687b1c480) 0
+ primary-for QItemSelectionModel (0x0x7f8687b14d68)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7f8687b6c270) 0
+ QList<QItemSelectionRange> (0x0x7f8687b6c2d8) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7f8687b6c340) 0 empty
+ QListSpecialMethodsBase<QItemSelectionRange> (0x0x7f8687b1cea0) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7f86877e9c00) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7f868781f0c0) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7f8687868300) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7f8687868360) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7f86878682a0) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f86878fbd20) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f86878fbd80) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7f86876aa300) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7f86876aa360) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7f86876aa2a0) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f8687747e40) 0 empty
+
+Vtable for QLibrary
+QLibrary::_ZTV8QLibrary: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QLibrary)
+16 (int (*)(...))QLibrary::metaObject
+24 (int (*)(...))QLibrary::qt_metacast
+32 (int (*)(...))QLibrary::qt_metacall
+40 (int (*)(...))QLibrary::~QLibrary
+48 (int (*)(...))QLibrary::~QLibrary
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QLibrary
+ size=24 align=8
+ base size=24 base align=8
+QLibrary (0x0x7f8687753410) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+ QObject (0x0x7f8687747de0) 0
+ primary-for QLibrary (0x0x7f8687753410)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f8687780480) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f8687780420) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7f868745ec00) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f86874d13c0) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f86874d1480) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f868752db40) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f86875a54e0) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f86871ebae0) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f8687269300) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f8687269540) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f86872694e0) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f86872a7420) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f8687317d20) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f86873a1a80) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7f86873a1b40) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7f86873a1ae0) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7f868701bd80) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7f868701bd20) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7f8687060ae0) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f8687060a80) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7f868708e180) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7f868708e120) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f86870aad20) 0 empty
+
+Vtable for QMimeData
+QMimeData::_ZTV9QMimeData: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QMimeData)
+16 (int (*)(...))QMimeData::metaObject
+24 (int (*)(...))QMimeData::qt_metacast
+32 (int (*)(...))QMimeData::qt_metacall
+40 (int (*)(...))QMimeData::~QMimeData
+48 (int (*)(...))QMimeData::~QMimeData
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QMimeData::hasFormat
+120 (int (*)(...))QMimeData::formats
+128 (int (*)(...))QMimeData::retrieveData
+
+Class QMimeData
+ size=16 align=8
+ base size=16 base align=8
+QMimeData (0x0x7f86870b1ea0) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+ QObject (0x0x7f86870aaf60) 0
+ primary-for QMimeData (0x0x7f86870b1ea0)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f86870d2120) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f868713cb40) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f868713cc00) 0 empty
+
+Vtable for QObjectCleanupHandler
+QObjectCleanupHandler::_ZTV21QObjectCleanupHandler: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QObjectCleanupHandler)
+16 (int (*)(...))QObjectCleanupHandler::metaObject
+24 (int (*)(...))QObjectCleanupHandler::qt_metacast
+32 (int (*)(...))QObjectCleanupHandler::qt_metacall
+40 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+48 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QObjectCleanupHandler
+ size=40 align=8
+ base size=40 base align=8
+QObjectCleanupHandler (0x0x7f868713bd00) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+ QObject (0x0x7f868713cba0) 0
+ primary-for QObjectCleanupHandler (0x0x7f868713bd00)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f868713ccc0) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f868719bae0) 0 empty
+
+Vtable for QParallelAnimationGroup
+QParallelAnimationGroup::_ZTV23QParallelAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QParallelAnimationGroup)
+16 (int (*)(...))QParallelAnimationGroup::metaObject
+24 (int (*)(...))QParallelAnimationGroup::qt_metacast
+32 (int (*)(...))QParallelAnimationGroup::qt_metacall
+40 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+48 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+56 (int (*)(...))QParallelAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QParallelAnimationGroup::duration
+120 (int (*)(...))QParallelAnimationGroup::updateCurrentTime
+128 (int (*)(...))QParallelAnimationGroup::updateState
+136 (int (*)(...))QParallelAnimationGroup::updateDirection
+
+Class QParallelAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QParallelAnimationGroup (0x0x7f86871a6750) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f86871a67b8) 0
+ primary-for QParallelAnimationGroup (0x0x7f86871a6750)
+ QAbstractAnimation (0x0x7f86871a6820) 0
+ primary-for QAnimationGroup (0x0x7f86871a67b8)
+ QObject (0x0x7f868719ba80) 0
+ primary-for QAbstractAnimation (0x0x7f86871a6820)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f868719bcc0) 0 empty
+
+Vtable for QPauseAnimation
+QPauseAnimation::_ZTV15QPauseAnimation: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QPauseAnimation)
+16 (int (*)(...))QPauseAnimation::metaObject
+24 (int (*)(...))QPauseAnimation::qt_metacast
+32 (int (*)(...))QPauseAnimation::qt_metacall
+40 (int (*)(...))QPauseAnimation::~QPauseAnimation
+48 (int (*)(...))QPauseAnimation::~QPauseAnimation
+56 (int (*)(...))QPauseAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPauseAnimation::duration
+120 (int (*)(...))QPauseAnimation::updateCurrentTime
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QPauseAnimation
+ size=16 align=8
+ base size=16 base align=8
+QPauseAnimation (0x0x7f86871a6888) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+ QAbstractAnimation (0x0x7f86871a68f0) 0
+ primary-for QPauseAnimation (0x0x7f86871a6888)
+ QObject (0x0x7f868719bc60) 0
+ primary-for QAbstractAnimation (0x0x7f86871a68f0)
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7f868719bea0) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7f868719bf00) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f8686dee960) 0 empty
+
+Vtable for QPluginLoader
+QPluginLoader::_ZTV13QPluginLoader: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPluginLoader)
+16 (int (*)(...))QPluginLoader::metaObject
+24 (int (*)(...))QPluginLoader::qt_metacast
+32 (int (*)(...))QPluginLoader::qt_metacall
+40 (int (*)(...))QPluginLoader::~QPluginLoader
+48 (int (*)(...))QPluginLoader::~QPluginLoader
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPluginLoader
+ size=32 align=8
+ base size=25 base align=8
+QPluginLoader (0x0x7f8686df64e0) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+ QObject (0x0x7f8686dee900) 0
+ primary-for QPluginLoader (0x0x7f8686df64e0)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f8686deea20) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f8686e7b180) 0 empty
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7f8686e7b1e0) 0 empty
+
+Vtable for QProcess
+QProcess::_ZTV8QProcess: 32 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QProcess)
+16 (int (*)(...))QProcess::metaObject
+24 (int (*)(...))QProcess::qt_metacast
+32 (int (*)(...))QProcess::qt_metacall
+40 (int (*)(...))QProcess::~QProcess
+48 (int (*)(...))QProcess::~QProcess
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QProcess::isSequential
+120 (int (*)(...))QProcess::open
+128 (int (*)(...))QProcess::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QProcess::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QProcess::waitForReadyRead
+208 (int (*)(...))QProcess::waitForBytesWritten
+216 (int (*)(...))QProcess::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QProcess::writeData
+248 (int (*)(...))QProcess::setupChildProcess
+
+Class QProcess
+ size=16 align=8
+ base size=16 base align=8
+QProcess (0x0x7f8686e73548) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+ QIODevice (0x0x7f8686e7c0e0) 0
+ primary-for QProcess (0x0x7f8686e73548)
+ QObject (0x0x7f8686e7b0c0) 0
+ primary-for QIODevice (0x0x7f8686e7c0e0)
+ QIODeviceBase (0x0x7f8686e7b120) 0 empty
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f8686e7bf60) 0 empty
+
+Vtable for QVariantAnimation
+QVariantAnimation::_ZTV17QVariantAnimation: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QVariantAnimation)
+16 (int (*)(...))QVariantAnimation::metaObject
+24 (int (*)(...))QVariantAnimation::qt_metacast
+32 (int (*)(...))QVariantAnimation::qt_metacall
+40 (int (*)(...))QVariantAnimation::~QVariantAnimation
+48 (int (*)(...))QVariantAnimation::~QVariantAnimation
+56 (int (*)(...))QVariantAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QVariantAnimation::duration
+120 (int (*)(...))QVariantAnimation::updateCurrentTime
+128 (int (*)(...))QVariantAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+144 (int (*)(...))QVariantAnimation::updateCurrentValue
+152 (int (*)(...))QVariantAnimation::interpolated
+
+Class QVariantAnimation
+ size=16 align=8
+ base size=16 base align=8
+QVariantAnimation (0x0x7f8686e735b0) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+ QAbstractAnimation (0x0x7f8686e73618) 0
+ primary-for QVariantAnimation (0x0x7f8686e735b0)
+ QObject (0x0x7f8686e7bf00) 0
+ primary-for QAbstractAnimation (0x0x7f8686e73618)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f8686ed11e0) 0 empty
+
+Vtable for QPropertyAnimation
+QPropertyAnimation::_ZTV18QPropertyAnimation: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QPropertyAnimation)
+16 (int (*)(...))QPropertyAnimation::metaObject
+24 (int (*)(...))QPropertyAnimation::qt_metacast
+32 (int (*)(...))QPropertyAnimation::qt_metacall
+40 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+48 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+56 (int (*)(...))QPropertyAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QVariantAnimation::duration
+120 (int (*)(...))QVariantAnimation::updateCurrentTime
+128 (int (*)(...))QPropertyAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+144 (int (*)(...))QPropertyAnimation::updateCurrentValue
+152 (int (*)(...))QVariantAnimation::interpolated
+
+Class QPropertyAnimation
+ size=16 align=8
+ base size=16 base align=8
+QPropertyAnimation (0x0x7f8686e736e8) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+ QVariantAnimation (0x0x7f8686e73750) 0
+ primary-for QPropertyAnimation (0x0x7f8686e736e8)
+ QAbstractAnimation (0x0x7f8686e737b8) 0
+ primary-for QVariantAnimation (0x0x7f8686e73750)
+ QObject (0x0x7f8686ed1180) 0
+ primary-for QAbstractAnimation (0x0x7f8686e737b8)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f8686f55900) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f8686c42d80) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f8686c42d20) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f8686a2f540) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f8686845480) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f8686845420) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f86868a4478) 0
+ QRandomGenerator (0x0x7f86868c2720) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f86868e1360) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f86868e15a0) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f86868e1a80) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f86868e1f60) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f86869a29c0) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f868662a1e0) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f868670b000) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f868679db40) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f868679de40) 0 empty
+
+Vtable for QSaveFile
+QSaveFile::_ZTV9QSaveFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSaveFile)
+16 (int (*)(...))QSaveFile::metaObject
+24 (int (*)(...))QSaveFile::qt_metacast
+32 (int (*)(...))QSaveFile::qt_metacall
+40 (int (*)(...))QSaveFile::~QSaveFile
+48 (int (*)(...))QSaveFile::~QSaveFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QSaveFile::open
+128 (int (*)(...))QSaveFile::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFileDevice::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QSaveFile::writeData
+248 (int (*)(...))QSaveFile::fileName
+256 (int (*)(...))QFileDevice::resize
+264 (int (*)(...))QFileDevice::permissions
+272 (int (*)(...))QFileDevice::setPermissions
+
+Class QSaveFile
+ size=16 align=8
+ base size=16 base align=8
+QSaveFile (0x0x7f86867586e8) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+ QFileDevice (0x0x7f8686758750) 0
+ primary-for QSaveFile (0x0x7f86867586e8)
+ QIODevice (0x0x7f86867642a0) 0
+ primary-for QFileDevice (0x0x7f8686758750)
+ QObject (0x0x7f868679dd80) 0
+ primary-for QIODevice (0x0x7f86867642a0)
+ QIODeviceBase (0x0x7f868679dde0) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f86863f9480) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f8686423c60) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f86864a8960) 0 empty
+
+Vtable for QSequentialAnimationGroup
+QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QSequentialAnimationGroup)
+16 (int (*)(...))QSequentialAnimationGroup::metaObject
+24 (int (*)(...))QSequentialAnimationGroup::qt_metacast
+32 (int (*)(...))QSequentialAnimationGroup::qt_metacall
+40 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+48 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+56 (int (*)(...))QSequentialAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSequentialAnimationGroup::duration
+120 (int (*)(...))QSequentialAnimationGroup::updateCurrentTime
+128 (int (*)(...))QSequentialAnimationGroup::updateState
+136 (int (*)(...))QSequentialAnimationGroup::updateDirection
+
+Class QSequentialAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QSequentialAnimationGroup (0x0x7f86864b92d8) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f86864b9340) 0
+ primary-for QSequentialAnimationGroup (0x0x7f86864b92d8)
+ QAbstractAnimation (0x0x7f86864b93a8) 0
+ primary-for QAnimationGroup (0x0x7f86864b9340)
+ QObject (0x0x7f86864a8900) 0
+ primary-for QAbstractAnimation (0x0x7f86864b93a8)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7f86864b94e0) 0
+ QIterator<QMetaSequence> (0x0x7f86864b9548) 0
+ QBaseIterator<QMetaSequence> (0x0x7f86864a8cc0) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7f86864b9618) 0
+ QConstIterator<QMetaSequence> (0x0x7f86864b9680) 0
+ QBaseIterator<QMetaSequence> (0x0x7f86864fa240) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7f86864b96e8) 0
+ QIterable<QMetaSequence> (0x0x7f86864fa780) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f86861dbd80) 0 empty
+
+Vtable for QSettings
+QSettings::_ZTV9QSettings: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSettings)
+16 (int (*)(...))QSettings::metaObject
+24 (int (*)(...))QSettings::qt_metacast
+32 (int (*)(...))QSettings::qt_metacall
+40 (int (*)(...))QSettings::~QSettings
+48 (int (*)(...))QSettings::~QSettings
+56 (int (*)(...))QSettings::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSettings
+ size=16 align=8
+ base size=16 base align=8
+QSettings (0x0x7f86861e8af8) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+ QObject (0x0x7f86861dbd20) 0
+ primary-for QSettings (0x0x7f86861e8af8)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f868621a1e0) 0 empty
+
+Vtable for QSharedMemory
+QSharedMemory::_ZTV13QSharedMemory: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSharedMemory)
+16 (int (*)(...))QSharedMemory::metaObject
+24 (int (*)(...))QSharedMemory::qt_metacast
+32 (int (*)(...))QSharedMemory::qt_metacall
+40 (int (*)(...))QSharedMemory::~QSharedMemory
+48 (int (*)(...))QSharedMemory::~QSharedMemory
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSharedMemory
+ size=16 align=8
+ base size=16 base align=8
+QSharedMemory (0x0x7f86861e8b60) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+ QObject (0x0x7f868621a180) 0
+ primary-for QSharedMemory (0x0x7f86861e8b60)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f868621a3c0) 0 empty
+
+Vtable for QSignalMapper
+QSignalMapper::_ZTV13QSignalMapper: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSignalMapper)
+16 (int (*)(...))QSignalMapper::metaObject
+24 (int (*)(...))QSignalMapper::qt_metacast
+32 (int (*)(...))QSignalMapper::qt_metacall
+40 (int (*)(...))QSignalMapper::~QSignalMapper
+48 (int (*)(...))QSignalMapper::~QSignalMapper
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSignalMapper
+ size=16 align=8
+ base size=16 base align=8
+QSignalMapper (0x0x7f86861e8bc8) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+ QObject (0x0x7f868621a360) 0
+ primary-for QSignalMapper (0x0x7f86861e8bc8)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f8687bce660) 0 empty
+
+Vtable for QSocketNotifier
+QSocketNotifier::_ZTV15QSocketNotifier: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSocketNotifier)
+16 (int (*)(...))QSocketNotifier::metaObject
+24 (int (*)(...))QSocketNotifier::qt_metacast
+32 (int (*)(...))QSocketNotifier::qt_metacall
+40 (int (*)(...))QSocketNotifier::~QSocketNotifier
+48 (int (*)(...))QSocketNotifier::~QSocketNotifier
+56 (int (*)(...))QSocketNotifier::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSocketNotifier
+ size=16 align=8
+ base size=16 base align=8
+QSocketNotifier (0x0x7f868f021c98) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+ QObject (0x0x7f8687bce600) 0
+ primary-for QSocketNotifier (0x0x7f868f021c98)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7f8687bce7e0) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f8687bceea0) 0 empty
+
+Vtable for QSortFilterProxyModel
+QSortFilterProxyModel::_ZTV21QSortFilterProxyModel: 59 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QSortFilterProxyModel)
+16 (int (*)(...))QSortFilterProxyModel::metaObject
+24 (int (*)(...))QSortFilterProxyModel::qt_metacast
+32 (int (*)(...))QSortFilterProxyModel::qt_metacall
+40 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+48 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSortFilterProxyModel::index
+120 (int (*)(...))QSortFilterProxyModel::parent
+128 (int (*)(...))QSortFilterProxyModel::sibling
+136 (int (*)(...))QSortFilterProxyModel::rowCount
+144 (int (*)(...))QSortFilterProxyModel::columnCount
+152 (int (*)(...))QSortFilterProxyModel::hasChildren
+160 (int (*)(...))QSortFilterProxyModel::data
+168 (int (*)(...))QSortFilterProxyModel::setData
+176 (int (*)(...))QSortFilterProxyModel::headerData
+184 (int (*)(...))QSortFilterProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QSortFilterProxyModel::mimeTypes
+224 (int (*)(...))QSortFilterProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QSortFilterProxyModel::dropMimeData
+248 (int (*)(...))QSortFilterProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QSortFilterProxyModel::insertRows
+272 (int (*)(...))QSortFilterProxyModel::insertColumns
+280 (int (*)(...))QSortFilterProxyModel::removeRows
+288 (int (*)(...))QSortFilterProxyModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QSortFilterProxyModel::fetchMore
+320 (int (*)(...))QSortFilterProxyModel::canFetchMore
+328 (int (*)(...))QSortFilterProxyModel::flags
+336 (int (*)(...))QSortFilterProxyModel::sort
+344 (int (*)(...))QSortFilterProxyModel::buddy
+352 (int (*)(...))QSortFilterProxyModel::match
+360 (int (*)(...))QSortFilterProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QSortFilterProxyModel::setSourceModel
+416 (int (*)(...))QSortFilterProxyModel::mapToSource
+424 (int (*)(...))QSortFilterProxyModel::mapFromSource
+432 (int (*)(...))QSortFilterProxyModel::mapSelectionToSource
+440 (int (*)(...))QSortFilterProxyModel::mapSelectionFromSource
+448 (int (*)(...))QSortFilterProxyModel::filterAcceptsRow
+456 (int (*)(...))QSortFilterProxyModel::filterAcceptsColumn
+464 (int (*)(...))QSortFilterProxyModel::lessThan
+
+Class QSortFilterProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QSortFilterProxyModel (0x0x7f868f021d00) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f868f021d68) 0
+ primary-for QSortFilterProxyModel (0x0x7f868f021d00)
+ QAbstractItemModel (0x0x7f868f021dd0) 0
+ primary-for QAbstractProxyModel (0x0x7f868f021d68)
+ QObject (0x0x7f8687bcee40) 0
+ primary-for QAbstractItemModel (0x0x7f868f021dd0)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f86872422a0) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f8687242ba0) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f868dc7c540) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f8688a46d80) 0 empty
+
+Vtable for QStringListModel
+QStringListModel::_ZTV16QStringListModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QStringListModel)
+16 (int (*)(...))QStringListModel::metaObject
+24 (int (*)(...))QStringListModel::qt_metacast
+32 (int (*)(...))QStringListModel::qt_metacall
+40 (int (*)(...))QStringListModel::~QStringListModel
+48 (int (*)(...))QStringListModel::~QStringListModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QStringListModel::sibling
+136 (int (*)(...))QStringListModel::rowCount
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))QStringListModel::data
+168 (int (*)(...))QStringListModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QStringListModel::itemData
+200 (int (*)(...))QStringListModel::setItemData
+208 (int (*)(...))QStringListModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QStringListModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStringListModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QStringListModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QStringListModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStringListModel::flags
+336 (int (*)(...))QStringListModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QStringListModel
+ size=40 align=8
+ base size=40 base align=8
+QStringListModel (0x0x7f868f238af8) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+ QAbstractListModel (0x0x7f868f238b60) 0
+ primary-for QStringListModel (0x0x7f868f238af8)
+ QAbstractItemModel (0x0x7f868f238c30) 0
+ primary-for QAbstractListModel (0x0x7f868f238b60)
+ QObject (0x0x7f8688a46d20) 0
+ primary-for QAbstractItemModel (0x0x7f868f238c30)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f8688a46e40) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f8688a46f60) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f8683e8f120) 0 empty
+
+Vtable for QTemporaryFile
+QTemporaryFile::_ZTV14QTemporaryFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QTemporaryFile)
+16 (int (*)(...))QTemporaryFile::metaObject
+24 (int (*)(...))QTemporaryFile::qt_metacast
+32 (int (*)(...))QTemporaryFile::qt_metacall
+40 (int (*)(...))QTemporaryFile::~QTemporaryFile
+48 (int (*)(...))QTemporaryFile::~QTemporaryFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QTemporaryFile::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFile::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QTemporaryFile::fileName
+256 (int (*)(...))QFile::resize
+264 (int (*)(...))QFile::permissions
+272 (int (*)(...))QFile::setPermissions
+
+Class QTemporaryFile
+ size=16 align=8
+ base size=16 base align=8
+QTemporaryFile (0x0x7f868f248000) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+ QFile (0x0x7f868f248068) 0
+ primary-for QTemporaryFile (0x0x7f868f248000)
+ QFileDevice (0x0x7f868f2480d0) 0
+ primary-for QFile (0x0x7f868f248068)
+ QIODevice (0x0x7f868f40df50) 0
+ primary-for QFileDevice (0x0x7f868f2480d0)
+ QObject (0x0x7f8683e8f060) 0
+ primary-for QIODevice (0x0x7f868f40df50)
+ QIODeviceBase (0x0x7f8683e8f0c0) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7f8683e8f360) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f8683e8f900) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f868a511000) 0 empty
+
+Vtable for QTimeLine
+QTimeLine::_ZTV9QTimeLine: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTimeLine)
+16 (int (*)(...))QTimeLine::metaObject
+24 (int (*)(...))QTimeLine::qt_metacast
+32 (int (*)(...))QTimeLine::qt_metacall
+40 (int (*)(...))QTimeLine::~QTimeLine
+48 (int (*)(...))QTimeLine::~QTimeLine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTimeLine::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTimeLine::valueForTime
+
+Class QTimeLine
+ size=16 align=8
+ base size=16 base align=8
+QTimeLine (0x0x7f868f248270) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+ QObject (0x0x7f8683e8ff60) 0
+ primary-for QTimeLine (0x0x7f868f248270)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f868a5111e0) 0 empty
+
+Vtable for QTimer
+QTimer::_ZTV6QTimer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QTimer)
+16 (int (*)(...))QTimer::metaObject
+24 (int (*)(...))QTimer::qt_metacast
+32 (int (*)(...))QTimer::qt_metacall
+40 (int (*)(...))QTimer::~QTimer
+48 (int (*)(...))QTimer::~QTimer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTimer::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTimer
+ size=16 align=8
+ base size=16 base align=8
+QTimer (0x0x7f868f2482d8) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+ QObject (0x0x7f868a511180) 0
+ primary-for QTimer (0x0x7f868f2482d8)
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7f86899c7000) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f868a511f60) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f8683fc4060) 0 empty
+
+Vtable for QTranslator
+QTranslator::_ZTV11QTranslator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTranslator)
+16 (int (*)(...))QTranslator::metaObject
+24 (int (*)(...))QTranslator::qt_metacast
+32 (int (*)(...))QTranslator::qt_metacall
+40 (int (*)(...))QTranslator::~QTranslator
+48 (int (*)(...))QTranslator::~QTranslator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTranslator::translate
+120 (int (*)(...))QTranslator::isEmpty
+
+Class QTranslator
+ size=16 align=8
+ base size=16 base align=8
+QTranslator (0x0x7f868f2d88f0) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+ QObject (0x0x7f8683fc4000) 0
+ primary-for QTranslator (0x0x7f868f2d88f0)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7f8683fc4240) 0 empty
+
+Vtable for QTransposeProxyModel
+QTransposeProxyModel::_ZTV20QTransposeProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTransposeProxyModel)
+16 (int (*)(...))QTransposeProxyModel::metaObject
+24 (int (*)(...))QTransposeProxyModel::qt_metacast
+32 (int (*)(...))QTransposeProxyModel::qt_metacall
+40 (int (*)(...))QTransposeProxyModel::~QTransposeProxyModel
+48 (int (*)(...))QTransposeProxyModel::~QTransposeProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTransposeProxyModel::index
+120 (int (*)(...))QTransposeProxyModel::parent
+128 (int (*)(...))QAbstractProxyModel::sibling
+136 (int (*)(...))QTransposeProxyModel::rowCount
+144 (int (*)(...))QTransposeProxyModel::columnCount
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QTransposeProxyModel::headerData
+184 (int (*)(...))QTransposeProxyModel::setHeaderData
+192 (int (*)(...))QTransposeProxyModel::itemData
+200 (int (*)(...))QTransposeProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QAbstractProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QTransposeProxyModel::insertRows
+272 (int (*)(...))QTransposeProxyModel::insertColumns
+280 (int (*)(...))QTransposeProxyModel::removeRows
+288 (int (*)(...))QTransposeProxyModel::removeColumns
+296 (int (*)(...))QTransposeProxyModel::moveRows
+304 (int (*)(...))QTransposeProxyModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QTransposeProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QTransposeProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QTransposeProxyModel::setSourceModel
+416 (int (*)(...))QTransposeProxyModel::mapToSource
+424 (int (*)(...))QTransposeProxyModel::mapFromSource
+432 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+440 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QTransposeProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QTransposeProxyModel (0x0x7f868f2d8958) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f868f2d89c0) 0
+ primary-for QTransposeProxyModel (0x0x7f868f2d8958)
+ QAbstractItemModel (0x0x7f868f2d8a90) 0
+ primary-for QAbstractProxyModel (0x0x7f868f2d89c0)
+ QObject (0x0x7f8683fc41e0) 0
+ primary-for QAbstractItemModel (0x0x7f868f2d8a90)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f8683fc43c0) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f8683b7cba0) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7f8683b7ccc0) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7f8683b8ab40) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7f868f0d4068) 0
+ QList<QXmlStreamAttribute> (0x0x7f868f0d40d0) 0
+ QListSpecialMethods<QXmlStreamAttribute> (0x0x7f868f0d4000) 0 empty
+ QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7f8683b95c00) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f8683bbc480) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7f8683bc5b40) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7f8683bcf1e0) 0
+
+Vtable for QXmlStreamEntityResolver
+QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QXmlStreamEntityResolver)
+16 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+24 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+32 (int (*)(...))QXmlStreamEntityResolver::resolveEntity
+40 (int (*)(...))QXmlStreamEntityResolver::resolveUndeclaredEntity
+
+Class QXmlStreamEntityResolver
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamEntityResolver (0x0x7f8683bd6960) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f8683bd69c0) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f8683bd6f60) 0
+
+Vtable for QPaintDevice
+QPaintDevice::_ZTV12QPaintDevice: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDevice
+ size=16 align=8
+ base size=10 base align=8
+QPaintDevice (0x0x7f8683bf2180) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7f8683bf2c00) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7f8683c24900) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7f8683c248a0) 0
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7f8683c52960) 0
+
+Class QPolygon
+ size=24 align=8
+ base size=24 base align=8
+QPolygon (0x0x7f868f11a0d0) 0
+ QList<QPoint> (0x0x7f868f11a138) 0
+ QListSpecialMethods<QPoint> (0x0x7f868f11a1a0) 0 empty
+ QListSpecialMethodsBase<QPoint> (0x0x7f8683c7a660) 0 empty
+
+Class QPolygonF
+ size=24 align=8
+ base size=24 base align=8
+QPolygonF (0x0x7f868f11f410) 0
+ QList<QPointF> (0x0x7f868f11f4e0) 0
+ QListSpecialMethods<QPointF> (0x0x7f868f11f548) 0 empty
+ QListSpecialMethodsBase<QPointF> (0x0x7f8683cba2a0) 0 empty
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7f8683cf4a80) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7f8683cf4a20) 0
+
+Class QTransform::Affine
+ size=8 align=8
+ base size=8 base align=8
+QTransform::Affine (0x0x7f8683d23f60) 0
+
+Class QTransform
+ size=80 align=8
+ base size=74 base align=8
+QTransform (0x0x7f8683d23f00) 0
+
+Vtable for QImage
+QImage::_ZTV6QImage: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QImage)
+16 (int (*)(...))QImage::~QImage
+24 (int (*)(...))QImage::~QImage
+32 (int (*)(...))QImage::devType
+40 (int (*)(...))QImage::paintEngine
+48 (int (*)(...))QImage::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QImage
+ size=24 align=8
+ base size=24 base align=8
+QImage (0x0x7f868f1374e0) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+ QPaintDevice (0x0x7f868394cb40) 0
+ primary-for QImage (0x0x7f868f1374e0)
+
+Vtable for QPixmap
+QPixmap::_ZTV7QPixmap: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QPixmap)
+16 (int (*)(...))QPixmap::~QPixmap
+24 (int (*)(...))QPixmap::~QPixmap
+32 (int (*)(...))QPixmap::devType
+40 (int (*)(...))QPixmap::paintEngine
+48 (int (*)(...))QPixmap::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPixmap
+ size=24 align=8
+ base size=24 base align=8
+QPixmap (0x0x7f868ee15068) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+ QPaintDevice (0x0x7f8683991300) 0
+ primary-for QPixmap (0x0x7f868ee15068)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7f86839bfde0) 0
+
+Vtable for QAbstractFileIconProvider
+QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAbstractFileIconProvider)
+16 (int (*)(...))QAbstractFileIconProvider::~QAbstractFileIconProvider
+24 (int (*)(...))QAbstractFileIconProvider::~QAbstractFileIconProvider
+32 (int (*)(...))QAbstractFileIconProvider::icon
+40 (int (*)(...))QAbstractFileIconProvider::icon
+48 (int (*)(...))QAbstractFileIconProvider::type
+56 (int (*)(...))QAbstractFileIconProvider::setOptions
+64 (int (*)(...))QAbstractFileIconProvider::options
+
+Class QAbstractFileIconProvider
+ size=16 align=8
+ base size=16 base align=8
+QAbstractFileIconProvider (0x0x7f86839ea120) 0
+ vptr=((& QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider) + 16)
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7f86839ea600) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7f8683a17360) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7f8683a372a0) 0
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7f8683a85a80) 0 empty
+
+Vtable for QScreen
+QScreen::_ZTV7QScreen: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QScreen)
+16 (int (*)(...))QScreen::metaObject
+24 (int (*)(...))QScreen::qt_metacast
+32 (int (*)(...))QScreen::qt_metacall
+40 (int (*)(...))QScreen::~QScreen
+48 (int (*)(...))QScreen::~QScreen
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QScreen
+ size=16 align=8
+ base size=16 base align=8
+QScreen (0x0x7f868ee46000) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+ QObject (0x0x7f8683a85a20) 0
+ primary-for QScreen (0x0x7f868ee46000)
+
+Class QInputDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDevice::QPrivateSignal (0x0x7f8683a85c60) 0 empty
+
+Vtable for QInputDevice
+QInputDevice::_ZTV12QInputDevice: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputDevice)
+16 (int (*)(...))QInputDevice::metaObject
+24 (int (*)(...))QInputDevice::qt_metacast
+32 (int (*)(...))QInputDevice::qt_metacall
+40 (int (*)(...))QInputDevice::~QInputDevice
+48 (int (*)(...))QInputDevice::~QInputDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QInputDevice
+ size=16 align=8
+ base size=16 base align=8
+QInputDevice (0x0x7f868ee46068) 0
+ vptr=((& QInputDevice::_ZTV12QInputDevice) + 16)
+ QObject (0x0x7f8683a85c00) 0
+ primary-for QInputDevice (0x0x7f868ee46068)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7f8683aa85a0) 0
+
+Class QPointingDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPointingDevice::QPrivateSignal (0x0x7f8683ac2f00) 0 empty
+
+Vtable for QPointingDevice
+QPointingDevice::_ZTV15QPointingDevice: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QPointingDevice)
+16 (int (*)(...))QPointingDevice::metaObject
+24 (int (*)(...))QPointingDevice::qt_metacast
+32 (int (*)(...))QPointingDevice::qt_metacall
+40 (int (*)(...))QPointingDevice::~QPointingDevice
+48 (int (*)(...))QPointingDevice::~QPointingDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPointingDevice
+ size=16 align=8
+ base size=16 base align=8
+QPointingDevice (0x0x7f868ee50068) 0
+ vptr=((& QPointingDevice::_ZTV15QPointingDevice) + 16)
+ QInputDevice (0x0x7f868ee500d0) 0
+ primary-for QPointingDevice (0x0x7f868ee50068)
+ QObject (0x0x7f8683ac2ea0) 0
+ primary-for QInputDevice (0x0x7f868ee500d0)
+
+Class QEventPoint
+ size=8 align=8
+ base size=8 base align=8
+QEventPoint (0x0x7f8683ad35a0) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7f8683b123c0) 0
+
+Vtable for QInputEvent
+QInputEvent::_ZTV11QInputEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QInputEvent)
+16 (int (*)(...))QInputEvent::~QInputEvent
+24 (int (*)(...))QInputEvent::~QInputEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QInputEvent
+ size=40 align=8
+ base size=40 base align=8
+QInputEvent (0x0x7f868ee5fa28) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+ QEvent (0x0x7f8683b39360) 0
+ primary-for QInputEvent (0x0x7f868ee5fa28)
+
+Vtable for QPointerEvent
+QPointerEvent::_ZTV13QPointerEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPointerEvent)
+16 (int (*)(...))QPointerEvent::~QPointerEvent
+24 (int (*)(...))QPointerEvent::~QPointerEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QPointerEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QPointerEvent::isBeginEvent
+64 (int (*)(...))QPointerEvent::isUpdateEvent
+72 (int (*)(...))QPointerEvent::isEndEvent
+
+Class QPointerEvent
+ size=64 align=8
+ base size=64 base align=8
+QPointerEvent (0x0x7f868ee5faf8) 0
+ vptr=((& QPointerEvent::_ZTV13QPointerEvent) + 16)
+ QInputEvent (0x0x7f868ee5fb60) 0
+ primary-for QPointerEvent (0x0x7f868ee5faf8)
+ QEvent (0x0x7f8683b39840) 0
+ primary-for QInputEvent (0x0x7f868ee5fb60)
+
+Vtable for QSinglePointEvent
+QSinglePointEvent::_ZTV17QSinglePointEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSinglePointEvent)
+16 (int (*)(...))QSinglePointEvent::~QSinglePointEvent
+24 (int (*)(...))QSinglePointEvent::~QSinglePointEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QSinglePointEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QSinglePointEvent
+ size=80 align=8
+ base size=80 base align=8
+QSinglePointEvent (0x0x7f868ee612d8) 0
+ vptr=((& QSinglePointEvent::_ZTV17QSinglePointEvent) + 16)
+ QPointerEvent (0x0x7f868ee61340) 0
+ primary-for QSinglePointEvent (0x0x7f868ee612d8)
+ QInputEvent (0x0x7f868ee613a8) 0
+ primary-for QPointerEvent (0x0x7f868ee61340)
+ QEvent (0x0x7f8683772720) 0
+ primary-for QInputEvent (0x0x7f868ee613a8)
+
+Vtable for QEnterEvent
+QEnterEvent::_ZTV11QEnterEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QEnterEvent)
+16 (int (*)(...))QEnterEvent::~QEnterEvent
+24 (int (*)(...))QEnterEvent::~QEnterEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QEnterEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QEnterEvent (0x0x7f868ee61410) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+ QSinglePointEvent (0x0x7f868ee61478) 0
+ primary-for QEnterEvent (0x0x7f868ee61410)
+ QPointerEvent (0x0x7f868ee614e0) 0
+ primary-for QSinglePointEvent (0x0x7f868ee61478)
+ QInputEvent (0x0x7f868ee61548) 0
+ primary-for QPointerEvent (0x0x7f868ee614e0)
+ QEvent (0x0x7f8683772c00) 0
+ primary-for QInputEvent (0x0x7f868ee61548)
+
+Vtable for QMouseEvent
+QMouseEvent::_ZTV11QMouseEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMouseEvent)
+16 (int (*)(...))QMouseEvent::~QMouseEvent
+24 (int (*)(...))QMouseEvent::~QMouseEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QMouseEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QMouseEvent
+ size=80 align=8
+ base size=80 base align=8
+QMouseEvent (0x0x7f868ee615b0) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+ QSinglePointEvent (0x0x7f868ee61680) 0
+ primary-for QMouseEvent (0x0x7f868ee615b0)
+ QPointerEvent (0x0x7f868ee616e8) 0
+ primary-for QSinglePointEvent (0x0x7f868ee61680)
+ QInputEvent (0x0x7f868ee61750) 0
+ primary-for QPointerEvent (0x0x7f868ee616e8)
+ QEvent (0x0x7f86837873c0) 0
+ primary-for QInputEvent (0x0x7f868ee61750)
+
+Vtable for QHoverEvent
+QHoverEvent::_ZTV11QHoverEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHoverEvent)
+16 (int (*)(...))QHoverEvent::~QHoverEvent
+24 (int (*)(...))QHoverEvent::~QHoverEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QHoverEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QHoverEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QHoverEvent
+ size=96 align=8
+ base size=96 base align=8
+QHoverEvent (0x0x7f868ee617b8) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+ QSinglePointEvent (0x0x7f868ee61820) 0
+ primary-for QHoverEvent (0x0x7f868ee617b8)
+ QPointerEvent (0x0x7f868ee61888) 0
+ primary-for QSinglePointEvent (0x0x7f868ee61820)
+ QInputEvent (0x0x7f868ee618f0) 0
+ primary-for QPointerEvent (0x0x7f868ee61888)
+ QEvent (0x0x7f8683787960) 0
+ primary-for QInputEvent (0x0x7f868ee618f0)
+
+Vtable for QWheelEvent
+QWheelEvent::_ZTV11QWheelEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWheelEvent)
+16 (int (*)(...))QWheelEvent::~QWheelEvent
+24 (int (*)(...))QWheelEvent::~QWheelEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QWheelEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QWheelEvent::isBeginEvent
+64 (int (*)(...))QWheelEvent::isUpdateEvent
+72 (int (*)(...))QWheelEvent::isEndEvent
+
+Class QWheelEvent
+ size=96 align=8
+ base size=96 base align=8
+QWheelEvent (0x0x7f868ee61958) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+ QSinglePointEvent (0x0x7f868ee619c0) 0
+ primary-for QWheelEvent (0x0x7f868ee61958)
+ QPointerEvent (0x0x7f868ee61a28) 0
+ primary-for QSinglePointEvent (0x0x7f868ee619c0)
+ QInputEvent (0x0x7f868ee61a90) 0
+ primary-for QPointerEvent (0x0x7f868ee61a28)
+ QEvent (0x0x7f8683787d80) 0
+ primary-for QInputEvent (0x0x7f868ee61a90)
+
+Vtable for QTabletEvent
+QTabletEvent::_ZTV12QTabletEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTabletEvent)
+16 (int (*)(...))QTabletEvent::~QTabletEvent
+24 (int (*)(...))QTabletEvent::~QTabletEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QTabletEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QTabletEvent
+ size=96 align=8
+ base size=96 base align=8
+QTabletEvent (0x0x7f868ee61af8) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+ QSinglePointEvent (0x0x7f868ee61b60) 0
+ primary-for QTabletEvent (0x0x7f868ee61af8)
+ QPointerEvent (0x0x7f868ee61bc8) 0
+ primary-for QSinglePointEvent (0x0x7f868ee61b60)
+ QInputEvent (0x0x7f868ee61c98) 0
+ primary-for QPointerEvent (0x0x7f868ee61bc8)
+ QEvent (0x0x7f86837a22a0) 0
+ primary-for QInputEvent (0x0x7f868ee61c98)
+
+Vtable for QNativeGestureEvent
+QNativeGestureEvent::_ZTV19QNativeGestureEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNativeGestureEvent)
+16 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+24 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QNativeGestureEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QNativeGestureEvent
+ size=112 align=8
+ base size=112 base align=8
+QNativeGestureEvent (0x0x7f868ee61d00) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+ QSinglePointEvent (0x0x7f868ee61d68) 0
+ primary-for QNativeGestureEvent (0x0x7f868ee61d00)
+ QPointerEvent (0x0x7f868ee61dd0) 0
+ primary-for QSinglePointEvent (0x0x7f868ee61d68)
+ QInputEvent (0x0x7f868ee61e38) 0
+ primary-for QPointerEvent (0x0x7f868ee61dd0)
+ QEvent (0x0x7f86837a2b40) 0
+ primary-for QInputEvent (0x0x7f868ee61e38)
+
+Vtable for QKeyEvent
+QKeyEvent::_ZTV9QKeyEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QKeyEvent)
+16 (int (*)(...))QKeyEvent::~QKeyEvent
+24 (int (*)(...))QKeyEvent::~QKeyEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QKeyEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QKeyEvent
+ size=88 align=8
+ base size=82 base align=8
+QKeyEvent (0x0x7f868ee61ea0) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+ QInputEvent (0x0x7f868ee61f08) 0
+ primary-for QKeyEvent (0x0x7f868ee61ea0)
+ QEvent (0x0x7f86837b9060) 0
+ primary-for QInputEvent (0x0x7f868ee61f08)
+
+Vtable for QFocusEvent
+QFocusEvent::_ZTV11QFocusEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusEvent)
+16 (int (*)(...))QFocusEvent::~QFocusEvent
+24 (int (*)(...))QFocusEvent::~QFocusEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QFocusEvent::clone
+
+Class QFocusEvent
+ size=24 align=8
+ base size=20 base align=8
+QFocusEvent (0x0x7f868ee65000) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+ QEvent (0x0x7f86837b9660) 0
+ primary-for QFocusEvent (0x0x7f868ee65000)
+
+Vtable for QPaintEvent
+QPaintEvent::_ZTV11QPaintEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPaintEvent)
+16 (int (*)(...))QPaintEvent::~QPaintEvent
+24 (int (*)(...))QPaintEvent::~QPaintEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QPaintEvent::clone
+
+Class QPaintEvent
+ size=48 align=8
+ base size=41 base align=8
+QPaintEvent (0x0x7f868ee65068) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+ QEvent (0x0x7f86837b99c0) 0
+ primary-for QPaintEvent (0x0x7f868ee65068)
+
+Vtable for QMoveEvent
+QMoveEvent::_ZTV10QMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QMoveEvent)
+16 (int (*)(...))QMoveEvent::~QMoveEvent
+24 (int (*)(...))QMoveEvent::~QMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QMoveEvent::clone
+
+Class QMoveEvent
+ size=32 align=8
+ base size=32 base align=8
+QMoveEvent (0x0x7f868ee650d0) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+ QEvent (0x0x7f86837b9cc0) 0
+ primary-for QMoveEvent (0x0x7f868ee650d0)
+
+Vtable for QExposeEvent
+QExposeEvent::_ZTV12QExposeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QExposeEvent)
+16 (int (*)(...))QExposeEvent::~QExposeEvent
+24 (int (*)(...))QExposeEvent::~QExposeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QExposeEvent::clone
+
+Class QExposeEvent
+ size=24 align=8
+ base size=24 base align=8
+QExposeEvent (0x0x7f868ee65138) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+ QEvent (0x0x7f86837d2060) 0
+ primary-for QExposeEvent (0x0x7f868ee65138)
+
+Vtable for QPlatformSurfaceEvent
+QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QPlatformSurfaceEvent)
+16 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+24 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QPlatformSurfaceEvent::clone
+
+Class QPlatformSurfaceEvent
+ size=24 align=8
+ base size=20 base align=8
+QPlatformSurfaceEvent (0x0x7f868ee651a0) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+ QEvent (0x0x7f86837d2300) 0
+ primary-for QPlatformSurfaceEvent (0x0x7f868ee651a0)
+
+Vtable for QResizeEvent
+QResizeEvent::_ZTV12QResizeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QResizeEvent)
+16 (int (*)(...))QResizeEvent::~QResizeEvent
+24 (int (*)(...))QResizeEvent::~QResizeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QResizeEvent::clone
+
+Class QResizeEvent
+ size=32 align=8
+ base size=32 base align=8
+QResizeEvent (0x0x7f868ee65208) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+ QEvent (0x0x7f86837d2600) 0
+ primary-for QResizeEvent (0x0x7f868ee65208)
+
+Vtable for QCloseEvent
+QCloseEvent::_ZTV11QCloseEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QCloseEvent)
+16 (int (*)(...))QCloseEvent::~QCloseEvent
+24 (int (*)(...))QCloseEvent::~QCloseEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QCloseEvent
+ size=16 align=8
+ base size=16 base align=8
+QCloseEvent (0x0x7f868ee65270) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+ QEvent (0x0x7f86837d2960) 0
+ primary-for QCloseEvent (0x0x7f868ee65270)
+
+Vtable for QIconDragEvent
+QIconDragEvent::_ZTV14QIconDragEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QIconDragEvent)
+16 (int (*)(...))QIconDragEvent::~QIconDragEvent
+24 (int (*)(...))QIconDragEvent::~QIconDragEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QIconDragEvent
+ size=16 align=8
+ base size=16 base align=8
+QIconDragEvent (0x0x7f868ee652d8) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+ QEvent (0x0x7f86837d29c0) 0
+ primary-for QIconDragEvent (0x0x7f868ee652d8)
+
+Vtable for QShowEvent
+QShowEvent::_ZTV10QShowEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QShowEvent)
+16 (int (*)(...))QShowEvent::~QShowEvent
+24 (int (*)(...))QShowEvent::~QShowEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QShowEvent
+ size=16 align=8
+ base size=16 base align=8
+QShowEvent (0x0x7f868ee653a8) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+ QEvent (0x0x7f86837d2a20) 0
+ primary-for QShowEvent (0x0x7f868ee653a8)
+
+Vtable for QHideEvent
+QHideEvent::_ZTV10QHideEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHideEvent)
+16 (int (*)(...))QHideEvent::~QHideEvent
+24 (int (*)(...))QHideEvent::~QHideEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QHideEvent
+ size=16 align=8
+ base size=16 base align=8
+QHideEvent (0x0x7f868ee65410) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+ QEvent (0x0x7f86837d2a80) 0
+ primary-for QHideEvent (0x0x7f868ee65410)
+
+Vtable for QContextMenuEvent
+QContextMenuEvent::_ZTV17QContextMenuEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QContextMenuEvent)
+16 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+24 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QContextMenuEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QContextMenuEvent
+ size=64 align=8
+ base size=57 base align=8
+QContextMenuEvent (0x0x7f868ee65478) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+ QInputEvent (0x0x7f868ee654e0) 0
+ primary-for QContextMenuEvent (0x0x7f868ee65478)
+ QEvent (0x0x7f86837d2ae0) 0
+ primary-for QInputEvent (0x0x7f868ee654e0)
+
+Class QInputMethodEvent::Attribute
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodEvent::Attribute (0x0x7f86837f80c0) 0
+
+Vtable for QInputMethodEvent
+QInputMethodEvent::_ZTV17QInputMethodEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QInputMethodEvent)
+16 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+24 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputMethodEvent::clone
+
+Class QInputMethodEvent
+ size=96 align=8
+ base size=96 base align=8
+QInputMethodEvent (0x0x7f868ee65548) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+ QEvent (0x0x7f86837f8060) 0
+ primary-for QInputMethodEvent (0x0x7f868ee65548)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=40 align=8
+ base size=40 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7f868383c8a0) 0
+
+Vtable for QInputMethodQueryEvent
+QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QInputMethodQueryEvent)
+16 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+24 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputMethodQueryEvent::clone
+
+Class QInputMethodQueryEvent
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodQueryEvent (0x0x7f868ee6b820) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+ QEvent (0x0x7f868383c840) 0
+ primary-for QInputMethodQueryEvent (0x0x7f868ee6b820)
+
+Vtable for QDropEvent
+QDropEvent::_ZTV10QDropEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDropEvent)
+16 (int (*)(...))QDropEvent::~QDropEvent
+24 (int (*)(...))QDropEvent::~QDropEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDropEvent::clone
+
+Class QDropEvent
+ size=64 align=8
+ base size=64 base align=8
+QDropEvent (0x0x7f868ee6faf8) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+ QEvent (0x0x7f868387c9c0) 0
+ primary-for QDropEvent (0x0x7f868ee6faf8)
+
+Vtable for QDragMoveEvent
+QDragMoveEvent::_ZTV14QDragMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDragMoveEvent)
+16 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+24 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDragMoveEvent::clone
+
+Class QDragMoveEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragMoveEvent (0x0x7f868ee6fb60) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+ QDropEvent (0x0x7f868ee6fbc8) 0
+ primary-for QDragMoveEvent (0x0x7f868ee6fb60)
+ QEvent (0x0x7f868388f120) 0
+ primary-for QDropEvent (0x0x7f868ee6fbc8)
+
+Vtable for QDragEnterEvent
+QDragEnterEvent::_ZTV15QDragEnterEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragEnterEvent)
+16 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+24 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDragMoveEvent::clone
+
+Class QDragEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragEnterEvent (0x0x7f868ee6fc30) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+ QDragMoveEvent (0x0x7f868ee6fc98) 0
+ primary-for QDragEnterEvent (0x0x7f868ee6fc30)
+ QDropEvent (0x0x7f868ee6fd00) 0
+ primary-for QDragMoveEvent (0x0x7f868ee6fc98)
+ QEvent (0x0x7f868388f5a0) 0
+ primary-for QDropEvent (0x0x7f868ee6fd00)
+
+Vtable for QDragLeaveEvent
+QDragLeaveEvent::_ZTV15QDragLeaveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragLeaveEvent)
+16 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+24 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QDragLeaveEvent
+ size=16 align=8
+ base size=16 base align=8
+QDragLeaveEvent (0x0x7f868ee6fd68) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+ QEvent (0x0x7f868388f600) 0
+ primary-for QDragLeaveEvent (0x0x7f868ee6fd68)
+
+Vtable for QHelpEvent
+QHelpEvent::_ZTV10QHelpEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHelpEvent)
+16 (int (*)(...))QHelpEvent::~QHelpEvent
+24 (int (*)(...))QHelpEvent::~QHelpEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QHelpEvent::clone
+
+Class QHelpEvent
+ size=32 align=8
+ base size=32 base align=8
+QHelpEvent (0x0x7f868ee6fdd0) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+ QEvent (0x0x7f868388f660) 0
+ primary-for QHelpEvent (0x0x7f868ee6fdd0)
+
+Vtable for QStatusTipEvent
+QStatusTipEvent::_ZTV15QStatusTipEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QStatusTipEvent)
+16 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+24 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QStatusTipEvent::clone
+
+Class QStatusTipEvent
+ size=40 align=8
+ base size=40 base align=8
+QStatusTipEvent (0x0x7f868ee6fe38) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+ QEvent (0x0x7f868388fb40) 0
+ primary-for QStatusTipEvent (0x0x7f868ee6fe38)
+
+Vtable for QWhatsThisClickedEvent
+QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QWhatsThisClickedEvent)
+16 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+24 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QWhatsThisClickedEvent::clone
+
+Class QWhatsThisClickedEvent
+ size=40 align=8
+ base size=40 base align=8
+QWhatsThisClickedEvent (0x0x7f868ee6ff08) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+ QEvent (0x0x7f868388fde0) 0
+ primary-for QWhatsThisClickedEvent (0x0x7f868ee6ff08)
+
+Vtable for QActionEvent
+QActionEvent::_ZTV12QActionEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionEvent)
+16 (int (*)(...))QActionEvent::~QActionEvent
+24 (int (*)(...))QActionEvent::~QActionEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QActionEvent::clone
+
+Class QActionEvent
+ size=32 align=8
+ base size=32 base align=8
+QActionEvent (0x0x7f868ee6ff70) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+ QEvent (0x0x7f86838ad0c0) 0
+ primary-for QActionEvent (0x0x7f868ee6ff70)
+
+Vtable for QFileOpenEvent
+QFileOpenEvent::_ZTV14QFileOpenEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QFileOpenEvent)
+16 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+24 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QFileOpenEvent::clone
+
+Class QFileOpenEvent
+ size=48 align=8
+ base size=48 base align=8
+QFileOpenEvent (0x0x7f868ee72000) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+ QEvent (0x0x7f86838ad420) 0
+ primary-for QFileOpenEvent (0x0x7f868ee72000)
+
+Vtable for QToolBarChangeEvent
+QToolBarChangeEvent::_ZTV19QToolBarChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QToolBarChangeEvent)
+16 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+24 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QToolBarChangeEvent::clone
+
+Class QToolBarChangeEvent
+ size=24 align=8
+ base size=17 base align=8
+QToolBarChangeEvent (0x0x7f868ee72068) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+ QEvent (0x0x7f86838ad720) 0
+ primary-for QToolBarChangeEvent (0x0x7f868ee72068)
+
+Vtable for QShortcutEvent
+QShortcutEvent::_ZTV14QShortcutEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QShortcutEvent)
+16 (int (*)(...))QShortcutEvent::~QShortcutEvent
+24 (int (*)(...))QShortcutEvent::~QShortcutEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QShortcutEvent::clone
+
+Class QShortcutEvent
+ size=32 align=8
+ base size=29 base align=8
+QShortcutEvent (0x0x7f868ee720d0) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+ QEvent (0x0x7f86838ada20) 0
+ primary-for QShortcutEvent (0x0x7f868ee720d0)
+
+Vtable for QWindowStateChangeEvent
+QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QWindowStateChangeEvent)
+16 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+24 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QWindowStateChangeEvent::clone
+
+Class QWindowStateChangeEvent
+ size=24 align=8
+ base size=21 base align=8
+QWindowStateChangeEvent (0x0x7f868ee72138) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+ QEvent (0x0x7f86838add80) 0
+ primary-for QWindowStateChangeEvent (0x0x7f868ee72138)
+
+Vtable for QTouchEvent
+QTouchEvent::_ZTV11QTouchEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTouchEvent)
+16 (int (*)(...))QTouchEvent::~QTouchEvent
+24 (int (*)(...))QTouchEvent::~QTouchEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QTouchEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QTouchEvent::isBeginEvent
+64 (int (*)(...))QTouchEvent::isUpdateEvent
+72 (int (*)(...))QTouchEvent::isEndEvent
+
+Class QTouchEvent
+ size=80 align=8
+ base size=79 base align=8
+QTouchEvent (0x0x7f868ee721a0) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+ QPointerEvent (0x0x7f868ee72208) 0
+ primary-for QTouchEvent (0x0x7f868ee721a0)
+ QInputEvent (0x0x7f868ee72270) 0
+ primary-for QPointerEvent (0x0x7f868ee72208)
+ QEvent (0x0x7f86838c70c0) 0
+ primary-for QInputEvent (0x0x7f868ee72270)
+
+Vtable for QScrollPrepareEvent
+QScrollPrepareEvent::_ZTV19QScrollPrepareEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollPrepareEvent)
+16 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+24 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScrollPrepareEvent::clone
+
+Class QScrollPrepareEvent
+ size=96 align=8
+ base size=96 base align=8
+QScrollPrepareEvent (0x0x7f868ee722d8) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+ QEvent (0x0x7f86838c7420) 0
+ primary-for QScrollPrepareEvent (0x0x7f868ee722d8)
+
+Vtable for QScrollEvent
+QScrollEvent::_ZTV12QScrollEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QScrollEvent)
+16 (int (*)(...))QScrollEvent::~QScrollEvent
+24 (int (*)(...))QScrollEvent::~QScrollEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScrollEvent::clone
+
+Class QScrollEvent
+ size=56 align=8
+ base size=52 base align=8
+QScrollEvent (0x0x7f868ee72340) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+ QEvent (0x0x7f86838c7840) 0
+ primary-for QScrollEvent (0x0x7f868ee72340)
+
+Vtable for QScreenOrientationChangeEvent
+QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QScreenOrientationChangeEvent)
+16 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+24 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScreenOrientationChangeEvent::clone
+
+Class QScreenOrientationChangeEvent
+ size=32 align=8
+ base size=28 base align=8
+QScreenOrientationChangeEvent (0x0x7f868ee72410) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+ QEvent (0x0x7f86838c7c00) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7f868ee72410)
+
+Vtable for QApplicationStateChangeEvent
+QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QApplicationStateChangeEvent)
+16 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+24 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QApplicationStateChangeEvent::clone
+
+Class QApplicationStateChangeEvent
+ size=24 align=8
+ base size=20 base align=8
+QApplicationStateChangeEvent (0x0x7f868ee72478) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+ QEvent (0x0x7f86838c7f60) 0
+ primary-for QApplicationStateChangeEvent (0x0x7f868ee72478)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7f86838e82a0) 0
+
+Class QFontDatabase
+ size=1 align=1
+ base size=0 base align=1
+QFontDatabase (0x0x7f8683926300) 0 empty
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7f86839264e0) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7f868356c3c0) 0
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7f8683592a80) 0
+
+Class QBrushData
+ size=104 align=8
+ base size=104 base align=8
+QBrushData (0x0x7f86835bb600) 0
+
+Class QGradient::QGradientData
+ size=48 align=8
+ base size=48 base align=8
+QGradient::QGradientData (0x0x7f86835bb840) 0
+
+Class QGradient
+ size=88 align=8
+ base size=88 base align=8
+QGradient (0x0x7f86835bb7e0) 0
+
+Class QLinearGradient
+ size=88 align=8
+ base size=88 base align=8
+QLinearGradient (0x0x7f8689221c98) 0
+ QGradient (0x0x7f86835d3720) 0
+
+Class QRadialGradient
+ size=88 align=8
+ base size=88 base align=8
+QRadialGradient (0x0x7f8689221c30) 0
+ QGradient (0x0x7f86835d3840) 0
+
+Class QConicalGradient
+ size=88 align=8
+ base size=88 base align=8
+QConicalGradient (0x0x7f86892331a0) 0
+ QGradient (0x0x7f86835d3960) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7f86835d3a20) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7f8683629a80) 0
+
+Class QTextOption
+ size=24 align=8
+ base size=24 base align=8
+QTextOption (0x0x7f8683629a20) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7f868363e7e0) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7f86836624e0) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7f8686493d00) 0
+ QTextFormat (0x0x7f86836c4b40) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7f8683705820) 0
+ QTextFormat (0x0x7f868370a060) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7f8683726478) 0
+ QTextFormat (0x0x7f86837275a0) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7f868373f068) 0
+ QTextCharFormat (0x0x7f868373f0d0) 0
+ QTextFormat (0x0x7f868373d480) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7f868334ed00) 0
+ QTextFormat (0x0x7f8683354300) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7f868336d958) 0
+ QTextFrameFormat (0x0x7f868336d9c0) 0
+ QTextFormat (0x0x7f868336f720) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7f868338c618) 0
+ QTextCharFormat (0x0x7f868338c680) 0
+ QTextFormat (0x0x7f868338b9c0) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7f86833aaf00) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7f86833ed5a0) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7f86833ed9c0) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7f86833ed960) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7f8683439a80) 0
+
+Vtable for QAbstractUndoItem
+QAbstractUndoItem::_ZTV17QAbstractUndoItem: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAbstractUndoItem)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractUndoItem
+ size=8 align=8
+ base size=8 base align=8
+QAbstractUndoItem (0x0x7f8683439f00) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7f868344d1e0) 0 empty
+
+Vtable for QTextDocument
+QTextDocument::_ZTV13QTextDocument: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QTextDocument)
+16 (int (*)(...))QTextDocument::metaObject
+24 (int (*)(...))QTextDocument::qt_metacast
+32 (int (*)(...))QTextDocument::qt_metacall
+40 (int (*)(...))QTextDocument::~QTextDocument
+48 (int (*)(...))QTextDocument::~QTextDocument
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextDocument::clear
+120 (int (*)(...))QTextDocument::createObject
+128 (int (*)(...))QTextDocument::loadResource
+
+Class QTextDocument
+ size=16 align=8
+ base size=16 base align=8
+QTextDocument (0x0x7f8683442270) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+ QObject (0x0x7f868344d180) 0
+ primary-for QTextDocument (0x0x7f8683442270)
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7f868344d9c0) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7f86834c2d20) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7f86834c2d80) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=80 align=8
+ base size=80 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7f86834c2de0) 0
+
+Vtable for QAbstractTextDocumentLayout
+QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAbstractTextDocumentLayout)
+16 (int (*)(...))QAbstractTextDocumentLayout::metaObject
+24 (int (*)(...))QAbstractTextDocumentLayout::qt_metacast
+32 (int (*)(...))QAbstractTextDocumentLayout::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractTextDocumentLayout::resizeInlineObject
+176 (int (*)(...))QAbstractTextDocumentLayout::positionInlineObject
+184 (int (*)(...))QAbstractTextDocumentLayout::drawInlineObject
+
+Class QAbstractTextDocumentLayout
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTextDocumentLayout (0x0x7f86834c45b0) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+ QObject (0x0x7f86834c2cc0) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f86834c45b0)
+
+Vtable for QTextObjectInterface
+QTextObjectInterface::_ZTV20QTextObjectInterface: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextObjectInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QTextObjectInterface
+ size=8 align=8
+ base size=8 base align=8
+QTextObjectInterface (0x0x7f868352b3c0) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7f868352b600) 0
+
+Vtable for QAccessible::ActivationObserver
+QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN11QAccessible18ActivationObserverE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessible::ActivationObserver
+ size=8 align=8
+ base size=8 base align=8
+QAccessible::ActivationObserver (0x0x7f868352b660) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7f868352b5a0) 0 empty
+
+Vtable for QAccessibleInterface
+QAccessibleInterface::_ZTV20QAccessibleInterface: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAccessibleInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QAccessibleInterface::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleInterface::focusChild
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleInterface (0x0x7f868352bea0) 0 nearly-empty
+ vptr=((& QAccessibleInterface::_ZTV20QAccessibleInterface) + 16)
+
+Vtable for QAccessibleTextInterface
+QAccessibleTextInterface::_ZTV24QAccessibleTextInterface: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAccessibleTextInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))QAccessibleTextInterface::textBeforeOffset
+104 (int (*)(...))QAccessibleTextInterface::textAfterOffset
+112 (int (*)(...))QAccessibleTextInterface::textAtOffset
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTextInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTextInterface (0x0x7f868315b240) 0 nearly-empty
+ vptr=((& QAccessibleTextInterface::_ZTV24QAccessibleTextInterface) + 16)
+
+Vtable for QAccessibleEditableTextInterface
+QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleEditableTextInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleEditableTextInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleEditableTextInterface (0x0x7f868315b2a0) 0 nearly-empty
+ vptr=((& QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface) + 16)
+
+Vtable for QAccessibleValueInterface
+QAccessibleValueInterface::_ZTV25QAccessibleValueInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleValueInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleValueInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleValueInterface (0x0x7f868315b300) 0 nearly-empty
+ vptr=((& QAccessibleValueInterface::_ZTV25QAccessibleValueInterface) + 16)
+
+Vtable for QAccessibleTableCellInterface
+QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTableCellInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTableCellInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTableCellInterface (0x0x7f868315b360) 0 nearly-empty
+ vptr=((& QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface) + 16)
+
+Vtable for QAccessibleTableInterface
+QAccessibleTableInterface::_ZTV25QAccessibleTableInterface: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleTableInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTableInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTableInterface (0x0x7f868315b3c0) 0 nearly-empty
+ vptr=((& QAccessibleTableInterface::_ZTV25QAccessibleTableInterface) + 16)
+
+Vtable for QAccessibleActionInterface
+QAccessibleActionInterface::_ZTV26QAccessibleActionInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleActionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QAccessibleActionInterface::localizedActionName
+48 (int (*)(...))QAccessibleActionInterface::localizedActionDescription
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleActionInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleActionInterface (0x0x7f868315b420) 0 nearly-empty
+ vptr=((& QAccessibleActionInterface::_ZTV26QAccessibleActionInterface) + 16)
+
+Vtable for QAccessibleImageInterface
+QAccessibleImageInterface::_ZTV25QAccessibleImageInterface: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleImageInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleImageInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleImageInterface (0x0x7f868315b4e0) 0 nearly-empty
+ vptr=((& QAccessibleImageInterface::_ZTV25QAccessibleImageInterface) + 16)
+
+Vtable for QAccessibleEvent
+QAccessibleEvent::_ZTV16QAccessibleEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAccessibleEvent)
+16 (int (*)(...))QAccessibleEvent::~QAccessibleEvent
+24 (int (*)(...))QAccessibleEvent::~QAccessibleEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleEvent
+ size=32 align=8
+ base size=28 base align=8
+QAccessibleEvent (0x0x7f868315b540) 0
+ vptr=((& QAccessibleEvent::_ZTV16QAccessibleEvent) + 16)
+
+Vtable for QAccessibleStateChangeEvent
+QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleStateChangeEvent)
+16 (int (*)(...))QAccessibleStateChangeEvent::~QAccessibleStateChangeEvent
+24 (int (*)(...))QAccessibleStateChangeEvent::~QAccessibleStateChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleStateChangeEvent
+ size=40 align=8
+ base size=40 base align=8
+QAccessibleStateChangeEvent (0x0x7f8683529a90) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f868315ba80) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7f8683529a90)
+
+Vtable for QAccessibleTextCursorEvent
+QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextCursorEvent)
+16 (int (*)(...))QAccessibleTextCursorEvent::~QAccessibleTextCursorEvent
+24 (int (*)(...))QAccessibleTextCursorEvent::~QAccessibleTextCursorEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextCursorEvent
+ size=32 align=8
+ base size=32 base align=8
+QAccessibleTextCursorEvent (0x0x7f8683529af8) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+ QAccessibleEvent (0x0x7f868315be40) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f8683529af8)
+
+Vtable for QAccessibleTextSelectionEvent
+QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTextSelectionEvent)
+16 (int (*)(...))QAccessibleTextSelectionEvent::~QAccessibleTextSelectionEvent
+24 (int (*)(...))QAccessibleTextSelectionEvent::~QAccessibleTextSelectionEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextSelectionEvent
+ size=40 align=8
+ base size=40 base align=8
+QAccessibleTextSelectionEvent (0x0x7f8683529b60) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f8683529bc8) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7f8683529b60)
+ QAccessibleEvent (0x0x7f868317d2a0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f8683529bc8)
+
+Vtable for QAccessibleTextInsertEvent
+QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextInsertEvent)
+16 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+24 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextInsertEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleTextInsertEvent (0x0x7f8683529c30) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f8683529c98) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7f8683529c30)
+ QAccessibleEvent (0x0x7f868317d720) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f8683529c98)
+
+Vtable for QAccessibleTextRemoveEvent
+QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextRemoveEvent)
+16 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+24 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextRemoveEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleTextRemoveEvent (0x0x7f8683529d00) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f8683529d68) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7f8683529d00)
+ QAccessibleEvent (0x0x7f868317db40) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f8683529d68)
+
+Vtable for QAccessibleTextUpdateEvent
+QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextUpdateEvent)
+16 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+24 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextUpdateEvent
+ size=88 align=8
+ base size=88 base align=8
+QAccessibleTextUpdateEvent (0x0x7f8683529dd0) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f8683529e38) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7f8683529dd0)
+ QAccessibleEvent (0x0x7f868317df60) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f8683529e38)
+
+Vtable for QAccessibleValueChangeEvent
+QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleValueChangeEvent)
+16 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+24 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleValueChangeEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleValueChangeEvent (0x0x7f8683529ea0) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f8683192420) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7f8683529ea0)
+
+Vtable for QAccessibleTableModelChangeEvent
+QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleTableModelChangeEvent)
+16 (int (*)(...))QAccessibleTableModelChangeEvent::~QAccessibleTableModelChangeEvent
+24 (int (*)(...))QAccessibleTableModelChangeEvent::~QAccessibleTableModelChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTableModelChangeEvent
+ size=48 align=8
+ base size=48 base align=8
+QAccessibleTableModelChangeEvent (0x0x7f8683529f08) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f8683192840) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7f8683529f08)
+
+Vtable for QAccessibleBridge
+QAccessibleBridge::_ZTV17QAccessibleBridge: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleBridge)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridge
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleBridge (0x0x7f86831a4120) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7f86831a43c0) 0 empty
+
+Vtable for QAccessibleBridgePlugin
+QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QAccessibleBridgePlugin)
+16 (int (*)(...))QAccessibleBridgePlugin::metaObject
+24 (int (*)(...))QAccessibleBridgePlugin::qt_metacast
+32 (int (*)(...))QAccessibleBridgePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridgePlugin
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleBridgePlugin (0x0x7f8683529f70) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+ QObject (0x0x7f86831a4360) 0
+ primary-for QAccessibleBridgePlugin (0x0x7f8683529f70)
+
+Vtable for QAccessibleObject
+QAccessibleObject::_ZTV17QAccessibleObject: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleObject)
+16 0
+24 0
+32 (int (*)(...))QAccessibleObject::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleInterface::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleInterface::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleObject::rect
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleObject
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleObject (0x0x7f86831ab000) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+ QAccessibleInterface (0x0x7f86831a4480) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f86831ab000)
+
+Vtable for QAccessibleApplication
+QAccessibleApplication::_ZTV22QAccessibleApplication: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QAccessibleApplication)
+16 (int (*)(...))QAccessibleApplication::~QAccessibleApplication
+24 (int (*)(...))QAccessibleApplication::~QAccessibleApplication
+32 (int (*)(...))QAccessibleObject::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleApplication::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleApplication::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))QAccessibleApplication::parent
+88 (int (*)(...))QAccessibleApplication::child
+96 (int (*)(...))QAccessibleApplication::childCount
+104 (int (*)(...))QAccessibleApplication::indexOfChild
+112 (int (*)(...))QAccessibleApplication::text
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleObject::rect
+136 (int (*)(...))QAccessibleApplication::role
+144 (int (*)(...))QAccessibleApplication::state
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleApplication
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleApplication (0x0x7f86831ab068) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+ QAccessibleObject (0x0x7f86831ab0d0) 0
+ primary-for QAccessibleApplication (0x0x7f86831ab068)
+ QAccessibleInterface (0x0x7f86831a44e0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f86831ab0d0)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7f86831a45a0) 0 empty
+
+Vtable for QAccessiblePlugin
+QAccessiblePlugin::_ZTV17QAccessiblePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessiblePlugin)
+16 (int (*)(...))QAccessiblePlugin::metaObject
+24 (int (*)(...))QAccessiblePlugin::qt_metacast
+32 (int (*)(...))QAccessiblePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessiblePlugin
+ size=16 align=8
+ base size=16 base align=8
+QAccessiblePlugin (0x0x7f86831ab138) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+ QObject (0x0x7f86831a4540) 0
+ primary-for QAccessiblePlugin (0x0x7f86831ab138)
+
+Class QAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAction::QPrivateSignal (0x0x7f86831a46c0) 0 empty
+
+Vtable for QAction
+QAction::_ZTV7QAction: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QAction)
+16 (int (*)(...))QAction::metaObject
+24 (int (*)(...))QAction::qt_metacast
+32 (int (*)(...))QAction::qt_metacall
+40 (int (*)(...))QAction::~QAction
+48 (int (*)(...))QAction::~QAction
+56 (int (*)(...))QAction::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QAction
+ size=16 align=8
+ base size=16 base align=8
+QAction (0x0x7f86831ab1a0) 0
+ vptr=((& QAction::_ZTV7QAction) + 16)
+ QObject (0x0x7f86831a4660) 0
+ primary-for QAction (0x0x7f86831ab1a0)
+
+Class QActionGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QActionGroup::QPrivateSignal (0x0x7f86831cf000) 0 empty
+
+Vtable for QActionGroup
+QActionGroup::_ZTV12QActionGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionGroup)
+16 (int (*)(...))QActionGroup::metaObject
+24 (int (*)(...))QActionGroup::qt_metacast
+32 (int (*)(...))QActionGroup::qt_metacall
+40 (int (*)(...))QActionGroup::~QActionGroup
+48 (int (*)(...))QActionGroup::~QActionGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QActionGroup
+ size=16 align=8
+ base size=16 base align=8
+QActionGroup (0x0x7f86831ab208) 0
+ vptr=((& QActionGroup::_ZTV12QActionGroup) + 16)
+ QObject (0x0x7f86831a4f60) 0
+ primary-for QActionGroup (0x0x7f86831ab208)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7f86831cf2a0) 0
+
+Vtable for QSurface
+QSurface::_ZTV8QSurface: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSurface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+
+Class QSurface
+ size=24 align=8
+ base size=24 base align=8
+QSurface (0x0x7f86831cfae0) 0
+ vptr=((& QSurface::_ZTV8QSurface) + 16)
+
+Vtable for QBitmap
+QBitmap::_ZTV7QBitmap: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QBitmap)
+16 (int (*)(...))QBitmap::~QBitmap
+24 (int (*)(...))QBitmap::~QBitmap
+32 (int (*)(...))QPixmap::devType
+40 (int (*)(...))QPixmap::paintEngine
+48 (int (*)(...))QPixmap::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QBitmap
+ size=24 align=8
+ base size=24 base align=8
+QBitmap (0x0x7f86831ab3a8) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+ QPixmap (0x0x7f86831ab410) 0
+ primary-for QBitmap (0x0x7f86831ab3a8)
+ QPaintDevice (0x0x7f86831cfde0) 0
+ primary-for QPixmap (0x0x7f86831ab410)
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7f868320f720) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7f8683251900) 0 empty
+
+Vtable for QWindow
+QWindow::_ZTV7QWindow: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWindow)
+16 (int (*)(...))QWindow::metaObject
+24 (int (*)(...))QWindow::qt_metacast
+32 (int (*)(...))QWindow::qt_metacall
+40 (int (*)(...))QWindow::~QWindow
+48 (int (*)(...))QWindow::~QWindow
+56 (int (*)(...))QWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI7QWindow)
+328 (int (*)(...))QWindow::_ZThn16_N7QWindowD1Ev
+336 (int (*)(...))QWindow::_ZThn16_N7QWindowD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QWindow
+ size=40 align=8
+ base size=40 base align=8
+QWindow (0x0x7f86831dbee0) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+ QObject (0x0x7f8683251840) 0
+ primary-for QWindow (0x0x7f86831dbee0)
+ QSurface (0x0x7f86832518a0) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 328)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7f8683289180) 0
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7f86832892a0) 0 empty
+
+Vtable for QClipboard
+QClipboard::_ZTV10QClipboard: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QClipboard)
+16 (int (*)(...))QClipboard::metaObject
+24 (int (*)(...))QClipboard::qt_metacast
+32 (int (*)(...))QClipboard::qt_metacall
+40 (int (*)(...))QClipboard::~QClipboard
+48 (int (*)(...))QClipboard::~QClipboard
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QClipboard
+ size=16 align=8
+ base size=16 base align=8
+QClipboard (0x0x7f8683252a90) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+ QObject (0x0x7f8683289240) 0
+ primary-for QClipboard (0x0x7f8683252a90)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7f86832893c0) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7f86832e3360) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7f868333a000) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7f868333a0c0) 0 empty
+
+Vtable for QDrag
+QDrag::_ZTV5QDrag: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDrag)
+16 (int (*)(...))QDrag::metaObject
+24 (int (*)(...))QDrag::qt_metacast
+32 (int (*)(...))QDrag::qt_metacall
+40 (int (*)(...))QDrag::~QDrag
+48 (int (*)(...))QDrag::~QDrag
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDrag
+ size=16 align=8
+ base size=16 base align=8
+QDrag (0x0x7f8683333478) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+ QObject (0x0x7f868333a060) 0
+ primary-for QDrag (0x0x7f8683333478)
+
+Class QFileSystemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemModel::QPrivateSignal (0x0x7f868333a2a0) 0 empty
+
+Vtable for QFileSystemModel
+QFileSystemModel::_ZTV16QFileSystemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QFileSystemModel)
+16 (int (*)(...))QFileSystemModel::metaObject
+24 (int (*)(...))QFileSystemModel::qt_metacast
+32 (int (*)(...))QFileSystemModel::qt_metacall
+40 (int (*)(...))QFileSystemModel::~QFileSystemModel
+48 (int (*)(...))QFileSystemModel::~QFileSystemModel
+56 (int (*)(...))QFileSystemModel::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QFileSystemModel::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileSystemModel::index
+120 (int (*)(...))QFileSystemModel::parent
+128 (int (*)(...))QFileSystemModel::sibling
+136 (int (*)(...))QFileSystemModel::rowCount
+144 (int (*)(...))QFileSystemModel::columnCount
+152 (int (*)(...))QFileSystemModel::hasChildren
+160 (int (*)(...))QFileSystemModel::data
+168 (int (*)(...))QFileSystemModel::setData
+176 (int (*)(...))QFileSystemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QFileSystemModel::mimeTypes
+224 (int (*)(...))QFileSystemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QFileSystemModel::dropMimeData
+248 (int (*)(...))QFileSystemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QFileSystemModel::fetchMore
+320 (int (*)(...))QFileSystemModel::canFetchMore
+328 (int (*)(...))QFileSystemModel::flags
+336 (int (*)(...))QFileSystemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QFileSystemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QFileSystemModel
+ size=16 align=8
+ base size=16 base align=8
+QFileSystemModel (0x0x7f86833334e0) 0
+ vptr=((& QFileSystemModel::_ZTV16QFileSystemModel) + 16)
+ QAbstractItemModel (0x0x7f8683333548) 0
+ primary-for QFileSystemModel (0x0x7f86833334e0)
+ QObject (0x0x7f868333a240) 0
+ primary-for QAbstractItemModel (0x0x7f8683333548)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7f868333a8a0) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7f8682f931e0) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7f8682faec00) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7f8683014a20) 0 empty
+
+Vtable for QGenericPlugin
+QGenericPlugin::_ZTV14QGenericPlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGenericPlugin)
+16 (int (*)(...))QGenericPlugin::metaObject
+24 (int (*)(...))QGenericPlugin::qt_metacast
+32 (int (*)(...))QGenericPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QGenericPlugin
+ size=16 align=8
+ base size=16 base align=8
+QGenericPlugin (0x0x7f8682fdfd68) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+ QObject (0x0x7f86830149c0) 0
+ primary-for QGenericPlugin (0x0x7f8682fdfd68)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7f8683014ae0) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7f8683014ba0) 0 empty
+
+Vtable for QInputMethod
+QInputMethod::_ZTV12QInputMethod: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputMethod)
+16 (int (*)(...))QInputMethod::metaObject
+24 (int (*)(...))QInputMethod::qt_metacast
+32 (int (*)(...))QInputMethod::qt_metacall
+40 (int (*)(...))QInputMethod::~QInputMethod
+48 (int (*)(...))QInputMethod::~QInputMethod
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QInputMethod
+ size=16 align=8
+ base size=16 base align=8
+QInputMethod (0x0x7f8682fdfdd0) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+ QObject (0x0x7f8683014b40) 0
+ primary-for QInputMethod (0x0x7f8682fdfdd0)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7f8683014e40) 0 empty
+
+Vtable for QGuiApplication
+QGuiApplication::_ZTV15QGuiApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGuiApplication)
+16 (int (*)(...))QGuiApplication::metaObject
+24 (int (*)(...))QGuiApplication::qt_metacast
+32 (int (*)(...))QGuiApplication::qt_metacall
+40 (int (*)(...))QGuiApplication::~QGuiApplication
+48 (int (*)(...))QGuiApplication::~QGuiApplication
+56 (int (*)(...))QGuiApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGuiApplication::notify
+120 (int (*)(...))QGuiApplication::compressEvent
+
+Class QGuiApplication
+ size=16 align=8
+ base size=16 base align=8
+QGuiApplication (0x0x7f8682fdfe38) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+ QCoreApplication (0x0x7f8682fdfea0) 0
+ primary-for QGuiApplication (0x0x7f8682fdfe38)
+ QObject (0x0x7f8683014de0) 0
+ primary-for QCoreApplication (0x0x7f8682fdfea0)
+
+Class QIconEngine::ScaledPixmapArgument
+ size=48 align=8
+ base size=48 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7f8683043120) 0
+
+Vtable for QIconEngine
+QIconEngine::_ZTV11QIconEngine: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QIconEngine)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QIconEngine::actualSize
+48 (int (*)(...))QIconEngine::pixmap
+56 (int (*)(...))QIconEngine::addPixmap
+64 (int (*)(...))QIconEngine::addFile
+72 (int (*)(...))QIconEngine::key
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QIconEngine::read
+96 (int (*)(...))QIconEngine::write
+104 (int (*)(...))QIconEngine::availableSizes
+112 (int (*)(...))QIconEngine::iconName
+120 (int (*)(...))QIconEngine::isNull
+128 (int (*)(...))QIconEngine::scaledPixmap
+136 (int (*)(...))QIconEngine::virtual_hook
+
+Class QIconEngine
+ size=8 align=8
+ base size=8 base align=8
+QIconEngine (0x0x7f86830430c0) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7f86830431e0) 0 empty
+
+Vtable for QIconEnginePlugin
+QIconEnginePlugin::_ZTV17QIconEnginePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QIconEnginePlugin)
+16 (int (*)(...))QIconEnginePlugin::metaObject
+24 (int (*)(...))QIconEnginePlugin::qt_metacast
+32 (int (*)(...))QIconEnginePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QIconEnginePlugin
+ size=16 align=8
+ base size=16 base align=8
+QIconEnginePlugin (0x0x7f8682fdff08) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+ QObject (0x0x7f8683043180) 0
+ primary-for QIconEnginePlugin (0x0x7f8682fdff08)
+
+Vtable for QImageIOHandler
+QImageIOHandler::_ZTV15QImageIOHandler: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QImageIOHandler)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QImageIOHandler::write
+56 (int (*)(...))QImageIOHandler::option
+64 (int (*)(...))QImageIOHandler::setOption
+72 (int (*)(...))QImageIOHandler::supportsOption
+80 (int (*)(...))QImageIOHandler::jumpToNextImage
+88 (int (*)(...))QImageIOHandler::jumpToImage
+96 (int (*)(...))QImageIOHandler::loopCount
+104 (int (*)(...))QImageIOHandler::imageCount
+112 (int (*)(...))QImageIOHandler::nextImageDelay
+120 (int (*)(...))QImageIOHandler::currentImageNumber
+128 (int (*)(...))QImageIOHandler::currentImageRect
+
+Class QImageIOHandler
+ size=16 align=8
+ base size=16 base align=8
+QImageIOHandler (0x0x7f86830432a0) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7f86830434e0) 0 empty
+
+Vtable for QImageIOPlugin
+QImageIOPlugin::_ZTV14QImageIOPlugin: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QImageIOPlugin)
+16 (int (*)(...))QImageIOPlugin::metaObject
+24 (int (*)(...))QImageIOPlugin::qt_metacast
+32 (int (*)(...))QImageIOPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QImageIOPlugin
+ size=16 align=8
+ base size=16 base align=8
+QImageIOPlugin (0x0x7f8682fdff70) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+ QObject (0x0x7f8683043480) 0
+ primary-for QImageIOPlugin (0x0x7f8682fdff70)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7f86830438a0) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7f8683043960) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7f8683043a20) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7f86830cd780) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7f868312bc00) 0 empty
+
+Vtable for QMovie
+QMovie::_ZTV6QMovie: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QMovie)
+16 (int (*)(...))QMovie::metaObject
+24 (int (*)(...))QMovie::qt_metacast
+32 (int (*)(...))QMovie::qt_metacall
+40 (int (*)(...))QMovie::~QMovie
+48 (int (*)(...))QMovie::~QMovie
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QMovie
+ size=16 align=8
+ base size=16 base align=8
+QMovie (0x0x7f8683119750) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+ QObject (0x0x7f868312bba0) 0
+ primary-for QMovie (0x0x7f8683119750)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7f8682d4d000) 0 empty
+
+Vtable for QOffscreenSurface
+QOffscreenSurface::_ZTV17QOffscreenSurface: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QOffscreenSurface)
+16 (int (*)(...))QOffscreenSurface::metaObject
+24 (int (*)(...))QOffscreenSurface::qt_metacast
+32 (int (*)(...))QOffscreenSurface::qt_metacall
+40 (int (*)(...))QOffscreenSurface::~QOffscreenSurface
+48 (int (*)(...))QOffscreenSurface::~QOffscreenSurface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QOffscreenSurface::surfaceType
+120 (int (*)(...))QOffscreenSurface::format
+128 (int (*)(...))QOffscreenSurface::size
+136 (int (*)(...))QOffscreenSurface::surfaceHandle
+144 (int (*)(...))-16
+152 (int (*)(...))(& _ZTI17QOffscreenSurface)
+160 (int (*)(...))QOffscreenSurface::_ZThn16_N17QOffscreenSurfaceD1Ev
+168 (int (*)(...))QOffscreenSurface::_ZThn16_N17QOffscreenSurfaceD0Ev
+176 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface6formatEv
+184 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface13surfaceHandleEv
+192 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface11surfaceTypeEv
+200 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface4sizeEv
+
+Class QOffscreenSurface
+ size=40 align=8
+ base size=40 base align=8
+QOffscreenSurface (0x0x7f8683118700) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+ QObject (0x0x7f868312bf00) 0
+ primary-for QOffscreenSurface (0x0x7f8683118700)
+ QSurface (0x0x7f868312bf60) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7f8682d4d240) 0 empty
+
+Vtable for QOpenGLContextGroup
+QOpenGLContextGroup::_ZTV19QOpenGLContextGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QOpenGLContextGroup)
+16 (int (*)(...))QOpenGLContextGroup::metaObject
+24 (int (*)(...))QOpenGLContextGroup::qt_metacast
+32 (int (*)(...))QOpenGLContextGroup::qt_metacall
+40 (int (*)(...))QOpenGLContextGroup::~QOpenGLContextGroup
+48 (int (*)(...))QOpenGLContextGroup::~QOpenGLContextGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLContextGroup
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLContextGroup (0x0x7f86831197b8) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+ QObject (0x0x7f8682d4d1e0) 0
+ primary-for QOpenGLContextGroup (0x0x7f86831197b8)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7f8682d4d420) 0 empty
+
+Vtable for QOpenGLContext
+QOpenGLContext::_ZTV14QOpenGLContext: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QOpenGLContext)
+16 (int (*)(...))QOpenGLContext::metaObject
+24 (int (*)(...))QOpenGLContext::qt_metacast
+32 (int (*)(...))QOpenGLContext::qt_metacall
+40 (int (*)(...))QOpenGLContext::~QOpenGLContext
+48 (int (*)(...))QOpenGLContext::~QOpenGLContext
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLContext
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLContext (0x0x7f8683119820) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+ QObject (0x0x7f8682d4d3c0) 0
+ primary-for QOpenGLContext (0x0x7f8683119820)
+
+Vtable for QNativeInterface::QGLXContext
+QNativeInterface::QGLXContext::_ZTVN16QNativeInterface11QGLXContextE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QGLXContextE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QGLXContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QGLXContext (0x0x7f8682d4d5a0) 0 nearly-empty
+ vptr=((& QNativeInterface::QGLXContext::_ZTVN16QNativeInterface11QGLXContextE) + 16)
+
+Vtable for QNativeInterface::QEGLContext
+QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QEGLContextE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QEGLContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QEGLContext (0x0x7f8682d4d600) 0 nearly-empty
+ vptr=((& QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE) + 16)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7f8682d4d660) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7f8682d4dc00) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7f8682d4dba0) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7f8683119c30) 0
+ QOpenGLFunctions (0x0x7f8682ce39c0) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7f8682ce3d20) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7f8683119c98) 0
+ QOpenGLFunctionsPrivate (0x0x7f8682ce3cc0) 0
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7f86829c9a20) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7f8682a224e0) 0
+
+Class QPageRanges::Range
+ size=8 align=4
+ base size=8 base align=4
+QPageRanges::Range (0x0x7f8682a7b180) 0
+
+Class QPageRanges
+ size=8 align=8
+ base size=8 base align=8
+QPageRanges (0x0x7f8682a7b120) 0
+
+Vtable for QPagedPaintDevice
+QPagedPaintDevice::_ZTV17QPagedPaintDevice: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QPagedPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QPagedPaintDevice::setPageLayout
+96 (int (*)(...))QPagedPaintDevice::setPageSize
+104 (int (*)(...))QPagedPaintDevice::setPageOrientation
+112 (int (*)(...))QPagedPaintDevice::setPageMargins
+120 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPagedPaintDevice
+ size=24 align=8
+ base size=24 base align=8
+QPagedPaintDevice (0x0x7f8682ae2888) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+ QPaintDevice (0x0x7f8682ae72a0) 0
+ primary-for QPagedPaintDevice (0x0x7f8682ae2888)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7f8682ae7420) 0 empty
+
+Vtable for QPaintDeviceWindow
+QPaintDeviceWindow::_ZTV18QPaintDeviceWindow: 59 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+16 (int (*)(...))QPaintDeviceWindow::metaObject
+24 (int (*)(...))QPaintDeviceWindow::qt_metacast
+32 (int (*)(...))QPaintDeviceWindow::qt_metacall
+40 (int (*)(...))QPaintDeviceWindow::~QPaintDeviceWindow
+48 (int (*)(...))QPaintDeviceWindow::~QPaintDeviceWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QPaintDeviceWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QPaintDeviceWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))-16
+336 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+344 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD1Ev
+352 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD0Ev
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+384 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+392 (int (*)(...))-40
+400 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+408 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD1Ev
+416 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD0Ev
+424 (int (*)(...))QPaintDevice::devType
+432 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+440 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+448 (int (*)(...))QPaintDevice::initPainter
+456 (int (*)(...))QPaintDevice::redirected
+464 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDeviceWindow
+ size=56 align=8
+ base size=50 base align=8
+QPaintDeviceWindow (0x0x7f8682acb770) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+ QWindow (0x0x7f8682acb7e0) 0
+ primary-for QPaintDeviceWindow (0x0x7f8682acb770)
+ QObject (0x0x7f8682ae7300) 0
+ primary-for QWindow (0x0x7f8682acb7e0)
+ QSurface (0x0x7f8682ae7360) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 344)
+ QPaintDevice (0x0x7f8682ae73c0) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 408)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7f8682ae7600) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7f8682ae75a0) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7f8682899180) 0 empty
+
+Vtable for QPaintEngine
+QPaintEngine::_ZTV12QPaintEngine: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintEngine)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))QPaintEngine::drawRects
+64 (int (*)(...))QPaintEngine::drawRects
+72 (int (*)(...))QPaintEngine::drawLines
+80 (int (*)(...))QPaintEngine::drawLines
+88 (int (*)(...))QPaintEngine::drawEllipse
+96 (int (*)(...))QPaintEngine::drawEllipse
+104 (int (*)(...))QPaintEngine::drawPath
+112 (int (*)(...))QPaintEngine::drawPoints
+120 (int (*)(...))QPaintEngine::drawPoints
+128 (int (*)(...))QPaintEngine::drawPolygon
+136 (int (*)(...))QPaintEngine::drawPolygon
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QPaintEngine::drawTextItem
+160 (int (*)(...))QPaintEngine::drawTiledPixmap
+168 (int (*)(...))QPaintEngine::drawImage
+176 (int (*)(...))QPaintEngine::coordinateOffset
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))QPaintEngine::createPixmap
+200 (int (*)(...))QPaintEngine::createPixmapFromImage
+
+Class QPaintEngine
+ size=32 align=8
+ base size=32 base align=8
+QPaintEngine (0x0x7f86828af960) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7f86828aff60) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7f86828eaa20) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7f86828ea9c0) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7f868256bd20) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7f868258f4e0) 0 empty
+
+Vtable for QPdfWriter
+QPdfWriter::_ZTV10QPdfWriter: 33 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QPdfWriter)
+16 (int (*)(...))QPdfWriter::metaObject
+24 (int (*)(...))QPdfWriter::qt_metacast
+32 (int (*)(...))QPdfWriter::qt_metacall
+40 (int (*)(...))QPdfWriter::~QPdfWriter
+48 (int (*)(...))QPdfWriter::~QPdfWriter
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPdfWriter::newPage
+120 (int (*)(...))QPdfWriter::paintEngine
+128 (int (*)(...))QPdfWriter::metric
+136 (int (*)(...))-16
+144 (int (*)(...))(& _ZTI10QPdfWriter)
+152 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD1Ev
+160 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD0Ev
+168 (int (*)(...))QPaintDevice::devType
+176 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter11paintEngineEv
+184 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter6metricEN12QPaintDevice17PaintDeviceMetricE
+192 (int (*)(...))QPaintDevice::initPainter
+200 (int (*)(...))QPaintDevice::redirected
+208 (int (*)(...))QPaintDevice::sharedPainter
+216 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter7newPageEv
+224 (int (*)(...))QPagedPaintDevice::setPageLayout
+232 (int (*)(...))QPagedPaintDevice::setPageSize
+240 (int (*)(...))QPagedPaintDevice::setPageOrientation
+248 (int (*)(...))QPagedPaintDevice::setPageMargins
+256 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPdfWriter
+ size=40 align=8
+ base size=40 base align=8
+QPdfWriter (0x0x7f86825772a0) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+ QObject (0x0x7f868258f420) 0
+ primary-for QPdfWriter (0x0x7f86825772a0)
+ QPagedPaintDevice (0x0x7f86825736e8) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 152)
+ QPaintDevice (0x0x7f868258f480) 16
+ primary-for QPagedPaintDevice (0x0x7f86825736e8)
+
+Vtable for QPicture
+QPicture::_ZTV8QPicture: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QPicture)
+16 (int (*)(...))QPicture::~QPicture
+24 (int (*)(...))QPicture::~QPicture
+32 (int (*)(...))QPicture::devType
+40 (int (*)(...))QPicture::paintEngine
+48 (int (*)(...))QPicture::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QPicture::setData
+
+Class QPicture
+ size=24 align=8
+ base size=24 base align=8
+QPicture (0x0x7f8682573750) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+ QPaintDevice (0x0x7f868258f6c0) 0
+ primary-for QPicture (0x0x7f8682573750)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7f86825d21e0) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7f86825d2180) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7f8682613420) 0 empty
+
+Vtable for QRasterWindow
+QRasterWindow::_ZTV13QRasterWindow: 60 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QRasterWindow)
+16 (int (*)(...))QRasterWindow::metaObject
+24 (int (*)(...))QRasterWindow::qt_metacast
+32 (int (*)(...))QRasterWindow::qt_metacall
+40 (int (*)(...))QRasterWindow::~QRasterWindow
+48 (int (*)(...))QRasterWindow::~QRasterWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QPaintDeviceWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QRasterWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))QRasterWindow::redirected
+336 (int (*)(...))-16
+344 (int (*)(...))(& _ZTI13QRasterWindow)
+352 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD1Ev
+360 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD0Ev
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+384 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+392 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+400 (int (*)(...))-40
+408 (int (*)(...))(& _ZTI13QRasterWindow)
+416 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD1Ev
+424 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD0Ev
+432 (int (*)(...))QPaintDevice::devType
+440 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+448 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+456 (int (*)(...))QPaintDevice::initPainter
+464 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow10redirectedEP6QPoint
+472 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QRasterWindow
+ size=56 align=8
+ base size=50 base align=8
+QRasterWindow (0x0x7f868260bc98) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+ QPaintDeviceWindow (0x0x7f8682577e70) 0
+ primary-for QRasterWindow (0x0x7f868260bc98)
+ QWindow (0x0x7f8682577ee0) 0
+ primary-for QPaintDeviceWindow (0x0x7f8682577e70)
+ QObject (0x0x7f8682613300) 0
+ primary-for QWindow (0x0x7f8682577ee0)
+ QSurface (0x0x7f8682613360) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 352)
+ QPaintDevice (0x0x7f86826133c0) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 416)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7f8682613600) 0 empty
+
+Vtable for QSessionManager
+QSessionManager::_ZTV15QSessionManager: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSessionManager)
+16 (int (*)(...))QSessionManager::metaObject
+24 (int (*)(...))QSessionManager::qt_metacast
+32 (int (*)(...))QSessionManager::qt_metacall
+40 (int (*)(...))QSessionManager::~QSessionManager
+48 (int (*)(...))QSessionManager::~QSessionManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSessionManager
+ size=16 align=8
+ base size=16 base align=8
+QSessionManager (0x0x7f868260bd68) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+ QObject (0x0x7f86826135a0) 0
+ primary-for QSessionManager (0x0x7f868260bd68)
+
+Class QShortcut::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QShortcut::QPrivateSignal (0x0x7f86826137e0) 0 empty
+
+Vtable for QShortcut
+QShortcut::_ZTV9QShortcut: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QShortcut)
+16 (int (*)(...))QShortcut::metaObject
+24 (int (*)(...))QShortcut::qt_metacast
+32 (int (*)(...))QShortcut::qt_metacall
+40 (int (*)(...))QShortcut::~QShortcut
+48 (int (*)(...))QShortcut::~QShortcut
+56 (int (*)(...))QShortcut::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QShortcut
+ size=16 align=8
+ base size=16 base align=8
+QShortcut (0x0x7f868260bdd0) 0
+ vptr=((& QShortcut::_ZTV9QShortcut) + 16)
+ QObject (0x0x7f8682613780) 0
+ primary-for QShortcut (0x0x7f868260bdd0)
+
+Vtable for QStandardItem
+QStandardItem::_ZTV13QStandardItem: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QStandardItem)
+16 (int (*)(...))QStandardItem::~QStandardItem
+24 (int (*)(...))QStandardItem::~QStandardItem
+32 (int (*)(...))QStandardItem::data
+40 (int (*)(...))QStandardItem::multiData
+48 (int (*)(...))QStandardItem::setData
+56 (int (*)(...))QStandardItem::clone
+64 (int (*)(...))QStandardItem::type
+72 (int (*)(...))QStandardItem::read
+80 (int (*)(...))QStandardItem::write
+88 (int (*)(...))QStandardItem::operator<
+
+Class QStandardItem
+ size=16 align=8
+ base size=16 base align=8
+QStandardItem (0x0x7f8682613cc0) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7f868267bd20) 0 empty
+
+Vtable for QStandardItemModel
+QStandardItemModel::_ZTV18QStandardItemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QStandardItemModel)
+16 (int (*)(...))QStandardItemModel::metaObject
+24 (int (*)(...))QStandardItemModel::qt_metacast
+32 (int (*)(...))QStandardItemModel::qt_metacall
+40 (int (*)(...))QStandardItemModel::~QStandardItemModel
+48 (int (*)(...))QStandardItemModel::~QStandardItemModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStandardItemModel::index
+120 (int (*)(...))QStandardItemModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QStandardItemModel::rowCount
+144 (int (*)(...))QStandardItemModel::columnCount
+152 (int (*)(...))QStandardItemModel::hasChildren
+160 (int (*)(...))QStandardItemModel::data
+168 (int (*)(...))QStandardItemModel::setData
+176 (int (*)(...))QStandardItemModel::headerData
+184 (int (*)(...))QStandardItemModel::setHeaderData
+192 (int (*)(...))QStandardItemModel::itemData
+200 (int (*)(...))QStandardItemModel::setItemData
+208 (int (*)(...))QStandardItemModel::clearItemData
+216 (int (*)(...))QStandardItemModel::mimeTypes
+224 (int (*)(...))QStandardItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QStandardItemModel::dropMimeData
+248 (int (*)(...))QStandardItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStandardItemModel::insertRows
+272 (int (*)(...))QStandardItemModel::insertColumns
+280 (int (*)(...))QStandardItemModel::removeRows
+288 (int (*)(...))QStandardItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStandardItemModel::flags
+336 (int (*)(...))QStandardItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QStandardItemModel::roleNames
+376 (int (*)(...))QStandardItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QStandardItemModel
+ size=16 align=8
+ base size=16 base align=8
+QStandardItemModel (0x0x7f8682678750) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+ QAbstractItemModel (0x0x7f86826787b8) 0
+ primary-for QStandardItemModel (0x0x7f8682678750)
+ QObject (0x0x7f868267bcc0) 0
+ primary-for QAbstractItemModel (0x0x7f86826787b8)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7f86826d4060) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7f8682714960) 0 empty
+
+Vtable for QStyleHints
+QStyleHints::_ZTV11QStyleHints: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QStyleHints)
+16 (int (*)(...))QStyleHints::metaObject
+24 (int (*)(...))QStyleHints::qt_metacast
+32 (int (*)(...))QStyleHints::qt_metacall
+40 (int (*)(...))QStyleHints::~QStyleHints
+48 (int (*)(...))QStyleHints::~QStyleHints
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QStyleHints
+ size=16 align=8
+ base size=16 base align=8
+QStyleHints (0x0x7f8682719410) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+ QObject (0x0x7f8682714900) 0
+ primary-for QStyleHints (0x0x7f8682719410)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7f8682714b40) 0 empty
+
+Vtable for QTextObject
+QTextObject::_ZTV11QTextObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTextObject)
+16 (int (*)(...))QTextObject::metaObject
+24 (int (*)(...))QTextObject::qt_metacast
+32 (int (*)(...))QTextObject::qt_metacall
+40 (int (*)(...))QTextObject::~QTextObject
+48 (int (*)(...))QTextObject::~QTextObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextObject
+ size=16 align=8
+ base size=16 base align=8
+QTextObject (0x0x7f8682719478) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+ QObject (0x0x7f8682714ae0) 0
+ primary-for QTextObject (0x0x7f8682719478)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7f8682714d20) 0 empty
+
+Vtable for QTextBlockGroup
+QTextBlockGroup::_ZTV15QTextBlockGroup: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QTextBlockGroup)
+16 (int (*)(...))QTextBlockGroup::metaObject
+24 (int (*)(...))QTextBlockGroup::qt_metacast
+32 (int (*)(...))QTextBlockGroup::qt_metacall
+40 (int (*)(...))QTextBlockGroup::~QTextBlockGroup
+48 (int (*)(...))QTextBlockGroup::~QTextBlockGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextBlockGroup::blockInserted
+120 (int (*)(...))QTextBlockGroup::blockRemoved
+128 (int (*)(...))QTextBlockGroup::blockFormatChanged
+
+Class QTextBlockGroup
+ size=16 align=8
+ base size=16 base align=8
+QTextBlockGroup (0x0x7f86827194e0) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+ QTextObject (0x0x7f8682719548) 0
+ primary-for QTextBlockGroup (0x0x7f86827194e0)
+ QObject (0x0x7f8682714cc0) 0
+ primary-for QTextObject (0x0x7f8682719548)
+
+Vtable for QTextFrameLayoutData
+QTextFrameLayoutData::_ZTV20QTextFrameLayoutData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextFrameLayoutData)
+16 (int (*)(...))QTextFrameLayoutData::~QTextFrameLayoutData
+24 (int (*)(...))QTextFrameLayoutData::~QTextFrameLayoutData
+
+Class QTextFrameLayoutData
+ size=8 align=8
+ base size=8 base align=8
+QTextFrameLayoutData (0x0x7f8682714ea0) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7f8682714f60) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7f8682741000) 0
+
+Vtable for QTextFrame
+QTextFrame::_ZTV10QTextFrame: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextFrame)
+16 (int (*)(...))QTextFrame::metaObject
+24 (int (*)(...))QTextFrame::qt_metacast
+32 (int (*)(...))QTextFrame::qt_metacall
+40 (int (*)(...))QTextFrame::~QTextFrame
+48 (int (*)(...))QTextFrame::~QTextFrame
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextFrame
+ size=16 align=8
+ base size=16 base align=8
+QTextFrame (0x0x7f86827195b0) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+ QTextObject (0x0x7f8682719618) 0
+ primary-for QTextFrame (0x0x7f86827195b0)
+ QObject (0x0x7f8682714f00) 0
+ primary-for QTextObject (0x0x7f8682719618)
+
+Vtable for QTextBlockUserData
+QTextBlockUserData::_ZTV18QTextBlockUserData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QTextBlockUserData)
+16 (int (*)(...))QTextBlockUserData::~QTextBlockUserData
+24 (int (*)(...))QTextBlockUserData::~QTextBlockUserData
+
+Class QTextBlockUserData
+ size=8 align=8
+ base size=8 base align=8
+QTextBlockUserData (0x0x7f8682365e40) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7f8682365f00) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7f8682365ea0) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7f86823c6780) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7f86823f1600) 0 empty
+
+Vtable for QSyntaxHighlighter
+QSyntaxHighlighter::_ZTV18QSyntaxHighlighter: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSyntaxHighlighter)
+16 (int (*)(...))QSyntaxHighlighter::metaObject
+24 (int (*)(...))QSyntaxHighlighter::qt_metacast
+32 (int (*)(...))QSyntaxHighlighter::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QSyntaxHighlighter
+ size=16 align=8
+ base size=16 base align=8
+QSyntaxHighlighter (0x0x7f86823f37b8) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+ QObject (0x0x7f86823f15a0) 0
+ primary-for QSyntaxHighlighter (0x0x7f86823f37b8)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7f86823f1780) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7f86823f17e0) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7f86823f18a0) 0 empty
+
+Vtable for QTextList
+QTextList::_ZTV9QTextList: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTextList)
+16 (int (*)(...))QTextList::metaObject
+24 (int (*)(...))QTextList::qt_metacast
+32 (int (*)(...))QTextList::qt_metacall
+40 (int (*)(...))QTextList::~QTextList
+48 (int (*)(...))QTextList::~QTextList
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextBlockGroup::blockInserted
+120 (int (*)(...))QTextBlockGroup::blockRemoved
+128 (int (*)(...))QTextBlockGroup::blockFormatChanged
+
+Class QTextList
+ size=16 align=8
+ base size=16 base align=8
+QTextList (0x0x7f86823f3820) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+ QTextBlockGroup (0x0x7f86823f3888) 0
+ primary-for QTextList (0x0x7f86823f3820)
+ QTextObject (0x0x7f86823f38f0) 0
+ primary-for QTextBlockGroup (0x0x7f86823f3888)
+ QObject (0x0x7f86823f1840) 0
+ primary-for QTextObject (0x0x7f86823f38f0)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7f86823f1c60) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7f86824234e0) 0 empty
+
+Vtable for QTextTable
+QTextTable::_ZTV10QTextTable: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextTable)
+16 (int (*)(...))QTextTable::metaObject
+24 (int (*)(...))QTextTable::qt_metacast
+32 (int (*)(...))QTextTable::qt_metacall
+40 (int (*)(...))QTextTable::~QTextTable
+48 (int (*)(...))QTextTable::~QTextTable
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextTable
+ size=16 align=8
+ base size=16 base align=8
+QTextTable (0x0x7f86823f3958) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+ QTextFrame (0x0x7f86823f39c0) 0
+ primary-for QTextTable (0x0x7f86823f3958)
+ QTextObject (0x0x7f86823f3a28) 0
+ primary-for QTextFrame (0x0x7f86823f39c0)
+ QObject (0x0x7f8682423480) 0
+ primary-for QTextObject (0x0x7f86823f3a28)
+
+Class QUndoGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoGroup::QPrivateSignal (0x0x7f86824238a0) 0 empty
+
+Vtable for QUndoGroup
+QUndoGroup::_ZTV10QUndoGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUndoGroup)
+16 (int (*)(...))QUndoGroup::metaObject
+24 (int (*)(...))QUndoGroup::qt_metacast
+32 (int (*)(...))QUndoGroup::qt_metacall
+40 (int (*)(...))QUndoGroup::~QUndoGroup
+48 (int (*)(...))QUndoGroup::~QUndoGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QUndoGroup
+ size=16 align=8
+ base size=16 base align=8
+QUndoGroup (0x0x7f86823f3a90) 0
+ vptr=((& QUndoGroup::_ZTV10QUndoGroup) + 16)
+ QObject (0x0x7f8682423840) 0
+ primary-for QUndoGroup (0x0x7f86823f3a90)
+
+Vtable for QUndoCommand
+QUndoCommand::_ZTV12QUndoCommand: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QUndoCommand)
+16 (int (*)(...))QUndoCommand::~QUndoCommand
+24 (int (*)(...))QUndoCommand::~QUndoCommand
+32 (int (*)(...))QUndoCommand::undo
+40 (int (*)(...))QUndoCommand::redo
+48 (int (*)(...))QUndoCommand::id
+56 (int (*)(...))QUndoCommand::mergeWith
+
+Class QUndoCommand
+ size=16 align=8
+ base size=16 base align=8
+QUndoCommand (0x0x7f8682423a20) 0
+ vptr=((& QUndoCommand::_ZTV12QUndoCommand) + 16)
+
+Class QUndoStack::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoStack::QPrivateSignal (0x0x7f8682423ae0) 0 empty
+
+Vtable for QUndoStack
+QUndoStack::_ZTV10QUndoStack: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUndoStack)
+16 (int (*)(...))QUndoStack::metaObject
+24 (int (*)(...))QUndoStack::qt_metacast
+32 (int (*)(...))QUndoStack::qt_metacall
+40 (int (*)(...))QUndoStack::~QUndoStack
+48 (int (*)(...))QUndoStack::~QUndoStack
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QUndoStack
+ size=16 align=8
+ base size=16 base align=8
+QUndoStack (0x0x7f86823f3af8) 0
+ vptr=((& QUndoStack::_ZTV10QUndoStack) + 16)
+ QObject (0x0x7f8682423a80) 0
+ primary-for QUndoStack (0x0x7f86823f3af8)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7f8682423cc0) 0 empty
+
+Vtable for QValidator
+QValidator::_ZTV10QValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QValidator)
+16 (int (*)(...))QValidator::metaObject
+24 (int (*)(...))QValidator::qt_metacast
+32 (int (*)(...))QValidator::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))QValidator::fixup
+
+Class QValidator
+ size=16 align=8
+ base size=16 base align=8
+QValidator (0x0x7f86823f3b60) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+ QObject (0x0x7f8682423c60) 0
+ primary-for QValidator (0x0x7f86823f3b60)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7f8682423f60) 0 empty
+
+Vtable for QIntValidator
+QIntValidator::_ZTV13QIntValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QIntValidator)
+16 (int (*)(...))QIntValidator::metaObject
+24 (int (*)(...))QIntValidator::qt_metacast
+32 (int (*)(...))QIntValidator::qt_metacall
+40 (int (*)(...))QIntValidator::~QIntValidator
+48 (int (*)(...))QIntValidator::~QIntValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIntValidator::validate
+120 (int (*)(...))QIntValidator::fixup
+
+Class QIntValidator
+ size=24 align=8
+ base size=24 base align=8
+QIntValidator (0x0x7f86823f3bc8) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+ QValidator (0x0x7f86823f3c30) 0
+ primary-for QIntValidator (0x0x7f86823f3bc8)
+ QObject (0x0x7f8682423f00) 0
+ primary-for QValidator (0x0x7f86823f3c30)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7f868246b180) 0 empty
+
+Vtable for QDoubleValidator
+QDoubleValidator::_ZTV16QDoubleValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QDoubleValidator)
+16 (int (*)(...))QDoubleValidator::metaObject
+24 (int (*)(...))QDoubleValidator::qt_metacast
+32 (int (*)(...))QDoubleValidator::qt_metacall
+40 (int (*)(...))QDoubleValidator::~QDoubleValidator
+48 (int (*)(...))QDoubleValidator::~QDoubleValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDoubleValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QDoubleValidator
+ size=40 align=8
+ base size=36 base align=8
+QDoubleValidator (0x0x7f86823f3c98) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+ QValidator (0x0x7f86823f3d00) 0
+ primary-for QDoubleValidator (0x0x7f86823f3c98)
+ QObject (0x0x7f868246b120) 0
+ primary-for QValidator (0x0x7f86823f3d00)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7f868246b540) 0 empty
+
+Vtable for QRegularExpressionValidator
+QRegularExpressionValidator::_ZTV27QRegularExpressionValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QRegularExpressionValidator)
+16 (int (*)(...))QRegularExpressionValidator::metaObject
+24 (int (*)(...))QRegularExpressionValidator::qt_metacast
+32 (int (*)(...))QRegularExpressionValidator::qt_metacall
+40 (int (*)(...))QRegularExpressionValidator::~QRegularExpressionValidator
+48 (int (*)(...))QRegularExpressionValidator::~QRegularExpressionValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QRegularExpressionValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QRegularExpressionValidator
+ size=16 align=8
+ base size=16 base align=8
+QRegularExpressionValidator (0x0x7f86823f3d68) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+ QValidator (0x0x7f86823f3dd0) 0
+ primary-for QRegularExpressionValidator (0x0x7f86823f3d68)
+ QObject (0x0x7f868246b4e0) 0
+ primary-for QValidator (0x0x7f86823f3dd0)
+
+Class QSizePolicy::Bits
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy::Bits (0x0x7f868246b720) 0
+
+Class QSizePolicy
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy (0x0x7f868246b6c0) 0
+
+Class QWidgetData
+ size=88 align=8
+ base size=88 base align=8
+QWidgetData (0x0x7f86824dc6c0) 0
+
+Class QWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidget::QPrivateSignal (0x0x7f86824dc7e0) 0 empty
+
+Vtable for QWidget
+QWidget::_ZTV7QWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWidget)
+16 (int (*)(...))QWidget::metaObject
+24 (int (*)(...))QWidget::qt_metacast
+32 (int (*)(...))QWidget::qt_metacall
+40 (int (*)(...))QWidget::~QWidget
+48 (int (*)(...))QWidget::~QWidget
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI7QWidget)
+448 (int (*)(...))QWidget::_ZThn16_N7QWidgetD1Ev
+456 (int (*)(...))QWidget::_ZThn16_N7QWidgetD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWidget
+ size=40 align=8
+ base size=40 base align=8
+QWidget (0x0x7f868248b850) 0
+ vptr=((& QWidget::_ZTV7QWidget) + 16)
+ QObject (0x0x7f86824dc720) 0
+ primary-for QWidget (0x0x7f868248b850)
+ QPaintDevice (0x0x7f86824dc780) 16
+ vptr=((& QWidget::_ZTV7QWidget) + 448)
+
+Class QAbstractButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractButton::QPrivateSignal (0x0x7f86821770c0) 0 empty
+
+Vtable for QAbstractButton
+QAbstractButton::_ZTV15QAbstractButton: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractButton)
+16 (int (*)(...))QAbstractButton::metaObject
+24 (int (*)(...))QAbstractButton::qt_metacast
+32 (int (*)(...))QAbstractButton::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI15QAbstractButton)
+472 0
+480 0
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractButton
+ size=40 align=8
+ base size=40 base align=8
+QAbstractButton (0x0x7f86824d9dd0) 0
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 16)
+ QWidget (0x0x7f868248ba80) 0
+ primary-for QAbstractButton (0x0x7f86824d9dd0)
+ QObject (0x0x7f8682177000) 0
+ primary-for QWidget (0x0x7f868248ba80)
+ QPaintDevice (0x0x7f8682177060) 16
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 472)
+
+Class QAbstractSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSpinBox::QPrivateSignal (0x0x7f8682177300) 0 empty
+
+Vtable for QAbstractSpinBox
+QAbstractSpinBox::_ZTV16QAbstractSpinBox: 70 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAbstractSpinBox)
+16 (int (*)(...))QAbstractSpinBox::metaObject
+24 (int (*)(...))QAbstractSpinBox::qt_metacast
+32 (int (*)(...))QAbstractSpinBox::qt_metacall
+40 (int (*)(...))QAbstractSpinBox::~QAbstractSpinBox
+48 (int (*)(...))QAbstractSpinBox::~QAbstractSpinBox
+56 (int (*)(...))QAbstractSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSpinBox::validate
+440 (int (*)(...))QAbstractSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI16QAbstractSpinBox)
+496 (int (*)(...))QAbstractSpinBox::_ZThn16_N16QAbstractSpinBoxD1Ev
+504 (int (*)(...))QAbstractSpinBox::_ZThn16_N16QAbstractSpinBoxD0Ev
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QAbstractSpinBox (0x0x7f86824d9e38) 0
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 16)
+ QWidget (0x0x7f868248baf0) 0
+ primary-for QAbstractSpinBox (0x0x7f86824d9e38)
+ QObject (0x0x7f8682177240) 0
+ primary-for QWidget (0x0x7f868248baf0)
+ QPaintDevice (0x0x7f86821772a0) 16
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 496)
+
+Class QAbstractSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSlider::QPrivateSignal (0x0x7f8682177a80) 0 empty
+
+Vtable for QAbstractSlider
+QAbstractSlider::_ZTV15QAbstractSlider: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractSlider)
+16 (int (*)(...))QAbstractSlider::metaObject
+24 (int (*)(...))QAbstractSlider::qt_metacast
+32 (int (*)(...))QAbstractSlider::qt_metacall
+40 (int (*)(...))QAbstractSlider::~QAbstractSlider
+48 (int (*)(...))QAbstractSlider::~QAbstractSlider
+56 (int (*)(...))QAbstractSlider::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSlider::sliderChange
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI15QAbstractSlider)
+456 (int (*)(...))QAbstractSlider::_ZThn16_N15QAbstractSliderD1Ev
+464 (int (*)(...))QAbstractSlider::_ZThn16_N15QAbstractSliderD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractSlider
+ size=40 align=8
+ base size=40 base align=8
+QAbstractSlider (0x0x7f86821c2000) 0
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 16)
+ QWidget (0x0x7f868248b620) 0
+ primary-for QAbstractSlider (0x0x7f86821c2000)
+ QObject (0x0x7f86821779c0) 0
+ primary-for QWidget (0x0x7f868248b620)
+ QPaintDevice (0x0x7f8682177a20) 16
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 456)
+
+Class QSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSlider::QPrivateSignal (0x0x7f8682177cc0) 0 empty
+
+Vtable for QSlider
+QSlider::_ZTV7QSlider: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QSlider)
+16 (int (*)(...))QSlider::metaObject
+24 (int (*)(...))QSlider::qt_metacast
+32 (int (*)(...))QSlider::qt_metacall
+40 (int (*)(...))QSlider::~QSlider
+48 (int (*)(...))QSlider::~QSlider
+56 (int (*)(...))QSlider::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSlider::sizeHint
+136 (int (*)(...))QSlider::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSlider::mousePressEvent
+176 (int (*)(...))QSlider::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSlider::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSlider::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSlider::sliderChange
+440 (int (*)(...))QSlider::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI7QSlider)
+464 (int (*)(...))QSlider::_ZThn16_N7QSliderD1Ev
+472 (int (*)(...))QSlider::_ZThn16_N7QSliderD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSlider
+ size=40 align=8
+ base size=40 base align=8
+QSlider (0x0x7f86821c2068) 0
+ vptr=((& QSlider::_ZTV7QSlider) + 16)
+ QAbstractSlider (0x0x7f86821c20d0) 0
+ primary-for QSlider (0x0x7f86821c2068)
+ QWidget (0x0x7f86821ca540) 0
+ primary-for QAbstractSlider (0x0x7f86821c20d0)
+ QObject (0x0x7f8682177c00) 0
+ primary-for QWidget (0x0x7f86821ca540)
+ QPaintDevice (0x0x7f8682177c60) 16
+ vptr=((& QSlider::_ZTV7QSlider) + 464)
+
+Class QStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyle::QPrivateSignal (0x0x7f8682177f60) 0 empty
+
+Vtable for QStyle
+QStyle::_ZTV6QStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QStyle)
+16 (int (*)(...))QStyle::metaObject
+24 (int (*)(...))QStyle::qt_metacast
+32 (int (*)(...))QStyle::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStyle::polish
+120 (int (*)(...))QStyle::unpolish
+128 (int (*)(...))QStyle::polish
+136 (int (*)(...))QStyle::unpolish
+144 (int (*)(...))QStyle::polish
+152 (int (*)(...))QStyle::itemTextRect
+160 (int (*)(...))QStyle::itemPixmapRect
+168 (int (*)(...))QStyle::drawItemText
+176 (int (*)(...))QStyle::drawItemPixmap
+184 (int (*)(...))QStyle::standardPalette
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+232 (int (*)(...))__cxa_pure_virtual
+240 (int (*)(...))__cxa_pure_virtual
+248 (int (*)(...))__cxa_pure_virtual
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))__cxa_pure_virtual
+272 (int (*)(...))__cxa_pure_virtual
+280 (int (*)(...))__cxa_pure_virtual
+288 (int (*)(...))__cxa_pure_virtual
+
+Class QStyle
+ size=16 align=8
+ base size=16 base align=8
+QStyle (0x0x7f86821c2138) 0
+ vptr=((& QStyle::_ZTV6QStyle) + 16)
+ QObject (0x0x7f8682177f00) 0
+ primary-for QStyle (0x0x7f86821c2138)
+
+Class QTabBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabBar::QPrivateSignal (0x0x7f868225e060) 0 empty
+
+Vtable for QTabBar
+QTabBar::_ZTV7QTabBar: 70 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QTabBar)
+16 (int (*)(...))QTabBar::metaObject
+24 (int (*)(...))QTabBar::qt_metacast
+32 (int (*)(...))QTabBar::qt_metacall
+40 (int (*)(...))QTabBar::~QTabBar
+48 (int (*)(...))QTabBar::~QTabBar
+56 (int (*)(...))QTabBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTabBar::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QTabBar::sizeHint
+136 (int (*)(...))QTabBar::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTabBar::mousePressEvent
+176 (int (*)(...))QTabBar::mouseReleaseEvent
+184 (int (*)(...))QTabBar::mouseDoubleClickEvent
+192 (int (*)(...))QTabBar::mouseMoveEvent
+200 (int (*)(...))QTabBar::wheelEvent
+208 (int (*)(...))QTabBar::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTabBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTabBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QTabBar::showEvent
+352 (int (*)(...))QTabBar::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTabBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QTabBar::tabSizeHint
+440 (int (*)(...))QTabBar::minimumTabSizeHint
+448 (int (*)(...))QTabBar::tabInserted
+456 (int (*)(...))QTabBar::tabRemoved
+464 (int (*)(...))QTabBar::tabLayoutChange
+472 (int (*)(...))QTabBar::initStyleOption
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI7QTabBar)
+496 (int (*)(...))QTabBar::_ZThn16_N7QTabBarD1Ev
+504 (int (*)(...))QTabBar::_ZThn16_N7QTabBarD0Ev
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTabBar
+ size=40 align=8
+ base size=40 base align=8
+QTabBar (0x0x7f86821c2410) 0
+ vptr=((& QTabBar::_ZTV7QTabBar) + 16)
+ QWidget (0x0x7f8682210070) 0
+ primary-for QTabBar (0x0x7f86821c2410)
+ QObject (0x0x7f868221cf60) 0
+ primary-for QWidget (0x0x7f8682210070)
+ QPaintDevice (0x0x7f868225e000) 16
+ vptr=((& QTabBar::_ZTV7QTabBar) + 496)
+
+Class QTabWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabWidget::QPrivateSignal (0x0x7f868225e360) 0 empty
+
+Vtable for QTabWidget
+QTabWidget::_ZTV10QTabWidget: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTabWidget)
+16 (int (*)(...))QTabWidget::metaObject
+24 (int (*)(...))QTabWidget::qt_metacast
+32 (int (*)(...))QTabWidget::qt_metacall
+40 (int (*)(...))QTabWidget::~QTabWidget
+48 (int (*)(...))QTabWidget::~QTabWidget
+56 (int (*)(...))QTabWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QTabWidget::sizeHint
+136 (int (*)(...))QTabWidget::minimumSizeHint
+144 (int (*)(...))QTabWidget::heightForWidth
+152 (int (*)(...))QTabWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QTabWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTabWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTabWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QTabWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTabWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QTabWidget::tabInserted
+440 (int (*)(...))QTabWidget::tabRemoved
+448 (int (*)(...))QTabWidget::initStyleOption
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI10QTabWidget)
+472 (int (*)(...))QTabWidget::_ZThn16_N10QTabWidgetD1Ev
+480 (int (*)(...))QTabWidget::_ZThn16_N10QTabWidgetD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTabWidget
+ size=40 align=8
+ base size=40 base align=8
+QTabWidget (0x0x7f86821c2478) 0
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 16)
+ QWidget (0x0x7f8682210690) 0
+ primary-for QTabWidget (0x0x7f86821c2478)
+ QObject (0x0x7f868225e2a0) 0
+ primary-for QWidget (0x0x7f8682210690)
+ QPaintDevice (0x0x7f868225e300) 16
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 472)
+
+Class QRubberBand::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRubberBand::QPrivateSignal (0x0x7f868225e720) 0 empty
+
+Vtable for QRubberBand
+QRubberBand::_ZTV11QRubberBand: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QRubberBand)
+16 (int (*)(...))QRubberBand::metaObject
+24 (int (*)(...))QRubberBand::qt_metacast
+32 (int (*)(...))QRubberBand::qt_metacall
+40 (int (*)(...))QRubberBand::~QRubberBand
+48 (int (*)(...))QRubberBand::~QRubberBand
+56 (int (*)(...))QRubberBand::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QRubberBand::paintEvent
+264 (int (*)(...))QRubberBand::moveEvent
+272 (int (*)(...))QRubberBand::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QRubberBand::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QRubberBand::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QRubberBand::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QRubberBand)
+456 (int (*)(...))QRubberBand::_ZThn16_N11QRubberBandD1Ev
+464 (int (*)(...))QRubberBand::_ZThn16_N11QRubberBandD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QRubberBand
+ size=40 align=8
+ base size=40 base align=8
+QRubberBand (0x0x7f86821c24e0) 0
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 16)
+ QWidget (0x0x7f86822109a0) 0
+ primary-for QRubberBand (0x0x7f86821c24e0)
+ QObject (0x0x7f868225e660) 0
+ primary-for QWidget (0x0x7f86822109a0)
+ QPaintDevice (0x0x7f868225e6c0) 16
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 456)
+
+Class QFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFrame::QPrivateSignal (0x0x7f868225eb40) 0 empty
+
+Vtable for QFrame
+QFrame::_ZTV6QFrame: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QFrame)
+16 (int (*)(...))QFrame::metaObject
+24 (int (*)(...))QFrame::qt_metacast
+32 (int (*)(...))QFrame::qt_metacall
+40 (int (*)(...))QFrame::~QFrame
+48 (int (*)(...))QFrame::~QFrame
+56 (int (*)(...))QFrame::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI6QFrame)
+456 (int (*)(...))QFrame::_ZThn16_N6QFrameD1Ev
+464 (int (*)(...))QFrame::_ZThn16_N6QFrameD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFrame
+ size=40 align=8
+ base size=40 base align=8
+QFrame (0x0x7f86821c2548) 0
+ vptr=((& QFrame::_ZTV6QFrame) + 16)
+ QWidget (0x0x7f8682210af0) 0
+ primary-for QFrame (0x0x7f86821c2548)
+ QObject (0x0x7f868225ea80) 0
+ primary-for QWidget (0x0x7f8682210af0)
+ QPaintDevice (0x0x7f868225eae0) 16
+ vptr=((& QFrame::_ZTV6QFrame) + 456)
+
+Class QStyleOption
+ size=64 align=8
+ base size=64 base align=8
+QStyleOption (0x0x7f868225ee40) 0
+
+Class QStyleOptionFocusRect
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFocusRect (0x0x7f86821c25b0) 0
+ QStyleOption (0x0x7f868225eea0) 0
+
+Class QStyleOptionFrame
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFrame (0x0x7f868f0fa208) 0
+ QStyleOption (0x0x7f86822cc120) 0
+
+Class QStyleOptionTabWidgetFrame
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionTabWidgetFrame (0x0x7f868f0fa3a8) 0
+ QStyleOption (0x0x7f86822cc660) 0
+
+Class QStyleOptionTabBarBase
+ size=104 align=8
+ base size=101 base align=8
+QStyleOptionTabBarBase (0x0x7f86821c2618) 0
+ QStyleOption (0x0x7f86822cc8a0) 0
+
+Class QStyleOptionHeader
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionHeader (0x0x7f86821c2680) 0
+ QStyleOption (0x0x7f86822ccae0) 0
+
+Class QStyleOptionHeaderV2
+ size=136 align=8
+ base size=136 base align=8
+QStyleOptionHeaderV2 (0x0x7f86821c26e8) 0
+ QStyleOptionHeader (0x0x7f86821c2750) 0
+ QStyleOption (0x0x7f86822ccd20) 0
+
+Class QStyleOptionButton
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionButton (0x0x7f86821c2820) 0
+ QStyleOption (0x0x7f8682311120) 0
+
+Class QStyleOptionTab
+ size=160 align=8
+ base size=156 base align=8
+QStyleOptionTab (0x0x7f86821c29c0) 0
+ QStyleOption (0x0x7f8682311660) 0
+
+Class QStyleOptionToolBar
+ size=88 align=8
+ base size=88 base align=8
+QStyleOptionToolBar (0x0x7f86821c2c98) 0
+ QStyleOption (0x0x7f8682311d80) 0
+
+Class QStyleOptionProgressBar
+ size=112 align=8
+ base size=111 base align=8
+QStyleOptionProgressBar (0x0x7f86821c2e38) 0
+ QStyleOption (0x0x7f8681f83300) 0
+
+Class QStyleOptionMenuItem
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionMenuItem (0x0x7f86821c2ea0) 0
+ QStyleOption (0x0x7f8681f83540) 0
+
+Class QStyleOptionDockWidget
+ size=96 align=8
+ base size=92 base align=8
+QStyleOptionDockWidget (0x0x7f86821c2f08) 0
+ QStyleOption (0x0x7f8681f83780) 0
+
+Class QStyleOptionViewItem
+ size=208 align=8
+ base size=208 base align=8
+QStyleOptionViewItem (0x0x7f86821c2f70) 0
+ QStyleOption (0x0x7f8681f839c0) 0
+
+Class QStyleOptionToolBox
+ size=104 align=8
+ base size=104 base align=8
+QStyleOptionToolBox (0x0x7f8681fae138) 0
+ QStyleOption (0x0x7f8681f83f00) 0
+
+Class QStyleOptionRubberBand
+ size=72 align=8
+ base size=69 base align=8
+QStyleOptionRubberBand (0x0x7f8681fae1a0) 0
+ QStyleOption (0x0x7f8681fdb180) 0
+
+Class QStyleOptionComplex
+ size=72 align=8
+ base size=72 base align=8
+QStyleOptionComplex (0x0x7f8681fae208) 0
+ QStyleOption (0x0x7f8681fdb420) 0
+
+Class QStyleOptionSlider
+ size=128 align=8
+ base size=128 base align=8
+QStyleOptionSlider (0x0x7f8681fae270) 0
+ QStyleOptionComplex (0x0x7f8681fae2d8) 0
+ QStyleOption (0x0x7f8681fdb6c0) 0
+
+Class QStyleOptionSpinBox
+ size=88 align=8
+ base size=81 base align=8
+QStyleOptionSpinBox (0x0x7f8681fae3a8) 0
+ QStyleOptionComplex (0x0x7f8681fae410) 0
+ QStyleOption (0x0x7f8681fdba80) 0
+
+Class QStyleOptionToolButton
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionToolButton (0x0x7f8681fae4e0) 0
+ QStyleOptionComplex (0x0x7f8681fae548) 0
+ QStyleOption (0x0x7f8681fdbcc0) 0
+
+Class QStyleOptionComboBox
+ size=144 align=8
+ base size=140 base align=8
+QStyleOptionComboBox (0x0x7f8681fae6e8) 0
+ QStyleOptionComplex (0x0x7f8681fae750) 0
+ QStyleOption (0x0x7f86820121e0) 0
+
+Class QStyleOptionTitleBar
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionTitleBar (0x0x7f8681fae7b8) 0
+ QStyleOptionComplex (0x0x7f8681fae820) 0
+ QStyleOption (0x0x7f8682012420) 0
+
+Class QStyleOptionGroupBox
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionGroupBox (0x0x7f8681fae888) 0
+ QStyleOptionComplex (0x0x7f8681fae8f0) 0
+ QStyleOption (0x0x7f8682012660) 0
+
+Class QStyleOptionSizeGrip
+ size=80 align=8
+ base size=76 base align=8
+QStyleOptionSizeGrip (0x0x7f8681fae958) 0
+ QStyleOptionComplex (0x0x7f8681fae9c0) 0
+ QStyleOption (0x0x7f86820128a0) 0
+
+Class QStyleOptionGraphicsItem
+ size=96 align=8
+ base size=96 base align=8
+QStyleOptionGraphicsItem (0x0x7f8681faea28) 0
+ QStyleOption (0x0x7f8682012ae0) 0
+
+Class QStyleHintReturn
+ size=8 align=4
+ base size=8 base align=4
+QStyleHintReturn (0x0x7f8682012e40) 0
+
+Class QStyleHintReturnMask
+ size=16 align=8
+ base size=16 base align=8
+QStyleHintReturnMask (0x0x7f8681faea90) 0
+ QStyleHintReturn (0x0x7f8682012ea0) 0
+
+Class QStyleHintReturnVariant
+ size=40 align=8
+ base size=40 base align=8
+QStyleHintReturnVariant (0x0x7f8681faeb60) 0
+ QStyleHintReturn (0x0x7f8682012f00) 0
+
+Class QAbstractItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemDelegate::QPrivateSignal (0x0x7f868204e0c0) 0 empty
+
+Vtable for QAbstractItemDelegate
+QAbstractItemDelegate::_ZTV21QAbstractItemDelegate: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QAbstractItemDelegate)
+16 (int (*)(...))QAbstractItemDelegate::metaObject
+24 (int (*)(...))QAbstractItemDelegate::qt_metacast
+32 (int (*)(...))QAbstractItemDelegate::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QAbstractItemDelegate::setEditorData
+152 (int (*)(...))QAbstractItemDelegate::setModelData
+160 (int (*)(...))QAbstractItemDelegate::updateEditorGeometry
+168 (int (*)(...))QAbstractItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+
+Class QAbstractItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemDelegate (0x0x7f8681faec30) 0
+ vptr=((& QAbstractItemDelegate::_ZTV21QAbstractItemDelegate) + 16)
+ QObject (0x0x7f868204e060) 0
+ primary-for QAbstractItemDelegate (0x0x7f8681faec30)
+
+Class QAbstractScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractScrollArea::QPrivateSignal (0x0x7f868204e300) 0 empty
+
+Vtable for QAbstractScrollArea
+QAbstractScrollArea::_ZTV19QAbstractScrollArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractScrollArea)
+16 (int (*)(...))QAbstractScrollArea::metaObject
+24 (int (*)(...))QAbstractScrollArea::qt_metacast
+32 (int (*)(...))QAbstractScrollArea::qt_metacall
+40 (int (*)(...))QAbstractScrollArea::~QAbstractScrollArea
+48 (int (*)(...))QAbstractScrollArea::~QAbstractScrollArea
+56 (int (*)(...))QAbstractScrollArea::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractScrollArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QAbstractScrollArea::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI19QAbstractScrollArea)
+488 (int (*)(...))QAbstractScrollArea::_ZThn16_N19QAbstractScrollAreaD1Ev
+496 (int (*)(...))QAbstractScrollArea::_ZThn16_N19QAbstractScrollAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractScrollArea
+ size=40 align=8
+ base size=40 base align=8
+QAbstractScrollArea (0x0x7f8681faec98) 0
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 16)
+ QFrame (0x0x7f8681faed00) 0
+ primary-for QAbstractScrollArea (0x0x7f8681faec98)
+ QWidget (0x0x7f8681ffbe00) 0
+ primary-for QFrame (0x0x7f8681faed00)
+ QObject (0x0x7f868204e240) 0
+ primary-for QWidget (0x0x7f8681ffbe00)
+ QPaintDevice (0x0x7f868204e2a0) 16
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 488)
+
+Class QAbstractItemView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemView::QPrivateSignal (0x0x7f868204e600) 0 empty
+
+Vtable for QAbstractItemView
+QAbstractItemView::_ZTV17QAbstractItemView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAbstractItemView)
+16 (int (*)(...))QAbstractItemView::metaObject
+24 (int (*)(...))QAbstractItemView::qt_metacast
+32 (int (*)(...))QAbstractItemView::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QAbstractScrollArea::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))__cxa_pure_virtual
+504 (int (*)(...))__cxa_pure_virtual
+512 (int (*)(...))__cxa_pure_virtual
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QAbstractItemView::setRootIndex
+560 (int (*)(...))QAbstractItemView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QAbstractItemView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QAbstractItemView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))__cxa_pure_virtual
+704 (int (*)(...))__cxa_pure_virtual
+712 (int (*)(...))__cxa_pure_virtual
+720 (int (*)(...))__cxa_pure_virtual
+728 (int (*)(...))__cxa_pure_virtual
+736 (int (*)(...))__cxa_pure_virtual
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI17QAbstractItemView)
+800 0
+808 0
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractItemView
+ size=40 align=8
+ base size=40 base align=8
+QAbstractItemView (0x0x7f8681faed68) 0
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 16)
+ QAbstractScrollArea (0x0x7f8681faedd0) 0
+ primary-for QAbstractItemView (0x0x7f8681faed68)
+ QFrame (0x0x7f8681faee38) 0
+ primary-for QAbstractScrollArea (0x0x7f8681faedd0)
+ QWidget (0x0x7f8682074000) 0
+ primary-for QFrame (0x0x7f8681faee38)
+ QObject (0x0x7f868204e540) 0
+ primary-for QWidget (0x0x7f8682074000)
+ QPaintDevice (0x0x7f868204e5a0) 16
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 800)
+
+Vtable for QAccessibleWidget
+QAccessibleWidget::_ZTV17QAccessibleWidget: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleWidget)
+16 (int (*)(...))QAccessibleWidget::~QAccessibleWidget
+24 (int (*)(...))QAccessibleWidget::~QAccessibleWidget
+32 (int (*)(...))QAccessibleWidget::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleWidget::window
+56 (int (*)(...))QAccessibleWidget::relations
+64 (int (*)(...))QAccessibleWidget::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))QAccessibleWidget::parent
+88 (int (*)(...))QAccessibleWidget::child
+96 (int (*)(...))QAccessibleWidget::childCount
+104 (int (*)(...))QAccessibleWidget::indexOfChild
+112 (int (*)(...))QAccessibleWidget::text
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleWidget::rect
+136 (int (*)(...))QAccessibleWidget::role
+144 (int (*)(...))QAccessibleWidget::state
+152 (int (*)(...))QAccessibleWidget::foregroundColor
+160 (int (*)(...))QAccessibleWidget::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleWidget::interface_cast
+184 (int (*)(...))QAccessibleWidget::actionNames
+192 (int (*)(...))QAccessibleWidget::doAction
+200 (int (*)(...))QAccessibleWidget::keyBindingsForAction
+208 (int (*)(...))-16
+216 (int (*)(...))(& _ZTI17QAccessibleWidget)
+224 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidgetD1Ev
+232 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidgetD0Ev
+240 (int (*)(...))QAccessibleWidget::_ZThn16_NK17QAccessibleWidget11actionNamesEv
+248 (int (*)(...))QAccessibleActionInterface::localizedActionName
+256 (int (*)(...))QAccessibleActionInterface::localizedActionDescription
+264 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidget8doActionERK7QString
+272 (int (*)(...))QAccessibleWidget::_ZThn16_NK17QAccessibleWidget20keyBindingsForActionERK7QString
+
+Class QAccessibleWidget
+ size=32 align=8
+ base size=32 base align=8
+QAccessibleWidget (0x0x7f8682095540) 0
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 16)
+ QAccessibleObject (0x0x7f8681fae340) 0
+ primary-for QAccessibleWidget (0x0x7f8682095540)
+ QAccessibleInterface (0x0x7f868204ef60) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f8681fae340)
+ QAccessibleActionInterface (0x0x7f86820c9000) 16 nearly-empty
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 224)
+
+Class QApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QApplication::QPrivateSignal (0x0x7f86820c9120) 0 empty
+
+Vtable for QApplication
+QApplication::_ZTV12QApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QApplication)
+16 (int (*)(...))QApplication::metaObject
+24 (int (*)(...))QApplication::qt_metacast
+32 (int (*)(...))QApplication::qt_metacall
+40 (int (*)(...))QApplication::~QApplication
+48 (int (*)(...))QApplication::~QApplication
+56 (int (*)(...))QApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QApplication::notify
+120 (int (*)(...))QApplication::compressEvent
+
+Class QApplication
+ size=16 align=8
+ base size=16 base align=8
+QApplication (0x0x7f86820d6000) 0
+ vptr=((& QApplication::_ZTV12QApplication) + 16)
+ QGuiApplication (0x0x7f86820d6068) 0
+ primary-for QApplication (0x0x7f86820d6000)
+ QCoreApplication (0x0x7f86820d60d0) 0
+ primary-for QGuiApplication (0x0x7f86820d6068)
+ QObject (0x0x7f86820c90c0) 0
+ primary-for QCoreApplication (0x0x7f86820d60d0)
+
+Vtable for QLayoutItem
+QLayoutItem::_ZTV11QLayoutItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QLayoutItem)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QLayoutItem::hasHeightForWidth
+96 (int (*)(...))QLayoutItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QLayoutItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QLayoutItem::controlTypes
+
+Class QLayoutItem
+ size=16 align=8
+ base size=12 base align=8
+QLayoutItem (0x0x7f86820c9360) 0
+ vptr=((& QLayoutItem::_ZTV11QLayoutItem) + 16)
+
+Vtable for QSpacerItem
+QSpacerItem::_ZTV11QSpacerItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSpacerItem)
+16 (int (*)(...))QSpacerItem::~QSpacerItem
+24 (int (*)(...))QSpacerItem::~QSpacerItem
+32 (int (*)(...))QSpacerItem::sizeHint
+40 (int (*)(...))QSpacerItem::minimumSize
+48 (int (*)(...))QSpacerItem::maximumSize
+56 (int (*)(...))QSpacerItem::expandingDirections
+64 (int (*)(...))QSpacerItem::setGeometry
+72 (int (*)(...))QSpacerItem::geometry
+80 (int (*)(...))QSpacerItem::isEmpty
+88 (int (*)(...))QLayoutItem::hasHeightForWidth
+96 (int (*)(...))QLayoutItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QLayoutItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QSpacerItem::spacerItem
+144 (int (*)(...))QLayoutItem::controlTypes
+
+Class QSpacerItem
+ size=40 align=8
+ base size=40 base align=8
+QSpacerItem (0x0x7f86820d6138) 0
+ vptr=((& QSpacerItem::_ZTV11QSpacerItem) + 16)
+ QLayoutItem (0x0x7f86820c95a0) 0
+ primary-for QSpacerItem (0x0x7f86820d6138)
+
+Vtable for QWidgetItem
+QWidgetItem::_ZTV11QWidgetItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWidgetItem)
+16 (int (*)(...))QWidgetItem::~QWidgetItem
+24 (int (*)(...))QWidgetItem::~QWidgetItem
+32 (int (*)(...))QWidgetItem::sizeHint
+40 (int (*)(...))QWidgetItem::minimumSize
+48 (int (*)(...))QWidgetItem::maximumSize
+56 (int (*)(...))QWidgetItem::expandingDirections
+64 (int (*)(...))QWidgetItem::setGeometry
+72 (int (*)(...))QWidgetItem::geometry
+80 (int (*)(...))QWidgetItem::isEmpty
+88 (int (*)(...))QWidgetItem::hasHeightForWidth
+96 (int (*)(...))QWidgetItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QWidgetItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QWidgetItem::controlTypes
+
+Class QWidgetItem
+ size=24 align=8
+ base size=24 base align=8
+QWidgetItem (0x0x7f86820d61a0) 0
+ vptr=((& QWidgetItem::_ZTV11QWidgetItem) + 16)
+ QLayoutItem (0x0x7f86820c97e0) 0
+ primary-for QWidgetItem (0x0x7f86820d61a0)
+
+Vtable for QWidgetItemV2
+QWidgetItemV2::_ZTV13QWidgetItemV2: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QWidgetItemV2)
+16 (int (*)(...))QWidgetItemV2::~QWidgetItemV2
+24 (int (*)(...))QWidgetItemV2::~QWidgetItemV2
+32 (int (*)(...))QWidgetItemV2::sizeHint
+40 (int (*)(...))QWidgetItemV2::minimumSize
+48 (int (*)(...))QWidgetItemV2::maximumSize
+56 (int (*)(...))QWidgetItem::expandingDirections
+64 (int (*)(...))QWidgetItem::setGeometry
+72 (int (*)(...))QWidgetItem::geometry
+80 (int (*)(...))QWidgetItem::isEmpty
+88 (int (*)(...))QWidgetItem::hasHeightForWidth
+96 (int (*)(...))QWidgetItemV2::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QWidgetItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QWidgetItem::controlTypes
+
+Class QWidgetItemV2
+ size=88 align=8
+ base size=88 base align=8
+QWidgetItemV2 (0x0x7f86820d6208) 0
+ vptr=((& QWidgetItemV2::_ZTV13QWidgetItemV2) + 16)
+ QWidgetItem (0x0x7f86820d6270) 0
+ primary-for QWidgetItemV2 (0x0x7f86820d6208)
+ QLayoutItem (0x0x7f86820c99c0) 0
+ primary-for QWidgetItem (0x0x7f86820d6270)
+
+Class QLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLayout::QPrivateSignal (0x0x7f86820c9b40) 0 empty
+
+Vtable for QLayout
+QLayout::_ZTV7QLayout: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QLayout)
+16 (int (*)(...))QLayout::metaObject
+24 (int (*)(...))QLayout::qt_metacast
+32 (int (*)(...))QLayout::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLayout::spacing
+120 (int (*)(...))QLayout::setSpacing
+128 (int (*)(...))QLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QLayout::expandingDirections
+160 (int (*)(...))QLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QLayout::setGeometry
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))-16
+264 (int (*)(...))(& _ZTI7QLayout)
+272 0
+280 0
+288 (int (*)(...))__cxa_pure_virtual
+296 (int (*)(...))QLayout::_ZThn16_NK7QLayout11minimumSizeEv
+304 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+312 (int (*)(...))QLayout::_ZThn16_NK7QLayout19expandingDirectionsEv
+320 (int (*)(...))QLayout::_ZThn16_N7QLayout11setGeometryERK5QRect
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+336 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+344 (int (*)(...))QLayoutItem::hasHeightForWidth
+352 (int (*)(...))QLayoutItem::heightForWidth
+360 (int (*)(...))QLayoutItem::minimumHeightForWidth
+368 (int (*)(...))QLayout::_ZThn16_N7QLayout10invalidateEv
+376 (int (*)(...))QLayoutItem::widget
+384 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+392 (int (*)(...))QLayoutItem::spacerItem
+400 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QLayout
+ size=32 align=8
+ base size=28 base align=8
+QLayout (0x0x7f8682095690) 0
+ vptr=((& QLayout::_ZTV7QLayout) + 16)
+ QObject (0x0x7f86820c9a80) 0
+ primary-for QLayout (0x0x7f8682095690)
+ QLayoutItem (0x0x7f86820c9ae0) 16
+ vptr=((& QLayout::_ZTV7QLayout) + 272)
+
+Class QGridLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGridLayout::QPrivateSignal (0x0x7f86820c9e40) 0 empty
+
+Vtable for QGridLayout
+QGridLayout::_ZTV11QGridLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QGridLayout)
+16 (int (*)(...))QGridLayout::metaObject
+24 (int (*)(...))QGridLayout::qt_metacast
+32 (int (*)(...))QGridLayout::qt_metacall
+40 (int (*)(...))QGridLayout::~QGridLayout
+48 (int (*)(...))QGridLayout::~QGridLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGridLayout::spacing
+120 (int (*)(...))QGridLayout::setSpacing
+128 (int (*)(...))QGridLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QGridLayout::addItem
+152 (int (*)(...))QGridLayout::expandingDirections
+160 (int (*)(...))QGridLayout::minimumSize
+168 (int (*)(...))QGridLayout::maximumSize
+176 (int (*)(...))QGridLayout::setGeometry
+184 (int (*)(...))QGridLayout::itemAt
+192 (int (*)(...))QGridLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QGridLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QGridLayout::sizeHint
+264 (int (*)(...))QGridLayout::hasHeightForWidth
+272 (int (*)(...))QGridLayout::heightForWidth
+280 (int (*)(...))QGridLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QGridLayout)
+304 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayoutD1Ev
+312 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayoutD0Ev
+320 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout8sizeHintEv
+328 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout11minimumSizeEv
+336 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout11maximumSizeEv
+344 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout19expandingDirectionsEv
+352 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout17hasHeightForWidthEv
+384 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout14heightForWidthEi
+392 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout21minimumHeightForWidthEi
+400 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QGridLayout
+ size=32 align=8
+ base size=28 base align=8
+QGridLayout (0x0x7f86820d62d8) 0
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 16)
+ QLayout (0x0x7f86820959a0) 0
+ primary-for QGridLayout (0x0x7f86820d62d8)
+ QObject (0x0x7f86820c9d80) 0
+ primary-for QLayout (0x0x7f86820959a0)
+ QLayoutItem (0x0x7f86820c9de0) 16
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 304)
+
+Class QBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBoxLayout::QPrivateSignal (0x0x7f8682134120) 0 empty
+
+Vtable for QBoxLayout
+QBoxLayout::_ZTV10QBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QBoxLayout)
+16 (int (*)(...))QBoxLayout::metaObject
+24 (int (*)(...))QBoxLayout::qt_metacast
+32 (int (*)(...))QBoxLayout::qt_metacall
+40 (int (*)(...))QBoxLayout::~QBoxLayout
+48 (int (*)(...))QBoxLayout::~QBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI10QBoxLayout)
+304 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayoutD1Ev
+312 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QBoxLayout (0x0x7f86820d6340) 0
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 16)
+ QLayout (0x0x7f8682095a10) 0
+ primary-for QBoxLayout (0x0x7f86820d6340)
+ QObject (0x0x7f8682134060) 0
+ primary-for QLayout (0x0x7f8682095a10)
+ QLayoutItem (0x0x7f86821340c0) 16
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 304)
+
+Class QHBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHBoxLayout::QPrivateSignal (0x0x7f8682134360) 0 empty
+
+Vtable for QHBoxLayout
+QHBoxLayout::_ZTV11QHBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHBoxLayout)
+16 (int (*)(...))QHBoxLayout::metaObject
+24 (int (*)(...))QHBoxLayout::qt_metacast
+32 (int (*)(...))QHBoxLayout::qt_metacall
+40 (int (*)(...))QHBoxLayout::~QHBoxLayout
+48 (int (*)(...))QHBoxLayout::~QHBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QHBoxLayout)
+304 (int (*)(...))QHBoxLayout::_ZThn16_N11QHBoxLayoutD1Ev
+312 (int (*)(...))QHBoxLayout::_ZThn16_N11QHBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QHBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QHBoxLayout (0x0x7f86820d63a8) 0
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 16)
+ QBoxLayout (0x0x7f86820d6410) 0
+ primary-for QHBoxLayout (0x0x7f86820d63a8)
+ QLayout (0x0x7f8682095d20) 0
+ primary-for QBoxLayout (0x0x7f86820d6410)
+ QObject (0x0x7f86821342a0) 0
+ primary-for QLayout (0x0x7f8682095d20)
+ QLayoutItem (0x0x7f8682134300) 16
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 304)
+
+Class QVBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVBoxLayout::QPrivateSignal (0x0x7f86821344e0) 0 empty
+
+Vtable for QVBoxLayout
+QVBoxLayout::_ZTV11QVBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QVBoxLayout)
+16 (int (*)(...))QVBoxLayout::metaObject
+24 (int (*)(...))QVBoxLayout::qt_metacast
+32 (int (*)(...))QVBoxLayout::qt_metacall
+40 (int (*)(...))QVBoxLayout::~QVBoxLayout
+48 (int (*)(...))QVBoxLayout::~QVBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QVBoxLayout)
+304 (int (*)(...))QVBoxLayout::_ZThn16_N11QVBoxLayoutD1Ev
+312 (int (*)(...))QVBoxLayout::_ZThn16_N11QVBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QVBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QVBoxLayout (0x0x7f86820d6478) 0
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 16)
+ QBoxLayout (0x0x7f86820d64e0) 0
+ primary-for QVBoxLayout (0x0x7f86820d6478)
+ QLayout (0x0x7f8682095d90) 0
+ primary-for QBoxLayout (0x0x7f86820d64e0)
+ QObject (0x0x7f8682134420) 0
+ primary-for QLayout (0x0x7f8682095d90)
+ QLayoutItem (0x0x7f8682134480) 16
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 304)
+
+Class QButtonGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QButtonGroup::QPrivateSignal (0x0x7f8682134600) 0 empty
+
+Vtable for QButtonGroup
+QButtonGroup::_ZTV12QButtonGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QButtonGroup)
+16 (int (*)(...))QButtonGroup::metaObject
+24 (int (*)(...))QButtonGroup::qt_metacast
+32 (int (*)(...))QButtonGroup::qt_metacall
+40 (int (*)(...))QButtonGroup::~QButtonGroup
+48 (int (*)(...))QButtonGroup::~QButtonGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QButtonGroup
+ size=16 align=8
+ base size=16 base align=8
+QButtonGroup (0x0x7f86820d6548) 0
+ vptr=((& QButtonGroup::_ZTV12QButtonGroup) + 16)
+ QObject (0x0x7f86821345a0) 0
+ primary-for QButtonGroup (0x0x7f86820d6548)
+
+Class QCalendarWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCalendarWidget::QPrivateSignal (0x0x7f8682134840) 0 empty
+
+Vtable for QCalendarWidget
+QCalendarWidget::_ZTV15QCalendarWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QCalendarWidget)
+16 (int (*)(...))QCalendarWidget::metaObject
+24 (int (*)(...))QCalendarWidget::qt_metacast
+32 (int (*)(...))QCalendarWidget::qt_metacall
+40 (int (*)(...))QCalendarWidget::~QCalendarWidget
+48 (int (*)(...))QCalendarWidget::~QCalendarWidget
+56 (int (*)(...))QCalendarWidget::event
+64 (int (*)(...))QCalendarWidget::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCalendarWidget::sizeHint
+136 (int (*)(...))QCalendarWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QCalendarWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QCalendarWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QCalendarWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QCalendarWidget::paintCell
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI15QCalendarWidget)
+456 (int (*)(...))QCalendarWidget::_ZThn16_N15QCalendarWidgetD1Ev
+464 (int (*)(...))QCalendarWidget::_ZThn16_N15QCalendarWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCalendarWidget
+ size=40 align=8
+ base size=40 base align=8
+QCalendarWidget (0x0x7f86820d65b0) 0
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 16)
+ QWidget (0x0x7f8682095e00) 0
+ primary-for QCalendarWidget (0x0x7f86820d65b0)
+ QObject (0x0x7f8682134780) 0
+ primary-for QWidget (0x0x7f8682095e00)
+ QPaintDevice (0x0x7f86821347e0) 16
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 456)
+
+Class QCheckBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCheckBox::QPrivateSignal (0x0x7f8682134cc0) 0 empty
+
+Vtable for QCheckBox
+QCheckBox::_ZTV9QCheckBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QCheckBox)
+16 (int (*)(...))QCheckBox::metaObject
+24 (int (*)(...))QCheckBox::qt_metacast
+32 (int (*)(...))QCheckBox::qt_metacall
+40 (int (*)(...))QCheckBox::~QCheckBox
+48 (int (*)(...))QCheckBox::~QCheckBox
+56 (int (*)(...))QCheckBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCheckBox::sizeHint
+136 (int (*)(...))QCheckBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QCheckBox::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QCheckBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QCheckBox::hitButton
+440 (int (*)(...))QCheckBox::checkStateSet
+448 (int (*)(...))QCheckBox::nextCheckState
+456 (int (*)(...))QCheckBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI9QCheckBox)
+480 (int (*)(...))QCheckBox::_ZThn16_N9QCheckBoxD1Ev
+488 (int (*)(...))QCheckBox::_ZThn16_N9QCheckBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCheckBox
+ size=40 align=8
+ base size=40 base align=8
+QCheckBox (0x0x7f86820d6618) 0
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 16)
+ QAbstractButton (0x0x7f86820d6680) 0
+ primary-for QCheckBox (0x0x7f86820d6618)
+ QWidget (0x0x7f8681d64230) 0
+ primary-for QAbstractButton (0x0x7f86820d6680)
+ QObject (0x0x7f8682134c00) 0
+ primary-for QWidget (0x0x7f8681d64230)
+ QPaintDevice (0x0x7f8682134c60) 16
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 480)
+
+Class QDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialog::QPrivateSignal (0x0x7f8682134f00) 0 empty
+
+Vtable for QDialog
+QDialog::_ZTV7QDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QDialog)
+16 (int (*)(...))QDialog::metaObject
+24 (int (*)(...))QDialog::qt_metacast
+32 (int (*)(...))QDialog::qt_metacall
+40 (int (*)(...))QDialog::~QDialog
+48 (int (*)(...))QDialog::~QDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI7QDialog)
+488 (int (*)(...))QDialog::_ZThn16_N7QDialogD1Ev
+496 (int (*)(...))QDialog::_ZThn16_N7QDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDialog
+ size=40 align=8
+ base size=40 base align=8
+QDialog (0x0x7f86820d66e8) 0
+ vptr=((& QDialog::_ZTV7QDialog) + 16)
+ QWidget (0x0x7f8681d642a0) 0
+ primary-for QDialog (0x0x7f86820d66e8)
+ QObject (0x0x7f8682134e40) 0
+ primary-for QWidget (0x0x7f8681d642a0)
+ QPaintDevice (0x0x7f8682134ea0) 16
+ vptr=((& QDialog::_ZTV7QDialog) + 488)
+
+Class QColorDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColorDialog::QPrivateSignal (0x0x7f8681d99180) 0 empty
+
+Vtable for QColorDialog
+QColorDialog::_ZTV12QColorDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QColorDialog)
+16 (int (*)(...))QColorDialog::metaObject
+24 (int (*)(...))QColorDialog::qt_metacast
+32 (int (*)(...))QColorDialog::qt_metacall
+40 (int (*)(...))QColorDialog::~QColorDialog
+48 (int (*)(...))QColorDialog::~QColorDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QColorDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QColorDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QColorDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QColorDialog)
+488 (int (*)(...))QColorDialog::_ZThn16_N12QColorDialogD1Ev
+496 (int (*)(...))QColorDialog::_ZThn16_N12QColorDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QColorDialog
+ size=40 align=8
+ base size=40 base align=8
+QColorDialog (0x0x7f86820d6750) 0
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 16)
+ QDialog (0x0x7f86820d67b8) 0
+ primary-for QColorDialog (0x0x7f86820d6750)
+ QWidget (0x0x7f8681d643f0) 0
+ primary-for QDialog (0x0x7f86820d67b8)
+ QObject (0x0x7f8681d990c0) 0
+ primary-for QWidget (0x0x7f8681d643f0)
+ QPaintDevice (0x0x7f8681d99120) 16
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 488)
+
+Class QColormap
+ size=8 align=8
+ base size=8 base align=8
+QColormap (0x0x7f8681d996c0) 0
+
+Class QColumnView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColumnView::QPrivateSignal (0x0x7f8681d997e0) 0 empty
+
+Vtable for QColumnView
+QColumnView::_ZTV11QColumnView: 109 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QColumnView)
+16 (int (*)(...))QColumnView::metaObject
+24 (int (*)(...))QColumnView::qt_metacast
+32 (int (*)(...))QColumnView::qt_metacall
+40 (int (*)(...))QColumnView::~QColumnView
+48 (int (*)(...))QColumnView::~QColumnView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QColumnView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QColumnView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QColumnView::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QColumnView::setModel
+480 (int (*)(...))QColumnView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QColumnView::visualRect
+504 (int (*)(...))QColumnView::scrollTo
+512 (int (*)(...))QColumnView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QColumnView::setRootIndex
+560 (int (*)(...))QAbstractItemView::doItemsLayout
+568 (int (*)(...))QColumnView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QColumnView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QColumnView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QAbstractItemView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QColumnView::moveCursor
+704 (int (*)(...))QColumnView::horizontalOffset
+712 (int (*)(...))QColumnView::verticalOffset
+720 (int (*)(...))QColumnView::isIndexHidden
+728 (int (*)(...))QColumnView::setSelection
+736 (int (*)(...))QColumnView::visualRegionForSelection
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QColumnView::createColumn
+792 (int (*)(...))-16
+800 (int (*)(...))(& _ZTI11QColumnView)
+808 (int (*)(...))QColumnView::_ZThn16_N11QColumnViewD1Ev
+816 (int (*)(...))QColumnView::_ZThn16_N11QColumnViewD0Ev
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QColumnView
+ size=40 align=8
+ base size=40 base align=8
+QColumnView (0x0x7f86820d6958) 0
+ vptr=((& QColumnView::_ZTV11QColumnView) + 16)
+ QAbstractItemView (0x0x7f86820d69c0) 0
+ primary-for QColumnView (0x0x7f86820d6958)
+ QAbstractScrollArea (0x0x7f86820d6a28) 0
+ primary-for QAbstractItemView (0x0x7f86820d69c0)
+ QFrame (0x0x7f86820d6a90) 0
+ primary-for QAbstractScrollArea (0x0x7f86820d6a28)
+ QWidget (0x0x7f8681d64700) 0
+ primary-for QFrame (0x0x7f86820d6a90)
+ QObject (0x0x7f8681d99720) 0
+ primary-for QWidget (0x0x7f8681d64700)
+ QPaintDevice (0x0x7f8681d99780) 16
+ vptr=((& QColumnView::_ZTV11QColumnView) + 808)
+
+Class QComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QComboBox::QPrivateSignal (0x0x7f8681d99a20) 0 empty
+
+Vtable for QComboBox
+QComboBox::_ZTV9QComboBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QComboBox)
+16 (int (*)(...))QComboBox::metaObject
+24 (int (*)(...))QComboBox::qt_metacast
+32 (int (*)(...))QComboBox::qt_metacall
+40 (int (*)(...))QComboBox::~QComboBox
+48 (int (*)(...))QComboBox::~QComboBox
+56 (int (*)(...))QComboBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QComboBox::sizeHint
+136 (int (*)(...))QComboBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QComboBox::mousePressEvent
+176 (int (*)(...))QComboBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QComboBox::wheelEvent
+208 (int (*)(...))QComboBox::keyPressEvent
+216 (int (*)(...))QComboBox::keyReleaseEvent
+224 (int (*)(...))QComboBox::focusInEvent
+232 (int (*)(...))QComboBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QComboBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QComboBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QComboBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QComboBox::showEvent
+352 (int (*)(...))QComboBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QComboBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QComboBox::inputMethodEvent
+416 (int (*)(...))QComboBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QComboBox::setModel
+440 (int (*)(...))QComboBox::showPopup
+448 (int (*)(...))QComboBox::hidePopup
+456 (int (*)(...))QComboBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI9QComboBox)
+480 (int (*)(...))QComboBox::_ZThn16_N9QComboBoxD1Ev
+488 (int (*)(...))QComboBox::_ZThn16_N9QComboBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QComboBox
+ size=40 align=8
+ base size=40 base align=8
+QComboBox (0x0x7f86820d6af8) 0
+ vptr=((& QComboBox::_ZTV9QComboBox) + 16)
+ QWidget (0x0x7f8681d64770) 0
+ primary-for QComboBox (0x0x7f86820d6af8)
+ QObject (0x0x7f8681d99960) 0
+ primary-for QWidget (0x0x7f8681d64770)
+ QPaintDevice (0x0x7f8681d999c0) 16
+ vptr=((& QComboBox::_ZTV9QComboBox) + 480)
+
+Class QPushButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPushButton::QPrivateSignal (0x0x7f8681e06000) 0 empty
+
+Vtable for QPushButton
+QPushButton::_ZTV11QPushButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPushButton)
+16 (int (*)(...))QPushButton::metaObject
+24 (int (*)(...))QPushButton::qt_metacast
+32 (int (*)(...))QPushButton::qt_metacall
+40 (int (*)(...))QPushButton::~QPushButton
+48 (int (*)(...))QPushButton::~QPushButton
+56 (int (*)(...))QPushButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QPushButton::sizeHint
+136 (int (*)(...))QPushButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QPushButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QPushButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QPushButton::focusInEvent
+232 (int (*)(...))QPushButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QPushButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QPushButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QPushButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI11QPushButton)
+480 (int (*)(...))QPushButton::_ZThn16_N11QPushButtonD1Ev
+488 (int (*)(...))QPushButton::_ZThn16_N11QPushButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QPushButton
+ size=40 align=8
+ base size=40 base align=8
+QPushButton (0x0x7f86820d6b60) 0
+ vptr=((& QPushButton::_ZTV11QPushButton) + 16)
+ QAbstractButton (0x0x7f86820d6bc8) 0
+ primary-for QPushButton (0x0x7f86820d6b60)
+ QWidget (0x0x7f8681d64c40) 0
+ primary-for QAbstractButton (0x0x7f86820d6bc8)
+ QObject (0x0x7f8681d99f00) 0
+ primary-for QWidget (0x0x7f8681d64c40)
+ QPaintDevice (0x0x7f8681d99f60) 16
+ vptr=((& QPushButton::_ZTV11QPushButton) + 480)
+
+Class QCommandLinkButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommandLinkButton::QPrivateSignal (0x0x7f8681e06240) 0 empty
+
+Vtable for QCommandLinkButton
+QCommandLinkButton::_ZTV18QCommandLinkButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QCommandLinkButton)
+16 (int (*)(...))QCommandLinkButton::metaObject
+24 (int (*)(...))QCommandLinkButton::qt_metacast
+32 (int (*)(...))QCommandLinkButton::qt_metacall
+40 (int (*)(...))QCommandLinkButton::~QCommandLinkButton
+48 (int (*)(...))QCommandLinkButton::~QCommandLinkButton
+56 (int (*)(...))QCommandLinkButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCommandLinkButton::sizeHint
+136 (int (*)(...))QCommandLinkButton::minimumSizeHint
+144 (int (*)(...))QCommandLinkButton::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QPushButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QPushButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QPushButton::focusInEvent
+232 (int (*)(...))QPushButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QCommandLinkButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QPushButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QCommandLinkButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI18QCommandLinkButton)
+480 (int (*)(...))QCommandLinkButton::_ZThn16_N18QCommandLinkButtonD1Ev
+488 (int (*)(...))QCommandLinkButton::_ZThn16_N18QCommandLinkButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCommandLinkButton
+ size=40 align=8
+ base size=40 base align=8
+QCommandLinkButton (0x0x7f86820d6c30) 0
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 16)
+ QPushButton (0x0x7f86820d6c98) 0
+ primary-for QCommandLinkButton (0x0x7f86820d6c30)
+ QAbstractButton (0x0x7f86820d6d00) 0
+ primary-for QPushButton (0x0x7f86820d6c98)
+ QWidget (0x0x7f8681d64cb0) 0
+ primary-for QAbstractButton (0x0x7f86820d6d00)
+ QObject (0x0x7f8681e06180) 0
+ primary-for QWidget (0x0x7f8681d64cb0)
+ QPaintDevice (0x0x7f8681e061e0) 16
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 480)
+
+Class QCommonStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommonStyle::QPrivateSignal (0x0x7f8681e06420) 0 empty
+
+Vtable for QCommonStyle
+QCommonStyle::_ZTV12QCommonStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QCommonStyle)
+16 (int (*)(...))QCommonStyle::metaObject
+24 (int (*)(...))QCommonStyle::qt_metacast
+32 (int (*)(...))QCommonStyle::qt_metacall
+40 (int (*)(...))QCommonStyle::~QCommonStyle
+48 (int (*)(...))QCommonStyle::~QCommonStyle
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCommonStyle::polish
+120 (int (*)(...))QCommonStyle::unpolish
+128 (int (*)(...))QCommonStyle::polish
+136 (int (*)(...))QCommonStyle::unpolish
+144 (int (*)(...))QCommonStyle::polish
+152 (int (*)(...))QStyle::itemTextRect
+160 (int (*)(...))QStyle::itemPixmapRect
+168 (int (*)(...))QStyle::drawItemText
+176 (int (*)(...))QStyle::drawItemPixmap
+184 (int (*)(...))QStyle::standardPalette
+192 (int (*)(...))QCommonStyle::drawPrimitive
+200 (int (*)(...))QCommonStyle::drawControl
+208 (int (*)(...))QCommonStyle::subElementRect
+216 (int (*)(...))QCommonStyle::drawComplexControl
+224 (int (*)(...))QCommonStyle::hitTestComplexControl
+232 (int (*)(...))QCommonStyle::subControlRect
+240 (int (*)(...))QCommonStyle::pixelMetric
+248 (int (*)(...))QCommonStyle::sizeFromContents
+256 (int (*)(...))QCommonStyle::styleHint
+264 (int (*)(...))QCommonStyle::standardPixmap
+272 (int (*)(...))QCommonStyle::standardIcon
+280 (int (*)(...))QCommonStyle::generatedIconPixmap
+288 (int (*)(...))QCommonStyle::layoutSpacing
+
+Class QCommonStyle
+ size=16 align=8
+ base size=16 base align=8
+QCommonStyle (0x0x7f86820d6d68) 0
+ vptr=((& QCommonStyle::_ZTV12QCommonStyle) + 16)
+ QStyle (0x0x7f86820d6dd0) 0
+ primary-for QCommonStyle (0x0x7f86820d6d68)
+ QObject (0x0x7f8681e063c0) 0
+ primary-for QStyle (0x0x7f86820d6dd0)
+
+Class QCompleter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCompleter::QPrivateSignal (0x0x7f8681e06600) 0 empty
+
+Vtable for QCompleter
+QCompleter::_ZTV10QCompleter: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QCompleter)
+16 (int (*)(...))QCompleter::metaObject
+24 (int (*)(...))QCompleter::qt_metacast
+32 (int (*)(...))QCompleter::qt_metacall
+40 (int (*)(...))QCompleter::~QCompleter
+48 (int (*)(...))QCompleter::~QCompleter
+56 (int (*)(...))QCompleter::event
+64 (int (*)(...))QCompleter::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCompleter::pathFromIndex
+120 (int (*)(...))QCompleter::splitPath
+
+Class QCompleter
+ size=16 align=8
+ base size=16 base align=8
+QCompleter (0x0x7f86820d6e38) 0
+ vptr=((& QCompleter::_ZTV10QCompleter) + 16)
+ QObject (0x0x7f8681e065a0) 0
+ primary-for QCompleter (0x0x7f86820d6e38)
+
+Class QDataWidgetMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDataWidgetMapper::QPrivateSignal (0x0x7f8681e06960) 0 empty
+
+Vtable for QDataWidgetMapper
+QDataWidgetMapper::_ZTV17QDataWidgetMapper: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QDataWidgetMapper)
+16 (int (*)(...))QDataWidgetMapper::metaObject
+24 (int (*)(...))QDataWidgetMapper::qt_metacast
+32 (int (*)(...))QDataWidgetMapper::qt_metacall
+40 (int (*)(...))QDataWidgetMapper::~QDataWidgetMapper
+48 (int (*)(...))QDataWidgetMapper::~QDataWidgetMapper
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDataWidgetMapper::setCurrentIndex
+
+Class QDataWidgetMapper
+ size=16 align=8
+ base size=16 base align=8
+QDataWidgetMapper (0x0x7f86820d6ea0) 0
+ vptr=((& QDataWidgetMapper::_ZTV17QDataWidgetMapper) + 16)
+ QObject (0x0x7f8681e06900) 0
+ primary-for QDataWidgetMapper (0x0x7f86820d6ea0)
+
+Class QDateTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateTimeEdit::QPrivateSignal (0x0x7f8681e06c60) 0 empty
+
+Vtable for QDateTimeEdit
+QDateTimeEdit::_ZTV13QDateTimeEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QDateTimeEdit)
+16 (int (*)(...))QDateTimeEdit::metaObject
+24 (int (*)(...))QDateTimeEdit::qt_metacast
+32 (int (*)(...))QDateTimeEdit::qt_metacall
+40 (int (*)(...))QDateTimeEdit::~QDateTimeEdit
+48 (int (*)(...))QDateTimeEdit::~QDateTimeEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI13QDateTimeEdit)
+512 (int (*)(...))QDateTimeEdit::_ZThn16_N13QDateTimeEditD1Ev
+520 (int (*)(...))QDateTimeEdit::_ZThn16_N13QDateTimeEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDateTimeEdit
+ size=40 align=8
+ base size=40 base align=8
+QDateTimeEdit (0x0x7f86820d6f08) 0
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 16)
+ QAbstractSpinBox (0x0x7f86820d6f70) 0
+ primary-for QDateTimeEdit (0x0x7f86820d6f08)
+ QWidget (0x0x7f8681e460e0) 0
+ primary-for QAbstractSpinBox (0x0x7f86820d6f70)
+ QObject (0x0x7f8681e06ba0) 0
+ primary-for QWidget (0x0x7f8681e460e0)
+ QPaintDevice (0x0x7f8681e06c00) 16
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 512)
+
+Class QTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeEdit::QPrivateSignal (0x0x7f8681e80240) 0 empty
+
+Vtable for QTimeEdit
+QTimeEdit::_ZTV9QTimeEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTimeEdit)
+16 (int (*)(...))QTimeEdit::metaObject
+24 (int (*)(...))QTimeEdit::qt_metacast
+32 (int (*)(...))QTimeEdit::qt_metacall
+40 (int (*)(...))QTimeEdit::~QTimeEdit
+48 (int (*)(...))QTimeEdit::~QTimeEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI9QTimeEdit)
+512 (int (*)(...))QTimeEdit::_ZThn16_N9QTimeEditD1Ev
+520 (int (*)(...))QTimeEdit::_ZThn16_N9QTimeEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTimeEdit
+ size=40 align=8
+ base size=40 base align=8
+QTimeEdit (0x0x7f8681e73138) 0
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 16)
+ QDateTimeEdit (0x0x7f8681e731a0) 0
+ primary-for QTimeEdit (0x0x7f8681e73138)
+ QAbstractSpinBox (0x0x7f8681e73208) 0
+ primary-for QDateTimeEdit (0x0x7f8681e731a0)
+ QWidget (0x0x7f8681e465b0) 0
+ primary-for QAbstractSpinBox (0x0x7f8681e73208)
+ QObject (0x0x7f8681e80180) 0
+ primary-for QWidget (0x0x7f8681e465b0)
+ QPaintDevice (0x0x7f8681e801e0) 16
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 512)
+
+Class QDateEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateEdit::QPrivateSignal (0x0x7f8681e803c0) 0 empty
+
+Vtable for QDateEdit
+QDateEdit::_ZTV9QDateEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QDateEdit)
+16 (int (*)(...))QDateEdit::metaObject
+24 (int (*)(...))QDateEdit::qt_metacast
+32 (int (*)(...))QDateEdit::qt_metacall
+40 (int (*)(...))QDateEdit::~QDateEdit
+48 (int (*)(...))QDateEdit::~QDateEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI9QDateEdit)
+512 (int (*)(...))QDateEdit::_ZThn16_N9QDateEditD1Ev
+520 (int (*)(...))QDateEdit::_ZThn16_N9QDateEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDateEdit
+ size=40 align=8
+ base size=40 base align=8
+QDateEdit (0x0x7f8681e73270) 0
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 16)
+ QDateTimeEdit (0x0x7f8681e732d8) 0
+ primary-for QDateEdit (0x0x7f8681e73270)
+ QAbstractSpinBox (0x0x7f8681e73340) 0
+ primary-for QDateTimeEdit (0x0x7f8681e732d8)
+ QWidget (0x0x7f8681e46620) 0
+ primary-for QAbstractSpinBox (0x0x7f8681e73340)
+ QObject (0x0x7f8681e80300) 0
+ primary-for QWidget (0x0x7f8681e46620)
+ QPaintDevice (0x0x7f8681e80360) 16
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 512)
+
+Class QDial::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDial::QPrivateSignal (0x0x7f8681e80660) 0 empty
+
+Vtable for QDial
+QDial::_ZTV5QDial: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDial)
+16 (int (*)(...))QDial::metaObject
+24 (int (*)(...))QDial::qt_metacast
+32 (int (*)(...))QDial::qt_metacall
+40 (int (*)(...))QDial::~QDial
+48 (int (*)(...))QDial::~QDial
+56 (int (*)(...))QDial::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDial::sizeHint
+136 (int (*)(...))QDial::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDial::mousePressEvent
+176 (int (*)(...))QDial::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QDial::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDial::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDial::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDial::sliderChange
+440 (int (*)(...))QDial::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI5QDial)
+464 (int (*)(...))QDial::_ZThn16_N5QDialD1Ev
+472 (int (*)(...))QDial::_ZThn16_N5QDialD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDial
+ size=40 align=8
+ base size=40 base align=8
+QDial (0x0x7f8681e733a8) 0
+ vptr=((& QDial::_ZTV5QDial) + 16)
+ QAbstractSlider (0x0x7f8681e73410) 0
+ primary-for QDial (0x0x7f8681e733a8)
+ QWidget (0x0x7f8681e46690) 0
+ primary-for QAbstractSlider (0x0x7f8681e73410)
+ QObject (0x0x7f8681e805a0) 0
+ primary-for QWidget (0x0x7f8681e46690)
+ QPaintDevice (0x0x7f8681e80600) 16
+ vptr=((& QDial::_ZTV5QDial) + 464)
+
+Class QDialogButtonBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialogButtonBox::QPrivateSignal (0x0x7f8681e808a0) 0 empty
+
+Vtable for QDialogButtonBox
+QDialogButtonBox::_ZTV16QDialogButtonBox: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QDialogButtonBox)
+16 (int (*)(...))QDialogButtonBox::metaObject
+24 (int (*)(...))QDialogButtonBox::qt_metacast
+32 (int (*)(...))QDialogButtonBox::qt_metacall
+40 (int (*)(...))QDialogButtonBox::~QDialogButtonBox
+48 (int (*)(...))QDialogButtonBox::~QDialogButtonBox
+56 (int (*)(...))QDialogButtonBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QDialogButtonBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI16QDialogButtonBox)
+448 (int (*)(...))QDialogButtonBox::_ZThn16_N16QDialogButtonBoxD1Ev
+456 (int (*)(...))QDialogButtonBox::_ZThn16_N16QDialogButtonBoxD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDialogButtonBox
+ size=40 align=8
+ base size=40 base align=8
+QDialogButtonBox (0x0x7f8681e73478) 0
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 16)
+ QWidget (0x0x7f8681e46700) 0
+ primary-for QDialogButtonBox (0x0x7f8681e73478)
+ QObject (0x0x7f8681e807e0) 0
+ primary-for QWidget (0x0x7f8681e46700)
+ QPaintDevice (0x0x7f8681e80840) 16
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 448)
+
+Class QDockWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDockWidget::QPrivateSignal (0x0x7f8681e80ea0) 0 empty
+
+Vtable for QDockWidget
+QDockWidget::_ZTV11QDockWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QDockWidget)
+16 (int (*)(...))QDockWidget::metaObject
+24 (int (*)(...))QDockWidget::qt_metacast
+32 (int (*)(...))QDockWidget::qt_metacall
+40 (int (*)(...))QDockWidget::~QDockWidget
+48 (int (*)(...))QDockWidget::~QDockWidget
+56 (int (*)(...))QDockWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDockWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QDockWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QDockWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDockWidget::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QDockWidget)
+456 (int (*)(...))QDockWidget::_ZThn16_N11QDockWidgetD1Ev
+464 (int (*)(...))QDockWidget::_ZThn16_N11QDockWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDockWidget
+ size=40 align=8
+ base size=40 base align=8
+QDockWidget (0x0x7f8681e73618) 0
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 16)
+ QWidget (0x0x7f8681ead7e0) 0
+ primary-for QDockWidget (0x0x7f8681e73618)
+ QObject (0x0x7f8681e80de0) 0
+ primary-for QWidget (0x0x7f8681ead7e0)
+ QPaintDevice (0x0x7f8681e80e40) 16
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 456)
+
+Class QTileRules
+ size=8 align=4
+ base size=8 base align=4
+QTileRules (0x0x7f8681eec4e0) 0
+
+Class QErrorMessage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QErrorMessage::QPrivateSignal (0x0x7f8681eecb40) 0 empty
+
+Vtable for QErrorMessage
+QErrorMessage::_ZTV13QErrorMessage: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QErrorMessage)
+16 (int (*)(...))QErrorMessage::metaObject
+24 (int (*)(...))QErrorMessage::qt_metacast
+32 (int (*)(...))QErrorMessage::qt_metacall
+40 (int (*)(...))QErrorMessage::~QErrorMessage
+48 (int (*)(...))QErrorMessage::~QErrorMessage
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QErrorMessage::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QErrorMessage::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI13QErrorMessage)
+488 (int (*)(...))QErrorMessage::_ZThn16_N13QErrorMessageD1Ev
+496 (int (*)(...))QErrorMessage::_ZThn16_N13QErrorMessageD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QErrorMessage
+ size=40 align=8
+ base size=40 base align=8
+QErrorMessage (0x0x7f8681e738f0) 0
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 16)
+ QDialog (0x0x7f8681e73958) 0
+ primary-for QErrorMessage (0x0x7f8681e738f0)
+ QWidget (0x0x7f8681f13230) 0
+ primary-for QDialog (0x0x7f8681e73958)
+ QObject (0x0x7f8681eeca80) 0
+ primary-for QWidget (0x0x7f8681f13230)
+ QPaintDevice (0x0x7f8681eecae0) 16
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 488)
+
+Class QFileDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDialog::QPrivateSignal (0x0x7f8681eecd80) 0 empty
+
+Vtable for QFileDialog
+QFileDialog::_ZTV11QFileDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFileDialog)
+16 (int (*)(...))QFileDialog::metaObject
+24 (int (*)(...))QFileDialog::qt_metacast
+32 (int (*)(...))QFileDialog::qt_metacall
+40 (int (*)(...))QFileDialog::~QFileDialog
+48 (int (*)(...))QFileDialog::~QFileDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QFileDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFileDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QFileDialog::done
+456 (int (*)(...))QFileDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QFileDialog)
+488 (int (*)(...))QFileDialog::_ZThn16_N11QFileDialogD1Ev
+496 (int (*)(...))QFileDialog::_ZThn16_N11QFileDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFileDialog
+ size=40 align=8
+ base size=40 base align=8
+QFileDialog (0x0x7f8681e739c0) 0
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 16)
+ QDialog (0x0x7f8681e73a28) 0
+ primary-for QFileDialog (0x0x7f8681e739c0)
+ QWidget (0x0x7f8681f132a0) 0
+ primary-for QDialog (0x0x7f8681e73a28)
+ QObject (0x0x7f8681eeccc0) 0
+ primary-for QWidget (0x0x7f8681f132a0)
+ QPaintDevice (0x0x7f8681eecd20) 16
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 488)
+
+Vtable for QFileIconProvider
+QFileIconProvider::_ZTV17QFileIconProvider: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFileIconProvider)
+16 (int (*)(...))QFileIconProvider::~QFileIconProvider
+24 (int (*)(...))QFileIconProvider::~QFileIconProvider
+32 (int (*)(...))QFileIconProvider::icon
+40 (int (*)(...))QFileIconProvider::icon
+48 (int (*)(...))QAbstractFileIconProvider::type
+56 (int (*)(...))QAbstractFileIconProvider::setOptions
+64 (int (*)(...))QAbstractFileIconProvider::options
+
+Class QFileIconProvider
+ size=16 align=8
+ base size=16 base align=8
+QFileIconProvider (0x0x7f8681e73bc8) 0
+ vptr=((& QFileIconProvider::_ZTV17QFileIconProvider) + 16)
+ QAbstractFileIconProvider (0x0x7f8681b68660) 0
+ primary-for QFileIconProvider (0x0x7f8681e73bc8)
+
+Class QFocusFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFocusFrame::QPrivateSignal (0x0x7f8681b68840) 0 empty
+
+Vtable for QFocusFrame
+QFocusFrame::_ZTV11QFocusFrame: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusFrame)
+16 (int (*)(...))QFocusFrame::metaObject
+24 (int (*)(...))QFocusFrame::qt_metacast
+32 (int (*)(...))QFocusFrame::qt_metacall
+40 (int (*)(...))QFocusFrame::~QFocusFrame
+48 (int (*)(...))QFocusFrame::~QFocusFrame
+56 (int (*)(...))QFocusFrame::event
+64 (int (*)(...))QFocusFrame::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFocusFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFocusFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QFocusFrame)
+456 (int (*)(...))QFocusFrame::_ZThn16_N11QFocusFrameD1Ev
+464 (int (*)(...))QFocusFrame::_ZThn16_N11QFocusFrameD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFocusFrame
+ size=40 align=8
+ base size=40 base align=8
+QFocusFrame (0x0x7f8681e73c30) 0
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 16)
+ QWidget (0x0x7f8681f13bd0) 0
+ primary-for QFocusFrame (0x0x7f8681e73c30)
+ QObject (0x0x7f8681b68780) 0
+ primary-for QWidget (0x0x7f8681f13bd0)
+ QPaintDevice (0x0x7f8681b687e0) 16
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 456)
+
+Class QFontComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontComboBox::QPrivateSignal (0x0x7f8681b68a80) 0 empty
+
+Vtable for QFontComboBox
+QFontComboBox::_ZTV13QFontComboBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QFontComboBox)
+16 (int (*)(...))QFontComboBox::metaObject
+24 (int (*)(...))QFontComboBox::qt_metacast
+32 (int (*)(...))QFontComboBox::qt_metacall
+40 (int (*)(...))QFontComboBox::~QFontComboBox
+48 (int (*)(...))QFontComboBox::~QFontComboBox
+56 (int (*)(...))QFontComboBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFontComboBox::sizeHint
+136 (int (*)(...))QComboBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QComboBox::mousePressEvent
+176 (int (*)(...))QComboBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QComboBox::wheelEvent
+208 (int (*)(...))QComboBox::keyPressEvent
+216 (int (*)(...))QComboBox::keyReleaseEvent
+224 (int (*)(...))QComboBox::focusInEvent
+232 (int (*)(...))QComboBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QComboBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QComboBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QComboBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QComboBox::showEvent
+352 (int (*)(...))QComboBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QComboBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QComboBox::inputMethodEvent
+416 (int (*)(...))QComboBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QComboBox::setModel
+440 (int (*)(...))QComboBox::showPopup
+448 (int (*)(...))QComboBox::hidePopup
+456 (int (*)(...))QComboBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI13QFontComboBox)
+480 (int (*)(...))QFontComboBox::_ZThn16_N13QFontComboBoxD1Ev
+488 (int (*)(...))QFontComboBox::_ZThn16_N13QFontComboBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFontComboBox
+ size=40 align=8
+ base size=40 base align=8
+QFontComboBox (0x0x7f8681e73c98) 0
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 16)
+ QComboBox (0x0x7f8681e73d00) 0
+ primary-for QFontComboBox (0x0x7f8681e73c98)
+ QWidget (0x0x7f8681f13c40) 0
+ primary-for QComboBox (0x0x7f8681e73d00)
+ QObject (0x0x7f8681b689c0) 0
+ primary-for QWidget (0x0x7f8681f13c40)
+ QPaintDevice (0x0x7f8681b68a20) 16
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 480)
+
+Class QFontDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontDialog::QPrivateSignal (0x0x7f8681bb70c0) 0 empty
+
+Vtable for QFontDialog
+QFontDialog::_ZTV11QFontDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFontDialog)
+16 (int (*)(...))QFontDialog::metaObject
+24 (int (*)(...))QFontDialog::qt_metacast
+32 (int (*)(...))QFontDialog::qt_metacall
+40 (int (*)(...))QFontDialog::~QFontDialog
+48 (int (*)(...))QFontDialog::~QFontDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QFontDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QFontDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFontDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QFontDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QFontDialog)
+488 (int (*)(...))QFontDialog::_ZThn16_N11QFontDialogD1Ev
+496 (int (*)(...))QFontDialog::_ZThn16_N11QFontDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFontDialog
+ size=40 align=8
+ base size=40 base align=8
+QFontDialog (0x0x7f8681e73ea0) 0
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 16)
+ QDialog (0x0x7f8681e73f08) 0
+ primary-for QFontDialog (0x0x7f8681e73ea0)
+ QWidget (0x0x7f8681f13ee0) 0
+ primary-for QDialog (0x0x7f8681e73f08)
+ QObject (0x0x7f8681bb7000) 0
+ primary-for QWidget (0x0x7f8681f13ee0)
+ QPaintDevice (0x0x7f8681bb7060) 16
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 488)
+
+Class QFormLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFormLayout::QPrivateSignal (0x0x7f8681bb76c0) 0 empty
+
+Class QFormLayout::TakeRowResult
+ size=16 align=8
+ base size=16 base align=8
+QFormLayout::TakeRowResult (0x0x7f8681bb7720) 0
+
+Vtable for QFormLayout
+QFormLayout::_ZTV11QFormLayout: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFormLayout)
+16 (int (*)(...))QFormLayout::metaObject
+24 (int (*)(...))QFormLayout::qt_metacast
+32 (int (*)(...))QFormLayout::qt_metacall
+40 (int (*)(...))QFormLayout::~QFormLayout
+48 (int (*)(...))QFormLayout::~QFormLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFormLayout::spacing
+120 (int (*)(...))QFormLayout::setSpacing
+128 (int (*)(...))QFormLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QFormLayout::addItem
+152 (int (*)(...))QFormLayout::expandingDirections
+160 (int (*)(...))QFormLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QFormLayout::setGeometry
+184 (int (*)(...))QFormLayout::itemAt
+192 (int (*)(...))QFormLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QFormLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QFormLayout::sizeHint
+264 (int (*)(...))QFormLayout::hasHeightForWidth
+272 (int (*)(...))QFormLayout::heightForWidth
+280 (int (*)(...))-16
+288 (int (*)(...))(& _ZTI11QFormLayout)
+296 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayoutD1Ev
+304 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayoutD0Ev
+312 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout8sizeHintEv
+320 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout11minimumSizeEv
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+336 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout19expandingDirectionsEv
+344 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayout11setGeometryERK5QRect
+352 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+368 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout17hasHeightForWidthEv
+376 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout14heightForWidthEi
+384 (int (*)(...))QLayoutItem::minimumHeightForWidth
+392 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayout10invalidateEv
+400 (int (*)(...))QLayoutItem::widget
+408 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+416 (int (*)(...))QLayoutItem::spacerItem
+424 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QFormLayout
+ size=32 align=8
+ base size=28 base align=8
+QFormLayout (0x0x7f8681bc90d0) 0
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 16)
+ QLayout (0x0x7f8681bba230) 0
+ primary-for QFormLayout (0x0x7f8681bc90d0)
+ QObject (0x0x7f8681bb7600) 0
+ primary-for QLayout (0x0x7f8681bba230)
+ QLayoutItem (0x0x7f8681bb7660) 16
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 296)
+
+Class QGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGesture::QPrivateSignal (0x0x7f8681c25240) 0 empty
+
+Vtable for QGesture
+QGesture::_ZTV8QGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QGesture)
+16 (int (*)(...))QGesture::metaObject
+24 (int (*)(...))QGesture::qt_metacast
+32 (int (*)(...))QGesture::qt_metacall
+40 (int (*)(...))QGesture::~QGesture
+48 (int (*)(...))QGesture::~QGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QGesture
+ size=16 align=8
+ base size=16 base align=8
+QGesture (0x0x7f8681c1bb60) 0
+ vptr=((& QGesture::_ZTV8QGesture) + 16)
+ QObject (0x0x7f8681c251e0) 0
+ primary-for QGesture (0x0x7f8681c1bb60)
+
+Class QPanGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPanGesture::QPrivateSignal (0x0x7f8681c25420) 0 empty
+
+Vtable for QPanGesture
+QPanGesture::_ZTV11QPanGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPanGesture)
+16 (int (*)(...))QPanGesture::metaObject
+24 (int (*)(...))QPanGesture::qt_metacast
+32 (int (*)(...))QPanGesture::qt_metacall
+40 (int (*)(...))QPanGesture::~QPanGesture
+48 (int (*)(...))QPanGesture::~QPanGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPanGesture
+ size=16 align=8
+ base size=16 base align=8
+QPanGesture (0x0x7f8681c1bbc8) 0
+ vptr=((& QPanGesture::_ZTV11QPanGesture) + 16)
+ QGesture (0x0x7f8681c1bc30) 0
+ primary-for QPanGesture (0x0x7f8681c1bbc8)
+ QObject (0x0x7f8681c253c0) 0
+ primary-for QGesture (0x0x7f8681c1bc30)
+
+Class QPinchGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPinchGesture::QPrivateSignal (0x0x7f8681c25600) 0 empty
+
+Vtable for QPinchGesture
+QPinchGesture::_ZTV13QPinchGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPinchGesture)
+16 (int (*)(...))QPinchGesture::metaObject
+24 (int (*)(...))QPinchGesture::qt_metacast
+32 (int (*)(...))QPinchGesture::qt_metacall
+40 (int (*)(...))QPinchGesture::~QPinchGesture
+48 (int (*)(...))QPinchGesture::~QPinchGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPinchGesture
+ size=16 align=8
+ base size=16 base align=8
+QPinchGesture (0x0x7f8681c1bc98) 0
+ vptr=((& QPinchGesture::_ZTV13QPinchGesture) + 16)
+ QGesture (0x0x7f8681c1bd00) 0
+ primary-for QPinchGesture (0x0x7f8681c1bc98)
+ QObject (0x0x7f8681c255a0) 0
+ primary-for QGesture (0x0x7f8681c1bd00)
+
+Class QSwipeGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSwipeGesture::QPrivateSignal (0x0x7f8681c25d80) 0 empty
+
+Vtable for QSwipeGesture
+QSwipeGesture::_ZTV13QSwipeGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSwipeGesture)
+16 (int (*)(...))QSwipeGesture::metaObject
+24 (int (*)(...))QSwipeGesture::qt_metacast
+32 (int (*)(...))QSwipeGesture::qt_metacall
+40 (int (*)(...))QSwipeGesture::~QSwipeGesture
+48 (int (*)(...))QSwipeGesture::~QSwipeGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSwipeGesture
+ size=16 align=8
+ base size=16 base align=8
+QSwipeGesture (0x0x7f8681c1bea0) 0
+ vptr=((& QSwipeGesture::_ZTV13QSwipeGesture) + 16)
+ QGesture (0x0x7f8681c1bf08) 0
+ primary-for QSwipeGesture (0x0x7f8681c1bea0)
+ QObject (0x0x7f8681c25d20) 0
+ primary-for QGesture (0x0x7f8681c1bf08)
+
+Class QTapGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapGesture::QPrivateSignal (0x0x7f8681c71060) 0 empty
+
+Vtable for QTapGesture
+QTapGesture::_ZTV11QTapGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTapGesture)
+16 (int (*)(...))QTapGesture::metaObject
+24 (int (*)(...))QTapGesture::qt_metacast
+32 (int (*)(...))QTapGesture::qt_metacall
+40 (int (*)(...))QTapGesture::~QTapGesture
+48 (int (*)(...))QTapGesture::~QTapGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTapGesture
+ size=16 align=8
+ base size=16 base align=8
+QTapGesture (0x0x7f8681c1bf70) 0
+ vptr=((& QTapGesture::_ZTV11QTapGesture) + 16)
+ QGesture (0x0x7f8681c70000) 0
+ primary-for QTapGesture (0x0x7f8681c1bf70)
+ QObject (0x0x7f8681c71000) 0
+ primary-for QGesture (0x0x7f8681c70000)
+
+Class QTapAndHoldGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapAndHoldGesture::QPrivateSignal (0x0x7f8681c71240) 0 empty
+
+Vtable for QTapAndHoldGesture
+QTapAndHoldGesture::_ZTV18QTapAndHoldGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QTapAndHoldGesture)
+16 (int (*)(...))QTapAndHoldGesture::metaObject
+24 (int (*)(...))QTapAndHoldGesture::qt_metacast
+32 (int (*)(...))QTapAndHoldGesture::qt_metacall
+40 (int (*)(...))QTapAndHoldGesture::~QTapAndHoldGesture
+48 (int (*)(...))QTapAndHoldGesture::~QTapAndHoldGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTapAndHoldGesture
+ size=16 align=8
+ base size=16 base align=8
+QTapAndHoldGesture (0x0x7f8681c70068) 0
+ vptr=((& QTapAndHoldGesture::_ZTV18QTapAndHoldGesture) + 16)
+ QGesture (0x0x7f8681c700d0) 0
+ primary-for QTapAndHoldGesture (0x0x7f8681c70068)
+ QObject (0x0x7f8681c711e0) 0
+ primary-for QGesture (0x0x7f8681c700d0)
+
+Vtable for QGestureEvent
+QGestureEvent::_ZTV13QGestureEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGestureEvent)
+16 (int (*)(...))QGestureEvent::~QGestureEvent
+24 (int (*)(...))QGestureEvent::~QGestureEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGestureEvent
+ size=64 align=8
+ base size=64 base align=8
+QGestureEvent (0x0x7f8681c70138) 0
+ vptr=((& QGestureEvent::_ZTV13QGestureEvent) + 16)
+ QEvent (0x0x7f8681c713c0) 0
+ primary-for QGestureEvent (0x0x7f8681c70138)
+
+Vtable for QGestureRecognizer
+QGestureRecognizer::_ZTV18QGestureRecognizer: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGestureRecognizer)
+16 0
+24 0
+32 (int (*)(...))QGestureRecognizer::create
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGestureRecognizer::reset
+
+Class QGestureRecognizer
+ size=8 align=8
+ base size=8 base align=8
+QGestureRecognizer (0x0x7f8681d07000) 0 nearly-empty
+ vptr=((& QGestureRecognizer::_ZTV18QGestureRecognizer) + 16)
+
+Vtable for QGraphicsItem
+QGraphicsItem::_ZTV13QGraphicsItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGraphicsItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsItem::isObscuredBy
+88 (int (*)(...))QGraphicsItem::opaqueArea
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))QGraphicsItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsItem (0x0x7f8681d07360) 0
+ vptr=((& QGraphicsItem::_ZTV13QGraphicsItem) + 16)
+
+Class QGraphicsObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsObject::QPrivateSignal (0x0x7f86819b4540) 0 empty
+
+Vtable for QGraphicsObject
+QGraphicsObject::_ZTV15QGraphicsObject: 53 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsObject)
+16 (int (*)(...))QGraphicsObject::metaObject
+24 (int (*)(...))QGraphicsObject::qt_metacast
+32 (int (*)(...))QGraphicsObject::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QGraphicsObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))-16
+120 (int (*)(...))(& _ZTI15QGraphicsObject)
+128 0
+136 0
+144 (int (*)(...))QGraphicsItem::advance
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))QGraphicsItem::shape
+168 (int (*)(...))QGraphicsItem::contains
+176 (int (*)(...))QGraphicsItem::collidesWithItem
+184 (int (*)(...))QGraphicsItem::collidesWithPath
+192 (int (*)(...))QGraphicsItem::isObscuredBy
+200 (int (*)(...))QGraphicsItem::opaqueArea
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))QGraphicsItem::type
+224 (int (*)(...))QGraphicsItem::sceneEventFilter
+232 (int (*)(...))QGraphicsItem::sceneEvent
+240 (int (*)(...))QGraphicsItem::contextMenuEvent
+248 (int (*)(...))QGraphicsItem::dragEnterEvent
+256 (int (*)(...))QGraphicsItem::dragLeaveEvent
+264 (int (*)(...))QGraphicsItem::dragMoveEvent
+272 (int (*)(...))QGraphicsItem::dropEvent
+280 (int (*)(...))QGraphicsItem::focusInEvent
+288 (int (*)(...))QGraphicsItem::focusOutEvent
+296 (int (*)(...))QGraphicsItem::hoverEnterEvent
+304 (int (*)(...))QGraphicsItem::hoverMoveEvent
+312 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+320 (int (*)(...))QGraphicsItem::keyPressEvent
+328 (int (*)(...))QGraphicsItem::keyReleaseEvent
+336 (int (*)(...))QGraphicsItem::mousePressEvent
+344 (int (*)(...))QGraphicsItem::mouseMoveEvent
+352 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+360 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+368 (int (*)(...))QGraphicsItem::wheelEvent
+376 (int (*)(...))QGraphicsItem::inputMethodEvent
+384 (int (*)(...))QGraphicsItem::inputMethodQuery
+392 (int (*)(...))QGraphicsItem::itemChange
+400 (int (*)(...))QGraphicsItem::supportsExtension
+408 (int (*)(...))QGraphicsItem::setExtension
+416 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsObject
+ size=32 align=8
+ base size=32 base align=8
+QGraphicsObject (0x0x7f8681969070) 0
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 16)
+ QObject (0x0x7f86819b4480) 0
+ primary-for QGraphicsObject (0x0x7f8681969070)
+ QGraphicsItem (0x0x7f86819b44e0) 16
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 128)
+
+Vtable for QAbstractGraphicsShapeItem
+QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractGraphicsShapeItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QAbstractGraphicsShapeItem::isObscuredBy
+88 (int (*)(...))QAbstractGraphicsShapeItem::opaqueArea
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))QGraphicsItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QAbstractGraphicsShapeItem
+ size=16 align=8
+ base size=16 base align=8
+QAbstractGraphicsShapeItem (0x0x7f8681c70bc8) 0
+ vptr=((& QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem) + 16)
+ QGraphicsItem (0x0x7f86819b4600) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f8681c70bc8)
+
+Vtable for QGraphicsPathItem
+QGraphicsPathItem::_ZTV17QGraphicsPathItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsPathItem)
+16 (int (*)(...))QGraphicsPathItem::~QGraphicsPathItem
+24 (int (*)(...))QGraphicsPathItem::~QGraphicsPathItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPathItem::boundingRect
+48 (int (*)(...))QGraphicsPathItem::shape
+56 (int (*)(...))QGraphicsPathItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPathItem::isObscuredBy
+88 (int (*)(...))QGraphicsPathItem::opaqueArea
+96 (int (*)(...))QGraphicsPathItem::paint
+104 (int (*)(...))QGraphicsPathItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPathItem::supportsExtension
+296 (int (*)(...))QGraphicsPathItem::setExtension
+304 (int (*)(...))QGraphicsPathItem::extension
+
+Class QGraphicsPathItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPathItem (0x0x7f8681c70c30) 0
+ vptr=((& QGraphicsPathItem::_ZTV17QGraphicsPathItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f8681c70c98) 0
+ primary-for QGraphicsPathItem (0x0x7f8681c70c30)
+ QGraphicsItem (0x0x7f86819b4720) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f8681c70c98)
+
+Vtable for QGraphicsRectItem
+QGraphicsRectItem::_ZTV17QGraphicsRectItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsRectItem)
+16 (int (*)(...))QGraphicsRectItem::~QGraphicsRectItem
+24 (int (*)(...))QGraphicsRectItem::~QGraphicsRectItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsRectItem::boundingRect
+48 (int (*)(...))QGraphicsRectItem::shape
+56 (int (*)(...))QGraphicsRectItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsRectItem::isObscuredBy
+88 (int (*)(...))QGraphicsRectItem::opaqueArea
+96 (int (*)(...))QGraphicsRectItem::paint
+104 (int (*)(...))QGraphicsRectItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsRectItem::supportsExtension
+296 (int (*)(...))QGraphicsRectItem::setExtension
+304 (int (*)(...))QGraphicsRectItem::extension
+
+Class QGraphicsRectItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsRectItem (0x0x7f8681c70d00) 0
+ vptr=((& QGraphicsRectItem::_ZTV17QGraphicsRectItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f8681c70d68) 0
+ primary-for QGraphicsRectItem (0x0x7f8681c70d00)
+ QGraphicsItem (0x0x7f86819b4840) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f8681c70d68)
+
+Vtable for QGraphicsEllipseItem
+QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsEllipseItem)
+16 (int (*)(...))QGraphicsEllipseItem::~QGraphicsEllipseItem
+24 (int (*)(...))QGraphicsEllipseItem::~QGraphicsEllipseItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsEllipseItem::boundingRect
+48 (int (*)(...))QGraphicsEllipseItem::shape
+56 (int (*)(...))QGraphicsEllipseItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsEllipseItem::isObscuredBy
+88 (int (*)(...))QGraphicsEllipseItem::opaqueArea
+96 (int (*)(...))QGraphicsEllipseItem::paint
+104 (int (*)(...))QGraphicsEllipseItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsEllipseItem::supportsExtension
+296 (int (*)(...))QGraphicsEllipseItem::setExtension
+304 (int (*)(...))QGraphicsEllipseItem::extension
+
+Class QGraphicsEllipseItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsEllipseItem (0x0x7f8681c70dd0) 0
+ vptr=((& QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f8681c70e38) 0
+ primary-for QGraphicsEllipseItem (0x0x7f8681c70dd0)
+ QGraphicsItem (0x0x7f86819b49c0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f8681c70e38)
+
+Vtable for QGraphicsPolygonItem
+QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsPolygonItem)
+16 (int (*)(...))QGraphicsPolygonItem::~QGraphicsPolygonItem
+24 (int (*)(...))QGraphicsPolygonItem::~QGraphicsPolygonItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPolygonItem::boundingRect
+48 (int (*)(...))QGraphicsPolygonItem::shape
+56 (int (*)(...))QGraphicsPolygonItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPolygonItem::isObscuredBy
+88 (int (*)(...))QGraphicsPolygonItem::opaqueArea
+96 (int (*)(...))QGraphicsPolygonItem::paint
+104 (int (*)(...))QGraphicsPolygonItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPolygonItem::supportsExtension
+296 (int (*)(...))QGraphicsPolygonItem::setExtension
+304 (int (*)(...))QGraphicsPolygonItem::extension
+
+Class QGraphicsPolygonItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPolygonItem (0x0x7f8681c70ea0) 0
+ vptr=((& QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f8681c70f08) 0
+ primary-for QGraphicsPolygonItem (0x0x7f8681c70ea0)
+ QGraphicsItem (0x0x7f86819b4b40) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f8681c70f08)
+
+Vtable for QGraphicsLineItem
+QGraphicsLineItem::_ZTV17QGraphicsLineItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsLineItem)
+16 (int (*)(...))QGraphicsLineItem::~QGraphicsLineItem
+24 (int (*)(...))QGraphicsLineItem::~QGraphicsLineItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsLineItem::boundingRect
+48 (int (*)(...))QGraphicsLineItem::shape
+56 (int (*)(...))QGraphicsLineItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsLineItem::isObscuredBy
+88 (int (*)(...))QGraphicsLineItem::opaqueArea
+96 (int (*)(...))QGraphicsLineItem::paint
+104 (int (*)(...))QGraphicsLineItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsLineItem::supportsExtension
+296 (int (*)(...))QGraphicsLineItem::setExtension
+304 (int (*)(...))QGraphicsLineItem::extension
+
+Class QGraphicsLineItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLineItem (0x0x7f8681c70f70) 0
+ vptr=((& QGraphicsLineItem::_ZTV17QGraphicsLineItem) + 16)
+ QGraphicsItem (0x0x7f86819b4c60) 0
+ primary-for QGraphicsLineItem (0x0x7f8681c70f70)
+
+Vtable for QGraphicsPixmapItem
+QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsPixmapItem)
+16 (int (*)(...))QGraphicsPixmapItem::~QGraphicsPixmapItem
+24 (int (*)(...))QGraphicsPixmapItem::~QGraphicsPixmapItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPixmapItem::boundingRect
+48 (int (*)(...))QGraphicsPixmapItem::shape
+56 (int (*)(...))QGraphicsPixmapItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPixmapItem::isObscuredBy
+88 (int (*)(...))QGraphicsPixmapItem::opaqueArea
+96 (int (*)(...))QGraphicsPixmapItem::paint
+104 (int (*)(...))QGraphicsPixmapItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPixmapItem::supportsExtension
+296 (int (*)(...))QGraphicsPixmapItem::setExtension
+304 (int (*)(...))QGraphicsPixmapItem::extension
+
+Class QGraphicsPixmapItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPixmapItem (0x0x7f8681c708f0) 0
+ vptr=((& QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem) + 16)
+ QGraphicsItem (0x0x7f86819b4de0) 0
+ primary-for QGraphicsPixmapItem (0x0x7f8681c708f0)
+
+Class QGraphicsTextItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTextItem::QPrivateSignal (0x0x7f8681a1e060) 0 empty
+
+Vtable for QGraphicsTextItem
+QGraphicsTextItem::_ZTV17QGraphicsTextItem: 82 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsTextItem)
+16 (int (*)(...))QGraphicsTextItem::metaObject
+24 (int (*)(...))QGraphicsTextItem::qt_metacast
+32 (int (*)(...))QGraphicsTextItem::qt_metacall
+40 (int (*)(...))QGraphicsTextItem::~QGraphicsTextItem
+48 (int (*)(...))QGraphicsTextItem::~QGraphicsTextItem
+56 (int (*)(...))QGraphicsObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsTextItem::boundingRect
+120 (int (*)(...))QGraphicsTextItem::shape
+128 (int (*)(...))QGraphicsTextItem::contains
+136 (int (*)(...))QGraphicsTextItem::paint
+144 (int (*)(...))QGraphicsTextItem::isObscuredBy
+152 (int (*)(...))QGraphicsTextItem::opaqueArea
+160 (int (*)(...))QGraphicsTextItem::type
+168 (int (*)(...))QGraphicsTextItem::sceneEvent
+176 (int (*)(...))QGraphicsTextItem::mousePressEvent
+184 (int (*)(...))QGraphicsTextItem::mouseMoveEvent
+192 (int (*)(...))QGraphicsTextItem::mouseReleaseEvent
+200 (int (*)(...))QGraphicsTextItem::mouseDoubleClickEvent
+208 (int (*)(...))QGraphicsTextItem::contextMenuEvent
+216 (int (*)(...))QGraphicsTextItem::keyPressEvent
+224 (int (*)(...))QGraphicsTextItem::keyReleaseEvent
+232 (int (*)(...))QGraphicsTextItem::focusInEvent
+240 (int (*)(...))QGraphicsTextItem::focusOutEvent
+248 (int (*)(...))QGraphicsTextItem::dragEnterEvent
+256 (int (*)(...))QGraphicsTextItem::dragLeaveEvent
+264 (int (*)(...))QGraphicsTextItem::dragMoveEvent
+272 (int (*)(...))QGraphicsTextItem::dropEvent
+280 (int (*)(...))QGraphicsTextItem::inputMethodEvent
+288 (int (*)(...))QGraphicsTextItem::hoverEnterEvent
+296 (int (*)(...))QGraphicsTextItem::hoverMoveEvent
+304 (int (*)(...))QGraphicsTextItem::hoverLeaveEvent
+312 (int (*)(...))QGraphicsTextItem::inputMethodQuery
+320 (int (*)(...))QGraphicsTextItem::supportsExtension
+328 (int (*)(...))QGraphicsTextItem::setExtension
+336 (int (*)(...))QGraphicsTextItem::extension
+344 (int (*)(...))-16
+352 (int (*)(...))(& _ZTI17QGraphicsTextItem)
+360 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItemD1Ev
+368 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItemD0Ev
+376 (int (*)(...))QGraphicsItem::advance
+384 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem12boundingRectEv
+392 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem5shapeEv
+400 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem8containsERK7QPointF
+408 (int (*)(...))QGraphicsItem::collidesWithItem
+416 (int (*)(...))QGraphicsItem::collidesWithPath
+424 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem12isObscuredByEPK13QGraphicsItem
+432 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem10opaqueAreaEv
+440 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+448 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem4typeEv
+456 (int (*)(...))QGraphicsItem::sceneEventFilter
+464 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem10sceneEventEP6QEvent
+472 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem16contextMenuEventEP30QGraphicsSceneContextMenuEvent
+480 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14dragEnterEventEP27QGraphicsSceneDragDropEvent
+488 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14dragLeaveEventEP27QGraphicsSceneDragDropEvent
+496 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13dragMoveEventEP27QGraphicsSceneDragDropEvent
+504 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem9dropEventEP27QGraphicsSceneDragDropEvent
+512 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem12focusInEventEP11QFocusEvent
+520 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13focusOutEventEP11QFocusEvent
+528 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15hoverEnterEventEP24QGraphicsSceneHoverEvent
+536 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14hoverMoveEventEP24QGraphicsSceneHoverEvent
+544 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+552 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13keyPressEventEP9QKeyEvent
+560 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15keyReleaseEventEP9QKeyEvent
+568 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15mousePressEventEP24QGraphicsSceneMouseEvent
+576 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14mouseMoveEventEP24QGraphicsSceneMouseEvent
+584 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem17mouseReleaseEventEP24QGraphicsSceneMouseEvent
+592 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent
+600 (int (*)(...))QGraphicsItem::wheelEvent
+608 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem16inputMethodEventEP17QInputMethodEvent
+616 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem16inputMethodQueryEN2Qt16InputMethodQueryE
+624 (int (*)(...))QGraphicsItem::itemChange
+632 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem17supportsExtensionEN13QGraphicsItem9ExtensionE
+640 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem12setExtensionEN13QGraphicsItem9ExtensionERK8QVariant
+648 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem9extensionERK8QVariant
+
+Class QGraphicsTextItem
+ size=40 align=8
+ base size=40 base align=8
+QGraphicsTextItem (0x0x7f8681a1d000) 0
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 16)
+ QGraphicsObject (0x0x7f86819694d0) 0
+ primary-for QGraphicsTextItem (0x0x7f8681a1d000)
+ QObject (0x0x7f86819b4f60) 0
+ primary-for QGraphicsObject (0x0x7f86819694d0)
+ QGraphicsItem (0x0x7f8681a1e000) 16
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 360)
+
+Vtable for QGraphicsSimpleTextItem
+QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSimpleTextItem)
+16 (int (*)(...))QGraphicsSimpleTextItem::~QGraphicsSimpleTextItem
+24 (int (*)(...))QGraphicsSimpleTextItem::~QGraphicsSimpleTextItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsSimpleTextItem::boundingRect
+48 (int (*)(...))QGraphicsSimpleTextItem::shape
+56 (int (*)(...))QGraphicsSimpleTextItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsSimpleTextItem::isObscuredBy
+88 (int (*)(...))QGraphicsSimpleTextItem::opaqueArea
+96 (int (*)(...))QGraphicsSimpleTextItem::paint
+104 (int (*)(...))QGraphicsSimpleTextItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsSimpleTextItem::supportsExtension
+296 (int (*)(...))QGraphicsSimpleTextItem::setExtension
+304 (int (*)(...))QGraphicsSimpleTextItem::extension
+
+Class QGraphicsSimpleTextItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsSimpleTextItem (0x0x7f8681a1d138) 0
+ vptr=((& QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f8681a1d1a0) 0
+ primary-for QGraphicsSimpleTextItem (0x0x7f8681a1d138)
+ QGraphicsItem (0x0x7f8681a1e300) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f8681a1d1a0)
+
+Vtable for QGraphicsItemGroup
+QGraphicsItemGroup::_ZTV18QGraphicsItemGroup: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGraphicsItemGroup)
+16 (int (*)(...))QGraphicsItemGroup::~QGraphicsItemGroup
+24 (int (*)(...))QGraphicsItemGroup::~QGraphicsItemGroup
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsItemGroup::boundingRect
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsItemGroup::isObscuredBy
+88 (int (*)(...))QGraphicsItemGroup::opaqueArea
+96 (int (*)(...))QGraphicsItemGroup::paint
+104 (int (*)(...))QGraphicsItemGroup::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsItemGroup
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsItemGroup (0x0x7f8681a1d208) 0
+ vptr=((& QGraphicsItemGroup::_ZTV18QGraphicsItemGroup) + 16)
+ QGraphicsItem (0x0x7f8681a1e420) 0
+ primary-for QGraphicsItemGroup (0x0x7f8681a1d208)
+
+Vtable for QGraphicsLayoutItem
+QGraphicsLayoutItem::_ZTV19QGraphicsLayoutItem: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsLayoutItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsLayoutItem::setGeometry
+40 (int (*)(...))QGraphicsLayoutItem::getContentsMargins
+48 (int (*)(...))QGraphicsLayoutItem::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsLayoutItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLayoutItem (0x0x7f8681a1e720) 0
+ vptr=((& QGraphicsLayoutItem::_ZTV19QGraphicsLayoutItem) + 16)
+
+Vtable for QGraphicsLayout
+QGraphicsLayout::_ZTV15QGraphicsLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsLayout)
+16 0
+24 0
+32 (int (*)(...))QGraphicsLayoutItem::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))QGraphicsLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLayout (0x0x7f8681a1d270) 0
+ vptr=((& QGraphicsLayout::_ZTV15QGraphicsLayout) + 16)
+ QGraphicsLayoutItem (0x0x7f8681a1ede0) 0
+ primary-for QGraphicsLayout (0x0x7f8681a1d270)
+
+Class QGraphicsAnchor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsAnchor::QPrivateSignal (0x0x7f8681a80120) 0 empty
+
+Vtable for QGraphicsAnchor
+QGraphicsAnchor::_ZTV15QGraphicsAnchor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsAnchor)
+16 (int (*)(...))QGraphicsAnchor::metaObject
+24 (int (*)(...))QGraphicsAnchor::qt_metacast
+32 (int (*)(...))QGraphicsAnchor::qt_metacall
+40 (int (*)(...))QGraphicsAnchor::~QGraphicsAnchor
+48 (int (*)(...))QGraphicsAnchor::~QGraphicsAnchor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QGraphicsAnchor
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsAnchor (0x0x7f8681a1d2d8) 0
+ vptr=((& QGraphicsAnchor::_ZTV15QGraphicsAnchor) + 16)
+ QObject (0x0x7f8681a800c0) 0
+ primary-for QGraphicsAnchor (0x0x7f8681a1d2d8)
+
+Vtable for QGraphicsAnchorLayout
+QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QGraphicsAnchorLayout)
+16 (int (*)(...))QGraphicsAnchorLayout::~QGraphicsAnchorLayout
+24 (int (*)(...))QGraphicsAnchorLayout::~QGraphicsAnchorLayout
+32 (int (*)(...))QGraphicsAnchorLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsAnchorLayout::sizeHint
+72 (int (*)(...))QGraphicsAnchorLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsAnchorLayout::count
+96 (int (*)(...))QGraphicsAnchorLayout::itemAt
+104 (int (*)(...))QGraphicsAnchorLayout::removeAt
+
+Class QGraphicsAnchorLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsAnchorLayout (0x0x7f8681a1d340) 0
+ vptr=((& QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout) + 16)
+ QGraphicsLayout (0x0x7f8681a1d3a8) 0
+ primary-for QGraphicsAnchorLayout (0x0x7f8681a1d340)
+ QGraphicsLayoutItem (0x0x7f8681a802a0) 0
+ primary-for QGraphicsLayout (0x0x7f8681a1d3a8)
+
+Class QGraphicsEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsEffect::QPrivateSignal (0x0x7f8681a80420) 0 empty
+
+Vtable for QGraphicsEffect
+QGraphicsEffect::_ZTV15QGraphicsEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsEffect)
+16 (int (*)(...))QGraphicsEffect::metaObject
+24 (int (*)(...))QGraphicsEffect::qt_metacast
+32 (int (*)(...))QGraphicsEffect::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsEffect (0x0x7f8681a1d410) 0
+ vptr=((& QGraphicsEffect::_ZTV15QGraphicsEffect) + 16)
+ QObject (0x0x7f8681a803c0) 0
+ primary-for QGraphicsEffect (0x0x7f8681a1d410)
+
+Class QGraphicsColorizeEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsColorizeEffect::QPrivateSignal (0x0x7f8681a809c0) 0 empty
+
+Vtable for QGraphicsColorizeEffect
+QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsColorizeEffect)
+16 (int (*)(...))QGraphicsColorizeEffect::metaObject
+24 (int (*)(...))QGraphicsColorizeEffect::qt_metacast
+32 (int (*)(...))QGraphicsColorizeEffect::qt_metacall
+40 (int (*)(...))QGraphicsColorizeEffect::~QGraphicsColorizeEffect
+48 (int (*)(...))QGraphicsColorizeEffect::~QGraphicsColorizeEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))QGraphicsColorizeEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsColorizeEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsColorizeEffect (0x0x7f8681a1d5b0) 0
+ vptr=((& QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect) + 16)
+ QGraphicsEffect (0x0x7f8681a1d618) 0
+ primary-for QGraphicsColorizeEffect (0x0x7f8681a1d5b0)
+ QObject (0x0x7f8681a80960) 0
+ primary-for QGraphicsEffect (0x0x7f8681a1d618)
+
+Class QGraphicsBlurEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsBlurEffect::QPrivateSignal (0x0x7f8681a80ba0) 0 empty
+
+Vtable for QGraphicsBlurEffect
+QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsBlurEffect)
+16 (int (*)(...))QGraphicsBlurEffect::metaObject
+24 (int (*)(...))QGraphicsBlurEffect::qt_metacast
+32 (int (*)(...))QGraphicsBlurEffect::qt_metacall
+40 (int (*)(...))QGraphicsBlurEffect::~QGraphicsBlurEffect
+48 (int (*)(...))QGraphicsBlurEffect::~QGraphicsBlurEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsBlurEffect::boundingRectFor
+120 (int (*)(...))QGraphicsBlurEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsBlurEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsBlurEffect (0x0x7f8681a1d680) 0
+ vptr=((& QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect) + 16)
+ QGraphicsEffect (0x0x7f8681a1d6e8) 0
+ primary-for QGraphicsBlurEffect (0x0x7f8681a1d680)
+ QObject (0x0x7f8681a80b40) 0
+ primary-for QGraphicsEffect (0x0x7f8681a1d6e8)
+
+Class QGraphicsDropShadowEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsDropShadowEffect::QPrivateSignal (0x0x7f8681af3240) 0 empty
+
+Vtable for QGraphicsDropShadowEffect
+QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QGraphicsDropShadowEffect)
+16 (int (*)(...))QGraphicsDropShadowEffect::metaObject
+24 (int (*)(...))QGraphicsDropShadowEffect::qt_metacast
+32 (int (*)(...))QGraphicsDropShadowEffect::qt_metacall
+40 (int (*)(...))QGraphicsDropShadowEffect::~QGraphicsDropShadowEffect
+48 (int (*)(...))QGraphicsDropShadowEffect::~QGraphicsDropShadowEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsDropShadowEffect::boundingRectFor
+120 (int (*)(...))QGraphicsDropShadowEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsDropShadowEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsDropShadowEffect (0x0x7f8681a1d888) 0
+ vptr=((& QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect) + 16)
+ QGraphicsEffect (0x0x7f8681a1d8f0) 0
+ primary-for QGraphicsDropShadowEffect (0x0x7f8681a1d888)
+ QObject (0x0x7f8681af31e0) 0
+ primary-for QGraphicsEffect (0x0x7f8681a1d8f0)
+
+Class QGraphicsOpacityEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsOpacityEffect::QPrivateSignal (0x0x7f8681af3660) 0 empty
+
+Vtable for QGraphicsOpacityEffect
+QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QGraphicsOpacityEffect)
+16 (int (*)(...))QGraphicsOpacityEffect::metaObject
+24 (int (*)(...))QGraphicsOpacityEffect::qt_metacast
+32 (int (*)(...))QGraphicsOpacityEffect::qt_metacall
+40 (int (*)(...))QGraphicsOpacityEffect::~QGraphicsOpacityEffect
+48 (int (*)(...))QGraphicsOpacityEffect::~QGraphicsOpacityEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))QGraphicsOpacityEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsOpacityEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsOpacityEffect (0x0x7f8681a1d958) 0
+ vptr=((& QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect) + 16)
+ QGraphicsEffect (0x0x7f8681a1d9c0) 0
+ primary-for QGraphicsOpacityEffect (0x0x7f8681a1d958)
+ QObject (0x0x7f8681af3600) 0
+ primary-for QGraphicsEffect (0x0x7f8681a1d9c0)
+
+Vtable for QGraphicsGridLayout
+QGraphicsGridLayout::_ZTV19QGraphicsGridLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsGridLayout)
+16 (int (*)(...))QGraphicsGridLayout::~QGraphicsGridLayout
+24 (int (*)(...))QGraphicsGridLayout::~QGraphicsGridLayout
+32 (int (*)(...))QGraphicsGridLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsGridLayout::sizeHint
+72 (int (*)(...))QGraphicsGridLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsGridLayout::count
+96 (int (*)(...))QGraphicsGridLayout::itemAt
+104 (int (*)(...))QGraphicsGridLayout::removeAt
+
+Class QGraphicsGridLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsGridLayout (0x0x7f8681a1da28) 0
+ vptr=((& QGraphicsGridLayout::_ZTV19QGraphicsGridLayout) + 16)
+ QGraphicsLayout (0x0x7f8681a1da90) 0
+ primary-for QGraphicsGridLayout (0x0x7f8681a1da28)
+ QGraphicsLayoutItem (0x0x7f8681af37e0) 0
+ primary-for QGraphicsLayout (0x0x7f8681a1da90)
+
+Class QGraphicsItemAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsItemAnimation::QPrivateSignal (0x0x7f8681af39c0) 0 empty
+
+Vtable for QGraphicsItemAnimation
+QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QGraphicsItemAnimation)
+16 (int (*)(...))QGraphicsItemAnimation::metaObject
+24 (int (*)(...))QGraphicsItemAnimation::qt_metacast
+32 (int (*)(...))QGraphicsItemAnimation::qt_metacall
+40 (int (*)(...))QGraphicsItemAnimation::~QGraphicsItemAnimation
+48 (int (*)(...))QGraphicsItemAnimation::~QGraphicsItemAnimation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsItemAnimation::beforeAnimationStep
+120 (int (*)(...))QGraphicsItemAnimation::afterAnimationStep
+
+Class QGraphicsItemAnimation
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsItemAnimation (0x0x7f8681a1dbc8) 0
+ vptr=((& QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation) + 16)
+ QObject (0x0x7f8681af3960) 0
+ primary-for QGraphicsItemAnimation (0x0x7f8681a1dbc8)
+
+Vtable for QGraphicsLinearLayout
+QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QGraphicsLinearLayout)
+16 (int (*)(...))QGraphicsLinearLayout::~QGraphicsLinearLayout
+24 (int (*)(...))QGraphicsLinearLayout::~QGraphicsLinearLayout
+32 (int (*)(...))QGraphicsLinearLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsLinearLayout::sizeHint
+72 (int (*)(...))QGraphicsLinearLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsLinearLayout::count
+96 (int (*)(...))QGraphicsLinearLayout::itemAt
+104 (int (*)(...))QGraphicsLinearLayout::removeAt
+
+Class QGraphicsLinearLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLinearLayout (0x0x7f8681a1dc30) 0
+ vptr=((& QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout) + 16)
+ QGraphicsLayout (0x0x7f8681a1dc98) 0
+ primary-for QGraphicsLinearLayout (0x0x7f8681a1dc30)
+ QGraphicsLayoutItem (0x0x7f8681af3a80) 0
+ primary-for QGraphicsLayout (0x0x7f8681a1dc98)
+
+Class QGraphicsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsWidget::QPrivateSignal (0x0x7f8681af3d80) 0 empty
+
+Vtable for QGraphicsWidget
+QGraphicsWidget::_ZTV15QGraphicsWidget: 93 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsWidget)
+16 (int (*)(...))QGraphicsWidget::metaObject
+24 (int (*)(...))QGraphicsWidget::qt_metacast
+32 (int (*)(...))QGraphicsWidget::qt_metacall
+40 (int (*)(...))QGraphicsWidget::~QGraphicsWidget
+48 (int (*)(...))QGraphicsWidget::~QGraphicsWidget
+56 (int (*)(...))QGraphicsWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsWidget::setGeometry
+120 (int (*)(...))QGraphicsWidget::getContentsMargins
+128 (int (*)(...))QGraphicsWidget::type
+136 (int (*)(...))QGraphicsWidget::paint
+144 (int (*)(...))QGraphicsWidget::paintWindowFrame
+152 (int (*)(...))QGraphicsWidget::boundingRect
+160 (int (*)(...))QGraphicsWidget::shape
+168 (int (*)(...))QGraphicsWidget::initStyleOption
+176 (int (*)(...))QGraphicsWidget::sizeHint
+184 (int (*)(...))QGraphicsWidget::updateGeometry
+192 (int (*)(...))QGraphicsWidget::itemChange
+200 (int (*)(...))QGraphicsWidget::propertyChange
+208 (int (*)(...))QGraphicsWidget::sceneEvent
+216 (int (*)(...))QGraphicsWidget::windowFrameEvent
+224 (int (*)(...))QGraphicsWidget::windowFrameSectionAt
+232 (int (*)(...))QGraphicsWidget::changeEvent
+240 (int (*)(...))QGraphicsWidget::closeEvent
+248 (int (*)(...))QGraphicsWidget::focusInEvent
+256 (int (*)(...))QGraphicsWidget::focusNextPrevChild
+264 (int (*)(...))QGraphicsWidget::focusOutEvent
+272 (int (*)(...))QGraphicsWidget::hideEvent
+280 (int (*)(...))QGraphicsWidget::moveEvent
+288 (int (*)(...))QGraphicsWidget::polishEvent
+296 (int (*)(...))QGraphicsWidget::resizeEvent
+304 (int (*)(...))QGraphicsWidget::showEvent
+312 (int (*)(...))QGraphicsWidget::hoverMoveEvent
+320 (int (*)(...))QGraphicsWidget::hoverLeaveEvent
+328 (int (*)(...))QGraphicsWidget::grabMouseEvent
+336 (int (*)(...))QGraphicsWidget::ungrabMouseEvent
+344 (int (*)(...))QGraphicsWidget::grabKeyboardEvent
+352 (int (*)(...))QGraphicsWidget::ungrabKeyboardEvent
+360 (int (*)(...))-16
+368 (int (*)(...))(& _ZTI15QGraphicsWidget)
+376 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidgetD1Ev
+384 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidgetD0Ev
+392 (int (*)(...))QGraphicsItem::advance
+400 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget12boundingRectEv
+408 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget5shapeEv
+416 (int (*)(...))QGraphicsItem::contains
+424 (int (*)(...))QGraphicsItem::collidesWithItem
+432 (int (*)(...))QGraphicsItem::collidesWithPath
+440 (int (*)(...))QGraphicsItem::isObscuredBy
+448 (int (*)(...))QGraphicsItem::opaqueArea
+456 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+464 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget4typeEv
+472 (int (*)(...))QGraphicsItem::sceneEventFilter
+480 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10sceneEventEP6QEvent
+488 (int (*)(...))QGraphicsItem::contextMenuEvent
+496 (int (*)(...))QGraphicsItem::dragEnterEvent
+504 (int (*)(...))QGraphicsItem::dragLeaveEvent
+512 (int (*)(...))QGraphicsItem::dragMoveEvent
+520 (int (*)(...))QGraphicsItem::dropEvent
+528 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget12focusInEventEP11QFocusEvent
+536 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget13focusOutEventEP11QFocusEvent
+544 (int (*)(...))QGraphicsItem::hoverEnterEvent
+552 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget14hoverMoveEventEP24QGraphicsSceneHoverEvent
+560 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+568 (int (*)(...))QGraphicsItem::keyPressEvent
+576 (int (*)(...))QGraphicsItem::keyReleaseEvent
+584 (int (*)(...))QGraphicsItem::mousePressEvent
+592 (int (*)(...))QGraphicsItem::mouseMoveEvent
+600 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+608 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+616 (int (*)(...))QGraphicsItem::wheelEvent
+624 (int (*)(...))QGraphicsItem::inputMethodEvent
+632 (int (*)(...))QGraphicsItem::inputMethodQuery
+640 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant
+648 (int (*)(...))QGraphicsItem::supportsExtension
+656 (int (*)(...))QGraphicsItem::setExtension
+664 (int (*)(...))QGraphicsItem::extension
+672 (int (*)(...))-32
+680 (int (*)(...))(& _ZTI15QGraphicsWidget)
+688 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidgetD1Ev
+696 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidgetD0Ev
+704 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget11setGeometryERK6QRectF
+712 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget18getContentsMarginsEPdS0_S0_S0_
+720 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget14updateGeometryEv
+728 (int (*)(...))QGraphicsLayoutItem::isEmpty
+736 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget8sizeHintEN2Qt8SizeHintERK6QSizeF
+
+Class QGraphicsWidget
+ size=48 align=8
+ base size=48 base align=8
+QGraphicsWidget (0x0x7f8681ad5070) 0
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 16)
+ QGraphicsObject (0x0x7f8681ad50e0) 0
+ primary-for QGraphicsWidget (0x0x7f8681ad5070)
+ QObject (0x0x7f8681af3c60) 0
+ primary-for QGraphicsObject (0x0x7f8681ad50e0)
+ QGraphicsItem (0x0x7f8681af3cc0) 16
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 376)
+ QGraphicsLayoutItem (0x0x7f8681af3d20) 32
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 688)
+
+Class QGraphicsProxyWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsProxyWidget::QPrivateSignal (0x0x7f8681773240) 0 empty
+
+Vtable for QGraphicsProxyWidget
+QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+16 (int (*)(...))QGraphicsProxyWidget::metaObject
+24 (int (*)(...))QGraphicsProxyWidget::qt_metacast
+32 (int (*)(...))QGraphicsProxyWidget::qt_metacall
+40 (int (*)(...))QGraphicsProxyWidget::~QGraphicsProxyWidget
+48 (int (*)(...))QGraphicsProxyWidget::~QGraphicsProxyWidget
+56 (int (*)(...))QGraphicsProxyWidget::event
+64 (int (*)(...))QGraphicsProxyWidget::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsProxyWidget::setGeometry
+120 (int (*)(...))QGraphicsWidget::getContentsMargins
+128 (int (*)(...))QGraphicsProxyWidget::type
+136 (int (*)(...))QGraphicsProxyWidget::paint
+144 (int (*)(...))QGraphicsWidget::paintWindowFrame
+152 (int (*)(...))QGraphicsWidget::boundingRect
+160 (int (*)(...))QGraphicsWidget::shape
+168 (int (*)(...))QGraphicsWidget::initStyleOption
+176 (int (*)(...))QGraphicsProxyWidget::sizeHint
+184 (int (*)(...))QGraphicsWidget::updateGeometry
+192 (int (*)(...))QGraphicsProxyWidget::itemChange
+200 (int (*)(...))QGraphicsWidget::propertyChange
+208 (int (*)(...))QGraphicsWidget::sceneEvent
+216 (int (*)(...))QGraphicsWidget::windowFrameEvent
+224 (int (*)(...))QGraphicsWidget::windowFrameSectionAt
+232 (int (*)(...))QGraphicsWidget::changeEvent
+240 (int (*)(...))QGraphicsWidget::closeEvent
+248 (int (*)(...))QGraphicsProxyWidget::focusInEvent
+256 (int (*)(...))QGraphicsProxyWidget::focusNextPrevChild
+264 (int (*)(...))QGraphicsProxyWidget::focusOutEvent
+272 (int (*)(...))QGraphicsProxyWidget::hideEvent
+280 (int (*)(...))QGraphicsWidget::moveEvent
+288 (int (*)(...))QGraphicsWidget::polishEvent
+296 (int (*)(...))QGraphicsProxyWidget::resizeEvent
+304 (int (*)(...))QGraphicsProxyWidget::showEvent
+312 (int (*)(...))QGraphicsProxyWidget::hoverMoveEvent
+320 (int (*)(...))QGraphicsProxyWidget::hoverLeaveEvent
+328 (int (*)(...))QGraphicsProxyWidget::grabMouseEvent
+336 (int (*)(...))QGraphicsProxyWidget::ungrabMouseEvent
+344 (int (*)(...))QGraphicsWidget::grabKeyboardEvent
+352 (int (*)(...))QGraphicsWidget::ungrabKeyboardEvent
+360 (int (*)(...))QGraphicsProxyWidget::contextMenuEvent
+368 (int (*)(...))QGraphicsProxyWidget::dragEnterEvent
+376 (int (*)(...))QGraphicsProxyWidget::dragLeaveEvent
+384 (int (*)(...))QGraphicsProxyWidget::dragMoveEvent
+392 (int (*)(...))QGraphicsProxyWidget::dropEvent
+400 (int (*)(...))QGraphicsProxyWidget::hoverEnterEvent
+408 (int (*)(...))QGraphicsProxyWidget::mouseMoveEvent
+416 (int (*)(...))QGraphicsProxyWidget::mousePressEvent
+424 (int (*)(...))QGraphicsProxyWidget::mouseReleaseEvent
+432 (int (*)(...))QGraphicsProxyWidget::mouseDoubleClickEvent
+440 (int (*)(...))QGraphicsProxyWidget::wheelEvent
+448 (int (*)(...))QGraphicsProxyWidget::keyPressEvent
+456 (int (*)(...))QGraphicsProxyWidget::keyReleaseEvent
+464 (int (*)(...))QGraphicsProxyWidget::inputMethodQuery
+472 (int (*)(...))QGraphicsProxyWidget::inputMethodEvent
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+496 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidgetD1Ev
+504 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidgetD0Ev
+512 (int (*)(...))QGraphicsItem::advance
+520 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget12boundingRectEv
+528 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget5shapeEv
+536 (int (*)(...))QGraphicsItem::contains
+544 (int (*)(...))QGraphicsItem::collidesWithItem
+552 (int (*)(...))QGraphicsItem::collidesWithPath
+560 (int (*)(...))QGraphicsItem::isObscuredBy
+568 (int (*)(...))QGraphicsItem::opaqueArea
+576 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+584 (int (*)(...))QGraphicsProxyWidget::_ZThn16_NK20QGraphicsProxyWidget4typeEv
+592 (int (*)(...))QGraphicsItem::sceneEventFilter
+600 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10sceneEventEP6QEvent
+608 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget16contextMenuEventEP30QGraphicsSceneContextMenuEvent
+616 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14dragEnterEventEP27QGraphicsSceneDragDropEvent
+624 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14dragLeaveEventEP27QGraphicsSceneDragDropEvent
+632 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13dragMoveEventEP27QGraphicsSceneDragDropEvent
+640 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget9dropEventEP27QGraphicsSceneDragDropEvent
+648 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget12focusInEventEP11QFocusEvent
+656 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13focusOutEventEP11QFocusEvent
+664 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15hoverEnterEventEP24QGraphicsSceneHoverEvent
+672 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14hoverMoveEventEP24QGraphicsSceneHoverEvent
+680 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+688 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13keyPressEventEP9QKeyEvent
+696 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15keyReleaseEventEP9QKeyEvent
+704 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15mousePressEventEP24QGraphicsSceneMouseEvent
+712 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14mouseMoveEventEP24QGraphicsSceneMouseEvent
+720 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget17mouseReleaseEventEP24QGraphicsSceneMouseEvent
+728 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent
+736 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget10wheelEventEP24QGraphicsSceneWheelEvent
+744 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget16inputMethodEventEP17QInputMethodEvent
+752 (int (*)(...))QGraphicsProxyWidget::_ZThn16_NK20QGraphicsProxyWidget16inputMethodQueryEN2Qt16InputMethodQueryE
+760 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant
+768 (int (*)(...))QGraphicsItem::supportsExtension
+776 (int (*)(...))QGraphicsItem::setExtension
+784 (int (*)(...))QGraphicsItem::extension
+792 (int (*)(...))-32
+800 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+808 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidgetD1Ev
+816 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidgetD0Ev
+824 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidget11setGeometryERK6QRectF
+832 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget18getContentsMarginsEPdS0_S0_S0_
+840 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget14updateGeometryEv
+848 (int (*)(...))QGraphicsLayoutItem::isEmpty
+856 (int (*)(...))QGraphicsProxyWidget::_ZThn32_NK20QGraphicsProxyWidget8sizeHintEN2Qt8SizeHintERK6QSizeF
+
+Class QGraphicsProxyWidget
+ size=48 align=8
+ base size=48 base align=8
+QGraphicsProxyWidget (0x0x7f8681a1ddd0) 0
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 16)
+ QGraphicsWidget (0x0x7f8681ad5230) 0
+ primary-for QGraphicsProxyWidget (0x0x7f8681a1ddd0)
+ QGraphicsObject (0x0x7f8681ad52a0) 0
+ primary-for QGraphicsWidget (0x0x7f8681ad5230)
+ QObject (0x0x7f8681773120) 0
+ primary-for QGraphicsObject (0x0x7f8681ad52a0)
+ QGraphicsItem (0x0x7f8681773180) 16
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 496)
+ QGraphicsLayoutItem (0x0x7f86817731e0) 32
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 808)
+
+Class QGraphicsScene::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScene::QPrivateSignal (0x0x7f86817735a0) 0 empty
+
+Vtable for QGraphicsScene
+QGraphicsScene::_ZTV14QGraphicsScene: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGraphicsScene)
+16 (int (*)(...))QGraphicsScene::metaObject
+24 (int (*)(...))QGraphicsScene::qt_metacast
+32 (int (*)(...))QGraphicsScene::qt_metacall
+40 (int (*)(...))QGraphicsScene::~QGraphicsScene
+48 (int (*)(...))QGraphicsScene::~QGraphicsScene
+56 (int (*)(...))QGraphicsScene::event
+64 (int (*)(...))QGraphicsScene::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsScene::inputMethodQuery
+120 (int (*)(...))QGraphicsScene::contextMenuEvent
+128 (int (*)(...))QGraphicsScene::dragEnterEvent
+136 (int (*)(...))QGraphicsScene::dragMoveEvent
+144 (int (*)(...))QGraphicsScene::dragLeaveEvent
+152 (int (*)(...))QGraphicsScene::dropEvent
+160 (int (*)(...))QGraphicsScene::focusInEvent
+168 (int (*)(...))QGraphicsScene::focusOutEvent
+176 (int (*)(...))QGraphicsScene::helpEvent
+184 (int (*)(...))QGraphicsScene::keyPressEvent
+192 (int (*)(...))QGraphicsScene::keyReleaseEvent
+200 (int (*)(...))QGraphicsScene::mousePressEvent
+208 (int (*)(...))QGraphicsScene::mouseMoveEvent
+216 (int (*)(...))QGraphicsScene::mouseReleaseEvent
+224 (int (*)(...))QGraphicsScene::mouseDoubleClickEvent
+232 (int (*)(...))QGraphicsScene::wheelEvent
+240 (int (*)(...))QGraphicsScene::inputMethodEvent
+248 (int (*)(...))QGraphicsScene::drawBackground
+256 (int (*)(...))QGraphicsScene::drawForeground
+264 (int (*)(...))QGraphicsScene::drawItems
+272 (int (*)(...))QGraphicsScene::focusNextPrevChild
+
+Class QGraphicsScene
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsScene (0x0x7f8681791000) 0
+ vptr=((& QGraphicsScene::_ZTV14QGraphicsScene) + 16)
+ QObject (0x0x7f8681773540) 0
+ primary-for QGraphicsScene (0x0x7f8681791000)
+
+Vtable for QGraphicsSceneEvent
+QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsSceneEvent)
+16 (int (*)(...))QGraphicsSceneEvent::~QGraphicsSceneEvent
+24 (int (*)(...))QGraphicsSceneEvent::~QGraphicsSceneEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneEvent (0x0x7f8681791a28) 0
+ vptr=((& QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent) + 16)
+ QEvent (0x0x7f86817de900) 0
+ primary-for QGraphicsSceneEvent (0x0x7f8681791a28)
+
+Vtable for QGraphicsSceneMouseEvent
+QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneMouseEvent)
+16 (int (*)(...))QGraphicsSceneMouseEvent::~QGraphicsSceneMouseEvent
+24 (int (*)(...))QGraphicsSceneMouseEvent::~QGraphicsSceneMouseEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneMouseEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneMouseEvent (0x0x7f8681791a90) 0
+ vptr=((& QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f8681791af8) 0
+ primary-for QGraphicsSceneMouseEvent (0x0x7f8681791a90)
+ QEvent (0x0x7f86817deae0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f8681791af8)
+
+Vtable for QGraphicsSceneWheelEvent
+QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneWheelEvent)
+16 (int (*)(...))QGraphicsSceneWheelEvent::~QGraphicsSceneWheelEvent
+24 (int (*)(...))QGraphicsSceneWheelEvent::~QGraphicsSceneWheelEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneWheelEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneWheelEvent (0x0x7f8681791b60) 0
+ vptr=((& QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f8681791bc8) 0
+ primary-for QGraphicsSceneWheelEvent (0x0x7f8681791b60)
+ QEvent (0x0x7f86817dec00) 0
+ primary-for QGraphicsSceneEvent (0x0x7f8681791bc8)
+
+Vtable for QGraphicsSceneContextMenuEvent
+QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI30QGraphicsSceneContextMenuEvent)
+16 (int (*)(...))QGraphicsSceneContextMenuEvent::~QGraphicsSceneContextMenuEvent
+24 (int (*)(...))QGraphicsSceneContextMenuEvent::~QGraphicsSceneContextMenuEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneContextMenuEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneContextMenuEvent (0x0x7f8681791c30) 0
+ vptr=((& QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f8681791c98) 0
+ primary-for QGraphicsSceneContextMenuEvent (0x0x7f8681791c30)
+ QEvent (0x0x7f86817ded20) 0
+ primary-for QGraphicsSceneEvent (0x0x7f8681791c98)
+
+Vtable for QGraphicsSceneHoverEvent
+QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneHoverEvent)
+16 (int (*)(...))QGraphicsSceneHoverEvent::~QGraphicsSceneHoverEvent
+24 (int (*)(...))QGraphicsSceneHoverEvent::~QGraphicsSceneHoverEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneHoverEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneHoverEvent (0x0x7f8681791d00) 0
+ vptr=((& QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f8681791d68) 0
+ primary-for QGraphicsSceneHoverEvent (0x0x7f8681791d00)
+ QEvent (0x0x7f86817dee40) 0
+ primary-for QGraphicsSceneEvent (0x0x7f8681791d68)
+
+Vtable for QGraphicsSceneHelpEvent
+QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSceneHelpEvent)
+16 (int (*)(...))QGraphicsSceneHelpEvent::~QGraphicsSceneHelpEvent
+24 (int (*)(...))QGraphicsSceneHelpEvent::~QGraphicsSceneHelpEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneHelpEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneHelpEvent (0x0x7f8681791dd0) 0
+ vptr=((& QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f8681791e38) 0
+ primary-for QGraphicsSceneHelpEvent (0x0x7f8681791dd0)
+ QEvent (0x0x7f86817def60) 0
+ primary-for QGraphicsSceneEvent (0x0x7f8681791e38)
+
+Vtable for QGraphicsSceneDragDropEvent
+QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QGraphicsSceneDragDropEvent)
+16 (int (*)(...))QGraphicsSceneDragDropEvent::~QGraphicsSceneDragDropEvent
+24 (int (*)(...))QGraphicsSceneDragDropEvent::~QGraphicsSceneDragDropEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneDragDropEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneDragDropEvent (0x0x7f8681791ea0) 0
+ vptr=((& QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f8681791f08) 0
+ primary-for QGraphicsSceneDragDropEvent (0x0x7f8681791ea0)
+ QEvent (0x0x7f8681879060) 0
+ primary-for QGraphicsSceneEvent (0x0x7f8681791f08)
+
+Vtable for QGraphicsSceneResizeEvent
+QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QGraphicsSceneResizeEvent)
+16 (int (*)(...))QGraphicsSceneResizeEvent::~QGraphicsSceneResizeEvent
+24 (int (*)(...))QGraphicsSceneResizeEvent::~QGraphicsSceneResizeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneResizeEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneResizeEvent (0x0x7f8681791f70) 0
+ vptr=((& QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f86817919c0) 0
+ primary-for QGraphicsSceneResizeEvent (0x0x7f8681791f70)
+ QEvent (0x0x7f8681879180) 0
+ primary-for QGraphicsSceneEvent (0x0x7f86817919c0)
+
+Vtable for QGraphicsSceneMoveEvent
+QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSceneMoveEvent)
+16 (int (*)(...))QGraphicsSceneMoveEvent::~QGraphicsSceneMoveEvent
+24 (int (*)(...))QGraphicsSceneMoveEvent::~QGraphicsSceneMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneMoveEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneMoveEvent (0x0x7f868188b000) 0
+ vptr=((& QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f868188b068) 0
+ primary-for QGraphicsSceneMoveEvent (0x0x7f868188b000)
+ QEvent (0x0x7f86818792a0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f868188b068)
+
+Class QGraphicsTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTransform::QPrivateSignal (0x0x7f8681879420) 0 empty
+
+Vtable for QGraphicsTransform
+QGraphicsTransform::_ZTV18QGraphicsTransform: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGraphicsTransform)
+16 (int (*)(...))QGraphicsTransform::metaObject
+24 (int (*)(...))QGraphicsTransform::qt_metacast
+32 (int (*)(...))QGraphicsTransform::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsTransform
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsTransform (0x0x7f868188b0d0) 0
+ vptr=((& QGraphicsTransform::_ZTV18QGraphicsTransform) + 16)
+ QObject (0x0x7f86818793c0) 0
+ primary-for QGraphicsTransform (0x0x7f868188b0d0)
+
+Class QGraphicsScale::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScale::QPrivateSignal (0x0x7f8681879600) 0 empty
+
+Vtable for QGraphicsScale
+QGraphicsScale::_ZTV14QGraphicsScale: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGraphicsScale)
+16 (int (*)(...))QGraphicsScale::metaObject
+24 (int (*)(...))QGraphicsScale::qt_metacast
+32 (int (*)(...))QGraphicsScale::qt_metacall
+40 (int (*)(...))QGraphicsScale::~QGraphicsScale
+48 (int (*)(...))QGraphicsScale::~QGraphicsScale
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsScale::applyTo
+
+Class QGraphicsScale
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsScale (0x0x7f868188b138) 0
+ vptr=((& QGraphicsScale::_ZTV14QGraphicsScale) + 16)
+ QGraphicsTransform (0x0x7f868188b1a0) 0
+ primary-for QGraphicsScale (0x0x7f868188b138)
+ QObject (0x0x7f86818795a0) 0
+ primary-for QGraphicsTransform (0x0x7f868188b1a0)
+
+Class QGraphicsRotation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsRotation::QPrivateSignal (0x0x7f86818797e0) 0 empty
+
+Vtable for QGraphicsRotation
+QGraphicsRotation::_ZTV17QGraphicsRotation: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsRotation)
+16 (int (*)(...))QGraphicsRotation::metaObject
+24 (int (*)(...))QGraphicsRotation::qt_metacast
+32 (int (*)(...))QGraphicsRotation::qt_metacall
+40 (int (*)(...))QGraphicsRotation::~QGraphicsRotation
+48 (int (*)(...))QGraphicsRotation::~QGraphicsRotation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsRotation::applyTo
+
+Class QGraphicsRotation
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsRotation (0x0x7f868188b208) 0
+ vptr=((& QGraphicsRotation::_ZTV17QGraphicsRotation) + 16)
+ QGraphicsTransform (0x0x7f868188b270) 0
+ primary-for QGraphicsRotation (0x0x7f868188b208)
+ QObject (0x0x7f8681879780) 0
+ primary-for QGraphicsTransform (0x0x7f868188b270)
+
+Class QScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollArea::QPrivateSignal (0x0x7f8681879a20) 0 empty
+
+Vtable for QScrollArea
+QScrollArea::_ZTV11QScrollArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QScrollArea)
+16 (int (*)(...))QScrollArea::metaObject
+24 (int (*)(...))QScrollArea::qt_metacast
+32 (int (*)(...))QScrollArea::qt_metacall
+40 (int (*)(...))QScrollArea::~QScrollArea
+48 (int (*)(...))QScrollArea::~QScrollArea
+56 (int (*)(...))QScrollArea::event
+64 (int (*)(...))QScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QScrollArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QScrollArea::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QScrollArea::scrollContentsBy
+464 (int (*)(...))QScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QScrollArea)
+488 (int (*)(...))QScrollArea::_ZThn16_N11QScrollAreaD1Ev
+496 (int (*)(...))QScrollArea::_ZThn16_N11QScrollAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QScrollArea
+ size=40 align=8
+ base size=40 base align=8
+QScrollArea (0x0x7f868188b2d8) 0
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 16)
+ QAbstractScrollArea (0x0x7f868188b340) 0
+ primary-for QScrollArea (0x0x7f868188b2d8)
+ QFrame (0x0x7f868188b3a8) 0
+ primary-for QAbstractScrollArea (0x0x7f868188b340)
+ QWidget (0x0x7f8681ad5af0) 0
+ primary-for QFrame (0x0x7f868188b3a8)
+ QObject (0x0x7f8681879960) 0
+ primary-for QWidget (0x0x7f8681ad5af0)
+ QPaintDevice (0x0x7f86818799c0) 16
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 488)
+
+Class QGraphicsView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsView::QPrivateSignal (0x0x7f8681879c60) 0 empty
+
+Vtable for QGraphicsView
+QGraphicsView::_ZTV13QGraphicsView: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGraphicsView)
+16 (int (*)(...))QGraphicsView::metaObject
+24 (int (*)(...))QGraphicsView::qt_metacast
+32 (int (*)(...))QGraphicsView::qt_metacall
+40 (int (*)(...))QGraphicsView::~QGraphicsView
+48 (int (*)(...))QGraphicsView::~QGraphicsView
+56 (int (*)(...))QGraphicsView::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QGraphicsView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QGraphicsView::mousePressEvent
+176 (int (*)(...))QGraphicsView::mouseReleaseEvent
+184 (int (*)(...))QGraphicsView::mouseDoubleClickEvent
+192 (int (*)(...))QGraphicsView::mouseMoveEvent
+200 (int (*)(...))QGraphicsView::wheelEvent
+208 (int (*)(...))QGraphicsView::keyPressEvent
+216 (int (*)(...))QGraphicsView::keyReleaseEvent
+224 (int (*)(...))QGraphicsView::focusInEvent
+232 (int (*)(...))QGraphicsView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QGraphicsView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QGraphicsView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QGraphicsView::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QGraphicsView::dragEnterEvent
+320 (int (*)(...))QGraphicsView::dragMoveEvent
+328 (int (*)(...))QGraphicsView::dragLeaveEvent
+336 (int (*)(...))QGraphicsView::dropEvent
+344 (int (*)(...))QGraphicsView::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QGraphicsView::inputMethodEvent
+416 (int (*)(...))QGraphicsView::inputMethodQuery
+424 (int (*)(...))QGraphicsView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QGraphicsView::setupViewport
+448 (int (*)(...))QGraphicsView::viewportEvent
+456 (int (*)(...))QGraphicsView::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QGraphicsView::drawBackground
+480 (int (*)(...))QGraphicsView::drawForeground
+488 (int (*)(...))QGraphicsView::drawItems
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI13QGraphicsView)
+512 (int (*)(...))QGraphicsView::_ZThn16_N13QGraphicsViewD1Ev
+520 (int (*)(...))QGraphicsView::_ZThn16_N13QGraphicsViewD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QGraphicsView
+ size=40 align=8
+ base size=40 base align=8
+QGraphicsView (0x0x7f868188b410) 0
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 16)
+ QAbstractScrollArea (0x0x7f868188b478) 0
+ primary-for QGraphicsView (0x0x7f868188b410)
+ QFrame (0x0x7f868188b4e0) 0
+ primary-for QAbstractScrollArea (0x0x7f868188b478)
+ QWidget (0x0x7f8681ad5b60) 0
+ primary-for QFrame (0x0x7f868188b4e0)
+ QObject (0x0x7f8681879ba0) 0
+ primary-for QWidget (0x0x7f8681ad5b60)
+ QPaintDevice (0x0x7f8681879c00) 16
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 512)
+
+Class QGroupBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGroupBox::QPrivateSignal (0x0x7f86818efb40) 0 empty
+
+Vtable for QGroupBox
+QGroupBox::_ZTV9QGroupBox: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QGroupBox)
+16 (int (*)(...))QGroupBox::metaObject
+24 (int (*)(...))QGroupBox::qt_metacast
+32 (int (*)(...))QGroupBox::qt_metacall
+40 (int (*)(...))QGroupBox::~QGroupBox
+48 (int (*)(...))QGroupBox::~QGroupBox
+56 (int (*)(...))QGroupBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QGroupBox::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QGroupBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QGroupBox::mousePressEvent
+176 (int (*)(...))QGroupBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QGroupBox::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QGroupBox::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QGroupBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QGroupBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QGroupBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QGroupBox::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI9QGroupBox)
+456 (int (*)(...))QGroupBox::_ZThn16_N9QGroupBoxD1Ev
+464 (int (*)(...))QGroupBox::_ZThn16_N9QGroupBoxD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QGroupBox
+ size=40 align=8
+ base size=40 base align=8
+QGroupBox (0x0x7f868188b7b8) 0
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 16)
+ QWidget (0x0x7f86818c1310) 0
+ primary-for QGroupBox (0x0x7f868188b7b8)
+ QObject (0x0x7f86818efa80) 0
+ primary-for QWidget (0x0x7f86818c1310)
+ QPaintDevice (0x0x7f86818efae0) 16
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 456)
+
+Class QHeaderView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHeaderView::QPrivateSignal (0x0x7f86818efd80) 0 empty
+
+Vtable for QHeaderView
+QHeaderView::_ZTV11QHeaderView: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHeaderView)
+16 (int (*)(...))QHeaderView::metaObject
+24 (int (*)(...))QHeaderView::qt_metacast
+32 (int (*)(...))QHeaderView::qt_metacall
+40 (int (*)(...))QHeaderView::~QHeaderView
+48 (int (*)(...))QHeaderView::~QHeaderView
+56 (int (*)(...))QHeaderView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QHeaderView::setVisible
+128 (int (*)(...))QHeaderView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QHeaderView::mousePressEvent
+176 (int (*)(...))QHeaderView::mouseReleaseEvent
+184 (int (*)(...))QHeaderView::mouseDoubleClickEvent
+192 (int (*)(...))QHeaderView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QHeaderView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QHeaderView::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QHeaderView::viewportEvent
+456 (int (*)(...))QHeaderView::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QHeaderView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QHeaderView::visualRect
+504 (int (*)(...))QHeaderView::scrollTo
+512 (int (*)(...))QHeaderView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QHeaderView::reset
+552 (int (*)(...))QAbstractItemView::setRootIndex
+560 (int (*)(...))QHeaderView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QHeaderView::dataChanged
+584 (int (*)(...))QHeaderView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QHeaderView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QHeaderView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QHeaderView::moveCursor
+704 (int (*)(...))QHeaderView::horizontalOffset
+712 (int (*)(...))QHeaderView::verticalOffset
+720 (int (*)(...))QHeaderView::isIndexHidden
+728 (int (*)(...))QHeaderView::setSelection
+736 (int (*)(...))QHeaderView::visualRegionForSelection
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QHeaderView::paintSection
+792 (int (*)(...))QHeaderView::sectionSizeFromContents
+800 (int (*)(...))QHeaderView::initStyleOptionForIndex
+808 (int (*)(...))QHeaderView::initStyleOption
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI11QHeaderView)
+832 (int (*)(...))QHeaderView::_ZThn16_N11QHeaderViewD1Ev
+840 (int (*)(...))QHeaderView::_ZThn16_N11QHeaderViewD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHeaderView
+ size=40 align=8
+ base size=40 base align=8
+QHeaderView (0x0x7f868188b820) 0
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 16)
+ QAbstractItemView (0x0x7f868188b888) 0
+ primary-for QHeaderView (0x0x7f868188b820)
+ QAbstractScrollArea (0x0x7f868188b8f0) 0
+ primary-for QAbstractItemView (0x0x7f868188b888)
+ QFrame (0x0x7f868188b958) 0
+ primary-for QAbstractScrollArea (0x0x7f868188b8f0)
+ QWidget (0x0x7f86818c1380) 0
+ primary-for QFrame (0x0x7f868188b958)
+ QObject (0x0x7f86818efcc0) 0
+ primary-for QWidget (0x0x7f86818c1380)
+ QPaintDevice (0x0x7f86818efd20) 16
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 832)
+
+Class QLineEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLineEdit::QPrivateSignal (0x0x7f8681579240) 0 empty
+
+Vtable for QLineEdit
+QLineEdit::_ZTV9QLineEdit: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QLineEdit)
+16 (int (*)(...))QLineEdit::metaObject
+24 (int (*)(...))QLineEdit::qt_metacast
+32 (int (*)(...))QLineEdit::qt_metacall
+40 (int (*)(...))QLineEdit::~QLineEdit
+48 (int (*)(...))QLineEdit::~QLineEdit
+56 (int (*)(...))QLineEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QLineEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLineEdit::sizeHint
+136 (int (*)(...))QLineEdit::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QLineEdit::mousePressEvent
+176 (int (*)(...))QLineEdit::mouseReleaseEvent
+184 (int (*)(...))QLineEdit::mouseDoubleClickEvent
+192 (int (*)(...))QLineEdit::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QLineEdit::keyPressEvent
+216 (int (*)(...))QLineEdit::keyReleaseEvent
+224 (int (*)(...))QLineEdit::focusInEvent
+232 (int (*)(...))QLineEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLineEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QLineEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QLineEdit::dragEnterEvent
+320 (int (*)(...))QLineEdit::dragMoveEvent
+328 (int (*)(...))QLineEdit::dragLeaveEvent
+336 (int (*)(...))QLineEdit::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QLineEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QLineEdit::inputMethodEvent
+416 (int (*)(...))QLineEdit::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QLineEdit::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI9QLineEdit)
+456 (int (*)(...))QLineEdit::_ZThn16_N9QLineEditD1Ev
+464 (int (*)(...))QLineEdit::_ZThn16_N9QLineEditD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLineEdit
+ size=40 align=8
+ base size=40 base align=8
+QLineEdit (0x0x7f868188b9c0) 0
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 16)
+ QWidget (0x0x7f86818c1620) 0
+ primary-for QLineEdit (0x0x7f868188b9c0)
+ QObject (0x0x7f8681579180) 0
+ primary-for QWidget (0x0x7f86818c1620)
+ QPaintDevice (0x0x7f86815791e0) 16
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 456)
+
+Class QInputDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDialog::QPrivateSignal (0x0x7f8681579600) 0 empty
+
+Vtable for QInputDialog
+QInputDialog::_ZTV12QInputDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputDialog)
+16 (int (*)(...))QInputDialog::metaObject
+24 (int (*)(...))QInputDialog::qt_metacast
+32 (int (*)(...))QInputDialog::qt_metacall
+40 (int (*)(...))QInputDialog::~QInputDialog
+48 (int (*)(...))QInputDialog::~QInputDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QInputDialog::setVisible
+128 (int (*)(...))QInputDialog::sizeHint
+136 (int (*)(...))QInputDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QInputDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QInputDialog)
+488 (int (*)(...))QInputDialog::_ZThn16_N12QInputDialogD1Ev
+496 (int (*)(...))QInputDialog::_ZThn16_N12QInputDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QInputDialog
+ size=40 align=8
+ base size=40 base align=8
+QInputDialog (0x0x7f868188ba28) 0
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 16)
+ QDialog (0x0x7f868188ba90) 0
+ primary-for QInputDialog (0x0x7f868188ba28)
+ QWidget (0x0x7f86818c1930) 0
+ primary-for QDialog (0x0x7f868188ba90)
+ QObject (0x0x7f8681579540) 0
+ primary-for QWidget (0x0x7f86818c1930)
+ QPaintDevice (0x0x7f86815795a0) 16
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 488)
+
+Class QItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemDelegate::QPrivateSignal (0x0x7f8681579ae0) 0 empty
+
+Vtable for QItemDelegate
+QItemDelegate::_ZTV13QItemDelegate: 28 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QItemDelegate)
+16 (int (*)(...))QItemDelegate::metaObject
+24 (int (*)(...))QItemDelegate::qt_metacast
+32 (int (*)(...))QItemDelegate::qt_metacall
+40 (int (*)(...))QItemDelegate::~QItemDelegate
+48 (int (*)(...))QItemDelegate::~QItemDelegate
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QItemDelegate::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QItemDelegate::paint
+120 (int (*)(...))QItemDelegate::sizeHint
+128 (int (*)(...))QItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QItemDelegate::setEditorData
+152 (int (*)(...))QItemDelegate::setModelData
+160 (int (*)(...))QItemDelegate::updateEditorGeometry
+168 (int (*)(...))QItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+192 (int (*)(...))QItemDelegate::drawDisplay
+200 (int (*)(...))QItemDelegate::drawDecoration
+208 (int (*)(...))QItemDelegate::drawFocus
+216 (int (*)(...))QItemDelegate::drawCheck
+
+Class QItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QItemDelegate (0x0x7f868188bc30) 0
+ vptr=((& QItemDelegate::_ZTV13QItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7f868188bc98) 0
+ primary-for QItemDelegate (0x0x7f868188bc30)
+ QObject (0x0x7f8681579a80) 0
+ primary-for QAbstractItemDelegate (0x0x7f868188bc98)
+
+Vtable for QItemEditorCreatorBase
+QItemEditorCreatorBase::_ZTV22QItemEditorCreatorBase: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QItemEditorCreatorBase)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QItemEditorCreatorBase
+ size=8 align=8
+ base size=8 base align=8
+QItemEditorCreatorBase (0x0x7f8681579c60) 0 nearly-empty
+ vptr=((& QItemEditorCreatorBase::_ZTV22QItemEditorCreatorBase) + 16)
+
+Vtable for QItemEditorFactory
+QItemEditorFactory::_ZTV18QItemEditorFactory: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QItemEditorFactory)
+16 (int (*)(...))QItemEditorFactory::~QItemEditorFactory
+24 (int (*)(...))QItemEditorFactory::~QItemEditorFactory
+32 (int (*)(...))QItemEditorFactory::createEditor
+40 (int (*)(...))QItemEditorFactory::valuePropertyName
+
+Class QItemEditorFactory
+ size=16 align=8
+ base size=16 base align=8
+QItemEditorFactory (0x0x7f86815f5000) 0
+ vptr=((& QItemEditorFactory::_ZTV18QItemEditorFactory) + 16)
+
+Class QKeySequenceEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QKeySequenceEdit::QPrivateSignal (0x0x7f86815f54e0) 0 empty
+
+Vtable for QKeySequenceEdit
+QKeySequenceEdit::_ZTV16QKeySequenceEdit: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QKeySequenceEdit)
+16 (int (*)(...))QKeySequenceEdit::metaObject
+24 (int (*)(...))QKeySequenceEdit::qt_metacast
+32 (int (*)(...))QKeySequenceEdit::qt_metacall
+40 (int (*)(...))QKeySequenceEdit::~QKeySequenceEdit
+48 (int (*)(...))QKeySequenceEdit::~QKeySequenceEdit
+56 (int (*)(...))QKeySequenceEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QKeySequenceEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QKeySequenceEdit::keyPressEvent
+216 (int (*)(...))QKeySequenceEdit::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI16QKeySequenceEdit)
+448 (int (*)(...))QKeySequenceEdit::_ZThn16_N16QKeySequenceEditD1Ev
+456 (int (*)(...))QKeySequenceEdit::_ZThn16_N16QKeySequenceEditD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QKeySequenceEdit
+ size=40 align=8
+ base size=40 base align=8
+QKeySequenceEdit (0x0x7f868188bdd0) 0
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 16)
+ QWidget (0x0x7f86818c1c40) 0
+ primary-for QKeySequenceEdit (0x0x7f868188bdd0)
+ QObject (0x0x7f86815f5420) 0
+ primary-for QWidget (0x0x7f86818c1c40)
+ QPaintDevice (0x0x7f86815f5480) 16
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 448)
+
+Class QLabel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLabel::QPrivateSignal (0x0x7f86815f5720) 0 empty
+
+Vtable for QLabel
+QLabel::_ZTV6QLabel: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QLabel)
+16 (int (*)(...))QLabel::metaObject
+24 (int (*)(...))QLabel::qt_metacast
+32 (int (*)(...))QLabel::qt_metacall
+40 (int (*)(...))QLabel::~QLabel
+48 (int (*)(...))QLabel::~QLabel
+56 (int (*)(...))QLabel::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLabel::sizeHint
+136 (int (*)(...))QLabel::minimumSizeHint
+144 (int (*)(...))QLabel::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QLabel::mousePressEvent
+176 (int (*)(...))QLabel::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QLabel::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QLabel::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QLabel::focusInEvent
+232 (int (*)(...))QLabel::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLabel::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QLabel::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QLabel::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QLabel::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI6QLabel)
+456 (int (*)(...))QLabel::_ZThn16_N6QLabelD1Ev
+464 (int (*)(...))QLabel::_ZThn16_N6QLabelD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLabel
+ size=40 align=8
+ base size=40 base align=8
+QLabel (0x0x7f868188be38) 0
+ vptr=((& QLabel::_ZTV6QLabel) + 16)
+ QFrame (0x0x7f868188bea0) 0
+ primary-for QLabel (0x0x7f868188be38)
+ QWidget (0x0x7f86818c1cb0) 0
+ primary-for QFrame (0x0x7f868188bea0)
+ QObject (0x0x7f86815f5660) 0
+ primary-for QWidget (0x0x7f86818c1cb0)
+ QPaintDevice (0x0x7f86815f56c0) 16
+ vptr=((& QLabel::_ZTV6QLabel) + 456)
+
+Class QLCDNumber::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLCDNumber::QPrivateSignal (0x0x7f86815f5a20) 0 empty
+
+Vtable for QLCDNumber
+QLCDNumber::_ZTV10QLCDNumber: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QLCDNumber)
+16 (int (*)(...))QLCDNumber::metaObject
+24 (int (*)(...))QLCDNumber::qt_metacast
+32 (int (*)(...))QLCDNumber::qt_metacall
+40 (int (*)(...))QLCDNumber::~QLCDNumber
+48 (int (*)(...))QLCDNumber::~QLCDNumber
+56 (int (*)(...))QLCDNumber::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLCDNumber::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLCDNumber::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI10QLCDNumber)
+456 (int (*)(...))QLCDNumber::_ZThn16_N10QLCDNumberD1Ev
+464 (int (*)(...))QLCDNumber::_ZThn16_N10QLCDNumberD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLCDNumber
+ size=40 align=8
+ base size=40 base align=8
+QLCDNumber (0x0x7f868188bf08) 0
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 16)
+ QFrame (0x0x7f868188bf70) 0
+ primary-for QLCDNumber (0x0x7f868188bf08)
+ QWidget (0x0x7f86818c1d20) 0
+ primary-for QFrame (0x0x7f868188bf70)
+ QObject (0x0x7f86815f5960) 0
+ primary-for QWidget (0x0x7f86818c1d20)
+ QPaintDevice (0x0x7f86815f59c0) 16
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 456)
+
+Class QListView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListView::QPrivateSignal (0x0x7f86815f5de0) 0 empty
+
+Vtable for QListView
+QListView::_ZTV9QListView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QListView)
+16 (int (*)(...))QListView::metaObject
+24 (int (*)(...))QListView::qt_metacast
+32 (int (*)(...))QListView::qt_metacall
+40 (int (*)(...))QListView::~QListView
+48 (int (*)(...))QListView::~QListView
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI9QListView)
+800 (int (*)(...))QListView::_ZThn16_N9QListViewD1Ev
+808 (int (*)(...))QListView::_ZThn16_N9QListViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QListView
+ size=40 align=8
+ base size=40 base align=8
+QListView (0x0x7f8681650000) 0
+ vptr=((& QListView::_ZTV9QListView) + 16)
+ QAbstractItemView (0x0x7f8681650068) 0
+ primary-for QListView (0x0x7f8681650000)
+ QAbstractScrollArea (0x0x7f86816500d0) 0
+ primary-for QAbstractItemView (0x0x7f8681650068)
+ QFrame (0x0x7f8681650138) 0
+ primary-for QAbstractScrollArea (0x0x7f86816500d0)
+ QWidget (0x0x7f868163c0e0) 0
+ primary-for QFrame (0x0x7f8681650138)
+ QObject (0x0x7f86815f5d20) 0
+ primary-for QWidget (0x0x7f868163c0e0)
+ QPaintDevice (0x0x7f86815f5d80) 16
+ vptr=((& QListView::_ZTV9QListView) + 800)
+
+Vtable for QListWidgetItem
+QListWidgetItem::_ZTV15QListWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QListWidgetItem)
+16 (int (*)(...))QListWidgetItem::~QListWidgetItem
+24 (int (*)(...))QListWidgetItem::~QListWidgetItem
+32 (int (*)(...))QListWidgetItem::clone
+40 (int (*)(...))QListWidgetItem::data
+48 (int (*)(...))QListWidgetItem::setData
+56 (int (*)(...))QListWidgetItem::operator<
+64 (int (*)(...))QListWidgetItem::read
+72 (int (*)(...))QListWidgetItem::write
+
+Class QListWidgetItem
+ size=40 align=8
+ base size=36 base align=8
+QListWidgetItem (0x0x7f8681673360) 0
+ vptr=((& QListWidgetItem::_ZTV15QListWidgetItem) + 16)
+
+Class QListWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListWidget::QPrivateSignal (0x0x7f8681673de0) 0 empty
+
+Vtable for QListWidget
+QListWidget::_ZTV11QListWidget: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QListWidget)
+16 (int (*)(...))QListWidget::metaObject
+24 (int (*)(...))QListWidget::qt_metacast
+32 (int (*)(...))QListWidget::qt_metacall
+40 (int (*)(...))QListWidget::~QListWidget
+48 (int (*)(...))QListWidget::~QListWidget
+56 (int (*)(...))QListWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QListWidget::setModel
+480 (int (*)(...))QListWidget::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))QListWidget::mimeTypes
+792 (int (*)(...))QListWidget::mimeData
+800 (int (*)(...))QListWidget::dropMimeData
+808 (int (*)(...))QListWidget::supportedDropActions
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI11QListWidget)
+832 (int (*)(...))QListWidget::_ZThn16_N11QListWidgetD1Ev
+840 (int (*)(...))QListWidget::_ZThn16_N11QListWidgetD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QListWidget
+ size=40 align=8
+ base size=40 base align=8
+QListWidget (0x0x7f86816501a0) 0
+ vptr=((& QListWidget::_ZTV11QListWidget) + 16)
+ QListView (0x0x7f8681650208) 0
+ primary-for QListWidget (0x0x7f86816501a0)
+ QAbstractItemView (0x0x7f8681650270) 0
+ primary-for QListView (0x0x7f8681650208)
+ QAbstractScrollArea (0x0x7f86816502d8) 0
+ primary-for QAbstractItemView (0x0x7f8681650270)
+ QFrame (0x0x7f8681650340) 0
+ primary-for QAbstractScrollArea (0x0x7f86816502d8)
+ QWidget (0x0x7f868163c700) 0
+ primary-for QFrame (0x0x7f8681650340)
+ QObject (0x0x7f8681673d20) 0
+ primary-for QWidget (0x0x7f868163c700)
+ QPaintDevice (0x0x7f8681673d80) 16
+ vptr=((& QListWidget::_ZTV11QListWidget) + 832)
+
+Class QMainWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMainWindow::QPrivateSignal (0x0x7f86816b7300) 0 empty
+
+Vtable for QMainWindow
+QMainWindow::_ZTV11QMainWindow: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMainWindow)
+16 (int (*)(...))QMainWindow::metaObject
+24 (int (*)(...))QMainWindow::qt_metacast
+32 (int (*)(...))QMainWindow::qt_metacall
+40 (int (*)(...))QMainWindow::~QMainWindow
+48 (int (*)(...))QMainWindow::~QMainWindow
+56 (int (*)(...))QMainWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QMainWindow::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QMainWindow::createPopupMenu
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QMainWindow)
+456 (int (*)(...))QMainWindow::_ZThn16_N11QMainWindowD1Ev
+464 (int (*)(...))QMainWindow::_ZThn16_N11QMainWindowD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMainWindow
+ size=40 align=8
+ base size=40 base align=8
+QMainWindow (0x0x7f86816503a8) 0
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 16)
+ QWidget (0x0x7f868163c770) 0
+ primary-for QMainWindow (0x0x7f86816503a8)
+ QObject (0x0x7f86816b7240) 0
+ primary-for QWidget (0x0x7f868163c770)
+ QPaintDevice (0x0x7f86816b72a0) 16
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 456)
+
+Class QMdiArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiArea::QPrivateSignal (0x0x7f86816b79c0) 0 empty
+
+Vtable for QMdiArea
+QMdiArea::_ZTV8QMdiArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QMdiArea)
+16 (int (*)(...))QMdiArea::metaObject
+24 (int (*)(...))QMdiArea::qt_metacast
+32 (int (*)(...))QMdiArea::qt_metacall
+40 (int (*)(...))QMdiArea::~QMdiArea
+48 (int (*)(...))QMdiArea::~QMdiArea
+56 (int (*)(...))QMdiArea::event
+64 (int (*)(...))QMdiArea::eventFilter
+72 (int (*)(...))QMdiArea::timerEvent
+80 (int (*)(...))QMdiArea::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMdiArea::sizeHint
+136 (int (*)(...))QMdiArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QMdiArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMdiArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QMdiArea::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QMdiArea::setupViewport
+448 (int (*)(...))QMdiArea::viewportEvent
+456 (int (*)(...))QMdiArea::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI8QMdiArea)
+488 (int (*)(...))QMdiArea::_ZThn16_N8QMdiAreaD1Ev
+496 (int (*)(...))QMdiArea::_ZThn16_N8QMdiAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMdiArea
+ size=40 align=8
+ base size=40 base align=8
+QMdiArea (0x0x7f8681650548) 0
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 16)
+ QAbstractScrollArea (0x0x7f86816505b0) 0
+ primary-for QMdiArea (0x0x7f8681650548)
+ QFrame (0x0x7f8681650618) 0
+ primary-for QAbstractScrollArea (0x0x7f86816505b0)
+ QWidget (0x0x7f868163ca80) 0
+ primary-for QFrame (0x0x7f8681650618)
+ QObject (0x0x7f86816b7900) 0
+ primary-for QWidget (0x0x7f868163ca80)
+ QPaintDevice (0x0x7f86816b7960) 16
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 488)
+
+Class QMdiSubWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiSubWindow::QPrivateSignal (0x0x7f86817420c0) 0 empty
+
+Vtable for QMdiSubWindow
+QMdiSubWindow::_ZTV13QMdiSubWindow: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QMdiSubWindow)
+16 (int (*)(...))QMdiSubWindow::metaObject
+24 (int (*)(...))QMdiSubWindow::qt_metacast
+32 (int (*)(...))QMdiSubWindow::qt_metacall
+40 (int (*)(...))QMdiSubWindow::~QMdiSubWindow
+48 (int (*)(...))QMdiSubWindow::~QMdiSubWindow
+56 (int (*)(...))QMdiSubWindow::event
+64 (int (*)(...))QMdiSubWindow::eventFilter
+72 (int (*)(...))QMdiSubWindow::timerEvent
+80 (int (*)(...))QMdiSubWindow::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMdiSubWindow::sizeHint
+136 (int (*)(...))QMdiSubWindow::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMdiSubWindow::mousePressEvent
+176 (int (*)(...))QMdiSubWindow::mouseReleaseEvent
+184 (int (*)(...))QMdiSubWindow::mouseDoubleClickEvent
+192 (int (*)(...))QMdiSubWindow::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMdiSubWindow::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QMdiSubWindow::focusInEvent
+232 (int (*)(...))QMdiSubWindow::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QMdiSubWindow::leaveEvent
+256 (int (*)(...))QMdiSubWindow::paintEvent
+264 (int (*)(...))QMdiSubWindow::moveEvent
+272 (int (*)(...))QMdiSubWindow::resizeEvent
+280 (int (*)(...))QMdiSubWindow::closeEvent
+288 (int (*)(...))QMdiSubWindow::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QMdiSubWindow::showEvent
+352 (int (*)(...))QMdiSubWindow::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMdiSubWindow::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI13QMdiSubWindow)
+448 (int (*)(...))QMdiSubWindow::_ZThn16_N13QMdiSubWindowD1Ev
+456 (int (*)(...))QMdiSubWindow::_ZThn16_N13QMdiSubWindowD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMdiSubWindow
+ size=40 align=8
+ base size=40 base align=8
+QMdiSubWindow (0x0x7f86816507b8) 0
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 16)
+ QWidget (0x0x7f868163ce00) 0
+ primary-for QMdiSubWindow (0x0x7f86816507b8)
+ QObject (0x0x7f8681742000) 0
+ primary-for QWidget (0x0x7f868163ce00)
+ QPaintDevice (0x0x7f8681742060) 16
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 448)
+
+Class QMenu::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenu::QPrivateSignal (0x0x7f8681742600) 0 empty
+
+Vtable for QMenu
+QMenu::_ZTV5QMenu: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QMenu)
+16 (int (*)(...))QMenu::metaObject
+24 (int (*)(...))QMenu::qt_metacast
+32 (int (*)(...))QMenu::qt_metacall
+40 (int (*)(...))QMenu::~QMenu
+48 (int (*)(...))QMenu::~QMenu
+56 (int (*)(...))QMenu::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QMenu::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMenu::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMenu::mousePressEvent
+176 (int (*)(...))QMenu::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QMenu::mouseMoveEvent
+200 (int (*)(...))QMenu::wheelEvent
+208 (int (*)(...))QMenu::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QMenu::enterEvent
+248 (int (*)(...))QMenu::leaveEvent
+256 (int (*)(...))QMenu::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QMenu::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QMenu::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMenu::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QMenu::focusNextPrevChild
+432 (int (*)(...))QMenu::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI5QMenu)
+456 (int (*)(...))QMenu::_ZThn16_N5QMenuD1Ev
+464 (int (*)(...))QMenu::_ZThn16_N5QMenuD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMenu
+ size=40 align=8
+ base size=40 base align=8
+QMenu (0x0x7f8681650958) 0
+ vptr=((& QMenu::_ZTV5QMenu) + 16)
+ QWidget (0x0x7f8681345070) 0
+ primary-for QMenu (0x0x7f8681650958)
+ QObject (0x0x7f8681742540) 0
+ primary-for QWidget (0x0x7f8681345070)
+ QPaintDevice (0x0x7f86817425a0) 16
+ vptr=((& QMenu::_ZTV5QMenu) + 456)
+
+Class QMenuBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenuBar::QPrivateSignal (0x0x7f86817429c0) 0 empty
+
+Vtable for QMenuBar
+QMenuBar::_ZTV8QMenuBar: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QMenuBar)
+16 (int (*)(...))QMenuBar::metaObject
+24 (int (*)(...))QMenuBar::qt_metacast
+32 (int (*)(...))QMenuBar::qt_metacall
+40 (int (*)(...))QMenuBar::~QMenuBar
+48 (int (*)(...))QMenuBar::~QMenuBar
+56 (int (*)(...))QMenuBar::event
+64 (int (*)(...))QMenuBar::eventFilter
+72 (int (*)(...))QMenuBar::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QMenuBar::setVisible
+128 (int (*)(...))QMenuBar::sizeHint
+136 (int (*)(...))QMenuBar::minimumSizeHint
+144 (int (*)(...))QMenuBar::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMenuBar::mousePressEvent
+176 (int (*)(...))QMenuBar::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QMenuBar::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMenuBar::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QMenuBar::focusInEvent
+232 (int (*)(...))QMenuBar::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QMenuBar::leaveEvent
+256 (int (*)(...))QMenuBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMenuBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QMenuBar::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMenuBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QMenuBar::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI8QMenuBar)
+456 (int (*)(...))QMenuBar::_ZThn16_N8QMenuBarD1Ev
+464 (int (*)(...))QMenuBar::_ZThn16_N8QMenuBarD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMenuBar
+ size=40 align=8
+ base size=40 base align=8
+QMenuBar (0x0x7f86816509c0) 0
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 16)
+ QWidget (0x0x7f86813450e0) 0
+ primary-for QMenuBar (0x0x7f86816509c0)
+ QObject (0x0x7f8681742900) 0
+ primary-for QWidget (0x0x7f86813450e0)
+ QPaintDevice (0x0x7f8681742960) 16
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 456)
+
+Class QMessageBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMessageBox::QPrivateSignal (0x0x7f8681742cc0) 0 empty
+
+Vtable for QMessageBox
+QMessageBox::_ZTV11QMessageBox: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMessageBox)
+16 (int (*)(...))QMessageBox::metaObject
+24 (int (*)(...))QMessageBox::qt_metacast
+32 (int (*)(...))QMessageBox::qt_metacall
+40 (int (*)(...))QMessageBox::~QMessageBox
+48 (int (*)(...))QMessageBox::~QMessageBox
+56 (int (*)(...))QMessageBox::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMessageBox::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMessageBox::resizeEvent
+280 (int (*)(...))QMessageBox::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QMessageBox::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMessageBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QMessageBox)
+488 (int (*)(...))QMessageBox::_ZThn16_N11QMessageBoxD1Ev
+496 (int (*)(...))QMessageBox::_ZThn16_N11QMessageBoxD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMessageBox
+ size=40 align=8
+ base size=40 base align=8
+QMessageBox (0x0x7f8681650a28) 0
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 16)
+ QDialog (0x0x7f8681650a90) 0
+ primary-for QMessageBox (0x0x7f8681650a28)
+ QWidget (0x0x7f8681345150) 0
+ primary-for QDialog (0x0x7f8681650a90)
+ QObject (0x0x7f8681742c00) 0
+ primary-for QWidget (0x0x7f8681345150)
+ QPaintDevice (0x0x7f8681742c60) 16
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 488)
+
+Class QTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextEdit::QPrivateSignal (0x0x7f86813f4540) 0 empty
+
+Class QTextEdit::ExtraSelection
+ size=24 align=8
+ base size=24 base align=8
+QTextEdit::ExtraSelection (0x0x7f86813f45a0) 0
+
+Vtable for QTextEdit
+QTextEdit::_ZTV9QTextEdit: 74 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTextEdit)
+16 (int (*)(...))QTextEdit::metaObject
+24 (int (*)(...))QTextEdit::qt_metacast
+32 (int (*)(...))QTextEdit::qt_metacall
+40 (int (*)(...))QTextEdit::~QTextEdit
+48 (int (*)(...))QTextEdit::~QTextEdit
+56 (int (*)(...))QTextEdit::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTextEdit::mousePressEvent
+176 (int (*)(...))QTextEdit::mouseReleaseEvent
+184 (int (*)(...))QTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QTextEdit::mouseMoveEvent
+200 (int (*)(...))QTextEdit::wheelEvent
+208 (int (*)(...))QTextEdit::keyPressEvent
+216 (int (*)(...))QTextEdit::keyReleaseEvent
+224 (int (*)(...))QTextEdit::focusInEvent
+232 (int (*)(...))QTextEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTextEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QTextEdit::dragEnterEvent
+320 (int (*)(...))QTextEdit::dragMoveEvent
+328 (int (*)(...))QTextEdit::dragLeaveEvent
+336 (int (*)(...))QTextEdit::dropEvent
+344 (int (*)(...))QTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QTextEdit::inputMethodEvent
+416 (int (*)(...))QTextEdit::inputMethodQuery
+424 (int (*)(...))QTextEdit::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QTextEdit::loadResource
+480 (int (*)(...))QTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QTextEdit::canInsertFromMimeData
+496 (int (*)(...))QTextEdit::insertFromMimeData
+504 (int (*)(...))QTextEdit::doSetTextCursor
+512 (int (*)(...))-16
+520 (int (*)(...))(& _ZTI9QTextEdit)
+528 (int (*)(...))QTextEdit::_ZThn16_N9QTextEditD1Ev
+536 (int (*)(...))QTextEdit::_ZThn16_N9QTextEditD0Ev
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTextEdit
+ size=40 align=8
+ base size=40 base align=8
+QTextEdit (0x0x7f8681650c30) 0
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 16)
+ QAbstractScrollArea (0x0x7f8681650c98) 0
+ primary-for QTextEdit (0x0x7f8681650c30)
+ QFrame (0x0x7f8681650d00) 0
+ primary-for QAbstractScrollArea (0x0x7f8681650c98)
+ QWidget (0x0x7f86813b84d0) 0
+ primary-for QFrame (0x0x7f8681650d00)
+ QObject (0x0x7f86813f4480) 0
+ primary-for QWidget (0x0x7f86813b84d0)
+ QPaintDevice (0x0x7f86813f44e0) 16
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 528)
+
+Class QPlainTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextEdit::QPrivateSignal (0x0x7f86813f4de0) 0 empty
+
+Vtable for QPlainTextEdit
+QPlainTextEdit::_ZTV14QPlainTextEdit: 74 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QPlainTextEdit)
+16 (int (*)(...))QPlainTextEdit::metaObject
+24 (int (*)(...))QPlainTextEdit::qt_metacast
+32 (int (*)(...))QPlainTextEdit::qt_metacall
+40 (int (*)(...))QPlainTextEdit::~QPlainTextEdit
+48 (int (*)(...))QPlainTextEdit::~QPlainTextEdit
+56 (int (*)(...))QPlainTextEdit::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QPlainTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QPlainTextEdit::mousePressEvent
+176 (int (*)(...))QPlainTextEdit::mouseReleaseEvent
+184 (int (*)(...))QPlainTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QPlainTextEdit::mouseMoveEvent
+200 (int (*)(...))QPlainTextEdit::wheelEvent
+208 (int (*)(...))QPlainTextEdit::keyPressEvent
+216 (int (*)(...))QPlainTextEdit::keyReleaseEvent
+224 (int (*)(...))QPlainTextEdit::focusInEvent
+232 (int (*)(...))QPlainTextEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QPlainTextEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QPlainTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QPlainTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QPlainTextEdit::dragEnterEvent
+320 (int (*)(...))QPlainTextEdit::dragMoveEvent
+328 (int (*)(...))QPlainTextEdit::dragLeaveEvent
+336 (int (*)(...))QPlainTextEdit::dropEvent
+344 (int (*)(...))QPlainTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QPlainTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QPlainTextEdit::inputMethodEvent
+416 (int (*)(...))QPlainTextEdit::inputMethodQuery
+424 (int (*)(...))QPlainTextEdit::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QPlainTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QPlainTextEdit::loadResource
+480 (int (*)(...))QPlainTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QPlainTextEdit::canInsertFromMimeData
+496 (int (*)(...))QPlainTextEdit::insertFromMimeData
+504 (int (*)(...))QPlainTextEdit::doSetTextCursor
+512 (int (*)(...))-16
+520 (int (*)(...))(& _ZTI14QPlainTextEdit)
+528 (int (*)(...))QPlainTextEdit::_ZThn16_N14QPlainTextEditD1Ev
+536 (int (*)(...))QPlainTextEdit::_ZThn16_N14QPlainTextEditD0Ev
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QPlainTextEdit
+ size=40 align=8
+ base size=40 base align=8
+QPlainTextEdit (0x0x7f8681650ea0) 0
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 16)
+ QAbstractScrollArea (0x0x7f8681650f08) 0
+ primary-for QPlainTextEdit (0x0x7f8681650ea0)
+ QFrame (0x0x7f8681650f70) 0
+ primary-for QAbstractScrollArea (0x0x7f8681650f08)
+ QWidget (0x0x7f86813b8850) 0
+ primary-for QFrame (0x0x7f8681650f70)
+ QObject (0x0x7f86813f4d20) 0
+ primary-for QWidget (0x0x7f86813b8850)
+ QPaintDevice (0x0x7f86813f4d80) 16
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 528)
+
+Class QPlainTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextDocumentLayout::QPrivateSignal (0x0x7f8681488360) 0 empty
+
+Vtable for QPlainTextDocumentLayout
+QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QPlainTextDocumentLayout)
+16 (int (*)(...))QPlainTextDocumentLayout::metaObject
+24 (int (*)(...))QPlainTextDocumentLayout::qt_metacast
+32 (int (*)(...))QPlainTextDocumentLayout::qt_metacall
+40 (int (*)(...))QPlainTextDocumentLayout::~QPlainTextDocumentLayout
+48 (int (*)(...))QPlainTextDocumentLayout::~QPlainTextDocumentLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPlainTextDocumentLayout::draw
+120 (int (*)(...))QPlainTextDocumentLayout::hitTest
+128 (int (*)(...))QPlainTextDocumentLayout::pageCount
+136 (int (*)(...))QPlainTextDocumentLayout::documentSize
+144 (int (*)(...))QPlainTextDocumentLayout::frameBoundingRect
+152 (int (*)(...))QPlainTextDocumentLayout::blockBoundingRect
+160 (int (*)(...))QPlainTextDocumentLayout::documentChanged
+168 (int (*)(...))QAbstractTextDocumentLayout::resizeInlineObject
+176 (int (*)(...))QAbstractTextDocumentLayout::positionInlineObject
+184 (int (*)(...))QAbstractTextDocumentLayout::drawInlineObject
+
+Class QPlainTextDocumentLayout
+ size=16 align=8
+ base size=16 base align=8
+QPlainTextDocumentLayout (0x0x7f868148d000) 0
+ vptr=((& QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout) + 16)
+ QAbstractTextDocumentLayout (0x0x7f868148d068) 0
+ primary-for QPlainTextDocumentLayout (0x0x7f868148d000)
+ QObject (0x0x7f8681488300) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f868148d068)
+
+Class QProgressBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressBar::QPrivateSignal (0x0x7f86814885a0) 0 empty
+
+Vtable for QProgressBar
+QProgressBar::_ZTV12QProgressBar: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QProgressBar)
+16 (int (*)(...))QProgressBar::metaObject
+24 (int (*)(...))QProgressBar::qt_metacast
+32 (int (*)(...))QProgressBar::qt_metacall
+40 (int (*)(...))QProgressBar::~QProgressBar
+48 (int (*)(...))QProgressBar::~QProgressBar
+56 (int (*)(...))QProgressBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QProgressBar::sizeHint
+136 (int (*)(...))QProgressBar::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QProgressBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QProgressBar::text
+440 (int (*)(...))QProgressBar::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI12QProgressBar)
+464 (int (*)(...))QProgressBar::_ZThn16_N12QProgressBarD1Ev
+472 (int (*)(...))QProgressBar::_ZThn16_N12QProgressBarD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QProgressBar
+ size=40 align=8
+ base size=40 base align=8
+QProgressBar (0x0x7f868148d0d0) 0
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 16)
+ QWidget (0x0x7f86813b89a0) 0
+ primary-for QProgressBar (0x0x7f868148d0d0)
+ QObject (0x0x7f86814884e0) 0
+ primary-for QWidget (0x0x7f86813b89a0)
+ QPaintDevice (0x0x7f8681488540) 16
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 464)
+
+Class QProgressDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressDialog::QPrivateSignal (0x0x7f86814888a0) 0 empty
+
+Vtable for QProgressDialog
+QProgressDialog::_ZTV15QProgressDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QProgressDialog)
+16 (int (*)(...))QProgressDialog::metaObject
+24 (int (*)(...))QProgressDialog::qt_metacast
+32 (int (*)(...))QProgressDialog::qt_metacall
+40 (int (*)(...))QProgressDialog::~QProgressDialog
+48 (int (*)(...))QProgressDialog::~QProgressDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QProgressDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QProgressDialog::resizeEvent
+280 (int (*)(...))QProgressDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QProgressDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QProgressDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI15QProgressDialog)
+488 (int (*)(...))QProgressDialog::_ZThn16_N15QProgressDialogD1Ev
+496 (int (*)(...))QProgressDialog::_ZThn16_N15QProgressDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QProgressDialog
+ size=40 align=8
+ base size=40 base align=8
+QProgressDialog (0x0x7f868148d138) 0
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 16)
+ QDialog (0x0x7f868148d1a0) 0
+ primary-for QProgressDialog (0x0x7f868148d138)
+ QWidget (0x0x7f86813b8af0) 0
+ primary-for QDialog (0x0x7f868148d1a0)
+ QObject (0x0x7f86814887e0) 0
+ primary-for QWidget (0x0x7f86813b8af0)
+ QPaintDevice (0x0x7f8681488840) 16
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 488)
+
+Class QProxyStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProxyStyle::QPrivateSignal (0x0x7f8681488a80) 0 empty
+
+Vtable for QProxyStyle
+QProxyStyle::_ZTV11QProxyStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QProxyStyle)
+16 (int (*)(...))QProxyStyle::metaObject
+24 (int (*)(...))QProxyStyle::qt_metacast
+32 (int (*)(...))QProxyStyle::qt_metacall
+40 (int (*)(...))QProxyStyle::~QProxyStyle
+48 (int (*)(...))QProxyStyle::~QProxyStyle
+56 (int (*)(...))QProxyStyle::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QProxyStyle::polish
+120 (int (*)(...))QProxyStyle::unpolish
+128 (int (*)(...))QProxyStyle::polish
+136 (int (*)(...))QProxyStyle::unpolish
+144 (int (*)(...))QProxyStyle::polish
+152 (int (*)(...))QProxyStyle::itemTextRect
+160 (int (*)(...))QProxyStyle::itemPixmapRect
+168 (int (*)(...))QProxyStyle::drawItemText
+176 (int (*)(...))QProxyStyle::drawItemPixmap
+184 (int (*)(...))QProxyStyle::standardPalette
+192 (int (*)(...))QProxyStyle::drawPrimitive
+200 (int (*)(...))QProxyStyle::drawControl
+208 (int (*)(...))QProxyStyle::subElementRect
+216 (int (*)(...))QProxyStyle::drawComplexControl
+224 (int (*)(...))QProxyStyle::hitTestComplexControl
+232 (int (*)(...))QProxyStyle::subControlRect
+240 (int (*)(...))QProxyStyle::pixelMetric
+248 (int (*)(...))QProxyStyle::sizeFromContents
+256 (int (*)(...))QProxyStyle::styleHint
+264 (int (*)(...))QProxyStyle::standardPixmap
+272 (int (*)(...))QProxyStyle::standardIcon
+280 (int (*)(...))QProxyStyle::generatedIconPixmap
+288 (int (*)(...))QProxyStyle::layoutSpacing
+
+Class QProxyStyle
+ size=16 align=8
+ base size=16 base align=8
+QProxyStyle (0x0x7f868148d208) 0
+ vptr=((& QProxyStyle::_ZTV11QProxyStyle) + 16)
+ QCommonStyle (0x0x7f868148d270) 0
+ primary-for QProxyStyle (0x0x7f868148d208)
+ QStyle (0x0x7f868148d2d8) 0
+ primary-for QCommonStyle (0x0x7f868148d270)
+ QObject (0x0x7f8681488a20) 0
+ primary-for QStyle (0x0x7f868148d2d8)
+
+Class QRadioButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRadioButton::QPrivateSignal (0x0x7f8681488cc0) 0 empty
+
+Vtable for QRadioButton
+QRadioButton::_ZTV12QRadioButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QRadioButton)
+16 (int (*)(...))QRadioButton::metaObject
+24 (int (*)(...))QRadioButton::qt_metacast
+32 (int (*)(...))QRadioButton::qt_metacall
+40 (int (*)(...))QRadioButton::~QRadioButton
+48 (int (*)(...))QRadioButton::~QRadioButton
+56 (int (*)(...))QRadioButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QRadioButton::sizeHint
+136 (int (*)(...))QRadioButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QRadioButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QRadioButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QRadioButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QRadioButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI12QRadioButton)
+480 (int (*)(...))QRadioButton::_ZThn16_N12QRadioButtonD1Ev
+488 (int (*)(...))QRadioButton::_ZThn16_N12QRadioButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QRadioButton
+ size=40 align=8
+ base size=40 base align=8
+QRadioButton (0x0x7f868148d340) 0
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 16)
+ QAbstractButton (0x0x7f868148d3a8) 0
+ primary-for QRadioButton (0x0x7f868148d340)
+ QWidget (0x0x7f86813b8b60) 0
+ primary-for QAbstractButton (0x0x7f868148d3a8)
+ QObject (0x0x7f8681488c00) 0
+ primary-for QWidget (0x0x7f86813b8b60)
+ QPaintDevice (0x0x7f8681488c60) 16
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 480)
+
+Class QScrollBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollBar::QPrivateSignal (0x0x7f8681488f00) 0 empty
+
+Vtable for QScrollBar
+QScrollBar::_ZTV10QScrollBar: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QScrollBar)
+16 (int (*)(...))QScrollBar::metaObject
+24 (int (*)(...))QScrollBar::qt_metacast
+32 (int (*)(...))QScrollBar::qt_metacall
+40 (int (*)(...))QScrollBar::~QScrollBar
+48 (int (*)(...))QScrollBar::~QScrollBar
+56 (int (*)(...))QScrollBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QScrollBar::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QScrollBar::mousePressEvent
+176 (int (*)(...))QScrollBar::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QScrollBar::mouseMoveEvent
+200 (int (*)(...))QScrollBar::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QScrollBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QScrollBar::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QScrollBar::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QScrollBar::sliderChange
+440 (int (*)(...))QScrollBar::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI10QScrollBar)
+464 (int (*)(...))QScrollBar::_ZThn16_N10QScrollBarD1Ev
+472 (int (*)(...))QScrollBar::_ZThn16_N10QScrollBarD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QScrollBar
+ size=40 align=8
+ base size=40 base align=8
+QScrollBar (0x0x7f868148d410) 0
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 16)
+ QAbstractSlider (0x0x7f868148d478) 0
+ primary-for QScrollBar (0x0x7f868148d410)
+ QWidget (0x0x7f86813b8bd0) 0
+ primary-for QAbstractSlider (0x0x7f868148d478)
+ QObject (0x0x7f8681488e40) 0
+ primary-for QWidget (0x0x7f86813b8bd0)
+ QPaintDevice (0x0x7f8681488ea0) 16
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 464)
+
+Vtable for QScrollerProperties
+QScrollerProperties::_ZTV19QScrollerProperties: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollerProperties)
+16 (int (*)(...))QScrollerProperties::~QScrollerProperties
+24 (int (*)(...))QScrollerProperties::~QScrollerProperties
+
+Class QScrollerProperties
+ size=16 align=8
+ base size=16 base align=8
+QScrollerProperties (0x0x7f86814ec0c0) 0
+ vptr=((& QScrollerProperties::_ZTV19QScrollerProperties) + 16)
+
+Class QScroller::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScroller::QPrivateSignal (0x0x7f86814ec420) 0 empty
+
+Vtable for QScroller
+QScroller::_ZTV9QScroller: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QScroller)
+16 (int (*)(...))QScroller::metaObject
+24 (int (*)(...))QScroller::qt_metacast
+32 (int (*)(...))QScroller::qt_metacall
+40 (int (*)(...))QScroller::~QScroller
+48 (int (*)(...))QScroller::~QScroller
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QScroller
+ size=24 align=8
+ base size=24 base align=8
+QScroller (0x0x7f868148d4e0) 0
+ vptr=((& QScroller::_ZTV9QScroller) + 16)
+ QObject (0x0x7f86814ec3c0) 0
+ primary-for QScroller (0x0x7f868148d4e0)
+
+Class QSizeGrip::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSizeGrip::QPrivateSignal (0x0x7f86814ec720) 0 empty
+
+Vtable for QSizeGrip
+QSizeGrip::_ZTV9QSizeGrip: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSizeGrip)
+16 (int (*)(...))QSizeGrip::metaObject
+24 (int (*)(...))QSizeGrip::qt_metacast
+32 (int (*)(...))QSizeGrip::qt_metacall
+40 (int (*)(...))QSizeGrip::~QSizeGrip
+48 (int (*)(...))QSizeGrip::~QSizeGrip
+56 (int (*)(...))QSizeGrip::event
+64 (int (*)(...))QSizeGrip::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QSizeGrip::setVisible
+128 (int (*)(...))QSizeGrip::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSizeGrip::mousePressEvent
+176 (int (*)(...))QSizeGrip::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSizeGrip::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSizeGrip::paintEvent
+264 (int (*)(...))QSizeGrip::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QSizeGrip::showEvent
+352 (int (*)(...))QSizeGrip::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI9QSizeGrip)
+448 (int (*)(...))QSizeGrip::_ZThn16_N9QSizeGripD1Ev
+456 (int (*)(...))QSizeGrip::_ZThn16_N9QSizeGripD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSizeGrip
+ size=40 align=8
+ base size=40 base align=8
+QSizeGrip (0x0x7f868148d548) 0
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 16)
+ QWidget (0x0x7f86814f1f50) 0
+ primary-for QSizeGrip (0x0x7f868148d548)
+ QObject (0x0x7f86814ec660) 0
+ primary-for QWidget (0x0x7f86814f1f50)
+ QPaintDevice (0x0x7f86814ec6c0) 16
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 448)
+
+Class QSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSpinBox::QPrivateSignal (0x0x7f86814ec960) 0 empty
+
+Vtable for QSpinBox
+QSpinBox::_ZTV8QSpinBox: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSpinBox)
+16 (int (*)(...))QSpinBox::metaObject
+24 (int (*)(...))QSpinBox::qt_metacast
+32 (int (*)(...))QSpinBox::qt_metacall
+40 (int (*)(...))QSpinBox::~QSpinBox
+48 (int (*)(...))QSpinBox::~QSpinBox
+56 (int (*)(...))QSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QSpinBox::validate
+440 (int (*)(...))QSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))QSpinBox::valueFromText
+488 (int (*)(...))QSpinBox::textFromValue
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI8QSpinBox)
+512 (int (*)(...))QSpinBox::_ZThn16_N8QSpinBoxD1Ev
+520 (int (*)(...))QSpinBox::_ZThn16_N8QSpinBoxD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QSpinBox (0x0x7f868148d5b0) 0
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 16)
+ QAbstractSpinBox (0x0x7f868148d618) 0
+ primary-for QSpinBox (0x0x7f868148d5b0)
+ QWidget (0x0x7f86814f1930) 0
+ primary-for QAbstractSpinBox (0x0x7f868148d618)
+ QObject (0x0x7f86814ec8a0) 0
+ primary-for QWidget (0x0x7f86814f1930)
+ QPaintDevice (0x0x7f86814ec900) 16
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 512)
+
+Class QDoubleSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleSpinBox::QPrivateSignal (0x0x7f86814ecba0) 0 empty
+
+Vtable for QDoubleSpinBox
+QDoubleSpinBox::_ZTV14QDoubleSpinBox: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDoubleSpinBox)
+16 (int (*)(...))QDoubleSpinBox::metaObject
+24 (int (*)(...))QDoubleSpinBox::qt_metacast
+32 (int (*)(...))QDoubleSpinBox::qt_metacall
+40 (int (*)(...))QDoubleSpinBox::~QDoubleSpinBox
+48 (int (*)(...))QDoubleSpinBox::~QDoubleSpinBox
+56 (int (*)(...))QAbstractSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDoubleSpinBox::validate
+440 (int (*)(...))QDoubleSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))QDoubleSpinBox::valueFromText
+488 (int (*)(...))QDoubleSpinBox::textFromValue
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI14QDoubleSpinBox)
+512 (int (*)(...))QDoubleSpinBox::_ZThn16_N14QDoubleSpinBoxD1Ev
+520 (int (*)(...))QDoubleSpinBox::_ZThn16_N14QDoubleSpinBoxD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDoubleSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QDoubleSpinBox (0x0x7f868148d680) 0
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 16)
+ QAbstractSpinBox (0x0x7f868148d6e8) 0
+ primary-for QDoubleSpinBox (0x0x7f868148d680)
+ QWidget (0x0x7f86814f1a10) 0
+ primary-for QAbstractSpinBox (0x0x7f868148d6e8)
+ QObject (0x0x7f86814ecae0) 0
+ primary-for QWidget (0x0x7f86814f1a10)
+ QPaintDevice (0x0x7f86814ecb40) 16
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 512)
+
+Class QSplashScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplashScreen::QPrivateSignal (0x0x7f86814ecde0) 0 empty
+
+Vtable for QSplashScreen
+QSplashScreen::_ZTV13QSplashScreen: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSplashScreen)
+16 (int (*)(...))QSplashScreen::metaObject
+24 (int (*)(...))QSplashScreen::qt_metacast
+32 (int (*)(...))QSplashScreen::qt_metacall
+40 (int (*)(...))QSplashScreen::~QSplashScreen
+48 (int (*)(...))QSplashScreen::~QSplashScreen
+56 (int (*)(...))QSplashScreen::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSplashScreen::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QSplashScreen::drawContents
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI13QSplashScreen)
+456 (int (*)(...))QSplashScreen::_ZThn16_N13QSplashScreenD1Ev
+464 (int (*)(...))QSplashScreen::_ZThn16_N13QSplashScreenD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplashScreen
+ size=40 align=8
+ base size=40 base align=8
+QSplashScreen (0x0x7f868148d750) 0
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 16)
+ QWidget (0x0x7f8681541000) 0
+ primary-for QSplashScreen (0x0x7f868148d750)
+ QObject (0x0x7f86814ecd20) 0
+ primary-for QWidget (0x0x7f8681541000)
+ QPaintDevice (0x0x7f86814ecd80) 16
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 456)
+
+Class QSplitter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitter::QPrivateSignal (0x0x7f868114e060) 0 empty
+
+Vtable for QSplitter
+QSplitter::_ZTV9QSplitter: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSplitter)
+16 (int (*)(...))QSplitter::metaObject
+24 (int (*)(...))QSplitter::qt_metacast
+32 (int (*)(...))QSplitter::qt_metacall
+40 (int (*)(...))QSplitter::~QSplitter
+48 (int (*)(...))QSplitter::~QSplitter
+56 (int (*)(...))QSplitter::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QSplitter::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSplitter::sizeHint
+136 (int (*)(...))QSplitter::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QSplitter::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QSplitter::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QSplitter::createHandle
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI9QSplitter)
+464 (int (*)(...))QSplitter::_ZThn16_N9QSplitterD1Ev
+472 (int (*)(...))QSplitter::_ZThn16_N9QSplitterD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplitter
+ size=40 align=8
+ base size=40 base align=8
+QSplitter (0x0x7f868148d7b8) 0
+ vptr=((& QSplitter::_ZTV9QSplitter) + 16)
+ QFrame (0x0x7f868148d820) 0
+ primary-for QSplitter (0x0x7f868148d7b8)
+ QWidget (0x0x7f8681541070) 0
+ primary-for QFrame (0x0x7f868148d820)
+ QObject (0x0x7f86814ecf60) 0
+ primary-for QWidget (0x0x7f8681541070)
+ QPaintDevice (0x0x7f868114e000) 16
+ vptr=((& QSplitter::_ZTV9QSplitter) + 464)
+
+Class QSplitterHandle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitterHandle::QPrivateSignal (0x0x7f868114e2a0) 0 empty
+
+Vtable for QSplitterHandle
+QSplitterHandle::_ZTV15QSplitterHandle: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSplitterHandle)
+16 (int (*)(...))QSplitterHandle::metaObject
+24 (int (*)(...))QSplitterHandle::qt_metacast
+32 (int (*)(...))QSplitterHandle::qt_metacall
+40 (int (*)(...))QSplitterHandle::~QSplitterHandle
+48 (int (*)(...))QSplitterHandle::~QSplitterHandle
+56 (int (*)(...))QSplitterHandle::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSplitterHandle::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSplitterHandle::mousePressEvent
+176 (int (*)(...))QSplitterHandle::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSplitterHandle::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSplitterHandle::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QSplitterHandle::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI15QSplitterHandle)
+448 (int (*)(...))QSplitterHandle::_ZThn16_N15QSplitterHandleD1Ev
+456 (int (*)(...))QSplitterHandle::_ZThn16_N15QSplitterHandleD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplitterHandle
+ size=40 align=8
+ base size=40 base align=8
+QSplitterHandle (0x0x7f868148d888) 0
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 16)
+ QWidget (0x0x7f86815410e0) 0
+ primary-for QSplitterHandle (0x0x7f868148d888)
+ QObject (0x0x7f868114e1e0) 0
+ primary-for QWidget (0x0x7f86815410e0)
+ QPaintDevice (0x0x7f868114e240) 16
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 448)
+
+Class QStackedLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedLayout::QPrivateSignal (0x0x7f868114e4e0) 0 empty
+
+Vtable for QStackedLayout
+QStackedLayout::_ZTV14QStackedLayout: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QStackedLayout)
+16 (int (*)(...))QStackedLayout::metaObject
+24 (int (*)(...))QStackedLayout::qt_metacast
+32 (int (*)(...))QStackedLayout::qt_metacall
+40 (int (*)(...))QStackedLayout::~QStackedLayout
+48 (int (*)(...))QStackedLayout::~QStackedLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLayout::spacing
+120 (int (*)(...))QLayout::setSpacing
+128 (int (*)(...))QLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QStackedLayout::addItem
+152 (int (*)(...))QLayout::expandingDirections
+160 (int (*)(...))QStackedLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QStackedLayout::setGeometry
+184 (int (*)(...))QStackedLayout::itemAt
+192 (int (*)(...))QStackedLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QStackedLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QStackedLayout::sizeHint
+264 (int (*)(...))QStackedLayout::hasHeightForWidth
+272 (int (*)(...))QStackedLayout::heightForWidth
+280 (int (*)(...))-16
+288 (int (*)(...))(& _ZTI14QStackedLayout)
+296 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayoutD1Ev
+304 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayoutD0Ev
+312 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout8sizeHintEv
+320 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout11minimumSizeEv
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+336 (int (*)(...))QLayout::_ZThn16_NK7QLayout19expandingDirectionsEv
+344 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayout11setGeometryERK5QRect
+352 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+368 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout17hasHeightForWidthEv
+376 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout14heightForWidthEi
+384 (int (*)(...))QLayoutItem::minimumHeightForWidth
+392 (int (*)(...))QLayout::_ZThn16_N7QLayout10invalidateEv
+400 (int (*)(...))QLayoutItem::widget
+408 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+416 (int (*)(...))QLayoutItem::spacerItem
+424 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QStackedLayout
+ size=32 align=8
+ base size=28 base align=8
+QStackedLayout (0x0x7f868148d8f0) 0
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 16)
+ QLayout (0x0x7f8681541150) 0
+ primary-for QStackedLayout (0x0x7f868148d8f0)
+ QObject (0x0x7f868114e420) 0
+ primary-for QLayout (0x0x7f8681541150)
+ QLayoutItem (0x0x7f868114e480) 16
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 296)
+
+Class QStackedWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedWidget::QPrivateSignal (0x0x7f868114e7e0) 0 empty
+
+Vtable for QStackedWidget
+QStackedWidget::_ZTV14QStackedWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QStackedWidget)
+16 (int (*)(...))QStackedWidget::metaObject
+24 (int (*)(...))QStackedWidget::qt_metacast
+32 (int (*)(...))QStackedWidget::qt_metacall
+40 (int (*)(...))QStackedWidget::~QStackedWidget
+48 (int (*)(...))QStackedWidget::~QStackedWidget
+56 (int (*)(...))QStackedWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI14QStackedWidget)
+456 (int (*)(...))QStackedWidget::_ZThn16_N14QStackedWidgetD1Ev
+464 (int (*)(...))QStackedWidget::_ZThn16_N14QStackedWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QStackedWidget
+ size=40 align=8
+ base size=40 base align=8
+QStackedWidget (0x0x7f868148d958) 0
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 16)
+ QFrame (0x0x7f868148d9c0) 0
+ primary-for QStackedWidget (0x0x7f868148d958)
+ QWidget (0x0x7f86815412a0) 0
+ primary-for QFrame (0x0x7f868148d9c0)
+ QObject (0x0x7f868114e720) 0
+ primary-for QWidget (0x0x7f86815412a0)
+ QPaintDevice (0x0x7f868114e780) 16
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 456)
+
+Class QStatusBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStatusBar::QPrivateSignal (0x0x7f868114ea20) 0 empty
+
+Vtable for QStatusBar
+QStatusBar::_ZTV10QStatusBar: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QStatusBar)
+16 (int (*)(...))QStatusBar::metaObject
+24 (int (*)(...))QStatusBar::qt_metacast
+32 (int (*)(...))QStatusBar::qt_metacall
+40 (int (*)(...))QStatusBar::~QStatusBar
+48 (int (*)(...))QStatusBar::~QStatusBar
+56 (int (*)(...))QStatusBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QStatusBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QStatusBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QStatusBar::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI10QStatusBar)
+448 (int (*)(...))QStatusBar::_ZThn16_N10QStatusBarD1Ev
+456 (int (*)(...))QStatusBar::_ZThn16_N10QStatusBarD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QStatusBar
+ size=40 align=8
+ base size=40 base align=8
+QStatusBar (0x0x7f868148da28) 0
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 16)
+ QWidget (0x0x7f8681541310) 0
+ primary-for QStatusBar (0x0x7f868148da28)
+ QObject (0x0x7f868114e960) 0
+ primary-for QWidget (0x0x7f8681541310)
+ QPaintDevice (0x0x7f868114e9c0) 16
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 448)
+
+Class QStyledItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyledItemDelegate::QPrivateSignal (0x0x7f868114ec00) 0 empty
+
+Vtable for QStyledItemDelegate
+QStyledItemDelegate::_ZTV19QStyledItemDelegate: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QStyledItemDelegate)
+16 (int (*)(...))QStyledItemDelegate::metaObject
+24 (int (*)(...))QStyledItemDelegate::qt_metacast
+32 (int (*)(...))QStyledItemDelegate::qt_metacall
+40 (int (*)(...))QStyledItemDelegate::~QStyledItemDelegate
+48 (int (*)(...))QStyledItemDelegate::~QStyledItemDelegate
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QStyledItemDelegate::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStyledItemDelegate::paint
+120 (int (*)(...))QStyledItemDelegate::sizeHint
+128 (int (*)(...))QStyledItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QStyledItemDelegate::setEditorData
+152 (int (*)(...))QStyledItemDelegate::setModelData
+160 (int (*)(...))QStyledItemDelegate::updateEditorGeometry
+168 (int (*)(...))QStyledItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+192 (int (*)(...))QStyledItemDelegate::displayText
+200 (int (*)(...))QStyledItemDelegate::initStyleOption
+
+Class QStyledItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QStyledItemDelegate (0x0x7f868148da90) 0
+ vptr=((& QStyledItemDelegate::_ZTV19QStyledItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7f868148daf8) 0
+ primary-for QStyledItemDelegate (0x0x7f868148da90)
+ QObject (0x0x7f868114eba0) 0
+ primary-for QAbstractItemDelegate (0x0x7f868148daf8)
+
+Class QStyleFactory
+ size=1 align=1
+ base size=0 base align=1
+QStyleFactory (0x0x7f868114ed80) 0 empty
+
+Class QStylePainter
+ size=24 align=8
+ base size=24 base align=8
+QStylePainter (0x0x7f868148db60) 0
+ QPainter (0x0x7f868114ede0) 0
+
+Class QStylePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStylePlugin::QPrivateSignal (0x0x7f86811b56c0) 0 empty
+
+Vtable for QStylePlugin
+QStylePlugin::_ZTV12QStylePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QStylePlugin)
+16 (int (*)(...))QStylePlugin::metaObject
+24 (int (*)(...))QStylePlugin::qt_metacast
+32 (int (*)(...))QStylePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QStylePlugin
+ size=16 align=8
+ base size=16 base align=8
+QStylePlugin (0x0x7f868148dbc8) 0
+ vptr=((& QStylePlugin::_ZTV12QStylePlugin) + 16)
+ QObject (0x0x7f86811b5660) 0
+ primary-for QStylePlugin (0x0x7f868148dbc8)
+
+Class QSystemTrayIcon::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSystemTrayIcon::QPrivateSignal (0x0x7f86811b57e0) 0 empty
+
+Vtable for QSystemTrayIcon
+QSystemTrayIcon::_ZTV15QSystemTrayIcon: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSystemTrayIcon)
+16 (int (*)(...))QSystemTrayIcon::metaObject
+24 (int (*)(...))QSystemTrayIcon::qt_metacast
+32 (int (*)(...))QSystemTrayIcon::qt_metacall
+40 (int (*)(...))QSystemTrayIcon::~QSystemTrayIcon
+48 (int (*)(...))QSystemTrayIcon::~QSystemTrayIcon
+56 (int (*)(...))QSystemTrayIcon::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSystemTrayIcon
+ size=16 align=8
+ base size=16 base align=8
+QSystemTrayIcon (0x0x7f868148dc30) 0
+ vptr=((& QSystemTrayIcon::_ZTV15QSystemTrayIcon) + 16)
+ QObject (0x0x7f86811b5780) 0
+ primary-for QSystemTrayIcon (0x0x7f868148dc30)
+
+Class QTableView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableView::QPrivateSignal (0x0x7f86811b5ae0) 0 empty
+
+Vtable for QTableView
+QTableView::_ZTV10QTableView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTableView)
+16 (int (*)(...))QTableView::metaObject
+24 (int (*)(...))QTableView::qt_metacast
+32 (int (*)(...))QTableView::qt_metacall
+40 (int (*)(...))QTableView::~QTableView
+48 (int (*)(...))QTableView::~QTableView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTableView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTableView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QTableView::scrollContentsBy
+464 (int (*)(...))QTableView::viewportSizeHint
+472 (int (*)(...))QTableView::setModel
+480 (int (*)(...))QTableView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QTableView::visualRect
+504 (int (*)(...))QTableView::scrollTo
+512 (int (*)(...))QTableView::indexAt
+520 (int (*)(...))QTableView::sizeHintForRow
+528 (int (*)(...))QTableView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QTableView::setRootIndex
+560 (int (*)(...))QTableView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QTableView::selectionChanged
+608 (int (*)(...))QTableView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTableView::updateGeometries
+640 (int (*)(...))QTableView::verticalScrollbarAction
+648 (int (*)(...))QTableView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTableView::moveCursor
+704 (int (*)(...))QTableView::horizontalOffset
+712 (int (*)(...))QTableView::verticalOffset
+720 (int (*)(...))QTableView::isIndexHidden
+728 (int (*)(...))QTableView::setSelection
+736 (int (*)(...))QTableView::visualRegionForSelection
+744 (int (*)(...))QTableView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QTableView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI10QTableView)
+800 (int (*)(...))QTableView::_ZThn16_N10QTableViewD1Ev
+808 (int (*)(...))QTableView::_ZThn16_N10QTableViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTableView
+ size=40 align=8
+ base size=40 base align=8
+QTableView (0x0x7f868148dc98) 0
+ vptr=((& QTableView::_ZTV10QTableView) + 16)
+ QAbstractItemView (0x0x7f868148dd00) 0
+ primary-for QTableView (0x0x7f868148dc98)
+ QAbstractScrollArea (0x0x7f868148dd68) 0
+ primary-for QAbstractItemView (0x0x7f868148dd00)
+ QFrame (0x0x7f868148ddd0) 0
+ primary-for QAbstractScrollArea (0x0x7f868148dd68)
+ QWidget (0x0x7f8681541850) 0
+ primary-for QFrame (0x0x7f868148ddd0)
+ QObject (0x0x7f86811b5a20) 0
+ primary-for QWidget (0x0x7f8681541850)
+ QPaintDevice (0x0x7f86811b5a80) 16
+ vptr=((& QTableView::_ZTV10QTableView) + 800)
+
+Class QTableWidgetSelectionRange
+ size=16 align=4
+ base size=16 base align=4
+QTableWidgetSelectionRange (0x0x7f86811b5c60) 0
+
+Vtable for QTableWidgetItem
+QTableWidgetItem::_ZTV16QTableWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QTableWidgetItem)
+16 (int (*)(...))QTableWidgetItem::~QTableWidgetItem
+24 (int (*)(...))QTableWidgetItem::~QTableWidgetItem
+32 (int (*)(...))QTableWidgetItem::clone
+40 (int (*)(...))QTableWidgetItem::data
+48 (int (*)(...))QTableWidgetItem::setData
+56 (int (*)(...))QTableWidgetItem::operator<
+64 (int (*)(...))QTableWidgetItem::read
+72 (int (*)(...))QTableWidgetItem::write
+
+Class QTableWidgetItem
+ size=64 align=8
+ base size=60 base align=8
+QTableWidgetItem (0x0x7f86811f60c0) 0
+ vptr=((& QTableWidgetItem::_ZTV16QTableWidgetItem) + 16)
+
+Class QTableWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableWidget::QPrivateSignal (0x0x7f868126b3c0) 0 empty
+
+Vtable for QTableWidget
+QTableWidget::_ZTV12QTableWidget: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTableWidget)
+16 (int (*)(...))QTableWidget::metaObject
+24 (int (*)(...))QTableWidget::qt_metacast
+32 (int (*)(...))QTableWidget::qt_metacall
+40 (int (*)(...))QTableWidget::~QTableWidget
+48 (int (*)(...))QTableWidget::~QTableWidget
+56 (int (*)(...))QTableWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTableView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTableView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QTableWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QTableView::scrollContentsBy
+464 (int (*)(...))QTableView::viewportSizeHint
+472 (int (*)(...))QTableWidget::setModel
+480 (int (*)(...))QTableView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QTableView::visualRect
+504 (int (*)(...))QTableView::scrollTo
+512 (int (*)(...))QTableView::indexAt
+520 (int (*)(...))QTableView::sizeHintForRow
+528 (int (*)(...))QTableView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QTableView::setRootIndex
+560 (int (*)(...))QTableView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QTableView::selectionChanged
+608 (int (*)(...))QTableView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTableView::updateGeometries
+640 (int (*)(...))QTableView::verticalScrollbarAction
+648 (int (*)(...))QTableView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTableView::moveCursor
+704 (int (*)(...))QTableView::horizontalOffset
+712 (int (*)(...))QTableView::verticalOffset
+720 (int (*)(...))QTableView::isIndexHidden
+728 (int (*)(...))QTableView::setSelection
+736 (int (*)(...))QTableView::visualRegionForSelection
+744 (int (*)(...))QTableView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QTableView::initViewItemOption
+784 (int (*)(...))QTableWidget::mimeTypes
+792 (int (*)(...))QTableWidget::mimeData
+800 (int (*)(...))QTableWidget::dropMimeData
+808 (int (*)(...))QTableWidget::supportedDropActions
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI12QTableWidget)
+832 (int (*)(...))QTableWidget::_ZThn16_N12QTableWidgetD1Ev
+840 (int (*)(...))QTableWidget::_ZThn16_N12QTableWidgetD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTableWidget
+ size=40 align=8
+ base size=40 base align=8
+QTableWidget (0x0x7f868120c6e8) 0
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 16)
+ QTableView (0x0x7f868120c750) 0
+ primary-for QTableWidget (0x0x7f868120c6e8)
+ QAbstractItemView (0x0x7f868120c7b8) 0
+ primary-for QTableView (0x0x7f868120c750)
+ QAbstractScrollArea (0x0x7f868120c820) 0
+ primary-for QAbstractItemView (0x0x7f868120c7b8)
+ QFrame (0x0x7f868120c888) 0
+ primary-for QAbstractScrollArea (0x0x7f868120c820)
+ QWidget (0x0x7f868163cb60) 0
+ primary-for QFrame (0x0x7f868120c888)
+ QObject (0x0x7f868126b300) 0
+ primary-for QWidget (0x0x7f868163cb60)
+ QPaintDevice (0x0x7f868126b360) 16
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 832)
+
+Class QTextBrowser::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBrowser::QPrivateSignal (0x0x7f868126b780) 0 empty
+
+Vtable for QTextBrowser
+QTextBrowser::_ZTV12QTextBrowser: 79 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTextBrowser)
+16 (int (*)(...))QTextBrowser::metaObject
+24 (int (*)(...))QTextBrowser::qt_metacast
+32 (int (*)(...))QTextBrowser::qt_metacall
+40 (int (*)(...))QTextBrowser::~QTextBrowser
+48 (int (*)(...))QTextBrowser::~QTextBrowser
+56 (int (*)(...))QTextBrowser::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTextBrowser::mousePressEvent
+176 (int (*)(...))QTextBrowser::mouseReleaseEvent
+184 (int (*)(...))QTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QTextBrowser::mouseMoveEvent
+200 (int (*)(...))QTextEdit::wheelEvent
+208 (int (*)(...))QTextBrowser::keyPressEvent
+216 (int (*)(...))QTextEdit::keyReleaseEvent
+224 (int (*)(...))QTextEdit::focusInEvent
+232 (int (*)(...))QTextBrowser::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTextBrowser::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QTextEdit::dragEnterEvent
+320 (int (*)(...))QTextEdit::dragMoveEvent
+328 (int (*)(...))QTextEdit::dragLeaveEvent
+336 (int (*)(...))QTextEdit::dropEvent
+344 (int (*)(...))QTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QTextEdit::inputMethodEvent
+416 (int (*)(...))QTextEdit::inputMethodQuery
+424 (int (*)(...))QTextBrowser::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QTextBrowser::loadResource
+480 (int (*)(...))QTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QTextEdit::canInsertFromMimeData
+496 (int (*)(...))QTextEdit::insertFromMimeData
+504 (int (*)(...))QTextEdit::doSetTextCursor
+512 (int (*)(...))QTextBrowser::backward
+520 (int (*)(...))QTextBrowser::forward
+528 (int (*)(...))QTextBrowser::home
+536 (int (*)(...))QTextBrowser::reload
+544 (int (*)(...))QTextBrowser::doSetSource
+552 (int (*)(...))-16
+560 (int (*)(...))(& _ZTI12QTextBrowser)
+568 (int (*)(...))QTextBrowser::_ZThn16_N12QTextBrowserD1Ev
+576 (int (*)(...))QTextBrowser::_ZThn16_N12QTextBrowserD0Ev
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+592 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+600 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+608 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+616 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+624 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTextBrowser
+ size=40 align=8
+ base size=40 base align=8
+QTextBrowser (0x0x7f868120c8f0) 0
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 16)
+ QTextEdit (0x0x7f868120c958) 0
+ primary-for QTextBrowser (0x0x7f868120c8f0)
+ QAbstractScrollArea (0x0x7f868120c9c0) 0
+ primary-for QTextEdit (0x0x7f868120c958)
+ QFrame (0x0x7f868120ca28) 0
+ primary-for QAbstractScrollArea (0x0x7f868120c9c0)
+ QWidget (0x0x7f8681541a80) 0
+ primary-for QFrame (0x0x7f868120ca28)
+ QObject (0x0x7f868126b6c0) 0
+ primary-for QWidget (0x0x7f8681541a80)
+ QPaintDevice (0x0x7f868126b720) 16
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 568)
+
+Class QToolBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBar::QPrivateSignal (0x0x7f868126b9c0) 0 empty
+
+Vtable for QToolBar
+QToolBar::_ZTV8QToolBar: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QToolBar)
+16 (int (*)(...))QToolBar::metaObject
+24 (int (*)(...))QToolBar::qt_metacast
+32 (int (*)(...))QToolBar::qt_metacall
+40 (int (*)(...))QToolBar::~QToolBar
+48 (int (*)(...))QToolBar::~QToolBar
+56 (int (*)(...))QToolBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QToolBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QToolBar::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QToolBar::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI8QToolBar)
+456 (int (*)(...))QToolBar::_ZThn16_N8QToolBarD1Ev
+464 (int (*)(...))QToolBar::_ZThn16_N8QToolBarD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolBar
+ size=40 align=8
+ base size=40 base align=8
+QToolBar (0x0x7f868120ca90) 0
+ vptr=((& QToolBar::_ZTV8QToolBar) + 16)
+ QWidget (0x0x7f8681541af0) 0
+ primary-for QToolBar (0x0x7f868120ca90)
+ QObject (0x0x7f868126b900) 0
+ primary-for QWidget (0x0x7f8681541af0)
+ QPaintDevice (0x0x7f868126b960) 16
+ vptr=((& QToolBar::_ZTV8QToolBar) + 456)
+
+Class QToolBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBox::QPrivateSignal (0x0x7f868126be40) 0 empty
+
+Vtable for QToolBox
+QToolBox::_ZTV8QToolBox: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QToolBox)
+16 (int (*)(...))QToolBox::metaObject
+24 (int (*)(...))QToolBox::qt_metacast
+32 (int (*)(...))QToolBox::qt_metacall
+40 (int (*)(...))QToolBox::~QToolBox
+48 (int (*)(...))QToolBox::~QToolBox
+56 (int (*)(...))QToolBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QToolBox::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QToolBox::itemInserted
+448 (int (*)(...))QToolBox::itemRemoved
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI8QToolBox)
+472 (int (*)(...))QToolBox::_ZThn16_N8QToolBoxD1Ev
+480 (int (*)(...))QToolBox::_ZThn16_N8QToolBoxD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolBox
+ size=40 align=8
+ base size=40 base align=8
+QToolBox (0x0x7f868120caf8) 0
+ vptr=((& QToolBox::_ZTV8QToolBox) + 16)
+ QFrame (0x0x7f868120cb60) 0
+ primary-for QToolBox (0x0x7f868120caf8)
+ QWidget (0x0x7f8681541b60) 0
+ primary-for QFrame (0x0x7f868120cb60)
+ QObject (0x0x7f868126bd80) 0
+ primary-for QWidget (0x0x7f8681541b60)
+ QPaintDevice (0x0x7f868126bde0) 16
+ vptr=((& QToolBox::_ZTV8QToolBox) + 472)
+
+Class QToolButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolButton::QPrivateSignal (0x0x7f86812d11e0) 0 empty
+
+Vtable for QToolButton
+QToolButton::_ZTV11QToolButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QToolButton)
+16 (int (*)(...))QToolButton::metaObject
+24 (int (*)(...))QToolButton::qt_metacast
+32 (int (*)(...))QToolButton::qt_metacall
+40 (int (*)(...))QToolButton::~QToolButton
+48 (int (*)(...))QToolButton::~QToolButton
+56 (int (*)(...))QToolButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QToolButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QToolButton::sizeHint
+136 (int (*)(...))QToolButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QToolButton::mousePressEvent
+176 (int (*)(...))QToolButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QToolButton::enterEvent
+248 (int (*)(...))QToolButton::leaveEvent
+256 (int (*)(...))QToolButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QToolButton::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QToolButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QToolButton::nextCheckState
+456 (int (*)(...))QToolButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI11QToolButton)
+480 (int (*)(...))QToolButton::_ZThn16_N11QToolButtonD1Ev
+488 (int (*)(...))QToolButton::_ZThn16_N11QToolButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolButton
+ size=40 align=8
+ base size=40 base align=8
+QToolButton (0x0x7f868120cbc8) 0
+ vptr=((& QToolButton::_ZTV11QToolButton) + 16)
+ QAbstractButton (0x0x7f868120cc30) 0
+ primary-for QToolButton (0x0x7f868120cbc8)
+ QWidget (0x0x7f8681541bd0) 0
+ primary-for QAbstractButton (0x0x7f868120cc30)
+ QObject (0x0x7f86812d1120) 0
+ primary-for QWidget (0x0x7f8681541bd0)
+ QPaintDevice (0x0x7f86812d1180) 16
+ vptr=((& QToolButton::_ZTV11QToolButton) + 480)
+
+Class QToolTip
+ size=1 align=1
+ base size=0 base align=1
+QToolTip (0x0x7f86812d1420) 0 empty
+
+Class QTreeView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeView::QPrivateSignal (0x0x7f86812d15a0) 0 empty
+
+Vtable for QTreeView
+QTreeView::_ZTV9QTreeView: 110 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTreeView)
+16 (int (*)(...))QTreeView::metaObject
+24 (int (*)(...))QTreeView::qt_metacast
+32 (int (*)(...))QTreeView::qt_metacall
+40 (int (*)(...))QTreeView::~QTreeView
+48 (int (*)(...))QTreeView::~QTreeView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeView::setModel
+480 (int (*)(...))QTreeView::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))-16
+808 (int (*)(...))(& _ZTI9QTreeView)
+816 (int (*)(...))QTreeView::_ZThn16_N9QTreeViewD1Ev
+824 (int (*)(...))QTreeView::_ZThn16_N9QTreeViewD0Ev
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTreeView
+ size=40 align=8
+ base size=40 base align=8
+QTreeView (0x0x7f868120cc98) 0
+ vptr=((& QTreeView::_ZTV9QTreeView) + 16)
+ QAbstractItemView (0x0x7f868120cd00) 0
+ primary-for QTreeView (0x0x7f868120cc98)
+ QAbstractScrollArea (0x0x7f868120cd68) 0
+ primary-for QAbstractItemView (0x0x7f868120cd00)
+ QFrame (0x0x7f868120cdd0) 0
+ primary-for QAbstractScrollArea (0x0x7f868120cd68)
+ QWidget (0x0x7f8681541d90) 0
+ primary-for QFrame (0x0x7f868120cdd0)
+ QObject (0x0x7f86812d14e0) 0
+ primary-for QWidget (0x0x7f8681541d90)
+ QPaintDevice (0x0x7f86812d1540) 16
+ vptr=((& QTreeView::_ZTV9QTreeView) + 816)
+
+Class QTreeWidgetItemIterator
+ size=24 align=8
+ base size=20 base align=8
+QTreeWidgetItemIterator (0x0x7f86812d1720) 0
+
+Vtable for QTreeWidgetItem
+QTreeWidgetItem::_ZTV15QTreeWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QTreeWidgetItem)
+16 (int (*)(...))QTreeWidgetItem::~QTreeWidgetItem
+24 (int (*)(...))QTreeWidgetItem::~QTreeWidgetItem
+32 (int (*)(...))QTreeWidgetItem::clone
+40 (int (*)(...))QTreeWidgetItem::data
+48 (int (*)(...))QTreeWidgetItem::setData
+56 (int (*)(...))QTreeWidgetItem::operator<
+64 (int (*)(...))QTreeWidgetItem::read
+72 (int (*)(...))QTreeWidgetItem::write
+
+Class QTreeWidgetItem
+ size=96 align=8
+ base size=92 base align=8
+QTreeWidgetItem (0x0x7f86812d1de0) 0
+ vptr=((& QTreeWidgetItem::_ZTV15QTreeWidgetItem) + 16)
+
+Class QTreeWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeWidget::QPrivateSignal (0x0x7f8681045c00) 0 empty
+
+Vtable for QTreeWidget
+QTreeWidget::_ZTV11QTreeWidget: 114 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTreeWidget)
+16 (int (*)(...))QTreeWidget::metaObject
+24 (int (*)(...))QTreeWidget::qt_metacast
+32 (int (*)(...))QTreeWidget::qt_metacall
+40 (int (*)(...))QTreeWidget::~QTreeWidget
+48 (int (*)(...))QTreeWidget::~QTreeWidget
+56 (int (*)(...))QTreeWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QTreeWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeWidget::setModel
+480 (int (*)(...))QTreeWidget::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))QTreeWidget::mimeTypes
+808 (int (*)(...))QTreeWidget::mimeData
+816 (int (*)(...))QTreeWidget::dropMimeData
+824 (int (*)(...))QTreeWidget::supportedDropActions
+832 (int (*)(...))-16
+840 (int (*)(...))(& _ZTI11QTreeWidget)
+848 (int (*)(...))QTreeWidget::_ZThn16_N11QTreeWidgetD1Ev
+856 (int (*)(...))QTreeWidget::_ZThn16_N11QTreeWidgetD0Ev
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+896 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+904 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTreeWidget
+ size=40 align=8
+ base size=40 base align=8
+QTreeWidget (0x0x7f868100d0d0) 0
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 16)
+ QTreeView (0x0x7f868100d138) 0
+ primary-for QTreeWidget (0x0x7f868100d0d0)
+ QAbstractItemView (0x0x7f868100d1a0) 0
+ primary-for QTreeView (0x0x7f868100d138)
+ QAbstractScrollArea (0x0x7f868100d208) 0
+ primary-for QAbstractItemView (0x0x7f868100d1a0)
+ QFrame (0x0x7f868100d270) 0
+ primary-for QAbstractScrollArea (0x0x7f868100d208)
+ QWidget (0x0x7f8681311b60) 0
+ primary-for QFrame (0x0x7f868100d270)
+ QObject (0x0x7f8681045b40) 0
+ primary-for QWidget (0x0x7f8681311b60)
+ QPaintDevice (0x0x7f8681045ba0) 16
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 848)
+
+Class QUndoView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoView::QPrivateSignal (0x0x7f868109b060) 0 empty
+
+Vtable for QUndoView
+QUndoView::_ZTV9QUndoView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QUndoView)
+16 (int (*)(...))QUndoView::metaObject
+24 (int (*)(...))QUndoView::qt_metacast
+32 (int (*)(...))QUndoView::qt_metacall
+40 (int (*)(...))QUndoView::~QUndoView
+48 (int (*)(...))QUndoView::~QUndoView
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI9QUndoView)
+800 (int (*)(...))QUndoView::_ZThn16_N9QUndoViewD1Ev
+808 (int (*)(...))QUndoView::_ZThn16_N9QUndoViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QUndoView
+ size=40 align=8
+ base size=40 base align=8
+QUndoView (0x0x7f868100d2d8) 0
+ vptr=((& QUndoView::_ZTV9QUndoView) + 16)
+ QListView (0x0x7f868100d340) 0
+ primary-for QUndoView (0x0x7f868100d2d8)
+ QAbstractItemView (0x0x7f868100d3a8) 0
+ primary-for QListView (0x0x7f868100d340)
+ QAbstractScrollArea (0x0x7f868100d410) 0
+ primary-for QAbstractItemView (0x0x7f868100d3a8)
+ QFrame (0x0x7f868100d478) 0
+ primary-for QAbstractScrollArea (0x0x7f868100d410)
+ QWidget (0x0x7f8681311bd0) 0
+ primary-for QFrame (0x0x7f868100d478)
+ QObject (0x0x7f8681045f60) 0
+ primary-for QWidget (0x0x7f8681311bd0)
+ QPaintDevice (0x0x7f868109b000) 16
+ vptr=((& QUndoView::_ZTV9QUndoView) + 800)
+
+Class QWhatsThis
+ size=1 align=1
+ base size=0 base align=1
+QWhatsThis (0x0x7f868109b1e0) 0 empty
+
+Class QWidgetAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidgetAction::QPrivateSignal (0x0x7f868109b2a0) 0 empty
+
+Vtable for QWidgetAction
+QWidgetAction::_ZTV13QWidgetAction: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QWidgetAction)
+16 (int (*)(...))QWidgetAction::metaObject
+24 (int (*)(...))QWidgetAction::qt_metacast
+32 (int (*)(...))QWidgetAction::qt_metacall
+40 (int (*)(...))QWidgetAction::~QWidgetAction
+48 (int (*)(...))QWidgetAction::~QWidgetAction
+56 (int (*)(...))QWidgetAction::event
+64 (int (*)(...))QWidgetAction::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidgetAction::createWidget
+120 (int (*)(...))QWidgetAction::deleteWidget
+
+Class QWidgetAction
+ size=16 align=8
+ base size=16 base align=8
+QWidgetAction (0x0x7f868100d4e0) 0
+ vptr=((& QWidgetAction::_ZTV13QWidgetAction) + 16)
+ QAction (0x0x7f868100d548) 0
+ primary-for QWidgetAction (0x0x7f868100d4e0)
+ QObject (0x0x7f868109b240) 0
+ primary-for QAction (0x0x7f868100d548)
+
+Class QWizard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizard::QPrivateSignal (0x0x7f868109b4e0) 0 empty
+
+Vtable for QWizard
+QWizard::_ZTV7QWizard: 73 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWizard)
+16 (int (*)(...))QWizard::metaObject
+24 (int (*)(...))QWizard::qt_metacast
+32 (int (*)(...))QWizard::qt_metacall
+40 (int (*)(...))QWizard::~QWizard
+48 (int (*)(...))QWizard::~QWizard
+56 (int (*)(...))QWizard::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWizard::setVisible
+128 (int (*)(...))QWizard::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWizard::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWizard::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QWizard::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))QWizard::validateCurrentPage
+480 (int (*)(...))QWizard::nextId
+488 (int (*)(...))QWizard::initializePage
+496 (int (*)(...))QWizard::cleanupPage
+504 (int (*)(...))-16
+512 (int (*)(...))(& _ZTI7QWizard)
+520 (int (*)(...))QWizard::_ZThn16_N7QWizardD1Ev
+528 (int (*)(...))QWizard::_ZThn16_N7QWizardD0Ev
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWizard
+ size=40 align=8
+ base size=40 base align=8
+QWizard (0x0x7f868100d5b0) 0
+ vptr=((& QWizard::_ZTV7QWizard) + 16)
+ QDialog (0x0x7f868100d618) 0
+ primary-for QWizard (0x0x7f868100d5b0)
+ QWidget (0x0x7f8681311c40) 0
+ primary-for QDialog (0x0x7f868100d618)
+ QObject (0x0x7f868109b420) 0
+ primary-for QWidget (0x0x7f8681311c40)
+ QPaintDevice (0x0x7f868109b480) 16
+ vptr=((& QWizard::_ZTV7QWizard) + 520)
+
+Class QWizardPage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizardPage::QPrivateSignal (0x0x7f868109bc60) 0 empty
+
+Vtable for QWizardPage
+QWizardPage::_ZTV11QWizardPage: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWizardPage)
+16 (int (*)(...))QWizardPage::metaObject
+24 (int (*)(...))QWizardPage::qt_metacast
+32 (int (*)(...))QWizardPage::qt_metacall
+40 (int (*)(...))QWizardPage::~QWizardPage
+48 (int (*)(...))QWizardPage::~QWizardPage
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QWizardPage::initializePage
+440 (int (*)(...))QWizardPage::cleanupPage
+448 (int (*)(...))QWizardPage::validatePage
+456 (int (*)(...))QWizardPage::isComplete
+464 (int (*)(...))QWizardPage::nextId
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QWizardPage)
+488 (int (*)(...))QWizardPage::_ZThn16_N11QWizardPageD1Ev
+496 (int (*)(...))QWizardPage::_ZThn16_N11QWizardPageD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWizardPage
+ size=40 align=8
+ base size=40 base align=8
+QWizardPage (0x0x7f868100d7b8) 0
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 16)
+ QWidget (0x0x7f86810c0e00) 0
+ primary-for QWizardPage (0x0x7f868100d7b8)
+ QObject (0x0x7f868109bba0) 0
+ primary-for QWidget (0x0x7f86810c0e00)
+ QPaintDevice (0x0x7f868109bc00) 16
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 488)
+
+Vtable for QDesignerCustomWidgetInterface
+QDesignerCustomWidgetInterface::_ZTV30QDesignerCustomWidgetInterface: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI30QDesignerCustomWidgetInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))QDesignerCustomWidgetInterface::isInitialized
+104 (int (*)(...))QDesignerCustomWidgetInterface::initialize
+112 (int (*)(...))QDesignerCustomWidgetInterface::domXml
+120 (int (*)(...))QDesignerCustomWidgetInterface::codeTemplate
+
+Class QDesignerCustomWidgetInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerCustomWidgetInterface (0x0x7f868109bde0) 0 nearly-empty
+ vptr=((& QDesignerCustomWidgetInterface::_ZTV30QDesignerCustomWidgetInterface) + 16)
+
+Vtable for QDesignerCustomWidgetCollectionInterface
+QDesignerCustomWidgetCollectionInterface::_ZTV40QDesignerCustomWidgetCollectionInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI40QDesignerCustomWidgetCollectionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerCustomWidgetCollectionInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerCustomWidgetCollectionInterface (0x0x7f8680d5d300) 0 nearly-empty
+ vptr=((& QDesignerCustomWidgetCollectionInterface::_ZTV40QDesignerCustomWidgetCollectionInterface) + 16)
+
+Class QDomImplementation
+ size=8 align=8
+ base size=8 base align=8
+QDomImplementation (0x0x7f8680d5d720) 0
+
+Class QDomNode
+ size=8 align=8
+ base size=8 base align=8
+QDomNode (0x0x7f8680d5d780) 0
+
+Class QDomNodeList
+ size=8 align=8
+ base size=8 base align=8
+QDomNodeList (0x0x7f8680d5d7e0) 0
+
+Class QDomDocumentType
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentType (0x0x7f8680d564e0) 0
+ QDomNode (0x0x7f8680d5d9c0) 0
+
+Class QDomDocument
+ size=8 align=8
+ base size=8 base align=8
+QDomDocument (0x0x7f8680d56548) 0
+ QDomNode (0x0x7f8680d5da80) 0
+
+Class QDomNamedNodeMap
+ size=8 align=8
+ base size=8 base align=8
+QDomNamedNodeMap (0x0x7f8680d5db40) 0
+
+Class QDomDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentFragment (0x0x7f8680d565b0) 0
+ QDomNode (0x0x7f8680d5dcc0) 0
+
+Class QDomCharacterData
+ size=8 align=8
+ base size=8 base align=8
+QDomCharacterData (0x0x7f8680d56618) 0
+ QDomNode (0x0x7f8680d5dd80) 0
+
+Class QDomAttr
+ size=8 align=8
+ base size=8 base align=8
+QDomAttr (0x0x7f8680d56680) 0
+ QDomNode (0x0x7f8680d5dde0) 0
+
+Class QDomElement
+ size=8 align=8
+ base size=8 base align=8
+QDomElement (0x0x7f8680d566e8) 0
+ QDomNode (0x0x7f8680d5dea0) 0
+
+Class QDomText
+ size=8 align=8
+ base size=8 base align=8
+QDomText (0x0x7f8680d56750) 0
+ QDomCharacterData (0x0x7f8680d567b8) 0
+ QDomNode (0x0x7f8680dd3120) 0
+
+Class QDomComment
+ size=8 align=8
+ base size=8 base align=8
+QDomComment (0x0x7f8680d56820) 0
+ QDomCharacterData (0x0x7f8680d56888) 0
+ QDomNode (0x0x7f8680dd31e0) 0
+
+Class QDomCDATASection
+ size=8 align=8
+ base size=8 base align=8
+QDomCDATASection (0x0x7f8680d568f0) 0
+ QDomText (0x0x7f8680d56958) 0
+ QDomCharacterData (0x0x7f8680d569c0) 0
+ QDomNode (0x0x7f8680dd32a0) 0
+
+Class QDomNotation
+ size=8 align=8
+ base size=8 base align=8
+QDomNotation (0x0x7f8680d56a28) 0
+ QDomNode (0x0x7f8680dd3360) 0
+
+Class QDomEntity
+ size=8 align=8
+ base size=8 base align=8
+QDomEntity (0x0x7f8680d56a90) 0
+ QDomNode (0x0x7f8680dd3420) 0
+
+Class QDomEntityReference
+ size=8 align=8
+ base size=8 base align=8
+QDomEntityReference (0x0x7f8680d56af8) 0
+ QDomNode (0x0x7f8680dd34e0) 0
+
+Class QDomProcessingInstruction
+ size=8 align=8
+ base size=8 base align=8
+QDomProcessingInstruction (0x0x7f8680d56b60) 0
+ QDomNode (0x0x7f8680dd35a0) 0
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7f8680dd3660) 0
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7f8680dd3ae0) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7f8680eb7ae0) 0 empty
+
+Vtable for QOpenGLDebugLogger
+QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QOpenGLDebugLogger)
+16 (int (*)(...))QOpenGLDebugLogger::metaObject
+24 (int (*)(...))QOpenGLDebugLogger::qt_metacast
+32 (int (*)(...))QOpenGLDebugLogger::qt_metacall
+40 (int (*)(...))QOpenGLDebugLogger::~QOpenGLDebugLogger
+48 (int (*)(...))QOpenGLDebugLogger::~QOpenGLDebugLogger
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLDebugLogger
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLDebugLogger (0x0x7f8680f260d0) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16)
+ QObject (0x0x7f8680eb7a80) 0
+ primary-for QOpenGLDebugLogger (0x0x7f8680f260d0)
+
+Vtable for QOpenGLFramebufferObject
+QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QOpenGLFramebufferObject)
+16 (int (*)(...))QOpenGLFramebufferObject::~QOpenGLFramebufferObject
+24 (int (*)(...))QOpenGLFramebufferObject::~QOpenGLFramebufferObject
+
+Class QOpenGLFramebufferObject
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLFramebufferObject (0x0x7f8680eb7e40) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7f8680b92120) 0
+
+Vtable for QOpenGLPaintDevice
+QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QOpenGLPaintDevice)
+16 (int (*)(...))QOpenGLPaintDevice::~QOpenGLPaintDevice
+24 (int (*)(...))QOpenGLPaintDevice::~QOpenGLPaintDevice
+32 (int (*)(...))QOpenGLPaintDevice::devType
+40 (int (*)(...))QOpenGLPaintDevice::paintEngine
+48 (int (*)(...))QOpenGLPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QOpenGLPaintDevice::ensureActiveTarget
+
+Class QOpenGLPaintDevice
+ size=24 align=8
+ base size=24 base align=8
+QOpenGLPaintDevice (0x0x7f8680f26138) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16)
+ QPaintDevice (0x0x7f8680b92180) 0
+ primary-for QOpenGLPaintDevice (0x0x7f8680f26138)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7f8680b923c0) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7f8680be6a80) 0 empty
+
+Vtable for QOpenGLShader
+QOpenGLShader::_ZTV13QOpenGLShader: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QOpenGLShader)
+16 (int (*)(...))QOpenGLShader::metaObject
+24 (int (*)(...))QOpenGLShader::qt_metacast
+32 (int (*)(...))QOpenGLShader::qt_metacall
+40 (int (*)(...))QOpenGLShader::~QOpenGLShader
+48 (int (*)(...))QOpenGLShader::~QOpenGLShader
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLShader
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLShader (0x0x7f8680beeaf8) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16)
+ QObject (0x0x7f8680be6a20) 0
+ primary-for QOpenGLShader (0x0x7f8680beeaf8)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7f8680be6f60) 0 empty
+
+Vtable for QOpenGLShaderProgram
+QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QOpenGLShaderProgram)
+16 (int (*)(...))QOpenGLShaderProgram::metaObject
+24 (int (*)(...))QOpenGLShaderProgram::qt_metacast
+32 (int (*)(...))QOpenGLShaderProgram::qt_metacall
+40 (int (*)(...))QOpenGLShaderProgram::~QOpenGLShaderProgram
+48 (int (*)(...))QOpenGLShaderProgram::~QOpenGLShaderProgram
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QOpenGLShaderProgram::link
+
+Class QOpenGLShaderProgram
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLShaderProgram (0x0x7f8680beec98) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16)
+ QObject (0x0x7f8680be6f00) 0
+ primary-for QOpenGLShaderProgram (0x0x7f8680beec98)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7f8680c89120) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7f8680cfe240) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7f8680cfe480) 0 empty
+
+Vtable for QOpenGLTimerQuery
+QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QOpenGLTimerQuery)
+16 (int (*)(...))QOpenGLTimerQuery::metaObject
+24 (int (*)(...))QOpenGLTimerQuery::qt_metacast
+32 (int (*)(...))QOpenGLTimerQuery::qt_metacall
+40 (int (*)(...))QOpenGLTimerQuery::~QOpenGLTimerQuery
+48 (int (*)(...))QOpenGLTimerQuery::~QOpenGLTimerQuery
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLTimerQuery
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLTimerQuery (0x0x7f8680beee38) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16)
+ QObject (0x0x7f8680cfe420) 0
+ primary-for QOpenGLTimerQuery (0x0x7f8680beee38)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7f8680cfe660) 0 empty
+
+Vtable for QOpenGLTimeMonitor
+QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QOpenGLTimeMonitor)
+16 (int (*)(...))QOpenGLTimeMonitor::metaObject
+24 (int (*)(...))QOpenGLTimeMonitor::qt_metacast
+32 (int (*)(...))QOpenGLTimeMonitor::qt_metacall
+40 (int (*)(...))QOpenGLTimeMonitor::~QOpenGLTimeMonitor
+48 (int (*)(...))QOpenGLTimeMonitor::~QOpenGLTimeMonitor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLTimeMonitor
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLTimeMonitor (0x0x7f8680beeea0) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16)
+ QObject (0x0x7f8680cfe600) 0
+ primary-for QOpenGLTimeMonitor (0x0x7f8680beeea0)
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7f8680cfe7e0) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7f8680a14840) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7f8680a14a20) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7f8680a14a80) 0
+
+Vtable for QAbstractOpenGLFunctions
+QAbstractOpenGLFunctions::_ZTV24QAbstractOpenGLFunctions: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractOpenGLFunctions)
+16 (int (*)(...))QAbstractOpenGLFunctions::~QAbstractOpenGLFunctions
+24 (int (*)(...))QAbstractOpenGLFunctions::~QAbstractOpenGLFunctions
+32 (int (*)(...))QAbstractOpenGLFunctions::initializeOpenGLFunctions
+
+Class QAbstractOpenGLFunctions
+ size=16 align=8
+ base size=16 base align=8
+QAbstractOpenGLFunctions (0x0x7f8680a14c60) 0
+ vptr=((& QAbstractOpenGLFunctions::_ZTV24QAbstractOpenGLFunctions) + 16)
+
+Class QOpenGLFunctions_1_0_CoreBackend::Functions
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_1_0_CoreBackend::Functions (0x0x7f8680a14e40) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7f8680a06750) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f8680a14de0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7f8680a4f1e0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7f8680a067b8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f8680a4f180) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7f8680a4f540) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7f8680a06820) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f8680a4f4e0) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7f8680a4f8a0) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7f8680a06888) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f8680a4f840) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7f8680a4fc00) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7f8680a068f0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f8680a4fba0) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7f8680a4ff60) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7f8680a06958) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f8680a4ff00) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7f8680a79300) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7f8680a069c0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f8680a792a0) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7f8680a79660) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7f8680a06a28) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f8680a79600) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7f8680a799c0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7f8680a06a90) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f8680a79960) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7f8680a79d20) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7f8680a06af8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f8680a79cc0) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7f8680ac20c0) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7f8680a06b60) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f8680ac2060) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7f8680ac2420) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7f8680a06bc8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f8680ac23c0) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7f8680ac2780) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7f8680a06c30) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f8680ac2720) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7f8680ac2ae0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7f8680a06c98) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f8680ac2a80) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7f8680ac2e40) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7f8680a06d00) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f8680ac2de0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7f8680b181e0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7f8680a06d68) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f8680b18180) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7f8680b18540) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7f8680a06dd0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f8680b184e0) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7f8680b188a0) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7f8680a06e38) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f8680b18840) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7f8680b18c00) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7f8680a06ea0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f8680b18ba0) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7f8680b18f60) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7f8680a06f08) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f8680b18f00) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7f86807a1300) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7f8680a06f70) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f86807a12a0) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7f86807a1660) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7f86807b7000) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f86807a1600) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7f86807a19c0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7f86807b7068) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f86807a1960) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7f86807a1d20) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7f86807b70d0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f86807a1cc0) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7f86807dd0c0) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7f86807b7138) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f86807dd060) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7f86807dd420) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7f86807b71a0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f86807dd3c0) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7f86807dd780) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7f86807b7208) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f86807dd720) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7f86807dda80) 0
+
+Class QOpenGLVersionFunctionsFactory
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVersionFunctionsFactory (0x0x7f86807ddc00) 0 empty
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7f86807ddd20) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7f86807ddd80) 0
+
+Vtable for QOpenGLVertexArrayObject
+QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QOpenGLVertexArrayObject)
+16 (int (*)(...))QOpenGLVertexArrayObject::metaObject
+24 (int (*)(...))QOpenGLVertexArrayObject::qt_metacast
+32 (int (*)(...))QOpenGLVertexArrayObject::qt_metacall
+40 (int (*)(...))QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject
+48 (int (*)(...))QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLVertexArrayObject
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLVertexArrayObject (0x0x7f86807b7270) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16)
+ QObject (0x0x7f86807ddcc0) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7f86807b7270)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7f868081e420) 0 empty
+
+Vtable for QOpenGLWindow
+QOpenGLWindow::_ZTV13QOpenGLWindow: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QOpenGLWindow)
+16 (int (*)(...))QOpenGLWindow::metaObject
+24 (int (*)(...))QOpenGLWindow::qt_metacast
+32 (int (*)(...))QOpenGLWindow::qt_metacall
+40 (int (*)(...))QOpenGLWindow::~QOpenGLWindow
+48 (int (*)(...))QOpenGLWindow::~QOpenGLWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QOpenGLWindow::resizeEvent
+168 (int (*)(...))QOpenGLWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QOpenGLWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))QOpenGLWindow::initializeGL
+336 (int (*)(...))QOpenGLWindow::resizeGL
+344 (int (*)(...))QOpenGLWindow::paintGL
+352 (int (*)(...))QOpenGLWindow::paintUnderGL
+360 (int (*)(...))QOpenGLWindow::paintOverGL
+368 (int (*)(...))QOpenGLWindow::redirected
+376 (int (*)(...))-16
+384 (int (*)(...))(& _ZTI13QOpenGLWindow)
+392 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD1Ev
+400 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD0Ev
+408 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+416 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+424 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+432 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+440 (int (*)(...))-40
+448 (int (*)(...))(& _ZTI13QOpenGLWindow)
+456 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD1Ev
+464 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD0Ev
+472 (int (*)(...))QPaintDevice::devType
+480 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+488 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QPaintDevice::initPainter
+504 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow10redirectedEP6QPoint
+512 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QOpenGLWindow
+ size=56 align=8
+ base size=50 base align=8
+QOpenGLWindow (0x0x7f86807b7340) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16)
+ QPaintDeviceWindow (0x0x7f86807f9070) 0
+ primary-for QOpenGLWindow (0x0x7f86807b7340)
+ QWindow (0x0x7f86807f90e0) 0
+ primary-for QPaintDeviceWindow (0x0x7f86807f9070)
+ QObject (0x0x7f868081e300) 0
+ primary-for QWindow (0x0x7f86807f90e0)
+ QSurface (0x0x7f868081e360) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 392)
+ QPaintDevice (0x0x7f868081e3c0) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 456)
+
+Class QOpenGLWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWidget::QPrivateSignal (0x0x7f868081e660) 0 empty
+
+Vtable for QOpenGLWidget
+QOpenGLWidget::_ZTV13QOpenGLWidget: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QOpenGLWidget)
+16 (int (*)(...))QOpenGLWidget::metaObject
+24 (int (*)(...))QOpenGLWidget::qt_metacast
+32 (int (*)(...))QOpenGLWidget::qt_metacall
+40 (int (*)(...))QOpenGLWidget::~QOpenGLWidget
+48 (int (*)(...))QOpenGLWidget::~QOpenGLWidget
+56 (int (*)(...))QOpenGLWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QOpenGLWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QOpenGLWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QOpenGLWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QOpenGLWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QOpenGLWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QOpenGLWidget::initializeGL
+440 (int (*)(...))QOpenGLWidget::resizeGL
+448 (int (*)(...))QOpenGLWidget::paintGL
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI13QOpenGLWidget)
+472 (int (*)(...))QOpenGLWidget::_ZThn16_N13QOpenGLWidgetD1Ev
+480 (int (*)(...))QOpenGLWidget::_ZThn16_N13QOpenGLWidgetD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QOpenGLWidget::_ZThn16_NK13QOpenGLWidget11paintEngineEv
+504 (int (*)(...))QOpenGLWidget::_ZThn16_NK13QOpenGLWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QOpenGLWidget::_ZThn16_NK13QOpenGLWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QOpenGLWidget
+ size=40 align=8
+ base size=40 base align=8
+QOpenGLWidget (0x0x7f86807b7410) 0
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 16)
+ QWidget (0x0x7f86807f92a0) 0
+ primary-for QOpenGLWidget (0x0x7f86807b7410)
+ QObject (0x0x7f868081e5a0) 0
+ primary-for QWidget (0x0x7f86807f92a0)
+ QPaintDevice (0x0x7f868081e600) 16
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 472)
+
+Class QDesignerActionEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerActionEditorInterface::QPrivateSignal (0x0x7f868081e8a0) 0 empty
+
+Vtable for QDesignerActionEditorInterface
+QDesignerActionEditorInterface::_ZTV30QDesignerActionEditorInterface: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI30QDesignerActionEditorInterface)
+16 (int (*)(...))QDesignerActionEditorInterface::metaObject
+24 (int (*)(...))QDesignerActionEditorInterface::qt_metacast
+32 (int (*)(...))QDesignerActionEditorInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDesignerActionEditorInterface::core
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))__cxa_pure_virtual
+456 (int (*)(...))__cxa_pure_virtual
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI30QDesignerActionEditorInterface)
+480 0
+488 0
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerActionEditorInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerActionEditorInterface (0x0x7f86807b74e0) 0
+ vptr=((& QDesignerActionEditorInterface::_ZTV30QDesignerActionEditorInterface) + 16)
+ QWidget (0x0x7f86807f93f0) 0
+ primary-for QDesignerActionEditorInterface (0x0x7f86807b74e0)
+ QObject (0x0x7f868081e7e0) 0
+ primary-for QWidget (0x0x7f86807f93f0)
+ QPaintDevice (0x0x7f868081e840) 16
+ vptr=((& QDesignerActionEditorInterface::_ZTV30QDesignerActionEditorInterface) + 480)
+
+Vtable for QDesignerDnDItemInterface
+QDesignerDnDItemInterface::_ZTV25QDesignerDnDItemInterface: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QDesignerDnDItemInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerDnDItemInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerDnDItemInterface (0x0x7f868081e960) 0 nearly-empty
+ vptr=((& QDesignerDnDItemInterface::_ZTV25QDesignerDnDItemInterface) + 16)
+
+Vtable for QAbstractFormBuilder
+QAbstractFormBuilder::_ZTV20QAbstractFormBuilder: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAbstractFormBuilder)
+16 (int (*)(...))QAbstractFormBuilder::~QAbstractFormBuilder
+24 (int (*)(...))QAbstractFormBuilder::~QAbstractFormBuilder
+32 (int (*)(...))QAbstractFormBuilder::load
+40 (int (*)(...))QAbstractFormBuilder::save
+48 (int (*)(...))QAbstractFormBuilder::loadExtraInfo
+56 (int (*)(...))QAbstractFormBuilder::create
+64 (int (*)(...))QAbstractFormBuilder::create
+72 (int (*)(...))QAbstractFormBuilder::create
+80 (int (*)(...))QAbstractFormBuilder::create
+88 (int (*)(...))QAbstractFormBuilder::create
+96 (int (*)(...))QAbstractFormBuilder::create
+104 (int (*)(...))QAbstractFormBuilder::addMenuAction
+112 (int (*)(...))QAbstractFormBuilder::applyProperties
+120 (int (*)(...))QAbstractFormBuilder::applyTabStops
+128 (int (*)(...))QAbstractFormBuilder::createWidget
+136 (int (*)(...))QAbstractFormBuilder::createLayout
+144 (int (*)(...))QAbstractFormBuilder::createAction
+152 (int (*)(...))QAbstractFormBuilder::createActionGroup
+160 (int (*)(...))QAbstractFormBuilder::createCustomWidgets
+168 (int (*)(...))QAbstractFormBuilder::createConnections
+176 (int (*)(...))QAbstractFormBuilder::createResources
+184 (int (*)(...))QAbstractFormBuilder::addItem
+192 (int (*)(...))QAbstractFormBuilder::addItem
+200 (int (*)(...))QAbstractFormBuilder::saveExtraInfo
+208 (int (*)(...))QAbstractFormBuilder::saveDom
+216 (int (*)(...))QAbstractFormBuilder::createActionRefDom
+224 (int (*)(...))QAbstractFormBuilder::createDom
+232 (int (*)(...))QAbstractFormBuilder::createDom
+240 (int (*)(...))QAbstractFormBuilder::createDom
+248 (int (*)(...))QAbstractFormBuilder::createDom
+256 (int (*)(...))QAbstractFormBuilder::createDom
+264 (int (*)(...))QAbstractFormBuilder::createDom
+272 (int (*)(...))QAbstractFormBuilder::saveConnections
+280 (int (*)(...))QAbstractFormBuilder::saveCustomWidgets
+288 (int (*)(...))QAbstractFormBuilder::saveTabStops
+296 (int (*)(...))QAbstractFormBuilder::saveResources
+304 (int (*)(...))QAbstractFormBuilder::computeProperties
+312 (int (*)(...))QAbstractFormBuilder::checkProperty
+320 (int (*)(...))QAbstractFormBuilder::createProperty
+328 (int (*)(...))QAbstractFormBuilder::layoutInfo
+
+Class QAbstractFormBuilder
+ size=16 align=8
+ base size=16 base align=8
+QAbstractFormBuilder (0x0x7f868081e9c0) 0
+ vptr=((& QAbstractFormBuilder::_ZTV20QAbstractFormBuilder) + 16)
+
+Class QDesignerFormEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormEditorInterface::QPrivateSignal (0x0x7f868081ec00) 0 empty
+
+Vtable for QDesignerFormEditorInterface
+QDesignerFormEditorInterface::_ZTV28QDesignerFormEditorInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QDesignerFormEditorInterface)
+16 (int (*)(...))QDesignerFormEditorInterface::metaObject
+24 (int (*)(...))QDesignerFormEditorInterface::qt_metacast
+32 (int (*)(...))QDesignerFormEditorInterface::qt_metacall
+40 (int (*)(...))QDesignerFormEditorInterface::~QDesignerFormEditorInterface
+48 (int (*)(...))QDesignerFormEditorInterface::~QDesignerFormEditorInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDesignerFormEditorInterface
+ size=24 align=8
+ base size=24 base align=8
+QDesignerFormEditorInterface (0x0x7f86807b7548) 0
+ vptr=((& QDesignerFormEditorInterface::_ZTV28QDesignerFormEditorInterface) + 16)
+ QObject (0x0x7f868081eba0) 0
+ primary-for QDesignerFormEditorInterface (0x0x7f86807b7548)
+
+Vtable for QDesignerFormEditorPluginInterface
+QDesignerFormEditorPluginInterface::_ZTV34QDesignerFormEditorPluginInterface: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI34QDesignerFormEditorPluginInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerFormEditorPluginInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerFormEditorPluginInterface (0x0x7f868081ed20) 0 nearly-empty
+ vptr=((& QDesignerFormEditorPluginInterface::_ZTV34QDesignerFormEditorPluginInterface) + 16)
+
+Class QDesignerFormWindowInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowInterface::QPrivateSignal (0x0x7f86808b7000) 0 empty
+
+Vtable for QDesignerFormWindowInterface
+QDesignerFormWindowInterface::_ZTV28QDesignerFormWindowInterface: 121 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QDesignerFormWindowInterface)
+16 (int (*)(...))QDesignerFormWindowInterface::metaObject
+24 (int (*)(...))QDesignerFormWindowInterface::qt_metacast
+32 (int (*)(...))QDesignerFormWindowInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))__cxa_pure_virtual
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))__cxa_pure_virtual
+456 (int (*)(...))__cxa_pure_virtual
+464 (int (*)(...))__cxa_pure_virtual
+472 (int (*)(...))__cxa_pure_virtual
+480 (int (*)(...))__cxa_pure_virtual
+488 (int (*)(...))__cxa_pure_virtual
+496 (int (*)(...))__cxa_pure_virtual
+504 (int (*)(...))__cxa_pure_virtual
+512 (int (*)(...))__cxa_pure_virtual
+520 (int (*)(...))__cxa_pure_virtual
+528 (int (*)(...))__cxa_pure_virtual
+536 (int (*)(...))__cxa_pure_virtual
+544 (int (*)(...))__cxa_pure_virtual
+552 (int (*)(...))__cxa_pure_virtual
+560 (int (*)(...))__cxa_pure_virtual
+568 (int (*)(...))__cxa_pure_virtual
+576 (int (*)(...))__cxa_pure_virtual
+584 (int (*)(...))__cxa_pure_virtual
+592 (int (*)(...))__cxa_pure_virtual
+600 (int (*)(...))__cxa_pure_virtual
+608 (int (*)(...))__cxa_pure_virtual
+616 (int (*)(...))__cxa_pure_virtual
+624 (int (*)(...))__cxa_pure_virtual
+632 (int (*)(...))QDesignerFormWindowInterface::core
+640 (int (*)(...))__cxa_pure_virtual
+648 (int (*)(...))__cxa_pure_virtual
+656 (int (*)(...))__cxa_pure_virtual
+664 (int (*)(...))__cxa_pure_virtual
+672 (int (*)(...))__cxa_pure_virtual
+680 (int (*)(...))__cxa_pure_virtual
+688 (int (*)(...))__cxa_pure_virtual
+696 (int (*)(...))__cxa_pure_virtual
+704 (int (*)(...))__cxa_pure_virtual
+712 (int (*)(...))__cxa_pure_virtual
+720 (int (*)(...))__cxa_pure_virtual
+728 (int (*)(...))__cxa_pure_virtual
+736 (int (*)(...))__cxa_pure_virtual
+744 (int (*)(...))__cxa_pure_virtual
+752 (int (*)(...))__cxa_pure_virtual
+760 (int (*)(...))__cxa_pure_virtual
+768 (int (*)(...))__cxa_pure_virtual
+776 (int (*)(...))__cxa_pure_virtual
+784 (int (*)(...))__cxa_pure_virtual
+792 (int (*)(...))__cxa_pure_virtual
+800 (int (*)(...))__cxa_pure_virtual
+808 (int (*)(...))__cxa_pure_virtual
+816 (int (*)(...))__cxa_pure_virtual
+824 (int (*)(...))__cxa_pure_virtual
+832 (int (*)(...))__cxa_pure_virtual
+840 (int (*)(...))__cxa_pure_virtual
+848 (int (*)(...))__cxa_pure_virtual
+856 (int (*)(...))__cxa_pure_virtual
+864 (int (*)(...))__cxa_pure_virtual
+872 (int (*)(...))__cxa_pure_virtual
+880 (int (*)(...))__cxa_pure_virtual
+888 (int (*)(...))-16
+896 (int (*)(...))(& _ZTI28QDesignerFormWindowInterface)
+904 0
+912 0
+920 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+928 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+936 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+944 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+952 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+960 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerFormWindowInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerFormWindowInterface (0x0x7f86807b75b0) 0
+ vptr=((& QDesignerFormWindowInterface::_ZTV28QDesignerFormWindowInterface) + 16)
+ QWidget (0x0x7f86807f9540) 0
+ primary-for QDesignerFormWindowInterface (0x0x7f86807b75b0)
+ QObject (0x0x7f868081ef00) 0
+ primary-for QWidget (0x0x7f86807f9540)
+ QPaintDevice (0x0x7f868081ef60) 16
+ vptr=((& QDesignerFormWindowInterface::_ZTV28QDesignerFormWindowInterface) + 904)
+
+Vtable for QDesignerFormWindowCursorInterface
+QDesignerFormWindowCursorInterface::_ZTV34QDesignerFormWindowCursorInterface: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI34QDesignerFormWindowCursorInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerFormWindowCursorInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerFormWindowCursorInterface (0x0x7f86808b7180) 0 nearly-empty
+ vptr=((& QDesignerFormWindowCursorInterface::_ZTV34QDesignerFormWindowCursorInterface) + 16)
+
+Class QDesignerFormWindowManagerInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowManagerInterface::QPrivateSignal (0x0x7f86808b7240) 0 empty
+
+Vtable for QDesignerFormWindowManagerInterface
+QDesignerFormWindowManagerInterface::_ZTV35QDesignerFormWindowManagerInterface: 29 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI35QDesignerFormWindowManagerInterface)
+16 (int (*)(...))QDesignerFormWindowManagerInterface::metaObject
+24 (int (*)(...))QDesignerFormWindowManagerInterface::qt_metacast
+32 (int (*)(...))QDesignerFormWindowManagerInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerFormWindowManagerInterface
+ size=16 align=8
+ base size=16 base align=8
+QDesignerFormWindowManagerInterface (0x0x7f86807b7618) 0
+ vptr=((& QDesignerFormWindowManagerInterface::_ZTV35QDesignerFormWindowManagerInterface) + 16)
+ QObject (0x0x7f86808b71e0) 0
+ primary-for QDesignerFormWindowManagerInterface (0x0x7f86807b7618)
+
+Class QDesignerFormWindowToolInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowToolInterface::QPrivateSignal (0x0x7f86808b7540) 0 empty
+
+Vtable for QDesignerFormWindowToolInterface
+QDesignerFormWindowToolInterface::_ZTV32QDesignerFormWindowToolInterface: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QDesignerFormWindowToolInterface)
+16 (int (*)(...))QDesignerFormWindowToolInterface::metaObject
+24 (int (*)(...))QDesignerFormWindowToolInterface::qt_metacast
+32 (int (*)(...))QDesignerFormWindowToolInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))QDesignerFormWindowToolInterface::saveToDom
+168 (int (*)(...))QDesignerFormWindowToolInterface::loadFromDom
+176 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerFormWindowToolInterface
+ size=16 align=8
+ base size=16 base align=8
+QDesignerFormWindowToolInterface (0x0x7f86807b7680) 0
+ vptr=((& QDesignerFormWindowToolInterface::_ZTV32QDesignerFormWindowToolInterface) + 16)
+ QObject (0x0x7f86808b74e0) 0
+ primary-for QDesignerFormWindowToolInterface (0x0x7f86807b7680)
+
+Class QDesignerIntegrationInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegrationInterface::QPrivateSignal (0x0x7f86808b7720) 0 empty
+
+Vtable for QDesignerIntegrationInterface
+QDesignerIntegrationInterface::_ZTV29QDesignerIntegrationInterface: 34 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QDesignerIntegrationInterface)
+16 (int (*)(...))QDesignerIntegrationInterface::metaObject
+24 (int (*)(...))QDesignerIntegrationInterface::qt_metacast
+32 (int (*)(...))QDesignerIntegrationInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+232 (int (*)(...))__cxa_pure_virtual
+240 (int (*)(...))__cxa_pure_virtual
+248 (int (*)(...))__cxa_pure_virtual
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerIntegrationInterface
+ size=24 align=8
+ base size=24 base align=8
+QDesignerIntegrationInterface (0x0x7f86807b76e8) 0
+ vptr=((& QDesignerIntegrationInterface::_ZTV29QDesignerIntegrationInterface) + 16)
+ QObject (0x0x7f86808b76c0) 0
+ primary-for QDesignerIntegrationInterface (0x0x7f86807b76e8)
+
+Class QDesignerIntegration::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegration::QPrivateSignal (0x0x7f86808b7960) 0 empty
+
+Vtable for QDesignerIntegration
+QDesignerIntegration::_ZTV20QDesignerIntegration: 34 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDesignerIntegration)
+16 (int (*)(...))QDesignerIntegration::metaObject
+24 (int (*)(...))QDesignerIntegration::qt_metacast
+32 (int (*)(...))QDesignerIntegration::qt_metacall
+40 (int (*)(...))QDesignerIntegration::~QDesignerIntegration
+48 (int (*)(...))QDesignerIntegration::~QDesignerIntegration
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDesignerIntegration::containerWindow
+120 (int (*)(...))QDesignerIntegration::createResourceBrowser
+128 (int (*)(...))QDesignerIntegration::headerSuffix
+136 (int (*)(...))QDesignerIntegration::setHeaderSuffix
+144 (int (*)(...))QDesignerIntegration::isHeaderLowercase
+152 (int (*)(...))QDesignerIntegration::setHeaderLowercase
+160 (int (*)(...))QDesignerIntegration::features
+168 (int (*)(...))QDesignerIntegration::resourceFileWatcherBehaviour
+176 (int (*)(...))QDesignerIntegration::setResourceFileWatcherBehaviour
+184 (int (*)(...))QDesignerIntegration::contextHelpId
+192 (int (*)(...))QDesignerIntegration::setFeatures
+200 (int (*)(...))QDesignerIntegration::updateProperty
+208 (int (*)(...))QDesignerIntegration::updateProperty
+216 (int (*)(...))QDesignerIntegration::resetProperty
+224 (int (*)(...))QDesignerIntegration::addDynamicProperty
+232 (int (*)(...))QDesignerIntegration::removeDynamicProperty
+240 (int (*)(...))QDesignerIntegration::updateActiveFormWindow
+248 (int (*)(...))QDesignerIntegration::setupFormWindow
+256 (int (*)(...))QDesignerIntegration::updateSelection
+264 (int (*)(...))QDesignerIntegration::updateCustomWidgetPlugins
+
+Class QDesignerIntegration
+ size=32 align=8
+ base size=32 base align=8
+QDesignerIntegration (0x0x7f86807b7750) 0
+ vptr=((& QDesignerIntegration::_ZTV20QDesignerIntegration) + 16)
+ QDesignerIntegrationInterface (0x0x7f86807b77b8) 0
+ primary-for QDesignerIntegration (0x0x7f86807b7750)
+ QObject (0x0x7f86808b7900) 0
+ primary-for QDesignerIntegrationInterface (0x0x7f86807b77b8)
+
+Vtable for QAbstractExtensionFactory
+QAbstractExtensionFactory::_ZTV25QAbstractExtensionFactory: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAbstractExtensionFactory)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractExtensionFactory
+ size=8 align=8
+ base size=8 base align=8
+QAbstractExtensionFactory (0x0x7f86808b7a80) 0 nearly-empty
+ vptr=((& QAbstractExtensionFactory::_ZTV25QAbstractExtensionFactory) + 16)
+
+Vtable for QAbstractExtensionManager
+QAbstractExtensionManager::_ZTV25QAbstractExtensionManager: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAbstractExtensionManager)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractExtensionManager
+ size=8 align=8
+ base size=8 base align=8
+QAbstractExtensionManager (0x0x7f86808b7e40) 0 nearly-empty
+ vptr=((& QAbstractExtensionManager::_ZTV25QAbstractExtensionManager) + 16)
+
+Vtable for QDesignerLanguageExtension
+QDesignerLanguageExtension::_ZTV26QDesignerLanguageExtension: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QDesignerLanguageExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerLanguageExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerLanguageExtension (0x0x7f86809412a0) 0 nearly-empty
+ vptr=((& QDesignerLanguageExtension::_ZTV26QDesignerLanguageExtension) + 16)
+
+Vtable for QDesignerMetaDataBaseItemInterface
+QDesignerMetaDataBaseItemInterface::_ZTV34QDesignerMetaDataBaseItemInterface: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI34QDesignerMetaDataBaseItemInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerMetaDataBaseItemInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerMetaDataBaseItemInterface (0x0x7f86809414e0) 0 nearly-empty
+ vptr=((& QDesignerMetaDataBaseItemInterface::_ZTV34QDesignerMetaDataBaseItemInterface) + 16)
+
+Class QDesignerMetaDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerMetaDataBaseInterface::QPrivateSignal (0x0x7f86809415a0) 0 empty
+
+Vtable for QDesignerMetaDataBaseInterface
+QDesignerMetaDataBaseInterface::_ZTV30QDesignerMetaDataBaseInterface: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI30QDesignerMetaDataBaseInterface)
+16 (int (*)(...))QDesignerMetaDataBaseInterface::metaObject
+24 (int (*)(...))QDesignerMetaDataBaseInterface::qt_metacast
+32 (int (*)(...))QDesignerMetaDataBaseInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerMetaDataBaseInterface
+ size=16 align=8
+ base size=16 base align=8
+QDesignerMetaDataBaseInterface (0x0x7f86807b7820) 0
+ vptr=((& QDesignerMetaDataBaseInterface::_ZTV30QDesignerMetaDataBaseInterface) + 16)
+ QObject (0x0x7f8680941540) 0
+ primary-for QDesignerMetaDataBaseInterface (0x0x7f86807b7820)
+
+Class QDesignerNewFormWidgetInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerNewFormWidgetInterface::QPrivateSignal (0x0x7f8680941720) 0 empty
+
+Vtable for QDesignerNewFormWidgetInterface
+QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI31QDesignerNewFormWidgetInterface)
+16 (int (*)(...))QDesignerNewFormWidgetInterface::metaObject
+24 (int (*)(...))QDesignerNewFormWidgetInterface::qt_metacast
+32 (int (*)(...))QDesignerNewFormWidgetInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))__cxa_pure_virtual
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI31QDesignerNewFormWidgetInterface)
+464 0
+472 0
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerNewFormWidgetInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerNewFormWidgetInterface (0x0x7f86807b7888) 0
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 16)
+ QWidget (0x0x7f86808e5a10) 0
+ primary-for QDesignerNewFormWidgetInterface (0x0x7f86807b7888)
+ QObject (0x0x7f8680941660) 0
+ primary-for QWidget (0x0x7f86808e5a10)
+ QPaintDevice (0x0x7f86809416c0) 16
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 464)
+
+Class QDesignerObjectInspectorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerObjectInspectorInterface::QPrivateSignal (0x0x7f86809418a0) 0 empty
+
+Vtable for QDesignerObjectInspectorInterface
+QDesignerObjectInspectorInterface::_ZTV33QDesignerObjectInspectorInterface: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI33QDesignerObjectInspectorInterface)
+16 (int (*)(...))QDesignerObjectInspectorInterface::metaObject
+24 (int (*)(...))QDesignerObjectInspectorInterface::qt_metacast
+32 (int (*)(...))QDesignerObjectInspectorInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDesignerObjectInspectorInterface::core
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI33QDesignerObjectInspectorInterface)
+464 0
+472 0
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerObjectInspectorInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerObjectInspectorInterface (0x0x7f86807b78f0) 0
+ vptr=((& QDesignerObjectInspectorInterface::_ZTV33QDesignerObjectInspectorInterface) + 16)
+ QWidget (0x0x7f86808e5a80) 0
+ primary-for QDesignerObjectInspectorInterface (0x0x7f86807b78f0)
+ QObject (0x0x7f86809417e0) 0
+ primary-for QWidget (0x0x7f86808e5a80)
+ QPaintDevice (0x0x7f8680941840) 16
+ vptr=((& QDesignerObjectInspectorInterface::_ZTV33QDesignerObjectInspectorInterface) + 464)
+
+Vtable for QDesignerOptionsPageInterface
+QDesignerOptionsPageInterface::_ZTV29QDesignerOptionsPageInterface: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QDesignerOptionsPageInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerOptionsPageInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerOptionsPageInterface (0x0x7f8680941960) 0 nearly-empty
+ vptr=((& QDesignerOptionsPageInterface::_ZTV29QDesignerOptionsPageInterface) + 16)
+
+Class QDesignerPromotionInterface::PromotedClass
+ size=16 align=8
+ base size=16 base align=8
+QDesignerPromotionInterface::PromotedClass (0x0x7f8680941a20) 0
+
+Vtable for QDesignerPromotionInterface
+QDesignerPromotionInterface::_ZTV27QDesignerPromotionInterface: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDesignerPromotionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerPromotionInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerPromotionInterface (0x0x7f86809419c0) 0 nearly-empty
+ vptr=((& QDesignerPromotionInterface::_ZTV27QDesignerPromotionInterface) + 16)
+
+Class QDesignerPropertyEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerPropertyEditorInterface::QPrivateSignal (0x0x7f8680941b40) 0 empty
+
+Vtable for QDesignerPropertyEditorInterface
+QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface: 71 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QDesignerPropertyEditorInterface)
+16 (int (*)(...))QDesignerPropertyEditorInterface::metaObject
+24 (int (*)(...))QDesignerPropertyEditorInterface::qt_metacast
+32 (int (*)(...))QDesignerPropertyEditorInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDesignerPropertyEditorInterface::core
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))__cxa_pure_virtual
+456 (int (*)(...))__cxa_pure_virtual
+464 (int (*)(...))__cxa_pure_virtual
+472 (int (*)(...))__cxa_pure_virtual
+480 (int (*)(...))__cxa_pure_virtual
+488 (int (*)(...))-16
+496 (int (*)(...))(& _ZTI32QDesignerPropertyEditorInterface)
+504 0
+512 0
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerPropertyEditorInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerPropertyEditorInterface (0x0x7f86807b7958) 0
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 16)
+ QWidget (0x0x7f86808e5af0) 0
+ primary-for QDesignerPropertyEditorInterface (0x0x7f86807b7958)
+ QObject (0x0x7f8680941a80) 0
+ primary-for QWidget (0x0x7f86808e5af0)
+ QPaintDevice (0x0x7f8680941ae0) 16
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 504)
+
+Class QDesignerResourceBrowserInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerResourceBrowserInterface::QPrivateSignal (0x0x7f8680941cc0) 0 empty
+
+Vtable for QDesignerResourceBrowserInterface
+QDesignerResourceBrowserInterface::_ZTV33QDesignerResourceBrowserInterface: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI33QDesignerResourceBrowserInterface)
+16 (int (*)(...))QDesignerResourceBrowserInterface::metaObject
+24 (int (*)(...))QDesignerResourceBrowserInterface::qt_metacast
+32 (int (*)(...))QDesignerResourceBrowserInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))__cxa_pure_virtual
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI33QDesignerResourceBrowserInterface)
+464 0
+472 0
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerResourceBrowserInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerResourceBrowserInterface (0x0x7f86807b79c0) 0
+ vptr=((& QDesignerResourceBrowserInterface::_ZTV33QDesignerResourceBrowserInterface) + 16)
+ QWidget (0x0x7f86808e5b60) 0
+ primary-for QDesignerResourceBrowserInterface (0x0x7f86807b79c0)
+ QObject (0x0x7f8680941c00) 0
+ primary-for QWidget (0x0x7f86808e5b60)
+ QPaintDevice (0x0x7f8680941c60) 16
+ vptr=((& QDesignerResourceBrowserInterface::_ZTV33QDesignerResourceBrowserInterface) + 464)
+
+Vtable for QDesignerSettingsInterface
+QDesignerSettingsInterface::_ZTV26QDesignerSettingsInterface: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QDesignerSettingsInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerSettingsInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerSettingsInterface (0x0x7f8680941d80) 0 nearly-empty
+ vptr=((& QDesignerSettingsInterface::_ZTV26QDesignerSettingsInterface) + 16)
+
+Class QDesignerWidgetBoxInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetBoxInterface::QPrivateSignal (0x0x7f8680941ea0) 0 empty
+
+Class QDesignerWidgetBoxInterface::Widget
+ size=8 align=8
+ base size=8 base align=8
+QDesignerWidgetBoxInterface::Widget (0x0x7f8680941f00) 0
+
+Class QDesignerWidgetBoxInterface::Category
+ size=56 align=8
+ base size=56 base align=8
+QDesignerWidgetBoxInterface::Category (0x0x7f86805c6000) 0
+
+Vtable for QDesignerWidgetBoxInterface
+QDesignerWidgetBoxInterface::_ZTV27QDesignerWidgetBoxInterface: 77 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDesignerWidgetBoxInterface)
+16 (int (*)(...))QDesignerWidgetBoxInterface::metaObject
+24 (int (*)(...))QDesignerWidgetBoxInterface::qt_metacast
+32 (int (*)(...))QDesignerWidgetBoxInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))__cxa_pure_virtual
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))__cxa_pure_virtual
+456 (int (*)(...))__cxa_pure_virtual
+464 (int (*)(...))__cxa_pure_virtual
+472 (int (*)(...))__cxa_pure_virtual
+480 (int (*)(...))__cxa_pure_virtual
+488 (int (*)(...))__cxa_pure_virtual
+496 (int (*)(...))__cxa_pure_virtual
+504 (int (*)(...))__cxa_pure_virtual
+512 (int (*)(...))__cxa_pure_virtual
+520 (int (*)(...))__cxa_pure_virtual
+528 (int (*)(...))__cxa_pure_virtual
+536 (int (*)(...))-16
+544 (int (*)(...))(& _ZTI27QDesignerWidgetBoxInterface)
+552 0
+560 0
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+592 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+600 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+608 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerWidgetBoxInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerWidgetBoxInterface (0x0x7f86807b7a28) 0
+ vptr=((& QDesignerWidgetBoxInterface::_ZTV27QDesignerWidgetBoxInterface) + 16)
+ QWidget (0x0x7f86808e5bd0) 0
+ primary-for QDesignerWidgetBoxInterface (0x0x7f86807b7a28)
+ QObject (0x0x7f8680941de0) 0
+ primary-for QWidget (0x0x7f86808e5bd0)
+ QPaintDevice (0x0x7f8680941e40) 16
+ vptr=((& QDesignerWidgetBoxInterface::_ZTV27QDesignerWidgetBoxInterface) + 552)
+
+Vtable for QDesignerWidgetDataBaseItemInterface
+QDesignerWidgetDataBaseItemInterface::_ZTV36QDesignerWidgetDataBaseItemInterface: 30 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI36QDesignerWidgetDataBaseItemInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+232 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerWidgetDataBaseItemInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerWidgetDataBaseItemInterface (0x0x7f86806444e0) 0 nearly-empty
+ vptr=((& QDesignerWidgetDataBaseItemInterface::_ZTV36QDesignerWidgetDataBaseItemInterface) + 16)
+
+Class QDesignerWidgetDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetDataBaseInterface::QPrivateSignal (0x0x7f8680644600) 0 empty
+
+Vtable for QDesignerWidgetDataBaseInterface
+QDesignerWidgetDataBaseInterface::_ZTV32QDesignerWidgetDataBaseInterface: 22 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QDesignerWidgetDataBaseInterface)
+16 (int (*)(...))QDesignerWidgetDataBaseInterface::metaObject
+24 (int (*)(...))QDesignerWidgetDataBaseInterface::qt_metacast
+32 (int (*)(...))QDesignerWidgetDataBaseInterface::qt_metacall
+40 (int (*)(...))QDesignerWidgetDataBaseInterface::~QDesignerWidgetDataBaseInterface
+48 (int (*)(...))QDesignerWidgetDataBaseInterface::~QDesignerWidgetDataBaseInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDesignerWidgetDataBaseInterface::count
+120 (int (*)(...))QDesignerWidgetDataBaseInterface::item
+128 (int (*)(...))QDesignerWidgetDataBaseInterface::indexOf
+136 (int (*)(...))QDesignerWidgetDataBaseInterface::insert
+144 (int (*)(...))QDesignerWidgetDataBaseInterface::append
+152 (int (*)(...))QDesignerWidgetDataBaseInterface::indexOfObject
+160 (int (*)(...))QDesignerWidgetDataBaseInterface::indexOfClassName
+168 (int (*)(...))QDesignerWidgetDataBaseInterface::core
+
+Class QDesignerWidgetDataBaseInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerWidgetDataBaseInterface (0x0x7f86805da270) 0
+ vptr=((& QDesignerWidgetDataBaseInterface::_ZTV32QDesignerWidgetDataBaseInterface) + 16)
+ QObject (0x0x7f86806445a0) 0
+ primary-for QDesignerWidgetDataBaseInterface (0x0x7f86805da270)
+
+Class QDesignerWidgetFactoryInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetFactoryInterface::QPrivateSignal (0x0x7f8680644e40) 0 empty
+
+Vtable for QDesignerWidgetFactoryInterface
+QDesignerWidgetFactoryInterface::_ZTV31QDesignerWidgetFactoryInterface: 21 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI31QDesignerWidgetFactoryInterface)
+16 (int (*)(...))QDesignerWidgetFactoryInterface::metaObject
+24 (int (*)(...))QDesignerWidgetFactoryInterface::qt_metacast
+32 (int (*)(...))QDesignerWidgetFactoryInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerWidgetFactoryInterface
+ size=16 align=8
+ base size=16 base align=8
+QDesignerWidgetFactoryInterface (0x0x7f86805daa90) 0
+ vptr=((& QDesignerWidgetFactoryInterface::_ZTV31QDesignerWidgetFactoryInterface) + 16)
+ QObject (0x0x7f8680644f60) 0
+ primary-for QDesignerWidgetFactoryInterface (0x0x7f86805daa90)
+
+Vtable for QDesignerContainerExtension
+QDesignerContainerExtension::_ZTV27QDesignerContainerExtension: 13 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDesignerContainerExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerContainerExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerContainerExtension (0x0x7f86806d3060) 0 nearly-empty
+ vptr=((& QDesignerContainerExtension::_ZTV27QDesignerContainerExtension) + 16)
+
+Vtable for QDesignerDynamicPropertySheetExtension
+QDesignerDynamicPropertySheetExtension::_ZTV38QDesignerDynamicPropertySheetExtension: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI38QDesignerDynamicPropertySheetExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerDynamicPropertySheetExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerDynamicPropertySheetExtension (0x0x7f86806d32a0) 0 nearly-empty
+ vptr=((& QDesignerDynamicPropertySheetExtension::_ZTV38QDesignerDynamicPropertySheetExtension) + 16)
+
+Vtable for QDesignerExtraInfoExtension
+QDesignerExtraInfoExtension::_ZTV27QDesignerExtraInfoExtension: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDesignerExtraInfoExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerExtraInfoExtension
+ size=32 align=8
+ base size=32 base align=8
+QDesignerExtraInfoExtension (0x0x7f86806d3540) 0
+ vptr=((& QDesignerExtraInfoExtension::_ZTV27QDesignerExtraInfoExtension) + 16)
+
+Vtable for QFormBuilder
+QFormBuilder::_ZTV12QFormBuilder: 43 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QFormBuilder)
+16 (int (*)(...))QFormBuilder::~QFormBuilder
+24 (int (*)(...))QFormBuilder::~QFormBuilder
+32 (int (*)(...))QAbstractFormBuilder::load
+40 (int (*)(...))QAbstractFormBuilder::save
+48 (int (*)(...))QAbstractFormBuilder::loadExtraInfo
+56 (int (*)(...))QFormBuilder::create
+64 (int (*)(...))QFormBuilder::create
+72 (int (*)(...))QFormBuilder::create
+80 (int (*)(...))QFormBuilder::create
+88 (int (*)(...))QFormBuilder::create
+96 (int (*)(...))QFormBuilder::create
+104 (int (*)(...))QAbstractFormBuilder::addMenuAction
+112 (int (*)(...))QFormBuilder::applyProperties
+120 (int (*)(...))QAbstractFormBuilder::applyTabStops
+128 (int (*)(...))QFormBuilder::createWidget
+136 (int (*)(...))QFormBuilder::createLayout
+144 (int (*)(...))QAbstractFormBuilder::createAction
+152 (int (*)(...))QAbstractFormBuilder::createActionGroup
+160 (int (*)(...))QAbstractFormBuilder::createCustomWidgets
+168 (int (*)(...))QFormBuilder::createConnections
+176 (int (*)(...))QAbstractFormBuilder::createResources
+184 (int (*)(...))QFormBuilder::addItem
+192 (int (*)(...))QFormBuilder::addItem
+200 (int (*)(...))QAbstractFormBuilder::saveExtraInfo
+208 (int (*)(...))QAbstractFormBuilder::saveDom
+216 (int (*)(...))QAbstractFormBuilder::createActionRefDom
+224 (int (*)(...))QAbstractFormBuilder::createDom
+232 (int (*)(...))QAbstractFormBuilder::createDom
+240 (int (*)(...))QAbstractFormBuilder::createDom
+248 (int (*)(...))QAbstractFormBuilder::createDom
+256 (int (*)(...))QAbstractFormBuilder::createDom
+264 (int (*)(...))QAbstractFormBuilder::createDom
+272 (int (*)(...))QAbstractFormBuilder::saveConnections
+280 (int (*)(...))QAbstractFormBuilder::saveCustomWidgets
+288 (int (*)(...))QAbstractFormBuilder::saveTabStops
+296 (int (*)(...))QAbstractFormBuilder::saveResources
+304 (int (*)(...))QAbstractFormBuilder::computeProperties
+312 (int (*)(...))QAbstractFormBuilder::checkProperty
+320 (int (*)(...))QAbstractFormBuilder::createProperty
+328 (int (*)(...))QAbstractFormBuilder::layoutInfo
+336 (int (*)(...))QFormBuilder::updateCustomWidgets
+
+Class QFormBuilder
+ size=16 align=8
+ base size=16 base align=8
+QFormBuilder (0x0x7f86805daaf8) 0
+ vptr=((& QFormBuilder::_ZTV12QFormBuilder) + 16)
+ QAbstractFormBuilder (0x0x7f86806d3780) 0
+ primary-for QFormBuilder (0x0x7f86805daaf8)
+
+Vtable for QDesignerLayoutDecorationExtension
+QDesignerLayoutDecorationExtension::_ZTV34QDesignerLayoutDecorationExtension: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI34QDesignerLayoutDecorationExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerLayoutDecorationExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerLayoutDecorationExtension (0x0x7f86806d37e0) 0 nearly-empty
+ vptr=((& QDesignerLayoutDecorationExtension::_ZTV34QDesignerLayoutDecorationExtension) + 16)
+
+Vtable for QDesignerMemberSheetExtension
+QDesignerMemberSheetExtension::_ZTV29QDesignerMemberSheetExtension: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QDesignerMemberSheetExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerMemberSheetExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerMemberSheetExtension (0x0x7f86806d3a20) 0 nearly-empty
+ vptr=((& QDesignerMemberSheetExtension::_ZTV29QDesignerMemberSheetExtension) + 16)
+
+Vtable for QDesignerPropertySheetExtension
+QDesignerPropertySheetExtension::_ZTV31QDesignerPropertySheetExtension: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI31QDesignerPropertySheetExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerPropertySheetExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerPropertySheetExtension (0x0x7f86806d3c60) 0 nearly-empty
+ vptr=((& QDesignerPropertySheetExtension::_ZTV31QDesignerPropertySheetExtension) + 16)
+
+Class QExtensionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QExtensionManager::QPrivateSignal (0x0x7f86806d3f60) 0 empty
+
+Vtable for QExtensionManager
+QExtensionManager::_ZTV17QExtensionManager: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QExtensionManager)
+16 (int (*)(...))QExtensionManager::metaObject
+24 (int (*)(...))QExtensionManager::qt_metacast
+32 (int (*)(...))QExtensionManager::qt_metacall
+40 (int (*)(...))QExtensionManager::~QExtensionManager
+48 (int (*)(...))QExtensionManager::~QExtensionManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QExtensionManager::registerExtensions
+120 (int (*)(...))QExtensionManager::unregisterExtensions
+128 (int (*)(...))QExtensionManager::extension
+136 (int (*)(...))-16
+144 (int (*)(...))(& _ZTI17QExtensionManager)
+152 (int (*)(...))QExtensionManager::_ZThn16_N17QExtensionManagerD1Ev
+160 (int (*)(...))QExtensionManager::_ZThn16_N17QExtensionManagerD0Ev
+168 (int (*)(...))QExtensionManager::_ZThn16_N17QExtensionManager18registerExtensionsEP25QAbstractExtensionFactoryRK7QString
+176 (int (*)(...))QExtensionManager::_ZThn16_N17QExtensionManager20unregisterExtensionsEP25QAbstractExtensionFactoryRK7QString
+184 (int (*)(...))QExtensionManager::_ZThn16_NK17QExtensionManager9extensionEP7QObjectRK7QString
+
+Class QExtensionManager
+ size=56 align=8
+ base size=56 base align=8
+QExtensionManager (0x0x7f868064c460) 0
+ vptr=((& QExtensionManager::_ZTV17QExtensionManager) + 16)
+ QObject (0x0x7f86806d3ea0) 0
+ primary-for QExtensionManager (0x0x7f868064c460)
+ QAbstractExtensionManager (0x0x7f86806d3f00) 16 nearly-empty
+ vptr=((& QExtensionManager::_ZTV17QExtensionManager) + 152)
+
+Vtable for QDesignerTaskMenuExtension
+QDesignerTaskMenuExtension::_ZTV26QDesignerTaskMenuExtension: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QDesignerTaskMenuExtension)
+16 0
+24 0
+32 (int (*)(...))QDesignerTaskMenuExtension::preferredEditAction
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerTaskMenuExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerTaskMenuExtension (0x0x7f8680736a20) 0 nearly-empty
+ vptr=((& QDesignerTaskMenuExtension::_ZTV26QDesignerTaskMenuExtension) + 16)
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f86803e5060) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f86803e53c0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f86803e55a0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f86803e5900) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f86803e5ae0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f86803e5e40) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f86803e54e0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f868041e300) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f868041e4e0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f868041e840) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f868041ea20) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f868041ed80) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f868041ef60) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f868044b300) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f868044b4e0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f868044b840) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f8680496120) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f8680496480) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f8680496600) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f8680496960) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f8680496ae0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f8680496e40) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f86804c2000) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f86804c2360) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f86804c24e0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f86804c2840) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f86804c29c0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f86804c2d20) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f86804c2ea0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f86804f3240) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f86804f33c0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f86804f3720) 0 empty
+
+Class QtPrivate::q_relocate_overlap_n_left_move(iterator, N, iterator) [with iterator = QDesignerWidgetBoxInterface::Widget*; N = long long int]::Destructor
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::q_relocate_overlap_n_left_move(iterator, N, iterator) [with iterator = QDesignerWidgetBoxInterface::Widget*; N = long long int]::Destructor (0x0x7f867b0fa840) 0
+
diff --git a/tests/auto/bic/data/QtDesigner.6.2.0.linux-gcc-amd64.txt b/tests/auto/bic/data/QtDesigner.6.2.0.linux-gcc-amd64.txt
new file mode 100644
index 000000000..63b87581b
--- /dev/null
+++ b/tests/auto/bic/data/QtDesigner.6.2.0.linux-gcc-amd64.txt
@@ -0,0 +1,21876 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7fec4719ade0) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7fec472b6600) 0 empty
+
+Class std::__do_is_nt_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_nt_destructible_impl (0x0x7fec472b6840) 0 empty
+
+Class std::__do_is_implicitly_default_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_implicitly_default_constructible_impl (0x0x7fec46ee5960) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7fec46f40180) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7fec46f90f60) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7fec46fc0060) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7fec46fc0540) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7fec46fc05a0) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7fec46fc0600) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7fec46fc0660) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7fec46fc06c0) 0 empty
+
+Class std::__result_of_memfun_ref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memfun_ref_impl (0x0x7fec46fc0780) 0 empty
+
+Class std::__result_of_memfun_deref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memfun_deref_impl (0x0x7fec46fc0840) 0 empty
+
+Class std::__result_of_memobj_ref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memobj_ref_impl (0x0x7fec46fc0900) 0 empty
+
+Class std::__result_of_memobj_deref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memobj_deref_impl (0x0x7fec46fc09c0) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7fec46fc0d20) 0 empty
+
+Class std::__swappable_details::__do_is_swappable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_details::__do_is_swappable_impl (0x0x7fec470070c0) 0 empty
+
+Class std::__swappable_details::__do_is_nothrow_swappable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_details::__do_is_nothrow_swappable_impl (0x0x7fec47007120) 0 empty
+
+Class std::__swappable_with_details::__do_is_swappable_with_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_with_details::__do_is_swappable_with_impl (0x0x7fec470073c0) 0 empty
+
+Class std::__swappable_with_details::__do_is_nothrow_swappable_with_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_with_details::__do_is_nothrow_swappable_with_impl (0x0x7fec47007420) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuch (0x0x7fec47007c60) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7fec47084240) 0 empty
+
+Class std::__nonesuch_no_braces
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch_no_braces (0x0x7fec46ff0f70) 0 empty
+ std::__nonesuch (0x0x7fec47084720) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7fec4650a480) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7fec4650a780) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7fec4650a7e0) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7fec4656e540) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7fec4656e5a0) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7fec470a84e0) 0 empty
+ std::input_iterator_tag (0x0x7fec4656e600) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7fec470a8548) 0 empty
+ std::forward_iterator_tag (0x0x7fec470a85b0) 0 empty
+ std::input_iterator_tag (0x0x7fec4656e660) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7fec470a8618) 0 empty
+ std::bidirectional_iterator_tag (0x0x7fec470a8680) 0 empty
+ std::forward_iterator_tag (0x0x7fec470a86e8) 0 empty
+ std::input_iterator_tag (0x0x7fec4656e6c0) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_iter (0x0x7fec466243c0) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_less_val
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_val (0x0x7fec466244e0) 0 empty
+
+Class __gnu_cxx::__ops::_Val_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Val_less_iter (0x0x7fec466247e0) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_equal_to_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_equal_to_iter (0x0x7fec46624ae0) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_equal_to_val
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_equal_to_val (0x0x7fec46624c00) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7fec462e2420) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7fec462e2720) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7fec462e2780) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7fec462e2840) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7fec462e28a0) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7fec462e2900) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7fec462e2960) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7fec462e29c0) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7fec462e2c60) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7fec462e2f00) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7fec462e2f60) 0
+
+Vtable for std::exception
+std::exception::_ZTVSt9exception: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9exception)
+16 (int (*)(...))std::exception::~exception
+24 (int (*)(...))std::exception::~exception
+32 (int (*)(...))std::exception::what
+
+Class std::exception
+ size=8 align=8
+ base size=8 base align=8
+std::exception (0x0x7fec4633ad20) 0 nearly-empty
+ vptr=((& std::exception::_ZTVSt9exception) + 16)
+
+Vtable for std::bad_exception
+std::bad_exception::_ZTVSt13bad_exception: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13bad_exception)
+16 (int (*)(...))std::bad_exception::~bad_exception
+24 (int (*)(...))std::bad_exception::~bad_exception
+32 (int (*)(...))std::bad_exception::what
+
+Class std::bad_exception
+ size=8 align=8
+ base size=8 base align=8
+std::bad_exception (0x0x7fec470a8a90) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+ std::exception (0x0x7fec4633af00) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7fec470a8a90)
+
+Vtable for std::type_info
+std::type_info::_ZTVSt9type_info: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9type_info)
+16 (int (*)(...))std::type_info::~type_info
+24 (int (*)(...))std::type_info::~type_info
+32 (int (*)(...))std::type_info::__is_pointer_p
+40 (int (*)(...))std::type_info::__is_function_p
+48 (int (*)(...))std::type_info::__do_catch
+56 (int (*)(...))std::type_info::__do_upcast
+
+Class std::type_info
+ size=16 align=8
+ base size=16 base align=8
+std::type_info (0x0x7fec463dc120) 0
+ vptr=((& std::type_info::_ZTVSt9type_info) + 16)
+
+Vtable for std::bad_cast
+std::bad_cast::_ZTVSt8bad_cast: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt8bad_cast)
+16 (int (*)(...))std::bad_cast::~bad_cast
+24 (int (*)(...))std::bad_cast::~bad_cast
+32 (int (*)(...))std::bad_cast::what
+
+Class std::bad_cast
+ size=8 align=8
+ base size=8 base align=8
+std::bad_cast (0x0x7fec470a8af8) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+ std::exception (0x0x7fec463dc4e0) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7fec470a8af8)
+
+Vtable for std::bad_typeid
+std::bad_typeid::_ZTVSt10bad_typeid: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt10bad_typeid)
+16 (int (*)(...))std::bad_typeid::~bad_typeid
+24 (int (*)(...))std::bad_typeid::~bad_typeid
+32 (int (*)(...))std::bad_typeid::what
+
+Class std::bad_typeid
+ size=8 align=8
+ base size=8 base align=8
+std::bad_typeid (0x0x7fec470a8b60) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+ std::exception (0x0x7fec463dc6c0) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7fec470a8b60)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7fec463dc8a0) 0
+
+Vtable for std::nested_exception
+std::nested_exception::_ZTVSt16nested_exception: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt16nested_exception)
+16 (int (*)(...))std::nested_exception::~nested_exception
+24 (int (*)(...))std::nested_exception::~nested_exception
+
+Class std::nested_exception
+ size=16 align=8
+ base size=16 base align=8
+std::nested_exception (0x0x7fec463dcde0) 0
+ vptr=((& std::nested_exception::_ZTVSt16nested_exception) + 16)
+
+Vtable for std::bad_alloc
+std::bad_alloc::_ZTVSt9bad_alloc: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9bad_alloc)
+16 (int (*)(...))std::bad_alloc::~bad_alloc
+24 (int (*)(...))std::bad_alloc::~bad_alloc
+32 (int (*)(...))std::bad_alloc::what
+
+Class std::bad_alloc
+ size=8 align=8
+ base size=8 base align=8
+std::bad_alloc (0x0x7fec470a8bc8) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+ std::exception (0x0x7fec464154e0) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7fec470a8bc8)
+
+Vtable for std::bad_array_new_length
+std::bad_array_new_length::_ZTVSt20bad_array_new_length: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt20bad_array_new_length)
+16 (int (*)(...))std::bad_array_new_length::~bad_array_new_length
+24 (int (*)(...))std::bad_array_new_length::~bad_array_new_length
+32 (int (*)(...))std::bad_array_new_length::what
+
+Class std::bad_array_new_length
+ size=8 align=8
+ base size=8 base align=8
+std::bad_array_new_length (0x0x7fec470a8c30) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+ std::bad_alloc (0x0x7fec470a8c98) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7fec470a8c30)
+ std::exception (0x0x7fec464156c0) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7fec470a8c98)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7fec464158a0) 0 empty
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7fec46415ae0) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7fec464c32a0) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7fec4609d660) 0
+
+Vtable for __cxxabiv1::__forced_unwind
+__cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN10__cxxabiv115__forced_unwindE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class __cxxabiv1::__forced_unwind
+ size=8 align=8
+ base size=8 base align=8
+__cxxabiv1::__forced_unwind (0x0x7fec4609d720) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7fec45d19600) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7fec45d196c0) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7fec45d19720) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7fec45d19780) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7fec45d197e0) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7fec45d19900) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7fec45d19960) 0
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7fec45dd1000) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7fec45dd1180) 0 empty
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7fec45c00000) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7fec45c00060) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7fec45c000c0) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7fec45c00120) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7fec4581f8a0) 0
+
+Vtable for std::logic_error
+std::logic_error::_ZTVSt11logic_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt11logic_error)
+16 (int (*)(...))std::logic_error::~logic_error
+24 (int (*)(...))std::logic_error::~logic_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::logic_error
+ size=16 align=8
+ base size=16 base align=8
+std::logic_error (0x0x7fec457b6c30) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+ std::exception (0x0x7fec4581f960) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fec457b6c30)
+
+Vtable for std::domain_error
+std::domain_error::_ZTVSt12domain_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12domain_error)
+16 (int (*)(...))std::domain_error::~domain_error
+24 (int (*)(...))std::domain_error::~domain_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::domain_error
+ size=16 align=8
+ base size=16 base align=8
+std::domain_error (0x0x7fec457b6c98) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+ std::logic_error (0x0x7fec457b6d00) 0
+ primary-for std::domain_error (0x0x7fec457b6c98)
+ std::exception (0x0x7fec4581f9c0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fec457b6d00)
+
+Vtable for std::invalid_argument
+std::invalid_argument::_ZTVSt16invalid_argument: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt16invalid_argument)
+16 (int (*)(...))std::invalid_argument::~invalid_argument
+24 (int (*)(...))std::invalid_argument::~invalid_argument
+32 (int (*)(...))std::logic_error::what
+
+Class std::invalid_argument
+ size=16 align=8
+ base size=16 base align=8
+std::invalid_argument (0x0x7fec457b6d68) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+ std::logic_error (0x0x7fec457b6dd0) 0
+ primary-for std::invalid_argument (0x0x7fec457b6d68)
+ std::exception (0x0x7fec4581fa20) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fec457b6dd0)
+
+Vtable for std::length_error
+std::length_error::_ZTVSt12length_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12length_error)
+16 (int (*)(...))std::length_error::~length_error
+24 (int (*)(...))std::length_error::~length_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::length_error
+ size=16 align=8
+ base size=16 base align=8
+std::length_error (0x0x7fec457b6e38) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+ std::logic_error (0x0x7fec457b6ea0) 0
+ primary-for std::length_error (0x0x7fec457b6e38)
+ std::exception (0x0x7fec4581fa80) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fec457b6ea0)
+
+Vtable for std::out_of_range
+std::out_of_range::_ZTVSt12out_of_range: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12out_of_range)
+16 (int (*)(...))std::out_of_range::~out_of_range
+24 (int (*)(...))std::out_of_range::~out_of_range
+32 (int (*)(...))std::logic_error::what
+
+Class std::out_of_range
+ size=16 align=8
+ base size=16 base align=8
+std::out_of_range (0x0x7fec457b6f08) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+ std::logic_error (0x0x7fec457b6f70) 0
+ primary-for std::out_of_range (0x0x7fec457b6f08)
+ std::exception (0x0x7fec4581fae0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fec457b6f70)
+
+Vtable for std::runtime_error
+std::runtime_error::_ZTVSt13runtime_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13runtime_error)
+16 (int (*)(...))std::runtime_error::~runtime_error
+24 (int (*)(...))std::runtime_error::~runtime_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::runtime_error
+ size=16 align=8
+ base size=16 base align=8
+std::runtime_error (0x0x7fec45865000) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+ std::exception (0x0x7fec4581fb40) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fec45865000)
+
+Vtable for std::range_error
+std::range_error::_ZTVSt11range_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt11range_error)
+16 (int (*)(...))std::range_error::~range_error
+24 (int (*)(...))std::range_error::~range_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::range_error
+ size=16 align=8
+ base size=16 base align=8
+std::range_error (0x0x7fec45865068) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+ std::runtime_error (0x0x7fec458650d0) 0
+ primary-for std::range_error (0x0x7fec45865068)
+ std::exception (0x0x7fec4581fba0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fec458650d0)
+
+Vtable for std::overflow_error
+std::overflow_error::_ZTVSt14overflow_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt14overflow_error)
+16 (int (*)(...))std::overflow_error::~overflow_error
+24 (int (*)(...))std::overflow_error::~overflow_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::overflow_error
+ size=16 align=8
+ base size=16 base align=8
+std::overflow_error (0x0x7fec45865138) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+ std::runtime_error (0x0x7fec458651a0) 0
+ primary-for std::overflow_error (0x0x7fec45865138)
+ std::exception (0x0x7fec4581fc00) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fec458651a0)
+
+Vtable for std::underflow_error
+std::underflow_error::_ZTVSt15underflow_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt15underflow_error)
+16 (int (*)(...))std::underflow_error::~underflow_error
+24 (int (*)(...))std::underflow_error::~underflow_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::underflow_error
+ size=16 align=8
+ base size=16 base align=8
+std::underflow_error (0x0x7fec45865208) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+ std::runtime_error (0x0x7fec45865270) 0
+ primary-for std::underflow_error (0x0x7fec45865208)
+ std::exception (0x0x7fec4581fc60) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fec45865270)
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7fec45896f60) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7fec458b7000) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7fec458b7180) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7fec458b7240) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7fec458654e0) 0
+ std::__uses_alloc_base (0x0x7fec458b71e0) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7fec45627840) 0 empty
+
+Vtable for std::bad_function_call
+std::bad_function_call::_ZTVSt17bad_function_call: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt17bad_function_call)
+16 (int (*)(...))std::bad_function_call::~bad_function_call
+24 (int (*)(...))std::bad_function_call::~bad_function_call
+32 (int (*)(...))std::bad_function_call::what
+
+Class std::bad_function_call
+ size=8 align=8
+ base size=8 base align=8
+std::bad_function_call (0x0x7fec456bb8f0) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+ std::exception (0x0x7fec456c9f00) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7fec456bb8f0)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7fec452fa000) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7fec452fa060) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7fec452fa360) 0
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7fec453cd1e0) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7fec453cd2a0) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7fec453cd780) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7fec453f6600) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7fec453f66c0) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7fec453f6720) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7fec453f6ae0) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7fec453f6c00) 0
+
+Class std::__detail::_Equality_base
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Equality_base (0x0x7fec451d7cc0) 0 empty
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7fec452115a0) 0 empty
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7fec45211f60) 0 empty
+
+Vtable for std::bad_optional_access
+std::bad_optional_access::_ZTVSt19bad_optional_access: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt19bad_optional_access)
+16 (int (*)(...))std::bad_optional_access::~bad_optional_access
+24 (int (*)(...))std::bad_optional_access::~bad_optional_access
+32 (int (*)(...))std::bad_optional_access::what
+
+Class std::bad_optional_access
+ size=8 align=8
+ base size=8 base align=8
+std::bad_optional_access (0x0x7fec4520a820) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+ std::exception (0x0x7fec452601e0) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7fec4520a820)
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7fec448f6b40) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7fec44bef340) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7fec4491d300) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7fec44bef410) 0
+ std::_Bit_iterator_base (0x0x7fec44bef478) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7fec4491d8a0) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7fec44bef548) 0
+ std::_Bit_iterator_base (0x0x7fec44bef5b0) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7fec44952060) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7fec4472f5a0) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7fec4472f720) 0 empty
+
+Class __pstl::execution::v1::parallel_unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_unsequenced_policy (0x0x7fec4472f8a0) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7fec4472fa20) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7fec448675a0) 0 empty
+
+Class std::__detail::__variant::__variant_idx_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_idx_cookie (0x0x7fec44867600) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7fec445430c0) 0 empty
+
+Vtable for std::bad_variant_access
+std::bad_variant_access::_ZTVSt18bad_variant_access: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt18bad_variant_access)
+16 (int (*)(...))std::bad_variant_access::~bad_variant_access
+24 (int (*)(...))std::bad_variant_access::~bad_variant_access
+32 (int (*)(...))std::bad_variant_access::what
+
+Class std::bad_variant_access
+ size=16 align=8
+ base size=16 base align=8
+std::bad_variant_access (0x0x7fec4486e958) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+ std::exception (0x0x7fec44566600) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7fec4486e958)
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7fec4462e060) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7fec4462e0c0) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7fec4462e360) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7fec4462eba0) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7fec4467dc60) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7fec44314f00) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7fec446b4c30) 0
+ std::__atomic_flag_base (0x0x7fec44314f60) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7fec44131f08) 0
+ QAtomicInteger<int> (0x0x7fec44131f70) 0
+ QBasicAtomicInteger<int> (0x0x7fec44292ea0) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7fec4373d180) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7fec4373d1e0) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7fec437fd4e0) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7fec437fdc00) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7fec437fdc60) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7fec437f83a8) 0
+ QGenericArgument (0x0x7fec437fdf00) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7fec43838420) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7fec43838480) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7fec438383c0) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7fec43838de0) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7fec438aa840) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7fec434d4240) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7fec43590d20) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7fec435b30c0) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7fec43646b40) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7fec43646c60) 0
+
+Vtable for std::locale::facet
+std::locale::facet::_ZTVNSt6locale5facetE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6locale5facetE)
+16 (int (*)(...))std::locale::facet::~facet
+24 (int (*)(...))std::locale::facet::~facet
+
+Class std::locale::facet
+ size=16 align=8
+ base size=12 base align=8
+std::locale::facet (0x0x7fec43686060) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7fec43686300) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7fec436864e0) 0
+
+Vtable for std::_V2::error_category
+std::_V2::error_category::_ZTVNSt3_V214error_categoryE: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt3_V214error_categoryE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))std::_V2::error_category::_M_message
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))std::_V2::error_category::default_error_condition
+64 (int (*)(...))std::_V2::error_category::equivalent
+72 (int (*)(...))std::_V2::error_category::equivalent
+
+Class std::_V2::error_category
+ size=8 align=8
+ base size=8 base align=8
+std::_V2::error_category (0x0x7fec432d8600) 0 nearly-empty
+ vptr=((& std::_V2::error_category::_ZTVNSt3_V214error_categoryE) + 16)
+
+Class std::error_code
+ size=16 align=8
+ base size=16 base align=8
+std::error_code (0x0x7fec432d8960) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7fec43313180) 0
+
+Vtable for std::system_error
+std::system_error::_ZTVSt12system_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12system_error)
+16 (int (*)(...))std::system_error::~system_error
+24 (int (*)(...))std::system_error::~system_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::system_error
+ size=32 align=8
+ base size=32 base align=8
+std::system_error (0x0x7fec43665888) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+ std::runtime_error (0x0x7fec436658f0) 0
+ primary-for std::system_error (0x0x7fec43665888)
+ std::exception (0x0x7fec43313d20) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fec436658f0)
+
+Vtable for std::ios_base::failure
+std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt8ios_base7failureB5cxx11E)
+16 (int (*)(...))std::ios_base::failure::~failure
+24 (int (*)(...))std::ios_base::failure::~failure
+32 (int (*)(...))std::ios_base::failure::what
+
+Class std::ios_base::failure
+ size=32 align=8
+ base size=32 base align=8
+std::ios_base::failure (0x0x7fec43665c30) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+ std::system_error (0x0x7fec43665c98) 0
+ primary-for std::ios_base::failure (0x0x7fec43665c30)
+ std::runtime_error (0x0x7fec43665d00) 0
+ primary-for std::system_error (0x0x7fec43665c98)
+ std::exception (0x0x7fec433724e0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fec43665d00)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7fec43372540) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7fec433725a0) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7fec43372600) 0 empty
+
+Vtable for std::ios_base
+std::ios_base::_ZTVSt8ios_base: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt8ios_base)
+16 (int (*)(...))std::ios_base::~ios_base
+24 (int (*)(...))std::ios_base::~ios_base
+
+Class std::ios_base
+ size=216 align=8
+ base size=216 base align=8
+std::ios_base (0x0x7fec43372480) 0
+ vptr=((& std::ios_base::_ZTVSt8ios_base) + 16)
+
+Class std::ctype_base
+ size=1 align=1
+ base size=0 base align=1
+std::ctype_base (0x0x7fec4342d240) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7fec430e5540) 0 empty
+
+VTT for std::basic_ostream<char>
+std::basic_ostream<char>::_ZTTSo: 2 entries
+0 ((& std::basic_ostream<char>::_ZTVSo) + 24)
+8 ((& std::basic_ostream<char>::_ZTVSo) + 64)
+
+VTT for std::basic_ostream<wchar_t>
+std::basic_ostream<wchar_t>::_ZTTSt13basic_ostreamIwSt11char_traitsIwEE: 2 entries
+0 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 64)
+
+VTT for std::basic_istream<char>
+std::basic_istream<char>::_ZTTSi: 2 entries
+0 ((& std::basic_istream<char>::_ZTVSi) + 24)
+8 ((& std::basic_istream<char>::_ZTVSi) + 64)
+
+VTT for std::basic_istream<wchar_t>
+std::basic_istream<wchar_t>::_ZTTSt13basic_istreamIwSt11char_traitsIwEE: 2 entries
+0 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 64)
+
+Construction vtable for std::basic_istream<char> (0x0x7fec4304b888 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd0_Si: 10 entries
+0 24
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISi)
+24 0
+32 0
+40 18446744073709551592
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISi)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<char> (0x0x7fec4304b958 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd16_So: 10 entries
+0 8
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISo)
+24 0
+32 0
+40 18446744073709551608
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISo)
+64 0
+72 0
+
+VTT for std::basic_iostream<char>
+std::basic_iostream<char>::_ZTTSd: 7 entries
+0 ((& std::basic_iostream<char>::_ZTVSd) + 24)
+8 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 24)
+16 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 64)
+24 ((& std::basic_iostream<char>::_ZTCSd16_So) + 24)
+32 ((& std::basic_iostream<char>::_ZTCSd16_So) + 64)
+40 ((& std::basic_iostream<char>::_ZTVSd) + 104)
+48 ((& std::basic_iostream<char>::_ZTVSd) + 64)
+
+Construction vtable for std::basic_istream<wchar_t> (0x0x7fec4304bea0 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E: 10 entries
+0 24
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551592
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<wchar_t> (0x0x7fec4304bf70 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E: 10 entries
+0 8
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551608
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+VTT for std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTTSt14basic_iostreamIwSt11char_traitsIwEE: 7 entries
+0 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 24)
+16 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 64)
+24 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 24)
+32 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 64)
+40 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 104)
+48 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 64)
+
+Vtable for __gnu_cxx::__concurrence_lock_error
+__gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx24__concurrence_lock_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error
+24 (int (*)(...))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error
+32 (int (*)(...))__gnu_cxx::__concurrence_lock_error::what
+
+Class __gnu_cxx::__concurrence_lock_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_lock_error (0x0x7fec430b93a8) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+ std::exception (0x0x7fec43099f00) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7fec430b93a8)
+
+Vtable for __gnu_cxx::__concurrence_unlock_error
+__gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx26__concurrence_unlock_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error
+24 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error
+32 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::what
+
+Class __gnu_cxx::__concurrence_unlock_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_unlock_error (0x0x7fec430b9410) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+ std::exception (0x0x7fec42cd8060) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7fec430b9410)
+
+Vtable for __gnu_cxx::__concurrence_broadcast_error
+__gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx29__concurrence_broadcast_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::~__concurrence_broadcast_error
+24 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::~__concurrence_broadcast_error
+32 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::what
+
+Class __gnu_cxx::__concurrence_broadcast_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_broadcast_error (0x0x7fec430b9478) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+ std::exception (0x0x7fec42cd8180) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7fec430b9478)
+
+Vtable for __gnu_cxx::__concurrence_wait_error
+__gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx24__concurrence_wait_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_wait_error::~__concurrence_wait_error
+24 (int (*)(...))__gnu_cxx::__concurrence_wait_error::~__concurrence_wait_error
+32 (int (*)(...))__gnu_cxx::__concurrence_wait_error::what
+
+Class __gnu_cxx::__concurrence_wait_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_wait_error (0x0x7fec430b9548) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+ std::exception (0x0x7fec42cd82a0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7fec430b9548)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7fec42cd8b40) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7fec42cd8ea0) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7fec42d07180) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7fec42d074e0) 0
+
+Vtable for std::bad_weak_ptr
+std::bad_weak_ptr::_ZTVSt12bad_weak_ptr: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12bad_weak_ptr)
+16 (int (*)(...))std::bad_weak_ptr::~bad_weak_ptr
+24 (int (*)(...))std::bad_weak_ptr::~bad_weak_ptr
+32 (int (*)(...))std::bad_weak_ptr::what
+
+Class std::bad_weak_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::bad_weak_ptr (0x0x7fec430b9680) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+ std::exception (0x0x7fec42d88cc0) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7fec430b9680)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7fec42df5a80) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7fec42e1f000) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7fec42b31de0) 0
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7fec42cc3180) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7fec429b82a0) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7fec42804660) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7fec42899600) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7fec42613540) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7fec42613960) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7fec426139c0) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7fec426a1720) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7fec42388900) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7fec423888a0) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7fec423d57e0) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7fec42140a80) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7fec3fd35d80) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7fec3fd3d478) 0
+ QtPrivate::ArgBase (0x0x7fec3fd35de0) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7fec3fd3d548) 0
+ QtPrivate::ArgBase (0x0x7fec3fd6a060) 0
+
+Class QHashSeed
+ size=8 align=8
+ base size=8 base align=8
+QHashSeed (0x0x7fec3fda38a0) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7fec3fddc840) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7fec3fddc900) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7fec3fbebde0) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7fec3fc1f480) 0 empty
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7fec3fcb5cc0) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7fec3fcb5f00) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7fec3f95da20) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7fec3fe5fd68) 0
+ QIODeviceBase (0x0x7fec3f95da80) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7fec3f95dc00) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7fec3fa911e0) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7fec3fa018f0) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7fec3fa912a0) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7fec3fa019c0) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7fec3fa91360) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7fec3f739e40) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7fec3fa01d68) 0
+ QMetaContainer (0x0x7fec3f74e060) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7fec3fa01dd0) 0
+ QMetaContainer (0x0x7fec3f74e420) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7fec3f856600) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7fec3f7e9e38) 0
+ std::__detail::_List_node_base (0x0x7fec3f856660) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7fec3f52c720) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7fec3f52ca80) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7fec3f39bf00) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7fec3f3c6120) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7fec3f476180) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7fec3ef60a20) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7fec3eb51d20) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7fec3eb7f0c0) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7fec3ebd9120) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7fec3ebd9240) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7fec3ec2a8a0) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7fec3ec2a840) 0 empty
+
+Class QPropertyProxyBindingData
+ size=24 align=8
+ base size=24 base align=8
+QPropertyProxyBindingData (0x0x7fec3ec2a900) 0
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7fec3ec2a960) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7fec3ec2aea0) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7fec3ec2af00) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7fec3ec51660) 0
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7fec3ec51d80) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7fec3ec7f0c0) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7fec3ec7f1e0) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7fec3ec7f420) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7fec3ec34888) 0
+ QPropertyObserverBase (0x0x7fec3ec7f5a0) 0
+
+Class QPropertyNotifier
+ size=56 align=8
+ base size=56 base align=8
+QPropertyNotifier (0x0x7fec3ec34bc8) 0
+ QPropertyObserver (0x0x7fec3ec34c30) 0
+ QPropertyObserverBase (0x0x7fec3ec7fa80) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7fec3e8fe960) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7fec3e920ae0) 0
+
+Class QBindingStatus
+ size=32 align=8
+ base size=32 base align=8
+QBindingStatus (0x0x7fec3ea39a20) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7fec3ea39a80) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7fec3e744840) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7fec3e7f35a0) 0 empty
+
+Vtable for QObjectData
+QObjectData::_ZTV11QObjectData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QObjectData)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+
+Class QObjectData
+ size=80 align=8
+ base size=80 base align=8
+QObjectData (0x0x7fec3e832f00) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7fec3e4e08a0) 0 empty
+
+Vtable for QObject
+QObject::_ZTV7QObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QObject)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QObject::qt_metacall
+40 (int (*)(...))QObject::~QObject
+48 (int (*)(...))QObject::~QObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QObject
+ size=16 align=8
+ base size=16 base align=8
+QObject (0x0x7fec3e4e0840) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7fec3e59f7e0) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7fec3e5cb0c0) 0 empty
+
+Vtable for QAbstractAnimation
+QAbstractAnimation::_ZTV18QAbstractAnimation: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractAnimation)
+16 (int (*)(...))QAbstractAnimation::metaObject
+24 (int (*)(...))QAbstractAnimation::qt_metacast
+32 (int (*)(...))QAbstractAnimation::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAbstractAnimation
+ size=16 align=8
+ base size=16 base align=8
+QAbstractAnimation (0x0x7fec3e5a30d0) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+ QObject (0x0x7fec3e5cb060) 0
+ primary-for QAbstractAnimation (0x0x7fec3e5a30d0)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7fec3e5cb420) 0 empty
+
+Vtable for QAnimationDriver
+QAnimationDriver::_ZTV16QAnimationDriver: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAnimationDriver)
+16 (int (*)(...))QAnimationDriver::metaObject
+24 (int (*)(...))QAnimationDriver::qt_metacast
+32 (int (*)(...))QAnimationDriver::qt_metacall
+40 (int (*)(...))QAnimationDriver::~QAnimationDriver
+48 (int (*)(...))QAnimationDriver::~QAnimationDriver
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAnimationDriver::advance
+120 (int (*)(...))QAnimationDriver::elapsed
+128 (int (*)(...))QAnimationDriver::start
+136 (int (*)(...))QAnimationDriver::stop
+
+Class QAnimationDriver
+ size=16 align=8
+ base size=16 base align=8
+QAnimationDriver (0x0x7fec3e5a3138) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+ QObject (0x0x7fec3e5cb3c0) 0
+ primary-for QAnimationDriver (0x0x7fec3e5a3138)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7fec3e5cb600) 0 empty
+
+Vtable for QEventLoop
+QEventLoop::_ZTV10QEventLoop: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QEventLoop)
+16 (int (*)(...))QEventLoop::metaObject
+24 (int (*)(...))QEventLoop::qt_metacast
+32 (int (*)(...))QEventLoop::qt_metacall
+40 (int (*)(...))QEventLoop::~QEventLoop
+48 (int (*)(...))QEventLoop::~QEventLoop
+56 (int (*)(...))QEventLoop::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QEventLoop
+ size=16 align=8
+ base size=16 base align=8
+QEventLoop (0x0x7fec3e5a31a0) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+ QObject (0x0x7fec3e5cb5a0) 0
+ primary-for QEventLoop (0x0x7fec3e5a31a0)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7fec3e5cbb40) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7fec3e5cbc00) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7fec3e5cbc60) 0
+
+Vtable for QAbstractEventDispatcher
+QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractEventDispatcher)
+16 (int (*)(...))QAbstractEventDispatcher::metaObject
+24 (int (*)(...))QAbstractEventDispatcher::qt_metacast
+32 (int (*)(...))QAbstractEventDispatcher::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))QAbstractEventDispatcher::startingUp
+200 (int (*)(...))QAbstractEventDispatcher::closingDown
+
+Class QAbstractEventDispatcher
+ size=16 align=8
+ base size=16 base align=8
+QAbstractEventDispatcher (0x0x7fec3e5a3340) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+ QObject (0x0x7fec3e5cbba0) 0
+ primary-for QAbstractEventDispatcher (0x0x7fec3e5a3340)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7fec3e66d420) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7fec3e15b060) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7fec3e15b000) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7fec3e15bc60) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7fec3e2d44e0) 0
+ QStringConverterBase (0x0x7fec3e15bc00) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7fec3e2d4548) 0
+ QStringConverter (0x0x7fec3e2d45b0) 0
+ QStringConverterBase (0x0x7fec3e1b9660) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7fec3e2d4618) 0
+ QStringConverter (0x0x7fec3e2d4680) 0
+ QStringConverterBase (0x0x7fec3e1d84e0) 0 empty
+
+Vtable for QTextStream
+QTextStream::_ZTV11QTextStream: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTextStream)
+16 (int (*)(...))QTextStream::~QTextStream
+24 (int (*)(...))QTextStream::~QTextStream
+
+Class QTextStream
+ size=16 align=8
+ base size=16 base align=8
+QTextStream (0x0x7fec3e2d46e8) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+ QIODeviceBase (0x0x7fec3e1ff1e0) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7fec3e1ff960) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7fec3dedeb40) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7fec3df341e0) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7fec3df34360) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7fec3dfe95a0) 0 empty
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7fec3e00b4e0) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7fec3dfc51a0) 0
+ QIODeviceBase (0x0x7fec3e00b480) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7fec3dd0de40) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7fec3dd0df00) 0 empty
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7fec3deb7b40) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7fec3deb7ba0) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7fec3deb7ae0) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7fec3dca4300) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7fec3dca4540) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7fec3dca4720) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7fec3d8e4660) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7fec3d92d660) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7fec3d97a840) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7fec3da0e120) 0 empty
+
+Vtable for QAbstractItemModel
+QAbstractItemModel::_ZTV18QAbstractItemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractItemModel)
+16 (int (*)(...))QAbstractItemModel::metaObject
+24 (int (*)(...))QAbstractItemModel::qt_metacast
+32 (int (*)(...))QAbstractItemModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractItemModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractItemModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractItemModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModel (0x0x7fec3d9f4f70) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+ QObject (0x0x7fec3da0e0c0) 0
+ primary-for QAbstractItemModel (0x0x7fec3d9f4f70)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7fec3d727ea0) 0 empty
+
+Vtable for QAbstractTableModel
+QAbstractTableModel::_ZTV19QAbstractTableModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractTableModel)
+16 (int (*)(...))QAbstractTableModel::metaObject
+24 (int (*)(...))QAbstractTableModel::qt_metacast
+32 (int (*)(...))QAbstractTableModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractTableModel::index
+120 (int (*)(...))QAbstractTableModel::parent
+128 (int (*)(...))QAbstractTableModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractTableModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractTableModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractTableModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractTableModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTableModel (0x0x7fec3da49820) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+ QAbstractItemModel (0x0x7fec3da49888) 0
+ primary-for QAbstractTableModel (0x0x7fec3da49820)
+ QObject (0x0x7fec3d727e40) 0
+ primary-for QAbstractItemModel (0x0x7fec3da49888)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7fec3d763000) 0 empty
+
+Vtable for QAbstractListModel
+QAbstractListModel::_ZTV18QAbstractListModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractListModel)
+16 (int (*)(...))QAbstractListModel::metaObject
+24 (int (*)(...))QAbstractListModel::qt_metacast
+32 (int (*)(...))QAbstractListModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QAbstractListModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractListModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractListModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractListModel (0x0x7fec3da498f0) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+ QAbstractItemModel (0x0x7fec3da49958) 0
+ primary-for QAbstractListModel (0x0x7fec3da498f0)
+ QObject (0x0x7fec3d727f60) 0
+ primary-for QAbstractItemModel (0x0x7fec3da49958)
+
+Vtable for QAbstractNativeEventFilter
+QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractNativeEventFilter)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractNativeEventFilter
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNativeEventFilter (0x0x7fec3d7a1840) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7fec3d7a1900) 0 empty
+
+Vtable for QAbstractProxyModel
+QAbstractProxyModel::_ZTV19QAbstractProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractProxyModel)
+16 (int (*)(...))QAbstractProxyModel::metaObject
+24 (int (*)(...))QAbstractProxyModel::qt_metacast
+32 (int (*)(...))QAbstractProxyModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractProxyModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QAbstractProxyModel::headerData
+184 (int (*)(...))QAbstractProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QAbstractProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QAbstractProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QAbstractProxyModel::setSourceModel
+416 (int (*)(...))__cxa_pure_virtual
+424 (int (*)(...))__cxa_pure_virtual
+432 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+440 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QAbstractProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractProxyModel (0x0x7fec3d796d68) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+ QAbstractItemModel (0x0x7fec3d796dd0) 0
+ primary-for QAbstractProxyModel (0x0x7fec3d796d68)
+ QObject (0x0x7fec3d7a18a0) 0
+ primary-for QAbstractItemModel (0x0x7fec3d796dd0)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7fec3d7a1ae0) 0 empty
+
+Vtable for QAnimationGroup
+QAnimationGroup::_ZTV15QAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAnimationGroup)
+16 (int (*)(...))QAnimationGroup::metaObject
+24 (int (*)(...))QAnimationGroup::qt_metacast
+32 (int (*)(...))QAnimationGroup::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QAnimationGroup (0x0x7fec3d796e38) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+ QAbstractAnimation (0x0x7fec3d796ea0) 0
+ primary-for QAnimationGroup (0x0x7fec3d796e38)
+ QObject (0x0x7fec3d7a1a80) 0
+ primary-for QAbstractAnimation (0x0x7fec3d796ea0)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7fec3d796f08) 0
+ QIterator<QMetaAssociation> (0x0x7fec3d81c000) 0
+ QBaseIterator<QMetaAssociation> (0x0x7fec3d7a1f00) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7fec3d81c138) 0
+ QConstIterator<QMetaAssociation> (0x0x7fec3d81c1a0) 0
+ QBaseIterator<QMetaAssociation> (0x0x7fec3d826480) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7fec3d81c270) 0
+ QIterable<QMetaAssociation> (0x0x7fec3d8269c0) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7fec3d5284e0) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7fec3d589240) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7fec3d5b8180) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7fec3d5e1cc0) 0 empty
+
+Vtable for QIODevice
+QIODevice::_ZTV9QIODevice: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QIODevice)
+16 (int (*)(...))QIODevice::metaObject
+24 (int (*)(...))QIODevice::qt_metacast
+32 (int (*)(...))QIODevice::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIODevice::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QIODevice::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))__cxa_pure_virtual
+
+Class QIODevice
+ size=16 align=8
+ base size=16 base align=8
+QIODevice (0x0x7fec3d5f4070) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+ QObject (0x0x7fec3d5e1c00) 0
+ primary-for QIODevice (0x0x7fec3d5f4070)
+ QIODeviceBase (0x0x7fec3d5e1c60) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7fec3d629120) 0 empty
+
+Vtable for QBuffer
+QBuffer::_ZTV7QBuffer: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QBuffer)
+16 (int (*)(...))QBuffer::metaObject
+24 (int (*)(...))QBuffer::qt_metacast
+32 (int (*)(...))QBuffer::qt_metacall
+40 (int (*)(...))QBuffer::~QBuffer
+48 (int (*)(...))QBuffer::~QBuffer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QBuffer::connectNotify
+104 (int (*)(...))QBuffer::disconnectNotify
+112 (int (*)(...))QIODevice::isSequential
+120 (int (*)(...))QBuffer::open
+128 (int (*)(...))QBuffer::close
+136 (int (*)(...))QBuffer::pos
+144 (int (*)(...))QBuffer::size
+152 (int (*)(...))QBuffer::seek
+160 (int (*)(...))QBuffer::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QBuffer::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QBuffer::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QBuffer::writeData
+
+Class QBuffer
+ size=16 align=8
+ base size=16 base align=8
+QBuffer (0x0x7fec3d5f2208) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+ QIODevice (0x0x7fec3d5f40e0) 0
+ primary-for QBuffer (0x0x7fec3d5f2208)
+ QObject (0x0x7fec3d629060) 0
+ primary-for QIODevice (0x0x7fec3d5f40e0)
+ QIODeviceBase (0x0x7fec3d6290c0) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7fec3d629360) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7fec3d629300) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7fec3d6294e0) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7fec3d629480) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7fec3d68ecc0) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7fec3d3a8b40) 0
+
+Class QCalendar::SystemId
+ size=8 align=8
+ base size=8 base align=8
+QCalendar::SystemId (0x0x7fec3d3a8ba0) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7fec3d3a8ae0) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7fec3d404600) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7fec3d456c00) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7fec3d4a6e40) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7fec3d4a6ea0) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7fec3d4a6de0) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7fec3d14b120) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7fec3d1824e0) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7fec3d236720) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7fec3d2a9ea0) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7fec3d2a9f60) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7fec3cee7120) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7fec3cf56360) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7fec3d029f60) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7fec3d0c8120) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7fec3d0c81e0) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7fec3cde9a80) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7fec3ce43000) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7fec3ce43060) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7fec3ce1ff60) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7fec3cb32600) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7fec3cb32660) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7fec3cb325a0) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7fec3c9426c0) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7fec3c942660) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7fec3ca34a80) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7fec3ca88f00) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7fec3cabc960) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7fec3cabcb40) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7fec3c7805a0) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7fec3c7ecf00) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7fec3c7ecf60) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7fec3c845000) 0 empty
+
+Vtable for QEvent
+QEvent::_ZTV6QEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QEvent)
+16 (int (*)(...))QEvent::~QEvent
+24 (int (*)(...))QEvent::~QEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QEvent
+ size=16 align=8
+ base size=16 base align=8
+QEvent (0x0x7fec3c7ecea0) 0
+ vptr=((& QEvent::_ZTV6QEvent) + 16)
+
+Vtable for QTimerEvent
+QTimerEvent::_ZTV11QTimerEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTimerEvent)
+16 (int (*)(...))QTimerEvent::~QTimerEvent
+24 (int (*)(...))QTimerEvent::~QTimerEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QTimerEvent::clone
+
+Class QTimerEvent
+ size=24 align=8
+ base size=20 base align=8
+QTimerEvent (0x0x7fec3c7f5680) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+ QEvent (0x0x7fec3c845960) 0
+ primary-for QTimerEvent (0x0x7fec3c7f5680)
+
+Vtable for QChildEvent
+QChildEvent::_ZTV11QChildEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QChildEvent)
+16 (int (*)(...))QChildEvent::~QChildEvent
+24 (int (*)(...))QChildEvent::~QChildEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QChildEvent::clone
+
+Class QChildEvent
+ size=24 align=8
+ base size=24 base align=8
+QChildEvent (0x0x7fec3c7f56e8) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+ QEvent (0x0x7fec3c845e40) 0
+ primary-for QChildEvent (0x0x7fec3c7f56e8)
+
+Vtable for QDynamicPropertyChangeEvent
+QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDynamicPropertyChangeEvent)
+16 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+24 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDynamicPropertyChangeEvent::clone
+
+Class QDynamicPropertyChangeEvent
+ size=40 align=8
+ base size=40 base align=8
+QDynamicPropertyChangeEvent (0x0x7fec3c7f5750) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+ QEvent (0x0x7fec3c87d2a0) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7fec3c7f5750)
+
+Vtable for QDeferredDeleteEvent
+QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDeferredDeleteEvent)
+16 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+24 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDeferredDeleteEvent::clone
+
+Class QDeferredDeleteEvent
+ size=24 align=8
+ base size=20 base align=8
+QDeferredDeleteEvent (0x0x7fec3c7f57b8) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+ QEvent (0x0x7fec3c87d540) 0
+ primary-for QDeferredDeleteEvent (0x0x7fec3c7f57b8)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7fec3c87d900) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7fec3c7f5888) 0
+ QBasicMutex (0x0x7fec3c4f2660) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7fec3c4f2a80) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7fec3c55f0c0) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7fec3c55f6c0) 0
+
+Vtable for QtPrivate::ResultStoreBase
+QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9QtPrivate15ResultStoreBaseE)
+16 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+24 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+
+Class QtPrivate::ResultStoreBase
+ size=48 align=8
+ base size=44 base align=8
+QtPrivate::ResultStoreBase (0x0x7fec3c5ed360) 0
+ vptr=((& QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE) + 16)
+
+Vtable for QFutureInterfaceBase
+QFutureInterfaceBase::_ZTV20QFutureInterfaceBase: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QFutureInterfaceBase)
+16 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+24 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+
+Class QFutureInterfaceBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureInterfaceBase (0x0x7fec3c2cdd80) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7fec3c2fdf00) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7fec3c342240) 0
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7fec3c47a600) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7fec3c482b60) 0
+ std::__mutex_base (0x0x7fec3c47a660) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7fec3c47a840) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7fec3c47a8a0) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7fec3c47a900) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7fec3c4b7360) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7fec3c482bc8) 0
+ std::__recursive_mutex_base (0x0x7fec3c4b73c0) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7fec3c38ce00) 0
+ std::__mutex_base (0x0x7fec3c4b7780) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7fec3c4b77e0) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7fec3c38ce70) 0
+ std::__recursive_mutex_base (0x0x7fec3c4b7ba0) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7fec3c4b7c00) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7fec3c0f2a20) 0
+
+Vtable for std::thread::_State
+std::thread::_State::_ZTVNSt6thread6_StateE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6thread6_StateE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class std::thread::_State
+ size=8 align=8
+ base size=8 base align=8
+std::thread::_State (0x0x7fec3c0f2cc0) 0 nearly-empty
+ vptr=((& std::thread::_State::_ZTVNSt6thread6_StateE) + 16)
+
+Class std::thread::id
+ size=8 align=8
+ base size=8 base align=8
+std::thread::id (0x0x7fec3c0f2d20) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7fec3c0f2c60) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7fec3bedaf60) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7fec3bf14360) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7fec3bf143c0) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7fec3bfc7900) 0 empty
+
+Vtable for std::future_error
+std::future_error::_ZTVSt12future_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12future_error)
+16 (int (*)(...))std::future_error::~future_error
+24 (int (*)(...))std::future_error::~future_error
+32 (int (*)(...))std::future_error::what
+
+Class std::future_error
+ size=32 align=8
+ base size=32 base align=8
+std::future_error (0x0x7fec3bf749c0) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+ std::logic_error (0x0x7fec3bf74a28) 0
+ primary-for std::future_error (0x0x7fec3bf749c0)
+ std::exception (0x0x7fec3bff0060) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fec3bf74a28)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7fec3bff0780) 0 empty
+
+Vtable for std::__future_base::_Result_base
+std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base12_Result_baseE)
+16 (int (*)(...))__cxa_pure_virtual
+24 0
+32 0
+
+Class std::__future_base::_Result_base
+ size=16 align=8
+ base size=16 base align=8
+std::__future_base::_Result_base (0x0x7fec3bff0720) 0
+ vptr=((& std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE) + 16)
+
+Class std::__future_base::_State_baseV2::__exception_ptr_tag
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_State_baseV2::__exception_ptr_tag (0x0x7fec3bd681e0) 0 empty
+
+Class std::__future_base::_State_baseV2::_Make_ready
+ size=32 align=8
+ base size=32 base align=8
+std::__future_base::_State_baseV2::_Make_ready (0x0x7fec3bd5b208) 0
+ std::__at_thread_exit_elt (0x0x7fec3bd682a0) 0
+
+Vtable for std::__future_base::_State_baseV2
+std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base13_State_baseV2E)
+16 (int (*)(...))std::__future_base::_State_baseV2::~_State_baseV2
+24 (int (*)(...))std::__future_base::_State_baseV2::~_State_baseV2
+32 (int (*)(...))std::__future_base::_State_baseV2::_M_complete_async
+40 (int (*)(...))std::__future_base::_State_baseV2::_M_is_deferred_future
+
+Class std::__future_base::_State_baseV2
+ size=32 align=8
+ base size=28 base align=8
+std::__future_base::_State_baseV2 (0x0x7fec3bff0900) 0
+ vptr=((& std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E) + 16)
+
+Class std::__future_base
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base (0x0x7fec3bff06c0) 0 empty
+
+Vtable for std::__future_base::_Async_state_commonV2
+std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base21_Async_state_commonV2E)
+16 (int (*)(...))std::__future_base::_Async_state_commonV2::~_Async_state_commonV2
+24 (int (*)(...))std::__future_base::_Async_state_commonV2::~_Async_state_commonV2
+32 (int (*)(...))std::__future_base::_Async_state_commonV2::_M_complete_async
+40 (int (*)(...))std::__future_base::_State_baseV2::_M_is_deferred_future
+
+Class std::__future_base::_Async_state_commonV2
+ size=48 align=8
+ base size=44 base align=8
+std::__future_base::_Async_state_commonV2 (0x0x7fec3ba12618) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+ std::__future_base::_State_baseV2 (0x0x7fec3ba2bf60) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7fec3ba12618)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7fec3ba65840) 0 empty
+
+Vtable for QThread
+QThread::_ZTV7QThread: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QThread)
+16 (int (*)(...))QThread::metaObject
+24 (int (*)(...))QThread::qt_metacast
+32 (int (*)(...))QThread::qt_metacall
+40 (int (*)(...))QThread::~QThread
+48 (int (*)(...))QThread::~QThread
+56 (int (*)(...))QThread::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QThread::run
+
+Class QThread
+ size=16 align=8
+ base size=16 base align=8
+QThread (0x0x7fec3ba12958) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+ QObject (0x0x7fec3ba657e0) 0
+ primary-for QThread (0x0x7fec3ba12958)
+
+Vtable for QRunnable
+QRunnable::_ZTV9QRunnable: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QRunnable)
+16 (int (*)(...))__cxa_pure_virtual
+24 0
+32 0
+
+Class QRunnable
+ size=16 align=8
+ base size=9 base align=8
+QRunnable (0x0x7fec3ba65ba0) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7fec3ba65d20) 0 empty
+
+Vtable for QThreadPool
+QThreadPool::_ZTV11QThreadPool: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QThreadPool)
+16 (int (*)(...))QThreadPool::metaObject
+24 (int (*)(...))QThreadPool::qt_metacast
+32 (int (*)(...))QThreadPool::qt_metacall
+40 (int (*)(...))QThreadPool::~QThreadPool
+48 (int (*)(...))QThreadPool::~QThreadPool
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QThreadPool
+ size=16 align=8
+ base size=16 base align=8
+QThreadPool (0x0x7fec3ba129c0) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+ QObject (0x0x7fec3ba65cc0) 0
+ primary-for QThreadPool (0x0x7fec3ba129c0)
+
+Vtable for QException
+QException::_ZTV10QException: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QException)
+16 (int (*)(...))QException::~QException
+24 (int (*)(...))QException::~QException
+32 (int (*)(...))std::exception::what
+40 (int (*)(...))QException::raise
+48 (int (*)(...))QException::clone
+
+Class QException
+ size=8 align=8
+ base size=8 base align=8
+QException (0x0x7fec3ba12a28) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+ std::exception (0x0x7fec3ba65ea0) 0 nearly-empty
+ primary-for QException (0x0x7fec3ba12a28)
+
+Vtable for QUnhandledException
+QUnhandledException::_ZTV19QUnhandledException: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QUnhandledException)
+16 (int (*)(...))QUnhandledException::~QUnhandledException
+24 (int (*)(...))QUnhandledException::~QUnhandledException
+32 (int (*)(...))std::exception::what
+40 (int (*)(...))QUnhandledException::raise
+48 (int (*)(...))QUnhandledException::clone
+
+Class QUnhandledException
+ size=16 align=8
+ base size=16 base align=8
+QUnhandledException (0x0x7fec3ba12a90) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+ QException (0x0x7fec3ba12af8) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7fec3ba12a90)
+ std::exception (0x0x7fec3ba65f00) 0 nearly-empty
+ primary-for QException (0x0x7fec3ba12af8)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7fec3b6d0d80) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7fec3b503480) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7fec3b503420) 0
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7fec3b5276c0) 0 empty
+
+Vtable for QCoreApplication
+QCoreApplication::_ZTV16QCoreApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QCoreApplication)
+16 (int (*)(...))QCoreApplication::metaObject
+24 (int (*)(...))QCoreApplication::qt_metacast
+32 (int (*)(...))QCoreApplication::qt_metacall
+40 (int (*)(...))QCoreApplication::~QCoreApplication
+48 (int (*)(...))QCoreApplication::~QCoreApplication
+56 (int (*)(...))QCoreApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCoreApplication::notify
+120 (int (*)(...))QCoreApplication::compressEvent
+
+Class QCoreApplication
+ size=16 align=8
+ base size=16 base align=8
+QCoreApplication (0x0x7fec3b51f6e8) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+ QObject (0x0x7fec3b527660) 0
+ primary-for QCoreApplication (0x0x7fec3b51f6e8)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7fec3b527900) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7fec3b527a20) 0 empty
+
+Vtable for QConcatenateTablesProxyModel
+QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QConcatenateTablesProxyModel)
+16 (int (*)(...))QConcatenateTablesProxyModel::metaObject
+24 (int (*)(...))QConcatenateTablesProxyModel::qt_metacast
+32 (int (*)(...))QConcatenateTablesProxyModel::qt_metacall
+40 (int (*)(...))QConcatenateTablesProxyModel::~QConcatenateTablesProxyModel
+48 (int (*)(...))QConcatenateTablesProxyModel::~QConcatenateTablesProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QConcatenateTablesProxyModel::index
+120 (int (*)(...))QConcatenateTablesProxyModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QConcatenateTablesProxyModel::rowCount
+144 (int (*)(...))QConcatenateTablesProxyModel::columnCount
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))QConcatenateTablesProxyModel::data
+168 (int (*)(...))QConcatenateTablesProxyModel::setData
+176 (int (*)(...))QConcatenateTablesProxyModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QConcatenateTablesProxyModel::itemData
+200 (int (*)(...))QConcatenateTablesProxyModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QConcatenateTablesProxyModel::mimeTypes
+224 (int (*)(...))QConcatenateTablesProxyModel::mimeData
+232 (int (*)(...))QConcatenateTablesProxyModel::canDropMimeData
+240 (int (*)(...))QConcatenateTablesProxyModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QConcatenateTablesProxyModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QConcatenateTablesProxyModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QConcatenateTablesProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QConcatenateTablesProxyModel (0x0x7fec3b51f750) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+ QAbstractItemModel (0x0x7fec3b51f7b8) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7fec3b51f750)
+ QObject (0x0x7fec3b5279c0) 0
+ primary-for QAbstractItemModel (0x0x7fec3b51f7b8)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7fec3b527ba0) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7fec3b527d80) 0 empty
+
+Vtable for QFileDevice
+QFileDevice::_ZTV11QFileDevice: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFileDevice)
+16 (int (*)(...))QFileDevice::metaObject
+24 (int (*)(...))QFileDevice::qt_metacast
+32 (int (*)(...))QFileDevice::qt_metacall
+40 (int (*)(...))QFileDevice::~QFileDevice
+48 (int (*)(...))QFileDevice::~QFileDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFileDevice::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QFileDevice::fileName
+256 (int (*)(...))QFileDevice::resize
+264 (int (*)(...))QFileDevice::permissions
+272 (int (*)(...))QFileDevice::setPermissions
+
+Class QFileDevice
+ size=16 align=8
+ base size=16 base align=8
+QFileDevice (0x0x7fec3b51f820) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+ QIODevice (0x0x7fec3b578d20) 0
+ primary-for QFileDevice (0x0x7fec3b51f820)
+ QObject (0x0x7fec3b527cc0) 0
+ primary-for QIODevice (0x0x7fec3b578d20)
+ QIODeviceBase (0x0x7fec3b527d20) 0 empty
+
+Class std::filesystem::space_info
+ size=24 align=8
+ base size=24 base align=8
+std::filesystem::space_info (0x0x7fec3b5d4a80) 0
+
+Class std::filesystem::__file_clock
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__file_clock (0x0x7fec3b686060) 0 empty
+
+Class std::time_base
+ size=1 align=1
+ base size=0 base align=1
+std::time_base (0x0x7fec3b6864e0) 0 empty
+
+Class std::money_base::pattern
+ size=4 align=1
+ base size=4 base align=1
+std::money_base::pattern (0x0x7fec3b2ef7e0) 0
+
+Class std::money_base
+ size=1 align=1
+ base size=0 base align=1
+std::money_base (0x0x7fec3b2ef780) 0 empty
+
+Class std::messages_base
+ size=1 align=1
+ base size=0 base align=1
+std::messages_base (0x0x7fec3b315d80) 0 empty
+
+Class std::codecvt_base
+ size=1 align=1
+ base size=0 base align=1
+std::codecvt_base (0x0x7fec3b367900) 0 empty
+
+Construction vtable for std::basic_istream<char> (0x0x7fec3b1c7a90 instance) in std::__cxx11::basic_istringstream<char>
+std::__cxx11::basic_istringstream<char>::_ZTCNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE0_Si: 10 entries
+0 120
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISi)
+24 0
+32 0
+40 18446744073709551496
+48 (int (*)(...))-120
+56 (int (*)(...))(& _ZTISi)
+64 0
+72 0
+
+VTT for std::__cxx11::basic_istringstream<char>
+std::__cxx11::basic_istringstream<char>::_ZTTNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE: 4 entries
+0 ((& std::__cxx11::basic_istringstream<char>::_ZTVNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE) + 24)
+8 ((& std::__cxx11::basic_istringstream<char>::_ZTCNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE0_Si) + 24)
+16 ((& std::__cxx11::basic_istringstream<char>::_ZTCNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE0_Si) + 64)
+24 ((& std::__cxx11::basic_istringstream<char>::_ZTVNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE) + 64)
+
+Construction vtable for std::basic_ostream<char> (0x0x7fec3b1c7d00 instance) in std::__cxx11::basic_ostringstream<char>
+std::__cxx11::basic_ostringstream<char>::_ZTCNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE0_So: 10 entries
+0 112
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISo)
+24 0
+32 0
+40 18446744073709551504
+48 (int (*)(...))-112
+56 (int (*)(...))(& _ZTISo)
+64 0
+72 0
+
+VTT for std::__cxx11::basic_ostringstream<char>
+std::__cxx11::basic_ostringstream<char>::_ZTTNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE: 4 entries
+0 ((& std::__cxx11::basic_ostringstream<char>::_ZTVNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE) + 24)
+8 ((& std::__cxx11::basic_ostringstream<char>::_ZTCNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE0_So) + 24)
+16 ((& std::__cxx11::basic_ostringstream<char>::_ZTCNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE0_So) + 64)
+24 ((& std::__cxx11::basic_ostringstream<char>::_ZTVNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE) + 64)
+
+Construction vtable for std::basic_iostream<char> (0x0x7fec3b4c6e00 instance) in std::__cxx11::basic_stringstream<char>
+std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Sd: 15 entries
+0 128
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISd)
+24 0
+32 0
+40 112
+48 (int (*)(...))-16
+56 (int (*)(...))(& _ZTISd)
+64 0
+72 0
+80 18446744073709551488
+88 (int (*)(...))-128
+96 (int (*)(...))(& _ZTISd)
+104 0
+112 0
+
+Construction vtable for std::basic_istream<char> (0x0x7fec3b1c7f70 instance) in std::__cxx11::basic_stringstream<char>
+std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Si: 10 entries
+0 128
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISi)
+24 0
+32 0
+40 18446744073709551488
+48 (int (*)(...))-128
+56 (int (*)(...))(& _ZTISi)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<char> (0x0x7fec3b1c7c30 instance) in std::__cxx11::basic_stringstream<char>
+std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE16_So: 10 entries
+0 112
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISo)
+24 0
+32 0
+40 18446744073709551504
+48 (int (*)(...))-112
+56 (int (*)(...))(& _ZTISo)
+64 0
+72 0
+
+VTT for std::__cxx11::basic_stringstream<char>
+std::__cxx11::basic_stringstream<char>::_ZTTNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE: 10 entries
+0 ((& std::__cxx11::basic_stringstream<char>::_ZTVNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE) + 24)
+8 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Sd) + 24)
+16 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Si) + 24)
+24 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Si) + 64)
+32 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE16_So) + 24)
+40 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE16_So) + 64)
+48 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Sd) + 104)
+56 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Sd) + 64)
+64 ((& std::__cxx11::basic_stringstream<char>::_ZTVNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE) + 104)
+72 ((& std::__cxx11::basic_stringstream<char>::_ZTVNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE) + 64)
+
+Construction vtable for std::basic_istream<wchar_t> (0x0x7fec3b25b340 instance) in std::__cxx11::basic_istringstream<wchar_t>
+std::__cxx11::basic_istringstream<wchar_t>::_ZTCNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_istreamIwS2_E: 10 entries
+0 120
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551496
+48 (int (*)(...))-120
+56 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+VTT for std::__cxx11::basic_istringstream<wchar_t>
+std::__cxx11::basic_istringstream<wchar_t>::_ZTTNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEE: 4 entries
+0 ((& std::__cxx11::basic_istringstream<wchar_t>::_ZTVNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEE) + 24)
+8 ((& std::__cxx11::basic_istringstream<wchar_t>::_ZTCNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_istreamIwS2_E) + 24)
+16 ((& std::__cxx11::basic_istringstream<wchar_t>::_ZTCNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_istreamIwS2_E) + 64)
+24 ((& std::__cxx11::basic_istringstream<wchar_t>::_ZTVNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEE) + 64)
+
+Construction vtable for std::basic_ostream<wchar_t> (0x0x7fec3b25b5b0 instance) in std::__cxx11::basic_ostringstream<wchar_t>
+std::__cxx11::basic_ostringstream<wchar_t>::_ZTCNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_ostreamIwS2_E: 10 entries
+0 112
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551504
+48 (int (*)(...))-112
+56 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+VTT for std::__cxx11::basic_ostringstream<wchar_t>
+std::__cxx11::basic_ostringstream<wchar_t>::_ZTTNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEE: 4 entries
+0 ((& std::__cxx11::basic_ostringstream<wchar_t>::_ZTVNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEE) + 24)
+8 ((& std::__cxx11::basic_ostringstream<wchar_t>::_ZTCNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_ostreamIwS2_E) + 24)
+16 ((& std::__cxx11::basic_ostringstream<wchar_t>::_ZTCNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_ostreamIwS2_E) + 64)
+24 ((& std::__cxx11::basic_ostringstream<wchar_t>::_ZTVNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEE) + 64)
+
+Construction vtable for std::basic_iostream<wchar_t> (0x0x7fec3b27e1c0 instance) in std::__cxx11::basic_stringstream<wchar_t>
+std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St14basic_iostreamIwS2_E: 15 entries
+0 128
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt14basic_iostreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 112
+48 (int (*)(...))-16
+56 (int (*)(...))(& _ZTISt14basic_iostreamIwSt11char_traitsIwEE)
+64 0
+72 0
+80 18446744073709551488
+88 (int (*)(...))-128
+96 (int (*)(...))(& _ZTISt14basic_iostreamIwSt11char_traitsIwEE)
+104 0
+112 0
+
+Construction vtable for std::basic_istream<wchar_t> (0x0x7fec3b25b820 instance) in std::__cxx11::basic_stringstream<wchar_t>
+std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_istreamIwS2_E: 10 entries
+0 128
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551488
+48 (int (*)(...))-128
+56 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<wchar_t> (0x0x7fec3b25b8f0 instance) in std::__cxx11::basic_stringstream<wchar_t>
+std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE16_St13basic_ostreamIwS2_E: 10 entries
+0 112
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551504
+48 (int (*)(...))-112
+56 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+VTT for std::__cxx11::basic_stringstream<wchar_t>
+std::__cxx11::basic_stringstream<wchar_t>::_ZTTNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE: 10 entries
+0 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTVNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE) + 24)
+8 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St14basic_iostreamIwS2_E) + 24)
+16 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_istreamIwS2_E) + 24)
+24 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_istreamIwS2_E) + 64)
+32 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE16_St13basic_ostreamIwS2_E) + 24)
+40 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE16_St13basic_ostreamIwS2_E) + 64)
+48 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St14basic_iostreamIwS2_E) + 104)
+56 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St14basic_iostreamIwS2_E) + 64)
+64 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTVNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE) + 104)
+72 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTVNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE) + 64)
+
+Class std::_Resetiosflags
+ size=4 align=4
+ base size=4 base align=4
+std::_Resetiosflags (0x0x7fec3b2a5180) 0
+
+Class std::_Setiosflags
+ size=4 align=4
+ base size=4 base align=4
+std::_Setiosflags (0x0x7fec3b2a5300) 0
+
+Class std::_Setbase
+ size=4 align=4
+ base size=4 base align=4
+std::_Setbase (0x0x7fec3b2a5480) 0
+
+Class std::_Setprecision
+ size=4 align=4
+ base size=4 base align=4
+std::_Setprecision (0x0x7fec3b2a5780) 0
+
+Class std::_Setw
+ size=4 align=4
+ base size=4 base align=4
+std::_Setw (0x0x7fec3b2a5900) 0
+
+Class std::filesystem::__cxx11::path::__null_terminated
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__cxx11::path::__null_terminated (0x0x7fec3af689c0) 0 empty
+
+Class std::filesystem::__cxx11::path::_List::_Impl_deleter
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__cxx11::path::_List::_Impl_deleter (0x0x7fec3af68a80) 0 empty
+
+Class std::filesystem::__cxx11::path::_List
+ size=8 align=8
+ base size=8 base align=8
+std::filesystem::__cxx11::path::_List (0x0x7fec3af68a20) 0
+
+Class std::filesystem::__cxx11::path
+ size=40 align=8
+ base size=40 base align=8
+std::filesystem::__cxx11::path (0x0x7fec3af688a0) 0
+
+Vtable for std::filesystem::__cxx11::filesystem_error
+std::filesystem::__cxx11::filesystem_error::_ZTVNSt10filesystem7__cxx1116filesystem_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt10filesystem7__cxx1116filesystem_errorE)
+16 (int (*)(...))std::filesystem::__cxx11::filesystem_error::~filesystem_error
+24 (int (*)(...))std::filesystem::__cxx11::filesystem_error::~filesystem_error
+32 (int (*)(...))std::filesystem::__cxx11::filesystem_error::what
+
+Class std::filesystem::__cxx11::filesystem_error
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::filesystem_error (0x0x7fec3adde5b0) 0
+ vptr=((& std::filesystem::__cxx11::filesystem_error::_ZTVNSt10filesystem7__cxx1116filesystem_errorE) + 16)
+ std::system_error (0x0x7fec3adde618) 0
+ primary-for std::filesystem::__cxx11::filesystem_error (0x0x7fec3adde5b0)
+ std::runtime_error (0x0x7fec3adde680) 0
+ primary-for std::system_error (0x0x7fec3adde618)
+ std::exception (0x0x7fec3ade0960) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fec3adde680)
+
+Class std::filesystem::__cxx11::path::_Cmpt
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::path::_Cmpt (0x0x7fec3ae4b000) 0
+ std::filesystem::__cxx11::path (0x0x7fec3ae3a420) 0
+
+Class std::filesystem::__cxx11::path::iterator
+ size=24 align=8
+ base size=17 base align=8
+std::filesystem::__cxx11::path::iterator (0x0x7fec3ae636c0) 0
+
+Class std::filesystem::file_status
+ size=8 align=4
+ base size=8 base align=4
+std::filesystem::file_status (0x0x7fec3ab14ea0) 0
+
+Class std::filesystem::__cxx11::directory_entry
+ size=48 align=8
+ base size=41 base align=8
+std::filesystem::__cxx11::directory_entry (0x0x7fec3ab633c0) 0
+
+Class std::filesystem::__cxx11::__directory_iterator_proxy
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::__directory_iterator_proxy (0x0x7fec3aba3a80) 0
+
+Class std::filesystem::__cxx11::directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::directory_iterator (0x0x7fec3abd5240) 0
+
+Class std::filesystem::__cxx11::recursive_directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::recursive_directory_iterator (0x0x7fec3ac4d360) 0
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7fec3a91f4e0) 0 empty
+
+Vtable for QFile
+QFile::_ZTV5QFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QFile)
+16 (int (*)(...))QFile::metaObject
+24 (int (*)(...))QFile::qt_metacast
+32 (int (*)(...))QFile::qt_metacall
+40 (int (*)(...))QFile::~QFile
+48 (int (*)(...))QFile::~QFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QFile::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFile::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QFile::fileName
+256 (int (*)(...))QFile::resize
+264 (int (*)(...))QFile::permissions
+272 (int (*)(...))QFile::setPermissions
+
+Class QFile
+ size=16 align=8
+ base size=16 base align=8
+QFile (0x0x7fec3a920a90) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+ QFileDevice (0x0x7fec3a920af8) 0
+ primary-for QFile (0x0x7fec3a920a90)
+ QIODevice (0x0x7fec3ab214d0) 0
+ primary-for QFileDevice (0x0x7fec3a920af8)
+ QObject (0x0x7fec3a91f420) 0
+ primary-for QIODevice (0x0x7fec3ab214d0)
+ QIODeviceBase (0x0x7fec3a91f480) 0 empty
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7fec3a91fae0) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7fec3a9fd480) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7fec3aac9ba0) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7fec3a756060) 0
+
+Vtable for QFactoryInterface
+QFactoryInterface::_ZTV17QFactoryInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFactoryInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QFactoryInterface
+ size=8 align=8
+ base size=8 base align=8
+QFactoryInterface (0x0x7fec3a7f77e0) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7fec3a7f7a20) 0 empty
+
+Vtable for QFileSelector
+QFileSelector::_ZTV13QFileSelector: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QFileSelector)
+16 (int (*)(...))QFileSelector::metaObject
+24 (int (*)(...))QFileSelector::qt_metacast
+32 (int (*)(...))QFileSelector::qt_metacall
+40 (int (*)(...))QFileSelector::~QFileSelector
+48 (int (*)(...))QFileSelector::~QFileSelector
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSelector
+ size=16 align=8
+ base size=16 base align=8
+QFileSelector (0x0x7fec3a7bdc98) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+ QObject (0x0x7fec3a7f79c0) 0
+ primary-for QFileSelector (0x0x7fec3a7bdc98)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7fec3a7f7c00) 0 empty
+
+Vtable for QFileSystemWatcher
+QFileSystemWatcher::_ZTV18QFileSystemWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFileSystemWatcher)
+16 (int (*)(...))QFileSystemWatcher::metaObject
+24 (int (*)(...))QFileSystemWatcher::qt_metacast
+32 (int (*)(...))QFileSystemWatcher::qt_metacall
+40 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+48 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSystemWatcher
+ size=16 align=8
+ base size=16 base align=8
+QFileSystemWatcher (0x0x7fec3a7bdd00) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+ QObject (0x0x7fec3a7f7ba0) 0
+ primary-for QFileSystemWatcher (0x0x7fec3a7bdd00)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7fec3a82e3c0) 0 empty
+
+Vtable for QFutureWatcherBase
+QFutureWatcherBase::_ZTV18QFutureWatcherBase: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFutureWatcherBase)
+16 (int (*)(...))QFutureWatcherBase::metaObject
+24 (int (*)(...))QFutureWatcherBase::qt_metacast
+32 (int (*)(...))QFutureWatcherBase::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QFutureWatcherBase::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QFutureWatcherBase::connectNotify
+104 (int (*)(...))QFutureWatcherBase::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QFutureWatcherBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureWatcherBase (0x0x7fec3a7bdd68) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+ QObject (0x0x7fec3a82e360) 0
+ primary-for QFutureWatcherBase (0x0x7fec3a7bdd68)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7fec3a82e900) 0 empty
+
+Vtable for QIdentityProxyModel
+QIdentityProxyModel::_ZTV19QIdentityProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QIdentityProxyModel)
+16 (int (*)(...))QIdentityProxyModel::metaObject
+24 (int (*)(...))QIdentityProxyModel::qt_metacast
+32 (int (*)(...))QIdentityProxyModel::qt_metacall
+40 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+48 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIdentityProxyModel::index
+120 (int (*)(...))QIdentityProxyModel::parent
+128 (int (*)(...))QIdentityProxyModel::sibling
+136 (int (*)(...))QIdentityProxyModel::rowCount
+144 (int (*)(...))QIdentityProxyModel::columnCount
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QIdentityProxyModel::headerData
+184 (int (*)(...))QAbstractProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QIdentityProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QIdentityProxyModel::insertRows
+272 (int (*)(...))QIdentityProxyModel::insertColumns
+280 (int (*)(...))QIdentityProxyModel::removeRows
+288 (int (*)(...))QIdentityProxyModel::removeColumns
+296 (int (*)(...))QIdentityProxyModel::moveRows
+304 (int (*)(...))QIdentityProxyModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QAbstractProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QIdentityProxyModel::match
+360 (int (*)(...))QAbstractProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QIdentityProxyModel::setSourceModel
+416 (int (*)(...))QIdentityProxyModel::mapToSource
+424 (int (*)(...))QIdentityProxyModel::mapFromSource
+432 (int (*)(...))QIdentityProxyModel::mapSelectionToSource
+440 (int (*)(...))QIdentityProxyModel::mapSelectionFromSource
+
+Class QIdentityProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QIdentityProxyModel (0x0x7fec3a7bdf70) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+ QAbstractProxyModel (0x0x7fec3a847000) 0
+ primary-for QIdentityProxyModel (0x0x7fec3a7bdf70)
+ QAbstractItemModel (0x0x7fec3a847068) 0
+ primary-for QAbstractProxyModel (0x0x7fec3a847000)
+ QObject (0x0x7fec3a82e8a0) 0
+ primary-for QAbstractItemModel (0x0x7fec3a847068)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7fec3a82ea80) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7fec3a8b96c0) 0 empty
+
+Vtable for QItemSelectionModel
+QItemSelectionModel::_ZTV19QItemSelectionModel: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QItemSelectionModel)
+16 (int (*)(...))QItemSelectionModel::metaObject
+24 (int (*)(...))QItemSelectionModel::qt_metacast
+32 (int (*)(...))QItemSelectionModel::qt_metacall
+40 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+48 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QItemSelectionModel::setCurrentIndex
+120 (int (*)(...))QItemSelectionModel::select
+128 (int (*)(...))QItemSelectionModel::select
+136 (int (*)(...))QItemSelectionModel::clear
+144 (int (*)(...))QItemSelectionModel::reset
+152 (int (*)(...))QItemSelectionModel::clearCurrentIndex
+
+Class QItemSelectionModel
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionModel (0x0x7fec3a8b3e38) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+ QObject (0x0x7fec3a8b9660) 0
+ primary-for QItemSelectionModel (0x0x7fec3a8b3e38)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7fec3a519340) 0
+ QList<QItemSelectionRange> (0x0x7fec3a5193a8) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7fec3a519410) 0 empty
+ QListSpecialMethodsBase<QItemSelectionRange> (0x0x7fec3a536180) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7fec3a6072a0) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7fec3a607780) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7fec3a66dae0) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7fec3a66db40) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7fec3a66da80) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7fec3a31a540) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7fec3a31a5a0) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7fec3a4b0ae0) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7fec3a4b0b40) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7fec3a4b0a80) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7fec3a167660) 0 empty
+
+Vtable for QLibrary
+QLibrary::_ZTV8QLibrary: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QLibrary)
+16 (int (*)(...))QLibrary::metaObject
+24 (int (*)(...))QLibrary::qt_metacast
+32 (int (*)(...))QLibrary::qt_metacall
+40 (int (*)(...))QLibrary::~QLibrary
+48 (int (*)(...))QLibrary::~QLibrary
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QLibrary
+ size=24 align=8
+ base size=24 base align=8
+QLibrary (0x0x7fec3a163c98) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+ QObject (0x0x7fec3a167600) 0
+ primary-for QLibrary (0x0x7fec3a163c98)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7fec3a167d20) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7fec3a167cc0) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7fec3a2894e0) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7fec39f17d20) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7fec39f17de0) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7fec39fa14e0) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7fec39ffbe40) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7fec3a063480) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7fec3a0b8c60) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7fec39cfc420) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7fec39d47d20) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7fec39dd8a80) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7fec39dd8b40) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7fec39dd8ae0) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7fec39e55d80) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7fec39e55d20) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7fec39e98ae0) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7fec39e98a80) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7fec39ec3180) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7fec39ec3120) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7fec39ae1d20) 0 empty
+
+Vtable for QMimeData
+QMimeData::_ZTV9QMimeData: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QMimeData)
+16 (int (*)(...))QMimeData::metaObject
+24 (int (*)(...))QMimeData::qt_metacast
+32 (int (*)(...))QMimeData::qt_metacall
+40 (int (*)(...))QMimeData::~QMimeData
+48 (int (*)(...))QMimeData::~QMimeData
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QMimeData::hasFormat
+120 (int (*)(...))QMimeData::formats
+128 (int (*)(...))QMimeData::retrieveData
+
+Class QMimeData
+ size=16 align=8
+ base size=16 base align=8
+QMimeData (0x0x7fec39af17b8) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+ QObject (0x0x7fec39ae1f60) 0
+ primary-for QMimeData (0x0x7fec39af17b8)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7fec39b09120) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7fec39b74c60) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7fec39b74d20) 0 empty
+
+Vtable for QObjectCleanupHandler
+QObjectCleanupHandler::_ZTV21QObjectCleanupHandler: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QObjectCleanupHandler)
+16 (int (*)(...))QObjectCleanupHandler::metaObject
+24 (int (*)(...))QObjectCleanupHandler::qt_metacast
+32 (int (*)(...))QObjectCleanupHandler::qt_metacall
+40 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+48 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QObjectCleanupHandler
+ size=40 align=8
+ base size=40 base align=8
+QObjectCleanupHandler (0x0x7fec39b82680) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+ QObject (0x0x7fec39b74cc0) 0
+ primary-for QObjectCleanupHandler (0x0x7fec39b82680)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7fec39b74de0) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7fec39bcfc00) 0 empty
+
+Vtable for QParallelAnimationGroup
+QParallelAnimationGroup::_ZTV23QParallelAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QParallelAnimationGroup)
+16 (int (*)(...))QParallelAnimationGroup::metaObject
+24 (int (*)(...))QParallelAnimationGroup::qt_metacast
+32 (int (*)(...))QParallelAnimationGroup::qt_metacall
+40 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+48 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+56 (int (*)(...))QParallelAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QParallelAnimationGroup::duration
+120 (int (*)(...))QParallelAnimationGroup::updateCurrentTime
+128 (int (*)(...))QParallelAnimationGroup::updateState
+136 (int (*)(...))QParallelAnimationGroup::updateDirection
+
+Class QParallelAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QParallelAnimationGroup (0x0x7fec39be40d0) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+ QAnimationGroup (0x0x7fec39be4138) 0
+ primary-for QParallelAnimationGroup (0x0x7fec39be40d0)
+ QAbstractAnimation (0x0x7fec39be41a0) 0
+ primary-for QAnimationGroup (0x0x7fec39be4138)
+ QObject (0x0x7fec39bcfba0) 0
+ primary-for QAbstractAnimation (0x0x7fec39be41a0)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7fec39bcfde0) 0 empty
+
+Vtable for QPauseAnimation
+QPauseAnimation::_ZTV15QPauseAnimation: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QPauseAnimation)
+16 (int (*)(...))QPauseAnimation::metaObject
+24 (int (*)(...))QPauseAnimation::qt_metacast
+32 (int (*)(...))QPauseAnimation::qt_metacall
+40 (int (*)(...))QPauseAnimation::~QPauseAnimation
+48 (int (*)(...))QPauseAnimation::~QPauseAnimation
+56 (int (*)(...))QPauseAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPauseAnimation::duration
+120 (int (*)(...))QPauseAnimation::updateCurrentTime
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QPauseAnimation
+ size=16 align=8
+ base size=16 base align=8
+QPauseAnimation (0x0x7fec39be4208) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+ QAbstractAnimation (0x0x7fec39be4270) 0
+ primary-for QPauseAnimation (0x0x7fec39be4208)
+ QObject (0x0x7fec39bcfd80) 0
+ primary-for QAbstractAnimation (0x0x7fec39be4270)
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7fec39c03000) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7fec39c03060) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7fec39c23a80) 0 empty
+
+Vtable for QPluginLoader
+QPluginLoader::_ZTV13QPluginLoader: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPluginLoader)
+16 (int (*)(...))QPluginLoader::metaObject
+24 (int (*)(...))QPluginLoader::qt_metacast
+32 (int (*)(...))QPluginLoader::qt_metacall
+40 (int (*)(...))QPluginLoader::~QPluginLoader
+48 (int (*)(...))QPluginLoader::~QPluginLoader
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPluginLoader
+ size=32 align=8
+ base size=25 base align=8
+QPluginLoader (0x0x7fec39c24e38) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+ QObject (0x0x7fec39c23a20) 0
+ primary-for QPluginLoader (0x0x7fec39c24e38)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7fec39c23b40) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7fec39caf3c0) 0 empty
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7fec39caf420) 0 empty
+
+Vtable for QProcess
+QProcess::_ZTV8QProcess: 32 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QProcess)
+16 (int (*)(...))QProcess::metaObject
+24 (int (*)(...))QProcess::qt_metacast
+32 (int (*)(...))QProcess::qt_metacall
+40 (int (*)(...))QProcess::~QProcess
+48 (int (*)(...))QProcess::~QProcess
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QProcess::isSequential
+120 (int (*)(...))QProcess::open
+128 (int (*)(...))QProcess::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QProcess::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QProcess::waitForReadyRead
+208 (int (*)(...))QProcess::waitForBytesWritten
+216 (int (*)(...))QProcess::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QProcess::writeData
+248 (int (*)(...))QProcess::setupChildProcess
+
+Class QProcess
+ size=16 align=8
+ base size=16 base align=8
+QProcess (0x0x7fec39ca1f08) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+ QIODevice (0x0x7fec39bdbb60) 0
+ primary-for QProcess (0x0x7fec39ca1f08)
+ QObject (0x0x7fec39caf300) 0
+ primary-for QIODevice (0x0x7fec39bdbb60)
+ QIODeviceBase (0x0x7fec39caf360) 0 empty
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7fec3baf0780) 0 empty
+
+Vtable for QVariantAnimation
+QVariantAnimation::_ZTV17QVariantAnimation: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QVariantAnimation)
+16 (int (*)(...))QVariantAnimation::metaObject
+24 (int (*)(...))QVariantAnimation::qt_metacast
+32 (int (*)(...))QVariantAnimation::qt_metacall
+40 (int (*)(...))QVariantAnimation::~QVariantAnimation
+48 (int (*)(...))QVariantAnimation::~QVariantAnimation
+56 (int (*)(...))QVariantAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QVariantAnimation::duration
+120 (int (*)(...))QVariantAnimation::updateCurrentTime
+128 (int (*)(...))QVariantAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+144 (int (*)(...))QVariantAnimation::updateCurrentValue
+152 (int (*)(...))QVariantAnimation::interpolated
+
+Class QVariantAnimation
+ size=16 align=8
+ base size=16 base align=8
+QVariantAnimation (0x0x7fec3ad4cd00) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+ QAbstractAnimation (0x0x7fec3ad4cd68) 0
+ primary-for QVariantAnimation (0x0x7fec3ad4cd00)
+ QObject (0x0x7fec3baf0720) 0
+ primary-for QAbstractAnimation (0x0x7fec3ad4cd68)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7fec3bd2d120) 0 empty
+
+Vtable for QPropertyAnimation
+QPropertyAnimation::_ZTV18QPropertyAnimation: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QPropertyAnimation)
+16 (int (*)(...))QPropertyAnimation::metaObject
+24 (int (*)(...))QPropertyAnimation::qt_metacast
+32 (int (*)(...))QPropertyAnimation::qt_metacall
+40 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+48 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+56 (int (*)(...))QPropertyAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QVariantAnimation::duration
+120 (int (*)(...))QVariantAnimation::updateCurrentTime
+128 (int (*)(...))QPropertyAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+144 (int (*)(...))QPropertyAnimation::updateCurrentValue
+152 (int (*)(...))QVariantAnimation::interpolated
+
+Class QPropertyAnimation
+ size=16 align=8
+ base size=16 base align=8
+QPropertyAnimation (0x0x7fec3cbad548) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+ QVariantAnimation (0x0x7fec3cbad5b0) 0
+ primary-for QPropertyAnimation (0x0x7fec3cbad548)
+ QAbstractAnimation (0x0x7fec3cbada90) 0
+ primary-for QVariantAnimation (0x0x7fec3cbad5b0)
+ QObject (0x0x7fec3bd2d0c0) 0
+ primary-for QAbstractAnimation (0x0x7fec3cbada90)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7fec4513f060) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7fec425f71e0) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7fec425c2900) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7fec3cea5d80) 0
+
+Class QRandomGenerator::InitialRandomData
+ size=16 align=8
+ base size=16 base align=8
+QRandomGenerator::InitialRandomData (0x0x7fec3a897a80) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7fec3a8b91e0) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7fec3a897a20) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7fec44d56750) 0
+ QRandomGenerator (0x0x7fec39fa1f60) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7fec39d29c00) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7fec39d95f60) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7fec39e78780) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7fec39ec3cc0) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7fec3d4166c0) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7fec44957180) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7fec4490ff60) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7fec434caae0) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7fec434cade0) 0 empty
+
+Vtable for QSaveFile
+QSaveFile::_ZTV9QSaveFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSaveFile)
+16 (int (*)(...))QSaveFile::metaObject
+24 (int (*)(...))QSaveFile::qt_metacast
+32 (int (*)(...))QSaveFile::qt_metacall
+40 (int (*)(...))QSaveFile::~QSaveFile
+48 (int (*)(...))QSaveFile::~QSaveFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QSaveFile::open
+128 (int (*)(...))QSaveFile::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFileDevice::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QSaveFile::writeData
+248 (int (*)(...))QSaveFile::fileName
+256 (int (*)(...))QFileDevice::resize
+264 (int (*)(...))QFileDevice::permissions
+272 (int (*)(...))QFileDevice::setPermissions
+
+Class QSaveFile
+ size=16 align=8
+ base size=16 base align=8
+QSaveFile (0x0x7fec44fde7b8) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+ QFileDevice (0x0x7fec44fde820) 0
+ primary-for QSaveFile (0x0x7fec44fde7b8)
+ QIODevice (0x0x7fec3d7f64d0) 0
+ primary-for QFileDevice (0x0x7fec44fde820)
+ QObject (0x0x7fec434cad20) 0
+ primary-for QIODevice (0x0x7fec3d7f64d0)
+ QIODeviceBase (0x0x7fec434cad80) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7fec42a02180) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7fec42a2e960) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7fec424276c0) 0 empty
+
+Vtable for QSequentialAnimationGroup
+QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QSequentialAnimationGroup)
+16 (int (*)(...))QSequentialAnimationGroup::metaObject
+24 (int (*)(...))QSequentialAnimationGroup::qt_metacast
+32 (int (*)(...))QSequentialAnimationGroup::qt_metacall
+40 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+48 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+56 (int (*)(...))QSequentialAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSequentialAnimationGroup::duration
+120 (int (*)(...))QSequentialAnimationGroup::updateCurrentTime
+128 (int (*)(...))QSequentialAnimationGroup::updateState
+136 (int (*)(...))QSequentialAnimationGroup::updateDirection
+
+Class QSequentialAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QSequentialAnimationGroup (0x0x7fec45048618) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+ QAnimationGroup (0x0x7fec45048680) 0
+ primary-for QSequentialAnimationGroup (0x0x7fec45048618)
+ QAbstractAnimation (0x0x7fec450486e8) 0
+ primary-for QAnimationGroup (0x0x7fec45048680)
+ QObject (0x0x7fec42427660) 0
+ primary-for QAbstractAnimation (0x0x7fec450486e8)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7fec45048750) 0
+ QIterator<QMetaSequence> (0x0x7fec45048888) 0
+ QBaseIterator<QMetaSequence> (0x0x7fec42427a20) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7fec45048958) 0
+ QConstIterator<QMetaSequence> (0x0x7fec45048a28) 0
+ QBaseIterator<QMetaSequence> (0x0x7fec42427960) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7fec45048a90) 0
+ QIterable<QMetaSequence> (0x0x7fec421c64e0) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7fec3f998ae0) 0 empty
+
+Vtable for QSettings
+QSettings::_ZTV9QSettings: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSettings)
+16 (int (*)(...))QSettings::metaObject
+24 (int (*)(...))QSettings::qt_metacast
+32 (int (*)(...))QSettings::qt_metacall
+40 (int (*)(...))QSettings::~QSettings
+48 (int (*)(...))QSettings::~QSettings
+56 (int (*)(...))QSettings::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSettings
+ size=16 align=8
+ base size=16 base align=8
+QSettings (0x0x7fec44e08000) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+ QObject (0x0x7fec3f998a80) 0
+ primary-for QSettings (0x0x7fec44e08000)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7fec3f998f00) 0 empty
+
+Vtable for QSharedMemory
+QSharedMemory::_ZTV13QSharedMemory: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSharedMemory)
+16 (int (*)(...))QSharedMemory::metaObject
+24 (int (*)(...))QSharedMemory::qt_metacast
+32 (int (*)(...))QSharedMemory::qt_metacall
+40 (int (*)(...))QSharedMemory::~QSharedMemory
+48 (int (*)(...))QSharedMemory::~QSharedMemory
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSharedMemory
+ size=16 align=8
+ base size=16 base align=8
+QSharedMemory (0x0x7fec44e08068) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+ QObject (0x0x7fec3f998ea0) 0
+ primary-for QSharedMemory (0x0x7fec44e08068)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7fec3ebdf120) 0 empty
+
+Vtable for QSignalMapper
+QSignalMapper::_ZTV13QSignalMapper: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSignalMapper)
+16 (int (*)(...))QSignalMapper::metaObject
+24 (int (*)(...))QSignalMapper::qt_metacast
+32 (int (*)(...))QSignalMapper::qt_metacall
+40 (int (*)(...))QSignalMapper::~QSignalMapper
+48 (int (*)(...))QSignalMapper::~QSignalMapper
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSignalMapper
+ size=16 align=8
+ base size=16 base align=8
+QSignalMapper (0x0x7fec44e080d0) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+ QObject (0x0x7fec3ebdf0c0) 0
+ primary-for QSignalMapper (0x0x7fec44e080d0)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7fec39384b40) 0 empty
+
+Vtable for QSocketNotifier
+QSocketNotifier::_ZTV15QSocketNotifier: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSocketNotifier)
+16 (int (*)(...))QSocketNotifier::metaObject
+24 (int (*)(...))QSocketNotifier::qt_metacast
+32 (int (*)(...))QSocketNotifier::qt_metacall
+40 (int (*)(...))QSocketNotifier::~QSocketNotifier
+48 (int (*)(...))QSocketNotifier::~QSocketNotifier
+56 (int (*)(...))QSocketNotifier::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSocketNotifier
+ size=16 align=8
+ base size=16 base align=8
+QSocketNotifier (0x0x7fec44e14a28) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+ QObject (0x0x7fec39384ae0) 0
+ primary-for QSocketNotifier (0x0x7fec44e14a28)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7fec39384cc0) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7fec393b0660) 0 empty
+
+Vtable for QSortFilterProxyModel
+QSortFilterProxyModel::_ZTV21QSortFilterProxyModel: 59 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QSortFilterProxyModel)
+16 (int (*)(...))QSortFilterProxyModel::metaObject
+24 (int (*)(...))QSortFilterProxyModel::qt_metacast
+32 (int (*)(...))QSortFilterProxyModel::qt_metacall
+40 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+48 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSortFilterProxyModel::index
+120 (int (*)(...))QSortFilterProxyModel::parent
+128 (int (*)(...))QSortFilterProxyModel::sibling
+136 (int (*)(...))QSortFilterProxyModel::rowCount
+144 (int (*)(...))QSortFilterProxyModel::columnCount
+152 (int (*)(...))QSortFilterProxyModel::hasChildren
+160 (int (*)(...))QSortFilterProxyModel::data
+168 (int (*)(...))QSortFilterProxyModel::setData
+176 (int (*)(...))QSortFilterProxyModel::headerData
+184 (int (*)(...))QSortFilterProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QSortFilterProxyModel::mimeTypes
+224 (int (*)(...))QSortFilterProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QSortFilterProxyModel::dropMimeData
+248 (int (*)(...))QSortFilterProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QSortFilterProxyModel::insertRows
+272 (int (*)(...))QSortFilterProxyModel::insertColumns
+280 (int (*)(...))QSortFilterProxyModel::removeRows
+288 (int (*)(...))QSortFilterProxyModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QSortFilterProxyModel::fetchMore
+320 (int (*)(...))QSortFilterProxyModel::canFetchMore
+328 (int (*)(...))QSortFilterProxyModel::flags
+336 (int (*)(...))QSortFilterProxyModel::sort
+344 (int (*)(...))QSortFilterProxyModel::buddy
+352 (int (*)(...))QSortFilterProxyModel::match
+360 (int (*)(...))QSortFilterProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QSortFilterProxyModel::setSourceModel
+416 (int (*)(...))QSortFilterProxyModel::mapToSource
+424 (int (*)(...))QSortFilterProxyModel::mapFromSource
+432 (int (*)(...))QSortFilterProxyModel::mapSelectionToSource
+440 (int (*)(...))QSortFilterProxyModel::mapSelectionFromSource
+448 (int (*)(...))QSortFilterProxyModel::filterAcceptsRow
+456 (int (*)(...))QSortFilterProxyModel::filterAcceptsColumn
+464 (int (*)(...))QSortFilterProxyModel::lessThan
+
+Class QSortFilterProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QSortFilterProxyModel (0x0x7fec44e1b680) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+ QAbstractProxyModel (0x0x7fec44e1b6e8) 0
+ primary-for QSortFilterProxyModel (0x0x7fec44e1b680)
+ QAbstractItemModel (0x0x7fec44e1b7b8) 0
+ primary-for QAbstractProxyModel (0x0x7fec44e1b6e8)
+ QObject (0x0x7fec393b0600) 0
+ primary-for QAbstractItemModel (0x0x7fec44e1b7b8)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7fec393b0a20) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7fec393dd420) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7fec3940ec60) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7fec3944d4e0) 0 empty
+
+Vtable for QStringListModel
+QStringListModel::_ZTV16QStringListModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QStringListModel)
+16 (int (*)(...))QStringListModel::metaObject
+24 (int (*)(...))QStringListModel::qt_metacast
+32 (int (*)(...))QStringListModel::qt_metacall
+40 (int (*)(...))QStringListModel::~QStringListModel
+48 (int (*)(...))QStringListModel::~QStringListModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QStringListModel::sibling
+136 (int (*)(...))QStringListModel::rowCount
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))QStringListModel::data
+168 (int (*)(...))QStringListModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QStringListModel::itemData
+200 (int (*)(...))QStringListModel::setItemData
+208 (int (*)(...))QStringListModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QStringListModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStringListModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QStringListModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QStringListModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStringListModel::flags
+336 (int (*)(...))QStringListModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QStringListModel
+ size=40 align=8
+ base size=40 base align=8
+QStringListModel (0x0x7fec44e2f3a8) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+ QAbstractListModel (0x0x7fec44e2f410) 0
+ primary-for QStringListModel (0x0x7fec44e2f3a8)
+ QAbstractItemModel (0x0x7fec44e2f478) 0
+ primary-for QAbstractListModel (0x0x7fec44e2f410)
+ QObject (0x0x7fec3944d480) 0
+ primary-for QAbstractItemModel (0x0x7fec44e2f478)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7fec3944d5a0) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7fec3944d6c0) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7fec3944d840) 0 empty
+
+Vtable for QTemporaryFile
+QTemporaryFile::_ZTV14QTemporaryFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QTemporaryFile)
+16 (int (*)(...))QTemporaryFile::metaObject
+24 (int (*)(...))QTemporaryFile::qt_metacast
+32 (int (*)(...))QTemporaryFile::qt_metacall
+40 (int (*)(...))QTemporaryFile::~QTemporaryFile
+48 (int (*)(...))QTemporaryFile::~QTemporaryFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QTemporaryFile::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFile::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QTemporaryFile::fileName
+256 (int (*)(...))QFile::resize
+264 (int (*)(...))QFile::permissions
+272 (int (*)(...))QFile::setPermissions
+
+Class QTemporaryFile
+ size=16 align=8
+ base size=16 base align=8
+QTemporaryFile (0x0x7fec44e2f4e0) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+ QFile (0x0x7fec44e2f548) 0
+ primary-for QTemporaryFile (0x0x7fec44e2f4e0)
+ QFileDevice (0x0x7fec44e2f618) 0
+ primary-for QFile (0x0x7fec44e2f548)
+ QIODevice (0x0x7fec39438af0) 0
+ primary-for QFileDevice (0x0x7fec44e2f618)
+ QObject (0x0x7fec3944d780) 0
+ primary-for QIODevice (0x0x7fec39438af0)
+ QIODeviceBase (0x0x7fec3944d7e0) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7fec3944da80) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7fec39487120) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7fec394877e0) 0 empty
+
+Vtable for QTimeLine
+QTimeLine::_ZTV9QTimeLine: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTimeLine)
+16 (int (*)(...))QTimeLine::metaObject
+24 (int (*)(...))QTimeLine::qt_metacast
+32 (int (*)(...))QTimeLine::qt_metacall
+40 (int (*)(...))QTimeLine::~QTimeLine
+48 (int (*)(...))QTimeLine::~QTimeLine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTimeLine::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTimeLine::valueForTime
+
+Class QTimeLine
+ size=16 align=8
+ base size=16 base align=8
+QTimeLine (0x0x7fec44e2f7b8) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+ QObject (0x0x7fec39487780) 0
+ primary-for QTimeLine (0x0x7fec44e2f7b8)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7fec394879c0) 0 empty
+
+Vtable for QTimer
+QTimer::_ZTV6QTimer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QTimer)
+16 (int (*)(...))QTimer::metaObject
+24 (int (*)(...))QTimer::qt_metacast
+32 (int (*)(...))QTimer::qt_metacall
+40 (int (*)(...))QTimer::~QTimer
+48 (int (*)(...))QTimer::~QTimer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTimer::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTimer
+ size=16 align=8
+ base size=16 base align=8
+QTimer (0x0x7fec44e2f820) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+ QObject (0x0x7fec39487960) 0
+ primary-for QTimer (0x0x7fec44e2f820)
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7fec394aa360) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7fec394aa300) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7fec390dc3c0) 0 empty
+
+Vtable for QTranslator
+QTranslator::_ZTV11QTranslator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTranslator)
+16 (int (*)(...))QTranslator::metaObject
+24 (int (*)(...))QTranslator::qt_metacast
+32 (int (*)(...))QTranslator::qt_metacall
+40 (int (*)(...))QTranslator::~QTranslator
+48 (int (*)(...))QTranslator::~QTranslator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTranslator::translate
+120 (int (*)(...))QTranslator::isEmpty
+
+Class QTranslator
+ size=16 align=8
+ base size=16 base align=8
+QTranslator (0x0x7fec44e40820) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+ QObject (0x0x7fec390dc360) 0
+ primary-for QTranslator (0x0x7fec44e40820)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7fec390dc5a0) 0 empty
+
+Vtable for QTransposeProxyModel
+QTransposeProxyModel::_ZTV20QTransposeProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTransposeProxyModel)
+16 (int (*)(...))QTransposeProxyModel::metaObject
+24 (int (*)(...))QTransposeProxyModel::qt_metacast
+32 (int (*)(...))QTransposeProxyModel::qt_metacall
+40 (int (*)(...))QTransposeProxyModel::~QTransposeProxyModel
+48 (int (*)(...))QTransposeProxyModel::~QTransposeProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTransposeProxyModel::index
+120 (int (*)(...))QTransposeProxyModel::parent
+128 (int (*)(...))QAbstractProxyModel::sibling
+136 (int (*)(...))QTransposeProxyModel::rowCount
+144 (int (*)(...))QTransposeProxyModel::columnCount
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QTransposeProxyModel::headerData
+184 (int (*)(...))QTransposeProxyModel::setHeaderData
+192 (int (*)(...))QTransposeProxyModel::itemData
+200 (int (*)(...))QTransposeProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QAbstractProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QTransposeProxyModel::insertRows
+272 (int (*)(...))QTransposeProxyModel::insertColumns
+280 (int (*)(...))QTransposeProxyModel::removeRows
+288 (int (*)(...))QTransposeProxyModel::removeColumns
+296 (int (*)(...))QTransposeProxyModel::moveRows
+304 (int (*)(...))QTransposeProxyModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QTransposeProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QTransposeProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QTransposeProxyModel::setSourceModel
+416 (int (*)(...))QTransposeProxyModel::mapToSource
+424 (int (*)(...))QTransposeProxyModel::mapFromSource
+432 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+440 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QTransposeProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QTransposeProxyModel (0x0x7fec44e40888) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+ QAbstractProxyModel (0x0x7fec44e408f0) 0
+ primary-for QTransposeProxyModel (0x0x7fec44e40888)
+ QAbstractItemModel (0x0x7fec44e40958) 0
+ primary-for QAbstractProxyModel (0x0x7fec44e408f0)
+ QObject (0x0x7fec390dc540) 0
+ primary-for QAbstractItemModel (0x0x7fec44e40958)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7fec390dc720) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7fec3912cf60) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7fec391380c0) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7fec39145f00) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7fec44e5b5b0) 0
+ QList<QXmlStreamAttribute> (0x0x7fec44e5b618) 0
+ QListSpecialMethods<QXmlStreamAttribute> (0x0x7fec44e5b680) 0 empty
+ QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7fec3915ff00) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7fec39191840) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7fec3919df00) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7fec391b45a0) 0
+
+Vtable for QXmlStreamEntityResolver
+QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QXmlStreamEntityResolver)
+16 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+24 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+32 (int (*)(...))QXmlStreamEntityResolver::resolveEntity
+40 (int (*)(...))QXmlStreamEntityResolver::resolveUndeclaredEntity
+
+Class QXmlStreamEntityResolver
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamEntityResolver (0x0x7fec391c1d20) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7fec391c1d80) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7fec391e0360) 0
+
+Vtable for QPaintDevice
+QPaintDevice::_ZTV12QPaintDevice: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDevice
+ size=16 align=8
+ base size=10 base align=8
+QPaintDevice (0x0x7fec391e0540) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7fec39204000) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7fec3922ccc0) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7fec3922cc60) 0
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7fec39269d20) 0
+
+Class QPolygon
+ size=24 align=8
+ base size=24 base align=8
+QPolygon (0x0x7fec44b65208) 0
+ QList<QPoint> (0x0x7fec44b65270) 0
+ QListSpecialMethods<QPoint> (0x0x7fec44b651a0) 0 empty
+ QListSpecialMethodsBase<QPoint> (0x0x7fec3929ea20) 0 empty
+
+Class QPolygonF
+ size=24 align=8
+ base size=24 base align=8
+QPolygonF (0x0x7fec44b6b548) 0
+ QList<QPointF> (0x0x7fec44b6b5b0) 0
+ QListSpecialMethods<QPointF> (0x0x7fec44b6b618) 0 empty
+ QListSpecialMethodsBase<QPointF> (0x0x7fec38ef5660) 0 empty
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7fec38f3be40) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7fec38f3bde0) 0
+
+Class QTransform::Affine
+ size=8 align=8
+ base size=8 base align=8
+QTransform::Affine (0x0x7fec38f7a3c0) 0
+
+Class QTransform
+ size=80 align=8
+ base size=74 base align=8
+QTransform (0x0x7fec38f7a360) 0
+
+Vtable for QImage
+QImage::_ZTV6QImage: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QImage)
+16 (int (*)(...))QImage::~QImage
+24 (int (*)(...))QImage::~QImage
+32 (int (*)(...))QImage::devType
+40 (int (*)(...))QImage::paintEngine
+48 (int (*)(...))QImage::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QImage
+ size=24 align=8
+ base size=24 base align=8
+QImage (0x0x7fec44b84820) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+ QPaintDevice (0x0x7fec38f9df60) 0
+ primary-for QImage (0x0x7fec44b84820)
+
+Vtable for QPixmap
+QPixmap::_ZTV7QPixmap: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QPixmap)
+16 (int (*)(...))QPixmap::~QPixmap
+24 (int (*)(...))QPixmap::~QPixmap
+32 (int (*)(...))QPixmap::devType
+40 (int (*)(...))QPixmap::paintEngine
+48 (int (*)(...))QPixmap::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPixmap
+ size=24 align=8
+ base size=24 base align=8
+QPixmap (0x0x7fec44b8dc98) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+ QPaintDevice (0x0x7fec38fef780) 0
+ primary-for QPixmap (0x0x7fec44b8dc98)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7fec390283c0) 0
+
+Vtable for QAbstractFileIconProvider
+QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAbstractFileIconProvider)
+16 (int (*)(...))QAbstractFileIconProvider::~QAbstractFileIconProvider
+24 (int (*)(...))QAbstractFileIconProvider::~QAbstractFileIconProvider
+32 (int (*)(...))QAbstractFileIconProvider::icon
+40 (int (*)(...))QAbstractFileIconProvider::icon
+48 (int (*)(...))QAbstractFileIconProvider::type
+56 (int (*)(...))QAbstractFileIconProvider::setOptions
+64 (int (*)(...))QAbstractFileIconProvider::options
+
+Class QAbstractFileIconProvider
+ size=16 align=8
+ base size=16 base align=8
+QAbstractFileIconProvider (0x0x7fec39051720) 0
+ vptr=((& QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider) + 16)
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7fec39051cc0) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7fec39088a80) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7fec390a8a20) 0
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7fec38d16540) 0 empty
+
+Vtable for QScreen
+QScreen::_ZTV7QScreen: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QScreen)
+16 (int (*)(...))QScreen::metaObject
+24 (int (*)(...))QScreen::qt_metacast
+32 (int (*)(...))QScreen::qt_metacall
+40 (int (*)(...))QScreen::~QScreen
+48 (int (*)(...))QScreen::~QScreen
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QScreen
+ size=16 align=8
+ base size=16 base align=8
+QScreen (0x0x7fec3e952138) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+ QObject (0x0x7fec38d164e0) 0
+ primary-for QScreen (0x0x7fec3e952138)
+
+Class QInputDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDevice::QPrivateSignal (0x0x7fec38d16780) 0 empty
+
+Vtable for QInputDevice
+QInputDevice::_ZTV12QInputDevice: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputDevice)
+16 (int (*)(...))QInputDevice::metaObject
+24 (int (*)(...))QInputDevice::qt_metacast
+32 (int (*)(...))QInputDevice::qt_metacall
+40 (int (*)(...))QInputDevice::~QInputDevice
+48 (int (*)(...))QInputDevice::~QInputDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QInputDevice
+ size=16 align=8
+ base size=16 base align=8
+QInputDevice (0x0x7fec3e9521a0) 0
+ vptr=((& QInputDevice::_ZTV12QInputDevice) + 16)
+ QObject (0x0x7fec38d16720) 0
+ primary-for QInputDevice (0x0x7fec3e9521a0)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7fec38d47240) 0
+
+Class QPointingDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPointingDevice::QPrivateSignal (0x0x7fec38d5cba0) 0 empty
+
+Vtable for QPointingDevice
+QPointingDevice::_ZTV15QPointingDevice: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QPointingDevice)
+16 (int (*)(...))QPointingDevice::metaObject
+24 (int (*)(...))QPointingDevice::qt_metacast
+32 (int (*)(...))QPointingDevice::qt_metacall
+40 (int (*)(...))QPointingDevice::~QPointingDevice
+48 (int (*)(...))QPointingDevice::~QPointingDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPointingDevice
+ size=16 align=8
+ base size=16 base align=8
+QPointingDevice (0x0x7fec3d9690d0) 0
+ vptr=((& QPointingDevice::_ZTV15QPointingDevice) + 16)
+ QInputDevice (0x0x7fec3d969138) 0
+ primary-for QPointingDevice (0x0x7fec3d9690d0)
+ QObject (0x0x7fec38d5cb40) 0
+ primary-for QInputDevice (0x0x7fec3d969138)
+
+Class QEventPoint
+ size=8 align=8
+ base size=8 base align=8
+QEventPoint (0x0x7fec38d78300) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7fec38db8240) 0
+
+Vtable for QInputEvent
+QInputEvent::_ZTV11QInputEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QInputEvent)
+16 (int (*)(...))QInputEvent::~QInputEvent
+24 (int (*)(...))QInputEvent::~QInputEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QInputEvent
+ size=40 align=8
+ base size=40 base align=8
+QInputEvent (0x0x7fec3acd06e8) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+ QEvent (0x0x7fec38de6240) 0
+ primary-for QInputEvent (0x0x7fec3acd06e8)
+
+Vtable for QPointerEvent
+QPointerEvent::_ZTV13QPointerEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPointerEvent)
+16 (int (*)(...))QPointerEvent::~QPointerEvent
+24 (int (*)(...))QPointerEvent::~QPointerEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QPointerEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QPointerEvent::isBeginEvent
+64 (int (*)(...))QPointerEvent::isUpdateEvent
+72 (int (*)(...))QPointerEvent::isEndEvent
+
+Class QPointerEvent
+ size=64 align=8
+ base size=64 base align=8
+QPointerEvent (0x0x7fec3acd07b8) 0
+ vptr=((& QPointerEvent::_ZTV13QPointerEvent) + 16)
+ QInputEvent (0x0x7fec3acd0820) 0
+ primary-for QPointerEvent (0x0x7fec3acd07b8)
+ QEvent (0x0x7fec38de6720) 0
+ primary-for QInputEvent (0x0x7fec3acd0820)
+
+Vtable for QSinglePointEvent
+QSinglePointEvent::_ZTV17QSinglePointEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSinglePointEvent)
+16 (int (*)(...))QSinglePointEvent::~QSinglePointEvent
+24 (int (*)(...))QSinglePointEvent::~QSinglePointEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QSinglePointEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QSinglePointEvent
+ size=80 align=8
+ base size=80 base align=8
+QSinglePointEvent (0x0x7fec3ae4bea0) 0
+ vptr=((& QSinglePointEvent::_ZTV17QSinglePointEvent) + 16)
+ QPointerEvent (0x0x7fec3ae8f000) 0
+ primary-for QSinglePointEvent (0x0x7fec3ae4bea0)
+ QInputEvent (0x0x7fec3ae8f1a0) 0
+ primary-for QPointerEvent (0x0x7fec3ae8f000)
+ QEvent (0x0x7fec38e25600) 0
+ primary-for QInputEvent (0x0x7fec3ae8f1a0)
+
+Vtable for QEnterEvent
+QEnterEvent::_ZTV11QEnterEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QEnterEvent)
+16 (int (*)(...))QEnterEvent::~QEnterEvent
+24 (int (*)(...))QEnterEvent::~QEnterEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QEnterEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QEnterEvent (0x0x7fec3ae8f478) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+ QSinglePointEvent (0x0x7fec3ae8f4e0) 0
+ primary-for QEnterEvent (0x0x7fec3ae8f478)
+ QPointerEvent (0x0x7fec3ae8f5b0) 0
+ primary-for QSinglePointEvent (0x0x7fec3ae8f4e0)
+ QInputEvent (0x0x7fec3ab18958) 0
+ primary-for QPointerEvent (0x0x7fec3ae8f5b0)
+ QEvent (0x0x7fec38e25ae0) 0
+ primary-for QInputEvent (0x0x7fec3ab18958)
+
+Vtable for QMouseEvent
+QMouseEvent::_ZTV11QMouseEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMouseEvent)
+16 (int (*)(...))QMouseEvent::~QMouseEvent
+24 (int (*)(...))QMouseEvent::~QMouseEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QMouseEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QMouseEvent
+ size=80 align=8
+ base size=80 base align=8
+QMouseEvent (0x0x7fec3ab189c0) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+ QSinglePointEvent (0x0x7fec3ab18af8) 0
+ primary-for QMouseEvent (0x0x7fec3ab189c0)
+ QPointerEvent (0x0x7fec3ab18c98) 0
+ primary-for QSinglePointEvent (0x0x7fec3ab18af8)
+ QInputEvent (0x0x7fec3abe2680) 0
+ primary-for QPointerEvent (0x0x7fec3ab18c98)
+ QEvent (0x0x7fec38e3d2a0) 0
+ primary-for QInputEvent (0x0x7fec3abe2680)
+
+Vtable for QHoverEvent
+QHoverEvent::_ZTV11QHoverEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHoverEvent)
+16 (int (*)(...))QHoverEvent::~QHoverEvent
+24 (int (*)(...))QHoverEvent::~QHoverEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QHoverEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QHoverEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QHoverEvent
+ size=96 align=8
+ base size=96 base align=8
+QHoverEvent (0x0x7fec3abe26e8) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+ QSinglePointEvent (0x0x7fec3a9914e0) 0
+ primary-for QHoverEvent (0x0x7fec3abe26e8)
+ QPointerEvent (0x0x7fec3a991548) 0
+ primary-for QSinglePointEvent (0x0x7fec3a9914e0)
+ QInputEvent (0x0x7fec3a991680) 0
+ primary-for QPointerEvent (0x0x7fec3a991548)
+ QEvent (0x0x7fec38e3d840) 0
+ primary-for QInputEvent (0x0x7fec3a991680)
+
+Vtable for QWheelEvent
+QWheelEvent::_ZTV11QWheelEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWheelEvent)
+16 (int (*)(...))QWheelEvent::~QWheelEvent
+24 (int (*)(...))QWheelEvent::~QWheelEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QWheelEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QWheelEvent::isBeginEvent
+64 (int (*)(...))QWheelEvent::isUpdateEvent
+72 (int (*)(...))QWheelEvent::isEndEvent
+
+Class QWheelEvent
+ size=96 align=8
+ base size=96 base align=8
+QWheelEvent (0x0x7fec3a991820) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+ QSinglePointEvent (0x0x7fec3a9918f0) 0
+ primary-for QWheelEvent (0x0x7fec3a991820)
+ QPointerEvent (0x0x7fec3a991958) 0
+ primary-for QSinglePointEvent (0x0x7fec3a9918f0)
+ QInputEvent (0x0x7fec3a991a90) 0
+ primary-for QPointerEvent (0x0x7fec3a991958)
+ QEvent (0x0x7fec38e3dc60) 0
+ primary-for QInputEvent (0x0x7fec3a991a90)
+
+Vtable for QTabletEvent
+QTabletEvent::_ZTV12QTabletEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTabletEvent)
+16 (int (*)(...))QTabletEvent::~QTabletEvent
+24 (int (*)(...))QTabletEvent::~QTabletEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QTabletEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QTabletEvent
+ size=96 align=8
+ base size=96 base align=8
+QTabletEvent (0x0x7fec3a991c30) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+ QSinglePointEvent (0x0x7fec3a991e38) 0
+ primary-for QTabletEvent (0x0x7fec3a991c30)
+ QPointerEvent (0x0x7fec3a99d0d0) 0
+ primary-for QSinglePointEvent (0x0x7fec3a991e38)
+ QInputEvent (0x0x7fec3a99d5b0) 0
+ primary-for QPointerEvent (0x0x7fec3a99d0d0)
+ QEvent (0x0x7fec38e5e180) 0
+ primary-for QInputEvent (0x0x7fec3a99d5b0)
+
+Vtable for QNativeGestureEvent
+QNativeGestureEvent::_ZTV19QNativeGestureEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNativeGestureEvent)
+16 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+24 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QNativeGestureEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QNativeGestureEvent
+ size=112 align=8
+ base size=112 base align=8
+QNativeGestureEvent (0x0x7fec3a99d618) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+ QSinglePointEvent (0x0x7fec3a99d958) 0
+ primary-for QNativeGestureEvent (0x0x7fec3a99d618)
+ QPointerEvent (0x0x7fec3a99d9c0) 0
+ primary-for QSinglePointEvent (0x0x7fec3a99d958)
+ QInputEvent (0x0x7fec3a778270) 0
+ primary-for QPointerEvent (0x0x7fec3a99d9c0)
+ QEvent (0x0x7fec38e5ea20) 0
+ primary-for QInputEvent (0x0x7fec3a778270)
+
+Vtable for QKeyEvent
+QKeyEvent::_ZTV9QKeyEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QKeyEvent)
+16 (int (*)(...))QKeyEvent::~QKeyEvent
+24 (int (*)(...))QKeyEvent::~QKeyEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QKeyEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QKeyEvent
+ size=88 align=8
+ base size=82 base align=8
+QKeyEvent (0x0x7fec3a7782d8) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+ QInputEvent (0x0x7fec3a7786e8) 0
+ primary-for QKeyEvent (0x0x7fec3a7782d8)
+ QEvent (0x0x7fec38e78000) 0
+ primary-for QInputEvent (0x0x7fec3a7786e8)
+
+Vtable for QFocusEvent
+QFocusEvent::_ZTV11QFocusEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusEvent)
+16 (int (*)(...))QFocusEvent::~QFocusEvent
+24 (int (*)(...))QFocusEvent::~QFocusEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QFocusEvent::clone
+
+Class QFocusEvent
+ size=24 align=8
+ base size=20 base align=8
+QFocusEvent (0x0x7fec3a778750) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+ QEvent (0x0x7fec38e78600) 0
+ primary-for QFocusEvent (0x0x7fec3a778750)
+
+Vtable for QPaintEvent
+QPaintEvent::_ZTV11QPaintEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPaintEvent)
+16 (int (*)(...))QPaintEvent::~QPaintEvent
+24 (int (*)(...))QPaintEvent::~QPaintEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QPaintEvent::clone
+
+Class QPaintEvent
+ size=48 align=8
+ base size=41 base align=8
+QPaintEvent (0x0x7fec3a79a2d8) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+ QEvent (0x0x7fec38e78960) 0
+ primary-for QPaintEvent (0x0x7fec3a79a2d8)
+
+Vtable for QMoveEvent
+QMoveEvent::_ZTV10QMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QMoveEvent)
+16 (int (*)(...))QMoveEvent::~QMoveEvent
+24 (int (*)(...))QMoveEvent::~QMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QMoveEvent::clone
+
+Class QMoveEvent
+ size=32 align=8
+ base size=32 base align=8
+QMoveEvent (0x0x7fec3a79a340) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+ QEvent (0x0x7fec38e78c60) 0
+ primary-for QMoveEvent (0x0x7fec3a79a340)
+
+Vtable for QExposeEvent
+QExposeEvent::_ZTV12QExposeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QExposeEvent)
+16 (int (*)(...))QExposeEvent::~QExposeEvent
+24 (int (*)(...))QExposeEvent::~QExposeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QExposeEvent::clone
+
+Class QExposeEvent
+ size=24 align=8
+ base size=24 base align=8
+QExposeEvent (0x0x7fec3a79a5b0) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+ QEvent (0x0x7fec38e96000) 0
+ primary-for QExposeEvent (0x0x7fec3a79a5b0)
+
+Vtable for QPlatformSurfaceEvent
+QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QPlatformSurfaceEvent)
+16 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+24 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QPlatformSurfaceEvent::clone
+
+Class QPlatformSurfaceEvent
+ size=24 align=8
+ base size=20 base align=8
+QPlatformSurfaceEvent (0x0x7fec3a79a618) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+ QEvent (0x0x7fec38e962a0) 0
+ primary-for QPlatformSurfaceEvent (0x0x7fec3a79a618)
+
+Vtable for QResizeEvent
+QResizeEvent::_ZTV12QResizeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QResizeEvent)
+16 (int (*)(...))QResizeEvent::~QResizeEvent
+24 (int (*)(...))QResizeEvent::~QResizeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QResizeEvent::clone
+
+Class QResizeEvent
+ size=32 align=8
+ base size=32 base align=8
+QResizeEvent (0x0x7fec3a7bd000) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+ QEvent (0x0x7fec38e965a0) 0
+ primary-for QResizeEvent (0x0x7fec3a7bd000)
+
+Vtable for QCloseEvent
+QCloseEvent::_ZTV11QCloseEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QCloseEvent)
+16 (int (*)(...))QCloseEvent::~QCloseEvent
+24 (int (*)(...))QCloseEvent::~QCloseEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QCloseEvent
+ size=16 align=8
+ base size=16 base align=8
+QCloseEvent (0x0x7fec3a7bd068) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+ QEvent (0x0x7fec38e96900) 0
+ primary-for QCloseEvent (0x0x7fec3a7bd068)
+
+Vtable for QIconDragEvent
+QIconDragEvent::_ZTV14QIconDragEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QIconDragEvent)
+16 (int (*)(...))QIconDragEvent::~QIconDragEvent
+24 (int (*)(...))QIconDragEvent::~QIconDragEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QIconDragEvent
+ size=16 align=8
+ base size=16 base align=8
+QIconDragEvent (0x0x7fec3a7bd9c0) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+ QEvent (0x0x7fec38e96960) 0
+ primary-for QIconDragEvent (0x0x7fec3a7bd9c0)
+
+Vtable for QShowEvent
+QShowEvent::_ZTV10QShowEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QShowEvent)
+16 (int (*)(...))QShowEvent::~QShowEvent
+24 (int (*)(...))QShowEvent::~QShowEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QShowEvent
+ size=16 align=8
+ base size=16 base align=8
+QShowEvent (0x0x7fec3a7bda28) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+ QEvent (0x0x7fec38e969c0) 0
+ primary-for QShowEvent (0x0x7fec3a7bda28)
+
+Vtable for QHideEvent
+QHideEvent::_ZTV10QHideEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHideEvent)
+16 (int (*)(...))QHideEvent::~QHideEvent
+24 (int (*)(...))QHideEvent::~QHideEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QHideEvent
+ size=16 align=8
+ base size=16 base align=8
+QHideEvent (0x0x7fec3a847270) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+ QEvent (0x0x7fec38e96a20) 0
+ primary-for QHideEvent (0x0x7fec3a847270)
+
+Vtable for QContextMenuEvent
+QContextMenuEvent::_ZTV17QContextMenuEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QContextMenuEvent)
+16 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+24 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QContextMenuEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QContextMenuEvent
+ size=64 align=8
+ base size=57 base align=8
+QContextMenuEvent (0x0x7fec3a8472d8) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+ QInputEvent (0x0x7fec3a895340) 0
+ primary-for QContextMenuEvent (0x0x7fec3a8472d8)
+ QEvent (0x0x7fec38e96a80) 0
+ primary-for QInputEvent (0x0x7fec3a895340)
+
+Class QInputMethodEvent::Attribute
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodEvent::Attribute (0x0x7fec38eb9060) 0
+
+Vtable for QInputMethodEvent
+QInputMethodEvent::_ZTV17QInputMethodEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QInputMethodEvent)
+16 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+24 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputMethodEvent::clone
+
+Class QInputMethodEvent
+ size=96 align=8
+ base size=96 base align=8
+QInputMethodEvent (0x0x7fec3a8953a8) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+ QEvent (0x0x7fec38eb9000) 0
+ primary-for QInputMethodEvent (0x0x7fec3a8953a8)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=40 align=8
+ base size=40 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7fec38b01840) 0
+
+Vtable for QInputMethodQueryEvent
+QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QInputMethodQueryEvent)
+16 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+24 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputMethodQueryEvent::clone
+
+Class QInputMethodQueryEvent
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodQueryEvent (0x0x7fec39ff25b0) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+ QEvent (0x0x7fec38b017e0) 0
+ primary-for QInputMethodQueryEvent (0x0x7fec39ff25b0)
+
+Vtable for QDropEvent
+QDropEvent::_ZTV10QDropEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDropEvent)
+16 (int (*)(...))QDropEvent::~QDropEvent
+24 (int (*)(...))QDropEvent::~QDropEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDropEvent::clone
+
+Class QDropEvent
+ size=64 align=8
+ base size=64 base align=8
+QDropEvent (0x0x7fec38b49478) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+ QEvent (0x0x7fec38b44960) 0
+ primary-for QDropEvent (0x0x7fec38b49478)
+
+Vtable for QDragMoveEvent
+QDragMoveEvent::_ZTV14QDragMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDragMoveEvent)
+16 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+24 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDragMoveEvent::clone
+
+Class QDragMoveEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragMoveEvent (0x0x7fec38b494e0) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+ QDropEvent (0x0x7fec38b49548) 0
+ primary-for QDragMoveEvent (0x0x7fec38b494e0)
+ QEvent (0x0x7fec38b570c0) 0
+ primary-for QDropEvent (0x0x7fec38b49548)
+
+Vtable for QDragEnterEvent
+QDragEnterEvent::_ZTV15QDragEnterEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragEnterEvent)
+16 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+24 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDragMoveEvent::clone
+
+Class QDragEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragEnterEvent (0x0x7fec38b495b0) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+ QDragMoveEvent (0x0x7fec38b49618) 0
+ primary-for QDragEnterEvent (0x0x7fec38b495b0)
+ QDropEvent (0x0x7fec38b49680) 0
+ primary-for QDragMoveEvent (0x0x7fec38b49618)
+ QEvent (0x0x7fec38b57540) 0
+ primary-for QDropEvent (0x0x7fec38b49680)
+
+Vtable for QDragLeaveEvent
+QDragLeaveEvent::_ZTV15QDragLeaveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragLeaveEvent)
+16 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+24 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QDragLeaveEvent
+ size=16 align=8
+ base size=16 base align=8
+QDragLeaveEvent (0x0x7fec38b496e8) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+ QEvent (0x0x7fec38b575a0) 0
+ primary-for QDragLeaveEvent (0x0x7fec38b496e8)
+
+Vtable for QHelpEvent
+QHelpEvent::_ZTV10QHelpEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHelpEvent)
+16 (int (*)(...))QHelpEvent::~QHelpEvent
+24 (int (*)(...))QHelpEvent::~QHelpEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QHelpEvent::clone
+
+Class QHelpEvent
+ size=32 align=8
+ base size=32 base align=8
+QHelpEvent (0x0x7fec38b49750) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+ QEvent (0x0x7fec38b57600) 0
+ primary-for QHelpEvent (0x0x7fec38b49750)
+
+Vtable for QStatusTipEvent
+QStatusTipEvent::_ZTV15QStatusTipEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QStatusTipEvent)
+16 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+24 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QStatusTipEvent::clone
+
+Class QStatusTipEvent
+ size=40 align=8
+ base size=40 base align=8
+QStatusTipEvent (0x0x7fec38b497b8) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+ QEvent (0x0x7fec38b57ae0) 0
+ primary-for QStatusTipEvent (0x0x7fec38b497b8)
+
+Vtable for QWhatsThisClickedEvent
+QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QWhatsThisClickedEvent)
+16 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+24 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QWhatsThisClickedEvent::clone
+
+Class QWhatsThisClickedEvent
+ size=40 align=8
+ base size=40 base align=8
+QWhatsThisClickedEvent (0x0x7fec38b49820) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+ QEvent (0x0x7fec38b57d80) 0
+ primary-for QWhatsThisClickedEvent (0x0x7fec38b49820)
+
+Vtable for QActionEvent
+QActionEvent::_ZTV12QActionEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionEvent)
+16 (int (*)(...))QActionEvent::~QActionEvent
+24 (int (*)(...))QActionEvent::~QActionEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QActionEvent::clone
+
+Class QActionEvent
+ size=32 align=8
+ base size=32 base align=8
+QActionEvent (0x0x7fec38b49888) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+ QEvent (0x0x7fec38b76060) 0
+ primary-for QActionEvent (0x0x7fec38b49888)
+
+Vtable for QFileOpenEvent
+QFileOpenEvent::_ZTV14QFileOpenEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QFileOpenEvent)
+16 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+24 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QFileOpenEvent::clone
+
+Class QFileOpenEvent
+ size=48 align=8
+ base size=48 base align=8
+QFileOpenEvent (0x0x7fec38b498f0) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+ QEvent (0x0x7fec38b763c0) 0
+ primary-for QFileOpenEvent (0x0x7fec38b498f0)
+
+Vtable for QToolBarChangeEvent
+QToolBarChangeEvent::_ZTV19QToolBarChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QToolBarChangeEvent)
+16 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+24 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QToolBarChangeEvent::clone
+
+Class QToolBarChangeEvent
+ size=24 align=8
+ base size=17 base align=8
+QToolBarChangeEvent (0x0x7fec38b49958) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+ QEvent (0x0x7fec38b766c0) 0
+ primary-for QToolBarChangeEvent (0x0x7fec38b49958)
+
+Vtable for QShortcutEvent
+QShortcutEvent::_ZTV14QShortcutEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QShortcutEvent)
+16 (int (*)(...))QShortcutEvent::~QShortcutEvent
+24 (int (*)(...))QShortcutEvent::~QShortcutEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QShortcutEvent::clone
+
+Class QShortcutEvent
+ size=32 align=8
+ base size=29 base align=8
+QShortcutEvent (0x0x7fec38b499c0) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+ QEvent (0x0x7fec38b769c0) 0
+ primary-for QShortcutEvent (0x0x7fec38b499c0)
+
+Vtable for QWindowStateChangeEvent
+QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QWindowStateChangeEvent)
+16 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+24 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QWindowStateChangeEvent::clone
+
+Class QWindowStateChangeEvent
+ size=24 align=8
+ base size=21 base align=8
+QWindowStateChangeEvent (0x0x7fec38b49a28) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+ QEvent (0x0x7fec38b76d20) 0
+ primary-for QWindowStateChangeEvent (0x0x7fec38b49a28)
+
+Vtable for QTouchEvent
+QTouchEvent::_ZTV11QTouchEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTouchEvent)
+16 (int (*)(...))QTouchEvent::~QTouchEvent
+24 (int (*)(...))QTouchEvent::~QTouchEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QTouchEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QTouchEvent::isBeginEvent
+64 (int (*)(...))QTouchEvent::isUpdateEvent
+72 (int (*)(...))QTouchEvent::isEndEvent
+
+Class QTouchEvent
+ size=80 align=8
+ base size=79 base align=8
+QTouchEvent (0x0x7fec38b49a90) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+ QPointerEvent (0x0x7fec38b49af8) 0
+ primary-for QTouchEvent (0x0x7fec38b49a90)
+ QInputEvent (0x0x7fec38b49b60) 0
+ primary-for QPointerEvent (0x0x7fec38b49af8)
+ QEvent (0x0x7fec38b92060) 0
+ primary-for QInputEvent (0x0x7fec38b49b60)
+
+Vtable for QScrollPrepareEvent
+QScrollPrepareEvent::_ZTV19QScrollPrepareEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollPrepareEvent)
+16 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+24 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScrollPrepareEvent::clone
+
+Class QScrollPrepareEvent
+ size=96 align=8
+ base size=96 base align=8
+QScrollPrepareEvent (0x0x7fec38b49bc8) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+ QEvent (0x0x7fec38b923c0) 0
+ primary-for QScrollPrepareEvent (0x0x7fec38b49bc8)
+
+Vtable for QScrollEvent
+QScrollEvent::_ZTV12QScrollEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QScrollEvent)
+16 (int (*)(...))QScrollEvent::~QScrollEvent
+24 (int (*)(...))QScrollEvent::~QScrollEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScrollEvent::clone
+
+Class QScrollEvent
+ size=56 align=8
+ base size=52 base align=8
+QScrollEvent (0x0x7fec38b49c30) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+ QEvent (0x0x7fec38b927e0) 0
+ primary-for QScrollEvent (0x0x7fec38b49c30)
+
+Vtable for QScreenOrientationChangeEvent
+QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QScreenOrientationChangeEvent)
+16 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+24 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScreenOrientationChangeEvent::clone
+
+Class QScreenOrientationChangeEvent
+ size=32 align=8
+ base size=28 base align=8
+QScreenOrientationChangeEvent (0x0x7fec38b49c98) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+ QEvent (0x0x7fec38b92ba0) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7fec38b49c98)
+
+Vtable for QApplicationStateChangeEvent
+QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QApplicationStateChangeEvent)
+16 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+24 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QApplicationStateChangeEvent::clone
+
+Class QApplicationStateChangeEvent
+ size=24 align=8
+ base size=20 base align=8
+QApplicationStateChangeEvent (0x0x7fec38b49d00) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+ QEvent (0x0x7fec38b92f00) 0
+ primary-for QApplicationStateChangeEvent (0x0x7fec38b49d00)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7fec38bb3240) 0
+
+Class QFontDatabase
+ size=1 align=1
+ base size=0 base align=1
+QFontDatabase (0x0x7fec38bf93c0) 0 empty
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7fec38bf95a0) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7fec38c45660) 0
+
+Class QBrushDataPointerDeleter
+ size=1 align=1
+ base size=0 base align=1
+QBrushDataPointerDeleter (0x0x7fec38c6de40) 0 empty
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7fec38c6dea0) 0
+
+Class QBrushData
+ size=104 align=8
+ base size=104 base align=8
+QBrushData (0x0x7fec38989900) 0
+
+Class QGradient::QGradientData
+ size=48 align=8
+ base size=48 base align=8
+QGradient::QGradientData (0x0x7fec38989b40) 0
+
+Class QGradient
+ size=88 align=8
+ base size=88 base align=8
+QGradient (0x0x7fec38989ae0) 0
+
+Class QLinearGradient
+ size=88 align=8
+ base size=88 base align=8
+QLinearGradient (0x0x7fec3898ed00) 0
+ QGradient (0x0x7fec389b1a20) 0
+
+Class QRadialGradient
+ size=88 align=8
+ base size=88 base align=8
+QRadialGradient (0x0x7fec3898ed68) 0
+ QGradient (0x0x7fec389b1b40) 0
+
+Class QConicalGradient
+ size=88 align=8
+ base size=88 base align=8
+QConicalGradient (0x0x7fec3898edd0) 0
+ QGradient (0x0x7fec389b1c60) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7fec389b1d20) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7fec38a39de0) 0
+
+Class QTextOption
+ size=24 align=8
+ base size=24 base align=8
+QTextOption (0x0x7fec38a39d80) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7fec38a821e0) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7fec38a9aea0) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7fec38737888) 0
+ QTextFormat (0x0x7fec3873b660) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7fec3879b618) 0
+ QTextFormat (0x0x7fec38797b40) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7fec387cc270) 0
+ QTextFormat (0x0x7fec387d00c0) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7fec387e7e38) 0
+ QTextCharFormat (0x0x7fec387e7ea0) 0
+ QTextFormat (0x0x7fec387e5f60) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7fec3880eaf8) 0
+ QTextFormat (0x0x7fec3880ade0) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7fec3883f750) 0
+ QTextFrameFormat (0x0x7fec3883f7b8) 0
+ QTextFormat (0x0x7fec38847240) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7fec3886a410) 0
+ QTextCharFormat (0x0x7fec3886a478) 0
+ QTextFormat (0x0x7fec3886d4e0) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7fec3889ba20) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7fec384fe120) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7fec384fe540) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7fec384fe4e0) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7fec3856c600) 0
+
+Vtable for QAbstractUndoItem
+QAbstractUndoItem::_ZTV17QAbstractUndoItem: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAbstractUndoItem)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractUndoItem
+ size=8 align=8
+ base size=8 base align=8
+QAbstractUndoItem (0x0x7fec3856ca80) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7fec3856cd20) 0 empty
+
+Vtable for QTextDocument
+QTextDocument::_ZTV13QTextDocument: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QTextDocument)
+16 (int (*)(...))QTextDocument::metaObject
+24 (int (*)(...))QTextDocument::qt_metacast
+32 (int (*)(...))QTextDocument::qt_metacall
+40 (int (*)(...))QTextDocument::~QTextDocument
+48 (int (*)(...))QTextDocument::~QTextDocument
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextDocument::clear
+120 (int (*)(...))QTextDocument::createObject
+128 (int (*)(...))QTextDocument::loadResource
+
+Class QTextDocument
+ size=16 align=8
+ base size=16 base align=8
+QTextDocument (0x0x7fec385750d0) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+ QObject (0x0x7fec3856ccc0) 0
+ primary-for QTextDocument (0x0x7fec385750d0)
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7fec385b7600) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7fec3863fa20) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7fec3863fa80) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=80 align=8
+ base size=80 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7fec3863fae0) 0
+
+Vtable for QAbstractTextDocumentLayout
+QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAbstractTextDocumentLayout)
+16 (int (*)(...))QAbstractTextDocumentLayout::metaObject
+24 (int (*)(...))QAbstractTextDocumentLayout::qt_metacast
+32 (int (*)(...))QAbstractTextDocumentLayout::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractTextDocumentLayout::resizeInlineObject
+176 (int (*)(...))QAbstractTextDocumentLayout::positionInlineObject
+184 (int (*)(...))QAbstractTextDocumentLayout::drawInlineObject
+
+Class QAbstractTextDocumentLayout
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTextDocumentLayout (0x0x7fec386444e0) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+ QObject (0x0x7fec3863f9c0) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7fec386444e0)
+
+Vtable for QTextObjectInterface
+QTextObjectInterface::_ZTV20QTextObjectInterface: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextObjectInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QTextObjectInterface
+ size=8 align=8
+ base size=8 base align=8
+QTextObjectInterface (0x0x7fec382e80c0) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7fec382e8300) 0
+
+Vtable for QAccessible::ActivationObserver
+QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN11QAccessible18ActivationObserverE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessible::ActivationObserver
+ size=8 align=8
+ base size=8 base align=8
+QAccessible::ActivationObserver (0x0x7fec382e8360) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7fec382e82a0) 0 empty
+
+Vtable for QAccessibleInterface
+QAccessibleInterface::_ZTV20QAccessibleInterface: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAccessibleInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QAccessibleInterface::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleInterface::focusChild
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleInterface (0x0x7fec382e8c60) 0 nearly-empty
+ vptr=((& QAccessibleInterface::_ZTV20QAccessibleInterface) + 16)
+
+Vtable for QAccessibleTextInterface
+QAccessibleTextInterface::_ZTV24QAccessibleTextInterface: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAccessibleTextInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))QAccessibleTextInterface::textBeforeOffset
+104 (int (*)(...))QAccessibleTextInterface::textAfterOffset
+112 (int (*)(...))QAccessibleTextInterface::textAtOffset
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTextInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTextInterface (0x0x7fec3832a060) 0 nearly-empty
+ vptr=((& QAccessibleTextInterface::_ZTV24QAccessibleTextInterface) + 16)
+
+Vtable for QAccessibleEditableTextInterface
+QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleEditableTextInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleEditableTextInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleEditableTextInterface (0x0x7fec3832a0c0) 0 nearly-empty
+ vptr=((& QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface) + 16)
+
+Vtable for QAccessibleValueInterface
+QAccessibleValueInterface::_ZTV25QAccessibleValueInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleValueInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleValueInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleValueInterface (0x0x7fec3832a120) 0 nearly-empty
+ vptr=((& QAccessibleValueInterface::_ZTV25QAccessibleValueInterface) + 16)
+
+Vtable for QAccessibleTableCellInterface
+QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTableCellInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTableCellInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTableCellInterface (0x0x7fec3832a180) 0 nearly-empty
+ vptr=((& QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface) + 16)
+
+Vtable for QAccessibleTableInterface
+QAccessibleTableInterface::_ZTV25QAccessibleTableInterface: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleTableInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTableInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTableInterface (0x0x7fec3832a1e0) 0 nearly-empty
+ vptr=((& QAccessibleTableInterface::_ZTV25QAccessibleTableInterface) + 16)
+
+Vtable for QAccessibleActionInterface
+QAccessibleActionInterface::_ZTV26QAccessibleActionInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleActionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QAccessibleActionInterface::localizedActionName
+48 (int (*)(...))QAccessibleActionInterface::localizedActionDescription
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleActionInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleActionInterface (0x0x7fec3832a240) 0 nearly-empty
+ vptr=((& QAccessibleActionInterface::_ZTV26QAccessibleActionInterface) + 16)
+
+Vtable for QAccessibleImageInterface
+QAccessibleImageInterface::_ZTV25QAccessibleImageInterface: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleImageInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleImageInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleImageInterface (0x0x7fec3832a300) 0 nearly-empty
+ vptr=((& QAccessibleImageInterface::_ZTV25QAccessibleImageInterface) + 16)
+
+Vtable for QAccessibleHyperlinkInterface
+QAccessibleHyperlinkInterface::_ZTV29QAccessibleHyperlinkInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleHyperlinkInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleHyperlinkInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleHyperlinkInterface (0x0x7fec3832a360) 0 nearly-empty
+ vptr=((& QAccessibleHyperlinkInterface::_ZTV29QAccessibleHyperlinkInterface) + 16)
+
+Vtable for QAccessibleEvent
+QAccessibleEvent::_ZTV16QAccessibleEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAccessibleEvent)
+16 (int (*)(...))QAccessibleEvent::~QAccessibleEvent
+24 (int (*)(...))QAccessibleEvent::~QAccessibleEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleEvent
+ size=32 align=8
+ base size=28 base align=8
+QAccessibleEvent (0x0x7fec3832a3c0) 0
+ vptr=((& QAccessibleEvent::_ZTV16QAccessibleEvent) + 16)
+
+Vtable for QAccessibleStateChangeEvent
+QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleStateChangeEvent)
+16 (int (*)(...))QAccessibleStateChangeEvent::~QAccessibleStateChangeEvent
+24 (int (*)(...))QAccessibleStateChangeEvent::~QAccessibleStateChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleStateChangeEvent
+ size=40 align=8
+ base size=40 base align=8
+QAccessibleStateChangeEvent (0x0x7fec382e19c0) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+ QAccessibleEvent (0x0x7fec3832a900) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7fec382e19c0)
+
+Vtable for QAccessibleTextCursorEvent
+QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextCursorEvent)
+16 (int (*)(...))QAccessibleTextCursorEvent::~QAccessibleTextCursorEvent
+24 (int (*)(...))QAccessibleTextCursorEvent::~QAccessibleTextCursorEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextCursorEvent
+ size=32 align=8
+ base size=32 base align=8
+QAccessibleTextCursorEvent (0x0x7fec382e1a28) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+ QAccessibleEvent (0x0x7fec3832acc0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fec382e1a28)
+
+Vtable for QAccessibleTextSelectionEvent
+QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTextSelectionEvent)
+16 (int (*)(...))QAccessibleTextSelectionEvent::~QAccessibleTextSelectionEvent
+24 (int (*)(...))QAccessibleTextSelectionEvent::~QAccessibleTextSelectionEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextSelectionEvent
+ size=40 align=8
+ base size=40 base align=8
+QAccessibleTextSelectionEvent (0x0x7fec382e1a90) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7fec382e1af8) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7fec382e1a90)
+ QAccessibleEvent (0x0x7fec38359120) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fec382e1af8)
+
+Vtable for QAccessibleTextInsertEvent
+QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextInsertEvent)
+16 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+24 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextInsertEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleTextInsertEvent (0x0x7fec382e1b60) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7fec382e1bc8) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7fec382e1b60)
+ QAccessibleEvent (0x0x7fec383595a0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fec382e1bc8)
+
+Vtable for QAccessibleTextRemoveEvent
+QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextRemoveEvent)
+16 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+24 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextRemoveEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleTextRemoveEvent (0x0x7fec382e1c30) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7fec382e1c98) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7fec382e1c30)
+ QAccessibleEvent (0x0x7fec383599c0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fec382e1c98)
+
+Vtable for QAccessibleTextUpdateEvent
+QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextUpdateEvent)
+16 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+24 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextUpdateEvent
+ size=88 align=8
+ base size=88 base align=8
+QAccessibleTextUpdateEvent (0x0x7fec382e1d00) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7fec382e1d68) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7fec382e1d00)
+ QAccessibleEvent (0x0x7fec38359de0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fec382e1d68)
+
+Vtable for QAccessibleValueChangeEvent
+QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleValueChangeEvent)
+16 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+24 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleValueChangeEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleValueChangeEvent (0x0x7fec382e1dd0) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+ QAccessibleEvent (0x0x7fec383742a0) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7fec382e1dd0)
+
+Vtable for QAccessibleTableModelChangeEvent
+QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleTableModelChangeEvent)
+16 (int (*)(...))QAccessibleTableModelChangeEvent::~QAccessibleTableModelChangeEvent
+24 (int (*)(...))QAccessibleTableModelChangeEvent::~QAccessibleTableModelChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTableModelChangeEvent
+ size=48 align=8
+ base size=48 base align=8
+QAccessibleTableModelChangeEvent (0x0x7fec382e1e38) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+ QAccessibleEvent (0x0x7fec383746c0) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7fec382e1e38)
+
+Vtable for QAccessibleBridge
+QAccessibleBridge::_ZTV17QAccessibleBridge: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleBridge)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridge
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleBridge (0x0x7fec38374f60) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7fec3838e240) 0 empty
+
+Vtable for QAccessibleBridgePlugin
+QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QAccessibleBridgePlugin)
+16 (int (*)(...))QAccessibleBridgePlugin::metaObject
+24 (int (*)(...))QAccessibleBridgePlugin::qt_metacast
+32 (int (*)(...))QAccessibleBridgePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridgePlugin
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleBridgePlugin (0x0x7fec382e1ea0) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+ QObject (0x0x7fec3838e1e0) 0
+ primary-for QAccessibleBridgePlugin (0x0x7fec382e1ea0)
+
+Vtable for QAccessibleObject
+QAccessibleObject::_ZTV17QAccessibleObject: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleObject)
+16 0
+24 0
+32 (int (*)(...))QAccessibleObject::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleInterface::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleInterface::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleObject::rect
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleObject
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleObject (0x0x7fec382e1f08) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+ QAccessibleInterface (0x0x7fec3838e300) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7fec382e1f08)
+
+Vtable for QAccessibleApplication
+QAccessibleApplication::_ZTV22QAccessibleApplication: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QAccessibleApplication)
+16 (int (*)(...))QAccessibleApplication::~QAccessibleApplication
+24 (int (*)(...))QAccessibleApplication::~QAccessibleApplication
+32 (int (*)(...))QAccessibleObject::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleApplication::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleApplication::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))QAccessibleApplication::parent
+88 (int (*)(...))QAccessibleApplication::child
+96 (int (*)(...))QAccessibleApplication::childCount
+104 (int (*)(...))QAccessibleApplication::indexOfChild
+112 (int (*)(...))QAccessibleApplication::text
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleObject::rect
+136 (int (*)(...))QAccessibleApplication::role
+144 (int (*)(...))QAccessibleApplication::state
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleApplication
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleApplication (0x0x7fec382e1f70) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+ QAccessibleObject (0x0x7fec38398000) 0
+ primary-for QAccessibleApplication (0x0x7fec382e1f70)
+ QAccessibleInterface (0x0x7fec3838e360) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7fec38398000)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7fec3838e420) 0 empty
+
+Vtable for QAccessiblePlugin
+QAccessiblePlugin::_ZTV17QAccessiblePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessiblePlugin)
+16 (int (*)(...))QAccessiblePlugin::metaObject
+24 (int (*)(...))QAccessiblePlugin::qt_metacast
+32 (int (*)(...))QAccessiblePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessiblePlugin
+ size=16 align=8
+ base size=16 base align=8
+QAccessiblePlugin (0x0x7fec38398068) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+ QObject (0x0x7fec3838e3c0) 0
+ primary-for QAccessiblePlugin (0x0x7fec38398068)
+
+Class QAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAction::QPrivateSignal (0x0x7fec3838e540) 0 empty
+
+Vtable for QAction
+QAction::_ZTV7QAction: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QAction)
+16 (int (*)(...))QAction::metaObject
+24 (int (*)(...))QAction::qt_metacast
+32 (int (*)(...))QAction::qt_metacall
+40 (int (*)(...))QAction::~QAction
+48 (int (*)(...))QAction::~QAction
+56 (int (*)(...))QAction::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QAction
+ size=16 align=8
+ base size=16 base align=8
+QAction (0x0x7fec383980d0) 0
+ vptr=((& QAction::_ZTV7QAction) + 16)
+ QObject (0x0x7fec3838e4e0) 0
+ primary-for QAction (0x0x7fec383980d0)
+
+Class QActionGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QActionGroup::QPrivateSignal (0x0x7fec3838ee40) 0 empty
+
+Vtable for QActionGroup
+QActionGroup::_ZTV12QActionGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionGroup)
+16 (int (*)(...))QActionGroup::metaObject
+24 (int (*)(...))QActionGroup::qt_metacast
+32 (int (*)(...))QActionGroup::qt_metacall
+40 (int (*)(...))QActionGroup::~QActionGroup
+48 (int (*)(...))QActionGroup::~QActionGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QActionGroup
+ size=16 align=8
+ base size=16 base align=8
+QActionGroup (0x0x7fec38398138) 0
+ vptr=((& QActionGroup::_ZTV12QActionGroup) + 16)
+ QObject (0x0x7fec3838ede0) 0
+ primary-for QActionGroup (0x0x7fec38398138)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7fec383ce120) 0
+
+Vtable for QSurface
+QSurface::_ZTV8QSurface: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSurface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+
+Class QSurface
+ size=24 align=8
+ base size=24 base align=8
+QSurface (0x0x7fec383cea20) 0
+ vptr=((& QSurface::_ZTV8QSurface) + 16)
+
+Vtable for QBitmap
+QBitmap::_ZTV7QBitmap: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QBitmap)
+16 (int (*)(...))QBitmap::~QBitmap
+24 (int (*)(...))QBitmap::~QBitmap
+32 (int (*)(...))QPixmap::devType
+40 (int (*)(...))QPixmap::paintEngine
+48 (int (*)(...))QPixmap::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QBitmap
+ size=24 align=8
+ base size=24 base align=8
+QBitmap (0x0x7fec38398340) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+ QPixmap (0x0x7fec383983a8) 0
+ primary-for QBitmap (0x0x7fec38398340)
+ QPaintDevice (0x0x7fec384090c0) 0
+ primary-for QPixmap (0x0x7fec383983a8)
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7fec384219c0) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7fec38464c00) 0 empty
+
+Vtable for QWindow
+QWindow::_ZTV7QWindow: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWindow)
+16 (int (*)(...))QWindow::metaObject
+24 (int (*)(...))QWindow::qt_metacast
+32 (int (*)(...))QWindow::qt_metacall
+40 (int (*)(...))QWindow::~QWindow
+48 (int (*)(...))QWindow::~QWindow
+56 (int (*)(...))QWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI7QWindow)
+328 (int (*)(...))QWindow::_ZThn16_N7QWindowD1Ev
+336 (int (*)(...))QWindow::_ZThn16_N7QWindowD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QWindow
+ size=40 align=8
+ base size=40 base align=8
+QWindow (0x0x7fec383d6d20) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+ QObject (0x0x7fec38464b40) 0
+ primary-for QWindow (0x0x7fec383d6d20)
+ QSurface (0x0x7fec38464ba0) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 328)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7fec384a24e0) 0
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7fec384a2600) 0 empty
+
+Vtable for QClipboard
+QClipboard::_ZTV10QClipboard: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QClipboard)
+16 (int (*)(...))QClipboard::metaObject
+24 (int (*)(...))QClipboard::qt_metacast
+32 (int (*)(...))QClipboard::qt_metacall
+40 (int (*)(...))QClipboard::~QClipboard
+48 (int (*)(...))QClipboard::~QClipboard
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QClipboard
+ size=16 align=8
+ base size=16 base align=8
+QClipboard (0x0x7fec3846ba90) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+ QObject (0x0x7fec384a25a0) 0
+ primary-for QClipboard (0x0x7fec3846ba90)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7fec384a2720) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7fec380fd720) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7fec381544e0) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7fec381545a0) 0 empty
+
+Vtable for QDrag
+QDrag::_ZTV5QDrag: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDrag)
+16 (int (*)(...))QDrag::metaObject
+24 (int (*)(...))QDrag::qt_metacast
+32 (int (*)(...))QDrag::qt_metacall
+40 (int (*)(...))QDrag::~QDrag
+48 (int (*)(...))QDrag::~QDrag
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDrag
+ size=16 align=8
+ base size=16 base align=8
+QDrag (0x0x7fec38153618) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+ QObject (0x0x7fec38154540) 0
+ primary-for QDrag (0x0x7fec38153618)
+
+Class QFileSystemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemModel::QPrivateSignal (0x0x7fec38154780) 0 empty
+
+Vtable for QFileSystemModel
+QFileSystemModel::_ZTV16QFileSystemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QFileSystemModel)
+16 (int (*)(...))QFileSystemModel::metaObject
+24 (int (*)(...))QFileSystemModel::qt_metacast
+32 (int (*)(...))QFileSystemModel::qt_metacall
+40 (int (*)(...))QFileSystemModel::~QFileSystemModel
+48 (int (*)(...))QFileSystemModel::~QFileSystemModel
+56 (int (*)(...))QFileSystemModel::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QFileSystemModel::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileSystemModel::index
+120 (int (*)(...))QFileSystemModel::parent
+128 (int (*)(...))QFileSystemModel::sibling
+136 (int (*)(...))QFileSystemModel::rowCount
+144 (int (*)(...))QFileSystemModel::columnCount
+152 (int (*)(...))QFileSystemModel::hasChildren
+160 (int (*)(...))QFileSystemModel::data
+168 (int (*)(...))QFileSystemModel::setData
+176 (int (*)(...))QFileSystemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QFileSystemModel::mimeTypes
+224 (int (*)(...))QFileSystemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QFileSystemModel::dropMimeData
+248 (int (*)(...))QFileSystemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QFileSystemModel::fetchMore
+320 (int (*)(...))QFileSystemModel::canFetchMore
+328 (int (*)(...))QFileSystemModel::flags
+336 (int (*)(...))QFileSystemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QFileSystemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QFileSystemModel
+ size=16 align=8
+ base size=16 base align=8
+QFileSystemModel (0x0x7fec38153680) 0
+ vptr=((& QFileSystemModel::_ZTV16QFileSystemModel) + 16)
+ QAbstractItemModel (0x0x7fec381536e8) 0
+ primary-for QFileSystemModel (0x0x7fec38153680)
+ QObject (0x0x7fec38154720) 0
+ primary-for QAbstractItemModel (0x0x7fec381536e8)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7fec38154e40) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7fec381b3780) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7fec381e41e0) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7fec38262ea0) 0 empty
+
+Vtable for QGenericPlugin
+QGenericPlugin::_ZTV14QGenericPlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGenericPlugin)
+16 (int (*)(...))QGenericPlugin::metaObject
+24 (int (*)(...))QGenericPlugin::qt_metacast
+32 (int (*)(...))QGenericPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QGenericPlugin
+ size=16 align=8
+ base size=16 base align=8
+QGenericPlugin (0x0x7fec3823b820) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+ QObject (0x0x7fec38262e40) 0
+ primary-for QGenericPlugin (0x0x7fec3823b820)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7fec38262f60) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7fec38274060) 0 empty
+
+Vtable for QInputMethod
+QInputMethod::_ZTV12QInputMethod: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputMethod)
+16 (int (*)(...))QInputMethod::metaObject
+24 (int (*)(...))QInputMethod::qt_metacast
+32 (int (*)(...))QInputMethod::qt_metacall
+40 (int (*)(...))QInputMethod::~QInputMethod
+48 (int (*)(...))QInputMethod::~QInputMethod
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QInputMethod
+ size=16 align=8
+ base size=16 base align=8
+QInputMethod (0x0x7fec3823b888) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+ QObject (0x0x7fec38274000) 0
+ primary-for QInputMethod (0x0x7fec3823b888)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7fec38274300) 0 empty
+
+Vtable for QGuiApplication
+QGuiApplication::_ZTV15QGuiApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGuiApplication)
+16 (int (*)(...))QGuiApplication::metaObject
+24 (int (*)(...))QGuiApplication::qt_metacast
+32 (int (*)(...))QGuiApplication::qt_metacall
+40 (int (*)(...))QGuiApplication::~QGuiApplication
+48 (int (*)(...))QGuiApplication::~QGuiApplication
+56 (int (*)(...))QGuiApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGuiApplication::notify
+120 (int (*)(...))QGuiApplication::compressEvent
+
+Class QGuiApplication
+ size=16 align=8
+ base size=16 base align=8
+QGuiApplication (0x0x7fec3823b8f0) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+ QCoreApplication (0x0x7fec3823b958) 0
+ primary-for QGuiApplication (0x0x7fec3823b8f0)
+ QObject (0x0x7fec382742a0) 0
+ primary-for QCoreApplication (0x0x7fec3823b958)
+
+Class QNativeInterface::QX11Application::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QX11Application::TypeInfo (0x0x7fec38274600) 0 empty
+
+Vtable for QNativeInterface::QX11Application
+QNativeInterface::QX11Application::_ZTVN16QNativeInterface15QX11ApplicationE: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface15QX11ApplicationE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QX11Application
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QX11Application (0x0x7fec382745a0) 0 nearly-empty
+ vptr=((& QNativeInterface::QX11Application::_ZTVN16QNativeInterface15QX11ApplicationE) + 16)
+
+Class QIconEngine::ScaledPixmapArgument
+ size=48 align=8
+ base size=48 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7fec382746c0) 0
+
+Vtable for QIconEngine
+QIconEngine::_ZTV11QIconEngine: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QIconEngine)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QIconEngine::actualSize
+48 (int (*)(...))QIconEngine::pixmap
+56 (int (*)(...))QIconEngine::addPixmap
+64 (int (*)(...))QIconEngine::addFile
+72 (int (*)(...))QIconEngine::key
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QIconEngine::read
+96 (int (*)(...))QIconEngine::write
+104 (int (*)(...))QIconEngine::availableSizes
+112 (int (*)(...))QIconEngine::iconName
+120 (int (*)(...))QIconEngine::isNull
+128 (int (*)(...))QIconEngine::scaledPixmap
+136 (int (*)(...))QIconEngine::virtual_hook
+
+Class QIconEngine
+ size=8 align=8
+ base size=8 base align=8
+QIconEngine (0x0x7fec38274660) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7fec38274780) 0 empty
+
+Vtable for QIconEnginePlugin
+QIconEnginePlugin::_ZTV17QIconEnginePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QIconEnginePlugin)
+16 (int (*)(...))QIconEnginePlugin::metaObject
+24 (int (*)(...))QIconEnginePlugin::qt_metacast
+32 (int (*)(...))QIconEnginePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QIconEnginePlugin
+ size=16 align=8
+ base size=16 base align=8
+QIconEnginePlugin (0x0x7fec3823b9c0) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+ QObject (0x0x7fec38274720) 0
+ primary-for QIconEnginePlugin (0x0x7fec3823b9c0)
+
+Vtable for QImageIOHandler
+QImageIOHandler::_ZTV15QImageIOHandler: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QImageIOHandler)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QImageIOHandler::write
+56 (int (*)(...))QImageIOHandler::option
+64 (int (*)(...))QImageIOHandler::setOption
+72 (int (*)(...))QImageIOHandler::supportsOption
+80 (int (*)(...))QImageIOHandler::jumpToNextImage
+88 (int (*)(...))QImageIOHandler::jumpToImage
+96 (int (*)(...))QImageIOHandler::loopCount
+104 (int (*)(...))QImageIOHandler::imageCount
+112 (int (*)(...))QImageIOHandler::nextImageDelay
+120 (int (*)(...))QImageIOHandler::currentImageNumber
+128 (int (*)(...))QImageIOHandler::currentImageRect
+
+Class QImageIOHandler
+ size=16 align=8
+ base size=16 base align=8
+QImageIOHandler (0x0x7fec38274840) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7fec38274a80) 0 empty
+
+Vtable for QImageIOPlugin
+QImageIOPlugin::_ZTV14QImageIOPlugin: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QImageIOPlugin)
+16 (int (*)(...))QImageIOPlugin::metaObject
+24 (int (*)(...))QImageIOPlugin::qt_metacast
+32 (int (*)(...))QImageIOPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QImageIOPlugin
+ size=16 align=8
+ base size=16 base align=8
+QImageIOPlugin (0x0x7fec3823ba28) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+ QObject (0x0x7fec38274a20) 0
+ primary-for QImageIOPlugin (0x0x7fec3823ba28)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7fec38274f00) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7fec37ee1000) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7fec37ee10c0) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7fec37f1bde0) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7fec37f8e360) 0 empty
+
+Vtable for QMovie
+QMovie::_ZTV6QMovie: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QMovie)
+16 (int (*)(...))QMovie::metaObject
+24 (int (*)(...))QMovie::qt_metacast
+32 (int (*)(...))QMovie::qt_metacall
+40 (int (*)(...))QMovie::~QMovie
+48 (int (*)(...))QMovie::~QMovie
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QMovie
+ size=16 align=8
+ base size=16 base align=8
+QMovie (0x0x7fec37f78270) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+ QObject (0x0x7fec37f8e300) 0
+ primary-for QMovie (0x0x7fec37f78270)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7fec37f8e720) 0 empty
+
+Vtable for QOffscreenSurface
+QOffscreenSurface::_ZTV17QOffscreenSurface: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QOffscreenSurface)
+16 (int (*)(...))QOffscreenSurface::metaObject
+24 (int (*)(...))QOffscreenSurface::qt_metacast
+32 (int (*)(...))QOffscreenSurface::qt_metacall
+40 (int (*)(...))QOffscreenSurface::~QOffscreenSurface
+48 (int (*)(...))QOffscreenSurface::~QOffscreenSurface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QOffscreenSurface::surfaceType
+120 (int (*)(...))QOffscreenSurface::format
+128 (int (*)(...))QOffscreenSurface::size
+136 (int (*)(...))QOffscreenSurface::surfaceHandle
+144 (int (*)(...))-16
+152 (int (*)(...))(& _ZTI17QOffscreenSurface)
+160 (int (*)(...))QOffscreenSurface::_ZThn16_N17QOffscreenSurfaceD1Ev
+168 (int (*)(...))QOffscreenSurface::_ZThn16_N17QOffscreenSurfaceD0Ev
+176 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface6formatEv
+184 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface13surfaceHandleEv
+192 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface11surfaceTypeEv
+200 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface4sizeEv
+
+Class QOffscreenSurface
+ size=40 align=8
+ base size=40 base align=8
+QOffscreenSurface (0x0x7fec37f795b0) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+ QObject (0x0x7fec37f8e660) 0
+ primary-for QOffscreenSurface (0x0x7fec37f795b0)
+ QSurface (0x0x7fec37f8e6c0) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7fec37f8e9c0) 0 empty
+
+Vtable for QOpenGLContextGroup
+QOpenGLContextGroup::_ZTV19QOpenGLContextGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QOpenGLContextGroup)
+16 (int (*)(...))QOpenGLContextGroup::metaObject
+24 (int (*)(...))QOpenGLContextGroup::qt_metacast
+32 (int (*)(...))QOpenGLContextGroup::qt_metacall
+40 (int (*)(...))QOpenGLContextGroup::~QOpenGLContextGroup
+48 (int (*)(...))QOpenGLContextGroup::~QOpenGLContextGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLContextGroup
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLContextGroup (0x0x7fec37f782d8) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+ QObject (0x0x7fec37f8e960) 0
+ primary-for QOpenGLContextGroup (0x0x7fec37f782d8)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7fec37f8eba0) 0 empty
+
+Vtable for QOpenGLContext
+QOpenGLContext::_ZTV14QOpenGLContext: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QOpenGLContext)
+16 (int (*)(...))QOpenGLContext::metaObject
+24 (int (*)(...))QOpenGLContext::qt_metacast
+32 (int (*)(...))QOpenGLContext::qt_metacall
+40 (int (*)(...))QOpenGLContext::~QOpenGLContext
+48 (int (*)(...))QOpenGLContext::~QOpenGLContext
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLContext
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLContext (0x0x7fec37f78340) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+ QObject (0x0x7fec37f8eb40) 0
+ primary-for QOpenGLContext (0x0x7fec37f78340)
+
+Class QNativeInterface::QGLXContext::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QGLXContext::TypeInfo (0x0x7fec37f8ede0) 0 empty
+
+Vtable for QNativeInterface::QGLXContext
+QNativeInterface::QGLXContext::_ZTVN16QNativeInterface11QGLXContextE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QGLXContextE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QGLXContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QGLXContext (0x0x7fec37f8ed80) 0 nearly-empty
+ vptr=((& QNativeInterface::QGLXContext::_ZTVN16QNativeInterface11QGLXContextE) + 16)
+
+Class QNativeInterface::QEGLContext::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QEGLContext::TypeInfo (0x0x7fec37f8eea0) 0 empty
+
+Vtable for QNativeInterface::QEGLContext
+QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QEGLContextE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QEGLContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QEGLContext (0x0x7fec37f8ee40) 0 nearly-empty
+ vptr=((& QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE) + 16)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7fec37f8ef00) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7fec37adc5a0) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7fec37adc540) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7fec37f78750) 0
+ QOpenGLFunctions (0x0x7fec37b50d20) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7fec37ba90c0) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7fec37f787b8) 0
+ QOpenGLFunctionsPrivate (0x0x7fec37ba9060) 0
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7fec37c83d80) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7fec3790d3c0) 0
+
+Class QPageRanges::Range
+ size=8 align=4
+ base size=8 base align=4
+QPageRanges::Range (0x0x7fec379c13c0) 0
+
+Class QPageRanges
+ size=8 align=8
+ base size=8 base align=8
+QPageRanges (0x0x7fec379c1360) 0
+
+Vtable for QPagedPaintDevice
+QPagedPaintDevice::_ZTV17QPagedPaintDevice: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QPagedPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QPagedPaintDevice::setPageLayout
+96 (int (*)(...))QPagedPaintDevice::setPageSize
+104 (int (*)(...))QPagedPaintDevice::setPageOrientation
+112 (int (*)(...))QPagedPaintDevice::setPageMargins
+120 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPagedPaintDevice
+ size=24 align=8
+ base size=24 base align=8
+QPagedPaintDevice (0x0x7fec37a37618) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+ QPaintDevice (0x0x7fec37a38960) 0
+ primary-for QPagedPaintDevice (0x0x7fec37a37618)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7fec37a38ae0) 0 empty
+
+Vtable for QPaintDeviceWindow
+QPaintDeviceWindow::_ZTV18QPaintDeviceWindow: 59 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+16 (int (*)(...))QPaintDeviceWindow::metaObject
+24 (int (*)(...))QPaintDeviceWindow::qt_metacast
+32 (int (*)(...))QPaintDeviceWindow::qt_metacall
+40 (int (*)(...))QPaintDeviceWindow::~QPaintDeviceWindow
+48 (int (*)(...))QPaintDeviceWindow::~QPaintDeviceWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QPaintDeviceWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QPaintDeviceWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))-16
+336 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+344 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD1Ev
+352 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD0Ev
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+384 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+392 (int (*)(...))-40
+400 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+408 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD1Ev
+416 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD0Ev
+424 (int (*)(...))QPaintDevice::devType
+432 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+440 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+448 (int (*)(...))QPaintDevice::initPainter
+456 (int (*)(...))QPaintDevice::redirected
+464 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDeviceWindow
+ size=56 align=8
+ base size=50 base align=8
+QPaintDeviceWindow (0x0x7fec37985230) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+ QWindow (0x0x7fec379852a0) 0
+ primary-for QPaintDeviceWindow (0x0x7fec37985230)
+ QObject (0x0x7fec37a389c0) 0
+ primary-for QWindow (0x0x7fec379852a0)
+ QSurface (0x0x7fec37a38a20) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 344)
+ QPaintDevice (0x0x7fec37a38a80) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 408)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7fec37a38cc0) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7fec37a38c60) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7fec3786b8a0) 0 empty
+
+Vtable for QPaintEngine
+QPaintEngine::_ZTV12QPaintEngine: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintEngine)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))QPaintEngine::drawRects
+64 (int (*)(...))QPaintEngine::drawRects
+72 (int (*)(...))QPaintEngine::drawLines
+80 (int (*)(...))QPaintEngine::drawLines
+88 (int (*)(...))QPaintEngine::drawEllipse
+96 (int (*)(...))QPaintEngine::drawEllipse
+104 (int (*)(...))QPaintEngine::drawPath
+112 (int (*)(...))QPaintEngine::drawPoints
+120 (int (*)(...))QPaintEngine::drawPoints
+128 (int (*)(...))QPaintEngine::drawPolygon
+136 (int (*)(...))QPaintEngine::drawPolygon
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QPaintEngine::drawTextItem
+160 (int (*)(...))QPaintEngine::drawTiledPixmap
+168 (int (*)(...))QPaintEngine::drawImage
+176 (int (*)(...))QPaintEngine::coordinateOffset
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))QPaintEngine::createPixmap
+200 (int (*)(...))QPaintEngine::createPixmapFromImage
+
+Class QPaintEngine
+ size=32 align=8
+ base size=32 base align=8
+QPaintEngine (0x0x7fec378ac0c0) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7fec378ac6c0) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7fec375493c0) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7fec37549360) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7fec375ea6c0) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7fec375eaea0) 0 empty
+
+Vtable for QPdfWriter
+QPdfWriter::_ZTV10QPdfWriter: 33 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QPdfWriter)
+16 (int (*)(...))QPdfWriter::metaObject
+24 (int (*)(...))QPdfWriter::qt_metacast
+32 (int (*)(...))QPdfWriter::qt_metacall
+40 (int (*)(...))QPdfWriter::~QPdfWriter
+48 (int (*)(...))QPdfWriter::~QPdfWriter
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPdfWriter::newPage
+120 (int (*)(...))QPdfWriter::paintEngine
+128 (int (*)(...))QPdfWriter::metric
+136 (int (*)(...))-16
+144 (int (*)(...))(& _ZTI10QPdfWriter)
+152 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD1Ev
+160 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD0Ev
+168 (int (*)(...))QPaintDevice::devType
+176 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter11paintEngineEv
+184 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter6metricEN12QPaintDevice17PaintDeviceMetricE
+192 (int (*)(...))QPaintDevice::initPainter
+200 (int (*)(...))QPaintDevice::redirected
+208 (int (*)(...))QPaintDevice::sharedPainter
+216 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter7newPageEv
+224 (int (*)(...))QPagedPaintDevice::setPageLayout
+232 (int (*)(...))QPagedPaintDevice::setPageSize
+240 (int (*)(...))QPagedPaintDevice::setPageOrientation
+248 (int (*)(...))QPagedPaintDevice::setPageMargins
+256 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPdfWriter
+ size=40 align=8
+ base size=40 base align=8
+QPdfWriter (0x0x7fec37571930) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+ QObject (0x0x7fec375eade0) 0
+ primary-for QPdfWriter (0x0x7fec37571930)
+ QPagedPaintDevice (0x0x7fec375ee478) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 152)
+ QPaintDevice (0x0x7fec375eae40) 16
+ primary-for QPagedPaintDevice (0x0x7fec375ee478)
+
+Vtable for QPicture
+QPicture::_ZTV8QPicture: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QPicture)
+16 (int (*)(...))QPicture::~QPicture
+24 (int (*)(...))QPicture::~QPicture
+32 (int (*)(...))QPicture::devType
+40 (int (*)(...))QPicture::paintEngine
+48 (int (*)(...))QPicture::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QPicture::setData
+
+Class QPicture
+ size=24 align=8
+ base size=24 base align=8
+QPicture (0x0x7fec375ee4e0) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+ QPaintDevice (0x0x7fec37621060) 0
+ primary-for QPicture (0x0x7fec375ee4e0)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7fec37658b40) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7fec37658ae0) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7fec376adde0) 0 empty
+
+Vtable for QRasterWindow
+QRasterWindow::_ZTV13QRasterWindow: 60 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QRasterWindow)
+16 (int (*)(...))QRasterWindow::metaObject
+24 (int (*)(...))QRasterWindow::qt_metacast
+32 (int (*)(...))QRasterWindow::qt_metacall
+40 (int (*)(...))QRasterWindow::~QRasterWindow
+48 (int (*)(...))QRasterWindow::~QRasterWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QPaintDeviceWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QRasterWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))QRasterWindow::redirected
+336 (int (*)(...))-16
+344 (int (*)(...))(& _ZTI13QRasterWindow)
+352 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD1Ev
+360 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD0Ev
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+384 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+392 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+400 (int (*)(...))-40
+408 (int (*)(...))(& _ZTI13QRasterWindow)
+416 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD1Ev
+424 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD0Ev
+432 (int (*)(...))QPaintDevice::devType
+440 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+448 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+456 (int (*)(...))QPaintDevice::initPainter
+464 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow10redirectedEP6QPoint
+472 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QRasterWindow
+ size=56 align=8
+ base size=50 base align=8
+QRasterWindow (0x0x7fec376b3a90) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+ QPaintDeviceWindow (0x0x7fec37684540) 0
+ primary-for QRasterWindow (0x0x7fec376b3a90)
+ QWindow (0x0x7fec376845b0) 0
+ primary-for QPaintDeviceWindow (0x0x7fec37684540)
+ QObject (0x0x7fec376adcc0) 0
+ primary-for QWindow (0x0x7fec376845b0)
+ QSurface (0x0x7fec376add20) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 352)
+ QPaintDevice (0x0x7fec376add80) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 416)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7fec372d4ae0) 0 empty
+
+Vtable for QSessionManager
+QSessionManager::_ZTV15QSessionManager: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSessionManager)
+16 (int (*)(...))QSessionManager::metaObject
+24 (int (*)(...))QSessionManager::qt_metacast
+32 (int (*)(...))QSessionManager::qt_metacall
+40 (int (*)(...))QSessionManager::~QSessionManager
+48 (int (*)(...))QSessionManager::~QSessionManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSessionManager
+ size=16 align=8
+ base size=16 base align=8
+QSessionManager (0x0x7fec376b3b60) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+ QObject (0x0x7fec372d4a80) 0
+ primary-for QSessionManager (0x0x7fec376b3b60)
+
+Class QShortcut::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QShortcut::QPrivateSignal (0x0x7fec372d4cc0) 0 empty
+
+Vtable for QShortcut
+QShortcut::_ZTV9QShortcut: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QShortcut)
+16 (int (*)(...))QShortcut::metaObject
+24 (int (*)(...))QShortcut::qt_metacast
+32 (int (*)(...))QShortcut::qt_metacall
+40 (int (*)(...))QShortcut::~QShortcut
+48 (int (*)(...))QShortcut::~QShortcut
+56 (int (*)(...))QShortcut::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QShortcut
+ size=16 align=8
+ base size=16 base align=8
+QShortcut (0x0x7fec376b3bc8) 0
+ vptr=((& QShortcut::_ZTV9QShortcut) + 16)
+ QObject (0x0x7fec372d4c60) 0
+ primary-for QShortcut (0x0x7fec376b3bc8)
+
+Vtable for QStandardItem
+QStandardItem::_ZTV13QStandardItem: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QStandardItem)
+16 (int (*)(...))QStandardItem::~QStandardItem
+24 (int (*)(...))QStandardItem::~QStandardItem
+32 (int (*)(...))QStandardItem::data
+40 (int (*)(...))QStandardItem::multiData
+48 (int (*)(...))QStandardItem::setData
+56 (int (*)(...))QStandardItem::clone
+64 (int (*)(...))QStandardItem::type
+72 (int (*)(...))QStandardItem::read
+80 (int (*)(...))QStandardItem::write
+88 (int (*)(...))QStandardItem::operator<
+
+Class QStandardItem
+ size=16 align=8
+ base size=16 base align=8
+QStandardItem (0x0x7fec373081e0) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7fec373f81e0) 0 empty
+
+Vtable for QStandardItemModel
+QStandardItemModel::_ZTV18QStandardItemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QStandardItemModel)
+16 (int (*)(...))QStandardItemModel::metaObject
+24 (int (*)(...))QStandardItemModel::qt_metacast
+32 (int (*)(...))QStandardItemModel::qt_metacall
+40 (int (*)(...))QStandardItemModel::~QStandardItemModel
+48 (int (*)(...))QStandardItemModel::~QStandardItemModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStandardItemModel::index
+120 (int (*)(...))QStandardItemModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QStandardItemModel::rowCount
+144 (int (*)(...))QStandardItemModel::columnCount
+152 (int (*)(...))QStandardItemModel::hasChildren
+160 (int (*)(...))QStandardItemModel::data
+168 (int (*)(...))QStandardItemModel::setData
+176 (int (*)(...))QStandardItemModel::headerData
+184 (int (*)(...))QStandardItemModel::setHeaderData
+192 (int (*)(...))QStandardItemModel::itemData
+200 (int (*)(...))QStandardItemModel::setItemData
+208 (int (*)(...))QStandardItemModel::clearItemData
+216 (int (*)(...))QStandardItemModel::mimeTypes
+224 (int (*)(...))QStandardItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QStandardItemModel::dropMimeData
+248 (int (*)(...))QStandardItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStandardItemModel::insertRows
+272 (int (*)(...))QStandardItemModel::insertColumns
+280 (int (*)(...))QStandardItemModel::removeRows
+288 (int (*)(...))QStandardItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStandardItemModel::flags
+336 (int (*)(...))QStandardItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QStandardItemModel::roleNames
+376 (int (*)(...))QStandardItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QStandardItemModel
+ size=16 align=8
+ base size=16 base align=8
+QStandardItemModel (0x0x7fec37393548) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+ QAbstractItemModel (0x0x7fec373935b0) 0
+ primary-for QStandardItemModel (0x0x7fec37393548)
+ QObject (0x0x7fec373f8180) 0
+ primary-for QAbstractItemModel (0x0x7fec373935b0)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7fec373f8540) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7fec374ad300) 0 empty
+
+Vtable for QStyleHints
+QStyleHints::_ZTV11QStyleHints: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QStyleHints)
+16 (int (*)(...))QStyleHints::metaObject
+24 (int (*)(...))QStyleHints::qt_metacast
+32 (int (*)(...))QStyleHints::qt_metacall
+40 (int (*)(...))QStyleHints::~QStyleHints
+48 (int (*)(...))QStyleHints::~QStyleHints
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QStyleHints
+ size=16 align=8
+ base size=16 base align=8
+QStyleHints (0x0x7fec374992d8) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+ QObject (0x0x7fec374ad2a0) 0
+ primary-for QStyleHints (0x0x7fec374992d8)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7fec374ad4e0) 0 empty
+
+Vtable for QTextObject
+QTextObject::_ZTV11QTextObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTextObject)
+16 (int (*)(...))QTextObject::metaObject
+24 (int (*)(...))QTextObject::qt_metacast
+32 (int (*)(...))QTextObject::qt_metacall
+40 (int (*)(...))QTextObject::~QTextObject
+48 (int (*)(...))QTextObject::~QTextObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextObject
+ size=16 align=8
+ base size=16 base align=8
+QTextObject (0x0x7fec37499340) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+ QObject (0x0x7fec374ad480) 0
+ primary-for QTextObject (0x0x7fec37499340)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7fec374ad6c0) 0 empty
+
+Vtable for QTextBlockGroup
+QTextBlockGroup::_ZTV15QTextBlockGroup: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QTextBlockGroup)
+16 (int (*)(...))QTextBlockGroup::metaObject
+24 (int (*)(...))QTextBlockGroup::qt_metacast
+32 (int (*)(...))QTextBlockGroup::qt_metacall
+40 (int (*)(...))QTextBlockGroup::~QTextBlockGroup
+48 (int (*)(...))QTextBlockGroup::~QTextBlockGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextBlockGroup::blockInserted
+120 (int (*)(...))QTextBlockGroup::blockRemoved
+128 (int (*)(...))QTextBlockGroup::blockFormatChanged
+
+Class QTextBlockGroup
+ size=16 align=8
+ base size=16 base align=8
+QTextBlockGroup (0x0x7fec374993a8) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+ QTextObject (0x0x7fec37499410) 0
+ primary-for QTextBlockGroup (0x0x7fec374993a8)
+ QObject (0x0x7fec374ad660) 0
+ primary-for QTextObject (0x0x7fec37499410)
+
+Vtable for QTextFrameLayoutData
+QTextFrameLayoutData::_ZTV20QTextFrameLayoutData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextFrameLayoutData)
+16 (int (*)(...))QTextFrameLayoutData::~QTextFrameLayoutData
+24 (int (*)(...))QTextFrameLayoutData::~QTextFrameLayoutData
+
+Class QTextFrameLayoutData
+ size=8 align=8
+ base size=8 base align=8
+QTextFrameLayoutData (0x0x7fec374ad840) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7fec374ad900) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7fec374ad960) 0
+
+Vtable for QTextFrame
+QTextFrame::_ZTV10QTextFrame: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextFrame)
+16 (int (*)(...))QTextFrame::metaObject
+24 (int (*)(...))QTextFrame::qt_metacast
+32 (int (*)(...))QTextFrame::qt_metacall
+40 (int (*)(...))QTextFrame::~QTextFrame
+48 (int (*)(...))QTextFrame::~QTextFrame
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextFrame
+ size=16 align=8
+ base size=16 base align=8
+QTextFrame (0x0x7fec37499478) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+ QTextObject (0x0x7fec374994e0) 0
+ primary-for QTextFrame (0x0x7fec37499478)
+ QObject (0x0x7fec374ad8a0) 0
+ primary-for QTextObject (0x0x7fec374994e0)
+
+Vtable for QTextBlockUserData
+QTextBlockUserData::_ZTV18QTextBlockUserData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QTextBlockUserData)
+16 (int (*)(...))QTextBlockUserData::~QTextBlockUserData
+24 (int (*)(...))QTextBlockUserData::~QTextBlockUserData
+
+Class QTextBlockUserData
+ size=8 align=8
+ base size=8 base align=8
+QTextBlockUserData (0x0x7fec371217e0) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7fec371218a0) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7fec37121840) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7fec371a9120) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7fec371cbf60) 0 empty
+
+Vtable for QSyntaxHighlighter
+QSyntaxHighlighter::_ZTV18QSyntaxHighlighter: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSyntaxHighlighter)
+16 (int (*)(...))QSyntaxHighlighter::metaObject
+24 (int (*)(...))QSyntaxHighlighter::qt_metacast
+32 (int (*)(...))QSyntaxHighlighter::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QSyntaxHighlighter
+ size=16 align=8
+ base size=16 base align=8
+QSyntaxHighlighter (0x0x7fec371dd680) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+ QObject (0x0x7fec371cbf00) 0
+ primary-for QSyntaxHighlighter (0x0x7fec371dd680)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7fec371f4120) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7fec371f4180) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7fec371f4240) 0 empty
+
+Vtable for QTextList
+QTextList::_ZTV9QTextList: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTextList)
+16 (int (*)(...))QTextList::metaObject
+24 (int (*)(...))QTextList::qt_metacast
+32 (int (*)(...))QTextList::qt_metacall
+40 (int (*)(...))QTextList::~QTextList
+48 (int (*)(...))QTextList::~QTextList
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextBlockGroup::blockInserted
+120 (int (*)(...))QTextBlockGroup::blockRemoved
+128 (int (*)(...))QTextBlockGroup::blockFormatChanged
+
+Class QTextList
+ size=16 align=8
+ base size=16 base align=8
+QTextList (0x0x7fec371dd6e8) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+ QTextBlockGroup (0x0x7fec371dd750) 0
+ primary-for QTextList (0x0x7fec371dd6e8)
+ QTextObject (0x0x7fec371dd7b8) 0
+ primary-for QTextBlockGroup (0x0x7fec371dd750)
+ QObject (0x0x7fec371f41e0) 0
+ primary-for QTextObject (0x0x7fec371dd7b8)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7fec371f4600) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7fec371f4e40) 0 empty
+
+Vtable for QTextTable
+QTextTable::_ZTV10QTextTable: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextTable)
+16 (int (*)(...))QTextTable::metaObject
+24 (int (*)(...))QTextTable::qt_metacast
+32 (int (*)(...))QTextTable::qt_metacall
+40 (int (*)(...))QTextTable::~QTextTable
+48 (int (*)(...))QTextTable::~QTextTable
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextTable
+ size=16 align=8
+ base size=16 base align=8
+QTextTable (0x0x7fec371dd820) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+ QTextFrame (0x0x7fec371dd888) 0
+ primary-for QTextTable (0x0x7fec371dd820)
+ QTextObject (0x0x7fec371dd8f0) 0
+ primary-for QTextFrame (0x0x7fec371dd888)
+ QObject (0x0x7fec371f4de0) 0
+ primary-for QTextObject (0x0x7fec371dd8f0)
+
+Class QUndoGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoGroup::QPrivateSignal (0x0x7fec3722d240) 0 empty
+
+Vtable for QUndoGroup
+QUndoGroup::_ZTV10QUndoGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUndoGroup)
+16 (int (*)(...))QUndoGroup::metaObject
+24 (int (*)(...))QUndoGroup::qt_metacast
+32 (int (*)(...))QUndoGroup::qt_metacall
+40 (int (*)(...))QUndoGroup::~QUndoGroup
+48 (int (*)(...))QUndoGroup::~QUndoGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QUndoGroup
+ size=16 align=8
+ base size=16 base align=8
+QUndoGroup (0x0x7fec371dd958) 0
+ vptr=((& QUndoGroup::_ZTV10QUndoGroup) + 16)
+ QObject (0x0x7fec3722d1e0) 0
+ primary-for QUndoGroup (0x0x7fec371dd958)
+
+Vtable for QUndoCommand
+QUndoCommand::_ZTV12QUndoCommand: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QUndoCommand)
+16 (int (*)(...))QUndoCommand::~QUndoCommand
+24 (int (*)(...))QUndoCommand::~QUndoCommand
+32 (int (*)(...))QUndoCommand::undo
+40 (int (*)(...))QUndoCommand::redo
+48 (int (*)(...))QUndoCommand::id
+56 (int (*)(...))QUndoCommand::mergeWith
+
+Class QUndoCommand
+ size=16 align=8
+ base size=16 base align=8
+QUndoCommand (0x0x7fec3722d3c0) 0
+ vptr=((& QUndoCommand::_ZTV12QUndoCommand) + 16)
+
+Class QUndoStack::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoStack::QPrivateSignal (0x0x7fec3722d480) 0 empty
+
+Vtable for QUndoStack
+QUndoStack::_ZTV10QUndoStack: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUndoStack)
+16 (int (*)(...))QUndoStack::metaObject
+24 (int (*)(...))QUndoStack::qt_metacast
+32 (int (*)(...))QUndoStack::qt_metacall
+40 (int (*)(...))QUndoStack::~QUndoStack
+48 (int (*)(...))QUndoStack::~QUndoStack
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QUndoStack
+ size=16 align=8
+ base size=16 base align=8
+QUndoStack (0x0x7fec371dd9c0) 0
+ vptr=((& QUndoStack::_ZTV10QUndoStack) + 16)
+ QObject (0x0x7fec3722d420) 0
+ primary-for QUndoStack (0x0x7fec371dd9c0)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7fec3722d660) 0 empty
+
+Vtable for QValidator
+QValidator::_ZTV10QValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QValidator)
+16 (int (*)(...))QValidator::metaObject
+24 (int (*)(...))QValidator::qt_metacast
+32 (int (*)(...))QValidator::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))QValidator::fixup
+
+Class QValidator
+ size=16 align=8
+ base size=16 base align=8
+QValidator (0x0x7fec371dda28) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+ QObject (0x0x7fec3722d600) 0
+ primary-for QValidator (0x0x7fec371dda28)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7fec3722d900) 0 empty
+
+Vtable for QIntValidator
+QIntValidator::_ZTV13QIntValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QIntValidator)
+16 (int (*)(...))QIntValidator::metaObject
+24 (int (*)(...))QIntValidator::qt_metacast
+32 (int (*)(...))QIntValidator::qt_metacall
+40 (int (*)(...))QIntValidator::~QIntValidator
+48 (int (*)(...))QIntValidator::~QIntValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIntValidator::validate
+120 (int (*)(...))QIntValidator::fixup
+
+Class QIntValidator
+ size=24 align=8
+ base size=24 base align=8
+QIntValidator (0x0x7fec371dda90) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+ QValidator (0x0x7fec371ddaf8) 0
+ primary-for QIntValidator (0x0x7fec371dda90)
+ QObject (0x0x7fec3722d8a0) 0
+ primary-for QValidator (0x0x7fec371ddaf8)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7fec3722dae0) 0 empty
+
+Vtable for QDoubleValidator
+QDoubleValidator::_ZTV16QDoubleValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QDoubleValidator)
+16 (int (*)(...))QDoubleValidator::metaObject
+24 (int (*)(...))QDoubleValidator::qt_metacast
+32 (int (*)(...))QDoubleValidator::qt_metacall
+40 (int (*)(...))QDoubleValidator::~QDoubleValidator
+48 (int (*)(...))QDoubleValidator::~QDoubleValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDoubleValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QDoubleValidator
+ size=40 align=8
+ base size=36 base align=8
+QDoubleValidator (0x0x7fec371ddb60) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+ QValidator (0x0x7fec371ddbc8) 0
+ primary-for QDoubleValidator (0x0x7fec371ddb60)
+ QObject (0x0x7fec3722da80) 0
+ primary-for QValidator (0x0x7fec371ddbc8)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7fec3722dea0) 0 empty
+
+Vtable for QRegularExpressionValidator
+QRegularExpressionValidator::_ZTV27QRegularExpressionValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QRegularExpressionValidator)
+16 (int (*)(...))QRegularExpressionValidator::metaObject
+24 (int (*)(...))QRegularExpressionValidator::qt_metacast
+32 (int (*)(...))QRegularExpressionValidator::qt_metacall
+40 (int (*)(...))QRegularExpressionValidator::~QRegularExpressionValidator
+48 (int (*)(...))QRegularExpressionValidator::~QRegularExpressionValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QRegularExpressionValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QRegularExpressionValidator
+ size=16 align=8
+ base size=16 base align=8
+QRegularExpressionValidator (0x0x7fec371ddc30) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+ QValidator (0x0x7fec371ddc98) 0
+ primary-for QRegularExpressionValidator (0x0x7fec371ddc30)
+ QObject (0x0x7fec3722de40) 0
+ primary-for QValidator (0x0x7fec371ddc98)
+
+Class QSizePolicy::Bits
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy::Bits (0x0x7fec372950c0) 0
+
+Class QSizePolicy
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy (0x0x7fec37295060) 0
+
+Class QWidgetData
+ size=88 align=8
+ base size=88 base align=8
+QWidgetData (0x0x7fec36f42120) 0
+
+Class QWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidget::QPrivateSignal (0x0x7fec36f42240) 0 empty
+
+Vtable for QWidget
+QWidget::_ZTV7QWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWidget)
+16 (int (*)(...))QWidget::metaObject
+24 (int (*)(...))QWidget::qt_metacast
+32 (int (*)(...))QWidget::qt_metacall
+40 (int (*)(...))QWidget::~QWidget
+48 (int (*)(...))QWidget::~QWidget
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI7QWidget)
+448 (int (*)(...))QWidget::_ZThn16_N7QWidgetD1Ev
+456 (int (*)(...))QWidget::_ZThn16_N7QWidgetD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWidget
+ size=40 align=8
+ base size=40 base align=8
+QWidget (0x0x7fec37277ee0) 0
+ vptr=((& QWidget::_ZTV7QWidget) + 16)
+ QObject (0x0x7fec36f42180) 0
+ primary-for QWidget (0x0x7fec37277ee0)
+ QPaintDevice (0x0x7fec36f421e0) 16
+ vptr=((& QWidget::_ZTV7QWidget) + 448)
+
+Class QAbstractButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractButton::QPrivateSignal (0x0x7fec37003ba0) 0 empty
+
+Vtable for QAbstractButton
+QAbstractButton::_ZTV15QAbstractButton: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractButton)
+16 (int (*)(...))QAbstractButton::metaObject
+24 (int (*)(...))QAbstractButton::qt_metacast
+32 (int (*)(...))QAbstractButton::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI15QAbstractButton)
+472 0
+480 0
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractButton
+ size=40 align=8
+ base size=40 base align=8
+QAbstractButton (0x0x7fec36f1fc98) 0
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 16)
+ QWidget (0x0x7fec3701d070) 0
+ primary-for QAbstractButton (0x0x7fec36f1fc98)
+ QObject (0x0x7fec37003ae0) 0
+ primary-for QWidget (0x0x7fec3701d070)
+ QPaintDevice (0x0x7fec37003b40) 16
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 472)
+
+Class QAbstractSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSpinBox::QPrivateSignal (0x0x7fec37003de0) 0 empty
+
+Vtable for QAbstractSpinBox
+QAbstractSpinBox::_ZTV16QAbstractSpinBox: 70 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAbstractSpinBox)
+16 (int (*)(...))QAbstractSpinBox::metaObject
+24 (int (*)(...))QAbstractSpinBox::qt_metacast
+32 (int (*)(...))QAbstractSpinBox::qt_metacall
+40 (int (*)(...))QAbstractSpinBox::~QAbstractSpinBox
+48 (int (*)(...))QAbstractSpinBox::~QAbstractSpinBox
+56 (int (*)(...))QAbstractSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSpinBox::validate
+440 (int (*)(...))QAbstractSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI16QAbstractSpinBox)
+496 (int (*)(...))QAbstractSpinBox::_ZThn16_N16QAbstractSpinBoxD1Ev
+504 (int (*)(...))QAbstractSpinBox::_ZThn16_N16QAbstractSpinBoxD0Ev
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QAbstractSpinBox (0x0x7fec36f1fd00) 0
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 16)
+ QWidget (0x0x7fec3701d0e0) 0
+ primary-for QAbstractSpinBox (0x0x7fec36f1fd00)
+ QObject (0x0x7fec37003d20) 0
+ primary-for QWidget (0x0x7fec3701d0e0)
+ QPaintDevice (0x0x7fec37003d80) 16
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 496)
+
+Class QAbstractSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSlider::QPrivateSignal (0x0x7fec37059660) 0 empty
+
+Vtable for QAbstractSlider
+QAbstractSlider::_ZTV15QAbstractSlider: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractSlider)
+16 (int (*)(...))QAbstractSlider::metaObject
+24 (int (*)(...))QAbstractSlider::qt_metacast
+32 (int (*)(...))QAbstractSlider::qt_metacall
+40 (int (*)(...))QAbstractSlider::~QAbstractSlider
+48 (int (*)(...))QAbstractSlider::~QAbstractSlider
+56 (int (*)(...))QAbstractSlider::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSlider::sliderChange
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI15QAbstractSlider)
+456 (int (*)(...))QAbstractSlider::_ZThn16_N15QAbstractSliderD1Ev
+464 (int (*)(...))QAbstractSlider::_ZThn16_N15QAbstractSliderD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractSlider
+ size=40 align=8
+ base size=40 base align=8
+QAbstractSlider (0x0x7fec36f1fea0) 0
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 16)
+ QWidget (0x0x7fec3701d5b0) 0
+ primary-for QAbstractSlider (0x0x7fec36f1fea0)
+ QObject (0x0x7fec370595a0) 0
+ primary-for QWidget (0x0x7fec3701d5b0)
+ QPaintDevice (0x0x7fec37059600) 16
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 456)
+
+Class QSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSlider::QPrivateSignal (0x0x7fec370598a0) 0 empty
+
+Vtable for QSlider
+QSlider::_ZTV7QSlider: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QSlider)
+16 (int (*)(...))QSlider::metaObject
+24 (int (*)(...))QSlider::qt_metacast
+32 (int (*)(...))QSlider::qt_metacall
+40 (int (*)(...))QSlider::~QSlider
+48 (int (*)(...))QSlider::~QSlider
+56 (int (*)(...))QSlider::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSlider::sizeHint
+136 (int (*)(...))QSlider::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSlider::mousePressEvent
+176 (int (*)(...))QSlider::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSlider::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSlider::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSlider::sliderChange
+440 (int (*)(...))QSlider::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI7QSlider)
+464 (int (*)(...))QSlider::_ZThn16_N7QSliderD1Ev
+472 (int (*)(...))QSlider::_ZThn16_N7QSliderD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSlider
+ size=40 align=8
+ base size=40 base align=8
+QSlider (0x0x7fec36f1ff08) 0
+ vptr=((& QSlider::_ZTV7QSlider) + 16)
+ QAbstractSlider (0x0x7fec36f1ff70) 0
+ primary-for QSlider (0x0x7fec36f1ff08)
+ QWidget (0x0x7fec3701db60) 0
+ primary-for QAbstractSlider (0x0x7fec36f1ff70)
+ QObject (0x0x7fec370597e0) 0
+ primary-for QWidget (0x0x7fec3701db60)
+ QPaintDevice (0x0x7fec37059840) 16
+ vptr=((& QSlider::_ZTV7QSlider) + 464)
+
+Class QStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyle::QPrivateSignal (0x0x7fec37059b40) 0 empty
+
+Vtable for QStyle
+QStyle::_ZTV6QStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QStyle)
+16 (int (*)(...))QStyle::metaObject
+24 (int (*)(...))QStyle::qt_metacast
+32 (int (*)(...))QStyle::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStyle::polish
+120 (int (*)(...))QStyle::unpolish
+128 (int (*)(...))QStyle::polish
+136 (int (*)(...))QStyle::unpolish
+144 (int (*)(...))QStyle::polish
+152 (int (*)(...))QStyle::itemTextRect
+160 (int (*)(...))QStyle::itemPixmapRect
+168 (int (*)(...))QStyle::drawItemText
+176 (int (*)(...))QStyle::drawItemPixmap
+184 (int (*)(...))QStyle::standardPalette
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+232 (int (*)(...))__cxa_pure_virtual
+240 (int (*)(...))__cxa_pure_virtual
+248 (int (*)(...))__cxa_pure_virtual
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))__cxa_pure_virtual
+272 (int (*)(...))__cxa_pure_virtual
+280 (int (*)(...))__cxa_pure_virtual
+288 (int (*)(...))__cxa_pure_virtual
+
+Class QStyle
+ size=16 align=8
+ base size=16 base align=8
+QStyle (0x0x7fec370c7000) 0
+ vptr=((& QStyle::_ZTV6QStyle) + 16)
+ QObject (0x0x7fec37059ae0) 0
+ primary-for QStyle (0x0x7fec370c7000)
+
+Class QTabBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabBar::QPrivateSignal (0x0x7fec36d19d80) 0 empty
+
+Vtable for QTabBar
+QTabBar::_ZTV7QTabBar: 70 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QTabBar)
+16 (int (*)(...))QTabBar::metaObject
+24 (int (*)(...))QTabBar::qt_metacast
+32 (int (*)(...))QTabBar::qt_metacall
+40 (int (*)(...))QTabBar::~QTabBar
+48 (int (*)(...))QTabBar::~QTabBar
+56 (int (*)(...))QTabBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTabBar::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QTabBar::sizeHint
+136 (int (*)(...))QTabBar::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTabBar::mousePressEvent
+176 (int (*)(...))QTabBar::mouseReleaseEvent
+184 (int (*)(...))QTabBar::mouseDoubleClickEvent
+192 (int (*)(...))QTabBar::mouseMoveEvent
+200 (int (*)(...))QTabBar::wheelEvent
+208 (int (*)(...))QTabBar::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTabBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTabBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QTabBar::showEvent
+352 (int (*)(...))QTabBar::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTabBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QTabBar::tabSizeHint
+440 (int (*)(...))QTabBar::minimumTabSizeHint
+448 (int (*)(...))QTabBar::tabInserted
+456 (int (*)(...))QTabBar::tabRemoved
+464 (int (*)(...))QTabBar::tabLayoutChange
+472 (int (*)(...))QTabBar::initStyleOption
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI7QTabBar)
+496 (int (*)(...))QTabBar::_ZThn16_N7QTabBarD1Ev
+504 (int (*)(...))QTabBar::_ZThn16_N7QTabBarD0Ev
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTabBar
+ size=40 align=8
+ base size=40 base align=8
+QTabBar (0x0x7fec370c72d8) 0
+ vptr=((& QTabBar::_ZTV7QTabBar) + 16)
+ QWidget (0x0x7fec36d02700) 0
+ primary-for QTabBar (0x0x7fec370c72d8)
+ QObject (0x0x7fec36d19cc0) 0
+ primary-for QWidget (0x0x7fec36d02700)
+ QPaintDevice (0x0x7fec36d19d20) 16
+ vptr=((& QTabBar::_ZTV7QTabBar) + 496)
+
+Class QTabWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabWidget::QPrivateSignal (0x0x7fec36dc40c0) 0 empty
+
+Vtable for QTabWidget
+QTabWidget::_ZTV10QTabWidget: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTabWidget)
+16 (int (*)(...))QTabWidget::metaObject
+24 (int (*)(...))QTabWidget::qt_metacast
+32 (int (*)(...))QTabWidget::qt_metacall
+40 (int (*)(...))QTabWidget::~QTabWidget
+48 (int (*)(...))QTabWidget::~QTabWidget
+56 (int (*)(...))QTabWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QTabWidget::sizeHint
+136 (int (*)(...))QTabWidget::minimumSizeHint
+144 (int (*)(...))QTabWidget::heightForWidth
+152 (int (*)(...))QTabWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QTabWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTabWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTabWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QTabWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTabWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QTabWidget::tabInserted
+440 (int (*)(...))QTabWidget::tabRemoved
+448 (int (*)(...))QTabWidget::initStyleOption
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI10QTabWidget)
+472 (int (*)(...))QTabWidget::_ZThn16_N10QTabWidgetD1Ev
+480 (int (*)(...))QTabWidget::_ZThn16_N10QTabWidgetD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTabWidget
+ size=40 align=8
+ base size=40 base align=8
+QTabWidget (0x0x7fec370c7340) 0
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 16)
+ QWidget (0x0x7fec36d02d20) 0
+ primary-for QTabWidget (0x0x7fec370c7340)
+ QObject (0x0x7fec36dc4000) 0
+ primary-for QWidget (0x0x7fec36d02d20)
+ QPaintDevice (0x0x7fec36dc4060) 16
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 472)
+
+Class QRubberBand::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRubberBand::QPrivateSignal (0x0x7fec36dc4480) 0 empty
+
+Vtable for QRubberBand
+QRubberBand::_ZTV11QRubberBand: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QRubberBand)
+16 (int (*)(...))QRubberBand::metaObject
+24 (int (*)(...))QRubberBand::qt_metacast
+32 (int (*)(...))QRubberBand::qt_metacall
+40 (int (*)(...))QRubberBand::~QRubberBand
+48 (int (*)(...))QRubberBand::~QRubberBand
+56 (int (*)(...))QRubberBand::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QRubberBand::paintEvent
+264 (int (*)(...))QRubberBand::moveEvent
+272 (int (*)(...))QRubberBand::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QRubberBand::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QRubberBand::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QRubberBand::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QRubberBand)
+456 (int (*)(...))QRubberBand::_ZThn16_N11QRubberBandD1Ev
+464 (int (*)(...))QRubberBand::_ZThn16_N11QRubberBandD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QRubberBand
+ size=40 align=8
+ base size=40 base align=8
+QRubberBand (0x0x7fec370c73a8) 0
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 16)
+ QWidget (0x0x7fec36dd3070) 0
+ primary-for QRubberBand (0x0x7fec370c73a8)
+ QObject (0x0x7fec36dc43c0) 0
+ primary-for QWidget (0x0x7fec36dd3070)
+ QPaintDevice (0x0x7fec36dc4420) 16
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 456)
+
+Class QFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFrame::QPrivateSignal (0x0x7fec36dc48a0) 0 empty
+
+Vtable for QFrame
+QFrame::_ZTV6QFrame: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QFrame)
+16 (int (*)(...))QFrame::metaObject
+24 (int (*)(...))QFrame::qt_metacast
+32 (int (*)(...))QFrame::qt_metacall
+40 (int (*)(...))QFrame::~QFrame
+48 (int (*)(...))QFrame::~QFrame
+56 (int (*)(...))QFrame::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI6QFrame)
+456 (int (*)(...))QFrame::_ZThn16_N6QFrameD1Ev
+464 (int (*)(...))QFrame::_ZThn16_N6QFrameD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFrame
+ size=40 align=8
+ base size=40 base align=8
+QFrame (0x0x7fec370c7410) 0
+ vptr=((& QFrame::_ZTV6QFrame) + 16)
+ QWidget (0x0x7fec36dd31c0) 0
+ primary-for QFrame (0x0x7fec370c7410)
+ QObject (0x0x7fec36dc47e0) 0
+ primary-for QWidget (0x0x7fec36dd31c0)
+ QPaintDevice (0x0x7fec36dc4840) 16
+ vptr=((& QFrame::_ZTV6QFrame) + 456)
+
+Class QStyleOption
+ size=64 align=8
+ base size=64 base align=8
+QStyleOption (0x0x7fec36dc4ba0) 0
+
+Class QStyleOptionFocusRect
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFocusRect (0x0x7fec370c7478) 0
+ QStyleOption (0x0x7fec36dc4c00) 0
+
+Class QStyleOptionFrame
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFrame (0x0x7fec44b3cd68) 0
+ QStyleOption (0x0x7fec36dc4e40) 0
+
+Class QStyleOptionTabWidgetFrame
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionTabWidgetFrame (0x0x7fec44b3cf70) 0
+ QStyleOption (0x0x7fec36e34480) 0
+
+Class QStyleOptionTabBarBase
+ size=104 align=8
+ base size=101 base align=8
+QStyleOptionTabBarBase (0x0x7fec370c74e0) 0
+ QStyleOption (0x0x7fec36e346c0) 0
+
+Class QStyleOptionHeader
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionHeader (0x0x7fec370c7548) 0
+ QStyleOption (0x0x7fec36e34900) 0
+
+Class QStyleOptionHeaderV2
+ size=136 align=8
+ base size=136 base align=8
+QStyleOptionHeaderV2 (0x0x7fec370c75b0) 0
+ QStyleOptionHeader (0x0x7fec370c7618) 0
+ QStyleOption (0x0x7fec36e34b40) 0
+
+Class QStyleOptionButton
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionButton (0x0x7fec370c76e8) 0
+ QStyleOption (0x0x7fec36e34f00) 0
+
+Class QStyleOptionTab
+ size=160 align=8
+ base size=156 base align=8
+QStyleOptionTab (0x0x7fec370c7888) 0
+ QStyleOption (0x0x7fec36eaa540) 0
+
+Class QStyleOptionToolBar
+ size=88 align=8
+ base size=88 base align=8
+QStyleOptionToolBar (0x0x7fec370c7b60) 0
+ QStyleOption (0x0x7fec36eaad20) 0
+
+Class QStyleOptionProgressBar
+ size=112 align=8
+ base size=111 base align=8
+QStyleOptionProgressBar (0x0x7fec370c7d00) 0
+ QStyleOption (0x0x7fec36b81360) 0
+
+Class QStyleOptionMenuItem
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionMenuItem (0x0x7fec370c7d68) 0
+ QStyleOption (0x0x7fec36b815a0) 0
+
+Class QStyleOptionDockWidget
+ size=96 align=8
+ base size=92 base align=8
+QStyleOptionDockWidget (0x0x7fec370c7dd0) 0
+ QStyleOption (0x0x7fec36b817e0) 0
+
+Class QStyleOptionViewItem
+ size=208 align=8
+ base size=208 base align=8
+QStyleOptionViewItem (0x0x7fec370c7e38) 0
+ QStyleOption (0x0x7fec36b81a20) 0
+
+Class QStyleOptionToolBox
+ size=104 align=8
+ base size=104 base align=8
+QStyleOptionToolBox (0x0x7fec36c21000) 0
+ QStyleOption (0x0x7fec36c1f060) 0
+
+Class QStyleOptionRubberBand
+ size=72 align=8
+ base size=69 base align=8
+QStyleOptionRubberBand (0x0x7fec36c21068) 0
+ QStyleOption (0x0x7fec36c1f2a0) 0
+
+Class QStyleOptionComplex
+ size=72 align=8
+ base size=72 base align=8
+QStyleOptionComplex (0x0x7fec36c210d0) 0
+ QStyleOption (0x0x7fec36c1f540) 0
+
+Class QStyleOptionSlider
+ size=128 align=8
+ base size=128 base align=8
+QStyleOptionSlider (0x0x7fec36c21138) 0
+ QStyleOptionComplex (0x0x7fec36c211a0) 0
+ QStyleOption (0x0x7fec36c1f7e0) 0
+
+Class QStyleOptionSpinBox
+ size=88 align=8
+ base size=81 base align=8
+QStyleOptionSpinBox (0x0x7fec36c21270) 0
+ QStyleOptionComplex (0x0x7fec36c212d8) 0
+ QStyleOption (0x0x7fec36c1fba0) 0
+
+Class QStyleOptionToolButton
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionToolButton (0x0x7fec36c213a8) 0
+ QStyleOptionComplex (0x0x7fec36c21410) 0
+ QStyleOption (0x0x7fec36c1fde0) 0
+
+Class QStyleOptionComboBox
+ size=144 align=8
+ base size=140 base align=8
+QStyleOptionComboBox (0x0x7fec36c215b0) 0
+ QStyleOptionComplex (0x0x7fec36c21618) 0
+ QStyleOption (0x0x7fec36c793c0) 0
+
+Class QStyleOptionTitleBar
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionTitleBar (0x0x7fec36c21680) 0
+ QStyleOptionComplex (0x0x7fec36c216e8) 0
+ QStyleOption (0x0x7fec36c79600) 0
+
+Class QStyleOptionGroupBox
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionGroupBox (0x0x7fec36c21750) 0
+ QStyleOptionComplex (0x0x7fec36c217b8) 0
+ QStyleOption (0x0x7fec36c79840) 0
+
+Class QStyleOptionSizeGrip
+ size=80 align=8
+ base size=76 base align=8
+QStyleOptionSizeGrip (0x0x7fec36c21820) 0
+ QStyleOptionComplex (0x0x7fec36c21888) 0
+ QStyleOption (0x0x7fec36c79a80) 0
+
+Class QStyleOptionGraphicsItem
+ size=96 align=8
+ base size=96 base align=8
+QStyleOptionGraphicsItem (0x0x7fec36c218f0) 0
+ QStyleOption (0x0x7fec36c79cc0) 0
+
+Class QStyleHintReturn
+ size=8 align=4
+ base size=8 base align=4
+QStyleHintReturn (0x0x7fec368db060) 0
+
+Class QStyleHintReturnMask
+ size=16 align=8
+ base size=16 base align=8
+QStyleHintReturnMask (0x0x7fec36c21958) 0
+ QStyleHintReturn (0x0x7fec368db0c0) 0
+
+Class QStyleHintReturnVariant
+ size=40 align=8
+ base size=40 base align=8
+QStyleHintReturnVariant (0x0x7fec36c21a28) 0
+ QStyleHintReturn (0x0x7fec368db120) 0
+
+Class QAbstractItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemDelegate::QPrivateSignal (0x0x7fec368db2a0) 0 empty
+
+Vtable for QAbstractItemDelegate
+QAbstractItemDelegate::_ZTV21QAbstractItemDelegate: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QAbstractItemDelegate)
+16 (int (*)(...))QAbstractItemDelegate::metaObject
+24 (int (*)(...))QAbstractItemDelegate::qt_metacast
+32 (int (*)(...))QAbstractItemDelegate::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QAbstractItemDelegate::setEditorData
+152 (int (*)(...))QAbstractItemDelegate::setModelData
+160 (int (*)(...))QAbstractItemDelegate::updateEditorGeometry
+168 (int (*)(...))QAbstractItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+
+Class QAbstractItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemDelegate (0x0x7fec36c21af8) 0
+ vptr=((& QAbstractItemDelegate::_ZTV21QAbstractItemDelegate) + 16)
+ QObject (0x0x7fec368db240) 0
+ primary-for QAbstractItemDelegate (0x0x7fec36c21af8)
+
+Class QAbstractScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractScrollArea::QPrivateSignal (0x0x7fec368db4e0) 0 empty
+
+Vtable for QAbstractScrollArea
+QAbstractScrollArea::_ZTV19QAbstractScrollArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractScrollArea)
+16 (int (*)(...))QAbstractScrollArea::metaObject
+24 (int (*)(...))QAbstractScrollArea::qt_metacast
+32 (int (*)(...))QAbstractScrollArea::qt_metacall
+40 (int (*)(...))QAbstractScrollArea::~QAbstractScrollArea
+48 (int (*)(...))QAbstractScrollArea::~QAbstractScrollArea
+56 (int (*)(...))QAbstractScrollArea::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractScrollArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QAbstractScrollArea::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI19QAbstractScrollArea)
+488 (int (*)(...))QAbstractScrollArea::_ZThn16_N19QAbstractScrollAreaD1Ev
+496 (int (*)(...))QAbstractScrollArea::_ZThn16_N19QAbstractScrollAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractScrollArea
+ size=40 align=8
+ base size=40 base align=8
+QAbstractScrollArea (0x0x7fec36c21b60) 0
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 16)
+ QFrame (0x0x7fec36c21bc8) 0
+ primary-for QAbstractScrollArea (0x0x7fec36c21b60)
+ QWidget (0x0x7fec368de4d0) 0
+ primary-for QFrame (0x0x7fec36c21bc8)
+ QObject (0x0x7fec368db420) 0
+ primary-for QWidget (0x0x7fec368de4d0)
+ QPaintDevice (0x0x7fec368db480) 16
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 488)
+
+Class QAbstractItemView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemView::QPrivateSignal (0x0x7fec368db7e0) 0 empty
+
+Vtable for QAbstractItemView
+QAbstractItemView::_ZTV17QAbstractItemView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAbstractItemView)
+16 (int (*)(...))QAbstractItemView::metaObject
+24 (int (*)(...))QAbstractItemView::qt_metacast
+32 (int (*)(...))QAbstractItemView::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QAbstractScrollArea::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))__cxa_pure_virtual
+504 (int (*)(...))__cxa_pure_virtual
+512 (int (*)(...))__cxa_pure_virtual
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QAbstractItemView::setRootIndex
+560 (int (*)(...))QAbstractItemView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QAbstractItemView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QAbstractItemView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))__cxa_pure_virtual
+704 (int (*)(...))__cxa_pure_virtual
+712 (int (*)(...))__cxa_pure_virtual
+720 (int (*)(...))__cxa_pure_virtual
+728 (int (*)(...))__cxa_pure_virtual
+736 (int (*)(...))__cxa_pure_virtual
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI17QAbstractItemView)
+800 0
+808 0
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractItemView
+ size=40 align=8
+ base size=40 base align=8
+QAbstractItemView (0x0x7fec36c21c30) 0
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 16)
+ QAbstractScrollArea (0x0x7fec36c21c98) 0
+ primary-for QAbstractItemView (0x0x7fec36c21c30)
+ QFrame (0x0x7fec36c21d00) 0
+ primary-for QAbstractScrollArea (0x0x7fec36c21c98)
+ QWidget (0x0x7fec368de690) 0
+ primary-for QFrame (0x0x7fec36c21d00)
+ QObject (0x0x7fec368db720) 0
+ primary-for QWidget (0x0x7fec368de690)
+ QPaintDevice (0x0x7fec368db780) 16
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 800)
+
+Vtable for QAccessibleWidget
+QAccessibleWidget::_ZTV17QAccessibleWidget: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleWidget)
+16 (int (*)(...))QAccessibleWidget::~QAccessibleWidget
+24 (int (*)(...))QAccessibleWidget::~QAccessibleWidget
+32 (int (*)(...))QAccessibleWidget::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleWidget::window
+56 (int (*)(...))QAccessibleWidget::relations
+64 (int (*)(...))QAccessibleWidget::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))QAccessibleWidget::parent
+88 (int (*)(...))QAccessibleWidget::child
+96 (int (*)(...))QAccessibleWidget::childCount
+104 (int (*)(...))QAccessibleWidget::indexOfChild
+112 (int (*)(...))QAccessibleWidget::text
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleWidget::rect
+136 (int (*)(...))QAccessibleWidget::role
+144 (int (*)(...))QAccessibleWidget::state
+152 (int (*)(...))QAccessibleWidget::foregroundColor
+160 (int (*)(...))QAccessibleWidget::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleWidget::interface_cast
+184 (int (*)(...))QAccessibleWidget::actionNames
+192 (int (*)(...))QAccessibleWidget::doAction
+200 (int (*)(...))QAccessibleWidget::keyBindingsForAction
+208 (int (*)(...))-16
+216 (int (*)(...))(& _ZTI17QAccessibleWidget)
+224 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidgetD1Ev
+232 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidgetD0Ev
+240 (int (*)(...))QAccessibleWidget::_ZThn16_NK17QAccessibleWidget11actionNamesEv
+248 (int (*)(...))QAccessibleActionInterface::localizedActionName
+256 (int (*)(...))QAccessibleActionInterface::localizedActionDescription
+264 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidget8doActionERK7QString
+272 (int (*)(...))QAccessibleWidget::_ZThn16_NK17QAccessibleWidget20keyBindingsForActionERK7QString
+
+Class QAccessibleWidget
+ size=32 align=8
+ base size=32 base align=8
+QAccessibleWidget (0x0x7fec36923bd0) 0
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 16)
+ QAccessibleObject (0x0x7fec36c21ea0) 0
+ primary-for QAccessibleWidget (0x0x7fec36923bd0)
+ QAccessibleInterface (0x0x7fec36976240) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7fec36c21ea0)
+ QAccessibleActionInterface (0x0x7fec369762a0) 16 nearly-empty
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 224)
+
+Class QApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QApplication::QPrivateSignal (0x0x7fec369763c0) 0 empty
+
+Vtable for QApplication
+QApplication::_ZTV12QApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QApplication)
+16 (int (*)(...))QApplication::metaObject
+24 (int (*)(...))QApplication::qt_metacast
+32 (int (*)(...))QApplication::qt_metacall
+40 (int (*)(...))QApplication::~QApplication
+48 (int (*)(...))QApplication::~QApplication
+56 (int (*)(...))QApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QApplication::notify
+120 (int (*)(...))QApplication::compressEvent
+
+Class QApplication
+ size=16 align=8
+ base size=16 base align=8
+QApplication (0x0x7fec36c21f08) 0
+ vptr=((& QApplication::_ZTV12QApplication) + 16)
+ QGuiApplication (0x0x7fec36c21f70) 0
+ primary-for QApplication (0x0x7fec36c21f08)
+ QCoreApplication (0x0x7fec36c21208) 0
+ primary-for QGuiApplication (0x0x7fec36c21f70)
+ QObject (0x0x7fec36976360) 0
+ primary-for QCoreApplication (0x0x7fec36c21208)
+
+Vtable for QLayoutItem
+QLayoutItem::_ZTV11QLayoutItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QLayoutItem)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QLayoutItem::hasHeightForWidth
+96 (int (*)(...))QLayoutItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QLayoutItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QLayoutItem::controlTypes
+
+Class QLayoutItem
+ size=16 align=8
+ base size=12 base align=8
+QLayoutItem (0x0x7fec36976660) 0
+ vptr=((& QLayoutItem::_ZTV11QLayoutItem) + 16)
+
+Vtable for QSpacerItem
+QSpacerItem::_ZTV11QSpacerItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSpacerItem)
+16 (int (*)(...))QSpacerItem::~QSpacerItem
+24 (int (*)(...))QSpacerItem::~QSpacerItem
+32 (int (*)(...))QSpacerItem::sizeHint
+40 (int (*)(...))QSpacerItem::minimumSize
+48 (int (*)(...))QSpacerItem::maximumSize
+56 (int (*)(...))QSpacerItem::expandingDirections
+64 (int (*)(...))QSpacerItem::setGeometry
+72 (int (*)(...))QSpacerItem::geometry
+80 (int (*)(...))QSpacerItem::isEmpty
+88 (int (*)(...))QLayoutItem::hasHeightForWidth
+96 (int (*)(...))QLayoutItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QLayoutItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QSpacerItem::spacerItem
+144 (int (*)(...))QLayoutItem::controlTypes
+
+Class QSpacerItem
+ size=40 align=8
+ base size=40 base align=8
+QSpacerItem (0x0x7fec369d2000) 0
+ vptr=((& QSpacerItem::_ZTV11QSpacerItem) + 16)
+ QLayoutItem (0x0x7fec369768a0) 0
+ primary-for QSpacerItem (0x0x7fec369d2000)
+
+Vtable for QWidgetItem
+QWidgetItem::_ZTV11QWidgetItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWidgetItem)
+16 (int (*)(...))QWidgetItem::~QWidgetItem
+24 (int (*)(...))QWidgetItem::~QWidgetItem
+32 (int (*)(...))QWidgetItem::sizeHint
+40 (int (*)(...))QWidgetItem::minimumSize
+48 (int (*)(...))QWidgetItem::maximumSize
+56 (int (*)(...))QWidgetItem::expandingDirections
+64 (int (*)(...))QWidgetItem::setGeometry
+72 (int (*)(...))QWidgetItem::geometry
+80 (int (*)(...))QWidgetItem::isEmpty
+88 (int (*)(...))QWidgetItem::hasHeightForWidth
+96 (int (*)(...))QWidgetItem::heightForWidth
+104 (int (*)(...))QWidgetItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QWidgetItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QWidgetItem::controlTypes
+
+Class QWidgetItem
+ size=24 align=8
+ base size=24 base align=8
+QWidgetItem (0x0x7fec369d2068) 0
+ vptr=((& QWidgetItem::_ZTV11QWidgetItem) + 16)
+ QLayoutItem (0x0x7fec36976ae0) 0
+ primary-for QWidgetItem (0x0x7fec369d2068)
+
+Vtable for QWidgetItemV2
+QWidgetItemV2::_ZTV13QWidgetItemV2: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QWidgetItemV2)
+16 (int (*)(...))QWidgetItemV2::~QWidgetItemV2
+24 (int (*)(...))QWidgetItemV2::~QWidgetItemV2
+32 (int (*)(...))QWidgetItemV2::sizeHint
+40 (int (*)(...))QWidgetItemV2::minimumSize
+48 (int (*)(...))QWidgetItemV2::maximumSize
+56 (int (*)(...))QWidgetItem::expandingDirections
+64 (int (*)(...))QWidgetItem::setGeometry
+72 (int (*)(...))QWidgetItem::geometry
+80 (int (*)(...))QWidgetItem::isEmpty
+88 (int (*)(...))QWidgetItem::hasHeightForWidth
+96 (int (*)(...))QWidgetItemV2::heightForWidth
+104 (int (*)(...))QWidgetItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QWidgetItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QWidgetItem::controlTypes
+
+Class QWidgetItemV2
+ size=88 align=8
+ base size=88 base align=8
+QWidgetItemV2 (0x0x7fec369d20d0) 0
+ vptr=((& QWidgetItemV2::_ZTV13QWidgetItemV2) + 16)
+ QWidgetItem (0x0x7fec369d2138) 0
+ primary-for QWidgetItemV2 (0x0x7fec369d20d0)
+ QLayoutItem (0x0x7fec36976cc0) 0
+ primary-for QWidgetItem (0x0x7fec369d2138)
+
+Class QLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLayout::QPrivateSignal (0x0x7fec36976e40) 0 empty
+
+Vtable for QLayout
+QLayout::_ZTV7QLayout: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QLayout)
+16 (int (*)(...))QLayout::metaObject
+24 (int (*)(...))QLayout::qt_metacast
+32 (int (*)(...))QLayout::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLayout::spacing
+120 (int (*)(...))QLayout::setSpacing
+128 (int (*)(...))QLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QLayout::expandingDirections
+160 (int (*)(...))QLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QLayout::setGeometry
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))-16
+264 (int (*)(...))(& _ZTI7QLayout)
+272 0
+280 0
+288 (int (*)(...))__cxa_pure_virtual
+296 (int (*)(...))QLayout::_ZThn16_NK7QLayout11minimumSizeEv
+304 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+312 (int (*)(...))QLayout::_ZThn16_NK7QLayout19expandingDirectionsEv
+320 (int (*)(...))QLayout::_ZThn16_N7QLayout11setGeometryERK5QRect
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+336 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+344 (int (*)(...))QLayoutItem::hasHeightForWidth
+352 (int (*)(...))QLayoutItem::heightForWidth
+360 (int (*)(...))QLayoutItem::minimumHeightForWidth
+368 (int (*)(...))QLayout::_ZThn16_N7QLayout10invalidateEv
+376 (int (*)(...))QLayoutItem::widget
+384 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+392 (int (*)(...))QLayoutItem::spacerItem
+400 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QLayout
+ size=32 align=8
+ base size=28 base align=8
+QLayout (0x0x7fec36923d90) 0
+ vptr=((& QLayout::_ZTV7QLayout) + 16)
+ QObject (0x0x7fec36976d80) 0
+ primary-for QLayout (0x0x7fec36923d90)
+ QLayoutItem (0x0x7fec36976de0) 16
+ vptr=((& QLayout::_ZTV7QLayout) + 272)
+
+Class QGridLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGridLayout::QPrivateSignal (0x0x7fec36a10180) 0 empty
+
+Vtable for QGridLayout
+QGridLayout::_ZTV11QGridLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QGridLayout)
+16 (int (*)(...))QGridLayout::metaObject
+24 (int (*)(...))QGridLayout::qt_metacast
+32 (int (*)(...))QGridLayout::qt_metacall
+40 (int (*)(...))QGridLayout::~QGridLayout
+48 (int (*)(...))QGridLayout::~QGridLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGridLayout::spacing
+120 (int (*)(...))QGridLayout::setSpacing
+128 (int (*)(...))QGridLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QGridLayout::addItem
+152 (int (*)(...))QGridLayout::expandingDirections
+160 (int (*)(...))QGridLayout::minimumSize
+168 (int (*)(...))QGridLayout::maximumSize
+176 (int (*)(...))QGridLayout::setGeometry
+184 (int (*)(...))QGridLayout::itemAt
+192 (int (*)(...))QGridLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QGridLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QGridLayout::sizeHint
+264 (int (*)(...))QGridLayout::hasHeightForWidth
+272 (int (*)(...))QGridLayout::heightForWidth
+280 (int (*)(...))QGridLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QGridLayout)
+304 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayoutD1Ev
+312 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayoutD0Ev
+320 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout8sizeHintEv
+328 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout11minimumSizeEv
+336 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout11maximumSizeEv
+344 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout19expandingDirectionsEv
+352 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout17hasHeightForWidthEv
+384 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout14heightForWidthEi
+392 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout21minimumHeightForWidthEi
+400 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QGridLayout
+ size=32 align=8
+ base size=28 base align=8
+QGridLayout (0x0x7fec369d21a0) 0
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 16)
+ QLayout (0x0x7fec369f50e0) 0
+ primary-for QGridLayout (0x0x7fec369d21a0)
+ QObject (0x0x7fec36a100c0) 0
+ primary-for QLayout (0x0x7fec369f50e0)
+ QLayoutItem (0x0x7fec36a10120) 16
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 304)
+
+Class QBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBoxLayout::QPrivateSignal (0x0x7fec36a10420) 0 empty
+
+Vtable for QBoxLayout
+QBoxLayout::_ZTV10QBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QBoxLayout)
+16 (int (*)(...))QBoxLayout::metaObject
+24 (int (*)(...))QBoxLayout::qt_metacast
+32 (int (*)(...))QBoxLayout::qt_metacall
+40 (int (*)(...))QBoxLayout::~QBoxLayout
+48 (int (*)(...))QBoxLayout::~QBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI10QBoxLayout)
+304 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayoutD1Ev
+312 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QBoxLayout (0x0x7fec369d2208) 0
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 16)
+ QLayout (0x0x7fec369f5150) 0
+ primary-for QBoxLayout (0x0x7fec369d2208)
+ QObject (0x0x7fec36a10360) 0
+ primary-for QLayout (0x0x7fec369f5150)
+ QLayoutItem (0x0x7fec36a103c0) 16
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 304)
+
+Class QHBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHBoxLayout::QPrivateSignal (0x0x7fec36a10660) 0 empty
+
+Vtable for QHBoxLayout
+QHBoxLayout::_ZTV11QHBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHBoxLayout)
+16 (int (*)(...))QHBoxLayout::metaObject
+24 (int (*)(...))QHBoxLayout::qt_metacast
+32 (int (*)(...))QHBoxLayout::qt_metacall
+40 (int (*)(...))QHBoxLayout::~QHBoxLayout
+48 (int (*)(...))QHBoxLayout::~QHBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QHBoxLayout)
+304 (int (*)(...))QHBoxLayout::_ZThn16_N11QHBoxLayoutD1Ev
+312 (int (*)(...))QHBoxLayout::_ZThn16_N11QHBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QHBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QHBoxLayout (0x0x7fec369d2270) 0
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 16)
+ QBoxLayout (0x0x7fec369d22d8) 0
+ primary-for QHBoxLayout (0x0x7fec369d2270)
+ QLayout (0x0x7fec369f5460) 0
+ primary-for QBoxLayout (0x0x7fec369d22d8)
+ QObject (0x0x7fec36a105a0) 0
+ primary-for QLayout (0x0x7fec369f5460)
+ QLayoutItem (0x0x7fec36a10600) 16
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 304)
+
+Class QVBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVBoxLayout::QPrivateSignal (0x0x7fec36a107e0) 0 empty
+
+Vtable for QVBoxLayout
+QVBoxLayout::_ZTV11QVBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QVBoxLayout)
+16 (int (*)(...))QVBoxLayout::metaObject
+24 (int (*)(...))QVBoxLayout::qt_metacast
+32 (int (*)(...))QVBoxLayout::qt_metacall
+40 (int (*)(...))QVBoxLayout::~QVBoxLayout
+48 (int (*)(...))QVBoxLayout::~QVBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QVBoxLayout)
+304 (int (*)(...))QVBoxLayout::_ZThn16_N11QVBoxLayoutD1Ev
+312 (int (*)(...))QVBoxLayout::_ZThn16_N11QVBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QVBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QVBoxLayout (0x0x7fec369d2340) 0
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 16)
+ QBoxLayout (0x0x7fec369d23a8) 0
+ primary-for QVBoxLayout (0x0x7fec369d2340)
+ QLayout (0x0x7fec369f54d0) 0
+ primary-for QBoxLayout (0x0x7fec369d23a8)
+ QObject (0x0x7fec36a10720) 0
+ primary-for QLayout (0x0x7fec369f54d0)
+ QLayoutItem (0x0x7fec36a10780) 16
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 304)
+
+Class QButtonGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QButtonGroup::QPrivateSignal (0x0x7fec36a10900) 0 empty
+
+Vtable for QButtonGroup
+QButtonGroup::_ZTV12QButtonGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QButtonGroup)
+16 (int (*)(...))QButtonGroup::metaObject
+24 (int (*)(...))QButtonGroup::qt_metacast
+32 (int (*)(...))QButtonGroup::qt_metacall
+40 (int (*)(...))QButtonGroup::~QButtonGroup
+48 (int (*)(...))QButtonGroup::~QButtonGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QButtonGroup
+ size=16 align=8
+ base size=16 base align=8
+QButtonGroup (0x0x7fec369d2410) 0
+ vptr=((& QButtonGroup::_ZTV12QButtonGroup) + 16)
+ QObject (0x0x7fec36a108a0) 0
+ primary-for QButtonGroup (0x0x7fec369d2410)
+
+Class QCalendarWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCalendarWidget::QPrivateSignal (0x0x7fec36a10b40) 0 empty
+
+Vtable for QCalendarWidget
+QCalendarWidget::_ZTV15QCalendarWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QCalendarWidget)
+16 (int (*)(...))QCalendarWidget::metaObject
+24 (int (*)(...))QCalendarWidget::qt_metacast
+32 (int (*)(...))QCalendarWidget::qt_metacall
+40 (int (*)(...))QCalendarWidget::~QCalendarWidget
+48 (int (*)(...))QCalendarWidget::~QCalendarWidget
+56 (int (*)(...))QCalendarWidget::event
+64 (int (*)(...))QCalendarWidget::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCalendarWidget::sizeHint
+136 (int (*)(...))QCalendarWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QCalendarWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QCalendarWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QCalendarWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QCalendarWidget::paintCell
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI15QCalendarWidget)
+456 (int (*)(...))QCalendarWidget::_ZThn16_N15QCalendarWidgetD1Ev
+464 (int (*)(...))QCalendarWidget::_ZThn16_N15QCalendarWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCalendarWidget
+ size=40 align=8
+ base size=40 base align=8
+QCalendarWidget (0x0x7fec369d2478) 0
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 16)
+ QWidget (0x0x7fec369f5540) 0
+ primary-for QCalendarWidget (0x0x7fec369d2478)
+ QObject (0x0x7fec36a10a80) 0
+ primary-for QWidget (0x0x7fec369f5540)
+ QPaintDevice (0x0x7fec36a10ae0) 16
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 456)
+
+Class QCheckBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCheckBox::QPrivateSignal (0x0x7fec36a90000) 0 empty
+
+Vtable for QCheckBox
+QCheckBox::_ZTV9QCheckBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QCheckBox)
+16 (int (*)(...))QCheckBox::metaObject
+24 (int (*)(...))QCheckBox::qt_metacast
+32 (int (*)(...))QCheckBox::qt_metacall
+40 (int (*)(...))QCheckBox::~QCheckBox
+48 (int (*)(...))QCheckBox::~QCheckBox
+56 (int (*)(...))QCheckBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCheckBox::sizeHint
+136 (int (*)(...))QCheckBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QCheckBox::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QCheckBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QCheckBox::hitButton
+440 (int (*)(...))QCheckBox::checkStateSet
+448 (int (*)(...))QCheckBox::nextCheckState
+456 (int (*)(...))QCheckBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI9QCheckBox)
+480 (int (*)(...))QCheckBox::_ZThn16_N9QCheckBoxD1Ev
+488 (int (*)(...))QCheckBox::_ZThn16_N9QCheckBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCheckBox
+ size=40 align=8
+ base size=40 base align=8
+QCheckBox (0x0x7fec369d24e0) 0
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 16)
+ QAbstractButton (0x0x7fec369d2548) 0
+ primary-for QCheckBox (0x0x7fec369d24e0)
+ QWidget (0x0x7fec369f5930) 0
+ primary-for QAbstractButton (0x0x7fec369d2548)
+ QObject (0x0x7fec36a10f00) 0
+ primary-for QWidget (0x0x7fec369f5930)
+ QPaintDevice (0x0x7fec36a10f60) 16
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 480)
+
+Class QDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialog::QPrivateSignal (0x0x7fec36a90240) 0 empty
+
+Vtable for QDialog
+QDialog::_ZTV7QDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QDialog)
+16 (int (*)(...))QDialog::metaObject
+24 (int (*)(...))QDialog::qt_metacast
+32 (int (*)(...))QDialog::qt_metacall
+40 (int (*)(...))QDialog::~QDialog
+48 (int (*)(...))QDialog::~QDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI7QDialog)
+488 (int (*)(...))QDialog::_ZThn16_N7QDialogD1Ev
+496 (int (*)(...))QDialog::_ZThn16_N7QDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDialog
+ size=40 align=8
+ base size=40 base align=8
+QDialog (0x0x7fec369d25b0) 0
+ vptr=((& QDialog::_ZTV7QDialog) + 16)
+ QWidget (0x0x7fec369f59a0) 0
+ primary-for QDialog (0x0x7fec369d25b0)
+ QObject (0x0x7fec36a90180) 0
+ primary-for QWidget (0x0x7fec369f59a0)
+ QPaintDevice (0x0x7fec36a901e0) 16
+ vptr=((& QDialog::_ZTV7QDialog) + 488)
+
+Class QColorDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColorDialog::QPrivateSignal (0x0x7fec36a90480) 0 empty
+
+Vtable for QColorDialog
+QColorDialog::_ZTV12QColorDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QColorDialog)
+16 (int (*)(...))QColorDialog::metaObject
+24 (int (*)(...))QColorDialog::qt_metacast
+32 (int (*)(...))QColorDialog::qt_metacall
+40 (int (*)(...))QColorDialog::~QColorDialog
+48 (int (*)(...))QColorDialog::~QColorDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QColorDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QColorDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QColorDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QColorDialog)
+488 (int (*)(...))QColorDialog::_ZThn16_N12QColorDialogD1Ev
+496 (int (*)(...))QColorDialog::_ZThn16_N12QColorDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QColorDialog
+ size=40 align=8
+ base size=40 base align=8
+QColorDialog (0x0x7fec369d2618) 0
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 16)
+ QDialog (0x0x7fec369d2680) 0
+ primary-for QColorDialog (0x0x7fec369d2618)
+ QWidget (0x0x7fec369f5af0) 0
+ primary-for QDialog (0x0x7fec369d2680)
+ QObject (0x0x7fec36a903c0) 0
+ primary-for QWidget (0x0x7fec369f5af0)
+ QPaintDevice (0x0x7fec36a90420) 16
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 488)
+
+Class QColormap
+ size=8 align=8
+ base size=8 base align=8
+QColormap (0x0x7fec36a90a80) 0
+
+Class QColumnView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColumnView::QPrivateSignal (0x0x7fec36a90ba0) 0 empty
+
+Vtable for QColumnView
+QColumnView::_ZTV11QColumnView: 109 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QColumnView)
+16 (int (*)(...))QColumnView::metaObject
+24 (int (*)(...))QColumnView::qt_metacast
+32 (int (*)(...))QColumnView::qt_metacall
+40 (int (*)(...))QColumnView::~QColumnView
+48 (int (*)(...))QColumnView::~QColumnView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QColumnView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QColumnView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QColumnView::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QColumnView::setModel
+480 (int (*)(...))QColumnView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QColumnView::visualRect
+504 (int (*)(...))QColumnView::scrollTo
+512 (int (*)(...))QColumnView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QColumnView::setRootIndex
+560 (int (*)(...))QAbstractItemView::doItemsLayout
+568 (int (*)(...))QColumnView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QColumnView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QColumnView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QAbstractItemView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QColumnView::moveCursor
+704 (int (*)(...))QColumnView::horizontalOffset
+712 (int (*)(...))QColumnView::verticalOffset
+720 (int (*)(...))QColumnView::isIndexHidden
+728 (int (*)(...))QColumnView::setSelection
+736 (int (*)(...))QColumnView::visualRegionForSelection
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QColumnView::createColumn
+792 (int (*)(...))-16
+800 (int (*)(...))(& _ZTI11QColumnView)
+808 (int (*)(...))QColumnView::_ZThn16_N11QColumnViewD1Ev
+816 (int (*)(...))QColumnView::_ZThn16_N11QColumnViewD0Ev
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QColumnView
+ size=40 align=8
+ base size=40 base align=8
+QColumnView (0x0x7fec369d2820) 0
+ vptr=((& QColumnView::_ZTV11QColumnView) + 16)
+ QAbstractItemView (0x0x7fec369d2888) 0
+ primary-for QColumnView (0x0x7fec369d2820)
+ QAbstractScrollArea (0x0x7fec369d28f0) 0
+ primary-for QAbstractItemView (0x0x7fec369d2888)
+ QFrame (0x0x7fec369d2958) 0
+ primary-for QAbstractScrollArea (0x0x7fec369d28f0)
+ QWidget (0x0x7fec369f5e00) 0
+ primary-for QFrame (0x0x7fec369d2958)
+ QObject (0x0x7fec36a90ae0) 0
+ primary-for QWidget (0x0x7fec369f5e00)
+ QPaintDevice (0x0x7fec36a90b40) 16
+ vptr=((& QColumnView::_ZTV11QColumnView) + 808)
+
+Class QComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QComboBox::QPrivateSignal (0x0x7fec36a90de0) 0 empty
+
+Vtable for QComboBox
+QComboBox::_ZTV9QComboBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QComboBox)
+16 (int (*)(...))QComboBox::metaObject
+24 (int (*)(...))QComboBox::qt_metacast
+32 (int (*)(...))QComboBox::qt_metacall
+40 (int (*)(...))QComboBox::~QComboBox
+48 (int (*)(...))QComboBox::~QComboBox
+56 (int (*)(...))QComboBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QComboBox::sizeHint
+136 (int (*)(...))QComboBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QComboBox::mousePressEvent
+176 (int (*)(...))QComboBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QComboBox::wheelEvent
+208 (int (*)(...))QComboBox::keyPressEvent
+216 (int (*)(...))QComboBox::keyReleaseEvent
+224 (int (*)(...))QComboBox::focusInEvent
+232 (int (*)(...))QComboBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QComboBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QComboBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QComboBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QComboBox::showEvent
+352 (int (*)(...))QComboBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QComboBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QComboBox::inputMethodEvent
+416 (int (*)(...))QComboBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QComboBox::setModel
+440 (int (*)(...))QComboBox::showPopup
+448 (int (*)(...))QComboBox::hidePopup
+456 (int (*)(...))QComboBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI9QComboBox)
+480 (int (*)(...))QComboBox::_ZThn16_N9QComboBoxD1Ev
+488 (int (*)(...))QComboBox::_ZThn16_N9QComboBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QComboBox
+ size=40 align=8
+ base size=40 base align=8
+QComboBox (0x0x7fec369d29c0) 0
+ vptr=((& QComboBox::_ZTV9QComboBox) + 16)
+ QWidget (0x0x7fec369f5e70) 0
+ primary-for QComboBox (0x0x7fec369d29c0)
+ QObject (0x0x7fec36a90d20) 0
+ primary-for QWidget (0x0x7fec369f5e70)
+ QPaintDevice (0x0x7fec36a90d80) 16
+ vptr=((& QComboBox::_ZTV9QComboBox) + 480)
+
+Class QPushButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPushButton::QPrivateSignal (0x0x7fec3675a3c0) 0 empty
+
+Vtable for QPushButton
+QPushButton::_ZTV11QPushButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPushButton)
+16 (int (*)(...))QPushButton::metaObject
+24 (int (*)(...))QPushButton::qt_metacast
+32 (int (*)(...))QPushButton::qt_metacall
+40 (int (*)(...))QPushButton::~QPushButton
+48 (int (*)(...))QPushButton::~QPushButton
+56 (int (*)(...))QPushButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QPushButton::sizeHint
+136 (int (*)(...))QPushButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QPushButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QPushButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QPushButton::focusInEvent
+232 (int (*)(...))QPushButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QPushButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QPushButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QPushButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI11QPushButton)
+480 (int (*)(...))QPushButton::_ZThn16_N11QPushButtonD1Ev
+488 (int (*)(...))QPushButton::_ZThn16_N11QPushButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QPushButton
+ size=40 align=8
+ base size=40 base align=8
+QPushButton (0x0x7fec369d2a28) 0
+ vptr=((& QPushButton::_ZTV11QPushButton) + 16)
+ QAbstractButton (0x0x7fec369d2a90) 0
+ primary-for QPushButton (0x0x7fec369d2a28)
+ QWidget (0x0x7fec36733380) 0
+ primary-for QAbstractButton (0x0x7fec369d2a90)
+ QObject (0x0x7fec3675a300) 0
+ primary-for QWidget (0x0x7fec36733380)
+ QPaintDevice (0x0x7fec3675a360) 16
+ vptr=((& QPushButton::_ZTV11QPushButton) + 480)
+
+Class QCommandLinkButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommandLinkButton::QPrivateSignal (0x0x7fec3675a600) 0 empty
+
+Vtable for QCommandLinkButton
+QCommandLinkButton::_ZTV18QCommandLinkButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QCommandLinkButton)
+16 (int (*)(...))QCommandLinkButton::metaObject
+24 (int (*)(...))QCommandLinkButton::qt_metacast
+32 (int (*)(...))QCommandLinkButton::qt_metacall
+40 (int (*)(...))QCommandLinkButton::~QCommandLinkButton
+48 (int (*)(...))QCommandLinkButton::~QCommandLinkButton
+56 (int (*)(...))QCommandLinkButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCommandLinkButton::sizeHint
+136 (int (*)(...))QCommandLinkButton::minimumSizeHint
+144 (int (*)(...))QCommandLinkButton::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QPushButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QPushButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QPushButton::focusInEvent
+232 (int (*)(...))QPushButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QCommandLinkButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QPushButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QCommandLinkButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI18QCommandLinkButton)
+480 (int (*)(...))QCommandLinkButton::_ZThn16_N18QCommandLinkButtonD1Ev
+488 (int (*)(...))QCommandLinkButton::_ZThn16_N18QCommandLinkButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCommandLinkButton
+ size=40 align=8
+ base size=40 base align=8
+QCommandLinkButton (0x0x7fec369d2af8) 0
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 16)
+ QPushButton (0x0x7fec369d2b60) 0
+ primary-for QCommandLinkButton (0x0x7fec369d2af8)
+ QAbstractButton (0x0x7fec369d2bc8) 0
+ primary-for QPushButton (0x0x7fec369d2b60)
+ QWidget (0x0x7fec367333f0) 0
+ primary-for QAbstractButton (0x0x7fec369d2bc8)
+ QObject (0x0x7fec3675a540) 0
+ primary-for QWidget (0x0x7fec367333f0)
+ QPaintDevice (0x0x7fec3675a5a0) 16
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 480)
+
+Class QCommonStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommonStyle::QPrivateSignal (0x0x7fec3675a7e0) 0 empty
+
+Vtable for QCommonStyle
+QCommonStyle::_ZTV12QCommonStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QCommonStyle)
+16 (int (*)(...))QCommonStyle::metaObject
+24 (int (*)(...))QCommonStyle::qt_metacast
+32 (int (*)(...))QCommonStyle::qt_metacall
+40 (int (*)(...))QCommonStyle::~QCommonStyle
+48 (int (*)(...))QCommonStyle::~QCommonStyle
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCommonStyle::polish
+120 (int (*)(...))QCommonStyle::unpolish
+128 (int (*)(...))QCommonStyle::polish
+136 (int (*)(...))QCommonStyle::unpolish
+144 (int (*)(...))QCommonStyle::polish
+152 (int (*)(...))QStyle::itemTextRect
+160 (int (*)(...))QStyle::itemPixmapRect
+168 (int (*)(...))QStyle::drawItemText
+176 (int (*)(...))QStyle::drawItemPixmap
+184 (int (*)(...))QStyle::standardPalette
+192 (int (*)(...))QCommonStyle::drawPrimitive
+200 (int (*)(...))QCommonStyle::drawControl
+208 (int (*)(...))QCommonStyle::subElementRect
+216 (int (*)(...))QCommonStyle::drawComplexControl
+224 (int (*)(...))QCommonStyle::hitTestComplexControl
+232 (int (*)(...))QCommonStyle::subControlRect
+240 (int (*)(...))QCommonStyle::pixelMetric
+248 (int (*)(...))QCommonStyle::sizeFromContents
+256 (int (*)(...))QCommonStyle::styleHint
+264 (int (*)(...))QCommonStyle::standardPixmap
+272 (int (*)(...))QCommonStyle::standardIcon
+280 (int (*)(...))QCommonStyle::generatedIconPixmap
+288 (int (*)(...))QCommonStyle::layoutSpacing
+
+Class QCommonStyle
+ size=16 align=8
+ base size=16 base align=8
+QCommonStyle (0x0x7fec369d2c30) 0
+ vptr=((& QCommonStyle::_ZTV12QCommonStyle) + 16)
+ QStyle (0x0x7fec369d2c98) 0
+ primary-for QCommonStyle (0x0x7fec369d2c30)
+ QObject (0x0x7fec3675a780) 0
+ primary-for QStyle (0x0x7fec369d2c98)
+
+Class QCompleter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCompleter::QPrivateSignal (0x0x7fec3675a9c0) 0 empty
+
+Vtable for QCompleter
+QCompleter::_ZTV10QCompleter: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QCompleter)
+16 (int (*)(...))QCompleter::metaObject
+24 (int (*)(...))QCompleter::qt_metacast
+32 (int (*)(...))QCompleter::qt_metacall
+40 (int (*)(...))QCompleter::~QCompleter
+48 (int (*)(...))QCompleter::~QCompleter
+56 (int (*)(...))QCompleter::event
+64 (int (*)(...))QCompleter::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCompleter::pathFromIndex
+120 (int (*)(...))QCompleter::splitPath
+
+Class QCompleter
+ size=16 align=8
+ base size=16 base align=8
+QCompleter (0x0x7fec369d2d00) 0
+ vptr=((& QCompleter::_ZTV10QCompleter) + 16)
+ QObject (0x0x7fec3675a960) 0
+ primary-for QCompleter (0x0x7fec369d2d00)
+
+Class QDataWidgetMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDataWidgetMapper::QPrivateSignal (0x0x7fec3675ad20) 0 empty
+
+Vtable for QDataWidgetMapper
+QDataWidgetMapper::_ZTV17QDataWidgetMapper: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QDataWidgetMapper)
+16 (int (*)(...))QDataWidgetMapper::metaObject
+24 (int (*)(...))QDataWidgetMapper::qt_metacast
+32 (int (*)(...))QDataWidgetMapper::qt_metacall
+40 (int (*)(...))QDataWidgetMapper::~QDataWidgetMapper
+48 (int (*)(...))QDataWidgetMapper::~QDataWidgetMapper
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDataWidgetMapper::setCurrentIndex
+
+Class QDataWidgetMapper
+ size=16 align=8
+ base size=16 base align=8
+QDataWidgetMapper (0x0x7fec369d2d68) 0
+ vptr=((& QDataWidgetMapper::_ZTV17QDataWidgetMapper) + 16)
+ QObject (0x0x7fec3675acc0) 0
+ primary-for QDataWidgetMapper (0x0x7fec369d2d68)
+
+Class QDateTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateTimeEdit::QPrivateSignal (0x0x7fec367c7060) 0 empty
+
+Vtable for QDateTimeEdit
+QDateTimeEdit::_ZTV13QDateTimeEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QDateTimeEdit)
+16 (int (*)(...))QDateTimeEdit::metaObject
+24 (int (*)(...))QDateTimeEdit::qt_metacast
+32 (int (*)(...))QDateTimeEdit::qt_metacall
+40 (int (*)(...))QDateTimeEdit::~QDateTimeEdit
+48 (int (*)(...))QDateTimeEdit::~QDateTimeEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI13QDateTimeEdit)
+512 (int (*)(...))QDateTimeEdit::_ZThn16_N13QDateTimeEditD1Ev
+520 (int (*)(...))QDateTimeEdit::_ZThn16_N13QDateTimeEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDateTimeEdit
+ size=40 align=8
+ base size=40 base align=8
+QDateTimeEdit (0x0x7fec369d2dd0) 0
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 16)
+ QAbstractSpinBox (0x0x7fec369d2e38) 0
+ primary-for QDateTimeEdit (0x0x7fec369d2dd0)
+ QWidget (0x0x7fec367337e0) 0
+ primary-for QAbstractSpinBox (0x0x7fec369d2e38)
+ QObject (0x0x7fec3675af60) 0
+ primary-for QWidget (0x0x7fec367337e0)
+ QPaintDevice (0x0x7fec367c7000) 16
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 512)
+
+Class QTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeEdit::QPrivateSignal (0x0x7fec367c7600) 0 empty
+
+Vtable for QTimeEdit
+QTimeEdit::_ZTV9QTimeEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTimeEdit)
+16 (int (*)(...))QTimeEdit::metaObject
+24 (int (*)(...))QTimeEdit::qt_metacast
+32 (int (*)(...))QTimeEdit::qt_metacall
+40 (int (*)(...))QTimeEdit::~QTimeEdit
+48 (int (*)(...))QTimeEdit::~QTimeEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI9QTimeEdit)
+512 (int (*)(...))QTimeEdit::_ZThn16_N9QTimeEditD1Ev
+520 (int (*)(...))QTimeEdit::_ZThn16_N9QTimeEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTimeEdit
+ size=40 align=8
+ base size=40 base align=8
+QTimeEdit (0x0x7fec36809000) 0
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 16)
+ QDateTimeEdit (0x0x7fec36809068) 0
+ primary-for QTimeEdit (0x0x7fec36809000)
+ QAbstractSpinBox (0x0x7fec368090d0) 0
+ primary-for QDateTimeEdit (0x0x7fec36809068)
+ QWidget (0x0x7fec36733d20) 0
+ primary-for QAbstractSpinBox (0x0x7fec368090d0)
+ QObject (0x0x7fec367c7540) 0
+ primary-for QWidget (0x0x7fec36733d20)
+ QPaintDevice (0x0x7fec367c75a0) 16
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 512)
+
+Class QDateEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateEdit::QPrivateSignal (0x0x7fec367c7780) 0 empty
+
+Vtable for QDateEdit
+QDateEdit::_ZTV9QDateEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QDateEdit)
+16 (int (*)(...))QDateEdit::metaObject
+24 (int (*)(...))QDateEdit::qt_metacast
+32 (int (*)(...))QDateEdit::qt_metacall
+40 (int (*)(...))QDateEdit::~QDateEdit
+48 (int (*)(...))QDateEdit::~QDateEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI9QDateEdit)
+512 (int (*)(...))QDateEdit::_ZThn16_N9QDateEditD1Ev
+520 (int (*)(...))QDateEdit::_ZThn16_N9QDateEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDateEdit
+ size=40 align=8
+ base size=40 base align=8
+QDateEdit (0x0x7fec36809138) 0
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 16)
+ QDateTimeEdit (0x0x7fec368091a0) 0
+ primary-for QDateEdit (0x0x7fec36809138)
+ QAbstractSpinBox (0x0x7fec36809208) 0
+ primary-for QDateTimeEdit (0x0x7fec368091a0)
+ QWidget (0x0x7fec36733d90) 0
+ primary-for QAbstractSpinBox (0x0x7fec36809208)
+ QObject (0x0x7fec367c76c0) 0
+ primary-for QWidget (0x0x7fec36733d90)
+ QPaintDevice (0x0x7fec367c7720) 16
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 512)
+
+Class QDial::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDial::QPrivateSignal (0x0x7fec367c7ae0) 0 empty
+
+Vtable for QDial
+QDial::_ZTV5QDial: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDial)
+16 (int (*)(...))QDial::metaObject
+24 (int (*)(...))QDial::qt_metacast
+32 (int (*)(...))QDial::qt_metacall
+40 (int (*)(...))QDial::~QDial
+48 (int (*)(...))QDial::~QDial
+56 (int (*)(...))QDial::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDial::sizeHint
+136 (int (*)(...))QDial::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDial::mousePressEvent
+176 (int (*)(...))QDial::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QDial::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDial::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDial::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDial::sliderChange
+440 (int (*)(...))QDial::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI5QDial)
+464 (int (*)(...))QDial::_ZThn16_N5QDialD1Ev
+472 (int (*)(...))QDial::_ZThn16_N5QDialD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDial
+ size=40 align=8
+ base size=40 base align=8
+QDial (0x0x7fec36809270) 0
+ vptr=((& QDial::_ZTV5QDial) + 16)
+ QAbstractSlider (0x0x7fec368092d8) 0
+ primary-for QDial (0x0x7fec36809270)
+ QWidget (0x0x7fec36733e00) 0
+ primary-for QAbstractSlider (0x0x7fec368092d8)
+ QObject (0x0x7fec367c7a20) 0
+ primary-for QWidget (0x0x7fec36733e00)
+ QPaintDevice (0x0x7fec367c7a80) 16
+ vptr=((& QDial::_ZTV5QDial) + 464)
+
+Class QDialogButtonBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialogButtonBox::QPrivateSignal (0x0x7fec367c7d20) 0 empty
+
+Vtable for QDialogButtonBox
+QDialogButtonBox::_ZTV16QDialogButtonBox: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QDialogButtonBox)
+16 (int (*)(...))QDialogButtonBox::metaObject
+24 (int (*)(...))QDialogButtonBox::qt_metacast
+32 (int (*)(...))QDialogButtonBox::qt_metacall
+40 (int (*)(...))QDialogButtonBox::~QDialogButtonBox
+48 (int (*)(...))QDialogButtonBox::~QDialogButtonBox
+56 (int (*)(...))QDialogButtonBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QDialogButtonBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI16QDialogButtonBox)
+448 (int (*)(...))QDialogButtonBox::_ZThn16_N16QDialogButtonBoxD1Ev
+456 (int (*)(...))QDialogButtonBox::_ZThn16_N16QDialogButtonBoxD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDialogButtonBox
+ size=40 align=8
+ base size=40 base align=8
+QDialogButtonBox (0x0x7fec36809340) 0
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 16)
+ QWidget (0x0x7fec36733e70) 0
+ primary-for QDialogButtonBox (0x0x7fec36809340)
+ QObject (0x0x7fec367c7c60) 0
+ primary-for QWidget (0x0x7fec36733e70)
+ QPaintDevice (0x0x7fec367c7cc0) 16
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 448)
+
+Class QDockWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDockWidget::QPrivateSignal (0x0x7fec3688c420) 0 empty
+
+Vtable for QDockWidget
+QDockWidget::_ZTV11QDockWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QDockWidget)
+16 (int (*)(...))QDockWidget::metaObject
+24 (int (*)(...))QDockWidget::qt_metacast
+32 (int (*)(...))QDockWidget::qt_metacall
+40 (int (*)(...))QDockWidget::~QDockWidget
+48 (int (*)(...))QDockWidget::~QDockWidget
+56 (int (*)(...))QDockWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDockWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QDockWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QDockWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDockWidget::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QDockWidget)
+456 (int (*)(...))QDockWidget::_ZThn16_N11QDockWidgetD1Ev
+464 (int (*)(...))QDockWidget::_ZThn16_N11QDockWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDockWidget
+ size=40 align=8
+ base size=40 base align=8
+QDockWidget (0x0x7fec368094e0) 0
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 16)
+ QWidget (0x0x7fec3685df50) 0
+ primary-for QDockWidget (0x0x7fec368094e0)
+ QObject (0x0x7fec3688c360) 0
+ primary-for QWidget (0x0x7fec3685df50)
+ QPaintDevice (0x0x7fec3688c3c0) 16
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 456)
+
+Class QTileRules
+ size=8 align=4
+ base size=8 base align=4
+QTileRules (0x0x7fec3688cae0) 0
+
+Class QErrorMessage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QErrorMessage::QPrivateSignal (0x0x7fec3653d180) 0 empty
+
+Vtable for QErrorMessage
+QErrorMessage::_ZTV13QErrorMessage: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QErrorMessage)
+16 (int (*)(...))QErrorMessage::metaObject
+24 (int (*)(...))QErrorMessage::qt_metacast
+32 (int (*)(...))QErrorMessage::qt_metacall
+40 (int (*)(...))QErrorMessage::~QErrorMessage
+48 (int (*)(...))QErrorMessage::~QErrorMessage
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QErrorMessage::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QErrorMessage::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI13QErrorMessage)
+488 (int (*)(...))QErrorMessage::_ZThn16_N13QErrorMessageD1Ev
+496 (int (*)(...))QErrorMessage::_ZThn16_N13QErrorMessageD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QErrorMessage
+ size=40 align=8
+ base size=40 base align=8
+QErrorMessage (0x0x7fec368097b8) 0
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 16)
+ QDialog (0x0x7fec36809820) 0
+ primary-for QErrorMessage (0x0x7fec368097b8)
+ QWidget (0x0x7fec368bf9a0) 0
+ primary-for QDialog (0x0x7fec36809820)
+ QObject (0x0x7fec3653d0c0) 0
+ primary-for QWidget (0x0x7fec368bf9a0)
+ QPaintDevice (0x0x7fec3653d120) 16
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 488)
+
+Class QFileDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDialog::QPrivateSignal (0x0x7fec3653d3c0) 0 empty
+
+Vtable for QFileDialog
+QFileDialog::_ZTV11QFileDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFileDialog)
+16 (int (*)(...))QFileDialog::metaObject
+24 (int (*)(...))QFileDialog::qt_metacast
+32 (int (*)(...))QFileDialog::qt_metacall
+40 (int (*)(...))QFileDialog::~QFileDialog
+48 (int (*)(...))QFileDialog::~QFileDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QFileDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFileDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QFileDialog::done
+456 (int (*)(...))QFileDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QFileDialog)
+488 (int (*)(...))QFileDialog::_ZThn16_N11QFileDialogD1Ev
+496 (int (*)(...))QFileDialog::_ZThn16_N11QFileDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFileDialog
+ size=40 align=8
+ base size=40 base align=8
+QFileDialog (0x0x7fec36809888) 0
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 16)
+ QDialog (0x0x7fec368098f0) 0
+ primary-for QFileDialog (0x0x7fec36809888)
+ QWidget (0x0x7fec368bfa10) 0
+ primary-for QDialog (0x0x7fec368098f0)
+ QObject (0x0x7fec3653d300) 0
+ primary-for QWidget (0x0x7fec368bfa10)
+ QPaintDevice (0x0x7fec3653d360) 16
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 488)
+
+Vtable for QFileIconProvider
+QFileIconProvider::_ZTV17QFileIconProvider: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFileIconProvider)
+16 (int (*)(...))QFileIconProvider::~QFileIconProvider
+24 (int (*)(...))QFileIconProvider::~QFileIconProvider
+32 (int (*)(...))QFileIconProvider::icon
+40 (int (*)(...))QFileIconProvider::icon
+48 (int (*)(...))QAbstractFileIconProvider::type
+56 (int (*)(...))QAbstractFileIconProvider::setOptions
+64 (int (*)(...))QAbstractFileIconProvider::options
+
+Class QFileIconProvider
+ size=16 align=8
+ base size=16 base align=8
+QFileIconProvider (0x0x7fec36809a90) 0
+ vptr=((& QFileIconProvider::_ZTV17QFileIconProvider) + 16)
+ QAbstractFileIconProvider (0x0x7fec3653dd20) 0
+ primary-for QFileIconProvider (0x0x7fec36809a90)
+
+Class QFocusFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFocusFrame::QPrivateSignal (0x0x7fec3653df00) 0 empty
+
+Vtable for QFocusFrame
+QFocusFrame::_ZTV11QFocusFrame: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusFrame)
+16 (int (*)(...))QFocusFrame::metaObject
+24 (int (*)(...))QFocusFrame::qt_metacast
+32 (int (*)(...))QFocusFrame::qt_metacall
+40 (int (*)(...))QFocusFrame::~QFocusFrame
+48 (int (*)(...))QFocusFrame::~QFocusFrame
+56 (int (*)(...))QFocusFrame::event
+64 (int (*)(...))QFocusFrame::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFocusFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFocusFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QFocusFrame)
+456 (int (*)(...))QFocusFrame::_ZThn16_N11QFocusFrameD1Ev
+464 (int (*)(...))QFocusFrame::_ZThn16_N11QFocusFrameD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFocusFrame
+ size=40 align=8
+ base size=40 base align=8
+QFocusFrame (0x0x7fec36809af8) 0
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 16)
+ QWidget (0x0x7fec36561380) 0
+ primary-for QFocusFrame (0x0x7fec36809af8)
+ QObject (0x0x7fec3653de40) 0
+ primary-for QWidget (0x0x7fec36561380)
+ QPaintDevice (0x0x7fec3653dea0) 16
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 456)
+
+Class QFontComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontComboBox::QPrivateSignal (0x0x7fec365f2180) 0 empty
+
+Vtable for QFontComboBox
+QFontComboBox::_ZTV13QFontComboBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QFontComboBox)
+16 (int (*)(...))QFontComboBox::metaObject
+24 (int (*)(...))QFontComboBox::qt_metacast
+32 (int (*)(...))QFontComboBox::qt_metacall
+40 (int (*)(...))QFontComboBox::~QFontComboBox
+48 (int (*)(...))QFontComboBox::~QFontComboBox
+56 (int (*)(...))QFontComboBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFontComboBox::sizeHint
+136 (int (*)(...))QComboBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QComboBox::mousePressEvent
+176 (int (*)(...))QComboBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QComboBox::wheelEvent
+208 (int (*)(...))QComboBox::keyPressEvent
+216 (int (*)(...))QComboBox::keyReleaseEvent
+224 (int (*)(...))QComboBox::focusInEvent
+232 (int (*)(...))QComboBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QComboBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QComboBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QComboBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QComboBox::showEvent
+352 (int (*)(...))QComboBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QComboBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QComboBox::inputMethodEvent
+416 (int (*)(...))QComboBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QComboBox::setModel
+440 (int (*)(...))QComboBox::showPopup
+448 (int (*)(...))QComboBox::hidePopup
+456 (int (*)(...))QComboBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI13QFontComboBox)
+480 (int (*)(...))QFontComboBox::_ZThn16_N13QFontComboBoxD1Ev
+488 (int (*)(...))QFontComboBox::_ZThn16_N13QFontComboBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFontComboBox
+ size=40 align=8
+ base size=40 base align=8
+QFontComboBox (0x0x7fec36809b60) 0
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 16)
+ QComboBox (0x0x7fec36809bc8) 0
+ primary-for QFontComboBox (0x0x7fec36809b60)
+ QWidget (0x0x7fec365613f0) 0
+ primary-for QComboBox (0x0x7fec36809bc8)
+ QObject (0x0x7fec365f20c0) 0
+ primary-for QWidget (0x0x7fec365613f0)
+ QPaintDevice (0x0x7fec365f2120) 16
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 480)
+
+Class QFontDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontDialog::QPrivateSignal (0x0x7fec365f2840) 0 empty
+
+Vtable for QFontDialog
+QFontDialog::_ZTV11QFontDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFontDialog)
+16 (int (*)(...))QFontDialog::metaObject
+24 (int (*)(...))QFontDialog::qt_metacast
+32 (int (*)(...))QFontDialog::qt_metacall
+40 (int (*)(...))QFontDialog::~QFontDialog
+48 (int (*)(...))QFontDialog::~QFontDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QFontDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QFontDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFontDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QFontDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QFontDialog)
+488 (int (*)(...))QFontDialog::_ZThn16_N11QFontDialogD1Ev
+496 (int (*)(...))QFontDialog::_ZThn16_N11QFontDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFontDialog
+ size=40 align=8
+ base size=40 base align=8
+QFontDialog (0x0x7fec36809d68) 0
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 16)
+ QDialog (0x0x7fec36809dd0) 0
+ primary-for QFontDialog (0x0x7fec36809d68)
+ QWidget (0x0x7fec36561690) 0
+ primary-for QDialog (0x0x7fec36809dd0)
+ QObject (0x0x7fec365f2780) 0
+ primary-for QWidget (0x0x7fec36561690)
+ QPaintDevice (0x0x7fec365f27e0) 16
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 488)
+
+Class QFormLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFormLayout::QPrivateSignal (0x0x7fec365f2f00) 0 empty
+
+Class QFormLayout::TakeRowResult
+ size=16 align=8
+ base size=16 base align=8
+QFormLayout::TakeRowResult (0x0x7fec365f2f60) 0
+
+Vtable for QFormLayout
+QFormLayout::_ZTV11QFormLayout: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFormLayout)
+16 (int (*)(...))QFormLayout::metaObject
+24 (int (*)(...))QFormLayout::qt_metacast
+32 (int (*)(...))QFormLayout::qt_metacall
+40 (int (*)(...))QFormLayout::~QFormLayout
+48 (int (*)(...))QFormLayout::~QFormLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFormLayout::spacing
+120 (int (*)(...))QFormLayout::setSpacing
+128 (int (*)(...))QFormLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QFormLayout::addItem
+152 (int (*)(...))QFormLayout::expandingDirections
+160 (int (*)(...))QFormLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QFormLayout::setGeometry
+184 (int (*)(...))QFormLayout::itemAt
+192 (int (*)(...))QFormLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QFormLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QFormLayout::sizeHint
+264 (int (*)(...))QFormLayout::hasHeightForWidth
+272 (int (*)(...))QFormLayout::heightForWidth
+280 (int (*)(...))-16
+288 (int (*)(...))(& _ZTI11QFormLayout)
+296 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayoutD1Ev
+304 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayoutD0Ev
+312 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout8sizeHintEv
+320 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout11minimumSizeEv
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+336 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout19expandingDirectionsEv
+344 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayout11setGeometryERK5QRect
+352 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+368 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout17hasHeightForWidthEv
+376 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout14heightForWidthEi
+384 (int (*)(...))QLayoutItem::minimumHeightForWidth
+392 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayout10invalidateEv
+400 (int (*)(...))QLayoutItem::widget
+408 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+416 (int (*)(...))QLayoutItem::spacerItem
+424 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QFormLayout
+ size=32 align=8
+ base size=28 base align=8
+QFormLayout (0x0x7fec36809f70) 0
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 16)
+ QLayout (0x0x7fec365619a0) 0
+ primary-for QFormLayout (0x0x7fec36809f70)
+ QObject (0x0x7fec365f2e40) 0
+ primary-for QLayout (0x0x7fec365619a0)
+ QLayoutItem (0x0x7fec365f2ea0) 16
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 296)
+
+Class QGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGesture::QPrivateSignal (0x0x7fec36325240) 0 empty
+
+Vtable for QGesture
+QGesture::_ZTV8QGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QGesture)
+16 (int (*)(...))QGesture::metaObject
+24 (int (*)(...))QGesture::qt_metacast
+32 (int (*)(...))QGesture::qt_metacall
+40 (int (*)(...))QGesture::~QGesture
+48 (int (*)(...))QGesture::~QGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QGesture
+ size=16 align=8
+ base size=16 base align=8
+QGesture (0x0x7fec362edaf8) 0
+ vptr=((& QGesture::_ZTV8QGesture) + 16)
+ QObject (0x0x7fec363251e0) 0
+ primary-for QGesture (0x0x7fec362edaf8)
+
+Class QPanGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPanGesture::QPrivateSignal (0x0x7fec36325420) 0 empty
+
+Vtable for QPanGesture
+QPanGesture::_ZTV11QPanGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPanGesture)
+16 (int (*)(...))QPanGesture::metaObject
+24 (int (*)(...))QPanGesture::qt_metacast
+32 (int (*)(...))QPanGesture::qt_metacall
+40 (int (*)(...))QPanGesture::~QPanGesture
+48 (int (*)(...))QPanGesture::~QPanGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPanGesture
+ size=16 align=8
+ base size=16 base align=8
+QPanGesture (0x0x7fec362edb60) 0
+ vptr=((& QPanGesture::_ZTV11QPanGesture) + 16)
+ QGesture (0x0x7fec362edbc8) 0
+ primary-for QPanGesture (0x0x7fec362edb60)
+ QObject (0x0x7fec363253c0) 0
+ primary-for QGesture (0x0x7fec362edbc8)
+
+Class QPinchGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPinchGesture::QPrivateSignal (0x0x7fec36325600) 0 empty
+
+Vtable for QPinchGesture
+QPinchGesture::_ZTV13QPinchGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPinchGesture)
+16 (int (*)(...))QPinchGesture::metaObject
+24 (int (*)(...))QPinchGesture::qt_metacast
+32 (int (*)(...))QPinchGesture::qt_metacall
+40 (int (*)(...))QPinchGesture::~QPinchGesture
+48 (int (*)(...))QPinchGesture::~QPinchGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPinchGesture
+ size=16 align=8
+ base size=16 base align=8
+QPinchGesture (0x0x7fec362edc30) 0
+ vptr=((& QPinchGesture::_ZTV13QPinchGesture) + 16)
+ QGesture (0x0x7fec362edc98) 0
+ primary-for QPinchGesture (0x0x7fec362edc30)
+ QObject (0x0x7fec363255a0) 0
+ primary-for QGesture (0x0x7fec362edc98)
+
+Class QSwipeGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSwipeGesture::QPrivateSignal (0x0x7fec363c6e40) 0 empty
+
+Vtable for QSwipeGesture
+QSwipeGesture::_ZTV13QSwipeGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSwipeGesture)
+16 (int (*)(...))QSwipeGesture::metaObject
+24 (int (*)(...))QSwipeGesture::qt_metacast
+32 (int (*)(...))QSwipeGesture::qt_metacall
+40 (int (*)(...))QSwipeGesture::~QSwipeGesture
+48 (int (*)(...))QSwipeGesture::~QSwipeGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSwipeGesture
+ size=16 align=8
+ base size=16 base align=8
+QSwipeGesture (0x0x7fec363f75b0) 0
+ vptr=((& QSwipeGesture::_ZTV13QSwipeGesture) + 16)
+ QGesture (0x0x7fec363f7618) 0
+ primary-for QSwipeGesture (0x0x7fec363f75b0)
+ QObject (0x0x7fec363c6de0) 0
+ primary-for QGesture (0x0x7fec363f7618)
+
+Class QTapGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapGesture::QPrivateSignal (0x0x7fec3640a120) 0 empty
+
+Vtable for QTapGesture
+QTapGesture::_ZTV11QTapGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTapGesture)
+16 (int (*)(...))QTapGesture::metaObject
+24 (int (*)(...))QTapGesture::qt_metacast
+32 (int (*)(...))QTapGesture::qt_metacall
+40 (int (*)(...))QTapGesture::~QTapGesture
+48 (int (*)(...))QTapGesture::~QTapGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTapGesture
+ size=16 align=8
+ base size=16 base align=8
+QTapGesture (0x0x7fec363f7680) 0
+ vptr=((& QTapGesture::_ZTV11QTapGesture) + 16)
+ QGesture (0x0x7fec363f76e8) 0
+ primary-for QTapGesture (0x0x7fec363f7680)
+ QObject (0x0x7fec3640a0c0) 0
+ primary-for QGesture (0x0x7fec363f76e8)
+
+Class QTapAndHoldGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapAndHoldGesture::QPrivateSignal (0x0x7fec3640a300) 0 empty
+
+Vtable for QTapAndHoldGesture
+QTapAndHoldGesture::_ZTV18QTapAndHoldGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QTapAndHoldGesture)
+16 (int (*)(...))QTapAndHoldGesture::metaObject
+24 (int (*)(...))QTapAndHoldGesture::qt_metacast
+32 (int (*)(...))QTapAndHoldGesture::qt_metacall
+40 (int (*)(...))QTapAndHoldGesture::~QTapAndHoldGesture
+48 (int (*)(...))QTapAndHoldGesture::~QTapAndHoldGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTapAndHoldGesture
+ size=16 align=8
+ base size=16 base align=8
+QTapAndHoldGesture (0x0x7fec363f7750) 0
+ vptr=((& QTapAndHoldGesture::_ZTV18QTapAndHoldGesture) + 16)
+ QGesture (0x0x7fec363f77b8) 0
+ primary-for QTapAndHoldGesture (0x0x7fec363f7750)
+ QObject (0x0x7fec3640a2a0) 0
+ primary-for QGesture (0x0x7fec363f77b8)
+
+Vtable for QGestureEvent
+QGestureEvent::_ZTV13QGestureEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGestureEvent)
+16 (int (*)(...))QGestureEvent::~QGestureEvent
+24 (int (*)(...))QGestureEvent::~QGestureEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGestureEvent
+ size=64 align=8
+ base size=64 base align=8
+QGestureEvent (0x0x7fec363f7820) 0
+ vptr=((& QGestureEvent::_ZTV13QGestureEvent) + 16)
+ QEvent (0x0x7fec3640a480) 0
+ primary-for QGestureEvent (0x0x7fec363f7820)
+
+Vtable for QGestureRecognizer
+QGestureRecognizer::_ZTV18QGestureRecognizer: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGestureRecognizer)
+16 0
+24 0
+32 (int (*)(...))QGestureRecognizer::create
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGestureRecognizer::reset
+
+Class QGestureRecognizer
+ size=8 align=8
+ base size=8 base align=8
+QGestureRecognizer (0x0x7fec36126000) 0 nearly-empty
+ vptr=((& QGestureRecognizer::_ZTV18QGestureRecognizer) + 16)
+
+Vtable for QGraphicsItem
+QGraphicsItem::_ZTV13QGraphicsItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGraphicsItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsItem::isObscuredBy
+88 (int (*)(...))QGraphicsItem::opaqueArea
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))QGraphicsItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsItem (0x0x7fec36126420) 0
+ vptr=((& QGraphicsItem::_ZTV13QGraphicsItem) + 16)
+
+Class QGraphicsObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsObject::QPrivateSignal (0x0x7fec3621d6c0) 0 empty
+
+Vtable for QGraphicsObject
+QGraphicsObject::_ZTV15QGraphicsObject: 53 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsObject)
+16 (int (*)(...))QGraphicsObject::metaObject
+24 (int (*)(...))QGraphicsObject::qt_metacast
+32 (int (*)(...))QGraphicsObject::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QGraphicsObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))-16
+120 (int (*)(...))(& _ZTI15QGraphicsObject)
+128 0
+136 0
+144 (int (*)(...))QGraphicsItem::advance
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))QGraphicsItem::shape
+168 (int (*)(...))QGraphicsItem::contains
+176 (int (*)(...))QGraphicsItem::collidesWithItem
+184 (int (*)(...))QGraphicsItem::collidesWithPath
+192 (int (*)(...))QGraphicsItem::isObscuredBy
+200 (int (*)(...))QGraphicsItem::opaqueArea
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))QGraphicsItem::type
+224 (int (*)(...))QGraphicsItem::sceneEventFilter
+232 (int (*)(...))QGraphicsItem::sceneEvent
+240 (int (*)(...))QGraphicsItem::contextMenuEvent
+248 (int (*)(...))QGraphicsItem::dragEnterEvent
+256 (int (*)(...))QGraphicsItem::dragLeaveEvent
+264 (int (*)(...))QGraphicsItem::dragMoveEvent
+272 (int (*)(...))QGraphicsItem::dropEvent
+280 (int (*)(...))QGraphicsItem::focusInEvent
+288 (int (*)(...))QGraphicsItem::focusOutEvent
+296 (int (*)(...))QGraphicsItem::hoverEnterEvent
+304 (int (*)(...))QGraphicsItem::hoverMoveEvent
+312 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+320 (int (*)(...))QGraphicsItem::keyPressEvent
+328 (int (*)(...))QGraphicsItem::keyReleaseEvent
+336 (int (*)(...))QGraphicsItem::mousePressEvent
+344 (int (*)(...))QGraphicsItem::mouseMoveEvent
+352 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+360 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+368 (int (*)(...))QGraphicsItem::wheelEvent
+376 (int (*)(...))QGraphicsItem::inputMethodEvent
+384 (int (*)(...))QGraphicsItem::inputMethodQuery
+392 (int (*)(...))QGraphicsItem::itemChange
+400 (int (*)(...))QGraphicsItem::supportsExtension
+408 (int (*)(...))QGraphicsItem::setExtension
+416 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsObject
+ size=32 align=8
+ base size=32 base align=8
+QGraphicsObject (0x0x7fec36230000) 0
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 16)
+ QObject (0x0x7fec3621d600) 0
+ primary-for QGraphicsObject (0x0x7fec36230000)
+ QGraphicsItem (0x0x7fec3621d660) 16
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 128)
+
+Vtable for QAbstractGraphicsShapeItem
+QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractGraphicsShapeItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QAbstractGraphicsShapeItem::isObscuredBy
+88 (int (*)(...))QAbstractGraphicsShapeItem::opaqueArea
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))QGraphicsItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QAbstractGraphicsShapeItem
+ size=16 align=8
+ base size=16 base align=8
+QAbstractGraphicsShapeItem (0x0x7fec3611e958) 0
+ vptr=((& QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem) + 16)
+ QGraphicsItem (0x0x7fec3621d780) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fec3611e958)
+
+Vtable for QGraphicsPathItem
+QGraphicsPathItem::_ZTV17QGraphicsPathItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsPathItem)
+16 (int (*)(...))QGraphicsPathItem::~QGraphicsPathItem
+24 (int (*)(...))QGraphicsPathItem::~QGraphicsPathItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPathItem::boundingRect
+48 (int (*)(...))QGraphicsPathItem::shape
+56 (int (*)(...))QGraphicsPathItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPathItem::isObscuredBy
+88 (int (*)(...))QGraphicsPathItem::opaqueArea
+96 (int (*)(...))QGraphicsPathItem::paint
+104 (int (*)(...))QGraphicsPathItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPathItem::supportsExtension
+296 (int (*)(...))QGraphicsPathItem::setExtension
+304 (int (*)(...))QGraphicsPathItem::extension
+
+Class QGraphicsPathItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPathItem (0x0x7fec3611e9c0) 0
+ vptr=((& QGraphicsPathItem::_ZTV17QGraphicsPathItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7fec3611ea28) 0
+ primary-for QGraphicsPathItem (0x0x7fec3611e9c0)
+ QGraphicsItem (0x0x7fec3621d8a0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fec3611ea28)
+
+Vtable for QGraphicsRectItem
+QGraphicsRectItem::_ZTV17QGraphicsRectItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsRectItem)
+16 (int (*)(...))QGraphicsRectItem::~QGraphicsRectItem
+24 (int (*)(...))QGraphicsRectItem::~QGraphicsRectItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsRectItem::boundingRect
+48 (int (*)(...))QGraphicsRectItem::shape
+56 (int (*)(...))QGraphicsRectItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsRectItem::isObscuredBy
+88 (int (*)(...))QGraphicsRectItem::opaqueArea
+96 (int (*)(...))QGraphicsRectItem::paint
+104 (int (*)(...))QGraphicsRectItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsRectItem::supportsExtension
+296 (int (*)(...))QGraphicsRectItem::setExtension
+304 (int (*)(...))QGraphicsRectItem::extension
+
+Class QGraphicsRectItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsRectItem (0x0x7fec3611ea90) 0
+ vptr=((& QGraphicsRectItem::_ZTV17QGraphicsRectItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7fec3611eaf8) 0
+ primary-for QGraphicsRectItem (0x0x7fec3611ea90)
+ QGraphicsItem (0x0x7fec3621d9c0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fec3611eaf8)
+
+Vtable for QGraphicsEllipseItem
+QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsEllipseItem)
+16 (int (*)(...))QGraphicsEllipseItem::~QGraphicsEllipseItem
+24 (int (*)(...))QGraphicsEllipseItem::~QGraphicsEllipseItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsEllipseItem::boundingRect
+48 (int (*)(...))QGraphicsEllipseItem::shape
+56 (int (*)(...))QGraphicsEllipseItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsEllipseItem::isObscuredBy
+88 (int (*)(...))QGraphicsEllipseItem::opaqueArea
+96 (int (*)(...))QGraphicsEllipseItem::paint
+104 (int (*)(...))QGraphicsEllipseItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsEllipseItem::supportsExtension
+296 (int (*)(...))QGraphicsEllipseItem::setExtension
+304 (int (*)(...))QGraphicsEllipseItem::extension
+
+Class QGraphicsEllipseItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsEllipseItem (0x0x7fec3611eb60) 0
+ vptr=((& QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7fec3611ebc8) 0
+ primary-for QGraphicsEllipseItem (0x0x7fec3611eb60)
+ QGraphicsItem (0x0x7fec3621db40) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fec3611ebc8)
+
+Vtable for QGraphicsPolygonItem
+QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsPolygonItem)
+16 (int (*)(...))QGraphicsPolygonItem::~QGraphicsPolygonItem
+24 (int (*)(...))QGraphicsPolygonItem::~QGraphicsPolygonItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPolygonItem::boundingRect
+48 (int (*)(...))QGraphicsPolygonItem::shape
+56 (int (*)(...))QGraphicsPolygonItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPolygonItem::isObscuredBy
+88 (int (*)(...))QGraphicsPolygonItem::opaqueArea
+96 (int (*)(...))QGraphicsPolygonItem::paint
+104 (int (*)(...))QGraphicsPolygonItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPolygonItem::supportsExtension
+296 (int (*)(...))QGraphicsPolygonItem::setExtension
+304 (int (*)(...))QGraphicsPolygonItem::extension
+
+Class QGraphicsPolygonItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPolygonItem (0x0x7fec3611ec30) 0
+ vptr=((& QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7fec3611ec98) 0
+ primary-for QGraphicsPolygonItem (0x0x7fec3611ec30)
+ QGraphicsItem (0x0x7fec3621dcc0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fec3611ec98)
+
+Vtable for QGraphicsLineItem
+QGraphicsLineItem::_ZTV17QGraphicsLineItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsLineItem)
+16 (int (*)(...))QGraphicsLineItem::~QGraphicsLineItem
+24 (int (*)(...))QGraphicsLineItem::~QGraphicsLineItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsLineItem::boundingRect
+48 (int (*)(...))QGraphicsLineItem::shape
+56 (int (*)(...))QGraphicsLineItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsLineItem::isObscuredBy
+88 (int (*)(...))QGraphicsLineItem::opaqueArea
+96 (int (*)(...))QGraphicsLineItem::paint
+104 (int (*)(...))QGraphicsLineItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsLineItem::supportsExtension
+296 (int (*)(...))QGraphicsLineItem::setExtension
+304 (int (*)(...))QGraphicsLineItem::extension
+
+Class QGraphicsLineItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLineItem (0x0x7fec3611ed00) 0
+ vptr=((& QGraphicsLineItem::_ZTV17QGraphicsLineItem) + 16)
+ QGraphicsItem (0x0x7fec3621dde0) 0
+ primary-for QGraphicsLineItem (0x0x7fec3611ed00)
+
+Vtable for QGraphicsPixmapItem
+QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsPixmapItem)
+16 (int (*)(...))QGraphicsPixmapItem::~QGraphicsPixmapItem
+24 (int (*)(...))QGraphicsPixmapItem::~QGraphicsPixmapItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPixmapItem::boundingRect
+48 (int (*)(...))QGraphicsPixmapItem::shape
+56 (int (*)(...))QGraphicsPixmapItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPixmapItem::isObscuredBy
+88 (int (*)(...))QGraphicsPixmapItem::opaqueArea
+96 (int (*)(...))QGraphicsPixmapItem::paint
+104 (int (*)(...))QGraphicsPixmapItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPixmapItem::supportsExtension
+296 (int (*)(...))QGraphicsPixmapItem::setExtension
+304 (int (*)(...))QGraphicsPixmapItem::extension
+
+Class QGraphicsPixmapItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPixmapItem (0x0x7fec3611ed68) 0
+ vptr=((& QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem) + 16)
+ QGraphicsItem (0x0x7fec3621df60) 0
+ primary-for QGraphicsPixmapItem (0x0x7fec3611ed68)
+
+Class QGraphicsTextItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTextItem::QPrivateSignal (0x0x7fec362a51e0) 0 empty
+
+Vtable for QGraphicsTextItem
+QGraphicsTextItem::_ZTV17QGraphicsTextItem: 82 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsTextItem)
+16 (int (*)(...))QGraphicsTextItem::metaObject
+24 (int (*)(...))QGraphicsTextItem::qt_metacast
+32 (int (*)(...))QGraphicsTextItem::qt_metacall
+40 (int (*)(...))QGraphicsTextItem::~QGraphicsTextItem
+48 (int (*)(...))QGraphicsTextItem::~QGraphicsTextItem
+56 (int (*)(...))QGraphicsObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsTextItem::boundingRect
+120 (int (*)(...))QGraphicsTextItem::shape
+128 (int (*)(...))QGraphicsTextItem::contains
+136 (int (*)(...))QGraphicsTextItem::paint
+144 (int (*)(...))QGraphicsTextItem::isObscuredBy
+152 (int (*)(...))QGraphicsTextItem::opaqueArea
+160 (int (*)(...))QGraphicsTextItem::type
+168 (int (*)(...))QGraphicsTextItem::sceneEvent
+176 (int (*)(...))QGraphicsTextItem::mousePressEvent
+184 (int (*)(...))QGraphicsTextItem::mouseMoveEvent
+192 (int (*)(...))QGraphicsTextItem::mouseReleaseEvent
+200 (int (*)(...))QGraphicsTextItem::mouseDoubleClickEvent
+208 (int (*)(...))QGraphicsTextItem::contextMenuEvent
+216 (int (*)(...))QGraphicsTextItem::keyPressEvent
+224 (int (*)(...))QGraphicsTextItem::keyReleaseEvent
+232 (int (*)(...))QGraphicsTextItem::focusInEvent
+240 (int (*)(...))QGraphicsTextItem::focusOutEvent
+248 (int (*)(...))QGraphicsTextItem::dragEnterEvent
+256 (int (*)(...))QGraphicsTextItem::dragLeaveEvent
+264 (int (*)(...))QGraphicsTextItem::dragMoveEvent
+272 (int (*)(...))QGraphicsTextItem::dropEvent
+280 (int (*)(...))QGraphicsTextItem::inputMethodEvent
+288 (int (*)(...))QGraphicsTextItem::hoverEnterEvent
+296 (int (*)(...))QGraphicsTextItem::hoverMoveEvent
+304 (int (*)(...))QGraphicsTextItem::hoverLeaveEvent
+312 (int (*)(...))QGraphicsTextItem::inputMethodQuery
+320 (int (*)(...))QGraphicsTextItem::supportsExtension
+328 (int (*)(...))QGraphicsTextItem::setExtension
+336 (int (*)(...))QGraphicsTextItem::extension
+344 (int (*)(...))-16
+352 (int (*)(...))(& _ZTI17QGraphicsTextItem)
+360 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItemD1Ev
+368 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItemD0Ev
+376 (int (*)(...))QGraphicsItem::advance
+384 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem12boundingRectEv
+392 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem5shapeEv
+400 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem8containsERK7QPointF
+408 (int (*)(...))QGraphicsItem::collidesWithItem
+416 (int (*)(...))QGraphicsItem::collidesWithPath
+424 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem12isObscuredByEPK13QGraphicsItem
+432 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem10opaqueAreaEv
+440 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+448 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem4typeEv
+456 (int (*)(...))QGraphicsItem::sceneEventFilter
+464 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem10sceneEventEP6QEvent
+472 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem16contextMenuEventEP30QGraphicsSceneContextMenuEvent
+480 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14dragEnterEventEP27QGraphicsSceneDragDropEvent
+488 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14dragLeaveEventEP27QGraphicsSceneDragDropEvent
+496 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13dragMoveEventEP27QGraphicsSceneDragDropEvent
+504 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem9dropEventEP27QGraphicsSceneDragDropEvent
+512 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem12focusInEventEP11QFocusEvent
+520 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13focusOutEventEP11QFocusEvent
+528 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15hoverEnterEventEP24QGraphicsSceneHoverEvent
+536 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14hoverMoveEventEP24QGraphicsSceneHoverEvent
+544 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+552 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13keyPressEventEP9QKeyEvent
+560 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15keyReleaseEventEP9QKeyEvent
+568 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15mousePressEventEP24QGraphicsSceneMouseEvent
+576 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14mouseMoveEventEP24QGraphicsSceneMouseEvent
+584 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem17mouseReleaseEventEP24QGraphicsSceneMouseEvent
+592 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent
+600 (int (*)(...))QGraphicsItem::wheelEvent
+608 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem16inputMethodEventEP17QInputMethodEvent
+616 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem16inputMethodQueryEN2Qt16InputMethodQueryE
+624 (int (*)(...))QGraphicsItem::itemChange
+632 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem17supportsExtensionEN13QGraphicsItem9ExtensionE
+640 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem12setExtensionEN13QGraphicsItem9ExtensionERK8QVariant
+648 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem9extensionERK8QVariant
+
+Class QGraphicsTextItem
+ size=40 align=8
+ base size=40 base align=8
+QGraphicsTextItem (0x0x7fec3611edd0) 0
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 16)
+ QGraphicsObject (0x0x7fec36230460) 0
+ primary-for QGraphicsTextItem (0x0x7fec3611edd0)
+ QObject (0x0x7fec362a5120) 0
+ primary-for QGraphicsObject (0x0x7fec36230460)
+ QGraphicsItem (0x0x7fec362a5180) 16
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 360)
+
+Vtable for QGraphicsSimpleTextItem
+QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSimpleTextItem)
+16 (int (*)(...))QGraphicsSimpleTextItem::~QGraphicsSimpleTextItem
+24 (int (*)(...))QGraphicsSimpleTextItem::~QGraphicsSimpleTextItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsSimpleTextItem::boundingRect
+48 (int (*)(...))QGraphicsSimpleTextItem::shape
+56 (int (*)(...))QGraphicsSimpleTextItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsSimpleTextItem::isObscuredBy
+88 (int (*)(...))QGraphicsSimpleTextItem::opaqueArea
+96 (int (*)(...))QGraphicsSimpleTextItem::paint
+104 (int (*)(...))QGraphicsSimpleTextItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsSimpleTextItem::supportsExtension
+296 (int (*)(...))QGraphicsSimpleTextItem::setExtension
+304 (int (*)(...))QGraphicsSimpleTextItem::extension
+
+Class QGraphicsSimpleTextItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsSimpleTextItem (0x0x7fec3611ef08) 0
+ vptr=((& QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7fec3611ef70) 0
+ primary-for QGraphicsSimpleTextItem (0x0x7fec3611ef08)
+ QGraphicsItem (0x0x7fec362a5480) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fec3611ef70)
+
+Vtable for QGraphicsItemGroup
+QGraphicsItemGroup::_ZTV18QGraphicsItemGroup: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGraphicsItemGroup)
+16 (int (*)(...))QGraphicsItemGroup::~QGraphicsItemGroup
+24 (int (*)(...))QGraphicsItemGroup::~QGraphicsItemGroup
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsItemGroup::boundingRect
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsItemGroup::isObscuredBy
+88 (int (*)(...))QGraphicsItemGroup::opaqueArea
+96 (int (*)(...))QGraphicsItemGroup::paint
+104 (int (*)(...))QGraphicsItemGroup::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsItemGroup
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsItemGroup (0x0x7fec35ed0000) 0
+ vptr=((& QGraphicsItemGroup::_ZTV18QGraphicsItemGroup) + 16)
+ QGraphicsItem (0x0x7fec362a55a0) 0
+ primary-for QGraphicsItemGroup (0x0x7fec35ed0000)
+
+Vtable for QGraphicsLayoutItem
+QGraphicsLayoutItem::_ZTV19QGraphicsLayoutItem: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsLayoutItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsLayoutItem::setGeometry
+40 (int (*)(...))QGraphicsLayoutItem::getContentsMargins
+48 (int (*)(...))QGraphicsLayoutItem::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsLayoutItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLayoutItem (0x0x7fec362a5c60) 0
+ vptr=((& QGraphicsLayoutItem::_ZTV19QGraphicsLayoutItem) + 16)
+
+Vtable for QGraphicsLayout
+QGraphicsLayout::_ZTV15QGraphicsLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsLayout)
+16 0
+24 0
+32 (int (*)(...))QGraphicsLayoutItem::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))QGraphicsLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLayout (0x0x7fec35ed00d0) 0
+ vptr=((& QGraphicsLayout::_ZTV15QGraphicsLayout) + 16)
+ QGraphicsLayoutItem (0x0x7fec35f19360) 0
+ primary-for QGraphicsLayout (0x0x7fec35ed00d0)
+
+Class QGraphicsAnchor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsAnchor::QPrivateSignal (0x0x7fec35f19660) 0 empty
+
+Vtable for QGraphicsAnchor
+QGraphicsAnchor::_ZTV15QGraphicsAnchor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsAnchor)
+16 (int (*)(...))QGraphicsAnchor::metaObject
+24 (int (*)(...))QGraphicsAnchor::qt_metacast
+32 (int (*)(...))QGraphicsAnchor::qt_metacall
+40 (int (*)(...))QGraphicsAnchor::~QGraphicsAnchor
+48 (int (*)(...))QGraphicsAnchor::~QGraphicsAnchor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QGraphicsAnchor
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsAnchor (0x0x7fec35ed0138) 0
+ vptr=((& QGraphicsAnchor::_ZTV15QGraphicsAnchor) + 16)
+ QObject (0x0x7fec35f19600) 0
+ primary-for QGraphicsAnchor (0x0x7fec35ed0138)
+
+Vtable for QGraphicsAnchorLayout
+QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QGraphicsAnchorLayout)
+16 (int (*)(...))QGraphicsAnchorLayout::~QGraphicsAnchorLayout
+24 (int (*)(...))QGraphicsAnchorLayout::~QGraphicsAnchorLayout
+32 (int (*)(...))QGraphicsAnchorLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsAnchorLayout::sizeHint
+72 (int (*)(...))QGraphicsAnchorLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsAnchorLayout::count
+96 (int (*)(...))QGraphicsAnchorLayout::itemAt
+104 (int (*)(...))QGraphicsAnchorLayout::removeAt
+
+Class QGraphicsAnchorLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsAnchorLayout (0x0x7fec35ed01a0) 0
+ vptr=((& QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout) + 16)
+ QGraphicsLayout (0x0x7fec35ed0208) 0
+ primary-for QGraphicsAnchorLayout (0x0x7fec35ed01a0)
+ QGraphicsLayoutItem (0x0x7fec35f197e0) 0
+ primary-for QGraphicsLayout (0x0x7fec35ed0208)
+
+Class QGraphicsEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsEffect::QPrivateSignal (0x0x7fec35f19960) 0 empty
+
+Vtable for QGraphicsEffect
+QGraphicsEffect::_ZTV15QGraphicsEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsEffect)
+16 (int (*)(...))QGraphicsEffect::metaObject
+24 (int (*)(...))QGraphicsEffect::qt_metacast
+32 (int (*)(...))QGraphicsEffect::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsEffect (0x0x7fec35ed0270) 0
+ vptr=((& QGraphicsEffect::_ZTV15QGraphicsEffect) + 16)
+ QObject (0x0x7fec35f19900) 0
+ primary-for QGraphicsEffect (0x0x7fec35ed0270)
+
+Class QGraphicsColorizeEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsColorizeEffect::QPrivateSignal (0x0x7fec35f9d000) 0 empty
+
+Vtable for QGraphicsColorizeEffect
+QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsColorizeEffect)
+16 (int (*)(...))QGraphicsColorizeEffect::metaObject
+24 (int (*)(...))QGraphicsColorizeEffect::qt_metacast
+32 (int (*)(...))QGraphicsColorizeEffect::qt_metacall
+40 (int (*)(...))QGraphicsColorizeEffect::~QGraphicsColorizeEffect
+48 (int (*)(...))QGraphicsColorizeEffect::~QGraphicsColorizeEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))QGraphicsColorizeEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsColorizeEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsColorizeEffect (0x0x7fec35ed0410) 0
+ vptr=((& QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect) + 16)
+ QGraphicsEffect (0x0x7fec35ed0478) 0
+ primary-for QGraphicsColorizeEffect (0x0x7fec35ed0410)
+ QObject (0x0x7fec35f19f60) 0
+ primary-for QGraphicsEffect (0x0x7fec35ed0478)
+
+Class QGraphicsBlurEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsBlurEffect::QPrivateSignal (0x0x7fec35f9d1e0) 0 empty
+
+Vtable for QGraphicsBlurEffect
+QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsBlurEffect)
+16 (int (*)(...))QGraphicsBlurEffect::metaObject
+24 (int (*)(...))QGraphicsBlurEffect::qt_metacast
+32 (int (*)(...))QGraphicsBlurEffect::qt_metacall
+40 (int (*)(...))QGraphicsBlurEffect::~QGraphicsBlurEffect
+48 (int (*)(...))QGraphicsBlurEffect::~QGraphicsBlurEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsBlurEffect::boundingRectFor
+120 (int (*)(...))QGraphicsBlurEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsBlurEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsBlurEffect (0x0x7fec35ed04e0) 0
+ vptr=((& QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect) + 16)
+ QGraphicsEffect (0x0x7fec35ed0548) 0
+ primary-for QGraphicsBlurEffect (0x0x7fec35ed04e0)
+ QObject (0x0x7fec35f9d180) 0
+ primary-for QGraphicsEffect (0x0x7fec35ed0548)
+
+Class QGraphicsDropShadowEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsDropShadowEffect::QPrivateSignal (0x0x7fec35f9d900) 0 empty
+
+Vtable for QGraphicsDropShadowEffect
+QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QGraphicsDropShadowEffect)
+16 (int (*)(...))QGraphicsDropShadowEffect::metaObject
+24 (int (*)(...))QGraphicsDropShadowEffect::qt_metacast
+32 (int (*)(...))QGraphicsDropShadowEffect::qt_metacall
+40 (int (*)(...))QGraphicsDropShadowEffect::~QGraphicsDropShadowEffect
+48 (int (*)(...))QGraphicsDropShadowEffect::~QGraphicsDropShadowEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsDropShadowEffect::boundingRectFor
+120 (int (*)(...))QGraphicsDropShadowEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsDropShadowEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsDropShadowEffect (0x0x7fec35ed06e8) 0
+ vptr=((& QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect) + 16)
+ QGraphicsEffect (0x0x7fec35ed0750) 0
+ primary-for QGraphicsDropShadowEffect (0x0x7fec35ed06e8)
+ QObject (0x0x7fec35f9d8a0) 0
+ primary-for QGraphicsEffect (0x0x7fec35ed0750)
+
+Class QGraphicsOpacityEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsOpacityEffect::QPrivateSignal (0x0x7fec35f9dd20) 0 empty
+
+Vtable for QGraphicsOpacityEffect
+QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QGraphicsOpacityEffect)
+16 (int (*)(...))QGraphicsOpacityEffect::metaObject
+24 (int (*)(...))QGraphicsOpacityEffect::qt_metacast
+32 (int (*)(...))QGraphicsOpacityEffect::qt_metacall
+40 (int (*)(...))QGraphicsOpacityEffect::~QGraphicsOpacityEffect
+48 (int (*)(...))QGraphicsOpacityEffect::~QGraphicsOpacityEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))QGraphicsOpacityEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsOpacityEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsOpacityEffect (0x0x7fec35ed07b8) 0
+ vptr=((& QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect) + 16)
+ QGraphicsEffect (0x0x7fec35ed0820) 0
+ primary-for QGraphicsOpacityEffect (0x0x7fec35ed07b8)
+ QObject (0x0x7fec35f9dcc0) 0
+ primary-for QGraphicsEffect (0x0x7fec35ed0820)
+
+Vtable for QGraphicsGridLayout
+QGraphicsGridLayout::_ZTV19QGraphicsGridLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsGridLayout)
+16 (int (*)(...))QGraphicsGridLayout::~QGraphicsGridLayout
+24 (int (*)(...))QGraphicsGridLayout::~QGraphicsGridLayout
+32 (int (*)(...))QGraphicsGridLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsGridLayout::sizeHint
+72 (int (*)(...))QGraphicsGridLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsGridLayout::count
+96 (int (*)(...))QGraphicsGridLayout::itemAt
+104 (int (*)(...))QGraphicsGridLayout::removeAt
+
+Class QGraphicsGridLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsGridLayout (0x0x7fec35ed0888) 0
+ vptr=((& QGraphicsGridLayout::_ZTV19QGraphicsGridLayout) + 16)
+ QGraphicsLayout (0x0x7fec35ed08f0) 0
+ primary-for QGraphicsGridLayout (0x0x7fec35ed0888)
+ QGraphicsLayoutItem (0x0x7fec35f9dea0) 0
+ primary-for QGraphicsLayout (0x0x7fec35ed08f0)
+
+Class QGraphicsItemAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsItemAnimation::QPrivateSignal (0x0x7fec360330c0) 0 empty
+
+Vtable for QGraphicsItemAnimation
+QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QGraphicsItemAnimation)
+16 (int (*)(...))QGraphicsItemAnimation::metaObject
+24 (int (*)(...))QGraphicsItemAnimation::qt_metacast
+32 (int (*)(...))QGraphicsItemAnimation::qt_metacall
+40 (int (*)(...))QGraphicsItemAnimation::~QGraphicsItemAnimation
+48 (int (*)(...))QGraphicsItemAnimation::~QGraphicsItemAnimation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsItemAnimation::beforeAnimationStep
+120 (int (*)(...))QGraphicsItemAnimation::afterAnimationStep
+
+Class QGraphicsItemAnimation
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsItemAnimation (0x0x7fec35ed0a28) 0
+ vptr=((& QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation) + 16)
+ QObject (0x0x7fec36033060) 0
+ primary-for QGraphicsItemAnimation (0x0x7fec35ed0a28)
+
+Vtable for QGraphicsLinearLayout
+QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QGraphicsLinearLayout)
+16 (int (*)(...))QGraphicsLinearLayout::~QGraphicsLinearLayout
+24 (int (*)(...))QGraphicsLinearLayout::~QGraphicsLinearLayout
+32 (int (*)(...))QGraphicsLinearLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsLinearLayout::sizeHint
+72 (int (*)(...))QGraphicsLinearLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsLinearLayout::count
+96 (int (*)(...))QGraphicsLinearLayout::itemAt
+104 (int (*)(...))QGraphicsLinearLayout::removeAt
+
+Class QGraphicsLinearLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLinearLayout (0x0x7fec35ed0a90) 0
+ vptr=((& QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout) + 16)
+ QGraphicsLayout (0x0x7fec35ed0af8) 0
+ primary-for QGraphicsLinearLayout (0x0x7fec35ed0a90)
+ QGraphicsLayoutItem (0x0x7fec36033180) 0
+ primary-for QGraphicsLayout (0x0x7fec35ed0af8)
+
+Class QGraphicsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsWidget::QPrivateSignal (0x0x7fec36033480) 0 empty
+
+Vtable for QGraphicsWidget
+QGraphicsWidget::_ZTV15QGraphicsWidget: 93 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsWidget)
+16 (int (*)(...))QGraphicsWidget::metaObject
+24 (int (*)(...))QGraphicsWidget::qt_metacast
+32 (int (*)(...))QGraphicsWidget::qt_metacall
+40 (int (*)(...))QGraphicsWidget::~QGraphicsWidget
+48 (int (*)(...))QGraphicsWidget::~QGraphicsWidget
+56 (int (*)(...))QGraphicsWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsWidget::setGeometry
+120 (int (*)(...))QGraphicsWidget::getContentsMargins
+128 (int (*)(...))QGraphicsWidget::type
+136 (int (*)(...))QGraphicsWidget::paint
+144 (int (*)(...))QGraphicsWidget::paintWindowFrame
+152 (int (*)(...))QGraphicsWidget::boundingRect
+160 (int (*)(...))QGraphicsWidget::shape
+168 (int (*)(...))QGraphicsWidget::initStyleOption
+176 (int (*)(...))QGraphicsWidget::sizeHint
+184 (int (*)(...))QGraphicsWidget::updateGeometry
+192 (int (*)(...))QGraphicsWidget::itemChange
+200 (int (*)(...))QGraphicsWidget::propertyChange
+208 (int (*)(...))QGraphicsWidget::sceneEvent
+216 (int (*)(...))QGraphicsWidget::windowFrameEvent
+224 (int (*)(...))QGraphicsWidget::windowFrameSectionAt
+232 (int (*)(...))QGraphicsWidget::changeEvent
+240 (int (*)(...))QGraphicsWidget::closeEvent
+248 (int (*)(...))QGraphicsWidget::focusInEvent
+256 (int (*)(...))QGraphicsWidget::focusNextPrevChild
+264 (int (*)(...))QGraphicsWidget::focusOutEvent
+272 (int (*)(...))QGraphicsWidget::hideEvent
+280 (int (*)(...))QGraphicsWidget::moveEvent
+288 (int (*)(...))QGraphicsWidget::polishEvent
+296 (int (*)(...))QGraphicsWidget::resizeEvent
+304 (int (*)(...))QGraphicsWidget::showEvent
+312 (int (*)(...))QGraphicsWidget::hoverMoveEvent
+320 (int (*)(...))QGraphicsWidget::hoverLeaveEvent
+328 (int (*)(...))QGraphicsWidget::grabMouseEvent
+336 (int (*)(...))QGraphicsWidget::ungrabMouseEvent
+344 (int (*)(...))QGraphicsWidget::grabKeyboardEvent
+352 (int (*)(...))QGraphicsWidget::ungrabKeyboardEvent
+360 (int (*)(...))-16
+368 (int (*)(...))(& _ZTI15QGraphicsWidget)
+376 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidgetD1Ev
+384 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidgetD0Ev
+392 (int (*)(...))QGraphicsItem::advance
+400 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget12boundingRectEv
+408 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget5shapeEv
+416 (int (*)(...))QGraphicsItem::contains
+424 (int (*)(...))QGraphicsItem::collidesWithItem
+432 (int (*)(...))QGraphicsItem::collidesWithPath
+440 (int (*)(...))QGraphicsItem::isObscuredBy
+448 (int (*)(...))QGraphicsItem::opaqueArea
+456 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+464 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget4typeEv
+472 (int (*)(...))QGraphicsItem::sceneEventFilter
+480 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10sceneEventEP6QEvent
+488 (int (*)(...))QGraphicsItem::contextMenuEvent
+496 (int (*)(...))QGraphicsItem::dragEnterEvent
+504 (int (*)(...))QGraphicsItem::dragLeaveEvent
+512 (int (*)(...))QGraphicsItem::dragMoveEvent
+520 (int (*)(...))QGraphicsItem::dropEvent
+528 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget12focusInEventEP11QFocusEvent
+536 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget13focusOutEventEP11QFocusEvent
+544 (int (*)(...))QGraphicsItem::hoverEnterEvent
+552 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget14hoverMoveEventEP24QGraphicsSceneHoverEvent
+560 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+568 (int (*)(...))QGraphicsItem::keyPressEvent
+576 (int (*)(...))QGraphicsItem::keyReleaseEvent
+584 (int (*)(...))QGraphicsItem::mousePressEvent
+592 (int (*)(...))QGraphicsItem::mouseMoveEvent
+600 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+608 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+616 (int (*)(...))QGraphicsItem::wheelEvent
+624 (int (*)(...))QGraphicsItem::inputMethodEvent
+632 (int (*)(...))QGraphicsItem::inputMethodQuery
+640 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant
+648 (int (*)(...))QGraphicsItem::supportsExtension
+656 (int (*)(...))QGraphicsItem::setExtension
+664 (int (*)(...))QGraphicsItem::extension
+672 (int (*)(...))-32
+680 (int (*)(...))(& _ZTI15QGraphicsWidget)
+688 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidgetD1Ev
+696 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidgetD0Ev
+704 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget11setGeometryERK6QRectF
+712 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget18getContentsMarginsEPdS0_S0_S0_
+720 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget14updateGeometryEv
+728 (int (*)(...))QGraphicsLayoutItem::isEmpty
+736 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget8sizeHintEN2Qt8SizeHintERK6QSizeF
+
+Class QGraphicsWidget
+ size=48 align=8
+ base size=48 base align=8
+QGraphicsWidget (0x0x7fec36057000) 0
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 16)
+ QGraphicsObject (0x0x7fec36057070) 0
+ primary-for QGraphicsWidget (0x0x7fec36057000)
+ QObject (0x0x7fec36033360) 0
+ primary-for QGraphicsObject (0x0x7fec36057070)
+ QGraphicsItem (0x0x7fec360333c0) 16
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 376)
+ QGraphicsLayoutItem (0x0x7fec36033420) 32
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 688)
+
+Class QGraphicsProxyWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsProxyWidget::QPrivateSignal (0x0x7fec36033900) 0 empty
+
+Vtable for QGraphicsProxyWidget
+QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+16 (int (*)(...))QGraphicsProxyWidget::metaObject
+24 (int (*)(...))QGraphicsProxyWidget::qt_metacast
+32 (int (*)(...))QGraphicsProxyWidget::qt_metacall
+40 (int (*)(...))QGraphicsProxyWidget::~QGraphicsProxyWidget
+48 (int (*)(...))QGraphicsProxyWidget::~QGraphicsProxyWidget
+56 (int (*)(...))QGraphicsProxyWidget::event
+64 (int (*)(...))QGraphicsProxyWidget::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsProxyWidget::setGeometry
+120 (int (*)(...))QGraphicsWidget::getContentsMargins
+128 (int (*)(...))QGraphicsProxyWidget::type
+136 (int (*)(...))QGraphicsProxyWidget::paint
+144 (int (*)(...))QGraphicsWidget::paintWindowFrame
+152 (int (*)(...))QGraphicsWidget::boundingRect
+160 (int (*)(...))QGraphicsWidget::shape
+168 (int (*)(...))QGraphicsWidget::initStyleOption
+176 (int (*)(...))QGraphicsProxyWidget::sizeHint
+184 (int (*)(...))QGraphicsWidget::updateGeometry
+192 (int (*)(...))QGraphicsProxyWidget::itemChange
+200 (int (*)(...))QGraphicsWidget::propertyChange
+208 (int (*)(...))QGraphicsWidget::sceneEvent
+216 (int (*)(...))QGraphicsWidget::windowFrameEvent
+224 (int (*)(...))QGraphicsWidget::windowFrameSectionAt
+232 (int (*)(...))QGraphicsWidget::changeEvent
+240 (int (*)(...))QGraphicsWidget::closeEvent
+248 (int (*)(...))QGraphicsProxyWidget::focusInEvent
+256 (int (*)(...))QGraphicsProxyWidget::focusNextPrevChild
+264 (int (*)(...))QGraphicsProxyWidget::focusOutEvent
+272 (int (*)(...))QGraphicsProxyWidget::hideEvent
+280 (int (*)(...))QGraphicsWidget::moveEvent
+288 (int (*)(...))QGraphicsWidget::polishEvent
+296 (int (*)(...))QGraphicsProxyWidget::resizeEvent
+304 (int (*)(...))QGraphicsProxyWidget::showEvent
+312 (int (*)(...))QGraphicsProxyWidget::hoverMoveEvent
+320 (int (*)(...))QGraphicsProxyWidget::hoverLeaveEvent
+328 (int (*)(...))QGraphicsProxyWidget::grabMouseEvent
+336 (int (*)(...))QGraphicsProxyWidget::ungrabMouseEvent
+344 (int (*)(...))QGraphicsWidget::grabKeyboardEvent
+352 (int (*)(...))QGraphicsWidget::ungrabKeyboardEvent
+360 (int (*)(...))QGraphicsProxyWidget::contextMenuEvent
+368 (int (*)(...))QGraphicsProxyWidget::dragEnterEvent
+376 (int (*)(...))QGraphicsProxyWidget::dragLeaveEvent
+384 (int (*)(...))QGraphicsProxyWidget::dragMoveEvent
+392 (int (*)(...))QGraphicsProxyWidget::dropEvent
+400 (int (*)(...))QGraphicsProxyWidget::hoverEnterEvent
+408 (int (*)(...))QGraphicsProxyWidget::mouseMoveEvent
+416 (int (*)(...))QGraphicsProxyWidget::mousePressEvent
+424 (int (*)(...))QGraphicsProxyWidget::mouseReleaseEvent
+432 (int (*)(...))QGraphicsProxyWidget::mouseDoubleClickEvent
+440 (int (*)(...))QGraphicsProxyWidget::wheelEvent
+448 (int (*)(...))QGraphicsProxyWidget::keyPressEvent
+456 (int (*)(...))QGraphicsProxyWidget::keyReleaseEvent
+464 (int (*)(...))QGraphicsProxyWidget::inputMethodQuery
+472 (int (*)(...))QGraphicsProxyWidget::inputMethodEvent
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+496 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidgetD1Ev
+504 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidgetD0Ev
+512 (int (*)(...))QGraphicsItem::advance
+520 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget12boundingRectEv
+528 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget5shapeEv
+536 (int (*)(...))QGraphicsItem::contains
+544 (int (*)(...))QGraphicsItem::collidesWithItem
+552 (int (*)(...))QGraphicsItem::collidesWithPath
+560 (int (*)(...))QGraphicsItem::isObscuredBy
+568 (int (*)(...))QGraphicsItem::opaqueArea
+576 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+584 (int (*)(...))QGraphicsProxyWidget::_ZThn16_NK20QGraphicsProxyWidget4typeEv
+592 (int (*)(...))QGraphicsItem::sceneEventFilter
+600 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10sceneEventEP6QEvent
+608 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget16contextMenuEventEP30QGraphicsSceneContextMenuEvent
+616 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14dragEnterEventEP27QGraphicsSceneDragDropEvent
+624 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14dragLeaveEventEP27QGraphicsSceneDragDropEvent
+632 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13dragMoveEventEP27QGraphicsSceneDragDropEvent
+640 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget9dropEventEP27QGraphicsSceneDragDropEvent
+648 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget12focusInEventEP11QFocusEvent
+656 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13focusOutEventEP11QFocusEvent
+664 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15hoverEnterEventEP24QGraphicsSceneHoverEvent
+672 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14hoverMoveEventEP24QGraphicsSceneHoverEvent
+680 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+688 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13keyPressEventEP9QKeyEvent
+696 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15keyReleaseEventEP9QKeyEvent
+704 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15mousePressEventEP24QGraphicsSceneMouseEvent
+712 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14mouseMoveEventEP24QGraphicsSceneMouseEvent
+720 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget17mouseReleaseEventEP24QGraphicsSceneMouseEvent
+728 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent
+736 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget10wheelEventEP24QGraphicsSceneWheelEvent
+744 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget16inputMethodEventEP17QInputMethodEvent
+752 (int (*)(...))QGraphicsProxyWidget::_ZThn16_NK20QGraphicsProxyWidget16inputMethodQueryEN2Qt16InputMethodQueryE
+760 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant
+768 (int (*)(...))QGraphicsItem::supportsExtension
+776 (int (*)(...))QGraphicsItem::setExtension
+784 (int (*)(...))QGraphicsItem::extension
+792 (int (*)(...))-32
+800 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+808 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidgetD1Ev
+816 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidgetD0Ev
+824 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidget11setGeometryERK6QRectF
+832 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget18getContentsMarginsEPdS0_S0_S0_
+840 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget14updateGeometryEv
+848 (int (*)(...))QGraphicsLayoutItem::isEmpty
+856 (int (*)(...))QGraphicsProxyWidget::_ZThn32_NK20QGraphicsProxyWidget8sizeHintEN2Qt8SizeHintERK6QSizeF
+
+Class QGraphicsProxyWidget
+ size=48 align=8
+ base size=48 base align=8
+QGraphicsProxyWidget (0x0x7fec35ed0c30) 0
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 16)
+ QGraphicsWidget (0x0x7fec360571c0) 0
+ primary-for QGraphicsProxyWidget (0x0x7fec35ed0c30)
+ QGraphicsObject (0x0x7fec36057230) 0
+ primary-for QGraphicsWidget (0x0x7fec360571c0)
+ QObject (0x0x7fec360337e0) 0
+ primary-for QGraphicsObject (0x0x7fec36057230)
+ QGraphicsItem (0x0x7fec36033840) 16
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 496)
+ QGraphicsLayoutItem (0x0x7fec360338a0) 32
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 808)
+
+Class QGraphicsScene::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScene::QPrivateSignal (0x0x7fec36033c60) 0 empty
+
+Vtable for QGraphicsScene
+QGraphicsScene::_ZTV14QGraphicsScene: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGraphicsScene)
+16 (int (*)(...))QGraphicsScene::metaObject
+24 (int (*)(...))QGraphicsScene::qt_metacast
+32 (int (*)(...))QGraphicsScene::qt_metacall
+40 (int (*)(...))QGraphicsScene::~QGraphicsScene
+48 (int (*)(...))QGraphicsScene::~QGraphicsScene
+56 (int (*)(...))QGraphicsScene::event
+64 (int (*)(...))QGraphicsScene::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsScene::inputMethodQuery
+120 (int (*)(...))QGraphicsScene::contextMenuEvent
+128 (int (*)(...))QGraphicsScene::dragEnterEvent
+136 (int (*)(...))QGraphicsScene::dragMoveEvent
+144 (int (*)(...))QGraphicsScene::dragLeaveEvent
+152 (int (*)(...))QGraphicsScene::dropEvent
+160 (int (*)(...))QGraphicsScene::focusInEvent
+168 (int (*)(...))QGraphicsScene::focusOutEvent
+176 (int (*)(...))QGraphicsScene::helpEvent
+184 (int (*)(...))QGraphicsScene::keyPressEvent
+192 (int (*)(...))QGraphicsScene::keyReleaseEvent
+200 (int (*)(...))QGraphicsScene::mousePressEvent
+208 (int (*)(...))QGraphicsScene::mouseMoveEvent
+216 (int (*)(...))QGraphicsScene::mouseReleaseEvent
+224 (int (*)(...))QGraphicsScene::mouseDoubleClickEvent
+232 (int (*)(...))QGraphicsScene::wheelEvent
+240 (int (*)(...))QGraphicsScene::inputMethodEvent
+248 (int (*)(...))QGraphicsScene::drawBackground
+256 (int (*)(...))QGraphicsScene::drawForeground
+264 (int (*)(...))QGraphicsScene::drawItems
+272 (int (*)(...))QGraphicsScene::focusNextPrevChild
+
+Class QGraphicsScene
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsScene (0x0x7fec35ed0e38) 0
+ vptr=((& QGraphicsScene::_ZTV14QGraphicsScene) + 16)
+ QObject (0x0x7fec36033c00) 0
+ primary-for QGraphicsScene (0x0x7fec35ed0e38)
+
+Vtable for QGraphicsSceneEvent
+QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsSceneEvent)
+16 (int (*)(...))QGraphicsSceneEvent::~QGraphicsSceneEvent
+24 (int (*)(...))QGraphicsSceneEvent::~QGraphicsSceneEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneEvent (0x0x7fec35cf6888) 0
+ vptr=((& QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent) + 16)
+ QEvent (0x0x7fec35d8d060) 0
+ primary-for QGraphicsSceneEvent (0x0x7fec35cf6888)
+
+Vtable for QGraphicsSceneMouseEvent
+QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneMouseEvent)
+16 (int (*)(...))QGraphicsSceneMouseEvent::~QGraphicsSceneMouseEvent
+24 (int (*)(...))QGraphicsSceneMouseEvent::~QGraphicsSceneMouseEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneMouseEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneMouseEvent (0x0x7fec35cf68f0) 0
+ vptr=((& QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fec35cf6958) 0
+ primary-for QGraphicsSceneMouseEvent (0x0x7fec35cf68f0)
+ QEvent (0x0x7fec35d8d240) 0
+ primary-for QGraphicsSceneEvent (0x0x7fec35cf6958)
+
+Vtable for QGraphicsSceneWheelEvent
+QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneWheelEvent)
+16 (int (*)(...))QGraphicsSceneWheelEvent::~QGraphicsSceneWheelEvent
+24 (int (*)(...))QGraphicsSceneWheelEvent::~QGraphicsSceneWheelEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneWheelEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneWheelEvent (0x0x7fec35cf69c0) 0
+ vptr=((& QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fec35cf6a28) 0
+ primary-for QGraphicsSceneWheelEvent (0x0x7fec35cf69c0)
+ QEvent (0x0x7fec35d8d360) 0
+ primary-for QGraphicsSceneEvent (0x0x7fec35cf6a28)
+
+Vtable for QGraphicsSceneContextMenuEvent
+QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI30QGraphicsSceneContextMenuEvent)
+16 (int (*)(...))QGraphicsSceneContextMenuEvent::~QGraphicsSceneContextMenuEvent
+24 (int (*)(...))QGraphicsSceneContextMenuEvent::~QGraphicsSceneContextMenuEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneContextMenuEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneContextMenuEvent (0x0x7fec35cf6a90) 0
+ vptr=((& QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fec35cf6af8) 0
+ primary-for QGraphicsSceneContextMenuEvent (0x0x7fec35cf6a90)
+ QEvent (0x0x7fec35d8d480) 0
+ primary-for QGraphicsSceneEvent (0x0x7fec35cf6af8)
+
+Vtable for QGraphicsSceneHoverEvent
+QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneHoverEvent)
+16 (int (*)(...))QGraphicsSceneHoverEvent::~QGraphicsSceneHoverEvent
+24 (int (*)(...))QGraphicsSceneHoverEvent::~QGraphicsSceneHoverEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneHoverEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneHoverEvent (0x0x7fec35cf6b60) 0
+ vptr=((& QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fec35cf6bc8) 0
+ primary-for QGraphicsSceneHoverEvent (0x0x7fec35cf6b60)
+ QEvent (0x0x7fec35d8d5a0) 0
+ primary-for QGraphicsSceneEvent (0x0x7fec35cf6bc8)
+
+Vtable for QGraphicsSceneHelpEvent
+QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSceneHelpEvent)
+16 (int (*)(...))QGraphicsSceneHelpEvent::~QGraphicsSceneHelpEvent
+24 (int (*)(...))QGraphicsSceneHelpEvent::~QGraphicsSceneHelpEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneHelpEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneHelpEvent (0x0x7fec35cf6c30) 0
+ vptr=((& QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fec35cf6c98) 0
+ primary-for QGraphicsSceneHelpEvent (0x0x7fec35cf6c30)
+ QEvent (0x0x7fec35d8d6c0) 0
+ primary-for QGraphicsSceneEvent (0x0x7fec35cf6c98)
+
+Vtable for QGraphicsSceneDragDropEvent
+QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QGraphicsSceneDragDropEvent)
+16 (int (*)(...))QGraphicsSceneDragDropEvent::~QGraphicsSceneDragDropEvent
+24 (int (*)(...))QGraphicsSceneDragDropEvent::~QGraphicsSceneDragDropEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneDragDropEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneDragDropEvent (0x0x7fec35cf6d00) 0
+ vptr=((& QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fec35cf6d68) 0
+ primary-for QGraphicsSceneDragDropEvent (0x0x7fec35cf6d00)
+ QEvent (0x0x7fec35d8d7e0) 0
+ primary-for QGraphicsSceneEvent (0x0x7fec35cf6d68)
+
+Vtable for QGraphicsSceneResizeEvent
+QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QGraphicsSceneResizeEvent)
+16 (int (*)(...))QGraphicsSceneResizeEvent::~QGraphicsSceneResizeEvent
+24 (int (*)(...))QGraphicsSceneResizeEvent::~QGraphicsSceneResizeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneResizeEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneResizeEvent (0x0x7fec35cf6dd0) 0
+ vptr=((& QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fec35cf6e38) 0
+ primary-for QGraphicsSceneResizeEvent (0x0x7fec35cf6dd0)
+ QEvent (0x0x7fec35d8d900) 0
+ primary-for QGraphicsSceneEvent (0x0x7fec35cf6e38)
+
+Vtable for QGraphicsSceneMoveEvent
+QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSceneMoveEvent)
+16 (int (*)(...))QGraphicsSceneMoveEvent::~QGraphicsSceneMoveEvent
+24 (int (*)(...))QGraphicsSceneMoveEvent::~QGraphicsSceneMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneMoveEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneMoveEvent (0x0x7fec35cf6ea0) 0
+ vptr=((& QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fec35cf6f08) 0
+ primary-for QGraphicsSceneMoveEvent (0x0x7fec35cf6ea0)
+ QEvent (0x0x7fec35d8da20) 0
+ primary-for QGraphicsSceneEvent (0x0x7fec35cf6f08)
+
+Class QGraphicsTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTransform::QPrivateSignal (0x0x7fec35d8dba0) 0 empty
+
+Vtable for QGraphicsTransform
+QGraphicsTransform::_ZTV18QGraphicsTransform: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGraphicsTransform)
+16 (int (*)(...))QGraphicsTransform::metaObject
+24 (int (*)(...))QGraphicsTransform::qt_metacast
+32 (int (*)(...))QGraphicsTransform::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsTransform
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsTransform (0x0x7fec35cf6f70) 0
+ vptr=((& QGraphicsTransform::_ZTV18QGraphicsTransform) + 16)
+ QObject (0x0x7fec35d8db40) 0
+ primary-for QGraphicsTransform (0x0x7fec35cf6f70)
+
+Class QGraphicsScale::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScale::QPrivateSignal (0x0x7fec35d8dd80) 0 empty
+
+Vtable for QGraphicsScale
+QGraphicsScale::_ZTV14QGraphicsScale: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGraphicsScale)
+16 (int (*)(...))QGraphicsScale::metaObject
+24 (int (*)(...))QGraphicsScale::qt_metacast
+32 (int (*)(...))QGraphicsScale::qt_metacall
+40 (int (*)(...))QGraphicsScale::~QGraphicsScale
+48 (int (*)(...))QGraphicsScale::~QGraphicsScale
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsScale::applyTo
+
+Class QGraphicsScale
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsScale (0x0x7fec35cf6820) 0
+ vptr=((& QGraphicsScale::_ZTV14QGraphicsScale) + 16)
+ QGraphicsTransform (0x0x7fec35df6000) 0
+ primary-for QGraphicsScale (0x0x7fec35cf6820)
+ QObject (0x0x7fec35d8dd20) 0
+ primary-for QGraphicsTransform (0x0x7fec35df6000)
+
+Class QGraphicsRotation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsRotation::QPrivateSignal (0x0x7fec35d8df60) 0 empty
+
+Vtable for QGraphicsRotation
+QGraphicsRotation::_ZTV17QGraphicsRotation: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsRotation)
+16 (int (*)(...))QGraphicsRotation::metaObject
+24 (int (*)(...))QGraphicsRotation::qt_metacast
+32 (int (*)(...))QGraphicsRotation::qt_metacall
+40 (int (*)(...))QGraphicsRotation::~QGraphicsRotation
+48 (int (*)(...))QGraphicsRotation::~QGraphicsRotation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsRotation::applyTo
+
+Class QGraphicsRotation
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsRotation (0x0x7fec35df6068) 0
+ vptr=((& QGraphicsRotation::_ZTV17QGraphicsRotation) + 16)
+ QGraphicsTransform (0x0x7fec35df60d0) 0
+ primary-for QGraphicsRotation (0x0x7fec35df6068)
+ QObject (0x0x7fec35d8df00) 0
+ primary-for QGraphicsTransform (0x0x7fec35df60d0)
+
+Class QScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollArea::QPrivateSignal (0x0x7fec35e0b1e0) 0 empty
+
+Vtable for QScrollArea
+QScrollArea::_ZTV11QScrollArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QScrollArea)
+16 (int (*)(...))QScrollArea::metaObject
+24 (int (*)(...))QScrollArea::qt_metacast
+32 (int (*)(...))QScrollArea::qt_metacall
+40 (int (*)(...))QScrollArea::~QScrollArea
+48 (int (*)(...))QScrollArea::~QScrollArea
+56 (int (*)(...))QScrollArea::event
+64 (int (*)(...))QScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QScrollArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QScrollArea::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QScrollArea::scrollContentsBy
+464 (int (*)(...))QScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QScrollArea)
+488 (int (*)(...))QScrollArea::_ZThn16_N11QScrollAreaD1Ev
+496 (int (*)(...))QScrollArea::_ZThn16_N11QScrollAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QScrollArea
+ size=40 align=8
+ base size=40 base align=8
+QScrollArea (0x0x7fec35df6138) 0
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 16)
+ QAbstractScrollArea (0x0x7fec35df61a0) 0
+ primary-for QScrollArea (0x0x7fec35df6138)
+ QFrame (0x0x7fec35df6208) 0
+ primary-for QAbstractScrollArea (0x0x7fec35df61a0)
+ QWidget (0x0x7fec36057a80) 0
+ primary-for QFrame (0x0x7fec35df6208)
+ QObject (0x0x7fec35e0b120) 0
+ primary-for QWidget (0x0x7fec36057a80)
+ QPaintDevice (0x0x7fec35e0b180) 16
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 488)
+
+Class QGraphicsView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsView::QPrivateSignal (0x0x7fec35e0b420) 0 empty
+
+Vtable for QGraphicsView
+QGraphicsView::_ZTV13QGraphicsView: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGraphicsView)
+16 (int (*)(...))QGraphicsView::metaObject
+24 (int (*)(...))QGraphicsView::qt_metacast
+32 (int (*)(...))QGraphicsView::qt_metacall
+40 (int (*)(...))QGraphicsView::~QGraphicsView
+48 (int (*)(...))QGraphicsView::~QGraphicsView
+56 (int (*)(...))QGraphicsView::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QGraphicsView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QGraphicsView::mousePressEvent
+176 (int (*)(...))QGraphicsView::mouseReleaseEvent
+184 (int (*)(...))QGraphicsView::mouseDoubleClickEvent
+192 (int (*)(...))QGraphicsView::mouseMoveEvent
+200 (int (*)(...))QGraphicsView::wheelEvent
+208 (int (*)(...))QGraphicsView::keyPressEvent
+216 (int (*)(...))QGraphicsView::keyReleaseEvent
+224 (int (*)(...))QGraphicsView::focusInEvent
+232 (int (*)(...))QGraphicsView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QGraphicsView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QGraphicsView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QGraphicsView::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QGraphicsView::dragEnterEvent
+320 (int (*)(...))QGraphicsView::dragMoveEvent
+328 (int (*)(...))QGraphicsView::dragLeaveEvent
+336 (int (*)(...))QGraphicsView::dropEvent
+344 (int (*)(...))QGraphicsView::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QGraphicsView::inputMethodEvent
+416 (int (*)(...))QGraphicsView::inputMethodQuery
+424 (int (*)(...))QGraphicsView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QGraphicsView::setupViewport
+448 (int (*)(...))QGraphicsView::viewportEvent
+456 (int (*)(...))QGraphicsView::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QGraphicsView::drawBackground
+480 (int (*)(...))QGraphicsView::drawForeground
+488 (int (*)(...))QGraphicsView::drawItems
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI13QGraphicsView)
+512 (int (*)(...))QGraphicsView::_ZThn16_N13QGraphicsViewD1Ev
+520 (int (*)(...))QGraphicsView::_ZThn16_N13QGraphicsViewD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QGraphicsView
+ size=40 align=8
+ base size=40 base align=8
+QGraphicsView (0x0x7fec35df6270) 0
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 16)
+ QAbstractScrollArea (0x0x7fec35df62d8) 0
+ primary-for QGraphicsView (0x0x7fec35df6270)
+ QFrame (0x0x7fec35df6340) 0
+ primary-for QAbstractScrollArea (0x0x7fec35df62d8)
+ QWidget (0x0x7fec36057af0) 0
+ primary-for QFrame (0x0x7fec35df6340)
+ QObject (0x0x7fec35e0b360) 0
+ primary-for QWidget (0x0x7fec36057af0)
+ QPaintDevice (0x0x7fec35e0b3c0) 16
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 512)
+
+Class QGroupBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGroupBox::QPrivateSignal (0x0x7fec35aee480) 0 empty
+
+Vtable for QGroupBox
+QGroupBox::_ZTV9QGroupBox: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QGroupBox)
+16 (int (*)(...))QGroupBox::metaObject
+24 (int (*)(...))QGroupBox::qt_metacast
+32 (int (*)(...))QGroupBox::qt_metacall
+40 (int (*)(...))QGroupBox::~QGroupBox
+48 (int (*)(...))QGroupBox::~QGroupBox
+56 (int (*)(...))QGroupBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QGroupBox::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QGroupBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QGroupBox::mousePressEvent
+176 (int (*)(...))QGroupBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QGroupBox::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QGroupBox::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QGroupBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QGroupBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QGroupBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QGroupBox::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI9QGroupBox)
+456 (int (*)(...))QGroupBox::_ZThn16_N9QGroupBoxD1Ev
+464 (int (*)(...))QGroupBox::_ZThn16_N9QGroupBoxD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QGroupBox
+ size=40 align=8
+ base size=40 base align=8
+QGroupBox (0x0x7fec35df6618) 0
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 16)
+ QWidget (0x0x7fec35e292a0) 0
+ primary-for QGroupBox (0x0x7fec35df6618)
+ QObject (0x0x7fec35aee3c0) 0
+ primary-for QWidget (0x0x7fec35e292a0)
+ QPaintDevice (0x0x7fec35aee420) 16
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 456)
+
+Class QHeaderView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHeaderView::QPrivateSignal (0x0x7fec35aee6c0) 0 empty
+
+Vtable for QHeaderView
+QHeaderView::_ZTV11QHeaderView: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHeaderView)
+16 (int (*)(...))QHeaderView::metaObject
+24 (int (*)(...))QHeaderView::qt_metacast
+32 (int (*)(...))QHeaderView::qt_metacall
+40 (int (*)(...))QHeaderView::~QHeaderView
+48 (int (*)(...))QHeaderView::~QHeaderView
+56 (int (*)(...))QHeaderView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QHeaderView::setVisible
+128 (int (*)(...))QHeaderView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QHeaderView::mousePressEvent
+176 (int (*)(...))QHeaderView::mouseReleaseEvent
+184 (int (*)(...))QHeaderView::mouseDoubleClickEvent
+192 (int (*)(...))QHeaderView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QHeaderView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QHeaderView::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QHeaderView::viewportEvent
+456 (int (*)(...))QHeaderView::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QHeaderView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QHeaderView::visualRect
+504 (int (*)(...))QHeaderView::scrollTo
+512 (int (*)(...))QHeaderView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QHeaderView::reset
+552 (int (*)(...))QAbstractItemView::setRootIndex
+560 (int (*)(...))QHeaderView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QHeaderView::dataChanged
+584 (int (*)(...))QHeaderView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QHeaderView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QHeaderView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QHeaderView::moveCursor
+704 (int (*)(...))QHeaderView::horizontalOffset
+712 (int (*)(...))QHeaderView::verticalOffset
+720 (int (*)(...))QHeaderView::isIndexHidden
+728 (int (*)(...))QHeaderView::setSelection
+736 (int (*)(...))QHeaderView::visualRegionForSelection
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QHeaderView::paintSection
+792 (int (*)(...))QHeaderView::sectionSizeFromContents
+800 (int (*)(...))QHeaderView::initStyleOptionForIndex
+808 (int (*)(...))QHeaderView::initStyleOption
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI11QHeaderView)
+832 (int (*)(...))QHeaderView::_ZThn16_N11QHeaderViewD1Ev
+840 (int (*)(...))QHeaderView::_ZThn16_N11QHeaderViewD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHeaderView
+ size=40 align=8
+ base size=40 base align=8
+QHeaderView (0x0x7fec35df6680) 0
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 16)
+ QAbstractItemView (0x0x7fec35df66e8) 0
+ primary-for QHeaderView (0x0x7fec35df6680)
+ QAbstractScrollArea (0x0x7fec35df6750) 0
+ primary-for QAbstractItemView (0x0x7fec35df66e8)
+ QFrame (0x0x7fec35df67b8) 0
+ primary-for QAbstractScrollArea (0x0x7fec35df6750)
+ QWidget (0x0x7fec35e29310) 0
+ primary-for QFrame (0x0x7fec35df67b8)
+ QObject (0x0x7fec35aee600) 0
+ primary-for QWidget (0x0x7fec35e29310)
+ QPaintDevice (0x0x7fec35aee660) 16
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 832)
+
+Class QLineEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLineEdit::QPrivateSignal (0x0x7fec35aeeb40) 0 empty
+
+Vtable for QLineEdit
+QLineEdit::_ZTV9QLineEdit: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QLineEdit)
+16 (int (*)(...))QLineEdit::metaObject
+24 (int (*)(...))QLineEdit::qt_metacast
+32 (int (*)(...))QLineEdit::qt_metacall
+40 (int (*)(...))QLineEdit::~QLineEdit
+48 (int (*)(...))QLineEdit::~QLineEdit
+56 (int (*)(...))QLineEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QLineEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLineEdit::sizeHint
+136 (int (*)(...))QLineEdit::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QLineEdit::mousePressEvent
+176 (int (*)(...))QLineEdit::mouseReleaseEvent
+184 (int (*)(...))QLineEdit::mouseDoubleClickEvent
+192 (int (*)(...))QLineEdit::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QLineEdit::keyPressEvent
+216 (int (*)(...))QLineEdit::keyReleaseEvent
+224 (int (*)(...))QLineEdit::focusInEvent
+232 (int (*)(...))QLineEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLineEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QLineEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QLineEdit::dragEnterEvent
+320 (int (*)(...))QLineEdit::dragMoveEvent
+328 (int (*)(...))QLineEdit::dragLeaveEvent
+336 (int (*)(...))QLineEdit::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QLineEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QLineEdit::inputMethodEvent
+416 (int (*)(...))QLineEdit::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QLineEdit::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI9QLineEdit)
+456 (int (*)(...))QLineEdit::_ZThn16_N9QLineEditD1Ev
+464 (int (*)(...))QLineEdit::_ZThn16_N9QLineEditD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLineEdit
+ size=40 align=8
+ base size=40 base align=8
+QLineEdit (0x0x7fec35df6820) 0
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 16)
+ QWidget (0x0x7fec35e295b0) 0
+ primary-for QLineEdit (0x0x7fec35df6820)
+ QObject (0x0x7fec35aeea80) 0
+ primary-for QWidget (0x0x7fec35e295b0)
+ QPaintDevice (0x0x7fec35aeeae0) 16
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 456)
+
+Class QInputDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDialog::QPrivateSignal (0x0x7fec35aeef00) 0 empty
+
+Vtable for QInputDialog
+QInputDialog::_ZTV12QInputDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputDialog)
+16 (int (*)(...))QInputDialog::metaObject
+24 (int (*)(...))QInputDialog::qt_metacast
+32 (int (*)(...))QInputDialog::qt_metacall
+40 (int (*)(...))QInputDialog::~QInputDialog
+48 (int (*)(...))QInputDialog::~QInputDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QInputDialog::setVisible
+128 (int (*)(...))QInputDialog::sizeHint
+136 (int (*)(...))QInputDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QInputDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QInputDialog)
+488 (int (*)(...))QInputDialog::_ZThn16_N12QInputDialogD1Ev
+496 (int (*)(...))QInputDialog::_ZThn16_N12QInputDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QInputDialog
+ size=40 align=8
+ base size=40 base align=8
+QInputDialog (0x0x7fec35df6888) 0
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 16)
+ QDialog (0x0x7fec35df68f0) 0
+ primary-for QInputDialog (0x0x7fec35df6888)
+ QWidget (0x0x7fec35e298c0) 0
+ primary-for QDialog (0x0x7fec35df68f0)
+ QObject (0x0x7fec35aeee40) 0
+ primary-for QWidget (0x0x7fec35e298c0)
+ QPaintDevice (0x0x7fec35aeeea0) 16
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 488)
+
+Class QItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemDelegate::QPrivateSignal (0x0x7fec35b864e0) 0 empty
+
+Vtable for QItemDelegate
+QItemDelegate::_ZTV13QItemDelegate: 28 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QItemDelegate)
+16 (int (*)(...))QItemDelegate::metaObject
+24 (int (*)(...))QItemDelegate::qt_metacast
+32 (int (*)(...))QItemDelegate::qt_metacall
+40 (int (*)(...))QItemDelegate::~QItemDelegate
+48 (int (*)(...))QItemDelegate::~QItemDelegate
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QItemDelegate::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QItemDelegate::paint
+120 (int (*)(...))QItemDelegate::sizeHint
+128 (int (*)(...))QItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QItemDelegate::setEditorData
+152 (int (*)(...))QItemDelegate::setModelData
+160 (int (*)(...))QItemDelegate::updateEditorGeometry
+168 (int (*)(...))QItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+192 (int (*)(...))QItemDelegate::drawDisplay
+200 (int (*)(...))QItemDelegate::drawDecoration
+208 (int (*)(...))QItemDelegate::drawFocus
+216 (int (*)(...))QItemDelegate::drawCheck
+
+Class QItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QItemDelegate (0x0x7fec35df6a90) 0
+ vptr=((& QItemDelegate::_ZTV13QItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7fec35df6af8) 0
+ primary-for QItemDelegate (0x0x7fec35df6a90)
+ QObject (0x0x7fec35b86480) 0
+ primary-for QAbstractItemDelegate (0x0x7fec35df6af8)
+
+Vtable for QItemEditorCreatorBase
+QItemEditorCreatorBase::_ZTV22QItemEditorCreatorBase: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QItemEditorCreatorBase)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QItemEditorCreatorBase
+ size=8 align=8
+ base size=8 base align=8
+QItemEditorCreatorBase (0x0x7fec35b86660) 0 nearly-empty
+ vptr=((& QItemEditorCreatorBase::_ZTV22QItemEditorCreatorBase) + 16)
+
+Vtable for QItemEditorFactory
+QItemEditorFactory::_ZTV18QItemEditorFactory: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QItemEditorFactory)
+16 (int (*)(...))QItemEditorFactory::~QItemEditorFactory
+24 (int (*)(...))QItemEditorFactory::~QItemEditorFactory
+32 (int (*)(...))QItemEditorFactory::createEditor
+40 (int (*)(...))QItemEditorFactory::valuePropertyName
+
+Class QItemEditorFactory
+ size=16 align=8
+ base size=16 base align=8
+QItemEditorFactory (0x0x7fec35b869c0) 0
+ vptr=((& QItemEditorFactory::_ZTV18QItemEditorFactory) + 16)
+
+Class QKeySequenceEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QKeySequenceEdit::QPrivateSignal (0x0x7fec35b86ea0) 0 empty
+
+Vtable for QKeySequenceEdit
+QKeySequenceEdit::_ZTV16QKeySequenceEdit: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QKeySequenceEdit)
+16 (int (*)(...))QKeySequenceEdit::metaObject
+24 (int (*)(...))QKeySequenceEdit::qt_metacast
+32 (int (*)(...))QKeySequenceEdit::qt_metacall
+40 (int (*)(...))QKeySequenceEdit::~QKeySequenceEdit
+48 (int (*)(...))QKeySequenceEdit::~QKeySequenceEdit
+56 (int (*)(...))QKeySequenceEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QKeySequenceEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QKeySequenceEdit::keyPressEvent
+216 (int (*)(...))QKeySequenceEdit::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI16QKeySequenceEdit)
+448 (int (*)(...))QKeySequenceEdit::_ZThn16_N16QKeySequenceEditD1Ev
+456 (int (*)(...))QKeySequenceEdit::_ZThn16_N16QKeySequenceEditD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QKeySequenceEdit
+ size=40 align=8
+ base size=40 base align=8
+QKeySequenceEdit (0x0x7fec35df6c30) 0
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 16)
+ QWidget (0x0x7fec35e29bd0) 0
+ primary-for QKeySequenceEdit (0x0x7fec35df6c30)
+ QObject (0x0x7fec35b86de0) 0
+ primary-for QWidget (0x0x7fec35e29bd0)
+ QPaintDevice (0x0x7fec35b86e40) 16
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 448)
+
+Class QLabel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLabel::QPrivateSignal (0x0x7fec35c24120) 0 empty
+
+Vtable for QLabel
+QLabel::_ZTV6QLabel: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QLabel)
+16 (int (*)(...))QLabel::metaObject
+24 (int (*)(...))QLabel::qt_metacast
+32 (int (*)(...))QLabel::qt_metacall
+40 (int (*)(...))QLabel::~QLabel
+48 (int (*)(...))QLabel::~QLabel
+56 (int (*)(...))QLabel::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLabel::sizeHint
+136 (int (*)(...))QLabel::minimumSizeHint
+144 (int (*)(...))QLabel::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QLabel::mousePressEvent
+176 (int (*)(...))QLabel::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QLabel::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QLabel::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QLabel::focusInEvent
+232 (int (*)(...))QLabel::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLabel::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QLabel::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QLabel::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QLabel::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI6QLabel)
+456 (int (*)(...))QLabel::_ZThn16_N6QLabelD1Ev
+464 (int (*)(...))QLabel::_ZThn16_N6QLabelD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLabel
+ size=40 align=8
+ base size=40 base align=8
+QLabel (0x0x7fec35df6c98) 0
+ vptr=((& QLabel::_ZTV6QLabel) + 16)
+ QFrame (0x0x7fec35df6d00) 0
+ primary-for QLabel (0x0x7fec35df6c98)
+ QWidget (0x0x7fec35e29c40) 0
+ primary-for QFrame (0x0x7fec35df6d00)
+ QObject (0x0x7fec35c24060) 0
+ primary-for QWidget (0x0x7fec35e29c40)
+ QPaintDevice (0x0x7fec35c240c0) 16
+ vptr=((& QLabel::_ZTV6QLabel) + 456)
+
+Class QLCDNumber::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLCDNumber::QPrivateSignal (0x0x7fec35c24420) 0 empty
+
+Vtable for QLCDNumber
+QLCDNumber::_ZTV10QLCDNumber: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QLCDNumber)
+16 (int (*)(...))QLCDNumber::metaObject
+24 (int (*)(...))QLCDNumber::qt_metacast
+32 (int (*)(...))QLCDNumber::qt_metacall
+40 (int (*)(...))QLCDNumber::~QLCDNumber
+48 (int (*)(...))QLCDNumber::~QLCDNumber
+56 (int (*)(...))QLCDNumber::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLCDNumber::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLCDNumber::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI10QLCDNumber)
+456 (int (*)(...))QLCDNumber::_ZThn16_N10QLCDNumberD1Ev
+464 (int (*)(...))QLCDNumber::_ZThn16_N10QLCDNumberD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLCDNumber
+ size=40 align=8
+ base size=40 base align=8
+QLCDNumber (0x0x7fec35df6d68) 0
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 16)
+ QFrame (0x0x7fec35df6dd0) 0
+ primary-for QLCDNumber (0x0x7fec35df6d68)
+ QWidget (0x0x7fec35e29cb0) 0
+ primary-for QFrame (0x0x7fec35df6dd0)
+ QObject (0x0x7fec35c24360) 0
+ primary-for QWidget (0x0x7fec35e29cb0)
+ QPaintDevice (0x0x7fec35c243c0) 16
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 456)
+
+Class QListView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListView::QPrivateSignal (0x0x7fec35c247e0) 0 empty
+
+Vtable for QListView
+QListView::_ZTV9QListView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QListView)
+16 (int (*)(...))QListView::metaObject
+24 (int (*)(...))QListView::qt_metacast
+32 (int (*)(...))QListView::qt_metacall
+40 (int (*)(...))QListView::~QListView
+48 (int (*)(...))QListView::~QListView
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI9QListView)
+800 (int (*)(...))QListView::_ZThn16_N9QListViewD1Ev
+808 (int (*)(...))QListView::_ZThn16_N9QListViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QListView
+ size=40 align=8
+ base size=40 base align=8
+QListView (0x0x7fec35df6e38) 0
+ vptr=((& QListView::_ZTV9QListView) + 16)
+ QAbstractItemView (0x0x7fec35df6ea0) 0
+ primary-for QListView (0x0x7fec35df6e38)
+ QAbstractScrollArea (0x0x7fec35df6f08) 0
+ primary-for QAbstractItemView (0x0x7fec35df6ea0)
+ QFrame (0x0x7fec35df6f70) 0
+ primary-for QAbstractScrollArea (0x0x7fec35df6f08)
+ QWidget (0x0x7fec35c45070) 0
+ primary-for QFrame (0x0x7fec35df6f70)
+ QObject (0x0x7fec35c24720) 0
+ primary-for QWidget (0x0x7fec35c45070)
+ QPaintDevice (0x0x7fec35c24780) 16
+ vptr=((& QListView::_ZTV9QListView) + 800)
+
+Vtable for QListWidgetItem
+QListWidgetItem::_ZTV15QListWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QListWidgetItem)
+16 (int (*)(...))QListWidgetItem::~QListWidgetItem
+24 (int (*)(...))QListWidgetItem::~QListWidgetItem
+32 (int (*)(...))QListWidgetItem::clone
+40 (int (*)(...))QListWidgetItem::data
+48 (int (*)(...))QListWidgetItem::setData
+56 (int (*)(...))QListWidgetItem::operator<
+64 (int (*)(...))QListWidgetItem::read
+72 (int (*)(...))QListWidgetItem::write
+
+Class QListWidgetItem
+ size=40 align=8
+ base size=36 base align=8
+QListWidgetItem (0x0x7fec35c24d20) 0
+ vptr=((& QListWidgetItem::_ZTV15QListWidgetItem) + 16)
+
+Class QListWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListWidget::QPrivateSignal (0x0x7fec35ca17e0) 0 empty
+
+Vtable for QListWidget
+QListWidget::_ZTV11QListWidget: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QListWidget)
+16 (int (*)(...))QListWidget::metaObject
+24 (int (*)(...))QListWidget::qt_metacast
+32 (int (*)(...))QListWidget::qt_metacall
+40 (int (*)(...))QListWidget::~QListWidget
+48 (int (*)(...))QListWidget::~QListWidget
+56 (int (*)(...))QListWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QListWidget::setModel
+480 (int (*)(...))QListWidget::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))QListWidget::mimeTypes
+792 (int (*)(...))QListWidget::mimeData
+800 (int (*)(...))QListWidget::dropMimeData
+808 (int (*)(...))QListWidget::supportedDropActions
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI11QListWidget)
+832 (int (*)(...))QListWidget::_ZThn16_N11QListWidgetD1Ev
+840 (int (*)(...))QListWidget::_ZThn16_N11QListWidgetD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QListWidget
+ size=40 align=8
+ base size=40 base align=8
+QListWidget (0x0x7fec35cbc000) 0
+ vptr=((& QListWidget::_ZTV11QListWidget) + 16)
+ QListView (0x0x7fec35cbc068) 0
+ primary-for QListWidget (0x0x7fec35cbc000)
+ QAbstractItemView (0x0x7fec35cbc0d0) 0
+ primary-for QListView (0x0x7fec35cbc068)
+ QAbstractScrollArea (0x0x7fec35cbc138) 0
+ primary-for QAbstractItemView (0x0x7fec35cbc0d0)
+ QFrame (0x0x7fec35cbc1a0) 0
+ primary-for QAbstractScrollArea (0x0x7fec35cbc138)
+ QWidget (0x0x7fec35c45690) 0
+ primary-for QFrame (0x0x7fec35cbc1a0)
+ QObject (0x0x7fec35ca1720) 0
+ primary-for QWidget (0x0x7fec35c45690)
+ QPaintDevice (0x0x7fec35ca1780) 16
+ vptr=((& QListWidget::_ZTV11QListWidget) + 832)
+
+Class QMainWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMainWindow::QPrivateSignal (0x0x7fec35ca1cc0) 0 empty
+
+Vtable for QMainWindow
+QMainWindow::_ZTV11QMainWindow: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMainWindow)
+16 (int (*)(...))QMainWindow::metaObject
+24 (int (*)(...))QMainWindow::qt_metacast
+32 (int (*)(...))QMainWindow::qt_metacall
+40 (int (*)(...))QMainWindow::~QMainWindow
+48 (int (*)(...))QMainWindow::~QMainWindow
+56 (int (*)(...))QMainWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QMainWindow::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QMainWindow::createPopupMenu
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QMainWindow)
+456 (int (*)(...))QMainWindow::_ZThn16_N11QMainWindowD1Ev
+464 (int (*)(...))QMainWindow::_ZThn16_N11QMainWindowD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMainWindow
+ size=40 align=8
+ base size=40 base align=8
+QMainWindow (0x0x7fec35cbc208) 0
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 16)
+ QWidget (0x0x7fec35c45700) 0
+ primary-for QMainWindow (0x0x7fec35cbc208)
+ QObject (0x0x7fec35ca1c00) 0
+ primary-for QWidget (0x0x7fec35c45700)
+ QPaintDevice (0x0x7fec35ca1c60) 16
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 456)
+
+Class QMdiArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiArea::QPrivateSignal (0x0x7fec35914480) 0 empty
+
+Vtable for QMdiArea
+QMdiArea::_ZTV8QMdiArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QMdiArea)
+16 (int (*)(...))QMdiArea::metaObject
+24 (int (*)(...))QMdiArea::qt_metacast
+32 (int (*)(...))QMdiArea::qt_metacall
+40 (int (*)(...))QMdiArea::~QMdiArea
+48 (int (*)(...))QMdiArea::~QMdiArea
+56 (int (*)(...))QMdiArea::event
+64 (int (*)(...))QMdiArea::eventFilter
+72 (int (*)(...))QMdiArea::timerEvent
+80 (int (*)(...))QMdiArea::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMdiArea::sizeHint
+136 (int (*)(...))QMdiArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QMdiArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMdiArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QMdiArea::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QMdiArea::setupViewport
+448 (int (*)(...))QMdiArea::viewportEvent
+456 (int (*)(...))QMdiArea::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI8QMdiArea)
+488 (int (*)(...))QMdiArea::_ZThn16_N8QMdiAreaD1Ev
+496 (int (*)(...))QMdiArea::_ZThn16_N8QMdiAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMdiArea
+ size=40 align=8
+ base size=40 base align=8
+QMdiArea (0x0x7fec35cbc3a8) 0
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 16)
+ QAbstractScrollArea (0x0x7fec35cbc410) 0
+ primary-for QMdiArea (0x0x7fec35cbc3a8)
+ QFrame (0x0x7fec35cbc478) 0
+ primary-for QAbstractScrollArea (0x0x7fec35cbc410)
+ QWidget (0x0x7fec35c45a10) 0
+ primary-for QFrame (0x0x7fec35cbc478)
+ QObject (0x0x7fec359143c0) 0
+ primary-for QWidget (0x0x7fec35c45a10)
+ QPaintDevice (0x0x7fec35914420) 16
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 488)
+
+Class QMdiSubWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiSubWindow::QPrivateSignal (0x0x7fec35914c00) 0 empty
+
+Vtable for QMdiSubWindow
+QMdiSubWindow::_ZTV13QMdiSubWindow: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QMdiSubWindow)
+16 (int (*)(...))QMdiSubWindow::metaObject
+24 (int (*)(...))QMdiSubWindow::qt_metacast
+32 (int (*)(...))QMdiSubWindow::qt_metacall
+40 (int (*)(...))QMdiSubWindow::~QMdiSubWindow
+48 (int (*)(...))QMdiSubWindow::~QMdiSubWindow
+56 (int (*)(...))QMdiSubWindow::event
+64 (int (*)(...))QMdiSubWindow::eventFilter
+72 (int (*)(...))QMdiSubWindow::timerEvent
+80 (int (*)(...))QMdiSubWindow::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMdiSubWindow::sizeHint
+136 (int (*)(...))QMdiSubWindow::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMdiSubWindow::mousePressEvent
+176 (int (*)(...))QMdiSubWindow::mouseReleaseEvent
+184 (int (*)(...))QMdiSubWindow::mouseDoubleClickEvent
+192 (int (*)(...))QMdiSubWindow::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMdiSubWindow::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QMdiSubWindow::focusInEvent
+232 (int (*)(...))QMdiSubWindow::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QMdiSubWindow::leaveEvent
+256 (int (*)(...))QMdiSubWindow::paintEvent
+264 (int (*)(...))QMdiSubWindow::moveEvent
+272 (int (*)(...))QMdiSubWindow::resizeEvent
+280 (int (*)(...))QMdiSubWindow::closeEvent
+288 (int (*)(...))QMdiSubWindow::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QMdiSubWindow::showEvent
+352 (int (*)(...))QMdiSubWindow::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMdiSubWindow::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI13QMdiSubWindow)
+448 (int (*)(...))QMdiSubWindow::_ZThn16_N13QMdiSubWindowD1Ev
+456 (int (*)(...))QMdiSubWindow::_ZThn16_N13QMdiSubWindowD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMdiSubWindow
+ size=40 align=8
+ base size=40 base align=8
+QMdiSubWindow (0x0x7fec35cbc618) 0
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 16)
+ QWidget (0x0x7fec35c45d90) 0
+ primary-for QMdiSubWindow (0x0x7fec35cbc618)
+ QObject (0x0x7fec35914b40) 0
+ primary-for QWidget (0x0x7fec35c45d90)
+ QPaintDevice (0x0x7fec35914ba0) 16
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 448)
+
+Class QMenu::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenu::QPrivateSignal (0x0x7fec359fe240) 0 empty
+
+Vtable for QMenu
+QMenu::_ZTV5QMenu: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QMenu)
+16 (int (*)(...))QMenu::metaObject
+24 (int (*)(...))QMenu::qt_metacast
+32 (int (*)(...))QMenu::qt_metacall
+40 (int (*)(...))QMenu::~QMenu
+48 (int (*)(...))QMenu::~QMenu
+56 (int (*)(...))QMenu::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QMenu::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMenu::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMenu::mousePressEvent
+176 (int (*)(...))QMenu::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QMenu::mouseMoveEvent
+200 (int (*)(...))QMenu::wheelEvent
+208 (int (*)(...))QMenu::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QMenu::enterEvent
+248 (int (*)(...))QMenu::leaveEvent
+256 (int (*)(...))QMenu::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QMenu::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QMenu::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMenu::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QMenu::focusNextPrevChild
+432 (int (*)(...))QMenu::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI5QMenu)
+456 (int (*)(...))QMenu::_ZThn16_N5QMenuD1Ev
+464 (int (*)(...))QMenu::_ZThn16_N5QMenuD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMenu
+ size=40 align=8
+ base size=40 base align=8
+QMenu (0x0x7fec35cbc7b8) 0
+ vptr=((& QMenu::_ZTV5QMenu) + 16)
+ QWidget (0x0x7fec35a1b000) 0
+ primary-for QMenu (0x0x7fec35cbc7b8)
+ QObject (0x0x7fec359fe180) 0
+ primary-for QWidget (0x0x7fec35a1b000)
+ QPaintDevice (0x0x7fec359fe1e0) 16
+ vptr=((& QMenu::_ZTV5QMenu) + 456)
+
+Class QMenuBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenuBar::QPrivateSignal (0x0x7fec359fe600) 0 empty
+
+Vtable for QMenuBar
+QMenuBar::_ZTV8QMenuBar: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QMenuBar)
+16 (int (*)(...))QMenuBar::metaObject
+24 (int (*)(...))QMenuBar::qt_metacast
+32 (int (*)(...))QMenuBar::qt_metacall
+40 (int (*)(...))QMenuBar::~QMenuBar
+48 (int (*)(...))QMenuBar::~QMenuBar
+56 (int (*)(...))QMenuBar::event
+64 (int (*)(...))QMenuBar::eventFilter
+72 (int (*)(...))QMenuBar::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QMenuBar::setVisible
+128 (int (*)(...))QMenuBar::sizeHint
+136 (int (*)(...))QMenuBar::minimumSizeHint
+144 (int (*)(...))QMenuBar::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMenuBar::mousePressEvent
+176 (int (*)(...))QMenuBar::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QMenuBar::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMenuBar::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QMenuBar::focusInEvent
+232 (int (*)(...))QMenuBar::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QMenuBar::leaveEvent
+256 (int (*)(...))QMenuBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMenuBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QMenuBar::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMenuBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QMenuBar::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI8QMenuBar)
+456 (int (*)(...))QMenuBar::_ZThn16_N8QMenuBarD1Ev
+464 (int (*)(...))QMenuBar::_ZThn16_N8QMenuBarD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMenuBar
+ size=40 align=8
+ base size=40 base align=8
+QMenuBar (0x0x7fec35cbc820) 0
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 16)
+ QWidget (0x0x7fec35a1b070) 0
+ primary-for QMenuBar (0x0x7fec35cbc820)
+ QObject (0x0x7fec359fe540) 0
+ primary-for QWidget (0x0x7fec35a1b070)
+ QPaintDevice (0x0x7fec359fe5a0) 16
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 456)
+
+Class QMessageBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMessageBox::QPrivateSignal (0x0x7fec359fe900) 0 empty
+
+Vtable for QMessageBox
+QMessageBox::_ZTV11QMessageBox: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMessageBox)
+16 (int (*)(...))QMessageBox::metaObject
+24 (int (*)(...))QMessageBox::qt_metacast
+32 (int (*)(...))QMessageBox::qt_metacall
+40 (int (*)(...))QMessageBox::~QMessageBox
+48 (int (*)(...))QMessageBox::~QMessageBox
+56 (int (*)(...))QMessageBox::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMessageBox::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMessageBox::resizeEvent
+280 (int (*)(...))QMessageBox::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QMessageBox::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMessageBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QMessageBox)
+488 (int (*)(...))QMessageBox::_ZThn16_N11QMessageBoxD1Ev
+496 (int (*)(...))QMessageBox::_ZThn16_N11QMessageBoxD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMessageBox
+ size=40 align=8
+ base size=40 base align=8
+QMessageBox (0x0x7fec35cbc888) 0
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 16)
+ QDialog (0x0x7fec35cbc8f0) 0
+ primary-for QMessageBox (0x0x7fec35cbc888)
+ QWidget (0x0x7fec35a1b0e0) 0
+ primary-for QDialog (0x0x7fec35cbc8f0)
+ QObject (0x0x7fec359fe840) 0
+ primary-for QWidget (0x0x7fec35a1b0e0)
+ QPaintDevice (0x0x7fec359fe8a0) 16
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 488)
+
+Class QTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextEdit::QPrivateSignal (0x0x7fec35ac9240) 0 empty
+
+Class QTextEdit::ExtraSelection
+ size=24 align=8
+ base size=24 base align=8
+QTextEdit::ExtraSelection (0x0x7fec35ac92a0) 0
+
+Vtable for QTextEdit
+QTextEdit::_ZTV9QTextEdit: 74 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTextEdit)
+16 (int (*)(...))QTextEdit::metaObject
+24 (int (*)(...))QTextEdit::qt_metacast
+32 (int (*)(...))QTextEdit::qt_metacall
+40 (int (*)(...))QTextEdit::~QTextEdit
+48 (int (*)(...))QTextEdit::~QTextEdit
+56 (int (*)(...))QTextEdit::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTextEdit::mousePressEvent
+176 (int (*)(...))QTextEdit::mouseReleaseEvent
+184 (int (*)(...))QTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QTextEdit::mouseMoveEvent
+200 (int (*)(...))QTextEdit::wheelEvent
+208 (int (*)(...))QTextEdit::keyPressEvent
+216 (int (*)(...))QTextEdit::keyReleaseEvent
+224 (int (*)(...))QTextEdit::focusInEvent
+232 (int (*)(...))QTextEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTextEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QTextEdit::dragEnterEvent
+320 (int (*)(...))QTextEdit::dragMoveEvent
+328 (int (*)(...))QTextEdit::dragLeaveEvent
+336 (int (*)(...))QTextEdit::dropEvent
+344 (int (*)(...))QTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QTextEdit::inputMethodEvent
+416 (int (*)(...))QTextEdit::inputMethodQuery
+424 (int (*)(...))QTextEdit::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QTextEdit::loadResource
+480 (int (*)(...))QTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QTextEdit::canInsertFromMimeData
+496 (int (*)(...))QTextEdit::insertFromMimeData
+504 (int (*)(...))QTextEdit::doSetTextCursor
+512 (int (*)(...))-16
+520 (int (*)(...))(& _ZTI9QTextEdit)
+528 (int (*)(...))QTextEdit::_ZThn16_N9QTextEditD1Ev
+536 (int (*)(...))QTextEdit::_ZThn16_N9QTextEditD0Ev
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTextEdit
+ size=40 align=8
+ base size=40 base align=8
+QTextEdit (0x0x7fec35cbca90) 0
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 16)
+ QAbstractScrollArea (0x0x7fec35cbcaf8) 0
+ primary-for QTextEdit (0x0x7fec35cbca90)
+ QFrame (0x0x7fec35cbcb60) 0
+ primary-for QAbstractScrollArea (0x0x7fec35cbcaf8)
+ QWidget (0x0x7fec35a5f460) 0
+ primary-for QFrame (0x0x7fec35cbcb60)
+ QObject (0x0x7fec35ac9180) 0
+ primary-for QWidget (0x0x7fec35a5f460)
+ QPaintDevice (0x0x7fec35ac91e0) 16
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 528)
+
+Class QPlainTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextEdit::QPrivateSignal (0x0x7fec35ac9ba0) 0 empty
+
+Vtable for QPlainTextEdit
+QPlainTextEdit::_ZTV14QPlainTextEdit: 74 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QPlainTextEdit)
+16 (int (*)(...))QPlainTextEdit::metaObject
+24 (int (*)(...))QPlainTextEdit::qt_metacast
+32 (int (*)(...))QPlainTextEdit::qt_metacall
+40 (int (*)(...))QPlainTextEdit::~QPlainTextEdit
+48 (int (*)(...))QPlainTextEdit::~QPlainTextEdit
+56 (int (*)(...))QPlainTextEdit::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QPlainTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QPlainTextEdit::mousePressEvent
+176 (int (*)(...))QPlainTextEdit::mouseReleaseEvent
+184 (int (*)(...))QPlainTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QPlainTextEdit::mouseMoveEvent
+200 (int (*)(...))QPlainTextEdit::wheelEvent
+208 (int (*)(...))QPlainTextEdit::keyPressEvent
+216 (int (*)(...))QPlainTextEdit::keyReleaseEvent
+224 (int (*)(...))QPlainTextEdit::focusInEvent
+232 (int (*)(...))QPlainTextEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QPlainTextEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QPlainTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QPlainTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QPlainTextEdit::dragEnterEvent
+320 (int (*)(...))QPlainTextEdit::dragMoveEvent
+328 (int (*)(...))QPlainTextEdit::dragLeaveEvent
+336 (int (*)(...))QPlainTextEdit::dropEvent
+344 (int (*)(...))QPlainTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QPlainTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QPlainTextEdit::inputMethodEvent
+416 (int (*)(...))QPlainTextEdit::inputMethodQuery
+424 (int (*)(...))QPlainTextEdit::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QPlainTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QPlainTextEdit::loadResource
+480 (int (*)(...))QPlainTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QPlainTextEdit::canInsertFromMimeData
+496 (int (*)(...))QPlainTextEdit::insertFromMimeData
+504 (int (*)(...))QPlainTextEdit::doSetTextCursor
+512 (int (*)(...))-16
+520 (int (*)(...))(& _ZTI14QPlainTextEdit)
+528 (int (*)(...))QPlainTextEdit::_ZThn16_N14QPlainTextEditD1Ev
+536 (int (*)(...))QPlainTextEdit::_ZThn16_N14QPlainTextEditD0Ev
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QPlainTextEdit
+ size=40 align=8
+ base size=40 base align=8
+QPlainTextEdit (0x0x7fec35cbcd00) 0
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 16)
+ QAbstractScrollArea (0x0x7fec35cbcd68) 0
+ primary-for QPlainTextEdit (0x0x7fec35cbcd00)
+ QFrame (0x0x7fec35cbcdd0) 0
+ primary-for QAbstractScrollArea (0x0x7fec35cbcd68)
+ QWidget (0x0x7fec35a5f7e0) 0
+ primary-for QFrame (0x0x7fec35cbcdd0)
+ QObject (0x0x7fec35ac9ae0) 0
+ primary-for QWidget (0x0x7fec35a5f7e0)
+ QPaintDevice (0x0x7fec35ac9b40) 16
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 528)
+
+Class QPlainTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextDocumentLayout::QPrivateSignal (0x0x7fec35790120) 0 empty
+
+Vtable for QPlainTextDocumentLayout
+QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QPlainTextDocumentLayout)
+16 (int (*)(...))QPlainTextDocumentLayout::metaObject
+24 (int (*)(...))QPlainTextDocumentLayout::qt_metacast
+32 (int (*)(...))QPlainTextDocumentLayout::qt_metacall
+40 (int (*)(...))QPlainTextDocumentLayout::~QPlainTextDocumentLayout
+48 (int (*)(...))QPlainTextDocumentLayout::~QPlainTextDocumentLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPlainTextDocumentLayout::draw
+120 (int (*)(...))QPlainTextDocumentLayout::hitTest
+128 (int (*)(...))QPlainTextDocumentLayout::pageCount
+136 (int (*)(...))QPlainTextDocumentLayout::documentSize
+144 (int (*)(...))QPlainTextDocumentLayout::frameBoundingRect
+152 (int (*)(...))QPlainTextDocumentLayout::blockBoundingRect
+160 (int (*)(...))QPlainTextDocumentLayout::documentChanged
+168 (int (*)(...))QAbstractTextDocumentLayout::resizeInlineObject
+176 (int (*)(...))QAbstractTextDocumentLayout::positionInlineObject
+184 (int (*)(...))QAbstractTextDocumentLayout::drawInlineObject
+
+Class QPlainTextDocumentLayout
+ size=16 align=8
+ base size=16 base align=8
+QPlainTextDocumentLayout (0x0x7fec35cbce38) 0
+ vptr=((& QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout) + 16)
+ QAbstractTextDocumentLayout (0x0x7fec35cbcea0) 0
+ primary-for QPlainTextDocumentLayout (0x0x7fec35cbce38)
+ QObject (0x0x7fec357900c0) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7fec35cbcea0)
+
+Class QProgressBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressBar::QPrivateSignal (0x0x7fec35790360) 0 empty
+
+Vtable for QProgressBar
+QProgressBar::_ZTV12QProgressBar: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QProgressBar)
+16 (int (*)(...))QProgressBar::metaObject
+24 (int (*)(...))QProgressBar::qt_metacast
+32 (int (*)(...))QProgressBar::qt_metacall
+40 (int (*)(...))QProgressBar::~QProgressBar
+48 (int (*)(...))QProgressBar::~QProgressBar
+56 (int (*)(...))QProgressBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QProgressBar::sizeHint
+136 (int (*)(...))QProgressBar::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QProgressBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QProgressBar::text
+440 (int (*)(...))QProgressBar::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI12QProgressBar)
+464 (int (*)(...))QProgressBar::_ZThn16_N12QProgressBarD1Ev
+472 (int (*)(...))QProgressBar::_ZThn16_N12QProgressBarD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QProgressBar
+ size=40 align=8
+ base size=40 base align=8
+QProgressBar (0x0x7fec35cbcf08) 0
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 16)
+ QWidget (0x0x7fec35a5f930) 0
+ primary-for QProgressBar (0x0x7fec35cbcf08)
+ QObject (0x0x7fec357902a0) 0
+ primary-for QWidget (0x0x7fec35a5f930)
+ QPaintDevice (0x0x7fec35790300) 16
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 464)
+
+Class QProgressDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressDialog::QPrivateSignal (0x0x7fec35790660) 0 empty
+
+Vtable for QProgressDialog
+QProgressDialog::_ZTV15QProgressDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QProgressDialog)
+16 (int (*)(...))QProgressDialog::metaObject
+24 (int (*)(...))QProgressDialog::qt_metacast
+32 (int (*)(...))QProgressDialog::qt_metacall
+40 (int (*)(...))QProgressDialog::~QProgressDialog
+48 (int (*)(...))QProgressDialog::~QProgressDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QProgressDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QProgressDialog::resizeEvent
+280 (int (*)(...))QProgressDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QProgressDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QProgressDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI15QProgressDialog)
+488 (int (*)(...))QProgressDialog::_ZThn16_N15QProgressDialogD1Ev
+496 (int (*)(...))QProgressDialog::_ZThn16_N15QProgressDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QProgressDialog
+ size=40 align=8
+ base size=40 base align=8
+QProgressDialog (0x0x7fec35cbcf70) 0
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 16)
+ QDialog (0x0x7fec357b5000) 0
+ primary-for QProgressDialog (0x0x7fec35cbcf70)
+ QWidget (0x0x7fec35a5fa80) 0
+ primary-for QDialog (0x0x7fec357b5000)
+ QObject (0x0x7fec357905a0) 0
+ primary-for QWidget (0x0x7fec35a5fa80)
+ QPaintDevice (0x0x7fec35790600) 16
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 488)
+
+Class QProxyStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProxyStyle::QPrivateSignal (0x0x7fec35790840) 0 empty
+
+Vtable for QProxyStyle
+QProxyStyle::_ZTV11QProxyStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QProxyStyle)
+16 (int (*)(...))QProxyStyle::metaObject
+24 (int (*)(...))QProxyStyle::qt_metacast
+32 (int (*)(...))QProxyStyle::qt_metacall
+40 (int (*)(...))QProxyStyle::~QProxyStyle
+48 (int (*)(...))QProxyStyle::~QProxyStyle
+56 (int (*)(...))QProxyStyle::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QProxyStyle::polish
+120 (int (*)(...))QProxyStyle::unpolish
+128 (int (*)(...))QProxyStyle::polish
+136 (int (*)(...))QProxyStyle::unpolish
+144 (int (*)(...))QProxyStyle::polish
+152 (int (*)(...))QProxyStyle::itemTextRect
+160 (int (*)(...))QProxyStyle::itemPixmapRect
+168 (int (*)(...))QProxyStyle::drawItemText
+176 (int (*)(...))QProxyStyle::drawItemPixmap
+184 (int (*)(...))QProxyStyle::standardPalette
+192 (int (*)(...))QProxyStyle::drawPrimitive
+200 (int (*)(...))QProxyStyle::drawControl
+208 (int (*)(...))QProxyStyle::subElementRect
+216 (int (*)(...))QProxyStyle::drawComplexControl
+224 (int (*)(...))QProxyStyle::hitTestComplexControl
+232 (int (*)(...))QProxyStyle::subControlRect
+240 (int (*)(...))QProxyStyle::pixelMetric
+248 (int (*)(...))QProxyStyle::sizeFromContents
+256 (int (*)(...))QProxyStyle::styleHint
+264 (int (*)(...))QProxyStyle::standardPixmap
+272 (int (*)(...))QProxyStyle::standardIcon
+280 (int (*)(...))QProxyStyle::generatedIconPixmap
+288 (int (*)(...))QProxyStyle::layoutSpacing
+
+Class QProxyStyle
+ size=16 align=8
+ base size=16 base align=8
+QProxyStyle (0x0x7fec357b5068) 0
+ vptr=((& QProxyStyle::_ZTV11QProxyStyle) + 16)
+ QCommonStyle (0x0x7fec357b50d0) 0
+ primary-for QProxyStyle (0x0x7fec357b5068)
+ QStyle (0x0x7fec357b5138) 0
+ primary-for QCommonStyle (0x0x7fec357b50d0)
+ QObject (0x0x7fec357907e0) 0
+ primary-for QStyle (0x0x7fec357b5138)
+
+Class QRadioButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRadioButton::QPrivateSignal (0x0x7fec35790a80) 0 empty
+
+Vtable for QRadioButton
+QRadioButton::_ZTV12QRadioButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QRadioButton)
+16 (int (*)(...))QRadioButton::metaObject
+24 (int (*)(...))QRadioButton::qt_metacast
+32 (int (*)(...))QRadioButton::qt_metacall
+40 (int (*)(...))QRadioButton::~QRadioButton
+48 (int (*)(...))QRadioButton::~QRadioButton
+56 (int (*)(...))QRadioButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QRadioButton::sizeHint
+136 (int (*)(...))QRadioButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QRadioButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QRadioButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QRadioButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QRadioButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI12QRadioButton)
+480 (int (*)(...))QRadioButton::_ZThn16_N12QRadioButtonD1Ev
+488 (int (*)(...))QRadioButton::_ZThn16_N12QRadioButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QRadioButton
+ size=40 align=8
+ base size=40 base align=8
+QRadioButton (0x0x7fec357b51a0) 0
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 16)
+ QAbstractButton (0x0x7fec357b5208) 0
+ primary-for QRadioButton (0x0x7fec357b51a0)
+ QWidget (0x0x7fec35a5faf0) 0
+ primary-for QAbstractButton (0x0x7fec357b5208)
+ QObject (0x0x7fec357909c0) 0
+ primary-for QWidget (0x0x7fec35a5faf0)
+ QPaintDevice (0x0x7fec35790a20) 16
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 480)
+
+Class QScrollBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollBar::QPrivateSignal (0x0x7fec35790cc0) 0 empty
+
+Vtable for QScrollBar
+QScrollBar::_ZTV10QScrollBar: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QScrollBar)
+16 (int (*)(...))QScrollBar::metaObject
+24 (int (*)(...))QScrollBar::qt_metacast
+32 (int (*)(...))QScrollBar::qt_metacall
+40 (int (*)(...))QScrollBar::~QScrollBar
+48 (int (*)(...))QScrollBar::~QScrollBar
+56 (int (*)(...))QScrollBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QScrollBar::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QScrollBar::mousePressEvent
+176 (int (*)(...))QScrollBar::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QScrollBar::mouseMoveEvent
+200 (int (*)(...))QScrollBar::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QScrollBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QScrollBar::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QScrollBar::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QScrollBar::sliderChange
+440 (int (*)(...))QScrollBar::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI10QScrollBar)
+464 (int (*)(...))QScrollBar::_ZThn16_N10QScrollBarD1Ev
+472 (int (*)(...))QScrollBar::_ZThn16_N10QScrollBarD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QScrollBar
+ size=40 align=8
+ base size=40 base align=8
+QScrollBar (0x0x7fec357b5270) 0
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 16)
+ QAbstractSlider (0x0x7fec357b52d8) 0
+ primary-for QScrollBar (0x0x7fec357b5270)
+ QWidget (0x0x7fec35a5fb60) 0
+ primary-for QAbstractSlider (0x0x7fec357b52d8)
+ QObject (0x0x7fec35790c00) 0
+ primary-for QWidget (0x0x7fec35a5fb60)
+ QPaintDevice (0x0x7fec35790c60) 16
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 464)
+
+Vtable for QScrollerProperties
+QScrollerProperties::_ZTV19QScrollerProperties: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollerProperties)
+16 (int (*)(...))QScrollerProperties::~QScrollerProperties
+24 (int (*)(...))QScrollerProperties::~QScrollerProperties
+
+Class QScrollerProperties
+ size=16 align=8
+ base size=16 base align=8
+QScrollerProperties (0x0x7fec35790e40) 0
+ vptr=((& QScrollerProperties::_ZTV19QScrollerProperties) + 16)
+
+Class QScroller::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScroller::QPrivateSignal (0x0x7fec358c5240) 0 empty
+
+Vtable for QScroller
+QScroller::_ZTV9QScroller: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QScroller)
+16 (int (*)(...))QScroller::metaObject
+24 (int (*)(...))QScroller::qt_metacast
+32 (int (*)(...))QScroller::qt_metacall
+40 (int (*)(...))QScroller::~QScroller
+48 (int (*)(...))QScroller::~QScroller
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QScroller
+ size=24 align=8
+ base size=24 base align=8
+QScroller (0x0x7fec358c4208) 0
+ vptr=((& QScroller::_ZTV9QScroller) + 16)
+ QObject (0x0x7fec358c51e0) 0
+ primary-for QScroller (0x0x7fec358c4208)
+
+Class QSizeGrip::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSizeGrip::QPrivateSignal (0x0x7fec358c5540) 0 empty
+
+Vtable for QSizeGrip
+QSizeGrip::_ZTV9QSizeGrip: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSizeGrip)
+16 (int (*)(...))QSizeGrip::metaObject
+24 (int (*)(...))QSizeGrip::qt_metacast
+32 (int (*)(...))QSizeGrip::qt_metacall
+40 (int (*)(...))QSizeGrip::~QSizeGrip
+48 (int (*)(...))QSizeGrip::~QSizeGrip
+56 (int (*)(...))QSizeGrip::event
+64 (int (*)(...))QSizeGrip::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QSizeGrip::setVisible
+128 (int (*)(...))QSizeGrip::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSizeGrip::mousePressEvent
+176 (int (*)(...))QSizeGrip::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSizeGrip::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSizeGrip::paintEvent
+264 (int (*)(...))QSizeGrip::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QSizeGrip::showEvent
+352 (int (*)(...))QSizeGrip::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI9QSizeGrip)
+448 (int (*)(...))QSizeGrip::_ZThn16_N9QSizeGripD1Ev
+456 (int (*)(...))QSizeGrip::_ZThn16_N9QSizeGripD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSizeGrip
+ size=40 align=8
+ base size=40 base align=8
+QSizeGrip (0x0x7fec358c4270) 0
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 16)
+ QWidget (0x0x7fec358c35b0) 0
+ primary-for QSizeGrip (0x0x7fec358c4270)
+ QObject (0x0x7fec358c5480) 0
+ primary-for QWidget (0x0x7fec358c35b0)
+ QPaintDevice (0x0x7fec358c54e0) 16
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 448)
+
+Class QSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSpinBox::QPrivateSignal (0x0x7fec358c5780) 0 empty
+
+Vtable for QSpinBox
+QSpinBox::_ZTV8QSpinBox: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSpinBox)
+16 (int (*)(...))QSpinBox::metaObject
+24 (int (*)(...))QSpinBox::qt_metacast
+32 (int (*)(...))QSpinBox::qt_metacall
+40 (int (*)(...))QSpinBox::~QSpinBox
+48 (int (*)(...))QSpinBox::~QSpinBox
+56 (int (*)(...))QSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QSpinBox::validate
+440 (int (*)(...))QSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))QSpinBox::valueFromText
+488 (int (*)(...))QSpinBox::textFromValue
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI8QSpinBox)
+512 (int (*)(...))QSpinBox::_ZThn16_N8QSpinBoxD1Ev
+520 (int (*)(...))QSpinBox::_ZThn16_N8QSpinBoxD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QSpinBox (0x0x7fec358c42d8) 0
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 16)
+ QAbstractSpinBox (0x0x7fec358c4340) 0
+ primary-for QSpinBox (0x0x7fec358c42d8)
+ QWidget (0x0x7fec358c3620) 0
+ primary-for QAbstractSpinBox (0x0x7fec358c4340)
+ QObject (0x0x7fec358c56c0) 0
+ primary-for QWidget (0x0x7fec358c3620)
+ QPaintDevice (0x0x7fec358c5720) 16
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 512)
+
+Class QDoubleSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleSpinBox::QPrivateSignal (0x0x7fec358c59c0) 0 empty
+
+Vtable for QDoubleSpinBox
+QDoubleSpinBox::_ZTV14QDoubleSpinBox: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDoubleSpinBox)
+16 (int (*)(...))QDoubleSpinBox::metaObject
+24 (int (*)(...))QDoubleSpinBox::qt_metacast
+32 (int (*)(...))QDoubleSpinBox::qt_metacall
+40 (int (*)(...))QDoubleSpinBox::~QDoubleSpinBox
+48 (int (*)(...))QDoubleSpinBox::~QDoubleSpinBox
+56 (int (*)(...))QAbstractSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDoubleSpinBox::validate
+440 (int (*)(...))QDoubleSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))QDoubleSpinBox::valueFromText
+488 (int (*)(...))QDoubleSpinBox::textFromValue
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI14QDoubleSpinBox)
+512 (int (*)(...))QDoubleSpinBox::_ZThn16_N14QDoubleSpinBoxD1Ev
+520 (int (*)(...))QDoubleSpinBox::_ZThn16_N14QDoubleSpinBoxD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDoubleSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QDoubleSpinBox (0x0x7fec358c43a8) 0
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 16)
+ QAbstractSpinBox (0x0x7fec358c4410) 0
+ primary-for QDoubleSpinBox (0x0x7fec358c43a8)
+ QWidget (0x0x7fec358c3690) 0
+ primary-for QAbstractSpinBox (0x0x7fec358c4410)
+ QObject (0x0x7fec358c5900) 0
+ primary-for QWidget (0x0x7fec358c3690)
+ QPaintDevice (0x0x7fec358c5960) 16
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 512)
+
+Class QSplashScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplashScreen::QPrivateSignal (0x0x7fec358c5c00) 0 empty
+
+Vtable for QSplashScreen
+QSplashScreen::_ZTV13QSplashScreen: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSplashScreen)
+16 (int (*)(...))QSplashScreen::metaObject
+24 (int (*)(...))QSplashScreen::qt_metacast
+32 (int (*)(...))QSplashScreen::qt_metacall
+40 (int (*)(...))QSplashScreen::~QSplashScreen
+48 (int (*)(...))QSplashScreen::~QSplashScreen
+56 (int (*)(...))QSplashScreen::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSplashScreen::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QSplashScreen::drawContents
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI13QSplashScreen)
+456 (int (*)(...))QSplashScreen::_ZThn16_N13QSplashScreenD1Ev
+464 (int (*)(...))QSplashScreen::_ZThn16_N13QSplashScreenD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplashScreen
+ size=40 align=8
+ base size=40 base align=8
+QSplashScreen (0x0x7fec358c4478) 0
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 16)
+ QWidget (0x0x7fec358c3700) 0
+ primary-for QSplashScreen (0x0x7fec358c4478)
+ QObject (0x0x7fec358c5b40) 0
+ primary-for QWidget (0x0x7fec358c3700)
+ QPaintDevice (0x0x7fec358c5ba0) 16
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 456)
+
+Class QSplitter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitter::QPrivateSignal (0x0x7fec358c5e40) 0 empty
+
+Vtable for QSplitter
+QSplitter::_ZTV9QSplitter: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSplitter)
+16 (int (*)(...))QSplitter::metaObject
+24 (int (*)(...))QSplitter::qt_metacast
+32 (int (*)(...))QSplitter::qt_metacall
+40 (int (*)(...))QSplitter::~QSplitter
+48 (int (*)(...))QSplitter::~QSplitter
+56 (int (*)(...))QSplitter::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QSplitter::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSplitter::sizeHint
+136 (int (*)(...))QSplitter::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QSplitter::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QSplitter::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QSplitter::createHandle
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI9QSplitter)
+464 (int (*)(...))QSplitter::_ZThn16_N9QSplitterD1Ev
+472 (int (*)(...))QSplitter::_ZThn16_N9QSplitterD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplitter
+ size=40 align=8
+ base size=40 base align=8
+QSplitter (0x0x7fec358c44e0) 0
+ vptr=((& QSplitter::_ZTV9QSplitter) + 16)
+ QFrame (0x0x7fec358c4548) 0
+ primary-for QSplitter (0x0x7fec358c44e0)
+ QWidget (0x0x7fec358c3770) 0
+ primary-for QFrame (0x0x7fec358c4548)
+ QObject (0x0x7fec358c5d80) 0
+ primary-for QWidget (0x0x7fec358c3770)
+ QPaintDevice (0x0x7fec358c5de0) 16
+ vptr=((& QSplitter::_ZTV9QSplitter) + 464)
+
+Class QSplitterHandle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitterHandle::QPrivateSignal (0x0x7fec355420c0) 0 empty
+
+Vtable for QSplitterHandle
+QSplitterHandle::_ZTV15QSplitterHandle: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSplitterHandle)
+16 (int (*)(...))QSplitterHandle::metaObject
+24 (int (*)(...))QSplitterHandle::qt_metacast
+32 (int (*)(...))QSplitterHandle::qt_metacall
+40 (int (*)(...))QSplitterHandle::~QSplitterHandle
+48 (int (*)(...))QSplitterHandle::~QSplitterHandle
+56 (int (*)(...))QSplitterHandle::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSplitterHandle::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSplitterHandle::mousePressEvent
+176 (int (*)(...))QSplitterHandle::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSplitterHandle::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSplitterHandle::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QSplitterHandle::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI15QSplitterHandle)
+448 (int (*)(...))QSplitterHandle::_ZThn16_N15QSplitterHandleD1Ev
+456 (int (*)(...))QSplitterHandle::_ZThn16_N15QSplitterHandleD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplitterHandle
+ size=40 align=8
+ base size=40 base align=8
+QSplitterHandle (0x0x7fec358c45b0) 0
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 16)
+ QWidget (0x0x7fec358c37e0) 0
+ primary-for QSplitterHandle (0x0x7fec358c45b0)
+ QObject (0x0x7fec35542000) 0
+ primary-for QWidget (0x0x7fec358c37e0)
+ QPaintDevice (0x0x7fec35542060) 16
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 448)
+
+Class QStackedLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedLayout::QPrivateSignal (0x0x7fec35542300) 0 empty
+
+Vtable for QStackedLayout
+QStackedLayout::_ZTV14QStackedLayout: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QStackedLayout)
+16 (int (*)(...))QStackedLayout::metaObject
+24 (int (*)(...))QStackedLayout::qt_metacast
+32 (int (*)(...))QStackedLayout::qt_metacall
+40 (int (*)(...))QStackedLayout::~QStackedLayout
+48 (int (*)(...))QStackedLayout::~QStackedLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLayout::spacing
+120 (int (*)(...))QLayout::setSpacing
+128 (int (*)(...))QLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QStackedLayout::addItem
+152 (int (*)(...))QLayout::expandingDirections
+160 (int (*)(...))QStackedLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QStackedLayout::setGeometry
+184 (int (*)(...))QStackedLayout::itemAt
+192 (int (*)(...))QStackedLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QStackedLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QStackedLayout::sizeHint
+264 (int (*)(...))QStackedLayout::hasHeightForWidth
+272 (int (*)(...))QStackedLayout::heightForWidth
+280 (int (*)(...))-16
+288 (int (*)(...))(& _ZTI14QStackedLayout)
+296 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayoutD1Ev
+304 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayoutD0Ev
+312 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout8sizeHintEv
+320 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout11minimumSizeEv
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+336 (int (*)(...))QLayout::_ZThn16_NK7QLayout19expandingDirectionsEv
+344 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayout11setGeometryERK5QRect
+352 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+368 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout17hasHeightForWidthEv
+376 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout14heightForWidthEi
+384 (int (*)(...))QLayoutItem::minimumHeightForWidth
+392 (int (*)(...))QLayout::_ZThn16_N7QLayout10invalidateEv
+400 (int (*)(...))QLayoutItem::widget
+408 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+416 (int (*)(...))QLayoutItem::spacerItem
+424 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QStackedLayout
+ size=32 align=8
+ base size=28 base align=8
+QStackedLayout (0x0x7fec358c4618) 0
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 16)
+ QLayout (0x0x7fec358c3850) 0
+ primary-for QStackedLayout (0x0x7fec358c4618)
+ QObject (0x0x7fec35542240) 0
+ primary-for QLayout (0x0x7fec358c3850)
+ QLayoutItem (0x0x7fec355422a0) 16
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 296)
+
+Class QStackedWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedWidget::QPrivateSignal (0x0x7fec35542600) 0 empty
+
+Vtable for QStackedWidget
+QStackedWidget::_ZTV14QStackedWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QStackedWidget)
+16 (int (*)(...))QStackedWidget::metaObject
+24 (int (*)(...))QStackedWidget::qt_metacast
+32 (int (*)(...))QStackedWidget::qt_metacall
+40 (int (*)(...))QStackedWidget::~QStackedWidget
+48 (int (*)(...))QStackedWidget::~QStackedWidget
+56 (int (*)(...))QStackedWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI14QStackedWidget)
+456 (int (*)(...))QStackedWidget::_ZThn16_N14QStackedWidgetD1Ev
+464 (int (*)(...))QStackedWidget::_ZThn16_N14QStackedWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QStackedWidget
+ size=40 align=8
+ base size=40 base align=8
+QStackedWidget (0x0x7fec358c4680) 0
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 16)
+ QFrame (0x0x7fec358c46e8) 0
+ primary-for QStackedWidget (0x0x7fec358c4680)
+ QWidget (0x0x7fec358c39a0) 0
+ primary-for QFrame (0x0x7fec358c46e8)
+ QObject (0x0x7fec35542540) 0
+ primary-for QWidget (0x0x7fec358c39a0)
+ QPaintDevice (0x0x7fec355425a0) 16
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 456)
+
+Class QStatusBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStatusBar::QPrivateSignal (0x0x7fec35542840) 0 empty
+
+Vtable for QStatusBar
+QStatusBar::_ZTV10QStatusBar: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QStatusBar)
+16 (int (*)(...))QStatusBar::metaObject
+24 (int (*)(...))QStatusBar::qt_metacast
+32 (int (*)(...))QStatusBar::qt_metacall
+40 (int (*)(...))QStatusBar::~QStatusBar
+48 (int (*)(...))QStatusBar::~QStatusBar
+56 (int (*)(...))QStatusBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QStatusBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QStatusBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QStatusBar::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI10QStatusBar)
+448 (int (*)(...))QStatusBar::_ZThn16_N10QStatusBarD1Ev
+456 (int (*)(...))QStatusBar::_ZThn16_N10QStatusBarD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QStatusBar
+ size=40 align=8
+ base size=40 base align=8
+QStatusBar (0x0x7fec358c4750) 0
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 16)
+ QWidget (0x0x7fec358c3a10) 0
+ primary-for QStatusBar (0x0x7fec358c4750)
+ QObject (0x0x7fec35542780) 0
+ primary-for QWidget (0x0x7fec358c3a10)
+ QPaintDevice (0x0x7fec355427e0) 16
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 448)
+
+Class QStyledItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyledItemDelegate::QPrivateSignal (0x0x7fec35542a20) 0 empty
+
+Vtable for QStyledItemDelegate
+QStyledItemDelegate::_ZTV19QStyledItemDelegate: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QStyledItemDelegate)
+16 (int (*)(...))QStyledItemDelegate::metaObject
+24 (int (*)(...))QStyledItemDelegate::qt_metacast
+32 (int (*)(...))QStyledItemDelegate::qt_metacall
+40 (int (*)(...))QStyledItemDelegate::~QStyledItemDelegate
+48 (int (*)(...))QStyledItemDelegate::~QStyledItemDelegate
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QStyledItemDelegate::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStyledItemDelegate::paint
+120 (int (*)(...))QStyledItemDelegate::sizeHint
+128 (int (*)(...))QStyledItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QStyledItemDelegate::setEditorData
+152 (int (*)(...))QStyledItemDelegate::setModelData
+160 (int (*)(...))QStyledItemDelegate::updateEditorGeometry
+168 (int (*)(...))QStyledItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+192 (int (*)(...))QStyledItemDelegate::displayText
+200 (int (*)(...))QStyledItemDelegate::initStyleOption
+
+Class QStyledItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QStyledItemDelegate (0x0x7fec358c47b8) 0
+ vptr=((& QStyledItemDelegate::_ZTV19QStyledItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7fec358c4820) 0
+ primary-for QStyledItemDelegate (0x0x7fec358c47b8)
+ QObject (0x0x7fec355429c0) 0
+ primary-for QAbstractItemDelegate (0x0x7fec358c4820)
+
+Class QStyleFactory
+ size=1 align=1
+ base size=0 base align=1
+QStyleFactory (0x0x7fec35542ba0) 0 empty
+
+Class QStylePainter
+ size=24 align=8
+ base size=24 base align=8
+QStylePainter (0x0x7fec358c4888) 0
+ QPainter (0x0x7fec35542c00) 0
+
+Class QStylePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStylePlugin::QPrivateSignal (0x0x7fec355aa480) 0 empty
+
+Vtable for QStylePlugin
+QStylePlugin::_ZTV12QStylePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QStylePlugin)
+16 (int (*)(...))QStylePlugin::metaObject
+24 (int (*)(...))QStylePlugin::qt_metacast
+32 (int (*)(...))QStylePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QStylePlugin
+ size=16 align=8
+ base size=16 base align=8
+QStylePlugin (0x0x7fec358c48f0) 0
+ vptr=((& QStylePlugin::_ZTV12QStylePlugin) + 16)
+ QObject (0x0x7fec355aa420) 0
+ primary-for QStylePlugin (0x0x7fec358c48f0)
+
+Class QSystemTrayIcon::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSystemTrayIcon::QPrivateSignal (0x0x7fec355aa5a0) 0 empty
+
+Vtable for QSystemTrayIcon
+QSystemTrayIcon::_ZTV15QSystemTrayIcon: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSystemTrayIcon)
+16 (int (*)(...))QSystemTrayIcon::metaObject
+24 (int (*)(...))QSystemTrayIcon::qt_metacast
+32 (int (*)(...))QSystemTrayIcon::qt_metacall
+40 (int (*)(...))QSystemTrayIcon::~QSystemTrayIcon
+48 (int (*)(...))QSystemTrayIcon::~QSystemTrayIcon
+56 (int (*)(...))QSystemTrayIcon::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSystemTrayIcon
+ size=16 align=8
+ base size=16 base align=8
+QSystemTrayIcon (0x0x7fec358c4958) 0
+ vptr=((& QSystemTrayIcon::_ZTV15QSystemTrayIcon) + 16)
+ QObject (0x0x7fec355aa540) 0
+ primary-for QSystemTrayIcon (0x0x7fec358c4958)
+
+Class QTableView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableView::QPrivateSignal (0x0x7fec355aa8a0) 0 empty
+
+Vtable for QTableView
+QTableView::_ZTV10QTableView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTableView)
+16 (int (*)(...))QTableView::metaObject
+24 (int (*)(...))QTableView::qt_metacast
+32 (int (*)(...))QTableView::qt_metacall
+40 (int (*)(...))QTableView::~QTableView
+48 (int (*)(...))QTableView::~QTableView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTableView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTableView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QTableView::scrollContentsBy
+464 (int (*)(...))QTableView::viewportSizeHint
+472 (int (*)(...))QTableView::setModel
+480 (int (*)(...))QTableView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QTableView::visualRect
+504 (int (*)(...))QTableView::scrollTo
+512 (int (*)(...))QTableView::indexAt
+520 (int (*)(...))QTableView::sizeHintForRow
+528 (int (*)(...))QTableView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QTableView::setRootIndex
+560 (int (*)(...))QTableView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QTableView::selectionChanged
+608 (int (*)(...))QTableView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTableView::updateGeometries
+640 (int (*)(...))QTableView::verticalScrollbarAction
+648 (int (*)(...))QTableView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTableView::moveCursor
+704 (int (*)(...))QTableView::horizontalOffset
+712 (int (*)(...))QTableView::verticalOffset
+720 (int (*)(...))QTableView::isIndexHidden
+728 (int (*)(...))QTableView::setSelection
+736 (int (*)(...))QTableView::visualRegionForSelection
+744 (int (*)(...))QTableView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QTableView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI10QTableView)
+800 (int (*)(...))QTableView::_ZThn16_N10QTableViewD1Ev
+808 (int (*)(...))QTableView::_ZThn16_N10QTableViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTableView
+ size=40 align=8
+ base size=40 base align=8
+QTableView (0x0x7fec358c49c0) 0
+ vptr=((& QTableView::_ZTV10QTableView) + 16)
+ QAbstractItemView (0x0x7fec358c4a28) 0
+ primary-for QTableView (0x0x7fec358c49c0)
+ QAbstractScrollArea (0x0x7fec358c4a90) 0
+ primary-for QAbstractItemView (0x0x7fec358c4a28)
+ QFrame (0x0x7fec358c4af8) 0
+ primary-for QAbstractScrollArea (0x0x7fec358c4a90)
+ QWidget (0x0x7fec358c3f50) 0
+ primary-for QFrame (0x0x7fec358c4af8)
+ QObject (0x0x7fec355aa7e0) 0
+ primary-for QWidget (0x0x7fec358c3f50)
+ QPaintDevice (0x0x7fec355aa840) 16
+ vptr=((& QTableView::_ZTV10QTableView) + 800)
+
+Class QTableWidgetSelectionRange
+ size=16 align=4
+ base size=16 base align=4
+QTableWidgetSelectionRange (0x0x7fec355aaa20) 0
+
+Vtable for QTableWidgetItem
+QTableWidgetItem::_ZTV16QTableWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QTableWidgetItem)
+16 (int (*)(...))QTableWidgetItem::~QTableWidgetItem
+24 (int (*)(...))QTableWidgetItem::~QTableWidgetItem
+32 (int (*)(...))QTableWidgetItem::clone
+40 (int (*)(...))QTableWidgetItem::data
+48 (int (*)(...))QTableWidgetItem::setData
+56 (int (*)(...))QTableWidgetItem::operator<
+64 (int (*)(...))QTableWidgetItem::read
+72 (int (*)(...))QTableWidgetItem::write
+
+Class QTableWidgetItem
+ size=64 align=8
+ base size=60 base align=8
+QTableWidgetItem (0x0x7fec355aae40) 0
+ vptr=((& QTableWidgetItem::_ZTV16QTableWidgetItem) + 16)
+
+Class QTableWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableWidget::QPrivateSignal (0x0x7fec35685180) 0 empty
+
+Vtable for QTableWidget
+QTableWidget::_ZTV12QTableWidget: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTableWidget)
+16 (int (*)(...))QTableWidget::metaObject
+24 (int (*)(...))QTableWidget::qt_metacast
+32 (int (*)(...))QTableWidget::qt_metacall
+40 (int (*)(...))QTableWidget::~QTableWidget
+48 (int (*)(...))QTableWidget::~QTableWidget
+56 (int (*)(...))QTableWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTableView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTableView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QTableWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QTableView::scrollContentsBy
+464 (int (*)(...))QTableView::viewportSizeHint
+472 (int (*)(...))QTableWidget::setModel
+480 (int (*)(...))QTableView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QTableView::visualRect
+504 (int (*)(...))QTableView::scrollTo
+512 (int (*)(...))QTableView::indexAt
+520 (int (*)(...))QTableView::sizeHintForRow
+528 (int (*)(...))QTableView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QTableView::setRootIndex
+560 (int (*)(...))QTableView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QTableView::selectionChanged
+608 (int (*)(...))QTableView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTableView::updateGeometries
+640 (int (*)(...))QTableView::verticalScrollbarAction
+648 (int (*)(...))QTableView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTableView::moveCursor
+704 (int (*)(...))QTableView::horizontalOffset
+712 (int (*)(...))QTableView::verticalOffset
+720 (int (*)(...))QTableView::isIndexHidden
+728 (int (*)(...))QTableView::setSelection
+736 (int (*)(...))QTableView::visualRegionForSelection
+744 (int (*)(...))QTableView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QTableView::initViewItemOption
+784 (int (*)(...))QTableWidget::mimeTypes
+792 (int (*)(...))QTableWidget::mimeData
+800 (int (*)(...))QTableWidget::dropMimeData
+808 (int (*)(...))QTableWidget::supportedDropActions
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI12QTableWidget)
+832 (int (*)(...))QTableWidget::_ZThn16_N12QTableWidgetD1Ev
+840 (int (*)(...))QTableWidget::_ZThn16_N12QTableWidgetD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTableWidget
+ size=40 align=8
+ base size=40 base align=8
+QTableWidget (0x0x7fec35610410) 0
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 16)
+ QTableView (0x0x7fec35610478) 0
+ primary-for QTableWidget (0x0x7fec35610410)
+ QAbstractItemView (0x0x7fec356104e0) 0
+ primary-for QTableView (0x0x7fec35610478)
+ QAbstractScrollArea (0x0x7fec35610548) 0
+ primary-for QAbstractItemView (0x0x7fec356104e0)
+ QFrame (0x0x7fec356105b0) 0
+ primary-for QAbstractScrollArea (0x0x7fec35610548)
+ QWidget (0x0x7fec355f41c0) 0
+ primary-for QFrame (0x0x7fec356105b0)
+ QObject (0x0x7fec356850c0) 0
+ primary-for QWidget (0x0x7fec355f41c0)
+ QPaintDevice (0x0x7fec35685120) 16
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 832)
+
+Class QTextBrowser::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBrowser::QPrivateSignal (0x0x7fec35685540) 0 empty
+
+Vtable for QTextBrowser
+QTextBrowser::_ZTV12QTextBrowser: 79 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTextBrowser)
+16 (int (*)(...))QTextBrowser::metaObject
+24 (int (*)(...))QTextBrowser::qt_metacast
+32 (int (*)(...))QTextBrowser::qt_metacall
+40 (int (*)(...))QTextBrowser::~QTextBrowser
+48 (int (*)(...))QTextBrowser::~QTextBrowser
+56 (int (*)(...))QTextBrowser::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTextBrowser::mousePressEvent
+176 (int (*)(...))QTextBrowser::mouseReleaseEvent
+184 (int (*)(...))QTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QTextBrowser::mouseMoveEvent
+200 (int (*)(...))QTextEdit::wheelEvent
+208 (int (*)(...))QTextBrowser::keyPressEvent
+216 (int (*)(...))QTextEdit::keyReleaseEvent
+224 (int (*)(...))QTextEdit::focusInEvent
+232 (int (*)(...))QTextBrowser::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTextBrowser::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QTextEdit::dragEnterEvent
+320 (int (*)(...))QTextEdit::dragMoveEvent
+328 (int (*)(...))QTextEdit::dragLeaveEvent
+336 (int (*)(...))QTextEdit::dropEvent
+344 (int (*)(...))QTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QTextEdit::inputMethodEvent
+416 (int (*)(...))QTextEdit::inputMethodQuery
+424 (int (*)(...))QTextBrowser::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QTextBrowser::loadResource
+480 (int (*)(...))QTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QTextEdit::canInsertFromMimeData
+496 (int (*)(...))QTextEdit::insertFromMimeData
+504 (int (*)(...))QTextEdit::doSetTextCursor
+512 (int (*)(...))QTextBrowser::backward
+520 (int (*)(...))QTextBrowser::forward
+528 (int (*)(...))QTextBrowser::home
+536 (int (*)(...))QTextBrowser::reload
+544 (int (*)(...))QTextBrowser::doSetSource
+552 (int (*)(...))-16
+560 (int (*)(...))(& _ZTI12QTextBrowser)
+568 (int (*)(...))QTextBrowser::_ZThn16_N12QTextBrowserD1Ev
+576 (int (*)(...))QTextBrowser::_ZThn16_N12QTextBrowserD0Ev
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+592 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+600 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+608 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+616 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+624 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTextBrowser
+ size=40 align=8
+ base size=40 base align=8
+QTextBrowser (0x0x7fec35610618) 0
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 16)
+ QTextEdit (0x0x7fec35610680) 0
+ primary-for QTextBrowser (0x0x7fec35610618)
+ QAbstractScrollArea (0x0x7fec356106e8) 0
+ primary-for QTextEdit (0x0x7fec35610680)
+ QFrame (0x0x7fec35610750) 0
+ primary-for QAbstractScrollArea (0x0x7fec356106e8)
+ QWidget (0x0x7fec355f4230) 0
+ primary-for QFrame (0x0x7fec35610750)
+ QObject (0x0x7fec35685480) 0
+ primary-for QWidget (0x0x7fec355f4230)
+ QPaintDevice (0x0x7fec356854e0) 16
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 568)
+
+Class QToolBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBar::QPrivateSignal (0x0x7fec35685780) 0 empty
+
+Vtable for QToolBar
+QToolBar::_ZTV8QToolBar: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QToolBar)
+16 (int (*)(...))QToolBar::metaObject
+24 (int (*)(...))QToolBar::qt_metacast
+32 (int (*)(...))QToolBar::qt_metacall
+40 (int (*)(...))QToolBar::~QToolBar
+48 (int (*)(...))QToolBar::~QToolBar
+56 (int (*)(...))QToolBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QToolBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QToolBar::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QToolBar::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI8QToolBar)
+456 (int (*)(...))QToolBar::_ZThn16_N8QToolBarD1Ev
+464 (int (*)(...))QToolBar::_ZThn16_N8QToolBarD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolBar
+ size=40 align=8
+ base size=40 base align=8
+QToolBar (0x0x7fec356107b8) 0
+ vptr=((& QToolBar::_ZTV8QToolBar) + 16)
+ QWidget (0x0x7fec355f42a0) 0
+ primary-for QToolBar (0x0x7fec356107b8)
+ QObject (0x0x7fec356856c0) 0
+ primary-for QWidget (0x0x7fec355f42a0)
+ QPaintDevice (0x0x7fec35685720) 16
+ vptr=((& QToolBar::_ZTV8QToolBar) + 456)
+
+Class QToolBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBox::QPrivateSignal (0x0x7fec35685c00) 0 empty
+
+Vtable for QToolBox
+QToolBox::_ZTV8QToolBox: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QToolBox)
+16 (int (*)(...))QToolBox::metaObject
+24 (int (*)(...))QToolBox::qt_metacast
+32 (int (*)(...))QToolBox::qt_metacall
+40 (int (*)(...))QToolBox::~QToolBox
+48 (int (*)(...))QToolBox::~QToolBox
+56 (int (*)(...))QToolBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QToolBox::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QToolBox::itemInserted
+448 (int (*)(...))QToolBox::itemRemoved
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI8QToolBox)
+472 (int (*)(...))QToolBox::_ZThn16_N8QToolBoxD1Ev
+480 (int (*)(...))QToolBox::_ZThn16_N8QToolBoxD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolBox
+ size=40 align=8
+ base size=40 base align=8
+QToolBox (0x0x7fec35610820) 0
+ vptr=((& QToolBox::_ZTV8QToolBox) + 16)
+ QFrame (0x0x7fec35610888) 0
+ primary-for QToolBox (0x0x7fec35610820)
+ QWidget (0x0x7fec355f4310) 0
+ primary-for QFrame (0x0x7fec35610888)
+ QObject (0x0x7fec35685b40) 0
+ primary-for QWidget (0x0x7fec355f4310)
+ QPaintDevice (0x0x7fec35685ba0) 16
+ vptr=((& QToolBox::_ZTV8QToolBox) + 472)
+
+Class QToolButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolButton::QPrivateSignal (0x0x7fec35685f60) 0 empty
+
+Vtable for QToolButton
+QToolButton::_ZTV11QToolButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QToolButton)
+16 (int (*)(...))QToolButton::metaObject
+24 (int (*)(...))QToolButton::qt_metacast
+32 (int (*)(...))QToolButton::qt_metacall
+40 (int (*)(...))QToolButton::~QToolButton
+48 (int (*)(...))QToolButton::~QToolButton
+56 (int (*)(...))QToolButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QToolButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QToolButton::sizeHint
+136 (int (*)(...))QToolButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QToolButton::mousePressEvent
+176 (int (*)(...))QToolButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QToolButton::enterEvent
+248 (int (*)(...))QToolButton::leaveEvent
+256 (int (*)(...))QToolButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QToolButton::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QToolButton::hitButton
+440 (int (*)(...))QToolButton::checkStateSet
+448 (int (*)(...))QToolButton::nextCheckState
+456 (int (*)(...))QToolButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI11QToolButton)
+480 (int (*)(...))QToolButton::_ZThn16_N11QToolButtonD1Ev
+488 (int (*)(...))QToolButton::_ZThn16_N11QToolButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolButton
+ size=40 align=8
+ base size=40 base align=8
+QToolButton (0x0x7fec356108f0) 0
+ vptr=((& QToolButton::_ZTV11QToolButton) + 16)
+ QAbstractButton (0x0x7fec35610958) 0
+ primary-for QToolButton (0x0x7fec356108f0)
+ QWidget (0x0x7fec355f4380) 0
+ primary-for QAbstractButton (0x0x7fec35610958)
+ QObject (0x0x7fec35685ea0) 0
+ primary-for QWidget (0x0x7fec355f4380)
+ QPaintDevice (0x0x7fec35685f00) 16
+ vptr=((& QToolButton::_ZTV11QToolButton) + 480)
+
+Class QToolTip
+ size=1 align=1
+ base size=0 base align=1
+QToolTip (0x0x7fec3531d1e0) 0 empty
+
+Class QTreeView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeView::QPrivateSignal (0x0x7fec3531d360) 0 empty
+
+Vtable for QTreeView
+QTreeView::_ZTV9QTreeView: 110 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTreeView)
+16 (int (*)(...))QTreeView::metaObject
+24 (int (*)(...))QTreeView::qt_metacast
+32 (int (*)(...))QTreeView::qt_metacall
+40 (int (*)(...))QTreeView::~QTreeView
+48 (int (*)(...))QTreeView::~QTreeView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeView::setModel
+480 (int (*)(...))QTreeView::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))-16
+808 (int (*)(...))(& _ZTI9QTreeView)
+816 (int (*)(...))QTreeView::_ZThn16_N9QTreeViewD1Ev
+824 (int (*)(...))QTreeView::_ZThn16_N9QTreeViewD0Ev
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTreeView
+ size=40 align=8
+ base size=40 base align=8
+QTreeView (0x0x7fec356109c0) 0
+ vptr=((& QTreeView::_ZTV9QTreeView) + 16)
+ QAbstractItemView (0x0x7fec35610a28) 0
+ primary-for QTreeView (0x0x7fec356109c0)
+ QAbstractScrollArea (0x0x7fec35610a90) 0
+ primary-for QAbstractItemView (0x0x7fec35610a28)
+ QFrame (0x0x7fec35610af8) 0
+ primary-for QAbstractScrollArea (0x0x7fec35610a90)
+ QWidget (0x0x7fec355f4540) 0
+ primary-for QFrame (0x0x7fec35610af8)
+ QObject (0x0x7fec3531d2a0) 0
+ primary-for QWidget (0x0x7fec355f4540)
+ QPaintDevice (0x0x7fec3531d300) 16
+ vptr=((& QTreeView::_ZTV9QTreeView) + 816)
+
+Class QTreeWidgetItemIterator
+ size=24 align=8
+ base size=20 base align=8
+QTreeWidgetItemIterator (0x0x7fec3531d4e0) 0
+
+Vtable for QTreeWidgetItem
+QTreeWidgetItem::_ZTV15QTreeWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QTreeWidgetItem)
+16 (int (*)(...))QTreeWidgetItem::~QTreeWidgetItem
+24 (int (*)(...))QTreeWidgetItem::~QTreeWidgetItem
+32 (int (*)(...))QTreeWidgetItem::clone
+40 (int (*)(...))QTreeWidgetItem::data
+48 (int (*)(...))QTreeWidgetItem::setData
+56 (int (*)(...))QTreeWidgetItem::operator<
+64 (int (*)(...))QTreeWidgetItem::read
+72 (int (*)(...))QTreeWidgetItem::write
+
+Class QTreeWidgetItem
+ size=96 align=8
+ base size=92 base align=8
+QTreeWidgetItem (0x0x7fec3531dc60) 0
+ vptr=((& QTreeWidgetItem::_ZTV15QTreeWidgetItem) + 16)
+
+Class QTreeWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeWidget::QPrivateSignal (0x0x7fec354a2a80) 0 empty
+
+Vtable for QTreeWidget
+QTreeWidget::_ZTV11QTreeWidget: 114 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTreeWidget)
+16 (int (*)(...))QTreeWidget::metaObject
+24 (int (*)(...))QTreeWidget::qt_metacast
+32 (int (*)(...))QTreeWidget::qt_metacall
+40 (int (*)(...))QTreeWidget::~QTreeWidget
+48 (int (*)(...))QTreeWidget::~QTreeWidget
+56 (int (*)(...))QTreeWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QTreeWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeWidget::setModel
+480 (int (*)(...))QTreeWidget::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))QTreeWidget::mimeTypes
+808 (int (*)(...))QTreeWidget::mimeData
+816 (int (*)(...))QTreeWidget::dropMimeData
+824 (int (*)(...))QTreeWidget::supportedDropActions
+832 (int (*)(...))-16
+840 (int (*)(...))(& _ZTI11QTreeWidget)
+848 (int (*)(...))QTreeWidget::_ZThn16_N11QTreeWidgetD1Ev
+856 (int (*)(...))QTreeWidget::_ZThn16_N11QTreeWidgetD0Ev
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+896 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+904 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTreeWidget
+ size=40 align=8
+ base size=40 base align=8
+QTreeWidget (0x0x7fec353dfe38) 0
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 16)
+ QTreeView (0x0x7fec353dfea0) 0
+ primary-for QTreeWidget (0x0x7fec353dfe38)
+ QAbstractItemView (0x0x7fec353dff08) 0
+ primary-for QTreeView (0x0x7fec353dfea0)
+ QAbstractScrollArea (0x0x7fec353dff70) 0
+ primary-for QAbstractItemView (0x0x7fec353dff08)
+ QFrame (0x0x7fec353df548) 0
+ primary-for QAbstractScrollArea (0x0x7fec353dff70)
+ QWidget (0x0x7fec353bf310) 0
+ primary-for QFrame (0x0x7fec353df548)
+ QObject (0x0x7fec354a29c0) 0
+ primary-for QWidget (0x0x7fec353bf310)
+ QPaintDevice (0x0x7fec354a2a20) 16
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 848)
+
+Class QUndoView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoView::QPrivateSignal (0x0x7fec354a2ea0) 0 empty
+
+Vtable for QUndoView
+QUndoView::_ZTV9QUndoView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QUndoView)
+16 (int (*)(...))QUndoView::metaObject
+24 (int (*)(...))QUndoView::qt_metacast
+32 (int (*)(...))QUndoView::qt_metacall
+40 (int (*)(...))QUndoView::~QUndoView
+48 (int (*)(...))QUndoView::~QUndoView
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI9QUndoView)
+800 (int (*)(...))QUndoView::_ZThn16_N9QUndoViewD1Ev
+808 (int (*)(...))QUndoView::_ZThn16_N9QUndoViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QUndoView
+ size=40 align=8
+ base size=40 base align=8
+QUndoView (0x0x7fec353dfdd0) 0
+ vptr=((& QUndoView::_ZTV9QUndoView) + 16)
+ QListView (0x0x7fec35104000) 0
+ primary-for QUndoView (0x0x7fec353dfdd0)
+ QAbstractItemView (0x0x7fec35104068) 0
+ primary-for QListView (0x0x7fec35104000)
+ QAbstractScrollArea (0x0x7fec351040d0) 0
+ primary-for QAbstractItemView (0x0x7fec35104068)
+ QFrame (0x0x7fec35104138) 0
+ primary-for QAbstractScrollArea (0x0x7fec351040d0)
+ QWidget (0x0x7fec353bf380) 0
+ primary-for QFrame (0x0x7fec35104138)
+ QObject (0x0x7fec354a2de0) 0
+ primary-for QWidget (0x0x7fec353bf380)
+ QPaintDevice (0x0x7fec354a2e40) 16
+ vptr=((& QUndoView::_ZTV9QUndoView) + 800)
+
+Class QWhatsThis
+ size=1 align=1
+ base size=0 base align=1
+QWhatsThis (0x0x7fec35117060) 0 empty
+
+Class QWidgetAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidgetAction::QPrivateSignal (0x0x7fec35117120) 0 empty
+
+Vtable for QWidgetAction
+QWidgetAction::_ZTV13QWidgetAction: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QWidgetAction)
+16 (int (*)(...))QWidgetAction::metaObject
+24 (int (*)(...))QWidgetAction::qt_metacast
+32 (int (*)(...))QWidgetAction::qt_metacall
+40 (int (*)(...))QWidgetAction::~QWidgetAction
+48 (int (*)(...))QWidgetAction::~QWidgetAction
+56 (int (*)(...))QWidgetAction::event
+64 (int (*)(...))QWidgetAction::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidgetAction::createWidget
+120 (int (*)(...))QWidgetAction::deleteWidget
+
+Class QWidgetAction
+ size=16 align=8
+ base size=16 base align=8
+QWidgetAction (0x0x7fec351041a0) 0
+ vptr=((& QWidgetAction::_ZTV13QWidgetAction) + 16)
+ QAction (0x0x7fec35104208) 0
+ primary-for QWidgetAction (0x0x7fec351041a0)
+ QObject (0x0x7fec351170c0) 0
+ primary-for QAction (0x0x7fec35104208)
+
+Class QWizard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizard::QPrivateSignal (0x0x7fec35117360) 0 empty
+
+Vtable for QWizard
+QWizard::_ZTV7QWizard: 73 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWizard)
+16 (int (*)(...))QWizard::metaObject
+24 (int (*)(...))QWizard::qt_metacast
+32 (int (*)(...))QWizard::qt_metacall
+40 (int (*)(...))QWizard::~QWizard
+48 (int (*)(...))QWizard::~QWizard
+56 (int (*)(...))QWizard::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWizard::setVisible
+128 (int (*)(...))QWizard::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWizard::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWizard::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QWizard::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))QWizard::validateCurrentPage
+480 (int (*)(...))QWizard::nextId
+488 (int (*)(...))QWizard::initializePage
+496 (int (*)(...))QWizard::cleanupPage
+504 (int (*)(...))-16
+512 (int (*)(...))(& _ZTI7QWizard)
+520 (int (*)(...))QWizard::_ZThn16_N7QWizardD1Ev
+528 (int (*)(...))QWizard::_ZThn16_N7QWizardD0Ev
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWizard
+ size=40 align=8
+ base size=40 base align=8
+QWizard (0x0x7fec35104270) 0
+ vptr=((& QWizard::_ZTV7QWizard) + 16)
+ QDialog (0x0x7fec351042d8) 0
+ primary-for QWizard (0x0x7fec35104270)
+ QWidget (0x0x7fec353bf3f0) 0
+ primary-for QDialog (0x0x7fec351042d8)
+ QObject (0x0x7fec351172a0) 0
+ primary-for QWidget (0x0x7fec353bf3f0)
+ QPaintDevice (0x0x7fec35117300) 16
+ vptr=((& QWizard::_ZTV7QWizard) + 520)
+
+Class QWizardPage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizardPage::QPrivateSignal (0x0x7fec35117ba0) 0 empty
+
+Vtable for QWizardPage
+QWizardPage::_ZTV11QWizardPage: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWizardPage)
+16 (int (*)(...))QWizardPage::metaObject
+24 (int (*)(...))QWizardPage::qt_metacast
+32 (int (*)(...))QWizardPage::qt_metacall
+40 (int (*)(...))QWizardPage::~QWizardPage
+48 (int (*)(...))QWizardPage::~QWizardPage
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QWizardPage::initializePage
+440 (int (*)(...))QWizardPage::cleanupPage
+448 (int (*)(...))QWizardPage::validatePage
+456 (int (*)(...))QWizardPage::isComplete
+464 (int (*)(...))QWizardPage::nextId
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QWizardPage)
+488 (int (*)(...))QWizardPage::_ZThn16_N11QWizardPageD1Ev
+496 (int (*)(...))QWizardPage::_ZThn16_N11QWizardPageD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWizardPage
+ size=40 align=8
+ base size=40 base align=8
+QWizardPage (0x0x7fec35104478) 0
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 16)
+ QWidget (0x0x7fec3512b5b0) 0
+ primary-for QWizardPage (0x0x7fec35104478)
+ QObject (0x0x7fec35117ae0) 0
+ primary-for QWidget (0x0x7fec3512b5b0)
+ QPaintDevice (0x0x7fec35117b40) 16
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 488)
+
+Vtable for QDesignerCustomWidgetInterface
+QDesignerCustomWidgetInterface::_ZTV30QDesignerCustomWidgetInterface: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI30QDesignerCustomWidgetInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))QDesignerCustomWidgetInterface::isInitialized
+104 (int (*)(...))QDesignerCustomWidgetInterface::initialize
+112 (int (*)(...))QDesignerCustomWidgetInterface::domXml
+120 (int (*)(...))QDesignerCustomWidgetInterface::codeTemplate
+
+Class QDesignerCustomWidgetInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerCustomWidgetInterface (0x0x7fec35117d20) 0 nearly-empty
+ vptr=((& QDesignerCustomWidgetInterface::_ZTV30QDesignerCustomWidgetInterface) + 16)
+
+Vtable for QDesignerCustomWidgetCollectionInterface
+QDesignerCustomWidgetCollectionInterface::_ZTV40QDesignerCustomWidgetCollectionInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI40QDesignerCustomWidgetCollectionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerCustomWidgetCollectionInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerCustomWidgetCollectionInterface (0x0x7fec351dd240) 0 nearly-empty
+ vptr=((& QDesignerCustomWidgetCollectionInterface::_ZTV40QDesignerCustomWidgetCollectionInterface) + 16)
+
+Class QDomImplementation
+ size=8 align=8
+ base size=8 base align=8
+QDomImplementation (0x0x7fec351dd660) 0
+
+Class QDomNode
+ size=8 align=8
+ base size=8 base align=8
+QDomNode (0x0x7fec351dd6c0) 0
+
+Class QDomNodeList
+ size=8 align=8
+ base size=8 base align=8
+QDomNodeList (0x0x7fec351dd720) 0
+
+Class QDomDocumentType
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentType (0x0x7fec351d7208) 0
+ QDomNode (0x0x7fec351dd900) 0
+
+Class QDomDocument
+ size=8 align=8
+ base size=8 base align=8
+QDomDocument (0x0x7fec351d7270) 0
+ QDomNode (0x0x7fec351dd9c0) 0
+
+Class QDomNamedNodeMap
+ size=8 align=8
+ base size=8 base align=8
+QDomNamedNodeMap (0x0x7fec351dda80) 0
+
+Class QDomDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentFragment (0x0x7fec351d72d8) 0
+ QDomNode (0x0x7fec351ddc00) 0
+
+Class QDomCharacterData
+ size=8 align=8
+ base size=8 base align=8
+QDomCharacterData (0x0x7fec351d7340) 0
+ QDomNode (0x0x7fec351ddcc0) 0
+
+Class QDomAttr
+ size=8 align=8
+ base size=8 base align=8
+QDomAttr (0x0x7fec351d73a8) 0
+ QDomNode (0x0x7fec351ddd20) 0
+
+Class QDomElement
+ size=8 align=8
+ base size=8 base align=8
+QDomElement (0x0x7fec351d7410) 0
+ QDomNode (0x0x7fec351ddde0) 0
+
+Class QDomText
+ size=8 align=8
+ base size=8 base align=8
+QDomText (0x0x7fec351d7478) 0
+ QDomCharacterData (0x0x7fec351d74e0) 0
+ QDomNode (0x0x7fec35254060) 0
+
+Class QDomComment
+ size=8 align=8
+ base size=8 base align=8
+QDomComment (0x0x7fec351d7548) 0
+ QDomCharacterData (0x0x7fec351d75b0) 0
+ QDomNode (0x0x7fec35254120) 0
+
+Class QDomCDATASection
+ size=8 align=8
+ base size=8 base align=8
+QDomCDATASection (0x0x7fec351d7618) 0
+ QDomText (0x0x7fec351d7680) 0
+ QDomCharacterData (0x0x7fec351d76e8) 0
+ QDomNode (0x0x7fec352541e0) 0
+
+Class QDomNotation
+ size=8 align=8
+ base size=8 base align=8
+QDomNotation (0x0x7fec351d7750) 0
+ QDomNode (0x0x7fec352542a0) 0
+
+Class QDomEntity
+ size=8 align=8
+ base size=8 base align=8
+QDomEntity (0x0x7fec351d77b8) 0
+ QDomNode (0x0x7fec35254360) 0
+
+Class QDomEntityReference
+ size=8 align=8
+ base size=8 base align=8
+QDomEntityReference (0x0x7fec351d7820) 0
+ QDomNode (0x0x7fec35254420) 0
+
+Class QDomProcessingInstruction
+ size=8 align=8
+ base size=8 base align=8
+QDomProcessingInstruction (0x0x7fec351d7888) 0
+ QDomNode (0x0x7fec352544e0) 0
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7fec352545a0) 0
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7fec35254ae0) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7fec34f44e40) 0 empty
+
+Vtable for QOpenGLDebugLogger
+QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QOpenGLDebugLogger)
+16 (int (*)(...))QOpenGLDebugLogger::metaObject
+24 (int (*)(...))QOpenGLDebugLogger::qt_metacast
+32 (int (*)(...))QOpenGLDebugLogger::qt_metacall
+40 (int (*)(...))QOpenGLDebugLogger::~QOpenGLDebugLogger
+48 (int (*)(...))QOpenGLDebugLogger::~QOpenGLDebugLogger
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLDebugLogger
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLDebugLogger (0x0x7fec34f3ce38) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16)
+ QObject (0x0x7fec34f44de0) 0
+ primary-for QOpenGLDebugLogger (0x0x7fec34f3ce38)
+
+Vtable for QOpenGLFramebufferObject
+QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QOpenGLFramebufferObject)
+16 (int (*)(...))QOpenGLFramebufferObject::~QOpenGLFramebufferObject
+24 (int (*)(...))QOpenGLFramebufferObject::~QOpenGLFramebufferObject
+
+Class QOpenGLFramebufferObject
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLFramebufferObject (0x0x7fec3503e5a0) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7fec3503e840) 0
+
+Vtable for QOpenGLPaintDevice
+QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QOpenGLPaintDevice)
+16 (int (*)(...))QOpenGLPaintDevice::~QOpenGLPaintDevice
+24 (int (*)(...))QOpenGLPaintDevice::~QOpenGLPaintDevice
+32 (int (*)(...))QOpenGLPaintDevice::devType
+40 (int (*)(...))QOpenGLPaintDevice::paintEngine
+48 (int (*)(...))QOpenGLPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QOpenGLPaintDevice::ensureActiveTarget
+
+Class QOpenGLPaintDevice
+ size=24 align=8
+ base size=24 base align=8
+QOpenGLPaintDevice (0x0x7fec34f3cf08) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16)
+ QPaintDevice (0x0x7fec3503e8a0) 0
+ primary-for QOpenGLPaintDevice (0x0x7fec34f3cf08)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7fec3503eae0) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7fec34cde1e0) 0 empty
+
+Vtable for QOpenGLShader
+QOpenGLShader::_ZTV13QOpenGLShader: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QOpenGLShader)
+16 (int (*)(...))QOpenGLShader::metaObject
+24 (int (*)(...))QOpenGLShader::qt_metacast
+32 (int (*)(...))QOpenGLShader::qt_metacall
+40 (int (*)(...))QOpenGLShader::~QOpenGLShader
+48 (int (*)(...))QOpenGLShader::~QOpenGLShader
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLShader
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLShader (0x0x7fec34cd78f0) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16)
+ QObject (0x0x7fec34cde180) 0
+ primary-for QOpenGLShader (0x0x7fec34cd78f0)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7fec34cde780) 0 empty
+
+Vtable for QOpenGLShaderProgram
+QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QOpenGLShaderProgram)
+16 (int (*)(...))QOpenGLShaderProgram::metaObject
+24 (int (*)(...))QOpenGLShaderProgram::qt_metacast
+32 (int (*)(...))QOpenGLShaderProgram::qt_metacall
+40 (int (*)(...))QOpenGLShaderProgram::~QOpenGLShaderProgram
+48 (int (*)(...))QOpenGLShaderProgram::~QOpenGLShaderProgram
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QOpenGLShaderProgram::link
+
+Class QOpenGLShaderProgram
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLShaderProgram (0x0x7fec34cd7a90) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16)
+ QObject (0x0x7fec34cde720) 0
+ primary-for QOpenGLShaderProgram (0x0x7fec34cd7a90)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7fec34cde900) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7fec34defae0) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7fec34defd20) 0 empty
+
+Vtable for QOpenGLTimerQuery
+QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QOpenGLTimerQuery)
+16 (int (*)(...))QOpenGLTimerQuery::metaObject
+24 (int (*)(...))QOpenGLTimerQuery::qt_metacast
+32 (int (*)(...))QOpenGLTimerQuery::qt_metacall
+40 (int (*)(...))QOpenGLTimerQuery::~QOpenGLTimerQuery
+48 (int (*)(...))QOpenGLTimerQuery::~QOpenGLTimerQuery
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLTimerQuery
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLTimerQuery (0x0x7fec34cd7c30) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16)
+ QObject (0x0x7fec34defcc0) 0
+ primary-for QOpenGLTimerQuery (0x0x7fec34cd7c30)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7fec34deff00) 0 empty
+
+Vtable for QOpenGLTimeMonitor
+QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QOpenGLTimeMonitor)
+16 (int (*)(...))QOpenGLTimeMonitor::metaObject
+24 (int (*)(...))QOpenGLTimeMonitor::qt_metacast
+32 (int (*)(...))QOpenGLTimeMonitor::qt_metacall
+40 (int (*)(...))QOpenGLTimeMonitor::~QOpenGLTimeMonitor
+48 (int (*)(...))QOpenGLTimeMonitor::~QOpenGLTimeMonitor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLTimeMonitor
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLTimeMonitor (0x0x7fec34cd7c98) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16)
+ QObject (0x0x7fec34defea0) 0
+ primary-for QOpenGLTimeMonitor (0x0x7fec34cd7c98)
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7fec34e710c0) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7fec34b3b120) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7fec34b3b300) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7fec34b3b360) 0
+
+Vtable for QAbstractOpenGLFunctions
+QAbstractOpenGLFunctions::_ZTV24QAbstractOpenGLFunctions: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractOpenGLFunctions)
+16 (int (*)(...))QAbstractOpenGLFunctions::~QAbstractOpenGLFunctions
+24 (int (*)(...))QAbstractOpenGLFunctions::~QAbstractOpenGLFunctions
+32 (int (*)(...))QAbstractOpenGLFunctions::initializeOpenGLFunctions
+
+Class QAbstractOpenGLFunctions
+ size=16 align=8
+ base size=16 base align=8
+QAbstractOpenGLFunctions (0x0x7fec34b3b540) 0
+ vptr=((& QAbstractOpenGLFunctions::_ZTV24QAbstractOpenGLFunctions) + 16)
+
+Class QOpenGLFunctions_1_0_CoreBackend::Functions
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_1_0_CoreBackend::Functions (0x0x7fec34b3b720) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7fec34b1e548) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34b3b6c0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7fec34b3ba80) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7fec34b1e5b0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34b3ba20) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7fec34b3bde0) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7fec34b1e618) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34b3bd80) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7fec34b75180) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7fec34b1e680) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34b75120) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7fec34b754e0) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7fec34b1e6e8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34b75480) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7fec34b75840) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7fec34b1e750) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34b757e0) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7fec34b75ba0) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7fec34b1e7b8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34b75b40) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7fec34b75f00) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7fec34b1e820) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34b75ea0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7fec34bb12a0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7fec34b1e888) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34bb1240) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7fec34bb1600) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7fec34b1e8f0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34bb15a0) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7fec34bb1960) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7fec34b1e958) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34bb1900) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7fec34bb1cc0) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7fec34b1e9c0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34bb1c60) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7fec34bf4060) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7fec34b1ea28) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34bf4000) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7fec34bf43c0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7fec34b1ea90) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34bf4360) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7fec34bf4720) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7fec34b1eaf8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34bf46c0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7fec34bf4a80) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7fec34b1eb60) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34bf4a20) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7fec34bf4de0) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7fec34b1ebc8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34bf4d80) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7fec34c49180) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7fec34b1ec30) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34c49120) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7fec34c494e0) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7fec34b1ec98) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34c49480) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7fec34c49840) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7fec34b1ed00) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34c497e0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7fec34c49ba0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7fec34b1ed68) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34c49b40) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7fec34c49f00) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7fec34b1edd0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34c49ea0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7fec348d42a0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7fec34b1ee38) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec348d4240) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7fec348d4600) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7fec34b1eea0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec348d45a0) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7fec348d4960) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7fec34b1ef08) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec348d4900) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7fec348d4cc0) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7fec34b1ef70) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec348d4c60) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7fec34905060) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7fec34904000) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fec34905000) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7fec34905360) 0
+
+Class QOpenGLVersionFunctionsFactory
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVersionFunctionsFactory (0x0x7fec349054e0) 0 empty
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7fec34905600) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7fec34905660) 0
+
+Vtable for QOpenGLVertexArrayObject
+QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QOpenGLVertexArrayObject)
+16 (int (*)(...))QOpenGLVertexArrayObject::metaObject
+24 (int (*)(...))QOpenGLVertexArrayObject::qt_metacast
+32 (int (*)(...))QOpenGLVertexArrayObject::qt_metacall
+40 (int (*)(...))QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject
+48 (int (*)(...))QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLVertexArrayObject
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLVertexArrayObject (0x0x7fec34904068) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16)
+ QObject (0x0x7fec349055a0) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7fec34904068)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7fec34905cc0) 0 empty
+
+Vtable for QOpenGLWindow
+QOpenGLWindow::_ZTV13QOpenGLWindow: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QOpenGLWindow)
+16 (int (*)(...))QOpenGLWindow::metaObject
+24 (int (*)(...))QOpenGLWindow::qt_metacast
+32 (int (*)(...))QOpenGLWindow::qt_metacall
+40 (int (*)(...))QOpenGLWindow::~QOpenGLWindow
+48 (int (*)(...))QOpenGLWindow::~QOpenGLWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QOpenGLWindow::resizeEvent
+168 (int (*)(...))QOpenGLWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QOpenGLWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))QOpenGLWindow::initializeGL
+336 (int (*)(...))QOpenGLWindow::resizeGL
+344 (int (*)(...))QOpenGLWindow::paintGL
+352 (int (*)(...))QOpenGLWindow::paintUnderGL
+360 (int (*)(...))QOpenGLWindow::paintOverGL
+368 (int (*)(...))QOpenGLWindow::redirected
+376 (int (*)(...))-16
+384 (int (*)(...))(& _ZTI13QOpenGLWindow)
+392 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD1Ev
+400 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD0Ev
+408 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+416 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+424 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+432 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+440 (int (*)(...))-40
+448 (int (*)(...))(& _ZTI13QOpenGLWindow)
+456 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD1Ev
+464 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD0Ev
+472 (int (*)(...))QPaintDevice::devType
+480 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+488 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QPaintDevice::initPainter
+504 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow10redirectedEP6QPoint
+512 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QOpenGLWindow
+ size=56 align=8
+ base size=50 base align=8
+QOpenGLWindow (0x0x7fec34904138) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16)
+ QPaintDeviceWindow (0x0x7fec34b417e0) 0
+ primary-for QOpenGLWindow (0x0x7fec34904138)
+ QWindow (0x0x7fec34b41850) 0
+ primary-for QPaintDeviceWindow (0x0x7fec34b417e0)
+ QObject (0x0x7fec34905ba0) 0
+ primary-for QWindow (0x0x7fec34b41850)
+ QSurface (0x0x7fec34905c00) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 392)
+ QPaintDevice (0x0x7fec34905c60) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 456)
+
+Class QOpenGLWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWidget::QPrivateSignal (0x0x7fec34905f00) 0 empty
+
+Vtable for QOpenGLWidget
+QOpenGLWidget::_ZTV13QOpenGLWidget: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QOpenGLWidget)
+16 (int (*)(...))QOpenGLWidget::metaObject
+24 (int (*)(...))QOpenGLWidget::qt_metacast
+32 (int (*)(...))QOpenGLWidget::qt_metacall
+40 (int (*)(...))QOpenGLWidget::~QOpenGLWidget
+48 (int (*)(...))QOpenGLWidget::~QOpenGLWidget
+56 (int (*)(...))QOpenGLWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QOpenGLWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QOpenGLWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QOpenGLWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QOpenGLWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QOpenGLWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QOpenGLWidget::initializeGL
+440 (int (*)(...))QOpenGLWidget::resizeGL
+448 (int (*)(...))QOpenGLWidget::paintGL
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI13QOpenGLWidget)
+472 (int (*)(...))QOpenGLWidget::_ZThn16_N13QOpenGLWidgetD1Ev
+480 (int (*)(...))QOpenGLWidget::_ZThn16_N13QOpenGLWidgetD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QOpenGLWidget::_ZThn16_NK13QOpenGLWidget11paintEngineEv
+504 (int (*)(...))QOpenGLWidget::_ZThn16_NK13QOpenGLWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QOpenGLWidget::_ZThn16_NK13QOpenGLWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QOpenGLWidget
+ size=40 align=8
+ base size=40 base align=8
+QOpenGLWidget (0x0x7fec34904208) 0
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 16)
+ QWidget (0x0x7fec34b41a10) 0
+ primary-for QOpenGLWidget (0x0x7fec34904208)
+ QObject (0x0x7fec34905e40) 0
+ primary-for QWidget (0x0x7fec34b41a10)
+ QPaintDevice (0x0x7fec34905ea0) 16
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 472)
+
+Class QDesignerActionEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerActionEditorInterface::QPrivateSignal (0x0x7fec3495c180) 0 empty
+
+Vtable for QDesignerActionEditorInterface
+QDesignerActionEditorInterface::_ZTV30QDesignerActionEditorInterface: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI30QDesignerActionEditorInterface)
+16 (int (*)(...))QDesignerActionEditorInterface::metaObject
+24 (int (*)(...))QDesignerActionEditorInterface::qt_metacast
+32 (int (*)(...))QDesignerActionEditorInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDesignerActionEditorInterface::core
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))__cxa_pure_virtual
+456 (int (*)(...))__cxa_pure_virtual
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI30QDesignerActionEditorInterface)
+480 0
+488 0
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerActionEditorInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerActionEditorInterface (0x0x7fec349042d8) 0
+ vptr=((& QDesignerActionEditorInterface::_ZTV30QDesignerActionEditorInterface) + 16)
+ QWidget (0x0x7fec34b41b60) 0
+ primary-for QDesignerActionEditorInterface (0x0x7fec349042d8)
+ QObject (0x0x7fec3495c0c0) 0
+ primary-for QWidget (0x0x7fec34b41b60)
+ QPaintDevice (0x0x7fec3495c120) 16
+ vptr=((& QDesignerActionEditorInterface::_ZTV30QDesignerActionEditorInterface) + 480)
+
+Vtable for QDesignerDnDItemInterface
+QDesignerDnDItemInterface::_ZTV25QDesignerDnDItemInterface: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QDesignerDnDItemInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerDnDItemInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerDnDItemInterface (0x0x7fec3495c240) 0 nearly-empty
+ vptr=((& QDesignerDnDItemInterface::_ZTV25QDesignerDnDItemInterface) + 16)
+
+Vtable for QAbstractFormBuilder
+QAbstractFormBuilder::_ZTV20QAbstractFormBuilder: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAbstractFormBuilder)
+16 (int (*)(...))QAbstractFormBuilder::~QAbstractFormBuilder
+24 (int (*)(...))QAbstractFormBuilder::~QAbstractFormBuilder
+32 (int (*)(...))QAbstractFormBuilder::load
+40 (int (*)(...))QAbstractFormBuilder::save
+48 (int (*)(...))QAbstractFormBuilder::loadExtraInfo
+56 (int (*)(...))QAbstractFormBuilder::create
+64 (int (*)(...))QAbstractFormBuilder::create
+72 (int (*)(...))QAbstractFormBuilder::create
+80 (int (*)(...))QAbstractFormBuilder::create
+88 (int (*)(...))QAbstractFormBuilder::create
+96 (int (*)(...))QAbstractFormBuilder::create
+104 (int (*)(...))QAbstractFormBuilder::addMenuAction
+112 (int (*)(...))QAbstractFormBuilder::applyProperties
+120 (int (*)(...))QAbstractFormBuilder::applyTabStops
+128 (int (*)(...))QAbstractFormBuilder::createWidget
+136 (int (*)(...))QAbstractFormBuilder::createLayout
+144 (int (*)(...))QAbstractFormBuilder::createAction
+152 (int (*)(...))QAbstractFormBuilder::createActionGroup
+160 (int (*)(...))QAbstractFormBuilder::createCustomWidgets
+168 (int (*)(...))QAbstractFormBuilder::createConnections
+176 (int (*)(...))QAbstractFormBuilder::createResources
+184 (int (*)(...))QAbstractFormBuilder::addItem
+192 (int (*)(...))QAbstractFormBuilder::addItem
+200 (int (*)(...))QAbstractFormBuilder::saveExtraInfo
+208 (int (*)(...))QAbstractFormBuilder::saveDom
+216 (int (*)(...))QAbstractFormBuilder::createActionRefDom
+224 (int (*)(...))QAbstractFormBuilder::createDom
+232 (int (*)(...))QAbstractFormBuilder::createDom
+240 (int (*)(...))QAbstractFormBuilder::createDom
+248 (int (*)(...))QAbstractFormBuilder::createDom
+256 (int (*)(...))QAbstractFormBuilder::createDom
+264 (int (*)(...))QAbstractFormBuilder::createDom
+272 (int (*)(...))QAbstractFormBuilder::saveConnections
+280 (int (*)(...))QAbstractFormBuilder::saveCustomWidgets
+288 (int (*)(...))QAbstractFormBuilder::saveTabStops
+296 (int (*)(...))QAbstractFormBuilder::saveResources
+304 (int (*)(...))QAbstractFormBuilder::computeProperties
+312 (int (*)(...))QAbstractFormBuilder::checkProperty
+320 (int (*)(...))QAbstractFormBuilder::createProperty
+328 (int (*)(...))QAbstractFormBuilder::layoutInfo
+
+Class QAbstractFormBuilder
+ size=16 align=8
+ base size=16 base align=8
+QAbstractFormBuilder (0x0x7fec3495c2a0) 0
+ vptr=((& QAbstractFormBuilder::_ZTV20QAbstractFormBuilder) + 16)
+
+Class QDesignerFormEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormEditorInterface::QPrivateSignal (0x0x7fec3495c4e0) 0 empty
+
+Vtable for QDesignerFormEditorInterface
+QDesignerFormEditorInterface::_ZTV28QDesignerFormEditorInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QDesignerFormEditorInterface)
+16 (int (*)(...))QDesignerFormEditorInterface::metaObject
+24 (int (*)(...))QDesignerFormEditorInterface::qt_metacast
+32 (int (*)(...))QDesignerFormEditorInterface::qt_metacall
+40 (int (*)(...))QDesignerFormEditorInterface::~QDesignerFormEditorInterface
+48 (int (*)(...))QDesignerFormEditorInterface::~QDesignerFormEditorInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDesignerFormEditorInterface
+ size=24 align=8
+ base size=24 base align=8
+QDesignerFormEditorInterface (0x0x7fec34904340) 0
+ vptr=((& QDesignerFormEditorInterface::_ZTV28QDesignerFormEditorInterface) + 16)
+ QObject (0x0x7fec3495c480) 0
+ primary-for QDesignerFormEditorInterface (0x0x7fec34904340)
+
+Vtable for QDesignerFormEditorPluginInterface
+QDesignerFormEditorPluginInterface::_ZTV34QDesignerFormEditorPluginInterface: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI34QDesignerFormEditorPluginInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerFormEditorPluginInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerFormEditorPluginInterface (0x0x7fec3495c600) 0 nearly-empty
+ vptr=((& QDesignerFormEditorPluginInterface::_ZTV34QDesignerFormEditorPluginInterface) + 16)
+
+Class QDesignerFormWindowInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowInterface::QPrivateSignal (0x0x7fec3495c8a0) 0 empty
+
+Vtable for QDesignerFormWindowInterface
+QDesignerFormWindowInterface::_ZTV28QDesignerFormWindowInterface: 121 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QDesignerFormWindowInterface)
+16 (int (*)(...))QDesignerFormWindowInterface::metaObject
+24 (int (*)(...))QDesignerFormWindowInterface::qt_metacast
+32 (int (*)(...))QDesignerFormWindowInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))__cxa_pure_virtual
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))__cxa_pure_virtual
+456 (int (*)(...))__cxa_pure_virtual
+464 (int (*)(...))__cxa_pure_virtual
+472 (int (*)(...))__cxa_pure_virtual
+480 (int (*)(...))__cxa_pure_virtual
+488 (int (*)(...))__cxa_pure_virtual
+496 (int (*)(...))__cxa_pure_virtual
+504 (int (*)(...))__cxa_pure_virtual
+512 (int (*)(...))__cxa_pure_virtual
+520 (int (*)(...))__cxa_pure_virtual
+528 (int (*)(...))__cxa_pure_virtual
+536 (int (*)(...))__cxa_pure_virtual
+544 (int (*)(...))__cxa_pure_virtual
+552 (int (*)(...))__cxa_pure_virtual
+560 (int (*)(...))__cxa_pure_virtual
+568 (int (*)(...))__cxa_pure_virtual
+576 (int (*)(...))__cxa_pure_virtual
+584 (int (*)(...))__cxa_pure_virtual
+592 (int (*)(...))__cxa_pure_virtual
+600 (int (*)(...))__cxa_pure_virtual
+608 (int (*)(...))__cxa_pure_virtual
+616 (int (*)(...))__cxa_pure_virtual
+624 (int (*)(...))__cxa_pure_virtual
+632 (int (*)(...))QDesignerFormWindowInterface::core
+640 (int (*)(...))__cxa_pure_virtual
+648 (int (*)(...))__cxa_pure_virtual
+656 (int (*)(...))__cxa_pure_virtual
+664 (int (*)(...))__cxa_pure_virtual
+672 (int (*)(...))__cxa_pure_virtual
+680 (int (*)(...))__cxa_pure_virtual
+688 (int (*)(...))__cxa_pure_virtual
+696 (int (*)(...))__cxa_pure_virtual
+704 (int (*)(...))__cxa_pure_virtual
+712 (int (*)(...))__cxa_pure_virtual
+720 (int (*)(...))__cxa_pure_virtual
+728 (int (*)(...))__cxa_pure_virtual
+736 (int (*)(...))__cxa_pure_virtual
+744 (int (*)(...))__cxa_pure_virtual
+752 (int (*)(...))__cxa_pure_virtual
+760 (int (*)(...))__cxa_pure_virtual
+768 (int (*)(...))__cxa_pure_virtual
+776 (int (*)(...))__cxa_pure_virtual
+784 (int (*)(...))__cxa_pure_virtual
+792 (int (*)(...))__cxa_pure_virtual
+800 (int (*)(...))__cxa_pure_virtual
+808 (int (*)(...))__cxa_pure_virtual
+816 (int (*)(...))__cxa_pure_virtual
+824 (int (*)(...))__cxa_pure_virtual
+832 (int (*)(...))__cxa_pure_virtual
+840 (int (*)(...))__cxa_pure_virtual
+848 (int (*)(...))__cxa_pure_virtual
+856 (int (*)(...))__cxa_pure_virtual
+864 (int (*)(...))__cxa_pure_virtual
+872 (int (*)(...))__cxa_pure_virtual
+880 (int (*)(...))__cxa_pure_virtual
+888 (int (*)(...))-16
+896 (int (*)(...))(& _ZTI28QDesignerFormWindowInterface)
+904 0
+912 0
+920 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+928 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+936 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+944 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+952 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+960 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerFormWindowInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerFormWindowInterface (0x0x7fec349043a8) 0
+ vptr=((& QDesignerFormWindowInterface::_ZTV28QDesignerFormWindowInterface) + 16)
+ QWidget (0x0x7fec34b41cb0) 0
+ primary-for QDesignerFormWindowInterface (0x0x7fec349043a8)
+ QObject (0x0x7fec3495c7e0) 0
+ primary-for QWidget (0x0x7fec34b41cb0)
+ QPaintDevice (0x0x7fec3495c840) 16
+ vptr=((& QDesignerFormWindowInterface::_ZTV28QDesignerFormWindowInterface) + 904)
+
+Vtable for QDesignerFormWindowCursorInterface
+QDesignerFormWindowCursorInterface::_ZTV34QDesignerFormWindowCursorInterface: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI34QDesignerFormWindowCursorInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerFormWindowCursorInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerFormWindowCursorInterface (0x0x7fec3495ca20) 0 nearly-empty
+ vptr=((& QDesignerFormWindowCursorInterface::_ZTV34QDesignerFormWindowCursorInterface) + 16)
+
+Class QDesignerFormWindowManagerInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowManagerInterface::QPrivateSignal (0x0x7fec3495cae0) 0 empty
+
+Vtable for QDesignerFormWindowManagerInterface
+QDesignerFormWindowManagerInterface::_ZTV35QDesignerFormWindowManagerInterface: 29 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI35QDesignerFormWindowManagerInterface)
+16 (int (*)(...))QDesignerFormWindowManagerInterface::metaObject
+24 (int (*)(...))QDesignerFormWindowManagerInterface::qt_metacast
+32 (int (*)(...))QDesignerFormWindowManagerInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerFormWindowManagerInterface
+ size=16 align=8
+ base size=16 base align=8
+QDesignerFormWindowManagerInterface (0x0x7fec34904410) 0
+ vptr=((& QDesignerFormWindowManagerInterface::_ZTV35QDesignerFormWindowManagerInterface) + 16)
+ QObject (0x0x7fec3495ca80) 0
+ primary-for QDesignerFormWindowManagerInterface (0x0x7fec34904410)
+
+Class QDesignerFormWindowToolInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowToolInterface::QPrivateSignal (0x0x7fec3495cde0) 0 empty
+
+Vtable for QDesignerFormWindowToolInterface
+QDesignerFormWindowToolInterface::_ZTV32QDesignerFormWindowToolInterface: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QDesignerFormWindowToolInterface)
+16 (int (*)(...))QDesignerFormWindowToolInterface::metaObject
+24 (int (*)(...))QDesignerFormWindowToolInterface::qt_metacast
+32 (int (*)(...))QDesignerFormWindowToolInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))QDesignerFormWindowToolInterface::saveToDom
+168 (int (*)(...))QDesignerFormWindowToolInterface::loadFromDom
+176 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerFormWindowToolInterface
+ size=16 align=8
+ base size=16 base align=8
+QDesignerFormWindowToolInterface (0x0x7fec34904478) 0
+ vptr=((& QDesignerFormWindowToolInterface::_ZTV32QDesignerFormWindowToolInterface) + 16)
+ QObject (0x0x7fec3495cd80) 0
+ primary-for QDesignerFormWindowToolInterface (0x0x7fec34904478)
+
+Class QDesignerIntegrationInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegrationInterface::QPrivateSignal (0x0x7fec34a13000) 0 empty
+
+Vtable for QDesignerIntegrationInterface
+QDesignerIntegrationInterface::_ZTV29QDesignerIntegrationInterface: 34 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QDesignerIntegrationInterface)
+16 (int (*)(...))QDesignerIntegrationInterface::metaObject
+24 (int (*)(...))QDesignerIntegrationInterface::qt_metacast
+32 (int (*)(...))QDesignerIntegrationInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+232 (int (*)(...))__cxa_pure_virtual
+240 (int (*)(...))__cxa_pure_virtual
+248 (int (*)(...))__cxa_pure_virtual
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerIntegrationInterface
+ size=24 align=8
+ base size=24 base align=8
+QDesignerIntegrationInterface (0x0x7fec349044e0) 0
+ vptr=((& QDesignerIntegrationInterface::_ZTV29QDesignerIntegrationInterface) + 16)
+ QObject (0x0x7fec3495cf60) 0
+ primary-for QDesignerIntegrationInterface (0x0x7fec349044e0)
+
+Class QDesignerIntegration::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegration::QPrivateSignal (0x0x7fec34a13240) 0 empty
+
+Vtable for QDesignerIntegration
+QDesignerIntegration::_ZTV20QDesignerIntegration: 34 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDesignerIntegration)
+16 (int (*)(...))QDesignerIntegration::metaObject
+24 (int (*)(...))QDesignerIntegration::qt_metacast
+32 (int (*)(...))QDesignerIntegration::qt_metacall
+40 (int (*)(...))QDesignerIntegration::~QDesignerIntegration
+48 (int (*)(...))QDesignerIntegration::~QDesignerIntegration
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDesignerIntegration::containerWindow
+120 (int (*)(...))QDesignerIntegration::createResourceBrowser
+128 (int (*)(...))QDesignerIntegration::headerSuffix
+136 (int (*)(...))QDesignerIntegration::setHeaderSuffix
+144 (int (*)(...))QDesignerIntegration::isHeaderLowercase
+152 (int (*)(...))QDesignerIntegration::setHeaderLowercase
+160 (int (*)(...))QDesignerIntegration::features
+168 (int (*)(...))QDesignerIntegration::resourceFileWatcherBehaviour
+176 (int (*)(...))QDesignerIntegration::setResourceFileWatcherBehaviour
+184 (int (*)(...))QDesignerIntegration::contextHelpId
+192 (int (*)(...))QDesignerIntegration::setFeatures
+200 (int (*)(...))QDesignerIntegration::updateProperty
+208 (int (*)(...))QDesignerIntegration::updateProperty
+216 (int (*)(...))QDesignerIntegration::resetProperty
+224 (int (*)(...))QDesignerIntegration::addDynamicProperty
+232 (int (*)(...))QDesignerIntegration::removeDynamicProperty
+240 (int (*)(...))QDesignerIntegration::updateActiveFormWindow
+248 (int (*)(...))QDesignerIntegration::setupFormWindow
+256 (int (*)(...))QDesignerIntegration::updateSelection
+264 (int (*)(...))QDesignerIntegration::updateCustomWidgetPlugins
+
+Class QDesignerIntegration
+ size=32 align=8
+ base size=32 base align=8
+QDesignerIntegration (0x0x7fec34904548) 0
+ vptr=((& QDesignerIntegration::_ZTV20QDesignerIntegration) + 16)
+ QDesignerIntegrationInterface (0x0x7fec349045b0) 0
+ primary-for QDesignerIntegration (0x0x7fec34904548)
+ QObject (0x0x7fec34a131e0) 0
+ primary-for QDesignerIntegrationInterface (0x0x7fec349045b0)
+
+Vtable for QAbstractExtensionFactory
+QAbstractExtensionFactory::_ZTV25QAbstractExtensionFactory: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAbstractExtensionFactory)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractExtensionFactory
+ size=8 align=8
+ base size=8 base align=8
+QAbstractExtensionFactory (0x0x7fec34a13360) 0 nearly-empty
+ vptr=((& QAbstractExtensionFactory::_ZTV25QAbstractExtensionFactory) + 16)
+
+Vtable for QAbstractExtensionManager
+QAbstractExtensionManager::_ZTV25QAbstractExtensionManager: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAbstractExtensionManager)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractExtensionManager
+ size=8 align=8
+ base size=8 base align=8
+QAbstractExtensionManager (0x0x7fec34a13720) 0 nearly-empty
+ vptr=((& QAbstractExtensionManager::_ZTV25QAbstractExtensionManager) + 16)
+
+Vtable for QDesignerLanguageExtension
+QDesignerLanguageExtension::_ZTV26QDesignerLanguageExtension: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QDesignerLanguageExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerLanguageExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerLanguageExtension (0x0x7fec34a13b40) 0 nearly-empty
+ vptr=((& QDesignerLanguageExtension::_ZTV26QDesignerLanguageExtension) + 16)
+
+Vtable for QDesignerMetaDataBaseItemInterface
+QDesignerMetaDataBaseItemInterface::_ZTV34QDesignerMetaDataBaseItemInterface: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI34QDesignerMetaDataBaseItemInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerMetaDataBaseItemInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerMetaDataBaseItemInterface (0x0x7fec34a13d80) 0 nearly-empty
+ vptr=((& QDesignerMetaDataBaseItemInterface::_ZTV34QDesignerMetaDataBaseItemInterface) + 16)
+
+Class QDesignerMetaDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerMetaDataBaseInterface::QPrivateSignal (0x0x7fec34a13e40) 0 empty
+
+Vtable for QDesignerMetaDataBaseInterface
+QDesignerMetaDataBaseInterface::_ZTV30QDesignerMetaDataBaseInterface: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI30QDesignerMetaDataBaseInterface)
+16 (int (*)(...))QDesignerMetaDataBaseInterface::metaObject
+24 (int (*)(...))QDesignerMetaDataBaseInterface::qt_metacast
+32 (int (*)(...))QDesignerMetaDataBaseInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerMetaDataBaseInterface
+ size=16 align=8
+ base size=16 base align=8
+QDesignerMetaDataBaseInterface (0x0x7fec34904618) 0
+ vptr=((& QDesignerMetaDataBaseInterface::_ZTV30QDesignerMetaDataBaseInterface) + 16)
+ QObject (0x0x7fec34a13de0) 0
+ primary-for QDesignerMetaDataBaseInterface (0x0x7fec34904618)
+
+Class QDesignerNewFormWidgetInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerNewFormWidgetInterface::QPrivateSignal (0x0x7fec34a77000) 0 empty
+
+Vtable for QDesignerNewFormWidgetInterface
+QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI31QDesignerNewFormWidgetInterface)
+16 (int (*)(...))QDesignerNewFormWidgetInterface::metaObject
+24 (int (*)(...))QDesignerNewFormWidgetInterface::qt_metacast
+32 (int (*)(...))QDesignerNewFormWidgetInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))__cxa_pure_virtual
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI31QDesignerNewFormWidgetInterface)
+464 0
+472 0
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerNewFormWidgetInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerNewFormWidgetInterface (0x0x7fec34904680) 0
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 16)
+ QWidget (0x0x7fec34a171c0) 0
+ primary-for QDesignerNewFormWidgetInterface (0x0x7fec34904680)
+ QObject (0x0x7fec34a13f00) 0
+ primary-for QWidget (0x0x7fec34a171c0)
+ QPaintDevice (0x0x7fec34a13f60) 16
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 464)
+
+Class QDesignerObjectInspectorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerObjectInspectorInterface::QPrivateSignal (0x0x7fec34a77180) 0 empty
+
+Vtable for QDesignerObjectInspectorInterface
+QDesignerObjectInspectorInterface::_ZTV33QDesignerObjectInspectorInterface: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI33QDesignerObjectInspectorInterface)
+16 (int (*)(...))QDesignerObjectInspectorInterface::metaObject
+24 (int (*)(...))QDesignerObjectInspectorInterface::qt_metacast
+32 (int (*)(...))QDesignerObjectInspectorInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDesignerObjectInspectorInterface::core
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI33QDesignerObjectInspectorInterface)
+464 0
+472 0
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerObjectInspectorInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerObjectInspectorInterface (0x0x7fec349046e8) 0
+ vptr=((& QDesignerObjectInspectorInterface::_ZTV33QDesignerObjectInspectorInterface) + 16)
+ QWidget (0x0x7fec34a17230) 0
+ primary-for QDesignerObjectInspectorInterface (0x0x7fec349046e8)
+ QObject (0x0x7fec34a770c0) 0
+ primary-for QWidget (0x0x7fec34a17230)
+ QPaintDevice (0x0x7fec34a77120) 16
+ vptr=((& QDesignerObjectInspectorInterface::_ZTV33QDesignerObjectInspectorInterface) + 464)
+
+Vtable for QDesignerOptionsPageInterface
+QDesignerOptionsPageInterface::_ZTV29QDesignerOptionsPageInterface: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QDesignerOptionsPageInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerOptionsPageInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerOptionsPageInterface (0x0x7fec34a77240) 0 nearly-empty
+ vptr=((& QDesignerOptionsPageInterface::_ZTV29QDesignerOptionsPageInterface) + 16)
+
+Class QDesignerPromotionInterface::PromotedClass
+ size=16 align=8
+ base size=16 base align=8
+QDesignerPromotionInterface::PromotedClass (0x0x7fec34a77300) 0
+
+Vtable for QDesignerPromotionInterface
+QDesignerPromotionInterface::_ZTV27QDesignerPromotionInterface: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDesignerPromotionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerPromotionInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerPromotionInterface (0x0x7fec34a772a0) 0 nearly-empty
+ vptr=((& QDesignerPromotionInterface::_ZTV27QDesignerPromotionInterface) + 16)
+
+Class QDesignerPropertyEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerPropertyEditorInterface::QPrivateSignal (0x0x7fec34a77420) 0 empty
+
+Vtable for QDesignerPropertyEditorInterface
+QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface: 71 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QDesignerPropertyEditorInterface)
+16 (int (*)(...))QDesignerPropertyEditorInterface::metaObject
+24 (int (*)(...))QDesignerPropertyEditorInterface::qt_metacast
+32 (int (*)(...))QDesignerPropertyEditorInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDesignerPropertyEditorInterface::core
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))__cxa_pure_virtual
+456 (int (*)(...))__cxa_pure_virtual
+464 (int (*)(...))__cxa_pure_virtual
+472 (int (*)(...))__cxa_pure_virtual
+480 (int (*)(...))__cxa_pure_virtual
+488 (int (*)(...))-16
+496 (int (*)(...))(& _ZTI32QDesignerPropertyEditorInterface)
+504 0
+512 0
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerPropertyEditorInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerPropertyEditorInterface (0x0x7fec34904750) 0
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 16)
+ QWidget (0x0x7fec34a172a0) 0
+ primary-for QDesignerPropertyEditorInterface (0x0x7fec34904750)
+ QObject (0x0x7fec34a77360) 0
+ primary-for QWidget (0x0x7fec34a172a0)
+ QPaintDevice (0x0x7fec34a773c0) 16
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 504)
+
+Class QDesignerResourceBrowserInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerResourceBrowserInterface::QPrivateSignal (0x0x7fec34a775a0) 0 empty
+
+Vtable for QDesignerResourceBrowserInterface
+QDesignerResourceBrowserInterface::_ZTV33QDesignerResourceBrowserInterface: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI33QDesignerResourceBrowserInterface)
+16 (int (*)(...))QDesignerResourceBrowserInterface::metaObject
+24 (int (*)(...))QDesignerResourceBrowserInterface::qt_metacast
+32 (int (*)(...))QDesignerResourceBrowserInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))__cxa_pure_virtual
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI33QDesignerResourceBrowserInterface)
+464 0
+472 0
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerResourceBrowserInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerResourceBrowserInterface (0x0x7fec349047b8) 0
+ vptr=((& QDesignerResourceBrowserInterface::_ZTV33QDesignerResourceBrowserInterface) + 16)
+ QWidget (0x0x7fec34a17310) 0
+ primary-for QDesignerResourceBrowserInterface (0x0x7fec349047b8)
+ QObject (0x0x7fec34a774e0) 0
+ primary-for QWidget (0x0x7fec34a17310)
+ QPaintDevice (0x0x7fec34a77540) 16
+ vptr=((& QDesignerResourceBrowserInterface::_ZTV33QDesignerResourceBrowserInterface) + 464)
+
+Vtable for QDesignerSettingsInterface
+QDesignerSettingsInterface::_ZTV26QDesignerSettingsInterface: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QDesignerSettingsInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerSettingsInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerSettingsInterface (0x0x7fec34a77660) 0 nearly-empty
+ vptr=((& QDesignerSettingsInterface::_ZTV26QDesignerSettingsInterface) + 16)
+
+Class QDesignerWidgetBoxInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetBoxInterface::QPrivateSignal (0x0x7fec34a77780) 0 empty
+
+Class QDesignerWidgetBoxInterface::Widget
+ size=8 align=8
+ base size=8 base align=8
+QDesignerWidgetBoxInterface::Widget (0x0x7fec34a777e0) 0
+
+Class QDesignerWidgetBoxInterface::Category
+ size=56 align=8
+ base size=56 base align=8
+QDesignerWidgetBoxInterface::Category (0x0x7fec34a778a0) 0
+
+Vtable for QDesignerWidgetBoxInterface
+QDesignerWidgetBoxInterface::_ZTV27QDesignerWidgetBoxInterface: 77 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDesignerWidgetBoxInterface)
+16 (int (*)(...))QDesignerWidgetBoxInterface::metaObject
+24 (int (*)(...))QDesignerWidgetBoxInterface::qt_metacast
+32 (int (*)(...))QDesignerWidgetBoxInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))__cxa_pure_virtual
+440 (int (*)(...))__cxa_pure_virtual
+448 (int (*)(...))__cxa_pure_virtual
+456 (int (*)(...))__cxa_pure_virtual
+464 (int (*)(...))__cxa_pure_virtual
+472 (int (*)(...))__cxa_pure_virtual
+480 (int (*)(...))__cxa_pure_virtual
+488 (int (*)(...))__cxa_pure_virtual
+496 (int (*)(...))__cxa_pure_virtual
+504 (int (*)(...))__cxa_pure_virtual
+512 (int (*)(...))__cxa_pure_virtual
+520 (int (*)(...))__cxa_pure_virtual
+528 (int (*)(...))__cxa_pure_virtual
+536 (int (*)(...))-16
+544 (int (*)(...))(& _ZTI27QDesignerWidgetBoxInterface)
+552 0
+560 0
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+592 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+600 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+608 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDesignerWidgetBoxInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerWidgetBoxInterface (0x0x7fec34904820) 0
+ vptr=((& QDesignerWidgetBoxInterface::_ZTV27QDesignerWidgetBoxInterface) + 16)
+ QWidget (0x0x7fec34a17380) 0
+ primary-for QDesignerWidgetBoxInterface (0x0x7fec34904820)
+ QObject (0x0x7fec34a776c0) 0
+ primary-for QWidget (0x0x7fec34a17380)
+ QPaintDevice (0x0x7fec34a77720) 16
+ vptr=((& QDesignerWidgetBoxInterface::_ZTV27QDesignerWidgetBoxInterface) + 552)
+
+Vtable for QDesignerWidgetDataBaseItemInterface
+QDesignerWidgetDataBaseItemInterface::_ZTV36QDesignerWidgetDataBaseItemInterface: 30 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI36QDesignerWidgetDataBaseItemInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+232 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerWidgetDataBaseItemInterface
+ size=8 align=8
+ base size=8 base align=8
+QDesignerWidgetDataBaseItemInterface (0x0x7fec34784de0) 0 nearly-empty
+ vptr=((& QDesignerWidgetDataBaseItemInterface::_ZTV36QDesignerWidgetDataBaseItemInterface) + 16)
+
+Class QDesignerWidgetDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetDataBaseInterface::QPrivateSignal (0x0x7fec34784f00) 0 empty
+
+Vtable for QDesignerWidgetDataBaseInterface
+QDesignerWidgetDataBaseInterface::_ZTV32QDesignerWidgetDataBaseInterface: 22 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QDesignerWidgetDataBaseInterface)
+16 (int (*)(...))QDesignerWidgetDataBaseInterface::metaObject
+24 (int (*)(...))QDesignerWidgetDataBaseInterface::qt_metacast
+32 (int (*)(...))QDesignerWidgetDataBaseInterface::qt_metacall
+40 (int (*)(...))QDesignerWidgetDataBaseInterface::~QDesignerWidgetDataBaseInterface
+48 (int (*)(...))QDesignerWidgetDataBaseInterface::~QDesignerWidgetDataBaseInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDesignerWidgetDataBaseInterface::count
+120 (int (*)(...))QDesignerWidgetDataBaseInterface::item
+128 (int (*)(...))QDesignerWidgetDataBaseInterface::indexOf
+136 (int (*)(...))QDesignerWidgetDataBaseInterface::insert
+144 (int (*)(...))QDesignerWidgetDataBaseInterface::append
+152 (int (*)(...))QDesignerWidgetDataBaseInterface::indexOfObject
+160 (int (*)(...))QDesignerWidgetDataBaseInterface::indexOfClassName
+168 (int (*)(...))QDesignerWidgetDataBaseInterface::core
+
+Class QDesignerWidgetDataBaseInterface
+ size=40 align=8
+ base size=40 base align=8
+QDesignerWidgetDataBaseInterface (0x0x7fec347b3750) 0
+ vptr=((& QDesignerWidgetDataBaseInterface::_ZTV32QDesignerWidgetDataBaseInterface) + 16)
+ QObject (0x0x7fec34784ea0) 0
+ primary-for QDesignerWidgetDataBaseInterface (0x0x7fec347b3750)
+
+Class QDesignerWidgetFactoryInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetFactoryInterface::QPrivateSignal (0x0x7fec347d4900) 0 empty
+
+Vtable for QDesignerWidgetFactoryInterface
+QDesignerWidgetFactoryInterface::_ZTV31QDesignerWidgetFactoryInterface: 21 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI31QDesignerWidgetFactoryInterface)
+16 (int (*)(...))QDesignerWidgetFactoryInterface::metaObject
+24 (int (*)(...))QDesignerWidgetFactoryInterface::qt_metacast
+32 (int (*)(...))QDesignerWidgetFactoryInterface::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerWidgetFactoryInterface
+ size=16 align=8
+ base size=16 base align=8
+QDesignerWidgetFactoryInterface (0x0x7fec347b3f70) 0
+ vptr=((& QDesignerWidgetFactoryInterface::_ZTV31QDesignerWidgetFactoryInterface) + 16)
+ QObject (0x0x7fec347d48a0) 0
+ primary-for QDesignerWidgetFactoryInterface (0x0x7fec347b3f70)
+
+Vtable for QDesignerContainerExtension
+QDesignerContainerExtension::_ZTV27QDesignerContainerExtension: 13 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDesignerContainerExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerContainerExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerContainerExtension (0x0x7fec347d49c0) 0 nearly-empty
+ vptr=((& QDesignerContainerExtension::_ZTV27QDesignerContainerExtension) + 16)
+
+Vtable for QDesignerDynamicPropertySheetExtension
+QDesignerDynamicPropertySheetExtension::_ZTV38QDesignerDynamicPropertySheetExtension: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI38QDesignerDynamicPropertySheetExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerDynamicPropertySheetExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerDynamicPropertySheetExtension (0x0x7fec347d4c00) 0 nearly-empty
+ vptr=((& QDesignerDynamicPropertySheetExtension::_ZTV38QDesignerDynamicPropertySheetExtension) + 16)
+
+Vtable for QDesignerExtraInfoExtension
+QDesignerExtraInfoExtension::_ZTV27QDesignerExtraInfoExtension: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDesignerExtraInfoExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerExtraInfoExtension
+ size=32 align=8
+ base size=32 base align=8
+QDesignerExtraInfoExtension (0x0x7fec347d4ea0) 0
+ vptr=((& QDesignerExtraInfoExtension::_ZTV27QDesignerExtraInfoExtension) + 16)
+
+Vtable for QFormBuilder
+QFormBuilder::_ZTV12QFormBuilder: 43 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QFormBuilder)
+16 (int (*)(...))QFormBuilder::~QFormBuilder
+24 (int (*)(...))QFormBuilder::~QFormBuilder
+32 (int (*)(...))QAbstractFormBuilder::load
+40 (int (*)(...))QAbstractFormBuilder::save
+48 (int (*)(...))QAbstractFormBuilder::loadExtraInfo
+56 (int (*)(...))QFormBuilder::create
+64 (int (*)(...))QFormBuilder::create
+72 (int (*)(...))QFormBuilder::create
+80 (int (*)(...))QFormBuilder::create
+88 (int (*)(...))QFormBuilder::create
+96 (int (*)(...))QFormBuilder::create
+104 (int (*)(...))QAbstractFormBuilder::addMenuAction
+112 (int (*)(...))QFormBuilder::applyProperties
+120 (int (*)(...))QAbstractFormBuilder::applyTabStops
+128 (int (*)(...))QFormBuilder::createWidget
+136 (int (*)(...))QFormBuilder::createLayout
+144 (int (*)(...))QAbstractFormBuilder::createAction
+152 (int (*)(...))QAbstractFormBuilder::createActionGroup
+160 (int (*)(...))QAbstractFormBuilder::createCustomWidgets
+168 (int (*)(...))QFormBuilder::createConnections
+176 (int (*)(...))QAbstractFormBuilder::createResources
+184 (int (*)(...))QFormBuilder::addItem
+192 (int (*)(...))QFormBuilder::addItem
+200 (int (*)(...))QAbstractFormBuilder::saveExtraInfo
+208 (int (*)(...))QAbstractFormBuilder::saveDom
+216 (int (*)(...))QAbstractFormBuilder::createActionRefDom
+224 (int (*)(...))QAbstractFormBuilder::createDom
+232 (int (*)(...))QAbstractFormBuilder::createDom
+240 (int (*)(...))QAbstractFormBuilder::createDom
+248 (int (*)(...))QAbstractFormBuilder::createDom
+256 (int (*)(...))QAbstractFormBuilder::createDom
+264 (int (*)(...))QAbstractFormBuilder::createDom
+272 (int (*)(...))QAbstractFormBuilder::saveConnections
+280 (int (*)(...))QAbstractFormBuilder::saveCustomWidgets
+288 (int (*)(...))QAbstractFormBuilder::saveTabStops
+296 (int (*)(...))QAbstractFormBuilder::saveResources
+304 (int (*)(...))QAbstractFormBuilder::computeProperties
+312 (int (*)(...))QAbstractFormBuilder::checkProperty
+320 (int (*)(...))QAbstractFormBuilder::createProperty
+328 (int (*)(...))QAbstractFormBuilder::layoutInfo
+336 (int (*)(...))QFormBuilder::updateCustomWidgets
+
+Class QFormBuilder
+ size=16 align=8
+ base size=16 base align=8
+QFormBuilder (0x0x7fec347b3f08) 0
+ vptr=((& QFormBuilder::_ZTV12QFormBuilder) + 16)
+ QAbstractFormBuilder (0x0x7fec348640c0) 0
+ primary-for QFormBuilder (0x0x7fec347b3f08)
+
+Vtable for QDesignerLayoutDecorationExtension
+QDesignerLayoutDecorationExtension::_ZTV34QDesignerLayoutDecorationExtension: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI34QDesignerLayoutDecorationExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerLayoutDecorationExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerLayoutDecorationExtension (0x0x7fec34864120) 0 nearly-empty
+ vptr=((& QDesignerLayoutDecorationExtension::_ZTV34QDesignerLayoutDecorationExtension) + 16)
+
+Vtable for QDesignerMemberSheetExtension
+QDesignerMemberSheetExtension::_ZTV29QDesignerMemberSheetExtension: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QDesignerMemberSheetExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerMemberSheetExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerMemberSheetExtension (0x0x7fec34864360) 0 nearly-empty
+ vptr=((& QDesignerMemberSheetExtension::_ZTV29QDesignerMemberSheetExtension) + 16)
+
+Vtable for QDesignerPropertySheetExtension
+QDesignerPropertySheetExtension::_ZTV31QDesignerPropertySheetExtension: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI31QDesignerPropertySheetExtension)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerPropertySheetExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerPropertySheetExtension (0x0x7fec348645a0) 0 nearly-empty
+ vptr=((& QDesignerPropertySheetExtension::_ZTV31QDesignerPropertySheetExtension) + 16)
+
+Class QExtensionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QExtensionManager::QPrivateSignal (0x0x7fec348648a0) 0 empty
+
+Vtable for QExtensionManager
+QExtensionManager::_ZTV17QExtensionManager: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QExtensionManager)
+16 (int (*)(...))QExtensionManager::metaObject
+24 (int (*)(...))QExtensionManager::qt_metacast
+32 (int (*)(...))QExtensionManager::qt_metacall
+40 (int (*)(...))QExtensionManager::~QExtensionManager
+48 (int (*)(...))QExtensionManager::~QExtensionManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QExtensionManager::registerExtensions
+120 (int (*)(...))QExtensionManager::unregisterExtensions
+128 (int (*)(...))QExtensionManager::extension
+136 (int (*)(...))-16
+144 (int (*)(...))(& _ZTI17QExtensionManager)
+152 (int (*)(...))QExtensionManager::_ZThn16_N17QExtensionManagerD1Ev
+160 (int (*)(...))QExtensionManager::_ZThn16_N17QExtensionManagerD0Ev
+168 (int (*)(...))QExtensionManager::_ZThn16_N17QExtensionManager18registerExtensionsEP25QAbstractExtensionFactoryRK7QString
+176 (int (*)(...))QExtensionManager::_ZThn16_N17QExtensionManager20unregisterExtensionsEP25QAbstractExtensionFactoryRK7QString
+184 (int (*)(...))QExtensionManager::_ZThn16_NK17QExtensionManager9extensionEP7QObjectRK7QString
+
+Class QExtensionManager
+ size=56 align=8
+ base size=56 base align=8
+QExtensionManager (0x0x7fec34a177e0) 0
+ vptr=((& QExtensionManager::_ZTV17QExtensionManager) + 16)
+ QObject (0x0x7fec348647e0) 0
+ primary-for QExtensionManager (0x0x7fec34a177e0)
+ QAbstractExtensionManager (0x0x7fec34864840) 16 nearly-empty
+ vptr=((& QExtensionManager::_ZTV17QExtensionManager) + 152)
+
+Vtable for QDesignerTaskMenuExtension
+QDesignerTaskMenuExtension::_ZTV26QDesignerTaskMenuExtension: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QDesignerTaskMenuExtension)
+16 0
+24 0
+32 (int (*)(...))QDesignerTaskMenuExtension::preferredEditAction
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QDesignerTaskMenuExtension
+ size=8 align=8
+ base size=8 base align=8
+QDesignerTaskMenuExtension (0x0x7fec344d9360) 0 nearly-empty
+ vptr=((& QDesignerTaskMenuExtension::_ZTV26QDesignerTaskMenuExtension) + 16)
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fec3454d480) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7fec3454d7e0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fec3454d9c0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7fec3454dd20) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fec3454df00) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7fec34578240) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fec345783c0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7fec34578720) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fec34578900) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7fec34578c60) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7fec34578e40) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7fec345a61e0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7fec345a63c0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7fec345a6720) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7fec345a6900) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7fec345a6c60) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fec345fd540) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7fec345fd8a0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fec345fda20) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7fec345fdd80) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fec345fdf00) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7fec346242a0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fec34624420) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7fec34624780) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fec34624900) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7fec34624c60) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7fec34624de0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7fec3464f180) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7fec3464f300) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7fec3464f660) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7fec3464f7e0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7fec3464fb40) 0 empty
+
+Class QtPrivate::q_relocate_overlap_n_left_move(iterator, N, iterator) [with iterator = QDesignerWidgetBoxInterface::Widget*; N = long long int]::Destructor
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::q_relocate_overlap_n_left_move(iterator, N, iterator) [with iterator = QDesignerWidgetBoxInterface::Widget*; N = long long int]::Destructor (0x0x7fec2eb65840) 0
+
diff --git a/tests/auto/bic/data/QtHelp.6.0.0.linux-gcc-amd64.txt b/tests/auto/bic/data/QtHelp.6.0.0.linux-gcc-amd64.txt
new file mode 100644
index 000000000..abb64b29b
--- /dev/null
+++ b/tests/auto/bic/data/QtHelp.6.0.0.linux-gcc-amd64.txt
@@ -0,0 +1,20252 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7ff6e3cd18a0) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7ff6e3d660c0) 0 empty
+
+Class std::__do_is_nt_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_nt_destructible_impl (0x0x7ff6e3d66300) 0 empty
+
+Class std::__do_is_implicitly_default_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_implicitly_default_constructible_impl (0x0x7ff6e3d97420) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7ff6e3dc5c00) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7ff6e3e3fa20) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7ff6e3e3fae0) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7ff6e4074000) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7ff6e4074060) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7ff6e40740c0) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7ff6e4074120) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7ff6e4074180) 0 empty
+
+Class std::__result_of_memfun_ref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memfun_ref_impl (0x0x7ff6e4074240) 0 empty
+
+Class std::__result_of_memfun_deref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memfun_deref_impl (0x0x7ff6e4074300) 0 empty
+
+Class std::__result_of_memobj_ref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memobj_ref_impl (0x0x7ff6e40743c0) 0 empty
+
+Class std::__result_of_memobj_deref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memobj_deref_impl (0x0x7ff6e4074480) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7ff6e40747e0) 0 empty
+
+Class std::__swappable_details::__do_is_swappable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_details::__do_is_swappable_impl (0x0x7ff6e4074b40) 0 empty
+
+Class std::__swappable_details::__do_is_nothrow_swappable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_details::__do_is_nothrow_swappable_impl (0x0x7ff6e4074ba0) 0 empty
+
+Class std::__swappable_with_details::__do_is_swappable_with_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_with_details::__do_is_swappable_with_impl (0x0x7ff6e4074e40) 0 empty
+
+Class std::__swappable_with_details::__do_is_nothrow_swappable_with_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_with_details::__do_is_nothrow_swappable_with_impl (0x0x7ff6e4074ea0) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuch (0x0x7ff6e40c2720) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7ff6e4110cc0) 0 empty
+
+Class std::__nonesuch_no_braces
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch_no_braces (0x0x7ff6e40c4958) 0 empty
+ std::__nonesuch (0x0x7ff6e41441e0) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7ff6e418af00) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7ff6e41c11e0) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7ff6e41c1240) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7ff6e41f3f60) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7ff6e421f000) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7ff6e40c4ea0) 0 empty
+ std::input_iterator_tag (0x0x7ff6e421f060) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7ff6e40c4f08) 0 empty
+ std::forward_iterator_tag (0x0x7ff6e40c4f70) 0 empty
+ std::input_iterator_tag (0x0x7ff6e421f0c0) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7ff6e4220000) 0 empty
+ std::bidirectional_iterator_tag (0x0x7ff6e4220068) 0 empty
+ std::forward_iterator_tag (0x0x7ff6e42200d0) 0 empty
+ std::input_iterator_tag (0x0x7ff6e421f120) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_iter (0x0x7ff6e3eaade0) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_less_val
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_val (0x0x7ff6e3eaaf00) 0 empty
+
+Class __gnu_cxx::__ops::_Val_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Val_less_iter (0x0x7ff6e3ed8240) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_equal_to_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_equal_to_iter (0x0x7ff6e3ed8540) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_equal_to_val
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_equal_to_val (0x0x7ff6e3ed8660) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7ff6e3f60e40) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7ff6e3fad1e0) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7ff6e3fad240) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7ff6e3fad300) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7ff6e3fad360) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7ff6e3fad3c0) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7ff6e3fad420) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7ff6e3fad480) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7ff6e3fad720) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7ff6e3fad9c0) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7ff6e3fada20) 0
+
+Vtable for std::exception
+std::exception::_ZTVSt9exception: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9exception)
+16 (int (*)(...))std::exception::~exception
+24 (int (*)(...))std::exception::~exception
+32 (int (*)(...))std::exception::what
+
+Class std::exception
+ size=8 align=8
+ base size=8 base align=8
+std::exception (0x0x7ff6e32587e0) 0 nearly-empty
+ vptr=((& std::exception::_ZTVSt9exception) + 16)
+
+Vtable for std::bad_exception
+std::bad_exception::_ZTVSt13bad_exception: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13bad_exception)
+16 (int (*)(...))std::bad_exception::~bad_exception
+24 (int (*)(...))std::bad_exception::~bad_exception
+32 (int (*)(...))std::bad_exception::what
+
+Class std::bad_exception
+ size=8 align=8
+ base size=8 base align=8
+std::bad_exception (0x0x7ff6e4220478) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+ std::exception (0x0x7ff6e32589c0) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7ff6e4220478)
+
+Vtable for std::type_info
+std::type_info::_ZTVSt9type_info: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9type_info)
+16 (int (*)(...))std::type_info::~type_info
+24 (int (*)(...))std::type_info::~type_info
+32 (int (*)(...))std::type_info::__is_pointer_p
+40 (int (*)(...))std::type_info::__is_function_p
+48 (int (*)(...))std::type_info::__do_catch
+56 (int (*)(...))std::type_info::__do_upcast
+
+Class std::type_info
+ size=16 align=8
+ base size=16 base align=8
+std::type_info (0x0x7ff6e3258ba0) 0
+ vptr=((& std::type_info::_ZTVSt9type_info) + 16)
+
+Vtable for std::bad_cast
+std::bad_cast::_ZTVSt8bad_cast: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt8bad_cast)
+16 (int (*)(...))std::bad_cast::~bad_cast
+24 (int (*)(...))std::bad_cast::~bad_cast
+32 (int (*)(...))std::bad_cast::what
+
+Class std::bad_cast
+ size=8 align=8
+ base size=8 base align=8
+std::bad_cast (0x0x7ff6e42204e0) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+ std::exception (0x0x7ff6e3258f60) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7ff6e42204e0)
+
+Vtable for std::bad_typeid
+std::bad_typeid::_ZTVSt10bad_typeid: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt10bad_typeid)
+16 (int (*)(...))std::bad_typeid::~bad_typeid
+24 (int (*)(...))std::bad_typeid::~bad_typeid
+32 (int (*)(...))std::bad_typeid::what
+
+Class std::bad_typeid
+ size=8 align=8
+ base size=8 base align=8
+std::bad_typeid (0x0x7ff6e4220548) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+ std::exception (0x0x7ff6e3291180) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7ff6e4220548)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7ff6e3291360) 0
+
+Vtable for std::nested_exception
+std::nested_exception::_ZTVSt16nested_exception: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt16nested_exception)
+16 (int (*)(...))std::nested_exception::~nested_exception
+24 (int (*)(...))std::nested_exception::~nested_exception
+
+Class std::nested_exception
+ size=16 align=8
+ base size=16 base align=8
+std::nested_exception (0x0x7ff6e32918a0) 0
+ vptr=((& std::nested_exception::_ZTVSt16nested_exception) + 16)
+
+Vtable for std::bad_alloc
+std::bad_alloc::_ZTVSt9bad_alloc: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9bad_alloc)
+16 (int (*)(...))std::bad_alloc::~bad_alloc
+24 (int (*)(...))std::bad_alloc::~bad_alloc
+32 (int (*)(...))std::bad_alloc::what
+
+Class std::bad_alloc
+ size=8 align=8
+ base size=8 base align=8
+std::bad_alloc (0x0x7ff6e42205b0) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+ std::exception (0x0x7ff6e3291f60) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7ff6e42205b0)
+
+Vtable for std::bad_array_new_length
+std::bad_array_new_length::_ZTVSt20bad_array_new_length: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt20bad_array_new_length)
+16 (int (*)(...))std::bad_array_new_length::~bad_array_new_length
+24 (int (*)(...))std::bad_array_new_length::~bad_array_new_length
+32 (int (*)(...))std::bad_array_new_length::what
+
+Class std::bad_array_new_length
+ size=8 align=8
+ base size=8 base align=8
+std::bad_array_new_length (0x0x7ff6e4220618) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+ std::bad_alloc (0x0x7ff6e4220680) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7ff6e4220618)
+ std::exception (0x0x7ff6e32c9180) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7ff6e4220680)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7ff6e32c9360) 0 empty
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7ff6e32c95a0) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7ff6e334bd20) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7ff6e2f6b120) 0
+
+Vtable for __cxxabiv1::__forced_unwind
+__cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN10__cxxabiv115__forced_unwindE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class __cxxabiv1::__forced_unwind
+ size=8 align=8
+ base size=8 base align=8
+__cxxabiv1::__forced_unwind (0x0x7ff6e2f6b1e0) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7ff6e2fca0c0) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7ff6e2fca180) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7ff6e2fca1e0) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7ff6e2fca240) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7ff6e2fca2a0) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7ff6e2fca3c0) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7ff6e2fca420) 0
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7ff6e2c5ea80) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7ff6e2c5ec00) 0 empty
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7ff6e2a7ea80) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7ff6e2a7eae0) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7ff6e2a7eb40) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7ff6e2a7eba0) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7ff6e26db360) 0
+
+Vtable for std::logic_error
+std::logic_error::_ZTVSt11logic_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt11logic_error)
+16 (int (*)(...))std::logic_error::~logic_error
+24 (int (*)(...))std::logic_error::~logic_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::logic_error
+ size=16 align=8
+ base size=16 base align=8
+std::logic_error (0x0x7ff6e266a618) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+ std::exception (0x0x7ff6e26db420) 0 nearly-empty
+ primary-for std::logic_error (0x0x7ff6e266a618)
+
+Vtable for std::domain_error
+std::domain_error::_ZTVSt12domain_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12domain_error)
+16 (int (*)(...))std::domain_error::~domain_error
+24 (int (*)(...))std::domain_error::~domain_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::domain_error
+ size=16 align=8
+ base size=16 base align=8
+std::domain_error (0x0x7ff6e266a680) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+ std::logic_error (0x0x7ff6e266a6e8) 0
+ primary-for std::domain_error (0x0x7ff6e266a680)
+ std::exception (0x0x7ff6e26db480) 0 nearly-empty
+ primary-for std::logic_error (0x0x7ff6e266a6e8)
+
+Vtable for std::invalid_argument
+std::invalid_argument::_ZTVSt16invalid_argument: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt16invalid_argument)
+16 (int (*)(...))std::invalid_argument::~invalid_argument
+24 (int (*)(...))std::invalid_argument::~invalid_argument
+32 (int (*)(...))std::logic_error::what
+
+Class std::invalid_argument
+ size=16 align=8
+ base size=16 base align=8
+std::invalid_argument (0x0x7ff6e266a750) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+ std::logic_error (0x0x7ff6e266a7b8) 0
+ primary-for std::invalid_argument (0x0x7ff6e266a750)
+ std::exception (0x0x7ff6e26db4e0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7ff6e266a7b8)
+
+Vtable for std::length_error
+std::length_error::_ZTVSt12length_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12length_error)
+16 (int (*)(...))std::length_error::~length_error
+24 (int (*)(...))std::length_error::~length_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::length_error
+ size=16 align=8
+ base size=16 base align=8
+std::length_error (0x0x7ff6e266a820) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+ std::logic_error (0x0x7ff6e266a888) 0
+ primary-for std::length_error (0x0x7ff6e266a820)
+ std::exception (0x0x7ff6e26db540) 0 nearly-empty
+ primary-for std::logic_error (0x0x7ff6e266a888)
+
+Vtable for std::out_of_range
+std::out_of_range::_ZTVSt12out_of_range: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12out_of_range)
+16 (int (*)(...))std::out_of_range::~out_of_range
+24 (int (*)(...))std::out_of_range::~out_of_range
+32 (int (*)(...))std::logic_error::what
+
+Class std::out_of_range
+ size=16 align=8
+ base size=16 base align=8
+std::out_of_range (0x0x7ff6e266a8f0) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+ std::logic_error (0x0x7ff6e266a958) 0
+ primary-for std::out_of_range (0x0x7ff6e266a8f0)
+ std::exception (0x0x7ff6e26db5a0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7ff6e266a958)
+
+Vtable for std::runtime_error
+std::runtime_error::_ZTVSt13runtime_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13runtime_error)
+16 (int (*)(...))std::runtime_error::~runtime_error
+24 (int (*)(...))std::runtime_error::~runtime_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::runtime_error
+ size=16 align=8
+ base size=16 base align=8
+std::runtime_error (0x0x7ff6e266a9c0) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+ std::exception (0x0x7ff6e26db600) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7ff6e266a9c0)
+
+Vtable for std::range_error
+std::range_error::_ZTVSt11range_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt11range_error)
+16 (int (*)(...))std::range_error::~range_error
+24 (int (*)(...))std::range_error::~range_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::range_error
+ size=16 align=8
+ base size=16 base align=8
+std::range_error (0x0x7ff6e266aa28) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+ std::runtime_error (0x0x7ff6e266aa90) 0
+ primary-for std::range_error (0x0x7ff6e266aa28)
+ std::exception (0x0x7ff6e26db660) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7ff6e266aa90)
+
+Vtable for std::overflow_error
+std::overflow_error::_ZTVSt14overflow_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt14overflow_error)
+16 (int (*)(...))std::overflow_error::~overflow_error
+24 (int (*)(...))std::overflow_error::~overflow_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::overflow_error
+ size=16 align=8
+ base size=16 base align=8
+std::overflow_error (0x0x7ff6e266aaf8) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+ std::runtime_error (0x0x7ff6e266ab60) 0
+ primary-for std::overflow_error (0x0x7ff6e266aaf8)
+ std::exception (0x0x7ff6e26db6c0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7ff6e266ab60)
+
+Vtable for std::underflow_error
+std::underflow_error::_ZTVSt15underflow_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt15underflow_error)
+16 (int (*)(...))std::underflow_error::~underflow_error
+24 (int (*)(...))std::underflow_error::~underflow_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::underflow_error
+ size=16 align=8
+ base size=16 base align=8
+std::underflow_error (0x0x7ff6e266abc8) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+ std::runtime_error (0x0x7ff6e266ac30) 0
+ primary-for std::underflow_error (0x0x7ff6e266abc8)
+ std::exception (0x0x7ff6e26db720) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7ff6e266ac30)
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7ff6e2742a20) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7ff6e2742a80) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7ff6e2742c00) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7ff6e2742cc0) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7ff6e266aea0) 0
+ std::__uses_alloc_base (0x0x7ff6e2742c60) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7ff6e24e3300) 0 empty
+
+Vtable for std::bad_function_call
+std::bad_function_call::_ZTVSt17bad_function_call: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt17bad_function_call)
+16 (int (*)(...))std::bad_function_call::~bad_function_call
+24 (int (*)(...))std::bad_function_call::~bad_function_call
+32 (int (*)(...))std::bad_function_call::what
+
+Class std::bad_function_call
+ size=8 align=8
+ base size=8 base align=8
+std::bad_function_call (0x0x7ff6e25882d8) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+ std::exception (0x0x7ff6e257e9c0) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7ff6e25882d8)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7ff6e257ea80) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7ff6e257eae0) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7ff6e257ede0) 0
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7ff6e2257c60) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7ff6e2257d20) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7ff6e2282240) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7ff6e22aa0c0) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7ff6e22aa180) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7ff6e22aa1e0) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7ff6e22aa5a0) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7ff6e22aa6c0) 0
+
+Class std::__detail::_Equality_base
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Equality_base (0x0x7ff6e208c780) 0 empty
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7ff6e20cc060) 0 empty
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7ff6e20cca20) 0 empty
+
+Vtable for std::bad_optional_access
+std::bad_optional_access::_ZTVSt19bad_optional_access: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt19bad_optional_access)
+16 (int (*)(...))std::bad_optional_access::~bad_optional_access
+24 (int (*)(...))std::bad_optional_access::~bad_optional_access
+32 (int (*)(...))std::bad_optional_access::what
+
+Class std::bad_optional_access
+ size=8 align=8
+ base size=8 base align=8
+std::bad_optional_access (0x0x7ff6e20b6208) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+ std::exception (0x0x7ff6e20ccc60) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7ff6e20b6208)
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7ff6e1ba1600) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7ff6e1a77d00) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7ff6e1ba1d80) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7ff6e1a77dd0) 0
+ std::_Bit_iterator_base (0x0x7ff6e1a77e38) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7ff6e1bcf360) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7ff6e1a77f08) 0
+ std::_Bit_iterator_base (0x0x7ff6e1a77f70) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7ff6e1bcfb40) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7ff6e19e1060) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7ff6e19e11e0) 0 empty
+
+Class __pstl::execution::v1::parallel_unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_unsequenced_policy (0x0x7ff6e19e1360) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7ff6e19e14e0) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7ff6e1720000) 0 empty
+
+Class std::__detail::__variant::__variant_idx_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_idx_cookie (0x0x7ff6e1720060) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7ff6e17a5ae0) 0 empty
+
+Vtable for std::bad_variant_access
+std::bad_variant_access::_ZTVSt18bad_variant_access: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt18bad_variant_access)
+16 (int (*)(...))std::bad_variant_access::~bad_variant_access
+24 (int (*)(...))std::bad_variant_access::~bad_variant_access
+32 (int (*)(...))std::bad_variant_access::what
+
+Class std::bad_variant_access
+ size=16 align=8
+ base size=16 base align=8
+std::bad_variant_access (0x0x7ff6e178e340) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+ std::exception (0x0x7ff6e180c060) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7ff6e178e340)
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7ff6e14a0a20) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7ff6e14a0a80) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7ff6e14a0d20) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7ff6e14eb540) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7ff6e1524660) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7ff6e15b4480) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7ff6e15545b0) 0
+ std::__atomic_flag_base (0x0x7ff6e15b44e0) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7ff6e1134888) 0
+ QAtomicInteger<int> (0x0x7ff6e11348f0) 0
+ QBasicAtomicInteger<int> (0x0x7ff6e113d3c0) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7ff6e0da46c0) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7ff6e0da4720) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7ff6e0a58a20) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7ff6e0a9b180) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7ff6e0a9b1e0) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7ff6e0df3d00) 0
+ QGenericArgument (0x0x7ff6e0a9b480) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7ff6e0a9b960) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7ff6e0a9b9c0) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7ff6e0a9b900) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7ff6e0ae9360) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7ff6e0b15d80) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7ff6e0b3c780) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7ff6e0c142a0) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7ff6e0c14600) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7ff6e08cf000) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7ff6e08cf120) 0
+
+Vtable for std::locale::facet
+std::locale::facet::_ZTVNSt6locale5facetE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6locale5facetE)
+16 (int (*)(...))std::locale::facet::~facet
+24 (int (*)(...))std::locale::facet::~facet
+
+Class std::locale::facet
+ size=16 align=8
+ base size=12 base align=8
+std::locale::facet (0x0x7ff6e08cf4e0) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7ff6e08cf780) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7ff6e08cf960) 0
+
+Vtable for std::_V2::error_category
+std::_V2::error_category::_ZTVNSt3_V214error_categoryE: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt3_V214error_categoryE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))std::_V2::error_category::_M_message
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))std::_V2::error_category::default_error_condition
+64 (int (*)(...))std::_V2::error_category::equivalent
+72 (int (*)(...))std::_V2::error_category::equivalent
+
+Class std::_V2::error_category
+ size=8 align=8
+ base size=8 base align=8
+std::_V2::error_category (0x0x7ff6e0922a80) 0 nearly-empty
+ vptr=((& std::_V2::error_category::_ZTVNSt3_V214error_categoryE) + 16)
+
+Class std::error_code
+ size=16 align=8
+ base size=16 base align=8
+std::error_code (0x0x7ff6e0922de0) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7ff6e0971600) 0
+
+Vtable for std::system_error
+std::system_error::_ZTVSt12system_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12system_error)
+16 (int (*)(...))std::system_error::~system_error
+24 (int (*)(...))std::system_error::~system_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::system_error
+ size=32 align=8
+ base size=32 base align=8
+std::system_error (0x0x7ff6e097b208) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+ std::runtime_error (0x0x7ff6e097b270) 0
+ primary-for std::system_error (0x0x7ff6e097b208)
+ std::exception (0x0x7ff6e099d1e0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7ff6e097b270)
+
+Vtable for std::ios_base::failure
+std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt8ios_base7failureB5cxx11E)
+16 (int (*)(...))std::ios_base::failure::~failure
+24 (int (*)(...))std::ios_base::failure::~failure
+32 (int (*)(...))std::ios_base::failure::what
+
+Class std::ios_base::failure
+ size=32 align=8
+ base size=32 base align=8
+std::ios_base::failure (0x0x7ff6e097b5b0) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+ std::system_error (0x0x7ff6e097b618) 0
+ primary-for std::ios_base::failure (0x0x7ff6e097b5b0)
+ std::runtime_error (0x0x7ff6e097b680) 0
+ primary-for std::system_error (0x0x7ff6e097b618)
+ std::exception (0x0x7ff6e09d2960) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7ff6e097b680)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7ff6e09d29c0) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7ff6e09d2a20) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7ff6e09d2a80) 0 empty
+
+Vtable for std::ios_base
+std::ios_base::_ZTVSt8ios_base: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt8ios_base)
+16 (int (*)(...))std::ios_base::~ios_base
+24 (int (*)(...))std::ios_base::~ios_base
+
+Class std::ios_base
+ size=216 align=8
+ base size=216 base align=8
+std::ios_base (0x0x7ff6e09d2900) 0
+ vptr=((& std::ios_base::_ZTVSt8ios_base) + 16)
+
+Class std::ctype_base
+ size=1 align=1
+ base size=0 base align=1
+std::ctype_base (0x0x7ff6e068b6c0) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7ff6e07439c0) 0 empty
+
+VTT for std::basic_ostream<char>
+std::basic_ostream<char>::_ZTTSo: 2 entries
+0 ((& std::basic_ostream<char>::_ZTVSo) + 24)
+8 ((& std::basic_ostream<char>::_ZTVSo) + 64)
+
+VTT for std::basic_ostream<wchar_t>
+std::basic_ostream<wchar_t>::_ZTTSt13basic_ostreamIwSt11char_traitsIwEE: 2 entries
+0 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 64)
+
+VTT for std::basic_istream<char>
+std::basic_istream<char>::_ZTTSi: 2 entries
+0 ((& std::basic_istream<char>::_ZTVSi) + 24)
+8 ((& std::basic_istream<char>::_ZTVSi) + 64)
+
+VTT for std::basic_istream<wchar_t>
+std::basic_istream<wchar_t>::_ZTTSt13basic_istreamIwSt11char_traitsIwEE: 2 entries
+0 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 64)
+
+Construction vtable for std::basic_istream<char> (0x0x7ff6e02e1208 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd0_Si: 10 entries
+0 24
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISi)
+24 0
+32 0
+40 18446744073709551592
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISi)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<char> (0x0x7ff6e02e12d8 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd16_So: 10 entries
+0 8
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISo)
+24 0
+32 0
+40 18446744073709551608
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISo)
+64 0
+72 0
+
+VTT for std::basic_iostream<char>
+std::basic_iostream<char>::_ZTTSd: 7 entries
+0 ((& std::basic_iostream<char>::_ZTVSd) + 24)
+8 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 24)
+16 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 64)
+24 ((& std::basic_iostream<char>::_ZTCSd16_So) + 24)
+32 ((& std::basic_iostream<char>::_ZTCSd16_So) + 64)
+40 ((& std::basic_iostream<char>::_ZTVSd) + 104)
+48 ((& std::basic_iostream<char>::_ZTVSd) + 64)
+
+Construction vtable for std::basic_istream<wchar_t> (0x0x7ff6e02e1820 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E: 10 entries
+0 24
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551592
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<wchar_t> (0x0x7ff6e02e18f0 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E: 10 entries
+0 8
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551608
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+VTT for std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTTSt14basic_iostreamIwSt11char_traitsIwEE: 7 entries
+0 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 24)
+16 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 64)
+24 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 24)
+32 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 64)
+40 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 104)
+48 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 64)
+
+Vtable for __gnu_cxx::__concurrence_lock_error
+__gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx24__concurrence_lock_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error
+24 (int (*)(...))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error
+32 (int (*)(...))__gnu_cxx::__concurrence_lock_error::what
+
+Class __gnu_cxx::__concurrence_lock_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_lock_error (0x0x7ff6e02e1ea0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+ std::exception (0x0x7ff6e03373c0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7ff6e02e1ea0)
+
+Vtable for __gnu_cxx::__concurrence_unlock_error
+__gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx26__concurrence_unlock_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error
+24 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error
+32 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::what
+
+Class __gnu_cxx::__concurrence_unlock_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_unlock_error (0x0x7ff6e02e1f08) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+ std::exception (0x0x7ff6e03374e0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7ff6e02e1f08)
+
+Vtable for __gnu_cxx::__concurrence_broadcast_error
+__gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx29__concurrence_broadcast_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::~__concurrence_broadcast_error
+24 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::~__concurrence_broadcast_error
+32 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::what
+
+Class __gnu_cxx::__concurrence_broadcast_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_broadcast_error (0x0x7ff6e02e1f70) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+ std::exception (0x0x7ff6e0337600) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7ff6e02e1f70)
+
+Vtable for __gnu_cxx::__concurrence_wait_error
+__gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx24__concurrence_wait_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_wait_error::~__concurrence_wait_error
+24 (int (*)(...))__gnu_cxx::__concurrence_wait_error::~__concurrence_wait_error
+32 (int (*)(...))__gnu_cxx::__concurrence_wait_error::what
+
+Class __gnu_cxx::__concurrence_wait_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_wait_error (0x0x7ff6e02e1410) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+ std::exception (0x0x7ff6e0337720) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7ff6e02e1410)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7ff6e035e000) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7ff6e035e360) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7ff6e035e660) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7ff6e035e9c0) 0
+
+Vtable for std::bad_weak_ptr
+std::bad_weak_ptr::_ZTVSt12bad_weak_ptr: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12bad_weak_ptr)
+16 (int (*)(...))std::bad_weak_ptr::~bad_weak_ptr
+24 (int (*)(...))std::bad_weak_ptr::~bad_weak_ptr
+32 (int (*)(...))std::bad_weak_ptr::what
+
+Class std::bad_weak_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::bad_weak_ptr (0x0x7ff6e02e1bc8) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+ std::exception (0x0x7ff6e0413180) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7ff6e02e1bc8)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7ff6e0051f00) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7ff6e007d480) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7ff6e01c12a0) 0
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7ff6dfef0120) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7ff6dffd8ae0) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7ff6dfe351e0) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7ff6dfaa0cc0) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7ff6dfc04060) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7ff6dfc04480) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7ff6dfc044e0) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7ff6df884660) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7ff6df964c60) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7ff6df964c00) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7ff6df9a9cc0) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7ff6df740000) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7ff6df331360) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7ff6df31bdd0) 0
+ QtPrivate::ArgBase (0x0x7ff6df3313c0) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7ff6df31bea0) 0
+ QtPrivate::ArgBase (0x0x7ff6df331600) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7ff6df3adde0) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7ff6df3adea0) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7ff6df1cd0c0) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7ff6dee64180) 0 empty
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7ff6dee64e40) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7ff6dee8c0c0) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7ff6def1c180) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7ff6df1f5340) 0
+ QIODeviceBase (0x0x7ff6def1c1e0) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7ff6def1c360) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7ff6defd1780) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7ff6df1f5c98) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7ff6defd1840) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7ff6df1f5d68) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7ff6defd1900) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7ff6decbe420) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7ff6df1f5e38) 0
+ QMetaContainer (0x0x7ff6decbe600) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7ff6df1f5f08) 0
+ QMetaContainer (0x0x7ff6decbe9c0) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7ff6de8f9060) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7ff6de8e30d0) 0
+ std::__detail::_List_node_base (0x0x7ff6de8f90c0) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7ff6de9d6180) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7ff6de9d64e0) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7ff6de83aae0) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7ff6de4bf180) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7ff6de3d5000) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7ff6de3d5060) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7ff6ddee5720) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7ff6ddee5a80) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7ff6ddf53ae0) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7ff6ddf53c00) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7ff6ddfbc2a0) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7ff6ddfbc240) 0 empty
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7ff6ddfbc300) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7ff6ddfbc780) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7ff6ddfbc7e0) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7ff6ddfbcde0) 0
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7ff6ddfeb540) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7ff6ddfeb840) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7ff6ddfeb960) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7ff6ddfebc00) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7ff6de025208) 0
+ QPropertyObserverBase (0x0x7ff6ddfebd80) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7ff6ddc51c60) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7ff6ddc7c8a0) 0
+
+Class QBindingStatus
+ size=16 align=8
+ base size=16 base align=8
+QBindingStatus (0x0x7ff6ddcacb40) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7ff6ddcacba0) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7ff6dddb4780) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7ff6dda614e0) 0 empty
+
+Vtable for QObjectData
+QObjectData::_ZTV11QObjectData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QObjectData)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+
+Class QObjectData
+ size=80 align=8
+ base size=80 base align=8
+QObjectData (0x0x7ff6ddaa2e40) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7ff6ddb537e0) 0 empty
+
+Vtable for QObject
+QObject::_ZTV7QObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QObject)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QObject::qt_metacall
+40 (int (*)(...))QObject::~QObject
+48 (int (*)(...))QObject::~QObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QObject
+ size=16 align=8
+ base size=16 base align=8
+QObject (0x0x7ff6ddb53780) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7ff6ddc05720) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7ff6ddc31000) 0 empty
+
+Vtable for QAbstractAnimation
+QAbstractAnimation::_ZTV18QAbstractAnimation: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractAnimation)
+16 (int (*)(...))QAbstractAnimation::metaObject
+24 (int (*)(...))QAbstractAnimation::qt_metacast
+32 (int (*)(...))QAbstractAnimation::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAbstractAnimation
+ size=16 align=8
+ base size=16 base align=8
+QAbstractAnimation (0x0x7ff6ddb6a410) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+ QObject (0x0x7ff6ddc05f60) 0
+ primary-for QAbstractAnimation (0x0x7ff6ddb6a410)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7ff6ddc31360) 0 empty
+
+Vtable for QAnimationDriver
+QAnimationDriver::_ZTV16QAnimationDriver: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAnimationDriver)
+16 (int (*)(...))QAnimationDriver::metaObject
+24 (int (*)(...))QAnimationDriver::qt_metacast
+32 (int (*)(...))QAnimationDriver::qt_metacall
+40 (int (*)(...))QAnimationDriver::~QAnimationDriver
+48 (int (*)(...))QAnimationDriver::~QAnimationDriver
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAnimationDriver::advance
+120 (int (*)(...))QAnimationDriver::elapsed
+128 (int (*)(...))QAnimationDriver::start
+136 (int (*)(...))QAnimationDriver::stop
+
+Class QAnimationDriver
+ size=16 align=8
+ base size=16 base align=8
+QAnimationDriver (0x0x7ff6ddb6a478) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+ QObject (0x0x7ff6ddc31300) 0
+ primary-for QAnimationDriver (0x0x7ff6ddb6a478)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7ff6ddc31540) 0 empty
+
+Vtable for QEventLoop
+QEventLoop::_ZTV10QEventLoop: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QEventLoop)
+16 (int (*)(...))QEventLoop::metaObject
+24 (int (*)(...))QEventLoop::qt_metacast
+32 (int (*)(...))QEventLoop::qt_metacall
+40 (int (*)(...))QEventLoop::~QEventLoop
+48 (int (*)(...))QEventLoop::~QEventLoop
+56 (int (*)(...))QEventLoop::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QEventLoop
+ size=16 align=8
+ base size=16 base align=8
+QEventLoop (0x0x7ff6ddb6a4e0) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+ QObject (0x0x7ff6ddc314e0) 0
+ primary-for QEventLoop (0x0x7ff6ddb6a4e0)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7ff6ddc319c0) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7ff6ddc31a80) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7ff6ddc31ae0) 0
+
+Vtable for QAbstractEventDispatcher
+QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractEventDispatcher)
+16 (int (*)(...))QAbstractEventDispatcher::metaObject
+24 (int (*)(...))QAbstractEventDispatcher::qt_metacast
+32 (int (*)(...))QAbstractEventDispatcher::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))QAbstractEventDispatcher::startingUp
+200 (int (*)(...))QAbstractEventDispatcher::closingDown
+
+Class QAbstractEventDispatcher
+ size=16 align=8
+ base size=16 base align=8
+QAbstractEventDispatcher (0x0x7ff6ddb6a680) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+ QObject (0x0x7ff6ddc31a20) 0
+ primary-for QAbstractEventDispatcher (0x0x7ff6ddb6a680)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7ff6dd8c62a0) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7ff6dd771d20) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7ff6dd771cc0) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7ff6dd790960) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7ff6dd91f888) 0
+ QStringConverterBase (0x0x7ff6dd790900) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7ff6dd91f8f0) 0
+ QStringConverter (0x0x7ff6dd91f958) 0
+ QStringConverterBase (0x0x7ff6dd7e3360) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7ff6dd91f9c0) 0
+ QStringConverter (0x0x7ff6dd91fa28) 0
+ QStringConverterBase (0x0x7ff6dd8051e0) 0 empty
+
+Vtable for QTextStream
+QTextStream::_ZTV11QTextStream: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTextStream)
+16 (int (*)(...))QTextStream::~QTextStream
+24 (int (*)(...))QTextStream::~QTextStream
+
+Class QTextStream
+ size=16 align=8
+ base size=16 base align=8
+QTextStream (0x0x7ff6dd91fa90) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+ QIODeviceBase (0x0x7ff6dd805ea0) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7ff6dd45a5a0) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7ff6dd4fa600) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7ff6dd551060) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7ff6dd5511e0) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7ff6dd5fb3c0) 0 empty
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7ff6dd6213c0) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7ff6dd5d5548) 0
+ QIODeviceBase (0x0x7ff6dd621360) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7ff6dd347300) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7ff6dd3473c0) 0 empty
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7ff6dd0f2de0) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7ff6dd0f2e40) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7ff6dd0f2d80) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7ff6dcec0240) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7ff6dcec0480) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7ff6dcec0660) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7ff6dceff5a0) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7ff6dcf495a0) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7ff6dcf97780) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7ff6dd02a060) 0 empty
+
+Vtable for QAbstractItemModel
+QAbstractItemModel::_ZTV18QAbstractItemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractItemModel)
+16 (int (*)(...))QAbstractItemModel::metaObject
+24 (int (*)(...))QAbstractItemModel::qt_metacast
+32 (int (*)(...))QAbstractItemModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractItemModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractItemModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractItemModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModel (0x0x7ff6dd01f618) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+ QObject (0x0x7ff6dd02a000) 0
+ primary-for QAbstractItemModel (0x0x7ff6dd01f618)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7ff6dcd30d20) 0 empty
+
+Vtable for QAbstractTableModel
+QAbstractTableModel::_ZTV19QAbstractTableModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractTableModel)
+16 (int (*)(...))QAbstractTableModel::metaObject
+24 (int (*)(...))QAbstractTableModel::qt_metacast
+32 (int (*)(...))QAbstractTableModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractTableModel::index
+120 (int (*)(...))QAbstractTableModel::parent
+128 (int (*)(...))QAbstractTableModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractTableModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractTableModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractTableModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractTableModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTableModel (0x0x7ff6dd01fea0) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+ QAbstractItemModel (0x0x7ff6dd01ff08) 0
+ primary-for QAbstractTableModel (0x0x7ff6dd01fea0)
+ QObject (0x0x7ff6dcd30cc0) 0
+ primary-for QAbstractItemModel (0x0x7ff6dd01ff08)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7ff6dcd30e40) 0 empty
+
+Vtable for QAbstractListModel
+QAbstractListModel::_ZTV18QAbstractListModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractListModel)
+16 (int (*)(...))QAbstractListModel::metaObject
+24 (int (*)(...))QAbstractListModel::qt_metacast
+32 (int (*)(...))QAbstractListModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QAbstractListModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractListModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractListModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractListModel (0x0x7ff6dd01ff70) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+ QAbstractItemModel (0x0x7ff6dd01fa28) 0
+ primary-for QAbstractListModel (0x0x7ff6dd01ff70)
+ QObject (0x0x7ff6dcd30de0) 0
+ primary-for QAbstractItemModel (0x0x7ff6dd01fa28)
+
+Vtable for QAbstractNativeEventFilter
+QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractNativeEventFilter)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractNativeEventFilter
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNativeEventFilter (0x0x7ff6dcdaa2a0) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7ff6dcdaa360) 0 empty
+
+Vtable for QAbstractProxyModel
+QAbstractProxyModel::_ZTV19QAbstractProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractProxyModel)
+16 (int (*)(...))QAbstractProxyModel::metaObject
+24 (int (*)(...))QAbstractProxyModel::qt_metacast
+32 (int (*)(...))QAbstractProxyModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractProxyModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QAbstractProxyModel::headerData
+184 (int (*)(...))QAbstractProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QAbstractProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QAbstractProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QAbstractProxyModel::setSourceModel
+416 (int (*)(...))__cxa_pure_virtual
+424 (int (*)(...))__cxa_pure_virtual
+432 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+440 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QAbstractProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractProxyModel (0x0x7ff6dcda83a8) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+ QAbstractItemModel (0x0x7ff6dcda8410) 0
+ primary-for QAbstractProxyModel (0x0x7ff6dcda83a8)
+ QObject (0x0x7ff6dcdaa300) 0
+ primary-for QAbstractItemModel (0x0x7ff6dcda8410)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7ff6dcdaa540) 0 empty
+
+Vtable for QAnimationGroup
+QAnimationGroup::_ZTV15QAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAnimationGroup)
+16 (int (*)(...))QAnimationGroup::metaObject
+24 (int (*)(...))QAnimationGroup::qt_metacast
+32 (int (*)(...))QAnimationGroup::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QAnimationGroup (0x0x7ff6dcda8478) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+ QAbstractAnimation (0x0x7ff6dcda84e0) 0
+ primary-for QAnimationGroup (0x0x7ff6dcda8478)
+ QObject (0x0x7ff6dcdaa4e0) 0
+ primary-for QAbstractAnimation (0x0x7ff6dcda84e0)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7ff6dcda8618) 0
+ QIterator<QMetaAssociation> (0x0x7ff6dcda8680) 0
+ QBaseIterator<QMetaAssociation> (0x0x7ff6dcdaa960) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7ff6dcda87b8) 0
+ QConstIterator<QMetaAssociation> (0x0x7ff6dcda8820) 0
+ QBaseIterator<QMetaAssociation> (0x0x7ff6dcdaaf00) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7ff6dcda88f0) 0
+ QIterable<QMetaAssociation> (0x0x7ff6dce1c420) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7ff6dcaf7f00) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7ff6dcb5bc60) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7ff6dcb88ba0) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7ff6dcbcf720) 0 empty
+
+Vtable for QIODevice
+QIODevice::_ZTV9QIODevice: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QIODevice)
+16 (int (*)(...))QIODevice::metaObject
+24 (int (*)(...))QIODevice::qt_metacast
+32 (int (*)(...))QIODevice::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIODevice::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QIODevice::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))__cxa_pure_virtual
+
+Class QIODevice
+ size=16 align=8
+ base size=16 base align=8
+QIODevice (0x0x7ff6dcae97e0) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+ QObject (0x0x7ff6dcbcf660) 0
+ primary-for QIODevice (0x0x7ff6dcae97e0)
+ QIODeviceBase (0x0x7ff6dcbcf6c0) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7ff6dcbcfa80) 0 empty
+
+Vtable for QBuffer
+QBuffer::_ZTV7QBuffer: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QBuffer)
+16 (int (*)(...))QBuffer::metaObject
+24 (int (*)(...))QBuffer::qt_metacast
+32 (int (*)(...))QBuffer::qt_metacall
+40 (int (*)(...))QBuffer::~QBuffer
+48 (int (*)(...))QBuffer::~QBuffer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QBuffer::connectNotify
+104 (int (*)(...))QBuffer::disconnectNotify
+112 (int (*)(...))QIODevice::isSequential
+120 (int (*)(...))QBuffer::open
+128 (int (*)(...))QBuffer::close
+136 (int (*)(...))QBuffer::pos
+144 (int (*)(...))QBuffer::size
+152 (int (*)(...))QBuffer::seek
+160 (int (*)(...))QBuffer::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QBuffer::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QBuffer::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QBuffer::writeData
+
+Class QBuffer
+ size=16 align=8
+ base size=16 base align=8
+QBuffer (0x0x7ff6dcbd1820) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+ QIODevice (0x0x7ff6dcae9850) 0
+ primary-for QBuffer (0x0x7ff6dcbd1820)
+ QObject (0x0x7ff6dcbcf9c0) 0
+ primary-for QIODevice (0x0x7ff6dcae9850)
+ QIODeviceBase (0x0x7ff6dcbcfa20) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7ff6dcbcfcc0) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7ff6dcbcfc60) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7ff6dcbcfe40) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7ff6dcbcfde0) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7ff6dc8745a0) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7ff6dc98c360) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7ff6dc98c300) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7ff6dc98c6c0) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7ff6dca14cc0) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7ff6dc65af00) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7ff6dc65af60) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7ff6dc65aea0) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7ff6dc6ff1e0) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7ff6dc6ffa20) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7ff6dc7adc00) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7ff6dc835420) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7ff6dc835480) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7ff6dc835660) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7ff6dc4c0360) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7ff6dc58bea0) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7ff6dc621060) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7ff6dc621120) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7ff6dc33c9c0) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7ff6dc36ef00) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7ff6dc36ef60) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7ff6dc36eea0) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7ff6dc082540) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7ff6dc0825a0) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7ff6dc0824e0) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7ff6dbe97600) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7ff6dbe975a0) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7ff6dbf59de0) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7ff6dbfb9780) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7ff6dbfe71e0) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7ff6dbfe73c0) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7ff6dbc90de0) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7ff6dbd196c0) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7ff6dbd19720) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7ff6dbd19780) 0 empty
+
+Vtable for QEvent
+QEvent::_ZTV6QEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QEvent)
+16 (int (*)(...))QEvent::~QEvent
+24 (int (*)(...))QEvent::~QEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QEvent
+ size=16 align=8
+ base size=16 base align=8
+QEvent (0x0x7ff6dbd19660) 0
+ vptr=((& QEvent::_ZTV6QEvent) + 16)
+
+Vtable for QTimerEvent
+QTimerEvent::_ZTV11QTimerEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTimerEvent)
+16 (int (*)(...))QTimerEvent::~QTimerEvent
+24 (int (*)(...))QTimerEvent::~QTimerEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QTimerEvent::clone
+
+Class QTimerEvent
+ size=24 align=8
+ base size=20 base align=8
+QTimerEvent (0x0x7ff6dbd15618) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+ QEvent (0x0x7ff6dbd74120) 0
+ primary-for QTimerEvent (0x0x7ff6dbd15618)
+
+Vtable for QChildEvent
+QChildEvent::_ZTV11QChildEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QChildEvent)
+16 (int (*)(...))QChildEvent::~QChildEvent
+24 (int (*)(...))QChildEvent::~QChildEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QChildEvent::clone
+
+Class QChildEvent
+ size=24 align=8
+ base size=24 base align=8
+QChildEvent (0x0x7ff6dbd15680) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+ QEvent (0x0x7ff6dbd74600) 0
+ primary-for QChildEvent (0x0x7ff6dbd15680)
+
+Vtable for QDynamicPropertyChangeEvent
+QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDynamicPropertyChangeEvent)
+16 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+24 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDynamicPropertyChangeEvent::clone
+
+Class QDynamicPropertyChangeEvent
+ size=40 align=8
+ base size=40 base align=8
+QDynamicPropertyChangeEvent (0x0x7ff6dbd156e8) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+ QEvent (0x0x7ff6dbd74a20) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7ff6dbd156e8)
+
+Vtable for QDeferredDeleteEvent
+QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDeferredDeleteEvent)
+16 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+24 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDeferredDeleteEvent::clone
+
+Class QDeferredDeleteEvent
+ size=24 align=8
+ base size=20 base align=8
+QDeferredDeleteEvent (0x0x7ff6dbd15750) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+ QEvent (0x0x7ff6dbd74cc0) 0
+ primary-for QDeferredDeleteEvent (0x0x7ff6dbd15750)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7ff6dbdac060) 0 empty
+
+Vtable for QCoreApplication
+QCoreApplication::_ZTV16QCoreApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QCoreApplication)
+16 (int (*)(...))QCoreApplication::metaObject
+24 (int (*)(...))QCoreApplication::qt_metacast
+32 (int (*)(...))QCoreApplication::qt_metacall
+40 (int (*)(...))QCoreApplication::~QCoreApplication
+48 (int (*)(...))QCoreApplication::~QCoreApplication
+56 (int (*)(...))QCoreApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCoreApplication::notify
+120 (int (*)(...))QCoreApplication::compressEvent
+
+Class QCoreApplication
+ size=16 align=8
+ base size=16 base align=8
+QCoreApplication (0x0x7ff6dbd157b8) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+ QObject (0x0x7ff6dbdac000) 0
+ primary-for QCoreApplication (0x0x7ff6dbd157b8)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7ff6dbdac240) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7ff6dbdac360) 0 empty
+
+Vtable for QConcatenateTablesProxyModel
+QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QConcatenateTablesProxyModel)
+16 (int (*)(...))QConcatenateTablesProxyModel::metaObject
+24 (int (*)(...))QConcatenateTablesProxyModel::qt_metacast
+32 (int (*)(...))QConcatenateTablesProxyModel::qt_metacall
+40 (int (*)(...))QConcatenateTablesProxyModel::~QConcatenateTablesProxyModel
+48 (int (*)(...))QConcatenateTablesProxyModel::~QConcatenateTablesProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QConcatenateTablesProxyModel::index
+120 (int (*)(...))QConcatenateTablesProxyModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QConcatenateTablesProxyModel::rowCount
+144 (int (*)(...))QConcatenateTablesProxyModel::columnCount
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))QConcatenateTablesProxyModel::data
+168 (int (*)(...))QConcatenateTablesProxyModel::setData
+176 (int (*)(...))QConcatenateTablesProxyModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QConcatenateTablesProxyModel::itemData
+200 (int (*)(...))QConcatenateTablesProxyModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QConcatenateTablesProxyModel::mimeTypes
+224 (int (*)(...))QConcatenateTablesProxyModel::mimeData
+232 (int (*)(...))QConcatenateTablesProxyModel::canDropMimeData
+240 (int (*)(...))QConcatenateTablesProxyModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QConcatenateTablesProxyModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QConcatenateTablesProxyModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QConcatenateTablesProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QConcatenateTablesProxyModel (0x0x7ff6dbd15820) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+ QAbstractItemModel (0x0x7ff6dbd15888) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7ff6dbd15820)
+ QObject (0x0x7ff6dbdac300) 0
+ primary-for QAbstractItemModel (0x0x7ff6dbd15888)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7ff6dbdac4e0) 0
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7ff6dbdac600) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7ff6dbdac900) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7ff6dbad9a20) 0 empty
+
+Vtable for QFileDevice
+QFileDevice::_ZTV11QFileDevice: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFileDevice)
+16 (int (*)(...))QFileDevice::metaObject
+24 (int (*)(...))QFileDevice::qt_metacast
+32 (int (*)(...))QFileDevice::qt_metacall
+40 (int (*)(...))QFileDevice::~QFileDevice
+48 (int (*)(...))QFileDevice::~QFileDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFileDevice::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QFileDevice::fileName
+256 (int (*)(...))QFileDevice::resize
+264 (int (*)(...))QFileDevice::permissions
+272 (int (*)(...))QFileDevice::setPermissions
+
+Class QFileDevice
+ size=16 align=8
+ base size=16 base align=8
+QFileDevice (0x0x7ff6dbadaa90) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+ QIODevice (0x0x7ff6dbdffd90) 0
+ primary-for QFileDevice (0x0x7ff6dbadaa90)
+ QObject (0x0x7ff6dbad9960) 0
+ primary-for QIODevice (0x0x7ff6dbdffd90)
+ QIODeviceBase (0x0x7ff6dbad99c0) 0 empty
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7ff6dbb3c5a0) 0 empty
+
+Vtable for QFile
+QFile::_ZTV5QFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QFile)
+16 (int (*)(...))QFile::metaObject
+24 (int (*)(...))QFile::qt_metacast
+32 (int (*)(...))QFile::qt_metacall
+40 (int (*)(...))QFile::~QFile
+48 (int (*)(...))QFile::~QFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QFile::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFile::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QFile::fileName
+256 (int (*)(...))QFile::resize
+264 (int (*)(...))QFile::permissions
+272 (int (*)(...))QFile::setPermissions
+
+Class QFile
+ size=16 align=8
+ base size=16 base align=8
+QFile (0x0x7ff6dbadaea0) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+ QFileDevice (0x0x7ff6dbadaf08) 0
+ primary-for QFile (0x0x7ff6dbadaea0)
+ QIODevice (0x0x7ff6dbaf0d20) 0
+ primary-for QFileDevice (0x0x7ff6dbadaf08)
+ QObject (0x0x7ff6dbb3c4e0) 0
+ primary-for QIODevice (0x0x7ff6dbaf0d20)
+ QIODeviceBase (0x0x7ff6dbb3c540) 0 empty
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7ff6dbb3c840) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7ff6dbc152a0) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7ff6db8ce540) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7ff6db8ce900) 0
+
+Vtable for QException
+QException::_ZTV10QException: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QException)
+16 (int (*)(...))QException::~QException
+24 (int (*)(...))QException::~QException
+32 (int (*)(...))std::exception::what
+40 (int (*)(...))QException::raise
+48 (int (*)(...))QException::clone
+
+Class QException
+ size=8 align=8
+ base size=8 base align=8
+QException (0x0x7ff6db99daf8) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+ std::exception (0x0x7ff6db9e3060) 0 nearly-empty
+ primary-for QException (0x0x7ff6db99daf8)
+
+Vtable for QUnhandledException
+QUnhandledException::_ZTV19QUnhandledException: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QUnhandledException)
+16 (int (*)(...))QUnhandledException::~QUnhandledException
+24 (int (*)(...))QUnhandledException::~QUnhandledException
+32 (int (*)(...))std::exception::what
+40 (int (*)(...))QUnhandledException::raise
+48 (int (*)(...))QUnhandledException::clone
+
+Class QUnhandledException
+ size=16 align=8
+ base size=16 base align=8
+QUnhandledException (0x0x7ff6db99db60) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+ QException (0x0x7ff6db99dbc8) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7ff6db99db60)
+ std::exception (0x0x7ff6db9e30c0) 0 nearly-empty
+ primary-for QException (0x0x7ff6db99dbc8)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7ff6db9e3f00) 0
+
+Vtable for QFactoryInterface
+QFactoryInterface::_ZTV17QFactoryInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFactoryInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QFactoryInterface
+ size=8 align=8
+ base size=8 base align=8
+QFactoryInterface (0x0x7ff6db9e3f60) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7ff6dba311e0) 0 empty
+
+Vtable for QFileSelector
+QFileSelector::_ZTV13QFileSelector: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QFileSelector)
+16 (int (*)(...))QFileSelector::metaObject
+24 (int (*)(...))QFileSelector::qt_metacast
+32 (int (*)(...))QFileSelector::qt_metacall
+40 (int (*)(...))QFileSelector::~QFileSelector
+48 (int (*)(...))QFileSelector::~QFileSelector
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSelector
+ size=16 align=8
+ base size=16 base align=8
+QFileSelector (0x0x7ff6dba1bdd0) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+ QObject (0x0x7ff6dba31180) 0
+ primary-for QFileSelector (0x0x7ff6dba1bdd0)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7ff6dba313c0) 0 empty
+
+Vtable for QFileSystemWatcher
+QFileSystemWatcher::_ZTV18QFileSystemWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFileSystemWatcher)
+16 (int (*)(...))QFileSystemWatcher::metaObject
+24 (int (*)(...))QFileSystemWatcher::qt_metacast
+32 (int (*)(...))QFileSystemWatcher::qt_metacall
+40 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+48 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSystemWatcher
+ size=16 align=8
+ base size=16 base align=8
+QFileSystemWatcher (0x0x7ff6dba1be38) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+ QObject (0x0x7ff6dba31360) 0
+ primary-for QFileSystemWatcher (0x0x7ff6dba1be38)
+
+Vtable for QRunnable
+QRunnable::_ZTV9QRunnable: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QRunnable)
+16 (int (*)(...))__cxa_pure_virtual
+24 0
+32 0
+
+Class QRunnable
+ size=16 align=8
+ base size=9 base align=8
+QRunnable (0x0x7ff6dba31540) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7ff6dba31720) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7ff6dba1bf08) 0
+ QBasicMutex (0x0x7ff6db6ac480) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7ff6db6ac8a0) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7ff6db6acea0) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7ff6db71d4e0) 0
+
+Vtable for QtPrivate::ResultStoreBase
+QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9QtPrivate15ResultStoreBaseE)
+16 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+24 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+
+Class QtPrivate::ResultStoreBase
+ size=48 align=8
+ base size=44 base align=8
+QtPrivate::ResultStoreBase (0x0x7ff6db44d180) 0
+ vptr=((& QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE) + 16)
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7ff6db47fba0) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7ff6db4921a0) 0
+ std::__mutex_base (0x0x7ff6db47fc00) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7ff6db47fde0) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7ff6db47fe40) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7ff6db47fea0) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7ff6db4ae8a0) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7ff6db492208) 0
+ std::__recursive_mutex_base (0x0x7ff6db4ae900) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7ff6db4715b0) 0
+ std::__mutex_base (0x0x7ff6db4aecc0) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7ff6db4aed20) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7ff6db471620) 0
+ std::__recursive_mutex_base (0x0x7ff6db4ea120) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7ff6db4ea180) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7ff6db4eaf60) 0
+
+Vtable for QFutureInterfaceBase
+QFutureInterfaceBase::_ZTV20QFutureInterfaceBase: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QFutureInterfaceBase)
+16 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+24 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+
+Class QFutureInterfaceBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureInterfaceBase (0x0x7ff6db5201e0) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Vtable for std::thread::_State
+std::thread::_State::_ZTVNSt6thread6_StateE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6thread6_StateE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class std::thread::_State
+ size=8 align=8
+ base size=8 base align=8
+std::thread::_State (0x0x7ff6db572120) 0 nearly-empty
+ vptr=((& std::thread::_State::_ZTVNSt6thread6_StateE) + 16)
+
+Class std::thread::id
+ size=8 align=8
+ base size=8 base align=8
+std::thread::id (0x0x7ff6db572180) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7ff6db5720c0) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7ff6db3523c0) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7ff6db352780) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7ff6db3527e0) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7ff6db400d80) 0 empty
+
+Vtable for std::future_error
+std::future_error::_ZTVSt12future_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12future_error)
+16 (int (*)(...))std::future_error::~future_error
+24 (int (*)(...))std::future_error::~future_error
+32 (int (*)(...))std::future_error::what
+
+Class std::future_error
+ size=32 align=8
+ base size=32 base align=8
+std::future_error (0x0x7ff6db402410) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+ std::logic_error (0x0x7ff6db402478) 0
+ primary-for std::future_error (0x0x7ff6db402410)
+ std::exception (0x0x7ff6db440480) 0 nearly-empty
+ primary-for std::logic_error (0x0x7ff6db402478)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7ff6db440ba0) 0 empty
+
+Vtable for std::__future_base::_Result_base
+std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base12_Result_baseE)
+16 (int (*)(...))__cxa_pure_virtual
+24 0
+32 0
+
+Class std::__future_base::_Result_base
+ size=16 align=8
+ base size=16 base align=8
+std::__future_base::_Result_base (0x0x7ff6db440b40) 0
+ vptr=((& std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE) + 16)
+
+Class std::__future_base::_State_baseV2::__exception_ptr_tag
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_State_baseV2::__exception_ptr_tag (0x0x7ff6db1b2600) 0 empty
+
+Class std::__future_base::_State_baseV2::_Make_ready
+ size=32 align=8
+ base size=32 base align=8
+std::__future_base::_State_baseV2::_Make_ready (0x0x7ff6db190c98) 0
+ std::__at_thread_exit_elt (0x0x7ff6db1b26c0) 0
+
+Vtable for std::__future_base::_State_baseV2
+std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base13_State_baseV2E)
+16 (int (*)(...))std::__future_base::_State_baseV2::~_State_baseV2
+24 (int (*)(...))std::__future_base::_State_baseV2::~_State_baseV2
+32 (int (*)(...))std::__future_base::_State_baseV2::_M_complete_async
+40 (int (*)(...))std::__future_base::_State_baseV2::_M_is_deferred_future
+
+Class std::__future_base::_State_baseV2
+ size=32 align=8
+ base size=28 base align=8
+std::__future_base::_State_baseV2 (0x0x7ff6db440d20) 0
+ vptr=((& std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E) + 16)
+
+Class std::__future_base
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base (0x0x7ff6db440ae0) 0 empty
+
+Vtable for std::__future_base::_Async_state_commonV2
+std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base21_Async_state_commonV2E)
+16 (int (*)(...))std::__future_base::_Async_state_commonV2::~_Async_state_commonV2
+24 (int (*)(...))std::__future_base::_Async_state_commonV2::~_Async_state_commonV2
+32 (int (*)(...))std::__future_base::_Async_state_commonV2::_M_complete_async
+40 (int (*)(...))std::__future_base::_State_baseV2::_M_is_deferred_future
+
+Class std::__future_base::_Async_state_commonV2
+ size=48 align=8
+ base size=44 base align=8
+std::__future_base::_Async_state_commonV2 (0x0x7ff6daabc000) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+ std::__future_base::_State_baseV2 (0x0x7ff6daab43c0) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7ff6daabc000)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7ff6daab4c60) 0 empty
+
+Vtable for QThread
+QThread::_ZTV7QThread: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QThread)
+16 (int (*)(...))QThread::metaObject
+24 (int (*)(...))QThread::qt_metacast
+32 (int (*)(...))QThread::qt_metacall
+40 (int (*)(...))QThread::~QThread
+48 (int (*)(...))QThread::~QThread
+56 (int (*)(...))QThread::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QThread::run
+
+Class QThread
+ size=16 align=8
+ base size=16 base align=8
+QThread (0x0x7ff6daabc340) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+ QObject (0x0x7ff6daab4c00) 0
+ primary-for QThread (0x0x7ff6daabc340)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7ff6daaef060) 0 empty
+
+Vtable for QThreadPool
+QThreadPool::_ZTV11QThreadPool: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QThreadPool)
+16 (int (*)(...))QThreadPool::metaObject
+24 (int (*)(...))QThreadPool::qt_metacast
+32 (int (*)(...))QThreadPool::qt_metacall
+40 (int (*)(...))QThreadPool::~QThreadPool
+48 (int (*)(...))QThreadPool::~QThreadPool
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QThreadPool
+ size=16 align=8
+ base size=16 base align=8
+QThreadPool (0x0x7ff6daabc3a8) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+ QObject (0x0x7ff6daaef000) 0
+ primary-for QThreadPool (0x0x7ff6daabc3a8)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7ff6da8b1780) 0 empty
+
+Vtable for QFutureWatcherBase
+QFutureWatcherBase::_ZTV18QFutureWatcherBase: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFutureWatcherBase)
+16 (int (*)(...))QFutureWatcherBase::metaObject
+24 (int (*)(...))QFutureWatcherBase::qt_metacast
+32 (int (*)(...))QFutureWatcherBase::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QFutureWatcherBase::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QFutureWatcherBase::connectNotify
+104 (int (*)(...))QFutureWatcherBase::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QFutureWatcherBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureWatcherBase (0x0x7ff6da888068) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+ QObject (0x0x7ff6da8b1720) 0
+ primary-for QFutureWatcherBase (0x0x7ff6da888068)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7ff6da8b1cc0) 0 empty
+
+Vtable for QIdentityProxyModel
+QIdentityProxyModel::_ZTV19QIdentityProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QIdentityProxyModel)
+16 (int (*)(...))QIdentityProxyModel::metaObject
+24 (int (*)(...))QIdentityProxyModel::qt_metacast
+32 (int (*)(...))QIdentityProxyModel::qt_metacall
+40 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+48 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIdentityProxyModel::index
+120 (int (*)(...))QIdentityProxyModel::parent
+128 (int (*)(...))QIdentityProxyModel::sibling
+136 (int (*)(...))QIdentityProxyModel::rowCount
+144 (int (*)(...))QIdentityProxyModel::columnCount
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QIdentityProxyModel::headerData
+184 (int (*)(...))QAbstractProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QIdentityProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QIdentityProxyModel::insertRows
+272 (int (*)(...))QIdentityProxyModel::insertColumns
+280 (int (*)(...))QIdentityProxyModel::removeRows
+288 (int (*)(...))QIdentityProxyModel::removeColumns
+296 (int (*)(...))QIdentityProxyModel::moveRows
+304 (int (*)(...))QIdentityProxyModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QAbstractProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QIdentityProxyModel::match
+360 (int (*)(...))QAbstractProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QIdentityProxyModel::setSourceModel
+416 (int (*)(...))QIdentityProxyModel::mapToSource
+424 (int (*)(...))QIdentityProxyModel::mapFromSource
+432 (int (*)(...))QIdentityProxyModel::mapSelectionToSource
+440 (int (*)(...))QIdentityProxyModel::mapSelectionFromSource
+
+Class QIdentityProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QIdentityProxyModel (0x0x7ff6da888270) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+ QAbstractProxyModel (0x0x7ff6da8882d8) 0
+ primary-for QIdentityProxyModel (0x0x7ff6da888270)
+ QAbstractItemModel (0x0x7ff6da888340) 0
+ primary-for QAbstractProxyModel (0x0x7ff6da8882d8)
+ QObject (0x0x7ff6da8b1c60) 0
+ primary-for QAbstractItemModel (0x0x7ff6da888340)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7ff6da8b1e40) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7ff6da93fa20) 0 empty
+
+Vtable for QItemSelectionModel
+QItemSelectionModel::_ZTV19QItemSelectionModel: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QItemSelectionModel)
+16 (int (*)(...))QItemSelectionModel::metaObject
+24 (int (*)(...))QItemSelectionModel::qt_metacast
+32 (int (*)(...))QItemSelectionModel::qt_metacall
+40 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+48 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QItemSelectionModel::setCurrentIndex
+120 (int (*)(...))QItemSelectionModel::select
+128 (int (*)(...))QItemSelectionModel::select
+136 (int (*)(...))QItemSelectionModel::clear
+144 (int (*)(...))QItemSelectionModel::reset
+152 (int (*)(...))QItemSelectionModel::clearCurrentIndex
+
+Class QItemSelectionModel
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionModel (0x0x7ff6da94c0d0) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+ QObject (0x0x7ff6da93f9c0) 0
+ primary-for QItemSelectionModel (0x0x7ff6da94c0d0)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7ff6da94c5b0) 0
+ QList<QItemSelectionRange> (0x0x7ff6da94c618) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7ff6da94c680) 0 empty
+ QListSpecialMethodsBase<QItemSelectionRange> (0x0x7ff6da997420) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7ff6daa2c120) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7ff6daa2c600) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7ff6da68b840) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7ff6da68b8a0) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7ff6da68b7e0) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7ff6da7382a0) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7ff6da738300) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7ff6da4cc840) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7ff6da4cc8a0) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7ff6da4cc7e0) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7ff6da5833c0) 0 empty
+
+Vtable for QLibrary
+QLibrary::_ZTV8QLibrary: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QLibrary)
+16 (int (*)(...))QLibrary::metaObject
+24 (int (*)(...))QLibrary::qt_metacast
+32 (int (*)(...))QLibrary::qt_metacall
+40 (int (*)(...))QLibrary::~QLibrary
+48 (int (*)(...))QLibrary::~QLibrary
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QLibrary
+ size=24 align=8
+ base size=24 base align=8
+QLibrary (0x0x7ff6da580750) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+ QObject (0x0x7ff6da583360) 0
+ primary-for QLibrary (0x0x7ff6da580750)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7ff6da5839c0) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7ff6da583960) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7ff6da29a180) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7ff6da2ef900) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7ff6da2ef9c0) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7ff6da36e060) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7ff6da3c0720) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7ff6da407d20) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7ff6da07d540) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7ff6da07d780) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7ff6da07d720) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7ff6da0c7660) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7ff6da16b0c0) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7ff6da1b4960) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7ff6da1b4a20) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7ff6da1b49c0) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7ff6da232c60) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7ff6da232c00) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7ff6d9e779c0) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7ff6d9e77960) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7ff6d9ea3060) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7ff6d9ea3000) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7ff6d9ec1ea0) 0 empty
+
+Vtable for QMimeData
+QMimeData::_ZTV9QMimeData: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QMimeData)
+16 (int (*)(...))QMimeData::metaObject
+24 (int (*)(...))QMimeData::qt_metacast
+32 (int (*)(...))QMimeData::qt_metacall
+40 (int (*)(...))QMimeData::~QMimeData
+48 (int (*)(...))QMimeData::~QMimeData
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QMimeData::hasFormat
+120 (int (*)(...))QMimeData::formats
+128 (int (*)(...))QMimeData::retrieveData
+
+Class QMimeData
+ size=16 align=8
+ base size=16 base align=8
+QMimeData (0x0x7ff6d9ed91a0) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+ QObject (0x0x7ff6d9ec1e40) 0
+ primary-for QMimeData (0x0x7ff6d9ed91a0)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7ff6d9ee8000) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7ff6d9f55a20) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7ff6d9f55ae0) 0 empty
+
+Vtable for QObjectCleanupHandler
+QObjectCleanupHandler::_ZTV21QObjectCleanupHandler: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QObjectCleanupHandler)
+16 (int (*)(...))QObjectCleanupHandler::metaObject
+24 (int (*)(...))QObjectCleanupHandler::qt_metacast
+32 (int (*)(...))QObjectCleanupHandler::qt_metacall
+40 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+48 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QObjectCleanupHandler
+ size=40 align=8
+ base size=40 base align=8
+QObjectCleanupHandler (0x0x7ff6d9f63068) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+ QObject (0x0x7ff6d9f55a80) 0
+ primary-for QObjectCleanupHandler (0x0x7ff6d9f63068)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7ff6d9f55ba0) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7ff6d9fb27e0) 0 empty
+
+Vtable for QParallelAnimationGroup
+QParallelAnimationGroup::_ZTV23QParallelAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QParallelAnimationGroup)
+16 (int (*)(...))QParallelAnimationGroup::metaObject
+24 (int (*)(...))QParallelAnimationGroup::qt_metacast
+32 (int (*)(...))QParallelAnimationGroup::qt_metacall
+40 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+48 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+56 (int (*)(...))QParallelAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QParallelAnimationGroup::duration
+120 (int (*)(...))QParallelAnimationGroup::updateCurrentTime
+128 (int (*)(...))QParallelAnimationGroup::updateState
+136 (int (*)(...))QParallelAnimationGroup::updateDirection
+
+Class QParallelAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QParallelAnimationGroup (0x0x7ff6d9fb4a90) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+ QAnimationGroup (0x0x7ff6d9fb4af8) 0
+ primary-for QParallelAnimationGroup (0x0x7ff6d9fb4a90)
+ QAbstractAnimation (0x0x7ff6d9fb4b60) 0
+ primary-for QAnimationGroup (0x0x7ff6d9fb4af8)
+ QObject (0x0x7ff6d9fb2780) 0
+ primary-for QAbstractAnimation (0x0x7ff6d9fb4b60)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7ff6d9fb29c0) 0 empty
+
+Vtable for QPauseAnimation
+QPauseAnimation::_ZTV15QPauseAnimation: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QPauseAnimation)
+16 (int (*)(...))QPauseAnimation::metaObject
+24 (int (*)(...))QPauseAnimation::qt_metacast
+32 (int (*)(...))QPauseAnimation::qt_metacall
+40 (int (*)(...))QPauseAnimation::~QPauseAnimation
+48 (int (*)(...))QPauseAnimation::~QPauseAnimation
+56 (int (*)(...))QPauseAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPauseAnimation::duration
+120 (int (*)(...))QPauseAnimation::updateCurrentTime
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QPauseAnimation
+ size=16 align=8
+ base size=16 base align=8
+QPauseAnimation (0x0x7ff6d9fb4bc8) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+ QAbstractAnimation (0x0x7ff6d9fb4c30) 0
+ primary-for QPauseAnimation (0x0x7ff6d9fb4bc8)
+ QObject (0x0x7ff6d9fb2960) 0
+ primary-for QAbstractAnimation (0x0x7ff6d9fb4c30)
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7ff6d9fe74e0) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7ff6d9fe7540) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7ff6da009f60) 0 empty
+
+Vtable for QPluginLoader
+QPluginLoader::_ZTV13QPluginLoader: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPluginLoader)
+16 (int (*)(...))QPluginLoader::metaObject
+24 (int (*)(...))QPluginLoader::qt_metacast
+32 (int (*)(...))QPluginLoader::qt_metacall
+40 (int (*)(...))QPluginLoader::~QPluginLoader
+48 (int (*)(...))QPluginLoader::~QPluginLoader
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPluginLoader
+ size=32 align=8
+ base size=25 base align=8
+QPluginLoader (0x0x7ff6da01c820) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+ QObject (0x0x7ff6da009f00) 0
+ primary-for QPluginLoader (0x0x7ff6da01c820)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7ff6da034060) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7ff6d9c95780) 0 empty
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7ff6d9c957e0) 0 empty
+
+Vtable for QProcess
+QProcess::_ZTV8QProcess: 32 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QProcess)
+16 (int (*)(...))QProcess::metaObject
+24 (int (*)(...))QProcess::qt_metacast
+32 (int (*)(...))QProcess::qt_metacall
+40 (int (*)(...))QProcess::~QProcess
+48 (int (*)(...))QProcess::~QProcess
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QProcess::isSequential
+120 (int (*)(...))QProcess::open
+128 (int (*)(...))QProcess::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QProcess::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QProcess::waitForReadyRead
+208 (int (*)(...))QProcess::waitForBytesWritten
+216 (int (*)(...))QProcess::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QProcess::writeData
+248 (int (*)(...))QProcess::setupChildProcess
+
+Class QProcess
+ size=16 align=8
+ base size=16 base align=8
+QProcess (0x0x7ff6d9c98888) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+ QIODevice (0x0x7ff6da008690) 0
+ primary-for QProcess (0x0x7ff6d9c98888)
+ QObject (0x0x7ff6d9c956c0) 0
+ primary-for QIODevice (0x0x7ff6da008690)
+ QIODeviceBase (0x0x7ff6d9c95720) 0 empty
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7ff6d9ce35a0) 0 empty
+
+Vtable for QVariantAnimation
+QVariantAnimation::_ZTV17QVariantAnimation: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QVariantAnimation)
+16 (int (*)(...))QVariantAnimation::metaObject
+24 (int (*)(...))QVariantAnimation::qt_metacast
+32 (int (*)(...))QVariantAnimation::qt_metacall
+40 (int (*)(...))QVariantAnimation::~QVariantAnimation
+48 (int (*)(...))QVariantAnimation::~QVariantAnimation
+56 (int (*)(...))QVariantAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QVariantAnimation::duration
+120 (int (*)(...))QVariantAnimation::updateCurrentTime
+128 (int (*)(...))QVariantAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+144 (int (*)(...))QVariantAnimation::updateCurrentValue
+152 (int (*)(...))QVariantAnimation::interpolated
+
+Class QVariantAnimation
+ size=16 align=8
+ base size=16 base align=8
+QVariantAnimation (0x0x7ff6d9c988f0) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+ QAbstractAnimation (0x0x7ff6d9c98958) 0
+ primary-for QVariantAnimation (0x0x7ff6d9c988f0)
+ QObject (0x0x7ff6d9ce3540) 0
+ primary-for QAbstractAnimation (0x0x7ff6d9c98958)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7ff6d9ce37e0) 0 empty
+
+Vtable for QPropertyAnimation
+QPropertyAnimation::_ZTV18QPropertyAnimation: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QPropertyAnimation)
+16 (int (*)(...))QPropertyAnimation::metaObject
+24 (int (*)(...))QPropertyAnimation::qt_metacast
+32 (int (*)(...))QPropertyAnimation::qt_metacall
+40 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+48 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+56 (int (*)(...))QPropertyAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QVariantAnimation::duration
+120 (int (*)(...))QVariantAnimation::updateCurrentTime
+128 (int (*)(...))QPropertyAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+144 (int (*)(...))QPropertyAnimation::updateCurrentValue
+152 (int (*)(...))QVariantAnimation::interpolated
+
+Class QPropertyAnimation
+ size=16 align=8
+ base size=16 base align=8
+QPropertyAnimation (0x0x7ff6d9c98a28) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+ QVariantAnimation (0x0x7ff6d9c98a90) 0
+ primary-for QPropertyAnimation (0x0x7ff6d9c98a28)
+ QAbstractAnimation (0x0x7ff6d9c98af8) 0
+ primary-for QVariantAnimation (0x0x7ff6d9c98a90)
+ QObject (0x0x7ff6d9ce3780) 0
+ primary-for QAbstractAnimation (0x0x7ff6d9c98af8)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7ff6d9d6ff00) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7ff6d9a873c0) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7ff6d9a87360) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7ff6d9c3db40) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7ff6d9660a80) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7ff6d9660a20) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7ff6d96c77b8) 0
+ QRandomGenerator (0x0x7ff6d96dcd20) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7ff6d9701960) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7ff6d9701ba0) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7ff6d976d0c0) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7ff6d976d5a0) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7ff6d97eb000) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7ff6d983f7e0) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7ff6d9517600) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7ff6d95f3180) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7ff6d95f3480) 0 empty
+
+Vtable for QSaveFile
+QSaveFile::_ZTV9QSaveFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSaveFile)
+16 (int (*)(...))QSaveFile::metaObject
+24 (int (*)(...))QSaveFile::qt_metacast
+32 (int (*)(...))QSaveFile::qt_metacall
+40 (int (*)(...))QSaveFile::~QSaveFile
+48 (int (*)(...))QSaveFile::~QSaveFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QSaveFile::open
+128 (int (*)(...))QSaveFile::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFileDevice::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QSaveFile::writeData
+248 (int (*)(...))QSaveFile::fileName
+256 (int (*)(...))QFileDevice::resize
+264 (int (*)(...))QFileDevice::permissions
+272 (int (*)(...))QFileDevice::setPermissions
+
+Class QSaveFile
+ size=16 align=8
+ base size=16 base align=8
+QSaveFile (0x0x7ff6d9582a28) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+ QFileDevice (0x0x7ff6d9582a90) 0
+ primary-for QSaveFile (0x0x7ff6d9582a28)
+ QIODevice (0x0x7ff6d97c2930) 0
+ primary-for QFileDevice (0x0x7ff6d9582a90)
+ QObject (0x0x7ff6d95f33c0) 0
+ primary-for QIODevice (0x0x7ff6d97c2930)
+ QIODeviceBase (0x0x7ff6d95f3420) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7ff6d95f3a80) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7ff6d927d2a0) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7ff6d92c7f60) 0 empty
+
+Vtable for QSequentialAnimationGroup
+QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QSequentialAnimationGroup)
+16 (int (*)(...))QSequentialAnimationGroup::metaObject
+24 (int (*)(...))QSequentialAnimationGroup::qt_metacast
+32 (int (*)(...))QSequentialAnimationGroup::qt_metacall
+40 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+48 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+56 (int (*)(...))QSequentialAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSequentialAnimationGroup::duration
+120 (int (*)(...))QSequentialAnimationGroup::updateCurrentTime
+128 (int (*)(...))QSequentialAnimationGroup::updateState
+136 (int (*)(...))QSequentialAnimationGroup::updateDirection
+
+Class QSequentialAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QSequentialAnimationGroup (0x0x7ff6d92de618) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+ QAnimationGroup (0x0x7ff6d92de680) 0
+ primary-for QSequentialAnimationGroup (0x0x7ff6d92de618)
+ QAbstractAnimation (0x0x7ff6d92de6e8) 0
+ primary-for QAnimationGroup (0x0x7ff6d92de680)
+ QObject (0x0x7ff6d92c7f00) 0
+ primary-for QAbstractAnimation (0x0x7ff6d92de6e8)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7ff6d92de820) 0
+ QIterator<QMetaSequence> (0x0x7ff6d92de888) 0
+ QBaseIterator<QMetaSequence> (0x0x7ff6d92f3300) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7ff6d92de958) 0
+ QConstIterator<QMetaSequence> (0x0x7ff6d92de9c0) 0
+ QBaseIterator<QMetaSequence> (0x0x7ff6d92f38a0) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7ff6d92dea28) 0
+ QIterable<QMetaSequence> (0x0x7ff6d92f3de0) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7ff6d94173c0) 0 empty
+
+Vtable for QSettings
+QSettings::_ZTV9QSettings: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSettings)
+16 (int (*)(...))QSettings::metaObject
+24 (int (*)(...))QSettings::qt_metacast
+32 (int (*)(...))QSettings::qt_metacall
+40 (int (*)(...))QSettings::~QSettings
+48 (int (*)(...))QSettings::~QSettings
+56 (int (*)(...))QSettings::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSettings
+ size=16 align=8
+ base size=16 base align=8
+QSettings (0x0x7ff6d9404e38) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+ QObject (0x0x7ff6d9417360) 0
+ primary-for QSettings (0x0x7ff6d9404e38)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7ff6d94177e0) 0 empty
+
+Vtable for QSharedMemory
+QSharedMemory::_ZTV13QSharedMemory: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSharedMemory)
+16 (int (*)(...))QSharedMemory::metaObject
+24 (int (*)(...))QSharedMemory::qt_metacast
+32 (int (*)(...))QSharedMemory::qt_metacall
+40 (int (*)(...))QSharedMemory::~QSharedMemory
+48 (int (*)(...))QSharedMemory::~QSharedMemory
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSharedMemory
+ size=16 align=8
+ base size=16 base align=8
+QSharedMemory (0x0x7ff6d9404ea0) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+ QObject (0x0x7ff6d9417780) 0
+ primary-for QSharedMemory (0x0x7ff6d9404ea0)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7ff6d94179c0) 0 empty
+
+Vtable for QSignalMapper
+QSignalMapper::_ZTV13QSignalMapper: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSignalMapper)
+16 (int (*)(...))QSignalMapper::metaObject
+24 (int (*)(...))QSignalMapper::qt_metacast
+32 (int (*)(...))QSignalMapper::qt_metacall
+40 (int (*)(...))QSignalMapper::~QSignalMapper
+48 (int (*)(...))QSignalMapper::~QSignalMapper
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSignalMapper
+ size=16 align=8
+ base size=16 base align=8
+QSignalMapper (0x0x7ff6d9404f08) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+ QObject (0x0x7ff6d9417960) 0
+ primary-for QSignalMapper (0x0x7ff6d9404f08)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7ff6d808d420) 0 empty
+
+Vtable for QSocketNotifier
+QSocketNotifier::_ZTV15QSocketNotifier: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSocketNotifier)
+16 (int (*)(...))QSocketNotifier::metaObject
+24 (int (*)(...))QSocketNotifier::qt_metacast
+32 (int (*)(...))QSocketNotifier::qt_metacall
+40 (int (*)(...))QSocketNotifier::~QSocketNotifier
+48 (int (*)(...))QSocketNotifier::~QSocketNotifier
+56 (int (*)(...))QSocketNotifier::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSocketNotifier
+ size=16 align=8
+ base size=16 base align=8
+QSocketNotifier (0x0x7ff6d83a9d68) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+ QObject (0x0x7ff6d808d3c0) 0
+ primary-for QSocketNotifier (0x0x7ff6d83a9d68)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7ff6d808d5a0) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7ff6d808dc60) 0 empty
+
+Vtable for QSortFilterProxyModel
+QSortFilterProxyModel::_ZTV21QSortFilterProxyModel: 59 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QSortFilterProxyModel)
+16 (int (*)(...))QSortFilterProxyModel::metaObject
+24 (int (*)(...))QSortFilterProxyModel::qt_metacast
+32 (int (*)(...))QSortFilterProxyModel::qt_metacall
+40 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+48 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSortFilterProxyModel::index
+120 (int (*)(...))QSortFilterProxyModel::parent
+128 (int (*)(...))QSortFilterProxyModel::sibling
+136 (int (*)(...))QSortFilterProxyModel::rowCount
+144 (int (*)(...))QSortFilterProxyModel::columnCount
+152 (int (*)(...))QSortFilterProxyModel::hasChildren
+160 (int (*)(...))QSortFilterProxyModel::data
+168 (int (*)(...))QSortFilterProxyModel::setData
+176 (int (*)(...))QSortFilterProxyModel::headerData
+184 (int (*)(...))QSortFilterProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QSortFilterProxyModel::mimeTypes
+224 (int (*)(...))QSortFilterProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QSortFilterProxyModel::dropMimeData
+248 (int (*)(...))QSortFilterProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QSortFilterProxyModel::insertRows
+272 (int (*)(...))QSortFilterProxyModel::insertColumns
+280 (int (*)(...))QSortFilterProxyModel::removeRows
+288 (int (*)(...))QSortFilterProxyModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QSortFilterProxyModel::fetchMore
+320 (int (*)(...))QSortFilterProxyModel::canFetchMore
+328 (int (*)(...))QSortFilterProxyModel::flags
+336 (int (*)(...))QSortFilterProxyModel::sort
+344 (int (*)(...))QSortFilterProxyModel::buddy
+352 (int (*)(...))QSortFilterProxyModel::match
+360 (int (*)(...))QSortFilterProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QSortFilterProxyModel::setSourceModel
+416 (int (*)(...))QSortFilterProxyModel::mapToSource
+424 (int (*)(...))QSortFilterProxyModel::mapFromSource
+432 (int (*)(...))QSortFilterProxyModel::mapSelectionToSource
+440 (int (*)(...))QSortFilterProxyModel::mapSelectionFromSource
+448 (int (*)(...))QSortFilterProxyModel::filterAcceptsRow
+456 (int (*)(...))QSortFilterProxyModel::filterAcceptsColumn
+464 (int (*)(...))QSortFilterProxyModel::lessThan
+
+Class QSortFilterProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QSortFilterProxyModel (0x0x7ff6d83a9dd0) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+ QAbstractProxyModel (0x0x7ff6d83a9e38) 0
+ primary-for QSortFilterProxyModel (0x0x7ff6d83a9dd0)
+ QAbstractItemModel (0x0x7ff6d83a9ea0) 0
+ primary-for QAbstractProxyModel (0x0x7ff6d83a9e38)
+ QObject (0x0x7ff6d808dc00) 0
+ primary-for QAbstractItemModel (0x0x7ff6d83a9ea0)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7ff6d80e0060) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7ff6d80e0960) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7ff6d8192300) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7ff6d81f7b40) 0 empty
+
+Vtable for QStringListModel
+QStringListModel::_ZTV16QStringListModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QStringListModel)
+16 (int (*)(...))QStringListModel::metaObject
+24 (int (*)(...))QStringListModel::qt_metacast
+32 (int (*)(...))QStringListModel::qt_metacall
+40 (int (*)(...))QStringListModel::~QStringListModel
+48 (int (*)(...))QStringListModel::~QStringListModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QStringListModel::sibling
+136 (int (*)(...))QStringListModel::rowCount
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))QStringListModel::data
+168 (int (*)(...))QStringListModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QStringListModel::itemData
+200 (int (*)(...))QStringListModel::setItemData
+208 (int (*)(...))QStringListModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QStringListModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStringListModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QStringListModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QStringListModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStringListModel::flags
+336 (int (*)(...))QStringListModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QStringListModel
+ size=40 align=8
+ base size=40 base align=8
+QStringListModel (0x0x7ff6d81ae9c0) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+ QAbstractListModel (0x0x7ff6d81aea28) 0
+ primary-for QStringListModel (0x0x7ff6d81ae9c0)
+ QAbstractItemModel (0x0x7ff6d81aea90) 0
+ primary-for QAbstractListModel (0x0x7ff6d81aea28)
+ QObject (0x0x7ff6d81f7ae0) 0
+ primary-for QAbstractItemModel (0x0x7ff6d81aea90)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7ff6d81f7c00) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7ff6d81f7cc0) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7ff6d81f7e40) 0 empty
+
+Vtable for QTemporaryFile
+QTemporaryFile::_ZTV14QTemporaryFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QTemporaryFile)
+16 (int (*)(...))QTemporaryFile::metaObject
+24 (int (*)(...))QTemporaryFile::qt_metacast
+32 (int (*)(...))QTemporaryFile::qt_metacall
+40 (int (*)(...))QTemporaryFile::~QTemporaryFile
+48 (int (*)(...))QTemporaryFile::~QTemporaryFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QTemporaryFile::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFile::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QTemporaryFile::fileName
+256 (int (*)(...))QFile::resize
+264 (int (*)(...))QFile::permissions
+272 (int (*)(...))QFile::setPermissions
+
+Class QTemporaryFile
+ size=16 align=8
+ base size=16 base align=8
+QTemporaryFile (0x0x7ff6d81aeaf8) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+ QFile (0x0x7ff6d81aeb60) 0
+ primary-for QTemporaryFile (0x0x7ff6d81aeaf8)
+ QFileDevice (0x0x7ff6d81aebc8) 0
+ primary-for QFile (0x0x7ff6d81aeb60)
+ QIODevice (0x0x7ff6d8197c40) 0
+ primary-for QFileDevice (0x0x7ff6d81aebc8)
+ QObject (0x0x7ff6d81f7d80) 0
+ primary-for QIODevice (0x0x7ff6d8197c40)
+ QIODeviceBase (0x0x7ff6d81f7de0) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7ff6d7e590c0) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7ff6d7e59660) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7ff6d7e59d20) 0 empty
+
+Vtable for QTimeLine
+QTimeLine::_ZTV9QTimeLine: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTimeLine)
+16 (int (*)(...))QTimeLine::metaObject
+24 (int (*)(...))QTimeLine::qt_metacast
+32 (int (*)(...))QTimeLine::qt_metacall
+40 (int (*)(...))QTimeLine::~QTimeLine
+48 (int (*)(...))QTimeLine::~QTimeLine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTimeLine::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTimeLine::valueForTime
+
+Class QTimeLine
+ size=16 align=8
+ base size=16 base align=8
+QTimeLine (0x0x7ff6d81aed68) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+ QObject (0x0x7ff6d7e59cc0) 0
+ primary-for QTimeLine (0x0x7ff6d81aed68)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7ff6d7e59f00) 0 empty
+
+Vtable for QTimer
+QTimer::_ZTV6QTimer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QTimer)
+16 (int (*)(...))QTimer::metaObject
+24 (int (*)(...))QTimer::qt_metacast
+32 (int (*)(...))QTimer::qt_metacall
+40 (int (*)(...))QTimer::~QTimer
+48 (int (*)(...))QTimer::~QTimer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTimer::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTimer
+ size=16 align=8
+ base size=16 base align=8
+QTimer (0x0x7ff6d81aedd0) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+ QObject (0x0x7ff6d7e59ea0) 0
+ primary-for QTimer (0x0x7ff6d81aedd0)
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7ff6d7ed2d20) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7ff6d7ed2cc0) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7ff6d7f63d80) 0 empty
+
+Vtable for QTranslator
+QTranslator::_ZTV11QTranslator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTranslator)
+16 (int (*)(...))QTranslator::metaObject
+24 (int (*)(...))QTranslator::qt_metacast
+32 (int (*)(...))QTranslator::qt_metacall
+40 (int (*)(...))QTranslator::~QTranslator
+48 (int (*)(...))QTranslator::~QTranslator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTranslator::translate
+120 (int (*)(...))QTranslator::isEmpty
+
+Class QTranslator
+ size=16 align=8
+ base size=16 base align=8
+QTranslator (0x0x7ff6d7f6caf8) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+ QObject (0x0x7ff6d7f63d20) 0
+ primary-for QTranslator (0x0x7ff6d7f6caf8)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7ff6d7f63f60) 0 empty
+
+Vtable for QTransposeProxyModel
+QTransposeProxyModel::_ZTV20QTransposeProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTransposeProxyModel)
+16 (int (*)(...))QTransposeProxyModel::metaObject
+24 (int (*)(...))QTransposeProxyModel::qt_metacast
+32 (int (*)(...))QTransposeProxyModel::qt_metacall
+40 (int (*)(...))QTransposeProxyModel::~QTransposeProxyModel
+48 (int (*)(...))QTransposeProxyModel::~QTransposeProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTransposeProxyModel::index
+120 (int (*)(...))QTransposeProxyModel::parent
+128 (int (*)(...))QAbstractProxyModel::sibling
+136 (int (*)(...))QTransposeProxyModel::rowCount
+144 (int (*)(...))QTransposeProxyModel::columnCount
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QTransposeProxyModel::headerData
+184 (int (*)(...))QTransposeProxyModel::setHeaderData
+192 (int (*)(...))QTransposeProxyModel::itemData
+200 (int (*)(...))QTransposeProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QAbstractProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QTransposeProxyModel::insertRows
+272 (int (*)(...))QTransposeProxyModel::insertColumns
+280 (int (*)(...))QTransposeProxyModel::removeRows
+288 (int (*)(...))QTransposeProxyModel::removeColumns
+296 (int (*)(...))QTransposeProxyModel::moveRows
+304 (int (*)(...))QTransposeProxyModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QTransposeProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QTransposeProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QTransposeProxyModel::setSourceModel
+416 (int (*)(...))QTransposeProxyModel::mapToSource
+424 (int (*)(...))QTransposeProxyModel::mapFromSource
+432 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+440 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QTransposeProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QTransposeProxyModel (0x0x7ff6d7f6cb60) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+ QAbstractProxyModel (0x0x7ff6d7f6cbc8) 0
+ primary-for QTransposeProxyModel (0x0x7ff6d7f6cb60)
+ QAbstractItemModel (0x0x7ff6d7f6cc30) 0
+ primary-for QAbstractProxyModel (0x0x7ff6d7f6cbc8)
+ QObject (0x0x7ff6d7f63f00) 0
+ primary-for QAbstractItemModel (0x0x7ff6d7f6cc30)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7ff6d7fa2120) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7ff6d7c5d900) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7ff6d7c5da20) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7ff6d7ca48a0) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7ff6d7cf0af8) 0
+ QList<QXmlStreamAttribute> (0x0x7ff6d7cf0b60) 0
+ QListSpecialMethods<QXmlStreamAttribute> (0x0x7ff6d7cf0bc8) 0 empty
+ QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7ff6d7cf29c0) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7ff6d7d63240) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7ff6d7d88900) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7ff6d7db3f60) 0
+
+Vtable for QXmlStreamEntityResolver
+QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QXmlStreamEntityResolver)
+16 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+24 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+32 (int (*)(...))QXmlStreamEntityResolver::resolveEntity
+40 (int (*)(...))QXmlStreamEntityResolver::resolveUndeclaredEntity
+
+Class QXmlStreamEntityResolver
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamEntityResolver (0x0x7ff6d7dfe720) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7ff6d7dfe780) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7ff6d7dfed20) 0
+
+Vtable for QPaintDevice
+QPaintDevice::_ZTV12QPaintDevice: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDevice
+ size=16 align=8
+ base size=10 base align=8
+QPaintDevice (0x0x7ff6d7dfef00) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7ff6d7a619c0) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7ff6d7b0c6c0) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7ff6d7b0c660) 0
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7ff6d7b9d720) 0
+
+Class QPolygon
+ size=24 align=8
+ base size=24 base align=8
+QPolygon (0x0x7ff6d78e4410) 0
+ QList<QPoint> (0x0x7ff6d78e4478) 0
+ QListSpecialMethods<QPoint> (0x0x7ff6d78e44e0) 0 empty
+ QListSpecialMethodsBase<QPoint> (0x0x7ff6d78e5420) 0 empty
+
+Class QPolygonF
+ size=24 align=8
+ base size=24 base align=8
+QPolygonF (0x0x7ff6dc0fcc98) 0
+ QList<QPointF> (0x0x7ff6dc0fcd00) 0
+ QListSpecialMethods<QPointF> (0x0x7ff6dc0fcd68) 0 empty
+ QListSpecialMethodsBase<QPointF> (0x0x7ff6da471de0) 0 empty
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7ff6e23d2e40) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7ff6e23d2d80) 0
+
+Class QTransform::Affine
+ size=8 align=8
+ base size=8 base align=8
+QTransform::Affine (0x0x7ff6e00513c0) 0
+
+Class QTransform
+ size=80 align=8
+ base size=74 base align=8
+QTransform (0x0x7ff6e00512a0) 0
+
+Vtable for QImage
+QImage::_ZTV6QImage: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QImage)
+16 (int (*)(...))QImage::~QImage
+24 (int (*)(...))QImage::~QImage
+32 (int (*)(...))QImage::devType
+40 (int (*)(...))QImage::paintEngine
+48 (int (*)(...))QImage::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QImage
+ size=24 align=8
+ base size=24 base align=8
+QImage (0x0x7ff6e223d5b0) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+ QPaintDevice (0x0x7ff6df60f5a0) 0
+ primary-for QImage (0x0x7ff6e223d5b0)
+
+Vtable for QPixmap
+QPixmap::_ZTV7QPixmap: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QPixmap)
+16 (int (*)(...))QPixmap::~QPixmap
+24 (int (*)(...))QPixmap::~QPixmap
+32 (int (*)(...))QPixmap::devType
+40 (int (*)(...))QPixmap::paintEngine
+48 (int (*)(...))QPixmap::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPixmap
+ size=24 align=8
+ base size=24 base align=8
+QPixmap (0x0x7ff6e1eb6f70) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+ QPaintDevice (0x0x7ff6dcb5ba80) 0
+ primary-for QPixmap (0x0x7ff6e1eb6f70)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7ff6dc421960) 0
+
+Vtable for QAbstractFileIconProvider
+QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAbstractFileIconProvider)
+16 (int (*)(...))QAbstractFileIconProvider::~QAbstractFileIconProvider
+24 (int (*)(...))QAbstractFileIconProvider::~QAbstractFileIconProvider
+32 (int (*)(...))QAbstractFileIconProvider::icon
+40 (int (*)(...))QAbstractFileIconProvider::icon
+48 (int (*)(...))QAbstractFileIconProvider::type
+56 (int (*)(...))QAbstractFileIconProvider::setOptions
+64 (int (*)(...))QAbstractFileIconProvider::options
+
+Class QAbstractFileIconProvider
+ size=16 align=8
+ base size=16 base align=8
+QAbstractFileIconProvider (0x0x7ff6db5cbe40) 0
+ vptr=((& QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider) + 16)
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7ff6db0779c0) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7ff6da997f00) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7ff6da3a1540) 0
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7ff6d798ce40) 0 empty
+
+Vtable for QScreen
+QScreen::_ZTV7QScreen: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QScreen)
+16 (int (*)(...))QScreen::metaObject
+24 (int (*)(...))QScreen::qt_metacast
+32 (int (*)(...))QScreen::qt_metacall
+40 (int (*)(...))QScreen::~QScreen
+48 (int (*)(...))QScreen::~QScreen
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QScreen
+ size=16 align=8
+ base size=16 base align=8
+QScreen (0x0x7ff6e1cc19c0) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+ QObject (0x0x7ff6d798cde0) 0
+ primary-for QScreen (0x0x7ff6e1cc19c0)
+
+Class QInputDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDevice::QPrivateSignal (0x0x7ff6d798c1e0) 0 empty
+
+Vtable for QInputDevice
+QInputDevice::_ZTV12QInputDevice: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputDevice)
+16 (int (*)(...))QInputDevice::metaObject
+24 (int (*)(...))QInputDevice::qt_metacast
+32 (int (*)(...))QInputDevice::qt_metacall
+40 (int (*)(...))QInputDevice::~QInputDevice
+48 (int (*)(...))QInputDevice::~QInputDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QInputDevice
+ size=16 align=8
+ base size=16 base align=8
+QInputDevice (0x0x7ff6e1cc1a28) 0
+ vptr=((& QInputDevice::_ZTV12QInputDevice) + 16)
+ QObject (0x0x7ff6d798c180) 0
+ primary-for QInputDevice (0x0x7ff6e1cc1a28)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7ff6dd0627e0) 0
+
+Class QPointingDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPointingDevice::QPrivateSignal (0x0x7ff6d7c1b180) 0 empty
+
+Vtable for QPointingDevice
+QPointingDevice::_ZTV15QPointingDevice: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QPointingDevice)
+16 (int (*)(...))QPointingDevice::metaObject
+24 (int (*)(...))QPointingDevice::qt_metacast
+32 (int (*)(...))QPointingDevice::qt_metacall
+40 (int (*)(...))QPointingDevice::~QPointingDevice
+48 (int (*)(...))QPointingDevice::~QPointingDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPointingDevice
+ size=16 align=8
+ base size=16 base align=8
+QPointingDevice (0x0x7ff6e1cc8a28) 0
+ vptr=((& QPointingDevice::_ZTV15QPointingDevice) + 16)
+ QInputDevice (0x0x7ff6e1cc8a90) 0
+ primary-for QPointingDevice (0x0x7ff6e1cc8a28)
+ QObject (0x0x7ff6d7c1b120) 0
+ primary-for QInputDevice (0x0x7ff6e1cc8a90)
+
+Class QEventPoint
+ size=8 align=8
+ base size=8 base align=8
+QEventPoint (0x0x7ff6d7c1b7e0) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7ff6da30e600) 0
+
+Vtable for QInputEvent
+QInputEvent::_ZTV11QInputEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QInputEvent)
+16 (int (*)(...))QInputEvent::~QInputEvent
+24 (int (*)(...))QInputEvent::~QInputEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QInputEvent
+ size=40 align=8
+ base size=40 base align=8
+QInputEvent (0x0x7ff6e1cea410) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+ QEvent (0x0x7ff6dbdf85a0) 0
+ primary-for QInputEvent (0x0x7ff6e1cea410)
+
+Vtable for QPointerEvent
+QPointerEvent::_ZTV13QPointerEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPointerEvent)
+16 (int (*)(...))QPointerEvent::~QPointerEvent
+24 (int (*)(...))QPointerEvent::~QPointerEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QPointerEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QPointerEvent::isBeginEvent
+64 (int (*)(...))QPointerEvent::isUpdateEvent
+72 (int (*)(...))QPointerEvent::isEndEvent
+
+Class QPointerEvent
+ size=64 align=8
+ base size=64 base align=8
+QPointerEvent (0x0x7ff6e1cea478) 0
+ vptr=((& QPointerEvent::_ZTV13QPointerEvent) + 16)
+ QInputEvent (0x0x7ff6e1cea4e0) 0
+ primary-for QPointerEvent (0x0x7ff6e1cea478)
+ QEvent (0x0x7ff6dbdf8a80) 0
+ primary-for QInputEvent (0x0x7ff6e1cea4e0)
+
+Vtable for QSinglePointEvent
+QSinglePointEvent::_ZTV17QSinglePointEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSinglePointEvent)
+16 (int (*)(...))QSinglePointEvent::~QSinglePointEvent
+24 (int (*)(...))QSinglePointEvent::~QSinglePointEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QSinglePointEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QSinglePointEvent
+ size=80 align=8
+ base size=80 base align=8
+QSinglePointEvent (0x0x7ff6e1ceac98) 0
+ vptr=((& QSinglePointEvent::_ZTV17QSinglePointEvent) + 16)
+ QPointerEvent (0x0x7ff6e1cead00) 0
+ primary-for QSinglePointEvent (0x0x7ff6e1ceac98)
+ QInputEvent (0x0x7ff6e1ceadd0) 0
+ primary-for QPointerEvent (0x0x7ff6e1cead00)
+ QEvent (0x0x7ff6def24960) 0
+ primary-for QInputEvent (0x0x7ff6e1ceadd0)
+
+Vtable for QEnterEvent
+QEnterEvent::_ZTV11QEnterEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QEnterEvent)
+16 (int (*)(...))QEnterEvent::~QEnterEvent
+24 (int (*)(...))QEnterEvent::~QEnterEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QEnterEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QEnterEvent (0x0x7ff6e1ceae38) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+ QSinglePointEvent (0x0x7ff6e1ceaea0) 0
+ primary-for QEnterEvent (0x0x7ff6e1ceae38)
+ QPointerEvent (0x0x7ff6e1ceaf08) 0
+ primary-for QSinglePointEvent (0x0x7ff6e1ceaea0)
+ QInputEvent (0x0x7ff6e1ceaf70) 0
+ primary-for QPointerEvent (0x0x7ff6e1ceaf08)
+ QEvent (0x0x7ff6def24e40) 0
+ primary-for QInputEvent (0x0x7ff6e1ceaf70)
+
+Vtable for QMouseEvent
+QMouseEvent::_ZTV11QMouseEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMouseEvent)
+16 (int (*)(...))QMouseEvent::~QMouseEvent
+24 (int (*)(...))QMouseEvent::~QMouseEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QMouseEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QMouseEvent
+ size=80 align=8
+ base size=80 base align=8
+QMouseEvent (0x0x7ff6e1cec000) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+ QSinglePointEvent (0x0x7ff6e1cec068) 0
+ primary-for QMouseEvent (0x0x7ff6e1cec000)
+ QPointerEvent (0x0x7ff6e1cec0d0) 0
+ primary-for QSinglePointEvent (0x0x7ff6e1cec068)
+ QInputEvent (0x0x7ff6e1cec138) 0
+ primary-for QPointerEvent (0x0x7ff6e1cec0d0)
+ QEvent (0x0x7ff6e2f01600) 0
+ primary-for QInputEvent (0x0x7ff6e1cec138)
+
+Vtable for QHoverEvent
+QHoverEvent::_ZTV11QHoverEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHoverEvent)
+16 (int (*)(...))QHoverEvent::~QHoverEvent
+24 (int (*)(...))QHoverEvent::~QHoverEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QHoverEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QHoverEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QHoverEvent
+ size=96 align=8
+ base size=96 base align=8
+QHoverEvent (0x0x7ff6e1cec208) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+ QSinglePointEvent (0x0x7ff6e1cec270) 0
+ primary-for QHoverEvent (0x0x7ff6e1cec208)
+ QPointerEvent (0x0x7ff6e1cec2d8) 0
+ primary-for QSinglePointEvent (0x0x7ff6e1cec270)
+ QInputEvent (0x0x7ff6e1cec340) 0
+ primary-for QPointerEvent (0x0x7ff6e1cec2d8)
+ QEvent (0x0x7ff6e2f01ba0) 0
+ primary-for QInputEvent (0x0x7ff6e1cec340)
+
+Vtable for QWheelEvent
+QWheelEvent::_ZTV11QWheelEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWheelEvent)
+16 (int (*)(...))QWheelEvent::~QWheelEvent
+24 (int (*)(...))QWheelEvent::~QWheelEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QWheelEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QWheelEvent::isBeginEvent
+64 (int (*)(...))QWheelEvent::isUpdateEvent
+72 (int (*)(...))QWheelEvent::isEndEvent
+
+Class QWheelEvent
+ size=96 align=8
+ base size=96 base align=8
+QWheelEvent (0x0x7ff6e1cec3a8) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+ QSinglePointEvent (0x0x7ff6e1cec410) 0
+ primary-for QWheelEvent (0x0x7ff6e1cec3a8)
+ QPointerEvent (0x0x7ff6e1cec478) 0
+ primary-for QSinglePointEvent (0x0x7ff6e1cec410)
+ QInputEvent (0x0x7ff6e1cec4e0) 0
+ primary-for QPointerEvent (0x0x7ff6e1cec478)
+ QEvent (0x0x7ff6e1bb3000) 0
+ primary-for QInputEvent (0x0x7ff6e1cec4e0)
+
+Vtable for QTabletEvent
+QTabletEvent::_ZTV12QTabletEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTabletEvent)
+16 (int (*)(...))QTabletEvent::~QTabletEvent
+24 (int (*)(...))QTabletEvent::~QTabletEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QTabletEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QTabletEvent
+ size=96 align=8
+ base size=96 base align=8
+QTabletEvent (0x0x7ff6e1cec548) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+ QSinglePointEvent (0x0x7ff6e1cec618) 0
+ primary-for QTabletEvent (0x0x7ff6e1cec548)
+ QPointerEvent (0x0x7ff6e1cec680) 0
+ primary-for QSinglePointEvent (0x0x7ff6e1cec618)
+ QInputEvent (0x0x7ff6e1cec6e8) 0
+ primary-for QPointerEvent (0x0x7ff6e1cec680)
+ QEvent (0x0x7ff6e1bb34e0) 0
+ primary-for QInputEvent (0x0x7ff6e1cec6e8)
+
+Vtable for QNativeGestureEvent
+QNativeGestureEvent::_ZTV19QNativeGestureEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNativeGestureEvent)
+16 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+24 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QNativeGestureEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QNativeGestureEvent
+ size=112 align=8
+ base size=112 base align=8
+QNativeGestureEvent (0x0x7ff6e1cec750) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+ QSinglePointEvent (0x0x7ff6e1cec7b8) 0
+ primary-for QNativeGestureEvent (0x0x7ff6e1cec750)
+ QPointerEvent (0x0x7ff6e1cec820) 0
+ primary-for QSinglePointEvent (0x0x7ff6e1cec7b8)
+ QInputEvent (0x0x7ff6e1cec8f0) 0
+ primary-for QPointerEvent (0x0x7ff6e1cec820)
+ QEvent (0x0x7ff6e1bb3d80) 0
+ primary-for QInputEvent (0x0x7ff6e1cec8f0)
+
+Vtable for QKeyEvent
+QKeyEvent::_ZTV9QKeyEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QKeyEvent)
+16 (int (*)(...))QKeyEvent::~QKeyEvent
+24 (int (*)(...))QKeyEvent::~QKeyEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QKeyEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QKeyEvent
+ size=88 align=8
+ base size=82 base align=8
+QKeyEvent (0x0x7ff6e1cec958) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+ QInputEvent (0x0x7ff6e1cec9c0) 0
+ primary-for QKeyEvent (0x0x7ff6e1cec958)
+ QEvent (0x0x7ff6e0b032a0) 0
+ primary-for QInputEvent (0x0x7ff6e1cec9c0)
+
+Vtable for QFocusEvent
+QFocusEvent::_ZTV11QFocusEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusEvent)
+16 (int (*)(...))QFocusEvent::~QFocusEvent
+24 (int (*)(...))QFocusEvent::~QFocusEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QFocusEvent::clone
+
+Class QFocusEvent
+ size=24 align=8
+ base size=20 base align=8
+QFocusEvent (0x0x7ff6e1ceca28) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+ QEvent (0x0x7ff6e0b038a0) 0
+ primary-for QFocusEvent (0x0x7ff6e1ceca28)
+
+Vtable for QPaintEvent
+QPaintEvent::_ZTV11QPaintEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPaintEvent)
+16 (int (*)(...))QPaintEvent::~QPaintEvent
+24 (int (*)(...))QPaintEvent::~QPaintEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QPaintEvent::clone
+
+Class QPaintEvent
+ size=48 align=8
+ base size=41 base align=8
+QPaintEvent (0x0x7ff6e1ceca90) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+ QEvent (0x0x7ff6e0b03c00) 0
+ primary-for QPaintEvent (0x0x7ff6e1ceca90)
+
+Vtable for QMoveEvent
+QMoveEvent::_ZTV10QMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QMoveEvent)
+16 (int (*)(...))QMoveEvent::~QMoveEvent
+24 (int (*)(...))QMoveEvent::~QMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QMoveEvent::clone
+
+Class QMoveEvent
+ size=32 align=8
+ base size=32 base align=8
+QMoveEvent (0x0x7ff6e1cecaf8) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+ QEvent (0x0x7ff6e0b03f00) 0
+ primary-for QMoveEvent (0x0x7ff6e1cecaf8)
+
+Vtable for QExposeEvent
+QExposeEvent::_ZTV12QExposeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QExposeEvent)
+16 (int (*)(...))QExposeEvent::~QExposeEvent
+24 (int (*)(...))QExposeEvent::~QExposeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QExposeEvent::clone
+
+Class QExposeEvent
+ size=24 align=8
+ base size=24 base align=8
+QExposeEvent (0x0x7ff6e1cecbc8) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+ QEvent (0x0x7ff6e07362a0) 0
+ primary-for QExposeEvent (0x0x7ff6e1cecbc8)
+
+Vtable for QPlatformSurfaceEvent
+QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QPlatformSurfaceEvent)
+16 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+24 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QPlatformSurfaceEvent::clone
+
+Class QPlatformSurfaceEvent
+ size=24 align=8
+ base size=20 base align=8
+QPlatformSurfaceEvent (0x0x7ff6e1cecc30) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+ QEvent (0x0x7ff6e0736540) 0
+ primary-for QPlatformSurfaceEvent (0x0x7ff6e1cecc30)
+
+Vtable for QResizeEvent
+QResizeEvent::_ZTV12QResizeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QResizeEvent)
+16 (int (*)(...))QResizeEvent::~QResizeEvent
+24 (int (*)(...))QResizeEvent::~QResizeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QResizeEvent::clone
+
+Class QResizeEvent
+ size=32 align=8
+ base size=32 base align=8
+QResizeEvent (0x0x7ff6e1cecc98) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+ QEvent (0x0x7ff6e0736840) 0
+ primary-for QResizeEvent (0x0x7ff6e1cecc98)
+
+Vtable for QCloseEvent
+QCloseEvent::_ZTV11QCloseEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QCloseEvent)
+16 (int (*)(...))QCloseEvent::~QCloseEvent
+24 (int (*)(...))QCloseEvent::~QCloseEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QCloseEvent
+ size=16 align=8
+ base size=16 base align=8
+QCloseEvent (0x0x7ff6e1cecd00) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+ QEvent (0x0x7ff6e0736ba0) 0
+ primary-for QCloseEvent (0x0x7ff6e1cecd00)
+
+Vtable for QIconDragEvent
+QIconDragEvent::_ZTV14QIconDragEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QIconDragEvent)
+16 (int (*)(...))QIconDragEvent::~QIconDragEvent
+24 (int (*)(...))QIconDragEvent::~QIconDragEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QIconDragEvent
+ size=16 align=8
+ base size=16 base align=8
+QIconDragEvent (0x0x7ff6e1cecd68) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+ QEvent (0x0x7ff6e0736c00) 0
+ primary-for QIconDragEvent (0x0x7ff6e1cecd68)
+
+Vtable for QShowEvent
+QShowEvent::_ZTV10QShowEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QShowEvent)
+16 (int (*)(...))QShowEvent::~QShowEvent
+24 (int (*)(...))QShowEvent::~QShowEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QShowEvent
+ size=16 align=8
+ base size=16 base align=8
+QShowEvent (0x0x7ff6e1cecdd0) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+ QEvent (0x0x7ff6e0736c60) 0
+ primary-for QShowEvent (0x0x7ff6e1cecdd0)
+
+Vtable for QHideEvent
+QHideEvent::_ZTV10QHideEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHideEvent)
+16 (int (*)(...))QHideEvent::~QHideEvent
+24 (int (*)(...))QHideEvent::~QHideEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QHideEvent
+ size=16 align=8
+ base size=16 base align=8
+QHideEvent (0x0x7ff6e1cecea0) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+ QEvent (0x0x7ff6e0736cc0) 0
+ primary-for QHideEvent (0x0x7ff6e1cecea0)
+
+Vtable for QContextMenuEvent
+QContextMenuEvent::_ZTV17QContextMenuEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QContextMenuEvent)
+16 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+24 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QContextMenuEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QContextMenuEvent
+ size=64 align=8
+ base size=57 base align=8
+QContextMenuEvent (0x0x7ff6e1cecf08) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+ QInputEvent (0x0x7ff6e1cecf70) 0
+ primary-for QContextMenuEvent (0x0x7ff6e1cecf08)
+ QEvent (0x0x7ff6e0736d20) 0
+ primary-for QInputEvent (0x0x7ff6e1cecf70)
+
+Class QInputMethodEvent::Attribute
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodEvent::Attribute (0x0x7ff6e0041300) 0
+
+Vtable for QInputMethodEvent
+QInputMethodEvent::_ZTV17QInputMethodEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QInputMethodEvent)
+16 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+24 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputMethodEvent::clone
+
+Class QInputMethodEvent
+ size=96 align=8
+ base size=96 base align=8
+QInputMethodEvent (0x0x7ff6e1ced000) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+ QEvent (0x0x7ff6e00412a0) 0
+ primary-for QInputMethodEvent (0x0x7ff6e1ced000)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=40 align=8
+ base size=40 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7ff6df76dae0) 0
+
+Vtable for QInputMethodQueryEvent
+QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QInputMethodQueryEvent)
+16 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+24 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputMethodQueryEvent::clone
+
+Class QInputMethodQueryEvent
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodQueryEvent (0x0x7ff6e1cf22d8) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+ QEvent (0x0x7ff6df76da80) 0
+ primary-for QInputMethodQueryEvent (0x0x7ff6e1cf22d8)
+
+Vtable for QDropEvent
+QDropEvent::_ZTV10QDropEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDropEvent)
+16 (int (*)(...))QDropEvent::~QDropEvent
+24 (int (*)(...))QDropEvent::~QDropEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDropEvent::clone
+
+Class QDropEvent
+ size=64 align=8
+ base size=64 base align=8
+QDropEvent (0x0x7ff6e1cf7478) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+ QEvent (0x0x7ff6df01ac00) 0
+ primary-for QDropEvent (0x0x7ff6e1cf7478)
+
+Vtable for QDragMoveEvent
+QDragMoveEvent::_ZTV14QDragMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDragMoveEvent)
+16 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+24 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDragMoveEvent::clone
+
+Class QDragMoveEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragMoveEvent (0x0x7ff6e1cf74e0) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+ QDropEvent (0x0x7ff6e1cf75b0) 0
+ primary-for QDragMoveEvent (0x0x7ff6e1cf74e0)
+ QEvent (0x0x7ff6de3d7360) 0
+ primary-for QDropEvent (0x0x7ff6e1cf75b0)
+
+Vtable for QDragEnterEvent
+QDragEnterEvent::_ZTV15QDragEnterEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragEnterEvent)
+16 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+24 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDragMoveEvent::clone
+
+Class QDragEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragEnterEvent (0x0x7ff6e1cf7618) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+ QDragMoveEvent (0x0x7ff6e1cf7680) 0
+ primary-for QDragEnterEvent (0x0x7ff6e1cf7618)
+ QDropEvent (0x0x7ff6e1cf76e8) 0
+ primary-for QDragMoveEvent (0x0x7ff6e1cf7680)
+ QEvent (0x0x7ff6de3d77e0) 0
+ primary-for QDropEvent (0x0x7ff6e1cf76e8)
+
+Vtable for QDragLeaveEvent
+QDragLeaveEvent::_ZTV15QDragLeaveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragLeaveEvent)
+16 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+24 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QDragLeaveEvent
+ size=16 align=8
+ base size=16 base align=8
+QDragLeaveEvent (0x0x7ff6e1cf7750) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+ QEvent (0x0x7ff6de3d7840) 0
+ primary-for QDragLeaveEvent (0x0x7ff6e1cf7750)
+
+Vtable for QHelpEvent
+QHelpEvent::_ZTV10QHelpEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHelpEvent)
+16 (int (*)(...))QHelpEvent::~QHelpEvent
+24 (int (*)(...))QHelpEvent::~QHelpEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QHelpEvent::clone
+
+Class QHelpEvent
+ size=32 align=8
+ base size=32 base align=8
+QHelpEvent (0x0x7ff6e1cf77b8) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+ QEvent (0x0x7ff6de3d78a0) 0
+ primary-for QHelpEvent (0x0x7ff6e1cf77b8)
+
+Vtable for QStatusTipEvent
+QStatusTipEvent::_ZTV15QStatusTipEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QStatusTipEvent)
+16 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+24 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QStatusTipEvent::clone
+
+Class QStatusTipEvent
+ size=40 align=8
+ base size=40 base align=8
+QStatusTipEvent (0x0x7ff6e1cf7820) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+ QEvent (0x0x7ff6de3d7d80) 0
+ primary-for QStatusTipEvent (0x0x7ff6e1cf7820)
+
+Vtable for QWhatsThisClickedEvent
+QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QWhatsThisClickedEvent)
+16 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+24 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QWhatsThisClickedEvent::clone
+
+Class QWhatsThisClickedEvent
+ size=40 align=8
+ base size=40 base align=8
+QWhatsThisClickedEvent (0x0x7ff6e1cf7888) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+ QEvent (0x0x7ff6dd78c060) 0
+ primary-for QWhatsThisClickedEvent (0x0x7ff6e1cf7888)
+
+Vtable for QActionEvent
+QActionEvent::_ZTV12QActionEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionEvent)
+16 (int (*)(...))QActionEvent::~QActionEvent
+24 (int (*)(...))QActionEvent::~QActionEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QActionEvent::clone
+
+Class QActionEvent
+ size=32 align=8
+ base size=32 base align=8
+QActionEvent (0x0x7ff6e1cf7958) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+ QEvent (0x0x7ff6dd78c300) 0
+ primary-for QActionEvent (0x0x7ff6e1cf7958)
+
+Vtable for QFileOpenEvent
+QFileOpenEvent::_ZTV14QFileOpenEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QFileOpenEvent)
+16 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+24 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QFileOpenEvent::clone
+
+Class QFileOpenEvent
+ size=48 align=8
+ base size=48 base align=8
+QFileOpenEvent (0x0x7ff6e1cf79c0) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+ QEvent (0x0x7ff6dd78c660) 0
+ primary-for QFileOpenEvent (0x0x7ff6e1cf79c0)
+
+Vtable for QToolBarChangeEvent
+QToolBarChangeEvent::_ZTV19QToolBarChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QToolBarChangeEvent)
+16 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+24 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QToolBarChangeEvent::clone
+
+Class QToolBarChangeEvent
+ size=24 align=8
+ base size=17 base align=8
+QToolBarChangeEvent (0x0x7ff6e1cf7a28) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+ QEvent (0x0x7ff6dd78c960) 0
+ primary-for QToolBarChangeEvent (0x0x7ff6e1cf7a28)
+
+Vtable for QShortcutEvent
+QShortcutEvent::_ZTV14QShortcutEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QShortcutEvent)
+16 (int (*)(...))QShortcutEvent::~QShortcutEvent
+24 (int (*)(...))QShortcutEvent::~QShortcutEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QShortcutEvent::clone
+
+Class QShortcutEvent
+ size=32 align=8
+ base size=29 base align=8
+QShortcutEvent (0x0x7ff6e1cf7a90) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+ QEvent (0x0x7ff6dd78cc60) 0
+ primary-for QShortcutEvent (0x0x7ff6e1cf7a90)
+
+Vtable for QWindowStateChangeEvent
+QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QWindowStateChangeEvent)
+16 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+24 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QWindowStateChangeEvent::clone
+
+Class QWindowStateChangeEvent
+ size=24 align=8
+ base size=21 base align=8
+QWindowStateChangeEvent (0x0x7ff6e1cf7af8) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+ QEvent (0x0x7ff6dd2a3000) 0
+ primary-for QWindowStateChangeEvent (0x0x7ff6e1cf7af8)
+
+Vtable for QTouchEvent
+QTouchEvent::_ZTV11QTouchEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTouchEvent)
+16 (int (*)(...))QTouchEvent::~QTouchEvent
+24 (int (*)(...))QTouchEvent::~QTouchEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QTouchEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QTouchEvent::isBeginEvent
+64 (int (*)(...))QTouchEvent::isUpdateEvent
+72 (int (*)(...))QTouchEvent::isEndEvent
+
+Class QTouchEvent
+ size=80 align=8
+ base size=79 base align=8
+QTouchEvent (0x0x7ff6e1cf7b60) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+ QPointerEvent (0x0x7ff6e1cf7bc8) 0
+ primary-for QTouchEvent (0x0x7ff6e1cf7b60)
+ QInputEvent (0x0x7ff6e1cf7c30) 0
+ primary-for QPointerEvent (0x0x7ff6e1cf7bc8)
+ QEvent (0x0x7ff6dd2a3300) 0
+ primary-for QInputEvent (0x0x7ff6e1cf7c30)
+
+Vtable for QScrollPrepareEvent
+QScrollPrepareEvent::_ZTV19QScrollPrepareEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollPrepareEvent)
+16 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+24 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScrollPrepareEvent::clone
+
+Class QScrollPrepareEvent
+ size=96 align=8
+ base size=96 base align=8
+QScrollPrepareEvent (0x0x7ff6e1cf7c98) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+ QEvent (0x0x7ff6dd2a3660) 0
+ primary-for QScrollPrepareEvent (0x0x7ff6e1cf7c98)
+
+Vtable for QScrollEvent
+QScrollEvent::_ZTV12QScrollEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QScrollEvent)
+16 (int (*)(...))QScrollEvent::~QScrollEvent
+24 (int (*)(...))QScrollEvent::~QScrollEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScrollEvent::clone
+
+Class QScrollEvent
+ size=56 align=8
+ base size=52 base align=8
+QScrollEvent (0x0x7ff6e1cf7d00) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+ QEvent (0x0x7ff6dd2a3a80) 0
+ primary-for QScrollEvent (0x0x7ff6e1cf7d00)
+
+Vtable for QScreenOrientationChangeEvent
+QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QScreenOrientationChangeEvent)
+16 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+24 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScreenOrientationChangeEvent::clone
+
+Class QScreenOrientationChangeEvent
+ size=32 align=8
+ base size=28 base align=8
+QScreenOrientationChangeEvent (0x0x7ff6e1cf7dd0) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+ QEvent (0x0x7ff6dd2a3e40) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7ff6e1cf7dd0)
+
+Vtable for QApplicationStateChangeEvent
+QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QApplicationStateChangeEvent)
+16 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+24 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QApplicationStateChangeEvent::clone
+
+Class QApplicationStateChangeEvent
+ size=24 align=8
+ base size=20 base align=8
+QApplicationStateChangeEvent (0x0x7ff6e1cf7e38) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+ QEvent (0x0x7ff6dcf5b1e0) 0
+ primary-for QApplicationStateChangeEvent (0x0x7ff6e1cf7e38)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7ff6dcf5b4e0) 0
+
+Class QFontDatabase
+ size=1 align=1
+ base size=0 base align=1
+QFontDatabase (0x0x7ff6dc62d540) 0 empty
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7ff6dc62d720) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7ff6dbeaa600) 0
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7ff6db940cc0) 0
+
+Class QBrushData
+ size=104 align=8
+ base size=104 base align=8
+QBrushData (0x0x7ff6da5db840) 0
+
+Class QGradient::QGradientData
+ size=48 align=8
+ base size=48 base align=8
+QGradient::QGradientData (0x0x7ff6da5dba80) 0
+
+Class QGradient
+ size=88 align=8
+ base size=88 base align=8
+QGradient (0x0x7ff6da5dba20) 0
+
+Class QLinearGradient
+ size=88 align=8
+ base size=88 base align=8
+QLinearGradient (0x0x7ff6e1dfaf70) 0
+ QGradient (0x0x7ff6da0f4960) 0
+
+Class QRadialGradient
+ size=88 align=8
+ base size=88 base align=8
+QRadialGradient (0x0x7ff6e1dfc000) 0
+ QGradient (0x0x7ff6da0f4a80) 0
+
+Class QConicalGradient
+ size=88 align=8
+ base size=88 base align=8
+QConicalGradient (0x0x7ff6e1dfc068) 0
+ QGradient (0x0x7ff6da0f4ba0) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7ff6da0f4c60) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7ff6d7b50cc0) 0
+
+Class QTextOption
+ size=24 align=8
+ base size=24 base align=8
+QTextOption (0x0x7ff6d7b50c60) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7ff6d7885a20) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7ff6dcc79720) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7ff6e1e16ea0) 0
+ QTextFormat (0x0x7ff6dd8a0d80) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7ff6e1e20ea0) 0
+ QTextFormat (0x0x7ff6dbfc00c0) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7ff6e1e25ea0) 0
+ QTextFormat (0x0x7ff6db33b600) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7ff6e1e28dd0) 0
+ QTextCharFormat (0x0x7ff6e1e28ea0) 0
+ QTextFormat (0x0x7ff6da6944e0) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7ff6e1e2ddd0) 0
+ QTextFormat (0x0x7ff6da110360) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7ff6e1e32c30) 0
+ QTextFrameFormat (0x0x7ff6e1e32c98) 0
+ QTextFormat (0x0x7ff6d937a780) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7ff6e1e39c30) 0
+ QTextCharFormat (0x0x7ff6e1e39c98) 0
+ QTextFormat (0x0x7ff6de107a20) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7ff6df6d6f60) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7ff6d801a600) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7ff6d801aa20) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7ff6d801a9c0) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7ff6d87b1ae0) 0
+
+Vtable for QAbstractUndoItem
+QAbstractUndoItem::_ZTV17QAbstractUndoItem: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAbstractUndoItem)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractUndoItem
+ size=8 align=8
+ base size=8 base align=8
+QAbstractUndoItem (0x0x7ff6d87b1f60) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7ff6e6abd240) 0 empty
+
+Vtable for QTextDocument
+QTextDocument::_ZTV13QTextDocument: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QTextDocument)
+16 (int (*)(...))QTextDocument::metaObject
+24 (int (*)(...))QTextDocument::qt_metacast
+32 (int (*)(...))QTextDocument::qt_metacall
+40 (int (*)(...))QTextDocument::~QTextDocument
+48 (int (*)(...))QTextDocument::~QTextDocument
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextDocument::clear
+120 (int (*)(...))QTextDocument::createObject
+128 (int (*)(...))QTextDocument::loadResource
+
+Class QTextDocument
+ size=16 align=8
+ base size=16 base align=8
+QTextDocument (0x0x7ff6e050a5b0) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+ QObject (0x0x7ff6e6abd1e0) 0
+ primary-for QTextDocument (0x0x7ff6e050a5b0)
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7ff6e6abda20) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7ff6d7c0dd80) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7ff6d7c0dde0) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=80 align=8
+ base size=80 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7ff6d7c0de40) 0
+
+Vtable for QAbstractTextDocumentLayout
+QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAbstractTextDocumentLayout)
+16 (int (*)(...))QAbstractTextDocumentLayout::metaObject
+24 (int (*)(...))QAbstractTextDocumentLayout::qt_metacast
+32 (int (*)(...))QAbstractTextDocumentLayout::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractTextDocumentLayout::resizeInlineObject
+176 (int (*)(...))QAbstractTextDocumentLayout::positionInlineObject
+184 (int (*)(...))QAbstractTextDocumentLayout::drawInlineObject
+
+Class QAbstractTextDocumentLayout
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTextDocumentLayout (0x0x7ff6dcbb52d8) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+ QObject (0x0x7ff6d7c0dd20) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7ff6dcbb52d8)
+
+Vtable for QTextObjectInterface
+QTextObjectInterface::_ZTV20QTextObjectInterface: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextObjectInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QTextObjectInterface
+ size=8 align=8
+ base size=8 base align=8
+QTextObjectInterface (0x0x7ff6d79e6420) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7ff6d79e6660) 0
+
+Vtable for QAccessible::ActivationObserver
+QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN11QAccessible18ActivationObserverE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessible::ActivationObserver
+ size=8 align=8
+ base size=8 base align=8
+QAccessible::ActivationObserver (0x0x7ff6d79e66c0) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7ff6d79e6600) 0 empty
+
+Vtable for QAccessibleInterface
+QAccessibleInterface::_ZTV20QAccessibleInterface: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAccessibleInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QAccessibleInterface::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleInterface::focusChild
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleInterface (0x0x7ff6d79e6f00) 0 nearly-empty
+ vptr=((& QAccessibleInterface::_ZTV20QAccessibleInterface) + 16)
+
+Vtable for QAccessibleTextInterface
+QAccessibleTextInterface::_ZTV24QAccessibleTextInterface: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAccessibleTextInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))QAccessibleTextInterface::textBeforeOffset
+104 (int (*)(...))QAccessibleTextInterface::textAfterOffset
+112 (int (*)(...))QAccessibleTextInterface::textAtOffset
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTextInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTextInterface (0x0x7ff6d7a112a0) 0 nearly-empty
+ vptr=((& QAccessibleTextInterface::_ZTV24QAccessibleTextInterface) + 16)
+
+Vtable for QAccessibleEditableTextInterface
+QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleEditableTextInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleEditableTextInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleEditableTextInterface (0x0x7ff6d7a11300) 0 nearly-empty
+ vptr=((& QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface) + 16)
+
+Vtable for QAccessibleValueInterface
+QAccessibleValueInterface::_ZTV25QAccessibleValueInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleValueInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleValueInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleValueInterface (0x0x7ff6d7a11360) 0 nearly-empty
+ vptr=((& QAccessibleValueInterface::_ZTV25QAccessibleValueInterface) + 16)
+
+Vtable for QAccessibleTableCellInterface
+QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTableCellInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTableCellInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTableCellInterface (0x0x7ff6d7a113c0) 0 nearly-empty
+ vptr=((& QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface) + 16)
+
+Vtable for QAccessibleTableInterface
+QAccessibleTableInterface::_ZTV25QAccessibleTableInterface: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleTableInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTableInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTableInterface (0x0x7ff6d7a11420) 0 nearly-empty
+ vptr=((& QAccessibleTableInterface::_ZTV25QAccessibleTableInterface) + 16)
+
+Vtable for QAccessibleActionInterface
+QAccessibleActionInterface::_ZTV26QAccessibleActionInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleActionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QAccessibleActionInterface::localizedActionName
+48 (int (*)(...))QAccessibleActionInterface::localizedActionDescription
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleActionInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleActionInterface (0x0x7ff6d7a11480) 0 nearly-empty
+ vptr=((& QAccessibleActionInterface::_ZTV26QAccessibleActionInterface) + 16)
+
+Vtable for QAccessibleImageInterface
+QAccessibleImageInterface::_ZTV25QAccessibleImageInterface: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleImageInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleImageInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleImageInterface (0x0x7ff6d7a11540) 0 nearly-empty
+ vptr=((& QAccessibleImageInterface::_ZTV25QAccessibleImageInterface) + 16)
+
+Vtable for QAccessibleEvent
+QAccessibleEvent::_ZTV16QAccessibleEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAccessibleEvent)
+16 (int (*)(...))QAccessibleEvent::~QAccessibleEvent
+24 (int (*)(...))QAccessibleEvent::~QAccessibleEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleEvent
+ size=32 align=8
+ base size=28 base align=8
+QAccessibleEvent (0x0x7ff6d7a115a0) 0
+ vptr=((& QAccessibleEvent::_ZTV16QAccessibleEvent) + 16)
+
+Vtable for QAccessibleStateChangeEvent
+QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleStateChangeEvent)
+16 (int (*)(...))QAccessibleStateChangeEvent::~QAccessibleStateChangeEvent
+24 (int (*)(...))QAccessibleStateChangeEvent::~QAccessibleStateChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleStateChangeEvent
+ size=40 align=8
+ base size=40 base align=8
+QAccessibleStateChangeEvent (0x0x7ff6dbabfea0) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+ QAccessibleEvent (0x0x7ff6d7a11ae0) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7ff6dbabfea0)
+
+Vtable for QAccessibleTextCursorEvent
+QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextCursorEvent)
+16 (int (*)(...))QAccessibleTextCursorEvent::~QAccessibleTextCursorEvent
+24 (int (*)(...))QAccessibleTextCursorEvent::~QAccessibleTextCursorEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextCursorEvent
+ size=32 align=8
+ base size=32 base align=8
+QAccessibleTextCursorEvent (0x0x7ff6dbabff08) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+ QAccessibleEvent (0x0x7ff6d7a11ea0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7ff6dbabff08)
+
+Vtable for QAccessibleTextSelectionEvent
+QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTextSelectionEvent)
+16 (int (*)(...))QAccessibleTextSelectionEvent::~QAccessibleTextSelectionEvent
+24 (int (*)(...))QAccessibleTextSelectionEvent::~QAccessibleTextSelectionEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextSelectionEvent
+ size=40 align=8
+ base size=40 base align=8
+QAccessibleTextSelectionEvent (0x0x7ff6dbada888) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7ff6dbada8f0) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7ff6dbada888)
+ QAccessibleEvent (0x0x7ff6d7a2f300) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7ff6dbada8f0)
+
+Vtable for QAccessibleTextInsertEvent
+QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextInsertEvent)
+16 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+24 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextInsertEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleTextInsertEvent (0x0x7ff6dbbcc8f0) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7ff6dbbcc958) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7ff6dbbcc8f0)
+ QAccessibleEvent (0x0x7ff6d7a2f780) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7ff6dbbcc958)
+
+Vtable for QAccessibleTextRemoveEvent
+QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextRemoveEvent)
+16 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+24 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextRemoveEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleTextRemoveEvent (0x0x7ff6dbbcca90) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7ff6dbbccc30) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7ff6dbbcca90)
+ QAccessibleEvent (0x0x7ff6d7a2fba0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7ff6dbbccc30)
+
+Vtable for QAccessibleTextUpdateEvent
+QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextUpdateEvent)
+16 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+24 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextUpdateEvent
+ size=88 align=8
+ base size=88 base align=8
+QAccessibleTextUpdateEvent (0x0x7ff6dbbccd00) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7ff6dbbccd68) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7ff6dbbccd00)
+ QAccessibleEvent (0x0x7ff6d7a40000) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7ff6dbbccd68)
+
+Vtable for QAccessibleValueChangeEvent
+QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleValueChangeEvent)
+16 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+24 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleValueChangeEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleValueChangeEvent (0x0x7ff6dbbccea0) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+ QAccessibleEvent (0x0x7ff6d7a40480) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7ff6dbbccea0)
+
+Vtable for QAccessibleTableModelChangeEvent
+QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleTableModelChangeEvent)
+16 (int (*)(...))QAccessibleTableModelChangeEvent::~QAccessibleTableModelChangeEvent
+24 (int (*)(...))QAccessibleTableModelChangeEvent::~QAccessibleTableModelChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTableModelChangeEvent
+ size=48 align=8
+ base size=48 base align=8
+QAccessibleTableModelChangeEvent (0x0x7ff6dbbe0068) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+ QAccessibleEvent (0x0x7ff6d7a408a0) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7ff6dbbe0068)
+
+Vtable for QAccessibleBridge
+QAccessibleBridge::_ZTV17QAccessibleBridge: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleBridge)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridge
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleBridge (0x0x7ff6d7652180) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7ff6d7652420) 0 empty
+
+Vtable for QAccessibleBridgePlugin
+QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QAccessibleBridgePlugin)
+16 (int (*)(...))QAccessibleBridgePlugin::metaObject
+24 (int (*)(...))QAccessibleBridgePlugin::qt_metacast
+32 (int (*)(...))QAccessibleBridgePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridgePlugin
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleBridgePlugin (0x0x7ff6dbbe0270) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+ QObject (0x0x7ff6d76523c0) 0
+ primary-for QAccessibleBridgePlugin (0x0x7ff6dbbe0270)
+
+Vtable for QAccessibleObject
+QAccessibleObject::_ZTV17QAccessibleObject: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleObject)
+16 0
+24 0
+32 (int (*)(...))QAccessibleObject::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleInterface::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleInterface::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleObject::rect
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleObject
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleObject (0x0x7ff6dbbe04e0) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+ QAccessibleInterface (0x0x7ff6d76524e0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7ff6dbbe04e0)
+
+Vtable for QAccessibleApplication
+QAccessibleApplication::_ZTV22QAccessibleApplication: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QAccessibleApplication)
+16 (int (*)(...))QAccessibleApplication::~QAccessibleApplication
+24 (int (*)(...))QAccessibleApplication::~QAccessibleApplication
+32 (int (*)(...))QAccessibleObject::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleApplication::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleApplication::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))QAccessibleApplication::parent
+88 (int (*)(...))QAccessibleApplication::child
+96 (int (*)(...))QAccessibleApplication::childCount
+104 (int (*)(...))QAccessibleApplication::indexOfChild
+112 (int (*)(...))QAccessibleApplication::text
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleObject::rect
+136 (int (*)(...))QAccessibleApplication::role
+144 (int (*)(...))QAccessibleApplication::state
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleApplication
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleApplication (0x0x7ff6dbbe09c0) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+ QAccessibleObject (0x0x7ff6dbbe0a28) 0
+ primary-for QAccessibleApplication (0x0x7ff6dbbe09c0)
+ QAccessibleInterface (0x0x7ff6d7652540) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7ff6dbbe0a28)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7ff6d7652600) 0 empty
+
+Vtable for QAccessiblePlugin
+QAccessiblePlugin::_ZTV17QAccessiblePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessiblePlugin)
+16 (int (*)(...))QAccessiblePlugin::metaObject
+24 (int (*)(...))QAccessiblePlugin::qt_metacast
+32 (int (*)(...))QAccessiblePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessiblePlugin
+ size=16 align=8
+ base size=16 base align=8
+QAccessiblePlugin (0x0x7ff6dbbe0d68) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+ QObject (0x0x7ff6d76525a0) 0
+ primary-for QAccessiblePlugin (0x0x7ff6dbbe0d68)
+
+Class QAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAction::QPrivateSignal (0x0x7ff6d7652720) 0 empty
+
+Vtable for QAction
+QAction::_ZTV7QAction: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QAction)
+16 (int (*)(...))QAction::metaObject
+24 (int (*)(...))QAction::qt_metacast
+32 (int (*)(...))QAction::qt_metacall
+40 (int (*)(...))QAction::~QAction
+48 (int (*)(...))QAction::~QAction
+56 (int (*)(...))QAction::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QAction
+ size=16 align=8
+ base size=16 base align=8
+QAction (0x0x7ff6dbbe0dd0) 0
+ vptr=((& QAction::_ZTV7QAction) + 16)
+ QObject (0x0x7ff6d76526c0) 0
+ primary-for QAction (0x0x7ff6dbbe0dd0)
+
+Class QActionGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QActionGroup::QPrivateSignal (0x0x7ff6d7678060) 0 empty
+
+Vtable for QActionGroup
+QActionGroup::_ZTV12QActionGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionGroup)
+16 (int (*)(...))QActionGroup::metaObject
+24 (int (*)(...))QActionGroup::qt_metacast
+32 (int (*)(...))QActionGroup::qt_metacall
+40 (int (*)(...))QActionGroup::~QActionGroup
+48 (int (*)(...))QActionGroup::~QActionGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QActionGroup
+ size=16 align=8
+ base size=16 base align=8
+QActionGroup (0x0x7ff6db95d0d0) 0
+ vptr=((& QActionGroup::_ZTV12QActionGroup) + 16)
+ QObject (0x0x7ff6d7678000) 0
+ primary-for QActionGroup (0x0x7ff6db95d0d0)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7ff6d7678300) 0
+
+Vtable for QSurface
+QSurface::_ZTV8QSurface: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSurface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+
+Class QSurface
+ size=24 align=8
+ base size=24 base align=8
+QSurface (0x0x7ff6d7678b40) 0
+ vptr=((& QSurface::_ZTV8QSurface) + 16)
+
+Vtable for QBitmap
+QBitmap::_ZTV7QBitmap: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QBitmap)
+16 (int (*)(...))QBitmap::~QBitmap
+24 (int (*)(...))QBitmap::~QBitmap
+32 (int (*)(...))QPixmap::devType
+40 (int (*)(...))QPixmap::paintEngine
+48 (int (*)(...))QPixmap::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QBitmap
+ size=24 align=8
+ base size=24 base align=8
+QBitmap (0x0x7ff6db982138) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+ QPixmap (0x0x7ff6db9821a0) 0
+ primary-for QBitmap (0x0x7ff6db982138)
+ QPaintDevice (0x0x7ff6d7678e40) 0
+ primary-for QPixmap (0x0x7ff6db9821a0)
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7ff6d76b1780) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7ff6d76d4960) 0 empty
+
+Vtable for QWindow
+QWindow::_ZTV7QWindow: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWindow)
+16 (int (*)(...))QWindow::metaObject
+24 (int (*)(...))QWindow::qt_metacast
+32 (int (*)(...))QWindow::qt_metacall
+40 (int (*)(...))QWindow::~QWindow
+48 (int (*)(...))QWindow::~QWindow
+56 (int (*)(...))QWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI7QWindow)
+328 (int (*)(...))QWindow::_ZThn16_N7QWindowD1Ev
+336 (int (*)(...))QWindow::_ZThn16_N7QWindowD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QWindow
+ size=40 align=8
+ base size=40 base align=8
+QWindow (0x0x7ff6d76a17e0) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+ QObject (0x0x7ff6d76d48a0) 0
+ primary-for QWindow (0x0x7ff6d76a17e0)
+ QSurface (0x0x7ff6d76d4900) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 328)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7ff6d76f71e0) 0
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7ff6d76f7300) 0 empty
+
+Vtable for QClipboard
+QClipboard::_ZTV10QClipboard: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QClipboard)
+16 (int (*)(...))QClipboard::metaObject
+24 (int (*)(...))QClipboard::qt_metacast
+32 (int (*)(...))QClipboard::qt_metacall
+40 (int (*)(...))QClipboard::~QClipboard
+48 (int (*)(...))QClipboard::~QClipboard
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QClipboard
+ size=16 align=8
+ base size=16 base align=8
+QClipboard (0x0x7ff6d9c98680) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+ QObject (0x0x7ff6d76f72a0) 0
+ primary-for QClipboard (0x0x7ff6d9c98680)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7ff6d76f7420) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7ff6d77293c0) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7ff6d7758060) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7ff6d7758120) 0 empty
+
+Vtable for QDrag
+QDrag::_ZTV5QDrag: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDrag)
+16 (int (*)(...))QDrag::metaObject
+24 (int (*)(...))QDrag::qt_metacast
+32 (int (*)(...))QDrag::qt_metacall
+40 (int (*)(...))QDrag::~QDrag
+48 (int (*)(...))QDrag::~QDrag
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDrag
+ size=16 align=8
+ base size=16 base align=8
+QDrag (0x0x7ff6d799b9c0) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+ QObject (0x0x7ff6d77580c0) 0
+ primary-for QDrag (0x0x7ff6d799b9c0)
+
+Class QFileSystemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemModel::QPrivateSignal (0x0x7ff6d7758300) 0 empty
+
+Vtable for QFileSystemModel
+QFileSystemModel::_ZTV16QFileSystemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QFileSystemModel)
+16 (int (*)(...))QFileSystemModel::metaObject
+24 (int (*)(...))QFileSystemModel::qt_metacast
+32 (int (*)(...))QFileSystemModel::qt_metacall
+40 (int (*)(...))QFileSystemModel::~QFileSystemModel
+48 (int (*)(...))QFileSystemModel::~QFileSystemModel
+56 (int (*)(...))QFileSystemModel::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QFileSystemModel::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileSystemModel::index
+120 (int (*)(...))QFileSystemModel::parent
+128 (int (*)(...))QFileSystemModel::sibling
+136 (int (*)(...))QFileSystemModel::rowCount
+144 (int (*)(...))QFileSystemModel::columnCount
+152 (int (*)(...))QFileSystemModel::hasChildren
+160 (int (*)(...))QFileSystemModel::data
+168 (int (*)(...))QFileSystemModel::setData
+176 (int (*)(...))QFileSystemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QFileSystemModel::mimeTypes
+224 (int (*)(...))QFileSystemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QFileSystemModel::dropMimeData
+248 (int (*)(...))QFileSystemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QFileSystemModel::fetchMore
+320 (int (*)(...))QFileSystemModel::canFetchMore
+328 (int (*)(...))QFileSystemModel::flags
+336 (int (*)(...))QFileSystemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QFileSystemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QFileSystemModel
+ size=16 align=8
+ base size=16 base align=8
+QFileSystemModel (0x0x7ff6d799ba28) 0
+ vptr=((& QFileSystemModel::_ZTV16QFileSystemModel) + 16)
+ QAbstractItemModel (0x0x7ff6d799ba90) 0
+ primary-for QFileSystemModel (0x0x7ff6d799ba28)
+ QObject (0x0x7ff6d77582a0) 0
+ primary-for QAbstractItemModel (0x0x7ff6d799ba90)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7ff6d7758900) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7ff6d778c240) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7ff6d779dc60) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7ff6d77dba80) 0 empty
+
+Vtable for QGenericPlugin
+QGenericPlugin::_ZTV14QGenericPlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGenericPlugin)
+16 (int (*)(...))QGenericPlugin::metaObject
+24 (int (*)(...))QGenericPlugin::qt_metacast
+32 (int (*)(...))QGenericPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QGenericPlugin
+ size=16 align=8
+ base size=16 base align=8
+QGenericPlugin (0x0x7ff6d77d7270) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+ QObject (0x0x7ff6d77dba20) 0
+ primary-for QGenericPlugin (0x0x7ff6d77d7270)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7ff6d77dbb40) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7ff6d77dbc00) 0 empty
+
+Vtable for QInputMethod
+QInputMethod::_ZTV12QInputMethod: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputMethod)
+16 (int (*)(...))QInputMethod::metaObject
+24 (int (*)(...))QInputMethod::qt_metacast
+32 (int (*)(...))QInputMethod::qt_metacall
+40 (int (*)(...))QInputMethod::~QInputMethod
+48 (int (*)(...))QInputMethod::~QInputMethod
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QInputMethod
+ size=16 align=8
+ base size=16 base align=8
+QInputMethod (0x0x7ff6d77d72d8) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+ QObject (0x0x7ff6d77dbba0) 0
+ primary-for QInputMethod (0x0x7ff6d77d72d8)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7ff6d77dbea0) 0 empty
+
+Vtable for QGuiApplication
+QGuiApplication::_ZTV15QGuiApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGuiApplication)
+16 (int (*)(...))QGuiApplication::metaObject
+24 (int (*)(...))QGuiApplication::qt_metacast
+32 (int (*)(...))QGuiApplication::qt_metacall
+40 (int (*)(...))QGuiApplication::~QGuiApplication
+48 (int (*)(...))QGuiApplication::~QGuiApplication
+56 (int (*)(...))QGuiApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGuiApplication::notify
+120 (int (*)(...))QGuiApplication::compressEvent
+
+Class QGuiApplication
+ size=16 align=8
+ base size=16 base align=8
+QGuiApplication (0x0x7ff6d77d7340) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+ QCoreApplication (0x0x7ff6d77d73a8) 0
+ primary-for QGuiApplication (0x0x7ff6d77d7340)
+ QObject (0x0x7ff6d77dbe40) 0
+ primary-for QCoreApplication (0x0x7ff6d77d73a8)
+
+Class QIconEngine::ScaledPixmapArgument
+ size=48 align=8
+ base size=48 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7ff6d77fd180) 0
+
+Vtable for QIconEngine
+QIconEngine::_ZTV11QIconEngine: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QIconEngine)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QIconEngine::actualSize
+48 (int (*)(...))QIconEngine::pixmap
+56 (int (*)(...))QIconEngine::addPixmap
+64 (int (*)(...))QIconEngine::addFile
+72 (int (*)(...))QIconEngine::key
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QIconEngine::read
+96 (int (*)(...))QIconEngine::write
+104 (int (*)(...))QIconEngine::availableSizes
+112 (int (*)(...))QIconEngine::iconName
+120 (int (*)(...))QIconEngine::isNull
+128 (int (*)(...))QIconEngine::scaledPixmap
+136 (int (*)(...))QIconEngine::virtual_hook
+
+Class QIconEngine
+ size=8 align=8
+ base size=8 base align=8
+QIconEngine (0x0x7ff6d77fd120) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7ff6d77fd240) 0 empty
+
+Vtable for QIconEnginePlugin
+QIconEnginePlugin::_ZTV17QIconEnginePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QIconEnginePlugin)
+16 (int (*)(...))QIconEnginePlugin::metaObject
+24 (int (*)(...))QIconEnginePlugin::qt_metacast
+32 (int (*)(...))QIconEnginePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QIconEnginePlugin
+ size=16 align=8
+ base size=16 base align=8
+QIconEnginePlugin (0x0x7ff6d77d7410) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+ QObject (0x0x7ff6d77fd1e0) 0
+ primary-for QIconEnginePlugin (0x0x7ff6d77d7410)
+
+Vtable for QImageIOHandler
+QImageIOHandler::_ZTV15QImageIOHandler: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QImageIOHandler)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QImageIOHandler::write
+56 (int (*)(...))QImageIOHandler::option
+64 (int (*)(...))QImageIOHandler::setOption
+72 (int (*)(...))QImageIOHandler::supportsOption
+80 (int (*)(...))QImageIOHandler::jumpToNextImage
+88 (int (*)(...))QImageIOHandler::jumpToImage
+96 (int (*)(...))QImageIOHandler::loopCount
+104 (int (*)(...))QImageIOHandler::imageCount
+112 (int (*)(...))QImageIOHandler::nextImageDelay
+120 (int (*)(...))QImageIOHandler::currentImageNumber
+128 (int (*)(...))QImageIOHandler::currentImageRect
+
+Class QImageIOHandler
+ size=16 align=8
+ base size=16 base align=8
+QImageIOHandler (0x0x7ff6d77fd300) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7ff6d77fd540) 0 empty
+
+Vtable for QImageIOPlugin
+QImageIOPlugin::_ZTV14QImageIOPlugin: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QImageIOPlugin)
+16 (int (*)(...))QImageIOPlugin::metaObject
+24 (int (*)(...))QImageIOPlugin::qt_metacast
+32 (int (*)(...))QImageIOPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QImageIOPlugin
+ size=16 align=8
+ base size=16 base align=8
+QImageIOPlugin (0x0x7ff6d77d7478) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+ QObject (0x0x7ff6d77fd4e0) 0
+ primary-for QImageIOPlugin (0x0x7ff6d77d7478)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7ff6d77fd900) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7ff6d77fd9c0) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7ff6d77fda80) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7ff6d745c7e0) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7ff6d749ac60) 0 empty
+
+Vtable for QMovie
+QMovie::_ZTV6QMovie: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QMovie)
+16 (int (*)(...))QMovie::metaObject
+24 (int (*)(...))QMovie::qt_metacast
+32 (int (*)(...))QMovie::qt_metacall
+40 (int (*)(...))QMovie::~QMovie
+48 (int (*)(...))QMovie::~QMovie
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QMovie
+ size=16 align=8
+ base size=16 base align=8
+QMovie (0x0x7ff6d748bc98) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+ QObject (0x0x7ff6d749ac00) 0
+ primary-for QMovie (0x0x7ff6d748bc98)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7ff6d74b4060) 0 empty
+
+Vtable for QOffscreenSurface
+QOffscreenSurface::_ZTV17QOffscreenSurface: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QOffscreenSurface)
+16 (int (*)(...))QOffscreenSurface::metaObject
+24 (int (*)(...))QOffscreenSurface::qt_metacast
+32 (int (*)(...))QOffscreenSurface::qt_metacall
+40 (int (*)(...))QOffscreenSurface::~QOffscreenSurface
+48 (int (*)(...))QOffscreenSurface::~QOffscreenSurface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QOffscreenSurface::surfaceType
+120 (int (*)(...))QOffscreenSurface::format
+128 (int (*)(...))QOffscreenSurface::size
+136 (int (*)(...))QOffscreenSurface::surfaceHandle
+144 (int (*)(...))-16
+152 (int (*)(...))(& _ZTI17QOffscreenSurface)
+160 (int (*)(...))QOffscreenSurface::_ZThn16_N17QOffscreenSurfaceD1Ev
+168 (int (*)(...))QOffscreenSurface::_ZThn16_N17QOffscreenSurfaceD0Ev
+176 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface6formatEv
+184 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface13surfaceHandleEv
+192 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface11surfaceTypeEv
+200 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface4sizeEv
+
+Class QOffscreenSurface
+ size=40 align=8
+ base size=40 base align=8
+QOffscreenSurface (0x0x7ff6d782dd20) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+ QObject (0x0x7ff6d749af60) 0
+ primary-for QOffscreenSurface (0x0x7ff6d782dd20)
+ QSurface (0x0x7ff6d74b4000) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7ff6d74b42a0) 0 empty
+
+Vtable for QOpenGLContextGroup
+QOpenGLContextGroup::_ZTV19QOpenGLContextGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QOpenGLContextGroup)
+16 (int (*)(...))QOpenGLContextGroup::metaObject
+24 (int (*)(...))QOpenGLContextGroup::qt_metacast
+32 (int (*)(...))QOpenGLContextGroup::qt_metacall
+40 (int (*)(...))QOpenGLContextGroup::~QOpenGLContextGroup
+48 (int (*)(...))QOpenGLContextGroup::~QOpenGLContextGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLContextGroup
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLContextGroup (0x0x7ff6d748bd00) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+ QObject (0x0x7ff6d74b4240) 0
+ primary-for QOpenGLContextGroup (0x0x7ff6d748bd00)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7ff6d74b4480) 0 empty
+
+Vtable for QOpenGLContext
+QOpenGLContext::_ZTV14QOpenGLContext: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QOpenGLContext)
+16 (int (*)(...))QOpenGLContext::metaObject
+24 (int (*)(...))QOpenGLContext::qt_metacast
+32 (int (*)(...))QOpenGLContext::qt_metacall
+40 (int (*)(...))QOpenGLContext::~QOpenGLContext
+48 (int (*)(...))QOpenGLContext::~QOpenGLContext
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLContext
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLContext (0x0x7ff6d748bd68) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+ QObject (0x0x7ff6d74b4420) 0
+ primary-for QOpenGLContext (0x0x7ff6d748bd68)
+
+Vtable for QNativeInterface::QGLXContext
+QNativeInterface::QGLXContext::_ZTVN16QNativeInterface11QGLXContextE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QGLXContextE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QGLXContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QGLXContext (0x0x7ff6d74b4600) 0 nearly-empty
+ vptr=((& QNativeInterface::QGLXContext::_ZTVN16QNativeInterface11QGLXContextE) + 16)
+
+Vtable for QNativeInterface::QEGLContext
+QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QEGLContextE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QEGLContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QEGLContext (0x0x7ff6d74b4660) 0 nearly-empty
+ vptr=((& QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE) + 16)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7ff6d74b46c0) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7ff6d74b4c60) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7ff6d74b4c00) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7ff6d530b1a0) 0
+ QOpenGLFunctions (0x0x7ff6d5323a20) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7ff6d5323d80) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7ff6d530b208) 0
+ QOpenGLFunctionsPrivate (0x0x7ff6d5323d20) 0
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7ff6d53fca80) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7ff6d504f540) 0
+
+Class QPageRanges::Range
+ size=8 align=4
+ base size=8 base align=4
+QPageRanges::Range (0x0x7ff6d50a71e0) 0
+
+Class QPageRanges
+ size=8 align=8
+ base size=8 base align=8
+QPageRanges (0x0x7ff6d50a7180) 0
+
+Vtable for QPagedPaintDevice
+QPagedPaintDevice::_ZTV17QPagedPaintDevice: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QPagedPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QPagedPaintDevice::setPageLayout
+96 (int (*)(...))QPagedPaintDevice::setPageSize
+104 (int (*)(...))QPagedPaintDevice::setPageOrientation
+112 (int (*)(...))QPagedPaintDevice::setPageMargins
+120 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPagedPaintDevice
+ size=24 align=8
+ base size=24 base align=8
+QPagedPaintDevice (0x0x7ff6d5104dd0) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+ QPaintDevice (0x0x7ff6d510c300) 0
+ primary-for QPagedPaintDevice (0x0x7ff6d5104dd0)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7ff6d510c480) 0 empty
+
+Vtable for QPaintDeviceWindow
+QPaintDeviceWindow::_ZTV18QPaintDeviceWindow: 59 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+16 (int (*)(...))QPaintDeviceWindow::metaObject
+24 (int (*)(...))QPaintDeviceWindow::qt_metacast
+32 (int (*)(...))QPaintDeviceWindow::qt_metacall
+40 (int (*)(...))QPaintDeviceWindow::~QPaintDeviceWindow
+48 (int (*)(...))QPaintDeviceWindow::~QPaintDeviceWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QPaintDeviceWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QPaintDeviceWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))-16
+336 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+344 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD1Ev
+352 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD0Ev
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+384 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+392 (int (*)(...))-40
+400 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+408 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD1Ev
+416 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD0Ev
+424 (int (*)(...))QPaintDevice::devType
+432 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+440 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+448 (int (*)(...))QPaintDevice::initPainter
+456 (int (*)(...))QPaintDevice::redirected
+464 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDeviceWindow
+ size=56 align=8
+ base size=50 base align=8
+QPaintDeviceWindow (0x0x7ff6d5111070) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+ QWindow (0x0x7ff6d51110e0) 0
+ primary-for QPaintDeviceWindow (0x0x7ff6d5111070)
+ QObject (0x0x7ff6d510c360) 0
+ primary-for QWindow (0x0x7ff6d51110e0)
+ QSurface (0x0x7ff6d510c3c0) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 344)
+ QPaintDevice (0x0x7ff6d510c420) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 408)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7ff6d510c660) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7ff6d510c600) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7ff6d4eb21e0) 0 empty
+
+Vtable for QPaintEngine
+QPaintEngine::_ZTV12QPaintEngine: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintEngine)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))QPaintEngine::drawRects
+64 (int (*)(...))QPaintEngine::drawRects
+72 (int (*)(...))QPaintEngine::drawLines
+80 (int (*)(...))QPaintEngine::drawLines
+88 (int (*)(...))QPaintEngine::drawEllipse
+96 (int (*)(...))QPaintEngine::drawEllipse
+104 (int (*)(...))QPaintEngine::drawPath
+112 (int (*)(...))QPaintEngine::drawPoints
+120 (int (*)(...))QPaintEngine::drawPoints
+128 (int (*)(...))QPaintEngine::drawPolygon
+136 (int (*)(...))QPaintEngine::drawPolygon
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QPaintEngine::drawTextItem
+160 (int (*)(...))QPaintEngine::drawTiledPixmap
+168 (int (*)(...))QPaintEngine::drawImage
+176 (int (*)(...))QPaintEngine::coordinateOffset
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))QPaintEngine::createPixmap
+200 (int (*)(...))QPaintEngine::createPixmapFromImage
+
+Class QPaintEngine
+ size=32 align=8
+ base size=32 base align=8
+QPaintEngine (0x0x7ff6d4ec69c0) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7ff6d4efd000) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7ff6d4efda80) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7ff6d4efda20) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7ff6d4f7dd80) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7ff6d4f9b540) 0 empty
+
+Vtable for QPdfWriter
+QPdfWriter::_ZTV10QPdfWriter: 33 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QPdfWriter)
+16 (int (*)(...))QPdfWriter::metaObject
+24 (int (*)(...))QPdfWriter::qt_metacast
+32 (int (*)(...))QPdfWriter::qt_metacall
+40 (int (*)(...))QPdfWriter::~QPdfWriter
+48 (int (*)(...))QPdfWriter::~QPdfWriter
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPdfWriter::newPage
+120 (int (*)(...))QPdfWriter::paintEngine
+128 (int (*)(...))QPdfWriter::metric
+136 (int (*)(...))-16
+144 (int (*)(...))(& _ZTI10QPdfWriter)
+152 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD1Ev
+160 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD0Ev
+168 (int (*)(...))QPaintDevice::devType
+176 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter11paintEngineEv
+184 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter6metricEN12QPaintDevice17PaintDeviceMetricE
+192 (int (*)(...))QPaintDevice::initPainter
+200 (int (*)(...))QPaintDevice::redirected
+208 (int (*)(...))QPaintDevice::sharedPainter
+216 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter7newPageEv
+224 (int (*)(...))QPagedPaintDevice::setPageLayout
+232 (int (*)(...))QPagedPaintDevice::setPageSize
+240 (int (*)(...))QPagedPaintDevice::setPageOrientation
+248 (int (*)(...))QPagedPaintDevice::setPageMargins
+256 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPdfWriter
+ size=40 align=8
+ base size=40 base align=8
+QPdfWriter (0x0x7ff6d4eddaf0) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+ QObject (0x0x7ff6d4f9b480) 0
+ primary-for QPdfWriter (0x0x7ff6d4eddaf0)
+ QPagedPaintDevice (0x0x7ff6d4f85c30) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 152)
+ QPaintDevice (0x0x7ff6d4f9b4e0) 16
+ primary-for QPagedPaintDevice (0x0x7ff6d4f85c30)
+
+Vtable for QPicture
+QPicture::_ZTV8QPicture: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QPicture)
+16 (int (*)(...))QPicture::~QPicture
+24 (int (*)(...))QPicture::~QPicture
+32 (int (*)(...))QPicture::devType
+40 (int (*)(...))QPicture::paintEngine
+48 (int (*)(...))QPicture::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QPicture::setData
+
+Class QPicture
+ size=24 align=8
+ base size=24 base align=8
+QPicture (0x0x7ff6d4f85c98) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+ QPaintDevice (0x0x7ff6d4f9b720) 0
+ primary-for QPicture (0x0x7ff6d4f85c98)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7ff6d4fe0240) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7ff6d4fe01e0) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7ff6d501f480) 0 empty
+
+Vtable for QRasterWindow
+QRasterWindow::_ZTV13QRasterWindow: 60 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QRasterWindow)
+16 (int (*)(...))QRasterWindow::metaObject
+24 (int (*)(...))QRasterWindow::qt_metacast
+32 (int (*)(...))QRasterWindow::qt_metacall
+40 (int (*)(...))QRasterWindow::~QRasterWindow
+48 (int (*)(...))QRasterWindow::~QRasterWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QPaintDeviceWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QRasterWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))QRasterWindow::redirected
+336 (int (*)(...))-16
+344 (int (*)(...))(& _ZTI13QRasterWindow)
+352 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD1Ev
+360 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD0Ev
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+384 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+392 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+400 (int (*)(...))-40
+408 (int (*)(...))(& _ZTI13QRasterWindow)
+416 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD1Ev
+424 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD0Ev
+432 (int (*)(...))QPaintDevice::devType
+440 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+448 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+456 (int (*)(...))QPaintDevice::initPainter
+464 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow10redirectedEP6QPoint
+472 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QRasterWindow
+ size=56 align=8
+ base size=50 base align=8
+QRasterWindow (0x0x7ff6d5020208) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+ QPaintDeviceWindow (0x0x7ff6d4ff2700) 0
+ primary-for QRasterWindow (0x0x7ff6d5020208)
+ QWindow (0x0x7ff6d4ff2770) 0
+ primary-for QPaintDeviceWindow (0x0x7ff6d4ff2700)
+ QObject (0x0x7ff6d501f360) 0
+ primary-for QWindow (0x0x7ff6d4ff2770)
+ QSurface (0x0x7ff6d501f3c0) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 352)
+ QPaintDevice (0x0x7ff6d501f420) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 416)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7ff6d501f660) 0 empty
+
+Vtable for QSessionManager
+QSessionManager::_ZTV15QSessionManager: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSessionManager)
+16 (int (*)(...))QSessionManager::metaObject
+24 (int (*)(...))QSessionManager::qt_metacast
+32 (int (*)(...))QSessionManager::qt_metacall
+40 (int (*)(...))QSessionManager::~QSessionManager
+48 (int (*)(...))QSessionManager::~QSessionManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSessionManager
+ size=16 align=8
+ base size=16 base align=8
+QSessionManager (0x0x7ff6d50202d8) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+ QObject (0x0x7ff6d501f600) 0
+ primary-for QSessionManager (0x0x7ff6d50202d8)
+
+Class QShortcut::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QShortcut::QPrivateSignal (0x0x7ff6d501f840) 0 empty
+
+Vtable for QShortcut
+QShortcut::_ZTV9QShortcut: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QShortcut)
+16 (int (*)(...))QShortcut::metaObject
+24 (int (*)(...))QShortcut::qt_metacast
+32 (int (*)(...))QShortcut::qt_metacall
+40 (int (*)(...))QShortcut::~QShortcut
+48 (int (*)(...))QShortcut::~QShortcut
+56 (int (*)(...))QShortcut::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QShortcut
+ size=16 align=8
+ base size=16 base align=8
+QShortcut (0x0x7ff6d5020340) 0
+ vptr=((& QShortcut::_ZTV9QShortcut) + 16)
+ QObject (0x0x7ff6d501f7e0) 0
+ primary-for QShortcut (0x0x7ff6d5020340)
+
+Vtable for QStandardItem
+QStandardItem::_ZTV13QStandardItem: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QStandardItem)
+16 (int (*)(...))QStandardItem::~QStandardItem
+24 (int (*)(...))QStandardItem::~QStandardItem
+32 (int (*)(...))QStandardItem::data
+40 (int (*)(...))QStandardItem::multiData
+48 (int (*)(...))QStandardItem::setData
+56 (int (*)(...))QStandardItem::clone
+64 (int (*)(...))QStandardItem::type
+72 (int (*)(...))QStandardItem::read
+80 (int (*)(...))QStandardItem::write
+88 (int (*)(...))QStandardItem::operator<
+
+Class QStandardItem
+ size=16 align=8
+ base size=16 base align=8
+QStandardItem (0x0x7ff6d501fd20) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7ff6d4c81d80) 0 empty
+
+Vtable for QStandardItemModel
+QStandardItemModel::_ZTV18QStandardItemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QStandardItemModel)
+16 (int (*)(...))QStandardItemModel::metaObject
+24 (int (*)(...))QStandardItemModel::qt_metacast
+32 (int (*)(...))QStandardItemModel::qt_metacall
+40 (int (*)(...))QStandardItemModel::~QStandardItemModel
+48 (int (*)(...))QStandardItemModel::~QStandardItemModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStandardItemModel::index
+120 (int (*)(...))QStandardItemModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QStandardItemModel::rowCount
+144 (int (*)(...))QStandardItemModel::columnCount
+152 (int (*)(...))QStandardItemModel::hasChildren
+160 (int (*)(...))QStandardItemModel::data
+168 (int (*)(...))QStandardItemModel::setData
+176 (int (*)(...))QStandardItemModel::headerData
+184 (int (*)(...))QStandardItemModel::setHeaderData
+192 (int (*)(...))QStandardItemModel::itemData
+200 (int (*)(...))QStandardItemModel::setItemData
+208 (int (*)(...))QStandardItemModel::clearItemData
+216 (int (*)(...))QStandardItemModel::mimeTypes
+224 (int (*)(...))QStandardItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QStandardItemModel::dropMimeData
+248 (int (*)(...))QStandardItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStandardItemModel::insertRows
+272 (int (*)(...))QStandardItemModel::insertColumns
+280 (int (*)(...))QStandardItemModel::removeRows
+288 (int (*)(...))QStandardItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStandardItemModel::flags
+336 (int (*)(...))QStandardItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QStandardItemModel::roleNames
+376 (int (*)(...))QStandardItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QStandardItemModel
+ size=16 align=8
+ base size=16 base align=8
+QStandardItemModel (0x0x7ff6d5020c98) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+ QAbstractItemModel (0x0x7ff6d5020d00) 0
+ primary-for QStandardItemModel (0x0x7ff6d5020c98)
+ QObject (0x0x7ff6d4c81d20) 0
+ primary-for QAbstractItemModel (0x0x7ff6d5020d00)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7ff6d4cda0c0) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7ff6d4d159c0) 0 empty
+
+Vtable for QStyleHints
+QStyleHints::_ZTV11QStyleHints: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QStyleHints)
+16 (int (*)(...))QStyleHints::metaObject
+24 (int (*)(...))QStyleHints::qt_metacast
+32 (int (*)(...))QStyleHints::qt_metacall
+40 (int (*)(...))QStyleHints::~QStyleHints
+48 (int (*)(...))QStyleHints::~QStyleHints
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QStyleHints
+ size=16 align=8
+ base size=16 base align=8
+QStyleHints (0x0x7ff6d4d18958) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+ QObject (0x0x7ff6d4d15960) 0
+ primary-for QStyleHints (0x0x7ff6d4d18958)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7ff6d4d15ba0) 0 empty
+
+Vtable for QTextObject
+QTextObject::_ZTV11QTextObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTextObject)
+16 (int (*)(...))QTextObject::metaObject
+24 (int (*)(...))QTextObject::qt_metacast
+32 (int (*)(...))QTextObject::qt_metacall
+40 (int (*)(...))QTextObject::~QTextObject
+48 (int (*)(...))QTextObject::~QTextObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextObject
+ size=16 align=8
+ base size=16 base align=8
+QTextObject (0x0x7ff6d4d189c0) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+ QObject (0x0x7ff6d4d15b40) 0
+ primary-for QTextObject (0x0x7ff6d4d189c0)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7ff6d4d15d80) 0 empty
+
+Vtable for QTextBlockGroup
+QTextBlockGroup::_ZTV15QTextBlockGroup: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QTextBlockGroup)
+16 (int (*)(...))QTextBlockGroup::metaObject
+24 (int (*)(...))QTextBlockGroup::qt_metacast
+32 (int (*)(...))QTextBlockGroup::qt_metacall
+40 (int (*)(...))QTextBlockGroup::~QTextBlockGroup
+48 (int (*)(...))QTextBlockGroup::~QTextBlockGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextBlockGroup::blockInserted
+120 (int (*)(...))QTextBlockGroup::blockRemoved
+128 (int (*)(...))QTextBlockGroup::blockFormatChanged
+
+Class QTextBlockGroup
+ size=16 align=8
+ base size=16 base align=8
+QTextBlockGroup (0x0x7ff6d4d18a28) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+ QTextObject (0x0x7ff6d4d18a90) 0
+ primary-for QTextBlockGroup (0x0x7ff6d4d18a28)
+ QObject (0x0x7ff6d4d15d20) 0
+ primary-for QTextObject (0x0x7ff6d4d18a90)
+
+Vtable for QTextFrameLayoutData
+QTextFrameLayoutData::_ZTV20QTextFrameLayoutData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextFrameLayoutData)
+16 (int (*)(...))QTextFrameLayoutData::~QTextFrameLayoutData
+24 (int (*)(...))QTextFrameLayoutData::~QTextFrameLayoutData
+
+Class QTextFrameLayoutData
+ size=8 align=8
+ base size=8 base align=8
+QTextFrameLayoutData (0x0x7ff6d4d15f00) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7ff6d4d40000) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7ff6d4d40060) 0
+
+Vtable for QTextFrame
+QTextFrame::_ZTV10QTextFrame: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextFrame)
+16 (int (*)(...))QTextFrame::metaObject
+24 (int (*)(...))QTextFrame::qt_metacast
+32 (int (*)(...))QTextFrame::qt_metacall
+40 (int (*)(...))QTextFrame::~QTextFrame
+48 (int (*)(...))QTextFrame::~QTextFrame
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextFrame
+ size=16 align=8
+ base size=16 base align=8
+QTextFrame (0x0x7ff6d4d18af8) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+ QTextObject (0x0x7ff6d4d18b60) 0
+ primary-for QTextFrame (0x0x7ff6d4d18af8)
+ QObject (0x0x7ff6d4d15f60) 0
+ primary-for QTextObject (0x0x7ff6d4d18b60)
+
+Vtable for QTextBlockUserData
+QTextBlockUserData::_ZTV18QTextBlockUserData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QTextBlockUserData)
+16 (int (*)(...))QTextBlockUserData::~QTextBlockUserData
+24 (int (*)(...))QTextBlockUserData::~QTextBlockUserData
+
+Class QTextBlockUserData
+ size=8 align=8
+ base size=8 base align=8
+QTextBlockUserData (0x0x7ff6d4d5bea0) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7ff6d4d5bf60) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7ff6d4d5bf00) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7ff6d4db27e0) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7ff6d4dd9660) 0 empty
+
+Vtable for QSyntaxHighlighter
+QSyntaxHighlighter::_ZTV18QSyntaxHighlighter: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSyntaxHighlighter)
+16 (int (*)(...))QSyntaxHighlighter::metaObject
+24 (int (*)(...))QSyntaxHighlighter::qt_metacast
+32 (int (*)(...))QSyntaxHighlighter::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QSyntaxHighlighter
+ size=16 align=8
+ base size=16 base align=8
+QSyntaxHighlighter (0x0x7ff6d4dd6d00) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+ QObject (0x0x7ff6d4dd9600) 0
+ primary-for QSyntaxHighlighter (0x0x7ff6d4dd6d00)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7ff6d4dd97e0) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7ff6d4dd9840) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7ff6d4dd9900) 0 empty
+
+Vtable for QTextList
+QTextList::_ZTV9QTextList: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTextList)
+16 (int (*)(...))QTextList::metaObject
+24 (int (*)(...))QTextList::qt_metacast
+32 (int (*)(...))QTextList::qt_metacall
+40 (int (*)(...))QTextList::~QTextList
+48 (int (*)(...))QTextList::~QTextList
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextBlockGroup::blockInserted
+120 (int (*)(...))QTextBlockGroup::blockRemoved
+128 (int (*)(...))QTextBlockGroup::blockFormatChanged
+
+Class QTextList
+ size=16 align=8
+ base size=16 base align=8
+QTextList (0x0x7ff6d4dd6d68) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+ QTextBlockGroup (0x0x7ff6d4dd6dd0) 0
+ primary-for QTextList (0x0x7ff6d4dd6d68)
+ QTextObject (0x0x7ff6d4dd6e38) 0
+ primary-for QTextBlockGroup (0x0x7ff6d4dd6dd0)
+ QObject (0x0x7ff6d4dd98a0) 0
+ primary-for QTextObject (0x0x7ff6d4dd6e38)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7ff6d4dd9cc0) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7ff6d4e06540) 0 empty
+
+Vtable for QTextTable
+QTextTable::_ZTV10QTextTable: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextTable)
+16 (int (*)(...))QTextTable::metaObject
+24 (int (*)(...))QTextTable::qt_metacast
+32 (int (*)(...))QTextTable::qt_metacall
+40 (int (*)(...))QTextTable::~QTextTable
+48 (int (*)(...))QTextTable::~QTextTable
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextTable
+ size=16 align=8
+ base size=16 base align=8
+QTextTable (0x0x7ff6d4dd6ea0) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+ QTextFrame (0x0x7ff6d4dd6f08) 0
+ primary-for QTextTable (0x0x7ff6d4dd6ea0)
+ QTextObject (0x0x7ff6d4dd6f70) 0
+ primary-for QTextFrame (0x0x7ff6d4dd6f08)
+ QObject (0x0x7ff6d4e064e0) 0
+ primary-for QTextObject (0x0x7ff6d4dd6f70)
+
+Class QUndoGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoGroup::QPrivateSignal (0x0x7ff6d4e06900) 0 empty
+
+Vtable for QUndoGroup
+QUndoGroup::_ZTV10QUndoGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUndoGroup)
+16 (int (*)(...))QUndoGroup::metaObject
+24 (int (*)(...))QUndoGroup::qt_metacast
+32 (int (*)(...))QUndoGroup::qt_metacall
+40 (int (*)(...))QUndoGroup::~QUndoGroup
+48 (int (*)(...))QUndoGroup::~QUndoGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QUndoGroup
+ size=16 align=8
+ base size=16 base align=8
+QUndoGroup (0x0x7ff6d4e15000) 0
+ vptr=((& QUndoGroup::_ZTV10QUndoGroup) + 16)
+ QObject (0x0x7ff6d4e068a0) 0
+ primary-for QUndoGroup (0x0x7ff6d4e15000)
+
+Vtable for QUndoCommand
+QUndoCommand::_ZTV12QUndoCommand: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QUndoCommand)
+16 (int (*)(...))QUndoCommand::~QUndoCommand
+24 (int (*)(...))QUndoCommand::~QUndoCommand
+32 (int (*)(...))QUndoCommand::undo
+40 (int (*)(...))QUndoCommand::redo
+48 (int (*)(...))QUndoCommand::id
+56 (int (*)(...))QUndoCommand::mergeWith
+
+Class QUndoCommand
+ size=16 align=8
+ base size=16 base align=8
+QUndoCommand (0x0x7ff6d4e06a80) 0
+ vptr=((& QUndoCommand::_ZTV12QUndoCommand) + 16)
+
+Class QUndoStack::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoStack::QPrivateSignal (0x0x7ff6d4e06b40) 0 empty
+
+Vtable for QUndoStack
+QUndoStack::_ZTV10QUndoStack: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUndoStack)
+16 (int (*)(...))QUndoStack::metaObject
+24 (int (*)(...))QUndoStack::qt_metacast
+32 (int (*)(...))QUndoStack::qt_metacall
+40 (int (*)(...))QUndoStack::~QUndoStack
+48 (int (*)(...))QUndoStack::~QUndoStack
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QUndoStack
+ size=16 align=8
+ base size=16 base align=8
+QUndoStack (0x0x7ff6d4e15068) 0
+ vptr=((& QUndoStack::_ZTV10QUndoStack) + 16)
+ QObject (0x0x7ff6d4e06ae0) 0
+ primary-for QUndoStack (0x0x7ff6d4e15068)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7ff6d4e06d20) 0 empty
+
+Vtable for QValidator
+QValidator::_ZTV10QValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QValidator)
+16 (int (*)(...))QValidator::metaObject
+24 (int (*)(...))QValidator::qt_metacast
+32 (int (*)(...))QValidator::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))QValidator::fixup
+
+Class QValidator
+ size=16 align=8
+ base size=16 base align=8
+QValidator (0x0x7ff6d4e150d0) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+ QObject (0x0x7ff6d4e06cc0) 0
+ primary-for QValidator (0x0x7ff6d4e150d0)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7ff6d4e3a000) 0 empty
+
+Vtable for QIntValidator
+QIntValidator::_ZTV13QIntValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QIntValidator)
+16 (int (*)(...))QIntValidator::metaObject
+24 (int (*)(...))QIntValidator::qt_metacast
+32 (int (*)(...))QIntValidator::qt_metacall
+40 (int (*)(...))QIntValidator::~QIntValidator
+48 (int (*)(...))QIntValidator::~QIntValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIntValidator::validate
+120 (int (*)(...))QIntValidator::fixup
+
+Class QIntValidator
+ size=24 align=8
+ base size=24 base align=8
+QIntValidator (0x0x7ff6d4e15138) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+ QValidator (0x0x7ff6d4e151a0) 0
+ primary-for QIntValidator (0x0x7ff6d4e15138)
+ QObject (0x0x7ff6d4e06f60) 0
+ primary-for QValidator (0x0x7ff6d4e151a0)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7ff6d4e3a1e0) 0 empty
+
+Vtable for QDoubleValidator
+QDoubleValidator::_ZTV16QDoubleValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QDoubleValidator)
+16 (int (*)(...))QDoubleValidator::metaObject
+24 (int (*)(...))QDoubleValidator::qt_metacast
+32 (int (*)(...))QDoubleValidator::qt_metacall
+40 (int (*)(...))QDoubleValidator::~QDoubleValidator
+48 (int (*)(...))QDoubleValidator::~QDoubleValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDoubleValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QDoubleValidator
+ size=40 align=8
+ base size=36 base align=8
+QDoubleValidator (0x0x7ff6d4e15208) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+ QValidator (0x0x7ff6d4e15270) 0
+ primary-for QDoubleValidator (0x0x7ff6d4e15208)
+ QObject (0x0x7ff6d4e3a180) 0
+ primary-for QValidator (0x0x7ff6d4e15270)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7ff6d4e3a5a0) 0 empty
+
+Vtable for QRegularExpressionValidator
+QRegularExpressionValidator::_ZTV27QRegularExpressionValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QRegularExpressionValidator)
+16 (int (*)(...))QRegularExpressionValidator::metaObject
+24 (int (*)(...))QRegularExpressionValidator::qt_metacast
+32 (int (*)(...))QRegularExpressionValidator::qt_metacall
+40 (int (*)(...))QRegularExpressionValidator::~QRegularExpressionValidator
+48 (int (*)(...))QRegularExpressionValidator::~QRegularExpressionValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QRegularExpressionValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QRegularExpressionValidator
+ size=16 align=8
+ base size=16 base align=8
+QRegularExpressionValidator (0x0x7ff6d4e152d8) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+ QValidator (0x0x7ff6d4e15340) 0
+ primary-for QRegularExpressionValidator (0x0x7ff6d4e152d8)
+ QObject (0x0x7ff6d4e3a540) 0
+ primary-for QValidator (0x0x7ff6d4e15340)
+
+Vtable for QSqlDriverCreatorBase
+QSqlDriverCreatorBase::_ZTV21QSqlDriverCreatorBase: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QSqlDriverCreatorBase)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QSqlDriverCreatorBase
+ size=8 align=8
+ base size=8 base align=8
+QSqlDriverCreatorBase (0x0x7ff6d4e3aa20) 0 nearly-empty
+ vptr=((& QSqlDriverCreatorBase::_ZTV21QSqlDriverCreatorBase) + 16)
+
+Class QSqlDatabase
+ size=8 align=8
+ base size=8 base align=8
+QSqlDatabase (0x0x7ff6d4e3ad20) 0
+
+Class QSqlDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriver::QPrivateSignal (0x0x7ff6d4e3ade0) 0 empty
+
+Vtable for QSqlDriver
+QSqlDriver::_ZTV10QSqlDriver: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSqlDriver)
+16 (int (*)(...))QSqlDriver::metaObject
+24 (int (*)(...))QSqlDriver::qt_metacast
+32 (int (*)(...))QSqlDriver::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSqlDriver::isOpen
+120 (int (*)(...))QSqlDriver::beginTransaction
+128 (int (*)(...))QSqlDriver::commitTransaction
+136 (int (*)(...))QSqlDriver::rollbackTransaction
+144 (int (*)(...))QSqlDriver::tables
+152 (int (*)(...))QSqlDriver::primaryIndex
+160 (int (*)(...))QSqlDriver::record
+168 (int (*)(...))QSqlDriver::formatValue
+176 (int (*)(...))QSqlDriver::escapeIdentifier
+184 (int (*)(...))QSqlDriver::sqlStatement
+192 (int (*)(...))QSqlDriver::handle
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+232 (int (*)(...))QSqlDriver::subscribeToNotification
+240 (int (*)(...))QSqlDriver::unsubscribeFromNotification
+248 (int (*)(...))QSqlDriver::subscribedToNotifications
+256 (int (*)(...))QSqlDriver::isIdentifierEscaped
+264 (int (*)(...))QSqlDriver::stripDelimiters
+272 (int (*)(...))QSqlDriver::maximumIdentifierLength
+280 (int (*)(...))QSqlDriver::cancelQuery
+288 (int (*)(...))QSqlDriver::setOpen
+296 (int (*)(...))QSqlDriver::setOpenError
+304 (int (*)(...))QSqlDriver::setLastError
+
+Class QSqlDriver
+ size=16 align=8
+ base size=16 base align=8
+QSqlDriver (0x0x7ff6d4e15548) 0
+ vptr=((& QSqlDriver::_ZTV10QSqlDriver) + 16)
+ QObject (0x0x7ff6d4e3ad80) 0
+ primary-for QSqlDriver (0x0x7ff6d4e15548)
+
+Class QSqlDriverPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriverPlugin::QPrivateSignal (0x0x7ff6d4a92000) 0 empty
+
+Vtable for QSqlDriverPlugin
+QSqlDriverPlugin::_ZTV16QSqlDriverPlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSqlDriverPlugin)
+16 (int (*)(...))QSqlDriverPlugin::metaObject
+24 (int (*)(...))QSqlDriverPlugin::qt_metacast
+32 (int (*)(...))QSqlDriverPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QSqlDriverPlugin
+ size=16 align=8
+ base size=16 base align=8
+QSqlDriverPlugin (0x0x7ff6d4e155b0) 0
+ vptr=((& QSqlDriverPlugin::_ZTV16QSqlDriverPlugin) + 16)
+ QObject (0x0x7ff6d4e3af60) 0
+ primary-for QSqlDriverPlugin (0x0x7ff6d4e155b0)
+
+Class QSqlError
+ size=8 align=8
+ base size=8 base align=8
+QSqlError (0x0x7ff6d4a920c0) 0
+
+Class QSqlField
+ size=40 align=8
+ base size=40 base align=8
+QSqlField (0x0x7ff6d4ac3e40) 0
+
+Class QSqlRecord
+ size=8 align=8
+ base size=8 base align=8
+QSqlRecord (0x0x7ff6d4ade240) 0
+
+Class QSqlIndex
+ size=80 align=8
+ base size=80 base align=8
+QSqlIndex (0x0x7ff6d4acd340) 0
+ QSqlRecord (0x0x7ff6d4ade300) 0
+
+Class QSqlQuery
+ size=8 align=8
+ base size=8 base align=8
+QSqlQuery (0x0x7ff6d4ade840) 0
+
+Class QSqlQueryModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlQueryModel::QPrivateSignal (0x0x7ff6d4ade900) 0 empty
+
+Vtable for QSqlQueryModel
+QSqlQueryModel::_ZTV14QSqlQueryModel: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSqlQueryModel)
+16 (int (*)(...))QSqlQueryModel::metaObject
+24 (int (*)(...))QSqlQueryModel::qt_metacast
+32 (int (*)(...))QSqlQueryModel::qt_metacall
+40 (int (*)(...))QSqlQueryModel::~QSqlQueryModel
+48 (int (*)(...))QSqlQueryModel::~QSqlQueryModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractTableModel::index
+120 (int (*)(...))QAbstractTableModel::parent
+128 (int (*)(...))QAbstractTableModel::sibling
+136 (int (*)(...))QSqlQueryModel::rowCount
+144 (int (*)(...))QSqlQueryModel::columnCount
+152 (int (*)(...))QAbstractTableModel::hasChildren
+160 (int (*)(...))QSqlQueryModel::data
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QSqlQueryModel::headerData
+184 (int (*)(...))QSqlQueryModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractTableModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QSqlQueryModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QSqlQueryModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QSqlQueryModel::fetchMore
+320 (int (*)(...))QSqlQueryModel::canFetchMore
+328 (int (*)(...))QAbstractTableModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QSqlQueryModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QSqlQueryModel::clear
+416 (int (*)(...))QSqlQueryModel::queryChange
+424 (int (*)(...))QSqlQueryModel::indexInQuery
+
+Class QSqlQueryModel
+ size=16 align=8
+ base size=16 base align=8
+QSqlQueryModel (0x0x7ff6d4acd750) 0
+ vptr=((& QSqlQueryModel::_ZTV14QSqlQueryModel) + 16)
+ QAbstractTableModel (0x0x7ff6d4acd7b8) 0
+ primary-for QSqlQueryModel (0x0x7ff6d4acd750)
+ QAbstractItemModel (0x0x7ff6d4acd820) 0
+ primary-for QAbstractTableModel (0x0x7ff6d4acd7b8)
+ QObject (0x0x7ff6d4ade8a0) 0
+ primary-for QAbstractItemModel (0x0x7ff6d4acd820)
+
+Class QSqlTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlTableModel::QPrivateSignal (0x0x7ff6d4adeae0) 0 empty
+
+Vtable for QSqlTableModel
+QSqlTableModel::_ZTV14QSqlTableModel: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSqlTableModel)
+16 (int (*)(...))QSqlTableModel::metaObject
+24 (int (*)(...))QSqlTableModel::qt_metacast
+32 (int (*)(...))QSqlTableModel::qt_metacall
+40 (int (*)(...))QSqlTableModel::~QSqlTableModel
+48 (int (*)(...))QSqlTableModel::~QSqlTableModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractTableModel::index
+120 (int (*)(...))QAbstractTableModel::parent
+128 (int (*)(...))QAbstractTableModel::sibling
+136 (int (*)(...))QSqlTableModel::rowCount
+144 (int (*)(...))QSqlQueryModel::columnCount
+152 (int (*)(...))QAbstractTableModel::hasChildren
+160 (int (*)(...))QSqlTableModel::data
+168 (int (*)(...))QSqlTableModel::setData
+176 (int (*)(...))QSqlTableModel::headerData
+184 (int (*)(...))QSqlQueryModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QSqlTableModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractTableModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QSqlTableModel::insertRows
+272 (int (*)(...))QSqlQueryModel::insertColumns
+280 (int (*)(...))QSqlTableModel::removeRows
+288 (int (*)(...))QSqlTableModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QSqlQueryModel::fetchMore
+320 (int (*)(...))QSqlQueryModel::canFetchMore
+328 (int (*)(...))QSqlTableModel::flags
+336 (int (*)(...))QSqlTableModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QSqlQueryModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QSqlTableModel::submit
+392 (int (*)(...))QSqlTableModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QSqlTableModel::clear
+416 (int (*)(...))QSqlQueryModel::queryChange
+424 (int (*)(...))QSqlTableModel::indexInQuery
+432 (int (*)(...))QSqlTableModel::setTable
+440 (int (*)(...))QSqlTableModel::setEditStrategy
+448 (int (*)(...))QSqlTableModel::setSort
+456 (int (*)(...))QSqlTableModel::setFilter
+464 (int (*)(...))QSqlTableModel::revertRow
+472 (int (*)(...))QSqlTableModel::select
+480 (int (*)(...))QSqlTableModel::selectRow
+488 (int (*)(...))QSqlTableModel::updateRowInTable
+496 (int (*)(...))QSqlTableModel::insertRowIntoTable
+504 (int (*)(...))QSqlTableModel::deleteRowFromTable
+512 (int (*)(...))QSqlTableModel::orderByClause
+520 (int (*)(...))QSqlTableModel::selectStatement
+
+Class QSqlTableModel
+ size=16 align=8
+ base size=16 base align=8
+QSqlTableModel (0x0x7ff6d4acd888) 0
+ vptr=((& QSqlTableModel::_ZTV14QSqlTableModel) + 16)
+ QSqlQueryModel (0x0x7ff6d4acd8f0) 0
+ primary-for QSqlTableModel (0x0x7ff6d4acd888)
+ QAbstractTableModel (0x0x7ff6d4acd958) 0
+ primary-for QSqlQueryModel (0x0x7ff6d4acd8f0)
+ QAbstractItemModel (0x0x7ff6d4acd9c0) 0
+ primary-for QAbstractTableModel (0x0x7ff6d4acd958)
+ QObject (0x0x7ff6d4adea80) 0
+ primary-for QAbstractItemModel (0x0x7ff6d4acd9c0)
+
+Class QSqlRelation
+ size=72 align=8
+ base size=72 base align=8
+QSqlRelation (0x0x7ff6d4adec60) 0
+
+Class QSqlRelationalTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlRelationalTableModel::QPrivateSignal (0x0x7ff6d4b6dde0) 0 empty
+
+Vtable for QSqlRelationalTableModel
+QSqlRelationalTableModel::_ZTV24QSqlRelationalTableModel: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QSqlRelationalTableModel)
+16 (int (*)(...))QSqlRelationalTableModel::metaObject
+24 (int (*)(...))QSqlRelationalTableModel::qt_metacast
+32 (int (*)(...))QSqlRelationalTableModel::qt_metacall
+40 (int (*)(...))QSqlRelationalTableModel::~QSqlRelationalTableModel
+48 (int (*)(...))QSqlRelationalTableModel::~QSqlRelationalTableModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractTableModel::index
+120 (int (*)(...))QAbstractTableModel::parent
+128 (int (*)(...))QAbstractTableModel::sibling
+136 (int (*)(...))QSqlTableModel::rowCount
+144 (int (*)(...))QSqlQueryModel::columnCount
+152 (int (*)(...))QAbstractTableModel::hasChildren
+160 (int (*)(...))QSqlRelationalTableModel::data
+168 (int (*)(...))QSqlRelationalTableModel::setData
+176 (int (*)(...))QSqlTableModel::headerData
+184 (int (*)(...))QSqlQueryModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QSqlTableModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractTableModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QSqlTableModel::insertRows
+272 (int (*)(...))QSqlQueryModel::insertColumns
+280 (int (*)(...))QSqlTableModel::removeRows
+288 (int (*)(...))QSqlRelationalTableModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QSqlQueryModel::fetchMore
+320 (int (*)(...))QSqlQueryModel::canFetchMore
+328 (int (*)(...))QSqlTableModel::flags
+336 (int (*)(...))QSqlTableModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QSqlQueryModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QSqlTableModel::submit
+392 (int (*)(...))QSqlTableModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QSqlRelationalTableModel::clear
+416 (int (*)(...))QSqlQueryModel::queryChange
+424 (int (*)(...))QSqlTableModel::indexInQuery
+432 (int (*)(...))QSqlRelationalTableModel::setTable
+440 (int (*)(...))QSqlTableModel::setEditStrategy
+448 (int (*)(...))QSqlTableModel::setSort
+456 (int (*)(...))QSqlTableModel::setFilter
+464 (int (*)(...))QSqlRelationalTableModel::revertRow
+472 (int (*)(...))QSqlRelationalTableModel::select
+480 (int (*)(...))QSqlTableModel::selectRow
+488 (int (*)(...))QSqlRelationalTableModel::updateRowInTable
+496 (int (*)(...))QSqlRelationalTableModel::insertRowIntoTable
+504 (int (*)(...))QSqlTableModel::deleteRowFromTable
+512 (int (*)(...))QSqlRelationalTableModel::orderByClause
+520 (int (*)(...))QSqlRelationalTableModel::selectStatement
+528 (int (*)(...))QSqlRelationalTableModel::setRelation
+536 (int (*)(...))QSqlRelationalTableModel::relationModel
+
+Class QSqlRelationalTableModel
+ size=16 align=8
+ base size=16 base align=8
+QSqlRelationalTableModel (0x0x7ff6d4b73c98) 0
+ vptr=((& QSqlRelationalTableModel::_ZTV24QSqlRelationalTableModel) + 16)
+ QSqlTableModel (0x0x7ff6d4b73d00) 0
+ primary-for QSqlRelationalTableModel (0x0x7ff6d4b73c98)
+ QSqlQueryModel (0x0x7ff6d4b73d68) 0
+ primary-for QSqlTableModel (0x0x7ff6d4b73d00)
+ QAbstractTableModel (0x0x7ff6d4b73dd0) 0
+ primary-for QSqlQueryModel (0x0x7ff6d4b73d68)
+ QAbstractItemModel (0x0x7ff6d4b73e38) 0
+ primary-for QAbstractTableModel (0x0x7ff6d4b73dd0)
+ QObject (0x0x7ff6d4b6dd80) 0
+ primary-for QAbstractItemModel (0x0x7ff6d4b73e38)
+
+Vtable for QSqlResult
+QSqlResult::_ZTV10QSqlResult: 33 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSqlResult)
+16 0
+24 0
+32 (int (*)(...))QSqlResult::handle
+40 (int (*)(...))QSqlResult::setAt
+48 (int (*)(...))QSqlResult::setActive
+56 (int (*)(...))QSqlResult::setLastError
+64 (int (*)(...))QSqlResult::setQuery
+72 (int (*)(...))QSqlResult::setSelect
+80 (int (*)(...))QSqlResult::setForwardOnly
+88 (int (*)(...))QSqlResult::exec
+96 (int (*)(...))QSqlResult::prepare
+104 (int (*)(...))QSqlResult::savePrepare
+112 (int (*)(...))QSqlResult::bindValue
+120 (int (*)(...))QSqlResult::bindValue
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))QSqlResult::fetchNext
+168 (int (*)(...))QSqlResult::fetchPrevious
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))QSqlResult::record
+216 (int (*)(...))QSqlResult::lastInsertId
+224 (int (*)(...))QSqlResult::virtual_hook
+232 (int (*)(...))QSqlResult::execBatch
+240 (int (*)(...))QSqlResult::detachFromResultSet
+248 (int (*)(...))QSqlResult::setNumericalPrecisionPolicy
+256 (int (*)(...))QSqlResult::nextResult
+
+Class QSqlResult
+ size=16 align=8
+ base size=16 base align=8
+QSqlResult (0x0x7ff6d4b6df60) 0
+ vptr=((& QSqlResult::_ZTV10QSqlResult) + 16)
+
+Class QSizePolicy::Bits
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy::Bits (0x0x7ff6d4b98120) 0
+
+Class QSizePolicy
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy (0x0x7ff6d4b980c0) 0
+
+Class QWidgetData
+ size=88 align=8
+ base size=88 base align=8
+QWidgetData (0x0x7ff6d4bed0c0) 0
+
+Class QWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidget::QPrivateSignal (0x0x7ff6d4bed1e0) 0 empty
+
+Vtable for QWidget
+QWidget::_ZTV7QWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWidget)
+16 (int (*)(...))QWidget::metaObject
+24 (int (*)(...))QWidget::qt_metacast
+32 (int (*)(...))QWidget::qt_metacall
+40 (int (*)(...))QWidget::~QWidget
+48 (int (*)(...))QWidget::~QWidget
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI7QWidget)
+448 (int (*)(...))QWidget::_ZThn16_N7QWidgetD1Ev
+456 (int (*)(...))QWidget::_ZThn16_N7QWidgetD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWidget
+ size=40 align=8
+ base size=40 base align=8
+QWidget (0x0x7ff6d4b9c5b0) 0
+ vptr=((& QWidget::_ZTV7QWidget) + 16)
+ QObject (0x0x7ff6d4bed120) 0
+ primary-for QWidget (0x0x7ff6d4b9c5b0)
+ QPaintDevice (0x0x7ff6d4bed180) 16
+ vptr=((& QWidget::_ZTV7QWidget) + 448)
+
+Class QAbstractButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractButton::QPrivateSignal (0x0x7ff6d4854a80) 0 empty
+
+Vtable for QAbstractButton
+QAbstractButton::_ZTV15QAbstractButton: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractButton)
+16 (int (*)(...))QAbstractButton::metaObject
+24 (int (*)(...))QAbstractButton::qt_metacast
+32 (int (*)(...))QAbstractButton::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI15QAbstractButton)
+472 0
+480 0
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractButton
+ size=40 align=8
+ base size=40 base align=8
+QAbstractButton (0x0x7ff6d4bdfe38) 0
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 16)
+ QWidget (0x0x7ff6d4b9c7e0) 0
+ primary-for QAbstractButton (0x0x7ff6d4bdfe38)
+ QObject (0x0x7ff6d48549c0) 0
+ primary-for QWidget (0x0x7ff6d4b9c7e0)
+ QPaintDevice (0x0x7ff6d4854a20) 16
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 472)
+
+Class QAbstractSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSpinBox::QPrivateSignal (0x0x7ff6d4854cc0) 0 empty
+
+Vtable for QAbstractSpinBox
+QAbstractSpinBox::_ZTV16QAbstractSpinBox: 70 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAbstractSpinBox)
+16 (int (*)(...))QAbstractSpinBox::metaObject
+24 (int (*)(...))QAbstractSpinBox::qt_metacast
+32 (int (*)(...))QAbstractSpinBox::qt_metacall
+40 (int (*)(...))QAbstractSpinBox::~QAbstractSpinBox
+48 (int (*)(...))QAbstractSpinBox::~QAbstractSpinBox
+56 (int (*)(...))QAbstractSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSpinBox::validate
+440 (int (*)(...))QAbstractSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI16QAbstractSpinBox)
+496 (int (*)(...))QAbstractSpinBox::_ZThn16_N16QAbstractSpinBoxD1Ev
+504 (int (*)(...))QAbstractSpinBox::_ZThn16_N16QAbstractSpinBoxD0Ev
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QAbstractSpinBox (0x0x7ff6d4bdfea0) 0
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 16)
+ QWidget (0x0x7ff6d4b9c850) 0
+ primary-for QAbstractSpinBox (0x0x7ff6d4bdfea0)
+ QObject (0x0x7ff6d4854c00) 0
+ primary-for QWidget (0x0x7ff6d4b9c850)
+ QPaintDevice (0x0x7ff6d4854c60) 16
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 496)
+
+Class QAbstractSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSlider::QPrivateSignal (0x0x7ff6d4888480) 0 empty
+
+Vtable for QAbstractSlider
+QAbstractSlider::_ZTV15QAbstractSlider: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractSlider)
+16 (int (*)(...))QAbstractSlider::metaObject
+24 (int (*)(...))QAbstractSlider::qt_metacast
+32 (int (*)(...))QAbstractSlider::qt_metacall
+40 (int (*)(...))QAbstractSlider::~QAbstractSlider
+48 (int (*)(...))QAbstractSlider::~QAbstractSlider
+56 (int (*)(...))QAbstractSlider::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSlider::sliderChange
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI15QAbstractSlider)
+456 (int (*)(...))QAbstractSlider::_ZThn16_N15QAbstractSliderD1Ev
+464 (int (*)(...))QAbstractSlider::_ZThn16_N15QAbstractSliderD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractSlider
+ size=40 align=8
+ base size=40 base align=8
+QAbstractSlider (0x0x7ff6d488a068) 0
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 16)
+ QWidget (0x0x7ff6d4b9cd90) 0
+ primary-for QAbstractSlider (0x0x7ff6d488a068)
+ QObject (0x0x7ff6d48883c0) 0
+ primary-for QWidget (0x0x7ff6d4b9cd90)
+ QPaintDevice (0x0x7ff6d4888420) 16
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 456)
+
+Class QSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSlider::QPrivateSignal (0x0x7ff6d48886c0) 0 empty
+
+Vtable for QSlider
+QSlider::_ZTV7QSlider: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QSlider)
+16 (int (*)(...))QSlider::metaObject
+24 (int (*)(...))QSlider::qt_metacast
+32 (int (*)(...))QSlider::qt_metacall
+40 (int (*)(...))QSlider::~QSlider
+48 (int (*)(...))QSlider::~QSlider
+56 (int (*)(...))QSlider::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSlider::sizeHint
+136 (int (*)(...))QSlider::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSlider::mousePressEvent
+176 (int (*)(...))QSlider::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSlider::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSlider::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSlider::sliderChange
+440 (int (*)(...))QSlider::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI7QSlider)
+464 (int (*)(...))QSlider::_ZThn16_N7QSliderD1Ev
+472 (int (*)(...))QSlider::_ZThn16_N7QSliderD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSlider
+ size=40 align=8
+ base size=40 base align=8
+QSlider (0x0x7ff6d488a0d0) 0
+ vptr=((& QSlider::_ZTV7QSlider) + 16)
+ QAbstractSlider (0x0x7ff6d488a138) 0
+ primary-for QSlider (0x0x7ff6d488a0d0)
+ QWidget (0x0x7ff6d48a42a0) 0
+ primary-for QAbstractSlider (0x0x7ff6d488a138)
+ QObject (0x0x7ff6d4888600) 0
+ primary-for QWidget (0x0x7ff6d48a42a0)
+ QPaintDevice (0x0x7ff6d4888660) 16
+ vptr=((& QSlider::_ZTV7QSlider) + 464)
+
+Class QStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyle::QPrivateSignal (0x0x7ff6d4888960) 0 empty
+
+Vtable for QStyle
+QStyle::_ZTV6QStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QStyle)
+16 (int (*)(...))QStyle::metaObject
+24 (int (*)(...))QStyle::qt_metacast
+32 (int (*)(...))QStyle::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStyle::polish
+120 (int (*)(...))QStyle::unpolish
+128 (int (*)(...))QStyle::polish
+136 (int (*)(...))QStyle::unpolish
+144 (int (*)(...))QStyle::polish
+152 (int (*)(...))QStyle::itemTextRect
+160 (int (*)(...))QStyle::itemPixmapRect
+168 (int (*)(...))QStyle::drawItemText
+176 (int (*)(...))QStyle::drawItemPixmap
+184 (int (*)(...))QStyle::standardPalette
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+232 (int (*)(...))__cxa_pure_virtual
+240 (int (*)(...))__cxa_pure_virtual
+248 (int (*)(...))__cxa_pure_virtual
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))__cxa_pure_virtual
+272 (int (*)(...))__cxa_pure_virtual
+280 (int (*)(...))__cxa_pure_virtual
+288 (int (*)(...))__cxa_pure_virtual
+
+Class QStyle
+ size=16 align=8
+ base size=16 base align=8
+QStyle (0x0x7ff6d488a1a0) 0
+ vptr=((& QStyle::_ZTV6QStyle) + 16)
+ QObject (0x0x7ff6d4888900) 0
+ primary-for QStyle (0x0x7ff6d488a1a0)
+
+Class QTabBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabBar::QPrivateSignal (0x0x7ff6d48f0a20) 0 empty
+
+Vtable for QTabBar
+QTabBar::_ZTV7QTabBar: 70 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QTabBar)
+16 (int (*)(...))QTabBar::metaObject
+24 (int (*)(...))QTabBar::qt_metacast
+32 (int (*)(...))QTabBar::qt_metacall
+40 (int (*)(...))QTabBar::~QTabBar
+48 (int (*)(...))QTabBar::~QTabBar
+56 (int (*)(...))QTabBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTabBar::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QTabBar::sizeHint
+136 (int (*)(...))QTabBar::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTabBar::mousePressEvent
+176 (int (*)(...))QTabBar::mouseReleaseEvent
+184 (int (*)(...))QTabBar::mouseDoubleClickEvent
+192 (int (*)(...))QTabBar::mouseMoveEvent
+200 (int (*)(...))QTabBar::wheelEvent
+208 (int (*)(...))QTabBar::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTabBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTabBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QTabBar::showEvent
+352 (int (*)(...))QTabBar::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTabBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QTabBar::tabSizeHint
+440 (int (*)(...))QTabBar::minimumTabSizeHint
+448 (int (*)(...))QTabBar::tabInserted
+456 (int (*)(...))QTabBar::tabRemoved
+464 (int (*)(...))QTabBar::tabLayoutChange
+472 (int (*)(...))QTabBar::initStyleOption
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI7QTabBar)
+496 (int (*)(...))QTabBar::_ZThn16_N7QTabBarD1Ev
+504 (int (*)(...))QTabBar::_ZThn16_N7QTabBarD0Ev
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTabBar
+ size=40 align=8
+ base size=40 base align=8
+QTabBar (0x0x7ff6d488a478) 0
+ vptr=((& QTabBar::_ZTV7QTabBar) + 16)
+ QWidget (0x0x7ff6d48e0d20) 0
+ primary-for QTabBar (0x0x7ff6d488a478)
+ QObject (0x0x7ff6d48f0960) 0
+ primary-for QWidget (0x0x7ff6d48e0d20)
+ QPaintDevice (0x0x7ff6d48f09c0) 16
+ vptr=((& QTabBar::_ZTV7QTabBar) + 496)
+
+Class QTabWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabWidget::QPrivateSignal (0x0x7ff6d48f0d20) 0 empty
+
+Vtable for QTabWidget
+QTabWidget::_ZTV10QTabWidget: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTabWidget)
+16 (int (*)(...))QTabWidget::metaObject
+24 (int (*)(...))QTabWidget::qt_metacast
+32 (int (*)(...))QTabWidget::qt_metacall
+40 (int (*)(...))QTabWidget::~QTabWidget
+48 (int (*)(...))QTabWidget::~QTabWidget
+56 (int (*)(...))QTabWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QTabWidget::sizeHint
+136 (int (*)(...))QTabWidget::minimumSizeHint
+144 (int (*)(...))QTabWidget::heightForWidth
+152 (int (*)(...))QTabWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QTabWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTabWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTabWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QTabWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTabWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QTabWidget::tabInserted
+440 (int (*)(...))QTabWidget::tabRemoved
+448 (int (*)(...))QTabWidget::initStyleOption
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI10QTabWidget)
+472 (int (*)(...))QTabWidget::_ZThn16_N10QTabWidgetD1Ev
+480 (int (*)(...))QTabWidget::_ZThn16_N10QTabWidgetD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTabWidget
+ size=40 align=8
+ base size=40 base align=8
+QTabWidget (0x0x7ff6d488a4e0) 0
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 16)
+ QWidget (0x0x7ff6d491e380) 0
+ primary-for QTabWidget (0x0x7ff6d488a4e0)
+ QObject (0x0x7ff6d48f0c60) 0
+ primary-for QWidget (0x0x7ff6d491e380)
+ QPaintDevice (0x0x7ff6d48f0cc0) 16
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 472)
+
+Class QRubberBand::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRubberBand::QPrivateSignal (0x0x7ff6d494e120) 0 empty
+
+Vtable for QRubberBand
+QRubberBand::_ZTV11QRubberBand: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QRubberBand)
+16 (int (*)(...))QRubberBand::metaObject
+24 (int (*)(...))QRubberBand::qt_metacast
+32 (int (*)(...))QRubberBand::qt_metacall
+40 (int (*)(...))QRubberBand::~QRubberBand
+48 (int (*)(...))QRubberBand::~QRubberBand
+56 (int (*)(...))QRubberBand::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QRubberBand::paintEvent
+264 (int (*)(...))QRubberBand::moveEvent
+272 (int (*)(...))QRubberBand::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QRubberBand::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QRubberBand::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QRubberBand::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QRubberBand)
+456 (int (*)(...))QRubberBand::_ZThn16_N11QRubberBandD1Ev
+464 (int (*)(...))QRubberBand::_ZThn16_N11QRubberBandD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QRubberBand
+ size=40 align=8
+ base size=40 base align=8
+QRubberBand (0x0x7ff6d488a548) 0
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 16)
+ QWidget (0x0x7ff6d491e690) 0
+ primary-for QRubberBand (0x0x7ff6d488a548)
+ QObject (0x0x7ff6d494e060) 0
+ primary-for QWidget (0x0x7ff6d491e690)
+ QPaintDevice (0x0x7ff6d494e0c0) 16
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 456)
+
+Class QFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFrame::QPrivateSignal (0x0x7ff6d494e540) 0 empty
+
+Vtable for QFrame
+QFrame::_ZTV6QFrame: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QFrame)
+16 (int (*)(...))QFrame::metaObject
+24 (int (*)(...))QFrame::qt_metacast
+32 (int (*)(...))QFrame::qt_metacall
+40 (int (*)(...))QFrame::~QFrame
+48 (int (*)(...))QFrame::~QFrame
+56 (int (*)(...))QFrame::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI6QFrame)
+456 (int (*)(...))QFrame::_ZThn16_N6QFrameD1Ev
+464 (int (*)(...))QFrame::_ZThn16_N6QFrameD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFrame
+ size=40 align=8
+ base size=40 base align=8
+QFrame (0x0x7ff6d488a5b0) 0
+ vptr=((& QFrame::_ZTV6QFrame) + 16)
+ QWidget (0x0x7ff6d491e7e0) 0
+ primary-for QFrame (0x0x7ff6d488a5b0)
+ QObject (0x0x7ff6d494e480) 0
+ primary-for QWidget (0x0x7ff6d491e7e0)
+ QPaintDevice (0x0x7ff6d494e4e0) 16
+ vptr=((& QFrame::_ZTV6QFrame) + 456)
+
+Class QStyleOption
+ size=64 align=8
+ base size=64 base align=8
+QStyleOption (0x0x7ff6d494e840) 0
+
+Class QStyleOptionFocusRect
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFocusRect (0x0x7ff6d488a618) 0
+ QStyleOption (0x0x7ff6d494e8a0) 0
+
+Class QStyleOptionFrame
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFrame (0x0x7ff6d7b0b410) 0
+ QStyleOption (0x0x7ff6d494eae0) 0
+
+Class QStyleOptionTabWidgetFrame
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionTabWidgetFrame (0x0x7ff6d7b0b5b0) 0
+ QStyleOption (0x0x7ff6d4993060) 0
+
+Class QStyleOptionTabBarBase
+ size=104 align=8
+ base size=101 base align=8
+QStyleOptionTabBarBase (0x0x7ff6d488a680) 0
+ QStyleOption (0x0x7ff6d49932a0) 0
+
+Class QStyleOptionHeader
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionHeader (0x0x7ff6d488a6e8) 0
+ QStyleOption (0x0x7ff6d49934e0) 0
+
+Class QStyleOptionButton
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionButton (0x0x7ff6d488a750) 0
+ QStyleOption (0x0x7ff6d4993720) 0
+
+Class QStyleOptionTab
+ size=160 align=8
+ base size=156 base align=8
+QStyleOptionTab (0x0x7ff6d488a8f0) 0
+ QStyleOption (0x0x7ff6d4993c60) 0
+
+Class QStyleOptionToolBar
+ size=88 align=8
+ base size=88 base align=8
+QStyleOptionToolBar (0x0x7ff6d488abc8) 0
+ QStyleOption (0x0x7ff6d49d73c0) 0
+
+Class QStyleOptionProgressBar
+ size=112 align=8
+ base size=111 base align=8
+QStyleOptionProgressBar (0x0x7ff6d488ad68) 0
+ QStyleOption (0x0x7ff6d49d7900) 0
+
+Class QStyleOptionMenuItem
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionMenuItem (0x0x7ff6d488add0) 0
+ QStyleOption (0x0x7ff6d49d7b40) 0
+
+Class QStyleOptionDockWidget
+ size=96 align=8
+ base size=92 base align=8
+QStyleOptionDockWidget (0x0x7ff6d488ae38) 0
+ QStyleOption (0x0x7ff6d49d7d80) 0
+
+Class QStyleOptionViewItem
+ size=208 align=8
+ base size=208 base align=8
+QStyleOptionViewItem (0x0x7ff6d488aea0) 0
+ QStyleOption (0x0x7ff6d4a21000) 0
+
+Class QStyleOptionToolBox
+ size=104 align=8
+ base size=104 base align=8
+QStyleOptionToolBox (0x0x7ff6d4a27068) 0
+ QStyleOption (0x0x7ff6d4a21540) 0
+
+Class QStyleOptionRubberBand
+ size=72 align=8
+ base size=69 base align=8
+QStyleOptionRubberBand (0x0x7ff6d4a270d0) 0
+ QStyleOption (0x0x7ff6d4a21780) 0
+
+Class QStyleOptionComplex
+ size=72 align=8
+ base size=72 base align=8
+QStyleOptionComplex (0x0x7ff6d4a27138) 0
+ QStyleOption (0x0x7ff6d4a21a20) 0
+
+Class QStyleOptionSlider
+ size=128 align=8
+ base size=128 base align=8
+QStyleOptionSlider (0x0x7ff6d4a271a0) 0
+ QStyleOptionComplex (0x0x7ff6d4a27208) 0
+ QStyleOption (0x0x7ff6d4a21cc0) 0
+
+Class QStyleOptionSpinBox
+ size=88 align=8
+ base size=81 base align=8
+QStyleOptionSpinBox (0x0x7ff6d4a272d8) 0
+ QStyleOptionComplex (0x0x7ff6d4a27340) 0
+ QStyleOption (0x0x7ff6d465a060) 0
+
+Class QStyleOptionToolButton
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionToolButton (0x0x7ff6d4a27410) 0
+ QStyleOptionComplex (0x0x7ff6d4a27478) 0
+ QStyleOption (0x0x7ff6d465a2a0) 0
+
+Class QStyleOptionComboBox
+ size=144 align=8
+ base size=140 base align=8
+QStyleOptionComboBox (0x0x7ff6d4a27618) 0
+ QStyleOptionComplex (0x0x7ff6d4a27680) 0
+ QStyleOption (0x0x7ff6d465a7e0) 0
+
+Class QStyleOptionTitleBar
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionTitleBar (0x0x7ff6d4a276e8) 0
+ QStyleOptionComplex (0x0x7ff6d4a27750) 0
+ QStyleOption (0x0x7ff6d465aa20) 0
+
+Class QStyleOptionGroupBox
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionGroupBox (0x0x7ff6d4a277b8) 0
+ QStyleOptionComplex (0x0x7ff6d4a27820) 0
+ QStyleOption (0x0x7ff6d465ac60) 0
+
+Class QStyleOptionSizeGrip
+ size=80 align=8
+ base size=76 base align=8
+QStyleOptionSizeGrip (0x0x7ff6d4a27888) 0
+ QStyleOptionComplex (0x0x7ff6d4a278f0) 0
+ QStyleOption (0x0x7ff6d465aea0) 0
+
+Class QStyleOptionGraphicsItem
+ size=96 align=8
+ base size=96 base align=8
+QStyleOptionGraphicsItem (0x0x7ff6d4a27958) 0
+ QStyleOption (0x0x7ff6d4694120) 0
+
+Class QStyleHintReturn
+ size=8 align=4
+ base size=8 base align=4
+QStyleHintReturn (0x0x7ff6d4694480) 0
+
+Class QStyleHintReturnMask
+ size=16 align=8
+ base size=16 base align=8
+QStyleHintReturnMask (0x0x7ff6d4a279c0) 0
+ QStyleHintReturn (0x0x7ff6d46944e0) 0
+
+Class QStyleHintReturnVariant
+ size=40 align=8
+ base size=40 base align=8
+QStyleHintReturnVariant (0x0x7ff6d4a27a90) 0
+ QStyleHintReturn (0x0x7ff6d4694540) 0
+
+Class QAbstractItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemDelegate::QPrivateSignal (0x0x7ff6d46946c0) 0 empty
+
+Vtable for QAbstractItemDelegate
+QAbstractItemDelegate::_ZTV21QAbstractItemDelegate: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QAbstractItemDelegate)
+16 (int (*)(...))QAbstractItemDelegate::metaObject
+24 (int (*)(...))QAbstractItemDelegate::qt_metacast
+32 (int (*)(...))QAbstractItemDelegate::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QAbstractItemDelegate::setEditorData
+152 (int (*)(...))QAbstractItemDelegate::setModelData
+160 (int (*)(...))QAbstractItemDelegate::updateEditorGeometry
+168 (int (*)(...))QAbstractItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+
+Class QAbstractItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemDelegate (0x0x7ff6d4a27b60) 0
+ vptr=((& QAbstractItemDelegate::_ZTV21QAbstractItemDelegate) + 16)
+ QObject (0x0x7ff6d4694660) 0
+ primary-for QAbstractItemDelegate (0x0x7ff6d4a27b60)
+
+Class QAbstractScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractScrollArea::QPrivateSignal (0x0x7ff6d4694900) 0 empty
+
+Vtable for QAbstractScrollArea
+QAbstractScrollArea::_ZTV19QAbstractScrollArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractScrollArea)
+16 (int (*)(...))QAbstractScrollArea::metaObject
+24 (int (*)(...))QAbstractScrollArea::qt_metacast
+32 (int (*)(...))QAbstractScrollArea::qt_metacall
+40 (int (*)(...))QAbstractScrollArea::~QAbstractScrollArea
+48 (int (*)(...))QAbstractScrollArea::~QAbstractScrollArea
+56 (int (*)(...))QAbstractScrollArea::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractScrollArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QAbstractScrollArea::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI19QAbstractScrollArea)
+488 (int (*)(...))QAbstractScrollArea::_ZThn16_N19QAbstractScrollAreaD1Ev
+496 (int (*)(...))QAbstractScrollArea::_ZThn16_N19QAbstractScrollAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractScrollArea
+ size=40 align=8
+ base size=40 base align=8
+QAbstractScrollArea (0x0x7ff6d4a27bc8) 0
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 16)
+ QFrame (0x0x7ff6d4a27c30) 0
+ primary-for QAbstractScrollArea (0x0x7ff6d4a27bc8)
+ QWidget (0x0x7ff6d4682a10) 0
+ primary-for QFrame (0x0x7ff6d4a27c30)
+ QObject (0x0x7ff6d4694840) 0
+ primary-for QWidget (0x0x7ff6d4682a10)
+ QPaintDevice (0x0x7ff6d46948a0) 16
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 488)
+
+Class QAbstractItemView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemView::QPrivateSignal (0x0x7ff6d4694c00) 0 empty
+
+Vtable for QAbstractItemView
+QAbstractItemView::_ZTV17QAbstractItemView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAbstractItemView)
+16 (int (*)(...))QAbstractItemView::metaObject
+24 (int (*)(...))QAbstractItemView::qt_metacast
+32 (int (*)(...))QAbstractItemView::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QAbstractScrollArea::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))__cxa_pure_virtual
+504 (int (*)(...))__cxa_pure_virtual
+512 (int (*)(...))__cxa_pure_virtual
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QAbstractItemView::setRootIndex
+560 (int (*)(...))QAbstractItemView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QAbstractItemView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QAbstractItemView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))__cxa_pure_virtual
+704 (int (*)(...))__cxa_pure_virtual
+712 (int (*)(...))__cxa_pure_virtual
+720 (int (*)(...))__cxa_pure_virtual
+728 (int (*)(...))__cxa_pure_virtual
+736 (int (*)(...))__cxa_pure_virtual
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI17QAbstractItemView)
+800 0
+808 0
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractItemView
+ size=40 align=8
+ base size=40 base align=8
+QAbstractItemView (0x0x7ff6d4a27c98) 0
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 16)
+ QAbstractScrollArea (0x0x7ff6d4a27d00) 0
+ primary-for QAbstractItemView (0x0x7ff6d4a27c98)
+ QFrame (0x0x7ff6d4a27d68) 0
+ primary-for QAbstractScrollArea (0x0x7ff6d4a27d00)
+ QWidget (0x0x7ff6d4682bd0) 0
+ primary-for QFrame (0x0x7ff6d4a27d68)
+ QObject (0x0x7ff6d4694b40) 0
+ primary-for QWidget (0x0x7ff6d4682bd0)
+ QPaintDevice (0x0x7ff6d4694ba0) 16
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 800)
+
+Vtable for QAccessibleWidget
+QAccessibleWidget::_ZTV17QAccessibleWidget: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleWidget)
+16 (int (*)(...))QAccessibleWidget::~QAccessibleWidget
+24 (int (*)(...))QAccessibleWidget::~QAccessibleWidget
+32 (int (*)(...))QAccessibleWidget::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleWidget::window
+56 (int (*)(...))QAccessibleWidget::relations
+64 (int (*)(...))QAccessibleWidget::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))QAccessibleWidget::parent
+88 (int (*)(...))QAccessibleWidget::child
+96 (int (*)(...))QAccessibleWidget::childCount
+104 (int (*)(...))QAccessibleWidget::indexOfChild
+112 (int (*)(...))QAccessibleWidget::text
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleWidget::rect
+136 (int (*)(...))QAccessibleWidget::role
+144 (int (*)(...))QAccessibleWidget::state
+152 (int (*)(...))QAccessibleWidget::foregroundColor
+160 (int (*)(...))QAccessibleWidget::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleWidget::interface_cast
+184 (int (*)(...))QAccessibleWidget::actionNames
+192 (int (*)(...))QAccessibleWidget::doAction
+200 (int (*)(...))QAccessibleWidget::keyBindingsForAction
+208 (int (*)(...))-16
+216 (int (*)(...))(& _ZTI17QAccessibleWidget)
+224 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidgetD1Ev
+232 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidgetD0Ev
+240 (int (*)(...))QAccessibleWidget::_ZThn16_NK17QAccessibleWidget11actionNamesEv
+248 (int (*)(...))QAccessibleActionInterface::localizedActionName
+256 (int (*)(...))QAccessibleActionInterface::localizedActionDescription
+264 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidget8doActionERK7QString
+272 (int (*)(...))QAccessibleWidget::_ZThn16_NK17QAccessibleWidget20keyBindingsForActionERK7QString
+
+Class QAccessibleWidget
+ size=32 align=8
+ base size=32 base align=8
+QAccessibleWidget (0x0x7ff6d46ea150) 0
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 16)
+ QAccessibleObject (0x0x7ff6d4a27f08) 0
+ primary-for QAccessibleWidget (0x0x7ff6d46ea150)
+ QAccessibleInterface (0x0x7ff6d46f55a0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7ff6d4a27f08)
+ QAccessibleActionInterface (0x0x7ff6d46f5600) 16 nearly-empty
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 224)
+
+Class QApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QApplication::QPrivateSignal (0x0x7ff6d46f5720) 0 empty
+
+Vtable for QApplication
+QApplication::_ZTV12QApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QApplication)
+16 (int (*)(...))QApplication::metaObject
+24 (int (*)(...))QApplication::qt_metacast
+32 (int (*)(...))QApplication::qt_metacall
+40 (int (*)(...))QApplication::~QApplication
+48 (int (*)(...))QApplication::~QApplication
+56 (int (*)(...))QApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QApplication::notify
+120 (int (*)(...))QApplication::compressEvent
+
+Class QApplication
+ size=16 align=8
+ base size=16 base align=8
+QApplication (0x0x7ff6d4a27f70) 0
+ vptr=((& QApplication::_ZTV12QApplication) + 16)
+ QGuiApplication (0x0x7ff6d4a27270) 0
+ primary-for QApplication (0x0x7ff6d4a27f70)
+ QCoreApplication (0x0x7ff6d4716000) 0
+ primary-for QGuiApplication (0x0x7ff6d4a27270)
+ QObject (0x0x7ff6d46f56c0) 0
+ primary-for QCoreApplication (0x0x7ff6d4716000)
+
+Vtable for QLayoutItem
+QLayoutItem::_ZTV11QLayoutItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QLayoutItem)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QLayoutItem::hasHeightForWidth
+96 (int (*)(...))QLayoutItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QLayoutItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QLayoutItem::controlTypes
+
+Class QLayoutItem
+ size=16 align=8
+ base size=12 base align=8
+QLayoutItem (0x0x7ff6d46f5960) 0
+ vptr=((& QLayoutItem::_ZTV11QLayoutItem) + 16)
+
+Vtable for QSpacerItem
+QSpacerItem::_ZTV11QSpacerItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSpacerItem)
+16 (int (*)(...))QSpacerItem::~QSpacerItem
+24 (int (*)(...))QSpacerItem::~QSpacerItem
+32 (int (*)(...))QSpacerItem::sizeHint
+40 (int (*)(...))QSpacerItem::minimumSize
+48 (int (*)(...))QSpacerItem::maximumSize
+56 (int (*)(...))QSpacerItem::expandingDirections
+64 (int (*)(...))QSpacerItem::setGeometry
+72 (int (*)(...))QSpacerItem::geometry
+80 (int (*)(...))QSpacerItem::isEmpty
+88 (int (*)(...))QLayoutItem::hasHeightForWidth
+96 (int (*)(...))QLayoutItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QLayoutItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QSpacerItem::spacerItem
+144 (int (*)(...))QLayoutItem::controlTypes
+
+Class QSpacerItem
+ size=40 align=8
+ base size=40 base align=8
+QSpacerItem (0x0x7ff6d4716068) 0
+ vptr=((& QSpacerItem::_ZTV11QSpacerItem) + 16)
+ QLayoutItem (0x0x7ff6d46f5ba0) 0
+ primary-for QSpacerItem (0x0x7ff6d4716068)
+
+Vtable for QWidgetItem
+QWidgetItem::_ZTV11QWidgetItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWidgetItem)
+16 (int (*)(...))QWidgetItem::~QWidgetItem
+24 (int (*)(...))QWidgetItem::~QWidgetItem
+32 (int (*)(...))QWidgetItem::sizeHint
+40 (int (*)(...))QWidgetItem::minimumSize
+48 (int (*)(...))QWidgetItem::maximumSize
+56 (int (*)(...))QWidgetItem::expandingDirections
+64 (int (*)(...))QWidgetItem::setGeometry
+72 (int (*)(...))QWidgetItem::geometry
+80 (int (*)(...))QWidgetItem::isEmpty
+88 (int (*)(...))QWidgetItem::hasHeightForWidth
+96 (int (*)(...))QWidgetItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QWidgetItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QWidgetItem::controlTypes
+
+Class QWidgetItem
+ size=24 align=8
+ base size=24 base align=8
+QWidgetItem (0x0x7ff6d47160d0) 0
+ vptr=((& QWidgetItem::_ZTV11QWidgetItem) + 16)
+ QLayoutItem (0x0x7ff6d46f5de0) 0
+ primary-for QWidgetItem (0x0x7ff6d47160d0)
+
+Vtable for QWidgetItemV2
+QWidgetItemV2::_ZTV13QWidgetItemV2: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QWidgetItemV2)
+16 (int (*)(...))QWidgetItemV2::~QWidgetItemV2
+24 (int (*)(...))QWidgetItemV2::~QWidgetItemV2
+32 (int (*)(...))QWidgetItemV2::sizeHint
+40 (int (*)(...))QWidgetItemV2::minimumSize
+48 (int (*)(...))QWidgetItemV2::maximumSize
+56 (int (*)(...))QWidgetItem::expandingDirections
+64 (int (*)(...))QWidgetItem::setGeometry
+72 (int (*)(...))QWidgetItem::geometry
+80 (int (*)(...))QWidgetItem::isEmpty
+88 (int (*)(...))QWidgetItem::hasHeightForWidth
+96 (int (*)(...))QWidgetItemV2::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QWidgetItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QWidgetItem::controlTypes
+
+Class QWidgetItemV2
+ size=88 align=8
+ base size=88 base align=8
+QWidgetItemV2 (0x0x7ff6d4716138) 0
+ vptr=((& QWidgetItemV2::_ZTV13QWidgetItemV2) + 16)
+ QWidgetItem (0x0x7ff6d47161a0) 0
+ primary-for QWidgetItemV2 (0x0x7ff6d4716138)
+ QLayoutItem (0x0x7ff6d4738000) 0
+ primary-for QWidgetItem (0x0x7ff6d47161a0)
+
+Class QLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLayout::QPrivateSignal (0x0x7ff6d4738180) 0 empty
+
+Vtable for QLayout
+QLayout::_ZTV7QLayout: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QLayout)
+16 (int (*)(...))QLayout::metaObject
+24 (int (*)(...))QLayout::qt_metacast
+32 (int (*)(...))QLayout::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLayout::spacing
+120 (int (*)(...))QLayout::setSpacing
+128 (int (*)(...))QLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QLayout::expandingDirections
+160 (int (*)(...))QLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QLayout::setGeometry
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))-16
+264 (int (*)(...))(& _ZTI7QLayout)
+272 0
+280 0
+288 (int (*)(...))__cxa_pure_virtual
+296 (int (*)(...))QLayout::_ZThn16_NK7QLayout11minimumSizeEv
+304 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+312 (int (*)(...))QLayout::_ZThn16_NK7QLayout19expandingDirectionsEv
+320 (int (*)(...))QLayout::_ZThn16_N7QLayout11setGeometryERK5QRect
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+336 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+344 (int (*)(...))QLayoutItem::hasHeightForWidth
+352 (int (*)(...))QLayoutItem::heightForWidth
+360 (int (*)(...))QLayoutItem::minimumHeightForWidth
+368 (int (*)(...))QLayout::_ZThn16_N7QLayout10invalidateEv
+376 (int (*)(...))QLayoutItem::widget
+384 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+392 (int (*)(...))QLayoutItem::spacerItem
+400 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QLayout
+ size=32 align=8
+ base size=28 base align=8
+QLayout (0x0x7ff6d46ea2a0) 0
+ vptr=((& QLayout::_ZTV7QLayout) + 16)
+ QObject (0x0x7ff6d47380c0) 0
+ primary-for QLayout (0x0x7ff6d46ea2a0)
+ QLayoutItem (0x0x7ff6d4738120) 16
+ vptr=((& QLayout::_ZTV7QLayout) + 272)
+
+Class QGridLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGridLayout::QPrivateSignal (0x0x7ff6d4738480) 0 empty
+
+Vtable for QGridLayout
+QGridLayout::_ZTV11QGridLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QGridLayout)
+16 (int (*)(...))QGridLayout::metaObject
+24 (int (*)(...))QGridLayout::qt_metacast
+32 (int (*)(...))QGridLayout::qt_metacall
+40 (int (*)(...))QGridLayout::~QGridLayout
+48 (int (*)(...))QGridLayout::~QGridLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGridLayout::spacing
+120 (int (*)(...))QGridLayout::setSpacing
+128 (int (*)(...))QGridLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QGridLayout::addItem
+152 (int (*)(...))QGridLayout::expandingDirections
+160 (int (*)(...))QGridLayout::minimumSize
+168 (int (*)(...))QGridLayout::maximumSize
+176 (int (*)(...))QGridLayout::setGeometry
+184 (int (*)(...))QGridLayout::itemAt
+192 (int (*)(...))QGridLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QGridLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QGridLayout::sizeHint
+264 (int (*)(...))QGridLayout::hasHeightForWidth
+272 (int (*)(...))QGridLayout::heightForWidth
+280 (int (*)(...))QGridLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QGridLayout)
+304 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayoutD1Ev
+312 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayoutD0Ev
+320 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout8sizeHintEv
+328 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout11minimumSizeEv
+336 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout11maximumSizeEv
+344 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout19expandingDirectionsEv
+352 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout17hasHeightForWidthEv
+384 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout14heightForWidthEi
+392 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout21minimumHeightForWidthEi
+400 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QGridLayout
+ size=32 align=8
+ base size=28 base align=8
+QGridLayout (0x0x7ff6d4716208) 0
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 16)
+ QLayout (0x0x7ff6d46ea5b0) 0
+ primary-for QGridLayout (0x0x7ff6d4716208)
+ QObject (0x0x7ff6d47383c0) 0
+ primary-for QLayout (0x0x7ff6d46ea5b0)
+ QLayoutItem (0x0x7ff6d4738420) 16
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 304)
+
+Class QBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBoxLayout::QPrivateSignal (0x0x7ff6d4738720) 0 empty
+
+Vtable for QBoxLayout
+QBoxLayout::_ZTV10QBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QBoxLayout)
+16 (int (*)(...))QBoxLayout::metaObject
+24 (int (*)(...))QBoxLayout::qt_metacast
+32 (int (*)(...))QBoxLayout::qt_metacall
+40 (int (*)(...))QBoxLayout::~QBoxLayout
+48 (int (*)(...))QBoxLayout::~QBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI10QBoxLayout)
+304 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayoutD1Ev
+312 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QBoxLayout (0x0x7ff6d4716270) 0
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 16)
+ QLayout (0x0x7ff6d46ea620) 0
+ primary-for QBoxLayout (0x0x7ff6d4716270)
+ QObject (0x0x7ff6d4738660) 0
+ primary-for QLayout (0x0x7ff6d46ea620)
+ QLayoutItem (0x0x7ff6d47386c0) 16
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 304)
+
+Class QHBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHBoxLayout::QPrivateSignal (0x0x7ff6d4738960) 0 empty
+
+Vtable for QHBoxLayout
+QHBoxLayout::_ZTV11QHBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHBoxLayout)
+16 (int (*)(...))QHBoxLayout::metaObject
+24 (int (*)(...))QHBoxLayout::qt_metacast
+32 (int (*)(...))QHBoxLayout::qt_metacall
+40 (int (*)(...))QHBoxLayout::~QHBoxLayout
+48 (int (*)(...))QHBoxLayout::~QHBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QHBoxLayout)
+304 (int (*)(...))QHBoxLayout::_ZThn16_N11QHBoxLayoutD1Ev
+312 (int (*)(...))QHBoxLayout::_ZThn16_N11QHBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QHBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QHBoxLayout (0x0x7ff6d47162d8) 0
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 16)
+ QBoxLayout (0x0x7ff6d4716340) 0
+ primary-for QHBoxLayout (0x0x7ff6d47162d8)
+ QLayout (0x0x7ff6d46ea930) 0
+ primary-for QBoxLayout (0x0x7ff6d4716340)
+ QObject (0x0x7ff6d47388a0) 0
+ primary-for QLayout (0x0x7ff6d46ea930)
+ QLayoutItem (0x0x7ff6d4738900) 16
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 304)
+
+Class QVBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVBoxLayout::QPrivateSignal (0x0x7ff6d4738ae0) 0 empty
+
+Vtable for QVBoxLayout
+QVBoxLayout::_ZTV11QVBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QVBoxLayout)
+16 (int (*)(...))QVBoxLayout::metaObject
+24 (int (*)(...))QVBoxLayout::qt_metacast
+32 (int (*)(...))QVBoxLayout::qt_metacall
+40 (int (*)(...))QVBoxLayout::~QVBoxLayout
+48 (int (*)(...))QVBoxLayout::~QVBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QVBoxLayout)
+304 (int (*)(...))QVBoxLayout::_ZThn16_N11QVBoxLayoutD1Ev
+312 (int (*)(...))QVBoxLayout::_ZThn16_N11QVBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QVBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QVBoxLayout (0x0x7ff6d47163a8) 0
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 16)
+ QBoxLayout (0x0x7ff6d4716410) 0
+ primary-for QVBoxLayout (0x0x7ff6d47163a8)
+ QLayout (0x0x7ff6d46ea9a0) 0
+ primary-for QBoxLayout (0x0x7ff6d4716410)
+ QObject (0x0x7ff6d4738a20) 0
+ primary-for QLayout (0x0x7ff6d46ea9a0)
+ QLayoutItem (0x0x7ff6d4738a80) 16
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 304)
+
+Class QButtonGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QButtonGroup::QPrivateSignal (0x0x7ff6d4738c00) 0 empty
+
+Vtable for QButtonGroup
+QButtonGroup::_ZTV12QButtonGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QButtonGroup)
+16 (int (*)(...))QButtonGroup::metaObject
+24 (int (*)(...))QButtonGroup::qt_metacast
+32 (int (*)(...))QButtonGroup::qt_metacall
+40 (int (*)(...))QButtonGroup::~QButtonGroup
+48 (int (*)(...))QButtonGroup::~QButtonGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QButtonGroup
+ size=16 align=8
+ base size=16 base align=8
+QButtonGroup (0x0x7ff6d4716478) 0
+ vptr=((& QButtonGroup::_ZTV12QButtonGroup) + 16)
+ QObject (0x0x7ff6d4738ba0) 0
+ primary-for QButtonGroup (0x0x7ff6d4716478)
+
+Class QCalendarWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCalendarWidget::QPrivateSignal (0x0x7ff6d4738e40) 0 empty
+
+Vtable for QCalendarWidget
+QCalendarWidget::_ZTV15QCalendarWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QCalendarWidget)
+16 (int (*)(...))QCalendarWidget::metaObject
+24 (int (*)(...))QCalendarWidget::qt_metacast
+32 (int (*)(...))QCalendarWidget::qt_metacall
+40 (int (*)(...))QCalendarWidget::~QCalendarWidget
+48 (int (*)(...))QCalendarWidget::~QCalendarWidget
+56 (int (*)(...))QCalendarWidget::event
+64 (int (*)(...))QCalendarWidget::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCalendarWidget::sizeHint
+136 (int (*)(...))QCalendarWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QCalendarWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QCalendarWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QCalendarWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QCalendarWidget::paintCell
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI15QCalendarWidget)
+456 (int (*)(...))QCalendarWidget::_ZThn16_N15QCalendarWidgetD1Ev
+464 (int (*)(...))QCalendarWidget::_ZThn16_N15QCalendarWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCalendarWidget
+ size=40 align=8
+ base size=40 base align=8
+QCalendarWidget (0x0x7ff6d47164e0) 0
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 16)
+ QWidget (0x0x7ff6d46eaa10) 0
+ primary-for QCalendarWidget (0x0x7ff6d47164e0)
+ QObject (0x0x7ff6d4738d80) 0
+ primary-for QWidget (0x0x7ff6d46eaa10)
+ QPaintDevice (0x0x7ff6d4738de0) 16
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 456)
+
+Class QCheckBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCheckBox::QPrivateSignal (0x0x7ff6d47a2300) 0 empty
+
+Vtable for QCheckBox
+QCheckBox::_ZTV9QCheckBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QCheckBox)
+16 (int (*)(...))QCheckBox::metaObject
+24 (int (*)(...))QCheckBox::qt_metacast
+32 (int (*)(...))QCheckBox::qt_metacall
+40 (int (*)(...))QCheckBox::~QCheckBox
+48 (int (*)(...))QCheckBox::~QCheckBox
+56 (int (*)(...))QCheckBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCheckBox::sizeHint
+136 (int (*)(...))QCheckBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QCheckBox::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QCheckBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QCheckBox::hitButton
+440 (int (*)(...))QCheckBox::checkStateSet
+448 (int (*)(...))QCheckBox::nextCheckState
+456 (int (*)(...))QCheckBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI9QCheckBox)
+480 (int (*)(...))QCheckBox::_ZThn16_N9QCheckBoxD1Ev
+488 (int (*)(...))QCheckBox::_ZThn16_N9QCheckBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCheckBox
+ size=40 align=8
+ base size=40 base align=8
+QCheckBox (0x0x7ff6d4716548) 0
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 16)
+ QAbstractButton (0x0x7ff6d47165b0) 0
+ primary-for QCheckBox (0x0x7ff6d4716548)
+ QWidget (0x0x7ff6d46eae00) 0
+ primary-for QAbstractButton (0x0x7ff6d47165b0)
+ QObject (0x0x7ff6d47a2240) 0
+ primary-for QWidget (0x0x7ff6d46eae00)
+ QPaintDevice (0x0x7ff6d47a22a0) 16
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 480)
+
+Class QDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialog::QPrivateSignal (0x0x7ff6d47a2540) 0 empty
+
+Vtable for QDialog
+QDialog::_ZTV7QDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QDialog)
+16 (int (*)(...))QDialog::metaObject
+24 (int (*)(...))QDialog::qt_metacast
+32 (int (*)(...))QDialog::qt_metacall
+40 (int (*)(...))QDialog::~QDialog
+48 (int (*)(...))QDialog::~QDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI7QDialog)
+488 (int (*)(...))QDialog::_ZThn16_N7QDialogD1Ev
+496 (int (*)(...))QDialog::_ZThn16_N7QDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDialog
+ size=40 align=8
+ base size=40 base align=8
+QDialog (0x0x7ff6d4716618) 0
+ vptr=((& QDialog::_ZTV7QDialog) + 16)
+ QWidget (0x0x7ff6d46eae70) 0
+ primary-for QDialog (0x0x7ff6d4716618)
+ QObject (0x0x7ff6d47a2480) 0
+ primary-for QWidget (0x0x7ff6d46eae70)
+ QPaintDevice (0x0x7ff6d47a24e0) 16
+ vptr=((& QDialog::_ZTV7QDialog) + 488)
+
+Class QColorDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColorDialog::QPrivateSignal (0x0x7ff6d47a2780) 0 empty
+
+Vtable for QColorDialog
+QColorDialog::_ZTV12QColorDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QColorDialog)
+16 (int (*)(...))QColorDialog::metaObject
+24 (int (*)(...))QColorDialog::qt_metacast
+32 (int (*)(...))QColorDialog::qt_metacall
+40 (int (*)(...))QColorDialog::~QColorDialog
+48 (int (*)(...))QColorDialog::~QColorDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QColorDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QColorDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QColorDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QColorDialog)
+488 (int (*)(...))QColorDialog::_ZThn16_N12QColorDialogD1Ev
+496 (int (*)(...))QColorDialog::_ZThn16_N12QColorDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QColorDialog
+ size=40 align=8
+ base size=40 base align=8
+QColorDialog (0x0x7ff6d4716680) 0
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 16)
+ QDialog (0x0x7ff6d47166e8) 0
+ primary-for QColorDialog (0x0x7ff6d4716680)
+ QWidget (0x0x7ff6d47bc000) 0
+ primary-for QDialog (0x0x7ff6d47166e8)
+ QObject (0x0x7ff6d47a26c0) 0
+ primary-for QWidget (0x0x7ff6d47bc000)
+ QPaintDevice (0x0x7ff6d47a2720) 16
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 488)
+
+Class QColormap
+ size=8 align=8
+ base size=8 base align=8
+QColormap (0x0x7ff6d47a2cc0) 0
+
+Class QColumnView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColumnView::QPrivateSignal (0x0x7ff6d47a2de0) 0 empty
+
+Vtable for QColumnView
+QColumnView::_ZTV11QColumnView: 109 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QColumnView)
+16 (int (*)(...))QColumnView::metaObject
+24 (int (*)(...))QColumnView::qt_metacast
+32 (int (*)(...))QColumnView::qt_metacall
+40 (int (*)(...))QColumnView::~QColumnView
+48 (int (*)(...))QColumnView::~QColumnView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QColumnView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QColumnView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QColumnView::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QColumnView::setModel
+480 (int (*)(...))QColumnView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QColumnView::visualRect
+504 (int (*)(...))QColumnView::scrollTo
+512 (int (*)(...))QColumnView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QColumnView::setRootIndex
+560 (int (*)(...))QAbstractItemView::doItemsLayout
+568 (int (*)(...))QColumnView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QColumnView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QColumnView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QAbstractItemView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QColumnView::moveCursor
+704 (int (*)(...))QColumnView::horizontalOffset
+712 (int (*)(...))QColumnView::verticalOffset
+720 (int (*)(...))QColumnView::isIndexHidden
+728 (int (*)(...))QColumnView::setSelection
+736 (int (*)(...))QColumnView::visualRegionForSelection
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QColumnView::createColumn
+792 (int (*)(...))-16
+800 (int (*)(...))(& _ZTI11QColumnView)
+808 (int (*)(...))QColumnView::_ZThn16_N11QColumnViewD1Ev
+816 (int (*)(...))QColumnView::_ZThn16_N11QColumnViewD0Ev
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QColumnView
+ size=40 align=8
+ base size=40 base align=8
+QColumnView (0x0x7ff6d4716888) 0
+ vptr=((& QColumnView::_ZTV11QColumnView) + 16)
+ QAbstractItemView (0x0x7ff6d47168f0) 0
+ primary-for QColumnView (0x0x7ff6d4716888)
+ QAbstractScrollArea (0x0x7ff6d4716958) 0
+ primary-for QAbstractItemView (0x0x7ff6d47168f0)
+ QFrame (0x0x7ff6d47169c0) 0
+ primary-for QAbstractScrollArea (0x0x7ff6d4716958)
+ QWidget (0x0x7ff6d47bc310) 0
+ primary-for QFrame (0x0x7ff6d47169c0)
+ QObject (0x0x7ff6d47a2d20) 0
+ primary-for QWidget (0x0x7ff6d47bc310)
+ QPaintDevice (0x0x7ff6d47a2d80) 16
+ vptr=((& QColumnView::_ZTV11QColumnView) + 808)
+
+Class QComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QComboBox::QPrivateSignal (0x0x7ff6d47f5060) 0 empty
+
+Vtable for QComboBox
+QComboBox::_ZTV9QComboBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QComboBox)
+16 (int (*)(...))QComboBox::metaObject
+24 (int (*)(...))QComboBox::qt_metacast
+32 (int (*)(...))QComboBox::qt_metacall
+40 (int (*)(...))QComboBox::~QComboBox
+48 (int (*)(...))QComboBox::~QComboBox
+56 (int (*)(...))QComboBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QComboBox::sizeHint
+136 (int (*)(...))QComboBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QComboBox::mousePressEvent
+176 (int (*)(...))QComboBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QComboBox::wheelEvent
+208 (int (*)(...))QComboBox::keyPressEvent
+216 (int (*)(...))QComboBox::keyReleaseEvent
+224 (int (*)(...))QComboBox::focusInEvent
+232 (int (*)(...))QComboBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QComboBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QComboBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QComboBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QComboBox::showEvent
+352 (int (*)(...))QComboBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QComboBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QComboBox::inputMethodEvent
+416 (int (*)(...))QComboBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QComboBox::setModel
+440 (int (*)(...))QComboBox::showPopup
+448 (int (*)(...))QComboBox::hidePopup
+456 (int (*)(...))QComboBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI9QComboBox)
+480 (int (*)(...))QComboBox::_ZThn16_N9QComboBoxD1Ev
+488 (int (*)(...))QComboBox::_ZThn16_N9QComboBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QComboBox
+ size=40 align=8
+ base size=40 base align=8
+QComboBox (0x0x7ff6d4716a28) 0
+ vptr=((& QComboBox::_ZTV9QComboBox) + 16)
+ QWidget (0x0x7ff6d47bc380) 0
+ primary-for QComboBox (0x0x7ff6d4716a28)
+ QObject (0x0x7ff6d47a2f60) 0
+ primary-for QWidget (0x0x7ff6d47bc380)
+ QPaintDevice (0x0x7ff6d47f5000) 16
+ vptr=((& QComboBox::_ZTV9QComboBox) + 480)
+
+Class QPushButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPushButton::QPrivateSignal (0x0x7ff6d47f5600) 0 empty
+
+Vtable for QPushButton
+QPushButton::_ZTV11QPushButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPushButton)
+16 (int (*)(...))QPushButton::metaObject
+24 (int (*)(...))QPushButton::qt_metacast
+32 (int (*)(...))QPushButton::qt_metacall
+40 (int (*)(...))QPushButton::~QPushButton
+48 (int (*)(...))QPushButton::~QPushButton
+56 (int (*)(...))QPushButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QPushButton::sizeHint
+136 (int (*)(...))QPushButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QPushButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QPushButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QPushButton::focusInEvent
+232 (int (*)(...))QPushButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QPushButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QPushButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QPushButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI11QPushButton)
+480 (int (*)(...))QPushButton::_ZThn16_N11QPushButtonD1Ev
+488 (int (*)(...))QPushButton::_ZThn16_N11QPushButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QPushButton
+ size=40 align=8
+ base size=40 base align=8
+QPushButton (0x0x7ff6d4716a90) 0
+ vptr=((& QPushButton::_ZTV11QPushButton) + 16)
+ QAbstractButton (0x0x7ff6d4716af8) 0
+ primary-for QPushButton (0x0x7ff6d4716a90)
+ QWidget (0x0x7ff6d47bc850) 0
+ primary-for QAbstractButton (0x0x7ff6d4716af8)
+ QObject (0x0x7ff6d47f5540) 0
+ primary-for QWidget (0x0x7ff6d47bc850)
+ QPaintDevice (0x0x7ff6d47f55a0) 16
+ vptr=((& QPushButton::_ZTV11QPushButton) + 480)
+
+Class QCommandLinkButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommandLinkButton::QPrivateSignal (0x0x7ff6d47f5840) 0 empty
+
+Vtable for QCommandLinkButton
+QCommandLinkButton::_ZTV18QCommandLinkButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QCommandLinkButton)
+16 (int (*)(...))QCommandLinkButton::metaObject
+24 (int (*)(...))QCommandLinkButton::qt_metacast
+32 (int (*)(...))QCommandLinkButton::qt_metacall
+40 (int (*)(...))QCommandLinkButton::~QCommandLinkButton
+48 (int (*)(...))QCommandLinkButton::~QCommandLinkButton
+56 (int (*)(...))QCommandLinkButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCommandLinkButton::sizeHint
+136 (int (*)(...))QCommandLinkButton::minimumSizeHint
+144 (int (*)(...))QCommandLinkButton::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QPushButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QPushButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QPushButton::focusInEvent
+232 (int (*)(...))QPushButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QCommandLinkButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QPushButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QPushButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI18QCommandLinkButton)
+480 (int (*)(...))QCommandLinkButton::_ZThn16_N18QCommandLinkButtonD1Ev
+488 (int (*)(...))QCommandLinkButton::_ZThn16_N18QCommandLinkButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCommandLinkButton
+ size=40 align=8
+ base size=40 base align=8
+QCommandLinkButton (0x0x7ff6d4716b60) 0
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 16)
+ QPushButton (0x0x7ff6d4716bc8) 0
+ primary-for QCommandLinkButton (0x0x7ff6d4716b60)
+ QAbstractButton (0x0x7ff6d4716c30) 0
+ primary-for QPushButton (0x0x7ff6d4716bc8)
+ QWidget (0x0x7ff6d47bc8c0) 0
+ primary-for QAbstractButton (0x0x7ff6d4716c30)
+ QObject (0x0x7ff6d47f5780) 0
+ primary-for QWidget (0x0x7ff6d47bc8c0)
+ QPaintDevice (0x0x7ff6d47f57e0) 16
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 480)
+
+Class QCommonStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommonStyle::QPrivateSignal (0x0x7ff6d47f5a20) 0 empty
+
+Vtable for QCommonStyle
+QCommonStyle::_ZTV12QCommonStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QCommonStyle)
+16 (int (*)(...))QCommonStyle::metaObject
+24 (int (*)(...))QCommonStyle::qt_metacast
+32 (int (*)(...))QCommonStyle::qt_metacall
+40 (int (*)(...))QCommonStyle::~QCommonStyle
+48 (int (*)(...))QCommonStyle::~QCommonStyle
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCommonStyle::polish
+120 (int (*)(...))QCommonStyle::unpolish
+128 (int (*)(...))QCommonStyle::polish
+136 (int (*)(...))QCommonStyle::unpolish
+144 (int (*)(...))QCommonStyle::polish
+152 (int (*)(...))QStyle::itemTextRect
+160 (int (*)(...))QStyle::itemPixmapRect
+168 (int (*)(...))QStyle::drawItemText
+176 (int (*)(...))QStyle::drawItemPixmap
+184 (int (*)(...))QStyle::standardPalette
+192 (int (*)(...))QCommonStyle::drawPrimitive
+200 (int (*)(...))QCommonStyle::drawControl
+208 (int (*)(...))QCommonStyle::subElementRect
+216 (int (*)(...))QCommonStyle::drawComplexControl
+224 (int (*)(...))QCommonStyle::hitTestComplexControl
+232 (int (*)(...))QCommonStyle::subControlRect
+240 (int (*)(...))QCommonStyle::pixelMetric
+248 (int (*)(...))QCommonStyle::sizeFromContents
+256 (int (*)(...))QCommonStyle::styleHint
+264 (int (*)(...))QCommonStyle::standardPixmap
+272 (int (*)(...))QCommonStyle::standardIcon
+280 (int (*)(...))QCommonStyle::generatedIconPixmap
+288 (int (*)(...))QCommonStyle::layoutSpacing
+
+Class QCommonStyle
+ size=16 align=8
+ base size=16 base align=8
+QCommonStyle (0x0x7ff6d4716c98) 0
+ vptr=((& QCommonStyle::_ZTV12QCommonStyle) + 16)
+ QStyle (0x0x7ff6d4716d00) 0
+ primary-for QCommonStyle (0x0x7ff6d4716c98)
+ QObject (0x0x7ff6d47f59c0) 0
+ primary-for QStyle (0x0x7ff6d4716d00)
+
+Class QCompleter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCompleter::QPrivateSignal (0x0x7ff6d47f5c00) 0 empty
+
+Vtable for QCompleter
+QCompleter::_ZTV10QCompleter: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QCompleter)
+16 (int (*)(...))QCompleter::metaObject
+24 (int (*)(...))QCompleter::qt_metacast
+32 (int (*)(...))QCompleter::qt_metacall
+40 (int (*)(...))QCompleter::~QCompleter
+48 (int (*)(...))QCompleter::~QCompleter
+56 (int (*)(...))QCompleter::event
+64 (int (*)(...))QCompleter::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCompleter::pathFromIndex
+120 (int (*)(...))QCompleter::splitPath
+
+Class QCompleter
+ size=16 align=8
+ base size=16 base align=8
+QCompleter (0x0x7ff6d4716d68) 0
+ vptr=((& QCompleter::_ZTV10QCompleter) + 16)
+ QObject (0x0x7ff6d47f5ba0) 0
+ primary-for QCompleter (0x0x7ff6d4716d68)
+
+Class QDataWidgetMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDataWidgetMapper::QPrivateSignal (0x0x7ff6d47f5f60) 0 empty
+
+Vtable for QDataWidgetMapper
+QDataWidgetMapper::_ZTV17QDataWidgetMapper: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QDataWidgetMapper)
+16 (int (*)(...))QDataWidgetMapper::metaObject
+24 (int (*)(...))QDataWidgetMapper::qt_metacast
+32 (int (*)(...))QDataWidgetMapper::qt_metacall
+40 (int (*)(...))QDataWidgetMapper::~QDataWidgetMapper
+48 (int (*)(...))QDataWidgetMapper::~QDataWidgetMapper
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDataWidgetMapper::setCurrentIndex
+
+Class QDataWidgetMapper
+ size=16 align=8
+ base size=16 base align=8
+QDataWidgetMapper (0x0x7ff6d4716dd0) 0
+ vptr=((& QDataWidgetMapper::_ZTV17QDataWidgetMapper) + 16)
+ QObject (0x0x7ff6d47f5f00) 0
+ primary-for QDataWidgetMapper (0x0x7ff6d4716dd0)
+
+Class QDateTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateTimeEdit::QPrivateSignal (0x0x7ff6d44682a0) 0 empty
+
+Vtable for QDateTimeEdit
+QDateTimeEdit::_ZTV13QDateTimeEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QDateTimeEdit)
+16 (int (*)(...))QDateTimeEdit::metaObject
+24 (int (*)(...))QDateTimeEdit::qt_metacast
+32 (int (*)(...))QDateTimeEdit::qt_metacall
+40 (int (*)(...))QDateTimeEdit::~QDateTimeEdit
+48 (int (*)(...))QDateTimeEdit::~QDateTimeEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI13QDateTimeEdit)
+512 (int (*)(...))QDateTimeEdit::_ZThn16_N13QDateTimeEditD1Ev
+520 (int (*)(...))QDateTimeEdit::_ZThn16_N13QDateTimeEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDateTimeEdit
+ size=40 align=8
+ base size=40 base align=8
+QDateTimeEdit (0x0x7ff6d4716e38) 0
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 16)
+ QAbstractSpinBox (0x0x7ff6d4716ea0) 0
+ primary-for QDateTimeEdit (0x0x7ff6d4716e38)
+ QWidget (0x0x7ff6d47bccb0) 0
+ primary-for QAbstractSpinBox (0x0x7ff6d4716ea0)
+ QObject (0x0x7ff6d44681e0) 0
+ primary-for QWidget (0x0x7ff6d47bccb0)
+ QPaintDevice (0x0x7ff6d4468240) 16
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 512)
+
+Class QTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeEdit::QPrivateSignal (0x0x7ff6d4468840) 0 empty
+
+Vtable for QTimeEdit
+QTimeEdit::_ZTV9QTimeEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTimeEdit)
+16 (int (*)(...))QTimeEdit::metaObject
+24 (int (*)(...))QTimeEdit::qt_metacast
+32 (int (*)(...))QTimeEdit::qt_metacall
+40 (int (*)(...))QTimeEdit::~QTimeEdit
+48 (int (*)(...))QTimeEdit::~QTimeEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI9QTimeEdit)
+512 (int (*)(...))QTimeEdit::_ZThn16_N9QTimeEditD1Ev
+520 (int (*)(...))QTimeEdit::_ZThn16_N9QTimeEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTimeEdit
+ size=40 align=8
+ base size=40 base align=8
+QTimeEdit (0x0x7ff6d4487068) 0
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 16)
+ QDateTimeEdit (0x0x7ff6d44870d0) 0
+ primary-for QTimeEdit (0x0x7ff6d4487068)
+ QAbstractSpinBox (0x0x7ff6d4487138) 0
+ primary-for QDateTimeEdit (0x0x7ff6d44870d0)
+ QWidget (0x0x7ff6d446b1c0) 0
+ primary-for QAbstractSpinBox (0x0x7ff6d4487138)
+ QObject (0x0x7ff6d4468780) 0
+ primary-for QWidget (0x0x7ff6d446b1c0)
+ QPaintDevice (0x0x7ff6d44687e0) 16
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 512)
+
+Class QDateEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateEdit::QPrivateSignal (0x0x7ff6d44689c0) 0 empty
+
+Vtable for QDateEdit
+QDateEdit::_ZTV9QDateEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QDateEdit)
+16 (int (*)(...))QDateEdit::metaObject
+24 (int (*)(...))QDateEdit::qt_metacast
+32 (int (*)(...))QDateEdit::qt_metacall
+40 (int (*)(...))QDateEdit::~QDateEdit
+48 (int (*)(...))QDateEdit::~QDateEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI9QDateEdit)
+512 (int (*)(...))QDateEdit::_ZThn16_N9QDateEditD1Ev
+520 (int (*)(...))QDateEdit::_ZThn16_N9QDateEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDateEdit
+ size=40 align=8
+ base size=40 base align=8
+QDateEdit (0x0x7ff6d44871a0) 0
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 16)
+ QDateTimeEdit (0x0x7ff6d4487208) 0
+ primary-for QDateEdit (0x0x7ff6d44871a0)
+ QAbstractSpinBox (0x0x7ff6d4487270) 0
+ primary-for QDateTimeEdit (0x0x7ff6d4487208)
+ QWidget (0x0x7ff6d446b230) 0
+ primary-for QAbstractSpinBox (0x0x7ff6d4487270)
+ QObject (0x0x7ff6d4468900) 0
+ primary-for QWidget (0x0x7ff6d446b230)
+ QPaintDevice (0x0x7ff6d4468960) 16
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 512)
+
+Class QDial::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDial::QPrivateSignal (0x0x7ff6d4468c60) 0 empty
+
+Vtable for QDial
+QDial::_ZTV5QDial: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDial)
+16 (int (*)(...))QDial::metaObject
+24 (int (*)(...))QDial::qt_metacast
+32 (int (*)(...))QDial::qt_metacall
+40 (int (*)(...))QDial::~QDial
+48 (int (*)(...))QDial::~QDial
+56 (int (*)(...))QDial::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDial::sizeHint
+136 (int (*)(...))QDial::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDial::mousePressEvent
+176 (int (*)(...))QDial::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QDial::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDial::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDial::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDial::sliderChange
+440 (int (*)(...))QDial::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI5QDial)
+464 (int (*)(...))QDial::_ZThn16_N5QDialD1Ev
+472 (int (*)(...))QDial::_ZThn16_N5QDialD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDial
+ size=40 align=8
+ base size=40 base align=8
+QDial (0x0x7ff6d44872d8) 0
+ vptr=((& QDial::_ZTV5QDial) + 16)
+ QAbstractSlider (0x0x7ff6d4487340) 0
+ primary-for QDial (0x0x7ff6d44872d8)
+ QWidget (0x0x7ff6d446b2a0) 0
+ primary-for QAbstractSlider (0x0x7ff6d4487340)
+ QObject (0x0x7ff6d4468ba0) 0
+ primary-for QWidget (0x0x7ff6d446b2a0)
+ QPaintDevice (0x0x7ff6d4468c00) 16
+ vptr=((& QDial::_ZTV5QDial) + 464)
+
+Class QDialogButtonBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialogButtonBox::QPrivateSignal (0x0x7ff6d4468ea0) 0 empty
+
+Vtable for QDialogButtonBox
+QDialogButtonBox::_ZTV16QDialogButtonBox: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QDialogButtonBox)
+16 (int (*)(...))QDialogButtonBox::metaObject
+24 (int (*)(...))QDialogButtonBox::qt_metacast
+32 (int (*)(...))QDialogButtonBox::qt_metacall
+40 (int (*)(...))QDialogButtonBox::~QDialogButtonBox
+48 (int (*)(...))QDialogButtonBox::~QDialogButtonBox
+56 (int (*)(...))QDialogButtonBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QDialogButtonBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI16QDialogButtonBox)
+448 (int (*)(...))QDialogButtonBox::_ZThn16_N16QDialogButtonBoxD1Ev
+456 (int (*)(...))QDialogButtonBox::_ZThn16_N16QDialogButtonBoxD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDialogButtonBox
+ size=40 align=8
+ base size=40 base align=8
+QDialogButtonBox (0x0x7ff6d44873a8) 0
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 16)
+ QWidget (0x0x7ff6d446b310) 0
+ primary-for QDialogButtonBox (0x0x7ff6d44873a8)
+ QObject (0x0x7ff6d4468de0) 0
+ primary-for QWidget (0x0x7ff6d446b310)
+ QPaintDevice (0x0x7ff6d4468e40) 16
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 448)
+
+Class QDockWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDockWidget::QPrivateSignal (0x0x7ff6d44d44e0) 0 empty
+
+Vtable for QDockWidget
+QDockWidget::_ZTV11QDockWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QDockWidget)
+16 (int (*)(...))QDockWidget::metaObject
+24 (int (*)(...))QDockWidget::qt_metacast
+32 (int (*)(...))QDockWidget::qt_metacall
+40 (int (*)(...))QDockWidget::~QDockWidget
+48 (int (*)(...))QDockWidget::~QDockWidget
+56 (int (*)(...))QDockWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDockWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QDockWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QDockWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDockWidget::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QDockWidget)
+456 (int (*)(...))QDockWidget::_ZThn16_N11QDockWidgetD1Ev
+464 (int (*)(...))QDockWidget::_ZThn16_N11QDockWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDockWidget
+ size=40 align=8
+ base size=40 base align=8
+QDockWidget (0x0x7ff6d4487548) 0
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 16)
+ QWidget (0x0x7ff6d44c23f0) 0
+ primary-for QDockWidget (0x0x7ff6d4487548)
+ QObject (0x0x7ff6d44d4420) 0
+ primary-for QWidget (0x0x7ff6d44c23f0)
+ QPaintDevice (0x0x7ff6d44d4480) 16
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 456)
+
+Class QTileRules
+ size=8 align=4
+ base size=8 base align=4
+QTileRules (0x0x7ff6d44d4ae0) 0
+
+Class QErrorMessage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QErrorMessage::QPrivateSignal (0x0x7ff6d4535180) 0 empty
+
+Vtable for QErrorMessage
+QErrorMessage::_ZTV13QErrorMessage: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QErrorMessage)
+16 (int (*)(...))QErrorMessage::metaObject
+24 (int (*)(...))QErrorMessage::qt_metacast
+32 (int (*)(...))QErrorMessage::qt_metacall
+40 (int (*)(...))QErrorMessage::~QErrorMessage
+48 (int (*)(...))QErrorMessage::~QErrorMessage
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QErrorMessage::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QErrorMessage::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI13QErrorMessage)
+488 (int (*)(...))QErrorMessage::_ZThn16_N13QErrorMessageD1Ev
+496 (int (*)(...))QErrorMessage::_ZThn16_N13QErrorMessageD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QErrorMessage
+ size=40 align=8
+ base size=40 base align=8
+QErrorMessage (0x0x7ff6d4487820) 0
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 16)
+ QDialog (0x0x7ff6d4487888) 0
+ primary-for QErrorMessage (0x0x7ff6d4487820)
+ QWidget (0x0x7ff6d44c2e00) 0
+ primary-for QDialog (0x0x7ff6d4487888)
+ QObject (0x0x7ff6d45350c0) 0
+ primary-for QWidget (0x0x7ff6d44c2e00)
+ QPaintDevice (0x0x7ff6d4535120) 16
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 488)
+
+Class QFileDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDialog::QPrivateSignal (0x0x7ff6d45353c0) 0 empty
+
+Vtable for QFileDialog
+QFileDialog::_ZTV11QFileDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFileDialog)
+16 (int (*)(...))QFileDialog::metaObject
+24 (int (*)(...))QFileDialog::qt_metacast
+32 (int (*)(...))QFileDialog::qt_metacall
+40 (int (*)(...))QFileDialog::~QFileDialog
+48 (int (*)(...))QFileDialog::~QFileDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QFileDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFileDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QFileDialog::done
+456 (int (*)(...))QFileDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QFileDialog)
+488 (int (*)(...))QFileDialog::_ZThn16_N11QFileDialogD1Ev
+496 (int (*)(...))QFileDialog::_ZThn16_N11QFileDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFileDialog
+ size=40 align=8
+ base size=40 base align=8
+QFileDialog (0x0x7ff6d44878f0) 0
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 16)
+ QDialog (0x0x7ff6d4487958) 0
+ primary-for QFileDialog (0x0x7ff6d44878f0)
+ QWidget (0x0x7ff6d44c2e70) 0
+ primary-for QDialog (0x0x7ff6d4487958)
+ QObject (0x0x7ff6d4535300) 0
+ primary-for QWidget (0x0x7ff6d44c2e70)
+ QPaintDevice (0x0x7ff6d4535360) 16
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 488)
+
+Vtable for QFileIconProvider
+QFileIconProvider::_ZTV17QFileIconProvider: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFileIconProvider)
+16 (int (*)(...))QFileIconProvider::~QFileIconProvider
+24 (int (*)(...))QFileIconProvider::~QFileIconProvider
+32 (int (*)(...))QFileIconProvider::icon
+40 (int (*)(...))QFileIconProvider::icon
+48 (int (*)(...))QAbstractFileIconProvider::type
+56 (int (*)(...))QAbstractFileIconProvider::setOptions
+64 (int (*)(...))QAbstractFileIconProvider::options
+
+Class QFileIconProvider
+ size=16 align=8
+ base size=16 base align=8
+QFileIconProvider (0x0x7ff6d4487af8) 0
+ vptr=((& QFileIconProvider::_ZTV17QFileIconProvider) + 16)
+ QAbstractFileIconProvider (0x0x7ff6d4535c60) 0
+ primary-for QFileIconProvider (0x0x7ff6d4487af8)
+
+Class QFocusFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFocusFrame::QPrivateSignal (0x0x7ff6d4535e40) 0 empty
+
+Vtable for QFocusFrame
+QFocusFrame::_ZTV11QFocusFrame: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusFrame)
+16 (int (*)(...))QFocusFrame::metaObject
+24 (int (*)(...))QFocusFrame::qt_metacast
+32 (int (*)(...))QFocusFrame::qt_metacall
+40 (int (*)(...))QFocusFrame::~QFocusFrame
+48 (int (*)(...))QFocusFrame::~QFocusFrame
+56 (int (*)(...))QFocusFrame::event
+64 (int (*)(...))QFocusFrame::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFocusFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFocusFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QFocusFrame)
+456 (int (*)(...))QFocusFrame::_ZThn16_N11QFocusFrameD1Ev
+464 (int (*)(...))QFocusFrame::_ZThn16_N11QFocusFrameD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFocusFrame
+ size=40 align=8
+ base size=40 base align=8
+QFocusFrame (0x0x7ff6d4487b60) 0
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 16)
+ QWidget (0x0x7ff6d45497e0) 0
+ primary-for QFocusFrame (0x0x7ff6d4487b60)
+ QObject (0x0x7ff6d4535d80) 0
+ primary-for QWidget (0x0x7ff6d45497e0)
+ QPaintDevice (0x0x7ff6d4535de0) 16
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 456)
+
+Class QFontComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontComboBox::QPrivateSignal (0x0x7ff6d459f0c0) 0 empty
+
+Vtable for QFontComboBox
+QFontComboBox::_ZTV13QFontComboBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QFontComboBox)
+16 (int (*)(...))QFontComboBox::metaObject
+24 (int (*)(...))QFontComboBox::qt_metacast
+32 (int (*)(...))QFontComboBox::qt_metacall
+40 (int (*)(...))QFontComboBox::~QFontComboBox
+48 (int (*)(...))QFontComboBox::~QFontComboBox
+56 (int (*)(...))QFontComboBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFontComboBox::sizeHint
+136 (int (*)(...))QComboBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QComboBox::mousePressEvent
+176 (int (*)(...))QComboBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QComboBox::wheelEvent
+208 (int (*)(...))QComboBox::keyPressEvent
+216 (int (*)(...))QComboBox::keyReleaseEvent
+224 (int (*)(...))QComboBox::focusInEvent
+232 (int (*)(...))QComboBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QComboBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QComboBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QComboBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QComboBox::showEvent
+352 (int (*)(...))QComboBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QComboBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QComboBox::inputMethodEvent
+416 (int (*)(...))QComboBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QComboBox::setModel
+440 (int (*)(...))QComboBox::showPopup
+448 (int (*)(...))QComboBox::hidePopup
+456 (int (*)(...))QComboBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI13QFontComboBox)
+480 (int (*)(...))QFontComboBox::_ZThn16_N13QFontComboBoxD1Ev
+488 (int (*)(...))QFontComboBox::_ZThn16_N13QFontComboBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFontComboBox
+ size=40 align=8
+ base size=40 base align=8
+QFontComboBox (0x0x7ff6d4487bc8) 0
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 16)
+ QComboBox (0x0x7ff6d4487c30) 0
+ primary-for QFontComboBox (0x0x7ff6d4487bc8)
+ QWidget (0x0x7ff6d4549850) 0
+ primary-for QComboBox (0x0x7ff6d4487c30)
+ QObject (0x0x7ff6d459f000) 0
+ primary-for QWidget (0x0x7ff6d4549850)
+ QPaintDevice (0x0x7ff6d459f060) 16
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 480)
+
+Class QFontDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontDialog::QPrivateSignal (0x0x7ff6d459f6c0) 0 empty
+
+Vtable for QFontDialog
+QFontDialog::_ZTV11QFontDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFontDialog)
+16 (int (*)(...))QFontDialog::metaObject
+24 (int (*)(...))QFontDialog::qt_metacast
+32 (int (*)(...))QFontDialog::qt_metacall
+40 (int (*)(...))QFontDialog::~QFontDialog
+48 (int (*)(...))QFontDialog::~QFontDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QFontDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QFontDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFontDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QFontDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QFontDialog)
+488 (int (*)(...))QFontDialog::_ZThn16_N11QFontDialogD1Ev
+496 (int (*)(...))QFontDialog::_ZThn16_N11QFontDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFontDialog
+ size=40 align=8
+ base size=40 base align=8
+QFontDialog (0x0x7ff6d4487dd0) 0
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 16)
+ QDialog (0x0x7ff6d4487e38) 0
+ primary-for QFontDialog (0x0x7ff6d4487dd0)
+ QWidget (0x0x7ff6d4549af0) 0
+ primary-for QDialog (0x0x7ff6d4487e38)
+ QObject (0x0x7ff6d459f600) 0
+ primary-for QWidget (0x0x7ff6d4549af0)
+ QPaintDevice (0x0x7ff6d459f660) 16
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 488)
+
+Class QFormLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFormLayout::QPrivateSignal (0x0x7ff6d459fcc0) 0 empty
+
+Class QFormLayout::TakeRowResult
+ size=16 align=8
+ base size=16 base align=8
+QFormLayout::TakeRowResult (0x0x7ff6d459fd20) 0
+
+Vtable for QFormLayout
+QFormLayout::_ZTV11QFormLayout: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFormLayout)
+16 (int (*)(...))QFormLayout::metaObject
+24 (int (*)(...))QFormLayout::qt_metacast
+32 (int (*)(...))QFormLayout::qt_metacall
+40 (int (*)(...))QFormLayout::~QFormLayout
+48 (int (*)(...))QFormLayout::~QFormLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFormLayout::spacing
+120 (int (*)(...))QFormLayout::setSpacing
+128 (int (*)(...))QFormLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QFormLayout::addItem
+152 (int (*)(...))QFormLayout::expandingDirections
+160 (int (*)(...))QFormLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QFormLayout::setGeometry
+184 (int (*)(...))QFormLayout::itemAt
+192 (int (*)(...))QFormLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QFormLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QFormLayout::sizeHint
+264 (int (*)(...))QFormLayout::hasHeightForWidth
+272 (int (*)(...))QFormLayout::heightForWidth
+280 (int (*)(...))-16
+288 (int (*)(...))(& _ZTI11QFormLayout)
+296 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayoutD1Ev
+304 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayoutD0Ev
+312 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout8sizeHintEv
+320 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout11minimumSizeEv
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+336 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout19expandingDirectionsEv
+344 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayout11setGeometryERK5QRect
+352 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+368 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout17hasHeightForWidthEv
+376 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout14heightForWidthEi
+384 (int (*)(...))QLayoutItem::minimumHeightForWidth
+392 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayout10invalidateEv
+400 (int (*)(...))QLayoutItem::widget
+408 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+416 (int (*)(...))QLayoutItem::spacerItem
+424 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QFormLayout
+ size=32 align=8
+ base size=28 base align=8
+QFormLayout (0x0x7ff6d45fa000) 0
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 16)
+ QLayout (0x0x7ff6d4549e00) 0
+ primary-for QFormLayout (0x0x7ff6d45fa000)
+ QObject (0x0x7ff6d459fc00) 0
+ primary-for QLayout (0x0x7ff6d4549e00)
+ QLayoutItem (0x0x7ff6d459fc60) 16
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 296)
+
+Class QGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGesture::QPrivateSignal (0x0x7ff6d462c840) 0 empty
+
+Vtable for QGesture
+QGesture::_ZTV8QGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QGesture)
+16 (int (*)(...))QGesture::metaObject
+24 (int (*)(...))QGesture::qt_metacast
+32 (int (*)(...))QGesture::qt_metacall
+40 (int (*)(...))QGesture::~QGesture
+48 (int (*)(...))QGesture::~QGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QGesture
+ size=16 align=8
+ base size=16 base align=8
+QGesture (0x0x7ff6d462ea90) 0
+ vptr=((& QGesture::_ZTV8QGesture) + 16)
+ QObject (0x0x7ff6d462c7e0) 0
+ primary-for QGesture (0x0x7ff6d462ea90)
+
+Class QPanGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPanGesture::QPrivateSignal (0x0x7ff6d462ca20) 0 empty
+
+Vtable for QPanGesture
+QPanGesture::_ZTV11QPanGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPanGesture)
+16 (int (*)(...))QPanGesture::metaObject
+24 (int (*)(...))QPanGesture::qt_metacast
+32 (int (*)(...))QPanGesture::qt_metacall
+40 (int (*)(...))QPanGesture::~QPanGesture
+48 (int (*)(...))QPanGesture::~QPanGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPanGesture
+ size=16 align=8
+ base size=16 base align=8
+QPanGesture (0x0x7ff6d462eaf8) 0
+ vptr=((& QPanGesture::_ZTV11QPanGesture) + 16)
+ QGesture (0x0x7ff6d462eb60) 0
+ primary-for QPanGesture (0x0x7ff6d462eaf8)
+ QObject (0x0x7ff6d462c9c0) 0
+ primary-for QGesture (0x0x7ff6d462eb60)
+
+Class QPinchGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPinchGesture::QPrivateSignal (0x0x7ff6d462cc00) 0 empty
+
+Vtable for QPinchGesture
+QPinchGesture::_ZTV13QPinchGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPinchGesture)
+16 (int (*)(...))QPinchGesture::metaObject
+24 (int (*)(...))QPinchGesture::qt_metacast
+32 (int (*)(...))QPinchGesture::qt_metacall
+40 (int (*)(...))QPinchGesture::~QPinchGesture
+48 (int (*)(...))QPinchGesture::~QPinchGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPinchGesture
+ size=16 align=8
+ base size=16 base align=8
+QPinchGesture (0x0x7ff6d462ebc8) 0
+ vptr=((& QPinchGesture::_ZTV13QPinchGesture) + 16)
+ QGesture (0x0x7ff6d462ec30) 0
+ primary-for QPinchGesture (0x0x7ff6d462ebc8)
+ QObject (0x0x7ff6d462cba0) 0
+ primary-for QGesture (0x0x7ff6d462ec30)
+
+Class QSwipeGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSwipeGesture::QPrivateSignal (0x0x7ff6d42603c0) 0 empty
+
+Vtable for QSwipeGesture
+QSwipeGesture::_ZTV13QSwipeGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSwipeGesture)
+16 (int (*)(...))QSwipeGesture::metaObject
+24 (int (*)(...))QSwipeGesture::qt_metacast
+32 (int (*)(...))QSwipeGesture::qt_metacall
+40 (int (*)(...))QSwipeGesture::~QSwipeGesture
+48 (int (*)(...))QSwipeGesture::~QSwipeGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSwipeGesture
+ size=16 align=8
+ base size=16 base align=8
+QSwipeGesture (0x0x7ff6d462edd0) 0
+ vptr=((& QSwipeGesture::_ZTV13QSwipeGesture) + 16)
+ QGesture (0x0x7ff6d462ee38) 0
+ primary-for QSwipeGesture (0x0x7ff6d462edd0)
+ QObject (0x0x7ff6d4260360) 0
+ primary-for QGesture (0x0x7ff6d462ee38)
+
+Class QTapGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapGesture::QPrivateSignal (0x0x7ff6d4260660) 0 empty
+
+Vtable for QTapGesture
+QTapGesture::_ZTV11QTapGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTapGesture)
+16 (int (*)(...))QTapGesture::metaObject
+24 (int (*)(...))QTapGesture::qt_metacast
+32 (int (*)(...))QTapGesture::qt_metacall
+40 (int (*)(...))QTapGesture::~QTapGesture
+48 (int (*)(...))QTapGesture::~QTapGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTapGesture
+ size=16 align=8
+ base size=16 base align=8
+QTapGesture (0x0x7ff6d462eea0) 0
+ vptr=((& QTapGesture::_ZTV11QTapGesture) + 16)
+ QGesture (0x0x7ff6d462ef08) 0
+ primary-for QTapGesture (0x0x7ff6d462eea0)
+ QObject (0x0x7ff6d4260600) 0
+ primary-for QGesture (0x0x7ff6d462ef08)
+
+Class QTapAndHoldGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapAndHoldGesture::QPrivateSignal (0x0x7ff6d4260840) 0 empty
+
+Vtable for QTapAndHoldGesture
+QTapAndHoldGesture::_ZTV18QTapAndHoldGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QTapAndHoldGesture)
+16 (int (*)(...))QTapAndHoldGesture::metaObject
+24 (int (*)(...))QTapAndHoldGesture::qt_metacast
+32 (int (*)(...))QTapAndHoldGesture::qt_metacall
+40 (int (*)(...))QTapAndHoldGesture::~QTapAndHoldGesture
+48 (int (*)(...))QTapAndHoldGesture::~QTapAndHoldGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTapAndHoldGesture
+ size=16 align=8
+ base size=16 base align=8
+QTapAndHoldGesture (0x0x7ff6d462ef70) 0
+ vptr=((& QTapAndHoldGesture::_ZTV18QTapAndHoldGesture) + 16)
+ QGesture (0x0x7ff6d4287000) 0
+ primary-for QTapAndHoldGesture (0x0x7ff6d462ef70)
+ QObject (0x0x7ff6d42607e0) 0
+ primary-for QGesture (0x0x7ff6d4287000)
+
+Vtable for QGestureEvent
+QGestureEvent::_ZTV13QGestureEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGestureEvent)
+16 (int (*)(...))QGestureEvent::~QGestureEvent
+24 (int (*)(...))QGestureEvent::~QGestureEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGestureEvent
+ size=64 align=8
+ base size=64 base align=8
+QGestureEvent (0x0x7ff6d4287068) 0
+ vptr=((& QGestureEvent::_ZTV13QGestureEvent) + 16)
+ QEvent (0x0x7ff6d42609c0) 0
+ primary-for QGestureEvent (0x0x7ff6d4287068)
+
+Vtable for QGestureRecognizer
+QGestureRecognizer::_ZTV18QGestureRecognizer: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGestureRecognizer)
+16 0
+24 0
+32 (int (*)(...))QGestureRecognizer::create
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGestureRecognizer::reset
+
+Class QGestureRecognizer
+ size=8 align=8
+ base size=8 base align=8
+QGestureRecognizer (0x0x7ff6d429d660) 0 nearly-empty
+ vptr=((& QGestureRecognizer::_ZTV18QGestureRecognizer) + 16)
+
+Vtable for QGraphicsItem
+QGraphicsItem::_ZTV13QGraphicsItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGraphicsItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsItem::isObscuredBy
+88 (int (*)(...))QGraphicsItem::opaqueArea
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))QGraphicsItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsItem (0x0x7ff6d429d9c0) 0
+ vptr=((& QGraphicsItem::_ZTV13QGraphicsItem) + 16)
+
+Class QGraphicsObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsObject::QPrivateSignal (0x0x7ff6d4383b40) 0 empty
+
+Vtable for QGraphicsObject
+QGraphicsObject::_ZTV15QGraphicsObject: 53 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsObject)
+16 (int (*)(...))QGraphicsObject::metaObject
+24 (int (*)(...))QGraphicsObject::qt_metacast
+32 (int (*)(...))QGraphicsObject::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QGraphicsObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))-16
+120 (int (*)(...))(& _ZTI15QGraphicsObject)
+128 0
+136 0
+144 (int (*)(...))QGraphicsItem::advance
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))QGraphicsItem::shape
+168 (int (*)(...))QGraphicsItem::contains
+176 (int (*)(...))QGraphicsItem::collidesWithItem
+184 (int (*)(...))QGraphicsItem::collidesWithPath
+192 (int (*)(...))QGraphicsItem::isObscuredBy
+200 (int (*)(...))QGraphicsItem::opaqueArea
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))QGraphicsItem::type
+224 (int (*)(...))QGraphicsItem::sceneEventFilter
+232 (int (*)(...))QGraphicsItem::sceneEvent
+240 (int (*)(...))QGraphicsItem::contextMenuEvent
+248 (int (*)(...))QGraphicsItem::dragEnterEvent
+256 (int (*)(...))QGraphicsItem::dragLeaveEvent
+264 (int (*)(...))QGraphicsItem::dragMoveEvent
+272 (int (*)(...))QGraphicsItem::dropEvent
+280 (int (*)(...))QGraphicsItem::focusInEvent
+288 (int (*)(...))QGraphicsItem::focusOutEvent
+296 (int (*)(...))QGraphicsItem::hoverEnterEvent
+304 (int (*)(...))QGraphicsItem::hoverMoveEvent
+312 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+320 (int (*)(...))QGraphicsItem::keyPressEvent
+328 (int (*)(...))QGraphicsItem::keyReleaseEvent
+336 (int (*)(...))QGraphicsItem::mousePressEvent
+344 (int (*)(...))QGraphicsItem::mouseMoveEvent
+352 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+360 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+368 (int (*)(...))QGraphicsItem::wheelEvent
+376 (int (*)(...))QGraphicsItem::inputMethodEvent
+384 (int (*)(...))QGraphicsItem::inputMethodQuery
+392 (int (*)(...))QGraphicsItem::itemChange
+400 (int (*)(...))QGraphicsItem::supportsExtension
+408 (int (*)(...))QGraphicsItem::setExtension
+416 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsObject
+ size=32 align=8
+ base size=32 base align=8
+QGraphicsObject (0x0x7ff6d432ac40) 0
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 16)
+ QObject (0x0x7ff6d4383a80) 0
+ primary-for QGraphicsObject (0x0x7ff6d432ac40)
+ QGraphicsItem (0x0x7ff6d4383ae0) 16
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 128)
+
+Vtable for QAbstractGraphicsShapeItem
+QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractGraphicsShapeItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QAbstractGraphicsShapeItem::isObscuredBy
+88 (int (*)(...))QAbstractGraphicsShapeItem::opaqueArea
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))QGraphicsItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QAbstractGraphicsShapeItem
+ size=16 align=8
+ base size=16 base align=8
+QAbstractGraphicsShapeItem (0x0x7ff6d4287af8) 0
+ vptr=((& QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem) + 16)
+ QGraphicsItem (0x0x7ff6d4383c00) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7ff6d4287af8)
+
+Vtable for QGraphicsPathItem
+QGraphicsPathItem::_ZTV17QGraphicsPathItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsPathItem)
+16 (int (*)(...))QGraphicsPathItem::~QGraphicsPathItem
+24 (int (*)(...))QGraphicsPathItem::~QGraphicsPathItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPathItem::boundingRect
+48 (int (*)(...))QGraphicsPathItem::shape
+56 (int (*)(...))QGraphicsPathItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPathItem::isObscuredBy
+88 (int (*)(...))QGraphicsPathItem::opaqueArea
+96 (int (*)(...))QGraphicsPathItem::paint
+104 (int (*)(...))QGraphicsPathItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPathItem::supportsExtension
+296 (int (*)(...))QGraphicsPathItem::setExtension
+304 (int (*)(...))QGraphicsPathItem::extension
+
+Class QGraphicsPathItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPathItem (0x0x7ff6d4287b60) 0
+ vptr=((& QGraphicsPathItem::_ZTV17QGraphicsPathItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7ff6d4287bc8) 0
+ primary-for QGraphicsPathItem (0x0x7ff6d4287b60)
+ QGraphicsItem (0x0x7ff6d4383d20) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7ff6d4287bc8)
+
+Vtable for QGraphicsRectItem
+QGraphicsRectItem::_ZTV17QGraphicsRectItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsRectItem)
+16 (int (*)(...))QGraphicsRectItem::~QGraphicsRectItem
+24 (int (*)(...))QGraphicsRectItem::~QGraphicsRectItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsRectItem::boundingRect
+48 (int (*)(...))QGraphicsRectItem::shape
+56 (int (*)(...))QGraphicsRectItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsRectItem::isObscuredBy
+88 (int (*)(...))QGraphicsRectItem::opaqueArea
+96 (int (*)(...))QGraphicsRectItem::paint
+104 (int (*)(...))QGraphicsRectItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsRectItem::supportsExtension
+296 (int (*)(...))QGraphicsRectItem::setExtension
+304 (int (*)(...))QGraphicsRectItem::extension
+
+Class QGraphicsRectItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsRectItem (0x0x7ff6d4287c30) 0
+ vptr=((& QGraphicsRectItem::_ZTV17QGraphicsRectItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7ff6d4287c98) 0
+ primary-for QGraphicsRectItem (0x0x7ff6d4287c30)
+ QGraphicsItem (0x0x7ff6d4383e40) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7ff6d4287c98)
+
+Vtable for QGraphicsEllipseItem
+QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsEllipseItem)
+16 (int (*)(...))QGraphicsEllipseItem::~QGraphicsEllipseItem
+24 (int (*)(...))QGraphicsEllipseItem::~QGraphicsEllipseItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsEllipseItem::boundingRect
+48 (int (*)(...))QGraphicsEllipseItem::shape
+56 (int (*)(...))QGraphicsEllipseItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsEllipseItem::isObscuredBy
+88 (int (*)(...))QGraphicsEllipseItem::opaqueArea
+96 (int (*)(...))QGraphicsEllipseItem::paint
+104 (int (*)(...))QGraphicsEllipseItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsEllipseItem::supportsExtension
+296 (int (*)(...))QGraphicsEllipseItem::setExtension
+304 (int (*)(...))QGraphicsEllipseItem::extension
+
+Class QGraphicsEllipseItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsEllipseItem (0x0x7ff6d4287d00) 0
+ vptr=((& QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7ff6d4287d68) 0
+ primary-for QGraphicsEllipseItem (0x0x7ff6d4287d00)
+ QGraphicsItem (0x0x7ff6d43c2000) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7ff6d4287d68)
+
+Vtable for QGraphicsPolygonItem
+QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsPolygonItem)
+16 (int (*)(...))QGraphicsPolygonItem::~QGraphicsPolygonItem
+24 (int (*)(...))QGraphicsPolygonItem::~QGraphicsPolygonItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPolygonItem::boundingRect
+48 (int (*)(...))QGraphicsPolygonItem::shape
+56 (int (*)(...))QGraphicsPolygonItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPolygonItem::isObscuredBy
+88 (int (*)(...))QGraphicsPolygonItem::opaqueArea
+96 (int (*)(...))QGraphicsPolygonItem::paint
+104 (int (*)(...))QGraphicsPolygonItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPolygonItem::supportsExtension
+296 (int (*)(...))QGraphicsPolygonItem::setExtension
+304 (int (*)(...))QGraphicsPolygonItem::extension
+
+Class QGraphicsPolygonItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPolygonItem (0x0x7ff6d4287dd0) 0
+ vptr=((& QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7ff6d4287e38) 0
+ primary-for QGraphicsPolygonItem (0x0x7ff6d4287dd0)
+ QGraphicsItem (0x0x7ff6d43c2180) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7ff6d4287e38)
+
+Vtable for QGraphicsLineItem
+QGraphicsLineItem::_ZTV17QGraphicsLineItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsLineItem)
+16 (int (*)(...))QGraphicsLineItem::~QGraphicsLineItem
+24 (int (*)(...))QGraphicsLineItem::~QGraphicsLineItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsLineItem::boundingRect
+48 (int (*)(...))QGraphicsLineItem::shape
+56 (int (*)(...))QGraphicsLineItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsLineItem::isObscuredBy
+88 (int (*)(...))QGraphicsLineItem::opaqueArea
+96 (int (*)(...))QGraphicsLineItem::paint
+104 (int (*)(...))QGraphicsLineItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsLineItem::supportsExtension
+296 (int (*)(...))QGraphicsLineItem::setExtension
+304 (int (*)(...))QGraphicsLineItem::extension
+
+Class QGraphicsLineItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLineItem (0x0x7ff6d4287ea0) 0
+ vptr=((& QGraphicsLineItem::_ZTV17QGraphicsLineItem) + 16)
+ QGraphicsItem (0x0x7ff6d43c22a0) 0
+ primary-for QGraphicsLineItem (0x0x7ff6d4287ea0)
+
+Vtable for QGraphicsPixmapItem
+QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsPixmapItem)
+16 (int (*)(...))QGraphicsPixmapItem::~QGraphicsPixmapItem
+24 (int (*)(...))QGraphicsPixmapItem::~QGraphicsPixmapItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPixmapItem::boundingRect
+48 (int (*)(...))QGraphicsPixmapItem::shape
+56 (int (*)(...))QGraphicsPixmapItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPixmapItem::isObscuredBy
+88 (int (*)(...))QGraphicsPixmapItem::opaqueArea
+96 (int (*)(...))QGraphicsPixmapItem::paint
+104 (int (*)(...))QGraphicsPixmapItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPixmapItem::supportsExtension
+296 (int (*)(...))QGraphicsPixmapItem::setExtension
+304 (int (*)(...))QGraphicsPixmapItem::extension
+
+Class QGraphicsPixmapItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPixmapItem (0x0x7ff6d4287f08) 0
+ vptr=((& QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem) + 16)
+ QGraphicsItem (0x0x7ff6d43c2420) 0
+ primary-for QGraphicsPixmapItem (0x0x7ff6d4287f08)
+
+Class QGraphicsTextItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTextItem::QPrivateSignal (0x0x7ff6d43c2660) 0 empty
+
+Vtable for QGraphicsTextItem
+QGraphicsTextItem::_ZTV17QGraphicsTextItem: 82 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsTextItem)
+16 (int (*)(...))QGraphicsTextItem::metaObject
+24 (int (*)(...))QGraphicsTextItem::qt_metacast
+32 (int (*)(...))QGraphicsTextItem::qt_metacall
+40 (int (*)(...))QGraphicsTextItem::~QGraphicsTextItem
+48 (int (*)(...))QGraphicsTextItem::~QGraphicsTextItem
+56 (int (*)(...))QGraphicsObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsTextItem::boundingRect
+120 (int (*)(...))QGraphicsTextItem::shape
+128 (int (*)(...))QGraphicsTextItem::contains
+136 (int (*)(...))QGraphicsTextItem::paint
+144 (int (*)(...))QGraphicsTextItem::isObscuredBy
+152 (int (*)(...))QGraphicsTextItem::opaqueArea
+160 (int (*)(...))QGraphicsTextItem::type
+168 (int (*)(...))QGraphicsTextItem::sceneEvent
+176 (int (*)(...))QGraphicsTextItem::mousePressEvent
+184 (int (*)(...))QGraphicsTextItem::mouseMoveEvent
+192 (int (*)(...))QGraphicsTextItem::mouseReleaseEvent
+200 (int (*)(...))QGraphicsTextItem::mouseDoubleClickEvent
+208 (int (*)(...))QGraphicsTextItem::contextMenuEvent
+216 (int (*)(...))QGraphicsTextItem::keyPressEvent
+224 (int (*)(...))QGraphicsTextItem::keyReleaseEvent
+232 (int (*)(...))QGraphicsTextItem::focusInEvent
+240 (int (*)(...))QGraphicsTextItem::focusOutEvent
+248 (int (*)(...))QGraphicsTextItem::dragEnterEvent
+256 (int (*)(...))QGraphicsTextItem::dragLeaveEvent
+264 (int (*)(...))QGraphicsTextItem::dragMoveEvent
+272 (int (*)(...))QGraphicsTextItem::dropEvent
+280 (int (*)(...))QGraphicsTextItem::inputMethodEvent
+288 (int (*)(...))QGraphicsTextItem::hoverEnterEvent
+296 (int (*)(...))QGraphicsTextItem::hoverMoveEvent
+304 (int (*)(...))QGraphicsTextItem::hoverLeaveEvent
+312 (int (*)(...))QGraphicsTextItem::inputMethodQuery
+320 (int (*)(...))QGraphicsTextItem::supportsExtension
+328 (int (*)(...))QGraphicsTextItem::setExtension
+336 (int (*)(...))QGraphicsTextItem::extension
+344 (int (*)(...))-16
+352 (int (*)(...))(& _ZTI17QGraphicsTextItem)
+360 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItemD1Ev
+368 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItemD0Ev
+376 (int (*)(...))QGraphicsItem::advance
+384 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem12boundingRectEv
+392 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem5shapeEv
+400 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem8containsERK7QPointF
+408 (int (*)(...))QGraphicsItem::collidesWithItem
+416 (int (*)(...))QGraphicsItem::collidesWithPath
+424 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem12isObscuredByEPK13QGraphicsItem
+432 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem10opaqueAreaEv
+440 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+448 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem4typeEv
+456 (int (*)(...))QGraphicsItem::sceneEventFilter
+464 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem10sceneEventEP6QEvent
+472 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem16contextMenuEventEP30QGraphicsSceneContextMenuEvent
+480 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14dragEnterEventEP27QGraphicsSceneDragDropEvent
+488 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14dragLeaveEventEP27QGraphicsSceneDragDropEvent
+496 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13dragMoveEventEP27QGraphicsSceneDragDropEvent
+504 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem9dropEventEP27QGraphicsSceneDragDropEvent
+512 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem12focusInEventEP11QFocusEvent
+520 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13focusOutEventEP11QFocusEvent
+528 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15hoverEnterEventEP24QGraphicsSceneHoverEvent
+536 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14hoverMoveEventEP24QGraphicsSceneHoverEvent
+544 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+552 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13keyPressEventEP9QKeyEvent
+560 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15keyReleaseEventEP9QKeyEvent
+568 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15mousePressEventEP24QGraphicsSceneMouseEvent
+576 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14mouseMoveEventEP24QGraphicsSceneMouseEvent
+584 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem17mouseReleaseEventEP24QGraphicsSceneMouseEvent
+592 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent
+600 (int (*)(...))QGraphicsItem::wheelEvent
+608 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem16inputMethodEventEP17QInputMethodEvent
+616 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem16inputMethodQueryEN2Qt16InputMethodQueryE
+624 (int (*)(...))QGraphicsItem::itemChange
+632 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem17supportsExtensionEN13QGraphicsItem9ExtensionE
+640 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem12setExtensionEN13QGraphicsItem9ExtensionERK8QVariant
+648 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem9extensionERK8QVariant
+
+Class QGraphicsTextItem
+ size=40 align=8
+ base size=40 base align=8
+QGraphicsTextItem (0x0x7ff6d4287f70) 0
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 16)
+ QGraphicsObject (0x0x7ff6d43eb0e0) 0
+ primary-for QGraphicsTextItem (0x0x7ff6d4287f70)
+ QObject (0x0x7ff6d43c25a0) 0
+ primary-for QGraphicsObject (0x0x7ff6d43eb0e0)
+ QGraphicsItem (0x0x7ff6d43c2600) 16
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 360)
+
+Vtable for QGraphicsSimpleTextItem
+QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSimpleTextItem)
+16 (int (*)(...))QGraphicsSimpleTextItem::~QGraphicsSimpleTextItem
+24 (int (*)(...))QGraphicsSimpleTextItem::~QGraphicsSimpleTextItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsSimpleTextItem::boundingRect
+48 (int (*)(...))QGraphicsSimpleTextItem::shape
+56 (int (*)(...))QGraphicsSimpleTextItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsSimpleTextItem::isObscuredBy
+88 (int (*)(...))QGraphicsSimpleTextItem::opaqueArea
+96 (int (*)(...))QGraphicsSimpleTextItem::paint
+104 (int (*)(...))QGraphicsSimpleTextItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsSimpleTextItem::supportsExtension
+296 (int (*)(...))QGraphicsSimpleTextItem::setExtension
+304 (int (*)(...))QGraphicsSimpleTextItem::extension
+
+Class QGraphicsSimpleTextItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsSimpleTextItem (0x0x7ff6d440e068) 0
+ vptr=((& QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7ff6d440e0d0) 0
+ primary-for QGraphicsSimpleTextItem (0x0x7ff6d440e068)
+ QGraphicsItem (0x0x7ff6d43c2900) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7ff6d440e0d0)
+
+Vtable for QGraphicsItemGroup
+QGraphicsItemGroup::_ZTV18QGraphicsItemGroup: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGraphicsItemGroup)
+16 (int (*)(...))QGraphicsItemGroup::~QGraphicsItemGroup
+24 (int (*)(...))QGraphicsItemGroup::~QGraphicsItemGroup
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsItemGroup::boundingRect
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsItemGroup::isObscuredBy
+88 (int (*)(...))QGraphicsItemGroup::opaqueArea
+96 (int (*)(...))QGraphicsItemGroup::paint
+104 (int (*)(...))QGraphicsItemGroup::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsItemGroup
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsItemGroup (0x0x7ff6d440e138) 0
+ vptr=((& QGraphicsItemGroup::_ZTV18QGraphicsItemGroup) + 16)
+ QGraphicsItem (0x0x7ff6d43c2a20) 0
+ primary-for QGraphicsItemGroup (0x0x7ff6d440e138)
+
+Vtable for QGraphicsLayoutItem
+QGraphicsLayoutItem::_ZTV19QGraphicsLayoutItem: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsLayoutItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsLayoutItem::setGeometry
+40 (int (*)(...))QGraphicsLayoutItem::getContentsMargins
+48 (int (*)(...))QGraphicsLayoutItem::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsLayoutItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLayoutItem (0x0x7ff6d43c2d20) 0
+ vptr=((& QGraphicsLayoutItem::_ZTV19QGraphicsLayoutItem) + 16)
+
+Vtable for QGraphicsLayout
+QGraphicsLayout::_ZTV15QGraphicsLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsLayout)
+16 0
+24 0
+32 (int (*)(...))QGraphicsLayoutItem::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))QGraphicsLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLayout (0x0x7ff6d440e1a0) 0
+ vptr=((& QGraphicsLayout::_ZTV15QGraphicsLayout) + 16)
+ QGraphicsLayoutItem (0x0x7ff6d443b420) 0
+ primary-for QGraphicsLayout (0x0x7ff6d440e1a0)
+
+Class QGraphicsAnchor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsAnchor::QPrivateSignal (0x0x7ff6d443b720) 0 empty
+
+Vtable for QGraphicsAnchor
+QGraphicsAnchor::_ZTV15QGraphicsAnchor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsAnchor)
+16 (int (*)(...))QGraphicsAnchor::metaObject
+24 (int (*)(...))QGraphicsAnchor::qt_metacast
+32 (int (*)(...))QGraphicsAnchor::qt_metacall
+40 (int (*)(...))QGraphicsAnchor::~QGraphicsAnchor
+48 (int (*)(...))QGraphicsAnchor::~QGraphicsAnchor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QGraphicsAnchor
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsAnchor (0x0x7ff6d440e208) 0
+ vptr=((& QGraphicsAnchor::_ZTV15QGraphicsAnchor) + 16)
+ QObject (0x0x7ff6d443b6c0) 0
+ primary-for QGraphicsAnchor (0x0x7ff6d440e208)
+
+Vtable for QGraphicsAnchorLayout
+QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QGraphicsAnchorLayout)
+16 (int (*)(...))QGraphicsAnchorLayout::~QGraphicsAnchorLayout
+24 (int (*)(...))QGraphicsAnchorLayout::~QGraphicsAnchorLayout
+32 (int (*)(...))QGraphicsAnchorLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsAnchorLayout::sizeHint
+72 (int (*)(...))QGraphicsAnchorLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsAnchorLayout::count
+96 (int (*)(...))QGraphicsAnchorLayout::itemAt
+104 (int (*)(...))QGraphicsAnchorLayout::removeAt
+
+Class QGraphicsAnchorLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsAnchorLayout (0x0x7ff6d440e270) 0
+ vptr=((& QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout) + 16)
+ QGraphicsLayout (0x0x7ff6d440e2d8) 0
+ primary-for QGraphicsAnchorLayout (0x0x7ff6d440e270)
+ QGraphicsLayoutItem (0x0x7ff6d443b8a0) 0
+ primary-for QGraphicsLayout (0x0x7ff6d440e2d8)
+
+Class QGraphicsEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsEffect::QPrivateSignal (0x0x7ff6d443ba20) 0 empty
+
+Vtable for QGraphicsEffect
+QGraphicsEffect::_ZTV15QGraphicsEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsEffect)
+16 (int (*)(...))QGraphicsEffect::metaObject
+24 (int (*)(...))QGraphicsEffect::qt_metacast
+32 (int (*)(...))QGraphicsEffect::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsEffect (0x0x7ff6d440e340) 0
+ vptr=((& QGraphicsEffect::_ZTV15QGraphicsEffect) + 16)
+ QObject (0x0x7ff6d443b9c0) 0
+ primary-for QGraphicsEffect (0x0x7ff6d440e340)
+
+Class QGraphicsColorizeEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsColorizeEffect::QPrivateSignal (0x0x7ff6d408a000) 0 empty
+
+Vtable for QGraphicsColorizeEffect
+QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsColorizeEffect)
+16 (int (*)(...))QGraphicsColorizeEffect::metaObject
+24 (int (*)(...))QGraphicsColorizeEffect::qt_metacast
+32 (int (*)(...))QGraphicsColorizeEffect::qt_metacall
+40 (int (*)(...))QGraphicsColorizeEffect::~QGraphicsColorizeEffect
+48 (int (*)(...))QGraphicsColorizeEffect::~QGraphicsColorizeEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))QGraphicsColorizeEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsColorizeEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsColorizeEffect (0x0x7ff6d440e4e0) 0
+ vptr=((& QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect) + 16)
+ QGraphicsEffect (0x0x7ff6d440e548) 0
+ primary-for QGraphicsColorizeEffect (0x0x7ff6d440e4e0)
+ QObject (0x0x7ff6d443bf60) 0
+ primary-for QGraphicsEffect (0x0x7ff6d440e548)
+
+Class QGraphicsBlurEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsBlurEffect::QPrivateSignal (0x0x7ff6d408a1e0) 0 empty
+
+Vtable for QGraphicsBlurEffect
+QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsBlurEffect)
+16 (int (*)(...))QGraphicsBlurEffect::metaObject
+24 (int (*)(...))QGraphicsBlurEffect::qt_metacast
+32 (int (*)(...))QGraphicsBlurEffect::qt_metacall
+40 (int (*)(...))QGraphicsBlurEffect::~QGraphicsBlurEffect
+48 (int (*)(...))QGraphicsBlurEffect::~QGraphicsBlurEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsBlurEffect::boundingRectFor
+120 (int (*)(...))QGraphicsBlurEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsBlurEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsBlurEffect (0x0x7ff6d440e5b0) 0
+ vptr=((& QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect) + 16)
+ QGraphicsEffect (0x0x7ff6d440e618) 0
+ primary-for QGraphicsBlurEffect (0x0x7ff6d440e5b0)
+ QObject (0x0x7ff6d408a180) 0
+ primary-for QGraphicsEffect (0x0x7ff6d440e618)
+
+Class QGraphicsDropShadowEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsDropShadowEffect::QPrivateSignal (0x0x7ff6d408a840) 0 empty
+
+Vtable for QGraphicsDropShadowEffect
+QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QGraphicsDropShadowEffect)
+16 (int (*)(...))QGraphicsDropShadowEffect::metaObject
+24 (int (*)(...))QGraphicsDropShadowEffect::qt_metacast
+32 (int (*)(...))QGraphicsDropShadowEffect::qt_metacall
+40 (int (*)(...))QGraphicsDropShadowEffect::~QGraphicsDropShadowEffect
+48 (int (*)(...))QGraphicsDropShadowEffect::~QGraphicsDropShadowEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsDropShadowEffect::boundingRectFor
+120 (int (*)(...))QGraphicsDropShadowEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsDropShadowEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsDropShadowEffect (0x0x7ff6d440e7b8) 0
+ vptr=((& QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect) + 16)
+ QGraphicsEffect (0x0x7ff6d440e820) 0
+ primary-for QGraphicsDropShadowEffect (0x0x7ff6d440e7b8)
+ QObject (0x0x7ff6d408a7e0) 0
+ primary-for QGraphicsEffect (0x0x7ff6d440e820)
+
+Class QGraphicsOpacityEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsOpacityEffect::QPrivateSignal (0x0x7ff6d408ac60) 0 empty
+
+Vtable for QGraphicsOpacityEffect
+QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QGraphicsOpacityEffect)
+16 (int (*)(...))QGraphicsOpacityEffect::metaObject
+24 (int (*)(...))QGraphicsOpacityEffect::qt_metacast
+32 (int (*)(...))QGraphicsOpacityEffect::qt_metacall
+40 (int (*)(...))QGraphicsOpacityEffect::~QGraphicsOpacityEffect
+48 (int (*)(...))QGraphicsOpacityEffect::~QGraphicsOpacityEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))QGraphicsOpacityEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsOpacityEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsOpacityEffect (0x0x7ff6d440e888) 0
+ vptr=((& QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect) + 16)
+ QGraphicsEffect (0x0x7ff6d440e8f0) 0
+ primary-for QGraphicsOpacityEffect (0x0x7ff6d440e888)
+ QObject (0x0x7ff6d408ac00) 0
+ primary-for QGraphicsEffect (0x0x7ff6d440e8f0)
+
+Vtable for QGraphicsGridLayout
+QGraphicsGridLayout::_ZTV19QGraphicsGridLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsGridLayout)
+16 (int (*)(...))QGraphicsGridLayout::~QGraphicsGridLayout
+24 (int (*)(...))QGraphicsGridLayout::~QGraphicsGridLayout
+32 (int (*)(...))QGraphicsGridLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsGridLayout::sizeHint
+72 (int (*)(...))QGraphicsGridLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsGridLayout::count
+96 (int (*)(...))QGraphicsGridLayout::itemAt
+104 (int (*)(...))QGraphicsGridLayout::removeAt
+
+Class QGraphicsGridLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsGridLayout (0x0x7ff6d440e958) 0
+ vptr=((& QGraphicsGridLayout::_ZTV19QGraphicsGridLayout) + 16)
+ QGraphicsLayout (0x0x7ff6d440e9c0) 0
+ primary-for QGraphicsGridLayout (0x0x7ff6d440e958)
+ QGraphicsLayoutItem (0x0x7ff6d408ade0) 0
+ primary-for QGraphicsLayout (0x0x7ff6d440e9c0)
+
+Class QGraphicsItemAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsItemAnimation::QPrivateSignal (0x0x7ff6d40e5000) 0 empty
+
+Vtable for QGraphicsItemAnimation
+QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QGraphicsItemAnimation)
+16 (int (*)(...))QGraphicsItemAnimation::metaObject
+24 (int (*)(...))QGraphicsItemAnimation::qt_metacast
+32 (int (*)(...))QGraphicsItemAnimation::qt_metacall
+40 (int (*)(...))QGraphicsItemAnimation::~QGraphicsItemAnimation
+48 (int (*)(...))QGraphicsItemAnimation::~QGraphicsItemAnimation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsItemAnimation::beforeAnimationStep
+120 (int (*)(...))QGraphicsItemAnimation::afterAnimationStep
+
+Class QGraphicsItemAnimation
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsItemAnimation (0x0x7ff6d440eaf8) 0
+ vptr=((& QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation) + 16)
+ QObject (0x0x7ff6d408af60) 0
+ primary-for QGraphicsItemAnimation (0x0x7ff6d440eaf8)
+
+Vtable for QGraphicsLinearLayout
+QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QGraphicsLinearLayout)
+16 (int (*)(...))QGraphicsLinearLayout::~QGraphicsLinearLayout
+24 (int (*)(...))QGraphicsLinearLayout::~QGraphicsLinearLayout
+32 (int (*)(...))QGraphicsLinearLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsLinearLayout::sizeHint
+72 (int (*)(...))QGraphicsLinearLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsLinearLayout::count
+96 (int (*)(...))QGraphicsLinearLayout::itemAt
+104 (int (*)(...))QGraphicsLinearLayout::removeAt
+
+Class QGraphicsLinearLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLinearLayout (0x0x7ff6d440eb60) 0
+ vptr=((& QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout) + 16)
+ QGraphicsLayout (0x0x7ff6d440ebc8) 0
+ primary-for QGraphicsLinearLayout (0x0x7ff6d440eb60)
+ QGraphicsLayoutItem (0x0x7ff6d40e50c0) 0
+ primary-for QGraphicsLayout (0x0x7ff6d440ebc8)
+
+Class QGraphicsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsWidget::QPrivateSignal (0x0x7ff6d40e53c0) 0 empty
+
+Vtable for QGraphicsWidget
+QGraphicsWidget::_ZTV15QGraphicsWidget: 93 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsWidget)
+16 (int (*)(...))QGraphicsWidget::metaObject
+24 (int (*)(...))QGraphicsWidget::qt_metacast
+32 (int (*)(...))QGraphicsWidget::qt_metacall
+40 (int (*)(...))QGraphicsWidget::~QGraphicsWidget
+48 (int (*)(...))QGraphicsWidget::~QGraphicsWidget
+56 (int (*)(...))QGraphicsWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsWidget::setGeometry
+120 (int (*)(...))QGraphicsWidget::getContentsMargins
+128 (int (*)(...))QGraphicsWidget::type
+136 (int (*)(...))QGraphicsWidget::paint
+144 (int (*)(...))QGraphicsWidget::paintWindowFrame
+152 (int (*)(...))QGraphicsWidget::boundingRect
+160 (int (*)(...))QGraphicsWidget::shape
+168 (int (*)(...))QGraphicsWidget::initStyleOption
+176 (int (*)(...))QGraphicsWidget::sizeHint
+184 (int (*)(...))QGraphicsWidget::updateGeometry
+192 (int (*)(...))QGraphicsWidget::itemChange
+200 (int (*)(...))QGraphicsWidget::propertyChange
+208 (int (*)(...))QGraphicsWidget::sceneEvent
+216 (int (*)(...))QGraphicsWidget::windowFrameEvent
+224 (int (*)(...))QGraphicsWidget::windowFrameSectionAt
+232 (int (*)(...))QGraphicsWidget::changeEvent
+240 (int (*)(...))QGraphicsWidget::closeEvent
+248 (int (*)(...))QGraphicsWidget::focusInEvent
+256 (int (*)(...))QGraphicsWidget::focusNextPrevChild
+264 (int (*)(...))QGraphicsWidget::focusOutEvent
+272 (int (*)(...))QGraphicsWidget::hideEvent
+280 (int (*)(...))QGraphicsWidget::moveEvent
+288 (int (*)(...))QGraphicsWidget::polishEvent
+296 (int (*)(...))QGraphicsWidget::resizeEvent
+304 (int (*)(...))QGraphicsWidget::showEvent
+312 (int (*)(...))QGraphicsWidget::hoverMoveEvent
+320 (int (*)(...))QGraphicsWidget::hoverLeaveEvent
+328 (int (*)(...))QGraphicsWidget::grabMouseEvent
+336 (int (*)(...))QGraphicsWidget::ungrabMouseEvent
+344 (int (*)(...))QGraphicsWidget::grabKeyboardEvent
+352 (int (*)(...))QGraphicsWidget::ungrabKeyboardEvent
+360 (int (*)(...))-16
+368 (int (*)(...))(& _ZTI15QGraphicsWidget)
+376 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidgetD1Ev
+384 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidgetD0Ev
+392 (int (*)(...))QGraphicsItem::advance
+400 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget12boundingRectEv
+408 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget5shapeEv
+416 (int (*)(...))QGraphicsItem::contains
+424 (int (*)(...))QGraphicsItem::collidesWithItem
+432 (int (*)(...))QGraphicsItem::collidesWithPath
+440 (int (*)(...))QGraphicsItem::isObscuredBy
+448 (int (*)(...))QGraphicsItem::opaqueArea
+456 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+464 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget4typeEv
+472 (int (*)(...))QGraphicsItem::sceneEventFilter
+480 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10sceneEventEP6QEvent
+488 (int (*)(...))QGraphicsItem::contextMenuEvent
+496 (int (*)(...))QGraphicsItem::dragEnterEvent
+504 (int (*)(...))QGraphicsItem::dragLeaveEvent
+512 (int (*)(...))QGraphicsItem::dragMoveEvent
+520 (int (*)(...))QGraphicsItem::dropEvent
+528 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget12focusInEventEP11QFocusEvent
+536 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget13focusOutEventEP11QFocusEvent
+544 (int (*)(...))QGraphicsItem::hoverEnterEvent
+552 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget14hoverMoveEventEP24QGraphicsSceneHoverEvent
+560 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+568 (int (*)(...))QGraphicsItem::keyPressEvent
+576 (int (*)(...))QGraphicsItem::keyReleaseEvent
+584 (int (*)(...))QGraphicsItem::mousePressEvent
+592 (int (*)(...))QGraphicsItem::mouseMoveEvent
+600 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+608 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+616 (int (*)(...))QGraphicsItem::wheelEvent
+624 (int (*)(...))QGraphicsItem::inputMethodEvent
+632 (int (*)(...))QGraphicsItem::inputMethodQuery
+640 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant
+648 (int (*)(...))QGraphicsItem::supportsExtension
+656 (int (*)(...))QGraphicsItem::setExtension
+664 (int (*)(...))QGraphicsItem::extension
+672 (int (*)(...))-32
+680 (int (*)(...))(& _ZTI15QGraphicsWidget)
+688 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidgetD1Ev
+696 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidgetD0Ev
+704 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget11setGeometryERK6QRectF
+712 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget18getContentsMarginsEPdS0_S0_S0_
+720 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget14updateGeometryEv
+728 (int (*)(...))QGraphicsLayoutItem::isEmpty
+736 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget8sizeHintEN2Qt8SizeHintERK6QSizeF
+
+Class QGraphicsWidget
+ size=48 align=8
+ base size=48 base align=8
+QGraphicsWidget (0x0x7ff6d43ebcb0) 0
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 16)
+ QGraphicsObject (0x0x7ff6d43ebd20) 0
+ primary-for QGraphicsWidget (0x0x7ff6d43ebcb0)
+ QObject (0x0x7ff6d40e52a0) 0
+ primary-for QGraphicsObject (0x0x7ff6d43ebd20)
+ QGraphicsItem (0x0x7ff6d40e5300) 16
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 376)
+ QGraphicsLayoutItem (0x0x7ff6d40e5360) 32
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 688)
+
+Class QGraphicsProxyWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsProxyWidget::QPrivateSignal (0x0x7ff6d40e5840) 0 empty
+
+Vtable for QGraphicsProxyWidget
+QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+16 (int (*)(...))QGraphicsProxyWidget::metaObject
+24 (int (*)(...))QGraphicsProxyWidget::qt_metacast
+32 (int (*)(...))QGraphicsProxyWidget::qt_metacall
+40 (int (*)(...))QGraphicsProxyWidget::~QGraphicsProxyWidget
+48 (int (*)(...))QGraphicsProxyWidget::~QGraphicsProxyWidget
+56 (int (*)(...))QGraphicsProxyWidget::event
+64 (int (*)(...))QGraphicsProxyWidget::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsProxyWidget::setGeometry
+120 (int (*)(...))QGraphicsWidget::getContentsMargins
+128 (int (*)(...))QGraphicsProxyWidget::type
+136 (int (*)(...))QGraphicsProxyWidget::paint
+144 (int (*)(...))QGraphicsWidget::paintWindowFrame
+152 (int (*)(...))QGraphicsWidget::boundingRect
+160 (int (*)(...))QGraphicsWidget::shape
+168 (int (*)(...))QGraphicsWidget::initStyleOption
+176 (int (*)(...))QGraphicsProxyWidget::sizeHint
+184 (int (*)(...))QGraphicsWidget::updateGeometry
+192 (int (*)(...))QGraphicsProxyWidget::itemChange
+200 (int (*)(...))QGraphicsWidget::propertyChange
+208 (int (*)(...))QGraphicsWidget::sceneEvent
+216 (int (*)(...))QGraphicsWidget::windowFrameEvent
+224 (int (*)(...))QGraphicsWidget::windowFrameSectionAt
+232 (int (*)(...))QGraphicsWidget::changeEvent
+240 (int (*)(...))QGraphicsWidget::closeEvent
+248 (int (*)(...))QGraphicsProxyWidget::focusInEvent
+256 (int (*)(...))QGraphicsProxyWidget::focusNextPrevChild
+264 (int (*)(...))QGraphicsProxyWidget::focusOutEvent
+272 (int (*)(...))QGraphicsProxyWidget::hideEvent
+280 (int (*)(...))QGraphicsWidget::moveEvent
+288 (int (*)(...))QGraphicsWidget::polishEvent
+296 (int (*)(...))QGraphicsProxyWidget::resizeEvent
+304 (int (*)(...))QGraphicsProxyWidget::showEvent
+312 (int (*)(...))QGraphicsProxyWidget::hoverMoveEvent
+320 (int (*)(...))QGraphicsProxyWidget::hoverLeaveEvent
+328 (int (*)(...))QGraphicsProxyWidget::grabMouseEvent
+336 (int (*)(...))QGraphicsProxyWidget::ungrabMouseEvent
+344 (int (*)(...))QGraphicsWidget::grabKeyboardEvent
+352 (int (*)(...))QGraphicsWidget::ungrabKeyboardEvent
+360 (int (*)(...))QGraphicsProxyWidget::contextMenuEvent
+368 (int (*)(...))QGraphicsProxyWidget::dragEnterEvent
+376 (int (*)(...))QGraphicsProxyWidget::dragLeaveEvent
+384 (int (*)(...))QGraphicsProxyWidget::dragMoveEvent
+392 (int (*)(...))QGraphicsProxyWidget::dropEvent
+400 (int (*)(...))QGraphicsProxyWidget::hoverEnterEvent
+408 (int (*)(...))QGraphicsProxyWidget::mouseMoveEvent
+416 (int (*)(...))QGraphicsProxyWidget::mousePressEvent
+424 (int (*)(...))QGraphicsProxyWidget::mouseReleaseEvent
+432 (int (*)(...))QGraphicsProxyWidget::mouseDoubleClickEvent
+440 (int (*)(...))QGraphicsProxyWidget::wheelEvent
+448 (int (*)(...))QGraphicsProxyWidget::keyPressEvent
+456 (int (*)(...))QGraphicsProxyWidget::keyReleaseEvent
+464 (int (*)(...))QGraphicsProxyWidget::inputMethodQuery
+472 (int (*)(...))QGraphicsProxyWidget::inputMethodEvent
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+496 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidgetD1Ev
+504 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidgetD0Ev
+512 (int (*)(...))QGraphicsItem::advance
+520 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget12boundingRectEv
+528 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget5shapeEv
+536 (int (*)(...))QGraphicsItem::contains
+544 (int (*)(...))QGraphicsItem::collidesWithItem
+552 (int (*)(...))QGraphicsItem::collidesWithPath
+560 (int (*)(...))QGraphicsItem::isObscuredBy
+568 (int (*)(...))QGraphicsItem::opaqueArea
+576 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+584 (int (*)(...))QGraphicsProxyWidget::_ZThn16_NK20QGraphicsProxyWidget4typeEv
+592 (int (*)(...))QGraphicsItem::sceneEventFilter
+600 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10sceneEventEP6QEvent
+608 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget16contextMenuEventEP30QGraphicsSceneContextMenuEvent
+616 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14dragEnterEventEP27QGraphicsSceneDragDropEvent
+624 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14dragLeaveEventEP27QGraphicsSceneDragDropEvent
+632 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13dragMoveEventEP27QGraphicsSceneDragDropEvent
+640 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget9dropEventEP27QGraphicsSceneDragDropEvent
+648 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget12focusInEventEP11QFocusEvent
+656 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13focusOutEventEP11QFocusEvent
+664 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15hoverEnterEventEP24QGraphicsSceneHoverEvent
+672 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14hoverMoveEventEP24QGraphicsSceneHoverEvent
+680 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+688 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13keyPressEventEP9QKeyEvent
+696 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15keyReleaseEventEP9QKeyEvent
+704 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15mousePressEventEP24QGraphicsSceneMouseEvent
+712 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14mouseMoveEventEP24QGraphicsSceneMouseEvent
+720 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget17mouseReleaseEventEP24QGraphicsSceneMouseEvent
+728 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent
+736 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget10wheelEventEP24QGraphicsSceneWheelEvent
+744 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget16inputMethodEventEP17QInputMethodEvent
+752 (int (*)(...))QGraphicsProxyWidget::_ZThn16_NK20QGraphicsProxyWidget16inputMethodQueryEN2Qt16InputMethodQueryE
+760 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant
+768 (int (*)(...))QGraphicsItem::supportsExtension
+776 (int (*)(...))QGraphicsItem::setExtension
+784 (int (*)(...))QGraphicsItem::extension
+792 (int (*)(...))-32
+800 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+808 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidgetD1Ev
+816 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidgetD0Ev
+824 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidget11setGeometryERK6QRectF
+832 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget18getContentsMarginsEPdS0_S0_S0_
+840 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget14updateGeometryEv
+848 (int (*)(...))QGraphicsLayoutItem::isEmpty
+856 (int (*)(...))QGraphicsProxyWidget::_ZThn32_NK20QGraphicsProxyWidget8sizeHintEN2Qt8SizeHintERK6QSizeF
+
+Class QGraphicsProxyWidget
+ size=48 align=8
+ base size=48 base align=8
+QGraphicsProxyWidget (0x0x7ff6d440ed00) 0
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 16)
+ QGraphicsWidget (0x0x7ff6d43ebe70) 0
+ primary-for QGraphicsProxyWidget (0x0x7ff6d440ed00)
+ QGraphicsObject (0x0x7ff6d43ebee0) 0
+ primary-for QGraphicsWidget (0x0x7ff6d43ebe70)
+ QObject (0x0x7ff6d40e5720) 0
+ primary-for QGraphicsObject (0x0x7ff6d43ebee0)
+ QGraphicsItem (0x0x7ff6d40e5780) 16
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 496)
+ QGraphicsLayoutItem (0x0x7ff6d40e57e0) 32
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 808)
+
+Class QGraphicsScene::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScene::QPrivateSignal (0x0x7ff6d40e5ba0) 0 empty
+
+Vtable for QGraphicsScene
+QGraphicsScene::_ZTV14QGraphicsScene: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGraphicsScene)
+16 (int (*)(...))QGraphicsScene::metaObject
+24 (int (*)(...))QGraphicsScene::qt_metacast
+32 (int (*)(...))QGraphicsScene::qt_metacall
+40 (int (*)(...))QGraphicsScene::~QGraphicsScene
+48 (int (*)(...))QGraphicsScene::~QGraphicsScene
+56 (int (*)(...))QGraphicsScene::event
+64 (int (*)(...))QGraphicsScene::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsScene::inputMethodQuery
+120 (int (*)(...))QGraphicsScene::contextMenuEvent
+128 (int (*)(...))QGraphicsScene::dragEnterEvent
+136 (int (*)(...))QGraphicsScene::dragMoveEvent
+144 (int (*)(...))QGraphicsScene::dragLeaveEvent
+152 (int (*)(...))QGraphicsScene::dropEvent
+160 (int (*)(...))QGraphicsScene::focusInEvent
+168 (int (*)(...))QGraphicsScene::focusOutEvent
+176 (int (*)(...))QGraphicsScene::helpEvent
+184 (int (*)(...))QGraphicsScene::keyPressEvent
+192 (int (*)(...))QGraphicsScene::keyReleaseEvent
+200 (int (*)(...))QGraphicsScene::mousePressEvent
+208 (int (*)(...))QGraphicsScene::mouseMoveEvent
+216 (int (*)(...))QGraphicsScene::mouseReleaseEvent
+224 (int (*)(...))QGraphicsScene::mouseDoubleClickEvent
+232 (int (*)(...))QGraphicsScene::wheelEvent
+240 (int (*)(...))QGraphicsScene::inputMethodEvent
+248 (int (*)(...))QGraphicsScene::drawBackground
+256 (int (*)(...))QGraphicsScene::drawForeground
+264 (int (*)(...))QGraphicsScene::drawItems
+272 (int (*)(...))QGraphicsScene::focusNextPrevChild
+
+Class QGraphicsScene
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsScene (0x0x7ff6d440ef08) 0
+ vptr=((& QGraphicsScene::_ZTV14QGraphicsScene) + 16)
+ QObject (0x0x7ff6d40e5b40) 0
+ primary-for QGraphicsScene (0x0x7ff6d440ef08)
+
+Vtable for QGraphicsSceneEvent
+QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsSceneEvent)
+16 (int (*)(...))QGraphicsSceneEvent::~QGraphicsSceneEvent
+24 (int (*)(...))QGraphicsSceneEvent::~QGraphicsSceneEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneEvent (0x0x7ff6d4160958) 0
+ vptr=((& QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent) + 16)
+ QEvent (0x0x7ff6d4171f00) 0
+ primary-for QGraphicsSceneEvent (0x0x7ff6d4160958)
+
+Vtable for QGraphicsSceneMouseEvent
+QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneMouseEvent)
+16 (int (*)(...))QGraphicsSceneMouseEvent::~QGraphicsSceneMouseEvent
+24 (int (*)(...))QGraphicsSceneMouseEvent::~QGraphicsSceneMouseEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneMouseEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneMouseEvent (0x0x7ff6d41609c0) 0
+ vptr=((& QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent) + 16)
+ QGraphicsSceneEvent (0x0x7ff6d4160a28) 0
+ primary-for QGraphicsSceneMouseEvent (0x0x7ff6d41609c0)
+ QEvent (0x0x7ff6d41cc0c0) 0
+ primary-for QGraphicsSceneEvent (0x0x7ff6d4160a28)
+
+Vtable for QGraphicsSceneWheelEvent
+QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneWheelEvent)
+16 (int (*)(...))QGraphicsSceneWheelEvent::~QGraphicsSceneWheelEvent
+24 (int (*)(...))QGraphicsSceneWheelEvent::~QGraphicsSceneWheelEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneWheelEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneWheelEvent (0x0x7ff6d4160a90) 0
+ vptr=((& QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent) + 16)
+ QGraphicsSceneEvent (0x0x7ff6d4160af8) 0
+ primary-for QGraphicsSceneWheelEvent (0x0x7ff6d4160a90)
+ QEvent (0x0x7ff6d41cc1e0) 0
+ primary-for QGraphicsSceneEvent (0x0x7ff6d4160af8)
+
+Vtable for QGraphicsSceneContextMenuEvent
+QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI30QGraphicsSceneContextMenuEvent)
+16 (int (*)(...))QGraphicsSceneContextMenuEvent::~QGraphicsSceneContextMenuEvent
+24 (int (*)(...))QGraphicsSceneContextMenuEvent::~QGraphicsSceneContextMenuEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneContextMenuEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneContextMenuEvent (0x0x7ff6d4160b60) 0
+ vptr=((& QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent) + 16)
+ QGraphicsSceneEvent (0x0x7ff6d4160bc8) 0
+ primary-for QGraphicsSceneContextMenuEvent (0x0x7ff6d4160b60)
+ QEvent (0x0x7ff6d41cc300) 0
+ primary-for QGraphicsSceneEvent (0x0x7ff6d4160bc8)
+
+Vtable for QGraphicsSceneHoverEvent
+QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneHoverEvent)
+16 (int (*)(...))QGraphicsSceneHoverEvent::~QGraphicsSceneHoverEvent
+24 (int (*)(...))QGraphicsSceneHoverEvent::~QGraphicsSceneHoverEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneHoverEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneHoverEvent (0x0x7ff6d4160c30) 0
+ vptr=((& QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent) + 16)
+ QGraphicsSceneEvent (0x0x7ff6d4160c98) 0
+ primary-for QGraphicsSceneHoverEvent (0x0x7ff6d4160c30)
+ QEvent (0x0x7ff6d41cc420) 0
+ primary-for QGraphicsSceneEvent (0x0x7ff6d4160c98)
+
+Vtable for QGraphicsSceneHelpEvent
+QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSceneHelpEvent)
+16 (int (*)(...))QGraphicsSceneHelpEvent::~QGraphicsSceneHelpEvent
+24 (int (*)(...))QGraphicsSceneHelpEvent::~QGraphicsSceneHelpEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneHelpEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneHelpEvent (0x0x7ff6d4160d00) 0
+ vptr=((& QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent) + 16)
+ QGraphicsSceneEvent (0x0x7ff6d4160d68) 0
+ primary-for QGraphicsSceneHelpEvent (0x0x7ff6d4160d00)
+ QEvent (0x0x7ff6d41cc540) 0
+ primary-for QGraphicsSceneEvent (0x0x7ff6d4160d68)
+
+Vtable for QGraphicsSceneDragDropEvent
+QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QGraphicsSceneDragDropEvent)
+16 (int (*)(...))QGraphicsSceneDragDropEvent::~QGraphicsSceneDragDropEvent
+24 (int (*)(...))QGraphicsSceneDragDropEvent::~QGraphicsSceneDragDropEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneDragDropEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneDragDropEvent (0x0x7ff6d4160dd0) 0
+ vptr=((& QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent) + 16)
+ QGraphicsSceneEvent (0x0x7ff6d4160e38) 0
+ primary-for QGraphicsSceneDragDropEvent (0x0x7ff6d4160dd0)
+ QEvent (0x0x7ff6d41cc660) 0
+ primary-for QGraphicsSceneEvent (0x0x7ff6d4160e38)
+
+Vtable for QGraphicsSceneResizeEvent
+QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QGraphicsSceneResizeEvent)
+16 (int (*)(...))QGraphicsSceneResizeEvent::~QGraphicsSceneResizeEvent
+24 (int (*)(...))QGraphicsSceneResizeEvent::~QGraphicsSceneResizeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneResizeEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneResizeEvent (0x0x7ff6d4160ea0) 0
+ vptr=((& QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent) + 16)
+ QGraphicsSceneEvent (0x0x7ff6d4160f08) 0
+ primary-for QGraphicsSceneResizeEvent (0x0x7ff6d4160ea0)
+ QEvent (0x0x7ff6d41cc780) 0
+ primary-for QGraphicsSceneEvent (0x0x7ff6d4160f08)
+
+Vtable for QGraphicsSceneMoveEvent
+QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSceneMoveEvent)
+16 (int (*)(...))QGraphicsSceneMoveEvent::~QGraphicsSceneMoveEvent
+24 (int (*)(...))QGraphicsSceneMoveEvent::~QGraphicsSceneMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneMoveEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneMoveEvent (0x0x7ff6d4160f70) 0
+ vptr=((& QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent) + 16)
+ QGraphicsSceneEvent (0x0x7ff6d41608f0) 0
+ primary-for QGraphicsSceneMoveEvent (0x0x7ff6d4160f70)
+ QEvent (0x0x7ff6d41cc8a0) 0
+ primary-for QGraphicsSceneEvent (0x0x7ff6d41608f0)
+
+Class QGraphicsTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTransform::QPrivateSignal (0x0x7ff6d41cca20) 0 empty
+
+Vtable for QGraphicsTransform
+QGraphicsTransform::_ZTV18QGraphicsTransform: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGraphicsTransform)
+16 (int (*)(...))QGraphicsTransform::metaObject
+24 (int (*)(...))QGraphicsTransform::qt_metacast
+32 (int (*)(...))QGraphicsTransform::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsTransform
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsTransform (0x0x7ff6d4208000) 0
+ vptr=((& QGraphicsTransform::_ZTV18QGraphicsTransform) + 16)
+ QObject (0x0x7ff6d41cc9c0) 0
+ primary-for QGraphicsTransform (0x0x7ff6d4208000)
+
+Class QGraphicsScale::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScale::QPrivateSignal (0x0x7ff6d41ccc00) 0 empty
+
+Vtable for QGraphicsScale
+QGraphicsScale::_ZTV14QGraphicsScale: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGraphicsScale)
+16 (int (*)(...))QGraphicsScale::metaObject
+24 (int (*)(...))QGraphicsScale::qt_metacast
+32 (int (*)(...))QGraphicsScale::qt_metacall
+40 (int (*)(...))QGraphicsScale::~QGraphicsScale
+48 (int (*)(...))QGraphicsScale::~QGraphicsScale
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsScale::applyTo
+
+Class QGraphicsScale
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsScale (0x0x7ff6d4208068) 0
+ vptr=((& QGraphicsScale::_ZTV14QGraphicsScale) + 16)
+ QGraphicsTransform (0x0x7ff6d42080d0) 0
+ primary-for QGraphicsScale (0x0x7ff6d4208068)
+ QObject (0x0x7ff6d41ccba0) 0
+ primary-for QGraphicsTransform (0x0x7ff6d42080d0)
+
+Class QGraphicsRotation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsRotation::QPrivateSignal (0x0x7ff6d41ccde0) 0 empty
+
+Vtable for QGraphicsRotation
+QGraphicsRotation::_ZTV17QGraphicsRotation: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsRotation)
+16 (int (*)(...))QGraphicsRotation::metaObject
+24 (int (*)(...))QGraphicsRotation::qt_metacast
+32 (int (*)(...))QGraphicsRotation::qt_metacall
+40 (int (*)(...))QGraphicsRotation::~QGraphicsRotation
+48 (int (*)(...))QGraphicsRotation::~QGraphicsRotation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsRotation::applyTo
+
+Class QGraphicsRotation
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsRotation (0x0x7ff6d4208138) 0
+ vptr=((& QGraphicsRotation::_ZTV17QGraphicsRotation) + 16)
+ QGraphicsTransform (0x0x7ff6d42081a0) 0
+ primary-for QGraphicsRotation (0x0x7ff6d4208138)
+ QObject (0x0x7ff6d41ccd80) 0
+ primary-for QGraphicsTransform (0x0x7ff6d42081a0)
+
+Class QScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollArea::QPrivateSignal (0x0x7ff6d4223060) 0 empty
+
+Vtable for QScrollArea
+QScrollArea::_ZTV11QScrollArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QScrollArea)
+16 (int (*)(...))QScrollArea::metaObject
+24 (int (*)(...))QScrollArea::qt_metacast
+32 (int (*)(...))QScrollArea::qt_metacall
+40 (int (*)(...))QScrollArea::~QScrollArea
+48 (int (*)(...))QScrollArea::~QScrollArea
+56 (int (*)(...))QScrollArea::event
+64 (int (*)(...))QScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QScrollArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QScrollArea::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QScrollArea::scrollContentsBy
+464 (int (*)(...))QScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QScrollArea)
+488 (int (*)(...))QScrollArea::_ZThn16_N11QScrollAreaD1Ev
+496 (int (*)(...))QScrollArea::_ZThn16_N11QScrollAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QScrollArea
+ size=40 align=8
+ base size=40 base align=8
+QScrollArea (0x0x7ff6d4208208) 0
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 16)
+ QAbstractScrollArea (0x0x7ff6d4208270) 0
+ primary-for QScrollArea (0x0x7ff6d4208208)
+ QFrame (0x0x7ff6d42082d8) 0
+ primary-for QAbstractScrollArea (0x0x7ff6d4208270)
+ QWidget (0x0x7ff6d4134700) 0
+ primary-for QFrame (0x0x7ff6d42082d8)
+ QObject (0x0x7ff6d41ccf60) 0
+ primary-for QWidget (0x0x7ff6d4134700)
+ QPaintDevice (0x0x7ff6d4223000) 16
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 488)
+
+Class QGraphicsView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsView::QPrivateSignal (0x0x7ff6d42232a0) 0 empty
+
+Vtable for QGraphicsView
+QGraphicsView::_ZTV13QGraphicsView: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGraphicsView)
+16 (int (*)(...))QGraphicsView::metaObject
+24 (int (*)(...))QGraphicsView::qt_metacast
+32 (int (*)(...))QGraphicsView::qt_metacall
+40 (int (*)(...))QGraphicsView::~QGraphicsView
+48 (int (*)(...))QGraphicsView::~QGraphicsView
+56 (int (*)(...))QGraphicsView::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QGraphicsView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QGraphicsView::mousePressEvent
+176 (int (*)(...))QGraphicsView::mouseReleaseEvent
+184 (int (*)(...))QGraphicsView::mouseDoubleClickEvent
+192 (int (*)(...))QGraphicsView::mouseMoveEvent
+200 (int (*)(...))QGraphicsView::wheelEvent
+208 (int (*)(...))QGraphicsView::keyPressEvent
+216 (int (*)(...))QGraphicsView::keyReleaseEvent
+224 (int (*)(...))QGraphicsView::focusInEvent
+232 (int (*)(...))QGraphicsView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QGraphicsView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QGraphicsView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QGraphicsView::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QGraphicsView::dragEnterEvent
+320 (int (*)(...))QGraphicsView::dragMoveEvent
+328 (int (*)(...))QGraphicsView::dragLeaveEvent
+336 (int (*)(...))QGraphicsView::dropEvent
+344 (int (*)(...))QGraphicsView::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QGraphicsView::inputMethodEvent
+416 (int (*)(...))QGraphicsView::inputMethodQuery
+424 (int (*)(...))QGraphicsView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QGraphicsView::setupViewport
+448 (int (*)(...))QGraphicsView::viewportEvent
+456 (int (*)(...))QGraphicsView::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QGraphicsView::drawBackground
+480 (int (*)(...))QGraphicsView::drawForeground
+488 (int (*)(...))QGraphicsView::drawItems
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI13QGraphicsView)
+512 (int (*)(...))QGraphicsView::_ZThn16_N13QGraphicsViewD1Ev
+520 (int (*)(...))QGraphicsView::_ZThn16_N13QGraphicsViewD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QGraphicsView
+ size=40 align=8
+ base size=40 base align=8
+QGraphicsView (0x0x7ff6d4208340) 0
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 16)
+ QAbstractScrollArea (0x0x7ff6d42083a8) 0
+ primary-for QGraphicsView (0x0x7ff6d4208340)
+ QFrame (0x0x7ff6d4208410) 0
+ primary-for QAbstractScrollArea (0x0x7ff6d42083a8)
+ QWidget (0x0x7ff6d4134770) 0
+ primary-for QFrame (0x0x7ff6d4208410)
+ QObject (0x0x7ff6d42231e0) 0
+ primary-for QWidget (0x0x7ff6d4134770)
+ QPaintDevice (0x0x7ff6d4223240) 16
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 512)
+
+Class QGroupBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGroupBox::QPrivateSignal (0x0x7ff6d3e9e180) 0 empty
+
+Vtable for QGroupBox
+QGroupBox::_ZTV9QGroupBox: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QGroupBox)
+16 (int (*)(...))QGroupBox::metaObject
+24 (int (*)(...))QGroupBox::qt_metacast
+32 (int (*)(...))QGroupBox::qt_metacall
+40 (int (*)(...))QGroupBox::~QGroupBox
+48 (int (*)(...))QGroupBox::~QGroupBox
+56 (int (*)(...))QGroupBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QGroupBox::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QGroupBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QGroupBox::mousePressEvent
+176 (int (*)(...))QGroupBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QGroupBox::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QGroupBox::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QGroupBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QGroupBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QGroupBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QGroupBox::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI9QGroupBox)
+456 (int (*)(...))QGroupBox::_ZThn16_N9QGroupBoxD1Ev
+464 (int (*)(...))QGroupBox::_ZThn16_N9QGroupBoxD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QGroupBox
+ size=40 align=8
+ base size=40 base align=8
+QGroupBox (0x0x7ff6d42086e8) 0
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 16)
+ QWidget (0x0x7ff6d4134ee0) 0
+ primary-for QGroupBox (0x0x7ff6d42086e8)
+ QObject (0x0x7ff6d3e9e0c0) 0
+ primary-for QWidget (0x0x7ff6d4134ee0)
+ QPaintDevice (0x0x7ff6d3e9e120) 16
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 456)
+
+Class QHeaderView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHeaderView::QPrivateSignal (0x0x7ff6d3e9e3c0) 0 empty
+
+Vtable for QHeaderView
+QHeaderView::_ZTV11QHeaderView: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHeaderView)
+16 (int (*)(...))QHeaderView::metaObject
+24 (int (*)(...))QHeaderView::qt_metacast
+32 (int (*)(...))QHeaderView::qt_metacall
+40 (int (*)(...))QHeaderView::~QHeaderView
+48 (int (*)(...))QHeaderView::~QHeaderView
+56 (int (*)(...))QHeaderView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QHeaderView::setVisible
+128 (int (*)(...))QHeaderView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QHeaderView::mousePressEvent
+176 (int (*)(...))QHeaderView::mouseReleaseEvent
+184 (int (*)(...))QHeaderView::mouseDoubleClickEvent
+192 (int (*)(...))QHeaderView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QHeaderView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QHeaderView::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QHeaderView::viewportEvent
+456 (int (*)(...))QHeaderView::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QHeaderView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QHeaderView::visualRect
+504 (int (*)(...))QHeaderView::scrollTo
+512 (int (*)(...))QHeaderView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QHeaderView::reset
+552 (int (*)(...))QAbstractItemView::setRootIndex
+560 (int (*)(...))QHeaderView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QHeaderView::dataChanged
+584 (int (*)(...))QHeaderView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QHeaderView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QHeaderView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QHeaderView::moveCursor
+704 (int (*)(...))QHeaderView::horizontalOffset
+712 (int (*)(...))QHeaderView::verticalOffset
+720 (int (*)(...))QHeaderView::isIndexHidden
+728 (int (*)(...))QHeaderView::setSelection
+736 (int (*)(...))QHeaderView::visualRegionForSelection
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QHeaderView::paintSection
+792 (int (*)(...))QHeaderView::sectionSizeFromContents
+800 (int (*)(...))QHeaderView::initStyleOptionForIndex
+808 (int (*)(...))QHeaderView::initStyleOption
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI11QHeaderView)
+832 (int (*)(...))QHeaderView::_ZThn16_N11QHeaderViewD1Ev
+840 (int (*)(...))QHeaderView::_ZThn16_N11QHeaderViewD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHeaderView
+ size=40 align=8
+ base size=40 base align=8
+QHeaderView (0x0x7ff6d4208750) 0
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 16)
+ QAbstractItemView (0x0x7ff6d42087b8) 0
+ primary-for QHeaderView (0x0x7ff6d4208750)
+ QAbstractScrollArea (0x0x7ff6d4208820) 0
+ primary-for QAbstractItemView (0x0x7ff6d42087b8)
+ QFrame (0x0x7ff6d4208888) 0
+ primary-for QAbstractScrollArea (0x0x7ff6d4208820)
+ QWidget (0x0x7ff6d4134f50) 0
+ primary-for QFrame (0x0x7ff6d4208888)
+ QObject (0x0x7ff6d3e9e300) 0
+ primary-for QWidget (0x0x7ff6d4134f50)
+ QPaintDevice (0x0x7ff6d3e9e360) 16
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 832)
+
+Class QLineEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLineEdit::QPrivateSignal (0x0x7ff6d3e9e840) 0 empty
+
+Vtable for QLineEdit
+QLineEdit::_ZTV9QLineEdit: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QLineEdit)
+16 (int (*)(...))QLineEdit::metaObject
+24 (int (*)(...))QLineEdit::qt_metacast
+32 (int (*)(...))QLineEdit::qt_metacall
+40 (int (*)(...))QLineEdit::~QLineEdit
+48 (int (*)(...))QLineEdit::~QLineEdit
+56 (int (*)(...))QLineEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QLineEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLineEdit::sizeHint
+136 (int (*)(...))QLineEdit::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QLineEdit::mousePressEvent
+176 (int (*)(...))QLineEdit::mouseReleaseEvent
+184 (int (*)(...))QLineEdit::mouseDoubleClickEvent
+192 (int (*)(...))QLineEdit::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QLineEdit::keyPressEvent
+216 (int (*)(...))QLineEdit::keyReleaseEvent
+224 (int (*)(...))QLineEdit::focusInEvent
+232 (int (*)(...))QLineEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLineEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QLineEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QLineEdit::dragEnterEvent
+320 (int (*)(...))QLineEdit::dragMoveEvent
+328 (int (*)(...))QLineEdit::dragLeaveEvent
+336 (int (*)(...))QLineEdit::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QLineEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QLineEdit::inputMethodEvent
+416 (int (*)(...))QLineEdit::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QLineEdit::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI9QLineEdit)
+456 (int (*)(...))QLineEdit::_ZThn16_N9QLineEditD1Ev
+464 (int (*)(...))QLineEdit::_ZThn16_N9QLineEditD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLineEdit
+ size=40 align=8
+ base size=40 base align=8
+QLineEdit (0x0x7ff6d42088f0) 0
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 16)
+ QWidget (0x0x7ff6d3eaf230) 0
+ primary-for QLineEdit (0x0x7ff6d42088f0)
+ QObject (0x0x7ff6d3e9e780) 0
+ primary-for QWidget (0x0x7ff6d3eaf230)
+ QPaintDevice (0x0x7ff6d3e9e7e0) 16
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 456)
+
+Class QInputDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDialog::QPrivateSignal (0x0x7ff6d3e9ec00) 0 empty
+
+Vtable for QInputDialog
+QInputDialog::_ZTV12QInputDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputDialog)
+16 (int (*)(...))QInputDialog::metaObject
+24 (int (*)(...))QInputDialog::qt_metacast
+32 (int (*)(...))QInputDialog::qt_metacall
+40 (int (*)(...))QInputDialog::~QInputDialog
+48 (int (*)(...))QInputDialog::~QInputDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QInputDialog::setVisible
+128 (int (*)(...))QInputDialog::sizeHint
+136 (int (*)(...))QInputDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QInputDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QInputDialog)
+488 (int (*)(...))QInputDialog::_ZThn16_N12QInputDialogD1Ev
+496 (int (*)(...))QInputDialog::_ZThn16_N12QInputDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QInputDialog
+ size=40 align=8
+ base size=40 base align=8
+QInputDialog (0x0x7ff6d4208958) 0
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 16)
+ QDialog (0x0x7ff6d42089c0) 0
+ primary-for QInputDialog (0x0x7ff6d4208958)
+ QWidget (0x0x7ff6d3eaf540) 0
+ primary-for QDialog (0x0x7ff6d42089c0)
+ QObject (0x0x7ff6d3e9eb40) 0
+ primary-for QWidget (0x0x7ff6d3eaf540)
+ QPaintDevice (0x0x7ff6d3e9eba0) 16
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 488)
+
+Class QItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemDelegate::QPrivateSignal (0x0x7ff6d3f19120) 0 empty
+
+Vtable for QItemDelegate
+QItemDelegate::_ZTV13QItemDelegate: 28 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QItemDelegate)
+16 (int (*)(...))QItemDelegate::metaObject
+24 (int (*)(...))QItemDelegate::qt_metacast
+32 (int (*)(...))QItemDelegate::qt_metacall
+40 (int (*)(...))QItemDelegate::~QItemDelegate
+48 (int (*)(...))QItemDelegate::~QItemDelegate
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QItemDelegate::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QItemDelegate::paint
+120 (int (*)(...))QItemDelegate::sizeHint
+128 (int (*)(...))QItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QItemDelegate::setEditorData
+152 (int (*)(...))QItemDelegate::setModelData
+160 (int (*)(...))QItemDelegate::updateEditorGeometry
+168 (int (*)(...))QItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+192 (int (*)(...))QItemDelegate::drawDisplay
+200 (int (*)(...))QItemDelegate::drawDecoration
+208 (int (*)(...))QItemDelegate::drawFocus
+216 (int (*)(...))QItemDelegate::drawCheck
+
+Class QItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QItemDelegate (0x0x7ff6d4208b60) 0
+ vptr=((& QItemDelegate::_ZTV13QItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7ff6d4208bc8) 0
+ primary-for QItemDelegate (0x0x7ff6d4208b60)
+ QObject (0x0x7ff6d3f190c0) 0
+ primary-for QAbstractItemDelegate (0x0x7ff6d4208bc8)
+
+Vtable for QItemEditorCreatorBase
+QItemEditorCreatorBase::_ZTV22QItemEditorCreatorBase: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QItemEditorCreatorBase)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QItemEditorCreatorBase
+ size=8 align=8
+ base size=8 base align=8
+QItemEditorCreatorBase (0x0x7ff6d3f192a0) 0 nearly-empty
+ vptr=((& QItemEditorCreatorBase::_ZTV22QItemEditorCreatorBase) + 16)
+
+Vtable for QItemEditorFactory
+QItemEditorFactory::_ZTV18QItemEditorFactory: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QItemEditorFactory)
+16 (int (*)(...))QItemEditorFactory::~QItemEditorFactory
+24 (int (*)(...))QItemEditorFactory::~QItemEditorFactory
+32 (int (*)(...))QItemEditorFactory::createEditor
+40 (int (*)(...))QItemEditorFactory::valuePropertyName
+
+Class QItemEditorFactory
+ size=16 align=8
+ base size=16 base align=8
+QItemEditorFactory (0x0x7ff6d3f19600) 0
+ vptr=((& QItemEditorFactory::_ZTV18QItemEditorFactory) + 16)
+
+Class QKeySequenceEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QKeySequenceEdit::QPrivateSignal (0x0x7ff6d3f19ae0) 0 empty
+
+Vtable for QKeySequenceEdit
+QKeySequenceEdit::_ZTV16QKeySequenceEdit: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QKeySequenceEdit)
+16 (int (*)(...))QKeySequenceEdit::metaObject
+24 (int (*)(...))QKeySequenceEdit::qt_metacast
+32 (int (*)(...))QKeySequenceEdit::qt_metacall
+40 (int (*)(...))QKeySequenceEdit::~QKeySequenceEdit
+48 (int (*)(...))QKeySequenceEdit::~QKeySequenceEdit
+56 (int (*)(...))QKeySequenceEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QKeySequenceEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QKeySequenceEdit::keyPressEvent
+216 (int (*)(...))QKeySequenceEdit::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI16QKeySequenceEdit)
+448 (int (*)(...))QKeySequenceEdit::_ZThn16_N16QKeySequenceEditD1Ev
+456 (int (*)(...))QKeySequenceEdit::_ZThn16_N16QKeySequenceEditD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QKeySequenceEdit
+ size=40 align=8
+ base size=40 base align=8
+QKeySequenceEdit (0x0x7ff6d4208d00) 0
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 16)
+ QWidget (0x0x7ff6d3eaf850) 0
+ primary-for QKeySequenceEdit (0x0x7ff6d4208d00)
+ QObject (0x0x7ff6d3f19a20) 0
+ primary-for QWidget (0x0x7ff6d3eaf850)
+ QPaintDevice (0x0x7ff6d3f19a80) 16
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 448)
+
+Class QLabel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLabel::QPrivateSignal (0x0x7ff6d3f19d20) 0 empty
+
+Vtable for QLabel
+QLabel::_ZTV6QLabel: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QLabel)
+16 (int (*)(...))QLabel::metaObject
+24 (int (*)(...))QLabel::qt_metacast
+32 (int (*)(...))QLabel::qt_metacall
+40 (int (*)(...))QLabel::~QLabel
+48 (int (*)(...))QLabel::~QLabel
+56 (int (*)(...))QLabel::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLabel::sizeHint
+136 (int (*)(...))QLabel::minimumSizeHint
+144 (int (*)(...))QLabel::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QLabel::mousePressEvent
+176 (int (*)(...))QLabel::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QLabel::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QLabel::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QLabel::focusInEvent
+232 (int (*)(...))QLabel::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLabel::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QLabel::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QLabel::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QLabel::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI6QLabel)
+456 (int (*)(...))QLabel::_ZThn16_N6QLabelD1Ev
+464 (int (*)(...))QLabel::_ZThn16_N6QLabelD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLabel
+ size=40 align=8
+ base size=40 base align=8
+QLabel (0x0x7ff6d4208d68) 0
+ vptr=((& QLabel::_ZTV6QLabel) + 16)
+ QFrame (0x0x7ff6d4208dd0) 0
+ primary-for QLabel (0x0x7ff6d4208d68)
+ QWidget (0x0x7ff6d3eaf8c0) 0
+ primary-for QFrame (0x0x7ff6d4208dd0)
+ QObject (0x0x7ff6d3f19c60) 0
+ primary-for QWidget (0x0x7ff6d3eaf8c0)
+ QPaintDevice (0x0x7ff6d3f19cc0) 16
+ vptr=((& QLabel::_ZTV6QLabel) + 456)
+
+Class QLCDNumber::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLCDNumber::QPrivateSignal (0x0x7ff6d3f73060) 0 empty
+
+Vtable for QLCDNumber
+QLCDNumber::_ZTV10QLCDNumber: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QLCDNumber)
+16 (int (*)(...))QLCDNumber::metaObject
+24 (int (*)(...))QLCDNumber::qt_metacast
+32 (int (*)(...))QLCDNumber::qt_metacall
+40 (int (*)(...))QLCDNumber::~QLCDNumber
+48 (int (*)(...))QLCDNumber::~QLCDNumber
+56 (int (*)(...))QLCDNumber::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLCDNumber::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLCDNumber::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI10QLCDNumber)
+456 (int (*)(...))QLCDNumber::_ZThn16_N10QLCDNumberD1Ev
+464 (int (*)(...))QLCDNumber::_ZThn16_N10QLCDNumberD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLCDNumber
+ size=40 align=8
+ base size=40 base align=8
+QLCDNumber (0x0x7ff6d4208e38) 0
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 16)
+ QFrame (0x0x7ff6d4208ea0) 0
+ primary-for QLCDNumber (0x0x7ff6d4208e38)
+ QWidget (0x0x7ff6d3eaf930) 0
+ primary-for QFrame (0x0x7ff6d4208ea0)
+ QObject (0x0x7ff6d3f19f60) 0
+ primary-for QWidget (0x0x7ff6d3eaf930)
+ QPaintDevice (0x0x7ff6d3f73000) 16
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 456)
+
+Class QListView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListView::QPrivateSignal (0x0x7ff6d3f73420) 0 empty
+
+Vtable for QListView
+QListView::_ZTV9QListView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QListView)
+16 (int (*)(...))QListView::metaObject
+24 (int (*)(...))QListView::qt_metacast
+32 (int (*)(...))QListView::qt_metacall
+40 (int (*)(...))QListView::~QListView
+48 (int (*)(...))QListView::~QListView
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI9QListView)
+800 (int (*)(...))QListView::_ZThn16_N9QListViewD1Ev
+808 (int (*)(...))QListView::_ZThn16_N9QListViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QListView
+ size=40 align=8
+ base size=40 base align=8
+QListView (0x0x7ff6d4208f08) 0
+ vptr=((& QListView::_ZTV9QListView) + 16)
+ QAbstractItemView (0x0x7ff6d4208f70) 0
+ primary-for QListView (0x0x7ff6d4208f08)
+ QAbstractScrollArea (0x0x7ff6d3f86000) 0
+ primary-for QAbstractItemView (0x0x7ff6d4208f70)
+ QFrame (0x0x7ff6d3f86068) 0
+ primary-for QAbstractScrollArea (0x0x7ff6d3f86000)
+ QWidget (0x0x7ff6d3eafcb0) 0
+ primary-for QFrame (0x0x7ff6d3f86068)
+ QObject (0x0x7ff6d3f73360) 0
+ primary-for QWidget (0x0x7ff6d3eafcb0)
+ QPaintDevice (0x0x7ff6d3f733c0) 16
+ vptr=((& QListView::_ZTV9QListView) + 800)
+
+Vtable for QListWidgetItem
+QListWidgetItem::_ZTV15QListWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QListWidgetItem)
+16 (int (*)(...))QListWidgetItem::~QListWidgetItem
+24 (int (*)(...))QListWidgetItem::~QListWidgetItem
+32 (int (*)(...))QListWidgetItem::clone
+40 (int (*)(...))QListWidgetItem::data
+48 (int (*)(...))QListWidgetItem::setData
+56 (int (*)(...))QListWidgetItem::operator<
+64 (int (*)(...))QListWidgetItem::read
+72 (int (*)(...))QListWidgetItem::write
+
+Class QListWidgetItem
+ size=40 align=8
+ base size=36 base align=8
+QListWidgetItem (0x0x7ff6d3f73960) 0
+ vptr=((& QListWidgetItem::_ZTV15QListWidgetItem) + 16)
+
+Class QListWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListWidget::QPrivateSignal (0x0x7ff6d3fc5420) 0 empty
+
+Vtable for QListWidget
+QListWidget::_ZTV11QListWidget: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QListWidget)
+16 (int (*)(...))QListWidget::metaObject
+24 (int (*)(...))QListWidget::qt_metacast
+32 (int (*)(...))QListWidget::qt_metacall
+40 (int (*)(...))QListWidget::~QListWidget
+48 (int (*)(...))QListWidget::~QListWidget
+56 (int (*)(...))QListWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QListWidget::setModel
+480 (int (*)(...))QListWidget::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))QListWidget::mimeTypes
+792 (int (*)(...))QListWidget::mimeData
+800 (int (*)(...))QListWidget::dropMimeData
+808 (int (*)(...))QListWidget::supportedDropActions
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI11QListWidget)
+832 (int (*)(...))QListWidget::_ZThn16_N11QListWidgetD1Ev
+840 (int (*)(...))QListWidget::_ZThn16_N11QListWidgetD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QListWidget
+ size=40 align=8
+ base size=40 base align=8
+QListWidget (0x0x7ff6d3f860d0) 0
+ vptr=((& QListWidget::_ZTV11QListWidget) + 16)
+ QListView (0x0x7ff6d3f86138) 0
+ primary-for QListWidget (0x0x7ff6d3f860d0)
+ QAbstractItemView (0x0x7ff6d3f861a0) 0
+ primary-for QListView (0x0x7ff6d3f86138)
+ QAbstractScrollArea (0x0x7ff6d3f86208) 0
+ primary-for QAbstractItemView (0x0x7ff6d3f861a0)
+ QFrame (0x0x7ff6d3f86270) 0
+ primary-for QAbstractScrollArea (0x0x7ff6d3f86208)
+ QWidget (0x0x7ff6d3f8b310) 0
+ primary-for QFrame (0x0x7ff6d3f86270)
+ QObject (0x0x7ff6d3fc5360) 0
+ primary-for QWidget (0x0x7ff6d3f8b310)
+ QPaintDevice (0x0x7ff6d3fc53c0) 16
+ vptr=((& QListWidget::_ZTV11QListWidget) + 832)
+
+Class QMainWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMainWindow::QPrivateSignal (0x0x7ff6d3fc5900) 0 empty
+
+Vtable for QMainWindow
+QMainWindow::_ZTV11QMainWindow: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMainWindow)
+16 (int (*)(...))QMainWindow::metaObject
+24 (int (*)(...))QMainWindow::qt_metacast
+32 (int (*)(...))QMainWindow::qt_metacall
+40 (int (*)(...))QMainWindow::~QMainWindow
+48 (int (*)(...))QMainWindow::~QMainWindow
+56 (int (*)(...))QMainWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QMainWindow::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QMainWindow::createPopupMenu
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QMainWindow)
+456 (int (*)(...))QMainWindow::_ZThn16_N11QMainWindowD1Ev
+464 (int (*)(...))QMainWindow::_ZThn16_N11QMainWindowD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMainWindow
+ size=40 align=8
+ base size=40 base align=8
+QMainWindow (0x0x7ff6d3f862d8) 0
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 16)
+ QWidget (0x0x7ff6d3f8b380) 0
+ primary-for QMainWindow (0x0x7ff6d3f862d8)
+ QObject (0x0x7ff6d3fc5840) 0
+ primary-for QWidget (0x0x7ff6d3f8b380)
+ QPaintDevice (0x0x7ff6d3fc58a0) 16
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 456)
+
+Class QMdiArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiArea::QPrivateSignal (0x0x7ff6d401d000) 0 empty
+
+Vtable for QMdiArea
+QMdiArea::_ZTV8QMdiArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QMdiArea)
+16 (int (*)(...))QMdiArea::metaObject
+24 (int (*)(...))QMdiArea::qt_metacast
+32 (int (*)(...))QMdiArea::qt_metacall
+40 (int (*)(...))QMdiArea::~QMdiArea
+48 (int (*)(...))QMdiArea::~QMdiArea
+56 (int (*)(...))QMdiArea::event
+64 (int (*)(...))QMdiArea::eventFilter
+72 (int (*)(...))QMdiArea::timerEvent
+80 (int (*)(...))QMdiArea::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMdiArea::sizeHint
+136 (int (*)(...))QMdiArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QMdiArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMdiArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QMdiArea::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QMdiArea::setupViewport
+448 (int (*)(...))QMdiArea::viewportEvent
+456 (int (*)(...))QMdiArea::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI8QMdiArea)
+488 (int (*)(...))QMdiArea::_ZThn16_N8QMdiAreaD1Ev
+496 (int (*)(...))QMdiArea::_ZThn16_N8QMdiAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMdiArea
+ size=40 align=8
+ base size=40 base align=8
+QMdiArea (0x0x7ff6d3f86478) 0
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 16)
+ QAbstractScrollArea (0x0x7ff6d3f864e0) 0
+ primary-for QMdiArea (0x0x7ff6d3f86478)
+ QFrame (0x0x7ff6d3f86548) 0
+ primary-for QAbstractScrollArea (0x0x7ff6d3f864e0)
+ QWidget (0x0x7ff6d3f8b690) 0
+ primary-for QFrame (0x0x7ff6d3f86548)
+ QObject (0x0x7ff6d3fc5f00) 0
+ primary-for QWidget (0x0x7ff6d3f8b690)
+ QPaintDevice (0x0x7ff6d3fc5f60) 16
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 488)
+
+Class QMdiSubWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiSubWindow::QPrivateSignal (0x0x7ff6d401d6c0) 0 empty
+
+Vtable for QMdiSubWindow
+QMdiSubWindow::_ZTV13QMdiSubWindow: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QMdiSubWindow)
+16 (int (*)(...))QMdiSubWindow::metaObject
+24 (int (*)(...))QMdiSubWindow::qt_metacast
+32 (int (*)(...))QMdiSubWindow::qt_metacall
+40 (int (*)(...))QMdiSubWindow::~QMdiSubWindow
+48 (int (*)(...))QMdiSubWindow::~QMdiSubWindow
+56 (int (*)(...))QMdiSubWindow::event
+64 (int (*)(...))QMdiSubWindow::eventFilter
+72 (int (*)(...))QMdiSubWindow::timerEvent
+80 (int (*)(...))QMdiSubWindow::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMdiSubWindow::sizeHint
+136 (int (*)(...))QMdiSubWindow::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMdiSubWindow::mousePressEvent
+176 (int (*)(...))QMdiSubWindow::mouseReleaseEvent
+184 (int (*)(...))QMdiSubWindow::mouseDoubleClickEvent
+192 (int (*)(...))QMdiSubWindow::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMdiSubWindow::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QMdiSubWindow::focusInEvent
+232 (int (*)(...))QMdiSubWindow::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QMdiSubWindow::leaveEvent
+256 (int (*)(...))QMdiSubWindow::paintEvent
+264 (int (*)(...))QMdiSubWindow::moveEvent
+272 (int (*)(...))QMdiSubWindow::resizeEvent
+280 (int (*)(...))QMdiSubWindow::closeEvent
+288 (int (*)(...))QMdiSubWindow::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QMdiSubWindow::showEvent
+352 (int (*)(...))QMdiSubWindow::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMdiSubWindow::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI13QMdiSubWindow)
+448 (int (*)(...))QMdiSubWindow::_ZThn16_N13QMdiSubWindowD1Ev
+456 (int (*)(...))QMdiSubWindow::_ZThn16_N13QMdiSubWindowD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMdiSubWindow
+ size=40 align=8
+ base size=40 base align=8
+QMdiSubWindow (0x0x7ff6d3f866e8) 0
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 16)
+ QWidget (0x0x7ff6d3f8ba10) 0
+ primary-for QMdiSubWindow (0x0x7ff6d3f866e8)
+ QObject (0x0x7ff6d401d600) 0
+ primary-for QWidget (0x0x7ff6d3f8ba10)
+ QPaintDevice (0x0x7ff6d401d660) 16
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 448)
+
+Class QMenu::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenu::QPrivateSignal (0x0x7ff6d401dc00) 0 empty
+
+Vtable for QMenu
+QMenu::_ZTV5QMenu: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QMenu)
+16 (int (*)(...))QMenu::metaObject
+24 (int (*)(...))QMenu::qt_metacast
+32 (int (*)(...))QMenu::qt_metacall
+40 (int (*)(...))QMenu::~QMenu
+48 (int (*)(...))QMenu::~QMenu
+56 (int (*)(...))QMenu::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QMenu::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMenu::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMenu::mousePressEvent
+176 (int (*)(...))QMenu::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QMenu::mouseMoveEvent
+200 (int (*)(...))QMenu::wheelEvent
+208 (int (*)(...))QMenu::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QMenu::enterEvent
+248 (int (*)(...))QMenu::leaveEvent
+256 (int (*)(...))QMenu::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QMenu::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QMenu::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMenu::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QMenu::focusNextPrevChild
+432 (int (*)(...))QMenu::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI5QMenu)
+456 (int (*)(...))QMenu::_ZThn16_N5QMenuD1Ev
+464 (int (*)(...))QMenu::_ZThn16_N5QMenuD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMenu
+ size=40 align=8
+ base size=40 base align=8
+QMenu (0x0x7ff6d3f86888) 0
+ vptr=((& QMenu::_ZTV5QMenu) + 16)
+ QWidget (0x0x7ff6d3f8bc40) 0
+ primary-for QMenu (0x0x7ff6d3f86888)
+ QObject (0x0x7ff6d401db40) 0
+ primary-for QWidget (0x0x7ff6d3f8bc40)
+ QPaintDevice (0x0x7ff6d401dba0) 16
+ vptr=((& QMenu::_ZTV5QMenu) + 456)
+
+Class QMenuBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenuBar::QPrivateSignal (0x0x7ff6d3c9e000) 0 empty
+
+Vtable for QMenuBar
+QMenuBar::_ZTV8QMenuBar: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QMenuBar)
+16 (int (*)(...))QMenuBar::metaObject
+24 (int (*)(...))QMenuBar::qt_metacast
+32 (int (*)(...))QMenuBar::qt_metacall
+40 (int (*)(...))QMenuBar::~QMenuBar
+48 (int (*)(...))QMenuBar::~QMenuBar
+56 (int (*)(...))QMenuBar::event
+64 (int (*)(...))QMenuBar::eventFilter
+72 (int (*)(...))QMenuBar::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QMenuBar::setVisible
+128 (int (*)(...))QMenuBar::sizeHint
+136 (int (*)(...))QMenuBar::minimumSizeHint
+144 (int (*)(...))QMenuBar::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMenuBar::mousePressEvent
+176 (int (*)(...))QMenuBar::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QMenuBar::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMenuBar::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QMenuBar::focusInEvent
+232 (int (*)(...))QMenuBar::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QMenuBar::leaveEvent
+256 (int (*)(...))QMenuBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMenuBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QMenuBar::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMenuBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QMenuBar::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI8QMenuBar)
+456 (int (*)(...))QMenuBar::_ZThn16_N8QMenuBarD1Ev
+464 (int (*)(...))QMenuBar::_ZThn16_N8QMenuBarD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMenuBar
+ size=40 align=8
+ base size=40 base align=8
+QMenuBar (0x0x7ff6d3f868f0) 0
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 16)
+ QWidget (0x0x7ff6d3f8bcb0) 0
+ primary-for QMenuBar (0x0x7ff6d3f868f0)
+ QObject (0x0x7ff6d401df00) 0
+ primary-for QWidget (0x0x7ff6d3f8bcb0)
+ QPaintDevice (0x0x7ff6d401df60) 16
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 456)
+
+Class QMessageBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMessageBox::QPrivateSignal (0x0x7ff6d3c9e300) 0 empty
+
+Vtable for QMessageBox
+QMessageBox::_ZTV11QMessageBox: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMessageBox)
+16 (int (*)(...))QMessageBox::metaObject
+24 (int (*)(...))QMessageBox::qt_metacast
+32 (int (*)(...))QMessageBox::qt_metacall
+40 (int (*)(...))QMessageBox::~QMessageBox
+48 (int (*)(...))QMessageBox::~QMessageBox
+56 (int (*)(...))QMessageBox::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMessageBox::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMessageBox::resizeEvent
+280 (int (*)(...))QMessageBox::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QMessageBox::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMessageBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QMessageBox)
+488 (int (*)(...))QMessageBox::_ZThn16_N11QMessageBoxD1Ev
+496 (int (*)(...))QMessageBox::_ZThn16_N11QMessageBoxD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMessageBox
+ size=40 align=8
+ base size=40 base align=8
+QMessageBox (0x0x7ff6d3f86958) 0
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 16)
+ QDialog (0x0x7ff6d3f869c0) 0
+ primary-for QMessageBox (0x0x7ff6d3f86958)
+ QWidget (0x0x7ff6d3f8bd20) 0
+ primary-for QDialog (0x0x7ff6d3f869c0)
+ QObject (0x0x7ff6d3c9e240) 0
+ primary-for QWidget (0x0x7ff6d3f8bd20)
+ QPaintDevice (0x0x7ff6d3c9e2a0) 16
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 488)
+
+Class QTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextEdit::QPrivateSignal (0x0x7ff6d3c9eb40) 0 empty
+
+Class QTextEdit::ExtraSelection
+ size=24 align=8
+ base size=24 base align=8
+QTextEdit::ExtraSelection (0x0x7ff6d3c9eba0) 0
+
+Vtable for QTextEdit
+QTextEdit::_ZTV9QTextEdit: 74 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTextEdit)
+16 (int (*)(...))QTextEdit::metaObject
+24 (int (*)(...))QTextEdit::qt_metacast
+32 (int (*)(...))QTextEdit::qt_metacall
+40 (int (*)(...))QTextEdit::~QTextEdit
+48 (int (*)(...))QTextEdit::~QTextEdit
+56 (int (*)(...))QTextEdit::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTextEdit::mousePressEvent
+176 (int (*)(...))QTextEdit::mouseReleaseEvent
+184 (int (*)(...))QTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QTextEdit::mouseMoveEvent
+200 (int (*)(...))QTextEdit::wheelEvent
+208 (int (*)(...))QTextEdit::keyPressEvent
+216 (int (*)(...))QTextEdit::keyReleaseEvent
+224 (int (*)(...))QTextEdit::focusInEvent
+232 (int (*)(...))QTextEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTextEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QTextEdit::dragEnterEvent
+320 (int (*)(...))QTextEdit::dragMoveEvent
+328 (int (*)(...))QTextEdit::dragLeaveEvent
+336 (int (*)(...))QTextEdit::dropEvent
+344 (int (*)(...))QTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QTextEdit::inputMethodEvent
+416 (int (*)(...))QTextEdit::inputMethodQuery
+424 (int (*)(...))QTextEdit::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QTextEdit::loadResource
+480 (int (*)(...))QTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QTextEdit::canInsertFromMimeData
+496 (int (*)(...))QTextEdit::insertFromMimeData
+504 (int (*)(...))QTextEdit::doSetTextCursor
+512 (int (*)(...))-16
+520 (int (*)(...))(& _ZTI9QTextEdit)
+528 (int (*)(...))QTextEdit::_ZThn16_N9QTextEditD1Ev
+536 (int (*)(...))QTextEdit::_ZThn16_N9QTextEditD0Ev
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTextEdit
+ size=40 align=8
+ base size=40 base align=8
+QTextEdit (0x0x7ff6d3f86b60) 0
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 16)
+ QAbstractScrollArea (0x0x7ff6d3f86bc8) 0
+ primary-for QTextEdit (0x0x7ff6d3f86b60)
+ QFrame (0x0x7ff6d3f86c30) 0
+ primary-for QAbstractScrollArea (0x0x7ff6d3f86bc8)
+ QWidget (0x0x7ff6d3cb60e0) 0
+ primary-for QFrame (0x0x7ff6d3f86c30)
+ QObject (0x0x7ff6d3c9ea80) 0
+ primary-for QWidget (0x0x7ff6d3cb60e0)
+ QPaintDevice (0x0x7ff6d3c9eae0) 16
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 528)
+
+Class QPlainTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextEdit::QPrivateSignal (0x0x7ff6d3d30420) 0 empty
+
+Vtable for QPlainTextEdit
+QPlainTextEdit::_ZTV14QPlainTextEdit: 74 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QPlainTextEdit)
+16 (int (*)(...))QPlainTextEdit::metaObject
+24 (int (*)(...))QPlainTextEdit::qt_metacast
+32 (int (*)(...))QPlainTextEdit::qt_metacall
+40 (int (*)(...))QPlainTextEdit::~QPlainTextEdit
+48 (int (*)(...))QPlainTextEdit::~QPlainTextEdit
+56 (int (*)(...))QPlainTextEdit::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QPlainTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QPlainTextEdit::mousePressEvent
+176 (int (*)(...))QPlainTextEdit::mouseReleaseEvent
+184 (int (*)(...))QPlainTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QPlainTextEdit::mouseMoveEvent
+200 (int (*)(...))QPlainTextEdit::wheelEvent
+208 (int (*)(...))QPlainTextEdit::keyPressEvent
+216 (int (*)(...))QPlainTextEdit::keyReleaseEvent
+224 (int (*)(...))QPlainTextEdit::focusInEvent
+232 (int (*)(...))QPlainTextEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QPlainTextEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QPlainTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QPlainTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QPlainTextEdit::dragEnterEvent
+320 (int (*)(...))QPlainTextEdit::dragMoveEvent
+328 (int (*)(...))QPlainTextEdit::dragLeaveEvent
+336 (int (*)(...))QPlainTextEdit::dropEvent
+344 (int (*)(...))QPlainTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QPlainTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QPlainTextEdit::inputMethodEvent
+416 (int (*)(...))QPlainTextEdit::inputMethodQuery
+424 (int (*)(...))QPlainTextEdit::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QPlainTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QPlainTextEdit::loadResource
+480 (int (*)(...))QPlainTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QPlainTextEdit::canInsertFromMimeData
+496 (int (*)(...))QPlainTextEdit::insertFromMimeData
+504 (int (*)(...))QPlainTextEdit::doSetTextCursor
+512 (int (*)(...))-16
+520 (int (*)(...))(& _ZTI14QPlainTextEdit)
+528 (int (*)(...))QPlainTextEdit::_ZThn16_N14QPlainTextEditD1Ev
+536 (int (*)(...))QPlainTextEdit::_ZThn16_N14QPlainTextEditD0Ev
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QPlainTextEdit
+ size=40 align=8
+ base size=40 base align=8
+QPlainTextEdit (0x0x7ff6d3f86dd0) 0
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 16)
+ QAbstractScrollArea (0x0x7ff6d3f86e38) 0
+ primary-for QPlainTextEdit (0x0x7ff6d3f86dd0)
+ QFrame (0x0x7ff6d3f86ea0) 0
+ primary-for QAbstractScrollArea (0x0x7ff6d3f86e38)
+ QWidget (0x0x7ff6d3cb6460) 0
+ primary-for QFrame (0x0x7ff6d3f86ea0)
+ QObject (0x0x7ff6d3d30360) 0
+ primary-for QWidget (0x0x7ff6d3cb6460)
+ QPaintDevice (0x0x7ff6d3d303c0) 16
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 528)
+
+Class QPlainTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextDocumentLayout::QPrivateSignal (0x0x7ff6d3d30960) 0 empty
+
+Vtable for QPlainTextDocumentLayout
+QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QPlainTextDocumentLayout)
+16 (int (*)(...))QPlainTextDocumentLayout::metaObject
+24 (int (*)(...))QPlainTextDocumentLayout::qt_metacast
+32 (int (*)(...))QPlainTextDocumentLayout::qt_metacall
+40 (int (*)(...))QPlainTextDocumentLayout::~QPlainTextDocumentLayout
+48 (int (*)(...))QPlainTextDocumentLayout::~QPlainTextDocumentLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPlainTextDocumentLayout::draw
+120 (int (*)(...))QPlainTextDocumentLayout::hitTest
+128 (int (*)(...))QPlainTextDocumentLayout::pageCount
+136 (int (*)(...))QPlainTextDocumentLayout::documentSize
+144 (int (*)(...))QPlainTextDocumentLayout::frameBoundingRect
+152 (int (*)(...))QPlainTextDocumentLayout::blockBoundingRect
+160 (int (*)(...))QPlainTextDocumentLayout::documentChanged
+168 (int (*)(...))QAbstractTextDocumentLayout::resizeInlineObject
+176 (int (*)(...))QAbstractTextDocumentLayout::positionInlineObject
+184 (int (*)(...))QAbstractTextDocumentLayout::drawInlineObject
+
+Class QPlainTextDocumentLayout
+ size=16 align=8
+ base size=16 base align=8
+QPlainTextDocumentLayout (0x0x7ff6d3f86f08) 0
+ vptr=((& QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout) + 16)
+ QAbstractTextDocumentLayout (0x0x7ff6d3f86f70) 0
+ primary-for QPlainTextDocumentLayout (0x0x7ff6d3f86f08)
+ QObject (0x0x7ff6d3d30900) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7ff6d3f86f70)
+
+Class QProgressBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressBar::QPrivateSignal (0x0x7ff6d3d30ba0) 0 empty
+
+Vtable for QProgressBar
+QProgressBar::_ZTV12QProgressBar: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QProgressBar)
+16 (int (*)(...))QProgressBar::metaObject
+24 (int (*)(...))QProgressBar::qt_metacast
+32 (int (*)(...))QProgressBar::qt_metacall
+40 (int (*)(...))QProgressBar::~QProgressBar
+48 (int (*)(...))QProgressBar::~QProgressBar
+56 (int (*)(...))QProgressBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QProgressBar::sizeHint
+136 (int (*)(...))QProgressBar::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QProgressBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QProgressBar::text
+440 (int (*)(...))QProgressBar::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI12QProgressBar)
+464 (int (*)(...))QProgressBar::_ZThn16_N12QProgressBarD1Ev
+472 (int (*)(...))QProgressBar::_ZThn16_N12QProgressBarD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QProgressBar
+ size=40 align=8
+ base size=40 base align=8
+QProgressBar (0x0x7ff6d3d71000) 0
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 16)
+ QWidget (0x0x7ff6d3cb65b0) 0
+ primary-for QProgressBar (0x0x7ff6d3d71000)
+ QObject (0x0x7ff6d3d30ae0) 0
+ primary-for QWidget (0x0x7ff6d3cb65b0)
+ QPaintDevice (0x0x7ff6d3d30b40) 16
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 464)
+
+Class QProgressDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressDialog::QPrivateSignal (0x0x7ff6d3d30ea0) 0 empty
+
+Vtable for QProgressDialog
+QProgressDialog::_ZTV15QProgressDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QProgressDialog)
+16 (int (*)(...))QProgressDialog::metaObject
+24 (int (*)(...))QProgressDialog::qt_metacast
+32 (int (*)(...))QProgressDialog::qt_metacall
+40 (int (*)(...))QProgressDialog::~QProgressDialog
+48 (int (*)(...))QProgressDialog::~QProgressDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QProgressDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QProgressDialog::resizeEvent
+280 (int (*)(...))QProgressDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QProgressDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QProgressDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI15QProgressDialog)
+488 (int (*)(...))QProgressDialog::_ZThn16_N15QProgressDialogD1Ev
+496 (int (*)(...))QProgressDialog::_ZThn16_N15QProgressDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QProgressDialog
+ size=40 align=8
+ base size=40 base align=8
+QProgressDialog (0x0x7ff6d3d71068) 0
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 16)
+ QDialog (0x0x7ff6d3d710d0) 0
+ primary-for QProgressDialog (0x0x7ff6d3d71068)
+ QWidget (0x0x7ff6d3cb6700) 0
+ primary-for QDialog (0x0x7ff6d3d710d0)
+ QObject (0x0x7ff6d3d30de0) 0
+ primary-for QWidget (0x0x7ff6d3cb6700)
+ QPaintDevice (0x0x7ff6d3d30e40) 16
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 488)
+
+Class QProxyStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProxyStyle::QPrivateSignal (0x0x7ff6d3d910c0) 0 empty
+
+Vtable for QProxyStyle
+QProxyStyle::_ZTV11QProxyStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QProxyStyle)
+16 (int (*)(...))QProxyStyle::metaObject
+24 (int (*)(...))QProxyStyle::qt_metacast
+32 (int (*)(...))QProxyStyle::qt_metacall
+40 (int (*)(...))QProxyStyle::~QProxyStyle
+48 (int (*)(...))QProxyStyle::~QProxyStyle
+56 (int (*)(...))QProxyStyle::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QProxyStyle::polish
+120 (int (*)(...))QProxyStyle::unpolish
+128 (int (*)(...))QProxyStyle::polish
+136 (int (*)(...))QProxyStyle::unpolish
+144 (int (*)(...))QProxyStyle::polish
+152 (int (*)(...))QProxyStyle::itemTextRect
+160 (int (*)(...))QProxyStyle::itemPixmapRect
+168 (int (*)(...))QProxyStyle::drawItemText
+176 (int (*)(...))QProxyStyle::drawItemPixmap
+184 (int (*)(...))QProxyStyle::standardPalette
+192 (int (*)(...))QProxyStyle::drawPrimitive
+200 (int (*)(...))QProxyStyle::drawControl
+208 (int (*)(...))QProxyStyle::subElementRect
+216 (int (*)(...))QProxyStyle::drawComplexControl
+224 (int (*)(...))QProxyStyle::hitTestComplexControl
+232 (int (*)(...))QProxyStyle::subControlRect
+240 (int (*)(...))QProxyStyle::pixelMetric
+248 (int (*)(...))QProxyStyle::sizeFromContents
+256 (int (*)(...))QProxyStyle::styleHint
+264 (int (*)(...))QProxyStyle::standardPixmap
+272 (int (*)(...))QProxyStyle::standardIcon
+280 (int (*)(...))QProxyStyle::generatedIconPixmap
+288 (int (*)(...))QProxyStyle::layoutSpacing
+
+Class QProxyStyle
+ size=16 align=8
+ base size=16 base align=8
+QProxyStyle (0x0x7ff6d3d71138) 0
+ vptr=((& QProxyStyle::_ZTV11QProxyStyle) + 16)
+ QCommonStyle (0x0x7ff6d3d711a0) 0
+ primary-for QProxyStyle (0x0x7ff6d3d71138)
+ QStyle (0x0x7ff6d3d71208) 0
+ primary-for QCommonStyle (0x0x7ff6d3d711a0)
+ QObject (0x0x7ff6d3d91060) 0
+ primary-for QStyle (0x0x7ff6d3d71208)
+
+Class QRadioButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRadioButton::QPrivateSignal (0x0x7ff6d3d91300) 0 empty
+
+Vtable for QRadioButton
+QRadioButton::_ZTV12QRadioButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QRadioButton)
+16 (int (*)(...))QRadioButton::metaObject
+24 (int (*)(...))QRadioButton::qt_metacast
+32 (int (*)(...))QRadioButton::qt_metacall
+40 (int (*)(...))QRadioButton::~QRadioButton
+48 (int (*)(...))QRadioButton::~QRadioButton
+56 (int (*)(...))QRadioButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QRadioButton::sizeHint
+136 (int (*)(...))QRadioButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QRadioButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QRadioButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QRadioButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QRadioButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI12QRadioButton)
+480 (int (*)(...))QRadioButton::_ZThn16_N12QRadioButtonD1Ev
+488 (int (*)(...))QRadioButton::_ZThn16_N12QRadioButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QRadioButton
+ size=40 align=8
+ base size=40 base align=8
+QRadioButton (0x0x7ff6d3d71270) 0
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 16)
+ QAbstractButton (0x0x7ff6d3d712d8) 0
+ primary-for QRadioButton (0x0x7ff6d3d71270)
+ QWidget (0x0x7ff6d3cb6770) 0
+ primary-for QAbstractButton (0x0x7ff6d3d712d8)
+ QObject (0x0x7ff6d3d91240) 0
+ primary-for QWidget (0x0x7ff6d3cb6770)
+ QPaintDevice (0x0x7ff6d3d912a0) 16
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 480)
+
+Class QScrollBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollBar::QPrivateSignal (0x0x7ff6d3d91540) 0 empty
+
+Vtable for QScrollBar
+QScrollBar::_ZTV10QScrollBar: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QScrollBar)
+16 (int (*)(...))QScrollBar::metaObject
+24 (int (*)(...))QScrollBar::qt_metacast
+32 (int (*)(...))QScrollBar::qt_metacall
+40 (int (*)(...))QScrollBar::~QScrollBar
+48 (int (*)(...))QScrollBar::~QScrollBar
+56 (int (*)(...))QScrollBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QScrollBar::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QScrollBar::mousePressEvent
+176 (int (*)(...))QScrollBar::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QScrollBar::mouseMoveEvent
+200 (int (*)(...))QScrollBar::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QScrollBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QScrollBar::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QScrollBar::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QScrollBar::sliderChange
+440 (int (*)(...))QScrollBar::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI10QScrollBar)
+464 (int (*)(...))QScrollBar::_ZThn16_N10QScrollBarD1Ev
+472 (int (*)(...))QScrollBar::_ZThn16_N10QScrollBarD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QScrollBar
+ size=40 align=8
+ base size=40 base align=8
+QScrollBar (0x0x7ff6d3d71340) 0
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 16)
+ QAbstractSlider (0x0x7ff6d3d713a8) 0
+ primary-for QScrollBar (0x0x7ff6d3d71340)
+ QWidget (0x0x7ff6d3cb67e0) 0
+ primary-for QAbstractSlider (0x0x7ff6d3d713a8)
+ QObject (0x0x7ff6d3d91480) 0
+ primary-for QWidget (0x0x7ff6d3cb67e0)
+ QPaintDevice (0x0x7ff6d3d914e0) 16
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 464)
+
+Vtable for QScrollerProperties
+QScrollerProperties::_ZTV19QScrollerProperties: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollerProperties)
+16 (int (*)(...))QScrollerProperties::~QScrollerProperties
+24 (int (*)(...))QScrollerProperties::~QScrollerProperties
+
+Class QScrollerProperties
+ size=16 align=8
+ base size=16 base align=8
+QScrollerProperties (0x0x7ff6d3d916c0) 0
+ vptr=((& QScrollerProperties::_ZTV19QScrollerProperties) + 16)
+
+Class QScroller::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScroller::QPrivateSignal (0x0x7ff6d3d91a20) 0 empty
+
+Vtable for QScroller
+QScroller::_ZTV9QScroller: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QScroller)
+16 (int (*)(...))QScroller::metaObject
+24 (int (*)(...))QScroller::qt_metacast
+32 (int (*)(...))QScroller::qt_metacall
+40 (int (*)(...))QScroller::~QScroller
+48 (int (*)(...))QScroller::~QScroller
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QScroller
+ size=24 align=8
+ base size=24 base align=8
+QScroller (0x0x7ff6d3d71410) 0
+ vptr=((& QScroller::_ZTV9QScroller) + 16)
+ QObject (0x0x7ff6d3d919c0) 0
+ primary-for QScroller (0x0x7ff6d3d71410)
+
+Class QSizeGrip::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSizeGrip::QPrivateSignal (0x0x7ff6d3d91d20) 0 empty
+
+Vtable for QSizeGrip
+QSizeGrip::_ZTV9QSizeGrip: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSizeGrip)
+16 (int (*)(...))QSizeGrip::metaObject
+24 (int (*)(...))QSizeGrip::qt_metacast
+32 (int (*)(...))QSizeGrip::qt_metacall
+40 (int (*)(...))QSizeGrip::~QSizeGrip
+48 (int (*)(...))QSizeGrip::~QSizeGrip
+56 (int (*)(...))QSizeGrip::event
+64 (int (*)(...))QSizeGrip::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QSizeGrip::setVisible
+128 (int (*)(...))QSizeGrip::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSizeGrip::mousePressEvent
+176 (int (*)(...))QSizeGrip::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSizeGrip::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSizeGrip::paintEvent
+264 (int (*)(...))QSizeGrip::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QSizeGrip::showEvent
+352 (int (*)(...))QSizeGrip::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI9QSizeGrip)
+448 (int (*)(...))QSizeGrip::_ZThn16_N9QSizeGripD1Ev
+456 (int (*)(...))QSizeGrip::_ZThn16_N9QSizeGripD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSizeGrip
+ size=40 align=8
+ base size=40 base align=8
+QSizeGrip (0x0x7ff6d3d71478) 0
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 16)
+ QWidget (0x0x7ff6d3dc0b60) 0
+ primary-for QSizeGrip (0x0x7ff6d3d71478)
+ QObject (0x0x7ff6d3d91c60) 0
+ primary-for QWidget (0x0x7ff6d3dc0b60)
+ QPaintDevice (0x0x7ff6d3d91cc0) 16
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 448)
+
+Class QSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSpinBox::QPrivateSignal (0x0x7ff6d3d91f60) 0 empty
+
+Vtable for QSpinBox
+QSpinBox::_ZTV8QSpinBox: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSpinBox)
+16 (int (*)(...))QSpinBox::metaObject
+24 (int (*)(...))QSpinBox::qt_metacast
+32 (int (*)(...))QSpinBox::qt_metacall
+40 (int (*)(...))QSpinBox::~QSpinBox
+48 (int (*)(...))QSpinBox::~QSpinBox
+56 (int (*)(...))QSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QSpinBox::validate
+440 (int (*)(...))QSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))QSpinBox::valueFromText
+488 (int (*)(...))QSpinBox::textFromValue
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI8QSpinBox)
+512 (int (*)(...))QSpinBox::_ZThn16_N8QSpinBoxD1Ev
+520 (int (*)(...))QSpinBox::_ZThn16_N8QSpinBoxD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QSpinBox (0x0x7ff6d3d714e0) 0
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 16)
+ QAbstractSpinBox (0x0x7ff6d3d71548) 0
+ primary-for QSpinBox (0x0x7ff6d3d714e0)
+ QWidget (0x0x7ff6d3dc0bd0) 0
+ primary-for QAbstractSpinBox (0x0x7ff6d3d71548)
+ QObject (0x0x7ff6d3d91ea0) 0
+ primary-for QWidget (0x0x7ff6d3dc0bd0)
+ QPaintDevice (0x0x7ff6d3d91f00) 16
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 512)
+
+Class QDoubleSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleSpinBox::QPrivateSignal (0x0x7ff6d3dfb1e0) 0 empty
+
+Vtable for QDoubleSpinBox
+QDoubleSpinBox::_ZTV14QDoubleSpinBox: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDoubleSpinBox)
+16 (int (*)(...))QDoubleSpinBox::metaObject
+24 (int (*)(...))QDoubleSpinBox::qt_metacast
+32 (int (*)(...))QDoubleSpinBox::qt_metacall
+40 (int (*)(...))QDoubleSpinBox::~QDoubleSpinBox
+48 (int (*)(...))QDoubleSpinBox::~QDoubleSpinBox
+56 (int (*)(...))QAbstractSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDoubleSpinBox::validate
+440 (int (*)(...))QDoubleSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))QDoubleSpinBox::valueFromText
+488 (int (*)(...))QDoubleSpinBox::textFromValue
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI14QDoubleSpinBox)
+512 (int (*)(...))QDoubleSpinBox::_ZThn16_N14QDoubleSpinBoxD1Ev
+520 (int (*)(...))QDoubleSpinBox::_ZThn16_N14QDoubleSpinBoxD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDoubleSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QDoubleSpinBox (0x0x7ff6d3d715b0) 0
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 16)
+ QAbstractSpinBox (0x0x7ff6d3d71618) 0
+ primary-for QDoubleSpinBox (0x0x7ff6d3d715b0)
+ QWidget (0x0x7ff6d3dc0c40) 0
+ primary-for QAbstractSpinBox (0x0x7ff6d3d71618)
+ QObject (0x0x7ff6d3dfb120) 0
+ primary-for QWidget (0x0x7ff6d3dc0c40)
+ QPaintDevice (0x0x7ff6d3dfb180) 16
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 512)
+
+Class QSplashScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplashScreen::QPrivateSignal (0x0x7ff6d3dfb420) 0 empty
+
+Vtable for QSplashScreen
+QSplashScreen::_ZTV13QSplashScreen: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSplashScreen)
+16 (int (*)(...))QSplashScreen::metaObject
+24 (int (*)(...))QSplashScreen::qt_metacast
+32 (int (*)(...))QSplashScreen::qt_metacall
+40 (int (*)(...))QSplashScreen::~QSplashScreen
+48 (int (*)(...))QSplashScreen::~QSplashScreen
+56 (int (*)(...))QSplashScreen::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSplashScreen::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QSplashScreen::drawContents
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI13QSplashScreen)
+456 (int (*)(...))QSplashScreen::_ZThn16_N13QSplashScreenD1Ev
+464 (int (*)(...))QSplashScreen::_ZThn16_N13QSplashScreenD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplashScreen
+ size=40 align=8
+ base size=40 base align=8
+QSplashScreen (0x0x7ff6d3d71680) 0
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 16)
+ QWidget (0x0x7ff6d3dc0cb0) 0
+ primary-for QSplashScreen (0x0x7ff6d3d71680)
+ QObject (0x0x7ff6d3dfb360) 0
+ primary-for QWidget (0x0x7ff6d3dc0cb0)
+ QPaintDevice (0x0x7ff6d3dfb3c0) 16
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 456)
+
+Class QSplitter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitter::QPrivateSignal (0x0x7ff6d3dfb660) 0 empty
+
+Vtable for QSplitter
+QSplitter::_ZTV9QSplitter: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSplitter)
+16 (int (*)(...))QSplitter::metaObject
+24 (int (*)(...))QSplitter::qt_metacast
+32 (int (*)(...))QSplitter::qt_metacall
+40 (int (*)(...))QSplitter::~QSplitter
+48 (int (*)(...))QSplitter::~QSplitter
+56 (int (*)(...))QSplitter::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QSplitter::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSplitter::sizeHint
+136 (int (*)(...))QSplitter::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QSplitter::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QSplitter::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QSplitter::createHandle
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI9QSplitter)
+464 (int (*)(...))QSplitter::_ZThn16_N9QSplitterD1Ev
+472 (int (*)(...))QSplitter::_ZThn16_N9QSplitterD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplitter
+ size=40 align=8
+ base size=40 base align=8
+QSplitter (0x0x7ff6d3d716e8) 0
+ vptr=((& QSplitter::_ZTV9QSplitter) + 16)
+ QFrame (0x0x7ff6d3d71750) 0
+ primary-for QSplitter (0x0x7ff6d3d716e8)
+ QWidget (0x0x7ff6d3dc0d20) 0
+ primary-for QFrame (0x0x7ff6d3d71750)
+ QObject (0x0x7ff6d3dfb5a0) 0
+ primary-for QWidget (0x0x7ff6d3dc0d20)
+ QPaintDevice (0x0x7ff6d3dfb600) 16
+ vptr=((& QSplitter::_ZTV9QSplitter) + 464)
+
+Class QSplitterHandle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitterHandle::QPrivateSignal (0x0x7ff6d3dfb8a0) 0 empty
+
+Vtable for QSplitterHandle
+QSplitterHandle::_ZTV15QSplitterHandle: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSplitterHandle)
+16 (int (*)(...))QSplitterHandle::metaObject
+24 (int (*)(...))QSplitterHandle::qt_metacast
+32 (int (*)(...))QSplitterHandle::qt_metacall
+40 (int (*)(...))QSplitterHandle::~QSplitterHandle
+48 (int (*)(...))QSplitterHandle::~QSplitterHandle
+56 (int (*)(...))QSplitterHandle::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSplitterHandle::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSplitterHandle::mousePressEvent
+176 (int (*)(...))QSplitterHandle::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSplitterHandle::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSplitterHandle::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QSplitterHandle::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI15QSplitterHandle)
+448 (int (*)(...))QSplitterHandle::_ZThn16_N15QSplitterHandleD1Ev
+456 (int (*)(...))QSplitterHandle::_ZThn16_N15QSplitterHandleD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplitterHandle
+ size=40 align=8
+ base size=40 base align=8
+QSplitterHandle (0x0x7ff6d3d717b8) 0
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 16)
+ QWidget (0x0x7ff6d3dc0d90) 0
+ primary-for QSplitterHandle (0x0x7ff6d3d717b8)
+ QObject (0x0x7ff6d3dfb7e0) 0
+ primary-for QWidget (0x0x7ff6d3dc0d90)
+ QPaintDevice (0x0x7ff6d3dfb840) 16
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 448)
+
+Class QStackedLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedLayout::QPrivateSignal (0x0x7ff6d3dfbae0) 0 empty
+
+Vtable for QStackedLayout
+QStackedLayout::_ZTV14QStackedLayout: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QStackedLayout)
+16 (int (*)(...))QStackedLayout::metaObject
+24 (int (*)(...))QStackedLayout::qt_metacast
+32 (int (*)(...))QStackedLayout::qt_metacall
+40 (int (*)(...))QStackedLayout::~QStackedLayout
+48 (int (*)(...))QStackedLayout::~QStackedLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLayout::spacing
+120 (int (*)(...))QLayout::setSpacing
+128 (int (*)(...))QLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QStackedLayout::addItem
+152 (int (*)(...))QLayout::expandingDirections
+160 (int (*)(...))QStackedLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QStackedLayout::setGeometry
+184 (int (*)(...))QStackedLayout::itemAt
+192 (int (*)(...))QStackedLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QStackedLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QStackedLayout::sizeHint
+264 (int (*)(...))QStackedLayout::hasHeightForWidth
+272 (int (*)(...))QStackedLayout::heightForWidth
+280 (int (*)(...))-16
+288 (int (*)(...))(& _ZTI14QStackedLayout)
+296 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayoutD1Ev
+304 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayoutD0Ev
+312 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout8sizeHintEv
+320 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout11minimumSizeEv
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+336 (int (*)(...))QLayout::_ZThn16_NK7QLayout19expandingDirectionsEv
+344 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayout11setGeometryERK5QRect
+352 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+368 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout17hasHeightForWidthEv
+376 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout14heightForWidthEi
+384 (int (*)(...))QLayoutItem::minimumHeightForWidth
+392 (int (*)(...))QLayout::_ZThn16_N7QLayout10invalidateEv
+400 (int (*)(...))QLayoutItem::widget
+408 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+416 (int (*)(...))QLayoutItem::spacerItem
+424 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QStackedLayout
+ size=32 align=8
+ base size=28 base align=8
+QStackedLayout (0x0x7ff6d3d71820) 0
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 16)
+ QLayout (0x0x7ff6d3dc0e00) 0
+ primary-for QStackedLayout (0x0x7ff6d3d71820)
+ QObject (0x0x7ff6d3dfba20) 0
+ primary-for QLayout (0x0x7ff6d3dc0e00)
+ QLayoutItem (0x0x7ff6d3dfba80) 16
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 296)
+
+Class QStackedWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedWidget::QPrivateSignal (0x0x7ff6d3dfbde0) 0 empty
+
+Vtable for QStackedWidget
+QStackedWidget::_ZTV14QStackedWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QStackedWidget)
+16 (int (*)(...))QStackedWidget::metaObject
+24 (int (*)(...))QStackedWidget::qt_metacast
+32 (int (*)(...))QStackedWidget::qt_metacall
+40 (int (*)(...))QStackedWidget::~QStackedWidget
+48 (int (*)(...))QStackedWidget::~QStackedWidget
+56 (int (*)(...))QStackedWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI14QStackedWidget)
+456 (int (*)(...))QStackedWidget::_ZThn16_N14QStackedWidgetD1Ev
+464 (int (*)(...))QStackedWidget::_ZThn16_N14QStackedWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QStackedWidget
+ size=40 align=8
+ base size=40 base align=8
+QStackedWidget (0x0x7ff6d3d71888) 0
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 16)
+ QFrame (0x0x7ff6d3d718f0) 0
+ primary-for QStackedWidget (0x0x7ff6d3d71888)
+ QWidget (0x0x7ff6d3dc0f50) 0
+ primary-for QFrame (0x0x7ff6d3d718f0)
+ QObject (0x0x7ff6d3dfbd20) 0
+ primary-for QWidget (0x0x7ff6d3dc0f50)
+ QPaintDevice (0x0x7ff6d3dfbd80) 16
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 456)
+
+Class QStatusBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStatusBar::QPrivateSignal (0x0x7ff6d3a4f060) 0 empty
+
+Vtable for QStatusBar
+QStatusBar::_ZTV10QStatusBar: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QStatusBar)
+16 (int (*)(...))QStatusBar::metaObject
+24 (int (*)(...))QStatusBar::qt_metacast
+32 (int (*)(...))QStatusBar::qt_metacall
+40 (int (*)(...))QStatusBar::~QStatusBar
+48 (int (*)(...))QStatusBar::~QStatusBar
+56 (int (*)(...))QStatusBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QStatusBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QStatusBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QStatusBar::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI10QStatusBar)
+448 (int (*)(...))QStatusBar::_ZThn16_N10QStatusBarD1Ev
+456 (int (*)(...))QStatusBar::_ZThn16_N10QStatusBarD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QStatusBar
+ size=40 align=8
+ base size=40 base align=8
+QStatusBar (0x0x7ff6d3d71958) 0
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 16)
+ QWidget (0x0x7ff6d3dc0540) 0
+ primary-for QStatusBar (0x0x7ff6d3d71958)
+ QObject (0x0x7ff6d3dfbf60) 0
+ primary-for QWidget (0x0x7ff6d3dc0540)
+ QPaintDevice (0x0x7ff6d3a4f000) 16
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 448)
+
+Class QStyledItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyledItemDelegate::QPrivateSignal (0x0x7ff6d3a4f240) 0 empty
+
+Vtable for QStyledItemDelegate
+QStyledItemDelegate::_ZTV19QStyledItemDelegate: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QStyledItemDelegate)
+16 (int (*)(...))QStyledItemDelegate::metaObject
+24 (int (*)(...))QStyledItemDelegate::qt_metacast
+32 (int (*)(...))QStyledItemDelegate::qt_metacall
+40 (int (*)(...))QStyledItemDelegate::~QStyledItemDelegate
+48 (int (*)(...))QStyledItemDelegate::~QStyledItemDelegate
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QStyledItemDelegate::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStyledItemDelegate::paint
+120 (int (*)(...))QStyledItemDelegate::sizeHint
+128 (int (*)(...))QStyledItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QStyledItemDelegate::setEditorData
+152 (int (*)(...))QStyledItemDelegate::setModelData
+160 (int (*)(...))QStyledItemDelegate::updateEditorGeometry
+168 (int (*)(...))QStyledItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+192 (int (*)(...))QStyledItemDelegate::displayText
+200 (int (*)(...))QStyledItemDelegate::initStyleOption
+
+Class QStyledItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QStyledItemDelegate (0x0x7ff6d3d719c0) 0
+ vptr=((& QStyledItemDelegate::_ZTV19QStyledItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7ff6d3d71a28) 0
+ primary-for QStyledItemDelegate (0x0x7ff6d3d719c0)
+ QObject (0x0x7ff6d3a4f1e0) 0
+ primary-for QAbstractItemDelegate (0x0x7ff6d3d71a28)
+
+Class QStyleFactory
+ size=1 align=1
+ base size=0 base align=1
+QStyleFactory (0x0x7ff6d3a4f3c0) 0 empty
+
+Class QStylePainter
+ size=24 align=8
+ base size=24 base align=8
+QStylePainter (0x0x7ff6d3d71a90) 0
+ QPainter (0x0x7ff6d3a4f420) 0
+
+Class QStylePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStylePlugin::QPrivateSignal (0x0x7ff6d3a4fcc0) 0 empty
+
+Vtable for QStylePlugin
+QStylePlugin::_ZTV12QStylePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QStylePlugin)
+16 (int (*)(...))QStylePlugin::metaObject
+24 (int (*)(...))QStylePlugin::qt_metacast
+32 (int (*)(...))QStylePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QStylePlugin
+ size=16 align=8
+ base size=16 base align=8
+QStylePlugin (0x0x7ff6d3d71af8) 0
+ vptr=((& QStylePlugin::_ZTV12QStylePlugin) + 16)
+ QObject (0x0x7ff6d3a4fc60) 0
+ primary-for QStylePlugin (0x0x7ff6d3d71af8)
+
+Class QSystemTrayIcon::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSystemTrayIcon::QPrivateSignal (0x0x7ff6d3a4fde0) 0 empty
+
+Vtable for QSystemTrayIcon
+QSystemTrayIcon::_ZTV15QSystemTrayIcon: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSystemTrayIcon)
+16 (int (*)(...))QSystemTrayIcon::metaObject
+24 (int (*)(...))QSystemTrayIcon::qt_metacast
+32 (int (*)(...))QSystemTrayIcon::qt_metacall
+40 (int (*)(...))QSystemTrayIcon::~QSystemTrayIcon
+48 (int (*)(...))QSystemTrayIcon::~QSystemTrayIcon
+56 (int (*)(...))QSystemTrayIcon::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSystemTrayIcon
+ size=16 align=8
+ base size=16 base align=8
+QSystemTrayIcon (0x0x7ff6d3d71b60) 0
+ vptr=((& QSystemTrayIcon::_ZTV15QSystemTrayIcon) + 16)
+ QObject (0x0x7ff6d3a4fd80) 0
+ primary-for QSystemTrayIcon (0x0x7ff6d3d71b60)
+
+Class QTableView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableView::QPrivateSignal (0x0x7ff6d3a8a120) 0 empty
+
+Vtable for QTableView
+QTableView::_ZTV10QTableView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTableView)
+16 (int (*)(...))QTableView::metaObject
+24 (int (*)(...))QTableView::qt_metacast
+32 (int (*)(...))QTableView::qt_metacall
+40 (int (*)(...))QTableView::~QTableView
+48 (int (*)(...))QTableView::~QTableView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTableView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTableView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QTableView::scrollContentsBy
+464 (int (*)(...))QTableView::viewportSizeHint
+472 (int (*)(...))QTableView::setModel
+480 (int (*)(...))QTableView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QTableView::visualRect
+504 (int (*)(...))QTableView::scrollTo
+512 (int (*)(...))QTableView::indexAt
+520 (int (*)(...))QTableView::sizeHintForRow
+528 (int (*)(...))QTableView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QTableView::setRootIndex
+560 (int (*)(...))QTableView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QTableView::selectionChanged
+608 (int (*)(...))QTableView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTableView::updateGeometries
+640 (int (*)(...))QTableView::verticalScrollbarAction
+648 (int (*)(...))QTableView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTableView::moveCursor
+704 (int (*)(...))QTableView::horizontalOffset
+712 (int (*)(...))QTableView::verticalOffset
+720 (int (*)(...))QTableView::isIndexHidden
+728 (int (*)(...))QTableView::setSelection
+736 (int (*)(...))QTableView::visualRegionForSelection
+744 (int (*)(...))QTableView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QTableView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI10QTableView)
+800 (int (*)(...))QTableView::_ZThn16_N10QTableViewD1Ev
+808 (int (*)(...))QTableView::_ZThn16_N10QTableViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTableView
+ size=40 align=8
+ base size=40 base align=8
+QTableView (0x0x7ff6d3d71bc8) 0
+ vptr=((& QTableView::_ZTV10QTableView) + 16)
+ QAbstractItemView (0x0x7ff6d3d71c30) 0
+ primary-for QTableView (0x0x7ff6d3d71bc8)
+ QAbstractScrollArea (0x0x7ff6d3d71c98) 0
+ primary-for QAbstractItemView (0x0x7ff6d3d71c30)
+ QFrame (0x0x7ff6d3d71d00) 0
+ primary-for QAbstractScrollArea (0x0x7ff6d3d71c98)
+ QWidget (0x0x7ff6d3a76460) 0
+ primary-for QFrame (0x0x7ff6d3d71d00)
+ QObject (0x0x7ff6d3a8a060) 0
+ primary-for QWidget (0x0x7ff6d3a76460)
+ QPaintDevice (0x0x7ff6d3a8a0c0) 16
+ vptr=((& QTableView::_ZTV10QTableView) + 800)
+
+Class QTableWidgetSelectionRange
+ size=16 align=4
+ base size=16 base align=4
+QTableWidgetSelectionRange (0x0x7ff6d3a8a2a0) 0
+
+Vtable for QTableWidgetItem
+QTableWidgetItem::_ZTV16QTableWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QTableWidgetItem)
+16 (int (*)(...))QTableWidgetItem::~QTableWidgetItem
+24 (int (*)(...))QTableWidgetItem::~QTableWidgetItem
+32 (int (*)(...))QTableWidgetItem::clone
+40 (int (*)(...))QTableWidgetItem::data
+48 (int (*)(...))QTableWidgetItem::setData
+56 (int (*)(...))QTableWidgetItem::operator<
+64 (int (*)(...))QTableWidgetItem::read
+72 (int (*)(...))QTableWidgetItem::write
+
+Class QTableWidgetItem
+ size=64 align=8
+ base size=60 base align=8
+QTableWidgetItem (0x0x7ff6d3a8a6c0) 0
+ vptr=((& QTableWidgetItem::_ZTV16QTableWidgetItem) + 16)
+
+Class QTableWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableWidget::QPrivateSignal (0x0x7ff6d3af99c0) 0 empty
+
+Vtable for QTableWidget
+QTableWidget::_ZTV12QTableWidget: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTableWidget)
+16 (int (*)(...))QTableWidget::metaObject
+24 (int (*)(...))QTableWidget::qt_metacast
+32 (int (*)(...))QTableWidget::qt_metacall
+40 (int (*)(...))QTableWidget::~QTableWidget
+48 (int (*)(...))QTableWidget::~QTableWidget
+56 (int (*)(...))QTableWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTableView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTableView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QTableWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QTableView::scrollContentsBy
+464 (int (*)(...))QTableView::viewportSizeHint
+472 (int (*)(...))QTableWidget::setModel
+480 (int (*)(...))QTableView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QTableView::visualRect
+504 (int (*)(...))QTableView::scrollTo
+512 (int (*)(...))QTableView::indexAt
+520 (int (*)(...))QTableView::sizeHintForRow
+528 (int (*)(...))QTableView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QTableView::setRootIndex
+560 (int (*)(...))QTableView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QTableView::selectionChanged
+608 (int (*)(...))QTableView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTableView::updateGeometries
+640 (int (*)(...))QTableView::verticalScrollbarAction
+648 (int (*)(...))QTableView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTableView::moveCursor
+704 (int (*)(...))QTableView::horizontalOffset
+712 (int (*)(...))QTableView::verticalOffset
+720 (int (*)(...))QTableView::isIndexHidden
+728 (int (*)(...))QTableView::setSelection
+736 (int (*)(...))QTableView::visualRegionForSelection
+744 (int (*)(...))QTableView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QTableView::initViewItemOption
+784 (int (*)(...))QTableWidget::mimeTypes
+792 (int (*)(...))QTableWidget::mimeData
+800 (int (*)(...))QTableWidget::dropMimeData
+808 (int (*)(...))QTableWidget::supportedDropActions
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI12QTableWidget)
+832 (int (*)(...))QTableWidget::_ZThn16_N12QTableWidgetD1Ev
+840 (int (*)(...))QTableWidget::_ZThn16_N12QTableWidgetD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTableWidget
+ size=40 align=8
+ base size=40 base align=8
+QTableWidget (0x0x7ff6d3abe618) 0
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 16)
+ QTableView (0x0x7ff6d3abe680) 0
+ primary-for QTableWidget (0x0x7ff6d3abe618)
+ QAbstractItemView (0x0x7ff6d3abe6e8) 0
+ primary-for QTableView (0x0x7ff6d3abe680)
+ QAbstractScrollArea (0x0x7ff6d3abe750) 0
+ primary-for QAbstractItemView (0x0x7ff6d3abe6e8)
+ QFrame (0x0x7ff6d3abe7b8) 0
+ primary-for QAbstractScrollArea (0x0x7ff6d3abe750)
+ QWidget (0x0x7ff6d3f8b770) 0
+ primary-for QFrame (0x0x7ff6d3abe7b8)
+ QObject (0x0x7ff6d3af9900) 0
+ primary-for QWidget (0x0x7ff6d3f8b770)
+ QPaintDevice (0x0x7ff6d3af9960) 16
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 832)
+
+Class QTextBrowser::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBrowser::QPrivateSignal (0x0x7ff6d3af9d80) 0 empty
+
+Vtable for QTextBrowser
+QTextBrowser::_ZTV12QTextBrowser: 79 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTextBrowser)
+16 (int (*)(...))QTextBrowser::metaObject
+24 (int (*)(...))QTextBrowser::qt_metacast
+32 (int (*)(...))QTextBrowser::qt_metacall
+40 (int (*)(...))QTextBrowser::~QTextBrowser
+48 (int (*)(...))QTextBrowser::~QTextBrowser
+56 (int (*)(...))QTextBrowser::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTextBrowser::mousePressEvent
+176 (int (*)(...))QTextBrowser::mouseReleaseEvent
+184 (int (*)(...))QTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QTextBrowser::mouseMoveEvent
+200 (int (*)(...))QTextEdit::wheelEvent
+208 (int (*)(...))QTextBrowser::keyPressEvent
+216 (int (*)(...))QTextEdit::keyReleaseEvent
+224 (int (*)(...))QTextEdit::focusInEvent
+232 (int (*)(...))QTextBrowser::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTextBrowser::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QTextEdit::dragEnterEvent
+320 (int (*)(...))QTextEdit::dragMoveEvent
+328 (int (*)(...))QTextEdit::dragLeaveEvent
+336 (int (*)(...))QTextEdit::dropEvent
+344 (int (*)(...))QTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QTextEdit::inputMethodEvent
+416 (int (*)(...))QTextEdit::inputMethodQuery
+424 (int (*)(...))QTextBrowser::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QTextBrowser::loadResource
+480 (int (*)(...))QTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QTextEdit::canInsertFromMimeData
+496 (int (*)(...))QTextEdit::insertFromMimeData
+504 (int (*)(...))QTextEdit::doSetTextCursor
+512 (int (*)(...))QTextBrowser::backward
+520 (int (*)(...))QTextBrowser::forward
+528 (int (*)(...))QTextBrowser::home
+536 (int (*)(...))QTextBrowser::reload
+544 (int (*)(...))QTextBrowser::doSetSource
+552 (int (*)(...))-16
+560 (int (*)(...))(& _ZTI12QTextBrowser)
+568 (int (*)(...))QTextBrowser::_ZThn16_N12QTextBrowserD1Ev
+576 (int (*)(...))QTextBrowser::_ZThn16_N12QTextBrowserD0Ev
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+592 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+600 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+608 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+616 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+624 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTextBrowser
+ size=40 align=8
+ base size=40 base align=8
+QTextBrowser (0x0x7ff6d3abe820) 0
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 16)
+ QTextEdit (0x0x7ff6d3abe888) 0
+ primary-for QTextBrowser (0x0x7ff6d3abe820)
+ QAbstractScrollArea (0x0x7ff6d3abe8f0) 0
+ primary-for QTextEdit (0x0x7ff6d3abe888)
+ QFrame (0x0x7ff6d3abe958) 0
+ primary-for QAbstractScrollArea (0x0x7ff6d3abe8f0)
+ QWidget (0x0x7ff6d3a76690) 0
+ primary-for QFrame (0x0x7ff6d3abe958)
+ QObject (0x0x7ff6d3af9cc0) 0
+ primary-for QWidget (0x0x7ff6d3a76690)
+ QPaintDevice (0x0x7ff6d3af9d20) 16
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 568)
+
+Class QToolBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBar::QPrivateSignal (0x0x7ff6d3b37000) 0 empty
+
+Vtable for QToolBar
+QToolBar::_ZTV8QToolBar: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QToolBar)
+16 (int (*)(...))QToolBar::metaObject
+24 (int (*)(...))QToolBar::qt_metacast
+32 (int (*)(...))QToolBar::qt_metacall
+40 (int (*)(...))QToolBar::~QToolBar
+48 (int (*)(...))QToolBar::~QToolBar
+56 (int (*)(...))QToolBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QToolBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QToolBar::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QToolBar::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI8QToolBar)
+456 (int (*)(...))QToolBar::_ZThn16_N8QToolBarD1Ev
+464 (int (*)(...))QToolBar::_ZThn16_N8QToolBarD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolBar
+ size=40 align=8
+ base size=40 base align=8
+QToolBar (0x0x7ff6d3abe9c0) 0
+ vptr=((& QToolBar::_ZTV8QToolBar) + 16)
+ QWidget (0x0x7ff6d3a76700) 0
+ primary-for QToolBar (0x0x7ff6d3abe9c0)
+ QObject (0x0x7ff6d3af9f00) 0
+ primary-for QWidget (0x0x7ff6d3a76700)
+ QPaintDevice (0x0x7ff6d3af9f60) 16
+ vptr=((& QToolBar::_ZTV8QToolBar) + 456)
+
+Class QToolBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBox::QPrivateSignal (0x0x7ff6d3b37480) 0 empty
+
+Vtable for QToolBox
+QToolBox::_ZTV8QToolBox: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QToolBox)
+16 (int (*)(...))QToolBox::metaObject
+24 (int (*)(...))QToolBox::qt_metacast
+32 (int (*)(...))QToolBox::qt_metacall
+40 (int (*)(...))QToolBox::~QToolBox
+48 (int (*)(...))QToolBox::~QToolBox
+56 (int (*)(...))QToolBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QToolBox::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QToolBox::itemInserted
+448 (int (*)(...))QToolBox::itemRemoved
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI8QToolBox)
+472 (int (*)(...))QToolBox::_ZThn16_N8QToolBoxD1Ev
+480 (int (*)(...))QToolBox::_ZThn16_N8QToolBoxD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolBox
+ size=40 align=8
+ base size=40 base align=8
+QToolBox (0x0x7ff6d3abea28) 0
+ vptr=((& QToolBox::_ZTV8QToolBox) + 16)
+ QFrame (0x0x7ff6d3abea90) 0
+ primary-for QToolBox (0x0x7ff6d3abea28)
+ QWidget (0x0x7ff6d3a76770) 0
+ primary-for QFrame (0x0x7ff6d3abea90)
+ QObject (0x0x7ff6d3b373c0) 0
+ primary-for QWidget (0x0x7ff6d3a76770)
+ QPaintDevice (0x0x7ff6d3b37420) 16
+ vptr=((& QToolBox::_ZTV8QToolBox) + 472)
+
+Class QToolButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolButton::QPrivateSignal (0x0x7ff6d3b377e0) 0 empty
+
+Vtable for QToolButton
+QToolButton::_ZTV11QToolButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QToolButton)
+16 (int (*)(...))QToolButton::metaObject
+24 (int (*)(...))QToolButton::qt_metacast
+32 (int (*)(...))QToolButton::qt_metacall
+40 (int (*)(...))QToolButton::~QToolButton
+48 (int (*)(...))QToolButton::~QToolButton
+56 (int (*)(...))QToolButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QToolButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QToolButton::sizeHint
+136 (int (*)(...))QToolButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QToolButton::mousePressEvent
+176 (int (*)(...))QToolButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QToolButton::enterEvent
+248 (int (*)(...))QToolButton::leaveEvent
+256 (int (*)(...))QToolButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QToolButton::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QToolButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QToolButton::nextCheckState
+456 (int (*)(...))QToolButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI11QToolButton)
+480 (int (*)(...))QToolButton::_ZThn16_N11QToolButtonD1Ev
+488 (int (*)(...))QToolButton::_ZThn16_N11QToolButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolButton
+ size=40 align=8
+ base size=40 base align=8
+QToolButton (0x0x7ff6d3abeaf8) 0
+ vptr=((& QToolButton::_ZTV11QToolButton) + 16)
+ QAbstractButton (0x0x7ff6d3abeb60) 0
+ primary-for QToolButton (0x0x7ff6d3abeaf8)
+ QWidget (0x0x7ff6d3a767e0) 0
+ primary-for QAbstractButton (0x0x7ff6d3abeb60)
+ QObject (0x0x7ff6d3b37720) 0
+ primary-for QWidget (0x0x7ff6d3a767e0)
+ QPaintDevice (0x0x7ff6d3b37780) 16
+ vptr=((& QToolButton::_ZTV11QToolButton) + 480)
+
+Class QToolTip
+ size=1 align=1
+ base size=0 base align=1
+QToolTip (0x0x7ff6d3b37a20) 0 empty
+
+Class QTreeView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeView::QPrivateSignal (0x0x7ff6d3b37ba0) 0 empty
+
+Vtable for QTreeView
+QTreeView::_ZTV9QTreeView: 110 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTreeView)
+16 (int (*)(...))QTreeView::metaObject
+24 (int (*)(...))QTreeView::qt_metacast
+32 (int (*)(...))QTreeView::qt_metacall
+40 (int (*)(...))QTreeView::~QTreeView
+48 (int (*)(...))QTreeView::~QTreeView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeView::setModel
+480 (int (*)(...))QTreeView::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))-16
+808 (int (*)(...))(& _ZTI9QTreeView)
+816 (int (*)(...))QTreeView::_ZThn16_N9QTreeViewD1Ev
+824 (int (*)(...))QTreeView::_ZThn16_N9QTreeViewD0Ev
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTreeView
+ size=40 align=8
+ base size=40 base align=8
+QTreeView (0x0x7ff6d3abebc8) 0
+ vptr=((& QTreeView::_ZTV9QTreeView) + 16)
+ QAbstractItemView (0x0x7ff6d3abec30) 0
+ primary-for QTreeView (0x0x7ff6d3abebc8)
+ QAbstractScrollArea (0x0x7ff6d3abec98) 0
+ primary-for QAbstractItemView (0x0x7ff6d3abec30)
+ QFrame (0x0x7ff6d3abed00) 0
+ primary-for QAbstractScrollArea (0x0x7ff6d3abec98)
+ QWidget (0x0x7ff6d3a769a0) 0
+ primary-for QFrame (0x0x7ff6d3abed00)
+ QObject (0x0x7ff6d3b37ae0) 0
+ primary-for QWidget (0x0x7ff6d3a769a0)
+ QPaintDevice (0x0x7ff6d3b37b40) 16
+ vptr=((& QTreeView::_ZTV9QTreeView) + 816)
+
+Class QTreeWidgetItemIterator
+ size=24 align=8
+ base size=20 base align=8
+QTreeWidgetItemIterator (0x0x7ff6d3b37d20) 0
+
+Vtable for QTreeWidgetItem
+QTreeWidgetItem::_ZTV15QTreeWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QTreeWidgetItem)
+16 (int (*)(...))QTreeWidgetItem::~QTreeWidgetItem
+24 (int (*)(...))QTreeWidgetItem::~QTreeWidgetItem
+32 (int (*)(...))QTreeWidgetItem::clone
+40 (int (*)(...))QTreeWidgetItem::data
+48 (int (*)(...))QTreeWidgetItem::setData
+56 (int (*)(...))QTreeWidgetItem::operator<
+64 (int (*)(...))QTreeWidgetItem::read
+72 (int (*)(...))QTreeWidgetItem::write
+
+Class QTreeWidgetItem
+ size=96 align=8
+ base size=92 base align=8
+QTreeWidgetItem (0x0x7ff6d3bab420) 0
+ vptr=((& QTreeWidgetItem::_ZTV15QTreeWidgetItem) + 16)
+
+Class QTreeWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeWidget::QPrivateSignal (0x0x7ff6d3867240) 0 empty
+
+Vtable for QTreeWidget
+QTreeWidget::_ZTV11QTreeWidget: 114 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTreeWidget)
+16 (int (*)(...))QTreeWidget::metaObject
+24 (int (*)(...))QTreeWidget::qt_metacast
+32 (int (*)(...))QTreeWidget::qt_metacall
+40 (int (*)(...))QTreeWidget::~QTreeWidget
+48 (int (*)(...))QTreeWidget::~QTreeWidget
+56 (int (*)(...))QTreeWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QTreeWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeWidget::setModel
+480 (int (*)(...))QTreeWidget::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))QTreeWidget::mimeTypes
+808 (int (*)(...))QTreeWidget::mimeData
+816 (int (*)(...))QTreeWidget::dropMimeData
+824 (int (*)(...))QTreeWidget::supportedDropActions
+832 (int (*)(...))-16
+840 (int (*)(...))(& _ZTI11QTreeWidget)
+848 (int (*)(...))QTreeWidget::_ZThn16_N11QTreeWidgetD1Ev
+856 (int (*)(...))QTreeWidget::_ZThn16_N11QTreeWidgetD0Ev
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+896 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+904 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTreeWidget
+ size=40 align=8
+ base size=40 base align=8
+QTreeWidget (0x0x7ff6d3bde750) 0
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 16)
+ QTreeView (0x0x7ff6d386b000) 0
+ primary-for QTreeWidget (0x0x7ff6d3bde750)
+ QAbstractItemView (0x0x7ff6d386b068) 0
+ primary-for QTreeView (0x0x7ff6d386b000)
+ QAbstractScrollArea (0x0x7ff6d386b0d0) 0
+ primary-for QAbstractItemView (0x0x7ff6d386b068)
+ QFrame (0x0x7ff6d386b138) 0
+ primary-for QAbstractScrollArea (0x0x7ff6d386b0d0)
+ QWidget (0x0x7ff6d3b8d770) 0
+ primary-for QFrame (0x0x7ff6d386b138)
+ QObject (0x0x7ff6d3867180) 0
+ primary-for QWidget (0x0x7ff6d3b8d770)
+ QPaintDevice (0x0x7ff6d38671e0) 16
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 848)
+
+Class QUndoView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoView::QPrivateSignal (0x0x7ff6d3867840) 0 empty
+
+Vtable for QUndoView
+QUndoView::_ZTV9QUndoView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QUndoView)
+16 (int (*)(...))QUndoView::metaObject
+24 (int (*)(...))QUndoView::qt_metacast
+32 (int (*)(...))QUndoView::qt_metacall
+40 (int (*)(...))QUndoView::~QUndoView
+48 (int (*)(...))QUndoView::~QUndoView
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI9QUndoView)
+800 (int (*)(...))QUndoView::_ZThn16_N9QUndoViewD1Ev
+808 (int (*)(...))QUndoView::_ZThn16_N9QUndoViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QUndoView
+ size=40 align=8
+ base size=40 base align=8
+QUndoView (0x0x7ff6d386b340) 0
+ vptr=((& QUndoView::_ZTV9QUndoView) + 16)
+ QListView (0x0x7ff6d386b3a8) 0
+ primary-for QUndoView (0x0x7ff6d386b340)
+ QAbstractItemView (0x0x7ff6d386b410) 0
+ primary-for QListView (0x0x7ff6d386b3a8)
+ QAbstractScrollArea (0x0x7ff6d386b478) 0
+ primary-for QAbstractItemView (0x0x7ff6d386b410)
+ QFrame (0x0x7ff6d386b4e0) 0
+ primary-for QAbstractScrollArea (0x0x7ff6d386b478)
+ QWidget (0x0x7ff6d3b8d8c0) 0
+ primary-for QFrame (0x0x7ff6d386b4e0)
+ QObject (0x0x7ff6d3867780) 0
+ primary-for QWidget (0x0x7ff6d3b8d8c0)
+ QPaintDevice (0x0x7ff6d38677e0) 16
+ vptr=((& QUndoView::_ZTV9QUndoView) + 800)
+
+Class QWhatsThis
+ size=1 align=1
+ base size=0 base align=1
+QWhatsThis (0x0x7ff6d38679c0) 0 empty
+
+Class QWidgetAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidgetAction::QPrivateSignal (0x0x7ff6d3867a80) 0 empty
+
+Vtable for QWidgetAction
+QWidgetAction::_ZTV13QWidgetAction: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QWidgetAction)
+16 (int (*)(...))QWidgetAction::metaObject
+24 (int (*)(...))QWidgetAction::qt_metacast
+32 (int (*)(...))QWidgetAction::qt_metacall
+40 (int (*)(...))QWidgetAction::~QWidgetAction
+48 (int (*)(...))QWidgetAction::~QWidgetAction
+56 (int (*)(...))QWidgetAction::event
+64 (int (*)(...))QWidgetAction::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidgetAction::createWidget
+120 (int (*)(...))QWidgetAction::deleteWidget
+
+Class QWidgetAction
+ size=16 align=8
+ base size=16 base align=8
+QWidgetAction (0x0x7ff6d386b548) 0
+ vptr=((& QWidgetAction::_ZTV13QWidgetAction) + 16)
+ QAction (0x0x7ff6d386b5b0) 0
+ primary-for QWidgetAction (0x0x7ff6d386b548)
+ QObject (0x0x7ff6d3867a20) 0
+ primary-for QAction (0x0x7ff6d386b5b0)
+
+Class QWizard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizard::QPrivateSignal (0x0x7ff6d3867cc0) 0 empty
+
+Vtable for QWizard
+QWizard::_ZTV7QWizard: 73 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWizard)
+16 (int (*)(...))QWizard::metaObject
+24 (int (*)(...))QWizard::qt_metacast
+32 (int (*)(...))QWizard::qt_metacall
+40 (int (*)(...))QWizard::~QWizard
+48 (int (*)(...))QWizard::~QWizard
+56 (int (*)(...))QWizard::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWizard::setVisible
+128 (int (*)(...))QWizard::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWizard::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWizard::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QWizard::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))QWizard::validateCurrentPage
+480 (int (*)(...))QWizard::nextId
+488 (int (*)(...))QWizard::initializePage
+496 (int (*)(...))QWizard::cleanupPage
+504 (int (*)(...))-16
+512 (int (*)(...))(& _ZTI7QWizard)
+520 (int (*)(...))QWizard::_ZThn16_N7QWizardD1Ev
+528 (int (*)(...))QWizard::_ZThn16_N7QWizardD0Ev
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWizard
+ size=40 align=8
+ base size=40 base align=8
+QWizard (0x0x7ff6d386b618) 0
+ vptr=((& QWizard::_ZTV7QWizard) + 16)
+ QDialog (0x0x7ff6d386b680) 0
+ primary-for QWizard (0x0x7ff6d386b618)
+ QWidget (0x0x7ff6d3b8d930) 0
+ primary-for QDialog (0x0x7ff6d386b680)
+ QObject (0x0x7ff6d3867c00) 0
+ primary-for QWidget (0x0x7ff6d3b8d930)
+ QPaintDevice (0x0x7ff6d3867c60) 16
+ vptr=((& QWizard::_ZTV7QWizard) + 520)
+
+Class QWizardPage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizardPage::QPrivateSignal (0x0x7ff6d38c2480) 0 empty
+
+Vtable for QWizardPage
+QWizardPage::_ZTV11QWizardPage: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWizardPage)
+16 (int (*)(...))QWizardPage::metaObject
+24 (int (*)(...))QWizardPage::qt_metacast
+32 (int (*)(...))QWizardPage::qt_metacall
+40 (int (*)(...))QWizardPage::~QWizardPage
+48 (int (*)(...))QWizardPage::~QWizardPage
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QWizardPage::initializePage
+440 (int (*)(...))QWizardPage::cleanupPage
+448 (int (*)(...))QWizardPage::validatePage
+456 (int (*)(...))QWizardPage::isComplete
+464 (int (*)(...))QWizardPage::nextId
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QWizardPage)
+488 (int (*)(...))QWizardPage::_ZThn16_N11QWizardPageD1Ev
+496 (int (*)(...))QWizardPage::_ZThn16_N11QWizardPageD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWizardPage
+ size=40 align=8
+ base size=40 base align=8
+QWizardPage (0x0x7ff6d386b820) 0
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 16)
+ QWidget (0x0x7ff6d38a6af0) 0
+ primary-for QWizardPage (0x0x7ff6d386b820)
+ QObject (0x0x7ff6d38c23c0) 0
+ primary-for QWidget (0x0x7ff6d38a6af0)
+ QPaintDevice (0x0x7ff6d38c2420) 16
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 488)
+
+Class QHelpGlobal
+ size=1 align=1
+ base size=0 base align=1
+QHelpGlobal (0x0x7ff6d38c2600) 0 empty
+
+Class QCompressedHelpInfo
+ size=8 align=8
+ base size=8 base align=8
+QCompressedHelpInfo (0x0x7ff6d38c2660) 0
+
+Class QHelpContentItem
+ size=8 align=8
+ base size=8 base align=8
+QHelpContentItem (0x0x7ff6d38c2780) 0
+
+Class QHelpContentModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentModel::QPrivateSignal (0x0x7ff6d38c2840) 0 empty
+
+Vtable for QHelpContentModel
+QHelpContentModel::_ZTV17QHelpContentModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QHelpContentModel)
+16 (int (*)(...))QHelpContentModel::metaObject
+24 (int (*)(...))QHelpContentModel::qt_metacast
+32 (int (*)(...))QHelpContentModel::qt_metacall
+40 (int (*)(...))QHelpContentModel::~QHelpContentModel
+48 (int (*)(...))QHelpContentModel::~QHelpContentModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QHelpContentModel::index
+120 (int (*)(...))QHelpContentModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QHelpContentModel::rowCount
+144 (int (*)(...))QHelpContentModel::columnCount
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))QHelpContentModel::data
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractItemModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractItemModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QHelpContentModel
+ size=24 align=8
+ base size=24 base align=8
+QHelpContentModel (0x0x7ff6d386b888) 0
+ vptr=((& QHelpContentModel::_ZTV17QHelpContentModel) + 16)
+ QAbstractItemModel (0x0x7ff6d386b8f0) 0
+ primary-for QHelpContentModel (0x0x7ff6d386b888)
+ QObject (0x0x7ff6d38c27e0) 0
+ primary-for QAbstractItemModel (0x0x7ff6d386b8f0)
+
+Class QHelpContentWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentWidget::QPrivateSignal (0x0x7ff6d38c29c0) 0 empty
+
+Vtable for QHelpContentWidget
+QHelpContentWidget::_ZTV18QHelpContentWidget: 110 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QHelpContentWidget)
+16 (int (*)(...))QHelpContentWidget::metaObject
+24 (int (*)(...))QHelpContentWidget::qt_metacast
+32 (int (*)(...))QHelpContentWidget::qt_metacall
+40 (int (*)(...))QHelpContentWidget::~QHelpContentWidget
+48 (int (*)(...))QHelpContentWidget::~QHelpContentWidget
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeView::setModel
+480 (int (*)(...))QTreeView::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))-16
+808 (int (*)(...))(& _ZTI18QHelpContentWidget)
+816 (int (*)(...))QHelpContentWidget::_ZThn16_N18QHelpContentWidgetD1Ev
+824 (int (*)(...))QHelpContentWidget::_ZThn16_N18QHelpContentWidgetD0Ev
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHelpContentWidget
+ size=64 align=8
+ base size=64 base align=8
+QHelpContentWidget (0x0x7ff6d386b958) 0
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 16)
+ QTreeView (0x0x7ff6d386b9c0) 0
+ primary-for QHelpContentWidget (0x0x7ff6d386b958)
+ QAbstractItemView (0x0x7ff6d386ba28) 0
+ primary-for QTreeView (0x0x7ff6d386b9c0)
+ QAbstractScrollArea (0x0x7ff6d386ba90) 0
+ primary-for QAbstractItemView (0x0x7ff6d386ba28)
+ QFrame (0x0x7ff6d386baf8) 0
+ primary-for QAbstractScrollArea (0x0x7ff6d386ba90)
+ QWidget (0x0x7ff6d38a6b60) 0
+ primary-for QFrame (0x0x7ff6d386baf8)
+ QObject (0x0x7ff6d38c2900) 0
+ primary-for QWidget (0x0x7ff6d38a6b60)
+ QPaintDevice (0x0x7ff6d38c2960) 16
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 816)
+
+Class QHelpEngineCore::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngineCore::QPrivateSignal (0x0x7ff6d38c2ae0) 0 empty
+
+Vtable for QHelpEngineCore
+QHelpEngineCore::_ZTV15QHelpEngineCore: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QHelpEngineCore)
+16 (int (*)(...))QHelpEngineCore::metaObject
+24 (int (*)(...))QHelpEngineCore::qt_metacast
+32 (int (*)(...))QHelpEngineCore::qt_metacall
+40 (int (*)(...))QHelpEngineCore::~QHelpEngineCore
+48 (int (*)(...))QHelpEngineCore::~QHelpEngineCore
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QHelpEngineCore
+ size=24 align=8
+ base size=24 base align=8
+QHelpEngineCore (0x0x7ff6d386bb60) 0
+ vptr=((& QHelpEngineCore::_ZTV15QHelpEngineCore) + 16)
+ QObject (0x0x7ff6d38c2a80) 0
+ primary-for QHelpEngineCore (0x0x7ff6d386bb60)
+
+Class QHelpEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngine::QPrivateSignal (0x0x7ff6d38c2c00) 0 empty
+
+Vtable for QHelpEngine
+QHelpEngine::_ZTV11QHelpEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHelpEngine)
+16 (int (*)(...))QHelpEngine::metaObject
+24 (int (*)(...))QHelpEngine::qt_metacast
+32 (int (*)(...))QHelpEngine::qt_metacall
+40 (int (*)(...))QHelpEngine::~QHelpEngine
+48 (int (*)(...))QHelpEngine::~QHelpEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QHelpEngine
+ size=32 align=8
+ base size=32 base align=8
+QHelpEngine (0x0x7ff6d386bbc8) 0
+ vptr=((& QHelpEngine::_ZTV11QHelpEngine) + 16)
+ QHelpEngineCore (0x0x7ff6d386bc30) 0
+ primary-for QHelpEngine (0x0x7ff6d386bbc8)
+ QObject (0x0x7ff6d38c2ba0) 0
+ primary-for QHelpEngineCore (0x0x7ff6d386bc30)
+
+Class QHelpFilterData
+ size=8 align=8
+ base size=8 base align=8
+QHelpFilterData (0x0x7ff6d38c2cc0) 0
+
+Class QHelpFilterEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterEngine::QPrivateSignal (0x0x7ff6d38c2e40) 0 empty
+
+Vtable for QHelpFilterEngine
+QHelpFilterEngine::_ZTV17QHelpFilterEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QHelpFilterEngine)
+16 (int (*)(...))QHelpFilterEngine::metaObject
+24 (int (*)(...))QHelpFilterEngine::qt_metacast
+32 (int (*)(...))QHelpFilterEngine::qt_metacall
+40 (int (*)(...))QHelpFilterEngine::~QHelpFilterEngine
+48 (int (*)(...))QHelpFilterEngine::~QHelpFilterEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QHelpFilterEngine
+ size=24 align=8
+ base size=24 base align=8
+QHelpFilterEngine (0x0x7ff6d386bc98) 0
+ vptr=((& QHelpFilterEngine::_ZTV17QHelpFilterEngine) + 16)
+ QObject (0x0x7ff6d38c2de0) 0
+ primary-for QHelpFilterEngine (0x0x7ff6d386bc98)
+
+Class QHelpFilterSettingsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterSettingsWidget::QPrivateSignal (0x0x7ff6d3943000) 0 empty
+
+Vtable for QHelpFilterSettingsWidget
+QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QHelpFilterSettingsWidget)
+16 (int (*)(...))QHelpFilterSettingsWidget::metaObject
+24 (int (*)(...))QHelpFilterSettingsWidget::qt_metacast
+32 (int (*)(...))QHelpFilterSettingsWidget::qt_metacall
+40 (int (*)(...))QHelpFilterSettingsWidget::~QHelpFilterSettingsWidget
+48 (int (*)(...))QHelpFilterSettingsWidget::~QHelpFilterSettingsWidget
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI25QHelpFilterSettingsWidget)
+448 (int (*)(...))QHelpFilterSettingsWidget::_ZThn16_N25QHelpFilterSettingsWidgetD1Ev
+456 (int (*)(...))QHelpFilterSettingsWidget::_ZThn16_N25QHelpFilterSettingsWidgetD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHelpFilterSettingsWidget
+ size=48 align=8
+ base size=48 base align=8
+QHelpFilterSettingsWidget (0x0x7ff6d386bd00) 0
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 16)
+ QWidget (0x0x7ff6d38a6bd0) 0
+ primary-for QHelpFilterSettingsWidget (0x0x7ff6d386bd00)
+ QObject (0x0x7ff6d38c2f00) 0
+ primary-for QWidget (0x0x7ff6d38a6bd0)
+ QPaintDevice (0x0x7ff6d38c2f60) 16
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 448)
+
+Class QHelpIndexModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexModel::QPrivateSignal (0x0x7ff6d39432a0) 0 empty
+
+Vtable for QHelpIndexModel
+QHelpIndexModel::_ZTV15QHelpIndexModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QHelpIndexModel)
+16 (int (*)(...))QHelpIndexModel::metaObject
+24 (int (*)(...))QHelpIndexModel::qt_metacast
+32 (int (*)(...))QHelpIndexModel::qt_metacall
+40 (int (*)(...))QHelpIndexModel::~QHelpIndexModel
+48 (int (*)(...))QHelpIndexModel::~QHelpIndexModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QStringListModel::sibling
+136 (int (*)(...))QStringListModel::rowCount
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))QStringListModel::data
+168 (int (*)(...))QStringListModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QStringListModel::itemData
+200 (int (*)(...))QStringListModel::setItemData
+208 (int (*)(...))QStringListModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QStringListModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStringListModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QStringListModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QStringListModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStringListModel::flags
+336 (int (*)(...))QStringListModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QHelpIndexModel
+ size=48 align=8
+ base size=48 base align=8
+QHelpIndexModel (0x0x7ff6d386bd68) 0
+ vptr=((& QHelpIndexModel::_ZTV15QHelpIndexModel) + 16)
+ QStringListModel (0x0x7ff6d386bdd0) 0
+ primary-for QHelpIndexModel (0x0x7ff6d386bd68)
+ QAbstractListModel (0x0x7ff6d386be38) 0
+ primary-for QStringListModel (0x0x7ff6d386bdd0)
+ QAbstractItemModel (0x0x7ff6d386bea0) 0
+ primary-for QAbstractListModel (0x0x7ff6d386be38)
+ QObject (0x0x7ff6d3943240) 0
+ primary-for QAbstractItemModel (0x0x7ff6d386bea0)
+
+Class QHelpIndexWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexWidget::QPrivateSignal (0x0x7ff6d3943420) 0 empty
+
+Vtable for QHelpIndexWidget
+QHelpIndexWidget::_ZTV16QHelpIndexWidget: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QHelpIndexWidget)
+16 (int (*)(...))QHelpIndexWidget::metaObject
+24 (int (*)(...))QHelpIndexWidget::qt_metacast
+32 (int (*)(...))QHelpIndexWidget::qt_metacall
+40 (int (*)(...))QHelpIndexWidget::~QHelpIndexWidget
+48 (int (*)(...))QHelpIndexWidget::~QHelpIndexWidget
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI16QHelpIndexWidget)
+800 (int (*)(...))QHelpIndexWidget::_ZThn16_N16QHelpIndexWidgetD1Ev
+808 (int (*)(...))QHelpIndexWidget::_ZThn16_N16QHelpIndexWidgetD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHelpIndexWidget
+ size=40 align=8
+ base size=40 base align=8
+QHelpIndexWidget (0x0x7ff6d386bf08) 0
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 16)
+ QListView (0x0x7ff6d386bf70) 0
+ primary-for QHelpIndexWidget (0x0x7ff6d386bf08)
+ QAbstractItemView (0x0x7ff6d395b000) 0
+ primary-for QListView (0x0x7ff6d386bf70)
+ QAbstractScrollArea (0x0x7ff6d395b068) 0
+ primary-for QAbstractItemView (0x0x7ff6d395b000)
+ QFrame (0x0x7ff6d395b0d0) 0
+ primary-for QAbstractScrollArea (0x0x7ff6d395b068)
+ QWidget (0x0x7ff6d38a6c40) 0
+ primary-for QFrame (0x0x7ff6d395b0d0)
+ QObject (0x0x7ff6d3943360) 0
+ primary-for QWidget (0x0x7ff6d38a6c40)
+ QPaintDevice (0x0x7ff6d39433c0) 16
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 800)
+
+Class QHelpLink
+ size=32 align=8
+ base size=32 base align=8
+QHelpLink (0x0x7ff6d39434e0) 0
+
+Class QHelpSearchQuery
+ size=32 align=8
+ base size=32 base align=8
+QHelpSearchQuery (0x0x7ff6d3943540) 0
+
+Class QHelpSearchResult
+ size=8 align=8
+ base size=8 base align=8
+QHelpSearchResult (0x0x7ff6d3943e40) 0
+
+Class QHelpSearchEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchEngine::QPrivateSignal (0x0x7ff6d3943f60) 0 empty
+
+Vtable for QHelpSearchEngine
+QHelpSearchEngine::_ZTV17QHelpSearchEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QHelpSearchEngine)
+16 (int (*)(...))QHelpSearchEngine::metaObject
+24 (int (*)(...))QHelpSearchEngine::qt_metacast
+32 (int (*)(...))QHelpSearchEngine::qt_metacall
+40 (int (*)(...))QHelpSearchEngine::~QHelpSearchEngine
+48 (int (*)(...))QHelpSearchEngine::~QHelpSearchEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QHelpSearchEngine
+ size=24 align=8
+ base size=24 base align=8
+QHelpSearchEngine (0x0x7ff6d395b410) 0
+ vptr=((& QHelpSearchEngine::_ZTV17QHelpSearchEngine) + 16)
+ QObject (0x0x7ff6d3943f00) 0
+ primary-for QHelpSearchEngine (0x0x7ff6d395b410)
+
+Class QHelpSearchQueryWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchQueryWidget::QPrivateSignal (0x0x7ff6d398d120) 0 empty
+
+Vtable for QHelpSearchQueryWidget
+QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QHelpSearchQueryWidget)
+16 (int (*)(...))QHelpSearchQueryWidget::metaObject
+24 (int (*)(...))QHelpSearchQueryWidget::qt_metacast
+32 (int (*)(...))QHelpSearchQueryWidget::qt_metacall
+40 (int (*)(...))QHelpSearchQueryWidget::~QHelpSearchQueryWidget
+48 (int (*)(...))QHelpSearchQueryWidget::~QHelpSearchQueryWidget
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QHelpSearchQueryWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QHelpSearchQueryWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI22QHelpSearchQueryWidget)
+448 (int (*)(...))QHelpSearchQueryWidget::_ZThn16_N22QHelpSearchQueryWidgetD1Ev
+456 (int (*)(...))QHelpSearchQueryWidget::_ZThn16_N22QHelpSearchQueryWidgetD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHelpSearchQueryWidget
+ size=48 align=8
+ base size=48 base align=8
+QHelpSearchQueryWidget (0x0x7ff6d395b478) 0
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 16)
+ QWidget (0x0x7ff6d3967070) 0
+ primary-for QHelpSearchQueryWidget (0x0x7ff6d395b478)
+ QObject (0x0x7ff6d398d060) 0
+ primary-for QWidget (0x0x7ff6d3967070)
+ QPaintDevice (0x0x7ff6d398d0c0) 16
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 448)
+
+Class QHelpSearchResultWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchResultWidget::QPrivateSignal (0x0x7ff6d398d2a0) 0 empty
+
+Vtable for QHelpSearchResultWidget
+QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QHelpSearchResultWidget)
+16 (int (*)(...))QHelpSearchResultWidget::metaObject
+24 (int (*)(...))QHelpSearchResultWidget::qt_metacast
+32 (int (*)(...))QHelpSearchResultWidget::qt_metacall
+40 (int (*)(...))QHelpSearchResultWidget::~QHelpSearchResultWidget
+48 (int (*)(...))QHelpSearchResultWidget::~QHelpSearchResultWidget
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QHelpSearchResultWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI23QHelpSearchResultWidget)
+448 (int (*)(...))QHelpSearchResultWidget::_ZThn16_N23QHelpSearchResultWidgetD1Ev
+456 (int (*)(...))QHelpSearchResultWidget::_ZThn16_N23QHelpSearchResultWidgetD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHelpSearchResultWidget
+ size=48 align=8
+ base size=48 base align=8
+QHelpSearchResultWidget (0x0x7ff6d395b4e0) 0
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 16)
+ QWidget (0x0x7ff6d39670e0) 0
+ primary-for QHelpSearchResultWidget (0x0x7ff6d395b4e0)
+ QObject (0x0x7ff6d398d1e0) 0
+ primary-for QWidget (0x0x7ff6d39670e0)
+ QPaintDevice (0x0x7ff6d398d240) 16
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 448)
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7ff6d39a4720) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7ff6d39a4a80) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7ff6d39a4cc0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7ff6d39b9000) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7ff6d39b91e0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7ff6d39b9540) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7ff6d39b96c0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7ff6d39b9a20) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7ff6d39b9c00) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7ff6d39b9f60) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7ff6d39d8180) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7ff6d39d84e0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7ff6d39d86c0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7ff6d39d8a20) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7ff6d39d8c00) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7ff6d39d8f60) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7ff6d3a11840) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7ff6d3a11ba0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7ff6d3a11d20) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7ff6d3a290c0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7ff6d3a29240) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7ff6d3a295a0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7ff6d3a29720) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7ff6d3a29a80) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7ff6d3a29c00) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7ff6d3a29f60) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7ff6d3a45120) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7ff6d3a45480) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7ff6d3a45600) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7ff6d3a45960) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7ff6d3a45ae0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7ff6d3a45e40) 0 empty
+
diff --git a/tests/auto/bic/data/QtHelp.6.1.0.linux-gcc-amd64.txt b/tests/auto/bic/data/QtHelp.6.1.0.linux-gcc-amd64.txt
new file mode 100644
index 000000000..f215ac85e
--- /dev/null
+++ b/tests/auto/bic/data/QtHelp.6.1.0.linux-gcc-amd64.txt
@@ -0,0 +1,20259 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f5f663e32a0) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f5f66433a80) 0 empty
+
+Class std::__do_is_nt_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_nt_destructible_impl (0x0x7f5f66433cc0) 0 empty
+
+Class std::__do_is_implicitly_default_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_implicitly_default_constructible_impl (0x0x7f5f66463de0) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7f5f664be600) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f5f6673a420) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7f5f6673a4e0) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7f5f6673a9c0) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7f5f6673aa20) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7f5f6673aa80) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7f5f6673aae0) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7f5f6673ab40) 0 empty
+
+Class std::__result_of_memfun_ref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memfun_ref_impl (0x0x7f5f6673ac00) 0 empty
+
+Class std::__result_of_memfun_deref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memfun_deref_impl (0x0x7f5f6673acc0) 0 empty
+
+Class std::__result_of_memobj_ref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memobj_ref_impl (0x0x7f5f6673ad80) 0 empty
+
+Class std::__result_of_memobj_deref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memobj_deref_impl (0x0x7f5f6673ae40) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f5f667701e0) 0 empty
+
+Class std::__swappable_details::__do_is_swappable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_details::__do_is_swappable_impl (0x0x7f5f66770540) 0 empty
+
+Class std::__swappable_details::__do_is_nothrow_swappable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_details::__do_is_nothrow_swappable_impl (0x0x7f5f667705a0) 0 empty
+
+Class std::__swappable_with_details::__do_is_swappable_with_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_with_details::__do_is_swappable_with_impl (0x0x7f5f66770840) 0 empty
+
+Class std::__swappable_with_details::__do_is_nothrow_swappable_with_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_with_details::__do_is_nothrow_swappable_with_impl (0x0x7f5f667708a0) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuch (0x0x7f5f667bb120) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f5f668046c0) 0 empty
+
+Class std::__nonesuch_no_braces
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch_no_braces (0x0x7f5f667ac888) 0 empty
+ std::__nonesuch (0x0x7f5f66804ba0) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7f5f66886900) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f5f66886ba0) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f5f66886c00) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f5f668e6960) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f5f668e69c0) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f5f667acdd0) 0 empty
+ std::input_iterator_tag (0x0x7f5f668e6a20) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f5f667ace38) 0 empty
+ std::forward_iterator_tag (0x0x7f5f667acea0) 0 empty
+ std::input_iterator_tag (0x0x7f5f668e6a80) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f5f667acf08) 0 empty
+ std::bidirectional_iterator_tag (0x0x7f5f667acf70) 0 empty
+ std::forward_iterator_tag (0x0x7f5f66907000) 0 empty
+ std::input_iterator_tag (0x0x7f5f668e6ae0) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_iter (0x0x7f5f6659d7e0) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_less_val
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_val (0x0x7f5f6659d900) 0 empty
+
+Class __gnu_cxx::__ops::_Val_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Val_less_iter (0x0x7f5f6659dc00) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_equal_to_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_equal_to_iter (0x0x7f5f6659df00) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_equal_to_val
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_equal_to_val (0x0x7f5f665d1060) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f5f6665b840) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f5f6665bba0) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f5f6665bc00) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f5f6665bcc0) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7f5f6665bd20) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7f5f6665bd80) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7f5f6665bde0) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7f5f6665be40) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f5f66699120) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f5f666993c0) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f5f66699420) 0
+
+Vtable for std::exception
+std::exception::_ZTVSt9exception: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9exception)
+16 (int (*)(...))std::exception::~exception
+24 (int (*)(...))std::exception::~exception
+32 (int (*)(...))std::exception::what
+
+Class std::exception
+ size=8 align=8
+ base size=8 base align=8
+std::exception (0x0x7f5f6594f1e0) 0 nearly-empty
+ vptr=((& std::exception::_ZTVSt9exception) + 16)
+
+Vtable for std::bad_exception
+std::bad_exception::_ZTVSt13bad_exception: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13bad_exception)
+16 (int (*)(...))std::bad_exception::~bad_exception
+24 (int (*)(...))std::bad_exception::~bad_exception
+32 (int (*)(...))std::bad_exception::what
+
+Class std::bad_exception
+ size=8 align=8
+ base size=8 base align=8
+std::bad_exception (0x0x7f5f669073a8) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+ std::exception (0x0x7f5f6594f3c0) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f5f669073a8)
+
+Vtable for std::type_info
+std::type_info::_ZTVSt9type_info: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9type_info)
+16 (int (*)(...))std::type_info::~type_info
+24 (int (*)(...))std::type_info::~type_info
+32 (int (*)(...))std::type_info::__is_pointer_p
+40 (int (*)(...))std::type_info::__is_function_p
+48 (int (*)(...))std::type_info::__do_catch
+56 (int (*)(...))std::type_info::__do_upcast
+
+Class std::type_info
+ size=16 align=8
+ base size=16 base align=8
+std::type_info (0x0x7f5f6594f5a0) 0
+ vptr=((& std::type_info::_ZTVSt9type_info) + 16)
+
+Vtable for std::bad_cast
+std::bad_cast::_ZTVSt8bad_cast: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt8bad_cast)
+16 (int (*)(...))std::bad_cast::~bad_cast
+24 (int (*)(...))std::bad_cast::~bad_cast
+32 (int (*)(...))std::bad_cast::what
+
+Class std::bad_cast
+ size=8 align=8
+ base size=8 base align=8
+std::bad_cast (0x0x7f5f66907410) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+ std::exception (0x0x7f5f6594f960) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f5f66907410)
+
+Vtable for std::bad_typeid
+std::bad_typeid::_ZTVSt10bad_typeid: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt10bad_typeid)
+16 (int (*)(...))std::bad_typeid::~bad_typeid
+24 (int (*)(...))std::bad_typeid::~bad_typeid
+32 (int (*)(...))std::bad_typeid::what
+
+Class std::bad_typeid
+ size=8 align=8
+ base size=8 base align=8
+std::bad_typeid (0x0x7f5f66907478) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+ std::exception (0x0x7f5f6594fb40) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f5f66907478)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f5f6594fd20) 0
+
+Vtable for std::nested_exception
+std::nested_exception::_ZTVSt16nested_exception: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt16nested_exception)
+16 (int (*)(...))std::nested_exception::~nested_exception
+24 (int (*)(...))std::nested_exception::~nested_exception
+
+Class std::nested_exception
+ size=16 align=8
+ base size=16 base align=8
+std::nested_exception (0x0x7f5f6598a2a0) 0
+ vptr=((& std::nested_exception::_ZTVSt16nested_exception) + 16)
+
+Vtable for std::bad_alloc
+std::bad_alloc::_ZTVSt9bad_alloc: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9bad_alloc)
+16 (int (*)(...))std::bad_alloc::~bad_alloc
+24 (int (*)(...))std::bad_alloc::~bad_alloc
+32 (int (*)(...))std::bad_alloc::what
+
+Class std::bad_alloc
+ size=8 align=8
+ base size=8 base align=8
+std::bad_alloc (0x0x7f5f669074e0) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+ std::exception (0x0x7f5f6598a960) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f5f669074e0)
+
+Vtable for std::bad_array_new_length
+std::bad_array_new_length::_ZTVSt20bad_array_new_length: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt20bad_array_new_length)
+16 (int (*)(...))std::bad_array_new_length::~bad_array_new_length
+24 (int (*)(...))std::bad_array_new_length::~bad_array_new_length
+32 (int (*)(...))std::bad_array_new_length::what
+
+Class std::bad_array_new_length
+ size=8 align=8
+ base size=8 base align=8
+std::bad_array_new_length (0x0x7f5f66907548) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+ std::bad_alloc (0x0x7f5f669075b0) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f5f66907548)
+ std::exception (0x0x7f5f6598ab40) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f5f669075b0)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f5f6598ad20) 0 empty
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7f5f6598af60) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f5f65a40720) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f5f6561eae0) 0
+
+Vtable for __cxxabiv1::__forced_unwind
+__cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN10__cxxabiv115__forced_unwindE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class __cxxabiv1::__forced_unwind
+ size=8 align=8
+ base size=8 base align=8
+__cxxabiv1::__forced_unwind (0x0x7f5f6561eba0) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f5f65691a80) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f5f65691b40) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f5f65691ba0) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f5f65691c00) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f5f65691c60) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f5f65691d80) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f5f65691de0) 0
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f5f65354480) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f5f65354600) 0 empty
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7f5f65178480) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7f5f651784e0) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f5f65178540) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7f5f651785a0) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f5f64d8fd20) 0
+
+Vtable for std::logic_error
+std::logic_error::_ZTVSt11logic_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt11logic_error)
+16 (int (*)(...))std::logic_error::~logic_error
+24 (int (*)(...))std::logic_error::~logic_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::logic_error
+ size=16 align=8
+ base size=16 base align=8
+std::logic_error (0x0x7f5f64dc0548) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+ std::exception (0x0x7f5f64d8fde0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f5f64dc0548)
+
+Vtable for std::domain_error
+std::domain_error::_ZTVSt12domain_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12domain_error)
+16 (int (*)(...))std::domain_error::~domain_error
+24 (int (*)(...))std::domain_error::~domain_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::domain_error
+ size=16 align=8
+ base size=16 base align=8
+std::domain_error (0x0x7f5f64dc05b0) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+ std::logic_error (0x0x7f5f64dc0618) 0
+ primary-for std::domain_error (0x0x7f5f64dc05b0)
+ std::exception (0x0x7f5f64d8fe40) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f5f64dc0618)
+
+Vtable for std::invalid_argument
+std::invalid_argument::_ZTVSt16invalid_argument: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt16invalid_argument)
+16 (int (*)(...))std::invalid_argument::~invalid_argument
+24 (int (*)(...))std::invalid_argument::~invalid_argument
+32 (int (*)(...))std::logic_error::what
+
+Class std::invalid_argument
+ size=16 align=8
+ base size=16 base align=8
+std::invalid_argument (0x0x7f5f64dc0680) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+ std::logic_error (0x0x7f5f64dc06e8) 0
+ primary-for std::invalid_argument (0x0x7f5f64dc0680)
+ std::exception (0x0x7f5f64d8fea0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f5f64dc06e8)
+
+Vtable for std::length_error
+std::length_error::_ZTVSt12length_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12length_error)
+16 (int (*)(...))std::length_error::~length_error
+24 (int (*)(...))std::length_error::~length_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::length_error
+ size=16 align=8
+ base size=16 base align=8
+std::length_error (0x0x7f5f64dc0750) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+ std::logic_error (0x0x7f5f64dc07b8) 0
+ primary-for std::length_error (0x0x7f5f64dc0750)
+ std::exception (0x0x7f5f64d8ff00) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f5f64dc07b8)
+
+Vtable for std::out_of_range
+std::out_of_range::_ZTVSt12out_of_range: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12out_of_range)
+16 (int (*)(...))std::out_of_range::~out_of_range
+24 (int (*)(...))std::out_of_range::~out_of_range
+32 (int (*)(...))std::logic_error::what
+
+Class std::out_of_range
+ size=16 align=8
+ base size=16 base align=8
+std::out_of_range (0x0x7f5f64dc0820) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+ std::logic_error (0x0x7f5f64dc0888) 0
+ primary-for std::out_of_range (0x0x7f5f64dc0820)
+ std::exception (0x0x7f5f64d8ff60) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f5f64dc0888)
+
+Vtable for std::runtime_error
+std::runtime_error::_ZTVSt13runtime_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13runtime_error)
+16 (int (*)(...))std::runtime_error::~runtime_error
+24 (int (*)(...))std::runtime_error::~runtime_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::runtime_error
+ size=16 align=8
+ base size=16 base align=8
+std::runtime_error (0x0x7f5f64dc08f0) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+ std::exception (0x0x7f5f64df3000) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f5f64dc08f0)
+
+Vtable for std::range_error
+std::range_error::_ZTVSt11range_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt11range_error)
+16 (int (*)(...))std::range_error::~range_error
+24 (int (*)(...))std::range_error::~range_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::range_error
+ size=16 align=8
+ base size=16 base align=8
+std::range_error (0x0x7f5f64dc0958) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+ std::runtime_error (0x0x7f5f64dc09c0) 0
+ primary-for std::range_error (0x0x7f5f64dc0958)
+ std::exception (0x0x7f5f64df3060) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f5f64dc09c0)
+
+Vtable for std::overflow_error
+std::overflow_error::_ZTVSt14overflow_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt14overflow_error)
+16 (int (*)(...))std::overflow_error::~overflow_error
+24 (int (*)(...))std::overflow_error::~overflow_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::overflow_error
+ size=16 align=8
+ base size=16 base align=8
+std::overflow_error (0x0x7f5f64dc0a28) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+ std::runtime_error (0x0x7f5f64dc0a90) 0
+ primary-for std::overflow_error (0x0x7f5f64dc0a28)
+ std::exception (0x0x7f5f64df30c0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f5f64dc0a90)
+
+Vtable for std::underflow_error
+std::underflow_error::_ZTVSt15underflow_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt15underflow_error)
+16 (int (*)(...))std::underflow_error::~underflow_error
+24 (int (*)(...))std::underflow_error::~underflow_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::underflow_error
+ size=16 align=8
+ base size=16 base align=8
+std::underflow_error (0x0x7f5f64dc0af8) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+ std::runtime_error (0x0x7f5f64dc0b60) 0
+ primary-for std::underflow_error (0x0x7f5f64dc0af8)
+ std::exception (0x0x7f5f64df3120) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f5f64dc0b60)
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7f5f64e30420) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f5f64e30480) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f5f64e30600) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f5f64e306c0) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f5f64dc0dd0) 0
+ std::__uses_alloc_base (0x0x7f5f64e30660) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f5f64ba7cc0) 0 empty
+
+Vtable for std::bad_function_call
+std::bad_function_call::_ZTVSt17bad_function_call: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt17bad_function_call)
+16 (int (*)(...))std::bad_function_call::~bad_function_call
+24 (int (*)(...))std::bad_function_call::~bad_function_call
+32 (int (*)(...))std::bad_function_call::what
+
+Class std::bad_function_call
+ size=8 align=8
+ base size=8 base align=8
+std::bad_function_call (0x0x7f5f64c6f208) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+ std::exception (0x0x7f5f64c7a3c0) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f5f64c6f208)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f5f64c7a480) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f5f64c7a4e0) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f5f64c7a7e0) 0
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7f5f6494d660) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7f5f6494d720) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7f5f6494dc00) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7f5f64977a80) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7f5f64977b40) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7f5f64977ba0) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7f5f64977f60) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7f5f6499a0c0) 0
+
+Class std::__detail::_Equality_base
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Equality_base (0x0x7f5f6478b180) 0 empty
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7f5f6478ba20) 0 empty
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7f5f647cb420) 0 empty
+
+Vtable for std::bad_optional_access
+std::bad_optional_access::_ZTVSt19bad_optional_access: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt19bad_optional_access)
+16 (int (*)(...))std::bad_optional_access::~bad_optional_access
+24 (int (*)(...))std::bad_optional_access::~bad_optional_access
+32 (int (*)(...))std::bad_optional_access::what
+
+Class std::bad_optional_access
+ size=8 align=8
+ base size=8 base align=8
+std::bad_optional_access (0x0x7f5f6479e138) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+ std::exception (0x0x7f5f647cb660) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7f5f6479e138)
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f5f64298000) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f5f6415fc30) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f5f64298780) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f5f6415fd00) 0
+ std::_Bit_iterator_base (0x0x7f5f6415fd68) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f5f64298d20) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f5f6415fe38) 0
+ std::_Bit_iterator_base (0x0x7f5f6415fea0) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f5f642ce540) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7f5f640aaa20) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7f5f640aaba0) 0 empty
+
+Class __pstl::execution::v1::parallel_unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_unsequenced_policy (0x0x7f5f640aad20) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7f5f640aaea0) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7f5f63ddc9c0) 0 empty
+
+Class std::__detail::__variant::__variant_idx_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_idx_cookie (0x0x7f5f63ddca20) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7f5f63eb24e0) 0 empty
+
+Vtable for std::bad_variant_access
+std::bad_variant_access::_ZTVSt18bad_variant_access: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt18bad_variant_access)
+16 (int (*)(...))std::bad_variant_access::~bad_variant_access
+24 (int (*)(...))std::bad_variant_access::~bad_variant_access
+32 (int (*)(...))std::bad_variant_access::what
+
+Class std::bad_variant_access
+ size=16 align=8
+ base size=16 base align=8
+std::bad_variant_access (0x0x7f5f63e7f270) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+ std::exception (0x0x7f5f63ee2a20) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7f5f63e7f270)
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f5f63ba2420) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f5f63ba2480) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f5f63ba2720) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f5f63ba2f60) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f5f63c12060) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f5f63c8de40) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f5f63c3d4e0) 0
+ std::__atomic_flag_base (0x0x7f5f63c8dea0) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f5f6381a7b8) 0
+ QAtomicInteger<int> (0x0x7f5f6381a820) 0
+ QBasicAtomicInteger<int> (0x0x7f5f6380bd80) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f5f62fd0060) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7f5f62fd00c0) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f5f630933c0) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7f5f63093ae0) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f5f63093b40) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f5f63012c30) 0
+ QGenericArgument (0x0x7f5f63093de0) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7f5f630c9300) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7f5f630c9360) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7f5f630c92a0) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f5f630c9cc0) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f5f62d41720) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f5f62d6a120) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f5f62e23c00) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7f5f62e23f60) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f5f62ed1960) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f5f62ed1a80) 0
+
+Vtable for std::locale::facet
+std::locale::facet::_ZTVNSt6locale5facetE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6locale5facetE)
+16 (int (*)(...))std::locale::facet::~facet
+24 (int (*)(...))std::locale::facet::~facet
+
+Class std::locale::facet
+ size=16 align=8
+ base size=12 base align=8
+std::locale::facet (0x0x7f5f62ed1e40) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f5f62f16120) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f5f62f16300) 0
+
+Vtable for std::_V2::error_category
+std::_V2::error_category::_ZTVNSt3_V214error_categoryE: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt3_V214error_categoryE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))std::_V2::error_category::_M_message
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))std::_V2::error_category::default_error_condition
+64 (int (*)(...))std::_V2::error_category::equivalent
+72 (int (*)(...))std::_V2::error_category::equivalent
+
+Class std::_V2::error_category
+ size=8 align=8
+ base size=8 base align=8
+std::_V2::error_category (0x0x7f5f62b62420) 0 nearly-empty
+ vptr=((& std::_V2::error_category::_ZTVNSt3_V214error_categoryE) + 16)
+
+Class std::error_code
+ size=16 align=8
+ base size=16 base align=8
+std::error_code (0x0x7f5f62b62780) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f5f62b62f60) 0
+
+Vtable for std::system_error
+std::system_error::_ZTVSt12system_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12system_error)
+16 (int (*)(...))std::system_error::~system_error
+24 (int (*)(...))std::system_error::~system_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::system_error
+ size=32 align=8
+ base size=32 base align=8
+std::system_error (0x0x7f5f62bb6138) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+ std::runtime_error (0x0x7f5f62bb61a0) 0
+ primary-for std::system_error (0x0x7f5f62bb6138)
+ std::exception (0x0x7f5f62ba5b40) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f5f62bb61a0)
+
+Vtable for std::ios_base::failure
+std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt8ios_base7failureB5cxx11E)
+16 (int (*)(...))std::ios_base::failure::~failure
+24 (int (*)(...))std::ios_base::failure::~failure
+32 (int (*)(...))std::ios_base::failure::what
+
+Class std::ios_base::failure
+ size=32 align=8
+ base size=32 base align=8
+std::ios_base::failure (0x0x7f5f62bb64e0) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+ std::system_error (0x0x7f5f62bb6548) 0
+ primary-for std::ios_base::failure (0x0x7f5f62bb64e0)
+ std::runtime_error (0x0x7f5f62bb65b0) 0
+ primary-for std::system_error (0x0x7f5f62bb6548)
+ std::exception (0x0x7f5f62c01300) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f5f62bb65b0)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f5f62c01360) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f5f62c013c0) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f5f62c01420) 0 empty
+
+Vtable for std::ios_base
+std::ios_base::_ZTVSt8ios_base: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt8ios_base)
+16 (int (*)(...))std::ios_base::~ios_base
+24 (int (*)(...))std::ios_base::~ios_base
+
+Class std::ios_base
+ size=216 align=8
+ base size=216 base align=8
+std::ios_base (0x0x7f5f62c012a0) 0
+ vptr=((& std::ios_base::_ZTVSt8ios_base) + 16)
+
+Class std::ctype_base
+ size=1 align=1
+ base size=0 base align=1
+std::ctype_base (0x0x7f5f62cd6060) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7f5f6298e360) 0 empty
+
+VTT for std::basic_ostream<char>
+std::basic_ostream<char>::_ZTTSo: 2 entries
+0 ((& std::basic_ostream<char>::_ZTVSo) + 24)
+8 ((& std::basic_ostream<char>::_ZTVSo) + 64)
+
+VTT for std::basic_ostream<wchar_t>
+std::basic_ostream<wchar_t>::_ZTTSt13basic_ostreamIwSt11char_traitsIwEE: 2 entries
+0 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 64)
+
+VTT for std::basic_istream<char>
+std::basic_istream<char>::_ZTTSi: 2 entries
+0 ((& std::basic_istream<char>::_ZTVSi) + 24)
+8 ((& std::basic_istream<char>::_ZTVSi) + 64)
+
+VTT for std::basic_istream<wchar_t>
+std::basic_istream<wchar_t>::_ZTTSt13basic_istreamIwSt11char_traitsIwEE: 2 entries
+0 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 64)
+
+Construction vtable for std::basic_istream<char> (0x0x7f5f62905138 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd0_Si: 10 entries
+0 24
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISi)
+24 0
+32 0
+40 18446744073709551592
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISi)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<char> (0x0x7f5f62905208 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd16_So: 10 entries
+0 8
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISo)
+24 0
+32 0
+40 18446744073709551608
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISo)
+64 0
+72 0
+
+VTT for std::basic_iostream<char>
+std::basic_iostream<char>::_ZTTSd: 7 entries
+0 ((& std::basic_iostream<char>::_ZTVSd) + 24)
+8 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 24)
+16 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 64)
+24 ((& std::basic_iostream<char>::_ZTCSd16_So) + 24)
+32 ((& std::basic_iostream<char>::_ZTCSd16_So) + 64)
+40 ((& std::basic_iostream<char>::_ZTVSd) + 104)
+48 ((& std::basic_iostream<char>::_ZTVSd) + 64)
+
+Construction vtable for std::basic_istream<wchar_t> (0x0x7f5f62905750 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E: 10 entries
+0 24
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551592
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<wchar_t> (0x0x7f5f62905820 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E: 10 entries
+0 8
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551608
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+VTT for std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTTSt14basic_iostreamIwSt11char_traitsIwEE: 7 entries
+0 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 24)
+16 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 64)
+24 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 24)
+32 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 64)
+40 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 104)
+48 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 64)
+
+Vtable for __gnu_cxx::__concurrence_lock_error
+__gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx24__concurrence_lock_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error
+24 (int (*)(...))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error
+32 (int (*)(...))__gnu_cxx::__concurrence_lock_error::what
+
+Class __gnu_cxx::__concurrence_lock_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_lock_error (0x0x7f5f62905dd0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+ std::exception (0x0x7f5f6252cd20) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f5f62905dd0)
+
+Vtable for __gnu_cxx::__concurrence_unlock_error
+__gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx26__concurrence_unlock_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error
+24 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error
+32 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::what
+
+Class __gnu_cxx::__concurrence_unlock_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_unlock_error (0x0x7f5f62905e38) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+ std::exception (0x0x7f5f6252ce40) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f5f62905e38)
+
+Vtable for __gnu_cxx::__concurrence_broadcast_error
+__gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx29__concurrence_broadcast_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::~__concurrence_broadcast_error
+24 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::~__concurrence_broadcast_error
+32 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::what
+
+Class __gnu_cxx::__concurrence_broadcast_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_broadcast_error (0x0x7f5f62905ea0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+ std::exception (0x0x7f5f6252cf60) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f5f62905ea0)
+
+Vtable for __gnu_cxx::__concurrence_wait_error
+__gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx24__concurrence_wait_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_wait_error::~__concurrence_wait_error
+24 (int (*)(...))__gnu_cxx::__concurrence_wait_error::~__concurrence_wait_error
+32 (int (*)(...))__gnu_cxx::__concurrence_wait_error::what
+
+Class __gnu_cxx::__concurrence_wait_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_wait_error (0x0x7f5f62905f70) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+ std::exception (0x0x7f5f625680c0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f5f62905f70)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f5f62568960) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f5f62568cc0) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f5f625689c0) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f5f62594300) 0
+
+Vtable for std::bad_weak_ptr
+std::bad_weak_ptr::_ZTVSt12bad_weak_ptr: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12bad_weak_ptr)
+16 (int (*)(...))std::bad_weak_ptr::~bad_weak_ptr
+24 (int (*)(...))std::bad_weak_ptr::~bad_weak_ptr
+32 (int (*)(...))std::bad_weak_ptr::what
+
+Class std::bad_weak_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::bad_weak_ptr (0x0x7f5f629053a8) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+ std::exception (0x0x7f5f62615ae0) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f5f629053a8)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f5f626858a0) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7f5f62685de0) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f5f623c0c00) 0
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7f5f62140300) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7f5f62229cc0) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7f5f62070f60) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f5f620fab40) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7f5f61e649c0) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7f5f61e64de0) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7f5f61e64e40) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7f5f61f07000) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7f5f61be5600) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7f5f61be55a0) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f5f61c2f600) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7f5f6199c780) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7f5f6159ab40) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7f5f61599d68) 0
+ QtPrivate::ArgBase (0x0x7f5f6159aba0) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7f5f61599e38) 0
+ QtPrivate::ArgBase (0x0x7f5f6159ade0) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f5f61649240) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f5f61649300) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7f5f6144d7e0) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f5f614e7960) 0 empty
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7f5f61514720) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7f5f61514960) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7f5f611a6a80) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f5f616cda28) 0
+ QIODeviceBase (0x0x7f5f611a6ae0) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f5f611a6c60) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f5f612b30c0) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7f5f61274208) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f5f612b3180) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7f5f612742d8) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f5f612b3240) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7f5f60f56d20) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7f5f61274680) 0
+ QMetaContainer (0x0x7f5f60f56f00) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7f5f612746e8) 0
+ QMetaContainer (0x0x7f5f60f76300) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f5f61074660) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7f5f6100c750) 0
+ std::__detail::_List_node_base (0x0x7f5f610746c0) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f5f60d4a780) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7f5f60d4aae0) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7f5f60bd8120) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f5f60c31780) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7f5f60746600) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7f5f60746660) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f5f60651d20) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7f5f606850c0) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7f5f606de120) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7f5f606de240) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7f5f6032f8a0) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7f5f6032f840) 0 empty
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7f5f6032f900) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7f5f6032fd80) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7f5f6032fde0) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7f5f60358420) 0
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7f5f60358b40) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7f5f60358e40) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7f5f60358f60) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7f5f603a31e0) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7f5f60339820) 0
+ QPropertyObserverBase (0x0x7f5f603a3360) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7f5f603f12a0) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7f5f60410420) 0
+
+Class QBindingStatus
+ size=16 align=8
+ base size=16 base align=8
+QBindingStatus (0x0x7f5f6043f840) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7f5f6043f8a0) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f5f6014a540) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f5f601fe2a0) 0 empty
+
+Vtable for QObjectData
+QObjectData::_ZTV11QObjectData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QObjectData)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+
+Class QObjectData
+ size=80 align=8
+ base size=80 base align=8
+QObjectData (0x0x7f5f6024bc00) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f5f602ec5a0) 0 empty
+
+Vtable for QObject
+QObject::_ZTV7QObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QObject)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QObject::qt_metacall
+40 (int (*)(...))QObject::~QObject
+48 (int (*)(...))QObject::~QObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QObject
+ size=16 align=8
+ base size=16 base align=8
+QObject (0x0x7f5f602ec540) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f5f5ffa34e0) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f5f5ffa3d80) 0 empty
+
+Vtable for QAbstractAnimation
+QAbstractAnimation::_ZTV18QAbstractAnimation: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractAnimation)
+16 (int (*)(...))QAbstractAnimation::metaObject
+24 (int (*)(...))QAbstractAnimation::qt_metacast
+32 (int (*)(...))QAbstractAnimation::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAbstractAnimation
+ size=16 align=8
+ base size=16 base align=8
+QAbstractAnimation (0x0x7f5f602a8a90) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+ QObject (0x0x7f5f5ffa3d20) 0
+ primary-for QAbstractAnimation (0x0x7f5f602a8a90)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f5f5ffde120) 0 empty
+
+Vtable for QAnimationDriver
+QAnimationDriver::_ZTV16QAnimationDriver: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAnimationDriver)
+16 (int (*)(...))QAnimationDriver::metaObject
+24 (int (*)(...))QAnimationDriver::qt_metacast
+32 (int (*)(...))QAnimationDriver::qt_metacall
+40 (int (*)(...))QAnimationDriver::~QAnimationDriver
+48 (int (*)(...))QAnimationDriver::~QAnimationDriver
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAnimationDriver::advance
+120 (int (*)(...))QAnimationDriver::elapsed
+128 (int (*)(...))QAnimationDriver::start
+136 (int (*)(...))QAnimationDriver::stop
+
+Class QAnimationDriver
+ size=16 align=8
+ base size=16 base align=8
+QAnimationDriver (0x0x7f5f602a8af8) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+ QObject (0x0x7f5f5ffde0c0) 0
+ primary-for QAnimationDriver (0x0x7f5f602a8af8)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f5f5ffde300) 0 empty
+
+Vtable for QEventLoop
+QEventLoop::_ZTV10QEventLoop: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QEventLoop)
+16 (int (*)(...))QEventLoop::metaObject
+24 (int (*)(...))QEventLoop::qt_metacast
+32 (int (*)(...))QEventLoop::qt_metacall
+40 (int (*)(...))QEventLoop::~QEventLoop
+48 (int (*)(...))QEventLoop::~QEventLoop
+56 (int (*)(...))QEventLoop::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QEventLoop
+ size=16 align=8
+ base size=16 base align=8
+QEventLoop (0x0x7f5f602a8b60) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+ QObject (0x0x7f5f5ffde2a0) 0
+ primary-for QEventLoop (0x0x7f5f602a8b60)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f5f5ffde780) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f5f5ffde840) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f5f5ffde8a0) 0
+
+Vtable for QAbstractEventDispatcher
+QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractEventDispatcher)
+16 (int (*)(...))QAbstractEventDispatcher::metaObject
+24 (int (*)(...))QAbstractEventDispatcher::qt_metacast
+32 (int (*)(...))QAbstractEventDispatcher::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))QAbstractEventDispatcher::startingUp
+200 (int (*)(...))QAbstractEventDispatcher::closingDown
+
+Class QAbstractEventDispatcher
+ size=16 align=8
+ base size=16 base align=8
+QAbstractEventDispatcher (0x0x7f5f602a8d00) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+ QObject (0x0x7f5f5ffde7e0) 0
+ primary-for QAbstractEventDispatcher (0x0x7f5f602a8d00)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f5f60066060) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7f5f5ff0eea0) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7f5f5ff0ee40) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7f5f5fb35a20) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7f5f6005de38) 0
+ QStringConverterBase (0x0x7f5f5fb359c0) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7f5f6005dea0) 0
+ QStringConverter (0x0x7f5f6005df08) 0
+ QStringConverterBase (0x0x7f5f5fb84420) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7f5f6005df70) 0
+ QStringConverter (0x0x7f5f5fbb0000) 0
+ QStringConverterBase (0x0x7f5f5fba82a0) 0 empty
+
+Vtable for QTextStream
+QTextStream::_ZTV11QTextStream: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTextStream)
+16 (int (*)(...))QTextStream::~QTextStream
+24 (int (*)(...))QTextStream::~QTextStream
+
+Class QTextStream
+ size=16 align=8
+ base size=16 base align=8
+QTextStream (0x0x7f5f5fbb0068) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+ QIODeviceBase (0x0x7f5f5fba8f60) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f5f5fbf2660) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7f5f5fca3840) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f5f5fcf02a0) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f5f5fcf0420) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7f5f5f9a2600) 0 empty
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7f5f5f9c2600) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f5f5f978af8) 0
+ QIODeviceBase (0x0x7f5f5f9c25a0) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f5f5faeb540) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f5f5faeb600) 0 empty
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7f5f5f8c8060) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7f5f5f8c80c0) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7f5f5f8c8000) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7f5f5f6867e0) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7f5f5f686a20) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7f5f5f686c00) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7f5f5f6c8b40) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f5f5f70fb40) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f5f5f35fd20) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f5f5f3ee600) 0 empty
+
+Vtable for QAbstractItemModel
+QAbstractItemModel::_ZTV18QAbstractItemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractItemModel)
+16 (int (*)(...))QAbstractItemModel::metaObject
+24 (int (*)(...))QAbstractItemModel::qt_metacast
+32 (int (*)(...))QAbstractItemModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractItemModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractItemModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractItemModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModel (0x0x7f5f5f3ebc98) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+ QObject (0x0x7f5f5f3ee5a0) 0
+ primary-for QAbstractItemModel (0x0x7f5f5f3ebc98)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f5f5f12b300) 0 empty
+
+Vtable for QAbstractTableModel
+QAbstractTableModel::_ZTV19QAbstractTableModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractTableModel)
+16 (int (*)(...))QAbstractTableModel::metaObject
+24 (int (*)(...))QAbstractTableModel::qt_metacast
+32 (int (*)(...))QAbstractTableModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractTableModel::index
+120 (int (*)(...))QAbstractTableModel::parent
+128 (int (*)(...))QAbstractTableModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractTableModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractTableModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractTableModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractTableModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTableModel (0x0x7f5f5f45e548) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+ QAbstractItemModel (0x0x7f5f5f45e5b0) 0
+ primary-for QAbstractTableModel (0x0x7f5f5f45e548)
+ QObject (0x0x7f5f5f12b2a0) 0
+ primary-for QAbstractItemModel (0x0x7f5f5f45e5b0)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f5f5f12b420) 0 empty
+
+Vtable for QAbstractListModel
+QAbstractListModel::_ZTV18QAbstractListModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractListModel)
+16 (int (*)(...))QAbstractListModel::metaObject
+24 (int (*)(...))QAbstractListModel::qt_metacast
+32 (int (*)(...))QAbstractListModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QAbstractListModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractListModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractListModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractListModel (0x0x7f5f5f45e618) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+ QAbstractItemModel (0x0x7f5f5f45e680) 0
+ primary-for QAbstractListModel (0x0x7f5f5f45e618)
+ QObject (0x0x7f5f5f12b3c0) 0
+ primary-for QAbstractItemModel (0x0x7f5f5f45e680)
+
+Vtable for QAbstractNativeEventFilter
+QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractNativeEventFilter)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractNativeEventFilter
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNativeEventFilter (0x0x7f5f5f170840) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f5f5f170900) 0 empty
+
+Vtable for QAbstractProxyModel
+QAbstractProxyModel::_ZTV19QAbstractProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractProxyModel)
+16 (int (*)(...))QAbstractProxyModel::metaObject
+24 (int (*)(...))QAbstractProxyModel::qt_metacast
+32 (int (*)(...))QAbstractProxyModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractProxyModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QAbstractProxyModel::headerData
+184 (int (*)(...))QAbstractProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QAbstractProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QAbstractProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QAbstractProxyModel::setSourceModel
+416 (int (*)(...))__cxa_pure_virtual
+424 (int (*)(...))__cxa_pure_virtual
+432 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+440 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QAbstractProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractProxyModel (0x0x7f5f5f17ba28) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+ QAbstractItemModel (0x0x7f5f5f17ba90) 0
+ primary-for QAbstractProxyModel (0x0x7f5f5f17ba28)
+ QObject (0x0x7f5f5f1708a0) 0
+ primary-for QAbstractItemModel (0x0x7f5f5f17ba90)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f5f5f170ae0) 0 empty
+
+Vtable for QAnimationGroup
+QAnimationGroup::_ZTV15QAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAnimationGroup)
+16 (int (*)(...))QAnimationGroup::metaObject
+24 (int (*)(...))QAnimationGroup::qt_metacast
+32 (int (*)(...))QAnimationGroup::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QAnimationGroup (0x0x7f5f5f17baf8) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+ QAbstractAnimation (0x0x7f5f5f17bb60) 0
+ primary-for QAnimationGroup (0x0x7f5f5f17baf8)
+ QObject (0x0x7f5f5f170a80) 0
+ primary-for QAbstractAnimation (0x0x7f5f5f17bb60)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7f5f5f17bc98) 0
+ QIterator<QMetaAssociation> (0x0x7f5f5f17bd00) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f5f5f170f00) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7f5f5f17be38) 0
+ QConstIterator<QMetaAssociation> (0x0x7f5f5f17bea0) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f5f5f1e0480) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7f5f5f17bf70) 0
+ QIterable<QMetaAssociation> (0x0x7f5f5f1e09c0) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f5f5f2e74e0) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7f5f5ef42240) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7f5f5ef75180) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f5f5ef9bcc0) 0 empty
+
+Vtable for QIODevice
+QIODevice::_ZTV9QIODevice: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QIODevice)
+16 (int (*)(...))QIODevice::metaObject
+24 (int (*)(...))QIODevice::qt_metacast
+32 (int (*)(...))QIODevice::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIODevice::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QIODevice::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))__cxa_pure_virtual
+
+Class QIODevice
+ size=16 align=8
+ base size=16 base align=8
+QIODevice (0x0x7f5f5efb1000) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+ QObject (0x0x7f5f5ef9bc00) 0
+ primary-for QIODevice (0x0x7f5f5efb1000)
+ QIODeviceBase (0x0x7f5f5ef9bc60) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f5f5efdc060) 0 empty
+
+Vtable for QBuffer
+QBuffer::_ZTV7QBuffer: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QBuffer)
+16 (int (*)(...))QBuffer::metaObject
+24 (int (*)(...))QBuffer::qt_metacast
+32 (int (*)(...))QBuffer::qt_metacall
+40 (int (*)(...))QBuffer::~QBuffer
+48 (int (*)(...))QBuffer::~QBuffer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QBuffer::connectNotify
+104 (int (*)(...))QBuffer::disconnectNotify
+112 (int (*)(...))QIODevice::isSequential
+120 (int (*)(...))QBuffer::open
+128 (int (*)(...))QBuffer::close
+136 (int (*)(...))QBuffer::pos
+144 (int (*)(...))QBuffer::size
+152 (int (*)(...))QBuffer::seek
+160 (int (*)(...))QBuffer::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QBuffer::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QBuffer::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QBuffer::writeData
+
+Class QBuffer
+ size=16 align=8
+ base size=16 base align=8
+QBuffer (0x0x7f5f5ef99ea0) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+ QIODevice (0x0x7f5f5efb1070) 0
+ primary-for QBuffer (0x0x7f5f5ef99ea0)
+ QObject (0x0x7f5f5ef9bf60) 0
+ primary-for QIODevice (0x0x7f5f5efb1070)
+ QIODeviceBase (0x0x7f5f5efdc000) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f5f5efdc2a0) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7f5f5efdc240) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f5f5efdc420) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f5f5efdc3c0) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f5f5f044c00) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7f5f5ed569c0) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7f5f5ed56960) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f5f5ed56d20) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f5f5edf9360) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f5f5ee465a0) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f5f5ee46600) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f5f5ee46540) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7f5f5eecb840) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f5f5eefa120) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f5f5ebaa1e0) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7f5f5ec04960) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f5f5ec04a20) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7f5f5ec04ba0) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f5f5ec9bba0) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f5f5e978720) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7f5f5e9f08a0) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7f5f5e9f0960) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7f5f5e726240) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7f5f5e760780) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7f5f5e7607e0) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7f5f5e760720) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7f5f5e853d80) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7f5f5e853de0) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7f5f5e853d20) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7f5f5e666e40) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7f5f5e666de0) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7f5f5e349ea0) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7f5f5e3b6840) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f5f5e3eb2a0) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f5f5e3eb480) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f5f5e48eea0) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7f5f5e515780) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7f5f5e5157e0) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7f5f5e515840) 0 empty
+
+Vtable for QEvent
+QEvent::_ZTV6QEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QEvent)
+16 (int (*)(...))QEvent::~QEvent
+24 (int (*)(...))QEvent::~QEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QEvent
+ size=16 align=8
+ base size=16 base align=8
+QEvent (0x0x7f5f5e515720) 0
+ vptr=((& QEvent::_ZTV6QEvent) + 16)
+
+Vtable for QTimerEvent
+QTimerEvent::_ZTV11QTimerEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTimerEvent)
+16 (int (*)(...))QTimerEvent::~QTimerEvent
+24 (int (*)(...))QTimerEvent::~QTimerEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QTimerEvent::clone
+
+Class QTimerEvent
+ size=24 align=8
+ base size=20 base align=8
+QTimerEvent (0x0x7f5f5e510dd0) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+ QEvent (0x0x7f5f5e1741e0) 0
+ primary-for QTimerEvent (0x0x7f5f5e510dd0)
+
+Vtable for QChildEvent
+QChildEvent::_ZTV11QChildEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QChildEvent)
+16 (int (*)(...))QChildEvent::~QChildEvent
+24 (int (*)(...))QChildEvent::~QChildEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QChildEvent::clone
+
+Class QChildEvent
+ size=24 align=8
+ base size=24 base align=8
+QChildEvent (0x0x7f5f5e510e38) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+ QEvent (0x0x7f5f5e1746c0) 0
+ primary-for QChildEvent (0x0x7f5f5e510e38)
+
+Vtable for QDynamicPropertyChangeEvent
+QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDynamicPropertyChangeEvent)
+16 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+24 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDynamicPropertyChangeEvent::clone
+
+Class QDynamicPropertyChangeEvent
+ size=40 align=8
+ base size=40 base align=8
+QDynamicPropertyChangeEvent (0x0x7f5f5e510ea0) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+ QEvent (0x0x7f5f5e174ae0) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f5f5e510ea0)
+
+Vtable for QDeferredDeleteEvent
+QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDeferredDeleteEvent)
+16 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+24 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDeferredDeleteEvent::clone
+
+Class QDeferredDeleteEvent
+ size=24 align=8
+ base size=20 base align=8
+QDeferredDeleteEvent (0x0x7f5f5e510f08) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+ QEvent (0x0x7f5f5e174d80) 0
+ primary-for QDeferredDeleteEvent (0x0x7f5f5e510f08)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f5f5e1aa120) 0 empty
+
+Vtable for QCoreApplication
+QCoreApplication::_ZTV16QCoreApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QCoreApplication)
+16 (int (*)(...))QCoreApplication::metaObject
+24 (int (*)(...))QCoreApplication::qt_metacast
+32 (int (*)(...))QCoreApplication::qt_metacall
+40 (int (*)(...))QCoreApplication::~QCoreApplication
+48 (int (*)(...))QCoreApplication::~QCoreApplication
+56 (int (*)(...))QCoreApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCoreApplication::notify
+120 (int (*)(...))QCoreApplication::compressEvent
+
+Class QCoreApplication
+ size=16 align=8
+ base size=16 base align=8
+QCoreApplication (0x0x7f5f5e510f70) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+ QObject (0x0x7f5f5e1aa0c0) 0
+ primary-for QCoreApplication (0x0x7f5f5e510f70)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f5f5e1aa300) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7f5f5e1aa420) 0 empty
+
+Vtable for QConcatenateTablesProxyModel
+QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QConcatenateTablesProxyModel)
+16 (int (*)(...))QConcatenateTablesProxyModel::metaObject
+24 (int (*)(...))QConcatenateTablesProxyModel::qt_metacast
+32 (int (*)(...))QConcatenateTablesProxyModel::qt_metacall
+40 (int (*)(...))QConcatenateTablesProxyModel::~QConcatenateTablesProxyModel
+48 (int (*)(...))QConcatenateTablesProxyModel::~QConcatenateTablesProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QConcatenateTablesProxyModel::index
+120 (int (*)(...))QConcatenateTablesProxyModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QConcatenateTablesProxyModel::rowCount
+144 (int (*)(...))QConcatenateTablesProxyModel::columnCount
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))QConcatenateTablesProxyModel::data
+168 (int (*)(...))QConcatenateTablesProxyModel::setData
+176 (int (*)(...))QConcatenateTablesProxyModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QConcatenateTablesProxyModel::itemData
+200 (int (*)(...))QConcatenateTablesProxyModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QConcatenateTablesProxyModel::mimeTypes
+224 (int (*)(...))QConcatenateTablesProxyModel::mimeData
+232 (int (*)(...))QConcatenateTablesProxyModel::canDropMimeData
+240 (int (*)(...))QConcatenateTablesProxyModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QConcatenateTablesProxyModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QConcatenateTablesProxyModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QConcatenateTablesProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QConcatenateTablesProxyModel (0x0x7f5f5e1d4000) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+ QAbstractItemModel (0x0x7f5f5e1d4068) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7f5f5e1d4000)
+ QObject (0x0x7f5f5e1aa3c0) 0
+ primary-for QAbstractItemModel (0x0x7f5f5e1d4068)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f5f5e1aa5a0) 0
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f5f5e1aa6c0) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f5f5e1aa9c0) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f5f5e2f3f60) 0 empty
+
+Vtable for QFileDevice
+QFileDevice::_ZTV11QFileDevice: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFileDevice)
+16 (int (*)(...))QFileDevice::metaObject
+24 (int (*)(...))QFileDevice::qt_metacast
+32 (int (*)(...))QFileDevice::qt_metacall
+40 (int (*)(...))QFileDevice::~QFileDevice
+48 (int (*)(...))QFileDevice::~QFileDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFileDevice::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QFileDevice::fileName
+256 (int (*)(...))QFileDevice::resize
+264 (int (*)(...))QFileDevice::permissions
+272 (int (*)(...))QFileDevice::setPermissions
+
+Class QFileDevice
+ size=16 align=8
+ base size=16 base align=8
+QFileDevice (0x0x7f5f5e302618) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+ QIODevice (0x0x7f5f5e27d7e0) 0
+ primary-for QFileDevice (0x0x7f5f5e302618)
+ QObject (0x0x7f5f5e2f3ea0) 0
+ primary-for QIODevice (0x0x7f5f5e27d7e0)
+ QIODeviceBase (0x0x7f5f5e2f3f00) 0 empty
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f5f5df28ae0) 0 empty
+
+Vtable for QFile
+QFile::_ZTV5QFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QFile)
+16 (int (*)(...))QFile::metaObject
+24 (int (*)(...))QFile::qt_metacast
+32 (int (*)(...))QFile::qt_metacall
+40 (int (*)(...))QFile::~QFile
+48 (int (*)(...))QFile::~QFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QFile::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFile::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QFile::fileName
+256 (int (*)(...))QFile::resize
+264 (int (*)(...))QFile::permissions
+272 (int (*)(...))QFile::setPermissions
+
+Class QFile
+ size=16 align=8
+ base size=16 base align=8
+QFile (0x0x7f5f5e302a28) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+ QFileDevice (0x0x7f5f5e302a90) 0
+ primary-for QFile (0x0x7f5f5e302a28)
+ QIODevice (0x0x7f5f5e311770) 0
+ primary-for QFileDevice (0x0x7f5f5e302a90)
+ QObject (0x0x7f5f5df28a20) 0
+ primary-for QIODevice (0x0x7f5f5e311770)
+ QIODeviceBase (0x0x7f5f5df28a80) 0 empty
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f5f5df28d80) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f5f5e02d7e0) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f5f5e0eba80) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f5f5e0ebe40) 0
+
+Vtable for QException
+QException::_ZTV10QException: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QException)
+16 (int (*)(...))QException::~QException
+24 (int (*)(...))QException::~QException
+32 (int (*)(...))std::exception::what
+40 (int (*)(...))QException::raise
+48 (int (*)(...))QException::clone
+
+Class QException
+ size=8 align=8
+ base size=8 base align=8
+QException (0x0x7f5f5ddc3680) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+ std::exception (0x0x7f5f5ddfc5a0) 0 nearly-empty
+ primary-for QException (0x0x7f5f5ddc3680)
+
+Vtable for QUnhandledException
+QUnhandledException::_ZTV19QUnhandledException: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QUnhandledException)
+16 (int (*)(...))QUnhandledException::~QUnhandledException
+24 (int (*)(...))QUnhandledException::~QUnhandledException
+32 (int (*)(...))std::exception::what
+40 (int (*)(...))QUnhandledException::raise
+48 (int (*)(...))QUnhandledException::clone
+
+Class QUnhandledException
+ size=16 align=8
+ base size=16 base align=8
+QUnhandledException (0x0x7f5f5ddc36e8) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+ QException (0x0x7f5f5ddc3750) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f5f5ddc36e8)
+ std::exception (0x0x7f5f5ddfc600) 0 nearly-empty
+ primary-for QException (0x0x7f5f5ddc3750)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f5f5de44480) 0
+
+Vtable for QFactoryInterface
+QFactoryInterface::_ZTV17QFactoryInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFactoryInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QFactoryInterface
+ size=8 align=8
+ base size=8 base align=8
+QFactoryInterface (0x0x7f5f5de444e0) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f5f5de44720) 0 empty
+
+Vtable for QFileSelector
+QFileSelector::_ZTV13QFileSelector: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QFileSelector)
+16 (int (*)(...))QFileSelector::metaObject
+24 (int (*)(...))QFileSelector::qt_metacast
+32 (int (*)(...))QFileSelector::qt_metacall
+40 (int (*)(...))QFileSelector::~QFileSelector
+48 (int (*)(...))QFileSelector::~QFileSelector
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSelector
+ size=16 align=8
+ base size=16 base align=8
+QFileSelector (0x0x7f5f5de43958) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+ QObject (0x0x7f5f5de446c0) 0
+ primary-for QFileSelector (0x0x7f5f5de43958)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f5f5de44900) 0 empty
+
+Vtable for QFileSystemWatcher
+QFileSystemWatcher::_ZTV18QFileSystemWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFileSystemWatcher)
+16 (int (*)(...))QFileSystemWatcher::metaObject
+24 (int (*)(...))QFileSystemWatcher::qt_metacast
+32 (int (*)(...))QFileSystemWatcher::qt_metacall
+40 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+48 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSystemWatcher
+ size=16 align=8
+ base size=16 base align=8
+QFileSystemWatcher (0x0x7f5f5de439c0) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+ QObject (0x0x7f5f5de448a0) 0
+ primary-for QFileSystemWatcher (0x0x7f5f5de439c0)
+
+Vtable for QRunnable
+QRunnable::_ZTV9QRunnable: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QRunnable)
+16 (int (*)(...))__cxa_pure_virtual
+24 0
+32 0
+
+Class QRunnable
+ size=16 align=8
+ base size=9 base align=8
+QRunnable (0x0x7f5f5de44a80) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f5f5de44c60) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f5f5de43a90) 0
+ QBasicMutex (0x0x7f5f5dec89c0) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7f5f5dec8de0) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f5f5db26420) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f5f5db26a20) 0
+
+Vtable for QtPrivate::ResultStoreBase
+QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9QtPrivate15ResultStoreBaseE)
+16 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+24 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+
+Class QtPrivate::ResultStoreBase
+ size=48 align=8
+ base size=44 base align=8
+QtPrivate::ResultStoreBase (0x0x7f5f5db9d6c0) 0
+ vptr=((& QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE) + 16)
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f5f5dcb40c0) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f5f5dca8d00) 0
+ std::__mutex_base (0x0x7f5f5dcb4120) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f5f5dcb4300) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f5f5dcb4360) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f5f5dcb43c0) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f5f5dcb4de0) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f5f5dca8d68) 0
+ std::__recursive_mutex_base (0x0x7f5f5dcb4e40) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f5f5dd5df50) 0
+ std::__mutex_base (0x0x7f5f5dcf3240) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7f5f5dcf32a0) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f5f5dd0f000) 0
+ std::__recursive_mutex_base (0x0x7f5f5dcf3660) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f5f5dcf36c0) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f5f5d9324e0) 0
+
+Vtable for QFutureInterfaceBase
+QFutureInterfaceBase::_ZTV20QFutureInterfaceBase: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QFutureInterfaceBase)
+16 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+24 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+
+Class QFutureInterfaceBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureInterfaceBase (0x0x7f5f5d932720) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Vtable for std::thread::_State
+std::thread::_State::_ZTVNSt6thread6_StateE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6thread6_StateE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class std::thread::_State
+ size=8 align=8
+ base size=8 base align=8
+std::thread::_State (0x0x7f5f5d985660) 0 nearly-empty
+ vptr=((& std::thread::_State::_ZTVNSt6thread6_StateE) + 16)
+
+Class std::thread::id
+ size=8 align=8
+ base size=8 base align=8
+std::thread::id (0x0x7f5f5d9856c0) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f5f5d985600) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f5f5d760900) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f5f5d760cc0) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f5f5d760d20) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f5f5d8502a0) 0 empty
+
+Vtable for std::future_error
+std::future_error::_ZTVSt12future_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12future_error)
+16 (int (*)(...))std::future_error::~future_error
+24 (int (*)(...))std::future_error::~future_error
+32 (int (*)(...))std::future_error::what
+
+Class std::future_error
+ size=32 align=8
+ base size=32 base align=8
+std::future_error (0x0x7f5f5d75ff70) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+ std::logic_error (0x0x7f5f5d86b000) 0
+ primary-for std::future_error (0x0x7f5f5d75ff70)
+ std::exception (0x0x7f5f5d8509c0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f5f5d86b000)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f5f5d87d120) 0 empty
+
+Vtable for std::__future_base::_Result_base
+std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base12_Result_baseE)
+16 (int (*)(...))__cxa_pure_virtual
+24 0
+32 0
+
+Class std::__future_base::_Result_base
+ size=16 align=8
+ base size=16 base align=8
+std::__future_base::_Result_base (0x0x7f5f5d87d0c0) 0
+ vptr=((& std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE) + 16)
+
+Class std::__future_base::_State_baseV2::__exception_ptr_tag
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_State_baseV2::__exception_ptr_tag (0x0x7f5f5d5c0b40) 0 empty
+
+Class std::__future_base::_State_baseV2::_Make_ready
+ size=32 align=8
+ base size=32 base align=8
+std::__future_base::_State_baseV2::_Make_ready (0x0x7f5f5d5cd7b8) 0
+ std::__at_thread_exit_elt (0x0x7f5f5d5c0c00) 0
+
+Vtable for std::__future_base::_State_baseV2
+std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base13_State_baseV2E)
+16 (int (*)(...))std::__future_base::_State_baseV2::~_State_baseV2
+24 (int (*)(...))std::__future_base::_State_baseV2::~_State_baseV2
+32 (int (*)(...))std::__future_base::_State_baseV2::_M_complete_async
+40 (int (*)(...))std::__future_base::_State_baseV2::_M_is_deferred_future
+
+Class std::__future_base::_State_baseV2
+ size=32 align=8
+ base size=28 base align=8
+std::__future_base::_State_baseV2 (0x0x7f5f5d87d2a0) 0
+ vptr=((& std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E) + 16)
+
+Class std::__future_base
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base (0x0x7f5f5d87d060) 0 empty
+
+Vtable for std::__future_base::_Async_state_commonV2
+std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base21_Async_state_commonV2E)
+16 (int (*)(...))std::__future_base::_Async_state_commonV2::~_Async_state_commonV2
+24 (int (*)(...))std::__future_base::_Async_state_commonV2::~_Async_state_commonV2
+32 (int (*)(...))std::__future_base::_Async_state_commonV2::_M_complete_async
+40 (int (*)(...))std::__future_base::_State_baseV2::_M_is_deferred_future
+
+Class std::__future_base::_Async_state_commonV2
+ size=48 align=8
+ base size=44 base align=8
+std::__future_base::_Async_state_commonV2 (0x0x7f5f5d26dbc8) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+ std::__future_base::_State_baseV2 (0x0x7f5f5d2bf900) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f5f5d26dbc8)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f5f5d2f41e0) 0 empty
+
+Vtable for QThread
+QThread::_ZTV7QThread: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QThread)
+16 (int (*)(...))QThread::metaObject
+24 (int (*)(...))QThread::qt_metacast
+32 (int (*)(...))QThread::qt_metacall
+40 (int (*)(...))QThread::~QThread
+48 (int (*)(...))QThread::~QThread
+56 (int (*)(...))QThread::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QThread::run
+
+Class QThread
+ size=16 align=8
+ base size=16 base align=8
+QThread (0x0x7f5f5d26df08) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+ QObject (0x0x7f5f5d2f4180) 0
+ primary-for QThread (0x0x7f5f5d26df08)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f5f5d2f45a0) 0 empty
+
+Vtable for QThreadPool
+QThreadPool::_ZTV11QThreadPool: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QThreadPool)
+16 (int (*)(...))QThreadPool::metaObject
+24 (int (*)(...))QThreadPool::qt_metacast
+32 (int (*)(...))QThreadPool::qt_metacall
+40 (int (*)(...))QThreadPool::~QThreadPool
+48 (int (*)(...))QThreadPool::~QThreadPool
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QThreadPool
+ size=16 align=8
+ base size=16 base align=8
+QThreadPool (0x0x7f5f5d26df70) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+ QObject (0x0x7f5f5d2f4540) 0
+ primary-for QThreadPool (0x0x7f5f5d26df70)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f5f5cd45480) 0 empty
+
+Vtable for QFutureWatcherBase
+QFutureWatcherBase::_ZTV18QFutureWatcherBase: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFutureWatcherBase)
+16 (int (*)(...))QFutureWatcherBase::metaObject
+24 (int (*)(...))QFutureWatcherBase::qt_metacast
+32 (int (*)(...))QFutureWatcherBase::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QFutureWatcherBase::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QFutureWatcherBase::connectNotify
+104 (int (*)(...))QFutureWatcherBase::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QFutureWatcherBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureWatcherBase (0x0x7f5f5d08ddd0) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+ QObject (0x0x7f5f5cd45420) 0
+ primary-for QFutureWatcherBase (0x0x7f5f5d08ddd0)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f5f5cd459c0) 0 empty
+
+Vtable for QIdentityProxyModel
+QIdentityProxyModel::_ZTV19QIdentityProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QIdentityProxyModel)
+16 (int (*)(...))QIdentityProxyModel::metaObject
+24 (int (*)(...))QIdentityProxyModel::qt_metacast
+32 (int (*)(...))QIdentityProxyModel::qt_metacall
+40 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+48 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIdentityProxyModel::index
+120 (int (*)(...))QIdentityProxyModel::parent
+128 (int (*)(...))QIdentityProxyModel::sibling
+136 (int (*)(...))QIdentityProxyModel::rowCount
+144 (int (*)(...))QIdentityProxyModel::columnCount
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QIdentityProxyModel::headerData
+184 (int (*)(...))QAbstractProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QIdentityProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QIdentityProxyModel::insertRows
+272 (int (*)(...))QIdentityProxyModel::insertColumns
+280 (int (*)(...))QIdentityProxyModel::removeRows
+288 (int (*)(...))QIdentityProxyModel::removeColumns
+296 (int (*)(...))QIdentityProxyModel::moveRows
+304 (int (*)(...))QIdentityProxyModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QAbstractProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QIdentityProxyModel::match
+360 (int (*)(...))QAbstractProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QIdentityProxyModel::setSourceModel
+416 (int (*)(...))QIdentityProxyModel::mapToSource
+424 (int (*)(...))QIdentityProxyModel::mapFromSource
+432 (int (*)(...))QIdentityProxyModel::mapSelectionToSource
+440 (int (*)(...))QIdentityProxyModel::mapSelectionFromSource
+
+Class QIdentityProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QIdentityProxyModel (0x0x7f5f5cd5f000) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f5f5cd5f068) 0
+ primary-for QIdentityProxyModel (0x0x7f5f5cd5f000)
+ QAbstractItemModel (0x0x7f5f5cd5f0d0) 0
+ primary-for QAbstractProxyModel (0x0x7f5f5cd5f068)
+ QObject (0x0x7f5f5cd45960) 0
+ primary-for QAbstractItemModel (0x0x7f5f5cd5f0d0)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f5f5cd45b40) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f5f5cdca720) 0 empty
+
+Vtable for QItemSelectionModel
+QItemSelectionModel::_ZTV19QItemSelectionModel: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QItemSelectionModel)
+16 (int (*)(...))QItemSelectionModel::metaObject
+24 (int (*)(...))QItemSelectionModel::qt_metacast
+32 (int (*)(...))QItemSelectionModel::qt_metacall
+40 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+48 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QItemSelectionModel::setCurrentIndex
+120 (int (*)(...))QItemSelectionModel::select
+128 (int (*)(...))QItemSelectionModel::select
+136 (int (*)(...))QItemSelectionModel::clear
+144 (int (*)(...))QItemSelectionModel::reset
+152 (int (*)(...))QItemSelectionModel::clearCurrentIndex
+
+Class QItemSelectionModel
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionModel (0x0x7f5f5cdc5e38) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+ QObject (0x0x7f5f5cdca6c0) 0
+ primary-for QItemSelectionModel (0x0x7f5f5cdc5e38)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7f5f5ce1e340) 0
+ QList<QItemSelectionRange> (0x0x7f5f5ce1e3a8) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7f5f5ce1e410) 0 empty
+ QListSpecialMethodsBase<QItemSelectionRange> (0x0x7f5f5ce45120) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7f5f5ce9ae40) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7f5f5ced1300) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7f5f5cf16540) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7f5f5cf165a0) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7f5f5cf164e0) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f5f5cbabf60) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f5f5cbcc000) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7f5f5c959540) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7f5f5c9595a0) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7f5f5c9594e0) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f5f5ca150c0) 0 empty
+
+Vtable for QLibrary
+QLibrary::_ZTV8QLibrary: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QLibrary)
+16 (int (*)(...))QLibrary::metaObject
+24 (int (*)(...))QLibrary::qt_metacast
+32 (int (*)(...))QLibrary::qt_metacall
+40 (int (*)(...))QLibrary::~QLibrary
+48 (int (*)(...))QLibrary::~QLibrary
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QLibrary
+ size=24 align=8
+ base size=24 base align=8
+QLibrary (0x0x7f5f5ca094e0) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+ QObject (0x0x7f5f5ca15060) 0
+ primary-for QLibrary (0x0x7f5f5ca094e0)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f5f5ca156c0) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f5f5ca15660) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7f5f5cb0ce40) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f5f5c77f600) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f5f5c77f6c0) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f5f5c7dbd80) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f5f5c850720) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f5f5c899d20) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f5f5c911540) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f5f5c911780) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f5f5c911720) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f5f5c557660) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f5f5c5c4f60) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f5f5c64ccc0) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7f5f5c64cd80) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7f5f5c64cd20) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7f5f5c6ec000) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7f5f5c6ccf60) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7f5f5c714d20) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f5f5c714cc0) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7f5f5c33b3c0) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7f5f5c33b360) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f5f5c3771e0) 0 empty
+
+Vtable for QMimeData
+QMimeData::_ZTV9QMimeData: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QMimeData)
+16 (int (*)(...))QMimeData::metaObject
+24 (int (*)(...))QMimeData::qt_metacast
+32 (int (*)(...))QMimeData::qt_metacall
+40 (int (*)(...))QMimeData::~QMimeData
+48 (int (*)(...))QMimeData::~QMimeData
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QMimeData::hasFormat
+120 (int (*)(...))QMimeData::formats
+128 (int (*)(...))QMimeData::retrieveData
+
+Class QMimeData
+ size=16 align=8
+ base size=16 base align=8
+QMimeData (0x0x7f5f5c365f70) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+ QObject (0x0x7f5f5c377180) 0
+ primary-for QMimeData (0x0x7f5f5c365f70)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f5f5c377360) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f5f5c3efd80) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f5f5c3efe40) 0 empty
+
+Vtable for QObjectCleanupHandler
+QObjectCleanupHandler::_ZTV21QObjectCleanupHandler: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QObjectCleanupHandler)
+16 (int (*)(...))QObjectCleanupHandler::metaObject
+24 (int (*)(...))QObjectCleanupHandler::qt_metacast
+32 (int (*)(...))QObjectCleanupHandler::qt_metacall
+40 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+48 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QObjectCleanupHandler
+ size=40 align=8
+ base size=40 base align=8
+QObjectCleanupHandler (0x0x7f5f5c3f0dd0) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+ QObject (0x0x7f5f5c3efde0) 0
+ primary-for QObjectCleanupHandler (0x0x7f5f5c3f0dd0)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f5f5c3eff00) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f5f5c449d20) 0 empty
+
+Vtable for QParallelAnimationGroup
+QParallelAnimationGroup::_ZTV23QParallelAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QParallelAnimationGroup)
+16 (int (*)(...))QParallelAnimationGroup::metaObject
+24 (int (*)(...))QParallelAnimationGroup::qt_metacast
+32 (int (*)(...))QParallelAnimationGroup::qt_metacall
+40 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+48 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+56 (int (*)(...))QParallelAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QParallelAnimationGroup::duration
+120 (int (*)(...))QParallelAnimationGroup::updateCurrentTime
+128 (int (*)(...))QParallelAnimationGroup::updateState
+136 (int (*)(...))QParallelAnimationGroup::updateDirection
+
+Class QParallelAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QParallelAnimationGroup (0x0x7f5f5c459820) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f5f5c459888) 0
+ primary-for QParallelAnimationGroup (0x0x7f5f5c459820)
+ QAbstractAnimation (0x0x7f5f5c4598f0) 0
+ primary-for QAnimationGroup (0x0x7f5f5c459888)
+ QObject (0x0x7f5f5c449cc0) 0
+ primary-for QAbstractAnimation (0x0x7f5f5c4598f0)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f5f5c449f00) 0 empty
+
+Vtable for QPauseAnimation
+QPauseAnimation::_ZTV15QPauseAnimation: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QPauseAnimation)
+16 (int (*)(...))QPauseAnimation::metaObject
+24 (int (*)(...))QPauseAnimation::qt_metacast
+32 (int (*)(...))QPauseAnimation::qt_metacall
+40 (int (*)(...))QPauseAnimation::~QPauseAnimation
+48 (int (*)(...))QPauseAnimation::~QPauseAnimation
+56 (int (*)(...))QPauseAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPauseAnimation::duration
+120 (int (*)(...))QPauseAnimation::updateCurrentTime
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QPauseAnimation
+ size=16 align=8
+ base size=16 base align=8
+QPauseAnimation (0x0x7f5f5c459958) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+ QAbstractAnimation (0x0x7f5f5c4599c0) 0
+ primary-for QPauseAnimation (0x0x7f5f5c459958)
+ QObject (0x0x7f5f5c449ea0) 0
+ primary-for QAbstractAnimation (0x0x7f5f5c4599c0)
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7f5f5c47e120) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7f5f5c47e180) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f5f5c49eba0) 0 empty
+
+Vtable for QPluginLoader
+QPluginLoader::_ZTV13QPluginLoader: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPluginLoader)
+16 (int (*)(...))QPluginLoader::metaObject
+24 (int (*)(...))QPluginLoader::qt_metacast
+32 (int (*)(...))QPluginLoader::qt_metacall
+40 (int (*)(...))QPluginLoader::~QPluginLoader
+48 (int (*)(...))QPluginLoader::~QPluginLoader
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPluginLoader
+ size=32 align=8
+ base size=25 base align=8
+QPluginLoader (0x0x7f5f5c4aa5b0) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+ QObject (0x0x7f5f5c49eb40) 0
+ primary-for QPluginLoader (0x0x7f5f5c4aa5b0)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f5f5c49ec60) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f5f5c12f3c0) 0 empty
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7f5f5c12f420) 0 empty
+
+Vtable for QProcess
+QProcess::_ZTV8QProcess: 32 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QProcess)
+16 (int (*)(...))QProcess::metaObject
+24 (int (*)(...))QProcess::qt_metacast
+32 (int (*)(...))QProcess::qt_metacall
+40 (int (*)(...))QProcess::~QProcess
+48 (int (*)(...))QProcess::~QProcess
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QProcess::isSequential
+120 (int (*)(...))QProcess::open
+128 (int (*)(...))QProcess::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QProcess::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QProcess::waitForReadyRead
+208 (int (*)(...))QProcess::waitForBytesWritten
+216 (int (*)(...))QProcess::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QProcess::writeData
+248 (int (*)(...))QProcess::setupChildProcess
+
+Class QProcess
+ size=16 align=8
+ base size=16 base align=8
+QProcess (0x0x7f5f5c128618) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+ QIODevice (0x0x7f5f5c463850) 0
+ primary-for QProcess (0x0x7f5f5c128618)
+ QObject (0x0x7f5f5c12f300) 0
+ primary-for QIODevice (0x0x7f5f5c463850)
+ QIODeviceBase (0x0x7f5f5c12f360) 0 empty
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f5f5c1721e0) 0 empty
+
+Vtable for QVariantAnimation
+QVariantAnimation::_ZTV17QVariantAnimation: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QVariantAnimation)
+16 (int (*)(...))QVariantAnimation::metaObject
+24 (int (*)(...))QVariantAnimation::qt_metacast
+32 (int (*)(...))QVariantAnimation::qt_metacall
+40 (int (*)(...))QVariantAnimation::~QVariantAnimation
+48 (int (*)(...))QVariantAnimation::~QVariantAnimation
+56 (int (*)(...))QVariantAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QVariantAnimation::duration
+120 (int (*)(...))QVariantAnimation::updateCurrentTime
+128 (int (*)(...))QVariantAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+144 (int (*)(...))QVariantAnimation::updateCurrentValue
+152 (int (*)(...))QVariantAnimation::interpolated
+
+Class QVariantAnimation
+ size=16 align=8
+ base size=16 base align=8
+QVariantAnimation (0x0x7f5f5c128680) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+ QAbstractAnimation (0x0x7f5f5c1286e8) 0
+ primary-for QVariantAnimation (0x0x7f5f5c128680)
+ QObject (0x0x7f5f5c172180) 0
+ primary-for QAbstractAnimation (0x0x7f5f5c1286e8)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f5f5c172420) 0 empty
+
+Vtable for QPropertyAnimation
+QPropertyAnimation::_ZTV18QPropertyAnimation: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QPropertyAnimation)
+16 (int (*)(...))QPropertyAnimation::metaObject
+24 (int (*)(...))QPropertyAnimation::qt_metacast
+32 (int (*)(...))QPropertyAnimation::qt_metacall
+40 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+48 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+56 (int (*)(...))QPropertyAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QVariantAnimation::duration
+120 (int (*)(...))QVariantAnimation::updateCurrentTime
+128 (int (*)(...))QPropertyAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+144 (int (*)(...))QPropertyAnimation::updateCurrentValue
+152 (int (*)(...))QVariantAnimation::interpolated
+
+Class QPropertyAnimation
+ size=16 align=8
+ base size=16 base align=8
+QPropertyAnimation (0x0x7f5f5c1287b8) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+ QVariantAnimation (0x0x7f5f5c128820) 0
+ primary-for QPropertyAnimation (0x0x7f5f5c1287b8)
+ QAbstractAnimation (0x0x7f5f5c128888) 0
+ primary-for QVariantAnimation (0x0x7f5f5c128820)
+ QObject (0x0x7f5f5c1723c0) 0
+ primary-for QAbstractAnimation (0x0x7f5f5c128888)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f5f5c20cb40) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f5f5c31b000) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f5f5c2f7f60) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f5f5c0e2780) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f5f5bef86c0) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f5f5bef8660) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f5f5bb54548) 0
+ QRandomGenerator (0x0x7f5f5bb70960) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f5f5bb935a0) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f5f5bb937e0) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f5f5bb93cc0) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f5f5bc051e0) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f5f5bc54c00) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f5f5bcd4420) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f5f5b9b3240) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f5f5ba48d80) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f5f5ba9d0c0) 0 empty
+
+Vtable for QSaveFile
+QSaveFile::_ZTV9QSaveFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSaveFile)
+16 (int (*)(...))QSaveFile::metaObject
+24 (int (*)(...))QSaveFile::qt_metacast
+32 (int (*)(...))QSaveFile::qt_metacall
+40 (int (*)(...))QSaveFile::~QSaveFile
+48 (int (*)(...))QSaveFile::~QSaveFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QSaveFile::open
+128 (int (*)(...))QSaveFile::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFileDevice::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QSaveFile::writeData
+248 (int (*)(...))QSaveFile::fileName
+256 (int (*)(...))QFileDevice::resize
+264 (int (*)(...))QFileDevice::permissions
+272 (int (*)(...))QFileDevice::setPermissions
+
+Class QSaveFile
+ size=16 align=8
+ base size=16 base align=8
+QSaveFile (0x0x7f5f5ba107b8) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+ QFileDevice (0x0x7f5f5ba10820) 0
+ primary-for QSaveFile (0x0x7f5f5ba107b8)
+ QIODevice (0x0x7f5f5bbe9af0) 0
+ primary-for QFileDevice (0x0x7f5f5ba10820)
+ QObject (0x0x7f5f5ba9d000) 0
+ primary-for QIODevice (0x0x7f5f5bbe9af0)
+ QIODeviceBase (0x0x7f5f5ba9d060) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f5f5ba9d6c0) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f5f5bad7ea0) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f5f5b75aba0) 0 empty
+
+Vtable for QSequentialAnimationGroup
+QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QSequentialAnimationGroup)
+16 (int (*)(...))QSequentialAnimationGroup::metaObject
+24 (int (*)(...))QSequentialAnimationGroup::qt_metacast
+32 (int (*)(...))QSequentialAnimationGroup::qt_metacall
+40 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+48 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+56 (int (*)(...))QSequentialAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSequentialAnimationGroup::duration
+120 (int (*)(...))QSequentialAnimationGroup::updateCurrentTime
+128 (int (*)(...))QSequentialAnimationGroup::updateState
+136 (int (*)(...))QSequentialAnimationGroup::updateDirection
+
+Class QSequentialAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QSequentialAnimationGroup (0x0x7f5f5b76e3a8) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f5f5b76e410) 0
+ primary-for QSequentialAnimationGroup (0x0x7f5f5b76e3a8)
+ QAbstractAnimation (0x0x7f5f5b76e478) 0
+ primary-for QAnimationGroup (0x0x7f5f5b76e410)
+ QObject (0x0x7f5f5b75ab40) 0
+ primary-for QAbstractAnimation (0x0x7f5f5b76e478)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7f5f5b76e5b0) 0
+ QIterator<QMetaSequence> (0x0x7f5f5b76e618) 0
+ QBaseIterator<QMetaSequence> (0x0x7f5f5b75af00) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7f5f5b76e6e8) 0
+ QConstIterator<QMetaSequence> (0x0x7f5f5b76e750) 0
+ QBaseIterator<QMetaSequence> (0x0x7f5f5b7ab480) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7f5f5b76e7b8) 0
+ QIterable<QMetaSequence> (0x0x7f5f5b7ab9c0) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f5f5b8af000) 0 empty
+
+Vtable for QSettings
+QSettings::_ZTV9QSettings: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSettings)
+16 (int (*)(...))QSettings::metaObject
+24 (int (*)(...))QSettings::qt_metacast
+32 (int (*)(...))QSettings::qt_metacall
+40 (int (*)(...))QSettings::~QSettings
+48 (int (*)(...))QSettings::~QSettings
+56 (int (*)(...))QSettings::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSettings
+ size=16 align=8
+ base size=16 base align=8
+QSettings (0x0x7f5f5b899bc8) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+ QObject (0x0x7f5f5b88af60) 0
+ primary-for QSettings (0x0x7f5f5b899bc8)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f5f5b8af420) 0 empty
+
+Vtable for QSharedMemory
+QSharedMemory::_ZTV13QSharedMemory: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSharedMemory)
+16 (int (*)(...))QSharedMemory::metaObject
+24 (int (*)(...))QSharedMemory::qt_metacast
+32 (int (*)(...))QSharedMemory::qt_metacall
+40 (int (*)(...))QSharedMemory::~QSharedMemory
+48 (int (*)(...))QSharedMemory::~QSharedMemory
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSharedMemory
+ size=16 align=8
+ base size=16 base align=8
+QSharedMemory (0x0x7f5f5b899c30) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+ QObject (0x0x7f5f5b8af3c0) 0
+ primary-for QSharedMemory (0x0x7f5f5b899c30)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f5f5b8af600) 0 empty
+
+Vtable for QSignalMapper
+QSignalMapper::_ZTV13QSignalMapper: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSignalMapper)
+16 (int (*)(...))QSignalMapper::metaObject
+24 (int (*)(...))QSignalMapper::qt_metacast
+32 (int (*)(...))QSignalMapper::qt_metacall
+40 (int (*)(...))QSignalMapper::~QSignalMapper
+48 (int (*)(...))QSignalMapper::~QSignalMapper
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSignalMapper
+ size=16 align=8
+ base size=16 base align=8
+QSignalMapper (0x0x7f5f5b899c98) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+ QObject (0x0x7f5f5b8af5a0) 0
+ primary-for QSignalMapper (0x0x7f5f5b899c98)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f5f60d6b900) 0 empty
+
+Vtable for QSocketNotifier
+QSocketNotifier::_ZTV15QSocketNotifier: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSocketNotifier)
+16 (int (*)(...))QSocketNotifier::metaObject
+24 (int (*)(...))QSocketNotifier::qt_metacast
+32 (int (*)(...))QSocketNotifier::qt_metacall
+40 (int (*)(...))QSocketNotifier::~QSocketNotifier
+48 (int (*)(...))QSocketNotifier::~QSocketNotifier
+56 (int (*)(...))QSocketNotifier::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSocketNotifier
+ size=16 align=8
+ base size=16 base align=8
+QSocketNotifier (0x0x7f5f646d9680) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+ QObject (0x0x7f5f60d6b8a0) 0
+ primary-for QSocketNotifier (0x0x7f5f646d9680)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7f5f60d6ba80) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f5f5fb58180) 0 empty
+
+Vtable for QSortFilterProxyModel
+QSortFilterProxyModel::_ZTV21QSortFilterProxyModel: 59 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QSortFilterProxyModel)
+16 (int (*)(...))QSortFilterProxyModel::metaObject
+24 (int (*)(...))QSortFilterProxyModel::qt_metacast
+32 (int (*)(...))QSortFilterProxyModel::qt_metacall
+40 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+48 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSortFilterProxyModel::index
+120 (int (*)(...))QSortFilterProxyModel::parent
+128 (int (*)(...))QSortFilterProxyModel::sibling
+136 (int (*)(...))QSortFilterProxyModel::rowCount
+144 (int (*)(...))QSortFilterProxyModel::columnCount
+152 (int (*)(...))QSortFilterProxyModel::hasChildren
+160 (int (*)(...))QSortFilterProxyModel::data
+168 (int (*)(...))QSortFilterProxyModel::setData
+176 (int (*)(...))QSortFilterProxyModel::headerData
+184 (int (*)(...))QSortFilterProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QSortFilterProxyModel::mimeTypes
+224 (int (*)(...))QSortFilterProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QSortFilterProxyModel::dropMimeData
+248 (int (*)(...))QSortFilterProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QSortFilterProxyModel::insertRows
+272 (int (*)(...))QSortFilterProxyModel::insertColumns
+280 (int (*)(...))QSortFilterProxyModel::removeRows
+288 (int (*)(...))QSortFilterProxyModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QSortFilterProxyModel::fetchMore
+320 (int (*)(...))QSortFilterProxyModel::canFetchMore
+328 (int (*)(...))QSortFilterProxyModel::flags
+336 (int (*)(...))QSortFilterProxyModel::sort
+344 (int (*)(...))QSortFilterProxyModel::buddy
+352 (int (*)(...))QSortFilterProxyModel::match
+360 (int (*)(...))QSortFilterProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QSortFilterProxyModel::setSourceModel
+416 (int (*)(...))QSortFilterProxyModel::mapToSource
+424 (int (*)(...))QSortFilterProxyModel::mapFromSource
+432 (int (*)(...))QSortFilterProxyModel::mapSelectionToSource
+440 (int (*)(...))QSortFilterProxyModel::mapSelectionFromSource
+448 (int (*)(...))QSortFilterProxyModel::filterAcceptsRow
+456 (int (*)(...))QSortFilterProxyModel::filterAcceptsColumn
+464 (int (*)(...))QSortFilterProxyModel::lessThan
+
+Class QSortFilterProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QSortFilterProxyModel (0x0x7f5f646d96e8) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f5f646d9750) 0
+ primary-for QSortFilterProxyModel (0x0x7f5f646d96e8)
+ QAbstractItemModel (0x0x7f5f646d9820) 0
+ primary-for QAbstractProxyModel (0x0x7f5f646d9750)
+ QObject (0x0x7f5f5fb58120) 0
+ primary-for QAbstractItemModel (0x0x7f5f646d9820)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f5f5fb58540) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f5f5fb58e40) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f5f5f3787e0) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f5f5ee0b060) 0 empty
+
+Vtable for QStringListModel
+QStringListModel::_ZTV16QStringListModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QStringListModel)
+16 (int (*)(...))QStringListModel::metaObject
+24 (int (*)(...))QStringListModel::qt_metacast
+32 (int (*)(...))QStringListModel::qt_metacall
+40 (int (*)(...))QStringListModel::~QStringListModel
+48 (int (*)(...))QStringListModel::~QStringListModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QStringListModel::sibling
+136 (int (*)(...))QStringListModel::rowCount
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))QStringListModel::data
+168 (int (*)(...))QStringListModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QStringListModel::itemData
+200 (int (*)(...))QStringListModel::setItemData
+208 (int (*)(...))QStringListModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QStringListModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStringListModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QStringListModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QStringListModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStringListModel::flags
+336 (int (*)(...))QStringListModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QStringListModel
+ size=40 align=8
+ base size=40 base align=8
+QStringListModel (0x0x7f5f6479e888) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+ QAbstractListModel (0x0x7f5f6479e8f0) 0
+ primary-for QStringListModel (0x0x7f5f6479e888)
+ QAbstractItemModel (0x0x7f5f6479e958) 0
+ primary-for QAbstractListModel (0x0x7f5f6479e8f0)
+ QObject (0x0x7f5f5ee0b000) 0
+ primary-for QAbstractItemModel (0x0x7f5f6479e958)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f5f5ee0b120) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f5f5ee0b240) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f5f5ee0b3c0) 0 empty
+
+Vtable for QTemporaryFile
+QTemporaryFile::_ZTV14QTemporaryFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QTemporaryFile)
+16 (int (*)(...))QTemporaryFile::metaObject
+24 (int (*)(...))QTemporaryFile::qt_metacast
+32 (int (*)(...))QTemporaryFile::qt_metacall
+40 (int (*)(...))QTemporaryFile::~QTemporaryFile
+48 (int (*)(...))QTemporaryFile::~QTemporaryFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QTemporaryFile::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFile::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QTemporaryFile::fileName
+256 (int (*)(...))QFile::resize
+264 (int (*)(...))QFile::permissions
+272 (int (*)(...))QFile::setPermissions
+
+Class QTemporaryFile
+ size=16 align=8
+ base size=16 base align=8
+QTemporaryFile (0x0x7f5f6479e9c0) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+ QFile (0x0x7f5f648f0548) 0
+ primary-for QTemporaryFile (0x0x7f5f6479e9c0)
+ QFileDevice (0x0x7f5f648f0618) 0
+ primary-for QFile (0x0x7f5f648f0548)
+ QIODevice (0x0x7f5f64af19a0) 0
+ primary-for QFileDevice (0x0x7f5f648f0618)
+ QObject (0x0x7f5f5ee0b300) 0
+ primary-for QIODevice (0x0x7f5f64af19a0)
+ QIODeviceBase (0x0x7f5f5ee0b360) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7f5f5ee0b600) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f5f5ee0bba0) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f5f5e7462a0) 0 empty
+
+Vtable for QTimeLine
+QTimeLine::_ZTV9QTimeLine: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTimeLine)
+16 (int (*)(...))QTimeLine::metaObject
+24 (int (*)(...))QTimeLine::qt_metacast
+32 (int (*)(...))QTimeLine::qt_metacall
+40 (int (*)(...))QTimeLine::~QTimeLine
+48 (int (*)(...))QTimeLine::~QTimeLine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTimeLine::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTimeLine::valueForTime
+
+Class QTimeLine
+ size=16 align=8
+ base size=16 base align=8
+QTimeLine (0x0x7f5f648f0af8) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+ QObject (0x0x7f5f5e746240) 0
+ primary-for QTimeLine (0x0x7f5f648f0af8)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f5f5e746480) 0 empty
+
+Vtable for QTimer
+QTimer::_ZTV6QTimer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QTimer)
+16 (int (*)(...))QTimer::metaObject
+24 (int (*)(...))QTimer::qt_metacast
+32 (int (*)(...))QTimer::qt_metacall
+40 (int (*)(...))QTimer::~QTimer
+48 (int (*)(...))QTimer::~QTimer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTimer::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTimer
+ size=16 align=8
+ base size=16 base align=8
+QTimer (0x0x7f5f648f0b60) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+ QObject (0x0x7f5f5e746420) 0
+ primary-for QTimer (0x0x7f5f648f0b60)
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7f5f5e8772a0) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f5f5e877240) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f5f5e693300) 0 empty
+
+Vtable for QTranslator
+QTranslator::_ZTV11QTranslator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTranslator)
+16 (int (*)(...))QTranslator::metaObject
+24 (int (*)(...))QTranslator::qt_metacast
+32 (int (*)(...))QTranslator::qt_metacall
+40 (int (*)(...))QTranslator::~QTranslator
+48 (int (*)(...))QTranslator::~QTranslator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTranslator::translate
+120 (int (*)(...))QTranslator::isEmpty
+
+Class QTranslator
+ size=16 align=8
+ base size=16 base align=8
+QTranslator (0x0x7f5f6458b478) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+ QObject (0x0x7f5f5e6932a0) 0
+ primary-for QTranslator (0x0x7f5f6458b478)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7f5f5e6934e0) 0 empty
+
+Vtable for QTransposeProxyModel
+QTransposeProxyModel::_ZTV20QTransposeProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTransposeProxyModel)
+16 (int (*)(...))QTransposeProxyModel::metaObject
+24 (int (*)(...))QTransposeProxyModel::qt_metacast
+32 (int (*)(...))QTransposeProxyModel::qt_metacall
+40 (int (*)(...))QTransposeProxyModel::~QTransposeProxyModel
+48 (int (*)(...))QTransposeProxyModel::~QTransposeProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTransposeProxyModel::index
+120 (int (*)(...))QTransposeProxyModel::parent
+128 (int (*)(...))QAbstractProxyModel::sibling
+136 (int (*)(...))QTransposeProxyModel::rowCount
+144 (int (*)(...))QTransposeProxyModel::columnCount
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QTransposeProxyModel::headerData
+184 (int (*)(...))QTransposeProxyModel::setHeaderData
+192 (int (*)(...))QTransposeProxyModel::itemData
+200 (int (*)(...))QTransposeProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QAbstractProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QTransposeProxyModel::insertRows
+272 (int (*)(...))QTransposeProxyModel::insertColumns
+280 (int (*)(...))QTransposeProxyModel::removeRows
+288 (int (*)(...))QTransposeProxyModel::removeColumns
+296 (int (*)(...))QTransposeProxyModel::moveRows
+304 (int (*)(...))QTransposeProxyModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QTransposeProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QTransposeProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QTransposeProxyModel::setSourceModel
+416 (int (*)(...))QTransposeProxyModel::mapToSource
+424 (int (*)(...))QTransposeProxyModel::mapFromSource
+432 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+440 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QTransposeProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QTransposeProxyModel (0x0x7f5f6458b4e0) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f5f6458b5b0) 0
+ primary-for QTransposeProxyModel (0x0x7f5f6458b4e0)
+ QAbstractItemModel (0x0x7f5f6458b618) 0
+ primary-for QAbstractProxyModel (0x0x7f5f6458b5b0)
+ QObject (0x0x7f5f5e693480) 0
+ primary-for QAbstractItemModel (0x0x7f5f6458b618)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f5f5e693660) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f5f5de10e40) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7f5f5de10f60) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7f5f5cebfde0) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7f5f6437faf8) 0
+ QList<QXmlStreamAttribute> (0x0x7f5f6437fb60) 0
+ QListSpecialMethods<QXmlStreamAttribute> (0x0x7f5f6437fa90) 0 empty
+ QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7f5f5cb31ea0) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f5f5caf1720) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7f5f5c7f0de0) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7f5f5c85a480) 0
+
+Vtable for QXmlStreamEntityResolver
+QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QXmlStreamEntityResolver)
+16 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+24 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+32 (int (*)(...))QXmlStreamEntityResolver::resolveEntity
+40 (int (*)(...))QXmlStreamEntityResolver::resolveUndeclaredEntity
+
+Class QXmlStreamEntityResolver
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamEntityResolver (0x0x7f5f5c589c00) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f5f5c589c60) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f5f5bc0c240) 0
+
+Vtable for QPaintDevice
+QPaintDevice::_ZTV12QPaintDevice: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDevice
+ size=16 align=8
+ base size=10 base align=8
+QPaintDevice (0x0x7f5f5bc0c420) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7f5f5bc0cea0) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7f5f5ba63ba0) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7f5f5ba63b40) 0
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7f5f644c3c00) 0
+
+Class QPolygon
+ size=24 align=8
+ base size=24 base align=8
+QPolygon (0x0x7f5f643cdc30) 0
+ QList<QPoint> (0x0x7f5f643cdbc8) 0
+ QListSpecialMethods<QPoint> (0x0x7f5f643cdd00) 0 empty
+ QListSpecialMethodsBase<QPoint> (0x0x7f5f64cf2900) 0 empty
+
+Class QPolygonF
+ size=24 align=8
+ base size=24 base align=8
+QPolygonF (0x0x7f5f643d4068) 0
+ QList<QPointF> (0x0x7f5f643d40d0) 0
+ QListSpecialMethods<QPointF> (0x0x7f5f643d4000) 0 empty
+ QListSpecialMethodsBase<QPointF> (0x0x7f5f5fd2b540) 0 empty
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7f5f5e59fd20) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7f5f5e59fcc0) 0
+
+Class QTransform::Affine
+ size=8 align=8
+ base size=8 base align=8
+QTransform::Affine (0x0x7f5f5c9e7240) 0
+
+Class QTransform
+ size=80 align=8
+ base size=74 base align=8
+QTransform (0x0x7f5f5c9e71e0) 0
+
+Vtable for QImage
+QImage::_ZTV6QImage: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QImage)
+16 (int (*)(...))QImage::~QImage
+24 (int (*)(...))QImage::~QImage
+32 (int (*)(...))QImage::devType
+40 (int (*)(...))QImage::paintEngine
+48 (int (*)(...))QImage::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QImage
+ size=24 align=8
+ base size=24 base align=8
+QImage (0x0x7f5f643ec0d0) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+ QPaintDevice (0x0x7f5f5b9f3de0) 0
+ primary-for QImage (0x0x7f5f643ec0d0)
+
+Vtable for QPixmap
+QPixmap::_ZTV7QPixmap: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QPixmap)
+16 (int (*)(...))QPixmap::~QPixmap
+24 (int (*)(...))QPixmap::~QPixmap
+32 (int (*)(...))QPixmap::devType
+40 (int (*)(...))QPixmap::paintEngine
+48 (int (*)(...))QPixmap::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPixmap
+ size=24 align=8
+ base size=24 base align=8
+QPixmap (0x0x7f5f644cac98) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+ QPaintDevice (0x0x7f5f5c4de5a0) 0
+ primary-for QPixmap (0x0x7f5f644cac98)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7f5f5afaa0c0) 0
+
+Vtable for QAbstractFileIconProvider
+QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAbstractFileIconProvider)
+16 (int (*)(...))QAbstractFileIconProvider::~QAbstractFileIconProvider
+24 (int (*)(...))QAbstractFileIconProvider::~QAbstractFileIconProvider
+32 (int (*)(...))QAbstractFileIconProvider::icon
+40 (int (*)(...))QAbstractFileIconProvider::icon
+48 (int (*)(...))QAbstractFileIconProvider::type
+56 (int (*)(...))QAbstractFileIconProvider::setOptions
+64 (int (*)(...))QAbstractFileIconProvider::options
+
+Class QAbstractFileIconProvider
+ size=16 align=8
+ base size=16 base align=8
+QAbstractFileIconProvider (0x0x7f5f5f7a73c0) 0
+ vptr=((& QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider) + 16)
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7f5f5f7a78a0) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7f5f5ac43600) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7f5f5ac62540) 0
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7f5f5acafd20) 0 empty
+
+Vtable for QScreen
+QScreen::_ZTV7QScreen: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QScreen)
+16 (int (*)(...))QScreen::metaObject
+24 (int (*)(...))QScreen::qt_metacast
+32 (int (*)(...))QScreen::qt_metacall
+40 (int (*)(...))QScreen::~QScreen
+48 (int (*)(...))QScreen::~QScreen
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QScreen
+ size=16 align=8
+ base size=16 base align=8
+QScreen (0x0x7f5f644f8bc8) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+ QObject (0x0x7f5f5acafcc0) 0
+ primary-for QScreen (0x0x7f5f644f8bc8)
+
+Class QInputDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDevice::QPrivateSignal (0x0x7f5f5acaff00) 0 empty
+
+Vtable for QInputDevice
+QInputDevice::_ZTV12QInputDevice: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputDevice)
+16 (int (*)(...))QInputDevice::metaObject
+24 (int (*)(...))QInputDevice::qt_metacast
+32 (int (*)(...))QInputDevice::qt_metacall
+40 (int (*)(...))QInputDevice::~QInputDevice
+48 (int (*)(...))QInputDevice::~QInputDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QInputDevice
+ size=16 align=8
+ base size=16 base align=8
+QInputDevice (0x0x7f5f644f8c30) 0
+ vptr=((& QInputDevice::_ZTV12QInputDevice) + 16)
+ QObject (0x0x7f5f5acafea0) 0
+ primary-for QInputDevice (0x0x7f5f644f8c30)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7f5f5accc840) 0
+
+Class QPointingDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPointingDevice::QPrivateSignal (0x0x7f5f5acf71e0) 0 empty
+
+Vtable for QPointingDevice
+QPointingDevice::_ZTV15QPointingDevice: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QPointingDevice)
+16 (int (*)(...))QPointingDevice::metaObject
+24 (int (*)(...))QPointingDevice::qt_metacast
+32 (int (*)(...))QPointingDevice::qt_metacall
+40 (int (*)(...))QPointingDevice::~QPointingDevice
+48 (int (*)(...))QPointingDevice::~QPointingDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPointingDevice
+ size=16 align=8
+ base size=16 base align=8
+QPointingDevice (0x0x7f5f64502bc8) 0
+ vptr=((& QPointingDevice::_ZTV15QPointingDevice) + 16)
+ QInputDevice (0x0x7f5f64502c98) 0
+ primary-for QPointingDevice (0x0x7f5f64502bc8)
+ QObject (0x0x7f5f5acf7180) 0
+ primary-for QInputDevice (0x0x7f5f64502c98)
+
+Class QEventPoint
+ size=8 align=8
+ base size=8 base align=8
+QEventPoint (0x0x7f5f5acf7840) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7f5f5893f660) 0
+
+Vtable for QInputEvent
+QInputEvent::_ZTV11QInputEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QInputEvent)
+16 (int (*)(...))QInputEvent::~QInputEvent
+24 (int (*)(...))QInputEvent::~QInputEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QInputEvent
+ size=40 align=8
+ base size=40 base align=8
+QInputEvent (0x0x7f5f64515680) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+ QEvent (0x0x7f5f58964600) 0
+ primary-for QInputEvent (0x0x7f5f64515680)
+
+Vtable for QPointerEvent
+QPointerEvent::_ZTV13QPointerEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPointerEvent)
+16 (int (*)(...))QPointerEvent::~QPointerEvent
+24 (int (*)(...))QPointerEvent::~QPointerEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QPointerEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QPointerEvent::isBeginEvent
+64 (int (*)(...))QPointerEvent::isUpdateEvent
+72 (int (*)(...))QPointerEvent::isEndEvent
+
+Class QPointerEvent
+ size=64 align=8
+ base size=64 base align=8
+QPointerEvent (0x0x7f5f645156e8) 0
+ vptr=((& QPointerEvent::_ZTV13QPointerEvent) + 16)
+ QInputEvent (0x0x7f5f64515750) 0
+ primary-for QPointerEvent (0x0x7f5f645156e8)
+ QEvent (0x0x7f5f58964ae0) 0
+ primary-for QInputEvent (0x0x7f5f64515750)
+
+Vtable for QSinglePointEvent
+QSinglePointEvent::_ZTV17QSinglePointEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSinglePointEvent)
+16 (int (*)(...))QSinglePointEvent::~QSinglePointEvent
+24 (int (*)(...))QSinglePointEvent::~QSinglePointEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QSinglePointEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QSinglePointEvent
+ size=80 align=8
+ base size=80 base align=8
+QSinglePointEvent (0x0x7f5f64515ea0) 0
+ vptr=((& QSinglePointEvent::_ZTV17QSinglePointEvent) + 16)
+ QPointerEvent (0x0x7f5f64515f08) 0
+ primary-for QSinglePointEvent (0x0x7f5f64515ea0)
+ QInputEvent (0x0x7f5f64515f70) 0
+ primary-for QPointerEvent (0x0x7f5f64515f08)
+ QEvent (0x0x7f5f589999c0) 0
+ primary-for QInputEvent (0x0x7f5f64515f70)
+
+Vtable for QEnterEvent
+QEnterEvent::_ZTV11QEnterEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QEnterEvent)
+16 (int (*)(...))QEnterEvent::~QEnterEvent
+24 (int (*)(...))QEnterEvent::~QEnterEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QEnterEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QEnterEvent (0x0x7f5f64516000) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+ QSinglePointEvent (0x0x7f5f645160d0) 0
+ primary-for QEnterEvent (0x0x7f5f64516000)
+ QPointerEvent (0x0x7f5f64516138) 0
+ primary-for QSinglePointEvent (0x0x7f5f645160d0)
+ QInputEvent (0x0x7f5f645161a0) 0
+ primary-for QPointerEvent (0x0x7f5f64516138)
+ QEvent (0x0x7f5f58999ea0) 0
+ primary-for QInputEvent (0x0x7f5f645161a0)
+
+Vtable for QMouseEvent
+QMouseEvent::_ZTV11QMouseEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMouseEvent)
+16 (int (*)(...))QMouseEvent::~QMouseEvent
+24 (int (*)(...))QMouseEvent::~QMouseEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QMouseEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QMouseEvent
+ size=80 align=8
+ base size=80 base align=8
+QMouseEvent (0x0x7f5f64516208) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+ QSinglePointEvent (0x0x7f5f64516270) 0
+ primary-for QMouseEvent (0x0x7f5f64516208)
+ QPointerEvent (0x0x7f5f645162d8) 0
+ primary-for QSinglePointEvent (0x0x7f5f64516270)
+ QInputEvent (0x0x7f5f64516340) 0
+ primary-for QPointerEvent (0x0x7f5f645162d8)
+ QEvent (0x0x7f5f589b1660) 0
+ primary-for QInputEvent (0x0x7f5f64516340)
+
+Vtable for QHoverEvent
+QHoverEvent::_ZTV11QHoverEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHoverEvent)
+16 (int (*)(...))QHoverEvent::~QHoverEvent
+24 (int (*)(...))QHoverEvent::~QHoverEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QHoverEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QHoverEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QHoverEvent
+ size=96 align=8
+ base size=96 base align=8
+QHoverEvent (0x0x7f5f645163a8) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+ QSinglePointEvent (0x0x7f5f64516410) 0
+ primary-for QHoverEvent (0x0x7f5f645163a8)
+ QPointerEvent (0x0x7f5f64516478) 0
+ primary-for QSinglePointEvent (0x0x7f5f64516410)
+ QInputEvent (0x0x7f5f645164e0) 0
+ primary-for QPointerEvent (0x0x7f5f64516478)
+ QEvent (0x0x7f5f589b1c00) 0
+ primary-for QInputEvent (0x0x7f5f645164e0)
+
+Vtable for QWheelEvent
+QWheelEvent::_ZTV11QWheelEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWheelEvent)
+16 (int (*)(...))QWheelEvent::~QWheelEvent
+24 (int (*)(...))QWheelEvent::~QWheelEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QWheelEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QWheelEvent::isBeginEvent
+64 (int (*)(...))QWheelEvent::isUpdateEvent
+72 (int (*)(...))QWheelEvent::isEndEvent
+
+Class QWheelEvent
+ size=96 align=8
+ base size=96 base align=8
+QWheelEvent (0x0x7f5f64516548) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+ QSinglePointEvent (0x0x7f5f645165b0) 0
+ primary-for QWheelEvent (0x0x7f5f64516548)
+ QPointerEvent (0x0x7f5f64516618) 0
+ primary-for QSinglePointEvent (0x0x7f5f645165b0)
+ QInputEvent (0x0x7f5f64516680) 0
+ primary-for QPointerEvent (0x0x7f5f64516618)
+ QEvent (0x0x7f5f589c7060) 0
+ primary-for QInputEvent (0x0x7f5f64516680)
+
+Vtable for QTabletEvent
+QTabletEvent::_ZTV12QTabletEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTabletEvent)
+16 (int (*)(...))QTabletEvent::~QTabletEvent
+24 (int (*)(...))QTabletEvent::~QTabletEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QTabletEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QTabletEvent
+ size=96 align=8
+ base size=96 base align=8
+QTabletEvent (0x0x7f5f64516750) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+ QSinglePointEvent (0x0x7f5f645167b8) 0
+ primary-for QTabletEvent (0x0x7f5f64516750)
+ QPointerEvent (0x0x7f5f64516820) 0
+ primary-for QSinglePointEvent (0x0x7f5f645167b8)
+ QInputEvent (0x0x7f5f64516888) 0
+ primary-for QPointerEvent (0x0x7f5f64516820)
+ QEvent (0x0x7f5f589c7540) 0
+ primary-for QInputEvent (0x0x7f5f64516888)
+
+Vtable for QNativeGestureEvent
+QNativeGestureEvent::_ZTV19QNativeGestureEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNativeGestureEvent)
+16 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+24 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QNativeGestureEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QNativeGestureEvent
+ size=112 align=8
+ base size=112 base align=8
+QNativeGestureEvent (0x0x7f5f645168f0) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+ QSinglePointEvent (0x0x7f5f64516958) 0
+ primary-for QNativeGestureEvent (0x0x7f5f645168f0)
+ QPointerEvent (0x0x7f5f645169c0) 0
+ primary-for QSinglePointEvent (0x0x7f5f64516958)
+ QInputEvent (0x0x7f5f64516a28) 0
+ primary-for QPointerEvent (0x0x7f5f645169c0)
+ QEvent (0x0x7f5f589c7de0) 0
+ primary-for QInputEvent (0x0x7f5f64516a28)
+
+Vtable for QKeyEvent
+QKeyEvent::_ZTV9QKeyEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QKeyEvent)
+16 (int (*)(...))QKeyEvent::~QKeyEvent
+24 (int (*)(...))QKeyEvent::~QKeyEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QKeyEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QKeyEvent
+ size=88 align=8
+ base size=82 base align=8
+QKeyEvent (0x0x7f5f64516a90) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+ QInputEvent (0x0x7f5f64516af8) 0
+ primary-for QKeyEvent (0x0x7f5f64516a90)
+ QEvent (0x0x7f5f589e5300) 0
+ primary-for QInputEvent (0x0x7f5f64516af8)
+
+Vtable for QFocusEvent
+QFocusEvent::_ZTV11QFocusEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusEvent)
+16 (int (*)(...))QFocusEvent::~QFocusEvent
+24 (int (*)(...))QFocusEvent::~QFocusEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QFocusEvent::clone
+
+Class QFocusEvent
+ size=24 align=8
+ base size=20 base align=8
+QFocusEvent (0x0x7f5f64516b60) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+ QEvent (0x0x7f5f589e5900) 0
+ primary-for QFocusEvent (0x0x7f5f64516b60)
+
+Vtable for QPaintEvent
+QPaintEvent::_ZTV11QPaintEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPaintEvent)
+16 (int (*)(...))QPaintEvent::~QPaintEvent
+24 (int (*)(...))QPaintEvent::~QPaintEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QPaintEvent::clone
+
+Class QPaintEvent
+ size=48 align=8
+ base size=41 base align=8
+QPaintEvent (0x0x7f5f64516bc8) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+ QEvent (0x0x7f5f589e5c60) 0
+ primary-for QPaintEvent (0x0x7f5f64516bc8)
+
+Vtable for QMoveEvent
+QMoveEvent::_ZTV10QMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QMoveEvent)
+16 (int (*)(...))QMoveEvent::~QMoveEvent
+24 (int (*)(...))QMoveEvent::~QMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QMoveEvent::clone
+
+Class QMoveEvent
+ size=32 align=8
+ base size=32 base align=8
+QMoveEvent (0x0x7f5f64516c30) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+ QEvent (0x0x7f5f589e5f60) 0
+ primary-for QMoveEvent (0x0x7f5f64516c30)
+
+Vtable for QExposeEvent
+QExposeEvent::_ZTV12QExposeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QExposeEvent)
+16 (int (*)(...))QExposeEvent::~QExposeEvent
+24 (int (*)(...))QExposeEvent::~QExposeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QExposeEvent::clone
+
+Class QExposeEvent
+ size=24 align=8
+ base size=24 base align=8
+QExposeEvent (0x0x7f5f64516c98) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+ QEvent (0x0x7f5f589ff300) 0
+ primary-for QExposeEvent (0x0x7f5f64516c98)
+
+Vtable for QPlatformSurfaceEvent
+QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QPlatformSurfaceEvent)
+16 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+24 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QPlatformSurfaceEvent::clone
+
+Class QPlatformSurfaceEvent
+ size=24 align=8
+ base size=20 base align=8
+QPlatformSurfaceEvent (0x0x7f5f64516d68) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+ QEvent (0x0x7f5f589ff5a0) 0
+ primary-for QPlatformSurfaceEvent (0x0x7f5f64516d68)
+
+Vtable for QResizeEvent
+QResizeEvent::_ZTV12QResizeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QResizeEvent)
+16 (int (*)(...))QResizeEvent::~QResizeEvent
+24 (int (*)(...))QResizeEvent::~QResizeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QResizeEvent::clone
+
+Class QResizeEvent
+ size=32 align=8
+ base size=32 base align=8
+QResizeEvent (0x0x7f5f64516dd0) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+ QEvent (0x0x7f5f589ff8a0) 0
+ primary-for QResizeEvent (0x0x7f5f64516dd0)
+
+Vtable for QCloseEvent
+QCloseEvent::_ZTV11QCloseEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QCloseEvent)
+16 (int (*)(...))QCloseEvent::~QCloseEvent
+24 (int (*)(...))QCloseEvent::~QCloseEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QCloseEvent
+ size=16 align=8
+ base size=16 base align=8
+QCloseEvent (0x0x7f5f64516e38) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+ QEvent (0x0x7f5f589ffc00) 0
+ primary-for QCloseEvent (0x0x7f5f64516e38)
+
+Vtable for QIconDragEvent
+QIconDragEvent::_ZTV14QIconDragEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QIconDragEvent)
+16 (int (*)(...))QIconDragEvent::~QIconDragEvent
+24 (int (*)(...))QIconDragEvent::~QIconDragEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QIconDragEvent
+ size=16 align=8
+ base size=16 base align=8
+QIconDragEvent (0x0x7f5f64516ea0) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+ QEvent (0x0x7f5f589ffc60) 0
+ primary-for QIconDragEvent (0x0x7f5f64516ea0)
+
+Vtable for QShowEvent
+QShowEvent::_ZTV10QShowEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QShowEvent)
+16 (int (*)(...))QShowEvent::~QShowEvent
+24 (int (*)(...))QShowEvent::~QShowEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QShowEvent
+ size=16 align=8
+ base size=16 base align=8
+QShowEvent (0x0x7f5f64516f08) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+ QEvent (0x0x7f5f589ffcc0) 0
+ primary-for QShowEvent (0x0x7f5f64516f08)
+
+Vtable for QHideEvent
+QHideEvent::_ZTV10QHideEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHideEvent)
+16 (int (*)(...))QHideEvent::~QHideEvent
+24 (int (*)(...))QHideEvent::~QHideEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QHideEvent
+ size=16 align=8
+ base size=16 base align=8
+QHideEvent (0x0x7f5f64516f70) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+ QEvent (0x0x7f5f589ffd20) 0
+ primary-for QHideEvent (0x0x7f5f64516f70)
+
+Vtable for QContextMenuEvent
+QContextMenuEvent::_ZTV17QContextMenuEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QContextMenuEvent)
+16 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+24 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QContextMenuEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QContextMenuEvent
+ size=64 align=8
+ base size=57 base align=8
+QContextMenuEvent (0x0x7f5f64518000) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+ QInputEvent (0x0x7f5f645180d0) 0
+ primary-for QContextMenuEvent (0x0x7f5f64518000)
+ QEvent (0x0x7f5f589ffd80) 0
+ primary-for QInputEvent (0x0x7f5f645180d0)
+
+Class QInputMethodEvent::Attribute
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodEvent::Attribute (0x0x7f5f58a1e360) 0
+
+Vtable for QInputMethodEvent
+QInputMethodEvent::_ZTV17QInputMethodEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QInputMethodEvent)
+16 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+24 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputMethodEvent::clone
+
+Class QInputMethodEvent
+ size=96 align=8
+ base size=96 base align=8
+QInputMethodEvent (0x0x7f5f64518138) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+ QEvent (0x0x7f5f58a1e300) 0
+ primary-for QInputMethodEvent (0x0x7f5f64518138)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=40 align=8
+ base size=40 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7f5f58a5bb40) 0
+
+Vtable for QInputMethodQueryEvent
+QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QInputMethodQueryEvent)
+16 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+24 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputMethodQueryEvent::clone
+
+Class QInputMethodQueryEvent
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodQueryEvent (0x0x7f5f6451f410) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+ QEvent (0x0x7f5f58a5bae0) 0
+ primary-for QInputMethodQueryEvent (0x0x7f5f6451f410)
+
+Vtable for QDropEvent
+QDropEvent::_ZTV10QDropEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDropEvent)
+16 (int (*)(...))QDropEvent::~QDropEvent
+24 (int (*)(...))QDropEvent::~QDropEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDropEvent::clone
+
+Class QDropEvent
+ size=64 align=8
+ base size=64 base align=8
+QDropEvent (0x0x7f5f64126680) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+ QEvent (0x0x7f5f58a97c60) 0
+ primary-for QDropEvent (0x0x7f5f64126680)
+
+Vtable for QDragMoveEvent
+QDragMoveEvent::_ZTV14QDragMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDragMoveEvent)
+16 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+24 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDragMoveEvent::clone
+
+Class QDragMoveEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragMoveEvent (0x0x7f5f641266e8) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+ QDropEvent (0x0x7f5f64126750) 0
+ primary-for QDragMoveEvent (0x0x7f5f641266e8)
+ QEvent (0x0x7f5f58aa83c0) 0
+ primary-for QDropEvent (0x0x7f5f64126750)
+
+Vtable for QDragEnterEvent
+QDragEnterEvent::_ZTV15QDragEnterEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragEnterEvent)
+16 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+24 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDragMoveEvent::clone
+
+Class QDragEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragEnterEvent (0x0x7f5f64126820) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+ QDragMoveEvent (0x0x7f5f64126888) 0
+ primary-for QDragEnterEvent (0x0x7f5f64126820)
+ QDropEvent (0x0x7f5f641268f0) 0
+ primary-for QDragMoveEvent (0x0x7f5f64126888)
+ QEvent (0x0x7f5f58aa8840) 0
+ primary-for QDropEvent (0x0x7f5f641268f0)
+
+Vtable for QDragLeaveEvent
+QDragLeaveEvent::_ZTV15QDragLeaveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragLeaveEvent)
+16 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+24 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QDragLeaveEvent
+ size=16 align=8
+ base size=16 base align=8
+QDragLeaveEvent (0x0x7f5f64126958) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+ QEvent (0x0x7f5f58aa88a0) 0
+ primary-for QDragLeaveEvent (0x0x7f5f64126958)
+
+Vtable for QHelpEvent
+QHelpEvent::_ZTV10QHelpEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHelpEvent)
+16 (int (*)(...))QHelpEvent::~QHelpEvent
+24 (int (*)(...))QHelpEvent::~QHelpEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QHelpEvent::clone
+
+Class QHelpEvent
+ size=32 align=8
+ base size=32 base align=8
+QHelpEvent (0x0x7f5f641269c0) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+ QEvent (0x0x7f5f58aa8900) 0
+ primary-for QHelpEvent (0x0x7f5f641269c0)
+
+Vtable for QStatusTipEvent
+QStatusTipEvent::_ZTV15QStatusTipEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QStatusTipEvent)
+16 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+24 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QStatusTipEvent::clone
+
+Class QStatusTipEvent
+ size=40 align=8
+ base size=40 base align=8
+QStatusTipEvent (0x0x7f5f64126a28) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+ QEvent (0x0x7f5f58aa8de0) 0
+ primary-for QStatusTipEvent (0x0x7f5f64126a28)
+
+Vtable for QWhatsThisClickedEvent
+QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QWhatsThisClickedEvent)
+16 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+24 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QWhatsThisClickedEvent::clone
+
+Class QWhatsThisClickedEvent
+ size=40 align=8
+ base size=40 base align=8
+QWhatsThisClickedEvent (0x0x7f5f64126a90) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+ QEvent (0x0x7f5f58ac10c0) 0
+ primary-for QWhatsThisClickedEvent (0x0x7f5f64126a90)
+
+Vtable for QActionEvent
+QActionEvent::_ZTV12QActionEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionEvent)
+16 (int (*)(...))QActionEvent::~QActionEvent
+24 (int (*)(...))QActionEvent::~QActionEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QActionEvent::clone
+
+Class QActionEvent
+ size=32 align=8
+ base size=32 base align=8
+QActionEvent (0x0x7f5f64126af8) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+ QEvent (0x0x7f5f58ac1360) 0
+ primary-for QActionEvent (0x0x7f5f64126af8)
+
+Vtable for QFileOpenEvent
+QFileOpenEvent::_ZTV14QFileOpenEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QFileOpenEvent)
+16 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+24 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QFileOpenEvent::clone
+
+Class QFileOpenEvent
+ size=48 align=8
+ base size=48 base align=8
+QFileOpenEvent (0x0x7f5f64126bc8) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+ QEvent (0x0x7f5f58ac16c0) 0
+ primary-for QFileOpenEvent (0x0x7f5f64126bc8)
+
+Vtable for QToolBarChangeEvent
+QToolBarChangeEvent::_ZTV19QToolBarChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QToolBarChangeEvent)
+16 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+24 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QToolBarChangeEvent::clone
+
+Class QToolBarChangeEvent
+ size=24 align=8
+ base size=17 base align=8
+QToolBarChangeEvent (0x0x7f5f64126c30) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+ QEvent (0x0x7f5f58ac19c0) 0
+ primary-for QToolBarChangeEvent (0x0x7f5f64126c30)
+
+Vtable for QShortcutEvent
+QShortcutEvent::_ZTV14QShortcutEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QShortcutEvent)
+16 (int (*)(...))QShortcutEvent::~QShortcutEvent
+24 (int (*)(...))QShortcutEvent::~QShortcutEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QShortcutEvent::clone
+
+Class QShortcutEvent
+ size=32 align=8
+ base size=29 base align=8
+QShortcutEvent (0x0x7f5f64126c98) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+ QEvent (0x0x7f5f58ac1cc0) 0
+ primary-for QShortcutEvent (0x0x7f5f64126c98)
+
+Vtable for QWindowStateChangeEvent
+QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QWindowStateChangeEvent)
+16 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+24 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QWindowStateChangeEvent::clone
+
+Class QWindowStateChangeEvent
+ size=24 align=8
+ base size=21 base align=8
+QWindowStateChangeEvent (0x0x7f5f64126d00) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+ QEvent (0x0x7f5f58ad9060) 0
+ primary-for QWindowStateChangeEvent (0x0x7f5f64126d00)
+
+Vtable for QTouchEvent
+QTouchEvent::_ZTV11QTouchEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTouchEvent)
+16 (int (*)(...))QTouchEvent::~QTouchEvent
+24 (int (*)(...))QTouchEvent::~QTouchEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QTouchEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QTouchEvent::isBeginEvent
+64 (int (*)(...))QTouchEvent::isUpdateEvent
+72 (int (*)(...))QTouchEvent::isEndEvent
+
+Class QTouchEvent
+ size=80 align=8
+ base size=79 base align=8
+QTouchEvent (0x0x7f5f64126d68) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+ QPointerEvent (0x0x7f5f64126dd0) 0
+ primary-for QTouchEvent (0x0x7f5f64126d68)
+ QInputEvent (0x0x7f5f64126e38) 0
+ primary-for QPointerEvent (0x0x7f5f64126dd0)
+ QEvent (0x0x7f5f58ad9360) 0
+ primary-for QInputEvent (0x0x7f5f64126e38)
+
+Vtable for QScrollPrepareEvent
+QScrollPrepareEvent::_ZTV19QScrollPrepareEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollPrepareEvent)
+16 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+24 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScrollPrepareEvent::clone
+
+Class QScrollPrepareEvent
+ size=96 align=8
+ base size=96 base align=8
+QScrollPrepareEvent (0x0x7f5f64126ea0) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+ QEvent (0x0x7f5f58ad96c0) 0
+ primary-for QScrollPrepareEvent (0x0x7f5f64126ea0)
+
+Vtable for QScrollEvent
+QScrollEvent::_ZTV12QScrollEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QScrollEvent)
+16 (int (*)(...))QScrollEvent::~QScrollEvent
+24 (int (*)(...))QScrollEvent::~QScrollEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScrollEvent::clone
+
+Class QScrollEvent
+ size=56 align=8
+ base size=52 base align=8
+QScrollEvent (0x0x7f5f64126f08) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+ QEvent (0x0x7f5f58ad9ae0) 0
+ primary-for QScrollEvent (0x0x7f5f64126f08)
+
+Vtable for QScreenOrientationChangeEvent
+QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QScreenOrientationChangeEvent)
+16 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+24 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScreenOrientationChangeEvent::clone
+
+Class QScreenOrientationChangeEvent
+ size=32 align=8
+ base size=28 base align=8
+QScreenOrientationChangeEvent (0x0x7f5f64127000) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+ QEvent (0x0x7f5f58ad9ea0) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7f5f64127000)
+
+Vtable for QApplicationStateChangeEvent
+QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QApplicationStateChangeEvent)
+16 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+24 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QApplicationStateChangeEvent::clone
+
+Class QApplicationStateChangeEvent
+ size=24 align=8
+ base size=20 base align=8
+QApplicationStateChangeEvent (0x0x7f5f64127068) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+ QEvent (0x0x7f5f58af5240) 0
+ primary-for QApplicationStateChangeEvent (0x0x7f5f64127068)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7f5f58af5540) 0
+
+Class QFontDatabase
+ size=1 align=1
+ base size=0 base align=1
+QFontDatabase (0x0x7f5f587345a0) 0 empty
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7f5f58734780) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7f5f5876e660) 0
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7f5f5879ad20) 0
+
+Class QBrushData
+ size=104 align=8
+ base size=104 base align=8
+QBrushData (0x0x7f5f587bf8a0) 0
+
+Class QGradient::QGradientData
+ size=48 align=8
+ base size=48 base align=8
+QGradient::QGradientData (0x0x7f5f587bfae0) 0
+
+Class QGradient
+ size=88 align=8
+ base size=88 base align=8
+QGradient (0x0x7f5f587bfa80) 0
+
+Class QLinearGradient
+ size=88 align=8
+ base size=88 base align=8
+QLinearGradient (0x0x7f5f5ead8ea0) 0
+ QGradient (0x0x7f5f587d79c0) 0
+
+Class QRadialGradient
+ size=88 align=8
+ base size=88 base align=8
+QRadialGradient (0x0x7f5f5eb0b208) 0
+ QGradient (0x0x7f5f587d7ae0) 0
+
+Class QConicalGradient
+ size=88 align=8
+ base size=88 base align=8
+QConicalGradient (0x0x7f5f5eb0b270) 0
+ QGradient (0x0x7f5f587d7c00) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7f5f587d7cc0) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7f5f58826d20) 0
+
+Class QTextOption
+ size=24 align=8
+ base size=24 base align=8
+QTextOption (0x0x7f5f58826cc0) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7f5f5883aa80) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7f5f5885d780) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7f5f5bad0958) 0
+ QTextFormat (0x0x7f5f588b9de0) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7f5f588fe820) 0
+ QTextFormat (0x0x7f5f58903300) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7f5f5891e478) 0
+ QTextFormat (0x0x7f5f5891d840) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7f5f58536068) 0
+ QTextCharFormat (0x0x7f5f585360d0) 0
+ QTextFormat (0x0x7f5f58534720) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7f5f58547d00) 0
+ QTextFormat (0x0x7f5f5854b5a0) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7f5f58567958) 0
+ QTextFrameFormat (0x0x7f5f585679c0) 0
+ QTextFormat (0x0x7f5f585689c0) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7f5f58585618) 0
+ QTextCharFormat (0x0x7f5f58585680) 0
+ QTextFormat (0x0x7f5f58583c60) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7f5f585ae1e0) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7f5f585e3840) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7f5f585e3c60) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7f5f585e3c00) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7f5f5862dd20) 0
+
+Vtable for QAbstractUndoItem
+QAbstractUndoItem::_ZTV17QAbstractUndoItem: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAbstractUndoItem)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractUndoItem
+ size=8 align=8
+ base size=8 base align=8
+QAbstractUndoItem (0x0x7f5f586411e0) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7f5f58641480) 0 empty
+
+Vtable for QTextDocument
+QTextDocument::_ZTV13QTextDocument: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QTextDocument)
+16 (int (*)(...))QTextDocument::metaObject
+24 (int (*)(...))QTextDocument::qt_metacast
+32 (int (*)(...))QTextDocument::qt_metacall
+40 (int (*)(...))QTextDocument::~QTextDocument
+48 (int (*)(...))QTextDocument::~QTextDocument
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextDocument::clear
+120 (int (*)(...))QTextDocument::createObject
+128 (int (*)(...))QTextDocument::loadResource
+
+Class QTextDocument
+ size=16 align=8
+ base size=16 base align=8
+QTextDocument (0x0x7f5f58636270) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+ QObject (0x0x7f5f58641420) 0
+ primary-for QTextDocument (0x0x7f5f58636270)
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7f5f58641c60) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7f5f586c9000) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7f5f586c9060) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=80 align=8
+ base size=80 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7f5f586c90c0) 0
+
+Vtable for QAbstractTextDocumentLayout
+QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAbstractTextDocumentLayout)
+16 (int (*)(...))QAbstractTextDocumentLayout::metaObject
+24 (int (*)(...))QAbstractTextDocumentLayout::qt_metacast
+32 (int (*)(...))QAbstractTextDocumentLayout::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractTextDocumentLayout::resizeInlineObject
+176 (int (*)(...))QAbstractTextDocumentLayout::positionInlineObject
+184 (int (*)(...))QAbstractTextDocumentLayout::drawInlineObject
+
+Class QAbstractTextDocumentLayout
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTextDocumentLayout (0x0x7f5f586b95b0) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+ QObject (0x0x7f5f586b5f60) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f5f586b95b0)
+
+Vtable for QTextObjectInterface
+QTextObjectInterface::_ZTV20QTextObjectInterface: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextObjectInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QTextObjectInterface
+ size=8 align=8
+ base size=8 base align=8
+QTextObjectInterface (0x0x7f5f58719660) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7f5f587198a0) 0
+
+Vtable for QAccessible::ActivationObserver
+QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN11QAccessible18ActivationObserverE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessible::ActivationObserver
+ size=8 align=8
+ base size=8 base align=8
+QAccessible::ActivationObserver (0x0x7f5f58719900) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7f5f58719840) 0 empty
+
+Vtable for QAccessibleInterface
+QAccessibleInterface::_ZTV20QAccessibleInterface: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAccessibleInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QAccessibleInterface::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleInterface::focusChild
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleInterface (0x0x7f5f5833d180) 0 nearly-empty
+ vptr=((& QAccessibleInterface::_ZTV20QAccessibleInterface) + 16)
+
+Vtable for QAccessibleTextInterface
+QAccessibleTextInterface::_ZTV24QAccessibleTextInterface: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAccessibleTextInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))QAccessibleTextInterface::textBeforeOffset
+104 (int (*)(...))QAccessibleTextInterface::textAfterOffset
+112 (int (*)(...))QAccessibleTextInterface::textAtOffset
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTextInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTextInterface (0x0x7f5f5833d4e0) 0 nearly-empty
+ vptr=((& QAccessibleTextInterface::_ZTV24QAccessibleTextInterface) + 16)
+
+Vtable for QAccessibleEditableTextInterface
+QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleEditableTextInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleEditableTextInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleEditableTextInterface (0x0x7f5f5833d540) 0 nearly-empty
+ vptr=((& QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface) + 16)
+
+Vtable for QAccessibleValueInterface
+QAccessibleValueInterface::_ZTV25QAccessibleValueInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleValueInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleValueInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleValueInterface (0x0x7f5f5833d5a0) 0 nearly-empty
+ vptr=((& QAccessibleValueInterface::_ZTV25QAccessibleValueInterface) + 16)
+
+Vtable for QAccessibleTableCellInterface
+QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTableCellInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTableCellInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTableCellInterface (0x0x7f5f5833d600) 0 nearly-empty
+ vptr=((& QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface) + 16)
+
+Vtable for QAccessibleTableInterface
+QAccessibleTableInterface::_ZTV25QAccessibleTableInterface: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleTableInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTableInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTableInterface (0x0x7f5f5833d660) 0 nearly-empty
+ vptr=((& QAccessibleTableInterface::_ZTV25QAccessibleTableInterface) + 16)
+
+Vtable for QAccessibleActionInterface
+QAccessibleActionInterface::_ZTV26QAccessibleActionInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleActionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QAccessibleActionInterface::localizedActionName
+48 (int (*)(...))QAccessibleActionInterface::localizedActionDescription
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleActionInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleActionInterface (0x0x7f5f5833d6c0) 0 nearly-empty
+ vptr=((& QAccessibleActionInterface::_ZTV26QAccessibleActionInterface) + 16)
+
+Vtable for QAccessibleImageInterface
+QAccessibleImageInterface::_ZTV25QAccessibleImageInterface: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleImageInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleImageInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleImageInterface (0x0x7f5f5833d780) 0 nearly-empty
+ vptr=((& QAccessibleImageInterface::_ZTV25QAccessibleImageInterface) + 16)
+
+Vtable for QAccessibleEvent
+QAccessibleEvent::_ZTV16QAccessibleEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAccessibleEvent)
+16 (int (*)(...))QAccessibleEvent::~QAccessibleEvent
+24 (int (*)(...))QAccessibleEvent::~QAccessibleEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleEvent
+ size=32 align=8
+ base size=28 base align=8
+QAccessibleEvent (0x0x7f5f5833d7e0) 0
+ vptr=((& QAccessibleEvent::_ZTV16QAccessibleEvent) + 16)
+
+Vtable for QAccessibleStateChangeEvent
+QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleStateChangeEvent)
+16 (int (*)(...))QAccessibleStateChangeEvent::~QAccessibleStateChangeEvent
+24 (int (*)(...))QAccessibleStateChangeEvent::~QAccessibleStateChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleStateChangeEvent
+ size=40 align=8
+ base size=40 base align=8
+QAccessibleStateChangeEvent (0x0x7f5f5871ba90) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f5f5833dd20) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7f5f5871ba90)
+
+Vtable for QAccessibleTextCursorEvent
+QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextCursorEvent)
+16 (int (*)(...))QAccessibleTextCursorEvent::~QAccessibleTextCursorEvent
+24 (int (*)(...))QAccessibleTextCursorEvent::~QAccessibleTextCursorEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextCursorEvent
+ size=32 align=8
+ base size=32 base align=8
+QAccessibleTextCursorEvent (0x0x7f5f5871baf8) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+ QAccessibleEvent (0x0x7f5f58366120) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f5f5871baf8)
+
+Vtable for QAccessibleTextSelectionEvent
+QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTextSelectionEvent)
+16 (int (*)(...))QAccessibleTextSelectionEvent::~QAccessibleTextSelectionEvent
+24 (int (*)(...))QAccessibleTextSelectionEvent::~QAccessibleTextSelectionEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextSelectionEvent
+ size=40 align=8
+ base size=40 base align=8
+QAccessibleTextSelectionEvent (0x0x7f5f5871bb60) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f5f5871bbc8) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7f5f5871bb60)
+ QAccessibleEvent (0x0x7f5f58366540) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f5f5871bbc8)
+
+Vtable for QAccessibleTextInsertEvent
+QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextInsertEvent)
+16 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+24 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextInsertEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleTextInsertEvent (0x0x7f5f5871bc30) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f5f5871bc98) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7f5f5871bc30)
+ QAccessibleEvent (0x0x7f5f583669c0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f5f5871bc98)
+
+Vtable for QAccessibleTextRemoveEvent
+QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextRemoveEvent)
+16 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+24 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextRemoveEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleTextRemoveEvent (0x0x7f5f5871bd00) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f5f5871bd68) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7f5f5871bd00)
+ QAccessibleEvent (0x0x7f5f58366de0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f5f5871bd68)
+
+Vtable for QAccessibleTextUpdateEvent
+QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextUpdateEvent)
+16 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+24 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextUpdateEvent
+ size=88 align=8
+ base size=88 base align=8
+QAccessibleTextUpdateEvent (0x0x7f5f5871bdd0) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f5f5871be38) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7f5f5871bdd0)
+ QAccessibleEvent (0x0x7f5f5837c240) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f5f5871be38)
+
+Vtable for QAccessibleValueChangeEvent
+QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleValueChangeEvent)
+16 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+24 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleValueChangeEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleValueChangeEvent (0x0x7f5f5871bea0) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f5f5837c6c0) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7f5f5871bea0)
+
+Vtable for QAccessibleTableModelChangeEvent
+QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleTableModelChangeEvent)
+16 (int (*)(...))QAccessibleTableModelChangeEvent::~QAccessibleTableModelChangeEvent
+24 (int (*)(...))QAccessibleTableModelChangeEvent::~QAccessibleTableModelChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTableModelChangeEvent
+ size=48 align=8
+ base size=48 base align=8
+QAccessibleTableModelChangeEvent (0x0x7f5f5871bf08) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f5f5837cae0) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7f5f5871bf08)
+
+Vtable for QAccessibleBridge
+QAccessibleBridge::_ZTV17QAccessibleBridge: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleBridge)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridge
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleBridge (0x0x7f5f5838f3c0) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7f5f5838f660) 0 empty
+
+Vtable for QAccessibleBridgePlugin
+QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QAccessibleBridgePlugin)
+16 (int (*)(...))QAccessibleBridgePlugin::metaObject
+24 (int (*)(...))QAccessibleBridgePlugin::qt_metacast
+32 (int (*)(...))QAccessibleBridgePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridgePlugin
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleBridgePlugin (0x0x7f5f5871bf70) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+ QObject (0x0x7f5f5838f600) 0
+ primary-for QAccessibleBridgePlugin (0x0x7f5f5871bf70)
+
+Vtable for QAccessibleObject
+QAccessibleObject::_ZTV17QAccessibleObject: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleObject)
+16 0
+24 0
+32 (int (*)(...))QAccessibleObject::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleInterface::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleInterface::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleObject::rect
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleObject
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleObject (0x0x7f5f58398000) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+ QAccessibleInterface (0x0x7f5f5838f720) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f5f58398000)
+
+Vtable for QAccessibleApplication
+QAccessibleApplication::_ZTV22QAccessibleApplication: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QAccessibleApplication)
+16 (int (*)(...))QAccessibleApplication::~QAccessibleApplication
+24 (int (*)(...))QAccessibleApplication::~QAccessibleApplication
+32 (int (*)(...))QAccessibleObject::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleApplication::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleApplication::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))QAccessibleApplication::parent
+88 (int (*)(...))QAccessibleApplication::child
+96 (int (*)(...))QAccessibleApplication::childCount
+104 (int (*)(...))QAccessibleApplication::indexOfChild
+112 (int (*)(...))QAccessibleApplication::text
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleObject::rect
+136 (int (*)(...))QAccessibleApplication::role
+144 (int (*)(...))QAccessibleApplication::state
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleApplication
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleApplication (0x0x7f5f58398068) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+ QAccessibleObject (0x0x7f5f583980d0) 0
+ primary-for QAccessibleApplication (0x0x7f5f58398068)
+ QAccessibleInterface (0x0x7f5f5838f780) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f5f583980d0)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7f5f5838f840) 0 empty
+
+Vtable for QAccessiblePlugin
+QAccessiblePlugin::_ZTV17QAccessiblePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessiblePlugin)
+16 (int (*)(...))QAccessiblePlugin::metaObject
+24 (int (*)(...))QAccessiblePlugin::qt_metacast
+32 (int (*)(...))QAccessiblePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessiblePlugin
+ size=16 align=8
+ base size=16 base align=8
+QAccessiblePlugin (0x0x7f5f58398138) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+ QObject (0x0x7f5f5838f7e0) 0
+ primary-for QAccessiblePlugin (0x0x7f5f58398138)
+
+Class QAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAction::QPrivateSignal (0x0x7f5f5838f960) 0 empty
+
+Vtable for QAction
+QAction::_ZTV7QAction: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QAction)
+16 (int (*)(...))QAction::metaObject
+24 (int (*)(...))QAction::qt_metacast
+32 (int (*)(...))QAction::qt_metacall
+40 (int (*)(...))QAction::~QAction
+48 (int (*)(...))QAction::~QAction
+56 (int (*)(...))QAction::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QAction
+ size=16 align=8
+ base size=16 base align=8
+QAction (0x0x7f5f583981a0) 0
+ vptr=((& QAction::_ZTV7QAction) + 16)
+ QObject (0x0x7f5f5838f900) 0
+ primary-for QAction (0x0x7f5f583981a0)
+
+Class QActionGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QActionGroup::QPrivateSignal (0x0x7f5f583ba2a0) 0 empty
+
+Vtable for QActionGroup
+QActionGroup::_ZTV12QActionGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionGroup)
+16 (int (*)(...))QActionGroup::metaObject
+24 (int (*)(...))QActionGroup::qt_metacast
+32 (int (*)(...))QActionGroup::qt_metacall
+40 (int (*)(...))QActionGroup::~QActionGroup
+48 (int (*)(...))QActionGroup::~QActionGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QActionGroup
+ size=16 align=8
+ base size=16 base align=8
+QActionGroup (0x0x7f5f58398208) 0
+ vptr=((& QActionGroup::_ZTV12QActionGroup) + 16)
+ QObject (0x0x7f5f583ba240) 0
+ primary-for QActionGroup (0x0x7f5f58398208)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7f5f583ba540) 0
+
+Vtable for QSurface
+QSurface::_ZTV8QSurface: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSurface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+
+Class QSurface
+ size=24 align=8
+ base size=24 base align=8
+QSurface (0x0x7f5f583bad80) 0
+ vptr=((& QSurface::_ZTV8QSurface) + 16)
+
+Vtable for QBitmap
+QBitmap::_ZTV7QBitmap: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QBitmap)
+16 (int (*)(...))QBitmap::~QBitmap
+24 (int (*)(...))QBitmap::~QBitmap
+32 (int (*)(...))QPixmap::devType
+40 (int (*)(...))QPixmap::paintEngine
+48 (int (*)(...))QPixmap::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QBitmap
+ size=24 align=8
+ base size=24 base align=8
+QBitmap (0x0x7f5f583983a8) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+ QPixmap (0x0x7f5f58398410) 0
+ primary-for QBitmap (0x0x7f5f583983a8)
+ QPaintDevice (0x0x7f5f583ea0c0) 0
+ primary-for QPixmap (0x0x7f5f58398410)
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7f5f583f89c0) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7f5f58422ba0) 0 empty
+
+Vtable for QWindow
+QWindow::_ZTV7QWindow: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWindow)
+16 (int (*)(...))QWindow::metaObject
+24 (int (*)(...))QWindow::qt_metacast
+32 (int (*)(...))QWindow::qt_metacall
+40 (int (*)(...))QWindow::~QWindow
+48 (int (*)(...))QWindow::~QWindow
+56 (int (*)(...))QWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI7QWindow)
+328 (int (*)(...))QWindow::_ZThn16_N7QWindowD1Ev
+336 (int (*)(...))QWindow::_ZThn16_N7QWindowD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QWindow
+ size=40 align=8
+ base size=40 base align=8
+QWindow (0x0x7f5f583fd620) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+ QObject (0x0x7f5f58422ae0) 0
+ primary-for QWindow (0x0x7f5f583fd620)
+ QSurface (0x0x7f5f58422b40) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 328)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7f5f58449420) 0
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7f5f58449540) 0 empty
+
+Vtable for QClipboard
+QClipboard::_ZTV10QClipboard: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QClipboard)
+16 (int (*)(...))QClipboard::metaObject
+24 (int (*)(...))QClipboard::qt_metacast
+32 (int (*)(...))QClipboard::qt_metacall
+40 (int (*)(...))QClipboard::~QClipboard
+48 (int (*)(...))QClipboard::~QClipboard
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QClipboard
+ size=16 align=8
+ base size=16 base align=8
+QClipboard (0x0x7f5f58425a90) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+ QObject (0x0x7f5f584494e0) 0
+ primary-for QClipboard (0x0x7f5f58425a90)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7f5f58449660) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7f5f5849c600) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7f5f584f22a0) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7f5f584f2360) 0 empty
+
+Vtable for QDrag
+QDrag::_ZTV5QDrag: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDrag)
+16 (int (*)(...))QDrag::metaObject
+24 (int (*)(...))QDrag::qt_metacast
+32 (int (*)(...))QDrag::qt_metacall
+40 (int (*)(...))QDrag::~QDrag
+48 (int (*)(...))QDrag::~QDrag
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDrag
+ size=16 align=8
+ base size=16 base align=8
+QDrag (0x0x7f5f584ef478) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+ QObject (0x0x7f5f584f2300) 0
+ primary-for QDrag (0x0x7f5f584ef478)
+
+Class QFileSystemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemModel::QPrivateSignal (0x0x7f5f584f2540) 0 empty
+
+Vtable for QFileSystemModel
+QFileSystemModel::_ZTV16QFileSystemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QFileSystemModel)
+16 (int (*)(...))QFileSystemModel::metaObject
+24 (int (*)(...))QFileSystemModel::qt_metacast
+32 (int (*)(...))QFileSystemModel::qt_metacall
+40 (int (*)(...))QFileSystemModel::~QFileSystemModel
+48 (int (*)(...))QFileSystemModel::~QFileSystemModel
+56 (int (*)(...))QFileSystemModel::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QFileSystemModel::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileSystemModel::index
+120 (int (*)(...))QFileSystemModel::parent
+128 (int (*)(...))QFileSystemModel::sibling
+136 (int (*)(...))QFileSystemModel::rowCount
+144 (int (*)(...))QFileSystemModel::columnCount
+152 (int (*)(...))QFileSystemModel::hasChildren
+160 (int (*)(...))QFileSystemModel::data
+168 (int (*)(...))QFileSystemModel::setData
+176 (int (*)(...))QFileSystemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QFileSystemModel::mimeTypes
+224 (int (*)(...))QFileSystemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QFileSystemModel::dropMimeData
+248 (int (*)(...))QFileSystemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QFileSystemModel::fetchMore
+320 (int (*)(...))QFileSystemModel::canFetchMore
+328 (int (*)(...))QFileSystemModel::flags
+336 (int (*)(...))QFileSystemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QFileSystemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QFileSystemModel
+ size=16 align=8
+ base size=16 base align=8
+QFileSystemModel (0x0x7f5f584ef4e0) 0
+ vptr=((& QFileSystemModel::_ZTV16QFileSystemModel) + 16)
+ QAbstractItemModel (0x0x7f5f584ef548) 0
+ primary-for QFileSystemModel (0x0x7f5f584ef4e0)
+ QObject (0x0x7f5f584f24e0) 0
+ primary-for QAbstractItemModel (0x0x7f5f584ef548)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7f5f584f2b40) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7f5f58149480) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7f5f58163ea0) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7f5f581c8cc0) 0 empty
+
+Vtable for QGenericPlugin
+QGenericPlugin::_ZTV14QGenericPlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGenericPlugin)
+16 (int (*)(...))QGenericPlugin::metaObject
+24 (int (*)(...))QGenericPlugin::qt_metacast
+32 (int (*)(...))QGenericPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QGenericPlugin
+ size=16 align=8
+ base size=16 base align=8
+QGenericPlugin (0x0x7f5f58195d68) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+ QObject (0x0x7f5f581c8c60) 0
+ primary-for QGenericPlugin (0x0x7f5f58195d68)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7f5f581c8d80) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7f5f581c8e40) 0 empty
+
+Vtable for QInputMethod
+QInputMethod::_ZTV12QInputMethod: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputMethod)
+16 (int (*)(...))QInputMethod::metaObject
+24 (int (*)(...))QInputMethod::qt_metacast
+32 (int (*)(...))QInputMethod::qt_metacall
+40 (int (*)(...))QInputMethod::~QInputMethod
+48 (int (*)(...))QInputMethod::~QInputMethod
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QInputMethod
+ size=16 align=8
+ base size=16 base align=8
+QInputMethod (0x0x7f5f58195dd0) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+ QObject (0x0x7f5f581c8de0) 0
+ primary-for QInputMethod (0x0x7f5f58195dd0)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7f5f581e7120) 0 empty
+
+Vtable for QGuiApplication
+QGuiApplication::_ZTV15QGuiApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGuiApplication)
+16 (int (*)(...))QGuiApplication::metaObject
+24 (int (*)(...))QGuiApplication::qt_metacast
+32 (int (*)(...))QGuiApplication::qt_metacall
+40 (int (*)(...))QGuiApplication::~QGuiApplication
+48 (int (*)(...))QGuiApplication::~QGuiApplication
+56 (int (*)(...))QGuiApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGuiApplication::notify
+120 (int (*)(...))QGuiApplication::compressEvent
+
+Class QGuiApplication
+ size=16 align=8
+ base size=16 base align=8
+QGuiApplication (0x0x7f5f58195e38) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+ QCoreApplication (0x0x7f5f58195ea0) 0
+ primary-for QGuiApplication (0x0x7f5f58195e38)
+ QObject (0x0x7f5f581e70c0) 0
+ primary-for QCoreApplication (0x0x7f5f58195ea0)
+
+Class QIconEngine::ScaledPixmapArgument
+ size=48 align=8
+ base size=48 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7f5f581e73c0) 0
+
+Vtable for QIconEngine
+QIconEngine::_ZTV11QIconEngine: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QIconEngine)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QIconEngine::actualSize
+48 (int (*)(...))QIconEngine::pixmap
+56 (int (*)(...))QIconEngine::addPixmap
+64 (int (*)(...))QIconEngine::addFile
+72 (int (*)(...))QIconEngine::key
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QIconEngine::read
+96 (int (*)(...))QIconEngine::write
+104 (int (*)(...))QIconEngine::availableSizes
+112 (int (*)(...))QIconEngine::iconName
+120 (int (*)(...))QIconEngine::isNull
+128 (int (*)(...))QIconEngine::scaledPixmap
+136 (int (*)(...))QIconEngine::virtual_hook
+
+Class QIconEngine
+ size=8 align=8
+ base size=8 base align=8
+QIconEngine (0x0x7f5f581e7360) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7f5f581e7480) 0 empty
+
+Vtable for QIconEnginePlugin
+QIconEnginePlugin::_ZTV17QIconEnginePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QIconEnginePlugin)
+16 (int (*)(...))QIconEnginePlugin::metaObject
+24 (int (*)(...))QIconEnginePlugin::qt_metacast
+32 (int (*)(...))QIconEnginePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QIconEnginePlugin
+ size=16 align=8
+ base size=16 base align=8
+QIconEnginePlugin (0x0x7f5f58195f08) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+ QObject (0x0x7f5f581e7420) 0
+ primary-for QIconEnginePlugin (0x0x7f5f58195f08)
+
+Vtable for QImageIOHandler
+QImageIOHandler::_ZTV15QImageIOHandler: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QImageIOHandler)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QImageIOHandler::write
+56 (int (*)(...))QImageIOHandler::option
+64 (int (*)(...))QImageIOHandler::setOption
+72 (int (*)(...))QImageIOHandler::supportsOption
+80 (int (*)(...))QImageIOHandler::jumpToNextImage
+88 (int (*)(...))QImageIOHandler::jumpToImage
+96 (int (*)(...))QImageIOHandler::loopCount
+104 (int (*)(...))QImageIOHandler::imageCount
+112 (int (*)(...))QImageIOHandler::nextImageDelay
+120 (int (*)(...))QImageIOHandler::currentImageNumber
+128 (int (*)(...))QImageIOHandler::currentImageRect
+
+Class QImageIOHandler
+ size=16 align=8
+ base size=16 base align=8
+QImageIOHandler (0x0x7f5f581e7540) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7f5f581e7780) 0 empty
+
+Vtable for QImageIOPlugin
+QImageIOPlugin::_ZTV14QImageIOPlugin: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QImageIOPlugin)
+16 (int (*)(...))QImageIOPlugin::metaObject
+24 (int (*)(...))QImageIOPlugin::qt_metacast
+32 (int (*)(...))QImageIOPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QImageIOPlugin
+ size=16 align=8
+ base size=16 base align=8
+QImageIOPlugin (0x0x7f5f58195f70) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+ QObject (0x0x7f5f581e7720) 0
+ primary-for QImageIOPlugin (0x0x7f5f58195f70)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7f5f581e7b40) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7f5f581e7c00) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7f5f581e7cc0) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7f5f5827ca20) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7f5f582d9ea0) 0 empty
+
+Vtable for QMovie
+QMovie::_ZTV6QMovie: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QMovie)
+16 (int (*)(...))QMovie::metaObject
+24 (int (*)(...))QMovie::qt_metacast
+32 (int (*)(...))QMovie::qt_metacall
+40 (int (*)(...))QMovie::~QMovie
+48 (int (*)(...))QMovie::~QMovie
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QMovie
+ size=16 align=8
+ base size=16 base align=8
+QMovie (0x0x7f5f582ca750) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+ QObject (0x0x7f5f582d9e40) 0
+ primary-for QMovie (0x0x7f5f582ca750)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7f5f582f92a0) 0 empty
+
+Vtable for QOffscreenSurface
+QOffscreenSurface::_ZTV17QOffscreenSurface: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QOffscreenSurface)
+16 (int (*)(...))QOffscreenSurface::metaObject
+24 (int (*)(...))QOffscreenSurface::qt_metacast
+32 (int (*)(...))QOffscreenSurface::qt_metacall
+40 (int (*)(...))QOffscreenSurface::~QOffscreenSurface
+48 (int (*)(...))QOffscreenSurface::~QOffscreenSurface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QOffscreenSurface::surfaceType
+120 (int (*)(...))QOffscreenSurface::format
+128 (int (*)(...))QOffscreenSurface::size
+136 (int (*)(...))QOffscreenSurface::surfaceHandle
+144 (int (*)(...))-16
+152 (int (*)(...))(& _ZTI17QOffscreenSurface)
+160 (int (*)(...))QOffscreenSurface::_ZThn16_N17QOffscreenSurfaceD1Ev
+168 (int (*)(...))QOffscreenSurface::_ZThn16_N17QOffscreenSurfaceD0Ev
+176 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface6formatEv
+184 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface13surfaceHandleEv
+192 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface11surfaceTypeEv
+200 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface4sizeEv
+
+Class QOffscreenSurface
+ size=40 align=8
+ base size=40 base align=8
+QOffscreenSurface (0x0x7f5f58271e70) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+ QObject (0x0x7f5f582f91e0) 0
+ primary-for QOffscreenSurface (0x0x7f5f58271e70)
+ QSurface (0x0x7f5f582f9240) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7f5f582f94e0) 0 empty
+
+Vtable for QOpenGLContextGroup
+QOpenGLContextGroup::_ZTV19QOpenGLContextGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QOpenGLContextGroup)
+16 (int (*)(...))QOpenGLContextGroup::metaObject
+24 (int (*)(...))QOpenGLContextGroup::qt_metacast
+32 (int (*)(...))QOpenGLContextGroup::qt_metacall
+40 (int (*)(...))QOpenGLContextGroup::~QOpenGLContextGroup
+48 (int (*)(...))QOpenGLContextGroup::~QOpenGLContextGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLContextGroup
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLContextGroup (0x0x7f5f582ca7b8) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+ QObject (0x0x7f5f582f9480) 0
+ primary-for QOpenGLContextGroup (0x0x7f5f582ca7b8)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7f5f582f96c0) 0 empty
+
+Vtable for QOpenGLContext
+QOpenGLContext::_ZTV14QOpenGLContext: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QOpenGLContext)
+16 (int (*)(...))QOpenGLContext::metaObject
+24 (int (*)(...))QOpenGLContext::qt_metacast
+32 (int (*)(...))QOpenGLContext::qt_metacall
+40 (int (*)(...))QOpenGLContext::~QOpenGLContext
+48 (int (*)(...))QOpenGLContext::~QOpenGLContext
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLContext
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLContext (0x0x7f5f582ca820) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+ QObject (0x0x7f5f582f9660) 0
+ primary-for QOpenGLContext (0x0x7f5f582ca820)
+
+Vtable for QNativeInterface::QGLXContext
+QNativeInterface::QGLXContext::_ZTVN16QNativeInterface11QGLXContextE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QGLXContextE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QGLXContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QGLXContext (0x0x7f5f582f9840) 0 nearly-empty
+ vptr=((& QNativeInterface::QGLXContext::_ZTVN16QNativeInterface11QGLXContextE) + 16)
+
+Vtable for QNativeInterface::QEGLContext
+QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QEGLContextE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QEGLContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QEGLContext (0x0x7f5f582f98a0) 0 nearly-empty
+ vptr=((& QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE) + 16)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7f5f582f9900) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7f5f582f9ea0) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7f5f582f9e40) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7f5f582cac30) 0
+ QOpenGLFunctions (0x0x7f5f57e8dc60) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7f5f57ed9000) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7f5f582cac98) 0
+ QOpenGLFunctionsPrivate (0x0x7f5f57e8df60) 0
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7f5f57b6ccc0) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7f5f57bbc780) 0
+
+Class QPageRanges::Range
+ size=8 align=4
+ base size=8 base align=4
+QPageRanges::Range (0x0x7f5f57c12420) 0
+
+Class QPageRanges
+ size=8 align=8
+ base size=8 base align=8
+QPageRanges (0x0x7f5f57c123c0) 0
+
+Vtable for QPagedPaintDevice
+QPagedPaintDevice::_ZTV17QPagedPaintDevice: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QPagedPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QPagedPaintDevice::setPageLayout
+96 (int (*)(...))QPagedPaintDevice::setPageSize
+104 (int (*)(...))QPagedPaintDevice::setPageOrientation
+112 (int (*)(...))QPagedPaintDevice::setPageMargins
+120 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPagedPaintDevice
+ size=24 align=8
+ base size=24 base align=8
+QPagedPaintDevice (0x0x7f5f57c77888) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+ QPaintDevice (0x0x7f5f57c7a540) 0
+ primary-for QPagedPaintDevice (0x0x7f5f57c77888)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7f5f57c7a6c0) 0 empty
+
+Vtable for QPaintDeviceWindow
+QPaintDeviceWindow::_ZTV18QPaintDeviceWindow: 59 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+16 (int (*)(...))QPaintDeviceWindow::metaObject
+24 (int (*)(...))QPaintDeviceWindow::qt_metacast
+32 (int (*)(...))QPaintDeviceWindow::qt_metacall
+40 (int (*)(...))QPaintDeviceWindow::~QPaintDeviceWindow
+48 (int (*)(...))QPaintDeviceWindow::~QPaintDeviceWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QPaintDeviceWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QPaintDeviceWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))-16
+336 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+344 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD1Ev
+352 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD0Ev
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+384 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+392 (int (*)(...))-40
+400 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+408 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD1Ev
+416 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD0Ev
+424 (int (*)(...))QPaintDevice::devType
+432 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+440 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+448 (int (*)(...))QPaintDevice::initPainter
+456 (int (*)(...))QPaintDevice::redirected
+464 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDeviceWindow
+ size=56 align=8
+ base size=50 base align=8
+QPaintDeviceWindow (0x0x7f5f57bc8690) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+ QWindow (0x0x7f5f57bc8770) 0
+ primary-for QPaintDeviceWindow (0x0x7f5f57bc8690)
+ QObject (0x0x7f5f57c7a5a0) 0
+ primary-for QWindow (0x0x7f5f57bc8770)
+ QSurface (0x0x7f5f57c7a600) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 344)
+ QPaintDevice (0x0x7f5f57c7a660) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 408)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7f5f57c7a8a0) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7f5f57c7a840) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7f5f57a21420) 0 empty
+
+Vtable for QPaintEngine
+QPaintEngine::_ZTV12QPaintEngine: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintEngine)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))QPaintEngine::drawRects
+64 (int (*)(...))QPaintEngine::drawRects
+72 (int (*)(...))QPaintEngine::drawLines
+80 (int (*)(...))QPaintEngine::drawLines
+88 (int (*)(...))QPaintEngine::drawEllipse
+96 (int (*)(...))QPaintEngine::drawEllipse
+104 (int (*)(...))QPaintEngine::drawPath
+112 (int (*)(...))QPaintEngine::drawPoints
+120 (int (*)(...))QPaintEngine::drawPoints
+128 (int (*)(...))QPaintEngine::drawPolygon
+136 (int (*)(...))QPaintEngine::drawPolygon
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QPaintEngine::drawTextItem
+160 (int (*)(...))QPaintEngine::drawTiledPixmap
+168 (int (*)(...))QPaintEngine::drawImage
+176 (int (*)(...))QPaintEngine::coordinateOffset
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))QPaintEngine::createPixmap
+200 (int (*)(...))QPaintEngine::createPixmapFromImage
+
+Class QPaintEngine
+ size=32 align=8
+ base size=32 base align=8
+QPaintEngine (0x0x7f5f57a36c00) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7f5f57a6d240) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7f5f57a6dcc0) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7f5f57a6dc60) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7f5f57af0c60) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7f5f57b06780) 0 empty
+
+Vtable for QPdfWriter
+QPdfWriter::_ZTV10QPdfWriter: 33 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QPdfWriter)
+16 (int (*)(...))QPdfWriter::metaObject
+24 (int (*)(...))QPdfWriter::qt_metacast
+32 (int (*)(...))QPdfWriter::qt_metacall
+40 (int (*)(...))QPdfWriter::~QPdfWriter
+48 (int (*)(...))QPdfWriter::~QPdfWriter
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPdfWriter::newPage
+120 (int (*)(...))QPdfWriter::paintEngine
+128 (int (*)(...))QPdfWriter::metric
+136 (int (*)(...))-16
+144 (int (*)(...))(& _ZTI10QPdfWriter)
+152 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD1Ev
+160 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD0Ev
+168 (int (*)(...))QPaintDevice::devType
+176 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter11paintEngineEv
+184 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter6metricEN12QPaintDevice17PaintDeviceMetricE
+192 (int (*)(...))QPaintDevice::initPainter
+200 (int (*)(...))QPaintDevice::redirected
+208 (int (*)(...))QPaintDevice::sharedPainter
+216 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter7newPageEv
+224 (int (*)(...))QPagedPaintDevice::setPageLayout
+232 (int (*)(...))QPagedPaintDevice::setPageSize
+240 (int (*)(...))QPagedPaintDevice::setPageOrientation
+248 (int (*)(...))QPagedPaintDevice::setPageMargins
+256 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPdfWriter
+ size=40 align=8
+ base size=40 base align=8
+QPdfWriter (0x0x7f5f57aa7a10) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+ QObject (0x0x7f5f57b066c0) 0
+ primary-for QPdfWriter (0x0x7f5f57aa7a10)
+ QPagedPaintDevice (0x0x7f5f57afb6e8) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 152)
+ QPaintDevice (0x0x7f5f57b06720) 16
+ primary-for QPagedPaintDevice (0x0x7f5f57afb6e8)
+
+Vtable for QPicture
+QPicture::_ZTV8QPicture: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QPicture)
+16 (int (*)(...))QPicture::~QPicture
+24 (int (*)(...))QPicture::~QPicture
+32 (int (*)(...))QPicture::devType
+40 (int (*)(...))QPicture::paintEngine
+48 (int (*)(...))QPicture::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QPicture::setData
+
+Class QPicture
+ size=24 align=8
+ base size=24 base align=8
+QPicture (0x0x7f5f57afb750) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+ QPaintDevice (0x0x7f5f57b06960) 0
+ primary-for QPicture (0x0x7f5f57afb750)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7f5f57752480) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7f5f57752420) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7f5f577926c0) 0 empty
+
+Vtable for QRasterWindow
+QRasterWindow::_ZTV13QRasterWindow: 60 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QRasterWindow)
+16 (int (*)(...))QRasterWindow::metaObject
+24 (int (*)(...))QRasterWindow::qt_metacast
+32 (int (*)(...))QRasterWindow::qt_metacall
+40 (int (*)(...))QRasterWindow::~QRasterWindow
+48 (int (*)(...))QRasterWindow::~QRasterWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QPaintDeviceWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QRasterWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))QRasterWindow::redirected
+336 (int (*)(...))-16
+344 (int (*)(...))(& _ZTI13QRasterWindow)
+352 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD1Ev
+360 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD0Ev
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+384 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+392 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+400 (int (*)(...))-40
+408 (int (*)(...))(& _ZTI13QRasterWindow)
+416 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD1Ev
+424 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD0Ev
+432 (int (*)(...))QPaintDevice::devType
+440 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+448 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+456 (int (*)(...))QPaintDevice::initPainter
+464 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow10redirectedEP6QPoint
+472 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QRasterWindow
+ size=56 align=8
+ base size=50 base align=8
+QRasterWindow (0x0x7f5f5778dc98) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+ QPaintDeviceWindow (0x0x7f5f57769620) 0
+ primary-for QRasterWindow (0x0x7f5f5778dc98)
+ QWindow (0x0x7f5f57769690) 0
+ primary-for QPaintDeviceWindow (0x0x7f5f57769620)
+ QObject (0x0x7f5f577925a0) 0
+ primary-for QWindow (0x0x7f5f57769690)
+ QSurface (0x0x7f5f57792600) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 352)
+ QPaintDevice (0x0x7f5f57792660) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 416)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7f5f577928a0) 0 empty
+
+Vtable for QSessionManager
+QSessionManager::_ZTV15QSessionManager: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSessionManager)
+16 (int (*)(...))QSessionManager::metaObject
+24 (int (*)(...))QSessionManager::qt_metacast
+32 (int (*)(...))QSessionManager::qt_metacall
+40 (int (*)(...))QSessionManager::~QSessionManager
+48 (int (*)(...))QSessionManager::~QSessionManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSessionManager
+ size=16 align=8
+ base size=16 base align=8
+QSessionManager (0x0x7f5f5778dd68) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+ QObject (0x0x7f5f57792840) 0
+ primary-for QSessionManager (0x0x7f5f5778dd68)
+
+Class QShortcut::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QShortcut::QPrivateSignal (0x0x7f5f57792a80) 0 empty
+
+Vtable for QShortcut
+QShortcut::_ZTV9QShortcut: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QShortcut)
+16 (int (*)(...))QShortcut::metaObject
+24 (int (*)(...))QShortcut::qt_metacast
+32 (int (*)(...))QShortcut::qt_metacall
+40 (int (*)(...))QShortcut::~QShortcut
+48 (int (*)(...))QShortcut::~QShortcut
+56 (int (*)(...))QShortcut::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QShortcut
+ size=16 align=8
+ base size=16 base align=8
+QShortcut (0x0x7f5f5778ddd0) 0
+ vptr=((& QShortcut::_ZTV9QShortcut) + 16)
+ QObject (0x0x7f5f57792a20) 0
+ primary-for QShortcut (0x0x7f5f5778ddd0)
+
+Vtable for QStandardItem
+QStandardItem::_ZTV13QStandardItem: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QStandardItem)
+16 (int (*)(...))QStandardItem::~QStandardItem
+24 (int (*)(...))QStandardItem::~QStandardItem
+32 (int (*)(...))QStandardItem::data
+40 (int (*)(...))QStandardItem::multiData
+48 (int (*)(...))QStandardItem::setData
+56 (int (*)(...))QStandardItem::clone
+64 (int (*)(...))QStandardItem::type
+72 (int (*)(...))QStandardItem::read
+80 (int (*)(...))QStandardItem::write
+88 (int (*)(...))QStandardItem::operator<
+
+Class QStandardItem
+ size=16 align=8
+ base size=16 base align=8
+QStandardItem (0x0x7f5f57792f60) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7f5f577f56c0) 0 empty
+
+Vtable for QStandardItemModel
+QStandardItemModel::_ZTV18QStandardItemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QStandardItemModel)
+16 (int (*)(...))QStandardItemModel::metaObject
+24 (int (*)(...))QStandardItemModel::qt_metacast
+32 (int (*)(...))QStandardItemModel::qt_metacall
+40 (int (*)(...))QStandardItemModel::~QStandardItemModel
+48 (int (*)(...))QStandardItemModel::~QStandardItemModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStandardItemModel::index
+120 (int (*)(...))QStandardItemModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QStandardItemModel::rowCount
+144 (int (*)(...))QStandardItemModel::columnCount
+152 (int (*)(...))QStandardItemModel::hasChildren
+160 (int (*)(...))QStandardItemModel::data
+168 (int (*)(...))QStandardItemModel::setData
+176 (int (*)(...))QStandardItemModel::headerData
+184 (int (*)(...))QStandardItemModel::setHeaderData
+192 (int (*)(...))QStandardItemModel::itemData
+200 (int (*)(...))QStandardItemModel::setItemData
+208 (int (*)(...))QStandardItemModel::clearItemData
+216 (int (*)(...))QStandardItemModel::mimeTypes
+224 (int (*)(...))QStandardItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QStandardItemModel::dropMimeData
+248 (int (*)(...))QStandardItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStandardItemModel::insertRows
+272 (int (*)(...))QStandardItemModel::insertColumns
+280 (int (*)(...))QStandardItemModel::removeRows
+288 (int (*)(...))QStandardItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStandardItemModel::flags
+336 (int (*)(...))QStandardItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QStandardItemModel::roleNames
+376 (int (*)(...))QStandardItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QStandardItemModel
+ size=16 align=8
+ base size=16 base align=8
+QStandardItemModel (0x0x7f5f577f8750) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+ QAbstractItemModel (0x0x7f5f577f87b8) 0
+ primary-for QStandardItemModel (0x0x7f5f577f8750)
+ QObject (0x0x7f5f577f5f60) 0
+ primary-for QAbstractItemModel (0x0x7f5f577f87b8)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7f5f5784f300) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7f5f57887c00) 0 empty
+
+Vtable for QStyleHints
+QStyleHints::_ZTV11QStyleHints: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QStyleHints)
+16 (int (*)(...))QStyleHints::metaObject
+24 (int (*)(...))QStyleHints::qt_metacast
+32 (int (*)(...))QStyleHints::qt_metacall
+40 (int (*)(...))QStyleHints::~QStyleHints
+48 (int (*)(...))QStyleHints::~QStyleHints
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QStyleHints
+ size=16 align=8
+ base size=16 base align=8
+QStyleHints (0x0x7f5f5788f410) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+ QObject (0x0x7f5f57887ba0) 0
+ primary-for QStyleHints (0x0x7f5f5788f410)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7f5f57887de0) 0 empty
+
+Vtable for QTextObject
+QTextObject::_ZTV11QTextObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTextObject)
+16 (int (*)(...))QTextObject::metaObject
+24 (int (*)(...))QTextObject::qt_metacast
+32 (int (*)(...))QTextObject::qt_metacall
+40 (int (*)(...))QTextObject::~QTextObject
+48 (int (*)(...))QTextObject::~QTextObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextObject
+ size=16 align=8
+ base size=16 base align=8
+QTextObject (0x0x7f5f5788f478) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+ QObject (0x0x7f5f57887d80) 0
+ primary-for QTextObject (0x0x7f5f5788f478)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7f5f578ae000) 0 empty
+
+Vtable for QTextBlockGroup
+QTextBlockGroup::_ZTV15QTextBlockGroup: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QTextBlockGroup)
+16 (int (*)(...))QTextBlockGroup::metaObject
+24 (int (*)(...))QTextBlockGroup::qt_metacast
+32 (int (*)(...))QTextBlockGroup::qt_metacall
+40 (int (*)(...))QTextBlockGroup::~QTextBlockGroup
+48 (int (*)(...))QTextBlockGroup::~QTextBlockGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextBlockGroup::blockInserted
+120 (int (*)(...))QTextBlockGroup::blockRemoved
+128 (int (*)(...))QTextBlockGroup::blockFormatChanged
+
+Class QTextBlockGroup
+ size=16 align=8
+ base size=16 base align=8
+QTextBlockGroup (0x0x7f5f5788f4e0) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+ QTextObject (0x0x7f5f5788f548) 0
+ primary-for QTextBlockGroup (0x0x7f5f5788f4e0)
+ QObject (0x0x7f5f57887f60) 0
+ primary-for QTextObject (0x0x7f5f5788f548)
+
+Vtable for QTextFrameLayoutData
+QTextFrameLayoutData::_ZTV20QTextFrameLayoutData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextFrameLayoutData)
+16 (int (*)(...))QTextFrameLayoutData::~QTextFrameLayoutData
+24 (int (*)(...))QTextFrameLayoutData::~QTextFrameLayoutData
+
+Class QTextFrameLayoutData
+ size=8 align=8
+ base size=8 base align=8
+QTextFrameLayoutData (0x0x7f5f578ae180) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7f5f578ae240) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7f5f578ae2a0) 0
+
+Vtable for QTextFrame
+QTextFrame::_ZTV10QTextFrame: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextFrame)
+16 (int (*)(...))QTextFrame::metaObject
+24 (int (*)(...))QTextFrame::qt_metacast
+32 (int (*)(...))QTextFrame::qt_metacall
+40 (int (*)(...))QTextFrame::~QTextFrame
+48 (int (*)(...))QTextFrame::~QTextFrame
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextFrame
+ size=16 align=8
+ base size=16 base align=8
+QTextFrame (0x0x7f5f5788f5b0) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+ QTextObject (0x0x7f5f5788f618) 0
+ primary-for QTextFrame (0x0x7f5f5788f5b0)
+ QObject (0x0x7f5f578ae1e0) 0
+ primary-for QTextObject (0x0x7f5f5788f618)
+
+Vtable for QTextBlockUserData
+QTextBlockUserData::_ZTV18QTextBlockUserData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QTextBlockUserData)
+16 (int (*)(...))QTextBlockUserData::~QTextBlockUserData
+24 (int (*)(...))QTextBlockUserData::~QTextBlockUserData
+
+Class QTextBlockUserData
+ size=8 align=8
+ base size=8 base align=8
+QTextBlockUserData (0x0x7f5f578e6120) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7f5f578e61e0) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7f5f578e6180) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7f5f57528a20) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7f5f5754d8a0) 0 empty
+
+Vtable for QSyntaxHighlighter
+QSyntaxHighlighter::_ZTV18QSyntaxHighlighter: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSyntaxHighlighter)
+16 (int (*)(...))QSyntaxHighlighter::metaObject
+24 (int (*)(...))QSyntaxHighlighter::qt_metacast
+32 (int (*)(...))QSyntaxHighlighter::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QSyntaxHighlighter
+ size=16 align=8
+ base size=16 base align=8
+QSyntaxHighlighter (0x0x7f5f575517b8) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+ QObject (0x0x7f5f5754d840) 0
+ primary-for QSyntaxHighlighter (0x0x7f5f575517b8)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7f5f5754da20) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7f5f5754da80) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7f5f5754db40) 0 empty
+
+Vtable for QTextList
+QTextList::_ZTV9QTextList: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTextList)
+16 (int (*)(...))QTextList::metaObject
+24 (int (*)(...))QTextList::qt_metacast
+32 (int (*)(...))QTextList::qt_metacall
+40 (int (*)(...))QTextList::~QTextList
+48 (int (*)(...))QTextList::~QTextList
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextBlockGroup::blockInserted
+120 (int (*)(...))QTextBlockGroup::blockRemoved
+128 (int (*)(...))QTextBlockGroup::blockFormatChanged
+
+Class QTextList
+ size=16 align=8
+ base size=16 base align=8
+QTextList (0x0x7f5f57551820) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+ QTextBlockGroup (0x0x7f5f57551888) 0
+ primary-for QTextList (0x0x7f5f57551820)
+ QTextObject (0x0x7f5f575518f0) 0
+ primary-for QTextBlockGroup (0x0x7f5f57551888)
+ QObject (0x0x7f5f5754dae0) 0
+ primary-for QTextObject (0x0x7f5f575518f0)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7f5f5754df00) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7f5f5757e780) 0 empty
+
+Vtable for QTextTable
+QTextTable::_ZTV10QTextTable: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextTable)
+16 (int (*)(...))QTextTable::metaObject
+24 (int (*)(...))QTextTable::qt_metacast
+32 (int (*)(...))QTextTable::qt_metacall
+40 (int (*)(...))QTextTable::~QTextTable
+48 (int (*)(...))QTextTable::~QTextTable
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextTable
+ size=16 align=8
+ base size=16 base align=8
+QTextTable (0x0x7f5f57551958) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+ QTextFrame (0x0x7f5f575519c0) 0
+ primary-for QTextTable (0x0x7f5f57551958)
+ QTextObject (0x0x7f5f57551a28) 0
+ primary-for QTextFrame (0x0x7f5f575519c0)
+ QObject (0x0x7f5f5757e720) 0
+ primary-for QTextObject (0x0x7f5f57551a28)
+
+Class QUndoGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoGroup::QPrivateSignal (0x0x7f5f5757eb40) 0 empty
+
+Vtable for QUndoGroup
+QUndoGroup::_ZTV10QUndoGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUndoGroup)
+16 (int (*)(...))QUndoGroup::metaObject
+24 (int (*)(...))QUndoGroup::qt_metacast
+32 (int (*)(...))QUndoGroup::qt_metacall
+40 (int (*)(...))QUndoGroup::~QUndoGroup
+48 (int (*)(...))QUndoGroup::~QUndoGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QUndoGroup
+ size=16 align=8
+ base size=16 base align=8
+QUndoGroup (0x0x7f5f57551a90) 0
+ vptr=((& QUndoGroup::_ZTV10QUndoGroup) + 16)
+ QObject (0x0x7f5f5757eae0) 0
+ primary-for QUndoGroup (0x0x7f5f57551a90)
+
+Vtable for QUndoCommand
+QUndoCommand::_ZTV12QUndoCommand: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QUndoCommand)
+16 (int (*)(...))QUndoCommand::~QUndoCommand
+24 (int (*)(...))QUndoCommand::~QUndoCommand
+32 (int (*)(...))QUndoCommand::undo
+40 (int (*)(...))QUndoCommand::redo
+48 (int (*)(...))QUndoCommand::id
+56 (int (*)(...))QUndoCommand::mergeWith
+
+Class QUndoCommand
+ size=16 align=8
+ base size=16 base align=8
+QUndoCommand (0x0x7f5f5757ecc0) 0
+ vptr=((& QUndoCommand::_ZTV12QUndoCommand) + 16)
+
+Class QUndoStack::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoStack::QPrivateSignal (0x0x7f5f5757ed80) 0 empty
+
+Vtable for QUndoStack
+QUndoStack::_ZTV10QUndoStack: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUndoStack)
+16 (int (*)(...))QUndoStack::metaObject
+24 (int (*)(...))QUndoStack::qt_metacast
+32 (int (*)(...))QUndoStack::qt_metacall
+40 (int (*)(...))QUndoStack::~QUndoStack
+48 (int (*)(...))QUndoStack::~QUndoStack
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QUndoStack
+ size=16 align=8
+ base size=16 base align=8
+QUndoStack (0x0x7f5f57551af8) 0
+ vptr=((& QUndoStack::_ZTV10QUndoStack) + 16)
+ QObject (0x0x7f5f5757ed20) 0
+ primary-for QUndoStack (0x0x7f5f57551af8)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7f5f5757ef60) 0 empty
+
+Vtable for QValidator
+QValidator::_ZTV10QValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QValidator)
+16 (int (*)(...))QValidator::metaObject
+24 (int (*)(...))QValidator::qt_metacast
+32 (int (*)(...))QValidator::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))QValidator::fixup
+
+Class QValidator
+ size=16 align=8
+ base size=16 base align=8
+QValidator (0x0x7f5f57551b60) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+ QObject (0x0x7f5f5757ef00) 0
+ primary-for QValidator (0x0x7f5f57551b60)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7f5f575bb240) 0 empty
+
+Vtable for QIntValidator
+QIntValidator::_ZTV13QIntValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QIntValidator)
+16 (int (*)(...))QIntValidator::metaObject
+24 (int (*)(...))QIntValidator::qt_metacast
+32 (int (*)(...))QIntValidator::qt_metacall
+40 (int (*)(...))QIntValidator::~QIntValidator
+48 (int (*)(...))QIntValidator::~QIntValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIntValidator::validate
+120 (int (*)(...))QIntValidator::fixup
+
+Class QIntValidator
+ size=24 align=8
+ base size=24 base align=8
+QIntValidator (0x0x7f5f57551bc8) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+ QValidator (0x0x7f5f57551c30) 0
+ primary-for QIntValidator (0x0x7f5f57551bc8)
+ QObject (0x0x7f5f575bb1e0) 0
+ primary-for QValidator (0x0x7f5f57551c30)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7f5f575bb420) 0 empty
+
+Vtable for QDoubleValidator
+QDoubleValidator::_ZTV16QDoubleValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QDoubleValidator)
+16 (int (*)(...))QDoubleValidator::metaObject
+24 (int (*)(...))QDoubleValidator::qt_metacast
+32 (int (*)(...))QDoubleValidator::qt_metacall
+40 (int (*)(...))QDoubleValidator::~QDoubleValidator
+48 (int (*)(...))QDoubleValidator::~QDoubleValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDoubleValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QDoubleValidator
+ size=40 align=8
+ base size=36 base align=8
+QDoubleValidator (0x0x7f5f57551c98) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+ QValidator (0x0x7f5f57551d00) 0
+ primary-for QDoubleValidator (0x0x7f5f57551c98)
+ QObject (0x0x7f5f575bb3c0) 0
+ primary-for QValidator (0x0x7f5f57551d00)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7f5f575bb7e0) 0 empty
+
+Vtable for QRegularExpressionValidator
+QRegularExpressionValidator::_ZTV27QRegularExpressionValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QRegularExpressionValidator)
+16 (int (*)(...))QRegularExpressionValidator::metaObject
+24 (int (*)(...))QRegularExpressionValidator::qt_metacast
+32 (int (*)(...))QRegularExpressionValidator::qt_metacall
+40 (int (*)(...))QRegularExpressionValidator::~QRegularExpressionValidator
+48 (int (*)(...))QRegularExpressionValidator::~QRegularExpressionValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QRegularExpressionValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QRegularExpressionValidator
+ size=16 align=8
+ base size=16 base align=8
+QRegularExpressionValidator (0x0x7f5f57551d68) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+ QValidator (0x0x7f5f57551dd0) 0
+ primary-for QRegularExpressionValidator (0x0x7f5f57551d68)
+ QObject (0x0x7f5f575bb780) 0
+ primary-for QValidator (0x0x7f5f57551dd0)
+
+Vtable for QSqlDriverCreatorBase
+QSqlDriverCreatorBase::_ZTV21QSqlDriverCreatorBase: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QSqlDriverCreatorBase)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QSqlDriverCreatorBase
+ size=8 align=8
+ base size=8 base align=8
+QSqlDriverCreatorBase (0x0x7f5f575bbc60) 0 nearly-empty
+ vptr=((& QSqlDriverCreatorBase::_ZTV21QSqlDriverCreatorBase) + 16)
+
+Class QSqlDatabase
+ size=8 align=8
+ base size=8 base align=8
+QSqlDatabase (0x0x7f5f575bbf60) 0
+
+Class QSqlDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriver::QPrivateSignal (0x0x7f5f5760f060) 0 empty
+
+Vtable for QSqlDriver
+QSqlDriver::_ZTV10QSqlDriver: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSqlDriver)
+16 (int (*)(...))QSqlDriver::metaObject
+24 (int (*)(...))QSqlDriver::qt_metacast
+32 (int (*)(...))QSqlDriver::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSqlDriver::isOpen
+120 (int (*)(...))QSqlDriver::beginTransaction
+128 (int (*)(...))QSqlDriver::commitTransaction
+136 (int (*)(...))QSqlDriver::rollbackTransaction
+144 (int (*)(...))QSqlDriver::tables
+152 (int (*)(...))QSqlDriver::primaryIndex
+160 (int (*)(...))QSqlDriver::record
+168 (int (*)(...))QSqlDriver::formatValue
+176 (int (*)(...))QSqlDriver::escapeIdentifier
+184 (int (*)(...))QSqlDriver::sqlStatement
+192 (int (*)(...))QSqlDriver::handle
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+232 (int (*)(...))QSqlDriver::subscribeToNotification
+240 (int (*)(...))QSqlDriver::unsubscribeFromNotification
+248 (int (*)(...))QSqlDriver::subscribedToNotifications
+256 (int (*)(...))QSqlDriver::isIdentifierEscaped
+264 (int (*)(...))QSqlDriver::stripDelimiters
+272 (int (*)(...))QSqlDriver::maximumIdentifierLength
+280 (int (*)(...))QSqlDriver::cancelQuery
+288 (int (*)(...))QSqlDriver::setOpen
+296 (int (*)(...))QSqlDriver::setOpenError
+304 (int (*)(...))QSqlDriver::setLastError
+
+Class QSqlDriver
+ size=16 align=8
+ base size=16 base align=8
+QSqlDriver (0x0x7f5f5760e000) 0
+ vptr=((& QSqlDriver::_ZTV10QSqlDriver) + 16)
+ QObject (0x0x7f5f5760f000) 0
+ primary-for QSqlDriver (0x0x7f5f5760e000)
+
+Class QSqlDriverPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriverPlugin::QPrivateSignal (0x0x7f5f5760f240) 0 empty
+
+Vtable for QSqlDriverPlugin
+QSqlDriverPlugin::_ZTV16QSqlDriverPlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSqlDriverPlugin)
+16 (int (*)(...))QSqlDriverPlugin::metaObject
+24 (int (*)(...))QSqlDriverPlugin::qt_metacast
+32 (int (*)(...))QSqlDriverPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QSqlDriverPlugin
+ size=16 align=8
+ base size=16 base align=8
+QSqlDriverPlugin (0x0x7f5f5760e068) 0
+ vptr=((& QSqlDriverPlugin::_ZTV16QSqlDriverPlugin) + 16)
+ QObject (0x0x7f5f5760f1e0) 0
+ primary-for QSqlDriverPlugin (0x0x7f5f5760e068)
+
+Class QSqlError
+ size=8 align=8
+ base size=8 base align=8
+QSqlError (0x0x7f5f5760f300) 0
+
+Class QSqlField
+ size=40 align=8
+ base size=40 base align=8
+QSqlField (0x0x7f5f5766a0c0) 0
+
+Class QSqlRecord
+ size=8 align=8
+ base size=8 base align=8
+QSqlRecord (0x0x7f5f5766a480) 0
+
+Class QSqlIndex
+ size=80 align=8
+ base size=80 base align=8
+QSqlIndex (0x0x7f5f5765fdd0) 0
+ QSqlRecord (0x0x7f5f5766a540) 0
+
+Class QSqlQuery
+ size=8 align=8
+ base size=8 base align=8
+QSqlQuery (0x0x7f5f5766aa80) 0
+
+Class QSqlQueryModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlQueryModel::QPrivateSignal (0x0x7f5f5766ab40) 0 empty
+
+Vtable for QSqlQueryModel
+QSqlQueryModel::_ZTV14QSqlQueryModel: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSqlQueryModel)
+16 (int (*)(...))QSqlQueryModel::metaObject
+24 (int (*)(...))QSqlQueryModel::qt_metacast
+32 (int (*)(...))QSqlQueryModel::qt_metacall
+40 (int (*)(...))QSqlQueryModel::~QSqlQueryModel
+48 (int (*)(...))QSqlQueryModel::~QSqlQueryModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractTableModel::index
+120 (int (*)(...))QAbstractTableModel::parent
+128 (int (*)(...))QAbstractTableModel::sibling
+136 (int (*)(...))QSqlQueryModel::rowCount
+144 (int (*)(...))QSqlQueryModel::columnCount
+152 (int (*)(...))QAbstractTableModel::hasChildren
+160 (int (*)(...))QSqlQueryModel::data
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QSqlQueryModel::headerData
+184 (int (*)(...))QSqlQueryModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractTableModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QSqlQueryModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QSqlQueryModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QSqlQueryModel::fetchMore
+320 (int (*)(...))QSqlQueryModel::canFetchMore
+328 (int (*)(...))QAbstractTableModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QSqlQueryModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QSqlQueryModel::clear
+416 (int (*)(...))QSqlQueryModel::queryChange
+424 (int (*)(...))QSqlQueryModel::indexInQuery
+
+Class QSqlQueryModel
+ size=16 align=8
+ base size=16 base align=8
+QSqlQueryModel (0x0x7f5f57693208) 0
+ vptr=((& QSqlQueryModel::_ZTV14QSqlQueryModel) + 16)
+ QAbstractTableModel (0x0x7f5f57693270) 0
+ primary-for QSqlQueryModel (0x0x7f5f57693208)
+ QAbstractItemModel (0x0x7f5f576932d8) 0
+ primary-for QAbstractTableModel (0x0x7f5f57693270)
+ QObject (0x0x7f5f5766aae0) 0
+ primary-for QAbstractItemModel (0x0x7f5f576932d8)
+
+Class QSqlTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlTableModel::QPrivateSignal (0x0x7f5f5766ad20) 0 empty
+
+Vtable for QSqlTableModel
+QSqlTableModel::_ZTV14QSqlTableModel: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSqlTableModel)
+16 (int (*)(...))QSqlTableModel::metaObject
+24 (int (*)(...))QSqlTableModel::qt_metacast
+32 (int (*)(...))QSqlTableModel::qt_metacall
+40 (int (*)(...))QSqlTableModel::~QSqlTableModel
+48 (int (*)(...))QSqlTableModel::~QSqlTableModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractTableModel::index
+120 (int (*)(...))QAbstractTableModel::parent
+128 (int (*)(...))QAbstractTableModel::sibling
+136 (int (*)(...))QSqlTableModel::rowCount
+144 (int (*)(...))QSqlQueryModel::columnCount
+152 (int (*)(...))QAbstractTableModel::hasChildren
+160 (int (*)(...))QSqlTableModel::data
+168 (int (*)(...))QSqlTableModel::setData
+176 (int (*)(...))QSqlTableModel::headerData
+184 (int (*)(...))QSqlQueryModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QSqlTableModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractTableModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QSqlTableModel::insertRows
+272 (int (*)(...))QSqlQueryModel::insertColumns
+280 (int (*)(...))QSqlTableModel::removeRows
+288 (int (*)(...))QSqlTableModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QSqlQueryModel::fetchMore
+320 (int (*)(...))QSqlQueryModel::canFetchMore
+328 (int (*)(...))QSqlTableModel::flags
+336 (int (*)(...))QSqlTableModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QSqlQueryModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QSqlTableModel::submit
+392 (int (*)(...))QSqlTableModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QSqlTableModel::clear
+416 (int (*)(...))QSqlQueryModel::queryChange
+424 (int (*)(...))QSqlTableModel::indexInQuery
+432 (int (*)(...))QSqlTableModel::setTable
+440 (int (*)(...))QSqlTableModel::setEditStrategy
+448 (int (*)(...))QSqlTableModel::setSort
+456 (int (*)(...))QSqlTableModel::setFilter
+464 (int (*)(...))QSqlTableModel::revertRow
+472 (int (*)(...))QSqlTableModel::select
+480 (int (*)(...))QSqlTableModel::selectRow
+488 (int (*)(...))QSqlTableModel::updateRowInTable
+496 (int (*)(...))QSqlTableModel::insertRowIntoTable
+504 (int (*)(...))QSqlTableModel::deleteRowFromTable
+512 (int (*)(...))QSqlTableModel::orderByClause
+520 (int (*)(...))QSqlTableModel::selectStatement
+
+Class QSqlTableModel
+ size=16 align=8
+ base size=16 base align=8
+QSqlTableModel (0x0x7f5f57693340) 0
+ vptr=((& QSqlTableModel::_ZTV14QSqlTableModel) + 16)
+ QSqlQueryModel (0x0x7f5f576933a8) 0
+ primary-for QSqlTableModel (0x0x7f5f57693340)
+ QAbstractTableModel (0x0x7f5f57693410) 0
+ primary-for QSqlQueryModel (0x0x7f5f576933a8)
+ QAbstractItemModel (0x0x7f5f57693478) 0
+ primary-for QAbstractTableModel (0x0x7f5f57693410)
+ QObject (0x0x7f5f5766acc0) 0
+ primary-for QAbstractItemModel (0x0x7f5f57693478)
+
+Class QSqlRelation
+ size=72 align=8
+ base size=72 base align=8
+QSqlRelation (0x0x7f5f5766aea0) 0
+
+Class QSqlRelationalTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlRelationalTableModel::QPrivateSignal (0x0x7f5f57329060) 0 empty
+
+Vtable for QSqlRelationalTableModel
+QSqlRelationalTableModel::_ZTV24QSqlRelationalTableModel: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QSqlRelationalTableModel)
+16 (int (*)(...))QSqlRelationalTableModel::metaObject
+24 (int (*)(...))QSqlRelationalTableModel::qt_metacast
+32 (int (*)(...))QSqlRelationalTableModel::qt_metacall
+40 (int (*)(...))QSqlRelationalTableModel::~QSqlRelationalTableModel
+48 (int (*)(...))QSqlRelationalTableModel::~QSqlRelationalTableModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractTableModel::index
+120 (int (*)(...))QAbstractTableModel::parent
+128 (int (*)(...))QAbstractTableModel::sibling
+136 (int (*)(...))QSqlTableModel::rowCount
+144 (int (*)(...))QSqlQueryModel::columnCount
+152 (int (*)(...))QAbstractTableModel::hasChildren
+160 (int (*)(...))QSqlRelationalTableModel::data
+168 (int (*)(...))QSqlRelationalTableModel::setData
+176 (int (*)(...))QSqlTableModel::headerData
+184 (int (*)(...))QSqlQueryModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QSqlTableModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractTableModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QSqlTableModel::insertRows
+272 (int (*)(...))QSqlQueryModel::insertColumns
+280 (int (*)(...))QSqlTableModel::removeRows
+288 (int (*)(...))QSqlRelationalTableModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QSqlQueryModel::fetchMore
+320 (int (*)(...))QSqlQueryModel::canFetchMore
+328 (int (*)(...))QSqlTableModel::flags
+336 (int (*)(...))QSqlTableModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QSqlQueryModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QSqlTableModel::submit
+392 (int (*)(...))QSqlTableModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QSqlRelationalTableModel::clear
+416 (int (*)(...))QSqlQueryModel::queryChange
+424 (int (*)(...))QSqlTableModel::indexInQuery
+432 (int (*)(...))QSqlRelationalTableModel::setTable
+440 (int (*)(...))QSqlTableModel::setEditStrategy
+448 (int (*)(...))QSqlTableModel::setSort
+456 (int (*)(...))QSqlTableModel::setFilter
+464 (int (*)(...))QSqlRelationalTableModel::revertRow
+472 (int (*)(...))QSqlRelationalTableModel::select
+480 (int (*)(...))QSqlTableModel::selectRow
+488 (int (*)(...))QSqlRelationalTableModel::updateRowInTable
+496 (int (*)(...))QSqlRelationalTableModel::insertRowIntoTable
+504 (int (*)(...))QSqlTableModel::deleteRowFromTable
+512 (int (*)(...))QSqlRelationalTableModel::orderByClause
+520 (int (*)(...))QSqlRelationalTableModel::selectStatement
+528 (int (*)(...))QSqlRelationalTableModel::setRelation
+536 (int (*)(...))QSqlRelationalTableModel::relationModel
+
+Class QSqlRelationalTableModel
+ size=16 align=8
+ base size=16 base align=8
+QSqlRelationalTableModel (0x0x7f5f57721750) 0
+ vptr=((& QSqlRelationalTableModel::_ZTV24QSqlRelationalTableModel) + 16)
+ QSqlTableModel (0x0x7f5f577217b8) 0
+ primary-for QSqlRelationalTableModel (0x0x7f5f57721750)
+ QSqlQueryModel (0x0x7f5f57721820) 0
+ primary-for QSqlTableModel (0x0x7f5f577217b8)
+ QAbstractTableModel (0x0x7f5f57721888) 0
+ primary-for QSqlQueryModel (0x0x7f5f57721820)
+ QAbstractItemModel (0x0x7f5f577218f0) 0
+ primary-for QAbstractTableModel (0x0x7f5f57721888)
+ QObject (0x0x7f5f57329000) 0
+ primary-for QAbstractItemModel (0x0x7f5f577218f0)
+
+Vtable for QSqlResult
+QSqlResult::_ZTV10QSqlResult: 33 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSqlResult)
+16 0
+24 0
+32 (int (*)(...))QSqlResult::handle
+40 (int (*)(...))QSqlResult::setAt
+48 (int (*)(...))QSqlResult::setActive
+56 (int (*)(...))QSqlResult::setLastError
+64 (int (*)(...))QSqlResult::setQuery
+72 (int (*)(...))QSqlResult::setSelect
+80 (int (*)(...))QSqlResult::setForwardOnly
+88 (int (*)(...))QSqlResult::exec
+96 (int (*)(...))QSqlResult::prepare
+104 (int (*)(...))QSqlResult::savePrepare
+112 (int (*)(...))QSqlResult::bindValue
+120 (int (*)(...))QSqlResult::bindValue
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))QSqlResult::fetchNext
+168 (int (*)(...))QSqlResult::fetchPrevious
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))QSqlResult::record
+216 (int (*)(...))QSqlResult::lastInsertId
+224 (int (*)(...))QSqlResult::virtual_hook
+232 (int (*)(...))QSqlResult::execBatch
+240 (int (*)(...))QSqlResult::detachFromResultSet
+248 (int (*)(...))QSqlResult::setNumericalPrecisionPolicy
+256 (int (*)(...))QSqlResult::nextResult
+
+Class QSqlResult
+ size=16 align=8
+ base size=16 base align=8
+QSqlResult (0x0x7f5f573291e0) 0
+ vptr=((& QSqlResult::_ZTV10QSqlResult) + 16)
+
+Class QSizePolicy::Bits
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy::Bits (0x0x7f5f57329360) 0
+
+Class QSizePolicy
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy (0x0x7f5f57329300) 0
+
+Class QWidgetData
+ size=88 align=8
+ base size=88 base align=8
+QWidgetData (0x0x7f5f573a1300) 0
+
+Class QWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidget::QPrivateSignal (0x0x7f5f573a1420) 0 empty
+
+Vtable for QWidget
+QWidget::_ZTV7QWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWidget)
+16 (int (*)(...))QWidget::metaObject
+24 (int (*)(...))QWidget::qt_metacast
+32 (int (*)(...))QWidget::qt_metacall
+40 (int (*)(...))QWidget::~QWidget
+48 (int (*)(...))QWidget::~QWidget
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI7QWidget)
+448 (int (*)(...))QWidget::_ZThn16_N7QWidgetD1Ev
+456 (int (*)(...))QWidget::_ZThn16_N7QWidgetD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWidget
+ size=40 align=8
+ base size=40 base align=8
+QWidget (0x0x7f5f5734d4d0) 0
+ vptr=((& QWidget::_ZTV7QWidget) + 16)
+ QObject (0x0x7f5f573a1360) 0
+ primary-for QWidget (0x0x7f5f5734d4d0)
+ QPaintDevice (0x0x7f5f573a13c0) 16
+ vptr=((& QWidget::_ZTV7QWidget) + 448)
+
+Class QAbstractButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractButton::QPrivateSignal (0x0x7f5f57424cc0) 0 empty
+
+Vtable for QAbstractButton
+QAbstractButton::_ZTV15QAbstractButton: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractButton)
+16 (int (*)(...))QAbstractButton::metaObject
+24 (int (*)(...))QAbstractButton::qt_metacast
+32 (int (*)(...))QAbstractButton::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI15QAbstractButton)
+472 0
+480 0
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractButton
+ size=40 align=8
+ base size=40 base align=8
+QAbstractButton (0x0x7f5f5739b8f0) 0
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 16)
+ QWidget (0x0x7f5f5734d700) 0
+ primary-for QAbstractButton (0x0x7f5f5739b8f0)
+ QObject (0x0x7f5f57424c00) 0
+ primary-for QWidget (0x0x7f5f5734d700)
+ QPaintDevice (0x0x7f5f57424c60) 16
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 472)
+
+Class QAbstractSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSpinBox::QPrivateSignal (0x0x7f5f57424f00) 0 empty
+
+Vtable for QAbstractSpinBox
+QAbstractSpinBox::_ZTV16QAbstractSpinBox: 70 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAbstractSpinBox)
+16 (int (*)(...))QAbstractSpinBox::metaObject
+24 (int (*)(...))QAbstractSpinBox::qt_metacast
+32 (int (*)(...))QAbstractSpinBox::qt_metacall
+40 (int (*)(...))QAbstractSpinBox::~QAbstractSpinBox
+48 (int (*)(...))QAbstractSpinBox::~QAbstractSpinBox
+56 (int (*)(...))QAbstractSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSpinBox::validate
+440 (int (*)(...))QAbstractSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI16QAbstractSpinBox)
+496 (int (*)(...))QAbstractSpinBox::_ZThn16_N16QAbstractSpinBoxD1Ev
+504 (int (*)(...))QAbstractSpinBox::_ZThn16_N16QAbstractSpinBoxD0Ev
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QAbstractSpinBox (0x0x7f5f5739b958) 0
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 16)
+ QWidget (0x0x7f5f5734d770) 0
+ primary-for QAbstractSpinBox (0x0x7f5f5739b958)
+ QObject (0x0x7f5f57424e40) 0
+ primary-for QWidget (0x0x7f5f5734d770)
+ QPaintDevice (0x0x7f5f57424ea0) 16
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 496)
+
+Class QAbstractSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSlider::QPrivateSignal (0x0x7f5f574636c0) 0 empty
+
+Vtable for QAbstractSlider
+QAbstractSlider::_ZTV15QAbstractSlider: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractSlider)
+16 (int (*)(...))QAbstractSlider::metaObject
+24 (int (*)(...))QAbstractSlider::qt_metacast
+32 (int (*)(...))QAbstractSlider::qt_metacall
+40 (int (*)(...))QAbstractSlider::~QAbstractSlider
+48 (int (*)(...))QAbstractSlider::~QAbstractSlider
+56 (int (*)(...))QAbstractSlider::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSlider::sliderChange
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI15QAbstractSlider)
+456 (int (*)(...))QAbstractSlider::_ZThn16_N15QAbstractSliderD1Ev
+464 (int (*)(...))QAbstractSlider::_ZThn16_N15QAbstractSliderD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractSlider
+ size=40 align=8
+ base size=40 base align=8
+QAbstractSlider (0x0x7f5f5739baf8) 0
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 16)
+ QWidget (0x0x7f5f5734dcb0) 0
+ primary-for QAbstractSlider (0x0x7f5f5739baf8)
+ QObject (0x0x7f5f57463600) 0
+ primary-for QWidget (0x0x7f5f5734dcb0)
+ QPaintDevice (0x0x7f5f57463660) 16
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 456)
+
+Class QSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSlider::QPrivateSignal (0x0x7f5f57463900) 0 empty
+
+Vtable for QSlider
+QSlider::_ZTV7QSlider: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QSlider)
+16 (int (*)(...))QSlider::metaObject
+24 (int (*)(...))QSlider::qt_metacast
+32 (int (*)(...))QSlider::qt_metacall
+40 (int (*)(...))QSlider::~QSlider
+48 (int (*)(...))QSlider::~QSlider
+56 (int (*)(...))QSlider::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSlider::sizeHint
+136 (int (*)(...))QSlider::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSlider::mousePressEvent
+176 (int (*)(...))QSlider::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSlider::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSlider::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSlider::sliderChange
+440 (int (*)(...))QSlider::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI7QSlider)
+464 (int (*)(...))QSlider::_ZThn16_N7QSliderD1Ev
+472 (int (*)(...))QSlider::_ZThn16_N7QSliderD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSlider
+ size=40 align=8
+ base size=40 base align=8
+QSlider (0x0x7f5f5739bb60) 0
+ vptr=((& QSlider::_ZTV7QSlider) + 16)
+ QAbstractSlider (0x0x7f5f5739bbc8) 0
+ primary-for QSlider (0x0x7f5f5739bb60)
+ QWidget (0x0x7f5f574891c0) 0
+ primary-for QAbstractSlider (0x0x7f5f5739bbc8)
+ QObject (0x0x7f5f57463840) 0
+ primary-for QWidget (0x0x7f5f574891c0)
+ QPaintDevice (0x0x7f5f574638a0) 16
+ vptr=((& QSlider::_ZTV7QSlider) + 464)
+
+Class QStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyle::QPrivateSignal (0x0x7f5f57463ba0) 0 empty
+
+Vtable for QStyle
+QStyle::_ZTV6QStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QStyle)
+16 (int (*)(...))QStyle::metaObject
+24 (int (*)(...))QStyle::qt_metacast
+32 (int (*)(...))QStyle::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStyle::polish
+120 (int (*)(...))QStyle::unpolish
+128 (int (*)(...))QStyle::polish
+136 (int (*)(...))QStyle::unpolish
+144 (int (*)(...))QStyle::polish
+152 (int (*)(...))QStyle::itemTextRect
+160 (int (*)(...))QStyle::itemPixmapRect
+168 (int (*)(...))QStyle::drawItemText
+176 (int (*)(...))QStyle::drawItemPixmap
+184 (int (*)(...))QStyle::standardPalette
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+232 (int (*)(...))__cxa_pure_virtual
+240 (int (*)(...))__cxa_pure_virtual
+248 (int (*)(...))__cxa_pure_virtual
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))__cxa_pure_virtual
+272 (int (*)(...))__cxa_pure_virtual
+280 (int (*)(...))__cxa_pure_virtual
+288 (int (*)(...))__cxa_pure_virtual
+
+Class QStyle
+ size=16 align=8
+ base size=16 base align=8
+QStyle (0x0x7f5f5739bc30) 0
+ vptr=((& QStyle::_ZTV6QStyle) + 16)
+ QObject (0x0x7f5f57463b40) 0
+ primary-for QStyle (0x0x7f5f5739bc30)
+
+Class QTabBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabBar::QPrivateSignal (0x0x7f5f574dcc60) 0 empty
+
+Vtable for QTabBar
+QTabBar::_ZTV7QTabBar: 70 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QTabBar)
+16 (int (*)(...))QTabBar::metaObject
+24 (int (*)(...))QTabBar::qt_metacast
+32 (int (*)(...))QTabBar::qt_metacall
+40 (int (*)(...))QTabBar::~QTabBar
+48 (int (*)(...))QTabBar::~QTabBar
+56 (int (*)(...))QTabBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTabBar::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QTabBar::sizeHint
+136 (int (*)(...))QTabBar::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTabBar::mousePressEvent
+176 (int (*)(...))QTabBar::mouseReleaseEvent
+184 (int (*)(...))QTabBar::mouseDoubleClickEvent
+192 (int (*)(...))QTabBar::mouseMoveEvent
+200 (int (*)(...))QTabBar::wheelEvent
+208 (int (*)(...))QTabBar::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTabBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTabBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QTabBar::showEvent
+352 (int (*)(...))QTabBar::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTabBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QTabBar::tabSizeHint
+440 (int (*)(...))QTabBar::minimumTabSizeHint
+448 (int (*)(...))QTabBar::tabInserted
+456 (int (*)(...))QTabBar::tabRemoved
+464 (int (*)(...))QTabBar::tabLayoutChange
+472 (int (*)(...))QTabBar::initStyleOption
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI7QTabBar)
+496 (int (*)(...))QTabBar::_ZThn16_N7QTabBarD1Ev
+504 (int (*)(...))QTabBar::_ZThn16_N7QTabBarD0Ev
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTabBar
+ size=40 align=8
+ base size=40 base align=8
+QTabBar (0x0x7f5f5739bf08) 0
+ vptr=((& QTabBar::_ZTV7QTabBar) + 16)
+ QWidget (0x0x7f5f574cdcb0) 0
+ primary-for QTabBar (0x0x7f5f5739bf08)
+ QObject (0x0x7f5f574dcba0) 0
+ primary-for QWidget (0x0x7f5f574cdcb0)
+ QPaintDevice (0x0x7f5f574dcc00) 16
+ vptr=((& QTabBar::_ZTV7QTabBar) + 496)
+
+Class QTabWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabWidget::QPrivateSignal (0x0x7f5f574dcf60) 0 empty
+
+Vtable for QTabWidget
+QTabWidget::_ZTV10QTabWidget: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTabWidget)
+16 (int (*)(...))QTabWidget::metaObject
+24 (int (*)(...))QTabWidget::qt_metacast
+32 (int (*)(...))QTabWidget::qt_metacall
+40 (int (*)(...))QTabWidget::~QTabWidget
+48 (int (*)(...))QTabWidget::~QTabWidget
+56 (int (*)(...))QTabWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QTabWidget::sizeHint
+136 (int (*)(...))QTabWidget::minimumSizeHint
+144 (int (*)(...))QTabWidget::heightForWidth
+152 (int (*)(...))QTabWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QTabWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTabWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTabWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QTabWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTabWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QTabWidget::tabInserted
+440 (int (*)(...))QTabWidget::tabRemoved
+448 (int (*)(...))QTabWidget::initStyleOption
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI10QTabWidget)
+472 (int (*)(...))QTabWidget::_ZThn16_N10QTabWidgetD1Ev
+480 (int (*)(...))QTabWidget::_ZThn16_N10QTabWidgetD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTabWidget
+ size=40 align=8
+ base size=40 base align=8
+QTabWidget (0x0x7f5f5739bf70) 0
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 16)
+ QWidget (0x0x7f5f5751d310) 0
+ primary-for QTabWidget (0x0x7f5f5739bf70)
+ QObject (0x0x7f5f574dcea0) 0
+ primary-for QWidget (0x0x7f5f5751d310)
+ QPaintDevice (0x0x7f5f574dcf00) 16
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 472)
+
+Class QRubberBand::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRubberBand::QPrivateSignal (0x0x7f5f57151360) 0 empty
+
+Vtable for QRubberBand
+QRubberBand::_ZTV11QRubberBand: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QRubberBand)
+16 (int (*)(...))QRubberBand::metaObject
+24 (int (*)(...))QRubberBand::qt_metacast
+32 (int (*)(...))QRubberBand::qt_metacall
+40 (int (*)(...))QRubberBand::~QRubberBand
+48 (int (*)(...))QRubberBand::~QRubberBand
+56 (int (*)(...))QRubberBand::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QRubberBand::paintEvent
+264 (int (*)(...))QRubberBand::moveEvent
+272 (int (*)(...))QRubberBand::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QRubberBand::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QRubberBand::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QRubberBand::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QRubberBand)
+456 (int (*)(...))QRubberBand::_ZThn16_N11QRubberBandD1Ev
+464 (int (*)(...))QRubberBand::_ZThn16_N11QRubberBandD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QRubberBand
+ size=40 align=8
+ base size=40 base align=8
+QRubberBand (0x0x7f5f57154000) 0
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 16)
+ QWidget (0x0x7f5f5751d620) 0
+ primary-for QRubberBand (0x0x7f5f57154000)
+ QObject (0x0x7f5f571512a0) 0
+ primary-for QWidget (0x0x7f5f5751d620)
+ QPaintDevice (0x0x7f5f57151300) 16
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 456)
+
+Class QFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFrame::QPrivateSignal (0x0x7f5f57151780) 0 empty
+
+Vtable for QFrame
+QFrame::_ZTV6QFrame: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QFrame)
+16 (int (*)(...))QFrame::metaObject
+24 (int (*)(...))QFrame::qt_metacast
+32 (int (*)(...))QFrame::qt_metacall
+40 (int (*)(...))QFrame::~QFrame
+48 (int (*)(...))QFrame::~QFrame
+56 (int (*)(...))QFrame::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI6QFrame)
+456 (int (*)(...))QFrame::_ZThn16_N6QFrameD1Ev
+464 (int (*)(...))QFrame::_ZThn16_N6QFrameD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFrame
+ size=40 align=8
+ base size=40 base align=8
+QFrame (0x0x7f5f57154068) 0
+ vptr=((& QFrame::_ZTV6QFrame) + 16)
+ QWidget (0x0x7f5f5751d770) 0
+ primary-for QFrame (0x0x7f5f57154068)
+ QObject (0x0x7f5f571516c0) 0
+ primary-for QWidget (0x0x7f5f5751d770)
+ QPaintDevice (0x0x7f5f57151720) 16
+ vptr=((& QFrame::_ZTV6QFrame) + 456)
+
+Class QStyleOption
+ size=64 align=8
+ base size=64 base align=8
+QStyleOption (0x0x7f5f57151a80) 0
+
+Class QStyleOptionFocusRect
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFocusRect (0x0x7f5f571540d0) 0
+ QStyleOption (0x0x7f5f57151ae0) 0
+
+Class QStyleOptionFrame
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFrame (0x0x7f5f643a9d68) 0
+ QStyleOption (0x0x7f5f57151d20) 0
+
+Class QStyleOptionTabWidgetFrame
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionTabWidgetFrame (0x0x7f5f643a9f08) 0
+ QStyleOption (0x0x7f5f5719e2a0) 0
+
+Class QStyleOptionTabBarBase
+ size=104 align=8
+ base size=101 base align=8
+QStyleOptionTabBarBase (0x0x7f5f57154138) 0
+ QStyleOption (0x0x7f5f5719e4e0) 0
+
+Class QStyleOptionHeader
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionHeader (0x0x7f5f571541a0) 0
+ QStyleOption (0x0x7f5f5719e720) 0
+
+Class QStyleOptionHeaderV2
+ size=136 align=8
+ base size=136 base align=8
+QStyleOptionHeaderV2 (0x0x7f5f57154208) 0
+ QStyleOptionHeader (0x0x7f5f57154270) 0
+ QStyleOption (0x0x7f5f5719e960) 0
+
+Class QStyleOptionButton
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionButton (0x0x7f5f57154340) 0
+ QStyleOption (0x0x7f5f5719ed20) 0
+
+Class QStyleOptionTab
+ size=160 align=8
+ base size=156 base align=8
+QStyleOptionTab (0x0x7f5f571544e0) 0
+ QStyleOption (0x0x7f5f571e72a0) 0
+
+Class QStyleOptionToolBar
+ size=88 align=8
+ base size=88 base align=8
+QStyleOptionToolBar (0x0x7f5f571547b8) 0
+ QStyleOption (0x0x7f5f571e79c0) 0
+
+Class QStyleOptionProgressBar
+ size=112 align=8
+ base size=111 base align=8
+QStyleOptionProgressBar (0x0x7f5f57154958) 0
+ QStyleOption (0x0x7f5f571e7f00) 0
+
+Class QStyleOptionMenuItem
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionMenuItem (0x0x7f5f571549c0) 0
+ QStyleOption (0x0x7f5f57258180) 0
+
+Class QStyleOptionDockWidget
+ size=96 align=8
+ base size=92 base align=8
+QStyleOptionDockWidget (0x0x7f5f57154a28) 0
+ QStyleOption (0x0x7f5f572583c0) 0
+
+Class QStyleOptionViewItem
+ size=208 align=8
+ base size=208 base align=8
+QStyleOptionViewItem (0x0x7f5f57154a90) 0
+ QStyleOption (0x0x7f5f57258600) 0
+
+Class QStyleOptionToolBox
+ size=104 align=8
+ base size=104 base align=8
+QStyleOptionToolBox (0x0x7f5f57154c30) 0
+ QStyleOption (0x0x7f5f57258b40) 0
+
+Class QStyleOptionRubberBand
+ size=72 align=8
+ base size=69 base align=8
+QStyleOptionRubberBand (0x0x7f5f57154c98) 0
+ QStyleOption (0x0x7f5f57258d80) 0
+
+Class QStyleOptionComplex
+ size=72 align=8
+ base size=72 base align=8
+QStyleOptionComplex (0x0x7f5f57154d00) 0
+ QStyleOption (0x0x7f5f572a0060) 0
+
+Class QStyleOptionSlider
+ size=128 align=8
+ base size=128 base align=8
+QStyleOptionSlider (0x0x7f5f57154d68) 0
+ QStyleOptionComplex (0x0x7f5f57154dd0) 0
+ QStyleOption (0x0x7f5f572a0300) 0
+
+Class QStyleOptionSpinBox
+ size=88 align=8
+ base size=81 base align=8
+QStyleOptionSpinBox (0x0x7f5f57154ea0) 0
+ QStyleOptionComplex (0x0x7f5f57154f08) 0
+ QStyleOption (0x0x7f5f572a06c0) 0
+
+Class QStyleOptionToolButton
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionToolButton (0x0x7f5f57154e38) 0
+ QStyleOptionComplex (0x0x7f5f572b8000) 0
+ QStyleOption (0x0x7f5f572a0900) 0
+
+Class QStyleOptionComboBox
+ size=144 align=8
+ base size=140 base align=8
+QStyleOptionComboBox (0x0x7f5f572b81a0) 0
+ QStyleOptionComplex (0x0x7f5f572b8208) 0
+ QStyleOption (0x0x7f5f572a0e40) 0
+
+Class QStyleOptionTitleBar
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionTitleBar (0x0x7f5f572b8270) 0
+ QStyleOptionComplex (0x0x7f5f572b82d8) 0
+ QStyleOption (0x0x7f5f572e6060) 0
+
+Class QStyleOptionGroupBox
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionGroupBox (0x0x7f5f572b8340) 0
+ QStyleOptionComplex (0x0x7f5f572b83a8) 0
+ QStyleOption (0x0x7f5f572e62a0) 0
+
+Class QStyleOptionSizeGrip
+ size=80 align=8
+ base size=76 base align=8
+QStyleOptionSizeGrip (0x0x7f5f572b8410) 0
+ QStyleOptionComplex (0x0x7f5f572b8478) 0
+ QStyleOption (0x0x7f5f572e64e0) 0
+
+Class QStyleOptionGraphicsItem
+ size=96 align=8
+ base size=96 base align=8
+QStyleOptionGraphicsItem (0x0x7f5f572b84e0) 0
+ QStyleOption (0x0x7f5f572e6720) 0
+
+Class QStyleHintReturn
+ size=8 align=4
+ base size=8 base align=4
+QStyleHintReturn (0x0x7f5f572e6a80) 0
+
+Class QStyleHintReturnMask
+ size=16 align=8
+ base size=16 base align=8
+QStyleHintReturnMask (0x0x7f5f572b8548) 0
+ QStyleHintReturn (0x0x7f5f572e6ae0) 0
+
+Class QStyleHintReturnVariant
+ size=40 align=8
+ base size=40 base align=8
+QStyleHintReturnVariant (0x0x7f5f572b8618) 0
+ QStyleHintReturn (0x0x7f5f572e6b40) 0
+
+Class QAbstractItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemDelegate::QPrivateSignal (0x0x7f5f572e6cc0) 0 empty
+
+Vtable for QAbstractItemDelegate
+QAbstractItemDelegate::_ZTV21QAbstractItemDelegate: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QAbstractItemDelegate)
+16 (int (*)(...))QAbstractItemDelegate::metaObject
+24 (int (*)(...))QAbstractItemDelegate::qt_metacast
+32 (int (*)(...))QAbstractItemDelegate::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QAbstractItemDelegate::setEditorData
+152 (int (*)(...))QAbstractItemDelegate::setModelData
+160 (int (*)(...))QAbstractItemDelegate::updateEditorGeometry
+168 (int (*)(...))QAbstractItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+
+Class QAbstractItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemDelegate (0x0x7f5f572b86e8) 0
+ vptr=((& QAbstractItemDelegate::_ZTV21QAbstractItemDelegate) + 16)
+ QObject (0x0x7f5f572e6c60) 0
+ primary-for QAbstractItemDelegate (0x0x7f5f572b86e8)
+
+Class QAbstractScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractScrollArea::QPrivateSignal (0x0x7f5f572e6f00) 0 empty
+
+Vtable for QAbstractScrollArea
+QAbstractScrollArea::_ZTV19QAbstractScrollArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractScrollArea)
+16 (int (*)(...))QAbstractScrollArea::metaObject
+24 (int (*)(...))QAbstractScrollArea::qt_metacast
+32 (int (*)(...))QAbstractScrollArea::qt_metacall
+40 (int (*)(...))QAbstractScrollArea::~QAbstractScrollArea
+48 (int (*)(...))QAbstractScrollArea::~QAbstractScrollArea
+56 (int (*)(...))QAbstractScrollArea::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractScrollArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QAbstractScrollArea::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI19QAbstractScrollArea)
+488 (int (*)(...))QAbstractScrollArea::_ZThn16_N19QAbstractScrollAreaD1Ev
+496 (int (*)(...))QAbstractScrollArea::_ZThn16_N19QAbstractScrollAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractScrollArea
+ size=40 align=8
+ base size=40 base align=8
+QAbstractScrollArea (0x0x7f5f572b8750) 0
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 16)
+ QFrame (0x0x7f5f572b87b8) 0
+ primary-for QAbstractScrollArea (0x0x7f5f572b8750)
+ QWidget (0x0x7f5f572dfa80) 0
+ primary-for QFrame (0x0x7f5f572b87b8)
+ QObject (0x0x7f5f572e6e40) 0
+ primary-for QWidget (0x0x7f5f572dfa80)
+ QPaintDevice (0x0x7f5f572e6ea0) 16
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 488)
+
+Class QAbstractItemView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemView::QPrivateSignal (0x0x7f5f56f2f240) 0 empty
+
+Vtable for QAbstractItemView
+QAbstractItemView::_ZTV17QAbstractItemView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAbstractItemView)
+16 (int (*)(...))QAbstractItemView::metaObject
+24 (int (*)(...))QAbstractItemView::qt_metacast
+32 (int (*)(...))QAbstractItemView::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QAbstractScrollArea::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))__cxa_pure_virtual
+504 (int (*)(...))__cxa_pure_virtual
+512 (int (*)(...))__cxa_pure_virtual
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QAbstractItemView::setRootIndex
+560 (int (*)(...))QAbstractItemView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QAbstractItemView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QAbstractItemView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))__cxa_pure_virtual
+704 (int (*)(...))__cxa_pure_virtual
+712 (int (*)(...))__cxa_pure_virtual
+720 (int (*)(...))__cxa_pure_virtual
+728 (int (*)(...))__cxa_pure_virtual
+736 (int (*)(...))__cxa_pure_virtual
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI17QAbstractItemView)
+800 0
+808 0
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractItemView
+ size=40 align=8
+ base size=40 base align=8
+QAbstractItemView (0x0x7f5f572b8820) 0
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 16)
+ QAbstractScrollArea (0x0x7f5f572b8888) 0
+ primary-for QAbstractItemView (0x0x7f5f572b8820)
+ QFrame (0x0x7f5f572b88f0) 0
+ primary-for QAbstractScrollArea (0x0x7f5f572b8888)
+ QWidget (0x0x7f5f572dfc40) 0
+ primary-for QFrame (0x0x7f5f572b88f0)
+ QObject (0x0x7f5f56f2f180) 0
+ primary-for QWidget (0x0x7f5f572dfc40)
+ QPaintDevice (0x0x7f5f56f2f1e0) 16
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 800)
+
+Vtable for QAccessibleWidget
+QAccessibleWidget::_ZTV17QAccessibleWidget: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleWidget)
+16 (int (*)(...))QAccessibleWidget::~QAccessibleWidget
+24 (int (*)(...))QAccessibleWidget::~QAccessibleWidget
+32 (int (*)(...))QAccessibleWidget::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleWidget::window
+56 (int (*)(...))QAccessibleWidget::relations
+64 (int (*)(...))QAccessibleWidget::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))QAccessibleWidget::parent
+88 (int (*)(...))QAccessibleWidget::child
+96 (int (*)(...))QAccessibleWidget::childCount
+104 (int (*)(...))QAccessibleWidget::indexOfChild
+112 (int (*)(...))QAccessibleWidget::text
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleWidget::rect
+136 (int (*)(...))QAccessibleWidget::role
+144 (int (*)(...))QAccessibleWidget::state
+152 (int (*)(...))QAccessibleWidget::foregroundColor
+160 (int (*)(...))QAccessibleWidget::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleWidget::interface_cast
+184 (int (*)(...))QAccessibleWidget::actionNames
+192 (int (*)(...))QAccessibleWidget::doAction
+200 (int (*)(...))QAccessibleWidget::keyBindingsForAction
+208 (int (*)(...))-16
+216 (int (*)(...))(& _ZTI17QAccessibleWidget)
+224 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidgetD1Ev
+232 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidgetD0Ev
+240 (int (*)(...))QAccessibleWidget::_ZThn16_NK17QAccessibleWidget11actionNamesEv
+248 (int (*)(...))QAccessibleActionInterface::localizedActionName
+256 (int (*)(...))QAccessibleActionInterface::localizedActionDescription
+264 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidget8doActionERK7QString
+272 (int (*)(...))QAccessibleWidget::_ZThn16_NK17QAccessibleWidget20keyBindingsForActionERK7QString
+
+Class QAccessibleWidget
+ size=32 align=8
+ base size=32 base align=8
+QAccessibleWidget (0x0x7f5f56f5a1c0) 0
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 16)
+ QAccessibleObject (0x0x7f5f572b8a90) 0
+ primary-for QAccessibleWidget (0x0x7f5f56f5a1c0)
+ QAccessibleInterface (0x0x7f5f56f2fba0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f5f572b8a90)
+ QAccessibleActionInterface (0x0x7f5f56f2fc00) 16 nearly-empty
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 224)
+
+Class QApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QApplication::QPrivateSignal (0x0x7f5f56f2fd20) 0 empty
+
+Vtable for QApplication
+QApplication::_ZTV12QApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QApplication)
+16 (int (*)(...))QApplication::metaObject
+24 (int (*)(...))QApplication::qt_metacast
+32 (int (*)(...))QApplication::qt_metacall
+40 (int (*)(...))QApplication::~QApplication
+48 (int (*)(...))QApplication::~QApplication
+56 (int (*)(...))QApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QApplication::notify
+120 (int (*)(...))QApplication::compressEvent
+
+Class QApplication
+ size=16 align=8
+ base size=16 base align=8
+QApplication (0x0x7f5f572b8af8) 0
+ vptr=((& QApplication::_ZTV12QApplication) + 16)
+ QGuiApplication (0x0x7f5f572b8b60) 0
+ primary-for QApplication (0x0x7f5f572b8af8)
+ QCoreApplication (0x0x7f5f572b8bc8) 0
+ primary-for QGuiApplication (0x0x7f5f572b8b60)
+ QObject (0x0x7f5f56f2fcc0) 0
+ primary-for QCoreApplication (0x0x7f5f572b8bc8)
+
+Vtable for QLayoutItem
+QLayoutItem::_ZTV11QLayoutItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QLayoutItem)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QLayoutItem::hasHeightForWidth
+96 (int (*)(...))QLayoutItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QLayoutItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QLayoutItem::controlTypes
+
+Class QLayoutItem
+ size=16 align=8
+ base size=12 base align=8
+QLayoutItem (0x0x7f5f56f2ff60) 0
+ vptr=((& QLayoutItem::_ZTV11QLayoutItem) + 16)
+
+Vtable for QSpacerItem
+QSpacerItem::_ZTV11QSpacerItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSpacerItem)
+16 (int (*)(...))QSpacerItem::~QSpacerItem
+24 (int (*)(...))QSpacerItem::~QSpacerItem
+32 (int (*)(...))QSpacerItem::sizeHint
+40 (int (*)(...))QSpacerItem::minimumSize
+48 (int (*)(...))QSpacerItem::maximumSize
+56 (int (*)(...))QSpacerItem::expandingDirections
+64 (int (*)(...))QSpacerItem::setGeometry
+72 (int (*)(...))QSpacerItem::geometry
+80 (int (*)(...))QSpacerItem::isEmpty
+88 (int (*)(...))QLayoutItem::hasHeightForWidth
+96 (int (*)(...))QLayoutItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QLayoutItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QSpacerItem::spacerItem
+144 (int (*)(...))QLayoutItem::controlTypes
+
+Class QSpacerItem
+ size=40 align=8
+ base size=40 base align=8
+QSpacerItem (0x0x7f5f572b8c30) 0
+ vptr=((& QSpacerItem::_ZTV11QSpacerItem) + 16)
+ QLayoutItem (0x0x7f5f56faa1e0) 0
+ primary-for QSpacerItem (0x0x7f5f572b8c30)
+
+Vtable for QWidgetItem
+QWidgetItem::_ZTV11QWidgetItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWidgetItem)
+16 (int (*)(...))QWidgetItem::~QWidgetItem
+24 (int (*)(...))QWidgetItem::~QWidgetItem
+32 (int (*)(...))QWidgetItem::sizeHint
+40 (int (*)(...))QWidgetItem::minimumSize
+48 (int (*)(...))QWidgetItem::maximumSize
+56 (int (*)(...))QWidgetItem::expandingDirections
+64 (int (*)(...))QWidgetItem::setGeometry
+72 (int (*)(...))QWidgetItem::geometry
+80 (int (*)(...))QWidgetItem::isEmpty
+88 (int (*)(...))QWidgetItem::hasHeightForWidth
+96 (int (*)(...))QWidgetItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QWidgetItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QWidgetItem::controlTypes
+
+Class QWidgetItem
+ size=24 align=8
+ base size=24 base align=8
+QWidgetItem (0x0x7f5f572b8c98) 0
+ vptr=((& QWidgetItem::_ZTV11QWidgetItem) + 16)
+ QLayoutItem (0x0x7f5f56faa420) 0
+ primary-for QWidgetItem (0x0x7f5f572b8c98)
+
+Vtable for QWidgetItemV2
+QWidgetItemV2::_ZTV13QWidgetItemV2: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QWidgetItemV2)
+16 (int (*)(...))QWidgetItemV2::~QWidgetItemV2
+24 (int (*)(...))QWidgetItemV2::~QWidgetItemV2
+32 (int (*)(...))QWidgetItemV2::sizeHint
+40 (int (*)(...))QWidgetItemV2::minimumSize
+48 (int (*)(...))QWidgetItemV2::maximumSize
+56 (int (*)(...))QWidgetItem::expandingDirections
+64 (int (*)(...))QWidgetItem::setGeometry
+72 (int (*)(...))QWidgetItem::geometry
+80 (int (*)(...))QWidgetItem::isEmpty
+88 (int (*)(...))QWidgetItem::hasHeightForWidth
+96 (int (*)(...))QWidgetItemV2::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QWidgetItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QWidgetItem::controlTypes
+
+Class QWidgetItemV2
+ size=88 align=8
+ base size=88 base align=8
+QWidgetItemV2 (0x0x7f5f572b8d00) 0
+ vptr=((& QWidgetItemV2::_ZTV13QWidgetItemV2) + 16)
+ QWidgetItem (0x0x7f5f572b8d68) 0
+ primary-for QWidgetItemV2 (0x0x7f5f572b8d00)
+ QLayoutItem (0x0x7f5f56faa600) 0
+ primary-for QWidgetItem (0x0x7f5f572b8d68)
+
+Class QLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLayout::QPrivateSignal (0x0x7f5f56faa780) 0 empty
+
+Vtable for QLayout
+QLayout::_ZTV7QLayout: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QLayout)
+16 (int (*)(...))QLayout::metaObject
+24 (int (*)(...))QLayout::qt_metacast
+32 (int (*)(...))QLayout::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLayout::spacing
+120 (int (*)(...))QLayout::setSpacing
+128 (int (*)(...))QLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QLayout::expandingDirections
+160 (int (*)(...))QLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QLayout::setGeometry
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))-16
+264 (int (*)(...))(& _ZTI7QLayout)
+272 0
+280 0
+288 (int (*)(...))__cxa_pure_virtual
+296 (int (*)(...))QLayout::_ZThn16_NK7QLayout11minimumSizeEv
+304 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+312 (int (*)(...))QLayout::_ZThn16_NK7QLayout19expandingDirectionsEv
+320 (int (*)(...))QLayout::_ZThn16_N7QLayout11setGeometryERK5QRect
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+336 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+344 (int (*)(...))QLayoutItem::hasHeightForWidth
+352 (int (*)(...))QLayoutItem::heightForWidth
+360 (int (*)(...))QLayoutItem::minimumHeightForWidth
+368 (int (*)(...))QLayout::_ZThn16_N7QLayout10invalidateEv
+376 (int (*)(...))QLayoutItem::widget
+384 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+392 (int (*)(...))QLayoutItem::spacerItem
+400 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QLayout
+ size=32 align=8
+ base size=28 base align=8
+QLayout (0x0x7f5f56f5a310) 0
+ vptr=((& QLayout::_ZTV7QLayout) + 16)
+ QObject (0x0x7f5f56faa6c0) 0
+ primary-for QLayout (0x0x7f5f56f5a310)
+ QLayoutItem (0x0x7f5f56faa720) 16
+ vptr=((& QLayout::_ZTV7QLayout) + 272)
+
+Class QGridLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGridLayout::QPrivateSignal (0x0x7f5f56faaa80) 0 empty
+
+Vtable for QGridLayout
+QGridLayout::_ZTV11QGridLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QGridLayout)
+16 (int (*)(...))QGridLayout::metaObject
+24 (int (*)(...))QGridLayout::qt_metacast
+32 (int (*)(...))QGridLayout::qt_metacall
+40 (int (*)(...))QGridLayout::~QGridLayout
+48 (int (*)(...))QGridLayout::~QGridLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGridLayout::spacing
+120 (int (*)(...))QGridLayout::setSpacing
+128 (int (*)(...))QGridLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QGridLayout::addItem
+152 (int (*)(...))QGridLayout::expandingDirections
+160 (int (*)(...))QGridLayout::minimumSize
+168 (int (*)(...))QGridLayout::maximumSize
+176 (int (*)(...))QGridLayout::setGeometry
+184 (int (*)(...))QGridLayout::itemAt
+192 (int (*)(...))QGridLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QGridLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QGridLayout::sizeHint
+264 (int (*)(...))QGridLayout::hasHeightForWidth
+272 (int (*)(...))QGridLayout::heightForWidth
+280 (int (*)(...))QGridLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QGridLayout)
+304 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayoutD1Ev
+312 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayoutD0Ev
+320 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout8sizeHintEv
+328 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout11minimumSizeEv
+336 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout11maximumSizeEv
+344 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout19expandingDirectionsEv
+352 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout17hasHeightForWidthEv
+384 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout14heightForWidthEi
+392 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout21minimumHeightForWidthEi
+400 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QGridLayout
+ size=32 align=8
+ base size=28 base align=8
+QGridLayout (0x0x7f5f572b8dd0) 0
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 16)
+ QLayout (0x0x7f5f56f5a620) 0
+ primary-for QGridLayout (0x0x7f5f572b8dd0)
+ QObject (0x0x7f5f56faa9c0) 0
+ primary-for QLayout (0x0x7f5f56f5a620)
+ QLayoutItem (0x0x7f5f56faaa20) 16
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 304)
+
+Class QBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBoxLayout::QPrivateSignal (0x0x7f5f56faad20) 0 empty
+
+Vtable for QBoxLayout
+QBoxLayout::_ZTV10QBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QBoxLayout)
+16 (int (*)(...))QBoxLayout::metaObject
+24 (int (*)(...))QBoxLayout::qt_metacast
+32 (int (*)(...))QBoxLayout::qt_metacall
+40 (int (*)(...))QBoxLayout::~QBoxLayout
+48 (int (*)(...))QBoxLayout::~QBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI10QBoxLayout)
+304 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayoutD1Ev
+312 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QBoxLayout (0x0x7f5f572b8e38) 0
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 16)
+ QLayout (0x0x7f5f56f5a690) 0
+ primary-for QBoxLayout (0x0x7f5f572b8e38)
+ QObject (0x0x7f5f56faac60) 0
+ primary-for QLayout (0x0x7f5f56f5a690)
+ QLayoutItem (0x0x7f5f56faacc0) 16
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 304)
+
+Class QHBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHBoxLayout::QPrivateSignal (0x0x7f5f56faaf60) 0 empty
+
+Vtable for QHBoxLayout
+QHBoxLayout::_ZTV11QHBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHBoxLayout)
+16 (int (*)(...))QHBoxLayout::metaObject
+24 (int (*)(...))QHBoxLayout::qt_metacast
+32 (int (*)(...))QHBoxLayout::qt_metacall
+40 (int (*)(...))QHBoxLayout::~QHBoxLayout
+48 (int (*)(...))QHBoxLayout::~QHBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QHBoxLayout)
+304 (int (*)(...))QHBoxLayout::_ZThn16_N11QHBoxLayoutD1Ev
+312 (int (*)(...))QHBoxLayout::_ZThn16_N11QHBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QHBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QHBoxLayout (0x0x7f5f572b8ea0) 0
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 16)
+ QBoxLayout (0x0x7f5f572b8f08) 0
+ primary-for QHBoxLayout (0x0x7f5f572b8ea0)
+ QLayout (0x0x7f5f56f5a9a0) 0
+ primary-for QBoxLayout (0x0x7f5f572b8f08)
+ QObject (0x0x7f5f56faaea0) 0
+ primary-for QLayout (0x0x7f5f56f5a9a0)
+ QLayoutItem (0x0x7f5f56faaf00) 16
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 304)
+
+Class QVBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVBoxLayout::QPrivateSignal (0x0x7f5f57009120) 0 empty
+
+Vtable for QVBoxLayout
+QVBoxLayout::_ZTV11QVBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QVBoxLayout)
+16 (int (*)(...))QVBoxLayout::metaObject
+24 (int (*)(...))QVBoxLayout::qt_metacast
+32 (int (*)(...))QVBoxLayout::qt_metacall
+40 (int (*)(...))QVBoxLayout::~QVBoxLayout
+48 (int (*)(...))QVBoxLayout::~QVBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QVBoxLayout)
+304 (int (*)(...))QVBoxLayout::_ZThn16_N11QVBoxLayoutD1Ev
+312 (int (*)(...))QVBoxLayout::_ZThn16_N11QVBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QVBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QVBoxLayout (0x0x7f5f572b8f70) 0
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 16)
+ QBoxLayout (0x0x7f5f5700a000) 0
+ primary-for QVBoxLayout (0x0x7f5f572b8f70)
+ QLayout (0x0x7f5f56f5aa10) 0
+ primary-for QBoxLayout (0x0x7f5f5700a000)
+ QObject (0x0x7f5f57009060) 0
+ primary-for QLayout (0x0x7f5f56f5aa10)
+ QLayoutItem (0x0x7f5f570090c0) 16
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 304)
+
+Class QButtonGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QButtonGroup::QPrivateSignal (0x0x7f5f57009240) 0 empty
+
+Vtable for QButtonGroup
+QButtonGroup::_ZTV12QButtonGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QButtonGroup)
+16 (int (*)(...))QButtonGroup::metaObject
+24 (int (*)(...))QButtonGroup::qt_metacast
+32 (int (*)(...))QButtonGroup::qt_metacall
+40 (int (*)(...))QButtonGroup::~QButtonGroup
+48 (int (*)(...))QButtonGroup::~QButtonGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QButtonGroup
+ size=16 align=8
+ base size=16 base align=8
+QButtonGroup (0x0x7f5f5700a068) 0
+ vptr=((& QButtonGroup::_ZTV12QButtonGroup) + 16)
+ QObject (0x0x7f5f570091e0) 0
+ primary-for QButtonGroup (0x0x7f5f5700a068)
+
+Class QCalendarWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCalendarWidget::QPrivateSignal (0x0x7f5f57009480) 0 empty
+
+Vtable for QCalendarWidget
+QCalendarWidget::_ZTV15QCalendarWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QCalendarWidget)
+16 (int (*)(...))QCalendarWidget::metaObject
+24 (int (*)(...))QCalendarWidget::qt_metacast
+32 (int (*)(...))QCalendarWidget::qt_metacall
+40 (int (*)(...))QCalendarWidget::~QCalendarWidget
+48 (int (*)(...))QCalendarWidget::~QCalendarWidget
+56 (int (*)(...))QCalendarWidget::event
+64 (int (*)(...))QCalendarWidget::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCalendarWidget::sizeHint
+136 (int (*)(...))QCalendarWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QCalendarWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QCalendarWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QCalendarWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QCalendarWidget::paintCell
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI15QCalendarWidget)
+456 (int (*)(...))QCalendarWidget::_ZThn16_N15QCalendarWidgetD1Ev
+464 (int (*)(...))QCalendarWidget::_ZThn16_N15QCalendarWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCalendarWidget
+ size=40 align=8
+ base size=40 base align=8
+QCalendarWidget (0x0x7f5f5700a0d0) 0
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 16)
+ QWidget (0x0x7f5f56f5aa80) 0
+ primary-for QCalendarWidget (0x0x7f5f5700a0d0)
+ QObject (0x0x7f5f570093c0) 0
+ primary-for QWidget (0x0x7f5f56f5aa80)
+ QPaintDevice (0x0x7f5f57009420) 16
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 456)
+
+Class QCheckBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCheckBox::QPrivateSignal (0x0x7f5f57009900) 0 empty
+
+Vtable for QCheckBox
+QCheckBox::_ZTV9QCheckBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QCheckBox)
+16 (int (*)(...))QCheckBox::metaObject
+24 (int (*)(...))QCheckBox::qt_metacast
+32 (int (*)(...))QCheckBox::qt_metacall
+40 (int (*)(...))QCheckBox::~QCheckBox
+48 (int (*)(...))QCheckBox::~QCheckBox
+56 (int (*)(...))QCheckBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCheckBox::sizeHint
+136 (int (*)(...))QCheckBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QCheckBox::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QCheckBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QCheckBox::hitButton
+440 (int (*)(...))QCheckBox::checkStateSet
+448 (int (*)(...))QCheckBox::nextCheckState
+456 (int (*)(...))QCheckBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI9QCheckBox)
+480 (int (*)(...))QCheckBox::_ZThn16_N9QCheckBoxD1Ev
+488 (int (*)(...))QCheckBox::_ZThn16_N9QCheckBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCheckBox
+ size=40 align=8
+ base size=40 base align=8
+QCheckBox (0x0x7f5f5700a138) 0
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 16)
+ QAbstractButton (0x0x7f5f5700a1a0) 0
+ primary-for QCheckBox (0x0x7f5f5700a138)
+ QWidget (0x0x7f5f56f5ae70) 0
+ primary-for QAbstractButton (0x0x7f5f5700a1a0)
+ QObject (0x0x7f5f57009840) 0
+ primary-for QWidget (0x0x7f5f56f5ae70)
+ QPaintDevice (0x0x7f5f570098a0) 16
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 480)
+
+Class QDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialog::QPrivateSignal (0x0x7f5f57009b40) 0 empty
+
+Vtable for QDialog
+QDialog::_ZTV7QDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QDialog)
+16 (int (*)(...))QDialog::metaObject
+24 (int (*)(...))QDialog::qt_metacast
+32 (int (*)(...))QDialog::qt_metacall
+40 (int (*)(...))QDialog::~QDialog
+48 (int (*)(...))QDialog::~QDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI7QDialog)
+488 (int (*)(...))QDialog::_ZThn16_N7QDialogD1Ev
+496 (int (*)(...))QDialog::_ZThn16_N7QDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDialog
+ size=40 align=8
+ base size=40 base align=8
+QDialog (0x0x7f5f5700a208) 0
+ vptr=((& QDialog::_ZTV7QDialog) + 16)
+ QWidget (0x0x7f5f56f5aee0) 0
+ primary-for QDialog (0x0x7f5f5700a208)
+ QObject (0x0x7f5f57009a80) 0
+ primary-for QWidget (0x0x7f5f56f5aee0)
+ QPaintDevice (0x0x7f5f57009ae0) 16
+ vptr=((& QDialog::_ZTV7QDialog) + 488)
+
+Class QColorDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColorDialog::QPrivateSignal (0x0x7f5f57009d80) 0 empty
+
+Vtable for QColorDialog
+QColorDialog::_ZTV12QColorDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QColorDialog)
+16 (int (*)(...))QColorDialog::metaObject
+24 (int (*)(...))QColorDialog::qt_metacast
+32 (int (*)(...))QColorDialog::qt_metacall
+40 (int (*)(...))QColorDialog::~QColorDialog
+48 (int (*)(...))QColorDialog::~QColorDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QColorDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QColorDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QColorDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QColorDialog)
+488 (int (*)(...))QColorDialog::_ZThn16_N12QColorDialogD1Ev
+496 (int (*)(...))QColorDialog::_ZThn16_N12QColorDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QColorDialog
+ size=40 align=8
+ base size=40 base align=8
+QColorDialog (0x0x7f5f5700a270) 0
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 16)
+ QDialog (0x0x7f5f5700a2d8) 0
+ primary-for QColorDialog (0x0x7f5f5700a270)
+ QWidget (0x0x7f5f57048070) 0
+ primary-for QDialog (0x0x7f5f5700a2d8)
+ QObject (0x0x7f5f57009cc0) 0
+ primary-for QWidget (0x0x7f5f57048070)
+ QPaintDevice (0x0x7f5f57009d20) 16
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 488)
+
+Class QColormap
+ size=8 align=8
+ base size=8 base align=8
+QColormap (0x0x7f5f57074300) 0
+
+Class QColumnView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColumnView::QPrivateSignal (0x0x7f5f57074420) 0 empty
+
+Vtable for QColumnView
+QColumnView::_ZTV11QColumnView: 109 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QColumnView)
+16 (int (*)(...))QColumnView::metaObject
+24 (int (*)(...))QColumnView::qt_metacast
+32 (int (*)(...))QColumnView::qt_metacall
+40 (int (*)(...))QColumnView::~QColumnView
+48 (int (*)(...))QColumnView::~QColumnView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QColumnView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QColumnView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QColumnView::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QColumnView::setModel
+480 (int (*)(...))QColumnView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QColumnView::visualRect
+504 (int (*)(...))QColumnView::scrollTo
+512 (int (*)(...))QColumnView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QColumnView::setRootIndex
+560 (int (*)(...))QAbstractItemView::doItemsLayout
+568 (int (*)(...))QColumnView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QColumnView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QColumnView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QAbstractItemView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QColumnView::moveCursor
+704 (int (*)(...))QColumnView::horizontalOffset
+712 (int (*)(...))QColumnView::verticalOffset
+720 (int (*)(...))QColumnView::isIndexHidden
+728 (int (*)(...))QColumnView::setSelection
+736 (int (*)(...))QColumnView::visualRegionForSelection
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QColumnView::createColumn
+792 (int (*)(...))-16
+800 (int (*)(...))(& _ZTI11QColumnView)
+808 (int (*)(...))QColumnView::_ZThn16_N11QColumnViewD1Ev
+816 (int (*)(...))QColumnView::_ZThn16_N11QColumnViewD0Ev
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QColumnView
+ size=40 align=8
+ base size=40 base align=8
+QColumnView (0x0x7f5f5700a478) 0
+ vptr=((& QColumnView::_ZTV11QColumnView) + 16)
+ QAbstractItemView (0x0x7f5f5700a4e0) 0
+ primary-for QColumnView (0x0x7f5f5700a478)
+ QAbstractScrollArea (0x0x7f5f5700a548) 0
+ primary-for QAbstractItemView (0x0x7f5f5700a4e0)
+ QFrame (0x0x7f5f5700a5b0) 0
+ primary-for QAbstractScrollArea (0x0x7f5f5700a548)
+ QWidget (0x0x7f5f57048380) 0
+ primary-for QFrame (0x0x7f5f5700a5b0)
+ QObject (0x0x7f5f57074360) 0
+ primary-for QWidget (0x0x7f5f57048380)
+ QPaintDevice (0x0x7f5f570743c0) 16
+ vptr=((& QColumnView::_ZTV11QColumnView) + 808)
+
+Class QComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QComboBox::QPrivateSignal (0x0x7f5f57074660) 0 empty
+
+Vtable for QComboBox
+QComboBox::_ZTV9QComboBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QComboBox)
+16 (int (*)(...))QComboBox::metaObject
+24 (int (*)(...))QComboBox::qt_metacast
+32 (int (*)(...))QComboBox::qt_metacall
+40 (int (*)(...))QComboBox::~QComboBox
+48 (int (*)(...))QComboBox::~QComboBox
+56 (int (*)(...))QComboBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QComboBox::sizeHint
+136 (int (*)(...))QComboBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QComboBox::mousePressEvent
+176 (int (*)(...))QComboBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QComboBox::wheelEvent
+208 (int (*)(...))QComboBox::keyPressEvent
+216 (int (*)(...))QComboBox::keyReleaseEvent
+224 (int (*)(...))QComboBox::focusInEvent
+232 (int (*)(...))QComboBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QComboBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QComboBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QComboBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QComboBox::showEvent
+352 (int (*)(...))QComboBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QComboBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QComboBox::inputMethodEvent
+416 (int (*)(...))QComboBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QComboBox::setModel
+440 (int (*)(...))QComboBox::showPopup
+448 (int (*)(...))QComboBox::hidePopup
+456 (int (*)(...))QComboBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI9QComboBox)
+480 (int (*)(...))QComboBox::_ZThn16_N9QComboBoxD1Ev
+488 (int (*)(...))QComboBox::_ZThn16_N9QComboBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QComboBox
+ size=40 align=8
+ base size=40 base align=8
+QComboBox (0x0x7f5f5700a618) 0
+ vptr=((& QComboBox::_ZTV9QComboBox) + 16)
+ QWidget (0x0x7f5f570483f0) 0
+ primary-for QComboBox (0x0x7f5f5700a618)
+ QObject (0x0x7f5f570745a0) 0
+ primary-for QWidget (0x0x7f5f570483f0)
+ QPaintDevice (0x0x7f5f57074600) 16
+ vptr=((& QComboBox::_ZTV9QComboBox) + 480)
+
+Class QPushButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPushButton::QPrivateSignal (0x0x7f5f57074c00) 0 empty
+
+Vtable for QPushButton
+QPushButton::_ZTV11QPushButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPushButton)
+16 (int (*)(...))QPushButton::metaObject
+24 (int (*)(...))QPushButton::qt_metacast
+32 (int (*)(...))QPushButton::qt_metacall
+40 (int (*)(...))QPushButton::~QPushButton
+48 (int (*)(...))QPushButton::~QPushButton
+56 (int (*)(...))QPushButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QPushButton::sizeHint
+136 (int (*)(...))QPushButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QPushButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QPushButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QPushButton::focusInEvent
+232 (int (*)(...))QPushButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QPushButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QPushButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QPushButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI11QPushButton)
+480 (int (*)(...))QPushButton::_ZThn16_N11QPushButtonD1Ev
+488 (int (*)(...))QPushButton::_ZThn16_N11QPushButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QPushButton
+ size=40 align=8
+ base size=40 base align=8
+QPushButton (0x0x7f5f5700a680) 0
+ vptr=((& QPushButton::_ZTV11QPushButton) + 16)
+ QAbstractButton (0x0x7f5f5700a6e8) 0
+ primary-for QPushButton (0x0x7f5f5700a680)
+ QWidget (0x0x7f5f570488c0) 0
+ primary-for QAbstractButton (0x0x7f5f5700a6e8)
+ QObject (0x0x7f5f57074b40) 0
+ primary-for QWidget (0x0x7f5f570488c0)
+ QPaintDevice (0x0x7f5f57074ba0) 16
+ vptr=((& QPushButton::_ZTV11QPushButton) + 480)
+
+Class QCommandLinkButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommandLinkButton::QPrivateSignal (0x0x7f5f57074e40) 0 empty
+
+Vtable for QCommandLinkButton
+QCommandLinkButton::_ZTV18QCommandLinkButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QCommandLinkButton)
+16 (int (*)(...))QCommandLinkButton::metaObject
+24 (int (*)(...))QCommandLinkButton::qt_metacast
+32 (int (*)(...))QCommandLinkButton::qt_metacall
+40 (int (*)(...))QCommandLinkButton::~QCommandLinkButton
+48 (int (*)(...))QCommandLinkButton::~QCommandLinkButton
+56 (int (*)(...))QCommandLinkButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCommandLinkButton::sizeHint
+136 (int (*)(...))QCommandLinkButton::minimumSizeHint
+144 (int (*)(...))QCommandLinkButton::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QPushButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QPushButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QPushButton::focusInEvent
+232 (int (*)(...))QPushButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QCommandLinkButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QPushButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QCommandLinkButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI18QCommandLinkButton)
+480 (int (*)(...))QCommandLinkButton::_ZThn16_N18QCommandLinkButtonD1Ev
+488 (int (*)(...))QCommandLinkButton::_ZThn16_N18QCommandLinkButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCommandLinkButton
+ size=40 align=8
+ base size=40 base align=8
+QCommandLinkButton (0x0x7f5f5700a750) 0
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 16)
+ QPushButton (0x0x7f5f5700a7b8) 0
+ primary-for QCommandLinkButton (0x0x7f5f5700a750)
+ QAbstractButton (0x0x7f5f5700a820) 0
+ primary-for QPushButton (0x0x7f5f5700a7b8)
+ QWidget (0x0x7f5f57048930) 0
+ primary-for QAbstractButton (0x0x7f5f5700a820)
+ QObject (0x0x7f5f57074d80) 0
+ primary-for QWidget (0x0x7f5f57048930)
+ QPaintDevice (0x0x7f5f57074de0) 16
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 480)
+
+Class QCommonStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommonStyle::QPrivateSignal (0x0x7f5f570d7060) 0 empty
+
+Vtable for QCommonStyle
+QCommonStyle::_ZTV12QCommonStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QCommonStyle)
+16 (int (*)(...))QCommonStyle::metaObject
+24 (int (*)(...))QCommonStyle::qt_metacast
+32 (int (*)(...))QCommonStyle::qt_metacall
+40 (int (*)(...))QCommonStyle::~QCommonStyle
+48 (int (*)(...))QCommonStyle::~QCommonStyle
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCommonStyle::polish
+120 (int (*)(...))QCommonStyle::unpolish
+128 (int (*)(...))QCommonStyle::polish
+136 (int (*)(...))QCommonStyle::unpolish
+144 (int (*)(...))QCommonStyle::polish
+152 (int (*)(...))QStyle::itemTextRect
+160 (int (*)(...))QStyle::itemPixmapRect
+168 (int (*)(...))QStyle::drawItemText
+176 (int (*)(...))QStyle::drawItemPixmap
+184 (int (*)(...))QStyle::standardPalette
+192 (int (*)(...))QCommonStyle::drawPrimitive
+200 (int (*)(...))QCommonStyle::drawControl
+208 (int (*)(...))QCommonStyle::subElementRect
+216 (int (*)(...))QCommonStyle::drawComplexControl
+224 (int (*)(...))QCommonStyle::hitTestComplexControl
+232 (int (*)(...))QCommonStyle::subControlRect
+240 (int (*)(...))QCommonStyle::pixelMetric
+248 (int (*)(...))QCommonStyle::sizeFromContents
+256 (int (*)(...))QCommonStyle::styleHint
+264 (int (*)(...))QCommonStyle::standardPixmap
+272 (int (*)(...))QCommonStyle::standardIcon
+280 (int (*)(...))QCommonStyle::generatedIconPixmap
+288 (int (*)(...))QCommonStyle::layoutSpacing
+
+Class QCommonStyle
+ size=16 align=8
+ base size=16 base align=8
+QCommonStyle (0x0x7f5f5700a888) 0
+ vptr=((& QCommonStyle::_ZTV12QCommonStyle) + 16)
+ QStyle (0x0x7f5f5700a8f0) 0
+ primary-for QCommonStyle (0x0x7f5f5700a888)
+ QObject (0x0x7f5f570d7000) 0
+ primary-for QStyle (0x0x7f5f5700a8f0)
+
+Class QCompleter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCompleter::QPrivateSignal (0x0x7f5f570d7240) 0 empty
+
+Vtable for QCompleter
+QCompleter::_ZTV10QCompleter: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QCompleter)
+16 (int (*)(...))QCompleter::metaObject
+24 (int (*)(...))QCompleter::qt_metacast
+32 (int (*)(...))QCompleter::qt_metacall
+40 (int (*)(...))QCompleter::~QCompleter
+48 (int (*)(...))QCompleter::~QCompleter
+56 (int (*)(...))QCompleter::event
+64 (int (*)(...))QCompleter::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCompleter::pathFromIndex
+120 (int (*)(...))QCompleter::splitPath
+
+Class QCompleter
+ size=16 align=8
+ base size=16 base align=8
+QCompleter (0x0x7f5f5700a958) 0
+ vptr=((& QCompleter::_ZTV10QCompleter) + 16)
+ QObject (0x0x7f5f570d71e0) 0
+ primary-for QCompleter (0x0x7f5f5700a958)
+
+Class QDataWidgetMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDataWidgetMapper::QPrivateSignal (0x0x7f5f570d75a0) 0 empty
+
+Vtable for QDataWidgetMapper
+QDataWidgetMapper::_ZTV17QDataWidgetMapper: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QDataWidgetMapper)
+16 (int (*)(...))QDataWidgetMapper::metaObject
+24 (int (*)(...))QDataWidgetMapper::qt_metacast
+32 (int (*)(...))QDataWidgetMapper::qt_metacall
+40 (int (*)(...))QDataWidgetMapper::~QDataWidgetMapper
+48 (int (*)(...))QDataWidgetMapper::~QDataWidgetMapper
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDataWidgetMapper::setCurrentIndex
+
+Class QDataWidgetMapper
+ size=16 align=8
+ base size=16 base align=8
+QDataWidgetMapper (0x0x7f5f5700a9c0) 0
+ vptr=((& QDataWidgetMapper::_ZTV17QDataWidgetMapper) + 16)
+ QObject (0x0x7f5f570d7540) 0
+ primary-for QDataWidgetMapper (0x0x7f5f5700a9c0)
+
+Class QDateTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateTimeEdit::QPrivateSignal (0x0x7f5f570d78a0) 0 empty
+
+Vtable for QDateTimeEdit
+QDateTimeEdit::_ZTV13QDateTimeEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QDateTimeEdit)
+16 (int (*)(...))QDateTimeEdit::metaObject
+24 (int (*)(...))QDateTimeEdit::qt_metacast
+32 (int (*)(...))QDateTimeEdit::qt_metacall
+40 (int (*)(...))QDateTimeEdit::~QDateTimeEdit
+48 (int (*)(...))QDateTimeEdit::~QDateTimeEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI13QDateTimeEdit)
+512 (int (*)(...))QDateTimeEdit::_ZThn16_N13QDateTimeEditD1Ev
+520 (int (*)(...))QDateTimeEdit::_ZThn16_N13QDateTimeEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDateTimeEdit
+ size=40 align=8
+ base size=40 base align=8
+QDateTimeEdit (0x0x7f5f5700aa28) 0
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 16)
+ QAbstractSpinBox (0x0x7f5f5700aa90) 0
+ primary-for QDateTimeEdit (0x0x7f5f5700aa28)
+ QWidget (0x0x7f5f57048d20) 0
+ primary-for QAbstractSpinBox (0x0x7f5f5700aa90)
+ QObject (0x0x7f5f570d77e0) 0
+ primary-for QWidget (0x0x7f5f57048d20)
+ QPaintDevice (0x0x7f5f570d7840) 16
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 512)
+
+Class QTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeEdit::QPrivateSignal (0x0x7f5f570d7e40) 0 empty
+
+Vtable for QTimeEdit
+QTimeEdit::_ZTV9QTimeEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTimeEdit)
+16 (int (*)(...))QTimeEdit::metaObject
+24 (int (*)(...))QTimeEdit::qt_metacast
+32 (int (*)(...))QTimeEdit::qt_metacall
+40 (int (*)(...))QTimeEdit::~QTimeEdit
+48 (int (*)(...))QTimeEdit::~QTimeEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI9QTimeEdit)
+512 (int (*)(...))QTimeEdit::_ZThn16_N9QTimeEditD1Ev
+520 (int (*)(...))QTimeEdit::_ZThn16_N9QTimeEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTimeEdit
+ size=40 align=8
+ base size=40 base align=8
+QTimeEdit (0x0x7f5f5700ac30) 0
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 16)
+ QDateTimeEdit (0x0x7f5f5700ac98) 0
+ primary-for QTimeEdit (0x0x7f5f5700ac30)
+ QAbstractSpinBox (0x0x7f5f5700ad00) 0
+ primary-for QDateTimeEdit (0x0x7f5f5700ac98)
+ QWidget (0x0x7f5f57111230) 0
+ primary-for QAbstractSpinBox (0x0x7f5f5700ad00)
+ QObject (0x0x7f5f570d7d80) 0
+ primary-for QWidget (0x0x7f5f57111230)
+ QPaintDevice (0x0x7f5f570d7de0) 16
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 512)
+
+Class QDateEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateEdit::QPrivateSignal (0x0x7f5f56d44000) 0 empty
+
+Vtable for QDateEdit
+QDateEdit::_ZTV9QDateEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QDateEdit)
+16 (int (*)(...))QDateEdit::metaObject
+24 (int (*)(...))QDateEdit::qt_metacast
+32 (int (*)(...))QDateEdit::qt_metacall
+40 (int (*)(...))QDateEdit::~QDateEdit
+48 (int (*)(...))QDateEdit::~QDateEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI9QDateEdit)
+512 (int (*)(...))QDateEdit::_ZThn16_N9QDateEditD1Ev
+520 (int (*)(...))QDateEdit::_ZThn16_N9QDateEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDateEdit
+ size=40 align=8
+ base size=40 base align=8
+QDateEdit (0x0x7f5f5700ad68) 0
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 16)
+ QDateTimeEdit (0x0x7f5f5700add0) 0
+ primary-for QDateEdit (0x0x7f5f5700ad68)
+ QAbstractSpinBox (0x0x7f5f5700ae38) 0
+ primary-for QDateTimeEdit (0x0x7f5f5700add0)
+ QWidget (0x0x7f5f571112a0) 0
+ primary-for QAbstractSpinBox (0x0x7f5f5700ae38)
+ QObject (0x0x7f5f570d7f00) 0
+ primary-for QWidget (0x0x7f5f571112a0)
+ QPaintDevice (0x0x7f5f570d7f60) 16
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 512)
+
+Class QDial::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDial::QPrivateSignal (0x0x7f5f56d442a0) 0 empty
+
+Vtable for QDial
+QDial::_ZTV5QDial: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDial)
+16 (int (*)(...))QDial::metaObject
+24 (int (*)(...))QDial::qt_metacast
+32 (int (*)(...))QDial::qt_metacall
+40 (int (*)(...))QDial::~QDial
+48 (int (*)(...))QDial::~QDial
+56 (int (*)(...))QDial::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDial::sizeHint
+136 (int (*)(...))QDial::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDial::mousePressEvent
+176 (int (*)(...))QDial::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QDial::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDial::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDial::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDial::sliderChange
+440 (int (*)(...))QDial::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI5QDial)
+464 (int (*)(...))QDial::_ZThn16_N5QDialD1Ev
+472 (int (*)(...))QDial::_ZThn16_N5QDialD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDial
+ size=40 align=8
+ base size=40 base align=8
+QDial (0x0x7f5f5700aea0) 0
+ vptr=((& QDial::_ZTV5QDial) + 16)
+ QAbstractSlider (0x0x7f5f5700af08) 0
+ primary-for QDial (0x0x7f5f5700aea0)
+ QWidget (0x0x7f5f57111310) 0
+ primary-for QAbstractSlider (0x0x7f5f5700af08)
+ QObject (0x0x7f5f56d441e0) 0
+ primary-for QWidget (0x0x7f5f57111310)
+ QPaintDevice (0x0x7f5f56d44240) 16
+ vptr=((& QDial::_ZTV5QDial) + 464)
+
+Class QDialogButtonBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialogButtonBox::QPrivateSignal (0x0x7f5f56d444e0) 0 empty
+
+Vtable for QDialogButtonBox
+QDialogButtonBox::_ZTV16QDialogButtonBox: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QDialogButtonBox)
+16 (int (*)(...))QDialogButtonBox::metaObject
+24 (int (*)(...))QDialogButtonBox::qt_metacast
+32 (int (*)(...))QDialogButtonBox::qt_metacall
+40 (int (*)(...))QDialogButtonBox::~QDialogButtonBox
+48 (int (*)(...))QDialogButtonBox::~QDialogButtonBox
+56 (int (*)(...))QDialogButtonBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QDialogButtonBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI16QDialogButtonBox)
+448 (int (*)(...))QDialogButtonBox::_ZThn16_N16QDialogButtonBoxD1Ev
+456 (int (*)(...))QDialogButtonBox::_ZThn16_N16QDialogButtonBoxD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDialogButtonBox
+ size=40 align=8
+ base size=40 base align=8
+QDialogButtonBox (0x0x7f5f5700af70) 0
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 16)
+ QWidget (0x0x7f5f57111380) 0
+ primary-for QDialogButtonBox (0x0x7f5f5700af70)
+ QObject (0x0x7f5f56d44420) 0
+ primary-for QWidget (0x0x7f5f57111380)
+ QPaintDevice (0x0x7f5f56d44480) 16
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 448)
+
+Class QDockWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDockWidget::QPrivateSignal (0x0x7f5f56d44ae0) 0 empty
+
+Vtable for QDockWidget
+QDockWidget::_ZTV11QDockWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QDockWidget)
+16 (int (*)(...))QDockWidget::metaObject
+24 (int (*)(...))QDockWidget::qt_metacast
+32 (int (*)(...))QDockWidget::qt_metacall
+40 (int (*)(...))QDockWidget::~QDockWidget
+48 (int (*)(...))QDockWidget::~QDockWidget
+56 (int (*)(...))QDockWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDockWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QDockWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QDockWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDockWidget::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QDockWidget)
+456 (int (*)(...))QDockWidget::_ZThn16_N11QDockWidgetD1Ev
+464 (int (*)(...))QDockWidget::_ZThn16_N11QDockWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDockWidget
+ size=40 align=8
+ base size=40 base align=8
+QDockWidget (0x0x7f5f56d7a138) 0
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 16)
+ QWidget (0x0x7f5f56d67460) 0
+ primary-for QDockWidget (0x0x7f5f56d7a138)
+ QObject (0x0x7f5f56d44a20) 0
+ primary-for QWidget (0x0x7f5f56d67460)
+ QPaintDevice (0x0x7f5f56d44a80) 16
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 456)
+
+Class QTileRules
+ size=8 align=4
+ base size=8 base align=4
+QTileRules (0x0x7f5f56dbd120) 0
+
+Class QErrorMessage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QErrorMessage::QPrivateSignal (0x0x7f5f56dbd780) 0 empty
+
+Vtable for QErrorMessage
+QErrorMessage::_ZTV13QErrorMessage: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QErrorMessage)
+16 (int (*)(...))QErrorMessage::metaObject
+24 (int (*)(...))QErrorMessage::qt_metacast
+32 (int (*)(...))QErrorMessage::qt_metacall
+40 (int (*)(...))QErrorMessage::~QErrorMessage
+48 (int (*)(...))QErrorMessage::~QErrorMessage
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QErrorMessage::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QErrorMessage::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI13QErrorMessage)
+488 (int (*)(...))QErrorMessage::_ZThn16_N13QErrorMessageD1Ev
+496 (int (*)(...))QErrorMessage::_ZThn16_N13QErrorMessageD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QErrorMessage
+ size=40 align=8
+ base size=40 base align=8
+QErrorMessage (0x0x7f5f56d7a410) 0
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 16)
+ QDialog (0x0x7f5f56d7a478) 0
+ primary-for QErrorMessage (0x0x7f5f56d7a410)
+ QWidget (0x0x7f5f56d67e70) 0
+ primary-for QDialog (0x0x7f5f56d7a478)
+ QObject (0x0x7f5f56dbd6c0) 0
+ primary-for QWidget (0x0x7f5f56d67e70)
+ QPaintDevice (0x0x7f5f56dbd720) 16
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 488)
+
+Class QFileDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDialog::QPrivateSignal (0x0x7f5f56dbd9c0) 0 empty
+
+Vtable for QFileDialog
+QFileDialog::_ZTV11QFileDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFileDialog)
+16 (int (*)(...))QFileDialog::metaObject
+24 (int (*)(...))QFileDialog::qt_metacast
+32 (int (*)(...))QFileDialog::qt_metacall
+40 (int (*)(...))QFileDialog::~QFileDialog
+48 (int (*)(...))QFileDialog::~QFileDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QFileDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFileDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QFileDialog::done
+456 (int (*)(...))QFileDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QFileDialog)
+488 (int (*)(...))QFileDialog::_ZThn16_N11QFileDialogD1Ev
+496 (int (*)(...))QFileDialog::_ZThn16_N11QFileDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFileDialog
+ size=40 align=8
+ base size=40 base align=8
+QFileDialog (0x0x7f5f56d7a4e0) 0
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 16)
+ QDialog (0x0x7f5f56d7a548) 0
+ primary-for QFileDialog (0x0x7f5f56d7a4e0)
+ QWidget (0x0x7f5f56d67ee0) 0
+ primary-for QDialog (0x0x7f5f56d7a548)
+ QObject (0x0x7f5f56dbd900) 0
+ primary-for QWidget (0x0x7f5f56d67ee0)
+ QPaintDevice (0x0x7f5f56dbd960) 16
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 488)
+
+Vtable for QFileIconProvider
+QFileIconProvider::_ZTV17QFileIconProvider: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFileIconProvider)
+16 (int (*)(...))QFileIconProvider::~QFileIconProvider
+24 (int (*)(...))QFileIconProvider::~QFileIconProvider
+32 (int (*)(...))QFileIconProvider::icon
+40 (int (*)(...))QFileIconProvider::icon
+48 (int (*)(...))QAbstractFileIconProvider::type
+56 (int (*)(...))QAbstractFileIconProvider::setOptions
+64 (int (*)(...))QAbstractFileIconProvider::options
+
+Class QFileIconProvider
+ size=16 align=8
+ base size=16 base align=8
+QFileIconProvider (0x0x7f5f56d7a6e8) 0
+ vptr=((& QFileIconProvider::_ZTV17QFileIconProvider) + 16)
+ QAbstractFileIconProvider (0x0x7f5f56e262a0) 0
+ primary-for QFileIconProvider (0x0x7f5f56d7a6e8)
+
+Class QFocusFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFocusFrame::QPrivateSignal (0x0x7f5f56e26480) 0 empty
+
+Vtable for QFocusFrame
+QFocusFrame::_ZTV11QFocusFrame: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusFrame)
+16 (int (*)(...))QFocusFrame::metaObject
+24 (int (*)(...))QFocusFrame::qt_metacast
+32 (int (*)(...))QFocusFrame::qt_metacall
+40 (int (*)(...))QFocusFrame::~QFocusFrame
+48 (int (*)(...))QFocusFrame::~QFocusFrame
+56 (int (*)(...))QFocusFrame::event
+64 (int (*)(...))QFocusFrame::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFocusFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFocusFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QFocusFrame)
+456 (int (*)(...))QFocusFrame::_ZThn16_N11QFocusFrameD1Ev
+464 (int (*)(...))QFocusFrame::_ZThn16_N11QFocusFrameD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFocusFrame
+ size=40 align=8
+ base size=40 base align=8
+QFocusFrame (0x0x7f5f56d7a750) 0
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 16)
+ QWidget (0x0x7f5f56def850) 0
+ primary-for QFocusFrame (0x0x7f5f56d7a750)
+ QObject (0x0x7f5f56e263c0) 0
+ primary-for QWidget (0x0x7f5f56def850)
+ QPaintDevice (0x0x7f5f56e26420) 16
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 456)
+
+Class QFontComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontComboBox::QPrivateSignal (0x0x7f5f56e266c0) 0 empty
+
+Vtable for QFontComboBox
+QFontComboBox::_ZTV13QFontComboBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QFontComboBox)
+16 (int (*)(...))QFontComboBox::metaObject
+24 (int (*)(...))QFontComboBox::qt_metacast
+32 (int (*)(...))QFontComboBox::qt_metacall
+40 (int (*)(...))QFontComboBox::~QFontComboBox
+48 (int (*)(...))QFontComboBox::~QFontComboBox
+56 (int (*)(...))QFontComboBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFontComboBox::sizeHint
+136 (int (*)(...))QComboBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QComboBox::mousePressEvent
+176 (int (*)(...))QComboBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QComboBox::wheelEvent
+208 (int (*)(...))QComboBox::keyPressEvent
+216 (int (*)(...))QComboBox::keyReleaseEvent
+224 (int (*)(...))QComboBox::focusInEvent
+232 (int (*)(...))QComboBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QComboBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QComboBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QComboBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QComboBox::showEvent
+352 (int (*)(...))QComboBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QComboBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QComboBox::inputMethodEvent
+416 (int (*)(...))QComboBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QComboBox::setModel
+440 (int (*)(...))QComboBox::showPopup
+448 (int (*)(...))QComboBox::hidePopup
+456 (int (*)(...))QComboBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI13QFontComboBox)
+480 (int (*)(...))QFontComboBox::_ZThn16_N13QFontComboBoxD1Ev
+488 (int (*)(...))QFontComboBox::_ZThn16_N13QFontComboBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFontComboBox
+ size=40 align=8
+ base size=40 base align=8
+QFontComboBox (0x0x7f5f56d7a7b8) 0
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 16)
+ QComboBox (0x0x7f5f56d7a820) 0
+ primary-for QFontComboBox (0x0x7f5f56d7a7b8)
+ QWidget (0x0x7f5f56def8c0) 0
+ primary-for QComboBox (0x0x7f5f56d7a820)
+ QObject (0x0x7f5f56e26600) 0
+ primary-for QWidget (0x0x7f5f56def8c0)
+ QPaintDevice (0x0x7f5f56e26660) 16
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 480)
+
+Class QFontDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontDialog::QPrivateSignal (0x0x7f5f56e26cc0) 0 empty
+
+Vtable for QFontDialog
+QFontDialog::_ZTV11QFontDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFontDialog)
+16 (int (*)(...))QFontDialog::metaObject
+24 (int (*)(...))QFontDialog::qt_metacast
+32 (int (*)(...))QFontDialog::qt_metacall
+40 (int (*)(...))QFontDialog::~QFontDialog
+48 (int (*)(...))QFontDialog::~QFontDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QFontDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QFontDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFontDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QFontDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QFontDialog)
+488 (int (*)(...))QFontDialog::_ZThn16_N11QFontDialogD1Ev
+496 (int (*)(...))QFontDialog::_ZThn16_N11QFontDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFontDialog
+ size=40 align=8
+ base size=40 base align=8
+QFontDialog (0x0x7f5f56d7a9c0) 0
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 16)
+ QDialog (0x0x7f5f56d7aa28) 0
+ primary-for QFontDialog (0x0x7f5f56d7a9c0)
+ QWidget (0x0x7f5f56defb60) 0
+ primary-for QDialog (0x0x7f5f56d7aa28)
+ QObject (0x0x7f5f56e26c00) 0
+ primary-for QWidget (0x0x7f5f56defb60)
+ QPaintDevice (0x0x7f5f56e26c60) 16
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 488)
+
+Class QFormLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFormLayout::QPrivateSignal (0x0x7f5f56e8b300) 0 empty
+
+Class QFormLayout::TakeRowResult
+ size=16 align=8
+ base size=16 base align=8
+QFormLayout::TakeRowResult (0x0x7f5f56e8b360) 0
+
+Vtable for QFormLayout
+QFormLayout::_ZTV11QFormLayout: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFormLayout)
+16 (int (*)(...))QFormLayout::metaObject
+24 (int (*)(...))QFormLayout::qt_metacast
+32 (int (*)(...))QFormLayout::qt_metacall
+40 (int (*)(...))QFormLayout::~QFormLayout
+48 (int (*)(...))QFormLayout::~QFormLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFormLayout::spacing
+120 (int (*)(...))QFormLayout::setSpacing
+128 (int (*)(...))QFormLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QFormLayout::addItem
+152 (int (*)(...))QFormLayout::expandingDirections
+160 (int (*)(...))QFormLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QFormLayout::setGeometry
+184 (int (*)(...))QFormLayout::itemAt
+192 (int (*)(...))QFormLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QFormLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QFormLayout::sizeHint
+264 (int (*)(...))QFormLayout::hasHeightForWidth
+272 (int (*)(...))QFormLayout::heightForWidth
+280 (int (*)(...))-16
+288 (int (*)(...))(& _ZTI11QFormLayout)
+296 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayoutD1Ev
+304 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayoutD0Ev
+312 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout8sizeHintEv
+320 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout11minimumSizeEv
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+336 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout19expandingDirectionsEv
+344 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayout11setGeometryERK5QRect
+352 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+368 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout17hasHeightForWidthEv
+376 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout14heightForWidthEi
+384 (int (*)(...))QLayoutItem::minimumHeightForWidth
+392 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayout10invalidateEv
+400 (int (*)(...))QLayoutItem::widget
+408 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+416 (int (*)(...))QLayoutItem::spacerItem
+424 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QFormLayout
+ size=32 align=8
+ base size=28 base align=8
+QFormLayout (0x0x7f5f56d7abc8) 0
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 16)
+ QLayout (0x0x7f5f56defe70) 0
+ primary-for QFormLayout (0x0x7f5f56d7abc8)
+ QObject (0x0x7f5f56e8b240) 0
+ primary-for QLayout (0x0x7f5f56defe70)
+ QLayoutItem (0x0x7f5f56e8b2a0) 16
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 296)
+
+Class QGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGesture::QPrivateSignal (0x0x7f5f56ecbe40) 0 empty
+
+Vtable for QGesture
+QGesture::_ZTV8QGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QGesture)
+16 (int (*)(...))QGesture::metaObject
+24 (int (*)(...))QGesture::qt_metacast
+32 (int (*)(...))QGesture::qt_metacall
+40 (int (*)(...))QGesture::~QGesture
+48 (int (*)(...))QGesture::~QGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QGesture
+ size=16 align=8
+ base size=16 base align=8
+QGesture (0x0x7f5f56ed5680) 0
+ vptr=((& QGesture::_ZTV8QGesture) + 16)
+ QObject (0x0x7f5f56ecbde0) 0
+ primary-for QGesture (0x0x7f5f56ed5680)
+
+Class QPanGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPanGesture::QPrivateSignal (0x0x7f5f56ee9060) 0 empty
+
+Vtable for QPanGesture
+QPanGesture::_ZTV11QPanGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPanGesture)
+16 (int (*)(...))QPanGesture::metaObject
+24 (int (*)(...))QPanGesture::qt_metacast
+32 (int (*)(...))QPanGesture::qt_metacall
+40 (int (*)(...))QPanGesture::~QPanGesture
+48 (int (*)(...))QPanGesture::~QPanGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPanGesture
+ size=16 align=8
+ base size=16 base align=8
+QPanGesture (0x0x7f5f56ed56e8) 0
+ vptr=((& QPanGesture::_ZTV11QPanGesture) + 16)
+ QGesture (0x0x7f5f56ed5750) 0
+ primary-for QPanGesture (0x0x7f5f56ed56e8)
+ QObject (0x0x7f5f56ee9000) 0
+ primary-for QGesture (0x0x7f5f56ed5750)
+
+Class QPinchGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPinchGesture::QPrivateSignal (0x0x7f5f56ee9240) 0 empty
+
+Vtable for QPinchGesture
+QPinchGesture::_ZTV13QPinchGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPinchGesture)
+16 (int (*)(...))QPinchGesture::metaObject
+24 (int (*)(...))QPinchGesture::qt_metacast
+32 (int (*)(...))QPinchGesture::qt_metacall
+40 (int (*)(...))QPinchGesture::~QPinchGesture
+48 (int (*)(...))QPinchGesture::~QPinchGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPinchGesture
+ size=16 align=8
+ base size=16 base align=8
+QPinchGesture (0x0x7f5f56ed57b8) 0
+ vptr=((& QPinchGesture::_ZTV13QPinchGesture) + 16)
+ QGesture (0x0x7f5f56ed5820) 0
+ primary-for QPinchGesture (0x0x7f5f56ed57b8)
+ QObject (0x0x7f5f56ee91e0) 0
+ primary-for QGesture (0x0x7f5f56ed5820)
+
+Class QSwipeGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSwipeGesture::QPrivateSignal (0x0x7f5f56ee99c0) 0 empty
+
+Vtable for QSwipeGesture
+QSwipeGesture::_ZTV13QSwipeGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSwipeGesture)
+16 (int (*)(...))QSwipeGesture::metaObject
+24 (int (*)(...))QSwipeGesture::qt_metacast
+32 (int (*)(...))QSwipeGesture::qt_metacall
+40 (int (*)(...))QSwipeGesture::~QSwipeGesture
+48 (int (*)(...))QSwipeGesture::~QSwipeGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSwipeGesture
+ size=16 align=8
+ base size=16 base align=8
+QSwipeGesture (0x0x7f5f56ed59c0) 0
+ vptr=((& QSwipeGesture::_ZTV13QSwipeGesture) + 16)
+ QGesture (0x0x7f5f56ed5a28) 0
+ primary-for QSwipeGesture (0x0x7f5f56ed59c0)
+ QObject (0x0x7f5f56ee9960) 0
+ primary-for QGesture (0x0x7f5f56ed5a28)
+
+Class QTapGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapGesture::QPrivateSignal (0x0x7f5f56ee9c60) 0 empty
+
+Vtable for QTapGesture
+QTapGesture::_ZTV11QTapGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTapGesture)
+16 (int (*)(...))QTapGesture::metaObject
+24 (int (*)(...))QTapGesture::qt_metacast
+32 (int (*)(...))QTapGesture::qt_metacall
+40 (int (*)(...))QTapGesture::~QTapGesture
+48 (int (*)(...))QTapGesture::~QTapGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTapGesture
+ size=16 align=8
+ base size=16 base align=8
+QTapGesture (0x0x7f5f56ed5a90) 0
+ vptr=((& QTapGesture::_ZTV11QTapGesture) + 16)
+ QGesture (0x0x7f5f56ed5af8) 0
+ primary-for QTapGesture (0x0x7f5f56ed5a90)
+ QObject (0x0x7f5f56ee9c00) 0
+ primary-for QGesture (0x0x7f5f56ed5af8)
+
+Class QTapAndHoldGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapAndHoldGesture::QPrivateSignal (0x0x7f5f56ee9e40) 0 empty
+
+Vtable for QTapAndHoldGesture
+QTapAndHoldGesture::_ZTV18QTapAndHoldGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QTapAndHoldGesture)
+16 (int (*)(...))QTapAndHoldGesture::metaObject
+24 (int (*)(...))QTapAndHoldGesture::qt_metacast
+32 (int (*)(...))QTapAndHoldGesture::qt_metacall
+40 (int (*)(...))QTapAndHoldGesture::~QTapAndHoldGesture
+48 (int (*)(...))QTapAndHoldGesture::~QTapAndHoldGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTapAndHoldGesture
+ size=16 align=8
+ base size=16 base align=8
+QTapAndHoldGesture (0x0x7f5f56ed5b60) 0
+ vptr=((& QTapAndHoldGesture::_ZTV18QTapAndHoldGesture) + 16)
+ QGesture (0x0x7f5f56ed5bc8) 0
+ primary-for QTapAndHoldGesture (0x0x7f5f56ed5b60)
+ QObject (0x0x7f5f56ee9de0) 0
+ primary-for QGesture (0x0x7f5f56ed5bc8)
+
+Vtable for QGestureEvent
+QGestureEvent::_ZTV13QGestureEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGestureEvent)
+16 (int (*)(...))QGestureEvent::~QGestureEvent
+24 (int (*)(...))QGestureEvent::~QGestureEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGestureEvent
+ size=64 align=8
+ base size=64 base align=8
+QGestureEvent (0x0x7f5f56ed5c30) 0
+ vptr=((& QGestureEvent::_ZTV13QGestureEvent) + 16)
+ QEvent (0x0x7f5f56b34000) 0
+ primary-for QGestureEvent (0x0x7f5f56ed5c30)
+
+Vtable for QGestureRecognizer
+QGestureRecognizer::_ZTV18QGestureRecognizer: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGestureRecognizer)
+16 0
+24 0
+32 (int (*)(...))QGestureRecognizer::create
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGestureRecognizer::reset
+
+Class QGestureRecognizer
+ size=8 align=8
+ base size=8 base align=8
+QGestureRecognizer (0x0x7f5f56b34c60) 0 nearly-empty
+ vptr=((& QGestureRecognizer::_ZTV18QGestureRecognizer) + 16)
+
+Vtable for QGraphicsItem
+QGraphicsItem::_ZTV13QGraphicsItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGraphicsItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsItem::isObscuredBy
+88 (int (*)(...))QGraphicsItem::opaqueArea
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))QGraphicsItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsItem (0x0x7f5f56b34900) 0
+ vptr=((& QGraphicsItem::_ZTV13QGraphicsItem) + 16)
+
+Class QGraphicsObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsObject::QPrivateSignal (0x0x7f5f56c49180) 0 empty
+
+Vtable for QGraphicsObject
+QGraphicsObject::_ZTV15QGraphicsObject: 53 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsObject)
+16 (int (*)(...))QGraphicsObject::metaObject
+24 (int (*)(...))QGraphicsObject::qt_metacast
+32 (int (*)(...))QGraphicsObject::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QGraphicsObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))-16
+120 (int (*)(...))(& _ZTI15QGraphicsObject)
+128 0
+136 0
+144 (int (*)(...))QGraphicsItem::advance
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))QGraphicsItem::shape
+168 (int (*)(...))QGraphicsItem::contains
+176 (int (*)(...))QGraphicsItem::collidesWithItem
+184 (int (*)(...))QGraphicsItem::collidesWithPath
+192 (int (*)(...))QGraphicsItem::isObscuredBy
+200 (int (*)(...))QGraphicsItem::opaqueArea
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))QGraphicsItem::type
+224 (int (*)(...))QGraphicsItem::sceneEventFilter
+232 (int (*)(...))QGraphicsItem::sceneEvent
+240 (int (*)(...))QGraphicsItem::contextMenuEvent
+248 (int (*)(...))QGraphicsItem::dragEnterEvent
+256 (int (*)(...))QGraphicsItem::dragLeaveEvent
+264 (int (*)(...))QGraphicsItem::dragMoveEvent
+272 (int (*)(...))QGraphicsItem::dropEvent
+280 (int (*)(...))QGraphicsItem::focusInEvent
+288 (int (*)(...))QGraphicsItem::focusOutEvent
+296 (int (*)(...))QGraphicsItem::hoverEnterEvent
+304 (int (*)(...))QGraphicsItem::hoverMoveEvent
+312 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+320 (int (*)(...))QGraphicsItem::keyPressEvent
+328 (int (*)(...))QGraphicsItem::keyReleaseEvent
+336 (int (*)(...))QGraphicsItem::mousePressEvent
+344 (int (*)(...))QGraphicsItem::mouseMoveEvent
+352 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+360 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+368 (int (*)(...))QGraphicsItem::wheelEvent
+376 (int (*)(...))QGraphicsItem::inputMethodEvent
+384 (int (*)(...))QGraphicsItem::inputMethodQuery
+392 (int (*)(...))QGraphicsItem::itemChange
+400 (int (*)(...))QGraphicsItem::supportsExtension
+408 (int (*)(...))QGraphicsItem::setExtension
+416 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsObject
+ size=32 align=8
+ base size=32 base align=8
+QGraphicsObject (0x0x7f5f56bd3cb0) 0
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 16)
+ QObject (0x0x7f5f56c490c0) 0
+ primary-for QGraphicsObject (0x0x7f5f56bd3cb0)
+ QGraphicsItem (0x0x7f5f56c49120) 16
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 128)
+
+Vtable for QAbstractGraphicsShapeItem
+QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractGraphicsShapeItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QAbstractGraphicsShapeItem::isObscuredBy
+88 (int (*)(...))QAbstractGraphicsShapeItem::opaqueArea
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))QGraphicsItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QAbstractGraphicsShapeItem
+ size=16 align=8
+ base size=16 base align=8
+QAbstractGraphicsShapeItem (0x0x7f5f56b466e8) 0
+ vptr=((& QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem) + 16)
+ QGraphicsItem (0x0x7f5f56c49240) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f5f56b466e8)
+
+Vtable for QGraphicsPathItem
+QGraphicsPathItem::_ZTV17QGraphicsPathItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsPathItem)
+16 (int (*)(...))QGraphicsPathItem::~QGraphicsPathItem
+24 (int (*)(...))QGraphicsPathItem::~QGraphicsPathItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPathItem::boundingRect
+48 (int (*)(...))QGraphicsPathItem::shape
+56 (int (*)(...))QGraphicsPathItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPathItem::isObscuredBy
+88 (int (*)(...))QGraphicsPathItem::opaqueArea
+96 (int (*)(...))QGraphicsPathItem::paint
+104 (int (*)(...))QGraphicsPathItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPathItem::supportsExtension
+296 (int (*)(...))QGraphicsPathItem::setExtension
+304 (int (*)(...))QGraphicsPathItem::extension
+
+Class QGraphicsPathItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPathItem (0x0x7f5f56b46750) 0
+ vptr=((& QGraphicsPathItem::_ZTV17QGraphicsPathItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f5f56b467b8) 0
+ primary-for QGraphicsPathItem (0x0x7f5f56b46750)
+ QGraphicsItem (0x0x7f5f56c49360) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f5f56b467b8)
+
+Vtable for QGraphicsRectItem
+QGraphicsRectItem::_ZTV17QGraphicsRectItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsRectItem)
+16 (int (*)(...))QGraphicsRectItem::~QGraphicsRectItem
+24 (int (*)(...))QGraphicsRectItem::~QGraphicsRectItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsRectItem::boundingRect
+48 (int (*)(...))QGraphicsRectItem::shape
+56 (int (*)(...))QGraphicsRectItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsRectItem::isObscuredBy
+88 (int (*)(...))QGraphicsRectItem::opaqueArea
+96 (int (*)(...))QGraphicsRectItem::paint
+104 (int (*)(...))QGraphicsRectItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsRectItem::supportsExtension
+296 (int (*)(...))QGraphicsRectItem::setExtension
+304 (int (*)(...))QGraphicsRectItem::extension
+
+Class QGraphicsRectItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsRectItem (0x0x7f5f56b46820) 0
+ vptr=((& QGraphicsRectItem::_ZTV17QGraphicsRectItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f5f56b46888) 0
+ primary-for QGraphicsRectItem (0x0x7f5f56b46820)
+ QGraphicsItem (0x0x7f5f56c49480) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f5f56b46888)
+
+Vtable for QGraphicsEllipseItem
+QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsEllipseItem)
+16 (int (*)(...))QGraphicsEllipseItem::~QGraphicsEllipseItem
+24 (int (*)(...))QGraphicsEllipseItem::~QGraphicsEllipseItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsEllipseItem::boundingRect
+48 (int (*)(...))QGraphicsEllipseItem::shape
+56 (int (*)(...))QGraphicsEllipseItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsEllipseItem::isObscuredBy
+88 (int (*)(...))QGraphicsEllipseItem::opaqueArea
+96 (int (*)(...))QGraphicsEllipseItem::paint
+104 (int (*)(...))QGraphicsEllipseItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsEllipseItem::supportsExtension
+296 (int (*)(...))QGraphicsEllipseItem::setExtension
+304 (int (*)(...))QGraphicsEllipseItem::extension
+
+Class QGraphicsEllipseItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsEllipseItem (0x0x7f5f56b468f0) 0
+ vptr=((& QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f5f56b46958) 0
+ primary-for QGraphicsEllipseItem (0x0x7f5f56b468f0)
+ QGraphicsItem (0x0x7f5f56c49600) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f5f56b46958)
+
+Vtable for QGraphicsPolygonItem
+QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsPolygonItem)
+16 (int (*)(...))QGraphicsPolygonItem::~QGraphicsPolygonItem
+24 (int (*)(...))QGraphicsPolygonItem::~QGraphicsPolygonItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPolygonItem::boundingRect
+48 (int (*)(...))QGraphicsPolygonItem::shape
+56 (int (*)(...))QGraphicsPolygonItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPolygonItem::isObscuredBy
+88 (int (*)(...))QGraphicsPolygonItem::opaqueArea
+96 (int (*)(...))QGraphicsPolygonItem::paint
+104 (int (*)(...))QGraphicsPolygonItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPolygonItem::supportsExtension
+296 (int (*)(...))QGraphicsPolygonItem::setExtension
+304 (int (*)(...))QGraphicsPolygonItem::extension
+
+Class QGraphicsPolygonItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPolygonItem (0x0x7f5f56b469c0) 0
+ vptr=((& QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f5f56b46a28) 0
+ primary-for QGraphicsPolygonItem (0x0x7f5f56b469c0)
+ QGraphicsItem (0x0x7f5f56c49780) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f5f56b46a28)
+
+Vtable for QGraphicsLineItem
+QGraphicsLineItem::_ZTV17QGraphicsLineItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsLineItem)
+16 (int (*)(...))QGraphicsLineItem::~QGraphicsLineItem
+24 (int (*)(...))QGraphicsLineItem::~QGraphicsLineItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsLineItem::boundingRect
+48 (int (*)(...))QGraphicsLineItem::shape
+56 (int (*)(...))QGraphicsLineItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsLineItem::isObscuredBy
+88 (int (*)(...))QGraphicsLineItem::opaqueArea
+96 (int (*)(...))QGraphicsLineItem::paint
+104 (int (*)(...))QGraphicsLineItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsLineItem::supportsExtension
+296 (int (*)(...))QGraphicsLineItem::setExtension
+304 (int (*)(...))QGraphicsLineItem::extension
+
+Class QGraphicsLineItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLineItem (0x0x7f5f56b46a90) 0
+ vptr=((& QGraphicsLineItem::_ZTV17QGraphicsLineItem) + 16)
+ QGraphicsItem (0x0x7f5f56c498a0) 0
+ primary-for QGraphicsLineItem (0x0x7f5f56b46a90)
+
+Vtable for QGraphicsPixmapItem
+QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsPixmapItem)
+16 (int (*)(...))QGraphicsPixmapItem::~QGraphicsPixmapItem
+24 (int (*)(...))QGraphicsPixmapItem::~QGraphicsPixmapItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPixmapItem::boundingRect
+48 (int (*)(...))QGraphicsPixmapItem::shape
+56 (int (*)(...))QGraphicsPixmapItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPixmapItem::isObscuredBy
+88 (int (*)(...))QGraphicsPixmapItem::opaqueArea
+96 (int (*)(...))QGraphicsPixmapItem::paint
+104 (int (*)(...))QGraphicsPixmapItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPixmapItem::supportsExtension
+296 (int (*)(...))QGraphicsPixmapItem::setExtension
+304 (int (*)(...))QGraphicsPixmapItem::extension
+
+Class QGraphicsPixmapItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPixmapItem (0x0x7f5f56b46af8) 0
+ vptr=((& QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem) + 16)
+ QGraphicsItem (0x0x7f5f56c49a20) 0
+ primary-for QGraphicsPixmapItem (0x0x7f5f56b46af8)
+
+Class QGraphicsTextItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTextItem::QPrivateSignal (0x0x7f5f56c49c60) 0 empty
+
+Vtable for QGraphicsTextItem
+QGraphicsTextItem::_ZTV17QGraphicsTextItem: 82 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsTextItem)
+16 (int (*)(...))QGraphicsTextItem::metaObject
+24 (int (*)(...))QGraphicsTextItem::qt_metacast
+32 (int (*)(...))QGraphicsTextItem::qt_metacall
+40 (int (*)(...))QGraphicsTextItem::~QGraphicsTextItem
+48 (int (*)(...))QGraphicsTextItem::~QGraphicsTextItem
+56 (int (*)(...))QGraphicsObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsTextItem::boundingRect
+120 (int (*)(...))QGraphicsTextItem::shape
+128 (int (*)(...))QGraphicsTextItem::contains
+136 (int (*)(...))QGraphicsTextItem::paint
+144 (int (*)(...))QGraphicsTextItem::isObscuredBy
+152 (int (*)(...))QGraphicsTextItem::opaqueArea
+160 (int (*)(...))QGraphicsTextItem::type
+168 (int (*)(...))QGraphicsTextItem::sceneEvent
+176 (int (*)(...))QGraphicsTextItem::mousePressEvent
+184 (int (*)(...))QGraphicsTextItem::mouseMoveEvent
+192 (int (*)(...))QGraphicsTextItem::mouseReleaseEvent
+200 (int (*)(...))QGraphicsTextItem::mouseDoubleClickEvent
+208 (int (*)(...))QGraphicsTextItem::contextMenuEvent
+216 (int (*)(...))QGraphicsTextItem::keyPressEvent
+224 (int (*)(...))QGraphicsTextItem::keyReleaseEvent
+232 (int (*)(...))QGraphicsTextItem::focusInEvent
+240 (int (*)(...))QGraphicsTextItem::focusOutEvent
+248 (int (*)(...))QGraphicsTextItem::dragEnterEvent
+256 (int (*)(...))QGraphicsTextItem::dragLeaveEvent
+264 (int (*)(...))QGraphicsTextItem::dragMoveEvent
+272 (int (*)(...))QGraphicsTextItem::dropEvent
+280 (int (*)(...))QGraphicsTextItem::inputMethodEvent
+288 (int (*)(...))QGraphicsTextItem::hoverEnterEvent
+296 (int (*)(...))QGraphicsTextItem::hoverMoveEvent
+304 (int (*)(...))QGraphicsTextItem::hoverLeaveEvent
+312 (int (*)(...))QGraphicsTextItem::inputMethodQuery
+320 (int (*)(...))QGraphicsTextItem::supportsExtension
+328 (int (*)(...))QGraphicsTextItem::setExtension
+336 (int (*)(...))QGraphicsTextItem::extension
+344 (int (*)(...))-16
+352 (int (*)(...))(& _ZTI17QGraphicsTextItem)
+360 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItemD1Ev
+368 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItemD0Ev
+376 (int (*)(...))QGraphicsItem::advance
+384 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem12boundingRectEv
+392 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem5shapeEv
+400 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem8containsERK7QPointF
+408 (int (*)(...))QGraphicsItem::collidesWithItem
+416 (int (*)(...))QGraphicsItem::collidesWithPath
+424 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem12isObscuredByEPK13QGraphicsItem
+432 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem10opaqueAreaEv
+440 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+448 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem4typeEv
+456 (int (*)(...))QGraphicsItem::sceneEventFilter
+464 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem10sceneEventEP6QEvent
+472 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem16contextMenuEventEP30QGraphicsSceneContextMenuEvent
+480 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14dragEnterEventEP27QGraphicsSceneDragDropEvent
+488 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14dragLeaveEventEP27QGraphicsSceneDragDropEvent
+496 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13dragMoveEventEP27QGraphicsSceneDragDropEvent
+504 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem9dropEventEP27QGraphicsSceneDragDropEvent
+512 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem12focusInEventEP11QFocusEvent
+520 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13focusOutEventEP11QFocusEvent
+528 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15hoverEnterEventEP24QGraphicsSceneHoverEvent
+536 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14hoverMoveEventEP24QGraphicsSceneHoverEvent
+544 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+552 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13keyPressEventEP9QKeyEvent
+560 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15keyReleaseEventEP9QKeyEvent
+568 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15mousePressEventEP24QGraphicsSceneMouseEvent
+576 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14mouseMoveEventEP24QGraphicsSceneMouseEvent
+584 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem17mouseReleaseEventEP24QGraphicsSceneMouseEvent
+592 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent
+600 (int (*)(...))QGraphicsItem::wheelEvent
+608 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem16inputMethodEventEP17QInputMethodEvent
+616 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem16inputMethodQueryEN2Qt16InputMethodQueryE
+624 (int (*)(...))QGraphicsItem::itemChange
+632 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem17supportsExtensionEN13QGraphicsItem9ExtensionE
+640 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem12setExtensionEN13QGraphicsItem9ExtensionERK8QVariant
+648 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem9extensionERK8QVariant
+
+Class QGraphicsTextItem
+ size=40 align=8
+ base size=40 base align=8
+QGraphicsTextItem (0x0x7f5f56b46b60) 0
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 16)
+ QGraphicsObject (0x0x7f5f56c95150) 0
+ primary-for QGraphicsTextItem (0x0x7f5f56b46b60)
+ QObject (0x0x7f5f56c49ba0) 0
+ primary-for QGraphicsObject (0x0x7f5f56c95150)
+ QGraphicsItem (0x0x7f5f56c49c00) 16
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 360)
+
+Vtable for QGraphicsSimpleTextItem
+QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSimpleTextItem)
+16 (int (*)(...))QGraphicsSimpleTextItem::~QGraphicsSimpleTextItem
+24 (int (*)(...))QGraphicsSimpleTextItem::~QGraphicsSimpleTextItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsSimpleTextItem::boundingRect
+48 (int (*)(...))QGraphicsSimpleTextItem::shape
+56 (int (*)(...))QGraphicsSimpleTextItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsSimpleTextItem::isObscuredBy
+88 (int (*)(...))QGraphicsSimpleTextItem::opaqueArea
+96 (int (*)(...))QGraphicsSimpleTextItem::paint
+104 (int (*)(...))QGraphicsSimpleTextItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsSimpleTextItem::supportsExtension
+296 (int (*)(...))QGraphicsSimpleTextItem::setExtension
+304 (int (*)(...))QGraphicsSimpleTextItem::extension
+
+Class QGraphicsSimpleTextItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsSimpleTextItem (0x0x7f5f56b46c98) 0
+ vptr=((& QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f5f56b46d00) 0
+ primary-for QGraphicsSimpleTextItem (0x0x7f5f56b46c98)
+ QGraphicsItem (0x0x7f5f56c49f00) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f5f56b46d00)
+
+Vtable for QGraphicsItemGroup
+QGraphicsItemGroup::_ZTV18QGraphicsItemGroup: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGraphicsItemGroup)
+16 (int (*)(...))QGraphicsItemGroup::~QGraphicsItemGroup
+24 (int (*)(...))QGraphicsItemGroup::~QGraphicsItemGroup
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsItemGroup::boundingRect
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsItemGroup::isObscuredBy
+88 (int (*)(...))QGraphicsItemGroup::opaqueArea
+96 (int (*)(...))QGraphicsItemGroup::paint
+104 (int (*)(...))QGraphicsItemGroup::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsItemGroup
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsItemGroup (0x0x7f5f56b46d68) 0
+ vptr=((& QGraphicsItemGroup::_ZTV18QGraphicsItemGroup) + 16)
+ QGraphicsItem (0x0x7f5f56cc4060) 0
+ primary-for QGraphicsItemGroup (0x0x7f5f56b46d68)
+
+Vtable for QGraphicsLayoutItem
+QGraphicsLayoutItem::_ZTV19QGraphicsLayoutItem: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsLayoutItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsLayoutItem::setGeometry
+40 (int (*)(...))QGraphicsLayoutItem::getContentsMargins
+48 (int (*)(...))QGraphicsLayoutItem::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsLayoutItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLayoutItem (0x0x7f5f56cc4360) 0
+ vptr=((& QGraphicsLayoutItem::_ZTV19QGraphicsLayoutItem) + 16)
+
+Vtable for QGraphicsLayout
+QGraphicsLayout::_ZTV15QGraphicsLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsLayout)
+16 0
+24 0
+32 (int (*)(...))QGraphicsLayoutItem::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))QGraphicsLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLayout (0x0x7f5f56b46dd0) 0
+ vptr=((& QGraphicsLayout::_ZTV15QGraphicsLayout) + 16)
+ QGraphicsLayoutItem (0x0x7f5f56cc4a20) 0
+ primary-for QGraphicsLayout (0x0x7f5f56b46dd0)
+
+Class QGraphicsAnchor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsAnchor::QPrivateSignal (0x0x7f5f56cc4d20) 0 empty
+
+Vtable for QGraphicsAnchor
+QGraphicsAnchor::_ZTV15QGraphicsAnchor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsAnchor)
+16 (int (*)(...))QGraphicsAnchor::metaObject
+24 (int (*)(...))QGraphicsAnchor::qt_metacast
+32 (int (*)(...))QGraphicsAnchor::qt_metacall
+40 (int (*)(...))QGraphicsAnchor::~QGraphicsAnchor
+48 (int (*)(...))QGraphicsAnchor::~QGraphicsAnchor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QGraphicsAnchor
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsAnchor (0x0x7f5f56b46e38) 0
+ vptr=((& QGraphicsAnchor::_ZTV15QGraphicsAnchor) + 16)
+ QObject (0x0x7f5f56cc4cc0) 0
+ primary-for QGraphicsAnchor (0x0x7f5f56b46e38)
+
+Vtable for QGraphicsAnchorLayout
+QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QGraphicsAnchorLayout)
+16 (int (*)(...))QGraphicsAnchorLayout::~QGraphicsAnchorLayout
+24 (int (*)(...))QGraphicsAnchorLayout::~QGraphicsAnchorLayout
+32 (int (*)(...))QGraphicsAnchorLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsAnchorLayout::sizeHint
+72 (int (*)(...))QGraphicsAnchorLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsAnchorLayout::count
+96 (int (*)(...))QGraphicsAnchorLayout::itemAt
+104 (int (*)(...))QGraphicsAnchorLayout::removeAt
+
+Class QGraphicsAnchorLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsAnchorLayout (0x0x7f5f56b46ea0) 0
+ vptr=((& QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout) + 16)
+ QGraphicsLayout (0x0x7f5f56b46f08) 0
+ primary-for QGraphicsAnchorLayout (0x0x7f5f56b46ea0)
+ QGraphicsLayoutItem (0x0x7f5f56cc4ea0) 0
+ primary-for QGraphicsLayout (0x0x7f5f56b46f08)
+
+Class QGraphicsEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsEffect::QPrivateSignal (0x0x7f5f56d0c060) 0 empty
+
+Vtable for QGraphicsEffect
+QGraphicsEffect::_ZTV15QGraphicsEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsEffect)
+16 (int (*)(...))QGraphicsEffect::metaObject
+24 (int (*)(...))QGraphicsEffect::qt_metacast
+32 (int (*)(...))QGraphicsEffect::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsEffect (0x0x7f5f56b46f70) 0
+ vptr=((& QGraphicsEffect::_ZTV15QGraphicsEffect) + 16)
+ QObject (0x0x7f5f56d0c000) 0
+ primary-for QGraphicsEffect (0x0x7f5f56b46f70)
+
+Class QGraphicsColorizeEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsColorizeEffect::QPrivateSignal (0x0x7f5f56d0c600) 0 empty
+
+Vtable for QGraphicsColorizeEffect
+QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsColorizeEffect)
+16 (int (*)(...))QGraphicsColorizeEffect::metaObject
+24 (int (*)(...))QGraphicsColorizeEffect::qt_metacast
+32 (int (*)(...))QGraphicsColorizeEffect::qt_metacall
+40 (int (*)(...))QGraphicsColorizeEffect::~QGraphicsColorizeEffect
+48 (int (*)(...))QGraphicsColorizeEffect::~QGraphicsColorizeEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))QGraphicsColorizeEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsColorizeEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsColorizeEffect (0x0x7f5f56d1b0d0) 0
+ vptr=((& QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect) + 16)
+ QGraphicsEffect (0x0x7f5f56d1b138) 0
+ primary-for QGraphicsColorizeEffect (0x0x7f5f56d1b0d0)
+ QObject (0x0x7f5f56d0c5a0) 0
+ primary-for QGraphicsEffect (0x0x7f5f56d1b138)
+
+Class QGraphicsBlurEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsBlurEffect::QPrivateSignal (0x0x7f5f56d0c7e0) 0 empty
+
+Vtable for QGraphicsBlurEffect
+QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsBlurEffect)
+16 (int (*)(...))QGraphicsBlurEffect::metaObject
+24 (int (*)(...))QGraphicsBlurEffect::qt_metacast
+32 (int (*)(...))QGraphicsBlurEffect::qt_metacall
+40 (int (*)(...))QGraphicsBlurEffect::~QGraphicsBlurEffect
+48 (int (*)(...))QGraphicsBlurEffect::~QGraphicsBlurEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsBlurEffect::boundingRectFor
+120 (int (*)(...))QGraphicsBlurEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsBlurEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsBlurEffect (0x0x7f5f56d1b1a0) 0
+ vptr=((& QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect) + 16)
+ QGraphicsEffect (0x0x7f5f56d1b208) 0
+ primary-for QGraphicsBlurEffect (0x0x7f5f56d1b1a0)
+ QObject (0x0x7f5f56d0c780) 0
+ primary-for QGraphicsEffect (0x0x7f5f56d1b208)
+
+Class QGraphicsDropShadowEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsDropShadowEffect::QPrivateSignal (0x0x7f5f56d0ce40) 0 empty
+
+Vtable for QGraphicsDropShadowEffect
+QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QGraphicsDropShadowEffect)
+16 (int (*)(...))QGraphicsDropShadowEffect::metaObject
+24 (int (*)(...))QGraphicsDropShadowEffect::qt_metacast
+32 (int (*)(...))QGraphicsDropShadowEffect::qt_metacall
+40 (int (*)(...))QGraphicsDropShadowEffect::~QGraphicsDropShadowEffect
+48 (int (*)(...))QGraphicsDropShadowEffect::~QGraphicsDropShadowEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsDropShadowEffect::boundingRectFor
+120 (int (*)(...))QGraphicsDropShadowEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsDropShadowEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsDropShadowEffect (0x0x7f5f56d1b3a8) 0
+ vptr=((& QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect) + 16)
+ QGraphicsEffect (0x0x7f5f56d1b410) 0
+ primary-for QGraphicsDropShadowEffect (0x0x7f5f56d1b3a8)
+ QObject (0x0x7f5f56d0cde0) 0
+ primary-for QGraphicsEffect (0x0x7f5f56d1b410)
+
+Class QGraphicsOpacityEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsOpacityEffect::QPrivateSignal (0x0x7f5f569742a0) 0 empty
+
+Vtable for QGraphicsOpacityEffect
+QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QGraphicsOpacityEffect)
+16 (int (*)(...))QGraphicsOpacityEffect::metaObject
+24 (int (*)(...))QGraphicsOpacityEffect::qt_metacast
+32 (int (*)(...))QGraphicsOpacityEffect::qt_metacall
+40 (int (*)(...))QGraphicsOpacityEffect::~QGraphicsOpacityEffect
+48 (int (*)(...))QGraphicsOpacityEffect::~QGraphicsOpacityEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))QGraphicsOpacityEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsOpacityEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsOpacityEffect (0x0x7f5f56d1b478) 0
+ vptr=((& QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect) + 16)
+ QGraphicsEffect (0x0x7f5f56d1b4e0) 0
+ primary-for QGraphicsOpacityEffect (0x0x7f5f56d1b478)
+ QObject (0x0x7f5f56974240) 0
+ primary-for QGraphicsEffect (0x0x7f5f56d1b4e0)
+
+Vtable for QGraphicsGridLayout
+QGraphicsGridLayout::_ZTV19QGraphicsGridLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsGridLayout)
+16 (int (*)(...))QGraphicsGridLayout::~QGraphicsGridLayout
+24 (int (*)(...))QGraphicsGridLayout::~QGraphicsGridLayout
+32 (int (*)(...))QGraphicsGridLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsGridLayout::sizeHint
+72 (int (*)(...))QGraphicsGridLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsGridLayout::count
+96 (int (*)(...))QGraphicsGridLayout::itemAt
+104 (int (*)(...))QGraphicsGridLayout::removeAt
+
+Class QGraphicsGridLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsGridLayout (0x0x7f5f56d1b548) 0
+ vptr=((& QGraphicsGridLayout::_ZTV19QGraphicsGridLayout) + 16)
+ QGraphicsLayout (0x0x7f5f56d1b5b0) 0
+ primary-for QGraphicsGridLayout (0x0x7f5f56d1b548)
+ QGraphicsLayoutItem (0x0x7f5f56974420) 0
+ primary-for QGraphicsLayout (0x0x7f5f56d1b5b0)
+
+Class QGraphicsItemAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsItemAnimation::QPrivateSignal (0x0x7f5f56974600) 0 empty
+
+Vtable for QGraphicsItemAnimation
+QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QGraphicsItemAnimation)
+16 (int (*)(...))QGraphicsItemAnimation::metaObject
+24 (int (*)(...))QGraphicsItemAnimation::qt_metacast
+32 (int (*)(...))QGraphicsItemAnimation::qt_metacall
+40 (int (*)(...))QGraphicsItemAnimation::~QGraphicsItemAnimation
+48 (int (*)(...))QGraphicsItemAnimation::~QGraphicsItemAnimation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsItemAnimation::beforeAnimationStep
+120 (int (*)(...))QGraphicsItemAnimation::afterAnimationStep
+
+Class QGraphicsItemAnimation
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsItemAnimation (0x0x7f5f56d1b6e8) 0
+ vptr=((& QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation) + 16)
+ QObject (0x0x7f5f569745a0) 0
+ primary-for QGraphicsItemAnimation (0x0x7f5f56d1b6e8)
+
+Vtable for QGraphicsLinearLayout
+QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QGraphicsLinearLayout)
+16 (int (*)(...))QGraphicsLinearLayout::~QGraphicsLinearLayout
+24 (int (*)(...))QGraphicsLinearLayout::~QGraphicsLinearLayout
+32 (int (*)(...))QGraphicsLinearLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsLinearLayout::sizeHint
+72 (int (*)(...))QGraphicsLinearLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsLinearLayout::count
+96 (int (*)(...))QGraphicsLinearLayout::itemAt
+104 (int (*)(...))QGraphicsLinearLayout::removeAt
+
+Class QGraphicsLinearLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLinearLayout (0x0x7f5f56d1b750) 0
+ vptr=((& QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout) + 16)
+ QGraphicsLayout (0x0x7f5f56d1b7b8) 0
+ primary-for QGraphicsLinearLayout (0x0x7f5f56d1b750)
+ QGraphicsLayoutItem (0x0x7f5f569746c0) 0
+ primary-for QGraphicsLayout (0x0x7f5f56d1b7b8)
+
+Class QGraphicsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsWidget::QPrivateSignal (0x0x7f5f569749c0) 0 empty
+
+Vtable for QGraphicsWidget
+QGraphicsWidget::_ZTV15QGraphicsWidget: 93 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsWidget)
+16 (int (*)(...))QGraphicsWidget::metaObject
+24 (int (*)(...))QGraphicsWidget::qt_metacast
+32 (int (*)(...))QGraphicsWidget::qt_metacall
+40 (int (*)(...))QGraphicsWidget::~QGraphicsWidget
+48 (int (*)(...))QGraphicsWidget::~QGraphicsWidget
+56 (int (*)(...))QGraphicsWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsWidget::setGeometry
+120 (int (*)(...))QGraphicsWidget::getContentsMargins
+128 (int (*)(...))QGraphicsWidget::type
+136 (int (*)(...))QGraphicsWidget::paint
+144 (int (*)(...))QGraphicsWidget::paintWindowFrame
+152 (int (*)(...))QGraphicsWidget::boundingRect
+160 (int (*)(...))QGraphicsWidget::shape
+168 (int (*)(...))QGraphicsWidget::initStyleOption
+176 (int (*)(...))QGraphicsWidget::sizeHint
+184 (int (*)(...))QGraphicsWidget::updateGeometry
+192 (int (*)(...))QGraphicsWidget::itemChange
+200 (int (*)(...))QGraphicsWidget::propertyChange
+208 (int (*)(...))QGraphicsWidget::sceneEvent
+216 (int (*)(...))QGraphicsWidget::windowFrameEvent
+224 (int (*)(...))QGraphicsWidget::windowFrameSectionAt
+232 (int (*)(...))QGraphicsWidget::changeEvent
+240 (int (*)(...))QGraphicsWidget::closeEvent
+248 (int (*)(...))QGraphicsWidget::focusInEvent
+256 (int (*)(...))QGraphicsWidget::focusNextPrevChild
+264 (int (*)(...))QGraphicsWidget::focusOutEvent
+272 (int (*)(...))QGraphicsWidget::hideEvent
+280 (int (*)(...))QGraphicsWidget::moveEvent
+288 (int (*)(...))QGraphicsWidget::polishEvent
+296 (int (*)(...))QGraphicsWidget::resizeEvent
+304 (int (*)(...))QGraphicsWidget::showEvent
+312 (int (*)(...))QGraphicsWidget::hoverMoveEvent
+320 (int (*)(...))QGraphicsWidget::hoverLeaveEvent
+328 (int (*)(...))QGraphicsWidget::grabMouseEvent
+336 (int (*)(...))QGraphicsWidget::ungrabMouseEvent
+344 (int (*)(...))QGraphicsWidget::grabKeyboardEvent
+352 (int (*)(...))QGraphicsWidget::ungrabKeyboardEvent
+360 (int (*)(...))-16
+368 (int (*)(...))(& _ZTI15QGraphicsWidget)
+376 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidgetD1Ev
+384 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidgetD0Ev
+392 (int (*)(...))QGraphicsItem::advance
+400 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget12boundingRectEv
+408 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget5shapeEv
+416 (int (*)(...))QGraphicsItem::contains
+424 (int (*)(...))QGraphicsItem::collidesWithItem
+432 (int (*)(...))QGraphicsItem::collidesWithPath
+440 (int (*)(...))QGraphicsItem::isObscuredBy
+448 (int (*)(...))QGraphicsItem::opaqueArea
+456 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+464 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget4typeEv
+472 (int (*)(...))QGraphicsItem::sceneEventFilter
+480 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10sceneEventEP6QEvent
+488 (int (*)(...))QGraphicsItem::contextMenuEvent
+496 (int (*)(...))QGraphicsItem::dragEnterEvent
+504 (int (*)(...))QGraphicsItem::dragLeaveEvent
+512 (int (*)(...))QGraphicsItem::dragMoveEvent
+520 (int (*)(...))QGraphicsItem::dropEvent
+528 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget12focusInEventEP11QFocusEvent
+536 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget13focusOutEventEP11QFocusEvent
+544 (int (*)(...))QGraphicsItem::hoverEnterEvent
+552 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget14hoverMoveEventEP24QGraphicsSceneHoverEvent
+560 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+568 (int (*)(...))QGraphicsItem::keyPressEvent
+576 (int (*)(...))QGraphicsItem::keyReleaseEvent
+584 (int (*)(...))QGraphicsItem::mousePressEvent
+592 (int (*)(...))QGraphicsItem::mouseMoveEvent
+600 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+608 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+616 (int (*)(...))QGraphicsItem::wheelEvent
+624 (int (*)(...))QGraphicsItem::inputMethodEvent
+632 (int (*)(...))QGraphicsItem::inputMethodQuery
+640 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant
+648 (int (*)(...))QGraphicsItem::supportsExtension
+656 (int (*)(...))QGraphicsItem::setExtension
+664 (int (*)(...))QGraphicsItem::extension
+672 (int (*)(...))-32
+680 (int (*)(...))(& _ZTI15QGraphicsWidget)
+688 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidgetD1Ev
+696 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidgetD0Ev
+704 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget11setGeometryERK6QRectF
+712 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget18getContentsMarginsEPdS0_S0_S0_
+720 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget14updateGeometryEv
+728 (int (*)(...))QGraphicsLayoutItem::isEmpty
+736 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget8sizeHintEN2Qt8SizeHintERK6QSizeF
+
+Class QGraphicsWidget
+ size=48 align=8
+ base size=48 base align=8
+QGraphicsWidget (0x0x7f5f56c95d20) 0
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 16)
+ QGraphicsObject (0x0x7f5f56c95d90) 0
+ primary-for QGraphicsWidget (0x0x7f5f56c95d20)
+ QObject (0x0x7f5f569748a0) 0
+ primary-for QGraphicsObject (0x0x7f5f56c95d90)
+ QGraphicsItem (0x0x7f5f56974900) 16
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 376)
+ QGraphicsLayoutItem (0x0x7f5f56974960) 32
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 688)
+
+Class QGraphicsProxyWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsProxyWidget::QPrivateSignal (0x0x7f5f56974e40) 0 empty
+
+Vtable for QGraphicsProxyWidget
+QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+16 (int (*)(...))QGraphicsProxyWidget::metaObject
+24 (int (*)(...))QGraphicsProxyWidget::qt_metacast
+32 (int (*)(...))QGraphicsProxyWidget::qt_metacall
+40 (int (*)(...))QGraphicsProxyWidget::~QGraphicsProxyWidget
+48 (int (*)(...))QGraphicsProxyWidget::~QGraphicsProxyWidget
+56 (int (*)(...))QGraphicsProxyWidget::event
+64 (int (*)(...))QGraphicsProxyWidget::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsProxyWidget::setGeometry
+120 (int (*)(...))QGraphicsWidget::getContentsMargins
+128 (int (*)(...))QGraphicsProxyWidget::type
+136 (int (*)(...))QGraphicsProxyWidget::paint
+144 (int (*)(...))QGraphicsWidget::paintWindowFrame
+152 (int (*)(...))QGraphicsWidget::boundingRect
+160 (int (*)(...))QGraphicsWidget::shape
+168 (int (*)(...))QGraphicsWidget::initStyleOption
+176 (int (*)(...))QGraphicsProxyWidget::sizeHint
+184 (int (*)(...))QGraphicsWidget::updateGeometry
+192 (int (*)(...))QGraphicsProxyWidget::itemChange
+200 (int (*)(...))QGraphicsWidget::propertyChange
+208 (int (*)(...))QGraphicsWidget::sceneEvent
+216 (int (*)(...))QGraphicsWidget::windowFrameEvent
+224 (int (*)(...))QGraphicsWidget::windowFrameSectionAt
+232 (int (*)(...))QGraphicsWidget::changeEvent
+240 (int (*)(...))QGraphicsWidget::closeEvent
+248 (int (*)(...))QGraphicsProxyWidget::focusInEvent
+256 (int (*)(...))QGraphicsProxyWidget::focusNextPrevChild
+264 (int (*)(...))QGraphicsProxyWidget::focusOutEvent
+272 (int (*)(...))QGraphicsProxyWidget::hideEvent
+280 (int (*)(...))QGraphicsWidget::moveEvent
+288 (int (*)(...))QGraphicsWidget::polishEvent
+296 (int (*)(...))QGraphicsProxyWidget::resizeEvent
+304 (int (*)(...))QGraphicsProxyWidget::showEvent
+312 (int (*)(...))QGraphicsProxyWidget::hoverMoveEvent
+320 (int (*)(...))QGraphicsProxyWidget::hoverLeaveEvent
+328 (int (*)(...))QGraphicsProxyWidget::grabMouseEvent
+336 (int (*)(...))QGraphicsProxyWidget::ungrabMouseEvent
+344 (int (*)(...))QGraphicsWidget::grabKeyboardEvent
+352 (int (*)(...))QGraphicsWidget::ungrabKeyboardEvent
+360 (int (*)(...))QGraphicsProxyWidget::contextMenuEvent
+368 (int (*)(...))QGraphicsProxyWidget::dragEnterEvent
+376 (int (*)(...))QGraphicsProxyWidget::dragLeaveEvent
+384 (int (*)(...))QGraphicsProxyWidget::dragMoveEvent
+392 (int (*)(...))QGraphicsProxyWidget::dropEvent
+400 (int (*)(...))QGraphicsProxyWidget::hoverEnterEvent
+408 (int (*)(...))QGraphicsProxyWidget::mouseMoveEvent
+416 (int (*)(...))QGraphicsProxyWidget::mousePressEvent
+424 (int (*)(...))QGraphicsProxyWidget::mouseReleaseEvent
+432 (int (*)(...))QGraphicsProxyWidget::mouseDoubleClickEvent
+440 (int (*)(...))QGraphicsProxyWidget::wheelEvent
+448 (int (*)(...))QGraphicsProxyWidget::keyPressEvent
+456 (int (*)(...))QGraphicsProxyWidget::keyReleaseEvent
+464 (int (*)(...))QGraphicsProxyWidget::inputMethodQuery
+472 (int (*)(...))QGraphicsProxyWidget::inputMethodEvent
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+496 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidgetD1Ev
+504 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidgetD0Ev
+512 (int (*)(...))QGraphicsItem::advance
+520 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget12boundingRectEv
+528 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget5shapeEv
+536 (int (*)(...))QGraphicsItem::contains
+544 (int (*)(...))QGraphicsItem::collidesWithItem
+552 (int (*)(...))QGraphicsItem::collidesWithPath
+560 (int (*)(...))QGraphicsItem::isObscuredBy
+568 (int (*)(...))QGraphicsItem::opaqueArea
+576 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+584 (int (*)(...))QGraphicsProxyWidget::_ZThn16_NK20QGraphicsProxyWidget4typeEv
+592 (int (*)(...))QGraphicsItem::sceneEventFilter
+600 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10sceneEventEP6QEvent
+608 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget16contextMenuEventEP30QGraphicsSceneContextMenuEvent
+616 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14dragEnterEventEP27QGraphicsSceneDragDropEvent
+624 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14dragLeaveEventEP27QGraphicsSceneDragDropEvent
+632 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13dragMoveEventEP27QGraphicsSceneDragDropEvent
+640 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget9dropEventEP27QGraphicsSceneDragDropEvent
+648 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget12focusInEventEP11QFocusEvent
+656 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13focusOutEventEP11QFocusEvent
+664 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15hoverEnterEventEP24QGraphicsSceneHoverEvent
+672 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14hoverMoveEventEP24QGraphicsSceneHoverEvent
+680 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+688 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13keyPressEventEP9QKeyEvent
+696 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15keyReleaseEventEP9QKeyEvent
+704 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15mousePressEventEP24QGraphicsSceneMouseEvent
+712 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14mouseMoveEventEP24QGraphicsSceneMouseEvent
+720 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget17mouseReleaseEventEP24QGraphicsSceneMouseEvent
+728 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent
+736 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget10wheelEventEP24QGraphicsSceneWheelEvent
+744 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget16inputMethodEventEP17QInputMethodEvent
+752 (int (*)(...))QGraphicsProxyWidget::_ZThn16_NK20QGraphicsProxyWidget16inputMethodQueryEN2Qt16InputMethodQueryE
+760 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant
+768 (int (*)(...))QGraphicsItem::supportsExtension
+776 (int (*)(...))QGraphicsItem::setExtension
+784 (int (*)(...))QGraphicsItem::extension
+792 (int (*)(...))-32
+800 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+808 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidgetD1Ev
+816 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidgetD0Ev
+824 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidget11setGeometryERK6QRectF
+832 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget18getContentsMarginsEPdS0_S0_S0_
+840 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget14updateGeometryEv
+848 (int (*)(...))QGraphicsLayoutItem::isEmpty
+856 (int (*)(...))QGraphicsProxyWidget::_ZThn32_NK20QGraphicsProxyWidget8sizeHintEN2Qt8SizeHintERK6QSizeF
+
+Class QGraphicsProxyWidget
+ size=48 align=8
+ base size=48 base align=8
+QGraphicsProxyWidget (0x0x7f5f56d1b8f0) 0
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 16)
+ QGraphicsWidget (0x0x7f5f56c95ee0) 0
+ primary-for QGraphicsProxyWidget (0x0x7f5f56d1b8f0)
+ QGraphicsObject (0x0x7f5f56c95f50) 0
+ primary-for QGraphicsWidget (0x0x7f5f56c95ee0)
+ QObject (0x0x7f5f56974d20) 0
+ primary-for QGraphicsObject (0x0x7f5f56c95f50)
+ QGraphicsItem (0x0x7f5f56974d80) 16
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 496)
+ QGraphicsLayoutItem (0x0x7f5f56974de0) 32
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 808)
+
+Class QGraphicsScene::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScene::QPrivateSignal (0x0x7f5f569e21e0) 0 empty
+
+Vtable for QGraphicsScene
+QGraphicsScene::_ZTV14QGraphicsScene: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGraphicsScene)
+16 (int (*)(...))QGraphicsScene::metaObject
+24 (int (*)(...))QGraphicsScene::qt_metacast
+32 (int (*)(...))QGraphicsScene::qt_metacall
+40 (int (*)(...))QGraphicsScene::~QGraphicsScene
+48 (int (*)(...))QGraphicsScene::~QGraphicsScene
+56 (int (*)(...))QGraphicsScene::event
+64 (int (*)(...))QGraphicsScene::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsScene::inputMethodQuery
+120 (int (*)(...))QGraphicsScene::contextMenuEvent
+128 (int (*)(...))QGraphicsScene::dragEnterEvent
+136 (int (*)(...))QGraphicsScene::dragMoveEvent
+144 (int (*)(...))QGraphicsScene::dragLeaveEvent
+152 (int (*)(...))QGraphicsScene::dropEvent
+160 (int (*)(...))QGraphicsScene::focusInEvent
+168 (int (*)(...))QGraphicsScene::focusOutEvent
+176 (int (*)(...))QGraphicsScene::helpEvent
+184 (int (*)(...))QGraphicsScene::keyPressEvent
+192 (int (*)(...))QGraphicsScene::keyReleaseEvent
+200 (int (*)(...))QGraphicsScene::mousePressEvent
+208 (int (*)(...))QGraphicsScene::mouseMoveEvent
+216 (int (*)(...))QGraphicsScene::mouseReleaseEvent
+224 (int (*)(...))QGraphicsScene::mouseDoubleClickEvent
+232 (int (*)(...))QGraphicsScene::wheelEvent
+240 (int (*)(...))QGraphicsScene::inputMethodEvent
+248 (int (*)(...))QGraphicsScene::drawBackground
+256 (int (*)(...))QGraphicsScene::drawForeground
+264 (int (*)(...))QGraphicsScene::drawItems
+272 (int (*)(...))QGraphicsScene::focusNextPrevChild
+
+Class QGraphicsScene
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsScene (0x0x7f5f56d1baf8) 0
+ vptr=((& QGraphicsScene::_ZTV14QGraphicsScene) + 16)
+ QObject (0x0x7f5f569e2180) 0
+ primary-for QGraphicsScene (0x0x7f5f56d1baf8)
+
+Vtable for QGraphicsSceneEvent
+QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsSceneEvent)
+16 (int (*)(...))QGraphicsSceneEvent::~QGraphicsSceneEvent
+24 (int (*)(...))QGraphicsSceneEvent::~QGraphicsSceneEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneEvent (0x0x7f5f56a27548) 0
+ vptr=((& QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent) + 16)
+ QEvent (0x0x7f5f56a614e0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f5f56a27548)
+
+Vtable for QGraphicsSceneMouseEvent
+QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneMouseEvent)
+16 (int (*)(...))QGraphicsSceneMouseEvent::~QGraphicsSceneMouseEvent
+24 (int (*)(...))QGraphicsSceneMouseEvent::~QGraphicsSceneMouseEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneMouseEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneMouseEvent (0x0x7f5f56a275b0) 0
+ vptr=((& QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f5f56a27618) 0
+ primary-for QGraphicsSceneMouseEvent (0x0x7f5f56a275b0)
+ QEvent (0x0x7f5f56a616c0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f5f56a27618)
+
+Vtable for QGraphicsSceneWheelEvent
+QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneWheelEvent)
+16 (int (*)(...))QGraphicsSceneWheelEvent::~QGraphicsSceneWheelEvent
+24 (int (*)(...))QGraphicsSceneWheelEvent::~QGraphicsSceneWheelEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneWheelEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneWheelEvent (0x0x7f5f56a27680) 0
+ vptr=((& QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f5f56a276e8) 0
+ primary-for QGraphicsSceneWheelEvent (0x0x7f5f56a27680)
+ QEvent (0x0x7f5f56a617e0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f5f56a276e8)
+
+Vtable for QGraphicsSceneContextMenuEvent
+QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI30QGraphicsSceneContextMenuEvent)
+16 (int (*)(...))QGraphicsSceneContextMenuEvent::~QGraphicsSceneContextMenuEvent
+24 (int (*)(...))QGraphicsSceneContextMenuEvent::~QGraphicsSceneContextMenuEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneContextMenuEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneContextMenuEvent (0x0x7f5f56a27750) 0
+ vptr=((& QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f5f56a277b8) 0
+ primary-for QGraphicsSceneContextMenuEvent (0x0x7f5f56a27750)
+ QEvent (0x0x7f5f56a61900) 0
+ primary-for QGraphicsSceneEvent (0x0x7f5f56a277b8)
+
+Vtable for QGraphicsSceneHoverEvent
+QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneHoverEvent)
+16 (int (*)(...))QGraphicsSceneHoverEvent::~QGraphicsSceneHoverEvent
+24 (int (*)(...))QGraphicsSceneHoverEvent::~QGraphicsSceneHoverEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneHoverEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneHoverEvent (0x0x7f5f56a27820) 0
+ vptr=((& QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f5f56a27888) 0
+ primary-for QGraphicsSceneHoverEvent (0x0x7f5f56a27820)
+ QEvent (0x0x7f5f56a61a20) 0
+ primary-for QGraphicsSceneEvent (0x0x7f5f56a27888)
+
+Vtable for QGraphicsSceneHelpEvent
+QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSceneHelpEvent)
+16 (int (*)(...))QGraphicsSceneHelpEvent::~QGraphicsSceneHelpEvent
+24 (int (*)(...))QGraphicsSceneHelpEvent::~QGraphicsSceneHelpEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneHelpEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneHelpEvent (0x0x7f5f56a278f0) 0
+ vptr=((& QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f5f56a27958) 0
+ primary-for QGraphicsSceneHelpEvent (0x0x7f5f56a278f0)
+ QEvent (0x0x7f5f56a61b40) 0
+ primary-for QGraphicsSceneEvent (0x0x7f5f56a27958)
+
+Vtable for QGraphicsSceneDragDropEvent
+QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QGraphicsSceneDragDropEvent)
+16 (int (*)(...))QGraphicsSceneDragDropEvent::~QGraphicsSceneDragDropEvent
+24 (int (*)(...))QGraphicsSceneDragDropEvent::~QGraphicsSceneDragDropEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneDragDropEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneDragDropEvent (0x0x7f5f56a279c0) 0
+ vptr=((& QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f5f56a27a28) 0
+ primary-for QGraphicsSceneDragDropEvent (0x0x7f5f56a279c0)
+ QEvent (0x0x7f5f56a61c60) 0
+ primary-for QGraphicsSceneEvent (0x0x7f5f56a27a28)
+
+Vtable for QGraphicsSceneResizeEvent
+QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QGraphicsSceneResizeEvent)
+16 (int (*)(...))QGraphicsSceneResizeEvent::~QGraphicsSceneResizeEvent
+24 (int (*)(...))QGraphicsSceneResizeEvent::~QGraphicsSceneResizeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneResizeEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneResizeEvent (0x0x7f5f56a27a90) 0
+ vptr=((& QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f5f56a27af8) 0
+ primary-for QGraphicsSceneResizeEvent (0x0x7f5f56a27a90)
+ QEvent (0x0x7f5f56a61d80) 0
+ primary-for QGraphicsSceneEvent (0x0x7f5f56a27af8)
+
+Vtable for QGraphicsSceneMoveEvent
+QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSceneMoveEvent)
+16 (int (*)(...))QGraphicsSceneMoveEvent::~QGraphicsSceneMoveEvent
+24 (int (*)(...))QGraphicsSceneMoveEvent::~QGraphicsSceneMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneMoveEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneMoveEvent (0x0x7f5f56a27b60) 0
+ vptr=((& QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f5f56a27bc8) 0
+ primary-for QGraphicsSceneMoveEvent (0x0x7f5f56a27b60)
+ QEvent (0x0x7f5f56a61ea0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f5f56a27bc8)
+
+Class QGraphicsTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTransform::QPrivateSignal (0x0x7f5f56abc060) 0 empty
+
+Vtable for QGraphicsTransform
+QGraphicsTransform::_ZTV18QGraphicsTransform: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGraphicsTransform)
+16 (int (*)(...))QGraphicsTransform::metaObject
+24 (int (*)(...))QGraphicsTransform::qt_metacast
+32 (int (*)(...))QGraphicsTransform::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsTransform
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsTransform (0x0x7f5f56a27c30) 0
+ vptr=((& QGraphicsTransform::_ZTV18QGraphicsTransform) + 16)
+ QObject (0x0x7f5f56abc000) 0
+ primary-for QGraphicsTransform (0x0x7f5f56a27c30)
+
+Class QGraphicsScale::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScale::QPrivateSignal (0x0x7f5f56abc240) 0 empty
+
+Vtable for QGraphicsScale
+QGraphicsScale::_ZTV14QGraphicsScale: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGraphicsScale)
+16 (int (*)(...))QGraphicsScale::metaObject
+24 (int (*)(...))QGraphicsScale::qt_metacast
+32 (int (*)(...))QGraphicsScale::qt_metacall
+40 (int (*)(...))QGraphicsScale::~QGraphicsScale
+48 (int (*)(...))QGraphicsScale::~QGraphicsScale
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsScale::applyTo
+
+Class QGraphicsScale
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsScale (0x0x7f5f56a27c98) 0
+ vptr=((& QGraphicsScale::_ZTV14QGraphicsScale) + 16)
+ QGraphicsTransform (0x0x7f5f56a27d00) 0
+ primary-for QGraphicsScale (0x0x7f5f56a27c98)
+ QObject (0x0x7f5f56abc1e0) 0
+ primary-for QGraphicsTransform (0x0x7f5f56a27d00)
+
+Class QGraphicsRotation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsRotation::QPrivateSignal (0x0x7f5f56abc420) 0 empty
+
+Vtable for QGraphicsRotation
+QGraphicsRotation::_ZTV17QGraphicsRotation: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsRotation)
+16 (int (*)(...))QGraphicsRotation::metaObject
+24 (int (*)(...))QGraphicsRotation::qt_metacast
+32 (int (*)(...))QGraphicsRotation::qt_metacall
+40 (int (*)(...))QGraphicsRotation::~QGraphicsRotation
+48 (int (*)(...))QGraphicsRotation::~QGraphicsRotation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsRotation::applyTo
+
+Class QGraphicsRotation
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsRotation (0x0x7f5f56a27d68) 0
+ vptr=((& QGraphicsRotation::_ZTV17QGraphicsRotation) + 16)
+ QGraphicsTransform (0x0x7f5f56a27dd0) 0
+ primary-for QGraphicsRotation (0x0x7f5f56a27d68)
+ QObject (0x0x7f5f56abc3c0) 0
+ primary-for QGraphicsTransform (0x0x7f5f56a27dd0)
+
+Class QScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollArea::QPrivateSignal (0x0x7f5f56abc660) 0 empty
+
+Vtable for QScrollArea
+QScrollArea::_ZTV11QScrollArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QScrollArea)
+16 (int (*)(...))QScrollArea::metaObject
+24 (int (*)(...))QScrollArea::qt_metacast
+32 (int (*)(...))QScrollArea::qt_metacall
+40 (int (*)(...))QScrollArea::~QScrollArea
+48 (int (*)(...))QScrollArea::~QScrollArea
+56 (int (*)(...))QScrollArea::event
+64 (int (*)(...))QScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QScrollArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QScrollArea::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QScrollArea::scrollContentsBy
+464 (int (*)(...))QScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QScrollArea)
+488 (int (*)(...))QScrollArea::_ZThn16_N11QScrollAreaD1Ev
+496 (int (*)(...))QScrollArea::_ZThn16_N11QScrollAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QScrollArea
+ size=40 align=8
+ base size=40 base align=8
+QScrollArea (0x0x7f5f56a27e38) 0
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 16)
+ QAbstractScrollArea (0x0x7f5f56a27ea0) 0
+ primary-for QScrollArea (0x0x7f5f56a27e38)
+ QFrame (0x0x7f5f56a27f08) 0
+ primary-for QAbstractScrollArea (0x0x7f5f56a27ea0)
+ QWidget (0x0x7f5f569e1770) 0
+ primary-for QFrame (0x0x7f5f56a27f08)
+ QObject (0x0x7f5f56abc5a0) 0
+ primary-for QWidget (0x0x7f5f569e1770)
+ QPaintDevice (0x0x7f5f56abc600) 16
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 488)
+
+Class QGraphicsView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsView::QPrivateSignal (0x0x7f5f56abc8a0) 0 empty
+
+Vtable for QGraphicsView
+QGraphicsView::_ZTV13QGraphicsView: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGraphicsView)
+16 (int (*)(...))QGraphicsView::metaObject
+24 (int (*)(...))QGraphicsView::qt_metacast
+32 (int (*)(...))QGraphicsView::qt_metacall
+40 (int (*)(...))QGraphicsView::~QGraphicsView
+48 (int (*)(...))QGraphicsView::~QGraphicsView
+56 (int (*)(...))QGraphicsView::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QGraphicsView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QGraphicsView::mousePressEvent
+176 (int (*)(...))QGraphicsView::mouseReleaseEvent
+184 (int (*)(...))QGraphicsView::mouseDoubleClickEvent
+192 (int (*)(...))QGraphicsView::mouseMoveEvent
+200 (int (*)(...))QGraphicsView::wheelEvent
+208 (int (*)(...))QGraphicsView::keyPressEvent
+216 (int (*)(...))QGraphicsView::keyReleaseEvent
+224 (int (*)(...))QGraphicsView::focusInEvent
+232 (int (*)(...))QGraphicsView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QGraphicsView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QGraphicsView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QGraphicsView::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QGraphicsView::dragEnterEvent
+320 (int (*)(...))QGraphicsView::dragMoveEvent
+328 (int (*)(...))QGraphicsView::dragLeaveEvent
+336 (int (*)(...))QGraphicsView::dropEvent
+344 (int (*)(...))QGraphicsView::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QGraphicsView::inputMethodEvent
+416 (int (*)(...))QGraphicsView::inputMethodQuery
+424 (int (*)(...))QGraphicsView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QGraphicsView::setupViewport
+448 (int (*)(...))QGraphicsView::viewportEvent
+456 (int (*)(...))QGraphicsView::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QGraphicsView::drawBackground
+480 (int (*)(...))QGraphicsView::drawForeground
+488 (int (*)(...))QGraphicsView::drawItems
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI13QGraphicsView)
+512 (int (*)(...))QGraphicsView::_ZThn16_N13QGraphicsViewD1Ev
+520 (int (*)(...))QGraphicsView::_ZThn16_N13QGraphicsViewD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QGraphicsView
+ size=40 align=8
+ base size=40 base align=8
+QGraphicsView (0x0x7f5f56a27f70) 0
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 16)
+ QAbstractScrollArea (0x0x7f5f56a274e0) 0
+ primary-for QGraphicsView (0x0x7f5f56a27f70)
+ QFrame (0x0x7f5f56ae1000) 0
+ primary-for QAbstractScrollArea (0x0x7f5f56a274e0)
+ QWidget (0x0x7f5f569e17e0) 0
+ primary-for QFrame (0x0x7f5f56ae1000)
+ QObject (0x0x7f5f56abc7e0) 0
+ primary-for QWidget (0x0x7f5f569e17e0)
+ QPaintDevice (0x0x7f5f56abc840) 16
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 512)
+
+Class QGroupBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGroupBox::QPrivateSignal (0x0x7f5f56730780) 0 empty
+
+Vtable for QGroupBox
+QGroupBox::_ZTV9QGroupBox: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QGroupBox)
+16 (int (*)(...))QGroupBox::metaObject
+24 (int (*)(...))QGroupBox::qt_metacast
+32 (int (*)(...))QGroupBox::qt_metacall
+40 (int (*)(...))QGroupBox::~QGroupBox
+48 (int (*)(...))QGroupBox::~QGroupBox
+56 (int (*)(...))QGroupBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QGroupBox::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QGroupBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QGroupBox::mousePressEvent
+176 (int (*)(...))QGroupBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QGroupBox::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QGroupBox::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QGroupBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QGroupBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QGroupBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QGroupBox::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI9QGroupBox)
+456 (int (*)(...))QGroupBox::_ZThn16_N9QGroupBoxD1Ev
+464 (int (*)(...))QGroupBox::_ZThn16_N9QGroupBoxD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QGroupBox
+ size=40 align=8
+ base size=40 base align=8
+QGroupBox (0x0x7f5f56ae12d8) 0
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 16)
+ QWidget (0x0x7f5f569e1f50) 0
+ primary-for QGroupBox (0x0x7f5f56ae12d8)
+ QObject (0x0x7f5f567306c0) 0
+ primary-for QWidget (0x0x7f5f569e1f50)
+ QPaintDevice (0x0x7f5f56730720) 16
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 456)
+
+Class QHeaderView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHeaderView::QPrivateSignal (0x0x7f5f567309c0) 0 empty
+
+Vtable for QHeaderView
+QHeaderView::_ZTV11QHeaderView: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHeaderView)
+16 (int (*)(...))QHeaderView::metaObject
+24 (int (*)(...))QHeaderView::qt_metacast
+32 (int (*)(...))QHeaderView::qt_metacall
+40 (int (*)(...))QHeaderView::~QHeaderView
+48 (int (*)(...))QHeaderView::~QHeaderView
+56 (int (*)(...))QHeaderView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QHeaderView::setVisible
+128 (int (*)(...))QHeaderView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QHeaderView::mousePressEvent
+176 (int (*)(...))QHeaderView::mouseReleaseEvent
+184 (int (*)(...))QHeaderView::mouseDoubleClickEvent
+192 (int (*)(...))QHeaderView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QHeaderView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QHeaderView::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QHeaderView::viewportEvent
+456 (int (*)(...))QHeaderView::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QHeaderView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QHeaderView::visualRect
+504 (int (*)(...))QHeaderView::scrollTo
+512 (int (*)(...))QHeaderView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QHeaderView::reset
+552 (int (*)(...))QAbstractItemView::setRootIndex
+560 (int (*)(...))QHeaderView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QHeaderView::dataChanged
+584 (int (*)(...))QHeaderView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QHeaderView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QHeaderView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QHeaderView::moveCursor
+704 (int (*)(...))QHeaderView::horizontalOffset
+712 (int (*)(...))QHeaderView::verticalOffset
+720 (int (*)(...))QHeaderView::isIndexHidden
+728 (int (*)(...))QHeaderView::setSelection
+736 (int (*)(...))QHeaderView::visualRegionForSelection
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QHeaderView::paintSection
+792 (int (*)(...))QHeaderView::sectionSizeFromContents
+800 (int (*)(...))QHeaderView::initStyleOptionForIndex
+808 (int (*)(...))QHeaderView::initStyleOption
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI11QHeaderView)
+832 (int (*)(...))QHeaderView::_ZThn16_N11QHeaderViewD1Ev
+840 (int (*)(...))QHeaderView::_ZThn16_N11QHeaderViewD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHeaderView
+ size=40 align=8
+ base size=40 base align=8
+QHeaderView (0x0x7f5f56ae1340) 0
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 16)
+ QAbstractItemView (0x0x7f5f56ae13a8) 0
+ primary-for QHeaderView (0x0x7f5f56ae1340)
+ QAbstractScrollArea (0x0x7f5f56ae1410) 0
+ primary-for QAbstractItemView (0x0x7f5f56ae13a8)
+ QFrame (0x0x7f5f56ae1478) 0
+ primary-for QAbstractScrollArea (0x0x7f5f56ae1410)
+ QWidget (0x0x7f5f56760000) 0
+ primary-for QFrame (0x0x7f5f56ae1478)
+ QObject (0x0x7f5f56730900) 0
+ primary-for QWidget (0x0x7f5f56760000)
+ QPaintDevice (0x0x7f5f56730960) 16
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 832)
+
+Class QLineEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLineEdit::QPrivateSignal (0x0x7f5f56730e40) 0 empty
+
+Vtable for QLineEdit
+QLineEdit::_ZTV9QLineEdit: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QLineEdit)
+16 (int (*)(...))QLineEdit::metaObject
+24 (int (*)(...))QLineEdit::qt_metacast
+32 (int (*)(...))QLineEdit::qt_metacall
+40 (int (*)(...))QLineEdit::~QLineEdit
+48 (int (*)(...))QLineEdit::~QLineEdit
+56 (int (*)(...))QLineEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QLineEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLineEdit::sizeHint
+136 (int (*)(...))QLineEdit::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QLineEdit::mousePressEvent
+176 (int (*)(...))QLineEdit::mouseReleaseEvent
+184 (int (*)(...))QLineEdit::mouseDoubleClickEvent
+192 (int (*)(...))QLineEdit::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QLineEdit::keyPressEvent
+216 (int (*)(...))QLineEdit::keyReleaseEvent
+224 (int (*)(...))QLineEdit::focusInEvent
+232 (int (*)(...))QLineEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLineEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QLineEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QLineEdit::dragEnterEvent
+320 (int (*)(...))QLineEdit::dragMoveEvent
+328 (int (*)(...))QLineEdit::dragLeaveEvent
+336 (int (*)(...))QLineEdit::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QLineEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QLineEdit::inputMethodEvent
+416 (int (*)(...))QLineEdit::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QLineEdit::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI9QLineEdit)
+456 (int (*)(...))QLineEdit::_ZThn16_N9QLineEditD1Ev
+464 (int (*)(...))QLineEdit::_ZThn16_N9QLineEditD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLineEdit
+ size=40 align=8
+ base size=40 base align=8
+QLineEdit (0x0x7f5f56ae14e0) 0
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 16)
+ QWidget (0x0x7f5f567602a0) 0
+ primary-for QLineEdit (0x0x7f5f56ae14e0)
+ QObject (0x0x7f5f56730d80) 0
+ primary-for QWidget (0x0x7f5f567602a0)
+ QPaintDevice (0x0x7f5f56730de0) 16
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 456)
+
+Class QInputDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDialog::QPrivateSignal (0x0x7f5f567a2240) 0 empty
+
+Vtable for QInputDialog
+QInputDialog::_ZTV12QInputDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputDialog)
+16 (int (*)(...))QInputDialog::metaObject
+24 (int (*)(...))QInputDialog::qt_metacast
+32 (int (*)(...))QInputDialog::qt_metacall
+40 (int (*)(...))QInputDialog::~QInputDialog
+48 (int (*)(...))QInputDialog::~QInputDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QInputDialog::setVisible
+128 (int (*)(...))QInputDialog::sizeHint
+136 (int (*)(...))QInputDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QInputDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QInputDialog)
+488 (int (*)(...))QInputDialog::_ZThn16_N12QInputDialogD1Ev
+496 (int (*)(...))QInputDialog::_ZThn16_N12QInputDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QInputDialog
+ size=40 align=8
+ base size=40 base align=8
+QInputDialog (0x0x7f5f56ae1548) 0
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 16)
+ QDialog (0x0x7f5f56ae15b0) 0
+ primary-for QInputDialog (0x0x7f5f56ae1548)
+ QWidget (0x0x7f5f567605b0) 0
+ primary-for QDialog (0x0x7f5f56ae15b0)
+ QObject (0x0x7f5f567a2180) 0
+ primary-for QWidget (0x0x7f5f567605b0)
+ QPaintDevice (0x0x7f5f567a21e0) 16
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 488)
+
+Class QItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemDelegate::QPrivateSignal (0x0x7f5f567a2720) 0 empty
+
+Vtable for QItemDelegate
+QItemDelegate::_ZTV13QItemDelegate: 28 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QItemDelegate)
+16 (int (*)(...))QItemDelegate::metaObject
+24 (int (*)(...))QItemDelegate::qt_metacast
+32 (int (*)(...))QItemDelegate::qt_metacall
+40 (int (*)(...))QItemDelegate::~QItemDelegate
+48 (int (*)(...))QItemDelegate::~QItemDelegate
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QItemDelegate::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QItemDelegate::paint
+120 (int (*)(...))QItemDelegate::sizeHint
+128 (int (*)(...))QItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QItemDelegate::setEditorData
+152 (int (*)(...))QItemDelegate::setModelData
+160 (int (*)(...))QItemDelegate::updateEditorGeometry
+168 (int (*)(...))QItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+192 (int (*)(...))QItemDelegate::drawDisplay
+200 (int (*)(...))QItemDelegate::drawDecoration
+208 (int (*)(...))QItemDelegate::drawFocus
+216 (int (*)(...))QItemDelegate::drawCheck
+
+Class QItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QItemDelegate (0x0x7f5f56ae1750) 0
+ vptr=((& QItemDelegate::_ZTV13QItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7f5f56ae17b8) 0
+ primary-for QItemDelegate (0x0x7f5f56ae1750)
+ QObject (0x0x7f5f567a26c0) 0
+ primary-for QAbstractItemDelegate (0x0x7f5f56ae17b8)
+
+Vtable for QItemEditorCreatorBase
+QItemEditorCreatorBase::_ZTV22QItemEditorCreatorBase: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QItemEditorCreatorBase)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QItemEditorCreatorBase
+ size=8 align=8
+ base size=8 base align=8
+QItemEditorCreatorBase (0x0x7f5f567a28a0) 0 nearly-empty
+ vptr=((& QItemEditorCreatorBase::_ZTV22QItemEditorCreatorBase) + 16)
+
+Vtable for QItemEditorFactory
+QItemEditorFactory::_ZTV18QItemEditorFactory: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QItemEditorFactory)
+16 (int (*)(...))QItemEditorFactory::~QItemEditorFactory
+24 (int (*)(...))QItemEditorFactory::~QItemEditorFactory
+32 (int (*)(...))QItemEditorFactory::createEditor
+40 (int (*)(...))QItemEditorFactory::valuePropertyName
+
+Class QItemEditorFactory
+ size=16 align=8
+ base size=16 base align=8
+QItemEditorFactory (0x0x7f5f567a2c00) 0
+ vptr=((& QItemEditorFactory::_ZTV18QItemEditorFactory) + 16)
+
+Class QKeySequenceEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QKeySequenceEdit::QPrivateSignal (0x0x7f5f56806120) 0 empty
+
+Vtable for QKeySequenceEdit
+QKeySequenceEdit::_ZTV16QKeySequenceEdit: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QKeySequenceEdit)
+16 (int (*)(...))QKeySequenceEdit::metaObject
+24 (int (*)(...))QKeySequenceEdit::qt_metacast
+32 (int (*)(...))QKeySequenceEdit::qt_metacall
+40 (int (*)(...))QKeySequenceEdit::~QKeySequenceEdit
+48 (int (*)(...))QKeySequenceEdit::~QKeySequenceEdit
+56 (int (*)(...))QKeySequenceEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QKeySequenceEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QKeySequenceEdit::keyPressEvent
+216 (int (*)(...))QKeySequenceEdit::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI16QKeySequenceEdit)
+448 (int (*)(...))QKeySequenceEdit::_ZThn16_N16QKeySequenceEditD1Ev
+456 (int (*)(...))QKeySequenceEdit::_ZThn16_N16QKeySequenceEditD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QKeySequenceEdit
+ size=40 align=8
+ base size=40 base align=8
+QKeySequenceEdit (0x0x7f5f56ae18f0) 0
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 16)
+ QWidget (0x0x7f5f567608c0) 0
+ primary-for QKeySequenceEdit (0x0x7f5f56ae18f0)
+ QObject (0x0x7f5f56806060) 0
+ primary-for QWidget (0x0x7f5f567608c0)
+ QPaintDevice (0x0x7f5f568060c0) 16
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 448)
+
+Class QLabel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLabel::QPrivateSignal (0x0x7f5f56806360) 0 empty
+
+Vtable for QLabel
+QLabel::_ZTV6QLabel: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QLabel)
+16 (int (*)(...))QLabel::metaObject
+24 (int (*)(...))QLabel::qt_metacast
+32 (int (*)(...))QLabel::qt_metacall
+40 (int (*)(...))QLabel::~QLabel
+48 (int (*)(...))QLabel::~QLabel
+56 (int (*)(...))QLabel::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLabel::sizeHint
+136 (int (*)(...))QLabel::minimumSizeHint
+144 (int (*)(...))QLabel::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QLabel::mousePressEvent
+176 (int (*)(...))QLabel::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QLabel::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QLabel::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QLabel::focusInEvent
+232 (int (*)(...))QLabel::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLabel::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QLabel::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QLabel::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QLabel::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI6QLabel)
+456 (int (*)(...))QLabel::_ZThn16_N6QLabelD1Ev
+464 (int (*)(...))QLabel::_ZThn16_N6QLabelD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLabel
+ size=40 align=8
+ base size=40 base align=8
+QLabel (0x0x7f5f56ae1958) 0
+ vptr=((& QLabel::_ZTV6QLabel) + 16)
+ QFrame (0x0x7f5f56ae19c0) 0
+ primary-for QLabel (0x0x7f5f56ae1958)
+ QWidget (0x0x7f5f56760930) 0
+ primary-for QFrame (0x0x7f5f56ae19c0)
+ QObject (0x0x7f5f568062a0) 0
+ primary-for QWidget (0x0x7f5f56760930)
+ QPaintDevice (0x0x7f5f56806300) 16
+ vptr=((& QLabel::_ZTV6QLabel) + 456)
+
+Class QLCDNumber::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLCDNumber::QPrivateSignal (0x0x7f5f56806660) 0 empty
+
+Vtable for QLCDNumber
+QLCDNumber::_ZTV10QLCDNumber: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QLCDNumber)
+16 (int (*)(...))QLCDNumber::metaObject
+24 (int (*)(...))QLCDNumber::qt_metacast
+32 (int (*)(...))QLCDNumber::qt_metacall
+40 (int (*)(...))QLCDNumber::~QLCDNumber
+48 (int (*)(...))QLCDNumber::~QLCDNumber
+56 (int (*)(...))QLCDNumber::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLCDNumber::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLCDNumber::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI10QLCDNumber)
+456 (int (*)(...))QLCDNumber::_ZThn16_N10QLCDNumberD1Ev
+464 (int (*)(...))QLCDNumber::_ZThn16_N10QLCDNumberD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLCDNumber
+ size=40 align=8
+ base size=40 base align=8
+QLCDNumber (0x0x7f5f56ae1a28) 0
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 16)
+ QFrame (0x0x7f5f56ae1a90) 0
+ primary-for QLCDNumber (0x0x7f5f56ae1a28)
+ QWidget (0x0x7f5f567609a0) 0
+ primary-for QFrame (0x0x7f5f56ae1a90)
+ QObject (0x0x7f5f568065a0) 0
+ primary-for QWidget (0x0x7f5f567609a0)
+ QPaintDevice (0x0x7f5f56806600) 16
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 456)
+
+Class QListView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListView::QPrivateSignal (0x0x7f5f56806a20) 0 empty
+
+Vtable for QListView
+QListView::_ZTV9QListView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QListView)
+16 (int (*)(...))QListView::metaObject
+24 (int (*)(...))QListView::qt_metacast
+32 (int (*)(...))QListView::qt_metacall
+40 (int (*)(...))QListView::~QListView
+48 (int (*)(...))QListView::~QListView
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI9QListView)
+800 (int (*)(...))QListView::_ZThn16_N9QListViewD1Ev
+808 (int (*)(...))QListView::_ZThn16_N9QListViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QListView
+ size=40 align=8
+ base size=40 base align=8
+QListView (0x0x7f5f56ae1af8) 0
+ vptr=((& QListView::_ZTV9QListView) + 16)
+ QAbstractItemView (0x0x7f5f56ae1b60) 0
+ primary-for QListView (0x0x7f5f56ae1af8)
+ QAbstractScrollArea (0x0x7f5f56ae1bc8) 0
+ primary-for QAbstractItemView (0x0x7f5f56ae1b60)
+ QFrame (0x0x7f5f56ae1c30) 0
+ primary-for QAbstractScrollArea (0x0x7f5f56ae1bc8)
+ QWidget (0x0x7f5f56760d20) 0
+ primary-for QFrame (0x0x7f5f56ae1c30)
+ QObject (0x0x7f5f56806960) 0
+ primary-for QWidget (0x0x7f5f56760d20)
+ QPaintDevice (0x0x7f5f568069c0) 16
+ vptr=((& QListView::_ZTV9QListView) + 800)
+
+Vtable for QListWidgetItem
+QListWidgetItem::_ZTV15QListWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QListWidgetItem)
+16 (int (*)(...))QListWidgetItem::~QListWidgetItem
+24 (int (*)(...))QListWidgetItem::~QListWidgetItem
+32 (int (*)(...))QListWidgetItem::clone
+40 (int (*)(...))QListWidgetItem::data
+48 (int (*)(...))QListWidgetItem::setData
+56 (int (*)(...))QListWidgetItem::operator<
+64 (int (*)(...))QListWidgetItem::read
+72 (int (*)(...))QListWidgetItem::write
+
+Class QListWidgetItem
+ size=40 align=8
+ base size=36 base align=8
+QListWidgetItem (0x0x7f5f56806f60) 0
+ vptr=((& QListWidgetItem::_ZTV15QListWidgetItem) + 16)
+
+Class QListWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListWidget::QPrivateSignal (0x0x7f5f56870a20) 0 empty
+
+Vtable for QListWidget
+QListWidget::_ZTV11QListWidget: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QListWidget)
+16 (int (*)(...))QListWidget::metaObject
+24 (int (*)(...))QListWidget::qt_metacast
+32 (int (*)(...))QListWidget::qt_metacall
+40 (int (*)(...))QListWidget::~QListWidget
+48 (int (*)(...))QListWidget::~QListWidget
+56 (int (*)(...))QListWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QListWidget::setModel
+480 (int (*)(...))QListWidget::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))QListWidget::mimeTypes
+792 (int (*)(...))QListWidget::mimeData
+800 (int (*)(...))QListWidget::dropMimeData
+808 (int (*)(...))QListWidget::supportedDropActions
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI11QListWidget)
+832 (int (*)(...))QListWidget::_ZThn16_N11QListWidgetD1Ev
+840 (int (*)(...))QListWidget::_ZThn16_N11QListWidgetD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QListWidget
+ size=40 align=8
+ base size=40 base align=8
+QListWidget (0x0x7f5f56ae1c98) 0
+ vptr=((& QListWidget::_ZTV11QListWidget) + 16)
+ QListView (0x0x7f5f56ae1d00) 0
+ primary-for QListWidget (0x0x7f5f56ae1c98)
+ QAbstractItemView (0x0x7f5f56ae1d68) 0
+ primary-for QListView (0x0x7f5f56ae1d00)
+ QAbstractScrollArea (0x0x7f5f56ae1dd0) 0
+ primary-for QAbstractItemView (0x0x7f5f56ae1d68)
+ QFrame (0x0x7f5f56ae1e38) 0
+ primary-for QAbstractScrollArea (0x0x7f5f56ae1dd0)
+ QWidget (0x0x7f5f56840380) 0
+ primary-for QFrame (0x0x7f5f56ae1e38)
+ QObject (0x0x7f5f56870960) 0
+ primary-for QWidget (0x0x7f5f56840380)
+ QPaintDevice (0x0x7f5f568709c0) 16
+ vptr=((& QListWidget::_ZTV11QListWidget) + 832)
+
+Class QMainWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMainWindow::QPrivateSignal (0x0x7f5f56870f00) 0 empty
+
+Vtable for QMainWindow
+QMainWindow::_ZTV11QMainWindow: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMainWindow)
+16 (int (*)(...))QMainWindow::metaObject
+24 (int (*)(...))QMainWindow::qt_metacast
+32 (int (*)(...))QMainWindow::qt_metacall
+40 (int (*)(...))QMainWindow::~QMainWindow
+48 (int (*)(...))QMainWindow::~QMainWindow
+56 (int (*)(...))QMainWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QMainWindow::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QMainWindow::createPopupMenu
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QMainWindow)
+456 (int (*)(...))QMainWindow::_ZThn16_N11QMainWindowD1Ev
+464 (int (*)(...))QMainWindow::_ZThn16_N11QMainWindowD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMainWindow
+ size=40 align=8
+ base size=40 base align=8
+QMainWindow (0x0x7f5f56ae1ea0) 0
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 16)
+ QWidget (0x0x7f5f568403f0) 0
+ primary-for QMainWindow (0x0x7f5f56ae1ea0)
+ QObject (0x0x7f5f56870e40) 0
+ primary-for QWidget (0x0x7f5f568403f0)
+ QPaintDevice (0x0x7f5f56870ea0) 16
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 456)
+
+Class QMdiArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiArea::QPrivateSignal (0x0x7f5f568b3600) 0 empty
+
+Vtable for QMdiArea
+QMdiArea::_ZTV8QMdiArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QMdiArea)
+16 (int (*)(...))QMdiArea::metaObject
+24 (int (*)(...))QMdiArea::qt_metacast
+32 (int (*)(...))QMdiArea::qt_metacall
+40 (int (*)(...))QMdiArea::~QMdiArea
+48 (int (*)(...))QMdiArea::~QMdiArea
+56 (int (*)(...))QMdiArea::event
+64 (int (*)(...))QMdiArea::eventFilter
+72 (int (*)(...))QMdiArea::timerEvent
+80 (int (*)(...))QMdiArea::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMdiArea::sizeHint
+136 (int (*)(...))QMdiArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QMdiArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMdiArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QMdiArea::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QMdiArea::setupViewport
+448 (int (*)(...))QMdiArea::viewportEvent
+456 (int (*)(...))QMdiArea::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI8QMdiArea)
+488 (int (*)(...))QMdiArea::_ZThn16_N8QMdiAreaD1Ev
+496 (int (*)(...))QMdiArea::_ZThn16_N8QMdiAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMdiArea
+ size=40 align=8
+ base size=40 base align=8
+QMdiArea (0x0x7f5f568b5068) 0
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 16)
+ QAbstractScrollArea (0x0x7f5f568b50d0) 0
+ primary-for QMdiArea (0x0x7f5f568b5068)
+ QFrame (0x0x7f5f568b5138) 0
+ primary-for QAbstractScrollArea (0x0x7f5f568b50d0)
+ QWidget (0x0x7f5f56840700) 0
+ primary-for QFrame (0x0x7f5f568b5138)
+ QObject (0x0x7f5f568b3540) 0
+ primary-for QWidget (0x0x7f5f56840700)
+ QPaintDevice (0x0x7f5f568b35a0) 16
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 488)
+
+Class QMdiSubWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiSubWindow::QPrivateSignal (0x0x7f5f568b3cc0) 0 empty
+
+Vtable for QMdiSubWindow
+QMdiSubWindow::_ZTV13QMdiSubWindow: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QMdiSubWindow)
+16 (int (*)(...))QMdiSubWindow::metaObject
+24 (int (*)(...))QMdiSubWindow::qt_metacast
+32 (int (*)(...))QMdiSubWindow::qt_metacall
+40 (int (*)(...))QMdiSubWindow::~QMdiSubWindow
+48 (int (*)(...))QMdiSubWindow::~QMdiSubWindow
+56 (int (*)(...))QMdiSubWindow::event
+64 (int (*)(...))QMdiSubWindow::eventFilter
+72 (int (*)(...))QMdiSubWindow::timerEvent
+80 (int (*)(...))QMdiSubWindow::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMdiSubWindow::sizeHint
+136 (int (*)(...))QMdiSubWindow::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMdiSubWindow::mousePressEvent
+176 (int (*)(...))QMdiSubWindow::mouseReleaseEvent
+184 (int (*)(...))QMdiSubWindow::mouseDoubleClickEvent
+192 (int (*)(...))QMdiSubWindow::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMdiSubWindow::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QMdiSubWindow::focusInEvent
+232 (int (*)(...))QMdiSubWindow::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QMdiSubWindow::leaveEvent
+256 (int (*)(...))QMdiSubWindow::paintEvent
+264 (int (*)(...))QMdiSubWindow::moveEvent
+272 (int (*)(...))QMdiSubWindow::resizeEvent
+280 (int (*)(...))QMdiSubWindow::closeEvent
+288 (int (*)(...))QMdiSubWindow::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QMdiSubWindow::showEvent
+352 (int (*)(...))QMdiSubWindow::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMdiSubWindow::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI13QMdiSubWindow)
+448 (int (*)(...))QMdiSubWindow::_ZThn16_N13QMdiSubWindowD1Ev
+456 (int (*)(...))QMdiSubWindow::_ZThn16_N13QMdiSubWindowD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMdiSubWindow
+ size=40 align=8
+ base size=40 base align=8
+QMdiSubWindow (0x0x7f5f568b52d8) 0
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 16)
+ QWidget (0x0x7f5f56840a80) 0
+ primary-for QMdiSubWindow (0x0x7f5f568b52d8)
+ QObject (0x0x7f5f568b3c00) 0
+ primary-for QWidget (0x0x7f5f56840a80)
+ QPaintDevice (0x0x7f5f568b3c60) 16
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 448)
+
+Class QMenu::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenu::QPrivateSignal (0x0x7f5f56920240) 0 empty
+
+Vtable for QMenu
+QMenu::_ZTV5QMenu: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QMenu)
+16 (int (*)(...))QMenu::metaObject
+24 (int (*)(...))QMenu::qt_metacast
+32 (int (*)(...))QMenu::qt_metacall
+40 (int (*)(...))QMenu::~QMenu
+48 (int (*)(...))QMenu::~QMenu
+56 (int (*)(...))QMenu::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QMenu::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMenu::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMenu::mousePressEvent
+176 (int (*)(...))QMenu::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QMenu::mouseMoveEvent
+200 (int (*)(...))QMenu::wheelEvent
+208 (int (*)(...))QMenu::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QMenu::enterEvent
+248 (int (*)(...))QMenu::leaveEvent
+256 (int (*)(...))QMenu::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QMenu::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QMenu::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMenu::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QMenu::focusNextPrevChild
+432 (int (*)(...))QMenu::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI5QMenu)
+456 (int (*)(...))QMenu::_ZThn16_N5QMenuD1Ev
+464 (int (*)(...))QMenu::_ZThn16_N5QMenuD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMenu
+ size=40 align=8
+ base size=40 base align=8
+QMenu (0x0x7f5f568b5478) 0
+ vptr=((& QMenu::_ZTV5QMenu) + 16)
+ QWidget (0x0x7f5f56840cb0) 0
+ primary-for QMenu (0x0x7f5f568b5478)
+ QObject (0x0x7f5f56920180) 0
+ primary-for QWidget (0x0x7f5f56840cb0)
+ QPaintDevice (0x0x7f5f569201e0) 16
+ vptr=((& QMenu::_ZTV5QMenu) + 456)
+
+Class QMenuBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenuBar::QPrivateSignal (0x0x7f5f56920600) 0 empty
+
+Vtable for QMenuBar
+QMenuBar::_ZTV8QMenuBar: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QMenuBar)
+16 (int (*)(...))QMenuBar::metaObject
+24 (int (*)(...))QMenuBar::qt_metacast
+32 (int (*)(...))QMenuBar::qt_metacall
+40 (int (*)(...))QMenuBar::~QMenuBar
+48 (int (*)(...))QMenuBar::~QMenuBar
+56 (int (*)(...))QMenuBar::event
+64 (int (*)(...))QMenuBar::eventFilter
+72 (int (*)(...))QMenuBar::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QMenuBar::setVisible
+128 (int (*)(...))QMenuBar::sizeHint
+136 (int (*)(...))QMenuBar::minimumSizeHint
+144 (int (*)(...))QMenuBar::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMenuBar::mousePressEvent
+176 (int (*)(...))QMenuBar::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QMenuBar::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMenuBar::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QMenuBar::focusInEvent
+232 (int (*)(...))QMenuBar::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QMenuBar::leaveEvent
+256 (int (*)(...))QMenuBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMenuBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QMenuBar::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMenuBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QMenuBar::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI8QMenuBar)
+456 (int (*)(...))QMenuBar::_ZThn16_N8QMenuBarD1Ev
+464 (int (*)(...))QMenuBar::_ZThn16_N8QMenuBarD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMenuBar
+ size=40 align=8
+ base size=40 base align=8
+QMenuBar (0x0x7f5f568b54e0) 0
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 16)
+ QWidget (0x0x7f5f56840d20) 0
+ primary-for QMenuBar (0x0x7f5f568b54e0)
+ QObject (0x0x7f5f56920540) 0
+ primary-for QWidget (0x0x7f5f56840d20)
+ QPaintDevice (0x0x7f5f569205a0) 16
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 456)
+
+Class QMessageBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMessageBox::QPrivateSignal (0x0x7f5f56920900) 0 empty
+
+Vtable for QMessageBox
+QMessageBox::_ZTV11QMessageBox: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMessageBox)
+16 (int (*)(...))QMessageBox::metaObject
+24 (int (*)(...))QMessageBox::qt_metacast
+32 (int (*)(...))QMessageBox::qt_metacall
+40 (int (*)(...))QMessageBox::~QMessageBox
+48 (int (*)(...))QMessageBox::~QMessageBox
+56 (int (*)(...))QMessageBox::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMessageBox::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMessageBox::resizeEvent
+280 (int (*)(...))QMessageBox::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QMessageBox::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMessageBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QMessageBox)
+488 (int (*)(...))QMessageBox::_ZThn16_N11QMessageBoxD1Ev
+496 (int (*)(...))QMessageBox::_ZThn16_N11QMessageBoxD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMessageBox
+ size=40 align=8
+ base size=40 base align=8
+QMessageBox (0x0x7f5f568b5548) 0
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 16)
+ QDialog (0x0x7f5f568b55b0) 0
+ primary-for QMessageBox (0x0x7f5f568b5548)
+ QWidget (0x0x7f5f56840d90) 0
+ primary-for QDialog (0x0x7f5f568b55b0)
+ QObject (0x0x7f5f56920840) 0
+ primary-for QWidget (0x0x7f5f56840d90)
+ QPaintDevice (0x0x7f5f569208a0) 16
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 488)
+
+Class QTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextEdit::QPrivateSignal (0x0x7f5f565c1180) 0 empty
+
+Class QTextEdit::ExtraSelection
+ size=24 align=8
+ base size=24 base align=8
+QTextEdit::ExtraSelection (0x0x7f5f565c11e0) 0
+
+Vtable for QTextEdit
+QTextEdit::_ZTV9QTextEdit: 74 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTextEdit)
+16 (int (*)(...))QTextEdit::metaObject
+24 (int (*)(...))QTextEdit::qt_metacast
+32 (int (*)(...))QTextEdit::qt_metacall
+40 (int (*)(...))QTextEdit::~QTextEdit
+48 (int (*)(...))QTextEdit::~QTextEdit
+56 (int (*)(...))QTextEdit::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTextEdit::mousePressEvent
+176 (int (*)(...))QTextEdit::mouseReleaseEvent
+184 (int (*)(...))QTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QTextEdit::mouseMoveEvent
+200 (int (*)(...))QTextEdit::wheelEvent
+208 (int (*)(...))QTextEdit::keyPressEvent
+216 (int (*)(...))QTextEdit::keyReleaseEvent
+224 (int (*)(...))QTextEdit::focusInEvent
+232 (int (*)(...))QTextEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTextEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QTextEdit::dragEnterEvent
+320 (int (*)(...))QTextEdit::dragMoveEvent
+328 (int (*)(...))QTextEdit::dragLeaveEvent
+336 (int (*)(...))QTextEdit::dropEvent
+344 (int (*)(...))QTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QTextEdit::inputMethodEvent
+416 (int (*)(...))QTextEdit::inputMethodQuery
+424 (int (*)(...))QTextEdit::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QTextEdit::loadResource
+480 (int (*)(...))QTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QTextEdit::canInsertFromMimeData
+496 (int (*)(...))QTextEdit::insertFromMimeData
+504 (int (*)(...))QTextEdit::doSetTextCursor
+512 (int (*)(...))-16
+520 (int (*)(...))(& _ZTI9QTextEdit)
+528 (int (*)(...))QTextEdit::_ZThn16_N9QTextEditD1Ev
+536 (int (*)(...))QTextEdit::_ZThn16_N9QTextEditD0Ev
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTextEdit
+ size=40 align=8
+ base size=40 base align=8
+QTextEdit (0x0x7f5f568b5750) 0
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 16)
+ QAbstractScrollArea (0x0x7f5f568b57b8) 0
+ primary-for QTextEdit (0x0x7f5f568b5750)
+ QFrame (0x0x7f5f568b5820) 0
+ primary-for QAbstractScrollArea (0x0x7f5f568b57b8)
+ QWidget (0x0x7f5f56576150) 0
+ primary-for QFrame (0x0x7f5f568b5820)
+ QObject (0x0x7f5f565c10c0) 0
+ primary-for QWidget (0x0x7f5f56576150)
+ QPaintDevice (0x0x7f5f565c1120) 16
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 528)
+
+Class QPlainTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextEdit::QPrivateSignal (0x0x7f5f565c1a20) 0 empty
+
+Vtable for QPlainTextEdit
+QPlainTextEdit::_ZTV14QPlainTextEdit: 74 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QPlainTextEdit)
+16 (int (*)(...))QPlainTextEdit::metaObject
+24 (int (*)(...))QPlainTextEdit::qt_metacast
+32 (int (*)(...))QPlainTextEdit::qt_metacall
+40 (int (*)(...))QPlainTextEdit::~QPlainTextEdit
+48 (int (*)(...))QPlainTextEdit::~QPlainTextEdit
+56 (int (*)(...))QPlainTextEdit::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QPlainTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QPlainTextEdit::mousePressEvent
+176 (int (*)(...))QPlainTextEdit::mouseReleaseEvent
+184 (int (*)(...))QPlainTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QPlainTextEdit::mouseMoveEvent
+200 (int (*)(...))QPlainTextEdit::wheelEvent
+208 (int (*)(...))QPlainTextEdit::keyPressEvent
+216 (int (*)(...))QPlainTextEdit::keyReleaseEvent
+224 (int (*)(...))QPlainTextEdit::focusInEvent
+232 (int (*)(...))QPlainTextEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QPlainTextEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QPlainTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QPlainTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QPlainTextEdit::dragEnterEvent
+320 (int (*)(...))QPlainTextEdit::dragMoveEvent
+328 (int (*)(...))QPlainTextEdit::dragLeaveEvent
+336 (int (*)(...))QPlainTextEdit::dropEvent
+344 (int (*)(...))QPlainTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QPlainTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QPlainTextEdit::inputMethodEvent
+416 (int (*)(...))QPlainTextEdit::inputMethodQuery
+424 (int (*)(...))QPlainTextEdit::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QPlainTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QPlainTextEdit::loadResource
+480 (int (*)(...))QPlainTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QPlainTextEdit::canInsertFromMimeData
+496 (int (*)(...))QPlainTextEdit::insertFromMimeData
+504 (int (*)(...))QPlainTextEdit::doSetTextCursor
+512 (int (*)(...))-16
+520 (int (*)(...))(& _ZTI14QPlainTextEdit)
+528 (int (*)(...))QPlainTextEdit::_ZThn16_N14QPlainTextEditD1Ev
+536 (int (*)(...))QPlainTextEdit::_ZThn16_N14QPlainTextEditD0Ev
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QPlainTextEdit
+ size=40 align=8
+ base size=40 base align=8
+QPlainTextEdit (0x0x7f5f568b59c0) 0
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 16)
+ QAbstractScrollArea (0x0x7f5f568b5a28) 0
+ primary-for QPlainTextEdit (0x0x7f5f568b59c0)
+ QFrame (0x0x7f5f568b5a90) 0
+ primary-for QAbstractScrollArea (0x0x7f5f568b5a28)
+ QWidget (0x0x7f5f565764d0) 0
+ primary-for QFrame (0x0x7f5f568b5a90)
+ QObject (0x0x7f5f565c1960) 0
+ primary-for QWidget (0x0x7f5f565764d0)
+ QPaintDevice (0x0x7f5f565c19c0) 16
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 528)
+
+Class QPlainTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextDocumentLayout::QPrivateSignal (0x0x7f5f565c1f60) 0 empty
+
+Vtable for QPlainTextDocumentLayout
+QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QPlainTextDocumentLayout)
+16 (int (*)(...))QPlainTextDocumentLayout::metaObject
+24 (int (*)(...))QPlainTextDocumentLayout::qt_metacast
+32 (int (*)(...))QPlainTextDocumentLayout::qt_metacall
+40 (int (*)(...))QPlainTextDocumentLayout::~QPlainTextDocumentLayout
+48 (int (*)(...))QPlainTextDocumentLayout::~QPlainTextDocumentLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPlainTextDocumentLayout::draw
+120 (int (*)(...))QPlainTextDocumentLayout::hitTest
+128 (int (*)(...))QPlainTextDocumentLayout::pageCount
+136 (int (*)(...))QPlainTextDocumentLayout::documentSize
+144 (int (*)(...))QPlainTextDocumentLayout::frameBoundingRect
+152 (int (*)(...))QPlainTextDocumentLayout::blockBoundingRect
+160 (int (*)(...))QPlainTextDocumentLayout::documentChanged
+168 (int (*)(...))QAbstractTextDocumentLayout::resizeInlineObject
+176 (int (*)(...))QAbstractTextDocumentLayout::positionInlineObject
+184 (int (*)(...))QAbstractTextDocumentLayout::drawInlineObject
+
+Class QPlainTextDocumentLayout
+ size=16 align=8
+ base size=16 base align=8
+QPlainTextDocumentLayout (0x0x7f5f568b5af8) 0
+ vptr=((& QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout) + 16)
+ QAbstractTextDocumentLayout (0x0x7f5f568b5b60) 0
+ primary-for QPlainTextDocumentLayout (0x0x7f5f568b5af8)
+ QObject (0x0x7f5f565c1f00) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f5f568b5b60)
+
+Class QProgressBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressBar::QPrivateSignal (0x0x7f5f566521e0) 0 empty
+
+Vtable for QProgressBar
+QProgressBar::_ZTV12QProgressBar: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QProgressBar)
+16 (int (*)(...))QProgressBar::metaObject
+24 (int (*)(...))QProgressBar::qt_metacast
+32 (int (*)(...))QProgressBar::qt_metacall
+40 (int (*)(...))QProgressBar::~QProgressBar
+48 (int (*)(...))QProgressBar::~QProgressBar
+56 (int (*)(...))QProgressBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QProgressBar::sizeHint
+136 (int (*)(...))QProgressBar::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QProgressBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QProgressBar::text
+440 (int (*)(...))QProgressBar::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI12QProgressBar)
+464 (int (*)(...))QProgressBar::_ZThn16_N12QProgressBarD1Ev
+472 (int (*)(...))QProgressBar::_ZThn16_N12QProgressBarD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QProgressBar
+ size=40 align=8
+ base size=40 base align=8
+QProgressBar (0x0x7f5f568b5bc8) 0
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 16)
+ QWidget (0x0x7f5f56576620) 0
+ primary-for QProgressBar (0x0x7f5f568b5bc8)
+ QObject (0x0x7f5f56652120) 0
+ primary-for QWidget (0x0x7f5f56576620)
+ QPaintDevice (0x0x7f5f56652180) 16
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 464)
+
+Class QProgressDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressDialog::QPrivateSignal (0x0x7f5f566524e0) 0 empty
+
+Vtable for QProgressDialog
+QProgressDialog::_ZTV15QProgressDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QProgressDialog)
+16 (int (*)(...))QProgressDialog::metaObject
+24 (int (*)(...))QProgressDialog::qt_metacast
+32 (int (*)(...))QProgressDialog::qt_metacall
+40 (int (*)(...))QProgressDialog::~QProgressDialog
+48 (int (*)(...))QProgressDialog::~QProgressDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QProgressDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QProgressDialog::resizeEvent
+280 (int (*)(...))QProgressDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QProgressDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QProgressDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI15QProgressDialog)
+488 (int (*)(...))QProgressDialog::_ZThn16_N15QProgressDialogD1Ev
+496 (int (*)(...))QProgressDialog::_ZThn16_N15QProgressDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QProgressDialog
+ size=40 align=8
+ base size=40 base align=8
+QProgressDialog (0x0x7f5f568b5c30) 0
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 16)
+ QDialog (0x0x7f5f568b5c98) 0
+ primary-for QProgressDialog (0x0x7f5f568b5c30)
+ QWidget (0x0x7f5f56576770) 0
+ primary-for QDialog (0x0x7f5f568b5c98)
+ QObject (0x0x7f5f56652420) 0
+ primary-for QWidget (0x0x7f5f56576770)
+ QPaintDevice (0x0x7f5f56652480) 16
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 488)
+
+Class QProxyStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProxyStyle::QPrivateSignal (0x0x7f5f566526c0) 0 empty
+
+Vtable for QProxyStyle
+QProxyStyle::_ZTV11QProxyStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QProxyStyle)
+16 (int (*)(...))QProxyStyle::metaObject
+24 (int (*)(...))QProxyStyle::qt_metacast
+32 (int (*)(...))QProxyStyle::qt_metacall
+40 (int (*)(...))QProxyStyle::~QProxyStyle
+48 (int (*)(...))QProxyStyle::~QProxyStyle
+56 (int (*)(...))QProxyStyle::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QProxyStyle::polish
+120 (int (*)(...))QProxyStyle::unpolish
+128 (int (*)(...))QProxyStyle::polish
+136 (int (*)(...))QProxyStyle::unpolish
+144 (int (*)(...))QProxyStyle::polish
+152 (int (*)(...))QProxyStyle::itemTextRect
+160 (int (*)(...))QProxyStyle::itemPixmapRect
+168 (int (*)(...))QProxyStyle::drawItemText
+176 (int (*)(...))QProxyStyle::drawItemPixmap
+184 (int (*)(...))QProxyStyle::standardPalette
+192 (int (*)(...))QProxyStyle::drawPrimitive
+200 (int (*)(...))QProxyStyle::drawControl
+208 (int (*)(...))QProxyStyle::subElementRect
+216 (int (*)(...))QProxyStyle::drawComplexControl
+224 (int (*)(...))QProxyStyle::hitTestComplexControl
+232 (int (*)(...))QProxyStyle::subControlRect
+240 (int (*)(...))QProxyStyle::pixelMetric
+248 (int (*)(...))QProxyStyle::sizeFromContents
+256 (int (*)(...))QProxyStyle::styleHint
+264 (int (*)(...))QProxyStyle::standardPixmap
+272 (int (*)(...))QProxyStyle::standardIcon
+280 (int (*)(...))QProxyStyle::generatedIconPixmap
+288 (int (*)(...))QProxyStyle::layoutSpacing
+
+Class QProxyStyle
+ size=16 align=8
+ base size=16 base align=8
+QProxyStyle (0x0x7f5f568b5d00) 0
+ vptr=((& QProxyStyle::_ZTV11QProxyStyle) + 16)
+ QCommonStyle (0x0x7f5f568b5d68) 0
+ primary-for QProxyStyle (0x0x7f5f568b5d00)
+ QStyle (0x0x7f5f568b5dd0) 0
+ primary-for QCommonStyle (0x0x7f5f568b5d68)
+ QObject (0x0x7f5f56652660) 0
+ primary-for QStyle (0x0x7f5f568b5dd0)
+
+Class QRadioButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRadioButton::QPrivateSignal (0x0x7f5f56652900) 0 empty
+
+Vtable for QRadioButton
+QRadioButton::_ZTV12QRadioButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QRadioButton)
+16 (int (*)(...))QRadioButton::metaObject
+24 (int (*)(...))QRadioButton::qt_metacast
+32 (int (*)(...))QRadioButton::qt_metacall
+40 (int (*)(...))QRadioButton::~QRadioButton
+48 (int (*)(...))QRadioButton::~QRadioButton
+56 (int (*)(...))QRadioButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QRadioButton::sizeHint
+136 (int (*)(...))QRadioButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QRadioButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QRadioButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QRadioButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QRadioButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI12QRadioButton)
+480 (int (*)(...))QRadioButton::_ZThn16_N12QRadioButtonD1Ev
+488 (int (*)(...))QRadioButton::_ZThn16_N12QRadioButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QRadioButton
+ size=40 align=8
+ base size=40 base align=8
+QRadioButton (0x0x7f5f568b5e38) 0
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 16)
+ QAbstractButton (0x0x7f5f568b5ea0) 0
+ primary-for QRadioButton (0x0x7f5f568b5e38)
+ QWidget (0x0x7f5f565767e0) 0
+ primary-for QAbstractButton (0x0x7f5f568b5ea0)
+ QObject (0x0x7f5f56652840) 0
+ primary-for QWidget (0x0x7f5f565767e0)
+ QPaintDevice (0x0x7f5f566528a0) 16
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 480)
+
+Class QScrollBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollBar::QPrivateSignal (0x0x7f5f56652b40) 0 empty
+
+Vtable for QScrollBar
+QScrollBar::_ZTV10QScrollBar: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QScrollBar)
+16 (int (*)(...))QScrollBar::metaObject
+24 (int (*)(...))QScrollBar::qt_metacast
+32 (int (*)(...))QScrollBar::qt_metacall
+40 (int (*)(...))QScrollBar::~QScrollBar
+48 (int (*)(...))QScrollBar::~QScrollBar
+56 (int (*)(...))QScrollBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QScrollBar::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QScrollBar::mousePressEvent
+176 (int (*)(...))QScrollBar::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QScrollBar::mouseMoveEvent
+200 (int (*)(...))QScrollBar::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QScrollBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QScrollBar::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QScrollBar::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QScrollBar::sliderChange
+440 (int (*)(...))QScrollBar::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI10QScrollBar)
+464 (int (*)(...))QScrollBar::_ZThn16_N10QScrollBarD1Ev
+472 (int (*)(...))QScrollBar::_ZThn16_N10QScrollBarD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QScrollBar
+ size=40 align=8
+ base size=40 base align=8
+QScrollBar (0x0x7f5f568b5f08) 0
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 16)
+ QAbstractSlider (0x0x7f5f568b5f70) 0
+ primary-for QScrollBar (0x0x7f5f568b5f08)
+ QWidget (0x0x7f5f56576850) 0
+ primary-for QAbstractSlider (0x0x7f5f568b5f70)
+ QObject (0x0x7f5f56652a80) 0
+ primary-for QWidget (0x0x7f5f56576850)
+ QPaintDevice (0x0x7f5f56652ae0) 16
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 464)
+
+Vtable for QScrollerProperties
+QScrollerProperties::_ZTV19QScrollerProperties: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollerProperties)
+16 (int (*)(...))QScrollerProperties::~QScrollerProperties
+24 (int (*)(...))QScrollerProperties::~QScrollerProperties
+
+Class QScrollerProperties
+ size=16 align=8
+ base size=16 base align=8
+QScrollerProperties (0x0x7f5f56652cc0) 0
+ vptr=((& QScrollerProperties::_ZTV19QScrollerProperties) + 16)
+
+Class QScroller::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScroller::QPrivateSignal (0x0x7f5f566bd060) 0 empty
+
+Vtable for QScroller
+QScroller::_ZTV9QScroller: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QScroller)
+16 (int (*)(...))QScroller::metaObject
+24 (int (*)(...))QScroller::qt_metacast
+32 (int (*)(...))QScroller::qt_metacall
+40 (int (*)(...))QScroller::~QScroller
+48 (int (*)(...))QScroller::~QScroller
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QScroller
+ size=24 align=8
+ base size=24 base align=8
+QScroller (0x0x7f5f566bc000) 0
+ vptr=((& QScroller::_ZTV9QScroller) + 16)
+ QObject (0x0x7f5f566bd000) 0
+ primary-for QScroller (0x0x7f5f566bc000)
+
+Class QSizeGrip::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSizeGrip::QPrivateSignal (0x0x7f5f566bd360) 0 empty
+
+Vtable for QSizeGrip
+QSizeGrip::_ZTV9QSizeGrip: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSizeGrip)
+16 (int (*)(...))QSizeGrip::metaObject
+24 (int (*)(...))QSizeGrip::qt_metacast
+32 (int (*)(...))QSizeGrip::qt_metacall
+40 (int (*)(...))QSizeGrip::~QSizeGrip
+48 (int (*)(...))QSizeGrip::~QSizeGrip
+56 (int (*)(...))QSizeGrip::event
+64 (int (*)(...))QSizeGrip::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QSizeGrip::setVisible
+128 (int (*)(...))QSizeGrip::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSizeGrip::mousePressEvent
+176 (int (*)(...))QSizeGrip::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSizeGrip::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSizeGrip::paintEvent
+264 (int (*)(...))QSizeGrip::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QSizeGrip::showEvent
+352 (int (*)(...))QSizeGrip::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI9QSizeGrip)
+448 (int (*)(...))QSizeGrip::_ZThn16_N9QSizeGripD1Ev
+456 (int (*)(...))QSizeGrip::_ZThn16_N9QSizeGripD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSizeGrip
+ size=40 align=8
+ base size=40 base align=8
+QSizeGrip (0x0x7f5f566bc068) 0
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 16)
+ QWidget (0x0x7f5f566acbd0) 0
+ primary-for QSizeGrip (0x0x7f5f566bc068)
+ QObject (0x0x7f5f566bd2a0) 0
+ primary-for QWidget (0x0x7f5f566acbd0)
+ QPaintDevice (0x0x7f5f566bd300) 16
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 448)
+
+Class QSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSpinBox::QPrivateSignal (0x0x7f5f566bd5a0) 0 empty
+
+Vtable for QSpinBox
+QSpinBox::_ZTV8QSpinBox: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSpinBox)
+16 (int (*)(...))QSpinBox::metaObject
+24 (int (*)(...))QSpinBox::qt_metacast
+32 (int (*)(...))QSpinBox::qt_metacall
+40 (int (*)(...))QSpinBox::~QSpinBox
+48 (int (*)(...))QSpinBox::~QSpinBox
+56 (int (*)(...))QSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QSpinBox::validate
+440 (int (*)(...))QSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))QSpinBox::valueFromText
+488 (int (*)(...))QSpinBox::textFromValue
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI8QSpinBox)
+512 (int (*)(...))QSpinBox::_ZThn16_N8QSpinBoxD1Ev
+520 (int (*)(...))QSpinBox::_ZThn16_N8QSpinBoxD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QSpinBox (0x0x7f5f566bc0d0) 0
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 16)
+ QAbstractSpinBox (0x0x7f5f566bc138) 0
+ primary-for QSpinBox (0x0x7f5f566bc0d0)
+ QWidget (0x0x7f5f566acc40) 0
+ primary-for QAbstractSpinBox (0x0x7f5f566bc138)
+ QObject (0x0x7f5f566bd4e0) 0
+ primary-for QWidget (0x0x7f5f566acc40)
+ QPaintDevice (0x0x7f5f566bd540) 16
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 512)
+
+Class QDoubleSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleSpinBox::QPrivateSignal (0x0x7f5f566bd7e0) 0 empty
+
+Vtable for QDoubleSpinBox
+QDoubleSpinBox::_ZTV14QDoubleSpinBox: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDoubleSpinBox)
+16 (int (*)(...))QDoubleSpinBox::metaObject
+24 (int (*)(...))QDoubleSpinBox::qt_metacast
+32 (int (*)(...))QDoubleSpinBox::qt_metacall
+40 (int (*)(...))QDoubleSpinBox::~QDoubleSpinBox
+48 (int (*)(...))QDoubleSpinBox::~QDoubleSpinBox
+56 (int (*)(...))QAbstractSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDoubleSpinBox::validate
+440 (int (*)(...))QDoubleSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))QDoubleSpinBox::valueFromText
+488 (int (*)(...))QDoubleSpinBox::textFromValue
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI14QDoubleSpinBox)
+512 (int (*)(...))QDoubleSpinBox::_ZThn16_N14QDoubleSpinBoxD1Ev
+520 (int (*)(...))QDoubleSpinBox::_ZThn16_N14QDoubleSpinBoxD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDoubleSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QDoubleSpinBox (0x0x7f5f566bc1a0) 0
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 16)
+ QAbstractSpinBox (0x0x7f5f566bc208) 0
+ primary-for QDoubleSpinBox (0x0x7f5f566bc1a0)
+ QWidget (0x0x7f5f566accb0) 0
+ primary-for QAbstractSpinBox (0x0x7f5f566bc208)
+ QObject (0x0x7f5f566bd720) 0
+ primary-for QWidget (0x0x7f5f566accb0)
+ QPaintDevice (0x0x7f5f566bd780) 16
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 512)
+
+Class QSplashScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplashScreen::QPrivateSignal (0x0x7f5f566bda20) 0 empty
+
+Vtable for QSplashScreen
+QSplashScreen::_ZTV13QSplashScreen: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSplashScreen)
+16 (int (*)(...))QSplashScreen::metaObject
+24 (int (*)(...))QSplashScreen::qt_metacast
+32 (int (*)(...))QSplashScreen::qt_metacall
+40 (int (*)(...))QSplashScreen::~QSplashScreen
+48 (int (*)(...))QSplashScreen::~QSplashScreen
+56 (int (*)(...))QSplashScreen::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSplashScreen::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QSplashScreen::drawContents
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI13QSplashScreen)
+456 (int (*)(...))QSplashScreen::_ZThn16_N13QSplashScreenD1Ev
+464 (int (*)(...))QSplashScreen::_ZThn16_N13QSplashScreenD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplashScreen
+ size=40 align=8
+ base size=40 base align=8
+QSplashScreen (0x0x7f5f566bc270) 0
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 16)
+ QWidget (0x0x7f5f566acd20) 0
+ primary-for QSplashScreen (0x0x7f5f566bc270)
+ QObject (0x0x7f5f566bd960) 0
+ primary-for QWidget (0x0x7f5f566acd20)
+ QPaintDevice (0x0x7f5f566bd9c0) 16
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 456)
+
+Class QSplitter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitter::QPrivateSignal (0x0x7f5f566bdc60) 0 empty
+
+Vtable for QSplitter
+QSplitter::_ZTV9QSplitter: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSplitter)
+16 (int (*)(...))QSplitter::metaObject
+24 (int (*)(...))QSplitter::qt_metacast
+32 (int (*)(...))QSplitter::qt_metacall
+40 (int (*)(...))QSplitter::~QSplitter
+48 (int (*)(...))QSplitter::~QSplitter
+56 (int (*)(...))QSplitter::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QSplitter::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSplitter::sizeHint
+136 (int (*)(...))QSplitter::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QSplitter::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QSplitter::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QSplitter::createHandle
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI9QSplitter)
+464 (int (*)(...))QSplitter::_ZThn16_N9QSplitterD1Ev
+472 (int (*)(...))QSplitter::_ZThn16_N9QSplitterD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplitter
+ size=40 align=8
+ base size=40 base align=8
+QSplitter (0x0x7f5f566bc2d8) 0
+ vptr=((& QSplitter::_ZTV9QSplitter) + 16)
+ QFrame (0x0x7f5f566bc340) 0
+ primary-for QSplitter (0x0x7f5f566bc2d8)
+ QWidget (0x0x7f5f566acd90) 0
+ primary-for QFrame (0x0x7f5f566bc340)
+ QObject (0x0x7f5f566bdba0) 0
+ primary-for QWidget (0x0x7f5f566acd90)
+ QPaintDevice (0x0x7f5f566bdc00) 16
+ vptr=((& QSplitter::_ZTV9QSplitter) + 464)
+
+Class QSplitterHandle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitterHandle::QPrivateSignal (0x0x7f5f566bdea0) 0 empty
+
+Vtable for QSplitterHandle
+QSplitterHandle::_ZTV15QSplitterHandle: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSplitterHandle)
+16 (int (*)(...))QSplitterHandle::metaObject
+24 (int (*)(...))QSplitterHandle::qt_metacast
+32 (int (*)(...))QSplitterHandle::qt_metacall
+40 (int (*)(...))QSplitterHandle::~QSplitterHandle
+48 (int (*)(...))QSplitterHandle::~QSplitterHandle
+56 (int (*)(...))QSplitterHandle::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSplitterHandle::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSplitterHandle::mousePressEvent
+176 (int (*)(...))QSplitterHandle::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSplitterHandle::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSplitterHandle::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QSplitterHandle::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI15QSplitterHandle)
+448 (int (*)(...))QSplitterHandle::_ZThn16_N15QSplitterHandleD1Ev
+456 (int (*)(...))QSplitterHandle::_ZThn16_N15QSplitterHandleD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplitterHandle
+ size=40 align=8
+ base size=40 base align=8
+QSplitterHandle (0x0x7f5f566bc3a8) 0
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 16)
+ QWidget (0x0x7f5f566ace00) 0
+ primary-for QSplitterHandle (0x0x7f5f566bc3a8)
+ QObject (0x0x7f5f566bdde0) 0
+ primary-for QWidget (0x0x7f5f566ace00)
+ QPaintDevice (0x0x7f5f566bde40) 16
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 448)
+
+Class QStackedLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedLayout::QPrivateSignal (0x0x7f5f56328120) 0 empty
+
+Vtable for QStackedLayout
+QStackedLayout::_ZTV14QStackedLayout: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QStackedLayout)
+16 (int (*)(...))QStackedLayout::metaObject
+24 (int (*)(...))QStackedLayout::qt_metacast
+32 (int (*)(...))QStackedLayout::qt_metacall
+40 (int (*)(...))QStackedLayout::~QStackedLayout
+48 (int (*)(...))QStackedLayout::~QStackedLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLayout::spacing
+120 (int (*)(...))QLayout::setSpacing
+128 (int (*)(...))QLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QStackedLayout::addItem
+152 (int (*)(...))QLayout::expandingDirections
+160 (int (*)(...))QStackedLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QStackedLayout::setGeometry
+184 (int (*)(...))QStackedLayout::itemAt
+192 (int (*)(...))QStackedLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QStackedLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QStackedLayout::sizeHint
+264 (int (*)(...))QStackedLayout::hasHeightForWidth
+272 (int (*)(...))QStackedLayout::heightForWidth
+280 (int (*)(...))-16
+288 (int (*)(...))(& _ZTI14QStackedLayout)
+296 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayoutD1Ev
+304 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayoutD0Ev
+312 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout8sizeHintEv
+320 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout11minimumSizeEv
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+336 (int (*)(...))QLayout::_ZThn16_NK7QLayout19expandingDirectionsEv
+344 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayout11setGeometryERK5QRect
+352 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+368 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout17hasHeightForWidthEv
+376 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout14heightForWidthEi
+384 (int (*)(...))QLayoutItem::minimumHeightForWidth
+392 (int (*)(...))QLayout::_ZThn16_N7QLayout10invalidateEv
+400 (int (*)(...))QLayoutItem::widget
+408 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+416 (int (*)(...))QLayoutItem::spacerItem
+424 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QStackedLayout
+ size=32 align=8
+ base size=28 base align=8
+QStackedLayout (0x0x7f5f566bc410) 0
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 16)
+ QLayout (0x0x7f5f566ace70) 0
+ primary-for QStackedLayout (0x0x7f5f566bc410)
+ QObject (0x0x7f5f56328060) 0
+ primary-for QLayout (0x0x7f5f566ace70)
+ QLayoutItem (0x0x7f5f563280c0) 16
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 296)
+
+Class QStackedWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedWidget::QPrivateSignal (0x0x7f5f56328420) 0 empty
+
+Vtable for QStackedWidget
+QStackedWidget::_ZTV14QStackedWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QStackedWidget)
+16 (int (*)(...))QStackedWidget::metaObject
+24 (int (*)(...))QStackedWidget::qt_metacast
+32 (int (*)(...))QStackedWidget::qt_metacall
+40 (int (*)(...))QStackedWidget::~QStackedWidget
+48 (int (*)(...))QStackedWidget::~QStackedWidget
+56 (int (*)(...))QStackedWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI14QStackedWidget)
+456 (int (*)(...))QStackedWidget::_ZThn16_N14QStackedWidgetD1Ev
+464 (int (*)(...))QStackedWidget::_ZThn16_N14QStackedWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QStackedWidget
+ size=40 align=8
+ base size=40 base align=8
+QStackedWidget (0x0x7f5f566bc478) 0
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 16)
+ QFrame (0x0x7f5f566bc4e0) 0
+ primary-for QStackedWidget (0x0x7f5f566bc478)
+ QWidget (0x0x7f5f566ac5b0) 0
+ primary-for QFrame (0x0x7f5f566bc4e0)
+ QObject (0x0x7f5f56328360) 0
+ primary-for QWidget (0x0x7f5f566ac5b0)
+ QPaintDevice (0x0x7f5f563283c0) 16
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 456)
+
+Class QStatusBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStatusBar::QPrivateSignal (0x0x7f5f56328660) 0 empty
+
+Vtable for QStatusBar
+QStatusBar::_ZTV10QStatusBar: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QStatusBar)
+16 (int (*)(...))QStatusBar::metaObject
+24 (int (*)(...))QStatusBar::qt_metacast
+32 (int (*)(...))QStatusBar::qt_metacall
+40 (int (*)(...))QStatusBar::~QStatusBar
+48 (int (*)(...))QStatusBar::~QStatusBar
+56 (int (*)(...))QStatusBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QStatusBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QStatusBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QStatusBar::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI10QStatusBar)
+448 (int (*)(...))QStatusBar::_ZThn16_N10QStatusBarD1Ev
+456 (int (*)(...))QStatusBar::_ZThn16_N10QStatusBarD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QStatusBar
+ size=40 align=8
+ base size=40 base align=8
+QStatusBar (0x0x7f5f566bc548) 0
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 16)
+ QWidget (0x0x7f5f566ac690) 0
+ primary-for QStatusBar (0x0x7f5f566bc548)
+ QObject (0x0x7f5f563285a0) 0
+ primary-for QWidget (0x0x7f5f566ac690)
+ QPaintDevice (0x0x7f5f56328600) 16
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 448)
+
+Class QStyledItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyledItemDelegate::QPrivateSignal (0x0x7f5f56328840) 0 empty
+
+Vtable for QStyledItemDelegate
+QStyledItemDelegate::_ZTV19QStyledItemDelegate: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QStyledItemDelegate)
+16 (int (*)(...))QStyledItemDelegate::metaObject
+24 (int (*)(...))QStyledItemDelegate::qt_metacast
+32 (int (*)(...))QStyledItemDelegate::qt_metacall
+40 (int (*)(...))QStyledItemDelegate::~QStyledItemDelegate
+48 (int (*)(...))QStyledItemDelegate::~QStyledItemDelegate
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QStyledItemDelegate::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStyledItemDelegate::paint
+120 (int (*)(...))QStyledItemDelegate::sizeHint
+128 (int (*)(...))QStyledItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QStyledItemDelegate::setEditorData
+152 (int (*)(...))QStyledItemDelegate::setModelData
+160 (int (*)(...))QStyledItemDelegate::updateEditorGeometry
+168 (int (*)(...))QStyledItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+192 (int (*)(...))QStyledItemDelegate::displayText
+200 (int (*)(...))QStyledItemDelegate::initStyleOption
+
+Class QStyledItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QStyledItemDelegate (0x0x7f5f566bc5b0) 0
+ vptr=((& QStyledItemDelegate::_ZTV19QStyledItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7f5f566bc618) 0
+ primary-for QStyledItemDelegate (0x0x7f5f566bc5b0)
+ QObject (0x0x7f5f563287e0) 0
+ primary-for QAbstractItemDelegate (0x0x7f5f566bc618)
+
+Class QStyleFactory
+ size=1 align=1
+ base size=0 base align=1
+QStyleFactory (0x0x7f5f563289c0) 0 empty
+
+Class QStylePainter
+ size=24 align=8
+ base size=24 base align=8
+QStylePainter (0x0x7f5f566bc680) 0
+ QPainter (0x0x7f5f56328a20) 0
+
+Class QStylePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStylePlugin::QPrivateSignal (0x0x7f5f56373300) 0 empty
+
+Vtable for QStylePlugin
+QStylePlugin::_ZTV12QStylePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QStylePlugin)
+16 (int (*)(...))QStylePlugin::metaObject
+24 (int (*)(...))QStylePlugin::qt_metacast
+32 (int (*)(...))QStylePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QStylePlugin
+ size=16 align=8
+ base size=16 base align=8
+QStylePlugin (0x0x7f5f566bc6e8) 0
+ vptr=((& QStylePlugin::_ZTV12QStylePlugin) + 16)
+ QObject (0x0x7f5f563732a0) 0
+ primary-for QStylePlugin (0x0x7f5f566bc6e8)
+
+Class QSystemTrayIcon::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSystemTrayIcon::QPrivateSignal (0x0x7f5f56373420) 0 empty
+
+Vtable for QSystemTrayIcon
+QSystemTrayIcon::_ZTV15QSystemTrayIcon: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSystemTrayIcon)
+16 (int (*)(...))QSystemTrayIcon::metaObject
+24 (int (*)(...))QSystemTrayIcon::qt_metacast
+32 (int (*)(...))QSystemTrayIcon::qt_metacall
+40 (int (*)(...))QSystemTrayIcon::~QSystemTrayIcon
+48 (int (*)(...))QSystemTrayIcon::~QSystemTrayIcon
+56 (int (*)(...))QSystemTrayIcon::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSystemTrayIcon
+ size=16 align=8
+ base size=16 base align=8
+QSystemTrayIcon (0x0x7f5f566bc750) 0
+ vptr=((& QSystemTrayIcon::_ZTV15QSystemTrayIcon) + 16)
+ QObject (0x0x7f5f563733c0) 0
+ primary-for QSystemTrayIcon (0x0x7f5f566bc750)
+
+Class QTableView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableView::QPrivateSignal (0x0x7f5f56373720) 0 empty
+
+Vtable for QTableView
+QTableView::_ZTV10QTableView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTableView)
+16 (int (*)(...))QTableView::metaObject
+24 (int (*)(...))QTableView::qt_metacast
+32 (int (*)(...))QTableView::qt_metacall
+40 (int (*)(...))QTableView::~QTableView
+48 (int (*)(...))QTableView::~QTableView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTableView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTableView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QTableView::scrollContentsBy
+464 (int (*)(...))QTableView::viewportSizeHint
+472 (int (*)(...))QTableView::setModel
+480 (int (*)(...))QTableView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QTableView::visualRect
+504 (int (*)(...))QTableView::scrollTo
+512 (int (*)(...))QTableView::indexAt
+520 (int (*)(...))QTableView::sizeHintForRow
+528 (int (*)(...))QTableView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QTableView::setRootIndex
+560 (int (*)(...))QTableView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QTableView::selectionChanged
+608 (int (*)(...))QTableView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTableView::updateGeometries
+640 (int (*)(...))QTableView::verticalScrollbarAction
+648 (int (*)(...))QTableView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTableView::moveCursor
+704 (int (*)(...))QTableView::horizontalOffset
+712 (int (*)(...))QTableView::verticalOffset
+720 (int (*)(...))QTableView::isIndexHidden
+728 (int (*)(...))QTableView::setSelection
+736 (int (*)(...))QTableView::visualRegionForSelection
+744 (int (*)(...))QTableView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QTableView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI10QTableView)
+800 (int (*)(...))QTableView::_ZThn16_N10QTableViewD1Ev
+808 (int (*)(...))QTableView::_ZThn16_N10QTableViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTableView
+ size=40 align=8
+ base size=40 base align=8
+QTableView (0x0x7f5f566bc7b8) 0
+ vptr=((& QTableView::_ZTV10QTableView) + 16)
+ QAbstractItemView (0x0x7f5f566bc820) 0
+ primary-for QTableView (0x0x7f5f566bc7b8)
+ QAbstractScrollArea (0x0x7f5f566bc888) 0
+ primary-for QAbstractItemView (0x0x7f5f566bc820)
+ QFrame (0x0x7f5f566bc8f0) 0
+ primary-for QAbstractScrollArea (0x0x7f5f566bc888)
+ QWidget (0x0x7f5f5637a4d0) 0
+ primary-for QFrame (0x0x7f5f566bc8f0)
+ QObject (0x0x7f5f56373660) 0
+ primary-for QWidget (0x0x7f5f5637a4d0)
+ QPaintDevice (0x0x7f5f563736c0) 16
+ vptr=((& QTableView::_ZTV10QTableView) + 800)
+
+Class QTableWidgetSelectionRange
+ size=16 align=4
+ base size=16 base align=4
+QTableWidgetSelectionRange (0x0x7f5f563738a0) 0
+
+Vtable for QTableWidgetItem
+QTableWidgetItem::_ZTV16QTableWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QTableWidgetItem)
+16 (int (*)(...))QTableWidgetItem::~QTableWidgetItem
+24 (int (*)(...))QTableWidgetItem::~QTableWidgetItem
+32 (int (*)(...))QTableWidgetItem::clone
+40 (int (*)(...))QTableWidgetItem::data
+48 (int (*)(...))QTableWidgetItem::setData
+56 (int (*)(...))QTableWidgetItem::operator<
+64 (int (*)(...))QTableWidgetItem::read
+72 (int (*)(...))QTableWidgetItem::write
+
+Class QTableWidgetItem
+ size=64 align=8
+ base size=60 base align=8
+QTableWidgetItem (0x0x7f5f56373cc0) 0
+ vptr=((& QTableWidgetItem::_ZTV16QTableWidgetItem) + 16)
+
+Class QTableWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableWidget::QPrivateSignal (0x0x7f5f5642e000) 0 empty
+
+Vtable for QTableWidget
+QTableWidget::_ZTV12QTableWidget: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTableWidget)
+16 (int (*)(...))QTableWidget::metaObject
+24 (int (*)(...))QTableWidget::qt_metacast
+32 (int (*)(...))QTableWidget::qt_metacall
+40 (int (*)(...))QTableWidget::~QTableWidget
+48 (int (*)(...))QTableWidget::~QTableWidget
+56 (int (*)(...))QTableWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTableView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTableView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QTableWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QTableView::scrollContentsBy
+464 (int (*)(...))QTableView::viewportSizeHint
+472 (int (*)(...))QTableWidget::setModel
+480 (int (*)(...))QTableView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QTableView::visualRect
+504 (int (*)(...))QTableView::scrollTo
+512 (int (*)(...))QTableView::indexAt
+520 (int (*)(...))QTableView::sizeHintForRow
+528 (int (*)(...))QTableView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QTableView::setRootIndex
+560 (int (*)(...))QTableView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QTableView::selectionChanged
+608 (int (*)(...))QTableView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTableView::updateGeometries
+640 (int (*)(...))QTableView::verticalScrollbarAction
+648 (int (*)(...))QTableView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTableView::moveCursor
+704 (int (*)(...))QTableView::horizontalOffset
+712 (int (*)(...))QTableView::verticalOffset
+720 (int (*)(...))QTableView::isIndexHidden
+728 (int (*)(...))QTableView::setSelection
+736 (int (*)(...))QTableView::visualRegionForSelection
+744 (int (*)(...))QTableView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QTableView::initViewItemOption
+784 (int (*)(...))QTableWidget::mimeTypes
+792 (int (*)(...))QTableWidget::mimeData
+800 (int (*)(...))QTableWidget::dropMimeData
+808 (int (*)(...))QTableWidget::supportedDropActions
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI12QTableWidget)
+832 (int (*)(...))QTableWidget::_ZThn16_N12QTableWidgetD1Ev
+840 (int (*)(...))QTableWidget::_ZThn16_N12QTableWidgetD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTableWidget
+ size=40 align=8
+ base size=40 base align=8
+QTableWidget (0x0x7f5f563ca208) 0
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 16)
+ QTableView (0x0x7f5f563ca270) 0
+ primary-for QTableWidget (0x0x7f5f563ca208)
+ QAbstractItemView (0x0x7f5f563ca2d8) 0
+ primary-for QTableView (0x0x7f5f563ca270)
+ QAbstractScrollArea (0x0x7f5f563ca340) 0
+ primary-for QAbstractItemView (0x0x7f5f563ca2d8)
+ QFrame (0x0x7f5f563ca3a8) 0
+ primary-for QAbstractScrollArea (0x0x7f5f563ca340)
+ QWidget (0x0x7f5f568407e0) 0
+ primary-for QFrame (0x0x7f5f563ca3a8)
+ QObject (0x0x7f5f563c4f60) 0
+ primary-for QWidget (0x0x7f5f568407e0)
+ QPaintDevice (0x0x7f5f563c4540) 16
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 832)
+
+Class QTextBrowser::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBrowser::QPrivateSignal (0x0x7f5f5642e3c0) 0 empty
+
+Vtable for QTextBrowser
+QTextBrowser::_ZTV12QTextBrowser: 79 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTextBrowser)
+16 (int (*)(...))QTextBrowser::metaObject
+24 (int (*)(...))QTextBrowser::qt_metacast
+32 (int (*)(...))QTextBrowser::qt_metacall
+40 (int (*)(...))QTextBrowser::~QTextBrowser
+48 (int (*)(...))QTextBrowser::~QTextBrowser
+56 (int (*)(...))QTextBrowser::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTextBrowser::mousePressEvent
+176 (int (*)(...))QTextBrowser::mouseReleaseEvent
+184 (int (*)(...))QTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QTextBrowser::mouseMoveEvent
+200 (int (*)(...))QTextEdit::wheelEvent
+208 (int (*)(...))QTextBrowser::keyPressEvent
+216 (int (*)(...))QTextEdit::keyReleaseEvent
+224 (int (*)(...))QTextEdit::focusInEvent
+232 (int (*)(...))QTextBrowser::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTextBrowser::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QTextEdit::dragEnterEvent
+320 (int (*)(...))QTextEdit::dragMoveEvent
+328 (int (*)(...))QTextEdit::dragLeaveEvent
+336 (int (*)(...))QTextEdit::dropEvent
+344 (int (*)(...))QTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QTextEdit::inputMethodEvent
+416 (int (*)(...))QTextEdit::inputMethodQuery
+424 (int (*)(...))QTextBrowser::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QTextBrowser::loadResource
+480 (int (*)(...))QTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QTextEdit::canInsertFromMimeData
+496 (int (*)(...))QTextEdit::insertFromMimeData
+504 (int (*)(...))QTextEdit::doSetTextCursor
+512 (int (*)(...))QTextBrowser::backward
+520 (int (*)(...))QTextBrowser::forward
+528 (int (*)(...))QTextBrowser::home
+536 (int (*)(...))QTextBrowser::reload
+544 (int (*)(...))QTextBrowser::doSetSource
+552 (int (*)(...))-16
+560 (int (*)(...))(& _ZTI12QTextBrowser)
+568 (int (*)(...))QTextBrowser::_ZThn16_N12QTextBrowserD1Ev
+576 (int (*)(...))QTextBrowser::_ZThn16_N12QTextBrowserD0Ev
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+592 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+600 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+608 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+616 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+624 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTextBrowser
+ size=40 align=8
+ base size=40 base align=8
+QTextBrowser (0x0x7f5f563ca410) 0
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 16)
+ QTextEdit (0x0x7f5f563ca478) 0
+ primary-for QTextBrowser (0x0x7f5f563ca410)
+ QAbstractScrollArea (0x0x7f5f563ca4e0) 0
+ primary-for QTextEdit (0x0x7f5f563ca478)
+ QFrame (0x0x7f5f563ca548) 0
+ primary-for QAbstractScrollArea (0x0x7f5f563ca4e0)
+ QWidget (0x0x7f5f5637a700) 0
+ primary-for QFrame (0x0x7f5f563ca548)
+ QObject (0x0x7f5f5642e300) 0
+ primary-for QWidget (0x0x7f5f5637a700)
+ QPaintDevice (0x0x7f5f5642e360) 16
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 568)
+
+Class QToolBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBar::QPrivateSignal (0x0x7f5f5642e600) 0 empty
+
+Vtable for QToolBar
+QToolBar::_ZTV8QToolBar: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QToolBar)
+16 (int (*)(...))QToolBar::metaObject
+24 (int (*)(...))QToolBar::qt_metacast
+32 (int (*)(...))QToolBar::qt_metacall
+40 (int (*)(...))QToolBar::~QToolBar
+48 (int (*)(...))QToolBar::~QToolBar
+56 (int (*)(...))QToolBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QToolBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QToolBar::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QToolBar::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI8QToolBar)
+456 (int (*)(...))QToolBar::_ZThn16_N8QToolBarD1Ev
+464 (int (*)(...))QToolBar::_ZThn16_N8QToolBarD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolBar
+ size=40 align=8
+ base size=40 base align=8
+QToolBar (0x0x7f5f563ca5b0) 0
+ vptr=((& QToolBar::_ZTV8QToolBar) + 16)
+ QWidget (0x0x7f5f5637a770) 0
+ primary-for QToolBar (0x0x7f5f563ca5b0)
+ QObject (0x0x7f5f5642e540) 0
+ primary-for QWidget (0x0x7f5f5637a770)
+ QPaintDevice (0x0x7f5f5642e5a0) 16
+ vptr=((& QToolBar::_ZTV8QToolBar) + 456)
+
+Class QToolBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBox::QPrivateSignal (0x0x7f5f5642ea80) 0 empty
+
+Vtable for QToolBox
+QToolBox::_ZTV8QToolBox: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QToolBox)
+16 (int (*)(...))QToolBox::metaObject
+24 (int (*)(...))QToolBox::qt_metacast
+32 (int (*)(...))QToolBox::qt_metacall
+40 (int (*)(...))QToolBox::~QToolBox
+48 (int (*)(...))QToolBox::~QToolBox
+56 (int (*)(...))QToolBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QToolBox::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QToolBox::itemInserted
+448 (int (*)(...))QToolBox::itemRemoved
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI8QToolBox)
+472 (int (*)(...))QToolBox::_ZThn16_N8QToolBoxD1Ev
+480 (int (*)(...))QToolBox::_ZThn16_N8QToolBoxD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolBox
+ size=40 align=8
+ base size=40 base align=8
+QToolBox (0x0x7f5f563ca618) 0
+ vptr=((& QToolBox::_ZTV8QToolBox) + 16)
+ QFrame (0x0x7f5f563ca680) 0
+ primary-for QToolBox (0x0x7f5f563ca618)
+ QWidget (0x0x7f5f5637a7e0) 0
+ primary-for QFrame (0x0x7f5f563ca680)
+ QObject (0x0x7f5f5642e9c0) 0
+ primary-for QWidget (0x0x7f5f5637a7e0)
+ QPaintDevice (0x0x7f5f5642ea20) 16
+ vptr=((& QToolBox::_ZTV8QToolBox) + 472)
+
+Class QToolButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolButton::QPrivateSignal (0x0x7f5f5642ede0) 0 empty
+
+Vtable for QToolButton
+QToolButton::_ZTV11QToolButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QToolButton)
+16 (int (*)(...))QToolButton::metaObject
+24 (int (*)(...))QToolButton::qt_metacast
+32 (int (*)(...))QToolButton::qt_metacall
+40 (int (*)(...))QToolButton::~QToolButton
+48 (int (*)(...))QToolButton::~QToolButton
+56 (int (*)(...))QToolButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QToolButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QToolButton::sizeHint
+136 (int (*)(...))QToolButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QToolButton::mousePressEvent
+176 (int (*)(...))QToolButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QToolButton::enterEvent
+248 (int (*)(...))QToolButton::leaveEvent
+256 (int (*)(...))QToolButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QToolButton::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QToolButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QToolButton::nextCheckState
+456 (int (*)(...))QToolButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI11QToolButton)
+480 (int (*)(...))QToolButton::_ZThn16_N11QToolButtonD1Ev
+488 (int (*)(...))QToolButton::_ZThn16_N11QToolButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolButton
+ size=40 align=8
+ base size=40 base align=8
+QToolButton (0x0x7f5f563ca6e8) 0
+ vptr=((& QToolButton::_ZTV11QToolButton) + 16)
+ QAbstractButton (0x0x7f5f563ca750) 0
+ primary-for QToolButton (0x0x7f5f563ca6e8)
+ QWidget (0x0x7f5f5637a850) 0
+ primary-for QAbstractButton (0x0x7f5f563ca750)
+ QObject (0x0x7f5f5642ed20) 0
+ primary-for QWidget (0x0x7f5f5637a850)
+ QPaintDevice (0x0x7f5f5642ed80) 16
+ vptr=((& QToolButton::_ZTV11QToolButton) + 480)
+
+Class QToolTip
+ size=1 align=1
+ base size=0 base align=1
+QToolTip (0x0x7f5f564a2060) 0 empty
+
+Class QTreeView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeView::QPrivateSignal (0x0x7f5f564a21e0) 0 empty
+
+Vtable for QTreeView
+QTreeView::_ZTV9QTreeView: 110 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTreeView)
+16 (int (*)(...))QTreeView::metaObject
+24 (int (*)(...))QTreeView::qt_metacast
+32 (int (*)(...))QTreeView::qt_metacall
+40 (int (*)(...))QTreeView::~QTreeView
+48 (int (*)(...))QTreeView::~QTreeView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeView::setModel
+480 (int (*)(...))QTreeView::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))-16
+808 (int (*)(...))(& _ZTI9QTreeView)
+816 (int (*)(...))QTreeView::_ZThn16_N9QTreeViewD1Ev
+824 (int (*)(...))QTreeView::_ZThn16_N9QTreeViewD0Ev
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTreeView
+ size=40 align=8
+ base size=40 base align=8
+QTreeView (0x0x7f5f563ca7b8) 0
+ vptr=((& QTreeView::_ZTV9QTreeView) + 16)
+ QAbstractItemView (0x0x7f5f563ca820) 0
+ primary-for QTreeView (0x0x7f5f563ca7b8)
+ QAbstractScrollArea (0x0x7f5f563ca888) 0
+ primary-for QAbstractItemView (0x0x7f5f563ca820)
+ QFrame (0x0x7f5f563ca8f0) 0
+ primary-for QAbstractScrollArea (0x0x7f5f563ca888)
+ QWidget (0x0x7f5f5637aa10) 0
+ primary-for QFrame (0x0x7f5f563ca8f0)
+ QObject (0x0x7f5f564a2120) 0
+ primary-for QWidget (0x0x7f5f5637aa10)
+ QPaintDevice (0x0x7f5f564a2180) 16
+ vptr=((& QTreeView::_ZTV9QTreeView) + 816)
+
+Class QTreeWidgetItemIterator
+ size=24 align=8
+ base size=20 base align=8
+QTreeWidgetItemIterator (0x0x7f5f564a2360) 0
+
+Vtable for QTreeWidgetItem
+QTreeWidgetItem::_ZTV15QTreeWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QTreeWidgetItem)
+16 (int (*)(...))QTreeWidgetItem::~QTreeWidgetItem
+24 (int (*)(...))QTreeWidgetItem::~QTreeWidgetItem
+32 (int (*)(...))QTreeWidgetItem::clone
+40 (int (*)(...))QTreeWidgetItem::data
+48 (int (*)(...))QTreeWidgetItem::setData
+56 (int (*)(...))QTreeWidgetItem::operator<
+64 (int (*)(...))QTreeWidgetItem::read
+72 (int (*)(...))QTreeWidgetItem::write
+
+Class QTreeWidgetItem
+ size=96 align=8
+ base size=92 base align=8
+QTreeWidgetItem (0x0x7f5f564a2a20) 0
+ vptr=((& QTreeWidgetItem::_ZTV15QTreeWidgetItem) + 16)
+
+Class QTreeWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeWidget::QPrivateSignal (0x0x7f5f561d6840) 0 empty
+
+Vtable for QTreeWidget
+QTreeWidget::_ZTV11QTreeWidget: 114 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTreeWidget)
+16 (int (*)(...))QTreeWidget::metaObject
+24 (int (*)(...))QTreeWidget::qt_metacast
+32 (int (*)(...))QTreeWidget::qt_metacall
+40 (int (*)(...))QTreeWidget::~QTreeWidget
+48 (int (*)(...))QTreeWidget::~QTreeWidget
+56 (int (*)(...))QTreeWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QTreeWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeWidget::setModel
+480 (int (*)(...))QTreeWidget::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))QTreeWidget::mimeTypes
+808 (int (*)(...))QTreeWidget::mimeData
+816 (int (*)(...))QTreeWidget::dropMimeData
+824 (int (*)(...))QTreeWidget::supportedDropActions
+832 (int (*)(...))-16
+840 (int (*)(...))(& _ZTI11QTreeWidget)
+848 (int (*)(...))QTreeWidget::_ZThn16_N11QTreeWidgetD1Ev
+856 (int (*)(...))QTreeWidget::_ZThn16_N11QTreeWidgetD0Ev
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+896 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+904 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTreeWidget
+ size=40 align=8
+ base size=40 base align=8
+QTreeWidget (0x0x7f5f5612bc30) 0
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 16)
+ QTreeView (0x0x7f5f5612bc98) 0
+ primary-for QTreeWidget (0x0x7f5f5612bc30)
+ QAbstractItemView (0x0x7f5f5612bd00) 0
+ primary-for QTreeView (0x0x7f5f5612bc98)
+ QAbstractScrollArea (0x0x7f5f5612bd68) 0
+ primary-for QAbstractItemView (0x0x7f5f5612bd00)
+ QFrame (0x0x7f5f5612bdd0) 0
+ primary-for QAbstractScrollArea (0x0x7f5f5612bd68)
+ QWidget (0x0x7f5f564c67e0) 0
+ primary-for QFrame (0x0x7f5f5612bdd0)
+ QObject (0x0x7f5f561d6780) 0
+ primary-for QWidget (0x0x7f5f564c67e0)
+ QPaintDevice (0x0x7f5f561d67e0) 16
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 848)
+
+Class QUndoView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoView::QPrivateSignal (0x0x7f5f561d6c60) 0 empty
+
+Vtable for QUndoView
+QUndoView::_ZTV9QUndoView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QUndoView)
+16 (int (*)(...))QUndoView::metaObject
+24 (int (*)(...))QUndoView::qt_metacast
+32 (int (*)(...))QUndoView::qt_metacall
+40 (int (*)(...))QUndoView::~QUndoView
+48 (int (*)(...))QUndoView::~QUndoView
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI9QUndoView)
+800 (int (*)(...))QUndoView::_ZThn16_N9QUndoViewD1Ev
+808 (int (*)(...))QUndoView::_ZThn16_N9QUndoViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QUndoView
+ size=40 align=8
+ base size=40 base align=8
+QUndoView (0x0x7f5f5612be38) 0
+ vptr=((& QUndoView::_ZTV9QUndoView) + 16)
+ QListView (0x0x7f5f5612bea0) 0
+ primary-for QUndoView (0x0x7f5f5612be38)
+ QAbstractItemView (0x0x7f5f5612bf08) 0
+ primary-for QListView (0x0x7f5f5612bea0)
+ QAbstractScrollArea (0x0x7f5f5612bf70) 0
+ primary-for QAbstractItemView (0x0x7f5f5612bf08)
+ QFrame (0x0x7f5f5612b340) 0
+ primary-for QAbstractScrollArea (0x0x7f5f5612bf70)
+ QWidget (0x0x7f5f564c6850) 0
+ primary-for QFrame (0x0x7f5f5612b340)
+ QObject (0x0x7f5f561d6ba0) 0
+ primary-for QWidget (0x0x7f5f564c6850)
+ QPaintDevice (0x0x7f5f561d6c00) 16
+ vptr=((& QUndoView::_ZTV9QUndoView) + 800)
+
+Class QWhatsThis
+ size=1 align=1
+ base size=0 base align=1
+QWhatsThis (0x0x7f5f561d6de0) 0 empty
+
+Class QWidgetAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidgetAction::QPrivateSignal (0x0x7f5f561d6ea0) 0 empty
+
+Vtable for QWidgetAction
+QWidgetAction::_ZTV13QWidgetAction: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QWidgetAction)
+16 (int (*)(...))QWidgetAction::metaObject
+24 (int (*)(...))QWidgetAction::qt_metacast
+32 (int (*)(...))QWidgetAction::qt_metacall
+40 (int (*)(...))QWidgetAction::~QWidgetAction
+48 (int (*)(...))QWidgetAction::~QWidgetAction
+56 (int (*)(...))QWidgetAction::event
+64 (int (*)(...))QWidgetAction::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidgetAction::createWidget
+120 (int (*)(...))QWidgetAction::deleteWidget
+
+Class QWidgetAction
+ size=16 align=8
+ base size=16 base align=8
+QWidgetAction (0x0x7f5f5612bbc8) 0
+ vptr=((& QWidgetAction::_ZTV13QWidgetAction) + 16)
+ QAction (0x0x7f5f5621c000) 0
+ primary-for QWidgetAction (0x0x7f5f5612bbc8)
+ QObject (0x0x7f5f561d6e40) 0
+ primary-for QAction (0x0x7f5f5621c000)
+
+Class QWizard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizard::QPrivateSignal (0x0x7f5f56224120) 0 empty
+
+Vtable for QWizard
+QWizard::_ZTV7QWizard: 73 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWizard)
+16 (int (*)(...))QWizard::metaObject
+24 (int (*)(...))QWizard::qt_metacast
+32 (int (*)(...))QWizard::qt_metacall
+40 (int (*)(...))QWizard::~QWizard
+48 (int (*)(...))QWizard::~QWizard
+56 (int (*)(...))QWizard::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWizard::setVisible
+128 (int (*)(...))QWizard::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWizard::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWizard::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QWizard::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))QWizard::validateCurrentPage
+480 (int (*)(...))QWizard::nextId
+488 (int (*)(...))QWizard::initializePage
+496 (int (*)(...))QWizard::cleanupPage
+504 (int (*)(...))-16
+512 (int (*)(...))(& _ZTI7QWizard)
+520 (int (*)(...))QWizard::_ZThn16_N7QWizardD1Ev
+528 (int (*)(...))QWizard::_ZThn16_N7QWizardD0Ev
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWizard
+ size=40 align=8
+ base size=40 base align=8
+QWizard (0x0x7f5f5621c068) 0
+ vptr=((& QWizard::_ZTV7QWizard) + 16)
+ QDialog (0x0x7f5f5621c0d0) 0
+ primary-for QWizard (0x0x7f5f5621c068)
+ QWidget (0x0x7f5f564c68c0) 0
+ primary-for QDialog (0x0x7f5f5621c0d0)
+ QObject (0x0x7f5f56224060) 0
+ primary-for QWidget (0x0x7f5f564c68c0)
+ QPaintDevice (0x0x7f5f562240c0) 16
+ vptr=((& QWizard::_ZTV7QWizard) + 520)
+
+Class QWizardPage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizardPage::QPrivateSignal (0x0x7f5f562248a0) 0 empty
+
+Vtable for QWizardPage
+QWizardPage::_ZTV11QWizardPage: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWizardPage)
+16 (int (*)(...))QWizardPage::metaObject
+24 (int (*)(...))QWizardPage::qt_metacast
+32 (int (*)(...))QWizardPage::qt_metacall
+40 (int (*)(...))QWizardPage::~QWizardPage
+48 (int (*)(...))QWizardPage::~QWizardPage
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QWizardPage::initializePage
+440 (int (*)(...))QWizardPage::cleanupPage
+448 (int (*)(...))QWizardPage::validatePage
+456 (int (*)(...))QWizardPage::isComplete
+464 (int (*)(...))QWizardPage::nextId
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QWizardPage)
+488 (int (*)(...))QWizardPage::_ZThn16_N11QWizardPageD1Ev
+496 (int (*)(...))QWizardPage::_ZThn16_N11QWizardPageD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWizardPage
+ size=40 align=8
+ base size=40 base align=8
+QWizardPage (0x0x7f5f5621c270) 0
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 16)
+ QWidget (0x0x7f5f5622ba80) 0
+ primary-for QWizardPage (0x0x7f5f5621c270)
+ QObject (0x0x7f5f562247e0) 0
+ primary-for QWidget (0x0x7f5f5622ba80)
+ QPaintDevice (0x0x7f5f56224840) 16
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 488)
+
+Class QHelpGlobal
+ size=1 align=1
+ base size=0 base align=1
+QHelpGlobal (0x0x7f5f56224a20) 0 empty
+
+Class QCompressedHelpInfo
+ size=8 align=8
+ base size=8 base align=8
+QCompressedHelpInfo (0x0x7f5f56224a80) 0
+
+Class QHelpContentItem
+ size=8 align=8
+ base size=8 base align=8
+QHelpContentItem (0x0x7f5f56224ba0) 0
+
+Class QHelpContentModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentModel::QPrivateSignal (0x0x7f5f56224c60) 0 empty
+
+Vtable for QHelpContentModel
+QHelpContentModel::_ZTV17QHelpContentModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QHelpContentModel)
+16 (int (*)(...))QHelpContentModel::metaObject
+24 (int (*)(...))QHelpContentModel::qt_metacast
+32 (int (*)(...))QHelpContentModel::qt_metacall
+40 (int (*)(...))QHelpContentModel::~QHelpContentModel
+48 (int (*)(...))QHelpContentModel::~QHelpContentModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QHelpContentModel::index
+120 (int (*)(...))QHelpContentModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QHelpContentModel::rowCount
+144 (int (*)(...))QHelpContentModel::columnCount
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))QHelpContentModel::data
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractItemModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractItemModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QHelpContentModel
+ size=24 align=8
+ base size=24 base align=8
+QHelpContentModel (0x0x7f5f5621c2d8) 0
+ vptr=((& QHelpContentModel::_ZTV17QHelpContentModel) + 16)
+ QAbstractItemModel (0x0x7f5f5621c340) 0
+ primary-for QHelpContentModel (0x0x7f5f5621c2d8)
+ QObject (0x0x7f5f56224c00) 0
+ primary-for QAbstractItemModel (0x0x7f5f5621c340)
+
+Class QHelpContentWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentWidget::QPrivateSignal (0x0x7f5f56224de0) 0 empty
+
+Vtable for QHelpContentWidget
+QHelpContentWidget::_ZTV18QHelpContentWidget: 110 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QHelpContentWidget)
+16 (int (*)(...))QHelpContentWidget::metaObject
+24 (int (*)(...))QHelpContentWidget::qt_metacast
+32 (int (*)(...))QHelpContentWidget::qt_metacall
+40 (int (*)(...))QHelpContentWidget::~QHelpContentWidget
+48 (int (*)(...))QHelpContentWidget::~QHelpContentWidget
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeView::setModel
+480 (int (*)(...))QTreeView::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))-16
+808 (int (*)(...))(& _ZTI18QHelpContentWidget)
+816 (int (*)(...))QHelpContentWidget::_ZThn16_N18QHelpContentWidgetD1Ev
+824 (int (*)(...))QHelpContentWidget::_ZThn16_N18QHelpContentWidgetD0Ev
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHelpContentWidget
+ size=64 align=8
+ base size=64 base align=8
+QHelpContentWidget (0x0x7f5f5621c3a8) 0
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 16)
+ QTreeView (0x0x7f5f5621c410) 0
+ primary-for QHelpContentWidget (0x0x7f5f5621c3a8)
+ QAbstractItemView (0x0x7f5f5621c478) 0
+ primary-for QTreeView (0x0x7f5f5621c410)
+ QAbstractScrollArea (0x0x7f5f5621c4e0) 0
+ primary-for QAbstractItemView (0x0x7f5f5621c478)
+ QFrame (0x0x7f5f5621c548) 0
+ primary-for QAbstractScrollArea (0x0x7f5f5621c4e0)
+ QWidget (0x0x7f5f5622baf0) 0
+ primary-for QFrame (0x0x7f5f5621c548)
+ QObject (0x0x7f5f56224d20) 0
+ primary-for QWidget (0x0x7f5f5622baf0)
+ QPaintDevice (0x0x7f5f56224d80) 16
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 816)
+
+Class QHelpEngineCore::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngineCore::QPrivateSignal (0x0x7f5f56224f00) 0 empty
+
+Vtable for QHelpEngineCore
+QHelpEngineCore::_ZTV15QHelpEngineCore: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QHelpEngineCore)
+16 (int (*)(...))QHelpEngineCore::metaObject
+24 (int (*)(...))QHelpEngineCore::qt_metacast
+32 (int (*)(...))QHelpEngineCore::qt_metacall
+40 (int (*)(...))QHelpEngineCore::~QHelpEngineCore
+48 (int (*)(...))QHelpEngineCore::~QHelpEngineCore
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QHelpEngineCore
+ size=24 align=8
+ base size=24 base align=8
+QHelpEngineCore (0x0x7f5f5621c5b0) 0
+ vptr=((& QHelpEngineCore::_ZTV15QHelpEngineCore) + 16)
+ QObject (0x0x7f5f56224ea0) 0
+ primary-for QHelpEngineCore (0x0x7f5f5621c5b0)
+
+Class QHelpEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngine::QPrivateSignal (0x0x7f5f562bd060) 0 empty
+
+Vtable for QHelpEngine
+QHelpEngine::_ZTV11QHelpEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHelpEngine)
+16 (int (*)(...))QHelpEngine::metaObject
+24 (int (*)(...))QHelpEngine::qt_metacast
+32 (int (*)(...))QHelpEngine::qt_metacall
+40 (int (*)(...))QHelpEngine::~QHelpEngine
+48 (int (*)(...))QHelpEngine::~QHelpEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QHelpEngine
+ size=32 align=8
+ base size=32 base align=8
+QHelpEngine (0x0x7f5f5621c618) 0
+ vptr=((& QHelpEngine::_ZTV11QHelpEngine) + 16)
+ QHelpEngineCore (0x0x7f5f5621c680) 0
+ primary-for QHelpEngine (0x0x7f5f5621c618)
+ QObject (0x0x7f5f562bd000) 0
+ primary-for QHelpEngineCore (0x0x7f5f5621c680)
+
+Class QHelpFilterData
+ size=8 align=8
+ base size=8 base align=8
+QHelpFilterData (0x0x7f5f562bd120) 0
+
+Class QHelpFilterEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterEngine::QPrivateSignal (0x0x7f5f562bd2a0) 0 empty
+
+Vtable for QHelpFilterEngine
+QHelpFilterEngine::_ZTV17QHelpFilterEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QHelpFilterEngine)
+16 (int (*)(...))QHelpFilterEngine::metaObject
+24 (int (*)(...))QHelpFilterEngine::qt_metacast
+32 (int (*)(...))QHelpFilterEngine::qt_metacall
+40 (int (*)(...))QHelpFilterEngine::~QHelpFilterEngine
+48 (int (*)(...))QHelpFilterEngine::~QHelpFilterEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QHelpFilterEngine
+ size=24 align=8
+ base size=24 base align=8
+QHelpFilterEngine (0x0x7f5f5621c6e8) 0
+ vptr=((& QHelpFilterEngine::_ZTV17QHelpFilterEngine) + 16)
+ QObject (0x0x7f5f562bd240) 0
+ primary-for QHelpFilterEngine (0x0x7f5f5621c6e8)
+
+Class QHelpFilterSettingsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterSettingsWidget::QPrivateSignal (0x0x7f5f562bd420) 0 empty
+
+Vtable for QHelpFilterSettingsWidget
+QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QHelpFilterSettingsWidget)
+16 (int (*)(...))QHelpFilterSettingsWidget::metaObject
+24 (int (*)(...))QHelpFilterSettingsWidget::qt_metacast
+32 (int (*)(...))QHelpFilterSettingsWidget::qt_metacall
+40 (int (*)(...))QHelpFilterSettingsWidget::~QHelpFilterSettingsWidget
+48 (int (*)(...))QHelpFilterSettingsWidget::~QHelpFilterSettingsWidget
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI25QHelpFilterSettingsWidget)
+448 (int (*)(...))QHelpFilterSettingsWidget::_ZThn16_N25QHelpFilterSettingsWidgetD1Ev
+456 (int (*)(...))QHelpFilterSettingsWidget::_ZThn16_N25QHelpFilterSettingsWidgetD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHelpFilterSettingsWidget
+ size=48 align=8
+ base size=48 base align=8
+QHelpFilterSettingsWidget (0x0x7f5f5621c750) 0
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 16)
+ QWidget (0x0x7f5f5622bb60) 0
+ primary-for QHelpFilterSettingsWidget (0x0x7f5f5621c750)
+ QObject (0x0x7f5f562bd360) 0
+ primary-for QWidget (0x0x7f5f5622bb60)
+ QPaintDevice (0x0x7f5f562bd3c0) 16
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 448)
+
+Class QHelpIndexModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexModel::QPrivateSignal (0x0x7f5f562bd6c0) 0 empty
+
+Vtable for QHelpIndexModel
+QHelpIndexModel::_ZTV15QHelpIndexModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QHelpIndexModel)
+16 (int (*)(...))QHelpIndexModel::metaObject
+24 (int (*)(...))QHelpIndexModel::qt_metacast
+32 (int (*)(...))QHelpIndexModel::qt_metacall
+40 (int (*)(...))QHelpIndexModel::~QHelpIndexModel
+48 (int (*)(...))QHelpIndexModel::~QHelpIndexModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QStringListModel::sibling
+136 (int (*)(...))QStringListModel::rowCount
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))QStringListModel::data
+168 (int (*)(...))QStringListModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QStringListModel::itemData
+200 (int (*)(...))QStringListModel::setItemData
+208 (int (*)(...))QStringListModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QStringListModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStringListModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QStringListModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QStringListModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStringListModel::flags
+336 (int (*)(...))QStringListModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QHelpIndexModel
+ size=48 align=8
+ base size=48 base align=8
+QHelpIndexModel (0x0x7f5f5621c7b8) 0
+ vptr=((& QHelpIndexModel::_ZTV15QHelpIndexModel) + 16)
+ QStringListModel (0x0x7f5f5621c820) 0
+ primary-for QHelpIndexModel (0x0x7f5f5621c7b8)
+ QAbstractListModel (0x0x7f5f5621c888) 0
+ primary-for QStringListModel (0x0x7f5f5621c820)
+ QAbstractItemModel (0x0x7f5f5621c8f0) 0
+ primary-for QAbstractListModel (0x0x7f5f5621c888)
+ QObject (0x0x7f5f562bd660) 0
+ primary-for QAbstractItemModel (0x0x7f5f5621c8f0)
+
+Class QHelpIndexWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexWidget::QPrivateSignal (0x0x7f5f562bd840) 0 empty
+
+Vtable for QHelpIndexWidget
+QHelpIndexWidget::_ZTV16QHelpIndexWidget: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QHelpIndexWidget)
+16 (int (*)(...))QHelpIndexWidget::metaObject
+24 (int (*)(...))QHelpIndexWidget::qt_metacast
+32 (int (*)(...))QHelpIndexWidget::qt_metacall
+40 (int (*)(...))QHelpIndexWidget::~QHelpIndexWidget
+48 (int (*)(...))QHelpIndexWidget::~QHelpIndexWidget
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI16QHelpIndexWidget)
+800 (int (*)(...))QHelpIndexWidget::_ZThn16_N16QHelpIndexWidgetD1Ev
+808 (int (*)(...))QHelpIndexWidget::_ZThn16_N16QHelpIndexWidgetD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHelpIndexWidget
+ size=40 align=8
+ base size=40 base align=8
+QHelpIndexWidget (0x0x7f5f5621c958) 0
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 16)
+ QListView (0x0x7f5f5621c9c0) 0
+ primary-for QHelpIndexWidget (0x0x7f5f5621c958)
+ QAbstractItemView (0x0x7f5f5621ca28) 0
+ primary-for QListView (0x0x7f5f5621c9c0)
+ QAbstractScrollArea (0x0x7f5f5621ca90) 0
+ primary-for QAbstractItemView (0x0x7f5f5621ca28)
+ QFrame (0x0x7f5f5621caf8) 0
+ primary-for QAbstractScrollArea (0x0x7f5f5621ca90)
+ QWidget (0x0x7f5f5622bbd0) 0
+ primary-for QFrame (0x0x7f5f5621caf8)
+ QObject (0x0x7f5f562bd780) 0
+ primary-for QWidget (0x0x7f5f5622bbd0)
+ QPaintDevice (0x0x7f5f562bd7e0) 16
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 800)
+
+Class QHelpLink
+ size=32 align=8
+ base size=32 base align=8
+QHelpLink (0x0x7f5f562bd900) 0
+
+Class QHelpSearchQuery
+ size=32 align=8
+ base size=32 base align=8
+QHelpSearchQuery (0x0x7f5f562bd960) 0
+
+Class QHelpSearchResult
+ size=8 align=8
+ base size=8 base align=8
+QHelpSearchResult (0x0x7f5f5631a2a0) 0
+
+Class QHelpSearchEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchEngine::QPrivateSignal (0x0x7f5f5631a3c0) 0 empty
+
+Vtable for QHelpSearchEngine
+QHelpSearchEngine::_ZTV17QHelpSearchEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QHelpSearchEngine)
+16 (int (*)(...))QHelpSearchEngine::metaObject
+24 (int (*)(...))QHelpSearchEngine::qt_metacast
+32 (int (*)(...))QHelpSearchEngine::qt_metacall
+40 (int (*)(...))QHelpSearchEngine::~QHelpSearchEngine
+48 (int (*)(...))QHelpSearchEngine::~QHelpSearchEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QHelpSearchEngine
+ size=24 align=8
+ base size=24 base align=8
+QHelpSearchEngine (0x0x7f5f5621ce38) 0
+ vptr=((& QHelpSearchEngine::_ZTV17QHelpSearchEngine) + 16)
+ QObject (0x0x7f5f5631a360) 0
+ primary-for QHelpSearchEngine (0x0x7f5f5621ce38)
+
+Class QHelpSearchQueryWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchQueryWidget::QPrivateSignal (0x0x7f5f5631a540) 0 empty
+
+Vtable for QHelpSearchQueryWidget
+QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QHelpSearchQueryWidget)
+16 (int (*)(...))QHelpSearchQueryWidget::metaObject
+24 (int (*)(...))QHelpSearchQueryWidget::qt_metacast
+32 (int (*)(...))QHelpSearchQueryWidget::qt_metacall
+40 (int (*)(...))QHelpSearchQueryWidget::~QHelpSearchQueryWidget
+48 (int (*)(...))QHelpSearchQueryWidget::~QHelpSearchQueryWidget
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QHelpSearchQueryWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QHelpSearchQueryWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI22QHelpSearchQueryWidget)
+448 (int (*)(...))QHelpSearchQueryWidget::_ZThn16_N22QHelpSearchQueryWidgetD1Ev
+456 (int (*)(...))QHelpSearchQueryWidget::_ZThn16_N22QHelpSearchQueryWidgetD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHelpSearchQueryWidget
+ size=48 align=8
+ base size=48 base align=8
+QHelpSearchQueryWidget (0x0x7f5f5621cea0) 0
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 16)
+ QWidget (0x0x7f5f55f3e000) 0
+ primary-for QHelpSearchQueryWidget (0x0x7f5f5621cea0)
+ QObject (0x0x7f5f5631a480) 0
+ primary-for QWidget (0x0x7f5f55f3e000)
+ QPaintDevice (0x0x7f5f5631a4e0) 16
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 448)
+
+Class QHelpSearchResultWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchResultWidget::QPrivateSignal (0x0x7f5f5631a6c0) 0 empty
+
+Vtable for QHelpSearchResultWidget
+QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QHelpSearchResultWidget)
+16 (int (*)(...))QHelpSearchResultWidget::metaObject
+24 (int (*)(...))QHelpSearchResultWidget::qt_metacast
+32 (int (*)(...))QHelpSearchResultWidget::qt_metacall
+40 (int (*)(...))QHelpSearchResultWidget::~QHelpSearchResultWidget
+48 (int (*)(...))QHelpSearchResultWidget::~QHelpSearchResultWidget
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QHelpSearchResultWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI23QHelpSearchResultWidget)
+448 (int (*)(...))QHelpSearchResultWidget::_ZThn16_N23QHelpSearchResultWidgetD1Ev
+456 (int (*)(...))QHelpSearchResultWidget::_ZThn16_N23QHelpSearchResultWidgetD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHelpSearchResultWidget
+ size=48 align=8
+ base size=48 base align=8
+QHelpSearchResultWidget (0x0x7f5f5621cf08) 0
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 16)
+ QWidget (0x0x7f5f55f3e070) 0
+ primary-for QHelpSearchResultWidget (0x0x7f5f5621cf08)
+ QObject (0x0x7f5f5631a600) 0
+ primary-for QWidget (0x0x7f5f55f3e070)
+ QPaintDevice (0x0x7f5f5631a660) 16
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 448)
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f5f55f5ab40) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f5f55f5aea0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f5f55f70120) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f5f55f70480) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f5f55f70660) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f5f55f709c0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f5f55f70b40) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f5f55f70ea0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f5f55f9d060) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f5f55f9d3c0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f5f55f9d5a0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f5f55f9d900) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f5f55f9dae0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f5f55f9de40) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f5f55fc4060) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f5f55fc43c0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f5f55fe7c60) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f5f56005000) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f5f56005180) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f5f560054e0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f5f56005660) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f5f560059c0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f5f56005b40) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f5f56005ea0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f5f5602e060) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f5f5602e3c0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f5f5602e540) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f5f5602e8a0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f5f5602ea20) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f5f5602ed80) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f5f5602ef00) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f5f560562a0) 0 empty
+
diff --git a/tests/auto/bic/data/QtHelp.6.2.0.linux-gcc-amd64.txt b/tests/auto/bic/data/QtHelp.6.2.0.linux-gcc-amd64.txt
new file mode 100644
index 000000000..8cb965c83
--- /dev/null
+++ b/tests/auto/bic/data/QtHelp.6.2.0.linux-gcc-amd64.txt
@@ -0,0 +1,20669 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f25d66fa6c0) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f25d674fea0) 0 empty
+
+Class std::__do_is_nt_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_nt_destructible_impl (0x0x7f25d677d120) 0 empty
+
+Class std::__do_is_implicitly_default_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_implicitly_default_constructible_impl (0x0x7f25d67a9240) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7f25d67d7a20) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f25d6451840) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7f25d6451900) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7f25d6451de0) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7f25d6451e40) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7f25d6451ea0) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7f25d6451f00) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7f25d6451f60) 0 empty
+
+Class std::__result_of_memfun_ref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memfun_ref_impl (0x0x7f25d6484060) 0 empty
+
+Class std::__result_of_memfun_deref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memfun_deref_impl (0x0x7f25d6484120) 0 empty
+
+Class std::__result_of_memobj_ref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memobj_ref_impl (0x0x7f25d64841e0) 0 empty
+
+Class std::__result_of_memobj_deref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memobj_deref_impl (0x0x7f25d64842a0) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f25d6484600) 0 empty
+
+Class std::__swappable_details::__do_is_swappable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_details::__do_is_swappable_impl (0x0x7f25d6484960) 0 empty
+
+Class std::__swappable_details::__do_is_nothrow_swappable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_details::__do_is_nothrow_swappable_impl (0x0x7f25d64849c0) 0 empty
+
+Class std::__swappable_with_details::__do_is_swappable_with_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_with_details::__do_is_swappable_with_impl (0x0x7f25d6484c60) 0 empty
+
+Class std::__swappable_with_details::__do_is_nothrow_swappable_with_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_with_details::__do_is_nothrow_swappable_with_impl (0x0x7f25d6484cc0) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuch (0x0x7f25d64d5540) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f25d651dae0) 0 empty
+
+Class std::__nonesuch_no_braces
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch_no_braces (0x0x7f25d64a1f70) 0 empty
+ std::__nonesuch (0x0x7f25d6556000) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7f25d65a3d20) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f25d65d8060) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f25d65d80c0) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f25d6610de0) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f25d6610e40) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f25d655b4e0) 0 empty
+ std::input_iterator_tag (0x0x7f25d6610ea0) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f25d655b548) 0 empty
+ std::forward_iterator_tag (0x0x7f25d655b5b0) 0 empty
+ std::input_iterator_tag (0x0x7f25d6610f00) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f25d655b618) 0 empty
+ std::bidirectional_iterator_tag (0x0x7f25d655b680) 0 empty
+ std::forward_iterator_tag (0x0x7f25d655b6e8) 0 empty
+ std::input_iterator_tag (0x0x7f25d6610f60) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_iter (0x0x7f25d5ac9c60) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_less_val
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_val (0x0x7f25d5ac9d80) 0 empty
+
+Class __gnu_cxx::__ops::_Val_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Val_less_iter (0x0x7f25d5af20c0) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_equal_to_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_equal_to_iter (0x0x7f25d5af23c0) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_equal_to_val
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_equal_to_val (0x0x7f25d5af24e0) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f25d5b7ecc0) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f25d5bbb000) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f25d5bbb060) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f25d5bbb120) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7f25d5bbb180) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7f25d5bbb1e0) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7f25d5bbb240) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7f25d5bbb2a0) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f25d5bbb540) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f25d5bbb7e0) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f25d5bbb840) 0
+
+Vtable for std::exception
+std::exception::_ZTVSt9exception: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9exception)
+16 (int (*)(...))std::exception::~exception
+24 (int (*)(...))std::exception::~exception
+32 (int (*)(...))std::exception::what
+
+Class std::exception
+ size=8 align=8
+ base size=8 base align=8
+std::exception (0x0x7f25d586e600) 0 nearly-empty
+ vptr=((& std::exception::_ZTVSt9exception) + 16)
+
+Vtable for std::bad_exception
+std::bad_exception::_ZTVSt13bad_exception: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13bad_exception)
+16 (int (*)(...))std::bad_exception::~bad_exception
+24 (int (*)(...))std::bad_exception::~bad_exception
+32 (int (*)(...))std::bad_exception::what
+
+Class std::bad_exception
+ size=8 align=8
+ base size=8 base align=8
+std::bad_exception (0x0x7f25d655ba90) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+ std::exception (0x0x7f25d586e7e0) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f25d655ba90)
+
+Vtable for std::type_info
+std::type_info::_ZTVSt9type_info: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9type_info)
+16 (int (*)(...))std::type_info::~type_info
+24 (int (*)(...))std::type_info::~type_info
+32 (int (*)(...))std::type_info::__is_pointer_p
+40 (int (*)(...))std::type_info::__is_function_p
+48 (int (*)(...))std::type_info::__do_catch
+56 (int (*)(...))std::type_info::__do_upcast
+
+Class std::type_info
+ size=16 align=8
+ base size=16 base align=8
+std::type_info (0x0x7f25d586e9c0) 0
+ vptr=((& std::type_info::_ZTVSt9type_info) + 16)
+
+Vtable for std::bad_cast
+std::bad_cast::_ZTVSt8bad_cast: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt8bad_cast)
+16 (int (*)(...))std::bad_cast::~bad_cast
+24 (int (*)(...))std::bad_cast::~bad_cast
+32 (int (*)(...))std::bad_cast::what
+
+Class std::bad_cast
+ size=8 align=8
+ base size=8 base align=8
+std::bad_cast (0x0x7f25d655baf8) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+ std::exception (0x0x7f25d586ed80) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f25d655baf8)
+
+Vtable for std::bad_typeid
+std::bad_typeid::_ZTVSt10bad_typeid: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt10bad_typeid)
+16 (int (*)(...))std::bad_typeid::~bad_typeid
+24 (int (*)(...))std::bad_typeid::~bad_typeid
+32 (int (*)(...))std::bad_typeid::what
+
+Class std::bad_typeid
+ size=8 align=8
+ base size=8 base align=8
+std::bad_typeid (0x0x7f25d655bb60) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+ std::exception (0x0x7f25d586ef60) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f25d655bb60)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f25d58a5180) 0
+
+Vtable for std::nested_exception
+std::nested_exception::_ZTVSt16nested_exception: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt16nested_exception)
+16 (int (*)(...))std::nested_exception::~nested_exception
+24 (int (*)(...))std::nested_exception::~nested_exception
+
+Class std::nested_exception
+ size=16 align=8
+ base size=16 base align=8
+std::nested_exception (0x0x7f25d58a56c0) 0
+ vptr=((& std::nested_exception::_ZTVSt16nested_exception) + 16)
+
+Vtable for std::bad_alloc
+std::bad_alloc::_ZTVSt9bad_alloc: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9bad_alloc)
+16 (int (*)(...))std::bad_alloc::~bad_alloc
+24 (int (*)(...))std::bad_alloc::~bad_alloc
+32 (int (*)(...))std::bad_alloc::what
+
+Class std::bad_alloc
+ size=8 align=8
+ base size=8 base align=8
+std::bad_alloc (0x0x7f25d655bbc8) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+ std::exception (0x0x7f25d58a5d80) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f25d655bbc8)
+
+Vtable for std::bad_array_new_length
+std::bad_array_new_length::_ZTVSt20bad_array_new_length: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt20bad_array_new_length)
+16 (int (*)(...))std::bad_array_new_length::~bad_array_new_length
+24 (int (*)(...))std::bad_array_new_length::~bad_array_new_length
+32 (int (*)(...))std::bad_array_new_length::what
+
+Class std::bad_array_new_length
+ size=8 align=8
+ base size=8 base align=8
+std::bad_array_new_length (0x0x7f25d655bc30) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+ std::bad_alloc (0x0x7f25d655bc98) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f25d655bc30)
+ std::exception (0x0x7f25d58a5f60) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f25d655bc98)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f25d58dc180) 0 empty
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7f25d58dc3c0) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f25d5960b40) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f25d553bf00) 0
+
+Vtable for __cxxabiv1::__forced_unwind
+__cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN10__cxxabiv115__forced_unwindE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class __cxxabiv1::__forced_unwind
+ size=8 align=8
+ base size=8 base align=8
+__cxxabiv1::__forced_unwind (0x0x7f25d55ae000) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f25d55aeea0) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f25d55aef60) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f25d55e1000) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f25d55e1060) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f25d55e10c0) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f25d55e11e0) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f25d55e1240) 0
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f25d52728a0) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f25d5272a20) 0 empty
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7f25d50948a0) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7f25d5094900) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f25d5094960) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7f25d50949c0) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f25d4cec180) 0
+
+Vtable for std::logic_error
+std::logic_error::_ZTVSt11logic_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt11logic_error)
+16 (int (*)(...))std::logic_error::~logic_error
+24 (int (*)(...))std::logic_error::~logic_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::logic_error
+ size=16 align=8
+ base size=16 base align=8
+std::logic_error (0x0x7f25d4c68c30) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+ std::exception (0x0x7f25d4cec240) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f25d4c68c30)
+
+Vtable for std::domain_error
+std::domain_error::_ZTVSt12domain_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12domain_error)
+16 (int (*)(...))std::domain_error::~domain_error
+24 (int (*)(...))std::domain_error::~domain_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::domain_error
+ size=16 align=8
+ base size=16 base align=8
+std::domain_error (0x0x7f25d4c68c98) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+ std::logic_error (0x0x7f25d4c68d00) 0
+ primary-for std::domain_error (0x0x7f25d4c68c98)
+ std::exception (0x0x7f25d4cec2a0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f25d4c68d00)
+
+Vtable for std::invalid_argument
+std::invalid_argument::_ZTVSt16invalid_argument: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt16invalid_argument)
+16 (int (*)(...))std::invalid_argument::~invalid_argument
+24 (int (*)(...))std::invalid_argument::~invalid_argument
+32 (int (*)(...))std::logic_error::what
+
+Class std::invalid_argument
+ size=16 align=8
+ base size=16 base align=8
+std::invalid_argument (0x0x7f25d4c68d68) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+ std::logic_error (0x0x7f25d4c68dd0) 0
+ primary-for std::invalid_argument (0x0x7f25d4c68d68)
+ std::exception (0x0x7f25d4cec300) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f25d4c68dd0)
+
+Vtable for std::length_error
+std::length_error::_ZTVSt12length_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12length_error)
+16 (int (*)(...))std::length_error::~length_error
+24 (int (*)(...))std::length_error::~length_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::length_error
+ size=16 align=8
+ base size=16 base align=8
+std::length_error (0x0x7f25d4c68e38) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+ std::logic_error (0x0x7f25d4c68ea0) 0
+ primary-for std::length_error (0x0x7f25d4c68e38)
+ std::exception (0x0x7f25d4cec360) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f25d4c68ea0)
+
+Vtable for std::out_of_range
+std::out_of_range::_ZTVSt12out_of_range: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12out_of_range)
+16 (int (*)(...))std::out_of_range::~out_of_range
+24 (int (*)(...))std::out_of_range::~out_of_range
+32 (int (*)(...))std::logic_error::what
+
+Class std::out_of_range
+ size=16 align=8
+ base size=16 base align=8
+std::out_of_range (0x0x7f25d4c68f08) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+ std::logic_error (0x0x7f25d4c68f70) 0
+ primary-for std::out_of_range (0x0x7f25d4c68f08)
+ std::exception (0x0x7f25d4cec3c0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f25d4c68f70)
+
+Vtable for std::runtime_error
+std::runtime_error::_ZTVSt13runtime_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13runtime_error)
+16 (int (*)(...))std::runtime_error::~runtime_error
+24 (int (*)(...))std::runtime_error::~runtime_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::runtime_error
+ size=16 align=8
+ base size=16 base align=8
+std::runtime_error (0x0x7f25d4d1b000) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+ std::exception (0x0x7f25d4cec420) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f25d4d1b000)
+
+Vtable for std::range_error
+std::range_error::_ZTVSt11range_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt11range_error)
+16 (int (*)(...))std::range_error::~range_error
+24 (int (*)(...))std::range_error::~range_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::range_error
+ size=16 align=8
+ base size=16 base align=8
+std::range_error (0x0x7f25d4d1b068) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+ std::runtime_error (0x0x7f25d4d1b0d0) 0
+ primary-for std::range_error (0x0x7f25d4d1b068)
+ std::exception (0x0x7f25d4cec480) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f25d4d1b0d0)
+
+Vtable for std::overflow_error
+std::overflow_error::_ZTVSt14overflow_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt14overflow_error)
+16 (int (*)(...))std::overflow_error::~overflow_error
+24 (int (*)(...))std::overflow_error::~overflow_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::overflow_error
+ size=16 align=8
+ base size=16 base align=8
+std::overflow_error (0x0x7f25d4d1b138) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+ std::runtime_error (0x0x7f25d4d1b1a0) 0
+ primary-for std::overflow_error (0x0x7f25d4d1b138)
+ std::exception (0x0x7f25d4cec4e0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f25d4d1b1a0)
+
+Vtable for std::underflow_error
+std::underflow_error::_ZTVSt15underflow_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt15underflow_error)
+16 (int (*)(...))std::underflow_error::~underflow_error
+24 (int (*)(...))std::underflow_error::~underflow_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::underflow_error
+ size=16 align=8
+ base size=16 base align=8
+std::underflow_error (0x0x7f25d4d1b208) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+ std::runtime_error (0x0x7f25d4d1b270) 0
+ primary-for std::underflow_error (0x0x7f25d4d1b208)
+ std::exception (0x0x7f25d4cec540) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f25d4d1b270)
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7f25d4d50840) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f25d4d508a0) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f25d4d50a20) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f25d4d50ae0) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f25d4d1b4e0) 0
+ std::__uses_alloc_base (0x0x7f25d4d50a80) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f25d4afb120) 0 empty
+
+Vtable for std::bad_function_call
+std::bad_function_call::_ZTVSt17bad_function_call: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt17bad_function_call)
+16 (int (*)(...))std::bad_function_call::~bad_function_call
+24 (int (*)(...))std::bad_function_call::~bad_function_call
+32 (int (*)(...))std::bad_function_call::what
+
+Class std::bad_function_call
+ size=8 align=8
+ base size=8 base align=8
+std::bad_function_call (0x0x7f25d4b6d8f0) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+ std::exception (0x0x7f25d4b8f7e0) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f25d4b6d8f0)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f25d4b8f8a0) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f25d4b8f900) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f25d4b8fc00) 0
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7f25d486ba80) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7f25d486bb40) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7f25d4894060) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7f25d4894ea0) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7f25d4894f60) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7f25d48ba000) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7f25d48ba3c0) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7f25d48ba4e0) 0
+
+Class std::__detail::_Equality_base
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Equality_base (0x0x7f25d469b5a0) 0 empty
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7f25d469be40) 0 empty
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7f25d46e0840) 0 empty
+
+Vtable for std::bad_optional_access
+std::bad_optional_access::_ZTVSt19bad_optional_access: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt19bad_optional_access)
+16 (int (*)(...))std::bad_optional_access::~bad_optional_access
+24 (int (*)(...))std::bad_optional_access::~bad_optional_access
+32 (int (*)(...))std::bad_optional_access::what
+
+Class std::bad_optional_access
+ size=8 align=8
+ base size=8 base align=8
+std::bad_optional_access (0x0x7f25d46bd820) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+ std::exception (0x0x7f25d46e0a80) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7f25d46bd820)
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f25d41b6420) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f25d40a2340) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f25d41b6ba0) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f25d40a2410) 0
+ std::_Bit_iterator_base (0x0x7f25d40a2478) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f25d41e4180) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f25d40a2548) 0
+ std::_Bit_iterator_base (0x0x7f25d40a25b0) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f25d41e4960) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7f25d3fc4e40) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7f25d3ff7000) 0 empty
+
+Class __pstl::execution::v1::parallel_unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_unsequenced_policy (0x0x7f25d3ff7180) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7f25d3ff7300) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7f25d3cfce40) 0 empty
+
+Class std::__detail::__variant::__variant_idx_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_idx_cookie (0x0x7f25d3cfcea0) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7f25d3dc6960) 0 empty
+
+Vtable for std::bad_variant_access
+std::bad_variant_access::_ZTVSt18bad_variant_access: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt18bad_variant_access)
+16 (int (*)(...))std::bad_variant_access::~bad_variant_access
+24 (int (*)(...))std::bad_variant_access::~bad_variant_access
+32 (int (*)(...))std::bad_variant_access::what
+
+Class std::bad_variant_access
+ size=16 align=8
+ base size=16 base align=8
+std::bad_variant_access (0x0x7f25d3d21958) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+ std::exception (0x0x7f25d3e05ea0) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7f25d3d21958)
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f25d3ab5900) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f25d3ab5960) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f25d3ab5c00) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f25d3b03420) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f25d3b3d540) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f25d3bcf7e0) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f25d3b67c30) 0
+ std::__atomic_flag_base (0x0x7f25d3bcf840) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f25d39e4f08) 0
+ QAtomicInteger<int> (0x0x7f25d39e4f70) 0
+ QBasicAtomicInteger<int> (0x0x7f25d3755780) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f25d2fdda20) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7f25d2fdda80) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f25d2c80d80) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7f25d2cd24e0) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f25d2cd2540) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f25d2ca93a8) 0
+ QGenericArgument (0x0x7f25d2cd27e0) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7f25d2cd2cc0) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7f25d2cd2d20) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7f25d2cd2c60) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f25d2d226c0) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f25d2d6d120) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f25d2d6dae0) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f25d2a4d600) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7f25d2a4d960) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f25d2b04420) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f25d2b04540) 0
+
+Vtable for std::locale::facet
+std::locale::facet::_ZTVNSt6locale5facetE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6locale5facetE)
+16 (int (*)(...))std::locale::facet::~facet
+24 (int (*)(...))std::locale::facet::~facet
+
+Class std::locale::facet
+ size=16 align=8
+ base size=12 base align=8
+std::locale::facet (0x0x7f25d2b04900) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f25d2b04ba0) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f25d2b04d80) 0
+
+Vtable for std::_V2::error_category
+std::_V2::error_category::_ZTVNSt3_V214error_categoryE: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt3_V214error_categoryE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))std::_V2::error_category::_M_message
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))std::_V2::error_category::default_error_condition
+64 (int (*)(...))std::_V2::error_category::equivalent
+72 (int (*)(...))std::_V2::error_category::equivalent
+
+Class std::_V2::error_category
+ size=8 align=8
+ base size=8 base align=8
+std::_V2::error_category (0x0x7f25d2b56ea0) 0 nearly-empty
+ vptr=((& std::_V2::error_category::_ZTVNSt3_V214error_categoryE) + 16)
+
+Class std::error_code
+ size=16 align=8
+ base size=16 base align=8
+std::error_code (0x0x7f25d2ba9240) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f25d2ba9a20) 0
+
+Vtable for std::system_error
+std::system_error::_ZTVSt12system_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12system_error)
+16 (int (*)(...))std::system_error::~system_error
+24 (int (*)(...))std::system_error::~system_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::system_error
+ size=32 align=8
+ base size=32 base align=8
+std::system_error (0x0x7f25d2b16888) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+ std::runtime_error (0x0x7f25d2b168f0) 0
+ primary-for std::system_error (0x0x7f25d2b16888)
+ std::exception (0x0x7f25d2bd5600) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f25d2b168f0)
+
+Vtable for std::ios_base::failure
+std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt8ios_base7failureB5cxx11E)
+16 (int (*)(...))std::ios_base::failure::~failure
+24 (int (*)(...))std::ios_base::failure::~failure
+32 (int (*)(...))std::ios_base::failure::what
+
+Class std::ios_base::failure
+ size=32 align=8
+ base size=32 base align=8
+std::ios_base::failure (0x0x7f25d2b16c30) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+ std::system_error (0x0x7f25d2b16c98) 0
+ primary-for std::ios_base::failure (0x0x7f25d2b16c30)
+ std::runtime_error (0x0x7f25d2b16d00) 0
+ primary-for std::system_error (0x0x7f25d2b16c98)
+ std::exception (0x0x7f25d2c0dd80) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f25d2b16d00)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f25d2c0dde0) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f25d2c0de40) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f25d2c0dea0) 0 empty
+
+Vtable for std::ios_base
+std::ios_base::_ZTVSt8ios_base: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt8ios_base)
+16 (int (*)(...))std::ios_base::~ios_base
+24 (int (*)(...))std::ios_base::~ios_base
+
+Class std::ios_base
+ size=216 align=8
+ base size=216 base align=8
+std::ios_base (0x0x7f25d2c0dd20) 0
+ vptr=((& std::ios_base::_ZTVSt8ios_base) + 16)
+
+Class std::ctype_base
+ size=1 align=1
+ base size=0 base align=1
+std::ctype_base (0x0x7f25d28ccae0) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7f25d296cde0) 0 empty
+
+VTT for std::basic_ostream<char>
+std::basic_ostream<char>::_ZTTSo: 2 entries
+0 ((& std::basic_ostream<char>::_ZTVSo) + 24)
+8 ((& std::basic_ostream<char>::_ZTVSo) + 64)
+
+VTT for std::basic_ostream<wchar_t>
+std::basic_ostream<wchar_t>::_ZTTSt13basic_ostreamIwSt11char_traitsIwEE: 2 entries
+0 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 64)
+
+VTT for std::basic_istream<char>
+std::basic_istream<char>::_ZTTSi: 2 entries
+0 ((& std::basic_istream<char>::_ZTVSi) + 24)
+8 ((& std::basic_istream<char>::_ZTVSi) + 64)
+
+VTT for std::basic_istream<wchar_t>
+std::basic_istream<wchar_t>::_ZTTSt13basic_istreamIwSt11char_traitsIwEE: 2 entries
+0 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 64)
+
+Construction vtable for std::basic_istream<char> (0x0x7f25d24fe888 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd0_Si: 10 entries
+0 24
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISi)
+24 0
+32 0
+40 18446744073709551592
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISi)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<char> (0x0x7f25d24fe958 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd16_So: 10 entries
+0 8
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISo)
+24 0
+32 0
+40 18446744073709551608
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISo)
+64 0
+72 0
+
+VTT for std::basic_iostream<char>
+std::basic_iostream<char>::_ZTTSd: 7 entries
+0 ((& std::basic_iostream<char>::_ZTVSd) + 24)
+8 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 24)
+16 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 64)
+24 ((& std::basic_iostream<char>::_ZTCSd16_So) + 24)
+32 ((& std::basic_iostream<char>::_ZTCSd16_So) + 64)
+40 ((& std::basic_iostream<char>::_ZTVSd) + 104)
+48 ((& std::basic_iostream<char>::_ZTVSd) + 64)
+
+Construction vtable for std::basic_istream<wchar_t> (0x0x7f25d24feea0 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E: 10 entries
+0 24
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551592
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<wchar_t> (0x0x7f25d24fef70 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E: 10 entries
+0 8
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551608
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+VTT for std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTTSt14basic_iostreamIwSt11char_traitsIwEE: 7 entries
+0 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 24)
+16 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 64)
+24 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 24)
+32 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 64)
+40 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 104)
+48 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 64)
+
+Vtable for __gnu_cxx::__concurrence_lock_error
+__gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx24__concurrence_lock_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error
+24 (int (*)(...))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error
+32 (int (*)(...))__gnu_cxx::__concurrence_lock_error::what
+
+Class __gnu_cxx::__concurrence_lock_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_lock_error (0x0x7f25d25693a8) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+ std::exception (0x0x7f25d25777e0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f25d25693a8)
+
+Vtable for __gnu_cxx::__concurrence_unlock_error
+__gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx26__concurrence_unlock_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error
+24 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error
+32 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::what
+
+Class __gnu_cxx::__concurrence_unlock_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_unlock_error (0x0x7f25d2569410) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+ std::exception (0x0x7f25d2577900) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f25d2569410)
+
+Vtable for __gnu_cxx::__concurrence_broadcast_error
+__gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx29__concurrence_broadcast_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::~__concurrence_broadcast_error
+24 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::~__concurrence_broadcast_error
+32 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::what
+
+Class __gnu_cxx::__concurrence_broadcast_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_broadcast_error (0x0x7f25d2569478) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+ std::exception (0x0x7f25d2577a20) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f25d2569478)
+
+Vtable for __gnu_cxx::__concurrence_wait_error
+__gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx24__concurrence_wait_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_wait_error::~__concurrence_wait_error
+24 (int (*)(...))__gnu_cxx::__concurrence_wait_error::~__concurrence_wait_error
+32 (int (*)(...))__gnu_cxx::__concurrence_wait_error::what
+
+Class __gnu_cxx::__concurrence_wait_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_wait_error (0x0x7f25d2569548) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+ std::exception (0x0x7f25d2577b40) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f25d2569548)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f25d259f420) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f25d259f780) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f25d259fa80) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f25d259fde0) 0
+
+Vtable for std::bad_weak_ptr
+std::bad_weak_ptr::_ZTVSt12bad_weak_ptr: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12bad_weak_ptr)
+16 (int (*)(...))std::bad_weak_ptr::~bad_weak_ptr
+24 (int (*)(...))std::bad_weak_ptr::~bad_weak_ptr
+32 (int (*)(...))std::bad_weak_ptr::what
+
+Class std::bad_weak_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::bad_weak_ptr (0x0x7f25d2569680) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+ std::exception (0x0x7f25d224c5a0) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f25d2569680)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f25d22bd360) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7f25d22bd8a0) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f25d23fe6c0) 0
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7f25d2160a20) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7f25d1e5cb40) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7f25d1ca8f00) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f25d1d35ea0) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7f25d1ab6de0) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7f25d1adb240) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7f25d1adb2a0) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7f25d1b60000) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7f25d18441e0) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7f25d1844180) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f25d18a90c0) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7f25d1a0b360) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7f25d15f1660) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7f25d15eb478) 0
+ QtPrivate::ArgBase (0x0x7f25d15f16c0) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7f25d15eb548) 0
+ QtPrivate::ArgBase (0x0x7f25d15f1900) 0
+
+Class QHashSeed
+ size=8 align=8
+ base size=8 base align=8
+QHashSeed (0x0x7f25d1264180) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f25d12a90c0) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f25d12a9180) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7f25d10ab6c0) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f25d1146840) 0 empty
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7f25d11735a0) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7f25d11737e0) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7f25d1220300) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f25d1312d68) 0
+ QIODeviceBase (0x0x7f25d1220360) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f25d12204e0) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f25d0ef1a80) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7f25d0eae8f0) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f25d0ef1b40) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7f25d0eae9c0) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f25d0ef1c00) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7f25d0ff0720) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7f25d0eaed68) 0
+ QMetaContainer (0x0x7f25d0ff0900) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7f25d0eaedd0) 0
+ QMetaContainer (0x0x7f25d0ff0cc0) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f25d0cdfea0) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7f25d0c9ce38) 0
+ std::__detail::_List_node_base (0x0x7f25d0cdff00) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f25d0ded000) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7f25d0ded360) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7f25d08527e0) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7f25d08529c0) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f25d08f8a20) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7f25d0431300) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f25d0417600) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7f25d0417960) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7f25d007f9c0) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7f25d007fae0) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7f25d00ea180) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7f25d00ea120) 0 empty
+
+Class QPropertyProxyBindingData
+ size=24 align=8
+ base size=24 base align=8
+QPropertyProxyBindingData (0x0x7f25d00ea1e0) 0
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7f25d00ea240) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7f25d00ea780) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7f25d00ea7e0) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7f25d00eaf00) 0
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7f25d0119660) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7f25d0119960) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7f25d0119a80) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7f25d0119cc0) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7f25d00e2888) 0
+ QPropertyObserverBase (0x0x7f25d0119e40) 0
+
+Class QPropertyNotifier
+ size=56 align=8
+ base size=56 base align=8
+QPropertyNotifier (0x0x7f25d00e2bc8) 0
+ QPropertyObserver (0x0x7f25d00e2c30) 0
+ QPropertyObserverBase (0x0x7f25d0182300) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7f25d01bf240) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7f25d01e13c0) 0
+
+Class QBindingStatus
+ size=32 align=8
+ base size=32 base align=8
+QBindingStatus (0x0x7f25cff02300) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7f25cff02360) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f25d000e120) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f25cfc72e40) 0 empty
+
+Vtable for QObjectData
+QObjectData::_ZTV11QObjectData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QObjectData)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+
+Class QObjectData
+ size=80 align=8
+ base size=80 base align=8
+QObjectData (0x0x7f25cfd317e0) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f25cfdbf180) 0 empty
+
+Vtable for QObject
+QObject::_ZTV7QObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QObject)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QObject::qt_metacall
+40 (int (*)(...))QObject::~QObject
+48 (int (*)(...))QObject::~QObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QObject
+ size=16 align=8
+ base size=16 base align=8
+QObject (0x0x7f25cfdbf120) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f25cfa640c0) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f25cfa64960) 0 empty
+
+Vtable for QAbstractAnimation
+QAbstractAnimation::_ZTV18QAbstractAnimation: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractAnimation)
+16 (int (*)(...))QAbstractAnimation::metaObject
+24 (int (*)(...))QAbstractAnimation::qt_metacast
+32 (int (*)(...))QAbstractAnimation::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAbstractAnimation
+ size=16 align=8
+ base size=16 base align=8
+QAbstractAnimation (0x0x7f25cfa510d0) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+ QObject (0x0x7f25cfa64900) 0
+ primary-for QAbstractAnimation (0x0x7f25cfa510d0)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f25cfa64cc0) 0 empty
+
+Vtable for QAnimationDriver
+QAnimationDriver::_ZTV16QAnimationDriver: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAnimationDriver)
+16 (int (*)(...))QAnimationDriver::metaObject
+24 (int (*)(...))QAnimationDriver::qt_metacast
+32 (int (*)(...))QAnimationDriver::qt_metacall
+40 (int (*)(...))QAnimationDriver::~QAnimationDriver
+48 (int (*)(...))QAnimationDriver::~QAnimationDriver
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAnimationDriver::advance
+120 (int (*)(...))QAnimationDriver::elapsed
+128 (int (*)(...))QAnimationDriver::start
+136 (int (*)(...))QAnimationDriver::stop
+
+Class QAnimationDriver
+ size=16 align=8
+ base size=16 base align=8
+QAnimationDriver (0x0x7f25cfa51138) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+ QObject (0x0x7f25cfa64c60) 0
+ primary-for QAnimationDriver (0x0x7f25cfa51138)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f25cfa64ea0) 0 empty
+
+Vtable for QEventLoop
+QEventLoop::_ZTV10QEventLoop: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QEventLoop)
+16 (int (*)(...))QEventLoop::metaObject
+24 (int (*)(...))QEventLoop::qt_metacast
+32 (int (*)(...))QEventLoop::qt_metacall
+40 (int (*)(...))QEventLoop::~QEventLoop
+48 (int (*)(...))QEventLoop::~QEventLoop
+56 (int (*)(...))QEventLoop::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QEventLoop
+ size=16 align=8
+ base size=16 base align=8
+QEventLoop (0x0x7f25cfa511a0) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+ QObject (0x0x7f25cfa64e40) 0
+ primary-for QEventLoop (0x0x7f25cfa511a0)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f25cfab1420) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f25cfab14e0) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f25cfab1540) 0
+
+Vtable for QAbstractEventDispatcher
+QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractEventDispatcher)
+16 (int (*)(...))QAbstractEventDispatcher::metaObject
+24 (int (*)(...))QAbstractEventDispatcher::qt_metacast
+32 (int (*)(...))QAbstractEventDispatcher::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))QAbstractEventDispatcher::startingUp
+200 (int (*)(...))QAbstractEventDispatcher::closingDown
+
+Class QAbstractEventDispatcher
+ size=16 align=8
+ base size=16 base align=8
+QAbstractEventDispatcher (0x0x7f25cfa51340) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+ QObject (0x0x7f25cfab1480) 0
+ primary-for QAbstractEventDispatcher (0x0x7f25cfa51340)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f25cfb0fcc0) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7f25cf9f6900) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7f25cf9f68a0) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7f25cf638540) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7f25cfb834e0) 0
+ QStringConverterBase (0x0x7f25cf6384e0) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7f25cfb83548) 0
+ QStringConverter (0x0x7f25cfb835b0) 0
+ QStringConverterBase (0x0x7f25cf638f00) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7f25cfb83618) 0
+ QStringConverter (0x0x7f25cfb83680) 0
+ QStringConverterBase (0x0x7f25cf682d80) 0 empty
+
+Vtable for QTextStream
+QTextStream::_ZTV11QTextStream: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTextStream)
+16 (int (*)(...))QTextStream::~QTextStream
+24 (int (*)(...))QTextStream::~QTextStream
+
+Class QTextStream
+ size=16 align=8
+ base size=16 base align=8
+QTextStream (0x0x7f25cfb836e8) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+ QIODeviceBase (0x0x7f25cf6a4a80) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f25cf711240) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7f25cf79f420) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f25cf7cba80) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f25cf7cbc00) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7f25cf47be40) 0 empty
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7f25cf4a7d80) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f25cf4791a0) 0
+ QIODeviceBase (0x0x7f25cf4a7d20) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f25cf5cf720) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f25cf5cf7e0) 0 empty
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7f25cd37b420) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7f25cd37b480) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7f25cd37b3c0) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7f25cd142ba0) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7f25cd142de0) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7f25cd168000) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7f25cd185f00) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f25cd1cef00) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f25cce3b120) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f25ccead9c0) 0 empty
+
+Vtable for QAbstractItemModel
+QAbstractItemModel::_ZTV18QAbstractItemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractItemModel)
+16 (int (*)(...))QAbstractItemModel::metaObject
+24 (int (*)(...))QAbstractItemModel::qt_metacast
+32 (int (*)(...))QAbstractItemModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractItemModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractItemModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractItemModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModel (0x0x7f25ccea5f70) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+ QObject (0x0x7f25ccead960) 0
+ primary-for QAbstractItemModel (0x0x7f25ccea5f70)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f25ccfe0780) 0 empty
+
+Vtable for QAbstractTableModel
+QAbstractTableModel::_ZTV19QAbstractTableModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractTableModel)
+16 (int (*)(...))QAbstractTableModel::metaObject
+24 (int (*)(...))QAbstractTableModel::qt_metacast
+32 (int (*)(...))QAbstractTableModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractTableModel::index
+120 (int (*)(...))QAbstractTableModel::parent
+128 (int (*)(...))QAbstractTableModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractTableModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractTableModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractTableModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractTableModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTableModel (0x0x7f25ccef9820) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+ QAbstractItemModel (0x0x7f25ccef9888) 0
+ primary-for QAbstractTableModel (0x0x7f25ccef9820)
+ QObject (0x0x7f25ccfe0720) 0
+ primary-for QAbstractItemModel (0x0x7f25ccef9888)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f25ccfe08a0) 0 empty
+
+Vtable for QAbstractListModel
+QAbstractListModel::_ZTV18QAbstractListModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractListModel)
+16 (int (*)(...))QAbstractListModel::metaObject
+24 (int (*)(...))QAbstractListModel::qt_metacast
+32 (int (*)(...))QAbstractListModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QAbstractListModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractListModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractListModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractListModel (0x0x7f25ccef98f0) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+ QAbstractItemModel (0x0x7f25ccef9958) 0
+ primary-for QAbstractListModel (0x0x7f25ccef98f0)
+ QObject (0x0x7f25ccfe0840) 0
+ primary-for QAbstractItemModel (0x0x7f25ccef9958)
+
+Vtable for QAbstractNativeEventFilter
+QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractNativeEventFilter)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractNativeEventFilter
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNativeEventFilter (0x0x7f25ccc7b120) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f25ccc7b1e0) 0 empty
+
+Vtable for QAbstractProxyModel
+QAbstractProxyModel::_ZTV19QAbstractProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractProxyModel)
+16 (int (*)(...))QAbstractProxyModel::metaObject
+24 (int (*)(...))QAbstractProxyModel::qt_metacast
+32 (int (*)(...))QAbstractProxyModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractProxyModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QAbstractProxyModel::headerData
+184 (int (*)(...))QAbstractProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QAbstractProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QAbstractProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QAbstractProxyModel::setSourceModel
+416 (int (*)(...))__cxa_pure_virtual
+424 (int (*)(...))__cxa_pure_virtual
+432 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+440 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QAbstractProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractProxyModel (0x0x7f25ccc4ad68) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+ QAbstractItemModel (0x0x7f25ccc4add0) 0
+ primary-for QAbstractProxyModel (0x0x7f25ccc4ad68)
+ QObject (0x0x7f25ccc7b180) 0
+ primary-for QAbstractItemModel (0x0x7f25ccc4add0)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f25ccc7b3c0) 0 empty
+
+Vtable for QAnimationGroup
+QAnimationGroup::_ZTV15QAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAnimationGroup)
+16 (int (*)(...))QAnimationGroup::metaObject
+24 (int (*)(...))QAnimationGroup::qt_metacast
+32 (int (*)(...))QAnimationGroup::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QAnimationGroup (0x0x7f25ccc4ae38) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+ QAbstractAnimation (0x0x7f25ccc4aea0) 0
+ primary-for QAnimationGroup (0x0x7f25ccc4ae38)
+ QObject (0x0x7f25ccc7b360) 0
+ primary-for QAbstractAnimation (0x0x7f25ccc4aea0)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7f25ccc4af08) 0
+ QIterator<QMetaAssociation> (0x0x7f25cccce000) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f25ccc7b7e0) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7f25cccce138) 0
+ QConstIterator<QMetaAssociation> (0x0x7f25cccce1a0) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f25ccc7bd80) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7f25cccce270) 0
+ QIterable<QMetaAssociation> (0x0x7f25cccec2a0) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f25ccdc7d80) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7f25cca27ae0) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7f25cca55a20) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f25cca9e5a0) 0 empty
+
+Vtable for QIODevice
+QIODevice::_ZTV9QIODevice: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QIODevice)
+16 (int (*)(...))QIODevice::metaObject
+24 (int (*)(...))QIODevice::qt_metacast
+32 (int (*)(...))QIODevice::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIODevice::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QIODevice::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))__cxa_pure_virtual
+
+Class QIODevice
+ size=16 align=8
+ base size=16 base align=8
+QIODevice (0x0x7f25ccdb47e0) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+ QObject (0x0x7f25cca9e4e0) 0
+ primary-for QIODevice (0x0x7f25ccdb47e0)
+ QIODeviceBase (0x0x7f25cca9e540) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f25cca9e9c0) 0 empty
+
+Vtable for QBuffer
+QBuffer::_ZTV7QBuffer: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QBuffer)
+16 (int (*)(...))QBuffer::metaObject
+24 (int (*)(...))QBuffer::qt_metacast
+32 (int (*)(...))QBuffer::qt_metacall
+40 (int (*)(...))QBuffer::~QBuffer
+48 (int (*)(...))QBuffer::~QBuffer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QBuffer::connectNotify
+104 (int (*)(...))QBuffer::disconnectNotify
+112 (int (*)(...))QIODevice::isSequential
+120 (int (*)(...))QBuffer::open
+128 (int (*)(...))QBuffer::close
+136 (int (*)(...))QBuffer::pos
+144 (int (*)(...))QBuffer::size
+152 (int (*)(...))QBuffer::seek
+160 (int (*)(...))QBuffer::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QBuffer::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QBuffer::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QBuffer::writeData
+
+Class QBuffer
+ size=16 align=8
+ base size=16 base align=8
+QBuffer (0x0x7f25ccaa4208) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+ QIODevice (0x0x7f25ccdb4850) 0
+ primary-for QBuffer (0x0x7f25ccaa4208)
+ QObject (0x0x7f25cca9e900) 0
+ primary-for QIODevice (0x0x7f25ccdb4850)
+ QIODeviceBase (0x0x7f25cca9e960) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f25cca9ec00) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7f25cca9eba0) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f25cca9ed80) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f25cca9ed20) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f25ccb4b5a0) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7f25cc868420) 0
+
+Class QCalendar::SystemId
+ size=8 align=8
+ base size=8 base align=8
+QCalendar::SystemId (0x0x7f25cc868480) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7f25cc8683c0) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f25cc868ea0) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f25cc9164e0) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f25cc962720) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f25cc962780) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f25cc9626c0) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7f25cc9e79c0) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f25cca12d80) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f25cc737000) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7f25cc76b780) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f25cc76b840) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7f25cc76b9c0) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f25cc800c00) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f25cc4ea840) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7f25cc56a9c0) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7f25cc56aa80) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7f25cc2a7360) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7f25cc2e28a0) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7f25cc2e2900) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7f25cc2e2840) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7f25cc3d1ea0) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7f25cc3d1f00) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7f25cc3d1e40) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7f25cc1e7f60) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7f25cc1e7f00) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7f25cbf07360) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7f25cbf487e0) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f25cbf7c240) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f25cbf7c420) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f25cbc27e40) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7f25cbcaa7e0) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7f25cbcaa840) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7f25cbcaa8a0) 0 empty
+
+Vtable for QEvent
+QEvent::_ZTV6QEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QEvent)
+16 (int (*)(...))QEvent::~QEvent
+24 (int (*)(...))QEvent::~QEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QEvent
+ size=16 align=8
+ base size=16 base align=8
+QEvent (0x0x7f25cbcaa780) 0
+ vptr=((& QEvent::_ZTV6QEvent) + 16)
+
+Vtable for QTimerEvent
+QTimerEvent::_ZTV11QTimerEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTimerEvent)
+16 (int (*)(...))QTimerEvent::~QTimerEvent
+24 (int (*)(...))QTimerEvent::~QTimerEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QTimerEvent::clone
+
+Class QTimerEvent
+ size=24 align=8
+ base size=20 base align=8
+QTimerEvent (0x0x7f25cbca8680) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+ QEvent (0x0x7f25cbd11240) 0
+ primary-for QTimerEvent (0x0x7f25cbca8680)
+
+Vtable for QChildEvent
+QChildEvent::_ZTV11QChildEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QChildEvent)
+16 (int (*)(...))QChildEvent::~QChildEvent
+24 (int (*)(...))QChildEvent::~QChildEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QChildEvent::clone
+
+Class QChildEvent
+ size=24 align=8
+ base size=24 base align=8
+QChildEvent (0x0x7f25cbca86e8) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+ QEvent (0x0x7f25cbd11720) 0
+ primary-for QChildEvent (0x0x7f25cbca86e8)
+
+Vtable for QDynamicPropertyChangeEvent
+QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDynamicPropertyChangeEvent)
+16 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+24 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDynamicPropertyChangeEvent::clone
+
+Class QDynamicPropertyChangeEvent
+ size=40 align=8
+ base size=40 base align=8
+QDynamicPropertyChangeEvent (0x0x7f25cbca8750) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+ QEvent (0x0x7f25cbd11b40) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f25cbca8750)
+
+Vtable for QDeferredDeleteEvent
+QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDeferredDeleteEvent)
+16 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+24 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDeferredDeleteEvent::clone
+
+Class QDeferredDeleteEvent
+ size=24 align=8
+ base size=20 base align=8
+QDeferredDeleteEvent (0x0x7f25cbca87b8) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+ QEvent (0x0x7f25cbd11de0) 0
+ primary-for QDeferredDeleteEvent (0x0x7f25cbca87b8)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f25cbd4a1e0) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f25cbca8888) 0
+ QBasicMutex (0x0x7f25cbd4af00) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7f25cbdb2360) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f25cbdb2960) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f25cbdb2f60) 0
+
+Vtable for QtPrivate::ResultStoreBase
+QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9QtPrivate15ResultStoreBaseE)
+16 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+24 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+
+Class QtPrivate::ResultStoreBase
+ size=48 align=8
+ base size=44 base align=8
+QtPrivate::ResultStoreBase (0x0x7f25cbe1cc00) 0
+ vptr=((& QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE) + 16)
+
+Vtable for QFutureInterfaceBase
+QFutureInterfaceBase::_ZTV20QFutureInterfaceBase: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QFutureInterfaceBase)
+16 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+24 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+
+Class QFutureInterfaceBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureInterfaceBase (0x0x7f25cbb8a660) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f25cbbd27e0) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f25cbbd2ae0) 0
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f25cb907ea0) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f25cb934b60) 0
+ std::__mutex_base (0x0x7f25cb907f00) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f25cb948120) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f25cb948180) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f25cb9481e0) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f25cb948c00) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f25cb934bc8) 0
+ std::__recursive_mutex_base (0x0x7f25cb948c60) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f25cb902540) 0
+ std::__mutex_base (0x0x7f25cb981060) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7f25cb9810c0) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f25cb9025b0) 0
+ std::__recursive_mutex_base (0x0x7f25cb981480) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f25cb9814e0) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f25cb9bc300) 0
+
+Vtable for std::thread::_State
+std::thread::_State::_ZTVNSt6thread6_StateE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6thread6_StateE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class std::thread::_State
+ size=8 align=8
+ base size=8 base align=8
+std::thread::_State (0x0x7f25cb9bc5a0) 0 nearly-empty
+ vptr=((& std::thread::_State::_ZTVNSt6thread6_StateE) + 16)
+
+Class std::thread::id
+ size=8 align=8
+ base size=8 base align=8
+std::thread::id (0x0x7f25cb9bc600) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f25cb9bc540) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f25cb796840) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f25cb796c00) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f25cb796c60) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f25cb48a1e0) 0 empty
+
+Vtable for std::future_error
+std::future_error::_ZTVSt12future_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12future_error)
+16 (int (*)(...))std::future_error::~future_error
+24 (int (*)(...))std::future_error::~future_error
+32 (int (*)(...))std::future_error::what
+
+Class std::future_error
+ size=32 align=8
+ base size=32 base align=8
+std::future_error (0x0x7f25cb4259c0) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+ std::logic_error (0x0x7f25cb425a28) 0
+ primary-for std::future_error (0x0x7f25cb4259c0)
+ std::exception (0x0x7f25cb48a900) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f25cb425a28)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f25cb4bb060) 0 empty
+
+Vtable for std::__future_base::_Result_base
+std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base12_Result_baseE)
+16 (int (*)(...))__cxa_pure_virtual
+24 0
+32 0
+
+Class std::__future_base::_Result_base
+ size=16 align=8
+ base size=16 base align=8
+std::__future_base::_Result_base (0x0x7f25cb4bb000) 0
+ vptr=((& std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE) + 16)
+
+Class std::__future_base::_State_baseV2::__exception_ptr_tag
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_State_baseV2::__exception_ptr_tag (0x0x7f25cb600a80) 0 empty
+
+Class std::__future_base::_State_baseV2::_Make_ready
+ size=32 align=8
+ base size=32 base align=8
+std::__future_base::_State_baseV2::_Make_ready (0x0x7f25cb60c208) 0
+ std::__at_thread_exit_elt (0x0x7f25cb600b40) 0
+
+Vtable for std::__future_base::_State_baseV2
+std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base13_State_baseV2E)
+16 (int (*)(...))std::__future_base::_State_baseV2::~_State_baseV2
+24 (int (*)(...))std::__future_base::_State_baseV2::~_State_baseV2
+32 (int (*)(...))std::__future_base::_State_baseV2::_M_complete_async
+40 (int (*)(...))std::__future_base::_State_baseV2::_M_is_deferred_future
+
+Class std::__future_base::_State_baseV2
+ size=32 align=8
+ base size=28 base align=8
+std::__future_base::_State_baseV2 (0x0x7f25cb4bb1e0) 0
+ vptr=((& std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E) + 16)
+
+Class std::__future_base
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base (0x0x7f25cb48af60) 0 empty
+
+Vtable for std::__future_base::_Async_state_commonV2
+std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base21_Async_state_commonV2E)
+16 (int (*)(...))std::__future_base::_Async_state_commonV2::~_Async_state_commonV2
+24 (int (*)(...))std::__future_base::_Async_state_commonV2::~_Async_state_commonV2
+32 (int (*)(...))std::__future_base::_Async_state_commonV2::_M_complete_async
+40 (int (*)(...))std::__future_base::_State_baseV2::_M_is_deferred_future
+
+Class std::__future_base::_Async_state_commonV2
+ size=48 align=8
+ base size=44 base align=8
+std::__future_base::_Async_state_commonV2 (0x0x7f25caec7618) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+ std::__future_base::_State_baseV2 (0x0x7f25caef8840) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f25caec7618)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f25caf2d120) 0 empty
+
+Vtable for QThread
+QThread::_ZTV7QThread: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QThread)
+16 (int (*)(...))QThread::metaObject
+24 (int (*)(...))QThread::qt_metacast
+32 (int (*)(...))QThread::qt_metacall
+40 (int (*)(...))QThread::~QThread
+48 (int (*)(...))QThread::~QThread
+56 (int (*)(...))QThread::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QThread::run
+
+Class QThread
+ size=16 align=8
+ base size=16 base align=8
+QThread (0x0x7f25caec7958) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+ QObject (0x0x7f25caf2d0c0) 0
+ primary-for QThread (0x0x7f25caec7958)
+
+Vtable for QRunnable
+QRunnable::_ZTV9QRunnable: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QRunnable)
+16 (int (*)(...))__cxa_pure_virtual
+24 0
+32 0
+
+Class QRunnable
+ size=16 align=8
+ base size=9 base align=8
+QRunnable (0x0x7f25caf2d480) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f25caf2d600) 0 empty
+
+Vtable for QThreadPool
+QThreadPool::_ZTV11QThreadPool: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QThreadPool)
+16 (int (*)(...))QThreadPool::metaObject
+24 (int (*)(...))QThreadPool::qt_metacast
+32 (int (*)(...))QThreadPool::qt_metacall
+40 (int (*)(...))QThreadPool::~QThreadPool
+48 (int (*)(...))QThreadPool::~QThreadPool
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QThreadPool
+ size=16 align=8
+ base size=16 base align=8
+QThreadPool (0x0x7f25caec79c0) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+ QObject (0x0x7f25caf2d5a0) 0
+ primary-for QThreadPool (0x0x7f25caec79c0)
+
+Vtable for QException
+QException::_ZTV10QException: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QException)
+16 (int (*)(...))QException::~QException
+24 (int (*)(...))QException::~QException
+32 (int (*)(...))std::exception::what
+40 (int (*)(...))QException::raise
+48 (int (*)(...))QException::clone
+
+Class QException
+ size=8 align=8
+ base size=8 base align=8
+QException (0x0x7f25caec7a28) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+ std::exception (0x0x7f25caf2d780) 0 nearly-empty
+ primary-for QException (0x0x7f25caec7a28)
+
+Vtable for QUnhandledException
+QUnhandledException::_ZTV19QUnhandledException: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QUnhandledException)
+16 (int (*)(...))QUnhandledException::~QUnhandledException
+24 (int (*)(...))QUnhandledException::~QUnhandledException
+32 (int (*)(...))std::exception::what
+40 (int (*)(...))QUnhandledException::raise
+48 (int (*)(...))QUnhandledException::clone
+
+Class QUnhandledException
+ size=16 align=8
+ base size=16 base align=8
+QUnhandledException (0x0x7f25caec7a90) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+ QException (0x0x7f25caec7af8) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f25caec7a90)
+ std::exception (0x0x7f25caf2d7e0) 0 nearly-empty
+ primary-for QException (0x0x7f25caec7af8)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f25caf93660) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f25cad86d20) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f25cad86cc0) 0
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f25cadc4f60) 0 empty
+
+Vtable for QCoreApplication
+QCoreApplication::_ZTV16QCoreApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QCoreApplication)
+16 (int (*)(...))QCoreApplication::metaObject
+24 (int (*)(...))QCoreApplication::qt_metacast
+32 (int (*)(...))QCoreApplication::qt_metacall
+40 (int (*)(...))QCoreApplication::~QCoreApplication
+48 (int (*)(...))QCoreApplication::~QCoreApplication
+56 (int (*)(...))QCoreApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCoreApplication::notify
+120 (int (*)(...))QCoreApplication::compressEvent
+
+Class QCoreApplication
+ size=16 align=8
+ base size=16 base align=8
+QCoreApplication (0x0x7f25cadd16e8) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+ QObject (0x0x7f25cadc4f00) 0
+ primary-for QCoreApplication (0x0x7f25cadd16e8)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f25caa251e0) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7f25caa25300) 0 empty
+
+Vtable for QConcatenateTablesProxyModel
+QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QConcatenateTablesProxyModel)
+16 (int (*)(...))QConcatenateTablesProxyModel::metaObject
+24 (int (*)(...))QConcatenateTablesProxyModel::qt_metacast
+32 (int (*)(...))QConcatenateTablesProxyModel::qt_metacall
+40 (int (*)(...))QConcatenateTablesProxyModel::~QConcatenateTablesProxyModel
+48 (int (*)(...))QConcatenateTablesProxyModel::~QConcatenateTablesProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QConcatenateTablesProxyModel::index
+120 (int (*)(...))QConcatenateTablesProxyModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QConcatenateTablesProxyModel::rowCount
+144 (int (*)(...))QConcatenateTablesProxyModel::columnCount
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))QConcatenateTablesProxyModel::data
+168 (int (*)(...))QConcatenateTablesProxyModel::setData
+176 (int (*)(...))QConcatenateTablesProxyModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QConcatenateTablesProxyModel::itemData
+200 (int (*)(...))QConcatenateTablesProxyModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QConcatenateTablesProxyModel::mimeTypes
+224 (int (*)(...))QConcatenateTablesProxyModel::mimeData
+232 (int (*)(...))QConcatenateTablesProxyModel::canDropMimeData
+240 (int (*)(...))QConcatenateTablesProxyModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QConcatenateTablesProxyModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QConcatenateTablesProxyModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QConcatenateTablesProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QConcatenateTablesProxyModel (0x0x7f25cadd1750) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+ QAbstractItemModel (0x0x7f25cadd17b8) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7f25cadd1750)
+ QObject (0x0x7f25caa252a0) 0
+ primary-for QAbstractItemModel (0x0x7f25cadd17b8)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f25caa25480) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f25caa25660) 0 empty
+
+Vtable for QFileDevice
+QFileDevice::_ZTV11QFileDevice: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFileDevice)
+16 (int (*)(...))QFileDevice::metaObject
+24 (int (*)(...))QFileDevice::qt_metacast
+32 (int (*)(...))QFileDevice::qt_metacall
+40 (int (*)(...))QFileDevice::~QFileDevice
+48 (int (*)(...))QFileDevice::~QFileDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFileDevice::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QFileDevice::fileName
+256 (int (*)(...))QFileDevice::resize
+264 (int (*)(...))QFileDevice::permissions
+272 (int (*)(...))QFileDevice::setPermissions
+
+Class QFileDevice
+ size=16 align=8
+ base size=16 base align=8
+QFileDevice (0x0x7f25cadd1820) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+ QIODevice (0x0x7f25caa4c4d0) 0
+ primary-for QFileDevice (0x0x7f25cadd1820)
+ QObject (0x0x7f25caa255a0) 0
+ primary-for QIODevice (0x0x7f25caa4c4d0)
+ QIODeviceBase (0x0x7f25caa25600) 0 empty
+
+Class std::filesystem::space_info
+ size=24 align=8
+ base size=24 base align=8
+std::filesystem::space_info (0x0x7f25caae1360) 0
+
+Class std::filesystem::__file_clock
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__file_clock (0x0x7f25cab29900) 0 empty
+
+Class std::time_base
+ size=1 align=1
+ base size=0 base align=1
+std::time_base (0x0x7f25cab29d80) 0 empty
+
+Class std::money_base::pattern
+ size=4 align=1
+ base size=4 base align=1
+std::money_base::pattern (0x0x7f25cabaf0c0) 0
+
+Class std::money_base
+ size=1 align=1
+ base size=0 base align=1
+std::money_base (0x0x7f25cabaf060) 0 empty
+
+Class std::messages_base
+ size=1 align=1
+ base size=0 base align=1
+std::messages_base (0x0x7f25cabff660) 0 empty
+
+Class std::codecvt_base
+ size=1 align=1
+ base size=0 base align=1
+std::codecvt_base (0x0x7f25ca83e1e0) 0 empty
+
+Construction vtable for std::basic_istream<char> (0x0x7f25ca67ba90 instance) in std::__cxx11::basic_istringstream<char>
+std::__cxx11::basic_istringstream<char>::_ZTCNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE0_Si: 10 entries
+0 120
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISi)
+24 0
+32 0
+40 18446744073709551496
+48 (int (*)(...))-120
+56 (int (*)(...))(& _ZTISi)
+64 0
+72 0
+
+VTT for std::__cxx11::basic_istringstream<char>
+std::__cxx11::basic_istringstream<char>::_ZTTNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE: 4 entries
+0 ((& std::__cxx11::basic_istringstream<char>::_ZTVNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE) + 24)
+8 ((& std::__cxx11::basic_istringstream<char>::_ZTCNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE0_Si) + 24)
+16 ((& std::__cxx11::basic_istringstream<char>::_ZTCNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE0_Si) + 64)
+24 ((& std::__cxx11::basic_istringstream<char>::_ZTVNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE) + 64)
+
+Construction vtable for std::basic_ostream<char> (0x0x7f25ca67bd00 instance) in std::__cxx11::basic_ostringstream<char>
+std::__cxx11::basic_ostringstream<char>::_ZTCNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE0_So: 10 entries
+0 112
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISo)
+24 0
+32 0
+40 18446744073709551504
+48 (int (*)(...))-112
+56 (int (*)(...))(& _ZTISo)
+64 0
+72 0
+
+VTT for std::__cxx11::basic_ostringstream<char>
+std::__cxx11::basic_ostringstream<char>::_ZTTNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE: 4 entries
+0 ((& std::__cxx11::basic_ostringstream<char>::_ZTVNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE) + 24)
+8 ((& std::__cxx11::basic_ostringstream<char>::_ZTCNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE0_So) + 24)
+16 ((& std::__cxx11::basic_ostringstream<char>::_ZTCNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE0_So) + 64)
+24 ((& std::__cxx11::basic_ostringstream<char>::_ZTVNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE) + 64)
+
+Construction vtable for std::basic_iostream<char> (0x0x7f25ca9eb5b0 instance) in std::__cxx11::basic_stringstream<char>
+std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Sd: 15 entries
+0 128
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISd)
+24 0
+32 0
+40 112
+48 (int (*)(...))-16
+56 (int (*)(...))(& _ZTISd)
+64 0
+72 0
+80 18446744073709551488
+88 (int (*)(...))-128
+96 (int (*)(...))(& _ZTISd)
+104 0
+112 0
+
+Construction vtable for std::basic_istream<char> (0x0x7f25ca67bf70 instance) in std::__cxx11::basic_stringstream<char>
+std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Si: 10 entries
+0 128
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISi)
+24 0
+32 0
+40 18446744073709551488
+48 (int (*)(...))-128
+56 (int (*)(...))(& _ZTISi)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<char> (0x0x7f25ca67bc30 instance) in std::__cxx11::basic_stringstream<char>
+std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE16_So: 10 entries
+0 112
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISo)
+24 0
+32 0
+40 18446744073709551504
+48 (int (*)(...))-112
+56 (int (*)(...))(& _ZTISo)
+64 0
+72 0
+
+VTT for std::__cxx11::basic_stringstream<char>
+std::__cxx11::basic_stringstream<char>::_ZTTNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE: 10 entries
+0 ((& std::__cxx11::basic_stringstream<char>::_ZTVNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE) + 24)
+8 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Sd) + 24)
+16 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Si) + 24)
+24 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Si) + 64)
+32 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE16_So) + 24)
+40 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE16_So) + 64)
+48 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Sd) + 104)
+56 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Sd) + 64)
+64 ((& std::__cxx11::basic_stringstream<char>::_ZTVNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE) + 104)
+72 ((& std::__cxx11::basic_stringstream<char>::_ZTVNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE) + 64)
+
+Construction vtable for std::basic_istream<wchar_t> (0x0x7f25ca70c340 instance) in std::__cxx11::basic_istringstream<wchar_t>
+std::__cxx11::basic_istringstream<wchar_t>::_ZTCNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_istreamIwS2_E: 10 entries
+0 120
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551496
+48 (int (*)(...))-120
+56 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+VTT for std::__cxx11::basic_istringstream<wchar_t>
+std::__cxx11::basic_istringstream<wchar_t>::_ZTTNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEE: 4 entries
+0 ((& std::__cxx11::basic_istringstream<wchar_t>::_ZTVNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEE) + 24)
+8 ((& std::__cxx11::basic_istringstream<wchar_t>::_ZTCNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_istreamIwS2_E) + 24)
+16 ((& std::__cxx11::basic_istringstream<wchar_t>::_ZTCNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_istreamIwS2_E) + 64)
+24 ((& std::__cxx11::basic_istringstream<wchar_t>::_ZTVNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEE) + 64)
+
+Construction vtable for std::basic_ostream<wchar_t> (0x0x7f25ca70c5b0 instance) in std::__cxx11::basic_ostringstream<wchar_t>
+std::__cxx11::basic_ostringstream<wchar_t>::_ZTCNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_ostreamIwS2_E: 10 entries
+0 112
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551504
+48 (int (*)(...))-112
+56 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+VTT for std::__cxx11::basic_ostringstream<wchar_t>
+std::__cxx11::basic_ostringstream<wchar_t>::_ZTTNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEE: 4 entries
+0 ((& std::__cxx11::basic_ostringstream<wchar_t>::_ZTVNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEE) + 24)
+8 ((& std::__cxx11::basic_ostringstream<wchar_t>::_ZTCNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_ostreamIwS2_E) + 24)
+16 ((& std::__cxx11::basic_ostringstream<wchar_t>::_ZTCNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_ostreamIwS2_E) + 64)
+24 ((& std::__cxx11::basic_ostringstream<wchar_t>::_ZTVNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEE) + 64)
+
+Construction vtable for std::basic_iostream<wchar_t> (0x0x7f25ca9eb9a0 instance) in std::__cxx11::basic_stringstream<wchar_t>
+std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St14basic_iostreamIwS2_E: 15 entries
+0 128
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt14basic_iostreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 112
+48 (int (*)(...))-16
+56 (int (*)(...))(& _ZTISt14basic_iostreamIwSt11char_traitsIwEE)
+64 0
+72 0
+80 18446744073709551488
+88 (int (*)(...))-128
+96 (int (*)(...))(& _ZTISt14basic_iostreamIwSt11char_traitsIwEE)
+104 0
+112 0
+
+Construction vtable for std::basic_istream<wchar_t> (0x0x7f25ca70c820 instance) in std::__cxx11::basic_stringstream<wchar_t>
+std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_istreamIwS2_E: 10 entries
+0 128
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551488
+48 (int (*)(...))-128
+56 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<wchar_t> (0x0x7f25ca70c8f0 instance) in std::__cxx11::basic_stringstream<wchar_t>
+std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE16_St13basic_ostreamIwS2_E: 10 entries
+0 112
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551504
+48 (int (*)(...))-112
+56 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+VTT for std::__cxx11::basic_stringstream<wchar_t>
+std::__cxx11::basic_stringstream<wchar_t>::_ZTTNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE: 10 entries
+0 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTVNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE) + 24)
+8 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St14basic_iostreamIwS2_E) + 24)
+16 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_istreamIwS2_E) + 24)
+24 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_istreamIwS2_E) + 64)
+32 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE16_St13basic_ostreamIwS2_E) + 24)
+40 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE16_St13basic_ostreamIwS2_E) + 64)
+48 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St14basic_iostreamIwS2_E) + 104)
+56 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St14basic_iostreamIwS2_E) + 64)
+64 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTVNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE) + 104)
+72 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTVNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE) + 64)
+
+Class std::_Resetiosflags
+ size=4 align=4
+ base size=4 base align=4
+std::_Resetiosflags (0x0x7f25ca6cca20) 0
+
+Class std::_Setiosflags
+ size=4 align=4
+ base size=4 base align=4
+std::_Setiosflags (0x0x7f25ca6ccba0) 0
+
+Class std::_Setbase
+ size=4 align=4
+ base size=4 base align=4
+std::_Setbase (0x0x7f25ca6ccd20) 0
+
+Class std::_Setprecision
+ size=4 align=4
+ base size=4 base align=4
+std::_Setprecision (0x0x7f25ca76c060) 0
+
+Class std::_Setw
+ size=4 align=4
+ base size=4 base align=4
+std::_Setw (0x0x7f25ca76c1e0) 0
+
+Class std::filesystem::__cxx11::path::__null_terminated
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__cxx11::path::__null_terminated (0x0x7f25ca4382a0) 0 empty
+
+Class std::filesystem::__cxx11::path::_List::_Impl_deleter
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__cxx11::path::_List::_Impl_deleter (0x0x7f25ca438360) 0 empty
+
+Class std::filesystem::__cxx11::path::_List
+ size=8 align=8
+ base size=8 base align=8
+std::filesystem::__cxx11::path::_List (0x0x7f25ca438300) 0
+
+Class std::filesystem::__cxx11::path
+ size=40 align=8
+ base size=40 base align=8
+std::filesystem::__cxx11::path (0x0x7f25ca438180) 0
+
+Vtable for std::filesystem::__cxx11::filesystem_error
+std::filesystem::__cxx11::filesystem_error::_ZTVNSt10filesystem7__cxx1116filesystem_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt10filesystem7__cxx1116filesystem_errorE)
+16 (int (*)(...))std::filesystem::__cxx11::filesystem_error::~filesystem_error
+24 (int (*)(...))std::filesystem::__cxx11::filesystem_error::~filesystem_error
+32 (int (*)(...))std::filesystem::__cxx11::filesystem_error::what
+
+Class std::filesystem::__cxx11::filesystem_error
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::filesystem_error (0x0x7f25ca28e5b0) 0
+ vptr=((& std::filesystem::__cxx11::filesystem_error::_ZTVNSt10filesystem7__cxx1116filesystem_errorE) + 16)
+ std::system_error (0x0x7f25ca28e618) 0
+ primary-for std::filesystem::__cxx11::filesystem_error (0x0x7f25ca28e5b0)
+ std::runtime_error (0x0x7f25ca28e680) 0
+ primary-for std::system_error (0x0x7f25ca28e618)
+ std::exception (0x0x7f25ca2a6240) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f25ca28e680)
+
+Class std::filesystem::__cxx11::path::_Cmpt
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::path::_Cmpt (0x0x7f25ca2fe000) 0
+ std::filesystem::__cxx11::path (0x0x7f25ca2a6d20) 0
+
+Class std::filesystem::__cxx11::path::iterator
+ size=24 align=8
+ base size=17 base align=8
+std::filesystem::__cxx11::path::iterator (0x0x7f25ca305f60) 0
+
+Class std::filesystem::file_status
+ size=8 align=4
+ base size=8 base align=4
+std::filesystem::file_status (0x0x7f25ca3d3780) 0
+
+Class std::filesystem::__cxx11::directory_entry
+ size=48 align=8
+ base size=41 base align=8
+std::filesystem::__cxx11::directory_entry (0x0x7f25ca3d3c60) 0
+
+Class std::filesystem::__cxx11::__directory_iterator_proxy
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::__directory_iterator_proxy (0x0x7f25ca06c360) 0
+
+Class std::filesystem::__cxx11::directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::directory_iterator (0x0x7f25ca06cae0) 0
+
+Class std::filesystem::__cxx11::recursive_directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::recursive_directory_iterator (0x0x7f25ca0ebc00) 0
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f25ca1b1d80) 0 empty
+
+Vtable for QFile
+QFile::_ZTV5QFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QFile)
+16 (int (*)(...))QFile::metaObject
+24 (int (*)(...))QFile::qt_metacast
+32 (int (*)(...))QFile::qt_metacall
+40 (int (*)(...))QFile::~QFile
+48 (int (*)(...))QFile::~QFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QFile::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFile::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QFile::fileName
+256 (int (*)(...))QFile::resize
+264 (int (*)(...))QFile::permissions
+272 (int (*)(...))QFile::setPermissions
+
+Class QFile
+ size=16 align=8
+ base size=16 base align=8
+QFile (0x0x7f25ca1cea90) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+ QFileDevice (0x0x7f25ca1ceaf8) 0
+ primary-for QFile (0x0x7f25ca1cea90)
+ QIODevice (0x0x7f25ca290c40) 0
+ primary-for QFileDevice (0x0x7f25ca1ceaf8)
+ QObject (0x0x7f25ca1b1cc0) 0
+ primary-for QIODevice (0x0x7f25ca290c40)
+ QIODeviceBase (0x0x7f25ca1b1d20) 0 empty
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f25ca1fb3c0) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f25c9e88d20) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f25c9f86480) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f25c9f86900) 0
+
+Vtable for QFactoryInterface
+QFactoryInterface::_ZTV17QFactoryInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFactoryInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QFactoryInterface
+ size=8 align=8
+ base size=8 base align=8
+QFactoryInterface (0x0x7f25c9cb30c0) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f25c9cb3300) 0 empty
+
+Vtable for QFileSelector
+QFileSelector::_ZTV13QFileSelector: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QFileSelector)
+16 (int (*)(...))QFileSelector::metaObject
+24 (int (*)(...))QFileSelector::qt_metacast
+32 (int (*)(...))QFileSelector::qt_metacall
+40 (int (*)(...))QFileSelector::~QFileSelector
+48 (int (*)(...))QFileSelector::~QFileSelector
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSelector
+ size=16 align=8
+ base size=16 base align=8
+QFileSelector (0x0x7f25c9c72c98) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+ QObject (0x0x7f25c9cb32a0) 0
+ primary-for QFileSelector (0x0x7f25c9c72c98)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f25c9cb34e0) 0 empty
+
+Vtable for QFileSystemWatcher
+QFileSystemWatcher::_ZTV18QFileSystemWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFileSystemWatcher)
+16 (int (*)(...))QFileSystemWatcher::metaObject
+24 (int (*)(...))QFileSystemWatcher::qt_metacast
+32 (int (*)(...))QFileSystemWatcher::qt_metacall
+40 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+48 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSystemWatcher
+ size=16 align=8
+ base size=16 base align=8
+QFileSystemWatcher (0x0x7f25c9c72d00) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+ QObject (0x0x7f25c9cb3480) 0
+ primary-for QFileSystemWatcher (0x0x7f25c9c72d00)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f25c9cb3c60) 0 empty
+
+Vtable for QFutureWatcherBase
+QFutureWatcherBase::_ZTV18QFutureWatcherBase: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFutureWatcherBase)
+16 (int (*)(...))QFutureWatcherBase::metaObject
+24 (int (*)(...))QFutureWatcherBase::qt_metacast
+32 (int (*)(...))QFutureWatcherBase::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QFutureWatcherBase::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QFutureWatcherBase::connectNotify
+104 (int (*)(...))QFutureWatcherBase::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QFutureWatcherBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureWatcherBase (0x0x7f25c9c72d68) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+ QObject (0x0x7f25c9cb3c00) 0
+ primary-for QFutureWatcherBase (0x0x7f25c9c72d68)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f25c9cf61e0) 0 empty
+
+Vtable for QIdentityProxyModel
+QIdentityProxyModel::_ZTV19QIdentityProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QIdentityProxyModel)
+16 (int (*)(...))QIdentityProxyModel::metaObject
+24 (int (*)(...))QIdentityProxyModel::qt_metacast
+32 (int (*)(...))QIdentityProxyModel::qt_metacall
+40 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+48 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIdentityProxyModel::index
+120 (int (*)(...))QIdentityProxyModel::parent
+128 (int (*)(...))QIdentityProxyModel::sibling
+136 (int (*)(...))QIdentityProxyModel::rowCount
+144 (int (*)(...))QIdentityProxyModel::columnCount
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QIdentityProxyModel::headerData
+184 (int (*)(...))QAbstractProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QIdentityProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QIdentityProxyModel::insertRows
+272 (int (*)(...))QIdentityProxyModel::insertColumns
+280 (int (*)(...))QIdentityProxyModel::removeRows
+288 (int (*)(...))QIdentityProxyModel::removeColumns
+296 (int (*)(...))QIdentityProxyModel::moveRows
+304 (int (*)(...))QIdentityProxyModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QAbstractProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QIdentityProxyModel::match
+360 (int (*)(...))QAbstractProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QIdentityProxyModel::setSourceModel
+416 (int (*)(...))QIdentityProxyModel::mapToSource
+424 (int (*)(...))QIdentityProxyModel::mapFromSource
+432 (int (*)(...))QIdentityProxyModel::mapSelectionToSource
+440 (int (*)(...))QIdentityProxyModel::mapSelectionFromSource
+
+Class QIdentityProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QIdentityProxyModel (0x0x7f25c9c72f70) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f25c9cfa000) 0
+ primary-for QIdentityProxyModel (0x0x7f25c9c72f70)
+ QAbstractItemModel (0x0x7f25c9cfa068) 0
+ primary-for QAbstractProxyModel (0x0x7f25c9cfa000)
+ QObject (0x0x7f25c9cf6180) 0
+ primary-for QAbstractItemModel (0x0x7f25c9cfa068)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f25c9cf6360) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f25c9d5af60) 0 empty
+
+Vtable for QItemSelectionModel
+QItemSelectionModel::_ZTV19QItemSelectionModel: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QItemSelectionModel)
+16 (int (*)(...))QItemSelectionModel::metaObject
+24 (int (*)(...))QItemSelectionModel::qt_metacast
+32 (int (*)(...))QItemSelectionModel::qt_metacall
+40 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+48 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QItemSelectionModel::setCurrentIndex
+120 (int (*)(...))QItemSelectionModel::select
+128 (int (*)(...))QItemSelectionModel::select
+136 (int (*)(...))QItemSelectionModel::clear
+144 (int (*)(...))QItemSelectionModel::reset
+152 (int (*)(...))QItemSelectionModel::clearCurrentIndex
+
+Class QItemSelectionModel
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionModel (0x0x7f25c9d66e38) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+ QObject (0x0x7f25c9d5af00) 0
+ primary-for QItemSelectionModel (0x0x7f25c9d66e38)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7f25c9dca340) 0
+ QList<QItemSelectionRange> (0x0x7f25c9dca3a8) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7f25c9dca410) 0 empty
+ QListSpecialMethodsBase<QItemSelectionRange> (0x0x7f25c9d8ca20) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7f25c9a9bb40) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7f25c9ae1060) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7f25c9b293c0) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7f25c9b29420) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7f25c9b29360) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f25c9bbdde0) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f25c9bbde40) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7f25c996c3c0) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7f25c996c420) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7f25c996c360) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f25c9a07f00) 0 empty
+
+Vtable for QLibrary
+QLibrary::_ZTV8QLibrary: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QLibrary)
+16 (int (*)(...))QLibrary::metaObject
+24 (int (*)(...))QLibrary::qt_metacast
+32 (int (*)(...))QLibrary::qt_metacall
+40 (int (*)(...))QLibrary::~QLibrary
+48 (int (*)(...))QLibrary::~QLibrary
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QLibrary
+ size=24 align=8
+ base size=24 base align=8
+QLibrary (0x0x7f25c9a12c98) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+ QObject (0x0x7f25c9a07ea0) 0
+ primary-for QLibrary (0x0x7f25c9a12c98)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f25c9645600) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f25c96455a0) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7f25c972cd80) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f25c97e6600) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f25c97e66c0) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f25c9442d80) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f25c94b8720) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f25c9500d20) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f25c9579540) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f25c9579cc0) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f25c9612600) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f25c92aa360) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7f25c92aa420) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7f25c92aa3c0) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7f25c930f660) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7f25c930f600) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7f25c93523c0) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f25c9352360) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7f25c9352a80) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7f25c9352a20) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f25c939e8a0) 0 empty
+
+Vtable for QMimeData
+QMimeData::_ZTV9QMimeData: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QMimeData)
+16 (int (*)(...))QMimeData::metaObject
+24 (int (*)(...))QMimeData::qt_metacast
+32 (int (*)(...))QMimeData::qt_metacall
+40 (int (*)(...))QMimeData::~QMimeData
+48 (int (*)(...))QMimeData::~QMimeData
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QMimeData::hasFormat
+120 (int (*)(...))QMimeData::formats
+128 (int (*)(...))QMimeData::retrieveData
+
+Class QMimeData
+ size=16 align=8
+ base size=16 base align=8
+QMimeData (0x0x7f25c93a27b8) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+ QObject (0x0x7f25c939e840) 0
+ primary-for QMimeData (0x0x7f25c93a27b8)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f25c939ea20) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f25c9030540) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f25c9030600) 0 empty
+
+Vtable for QObjectCleanupHandler
+QObjectCleanupHandler::_ZTV21QObjectCleanupHandler: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QObjectCleanupHandler)
+16 (int (*)(...))QObjectCleanupHandler::metaObject
+24 (int (*)(...))QObjectCleanupHandler::qt_metacast
+32 (int (*)(...))QObjectCleanupHandler::qt_metacall
+40 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+48 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QObjectCleanupHandler
+ size=40 align=8
+ base size=40 base align=8
+QObjectCleanupHandler (0x0x7f25c902f680) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+ QObject (0x0x7f25c90305a0) 0
+ primary-for QObjectCleanupHandler (0x0x7f25c902f680)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f25c90306c0) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f25c908e4e0) 0 empty
+
+Vtable for QParallelAnimationGroup
+QParallelAnimationGroup::_ZTV23QParallelAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QParallelAnimationGroup)
+16 (int (*)(...))QParallelAnimationGroup::metaObject
+24 (int (*)(...))QParallelAnimationGroup::qt_metacast
+32 (int (*)(...))QParallelAnimationGroup::qt_metacall
+40 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+48 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+56 (int (*)(...))QParallelAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QParallelAnimationGroup::duration
+120 (int (*)(...))QParallelAnimationGroup::updateCurrentTime
+128 (int (*)(...))QParallelAnimationGroup::updateState
+136 (int (*)(...))QParallelAnimationGroup::updateDirection
+
+Class QParallelAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QParallelAnimationGroup (0x0x7f25c90950d0) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f25c9095138) 0
+ primary-for QParallelAnimationGroup (0x0x7f25c90950d0)
+ QAbstractAnimation (0x0x7f25c90951a0) 0
+ primary-for QAnimationGroup (0x0x7f25c9095138)
+ QObject (0x0x7f25c908e480) 0
+ primary-for QAbstractAnimation (0x0x7f25c90951a0)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f25c908e6c0) 0 empty
+
+Vtable for QPauseAnimation
+QPauseAnimation::_ZTV15QPauseAnimation: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QPauseAnimation)
+16 (int (*)(...))QPauseAnimation::metaObject
+24 (int (*)(...))QPauseAnimation::qt_metacast
+32 (int (*)(...))QPauseAnimation::qt_metacall
+40 (int (*)(...))QPauseAnimation::~QPauseAnimation
+48 (int (*)(...))QPauseAnimation::~QPauseAnimation
+56 (int (*)(...))QPauseAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPauseAnimation::duration
+120 (int (*)(...))QPauseAnimation::updateCurrentTime
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QPauseAnimation
+ size=16 align=8
+ base size=16 base align=8
+QPauseAnimation (0x0x7f25c9095208) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+ QAbstractAnimation (0x0x7f25c9095270) 0
+ primary-for QPauseAnimation (0x0x7f25c9095208)
+ QObject (0x0x7f25c908e660) 0
+ primary-for QAbstractAnimation (0x0x7f25c9095270)
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7f25c908e8a0) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7f25c908e900) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f25c90de360) 0 empty
+
+Vtable for QPluginLoader
+QPluginLoader::_ZTV13QPluginLoader: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPluginLoader)
+16 (int (*)(...))QPluginLoader::metaObject
+24 (int (*)(...))QPluginLoader::qt_metacast
+32 (int (*)(...))QPluginLoader::qt_metacall
+40 (int (*)(...))QPluginLoader::~QPluginLoader
+48 (int (*)(...))QPluginLoader::~QPluginLoader
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPluginLoader
+ size=32 align=8
+ base size=25 base align=8
+QPluginLoader (0x0x7f25c90d1e38) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+ QObject (0x0x7f25c90de300) 0
+ primary-for QPluginLoader (0x0x7f25c90d1e38)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f25c90de420) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f25c914ec60) 0 empty
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7f25c914ecc0) 0 empty
+
+Vtable for QProcess
+QProcess::_ZTV8QProcess: 32 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QProcess)
+16 (int (*)(...))QProcess::metaObject
+24 (int (*)(...))QProcess::qt_metacast
+32 (int (*)(...))QProcess::qt_metacall
+40 (int (*)(...))QProcess::~QProcess
+48 (int (*)(...))QProcess::~QProcess
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QProcess::isSequential
+120 (int (*)(...))QProcess::open
+128 (int (*)(...))QProcess::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QProcess::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QProcess::waitForReadyRead
+208 (int (*)(...))QProcess::waitForBytesWritten
+216 (int (*)(...))QProcess::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QProcess::writeData
+248 (int (*)(...))QProcess::setupChildProcess
+
+Class QProcess
+ size=16 align=8
+ base size=16 base align=8
+QProcess (0x0x7f25c9151f08) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+ QIODevice (0x0x7f25c9147310) 0
+ primary-for QProcess (0x0x7f25c9151f08)
+ QObject (0x0x7f25c914eba0) 0
+ primary-for QIODevice (0x0x7f25c9147310)
+ QIODeviceBase (0x0x7f25c914ec00) 0 empty
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f25c9190a80) 0 empty
+
+Vtable for QVariantAnimation
+QVariantAnimation::_ZTV17QVariantAnimation: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QVariantAnimation)
+16 (int (*)(...))QVariantAnimation::metaObject
+24 (int (*)(...))QVariantAnimation::qt_metacast
+32 (int (*)(...))QVariantAnimation::qt_metacall
+40 (int (*)(...))QVariantAnimation::~QVariantAnimation
+48 (int (*)(...))QVariantAnimation::~QVariantAnimation
+56 (int (*)(...))QVariantAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QVariantAnimation::duration
+120 (int (*)(...))QVariantAnimation::updateCurrentTime
+128 (int (*)(...))QVariantAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+144 (int (*)(...))QVariantAnimation::updateCurrentValue
+152 (int (*)(...))QVariantAnimation::interpolated
+
+Class QVariantAnimation
+ size=16 align=8
+ base size=16 base align=8
+QVariantAnimation (0x0x7f25c9151f70) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+ QAbstractAnimation (0x0x7f25c91a8000) 0
+ primary-for QVariantAnimation (0x0x7f25c9151f70)
+ QObject (0x0x7f25c9190a20) 0
+ primary-for QAbstractAnimation (0x0x7f25c91a8000)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f25c9190cc0) 0 empty
+
+Vtable for QPropertyAnimation
+QPropertyAnimation::_ZTV18QPropertyAnimation: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QPropertyAnimation)
+16 (int (*)(...))QPropertyAnimation::metaObject
+24 (int (*)(...))QPropertyAnimation::qt_metacast
+32 (int (*)(...))QPropertyAnimation::qt_metacall
+40 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+48 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+56 (int (*)(...))QPropertyAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QVariantAnimation::duration
+120 (int (*)(...))QVariantAnimation::updateCurrentTime
+128 (int (*)(...))QPropertyAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+144 (int (*)(...))QPropertyAnimation::updateCurrentValue
+152 (int (*)(...))QVariantAnimation::interpolated
+
+Class QPropertyAnimation
+ size=16 align=8
+ base size=16 base align=8
+QPropertyAnimation (0x0x7f25c91a80d0) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+ QVariantAnimation (0x0x7f25c91a8138) 0
+ primary-for QPropertyAnimation (0x0x7f25c91a80d0)
+ QAbstractAnimation (0x0x7f25c91a81a0) 0
+ primary-for QVariantAnimation (0x0x7f25c91a8138)
+ QObject (0x0x7f25c9190c60) 0
+ primary-for QAbstractAnimation (0x0x7f25c91a81a0)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f25c8e57420) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f25c8f478a0) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f25c8f47840) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f25d1e3b720) 0
+
+Class QRandomGenerator::InitialRandomData
+ size=16 align=8
+ base size=16 base align=8
+QRandomGenerator::InitialRandomData (0x0x7f25cc8fc4e0) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f25cc8fce40) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f25cc8fc480) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f25d42b1d00) 0
+ QRandomGenerator (0x0x7f25cc0299c0) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f25cc004060) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f25cc004ae0) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f25cbe1c4e0) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f25cbc1bb40) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f25ca998900) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f25c9a39e40) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f25c90c32a0) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f25ca08a420) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f25ca08a720) 0 empty
+
+Vtable for QSaveFile
+QSaveFile::_ZTV9QSaveFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSaveFile)
+16 (int (*)(...))QSaveFile::metaObject
+24 (int (*)(...))QSaveFile::qt_metacast
+32 (int (*)(...))QSaveFile::qt_metacall
+40 (int (*)(...))QSaveFile::~QSaveFile
+48 (int (*)(...))QSaveFile::~QSaveFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QSaveFile::open
+128 (int (*)(...))QSaveFile::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFileDevice::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QSaveFile::writeData
+248 (int (*)(...))QSaveFile::fileName
+256 (int (*)(...))QFileDevice::resize
+264 (int (*)(...))QFileDevice::permissions
+272 (int (*)(...))QFileDevice::setPermissions
+
+Class QSaveFile
+ size=16 align=8
+ base size=16 base align=8
+QSaveFile (0x0x7f25d4476d68) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+ QFileDevice (0x0x7f25d4476dd0) 0
+ primary-for QSaveFile (0x0x7f25d4476d68)
+ QIODevice (0x0x7f25d09ba5b0) 0
+ primary-for QFileDevice (0x0x7f25d4476dd0)
+ QObject (0x0x7f25ca08a660) 0
+ primary-for QIODevice (0x0x7f25d09ba5b0)
+ QIODeviceBase (0x0x7f25ca08a6c0) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f25ca08aa80) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f25cc3152a0) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f25d0e32000) 0 empty
+
+Vtable for QSequentialAnimationGroup
+QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QSequentialAnimationGroup)
+16 (int (*)(...))QSequentialAnimationGroup::metaObject
+24 (int (*)(...))QSequentialAnimationGroup::qt_metacast
+32 (int (*)(...))QSequentialAnimationGroup::qt_metacall
+40 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+48 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+56 (int (*)(...))QSequentialAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSequentialAnimationGroup::duration
+120 (int (*)(...))QSequentialAnimationGroup::updateCurrentTime
+128 (int (*)(...))QSequentialAnimationGroup::updateState
+136 (int (*)(...))QSequentialAnimationGroup::updateDirection
+
+Class QSequentialAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QSequentialAnimationGroup (0x0x7f25d44e7d68) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f25d44e7dd0) 0
+ primary-for QSequentialAnimationGroup (0x0x7f25d44e7d68)
+ QAbstractAnimation (0x0x7f25d44e7e38) 0
+ primary-for QAnimationGroup (0x0x7f25d44e7dd0)
+ QObject (0x0x7f25d0deff60) 0
+ primary-for QAbstractAnimation (0x0x7f25d44e7e38)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7f25d44e7f08) 0
+ QIterator<QMetaSequence> (0x0x7f25d44f9000) 0
+ QBaseIterator<QMetaSequence> (0x0x7f25d0e32360) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7f25d44f90d0) 0
+ QConstIterator<QMetaSequence> (0x0x7f25d44f9138) 0
+ QBaseIterator<QMetaSequence> (0x0x7f25d0e32900) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7f25d44f91a0) 0
+ QIterable<QMetaSequence> (0x0x7f25d0e32e40) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f25d2870420) 0 empty
+
+Vtable for QSettings
+QSettings::_ZTV9QSettings: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSettings)
+16 (int (*)(...))QSettings::metaObject
+24 (int (*)(...))QSettings::qt_metacast
+32 (int (*)(...))QSettings::qt_metacall
+40 (int (*)(...))QSettings::~QSettings
+48 (int (*)(...))QSettings::~QSettings
+56 (int (*)(...))QSettings::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSettings
+ size=16 align=8
+ base size=16 base align=8
+QSettings (0x0x7f25d42b3618) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+ QObject (0x0x7f25d28703c0) 0
+ primary-for QSettings (0x0x7f25d42b3618)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f25d2870840) 0 empty
+
+Vtable for QSharedMemory
+QSharedMemory::_ZTV13QSharedMemory: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSharedMemory)
+16 (int (*)(...))QSharedMemory::metaObject
+24 (int (*)(...))QSharedMemory::qt_metacast
+32 (int (*)(...))QSharedMemory::qt_metacall
+40 (int (*)(...))QSharedMemory::~QSharedMemory
+48 (int (*)(...))QSharedMemory::~QSharedMemory
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSharedMemory
+ size=16 align=8
+ base size=16 base align=8
+QSharedMemory (0x0x7f25d42b3680) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+ QObject (0x0x7f25d28707e0) 0
+ primary-for QSharedMemory (0x0x7f25d42b3680)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f25d2870a20) 0 empty
+
+Vtable for QSignalMapper
+QSignalMapper::_ZTV13QSignalMapper: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSignalMapper)
+16 (int (*)(...))QSignalMapper::metaObject
+24 (int (*)(...))QSignalMapper::qt_metacast
+32 (int (*)(...))QSignalMapper::qt_metacall
+40 (int (*)(...))QSignalMapper::~QSignalMapper
+48 (int (*)(...))QSignalMapper::~QSignalMapper
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSignalMapper
+ size=16 align=8
+ base size=16 base align=8
+QSignalMapper (0x0x7f25d42b36e8) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+ QObject (0x0x7f25d28709c0) 0
+ primary-for QSignalMapper (0x0x7f25d42b36e8)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f25c8b98480) 0 empty
+
+Vtable for QSocketNotifier
+QSocketNotifier::_ZTV15QSocketNotifier: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSocketNotifier)
+16 (int (*)(...))QSocketNotifier::metaObject
+24 (int (*)(...))QSocketNotifier::qt_metacast
+32 (int (*)(...))QSocketNotifier::qt_metacall
+40 (int (*)(...))QSocketNotifier::~QSocketNotifier
+48 (int (*)(...))QSocketNotifier::~QSocketNotifier
+56 (int (*)(...))QSocketNotifier::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSocketNotifier
+ size=16 align=8
+ base size=16 base align=8
+QSocketNotifier (0x0x7f25d42bfea0) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+ QObject (0x0x7f25c8b98420) 0
+ primary-for QSocketNotifier (0x0x7f25d42bfea0)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7f25c8b98600) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f25c8baaf60) 0 empty
+
+Vtable for QSortFilterProxyModel
+QSortFilterProxyModel::_ZTV21QSortFilterProxyModel: 59 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QSortFilterProxyModel)
+16 (int (*)(...))QSortFilterProxyModel::metaObject
+24 (int (*)(...))QSortFilterProxyModel::qt_metacast
+32 (int (*)(...))QSortFilterProxyModel::qt_metacall
+40 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+48 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSortFilterProxyModel::index
+120 (int (*)(...))QSortFilterProxyModel::parent
+128 (int (*)(...))QSortFilterProxyModel::sibling
+136 (int (*)(...))QSortFilterProxyModel::rowCount
+144 (int (*)(...))QSortFilterProxyModel::columnCount
+152 (int (*)(...))QSortFilterProxyModel::hasChildren
+160 (int (*)(...))QSortFilterProxyModel::data
+168 (int (*)(...))QSortFilterProxyModel::setData
+176 (int (*)(...))QSortFilterProxyModel::headerData
+184 (int (*)(...))QSortFilterProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QSortFilterProxyModel::mimeTypes
+224 (int (*)(...))QSortFilterProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QSortFilterProxyModel::dropMimeData
+248 (int (*)(...))QSortFilterProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QSortFilterProxyModel::insertRows
+272 (int (*)(...))QSortFilterProxyModel::insertColumns
+280 (int (*)(...))QSortFilterProxyModel::removeRows
+288 (int (*)(...))QSortFilterProxyModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QSortFilterProxyModel::fetchMore
+320 (int (*)(...))QSortFilterProxyModel::canFetchMore
+328 (int (*)(...))QSortFilterProxyModel::flags
+336 (int (*)(...))QSortFilterProxyModel::sort
+344 (int (*)(...))QSortFilterProxyModel::buddy
+352 (int (*)(...))QSortFilterProxyModel::match
+360 (int (*)(...))QSortFilterProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QSortFilterProxyModel::setSourceModel
+416 (int (*)(...))QSortFilterProxyModel::mapToSource
+424 (int (*)(...))QSortFilterProxyModel::mapFromSource
+432 (int (*)(...))QSortFilterProxyModel::mapSelectionToSource
+440 (int (*)(...))QSortFilterProxyModel::mapSelectionFromSource
+448 (int (*)(...))QSortFilterProxyModel::filterAcceptsRow
+456 (int (*)(...))QSortFilterProxyModel::filterAcceptsColumn
+464 (int (*)(...))QSortFilterProxyModel::lessThan
+
+Class QSortFilterProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QSortFilterProxyModel (0x0x7f25d42cbdd0) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f25d42cbe38) 0
+ primary-for QSortFilterProxyModel (0x0x7f25d42cbdd0)
+ QAbstractItemModel (0x0x7f25d42cbea0) 0
+ primary-for QAbstractProxyModel (0x0x7f25d42cbe38)
+ QObject (0x0x7f25c8baaf00) 0
+ primary-for QAbstractItemModel (0x0x7f25d42cbea0)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f25c8bc2360) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f25c8bc2d20) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f25c8c015a0) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f25c882cde0) 0 empty
+
+Vtable for QStringListModel
+QStringListModel::_ZTV16QStringListModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QStringListModel)
+16 (int (*)(...))QStringListModel::metaObject
+24 (int (*)(...))QStringListModel::qt_metacast
+32 (int (*)(...))QStringListModel::qt_metacall
+40 (int (*)(...))QStringListModel::~QStringListModel
+48 (int (*)(...))QStringListModel::~QStringListModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QStringListModel::sibling
+136 (int (*)(...))QStringListModel::rowCount
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))QStringListModel::data
+168 (int (*)(...))QStringListModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QStringListModel::itemData
+200 (int (*)(...))QStringListModel::setItemData
+208 (int (*)(...))QStringListModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QStringListModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStringListModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QStringListModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QStringListModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStringListModel::flags
+336 (int (*)(...))QStringListModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QStringListModel
+ size=40 align=8
+ base size=40 base align=8
+QStringListModel (0x0x7f25d42dbaf8) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+ QAbstractListModel (0x0x7f25d42dbb60) 0
+ primary-for QStringListModel (0x0x7f25d42dbaf8)
+ QAbstractItemModel (0x0x7f25d42dbbc8) 0
+ primary-for QAbstractListModel (0x0x7f25d42dbb60)
+ QObject (0x0x7f25c882cd80) 0
+ primary-for QAbstractItemModel (0x0x7f25d42dbbc8)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f25c882cea0) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f25c884f000) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f25c884f180) 0 empty
+
+Vtable for QTemporaryFile
+QTemporaryFile::_ZTV14QTemporaryFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QTemporaryFile)
+16 (int (*)(...))QTemporaryFile::metaObject
+24 (int (*)(...))QTemporaryFile::qt_metacast
+32 (int (*)(...))QTemporaryFile::qt_metacall
+40 (int (*)(...))QTemporaryFile::~QTemporaryFile
+48 (int (*)(...))QTemporaryFile::~QTemporaryFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QTemporaryFile::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFile::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QTemporaryFile::fileName
+256 (int (*)(...))QFile::resize
+264 (int (*)(...))QFile::permissions
+272 (int (*)(...))QFile::setPermissions
+
+Class QTemporaryFile
+ size=16 align=8
+ base size=16 base align=8
+QTemporaryFile (0x0x7f25d42dbc30) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+ QFile (0x0x7f25d42dbc98) 0
+ primary-for QTemporaryFile (0x0x7f25d42dbc30)
+ QFileDevice (0x0x7f25d42dbd00) 0
+ primary-for QFile (0x0x7f25d42dbc98)
+ QIODevice (0x0x7f25c88471c0) 0
+ primary-for QFileDevice (0x0x7f25d42dbd00)
+ QObject (0x0x7f25c884f0c0) 0
+ primary-for QIODevice (0x0x7f25c88471c0)
+ QIODeviceBase (0x0x7f25c884f120) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7f25c884f3c0) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f25c884fa20) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f25c887d120) 0 empty
+
+Vtable for QTimeLine
+QTimeLine::_ZTV9QTimeLine: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTimeLine)
+16 (int (*)(...))QTimeLine::metaObject
+24 (int (*)(...))QTimeLine::qt_metacast
+32 (int (*)(...))QTimeLine::qt_metacall
+40 (int (*)(...))QTimeLine::~QTimeLine
+48 (int (*)(...))QTimeLine::~QTimeLine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTimeLine::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTimeLine::valueForTime
+
+Class QTimeLine
+ size=16 align=8
+ base size=16 base align=8
+QTimeLine (0x0x7f25d42dbea0) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+ QObject (0x0x7f25c887d0c0) 0
+ primary-for QTimeLine (0x0x7f25d42dbea0)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f25c887d300) 0 empty
+
+Vtable for QTimer
+QTimer::_ZTV6QTimer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QTimer)
+16 (int (*)(...))QTimer::metaObject
+24 (int (*)(...))QTimer::qt_metacast
+32 (int (*)(...))QTimer::qt_metacall
+40 (int (*)(...))QTimer::~QTimer
+48 (int (*)(...))QTimer::~QTimer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTimer::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTimer
+ size=16 align=8
+ base size=16 base align=8
+QTimer (0x0x7f25d42dbf08) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+ QObject (0x0x7f25c887d2a0) 0
+ primary-for QTimer (0x0x7f25d42dbf08)
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7f25c887dc60) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f25c887dc00) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f25c88c3cc0) 0 empty
+
+Vtable for QTranslator
+QTranslator::_ZTV11QTranslator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTranslator)
+16 (int (*)(...))QTranslator::metaObject
+24 (int (*)(...))QTranslator::qt_metacast
+32 (int (*)(...))QTranslator::qt_metacall
+40 (int (*)(...))QTranslator::~QTranslator
+48 (int (*)(...))QTranslator::~QTranslator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTranslator::translate
+120 (int (*)(...))QTranslator::isEmpty
+
+Class QTranslator
+ size=16 align=8
+ base size=16 base align=8
+QTranslator (0x0x7f25d42f3f70) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+ QObject (0x0x7f25c88c3c60) 0
+ primary-for QTranslator (0x0x7f25d42f3f70)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7f25c88c3ea0) 0 empty
+
+Vtable for QTransposeProxyModel
+QTransposeProxyModel::_ZTV20QTransposeProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTransposeProxyModel)
+16 (int (*)(...))QTransposeProxyModel::metaObject
+24 (int (*)(...))QTransposeProxyModel::qt_metacast
+32 (int (*)(...))QTransposeProxyModel::qt_metacall
+40 (int (*)(...))QTransposeProxyModel::~QTransposeProxyModel
+48 (int (*)(...))QTransposeProxyModel::~QTransposeProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTransposeProxyModel::index
+120 (int (*)(...))QTransposeProxyModel::parent
+128 (int (*)(...))QAbstractProxyModel::sibling
+136 (int (*)(...))QTransposeProxyModel::rowCount
+144 (int (*)(...))QTransposeProxyModel::columnCount
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QTransposeProxyModel::headerData
+184 (int (*)(...))QTransposeProxyModel::setHeaderData
+192 (int (*)(...))QTransposeProxyModel::itemData
+200 (int (*)(...))QTransposeProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QAbstractProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QTransposeProxyModel::insertRows
+272 (int (*)(...))QTransposeProxyModel::insertColumns
+280 (int (*)(...))QTransposeProxyModel::removeRows
+288 (int (*)(...))QTransposeProxyModel::removeColumns
+296 (int (*)(...))QTransposeProxyModel::moveRows
+304 (int (*)(...))QTransposeProxyModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QTransposeProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QTransposeProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QTransposeProxyModel::setSourceModel
+416 (int (*)(...))QTransposeProxyModel::mapToSource
+424 (int (*)(...))QTransposeProxyModel::mapFromSource
+432 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+440 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QTransposeProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QTransposeProxyModel (0x0x7f25d42f4000) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f25d42f4068) 0
+ primary-for QTransposeProxyModel (0x0x7f25d42f4000)
+ QAbstractItemModel (0x0x7f25d42f40d0) 0
+ primary-for QAbstractProxyModel (0x0x7f25d42f4068)
+ QObject (0x0x7f25c88c3e40) 0
+ primary-for QAbstractItemModel (0x0x7f25d42f40d0)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f25c88d8060) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f25c891b8a0) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7f25c891b9c0) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7f25c8935840) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7f25d430cd68) 0
+ QList<QXmlStreamAttribute> (0x0x7f25d430cdd0) 0
+ QListSpecialMethods<QXmlStreamAttribute> (0x0x7f25d430ce38) 0 empty
+ QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7f25c894d900) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f25c8980180) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7f25c898d840) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7f25c899bea0) 0
+
+Vtable for QXmlStreamEntityResolver
+QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QXmlStreamEntityResolver)
+16 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+24 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+32 (int (*)(...))QXmlStreamEntityResolver::resolveEntity
+40 (int (*)(...))QXmlStreamEntityResolver::resolveUndeclaredEntity
+
+Class QXmlStreamEntityResolver
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamEntityResolver (0x0x7f25c89b2660) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f25c89b26c0) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f25c89b2c60) 0
+
+Vtable for QPaintDevice
+QPaintDevice::_ZTV12QPaintDevice: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDevice
+ size=16 align=8
+ base size=10 base align=8
+QPaintDevice (0x0x7f25c89b2e40) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7f25c89e3900) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7f25c8a19600) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7f25c8a195a0) 0
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7f25c8659660) 0
+
+Class QPolygon
+ size=24 align=8
+ base size=24 base align=8
+QPolygon (0x0x7f25d4417958) 0
+ QList<QPoint> (0x0x7f25d44179c0) 0
+ QListSpecialMethods<QPoint> (0x0x7f25d4417a28) 0 empty
+ QListSpecialMethodsBase<QPoint> (0x0x7f25c8692360) 0 empty
+
+Class QPolygonF
+ size=24 align=8
+ base size=24 base align=8
+QPolygonF (0x0x7f25d441ec98) 0
+ QList<QPointF> (0x0x7f25d441ed00) 0
+ QListSpecialMethods<QPointF> (0x0x7f25d441ec30) 0 empty
+ QListSpecialMethodsBase<QPointF> (0x0x7f25c86d9f60) 0 empty
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7f25c8727780) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7f25c8727720) 0
+
+Class QTransform::Affine
+ size=8 align=8
+ base size=8 base align=8
+QTransform::Affine (0x0x7f25c875acc0) 0
+
+Class QTransform
+ size=80 align=8
+ base size=74 base align=8
+QTransform (0x0x7f25c875ac60) 0
+
+Vtable for QImage
+QImage::_ZTV6QImage: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QImage)
+16 (int (*)(...))QImage::~QImage
+24 (int (*)(...))QImage::~QImage
+32 (int (*)(...))QImage::devType
+40 (int (*)(...))QImage::paintEngine
+48 (int (*)(...))QImage::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QImage
+ size=24 align=8
+ base size=24 base align=8
+QImage (0x0x7f25d4035f70) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+ QPaintDevice (0x0x7f25c878a8a0) 0
+ primary-for QImage (0x0x7f25d4035f70)
+
+Vtable for QPixmap
+QPixmap::_ZTV7QPixmap: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QPixmap)
+16 (int (*)(...))QPixmap::~QPixmap
+24 (int (*)(...))QPixmap::~QPixmap
+32 (int (*)(...))QPixmap::devType
+40 (int (*)(...))QPixmap::paintEngine
+48 (int (*)(...))QPixmap::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPixmap
+ size=24 align=8
+ base size=24 base align=8
+QPixmap (0x0x7f25d40403a8) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+ QPaintDevice (0x0x7f25c87d70c0) 0
+ primary-for QPixmap (0x0x7f25d40403a8)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7f25c8805cc0) 0
+
+Vtable for QAbstractFileIconProvider
+QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAbstractFileIconProvider)
+16 (int (*)(...))QAbstractFileIconProvider::~QAbstractFileIconProvider
+24 (int (*)(...))QAbstractFileIconProvider::~QAbstractFileIconProvider
+32 (int (*)(...))QAbstractFileIconProvider::icon
+40 (int (*)(...))QAbstractFileIconProvider::icon
+48 (int (*)(...))QAbstractFileIconProvider::type
+56 (int (*)(...))QAbstractFileIconProvider::setOptions
+64 (int (*)(...))QAbstractFileIconProvider::options
+
+Class QAbstractFileIconProvider
+ size=16 align=8
+ base size=16 base align=8
+QAbstractFileIconProvider (0x0x7f25c8438060) 0
+ vptr=((& QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider) + 16)
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7f25c8438600) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7f25c846d3c0) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7f25c8491360) 0
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7f25c84eae40) 0 empty
+
+Vtable for QScreen
+QScreen::_ZTV7QScreen: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QScreen)
+16 (int (*)(...))QScreen::metaObject
+24 (int (*)(...))QScreen::qt_metacast
+32 (int (*)(...))QScreen::qt_metacall
+40 (int (*)(...))QScreen::~QScreen
+48 (int (*)(...))QScreen::~QScreen
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QScreen
+ size=16 align=8
+ base size=16 base align=8
+QScreen (0x0x7f25d14f9a90) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+ QObject (0x0x7f25c84eade0) 0
+ primary-for QScreen (0x0x7f25d14f9a90)
+
+Class QInputDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDevice::QPrivateSignal (0x0x7f25c85070c0) 0 empty
+
+Vtable for QInputDevice
+QInputDevice::_ZTV12QInputDevice: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputDevice)
+16 (int (*)(...))QInputDevice::metaObject
+24 (int (*)(...))QInputDevice::qt_metacast
+32 (int (*)(...))QInputDevice::qt_metacall
+40 (int (*)(...))QInputDevice::~QInputDevice
+48 (int (*)(...))QInputDevice::~QInputDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QInputDevice
+ size=16 align=8
+ base size=16 base align=8
+QInputDevice (0x0x7f25d15d60d0) 0
+ vptr=((& QInputDevice::_ZTV12QInputDevice) + 16)
+ QObject (0x0x7f25c8507060) 0
+ primary-for QInputDevice (0x0x7f25d15d60d0)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7f25c8507b40) 0
+
+Class QPointingDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPointingDevice::QPrivateSignal (0x0x7f25c85434e0) 0 empty
+
+Vtable for QPointingDevice
+QPointingDevice::_ZTV15QPointingDevice: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QPointingDevice)
+16 (int (*)(...))QPointingDevice::metaObject
+24 (int (*)(...))QPointingDevice::qt_metacast
+32 (int (*)(...))QPointingDevice::qt_metacall
+40 (int (*)(...))QPointingDevice::~QPointingDevice
+48 (int (*)(...))QPointingDevice::~QPointingDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPointingDevice
+ size=16 align=8
+ base size=16 base align=8
+QPointingDevice (0x0x7f25cd195c98) 0
+ vptr=((& QPointingDevice::_ZTV15QPointingDevice) + 16)
+ QInputDevice (0x0x7f25cd195d00) 0
+ primary-for QPointingDevice (0x0x7f25cd195c98)
+ QObject (0x0x7f25c8543480) 0
+ primary-for QInputDevice (0x0x7f25cd195d00)
+
+Class QEventPoint
+ size=8 align=8
+ base size=8 base align=8
+QEventPoint (0x0x7f25c8543c00) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7f25c8596b40) 0
+
+Vtable for QInputEvent
+QInputEvent::_ZTV11QInputEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QInputEvent)
+16 (int (*)(...))QInputEvent::~QInputEvent
+24 (int (*)(...))QInputEvent::~QInputEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QInputEvent
+ size=40 align=8
+ base size=40 base align=8
+QInputEvent (0x0x7f25ca961618) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+ QEvent (0x0x7f25c85c0b40) 0
+ primary-for QInputEvent (0x0x7f25ca961618)
+
+Vtable for QPointerEvent
+QPointerEvent::_ZTV13QPointerEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPointerEvent)
+16 (int (*)(...))QPointerEvent::~QPointerEvent
+24 (int (*)(...))QPointerEvent::~QPointerEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QPointerEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QPointerEvent::isBeginEvent
+64 (int (*)(...))QPointerEvent::isUpdateEvent
+72 (int (*)(...))QPointerEvent::isEndEvent
+
+Class QPointerEvent
+ size=64 align=8
+ base size=64 base align=8
+QPointerEvent (0x0x7f25ca961680) 0
+ vptr=((& QPointerEvent::_ZTV13QPointerEvent) + 16)
+ QInputEvent (0x0x7f25ca961750) 0
+ primary-for QPointerEvent (0x0x7f25ca961680)
+ QEvent (0x0x7f25c85d2060) 0
+ primary-for QInputEvent (0x0x7f25ca961750)
+
+Vtable for QSinglePointEvent
+QSinglePointEvent::_ZTV17QSinglePointEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSinglePointEvent)
+16 (int (*)(...))QSinglePointEvent::~QSinglePointEvent
+24 (int (*)(...))QSinglePointEvent::~QSinglePointEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QSinglePointEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QSinglePointEvent
+ size=80 align=8
+ base size=80 base align=8
+QSinglePointEvent (0x0x7f25ca57f6e8) 0
+ vptr=((& QSinglePointEvent::_ZTV17QSinglePointEvent) + 16)
+ QPointerEvent (0x0x7f25ca57f7b8) 0
+ primary-for QSinglePointEvent (0x0x7f25ca57f6e8)
+ QInputEvent (0x0x7f25ca57f820) 0
+ primary-for QPointerEvent (0x0x7f25ca57f7b8)
+ QEvent (0x0x7f25c85d2f60) 0
+ primary-for QInputEvent (0x0x7f25ca57f820)
+
+Vtable for QEnterEvent
+QEnterEvent::_ZTV11QEnterEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QEnterEvent)
+16 (int (*)(...))QEnterEvent::~QEnterEvent
+24 (int (*)(...))QEnterEvent::~QEnterEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QEnterEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QEnterEvent (0x0x7f25ca57f958) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+ QSinglePointEvent (0x0x7f25ca57faf8) 0
+ primary-for QEnterEvent (0x0x7f25ca57f958)
+ QPointerEvent (0x0x7f25ca57fb60) 0
+ primary-for QSinglePointEvent (0x0x7f25ca57faf8)
+ QInputEvent (0x0x7f25ca57fbc8) 0
+ primary-for QPointerEvent (0x0x7f25ca57fb60)
+ QEvent (0x0x7f25c8615420) 0
+ primary-for QInputEvent (0x0x7f25ca57fbc8)
+
+Vtable for QMouseEvent
+QMouseEvent::_ZTV11QMouseEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMouseEvent)
+16 (int (*)(...))QMouseEvent::~QMouseEvent
+24 (int (*)(...))QMouseEvent::~QMouseEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QMouseEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QMouseEvent
+ size=80 align=8
+ base size=80 base align=8
+QMouseEvent (0x0x7f25ca57fdd0) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+ QSinglePointEvent (0x0x7f25ca57fe38) 0
+ primary-for QMouseEvent (0x0x7f25ca57fdd0)
+ QPointerEvent (0x0x7f25ca23ac30) 0
+ primary-for QSinglePointEvent (0x0x7f25ca57fe38)
+ QInputEvent (0x0x7f25ca23ac98) 0
+ primary-for QPointerEvent (0x0x7f25ca23ac30)
+ QEvent (0x0x7f25c8615ba0) 0
+ primary-for QInputEvent (0x0x7f25ca23ac98)
+
+Vtable for QHoverEvent
+QHoverEvent::_ZTV11QHoverEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHoverEvent)
+16 (int (*)(...))QHoverEvent::~QHoverEvent
+24 (int (*)(...))QHoverEvent::~QHoverEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QHoverEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QHoverEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QHoverEvent
+ size=96 align=8
+ base size=96 base align=8
+QHoverEvent (0x0x7f25ca28e068) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+ QSinglePointEvent (0x0x7f25ca28e0d0) 0
+ primary-for QHoverEvent (0x0x7f25ca28e068)
+ QPointerEvent (0x0x7f25ca28eea0) 0
+ primary-for QSinglePointEvent (0x0x7f25ca28e0d0)
+ QInputEvent (0x0x7f25ca28ef08) 0
+ primary-for QPointerEvent (0x0x7f25ca28eea0)
+ QEvent (0x0x7f25c822d180) 0
+ primary-for QInputEvent (0x0x7f25ca28ef08)
+
+Vtable for QWheelEvent
+QWheelEvent::_ZTV11QWheelEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWheelEvent)
+16 (int (*)(...))QWheelEvent::~QWheelEvent
+24 (int (*)(...))QWheelEvent::~QWheelEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QWheelEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QWheelEvent::isBeginEvent
+64 (int (*)(...))QWheelEvent::isUpdateEvent
+72 (int (*)(...))QWheelEvent::isEndEvent
+
+Class QWheelEvent
+ size=96 align=8
+ base size=96 base align=8
+QWheelEvent (0x0x7f25ca28ef70) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+ QSinglePointEvent (0x0x7f25ca2feb60) 0
+ primary-for QWheelEvent (0x0x7f25ca28ef70)
+ QPointerEvent (0x0x7f25ca2febc8) 0
+ primary-for QSinglePointEvent (0x0x7f25ca2feb60)
+ QInputEvent (0x0x7f25ca2fee38) 0
+ primary-for QPointerEvent (0x0x7f25ca2febc8)
+ QEvent (0x0x7f25c822d5a0) 0
+ primary-for QInputEvent (0x0x7f25ca2fee38)
+
+Vtable for QTabletEvent
+QTabletEvent::_ZTV12QTabletEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTabletEvent)
+16 (int (*)(...))QTabletEvent::~QTabletEvent
+24 (int (*)(...))QTabletEvent::~QTabletEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QTabletEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QTabletEvent
+ size=96 align=8
+ base size=96 base align=8
+QTabletEvent (0x0x7f25ca2feea0) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+ QSinglePointEvent (0x0x7f25ca342000) 0
+ primary-for QTabletEvent (0x0x7f25ca2feea0)
+ QPointerEvent (0x0x7f25ca3421a0) 0
+ primary-for QSinglePointEvent (0x0x7f25ca342000)
+ QInputEvent (0x0x7f25ca342478) 0
+ primary-for QPointerEvent (0x0x7f25ca3421a0)
+ QEvent (0x0x7f25c822da80) 0
+ primary-for QInputEvent (0x0x7f25ca342478)
+
+Vtable for QNativeGestureEvent
+QNativeGestureEvent::_ZTV19QNativeGestureEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNativeGestureEvent)
+16 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+24 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QNativeGestureEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QNativeGestureEvent
+ size=112 align=8
+ base size=112 base align=8
+QNativeGestureEvent (0x0x7f25ca3424e0) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+ QSinglePointEvent (0x0x7f25ca3425b0) 0
+ primary-for QNativeGestureEvent (0x0x7f25ca3424e0)
+ QPointerEvent (0x0x7f25ca3c9958) 0
+ primary-for QSinglePointEvent (0x0x7f25ca3425b0)
+ QInputEvent (0x0x7f25ca3c99c0) 0
+ primary-for QPointerEvent (0x0x7f25ca3c9958)
+ QEvent (0x0x7f25c824e360) 0
+ primary-for QInputEvent (0x0x7f25ca3c99c0)
+
+Vtable for QKeyEvent
+QKeyEvent::_ZTV9QKeyEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QKeyEvent)
+16 (int (*)(...))QKeyEvent::~QKeyEvent
+24 (int (*)(...))QKeyEvent::~QKeyEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QKeyEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QKeyEvent
+ size=88 align=8
+ base size=82 base align=8
+QKeyEvent (0x0x7f25ca3c9af8) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+ QInputEvent (0x0x7f25ca3c9c98) 0
+ primary-for QKeyEvent (0x0x7f25ca3c9af8)
+ QEvent (0x0x7f25c824e900) 0
+ primary-for QInputEvent (0x0x7f25ca3c9c98)
+
+Vtable for QFocusEvent
+QFocusEvent::_ZTV11QFocusEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusEvent)
+16 (int (*)(...))QFocusEvent::~QFocusEvent
+24 (int (*)(...))QFocusEvent::~QFocusEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QFocusEvent::clone
+
+Class QFocusEvent
+ size=24 align=8
+ base size=20 base align=8
+QFocusEvent (0x0x7f25ca091680) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+ QEvent (0x0x7f25c824ef00) 0
+ primary-for QFocusEvent (0x0x7f25ca091680)
+
+Vtable for QPaintEvent
+QPaintEvent::_ZTV11QPaintEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPaintEvent)
+16 (int (*)(...))QPaintEvent::~QPaintEvent
+24 (int (*)(...))QPaintEvent::~QPaintEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QPaintEvent::clone
+
+Class QPaintEvent
+ size=48 align=8
+ base size=41 base align=8
+QPaintEvent (0x0x7f25ca0916e8) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+ QEvent (0x0x7f25c826b2a0) 0
+ primary-for QPaintEvent (0x0x7f25ca0916e8)
+
+Vtable for QMoveEvent
+QMoveEvent::_ZTV10QMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QMoveEvent)
+16 (int (*)(...))QMoveEvent::~QMoveEvent
+24 (int (*)(...))QMoveEvent::~QMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QMoveEvent::clone
+
+Class QMoveEvent
+ size=32 align=8
+ base size=32 base align=8
+QMoveEvent (0x0x7f25c9e424e0) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+ QEvent (0x0x7f25c826b5a0) 0
+ primary-for QMoveEvent (0x0x7f25c9e424e0)
+
+Vtable for QExposeEvent
+QExposeEvent::_ZTV12QExposeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QExposeEvent)
+16 (int (*)(...))QExposeEvent::~QExposeEvent
+24 (int (*)(...))QExposeEvent::~QExposeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QExposeEvent::clone
+
+Class QExposeEvent
+ size=24 align=8
+ base size=24 base align=8
+QExposeEvent (0x0x7f25c9e42548) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+ QEvent (0x0x7f25c826b900) 0
+ primary-for QExposeEvent (0x0x7f25c9e42548)
+
+Vtable for QPlatformSurfaceEvent
+QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QPlatformSurfaceEvent)
+16 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+24 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QPlatformSurfaceEvent::clone
+
+Class QPlatformSurfaceEvent
+ size=24 align=8
+ base size=20 base align=8
+QPlatformSurfaceEvent (0x0x7f25c9e42680) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+ QEvent (0x0x7f25c826bba0) 0
+ primary-for QPlatformSurfaceEvent (0x0x7f25c9e42680)
+
+Vtable for QResizeEvent
+QResizeEvent::_ZTV12QResizeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QResizeEvent)
+16 (int (*)(...))QResizeEvent::~QResizeEvent
+24 (int (*)(...))QResizeEvent::~QResizeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QResizeEvent::clone
+
+Class QResizeEvent
+ size=32 align=8
+ base size=32 base align=8
+QResizeEvent (0x0x7f25c9e42820) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+ QEvent (0x0x7f25c826bea0) 0
+ primary-for QResizeEvent (0x0x7f25c9e42820)
+
+Vtable for QCloseEvent
+QCloseEvent::_ZTV11QCloseEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QCloseEvent)
+16 (int (*)(...))QCloseEvent::~QCloseEvent
+24 (int (*)(...))QCloseEvent::~QCloseEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QCloseEvent
+ size=16 align=8
+ base size=16 base align=8
+QCloseEvent (0x0x7f25c9e428f0) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+ QEvent (0x0x7f25c8288240) 0
+ primary-for QCloseEvent (0x0x7f25c9e428f0)
+
+Vtable for QIconDragEvent
+QIconDragEvent::_ZTV14QIconDragEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QIconDragEvent)
+16 (int (*)(...))QIconDragEvent::~QIconDragEvent
+24 (int (*)(...))QIconDragEvent::~QIconDragEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QIconDragEvent
+ size=16 align=8
+ base size=16 base align=8
+QIconDragEvent (0x0x7f25c9e42958) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+ QEvent (0x0x7f25c82882a0) 0
+ primary-for QIconDragEvent (0x0x7f25c9e42958)
+
+Vtable for QShowEvent
+QShowEvent::_ZTV10QShowEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QShowEvent)
+16 (int (*)(...))QShowEvent::~QShowEvent
+24 (int (*)(...))QShowEvent::~QShowEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QShowEvent
+ size=16 align=8
+ base size=16 base align=8
+QShowEvent (0x0x7f25c9e42a90) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+ QEvent (0x0x7f25c8288300) 0
+ primary-for QShowEvent (0x0x7f25c9e42a90)
+
+Vtable for QHideEvent
+QHideEvent::_ZTV10QHideEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHideEvent)
+16 (int (*)(...))QHideEvent::~QHideEvent
+24 (int (*)(...))QHideEvent::~QHideEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QHideEvent
+ size=16 align=8
+ base size=16 base align=8
+QHideEvent (0x0x7f25c9e42c30) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+ QEvent (0x0x7f25c8288360) 0
+ primary-for QHideEvent (0x0x7f25c9e42c30)
+
+Vtable for QContextMenuEvent
+QContextMenuEvent::_ZTV17QContextMenuEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QContextMenuEvent)
+16 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+24 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QContextMenuEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QContextMenuEvent
+ size=64 align=8
+ base size=57 base align=8
+QContextMenuEvent (0x0x7f25c9e42e38) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+ QInputEvent (0x0x7f25c9e4f0d0) 0
+ primary-for QContextMenuEvent (0x0x7f25c9e42e38)
+ QEvent (0x0x7f25c82883c0) 0
+ primary-for QInputEvent (0x0x7f25c9e4f0d0)
+
+Class QInputMethodEvent::Attribute
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodEvent::Attribute (0x0x7f25c8288960) 0
+
+Vtable for QInputMethodEvent
+QInputMethodEvent::_ZTV17QInputMethodEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QInputMethodEvent)
+16 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+24 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputMethodEvent::clone
+
+Class QInputMethodEvent
+ size=96 align=8
+ base size=96 base align=8
+QInputMethodEvent (0x0x7f25c9e4f5b0) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+ QEvent (0x0x7f25c8288900) 0
+ primary-for QInputMethodEvent (0x0x7f25c9e4f5b0)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=40 align=8
+ base size=40 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7f25c82e8180) 0
+
+Vtable for QInputMethodQueryEvent
+QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QInputMethodQueryEvent)
+16 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+24 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputMethodQueryEvent::clone
+
+Class QInputMethodQueryEvent
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodQueryEvent (0x0x7f25c9766410) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+ QEvent (0x0x7f25c82e8120) 0
+ primary-for QInputMethodQueryEvent (0x0x7f25c9766410)
+
+Vtable for QDropEvent
+QDropEvent::_ZTV10QDropEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDropEvent)
+16 (int (*)(...))QDropEvent::~QDropEvent
+24 (int (*)(...))QDropEvent::~QDropEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDropEvent::clone
+
+Class QDropEvent
+ size=64 align=8
+ base size=64 base align=8
+QDropEvent (0x0x7f25c91513a8) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+ QEvent (0x0x7f25c832d2a0) 0
+ primary-for QDropEvent (0x0x7f25c91513a8)
+
+Vtable for QDragMoveEvent
+QDragMoveEvent::_ZTV14QDragMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDragMoveEvent)
+16 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+24 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDragMoveEvent::clone
+
+Class QDragMoveEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragMoveEvent (0x0x7f25c9151410) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+ QDropEvent (0x0x7f25c91515b0) 0
+ primary-for QDragMoveEvent (0x0x7f25c9151410)
+ QEvent (0x0x7f25c832d9c0) 0
+ primary-for QDropEvent (0x0x7f25c91515b0)
+
+Vtable for QDragEnterEvent
+QDragEnterEvent::_ZTV15QDragEnterEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragEnterEvent)
+16 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+24 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDragMoveEvent::clone
+
+Class QDragEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragEnterEvent (0x0x7f25c91517b8) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+ QDragMoveEvent (0x0x7f25c9151a28) 0
+ primary-for QDragEnterEvent (0x0x7f25c91517b8)
+ QDropEvent (0x0x7f25c9151d00) 0
+ primary-for QDragMoveEvent (0x0x7f25c9151a28)
+ QEvent (0x0x7f25c832de40) 0
+ primary-for QDropEvent (0x0x7f25c9151d00)
+
+Vtable for QDragLeaveEvent
+QDragLeaveEvent::_ZTV15QDragLeaveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragLeaveEvent)
+16 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+24 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QDragLeaveEvent
+ size=16 align=8
+ base size=16 base align=8
+QDragLeaveEvent (0x0x7f25c9151d68) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+ QEvent (0x0x7f25c832dea0) 0
+ primary-for QDragLeaveEvent (0x0x7f25c9151d68)
+
+Vtable for QHelpEvent
+QHelpEvent::_ZTV10QHelpEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHelpEvent)
+16 (int (*)(...))QHelpEvent::~QHelpEvent
+24 (int (*)(...))QHelpEvent::~QHelpEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QHelpEvent::clone
+
+Class QHelpEvent
+ size=32 align=8
+ base size=32 base align=8
+QHelpEvent (0x0x7f25c91a8750) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+ QEvent (0x0x7f25c832df00) 0
+ primary-for QHelpEvent (0x0x7f25c91a8750)
+
+Vtable for QStatusTipEvent
+QStatusTipEvent::_ZTV15QStatusTipEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QStatusTipEvent)
+16 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+24 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QStatusTipEvent::clone
+
+Class QStatusTipEvent
+ size=40 align=8
+ base size=40 base align=8
+QStatusTipEvent (0x0x7f25c91a87b8) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+ QEvent (0x0x7f25c834c420) 0
+ primary-for QStatusTipEvent (0x0x7f25c91a87b8)
+
+Vtable for QWhatsThisClickedEvent
+QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QWhatsThisClickedEvent)
+16 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+24 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QWhatsThisClickedEvent::clone
+
+Class QWhatsThisClickedEvent
+ size=40 align=8
+ base size=40 base align=8
+QWhatsThisClickedEvent (0x0x7f25c91a8820) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+ QEvent (0x0x7f25c834c6c0) 0
+ primary-for QWhatsThisClickedEvent (0x0x7f25c91a8820)
+
+Vtable for QActionEvent
+QActionEvent::_ZTV12QActionEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionEvent)
+16 (int (*)(...))QActionEvent::~QActionEvent
+24 (int (*)(...))QActionEvent::~QActionEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QActionEvent::clone
+
+Class QActionEvent
+ size=32 align=8
+ base size=32 base align=8
+QActionEvent (0x0x7f25c91a8888) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+ QEvent (0x0x7f25c834c960) 0
+ primary-for QActionEvent (0x0x7f25c91a8888)
+
+Vtable for QFileOpenEvent
+QFileOpenEvent::_ZTV14QFileOpenEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QFileOpenEvent)
+16 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+24 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QFileOpenEvent::clone
+
+Class QFileOpenEvent
+ size=48 align=8
+ base size=48 base align=8
+QFileOpenEvent (0x0x7f25c91a88f0) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+ QEvent (0x0x7f25c834ccc0) 0
+ primary-for QFileOpenEvent (0x0x7f25c91a88f0)
+
+Vtable for QToolBarChangeEvent
+QToolBarChangeEvent::_ZTV19QToolBarChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QToolBarChangeEvent)
+16 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+24 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QToolBarChangeEvent::clone
+
+Class QToolBarChangeEvent
+ size=24 align=8
+ base size=17 base align=8
+QToolBarChangeEvent (0x0x7f25c91a8958) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+ QEvent (0x0x7f25c8364000) 0
+ primary-for QToolBarChangeEvent (0x0x7f25c91a8958)
+
+Vtable for QShortcutEvent
+QShortcutEvent::_ZTV14QShortcutEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QShortcutEvent)
+16 (int (*)(...))QShortcutEvent::~QShortcutEvent
+24 (int (*)(...))QShortcutEvent::~QShortcutEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QShortcutEvent::clone
+
+Class QShortcutEvent
+ size=32 align=8
+ base size=29 base align=8
+QShortcutEvent (0x0x7f25c91a89c0) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+ QEvent (0x0x7f25c8364300) 0
+ primary-for QShortcutEvent (0x0x7f25c91a89c0)
+
+Vtable for QWindowStateChangeEvent
+QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QWindowStateChangeEvent)
+16 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+24 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QWindowStateChangeEvent::clone
+
+Class QWindowStateChangeEvent
+ size=24 align=8
+ base size=21 base align=8
+QWindowStateChangeEvent (0x0x7f25c91a8a28) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+ QEvent (0x0x7f25c8364660) 0
+ primary-for QWindowStateChangeEvent (0x0x7f25c91a8a28)
+
+Vtable for QTouchEvent
+QTouchEvent::_ZTV11QTouchEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTouchEvent)
+16 (int (*)(...))QTouchEvent::~QTouchEvent
+24 (int (*)(...))QTouchEvent::~QTouchEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QTouchEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QTouchEvent::isBeginEvent
+64 (int (*)(...))QTouchEvent::isUpdateEvent
+72 (int (*)(...))QTouchEvent::isEndEvent
+
+Class QTouchEvent
+ size=80 align=8
+ base size=79 base align=8
+QTouchEvent (0x0x7f25c91a8a90) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+ QPointerEvent (0x0x7f25c91a8af8) 0
+ primary-for QTouchEvent (0x0x7f25c91a8a90)
+ QInputEvent (0x0x7f25c91a8b60) 0
+ primary-for QPointerEvent (0x0x7f25c91a8af8)
+ QEvent (0x0x7f25c8364960) 0
+ primary-for QInputEvent (0x0x7f25c91a8b60)
+
+Vtable for QScrollPrepareEvent
+QScrollPrepareEvent::_ZTV19QScrollPrepareEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollPrepareEvent)
+16 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+24 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScrollPrepareEvent::clone
+
+Class QScrollPrepareEvent
+ size=96 align=8
+ base size=96 base align=8
+QScrollPrepareEvent (0x0x7f25c91a8bc8) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+ QEvent (0x0x7f25c8364cc0) 0
+ primary-for QScrollPrepareEvent (0x0x7f25c91a8bc8)
+
+Vtable for QScrollEvent
+QScrollEvent::_ZTV12QScrollEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QScrollEvent)
+16 (int (*)(...))QScrollEvent::~QScrollEvent
+24 (int (*)(...))QScrollEvent::~QScrollEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScrollEvent::clone
+
+Class QScrollEvent
+ size=56 align=8
+ base size=52 base align=8
+QScrollEvent (0x0x7f25c91a8c30) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+ QEvent (0x0x7f25c8385120) 0
+ primary-for QScrollEvent (0x0x7f25c91a8c30)
+
+Vtable for QScreenOrientationChangeEvent
+QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QScreenOrientationChangeEvent)
+16 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+24 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScreenOrientationChangeEvent::clone
+
+Class QScreenOrientationChangeEvent
+ size=32 align=8
+ base size=28 base align=8
+QScreenOrientationChangeEvent (0x0x7f25c91a8c98) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+ QEvent (0x0x7f25c83854e0) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7f25c91a8c98)
+
+Vtable for QApplicationStateChangeEvent
+QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QApplicationStateChangeEvent)
+16 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+24 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QApplicationStateChangeEvent::clone
+
+Class QApplicationStateChangeEvent
+ size=24 align=8
+ base size=20 base align=8
+QApplicationStateChangeEvent (0x0x7f25c91a8d00) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+ QEvent (0x0x7f25c8385840) 0
+ primary-for QApplicationStateChangeEvent (0x0x7f25c91a8d00)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7f25c8385b40) 0
+
+Class QFontDatabase
+ size=1 align=1
+ base size=0 base align=1
+QFontDatabase (0x0x7f25c83d8cc0) 0 empty
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7f25c83d8ea0) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7f25c8411f60) 0
+
+Class QBrushDataPointerDeleter
+ size=1 align=1
+ base size=0 base align=1
+QBrushDataPointerDeleter (0x0x7f25c8053780) 0 empty
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7f25c80537e0) 0
+
+Class QBrushData
+ size=104 align=8
+ base size=104 base align=8
+QBrushData (0x0x7f25c811e240) 0
+
+Class QGradient::QGradientData
+ size=48 align=8
+ base size=48 base align=8
+QGradient::QGradientData (0x0x7f25c811e480) 0
+
+Class QGradient
+ size=88 align=8
+ base size=88 base align=8
+QGradient (0x0x7f25c811e420) 0
+
+Class QLinearGradient
+ size=88 align=8
+ base size=88 base align=8
+QLinearGradient (0x0x7f25c811abc8) 0
+ QGradient (0x0x7f25c8178300) 0
+
+Class QRadialGradient
+ size=88 align=8
+ base size=88 base align=8
+QRadialGradient (0x0x7f25c811ac30) 0
+ QGradient (0x0x7f25c8178420) 0
+
+Class QConicalGradient
+ size=88 align=8
+ base size=88 base align=8
+QConicalGradient (0x0x7f25c811ac98) 0
+ QGradient (0x0x7f25c8178540) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7f25c8178600) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7f25c81ce720) 0
+
+Class QTextOption
+ size=24 align=8
+ base size=24 base align=8
+QTextOption (0x0x7f25c81ce6c0) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7f25c81f8ae0) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7f25c7e2b7e0) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7f25c7ec4750) 0
+ QTextFormat (0x0x7f25c7ebdf60) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7f25c7f254e0) 0
+ QTextFormat (0x0x7f25c7f28480) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7f25c7f58138) 0
+ QTextFormat (0x0x7f25c7f519c0) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7f25c7f72d00) 0
+ QTextCharFormat (0x0x7f25c7f72d68) 0
+ QTextFormat (0x0x7f25c7f768a0) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7f25c7f9a9c0) 0
+ QTextFormat (0x0x7f25c7f9c720) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7f25c7fcb618) 0
+ QTextFrameFormat (0x0x7f25c7fcb680) 0
+ QTextFormat (0x0x7f25c7fc8b40) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7f25c7ffa2d8) 0
+ QTextCharFormat (0x0x7f25c7ffa340) 0
+ QTextFormat (0x0x7f25c7feede0) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7f25c7c2d360) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7f25c7c7fa20) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7f25c7c7fe40) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7f25c7c7fde0) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7f25c7ce8f00) 0
+
+Vtable for QAbstractUndoItem
+QAbstractUndoItem::_ZTV17QAbstractUndoItem: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAbstractUndoItem)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractUndoItem
+ size=8 align=8
+ base size=8 base align=8
+QAbstractUndoItem (0x0x7f25c7d083c0) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7f25c7d08660) 0 empty
+
+Vtable for QTextDocument
+QTextDocument::_ZTV13QTextDocument: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QTextDocument)
+16 (int (*)(...))QTextDocument::metaObject
+24 (int (*)(...))QTextDocument::qt_metacast
+32 (int (*)(...))QTextDocument::qt_metacall
+40 (int (*)(...))QTextDocument::~QTextDocument
+48 (int (*)(...))QTextDocument::~QTextDocument
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextDocument::clear
+120 (int (*)(...))QTextDocument::createObject
+128 (int (*)(...))QTextDocument::loadResource
+
+Class QTextDocument
+ size=16 align=8
+ base size=16 base align=8
+QTextDocument (0x0x7f25c7ceff70) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+ QObject (0x0x7f25c7d08600) 0
+ primary-for QTextDocument (0x0x7f25c7ceff70)
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7f25c7d08f00) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7f25c7dd4360) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7f25c7dd43c0) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=80 align=8
+ base size=80 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7f25c7dd4420) 0
+
+Vtable for QAbstractTextDocumentLayout
+QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAbstractTextDocumentLayout)
+16 (int (*)(...))QAbstractTextDocumentLayout::metaObject
+24 (int (*)(...))QAbstractTextDocumentLayout::qt_metacast
+32 (int (*)(...))QAbstractTextDocumentLayout::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractTextDocumentLayout::resizeInlineObject
+176 (int (*)(...))QAbstractTextDocumentLayout::positionInlineObject
+184 (int (*)(...))QAbstractTextDocumentLayout::drawInlineObject
+
+Class QAbstractTextDocumentLayout
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTextDocumentLayout (0x0x7f25c7dcc3a8) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+ QObject (0x0x7f25c7dd4300) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f25c7dcc3a8)
+
+Vtable for QTextObjectInterface
+QTextObjectInterface::_ZTV20QTextObjectInterface: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextObjectInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QTextObjectInterface
+ size=8 align=8
+ base size=8 base align=8
+QTextObjectInterface (0x0x7f25c7a5f9c0) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7f25c7a5fc00) 0
+
+Vtable for QAccessible::ActivationObserver
+QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN11QAccessible18ActivationObserverE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessible::ActivationObserver
+ size=8 align=8
+ base size=8 base align=8
+QAccessible::ActivationObserver (0x0x7f25c7a5fc60) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7f25c7a5fba0) 0 empty
+
+Vtable for QAccessibleInterface
+QAccessibleInterface::_ZTV20QAccessibleInterface: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAccessibleInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QAccessibleInterface::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleInterface::focusChild
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleInterface (0x0x7f25c7a8a5a0) 0 nearly-empty
+ vptr=((& QAccessibleInterface::_ZTV20QAccessibleInterface) + 16)
+
+Vtable for QAccessibleTextInterface
+QAccessibleTextInterface::_ZTV24QAccessibleTextInterface: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAccessibleTextInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))QAccessibleTextInterface::textBeforeOffset
+104 (int (*)(...))QAccessibleTextInterface::textAfterOffset
+112 (int (*)(...))QAccessibleTextInterface::textAtOffset
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTextInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTextInterface (0x0x7f25c7a8a960) 0 nearly-empty
+ vptr=((& QAccessibleTextInterface::_ZTV24QAccessibleTextInterface) + 16)
+
+Vtable for QAccessibleEditableTextInterface
+QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleEditableTextInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleEditableTextInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleEditableTextInterface (0x0x7f25c7a8a9c0) 0 nearly-empty
+ vptr=((& QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface) + 16)
+
+Vtable for QAccessibleValueInterface
+QAccessibleValueInterface::_ZTV25QAccessibleValueInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleValueInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleValueInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleValueInterface (0x0x7f25c7a8aa20) 0 nearly-empty
+ vptr=((& QAccessibleValueInterface::_ZTV25QAccessibleValueInterface) + 16)
+
+Vtable for QAccessibleTableCellInterface
+QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTableCellInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTableCellInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTableCellInterface (0x0x7f25c7a8aa80) 0 nearly-empty
+ vptr=((& QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface) + 16)
+
+Vtable for QAccessibleTableInterface
+QAccessibleTableInterface::_ZTV25QAccessibleTableInterface: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleTableInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTableInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTableInterface (0x0x7f25c7a8aae0) 0 nearly-empty
+ vptr=((& QAccessibleTableInterface::_ZTV25QAccessibleTableInterface) + 16)
+
+Vtable for QAccessibleActionInterface
+QAccessibleActionInterface::_ZTV26QAccessibleActionInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleActionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QAccessibleActionInterface::localizedActionName
+48 (int (*)(...))QAccessibleActionInterface::localizedActionDescription
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleActionInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleActionInterface (0x0x7f25c7a8ab40) 0 nearly-empty
+ vptr=((& QAccessibleActionInterface::_ZTV26QAccessibleActionInterface) + 16)
+
+Vtable for QAccessibleImageInterface
+QAccessibleImageInterface::_ZTV25QAccessibleImageInterface: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleImageInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleImageInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleImageInterface (0x0x7f25c7a8ac00) 0 nearly-empty
+ vptr=((& QAccessibleImageInterface::_ZTV25QAccessibleImageInterface) + 16)
+
+Vtable for QAccessibleHyperlinkInterface
+QAccessibleHyperlinkInterface::_ZTV29QAccessibleHyperlinkInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleHyperlinkInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleHyperlinkInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleHyperlinkInterface (0x0x7f25c7a8ac60) 0 nearly-empty
+ vptr=((& QAccessibleHyperlinkInterface::_ZTV29QAccessibleHyperlinkInterface) + 16)
+
+Vtable for QAccessibleEvent
+QAccessibleEvent::_ZTV16QAccessibleEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAccessibleEvent)
+16 (int (*)(...))QAccessibleEvent::~QAccessibleEvent
+24 (int (*)(...))QAccessibleEvent::~QAccessibleEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleEvent
+ size=32 align=8
+ base size=28 base align=8
+QAccessibleEvent (0x0x7f25c7a8acc0) 0
+ vptr=((& QAccessibleEvent::_ZTV16QAccessibleEvent) + 16)
+
+Vtable for QAccessibleStateChangeEvent
+QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleStateChangeEvent)
+16 (int (*)(...))QAccessibleStateChangeEvent::~QAccessibleStateChangeEvent
+24 (int (*)(...))QAccessibleStateChangeEvent::~QAccessibleStateChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleStateChangeEvent
+ size=40 align=8
+ base size=40 base align=8
+QAccessibleStateChangeEvent (0x0x7f25c7a66888) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f25c7acf240) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7f25c7a66888)
+
+Vtable for QAccessibleTextCursorEvent
+QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextCursorEvent)
+16 (int (*)(...))QAccessibleTextCursorEvent::~QAccessibleTextCursorEvent
+24 (int (*)(...))QAccessibleTextCursorEvent::~QAccessibleTextCursorEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextCursorEvent
+ size=32 align=8
+ base size=32 base align=8
+QAccessibleTextCursorEvent (0x0x7f25c7a668f0) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+ QAccessibleEvent (0x0x7f25c7acf600) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f25c7a668f0)
+
+Vtable for QAccessibleTextSelectionEvent
+QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTextSelectionEvent)
+16 (int (*)(...))QAccessibleTextSelectionEvent::~QAccessibleTextSelectionEvent
+24 (int (*)(...))QAccessibleTextSelectionEvent::~QAccessibleTextSelectionEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextSelectionEvent
+ size=40 align=8
+ base size=40 base align=8
+QAccessibleTextSelectionEvent (0x0x7f25c7a66958) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f25c7a669c0) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7f25c7a66958)
+ QAccessibleEvent (0x0x7f25c7acfa20) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f25c7a669c0)
+
+Vtable for QAccessibleTextInsertEvent
+QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextInsertEvent)
+16 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+24 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextInsertEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleTextInsertEvent (0x0x7f25c7a66a28) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f25c7a66a90) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7f25c7a66a28)
+ QAccessibleEvent (0x0x7f25c7acfea0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f25c7a66a90)
+
+Vtable for QAccessibleTextRemoveEvent
+QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextRemoveEvent)
+16 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+24 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextRemoveEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleTextRemoveEvent (0x0x7f25c7a66af8) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f25c7a66b60) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7f25c7a66af8)
+ QAccessibleEvent (0x0x7f25c7ae9300) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f25c7a66b60)
+
+Vtable for QAccessibleTextUpdateEvent
+QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextUpdateEvent)
+16 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+24 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextUpdateEvent
+ size=88 align=8
+ base size=88 base align=8
+QAccessibleTextUpdateEvent (0x0x7f25c7a66bc8) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f25c7a66c30) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7f25c7a66bc8)
+ QAccessibleEvent (0x0x7f25c7ae9720) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f25c7a66c30)
+
+Vtable for QAccessibleValueChangeEvent
+QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleValueChangeEvent)
+16 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+24 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleValueChangeEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleValueChangeEvent (0x0x7f25c7a66c98) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f25c7ae9ba0) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7f25c7a66c98)
+
+Vtable for QAccessibleTableModelChangeEvent
+QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleTableModelChangeEvent)
+16 (int (*)(...))QAccessibleTableModelChangeEvent::~QAccessibleTableModelChangeEvent
+24 (int (*)(...))QAccessibleTableModelChangeEvent::~QAccessibleTableModelChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTableModelChangeEvent
+ size=48 align=8
+ base size=48 base align=8
+QAccessibleTableModelChangeEvent (0x0x7f25c7a66d00) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f25c7afe000) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7f25c7a66d00)
+
+Vtable for QAccessibleBridge
+QAccessibleBridge::_ZTV17QAccessibleBridge: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleBridge)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridge
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleBridge (0x0x7f25c7afe8a0) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7f25c7afeb40) 0 empty
+
+Vtable for QAccessibleBridgePlugin
+QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QAccessibleBridgePlugin)
+16 (int (*)(...))QAccessibleBridgePlugin::metaObject
+24 (int (*)(...))QAccessibleBridgePlugin::qt_metacast
+32 (int (*)(...))QAccessibleBridgePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridgePlugin
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleBridgePlugin (0x0x7f25c7a66d68) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+ QObject (0x0x7f25c7afeae0) 0
+ primary-for QAccessibleBridgePlugin (0x0x7f25c7a66d68)
+
+Vtable for QAccessibleObject
+QAccessibleObject::_ZTV17QAccessibleObject: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleObject)
+16 0
+24 0
+32 (int (*)(...))QAccessibleObject::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleInterface::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleInterface::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleObject::rect
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleObject
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleObject (0x0x7f25c7a66dd0) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+ QAccessibleInterface (0x0x7f25c7afec00) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f25c7a66dd0)
+
+Vtable for QAccessibleApplication
+QAccessibleApplication::_ZTV22QAccessibleApplication: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QAccessibleApplication)
+16 (int (*)(...))QAccessibleApplication::~QAccessibleApplication
+24 (int (*)(...))QAccessibleApplication::~QAccessibleApplication
+32 (int (*)(...))QAccessibleObject::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleApplication::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleApplication::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))QAccessibleApplication::parent
+88 (int (*)(...))QAccessibleApplication::child
+96 (int (*)(...))QAccessibleApplication::childCount
+104 (int (*)(...))QAccessibleApplication::indexOfChild
+112 (int (*)(...))QAccessibleApplication::text
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleObject::rect
+136 (int (*)(...))QAccessibleApplication::role
+144 (int (*)(...))QAccessibleApplication::state
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleApplication
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleApplication (0x0x7f25c7a66e38) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+ QAccessibleObject (0x0x7f25c7a66ea0) 0
+ primary-for QAccessibleApplication (0x0x7f25c7a66e38)
+ QAccessibleInterface (0x0x7f25c7afec60) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f25c7a66ea0)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7f25c7afed20) 0 empty
+
+Vtable for QAccessiblePlugin
+QAccessiblePlugin::_ZTV17QAccessiblePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessiblePlugin)
+16 (int (*)(...))QAccessiblePlugin::metaObject
+24 (int (*)(...))QAccessiblePlugin::qt_metacast
+32 (int (*)(...))QAccessiblePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessiblePlugin
+ size=16 align=8
+ base size=16 base align=8
+QAccessiblePlugin (0x0x7f25c7a66f08) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+ QObject (0x0x7f25c7afecc0) 0
+ primary-for QAccessiblePlugin (0x0x7f25c7a66f08)
+
+Class QAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAction::QPrivateSignal (0x0x7f25c7afee40) 0 empty
+
+Vtable for QAction
+QAction::_ZTV7QAction: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QAction)
+16 (int (*)(...))QAction::metaObject
+24 (int (*)(...))QAction::qt_metacast
+32 (int (*)(...))QAction::qt_metacall
+40 (int (*)(...))QAction::~QAction
+48 (int (*)(...))QAction::~QAction
+56 (int (*)(...))QAction::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QAction
+ size=16 align=8
+ base size=16 base align=8
+QAction (0x0x7f25c7a66f70) 0
+ vptr=((& QAction::_ZTV7QAction) + 16)
+ QObject (0x0x7f25c7afede0) 0
+ primary-for QAction (0x0x7f25c7a66f70)
+
+Class QActionGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QActionGroup::QPrivateSignal (0x0x7f25c7b3a780) 0 empty
+
+Vtable for QActionGroup
+QActionGroup::_ZTV12QActionGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionGroup)
+16 (int (*)(...))QActionGroup::metaObject
+24 (int (*)(...))QActionGroup::qt_metacast
+32 (int (*)(...))QActionGroup::qt_metacall
+40 (int (*)(...))QActionGroup::~QActionGroup
+48 (int (*)(...))QActionGroup::~QActionGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QActionGroup
+ size=16 align=8
+ base size=16 base align=8
+QActionGroup (0x0x7f25c7b43000) 0
+ vptr=((& QActionGroup::_ZTV12QActionGroup) + 16)
+ QObject (0x0x7f25c7b3a720) 0
+ primary-for QActionGroup (0x0x7f25c7b43000)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7f25c7b3aa20) 0
+
+Vtable for QSurface
+QSurface::_ZTV8QSurface: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSurface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+
+Class QSurface
+ size=24 align=8
+ base size=24 base align=8
+QSurface (0x0x7f25c7b68360) 0
+ vptr=((& QSurface::_ZTV8QSurface) + 16)
+
+Vtable for QBitmap
+QBitmap::_ZTV7QBitmap: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QBitmap)
+16 (int (*)(...))QBitmap::~QBitmap
+24 (int (*)(...))QBitmap::~QBitmap
+32 (int (*)(...))QPixmap::devType
+40 (int (*)(...))QPixmap::paintEngine
+48 (int (*)(...))QPixmap::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QBitmap
+ size=24 align=8
+ base size=24 base align=8
+QBitmap (0x0x7f25c7b43208) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+ QPixmap (0x0x7f25c7b43270) 0
+ primary-for QBitmap (0x0x7f25c7b43208)
+ QPaintDevice (0x0x7f25c7b689c0) 0
+ primary-for QPixmap (0x0x7f25c7b43270)
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7f25c7ba9300) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7f25c7bec540) 0 empty
+
+Vtable for QWindow
+QWindow::_ZTV7QWindow: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWindow)
+16 (int (*)(...))QWindow::metaObject
+24 (int (*)(...))QWindow::qt_metacast
+32 (int (*)(...))QWindow::qt_metacall
+40 (int (*)(...))QWindow::~QWindow
+48 (int (*)(...))QWindow::~QWindow
+56 (int (*)(...))QWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI7QWindow)
+328 (int (*)(...))QWindow::_ZThn16_N7QWindowD1Ev
+336 (int (*)(...))QWindow::_ZThn16_N7QWindowD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QWindow
+ size=40 align=8
+ base size=40 base align=8
+QWindow (0x0x7f25c7bc9310) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+ QObject (0x0x7f25c7bec480) 0
+ primary-for QWindow (0x0x7f25c7bc9310)
+ QSurface (0x0x7f25c7bec4e0) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 328)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7f25c7becde0) 0
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7f25c7becf00) 0 empty
+
+Vtable for QClipboard
+QClipboard::_ZTV10QClipboard: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QClipboard)
+16 (int (*)(...))QClipboard::metaObject
+24 (int (*)(...))QClipboard::qt_metacast
+32 (int (*)(...))QClipboard::qt_metacall
+40 (int (*)(...))QClipboard::~QClipboard
+48 (int (*)(...))QClipboard::~QClipboard
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QClipboard
+ size=16 align=8
+ base size=16 base align=8
+QClipboard (0x0x7f25c7beb958) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+ QObject (0x0x7f25c7becea0) 0
+ primary-for QClipboard (0x0x7f25c7beb958)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7f25c7838060) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7f25c7882060) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7f25c78c9de0) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7f25c78c9ea0) 0 empty
+
+Vtable for QDrag
+QDrag::_ZTV5QDrag: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDrag)
+16 (int (*)(...))QDrag::metaObject
+24 (int (*)(...))QDrag::qt_metacast
+32 (int (*)(...))QDrag::qt_metacall
+40 (int (*)(...))QDrag::~QDrag
+48 (int (*)(...))QDrag::~QDrag
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDrag
+ size=16 align=8
+ base size=16 base align=8
+QDrag (0x0x7f25c78d34e0) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+ QObject (0x0x7f25c78c9e40) 0
+ primary-for QDrag (0x0x7f25c78d34e0)
+
+Class QFileSystemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemModel::QPrivateSignal (0x0x7f25c78e40c0) 0 empty
+
+Vtable for QFileSystemModel
+QFileSystemModel::_ZTV16QFileSystemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QFileSystemModel)
+16 (int (*)(...))QFileSystemModel::metaObject
+24 (int (*)(...))QFileSystemModel::qt_metacast
+32 (int (*)(...))QFileSystemModel::qt_metacall
+40 (int (*)(...))QFileSystemModel::~QFileSystemModel
+48 (int (*)(...))QFileSystemModel::~QFileSystemModel
+56 (int (*)(...))QFileSystemModel::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QFileSystemModel::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileSystemModel::index
+120 (int (*)(...))QFileSystemModel::parent
+128 (int (*)(...))QFileSystemModel::sibling
+136 (int (*)(...))QFileSystemModel::rowCount
+144 (int (*)(...))QFileSystemModel::columnCount
+152 (int (*)(...))QFileSystemModel::hasChildren
+160 (int (*)(...))QFileSystemModel::data
+168 (int (*)(...))QFileSystemModel::setData
+176 (int (*)(...))QFileSystemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QFileSystemModel::mimeTypes
+224 (int (*)(...))QFileSystemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QFileSystemModel::dropMimeData
+248 (int (*)(...))QFileSystemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QFileSystemModel::fetchMore
+320 (int (*)(...))QFileSystemModel::canFetchMore
+328 (int (*)(...))QFileSystemModel::flags
+336 (int (*)(...))QFileSystemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QFileSystemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QFileSystemModel
+ size=16 align=8
+ base size=16 base align=8
+QFileSystemModel (0x0x7f25c78d3548) 0
+ vptr=((& QFileSystemModel::_ZTV16QFileSystemModel) + 16)
+ QAbstractItemModel (0x0x7f25c78d35b0) 0
+ primary-for QFileSystemModel (0x0x7f25c78d3548)
+ QObject (0x0x7f25c78e4060) 0
+ primary-for QAbstractItemModel (0x0x7f25c78d35b0)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7f25c78e4780) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7f25c79380c0) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7f25c7952ae0) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7f25c79e47e0) 0 empty
+
+Vtable for QGenericPlugin
+QGenericPlugin::_ZTV14QGenericPlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGenericPlugin)
+16 (int (*)(...))QGenericPlugin::metaObject
+24 (int (*)(...))QGenericPlugin::qt_metacast
+32 (int (*)(...))QGenericPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QGenericPlugin
+ size=16 align=8
+ base size=16 base align=8
+QGenericPlugin (0x0x7f25c79bd6e8) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+ QObject (0x0x7f25c79e4780) 0
+ primary-for QGenericPlugin (0x0x7f25c79bd6e8)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7f25c79e48a0) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7f25c79e4960) 0 empty
+
+Vtable for QInputMethod
+QInputMethod::_ZTV12QInputMethod: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputMethod)
+16 (int (*)(...))QInputMethod::metaObject
+24 (int (*)(...))QInputMethod::qt_metacast
+32 (int (*)(...))QInputMethod::qt_metacall
+40 (int (*)(...))QInputMethod::~QInputMethod
+48 (int (*)(...))QInputMethod::~QInputMethod
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QInputMethod
+ size=16 align=8
+ base size=16 base align=8
+QInputMethod (0x0x7f25c79bd750) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+ QObject (0x0x7f25c79e4900) 0
+ primary-for QInputMethod (0x0x7f25c79bd750)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7f25c79e4c00) 0 empty
+
+Vtable for QGuiApplication
+QGuiApplication::_ZTV15QGuiApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGuiApplication)
+16 (int (*)(...))QGuiApplication::metaObject
+24 (int (*)(...))QGuiApplication::qt_metacast
+32 (int (*)(...))QGuiApplication::qt_metacall
+40 (int (*)(...))QGuiApplication::~QGuiApplication
+48 (int (*)(...))QGuiApplication::~QGuiApplication
+56 (int (*)(...))QGuiApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGuiApplication::notify
+120 (int (*)(...))QGuiApplication::compressEvent
+
+Class QGuiApplication
+ size=16 align=8
+ base size=16 base align=8
+QGuiApplication (0x0x7f25c79bd7b8) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+ QCoreApplication (0x0x7f25c79bd820) 0
+ primary-for QGuiApplication (0x0x7f25c79bd7b8)
+ QObject (0x0x7f25c79e4ba0) 0
+ primary-for QCoreApplication (0x0x7f25c79bd820)
+
+Class QNativeInterface::QX11Application::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QX11Application::TypeInfo (0x0x7f25c79e4f00) 0 empty
+
+Vtable for QNativeInterface::QX11Application
+QNativeInterface::QX11Application::_ZTVN16QNativeInterface15QX11ApplicationE: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface15QX11ApplicationE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QX11Application
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QX11Application (0x0x7f25c79e4ea0) 0 nearly-empty
+ vptr=((& QNativeInterface::QX11Application::_ZTVN16QNativeInterface15QX11ApplicationE) + 16)
+
+Class QIconEngine::ScaledPixmapArgument
+ size=48 align=8
+ base size=48 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7f25c7a13000) 0
+
+Vtable for QIconEngine
+QIconEngine::_ZTV11QIconEngine: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QIconEngine)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QIconEngine::actualSize
+48 (int (*)(...))QIconEngine::pixmap
+56 (int (*)(...))QIconEngine::addPixmap
+64 (int (*)(...))QIconEngine::addFile
+72 (int (*)(...))QIconEngine::key
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QIconEngine::read
+96 (int (*)(...))QIconEngine::write
+104 (int (*)(...))QIconEngine::availableSizes
+112 (int (*)(...))QIconEngine::iconName
+120 (int (*)(...))QIconEngine::isNull
+128 (int (*)(...))QIconEngine::scaledPixmap
+136 (int (*)(...))QIconEngine::virtual_hook
+
+Class QIconEngine
+ size=8 align=8
+ base size=8 base align=8
+QIconEngine (0x0x7f25c79e4f60) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7f25c7a130c0) 0 empty
+
+Vtable for QIconEnginePlugin
+QIconEnginePlugin::_ZTV17QIconEnginePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QIconEnginePlugin)
+16 (int (*)(...))QIconEnginePlugin::metaObject
+24 (int (*)(...))QIconEnginePlugin::qt_metacast
+32 (int (*)(...))QIconEnginePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QIconEnginePlugin
+ size=16 align=8
+ base size=16 base align=8
+QIconEnginePlugin (0x0x7f25c79bd888) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+ QObject (0x0x7f25c7a13060) 0
+ primary-for QIconEnginePlugin (0x0x7f25c79bd888)
+
+Vtable for QImageIOHandler
+QImageIOHandler::_ZTV15QImageIOHandler: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QImageIOHandler)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QImageIOHandler::write
+56 (int (*)(...))QImageIOHandler::option
+64 (int (*)(...))QImageIOHandler::setOption
+72 (int (*)(...))QImageIOHandler::supportsOption
+80 (int (*)(...))QImageIOHandler::jumpToNextImage
+88 (int (*)(...))QImageIOHandler::jumpToImage
+96 (int (*)(...))QImageIOHandler::loopCount
+104 (int (*)(...))QImageIOHandler::imageCount
+112 (int (*)(...))QImageIOHandler::nextImageDelay
+120 (int (*)(...))QImageIOHandler::currentImageNumber
+128 (int (*)(...))QImageIOHandler::currentImageRect
+
+Class QImageIOHandler
+ size=16 align=8
+ base size=16 base align=8
+QImageIOHandler (0x0x7f25c7a13180) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7f25c7a133c0) 0 empty
+
+Vtable for QImageIOPlugin
+QImageIOPlugin::_ZTV14QImageIOPlugin: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QImageIOPlugin)
+16 (int (*)(...))QImageIOPlugin::metaObject
+24 (int (*)(...))QImageIOPlugin::qt_metacast
+32 (int (*)(...))QImageIOPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QImageIOPlugin
+ size=16 align=8
+ base size=16 base align=8
+QImageIOPlugin (0x0x7f25c79bd8f0) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+ QObject (0x0x7f25c7a13360) 0
+ primary-for QImageIOPlugin (0x0x7f25c79bd8f0)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7f25c7a13840) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7f25c7a13900) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7f25c7a139c0) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7f25c769b720) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7f25c76fec60) 0 empty
+
+Vtable for QMovie
+QMovie::_ZTV6QMovie: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QMovie)
+16 (int (*)(...))QMovie::metaObject
+24 (int (*)(...))QMovie::qt_metacast
+32 (int (*)(...))QMovie::qt_metacall
+40 (int (*)(...))QMovie::~QMovie
+48 (int (*)(...))QMovie::~QMovie
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QMovie
+ size=16 align=8
+ base size=16 base align=8
+QMovie (0x0x7f25c76f3138) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+ QObject (0x0x7f25c76fec00) 0
+ primary-for QMovie (0x0x7f25c76f3138)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7f25c7721060) 0 empty
+
+Vtable for QOffscreenSurface
+QOffscreenSurface::_ZTV17QOffscreenSurface: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QOffscreenSurface)
+16 (int (*)(...))QOffscreenSurface::metaObject
+24 (int (*)(...))QOffscreenSurface::qt_metacast
+32 (int (*)(...))QOffscreenSurface::qt_metacall
+40 (int (*)(...))QOffscreenSurface::~QOffscreenSurface
+48 (int (*)(...))QOffscreenSurface::~QOffscreenSurface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QOffscreenSurface::surfaceType
+120 (int (*)(...))QOffscreenSurface::format
+128 (int (*)(...))QOffscreenSurface::size
+136 (int (*)(...))QOffscreenSurface::surfaceHandle
+144 (int (*)(...))-16
+152 (int (*)(...))(& _ZTI17QOffscreenSurface)
+160 (int (*)(...))QOffscreenSurface::_ZThn16_N17QOffscreenSurfaceD1Ev
+168 (int (*)(...))QOffscreenSurface::_ZThn16_N17QOffscreenSurfaceD0Ev
+176 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface6formatEv
+184 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface13surfaceHandleEv
+192 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface11surfaceTypeEv
+200 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface4sizeEv
+
+Class QOffscreenSurface
+ size=40 align=8
+ base size=40 base align=8
+QOffscreenSurface (0x0x7f25c76b5c40) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+ QObject (0x0x7f25c76fef60) 0
+ primary-for QOffscreenSurface (0x0x7f25c76b5c40)
+ QSurface (0x0x7f25c7721000) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7f25c7721300) 0 empty
+
+Vtable for QOpenGLContextGroup
+QOpenGLContextGroup::_ZTV19QOpenGLContextGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QOpenGLContextGroup)
+16 (int (*)(...))QOpenGLContextGroup::metaObject
+24 (int (*)(...))QOpenGLContextGroup::qt_metacast
+32 (int (*)(...))QOpenGLContextGroup::qt_metacall
+40 (int (*)(...))QOpenGLContextGroup::~QOpenGLContextGroup
+48 (int (*)(...))QOpenGLContextGroup::~QOpenGLContextGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLContextGroup
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLContextGroup (0x0x7f25c76f31a0) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+ QObject (0x0x7f25c77212a0) 0
+ primary-for QOpenGLContextGroup (0x0x7f25c76f31a0)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7f25c77214e0) 0 empty
+
+Vtable for QOpenGLContext
+QOpenGLContext::_ZTV14QOpenGLContext: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QOpenGLContext)
+16 (int (*)(...))QOpenGLContext::metaObject
+24 (int (*)(...))QOpenGLContext::qt_metacast
+32 (int (*)(...))QOpenGLContext::qt_metacall
+40 (int (*)(...))QOpenGLContext::~QOpenGLContext
+48 (int (*)(...))QOpenGLContext::~QOpenGLContext
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLContext
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLContext (0x0x7f25c76f3208) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+ QObject (0x0x7f25c7721480) 0
+ primary-for QOpenGLContext (0x0x7f25c76f3208)
+
+Class QNativeInterface::QGLXContext::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QGLXContext::TypeInfo (0x0x7f25c7721720) 0 empty
+
+Vtable for QNativeInterface::QGLXContext
+QNativeInterface::QGLXContext::_ZTVN16QNativeInterface11QGLXContextE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QGLXContextE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QGLXContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QGLXContext (0x0x7f25c77216c0) 0 nearly-empty
+ vptr=((& QNativeInterface::QGLXContext::_ZTVN16QNativeInterface11QGLXContextE) + 16)
+
+Class QNativeInterface::QEGLContext::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QEGLContext::TypeInfo (0x0x7f25c77217e0) 0 empty
+
+Vtable for QNativeInterface::QEGLContext
+QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QEGLContextE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QEGLContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QEGLContext (0x0x7f25c7721780) 0 nearly-empty
+ vptr=((& QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE) + 16)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7f25c7721840) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7f25c7721ea0) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7f25c7721e40) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7f25c76f3618) 0
+ QOpenGLFunctions (0x0x7f25c72c7660) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7f25c72c79c0) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7f25c76f3680) 0
+ QOpenGLFunctionsPrivate (0x0x7f25c72c7960) 0
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7f25c73c26c0) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7f25c702ecc0) 0
+
+Class QPageRanges::Range
+ size=8 align=4
+ base size=8 base align=4
+QPageRanges::Range (0x0x7f25c70eacc0) 0
+
+Class QPageRanges
+ size=8 align=8
+ base size=8 base align=8
+QPageRanges (0x0x7f25c70eac60) 0
+
+Vtable for QPagedPaintDevice
+QPagedPaintDevice::_ZTV17QPagedPaintDevice: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QPagedPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QPagedPaintDevice::setPageLayout
+96 (int (*)(...))QPagedPaintDevice::setPageSize
+104 (int (*)(...))QPagedPaintDevice::setPageOrientation
+112 (int (*)(...))QPagedPaintDevice::setPageMargins
+120 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPagedPaintDevice
+ size=24 align=8
+ base size=24 base align=8
+QPagedPaintDevice (0x0x7f25c71714e0) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+ QPaintDevice (0x0x7f25c717d2a0) 0
+ primary-for QPagedPaintDevice (0x0x7f25c71714e0)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7f25c717d420) 0 empty
+
+Vtable for QPaintDeviceWindow
+QPaintDeviceWindow::_ZTV18QPaintDeviceWindow: 59 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+16 (int (*)(...))QPaintDeviceWindow::metaObject
+24 (int (*)(...))QPaintDeviceWindow::qt_metacast
+32 (int (*)(...))QPaintDeviceWindow::qt_metacall
+40 (int (*)(...))QPaintDeviceWindow::~QPaintDeviceWindow
+48 (int (*)(...))QPaintDeviceWindow::~QPaintDeviceWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QPaintDeviceWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QPaintDeviceWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))-16
+336 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+344 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD1Ev
+352 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD0Ev
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+384 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+392 (int (*)(...))-40
+400 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+408 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD1Ev
+416 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD0Ev
+424 (int (*)(...))QPaintDevice::devType
+432 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+440 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+448 (int (*)(...))QPaintDevice::initPainter
+456 (int (*)(...))QPaintDevice::redirected
+464 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDeviceWindow
+ size=56 align=8
+ base size=50 base align=8
+QPaintDeviceWindow (0x0x7f25c7167540) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+ QWindow (0x0x7f25c71675b0) 0
+ primary-for QPaintDeviceWindow (0x0x7f25c7167540)
+ QObject (0x0x7f25c717d300) 0
+ primary-for QWindow (0x0x7f25c71675b0)
+ QSurface (0x0x7f25c717d360) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 344)
+ QPaintDevice (0x0x7f25c717d3c0) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 408)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7f25c717d600) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7f25c717d5a0) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7f25c6f811e0) 0 empty
+
+Vtable for QPaintEngine
+QPaintEngine::_ZTV12QPaintEngine: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintEngine)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))QPaintEngine::drawRects
+64 (int (*)(...))QPaintEngine::drawRects
+72 (int (*)(...))QPaintEngine::drawLines
+80 (int (*)(...))QPaintEngine::drawLines
+88 (int (*)(...))QPaintEngine::drawEllipse
+96 (int (*)(...))QPaintEngine::drawEllipse
+104 (int (*)(...))QPaintEngine::drawPath
+112 (int (*)(...))QPaintEngine::drawPoints
+120 (int (*)(...))QPaintEngine::drawPoints
+128 (int (*)(...))QPaintEngine::drawPolygon
+136 (int (*)(...))QPaintEngine::drawPolygon
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QPaintEngine::drawTextItem
+160 (int (*)(...))QPaintEngine::drawTiledPixmap
+168 (int (*)(...))QPaintEngine::drawImage
+176 (int (*)(...))QPaintEngine::coordinateOffset
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))QPaintEngine::createPixmap
+200 (int (*)(...))QPaintEngine::createPixmapFromImage
+
+Class QPaintEngine
+ size=32 align=8
+ base size=32 base align=8
+QPaintEngine (0x0x7f25c6f9e9c0) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7f25c6fec000) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7f25c6feccc0) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7f25c6fecc60) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7f25c6cddc60) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7f25c6cfc780) 0 empty
+
+Vtable for QPdfWriter
+QPdfWriter::_ZTV10QPdfWriter: 33 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QPdfWriter)
+16 (int (*)(...))QPdfWriter::metaObject
+24 (int (*)(...))QPdfWriter::qt_metacast
+32 (int (*)(...))QPdfWriter::qt_metacall
+40 (int (*)(...))QPdfWriter::~QPdfWriter
+48 (int (*)(...))QPdfWriter::~QPdfWriter
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPdfWriter::newPage
+120 (int (*)(...))QPdfWriter::paintEngine
+128 (int (*)(...))QPdfWriter::metric
+136 (int (*)(...))-16
+144 (int (*)(...))(& _ZTI10QPdfWriter)
+152 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD1Ev
+160 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD0Ev
+168 (int (*)(...))QPaintDevice::devType
+176 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter11paintEngineEv
+184 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter6metricEN12QPaintDevice17PaintDeviceMetricE
+192 (int (*)(...))QPaintDevice::initPainter
+200 (int (*)(...))QPaintDevice::redirected
+208 (int (*)(...))QPaintDevice::sharedPainter
+216 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter7newPageEv
+224 (int (*)(...))QPagedPaintDevice::setPageLayout
+232 (int (*)(...))QPagedPaintDevice::setPageSize
+240 (int (*)(...))QPagedPaintDevice::setPageOrientation
+248 (int (*)(...))QPagedPaintDevice::setPageMargins
+256 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPdfWriter
+ size=40 align=8
+ base size=40 base align=8
+QPdfWriter (0x0x7f25c6d14000) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+ QObject (0x0x7f25c6cfc6c0) 0
+ primary-for QPdfWriter (0x0x7f25c6d14000)
+ QPagedPaintDevice (0x0x7f25c6cf0340) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 152)
+ QPaintDevice (0x0x7f25c6cfc720) 16
+ primary-for QPagedPaintDevice (0x0x7f25c6cf0340)
+
+Vtable for QPicture
+QPicture::_ZTV8QPicture: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QPicture)
+16 (int (*)(...))QPicture::~QPicture
+24 (int (*)(...))QPicture::~QPicture
+32 (int (*)(...))QPicture::devType
+40 (int (*)(...))QPicture::paintEngine
+48 (int (*)(...))QPicture::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QPicture::setData
+
+Class QPicture
+ size=24 align=8
+ base size=24 base align=8
+QPicture (0x0x7f25c6cf03a8) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+ QPaintDevice (0x0x7f25c6cfc960) 0
+ primary-for QPicture (0x0x7f25c6cf03a8)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7f25c6d61480) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7f25c6d61420) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7f25c6db7720) 0 empty
+
+Vtable for QRasterWindow
+QRasterWindow::_ZTV13QRasterWindow: 60 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QRasterWindow)
+16 (int (*)(...))QRasterWindow::metaObject
+24 (int (*)(...))QRasterWindow::qt_metacast
+32 (int (*)(...))QRasterWindow::qt_metacall
+40 (int (*)(...))QRasterWindow::~QRasterWindow
+48 (int (*)(...))QRasterWindow::~QRasterWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QPaintDeviceWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QRasterWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))QRasterWindow::redirected
+336 (int (*)(...))-16
+344 (int (*)(...))(& _ZTI13QRasterWindow)
+352 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD1Ev
+360 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD0Ev
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+384 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+392 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+400 (int (*)(...))-40
+408 (int (*)(...))(& _ZTI13QRasterWindow)
+416 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD1Ev
+424 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD0Ev
+432 (int (*)(...))QPaintDevice::devType
+440 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+448 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+456 (int (*)(...))QPaintDevice::initPainter
+464 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow10redirectedEP6QPoint
+472 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QRasterWindow
+ size=56 align=8
+ base size=50 base align=8
+QRasterWindow (0x0x7f25c6db4958) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+ QPaintDeviceWindow (0x0x7f25c6d14bd0) 0
+ primary-for QRasterWindow (0x0x7f25c6db4958)
+ QWindow (0x0x7f25c6d14c40) 0
+ primary-for QPaintDeviceWindow (0x0x7f25c6d14bd0)
+ QObject (0x0x7f25c6db7600) 0
+ primary-for QWindow (0x0x7f25c6d14c40)
+ QSurface (0x0x7f25c6db7660) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 352)
+ QPaintDevice (0x0x7f25c6db76c0) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 416)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7f25c6ddb420) 0 empty
+
+Vtable for QSessionManager
+QSessionManager::_ZTV15QSessionManager: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSessionManager)
+16 (int (*)(...))QSessionManager::metaObject
+24 (int (*)(...))QSessionManager::qt_metacast
+32 (int (*)(...))QSessionManager::qt_metacall
+40 (int (*)(...))QSessionManager::~QSessionManager
+48 (int (*)(...))QSessionManager::~QSessionManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSessionManager
+ size=16 align=8
+ base size=16 base align=8
+QSessionManager (0x0x7f25c6db4a28) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+ QObject (0x0x7f25c6ddb3c0) 0
+ primary-for QSessionManager (0x0x7f25c6db4a28)
+
+Class QShortcut::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QShortcut::QPrivateSignal (0x0x7f25c6ddb600) 0 empty
+
+Vtable for QShortcut
+QShortcut::_ZTV9QShortcut: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QShortcut)
+16 (int (*)(...))QShortcut::metaObject
+24 (int (*)(...))QShortcut::qt_metacast
+32 (int (*)(...))QShortcut::qt_metacall
+40 (int (*)(...))QShortcut::~QShortcut
+48 (int (*)(...))QShortcut::~QShortcut
+56 (int (*)(...))QShortcut::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QShortcut
+ size=16 align=8
+ base size=16 base align=8
+QShortcut (0x0x7f25c6db4a90) 0
+ vptr=((& QShortcut::_ZTV9QShortcut) + 16)
+ QObject (0x0x7f25c6ddb5a0) 0
+ primary-for QShortcut (0x0x7f25c6db4a90)
+
+Vtable for QStandardItem
+QStandardItem::_ZTV13QStandardItem: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QStandardItem)
+16 (int (*)(...))QStandardItem::~QStandardItem
+24 (int (*)(...))QStandardItem::~QStandardItem
+32 (int (*)(...))QStandardItem::data
+40 (int (*)(...))QStandardItem::multiData
+48 (int (*)(...))QStandardItem::setData
+56 (int (*)(...))QStandardItem::clone
+64 (int (*)(...))QStandardItem::type
+72 (int (*)(...))QStandardItem::read
+80 (int (*)(...))QStandardItem::write
+88 (int (*)(...))QStandardItem::operator<
+
+Class QStandardItem
+ size=16 align=8
+ base size=16 base align=8
+QStandardItem (0x0x7f25c6ddbae0) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7f25c6a74b40) 0 empty
+
+Vtable for QStandardItemModel
+QStandardItemModel::_ZTV18QStandardItemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QStandardItemModel)
+16 (int (*)(...))QStandardItemModel::metaObject
+24 (int (*)(...))QStandardItemModel::qt_metacast
+32 (int (*)(...))QStandardItemModel::qt_metacall
+40 (int (*)(...))QStandardItemModel::~QStandardItemModel
+48 (int (*)(...))QStandardItemModel::~QStandardItemModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStandardItemModel::index
+120 (int (*)(...))QStandardItemModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QStandardItemModel::rowCount
+144 (int (*)(...))QStandardItemModel::columnCount
+152 (int (*)(...))QStandardItemModel::hasChildren
+160 (int (*)(...))QStandardItemModel::data
+168 (int (*)(...))QStandardItemModel::setData
+176 (int (*)(...))QStandardItemModel::headerData
+184 (int (*)(...))QStandardItemModel::setHeaderData
+192 (int (*)(...))QStandardItemModel::itemData
+200 (int (*)(...))QStandardItemModel::setItemData
+208 (int (*)(...))QStandardItemModel::clearItemData
+216 (int (*)(...))QStandardItemModel::mimeTypes
+224 (int (*)(...))QStandardItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QStandardItemModel::dropMimeData
+248 (int (*)(...))QStandardItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStandardItemModel::insertRows
+272 (int (*)(...))QStandardItemModel::insertColumns
+280 (int (*)(...))QStandardItemModel::removeRows
+288 (int (*)(...))QStandardItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStandardItemModel::flags
+336 (int (*)(...))QStandardItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QStandardItemModel::roleNames
+376 (int (*)(...))QStandardItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QStandardItemModel
+ size=16 align=8
+ base size=16 base align=8
+QStandardItemModel (0x0x7f25c6a71410) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+ QAbstractItemModel (0x0x7f25c6a71478) 0
+ primary-for QStandardItemModel (0x0x7f25c6a71410)
+ QObject (0x0x7f25c6a74ae0) 0
+ primary-for QAbstractItemModel (0x0x7f25c6a71478)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7f25c6a74ea0) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7f25c6b47c00) 0 empty
+
+Vtable for QStyleHints
+QStyleHints::_ZTV11QStyleHints: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QStyleHints)
+16 (int (*)(...))QStyleHints::metaObject
+24 (int (*)(...))QStyleHints::qt_metacast
+32 (int (*)(...))QStyleHints::qt_metacall
+40 (int (*)(...))QStyleHints::~QStyleHints
+48 (int (*)(...))QStyleHints::~QStyleHints
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QStyleHints
+ size=16 align=8
+ base size=16 base align=8
+QStyleHints (0x0x7f25c6b501a0) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+ QObject (0x0x7f25c6b47ba0) 0
+ primary-for QStyleHints (0x0x7f25c6b501a0)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7f25c6b47de0) 0 empty
+
+Vtable for QTextObject
+QTextObject::_ZTV11QTextObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTextObject)
+16 (int (*)(...))QTextObject::metaObject
+24 (int (*)(...))QTextObject::qt_metacast
+32 (int (*)(...))QTextObject::qt_metacall
+40 (int (*)(...))QTextObject::~QTextObject
+48 (int (*)(...))QTextObject::~QTextObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextObject
+ size=16 align=8
+ base size=16 base align=8
+QTextObject (0x0x7f25c6b50208) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+ QObject (0x0x7f25c6b47d80) 0
+ primary-for QTextObject (0x0x7f25c6b50208)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7f25c6b7d000) 0 empty
+
+Vtable for QTextBlockGroup
+QTextBlockGroup::_ZTV15QTextBlockGroup: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QTextBlockGroup)
+16 (int (*)(...))QTextBlockGroup::metaObject
+24 (int (*)(...))QTextBlockGroup::qt_metacast
+32 (int (*)(...))QTextBlockGroup::qt_metacall
+40 (int (*)(...))QTextBlockGroup::~QTextBlockGroup
+48 (int (*)(...))QTextBlockGroup::~QTextBlockGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextBlockGroup::blockInserted
+120 (int (*)(...))QTextBlockGroup::blockRemoved
+128 (int (*)(...))QTextBlockGroup::blockFormatChanged
+
+Class QTextBlockGroup
+ size=16 align=8
+ base size=16 base align=8
+QTextBlockGroup (0x0x7f25c6b50270) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+ QTextObject (0x0x7f25c6b502d8) 0
+ primary-for QTextBlockGroup (0x0x7f25c6b50270)
+ QObject (0x0x7f25c6b47f60) 0
+ primary-for QTextObject (0x0x7f25c6b502d8)
+
+Vtable for QTextFrameLayoutData
+QTextFrameLayoutData::_ZTV20QTextFrameLayoutData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextFrameLayoutData)
+16 (int (*)(...))QTextFrameLayoutData::~QTextFrameLayoutData
+24 (int (*)(...))QTextFrameLayoutData::~QTextFrameLayoutData
+
+Class QTextFrameLayoutData
+ size=8 align=8
+ base size=8 base align=8
+QTextFrameLayoutData (0x0x7f25c6b7d180) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7f25c6b7d240) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7f25c6b7d2a0) 0
+
+Vtable for QTextFrame
+QTextFrame::_ZTV10QTextFrame: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextFrame)
+16 (int (*)(...))QTextFrame::metaObject
+24 (int (*)(...))QTextFrame::qt_metacast
+32 (int (*)(...))QTextFrame::qt_metacall
+40 (int (*)(...))QTextFrame::~QTextFrame
+48 (int (*)(...))QTextFrame::~QTextFrame
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextFrame
+ size=16 align=8
+ base size=16 base align=8
+QTextFrame (0x0x7f25c6b50340) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+ QTextObject (0x0x7f25c6b503a8) 0
+ primary-for QTextFrame (0x0x7f25c6b50340)
+ QObject (0x0x7f25c6b7d1e0) 0
+ primary-for QTextObject (0x0x7f25c6b503a8)
+
+Vtable for QTextBlockUserData
+QTextBlockUserData::_ZTV18QTextBlockUserData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QTextBlockUserData)
+16 (int (*)(...))QTextBlockUserData::~QTextBlockUserData
+24 (int (*)(...))QTextBlockUserData::~QTextBlockUserData
+
+Class QTextBlockUserData
+ size=8 align=8
+ base size=8 base align=8
+QTextBlockUserData (0x0x7f25c6bc9120) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7f25c6bc91e0) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7f25c6bc9180) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7f25c6830a20) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7f25c686a8a0) 0 empty
+
+Vtable for QSyntaxHighlighter
+QSyntaxHighlighter::_ZTV18QSyntaxHighlighter: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSyntaxHighlighter)
+16 (int (*)(...))QSyntaxHighlighter::metaObject
+24 (int (*)(...))QSyntaxHighlighter::qt_metacast
+32 (int (*)(...))QSyntaxHighlighter::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QSyntaxHighlighter
+ size=16 align=8
+ base size=16 base align=8
+QSyntaxHighlighter (0x0x7f25c6873548) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+ QObject (0x0x7f25c686a840) 0
+ primary-for QSyntaxHighlighter (0x0x7f25c6873548)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7f25c686aa20) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7f25c686aa80) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7f25c686ab40) 0 empty
+
+Vtable for QTextList
+QTextList::_ZTV9QTextList: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTextList)
+16 (int (*)(...))QTextList::metaObject
+24 (int (*)(...))QTextList::qt_metacast
+32 (int (*)(...))QTextList::qt_metacall
+40 (int (*)(...))QTextList::~QTextList
+48 (int (*)(...))QTextList::~QTextList
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextBlockGroup::blockInserted
+120 (int (*)(...))QTextBlockGroup::blockRemoved
+128 (int (*)(...))QTextBlockGroup::blockFormatChanged
+
+Class QTextList
+ size=16 align=8
+ base size=16 base align=8
+QTextList (0x0x7f25c68735b0) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+ QTextBlockGroup (0x0x7f25c6873618) 0
+ primary-for QTextList (0x0x7f25c68735b0)
+ QTextObject (0x0x7f25c6873680) 0
+ primary-for QTextBlockGroup (0x0x7f25c6873618)
+ QObject (0x0x7f25c686aae0) 0
+ primary-for QTextObject (0x0x7f25c6873680)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7f25c686af00) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7f25c68ad780) 0 empty
+
+Vtable for QTextTable
+QTextTable::_ZTV10QTextTable: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextTable)
+16 (int (*)(...))QTextTable::metaObject
+24 (int (*)(...))QTextTable::qt_metacast
+32 (int (*)(...))QTextTable::qt_metacall
+40 (int (*)(...))QTextTable::~QTextTable
+48 (int (*)(...))QTextTable::~QTextTable
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextTable
+ size=16 align=8
+ base size=16 base align=8
+QTextTable (0x0x7f25c68736e8) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+ QTextFrame (0x0x7f25c6873750) 0
+ primary-for QTextTable (0x0x7f25c68736e8)
+ QTextObject (0x0x7f25c68737b8) 0
+ primary-for QTextFrame (0x0x7f25c6873750)
+ QObject (0x0x7f25c68ad720) 0
+ primary-for QTextObject (0x0x7f25c68737b8)
+
+Class QUndoGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoGroup::QPrivateSignal (0x0x7f25c68adb40) 0 empty
+
+Vtable for QUndoGroup
+QUndoGroup::_ZTV10QUndoGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUndoGroup)
+16 (int (*)(...))QUndoGroup::metaObject
+24 (int (*)(...))QUndoGroup::qt_metacast
+32 (int (*)(...))QUndoGroup::qt_metacall
+40 (int (*)(...))QUndoGroup::~QUndoGroup
+48 (int (*)(...))QUndoGroup::~QUndoGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QUndoGroup
+ size=16 align=8
+ base size=16 base align=8
+QUndoGroup (0x0x7f25c6873820) 0
+ vptr=((& QUndoGroup::_ZTV10QUndoGroup) + 16)
+ QObject (0x0x7f25c68adae0) 0
+ primary-for QUndoGroup (0x0x7f25c6873820)
+
+Vtable for QUndoCommand
+QUndoCommand::_ZTV12QUndoCommand: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QUndoCommand)
+16 (int (*)(...))QUndoCommand::~QUndoCommand
+24 (int (*)(...))QUndoCommand::~QUndoCommand
+32 (int (*)(...))QUndoCommand::undo
+40 (int (*)(...))QUndoCommand::redo
+48 (int (*)(...))QUndoCommand::id
+56 (int (*)(...))QUndoCommand::mergeWith
+
+Class QUndoCommand
+ size=16 align=8
+ base size=16 base align=8
+QUndoCommand (0x0x7f25c68adcc0) 0
+ vptr=((& QUndoCommand::_ZTV12QUndoCommand) + 16)
+
+Class QUndoStack::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoStack::QPrivateSignal (0x0x7f25c68add80) 0 empty
+
+Vtable for QUndoStack
+QUndoStack::_ZTV10QUndoStack: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUndoStack)
+16 (int (*)(...))QUndoStack::metaObject
+24 (int (*)(...))QUndoStack::qt_metacast
+32 (int (*)(...))QUndoStack::qt_metacall
+40 (int (*)(...))QUndoStack::~QUndoStack
+48 (int (*)(...))QUndoStack::~QUndoStack
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QUndoStack
+ size=16 align=8
+ base size=16 base align=8
+QUndoStack (0x0x7f25c6873888) 0
+ vptr=((& QUndoStack::_ZTV10QUndoStack) + 16)
+ QObject (0x0x7f25c68add20) 0
+ primary-for QUndoStack (0x0x7f25c6873888)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7f25c68adf60) 0 empty
+
+Vtable for QValidator
+QValidator::_ZTV10QValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QValidator)
+16 (int (*)(...))QValidator::metaObject
+24 (int (*)(...))QValidator::qt_metacast
+32 (int (*)(...))QValidator::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))QValidator::fixup
+
+Class QValidator
+ size=16 align=8
+ base size=16 base align=8
+QValidator (0x0x7f25c68738f0) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+ QObject (0x0x7f25c68adf00) 0
+ primary-for QValidator (0x0x7f25c68738f0)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7f25c68fb240) 0 empty
+
+Vtable for QIntValidator
+QIntValidator::_ZTV13QIntValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QIntValidator)
+16 (int (*)(...))QIntValidator::metaObject
+24 (int (*)(...))QIntValidator::qt_metacast
+32 (int (*)(...))QIntValidator::qt_metacall
+40 (int (*)(...))QIntValidator::~QIntValidator
+48 (int (*)(...))QIntValidator::~QIntValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIntValidator::validate
+120 (int (*)(...))QIntValidator::fixup
+
+Class QIntValidator
+ size=24 align=8
+ base size=24 base align=8
+QIntValidator (0x0x7f25c6873958) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+ QValidator (0x0x7f25c68739c0) 0
+ primary-for QIntValidator (0x0x7f25c6873958)
+ QObject (0x0x7f25c68fb1e0) 0
+ primary-for QValidator (0x0x7f25c68739c0)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7f25c68fb420) 0 empty
+
+Vtable for QDoubleValidator
+QDoubleValidator::_ZTV16QDoubleValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QDoubleValidator)
+16 (int (*)(...))QDoubleValidator::metaObject
+24 (int (*)(...))QDoubleValidator::qt_metacast
+32 (int (*)(...))QDoubleValidator::qt_metacall
+40 (int (*)(...))QDoubleValidator::~QDoubleValidator
+48 (int (*)(...))QDoubleValidator::~QDoubleValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDoubleValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QDoubleValidator
+ size=40 align=8
+ base size=36 base align=8
+QDoubleValidator (0x0x7f25c6873a28) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+ QValidator (0x0x7f25c6873a90) 0
+ primary-for QDoubleValidator (0x0x7f25c6873a28)
+ QObject (0x0x7f25c68fb3c0) 0
+ primary-for QValidator (0x0x7f25c6873a90)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7f25c68fb7e0) 0 empty
+
+Vtable for QRegularExpressionValidator
+QRegularExpressionValidator::_ZTV27QRegularExpressionValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QRegularExpressionValidator)
+16 (int (*)(...))QRegularExpressionValidator::metaObject
+24 (int (*)(...))QRegularExpressionValidator::qt_metacast
+32 (int (*)(...))QRegularExpressionValidator::qt_metacall
+40 (int (*)(...))QRegularExpressionValidator::~QRegularExpressionValidator
+48 (int (*)(...))QRegularExpressionValidator::~QRegularExpressionValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QRegularExpressionValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QRegularExpressionValidator
+ size=16 align=8
+ base size=16 base align=8
+QRegularExpressionValidator (0x0x7f25c6873af8) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+ QValidator (0x0x7f25c6873b60) 0
+ primary-for QRegularExpressionValidator (0x0x7f25c6873af8)
+ QObject (0x0x7f25c68fb780) 0
+ primary-for QValidator (0x0x7f25c6873b60)
+
+Vtable for QSqlDriverCreatorBase
+QSqlDriverCreatorBase::_ZTV21QSqlDriverCreatorBase: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QSqlDriverCreatorBase)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QSqlDriverCreatorBase
+ size=8 align=8
+ base size=8 base align=8
+QSqlDriverCreatorBase (0x0x7f25c68fbd20) 0 nearly-empty
+ vptr=((& QSqlDriverCreatorBase::_ZTV21QSqlDriverCreatorBase) + 16)
+
+Class QSqlDatabase
+ size=8 align=8
+ base size=8 base align=8
+QSqlDatabase (0x0x7f25c696f060) 0
+
+Class QSqlDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriver::QPrivateSignal (0x0x7f25c696f120) 0 empty
+
+Vtable for QSqlDriver
+QSqlDriver::_ZTV10QSqlDriver: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSqlDriver)
+16 (int (*)(...))QSqlDriver::metaObject
+24 (int (*)(...))QSqlDriver::qt_metacast
+32 (int (*)(...))QSqlDriver::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSqlDriver::isOpen
+120 (int (*)(...))QSqlDriver::beginTransaction
+128 (int (*)(...))QSqlDriver::commitTransaction
+136 (int (*)(...))QSqlDriver::rollbackTransaction
+144 (int (*)(...))QSqlDriver::tables
+152 (int (*)(...))QSqlDriver::primaryIndex
+160 (int (*)(...))QSqlDriver::record
+168 (int (*)(...))QSqlDriver::formatValue
+176 (int (*)(...))QSqlDriver::escapeIdentifier
+184 (int (*)(...))QSqlDriver::sqlStatement
+192 (int (*)(...))QSqlDriver::handle
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+232 (int (*)(...))QSqlDriver::subscribeToNotification
+240 (int (*)(...))QSqlDriver::unsubscribeFromNotification
+248 (int (*)(...))QSqlDriver::subscribedToNotifications
+256 (int (*)(...))QSqlDriver::isIdentifierEscaped
+264 (int (*)(...))QSqlDriver::stripDelimiters
+272 (int (*)(...))QSqlDriver::maximumIdentifierLength
+280 (int (*)(...))QSqlDriver::cancelQuery
+288 (int (*)(...))QSqlDriver::setOpen
+296 (int (*)(...))QSqlDriver::setOpenError
+304 (int (*)(...))QSqlDriver::setLastError
+
+Class QSqlDriver
+ size=16 align=8
+ base size=16 base align=8
+QSqlDriver (0x0x7f25c6873d68) 0
+ vptr=((& QSqlDriver::_ZTV10QSqlDriver) + 16)
+ QObject (0x0x7f25c696f0c0) 0
+ primary-for QSqlDriver (0x0x7f25c6873d68)
+
+Class QSqlDriverPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriverPlugin::QPrivateSignal (0x0x7f25c696f300) 0 empty
+
+Vtable for QSqlDriverPlugin
+QSqlDriverPlugin::_ZTV16QSqlDriverPlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSqlDriverPlugin)
+16 (int (*)(...))QSqlDriverPlugin::metaObject
+24 (int (*)(...))QSqlDriverPlugin::qt_metacast
+32 (int (*)(...))QSqlDriverPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QSqlDriverPlugin
+ size=16 align=8
+ base size=16 base align=8
+QSqlDriverPlugin (0x0x7f25c6873dd0) 0
+ vptr=((& QSqlDriverPlugin::_ZTV16QSqlDriverPlugin) + 16)
+ QObject (0x0x7f25c696f2a0) 0
+ primary-for QSqlDriverPlugin (0x0x7f25c6873dd0)
+
+Class QSqlError
+ size=8 align=8
+ base size=8 base align=8
+QSqlError (0x0x7f25c696f3c0) 0
+
+Class QSqlField
+ size=40 align=8
+ base size=40 base align=8
+QSqlField (0x0x7f25c6a031e0) 0
+
+Class QSqlRecord
+ size=8 align=8
+ base size=8 base align=8
+QSqlRecord (0x0x7f25c6a035a0) 0
+
+Class QSqlIndex
+ size=80 align=8
+ base size=80 base align=8
+QSqlIndex (0x0x7f25c69f6bc8) 0
+ QSqlRecord (0x0x7f25c6a03660) 0
+
+Class QSqlQuery
+ size=8 align=8
+ base size=8 base align=8
+QSqlQuery (0x0x7f25c6a03ba0) 0
+
+Class QSqlQueryModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlQueryModel::QPrivateSignal (0x0x7f25c66c82a0) 0 empty
+
+Vtable for QSqlQueryModel
+QSqlQueryModel::_ZTV14QSqlQueryModel: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSqlQueryModel)
+16 (int (*)(...))QSqlQueryModel::metaObject
+24 (int (*)(...))QSqlQueryModel::qt_metacast
+32 (int (*)(...))QSqlQueryModel::qt_metacall
+40 (int (*)(...))QSqlQueryModel::~QSqlQueryModel
+48 (int (*)(...))QSqlQueryModel::~QSqlQueryModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractTableModel::index
+120 (int (*)(...))QAbstractTableModel::parent
+128 (int (*)(...))QAbstractTableModel::sibling
+136 (int (*)(...))QSqlQueryModel::rowCount
+144 (int (*)(...))QSqlQueryModel::columnCount
+152 (int (*)(...))QAbstractTableModel::hasChildren
+160 (int (*)(...))QSqlQueryModel::data
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QSqlQueryModel::headerData
+184 (int (*)(...))QSqlQueryModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractTableModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QSqlQueryModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QSqlQueryModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QSqlQueryModel::fetchMore
+320 (int (*)(...))QSqlQueryModel::canFetchMore
+328 (int (*)(...))QAbstractTableModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QSqlQueryModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QSqlQueryModel::clear
+416 (int (*)(...))QSqlQueryModel::queryChange
+424 (int (*)(...))QSqlQueryModel::indexInQuery
+
+Class QSqlQueryModel
+ size=16 align=8
+ base size=16 base align=8
+QSqlQueryModel (0x0x7f25c66cb340) 0
+ vptr=((& QSqlQueryModel::_ZTV14QSqlQueryModel) + 16)
+ QAbstractTableModel (0x0x7f25c66cb3a8) 0
+ primary-for QSqlQueryModel (0x0x7f25c66cb340)
+ QAbstractItemModel (0x0x7f25c66cb410) 0
+ primary-for QAbstractTableModel (0x0x7f25c66cb3a8)
+ QObject (0x0x7f25c66c8240) 0
+ primary-for QAbstractItemModel (0x0x7f25c66cb410)
+
+Class QSqlTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlTableModel::QPrivateSignal (0x0x7f25c66c8480) 0 empty
+
+Vtable for QSqlTableModel
+QSqlTableModel::_ZTV14QSqlTableModel: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSqlTableModel)
+16 (int (*)(...))QSqlTableModel::metaObject
+24 (int (*)(...))QSqlTableModel::qt_metacast
+32 (int (*)(...))QSqlTableModel::qt_metacall
+40 (int (*)(...))QSqlTableModel::~QSqlTableModel
+48 (int (*)(...))QSqlTableModel::~QSqlTableModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractTableModel::index
+120 (int (*)(...))QAbstractTableModel::parent
+128 (int (*)(...))QAbstractTableModel::sibling
+136 (int (*)(...))QSqlTableModel::rowCount
+144 (int (*)(...))QSqlQueryModel::columnCount
+152 (int (*)(...))QAbstractTableModel::hasChildren
+160 (int (*)(...))QSqlTableModel::data
+168 (int (*)(...))QSqlTableModel::setData
+176 (int (*)(...))QSqlTableModel::headerData
+184 (int (*)(...))QSqlQueryModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QSqlTableModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractTableModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QSqlTableModel::insertRows
+272 (int (*)(...))QSqlQueryModel::insertColumns
+280 (int (*)(...))QSqlTableModel::removeRows
+288 (int (*)(...))QSqlTableModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QSqlQueryModel::fetchMore
+320 (int (*)(...))QSqlQueryModel::canFetchMore
+328 (int (*)(...))QSqlTableModel::flags
+336 (int (*)(...))QSqlTableModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QSqlQueryModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QSqlTableModel::submit
+392 (int (*)(...))QSqlTableModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QSqlTableModel::clear
+416 (int (*)(...))QSqlQueryModel::queryChange
+424 (int (*)(...))QSqlTableModel::indexInQuery
+432 (int (*)(...))QSqlTableModel::setTable
+440 (int (*)(...))QSqlTableModel::setEditStrategy
+448 (int (*)(...))QSqlTableModel::setSort
+456 (int (*)(...))QSqlTableModel::setFilter
+464 (int (*)(...))QSqlTableModel::revertRow
+472 (int (*)(...))QSqlTableModel::select
+480 (int (*)(...))QSqlTableModel::selectRow
+488 (int (*)(...))QSqlTableModel::updateRowInTable
+496 (int (*)(...))QSqlTableModel::insertRowIntoTable
+504 (int (*)(...))QSqlTableModel::deleteRowFromTable
+512 (int (*)(...))QSqlTableModel::orderByClause
+520 (int (*)(...))QSqlTableModel::selectStatement
+
+Class QSqlTableModel
+ size=16 align=8
+ base size=16 base align=8
+QSqlTableModel (0x0x7f25c66cb478) 0
+ vptr=((& QSqlTableModel::_ZTV14QSqlTableModel) + 16)
+ QSqlQueryModel (0x0x7f25c66cb4e0) 0
+ primary-for QSqlTableModel (0x0x7f25c66cb478)
+ QAbstractTableModel (0x0x7f25c66cb548) 0
+ primary-for QSqlQueryModel (0x0x7f25c66cb4e0)
+ QAbstractItemModel (0x0x7f25c66cb5b0) 0
+ primary-for QAbstractTableModel (0x0x7f25c66cb548)
+ QObject (0x0x7f25c66c8420) 0
+ primary-for QAbstractItemModel (0x0x7f25c66cb5b0)
+
+Class QSqlRelation
+ size=72 align=8
+ base size=72 base align=8
+QSqlRelation (0x0x7f25c66c8600) 0
+
+Class QSqlRelationalTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlRelationalTableModel::QPrivateSignal (0x0x7f25c67367e0) 0 empty
+
+Vtable for QSqlRelationalTableModel
+QSqlRelationalTableModel::_ZTV24QSqlRelationalTableModel: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QSqlRelationalTableModel)
+16 (int (*)(...))QSqlRelationalTableModel::metaObject
+24 (int (*)(...))QSqlRelationalTableModel::qt_metacast
+32 (int (*)(...))QSqlRelationalTableModel::qt_metacall
+40 (int (*)(...))QSqlRelationalTableModel::~QSqlRelationalTableModel
+48 (int (*)(...))QSqlRelationalTableModel::~QSqlRelationalTableModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractTableModel::index
+120 (int (*)(...))QAbstractTableModel::parent
+128 (int (*)(...))QAbstractTableModel::sibling
+136 (int (*)(...))QSqlTableModel::rowCount
+144 (int (*)(...))QSqlQueryModel::columnCount
+152 (int (*)(...))QAbstractTableModel::hasChildren
+160 (int (*)(...))QSqlRelationalTableModel::data
+168 (int (*)(...))QSqlRelationalTableModel::setData
+176 (int (*)(...))QSqlTableModel::headerData
+184 (int (*)(...))QSqlQueryModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QSqlTableModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractTableModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QSqlTableModel::insertRows
+272 (int (*)(...))QSqlQueryModel::insertColumns
+280 (int (*)(...))QSqlTableModel::removeRows
+288 (int (*)(...))QSqlRelationalTableModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QSqlQueryModel::fetchMore
+320 (int (*)(...))QSqlQueryModel::canFetchMore
+328 (int (*)(...))QSqlTableModel::flags
+336 (int (*)(...))QSqlTableModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QSqlQueryModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QSqlTableModel::submit
+392 (int (*)(...))QSqlTableModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QSqlRelationalTableModel::clear
+416 (int (*)(...))QSqlQueryModel::queryChange
+424 (int (*)(...))QSqlTableModel::indexInQuery
+432 (int (*)(...))QSqlRelationalTableModel::setTable
+440 (int (*)(...))QSqlTableModel::setEditStrategy
+448 (int (*)(...))QSqlTableModel::setSort
+456 (int (*)(...))QSqlTableModel::setFilter
+464 (int (*)(...))QSqlRelationalTableModel::revertRow
+472 (int (*)(...))QSqlRelationalTableModel::select
+480 (int (*)(...))QSqlTableModel::selectRow
+488 (int (*)(...))QSqlRelationalTableModel::updateRowInTable
+496 (int (*)(...))QSqlRelationalTableModel::insertRowIntoTable
+504 (int (*)(...))QSqlTableModel::deleteRowFromTable
+512 (int (*)(...))QSqlRelationalTableModel::orderByClause
+520 (int (*)(...))QSqlRelationalTableModel::selectStatement
+528 (int (*)(...))QSqlRelationalTableModel::setRelation
+536 (int (*)(...))QSqlRelationalTableModel::relationModel
+
+Class QSqlRelationalTableModel
+ size=16 align=8
+ base size=16 base align=8
+QSqlRelationalTableModel (0x0x7f25c673b8f0) 0
+ vptr=((& QSqlRelationalTableModel::_ZTV24QSqlRelationalTableModel) + 16)
+ QSqlTableModel (0x0x7f25c673b958) 0
+ primary-for QSqlRelationalTableModel (0x0x7f25c673b8f0)
+ QSqlQueryModel (0x0x7f25c673b9c0) 0
+ primary-for QSqlTableModel (0x0x7f25c673b958)
+ QAbstractTableModel (0x0x7f25c673ba28) 0
+ primary-for QSqlQueryModel (0x0x7f25c673b9c0)
+ QAbstractItemModel (0x0x7f25c673ba90) 0
+ primary-for QAbstractTableModel (0x0x7f25c673ba28)
+ QObject (0x0x7f25c6736780) 0
+ primary-for QAbstractItemModel (0x0x7f25c673ba90)
+
+Vtable for QSqlResult
+QSqlResult::_ZTV10QSqlResult: 33 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSqlResult)
+16 0
+24 0
+32 (int (*)(...))QSqlResult::handle
+40 (int (*)(...))QSqlResult::setAt
+48 (int (*)(...))QSqlResult::setActive
+56 (int (*)(...))QSqlResult::setLastError
+64 (int (*)(...))QSqlResult::setQuery
+72 (int (*)(...))QSqlResult::setSelect
+80 (int (*)(...))QSqlResult::setForwardOnly
+88 (int (*)(...))QSqlResult::exec
+96 (int (*)(...))QSqlResult::prepare
+104 (int (*)(...))QSqlResult::savePrepare
+112 (int (*)(...))QSqlResult::bindValue
+120 (int (*)(...))QSqlResult::bindValue
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))QSqlResult::fetchNext
+168 (int (*)(...))QSqlResult::fetchPrevious
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))QSqlResult::record
+216 (int (*)(...))QSqlResult::lastInsertId
+224 (int (*)(...))QSqlResult::virtual_hook
+232 (int (*)(...))QSqlResult::execBatch
+240 (int (*)(...))QSqlResult::detachFromResultSet
+248 (int (*)(...))QSqlResult::setNumericalPrecisionPolicy
+256 (int (*)(...))QSqlResult::nextResult
+
+Class QSqlResult
+ size=16 align=8
+ base size=16 base align=8
+QSqlResult (0x0x7f25c6736960) 0
+ vptr=((& QSqlResult::_ZTV10QSqlResult) + 16)
+
+Class QSizePolicy::Bits
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy::Bits (0x0x7f25c6736ae0) 0
+
+Class QSizePolicy
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy (0x0x7f25c6736a80) 0
+
+Class QWidgetData
+ size=88 align=8
+ base size=88 base align=8
+QWidgetData (0x0x7f25c67f3b40) 0
+
+Class QWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidget::QPrivateSignal (0x0x7f25c67f3c60) 0 empty
+
+Vtable for QWidget
+QWidget::_ZTV7QWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWidget)
+16 (int (*)(...))QWidget::metaObject
+24 (int (*)(...))QWidget::qt_metacast
+32 (int (*)(...))QWidget::qt_metacall
+40 (int (*)(...))QWidget::~QWidget
+48 (int (*)(...))QWidget::~QWidget
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI7QWidget)
+448 (int (*)(...))QWidget::_ZThn16_N7QWidgetD1Ev
+456 (int (*)(...))QWidget::_ZThn16_N7QWidgetD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWidget
+ size=40 align=8
+ base size=40 base align=8
+QWidget (0x0x7f25c676ea80) 0
+ vptr=((& QWidget::_ZTV7QWidget) + 16)
+ QObject (0x0x7f25c67f3ba0) 0
+ primary-for QWidget (0x0x7f25c676ea80)
+ QPaintDevice (0x0x7f25c67f3c00) 16
+ vptr=((& QWidget::_ZTV7QWidget) + 448)
+
+Class QAbstractButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractButton::QPrivateSignal (0x0x7f25c64ea600) 0 empty
+
+Vtable for QAbstractButton
+QAbstractButton::_ZTV15QAbstractButton: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractButton)
+16 (int (*)(...))QAbstractButton::metaObject
+24 (int (*)(...))QAbstractButton::qt_metacast
+32 (int (*)(...))QAbstractButton::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI15QAbstractButton)
+472 0
+480 0
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractButton
+ size=40 align=8
+ base size=40 base align=8
+QAbstractButton (0x0x7f25c67f8a90) 0
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 16)
+ QWidget (0x0x7f25c676ecb0) 0
+ primary-for QAbstractButton (0x0x7f25c67f8a90)
+ QObject (0x0x7f25c64ea540) 0
+ primary-for QWidget (0x0x7f25c676ecb0)
+ QPaintDevice (0x0x7f25c64ea5a0) 16
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 472)
+
+Class QAbstractSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSpinBox::QPrivateSignal (0x0x7f25c64ea840) 0 empty
+
+Vtable for QAbstractSpinBox
+QAbstractSpinBox::_ZTV16QAbstractSpinBox: 70 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAbstractSpinBox)
+16 (int (*)(...))QAbstractSpinBox::metaObject
+24 (int (*)(...))QAbstractSpinBox::qt_metacast
+32 (int (*)(...))QAbstractSpinBox::qt_metacall
+40 (int (*)(...))QAbstractSpinBox::~QAbstractSpinBox
+48 (int (*)(...))QAbstractSpinBox::~QAbstractSpinBox
+56 (int (*)(...))QAbstractSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSpinBox::validate
+440 (int (*)(...))QAbstractSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI16QAbstractSpinBox)
+496 (int (*)(...))QAbstractSpinBox::_ZThn16_N16QAbstractSpinBoxD1Ev
+504 (int (*)(...))QAbstractSpinBox::_ZThn16_N16QAbstractSpinBoxD0Ev
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QAbstractSpinBox (0x0x7f25c67f8af8) 0
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 16)
+ QWidget (0x0x7f25c676ed20) 0
+ primary-for QAbstractSpinBox (0x0x7f25c67f8af8)
+ QObject (0x0x7f25c64ea780) 0
+ primary-for QWidget (0x0x7f25c676ed20)
+ QPaintDevice (0x0x7f25c64ea7e0) 16
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 496)
+
+Class QAbstractSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSlider::QPrivateSignal (0x0x7f25c65780c0) 0 empty
+
+Vtable for QAbstractSlider
+QAbstractSlider::_ZTV15QAbstractSlider: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractSlider)
+16 (int (*)(...))QAbstractSlider::metaObject
+24 (int (*)(...))QAbstractSlider::qt_metacast
+32 (int (*)(...))QAbstractSlider::qt_metacall
+40 (int (*)(...))QAbstractSlider::~QAbstractSlider
+48 (int (*)(...))QAbstractSlider::~QAbstractSlider
+56 (int (*)(...))QAbstractSlider::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSlider::sliderChange
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI15QAbstractSlider)
+456 (int (*)(...))QAbstractSlider::_ZThn16_N15QAbstractSliderD1Ev
+464 (int (*)(...))QAbstractSlider::_ZThn16_N15QAbstractSliderD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractSlider
+ size=40 align=8
+ base size=40 base align=8
+QAbstractSlider (0x0x7f25c67f8c98) 0
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 16)
+ QWidget (0x0x7f25c651a150) 0
+ primary-for QAbstractSlider (0x0x7f25c67f8c98)
+ QObject (0x0x7f25c6578000) 0
+ primary-for QWidget (0x0x7f25c651a150)
+ QPaintDevice (0x0x7f25c6578060) 16
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 456)
+
+Class QSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSlider::QPrivateSignal (0x0x7f25c6578300) 0 empty
+
+Vtable for QSlider
+QSlider::_ZTV7QSlider: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QSlider)
+16 (int (*)(...))QSlider::metaObject
+24 (int (*)(...))QSlider::qt_metacast
+32 (int (*)(...))QSlider::qt_metacall
+40 (int (*)(...))QSlider::~QSlider
+48 (int (*)(...))QSlider::~QSlider
+56 (int (*)(...))QSlider::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSlider::sizeHint
+136 (int (*)(...))QSlider::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSlider::mousePressEvent
+176 (int (*)(...))QSlider::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSlider::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSlider::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSlider::sliderChange
+440 (int (*)(...))QSlider::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI7QSlider)
+464 (int (*)(...))QSlider::_ZThn16_N7QSliderD1Ev
+472 (int (*)(...))QSlider::_ZThn16_N7QSliderD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSlider
+ size=40 align=8
+ base size=40 base align=8
+QSlider (0x0x7f25c67f8d00) 0
+ vptr=((& QSlider::_ZTV7QSlider) + 16)
+ QAbstractSlider (0x0x7f25c67f8d68) 0
+ primary-for QSlider (0x0x7f25c67f8d00)
+ QWidget (0x0x7f25c651a700) 0
+ primary-for QAbstractSlider (0x0x7f25c67f8d68)
+ QObject (0x0x7f25c6578240) 0
+ primary-for QWidget (0x0x7f25c651a700)
+ QPaintDevice (0x0x7f25c65782a0) 16
+ vptr=((& QSlider::_ZTV7QSlider) + 464)
+
+Class QStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyle::QPrivateSignal (0x0x7f25c65785a0) 0 empty
+
+Vtable for QStyle
+QStyle::_ZTV6QStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QStyle)
+16 (int (*)(...))QStyle::metaObject
+24 (int (*)(...))QStyle::qt_metacast
+32 (int (*)(...))QStyle::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStyle::polish
+120 (int (*)(...))QStyle::unpolish
+128 (int (*)(...))QStyle::polish
+136 (int (*)(...))QStyle::unpolish
+144 (int (*)(...))QStyle::polish
+152 (int (*)(...))QStyle::itemTextRect
+160 (int (*)(...))QStyle::itemPixmapRect
+168 (int (*)(...))QStyle::drawItemText
+176 (int (*)(...))QStyle::drawItemPixmap
+184 (int (*)(...))QStyle::standardPalette
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+232 (int (*)(...))__cxa_pure_virtual
+240 (int (*)(...))__cxa_pure_virtual
+248 (int (*)(...))__cxa_pure_virtual
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))__cxa_pure_virtual
+272 (int (*)(...))__cxa_pure_virtual
+280 (int (*)(...))__cxa_pure_virtual
+288 (int (*)(...))__cxa_pure_virtual
+
+Class QStyle
+ size=16 align=8
+ base size=16 base align=8
+QStyle (0x0x7f25c67f8dd0) 0
+ vptr=((& QStyle::_ZTV6QStyle) + 16)
+ QObject (0x0x7f25c6578540) 0
+ primary-for QStyle (0x0x7f25c67f8dd0)
+
+Class QTabBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabBar::QPrivateSignal (0x0x7f25c65fc7e0) 0 empty
+
+Vtable for QTabBar
+QTabBar::_ZTV7QTabBar: 70 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QTabBar)
+16 (int (*)(...))QTabBar::metaObject
+24 (int (*)(...))QTabBar::qt_metacast
+32 (int (*)(...))QTabBar::qt_metacall
+40 (int (*)(...))QTabBar::~QTabBar
+48 (int (*)(...))QTabBar::~QTabBar
+56 (int (*)(...))QTabBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTabBar::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QTabBar::sizeHint
+136 (int (*)(...))QTabBar::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTabBar::mousePressEvent
+176 (int (*)(...))QTabBar::mouseReleaseEvent
+184 (int (*)(...))QTabBar::mouseDoubleClickEvent
+192 (int (*)(...))QTabBar::mouseMoveEvent
+200 (int (*)(...))QTabBar::wheelEvent
+208 (int (*)(...))QTabBar::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTabBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTabBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QTabBar::showEvent
+352 (int (*)(...))QTabBar::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTabBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QTabBar::tabSizeHint
+440 (int (*)(...))QTabBar::minimumTabSizeHint
+448 (int (*)(...))QTabBar::tabInserted
+456 (int (*)(...))QTabBar::tabRemoved
+464 (int (*)(...))QTabBar::tabLayoutChange
+472 (int (*)(...))QTabBar::initStyleOption
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI7QTabBar)
+496 (int (*)(...))QTabBar::_ZThn16_N7QTabBarD1Ev
+504 (int (*)(...))QTabBar::_ZThn16_N7QTabBarD0Ev
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTabBar
+ size=40 align=8
+ base size=40 base align=8
+QTabBar (0x0x7f25c623d0d0) 0
+ vptr=((& QTabBar::_ZTV7QTabBar) + 16)
+ QWidget (0x0x7f25c65de2a0) 0
+ primary-for QTabBar (0x0x7f25c623d0d0)
+ QObject (0x0x7f25c65fc720) 0
+ primary-for QWidget (0x0x7f25c65de2a0)
+ QPaintDevice (0x0x7f25c65fc780) 16
+ vptr=((& QTabBar::_ZTV7QTabBar) + 496)
+
+Class QTabWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabWidget::QPrivateSignal (0x0x7f25c65fcae0) 0 empty
+
+Vtable for QTabWidget
+QTabWidget::_ZTV10QTabWidget: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTabWidget)
+16 (int (*)(...))QTabWidget::metaObject
+24 (int (*)(...))QTabWidget::qt_metacast
+32 (int (*)(...))QTabWidget::qt_metacall
+40 (int (*)(...))QTabWidget::~QTabWidget
+48 (int (*)(...))QTabWidget::~QTabWidget
+56 (int (*)(...))QTabWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QTabWidget::sizeHint
+136 (int (*)(...))QTabWidget::minimumSizeHint
+144 (int (*)(...))QTabWidget::heightForWidth
+152 (int (*)(...))QTabWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QTabWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTabWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTabWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QTabWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTabWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QTabWidget::tabInserted
+440 (int (*)(...))QTabWidget::tabRemoved
+448 (int (*)(...))QTabWidget::initStyleOption
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI10QTabWidget)
+472 (int (*)(...))QTabWidget::_ZThn16_N10QTabWidgetD1Ev
+480 (int (*)(...))QTabWidget::_ZThn16_N10QTabWidgetD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTabWidget
+ size=40 align=8
+ base size=40 base align=8
+QTabWidget (0x0x7f25c623d138) 0
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 16)
+ QWidget (0x0x7f25c65de8c0) 0
+ primary-for QTabWidget (0x0x7f25c623d138)
+ QObject (0x0x7f25c65fca20) 0
+ primary-for QWidget (0x0x7f25c65de8c0)
+ QPaintDevice (0x0x7f25c65fca80) 16
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 472)
+
+Class QRubberBand::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRubberBand::QPrivateSignal (0x0x7f25c65fcea0) 0 empty
+
+Vtable for QRubberBand
+QRubberBand::_ZTV11QRubberBand: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QRubberBand)
+16 (int (*)(...))QRubberBand::metaObject
+24 (int (*)(...))QRubberBand::qt_metacast
+32 (int (*)(...))QRubberBand::qt_metacall
+40 (int (*)(...))QRubberBand::~QRubberBand
+48 (int (*)(...))QRubberBand::~QRubberBand
+56 (int (*)(...))QRubberBand::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QRubberBand::paintEvent
+264 (int (*)(...))QRubberBand::moveEvent
+272 (int (*)(...))QRubberBand::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QRubberBand::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QRubberBand::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QRubberBand::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QRubberBand)
+456 (int (*)(...))QRubberBand::_ZThn16_N11QRubberBandD1Ev
+464 (int (*)(...))QRubberBand::_ZThn16_N11QRubberBandD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QRubberBand
+ size=40 align=8
+ base size=40 base align=8
+QRubberBand (0x0x7f25c623d1a0) 0
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 16)
+ QWidget (0x0x7f25c65debd0) 0
+ primary-for QRubberBand (0x0x7f25c623d1a0)
+ QObject (0x0x7f25c65fcde0) 0
+ primary-for QWidget (0x0x7f25c65debd0)
+ QPaintDevice (0x0x7f25c65fce40) 16
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 456)
+
+Class QFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFrame::QPrivateSignal (0x0x7f25c62d6300) 0 empty
+
+Vtable for QFrame
+QFrame::_ZTV6QFrame: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QFrame)
+16 (int (*)(...))QFrame::metaObject
+24 (int (*)(...))QFrame::qt_metacast
+32 (int (*)(...))QFrame::qt_metacall
+40 (int (*)(...))QFrame::~QFrame
+48 (int (*)(...))QFrame::~QFrame
+56 (int (*)(...))QFrame::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI6QFrame)
+456 (int (*)(...))QFrame::_ZThn16_N6QFrameD1Ev
+464 (int (*)(...))QFrame::_ZThn16_N6QFrameD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFrame
+ size=40 align=8
+ base size=40 base align=8
+QFrame (0x0x7f25c623d208) 0
+ vptr=((& QFrame::_ZTV6QFrame) + 16)
+ QWidget (0x0x7f25c65ded20) 0
+ primary-for QFrame (0x0x7f25c623d208)
+ QObject (0x0x7f25c62d6240) 0
+ primary-for QWidget (0x0x7f25c65ded20)
+ QPaintDevice (0x0x7f25c62d62a0) 16
+ vptr=((& QFrame::_ZTV6QFrame) + 456)
+
+Class QStyleOption
+ size=64 align=8
+ base size=64 base align=8
+QStyleOption (0x0x7f25c62d6600) 0
+
+Class QStyleOptionFocusRect
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFocusRect (0x0x7f25c623d270) 0
+ QStyleOption (0x0x7f25c62d6660) 0
+
+Class QStyleOptionFrame
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFrame (0x0x7f25d43f34e0) 0
+ QStyleOption (0x0x7f25c62d68a0) 0
+
+Class QStyleOptionTabWidgetFrame
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionTabWidgetFrame (0x0x7f25d43f36e8) 0
+ QStyleOption (0x0x7f25c62d6ea0) 0
+
+Class QStyleOptionTabBarBase
+ size=104 align=8
+ base size=101 base align=8
+QStyleOptionTabBarBase (0x0x7f25c623d2d8) 0
+ QStyleOption (0x0x7f25c635d120) 0
+
+Class QStyleOptionHeader
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionHeader (0x0x7f25c623d340) 0
+ QStyleOption (0x0x7f25c635d360) 0
+
+Class QStyleOptionHeaderV2
+ size=136 align=8
+ base size=136 base align=8
+QStyleOptionHeaderV2 (0x0x7f25c623d3a8) 0
+ QStyleOptionHeader (0x0x7f25c623d410) 0
+ QStyleOption (0x0x7f25c635d5a0) 0
+
+Class QStyleOptionButton
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionButton (0x0x7f25c623d4e0) 0
+ QStyleOption (0x0x7f25c635d960) 0
+
+Class QStyleOptionTab
+ size=160 align=8
+ base size=156 base align=8
+QStyleOptionTab (0x0x7f25c623d680) 0
+ QStyleOption (0x0x7f25c635df60) 0
+
+Class QStyleOptionToolBar
+ size=88 align=8
+ base size=88 base align=8
+QStyleOptionToolBar (0x0x7f25c623d958) 0
+ QStyleOption (0x0x7f25c63d4780) 0
+
+Class QStyleOptionProgressBar
+ size=112 align=8
+ base size=111 base align=8
+QStyleOptionProgressBar (0x0x7f25c623daf8) 0
+ QStyleOption (0x0x7f25c63d4d80) 0
+
+Class QStyleOptionMenuItem
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionMenuItem (0x0x7f25c623db60) 0
+ QStyleOption (0x0x7f25c6091000) 0
+
+Class QStyleOptionDockWidget
+ size=96 align=8
+ base size=92 base align=8
+QStyleOptionDockWidget (0x0x7f25c623dbc8) 0
+ QStyleOption (0x0x7f25c6091240) 0
+
+Class QStyleOptionViewItem
+ size=208 align=8
+ base size=208 base align=8
+QStyleOptionViewItem (0x0x7f25c623dc30) 0
+ QStyleOption (0x0x7f25c6091480) 0
+
+Class QStyleOptionToolBox
+ size=104 align=8
+ base size=104 base align=8
+QStyleOptionToolBox (0x0x7f25c623ddd0) 0
+ QStyleOption (0x0x7f25c6091a80) 0
+
+Class QStyleOptionRubberBand
+ size=72 align=8
+ base size=69 base align=8
+QStyleOptionRubberBand (0x0x7f25c623de38) 0
+ QStyleOption (0x0x7f25c6091cc0) 0
+
+Class QStyleOptionComplex
+ size=72 align=8
+ base size=72 base align=8
+QStyleOptionComplex (0x0x7f25c623dea0) 0
+ QStyleOption (0x0x7f25c6091f60) 0
+
+Class QStyleOptionSlider
+ size=128 align=8
+ base size=128 base align=8
+QStyleOptionSlider (0x0x7f25c623df08) 0
+ QStyleOptionComplex (0x0x7f25c623df70) 0
+ QStyleOption (0x0x7f25c6117240) 0
+
+Class QStyleOptionSpinBox
+ size=88 align=8
+ base size=81 base align=8
+QStyleOptionSpinBox (0x0x7f25c6125068) 0
+ QStyleOptionComplex (0x0x7f25c61250d0) 0
+ QStyleOption (0x0x7f25c6117600) 0
+
+Class QStyleOptionToolButton
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionToolButton (0x0x7f25c61251a0) 0
+ QStyleOptionComplex (0x0x7f25c6125208) 0
+ QStyleOption (0x0x7f25c6117840) 0
+
+Class QStyleOptionComboBox
+ size=144 align=8
+ base size=140 base align=8
+QStyleOptionComboBox (0x0x7f25c61253a8) 0
+ QStyleOptionComplex (0x0x7f25c6125410) 0
+ QStyleOption (0x0x7f25c6117e40) 0
+
+Class QStyleOptionTitleBar
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionTitleBar (0x0x7f25c6125478) 0
+ QStyleOptionComplex (0x0x7f25c61254e0) 0
+ QStyleOption (0x0x7f25c618d060) 0
+
+Class QStyleOptionGroupBox
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionGroupBox (0x0x7f25c6125548) 0
+ QStyleOptionComplex (0x0x7f25c61255b0) 0
+ QStyleOption (0x0x7f25c618d2a0) 0
+
+Class QStyleOptionSizeGrip
+ size=80 align=8
+ base size=76 base align=8
+QStyleOptionSizeGrip (0x0x7f25c6125618) 0
+ QStyleOptionComplex (0x0x7f25c6125680) 0
+ QStyleOption (0x0x7f25c618d4e0) 0
+
+Class QStyleOptionGraphicsItem
+ size=96 align=8
+ base size=96 base align=8
+QStyleOptionGraphicsItem (0x0x7f25c61256e8) 0
+ QStyleOption (0x0x7f25c618d720) 0
+
+Class QStyleHintReturn
+ size=8 align=4
+ base size=8 base align=4
+QStyleHintReturn (0x0x7f25c618da80) 0
+
+Class QStyleHintReturnMask
+ size=16 align=8
+ base size=16 base align=8
+QStyleHintReturnMask (0x0x7f25c6125750) 0
+ QStyleHintReturn (0x0x7f25c618dae0) 0
+
+Class QStyleHintReturnVariant
+ size=40 align=8
+ base size=40 base align=8
+QStyleHintReturnVariant (0x0x7f25c6125820) 0
+ QStyleHintReturn (0x0x7f25c618db40) 0
+
+Class QAbstractItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemDelegate::QPrivateSignal (0x0x7f25c618dcc0) 0 empty
+
+Vtable for QAbstractItemDelegate
+QAbstractItemDelegate::_ZTV21QAbstractItemDelegate: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QAbstractItemDelegate)
+16 (int (*)(...))QAbstractItemDelegate::metaObject
+24 (int (*)(...))QAbstractItemDelegate::qt_metacast
+32 (int (*)(...))QAbstractItemDelegate::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QAbstractItemDelegate::setEditorData
+152 (int (*)(...))QAbstractItemDelegate::setModelData
+160 (int (*)(...))QAbstractItemDelegate::updateEditorGeometry
+168 (int (*)(...))QAbstractItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+
+Class QAbstractItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemDelegate (0x0x7f25c61258f0) 0
+ vptr=((& QAbstractItemDelegate::_ZTV21QAbstractItemDelegate) + 16)
+ QObject (0x0x7f25c618dc60) 0
+ primary-for QAbstractItemDelegate (0x0x7f25c61258f0)
+
+Class QAbstractScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractScrollArea::QPrivateSignal (0x0x7f25c618df00) 0 empty
+
+Vtable for QAbstractScrollArea
+QAbstractScrollArea::_ZTV19QAbstractScrollArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractScrollArea)
+16 (int (*)(...))QAbstractScrollArea::metaObject
+24 (int (*)(...))QAbstractScrollArea::qt_metacast
+32 (int (*)(...))QAbstractScrollArea::qt_metacall
+40 (int (*)(...))QAbstractScrollArea::~QAbstractScrollArea
+48 (int (*)(...))QAbstractScrollArea::~QAbstractScrollArea
+56 (int (*)(...))QAbstractScrollArea::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractScrollArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QAbstractScrollArea::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI19QAbstractScrollArea)
+488 (int (*)(...))QAbstractScrollArea::_ZThn16_N19QAbstractScrollAreaD1Ev
+496 (int (*)(...))QAbstractScrollArea::_ZThn16_N19QAbstractScrollAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractScrollArea
+ size=40 align=8
+ base size=40 base align=8
+QAbstractScrollArea (0x0x7f25c6125958) 0
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 16)
+ QFrame (0x0x7f25c61259c0) 0
+ primary-for QAbstractScrollArea (0x0x7f25c6125958)
+ QWidget (0x0x7f25c61c9070) 0
+ primary-for QFrame (0x0x7f25c61259c0)
+ QObject (0x0x7f25c618de40) 0
+ primary-for QWidget (0x0x7f25c61c9070)
+ QPaintDevice (0x0x7f25c618dea0) 16
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 488)
+
+Class QAbstractItemView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemView::QPrivateSignal (0x0x7f25c61f2240) 0 empty
+
+Vtable for QAbstractItemView
+QAbstractItemView::_ZTV17QAbstractItemView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAbstractItemView)
+16 (int (*)(...))QAbstractItemView::metaObject
+24 (int (*)(...))QAbstractItemView::qt_metacast
+32 (int (*)(...))QAbstractItemView::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QAbstractScrollArea::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))__cxa_pure_virtual
+504 (int (*)(...))__cxa_pure_virtual
+512 (int (*)(...))__cxa_pure_virtual
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QAbstractItemView::setRootIndex
+560 (int (*)(...))QAbstractItemView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QAbstractItemView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QAbstractItemView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))__cxa_pure_virtual
+704 (int (*)(...))__cxa_pure_virtual
+712 (int (*)(...))__cxa_pure_virtual
+720 (int (*)(...))__cxa_pure_virtual
+728 (int (*)(...))__cxa_pure_virtual
+736 (int (*)(...))__cxa_pure_virtual
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI17QAbstractItemView)
+800 0
+808 0
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractItemView
+ size=40 align=8
+ base size=40 base align=8
+QAbstractItemView (0x0x7f25c6125a28) 0
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 16)
+ QAbstractScrollArea (0x0x7f25c6125a90) 0
+ primary-for QAbstractItemView (0x0x7f25c6125a28)
+ QFrame (0x0x7f25c6125af8) 0
+ primary-for QAbstractScrollArea (0x0x7f25c6125a90)
+ QWidget (0x0x7f25c61c9230) 0
+ primary-for QFrame (0x0x7f25c6125af8)
+ QObject (0x0x7f25c61f2180) 0
+ primary-for QWidget (0x0x7f25c61c9230)
+ QPaintDevice (0x0x7f25c61f21e0) 16
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 800)
+
+Vtable for QAccessibleWidget
+QAccessibleWidget::_ZTV17QAccessibleWidget: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleWidget)
+16 (int (*)(...))QAccessibleWidget::~QAccessibleWidget
+24 (int (*)(...))QAccessibleWidget::~QAccessibleWidget
+32 (int (*)(...))QAccessibleWidget::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleWidget::window
+56 (int (*)(...))QAccessibleWidget::relations
+64 (int (*)(...))QAccessibleWidget::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))QAccessibleWidget::parent
+88 (int (*)(...))QAccessibleWidget::child
+96 (int (*)(...))QAccessibleWidget::childCount
+104 (int (*)(...))QAccessibleWidget::indexOfChild
+112 (int (*)(...))QAccessibleWidget::text
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleWidget::rect
+136 (int (*)(...))QAccessibleWidget::role
+144 (int (*)(...))QAccessibleWidget::state
+152 (int (*)(...))QAccessibleWidget::foregroundColor
+160 (int (*)(...))QAccessibleWidget::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleWidget::interface_cast
+184 (int (*)(...))QAccessibleWidget::actionNames
+192 (int (*)(...))QAccessibleWidget::doAction
+200 (int (*)(...))QAccessibleWidget::keyBindingsForAction
+208 (int (*)(...))-16
+216 (int (*)(...))(& _ZTI17QAccessibleWidget)
+224 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidgetD1Ev
+232 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidgetD0Ev
+240 (int (*)(...))QAccessibleWidget::_ZThn16_NK17QAccessibleWidget11actionNamesEv
+248 (int (*)(...))QAccessibleActionInterface::localizedActionName
+256 (int (*)(...))QAccessibleActionInterface::localizedActionDescription
+264 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidget8doActionERK7QString
+272 (int (*)(...))QAccessibleWidget::_ZThn16_NK17QAccessibleWidget20keyBindingsForActionERK7QString
+
+Class QAccessibleWidget
+ size=32 align=8
+ base size=32 base align=8
+QAccessibleWidget (0x0x7f25c6219770) 0
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 16)
+ QAccessibleObject (0x0x7f25c6125c98) 0
+ primary-for QAccessibleWidget (0x0x7f25c6219770)
+ QAccessibleInterface (0x0x7f25c61f2c60) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f25c6125c98)
+ QAccessibleActionInterface (0x0x7f25c61f2cc0) 16 nearly-empty
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 224)
+
+Class QApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QApplication::QPrivateSignal (0x0x7f25c61f2de0) 0 empty
+
+Vtable for QApplication
+QApplication::_ZTV12QApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QApplication)
+16 (int (*)(...))QApplication::metaObject
+24 (int (*)(...))QApplication::qt_metacast
+32 (int (*)(...))QApplication::qt_metacall
+40 (int (*)(...))QApplication::~QApplication
+48 (int (*)(...))QApplication::~QApplication
+56 (int (*)(...))QApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QApplication::notify
+120 (int (*)(...))QApplication::compressEvent
+
+Class QApplication
+ size=16 align=8
+ base size=16 base align=8
+QApplication (0x0x7f25c6125d00) 0
+ vptr=((& QApplication::_ZTV12QApplication) + 16)
+ QGuiApplication (0x0x7f25c6125d68) 0
+ primary-for QApplication (0x0x7f25c6125d00)
+ QCoreApplication (0x0x7f25c6125dd0) 0
+ primary-for QGuiApplication (0x0x7f25c6125d68)
+ QObject (0x0x7f25c61f2d80) 0
+ primary-for QCoreApplication (0x0x7f25c6125dd0)
+
+Vtable for QLayoutItem
+QLayoutItem::_ZTV11QLayoutItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QLayoutItem)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QLayoutItem::hasHeightForWidth
+96 (int (*)(...))QLayoutItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QLayoutItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QLayoutItem::controlTypes
+
+Class QLayoutItem
+ size=16 align=8
+ base size=12 base align=8
+QLayoutItem (0x0x7f25c5ea40c0) 0
+ vptr=((& QLayoutItem::_ZTV11QLayoutItem) + 16)
+
+Vtable for QSpacerItem
+QSpacerItem::_ZTV11QSpacerItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSpacerItem)
+16 (int (*)(...))QSpacerItem::~QSpacerItem
+24 (int (*)(...))QSpacerItem::~QSpacerItem
+32 (int (*)(...))QSpacerItem::sizeHint
+40 (int (*)(...))QSpacerItem::minimumSize
+48 (int (*)(...))QSpacerItem::maximumSize
+56 (int (*)(...))QSpacerItem::expandingDirections
+64 (int (*)(...))QSpacerItem::setGeometry
+72 (int (*)(...))QSpacerItem::geometry
+80 (int (*)(...))QSpacerItem::isEmpty
+88 (int (*)(...))QLayoutItem::hasHeightForWidth
+96 (int (*)(...))QLayoutItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QLayoutItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QSpacerItem::spacerItem
+144 (int (*)(...))QLayoutItem::controlTypes
+
+Class QSpacerItem
+ size=40 align=8
+ base size=40 base align=8
+QSpacerItem (0x0x7f25c6125e38) 0
+ vptr=((& QSpacerItem::_ZTV11QSpacerItem) + 16)
+ QLayoutItem (0x0x7f25c5ea4300) 0
+ primary-for QSpacerItem (0x0x7f25c6125e38)
+
+Vtable for QWidgetItem
+QWidgetItem::_ZTV11QWidgetItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWidgetItem)
+16 (int (*)(...))QWidgetItem::~QWidgetItem
+24 (int (*)(...))QWidgetItem::~QWidgetItem
+32 (int (*)(...))QWidgetItem::sizeHint
+40 (int (*)(...))QWidgetItem::minimumSize
+48 (int (*)(...))QWidgetItem::maximumSize
+56 (int (*)(...))QWidgetItem::expandingDirections
+64 (int (*)(...))QWidgetItem::setGeometry
+72 (int (*)(...))QWidgetItem::geometry
+80 (int (*)(...))QWidgetItem::isEmpty
+88 (int (*)(...))QWidgetItem::hasHeightForWidth
+96 (int (*)(...))QWidgetItem::heightForWidth
+104 (int (*)(...))QWidgetItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QWidgetItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QWidgetItem::controlTypes
+
+Class QWidgetItem
+ size=24 align=8
+ base size=24 base align=8
+QWidgetItem (0x0x7f25c6125ea0) 0
+ vptr=((& QWidgetItem::_ZTV11QWidgetItem) + 16)
+ QLayoutItem (0x0x7f25c5ea4540) 0
+ primary-for QWidgetItem (0x0x7f25c6125ea0)
+
+Vtable for QWidgetItemV2
+QWidgetItemV2::_ZTV13QWidgetItemV2: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QWidgetItemV2)
+16 (int (*)(...))QWidgetItemV2::~QWidgetItemV2
+24 (int (*)(...))QWidgetItemV2::~QWidgetItemV2
+32 (int (*)(...))QWidgetItemV2::sizeHint
+40 (int (*)(...))QWidgetItemV2::minimumSize
+48 (int (*)(...))QWidgetItemV2::maximumSize
+56 (int (*)(...))QWidgetItem::expandingDirections
+64 (int (*)(...))QWidgetItem::setGeometry
+72 (int (*)(...))QWidgetItem::geometry
+80 (int (*)(...))QWidgetItem::isEmpty
+88 (int (*)(...))QWidgetItem::hasHeightForWidth
+96 (int (*)(...))QWidgetItemV2::heightForWidth
+104 (int (*)(...))QWidgetItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QWidgetItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QWidgetItem::controlTypes
+
+Class QWidgetItemV2
+ size=88 align=8
+ base size=88 base align=8
+QWidgetItemV2 (0x0x7f25c6125f08) 0
+ vptr=((& QWidgetItemV2::_ZTV13QWidgetItemV2) + 16)
+ QWidgetItem (0x0x7f25c6125f70) 0
+ primary-for QWidgetItemV2 (0x0x7f25c6125f08)
+ QLayoutItem (0x0x7f25c5ea4720) 0
+ primary-for QWidgetItem (0x0x7f25c6125f70)
+
+Class QLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLayout::QPrivateSignal (0x0x7f25c5ea48a0) 0 empty
+
+Vtable for QLayout
+QLayout::_ZTV7QLayout: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QLayout)
+16 (int (*)(...))QLayout::metaObject
+24 (int (*)(...))QLayout::qt_metacast
+32 (int (*)(...))QLayout::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLayout::spacing
+120 (int (*)(...))QLayout::setSpacing
+128 (int (*)(...))QLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QLayout::expandingDirections
+160 (int (*)(...))QLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QLayout::setGeometry
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))-16
+264 (int (*)(...))(& _ZTI7QLayout)
+272 0
+280 0
+288 (int (*)(...))__cxa_pure_virtual
+296 (int (*)(...))QLayout::_ZThn16_NK7QLayout11minimumSizeEv
+304 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+312 (int (*)(...))QLayout::_ZThn16_NK7QLayout19expandingDirectionsEv
+320 (int (*)(...))QLayout::_ZThn16_N7QLayout11setGeometryERK5QRect
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+336 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+344 (int (*)(...))QLayoutItem::hasHeightForWidth
+352 (int (*)(...))QLayoutItem::heightForWidth
+360 (int (*)(...))QLayoutItem::minimumHeightForWidth
+368 (int (*)(...))QLayout::_ZThn16_N7QLayout10invalidateEv
+376 (int (*)(...))QLayoutItem::widget
+384 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+392 (int (*)(...))QLayoutItem::spacerItem
+400 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QLayout
+ size=32 align=8
+ base size=28 base align=8
+QLayout (0x0x7f25c6219930) 0
+ vptr=((& QLayout::_ZTV7QLayout) + 16)
+ QObject (0x0x7f25c5ea47e0) 0
+ primary-for QLayout (0x0x7f25c6219930)
+ QLayoutItem (0x0x7f25c5ea4840) 16
+ vptr=((& QLayout::_ZTV7QLayout) + 272)
+
+Class QGridLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGridLayout::QPrivateSignal (0x0x7f25c5ea4ba0) 0 empty
+
+Vtable for QGridLayout
+QGridLayout::_ZTV11QGridLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QGridLayout)
+16 (int (*)(...))QGridLayout::metaObject
+24 (int (*)(...))QGridLayout::qt_metacast
+32 (int (*)(...))QGridLayout::qt_metacall
+40 (int (*)(...))QGridLayout::~QGridLayout
+48 (int (*)(...))QGridLayout::~QGridLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGridLayout::spacing
+120 (int (*)(...))QGridLayout::setSpacing
+128 (int (*)(...))QGridLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QGridLayout::addItem
+152 (int (*)(...))QGridLayout::expandingDirections
+160 (int (*)(...))QGridLayout::minimumSize
+168 (int (*)(...))QGridLayout::maximumSize
+176 (int (*)(...))QGridLayout::setGeometry
+184 (int (*)(...))QGridLayout::itemAt
+192 (int (*)(...))QGridLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QGridLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QGridLayout::sizeHint
+264 (int (*)(...))QGridLayout::hasHeightForWidth
+272 (int (*)(...))QGridLayout::heightForWidth
+280 (int (*)(...))QGridLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QGridLayout)
+304 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayoutD1Ev
+312 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayoutD0Ev
+320 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout8sizeHintEv
+328 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout11minimumSizeEv
+336 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout11maximumSizeEv
+344 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout19expandingDirectionsEv
+352 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout17hasHeightForWidthEv
+384 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout14heightForWidthEi
+392 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout21minimumHeightForWidthEi
+400 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QGridLayout
+ size=32 align=8
+ base size=28 base align=8
+QGridLayout (0x0x7f25c6125000) 0
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 16)
+ QLayout (0x0x7f25c6219c40) 0
+ primary-for QGridLayout (0x0x7f25c6125000)
+ QObject (0x0x7f25c5ea4ae0) 0
+ primary-for QLayout (0x0x7f25c6219c40)
+ QLayoutItem (0x0x7f25c5ea4b40) 16
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 304)
+
+Class QBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBoxLayout::QPrivateSignal (0x0x7f25c5ea4e40) 0 empty
+
+Vtable for QBoxLayout
+QBoxLayout::_ZTV10QBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QBoxLayout)
+16 (int (*)(...))QBoxLayout::metaObject
+24 (int (*)(...))QBoxLayout::qt_metacast
+32 (int (*)(...))QBoxLayout::qt_metacall
+40 (int (*)(...))QBoxLayout::~QBoxLayout
+48 (int (*)(...))QBoxLayout::~QBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI10QBoxLayout)
+304 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayoutD1Ev
+312 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QBoxLayout (0x0x7f25c5f0c000) 0
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 16)
+ QLayout (0x0x7f25c6219cb0) 0
+ primary-for QBoxLayout (0x0x7f25c5f0c000)
+ QObject (0x0x7f25c5ea4d80) 0
+ primary-for QLayout (0x0x7f25c6219cb0)
+ QLayoutItem (0x0x7f25c5ea4de0) 16
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 304)
+
+Class QHBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHBoxLayout::QPrivateSignal (0x0x7f25c5f250c0) 0 empty
+
+Vtable for QHBoxLayout
+QHBoxLayout::_ZTV11QHBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHBoxLayout)
+16 (int (*)(...))QHBoxLayout::metaObject
+24 (int (*)(...))QHBoxLayout::qt_metacast
+32 (int (*)(...))QHBoxLayout::qt_metacall
+40 (int (*)(...))QHBoxLayout::~QHBoxLayout
+48 (int (*)(...))QHBoxLayout::~QHBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QHBoxLayout)
+304 (int (*)(...))QHBoxLayout::_ZThn16_N11QHBoxLayoutD1Ev
+312 (int (*)(...))QHBoxLayout::_ZThn16_N11QHBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QHBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QHBoxLayout (0x0x7f25c5f0c068) 0
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 16)
+ QBoxLayout (0x0x7f25c5f0c0d0) 0
+ primary-for QHBoxLayout (0x0x7f25c5f0c068)
+ QLayout (0x0x7f25c5f24000) 0
+ primary-for QBoxLayout (0x0x7f25c5f0c0d0)
+ QObject (0x0x7f25c5f25000) 0
+ primary-for QLayout (0x0x7f25c5f24000)
+ QLayoutItem (0x0x7f25c5f25060) 16
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 304)
+
+Class QVBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVBoxLayout::QPrivateSignal (0x0x7f25c5f25240) 0 empty
+
+Vtable for QVBoxLayout
+QVBoxLayout::_ZTV11QVBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QVBoxLayout)
+16 (int (*)(...))QVBoxLayout::metaObject
+24 (int (*)(...))QVBoxLayout::qt_metacast
+32 (int (*)(...))QVBoxLayout::qt_metacall
+40 (int (*)(...))QVBoxLayout::~QVBoxLayout
+48 (int (*)(...))QVBoxLayout::~QVBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QVBoxLayout)
+304 (int (*)(...))QVBoxLayout::_ZThn16_N11QVBoxLayoutD1Ev
+312 (int (*)(...))QVBoxLayout::_ZThn16_N11QVBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QVBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QVBoxLayout (0x0x7f25c5f0c138) 0
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 16)
+ QBoxLayout (0x0x7f25c5f0c1a0) 0
+ primary-for QVBoxLayout (0x0x7f25c5f0c138)
+ QLayout (0x0x7f25c5f24070) 0
+ primary-for QBoxLayout (0x0x7f25c5f0c1a0)
+ QObject (0x0x7f25c5f25180) 0
+ primary-for QLayout (0x0x7f25c5f24070)
+ QLayoutItem (0x0x7f25c5f251e0) 16
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 304)
+
+Class QButtonGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QButtonGroup::QPrivateSignal (0x0x7f25c5f25360) 0 empty
+
+Vtable for QButtonGroup
+QButtonGroup::_ZTV12QButtonGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QButtonGroup)
+16 (int (*)(...))QButtonGroup::metaObject
+24 (int (*)(...))QButtonGroup::qt_metacast
+32 (int (*)(...))QButtonGroup::qt_metacall
+40 (int (*)(...))QButtonGroup::~QButtonGroup
+48 (int (*)(...))QButtonGroup::~QButtonGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QButtonGroup
+ size=16 align=8
+ base size=16 base align=8
+QButtonGroup (0x0x7f25c5f0c208) 0
+ vptr=((& QButtonGroup::_ZTV12QButtonGroup) + 16)
+ QObject (0x0x7f25c5f25300) 0
+ primary-for QButtonGroup (0x0x7f25c5f0c208)
+
+Class QCalendarWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCalendarWidget::QPrivateSignal (0x0x7f25c5f255a0) 0 empty
+
+Vtable for QCalendarWidget
+QCalendarWidget::_ZTV15QCalendarWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QCalendarWidget)
+16 (int (*)(...))QCalendarWidget::metaObject
+24 (int (*)(...))QCalendarWidget::qt_metacast
+32 (int (*)(...))QCalendarWidget::qt_metacall
+40 (int (*)(...))QCalendarWidget::~QCalendarWidget
+48 (int (*)(...))QCalendarWidget::~QCalendarWidget
+56 (int (*)(...))QCalendarWidget::event
+64 (int (*)(...))QCalendarWidget::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCalendarWidget::sizeHint
+136 (int (*)(...))QCalendarWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QCalendarWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QCalendarWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QCalendarWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QCalendarWidget::paintCell
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI15QCalendarWidget)
+456 (int (*)(...))QCalendarWidget::_ZThn16_N15QCalendarWidgetD1Ev
+464 (int (*)(...))QCalendarWidget::_ZThn16_N15QCalendarWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCalendarWidget
+ size=40 align=8
+ base size=40 base align=8
+QCalendarWidget (0x0x7f25c5f0c270) 0
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 16)
+ QWidget (0x0x7f25c5f240e0) 0
+ primary-for QCalendarWidget (0x0x7f25c5f0c270)
+ QObject (0x0x7f25c5f254e0) 0
+ primary-for QWidget (0x0x7f25c5f240e0)
+ QPaintDevice (0x0x7f25c5f25540) 16
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 456)
+
+Class QCheckBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCheckBox::QPrivateSignal (0x0x7f25c5f25a20) 0 empty
+
+Vtable for QCheckBox
+QCheckBox::_ZTV9QCheckBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QCheckBox)
+16 (int (*)(...))QCheckBox::metaObject
+24 (int (*)(...))QCheckBox::qt_metacast
+32 (int (*)(...))QCheckBox::qt_metacall
+40 (int (*)(...))QCheckBox::~QCheckBox
+48 (int (*)(...))QCheckBox::~QCheckBox
+56 (int (*)(...))QCheckBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCheckBox::sizeHint
+136 (int (*)(...))QCheckBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QCheckBox::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QCheckBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QCheckBox::hitButton
+440 (int (*)(...))QCheckBox::checkStateSet
+448 (int (*)(...))QCheckBox::nextCheckState
+456 (int (*)(...))QCheckBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI9QCheckBox)
+480 (int (*)(...))QCheckBox::_ZThn16_N9QCheckBoxD1Ev
+488 (int (*)(...))QCheckBox::_ZThn16_N9QCheckBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCheckBox
+ size=40 align=8
+ base size=40 base align=8
+QCheckBox (0x0x7f25c5f0c2d8) 0
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 16)
+ QAbstractButton (0x0x7f25c5f0c340) 0
+ primary-for QCheckBox (0x0x7f25c5f0c2d8)
+ QWidget (0x0x7f25c5f244d0) 0
+ primary-for QAbstractButton (0x0x7f25c5f0c340)
+ QObject (0x0x7f25c5f25960) 0
+ primary-for QWidget (0x0x7f25c5f244d0)
+ QPaintDevice (0x0x7f25c5f259c0) 16
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 480)
+
+Class QDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialog::QPrivateSignal (0x0x7f25c5f25c60) 0 empty
+
+Vtable for QDialog
+QDialog::_ZTV7QDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QDialog)
+16 (int (*)(...))QDialog::metaObject
+24 (int (*)(...))QDialog::qt_metacast
+32 (int (*)(...))QDialog::qt_metacall
+40 (int (*)(...))QDialog::~QDialog
+48 (int (*)(...))QDialog::~QDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI7QDialog)
+488 (int (*)(...))QDialog::_ZThn16_N7QDialogD1Ev
+496 (int (*)(...))QDialog::_ZThn16_N7QDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDialog
+ size=40 align=8
+ base size=40 base align=8
+QDialog (0x0x7f25c5f0c3a8) 0
+ vptr=((& QDialog::_ZTV7QDialog) + 16)
+ QWidget (0x0x7f25c5f24540) 0
+ primary-for QDialog (0x0x7f25c5f0c3a8)
+ QObject (0x0x7f25c5f25ba0) 0
+ primary-for QWidget (0x0x7f25c5f24540)
+ QPaintDevice (0x0x7f25c5f25c00) 16
+ vptr=((& QDialog::_ZTV7QDialog) + 488)
+
+Class QColorDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColorDialog::QPrivateSignal (0x0x7f25c5f25ea0) 0 empty
+
+Vtable for QColorDialog
+QColorDialog::_ZTV12QColorDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QColorDialog)
+16 (int (*)(...))QColorDialog::metaObject
+24 (int (*)(...))QColorDialog::qt_metacast
+32 (int (*)(...))QColorDialog::qt_metacall
+40 (int (*)(...))QColorDialog::~QColorDialog
+48 (int (*)(...))QColorDialog::~QColorDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QColorDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QColorDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QColorDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QColorDialog)
+488 (int (*)(...))QColorDialog::_ZThn16_N12QColorDialogD1Ev
+496 (int (*)(...))QColorDialog::_ZThn16_N12QColorDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QColorDialog
+ size=40 align=8
+ base size=40 base align=8
+QColorDialog (0x0x7f25c5f0c410) 0
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 16)
+ QDialog (0x0x7f25c5f0c478) 0
+ primary-for QColorDialog (0x0x7f25c5f0c410)
+ QWidget (0x0x7f25c5f24690) 0
+ primary-for QDialog (0x0x7f25c5f0c478)
+ QObject (0x0x7f25c5f25de0) 0
+ primary-for QWidget (0x0x7f25c5f24690)
+ QPaintDevice (0x0x7f25c5f25e40) 16
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 488)
+
+Class QColormap
+ size=8 align=8
+ base size=8 base align=8
+QColormap (0x0x7f25c5fa74e0) 0
+
+Class QColumnView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColumnView::QPrivateSignal (0x0x7f25c5fa7600) 0 empty
+
+Vtable for QColumnView
+QColumnView::_ZTV11QColumnView: 109 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QColumnView)
+16 (int (*)(...))QColumnView::metaObject
+24 (int (*)(...))QColumnView::qt_metacast
+32 (int (*)(...))QColumnView::qt_metacall
+40 (int (*)(...))QColumnView::~QColumnView
+48 (int (*)(...))QColumnView::~QColumnView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QColumnView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QColumnView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QColumnView::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QColumnView::setModel
+480 (int (*)(...))QColumnView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QColumnView::visualRect
+504 (int (*)(...))QColumnView::scrollTo
+512 (int (*)(...))QColumnView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QColumnView::setRootIndex
+560 (int (*)(...))QAbstractItemView::doItemsLayout
+568 (int (*)(...))QColumnView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QColumnView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QColumnView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QAbstractItemView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QColumnView::moveCursor
+704 (int (*)(...))QColumnView::horizontalOffset
+712 (int (*)(...))QColumnView::verticalOffset
+720 (int (*)(...))QColumnView::isIndexHidden
+728 (int (*)(...))QColumnView::setSelection
+736 (int (*)(...))QColumnView::visualRegionForSelection
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QColumnView::createColumn
+792 (int (*)(...))-16
+800 (int (*)(...))(& _ZTI11QColumnView)
+808 (int (*)(...))QColumnView::_ZThn16_N11QColumnViewD1Ev
+816 (int (*)(...))QColumnView::_ZThn16_N11QColumnViewD0Ev
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QColumnView
+ size=40 align=8
+ base size=40 base align=8
+QColumnView (0x0x7f25c5f0c618) 0
+ vptr=((& QColumnView::_ZTV11QColumnView) + 16)
+ QAbstractItemView (0x0x7f25c5f0c680) 0
+ primary-for QColumnView (0x0x7f25c5f0c618)
+ QAbstractScrollArea (0x0x7f25c5f0c6e8) 0
+ primary-for QAbstractItemView (0x0x7f25c5f0c680)
+ QFrame (0x0x7f25c5f0c750) 0
+ primary-for QAbstractScrollArea (0x0x7f25c5f0c6e8)
+ QWidget (0x0x7f25c5f249a0) 0
+ primary-for QFrame (0x0x7f25c5f0c750)
+ QObject (0x0x7f25c5fa7540) 0
+ primary-for QWidget (0x0x7f25c5f249a0)
+ QPaintDevice (0x0x7f25c5fa75a0) 16
+ vptr=((& QColumnView::_ZTV11QColumnView) + 808)
+
+Class QComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QComboBox::QPrivateSignal (0x0x7f25c5fa7840) 0 empty
+
+Vtable for QComboBox
+QComboBox::_ZTV9QComboBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QComboBox)
+16 (int (*)(...))QComboBox::metaObject
+24 (int (*)(...))QComboBox::qt_metacast
+32 (int (*)(...))QComboBox::qt_metacall
+40 (int (*)(...))QComboBox::~QComboBox
+48 (int (*)(...))QComboBox::~QComboBox
+56 (int (*)(...))QComboBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QComboBox::sizeHint
+136 (int (*)(...))QComboBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QComboBox::mousePressEvent
+176 (int (*)(...))QComboBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QComboBox::wheelEvent
+208 (int (*)(...))QComboBox::keyPressEvent
+216 (int (*)(...))QComboBox::keyReleaseEvent
+224 (int (*)(...))QComboBox::focusInEvent
+232 (int (*)(...))QComboBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QComboBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QComboBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QComboBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QComboBox::showEvent
+352 (int (*)(...))QComboBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QComboBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QComboBox::inputMethodEvent
+416 (int (*)(...))QComboBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QComboBox::setModel
+440 (int (*)(...))QComboBox::showPopup
+448 (int (*)(...))QComboBox::hidePopup
+456 (int (*)(...))QComboBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI9QComboBox)
+480 (int (*)(...))QComboBox::_ZThn16_N9QComboBoxD1Ev
+488 (int (*)(...))QComboBox::_ZThn16_N9QComboBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QComboBox
+ size=40 align=8
+ base size=40 base align=8
+QComboBox (0x0x7f25c5f0c7b8) 0
+ vptr=((& QComboBox::_ZTV9QComboBox) + 16)
+ QWidget (0x0x7f25c5f24a10) 0
+ primary-for QComboBox (0x0x7f25c5f0c7b8)
+ QObject (0x0x7f25c5fa7780) 0
+ primary-for QWidget (0x0x7f25c5f24a10)
+ QPaintDevice (0x0x7f25c5fa77e0) 16
+ vptr=((& QComboBox::_ZTV9QComboBox) + 480)
+
+Class QPushButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPushButton::QPrivateSignal (0x0x7f25c5fa7de0) 0 empty
+
+Vtable for QPushButton
+QPushButton::_ZTV11QPushButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPushButton)
+16 (int (*)(...))QPushButton::metaObject
+24 (int (*)(...))QPushButton::qt_metacast
+32 (int (*)(...))QPushButton::qt_metacall
+40 (int (*)(...))QPushButton::~QPushButton
+48 (int (*)(...))QPushButton::~QPushButton
+56 (int (*)(...))QPushButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QPushButton::sizeHint
+136 (int (*)(...))QPushButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QPushButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QPushButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QPushButton::focusInEvent
+232 (int (*)(...))QPushButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QPushButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QPushButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QPushButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI11QPushButton)
+480 (int (*)(...))QPushButton::_ZThn16_N11QPushButtonD1Ev
+488 (int (*)(...))QPushButton::_ZThn16_N11QPushButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QPushButton
+ size=40 align=8
+ base size=40 base align=8
+QPushButton (0x0x7f25c5f0c820) 0
+ vptr=((& QPushButton::_ZTV11QPushButton) + 16)
+ QAbstractButton (0x0x7f25c5f0c888) 0
+ primary-for QPushButton (0x0x7f25c5f0c820)
+ QWidget (0x0x7f25c5f24ee0) 0
+ primary-for QAbstractButton (0x0x7f25c5f0c888)
+ QObject (0x0x7f25c5fa7d20) 0
+ primary-for QWidget (0x0x7f25c5f24ee0)
+ QPaintDevice (0x0x7f25c5fa7d80) 16
+ vptr=((& QPushButton::_ZTV11QPushButton) + 480)
+
+Class QCommandLinkButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommandLinkButton::QPrivateSignal (0x0x7f25c5c52060) 0 empty
+
+Vtable for QCommandLinkButton
+QCommandLinkButton::_ZTV18QCommandLinkButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QCommandLinkButton)
+16 (int (*)(...))QCommandLinkButton::metaObject
+24 (int (*)(...))QCommandLinkButton::qt_metacast
+32 (int (*)(...))QCommandLinkButton::qt_metacall
+40 (int (*)(...))QCommandLinkButton::~QCommandLinkButton
+48 (int (*)(...))QCommandLinkButton::~QCommandLinkButton
+56 (int (*)(...))QCommandLinkButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCommandLinkButton::sizeHint
+136 (int (*)(...))QCommandLinkButton::minimumSizeHint
+144 (int (*)(...))QCommandLinkButton::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QPushButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QPushButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QPushButton::focusInEvent
+232 (int (*)(...))QPushButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QCommandLinkButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QPushButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QCommandLinkButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI18QCommandLinkButton)
+480 (int (*)(...))QCommandLinkButton::_ZThn16_N18QCommandLinkButtonD1Ev
+488 (int (*)(...))QCommandLinkButton::_ZThn16_N18QCommandLinkButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCommandLinkButton
+ size=40 align=8
+ base size=40 base align=8
+QCommandLinkButton (0x0x7f25c5f0c8f0) 0
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 16)
+ QPushButton (0x0x7f25c5f0c958) 0
+ primary-for QCommandLinkButton (0x0x7f25c5f0c8f0)
+ QAbstractButton (0x0x7f25c5f0c9c0) 0
+ primary-for QPushButton (0x0x7f25c5f0c958)
+ QWidget (0x0x7f25c5f24f50) 0
+ primary-for QAbstractButton (0x0x7f25c5f0c9c0)
+ QObject (0x0x7f25c5fa7f60) 0
+ primary-for QWidget (0x0x7f25c5f24f50)
+ QPaintDevice (0x0x7f25c5c52000) 16
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 480)
+
+Class QCommonStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommonStyle::QPrivateSignal (0x0x7f25c5c52240) 0 empty
+
+Vtable for QCommonStyle
+QCommonStyle::_ZTV12QCommonStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QCommonStyle)
+16 (int (*)(...))QCommonStyle::metaObject
+24 (int (*)(...))QCommonStyle::qt_metacast
+32 (int (*)(...))QCommonStyle::qt_metacall
+40 (int (*)(...))QCommonStyle::~QCommonStyle
+48 (int (*)(...))QCommonStyle::~QCommonStyle
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCommonStyle::polish
+120 (int (*)(...))QCommonStyle::unpolish
+128 (int (*)(...))QCommonStyle::polish
+136 (int (*)(...))QCommonStyle::unpolish
+144 (int (*)(...))QCommonStyle::polish
+152 (int (*)(...))QStyle::itemTextRect
+160 (int (*)(...))QStyle::itemPixmapRect
+168 (int (*)(...))QStyle::drawItemText
+176 (int (*)(...))QStyle::drawItemPixmap
+184 (int (*)(...))QStyle::standardPalette
+192 (int (*)(...))QCommonStyle::drawPrimitive
+200 (int (*)(...))QCommonStyle::drawControl
+208 (int (*)(...))QCommonStyle::subElementRect
+216 (int (*)(...))QCommonStyle::drawComplexControl
+224 (int (*)(...))QCommonStyle::hitTestComplexControl
+232 (int (*)(...))QCommonStyle::subControlRect
+240 (int (*)(...))QCommonStyle::pixelMetric
+248 (int (*)(...))QCommonStyle::sizeFromContents
+256 (int (*)(...))QCommonStyle::styleHint
+264 (int (*)(...))QCommonStyle::standardPixmap
+272 (int (*)(...))QCommonStyle::standardIcon
+280 (int (*)(...))QCommonStyle::generatedIconPixmap
+288 (int (*)(...))QCommonStyle::layoutSpacing
+
+Class QCommonStyle
+ size=16 align=8
+ base size=16 base align=8
+QCommonStyle (0x0x7f25c5f0ca28) 0
+ vptr=((& QCommonStyle::_ZTV12QCommonStyle) + 16)
+ QStyle (0x0x7f25c5f0ca90) 0
+ primary-for QCommonStyle (0x0x7f25c5f0ca28)
+ QObject (0x0x7f25c5c521e0) 0
+ primary-for QStyle (0x0x7f25c5f0ca90)
+
+Class QCompleter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCompleter::QPrivateSignal (0x0x7f25c5c52420) 0 empty
+
+Vtable for QCompleter
+QCompleter::_ZTV10QCompleter: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QCompleter)
+16 (int (*)(...))QCompleter::metaObject
+24 (int (*)(...))QCompleter::qt_metacast
+32 (int (*)(...))QCompleter::qt_metacall
+40 (int (*)(...))QCompleter::~QCompleter
+48 (int (*)(...))QCompleter::~QCompleter
+56 (int (*)(...))QCompleter::event
+64 (int (*)(...))QCompleter::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCompleter::pathFromIndex
+120 (int (*)(...))QCompleter::splitPath
+
+Class QCompleter
+ size=16 align=8
+ base size=16 base align=8
+QCompleter (0x0x7f25c5f0caf8) 0
+ vptr=((& QCompleter::_ZTV10QCompleter) + 16)
+ QObject (0x0x7f25c5c523c0) 0
+ primary-for QCompleter (0x0x7f25c5f0caf8)
+
+Class QDataWidgetMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDataWidgetMapper::QPrivateSignal (0x0x7f25c5c52780) 0 empty
+
+Vtable for QDataWidgetMapper
+QDataWidgetMapper::_ZTV17QDataWidgetMapper: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QDataWidgetMapper)
+16 (int (*)(...))QDataWidgetMapper::metaObject
+24 (int (*)(...))QDataWidgetMapper::qt_metacast
+32 (int (*)(...))QDataWidgetMapper::qt_metacall
+40 (int (*)(...))QDataWidgetMapper::~QDataWidgetMapper
+48 (int (*)(...))QDataWidgetMapper::~QDataWidgetMapper
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDataWidgetMapper::setCurrentIndex
+
+Class QDataWidgetMapper
+ size=16 align=8
+ base size=16 base align=8
+QDataWidgetMapper (0x0x7f25c5f0cb60) 0
+ vptr=((& QDataWidgetMapper::_ZTV17QDataWidgetMapper) + 16)
+ QObject (0x0x7f25c5c52720) 0
+ primary-for QDataWidgetMapper (0x0x7f25c5f0cb60)
+
+Class QDateTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateTimeEdit::QPrivateSignal (0x0x7f25c5c52a80) 0 empty
+
+Vtable for QDateTimeEdit
+QDateTimeEdit::_ZTV13QDateTimeEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QDateTimeEdit)
+16 (int (*)(...))QDateTimeEdit::metaObject
+24 (int (*)(...))QDateTimeEdit::qt_metacast
+32 (int (*)(...))QDateTimeEdit::qt_metacall
+40 (int (*)(...))QDateTimeEdit::~QDateTimeEdit
+48 (int (*)(...))QDateTimeEdit::~QDateTimeEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI13QDateTimeEdit)
+512 (int (*)(...))QDateTimeEdit::_ZThn16_N13QDateTimeEditD1Ev
+520 (int (*)(...))QDateTimeEdit::_ZThn16_N13QDateTimeEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDateTimeEdit
+ size=40 align=8
+ base size=40 base align=8
+QDateTimeEdit (0x0x7f25c5f0cbc8) 0
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 16)
+ QAbstractSpinBox (0x0x7f25c5f0cc30) 0
+ primary-for QDateTimeEdit (0x0x7f25c5f0cbc8)
+ QWidget (0x0x7f25c5c7c380) 0
+ primary-for QAbstractSpinBox (0x0x7f25c5f0cc30)
+ QObject (0x0x7f25c5c529c0) 0
+ primary-for QWidget (0x0x7f25c5c7c380)
+ QPaintDevice (0x0x7f25c5c52a20) 16
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 512)
+
+Class QTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeEdit::QPrivateSignal (0x0x7f25c5ce5060) 0 empty
+
+Vtable for QTimeEdit
+QTimeEdit::_ZTV9QTimeEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTimeEdit)
+16 (int (*)(...))QTimeEdit::metaObject
+24 (int (*)(...))QTimeEdit::qt_metacast
+32 (int (*)(...))QTimeEdit::qt_metacall
+40 (int (*)(...))QTimeEdit::~QTimeEdit
+48 (int (*)(...))QTimeEdit::~QTimeEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI9QTimeEdit)
+512 (int (*)(...))QTimeEdit::_ZThn16_N9QTimeEditD1Ev
+520 (int (*)(...))QTimeEdit::_ZThn16_N9QTimeEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTimeEdit
+ size=40 align=8
+ base size=40 base align=8
+QTimeEdit (0x0x7f25c5f0cdd0) 0
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 16)
+ QDateTimeEdit (0x0x7f25c5f0ce38) 0
+ primary-for QTimeEdit (0x0x7f25c5f0cdd0)
+ QAbstractSpinBox (0x0x7f25c5f0cea0) 0
+ primary-for QDateTimeEdit (0x0x7f25c5f0ce38)
+ QWidget (0x0x7f25c5c7c8c0) 0
+ primary-for QAbstractSpinBox (0x0x7f25c5f0cea0)
+ QObject (0x0x7f25c5c52f60) 0
+ primary-for QWidget (0x0x7f25c5c7c8c0)
+ QPaintDevice (0x0x7f25c5ce5000) 16
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 512)
+
+Class QDateEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateEdit::QPrivateSignal (0x0x7f25c5ce51e0) 0 empty
+
+Vtable for QDateEdit
+QDateEdit::_ZTV9QDateEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QDateEdit)
+16 (int (*)(...))QDateEdit::metaObject
+24 (int (*)(...))QDateEdit::qt_metacast
+32 (int (*)(...))QDateEdit::qt_metacall
+40 (int (*)(...))QDateEdit::~QDateEdit
+48 (int (*)(...))QDateEdit::~QDateEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI9QDateEdit)
+512 (int (*)(...))QDateEdit::_ZThn16_N9QDateEditD1Ev
+520 (int (*)(...))QDateEdit::_ZThn16_N9QDateEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDateEdit
+ size=40 align=8
+ base size=40 base align=8
+QDateEdit (0x0x7f25c5f0cf08) 0
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 16)
+ QDateTimeEdit (0x0x7f25c5f0cf70) 0
+ primary-for QDateEdit (0x0x7f25c5f0cf08)
+ QAbstractSpinBox (0x0x7f25c5cf3000) 0
+ primary-for QDateTimeEdit (0x0x7f25c5f0cf70)
+ QWidget (0x0x7f25c5c7c930) 0
+ primary-for QAbstractSpinBox (0x0x7f25c5cf3000)
+ QObject (0x0x7f25c5ce5120) 0
+ primary-for QWidget (0x0x7f25c5c7c930)
+ QPaintDevice (0x0x7f25c5ce5180) 16
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 512)
+
+Class QDial::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDial::QPrivateSignal (0x0x7f25c5ce5540) 0 empty
+
+Vtable for QDial
+QDial::_ZTV5QDial: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDial)
+16 (int (*)(...))QDial::metaObject
+24 (int (*)(...))QDial::qt_metacast
+32 (int (*)(...))QDial::qt_metacall
+40 (int (*)(...))QDial::~QDial
+48 (int (*)(...))QDial::~QDial
+56 (int (*)(...))QDial::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDial::sizeHint
+136 (int (*)(...))QDial::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDial::mousePressEvent
+176 (int (*)(...))QDial::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QDial::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDial::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDial::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDial::sliderChange
+440 (int (*)(...))QDial::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI5QDial)
+464 (int (*)(...))QDial::_ZThn16_N5QDialD1Ev
+472 (int (*)(...))QDial::_ZThn16_N5QDialD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDial
+ size=40 align=8
+ base size=40 base align=8
+QDial (0x0x7f25c5cf3068) 0
+ vptr=((& QDial::_ZTV5QDial) + 16)
+ QAbstractSlider (0x0x7f25c5cf30d0) 0
+ primary-for QDial (0x0x7f25c5cf3068)
+ QWidget (0x0x7f25c5c7c9a0) 0
+ primary-for QAbstractSlider (0x0x7f25c5cf30d0)
+ QObject (0x0x7f25c5ce5480) 0
+ primary-for QWidget (0x0x7f25c5c7c9a0)
+ QPaintDevice (0x0x7f25c5ce54e0) 16
+ vptr=((& QDial::_ZTV5QDial) + 464)
+
+Class QDialogButtonBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialogButtonBox::QPrivateSignal (0x0x7f25c5ce5780) 0 empty
+
+Vtable for QDialogButtonBox
+QDialogButtonBox::_ZTV16QDialogButtonBox: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QDialogButtonBox)
+16 (int (*)(...))QDialogButtonBox::metaObject
+24 (int (*)(...))QDialogButtonBox::qt_metacast
+32 (int (*)(...))QDialogButtonBox::qt_metacall
+40 (int (*)(...))QDialogButtonBox::~QDialogButtonBox
+48 (int (*)(...))QDialogButtonBox::~QDialogButtonBox
+56 (int (*)(...))QDialogButtonBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QDialogButtonBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI16QDialogButtonBox)
+448 (int (*)(...))QDialogButtonBox::_ZThn16_N16QDialogButtonBoxD1Ev
+456 (int (*)(...))QDialogButtonBox::_ZThn16_N16QDialogButtonBoxD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDialogButtonBox
+ size=40 align=8
+ base size=40 base align=8
+QDialogButtonBox (0x0x7f25c5cf3138) 0
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 16)
+ QWidget (0x0x7f25c5c7ca10) 0
+ primary-for QDialogButtonBox (0x0x7f25c5cf3138)
+ QObject (0x0x7f25c5ce56c0) 0
+ primary-for QWidget (0x0x7f25c5c7ca10)
+ QPaintDevice (0x0x7f25c5ce5720) 16
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 448)
+
+Class QDockWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDockWidget::QPrivateSignal (0x0x7f25c5ce5e40) 0 empty
+
+Vtable for QDockWidget
+QDockWidget::_ZTV11QDockWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QDockWidget)
+16 (int (*)(...))QDockWidget::metaObject
+24 (int (*)(...))QDockWidget::qt_metacast
+32 (int (*)(...))QDockWidget::qt_metacall
+40 (int (*)(...))QDockWidget::~QDockWidget
+48 (int (*)(...))QDockWidget::~QDockWidget
+56 (int (*)(...))QDockWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDockWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QDockWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QDockWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDockWidget::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QDockWidget)
+456 (int (*)(...))QDockWidget::_ZThn16_N11QDockWidgetD1Ev
+464 (int (*)(...))QDockWidget::_ZThn16_N11QDockWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDockWidget
+ size=40 align=8
+ base size=40 base align=8
+QDockWidget (0x0x7f25c5cf32d8) 0
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 16)
+ QWidget (0x0x7f25c5d3eaf0) 0
+ primary-for QDockWidget (0x0x7f25c5cf32d8)
+ QObject (0x0x7f25c5ce5d80) 0
+ primary-for QWidget (0x0x7f25c5d3eaf0)
+ QPaintDevice (0x0x7f25c5ce5de0) 16
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 456)
+
+Class QTileRules
+ size=8 align=4
+ base size=8 base align=4
+QTileRules (0x0x7f25c5db2540) 0
+
+Class QErrorMessage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QErrorMessage::QPrivateSignal (0x0x7f25c5db2ba0) 0 empty
+
+Vtable for QErrorMessage
+QErrorMessage::_ZTV13QErrorMessage: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QErrorMessage)
+16 (int (*)(...))QErrorMessage::metaObject
+24 (int (*)(...))QErrorMessage::qt_metacast
+32 (int (*)(...))QErrorMessage::qt_metacall
+40 (int (*)(...))QErrorMessage::~QErrorMessage
+48 (int (*)(...))QErrorMessage::~QErrorMessage
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QErrorMessage::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QErrorMessage::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI13QErrorMessage)
+488 (int (*)(...))QErrorMessage::_ZThn16_N13QErrorMessageD1Ev
+496 (int (*)(...))QErrorMessage::_ZThn16_N13QErrorMessageD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QErrorMessage
+ size=40 align=8
+ base size=40 base align=8
+QErrorMessage (0x0x7f25c5cf35b0) 0
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 16)
+ QDialog (0x0x7f25c5cf3618) 0
+ primary-for QErrorMessage (0x0x7f25c5cf35b0)
+ QWidget (0x0x7f25c5e0c540) 0
+ primary-for QDialog (0x0x7f25c5cf3618)
+ QObject (0x0x7f25c5db2ae0) 0
+ primary-for QWidget (0x0x7f25c5e0c540)
+ QPaintDevice (0x0x7f25c5db2b40) 16
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 488)
+
+Class QFileDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDialog::QPrivateSignal (0x0x7f25c5db2de0) 0 empty
+
+Vtable for QFileDialog
+QFileDialog::_ZTV11QFileDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFileDialog)
+16 (int (*)(...))QFileDialog::metaObject
+24 (int (*)(...))QFileDialog::qt_metacast
+32 (int (*)(...))QFileDialog::qt_metacall
+40 (int (*)(...))QFileDialog::~QFileDialog
+48 (int (*)(...))QFileDialog::~QFileDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QFileDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFileDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QFileDialog::done
+456 (int (*)(...))QFileDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QFileDialog)
+488 (int (*)(...))QFileDialog::_ZThn16_N11QFileDialogD1Ev
+496 (int (*)(...))QFileDialog::_ZThn16_N11QFileDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFileDialog
+ size=40 align=8
+ base size=40 base align=8
+QFileDialog (0x0x7f25c5cf3680) 0
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 16)
+ QDialog (0x0x7f25c5cf36e8) 0
+ primary-for QFileDialog (0x0x7f25c5cf3680)
+ QWidget (0x0x7f25c5e0c5b0) 0
+ primary-for QDialog (0x0x7f25c5cf36e8)
+ QObject (0x0x7f25c5db2d20) 0
+ primary-for QWidget (0x0x7f25c5e0c5b0)
+ QPaintDevice (0x0x7f25c5db2d80) 16
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 488)
+
+Vtable for QFileIconProvider
+QFileIconProvider::_ZTV17QFileIconProvider: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFileIconProvider)
+16 (int (*)(...))QFileIconProvider::~QFileIconProvider
+24 (int (*)(...))QFileIconProvider::~QFileIconProvider
+32 (int (*)(...))QFileIconProvider::icon
+40 (int (*)(...))QFileIconProvider::icon
+48 (int (*)(...))QAbstractFileIconProvider::type
+56 (int (*)(...))QAbstractFileIconProvider::setOptions
+64 (int (*)(...))QAbstractFileIconProvider::options
+
+Class QFileIconProvider
+ size=16 align=8
+ base size=16 base align=8
+QFileIconProvider (0x0x7f25c5cf3888) 0
+ vptr=((& QFileIconProvider::_ZTV17QFileIconProvider) + 16)
+ QAbstractFileIconProvider (0x0x7f25c5a78780) 0
+ primary-for QFileIconProvider (0x0x7f25c5cf3888)
+
+Class QFocusFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFocusFrame::QPrivateSignal (0x0x7f25c5a78960) 0 empty
+
+Vtable for QFocusFrame
+QFocusFrame::_ZTV11QFocusFrame: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusFrame)
+16 (int (*)(...))QFocusFrame::metaObject
+24 (int (*)(...))QFocusFrame::qt_metacast
+32 (int (*)(...))QFocusFrame::qt_metacall
+40 (int (*)(...))QFocusFrame::~QFocusFrame
+48 (int (*)(...))QFocusFrame::~QFocusFrame
+56 (int (*)(...))QFocusFrame::event
+64 (int (*)(...))QFocusFrame::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFocusFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFocusFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QFocusFrame)
+456 (int (*)(...))QFocusFrame::_ZThn16_N11QFocusFrameD1Ev
+464 (int (*)(...))QFocusFrame::_ZThn16_N11QFocusFrameD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFocusFrame
+ size=40 align=8
+ base size=40 base align=8
+QFocusFrame (0x0x7f25c5cf38f0) 0
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 16)
+ QWidget (0x0x7f25c5e0cee0) 0
+ primary-for QFocusFrame (0x0x7f25c5cf38f0)
+ QObject (0x0x7f25c5a788a0) 0
+ primary-for QWidget (0x0x7f25c5e0cee0)
+ QPaintDevice (0x0x7f25c5a78900) 16
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 456)
+
+Class QFontComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontComboBox::QPrivateSignal (0x0x7f25c5a78ba0) 0 empty
+
+Vtable for QFontComboBox
+QFontComboBox::_ZTV13QFontComboBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QFontComboBox)
+16 (int (*)(...))QFontComboBox::metaObject
+24 (int (*)(...))QFontComboBox::qt_metacast
+32 (int (*)(...))QFontComboBox::qt_metacall
+40 (int (*)(...))QFontComboBox::~QFontComboBox
+48 (int (*)(...))QFontComboBox::~QFontComboBox
+56 (int (*)(...))QFontComboBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFontComboBox::sizeHint
+136 (int (*)(...))QComboBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QComboBox::mousePressEvent
+176 (int (*)(...))QComboBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QComboBox::wheelEvent
+208 (int (*)(...))QComboBox::keyPressEvent
+216 (int (*)(...))QComboBox::keyReleaseEvent
+224 (int (*)(...))QComboBox::focusInEvent
+232 (int (*)(...))QComboBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QComboBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QComboBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QComboBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QComboBox::showEvent
+352 (int (*)(...))QComboBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QComboBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QComboBox::inputMethodEvent
+416 (int (*)(...))QComboBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QComboBox::setModel
+440 (int (*)(...))QComboBox::showPopup
+448 (int (*)(...))QComboBox::hidePopup
+456 (int (*)(...))QComboBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI13QFontComboBox)
+480 (int (*)(...))QFontComboBox::_ZThn16_N13QFontComboBoxD1Ev
+488 (int (*)(...))QFontComboBox::_ZThn16_N13QFontComboBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFontComboBox
+ size=40 align=8
+ base size=40 base align=8
+QFontComboBox (0x0x7f25c5cf3958) 0
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 16)
+ QComboBox (0x0x7f25c5cf39c0) 0
+ primary-for QFontComboBox (0x0x7f25c5cf3958)
+ QWidget (0x0x7f25c5e0cf50) 0
+ primary-for QComboBox (0x0x7f25c5cf39c0)
+ QObject (0x0x7f25c5a78ae0) 0
+ primary-for QWidget (0x0x7f25c5e0cf50)
+ QPaintDevice (0x0x7f25c5a78b40) 16
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 480)
+
+Class QFontDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontDialog::QPrivateSignal (0x0x7f25c5b0a2a0) 0 empty
+
+Vtable for QFontDialog
+QFontDialog::_ZTV11QFontDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFontDialog)
+16 (int (*)(...))QFontDialog::metaObject
+24 (int (*)(...))QFontDialog::qt_metacast
+32 (int (*)(...))QFontDialog::qt_metacall
+40 (int (*)(...))QFontDialog::~QFontDialog
+48 (int (*)(...))QFontDialog::~QFontDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QFontDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QFontDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFontDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QFontDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QFontDialog)
+488 (int (*)(...))QFontDialog::_ZThn16_N11QFontDialogD1Ev
+496 (int (*)(...))QFontDialog::_ZThn16_N11QFontDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFontDialog
+ size=40 align=8
+ base size=40 base align=8
+QFontDialog (0x0x7f25c5cf3b60) 0
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 16)
+ QDialog (0x0x7f25c5cf3bc8) 0
+ primary-for QFontDialog (0x0x7f25c5cf3b60)
+ QWidget (0x0x7f25c5ad4230) 0
+ primary-for QDialog (0x0x7f25c5cf3bc8)
+ QObject (0x0x7f25c5b0a1e0) 0
+ primary-for QWidget (0x0x7f25c5ad4230)
+ QPaintDevice (0x0x7f25c5b0a240) 16
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 488)
+
+Class QFormLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFormLayout::QPrivateSignal (0x0x7f25c5b0a960) 0 empty
+
+Class QFormLayout::TakeRowResult
+ size=16 align=8
+ base size=16 base align=8
+QFormLayout::TakeRowResult (0x0x7f25c5b0a9c0) 0
+
+Vtable for QFormLayout
+QFormLayout::_ZTV11QFormLayout: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFormLayout)
+16 (int (*)(...))QFormLayout::metaObject
+24 (int (*)(...))QFormLayout::qt_metacast
+32 (int (*)(...))QFormLayout::qt_metacall
+40 (int (*)(...))QFormLayout::~QFormLayout
+48 (int (*)(...))QFormLayout::~QFormLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFormLayout::spacing
+120 (int (*)(...))QFormLayout::setSpacing
+128 (int (*)(...))QFormLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QFormLayout::addItem
+152 (int (*)(...))QFormLayout::expandingDirections
+160 (int (*)(...))QFormLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QFormLayout::setGeometry
+184 (int (*)(...))QFormLayout::itemAt
+192 (int (*)(...))QFormLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QFormLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QFormLayout::sizeHint
+264 (int (*)(...))QFormLayout::hasHeightForWidth
+272 (int (*)(...))QFormLayout::heightForWidth
+280 (int (*)(...))-16
+288 (int (*)(...))(& _ZTI11QFormLayout)
+296 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayoutD1Ev
+304 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayoutD0Ev
+312 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout8sizeHintEv
+320 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout11minimumSizeEv
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+336 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout19expandingDirectionsEv
+344 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayout11setGeometryERK5QRect
+352 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+368 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout17hasHeightForWidthEv
+376 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout14heightForWidthEi
+384 (int (*)(...))QLayoutItem::minimumHeightForWidth
+392 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayout10invalidateEv
+400 (int (*)(...))QLayoutItem::widget
+408 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+416 (int (*)(...))QLayoutItem::spacerItem
+424 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QFormLayout
+ size=32 align=8
+ base size=28 base align=8
+QFormLayout (0x0x7f25c5cf3d68) 0
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 16)
+ QLayout (0x0x7f25c5ad4540) 0
+ primary-for QFormLayout (0x0x7f25c5cf3d68)
+ QObject (0x0x7f25c5b0a8a0) 0
+ primary-for QLayout (0x0x7f25c5ad4540)
+ QLayoutItem (0x0x7f25c5b0a900) 16
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 296)
+
+Class QGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGesture::QPrivateSignal (0x0x7f25c5bd2c60) 0 empty
+
+Vtable for QGesture
+QGesture::_ZTV8QGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QGesture)
+16 (int (*)(...))QGesture::metaObject
+24 (int (*)(...))QGesture::qt_metacast
+32 (int (*)(...))QGesture::qt_metacall
+40 (int (*)(...))QGesture::~QGesture
+48 (int (*)(...))QGesture::~QGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QGesture
+ size=16 align=8
+ base size=16 base align=8
+QGesture (0x0x7f25c5bcd8f0) 0
+ vptr=((& QGesture::_ZTV8QGesture) + 16)
+ QObject (0x0x7f25c5bd2c00) 0
+ primary-for QGesture (0x0x7f25c5bcd8f0)
+
+Class QPanGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPanGesture::QPrivateSignal (0x0x7f25c5bd2e40) 0 empty
+
+Vtable for QPanGesture
+QPanGesture::_ZTV11QPanGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPanGesture)
+16 (int (*)(...))QPanGesture::metaObject
+24 (int (*)(...))QPanGesture::qt_metacast
+32 (int (*)(...))QPanGesture::qt_metacall
+40 (int (*)(...))QPanGesture::~QPanGesture
+48 (int (*)(...))QPanGesture::~QPanGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPanGesture
+ size=16 align=8
+ base size=16 base align=8
+QPanGesture (0x0x7f25c5bcd958) 0
+ vptr=((& QPanGesture::_ZTV11QPanGesture) + 16)
+ QGesture (0x0x7f25c5bcd9c0) 0
+ primary-for QPanGesture (0x0x7f25c5bcd958)
+ QObject (0x0x7f25c5bd2de0) 0
+ primary-for QGesture (0x0x7f25c5bcd9c0)
+
+Class QPinchGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPinchGesture::QPrivateSignal (0x0x7f25c582a060) 0 empty
+
+Vtable for QPinchGesture
+QPinchGesture::_ZTV13QPinchGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPinchGesture)
+16 (int (*)(...))QPinchGesture::metaObject
+24 (int (*)(...))QPinchGesture::qt_metacast
+32 (int (*)(...))QPinchGesture::qt_metacall
+40 (int (*)(...))QPinchGesture::~QPinchGesture
+48 (int (*)(...))QPinchGesture::~QPinchGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPinchGesture
+ size=16 align=8
+ base size=16 base align=8
+QPinchGesture (0x0x7f25c5bcda28) 0
+ vptr=((& QPinchGesture::_ZTV13QPinchGesture) + 16)
+ QGesture (0x0x7f25c5bcda90) 0
+ primary-for QPinchGesture (0x0x7f25c5bcda28)
+ QObject (0x0x7f25c582a000) 0
+ primary-for QGesture (0x0x7f25c5bcda90)
+
+Class QSwipeGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSwipeGesture::QPrivateSignal (0x0x7f25c58c78a0) 0 empty
+
+Vtable for QSwipeGesture
+QSwipeGesture::_ZTV13QSwipeGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSwipeGesture)
+16 (int (*)(...))QSwipeGesture::metaObject
+24 (int (*)(...))QSwipeGesture::qt_metacast
+32 (int (*)(...))QSwipeGesture::qt_metacall
+40 (int (*)(...))QSwipeGesture::~QSwipeGesture
+48 (int (*)(...))QSwipeGesture::~QSwipeGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSwipeGesture
+ size=16 align=8
+ base size=16 base align=8
+QSwipeGesture (0x0x7f25c58db3a8) 0
+ vptr=((& QSwipeGesture::_ZTV13QSwipeGesture) + 16)
+ QGesture (0x0x7f25c58db410) 0
+ primary-for QSwipeGesture (0x0x7f25c58db3a8)
+ QObject (0x0x7f25c58c7840) 0
+ primary-for QGesture (0x0x7f25c58db410)
+
+Class QTapGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapGesture::QPrivateSignal (0x0x7f25c58c7b40) 0 empty
+
+Vtable for QTapGesture
+QTapGesture::_ZTV11QTapGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTapGesture)
+16 (int (*)(...))QTapGesture::metaObject
+24 (int (*)(...))QTapGesture::qt_metacast
+32 (int (*)(...))QTapGesture::qt_metacall
+40 (int (*)(...))QTapGesture::~QTapGesture
+48 (int (*)(...))QTapGesture::~QTapGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTapGesture
+ size=16 align=8
+ base size=16 base align=8
+QTapGesture (0x0x7f25c58db478) 0
+ vptr=((& QTapGesture::_ZTV11QTapGesture) + 16)
+ QGesture (0x0x7f25c58db4e0) 0
+ primary-for QTapGesture (0x0x7f25c58db478)
+ QObject (0x0x7f25c58c7ae0) 0
+ primary-for QGesture (0x0x7f25c58db4e0)
+
+Class QTapAndHoldGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapAndHoldGesture::QPrivateSignal (0x0x7f25c58c7d20) 0 empty
+
+Vtable for QTapAndHoldGesture
+QTapAndHoldGesture::_ZTV18QTapAndHoldGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QTapAndHoldGesture)
+16 (int (*)(...))QTapAndHoldGesture::metaObject
+24 (int (*)(...))QTapAndHoldGesture::qt_metacast
+32 (int (*)(...))QTapAndHoldGesture::qt_metacall
+40 (int (*)(...))QTapAndHoldGesture::~QTapAndHoldGesture
+48 (int (*)(...))QTapAndHoldGesture::~QTapAndHoldGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTapAndHoldGesture
+ size=16 align=8
+ base size=16 base align=8
+QTapAndHoldGesture (0x0x7f25c58db548) 0
+ vptr=((& QTapAndHoldGesture::_ZTV18QTapAndHoldGesture) + 16)
+ QGesture (0x0x7f25c58db5b0) 0
+ primary-for QTapAndHoldGesture (0x0x7f25c58db548)
+ QObject (0x0x7f25c58c7cc0) 0
+ primary-for QGesture (0x0x7f25c58db5b0)
+
+Vtable for QGestureEvent
+QGestureEvent::_ZTV13QGestureEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGestureEvent)
+16 (int (*)(...))QGestureEvent::~QGestureEvent
+24 (int (*)(...))QGestureEvent::~QGestureEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGestureEvent
+ size=64 align=8
+ base size=64 base align=8
+QGestureEvent (0x0x7f25c58db618) 0
+ vptr=((& QGestureEvent::_ZTV13QGestureEvent) + 16)
+ QEvent (0x0x7f25c58c7ea0) 0
+ primary-for QGestureEvent (0x0x7f25c58db618)
+
+Vtable for QGestureRecognizer
+QGestureRecognizer::_ZTV18QGestureRecognizer: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGestureRecognizer)
+16 0
+24 0
+32 (int (*)(...))QGestureRecognizer::create
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGestureRecognizer::reset
+
+Class QGestureRecognizer
+ size=8 align=8
+ base size=8 base align=8
+QGestureRecognizer (0x0x7f25c59e8a20) 0 nearly-empty
+ vptr=((& QGestureRecognizer::_ZTV18QGestureRecognizer) + 16)
+
+Vtable for QGraphicsItem
+QGraphicsItem::_ZTV13QGraphicsItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGraphicsItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsItem::isObscuredBy
+88 (int (*)(...))QGraphicsItem::opaqueArea
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))QGraphicsItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsItem (0x0x7f25c59e8e40) 0
+ vptr=((& QGraphicsItem::_ZTV13QGraphicsItem) + 16)
+
+Class QGraphicsObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsObject::QPrivateSignal (0x0x7f25c5712120) 0 empty
+
+Vtable for QGraphicsObject
+QGraphicsObject::_ZTV15QGraphicsObject: 53 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsObject)
+16 (int (*)(...))QGraphicsObject::metaObject
+24 (int (*)(...))QGraphicsObject::qt_metacast
+32 (int (*)(...))QGraphicsObject::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QGraphicsObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))-16
+120 (int (*)(...))(& _ZTI15QGraphicsObject)
+128 0
+136 0
+144 (int (*)(...))QGraphicsItem::advance
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))QGraphicsItem::shape
+168 (int (*)(...))QGraphicsItem::contains
+176 (int (*)(...))QGraphicsItem::collidesWithItem
+184 (int (*)(...))QGraphicsItem::collidesWithPath
+192 (int (*)(...))QGraphicsItem::isObscuredBy
+200 (int (*)(...))QGraphicsItem::opaqueArea
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))QGraphicsItem::type
+224 (int (*)(...))QGraphicsItem::sceneEventFilter
+232 (int (*)(...))QGraphicsItem::sceneEvent
+240 (int (*)(...))QGraphicsItem::contextMenuEvent
+248 (int (*)(...))QGraphicsItem::dragEnterEvent
+256 (int (*)(...))QGraphicsItem::dragLeaveEvent
+264 (int (*)(...))QGraphicsItem::dragMoveEvent
+272 (int (*)(...))QGraphicsItem::dropEvent
+280 (int (*)(...))QGraphicsItem::focusInEvent
+288 (int (*)(...))QGraphicsItem::focusOutEvent
+296 (int (*)(...))QGraphicsItem::hoverEnterEvent
+304 (int (*)(...))QGraphicsItem::hoverMoveEvent
+312 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+320 (int (*)(...))QGraphicsItem::keyPressEvent
+328 (int (*)(...))QGraphicsItem::keyReleaseEvent
+336 (int (*)(...))QGraphicsItem::mousePressEvent
+344 (int (*)(...))QGraphicsItem::mouseMoveEvent
+352 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+360 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+368 (int (*)(...))QGraphicsItem::wheelEvent
+376 (int (*)(...))QGraphicsItem::inputMethodEvent
+384 (int (*)(...))QGraphicsItem::inputMethodQuery
+392 (int (*)(...))QGraphicsItem::itemChange
+400 (int (*)(...))QGraphicsItem::supportsExtension
+408 (int (*)(...))QGraphicsItem::setExtension
+416 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsObject
+ size=32 align=8
+ base size=32 base align=8
+QGraphicsObject (0x0x7f25c5654b60) 0
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 16)
+ QObject (0x0x7f25c5712060) 0
+ primary-for QGraphicsObject (0x0x7f25c5654b60)
+ QGraphicsItem (0x0x7f25c57120c0) 16
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 128)
+
+Vtable for QAbstractGraphicsShapeItem
+QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractGraphicsShapeItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QAbstractGraphicsShapeItem::isObscuredBy
+88 (int (*)(...))QAbstractGraphicsShapeItem::opaqueArea
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))QGraphicsItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QAbstractGraphicsShapeItem
+ size=16 align=8
+ base size=16 base align=8
+QAbstractGraphicsShapeItem (0x0x7f25c59fe750) 0
+ vptr=((& QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem) + 16)
+ QGraphicsItem (0x0x7f25c57121e0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f25c59fe750)
+
+Vtable for QGraphicsPathItem
+QGraphicsPathItem::_ZTV17QGraphicsPathItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsPathItem)
+16 (int (*)(...))QGraphicsPathItem::~QGraphicsPathItem
+24 (int (*)(...))QGraphicsPathItem::~QGraphicsPathItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPathItem::boundingRect
+48 (int (*)(...))QGraphicsPathItem::shape
+56 (int (*)(...))QGraphicsPathItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPathItem::isObscuredBy
+88 (int (*)(...))QGraphicsPathItem::opaqueArea
+96 (int (*)(...))QGraphicsPathItem::paint
+104 (int (*)(...))QGraphicsPathItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPathItem::supportsExtension
+296 (int (*)(...))QGraphicsPathItem::setExtension
+304 (int (*)(...))QGraphicsPathItem::extension
+
+Class QGraphicsPathItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPathItem (0x0x7f25c59fe7b8) 0
+ vptr=((& QGraphicsPathItem::_ZTV17QGraphicsPathItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f25c59fe820) 0
+ primary-for QGraphicsPathItem (0x0x7f25c59fe7b8)
+ QGraphicsItem (0x0x7f25c5712300) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f25c59fe820)
+
+Vtable for QGraphicsRectItem
+QGraphicsRectItem::_ZTV17QGraphicsRectItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsRectItem)
+16 (int (*)(...))QGraphicsRectItem::~QGraphicsRectItem
+24 (int (*)(...))QGraphicsRectItem::~QGraphicsRectItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsRectItem::boundingRect
+48 (int (*)(...))QGraphicsRectItem::shape
+56 (int (*)(...))QGraphicsRectItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsRectItem::isObscuredBy
+88 (int (*)(...))QGraphicsRectItem::opaqueArea
+96 (int (*)(...))QGraphicsRectItem::paint
+104 (int (*)(...))QGraphicsRectItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsRectItem::supportsExtension
+296 (int (*)(...))QGraphicsRectItem::setExtension
+304 (int (*)(...))QGraphicsRectItem::extension
+
+Class QGraphicsRectItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsRectItem (0x0x7f25c59fe888) 0
+ vptr=((& QGraphicsRectItem::_ZTV17QGraphicsRectItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f25c59fe8f0) 0
+ primary-for QGraphicsRectItem (0x0x7f25c59fe888)
+ QGraphicsItem (0x0x7f25c5712420) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f25c59fe8f0)
+
+Vtable for QGraphicsEllipseItem
+QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsEllipseItem)
+16 (int (*)(...))QGraphicsEllipseItem::~QGraphicsEllipseItem
+24 (int (*)(...))QGraphicsEllipseItem::~QGraphicsEllipseItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsEllipseItem::boundingRect
+48 (int (*)(...))QGraphicsEllipseItem::shape
+56 (int (*)(...))QGraphicsEllipseItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsEllipseItem::isObscuredBy
+88 (int (*)(...))QGraphicsEllipseItem::opaqueArea
+96 (int (*)(...))QGraphicsEllipseItem::paint
+104 (int (*)(...))QGraphicsEllipseItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsEllipseItem::supportsExtension
+296 (int (*)(...))QGraphicsEllipseItem::setExtension
+304 (int (*)(...))QGraphicsEllipseItem::extension
+
+Class QGraphicsEllipseItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsEllipseItem (0x0x7f25c59fe958) 0
+ vptr=((& QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f25c59fe9c0) 0
+ primary-for QGraphicsEllipseItem (0x0x7f25c59fe958)
+ QGraphicsItem (0x0x7f25c57125a0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f25c59fe9c0)
+
+Vtable for QGraphicsPolygonItem
+QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsPolygonItem)
+16 (int (*)(...))QGraphicsPolygonItem::~QGraphicsPolygonItem
+24 (int (*)(...))QGraphicsPolygonItem::~QGraphicsPolygonItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPolygonItem::boundingRect
+48 (int (*)(...))QGraphicsPolygonItem::shape
+56 (int (*)(...))QGraphicsPolygonItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPolygonItem::isObscuredBy
+88 (int (*)(...))QGraphicsPolygonItem::opaqueArea
+96 (int (*)(...))QGraphicsPolygonItem::paint
+104 (int (*)(...))QGraphicsPolygonItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPolygonItem::supportsExtension
+296 (int (*)(...))QGraphicsPolygonItem::setExtension
+304 (int (*)(...))QGraphicsPolygonItem::extension
+
+Class QGraphicsPolygonItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPolygonItem (0x0x7f25c59fea28) 0
+ vptr=((& QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f25c59fea90) 0
+ primary-for QGraphicsPolygonItem (0x0x7f25c59fea28)
+ QGraphicsItem (0x0x7f25c5712720) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f25c59fea90)
+
+Vtable for QGraphicsLineItem
+QGraphicsLineItem::_ZTV17QGraphicsLineItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsLineItem)
+16 (int (*)(...))QGraphicsLineItem::~QGraphicsLineItem
+24 (int (*)(...))QGraphicsLineItem::~QGraphicsLineItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsLineItem::boundingRect
+48 (int (*)(...))QGraphicsLineItem::shape
+56 (int (*)(...))QGraphicsLineItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsLineItem::isObscuredBy
+88 (int (*)(...))QGraphicsLineItem::opaqueArea
+96 (int (*)(...))QGraphicsLineItem::paint
+104 (int (*)(...))QGraphicsLineItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsLineItem::supportsExtension
+296 (int (*)(...))QGraphicsLineItem::setExtension
+304 (int (*)(...))QGraphicsLineItem::extension
+
+Class QGraphicsLineItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLineItem (0x0x7f25c59feaf8) 0
+ vptr=((& QGraphicsLineItem::_ZTV17QGraphicsLineItem) + 16)
+ QGraphicsItem (0x0x7f25c5712840) 0
+ primary-for QGraphicsLineItem (0x0x7f25c59feaf8)
+
+Vtable for QGraphicsPixmapItem
+QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsPixmapItem)
+16 (int (*)(...))QGraphicsPixmapItem::~QGraphicsPixmapItem
+24 (int (*)(...))QGraphicsPixmapItem::~QGraphicsPixmapItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPixmapItem::boundingRect
+48 (int (*)(...))QGraphicsPixmapItem::shape
+56 (int (*)(...))QGraphicsPixmapItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPixmapItem::isObscuredBy
+88 (int (*)(...))QGraphicsPixmapItem::opaqueArea
+96 (int (*)(...))QGraphicsPixmapItem::paint
+104 (int (*)(...))QGraphicsPixmapItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPixmapItem::supportsExtension
+296 (int (*)(...))QGraphicsPixmapItem::setExtension
+304 (int (*)(...))QGraphicsPixmapItem::extension
+
+Class QGraphicsPixmapItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPixmapItem (0x0x7f25c59feb60) 0
+ vptr=((& QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem) + 16)
+ QGraphicsItem (0x0x7f25c57129c0) 0
+ primary-for QGraphicsPixmapItem (0x0x7f25c59feb60)
+
+Class QGraphicsTextItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTextItem::QPrivateSignal (0x0x7f25c5712c00) 0 empty
+
+Vtable for QGraphicsTextItem
+QGraphicsTextItem::_ZTV17QGraphicsTextItem: 82 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsTextItem)
+16 (int (*)(...))QGraphicsTextItem::metaObject
+24 (int (*)(...))QGraphicsTextItem::qt_metacast
+32 (int (*)(...))QGraphicsTextItem::qt_metacall
+40 (int (*)(...))QGraphicsTextItem::~QGraphicsTextItem
+48 (int (*)(...))QGraphicsTextItem::~QGraphicsTextItem
+56 (int (*)(...))QGraphicsObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsTextItem::boundingRect
+120 (int (*)(...))QGraphicsTextItem::shape
+128 (int (*)(...))QGraphicsTextItem::contains
+136 (int (*)(...))QGraphicsTextItem::paint
+144 (int (*)(...))QGraphicsTextItem::isObscuredBy
+152 (int (*)(...))QGraphicsTextItem::opaqueArea
+160 (int (*)(...))QGraphicsTextItem::type
+168 (int (*)(...))QGraphicsTextItem::sceneEvent
+176 (int (*)(...))QGraphicsTextItem::mousePressEvent
+184 (int (*)(...))QGraphicsTextItem::mouseMoveEvent
+192 (int (*)(...))QGraphicsTextItem::mouseReleaseEvent
+200 (int (*)(...))QGraphicsTextItem::mouseDoubleClickEvent
+208 (int (*)(...))QGraphicsTextItem::contextMenuEvent
+216 (int (*)(...))QGraphicsTextItem::keyPressEvent
+224 (int (*)(...))QGraphicsTextItem::keyReleaseEvent
+232 (int (*)(...))QGraphicsTextItem::focusInEvent
+240 (int (*)(...))QGraphicsTextItem::focusOutEvent
+248 (int (*)(...))QGraphicsTextItem::dragEnterEvent
+256 (int (*)(...))QGraphicsTextItem::dragLeaveEvent
+264 (int (*)(...))QGraphicsTextItem::dragMoveEvent
+272 (int (*)(...))QGraphicsTextItem::dropEvent
+280 (int (*)(...))QGraphicsTextItem::inputMethodEvent
+288 (int (*)(...))QGraphicsTextItem::hoverEnterEvent
+296 (int (*)(...))QGraphicsTextItem::hoverMoveEvent
+304 (int (*)(...))QGraphicsTextItem::hoverLeaveEvent
+312 (int (*)(...))QGraphicsTextItem::inputMethodQuery
+320 (int (*)(...))QGraphicsTextItem::supportsExtension
+328 (int (*)(...))QGraphicsTextItem::setExtension
+336 (int (*)(...))QGraphicsTextItem::extension
+344 (int (*)(...))-16
+352 (int (*)(...))(& _ZTI17QGraphicsTextItem)
+360 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItemD1Ev
+368 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItemD0Ev
+376 (int (*)(...))QGraphicsItem::advance
+384 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem12boundingRectEv
+392 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem5shapeEv
+400 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem8containsERK7QPointF
+408 (int (*)(...))QGraphicsItem::collidesWithItem
+416 (int (*)(...))QGraphicsItem::collidesWithPath
+424 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem12isObscuredByEPK13QGraphicsItem
+432 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem10opaqueAreaEv
+440 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+448 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem4typeEv
+456 (int (*)(...))QGraphicsItem::sceneEventFilter
+464 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem10sceneEventEP6QEvent
+472 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem16contextMenuEventEP30QGraphicsSceneContextMenuEvent
+480 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14dragEnterEventEP27QGraphicsSceneDragDropEvent
+488 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14dragLeaveEventEP27QGraphicsSceneDragDropEvent
+496 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13dragMoveEventEP27QGraphicsSceneDragDropEvent
+504 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem9dropEventEP27QGraphicsSceneDragDropEvent
+512 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem12focusInEventEP11QFocusEvent
+520 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13focusOutEventEP11QFocusEvent
+528 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15hoverEnterEventEP24QGraphicsSceneHoverEvent
+536 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14hoverMoveEventEP24QGraphicsSceneHoverEvent
+544 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+552 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13keyPressEventEP9QKeyEvent
+560 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15keyReleaseEventEP9QKeyEvent
+568 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15mousePressEventEP24QGraphicsSceneMouseEvent
+576 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14mouseMoveEventEP24QGraphicsSceneMouseEvent
+584 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem17mouseReleaseEventEP24QGraphicsSceneMouseEvent
+592 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent
+600 (int (*)(...))QGraphicsItem::wheelEvent
+608 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem16inputMethodEventEP17QInputMethodEvent
+616 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem16inputMethodQueryEN2Qt16InputMethodQueryE
+624 (int (*)(...))QGraphicsItem::itemChange
+632 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem17supportsExtensionEN13QGraphicsItem9ExtensionE
+640 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem12setExtensionEN13QGraphicsItem9ExtensionERK8QVariant
+648 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem9extensionERK8QVariant
+
+Class QGraphicsTextItem
+ size=40 align=8
+ base size=40 base align=8
+QGraphicsTextItem (0x0x7f25c59febc8) 0
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 16)
+ QGraphicsObject (0x0x7f25c5789000) 0
+ primary-for QGraphicsTextItem (0x0x7f25c59febc8)
+ QObject (0x0x7f25c5712b40) 0
+ primary-for QGraphicsObject (0x0x7f25c5789000)
+ QGraphicsItem (0x0x7f25c5712ba0) 16
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 360)
+
+Vtable for QGraphicsSimpleTextItem
+QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSimpleTextItem)
+16 (int (*)(...))QGraphicsSimpleTextItem::~QGraphicsSimpleTextItem
+24 (int (*)(...))QGraphicsSimpleTextItem::~QGraphicsSimpleTextItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsSimpleTextItem::boundingRect
+48 (int (*)(...))QGraphicsSimpleTextItem::shape
+56 (int (*)(...))QGraphicsSimpleTextItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsSimpleTextItem::isObscuredBy
+88 (int (*)(...))QGraphicsSimpleTextItem::opaqueArea
+96 (int (*)(...))QGraphicsSimpleTextItem::paint
+104 (int (*)(...))QGraphicsSimpleTextItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsSimpleTextItem::supportsExtension
+296 (int (*)(...))QGraphicsSimpleTextItem::setExtension
+304 (int (*)(...))QGraphicsSimpleTextItem::extension
+
+Class QGraphicsSimpleTextItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsSimpleTextItem (0x0x7f25c59fed00) 0
+ vptr=((& QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f25c59fed68) 0
+ primary-for QGraphicsSimpleTextItem (0x0x7f25c59fed00)
+ QGraphicsItem (0x0x7f25c5712ea0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f25c59fed68)
+
+Vtable for QGraphicsItemGroup
+QGraphicsItemGroup::_ZTV18QGraphicsItemGroup: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGraphicsItemGroup)
+16 (int (*)(...))QGraphicsItemGroup::~QGraphicsItemGroup
+24 (int (*)(...))QGraphicsItemGroup::~QGraphicsItemGroup
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsItemGroup::boundingRect
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsItemGroup::isObscuredBy
+88 (int (*)(...))QGraphicsItemGroup::opaqueArea
+96 (int (*)(...))QGraphicsItemGroup::paint
+104 (int (*)(...))QGraphicsItemGroup::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsItemGroup
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsItemGroup (0x0x7f25c59fedd0) 0
+ vptr=((& QGraphicsItemGroup::_ZTV18QGraphicsItemGroup) + 16)
+ QGraphicsItem (0x0x7f25c57b3000) 0
+ primary-for QGraphicsItemGroup (0x0x7f25c59fedd0)
+
+Vtable for QGraphicsLayoutItem
+QGraphicsLayoutItem::_ZTV19QGraphicsLayoutItem: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsLayoutItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsLayoutItem::setGeometry
+40 (int (*)(...))QGraphicsLayoutItem::getContentsMargins
+48 (int (*)(...))QGraphicsLayoutItem::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsLayoutItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLayoutItem (0x0x7f25c57b36c0) 0
+ vptr=((& QGraphicsLayoutItem::_ZTV19QGraphicsLayoutItem) + 16)
+
+Vtable for QGraphicsLayout
+QGraphicsLayout::_ZTV15QGraphicsLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsLayout)
+16 0
+24 0
+32 (int (*)(...))QGraphicsLayoutItem::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))QGraphicsLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLayout (0x0x7f25c59feea0) 0
+ vptr=((& QGraphicsLayout::_ZTV15QGraphicsLayout) + 16)
+ QGraphicsLayoutItem (0x0x7f25c57b3d80) 0
+ primary-for QGraphicsLayout (0x0x7f25c59feea0)
+
+Class QGraphicsAnchor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsAnchor::QPrivateSignal (0x0x7f25c58100c0) 0 empty
+
+Vtable for QGraphicsAnchor
+QGraphicsAnchor::_ZTV15QGraphicsAnchor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsAnchor)
+16 (int (*)(...))QGraphicsAnchor::metaObject
+24 (int (*)(...))QGraphicsAnchor::qt_metacast
+32 (int (*)(...))QGraphicsAnchor::qt_metacall
+40 (int (*)(...))QGraphicsAnchor::~QGraphicsAnchor
+48 (int (*)(...))QGraphicsAnchor::~QGraphicsAnchor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QGraphicsAnchor
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsAnchor (0x0x7f25c59fef08) 0
+ vptr=((& QGraphicsAnchor::_ZTV15QGraphicsAnchor) + 16)
+ QObject (0x0x7f25c5810060) 0
+ primary-for QGraphicsAnchor (0x0x7f25c59fef08)
+
+Vtable for QGraphicsAnchorLayout
+QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QGraphicsAnchorLayout)
+16 (int (*)(...))QGraphicsAnchorLayout::~QGraphicsAnchorLayout
+24 (int (*)(...))QGraphicsAnchorLayout::~QGraphicsAnchorLayout
+32 (int (*)(...))QGraphicsAnchorLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsAnchorLayout::sizeHint
+72 (int (*)(...))QGraphicsAnchorLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsAnchorLayout::count
+96 (int (*)(...))QGraphicsAnchorLayout::itemAt
+104 (int (*)(...))QGraphicsAnchorLayout::removeAt
+
+Class QGraphicsAnchorLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsAnchorLayout (0x0x7f25c59fef70) 0
+ vptr=((& QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout) + 16)
+ QGraphicsLayout (0x0x7f25c581c000) 0
+ primary-for QGraphicsAnchorLayout (0x0x7f25c59fef70)
+ QGraphicsLayoutItem (0x0x7f25c5810240) 0
+ primary-for QGraphicsLayout (0x0x7f25c581c000)
+
+Class QGraphicsEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsEffect::QPrivateSignal (0x0x7f25c58103c0) 0 empty
+
+Vtable for QGraphicsEffect
+QGraphicsEffect::_ZTV15QGraphicsEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsEffect)
+16 (int (*)(...))QGraphicsEffect::metaObject
+24 (int (*)(...))QGraphicsEffect::qt_metacast
+32 (int (*)(...))QGraphicsEffect::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsEffect (0x0x7f25c581c068) 0
+ vptr=((& QGraphicsEffect::_ZTV15QGraphicsEffect) + 16)
+ QObject (0x0x7f25c5810360) 0
+ primary-for QGraphicsEffect (0x0x7f25c581c068)
+
+Class QGraphicsColorizeEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsColorizeEffect::QPrivateSignal (0x0x7f25c5810a20) 0 empty
+
+Vtable for QGraphicsColorizeEffect
+QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsColorizeEffect)
+16 (int (*)(...))QGraphicsColorizeEffect::metaObject
+24 (int (*)(...))QGraphicsColorizeEffect::qt_metacast
+32 (int (*)(...))QGraphicsColorizeEffect::qt_metacall
+40 (int (*)(...))QGraphicsColorizeEffect::~QGraphicsColorizeEffect
+48 (int (*)(...))QGraphicsColorizeEffect::~QGraphicsColorizeEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))QGraphicsColorizeEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsColorizeEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsColorizeEffect (0x0x7f25c581c208) 0
+ vptr=((& QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect) + 16)
+ QGraphicsEffect (0x0x7f25c581c270) 0
+ primary-for QGraphicsColorizeEffect (0x0x7f25c581c208)
+ QObject (0x0x7f25c58109c0) 0
+ primary-for QGraphicsEffect (0x0x7f25c581c270)
+
+Class QGraphicsBlurEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsBlurEffect::QPrivateSignal (0x0x7f25c5810c00) 0 empty
+
+Vtable for QGraphicsBlurEffect
+QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsBlurEffect)
+16 (int (*)(...))QGraphicsBlurEffect::metaObject
+24 (int (*)(...))QGraphicsBlurEffect::qt_metacast
+32 (int (*)(...))QGraphicsBlurEffect::qt_metacall
+40 (int (*)(...))QGraphicsBlurEffect::~QGraphicsBlurEffect
+48 (int (*)(...))QGraphicsBlurEffect::~QGraphicsBlurEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsBlurEffect::boundingRectFor
+120 (int (*)(...))QGraphicsBlurEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsBlurEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsBlurEffect (0x0x7f25c581c2d8) 0
+ vptr=((& QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect) + 16)
+ QGraphicsEffect (0x0x7f25c581c340) 0
+ primary-for QGraphicsBlurEffect (0x0x7f25c581c2d8)
+ QObject (0x0x7f25c5810ba0) 0
+ primary-for QGraphicsEffect (0x0x7f25c581c340)
+
+Class QGraphicsDropShadowEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsDropShadowEffect::QPrivateSignal (0x0x7f25c54b3360) 0 empty
+
+Vtable for QGraphicsDropShadowEffect
+QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QGraphicsDropShadowEffect)
+16 (int (*)(...))QGraphicsDropShadowEffect::metaObject
+24 (int (*)(...))QGraphicsDropShadowEffect::qt_metacast
+32 (int (*)(...))QGraphicsDropShadowEffect::qt_metacall
+40 (int (*)(...))QGraphicsDropShadowEffect::~QGraphicsDropShadowEffect
+48 (int (*)(...))QGraphicsDropShadowEffect::~QGraphicsDropShadowEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsDropShadowEffect::boundingRectFor
+120 (int (*)(...))QGraphicsDropShadowEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsDropShadowEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsDropShadowEffect (0x0x7f25c581c4e0) 0
+ vptr=((& QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect) + 16)
+ QGraphicsEffect (0x0x7f25c581c548) 0
+ primary-for QGraphicsDropShadowEffect (0x0x7f25c581c4e0)
+ QObject (0x0x7f25c54b3300) 0
+ primary-for QGraphicsEffect (0x0x7f25c581c548)
+
+Class QGraphicsOpacityEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsOpacityEffect::QPrivateSignal (0x0x7f25c54b3780) 0 empty
+
+Vtable for QGraphicsOpacityEffect
+QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QGraphicsOpacityEffect)
+16 (int (*)(...))QGraphicsOpacityEffect::metaObject
+24 (int (*)(...))QGraphicsOpacityEffect::qt_metacast
+32 (int (*)(...))QGraphicsOpacityEffect::qt_metacall
+40 (int (*)(...))QGraphicsOpacityEffect::~QGraphicsOpacityEffect
+48 (int (*)(...))QGraphicsOpacityEffect::~QGraphicsOpacityEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))QGraphicsOpacityEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsOpacityEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsOpacityEffect (0x0x7f25c581c5b0) 0
+ vptr=((& QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect) + 16)
+ QGraphicsEffect (0x0x7f25c581c618) 0
+ primary-for QGraphicsOpacityEffect (0x0x7f25c581c5b0)
+ QObject (0x0x7f25c54b3720) 0
+ primary-for QGraphicsEffect (0x0x7f25c581c618)
+
+Vtable for QGraphicsGridLayout
+QGraphicsGridLayout::_ZTV19QGraphicsGridLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsGridLayout)
+16 (int (*)(...))QGraphicsGridLayout::~QGraphicsGridLayout
+24 (int (*)(...))QGraphicsGridLayout::~QGraphicsGridLayout
+32 (int (*)(...))QGraphicsGridLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsGridLayout::sizeHint
+72 (int (*)(...))QGraphicsGridLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsGridLayout::count
+96 (int (*)(...))QGraphicsGridLayout::itemAt
+104 (int (*)(...))QGraphicsGridLayout::removeAt
+
+Class QGraphicsGridLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsGridLayout (0x0x7f25c581c680) 0
+ vptr=((& QGraphicsGridLayout::_ZTV19QGraphicsGridLayout) + 16)
+ QGraphicsLayout (0x0x7f25c581c6e8) 0
+ primary-for QGraphicsGridLayout (0x0x7f25c581c680)
+ QGraphicsLayoutItem (0x0x7f25c54b3900) 0
+ primary-for QGraphicsLayout (0x0x7f25c581c6e8)
+
+Class QGraphicsItemAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsItemAnimation::QPrivateSignal (0x0x7f25c54b3ae0) 0 empty
+
+Vtable for QGraphicsItemAnimation
+QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QGraphicsItemAnimation)
+16 (int (*)(...))QGraphicsItemAnimation::metaObject
+24 (int (*)(...))QGraphicsItemAnimation::qt_metacast
+32 (int (*)(...))QGraphicsItemAnimation::qt_metacall
+40 (int (*)(...))QGraphicsItemAnimation::~QGraphicsItemAnimation
+48 (int (*)(...))QGraphicsItemAnimation::~QGraphicsItemAnimation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsItemAnimation::beforeAnimationStep
+120 (int (*)(...))QGraphicsItemAnimation::afterAnimationStep
+
+Class QGraphicsItemAnimation
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsItemAnimation (0x0x7f25c581c820) 0
+ vptr=((& QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation) + 16)
+ QObject (0x0x7f25c54b3a80) 0
+ primary-for QGraphicsItemAnimation (0x0x7f25c581c820)
+
+Vtable for QGraphicsLinearLayout
+QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QGraphicsLinearLayout)
+16 (int (*)(...))QGraphicsLinearLayout::~QGraphicsLinearLayout
+24 (int (*)(...))QGraphicsLinearLayout::~QGraphicsLinearLayout
+32 (int (*)(...))QGraphicsLinearLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsLinearLayout::sizeHint
+72 (int (*)(...))QGraphicsLinearLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsLinearLayout::count
+96 (int (*)(...))QGraphicsLinearLayout::itemAt
+104 (int (*)(...))QGraphicsLinearLayout::removeAt
+
+Class QGraphicsLinearLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLinearLayout (0x0x7f25c581c888) 0
+ vptr=((& QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout) + 16)
+ QGraphicsLayout (0x0x7f25c581c8f0) 0
+ primary-for QGraphicsLinearLayout (0x0x7f25c581c888)
+ QGraphicsLayoutItem (0x0x7f25c54b3ba0) 0
+ primary-for QGraphicsLayout (0x0x7f25c581c8f0)
+
+Class QGraphicsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsWidget::QPrivateSignal (0x0x7f25c54b3ea0) 0 empty
+
+Vtable for QGraphicsWidget
+QGraphicsWidget::_ZTV15QGraphicsWidget: 93 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsWidget)
+16 (int (*)(...))QGraphicsWidget::metaObject
+24 (int (*)(...))QGraphicsWidget::qt_metacast
+32 (int (*)(...))QGraphicsWidget::qt_metacall
+40 (int (*)(...))QGraphicsWidget::~QGraphicsWidget
+48 (int (*)(...))QGraphicsWidget::~QGraphicsWidget
+56 (int (*)(...))QGraphicsWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsWidget::setGeometry
+120 (int (*)(...))QGraphicsWidget::getContentsMargins
+128 (int (*)(...))QGraphicsWidget::type
+136 (int (*)(...))QGraphicsWidget::paint
+144 (int (*)(...))QGraphicsWidget::paintWindowFrame
+152 (int (*)(...))QGraphicsWidget::boundingRect
+160 (int (*)(...))QGraphicsWidget::shape
+168 (int (*)(...))QGraphicsWidget::initStyleOption
+176 (int (*)(...))QGraphicsWidget::sizeHint
+184 (int (*)(...))QGraphicsWidget::updateGeometry
+192 (int (*)(...))QGraphicsWidget::itemChange
+200 (int (*)(...))QGraphicsWidget::propertyChange
+208 (int (*)(...))QGraphicsWidget::sceneEvent
+216 (int (*)(...))QGraphicsWidget::windowFrameEvent
+224 (int (*)(...))QGraphicsWidget::windowFrameSectionAt
+232 (int (*)(...))QGraphicsWidget::changeEvent
+240 (int (*)(...))QGraphicsWidget::closeEvent
+248 (int (*)(...))QGraphicsWidget::focusInEvent
+256 (int (*)(...))QGraphicsWidget::focusNextPrevChild
+264 (int (*)(...))QGraphicsWidget::focusOutEvent
+272 (int (*)(...))QGraphicsWidget::hideEvent
+280 (int (*)(...))QGraphicsWidget::moveEvent
+288 (int (*)(...))QGraphicsWidget::polishEvent
+296 (int (*)(...))QGraphicsWidget::resizeEvent
+304 (int (*)(...))QGraphicsWidget::showEvent
+312 (int (*)(...))QGraphicsWidget::hoverMoveEvent
+320 (int (*)(...))QGraphicsWidget::hoverLeaveEvent
+328 (int (*)(...))QGraphicsWidget::grabMouseEvent
+336 (int (*)(...))QGraphicsWidget::ungrabMouseEvent
+344 (int (*)(...))QGraphicsWidget::grabKeyboardEvent
+352 (int (*)(...))QGraphicsWidget::ungrabKeyboardEvent
+360 (int (*)(...))-16
+368 (int (*)(...))(& _ZTI15QGraphicsWidget)
+376 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidgetD1Ev
+384 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidgetD0Ev
+392 (int (*)(...))QGraphicsItem::advance
+400 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget12boundingRectEv
+408 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget5shapeEv
+416 (int (*)(...))QGraphicsItem::contains
+424 (int (*)(...))QGraphicsItem::collidesWithItem
+432 (int (*)(...))QGraphicsItem::collidesWithPath
+440 (int (*)(...))QGraphicsItem::isObscuredBy
+448 (int (*)(...))QGraphicsItem::opaqueArea
+456 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+464 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget4typeEv
+472 (int (*)(...))QGraphicsItem::sceneEventFilter
+480 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10sceneEventEP6QEvent
+488 (int (*)(...))QGraphicsItem::contextMenuEvent
+496 (int (*)(...))QGraphicsItem::dragEnterEvent
+504 (int (*)(...))QGraphicsItem::dragLeaveEvent
+512 (int (*)(...))QGraphicsItem::dragMoveEvent
+520 (int (*)(...))QGraphicsItem::dropEvent
+528 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget12focusInEventEP11QFocusEvent
+536 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget13focusOutEventEP11QFocusEvent
+544 (int (*)(...))QGraphicsItem::hoverEnterEvent
+552 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget14hoverMoveEventEP24QGraphicsSceneHoverEvent
+560 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+568 (int (*)(...))QGraphicsItem::keyPressEvent
+576 (int (*)(...))QGraphicsItem::keyReleaseEvent
+584 (int (*)(...))QGraphicsItem::mousePressEvent
+592 (int (*)(...))QGraphicsItem::mouseMoveEvent
+600 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+608 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+616 (int (*)(...))QGraphicsItem::wheelEvent
+624 (int (*)(...))QGraphicsItem::inputMethodEvent
+632 (int (*)(...))QGraphicsItem::inputMethodQuery
+640 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant
+648 (int (*)(...))QGraphicsItem::supportsExtension
+656 (int (*)(...))QGraphicsItem::setExtension
+664 (int (*)(...))QGraphicsItem::extension
+672 (int (*)(...))-32
+680 (int (*)(...))(& _ZTI15QGraphicsWidget)
+688 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidgetD1Ev
+696 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidgetD0Ev
+704 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget11setGeometryERK6QRectF
+712 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget18getContentsMarginsEPdS0_S0_S0_
+720 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget14updateGeometryEv
+728 (int (*)(...))QGraphicsLayoutItem::isEmpty
+736 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget8sizeHintEN2Qt8SizeHintERK6QSizeF
+
+Class QGraphicsWidget
+ size=48 align=8
+ base size=48 base align=8
+QGraphicsWidget (0x0x7f25c5789c40) 0
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 16)
+ QGraphicsObject (0x0x7f25c5789cb0) 0
+ primary-for QGraphicsWidget (0x0x7f25c5789c40)
+ QObject (0x0x7f25c54b3d80) 0
+ primary-for QGraphicsObject (0x0x7f25c5789cb0)
+ QGraphicsItem (0x0x7f25c54b3de0) 16
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 376)
+ QGraphicsLayoutItem (0x0x7f25c54b3e40) 32
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 688)
+
+Class QGraphicsProxyWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsProxyWidget::QPrivateSignal (0x0x7f25c5560360) 0 empty
+
+Vtable for QGraphicsProxyWidget
+QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+16 (int (*)(...))QGraphicsProxyWidget::metaObject
+24 (int (*)(...))QGraphicsProxyWidget::qt_metacast
+32 (int (*)(...))QGraphicsProxyWidget::qt_metacall
+40 (int (*)(...))QGraphicsProxyWidget::~QGraphicsProxyWidget
+48 (int (*)(...))QGraphicsProxyWidget::~QGraphicsProxyWidget
+56 (int (*)(...))QGraphicsProxyWidget::event
+64 (int (*)(...))QGraphicsProxyWidget::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsProxyWidget::setGeometry
+120 (int (*)(...))QGraphicsWidget::getContentsMargins
+128 (int (*)(...))QGraphicsProxyWidget::type
+136 (int (*)(...))QGraphicsProxyWidget::paint
+144 (int (*)(...))QGraphicsWidget::paintWindowFrame
+152 (int (*)(...))QGraphicsWidget::boundingRect
+160 (int (*)(...))QGraphicsWidget::shape
+168 (int (*)(...))QGraphicsWidget::initStyleOption
+176 (int (*)(...))QGraphicsProxyWidget::sizeHint
+184 (int (*)(...))QGraphicsWidget::updateGeometry
+192 (int (*)(...))QGraphicsProxyWidget::itemChange
+200 (int (*)(...))QGraphicsWidget::propertyChange
+208 (int (*)(...))QGraphicsWidget::sceneEvent
+216 (int (*)(...))QGraphicsWidget::windowFrameEvent
+224 (int (*)(...))QGraphicsWidget::windowFrameSectionAt
+232 (int (*)(...))QGraphicsWidget::changeEvent
+240 (int (*)(...))QGraphicsWidget::closeEvent
+248 (int (*)(...))QGraphicsProxyWidget::focusInEvent
+256 (int (*)(...))QGraphicsProxyWidget::focusNextPrevChild
+264 (int (*)(...))QGraphicsProxyWidget::focusOutEvent
+272 (int (*)(...))QGraphicsProxyWidget::hideEvent
+280 (int (*)(...))QGraphicsWidget::moveEvent
+288 (int (*)(...))QGraphicsWidget::polishEvent
+296 (int (*)(...))QGraphicsProxyWidget::resizeEvent
+304 (int (*)(...))QGraphicsProxyWidget::showEvent
+312 (int (*)(...))QGraphicsProxyWidget::hoverMoveEvent
+320 (int (*)(...))QGraphicsProxyWidget::hoverLeaveEvent
+328 (int (*)(...))QGraphicsProxyWidget::grabMouseEvent
+336 (int (*)(...))QGraphicsProxyWidget::ungrabMouseEvent
+344 (int (*)(...))QGraphicsWidget::grabKeyboardEvent
+352 (int (*)(...))QGraphicsWidget::ungrabKeyboardEvent
+360 (int (*)(...))QGraphicsProxyWidget::contextMenuEvent
+368 (int (*)(...))QGraphicsProxyWidget::dragEnterEvent
+376 (int (*)(...))QGraphicsProxyWidget::dragLeaveEvent
+384 (int (*)(...))QGraphicsProxyWidget::dragMoveEvent
+392 (int (*)(...))QGraphicsProxyWidget::dropEvent
+400 (int (*)(...))QGraphicsProxyWidget::hoverEnterEvent
+408 (int (*)(...))QGraphicsProxyWidget::mouseMoveEvent
+416 (int (*)(...))QGraphicsProxyWidget::mousePressEvent
+424 (int (*)(...))QGraphicsProxyWidget::mouseReleaseEvent
+432 (int (*)(...))QGraphicsProxyWidget::mouseDoubleClickEvent
+440 (int (*)(...))QGraphicsProxyWidget::wheelEvent
+448 (int (*)(...))QGraphicsProxyWidget::keyPressEvent
+456 (int (*)(...))QGraphicsProxyWidget::keyReleaseEvent
+464 (int (*)(...))QGraphicsProxyWidget::inputMethodQuery
+472 (int (*)(...))QGraphicsProxyWidget::inputMethodEvent
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+496 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidgetD1Ev
+504 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidgetD0Ev
+512 (int (*)(...))QGraphicsItem::advance
+520 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget12boundingRectEv
+528 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget5shapeEv
+536 (int (*)(...))QGraphicsItem::contains
+544 (int (*)(...))QGraphicsItem::collidesWithItem
+552 (int (*)(...))QGraphicsItem::collidesWithPath
+560 (int (*)(...))QGraphicsItem::isObscuredBy
+568 (int (*)(...))QGraphicsItem::opaqueArea
+576 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+584 (int (*)(...))QGraphicsProxyWidget::_ZThn16_NK20QGraphicsProxyWidget4typeEv
+592 (int (*)(...))QGraphicsItem::sceneEventFilter
+600 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10sceneEventEP6QEvent
+608 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget16contextMenuEventEP30QGraphicsSceneContextMenuEvent
+616 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14dragEnterEventEP27QGraphicsSceneDragDropEvent
+624 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14dragLeaveEventEP27QGraphicsSceneDragDropEvent
+632 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13dragMoveEventEP27QGraphicsSceneDragDropEvent
+640 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget9dropEventEP27QGraphicsSceneDragDropEvent
+648 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget12focusInEventEP11QFocusEvent
+656 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13focusOutEventEP11QFocusEvent
+664 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15hoverEnterEventEP24QGraphicsSceneHoverEvent
+672 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14hoverMoveEventEP24QGraphicsSceneHoverEvent
+680 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+688 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13keyPressEventEP9QKeyEvent
+696 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15keyReleaseEventEP9QKeyEvent
+704 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15mousePressEventEP24QGraphicsSceneMouseEvent
+712 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14mouseMoveEventEP24QGraphicsSceneMouseEvent
+720 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget17mouseReleaseEventEP24QGraphicsSceneMouseEvent
+728 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent
+736 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget10wheelEventEP24QGraphicsSceneWheelEvent
+744 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget16inputMethodEventEP17QInputMethodEvent
+752 (int (*)(...))QGraphicsProxyWidget::_ZThn16_NK20QGraphicsProxyWidget16inputMethodQueryEN2Qt16InputMethodQueryE
+760 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant
+768 (int (*)(...))QGraphicsItem::supportsExtension
+776 (int (*)(...))QGraphicsItem::setExtension
+784 (int (*)(...))QGraphicsItem::extension
+792 (int (*)(...))-32
+800 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+808 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidgetD1Ev
+816 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidgetD0Ev
+824 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidget11setGeometryERK6QRectF
+832 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget18getContentsMarginsEPdS0_S0_S0_
+840 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget14updateGeometryEv
+848 (int (*)(...))QGraphicsLayoutItem::isEmpty
+856 (int (*)(...))QGraphicsProxyWidget::_ZThn32_NK20QGraphicsProxyWidget8sizeHintEN2Qt8SizeHintERK6QSizeF
+
+Class QGraphicsProxyWidget
+ size=48 align=8
+ base size=48 base align=8
+QGraphicsProxyWidget (0x0x7f25c581ca28) 0
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 16)
+ QGraphicsWidget (0x0x7f25c5789e00) 0
+ primary-for QGraphicsProxyWidget (0x0x7f25c581ca28)
+ QGraphicsObject (0x0x7f25c5789e70) 0
+ primary-for QGraphicsWidget (0x0x7f25c5789e00)
+ QObject (0x0x7f25c5560240) 0
+ primary-for QGraphicsObject (0x0x7f25c5789e70)
+ QGraphicsItem (0x0x7f25c55602a0) 16
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 496)
+ QGraphicsLayoutItem (0x0x7f25c5560300) 32
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 808)
+
+Class QGraphicsScene::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScene::QPrivateSignal (0x0x7f25c55606c0) 0 empty
+
+Vtable for QGraphicsScene
+QGraphicsScene::_ZTV14QGraphicsScene: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGraphicsScene)
+16 (int (*)(...))QGraphicsScene::metaObject
+24 (int (*)(...))QGraphicsScene::qt_metacast
+32 (int (*)(...))QGraphicsScene::qt_metacall
+40 (int (*)(...))QGraphicsScene::~QGraphicsScene
+48 (int (*)(...))QGraphicsScene::~QGraphicsScene
+56 (int (*)(...))QGraphicsScene::event
+64 (int (*)(...))QGraphicsScene::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsScene::inputMethodQuery
+120 (int (*)(...))QGraphicsScene::contextMenuEvent
+128 (int (*)(...))QGraphicsScene::dragEnterEvent
+136 (int (*)(...))QGraphicsScene::dragMoveEvent
+144 (int (*)(...))QGraphicsScene::dragLeaveEvent
+152 (int (*)(...))QGraphicsScene::dropEvent
+160 (int (*)(...))QGraphicsScene::focusInEvent
+168 (int (*)(...))QGraphicsScene::focusOutEvent
+176 (int (*)(...))QGraphicsScene::helpEvent
+184 (int (*)(...))QGraphicsScene::keyPressEvent
+192 (int (*)(...))QGraphicsScene::keyReleaseEvent
+200 (int (*)(...))QGraphicsScene::mousePressEvent
+208 (int (*)(...))QGraphicsScene::mouseMoveEvent
+216 (int (*)(...))QGraphicsScene::mouseReleaseEvent
+224 (int (*)(...))QGraphicsScene::mouseDoubleClickEvent
+232 (int (*)(...))QGraphicsScene::wheelEvent
+240 (int (*)(...))QGraphicsScene::inputMethodEvent
+248 (int (*)(...))QGraphicsScene::drawBackground
+256 (int (*)(...))QGraphicsScene::drawForeground
+264 (int (*)(...))QGraphicsScene::drawItems
+272 (int (*)(...))QGraphicsScene::focusNextPrevChild
+
+Class QGraphicsScene
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsScene (0x0x7f25c581cc30) 0
+ vptr=((& QGraphicsScene::_ZTV14QGraphicsScene) + 16)
+ QObject (0x0x7f25c5560660) 0
+ primary-for QGraphicsScene (0x0x7f25c581cc30)
+
+Vtable for QGraphicsSceneEvent
+QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsSceneEvent)
+16 (int (*)(...))QGraphicsSceneEvent::~QGraphicsSceneEvent
+24 (int (*)(...))QGraphicsSceneEvent::~QGraphicsSceneEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneEvent (0x0x7f25c55e0680) 0
+ vptr=((& QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent) + 16)
+ QEvent (0x0x7f25c55e2ae0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f25c55e0680)
+
+Vtable for QGraphicsSceneMouseEvent
+QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneMouseEvent)
+16 (int (*)(...))QGraphicsSceneMouseEvent::~QGraphicsSceneMouseEvent
+24 (int (*)(...))QGraphicsSceneMouseEvent::~QGraphicsSceneMouseEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneMouseEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneMouseEvent (0x0x7f25c55e06e8) 0
+ vptr=((& QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f25c55e0750) 0
+ primary-for QGraphicsSceneMouseEvent (0x0x7f25c55e06e8)
+ QEvent (0x0x7f25c55e2cc0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f25c55e0750)
+
+Vtable for QGraphicsSceneWheelEvent
+QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneWheelEvent)
+16 (int (*)(...))QGraphicsSceneWheelEvent::~QGraphicsSceneWheelEvent
+24 (int (*)(...))QGraphicsSceneWheelEvent::~QGraphicsSceneWheelEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneWheelEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneWheelEvent (0x0x7f25c55e07b8) 0
+ vptr=((& QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f25c55e0820) 0
+ primary-for QGraphicsSceneWheelEvent (0x0x7f25c55e07b8)
+ QEvent (0x0x7f25c55e2de0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f25c55e0820)
+
+Vtable for QGraphicsSceneContextMenuEvent
+QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI30QGraphicsSceneContextMenuEvent)
+16 (int (*)(...))QGraphicsSceneContextMenuEvent::~QGraphicsSceneContextMenuEvent
+24 (int (*)(...))QGraphicsSceneContextMenuEvent::~QGraphicsSceneContextMenuEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneContextMenuEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneContextMenuEvent (0x0x7f25c55e0888) 0
+ vptr=((& QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f25c55e08f0) 0
+ primary-for QGraphicsSceneContextMenuEvent (0x0x7f25c55e0888)
+ QEvent (0x0x7f25c55e2f00) 0
+ primary-for QGraphicsSceneEvent (0x0x7f25c55e08f0)
+
+Vtable for QGraphicsSceneHoverEvent
+QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneHoverEvent)
+16 (int (*)(...))QGraphicsSceneHoverEvent::~QGraphicsSceneHoverEvent
+24 (int (*)(...))QGraphicsSceneHoverEvent::~QGraphicsSceneHoverEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneHoverEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneHoverEvent (0x0x7f25c55e0958) 0
+ vptr=((& QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f25c55e09c0) 0
+ primary-for QGraphicsSceneHoverEvent (0x0x7f25c55e0958)
+ QEvent (0x0x7f25c52a9000) 0
+ primary-for QGraphicsSceneEvent (0x0x7f25c55e09c0)
+
+Vtable for QGraphicsSceneHelpEvent
+QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSceneHelpEvent)
+16 (int (*)(...))QGraphicsSceneHelpEvent::~QGraphicsSceneHelpEvent
+24 (int (*)(...))QGraphicsSceneHelpEvent::~QGraphicsSceneHelpEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneHelpEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneHelpEvent (0x0x7f25c55e0a28) 0
+ vptr=((& QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f25c55e0a90) 0
+ primary-for QGraphicsSceneHelpEvent (0x0x7f25c55e0a28)
+ QEvent (0x0x7f25c52a9120) 0
+ primary-for QGraphicsSceneEvent (0x0x7f25c55e0a90)
+
+Vtable for QGraphicsSceneDragDropEvent
+QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QGraphicsSceneDragDropEvent)
+16 (int (*)(...))QGraphicsSceneDragDropEvent::~QGraphicsSceneDragDropEvent
+24 (int (*)(...))QGraphicsSceneDragDropEvent::~QGraphicsSceneDragDropEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneDragDropEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneDragDropEvent (0x0x7f25c55e0af8) 0
+ vptr=((& QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f25c55e0b60) 0
+ primary-for QGraphicsSceneDragDropEvent (0x0x7f25c55e0af8)
+ QEvent (0x0x7f25c52a9240) 0
+ primary-for QGraphicsSceneEvent (0x0x7f25c55e0b60)
+
+Vtable for QGraphicsSceneResizeEvent
+QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QGraphicsSceneResizeEvent)
+16 (int (*)(...))QGraphicsSceneResizeEvent::~QGraphicsSceneResizeEvent
+24 (int (*)(...))QGraphicsSceneResizeEvent::~QGraphicsSceneResizeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneResizeEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneResizeEvent (0x0x7f25c55e0bc8) 0
+ vptr=((& QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f25c55e0c30) 0
+ primary-for QGraphicsSceneResizeEvent (0x0x7f25c55e0bc8)
+ QEvent (0x0x7f25c52a9360) 0
+ primary-for QGraphicsSceneEvent (0x0x7f25c55e0c30)
+
+Vtable for QGraphicsSceneMoveEvent
+QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSceneMoveEvent)
+16 (int (*)(...))QGraphicsSceneMoveEvent::~QGraphicsSceneMoveEvent
+24 (int (*)(...))QGraphicsSceneMoveEvent::~QGraphicsSceneMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneMoveEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneMoveEvent (0x0x7f25c55e0c98) 0
+ vptr=((& QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f25c55e0d00) 0
+ primary-for QGraphicsSceneMoveEvent (0x0x7f25c55e0c98)
+ QEvent (0x0x7f25c52a9480) 0
+ primary-for QGraphicsSceneEvent (0x0x7f25c55e0d00)
+
+Class QGraphicsTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTransform::QPrivateSignal (0x0x7f25c52a9600) 0 empty
+
+Vtable for QGraphicsTransform
+QGraphicsTransform::_ZTV18QGraphicsTransform: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGraphicsTransform)
+16 (int (*)(...))QGraphicsTransform::metaObject
+24 (int (*)(...))QGraphicsTransform::qt_metacast
+32 (int (*)(...))QGraphicsTransform::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsTransform
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsTransform (0x0x7f25c55e0d68) 0
+ vptr=((& QGraphicsTransform::_ZTV18QGraphicsTransform) + 16)
+ QObject (0x0x7f25c52a95a0) 0
+ primary-for QGraphicsTransform (0x0x7f25c55e0d68)
+
+Class QGraphicsScale::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScale::QPrivateSignal (0x0x7f25c52a97e0) 0 empty
+
+Vtable for QGraphicsScale
+QGraphicsScale::_ZTV14QGraphicsScale: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGraphicsScale)
+16 (int (*)(...))QGraphicsScale::metaObject
+24 (int (*)(...))QGraphicsScale::qt_metacast
+32 (int (*)(...))QGraphicsScale::qt_metacall
+40 (int (*)(...))QGraphicsScale::~QGraphicsScale
+48 (int (*)(...))QGraphicsScale::~QGraphicsScale
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsScale::applyTo
+
+Class QGraphicsScale
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsScale (0x0x7f25c55e0dd0) 0
+ vptr=((& QGraphicsScale::_ZTV14QGraphicsScale) + 16)
+ QGraphicsTransform (0x0x7f25c55e0e38) 0
+ primary-for QGraphicsScale (0x0x7f25c55e0dd0)
+ QObject (0x0x7f25c52a9780) 0
+ primary-for QGraphicsTransform (0x0x7f25c55e0e38)
+
+Class QGraphicsRotation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsRotation::QPrivateSignal (0x0x7f25c52a99c0) 0 empty
+
+Vtable for QGraphicsRotation
+QGraphicsRotation::_ZTV17QGraphicsRotation: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsRotation)
+16 (int (*)(...))QGraphicsRotation::metaObject
+24 (int (*)(...))QGraphicsRotation::qt_metacast
+32 (int (*)(...))QGraphicsRotation::qt_metacall
+40 (int (*)(...))QGraphicsRotation::~QGraphicsRotation
+48 (int (*)(...))QGraphicsRotation::~QGraphicsRotation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsRotation::applyTo
+
+Class QGraphicsRotation
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsRotation (0x0x7f25c55e0ea0) 0
+ vptr=((& QGraphicsRotation::_ZTV17QGraphicsRotation) + 16)
+ QGraphicsTransform (0x0x7f25c55e0f08) 0
+ primary-for QGraphicsRotation (0x0x7f25c55e0ea0)
+ QObject (0x0x7f25c52a9960) 0
+ primary-for QGraphicsTransform (0x0x7f25c55e0f08)
+
+Class QScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollArea::QPrivateSignal (0x0x7f25c52a9c00) 0 empty
+
+Vtable for QScrollArea
+QScrollArea::_ZTV11QScrollArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QScrollArea)
+16 (int (*)(...))QScrollArea::metaObject
+24 (int (*)(...))QScrollArea::qt_metacast
+32 (int (*)(...))QScrollArea::qt_metacall
+40 (int (*)(...))QScrollArea::~QScrollArea
+48 (int (*)(...))QScrollArea::~QScrollArea
+56 (int (*)(...))QScrollArea::event
+64 (int (*)(...))QScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QScrollArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QScrollArea::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QScrollArea::scrollContentsBy
+464 (int (*)(...))QScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QScrollArea)
+488 (int (*)(...))QScrollArea::_ZThn16_N11QScrollAreaD1Ev
+496 (int (*)(...))QScrollArea::_ZThn16_N11QScrollAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QScrollArea
+ size=40 align=8
+ base size=40 base align=8
+QScrollArea (0x0x7f25c55e0f70) 0
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 16)
+ QAbstractScrollArea (0x0x7f25c55e0618) 0
+ primary-for QScrollArea (0x0x7f25c55e0f70)
+ QFrame (0x0x7f25c52f1000) 0
+ primary-for QAbstractScrollArea (0x0x7f25c55e0618)
+ QWidget (0x0x7f25c5581620) 0
+ primary-for QFrame (0x0x7f25c52f1000)
+ QObject (0x0x7f25c52a9b40) 0
+ primary-for QWidget (0x0x7f25c5581620)
+ QPaintDevice (0x0x7f25c52a9ba0) 16
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 488)
+
+Class QGraphicsView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsView::QPrivateSignal (0x0x7f25c52a9e40) 0 empty
+
+Vtable for QGraphicsView
+QGraphicsView::_ZTV13QGraphicsView: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGraphicsView)
+16 (int (*)(...))QGraphicsView::metaObject
+24 (int (*)(...))QGraphicsView::qt_metacast
+32 (int (*)(...))QGraphicsView::qt_metacall
+40 (int (*)(...))QGraphicsView::~QGraphicsView
+48 (int (*)(...))QGraphicsView::~QGraphicsView
+56 (int (*)(...))QGraphicsView::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QGraphicsView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QGraphicsView::mousePressEvent
+176 (int (*)(...))QGraphicsView::mouseReleaseEvent
+184 (int (*)(...))QGraphicsView::mouseDoubleClickEvent
+192 (int (*)(...))QGraphicsView::mouseMoveEvent
+200 (int (*)(...))QGraphicsView::wheelEvent
+208 (int (*)(...))QGraphicsView::keyPressEvent
+216 (int (*)(...))QGraphicsView::keyReleaseEvent
+224 (int (*)(...))QGraphicsView::focusInEvent
+232 (int (*)(...))QGraphicsView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QGraphicsView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QGraphicsView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QGraphicsView::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QGraphicsView::dragEnterEvent
+320 (int (*)(...))QGraphicsView::dragMoveEvent
+328 (int (*)(...))QGraphicsView::dragLeaveEvent
+336 (int (*)(...))QGraphicsView::dropEvent
+344 (int (*)(...))QGraphicsView::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QGraphicsView::inputMethodEvent
+416 (int (*)(...))QGraphicsView::inputMethodQuery
+424 (int (*)(...))QGraphicsView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QGraphicsView::setupViewport
+448 (int (*)(...))QGraphicsView::viewportEvent
+456 (int (*)(...))QGraphicsView::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QGraphicsView::drawBackground
+480 (int (*)(...))QGraphicsView::drawForeground
+488 (int (*)(...))QGraphicsView::drawItems
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI13QGraphicsView)
+512 (int (*)(...))QGraphicsView::_ZThn16_N13QGraphicsViewD1Ev
+520 (int (*)(...))QGraphicsView::_ZThn16_N13QGraphicsViewD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QGraphicsView
+ size=40 align=8
+ base size=40 base align=8
+QGraphicsView (0x0x7f25c52f1068) 0
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 16)
+ QAbstractScrollArea (0x0x7f25c52f10d0) 0
+ primary-for QGraphicsView (0x0x7f25c52f1068)
+ QFrame (0x0x7f25c52f1138) 0
+ primary-for QAbstractScrollArea (0x0x7f25c52f10d0)
+ QWidget (0x0x7f25c5581690) 0
+ primary-for QFrame (0x0x7f25c52f1138)
+ QObject (0x0x7f25c52a9d80) 0
+ primary-for QWidget (0x0x7f25c5581690)
+ QPaintDevice (0x0x7f25c52a9de0) 16
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 512)
+
+Class QGroupBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGroupBox::QPrivateSignal (0x0x7f25c533eea0) 0 empty
+
+Vtable for QGroupBox
+QGroupBox::_ZTV9QGroupBox: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QGroupBox)
+16 (int (*)(...))QGroupBox::metaObject
+24 (int (*)(...))QGroupBox::qt_metacast
+32 (int (*)(...))QGroupBox::qt_metacall
+40 (int (*)(...))QGroupBox::~QGroupBox
+48 (int (*)(...))QGroupBox::~QGroupBox
+56 (int (*)(...))QGroupBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QGroupBox::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QGroupBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QGroupBox::mousePressEvent
+176 (int (*)(...))QGroupBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QGroupBox::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QGroupBox::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QGroupBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QGroupBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QGroupBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QGroupBox::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI9QGroupBox)
+456 (int (*)(...))QGroupBox::_ZThn16_N9QGroupBoxD1Ev
+464 (int (*)(...))QGroupBox::_ZThn16_N9QGroupBoxD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QGroupBox
+ size=40 align=8
+ base size=40 base align=8
+QGroupBox (0x0x7f25c52f1410) 0
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 16)
+ QWidget (0x0x7f25c5581e00) 0
+ primary-for QGroupBox (0x0x7f25c52f1410)
+ QObject (0x0x7f25c533ede0) 0
+ primary-for QWidget (0x0x7f25c5581e00)
+ QPaintDevice (0x0x7f25c533ee40) 16
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 456)
+
+Class QHeaderView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHeaderView::QPrivateSignal (0x0x7f25c53ed120) 0 empty
+
+Vtable for QHeaderView
+QHeaderView::_ZTV11QHeaderView: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHeaderView)
+16 (int (*)(...))QHeaderView::metaObject
+24 (int (*)(...))QHeaderView::qt_metacast
+32 (int (*)(...))QHeaderView::qt_metacall
+40 (int (*)(...))QHeaderView::~QHeaderView
+48 (int (*)(...))QHeaderView::~QHeaderView
+56 (int (*)(...))QHeaderView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QHeaderView::setVisible
+128 (int (*)(...))QHeaderView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QHeaderView::mousePressEvent
+176 (int (*)(...))QHeaderView::mouseReleaseEvent
+184 (int (*)(...))QHeaderView::mouseDoubleClickEvent
+192 (int (*)(...))QHeaderView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QHeaderView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QHeaderView::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QHeaderView::viewportEvent
+456 (int (*)(...))QHeaderView::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QHeaderView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QHeaderView::visualRect
+504 (int (*)(...))QHeaderView::scrollTo
+512 (int (*)(...))QHeaderView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QHeaderView::reset
+552 (int (*)(...))QAbstractItemView::setRootIndex
+560 (int (*)(...))QHeaderView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QHeaderView::dataChanged
+584 (int (*)(...))QHeaderView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QHeaderView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QHeaderView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QHeaderView::moveCursor
+704 (int (*)(...))QHeaderView::horizontalOffset
+712 (int (*)(...))QHeaderView::verticalOffset
+720 (int (*)(...))QHeaderView::isIndexHidden
+728 (int (*)(...))QHeaderView::setSelection
+736 (int (*)(...))QHeaderView::visualRegionForSelection
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QHeaderView::paintSection
+792 (int (*)(...))QHeaderView::sectionSizeFromContents
+800 (int (*)(...))QHeaderView::initStyleOptionForIndex
+808 (int (*)(...))QHeaderView::initStyleOption
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI11QHeaderView)
+832 (int (*)(...))QHeaderView::_ZThn16_N11QHeaderViewD1Ev
+840 (int (*)(...))QHeaderView::_ZThn16_N11QHeaderViewD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHeaderView
+ size=40 align=8
+ base size=40 base align=8
+QHeaderView (0x0x7f25c52f1478) 0
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 16)
+ QAbstractItemView (0x0x7f25c52f14e0) 0
+ primary-for QHeaderView (0x0x7f25c52f1478)
+ QAbstractScrollArea (0x0x7f25c52f1548) 0
+ primary-for QAbstractItemView (0x0x7f25c52f14e0)
+ QFrame (0x0x7f25c52f15b0) 0
+ primary-for QAbstractScrollArea (0x0x7f25c52f1548)
+ QWidget (0x0x7f25c5581e70) 0
+ primary-for QFrame (0x0x7f25c52f15b0)
+ QObject (0x0x7f25c53ed060) 0
+ primary-for QWidget (0x0x7f25c5581e70)
+ QPaintDevice (0x0x7f25c53ed0c0) 16
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 832)
+
+Class QLineEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLineEdit::QPrivateSignal (0x0x7f25c53ed5a0) 0 empty
+
+Vtable for QLineEdit
+QLineEdit::_ZTV9QLineEdit: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QLineEdit)
+16 (int (*)(...))QLineEdit::metaObject
+24 (int (*)(...))QLineEdit::qt_metacast
+32 (int (*)(...))QLineEdit::qt_metacall
+40 (int (*)(...))QLineEdit::~QLineEdit
+48 (int (*)(...))QLineEdit::~QLineEdit
+56 (int (*)(...))QLineEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QLineEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLineEdit::sizeHint
+136 (int (*)(...))QLineEdit::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QLineEdit::mousePressEvent
+176 (int (*)(...))QLineEdit::mouseReleaseEvent
+184 (int (*)(...))QLineEdit::mouseDoubleClickEvent
+192 (int (*)(...))QLineEdit::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QLineEdit::keyPressEvent
+216 (int (*)(...))QLineEdit::keyReleaseEvent
+224 (int (*)(...))QLineEdit::focusInEvent
+232 (int (*)(...))QLineEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLineEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QLineEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QLineEdit::dragEnterEvent
+320 (int (*)(...))QLineEdit::dragMoveEvent
+328 (int (*)(...))QLineEdit::dragLeaveEvent
+336 (int (*)(...))QLineEdit::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QLineEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QLineEdit::inputMethodEvent
+416 (int (*)(...))QLineEdit::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QLineEdit::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI9QLineEdit)
+456 (int (*)(...))QLineEdit::_ZThn16_N9QLineEditD1Ev
+464 (int (*)(...))QLineEdit::_ZThn16_N9QLineEditD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLineEdit
+ size=40 align=8
+ base size=40 base align=8
+QLineEdit (0x0x7f25c52f1618) 0
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 16)
+ QWidget (0x0x7f25c53f2150) 0
+ primary-for QLineEdit (0x0x7f25c52f1618)
+ QObject (0x0x7f25c53ed4e0) 0
+ primary-for QWidget (0x0x7f25c53f2150)
+ QPaintDevice (0x0x7f25c53ed540) 16
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 456)
+
+Class QInputDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDialog::QPrivateSignal (0x0x7f25c53ed960) 0 empty
+
+Vtable for QInputDialog
+QInputDialog::_ZTV12QInputDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputDialog)
+16 (int (*)(...))QInputDialog::metaObject
+24 (int (*)(...))QInputDialog::qt_metacast
+32 (int (*)(...))QInputDialog::qt_metacall
+40 (int (*)(...))QInputDialog::~QInputDialog
+48 (int (*)(...))QInputDialog::~QInputDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QInputDialog::setVisible
+128 (int (*)(...))QInputDialog::sizeHint
+136 (int (*)(...))QInputDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QInputDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QInputDialog)
+488 (int (*)(...))QInputDialog::_ZThn16_N12QInputDialogD1Ev
+496 (int (*)(...))QInputDialog::_ZThn16_N12QInputDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QInputDialog
+ size=40 align=8
+ base size=40 base align=8
+QInputDialog (0x0x7f25c52f1680) 0
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 16)
+ QDialog (0x0x7f25c52f16e8) 0
+ primary-for QInputDialog (0x0x7f25c52f1680)
+ QWidget (0x0x7f25c53f2460) 0
+ primary-for QDialog (0x0x7f25c52f16e8)
+ QObject (0x0x7f25c53ed8a0) 0
+ primary-for QWidget (0x0x7f25c53f2460)
+ QPaintDevice (0x0x7f25c53ed900) 16
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 488)
+
+Class QItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemDelegate::QPrivateSignal (0x0x7f25c53edf00) 0 empty
+
+Vtable for QItemDelegate
+QItemDelegate::_ZTV13QItemDelegate: 28 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QItemDelegate)
+16 (int (*)(...))QItemDelegate::metaObject
+24 (int (*)(...))QItemDelegate::qt_metacast
+32 (int (*)(...))QItemDelegate::qt_metacall
+40 (int (*)(...))QItemDelegate::~QItemDelegate
+48 (int (*)(...))QItemDelegate::~QItemDelegate
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QItemDelegate::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QItemDelegate::paint
+120 (int (*)(...))QItemDelegate::sizeHint
+128 (int (*)(...))QItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QItemDelegate::setEditorData
+152 (int (*)(...))QItemDelegate::setModelData
+160 (int (*)(...))QItemDelegate::updateEditorGeometry
+168 (int (*)(...))QItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+192 (int (*)(...))QItemDelegate::drawDisplay
+200 (int (*)(...))QItemDelegate::drawDecoration
+208 (int (*)(...))QItemDelegate::drawFocus
+216 (int (*)(...))QItemDelegate::drawCheck
+
+Class QItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QItemDelegate (0x0x7f25c52f1888) 0
+ vptr=((& QItemDelegate::_ZTV13QItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7f25c52f18f0) 0
+ primary-for QItemDelegate (0x0x7f25c52f1888)
+ QObject (0x0x7f25c53edea0) 0
+ primary-for QAbstractItemDelegate (0x0x7f25c52f18f0)
+
+Vtable for QItemEditorCreatorBase
+QItemEditorCreatorBase::_ZTV22QItemEditorCreatorBase: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QItemEditorCreatorBase)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QItemEditorCreatorBase
+ size=8 align=8
+ base size=8 base align=8
+QItemEditorCreatorBase (0x0x7f25c50c60c0) 0 nearly-empty
+ vptr=((& QItemEditorCreatorBase::_ZTV22QItemEditorCreatorBase) + 16)
+
+Vtable for QItemEditorFactory
+QItemEditorFactory::_ZTV18QItemEditorFactory: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QItemEditorFactory)
+16 (int (*)(...))QItemEditorFactory::~QItemEditorFactory
+24 (int (*)(...))QItemEditorFactory::~QItemEditorFactory
+32 (int (*)(...))QItemEditorFactory::createEditor
+40 (int (*)(...))QItemEditorFactory::valuePropertyName
+
+Class QItemEditorFactory
+ size=16 align=8
+ base size=16 base align=8
+QItemEditorFactory (0x0x7f25c50c6420) 0
+ vptr=((& QItemEditorFactory::_ZTV18QItemEditorFactory) + 16)
+
+Class QKeySequenceEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QKeySequenceEdit::QPrivateSignal (0x0x7f25c50c6900) 0 empty
+
+Vtable for QKeySequenceEdit
+QKeySequenceEdit::_ZTV16QKeySequenceEdit: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QKeySequenceEdit)
+16 (int (*)(...))QKeySequenceEdit::metaObject
+24 (int (*)(...))QKeySequenceEdit::qt_metacast
+32 (int (*)(...))QKeySequenceEdit::qt_metacall
+40 (int (*)(...))QKeySequenceEdit::~QKeySequenceEdit
+48 (int (*)(...))QKeySequenceEdit::~QKeySequenceEdit
+56 (int (*)(...))QKeySequenceEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QKeySequenceEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QKeySequenceEdit::keyPressEvent
+216 (int (*)(...))QKeySequenceEdit::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI16QKeySequenceEdit)
+448 (int (*)(...))QKeySequenceEdit::_ZThn16_N16QKeySequenceEditD1Ev
+456 (int (*)(...))QKeySequenceEdit::_ZThn16_N16QKeySequenceEditD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QKeySequenceEdit
+ size=40 align=8
+ base size=40 base align=8
+QKeySequenceEdit (0x0x7f25c52f1a28) 0
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 16)
+ QWidget (0x0x7f25c53f2770) 0
+ primary-for QKeySequenceEdit (0x0x7f25c52f1a28)
+ QObject (0x0x7f25c50c6840) 0
+ primary-for QWidget (0x0x7f25c53f2770)
+ QPaintDevice (0x0x7f25c50c68a0) 16
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 448)
+
+Class QLabel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLabel::QPrivateSignal (0x0x7f25c50c6b40) 0 empty
+
+Vtable for QLabel
+QLabel::_ZTV6QLabel: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QLabel)
+16 (int (*)(...))QLabel::metaObject
+24 (int (*)(...))QLabel::qt_metacast
+32 (int (*)(...))QLabel::qt_metacall
+40 (int (*)(...))QLabel::~QLabel
+48 (int (*)(...))QLabel::~QLabel
+56 (int (*)(...))QLabel::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLabel::sizeHint
+136 (int (*)(...))QLabel::minimumSizeHint
+144 (int (*)(...))QLabel::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QLabel::mousePressEvent
+176 (int (*)(...))QLabel::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QLabel::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QLabel::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QLabel::focusInEvent
+232 (int (*)(...))QLabel::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLabel::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QLabel::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QLabel::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QLabel::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI6QLabel)
+456 (int (*)(...))QLabel::_ZThn16_N6QLabelD1Ev
+464 (int (*)(...))QLabel::_ZThn16_N6QLabelD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLabel
+ size=40 align=8
+ base size=40 base align=8
+QLabel (0x0x7f25c52f1a90) 0
+ vptr=((& QLabel::_ZTV6QLabel) + 16)
+ QFrame (0x0x7f25c52f1af8) 0
+ primary-for QLabel (0x0x7f25c52f1a90)
+ QWidget (0x0x7f25c53f27e0) 0
+ primary-for QFrame (0x0x7f25c52f1af8)
+ QObject (0x0x7f25c50c6a80) 0
+ primary-for QWidget (0x0x7f25c53f27e0)
+ QPaintDevice (0x0x7f25c50c6ae0) 16
+ vptr=((& QLabel::_ZTV6QLabel) + 456)
+
+Class QLCDNumber::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLCDNumber::QPrivateSignal (0x0x7f25c50c6e40) 0 empty
+
+Vtable for QLCDNumber
+QLCDNumber::_ZTV10QLCDNumber: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QLCDNumber)
+16 (int (*)(...))QLCDNumber::metaObject
+24 (int (*)(...))QLCDNumber::qt_metacast
+32 (int (*)(...))QLCDNumber::qt_metacall
+40 (int (*)(...))QLCDNumber::~QLCDNumber
+48 (int (*)(...))QLCDNumber::~QLCDNumber
+56 (int (*)(...))QLCDNumber::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLCDNumber::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLCDNumber::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI10QLCDNumber)
+456 (int (*)(...))QLCDNumber::_ZThn16_N10QLCDNumberD1Ev
+464 (int (*)(...))QLCDNumber::_ZThn16_N10QLCDNumberD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLCDNumber
+ size=40 align=8
+ base size=40 base align=8
+QLCDNumber (0x0x7f25c52f1b60) 0
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 16)
+ QFrame (0x0x7f25c52f1bc8) 0
+ primary-for QLCDNumber (0x0x7f25c52f1b60)
+ QWidget (0x0x7f25c53f2850) 0
+ primary-for QFrame (0x0x7f25c52f1bc8)
+ QObject (0x0x7f25c50c6d80) 0
+ primary-for QWidget (0x0x7f25c53f2850)
+ QPaintDevice (0x0x7f25c50c6de0) 16
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 456)
+
+Class QListView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListView::QPrivateSignal (0x0x7f25c5139240) 0 empty
+
+Vtable for QListView
+QListView::_ZTV9QListView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QListView)
+16 (int (*)(...))QListView::metaObject
+24 (int (*)(...))QListView::qt_metacast
+32 (int (*)(...))QListView::qt_metacall
+40 (int (*)(...))QListView::~QListView
+48 (int (*)(...))QListView::~QListView
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI9QListView)
+800 (int (*)(...))QListView::_ZThn16_N9QListViewD1Ev
+808 (int (*)(...))QListView::_ZThn16_N9QListViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QListView
+ size=40 align=8
+ base size=40 base align=8
+QListView (0x0x7f25c52f1c30) 0
+ vptr=((& QListView::_ZTV9QListView) + 16)
+ QAbstractItemView (0x0x7f25c52f1c98) 0
+ primary-for QListView (0x0x7f25c52f1c30)
+ QAbstractScrollArea (0x0x7f25c52f1d00) 0
+ primary-for QAbstractItemView (0x0x7f25c52f1c98)
+ QFrame (0x0x7f25c52f1d68) 0
+ primary-for QAbstractScrollArea (0x0x7f25c52f1d00)
+ QWidget (0x0x7f25c53f2bd0) 0
+ primary-for QFrame (0x0x7f25c52f1d68)
+ QObject (0x0x7f25c5139180) 0
+ primary-for QWidget (0x0x7f25c53f2bd0)
+ QPaintDevice (0x0x7f25c51391e0) 16
+ vptr=((& QListView::_ZTV9QListView) + 800)
+
+Vtable for QListWidgetItem
+QListWidgetItem::_ZTV15QListWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QListWidgetItem)
+16 (int (*)(...))QListWidgetItem::~QListWidgetItem
+24 (int (*)(...))QListWidgetItem::~QListWidgetItem
+32 (int (*)(...))QListWidgetItem::clone
+40 (int (*)(...))QListWidgetItem::data
+48 (int (*)(...))QListWidgetItem::setData
+56 (int (*)(...))QListWidgetItem::operator<
+64 (int (*)(...))QListWidgetItem::read
+72 (int (*)(...))QListWidgetItem::write
+
+Class QListWidgetItem
+ size=40 align=8
+ base size=36 base align=8
+QListWidgetItem (0x0x7f25c5139780) 0
+ vptr=((& QListWidgetItem::_ZTV15QListWidgetItem) + 16)
+
+Class QListWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListWidget::QPrivateSignal (0x0x7f25c519b240) 0 empty
+
+Vtable for QListWidget
+QListWidget::_ZTV11QListWidget: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QListWidget)
+16 (int (*)(...))QListWidget::metaObject
+24 (int (*)(...))QListWidget::qt_metacast
+32 (int (*)(...))QListWidget::qt_metacall
+40 (int (*)(...))QListWidget::~QListWidget
+48 (int (*)(...))QListWidget::~QListWidget
+56 (int (*)(...))QListWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QListWidget::setModel
+480 (int (*)(...))QListWidget::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))QListWidget::mimeTypes
+792 (int (*)(...))QListWidget::mimeData
+800 (int (*)(...))QListWidget::dropMimeData
+808 (int (*)(...))QListWidget::supportedDropActions
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI11QListWidget)
+832 (int (*)(...))QListWidget::_ZThn16_N11QListWidgetD1Ev
+840 (int (*)(...))QListWidget::_ZThn16_N11QListWidgetD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QListWidget
+ size=40 align=8
+ base size=40 base align=8
+QListWidget (0x0x7f25c52f1dd0) 0
+ vptr=((& QListWidget::_ZTV11QListWidget) + 16)
+ QListView (0x0x7f25c52f1e38) 0
+ primary-for QListWidget (0x0x7f25c52f1dd0)
+ QAbstractItemView (0x0x7f25c52f1ea0) 0
+ primary-for QListView (0x0x7f25c52f1e38)
+ QAbstractScrollArea (0x0x7f25c52f1f08) 0
+ primary-for QAbstractItemView (0x0x7f25c52f1ea0)
+ QFrame (0x0x7f25c52f1f70) 0
+ primary-for QAbstractScrollArea (0x0x7f25c52f1f08)
+ QWidget (0x0x7f25c5145230) 0
+ primary-for QFrame (0x0x7f25c52f1f70)
+ QObject (0x0x7f25c519b180) 0
+ primary-for QWidget (0x0x7f25c5145230)
+ QPaintDevice (0x0x7f25c519b1e0) 16
+ vptr=((& QListWidget::_ZTV11QListWidget) + 832)
+
+Class QMainWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMainWindow::QPrivateSignal (0x0x7f25c519b720) 0 empty
+
+Vtable for QMainWindow
+QMainWindow::_ZTV11QMainWindow: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMainWindow)
+16 (int (*)(...))QMainWindow::metaObject
+24 (int (*)(...))QMainWindow::qt_metacast
+32 (int (*)(...))QMainWindow::qt_metacall
+40 (int (*)(...))QMainWindow::~QMainWindow
+48 (int (*)(...))QMainWindow::~QMainWindow
+56 (int (*)(...))QMainWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QMainWindow::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QMainWindow::createPopupMenu
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QMainWindow)
+456 (int (*)(...))QMainWindow::_ZThn16_N11QMainWindowD1Ev
+464 (int (*)(...))QMainWindow::_ZThn16_N11QMainWindowD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMainWindow
+ size=40 align=8
+ base size=40 base align=8
+QMainWindow (0x0x7f25c51c5000) 0
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 16)
+ QWidget (0x0x7f25c51452a0) 0
+ primary-for QMainWindow (0x0x7f25c51c5000)
+ QObject (0x0x7f25c519b660) 0
+ primary-for QWidget (0x0x7f25c51452a0)
+ QPaintDevice (0x0x7f25c519b6c0) 16
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 456)
+
+Class QMdiArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiArea::QPrivateSignal (0x0x7f25c519bea0) 0 empty
+
+Vtable for QMdiArea
+QMdiArea::_ZTV8QMdiArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QMdiArea)
+16 (int (*)(...))QMdiArea::metaObject
+24 (int (*)(...))QMdiArea::qt_metacast
+32 (int (*)(...))QMdiArea::qt_metacall
+40 (int (*)(...))QMdiArea::~QMdiArea
+48 (int (*)(...))QMdiArea::~QMdiArea
+56 (int (*)(...))QMdiArea::event
+64 (int (*)(...))QMdiArea::eventFilter
+72 (int (*)(...))QMdiArea::timerEvent
+80 (int (*)(...))QMdiArea::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMdiArea::sizeHint
+136 (int (*)(...))QMdiArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QMdiArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMdiArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QMdiArea::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QMdiArea::setupViewport
+448 (int (*)(...))QMdiArea::viewportEvent
+456 (int (*)(...))QMdiArea::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI8QMdiArea)
+488 (int (*)(...))QMdiArea::_ZThn16_N8QMdiAreaD1Ev
+496 (int (*)(...))QMdiArea::_ZThn16_N8QMdiAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMdiArea
+ size=40 align=8
+ base size=40 base align=8
+QMdiArea (0x0x7f25c51c51a0) 0
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 16)
+ QAbstractScrollArea (0x0x7f25c51c5208) 0
+ primary-for QMdiArea (0x0x7f25c51c51a0)
+ QFrame (0x0x7f25c51c5270) 0
+ primary-for QAbstractScrollArea (0x0x7f25c51c5208)
+ QWidget (0x0x7f25c51455b0) 0
+ primary-for QFrame (0x0x7f25c51c5270)
+ QObject (0x0x7f25c519bde0) 0
+ primary-for QWidget (0x0x7f25c51455b0)
+ QPaintDevice (0x0x7f25c519be40) 16
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 488)
+
+Class QMdiSubWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiSubWindow::QPrivateSignal (0x0x7f25c4e4d660) 0 empty
+
+Vtable for QMdiSubWindow
+QMdiSubWindow::_ZTV13QMdiSubWindow: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QMdiSubWindow)
+16 (int (*)(...))QMdiSubWindow::metaObject
+24 (int (*)(...))QMdiSubWindow::qt_metacast
+32 (int (*)(...))QMdiSubWindow::qt_metacall
+40 (int (*)(...))QMdiSubWindow::~QMdiSubWindow
+48 (int (*)(...))QMdiSubWindow::~QMdiSubWindow
+56 (int (*)(...))QMdiSubWindow::event
+64 (int (*)(...))QMdiSubWindow::eventFilter
+72 (int (*)(...))QMdiSubWindow::timerEvent
+80 (int (*)(...))QMdiSubWindow::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMdiSubWindow::sizeHint
+136 (int (*)(...))QMdiSubWindow::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMdiSubWindow::mousePressEvent
+176 (int (*)(...))QMdiSubWindow::mouseReleaseEvent
+184 (int (*)(...))QMdiSubWindow::mouseDoubleClickEvent
+192 (int (*)(...))QMdiSubWindow::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMdiSubWindow::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QMdiSubWindow::focusInEvent
+232 (int (*)(...))QMdiSubWindow::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QMdiSubWindow::leaveEvent
+256 (int (*)(...))QMdiSubWindow::paintEvent
+264 (int (*)(...))QMdiSubWindow::moveEvent
+272 (int (*)(...))QMdiSubWindow::resizeEvent
+280 (int (*)(...))QMdiSubWindow::closeEvent
+288 (int (*)(...))QMdiSubWindow::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QMdiSubWindow::showEvent
+352 (int (*)(...))QMdiSubWindow::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMdiSubWindow::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI13QMdiSubWindow)
+448 (int (*)(...))QMdiSubWindow::_ZThn16_N13QMdiSubWindowD1Ev
+456 (int (*)(...))QMdiSubWindow::_ZThn16_N13QMdiSubWindowD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMdiSubWindow
+ size=40 align=8
+ base size=40 base align=8
+QMdiSubWindow (0x0x7f25c51c5410) 0
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 16)
+ QWidget (0x0x7f25c5145930) 0
+ primary-for QMdiSubWindow (0x0x7f25c51c5410)
+ QObject (0x0x7f25c4e4d5a0) 0
+ primary-for QWidget (0x0x7f25c5145930)
+ QPaintDevice (0x0x7f25c4e4d600) 16
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 448)
+
+Class QMenu::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenu::QPrivateSignal (0x0x7f25c4e4dc60) 0 empty
+
+Vtable for QMenu
+QMenu::_ZTV5QMenu: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QMenu)
+16 (int (*)(...))QMenu::metaObject
+24 (int (*)(...))QMenu::qt_metacast
+32 (int (*)(...))QMenu::qt_metacall
+40 (int (*)(...))QMenu::~QMenu
+48 (int (*)(...))QMenu::~QMenu
+56 (int (*)(...))QMenu::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QMenu::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMenu::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMenu::mousePressEvent
+176 (int (*)(...))QMenu::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QMenu::mouseMoveEvent
+200 (int (*)(...))QMenu::wheelEvent
+208 (int (*)(...))QMenu::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QMenu::enterEvent
+248 (int (*)(...))QMenu::leaveEvent
+256 (int (*)(...))QMenu::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QMenu::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QMenu::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMenu::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QMenu::focusNextPrevChild
+432 (int (*)(...))QMenu::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI5QMenu)
+456 (int (*)(...))QMenu::_ZThn16_N5QMenuD1Ev
+464 (int (*)(...))QMenu::_ZThn16_N5QMenuD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMenu
+ size=40 align=8
+ base size=40 base align=8
+QMenu (0x0x7f25c51c55b0) 0
+ vptr=((& QMenu::_ZTV5QMenu) + 16)
+ QWidget (0x0x7f25c5145b60) 0
+ primary-for QMenu (0x0x7f25c51c55b0)
+ QObject (0x0x7f25c4e4dba0) 0
+ primary-for QWidget (0x0x7f25c5145b60)
+ QPaintDevice (0x0x7f25c4e4dc00) 16
+ vptr=((& QMenu::_ZTV5QMenu) + 456)
+
+Class QMenuBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenuBar::QPrivateSignal (0x0x7f25c4f23060) 0 empty
+
+Vtable for QMenuBar
+QMenuBar::_ZTV8QMenuBar: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QMenuBar)
+16 (int (*)(...))QMenuBar::metaObject
+24 (int (*)(...))QMenuBar::qt_metacast
+32 (int (*)(...))QMenuBar::qt_metacall
+40 (int (*)(...))QMenuBar::~QMenuBar
+48 (int (*)(...))QMenuBar::~QMenuBar
+56 (int (*)(...))QMenuBar::event
+64 (int (*)(...))QMenuBar::eventFilter
+72 (int (*)(...))QMenuBar::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QMenuBar::setVisible
+128 (int (*)(...))QMenuBar::sizeHint
+136 (int (*)(...))QMenuBar::minimumSizeHint
+144 (int (*)(...))QMenuBar::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMenuBar::mousePressEvent
+176 (int (*)(...))QMenuBar::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QMenuBar::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMenuBar::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QMenuBar::focusInEvent
+232 (int (*)(...))QMenuBar::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QMenuBar::leaveEvent
+256 (int (*)(...))QMenuBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMenuBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QMenuBar::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMenuBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QMenuBar::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI8QMenuBar)
+456 (int (*)(...))QMenuBar::_ZThn16_N8QMenuBarD1Ev
+464 (int (*)(...))QMenuBar::_ZThn16_N8QMenuBarD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMenuBar
+ size=40 align=8
+ base size=40 base align=8
+QMenuBar (0x0x7f25c51c5618) 0
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 16)
+ QWidget (0x0x7f25c5145bd0) 0
+ primary-for QMenuBar (0x0x7f25c51c5618)
+ QObject (0x0x7f25c4e4df60) 0
+ primary-for QWidget (0x0x7f25c5145bd0)
+ QPaintDevice (0x0x7f25c4f23000) 16
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 456)
+
+Class QMessageBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMessageBox::QPrivateSignal (0x0x7f25c4f23360) 0 empty
+
+Vtable for QMessageBox
+QMessageBox::_ZTV11QMessageBox: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMessageBox)
+16 (int (*)(...))QMessageBox::metaObject
+24 (int (*)(...))QMessageBox::qt_metacast
+32 (int (*)(...))QMessageBox::qt_metacall
+40 (int (*)(...))QMessageBox::~QMessageBox
+48 (int (*)(...))QMessageBox::~QMessageBox
+56 (int (*)(...))QMessageBox::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMessageBox::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMessageBox::resizeEvent
+280 (int (*)(...))QMessageBox::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QMessageBox::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMessageBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QMessageBox)
+488 (int (*)(...))QMessageBox::_ZThn16_N11QMessageBoxD1Ev
+496 (int (*)(...))QMessageBox::_ZThn16_N11QMessageBoxD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMessageBox
+ size=40 align=8
+ base size=40 base align=8
+QMessageBox (0x0x7f25c51c5680) 0
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 16)
+ QDialog (0x0x7f25c51c56e8) 0
+ primary-for QMessageBox (0x0x7f25c51c5680)
+ QWidget (0x0x7f25c5145c40) 0
+ primary-for QDialog (0x0x7f25c51c56e8)
+ QObject (0x0x7f25c4f232a0) 0
+ primary-for QWidget (0x0x7f25c5145c40)
+ QPaintDevice (0x0x7f25c4f23300) 16
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 488)
+
+Class QTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextEdit::QPrivateSignal (0x0x7f25c4f23c60) 0 empty
+
+Class QTextEdit::ExtraSelection
+ size=24 align=8
+ base size=24 base align=8
+QTextEdit::ExtraSelection (0x0x7f25c4f23cc0) 0
+
+Vtable for QTextEdit
+QTextEdit::_ZTV9QTextEdit: 74 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTextEdit)
+16 (int (*)(...))QTextEdit::metaObject
+24 (int (*)(...))QTextEdit::qt_metacast
+32 (int (*)(...))QTextEdit::qt_metacall
+40 (int (*)(...))QTextEdit::~QTextEdit
+48 (int (*)(...))QTextEdit::~QTextEdit
+56 (int (*)(...))QTextEdit::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTextEdit::mousePressEvent
+176 (int (*)(...))QTextEdit::mouseReleaseEvent
+184 (int (*)(...))QTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QTextEdit::mouseMoveEvent
+200 (int (*)(...))QTextEdit::wheelEvent
+208 (int (*)(...))QTextEdit::keyPressEvent
+216 (int (*)(...))QTextEdit::keyReleaseEvent
+224 (int (*)(...))QTextEdit::focusInEvent
+232 (int (*)(...))QTextEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTextEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QTextEdit::dragEnterEvent
+320 (int (*)(...))QTextEdit::dragMoveEvent
+328 (int (*)(...))QTextEdit::dragLeaveEvent
+336 (int (*)(...))QTextEdit::dropEvent
+344 (int (*)(...))QTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QTextEdit::inputMethodEvent
+416 (int (*)(...))QTextEdit::inputMethodQuery
+424 (int (*)(...))QTextEdit::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QTextEdit::loadResource
+480 (int (*)(...))QTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QTextEdit::canInsertFromMimeData
+496 (int (*)(...))QTextEdit::insertFromMimeData
+504 (int (*)(...))QTextEdit::doSetTextCursor
+512 (int (*)(...))-16
+520 (int (*)(...))(& _ZTI9QTextEdit)
+528 (int (*)(...))QTextEdit::_ZThn16_N9QTextEditD1Ev
+536 (int (*)(...))QTextEdit::_ZThn16_N9QTextEditD0Ev
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTextEdit
+ size=40 align=8
+ base size=40 base align=8
+QTextEdit (0x0x7f25c51c5888) 0
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 16)
+ QAbstractScrollArea (0x0x7f25c51c58f0) 0
+ primary-for QTextEdit (0x0x7f25c51c5888)
+ QFrame (0x0x7f25c51c5958) 0
+ primary-for QAbstractScrollArea (0x0x7f25c51c58f0)
+ QWidget (0x0x7f25c4fc3000) 0
+ primary-for QFrame (0x0x7f25c51c5958)
+ QObject (0x0x7f25c4f23ba0) 0
+ primary-for QWidget (0x0x7f25c4fc3000)
+ QPaintDevice (0x0x7f25c4f23c00) 16
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 528)
+
+Class QPlainTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextEdit::QPrivateSignal (0x0x7f25c4ffb600) 0 empty
+
+Vtable for QPlainTextEdit
+QPlainTextEdit::_ZTV14QPlainTextEdit: 74 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QPlainTextEdit)
+16 (int (*)(...))QPlainTextEdit::metaObject
+24 (int (*)(...))QPlainTextEdit::qt_metacast
+32 (int (*)(...))QPlainTextEdit::qt_metacall
+40 (int (*)(...))QPlainTextEdit::~QPlainTextEdit
+48 (int (*)(...))QPlainTextEdit::~QPlainTextEdit
+56 (int (*)(...))QPlainTextEdit::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QPlainTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QPlainTextEdit::mousePressEvent
+176 (int (*)(...))QPlainTextEdit::mouseReleaseEvent
+184 (int (*)(...))QPlainTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QPlainTextEdit::mouseMoveEvent
+200 (int (*)(...))QPlainTextEdit::wheelEvent
+208 (int (*)(...))QPlainTextEdit::keyPressEvent
+216 (int (*)(...))QPlainTextEdit::keyReleaseEvent
+224 (int (*)(...))QPlainTextEdit::focusInEvent
+232 (int (*)(...))QPlainTextEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QPlainTextEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QPlainTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QPlainTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QPlainTextEdit::dragEnterEvent
+320 (int (*)(...))QPlainTextEdit::dragMoveEvent
+328 (int (*)(...))QPlainTextEdit::dragLeaveEvent
+336 (int (*)(...))QPlainTextEdit::dropEvent
+344 (int (*)(...))QPlainTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QPlainTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QPlainTextEdit::inputMethodEvent
+416 (int (*)(...))QPlainTextEdit::inputMethodQuery
+424 (int (*)(...))QPlainTextEdit::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QPlainTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QPlainTextEdit::loadResource
+480 (int (*)(...))QPlainTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QPlainTextEdit::canInsertFromMimeData
+496 (int (*)(...))QPlainTextEdit::insertFromMimeData
+504 (int (*)(...))QPlainTextEdit::doSetTextCursor
+512 (int (*)(...))-16
+520 (int (*)(...))(& _ZTI14QPlainTextEdit)
+528 (int (*)(...))QPlainTextEdit::_ZThn16_N14QPlainTextEditD1Ev
+536 (int (*)(...))QPlainTextEdit::_ZThn16_N14QPlainTextEditD0Ev
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QPlainTextEdit
+ size=40 align=8
+ base size=40 base align=8
+QPlainTextEdit (0x0x7f25c51c5af8) 0
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 16)
+ QAbstractScrollArea (0x0x7f25c51c5b60) 0
+ primary-for QPlainTextEdit (0x0x7f25c51c5af8)
+ QFrame (0x0x7f25c51c5bc8) 0
+ primary-for QAbstractScrollArea (0x0x7f25c51c5b60)
+ QWidget (0x0x7f25c4fc3380) 0
+ primary-for QFrame (0x0x7f25c51c5bc8)
+ QObject (0x0x7f25c4ffb540) 0
+ primary-for QWidget (0x0x7f25c4fc3380)
+ QPaintDevice (0x0x7f25c4ffb5a0) 16
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 528)
+
+Class QPlainTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextDocumentLayout::QPrivateSignal (0x0x7f25c4ffbb40) 0 empty
+
+Vtable for QPlainTextDocumentLayout
+QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QPlainTextDocumentLayout)
+16 (int (*)(...))QPlainTextDocumentLayout::metaObject
+24 (int (*)(...))QPlainTextDocumentLayout::qt_metacast
+32 (int (*)(...))QPlainTextDocumentLayout::qt_metacall
+40 (int (*)(...))QPlainTextDocumentLayout::~QPlainTextDocumentLayout
+48 (int (*)(...))QPlainTextDocumentLayout::~QPlainTextDocumentLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPlainTextDocumentLayout::draw
+120 (int (*)(...))QPlainTextDocumentLayout::hitTest
+128 (int (*)(...))QPlainTextDocumentLayout::pageCount
+136 (int (*)(...))QPlainTextDocumentLayout::documentSize
+144 (int (*)(...))QPlainTextDocumentLayout::frameBoundingRect
+152 (int (*)(...))QPlainTextDocumentLayout::blockBoundingRect
+160 (int (*)(...))QPlainTextDocumentLayout::documentChanged
+168 (int (*)(...))QAbstractTextDocumentLayout::resizeInlineObject
+176 (int (*)(...))QAbstractTextDocumentLayout::positionInlineObject
+184 (int (*)(...))QAbstractTextDocumentLayout::drawInlineObject
+
+Class QPlainTextDocumentLayout
+ size=16 align=8
+ base size=16 base align=8
+QPlainTextDocumentLayout (0x0x7f25c51c5c30) 0
+ vptr=((& QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout) + 16)
+ QAbstractTextDocumentLayout (0x0x7f25c51c5c98) 0
+ primary-for QPlainTextDocumentLayout (0x0x7f25c51c5c30)
+ QObject (0x0x7f25c4ffbae0) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f25c51c5c98)
+
+Class QProgressBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressBar::QPrivateSignal (0x0x7f25c4ffbd80) 0 empty
+
+Vtable for QProgressBar
+QProgressBar::_ZTV12QProgressBar: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QProgressBar)
+16 (int (*)(...))QProgressBar::metaObject
+24 (int (*)(...))QProgressBar::qt_metacast
+32 (int (*)(...))QProgressBar::qt_metacall
+40 (int (*)(...))QProgressBar::~QProgressBar
+48 (int (*)(...))QProgressBar::~QProgressBar
+56 (int (*)(...))QProgressBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QProgressBar::sizeHint
+136 (int (*)(...))QProgressBar::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QProgressBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QProgressBar::text
+440 (int (*)(...))QProgressBar::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI12QProgressBar)
+464 (int (*)(...))QProgressBar::_ZThn16_N12QProgressBarD1Ev
+472 (int (*)(...))QProgressBar::_ZThn16_N12QProgressBarD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QProgressBar
+ size=40 align=8
+ base size=40 base align=8
+QProgressBar (0x0x7f25c51c5d00) 0
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 16)
+ QWidget (0x0x7f25c4fc34d0) 0
+ primary-for QProgressBar (0x0x7f25c51c5d00)
+ QObject (0x0x7f25c4ffbcc0) 0
+ primary-for QWidget (0x0x7f25c4fc34d0)
+ QPaintDevice (0x0x7f25c4ffbd20) 16
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 464)
+
+Class QProgressDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressDialog::QPrivateSignal (0x0x7f25c4c9a0c0) 0 empty
+
+Vtable for QProgressDialog
+QProgressDialog::_ZTV15QProgressDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QProgressDialog)
+16 (int (*)(...))QProgressDialog::metaObject
+24 (int (*)(...))QProgressDialog::qt_metacast
+32 (int (*)(...))QProgressDialog::qt_metacall
+40 (int (*)(...))QProgressDialog::~QProgressDialog
+48 (int (*)(...))QProgressDialog::~QProgressDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QProgressDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QProgressDialog::resizeEvent
+280 (int (*)(...))QProgressDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QProgressDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QProgressDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI15QProgressDialog)
+488 (int (*)(...))QProgressDialog::_ZThn16_N15QProgressDialogD1Ev
+496 (int (*)(...))QProgressDialog::_ZThn16_N15QProgressDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QProgressDialog
+ size=40 align=8
+ base size=40 base align=8
+QProgressDialog (0x0x7f25c51c5d68) 0
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 16)
+ QDialog (0x0x7f25c51c5dd0) 0
+ primary-for QProgressDialog (0x0x7f25c51c5d68)
+ QWidget (0x0x7f25c4fc3620) 0
+ primary-for QDialog (0x0x7f25c51c5dd0)
+ QObject (0x0x7f25c4c9a000) 0
+ primary-for QWidget (0x0x7f25c4fc3620)
+ QPaintDevice (0x0x7f25c4c9a060) 16
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 488)
+
+Class QProxyStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProxyStyle::QPrivateSignal (0x0x7f25c4c9a2a0) 0 empty
+
+Vtable for QProxyStyle
+QProxyStyle::_ZTV11QProxyStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QProxyStyle)
+16 (int (*)(...))QProxyStyle::metaObject
+24 (int (*)(...))QProxyStyle::qt_metacast
+32 (int (*)(...))QProxyStyle::qt_metacall
+40 (int (*)(...))QProxyStyle::~QProxyStyle
+48 (int (*)(...))QProxyStyle::~QProxyStyle
+56 (int (*)(...))QProxyStyle::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QProxyStyle::polish
+120 (int (*)(...))QProxyStyle::unpolish
+128 (int (*)(...))QProxyStyle::polish
+136 (int (*)(...))QProxyStyle::unpolish
+144 (int (*)(...))QProxyStyle::polish
+152 (int (*)(...))QProxyStyle::itemTextRect
+160 (int (*)(...))QProxyStyle::itemPixmapRect
+168 (int (*)(...))QProxyStyle::drawItemText
+176 (int (*)(...))QProxyStyle::drawItemPixmap
+184 (int (*)(...))QProxyStyle::standardPalette
+192 (int (*)(...))QProxyStyle::drawPrimitive
+200 (int (*)(...))QProxyStyle::drawControl
+208 (int (*)(...))QProxyStyle::subElementRect
+216 (int (*)(...))QProxyStyle::drawComplexControl
+224 (int (*)(...))QProxyStyle::hitTestComplexControl
+232 (int (*)(...))QProxyStyle::subControlRect
+240 (int (*)(...))QProxyStyle::pixelMetric
+248 (int (*)(...))QProxyStyle::sizeFromContents
+256 (int (*)(...))QProxyStyle::styleHint
+264 (int (*)(...))QProxyStyle::standardPixmap
+272 (int (*)(...))QProxyStyle::standardIcon
+280 (int (*)(...))QProxyStyle::generatedIconPixmap
+288 (int (*)(...))QProxyStyle::layoutSpacing
+
+Class QProxyStyle
+ size=16 align=8
+ base size=16 base align=8
+QProxyStyle (0x0x7f25c51c5e38) 0
+ vptr=((& QProxyStyle::_ZTV11QProxyStyle) + 16)
+ QCommonStyle (0x0x7f25c51c5ea0) 0
+ primary-for QProxyStyle (0x0x7f25c51c5e38)
+ QStyle (0x0x7f25c51c5f08) 0
+ primary-for QCommonStyle (0x0x7f25c51c5ea0)
+ QObject (0x0x7f25c4c9a240) 0
+ primary-for QStyle (0x0x7f25c51c5f08)
+
+Class QRadioButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRadioButton::QPrivateSignal (0x0x7f25c4c9a4e0) 0 empty
+
+Vtable for QRadioButton
+QRadioButton::_ZTV12QRadioButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QRadioButton)
+16 (int (*)(...))QRadioButton::metaObject
+24 (int (*)(...))QRadioButton::qt_metacast
+32 (int (*)(...))QRadioButton::qt_metacall
+40 (int (*)(...))QRadioButton::~QRadioButton
+48 (int (*)(...))QRadioButton::~QRadioButton
+56 (int (*)(...))QRadioButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QRadioButton::sizeHint
+136 (int (*)(...))QRadioButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QRadioButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QRadioButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QRadioButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QRadioButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI12QRadioButton)
+480 (int (*)(...))QRadioButton::_ZThn16_N12QRadioButtonD1Ev
+488 (int (*)(...))QRadioButton::_ZThn16_N12QRadioButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QRadioButton
+ size=40 align=8
+ base size=40 base align=8
+QRadioButton (0x0x7f25c51c5f70) 0
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 16)
+ QAbstractButton (0x0x7f25c4cc7000) 0
+ primary-for QRadioButton (0x0x7f25c51c5f70)
+ QWidget (0x0x7f25c4fc3690) 0
+ primary-for QAbstractButton (0x0x7f25c4cc7000)
+ QObject (0x0x7f25c4c9a420) 0
+ primary-for QWidget (0x0x7f25c4fc3690)
+ QPaintDevice (0x0x7f25c4c9a480) 16
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 480)
+
+Class QScrollBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollBar::QPrivateSignal (0x0x7f25c4c9a720) 0 empty
+
+Vtable for QScrollBar
+QScrollBar::_ZTV10QScrollBar: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QScrollBar)
+16 (int (*)(...))QScrollBar::metaObject
+24 (int (*)(...))QScrollBar::qt_metacast
+32 (int (*)(...))QScrollBar::qt_metacall
+40 (int (*)(...))QScrollBar::~QScrollBar
+48 (int (*)(...))QScrollBar::~QScrollBar
+56 (int (*)(...))QScrollBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QScrollBar::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QScrollBar::mousePressEvent
+176 (int (*)(...))QScrollBar::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QScrollBar::mouseMoveEvent
+200 (int (*)(...))QScrollBar::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QScrollBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QScrollBar::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QScrollBar::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QScrollBar::sliderChange
+440 (int (*)(...))QScrollBar::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI10QScrollBar)
+464 (int (*)(...))QScrollBar::_ZThn16_N10QScrollBarD1Ev
+472 (int (*)(...))QScrollBar::_ZThn16_N10QScrollBarD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QScrollBar
+ size=40 align=8
+ base size=40 base align=8
+QScrollBar (0x0x7f25c4cc7068) 0
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 16)
+ QAbstractSlider (0x0x7f25c4cc70d0) 0
+ primary-for QScrollBar (0x0x7f25c4cc7068)
+ QWidget (0x0x7f25c4fc3700) 0
+ primary-for QAbstractSlider (0x0x7f25c4cc70d0)
+ QObject (0x0x7f25c4c9a660) 0
+ primary-for QWidget (0x0x7f25c4fc3700)
+ QPaintDevice (0x0x7f25c4c9a6c0) 16
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 464)
+
+Vtable for QScrollerProperties
+QScrollerProperties::_ZTV19QScrollerProperties: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollerProperties)
+16 (int (*)(...))QScrollerProperties::~QScrollerProperties
+24 (int (*)(...))QScrollerProperties::~QScrollerProperties
+
+Class QScrollerProperties
+ size=16 align=8
+ base size=16 base align=8
+QScrollerProperties (0x0x7f25c4c9a8a0) 0
+ vptr=((& QScrollerProperties::_ZTV19QScrollerProperties) + 16)
+
+Class QScroller::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScroller::QPrivateSignal (0x0x7f25c4d8ac60) 0 empty
+
+Vtable for QScroller
+QScroller::_ZTV9QScroller: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QScroller)
+16 (int (*)(...))QScroller::metaObject
+24 (int (*)(...))QScroller::qt_metacast
+32 (int (*)(...))QScroller::qt_metacall
+40 (int (*)(...))QScroller::~QScroller
+48 (int (*)(...))QScroller::~QScroller
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QScroller
+ size=24 align=8
+ base size=24 base align=8
+QScroller (0x0x7f25c4daf000) 0
+ vptr=((& QScroller::_ZTV9QScroller) + 16)
+ QObject (0x0x7f25c4d8ac00) 0
+ primary-for QScroller (0x0x7f25c4daf000)
+
+Class QSizeGrip::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSizeGrip::QPrivateSignal (0x0x7f25c4d8af60) 0 empty
+
+Vtable for QSizeGrip
+QSizeGrip::_ZTV9QSizeGrip: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSizeGrip)
+16 (int (*)(...))QSizeGrip::metaObject
+24 (int (*)(...))QSizeGrip::qt_metacast
+32 (int (*)(...))QSizeGrip::qt_metacall
+40 (int (*)(...))QSizeGrip::~QSizeGrip
+48 (int (*)(...))QSizeGrip::~QSizeGrip
+56 (int (*)(...))QSizeGrip::event
+64 (int (*)(...))QSizeGrip::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QSizeGrip::setVisible
+128 (int (*)(...))QSizeGrip::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSizeGrip::mousePressEvent
+176 (int (*)(...))QSizeGrip::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSizeGrip::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSizeGrip::paintEvent
+264 (int (*)(...))QSizeGrip::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QSizeGrip::showEvent
+352 (int (*)(...))QSizeGrip::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI9QSizeGrip)
+448 (int (*)(...))QSizeGrip::_ZThn16_N9QSizeGripD1Ev
+456 (int (*)(...))QSizeGrip::_ZThn16_N9QSizeGripD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSizeGrip
+ size=40 align=8
+ base size=40 base align=8
+QSizeGrip (0x0x7f25c4daf068) 0
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 16)
+ QWidget (0x0x7f25c4db5150) 0
+ primary-for QSizeGrip (0x0x7f25c4daf068)
+ QObject (0x0x7f25c4d8aea0) 0
+ primary-for QWidget (0x0x7f25c4db5150)
+ QPaintDevice (0x0x7f25c4d8af00) 16
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 448)
+
+Class QSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSpinBox::QPrivateSignal (0x0x7f25c4dd71e0) 0 empty
+
+Vtable for QSpinBox
+QSpinBox::_ZTV8QSpinBox: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSpinBox)
+16 (int (*)(...))QSpinBox::metaObject
+24 (int (*)(...))QSpinBox::qt_metacast
+32 (int (*)(...))QSpinBox::qt_metacall
+40 (int (*)(...))QSpinBox::~QSpinBox
+48 (int (*)(...))QSpinBox::~QSpinBox
+56 (int (*)(...))QSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QSpinBox::validate
+440 (int (*)(...))QSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))QSpinBox::valueFromText
+488 (int (*)(...))QSpinBox::textFromValue
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI8QSpinBox)
+512 (int (*)(...))QSpinBox::_ZThn16_N8QSpinBoxD1Ev
+520 (int (*)(...))QSpinBox::_ZThn16_N8QSpinBoxD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QSpinBox (0x0x7f25c4daf0d0) 0
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 16)
+ QAbstractSpinBox (0x0x7f25c4daf138) 0
+ primary-for QSpinBox (0x0x7f25c4daf0d0)
+ QWidget (0x0x7f25c4db51c0) 0
+ primary-for QAbstractSpinBox (0x0x7f25c4daf138)
+ QObject (0x0x7f25c4dd7120) 0
+ primary-for QWidget (0x0x7f25c4db51c0)
+ QPaintDevice (0x0x7f25c4dd7180) 16
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 512)
+
+Class QDoubleSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleSpinBox::QPrivateSignal (0x0x7f25c4dd7420) 0 empty
+
+Vtable for QDoubleSpinBox
+QDoubleSpinBox::_ZTV14QDoubleSpinBox: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDoubleSpinBox)
+16 (int (*)(...))QDoubleSpinBox::metaObject
+24 (int (*)(...))QDoubleSpinBox::qt_metacast
+32 (int (*)(...))QDoubleSpinBox::qt_metacall
+40 (int (*)(...))QDoubleSpinBox::~QDoubleSpinBox
+48 (int (*)(...))QDoubleSpinBox::~QDoubleSpinBox
+56 (int (*)(...))QAbstractSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDoubleSpinBox::validate
+440 (int (*)(...))QDoubleSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))QDoubleSpinBox::valueFromText
+488 (int (*)(...))QDoubleSpinBox::textFromValue
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI14QDoubleSpinBox)
+512 (int (*)(...))QDoubleSpinBox::_ZThn16_N14QDoubleSpinBoxD1Ev
+520 (int (*)(...))QDoubleSpinBox::_ZThn16_N14QDoubleSpinBoxD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDoubleSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QDoubleSpinBox (0x0x7f25c4daf1a0) 0
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 16)
+ QAbstractSpinBox (0x0x7f25c4daf208) 0
+ primary-for QDoubleSpinBox (0x0x7f25c4daf1a0)
+ QWidget (0x0x7f25c4db5230) 0
+ primary-for QAbstractSpinBox (0x0x7f25c4daf208)
+ QObject (0x0x7f25c4dd7360) 0
+ primary-for QWidget (0x0x7f25c4db5230)
+ QPaintDevice (0x0x7f25c4dd73c0) 16
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 512)
+
+Class QSplashScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplashScreen::QPrivateSignal (0x0x7f25c4dd7660) 0 empty
+
+Vtable for QSplashScreen
+QSplashScreen::_ZTV13QSplashScreen: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSplashScreen)
+16 (int (*)(...))QSplashScreen::metaObject
+24 (int (*)(...))QSplashScreen::qt_metacast
+32 (int (*)(...))QSplashScreen::qt_metacall
+40 (int (*)(...))QSplashScreen::~QSplashScreen
+48 (int (*)(...))QSplashScreen::~QSplashScreen
+56 (int (*)(...))QSplashScreen::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSplashScreen::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QSplashScreen::drawContents
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI13QSplashScreen)
+456 (int (*)(...))QSplashScreen::_ZThn16_N13QSplashScreenD1Ev
+464 (int (*)(...))QSplashScreen::_ZThn16_N13QSplashScreenD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplashScreen
+ size=40 align=8
+ base size=40 base align=8
+QSplashScreen (0x0x7f25c4daf270) 0
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 16)
+ QWidget (0x0x7f25c4db52a0) 0
+ primary-for QSplashScreen (0x0x7f25c4daf270)
+ QObject (0x0x7f25c4dd75a0) 0
+ primary-for QWidget (0x0x7f25c4db52a0)
+ QPaintDevice (0x0x7f25c4dd7600) 16
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 456)
+
+Class QSplitter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitter::QPrivateSignal (0x0x7f25c4dd78a0) 0 empty
+
+Vtable for QSplitter
+QSplitter::_ZTV9QSplitter: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSplitter)
+16 (int (*)(...))QSplitter::metaObject
+24 (int (*)(...))QSplitter::qt_metacast
+32 (int (*)(...))QSplitter::qt_metacall
+40 (int (*)(...))QSplitter::~QSplitter
+48 (int (*)(...))QSplitter::~QSplitter
+56 (int (*)(...))QSplitter::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QSplitter::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSplitter::sizeHint
+136 (int (*)(...))QSplitter::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QSplitter::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QSplitter::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QSplitter::createHandle
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI9QSplitter)
+464 (int (*)(...))QSplitter::_ZThn16_N9QSplitterD1Ev
+472 (int (*)(...))QSplitter::_ZThn16_N9QSplitterD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplitter
+ size=40 align=8
+ base size=40 base align=8
+QSplitter (0x0x7f25c4daf2d8) 0
+ vptr=((& QSplitter::_ZTV9QSplitter) + 16)
+ QFrame (0x0x7f25c4daf340) 0
+ primary-for QSplitter (0x0x7f25c4daf2d8)
+ QWidget (0x0x7f25c4db5310) 0
+ primary-for QFrame (0x0x7f25c4daf340)
+ QObject (0x0x7f25c4dd77e0) 0
+ primary-for QWidget (0x0x7f25c4db5310)
+ QPaintDevice (0x0x7f25c4dd7840) 16
+ vptr=((& QSplitter::_ZTV9QSplitter) + 464)
+
+Class QSplitterHandle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitterHandle::QPrivateSignal (0x0x7f25c4dd7ae0) 0 empty
+
+Vtable for QSplitterHandle
+QSplitterHandle::_ZTV15QSplitterHandle: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSplitterHandle)
+16 (int (*)(...))QSplitterHandle::metaObject
+24 (int (*)(...))QSplitterHandle::qt_metacast
+32 (int (*)(...))QSplitterHandle::qt_metacall
+40 (int (*)(...))QSplitterHandle::~QSplitterHandle
+48 (int (*)(...))QSplitterHandle::~QSplitterHandle
+56 (int (*)(...))QSplitterHandle::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSplitterHandle::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSplitterHandle::mousePressEvent
+176 (int (*)(...))QSplitterHandle::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSplitterHandle::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSplitterHandle::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QSplitterHandle::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI15QSplitterHandle)
+448 (int (*)(...))QSplitterHandle::_ZThn16_N15QSplitterHandleD1Ev
+456 (int (*)(...))QSplitterHandle::_ZThn16_N15QSplitterHandleD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplitterHandle
+ size=40 align=8
+ base size=40 base align=8
+QSplitterHandle (0x0x7f25c4daf3a8) 0
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 16)
+ QWidget (0x0x7f25c4db5380) 0
+ primary-for QSplitterHandle (0x0x7f25c4daf3a8)
+ QObject (0x0x7f25c4dd7a20) 0
+ primary-for QWidget (0x0x7f25c4db5380)
+ QPaintDevice (0x0x7f25c4dd7a80) 16
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 448)
+
+Class QStackedLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedLayout::QPrivateSignal (0x0x7f25c4dd7d20) 0 empty
+
+Vtable for QStackedLayout
+QStackedLayout::_ZTV14QStackedLayout: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QStackedLayout)
+16 (int (*)(...))QStackedLayout::metaObject
+24 (int (*)(...))QStackedLayout::qt_metacast
+32 (int (*)(...))QStackedLayout::qt_metacall
+40 (int (*)(...))QStackedLayout::~QStackedLayout
+48 (int (*)(...))QStackedLayout::~QStackedLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLayout::spacing
+120 (int (*)(...))QLayout::setSpacing
+128 (int (*)(...))QLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QStackedLayout::addItem
+152 (int (*)(...))QLayout::expandingDirections
+160 (int (*)(...))QStackedLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QStackedLayout::setGeometry
+184 (int (*)(...))QStackedLayout::itemAt
+192 (int (*)(...))QStackedLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QStackedLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QStackedLayout::sizeHint
+264 (int (*)(...))QStackedLayout::hasHeightForWidth
+272 (int (*)(...))QStackedLayout::heightForWidth
+280 (int (*)(...))-16
+288 (int (*)(...))(& _ZTI14QStackedLayout)
+296 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayoutD1Ev
+304 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayoutD0Ev
+312 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout8sizeHintEv
+320 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout11minimumSizeEv
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+336 (int (*)(...))QLayout::_ZThn16_NK7QLayout19expandingDirectionsEv
+344 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayout11setGeometryERK5QRect
+352 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+368 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout17hasHeightForWidthEv
+376 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout14heightForWidthEi
+384 (int (*)(...))QLayoutItem::minimumHeightForWidth
+392 (int (*)(...))QLayout::_ZThn16_N7QLayout10invalidateEv
+400 (int (*)(...))QLayoutItem::widget
+408 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+416 (int (*)(...))QLayoutItem::spacerItem
+424 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QStackedLayout
+ size=32 align=8
+ base size=28 base align=8
+QStackedLayout (0x0x7f25c4daf410) 0
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 16)
+ QLayout (0x0x7f25c4db53f0) 0
+ primary-for QStackedLayout (0x0x7f25c4daf410)
+ QObject (0x0x7f25c4dd7c60) 0
+ primary-for QLayout (0x0x7f25c4db53f0)
+ QLayoutItem (0x0x7f25c4dd7cc0) 16
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 296)
+
+Class QStackedWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedWidget::QPrivateSignal (0x0x7f25c4a4f060) 0 empty
+
+Vtable for QStackedWidget
+QStackedWidget::_ZTV14QStackedWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QStackedWidget)
+16 (int (*)(...))QStackedWidget::metaObject
+24 (int (*)(...))QStackedWidget::qt_metacast
+32 (int (*)(...))QStackedWidget::qt_metacall
+40 (int (*)(...))QStackedWidget::~QStackedWidget
+48 (int (*)(...))QStackedWidget::~QStackedWidget
+56 (int (*)(...))QStackedWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI14QStackedWidget)
+456 (int (*)(...))QStackedWidget::_ZThn16_N14QStackedWidgetD1Ev
+464 (int (*)(...))QStackedWidget::_ZThn16_N14QStackedWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QStackedWidget
+ size=40 align=8
+ base size=40 base align=8
+QStackedWidget (0x0x7f25c4daf478) 0
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 16)
+ QFrame (0x0x7f25c4daf4e0) 0
+ primary-for QStackedWidget (0x0x7f25c4daf478)
+ QWidget (0x0x7f25c4db5540) 0
+ primary-for QFrame (0x0x7f25c4daf4e0)
+ QObject (0x0x7f25c4dd7f60) 0
+ primary-for QWidget (0x0x7f25c4db5540)
+ QPaintDevice (0x0x7f25c4a4f000) 16
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 456)
+
+Class QStatusBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStatusBar::QPrivateSignal (0x0x7f25c4a4f2a0) 0 empty
+
+Vtable for QStatusBar
+QStatusBar::_ZTV10QStatusBar: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QStatusBar)
+16 (int (*)(...))QStatusBar::metaObject
+24 (int (*)(...))QStatusBar::qt_metacast
+32 (int (*)(...))QStatusBar::qt_metacall
+40 (int (*)(...))QStatusBar::~QStatusBar
+48 (int (*)(...))QStatusBar::~QStatusBar
+56 (int (*)(...))QStatusBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QStatusBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QStatusBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QStatusBar::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI10QStatusBar)
+448 (int (*)(...))QStatusBar::_ZThn16_N10QStatusBarD1Ev
+456 (int (*)(...))QStatusBar::_ZThn16_N10QStatusBarD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QStatusBar
+ size=40 align=8
+ base size=40 base align=8
+QStatusBar (0x0x7f25c4daf548) 0
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 16)
+ QWidget (0x0x7f25c4db55b0) 0
+ primary-for QStatusBar (0x0x7f25c4daf548)
+ QObject (0x0x7f25c4a4f1e0) 0
+ primary-for QWidget (0x0x7f25c4db55b0)
+ QPaintDevice (0x0x7f25c4a4f240) 16
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 448)
+
+Class QStyledItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyledItemDelegate::QPrivateSignal (0x0x7f25c4a4f480) 0 empty
+
+Vtable for QStyledItemDelegate
+QStyledItemDelegate::_ZTV19QStyledItemDelegate: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QStyledItemDelegate)
+16 (int (*)(...))QStyledItemDelegate::metaObject
+24 (int (*)(...))QStyledItemDelegate::qt_metacast
+32 (int (*)(...))QStyledItemDelegate::qt_metacall
+40 (int (*)(...))QStyledItemDelegate::~QStyledItemDelegate
+48 (int (*)(...))QStyledItemDelegate::~QStyledItemDelegate
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QStyledItemDelegate::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStyledItemDelegate::paint
+120 (int (*)(...))QStyledItemDelegate::sizeHint
+128 (int (*)(...))QStyledItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QStyledItemDelegate::setEditorData
+152 (int (*)(...))QStyledItemDelegate::setModelData
+160 (int (*)(...))QStyledItemDelegate::updateEditorGeometry
+168 (int (*)(...))QStyledItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+192 (int (*)(...))QStyledItemDelegate::displayText
+200 (int (*)(...))QStyledItemDelegate::initStyleOption
+
+Class QStyledItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QStyledItemDelegate (0x0x7f25c4daf5b0) 0
+ vptr=((& QStyledItemDelegate::_ZTV19QStyledItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7f25c4daf618) 0
+ primary-for QStyledItemDelegate (0x0x7f25c4daf5b0)
+ QObject (0x0x7f25c4a4f420) 0
+ primary-for QAbstractItemDelegate (0x0x7f25c4daf618)
+
+Class QStyleFactory
+ size=1 align=1
+ base size=0 base align=1
+QStyleFactory (0x0x7f25c4a4f600) 0 empty
+
+Class QStylePainter
+ size=24 align=8
+ base size=24 base align=8
+QStylePainter (0x0x7f25c4daf680) 0
+ QPainter (0x0x7f25c4a4f660) 0
+
+Class QStylePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStylePlugin::QPrivateSignal (0x0x7f25c4a4fea0) 0 empty
+
+Vtable for QStylePlugin
+QStylePlugin::_ZTV12QStylePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QStylePlugin)
+16 (int (*)(...))QStylePlugin::metaObject
+24 (int (*)(...))QStylePlugin::qt_metacast
+32 (int (*)(...))QStylePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QStylePlugin
+ size=16 align=8
+ base size=16 base align=8
+QStylePlugin (0x0x7f25c4daf6e8) 0
+ vptr=((& QStylePlugin::_ZTV12QStylePlugin) + 16)
+ QObject (0x0x7f25c4a4fe40) 0
+ primary-for QStylePlugin (0x0x7f25c4daf6e8)
+
+Class QSystemTrayIcon::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSystemTrayIcon::QPrivateSignal (0x0x7f25c4aa0000) 0 empty
+
+Vtable for QSystemTrayIcon
+QSystemTrayIcon::_ZTV15QSystemTrayIcon: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSystemTrayIcon)
+16 (int (*)(...))QSystemTrayIcon::metaObject
+24 (int (*)(...))QSystemTrayIcon::qt_metacast
+32 (int (*)(...))QSystemTrayIcon::qt_metacall
+40 (int (*)(...))QSystemTrayIcon::~QSystemTrayIcon
+48 (int (*)(...))QSystemTrayIcon::~QSystemTrayIcon
+56 (int (*)(...))QSystemTrayIcon::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSystemTrayIcon
+ size=16 align=8
+ base size=16 base align=8
+QSystemTrayIcon (0x0x7f25c4daf750) 0
+ vptr=((& QSystemTrayIcon::_ZTV15QSystemTrayIcon) + 16)
+ QObject (0x0x7f25c4a4ff60) 0
+ primary-for QSystemTrayIcon (0x0x7f25c4daf750)
+
+Class QTableView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableView::QPrivateSignal (0x0x7f25c4aa0300) 0 empty
+
+Vtable for QTableView
+QTableView::_ZTV10QTableView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTableView)
+16 (int (*)(...))QTableView::metaObject
+24 (int (*)(...))QTableView::qt_metacast
+32 (int (*)(...))QTableView::qt_metacall
+40 (int (*)(...))QTableView::~QTableView
+48 (int (*)(...))QTableView::~QTableView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTableView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTableView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QTableView::scrollContentsBy
+464 (int (*)(...))QTableView::viewportSizeHint
+472 (int (*)(...))QTableView::setModel
+480 (int (*)(...))QTableView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QTableView::visualRect
+504 (int (*)(...))QTableView::scrollTo
+512 (int (*)(...))QTableView::indexAt
+520 (int (*)(...))QTableView::sizeHintForRow
+528 (int (*)(...))QTableView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QTableView::setRootIndex
+560 (int (*)(...))QTableView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QTableView::selectionChanged
+608 (int (*)(...))QTableView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTableView::updateGeometries
+640 (int (*)(...))QTableView::verticalScrollbarAction
+648 (int (*)(...))QTableView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTableView::moveCursor
+704 (int (*)(...))QTableView::horizontalOffset
+712 (int (*)(...))QTableView::verticalOffset
+720 (int (*)(...))QTableView::isIndexHidden
+728 (int (*)(...))QTableView::setSelection
+736 (int (*)(...))QTableView::visualRegionForSelection
+744 (int (*)(...))QTableView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QTableView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI10QTableView)
+800 (int (*)(...))QTableView::_ZThn16_N10QTableViewD1Ev
+808 (int (*)(...))QTableView::_ZThn16_N10QTableViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTableView
+ size=40 align=8
+ base size=40 base align=8
+QTableView (0x0x7f25c4daf7b8) 0
+ vptr=((& QTableView::_ZTV10QTableView) + 16)
+ QAbstractItemView (0x0x7f25c4daf820) 0
+ primary-for QTableView (0x0x7f25c4daf7b8)
+ QAbstractScrollArea (0x0x7f25c4daf888) 0
+ primary-for QAbstractItemView (0x0x7f25c4daf820)
+ QFrame (0x0x7f25c4daf8f0) 0
+ primary-for QAbstractScrollArea (0x0x7f25c4daf888)
+ QWidget (0x0x7f25c4db5af0) 0
+ primary-for QFrame (0x0x7f25c4daf8f0)
+ QObject (0x0x7f25c4aa0240) 0
+ primary-for QWidget (0x0x7f25c4db5af0)
+ QPaintDevice (0x0x7f25c4aa02a0) 16
+ vptr=((& QTableView::_ZTV10QTableView) + 800)
+
+Class QTableWidgetSelectionRange
+ size=16 align=4
+ base size=16 base align=4
+QTableWidgetSelectionRange (0x0x7f25c4aa0480) 0
+
+Vtable for QTableWidgetItem
+QTableWidgetItem::_ZTV16QTableWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QTableWidgetItem)
+16 (int (*)(...))QTableWidgetItem::~QTableWidgetItem
+24 (int (*)(...))QTableWidgetItem::~QTableWidgetItem
+32 (int (*)(...))QTableWidgetItem::clone
+40 (int (*)(...))QTableWidgetItem::data
+48 (int (*)(...))QTableWidgetItem::setData
+56 (int (*)(...))QTableWidgetItem::operator<
+64 (int (*)(...))QTableWidgetItem::read
+72 (int (*)(...))QTableWidgetItem::write
+
+Class QTableWidgetItem
+ size=64 align=8
+ base size=60 base align=8
+QTableWidgetItem (0x0x7f25c4aa08a0) 0
+ vptr=((& QTableWidgetItem::_ZTV16QTableWidgetItem) + 16)
+
+Class QTableWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableWidget::QPrivateSignal (0x0x7f25c4b07c00) 0 empty
+
+Vtable for QTableWidget
+QTableWidget::_ZTV12QTableWidget: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTableWidget)
+16 (int (*)(...))QTableWidget::metaObject
+24 (int (*)(...))QTableWidget::qt_metacast
+32 (int (*)(...))QTableWidget::qt_metacall
+40 (int (*)(...))QTableWidget::~QTableWidget
+48 (int (*)(...))QTableWidget::~QTableWidget
+56 (int (*)(...))QTableWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTableView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTableView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QTableWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QTableView::scrollContentsBy
+464 (int (*)(...))QTableView::viewportSizeHint
+472 (int (*)(...))QTableWidget::setModel
+480 (int (*)(...))QTableView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QTableView::visualRect
+504 (int (*)(...))QTableView::scrollTo
+512 (int (*)(...))QTableView::indexAt
+520 (int (*)(...))QTableView::sizeHintForRow
+528 (int (*)(...))QTableView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QTableView::setRootIndex
+560 (int (*)(...))QTableView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QTableView::selectionChanged
+608 (int (*)(...))QTableView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTableView::updateGeometries
+640 (int (*)(...))QTableView::verticalScrollbarAction
+648 (int (*)(...))QTableView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTableView::moveCursor
+704 (int (*)(...))QTableView::horizontalOffset
+712 (int (*)(...))QTableView::verticalOffset
+720 (int (*)(...))QTableView::isIndexHidden
+728 (int (*)(...))QTableView::setSelection
+736 (int (*)(...))QTableView::visualRegionForSelection
+744 (int (*)(...))QTableView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QTableView::initViewItemOption
+784 (int (*)(...))QTableWidget::mimeTypes
+792 (int (*)(...))QTableWidget::mimeData
+800 (int (*)(...))QTableWidget::dropMimeData
+808 (int (*)(...))QTableWidget::supportedDropActions
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI12QTableWidget)
+832 (int (*)(...))QTableWidget::_ZThn16_N12QTableWidgetD1Ev
+840 (int (*)(...))QTableWidget::_ZThn16_N12QTableWidgetD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTableWidget
+ size=40 align=8
+ base size=40 base align=8
+QTableWidget (0x0x7f25c4af6208) 0
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 16)
+ QTableView (0x0x7f25c4af6270) 0
+ primary-for QTableWidget (0x0x7f25c4af6208)
+ QAbstractItemView (0x0x7f25c4af62d8) 0
+ primary-for QTableView (0x0x7f25c4af6270)
+ QAbstractScrollArea (0x0x7f25c4af6340) 0
+ primary-for QAbstractItemView (0x0x7f25c4af62d8)
+ QFrame (0x0x7f25c4af63a8) 0
+ primary-for QAbstractScrollArea (0x0x7f25c4af6340)
+ QWidget (0x0x7f25c4db5d20) 0
+ primary-for QFrame (0x0x7f25c4af63a8)
+ QObject (0x0x7f25c4b07b40) 0
+ primary-for QWidget (0x0x7f25c4db5d20)
+ QPaintDevice (0x0x7f25c4b07ba0) 16
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 832)
+
+Class QTextBrowser::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBrowser::QPrivateSignal (0x0x7f25c4b07120) 0 empty
+
+Vtable for QTextBrowser
+QTextBrowser::_ZTV12QTextBrowser: 79 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTextBrowser)
+16 (int (*)(...))QTextBrowser::metaObject
+24 (int (*)(...))QTextBrowser::qt_metacast
+32 (int (*)(...))QTextBrowser::qt_metacall
+40 (int (*)(...))QTextBrowser::~QTextBrowser
+48 (int (*)(...))QTextBrowser::~QTextBrowser
+56 (int (*)(...))QTextBrowser::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTextBrowser::mousePressEvent
+176 (int (*)(...))QTextBrowser::mouseReleaseEvent
+184 (int (*)(...))QTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QTextBrowser::mouseMoveEvent
+200 (int (*)(...))QTextEdit::wheelEvent
+208 (int (*)(...))QTextBrowser::keyPressEvent
+216 (int (*)(...))QTextEdit::keyReleaseEvent
+224 (int (*)(...))QTextEdit::focusInEvent
+232 (int (*)(...))QTextBrowser::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTextBrowser::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QTextEdit::dragEnterEvent
+320 (int (*)(...))QTextEdit::dragMoveEvent
+328 (int (*)(...))QTextEdit::dragLeaveEvent
+336 (int (*)(...))QTextEdit::dropEvent
+344 (int (*)(...))QTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QTextEdit::inputMethodEvent
+416 (int (*)(...))QTextEdit::inputMethodQuery
+424 (int (*)(...))QTextBrowser::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QTextBrowser::loadResource
+480 (int (*)(...))QTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QTextEdit::canInsertFromMimeData
+496 (int (*)(...))QTextEdit::insertFromMimeData
+504 (int (*)(...))QTextEdit::doSetTextCursor
+512 (int (*)(...))QTextBrowser::backward
+520 (int (*)(...))QTextBrowser::forward
+528 (int (*)(...))QTextBrowser::home
+536 (int (*)(...))QTextBrowser::reload
+544 (int (*)(...))QTextBrowser::doSetSource
+552 (int (*)(...))-16
+560 (int (*)(...))(& _ZTI12QTextBrowser)
+568 (int (*)(...))QTextBrowser::_ZThn16_N12QTextBrowserD1Ev
+576 (int (*)(...))QTextBrowser::_ZThn16_N12QTextBrowserD0Ev
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+592 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+600 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+608 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+616 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+624 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTextBrowser
+ size=40 align=8
+ base size=40 base align=8
+QTextBrowser (0x0x7f25c4af6410) 0
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 16)
+ QTextEdit (0x0x7f25c4af6478) 0
+ primary-for QTextBrowser (0x0x7f25c4af6410)
+ QAbstractScrollArea (0x0x7f25c4af64e0) 0
+ primary-for QTextEdit (0x0x7f25c4af6478)
+ QFrame (0x0x7f25c4af6548) 0
+ primary-for QAbstractScrollArea (0x0x7f25c4af64e0)
+ QWidget (0x0x7f25c4db5d90) 0
+ primary-for QFrame (0x0x7f25c4af6548)
+ QObject (0x0x7f25c4b07f00) 0
+ primary-for QWidget (0x0x7f25c4db5d90)
+ QPaintDevice (0x0x7f25c4b07f60) 16
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 568)
+
+Class QToolBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBar::QPrivateSignal (0x0x7f25c4bab1e0) 0 empty
+
+Vtable for QToolBar
+QToolBar::_ZTV8QToolBar: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QToolBar)
+16 (int (*)(...))QToolBar::metaObject
+24 (int (*)(...))QToolBar::qt_metacast
+32 (int (*)(...))QToolBar::qt_metacall
+40 (int (*)(...))QToolBar::~QToolBar
+48 (int (*)(...))QToolBar::~QToolBar
+56 (int (*)(...))QToolBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QToolBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QToolBar::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QToolBar::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI8QToolBar)
+456 (int (*)(...))QToolBar::_ZThn16_N8QToolBarD1Ev
+464 (int (*)(...))QToolBar::_ZThn16_N8QToolBarD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolBar
+ size=40 align=8
+ base size=40 base align=8
+QToolBar (0x0x7f25c4af65b0) 0
+ vptr=((& QToolBar::_ZTV8QToolBar) + 16)
+ QWidget (0x0x7f25c4db5e00) 0
+ primary-for QToolBar (0x0x7f25c4af65b0)
+ QObject (0x0x7f25c4bab120) 0
+ primary-for QWidget (0x0x7f25c4db5e00)
+ QPaintDevice (0x0x7f25c4bab180) 16
+ vptr=((& QToolBar::_ZTV8QToolBar) + 456)
+
+Class QToolBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBox::QPrivateSignal (0x0x7f25c4bab660) 0 empty
+
+Vtable for QToolBox
+QToolBox::_ZTV8QToolBox: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QToolBox)
+16 (int (*)(...))QToolBox::metaObject
+24 (int (*)(...))QToolBox::qt_metacast
+32 (int (*)(...))QToolBox::qt_metacall
+40 (int (*)(...))QToolBox::~QToolBox
+48 (int (*)(...))QToolBox::~QToolBox
+56 (int (*)(...))QToolBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QToolBox::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QToolBox::itemInserted
+448 (int (*)(...))QToolBox::itemRemoved
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI8QToolBox)
+472 (int (*)(...))QToolBox::_ZThn16_N8QToolBoxD1Ev
+480 (int (*)(...))QToolBox::_ZThn16_N8QToolBoxD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolBox
+ size=40 align=8
+ base size=40 base align=8
+QToolBox (0x0x7f25c4af6618) 0
+ vptr=((& QToolBox::_ZTV8QToolBox) + 16)
+ QFrame (0x0x7f25c4af6680) 0
+ primary-for QToolBox (0x0x7f25c4af6618)
+ QWidget (0x0x7f25c4db5e70) 0
+ primary-for QFrame (0x0x7f25c4af6680)
+ QObject (0x0x7f25c4bab5a0) 0
+ primary-for QWidget (0x0x7f25c4db5e70)
+ QPaintDevice (0x0x7f25c4bab600) 16
+ vptr=((& QToolBox::_ZTV8QToolBox) + 472)
+
+Class QToolButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolButton::QPrivateSignal (0x0x7f25c4bab9c0) 0 empty
+
+Vtable for QToolButton
+QToolButton::_ZTV11QToolButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QToolButton)
+16 (int (*)(...))QToolButton::metaObject
+24 (int (*)(...))QToolButton::qt_metacast
+32 (int (*)(...))QToolButton::qt_metacall
+40 (int (*)(...))QToolButton::~QToolButton
+48 (int (*)(...))QToolButton::~QToolButton
+56 (int (*)(...))QToolButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QToolButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QToolButton::sizeHint
+136 (int (*)(...))QToolButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QToolButton::mousePressEvent
+176 (int (*)(...))QToolButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QToolButton::enterEvent
+248 (int (*)(...))QToolButton::leaveEvent
+256 (int (*)(...))QToolButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QToolButton::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QToolButton::hitButton
+440 (int (*)(...))QToolButton::checkStateSet
+448 (int (*)(...))QToolButton::nextCheckState
+456 (int (*)(...))QToolButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI11QToolButton)
+480 (int (*)(...))QToolButton::_ZThn16_N11QToolButtonD1Ev
+488 (int (*)(...))QToolButton::_ZThn16_N11QToolButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolButton
+ size=40 align=8
+ base size=40 base align=8
+QToolButton (0x0x7f25c4af66e8) 0
+ vptr=((& QToolButton::_ZTV11QToolButton) + 16)
+ QAbstractButton (0x0x7f25c4af6750) 0
+ primary-for QToolButton (0x0x7f25c4af66e8)
+ QWidget (0x0x7f25c4db5ee0) 0
+ primary-for QAbstractButton (0x0x7f25c4af6750)
+ QObject (0x0x7f25c4bab900) 0
+ primary-for QWidget (0x0x7f25c4db5ee0)
+ QPaintDevice (0x0x7f25c4bab960) 16
+ vptr=((& QToolButton::_ZTV11QToolButton) + 480)
+
+Class QToolTip
+ size=1 align=1
+ base size=0 base align=1
+QToolTip (0x0x7f25c4babc00) 0 empty
+
+Class QTreeView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeView::QPrivateSignal (0x0x7f25c4babd80) 0 empty
+
+Vtable for QTreeView
+QTreeView::_ZTV9QTreeView: 110 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTreeView)
+16 (int (*)(...))QTreeView::metaObject
+24 (int (*)(...))QTreeView::qt_metacast
+32 (int (*)(...))QTreeView::qt_metacall
+40 (int (*)(...))QTreeView::~QTreeView
+48 (int (*)(...))QTreeView::~QTreeView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeView::setModel
+480 (int (*)(...))QTreeView::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))-16
+808 (int (*)(...))(& _ZTI9QTreeView)
+816 (int (*)(...))QTreeView::_ZThn16_N9QTreeViewD1Ev
+824 (int (*)(...))QTreeView::_ZThn16_N9QTreeViewD0Ev
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTreeView
+ size=40 align=8
+ base size=40 base align=8
+QTreeView (0x0x7f25c4af67b8) 0
+ vptr=((& QTreeView::_ZTV9QTreeView) + 16)
+ QAbstractItemView (0x0x7f25c4af6820) 0
+ primary-for QTreeView (0x0x7f25c4af67b8)
+ QAbstractScrollArea (0x0x7f25c4af6888) 0
+ primary-for QAbstractItemView (0x0x7f25c4af6820)
+ QFrame (0x0x7f25c4af68f0) 0
+ primary-for QAbstractScrollArea (0x0x7f25c4af6888)
+ QWidget (0x0x7f25c4bef0e0) 0
+ primary-for QFrame (0x0x7f25c4af68f0)
+ QObject (0x0x7f25c4babcc0) 0
+ primary-for QWidget (0x0x7f25c4bef0e0)
+ QPaintDevice (0x0x7f25c4babd20) 16
+ vptr=((& QTreeView::_ZTV9QTreeView) + 816)
+
+Class QTreeWidgetItemIterator
+ size=24 align=8
+ base size=20 base align=8
+QTreeWidgetItemIterator (0x0x7f25c4babf00) 0
+
+Vtable for QTreeWidgetItem
+QTreeWidgetItem::_ZTV15QTreeWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QTreeWidgetItem)
+16 (int (*)(...))QTreeWidgetItem::~QTreeWidgetItem
+24 (int (*)(...))QTreeWidgetItem::~QTreeWidgetItem
+32 (int (*)(...))QTreeWidgetItem::clone
+40 (int (*)(...))QTreeWidgetItem::data
+48 (int (*)(...))QTreeWidgetItem::setData
+56 (int (*)(...))QTreeWidgetItem::operator<
+64 (int (*)(...))QTreeWidgetItem::read
+72 (int (*)(...))QTreeWidgetItem::write
+
+Class QTreeWidgetItem
+ size=96 align=8
+ base size=92 base align=8
+QTreeWidgetItem (0x0x7f25c48416c0) 0
+ vptr=((& QTreeWidgetItem::_ZTV15QTreeWidgetItem) + 16)
+
+Class QTreeWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeWidget::QPrivateSignal (0x0x7f25c499a4e0) 0 empty
+
+Vtable for QTreeWidget
+QTreeWidget::_ZTV11QTreeWidget: 114 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTreeWidget)
+16 (int (*)(...))QTreeWidget::metaObject
+24 (int (*)(...))QTreeWidget::qt_metacast
+32 (int (*)(...))QTreeWidget::qt_metacall
+40 (int (*)(...))QTreeWidget::~QTreeWidget
+48 (int (*)(...))QTreeWidget::~QTreeWidget
+56 (int (*)(...))QTreeWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QTreeWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeWidget::setModel
+480 (int (*)(...))QTreeWidget::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))QTreeWidget::mimeTypes
+808 (int (*)(...))QTreeWidget::mimeData
+816 (int (*)(...))QTreeWidget::dropMimeData
+824 (int (*)(...))QTreeWidget::supportedDropActions
+832 (int (*)(...))-16
+840 (int (*)(...))(& _ZTI11QTreeWidget)
+848 (int (*)(...))QTreeWidget::_ZThn16_N11QTreeWidgetD1Ev
+856 (int (*)(...))QTreeWidget::_ZThn16_N11QTreeWidgetD0Ev
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+896 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+904 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTreeWidget
+ size=40 align=8
+ base size=40 base align=8
+QTreeWidget (0x0x7f25c48c2c30) 0
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 16)
+ QTreeView (0x0x7f25c48c2c98) 0
+ primary-for QTreeWidget (0x0x7f25c48c2c30)
+ QAbstractItemView (0x0x7f25c48c2d00) 0
+ primary-for QTreeView (0x0x7f25c48c2c98)
+ QAbstractScrollArea (0x0x7f25c48c2d68) 0
+ primary-for QAbstractItemView (0x0x7f25c48c2d00)
+ QFrame (0x0x7f25c48c2dd0) 0
+ primary-for QAbstractScrollArea (0x0x7f25c48c2d68)
+ QWidget (0x0x7f25c4befe70) 0
+ primary-for QFrame (0x0x7f25c48c2dd0)
+ QObject (0x0x7f25c499a420) 0
+ primary-for QWidget (0x0x7f25c4befe70)
+ QPaintDevice (0x0x7f25c499a480) 16
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 848)
+
+Class QUndoView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoView::QPrivateSignal (0x0x7f25c499a900) 0 empty
+
+Vtable for QUndoView
+QUndoView::_ZTV9QUndoView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QUndoView)
+16 (int (*)(...))QUndoView::metaObject
+24 (int (*)(...))QUndoView::qt_metacast
+32 (int (*)(...))QUndoView::qt_metacall
+40 (int (*)(...))QUndoView::~QUndoView
+48 (int (*)(...))QUndoView::~QUndoView
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI9QUndoView)
+800 (int (*)(...))QUndoView::_ZThn16_N9QUndoViewD1Ev
+808 (int (*)(...))QUndoView::_ZThn16_N9QUndoViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QUndoView
+ size=40 align=8
+ base size=40 base align=8
+QUndoView (0x0x7f25c48c2e38) 0
+ vptr=((& QUndoView::_ZTV9QUndoView) + 16)
+ QListView (0x0x7f25c48c2ea0) 0
+ primary-for QUndoView (0x0x7f25c48c2e38)
+ QAbstractItemView (0x0x7f25c48c2f08) 0
+ primary-for QListView (0x0x7f25c48c2ea0)
+ QAbstractScrollArea (0x0x7f25c48c2f70) 0
+ primary-for QAbstractItemView (0x0x7f25c48c2f08)
+ QFrame (0x0x7f25c48c2340) 0
+ primary-for QAbstractScrollArea (0x0x7f25c48c2f70)
+ QWidget (0x0x7f25c4befee0) 0
+ primary-for QFrame (0x0x7f25c48c2340)
+ QObject (0x0x7f25c499a840) 0
+ primary-for QWidget (0x0x7f25c4befee0)
+ QPaintDevice (0x0x7f25c499a8a0) 16
+ vptr=((& QUndoView::_ZTV9QUndoView) + 800)
+
+Class QWhatsThis
+ size=1 align=1
+ base size=0 base align=1
+QWhatsThis (0x0x7f25c499aa80) 0 empty
+
+Class QWidgetAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidgetAction::QPrivateSignal (0x0x7f25c499ab40) 0 empty
+
+Vtable for QWidgetAction
+QWidgetAction::_ZTV13QWidgetAction: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QWidgetAction)
+16 (int (*)(...))QWidgetAction::metaObject
+24 (int (*)(...))QWidgetAction::qt_metacast
+32 (int (*)(...))QWidgetAction::qt_metacall
+40 (int (*)(...))QWidgetAction::~QWidgetAction
+48 (int (*)(...))QWidgetAction::~QWidgetAction
+56 (int (*)(...))QWidgetAction::event
+64 (int (*)(...))QWidgetAction::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidgetAction::createWidget
+120 (int (*)(...))QWidgetAction::deleteWidget
+
+Class QWidgetAction
+ size=16 align=8
+ base size=16 base align=8
+QWidgetAction (0x0x7f25c48c2bc8) 0
+ vptr=((& QWidgetAction::_ZTV13QWidgetAction) + 16)
+ QAction (0x0x7f25c49fe000) 0
+ primary-for QWidgetAction (0x0x7f25c48c2bc8)
+ QObject (0x0x7f25c499aae0) 0
+ primary-for QAction (0x0x7f25c49fe000)
+
+Class QWizard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizard::QPrivateSignal (0x0x7f25c499ad80) 0 empty
+
+Vtable for QWizard
+QWizard::_ZTV7QWizard: 73 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWizard)
+16 (int (*)(...))QWizard::metaObject
+24 (int (*)(...))QWizard::qt_metacast
+32 (int (*)(...))QWizard::qt_metacall
+40 (int (*)(...))QWizard::~QWizard
+48 (int (*)(...))QWizard::~QWizard
+56 (int (*)(...))QWizard::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWizard::setVisible
+128 (int (*)(...))QWizard::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWizard::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWizard::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QWizard::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))QWizard::validateCurrentPage
+480 (int (*)(...))QWizard::nextId
+488 (int (*)(...))QWizard::initializePage
+496 (int (*)(...))QWizard::cleanupPage
+504 (int (*)(...))-16
+512 (int (*)(...))(& _ZTI7QWizard)
+520 (int (*)(...))QWizard::_ZThn16_N7QWizardD1Ev
+528 (int (*)(...))QWizard::_ZThn16_N7QWizardD0Ev
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWizard
+ size=40 align=8
+ base size=40 base align=8
+QWizard (0x0x7f25c49fe068) 0
+ vptr=((& QWizard::_ZTV7QWizard) + 16)
+ QDialog (0x0x7f25c49fe0d0) 0
+ primary-for QWizard (0x0x7f25c49fe068)
+ QWidget (0x0x7f25c4beff50) 0
+ primary-for QDialog (0x0x7f25c49fe0d0)
+ QObject (0x0x7f25c499acc0) 0
+ primary-for QWidget (0x0x7f25c4beff50)
+ QPaintDevice (0x0x7f25c499ad20) 16
+ vptr=((& QWizard::_ZTV7QWizard) + 520)
+
+Class QWizardPage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizardPage::QPrivateSignal (0x0x7f25c462e600) 0 empty
+
+Vtable for QWizardPage
+QWizardPage::_ZTV11QWizardPage: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWizardPage)
+16 (int (*)(...))QWizardPage::metaObject
+24 (int (*)(...))QWizardPage::qt_metacast
+32 (int (*)(...))QWizardPage::qt_metacall
+40 (int (*)(...))QWizardPage::~QWizardPage
+48 (int (*)(...))QWizardPage::~QWizardPage
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QWizardPage::initializePage
+440 (int (*)(...))QWizardPage::cleanupPage
+448 (int (*)(...))QWizardPage::validatePage
+456 (int (*)(...))QWizardPage::isComplete
+464 (int (*)(...))QWizardPage::nextId
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QWizardPage)
+488 (int (*)(...))QWizardPage::_ZThn16_N11QWizardPageD1Ev
+496 (int (*)(...))QWizardPage::_ZThn16_N11QWizardPageD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWizardPage
+ size=40 align=8
+ base size=40 base align=8
+QWizardPage (0x0x7f25c49fe270) 0
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 16)
+ QWidget (0x0x7f25c4a11150) 0
+ primary-for QWizardPage (0x0x7f25c49fe270)
+ QObject (0x0x7f25c462e540) 0
+ primary-for QWidget (0x0x7f25c4a11150)
+ QPaintDevice (0x0x7f25c462e5a0) 16
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 488)
+
+Class QHelpGlobal
+ size=1 align=1
+ base size=0 base align=1
+QHelpGlobal (0x0x7f25c462e780) 0 empty
+
+Class QCompressedHelpInfo
+ size=8 align=8
+ base size=8 base align=8
+QCompressedHelpInfo (0x0x7f25c462e7e0) 0
+
+Class QHelpContentItem
+ size=8 align=8
+ base size=8 base align=8
+QHelpContentItem (0x0x7f25c462e900) 0
+
+Class QHelpContentModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentModel::QPrivateSignal (0x0x7f25c462e9c0) 0 empty
+
+Vtable for QHelpContentModel
+QHelpContentModel::_ZTV17QHelpContentModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QHelpContentModel)
+16 (int (*)(...))QHelpContentModel::metaObject
+24 (int (*)(...))QHelpContentModel::qt_metacast
+32 (int (*)(...))QHelpContentModel::qt_metacall
+40 (int (*)(...))QHelpContentModel::~QHelpContentModel
+48 (int (*)(...))QHelpContentModel::~QHelpContentModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QHelpContentModel::index
+120 (int (*)(...))QHelpContentModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QHelpContentModel::rowCount
+144 (int (*)(...))QHelpContentModel::columnCount
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))QHelpContentModel::data
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractItemModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractItemModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QHelpContentModel
+ size=24 align=8
+ base size=24 base align=8
+QHelpContentModel (0x0x7f25c49fe2d8) 0
+ vptr=((& QHelpContentModel::_ZTV17QHelpContentModel) + 16)
+ QAbstractItemModel (0x0x7f25c49fe340) 0
+ primary-for QHelpContentModel (0x0x7f25c49fe2d8)
+ QObject (0x0x7f25c462e960) 0
+ primary-for QAbstractItemModel (0x0x7f25c49fe340)
+
+Class QHelpContentWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentWidget::QPrivateSignal (0x0x7f25c462eb40) 0 empty
+
+Vtable for QHelpContentWidget
+QHelpContentWidget::_ZTV18QHelpContentWidget: 110 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QHelpContentWidget)
+16 (int (*)(...))QHelpContentWidget::metaObject
+24 (int (*)(...))QHelpContentWidget::qt_metacast
+32 (int (*)(...))QHelpContentWidget::qt_metacall
+40 (int (*)(...))QHelpContentWidget::~QHelpContentWidget
+48 (int (*)(...))QHelpContentWidget::~QHelpContentWidget
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeView::setModel
+480 (int (*)(...))QTreeView::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))-16
+808 (int (*)(...))(& _ZTI18QHelpContentWidget)
+816 (int (*)(...))QHelpContentWidget::_ZThn16_N18QHelpContentWidgetD1Ev
+824 (int (*)(...))QHelpContentWidget::_ZThn16_N18QHelpContentWidgetD0Ev
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHelpContentWidget
+ size=64 align=8
+ base size=64 base align=8
+QHelpContentWidget (0x0x7f25c49fe3a8) 0
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 16)
+ QTreeView (0x0x7f25c49fe410) 0
+ primary-for QHelpContentWidget (0x0x7f25c49fe3a8)
+ QAbstractItemView (0x0x7f25c49fe478) 0
+ primary-for QTreeView (0x0x7f25c49fe410)
+ QAbstractScrollArea (0x0x7f25c49fe4e0) 0
+ primary-for QAbstractItemView (0x0x7f25c49fe478)
+ QFrame (0x0x7f25c49fe548) 0
+ primary-for QAbstractScrollArea (0x0x7f25c49fe4e0)
+ QWidget (0x0x7f25c4a111c0) 0
+ primary-for QFrame (0x0x7f25c49fe548)
+ QObject (0x0x7f25c462ea80) 0
+ primary-for QWidget (0x0x7f25c4a111c0)
+ QPaintDevice (0x0x7f25c462eae0) 16
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 816)
+
+Class QHelpEngineCore::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngineCore::QPrivateSignal (0x0x7f25c462ec60) 0 empty
+
+Vtable for QHelpEngineCore
+QHelpEngineCore::_ZTV15QHelpEngineCore: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QHelpEngineCore)
+16 (int (*)(...))QHelpEngineCore::metaObject
+24 (int (*)(...))QHelpEngineCore::qt_metacast
+32 (int (*)(...))QHelpEngineCore::qt_metacall
+40 (int (*)(...))QHelpEngineCore::~QHelpEngineCore
+48 (int (*)(...))QHelpEngineCore::~QHelpEngineCore
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QHelpEngineCore
+ size=24 align=8
+ base size=24 base align=8
+QHelpEngineCore (0x0x7f25c49fe5b0) 0
+ vptr=((& QHelpEngineCore::_ZTV15QHelpEngineCore) + 16)
+ QObject (0x0x7f25c462ec00) 0
+ primary-for QHelpEngineCore (0x0x7f25c49fe5b0)
+
+Class QHelpEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngine::QPrivateSignal (0x0x7f25c462ed80) 0 empty
+
+Vtable for QHelpEngine
+QHelpEngine::_ZTV11QHelpEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHelpEngine)
+16 (int (*)(...))QHelpEngine::metaObject
+24 (int (*)(...))QHelpEngine::qt_metacast
+32 (int (*)(...))QHelpEngine::qt_metacall
+40 (int (*)(...))QHelpEngine::~QHelpEngine
+48 (int (*)(...))QHelpEngine::~QHelpEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QHelpEngine
+ size=32 align=8
+ base size=32 base align=8
+QHelpEngine (0x0x7f25c49fe618) 0
+ vptr=((& QHelpEngine::_ZTV11QHelpEngine) + 16)
+ QHelpEngineCore (0x0x7f25c49fe680) 0
+ primary-for QHelpEngine (0x0x7f25c49fe618)
+ QObject (0x0x7f25c462ed20) 0
+ primary-for QHelpEngineCore (0x0x7f25c49fe680)
+
+Class QHelpFilterData
+ size=8 align=8
+ base size=8 base align=8
+QHelpFilterData (0x0x7f25c462ee40) 0
+
+Class QHelpFilterEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterEngine::QPrivateSignal (0x0x7f25c46fe000) 0 empty
+
+Vtable for QHelpFilterEngine
+QHelpFilterEngine::_ZTV17QHelpFilterEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QHelpFilterEngine)
+16 (int (*)(...))QHelpFilterEngine::metaObject
+24 (int (*)(...))QHelpFilterEngine::qt_metacast
+32 (int (*)(...))QHelpFilterEngine::qt_metacall
+40 (int (*)(...))QHelpFilterEngine::~QHelpFilterEngine
+48 (int (*)(...))QHelpFilterEngine::~QHelpFilterEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QHelpFilterEngine
+ size=24 align=8
+ base size=24 base align=8
+QHelpFilterEngine (0x0x7f25c49fe6e8) 0
+ vptr=((& QHelpFilterEngine::_ZTV17QHelpFilterEngine) + 16)
+ QObject (0x0x7f25c462ef60) 0
+ primary-for QHelpFilterEngine (0x0x7f25c49fe6e8)
+
+Class QHelpFilterSettingsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterSettingsWidget::QPrivateSignal (0x0x7f25c46fe180) 0 empty
+
+Vtable for QHelpFilterSettingsWidget
+QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QHelpFilterSettingsWidget)
+16 (int (*)(...))QHelpFilterSettingsWidget::metaObject
+24 (int (*)(...))QHelpFilterSettingsWidget::qt_metacast
+32 (int (*)(...))QHelpFilterSettingsWidget::qt_metacall
+40 (int (*)(...))QHelpFilterSettingsWidget::~QHelpFilterSettingsWidget
+48 (int (*)(...))QHelpFilterSettingsWidget::~QHelpFilterSettingsWidget
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI25QHelpFilterSettingsWidget)
+448 (int (*)(...))QHelpFilterSettingsWidget::_ZThn16_N25QHelpFilterSettingsWidgetD1Ev
+456 (int (*)(...))QHelpFilterSettingsWidget::_ZThn16_N25QHelpFilterSettingsWidgetD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHelpFilterSettingsWidget
+ size=48 align=8
+ base size=48 base align=8
+QHelpFilterSettingsWidget (0x0x7f25c49fe750) 0
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 16)
+ QWidget (0x0x7f25c4a11230) 0
+ primary-for QHelpFilterSettingsWidget (0x0x7f25c49fe750)
+ QObject (0x0x7f25c46fe0c0) 0
+ primary-for QWidget (0x0x7f25c4a11230)
+ QPaintDevice (0x0x7f25c46fe120) 16
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 448)
+
+Class QHelpIndexModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexModel::QPrivateSignal (0x0x7f25c46fe420) 0 empty
+
+Vtable for QHelpIndexModel
+QHelpIndexModel::_ZTV15QHelpIndexModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QHelpIndexModel)
+16 (int (*)(...))QHelpIndexModel::metaObject
+24 (int (*)(...))QHelpIndexModel::qt_metacast
+32 (int (*)(...))QHelpIndexModel::qt_metacall
+40 (int (*)(...))QHelpIndexModel::~QHelpIndexModel
+48 (int (*)(...))QHelpIndexModel::~QHelpIndexModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QStringListModel::sibling
+136 (int (*)(...))QStringListModel::rowCount
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))QStringListModel::data
+168 (int (*)(...))QStringListModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QStringListModel::itemData
+200 (int (*)(...))QStringListModel::setItemData
+208 (int (*)(...))QStringListModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QStringListModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStringListModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QStringListModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QStringListModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStringListModel::flags
+336 (int (*)(...))QStringListModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QHelpIndexModel
+ size=48 align=8
+ base size=48 base align=8
+QHelpIndexModel (0x0x7f25c49fe7b8) 0
+ vptr=((& QHelpIndexModel::_ZTV15QHelpIndexModel) + 16)
+ QStringListModel (0x0x7f25c49fe820) 0
+ primary-for QHelpIndexModel (0x0x7f25c49fe7b8)
+ QAbstractListModel (0x0x7f25c49fe888) 0
+ primary-for QStringListModel (0x0x7f25c49fe820)
+ QAbstractItemModel (0x0x7f25c49fe8f0) 0
+ primary-for QAbstractListModel (0x0x7f25c49fe888)
+ QObject (0x0x7f25c46fe3c0) 0
+ primary-for QAbstractItemModel (0x0x7f25c49fe8f0)
+
+Class QHelpIndexWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexWidget::QPrivateSignal (0x0x7f25c46fe5a0) 0 empty
+
+Vtable for QHelpIndexWidget
+QHelpIndexWidget::_ZTV16QHelpIndexWidget: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QHelpIndexWidget)
+16 (int (*)(...))QHelpIndexWidget::metaObject
+24 (int (*)(...))QHelpIndexWidget::qt_metacast
+32 (int (*)(...))QHelpIndexWidget::qt_metacall
+40 (int (*)(...))QHelpIndexWidget::~QHelpIndexWidget
+48 (int (*)(...))QHelpIndexWidget::~QHelpIndexWidget
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI16QHelpIndexWidget)
+800 (int (*)(...))QHelpIndexWidget::_ZThn16_N16QHelpIndexWidgetD1Ev
+808 (int (*)(...))QHelpIndexWidget::_ZThn16_N16QHelpIndexWidgetD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHelpIndexWidget
+ size=40 align=8
+ base size=40 base align=8
+QHelpIndexWidget (0x0x7f25c49fe958) 0
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 16)
+ QListView (0x0x7f25c49fe9c0) 0
+ primary-for QHelpIndexWidget (0x0x7f25c49fe958)
+ QAbstractItemView (0x0x7f25c49fea28) 0
+ primary-for QListView (0x0x7f25c49fe9c0)
+ QAbstractScrollArea (0x0x7f25c49fea90) 0
+ primary-for QAbstractItemView (0x0x7f25c49fea28)
+ QFrame (0x0x7f25c49feaf8) 0
+ primary-for QAbstractScrollArea (0x0x7f25c49fea90)
+ QWidget (0x0x7f25c4a112a0) 0
+ primary-for QFrame (0x0x7f25c49feaf8)
+ QObject (0x0x7f25c46fe4e0) 0
+ primary-for QWidget (0x0x7f25c4a112a0)
+ QPaintDevice (0x0x7f25c46fe540) 16
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 800)
+
+Class QHelpLink
+ size=32 align=8
+ base size=32 base align=8
+QHelpLink (0x0x7f25c46fe660) 0
+
+Class QHelpSearchQuery
+ size=32 align=8
+ base size=32 base align=8
+QHelpSearchQuery (0x0x7f25c46fe6c0) 0
+
+Class QHelpSearchResult
+ size=8 align=8
+ base size=8 base align=8
+QHelpSearchResult (0x0x7f25c474d000) 0
+
+Class QHelpSearchEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchEngine::QPrivateSignal (0x0x7f25c474d120) 0 empty
+
+Vtable for QHelpSearchEngine
+QHelpSearchEngine::_ZTV17QHelpSearchEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QHelpSearchEngine)
+16 (int (*)(...))QHelpSearchEngine::metaObject
+24 (int (*)(...))QHelpSearchEngine::qt_metacast
+32 (int (*)(...))QHelpSearchEngine::qt_metacall
+40 (int (*)(...))QHelpSearchEngine::~QHelpSearchEngine
+48 (int (*)(...))QHelpSearchEngine::~QHelpSearchEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QHelpSearchEngine
+ size=24 align=8
+ base size=24 base align=8
+QHelpSearchEngine (0x0x7f25c49fee38) 0
+ vptr=((& QHelpSearchEngine::_ZTV17QHelpSearchEngine) + 16)
+ QObject (0x0x7f25c474d0c0) 0
+ primary-for QHelpSearchEngine (0x0x7f25c49fee38)
+
+Class QHelpSearchQueryWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchQueryWidget::QPrivateSignal (0x0x7f25c474d2a0) 0 empty
+
+Vtable for QHelpSearchQueryWidget
+QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QHelpSearchQueryWidget)
+16 (int (*)(...))QHelpSearchQueryWidget::metaObject
+24 (int (*)(...))QHelpSearchQueryWidget::qt_metacast
+32 (int (*)(...))QHelpSearchQueryWidget::qt_metacall
+40 (int (*)(...))QHelpSearchQueryWidget::~QHelpSearchQueryWidget
+48 (int (*)(...))QHelpSearchQueryWidget::~QHelpSearchQueryWidget
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QHelpSearchQueryWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QHelpSearchQueryWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI22QHelpSearchQueryWidget)
+448 (int (*)(...))QHelpSearchQueryWidget::_ZThn16_N22QHelpSearchQueryWidgetD1Ev
+456 (int (*)(...))QHelpSearchQueryWidget::_ZThn16_N22QHelpSearchQueryWidgetD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHelpSearchQueryWidget
+ size=48 align=8
+ base size=48 base align=8
+QHelpSearchQueryWidget (0x0x7f25c49feea0) 0
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 16)
+ QWidget (0x0x7f25c4a11690) 0
+ primary-for QHelpSearchQueryWidget (0x0x7f25c49feea0)
+ QObject (0x0x7f25c474d1e0) 0
+ primary-for QWidget (0x0x7f25c4a11690)
+ QPaintDevice (0x0x7f25c474d240) 16
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 448)
+
+Class QHelpSearchResultWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchResultWidget::QPrivateSignal (0x0x7f25c474d420) 0 empty
+
+Vtable for QHelpSearchResultWidget
+QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QHelpSearchResultWidget)
+16 (int (*)(...))QHelpSearchResultWidget::metaObject
+24 (int (*)(...))QHelpSearchResultWidget::qt_metacast
+32 (int (*)(...))QHelpSearchResultWidget::qt_metacall
+40 (int (*)(...))QHelpSearchResultWidget::~QHelpSearchResultWidget
+48 (int (*)(...))QHelpSearchResultWidget::~QHelpSearchResultWidget
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QHelpSearchResultWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI23QHelpSearchResultWidget)
+448 (int (*)(...))QHelpSearchResultWidget::_ZThn16_N23QHelpSearchResultWidgetD1Ev
+456 (int (*)(...))QHelpSearchResultWidget::_ZThn16_N23QHelpSearchResultWidgetD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHelpSearchResultWidget
+ size=48 align=8
+ base size=48 base align=8
+QHelpSearchResultWidget (0x0x7f25c49fef08) 0
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 16)
+ QWidget (0x0x7f25c4a11700) 0
+ primary-for QHelpSearchResultWidget (0x0x7f25c49fef08)
+ QObject (0x0x7f25c474d360) 0
+ primary-for QWidget (0x0x7f25c4a11700)
+ QPaintDevice (0x0x7f25c474d3c0) 16
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 448)
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f25c47993c0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f25c4799720) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f25c4799960) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f25c4799cc0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f25c4799ea0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f25c47c51e0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f25c47c5360) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f25c47c56c0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f25c47c58a0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f25c47c5c00) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f25c47c5de0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f25c47f4180) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f25c47f4360) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f25c47f46c0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f25c47f48a0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f25c47f4c00) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f25c44474e0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f25c4447840) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f25c44479c0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f25c4447d20) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f25c4447ea0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f25c446f240) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f25c446f3c0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f25c446f720) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f25c446f8a0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f25c446fc00) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f25c446fd80) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f25c449c120) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f25c449c2a0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f25c449c600) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f25c449c780) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f25c449cae0) 0 empty
+
diff --git a/tests/auto/bic/data/QtUiTools.6.0.0.linux-gcc-amd64.txt b/tests/auto/bic/data/QtUiTools.6.0.0.linux-gcc-amd64.txt
new file mode 100644
index 000000000..823ac613a
--- /dev/null
+++ b/tests/auto/bic/data/QtUiTools.6.0.0.linux-gcc-amd64.txt
@@ -0,0 +1,19797 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f0b2e7d2ea0) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f0b2e8e76c0) 0 empty
+
+Class std::__do_is_nt_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_nt_destructible_impl (0x0x7f0b2e8e7900) 0 empty
+
+Class std::__do_is_implicitly_default_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_implicitly_default_constructible_impl (0x0x7f0b2e919a20) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7f0b2eb75240) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f0b2ebf2060) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7f0b2ebf2120) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7f0b2ebf2600) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7f0b2ebf2660) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7f0b2ebf26c0) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7f0b2ebf2720) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7f0b2ebf2780) 0 empty
+
+Class std::__result_of_memfun_ref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memfun_ref_impl (0x0x7f0b2ebf2840) 0 empty
+
+Class std::__result_of_memfun_deref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memfun_deref_impl (0x0x7f0b2ebf2900) 0 empty
+
+Class std::__result_of_memobj_ref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memobj_ref_impl (0x0x7f0b2ebf29c0) 0 empty
+
+Class std::__result_of_memobj_deref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memobj_deref_impl (0x0x7f0b2ebf2a80) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f0b2ebf2de0) 0 empty
+
+Class std::__swappable_details::__do_is_swappable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_details::__do_is_swappable_impl (0x0x7f0b2ec35180) 0 empty
+
+Class std::__swappable_details::__do_is_nothrow_swappable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_details::__do_is_nothrow_swappable_impl (0x0x7f0b2ec351e0) 0 empty
+
+Class std::__swappable_with_details::__do_is_swappable_with_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_with_details::__do_is_swappable_with_impl (0x0x7f0b2ec35480) 0 empty
+
+Class std::__swappable_with_details::__do_is_nothrow_swappable_with_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_with_details::__do_is_nothrow_swappable_with_impl (0x0x7f0b2ec354e0) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuch (0x0x7f0b2ec35d20) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f0b2ecbc300) 0 empty
+
+Class std::__nonesuch_no_braces
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch_no_braces (0x0x7f0b2ec60750) 0 empty
+ std::__nonesuch (0x0x7f0b2ecbc7e0) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7f0b2ed41540) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f0b2ed417e0) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f0b2ed41840) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f0b2e99a5a0) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f0b2e99a600) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f0b2ec60c98) 0 empty
+ std::input_iterator_tag (0x0x7f0b2e99a660) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f0b2ec60d00) 0 empty
+ std::forward_iterator_tag (0x0x7f0b2ec60d68) 0 empty
+ std::input_iterator_tag (0x0x7f0b2e99a6c0) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f0b2ec60dd0) 0 empty
+ std::bidirectional_iterator_tag (0x0x7f0b2ec60e38) 0 empty
+ std::forward_iterator_tag (0x0x7f0b2ec60ea0) 0 empty
+ std::input_iterator_tag (0x0x7f0b2e99a720) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_iter (0x0x7f0b2ea52420) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_less_val
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_val (0x0x7f0b2ea52540) 0 empty
+
+Class __gnu_cxx::__ops::_Val_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Val_less_iter (0x0x7f0b2ea52840) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_equal_to_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_equal_to_iter (0x0x7f0b2ea52b40) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_equal_to_val
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_equal_to_val (0x0x7f0b2ea52c60) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f0b2eb15480) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f0b2eb157e0) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f0b2eb15840) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f0b2eb15900) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7f0b2eb15960) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7f0b2eb159c0) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7f0b2eb15a20) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7f0b2eb15a80) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f0b2eb15d20) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f0b2eb4e000) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f0b2eb4e060) 0
+
+Vtable for std::exception
+std::exception::_ZTVSt9exception: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9exception)
+16 (int (*)(...))std::exception::~exception
+24 (int (*)(...))std::exception::~exception
+32 (int (*)(...))std::exception::what
+
+Class std::exception
+ size=8 align=8
+ base size=8 base align=8
+std::exception (0x0x7f0b2eb4ede0) 0 nearly-empty
+ vptr=((& std::exception::_ZTVSt9exception) + 16)
+
+Vtable for std::bad_exception
+std::bad_exception::_ZTVSt13bad_exception: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13bad_exception)
+16 (int (*)(...))std::bad_exception::~bad_exception
+24 (int (*)(...))std::bad_exception::~bad_exception
+32 (int (*)(...))std::bad_exception::what
+
+Class std::bad_exception
+ size=8 align=8
+ base size=8 base align=8
+std::bad_exception (0x0x7f0b2e9e4270) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+ std::exception (0x0x7f0b2de09000) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f0b2e9e4270)
+
+Vtable for std::type_info
+std::type_info::_ZTVSt9type_info: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9type_info)
+16 (int (*)(...))std::type_info::~type_info
+24 (int (*)(...))std::type_info::~type_info
+32 (int (*)(...))std::type_info::__is_pointer_p
+40 (int (*)(...))std::type_info::__is_function_p
+48 (int (*)(...))std::type_info::__do_catch
+56 (int (*)(...))std::type_info::__do_upcast
+
+Class std::type_info
+ size=16 align=8
+ base size=16 base align=8
+std::type_info (0x0x7f0b2de091e0) 0
+ vptr=((& std::type_info::_ZTVSt9type_info) + 16)
+
+Vtable for std::bad_cast
+std::bad_cast::_ZTVSt8bad_cast: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt8bad_cast)
+16 (int (*)(...))std::bad_cast::~bad_cast
+24 (int (*)(...))std::bad_cast::~bad_cast
+32 (int (*)(...))std::bad_cast::what
+
+Class std::bad_cast
+ size=8 align=8
+ base size=8 base align=8
+std::bad_cast (0x0x7f0b2e9e42d8) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+ std::exception (0x0x7f0b2de095a0) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f0b2e9e42d8)
+
+Vtable for std::bad_typeid
+std::bad_typeid::_ZTVSt10bad_typeid: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt10bad_typeid)
+16 (int (*)(...))std::bad_typeid::~bad_typeid
+24 (int (*)(...))std::bad_typeid::~bad_typeid
+32 (int (*)(...))std::bad_typeid::what
+
+Class std::bad_typeid
+ size=8 align=8
+ base size=8 base align=8
+std::bad_typeid (0x0x7f0b2e9e4340) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+ std::exception (0x0x7f0b2de09780) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f0b2e9e4340)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f0b2de09960) 0
+
+Vtable for std::nested_exception
+std::nested_exception::_ZTVSt16nested_exception: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt16nested_exception)
+16 (int (*)(...))std::nested_exception::~nested_exception
+24 (int (*)(...))std::nested_exception::~nested_exception
+
+Class std::nested_exception
+ size=16 align=8
+ base size=16 base align=8
+std::nested_exception (0x0x7f0b2de09ea0) 0
+ vptr=((& std::nested_exception::_ZTVSt16nested_exception) + 16)
+
+Vtable for std::bad_alloc
+std::bad_alloc::_ZTVSt9bad_alloc: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9bad_alloc)
+16 (int (*)(...))std::bad_alloc::~bad_alloc
+24 (int (*)(...))std::bad_alloc::~bad_alloc
+32 (int (*)(...))std::bad_alloc::what
+
+Class std::bad_alloc
+ size=8 align=8
+ base size=8 base align=8
+std::bad_alloc (0x0x7f0b2e9e43a8) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+ std::exception (0x0x7f0b2de465a0) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f0b2e9e43a8)
+
+Vtable for std::bad_array_new_length
+std::bad_array_new_length::_ZTVSt20bad_array_new_length: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt20bad_array_new_length)
+16 (int (*)(...))std::bad_array_new_length::~bad_array_new_length
+24 (int (*)(...))std::bad_array_new_length::~bad_array_new_length
+32 (int (*)(...))std::bad_array_new_length::what
+
+Class std::bad_array_new_length
+ size=8 align=8
+ base size=8 base align=8
+std::bad_array_new_length (0x0x7f0b2e9e4410) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+ std::bad_alloc (0x0x7f0b2e9e4478) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f0b2e9e4410)
+ std::exception (0x0x7f0b2de46780) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f0b2e9e4478)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f0b2de46960) 0 empty
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7f0b2de46ba0) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f0b2def6360) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f0b2dad2720) 0
+
+Vtable for __cxxabiv1::__forced_unwind
+__cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN10__cxxabiv115__forced_unwindE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class __cxxabiv1::__forced_unwind
+ size=8 align=8
+ base size=8 base align=8
+__cxxabiv1::__forced_unwind (0x0x7f0b2dad27e0) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f0b2db4c6c0) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f0b2db4c780) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f0b2db4c7e0) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f0b2db4c840) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f0b2db4c8a0) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f0b2db4c9c0) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f0b2db4ca20) 0
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f0b2d8090c0) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f0b2d809240) 0 empty
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7f0b2d6310c0) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7f0b2d631120) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f0b2d631180) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7f0b2d6311e0) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f0b2d24e960) 0
+
+Vtable for std::logic_error
+std::logic_error::_ZTVSt11logic_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt11logic_error)
+16 (int (*)(...))std::logic_error::~logic_error
+24 (int (*)(...))std::logic_error::~logic_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::logic_error
+ size=16 align=8
+ base size=16 base align=8
+std::logic_error (0x0x7f0b2d26d410) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+ std::exception (0x0x7f0b2d24ea20) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f0b2d26d410)
+
+Vtable for std::domain_error
+std::domain_error::_ZTVSt12domain_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12domain_error)
+16 (int (*)(...))std::domain_error::~domain_error
+24 (int (*)(...))std::domain_error::~domain_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::domain_error
+ size=16 align=8
+ base size=16 base align=8
+std::domain_error (0x0x7f0b2d26d478) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+ std::logic_error (0x0x7f0b2d26d4e0) 0
+ primary-for std::domain_error (0x0x7f0b2d26d478)
+ std::exception (0x0x7f0b2d24ea80) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f0b2d26d4e0)
+
+Vtable for std::invalid_argument
+std::invalid_argument::_ZTVSt16invalid_argument: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt16invalid_argument)
+16 (int (*)(...))std::invalid_argument::~invalid_argument
+24 (int (*)(...))std::invalid_argument::~invalid_argument
+32 (int (*)(...))std::logic_error::what
+
+Class std::invalid_argument
+ size=16 align=8
+ base size=16 base align=8
+std::invalid_argument (0x0x7f0b2d26d548) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+ std::logic_error (0x0x7f0b2d26d5b0) 0
+ primary-for std::invalid_argument (0x0x7f0b2d26d548)
+ std::exception (0x0x7f0b2d24eae0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f0b2d26d5b0)
+
+Vtable for std::length_error
+std::length_error::_ZTVSt12length_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12length_error)
+16 (int (*)(...))std::length_error::~length_error
+24 (int (*)(...))std::length_error::~length_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::length_error
+ size=16 align=8
+ base size=16 base align=8
+std::length_error (0x0x7f0b2d26d618) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+ std::logic_error (0x0x7f0b2d26d680) 0
+ primary-for std::length_error (0x0x7f0b2d26d618)
+ std::exception (0x0x7f0b2d24eb40) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f0b2d26d680)
+
+Vtable for std::out_of_range
+std::out_of_range::_ZTVSt12out_of_range: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12out_of_range)
+16 (int (*)(...))std::out_of_range::~out_of_range
+24 (int (*)(...))std::out_of_range::~out_of_range
+32 (int (*)(...))std::logic_error::what
+
+Class std::out_of_range
+ size=16 align=8
+ base size=16 base align=8
+std::out_of_range (0x0x7f0b2d26d6e8) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+ std::logic_error (0x0x7f0b2d26d750) 0
+ primary-for std::out_of_range (0x0x7f0b2d26d6e8)
+ std::exception (0x0x7f0b2d24eba0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f0b2d26d750)
+
+Vtable for std::runtime_error
+std::runtime_error::_ZTVSt13runtime_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13runtime_error)
+16 (int (*)(...))std::runtime_error::~runtime_error
+24 (int (*)(...))std::runtime_error::~runtime_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::runtime_error
+ size=16 align=8
+ base size=16 base align=8
+std::runtime_error (0x0x7f0b2d26d7b8) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+ std::exception (0x0x7f0b2d24ec00) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f0b2d26d7b8)
+
+Vtable for std::range_error
+std::range_error::_ZTVSt11range_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt11range_error)
+16 (int (*)(...))std::range_error::~range_error
+24 (int (*)(...))std::range_error::~range_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::range_error
+ size=16 align=8
+ base size=16 base align=8
+std::range_error (0x0x7f0b2d26d820) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+ std::runtime_error (0x0x7f0b2d26d888) 0
+ primary-for std::range_error (0x0x7f0b2d26d820)
+ std::exception (0x0x7f0b2d24ec60) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f0b2d26d888)
+
+Vtable for std::overflow_error
+std::overflow_error::_ZTVSt14overflow_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt14overflow_error)
+16 (int (*)(...))std::overflow_error::~overflow_error
+24 (int (*)(...))std::overflow_error::~overflow_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::overflow_error
+ size=16 align=8
+ base size=16 base align=8
+std::overflow_error (0x0x7f0b2d26d8f0) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+ std::runtime_error (0x0x7f0b2d26d958) 0
+ primary-for std::overflow_error (0x0x7f0b2d26d8f0)
+ std::exception (0x0x7f0b2d24ecc0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f0b2d26d958)
+
+Vtable for std::underflow_error
+std::underflow_error::_ZTVSt15underflow_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt15underflow_error)
+16 (int (*)(...))std::underflow_error::~underflow_error
+24 (int (*)(...))std::underflow_error::~underflow_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::underflow_error
+ size=16 align=8
+ base size=16 base align=8
+std::underflow_error (0x0x7f0b2d26d9c0) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+ std::runtime_error (0x0x7f0b2d26da28) 0
+ primary-for std::underflow_error (0x0x7f0b2d26d9c0)
+ std::exception (0x0x7f0b2d24ed20) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f0b2d26da28)
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7f0b2d2ee060) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f0b2d2ee0c0) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f0b2d2ee240) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f0b2d2ee300) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f0b2d26dc98) 0
+ std::__uses_alloc_base (0x0x7f0b2d2ee2a0) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f0b2d05d900) 0 empty
+
+Vtable for std::bad_function_call
+std::bad_function_call::_ZTVSt17bad_function_call: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt17bad_function_call)
+16 (int (*)(...))std::bad_function_call::~bad_function_call
+24 (int (*)(...))std::bad_function_call::~bad_function_call
+32 (int (*)(...))std::bad_function_call::what
+
+Class std::bad_function_call
+ size=8 align=8
+ base size=8 base align=8
+std::bad_function_call (0x0x7f0b2d11e0d0) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+ std::exception (0x0x7f0b2d12e000) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f0b2d11e0d0)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f0b2d12e0c0) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f0b2d12e120) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f0b2d12e420) 0
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7f0b2ce022a0) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7f0b2ce02360) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7f0b2ce02840) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7f0b2ce296c0) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7f0b2ce29780) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7f0b2ce297e0) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7f0b2ce29ba0) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7f0b2ce29cc0) 0
+
+Class std::__detail::_Equality_base
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Equality_base (0x0x7f0b2cc09d80) 0 empty
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7f0b2cc45660) 0 empty
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7f0b2cc93060) 0 empty
+
+Vtable for std::bad_optional_access
+std::bad_optional_access::_ZTVSt19bad_optional_access: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt19bad_optional_access)
+16 (int (*)(...))std::bad_optional_access::~bad_optional_access
+24 (int (*)(...))std::bad_optional_access::~bad_optional_access
+32 (int (*)(...))std::bad_optional_access::what
+
+Class std::bad_optional_access
+ size=8 align=8
+ base size=8 base align=8
+std::bad_optional_access (0x0x7f0b2cc9c000) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+ std::exception (0x0x7f0b2cc932a0) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7f0b2cc9c000)
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f0b2c72dc00) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f0b2c60caf8) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f0b2c74e3c0) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f0b2c60cbc8) 0
+ std::_Bit_iterator_base (0x0x7f0b2c60cc30) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f0b2c74e960) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f0b2c60cd00) 0
+ std::_Bit_iterator_base (0x0x7f0b2c60cd68) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f0b2c387120) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7f0b2c165660) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7f0b2c1657e0) 0 empty
+
+Class __pstl::execution::v1::parallel_unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_unsequenced_policy (0x0x7f0b2c165960) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7f0b2c165ae0) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7f0b2c296600) 0 empty
+
+Class std::__detail::__variant::__variant_idx_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_idx_cookie (0x0x7f0b2c296660) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7f0b2bf73120) 0 empty
+
+Vtable for std::bad_variant_access
+std::bad_variant_access::_ZTVSt18bad_variant_access: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt18bad_variant_access)
+16 (int (*)(...))std::bad_variant_access::~bad_variant_access
+24 (int (*)(...))std::bad_variant_access::~bad_variant_access
+32 (int (*)(...))std::bad_variant_access::what
+
+Class std::bad_variant_access
+ size=16 align=8
+ base size=16 base align=8
+std::bad_variant_access (0x0x7f0b2c336138) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+ std::exception (0x0x7f0b2bf96660) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7f0b2c336138)
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f0b2c05b060) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f0b2c05b0c0) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f0b2c05b360) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f0b2c05bba0) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f0b2c0abc60) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f0b2c140a80) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f0b2c0e93a8) 0
+ std::__atomic_flag_base (0x0x7f0b2c140ae0) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f0b2bccc680) 0
+ QAtomicInteger<int> (0x0x7f0b2bccc6e8) 0
+ QBasicAtomicInteger<int> (0x0x7f0b2bcc49c0) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f0b2b92acc0) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7f0b2b92ad20) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f0b2b619060) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7f0b2b619780) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f0b2b6197e0) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f0b2b588af8) 0
+ QGenericArgument (0x0x7f0b2b619a80) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7f0b2b619f60) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7f0b2b662000) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7f0b2b619f00) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f0b2b662960) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f0b2b6c03c0) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f0b2b6c0d80) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f0b2b3a28a0) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7f0b2b3a2c00) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f0b2b44a600) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f0b2b44a720) 0
+
+Vtable for std::locale::facet
+std::locale::facet::_ZTVNSt6locale5facetE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6locale5facetE)
+16 (int (*)(...))std::locale::facet::~facet
+24 (int (*)(...))std::locale::facet::~facet
+
+Class std::locale::facet
+ size=16 align=8
+ base size=12 base align=8
+std::locale::facet (0x0x7f0b2b44aae0) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f0b2b44ad80) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f0b2b44af60) 0
+
+Vtable for std::_V2::error_category
+std::_V2::error_category::_ZTVNSt3_V214error_categoryE: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt3_V214error_categoryE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))std::_V2::error_category::_M_message
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))std::_V2::error_category::default_error_condition
+64 (int (*)(...))std::_V2::error_category::equivalent
+72 (int (*)(...))std::_V2::error_category::equivalent
+
+Class std::_V2::error_category
+ size=8 align=8
+ base size=8 base align=8
+std::_V2::error_category (0x0x7f0b2b4eb0c0) 0 nearly-empty
+ vptr=((& std::_V2::error_category::_ZTVNSt3_V214error_categoryE) + 16)
+
+Class std::error_code
+ size=16 align=8
+ base size=16 base align=8
+std::error_code (0x0x7f0b2b4eb420) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f0b2b4ebc00) 0
+
+Vtable for std::system_error
+std::system_error::_ZTVSt12system_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12system_error)
+16 (int (*)(...))std::system_error::~system_error
+24 (int (*)(...))std::system_error::~system_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::system_error
+ size=32 align=8
+ base size=32 base align=8
+std::system_error (0x0x7f0b2b538000) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+ std::runtime_error (0x0x7f0b2b538068) 0
+ primary-for std::system_error (0x0x7f0b2b538000)
+ std::exception (0x0x7f0b2b51d7e0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f0b2b538068)
+
+Vtable for std::ios_base::failure
+std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt8ios_base7failureB5cxx11E)
+16 (int (*)(...))std::ios_base::failure::~failure
+24 (int (*)(...))std::ios_base::failure::~failure
+32 (int (*)(...))std::ios_base::failure::what
+
+Class std::ios_base::failure
+ size=32 align=8
+ base size=32 base align=8
+std::ios_base::failure (0x0x7f0b2b5383a8) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+ std::system_error (0x0x7f0b2b538410) 0
+ primary-for std::ios_base::failure (0x0x7f0b2b5383a8)
+ std::runtime_error (0x0x7f0b2b538478) 0
+ primary-for std::system_error (0x0x7f0b2b538410)
+ std::exception (0x0x7f0b2b554f60) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f0b2b538478)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f0b2b18b000) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f0b2b18b060) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f0b2b18b0c0) 0 empty
+
+Vtable for std::ios_base
+std::ios_base::_ZTVSt8ios_base: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt8ios_base)
+16 (int (*)(...))std::ios_base::~ios_base
+24 (int (*)(...))std::ios_base::~ios_base
+
+Class std::ios_base
+ size=216 align=8
+ base size=216 base align=8
+std::ios_base (0x0x7f0b2b554f00) 0
+ vptr=((& std::ios_base::_ZTVSt8ios_base) + 16)
+
+Class std::ctype_base
+ size=1 align=1
+ base size=0 base align=1
+std::ctype_base (0x0x7f0b2b20dcc0) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7f0b2b311000) 0 empty
+
+VTT for std::basic_ostream<char>
+std::basic_ostream<char>::_ZTTSo: 2 entries
+0 ((& std::basic_ostream<char>::_ZTVSo) + 24)
+8 ((& std::basic_ostream<char>::_ZTVSo) + 64)
+
+VTT for std::basic_ostream<wchar_t>
+std::basic_ostream<wchar_t>::_ZTTSt13basic_ostreamIwSt11char_traitsIwEE: 2 entries
+0 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 64)
+
+VTT for std::basic_istream<char>
+std::basic_istream<char>::_ZTTSi: 2 entries
+0 ((& std::basic_istream<char>::_ZTVSi) + 24)
+8 ((& std::basic_istream<char>::_ZTVSi) + 64)
+
+VTT for std::basic_istream<wchar_t>
+std::basic_istream<wchar_t>::_ZTTSt13basic_istreamIwSt11char_traitsIwEE: 2 entries
+0 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 64)
+
+Construction vtable for std::basic_istream<char> (0x0x7f0b2ae87000 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd0_Si: 10 entries
+0 24
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISi)
+24 0
+32 0
+40 18446744073709551592
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISi)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<char> (0x0x7f0b2ae870d0 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd16_So: 10 entries
+0 8
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISo)
+24 0
+32 0
+40 18446744073709551608
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISo)
+64 0
+72 0
+
+VTT for std::basic_iostream<char>
+std::basic_iostream<char>::_ZTTSd: 7 entries
+0 ((& std::basic_iostream<char>::_ZTVSd) + 24)
+8 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 24)
+16 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 64)
+24 ((& std::basic_iostream<char>::_ZTCSd16_So) + 24)
+32 ((& std::basic_iostream<char>::_ZTCSd16_So) + 64)
+40 ((& std::basic_iostream<char>::_ZTVSd) + 104)
+48 ((& std::basic_iostream<char>::_ZTVSd) + 64)
+
+Construction vtable for std::basic_istream<wchar_t> (0x0x7f0b2ae87618 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E: 10 entries
+0 24
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551592
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<wchar_t> (0x0x7f0b2ae876e8 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E: 10 entries
+0 8
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551608
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+VTT for std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTTSt14basic_iostreamIwSt11char_traitsIwEE: 7 entries
+0 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 24)
+16 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 64)
+24 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 24)
+32 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 64)
+40 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 104)
+48 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 64)
+
+Vtable for __gnu_cxx::__concurrence_lock_error
+__gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx24__concurrence_lock_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error
+24 (int (*)(...))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error
+32 (int (*)(...))__gnu_cxx::__concurrence_lock_error::what
+
+Class __gnu_cxx::__concurrence_lock_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_lock_error (0x0x7f0b2ae87c98) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+ std::exception (0x0x7f0b2aebe9c0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f0b2ae87c98)
+
+Vtable for __gnu_cxx::__concurrence_unlock_error
+__gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx26__concurrence_unlock_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error
+24 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error
+32 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::what
+
+Class __gnu_cxx::__concurrence_unlock_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_unlock_error (0x0x7f0b2ae87d00) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+ std::exception (0x0x7f0b2aebeae0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f0b2ae87d00)
+
+Vtable for __gnu_cxx::__concurrence_broadcast_error
+__gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx29__concurrence_broadcast_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::~__concurrence_broadcast_error
+24 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::~__concurrence_broadcast_error
+32 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::what
+
+Class __gnu_cxx::__concurrence_broadcast_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_broadcast_error (0x0x7f0b2ae87d68) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+ std::exception (0x0x7f0b2aebec00) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f0b2ae87d68)
+
+Vtable for __gnu_cxx::__concurrence_wait_error
+__gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx24__concurrence_wait_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_wait_error::~__concurrence_wait_error
+24 (int (*)(...))__gnu_cxx::__concurrence_wait_error::~__concurrence_wait_error
+32 (int (*)(...))__gnu_cxx::__concurrence_wait_error::what
+
+Class __gnu_cxx::__concurrence_wait_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_wait_error (0x0x7f0b2ae87e38) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+ std::exception (0x0x7f0b2aebed20) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f0b2ae87e38)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f0b2aee4600) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f0b2aee4960) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f0b2aee4c60) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f0b2aee4660) 0
+
+Vtable for std::bad_weak_ptr
+std::bad_weak_ptr::_ZTVSt12bad_weak_ptr: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12bad_weak_ptr)
+16 (int (*)(...))std::bad_weak_ptr::~bad_weak_ptr
+24 (int (*)(...))std::bad_weak_ptr::~bad_weak_ptr
+32 (int (*)(...))std::bad_weak_ptr::what
+
+Class std::bad_weak_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::bad_weak_ptr (0x0x7f0b2ae87f70) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+ std::exception (0x0x7f0b2ab91780) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f0b2ae87f70)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f0b2abfe540) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7f0b2abfea80) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f0b2ad458a0) 0
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7f0b2aa76720) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7f0b2a77d120) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7f0b2a5bd7e0) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f0b2a64e300) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7f0b2a384660) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7f0b2a384a80) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7f0b2a384ae0) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7f0b2a403c60) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7f0b2a5092a0) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7f0b2a509240) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f0b2a160300) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7f0b2a2c2600) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7f0b29eb5960) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7f0b29eb4bc8) 0
+ QtPrivate::ArgBase (0x0x7f0b29eb59c0) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7f0b29eb4c98) 0
+ QtPrivate::ArgBase (0x0x7f0b29eb5c00) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f0b29b653c0) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f0b29b65480) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7f0b29d4d6c0) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f0b299e3780) 0 empty
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7f0b29a0c480) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7f0b29a0c6c0) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7f0b29aa7780) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f0b299d6138) 0
+ QIODeviceBase (0x0x7f0b29aa77e0) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f0b29aa7960) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f0b29b24d80) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7f0b299d6a90) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f0b29b24e40) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7f0b299d6b60) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f0b29b24f00) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7f0b2984aa20) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7f0b299d6f08) 0
+ QMetaContainer (0x0x7f0b2984ac00) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7f0b299d6f70) 0
+ QMetaContainer (0x0x7f0b2986c000) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f0b29485660) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7f0b29415ea0) 0
+ std::__detail::_List_node_base (0x0x7f0b294856c0) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f0b29159780) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7f0b29159ae0) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7f0b28fe7120) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f0b2903f780) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7f0b28f52600) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7f0b28f52660) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f0b28a64d20) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7f0b28a950c0) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7f0b28af3120) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7f0b28af3240) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7f0b28b438a0) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7f0b28b43840) 0 empty
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7f0b28b43900) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7f0b28b43d80) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7f0b28b43de0) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7f0b28768420) 0
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7f0b28768b40) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7f0b28768e40) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7f0b28768f60) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7f0b287b3240) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7f0b287ce000) 0
+ QPropertyObserverBase (0x0x7f0b287b33c0) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7f0b287ff2a0) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7f0b287ffea0) 0
+
+Class QBindingStatus
+ size=16 align=8
+ base size=16 base align=8
+QBindingStatus (0x0x7f0b28853180) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7f0b288531e0) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f0b28924d80) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f0b285caae0) 0 empty
+
+Vtable for QObjectData
+QObjectData::_ZTV11QObjectData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QObjectData)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+
+Class QObjectData
+ size=80 align=8
+ base size=80 base align=8
+QObjectData (0x0x7f0b286a2480) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f0b286a2de0) 0 empty
+
+Vtable for QObject
+QObject::_ZTV7QObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QObject)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QObject::qt_metacall
+40 (int (*)(...))QObject::~QObject
+48 (int (*)(...))QObject::~QObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QObject
+ size=16 align=8
+ base size=16 base align=8
+QObject (0x0x7f0b286a2d80) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f0b28376d20) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f0b283b8600) 0 empty
+
+Vtable for QAbstractAnimation
+QAbstractAnimation::_ZTV18QAbstractAnimation: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractAnimation)
+16 (int (*)(...))QAbstractAnimation::metaObject
+24 (int (*)(...))QAbstractAnimation::qt_metacast
+32 (int (*)(...))QAbstractAnimation::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAbstractAnimation
+ size=16 align=8
+ base size=16 base align=8
+QAbstractAnimation (0x0x7f0b2837c1a0) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+ QObject (0x0x7f0b283b85a0) 0
+ primary-for QAbstractAnimation (0x0x7f0b2837c1a0)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f0b283b8960) 0 empty
+
+Vtable for QAnimationDriver
+QAnimationDriver::_ZTV16QAnimationDriver: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAnimationDriver)
+16 (int (*)(...))QAnimationDriver::metaObject
+24 (int (*)(...))QAnimationDriver::qt_metacast
+32 (int (*)(...))QAnimationDriver::qt_metacall
+40 (int (*)(...))QAnimationDriver::~QAnimationDriver
+48 (int (*)(...))QAnimationDriver::~QAnimationDriver
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAnimationDriver::advance
+120 (int (*)(...))QAnimationDriver::elapsed
+128 (int (*)(...))QAnimationDriver::start
+136 (int (*)(...))QAnimationDriver::stop
+
+Class QAnimationDriver
+ size=16 align=8
+ base size=16 base align=8
+QAnimationDriver (0x0x7f0b2837c208) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+ QObject (0x0x7f0b283b8900) 0
+ primary-for QAnimationDriver (0x0x7f0b2837c208)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f0b283b8b40) 0 empty
+
+Vtable for QEventLoop
+QEventLoop::_ZTV10QEventLoop: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QEventLoop)
+16 (int (*)(...))QEventLoop::metaObject
+24 (int (*)(...))QEventLoop::qt_metacast
+32 (int (*)(...))QEventLoop::qt_metacall
+40 (int (*)(...))QEventLoop::~QEventLoop
+48 (int (*)(...))QEventLoop::~QEventLoop
+56 (int (*)(...))QEventLoop::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QEventLoop
+ size=16 align=8
+ base size=16 base align=8
+QEventLoop (0x0x7f0b2837c270) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+ QObject (0x0x7f0b283b8ae0) 0
+ primary-for QEventLoop (0x0x7f0b2837c270)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f0b2841b000) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f0b2841b0c0) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f0b2841b120) 0
+
+Vtable for QAbstractEventDispatcher
+QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractEventDispatcher)
+16 (int (*)(...))QAbstractEventDispatcher::metaObject
+24 (int (*)(...))QAbstractEventDispatcher::qt_metacast
+32 (int (*)(...))QAbstractEventDispatcher::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))QAbstractEventDispatcher::startingUp
+200 (int (*)(...))QAbstractEventDispatcher::closingDown
+
+Class QAbstractEventDispatcher
+ size=16 align=8
+ base size=16 base align=8
+QAbstractEventDispatcher (0x0x7f0b2837c410) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+ QObject (0x0x7f0b2841b060) 0
+ primary-for QAbstractEventDispatcher (0x0x7f0b2837c410)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f0b2844e8a0) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7f0b28317360) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7f0b28317300) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7f0b28317f60) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7f0b284b4680) 0
+ QStringConverterBase (0x0x7f0b28317f00) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7f0b284b46e8) 0
+ QStringConverter (0x0x7f0b284b4750) 0
+ QStringConverterBase (0x0x7f0b27f6d960) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7f0b284b47b8) 0
+ QStringConverter (0x0x7f0b284b4820) 0
+ QStringConverterBase (0x0x7f0b27f8d7e0) 0 empty
+
+Vtable for QTextStream
+QTextStream::_ZTV11QTextStream: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTextStream)
+16 (int (*)(...))QTextStream::~QTextStream
+24 (int (*)(...))QTextStream::~QTextStream
+
+Class QTextStream
+ size=16 align=8
+ base size=16 base align=8
+QTextStream (0x0x7f0b284b4888) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+ QIODeviceBase (0x0x7f0b27fb24e0) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f0b27fb2ba0) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7f0b28084c00) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f0b280cf660) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f0b280cf7e0) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7f0b27d8b9c0) 0 empty
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7f0b27da59c0) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f0b27d6d340) 0
+ QIODeviceBase (0x0x7f0b27da5960) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f0b27ed0900) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f0b27ed09c0) 0 empty
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7f0b27ca5420) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7f0b27ca5480) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7f0b27ca53c0) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7f0b27a47840) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7f0b27a47a80) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7f0b27a47c60) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7f0b27a89ba0) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f0b27ad1ba0) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f0b27b20d80) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f0b277b0660) 0 empty
+
+Vtable for QAbstractItemModel
+QAbstractItemModel::_ZTV18QAbstractItemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractItemModel)
+16 (int (*)(...))QAbstractItemModel::metaObject
+24 (int (*)(...))QAbstractItemModel::qt_metacast
+32 (int (*)(...))QAbstractItemModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractItemModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractItemModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractItemModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModel (0x0x7f0b277b8410) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+ QObject (0x0x7f0b277b0600) 0
+ primary-for QAbstractItemModel (0x0x7f0b277b8410)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f0b278e5360) 0 empty
+
+Vtable for QAbstractTableModel
+QAbstractTableModel::_ZTV19QAbstractTableModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractTableModel)
+16 (int (*)(...))QAbstractTableModel::metaObject
+24 (int (*)(...))QAbstractTableModel::qt_metacast
+32 (int (*)(...))QAbstractTableModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractTableModel::index
+120 (int (*)(...))QAbstractTableModel::parent
+128 (int (*)(...))QAbstractTableModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractTableModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractTableModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractTableModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractTableModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTableModel (0x0x7f0b277b8c98) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+ QAbstractItemModel (0x0x7f0b277b8d00) 0
+ primary-for QAbstractTableModel (0x0x7f0b277b8c98)
+ QObject (0x0x7f0b278e5300) 0
+ primary-for QAbstractItemModel (0x0x7f0b277b8d00)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f0b278e5480) 0 empty
+
+Vtable for QAbstractListModel
+QAbstractListModel::_ZTV18QAbstractListModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractListModel)
+16 (int (*)(...))QAbstractListModel::metaObject
+24 (int (*)(...))QAbstractListModel::qt_metacast
+32 (int (*)(...))QAbstractListModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QAbstractListModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractListModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractListModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractListModel (0x0x7f0b277b8d68) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+ QAbstractItemModel (0x0x7f0b277b8dd0) 0
+ primary-for QAbstractListModel (0x0x7f0b277b8d68)
+ QObject (0x0x7f0b278e5420) 0
+ primary-for QAbstractItemModel (0x0x7f0b277b8dd0)
+
+Vtable for QAbstractNativeEventFilter
+QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractNativeEventFilter)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractNativeEventFilter
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNativeEventFilter (0x0x7f0b2792d8a0) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f0b2792d960) 0 empty
+
+Vtable for QAbstractProxyModel
+QAbstractProxyModel::_ZTV19QAbstractProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractProxyModel)
+16 (int (*)(...))QAbstractProxyModel::metaObject
+24 (int (*)(...))QAbstractProxyModel::qt_metacast
+32 (int (*)(...))QAbstractProxyModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractProxyModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QAbstractProxyModel::headerData
+184 (int (*)(...))QAbstractProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QAbstractProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QAbstractProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QAbstractProxyModel::setSourceModel
+416 (int (*)(...))__cxa_pure_virtual
+424 (int (*)(...))__cxa_pure_virtual
+432 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+440 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QAbstractProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractProxyModel (0x0x7f0b2793b1a0) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+ QAbstractItemModel (0x0x7f0b2793b208) 0
+ primary-for QAbstractProxyModel (0x0x7f0b2793b1a0)
+ QObject (0x0x7f0b2792d900) 0
+ primary-for QAbstractItemModel (0x0x7f0b2793b208)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f0b2792db40) 0 empty
+
+Vtable for QAnimationGroup
+QAnimationGroup::_ZTV15QAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAnimationGroup)
+16 (int (*)(...))QAnimationGroup::metaObject
+24 (int (*)(...))QAnimationGroup::qt_metacast
+32 (int (*)(...))QAnimationGroup::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QAnimationGroup (0x0x7f0b2793b270) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+ QAbstractAnimation (0x0x7f0b2793b2d8) 0
+ primary-for QAnimationGroup (0x0x7f0b2793b270)
+ QObject (0x0x7f0b2792dae0) 0
+ primary-for QAbstractAnimation (0x0x7f0b2793b2d8)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7f0b2793b410) 0
+ QIterator<QMetaAssociation> (0x0x7f0b2793b478) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f0b2792df60) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7f0b2793b5b0) 0
+ QConstIterator<QMetaAssociation> (0x0x7f0b2793b618) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f0b2759a4e0) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7f0b2793b6e8) 0
+ QIterable<QMetaAssociation> (0x0x7f0b2759aa20) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f0b2769e540) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7f0b276ff2a0) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7f0b277301e0) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f0b27756d20) 0 empty
+
+Vtable for QIODevice
+QIODevice::_ZTV9QIODevice: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QIODevice)
+16 (int (*)(...))QIODevice::metaObject
+24 (int (*)(...))QIODevice::qt_metacast
+32 (int (*)(...))QIODevice::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIODevice::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QIODevice::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))__cxa_pure_virtual
+
+Class QIODevice
+ size=16 align=8
+ base size=16 base align=8
+QIODevice (0x0x7f0b2736c070) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+ QObject (0x0x7f0b27756c60) 0
+ primary-for QIODevice (0x0x7f0b2736c070)
+ QIODeviceBase (0x0x7f0b27756cc0) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f0b2739a0c0) 0 empty
+
+Vtable for QBuffer
+QBuffer::_ZTV7QBuffer: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QBuffer)
+16 (int (*)(...))QBuffer::metaObject
+24 (int (*)(...))QBuffer::qt_metacast
+32 (int (*)(...))QBuffer::qt_metacall
+40 (int (*)(...))QBuffer::~QBuffer
+48 (int (*)(...))QBuffer::~QBuffer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QBuffer::connectNotify
+104 (int (*)(...))QBuffer::disconnectNotify
+112 (int (*)(...))QIODevice::isSequential
+120 (int (*)(...))QBuffer::open
+128 (int (*)(...))QBuffer::close
+136 (int (*)(...))QBuffer::pos
+144 (int (*)(...))QBuffer::size
+152 (int (*)(...))QBuffer::seek
+160 (int (*)(...))QBuffer::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QBuffer::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QBuffer::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QBuffer::writeData
+
+Class QBuffer
+ size=16 align=8
+ base size=16 base align=8
+QBuffer (0x0x7f0b27361618) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+ QIODevice (0x0x7f0b2736c0e0) 0
+ primary-for QBuffer (0x0x7f0b27361618)
+ QObject (0x0x7f0b2739a000) 0
+ primary-for QIODevice (0x0x7f0b2736c0e0)
+ QIODeviceBase (0x0x7f0b2739a060) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f0b2739a300) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7f0b2739a2a0) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f0b2739a480) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f0b2739a420) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f0b273fdba0) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7f0b27511960) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7f0b27511900) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f0b27511cc0) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f0b271b5300) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f0b27201540) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f0b272015a0) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f0b272014e0) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7f0b272867e0) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f0b272b1060) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f0b26f59240) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7f0b26fbaa20) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f0b26fbaa80) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7f0b26fbac60) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f0b2704f960) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f0b271374e0) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7f0b26da6660) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7f0b26da6720) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7f0b26edc000) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7f0b26f1b540) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7f0b26f1b5a0) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7f0b26f1b4e0) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7f0b26c09b40) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7f0b26c09ba0) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7f0b26c09ae0) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7f0b26a1dc00) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7f0b26a1dba0) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7f0b26b04420) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7f0b26b41d80) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f0b2676e7e0) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f0b2676e9c0) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f0b26832420) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7f0b2689dcc0) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7f0b2689dd20) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7f0b2689dd80) 0 empty
+
+Vtable for QEvent
+QEvent::_ZTV6QEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QEvent)
+16 (int (*)(...))QEvent::~QEvent
+24 (int (*)(...))QEvent::~QEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QEvent
+ size=16 align=8
+ base size=16 base align=8
+QEvent (0x0x7f0b2689dc60) 0
+ vptr=((& QEvent::_ZTV6QEvent) + 16)
+
+Vtable for QTimerEvent
+QTimerEvent::_ZTV11QTimerEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTimerEvent)
+16 (int (*)(...))QTimerEvent::~QTimerEvent
+24 (int (*)(...))QTimerEvent::~QTimerEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QTimerEvent::clone
+
+Class QTimerEvent
+ size=24 align=8
+ base size=20 base align=8
+QTimerEvent (0x0x7f0b268ab410) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+ QEvent (0x0x7f0b268f6720) 0
+ primary-for QTimerEvent (0x0x7f0b268ab410)
+
+Vtable for QChildEvent
+QChildEvent::_ZTV11QChildEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QChildEvent)
+16 (int (*)(...))QChildEvent::~QChildEvent
+24 (int (*)(...))QChildEvent::~QChildEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QChildEvent::clone
+
+Class QChildEvent
+ size=24 align=8
+ base size=24 base align=8
+QChildEvent (0x0x7f0b268ab478) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+ QEvent (0x0x7f0b268f6c00) 0
+ primary-for QChildEvent (0x0x7f0b268ab478)
+
+Vtable for QDynamicPropertyChangeEvent
+QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDynamicPropertyChangeEvent)
+16 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+24 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDynamicPropertyChangeEvent::clone
+
+Class QDynamicPropertyChangeEvent
+ size=40 align=8
+ base size=40 base align=8
+QDynamicPropertyChangeEvent (0x0x7f0b268ab4e0) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+ QEvent (0x0x7f0b26927060) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f0b268ab4e0)
+
+Vtable for QDeferredDeleteEvent
+QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDeferredDeleteEvent)
+16 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+24 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDeferredDeleteEvent::clone
+
+Class QDeferredDeleteEvent
+ size=24 align=8
+ base size=20 base align=8
+QDeferredDeleteEvent (0x0x7f0b268ab548) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+ QEvent (0x0x7f0b26927300) 0
+ primary-for QDeferredDeleteEvent (0x0x7f0b268ab548)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f0b26927660) 0 empty
+
+Vtable for QCoreApplication
+QCoreApplication::_ZTV16QCoreApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QCoreApplication)
+16 (int (*)(...))QCoreApplication::metaObject
+24 (int (*)(...))QCoreApplication::qt_metacast
+32 (int (*)(...))QCoreApplication::qt_metacall
+40 (int (*)(...))QCoreApplication::~QCoreApplication
+48 (int (*)(...))QCoreApplication::~QCoreApplication
+56 (int (*)(...))QCoreApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCoreApplication::notify
+120 (int (*)(...))QCoreApplication::compressEvent
+
+Class QCoreApplication
+ size=16 align=8
+ base size=16 base align=8
+QCoreApplication (0x0x7f0b268ab5b0) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+ QObject (0x0x7f0b26927600) 0
+ primary-for QCoreApplication (0x0x7f0b268ab5b0)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f0b26927840) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7f0b26927960) 0 empty
+
+Vtable for QConcatenateTablesProxyModel
+QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QConcatenateTablesProxyModel)
+16 (int (*)(...))QConcatenateTablesProxyModel::metaObject
+24 (int (*)(...))QConcatenateTablesProxyModel::qt_metacast
+32 (int (*)(...))QConcatenateTablesProxyModel::qt_metacall
+40 (int (*)(...))QConcatenateTablesProxyModel::~QConcatenateTablesProxyModel
+48 (int (*)(...))QConcatenateTablesProxyModel::~QConcatenateTablesProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QConcatenateTablesProxyModel::index
+120 (int (*)(...))QConcatenateTablesProxyModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QConcatenateTablesProxyModel::rowCount
+144 (int (*)(...))QConcatenateTablesProxyModel::columnCount
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))QConcatenateTablesProxyModel::data
+168 (int (*)(...))QConcatenateTablesProxyModel::setData
+176 (int (*)(...))QConcatenateTablesProxyModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QConcatenateTablesProxyModel::itemData
+200 (int (*)(...))QConcatenateTablesProxyModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QConcatenateTablesProxyModel::mimeTypes
+224 (int (*)(...))QConcatenateTablesProxyModel::mimeData
+232 (int (*)(...))QConcatenateTablesProxyModel::canDropMimeData
+240 (int (*)(...))QConcatenateTablesProxyModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QConcatenateTablesProxyModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QConcatenateTablesProxyModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QConcatenateTablesProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QConcatenateTablesProxyModel (0x0x7f0b268ab618) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+ QAbstractItemModel (0x0x7f0b268ab680) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7f0b268ab618)
+ QObject (0x0x7f0b26927900) 0
+ primary-for QAbstractItemModel (0x0x7f0b268ab680)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f0b26927ae0) 0
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f0b26927c00) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f0b26927f00) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f0b2667f060) 0 empty
+
+Vtable for QFileDevice
+QFileDevice::_ZTV11QFileDevice: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFileDevice)
+16 (int (*)(...))QFileDevice::metaObject
+24 (int (*)(...))QFileDevice::qt_metacast
+32 (int (*)(...))QFileDevice::qt_metacall
+40 (int (*)(...))QFileDevice::~QFileDevice
+48 (int (*)(...))QFileDevice::~QFileDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFileDevice::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QFileDevice::fileName
+256 (int (*)(...))QFileDevice::resize
+264 (int (*)(...))QFileDevice::permissions
+272 (int (*)(...))QFileDevice::setPermissions
+
+Class QFileDevice
+ size=16 align=8
+ base size=16 base align=8
+QFileDevice (0x0x7f0b2666f888) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+ QIODevice (0x0x7f0b26617620) 0
+ primary-for QFileDevice (0x0x7f0b2666f888)
+ QObject (0x0x7f0b26660f60) 0
+ primary-for QIODevice (0x0x7f0b26617620)
+ QIODeviceBase (0x0x7f0b2667f000) 0 empty
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f0b2667fba0) 0 empty
+
+Vtable for QFile
+QFile::_ZTV5QFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QFile)
+16 (int (*)(...))QFile::metaObject
+24 (int (*)(...))QFile::qt_metacast
+32 (int (*)(...))QFile::qt_metacall
+40 (int (*)(...))QFile::~QFile
+48 (int (*)(...))QFile::~QFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QFile::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFile::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QFile::fileName
+256 (int (*)(...))QFile::resize
+264 (int (*)(...))QFile::permissions
+272 (int (*)(...))QFile::setPermissions
+
+Class QFile
+ size=16 align=8
+ base size=16 base align=8
+QFile (0x0x7f0b2666fc98) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+ QFileDevice (0x0x7f0b2666fd00) 0
+ primary-for QFile (0x0x7f0b2666fc98)
+ QIODevice (0x0x7f0b266855b0) 0
+ primary-for QFileDevice (0x0x7f0b2666fd00)
+ QObject (0x0x7f0b2667fae0) 0
+ primary-for QIODevice (0x0x7f0b266855b0)
+ QIODeviceBase (0x0x7f0b2667fb40) 0 empty
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f0b2667fe40) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f0b2639c8a0) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f0b26458b40) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f0b26458f00) 0
+
+Vtable for QException
+QException::_ZTV10QException: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QException)
+16 (int (*)(...))QException::~QException
+24 (int (*)(...))QException::~QException
+32 (int (*)(...))std::exception::what
+40 (int (*)(...))QException::raise
+48 (int (*)(...))QException::clone
+
+Class QException
+ size=8 align=8
+ base size=8 base align=8
+QException (0x0x7f0b265368f0) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+ std::exception (0x0x7f0b2616b660) 0 nearly-empty
+ primary-for QException (0x0x7f0b265368f0)
+
+Vtable for QUnhandledException
+QUnhandledException::_ZTV19QUnhandledException: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QUnhandledException)
+16 (int (*)(...))QUnhandledException::~QUnhandledException
+24 (int (*)(...))QUnhandledException::~QUnhandledException
+32 (int (*)(...))std::exception::what
+40 (int (*)(...))QUnhandledException::raise
+48 (int (*)(...))QUnhandledException::clone
+
+Class QUnhandledException
+ size=16 align=8
+ base size=16 base align=8
+QUnhandledException (0x0x7f0b26536958) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+ QException (0x0x7f0b265369c0) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f0b26536958)
+ std::exception (0x0x7f0b2616b6c0) 0 nearly-empty
+ primary-for QException (0x0x7f0b265369c0)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f0b261b9540) 0
+
+Vtable for QFactoryInterface
+QFactoryInterface::_ZTV17QFactoryInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFactoryInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QFactoryInterface
+ size=8 align=8
+ base size=8 base align=8
+QFactoryInterface (0x0x7f0b261b95a0) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f0b261b97e0) 0 empty
+
+Vtable for QFileSelector
+QFileSelector::_ZTV13QFileSelector: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QFileSelector)
+16 (int (*)(...))QFileSelector::metaObject
+24 (int (*)(...))QFileSelector::qt_metacast
+32 (int (*)(...))QFileSelector::qt_metacall
+40 (int (*)(...))QFileSelector::~QFileSelector
+48 (int (*)(...))QFileSelector::~QFileSelector
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSelector
+ size=16 align=8
+ base size=16 base align=8
+QFileSelector (0x0x7f0b261b3bc8) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+ QObject (0x0x7f0b261b9780) 0
+ primary-for QFileSelector (0x0x7f0b261b3bc8)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f0b261b99c0) 0 empty
+
+Vtable for QFileSystemWatcher
+QFileSystemWatcher::_ZTV18QFileSystemWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFileSystemWatcher)
+16 (int (*)(...))QFileSystemWatcher::metaObject
+24 (int (*)(...))QFileSystemWatcher::qt_metacast
+32 (int (*)(...))QFileSystemWatcher::qt_metacall
+40 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+48 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSystemWatcher
+ size=16 align=8
+ base size=16 base align=8
+QFileSystemWatcher (0x0x7f0b261b3c30) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+ QObject (0x0x7f0b261b9960) 0
+ primary-for QFileSystemWatcher (0x0x7f0b261b3c30)
+
+Vtable for QRunnable
+QRunnable::_ZTV9QRunnable: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QRunnable)
+16 (int (*)(...))__cxa_pure_virtual
+24 0
+32 0
+
+Class QRunnable
+ size=16 align=8
+ base size=9 base align=8
+QRunnable (0x0x7f0b261b9b40) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f0b261b9d20) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f0b261b3d00) 0
+ QBasicMutex (0x0x7f0b26238a80) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7f0b26238ea0) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f0b262634e0) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f0b26263ae0) 0
+
+Vtable for QtPrivate::ResultStoreBase
+QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9QtPrivate15ResultStoreBaseE)
+16 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+24 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+
+Class QtPrivate::ResultStoreBase
+ size=48 align=8
+ base size=44 base align=8
+QtPrivate::ResultStoreBase (0x0x7f0b26305780) 0
+ vptr=((& QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE) + 16)
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f0b26027180) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f0b26013f70) 0
+ std::__mutex_base (0x0x7f0b260271e0) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f0b260273c0) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f0b26027420) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f0b26027480) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f0b26027ea0) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f0b2605b000) 0
+ std::__recursive_mutex_base (0x0x7f0b26027f00) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f0b264d2e00) 0
+ std::__mutex_base (0x0x7f0b26065300) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7f0b26065360) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f0b264d2e70) 0
+ std::__recursive_mutex_base (0x0x7f0b26065720) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f0b26065780) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f0b260a15a0) 0
+
+Vtable for QFutureInterfaceBase
+QFutureInterfaceBase::_ZTV20QFutureInterfaceBase: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QFutureInterfaceBase)
+16 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+24 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+
+Class QFutureInterfaceBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureInterfaceBase (0x0x7f0b260a17e0) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Vtable for std::thread::_State
+std::thread::_State::_ZTVNSt6thread6_StateE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6thread6_StateE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class std::thread::_State
+ size=8 align=8
+ base size=8 base align=8
+std::thread::_State (0x0x7f0b260f2720) 0 nearly-empty
+ vptr=((& std::thread::_State::_ZTVNSt6thread6_StateE) + 16)
+
+Class std::thread::id
+ size=8 align=8
+ base size=8 base align=8
+std::thread::id (0x0x7f0b260f2780) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f0b260f26c0) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f0b25ed19c0) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f0b25ed1d80) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f0b25ed1de0) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f0b25bbf360) 0 empty
+
+Vtable for std::future_error
+std::future_error::_ZTVSt12future_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12future_error)
+16 (int (*)(...))std::future_error::~future_error
+24 (int (*)(...))std::future_error::~future_error
+32 (int (*)(...))std::future_error::what
+
+Class std::future_error
+ size=32 align=8
+ base size=32 base align=8
+std::future_error (0x0x7f0b25bca208) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+ std::logic_error (0x0x7f0b25bca270) 0
+ primary-for std::future_error (0x0x7f0b25bca208)
+ std::exception (0x0x7f0b25bbfa80) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f0b25bca270)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f0b25bf11e0) 0 empty
+
+Vtable for std::__future_base::_Result_base
+std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base12_Result_baseE)
+16 (int (*)(...))__cxa_pure_virtual
+24 0
+32 0
+
+Class std::__future_base::_Result_base
+ size=16 align=8
+ base size=16 base align=8
+std::__future_base::_Result_base (0x0x7f0b25bf1180) 0
+ vptr=((& std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE) + 16)
+
+Class std::__future_base::_State_baseV2::__exception_ptr_tag
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_State_baseV2::__exception_ptr_tag (0x0x7f0b25d32c00) 0 empty
+
+Class std::__future_base::_State_baseV2::_Make_ready
+ size=32 align=8
+ base size=32 base align=8
+std::__future_base::_State_baseV2::_Make_ready (0x0x7f0b25d31a28) 0
+ std::__at_thread_exit_elt (0x0x7f0b25d32cc0) 0
+
+Vtable for std::__future_base::_State_baseV2
+std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base13_State_baseV2E)
+16 (int (*)(...))std::__future_base::_State_baseV2::~_State_baseV2
+24 (int (*)(...))std::__future_base::_State_baseV2::~_State_baseV2
+32 (int (*)(...))std::__future_base::_State_baseV2::_M_complete_async
+40 (int (*)(...))std::__future_base::_State_baseV2::_M_is_deferred_future
+
+Class std::__future_base::_State_baseV2
+ size=32 align=8
+ base size=28 base align=8
+std::__future_base::_State_baseV2 (0x0x7f0b25bf1360) 0
+ vptr=((& std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E) + 16)
+
+Class std::__future_base
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base (0x0x7f0b25bf1120) 0 empty
+
+Vtable for std::__future_base::_Async_state_commonV2
+std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base21_Async_state_commonV2E)
+16 (int (*)(...))std::__future_base::_Async_state_commonV2::~_Async_state_commonV2
+24 (int (*)(...))std::__future_base::_Async_state_commonV2::~_Async_state_commonV2
+32 (int (*)(...))std::__future_base::_Async_state_commonV2::_M_complete_async
+40 (int (*)(...))std::__future_base::_State_baseV2::_M_is_deferred_future
+
+Class std::__future_base::_Async_state_commonV2
+ size=48 align=8
+ base size=44 base align=8
+std::__future_base::_Async_state_commonV2 (0x0x7f0b255dbe38) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+ std::__future_base::_State_baseV2 (0x0x7f0b2562f9c0) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f0b255dbe38)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f0b256672a0) 0 empty
+
+Vtable for QThread
+QThread::_ZTV7QThread: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QThread)
+16 (int (*)(...))QThread::metaObject
+24 (int (*)(...))QThread::qt_metacast
+32 (int (*)(...))QThread::qt_metacall
+40 (int (*)(...))QThread::~QThread
+48 (int (*)(...))QThread::~QThread
+56 (int (*)(...))QThread::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QThread::run
+
+Class QThread
+ size=16 align=8
+ base size=16 base align=8
+QThread (0x0x7f0b25662138) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+ QObject (0x0x7f0b25667240) 0
+ primary-for QThread (0x0x7f0b25662138)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f0b25667660) 0 empty
+
+Vtable for QThreadPool
+QThreadPool::_ZTV11QThreadPool: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QThreadPool)
+16 (int (*)(...))QThreadPool::metaObject
+24 (int (*)(...))QThreadPool::qt_metacast
+32 (int (*)(...))QThreadPool::qt_metacall
+40 (int (*)(...))QThreadPool::~QThreadPool
+48 (int (*)(...))QThreadPool::~QThreadPool
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QThreadPool
+ size=16 align=8
+ base size=16 base align=8
+QThreadPool (0x0x7f0b256621a0) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+ QObject (0x0x7f0b25667600) 0
+ primary-for QThreadPool (0x0x7f0b256621a0)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f0b25436d80) 0 empty
+
+Vtable for QFutureWatcherBase
+QFutureWatcherBase::_ZTV18QFutureWatcherBase: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFutureWatcherBase)
+16 (int (*)(...))QFutureWatcherBase::metaObject
+24 (int (*)(...))QFutureWatcherBase::qt_metacast
+32 (int (*)(...))QFutureWatcherBase::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QFutureWatcherBase::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QFutureWatcherBase::connectNotify
+104 (int (*)(...))QFutureWatcherBase::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QFutureWatcherBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureWatcherBase (0x0x7f0b253a8e38) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+ QObject (0x0x7f0b25436d20) 0
+ primary-for QFutureWatcherBase (0x0x7f0b253a8e38)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f0b25465300) 0 empty
+
+Vtable for QIdentityProxyModel
+QIdentityProxyModel::_ZTV19QIdentityProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QIdentityProxyModel)
+16 (int (*)(...))QIdentityProxyModel::metaObject
+24 (int (*)(...))QIdentityProxyModel::qt_metacast
+32 (int (*)(...))QIdentityProxyModel::qt_metacall
+40 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+48 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIdentityProxyModel::index
+120 (int (*)(...))QIdentityProxyModel::parent
+128 (int (*)(...))QIdentityProxyModel::sibling
+136 (int (*)(...))QIdentityProxyModel::rowCount
+144 (int (*)(...))QIdentityProxyModel::columnCount
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QIdentityProxyModel::headerData
+184 (int (*)(...))QAbstractProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QIdentityProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QIdentityProxyModel::insertRows
+272 (int (*)(...))QIdentityProxyModel::insertColumns
+280 (int (*)(...))QIdentityProxyModel::removeRows
+288 (int (*)(...))QIdentityProxyModel::removeColumns
+296 (int (*)(...))QIdentityProxyModel::moveRows
+304 (int (*)(...))QIdentityProxyModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QAbstractProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QIdentityProxyModel::match
+360 (int (*)(...))QAbstractProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QIdentityProxyModel::setSourceModel
+416 (int (*)(...))QIdentityProxyModel::mapToSource
+424 (int (*)(...))QIdentityProxyModel::mapFromSource
+432 (int (*)(...))QIdentityProxyModel::mapSelectionToSource
+440 (int (*)(...))QIdentityProxyModel::mapSelectionFromSource
+
+Class QIdentityProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QIdentityProxyModel (0x0x7f0b25464068) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f0b254640d0) 0
+ primary-for QIdentityProxyModel (0x0x7f0b25464068)
+ QAbstractItemModel (0x0x7f0b25464138) 0
+ primary-for QAbstractProxyModel (0x0x7f0b254640d0)
+ QObject (0x0x7f0b254652a0) 0
+ primary-for QAbstractItemModel (0x0x7f0b25464138)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f0b25465480) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f0b254e4060) 0 empty
+
+Vtable for QItemSelectionModel
+QItemSelectionModel::_ZTV19QItemSelectionModel: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QItemSelectionModel)
+16 (int (*)(...))QItemSelectionModel::metaObject
+24 (int (*)(...))QItemSelectionModel::qt_metacast
+32 (int (*)(...))QItemSelectionModel::qt_metacall
+40 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+48 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QItemSelectionModel::setCurrentIndex
+120 (int (*)(...))QItemSelectionModel::select
+128 (int (*)(...))QItemSelectionModel::select
+136 (int (*)(...))QItemSelectionModel::clear
+144 (int (*)(...))QItemSelectionModel::reset
+152 (int (*)(...))QItemSelectionModel::clearCurrentIndex
+
+Class QItemSelectionModel
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionModel (0x0x7f0b254d4ea0) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+ QObject (0x0x7f0b254e4000) 0
+ primary-for QItemSelectionModel (0x0x7f0b254d4ea0)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7f0b254fd3a8) 0
+ QList<QItemSelectionRange> (0x0x7f0b254fd410) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7f0b254fd478) 0 empty
+ QListSpecialMethodsBase<QItemSelectionRange> (0x0x7f0b254e4a20) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7f0b251b1780) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7f0b251b1c60) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7f0b25215e40) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7f0b25215ea0) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7f0b25215de0) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f0b252c28a0) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f0b252c2900) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7f0b25054e40) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7f0b25054ea0) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7f0b25054de0) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f0b2510b9c0) 0 empty
+
+Vtable for QLibrary
+QLibrary::_ZTV8QLibrary: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QLibrary)
+16 (int (*)(...))QLibrary::metaObject
+24 (int (*)(...))QLibrary::qt_metacast
+32 (int (*)(...))QLibrary::qt_metacall
+40 (int (*)(...))QLibrary::~QLibrary
+48 (int (*)(...))QLibrary::~QLibrary
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QLibrary
+ size=24 align=8
+ base size=24 base align=8
+QLibrary (0x0x7f0b25114548) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+ QObject (0x0x7f0b2510b960) 0
+ primary-for QLibrary (0x0x7f0b25114548)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f0b24d6c000) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f0b2510bf60) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7f0b24e23780) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f0b24e78f00) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f0b24e9b000) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f0b24eef660) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f0b24f47d20) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f0b24bb0360) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f0b24c02b40) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f0b24c02d80) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f0b24c02d20) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f0b24c4ac60) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f0b24ce26c0) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f0b24d3af60) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7f0b24977060) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7f0b24977000) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7f0b249da2a0) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7f0b249da240) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7f0b24a23000) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f0b249fff60) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7f0b24a236c0) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7f0b24a23660) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f0b24a624e0) 0 empty
+
+Vtable for QMimeData
+QMimeData::_ZTV9QMimeData: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QMimeData)
+16 (int (*)(...))QMimeData::metaObject
+24 (int (*)(...))QMimeData::qt_metacast
+32 (int (*)(...))QMimeData::qt_metacall
+40 (int (*)(...))QMimeData::~QMimeData
+48 (int (*)(...))QMimeData::~QMimeData
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QMimeData::hasFormat
+120 (int (*)(...))QMimeData::formats
+128 (int (*)(...))QMimeData::retrieveData
+
+Class QMimeData
+ size=16 align=8
+ base size=16 base align=8
+QMimeData (0x0x7f0b24a57c98) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+ QObject (0x0x7f0b24a62480) 0
+ primary-for QMimeData (0x0x7f0b24a57c98)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f0b24a62660) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f0b24af9060) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f0b24af9120) 0 empty
+
+Vtable for QObjectCleanupHandler
+QObjectCleanupHandler::_ZTV21QObjectCleanupHandler: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QObjectCleanupHandler)
+16 (int (*)(...))QObjectCleanupHandler::metaObject
+24 (int (*)(...))QObjectCleanupHandler::qt_metacast
+32 (int (*)(...))QObjectCleanupHandler::qt_metacall
+40 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+48 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QObjectCleanupHandler
+ size=40 align=8
+ base size=40 base align=8
+QObjectCleanupHandler (0x0x7f0b24ae3e38) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+ QObject (0x0x7f0b24af90c0) 0
+ primary-for QObjectCleanupHandler (0x0x7f0b24ae3e38)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f0b24af91e0) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f0b24b36de0) 0 empty
+
+Vtable for QParallelAnimationGroup
+QParallelAnimationGroup::_ZTV23QParallelAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QParallelAnimationGroup)
+16 (int (*)(...))QParallelAnimationGroup::metaObject
+24 (int (*)(...))QParallelAnimationGroup::qt_metacast
+32 (int (*)(...))QParallelAnimationGroup::qt_metacall
+40 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+48 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+56 (int (*)(...))QParallelAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QParallelAnimationGroup::duration
+120 (int (*)(...))QParallelAnimationGroup::updateCurrentTime
+128 (int (*)(...))QParallelAnimationGroup::updateState
+136 (int (*)(...))QParallelAnimationGroup::updateDirection
+
+Class QParallelAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QParallelAnimationGroup (0x0x7f0b24b46888) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f0b24b468f0) 0
+ primary-for QParallelAnimationGroup (0x0x7f0b24b46888)
+ QAbstractAnimation (0x0x7f0b24b46958) 0
+ primary-for QAnimationGroup (0x0x7f0b24b468f0)
+ QObject (0x0x7f0b24b36d80) 0
+ primary-for QAbstractAnimation (0x0x7f0b24b46958)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f0b24764000) 0 empty
+
+Vtable for QPauseAnimation
+QPauseAnimation::_ZTV15QPauseAnimation: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QPauseAnimation)
+16 (int (*)(...))QPauseAnimation::metaObject
+24 (int (*)(...))QPauseAnimation::qt_metacast
+32 (int (*)(...))QPauseAnimation::qt_metacall
+40 (int (*)(...))QPauseAnimation::~QPauseAnimation
+48 (int (*)(...))QPauseAnimation::~QPauseAnimation
+56 (int (*)(...))QPauseAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPauseAnimation::duration
+120 (int (*)(...))QPauseAnimation::updateCurrentTime
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QPauseAnimation
+ size=16 align=8
+ base size=16 base align=8
+QPauseAnimation (0x0x7f0b24b469c0) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+ QAbstractAnimation (0x0x7f0b24b46a28) 0
+ primary-for QPauseAnimation (0x0x7f0b24b469c0)
+ QObject (0x0x7f0b24b36f60) 0
+ primary-for QAbstractAnimation (0x0x7f0b24b46a28)
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7f0b24764ae0) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7f0b24764b40) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f0b247ab5a0) 0 empty
+
+Vtable for QPluginLoader
+QPluginLoader::_ZTV13QPluginLoader: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPluginLoader)
+16 (int (*)(...))QPluginLoader::metaObject
+24 (int (*)(...))QPluginLoader::qt_metacast
+32 (int (*)(...))QPluginLoader::qt_metacall
+40 (int (*)(...))QPluginLoader::~QPluginLoader
+48 (int (*)(...))QPluginLoader::~QPluginLoader
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPluginLoader
+ size=32 align=8
+ base size=25 base align=8
+QPluginLoader (0x0x7f0b247ae618) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+ QObject (0x0x7f0b247ab540) 0
+ primary-for QPluginLoader (0x0x7f0b247ae618)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f0b247ab660) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f0b24820d80) 0 empty
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7f0b24820de0) 0 empty
+
+Vtable for QProcess
+QProcess::_ZTV8QProcess: 32 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QProcess)
+16 (int (*)(...))QProcess::metaObject
+24 (int (*)(...))QProcess::qt_metacast
+32 (int (*)(...))QProcess::qt_metacall
+40 (int (*)(...))QProcess::~QProcess
+48 (int (*)(...))QProcess::~QProcess
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QProcess::isSequential
+120 (int (*)(...))QProcess::open
+128 (int (*)(...))QProcess::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QProcess::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QProcess::waitForReadyRead
+208 (int (*)(...))QProcess::waitForBytesWritten
+216 (int (*)(...))QProcess::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QProcess::writeData
+248 (int (*)(...))QProcess::setupChildProcess
+
+Class QProcess
+ size=16 align=8
+ base size=16 base align=8
+QProcess (0x0x7f0b2482b680) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+ QIODevice (0x0x7f0b24b38ee0) 0
+ primary-for QProcess (0x0x7f0b2482b680)
+ QObject (0x0x7f0b24820cc0) 0
+ primary-for QIODevice (0x0x7f0b24b38ee0)
+ QIODeviceBase (0x0x7f0b24820d20) 0 empty
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f0b24864ba0) 0 empty
+
+Vtable for QVariantAnimation
+QVariantAnimation::_ZTV17QVariantAnimation: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QVariantAnimation)
+16 (int (*)(...))QVariantAnimation::metaObject
+24 (int (*)(...))QVariantAnimation::qt_metacast
+32 (int (*)(...))QVariantAnimation::qt_metacall
+40 (int (*)(...))QVariantAnimation::~QVariantAnimation
+48 (int (*)(...))QVariantAnimation::~QVariantAnimation
+56 (int (*)(...))QVariantAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QVariantAnimation::duration
+120 (int (*)(...))QVariantAnimation::updateCurrentTime
+128 (int (*)(...))QVariantAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+144 (int (*)(...))QVariantAnimation::updateCurrentValue
+152 (int (*)(...))QVariantAnimation::interpolated
+
+Class QVariantAnimation
+ size=16 align=8
+ base size=16 base align=8
+QVariantAnimation (0x0x7f0b2482b6e8) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+ QAbstractAnimation (0x0x7f0b2482b750) 0
+ primary-for QVariantAnimation (0x0x7f0b2482b6e8)
+ QObject (0x0x7f0b24864b40) 0
+ primary-for QAbstractAnimation (0x0x7f0b2482b750)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f0b24864de0) 0 empty
+
+Vtable for QPropertyAnimation
+QPropertyAnimation::_ZTV18QPropertyAnimation: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QPropertyAnimation)
+16 (int (*)(...))QPropertyAnimation::metaObject
+24 (int (*)(...))QPropertyAnimation::qt_metacast
+32 (int (*)(...))QPropertyAnimation::qt_metacall
+40 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+48 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+56 (int (*)(...))QPropertyAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QVariantAnimation::duration
+120 (int (*)(...))QVariantAnimation::updateCurrentTime
+128 (int (*)(...))QPropertyAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+144 (int (*)(...))QPropertyAnimation::updateCurrentValue
+152 (int (*)(...))QVariantAnimation::interpolated
+
+Class QPropertyAnimation
+ size=16 align=8
+ base size=16 base align=8
+QPropertyAnimation (0x0x7f0b2482b820) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+ QVariantAnimation (0x0x7f0b2482b888) 0
+ primary-for QPropertyAnimation (0x0x7f0b2482b820)
+ QAbstractAnimation (0x0x7f0b2482b8f0) 0
+ primary-for QVariantAnimation (0x0x7f0b2482b888)
+ QObject (0x0x7f0b24864d80) 0
+ primary-for QAbstractAnimation (0x0x7f0b2482b8f0)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f0b24924540) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f0b246049c0) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f0b24604960) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f0b243ec180) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f0b2420f0c0) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f0b2420f060) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f0b242605b0) 0
+ QRandomGenerator (0x0x7f0b24282360) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f0b24282f60) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f0b242a91e0) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f0b242a96c0) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f0b242a9ba0) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f0b23f68600) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f0b23fc8de0) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f0b2408ac00) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f0b23d69780) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f0b23d69a80) 0 empty
+
+Vtable for QSaveFile
+QSaveFile::_ZTV9QSaveFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSaveFile)
+16 (int (*)(...))QSaveFile::metaObject
+24 (int (*)(...))QSaveFile::qt_metacast
+32 (int (*)(...))QSaveFile::qt_metacall
+40 (int (*)(...))QSaveFile::~QSaveFile
+48 (int (*)(...))QSaveFile::~QSaveFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QSaveFile::open
+128 (int (*)(...))QSaveFile::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFileDevice::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QSaveFile::writeData
+248 (int (*)(...))QSaveFile::fileName
+256 (int (*)(...))QFileDevice::resize
+264 (int (*)(...))QFileDevice::permissions
+272 (int (*)(...))QFileDevice::setPermissions
+
+Class QSaveFile
+ size=16 align=8
+ base size=16 base align=8
+QSaveFile (0x0x7f0b24113820) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+ QFileDevice (0x0x7f0b24113888) 0
+ primary-for QSaveFile (0x0x7f0b24113820)
+ QIODevice (0x0x7f0b23da6000) 0
+ primary-for QFileDevice (0x0x7f0b24113888)
+ QObject (0x0x7f0b23d699c0) 0
+ primary-for QIODevice (0x0x7f0b23da6000)
+ QIODeviceBase (0x0x7f0b23d69a20) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f0b23dc10c0) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f0b23e088a0) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f0b23e6d5a0) 0 empty
+
+Vtable for QSequentialAnimationGroup
+QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QSequentialAnimationGroup)
+16 (int (*)(...))QSequentialAnimationGroup::metaObject
+24 (int (*)(...))QSequentialAnimationGroup::qt_metacast
+32 (int (*)(...))QSequentialAnimationGroup::qt_metacall
+40 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+48 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+56 (int (*)(...))QSequentialAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSequentialAnimationGroup::duration
+120 (int (*)(...))QSequentialAnimationGroup::updateCurrentTime
+128 (int (*)(...))QSequentialAnimationGroup::updateState
+136 (int (*)(...))QSequentialAnimationGroup::updateDirection
+
+Class QSequentialAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QSequentialAnimationGroup (0x0x7f0b23e74410) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f0b23e74478) 0
+ primary-for QSequentialAnimationGroup (0x0x7f0b23e74410)
+ QAbstractAnimation (0x0x7f0b23e744e0) 0
+ primary-for QAnimationGroup (0x0x7f0b23e74478)
+ QObject (0x0x7f0b23e6d540) 0
+ primary-for QAbstractAnimation (0x0x7f0b23e744e0)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7f0b23e74618) 0
+ QIterator<QMetaSequence> (0x0x7f0b23e74680) 0
+ QBaseIterator<QMetaSequence> (0x0x7f0b23e6d900) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7f0b23e74750) 0
+ QConstIterator<QMetaSequence> (0x0x7f0b23e747b8) 0
+ QBaseIterator<QMetaSequence> (0x0x7f0b23e6dea0) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7f0b23e74820) 0
+ QIterable<QMetaSequence> (0x0x7f0b23ec33c0) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f0b23ba19c0) 0 empty
+
+Vtable for QSettings
+QSettings::_ZTV9QSettings: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSettings)
+16 (int (*)(...))QSettings::metaObject
+24 (int (*)(...))QSettings::qt_metacast
+32 (int (*)(...))QSettings::qt_metacall
+40 (int (*)(...))QSettings::~QSettings
+48 (int (*)(...))QSettings::~QSettings
+56 (int (*)(...))QSettings::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSettings
+ size=16 align=8
+ base size=16 base align=8
+QSettings (0x0x7f0b23ba0c30) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+ QObject (0x0x7f0b23ba1960) 0
+ primary-for QSettings (0x0x7f0b23ba0c30)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f0b23ba1de0) 0 empty
+
+Vtable for QSharedMemory
+QSharedMemory::_ZTV13QSharedMemory: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSharedMemory)
+16 (int (*)(...))QSharedMemory::metaObject
+24 (int (*)(...))QSharedMemory::qt_metacast
+32 (int (*)(...))QSharedMemory::qt_metacall
+40 (int (*)(...))QSharedMemory::~QSharedMemory
+48 (int (*)(...))QSharedMemory::~QSharedMemory
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSharedMemory
+ size=16 align=8
+ base size=16 base align=8
+QSharedMemory (0x0x7f0b23ba0c98) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+ QObject (0x0x7f0b23ba1d80) 0
+ primary-for QSharedMemory (0x0x7f0b23ba0c98)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f0b23bea000) 0 empty
+
+Vtable for QSignalMapper
+QSignalMapper::_ZTV13QSignalMapper: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSignalMapper)
+16 (int (*)(...))QSignalMapper::metaObject
+24 (int (*)(...))QSignalMapper::qt_metacast
+32 (int (*)(...))QSignalMapper::qt_metacall
+40 (int (*)(...))QSignalMapper::~QSignalMapper
+48 (int (*)(...))QSignalMapper::~QSignalMapper
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSignalMapper
+ size=16 align=8
+ base size=16 base align=8
+QSignalMapper (0x0x7f0b23ba0d00) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+ QObject (0x0x7f0b23ba1f60) 0
+ primary-for QSignalMapper (0x0x7f0b23ba0d00)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f0b22b80a20) 0 empty
+
+Vtable for QSocketNotifier
+QSocketNotifier::_ZTV15QSocketNotifier: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSocketNotifier)
+16 (int (*)(...))QSocketNotifier::metaObject
+24 (int (*)(...))QSocketNotifier::qt_metacast
+32 (int (*)(...))QSocketNotifier::qt_metacall
+40 (int (*)(...))QSocketNotifier::~QSocketNotifier
+48 (int (*)(...))QSocketNotifier::~QSocketNotifier
+56 (int (*)(...))QSocketNotifier::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSocketNotifier
+ size=16 align=8
+ base size=16 base align=8
+QSocketNotifier (0x0x7f0b22af5b60) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+ QObject (0x0x7f0b22b809c0) 0
+ primary-for QSocketNotifier (0x0x7f0b22af5b60)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7f0b22b80ba0) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f0b22bc12a0) 0 empty
+
+Vtable for QSortFilterProxyModel
+QSortFilterProxyModel::_ZTV21QSortFilterProxyModel: 59 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QSortFilterProxyModel)
+16 (int (*)(...))QSortFilterProxyModel::metaObject
+24 (int (*)(...))QSortFilterProxyModel::qt_metacast
+32 (int (*)(...))QSortFilterProxyModel::qt_metacall
+40 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+48 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSortFilterProxyModel::index
+120 (int (*)(...))QSortFilterProxyModel::parent
+128 (int (*)(...))QSortFilterProxyModel::sibling
+136 (int (*)(...))QSortFilterProxyModel::rowCount
+144 (int (*)(...))QSortFilterProxyModel::columnCount
+152 (int (*)(...))QSortFilterProxyModel::hasChildren
+160 (int (*)(...))QSortFilterProxyModel::data
+168 (int (*)(...))QSortFilterProxyModel::setData
+176 (int (*)(...))QSortFilterProxyModel::headerData
+184 (int (*)(...))QSortFilterProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QSortFilterProxyModel::mimeTypes
+224 (int (*)(...))QSortFilterProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QSortFilterProxyModel::dropMimeData
+248 (int (*)(...))QSortFilterProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QSortFilterProxyModel::insertRows
+272 (int (*)(...))QSortFilterProxyModel::insertColumns
+280 (int (*)(...))QSortFilterProxyModel::removeRows
+288 (int (*)(...))QSortFilterProxyModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QSortFilterProxyModel::fetchMore
+320 (int (*)(...))QSortFilterProxyModel::canFetchMore
+328 (int (*)(...))QSortFilterProxyModel::flags
+336 (int (*)(...))QSortFilterProxyModel::sort
+344 (int (*)(...))QSortFilterProxyModel::buddy
+352 (int (*)(...))QSortFilterProxyModel::match
+360 (int (*)(...))QSortFilterProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QSortFilterProxyModel::setSourceModel
+416 (int (*)(...))QSortFilterProxyModel::mapToSource
+424 (int (*)(...))QSortFilterProxyModel::mapFromSource
+432 (int (*)(...))QSortFilterProxyModel::mapSelectionToSource
+440 (int (*)(...))QSortFilterProxyModel::mapSelectionFromSource
+448 (int (*)(...))QSortFilterProxyModel::filterAcceptsRow
+456 (int (*)(...))QSortFilterProxyModel::filterAcceptsColumn
+464 (int (*)(...))QSortFilterProxyModel::lessThan
+
+Class QSortFilterProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QSortFilterProxyModel (0x0x7f0b22af5bc8) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f0b22af5c30) 0
+ primary-for QSortFilterProxyModel (0x0x7f0b22af5bc8)
+ QAbstractItemModel (0x0x7f0b22af5c98) 0
+ primary-for QAbstractProxyModel (0x0x7f0b22af5c30)
+ QObject (0x0x7f0b22bc1240) 0
+ primary-for QAbstractItemModel (0x0x7f0b22af5c98)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f0b22bc1660) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f0b22bc1f60) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f0b22c95900) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f0b22928180) 0 empty
+
+Vtable for QStringListModel
+QStringListModel::_ZTV16QStringListModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QStringListModel)
+16 (int (*)(...))QStringListModel::metaObject
+24 (int (*)(...))QStringListModel::qt_metacast
+32 (int (*)(...))QStringListModel::qt_metacall
+40 (int (*)(...))QStringListModel::~QStringListModel
+48 (int (*)(...))QStringListModel::~QStringListModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QStringListModel::sibling
+136 (int (*)(...))QStringListModel::rowCount
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))QStringListModel::data
+168 (int (*)(...))QStringListModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QStringListModel::itemData
+200 (int (*)(...))QStringListModel::setItemData
+208 (int (*)(...))QStringListModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QStringListModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStringListModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QStringListModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QStringListModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStringListModel::flags
+336 (int (*)(...))QStringListModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QStringListModel
+ size=40 align=8
+ base size=40 base align=8
+QStringListModel (0x0x7f0b228e57b8) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+ QAbstractListModel (0x0x7f0b228e5820) 0
+ primary-for QStringListModel (0x0x7f0b228e57b8)
+ QAbstractItemModel (0x0x7f0b228e5888) 0
+ primary-for QAbstractListModel (0x0x7f0b228e5820)
+ QObject (0x0x7f0b22928120) 0
+ primary-for QAbstractItemModel (0x0x7f0b228e5888)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f0b22928240) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f0b22928300) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f0b22928480) 0 empty
+
+Vtable for QTemporaryFile
+QTemporaryFile::_ZTV14QTemporaryFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QTemporaryFile)
+16 (int (*)(...))QTemporaryFile::metaObject
+24 (int (*)(...))QTemporaryFile::qt_metacast
+32 (int (*)(...))QTemporaryFile::qt_metacall
+40 (int (*)(...))QTemporaryFile::~QTemporaryFile
+48 (int (*)(...))QTemporaryFile::~QTemporaryFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QTemporaryFile::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFile::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QTemporaryFile::fileName
+256 (int (*)(...))QFile::resize
+264 (int (*)(...))QFile::permissions
+272 (int (*)(...))QFile::setPermissions
+
+Class QTemporaryFile
+ size=16 align=8
+ base size=16 base align=8
+QTemporaryFile (0x0x7f0b228e58f0) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+ QFile (0x0x7f0b228e5958) 0
+ primary-for QTemporaryFile (0x0x7f0b228e58f0)
+ QFileDevice (0x0x7f0b228e59c0) 0
+ primary-for QFile (0x0x7f0b228e5958)
+ QIODevice (0x0x7f0b229194d0) 0
+ primary-for QFileDevice (0x0x7f0b228e59c0)
+ QObject (0x0x7f0b229283c0) 0
+ primary-for QIODevice (0x0x7f0b229194d0)
+ QIODeviceBase (0x0x7f0b22928420) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7f0b229286c0) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f0b22928c60) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f0b229b9360) 0 empty
+
+Vtable for QTimeLine
+QTimeLine::_ZTV9QTimeLine: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTimeLine)
+16 (int (*)(...))QTimeLine::metaObject
+24 (int (*)(...))QTimeLine::qt_metacast
+32 (int (*)(...))QTimeLine::qt_metacall
+40 (int (*)(...))QTimeLine::~QTimeLine
+48 (int (*)(...))QTimeLine::~QTimeLine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTimeLine::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTimeLine::valueForTime
+
+Class QTimeLine
+ size=16 align=8
+ base size=16 base align=8
+QTimeLine (0x0x7f0b228e5b60) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+ QObject (0x0x7f0b229b9300) 0
+ primary-for QTimeLine (0x0x7f0b228e5b60)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f0b229b9540) 0 empty
+
+Vtable for QTimer
+QTimer::_ZTV6QTimer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QTimer)
+16 (int (*)(...))QTimer::metaObject
+24 (int (*)(...))QTimer::qt_metacast
+32 (int (*)(...))QTimer::qt_metacall
+40 (int (*)(...))QTimer::~QTimer
+48 (int (*)(...))QTimer::~QTimer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTimer::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTimer
+ size=16 align=8
+ base size=16 base align=8
+QTimer (0x0x7f0b228e5bc8) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+ QObject (0x0x7f0b229b94e0) 0
+ primary-for QTimer (0x0x7f0b228e5bc8)
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7f0b22a02360) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f0b22a02300) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f0b22a873c0) 0 empty
+
+Vtable for QTranslator
+QTranslator::_ZTV11QTranslator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTranslator)
+16 (int (*)(...))QTranslator::metaObject
+24 (int (*)(...))QTranslator::qt_metacast
+32 (int (*)(...))QTranslator::qt_metacall
+40 (int (*)(...))QTranslator::~QTranslator
+48 (int (*)(...))QTranslator::~QTranslator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTranslator::translate
+120 (int (*)(...))QTranslator::isEmpty
+
+Class QTranslator
+ size=16 align=8
+ base size=16 base align=8
+QTranslator (0x0x7f0b22a828f0) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+ QObject (0x0x7f0b22a87360) 0
+ primary-for QTranslator (0x0x7f0b22a828f0)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7f0b22a875a0) 0 empty
+
+Vtable for QTransposeProxyModel
+QTransposeProxyModel::_ZTV20QTransposeProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTransposeProxyModel)
+16 (int (*)(...))QTransposeProxyModel::metaObject
+24 (int (*)(...))QTransposeProxyModel::qt_metacast
+32 (int (*)(...))QTransposeProxyModel::qt_metacall
+40 (int (*)(...))QTransposeProxyModel::~QTransposeProxyModel
+48 (int (*)(...))QTransposeProxyModel::~QTransposeProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTransposeProxyModel::index
+120 (int (*)(...))QTransposeProxyModel::parent
+128 (int (*)(...))QAbstractProxyModel::sibling
+136 (int (*)(...))QTransposeProxyModel::rowCount
+144 (int (*)(...))QTransposeProxyModel::columnCount
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QTransposeProxyModel::headerData
+184 (int (*)(...))QTransposeProxyModel::setHeaderData
+192 (int (*)(...))QTransposeProxyModel::itemData
+200 (int (*)(...))QTransposeProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QAbstractProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QTransposeProxyModel::insertRows
+272 (int (*)(...))QTransposeProxyModel::insertColumns
+280 (int (*)(...))QTransposeProxyModel::removeRows
+288 (int (*)(...))QTransposeProxyModel::removeColumns
+296 (int (*)(...))QTransposeProxyModel::moveRows
+304 (int (*)(...))QTransposeProxyModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QTransposeProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QTransposeProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QTransposeProxyModel::setSourceModel
+416 (int (*)(...))QTransposeProxyModel::mapToSource
+424 (int (*)(...))QTransposeProxyModel::mapFromSource
+432 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+440 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QTransposeProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QTransposeProxyModel (0x0x7f0b22a82958) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f0b22a829c0) 0
+ primary-for QTransposeProxyModel (0x0x7f0b22a82958)
+ QAbstractItemModel (0x0x7f0b22a82a28) 0
+ primary-for QAbstractProxyModel (0x0x7f0b22a829c0)
+ QObject (0x0x7f0b22a87540) 0
+ primary-for QAbstractItemModel (0x0x7f0b22a82a28)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f0b22a87720) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f0b22763f00) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7f0b22787060) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7f0b227aaea0) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7f0b228018f0) 0
+ QList<QXmlStreamAttribute> (0x0x7f0b22801958) 0
+ QListSpecialMethods<QXmlStreamAttribute> (0x0x7f0b228019c0) 0 empty
+ QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7f0b227f7f00) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f0b2286b840) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7f0b2288df00) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7f0b224da5a0) 0
+
+Vtable for QXmlStreamEntityResolver
+QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QXmlStreamEntityResolver)
+16 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+24 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+32 (int (*)(...))QXmlStreamEntityResolver::resolveEntity
+40 (int (*)(...))QXmlStreamEntityResolver::resolveUndeclaredEntity
+
+Class QXmlStreamEntityResolver
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamEntityResolver (0x0x7f0b22505d20) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f0b22505d80) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f0b22547360) 0
+
+Vtable for QPaintDevice
+QPaintDevice::_ZTV12QPaintDevice: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDevice
+ size=16 align=8
+ base size=10 base align=8
+QPaintDevice (0x0x7f0b22547540) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7f0b2258c000) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7f0b22613cc0) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7f0b22613c60) 0
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7f0b226a3d20) 0
+
+Class QPolygon
+ size=24 align=8
+ base size=24 base align=8
+QPolygon (0x0x7f0b2c57ed68) 0
+ QList<QPoint> (0x0x7f0b2c57ed00) 0
+ QListSpecialMethods<QPoint> (0x0x7f0b2c57ee38) 0 empty
+ QListSpecialMethodsBase<QPoint> (0x0x7f0b2cb77360) 0 empty
+
+Class QPolygonF
+ size=24 align=8
+ base size=24 base align=8
+QPolygonF (0x0x7f0b2cea0dd0) 0
+ QList<QPointF> (0x0x7f0b2cea0d68) 0
+ QListSpecialMethods<QPointF> (0x0x7f0b2ceb4138) 0 empty
+ QListSpecialMethodsBase<QPointF> (0x0x7f0b2aff5cc0) 0 empty
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7f0b2a4c8c00) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7f0b2a3844e0) 0
+
+Class QTransform::Affine
+ size=8 align=8
+ base size=8 base align=8
+QTransform::Affine (0x0x7f0b2776f0c0) 0
+
+Class QTransform
+ size=80 align=8
+ base size=74 base align=8
+QTransform (0x0x7f0b2776f000) 0
+
+Vtable for QImage
+QImage::_ZTV6QImage: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QImage)
+16 (int (*)(...))QImage::~QImage
+24 (int (*)(...))QImage::~QImage
+32 (int (*)(...))QImage::devType
+40 (int (*)(...))QImage::paintEngine
+48 (int (*)(...))QImage::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QImage
+ size=24 align=8
+ base size=24 base align=8
+QImage (0x0x7f0b2ca4e5b0) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+ QPaintDevice (0x0x7f0b2710e9c0) 0
+ primary-for QImage (0x0x7f0b2ca4e5b0)
+
+Vtable for QPixmap
+QPixmap::_ZTV7QPixmap: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QPixmap)
+16 (int (*)(...))QPixmap::~QPixmap
+24 (int (*)(...))QPixmap::~QPixmap
+32 (int (*)(...))QPixmap::devType
+40 (int (*)(...))QPixmap::paintEngine
+48 (int (*)(...))QPixmap::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPixmap
+ size=24 align=8
+ base size=24 base align=8
+QPixmap (0x0x7f0b2c768d68) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+ QPaintDevice (0x0x7f0b26458780) 0
+ primary-for QPixmap (0x0x7f0b2c768d68)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7f0b254c6ea0) 0
+
+Vtable for QAbstractFileIconProvider
+QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAbstractFileIconProvider)
+16 (int (*)(...))QAbstractFileIconProvider::~QAbstractFileIconProvider
+24 (int (*)(...))QAbstractFileIconProvider::~QAbstractFileIconProvider
+32 (int (*)(...))QAbstractFileIconProvider::icon
+40 (int (*)(...))QAbstractFileIconProvider::icon
+48 (int (*)(...))QAbstractFileIconProvider::type
+56 (int (*)(...))QAbstractFileIconProvider::setOptions
+64 (int (*)(...))QAbstractFileIconProvider::options
+
+Class QAbstractFileIconProvider
+ size=16 align=8
+ base size=16 base align=8
+QAbstractFileIconProvider (0x0x7f0b249bd360) 0
+ vptr=((& QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider) + 16)
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7f0b249ffe40) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7f0b240e5840) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7f0b227d0f00) 0
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7f0b25aa89c0) 0 empty
+
+Vtable for QScreen
+QScreen::_ZTV7QScreen: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QScreen)
+16 (int (*)(...))QScreen::metaObject
+24 (int (*)(...))QScreen::qt_metacast
+32 (int (*)(...))QScreen::qt_metacall
+40 (int (*)(...))QScreen::~QScreen
+48 (int (*)(...))QScreen::~QScreen
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QScreen
+ size=16 align=8
+ base size=16 base align=8
+QScreen (0x0x7f0b2c85f888) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+ QObject (0x0x7f0b25aa8960) 0
+ primary-for QScreen (0x0x7f0b2c85f888)
+
+Class QInputDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDevice::QPrivateSignal (0x0x7f0b25aa8ba0) 0 empty
+
+Vtable for QInputDevice
+QInputDevice::_ZTV12QInputDevice: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputDevice)
+16 (int (*)(...))QInputDevice::metaObject
+24 (int (*)(...))QInputDevice::qt_metacast
+32 (int (*)(...))QInputDevice::qt_metacall
+40 (int (*)(...))QInputDevice::~QInputDevice
+48 (int (*)(...))QInputDevice::~QInputDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QInputDevice
+ size=16 align=8
+ base size=16 base align=8
+QInputDevice (0x0x7f0b2c85f958) 0
+ vptr=((& QInputDevice::_ZTV12QInputDevice) + 16)
+ QObject (0x0x7f0b25aa8b40) 0
+ primary-for QInputDevice (0x0x7f0b2c85f958)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7f0b250744e0) 0
+
+Class QPointingDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPointingDevice::QPrivateSignal (0x0x7f0b26c2fe40) 0 empty
+
+Vtable for QPointingDevice
+QPointingDevice::_ZTV15QPointingDevice: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QPointingDevice)
+16 (int (*)(...))QPointingDevice::metaObject
+24 (int (*)(...))QPointingDevice::qt_metacast
+32 (int (*)(...))QPointingDevice::qt_metacall
+40 (int (*)(...))QPointingDevice::~QPointingDevice
+48 (int (*)(...))QPointingDevice::~QPointingDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPointingDevice
+ size=16 align=8
+ base size=16 base align=8
+QPointingDevice (0x0x7f0b2c8658f0) 0
+ vptr=((& QPointingDevice::_ZTV15QPointingDevice) + 16)
+ QInputDevice (0x0x7f0b2c865958) 0
+ primary-for QPointingDevice (0x0x7f0b2c8658f0)
+ QObject (0x0x7f0b26c2fde0) 0
+ primary-for QInputDevice (0x0x7f0b2c865958)
+
+Class QEventPoint
+ size=8 align=8
+ base size=8 base align=8
+QEventPoint (0x0x7f0b274af4e0) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7f0b2da5c300) 0
+
+Vtable for QInputEvent
+QInputEvent::_ZTV11QInputEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QInputEvent)
+16 (int (*)(...))QInputEvent::~QInputEvent
+24 (int (*)(...))QInputEvent::~QInputEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QInputEvent
+ size=40 align=8
+ base size=40 base align=8
+QInputEvent (0x0x7f0b2c8823a8) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+ QEvent (0x0x7f0b2b6372a0) 0
+ primary-for QInputEvent (0x0x7f0b2c8823a8)
+
+Vtable for QPointerEvent
+QPointerEvent::_ZTV13QPointerEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPointerEvent)
+16 (int (*)(...))QPointerEvent::~QPointerEvent
+24 (int (*)(...))QPointerEvent::~QPointerEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QPointerEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QPointerEvent::isBeginEvent
+64 (int (*)(...))QPointerEvent::isUpdateEvent
+72 (int (*)(...))QPointerEvent::isEndEvent
+
+Class QPointerEvent
+ size=64 align=8
+ base size=64 base align=8
+QPointerEvent (0x0x7f0b2c882478) 0
+ vptr=((& QPointerEvent::_ZTV13QPointerEvent) + 16)
+ QInputEvent (0x0x7f0b2c8824e0) 0
+ primary-for QPointerEvent (0x0x7f0b2c882478)
+ QEvent (0x0x7f0b2b637780) 0
+ primary-for QInputEvent (0x0x7f0b2c8824e0)
+
+Vtable for QSinglePointEvent
+QSinglePointEvent::_ZTV17QSinglePointEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSinglePointEvent)
+16 (int (*)(...))QSinglePointEvent::~QSinglePointEvent
+24 (int (*)(...))QSinglePointEvent::~QSinglePointEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QSinglePointEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QSinglePointEvent
+ size=80 align=8
+ base size=80 base align=8
+QSinglePointEvent (0x0x7f0b2c882c30) 0
+ vptr=((& QSinglePointEvent::_ZTV17QSinglePointEvent) + 16)
+ QPointerEvent (0x0x7f0b2c882c98) 0
+ primary-for QSinglePointEvent (0x0x7f0b2c882c30)
+ QInputEvent (0x0x7f0b2c882d00) 0
+ primary-for QPointerEvent (0x0x7f0b2c882c98)
+ QEvent (0x0x7f0b2a7ba660) 0
+ primary-for QInputEvent (0x0x7f0b2c882d00)
+
+Vtable for QEnterEvent
+QEnterEvent::_ZTV11QEnterEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QEnterEvent)
+16 (int (*)(...))QEnterEvent::~QEnterEvent
+24 (int (*)(...))QEnterEvent::~QEnterEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QEnterEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QEnterEvent (0x0x7f0b2c882d68) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+ QSinglePointEvent (0x0x7f0b2c882dd0) 0
+ primary-for QEnterEvent (0x0x7f0b2c882d68)
+ QPointerEvent (0x0x7f0b2c882e38) 0
+ primary-for QSinglePointEvent (0x0x7f0b2c882dd0)
+ QInputEvent (0x0x7f0b2c882f08) 0
+ primary-for QPointerEvent (0x0x7f0b2c882e38)
+ QEvent (0x0x7f0b2a7bab40) 0
+ primary-for QInputEvent (0x0x7f0b2c882f08)
+
+Vtable for QMouseEvent
+QMouseEvent::_ZTV11QMouseEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMouseEvent)
+16 (int (*)(...))QMouseEvent::~QMouseEvent
+24 (int (*)(...))QMouseEvent::~QMouseEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QMouseEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QMouseEvent
+ size=80 align=8
+ base size=80 base align=8
+QMouseEvent (0x0x7f0b2c882f70) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+ QSinglePointEvent (0x0x7f0b2c885000) 0
+ primary-for QMouseEvent (0x0x7f0b2c882f70)
+ QPointerEvent (0x0x7f0b2c885068) 0
+ primary-for QSinglePointEvent (0x0x7f0b2c885000)
+ QInputEvent (0x0x7f0b2c8850d0) 0
+ primary-for QPointerEvent (0x0x7f0b2c885068)
+ QEvent (0x0x7f0b2a7fa300) 0
+ primary-for QInputEvent (0x0x7f0b2c8850d0)
+
+Vtable for QHoverEvent
+QHoverEvent::_ZTV11QHoverEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHoverEvent)
+16 (int (*)(...))QHoverEvent::~QHoverEvent
+24 (int (*)(...))QHoverEvent::~QHoverEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QHoverEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QHoverEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QHoverEvent
+ size=96 align=8
+ base size=96 base align=8
+QHoverEvent (0x0x7f0b2c885138) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+ QSinglePointEvent (0x0x7f0b2c8851a0) 0
+ primary-for QHoverEvent (0x0x7f0b2c885138)
+ QPointerEvent (0x0x7f0b2c885208) 0
+ primary-for QSinglePointEvent (0x0x7f0b2c8851a0)
+ QInputEvent (0x0x7f0b2c885270) 0
+ primary-for QPointerEvent (0x0x7f0b2c885208)
+ QEvent (0x0x7f0b2a7fa8a0) 0
+ primary-for QInputEvent (0x0x7f0b2c885270)
+
+Vtable for QWheelEvent
+QWheelEvent::_ZTV11QWheelEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWheelEvent)
+16 (int (*)(...))QWheelEvent::~QWheelEvent
+24 (int (*)(...))QWheelEvent::~QWheelEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QWheelEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QWheelEvent::isBeginEvent
+64 (int (*)(...))QWheelEvent::isUpdateEvent
+72 (int (*)(...))QWheelEvent::isEndEvent
+
+Class QWheelEvent
+ size=96 align=8
+ base size=96 base align=8
+QWheelEvent (0x0x7f0b2c8852d8) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+ QSinglePointEvent (0x0x7f0b2c885340) 0
+ primary-for QWheelEvent (0x0x7f0b2c8852d8)
+ QPointerEvent (0x0x7f0b2c8853a8) 0
+ primary-for QSinglePointEvent (0x0x7f0b2c885340)
+ QInputEvent (0x0x7f0b2c885410) 0
+ primary-for QPointerEvent (0x0x7f0b2c8853a8)
+ QEvent (0x0x7f0b2a7facc0) 0
+ primary-for QInputEvent (0x0x7f0b2c885410)
+
+Vtable for QTabletEvent
+QTabletEvent::_ZTV12QTabletEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTabletEvent)
+16 (int (*)(...))QTabletEvent::~QTabletEvent
+24 (int (*)(...))QTabletEvent::~QTabletEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QTabletEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QTabletEvent
+ size=96 align=8
+ base size=96 base align=8
+QTabletEvent (0x0x7f0b2c8854e0) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+ QSinglePointEvent (0x0x7f0b2c885548) 0
+ primary-for QTabletEvent (0x0x7f0b2c8854e0)
+ QPointerEvent (0x0x7f0b2c8855b0) 0
+ primary-for QSinglePointEvent (0x0x7f0b2c885548)
+ QInputEvent (0x0x7f0b2c885618) 0
+ primary-for QPointerEvent (0x0x7f0b2c8855b0)
+ QEvent (0x0x7f0b2a18f1e0) 0
+ primary-for QInputEvent (0x0x7f0b2c885618)
+
+Vtable for QNativeGestureEvent
+QNativeGestureEvent::_ZTV19QNativeGestureEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNativeGestureEvent)
+16 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+24 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QNativeGestureEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QNativeGestureEvent
+ size=112 align=8
+ base size=112 base align=8
+QNativeGestureEvent (0x0x7f0b2c885680) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+ QSinglePointEvent (0x0x7f0b2c8856e8) 0
+ primary-for QNativeGestureEvent (0x0x7f0b2c885680)
+ QPointerEvent (0x0x7f0b2c885750) 0
+ primary-for QSinglePointEvent (0x0x7f0b2c8856e8)
+ QInputEvent (0x0x7f0b2c8857b8) 0
+ primary-for QPointerEvent (0x0x7f0b2c885750)
+ QEvent (0x0x7f0b2a18fa80) 0
+ primary-for QInputEvent (0x0x7f0b2c8857b8)
+
+Vtable for QKeyEvent
+QKeyEvent::_ZTV9QKeyEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QKeyEvent)
+16 (int (*)(...))QKeyEvent::~QKeyEvent
+24 (int (*)(...))QKeyEvent::~QKeyEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QKeyEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QKeyEvent
+ size=88 align=8
+ base size=82 base align=8
+QKeyEvent (0x0x7f0b2c885820) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+ QInputEvent (0x0x7f0b2c885888) 0
+ primary-for QKeyEvent (0x0x7f0b2c885820)
+ QEvent (0x0x7f0b2a18ff60) 0
+ primary-for QInputEvent (0x0x7f0b2c885888)
+
+Vtable for QFocusEvent
+QFocusEvent::_ZTV11QFocusEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusEvent)
+16 (int (*)(...))QFocusEvent::~QFocusEvent
+24 (int (*)(...))QFocusEvent::~QFocusEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QFocusEvent::clone
+
+Class QFocusEvent
+ size=24 align=8
+ base size=20 base align=8
+QFocusEvent (0x0x7f0b2c885958) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+ QEvent (0x0x7f0b2a3425a0) 0
+ primary-for QFocusEvent (0x0x7f0b2c885958)
+
+Vtable for QPaintEvent
+QPaintEvent::_ZTV11QPaintEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPaintEvent)
+16 (int (*)(...))QPaintEvent::~QPaintEvent
+24 (int (*)(...))QPaintEvent::~QPaintEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QPaintEvent::clone
+
+Class QPaintEvent
+ size=48 align=8
+ base size=41 base align=8
+QPaintEvent (0x0x7f0b2c8859c0) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+ QEvent (0x0x7f0b2a342900) 0
+ primary-for QPaintEvent (0x0x7f0b2c8859c0)
+
+Vtable for QMoveEvent
+QMoveEvent::_ZTV10QMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QMoveEvent)
+16 (int (*)(...))QMoveEvent::~QMoveEvent
+24 (int (*)(...))QMoveEvent::~QMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QMoveEvent::clone
+
+Class QMoveEvent
+ size=32 align=8
+ base size=32 base align=8
+QMoveEvent (0x0x7f0b2c885a28) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+ QEvent (0x0x7f0b2a342c00) 0
+ primary-for QMoveEvent (0x0x7f0b2c885a28)
+
+Vtable for QExposeEvent
+QExposeEvent::_ZTV12QExposeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QExposeEvent)
+16 (int (*)(...))QExposeEvent::~QExposeEvent
+24 (int (*)(...))QExposeEvent::~QExposeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QExposeEvent::clone
+
+Class QExposeEvent
+ size=24 align=8
+ base size=24 base align=8
+QExposeEvent (0x0x7f0b2c885a90) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+ QEvent (0x0x7f0b2a342f60) 0
+ primary-for QExposeEvent (0x0x7f0b2c885a90)
+
+Vtable for QPlatformSurfaceEvent
+QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QPlatformSurfaceEvent)
+16 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+24 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QPlatformSurfaceEvent::clone
+
+Class QPlatformSurfaceEvent
+ size=24 align=8
+ base size=20 base align=8
+QPlatformSurfaceEvent (0x0x7f0b2c885af8) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+ QEvent (0x0x7f0b29e22240) 0
+ primary-for QPlatformSurfaceEvent (0x0x7f0b2c885af8)
+
+Vtable for QResizeEvent
+QResizeEvent::_ZTV12QResizeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QResizeEvent)
+16 (int (*)(...))QResizeEvent::~QResizeEvent
+24 (int (*)(...))QResizeEvent::~QResizeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QResizeEvent::clone
+
+Class QResizeEvent
+ size=32 align=8
+ base size=32 base align=8
+QResizeEvent (0x0x7f0b2c885b60) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+ QEvent (0x0x7f0b29e22540) 0
+ primary-for QResizeEvent (0x0x7f0b2c885b60)
+
+Vtable for QCloseEvent
+QCloseEvent::_ZTV11QCloseEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QCloseEvent)
+16 (int (*)(...))QCloseEvent::~QCloseEvent
+24 (int (*)(...))QCloseEvent::~QCloseEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QCloseEvent
+ size=16 align=8
+ base size=16 base align=8
+QCloseEvent (0x0x7f0b2c885bc8) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+ QEvent (0x0x7f0b29e228a0) 0
+ primary-for QCloseEvent (0x0x7f0b2c885bc8)
+
+Vtable for QIconDragEvent
+QIconDragEvent::_ZTV14QIconDragEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QIconDragEvent)
+16 (int (*)(...))QIconDragEvent::~QIconDragEvent
+24 (int (*)(...))QIconDragEvent::~QIconDragEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QIconDragEvent
+ size=16 align=8
+ base size=16 base align=8
+QIconDragEvent (0x0x7f0b2c885c30) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+ QEvent (0x0x7f0b29e22900) 0
+ primary-for QIconDragEvent (0x0x7f0b2c885c30)
+
+Vtable for QShowEvent
+QShowEvent::_ZTV10QShowEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QShowEvent)
+16 (int (*)(...))QShowEvent::~QShowEvent
+24 (int (*)(...))QShowEvent::~QShowEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QShowEvent
+ size=16 align=8
+ base size=16 base align=8
+QShowEvent (0x0x7f0b2c885c98) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+ QEvent (0x0x7f0b29e22960) 0
+ primary-for QShowEvent (0x0x7f0b2c885c98)
+
+Vtable for QHideEvent
+QHideEvent::_ZTV10QHideEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHideEvent)
+16 (int (*)(...))QHideEvent::~QHideEvent
+24 (int (*)(...))QHideEvent::~QHideEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QHideEvent
+ size=16 align=8
+ base size=16 base align=8
+QHideEvent (0x0x7f0b2c885d00) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+ QEvent (0x0x7f0b29e229c0) 0
+ primary-for QHideEvent (0x0x7f0b2c885d00)
+
+Vtable for QContextMenuEvent
+QContextMenuEvent::_ZTV17QContextMenuEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QContextMenuEvent)
+16 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+24 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QContextMenuEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QContextMenuEvent
+ size=64 align=8
+ base size=57 base align=8
+QContextMenuEvent (0x0x7f0b2c885d68) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+ QInputEvent (0x0x7f0b2c885dd0) 0
+ primary-for QContextMenuEvent (0x0x7f0b2c885d68)
+ QEvent (0x0x7f0b29e22a20) 0
+ primary-for QInputEvent (0x0x7f0b2c885dd0)
+
+Class QInputMethodEvent::Attribute
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodEvent::Attribute (0x0x7f0b2917e000) 0
+
+Vtable for QInputMethodEvent
+QInputMethodEvent::_ZTV17QInputMethodEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QInputMethodEvent)
+16 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+24 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputMethodEvent::clone
+
+Class QInputMethodEvent
+ size=96 align=8
+ base size=96 base align=8
+QInputMethodEvent (0x0x7f0b2c885ea0) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+ QEvent (0x0x7f0b29e22f60) 0
+ primary-for QInputMethodEvent (0x0x7f0b2c885ea0)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=40 align=8
+ base size=40 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7f0b27dfa7e0) 0
+
+Vtable for QInputMethodQueryEvent
+QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QInputMethodQueryEvent)
+16 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+24 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputMethodQueryEvent::clone
+
+Class QInputMethodQueryEvent
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodQueryEvent (0x0x7f0b2c88e138) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+ QEvent (0x0x7f0b27dfa780) 0
+ primary-for QInputMethodQueryEvent (0x0x7f0b2c88e138)
+
+Vtable for QDropEvent
+QDropEvent::_ZTV10QDropEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDropEvent)
+16 (int (*)(...))QDropEvent::~QDropEvent
+24 (int (*)(...))QDropEvent::~QDropEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDropEvent::clone
+
+Class QDropEvent
+ size=64 align=8
+ base size=64 base align=8
+QDropEvent (0x0x7f0b2c8973a8) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+ QEvent (0x0x7f0b27440900) 0
+ primary-for QDropEvent (0x0x7f0b2c8973a8)
+
+Vtable for QDragMoveEvent
+QDragMoveEvent::_ZTV14QDragMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDragMoveEvent)
+16 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+24 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDragMoveEvent::clone
+
+Class QDragMoveEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragMoveEvent (0x0x7f0b2c897410) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+ QDropEvent (0x0x7f0b2c897478) 0
+ primary-for QDragMoveEvent (0x0x7f0b2c897410)
+ QEvent (0x0x7f0b271c8060) 0
+ primary-for QDropEvent (0x0x7f0b2c897478)
+
+Vtable for QDragEnterEvent
+QDragEnterEvent::_ZTV15QDragEnterEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragEnterEvent)
+16 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+24 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDragMoveEvent::clone
+
+Class QDragEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragEnterEvent (0x0x7f0b2c8974e0) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+ QDragMoveEvent (0x0x7f0b2c897548) 0
+ primary-for QDragEnterEvent (0x0x7f0b2c8974e0)
+ QDropEvent (0x0x7f0b2c8975b0) 0
+ primary-for QDragMoveEvent (0x0x7f0b2c897548)
+ QEvent (0x0x7f0b271c84e0) 0
+ primary-for QDropEvent (0x0x7f0b2c8975b0)
+
+Vtable for QDragLeaveEvent
+QDragLeaveEvent::_ZTV15QDragLeaveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragLeaveEvent)
+16 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+24 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QDragLeaveEvent
+ size=16 align=8
+ base size=16 base align=8
+QDragLeaveEvent (0x0x7f0b2c897618) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+ QEvent (0x0x7f0b271c8540) 0
+ primary-for QDragLeaveEvent (0x0x7f0b2c897618)
+
+Vtable for QHelpEvent
+QHelpEvent::_ZTV10QHelpEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHelpEvent)
+16 (int (*)(...))QHelpEvent::~QHelpEvent
+24 (int (*)(...))QHelpEvent::~QHelpEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QHelpEvent::clone
+
+Class QHelpEvent
+ size=32 align=8
+ base size=32 base align=8
+QHelpEvent (0x0x7f0b2c8976e8) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+ QEvent (0x0x7f0b271c85a0) 0
+ primary-for QHelpEvent (0x0x7f0b2c8976e8)
+
+Vtable for QStatusTipEvent
+QStatusTipEvent::_ZTV15QStatusTipEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QStatusTipEvent)
+16 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+24 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QStatusTipEvent::clone
+
+Class QStatusTipEvent
+ size=40 align=8
+ base size=40 base align=8
+QStatusTipEvent (0x0x7f0b2c897750) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+ QEvent (0x0x7f0b271c8a80) 0
+ primary-for QStatusTipEvent (0x0x7f0b2c897750)
+
+Vtable for QWhatsThisClickedEvent
+QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QWhatsThisClickedEvent)
+16 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+24 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QWhatsThisClickedEvent::clone
+
+Class QWhatsThisClickedEvent
+ size=40 align=8
+ base size=40 base align=8
+QWhatsThisClickedEvent (0x0x7f0b2c8977b8) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+ QEvent (0x0x7f0b271c8d20) 0
+ primary-for QWhatsThisClickedEvent (0x0x7f0b2c8977b8)
+
+Vtable for QActionEvent
+QActionEvent::_ZTV12QActionEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionEvent)
+16 (int (*)(...))QActionEvent::~QActionEvent
+24 (int (*)(...))QActionEvent::~QActionEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QActionEvent::clone
+
+Class QActionEvent
+ size=32 align=8
+ base size=32 base align=8
+QActionEvent (0x0x7f0b2c897820) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+ QEvent (0x0x7f0b26dc1000) 0
+ primary-for QActionEvent (0x0x7f0b2c897820)
+
+Vtable for QFileOpenEvent
+QFileOpenEvent::_ZTV14QFileOpenEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QFileOpenEvent)
+16 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+24 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QFileOpenEvent::clone
+
+Class QFileOpenEvent
+ size=48 align=8
+ base size=48 base align=8
+QFileOpenEvent (0x0x7f0b2c897888) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+ QEvent (0x0x7f0b26dc1360) 0
+ primary-for QFileOpenEvent (0x0x7f0b2c897888)
+
+Vtable for QToolBarChangeEvent
+QToolBarChangeEvent::_ZTV19QToolBarChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QToolBarChangeEvent)
+16 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+24 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QToolBarChangeEvent::clone
+
+Class QToolBarChangeEvent
+ size=24 align=8
+ base size=17 base align=8
+QToolBarChangeEvent (0x0x7f0b2c8978f0) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+ QEvent (0x0x7f0b26dc1660) 0
+ primary-for QToolBarChangeEvent (0x0x7f0b2c8978f0)
+
+Vtable for QShortcutEvent
+QShortcutEvent::_ZTV14QShortcutEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QShortcutEvent)
+16 (int (*)(...))QShortcutEvent::~QShortcutEvent
+24 (int (*)(...))QShortcutEvent::~QShortcutEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QShortcutEvent::clone
+
+Class QShortcutEvent
+ size=32 align=8
+ base size=29 base align=8
+QShortcutEvent (0x0x7f0b2c897958) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+ QEvent (0x0x7f0b26dc1960) 0
+ primary-for QShortcutEvent (0x0x7f0b2c897958)
+
+Vtable for QWindowStateChangeEvent
+QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QWindowStateChangeEvent)
+16 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+24 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QWindowStateChangeEvent::clone
+
+Class QWindowStateChangeEvent
+ size=24 align=8
+ base size=21 base align=8
+QWindowStateChangeEvent (0x0x7f0b2c8979c0) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+ QEvent (0x0x7f0b26dc1cc0) 0
+ primary-for QWindowStateChangeEvent (0x0x7f0b2c8979c0)
+
+Vtable for QTouchEvent
+QTouchEvent::_ZTV11QTouchEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTouchEvent)
+16 (int (*)(...))QTouchEvent::~QTouchEvent
+24 (int (*)(...))QTouchEvent::~QTouchEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QTouchEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QTouchEvent::isBeginEvent
+64 (int (*)(...))QTouchEvent::isUpdateEvent
+72 (int (*)(...))QTouchEvent::isEndEvent
+
+Class QTouchEvent
+ size=80 align=8
+ base size=79 base align=8
+QTouchEvent (0x0x7f0b2c897a28) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+ QPointerEvent (0x0x7f0b2c897af8) 0
+ primary-for QTouchEvent (0x0x7f0b2c897a28)
+ QInputEvent (0x0x7f0b2c897b60) 0
+ primary-for QPointerEvent (0x0x7f0b2c897af8)
+ QEvent (0x0x7f0b26f03000) 0
+ primary-for QInputEvent (0x0x7f0b2c897b60)
+
+Vtable for QScrollPrepareEvent
+QScrollPrepareEvent::_ZTV19QScrollPrepareEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollPrepareEvent)
+16 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+24 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScrollPrepareEvent::clone
+
+Class QScrollPrepareEvent
+ size=96 align=8
+ base size=96 base align=8
+QScrollPrepareEvent (0x0x7f0b2c897bc8) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+ QEvent (0x0x7f0b26f03360) 0
+ primary-for QScrollPrepareEvent (0x0x7f0b2c897bc8)
+
+Vtable for QScrollEvent
+QScrollEvent::_ZTV12QScrollEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QScrollEvent)
+16 (int (*)(...))QScrollEvent::~QScrollEvent
+24 (int (*)(...))QScrollEvent::~QScrollEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScrollEvent::clone
+
+Class QScrollEvent
+ size=56 align=8
+ base size=52 base align=8
+QScrollEvent (0x0x7f0b2c897c30) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+ QEvent (0x0x7f0b26f03780) 0
+ primary-for QScrollEvent (0x0x7f0b2c897c30)
+
+Vtable for QScreenOrientationChangeEvent
+QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QScreenOrientationChangeEvent)
+16 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+24 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScreenOrientationChangeEvent::clone
+
+Class QScreenOrientationChangeEvent
+ size=32 align=8
+ base size=28 base align=8
+QScreenOrientationChangeEvent (0x0x7f0b2c897c98) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+ QEvent (0x0x7f0b26f03b40) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7f0b2c897c98)
+
+Vtable for QApplicationStateChangeEvent
+QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QApplicationStateChangeEvent)
+16 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+24 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QApplicationStateChangeEvent::clone
+
+Class QApplicationStateChangeEvent
+ size=24 align=8
+ base size=20 base align=8
+QApplicationStateChangeEvent (0x0x7f0b2c897d00) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+ QEvent (0x0x7f0b26f03ea0) 0
+ primary-for QApplicationStateChangeEvent (0x0x7f0b2c897d00)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7f0b26c4b1e0) 0
+
+Class QFontDatabase
+ size=1 align=1
+ base size=0 base align=1
+QFontDatabase (0x0x7f0b252dc240) 0 empty
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7f0b252dc420) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7f0b24072300) 0
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7f0b225489c0) 0
+
+Class QBrushData
+ size=104 align=8
+ base size=104 base align=8
+QBrushData (0x0x7f0b27502540) 0
+
+Class QGradient::QGradientData
+ size=48 align=8
+ base size=48 base align=8
+QGradient::QGradientData (0x0x7f0b27502780) 0
+
+Class QGradient
+ size=88 align=8
+ base size=88 base align=8
+QGradient (0x0x7f0b27502720) 0
+
+Class QLinearGradient
+ size=88 align=8
+ base size=88 base align=8
+QLinearGradient (0x0x7f0b2c59a2d8) 0
+ QGradient (0x0x7f0b2d190660) 0
+
+Class QRadialGradient
+ size=88 align=8
+ base size=88 base align=8
+QRadialGradient (0x0x7f0b2c59a3a8) 0
+ QGradient (0x0x7f0b2d190780) 0
+
+Class QConicalGradient
+ size=88 align=8
+ base size=88 base align=8
+QConicalGradient (0x0x7f0b2c59a410) 0
+ QGradient (0x0x7f0b2d1908a0) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7f0b2d190960) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7f0b27e279c0) 0
+
+Class QTextOption
+ size=24 align=8
+ base size=24 base align=8
+QTextOption (0x0x7f0b27e27960) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7f0b2768c720) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7f0b26a28420) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7f0b2c5b5d00) 0
+ QTextFormat (0x0x7f0b2446fa80) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7f0b2c5b9c98) 0
+ QTextFormat (0x0x7f0b22347d80) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7f0b2c5bebc8) 0
+ QTextFormat (0x0x7f0b26d64300) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7f0b2c5c49c0) 0
+ QTextCharFormat (0x0x7f0b2c5c4a28) 0
+ QTextFormat (0x0x7f0b24aac1e0) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7f0b2c5cb9c0) 0
+ QTextFormat (0x0x7f0b226c3060) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7f0b2c5d18f0) 0
+ QTextFrameFormat (0x0x7f0b2c5d1958) 0
+ QTextFormat (0x0x7f0b22354480) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7f0b2c5d68f0) 0
+ QTextCharFormat (0x0x7f0b2c5d6958) 0
+ QTextFormat (0x0x7f0b2340b720) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7f0b315c1c60) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7f0b26d63300) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7f0b26d63720) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7f0b26d636c0) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7f0b200e17e0) 0
+
+Vtable for QAbstractUndoItem
+QAbstractUndoItem::_ZTV17QAbstractUndoItem: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAbstractUndoItem)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractUndoItem
+ size=8 align=8
+ base size=8 base align=8
+QAbstractUndoItem (0x0x7f0b200e1c60) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7f0b200e1f00) 0 empty
+
+Vtable for QTextDocument
+QTextDocument::_ZTV13QTextDocument: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QTextDocument)
+16 (int (*)(...))QTextDocument::metaObject
+24 (int (*)(...))QTextDocument::qt_metacast
+32 (int (*)(...))QTextDocument::qt_metacall
+40 (int (*)(...))QTextDocument::~QTextDocument
+48 (int (*)(...))QTextDocument::~QTextDocument
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextDocument::clear
+120 (int (*)(...))QTextDocument::createObject
+128 (int (*)(...))QTextDocument::loadResource
+
+Class QTextDocument
+ size=16 align=8
+ base size=16 base align=8
+QTextDocument (0x0x7f0b281487b8) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+ QObject (0x0x7f0b200e1ea0) 0
+ primary-for QTextDocument (0x0x7f0b281487b8)
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7f0b20105720) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7f0b20156a80) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7f0b20156ae0) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=80 align=8
+ base size=80 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7f0b20156b40) 0
+
+Vtable for QAbstractTextDocumentLayout
+QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAbstractTextDocumentLayout)
+16 (int (*)(...))QAbstractTextDocumentLayout::metaObject
+24 (int (*)(...))QAbstractTextDocumentLayout::qt_metacast
+32 (int (*)(...))QAbstractTextDocumentLayout::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractTextDocumentLayout::resizeInlineObject
+176 (int (*)(...))QAbstractTextDocumentLayout::positionInlineObject
+184 (int (*)(...))QAbstractTextDocumentLayout::drawInlineObject
+
+Class QAbstractTextDocumentLayout
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTextDocumentLayout (0x0x7f0b26367b60) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+ QObject (0x0x7f0b20156a20) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f0b26367b60)
+
+Vtable for QTextObjectInterface
+QTextObjectInterface::_ZTV20QTextObjectInterface: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextObjectInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QTextObjectInterface
+ size=8 align=8
+ base size=8 base align=8
+QTextObjectInterface (0x0x7f0b201b2120) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7f0b201b2360) 0
+
+Vtable for QAccessible::ActivationObserver
+QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN11QAccessible18ActivationObserverE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessible::ActivationObserver
+ size=8 align=8
+ base size=8 base align=8
+QAccessible::ActivationObserver (0x0x7f0b201b23c0) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7f0b201b2300) 0 empty
+
+Vtable for QAccessibleInterface
+QAccessibleInterface::_ZTV20QAccessibleInterface: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAccessibleInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QAccessibleInterface::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleInterface::focusChild
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleInterface (0x0x7f0b201b2c00) 0 nearly-empty
+ vptr=((& QAccessibleInterface::_ZTV20QAccessibleInterface) + 16)
+
+Vtable for QAccessibleTextInterface
+QAccessibleTextInterface::_ZTV24QAccessibleTextInterface: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAccessibleTextInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))QAccessibleTextInterface::textBeforeOffset
+104 (int (*)(...))QAccessibleTextInterface::textAfterOffset
+112 (int (*)(...))QAccessibleTextInterface::textAtOffset
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTextInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTextInterface (0x0x7f0b201b2f60) 0 nearly-empty
+ vptr=((& QAccessibleTextInterface::_ZTV24QAccessibleTextInterface) + 16)
+
+Vtable for QAccessibleEditableTextInterface
+QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleEditableTextInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleEditableTextInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleEditableTextInterface (0x0x7f0b201df000) 0 nearly-empty
+ vptr=((& QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface) + 16)
+
+Vtable for QAccessibleValueInterface
+QAccessibleValueInterface::_ZTV25QAccessibleValueInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleValueInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleValueInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleValueInterface (0x0x7f0b201df060) 0 nearly-empty
+ vptr=((& QAccessibleValueInterface::_ZTV25QAccessibleValueInterface) + 16)
+
+Vtable for QAccessibleTableCellInterface
+QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTableCellInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTableCellInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTableCellInterface (0x0x7f0b201df0c0) 0 nearly-empty
+ vptr=((& QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface) + 16)
+
+Vtable for QAccessibleTableInterface
+QAccessibleTableInterface::_ZTV25QAccessibleTableInterface: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleTableInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTableInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTableInterface (0x0x7f0b201df120) 0 nearly-empty
+ vptr=((& QAccessibleTableInterface::_ZTV25QAccessibleTableInterface) + 16)
+
+Vtable for QAccessibleActionInterface
+QAccessibleActionInterface::_ZTV26QAccessibleActionInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleActionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QAccessibleActionInterface::localizedActionName
+48 (int (*)(...))QAccessibleActionInterface::localizedActionDescription
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleActionInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleActionInterface (0x0x7f0b201df180) 0 nearly-empty
+ vptr=((& QAccessibleActionInterface::_ZTV26QAccessibleActionInterface) + 16)
+
+Vtable for QAccessibleImageInterface
+QAccessibleImageInterface::_ZTV25QAccessibleImageInterface: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleImageInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleImageInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleImageInterface (0x0x7f0b201df240) 0 nearly-empty
+ vptr=((& QAccessibleImageInterface::_ZTV25QAccessibleImageInterface) + 16)
+
+Vtable for QAccessibleEvent
+QAccessibleEvent::_ZTV16QAccessibleEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAccessibleEvent)
+16 (int (*)(...))QAccessibleEvent::~QAccessibleEvent
+24 (int (*)(...))QAccessibleEvent::~QAccessibleEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleEvent
+ size=32 align=8
+ base size=28 base align=8
+QAccessibleEvent (0x0x7f0b201df2a0) 0
+ vptr=((& QAccessibleEvent::_ZTV16QAccessibleEvent) + 16)
+
+Vtable for QAccessibleStateChangeEvent
+QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleStateChangeEvent)
+16 (int (*)(...))QAccessibleStateChangeEvent::~QAccessibleStateChangeEvent
+24 (int (*)(...))QAccessibleStateChangeEvent::~QAccessibleStateChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleStateChangeEvent
+ size=40 align=8
+ base size=40 base align=8
+QAccessibleStateChangeEvent (0x0x7f0b25114f08) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f0b201df7e0) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7f0b25114f08)
+
+Vtable for QAccessibleTextCursorEvent
+QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextCursorEvent)
+16 (int (*)(...))QAccessibleTextCursorEvent::~QAccessibleTextCursorEvent
+24 (int (*)(...))QAccessibleTextCursorEvent::~QAccessibleTextCursorEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextCursorEvent
+ size=32 align=8
+ base size=32 base align=8
+QAccessibleTextCursorEvent (0x0x7f0b25114f70) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+ QAccessibleEvent (0x0x7f0b201dfba0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f0b25114f70)
+
+Vtable for QAccessibleTextSelectionEvent
+QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTextSelectionEvent)
+16 (int (*)(...))QAccessibleTextSelectionEvent::~QAccessibleTextSelectionEvent
+24 (int (*)(...))QAccessibleTextSelectionEvent::~QAccessibleTextSelectionEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextSelectionEvent
+ size=40 align=8
+ base size=40 base align=8
+QAccessibleTextSelectionEvent (0x0x7f0b24e11750) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f0b24e117b8) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7f0b24e11750)
+ QAccessibleEvent (0x0x7f0b201f9000) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f0b24e117b8)
+
+Vtable for QAccessibleTextInsertEvent
+QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextInsertEvent)
+16 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+24 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextInsertEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleTextInsertEvent (0x0x7f0b24e11c30) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f0b24e11c98) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7f0b24e11c30)
+ QAccessibleEvent (0x0x7f0b201f9480) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f0b24e11c98)
+
+Vtable for QAccessibleTextRemoveEvent
+QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextRemoveEvent)
+16 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+24 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextRemoveEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleTextRemoveEvent (0x0x7f0b24e28618) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f0b24e28680) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7f0b24e28618)
+ QAccessibleEvent (0x0x7f0b201f98a0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f0b24e28680)
+
+Vtable for QAccessibleTextUpdateEvent
+QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextUpdateEvent)
+16 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+24 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextUpdateEvent
+ size=88 align=8
+ base size=88 base align=8
+QAccessibleTextUpdateEvent (0x0x7f0b24e28c98) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f0b24e28d00) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7f0b24e28c98)
+ QAccessibleEvent (0x0x7f0b201f9cc0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f0b24e28d00)
+
+Vtable for QAccessibleValueChangeEvent
+QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleValueChangeEvent)
+16 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+24 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleValueChangeEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleValueChangeEvent (0x0x7f0b24e724e0) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f0b2020d180) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7f0b24e724e0)
+
+Vtable for QAccessibleTableModelChangeEvent
+QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleTableModelChangeEvent)
+16 (int (*)(...))QAccessibleTableModelChangeEvent::~QAccessibleTableModelChangeEvent
+24 (int (*)(...))QAccessibleTableModelChangeEvent::~QAccessibleTableModelChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTableModelChangeEvent
+ size=48 align=8
+ base size=48 base align=8
+QAccessibleTableModelChangeEvent (0x0x7f0b24e72548) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f0b2020d5a0) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7f0b24e72548)
+
+Vtable for QAccessibleBridge
+QAccessibleBridge::_ZTV17QAccessibleBridge: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleBridge)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridge
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleBridge (0x0x7f0b2020de40) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7f0b2021f120) 0 empty
+
+Vtable for QAccessibleBridgePlugin
+QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QAccessibleBridgePlugin)
+16 (int (*)(...))QAccessibleBridgePlugin::metaObject
+24 (int (*)(...))QAccessibleBridgePlugin::qt_metacast
+32 (int (*)(...))QAccessibleBridgePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridgePlugin
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleBridgePlugin (0x0x7f0b24e729c0) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+ QObject (0x0x7f0b2021f0c0) 0
+ primary-for QAccessibleBridgePlugin (0x0x7f0b24e729c0)
+
+Vtable for QAccessibleObject
+QAccessibleObject::_ZTV17QAccessibleObject: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleObject)
+16 0
+24 0
+32 (int (*)(...))QAccessibleObject::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleInterface::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleInterface::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleObject::rect
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleObject
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleObject (0x0x7f0b24e72a28) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+ QAccessibleInterface (0x0x7f0b2021f1e0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f0b24e72a28)
+
+Vtable for QAccessibleApplication
+QAccessibleApplication::_ZTV22QAccessibleApplication: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QAccessibleApplication)
+16 (int (*)(...))QAccessibleApplication::~QAccessibleApplication
+24 (int (*)(...))QAccessibleApplication::~QAccessibleApplication
+32 (int (*)(...))QAccessibleObject::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleApplication::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleApplication::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))QAccessibleApplication::parent
+88 (int (*)(...))QAccessibleApplication::child
+96 (int (*)(...))QAccessibleApplication::childCount
+104 (int (*)(...))QAccessibleApplication::indexOfChild
+112 (int (*)(...))QAccessibleApplication::text
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleObject::rect
+136 (int (*)(...))QAccessibleApplication::role
+144 (int (*)(...))QAccessibleApplication::state
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleApplication
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleApplication (0x0x7f0b24e883a8) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+ QAccessibleObject (0x0x7f0b24e88410) 0
+ primary-for QAccessibleApplication (0x0x7f0b24e883a8)
+ QAccessibleInterface (0x0x7f0b2021f240) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f0b24e88410)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7f0b2021f300) 0 empty
+
+Vtable for QAccessiblePlugin
+QAccessiblePlugin::_ZTV17QAccessiblePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessiblePlugin)
+16 (int (*)(...))QAccessiblePlugin::metaObject
+24 (int (*)(...))QAccessiblePlugin::qt_metacast
+32 (int (*)(...))QAccessiblePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessiblePlugin
+ size=16 align=8
+ base size=16 base align=8
+QAccessiblePlugin (0x0x7f0b24e88c98) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+ QObject (0x0x7f0b2021f2a0) 0
+ primary-for QAccessiblePlugin (0x0x7f0b24e88c98)
+
+Class QAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAction::QPrivateSignal (0x0x7f0b2021f420) 0 empty
+
+Vtable for QAction
+QAction::_ZTV7QAction: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QAction)
+16 (int (*)(...))QAction::metaObject
+24 (int (*)(...))QAction::qt_metacast
+32 (int (*)(...))QAction::qt_metacall
+40 (int (*)(...))QAction::~QAction
+48 (int (*)(...))QAction::~QAction
+56 (int (*)(...))QAction::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QAction
+ size=16 align=8
+ base size=16 base align=8
+QAction (0x0x7f0b24e88d00) 0
+ vptr=((& QAction::_ZTV7QAction) + 16)
+ QObject (0x0x7f0b2021f3c0) 0
+ primary-for QAction (0x0x7f0b24e88d00)
+
+Class QActionGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QActionGroup::QPrivateSignal (0x0x7f0b2021fd20) 0 empty
+
+Vtable for QActionGroup
+QActionGroup::_ZTV12QActionGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionGroup)
+16 (int (*)(...))QActionGroup::metaObject
+24 (int (*)(...))QActionGroup::qt_metacast
+32 (int (*)(...))QActionGroup::qt_metacall
+40 (int (*)(...))QActionGroup::~QActionGroup
+48 (int (*)(...))QActionGroup::~QActionGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QActionGroup
+ size=16 align=8
+ base size=16 base align=8
+QActionGroup (0x0x7f0b24ed2750) 0
+ vptr=((& QActionGroup::_ZTV12QActionGroup) + 16)
+ QObject (0x0x7f0b2021fcc0) 0
+ primary-for QActionGroup (0x0x7f0b24ed2750)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7f0b2024a000) 0
+
+Vtable for QSurface
+QSurface::_ZTV8QSurface: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSurface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+
+Class QSurface
+ size=24 align=8
+ base size=24 base align=8
+QSurface (0x0x7f0b2024a840) 0
+ vptr=((& QSurface::_ZTV8QSurface) + 16)
+
+Vtable for QBitmap
+QBitmap::_ZTV7QBitmap: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QBitmap)
+16 (int (*)(...))QBitmap::~QBitmap
+24 (int (*)(...))QBitmap::~QBitmap
+32 (int (*)(...))QPixmap::devType
+40 (int (*)(...))QPixmap::paintEngine
+48 (int (*)(...))QPixmap::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QBitmap
+ size=24 align=8
+ base size=24 base align=8
+QBitmap (0x0x7f0b24ee9750) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+ QPixmap (0x0x7f0b24ee97b8) 0
+ primary-for QBitmap (0x0x7f0b24ee9750)
+ QPaintDevice (0x0x7f0b2024ab40) 0
+ primary-for QPixmap (0x0x7f0b24ee97b8)
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7f0b2027a480) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7f0b2029d660) 0 empty
+
+Vtable for QWindow
+QWindow::_ZTV7QWindow: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWindow)
+16 (int (*)(...))QWindow::metaObject
+24 (int (*)(...))QWindow::qt_metacast
+32 (int (*)(...))QWindow::qt_metacall
+40 (int (*)(...))QWindow::~QWindow
+48 (int (*)(...))QWindow::~QWindow
+56 (int (*)(...))QWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI7QWindow)
+328 (int (*)(...))QWindow::_ZThn16_N7QWindowD1Ev
+336 (int (*)(...))QWindow::_ZThn16_N7QWindowD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QWindow
+ size=40 align=8
+ base size=40 base align=8
+QWindow (0x0x7f0b2028d380) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+ QObject (0x0x7f0b2029d5a0) 0
+ primary-for QWindow (0x0x7f0b2028d380)
+ QSurface (0x0x7f0b2029d600) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 328)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7f0b2029dea0) 0
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7f0b202c9000) 0 empty
+
+Vtable for QClipboard
+QClipboard::_ZTV10QClipboard: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QClipboard)
+16 (int (*)(...))QClipboard::metaObject
+24 (int (*)(...))QClipboard::qt_metacast
+32 (int (*)(...))QClipboard::qt_metacall
+40 (int (*)(...))QClipboard::~QClipboard
+48 (int (*)(...))QClipboard::~QClipboard
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QClipboard
+ size=16 align=8
+ base size=16 base align=8
+QClipboard (0x0x7f0b2029f1a0) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+ QObject (0x0x7f0b2029df60) 0
+ primary-for QClipboard (0x0x7f0b2029f1a0)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7f0b202c9120) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7f0b1fef50c0) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7f0b1ff20d20) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7f0b1ff20de0) 0 empty
+
+Vtable for QDrag
+QDrag::_ZTV5QDrag: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDrag)
+16 (int (*)(...))QDrag::metaObject
+24 (int (*)(...))QDrag::qt_metacast
+32 (int (*)(...))QDrag::qt_metacall
+40 (int (*)(...))QDrag::~QDrag
+48 (int (*)(...))QDrag::~QDrag
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDrag
+ size=16 align=8
+ base size=16 base align=8
+QDrag (0x0x7f0b1ff23b60) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+ QObject (0x0x7f0b1ff20d80) 0
+ primary-for QDrag (0x0x7f0b1ff23b60)
+
+Class QFileSystemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemModel::QPrivateSignal (0x0x7f0b1ff2f000) 0 empty
+
+Vtable for QFileSystemModel
+QFileSystemModel::_ZTV16QFileSystemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QFileSystemModel)
+16 (int (*)(...))QFileSystemModel::metaObject
+24 (int (*)(...))QFileSystemModel::qt_metacast
+32 (int (*)(...))QFileSystemModel::qt_metacall
+40 (int (*)(...))QFileSystemModel::~QFileSystemModel
+48 (int (*)(...))QFileSystemModel::~QFileSystemModel
+56 (int (*)(...))QFileSystemModel::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QFileSystemModel::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileSystemModel::index
+120 (int (*)(...))QFileSystemModel::parent
+128 (int (*)(...))QFileSystemModel::sibling
+136 (int (*)(...))QFileSystemModel::rowCount
+144 (int (*)(...))QFileSystemModel::columnCount
+152 (int (*)(...))QFileSystemModel::hasChildren
+160 (int (*)(...))QFileSystemModel::data
+168 (int (*)(...))QFileSystemModel::setData
+176 (int (*)(...))QFileSystemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QFileSystemModel::mimeTypes
+224 (int (*)(...))QFileSystemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QFileSystemModel::dropMimeData
+248 (int (*)(...))QFileSystemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QFileSystemModel::fetchMore
+320 (int (*)(...))QFileSystemModel::canFetchMore
+328 (int (*)(...))QFileSystemModel::flags
+336 (int (*)(...))QFileSystemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QFileSystemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QFileSystemModel
+ size=16 align=8
+ base size=16 base align=8
+QFileSystemModel (0x0x7f0b1ff23bc8) 0
+ vptr=((& QFileSystemModel::_ZTV16QFileSystemModel) + 16)
+ QAbstractItemModel (0x0x7f0b1ff23c30) 0
+ primary-for QFileSystemModel (0x0x7f0b1ff23bc8)
+ QObject (0x0x7f0b1ff20f60) 0
+ primary-for QAbstractItemModel (0x0x7f0b1ff23c30)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7f0b1ff2f600) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7f0b1ff55f00) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7f0b1ff6f960) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7f0b1ffb4780) 0 empty
+
+Vtable for QGenericPlugin
+QGenericPlugin::_ZTV14QGenericPlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGenericPlugin)
+16 (int (*)(...))QGenericPlugin::metaObject
+24 (int (*)(...))QGenericPlugin::qt_metacast
+32 (int (*)(...))QGenericPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QGenericPlugin
+ size=16 align=8
+ base size=16 base align=8
+QGenericPlugin (0x0x7f0b1ffaa410) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+ QObject (0x0x7f0b1ffb4720) 0
+ primary-for QGenericPlugin (0x0x7f0b1ffaa410)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7f0b1ffb4840) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7f0b1ffb4900) 0 empty
+
+Vtable for QInputMethod
+QInputMethod::_ZTV12QInputMethod: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputMethod)
+16 (int (*)(...))QInputMethod::metaObject
+24 (int (*)(...))QInputMethod::qt_metacast
+32 (int (*)(...))QInputMethod::qt_metacall
+40 (int (*)(...))QInputMethod::~QInputMethod
+48 (int (*)(...))QInputMethod::~QInputMethod
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QInputMethod
+ size=16 align=8
+ base size=16 base align=8
+QInputMethod (0x0x7f0b1ffaa478) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+ QObject (0x0x7f0b1ffb48a0) 0
+ primary-for QInputMethod (0x0x7f0b1ffaa478)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7f0b1ffb4ba0) 0 empty
+
+Vtable for QGuiApplication
+QGuiApplication::_ZTV15QGuiApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGuiApplication)
+16 (int (*)(...))QGuiApplication::metaObject
+24 (int (*)(...))QGuiApplication::qt_metacast
+32 (int (*)(...))QGuiApplication::qt_metacall
+40 (int (*)(...))QGuiApplication::~QGuiApplication
+48 (int (*)(...))QGuiApplication::~QGuiApplication
+56 (int (*)(...))QGuiApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGuiApplication::notify
+120 (int (*)(...))QGuiApplication::compressEvent
+
+Class QGuiApplication
+ size=16 align=8
+ base size=16 base align=8
+QGuiApplication (0x0x7f0b1ffaa4e0) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+ QCoreApplication (0x0x7f0b1ffaa548) 0
+ primary-for QGuiApplication (0x0x7f0b1ffaa4e0)
+ QObject (0x0x7f0b1ffb4b40) 0
+ primary-for QCoreApplication (0x0x7f0b1ffaa548)
+
+Class QIconEngine::ScaledPixmapArgument
+ size=48 align=8
+ base size=48 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7f0b1ffb4e40) 0
+
+Vtable for QIconEngine
+QIconEngine::_ZTV11QIconEngine: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QIconEngine)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QIconEngine::actualSize
+48 (int (*)(...))QIconEngine::pixmap
+56 (int (*)(...))QIconEngine::addPixmap
+64 (int (*)(...))QIconEngine::addFile
+72 (int (*)(...))QIconEngine::key
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QIconEngine::read
+96 (int (*)(...))QIconEngine::write
+104 (int (*)(...))QIconEngine::availableSizes
+112 (int (*)(...))QIconEngine::iconName
+120 (int (*)(...))QIconEngine::isNull
+128 (int (*)(...))QIconEngine::scaledPixmap
+136 (int (*)(...))QIconEngine::virtual_hook
+
+Class QIconEngine
+ size=8 align=8
+ base size=8 base align=8
+QIconEngine (0x0x7f0b1ffb4de0) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7f0b1ffb4f00) 0 empty
+
+Vtable for QIconEnginePlugin
+QIconEnginePlugin::_ZTV17QIconEnginePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QIconEnginePlugin)
+16 (int (*)(...))QIconEnginePlugin::metaObject
+24 (int (*)(...))QIconEnginePlugin::qt_metacast
+32 (int (*)(...))QIconEnginePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QIconEnginePlugin
+ size=16 align=8
+ base size=16 base align=8
+QIconEnginePlugin (0x0x7f0b1ffaa5b0) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+ QObject (0x0x7f0b1ffb4ea0) 0
+ primary-for QIconEnginePlugin (0x0x7f0b1ffaa5b0)
+
+Vtable for QImageIOHandler
+QImageIOHandler::_ZTV15QImageIOHandler: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QImageIOHandler)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QImageIOHandler::write
+56 (int (*)(...))QImageIOHandler::option
+64 (int (*)(...))QImageIOHandler::setOption
+72 (int (*)(...))QImageIOHandler::supportsOption
+80 (int (*)(...))QImageIOHandler::jumpToNextImage
+88 (int (*)(...))QImageIOHandler::jumpToImage
+96 (int (*)(...))QImageIOHandler::loopCount
+104 (int (*)(...))QImageIOHandler::imageCount
+112 (int (*)(...))QImageIOHandler::nextImageDelay
+120 (int (*)(...))QImageIOHandler::currentImageNumber
+128 (int (*)(...))QImageIOHandler::currentImageRect
+
+Class QImageIOHandler
+ size=16 align=8
+ base size=16 base align=8
+QImageIOHandler (0x0x7f0b1ffde000) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7f0b1ffde240) 0 empty
+
+Vtable for QImageIOPlugin
+QImageIOPlugin::_ZTV14QImageIOPlugin: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QImageIOPlugin)
+16 (int (*)(...))QImageIOPlugin::metaObject
+24 (int (*)(...))QImageIOPlugin::qt_metacast
+32 (int (*)(...))QImageIOPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QImageIOPlugin
+ size=16 align=8
+ base size=16 base align=8
+QImageIOPlugin (0x0x7f0b1ffaa618) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+ QObject (0x0x7f0b1ffde1e0) 0
+ primary-for QImageIOPlugin (0x0x7f0b1ffaa618)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7f0b1ffde600) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7f0b1ffde6c0) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7f0b1ffde780) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7f0b200344e0) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7f0b20075960) 0 empty
+
+Vtable for QMovie
+QMovie::_ZTV6QMovie: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QMovie)
+16 (int (*)(...))QMovie::metaObject
+24 (int (*)(...))QMovie::qt_metacast
+32 (int (*)(...))QMovie::qt_metacall
+40 (int (*)(...))QMovie::~QMovie
+48 (int (*)(...))QMovie::~QMovie
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QMovie
+ size=16 align=8
+ base size=16 base align=8
+QMovie (0x0x7f0b20062e38) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+ QObject (0x0x7f0b20075900) 0
+ primary-for QMovie (0x0x7f0b20062e38)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7f0b20075d20) 0 empty
+
+Vtable for QOffscreenSurface
+QOffscreenSurface::_ZTV17QOffscreenSurface: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QOffscreenSurface)
+16 (int (*)(...))QOffscreenSurface::metaObject
+24 (int (*)(...))QOffscreenSurface::qt_metacast
+32 (int (*)(...))QOffscreenSurface::qt_metacall
+40 (int (*)(...))QOffscreenSurface::~QOffscreenSurface
+48 (int (*)(...))QOffscreenSurface::~QOffscreenSurface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QOffscreenSurface::surfaceType
+120 (int (*)(...))QOffscreenSurface::format
+128 (int (*)(...))QOffscreenSurface::size
+136 (int (*)(...))QOffscreenSurface::surfaceHandle
+144 (int (*)(...))-16
+152 (int (*)(...))(& _ZTI17QOffscreenSurface)
+160 (int (*)(...))QOffscreenSurface::_ZThn16_N17QOffscreenSurfaceD1Ev
+168 (int (*)(...))QOffscreenSurface::_ZThn16_N17QOffscreenSurfaceD0Ev
+176 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface6formatEv
+184 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface13surfaceHandleEv
+192 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface11surfaceTypeEv
+200 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface4sizeEv
+
+Class QOffscreenSurface
+ size=40 align=8
+ base size=40 base align=8
+QOffscreenSurface (0x0x7f0b20047bd0) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+ QObject (0x0x7f0b20075c60) 0
+ primary-for QOffscreenSurface (0x0x7f0b20047bd0)
+ QSurface (0x0x7f0b20075cc0) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7f0b20075f60) 0 empty
+
+Vtable for QOpenGLContextGroup
+QOpenGLContextGroup::_ZTV19QOpenGLContextGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QOpenGLContextGroup)
+16 (int (*)(...))QOpenGLContextGroup::metaObject
+24 (int (*)(...))QOpenGLContextGroup::qt_metacast
+32 (int (*)(...))QOpenGLContextGroup::qt_metacall
+40 (int (*)(...))QOpenGLContextGroup::~QOpenGLContextGroup
+48 (int (*)(...))QOpenGLContextGroup::~QOpenGLContextGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLContextGroup
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLContextGroup (0x0x7f0b20062ea0) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+ QObject (0x0x7f0b20075f00) 0
+ primary-for QOpenGLContextGroup (0x0x7f0b20062ea0)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7f0b1fe8c180) 0 empty
+
+Vtable for QOpenGLContext
+QOpenGLContext::_ZTV14QOpenGLContext: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QOpenGLContext)
+16 (int (*)(...))QOpenGLContext::metaObject
+24 (int (*)(...))QOpenGLContext::qt_metacast
+32 (int (*)(...))QOpenGLContext::qt_metacall
+40 (int (*)(...))QOpenGLContext::~QOpenGLContext
+48 (int (*)(...))QOpenGLContext::~QOpenGLContext
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLContext
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLContext (0x0x7f0b20062f08) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+ QObject (0x0x7f0b1fe8c120) 0
+ primary-for QOpenGLContext (0x0x7f0b20062f08)
+
+Vtable for QNativeInterface::QGLXContext
+QNativeInterface::QGLXContext::_ZTVN16QNativeInterface11QGLXContextE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QGLXContextE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QGLXContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QGLXContext (0x0x7f0b1fe8c300) 0 nearly-empty
+ vptr=((& QNativeInterface::QGLXContext::_ZTVN16QNativeInterface11QGLXContextE) + 16)
+
+Vtable for QNativeInterface::QEGLContext
+QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QEGLContextE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QEGLContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QEGLContext (0x0x7f0b1fe8c360) 0 nearly-empty
+ vptr=((& QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE) + 16)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7f0b1fe8c3c0) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7f0b1fe8c960) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7f0b1fe8c900) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7f0b1fecd340) 0
+ QOpenGLFunctions (0x0x7f0b1fb38720) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7f0b1fb38a80) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7f0b1fecd3a8) 0
+ QOpenGLFunctionsPrivate (0x0x7f0b1fb38a20) 0
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7f0b1fc16780) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7f0b1fc6b240) 0
+
+Class QPageRanges::Range
+ size=8 align=4
+ base size=8 base align=4
+QPageRanges::Range (0x0x7f0b1fcacea0) 0
+
+Class QPageRanges
+ size=8 align=8
+ base size=8 base align=8
+QPageRanges (0x0x7f0b1fcace40) 0
+
+Vtable for QPagedPaintDevice
+QPagedPaintDevice::_ZTV17QPagedPaintDevice: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QPagedPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QPagedPaintDevice::setPageLayout
+96 (int (*)(...))QPagedPaintDevice::setPageSize
+104 (int (*)(...))QPagedPaintDevice::setPageOrientation
+112 (int (*)(...))QPagedPaintDevice::setPageMargins
+120 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPagedPaintDevice
+ size=24 align=8
+ base size=24 base align=8
+QPagedPaintDevice (0x0x7f0b1f917f70) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+ QPaintDevice (0x0x7f0b1f924000) 0
+ primary-for QPagedPaintDevice (0x0x7f0b1f917f70)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7f0b1f924180) 0 empty
+
+Vtable for QPaintDeviceWindow
+QPaintDeviceWindow::_ZTV18QPaintDeviceWindow: 59 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+16 (int (*)(...))QPaintDeviceWindow::metaObject
+24 (int (*)(...))QPaintDeviceWindow::qt_metacast
+32 (int (*)(...))QPaintDeviceWindow::qt_metacall
+40 (int (*)(...))QPaintDeviceWindow::~QPaintDeviceWindow
+48 (int (*)(...))QPaintDeviceWindow::~QPaintDeviceWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QPaintDeviceWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QPaintDeviceWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))-16
+336 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+344 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD1Ev
+352 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD0Ev
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+384 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+392 (int (*)(...))-40
+400 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+408 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD1Ev
+416 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD0Ev
+424 (int (*)(...))QPaintDevice::devType
+432 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+440 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+448 (int (*)(...))QPaintDevice::initPainter
+456 (int (*)(...))QPaintDevice::redirected
+464 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDeviceWindow
+ size=56 align=8
+ base size=50 base align=8
+QPaintDeviceWindow (0x0x7f0b1fc71d20) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+ QWindow (0x0x7f0b1fc71d90) 0
+ primary-for QPaintDeviceWindow (0x0x7f0b1fc71d20)
+ QObject (0x0x7f0b1f924060) 0
+ primary-for QWindow (0x0x7f0b1fc71d90)
+ QSurface (0x0x7f0b1f9240c0) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 344)
+ QPaintDevice (0x0x7f0b1f924120) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 408)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7f0b1f924360) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7f0b1f924300) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7f0b1fab4ea0) 0 empty
+
+Vtable for QPaintEngine
+QPaintEngine::_ZTV12QPaintEngine: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintEngine)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))QPaintEngine::drawRects
+64 (int (*)(...))QPaintEngine::drawRects
+72 (int (*)(...))QPaintEngine::drawLines
+80 (int (*)(...))QPaintEngine::drawLines
+88 (int (*)(...))QPaintEngine::drawEllipse
+96 (int (*)(...))QPaintEngine::drawEllipse
+104 (int (*)(...))QPaintEngine::drawPath
+112 (int (*)(...))QPaintEngine::drawPoints
+120 (int (*)(...))QPaintEngine::drawPoints
+128 (int (*)(...))QPaintEngine::drawPolygon
+136 (int (*)(...))QPaintEngine::drawPolygon
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QPaintEngine::drawTextItem
+160 (int (*)(...))QPaintEngine::drawTiledPixmap
+168 (int (*)(...))QPaintEngine::drawImage
+176 (int (*)(...))QPaintEngine::coordinateOffset
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))QPaintEngine::createPixmap
+200 (int (*)(...))QPaintEngine::createPixmapFromImage
+
+Class QPaintEngine
+ size=32 align=8
+ base size=32 base align=8
+QPaintEngine (0x0x7f0b1f6de6c0) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7f0b1f6decc0) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7f0b1f728780) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7f0b1f728720) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7f0b1f797a80) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7f0b1f7b7240) 0 empty
+
+Vtable for QPdfWriter
+QPdfWriter::_ZTV10QPdfWriter: 33 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QPdfWriter)
+16 (int (*)(...))QPdfWriter::metaObject
+24 (int (*)(...))QPdfWriter::qt_metacast
+32 (int (*)(...))QPdfWriter::qt_metacall
+40 (int (*)(...))QPdfWriter::~QPdfWriter
+48 (int (*)(...))QPdfWriter::~QPdfWriter
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPdfWriter::newPage
+120 (int (*)(...))QPdfWriter::paintEngine
+128 (int (*)(...))QPdfWriter::metric
+136 (int (*)(...))-16
+144 (int (*)(...))(& _ZTI10QPdfWriter)
+152 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD1Ev
+160 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD0Ev
+168 (int (*)(...))QPaintDevice::devType
+176 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter11paintEngineEv
+184 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter6metricEN12QPaintDevice17PaintDeviceMetricE
+192 (int (*)(...))QPaintDevice::initPainter
+200 (int (*)(...))QPaintDevice::redirected
+208 (int (*)(...))QPaintDevice::sharedPainter
+216 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter7newPageEv
+224 (int (*)(...))QPagedPaintDevice::setPageLayout
+232 (int (*)(...))QPagedPaintDevice::setPageSize
+240 (int (*)(...))QPagedPaintDevice::setPageOrientation
+248 (int (*)(...))QPagedPaintDevice::setPageMargins
+256 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPdfWriter
+ size=40 align=8
+ base size=40 base align=8
+QPdfWriter (0x0x7f0b1f786700) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+ QObject (0x0x7f0b1f7b7180) 0
+ primary-for QPdfWriter (0x0x7f0b1f786700)
+ QPagedPaintDevice (0x0x7f0b1f798dd0) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 152)
+ QPaintDevice (0x0x7f0b1f7b71e0) 16
+ primary-for QPagedPaintDevice (0x0x7f0b1f798dd0)
+
+Vtable for QPicture
+QPicture::_ZTV8QPicture: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QPicture)
+16 (int (*)(...))QPicture::~QPicture
+24 (int (*)(...))QPicture::~QPicture
+32 (int (*)(...))QPicture::devType
+40 (int (*)(...))QPicture::paintEngine
+48 (int (*)(...))QPicture::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QPicture::setData
+
+Class QPicture
+ size=24 align=8
+ base size=24 base align=8
+QPicture (0x0x7f0b1f798e38) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+ QPaintDevice (0x0x7f0b1f7b7420) 0
+ primary-for QPicture (0x0x7f0b1f798e38)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7f0b1f7e7f00) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7f0b1f7e7ea0) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7f0b1f83b180) 0 empty
+
+Vtable for QRasterWindow
+QRasterWindow::_ZTV13QRasterWindow: 60 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QRasterWindow)
+16 (int (*)(...))QRasterWindow::metaObject
+24 (int (*)(...))QRasterWindow::qt_metacast
+32 (int (*)(...))QRasterWindow::qt_metacall
+40 (int (*)(...))QRasterWindow::~QRasterWindow
+48 (int (*)(...))QRasterWindow::~QRasterWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QPaintDeviceWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QRasterWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))QRasterWindow::redirected
+336 (int (*)(...))-16
+344 (int (*)(...))(& _ZTI13QRasterWindow)
+352 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD1Ev
+360 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD0Ev
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+384 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+392 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+400 (int (*)(...))-40
+408 (int (*)(...))(& _ZTI13QRasterWindow)
+416 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD1Ev
+424 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD0Ev
+432 (int (*)(...))QPaintDevice::devType
+440 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+448 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+456 (int (*)(...))QPaintDevice::initPainter
+464 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow10redirectedEP6QPoint
+472 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QRasterWindow
+ size=56 align=8
+ base size=50 base align=8
+QRasterWindow (0x0x7f0b1f8353a8) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+ QPaintDeviceWindow (0x0x7f0b1f82c310) 0
+ primary-for QRasterWindow (0x0x7f0b1f8353a8)
+ QWindow (0x0x7f0b1f82c380) 0
+ primary-for QPaintDeviceWindow (0x0x7f0b1f82c310)
+ QObject (0x0x7f0b1f83b060) 0
+ primary-for QWindow (0x0x7f0b1f82c380)
+ QSurface (0x0x7f0b1f83b0c0) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 352)
+ QPaintDevice (0x0x7f0b1f83b120) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 416)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7f0b1f83b360) 0 empty
+
+Vtable for QSessionManager
+QSessionManager::_ZTV15QSessionManager: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSessionManager)
+16 (int (*)(...))QSessionManager::metaObject
+24 (int (*)(...))QSessionManager::qt_metacast
+32 (int (*)(...))QSessionManager::qt_metacall
+40 (int (*)(...))QSessionManager::~QSessionManager
+48 (int (*)(...))QSessionManager::~QSessionManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSessionManager
+ size=16 align=8
+ base size=16 base align=8
+QSessionManager (0x0x7f0b1f835478) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+ QObject (0x0x7f0b1f83b300) 0
+ primary-for QSessionManager (0x0x7f0b1f835478)
+
+Class QShortcut::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QShortcut::QPrivateSignal (0x0x7f0b1f83b540) 0 empty
+
+Vtable for QShortcut
+QShortcut::_ZTV9QShortcut: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QShortcut)
+16 (int (*)(...))QShortcut::metaObject
+24 (int (*)(...))QShortcut::qt_metacast
+32 (int (*)(...))QShortcut::qt_metacall
+40 (int (*)(...))QShortcut::~QShortcut
+48 (int (*)(...))QShortcut::~QShortcut
+56 (int (*)(...))QShortcut::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QShortcut
+ size=16 align=8
+ base size=16 base align=8
+QShortcut (0x0x7f0b1f8354e0) 0
+ vptr=((& QShortcut::_ZTV9QShortcut) + 16)
+ QObject (0x0x7f0b1f83b4e0) 0
+ primary-for QShortcut (0x0x7f0b1f8354e0)
+
+Vtable for QStandardItem
+QStandardItem::_ZTV13QStandardItem: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QStandardItem)
+16 (int (*)(...))QStandardItem::~QStandardItem
+24 (int (*)(...))QStandardItem::~QStandardItem
+32 (int (*)(...))QStandardItem::data
+40 (int (*)(...))QStandardItem::multiData
+48 (int (*)(...))QStandardItem::setData
+56 (int (*)(...))QStandardItem::clone
+64 (int (*)(...))QStandardItem::type
+72 (int (*)(...))QStandardItem::read
+80 (int (*)(...))QStandardItem::write
+88 (int (*)(...))QStandardItem::operator<
+
+Class QStandardItem
+ size=16 align=8
+ base size=16 base align=8
+QStandardItem (0x0x7f0b1f83ba20) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7f0b1f89ba80) 0 empty
+
+Vtable for QStandardItemModel
+QStandardItemModel::_ZTV18QStandardItemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QStandardItemModel)
+16 (int (*)(...))QStandardItemModel::metaObject
+24 (int (*)(...))QStandardItemModel::qt_metacast
+32 (int (*)(...))QStandardItemModel::qt_metacall
+40 (int (*)(...))QStandardItemModel::~QStandardItemModel
+48 (int (*)(...))QStandardItemModel::~QStandardItemModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStandardItemModel::index
+120 (int (*)(...))QStandardItemModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QStandardItemModel::rowCount
+144 (int (*)(...))QStandardItemModel::columnCount
+152 (int (*)(...))QStandardItemModel::hasChildren
+160 (int (*)(...))QStandardItemModel::data
+168 (int (*)(...))QStandardItemModel::setData
+176 (int (*)(...))QStandardItemModel::headerData
+184 (int (*)(...))QStandardItemModel::setHeaderData
+192 (int (*)(...))QStandardItemModel::itemData
+200 (int (*)(...))QStandardItemModel::setItemData
+208 (int (*)(...))QStandardItemModel::clearItemData
+216 (int (*)(...))QStandardItemModel::mimeTypes
+224 (int (*)(...))QStandardItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QStandardItemModel::dropMimeData
+248 (int (*)(...))QStandardItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStandardItemModel::insertRows
+272 (int (*)(...))QStandardItemModel::insertColumns
+280 (int (*)(...))QStandardItemModel::removeRows
+288 (int (*)(...))QStandardItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStandardItemModel::flags
+336 (int (*)(...))QStandardItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QStandardItemModel::roleNames
+376 (int (*)(...))QStandardItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QStandardItemModel
+ size=16 align=8
+ base size=16 base align=8
+QStandardItemModel (0x0x7f0b1f835e38) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+ QAbstractItemModel (0x0x7f0b1f835ea0) 0
+ primary-for QStandardItemModel (0x0x7f0b1f835e38)
+ QObject (0x0x7f0b1f89ba20) 0
+ primary-for QAbstractItemModel (0x0x7f0b1f835ea0)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7f0b1f89bde0) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7f0b1f5306c0) 0 empty
+
+Vtable for QStyleHints
+QStyleHints::_ZTV11QStyleHints: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QStyleHints)
+16 (int (*)(...))QStyleHints::metaObject
+24 (int (*)(...))QStyleHints::qt_metacast
+32 (int (*)(...))QStyleHints::qt_metacall
+40 (int (*)(...))QStyleHints::~QStyleHints
+48 (int (*)(...))QStyleHints::~QStyleHints
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QStyleHints
+ size=16 align=8
+ base size=16 base align=8
+QStyleHints (0x0x7f0b1f52daf8) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+ QObject (0x0x7f0b1f530660) 0
+ primary-for QStyleHints (0x0x7f0b1f52daf8)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7f0b1f5308a0) 0 empty
+
+Vtable for QTextObject
+QTextObject::_ZTV11QTextObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTextObject)
+16 (int (*)(...))QTextObject::metaObject
+24 (int (*)(...))QTextObject::qt_metacast
+32 (int (*)(...))QTextObject::qt_metacall
+40 (int (*)(...))QTextObject::~QTextObject
+48 (int (*)(...))QTextObject::~QTextObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextObject
+ size=16 align=8
+ base size=16 base align=8
+QTextObject (0x0x7f0b1f52db60) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+ QObject (0x0x7f0b1f530840) 0
+ primary-for QTextObject (0x0x7f0b1f52db60)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7f0b1f530a80) 0 empty
+
+Vtable for QTextBlockGroup
+QTextBlockGroup::_ZTV15QTextBlockGroup: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QTextBlockGroup)
+16 (int (*)(...))QTextBlockGroup::metaObject
+24 (int (*)(...))QTextBlockGroup::qt_metacast
+32 (int (*)(...))QTextBlockGroup::qt_metacall
+40 (int (*)(...))QTextBlockGroup::~QTextBlockGroup
+48 (int (*)(...))QTextBlockGroup::~QTextBlockGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextBlockGroup::blockInserted
+120 (int (*)(...))QTextBlockGroup::blockRemoved
+128 (int (*)(...))QTextBlockGroup::blockFormatChanged
+
+Class QTextBlockGroup
+ size=16 align=8
+ base size=16 base align=8
+QTextBlockGroup (0x0x7f0b1f52dbc8) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+ QTextObject (0x0x7f0b1f52dc30) 0
+ primary-for QTextBlockGroup (0x0x7f0b1f52dbc8)
+ QObject (0x0x7f0b1f530a20) 0
+ primary-for QTextObject (0x0x7f0b1f52dc30)
+
+Vtable for QTextFrameLayoutData
+QTextFrameLayoutData::_ZTV20QTextFrameLayoutData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextFrameLayoutData)
+16 (int (*)(...))QTextFrameLayoutData::~QTextFrameLayoutData
+24 (int (*)(...))QTextFrameLayoutData::~QTextFrameLayoutData
+
+Class QTextFrameLayoutData
+ size=8 align=8
+ base size=8 base align=8
+QTextFrameLayoutData (0x0x7f0b1f530c00) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7f0b1f530cc0) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7f0b1f530d20) 0
+
+Vtable for QTextFrame
+QTextFrame::_ZTV10QTextFrame: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextFrame)
+16 (int (*)(...))QTextFrame::metaObject
+24 (int (*)(...))QTextFrame::qt_metacast
+32 (int (*)(...))QTextFrame::qt_metacall
+40 (int (*)(...))QTextFrame::~QTextFrame
+48 (int (*)(...))QTextFrame::~QTextFrame
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextFrame
+ size=16 align=8
+ base size=16 base align=8
+QTextFrame (0x0x7f0b1f52dc98) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+ QTextObject (0x0x7f0b1f52dd00) 0
+ primary-for QTextFrame (0x0x7f0b1f52dc98)
+ QObject (0x0x7f0b1f530c60) 0
+ primary-for QTextObject (0x0x7f0b1f52dd00)
+
+Vtable for QTextBlockUserData
+QTextBlockUserData::_ZTV18QTextBlockUserData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QTextBlockUserData)
+16 (int (*)(...))QTextBlockUserData::~QTextBlockUserData
+24 (int (*)(...))QTextBlockUserData::~QTextBlockUserData
+
+Class QTextBlockUserData
+ size=8 align=8
+ base size=8 base align=8
+QTextBlockUserData (0x0x7f0b1f576ba0) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7f0b1f576c60) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7f0b1f576c00) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7f0b1f5ce4e0) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7f0b1f5f2360) 0 empty
+
+Vtable for QSyntaxHighlighter
+QSyntaxHighlighter::_ZTV18QSyntaxHighlighter: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSyntaxHighlighter)
+16 (int (*)(...))QSyntaxHighlighter::metaObject
+24 (int (*)(...))QSyntaxHighlighter::qt_metacast
+32 (int (*)(...))QSyntaxHighlighter::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QSyntaxHighlighter
+ size=16 align=8
+ base size=16 base align=8
+QSyntaxHighlighter (0x0x7f0b1f5eaea0) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+ QObject (0x0x7f0b1f5f2300) 0
+ primary-for QSyntaxHighlighter (0x0x7f0b1f5eaea0)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7f0b1f5f24e0) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7f0b1f5f2540) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7f0b1f5f2600) 0 empty
+
+Vtable for QTextList
+QTextList::_ZTV9QTextList: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTextList)
+16 (int (*)(...))QTextList::metaObject
+24 (int (*)(...))QTextList::qt_metacast
+32 (int (*)(...))QTextList::qt_metacall
+40 (int (*)(...))QTextList::~QTextList
+48 (int (*)(...))QTextList::~QTextList
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextBlockGroup::blockInserted
+120 (int (*)(...))QTextBlockGroup::blockRemoved
+128 (int (*)(...))QTextBlockGroup::blockFormatChanged
+
+Class QTextList
+ size=16 align=8
+ base size=16 base align=8
+QTextList (0x0x7f0b1f5eaf08) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+ QTextBlockGroup (0x0x7f0b1f5eaf70) 0
+ primary-for QTextList (0x0x7f0b1f5eaf08)
+ QTextObject (0x0x7f0b1f60b000) 0
+ primary-for QTextBlockGroup (0x0x7f0b1f5eaf70)
+ QObject (0x0x7f0b1f5f25a0) 0
+ primary-for QTextObject (0x0x7f0b1f60b000)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7f0b1f5f29c0) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7f0b1f61f240) 0 empty
+
+Vtable for QTextTable
+QTextTable::_ZTV10QTextTable: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextTable)
+16 (int (*)(...))QTextTable::metaObject
+24 (int (*)(...))QTextTable::qt_metacast
+32 (int (*)(...))QTextTable::qt_metacall
+40 (int (*)(...))QTextTable::~QTextTable
+48 (int (*)(...))QTextTable::~QTextTable
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextTable
+ size=16 align=8
+ base size=16 base align=8
+QTextTable (0x0x7f0b1f60b068) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+ QTextFrame (0x0x7f0b1f60b0d0) 0
+ primary-for QTextTable (0x0x7f0b1f60b068)
+ QTextObject (0x0x7f0b1f60b138) 0
+ primary-for QTextFrame (0x0x7f0b1f60b0d0)
+ QObject (0x0x7f0b1f61f1e0) 0
+ primary-for QTextObject (0x0x7f0b1f60b138)
+
+Class QUndoGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoGroup::QPrivateSignal (0x0x7f0b1f61f600) 0 empty
+
+Vtable for QUndoGroup
+QUndoGroup::_ZTV10QUndoGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUndoGroup)
+16 (int (*)(...))QUndoGroup::metaObject
+24 (int (*)(...))QUndoGroup::qt_metacast
+32 (int (*)(...))QUndoGroup::qt_metacall
+40 (int (*)(...))QUndoGroup::~QUndoGroup
+48 (int (*)(...))QUndoGroup::~QUndoGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QUndoGroup
+ size=16 align=8
+ base size=16 base align=8
+QUndoGroup (0x0x7f0b1f60b1a0) 0
+ vptr=((& QUndoGroup::_ZTV10QUndoGroup) + 16)
+ QObject (0x0x7f0b1f61f5a0) 0
+ primary-for QUndoGroup (0x0x7f0b1f60b1a0)
+
+Vtable for QUndoCommand
+QUndoCommand::_ZTV12QUndoCommand: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QUndoCommand)
+16 (int (*)(...))QUndoCommand::~QUndoCommand
+24 (int (*)(...))QUndoCommand::~QUndoCommand
+32 (int (*)(...))QUndoCommand::undo
+40 (int (*)(...))QUndoCommand::redo
+48 (int (*)(...))QUndoCommand::id
+56 (int (*)(...))QUndoCommand::mergeWith
+
+Class QUndoCommand
+ size=16 align=8
+ base size=16 base align=8
+QUndoCommand (0x0x7f0b1f61f780) 0
+ vptr=((& QUndoCommand::_ZTV12QUndoCommand) + 16)
+
+Class QUndoStack::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoStack::QPrivateSignal (0x0x7f0b1f61f840) 0 empty
+
+Vtable for QUndoStack
+QUndoStack::_ZTV10QUndoStack: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUndoStack)
+16 (int (*)(...))QUndoStack::metaObject
+24 (int (*)(...))QUndoStack::qt_metacast
+32 (int (*)(...))QUndoStack::qt_metacall
+40 (int (*)(...))QUndoStack::~QUndoStack
+48 (int (*)(...))QUndoStack::~QUndoStack
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QUndoStack
+ size=16 align=8
+ base size=16 base align=8
+QUndoStack (0x0x7f0b1f60b208) 0
+ vptr=((& QUndoStack::_ZTV10QUndoStack) + 16)
+ QObject (0x0x7f0b1f61f7e0) 0
+ primary-for QUndoStack (0x0x7f0b1f60b208)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7f0b1f61fa20) 0 empty
+
+Vtable for QValidator
+QValidator::_ZTV10QValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QValidator)
+16 (int (*)(...))QValidator::metaObject
+24 (int (*)(...))QValidator::qt_metacast
+32 (int (*)(...))QValidator::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))QValidator::fixup
+
+Class QValidator
+ size=16 align=8
+ base size=16 base align=8
+QValidator (0x0x7f0b1f60b270) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+ QObject (0x0x7f0b1f61f9c0) 0
+ primary-for QValidator (0x0x7f0b1f60b270)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7f0b1f61fcc0) 0 empty
+
+Vtable for QIntValidator
+QIntValidator::_ZTV13QIntValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QIntValidator)
+16 (int (*)(...))QIntValidator::metaObject
+24 (int (*)(...))QIntValidator::qt_metacast
+32 (int (*)(...))QIntValidator::qt_metacall
+40 (int (*)(...))QIntValidator::~QIntValidator
+48 (int (*)(...))QIntValidator::~QIntValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIntValidator::validate
+120 (int (*)(...))QIntValidator::fixup
+
+Class QIntValidator
+ size=24 align=8
+ base size=24 base align=8
+QIntValidator (0x0x7f0b1f60b2d8) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+ QValidator (0x0x7f0b1f60b340) 0
+ primary-for QIntValidator (0x0x7f0b1f60b2d8)
+ QObject (0x0x7f0b1f61fc60) 0
+ primary-for QValidator (0x0x7f0b1f60b340)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7f0b1f61fea0) 0 empty
+
+Vtable for QDoubleValidator
+QDoubleValidator::_ZTV16QDoubleValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QDoubleValidator)
+16 (int (*)(...))QDoubleValidator::metaObject
+24 (int (*)(...))QDoubleValidator::qt_metacast
+32 (int (*)(...))QDoubleValidator::qt_metacall
+40 (int (*)(...))QDoubleValidator::~QDoubleValidator
+48 (int (*)(...))QDoubleValidator::~QDoubleValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDoubleValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QDoubleValidator
+ size=40 align=8
+ base size=36 base align=8
+QDoubleValidator (0x0x7f0b1f60b3a8) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+ QValidator (0x0x7f0b1f60b410) 0
+ primary-for QDoubleValidator (0x0x7f0b1f60b3a8)
+ QObject (0x0x7f0b1f61fe40) 0
+ primary-for QValidator (0x0x7f0b1f60b410)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7f0b1f6632a0) 0 empty
+
+Vtable for QRegularExpressionValidator
+QRegularExpressionValidator::_ZTV27QRegularExpressionValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QRegularExpressionValidator)
+16 (int (*)(...))QRegularExpressionValidator::metaObject
+24 (int (*)(...))QRegularExpressionValidator::qt_metacast
+32 (int (*)(...))QRegularExpressionValidator::qt_metacall
+40 (int (*)(...))QRegularExpressionValidator::~QRegularExpressionValidator
+48 (int (*)(...))QRegularExpressionValidator::~QRegularExpressionValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QRegularExpressionValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QRegularExpressionValidator
+ size=16 align=8
+ base size=16 base align=8
+QRegularExpressionValidator (0x0x7f0b1f60b478) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+ QValidator (0x0x7f0b1f60b4e0) 0
+ primary-for QRegularExpressionValidator (0x0x7f0b1f60b478)
+ QObject (0x0x7f0b1f663240) 0
+ primary-for QValidator (0x0x7f0b1f60b4e0)
+
+Class QSizePolicy::Bits
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy::Bits (0x0x7f0b1f663480) 0
+
+Class QSizePolicy
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy (0x0x7f0b1f663420) 0
+
+Class QWidgetData
+ size=88 align=8
+ base size=88 base align=8
+QWidgetData (0x0x7f0b1f6ba420) 0
+
+Class QWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidget::QPrivateSignal (0x0x7f0b1f6ba540) 0 empty
+
+Vtable for QWidget
+QWidget::_ZTV7QWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWidget)
+16 (int (*)(...))QWidget::metaObject
+24 (int (*)(...))QWidget::qt_metacast
+32 (int (*)(...))QWidget::qt_metacall
+40 (int (*)(...))QWidget::~QWidget
+48 (int (*)(...))QWidget::~QWidget
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI7QWidget)
+448 (int (*)(...))QWidget::_ZThn16_N7QWidgetD1Ev
+456 (int (*)(...))QWidget::_ZThn16_N7QWidgetD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWidget
+ size=40 align=8
+ base size=40 base align=8
+QWidget (0x0x7f0b1f670cb0) 0
+ vptr=((& QWidget::_ZTV7QWidget) + 16)
+ QObject (0x0x7f0b1f6ba480) 0
+ primary-for QWidget (0x0x7f0b1f670cb0)
+ QPaintDevice (0x0x7f0b1f6ba4e0) 16
+ vptr=((& QWidget::_ZTV7QWidget) + 448)
+
+Class QAbstractButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractButton::QPrivateSignal (0x0x7f0b1f323de0) 0 empty
+
+Vtable for QAbstractButton
+QAbstractButton::_ZTV15QAbstractButton: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractButton)
+16 (int (*)(...))QAbstractButton::metaObject
+24 (int (*)(...))QAbstractButton::qt_metacast
+32 (int (*)(...))QAbstractButton::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI15QAbstractButton)
+472 0
+480 0
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractButton
+ size=40 align=8
+ base size=40 base align=8
+QAbstractButton (0x0x7f0b1f6b94e0) 0
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 16)
+ QWidget (0x0x7f0b1f670ee0) 0
+ primary-for QAbstractButton (0x0x7f0b1f6b94e0)
+ QObject (0x0x7f0b1f323d20) 0
+ primary-for QWidget (0x0x7f0b1f670ee0)
+ QPaintDevice (0x0x7f0b1f323d80) 16
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 472)
+
+Class QAbstractSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSpinBox::QPrivateSignal (0x0x7f0b1f343060) 0 empty
+
+Vtable for QAbstractSpinBox
+QAbstractSpinBox::_ZTV16QAbstractSpinBox: 70 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAbstractSpinBox)
+16 (int (*)(...))QAbstractSpinBox::metaObject
+24 (int (*)(...))QAbstractSpinBox::qt_metacast
+32 (int (*)(...))QAbstractSpinBox::qt_metacall
+40 (int (*)(...))QAbstractSpinBox::~QAbstractSpinBox
+48 (int (*)(...))QAbstractSpinBox::~QAbstractSpinBox
+56 (int (*)(...))QAbstractSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSpinBox::validate
+440 (int (*)(...))QAbstractSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI16QAbstractSpinBox)
+496 (int (*)(...))QAbstractSpinBox::_ZThn16_N16QAbstractSpinBoxD1Ev
+504 (int (*)(...))QAbstractSpinBox::_ZThn16_N16QAbstractSpinBoxD0Ev
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QAbstractSpinBox (0x0x7f0b1f6b9548) 0
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 16)
+ QWidget (0x0x7f0b1f670f50) 0
+ primary-for QAbstractSpinBox (0x0x7f0b1f6b9548)
+ QObject (0x0x7f0b1f323f60) 0
+ primary-for QWidget (0x0x7f0b1f670f50)
+ QPaintDevice (0x0x7f0b1f343000) 16
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 496)
+
+Class QAbstractSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSlider::QPrivateSignal (0x0x7f0b1f3437e0) 0 empty
+
+Vtable for QAbstractSlider
+QAbstractSlider::_ZTV15QAbstractSlider: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractSlider)
+16 (int (*)(...))QAbstractSlider::metaObject
+24 (int (*)(...))QAbstractSlider::qt_metacast
+32 (int (*)(...))QAbstractSlider::qt_metacall
+40 (int (*)(...))QAbstractSlider::~QAbstractSlider
+48 (int (*)(...))QAbstractSlider::~QAbstractSlider
+56 (int (*)(...))QAbstractSlider::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSlider::sliderChange
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI15QAbstractSlider)
+456 (int (*)(...))QAbstractSlider::_ZThn16_N15QAbstractSliderD1Ev
+464 (int (*)(...))QAbstractSlider::_ZThn16_N15QAbstractSliderD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractSlider
+ size=40 align=8
+ base size=40 base align=8
+QAbstractSlider (0x0x7f0b1f6b96e8) 0
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 16)
+ QWidget (0x0x7f0b1f3473f0) 0
+ primary-for QAbstractSlider (0x0x7f0b1f6b96e8)
+ QObject (0x0x7f0b1f343720) 0
+ primary-for QWidget (0x0x7f0b1f3473f0)
+ QPaintDevice (0x0x7f0b1f343780) 16
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 456)
+
+Class QSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSlider::QPrivateSignal (0x0x7f0b1f343a20) 0 empty
+
+Vtable for QSlider
+QSlider::_ZTV7QSlider: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QSlider)
+16 (int (*)(...))QSlider::metaObject
+24 (int (*)(...))QSlider::qt_metacast
+32 (int (*)(...))QSlider::qt_metacall
+40 (int (*)(...))QSlider::~QSlider
+48 (int (*)(...))QSlider::~QSlider
+56 (int (*)(...))QSlider::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSlider::sizeHint
+136 (int (*)(...))QSlider::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSlider::mousePressEvent
+176 (int (*)(...))QSlider::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSlider::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSlider::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSlider::sliderChange
+440 (int (*)(...))QSlider::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI7QSlider)
+464 (int (*)(...))QSlider::_ZThn16_N7QSliderD1Ev
+472 (int (*)(...))QSlider::_ZThn16_N7QSliderD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSlider
+ size=40 align=8
+ base size=40 base align=8
+QSlider (0x0x7f0b1f6b9750) 0
+ vptr=((& QSlider::_ZTV7QSlider) + 16)
+ QAbstractSlider (0x0x7f0b1f6b97b8) 0
+ primary-for QSlider (0x0x7f0b1f6b9750)
+ QWidget (0x0x7f0b1f3479a0) 0
+ primary-for QAbstractSlider (0x0x7f0b1f6b97b8)
+ QObject (0x0x7f0b1f343960) 0
+ primary-for QWidget (0x0x7f0b1f3479a0)
+ QPaintDevice (0x0x7f0b1f3439c0) 16
+ vptr=((& QSlider::_ZTV7QSlider) + 464)
+
+Class QStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyle::QPrivateSignal (0x0x7f0b1f343cc0) 0 empty
+
+Vtable for QStyle
+QStyle::_ZTV6QStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QStyle)
+16 (int (*)(...))QStyle::metaObject
+24 (int (*)(...))QStyle::qt_metacast
+32 (int (*)(...))QStyle::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStyle::polish
+120 (int (*)(...))QStyle::unpolish
+128 (int (*)(...))QStyle::polish
+136 (int (*)(...))QStyle::unpolish
+144 (int (*)(...))QStyle::polish
+152 (int (*)(...))QStyle::itemTextRect
+160 (int (*)(...))QStyle::itemPixmapRect
+168 (int (*)(...))QStyle::drawItemText
+176 (int (*)(...))QStyle::drawItemPixmap
+184 (int (*)(...))QStyle::standardPalette
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+232 (int (*)(...))__cxa_pure_virtual
+240 (int (*)(...))__cxa_pure_virtual
+248 (int (*)(...))__cxa_pure_virtual
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))__cxa_pure_virtual
+272 (int (*)(...))__cxa_pure_virtual
+280 (int (*)(...))__cxa_pure_virtual
+288 (int (*)(...))__cxa_pure_virtual
+
+Class QStyle
+ size=16 align=8
+ base size=16 base align=8
+QStyle (0x0x7f0b1f6b9820) 0
+ vptr=((& QStyle::_ZTV6QStyle) + 16)
+ QObject (0x0x7f0b1f343c60) 0
+ primary-for QStyle (0x0x7f0b1f6b9820)
+
+Class QTabBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabBar::QPrivateSignal (0x0x7f0b1f3c1d80) 0 empty
+
+Vtable for QTabBar
+QTabBar::_ZTV7QTabBar: 70 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QTabBar)
+16 (int (*)(...))QTabBar::metaObject
+24 (int (*)(...))QTabBar::qt_metacast
+32 (int (*)(...))QTabBar::qt_metacall
+40 (int (*)(...))QTabBar::~QTabBar
+48 (int (*)(...))QTabBar::~QTabBar
+56 (int (*)(...))QTabBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTabBar::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QTabBar::sizeHint
+136 (int (*)(...))QTabBar::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTabBar::mousePressEvent
+176 (int (*)(...))QTabBar::mouseReleaseEvent
+184 (int (*)(...))QTabBar::mouseDoubleClickEvent
+192 (int (*)(...))QTabBar::mouseMoveEvent
+200 (int (*)(...))QTabBar::wheelEvent
+208 (int (*)(...))QTabBar::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTabBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTabBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QTabBar::showEvent
+352 (int (*)(...))QTabBar::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTabBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QTabBar::tabSizeHint
+440 (int (*)(...))QTabBar::minimumTabSizeHint
+448 (int (*)(...))QTabBar::tabInserted
+456 (int (*)(...))QTabBar::tabRemoved
+464 (int (*)(...))QTabBar::tabLayoutChange
+472 (int (*)(...))QTabBar::initStyleOption
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI7QTabBar)
+496 (int (*)(...))QTabBar::_ZThn16_N7QTabBarD1Ev
+504 (int (*)(...))QTabBar::_ZThn16_N7QTabBarD0Ev
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTabBar
+ size=40 align=8
+ base size=40 base align=8
+QTabBar (0x0x7f0b1f6b9af8) 0
+ vptr=((& QTabBar::_ZTV7QTabBar) + 16)
+ QWidget (0x0x7f0b1f3b4460) 0
+ primary-for QTabBar (0x0x7f0b1f6b9af8)
+ QObject (0x0x7f0b1f3c1cc0) 0
+ primary-for QWidget (0x0x7f0b1f3b4460)
+ QPaintDevice (0x0x7f0b1f3c1d20) 16
+ vptr=((& QTabBar::_ZTV7QTabBar) + 496)
+
+Class QTabWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabWidget::QPrivateSignal (0x0x7f0b1f4090c0) 0 empty
+
+Vtable for QTabWidget
+QTabWidget::_ZTV10QTabWidget: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTabWidget)
+16 (int (*)(...))QTabWidget::metaObject
+24 (int (*)(...))QTabWidget::qt_metacast
+32 (int (*)(...))QTabWidget::qt_metacall
+40 (int (*)(...))QTabWidget::~QTabWidget
+48 (int (*)(...))QTabWidget::~QTabWidget
+56 (int (*)(...))QTabWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QTabWidget::sizeHint
+136 (int (*)(...))QTabWidget::minimumSizeHint
+144 (int (*)(...))QTabWidget::heightForWidth
+152 (int (*)(...))QTabWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QTabWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTabWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTabWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QTabWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTabWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QTabWidget::tabInserted
+440 (int (*)(...))QTabWidget::tabRemoved
+448 (int (*)(...))QTabWidget::initStyleOption
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI10QTabWidget)
+472 (int (*)(...))QTabWidget::_ZThn16_N10QTabWidgetD1Ev
+480 (int (*)(...))QTabWidget::_ZThn16_N10QTabWidgetD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTabWidget
+ size=40 align=8
+ base size=40 base align=8
+QTabWidget (0x0x7f0b1f6b9b60) 0
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 16)
+ QWidget (0x0x7f0b1f3b4a80) 0
+ primary-for QTabWidget (0x0x7f0b1f6b9b60)
+ QObject (0x0x7f0b1f409000) 0
+ primary-for QWidget (0x0x7f0b1f3b4a80)
+ QPaintDevice (0x0x7f0b1f409060) 16
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 472)
+
+Class QRubberBand::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRubberBand::QPrivateSignal (0x0x7f0b1f409480) 0 empty
+
+Vtable for QRubberBand
+QRubberBand::_ZTV11QRubberBand: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QRubberBand)
+16 (int (*)(...))QRubberBand::metaObject
+24 (int (*)(...))QRubberBand::qt_metacast
+32 (int (*)(...))QRubberBand::qt_metacall
+40 (int (*)(...))QRubberBand::~QRubberBand
+48 (int (*)(...))QRubberBand::~QRubberBand
+56 (int (*)(...))QRubberBand::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QRubberBand::paintEvent
+264 (int (*)(...))QRubberBand::moveEvent
+272 (int (*)(...))QRubberBand::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QRubberBand::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QRubberBand::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QRubberBand::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QRubberBand)
+456 (int (*)(...))QRubberBand::_ZThn16_N11QRubberBandD1Ev
+464 (int (*)(...))QRubberBand::_ZThn16_N11QRubberBandD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QRubberBand
+ size=40 align=8
+ base size=40 base align=8
+QRubberBand (0x0x7f0b1f6b9bc8) 0
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 16)
+ QWidget (0x0x7f0b1f3b4d90) 0
+ primary-for QRubberBand (0x0x7f0b1f6b9bc8)
+ QObject (0x0x7f0b1f4093c0) 0
+ primary-for QWidget (0x0x7f0b1f3b4d90)
+ QPaintDevice (0x0x7f0b1f409420) 16
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 456)
+
+Class QFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFrame::QPrivateSignal (0x0x7f0b1f4098a0) 0 empty
+
+Vtable for QFrame
+QFrame::_ZTV6QFrame: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QFrame)
+16 (int (*)(...))QFrame::metaObject
+24 (int (*)(...))QFrame::qt_metacast
+32 (int (*)(...))QFrame::qt_metacall
+40 (int (*)(...))QFrame::~QFrame
+48 (int (*)(...))QFrame::~QFrame
+56 (int (*)(...))QFrame::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI6QFrame)
+456 (int (*)(...))QFrame::_ZThn16_N6QFrameD1Ev
+464 (int (*)(...))QFrame::_ZThn16_N6QFrameD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFrame
+ size=40 align=8
+ base size=40 base align=8
+QFrame (0x0x7f0b1f6b9c30) 0
+ vptr=((& QFrame::_ZTV6QFrame) + 16)
+ QWidget (0x0x7f0b1f3b4ee0) 0
+ primary-for QFrame (0x0x7f0b1f6b9c30)
+ QObject (0x0x7f0b1f4097e0) 0
+ primary-for QWidget (0x0x7f0b1f3b4ee0)
+ QPaintDevice (0x0x7f0b1f409840) 16
+ vptr=((& QFrame::_ZTV6QFrame) + 456)
+
+Class QStyleOption
+ size=64 align=8
+ base size=64 base align=8
+QStyleOption (0x0x7f0b1f409ba0) 0
+
+Class QStyleOptionFocusRect
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFocusRect (0x0x7f0b1f6b9c98) 0
+ QStyleOption (0x0x7f0b1f409c00) 0
+
+Class QStyleOptionFrame
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFrame (0x0x7f0b22620208) 0
+ QStyleOption (0x0x7f0b1f409e40) 0
+
+Class QStyleOptionTabWidgetFrame
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionTabWidgetFrame (0x0x7f0b226203a8) 0
+ QStyleOption (0x0x7f0b1f4513c0) 0
+
+Class QStyleOptionTabBarBase
+ size=104 align=8
+ base size=101 base align=8
+QStyleOptionTabBarBase (0x0x7f0b1f6b9d00) 0
+ QStyleOption (0x0x7f0b1f451600) 0
+
+Class QStyleOptionHeader
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionHeader (0x0x7f0b1f6b9d68) 0
+ QStyleOption (0x0x7f0b1f451840) 0
+
+Class QStyleOptionButton
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionButton (0x0x7f0b1f6b9dd0) 0
+ QStyleOption (0x0x7f0b1f451a80) 0
+
+Class QStyleOptionTab
+ size=160 align=8
+ base size=156 base align=8
+QStyleOptionTab (0x0x7f0b1f6b9f70) 0
+ QStyleOption (0x0x7f0b1f499000) 0
+
+Class QStyleOptionToolBar
+ size=88 align=8
+ base size=88 base align=8
+QStyleOptionToolBar (0x0x7f0b1f49d270) 0
+ QStyleOption (0x0x7f0b1f499720) 0
+
+Class QStyleOptionProgressBar
+ size=112 align=8
+ base size=111 base align=8
+QStyleOptionProgressBar (0x0x7f0b1f49d410) 0
+ QStyleOption (0x0x7f0b1f499c60) 0
+
+Class QStyleOptionMenuItem
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionMenuItem (0x0x7f0b1f49d478) 0
+ QStyleOption (0x0x7f0b1f499ea0) 0
+
+Class QStyleOptionDockWidget
+ size=96 align=8
+ base size=92 base align=8
+QStyleOptionDockWidget (0x0x7f0b1f49d4e0) 0
+ QStyleOption (0x0x7f0b1f0f1120) 0
+
+Class QStyleOptionViewItem
+ size=208 align=8
+ base size=208 base align=8
+QStyleOptionViewItem (0x0x7f0b1f49d548) 0
+ QStyleOption (0x0x7f0b1f0f1360) 0
+
+Class QStyleOptionToolBox
+ size=104 align=8
+ base size=104 base align=8
+QStyleOptionToolBox (0x0x7f0b1f49d6e8) 0
+ QStyleOption (0x0x7f0b1f0f18a0) 0
+
+Class QStyleOptionRubberBand
+ size=72 align=8
+ base size=69 base align=8
+QStyleOptionRubberBand (0x0x7f0b1f49d750) 0
+ QStyleOption (0x0x7f0b1f0f1ae0) 0
+
+Class QStyleOptionComplex
+ size=72 align=8
+ base size=72 base align=8
+QStyleOptionComplex (0x0x7f0b1f49d7b8) 0
+ QStyleOption (0x0x7f0b1f0f1d80) 0
+
+Class QStyleOptionSlider
+ size=128 align=8
+ base size=128 base align=8
+QStyleOptionSlider (0x0x7f0b1f49d820) 0
+ QStyleOptionComplex (0x0x7f0b1f49d888) 0
+ QStyleOption (0x0x7f0b1f125060) 0
+
+Class QStyleOptionSpinBox
+ size=88 align=8
+ base size=81 base align=8
+QStyleOptionSpinBox (0x0x7f0b1f49d958) 0
+ QStyleOptionComplex (0x0x7f0b1f49d9c0) 0
+ QStyleOption (0x0x7f0b1f125420) 0
+
+Class QStyleOptionToolButton
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionToolButton (0x0x7f0b1f49da90) 0
+ QStyleOptionComplex (0x0x7f0b1f49daf8) 0
+ QStyleOption (0x0x7f0b1f125660) 0
+
+Class QStyleOptionComboBox
+ size=144 align=8
+ base size=140 base align=8
+QStyleOptionComboBox (0x0x7f0b1f49dc98) 0
+ QStyleOptionComplex (0x0x7f0b1f49dd00) 0
+ QStyleOption (0x0x7f0b1f125ba0) 0
+
+Class QStyleOptionTitleBar
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionTitleBar (0x0x7f0b1f49dd68) 0
+ QStyleOptionComplex (0x0x7f0b1f49ddd0) 0
+ QStyleOption (0x0x7f0b1f125de0) 0
+
+Class QStyleOptionGroupBox
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionGroupBox (0x0x7f0b1f49de38) 0
+ QStyleOptionComplex (0x0x7f0b1f49dea0) 0
+ QStyleOption (0x0x7f0b1f15c000) 0
+
+Class QStyleOptionSizeGrip
+ size=80 align=8
+ base size=76 base align=8
+QStyleOptionSizeGrip (0x0x7f0b1f49df08) 0
+ QStyleOptionComplex (0x0x7f0b1f49df70) 0
+ QStyleOption (0x0x7f0b1f15c240) 0
+
+Class QStyleOptionGraphicsItem
+ size=96 align=8
+ base size=96 base align=8
+QStyleOptionGraphicsItem (0x0x7f0b1f49d8f0) 0
+ QStyleOption (0x0x7f0b1f15c480) 0
+
+Class QStyleHintReturn
+ size=8 align=4
+ base size=8 base align=4
+QStyleHintReturn (0x0x7f0b1f15c7e0) 0
+
+Class QStyleHintReturnMask
+ size=16 align=8
+ base size=16 base align=8
+QStyleHintReturnMask (0x0x7f0b1f174000) 0
+ QStyleHintReturn (0x0x7f0b1f15c840) 0
+
+Class QStyleHintReturnVariant
+ size=40 align=8
+ base size=40 base align=8
+QStyleHintReturnVariant (0x0x7f0b1f1740d0) 0
+ QStyleHintReturn (0x0x7f0b1f15c8a0) 0
+
+Class QAbstractItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemDelegate::QPrivateSignal (0x0x7f0b1f15ca20) 0 empty
+
+Vtable for QAbstractItemDelegate
+QAbstractItemDelegate::_ZTV21QAbstractItemDelegate: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QAbstractItemDelegate)
+16 (int (*)(...))QAbstractItemDelegate::metaObject
+24 (int (*)(...))QAbstractItemDelegate::qt_metacast
+32 (int (*)(...))QAbstractItemDelegate::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QAbstractItemDelegate::setEditorData
+152 (int (*)(...))QAbstractItemDelegate::setModelData
+160 (int (*)(...))QAbstractItemDelegate::updateEditorGeometry
+168 (int (*)(...))QAbstractItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+
+Class QAbstractItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemDelegate (0x0x7f0b1f1741a0) 0
+ vptr=((& QAbstractItemDelegate::_ZTV21QAbstractItemDelegate) + 16)
+ QObject (0x0x7f0b1f15c9c0) 0
+ primary-for QAbstractItemDelegate (0x0x7f0b1f1741a0)
+
+Class QAbstractScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractScrollArea::QPrivateSignal (0x0x7f0b1f15cc60) 0 empty
+
+Vtable for QAbstractScrollArea
+QAbstractScrollArea::_ZTV19QAbstractScrollArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractScrollArea)
+16 (int (*)(...))QAbstractScrollArea::metaObject
+24 (int (*)(...))QAbstractScrollArea::qt_metacast
+32 (int (*)(...))QAbstractScrollArea::qt_metacall
+40 (int (*)(...))QAbstractScrollArea::~QAbstractScrollArea
+48 (int (*)(...))QAbstractScrollArea::~QAbstractScrollArea
+56 (int (*)(...))QAbstractScrollArea::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractScrollArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QAbstractScrollArea::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI19QAbstractScrollArea)
+488 (int (*)(...))QAbstractScrollArea::_ZThn16_N19QAbstractScrollAreaD1Ev
+496 (int (*)(...))QAbstractScrollArea::_ZThn16_N19QAbstractScrollAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractScrollArea
+ size=40 align=8
+ base size=40 base align=8
+QAbstractScrollArea (0x0x7f0b1f174208) 0
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 16)
+ QFrame (0x0x7f0b1f174270) 0
+ primary-for QAbstractScrollArea (0x0x7f0b1f174208)
+ QWidget (0x0x7f0b1f17d150) 0
+ primary-for QFrame (0x0x7f0b1f174270)
+ QObject (0x0x7f0b1f15cba0) 0
+ primary-for QWidget (0x0x7f0b1f17d150)
+ QPaintDevice (0x0x7f0b1f15cc00) 16
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 488)
+
+Class QAbstractItemView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemView::QPrivateSignal (0x0x7f0b1f15cf60) 0 empty
+
+Vtable for QAbstractItemView
+QAbstractItemView::_ZTV17QAbstractItemView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAbstractItemView)
+16 (int (*)(...))QAbstractItemView::metaObject
+24 (int (*)(...))QAbstractItemView::qt_metacast
+32 (int (*)(...))QAbstractItemView::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QAbstractScrollArea::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))__cxa_pure_virtual
+504 (int (*)(...))__cxa_pure_virtual
+512 (int (*)(...))__cxa_pure_virtual
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QAbstractItemView::setRootIndex
+560 (int (*)(...))QAbstractItemView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QAbstractItemView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QAbstractItemView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))__cxa_pure_virtual
+704 (int (*)(...))__cxa_pure_virtual
+712 (int (*)(...))__cxa_pure_virtual
+720 (int (*)(...))__cxa_pure_virtual
+728 (int (*)(...))__cxa_pure_virtual
+736 (int (*)(...))__cxa_pure_virtual
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI17QAbstractItemView)
+800 0
+808 0
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractItemView
+ size=40 align=8
+ base size=40 base align=8
+QAbstractItemView (0x0x7f0b1f1742d8) 0
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 16)
+ QAbstractScrollArea (0x0x7f0b1f174340) 0
+ primary-for QAbstractItemView (0x0x7f0b1f1742d8)
+ QFrame (0x0x7f0b1f1743a8) 0
+ primary-for QAbstractScrollArea (0x0x7f0b1f174340)
+ QWidget (0x0x7f0b1f17d310) 0
+ primary-for QFrame (0x0x7f0b1f1743a8)
+ QObject (0x0x7f0b1f15cea0) 0
+ primary-for QWidget (0x0x7f0b1f17d310)
+ QPaintDevice (0x0x7f0b1f15cf00) 16
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 800)
+
+Vtable for QAccessibleWidget
+QAccessibleWidget::_ZTV17QAccessibleWidget: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleWidget)
+16 (int (*)(...))QAccessibleWidget::~QAccessibleWidget
+24 (int (*)(...))QAccessibleWidget::~QAccessibleWidget
+32 (int (*)(...))QAccessibleWidget::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleWidget::window
+56 (int (*)(...))QAccessibleWidget::relations
+64 (int (*)(...))QAccessibleWidget::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))QAccessibleWidget::parent
+88 (int (*)(...))QAccessibleWidget::child
+96 (int (*)(...))QAccessibleWidget::childCount
+104 (int (*)(...))QAccessibleWidget::indexOfChild
+112 (int (*)(...))QAccessibleWidget::text
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleWidget::rect
+136 (int (*)(...))QAccessibleWidget::role
+144 (int (*)(...))QAccessibleWidget::state
+152 (int (*)(...))QAccessibleWidget::foregroundColor
+160 (int (*)(...))QAccessibleWidget::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleWidget::interface_cast
+184 (int (*)(...))QAccessibleWidget::actionNames
+192 (int (*)(...))QAccessibleWidget::doAction
+200 (int (*)(...))QAccessibleWidget::keyBindingsForAction
+208 (int (*)(...))-16
+216 (int (*)(...))(& _ZTI17QAccessibleWidget)
+224 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidgetD1Ev
+232 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidgetD0Ev
+240 (int (*)(...))QAccessibleWidget::_ZThn16_NK17QAccessibleWidget11actionNamesEv
+248 (int (*)(...))QAccessibleActionInterface::localizedActionName
+256 (int (*)(...))QAccessibleActionInterface::localizedActionDescription
+264 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidget8doActionERK7QString
+272 (int (*)(...))QAccessibleWidget::_ZThn16_NK17QAccessibleWidget20keyBindingsForActionERK7QString
+
+Class QAccessibleWidget
+ size=32 align=8
+ base size=32 base align=8
+QAccessibleWidget (0x0x7f0b1f1b4850) 0
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 16)
+ QAccessibleObject (0x0x7f0b1f174548) 0
+ primary-for QAccessibleWidget (0x0x7f0b1f1b4850)
+ QAccessibleInterface (0x0x7f0b1f1c6900) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f0b1f174548)
+ QAccessibleActionInterface (0x0x7f0b1f1c6960) 16 nearly-empty
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 224)
+
+Class QApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QApplication::QPrivateSignal (0x0x7f0b1f1c6a80) 0 empty
+
+Vtable for QApplication
+QApplication::_ZTV12QApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QApplication)
+16 (int (*)(...))QApplication::metaObject
+24 (int (*)(...))QApplication::qt_metacast
+32 (int (*)(...))QApplication::qt_metacall
+40 (int (*)(...))QApplication::~QApplication
+48 (int (*)(...))QApplication::~QApplication
+56 (int (*)(...))QApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QApplication::notify
+120 (int (*)(...))QApplication::compressEvent
+
+Class QApplication
+ size=16 align=8
+ base size=16 base align=8
+QApplication (0x0x7f0b1f1745b0) 0
+ vptr=((& QApplication::_ZTV12QApplication) + 16)
+ QGuiApplication (0x0x7f0b1f174618) 0
+ primary-for QApplication (0x0x7f0b1f1745b0)
+ QCoreApplication (0x0x7f0b1f174680) 0
+ primary-for QGuiApplication (0x0x7f0b1f174618)
+ QObject (0x0x7f0b1f1c6a20) 0
+ primary-for QCoreApplication (0x0x7f0b1f174680)
+
+Vtable for QLayoutItem
+QLayoutItem::_ZTV11QLayoutItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QLayoutItem)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QLayoutItem::hasHeightForWidth
+96 (int (*)(...))QLayoutItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QLayoutItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QLayoutItem::controlTypes
+
+Class QLayoutItem
+ size=16 align=8
+ base size=12 base align=8
+QLayoutItem (0x0x7f0b1f1c6cc0) 0
+ vptr=((& QLayoutItem::_ZTV11QLayoutItem) + 16)
+
+Vtable for QSpacerItem
+QSpacerItem::_ZTV11QSpacerItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSpacerItem)
+16 (int (*)(...))QSpacerItem::~QSpacerItem
+24 (int (*)(...))QSpacerItem::~QSpacerItem
+32 (int (*)(...))QSpacerItem::sizeHint
+40 (int (*)(...))QSpacerItem::minimumSize
+48 (int (*)(...))QSpacerItem::maximumSize
+56 (int (*)(...))QSpacerItem::expandingDirections
+64 (int (*)(...))QSpacerItem::setGeometry
+72 (int (*)(...))QSpacerItem::geometry
+80 (int (*)(...))QSpacerItem::isEmpty
+88 (int (*)(...))QLayoutItem::hasHeightForWidth
+96 (int (*)(...))QLayoutItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QLayoutItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QSpacerItem::spacerItem
+144 (int (*)(...))QLayoutItem::controlTypes
+
+Class QSpacerItem
+ size=40 align=8
+ base size=40 base align=8
+QSpacerItem (0x0x7f0b1f1746e8) 0
+ vptr=((& QSpacerItem::_ZTV11QSpacerItem) + 16)
+ QLayoutItem (0x0x7f0b1f1c6f00) 0
+ primary-for QSpacerItem (0x0x7f0b1f1746e8)
+
+Vtable for QWidgetItem
+QWidgetItem::_ZTV11QWidgetItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWidgetItem)
+16 (int (*)(...))QWidgetItem::~QWidgetItem
+24 (int (*)(...))QWidgetItem::~QWidgetItem
+32 (int (*)(...))QWidgetItem::sizeHint
+40 (int (*)(...))QWidgetItem::minimumSize
+48 (int (*)(...))QWidgetItem::maximumSize
+56 (int (*)(...))QWidgetItem::expandingDirections
+64 (int (*)(...))QWidgetItem::setGeometry
+72 (int (*)(...))QWidgetItem::geometry
+80 (int (*)(...))QWidgetItem::isEmpty
+88 (int (*)(...))QWidgetItem::hasHeightForWidth
+96 (int (*)(...))QWidgetItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QWidgetItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QWidgetItem::controlTypes
+
+Class QWidgetItem
+ size=24 align=8
+ base size=24 base align=8
+QWidgetItem (0x0x7f0b1f174750) 0
+ vptr=((& QWidgetItem::_ZTV11QWidgetItem) + 16)
+ QLayoutItem (0x0x7f0b1f205180) 0
+ primary-for QWidgetItem (0x0x7f0b1f174750)
+
+Vtable for QWidgetItemV2
+QWidgetItemV2::_ZTV13QWidgetItemV2: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QWidgetItemV2)
+16 (int (*)(...))QWidgetItemV2::~QWidgetItemV2
+24 (int (*)(...))QWidgetItemV2::~QWidgetItemV2
+32 (int (*)(...))QWidgetItemV2::sizeHint
+40 (int (*)(...))QWidgetItemV2::minimumSize
+48 (int (*)(...))QWidgetItemV2::maximumSize
+56 (int (*)(...))QWidgetItem::expandingDirections
+64 (int (*)(...))QWidgetItem::setGeometry
+72 (int (*)(...))QWidgetItem::geometry
+80 (int (*)(...))QWidgetItem::isEmpty
+88 (int (*)(...))QWidgetItem::hasHeightForWidth
+96 (int (*)(...))QWidgetItemV2::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QWidgetItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QWidgetItem::controlTypes
+
+Class QWidgetItemV2
+ size=88 align=8
+ base size=88 base align=8
+QWidgetItemV2 (0x0x7f0b1f1747b8) 0
+ vptr=((& QWidgetItemV2::_ZTV13QWidgetItemV2) + 16)
+ QWidgetItem (0x0x7f0b1f174820) 0
+ primary-for QWidgetItemV2 (0x0x7f0b1f1747b8)
+ QLayoutItem (0x0x7f0b1f205360) 0
+ primary-for QWidgetItem (0x0x7f0b1f174820)
+
+Class QLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLayout::QPrivateSignal (0x0x7f0b1f2054e0) 0 empty
+
+Vtable for QLayout
+QLayout::_ZTV7QLayout: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QLayout)
+16 (int (*)(...))QLayout::metaObject
+24 (int (*)(...))QLayout::qt_metacast
+32 (int (*)(...))QLayout::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLayout::spacing
+120 (int (*)(...))QLayout::setSpacing
+128 (int (*)(...))QLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QLayout::expandingDirections
+160 (int (*)(...))QLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QLayout::setGeometry
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))-16
+264 (int (*)(...))(& _ZTI7QLayout)
+272 0
+280 0
+288 (int (*)(...))__cxa_pure_virtual
+296 (int (*)(...))QLayout::_ZThn16_NK7QLayout11minimumSizeEv
+304 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+312 (int (*)(...))QLayout::_ZThn16_NK7QLayout19expandingDirectionsEv
+320 (int (*)(...))QLayout::_ZThn16_N7QLayout11setGeometryERK5QRect
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+336 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+344 (int (*)(...))QLayoutItem::hasHeightForWidth
+352 (int (*)(...))QLayoutItem::heightForWidth
+360 (int (*)(...))QLayoutItem::minimumHeightForWidth
+368 (int (*)(...))QLayout::_ZThn16_N7QLayout10invalidateEv
+376 (int (*)(...))QLayoutItem::widget
+384 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+392 (int (*)(...))QLayoutItem::spacerItem
+400 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QLayout
+ size=32 align=8
+ base size=28 base align=8
+QLayout (0x0x7f0b1f1b49a0) 0
+ vptr=((& QLayout::_ZTV7QLayout) + 16)
+ QObject (0x0x7f0b1f205420) 0
+ primary-for QLayout (0x0x7f0b1f1b49a0)
+ QLayoutItem (0x0x7f0b1f205480) 16
+ vptr=((& QLayout::_ZTV7QLayout) + 272)
+
+Class QGridLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGridLayout::QPrivateSignal (0x0x7f0b1f2057e0) 0 empty
+
+Vtable for QGridLayout
+QGridLayout::_ZTV11QGridLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QGridLayout)
+16 (int (*)(...))QGridLayout::metaObject
+24 (int (*)(...))QGridLayout::qt_metacast
+32 (int (*)(...))QGridLayout::qt_metacall
+40 (int (*)(...))QGridLayout::~QGridLayout
+48 (int (*)(...))QGridLayout::~QGridLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGridLayout::spacing
+120 (int (*)(...))QGridLayout::setSpacing
+128 (int (*)(...))QGridLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QGridLayout::addItem
+152 (int (*)(...))QGridLayout::expandingDirections
+160 (int (*)(...))QGridLayout::minimumSize
+168 (int (*)(...))QGridLayout::maximumSize
+176 (int (*)(...))QGridLayout::setGeometry
+184 (int (*)(...))QGridLayout::itemAt
+192 (int (*)(...))QGridLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QGridLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QGridLayout::sizeHint
+264 (int (*)(...))QGridLayout::hasHeightForWidth
+272 (int (*)(...))QGridLayout::heightForWidth
+280 (int (*)(...))QGridLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QGridLayout)
+304 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayoutD1Ev
+312 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayoutD0Ev
+320 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout8sizeHintEv
+328 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout11minimumSizeEv
+336 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout11maximumSizeEv
+344 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout19expandingDirectionsEv
+352 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout17hasHeightForWidthEv
+384 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout14heightForWidthEi
+392 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout21minimumHeightForWidthEi
+400 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QGridLayout
+ size=32 align=8
+ base size=28 base align=8
+QGridLayout (0x0x7f0b1f174888) 0
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 16)
+ QLayout (0x0x7f0b1f1b4cb0) 0
+ primary-for QGridLayout (0x0x7f0b1f174888)
+ QObject (0x0x7f0b1f205720) 0
+ primary-for QLayout (0x0x7f0b1f1b4cb0)
+ QLayoutItem (0x0x7f0b1f205780) 16
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 304)
+
+Class QBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBoxLayout::QPrivateSignal (0x0x7f0b1f205a80) 0 empty
+
+Vtable for QBoxLayout
+QBoxLayout::_ZTV10QBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QBoxLayout)
+16 (int (*)(...))QBoxLayout::metaObject
+24 (int (*)(...))QBoxLayout::qt_metacast
+32 (int (*)(...))QBoxLayout::qt_metacall
+40 (int (*)(...))QBoxLayout::~QBoxLayout
+48 (int (*)(...))QBoxLayout::~QBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI10QBoxLayout)
+304 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayoutD1Ev
+312 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QBoxLayout (0x0x7f0b1f1748f0) 0
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 16)
+ QLayout (0x0x7f0b1f1b4d20) 0
+ primary-for QBoxLayout (0x0x7f0b1f1748f0)
+ QObject (0x0x7f0b1f2059c0) 0
+ primary-for QLayout (0x0x7f0b1f1b4d20)
+ QLayoutItem (0x0x7f0b1f205a20) 16
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 304)
+
+Class QHBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHBoxLayout::QPrivateSignal (0x0x7f0b1f205cc0) 0 empty
+
+Vtable for QHBoxLayout
+QHBoxLayout::_ZTV11QHBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHBoxLayout)
+16 (int (*)(...))QHBoxLayout::metaObject
+24 (int (*)(...))QHBoxLayout::qt_metacast
+32 (int (*)(...))QHBoxLayout::qt_metacall
+40 (int (*)(...))QHBoxLayout::~QHBoxLayout
+48 (int (*)(...))QHBoxLayout::~QHBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QHBoxLayout)
+304 (int (*)(...))QHBoxLayout::_ZThn16_N11QHBoxLayoutD1Ev
+312 (int (*)(...))QHBoxLayout::_ZThn16_N11QHBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QHBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QHBoxLayout (0x0x7f0b1f174958) 0
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 16)
+ QBoxLayout (0x0x7f0b1f1749c0) 0
+ primary-for QHBoxLayout (0x0x7f0b1f174958)
+ QLayout (0x0x7f0b1f23c070) 0
+ primary-for QBoxLayout (0x0x7f0b1f1749c0)
+ QObject (0x0x7f0b1f205c00) 0
+ primary-for QLayout (0x0x7f0b1f23c070)
+ QLayoutItem (0x0x7f0b1f205c60) 16
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 304)
+
+Class QVBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVBoxLayout::QPrivateSignal (0x0x7f0b1f205e40) 0 empty
+
+Vtable for QVBoxLayout
+QVBoxLayout::_ZTV11QVBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QVBoxLayout)
+16 (int (*)(...))QVBoxLayout::metaObject
+24 (int (*)(...))QVBoxLayout::qt_metacast
+32 (int (*)(...))QVBoxLayout::qt_metacall
+40 (int (*)(...))QVBoxLayout::~QVBoxLayout
+48 (int (*)(...))QVBoxLayout::~QVBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QVBoxLayout)
+304 (int (*)(...))QVBoxLayout::_ZThn16_N11QVBoxLayoutD1Ev
+312 (int (*)(...))QVBoxLayout::_ZThn16_N11QVBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QVBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QVBoxLayout (0x0x7f0b1f174a28) 0
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 16)
+ QBoxLayout (0x0x7f0b1f174a90) 0
+ primary-for QVBoxLayout (0x0x7f0b1f174a28)
+ QLayout (0x0x7f0b1f23c0e0) 0
+ primary-for QBoxLayout (0x0x7f0b1f174a90)
+ QObject (0x0x7f0b1f205d80) 0
+ primary-for QLayout (0x0x7f0b1f23c0e0)
+ QLayoutItem (0x0x7f0b1f205de0) 16
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 304)
+
+Class QButtonGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QButtonGroup::QPrivateSignal (0x0x7f0b1f205f60) 0 empty
+
+Vtable for QButtonGroup
+QButtonGroup::_ZTV12QButtonGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QButtonGroup)
+16 (int (*)(...))QButtonGroup::metaObject
+24 (int (*)(...))QButtonGroup::qt_metacast
+32 (int (*)(...))QButtonGroup::qt_metacall
+40 (int (*)(...))QButtonGroup::~QButtonGroup
+48 (int (*)(...))QButtonGroup::~QButtonGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QButtonGroup
+ size=16 align=8
+ base size=16 base align=8
+QButtonGroup (0x0x7f0b1f174af8) 0
+ vptr=((& QButtonGroup::_ZTV12QButtonGroup) + 16)
+ QObject (0x0x7f0b1f205f00) 0
+ primary-for QButtonGroup (0x0x7f0b1f174af8)
+
+Class QCalendarWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCalendarWidget::QPrivateSignal (0x0x7f0b1f25f1e0) 0 empty
+
+Vtable for QCalendarWidget
+QCalendarWidget::_ZTV15QCalendarWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QCalendarWidget)
+16 (int (*)(...))QCalendarWidget::metaObject
+24 (int (*)(...))QCalendarWidget::qt_metacast
+32 (int (*)(...))QCalendarWidget::qt_metacall
+40 (int (*)(...))QCalendarWidget::~QCalendarWidget
+48 (int (*)(...))QCalendarWidget::~QCalendarWidget
+56 (int (*)(...))QCalendarWidget::event
+64 (int (*)(...))QCalendarWidget::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCalendarWidget::sizeHint
+136 (int (*)(...))QCalendarWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QCalendarWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QCalendarWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QCalendarWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QCalendarWidget::paintCell
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI15QCalendarWidget)
+456 (int (*)(...))QCalendarWidget::_ZThn16_N15QCalendarWidgetD1Ev
+464 (int (*)(...))QCalendarWidget::_ZThn16_N15QCalendarWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCalendarWidget
+ size=40 align=8
+ base size=40 base align=8
+QCalendarWidget (0x0x7f0b1f174b60) 0
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 16)
+ QWidget (0x0x7f0b1f23c150) 0
+ primary-for QCalendarWidget (0x0x7f0b1f174b60)
+ QObject (0x0x7f0b1f25f120) 0
+ primary-for QWidget (0x0x7f0b1f23c150)
+ QPaintDevice (0x0x7f0b1f25f180) 16
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 456)
+
+Class QCheckBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCheckBox::QPrivateSignal (0x0x7f0b1f25f660) 0 empty
+
+Vtable for QCheckBox
+QCheckBox::_ZTV9QCheckBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QCheckBox)
+16 (int (*)(...))QCheckBox::metaObject
+24 (int (*)(...))QCheckBox::qt_metacast
+32 (int (*)(...))QCheckBox::qt_metacall
+40 (int (*)(...))QCheckBox::~QCheckBox
+48 (int (*)(...))QCheckBox::~QCheckBox
+56 (int (*)(...))QCheckBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCheckBox::sizeHint
+136 (int (*)(...))QCheckBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QCheckBox::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QCheckBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QCheckBox::hitButton
+440 (int (*)(...))QCheckBox::checkStateSet
+448 (int (*)(...))QCheckBox::nextCheckState
+456 (int (*)(...))QCheckBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI9QCheckBox)
+480 (int (*)(...))QCheckBox::_ZThn16_N9QCheckBoxD1Ev
+488 (int (*)(...))QCheckBox::_ZThn16_N9QCheckBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCheckBox
+ size=40 align=8
+ base size=40 base align=8
+QCheckBox (0x0x7f0b1f174bc8) 0
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 16)
+ QAbstractButton (0x0x7f0b1f174c30) 0
+ primary-for QCheckBox (0x0x7f0b1f174bc8)
+ QWidget (0x0x7f0b1f23c540) 0
+ primary-for QAbstractButton (0x0x7f0b1f174c30)
+ QObject (0x0x7f0b1f25f5a0) 0
+ primary-for QWidget (0x0x7f0b1f23c540)
+ QPaintDevice (0x0x7f0b1f25f600) 16
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 480)
+
+Class QDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialog::QPrivateSignal (0x0x7f0b1f25f8a0) 0 empty
+
+Vtable for QDialog
+QDialog::_ZTV7QDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QDialog)
+16 (int (*)(...))QDialog::metaObject
+24 (int (*)(...))QDialog::qt_metacast
+32 (int (*)(...))QDialog::qt_metacall
+40 (int (*)(...))QDialog::~QDialog
+48 (int (*)(...))QDialog::~QDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI7QDialog)
+488 (int (*)(...))QDialog::_ZThn16_N7QDialogD1Ev
+496 (int (*)(...))QDialog::_ZThn16_N7QDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDialog
+ size=40 align=8
+ base size=40 base align=8
+QDialog (0x0x7f0b1f174c98) 0
+ vptr=((& QDialog::_ZTV7QDialog) + 16)
+ QWidget (0x0x7f0b1f23c5b0) 0
+ primary-for QDialog (0x0x7f0b1f174c98)
+ QObject (0x0x7f0b1f25f7e0) 0
+ primary-for QWidget (0x0x7f0b1f23c5b0)
+ QPaintDevice (0x0x7f0b1f25f840) 16
+ vptr=((& QDialog::_ZTV7QDialog) + 488)
+
+Class QColorDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColorDialog::QPrivateSignal (0x0x7f0b1f25fae0) 0 empty
+
+Vtable for QColorDialog
+QColorDialog::_ZTV12QColorDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QColorDialog)
+16 (int (*)(...))QColorDialog::metaObject
+24 (int (*)(...))QColorDialog::qt_metacast
+32 (int (*)(...))QColorDialog::qt_metacall
+40 (int (*)(...))QColorDialog::~QColorDialog
+48 (int (*)(...))QColorDialog::~QColorDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QColorDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QColorDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QColorDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QColorDialog)
+488 (int (*)(...))QColorDialog::_ZThn16_N12QColorDialogD1Ev
+496 (int (*)(...))QColorDialog::_ZThn16_N12QColorDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QColorDialog
+ size=40 align=8
+ base size=40 base align=8
+QColorDialog (0x0x7f0b1f174d00) 0
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 16)
+ QDialog (0x0x7f0b1f174d68) 0
+ primary-for QColorDialog (0x0x7f0b1f174d00)
+ QWidget (0x0x7f0b1f23c700) 0
+ primary-for QDialog (0x0x7f0b1f174d68)
+ QObject (0x0x7f0b1f25fa20) 0
+ primary-for QWidget (0x0x7f0b1f23c700)
+ QPaintDevice (0x0x7f0b1f25fa80) 16
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 488)
+
+Class QColormap
+ size=8 align=8
+ base size=8 base align=8
+QColormap (0x0x7f0b1f2b0060) 0
+
+Class QColumnView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColumnView::QPrivateSignal (0x0x7f0b1f2b0180) 0 empty
+
+Vtable for QColumnView
+QColumnView::_ZTV11QColumnView: 109 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QColumnView)
+16 (int (*)(...))QColumnView::metaObject
+24 (int (*)(...))QColumnView::qt_metacast
+32 (int (*)(...))QColumnView::qt_metacall
+40 (int (*)(...))QColumnView::~QColumnView
+48 (int (*)(...))QColumnView::~QColumnView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QColumnView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QColumnView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QColumnView::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QColumnView::setModel
+480 (int (*)(...))QColumnView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QColumnView::visualRect
+504 (int (*)(...))QColumnView::scrollTo
+512 (int (*)(...))QColumnView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QColumnView::setRootIndex
+560 (int (*)(...))QAbstractItemView::doItemsLayout
+568 (int (*)(...))QColumnView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QColumnView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QColumnView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QAbstractItemView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QColumnView::moveCursor
+704 (int (*)(...))QColumnView::horizontalOffset
+712 (int (*)(...))QColumnView::verticalOffset
+720 (int (*)(...))QColumnView::isIndexHidden
+728 (int (*)(...))QColumnView::setSelection
+736 (int (*)(...))QColumnView::visualRegionForSelection
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QColumnView::createColumn
+792 (int (*)(...))-16
+800 (int (*)(...))(& _ZTI11QColumnView)
+808 (int (*)(...))QColumnView::_ZThn16_N11QColumnViewD1Ev
+816 (int (*)(...))QColumnView::_ZThn16_N11QColumnViewD0Ev
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QColumnView
+ size=40 align=8
+ base size=40 base align=8
+QColumnView (0x0x7f0b1f174f08) 0
+ vptr=((& QColumnView::_ZTV11QColumnView) + 16)
+ QAbstractItemView (0x0x7f0b1f174f70) 0
+ primary-for QColumnView (0x0x7f0b1f174f08)
+ QAbstractScrollArea (0x0x7f0b1f2b8000) 0
+ primary-for QAbstractItemView (0x0x7f0b1f174f70)
+ QFrame (0x0x7f0b1f2b8068) 0
+ primary-for QAbstractScrollArea (0x0x7f0b1f2b8000)
+ QWidget (0x0x7f0b1f23ca10) 0
+ primary-for QFrame (0x0x7f0b1f2b8068)
+ QObject (0x0x7f0b1f2b00c0) 0
+ primary-for QWidget (0x0x7f0b1f23ca10)
+ QPaintDevice (0x0x7f0b1f2b0120) 16
+ vptr=((& QColumnView::_ZTV11QColumnView) + 808)
+
+Class QComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QComboBox::QPrivateSignal (0x0x7f0b1f2b03c0) 0 empty
+
+Vtable for QComboBox
+QComboBox::_ZTV9QComboBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QComboBox)
+16 (int (*)(...))QComboBox::metaObject
+24 (int (*)(...))QComboBox::qt_metacast
+32 (int (*)(...))QComboBox::qt_metacall
+40 (int (*)(...))QComboBox::~QComboBox
+48 (int (*)(...))QComboBox::~QComboBox
+56 (int (*)(...))QComboBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QComboBox::sizeHint
+136 (int (*)(...))QComboBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QComboBox::mousePressEvent
+176 (int (*)(...))QComboBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QComboBox::wheelEvent
+208 (int (*)(...))QComboBox::keyPressEvent
+216 (int (*)(...))QComboBox::keyReleaseEvent
+224 (int (*)(...))QComboBox::focusInEvent
+232 (int (*)(...))QComboBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QComboBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QComboBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QComboBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QComboBox::showEvent
+352 (int (*)(...))QComboBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QComboBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QComboBox::inputMethodEvent
+416 (int (*)(...))QComboBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QComboBox::setModel
+440 (int (*)(...))QComboBox::showPopup
+448 (int (*)(...))QComboBox::hidePopup
+456 (int (*)(...))QComboBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI9QComboBox)
+480 (int (*)(...))QComboBox::_ZThn16_N9QComboBoxD1Ev
+488 (int (*)(...))QComboBox::_ZThn16_N9QComboBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QComboBox
+ size=40 align=8
+ base size=40 base align=8
+QComboBox (0x0x7f0b1f2b80d0) 0
+ vptr=((& QComboBox::_ZTV9QComboBox) + 16)
+ QWidget (0x0x7f0b1f23ca80) 0
+ primary-for QComboBox (0x0x7f0b1f2b80d0)
+ QObject (0x0x7f0b1f2b0300) 0
+ primary-for QWidget (0x0x7f0b1f23ca80)
+ QPaintDevice (0x0x7f0b1f2b0360) 16
+ vptr=((& QComboBox::_ZTV9QComboBox) + 480)
+
+Class QPushButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPushButton::QPrivateSignal (0x0x7f0b1f2b0960) 0 empty
+
+Vtable for QPushButton
+QPushButton::_ZTV11QPushButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPushButton)
+16 (int (*)(...))QPushButton::metaObject
+24 (int (*)(...))QPushButton::qt_metacast
+32 (int (*)(...))QPushButton::qt_metacall
+40 (int (*)(...))QPushButton::~QPushButton
+48 (int (*)(...))QPushButton::~QPushButton
+56 (int (*)(...))QPushButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QPushButton::sizeHint
+136 (int (*)(...))QPushButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QPushButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QPushButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QPushButton::focusInEvent
+232 (int (*)(...))QPushButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QPushButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QPushButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QPushButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI11QPushButton)
+480 (int (*)(...))QPushButton::_ZThn16_N11QPushButtonD1Ev
+488 (int (*)(...))QPushButton::_ZThn16_N11QPushButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QPushButton
+ size=40 align=8
+ base size=40 base align=8
+QPushButton (0x0x7f0b1f2b8138) 0
+ vptr=((& QPushButton::_ZTV11QPushButton) + 16)
+ QAbstractButton (0x0x7f0b1f2b81a0) 0
+ primary-for QPushButton (0x0x7f0b1f2b8138)
+ QWidget (0x0x7f0b1f23cf50) 0
+ primary-for QAbstractButton (0x0x7f0b1f2b81a0)
+ QObject (0x0x7f0b1f2b08a0) 0
+ primary-for QWidget (0x0x7f0b1f23cf50)
+ QPaintDevice (0x0x7f0b1f2b0900) 16
+ vptr=((& QPushButton::_ZTV11QPushButton) + 480)
+
+Class QCommandLinkButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommandLinkButton::QPrivateSignal (0x0x7f0b1f2b0ba0) 0 empty
+
+Vtable for QCommandLinkButton
+QCommandLinkButton::_ZTV18QCommandLinkButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QCommandLinkButton)
+16 (int (*)(...))QCommandLinkButton::metaObject
+24 (int (*)(...))QCommandLinkButton::qt_metacast
+32 (int (*)(...))QCommandLinkButton::qt_metacall
+40 (int (*)(...))QCommandLinkButton::~QCommandLinkButton
+48 (int (*)(...))QCommandLinkButton::~QCommandLinkButton
+56 (int (*)(...))QCommandLinkButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCommandLinkButton::sizeHint
+136 (int (*)(...))QCommandLinkButton::minimumSizeHint
+144 (int (*)(...))QCommandLinkButton::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QPushButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QPushButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QPushButton::focusInEvent
+232 (int (*)(...))QPushButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QCommandLinkButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QPushButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QPushButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI18QCommandLinkButton)
+480 (int (*)(...))QCommandLinkButton::_ZThn16_N18QCommandLinkButtonD1Ev
+488 (int (*)(...))QCommandLinkButton::_ZThn16_N18QCommandLinkButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCommandLinkButton
+ size=40 align=8
+ base size=40 base align=8
+QCommandLinkButton (0x0x7f0b1f2b8208) 0
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 16)
+ QPushButton (0x0x7f0b1f2b8270) 0
+ primary-for QCommandLinkButton (0x0x7f0b1f2b8208)
+ QAbstractButton (0x0x7f0b1f2b82d8) 0
+ primary-for QPushButton (0x0x7f0b1f2b8270)
+ QWidget (0x0x7f0b1eef4000) 0
+ primary-for QAbstractButton (0x0x7f0b1f2b82d8)
+ QObject (0x0x7f0b1f2b0ae0) 0
+ primary-for QWidget (0x0x7f0b1eef4000)
+ QPaintDevice (0x0x7f0b1f2b0b40) 16
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 480)
+
+Class QCommonStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommonStyle::QPrivateSignal (0x0x7f0b1f2b0d80) 0 empty
+
+Vtable for QCommonStyle
+QCommonStyle::_ZTV12QCommonStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QCommonStyle)
+16 (int (*)(...))QCommonStyle::metaObject
+24 (int (*)(...))QCommonStyle::qt_metacast
+32 (int (*)(...))QCommonStyle::qt_metacall
+40 (int (*)(...))QCommonStyle::~QCommonStyle
+48 (int (*)(...))QCommonStyle::~QCommonStyle
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCommonStyle::polish
+120 (int (*)(...))QCommonStyle::unpolish
+128 (int (*)(...))QCommonStyle::polish
+136 (int (*)(...))QCommonStyle::unpolish
+144 (int (*)(...))QCommonStyle::polish
+152 (int (*)(...))QStyle::itemTextRect
+160 (int (*)(...))QStyle::itemPixmapRect
+168 (int (*)(...))QStyle::drawItemText
+176 (int (*)(...))QStyle::drawItemPixmap
+184 (int (*)(...))QStyle::standardPalette
+192 (int (*)(...))QCommonStyle::drawPrimitive
+200 (int (*)(...))QCommonStyle::drawControl
+208 (int (*)(...))QCommonStyle::subElementRect
+216 (int (*)(...))QCommonStyle::drawComplexControl
+224 (int (*)(...))QCommonStyle::hitTestComplexControl
+232 (int (*)(...))QCommonStyle::subControlRect
+240 (int (*)(...))QCommonStyle::pixelMetric
+248 (int (*)(...))QCommonStyle::sizeFromContents
+256 (int (*)(...))QCommonStyle::styleHint
+264 (int (*)(...))QCommonStyle::standardPixmap
+272 (int (*)(...))QCommonStyle::standardIcon
+280 (int (*)(...))QCommonStyle::generatedIconPixmap
+288 (int (*)(...))QCommonStyle::layoutSpacing
+
+Class QCommonStyle
+ size=16 align=8
+ base size=16 base align=8
+QCommonStyle (0x0x7f0b1f2b8340) 0
+ vptr=((& QCommonStyle::_ZTV12QCommonStyle) + 16)
+ QStyle (0x0x7f0b1f2b83a8) 0
+ primary-for QCommonStyle (0x0x7f0b1f2b8340)
+ QObject (0x0x7f0b1f2b0d20) 0
+ primary-for QStyle (0x0x7f0b1f2b83a8)
+
+Class QCompleter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCompleter::QPrivateSignal (0x0x7f0b1f2b0f60) 0 empty
+
+Vtable for QCompleter
+QCompleter::_ZTV10QCompleter: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QCompleter)
+16 (int (*)(...))QCompleter::metaObject
+24 (int (*)(...))QCompleter::qt_metacast
+32 (int (*)(...))QCompleter::qt_metacall
+40 (int (*)(...))QCompleter::~QCompleter
+48 (int (*)(...))QCompleter::~QCompleter
+56 (int (*)(...))QCompleter::event
+64 (int (*)(...))QCompleter::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCompleter::pathFromIndex
+120 (int (*)(...))QCompleter::splitPath
+
+Class QCompleter
+ size=16 align=8
+ base size=16 base align=8
+QCompleter (0x0x7f0b1f2b8410) 0
+ vptr=((& QCompleter::_ZTV10QCompleter) + 16)
+ QObject (0x0x7f0b1f2b0f00) 0
+ primary-for QCompleter (0x0x7f0b1f2b8410)
+
+Class QDataWidgetMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDataWidgetMapper::QPrivateSignal (0x0x7f0b1ef20300) 0 empty
+
+Vtable for QDataWidgetMapper
+QDataWidgetMapper::_ZTV17QDataWidgetMapper: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QDataWidgetMapper)
+16 (int (*)(...))QDataWidgetMapper::metaObject
+24 (int (*)(...))QDataWidgetMapper::qt_metacast
+32 (int (*)(...))QDataWidgetMapper::qt_metacall
+40 (int (*)(...))QDataWidgetMapper::~QDataWidgetMapper
+48 (int (*)(...))QDataWidgetMapper::~QDataWidgetMapper
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDataWidgetMapper::setCurrentIndex
+
+Class QDataWidgetMapper
+ size=16 align=8
+ base size=16 base align=8
+QDataWidgetMapper (0x0x7f0b1f2b8478) 0
+ vptr=((& QDataWidgetMapper::_ZTV17QDataWidgetMapper) + 16)
+ QObject (0x0x7f0b1ef202a0) 0
+ primary-for QDataWidgetMapper (0x0x7f0b1f2b8478)
+
+Class QDateTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateTimeEdit::QPrivateSignal (0x0x7f0b1ef20600) 0 empty
+
+Vtable for QDateTimeEdit
+QDateTimeEdit::_ZTV13QDateTimeEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QDateTimeEdit)
+16 (int (*)(...))QDateTimeEdit::metaObject
+24 (int (*)(...))QDateTimeEdit::qt_metacast
+32 (int (*)(...))QDateTimeEdit::qt_metacall
+40 (int (*)(...))QDateTimeEdit::~QDateTimeEdit
+48 (int (*)(...))QDateTimeEdit::~QDateTimeEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI13QDateTimeEdit)
+512 (int (*)(...))QDateTimeEdit::_ZThn16_N13QDateTimeEditD1Ev
+520 (int (*)(...))QDateTimeEdit::_ZThn16_N13QDateTimeEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDateTimeEdit
+ size=40 align=8
+ base size=40 base align=8
+QDateTimeEdit (0x0x7f0b1f2b84e0) 0
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 16)
+ QAbstractSpinBox (0x0x7f0b1f2b8548) 0
+ primary-for QDateTimeEdit (0x0x7f0b1f2b84e0)
+ QWidget (0x0x7f0b1eef43f0) 0
+ primary-for QAbstractSpinBox (0x0x7f0b1f2b8548)
+ QObject (0x0x7f0b1ef20540) 0
+ primary-for QWidget (0x0x7f0b1eef43f0)
+ QPaintDevice (0x0x7f0b1ef205a0) 16
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 512)
+
+Class QTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeEdit::QPrivateSignal (0x0x7f0b1ef20ba0) 0 empty
+
+Vtable for QTimeEdit
+QTimeEdit::_ZTV9QTimeEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTimeEdit)
+16 (int (*)(...))QTimeEdit::metaObject
+24 (int (*)(...))QTimeEdit::qt_metacast
+32 (int (*)(...))QTimeEdit::qt_metacall
+40 (int (*)(...))QTimeEdit::~QTimeEdit
+48 (int (*)(...))QTimeEdit::~QTimeEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI9QTimeEdit)
+512 (int (*)(...))QTimeEdit::_ZThn16_N9QTimeEditD1Ev
+520 (int (*)(...))QTimeEdit::_ZThn16_N9QTimeEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTimeEdit
+ size=40 align=8
+ base size=40 base align=8
+QTimeEdit (0x0x7f0b1f2b86e8) 0
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 16)
+ QDateTimeEdit (0x0x7f0b1f2b8750) 0
+ primary-for QTimeEdit (0x0x7f0b1f2b86e8)
+ QAbstractSpinBox (0x0x7f0b1f2b87b8) 0
+ primary-for QDateTimeEdit (0x0x7f0b1f2b8750)
+ QWidget (0x0x7f0b1eef48c0) 0
+ primary-for QAbstractSpinBox (0x0x7f0b1f2b87b8)
+ QObject (0x0x7f0b1ef20ae0) 0
+ primary-for QWidget (0x0x7f0b1eef48c0)
+ QPaintDevice (0x0x7f0b1ef20b40) 16
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 512)
+
+Class QDateEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateEdit::QPrivateSignal (0x0x7f0b1ef20d20) 0 empty
+
+Vtable for QDateEdit
+QDateEdit::_ZTV9QDateEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QDateEdit)
+16 (int (*)(...))QDateEdit::metaObject
+24 (int (*)(...))QDateEdit::qt_metacast
+32 (int (*)(...))QDateEdit::qt_metacall
+40 (int (*)(...))QDateEdit::~QDateEdit
+48 (int (*)(...))QDateEdit::~QDateEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI9QDateEdit)
+512 (int (*)(...))QDateEdit::_ZThn16_N9QDateEditD1Ev
+520 (int (*)(...))QDateEdit::_ZThn16_N9QDateEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDateEdit
+ size=40 align=8
+ base size=40 base align=8
+QDateEdit (0x0x7f0b1f2b8820) 0
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 16)
+ QDateTimeEdit (0x0x7f0b1f2b8888) 0
+ primary-for QDateEdit (0x0x7f0b1f2b8820)
+ QAbstractSpinBox (0x0x7f0b1f2b88f0) 0
+ primary-for QDateTimeEdit (0x0x7f0b1f2b8888)
+ QWidget (0x0x7f0b1eef4930) 0
+ primary-for QAbstractSpinBox (0x0x7f0b1f2b88f0)
+ QObject (0x0x7f0b1ef20c60) 0
+ primary-for QWidget (0x0x7f0b1eef4930)
+ QPaintDevice (0x0x7f0b1ef20cc0) 16
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 512)
+
+Class QDial::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDial::QPrivateSignal (0x0x7f0b1ef7b000) 0 empty
+
+Vtable for QDial
+QDial::_ZTV5QDial: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDial)
+16 (int (*)(...))QDial::metaObject
+24 (int (*)(...))QDial::qt_metacast
+32 (int (*)(...))QDial::qt_metacall
+40 (int (*)(...))QDial::~QDial
+48 (int (*)(...))QDial::~QDial
+56 (int (*)(...))QDial::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDial::sizeHint
+136 (int (*)(...))QDial::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDial::mousePressEvent
+176 (int (*)(...))QDial::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QDial::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDial::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDial::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDial::sliderChange
+440 (int (*)(...))QDial::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI5QDial)
+464 (int (*)(...))QDial::_ZThn16_N5QDialD1Ev
+472 (int (*)(...))QDial::_ZThn16_N5QDialD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDial
+ size=40 align=8
+ base size=40 base align=8
+QDial (0x0x7f0b1f2b8958) 0
+ vptr=((& QDial::_ZTV5QDial) + 16)
+ QAbstractSlider (0x0x7f0b1f2b89c0) 0
+ primary-for QDial (0x0x7f0b1f2b8958)
+ QWidget (0x0x7f0b1eef49a0) 0
+ primary-for QAbstractSlider (0x0x7f0b1f2b89c0)
+ QObject (0x0x7f0b1ef20f00) 0
+ primary-for QWidget (0x0x7f0b1eef49a0)
+ QPaintDevice (0x0x7f0b1ef20f60) 16
+ vptr=((& QDial::_ZTV5QDial) + 464)
+
+Class QDialogButtonBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialogButtonBox::QPrivateSignal (0x0x7f0b1ef7b240) 0 empty
+
+Vtable for QDialogButtonBox
+QDialogButtonBox::_ZTV16QDialogButtonBox: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QDialogButtonBox)
+16 (int (*)(...))QDialogButtonBox::metaObject
+24 (int (*)(...))QDialogButtonBox::qt_metacast
+32 (int (*)(...))QDialogButtonBox::qt_metacall
+40 (int (*)(...))QDialogButtonBox::~QDialogButtonBox
+48 (int (*)(...))QDialogButtonBox::~QDialogButtonBox
+56 (int (*)(...))QDialogButtonBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QDialogButtonBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI16QDialogButtonBox)
+448 (int (*)(...))QDialogButtonBox::_ZThn16_N16QDialogButtonBoxD1Ev
+456 (int (*)(...))QDialogButtonBox::_ZThn16_N16QDialogButtonBoxD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDialogButtonBox
+ size=40 align=8
+ base size=40 base align=8
+QDialogButtonBox (0x0x7f0b1f2b8a28) 0
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 16)
+ QWidget (0x0x7f0b1eef4a10) 0
+ primary-for QDialogButtonBox (0x0x7f0b1f2b8a28)
+ QObject (0x0x7f0b1ef7b180) 0
+ primary-for QWidget (0x0x7f0b1eef4a10)
+ QPaintDevice (0x0x7f0b1ef7b1e0) 16
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 448)
+
+Class QDockWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDockWidget::QPrivateSignal (0x0x7f0b1ef7b840) 0 empty
+
+Vtable for QDockWidget
+QDockWidget::_ZTV11QDockWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QDockWidget)
+16 (int (*)(...))QDockWidget::metaObject
+24 (int (*)(...))QDockWidget::qt_metacast
+32 (int (*)(...))QDockWidget::qt_metacall
+40 (int (*)(...))QDockWidget::~QDockWidget
+48 (int (*)(...))QDockWidget::~QDockWidget
+56 (int (*)(...))QDockWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDockWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QDockWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QDockWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDockWidget::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QDockWidget)
+456 (int (*)(...))QDockWidget::_ZThn16_N11QDockWidgetD1Ev
+464 (int (*)(...))QDockWidget::_ZThn16_N11QDockWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDockWidget
+ size=40 align=8
+ base size=40 base align=8
+QDockWidget (0x0x7f0b1f2b8bc8) 0
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 16)
+ QWidget (0x0x7f0b1ef84af0) 0
+ primary-for QDockWidget (0x0x7f0b1f2b8bc8)
+ QObject (0x0x7f0b1ef7b780) 0
+ primary-for QWidget (0x0x7f0b1ef84af0)
+ QPaintDevice (0x0x7f0b1ef7b7e0) 16
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 456)
+
+Class QTileRules
+ size=8 align=4
+ base size=8 base align=4
+QTileRules (0x0x7f0b1ef7be40) 0
+
+Class QErrorMessage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QErrorMessage::QPrivateSignal (0x0x7f0b1efee4e0) 0 empty
+
+Vtable for QErrorMessage
+QErrorMessage::_ZTV13QErrorMessage: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QErrorMessage)
+16 (int (*)(...))QErrorMessage::metaObject
+24 (int (*)(...))QErrorMessage::qt_metacast
+32 (int (*)(...))QErrorMessage::qt_metacall
+40 (int (*)(...))QErrorMessage::~QErrorMessage
+48 (int (*)(...))QErrorMessage::~QErrorMessage
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QErrorMessage::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QErrorMessage::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI13QErrorMessage)
+488 (int (*)(...))QErrorMessage::_ZThn16_N13QErrorMessageD1Ev
+496 (int (*)(...))QErrorMessage::_ZThn16_N13QErrorMessageD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QErrorMessage
+ size=40 align=8
+ base size=40 base align=8
+QErrorMessage (0x0x7f0b1f2b8ea0) 0
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 16)
+ QDialog (0x0x7f0b1f2b8f08) 0
+ primary-for QErrorMessage (0x0x7f0b1f2b8ea0)
+ QWidget (0x0x7f0b1eff0540) 0
+ primary-for QDialog (0x0x7f0b1f2b8f08)
+ QObject (0x0x7f0b1efee420) 0
+ primary-for QWidget (0x0x7f0b1eff0540)
+ QPaintDevice (0x0x7f0b1efee480) 16
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 488)
+
+Class QFileDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDialog::QPrivateSignal (0x0x7f0b1efee720) 0 empty
+
+Vtable for QFileDialog
+QFileDialog::_ZTV11QFileDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFileDialog)
+16 (int (*)(...))QFileDialog::metaObject
+24 (int (*)(...))QFileDialog::qt_metacast
+32 (int (*)(...))QFileDialog::qt_metacall
+40 (int (*)(...))QFileDialog::~QFileDialog
+48 (int (*)(...))QFileDialog::~QFileDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QFileDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFileDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QFileDialog::done
+456 (int (*)(...))QFileDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QFileDialog)
+488 (int (*)(...))QFileDialog::_ZThn16_N11QFileDialogD1Ev
+496 (int (*)(...))QFileDialog::_ZThn16_N11QFileDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFileDialog
+ size=40 align=8
+ base size=40 base align=8
+QFileDialog (0x0x7f0b1f2b8f70) 0
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 16)
+ QDialog (0x0x7f0b1f00b000) 0
+ primary-for QFileDialog (0x0x7f0b1f2b8f70)
+ QWidget (0x0x7f0b1eff05b0) 0
+ primary-for QDialog (0x0x7f0b1f00b000)
+ QObject (0x0x7f0b1efee660) 0
+ primary-for QWidget (0x0x7f0b1eff05b0)
+ QPaintDevice (0x0x7f0b1efee6c0) 16
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 488)
+
+Vtable for QFileIconProvider
+QFileIconProvider::_ZTV17QFileIconProvider: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFileIconProvider)
+16 (int (*)(...))QFileIconProvider::~QFileIconProvider
+24 (int (*)(...))QFileIconProvider::~QFileIconProvider
+32 (int (*)(...))QFileIconProvider::icon
+40 (int (*)(...))QFileIconProvider::icon
+48 (int (*)(...))QAbstractFileIconProvider::type
+56 (int (*)(...))QAbstractFileIconProvider::setOptions
+64 (int (*)(...))QAbstractFileIconProvider::options
+
+Class QFileIconProvider
+ size=16 align=8
+ base size=16 base align=8
+QFileIconProvider (0x0x7f0b1f00b1a0) 0
+ vptr=((& QFileIconProvider::_ZTV17QFileIconProvider) + 16)
+ QAbstractFileIconProvider (0x0x7f0b1f054000) 0
+ primary-for QFileIconProvider (0x0x7f0b1f00b1a0)
+
+Class QFocusFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFocusFrame::QPrivateSignal (0x0x7f0b1f0541e0) 0 empty
+
+Vtable for QFocusFrame
+QFocusFrame::_ZTV11QFocusFrame: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusFrame)
+16 (int (*)(...))QFocusFrame::metaObject
+24 (int (*)(...))QFocusFrame::qt_metacast
+32 (int (*)(...))QFocusFrame::qt_metacall
+40 (int (*)(...))QFocusFrame::~QFocusFrame
+48 (int (*)(...))QFocusFrame::~QFocusFrame
+56 (int (*)(...))QFocusFrame::event
+64 (int (*)(...))QFocusFrame::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFocusFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFocusFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QFocusFrame)
+456 (int (*)(...))QFocusFrame::_ZThn16_N11QFocusFrameD1Ev
+464 (int (*)(...))QFocusFrame::_ZThn16_N11QFocusFrameD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFocusFrame
+ size=40 align=8
+ base size=40 base align=8
+QFocusFrame (0x0x7f0b1f00b208) 0
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 16)
+ QWidget (0x0x7f0b1eff0ee0) 0
+ primary-for QFocusFrame (0x0x7f0b1f00b208)
+ QObject (0x0x7f0b1f054120) 0
+ primary-for QWidget (0x0x7f0b1eff0ee0)
+ QPaintDevice (0x0x7f0b1f054180) 16
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 456)
+
+Class QFontComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontComboBox::QPrivateSignal (0x0x7f0b1f054420) 0 empty
+
+Vtable for QFontComboBox
+QFontComboBox::_ZTV13QFontComboBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QFontComboBox)
+16 (int (*)(...))QFontComboBox::metaObject
+24 (int (*)(...))QFontComboBox::qt_metacast
+32 (int (*)(...))QFontComboBox::qt_metacall
+40 (int (*)(...))QFontComboBox::~QFontComboBox
+48 (int (*)(...))QFontComboBox::~QFontComboBox
+56 (int (*)(...))QFontComboBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFontComboBox::sizeHint
+136 (int (*)(...))QComboBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QComboBox::mousePressEvent
+176 (int (*)(...))QComboBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QComboBox::wheelEvent
+208 (int (*)(...))QComboBox::keyPressEvent
+216 (int (*)(...))QComboBox::keyReleaseEvent
+224 (int (*)(...))QComboBox::focusInEvent
+232 (int (*)(...))QComboBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QComboBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QComboBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QComboBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QComboBox::showEvent
+352 (int (*)(...))QComboBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QComboBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QComboBox::inputMethodEvent
+416 (int (*)(...))QComboBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QComboBox::setModel
+440 (int (*)(...))QComboBox::showPopup
+448 (int (*)(...))QComboBox::hidePopup
+456 (int (*)(...))QComboBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI13QFontComboBox)
+480 (int (*)(...))QFontComboBox::_ZThn16_N13QFontComboBoxD1Ev
+488 (int (*)(...))QFontComboBox::_ZThn16_N13QFontComboBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFontComboBox
+ size=40 align=8
+ base size=40 base align=8
+QFontComboBox (0x0x7f0b1f00b270) 0
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 16)
+ QComboBox (0x0x7f0b1f00b2d8) 0
+ primary-for QFontComboBox (0x0x7f0b1f00b270)
+ QWidget (0x0x7f0b1eff0f50) 0
+ primary-for QComboBox (0x0x7f0b1f00b2d8)
+ QObject (0x0x7f0b1f054360) 0
+ primary-for QWidget (0x0x7f0b1eff0f50)
+ QPaintDevice (0x0x7f0b1f0543c0) 16
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 480)
+
+Class QFontDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontDialog::QPrivateSignal (0x0x7f0b1f054a20) 0 empty
+
+Vtable for QFontDialog
+QFontDialog::_ZTV11QFontDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFontDialog)
+16 (int (*)(...))QFontDialog::metaObject
+24 (int (*)(...))QFontDialog::qt_metacast
+32 (int (*)(...))QFontDialog::qt_metacall
+40 (int (*)(...))QFontDialog::~QFontDialog
+48 (int (*)(...))QFontDialog::~QFontDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QFontDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QFontDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFontDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QFontDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QFontDialog)
+488 (int (*)(...))QFontDialog::_ZThn16_N11QFontDialogD1Ev
+496 (int (*)(...))QFontDialog::_ZThn16_N11QFontDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFontDialog
+ size=40 align=8
+ base size=40 base align=8
+QFontDialog (0x0x7f0b1f00b478) 0
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 16)
+ QDialog (0x0x7f0b1f00b4e0) 0
+ primary-for QFontDialog (0x0x7f0b1f00b478)
+ QWidget (0x0x7f0b1f067230) 0
+ primary-for QDialog (0x0x7f0b1f00b4e0)
+ QObject (0x0x7f0b1f054960) 0
+ primary-for QWidget (0x0x7f0b1f067230)
+ QPaintDevice (0x0x7f0b1f0549c0) 16
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 488)
+
+Class QFormLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFormLayout::QPrivateSignal (0x0x7f0b1f0bd060) 0 empty
+
+Class QFormLayout::TakeRowResult
+ size=16 align=8
+ base size=16 base align=8
+QFormLayout::TakeRowResult (0x0x7f0b1f0bd0c0) 0
+
+Vtable for QFormLayout
+QFormLayout::_ZTV11QFormLayout: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFormLayout)
+16 (int (*)(...))QFormLayout::metaObject
+24 (int (*)(...))QFormLayout::qt_metacast
+32 (int (*)(...))QFormLayout::qt_metacall
+40 (int (*)(...))QFormLayout::~QFormLayout
+48 (int (*)(...))QFormLayout::~QFormLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFormLayout::spacing
+120 (int (*)(...))QFormLayout::setSpacing
+128 (int (*)(...))QFormLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QFormLayout::addItem
+152 (int (*)(...))QFormLayout::expandingDirections
+160 (int (*)(...))QFormLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QFormLayout::setGeometry
+184 (int (*)(...))QFormLayout::itemAt
+192 (int (*)(...))QFormLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QFormLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QFormLayout::sizeHint
+264 (int (*)(...))QFormLayout::hasHeightForWidth
+272 (int (*)(...))QFormLayout::heightForWidth
+280 (int (*)(...))-16
+288 (int (*)(...))(& _ZTI11QFormLayout)
+296 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayoutD1Ev
+304 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayoutD0Ev
+312 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout8sizeHintEv
+320 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout11minimumSizeEv
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+336 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout19expandingDirectionsEv
+344 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayout11setGeometryERK5QRect
+352 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+368 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout17hasHeightForWidthEv
+376 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout14heightForWidthEi
+384 (int (*)(...))QLayoutItem::minimumHeightForWidth
+392 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayout10invalidateEv
+400 (int (*)(...))QLayoutItem::widget
+408 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+416 (int (*)(...))QLayoutItem::spacerItem
+424 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QFormLayout
+ size=32 align=8
+ base size=28 base align=8
+QFormLayout (0x0x7f0b1f00b680) 0
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 16)
+ QLayout (0x0x7f0b1f067540) 0
+ primary-for QFormLayout (0x0x7f0b1f00b680)
+ QObject (0x0x7f0b1f054f60) 0
+ primary-for QLayout (0x0x7f0b1f067540)
+ QLayoutItem (0x0x7f0b1f0bd000) 16
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 296)
+
+Class QGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGesture::QPrivateSignal (0x0x7f0b1ecebba0) 0 empty
+
+Vtable for QGesture
+QGesture::_ZTV8QGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QGesture)
+16 (int (*)(...))QGesture::metaObject
+24 (int (*)(...))QGesture::qt_metacast
+32 (int (*)(...))QGesture::qt_metacall
+40 (int (*)(...))QGesture::~QGesture
+48 (int (*)(...))QGesture::~QGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QGesture
+ size=16 align=8
+ base size=16 base align=8
+QGesture (0x0x7f0b1ecf7138) 0
+ vptr=((& QGesture::_ZTV8QGesture) + 16)
+ QObject (0x0x7f0b1ecebb40) 0
+ primary-for QGesture (0x0x7f0b1ecf7138)
+
+Class QPanGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPanGesture::QPrivateSignal (0x0x7f0b1ecebd80) 0 empty
+
+Vtable for QPanGesture
+QPanGesture::_ZTV11QPanGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPanGesture)
+16 (int (*)(...))QPanGesture::metaObject
+24 (int (*)(...))QPanGesture::qt_metacast
+32 (int (*)(...))QPanGesture::qt_metacall
+40 (int (*)(...))QPanGesture::~QPanGesture
+48 (int (*)(...))QPanGesture::~QPanGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPanGesture
+ size=16 align=8
+ base size=16 base align=8
+QPanGesture (0x0x7f0b1ecf71a0) 0
+ vptr=((& QPanGesture::_ZTV11QPanGesture) + 16)
+ QGesture (0x0x7f0b1ecf7208) 0
+ primary-for QPanGesture (0x0x7f0b1ecf71a0)
+ QObject (0x0x7f0b1ecebd20) 0
+ primary-for QGesture (0x0x7f0b1ecf7208)
+
+Class QPinchGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPinchGesture::QPrivateSignal (0x0x7f0b1ecebf60) 0 empty
+
+Vtable for QPinchGesture
+QPinchGesture::_ZTV13QPinchGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPinchGesture)
+16 (int (*)(...))QPinchGesture::metaObject
+24 (int (*)(...))QPinchGesture::qt_metacast
+32 (int (*)(...))QPinchGesture::qt_metacall
+40 (int (*)(...))QPinchGesture::~QPinchGesture
+48 (int (*)(...))QPinchGesture::~QPinchGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPinchGesture
+ size=16 align=8
+ base size=16 base align=8
+QPinchGesture (0x0x7f0b1ecf7270) 0
+ vptr=((& QPinchGesture::_ZTV13QPinchGesture) + 16)
+ QGesture (0x0x7f0b1ecf72d8) 0
+ primary-for QPinchGesture (0x0x7f0b1ecf7270)
+ QObject (0x0x7f0b1ecebf00) 0
+ primary-for QGesture (0x0x7f0b1ecf72d8)
+
+Class QSwipeGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSwipeGesture::QPrivateSignal (0x0x7f0b1ed1a720) 0 empty
+
+Vtable for QSwipeGesture
+QSwipeGesture::_ZTV13QSwipeGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSwipeGesture)
+16 (int (*)(...))QSwipeGesture::metaObject
+24 (int (*)(...))QSwipeGesture::qt_metacast
+32 (int (*)(...))QSwipeGesture::qt_metacall
+40 (int (*)(...))QSwipeGesture::~QSwipeGesture
+48 (int (*)(...))QSwipeGesture::~QSwipeGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSwipeGesture
+ size=16 align=8
+ base size=16 base align=8
+QSwipeGesture (0x0x7f0b1ecf7478) 0
+ vptr=((& QSwipeGesture::_ZTV13QSwipeGesture) + 16)
+ QGesture (0x0x7f0b1ecf74e0) 0
+ primary-for QSwipeGesture (0x0x7f0b1ecf7478)
+ QObject (0x0x7f0b1ed1a6c0) 0
+ primary-for QGesture (0x0x7f0b1ecf74e0)
+
+Class QTapGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapGesture::QPrivateSignal (0x0x7f0b1ed1a9c0) 0 empty
+
+Vtable for QTapGesture
+QTapGesture::_ZTV11QTapGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTapGesture)
+16 (int (*)(...))QTapGesture::metaObject
+24 (int (*)(...))QTapGesture::qt_metacast
+32 (int (*)(...))QTapGesture::qt_metacall
+40 (int (*)(...))QTapGesture::~QTapGesture
+48 (int (*)(...))QTapGesture::~QTapGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTapGesture
+ size=16 align=8
+ base size=16 base align=8
+QTapGesture (0x0x7f0b1ecf7548) 0
+ vptr=((& QTapGesture::_ZTV11QTapGesture) + 16)
+ QGesture (0x0x7f0b1ecf75b0) 0
+ primary-for QTapGesture (0x0x7f0b1ecf7548)
+ QObject (0x0x7f0b1ed1a960) 0
+ primary-for QGesture (0x0x7f0b1ecf75b0)
+
+Class QTapAndHoldGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapAndHoldGesture::QPrivateSignal (0x0x7f0b1ed1aba0) 0 empty
+
+Vtable for QTapAndHoldGesture
+QTapAndHoldGesture::_ZTV18QTapAndHoldGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QTapAndHoldGesture)
+16 (int (*)(...))QTapAndHoldGesture::metaObject
+24 (int (*)(...))QTapAndHoldGesture::qt_metacast
+32 (int (*)(...))QTapAndHoldGesture::qt_metacall
+40 (int (*)(...))QTapAndHoldGesture::~QTapAndHoldGesture
+48 (int (*)(...))QTapAndHoldGesture::~QTapAndHoldGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTapAndHoldGesture
+ size=16 align=8
+ base size=16 base align=8
+QTapAndHoldGesture (0x0x7f0b1ecf7618) 0
+ vptr=((& QTapAndHoldGesture::_ZTV18QTapAndHoldGesture) + 16)
+ QGesture (0x0x7f0b1ecf7680) 0
+ primary-for QTapAndHoldGesture (0x0x7f0b1ecf7618)
+ QObject (0x0x7f0b1ed1ab40) 0
+ primary-for QGesture (0x0x7f0b1ecf7680)
+
+Vtable for QGestureEvent
+QGestureEvent::_ZTV13QGestureEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGestureEvent)
+16 (int (*)(...))QGestureEvent::~QGestureEvent
+24 (int (*)(...))QGestureEvent::~QGestureEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGestureEvent
+ size=64 align=8
+ base size=64 base align=8
+QGestureEvent (0x0x7f0b1ecf76e8) 0
+ vptr=((& QGestureEvent::_ZTV13QGestureEvent) + 16)
+ QEvent (0x0x7f0b1ed1ad20) 0
+ primary-for QGestureEvent (0x0x7f0b1ecf76e8)
+
+Vtable for QGestureRecognizer
+QGestureRecognizer::_ZTV18QGestureRecognizer: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGestureRecognizer)
+16 0
+24 0
+32 (int (*)(...))QGestureRecognizer::create
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGestureRecognizer::reset
+
+Class QGestureRecognizer
+ size=8 align=8
+ base size=8 base align=8
+QGestureRecognizer (0x0x7f0b1ed5f9c0) 0 nearly-empty
+ vptr=((& QGestureRecognizer::_ZTV18QGestureRecognizer) + 16)
+
+Vtable for QGraphicsItem
+QGraphicsItem::_ZTV13QGraphicsItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGraphicsItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsItem::isObscuredBy
+88 (int (*)(...))QGraphicsItem::opaqueArea
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))QGraphicsItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsItem (0x0x7f0b1ed5fd20) 0
+ vptr=((& QGraphicsItem::_ZTV13QGraphicsItem) + 16)
+
+Class QGraphicsObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsObject::QPrivateSignal (0x0x7f0b1ee31ea0) 0 empty
+
+Vtable for QGraphicsObject
+QGraphicsObject::_ZTV15QGraphicsObject: 53 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsObject)
+16 (int (*)(...))QGraphicsObject::metaObject
+24 (int (*)(...))QGraphicsObject::qt_metacast
+32 (int (*)(...))QGraphicsObject::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QGraphicsObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))-16
+120 (int (*)(...))(& _ZTI15QGraphicsObject)
+128 0
+136 0
+144 (int (*)(...))QGraphicsItem::advance
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))QGraphicsItem::shape
+168 (int (*)(...))QGraphicsItem::contains
+176 (int (*)(...))QGraphicsItem::collidesWithItem
+184 (int (*)(...))QGraphicsItem::collidesWithPath
+192 (int (*)(...))QGraphicsItem::isObscuredBy
+200 (int (*)(...))QGraphicsItem::opaqueArea
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))QGraphicsItem::type
+224 (int (*)(...))QGraphicsItem::sceneEventFilter
+232 (int (*)(...))QGraphicsItem::sceneEvent
+240 (int (*)(...))QGraphicsItem::contextMenuEvent
+248 (int (*)(...))QGraphicsItem::dragEnterEvent
+256 (int (*)(...))QGraphicsItem::dragLeaveEvent
+264 (int (*)(...))QGraphicsItem::dragMoveEvent
+272 (int (*)(...))QGraphicsItem::dropEvent
+280 (int (*)(...))QGraphicsItem::focusInEvent
+288 (int (*)(...))QGraphicsItem::focusOutEvent
+296 (int (*)(...))QGraphicsItem::hoverEnterEvent
+304 (int (*)(...))QGraphicsItem::hoverMoveEvent
+312 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+320 (int (*)(...))QGraphicsItem::keyPressEvent
+328 (int (*)(...))QGraphicsItem::keyReleaseEvent
+336 (int (*)(...))QGraphicsItem::mousePressEvent
+344 (int (*)(...))QGraphicsItem::mouseMoveEvent
+352 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+360 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+368 (int (*)(...))QGraphicsItem::wheelEvent
+376 (int (*)(...))QGraphicsItem::inputMethodEvent
+384 (int (*)(...))QGraphicsItem::inputMethodQuery
+392 (int (*)(...))QGraphicsItem::itemChange
+400 (int (*)(...))QGraphicsItem::supportsExtension
+408 (int (*)(...))QGraphicsItem::setExtension
+416 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsObject
+ size=32 align=8
+ base size=32 base align=8
+QGraphicsObject (0x0x7f0b1edef380) 0
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 16)
+ QObject (0x0x7f0b1ee31de0) 0
+ primary-for QGraphicsObject (0x0x7f0b1edef380)
+ QGraphicsItem (0x0x7f0b1ee31e40) 16
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 128)
+
+Vtable for QAbstractGraphicsShapeItem
+QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractGraphicsShapeItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QAbstractGraphicsShapeItem::isObscuredBy
+88 (int (*)(...))QAbstractGraphicsShapeItem::opaqueArea
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))QGraphicsItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QAbstractGraphicsShapeItem
+ size=16 align=8
+ base size=16 base align=8
+QAbstractGraphicsShapeItem (0x0x7f0b1ee33138) 0
+ vptr=((& QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem) + 16)
+ QGraphicsItem (0x0x7f0b1ee31f60) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f0b1ee33138)
+
+Vtable for QGraphicsPathItem
+QGraphicsPathItem::_ZTV17QGraphicsPathItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsPathItem)
+16 (int (*)(...))QGraphicsPathItem::~QGraphicsPathItem
+24 (int (*)(...))QGraphicsPathItem::~QGraphicsPathItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPathItem::boundingRect
+48 (int (*)(...))QGraphicsPathItem::shape
+56 (int (*)(...))QGraphicsPathItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPathItem::isObscuredBy
+88 (int (*)(...))QGraphicsPathItem::opaqueArea
+96 (int (*)(...))QGraphicsPathItem::paint
+104 (int (*)(...))QGraphicsPathItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPathItem::supportsExtension
+296 (int (*)(...))QGraphicsPathItem::setExtension
+304 (int (*)(...))QGraphicsPathItem::extension
+
+Class QGraphicsPathItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPathItem (0x0x7f0b1ee331a0) 0
+ vptr=((& QGraphicsPathItem::_ZTV17QGraphicsPathItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f0b1ee33208) 0
+ primary-for QGraphicsPathItem (0x0x7f0b1ee331a0)
+ QGraphicsItem (0x0x7f0b1ee6f0c0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f0b1ee33208)
+
+Vtable for QGraphicsRectItem
+QGraphicsRectItem::_ZTV17QGraphicsRectItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsRectItem)
+16 (int (*)(...))QGraphicsRectItem::~QGraphicsRectItem
+24 (int (*)(...))QGraphicsRectItem::~QGraphicsRectItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsRectItem::boundingRect
+48 (int (*)(...))QGraphicsRectItem::shape
+56 (int (*)(...))QGraphicsRectItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsRectItem::isObscuredBy
+88 (int (*)(...))QGraphicsRectItem::opaqueArea
+96 (int (*)(...))QGraphicsRectItem::paint
+104 (int (*)(...))QGraphicsRectItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsRectItem::supportsExtension
+296 (int (*)(...))QGraphicsRectItem::setExtension
+304 (int (*)(...))QGraphicsRectItem::extension
+
+Class QGraphicsRectItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsRectItem (0x0x7f0b1ee33270) 0
+ vptr=((& QGraphicsRectItem::_ZTV17QGraphicsRectItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f0b1ee332d8) 0
+ primary-for QGraphicsRectItem (0x0x7f0b1ee33270)
+ QGraphicsItem (0x0x7f0b1ee6f1e0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f0b1ee332d8)
+
+Vtable for QGraphicsEllipseItem
+QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsEllipseItem)
+16 (int (*)(...))QGraphicsEllipseItem::~QGraphicsEllipseItem
+24 (int (*)(...))QGraphicsEllipseItem::~QGraphicsEllipseItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsEllipseItem::boundingRect
+48 (int (*)(...))QGraphicsEllipseItem::shape
+56 (int (*)(...))QGraphicsEllipseItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsEllipseItem::isObscuredBy
+88 (int (*)(...))QGraphicsEllipseItem::opaqueArea
+96 (int (*)(...))QGraphicsEllipseItem::paint
+104 (int (*)(...))QGraphicsEllipseItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsEllipseItem::supportsExtension
+296 (int (*)(...))QGraphicsEllipseItem::setExtension
+304 (int (*)(...))QGraphicsEllipseItem::extension
+
+Class QGraphicsEllipseItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsEllipseItem (0x0x7f0b1ee33340) 0
+ vptr=((& QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f0b1ee333a8) 0
+ primary-for QGraphicsEllipseItem (0x0x7f0b1ee33340)
+ QGraphicsItem (0x0x7f0b1ee6f360) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f0b1ee333a8)
+
+Vtable for QGraphicsPolygonItem
+QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsPolygonItem)
+16 (int (*)(...))QGraphicsPolygonItem::~QGraphicsPolygonItem
+24 (int (*)(...))QGraphicsPolygonItem::~QGraphicsPolygonItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPolygonItem::boundingRect
+48 (int (*)(...))QGraphicsPolygonItem::shape
+56 (int (*)(...))QGraphicsPolygonItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPolygonItem::isObscuredBy
+88 (int (*)(...))QGraphicsPolygonItem::opaqueArea
+96 (int (*)(...))QGraphicsPolygonItem::paint
+104 (int (*)(...))QGraphicsPolygonItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPolygonItem::supportsExtension
+296 (int (*)(...))QGraphicsPolygonItem::setExtension
+304 (int (*)(...))QGraphicsPolygonItem::extension
+
+Class QGraphicsPolygonItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPolygonItem (0x0x7f0b1ee33410) 0
+ vptr=((& QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f0b1ee33478) 0
+ primary-for QGraphicsPolygonItem (0x0x7f0b1ee33410)
+ QGraphicsItem (0x0x7f0b1ee6f4e0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f0b1ee33478)
+
+Vtable for QGraphicsLineItem
+QGraphicsLineItem::_ZTV17QGraphicsLineItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsLineItem)
+16 (int (*)(...))QGraphicsLineItem::~QGraphicsLineItem
+24 (int (*)(...))QGraphicsLineItem::~QGraphicsLineItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsLineItem::boundingRect
+48 (int (*)(...))QGraphicsLineItem::shape
+56 (int (*)(...))QGraphicsLineItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsLineItem::isObscuredBy
+88 (int (*)(...))QGraphicsLineItem::opaqueArea
+96 (int (*)(...))QGraphicsLineItem::paint
+104 (int (*)(...))QGraphicsLineItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsLineItem::supportsExtension
+296 (int (*)(...))QGraphicsLineItem::setExtension
+304 (int (*)(...))QGraphicsLineItem::extension
+
+Class QGraphicsLineItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLineItem (0x0x7f0b1ee334e0) 0
+ vptr=((& QGraphicsLineItem::_ZTV17QGraphicsLineItem) + 16)
+ QGraphicsItem (0x0x7f0b1ee6f600) 0
+ primary-for QGraphicsLineItem (0x0x7f0b1ee334e0)
+
+Vtable for QGraphicsPixmapItem
+QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsPixmapItem)
+16 (int (*)(...))QGraphicsPixmapItem::~QGraphicsPixmapItem
+24 (int (*)(...))QGraphicsPixmapItem::~QGraphicsPixmapItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPixmapItem::boundingRect
+48 (int (*)(...))QGraphicsPixmapItem::shape
+56 (int (*)(...))QGraphicsPixmapItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPixmapItem::isObscuredBy
+88 (int (*)(...))QGraphicsPixmapItem::opaqueArea
+96 (int (*)(...))QGraphicsPixmapItem::paint
+104 (int (*)(...))QGraphicsPixmapItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPixmapItem::supportsExtension
+296 (int (*)(...))QGraphicsPixmapItem::setExtension
+304 (int (*)(...))QGraphicsPixmapItem::extension
+
+Class QGraphicsPixmapItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPixmapItem (0x0x7f0b1ee33548) 0
+ vptr=((& QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem) + 16)
+ QGraphicsItem (0x0x7f0b1ee6f780) 0
+ primary-for QGraphicsPixmapItem (0x0x7f0b1ee33548)
+
+Class QGraphicsTextItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTextItem::QPrivateSignal (0x0x7f0b1ee6f9c0) 0 empty
+
+Vtable for QGraphicsTextItem
+QGraphicsTextItem::_ZTV17QGraphicsTextItem: 82 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsTextItem)
+16 (int (*)(...))QGraphicsTextItem::metaObject
+24 (int (*)(...))QGraphicsTextItem::qt_metacast
+32 (int (*)(...))QGraphicsTextItem::qt_metacall
+40 (int (*)(...))QGraphicsTextItem::~QGraphicsTextItem
+48 (int (*)(...))QGraphicsTextItem::~QGraphicsTextItem
+56 (int (*)(...))QGraphicsObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsTextItem::boundingRect
+120 (int (*)(...))QGraphicsTextItem::shape
+128 (int (*)(...))QGraphicsTextItem::contains
+136 (int (*)(...))QGraphicsTextItem::paint
+144 (int (*)(...))QGraphicsTextItem::isObscuredBy
+152 (int (*)(...))QGraphicsTextItem::opaqueArea
+160 (int (*)(...))QGraphicsTextItem::type
+168 (int (*)(...))QGraphicsTextItem::sceneEvent
+176 (int (*)(...))QGraphicsTextItem::mousePressEvent
+184 (int (*)(...))QGraphicsTextItem::mouseMoveEvent
+192 (int (*)(...))QGraphicsTextItem::mouseReleaseEvent
+200 (int (*)(...))QGraphicsTextItem::mouseDoubleClickEvent
+208 (int (*)(...))QGraphicsTextItem::contextMenuEvent
+216 (int (*)(...))QGraphicsTextItem::keyPressEvent
+224 (int (*)(...))QGraphicsTextItem::keyReleaseEvent
+232 (int (*)(...))QGraphicsTextItem::focusInEvent
+240 (int (*)(...))QGraphicsTextItem::focusOutEvent
+248 (int (*)(...))QGraphicsTextItem::dragEnterEvent
+256 (int (*)(...))QGraphicsTextItem::dragLeaveEvent
+264 (int (*)(...))QGraphicsTextItem::dragMoveEvent
+272 (int (*)(...))QGraphicsTextItem::dropEvent
+280 (int (*)(...))QGraphicsTextItem::inputMethodEvent
+288 (int (*)(...))QGraphicsTextItem::hoverEnterEvent
+296 (int (*)(...))QGraphicsTextItem::hoverMoveEvent
+304 (int (*)(...))QGraphicsTextItem::hoverLeaveEvent
+312 (int (*)(...))QGraphicsTextItem::inputMethodQuery
+320 (int (*)(...))QGraphicsTextItem::supportsExtension
+328 (int (*)(...))QGraphicsTextItem::setExtension
+336 (int (*)(...))QGraphicsTextItem::extension
+344 (int (*)(...))-16
+352 (int (*)(...))(& _ZTI17QGraphicsTextItem)
+360 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItemD1Ev
+368 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItemD0Ev
+376 (int (*)(...))QGraphicsItem::advance
+384 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem12boundingRectEv
+392 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem5shapeEv
+400 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem8containsERK7QPointF
+408 (int (*)(...))QGraphicsItem::collidesWithItem
+416 (int (*)(...))QGraphicsItem::collidesWithPath
+424 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem12isObscuredByEPK13QGraphicsItem
+432 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem10opaqueAreaEv
+440 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+448 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem4typeEv
+456 (int (*)(...))QGraphicsItem::sceneEventFilter
+464 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem10sceneEventEP6QEvent
+472 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem16contextMenuEventEP30QGraphicsSceneContextMenuEvent
+480 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14dragEnterEventEP27QGraphicsSceneDragDropEvent
+488 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14dragLeaveEventEP27QGraphicsSceneDragDropEvent
+496 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13dragMoveEventEP27QGraphicsSceneDragDropEvent
+504 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem9dropEventEP27QGraphicsSceneDragDropEvent
+512 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem12focusInEventEP11QFocusEvent
+520 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13focusOutEventEP11QFocusEvent
+528 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15hoverEnterEventEP24QGraphicsSceneHoverEvent
+536 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14hoverMoveEventEP24QGraphicsSceneHoverEvent
+544 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+552 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13keyPressEventEP9QKeyEvent
+560 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15keyReleaseEventEP9QKeyEvent
+568 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15mousePressEventEP24QGraphicsSceneMouseEvent
+576 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14mouseMoveEventEP24QGraphicsSceneMouseEvent
+584 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem17mouseReleaseEventEP24QGraphicsSceneMouseEvent
+592 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent
+600 (int (*)(...))QGraphicsItem::wheelEvent
+608 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem16inputMethodEventEP17QInputMethodEvent
+616 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem16inputMethodQueryEN2Qt16InputMethodQueryE
+624 (int (*)(...))QGraphicsItem::itemChange
+632 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem17supportsExtensionEN13QGraphicsItem9ExtensionE
+640 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem12setExtensionEN13QGraphicsItem9ExtensionERK8QVariant
+648 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem9extensionERK8QVariant
+
+Class QGraphicsTextItem
+ size=40 align=8
+ base size=40 base align=8
+QGraphicsTextItem (0x0x7f0b1ee335b0) 0
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 16)
+ QGraphicsObject (0x0x7f0b1edef7e0) 0
+ primary-for QGraphicsTextItem (0x0x7f0b1ee335b0)
+ QObject (0x0x7f0b1ee6f900) 0
+ primary-for QGraphicsObject (0x0x7f0b1edef7e0)
+ QGraphicsItem (0x0x7f0b1ee6f960) 16
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 360)
+
+Vtable for QGraphicsSimpleTextItem
+QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSimpleTextItem)
+16 (int (*)(...))QGraphicsSimpleTextItem::~QGraphicsSimpleTextItem
+24 (int (*)(...))QGraphicsSimpleTextItem::~QGraphicsSimpleTextItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsSimpleTextItem::boundingRect
+48 (int (*)(...))QGraphicsSimpleTextItem::shape
+56 (int (*)(...))QGraphicsSimpleTextItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsSimpleTextItem::isObscuredBy
+88 (int (*)(...))QGraphicsSimpleTextItem::opaqueArea
+96 (int (*)(...))QGraphicsSimpleTextItem::paint
+104 (int (*)(...))QGraphicsSimpleTextItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsSimpleTextItem::supportsExtension
+296 (int (*)(...))QGraphicsSimpleTextItem::setExtension
+304 (int (*)(...))QGraphicsSimpleTextItem::extension
+
+Class QGraphicsSimpleTextItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsSimpleTextItem (0x0x7f0b1ee336e8) 0
+ vptr=((& QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f0b1ee33750) 0
+ primary-for QGraphicsSimpleTextItem (0x0x7f0b1ee336e8)
+ QGraphicsItem (0x0x7f0b1ee6fc60) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f0b1ee33750)
+
+Vtable for QGraphicsItemGroup
+QGraphicsItemGroup::_ZTV18QGraphicsItemGroup: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGraphicsItemGroup)
+16 (int (*)(...))QGraphicsItemGroup::~QGraphicsItemGroup
+24 (int (*)(...))QGraphicsItemGroup::~QGraphicsItemGroup
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsItemGroup::boundingRect
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsItemGroup::isObscuredBy
+88 (int (*)(...))QGraphicsItemGroup::opaqueArea
+96 (int (*)(...))QGraphicsItemGroup::paint
+104 (int (*)(...))QGraphicsItemGroup::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsItemGroup
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsItemGroup (0x0x7f0b1ee337b8) 0
+ vptr=((& QGraphicsItemGroup::_ZTV18QGraphicsItemGroup) + 16)
+ QGraphicsItem (0x0x7f0b1ee6fd80) 0
+ primary-for QGraphicsItemGroup (0x0x7f0b1ee337b8)
+
+Vtable for QGraphicsLayoutItem
+QGraphicsLayoutItem::_ZTV19QGraphicsLayoutItem: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsLayoutItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsLayoutItem::setGeometry
+40 (int (*)(...))QGraphicsLayoutItem::getContentsMargins
+48 (int (*)(...))QGraphicsLayoutItem::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsLayoutItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLayoutItem (0x0x7f0b1eae90c0) 0
+ vptr=((& QGraphicsLayoutItem::_ZTV19QGraphicsLayoutItem) + 16)
+
+Vtable for QGraphicsLayout
+QGraphicsLayout::_ZTV15QGraphicsLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsLayout)
+16 0
+24 0
+32 (int (*)(...))QGraphicsLayoutItem::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))QGraphicsLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLayout (0x0x7f0b1ee33820) 0
+ vptr=((& QGraphicsLayout::_ZTV15QGraphicsLayout) + 16)
+ QGraphicsLayoutItem (0x0x7f0b1eae9780) 0
+ primary-for QGraphicsLayout (0x0x7f0b1ee33820)
+
+Class QGraphicsAnchor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsAnchor::QPrivateSignal (0x0x7f0b1eae9a80) 0 empty
+
+Vtable for QGraphicsAnchor
+QGraphicsAnchor::_ZTV15QGraphicsAnchor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsAnchor)
+16 (int (*)(...))QGraphicsAnchor::metaObject
+24 (int (*)(...))QGraphicsAnchor::qt_metacast
+32 (int (*)(...))QGraphicsAnchor::qt_metacall
+40 (int (*)(...))QGraphicsAnchor::~QGraphicsAnchor
+48 (int (*)(...))QGraphicsAnchor::~QGraphicsAnchor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QGraphicsAnchor
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsAnchor (0x0x7f0b1ee33888) 0
+ vptr=((& QGraphicsAnchor::_ZTV15QGraphicsAnchor) + 16)
+ QObject (0x0x7f0b1eae9a20) 0
+ primary-for QGraphicsAnchor (0x0x7f0b1ee33888)
+
+Vtable for QGraphicsAnchorLayout
+QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QGraphicsAnchorLayout)
+16 (int (*)(...))QGraphicsAnchorLayout::~QGraphicsAnchorLayout
+24 (int (*)(...))QGraphicsAnchorLayout::~QGraphicsAnchorLayout
+32 (int (*)(...))QGraphicsAnchorLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsAnchorLayout::sizeHint
+72 (int (*)(...))QGraphicsAnchorLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsAnchorLayout::count
+96 (int (*)(...))QGraphicsAnchorLayout::itemAt
+104 (int (*)(...))QGraphicsAnchorLayout::removeAt
+
+Class QGraphicsAnchorLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsAnchorLayout (0x0x7f0b1ee338f0) 0
+ vptr=((& QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout) + 16)
+ QGraphicsLayout (0x0x7f0b1ee33958) 0
+ primary-for QGraphicsAnchorLayout (0x0x7f0b1ee338f0)
+ QGraphicsLayoutItem (0x0x7f0b1eae9c00) 0
+ primary-for QGraphicsLayout (0x0x7f0b1ee33958)
+
+Class QGraphicsEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsEffect::QPrivateSignal (0x0x7f0b1eae9d80) 0 empty
+
+Vtable for QGraphicsEffect
+QGraphicsEffect::_ZTV15QGraphicsEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsEffect)
+16 (int (*)(...))QGraphicsEffect::metaObject
+24 (int (*)(...))QGraphicsEffect::qt_metacast
+32 (int (*)(...))QGraphicsEffect::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsEffect (0x0x7f0b1ee339c0) 0
+ vptr=((& QGraphicsEffect::_ZTV15QGraphicsEffect) + 16)
+ QObject (0x0x7f0b1eae9d20) 0
+ primary-for QGraphicsEffect (0x0x7f0b1ee339c0)
+
+Class QGraphicsColorizeEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsColorizeEffect::QPrivateSignal (0x0x7f0b1eb39360) 0 empty
+
+Vtable for QGraphicsColorizeEffect
+QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsColorizeEffect)
+16 (int (*)(...))QGraphicsColorizeEffect::metaObject
+24 (int (*)(...))QGraphicsColorizeEffect::qt_metacast
+32 (int (*)(...))QGraphicsColorizeEffect::qt_metacall
+40 (int (*)(...))QGraphicsColorizeEffect::~QGraphicsColorizeEffect
+48 (int (*)(...))QGraphicsColorizeEffect::~QGraphicsColorizeEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))QGraphicsColorizeEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsColorizeEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsColorizeEffect (0x0x7f0b1ee33b60) 0
+ vptr=((& QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect) + 16)
+ QGraphicsEffect (0x0x7f0b1ee33bc8) 0
+ primary-for QGraphicsColorizeEffect (0x0x7f0b1ee33b60)
+ QObject (0x0x7f0b1eb39300) 0
+ primary-for QGraphicsEffect (0x0x7f0b1ee33bc8)
+
+Class QGraphicsBlurEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsBlurEffect::QPrivateSignal (0x0x7f0b1eb39540) 0 empty
+
+Vtable for QGraphicsBlurEffect
+QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsBlurEffect)
+16 (int (*)(...))QGraphicsBlurEffect::metaObject
+24 (int (*)(...))QGraphicsBlurEffect::qt_metacast
+32 (int (*)(...))QGraphicsBlurEffect::qt_metacall
+40 (int (*)(...))QGraphicsBlurEffect::~QGraphicsBlurEffect
+48 (int (*)(...))QGraphicsBlurEffect::~QGraphicsBlurEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsBlurEffect::boundingRectFor
+120 (int (*)(...))QGraphicsBlurEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsBlurEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsBlurEffect (0x0x7f0b1ee33c30) 0
+ vptr=((& QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect) + 16)
+ QGraphicsEffect (0x0x7f0b1ee33c98) 0
+ primary-for QGraphicsBlurEffect (0x0x7f0b1ee33c30)
+ QObject (0x0x7f0b1eb394e0) 0
+ primary-for QGraphicsEffect (0x0x7f0b1ee33c98)
+
+Class QGraphicsDropShadowEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsDropShadowEffect::QPrivateSignal (0x0x7f0b1eb39ba0) 0 empty
+
+Vtable for QGraphicsDropShadowEffect
+QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QGraphicsDropShadowEffect)
+16 (int (*)(...))QGraphicsDropShadowEffect::metaObject
+24 (int (*)(...))QGraphicsDropShadowEffect::qt_metacast
+32 (int (*)(...))QGraphicsDropShadowEffect::qt_metacall
+40 (int (*)(...))QGraphicsDropShadowEffect::~QGraphicsDropShadowEffect
+48 (int (*)(...))QGraphicsDropShadowEffect::~QGraphicsDropShadowEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsDropShadowEffect::boundingRectFor
+120 (int (*)(...))QGraphicsDropShadowEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsDropShadowEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsDropShadowEffect (0x0x7f0b1ee33e38) 0
+ vptr=((& QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect) + 16)
+ QGraphicsEffect (0x0x7f0b1ee33ea0) 0
+ primary-for QGraphicsDropShadowEffect (0x0x7f0b1ee33e38)
+ QObject (0x0x7f0b1eb39b40) 0
+ primary-for QGraphicsEffect (0x0x7f0b1ee33ea0)
+
+Class QGraphicsOpacityEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsOpacityEffect::QPrivateSignal (0x0x7f0b1eb8f000) 0 empty
+
+Vtable for QGraphicsOpacityEffect
+QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QGraphicsOpacityEffect)
+16 (int (*)(...))QGraphicsOpacityEffect::metaObject
+24 (int (*)(...))QGraphicsOpacityEffect::qt_metacast
+32 (int (*)(...))QGraphicsOpacityEffect::qt_metacall
+40 (int (*)(...))QGraphicsOpacityEffect::~QGraphicsOpacityEffect
+48 (int (*)(...))QGraphicsOpacityEffect::~QGraphicsOpacityEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))QGraphicsOpacityEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsOpacityEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsOpacityEffect (0x0x7f0b1ee33f08) 0
+ vptr=((& QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect) + 16)
+ QGraphicsEffect (0x0x7f0b1ee33f70) 0
+ primary-for QGraphicsOpacityEffect (0x0x7f0b1ee33f08)
+ QObject (0x0x7f0b1eb39f60) 0
+ primary-for QGraphicsEffect (0x0x7f0b1ee33f70)
+
+Vtable for QGraphicsGridLayout
+QGraphicsGridLayout::_ZTV19QGraphicsGridLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsGridLayout)
+16 (int (*)(...))QGraphicsGridLayout::~QGraphicsGridLayout
+24 (int (*)(...))QGraphicsGridLayout::~QGraphicsGridLayout
+32 (int (*)(...))QGraphicsGridLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsGridLayout::sizeHint
+72 (int (*)(...))QGraphicsGridLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsGridLayout::count
+96 (int (*)(...))QGraphicsGridLayout::itemAt
+104 (int (*)(...))QGraphicsGridLayout::removeAt
+
+Class QGraphicsGridLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsGridLayout (0x0x7f0b1eb99000) 0
+ vptr=((& QGraphicsGridLayout::_ZTV19QGraphicsGridLayout) + 16)
+ QGraphicsLayout (0x0x7f0b1eb99068) 0
+ primary-for QGraphicsGridLayout (0x0x7f0b1eb99000)
+ QGraphicsLayoutItem (0x0x7f0b1eb8f180) 0
+ primary-for QGraphicsLayout (0x0x7f0b1eb99068)
+
+Class QGraphicsItemAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsItemAnimation::QPrivateSignal (0x0x7f0b1eb8f360) 0 empty
+
+Vtable for QGraphicsItemAnimation
+QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QGraphicsItemAnimation)
+16 (int (*)(...))QGraphicsItemAnimation::metaObject
+24 (int (*)(...))QGraphicsItemAnimation::qt_metacast
+32 (int (*)(...))QGraphicsItemAnimation::qt_metacall
+40 (int (*)(...))QGraphicsItemAnimation::~QGraphicsItemAnimation
+48 (int (*)(...))QGraphicsItemAnimation::~QGraphicsItemAnimation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsItemAnimation::beforeAnimationStep
+120 (int (*)(...))QGraphicsItemAnimation::afterAnimationStep
+
+Class QGraphicsItemAnimation
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsItemAnimation (0x0x7f0b1eb991a0) 0
+ vptr=((& QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation) + 16)
+ QObject (0x0x7f0b1eb8f300) 0
+ primary-for QGraphicsItemAnimation (0x0x7f0b1eb991a0)
+
+Vtable for QGraphicsLinearLayout
+QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QGraphicsLinearLayout)
+16 (int (*)(...))QGraphicsLinearLayout::~QGraphicsLinearLayout
+24 (int (*)(...))QGraphicsLinearLayout::~QGraphicsLinearLayout
+32 (int (*)(...))QGraphicsLinearLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsLinearLayout::sizeHint
+72 (int (*)(...))QGraphicsLinearLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsLinearLayout::count
+96 (int (*)(...))QGraphicsLinearLayout::itemAt
+104 (int (*)(...))QGraphicsLinearLayout::removeAt
+
+Class QGraphicsLinearLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLinearLayout (0x0x7f0b1eb99208) 0
+ vptr=((& QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout) + 16)
+ QGraphicsLayout (0x0x7f0b1eb99270) 0
+ primary-for QGraphicsLinearLayout (0x0x7f0b1eb99208)
+ QGraphicsLayoutItem (0x0x7f0b1eb8f420) 0
+ primary-for QGraphicsLayout (0x0x7f0b1eb99270)
+
+Class QGraphicsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsWidget::QPrivateSignal (0x0x7f0b1eb8f720) 0 empty
+
+Vtable for QGraphicsWidget
+QGraphicsWidget::_ZTV15QGraphicsWidget: 93 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsWidget)
+16 (int (*)(...))QGraphicsWidget::metaObject
+24 (int (*)(...))QGraphicsWidget::qt_metacast
+32 (int (*)(...))QGraphicsWidget::qt_metacall
+40 (int (*)(...))QGraphicsWidget::~QGraphicsWidget
+48 (int (*)(...))QGraphicsWidget::~QGraphicsWidget
+56 (int (*)(...))QGraphicsWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsWidget::setGeometry
+120 (int (*)(...))QGraphicsWidget::getContentsMargins
+128 (int (*)(...))QGraphicsWidget::type
+136 (int (*)(...))QGraphicsWidget::paint
+144 (int (*)(...))QGraphicsWidget::paintWindowFrame
+152 (int (*)(...))QGraphicsWidget::boundingRect
+160 (int (*)(...))QGraphicsWidget::shape
+168 (int (*)(...))QGraphicsWidget::initStyleOption
+176 (int (*)(...))QGraphicsWidget::sizeHint
+184 (int (*)(...))QGraphicsWidget::updateGeometry
+192 (int (*)(...))QGraphicsWidget::itemChange
+200 (int (*)(...))QGraphicsWidget::propertyChange
+208 (int (*)(...))QGraphicsWidget::sceneEvent
+216 (int (*)(...))QGraphicsWidget::windowFrameEvent
+224 (int (*)(...))QGraphicsWidget::windowFrameSectionAt
+232 (int (*)(...))QGraphicsWidget::changeEvent
+240 (int (*)(...))QGraphicsWidget::closeEvent
+248 (int (*)(...))QGraphicsWidget::focusInEvent
+256 (int (*)(...))QGraphicsWidget::focusNextPrevChild
+264 (int (*)(...))QGraphicsWidget::focusOutEvent
+272 (int (*)(...))QGraphicsWidget::hideEvent
+280 (int (*)(...))QGraphicsWidget::moveEvent
+288 (int (*)(...))QGraphicsWidget::polishEvent
+296 (int (*)(...))QGraphicsWidget::resizeEvent
+304 (int (*)(...))QGraphicsWidget::showEvent
+312 (int (*)(...))QGraphicsWidget::hoverMoveEvent
+320 (int (*)(...))QGraphicsWidget::hoverLeaveEvent
+328 (int (*)(...))QGraphicsWidget::grabMouseEvent
+336 (int (*)(...))QGraphicsWidget::ungrabMouseEvent
+344 (int (*)(...))QGraphicsWidget::grabKeyboardEvent
+352 (int (*)(...))QGraphicsWidget::ungrabKeyboardEvent
+360 (int (*)(...))-16
+368 (int (*)(...))(& _ZTI15QGraphicsWidget)
+376 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidgetD1Ev
+384 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidgetD0Ev
+392 (int (*)(...))QGraphicsItem::advance
+400 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget12boundingRectEv
+408 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget5shapeEv
+416 (int (*)(...))QGraphicsItem::contains
+424 (int (*)(...))QGraphicsItem::collidesWithItem
+432 (int (*)(...))QGraphicsItem::collidesWithPath
+440 (int (*)(...))QGraphicsItem::isObscuredBy
+448 (int (*)(...))QGraphicsItem::opaqueArea
+456 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+464 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget4typeEv
+472 (int (*)(...))QGraphicsItem::sceneEventFilter
+480 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10sceneEventEP6QEvent
+488 (int (*)(...))QGraphicsItem::contextMenuEvent
+496 (int (*)(...))QGraphicsItem::dragEnterEvent
+504 (int (*)(...))QGraphicsItem::dragLeaveEvent
+512 (int (*)(...))QGraphicsItem::dragMoveEvent
+520 (int (*)(...))QGraphicsItem::dropEvent
+528 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget12focusInEventEP11QFocusEvent
+536 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget13focusOutEventEP11QFocusEvent
+544 (int (*)(...))QGraphicsItem::hoverEnterEvent
+552 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget14hoverMoveEventEP24QGraphicsSceneHoverEvent
+560 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+568 (int (*)(...))QGraphicsItem::keyPressEvent
+576 (int (*)(...))QGraphicsItem::keyReleaseEvent
+584 (int (*)(...))QGraphicsItem::mousePressEvent
+592 (int (*)(...))QGraphicsItem::mouseMoveEvent
+600 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+608 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+616 (int (*)(...))QGraphicsItem::wheelEvent
+624 (int (*)(...))QGraphicsItem::inputMethodEvent
+632 (int (*)(...))QGraphicsItem::inputMethodQuery
+640 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant
+648 (int (*)(...))QGraphicsItem::supportsExtension
+656 (int (*)(...))QGraphicsItem::setExtension
+664 (int (*)(...))QGraphicsItem::extension
+672 (int (*)(...))-32
+680 (int (*)(...))(& _ZTI15QGraphicsWidget)
+688 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidgetD1Ev
+696 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidgetD0Ev
+704 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget11setGeometryERK6QRectF
+712 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget18getContentsMarginsEPdS0_S0_S0_
+720 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget14updateGeometryEv
+728 (int (*)(...))QGraphicsLayoutItem::isEmpty
+736 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget8sizeHintEN2Qt8SizeHintERK6QSizeF
+
+Class QGraphicsWidget
+ size=48 align=8
+ base size=48 base align=8
+QGraphicsWidget (0x0x7f0b1eb25380) 0
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 16)
+ QGraphicsObject (0x0x7f0b1eb253f0) 0
+ primary-for QGraphicsWidget (0x0x7f0b1eb25380)
+ QObject (0x0x7f0b1eb8f600) 0
+ primary-for QGraphicsObject (0x0x7f0b1eb253f0)
+ QGraphicsItem (0x0x7f0b1eb8f660) 16
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 376)
+ QGraphicsLayoutItem (0x0x7f0b1eb8f6c0) 32
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 688)
+
+Class QGraphicsProxyWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsProxyWidget::QPrivateSignal (0x0x7f0b1eb8fba0) 0 empty
+
+Vtable for QGraphicsProxyWidget
+QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+16 (int (*)(...))QGraphicsProxyWidget::metaObject
+24 (int (*)(...))QGraphicsProxyWidget::qt_metacast
+32 (int (*)(...))QGraphicsProxyWidget::qt_metacall
+40 (int (*)(...))QGraphicsProxyWidget::~QGraphicsProxyWidget
+48 (int (*)(...))QGraphicsProxyWidget::~QGraphicsProxyWidget
+56 (int (*)(...))QGraphicsProxyWidget::event
+64 (int (*)(...))QGraphicsProxyWidget::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsProxyWidget::setGeometry
+120 (int (*)(...))QGraphicsWidget::getContentsMargins
+128 (int (*)(...))QGraphicsProxyWidget::type
+136 (int (*)(...))QGraphicsProxyWidget::paint
+144 (int (*)(...))QGraphicsWidget::paintWindowFrame
+152 (int (*)(...))QGraphicsWidget::boundingRect
+160 (int (*)(...))QGraphicsWidget::shape
+168 (int (*)(...))QGraphicsWidget::initStyleOption
+176 (int (*)(...))QGraphicsProxyWidget::sizeHint
+184 (int (*)(...))QGraphicsWidget::updateGeometry
+192 (int (*)(...))QGraphicsProxyWidget::itemChange
+200 (int (*)(...))QGraphicsWidget::propertyChange
+208 (int (*)(...))QGraphicsWidget::sceneEvent
+216 (int (*)(...))QGraphicsWidget::windowFrameEvent
+224 (int (*)(...))QGraphicsWidget::windowFrameSectionAt
+232 (int (*)(...))QGraphicsWidget::changeEvent
+240 (int (*)(...))QGraphicsWidget::closeEvent
+248 (int (*)(...))QGraphicsProxyWidget::focusInEvent
+256 (int (*)(...))QGraphicsProxyWidget::focusNextPrevChild
+264 (int (*)(...))QGraphicsProxyWidget::focusOutEvent
+272 (int (*)(...))QGraphicsProxyWidget::hideEvent
+280 (int (*)(...))QGraphicsWidget::moveEvent
+288 (int (*)(...))QGraphicsWidget::polishEvent
+296 (int (*)(...))QGraphicsProxyWidget::resizeEvent
+304 (int (*)(...))QGraphicsProxyWidget::showEvent
+312 (int (*)(...))QGraphicsProxyWidget::hoverMoveEvent
+320 (int (*)(...))QGraphicsProxyWidget::hoverLeaveEvent
+328 (int (*)(...))QGraphicsProxyWidget::grabMouseEvent
+336 (int (*)(...))QGraphicsProxyWidget::ungrabMouseEvent
+344 (int (*)(...))QGraphicsWidget::grabKeyboardEvent
+352 (int (*)(...))QGraphicsWidget::ungrabKeyboardEvent
+360 (int (*)(...))QGraphicsProxyWidget::contextMenuEvent
+368 (int (*)(...))QGraphicsProxyWidget::dragEnterEvent
+376 (int (*)(...))QGraphicsProxyWidget::dragLeaveEvent
+384 (int (*)(...))QGraphicsProxyWidget::dragMoveEvent
+392 (int (*)(...))QGraphicsProxyWidget::dropEvent
+400 (int (*)(...))QGraphicsProxyWidget::hoverEnterEvent
+408 (int (*)(...))QGraphicsProxyWidget::mouseMoveEvent
+416 (int (*)(...))QGraphicsProxyWidget::mousePressEvent
+424 (int (*)(...))QGraphicsProxyWidget::mouseReleaseEvent
+432 (int (*)(...))QGraphicsProxyWidget::mouseDoubleClickEvent
+440 (int (*)(...))QGraphicsProxyWidget::wheelEvent
+448 (int (*)(...))QGraphicsProxyWidget::keyPressEvent
+456 (int (*)(...))QGraphicsProxyWidget::keyReleaseEvent
+464 (int (*)(...))QGraphicsProxyWidget::inputMethodQuery
+472 (int (*)(...))QGraphicsProxyWidget::inputMethodEvent
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+496 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidgetD1Ev
+504 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidgetD0Ev
+512 (int (*)(...))QGraphicsItem::advance
+520 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget12boundingRectEv
+528 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget5shapeEv
+536 (int (*)(...))QGraphicsItem::contains
+544 (int (*)(...))QGraphicsItem::collidesWithItem
+552 (int (*)(...))QGraphicsItem::collidesWithPath
+560 (int (*)(...))QGraphicsItem::isObscuredBy
+568 (int (*)(...))QGraphicsItem::opaqueArea
+576 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+584 (int (*)(...))QGraphicsProxyWidget::_ZThn16_NK20QGraphicsProxyWidget4typeEv
+592 (int (*)(...))QGraphicsItem::sceneEventFilter
+600 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10sceneEventEP6QEvent
+608 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget16contextMenuEventEP30QGraphicsSceneContextMenuEvent
+616 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14dragEnterEventEP27QGraphicsSceneDragDropEvent
+624 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14dragLeaveEventEP27QGraphicsSceneDragDropEvent
+632 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13dragMoveEventEP27QGraphicsSceneDragDropEvent
+640 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget9dropEventEP27QGraphicsSceneDragDropEvent
+648 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget12focusInEventEP11QFocusEvent
+656 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13focusOutEventEP11QFocusEvent
+664 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15hoverEnterEventEP24QGraphicsSceneHoverEvent
+672 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14hoverMoveEventEP24QGraphicsSceneHoverEvent
+680 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+688 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13keyPressEventEP9QKeyEvent
+696 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15keyReleaseEventEP9QKeyEvent
+704 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15mousePressEventEP24QGraphicsSceneMouseEvent
+712 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14mouseMoveEventEP24QGraphicsSceneMouseEvent
+720 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget17mouseReleaseEventEP24QGraphicsSceneMouseEvent
+728 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent
+736 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget10wheelEventEP24QGraphicsSceneWheelEvent
+744 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget16inputMethodEventEP17QInputMethodEvent
+752 (int (*)(...))QGraphicsProxyWidget::_ZThn16_NK20QGraphicsProxyWidget16inputMethodQueryEN2Qt16InputMethodQueryE
+760 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant
+768 (int (*)(...))QGraphicsItem::supportsExtension
+776 (int (*)(...))QGraphicsItem::setExtension
+784 (int (*)(...))QGraphicsItem::extension
+792 (int (*)(...))-32
+800 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+808 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidgetD1Ev
+816 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidgetD0Ev
+824 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidget11setGeometryERK6QRectF
+832 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget18getContentsMarginsEPdS0_S0_S0_
+840 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget14updateGeometryEv
+848 (int (*)(...))QGraphicsLayoutItem::isEmpty
+856 (int (*)(...))QGraphicsProxyWidget::_ZThn32_NK20QGraphicsProxyWidget8sizeHintEN2Qt8SizeHintERK6QSizeF
+
+Class QGraphicsProxyWidget
+ size=48 align=8
+ base size=48 base align=8
+QGraphicsProxyWidget (0x0x7f0b1eb993a8) 0
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 16)
+ QGraphicsWidget (0x0x7f0b1eb25540) 0
+ primary-for QGraphicsProxyWidget (0x0x7f0b1eb993a8)
+ QGraphicsObject (0x0x7f0b1eb255b0) 0
+ primary-for QGraphicsWidget (0x0x7f0b1eb25540)
+ QObject (0x0x7f0b1eb8fa80) 0
+ primary-for QGraphicsObject (0x0x7f0b1eb255b0)
+ QGraphicsItem (0x0x7f0b1eb8fae0) 16
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 496)
+ QGraphicsLayoutItem (0x0x7f0b1eb8fb40) 32
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 808)
+
+Class QGraphicsScene::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScene::QPrivateSignal (0x0x7f0b1eb8ff00) 0 empty
+
+Vtable for QGraphicsScene
+QGraphicsScene::_ZTV14QGraphicsScene: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGraphicsScene)
+16 (int (*)(...))QGraphicsScene::metaObject
+24 (int (*)(...))QGraphicsScene::qt_metacast
+32 (int (*)(...))QGraphicsScene::qt_metacall
+40 (int (*)(...))QGraphicsScene::~QGraphicsScene
+48 (int (*)(...))QGraphicsScene::~QGraphicsScene
+56 (int (*)(...))QGraphicsScene::event
+64 (int (*)(...))QGraphicsScene::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsScene::inputMethodQuery
+120 (int (*)(...))QGraphicsScene::contextMenuEvent
+128 (int (*)(...))QGraphicsScene::dragEnterEvent
+136 (int (*)(...))QGraphicsScene::dragMoveEvent
+144 (int (*)(...))QGraphicsScene::dragLeaveEvent
+152 (int (*)(...))QGraphicsScene::dropEvent
+160 (int (*)(...))QGraphicsScene::focusInEvent
+168 (int (*)(...))QGraphicsScene::focusOutEvent
+176 (int (*)(...))QGraphicsScene::helpEvent
+184 (int (*)(...))QGraphicsScene::keyPressEvent
+192 (int (*)(...))QGraphicsScene::keyReleaseEvent
+200 (int (*)(...))QGraphicsScene::mousePressEvent
+208 (int (*)(...))QGraphicsScene::mouseMoveEvent
+216 (int (*)(...))QGraphicsScene::mouseReleaseEvent
+224 (int (*)(...))QGraphicsScene::mouseDoubleClickEvent
+232 (int (*)(...))QGraphicsScene::wheelEvent
+240 (int (*)(...))QGraphicsScene::inputMethodEvent
+248 (int (*)(...))QGraphicsScene::drawBackground
+256 (int (*)(...))QGraphicsScene::drawForeground
+264 (int (*)(...))QGraphicsScene::drawItems
+272 (int (*)(...))QGraphicsScene::focusNextPrevChild
+
+Class QGraphicsScene
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsScene (0x0x7f0b1eb995b0) 0
+ vptr=((& QGraphicsScene::_ZTV14QGraphicsScene) + 16)
+ QObject (0x0x7f0b1eb8fea0) 0
+ primary-for QGraphicsScene (0x0x7f0b1eb995b0)
+
+Vtable for QGraphicsSceneEvent
+QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsSceneEvent)
+16 (int (*)(...))QGraphicsSceneEvent::~QGraphicsSceneEvent
+24 (int (*)(...))QGraphicsSceneEvent::~QGraphicsSceneEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneEvent (0x0x7f0b1eb99f70) 0
+ vptr=((& QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent) + 16)
+ QEvent (0x0x7f0b1ec77240) 0
+ primary-for QGraphicsSceneEvent (0x0x7f0b1eb99f70)
+
+Vtable for QGraphicsSceneMouseEvent
+QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneMouseEvent)
+16 (int (*)(...))QGraphicsSceneMouseEvent::~QGraphicsSceneMouseEvent
+24 (int (*)(...))QGraphicsSceneMouseEvent::~QGraphicsSceneMouseEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneMouseEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneMouseEvent (0x0x7f0b1ec93000) 0
+ vptr=((& QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f0b1ec93068) 0
+ primary-for QGraphicsSceneMouseEvent (0x0x7f0b1ec93000)
+ QEvent (0x0x7f0b1ec77420) 0
+ primary-for QGraphicsSceneEvent (0x0x7f0b1ec93068)
+
+Vtable for QGraphicsSceneWheelEvent
+QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneWheelEvent)
+16 (int (*)(...))QGraphicsSceneWheelEvent::~QGraphicsSceneWheelEvent
+24 (int (*)(...))QGraphicsSceneWheelEvent::~QGraphicsSceneWheelEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneWheelEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneWheelEvent (0x0x7f0b1ec930d0) 0
+ vptr=((& QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f0b1ec93138) 0
+ primary-for QGraphicsSceneWheelEvent (0x0x7f0b1ec930d0)
+ QEvent (0x0x7f0b1ec77540) 0
+ primary-for QGraphicsSceneEvent (0x0x7f0b1ec93138)
+
+Vtable for QGraphicsSceneContextMenuEvent
+QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI30QGraphicsSceneContextMenuEvent)
+16 (int (*)(...))QGraphicsSceneContextMenuEvent::~QGraphicsSceneContextMenuEvent
+24 (int (*)(...))QGraphicsSceneContextMenuEvent::~QGraphicsSceneContextMenuEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneContextMenuEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneContextMenuEvent (0x0x7f0b1ec931a0) 0
+ vptr=((& QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f0b1ec93208) 0
+ primary-for QGraphicsSceneContextMenuEvent (0x0x7f0b1ec931a0)
+ QEvent (0x0x7f0b1ec77660) 0
+ primary-for QGraphicsSceneEvent (0x0x7f0b1ec93208)
+
+Vtable for QGraphicsSceneHoverEvent
+QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneHoverEvent)
+16 (int (*)(...))QGraphicsSceneHoverEvent::~QGraphicsSceneHoverEvent
+24 (int (*)(...))QGraphicsSceneHoverEvent::~QGraphicsSceneHoverEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneHoverEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneHoverEvent (0x0x7f0b1ec93270) 0
+ vptr=((& QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f0b1ec932d8) 0
+ primary-for QGraphicsSceneHoverEvent (0x0x7f0b1ec93270)
+ QEvent (0x0x7f0b1ec77780) 0
+ primary-for QGraphicsSceneEvent (0x0x7f0b1ec932d8)
+
+Vtable for QGraphicsSceneHelpEvent
+QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSceneHelpEvent)
+16 (int (*)(...))QGraphicsSceneHelpEvent::~QGraphicsSceneHelpEvent
+24 (int (*)(...))QGraphicsSceneHelpEvent::~QGraphicsSceneHelpEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneHelpEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneHelpEvent (0x0x7f0b1ec93340) 0
+ vptr=((& QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f0b1ec933a8) 0
+ primary-for QGraphicsSceneHelpEvent (0x0x7f0b1ec93340)
+ QEvent (0x0x7f0b1ec778a0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f0b1ec933a8)
+
+Vtable for QGraphicsSceneDragDropEvent
+QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QGraphicsSceneDragDropEvent)
+16 (int (*)(...))QGraphicsSceneDragDropEvent::~QGraphicsSceneDragDropEvent
+24 (int (*)(...))QGraphicsSceneDragDropEvent::~QGraphicsSceneDragDropEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneDragDropEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneDragDropEvent (0x0x7f0b1ec93410) 0
+ vptr=((& QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f0b1ec93478) 0
+ primary-for QGraphicsSceneDragDropEvent (0x0x7f0b1ec93410)
+ QEvent (0x0x7f0b1ec779c0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f0b1ec93478)
+
+Vtable for QGraphicsSceneResizeEvent
+QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QGraphicsSceneResizeEvent)
+16 (int (*)(...))QGraphicsSceneResizeEvent::~QGraphicsSceneResizeEvent
+24 (int (*)(...))QGraphicsSceneResizeEvent::~QGraphicsSceneResizeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneResizeEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneResizeEvent (0x0x7f0b1ec934e0) 0
+ vptr=((& QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f0b1ec93548) 0
+ primary-for QGraphicsSceneResizeEvent (0x0x7f0b1ec934e0)
+ QEvent (0x0x7f0b1ec77ae0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f0b1ec93548)
+
+Vtable for QGraphicsSceneMoveEvent
+QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSceneMoveEvent)
+16 (int (*)(...))QGraphicsSceneMoveEvent::~QGraphicsSceneMoveEvent
+24 (int (*)(...))QGraphicsSceneMoveEvent::~QGraphicsSceneMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneMoveEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneMoveEvent (0x0x7f0b1ec935b0) 0
+ vptr=((& QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f0b1ec93618) 0
+ primary-for QGraphicsSceneMoveEvent (0x0x7f0b1ec935b0)
+ QEvent (0x0x7f0b1ec77c00) 0
+ primary-for QGraphicsSceneEvent (0x0x7f0b1ec93618)
+
+Class QGraphicsTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTransform::QPrivateSignal (0x0x7f0b1ec77d80) 0 empty
+
+Vtable for QGraphicsTransform
+QGraphicsTransform::_ZTV18QGraphicsTransform: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGraphicsTransform)
+16 (int (*)(...))QGraphicsTransform::metaObject
+24 (int (*)(...))QGraphicsTransform::qt_metacast
+32 (int (*)(...))QGraphicsTransform::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsTransform
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsTransform (0x0x7f0b1ec93680) 0
+ vptr=((& QGraphicsTransform::_ZTV18QGraphicsTransform) + 16)
+ QObject (0x0x7f0b1ec77d20) 0
+ primary-for QGraphicsTransform (0x0x7f0b1ec93680)
+
+Class QGraphicsScale::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScale::QPrivateSignal (0x0x7f0b1ec77f60) 0 empty
+
+Vtable for QGraphicsScale
+QGraphicsScale::_ZTV14QGraphicsScale: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGraphicsScale)
+16 (int (*)(...))QGraphicsScale::metaObject
+24 (int (*)(...))QGraphicsScale::qt_metacast
+32 (int (*)(...))QGraphicsScale::qt_metacall
+40 (int (*)(...))QGraphicsScale::~QGraphicsScale
+48 (int (*)(...))QGraphicsScale::~QGraphicsScale
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsScale::applyTo
+
+Class QGraphicsScale
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsScale (0x0x7f0b1ec936e8) 0
+ vptr=((& QGraphicsScale::_ZTV14QGraphicsScale) + 16)
+ QGraphicsTransform (0x0x7f0b1ec93750) 0
+ primary-for QGraphicsScale (0x0x7f0b1ec936e8)
+ QObject (0x0x7f0b1ec77f00) 0
+ primary-for QGraphicsTransform (0x0x7f0b1ec93750)
+
+Class QGraphicsRotation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsRotation::QPrivateSignal (0x0x7f0b1e8de180) 0 empty
+
+Vtable for QGraphicsRotation
+QGraphicsRotation::_ZTV17QGraphicsRotation: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsRotation)
+16 (int (*)(...))QGraphicsRotation::metaObject
+24 (int (*)(...))QGraphicsRotation::qt_metacast
+32 (int (*)(...))QGraphicsRotation::qt_metacall
+40 (int (*)(...))QGraphicsRotation::~QGraphicsRotation
+48 (int (*)(...))QGraphicsRotation::~QGraphicsRotation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsRotation::applyTo
+
+Class QGraphicsRotation
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsRotation (0x0x7f0b1ec937b8) 0
+ vptr=((& QGraphicsRotation::_ZTV17QGraphicsRotation) + 16)
+ QGraphicsTransform (0x0x7f0b1ec93820) 0
+ primary-for QGraphicsRotation (0x0x7f0b1ec937b8)
+ QObject (0x0x7f0b1e8de120) 0
+ primary-for QGraphicsTransform (0x0x7f0b1ec93820)
+
+Class QScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollArea::QPrivateSignal (0x0x7f0b1e8de3c0) 0 empty
+
+Vtable for QScrollArea
+QScrollArea::_ZTV11QScrollArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QScrollArea)
+16 (int (*)(...))QScrollArea::metaObject
+24 (int (*)(...))QScrollArea::qt_metacast
+32 (int (*)(...))QScrollArea::qt_metacall
+40 (int (*)(...))QScrollArea::~QScrollArea
+48 (int (*)(...))QScrollArea::~QScrollArea
+56 (int (*)(...))QScrollArea::event
+64 (int (*)(...))QScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QScrollArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QScrollArea::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QScrollArea::scrollContentsBy
+464 (int (*)(...))QScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QScrollArea)
+488 (int (*)(...))QScrollArea::_ZThn16_N11QScrollAreaD1Ev
+496 (int (*)(...))QScrollArea::_ZThn16_N11QScrollAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QScrollArea
+ size=40 align=8
+ base size=40 base align=8
+QScrollArea (0x0x7f0b1ec93888) 0
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 16)
+ QAbstractScrollArea (0x0x7f0b1ec938f0) 0
+ primary-for QScrollArea (0x0x7f0b1ec93888)
+ QFrame (0x0x7f0b1ec93958) 0
+ primary-for QAbstractScrollArea (0x0x7f0b1ec938f0)
+ QWidget (0x0x7f0b1eb25e00) 0
+ primary-for QFrame (0x0x7f0b1ec93958)
+ QObject (0x0x7f0b1e8de300) 0
+ primary-for QWidget (0x0x7f0b1eb25e00)
+ QPaintDevice (0x0x7f0b1e8de360) 16
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 488)
+
+Class QGraphicsView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsView::QPrivateSignal (0x0x7f0b1e8de600) 0 empty
+
+Vtable for QGraphicsView
+QGraphicsView::_ZTV13QGraphicsView: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGraphicsView)
+16 (int (*)(...))QGraphicsView::metaObject
+24 (int (*)(...))QGraphicsView::qt_metacast
+32 (int (*)(...))QGraphicsView::qt_metacall
+40 (int (*)(...))QGraphicsView::~QGraphicsView
+48 (int (*)(...))QGraphicsView::~QGraphicsView
+56 (int (*)(...))QGraphicsView::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QGraphicsView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QGraphicsView::mousePressEvent
+176 (int (*)(...))QGraphicsView::mouseReleaseEvent
+184 (int (*)(...))QGraphicsView::mouseDoubleClickEvent
+192 (int (*)(...))QGraphicsView::mouseMoveEvent
+200 (int (*)(...))QGraphicsView::wheelEvent
+208 (int (*)(...))QGraphicsView::keyPressEvent
+216 (int (*)(...))QGraphicsView::keyReleaseEvent
+224 (int (*)(...))QGraphicsView::focusInEvent
+232 (int (*)(...))QGraphicsView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QGraphicsView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QGraphicsView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QGraphicsView::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QGraphicsView::dragEnterEvent
+320 (int (*)(...))QGraphicsView::dragMoveEvent
+328 (int (*)(...))QGraphicsView::dragLeaveEvent
+336 (int (*)(...))QGraphicsView::dropEvent
+344 (int (*)(...))QGraphicsView::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QGraphicsView::inputMethodEvent
+416 (int (*)(...))QGraphicsView::inputMethodQuery
+424 (int (*)(...))QGraphicsView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QGraphicsView::setupViewport
+448 (int (*)(...))QGraphicsView::viewportEvent
+456 (int (*)(...))QGraphicsView::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QGraphicsView::drawBackground
+480 (int (*)(...))QGraphicsView::drawForeground
+488 (int (*)(...))QGraphicsView::drawItems
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI13QGraphicsView)
+512 (int (*)(...))QGraphicsView::_ZThn16_N13QGraphicsViewD1Ev
+520 (int (*)(...))QGraphicsView::_ZThn16_N13QGraphicsViewD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QGraphicsView
+ size=40 align=8
+ base size=40 base align=8
+QGraphicsView (0x0x7f0b1ec939c0) 0
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 16)
+ QAbstractScrollArea (0x0x7f0b1ec93a28) 0
+ primary-for QGraphicsView (0x0x7f0b1ec939c0)
+ QFrame (0x0x7f0b1ec93a90) 0
+ primary-for QAbstractScrollArea (0x0x7f0b1ec93a28)
+ QWidget (0x0x7f0b1eb25e70) 0
+ primary-for QFrame (0x0x7f0b1ec93a90)
+ QObject (0x0x7f0b1e8de540) 0
+ primary-for QWidget (0x0x7f0b1eb25e70)
+ QPaintDevice (0x0x7f0b1e8de5a0) 16
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 512)
+
+Class QGroupBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGroupBox::QPrivateSignal (0x0x7f0b1e95b4e0) 0 empty
+
+Vtable for QGroupBox
+QGroupBox::_ZTV9QGroupBox: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QGroupBox)
+16 (int (*)(...))QGroupBox::metaObject
+24 (int (*)(...))QGroupBox::qt_metacast
+32 (int (*)(...))QGroupBox::qt_metacall
+40 (int (*)(...))QGroupBox::~QGroupBox
+48 (int (*)(...))QGroupBox::~QGroupBox
+56 (int (*)(...))QGroupBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QGroupBox::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QGroupBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QGroupBox::mousePressEvent
+176 (int (*)(...))QGroupBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QGroupBox::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QGroupBox::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QGroupBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QGroupBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QGroupBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QGroupBox::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI9QGroupBox)
+456 (int (*)(...))QGroupBox::_ZThn16_N9QGroupBoxD1Ev
+464 (int (*)(...))QGroupBox::_ZThn16_N9QGroupBoxD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QGroupBox
+ size=40 align=8
+ base size=40 base align=8
+QGroupBox (0x0x7f0b1ec93d68) 0
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 16)
+ QWidget (0x0x7f0b1e8f8620) 0
+ primary-for QGroupBox (0x0x7f0b1ec93d68)
+ QObject (0x0x7f0b1e95b420) 0
+ primary-for QWidget (0x0x7f0b1e8f8620)
+ QPaintDevice (0x0x7f0b1e95b480) 16
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 456)
+
+Class QHeaderView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHeaderView::QPrivateSignal (0x0x7f0b1e95b720) 0 empty
+
+Vtable for QHeaderView
+QHeaderView::_ZTV11QHeaderView: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHeaderView)
+16 (int (*)(...))QHeaderView::metaObject
+24 (int (*)(...))QHeaderView::qt_metacast
+32 (int (*)(...))QHeaderView::qt_metacall
+40 (int (*)(...))QHeaderView::~QHeaderView
+48 (int (*)(...))QHeaderView::~QHeaderView
+56 (int (*)(...))QHeaderView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QHeaderView::setVisible
+128 (int (*)(...))QHeaderView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QHeaderView::mousePressEvent
+176 (int (*)(...))QHeaderView::mouseReleaseEvent
+184 (int (*)(...))QHeaderView::mouseDoubleClickEvent
+192 (int (*)(...))QHeaderView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QHeaderView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QHeaderView::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QHeaderView::viewportEvent
+456 (int (*)(...))QHeaderView::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QHeaderView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QHeaderView::visualRect
+504 (int (*)(...))QHeaderView::scrollTo
+512 (int (*)(...))QHeaderView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QHeaderView::reset
+552 (int (*)(...))QAbstractItemView::setRootIndex
+560 (int (*)(...))QHeaderView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QHeaderView::dataChanged
+584 (int (*)(...))QHeaderView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QHeaderView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QHeaderView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QHeaderView::moveCursor
+704 (int (*)(...))QHeaderView::horizontalOffset
+712 (int (*)(...))QHeaderView::verticalOffset
+720 (int (*)(...))QHeaderView::isIndexHidden
+728 (int (*)(...))QHeaderView::setSelection
+736 (int (*)(...))QHeaderView::visualRegionForSelection
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QHeaderView::paintSection
+792 (int (*)(...))QHeaderView::sectionSizeFromContents
+800 (int (*)(...))QHeaderView::initStyleOptionForIndex
+808 (int (*)(...))QHeaderView::initStyleOption
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI11QHeaderView)
+832 (int (*)(...))QHeaderView::_ZThn16_N11QHeaderViewD1Ev
+840 (int (*)(...))QHeaderView::_ZThn16_N11QHeaderViewD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHeaderView
+ size=40 align=8
+ base size=40 base align=8
+QHeaderView (0x0x7f0b1ec93dd0) 0
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 16)
+ QAbstractItemView (0x0x7f0b1ec93e38) 0
+ primary-for QHeaderView (0x0x7f0b1ec93dd0)
+ QAbstractScrollArea (0x0x7f0b1ec93ea0) 0
+ primary-for QAbstractItemView (0x0x7f0b1ec93e38)
+ QFrame (0x0x7f0b1ec93f08) 0
+ primary-for QAbstractScrollArea (0x0x7f0b1ec93ea0)
+ QWidget (0x0x7f0b1e8f8690) 0
+ primary-for QFrame (0x0x7f0b1ec93f08)
+ QObject (0x0x7f0b1e95b660) 0
+ primary-for QWidget (0x0x7f0b1e8f8690)
+ QPaintDevice (0x0x7f0b1e95b6c0) 16
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 832)
+
+Class QLineEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLineEdit::QPrivateSignal (0x0x7f0b1e95bba0) 0 empty
+
+Vtable for QLineEdit
+QLineEdit::_ZTV9QLineEdit: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QLineEdit)
+16 (int (*)(...))QLineEdit::metaObject
+24 (int (*)(...))QLineEdit::qt_metacast
+32 (int (*)(...))QLineEdit::qt_metacall
+40 (int (*)(...))QLineEdit::~QLineEdit
+48 (int (*)(...))QLineEdit::~QLineEdit
+56 (int (*)(...))QLineEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QLineEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLineEdit::sizeHint
+136 (int (*)(...))QLineEdit::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QLineEdit::mousePressEvent
+176 (int (*)(...))QLineEdit::mouseReleaseEvent
+184 (int (*)(...))QLineEdit::mouseDoubleClickEvent
+192 (int (*)(...))QLineEdit::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QLineEdit::keyPressEvent
+216 (int (*)(...))QLineEdit::keyReleaseEvent
+224 (int (*)(...))QLineEdit::focusInEvent
+232 (int (*)(...))QLineEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLineEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QLineEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QLineEdit::dragEnterEvent
+320 (int (*)(...))QLineEdit::dragMoveEvent
+328 (int (*)(...))QLineEdit::dragLeaveEvent
+336 (int (*)(...))QLineEdit::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QLineEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QLineEdit::inputMethodEvent
+416 (int (*)(...))QLineEdit::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QLineEdit::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI9QLineEdit)
+456 (int (*)(...))QLineEdit::_ZThn16_N9QLineEditD1Ev
+464 (int (*)(...))QLineEdit::_ZThn16_N9QLineEditD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLineEdit
+ size=40 align=8
+ base size=40 base align=8
+QLineEdit (0x0x7f0b1ec93f70) 0
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 16)
+ QWidget (0x0x7f0b1e8f8930) 0
+ primary-for QLineEdit (0x0x7f0b1ec93f70)
+ QObject (0x0x7f0b1e95bae0) 0
+ primary-for QWidget (0x0x7f0b1e8f8930)
+ QPaintDevice (0x0x7f0b1e95bb40) 16
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 456)
+
+Class QInputDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDialog::QPrivateSignal (0x0x7f0b1e95bf60) 0 empty
+
+Vtable for QInputDialog
+QInputDialog::_ZTV12QInputDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputDialog)
+16 (int (*)(...))QInputDialog::metaObject
+24 (int (*)(...))QInputDialog::qt_metacast
+32 (int (*)(...))QInputDialog::qt_metacall
+40 (int (*)(...))QInputDialog::~QInputDialog
+48 (int (*)(...))QInputDialog::~QInputDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QInputDialog::setVisible
+128 (int (*)(...))QInputDialog::sizeHint
+136 (int (*)(...))QInputDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QInputDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QInputDialog)
+488 (int (*)(...))QInputDialog::_ZThn16_N12QInputDialogD1Ev
+496 (int (*)(...))QInputDialog::_ZThn16_N12QInputDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QInputDialog
+ size=40 align=8
+ base size=40 base align=8
+QInputDialog (0x0x7f0b1e9b4000) 0
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 16)
+ QDialog (0x0x7f0b1e9b4068) 0
+ primary-for QInputDialog (0x0x7f0b1e9b4000)
+ QWidget (0x0x7f0b1e8f8c40) 0
+ primary-for QDialog (0x0x7f0b1e9b4068)
+ QObject (0x0x7f0b1e95bea0) 0
+ primary-for QWidget (0x0x7f0b1e8f8c40)
+ QPaintDevice (0x0x7f0b1e95bf00) 16
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 488)
+
+Class QItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemDelegate::QPrivateSignal (0x0x7f0b1e9cb480) 0 empty
+
+Vtable for QItemDelegate
+QItemDelegate::_ZTV13QItemDelegate: 28 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QItemDelegate)
+16 (int (*)(...))QItemDelegate::metaObject
+24 (int (*)(...))QItemDelegate::qt_metacast
+32 (int (*)(...))QItemDelegate::qt_metacall
+40 (int (*)(...))QItemDelegate::~QItemDelegate
+48 (int (*)(...))QItemDelegate::~QItemDelegate
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QItemDelegate::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QItemDelegate::paint
+120 (int (*)(...))QItemDelegate::sizeHint
+128 (int (*)(...))QItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QItemDelegate::setEditorData
+152 (int (*)(...))QItemDelegate::setModelData
+160 (int (*)(...))QItemDelegate::updateEditorGeometry
+168 (int (*)(...))QItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+192 (int (*)(...))QItemDelegate::drawDisplay
+200 (int (*)(...))QItemDelegate::drawDecoration
+208 (int (*)(...))QItemDelegate::drawFocus
+216 (int (*)(...))QItemDelegate::drawCheck
+
+Class QItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QItemDelegate (0x0x7f0b1e9b4208) 0
+ vptr=((& QItemDelegate::_ZTV13QItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7f0b1e9b4270) 0
+ primary-for QItemDelegate (0x0x7f0b1e9b4208)
+ QObject (0x0x7f0b1e9cb420) 0
+ primary-for QAbstractItemDelegate (0x0x7f0b1e9b4270)
+
+Vtable for QItemEditorCreatorBase
+QItemEditorCreatorBase::_ZTV22QItemEditorCreatorBase: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QItemEditorCreatorBase)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QItemEditorCreatorBase
+ size=8 align=8
+ base size=8 base align=8
+QItemEditorCreatorBase (0x0x7f0b1e9cb600) 0 nearly-empty
+ vptr=((& QItemEditorCreatorBase::_ZTV22QItemEditorCreatorBase) + 16)
+
+Vtable for QItemEditorFactory
+QItemEditorFactory::_ZTV18QItemEditorFactory: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QItemEditorFactory)
+16 (int (*)(...))QItemEditorFactory::~QItemEditorFactory
+24 (int (*)(...))QItemEditorFactory::~QItemEditorFactory
+32 (int (*)(...))QItemEditorFactory::createEditor
+40 (int (*)(...))QItemEditorFactory::valuePropertyName
+
+Class QItemEditorFactory
+ size=16 align=8
+ base size=16 base align=8
+QItemEditorFactory (0x0x7f0b1e9cb960) 0
+ vptr=((& QItemEditorFactory::_ZTV18QItemEditorFactory) + 16)
+
+Class QKeySequenceEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QKeySequenceEdit::QPrivateSignal (0x0x7f0b1e9cbe40) 0 empty
+
+Vtable for QKeySequenceEdit
+QKeySequenceEdit::_ZTV16QKeySequenceEdit: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QKeySequenceEdit)
+16 (int (*)(...))QKeySequenceEdit::metaObject
+24 (int (*)(...))QKeySequenceEdit::qt_metacast
+32 (int (*)(...))QKeySequenceEdit::qt_metacall
+40 (int (*)(...))QKeySequenceEdit::~QKeySequenceEdit
+48 (int (*)(...))QKeySequenceEdit::~QKeySequenceEdit
+56 (int (*)(...))QKeySequenceEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QKeySequenceEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QKeySequenceEdit::keyPressEvent
+216 (int (*)(...))QKeySequenceEdit::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI16QKeySequenceEdit)
+448 (int (*)(...))QKeySequenceEdit::_ZThn16_N16QKeySequenceEditD1Ev
+456 (int (*)(...))QKeySequenceEdit::_ZThn16_N16QKeySequenceEditD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QKeySequenceEdit
+ size=40 align=8
+ base size=40 base align=8
+QKeySequenceEdit (0x0x7f0b1e9b43a8) 0
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 16)
+ QWidget (0x0x7f0b1e8f8f50) 0
+ primary-for QKeySequenceEdit (0x0x7f0b1e9b43a8)
+ QObject (0x0x7f0b1e9cbd80) 0
+ primary-for QWidget (0x0x7f0b1e8f8f50)
+ QPaintDevice (0x0x7f0b1e9cbde0) 16
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 448)
+
+Class QLabel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLabel::QPrivateSignal (0x0x7f0b1ea230c0) 0 empty
+
+Vtable for QLabel
+QLabel::_ZTV6QLabel: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QLabel)
+16 (int (*)(...))QLabel::metaObject
+24 (int (*)(...))QLabel::qt_metacast
+32 (int (*)(...))QLabel::qt_metacall
+40 (int (*)(...))QLabel::~QLabel
+48 (int (*)(...))QLabel::~QLabel
+56 (int (*)(...))QLabel::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLabel::sizeHint
+136 (int (*)(...))QLabel::minimumSizeHint
+144 (int (*)(...))QLabel::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QLabel::mousePressEvent
+176 (int (*)(...))QLabel::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QLabel::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QLabel::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QLabel::focusInEvent
+232 (int (*)(...))QLabel::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLabel::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QLabel::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QLabel::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QLabel::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI6QLabel)
+456 (int (*)(...))QLabel::_ZThn16_N6QLabelD1Ev
+464 (int (*)(...))QLabel::_ZThn16_N6QLabelD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLabel
+ size=40 align=8
+ base size=40 base align=8
+QLabel (0x0x7f0b1e9b4410) 0
+ vptr=((& QLabel::_ZTV6QLabel) + 16)
+ QFrame (0x0x7f0b1e9b4478) 0
+ primary-for QLabel (0x0x7f0b1e9b4410)
+ QWidget (0x0x7f0b1ea22000) 0
+ primary-for QFrame (0x0x7f0b1e9b4478)
+ QObject (0x0x7f0b1ea23000) 0
+ primary-for QWidget (0x0x7f0b1ea22000)
+ QPaintDevice (0x0x7f0b1ea23060) 16
+ vptr=((& QLabel::_ZTV6QLabel) + 456)
+
+Class QLCDNumber::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLCDNumber::QPrivateSignal (0x0x7f0b1ea233c0) 0 empty
+
+Vtable for QLCDNumber
+QLCDNumber::_ZTV10QLCDNumber: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QLCDNumber)
+16 (int (*)(...))QLCDNumber::metaObject
+24 (int (*)(...))QLCDNumber::qt_metacast
+32 (int (*)(...))QLCDNumber::qt_metacall
+40 (int (*)(...))QLCDNumber::~QLCDNumber
+48 (int (*)(...))QLCDNumber::~QLCDNumber
+56 (int (*)(...))QLCDNumber::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLCDNumber::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLCDNumber::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI10QLCDNumber)
+456 (int (*)(...))QLCDNumber::_ZThn16_N10QLCDNumberD1Ev
+464 (int (*)(...))QLCDNumber::_ZThn16_N10QLCDNumberD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLCDNumber
+ size=40 align=8
+ base size=40 base align=8
+QLCDNumber (0x0x7f0b1e9b44e0) 0
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 16)
+ QFrame (0x0x7f0b1e9b4548) 0
+ primary-for QLCDNumber (0x0x7f0b1e9b44e0)
+ QWidget (0x0x7f0b1ea22070) 0
+ primary-for QFrame (0x0x7f0b1e9b4548)
+ QObject (0x0x7f0b1ea23300) 0
+ primary-for QWidget (0x0x7f0b1ea22070)
+ QPaintDevice (0x0x7f0b1ea23360) 16
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 456)
+
+Class QListView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListView::QPrivateSignal (0x0x7f0b1ea23780) 0 empty
+
+Vtable for QListView
+QListView::_ZTV9QListView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QListView)
+16 (int (*)(...))QListView::metaObject
+24 (int (*)(...))QListView::qt_metacast
+32 (int (*)(...))QListView::qt_metacall
+40 (int (*)(...))QListView::~QListView
+48 (int (*)(...))QListView::~QListView
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI9QListView)
+800 (int (*)(...))QListView::_ZThn16_N9QListViewD1Ev
+808 (int (*)(...))QListView::_ZThn16_N9QListViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QListView
+ size=40 align=8
+ base size=40 base align=8
+QListView (0x0x7f0b1e9b45b0) 0
+ vptr=((& QListView::_ZTV9QListView) + 16)
+ QAbstractItemView (0x0x7f0b1e9b4618) 0
+ primary-for QListView (0x0x7f0b1e9b45b0)
+ QAbstractScrollArea (0x0x7f0b1e9b4680) 0
+ primary-for QAbstractItemView (0x0x7f0b1e9b4618)
+ QFrame (0x0x7f0b1e9b46e8) 0
+ primary-for QAbstractScrollArea (0x0x7f0b1e9b4680)
+ QWidget (0x0x7f0b1ea223f0) 0
+ primary-for QFrame (0x0x7f0b1e9b46e8)
+ QObject (0x0x7f0b1ea236c0) 0
+ primary-for QWidget (0x0x7f0b1ea223f0)
+ QPaintDevice (0x0x7f0b1ea23720) 16
+ vptr=((& QListView::_ZTV9QListView) + 800)
+
+Vtable for QListWidgetItem
+QListWidgetItem::_ZTV15QListWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QListWidgetItem)
+16 (int (*)(...))QListWidgetItem::~QListWidgetItem
+24 (int (*)(...))QListWidgetItem::~QListWidgetItem
+32 (int (*)(...))QListWidgetItem::clone
+40 (int (*)(...))QListWidgetItem::data
+48 (int (*)(...))QListWidgetItem::setData
+56 (int (*)(...))QListWidgetItem::operator<
+64 (int (*)(...))QListWidgetItem::read
+72 (int (*)(...))QListWidgetItem::write
+
+Class QListWidgetItem
+ size=40 align=8
+ base size=36 base align=8
+QListWidgetItem (0x0x7f0b1ea23cc0) 0
+ vptr=((& QListWidgetItem::_ZTV15QListWidgetItem) + 16)
+
+Class QListWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListWidget::QPrivateSignal (0x0x7f0b1ea81780) 0 empty
+
+Vtable for QListWidget
+QListWidget::_ZTV11QListWidget: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QListWidget)
+16 (int (*)(...))QListWidget::metaObject
+24 (int (*)(...))QListWidget::qt_metacast
+32 (int (*)(...))QListWidget::qt_metacall
+40 (int (*)(...))QListWidget::~QListWidget
+48 (int (*)(...))QListWidget::~QListWidget
+56 (int (*)(...))QListWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QListWidget::setModel
+480 (int (*)(...))QListWidget::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))QListWidget::mimeTypes
+792 (int (*)(...))QListWidget::mimeData
+800 (int (*)(...))QListWidget::dropMimeData
+808 (int (*)(...))QListWidget::supportedDropActions
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI11QListWidget)
+832 (int (*)(...))QListWidget::_ZThn16_N11QListWidgetD1Ev
+840 (int (*)(...))QListWidget::_ZThn16_N11QListWidgetD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QListWidget
+ size=40 align=8
+ base size=40 base align=8
+QListWidget (0x0x7f0b1e9b4750) 0
+ vptr=((& QListWidget::_ZTV11QListWidget) + 16)
+ QListView (0x0x7f0b1e9b47b8) 0
+ primary-for QListWidget (0x0x7f0b1e9b4750)
+ QAbstractItemView (0x0x7f0b1e9b4820) 0
+ primary-for QListView (0x0x7f0b1e9b47b8)
+ QAbstractScrollArea (0x0x7f0b1e9b4888) 0
+ primary-for QAbstractItemView (0x0x7f0b1e9b4820)
+ QFrame (0x0x7f0b1e9b48f0) 0
+ primary-for QAbstractScrollArea (0x0x7f0b1e9b4888)
+ QWidget (0x0x7f0b1ea22a10) 0
+ primary-for QFrame (0x0x7f0b1e9b48f0)
+ QObject (0x0x7f0b1ea816c0) 0
+ primary-for QWidget (0x0x7f0b1ea22a10)
+ QPaintDevice (0x0x7f0b1ea81720) 16
+ vptr=((& QListWidget::_ZTV11QListWidget) + 832)
+
+Class QMainWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMainWindow::QPrivateSignal (0x0x7f0b1ea81c60) 0 empty
+
+Vtable for QMainWindow
+QMainWindow::_ZTV11QMainWindow: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMainWindow)
+16 (int (*)(...))QMainWindow::metaObject
+24 (int (*)(...))QMainWindow::qt_metacast
+32 (int (*)(...))QMainWindow::qt_metacall
+40 (int (*)(...))QMainWindow::~QMainWindow
+48 (int (*)(...))QMainWindow::~QMainWindow
+56 (int (*)(...))QMainWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QMainWindow::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QMainWindow::createPopupMenu
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QMainWindow)
+456 (int (*)(...))QMainWindow::_ZThn16_N11QMainWindowD1Ev
+464 (int (*)(...))QMainWindow::_ZThn16_N11QMainWindowD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMainWindow
+ size=40 align=8
+ base size=40 base align=8
+QMainWindow (0x0x7f0b1e9b4958) 0
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 16)
+ QWidget (0x0x7f0b1ea22a80) 0
+ primary-for QMainWindow (0x0x7f0b1e9b4958)
+ QObject (0x0x7f0b1ea81ba0) 0
+ primary-for QWidget (0x0x7f0b1ea22a80)
+ QPaintDevice (0x0x7f0b1ea81c00) 16
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 456)
+
+Class QMdiArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiArea::QPrivateSignal (0x0x7f0b1eacd360) 0 empty
+
+Vtable for QMdiArea
+QMdiArea::_ZTV8QMdiArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QMdiArea)
+16 (int (*)(...))QMdiArea::metaObject
+24 (int (*)(...))QMdiArea::qt_metacast
+32 (int (*)(...))QMdiArea::qt_metacall
+40 (int (*)(...))QMdiArea::~QMdiArea
+48 (int (*)(...))QMdiArea::~QMdiArea
+56 (int (*)(...))QMdiArea::event
+64 (int (*)(...))QMdiArea::eventFilter
+72 (int (*)(...))QMdiArea::timerEvent
+80 (int (*)(...))QMdiArea::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMdiArea::sizeHint
+136 (int (*)(...))QMdiArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QMdiArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMdiArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QMdiArea::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QMdiArea::setupViewport
+448 (int (*)(...))QMdiArea::viewportEvent
+456 (int (*)(...))QMdiArea::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI8QMdiArea)
+488 (int (*)(...))QMdiArea::_ZThn16_N8QMdiAreaD1Ev
+496 (int (*)(...))QMdiArea::_ZThn16_N8QMdiAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMdiArea
+ size=40 align=8
+ base size=40 base align=8
+QMdiArea (0x0x7f0b1e9b4af8) 0
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 16)
+ QAbstractScrollArea (0x0x7f0b1e9b4b60) 0
+ primary-for QMdiArea (0x0x7f0b1e9b4af8)
+ QFrame (0x0x7f0b1e9b4bc8) 0
+ primary-for QAbstractScrollArea (0x0x7f0b1e9b4b60)
+ QWidget (0x0x7f0b1ea22d90) 0
+ primary-for QFrame (0x0x7f0b1e9b4bc8)
+ QObject (0x0x7f0b1eacd2a0) 0
+ primary-for QWidget (0x0x7f0b1ea22d90)
+ QPaintDevice (0x0x7f0b1eacd300) 16
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 488)
+
+Class QMdiSubWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiSubWindow::QPrivateSignal (0x0x7f0b1eacda20) 0 empty
+
+Vtable for QMdiSubWindow
+QMdiSubWindow::_ZTV13QMdiSubWindow: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QMdiSubWindow)
+16 (int (*)(...))QMdiSubWindow::metaObject
+24 (int (*)(...))QMdiSubWindow::qt_metacast
+32 (int (*)(...))QMdiSubWindow::qt_metacall
+40 (int (*)(...))QMdiSubWindow::~QMdiSubWindow
+48 (int (*)(...))QMdiSubWindow::~QMdiSubWindow
+56 (int (*)(...))QMdiSubWindow::event
+64 (int (*)(...))QMdiSubWindow::eventFilter
+72 (int (*)(...))QMdiSubWindow::timerEvent
+80 (int (*)(...))QMdiSubWindow::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMdiSubWindow::sizeHint
+136 (int (*)(...))QMdiSubWindow::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMdiSubWindow::mousePressEvent
+176 (int (*)(...))QMdiSubWindow::mouseReleaseEvent
+184 (int (*)(...))QMdiSubWindow::mouseDoubleClickEvent
+192 (int (*)(...))QMdiSubWindow::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMdiSubWindow::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QMdiSubWindow::focusInEvent
+232 (int (*)(...))QMdiSubWindow::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QMdiSubWindow::leaveEvent
+256 (int (*)(...))QMdiSubWindow::paintEvent
+264 (int (*)(...))QMdiSubWindow::moveEvent
+272 (int (*)(...))QMdiSubWindow::resizeEvent
+280 (int (*)(...))QMdiSubWindow::closeEvent
+288 (int (*)(...))QMdiSubWindow::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QMdiSubWindow::showEvent
+352 (int (*)(...))QMdiSubWindow::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMdiSubWindow::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI13QMdiSubWindow)
+448 (int (*)(...))QMdiSubWindow::_ZThn16_N13QMdiSubWindowD1Ev
+456 (int (*)(...))QMdiSubWindow::_ZThn16_N13QMdiSubWindowD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMdiSubWindow
+ size=40 align=8
+ base size=40 base align=8
+QMdiSubWindow (0x0x7f0b1e9b4d68) 0
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 16)
+ QWidget (0x0x7f0b1e6e2150) 0
+ primary-for QMdiSubWindow (0x0x7f0b1e9b4d68)
+ QObject (0x0x7f0b1eacd960) 0
+ primary-for QWidget (0x0x7f0b1e6e2150)
+ QPaintDevice (0x0x7f0b1eacd9c0) 16
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 448)
+
+Class QMenu::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenu::QPrivateSignal (0x0x7f0b1eacdf60) 0 empty
+
+Vtable for QMenu
+QMenu::_ZTV5QMenu: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QMenu)
+16 (int (*)(...))QMenu::metaObject
+24 (int (*)(...))QMenu::qt_metacast
+32 (int (*)(...))QMenu::qt_metacall
+40 (int (*)(...))QMenu::~QMenu
+48 (int (*)(...))QMenu::~QMenu
+56 (int (*)(...))QMenu::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QMenu::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMenu::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMenu::mousePressEvent
+176 (int (*)(...))QMenu::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QMenu::mouseMoveEvent
+200 (int (*)(...))QMenu::wheelEvent
+208 (int (*)(...))QMenu::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QMenu::enterEvent
+248 (int (*)(...))QMenu::leaveEvent
+256 (int (*)(...))QMenu::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QMenu::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QMenu::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMenu::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QMenu::focusNextPrevChild
+432 (int (*)(...))QMenu::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI5QMenu)
+456 (int (*)(...))QMenu::_ZThn16_N5QMenuD1Ev
+464 (int (*)(...))QMenu::_ZThn16_N5QMenuD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMenu
+ size=40 align=8
+ base size=40 base align=8
+QMenu (0x0x7f0b1e9b4f08) 0
+ vptr=((& QMenu::_ZTV5QMenu) + 16)
+ QWidget (0x0x7f0b1e6e2380) 0
+ primary-for QMenu (0x0x7f0b1e9b4f08)
+ QObject (0x0x7f0b1eacdea0) 0
+ primary-for QWidget (0x0x7f0b1e6e2380)
+ QPaintDevice (0x0x7f0b1eacdf00) 16
+ vptr=((& QMenu::_ZTV5QMenu) + 456)
+
+Class QMenuBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenuBar::QPrivateSignal (0x0x7f0b1e75c360) 0 empty
+
+Vtable for QMenuBar
+QMenuBar::_ZTV8QMenuBar: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QMenuBar)
+16 (int (*)(...))QMenuBar::metaObject
+24 (int (*)(...))QMenuBar::qt_metacast
+32 (int (*)(...))QMenuBar::qt_metacall
+40 (int (*)(...))QMenuBar::~QMenuBar
+48 (int (*)(...))QMenuBar::~QMenuBar
+56 (int (*)(...))QMenuBar::event
+64 (int (*)(...))QMenuBar::eventFilter
+72 (int (*)(...))QMenuBar::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QMenuBar::setVisible
+128 (int (*)(...))QMenuBar::sizeHint
+136 (int (*)(...))QMenuBar::minimumSizeHint
+144 (int (*)(...))QMenuBar::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMenuBar::mousePressEvent
+176 (int (*)(...))QMenuBar::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QMenuBar::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMenuBar::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QMenuBar::focusInEvent
+232 (int (*)(...))QMenuBar::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QMenuBar::leaveEvent
+256 (int (*)(...))QMenuBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMenuBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QMenuBar::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMenuBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QMenuBar::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI8QMenuBar)
+456 (int (*)(...))QMenuBar::_ZThn16_N8QMenuBarD1Ev
+464 (int (*)(...))QMenuBar::_ZThn16_N8QMenuBarD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMenuBar
+ size=40 align=8
+ base size=40 base align=8
+QMenuBar (0x0x7f0b1e9b4f70) 0
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 16)
+ QWidget (0x0x7f0b1e6e23f0) 0
+ primary-for QMenuBar (0x0x7f0b1e9b4f70)
+ QObject (0x0x7f0b1e75c2a0) 0
+ primary-for QWidget (0x0x7f0b1e6e23f0)
+ QPaintDevice (0x0x7f0b1e75c300) 16
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 456)
+
+Class QMessageBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMessageBox::QPrivateSignal (0x0x7f0b1e75c660) 0 empty
+
+Vtable for QMessageBox
+QMessageBox::_ZTV11QMessageBox: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMessageBox)
+16 (int (*)(...))QMessageBox::metaObject
+24 (int (*)(...))QMessageBox::qt_metacast
+32 (int (*)(...))QMessageBox::qt_metacall
+40 (int (*)(...))QMessageBox::~QMessageBox
+48 (int (*)(...))QMessageBox::~QMessageBox
+56 (int (*)(...))QMessageBox::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMessageBox::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMessageBox::resizeEvent
+280 (int (*)(...))QMessageBox::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QMessageBox::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMessageBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QMessageBox)
+488 (int (*)(...))QMessageBox::_ZThn16_N11QMessageBoxD1Ev
+496 (int (*)(...))QMessageBox::_ZThn16_N11QMessageBoxD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMessageBox
+ size=40 align=8
+ base size=40 base align=8
+QMessageBox (0x0x7f0b1e775000) 0
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 16)
+ QDialog (0x0x7f0b1e775068) 0
+ primary-for QMessageBox (0x0x7f0b1e775000)
+ QWidget (0x0x7f0b1e6e2460) 0
+ primary-for QDialog (0x0x7f0b1e775068)
+ QObject (0x0x7f0b1e75c5a0) 0
+ primary-for QWidget (0x0x7f0b1e6e2460)
+ QPaintDevice (0x0x7f0b1e75c600) 16
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 488)
+
+Class QTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextEdit::QPrivateSignal (0x0x7f0b1e75cea0) 0 empty
+
+Class QTextEdit::ExtraSelection
+ size=24 align=8
+ base size=24 base align=8
+QTextEdit::ExtraSelection (0x0x7f0b1e75cf00) 0
+
+Vtable for QTextEdit
+QTextEdit::_ZTV9QTextEdit: 74 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTextEdit)
+16 (int (*)(...))QTextEdit::metaObject
+24 (int (*)(...))QTextEdit::qt_metacast
+32 (int (*)(...))QTextEdit::qt_metacall
+40 (int (*)(...))QTextEdit::~QTextEdit
+48 (int (*)(...))QTextEdit::~QTextEdit
+56 (int (*)(...))QTextEdit::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTextEdit::mousePressEvent
+176 (int (*)(...))QTextEdit::mouseReleaseEvent
+184 (int (*)(...))QTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QTextEdit::mouseMoveEvent
+200 (int (*)(...))QTextEdit::wheelEvent
+208 (int (*)(...))QTextEdit::keyPressEvent
+216 (int (*)(...))QTextEdit::keyReleaseEvent
+224 (int (*)(...))QTextEdit::focusInEvent
+232 (int (*)(...))QTextEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTextEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QTextEdit::dragEnterEvent
+320 (int (*)(...))QTextEdit::dragMoveEvent
+328 (int (*)(...))QTextEdit::dragLeaveEvent
+336 (int (*)(...))QTextEdit::dropEvent
+344 (int (*)(...))QTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QTextEdit::inputMethodEvent
+416 (int (*)(...))QTextEdit::inputMethodQuery
+424 (int (*)(...))QTextEdit::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QTextEdit::loadResource
+480 (int (*)(...))QTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QTextEdit::canInsertFromMimeData
+496 (int (*)(...))QTextEdit::insertFromMimeData
+504 (int (*)(...))QTextEdit::doSetTextCursor
+512 (int (*)(...))-16
+520 (int (*)(...))(& _ZTI9QTextEdit)
+528 (int (*)(...))QTextEdit::_ZThn16_N9QTextEditD1Ev
+536 (int (*)(...))QTextEdit::_ZThn16_N9QTextEditD0Ev
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTextEdit
+ size=40 align=8
+ base size=40 base align=8
+QTextEdit (0x0x7f0b1e775208) 0
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 16)
+ QAbstractScrollArea (0x0x7f0b1e775270) 0
+ primary-for QTextEdit (0x0x7f0b1e775208)
+ QFrame (0x0x7f0b1e7752d8) 0
+ primary-for QAbstractScrollArea (0x0x7f0b1e775270)
+ QWidget (0x0x7f0b1e7797e0) 0
+ primary-for QFrame (0x0x7f0b1e7752d8)
+ QObject (0x0x7f0b1e75cde0) 0
+ primary-for QWidget (0x0x7f0b1e7797e0)
+ QPaintDevice (0x0x7f0b1e75ce40) 16
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 528)
+
+Class QPlainTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextEdit::QPrivateSignal (0x0x7f0b1e7e5780) 0 empty
+
+Vtable for QPlainTextEdit
+QPlainTextEdit::_ZTV14QPlainTextEdit: 74 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QPlainTextEdit)
+16 (int (*)(...))QPlainTextEdit::metaObject
+24 (int (*)(...))QPlainTextEdit::qt_metacast
+32 (int (*)(...))QPlainTextEdit::qt_metacall
+40 (int (*)(...))QPlainTextEdit::~QPlainTextEdit
+48 (int (*)(...))QPlainTextEdit::~QPlainTextEdit
+56 (int (*)(...))QPlainTextEdit::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QPlainTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QPlainTextEdit::mousePressEvent
+176 (int (*)(...))QPlainTextEdit::mouseReleaseEvent
+184 (int (*)(...))QPlainTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QPlainTextEdit::mouseMoveEvent
+200 (int (*)(...))QPlainTextEdit::wheelEvent
+208 (int (*)(...))QPlainTextEdit::keyPressEvent
+216 (int (*)(...))QPlainTextEdit::keyReleaseEvent
+224 (int (*)(...))QPlainTextEdit::focusInEvent
+232 (int (*)(...))QPlainTextEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QPlainTextEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QPlainTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QPlainTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QPlainTextEdit::dragEnterEvent
+320 (int (*)(...))QPlainTextEdit::dragMoveEvent
+328 (int (*)(...))QPlainTextEdit::dragLeaveEvent
+336 (int (*)(...))QPlainTextEdit::dropEvent
+344 (int (*)(...))QPlainTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QPlainTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QPlainTextEdit::inputMethodEvent
+416 (int (*)(...))QPlainTextEdit::inputMethodQuery
+424 (int (*)(...))QPlainTextEdit::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QPlainTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QPlainTextEdit::loadResource
+480 (int (*)(...))QPlainTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QPlainTextEdit::canInsertFromMimeData
+496 (int (*)(...))QPlainTextEdit::insertFromMimeData
+504 (int (*)(...))QPlainTextEdit::doSetTextCursor
+512 (int (*)(...))-16
+520 (int (*)(...))(& _ZTI14QPlainTextEdit)
+528 (int (*)(...))QPlainTextEdit::_ZThn16_N14QPlainTextEditD1Ev
+536 (int (*)(...))QPlainTextEdit::_ZThn16_N14QPlainTextEditD0Ev
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QPlainTextEdit
+ size=40 align=8
+ base size=40 base align=8
+QPlainTextEdit (0x0x7f0b1e775478) 0
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 16)
+ QAbstractScrollArea (0x0x7f0b1e7754e0) 0
+ primary-for QPlainTextEdit (0x0x7f0b1e775478)
+ QFrame (0x0x7f0b1e775548) 0
+ primary-for QAbstractScrollArea (0x0x7f0b1e7754e0)
+ QWidget (0x0x7f0b1e779b60) 0
+ primary-for QFrame (0x0x7f0b1e775548)
+ QObject (0x0x7f0b1e7e56c0) 0
+ primary-for QWidget (0x0x7f0b1e779b60)
+ QPaintDevice (0x0x7f0b1e7e5720) 16
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 528)
+
+Class QPlainTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextDocumentLayout::QPrivateSignal (0x0x7f0b1e7e5cc0) 0 empty
+
+Vtable for QPlainTextDocumentLayout
+QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QPlainTextDocumentLayout)
+16 (int (*)(...))QPlainTextDocumentLayout::metaObject
+24 (int (*)(...))QPlainTextDocumentLayout::qt_metacast
+32 (int (*)(...))QPlainTextDocumentLayout::qt_metacall
+40 (int (*)(...))QPlainTextDocumentLayout::~QPlainTextDocumentLayout
+48 (int (*)(...))QPlainTextDocumentLayout::~QPlainTextDocumentLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPlainTextDocumentLayout::draw
+120 (int (*)(...))QPlainTextDocumentLayout::hitTest
+128 (int (*)(...))QPlainTextDocumentLayout::pageCount
+136 (int (*)(...))QPlainTextDocumentLayout::documentSize
+144 (int (*)(...))QPlainTextDocumentLayout::frameBoundingRect
+152 (int (*)(...))QPlainTextDocumentLayout::blockBoundingRect
+160 (int (*)(...))QPlainTextDocumentLayout::documentChanged
+168 (int (*)(...))QAbstractTextDocumentLayout::resizeInlineObject
+176 (int (*)(...))QAbstractTextDocumentLayout::positionInlineObject
+184 (int (*)(...))QAbstractTextDocumentLayout::drawInlineObject
+
+Class QPlainTextDocumentLayout
+ size=16 align=8
+ base size=16 base align=8
+QPlainTextDocumentLayout (0x0x7f0b1e7755b0) 0
+ vptr=((& QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout) + 16)
+ QAbstractTextDocumentLayout (0x0x7f0b1e775618) 0
+ primary-for QPlainTextDocumentLayout (0x0x7f0b1e7755b0)
+ QObject (0x0x7f0b1e7e5c60) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f0b1e775618)
+
+Class QProgressBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressBar::QPrivateSignal (0x0x7f0b1e7e5f00) 0 empty
+
+Vtable for QProgressBar
+QProgressBar::_ZTV12QProgressBar: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QProgressBar)
+16 (int (*)(...))QProgressBar::metaObject
+24 (int (*)(...))QProgressBar::qt_metacast
+32 (int (*)(...))QProgressBar::qt_metacall
+40 (int (*)(...))QProgressBar::~QProgressBar
+48 (int (*)(...))QProgressBar::~QProgressBar
+56 (int (*)(...))QProgressBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QProgressBar::sizeHint
+136 (int (*)(...))QProgressBar::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QProgressBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QProgressBar::text
+440 (int (*)(...))QProgressBar::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI12QProgressBar)
+464 (int (*)(...))QProgressBar::_ZThn16_N12QProgressBarD1Ev
+472 (int (*)(...))QProgressBar::_ZThn16_N12QProgressBarD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QProgressBar
+ size=40 align=8
+ base size=40 base align=8
+QProgressBar (0x0x7f0b1e775680) 0
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 16)
+ QWidget (0x0x7f0b1e779cb0) 0
+ primary-for QProgressBar (0x0x7f0b1e775680)
+ QObject (0x0x7f0b1e7e5e40) 0
+ primary-for QWidget (0x0x7f0b1e779cb0)
+ QPaintDevice (0x0x7f0b1e7e5ea0) 16
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 464)
+
+Class QProgressDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressDialog::QPrivateSignal (0x0x7f0b1e844240) 0 empty
+
+Vtable for QProgressDialog
+QProgressDialog::_ZTV15QProgressDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QProgressDialog)
+16 (int (*)(...))QProgressDialog::metaObject
+24 (int (*)(...))QProgressDialog::qt_metacast
+32 (int (*)(...))QProgressDialog::qt_metacall
+40 (int (*)(...))QProgressDialog::~QProgressDialog
+48 (int (*)(...))QProgressDialog::~QProgressDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QProgressDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QProgressDialog::resizeEvent
+280 (int (*)(...))QProgressDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QProgressDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QProgressDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI15QProgressDialog)
+488 (int (*)(...))QProgressDialog::_ZThn16_N15QProgressDialogD1Ev
+496 (int (*)(...))QProgressDialog::_ZThn16_N15QProgressDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QProgressDialog
+ size=40 align=8
+ base size=40 base align=8
+QProgressDialog (0x0x7f0b1e7756e8) 0
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 16)
+ QDialog (0x0x7f0b1e775750) 0
+ primary-for QProgressDialog (0x0x7f0b1e7756e8)
+ QWidget (0x0x7f0b1e779e00) 0
+ primary-for QDialog (0x0x7f0b1e775750)
+ QObject (0x0x7f0b1e844180) 0
+ primary-for QWidget (0x0x7f0b1e779e00)
+ QPaintDevice (0x0x7f0b1e8441e0) 16
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 488)
+
+Class QProxyStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProxyStyle::QPrivateSignal (0x0x7f0b1e844420) 0 empty
+
+Vtable for QProxyStyle
+QProxyStyle::_ZTV11QProxyStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QProxyStyle)
+16 (int (*)(...))QProxyStyle::metaObject
+24 (int (*)(...))QProxyStyle::qt_metacast
+32 (int (*)(...))QProxyStyle::qt_metacall
+40 (int (*)(...))QProxyStyle::~QProxyStyle
+48 (int (*)(...))QProxyStyle::~QProxyStyle
+56 (int (*)(...))QProxyStyle::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QProxyStyle::polish
+120 (int (*)(...))QProxyStyle::unpolish
+128 (int (*)(...))QProxyStyle::polish
+136 (int (*)(...))QProxyStyle::unpolish
+144 (int (*)(...))QProxyStyle::polish
+152 (int (*)(...))QProxyStyle::itemTextRect
+160 (int (*)(...))QProxyStyle::itemPixmapRect
+168 (int (*)(...))QProxyStyle::drawItemText
+176 (int (*)(...))QProxyStyle::drawItemPixmap
+184 (int (*)(...))QProxyStyle::standardPalette
+192 (int (*)(...))QProxyStyle::drawPrimitive
+200 (int (*)(...))QProxyStyle::drawControl
+208 (int (*)(...))QProxyStyle::subElementRect
+216 (int (*)(...))QProxyStyle::drawComplexControl
+224 (int (*)(...))QProxyStyle::hitTestComplexControl
+232 (int (*)(...))QProxyStyle::subControlRect
+240 (int (*)(...))QProxyStyle::pixelMetric
+248 (int (*)(...))QProxyStyle::sizeFromContents
+256 (int (*)(...))QProxyStyle::styleHint
+264 (int (*)(...))QProxyStyle::standardPixmap
+272 (int (*)(...))QProxyStyle::standardIcon
+280 (int (*)(...))QProxyStyle::generatedIconPixmap
+288 (int (*)(...))QProxyStyle::layoutSpacing
+
+Class QProxyStyle
+ size=16 align=8
+ base size=16 base align=8
+QProxyStyle (0x0x7f0b1e7757b8) 0
+ vptr=((& QProxyStyle::_ZTV11QProxyStyle) + 16)
+ QCommonStyle (0x0x7f0b1e775820) 0
+ primary-for QProxyStyle (0x0x7f0b1e7757b8)
+ QStyle (0x0x7f0b1e775888) 0
+ primary-for QCommonStyle (0x0x7f0b1e775820)
+ QObject (0x0x7f0b1e8443c0) 0
+ primary-for QStyle (0x0x7f0b1e775888)
+
+Class QRadioButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRadioButton::QPrivateSignal (0x0x7f0b1e844660) 0 empty
+
+Vtable for QRadioButton
+QRadioButton::_ZTV12QRadioButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QRadioButton)
+16 (int (*)(...))QRadioButton::metaObject
+24 (int (*)(...))QRadioButton::qt_metacast
+32 (int (*)(...))QRadioButton::qt_metacall
+40 (int (*)(...))QRadioButton::~QRadioButton
+48 (int (*)(...))QRadioButton::~QRadioButton
+56 (int (*)(...))QRadioButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QRadioButton::sizeHint
+136 (int (*)(...))QRadioButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QRadioButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QRadioButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QRadioButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QRadioButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI12QRadioButton)
+480 (int (*)(...))QRadioButton::_ZThn16_N12QRadioButtonD1Ev
+488 (int (*)(...))QRadioButton::_ZThn16_N12QRadioButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QRadioButton
+ size=40 align=8
+ base size=40 base align=8
+QRadioButton (0x0x7f0b1e7758f0) 0
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 16)
+ QAbstractButton (0x0x7f0b1e775958) 0
+ primary-for QRadioButton (0x0x7f0b1e7758f0)
+ QWidget (0x0x7f0b1e779e70) 0
+ primary-for QAbstractButton (0x0x7f0b1e775958)
+ QObject (0x0x7f0b1e8445a0) 0
+ primary-for QWidget (0x0x7f0b1e779e70)
+ QPaintDevice (0x0x7f0b1e844600) 16
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 480)
+
+Class QScrollBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollBar::QPrivateSignal (0x0x7f0b1e8448a0) 0 empty
+
+Vtable for QScrollBar
+QScrollBar::_ZTV10QScrollBar: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QScrollBar)
+16 (int (*)(...))QScrollBar::metaObject
+24 (int (*)(...))QScrollBar::qt_metacast
+32 (int (*)(...))QScrollBar::qt_metacall
+40 (int (*)(...))QScrollBar::~QScrollBar
+48 (int (*)(...))QScrollBar::~QScrollBar
+56 (int (*)(...))QScrollBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QScrollBar::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QScrollBar::mousePressEvent
+176 (int (*)(...))QScrollBar::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QScrollBar::mouseMoveEvent
+200 (int (*)(...))QScrollBar::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QScrollBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QScrollBar::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QScrollBar::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QScrollBar::sliderChange
+440 (int (*)(...))QScrollBar::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI10QScrollBar)
+464 (int (*)(...))QScrollBar::_ZThn16_N10QScrollBarD1Ev
+472 (int (*)(...))QScrollBar::_ZThn16_N10QScrollBarD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QScrollBar
+ size=40 align=8
+ base size=40 base align=8
+QScrollBar (0x0x7f0b1e7759c0) 0
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 16)
+ QAbstractSlider (0x0x7f0b1e775a28) 0
+ primary-for QScrollBar (0x0x7f0b1e7759c0)
+ QWidget (0x0x7f0b1e779ee0) 0
+ primary-for QAbstractSlider (0x0x7f0b1e775a28)
+ QObject (0x0x7f0b1e8447e0) 0
+ primary-for QWidget (0x0x7f0b1e779ee0)
+ QPaintDevice (0x0x7f0b1e844840) 16
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 464)
+
+Vtable for QScrollerProperties
+QScrollerProperties::_ZTV19QScrollerProperties: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollerProperties)
+16 (int (*)(...))QScrollerProperties::~QScrollerProperties
+24 (int (*)(...))QScrollerProperties::~QScrollerProperties
+
+Class QScrollerProperties
+ size=16 align=8
+ base size=16 base align=8
+QScrollerProperties (0x0x7f0b1e844a20) 0
+ vptr=((& QScrollerProperties::_ZTV19QScrollerProperties) + 16)
+
+Class QScroller::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScroller::QPrivateSignal (0x0x7f0b1e844d80) 0 empty
+
+Vtable for QScroller
+QScroller::_ZTV9QScroller: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QScroller)
+16 (int (*)(...))QScroller::metaObject
+24 (int (*)(...))QScroller::qt_metacast
+32 (int (*)(...))QScroller::qt_metacall
+40 (int (*)(...))QScroller::~QScroller
+48 (int (*)(...))QScroller::~QScroller
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QScroller
+ size=24 align=8
+ base size=24 base align=8
+QScroller (0x0x7f0b1e775a90) 0
+ vptr=((& QScroller::_ZTV9QScroller) + 16)
+ QObject (0x0x7f0b1e844d20) 0
+ primary-for QScroller (0x0x7f0b1e775a90)
+
+Class QSizeGrip::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSizeGrip::QPrivateSignal (0x0x7f0b1e8a60c0) 0 empty
+
+Vtable for QSizeGrip
+QSizeGrip::_ZTV9QSizeGrip: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSizeGrip)
+16 (int (*)(...))QSizeGrip::metaObject
+24 (int (*)(...))QSizeGrip::qt_metacast
+32 (int (*)(...))QSizeGrip::qt_metacall
+40 (int (*)(...))QSizeGrip::~QSizeGrip
+48 (int (*)(...))QSizeGrip::~QSizeGrip
+56 (int (*)(...))QSizeGrip::event
+64 (int (*)(...))QSizeGrip::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QSizeGrip::setVisible
+128 (int (*)(...))QSizeGrip::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSizeGrip::mousePressEvent
+176 (int (*)(...))QSizeGrip::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSizeGrip::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSizeGrip::paintEvent
+264 (int (*)(...))QSizeGrip::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QSizeGrip::showEvent
+352 (int (*)(...))QSizeGrip::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI9QSizeGrip)
+448 (int (*)(...))QSizeGrip::_ZThn16_N9QSizeGripD1Ev
+456 (int (*)(...))QSizeGrip::_ZThn16_N9QSizeGripD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSizeGrip
+ size=40 align=8
+ base size=40 base align=8
+QSizeGrip (0x0x7f0b1e775af8) 0
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 16)
+ QWidget (0x0x7f0b1e8981c0) 0
+ primary-for QSizeGrip (0x0x7f0b1e775af8)
+ QObject (0x0x7f0b1e8a6000) 0
+ primary-for QWidget (0x0x7f0b1e8981c0)
+ QPaintDevice (0x0x7f0b1e8a6060) 16
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 448)
+
+Class QSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSpinBox::QPrivateSignal (0x0x7f0b1e8a6300) 0 empty
+
+Vtable for QSpinBox
+QSpinBox::_ZTV8QSpinBox: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSpinBox)
+16 (int (*)(...))QSpinBox::metaObject
+24 (int (*)(...))QSpinBox::qt_metacast
+32 (int (*)(...))QSpinBox::qt_metacall
+40 (int (*)(...))QSpinBox::~QSpinBox
+48 (int (*)(...))QSpinBox::~QSpinBox
+56 (int (*)(...))QSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QSpinBox::validate
+440 (int (*)(...))QSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))QSpinBox::valueFromText
+488 (int (*)(...))QSpinBox::textFromValue
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI8QSpinBox)
+512 (int (*)(...))QSpinBox::_ZThn16_N8QSpinBoxD1Ev
+520 (int (*)(...))QSpinBox::_ZThn16_N8QSpinBoxD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QSpinBox (0x0x7f0b1e775b60) 0
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 16)
+ QAbstractSpinBox (0x0x7f0b1e775bc8) 0
+ primary-for QSpinBox (0x0x7f0b1e775b60)
+ QWidget (0x0x7f0b1e898230) 0
+ primary-for QAbstractSpinBox (0x0x7f0b1e775bc8)
+ QObject (0x0x7f0b1e8a6240) 0
+ primary-for QWidget (0x0x7f0b1e898230)
+ QPaintDevice (0x0x7f0b1e8a62a0) 16
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 512)
+
+Class QDoubleSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleSpinBox::QPrivateSignal (0x0x7f0b1e8a6540) 0 empty
+
+Vtable for QDoubleSpinBox
+QDoubleSpinBox::_ZTV14QDoubleSpinBox: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDoubleSpinBox)
+16 (int (*)(...))QDoubleSpinBox::metaObject
+24 (int (*)(...))QDoubleSpinBox::qt_metacast
+32 (int (*)(...))QDoubleSpinBox::qt_metacall
+40 (int (*)(...))QDoubleSpinBox::~QDoubleSpinBox
+48 (int (*)(...))QDoubleSpinBox::~QDoubleSpinBox
+56 (int (*)(...))QAbstractSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDoubleSpinBox::validate
+440 (int (*)(...))QDoubleSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))QDoubleSpinBox::valueFromText
+488 (int (*)(...))QDoubleSpinBox::textFromValue
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI14QDoubleSpinBox)
+512 (int (*)(...))QDoubleSpinBox::_ZThn16_N14QDoubleSpinBoxD1Ev
+520 (int (*)(...))QDoubleSpinBox::_ZThn16_N14QDoubleSpinBoxD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDoubleSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QDoubleSpinBox (0x0x7f0b1e775c30) 0
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 16)
+ QAbstractSpinBox (0x0x7f0b1e775c98) 0
+ primary-for QDoubleSpinBox (0x0x7f0b1e775c30)
+ QWidget (0x0x7f0b1e8982a0) 0
+ primary-for QAbstractSpinBox (0x0x7f0b1e775c98)
+ QObject (0x0x7f0b1e8a6480) 0
+ primary-for QWidget (0x0x7f0b1e8982a0)
+ QPaintDevice (0x0x7f0b1e8a64e0) 16
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 512)
+
+Class QSplashScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplashScreen::QPrivateSignal (0x0x7f0b1e8a6780) 0 empty
+
+Vtable for QSplashScreen
+QSplashScreen::_ZTV13QSplashScreen: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSplashScreen)
+16 (int (*)(...))QSplashScreen::metaObject
+24 (int (*)(...))QSplashScreen::qt_metacast
+32 (int (*)(...))QSplashScreen::qt_metacall
+40 (int (*)(...))QSplashScreen::~QSplashScreen
+48 (int (*)(...))QSplashScreen::~QSplashScreen
+56 (int (*)(...))QSplashScreen::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSplashScreen::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QSplashScreen::drawContents
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI13QSplashScreen)
+456 (int (*)(...))QSplashScreen::_ZThn16_N13QSplashScreenD1Ev
+464 (int (*)(...))QSplashScreen::_ZThn16_N13QSplashScreenD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplashScreen
+ size=40 align=8
+ base size=40 base align=8
+QSplashScreen (0x0x7f0b1e775d00) 0
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 16)
+ QWidget (0x0x7f0b1e898310) 0
+ primary-for QSplashScreen (0x0x7f0b1e775d00)
+ QObject (0x0x7f0b1e8a66c0) 0
+ primary-for QWidget (0x0x7f0b1e898310)
+ QPaintDevice (0x0x7f0b1e8a6720) 16
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 456)
+
+Class QSplitter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitter::QPrivateSignal (0x0x7f0b1e8a69c0) 0 empty
+
+Vtable for QSplitter
+QSplitter::_ZTV9QSplitter: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSplitter)
+16 (int (*)(...))QSplitter::metaObject
+24 (int (*)(...))QSplitter::qt_metacast
+32 (int (*)(...))QSplitter::qt_metacall
+40 (int (*)(...))QSplitter::~QSplitter
+48 (int (*)(...))QSplitter::~QSplitter
+56 (int (*)(...))QSplitter::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QSplitter::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSplitter::sizeHint
+136 (int (*)(...))QSplitter::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QSplitter::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QSplitter::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QSplitter::createHandle
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI9QSplitter)
+464 (int (*)(...))QSplitter::_ZThn16_N9QSplitterD1Ev
+472 (int (*)(...))QSplitter::_ZThn16_N9QSplitterD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplitter
+ size=40 align=8
+ base size=40 base align=8
+QSplitter (0x0x7f0b1e775d68) 0
+ vptr=((& QSplitter::_ZTV9QSplitter) + 16)
+ QFrame (0x0x7f0b1e775dd0) 0
+ primary-for QSplitter (0x0x7f0b1e775d68)
+ QWidget (0x0x7f0b1e898380) 0
+ primary-for QFrame (0x0x7f0b1e775dd0)
+ QObject (0x0x7f0b1e8a6900) 0
+ primary-for QWidget (0x0x7f0b1e898380)
+ QPaintDevice (0x0x7f0b1e8a6960) 16
+ vptr=((& QSplitter::_ZTV9QSplitter) + 464)
+
+Class QSplitterHandle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitterHandle::QPrivateSignal (0x0x7f0b1e8a6c00) 0 empty
+
+Vtable for QSplitterHandle
+QSplitterHandle::_ZTV15QSplitterHandle: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSplitterHandle)
+16 (int (*)(...))QSplitterHandle::metaObject
+24 (int (*)(...))QSplitterHandle::qt_metacast
+32 (int (*)(...))QSplitterHandle::qt_metacall
+40 (int (*)(...))QSplitterHandle::~QSplitterHandle
+48 (int (*)(...))QSplitterHandle::~QSplitterHandle
+56 (int (*)(...))QSplitterHandle::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSplitterHandle::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSplitterHandle::mousePressEvent
+176 (int (*)(...))QSplitterHandle::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSplitterHandle::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSplitterHandle::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QSplitterHandle::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI15QSplitterHandle)
+448 (int (*)(...))QSplitterHandle::_ZThn16_N15QSplitterHandleD1Ev
+456 (int (*)(...))QSplitterHandle::_ZThn16_N15QSplitterHandleD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplitterHandle
+ size=40 align=8
+ base size=40 base align=8
+QSplitterHandle (0x0x7f0b1e775e38) 0
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 16)
+ QWidget (0x0x7f0b1e8983f0) 0
+ primary-for QSplitterHandle (0x0x7f0b1e775e38)
+ QObject (0x0x7f0b1e8a6b40) 0
+ primary-for QWidget (0x0x7f0b1e8983f0)
+ QPaintDevice (0x0x7f0b1e8a6ba0) 16
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 448)
+
+Class QStackedLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedLayout::QPrivateSignal (0x0x7f0b1e8a6e40) 0 empty
+
+Vtable for QStackedLayout
+QStackedLayout::_ZTV14QStackedLayout: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QStackedLayout)
+16 (int (*)(...))QStackedLayout::metaObject
+24 (int (*)(...))QStackedLayout::qt_metacast
+32 (int (*)(...))QStackedLayout::qt_metacall
+40 (int (*)(...))QStackedLayout::~QStackedLayout
+48 (int (*)(...))QStackedLayout::~QStackedLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLayout::spacing
+120 (int (*)(...))QLayout::setSpacing
+128 (int (*)(...))QLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QStackedLayout::addItem
+152 (int (*)(...))QLayout::expandingDirections
+160 (int (*)(...))QStackedLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QStackedLayout::setGeometry
+184 (int (*)(...))QStackedLayout::itemAt
+192 (int (*)(...))QStackedLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QStackedLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QStackedLayout::sizeHint
+264 (int (*)(...))QStackedLayout::hasHeightForWidth
+272 (int (*)(...))QStackedLayout::heightForWidth
+280 (int (*)(...))-16
+288 (int (*)(...))(& _ZTI14QStackedLayout)
+296 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayoutD1Ev
+304 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayoutD0Ev
+312 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout8sizeHintEv
+320 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout11minimumSizeEv
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+336 (int (*)(...))QLayout::_ZThn16_NK7QLayout19expandingDirectionsEv
+344 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayout11setGeometryERK5QRect
+352 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+368 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout17hasHeightForWidthEv
+376 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout14heightForWidthEi
+384 (int (*)(...))QLayoutItem::minimumHeightForWidth
+392 (int (*)(...))QLayout::_ZThn16_N7QLayout10invalidateEv
+400 (int (*)(...))QLayoutItem::widget
+408 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+416 (int (*)(...))QLayoutItem::spacerItem
+424 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QStackedLayout
+ size=32 align=8
+ base size=28 base align=8
+QStackedLayout (0x0x7f0b1e775ea0) 0
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 16)
+ QLayout (0x0x7f0b1e898460) 0
+ primary-for QStackedLayout (0x0x7f0b1e775ea0)
+ QObject (0x0x7f0b1e8a6d80) 0
+ primary-for QLayout (0x0x7f0b1e898460)
+ QLayoutItem (0x0x7f0b1e8a6de0) 16
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 296)
+
+Class QStackedWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedWidget::QPrivateSignal (0x0x7f0b1e507180) 0 empty
+
+Vtable for QStackedWidget
+QStackedWidget::_ZTV14QStackedWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QStackedWidget)
+16 (int (*)(...))QStackedWidget::metaObject
+24 (int (*)(...))QStackedWidget::qt_metacast
+32 (int (*)(...))QStackedWidget::qt_metacall
+40 (int (*)(...))QStackedWidget::~QStackedWidget
+48 (int (*)(...))QStackedWidget::~QStackedWidget
+56 (int (*)(...))QStackedWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI14QStackedWidget)
+456 (int (*)(...))QStackedWidget::_ZThn16_N14QStackedWidgetD1Ev
+464 (int (*)(...))QStackedWidget::_ZThn16_N14QStackedWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QStackedWidget
+ size=40 align=8
+ base size=40 base align=8
+QStackedWidget (0x0x7f0b1e775f08) 0
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 16)
+ QFrame (0x0x7f0b1e775f70) 0
+ primary-for QStackedWidget (0x0x7f0b1e775f08)
+ QWidget (0x0x7f0b1e8985b0) 0
+ primary-for QFrame (0x0x7f0b1e775f70)
+ QObject (0x0x7f0b1e5070c0) 0
+ primary-for QWidget (0x0x7f0b1e8985b0)
+ QPaintDevice (0x0x7f0b1e507120) 16
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 456)
+
+Class QStatusBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStatusBar::QPrivateSignal (0x0x7f0b1e5073c0) 0 empty
+
+Vtable for QStatusBar
+QStatusBar::_ZTV10QStatusBar: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QStatusBar)
+16 (int (*)(...))QStatusBar::metaObject
+24 (int (*)(...))QStatusBar::qt_metacast
+32 (int (*)(...))QStatusBar::qt_metacall
+40 (int (*)(...))QStatusBar::~QStatusBar
+48 (int (*)(...))QStatusBar::~QStatusBar
+56 (int (*)(...))QStatusBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QStatusBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QStatusBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QStatusBar::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI10QStatusBar)
+448 (int (*)(...))QStatusBar::_ZThn16_N10QStatusBarD1Ev
+456 (int (*)(...))QStatusBar::_ZThn16_N10QStatusBarD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QStatusBar
+ size=40 align=8
+ base size=40 base align=8
+QStatusBar (0x0x7f0b1e514000) 0
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 16)
+ QWidget (0x0x7f0b1e898620) 0
+ primary-for QStatusBar (0x0x7f0b1e514000)
+ QObject (0x0x7f0b1e507300) 0
+ primary-for QWidget (0x0x7f0b1e898620)
+ QPaintDevice (0x0x7f0b1e507360) 16
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 448)
+
+Class QStyledItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyledItemDelegate::QPrivateSignal (0x0x7f0b1e5075a0) 0 empty
+
+Vtable for QStyledItemDelegate
+QStyledItemDelegate::_ZTV19QStyledItemDelegate: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QStyledItemDelegate)
+16 (int (*)(...))QStyledItemDelegate::metaObject
+24 (int (*)(...))QStyledItemDelegate::qt_metacast
+32 (int (*)(...))QStyledItemDelegate::qt_metacall
+40 (int (*)(...))QStyledItemDelegate::~QStyledItemDelegate
+48 (int (*)(...))QStyledItemDelegate::~QStyledItemDelegate
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QStyledItemDelegate::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStyledItemDelegate::paint
+120 (int (*)(...))QStyledItemDelegate::sizeHint
+128 (int (*)(...))QStyledItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QStyledItemDelegate::setEditorData
+152 (int (*)(...))QStyledItemDelegate::setModelData
+160 (int (*)(...))QStyledItemDelegate::updateEditorGeometry
+168 (int (*)(...))QStyledItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+192 (int (*)(...))QStyledItemDelegate::displayText
+200 (int (*)(...))QStyledItemDelegate::initStyleOption
+
+Class QStyledItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QStyledItemDelegate (0x0x7f0b1e514068) 0
+ vptr=((& QStyledItemDelegate::_ZTV19QStyledItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7f0b1e5140d0) 0
+ primary-for QStyledItemDelegate (0x0x7f0b1e514068)
+ QObject (0x0x7f0b1e507540) 0
+ primary-for QAbstractItemDelegate (0x0x7f0b1e5140d0)
+
+Class QStyleFactory
+ size=1 align=1
+ base size=0 base align=1
+QStyleFactory (0x0x7f0b1e507720) 0 empty
+
+Class QStylePainter
+ size=24 align=8
+ base size=24 base align=8
+QStylePainter (0x0x7f0b1e514138) 0
+ QPainter (0x0x7f0b1e507780) 0
+
+Class QStylePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStylePlugin::QPrivateSignal (0x0x7f0b1e53c060) 0 empty
+
+Vtable for QStylePlugin
+QStylePlugin::_ZTV12QStylePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QStylePlugin)
+16 (int (*)(...))QStylePlugin::metaObject
+24 (int (*)(...))QStylePlugin::qt_metacast
+32 (int (*)(...))QStylePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QStylePlugin
+ size=16 align=8
+ base size=16 base align=8
+QStylePlugin (0x0x7f0b1e5141a0) 0
+ vptr=((& QStylePlugin::_ZTV12QStylePlugin) + 16)
+ QObject (0x0x7f0b1e53c000) 0
+ primary-for QStylePlugin (0x0x7f0b1e5141a0)
+
+Class QSystemTrayIcon::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSystemTrayIcon::QPrivateSignal (0x0x7f0b1e53c180) 0 empty
+
+Vtable for QSystemTrayIcon
+QSystemTrayIcon::_ZTV15QSystemTrayIcon: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSystemTrayIcon)
+16 (int (*)(...))QSystemTrayIcon::metaObject
+24 (int (*)(...))QSystemTrayIcon::qt_metacast
+32 (int (*)(...))QSystemTrayIcon::qt_metacall
+40 (int (*)(...))QSystemTrayIcon::~QSystemTrayIcon
+48 (int (*)(...))QSystemTrayIcon::~QSystemTrayIcon
+56 (int (*)(...))QSystemTrayIcon::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSystemTrayIcon
+ size=16 align=8
+ base size=16 base align=8
+QSystemTrayIcon (0x0x7f0b1e514208) 0
+ vptr=((& QSystemTrayIcon::_ZTV15QSystemTrayIcon) + 16)
+ QObject (0x0x7f0b1e53c120) 0
+ primary-for QSystemTrayIcon (0x0x7f0b1e514208)
+
+Class QTableView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableView::QPrivateSignal (0x0x7f0b1e53c480) 0 empty
+
+Vtable for QTableView
+QTableView::_ZTV10QTableView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTableView)
+16 (int (*)(...))QTableView::metaObject
+24 (int (*)(...))QTableView::qt_metacast
+32 (int (*)(...))QTableView::qt_metacall
+40 (int (*)(...))QTableView::~QTableView
+48 (int (*)(...))QTableView::~QTableView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTableView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTableView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QTableView::scrollContentsBy
+464 (int (*)(...))QTableView::viewportSizeHint
+472 (int (*)(...))QTableView::setModel
+480 (int (*)(...))QTableView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QTableView::visualRect
+504 (int (*)(...))QTableView::scrollTo
+512 (int (*)(...))QTableView::indexAt
+520 (int (*)(...))QTableView::sizeHintForRow
+528 (int (*)(...))QTableView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QTableView::setRootIndex
+560 (int (*)(...))QTableView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QTableView::selectionChanged
+608 (int (*)(...))QTableView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTableView::updateGeometries
+640 (int (*)(...))QTableView::verticalScrollbarAction
+648 (int (*)(...))QTableView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTableView::moveCursor
+704 (int (*)(...))QTableView::horizontalOffset
+712 (int (*)(...))QTableView::verticalOffset
+720 (int (*)(...))QTableView::isIndexHidden
+728 (int (*)(...))QTableView::setSelection
+736 (int (*)(...))QTableView::visualRegionForSelection
+744 (int (*)(...))QTableView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QTableView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI10QTableView)
+800 (int (*)(...))QTableView::_ZThn16_N10QTableViewD1Ev
+808 (int (*)(...))QTableView::_ZThn16_N10QTableViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTableView
+ size=40 align=8
+ base size=40 base align=8
+QTableView (0x0x7f0b1e514270) 0
+ vptr=((& QTableView::_ZTV10QTableView) + 16)
+ QAbstractItemView (0x0x7f0b1e5142d8) 0
+ primary-for QTableView (0x0x7f0b1e514270)
+ QAbstractScrollArea (0x0x7f0b1e514340) 0
+ primary-for QAbstractItemView (0x0x7f0b1e5142d8)
+ QFrame (0x0x7f0b1e5143a8) 0
+ primary-for QAbstractScrollArea (0x0x7f0b1e514340)
+ QWidget (0x0x7f0b1e898b60) 0
+ primary-for QFrame (0x0x7f0b1e5143a8)
+ QObject (0x0x7f0b1e53c3c0) 0
+ primary-for QWidget (0x0x7f0b1e898b60)
+ QPaintDevice (0x0x7f0b1e53c420) 16
+ vptr=((& QTableView::_ZTV10QTableView) + 800)
+
+Class QTableWidgetSelectionRange
+ size=16 align=4
+ base size=16 base align=4
+QTableWidgetSelectionRange (0x0x7f0b1e53c600) 0
+
+Vtable for QTableWidgetItem
+QTableWidgetItem::_ZTV16QTableWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QTableWidgetItem)
+16 (int (*)(...))QTableWidgetItem::~QTableWidgetItem
+24 (int (*)(...))QTableWidgetItem::~QTableWidgetItem
+32 (int (*)(...))QTableWidgetItem::clone
+40 (int (*)(...))QTableWidgetItem::data
+48 (int (*)(...))QTableWidgetItem::setData
+56 (int (*)(...))QTableWidgetItem::operator<
+64 (int (*)(...))QTableWidgetItem::read
+72 (int (*)(...))QTableWidgetItem::write
+
+Class QTableWidgetItem
+ size=64 align=8
+ base size=60 base align=8
+QTableWidgetItem (0x0x7f0b1e53ca20) 0
+ vptr=((& QTableWidgetItem::_ZTV16QTableWidgetItem) + 16)
+
+Class QTableWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableWidget::QPrivateSignal (0x0x7f0b1e584d80) 0 empty
+
+Vtable for QTableWidget
+QTableWidget::_ZTV12QTableWidget: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTableWidget)
+16 (int (*)(...))QTableWidget::metaObject
+24 (int (*)(...))QTableWidget::qt_metacast
+32 (int (*)(...))QTableWidget::qt_metacall
+40 (int (*)(...))QTableWidget::~QTableWidget
+48 (int (*)(...))QTableWidget::~QTableWidget
+56 (int (*)(...))QTableWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTableView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTableView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QTableWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QTableView::scrollContentsBy
+464 (int (*)(...))QTableView::viewportSizeHint
+472 (int (*)(...))QTableWidget::setModel
+480 (int (*)(...))QTableView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QTableView::visualRect
+504 (int (*)(...))QTableView::scrollTo
+512 (int (*)(...))QTableView::indexAt
+520 (int (*)(...))QTableView::sizeHintForRow
+528 (int (*)(...))QTableView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QTableView::setRootIndex
+560 (int (*)(...))QTableView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QTableView::selectionChanged
+608 (int (*)(...))QTableView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTableView::updateGeometries
+640 (int (*)(...))QTableView::verticalScrollbarAction
+648 (int (*)(...))QTableView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTableView::moveCursor
+704 (int (*)(...))QTableView::horizontalOffset
+712 (int (*)(...))QTableView::verticalOffset
+720 (int (*)(...))QTableView::isIndexHidden
+728 (int (*)(...))QTableView::setSelection
+736 (int (*)(...))QTableView::visualRegionForSelection
+744 (int (*)(...))QTableView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QTableView::initViewItemOption
+784 (int (*)(...))QTableWidget::mimeTypes
+792 (int (*)(...))QTableWidget::mimeData
+800 (int (*)(...))QTableWidget::dropMimeData
+808 (int (*)(...))QTableWidget::supportedDropActions
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI12QTableWidget)
+832 (int (*)(...))QTableWidget::_ZThn16_N12QTableWidgetD1Ev
+840 (int (*)(...))QTableWidget::_ZThn16_N12QTableWidgetD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTableWidget
+ size=40 align=8
+ base size=40 base align=8
+QTableWidget (0x0x7f0b1e514c98) 0
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 16)
+ QTableView (0x0x7f0b1e514d00) 0
+ primary-for QTableWidget (0x0x7f0b1e514c98)
+ QAbstractItemView (0x0x7f0b1e514d68) 0
+ primary-for QTableView (0x0x7f0b1e514d00)
+ QAbstractScrollArea (0x0x7f0b1e514dd0) 0
+ primary-for QAbstractItemView (0x0x7f0b1e514d68)
+ QFrame (0x0x7f0b1e514e38) 0
+ primary-for QAbstractScrollArea (0x0x7f0b1e514dd0)
+ QWidget (0x0x7f0b1ea22e70) 0
+ primary-for QFrame (0x0x7f0b1e514e38)
+ QObject (0x0x7f0b1e584cc0) 0
+ primary-for QWidget (0x0x7f0b1ea22e70)
+ QPaintDevice (0x0x7f0b1e584d20) 16
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 832)
+
+Class QTextBrowser::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBrowser::QPrivateSignal (0x0x7f0b1e5e8120) 0 empty
+
+Vtable for QTextBrowser
+QTextBrowser::_ZTV12QTextBrowser: 79 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTextBrowser)
+16 (int (*)(...))QTextBrowser::metaObject
+24 (int (*)(...))QTextBrowser::qt_metacast
+32 (int (*)(...))QTextBrowser::qt_metacall
+40 (int (*)(...))QTextBrowser::~QTextBrowser
+48 (int (*)(...))QTextBrowser::~QTextBrowser
+56 (int (*)(...))QTextBrowser::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTextBrowser::mousePressEvent
+176 (int (*)(...))QTextBrowser::mouseReleaseEvent
+184 (int (*)(...))QTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QTextBrowser::mouseMoveEvent
+200 (int (*)(...))QTextEdit::wheelEvent
+208 (int (*)(...))QTextBrowser::keyPressEvent
+216 (int (*)(...))QTextEdit::keyReleaseEvent
+224 (int (*)(...))QTextEdit::focusInEvent
+232 (int (*)(...))QTextBrowser::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTextBrowser::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QTextEdit::dragEnterEvent
+320 (int (*)(...))QTextEdit::dragMoveEvent
+328 (int (*)(...))QTextEdit::dragLeaveEvent
+336 (int (*)(...))QTextEdit::dropEvent
+344 (int (*)(...))QTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QTextEdit::inputMethodEvent
+416 (int (*)(...))QTextEdit::inputMethodQuery
+424 (int (*)(...))QTextBrowser::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QTextBrowser::loadResource
+480 (int (*)(...))QTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QTextEdit::canInsertFromMimeData
+496 (int (*)(...))QTextEdit::insertFromMimeData
+504 (int (*)(...))QTextEdit::doSetTextCursor
+512 (int (*)(...))QTextBrowser::backward
+520 (int (*)(...))QTextBrowser::forward
+528 (int (*)(...))QTextBrowser::home
+536 (int (*)(...))QTextBrowser::reload
+544 (int (*)(...))QTextBrowser::doSetSource
+552 (int (*)(...))-16
+560 (int (*)(...))(& _ZTI12QTextBrowser)
+568 (int (*)(...))QTextBrowser::_ZThn16_N12QTextBrowserD1Ev
+576 (int (*)(...))QTextBrowser::_ZThn16_N12QTextBrowserD0Ev
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+592 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+600 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+608 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+616 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+624 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTextBrowser
+ size=40 align=8
+ base size=40 base align=8
+QTextBrowser (0x0x7f0b1e514ea0) 0
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 16)
+ QTextEdit (0x0x7f0b1e514f08) 0
+ primary-for QTextBrowser (0x0x7f0b1e514ea0)
+ QAbstractScrollArea (0x0x7f0b1e514f70) 0
+ primary-for QTextEdit (0x0x7f0b1e514f08)
+ QFrame (0x0x7f0b1e514c30) 0
+ primary-for QAbstractScrollArea (0x0x7f0b1e514f70)
+ QWidget (0x0x7f0b1e898d90) 0
+ primary-for QFrame (0x0x7f0b1e514c30)
+ QObject (0x0x7f0b1e5e8060) 0
+ primary-for QWidget (0x0x7f0b1e898d90)
+ QPaintDevice (0x0x7f0b1e5e80c0) 16
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 568)
+
+Class QToolBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBar::QPrivateSignal (0x0x7f0b1e5e8360) 0 empty
+
+Vtable for QToolBar
+QToolBar::_ZTV8QToolBar: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QToolBar)
+16 (int (*)(...))QToolBar::metaObject
+24 (int (*)(...))QToolBar::qt_metacast
+32 (int (*)(...))QToolBar::qt_metacall
+40 (int (*)(...))QToolBar::~QToolBar
+48 (int (*)(...))QToolBar::~QToolBar
+56 (int (*)(...))QToolBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QToolBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QToolBar::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QToolBar::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI8QToolBar)
+456 (int (*)(...))QToolBar::_ZThn16_N8QToolBarD1Ev
+464 (int (*)(...))QToolBar::_ZThn16_N8QToolBarD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolBar
+ size=40 align=8
+ base size=40 base align=8
+QToolBar (0x0x7f0b1e5f9000) 0
+ vptr=((& QToolBar::_ZTV8QToolBar) + 16)
+ QWidget (0x0x7f0b1e898e00) 0
+ primary-for QToolBar (0x0x7f0b1e5f9000)
+ QObject (0x0x7f0b1e5e82a0) 0
+ primary-for QWidget (0x0x7f0b1e898e00)
+ QPaintDevice (0x0x7f0b1e5e8300) 16
+ vptr=((& QToolBar::_ZTV8QToolBar) + 456)
+
+Class QToolBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBox::QPrivateSignal (0x0x7f0b1e5e87e0) 0 empty
+
+Vtable for QToolBox
+QToolBox::_ZTV8QToolBox: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QToolBox)
+16 (int (*)(...))QToolBox::metaObject
+24 (int (*)(...))QToolBox::qt_metacast
+32 (int (*)(...))QToolBox::qt_metacall
+40 (int (*)(...))QToolBox::~QToolBox
+48 (int (*)(...))QToolBox::~QToolBox
+56 (int (*)(...))QToolBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QToolBox::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QToolBox::itemInserted
+448 (int (*)(...))QToolBox::itemRemoved
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI8QToolBox)
+472 (int (*)(...))QToolBox::_ZThn16_N8QToolBoxD1Ev
+480 (int (*)(...))QToolBox::_ZThn16_N8QToolBoxD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolBox
+ size=40 align=8
+ base size=40 base align=8
+QToolBox (0x0x7f0b1e5f9068) 0
+ vptr=((& QToolBox::_ZTV8QToolBox) + 16)
+ QFrame (0x0x7f0b1e5f90d0) 0
+ primary-for QToolBox (0x0x7f0b1e5f9068)
+ QWidget (0x0x7f0b1e898e70) 0
+ primary-for QFrame (0x0x7f0b1e5f90d0)
+ QObject (0x0x7f0b1e5e8720) 0
+ primary-for QWidget (0x0x7f0b1e898e70)
+ QPaintDevice (0x0x7f0b1e5e8780) 16
+ vptr=((& QToolBox::_ZTV8QToolBox) + 472)
+
+Class QToolButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolButton::QPrivateSignal (0x0x7f0b1e5e8b40) 0 empty
+
+Vtable for QToolButton
+QToolButton::_ZTV11QToolButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QToolButton)
+16 (int (*)(...))QToolButton::metaObject
+24 (int (*)(...))QToolButton::qt_metacast
+32 (int (*)(...))QToolButton::qt_metacall
+40 (int (*)(...))QToolButton::~QToolButton
+48 (int (*)(...))QToolButton::~QToolButton
+56 (int (*)(...))QToolButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QToolButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QToolButton::sizeHint
+136 (int (*)(...))QToolButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QToolButton::mousePressEvent
+176 (int (*)(...))QToolButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QToolButton::enterEvent
+248 (int (*)(...))QToolButton::leaveEvent
+256 (int (*)(...))QToolButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QToolButton::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QToolButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QToolButton::nextCheckState
+456 (int (*)(...))QToolButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI11QToolButton)
+480 (int (*)(...))QToolButton::_ZThn16_N11QToolButtonD1Ev
+488 (int (*)(...))QToolButton::_ZThn16_N11QToolButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolButton
+ size=40 align=8
+ base size=40 base align=8
+QToolButton (0x0x7f0b1e5f9138) 0
+ vptr=((& QToolButton::_ZTV11QToolButton) + 16)
+ QAbstractButton (0x0x7f0b1e5f91a0) 0
+ primary-for QToolButton (0x0x7f0b1e5f9138)
+ QWidget (0x0x7f0b1e898ee0) 0
+ primary-for QAbstractButton (0x0x7f0b1e5f91a0)
+ QObject (0x0x7f0b1e5e8a80) 0
+ primary-for QWidget (0x0x7f0b1e898ee0)
+ QPaintDevice (0x0x7f0b1e5e8ae0) 16
+ vptr=((& QToolButton::_ZTV11QToolButton) + 480)
+
+Class QToolTip
+ size=1 align=1
+ base size=0 base align=1
+QToolTip (0x0x7f0b1e5e8d80) 0 empty
+
+Class QTreeView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeView::QPrivateSignal (0x0x7f0b1e5e8f00) 0 empty
+
+Vtable for QTreeView
+QTreeView::_ZTV9QTreeView: 110 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTreeView)
+16 (int (*)(...))QTreeView::metaObject
+24 (int (*)(...))QTreeView::qt_metacast
+32 (int (*)(...))QTreeView::qt_metacall
+40 (int (*)(...))QTreeView::~QTreeView
+48 (int (*)(...))QTreeView::~QTreeView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeView::setModel
+480 (int (*)(...))QTreeView::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))-16
+808 (int (*)(...))(& _ZTI9QTreeView)
+816 (int (*)(...))QTreeView::_ZThn16_N9QTreeViewD1Ev
+824 (int (*)(...))QTreeView::_ZThn16_N9QTreeViewD0Ev
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTreeView
+ size=40 align=8
+ base size=40 base align=8
+QTreeView (0x0x7f0b1e5f9208) 0
+ vptr=((& QTreeView::_ZTV9QTreeView) + 16)
+ QAbstractItemView (0x0x7f0b1e5f9270) 0
+ primary-for QTreeView (0x0x7f0b1e5f9208)
+ QAbstractScrollArea (0x0x7f0b1e5f92d8) 0
+ primary-for QAbstractItemView (0x0x7f0b1e5f9270)
+ QFrame (0x0x7f0b1e5f9340) 0
+ primary-for QAbstractScrollArea (0x0x7f0b1e5f92d8)
+ QWidget (0x0x7f0b1e6210e0) 0
+ primary-for QFrame (0x0x7f0b1e5f9340)
+ QObject (0x0x7f0b1e5e8e40) 0
+ primary-for QWidget (0x0x7f0b1e6210e0)
+ QPaintDevice (0x0x7f0b1e5e8ea0) 16
+ vptr=((& QTreeView::_ZTV9QTreeView) + 816)
+
+Class QTreeWidgetItemIterator
+ size=24 align=8
+ base size=20 base align=8
+QTreeWidgetItemIterator (0x0x7f0b1e6540c0) 0
+
+Vtable for QTreeWidgetItem
+QTreeWidgetItem::_ZTV15QTreeWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QTreeWidgetItem)
+16 (int (*)(...))QTreeWidgetItem::~QTreeWidgetItem
+24 (int (*)(...))QTreeWidgetItem::~QTreeWidgetItem
+32 (int (*)(...))QTreeWidgetItem::clone
+40 (int (*)(...))QTreeWidgetItem::data
+48 (int (*)(...))QTreeWidgetItem::setData
+56 (int (*)(...))QTreeWidgetItem::operator<
+64 (int (*)(...))QTreeWidgetItem::read
+72 (int (*)(...))QTreeWidgetItem::write
+
+Class QTreeWidgetItem
+ size=96 align=8
+ base size=92 base align=8
+QTreeWidgetItem (0x0x7f0b1e654780) 0
+ vptr=((& QTreeWidgetItem::_ZTV15QTreeWidgetItem) + 16)
+
+Class QTreeWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeWidget::QPrivateSignal (0x0x7f0b1e3275a0) 0 empty
+
+Vtable for QTreeWidget
+QTreeWidget::_ZTV11QTreeWidget: 114 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTreeWidget)
+16 (int (*)(...))QTreeWidget::metaObject
+24 (int (*)(...))QTreeWidget::qt_metacast
+32 (int (*)(...))QTreeWidget::qt_metacall
+40 (int (*)(...))QTreeWidget::~QTreeWidget
+48 (int (*)(...))QTreeWidget::~QTreeWidget
+56 (int (*)(...))QTreeWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QTreeWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeWidget::setModel
+480 (int (*)(...))QTreeWidget::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))QTreeWidget::mimeTypes
+808 (int (*)(...))QTreeWidget::mimeData
+816 (int (*)(...))QTreeWidget::dropMimeData
+824 (int (*)(...))QTreeWidget::supportedDropActions
+832 (int (*)(...))-16
+840 (int (*)(...))(& _ZTI11QTreeWidget)
+848 (int (*)(...))QTreeWidget::_ZThn16_N11QTreeWidgetD1Ev
+856 (int (*)(...))QTreeWidget::_ZThn16_N11QTreeWidgetD0Ev
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+896 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+904 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTreeWidget
+ size=40 align=8
+ base size=40 base align=8
+QTreeWidget (0x0x7f0b1e2e3680) 0
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 16)
+ QTreeView (0x0x7f0b1e2e36e8) 0
+ primary-for QTreeWidget (0x0x7f0b1e2e3680)
+ QAbstractItemView (0x0x7f0b1e2e3750) 0
+ primary-for QTreeView (0x0x7f0b1e2e36e8)
+ QAbstractScrollArea (0x0x7f0b1e2e37b8) 0
+ primary-for QAbstractItemView (0x0x7f0b1e2e3750)
+ QFrame (0x0x7f0b1e2e3820) 0
+ primary-for QAbstractScrollArea (0x0x7f0b1e2e37b8)
+ QWidget (0x0x7f0b1e621e70) 0
+ primary-for QFrame (0x0x7f0b1e2e3820)
+ QObject (0x0x7f0b1e3274e0) 0
+ primary-for QWidget (0x0x7f0b1e621e70)
+ QPaintDevice (0x0x7f0b1e327540) 16
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 848)
+
+Class QUndoView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoView::QPrivateSignal (0x0x7f0b1e327ba0) 0 empty
+
+Vtable for QUndoView
+QUndoView::_ZTV9QUndoView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QUndoView)
+16 (int (*)(...))QUndoView::metaObject
+24 (int (*)(...))QUndoView::qt_metacast
+32 (int (*)(...))QUndoView::qt_metacall
+40 (int (*)(...))QUndoView::~QUndoView
+48 (int (*)(...))QUndoView::~QUndoView
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI9QUndoView)
+800 (int (*)(...))QUndoView::_ZThn16_N9QUndoViewD1Ev
+808 (int (*)(...))QUndoView::_ZThn16_N9QUndoViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QUndoView
+ size=40 align=8
+ base size=40 base align=8
+QUndoView (0x0x7f0b1e2e3a28) 0
+ vptr=((& QUndoView::_ZTV9QUndoView) + 16)
+ QListView (0x0x7f0b1e2e3a90) 0
+ primary-for QUndoView (0x0x7f0b1e2e3a28)
+ QAbstractItemView (0x0x7f0b1e2e3af8) 0
+ primary-for QListView (0x0x7f0b1e2e3a90)
+ QAbstractScrollArea (0x0x7f0b1e2e3b60) 0
+ primary-for QAbstractItemView (0x0x7f0b1e2e3af8)
+ QFrame (0x0x7f0b1e2e3bc8) 0
+ primary-for QAbstractScrollArea (0x0x7f0b1e2e3b60)
+ QWidget (0x0x7f0b1e621a10) 0
+ primary-for QFrame (0x0x7f0b1e2e3bc8)
+ QObject (0x0x7f0b1e327ae0) 0
+ primary-for QWidget (0x0x7f0b1e621a10)
+ QPaintDevice (0x0x7f0b1e327b40) 16
+ vptr=((& QUndoView::_ZTV9QUndoView) + 800)
+
+Class QWhatsThis
+ size=1 align=1
+ base size=0 base align=1
+QWhatsThis (0x0x7f0b1e327d20) 0 empty
+
+Class QWidgetAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidgetAction::QPrivateSignal (0x0x7f0b1e327de0) 0 empty
+
+Vtable for QWidgetAction
+QWidgetAction::_ZTV13QWidgetAction: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QWidgetAction)
+16 (int (*)(...))QWidgetAction::metaObject
+24 (int (*)(...))QWidgetAction::qt_metacast
+32 (int (*)(...))QWidgetAction::qt_metacall
+40 (int (*)(...))QWidgetAction::~QWidgetAction
+48 (int (*)(...))QWidgetAction::~QWidgetAction
+56 (int (*)(...))QWidgetAction::event
+64 (int (*)(...))QWidgetAction::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidgetAction::createWidget
+120 (int (*)(...))QWidgetAction::deleteWidget
+
+Class QWidgetAction
+ size=16 align=8
+ base size=16 base align=8
+QWidgetAction (0x0x7f0b1e2e3c30) 0
+ vptr=((& QWidgetAction::_ZTV13QWidgetAction) + 16)
+ QAction (0x0x7f0b1e2e3c98) 0
+ primary-for QWidgetAction (0x0x7f0b1e2e3c30)
+ QObject (0x0x7f0b1e327d80) 0
+ primary-for QAction (0x0x7f0b1e2e3c98)
+
+Class QWizard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizard::QPrivateSignal (0x0x7f0b1e368060) 0 empty
+
+Vtable for QWizard
+QWizard::_ZTV7QWizard: 73 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWizard)
+16 (int (*)(...))QWizard::metaObject
+24 (int (*)(...))QWizard::qt_metacast
+32 (int (*)(...))QWizard::qt_metacall
+40 (int (*)(...))QWizard::~QWizard
+48 (int (*)(...))QWizard::~QWizard
+56 (int (*)(...))QWizard::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWizard::setVisible
+128 (int (*)(...))QWizard::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWizard::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWizard::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QWizard::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))QWizard::validateCurrentPage
+480 (int (*)(...))QWizard::nextId
+488 (int (*)(...))QWizard::initializePage
+496 (int (*)(...))QWizard::cleanupPage
+504 (int (*)(...))-16
+512 (int (*)(...))(& _ZTI7QWizard)
+520 (int (*)(...))QWizard::_ZThn16_N7QWizardD1Ev
+528 (int (*)(...))QWizard::_ZThn16_N7QWizardD0Ev
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWizard
+ size=40 align=8
+ base size=40 base align=8
+QWizard (0x0x7f0b1e2e3d00) 0
+ vptr=((& QWizard::_ZTV7QWizard) + 16)
+ QDialog (0x0x7f0b1e2e3d68) 0
+ primary-for QWizard (0x0x7f0b1e2e3d00)
+ QWidget (0x0x7f0b1e367000) 0
+ primary-for QDialog (0x0x7f0b1e2e3d68)
+ QObject (0x0x7f0b1e327f60) 0
+ primary-for QWidget (0x0x7f0b1e367000)
+ QPaintDevice (0x0x7f0b1e368000) 16
+ vptr=((& QWizard::_ZTV7QWizard) + 520)
+
+Class QWizardPage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizardPage::QPrivateSignal (0x0x7f0b1e3687e0) 0 empty
+
+Vtable for QWizardPage
+QWizardPage::_ZTV11QWizardPage: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWizardPage)
+16 (int (*)(...))QWizardPage::metaObject
+24 (int (*)(...))QWizardPage::qt_metacast
+32 (int (*)(...))QWizardPage::qt_metacall
+40 (int (*)(...))QWizardPage::~QWizardPage
+48 (int (*)(...))QWizardPage::~QWizardPage
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QWizardPage::initializePage
+440 (int (*)(...))QWizardPage::cleanupPage
+448 (int (*)(...))QWizardPage::validatePage
+456 (int (*)(...))QWizardPage::isComplete
+464 (int (*)(...))QWizardPage::nextId
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QWizardPage)
+488 (int (*)(...))QWizardPage::_ZThn16_N11QWizardPageD1Ev
+496 (int (*)(...))QWizardPage::_ZThn16_N11QWizardPageD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWizardPage
+ size=40 align=8
+ base size=40 base align=8
+QWizardPage (0x0x7f0b1e2e3f08) 0
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 16)
+ QWidget (0x0x7f0b1e36f230) 0
+ primary-for QWizardPage (0x0x7f0b1e2e3f08)
+ QObject (0x0x7f0b1e368720) 0
+ primary-for QWidget (0x0x7f0b1e36f230)
+ QPaintDevice (0x0x7f0b1e368780) 16
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 488)
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7f0b1e368960) 0
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7f0b1e368de0) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7f0b1e41fde0) 0 empty
+
+Vtable for QOpenGLDebugLogger
+QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QOpenGLDebugLogger)
+16 (int (*)(...))QOpenGLDebugLogger::metaObject
+24 (int (*)(...))QOpenGLDebugLogger::qt_metacast
+32 (int (*)(...))QOpenGLDebugLogger::qt_metacall
+40 (int (*)(...))QOpenGLDebugLogger::~QOpenGLDebugLogger
+48 (int (*)(...))QOpenGLDebugLogger::~QOpenGLDebugLogger
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLDebugLogger
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLDebugLogger (0x0x7f0b1e424410) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16)
+ QObject (0x0x7f0b1e41fd80) 0
+ primary-for QOpenGLDebugLogger (0x0x7f0b1e424410)
+
+Vtable for QOpenGLFramebufferObject
+QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QOpenGLFramebufferObject)
+16 (int (*)(...))QOpenGLFramebufferObject::~QOpenGLFramebufferObject
+24 (int (*)(...))QOpenGLFramebufferObject::~QOpenGLFramebufferObject
+
+Class QOpenGLFramebufferObject
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLFramebufferObject (0x0x7f0b1e48b180) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7f0b1e48b420) 0
+
+Vtable for QOpenGLPaintDevice
+QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QOpenGLPaintDevice)
+16 (int (*)(...))QOpenGLPaintDevice::~QOpenGLPaintDevice
+24 (int (*)(...))QOpenGLPaintDevice::~QOpenGLPaintDevice
+32 (int (*)(...))QOpenGLPaintDevice::devType
+40 (int (*)(...))QOpenGLPaintDevice::paintEngine
+48 (int (*)(...))QOpenGLPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QOpenGLPaintDevice::ensureActiveTarget
+
+Class QOpenGLPaintDevice
+ size=24 align=8
+ base size=24 base align=8
+QOpenGLPaintDevice (0x0x7f0b1e424478) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16)
+ QPaintDevice (0x0x7f0b1e48b480) 0
+ primary-for QOpenGLPaintDevice (0x0x7f0b1e424478)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7f0b1e48b6c0) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7f0b1e0dbd80) 0 empty
+
+Vtable for QOpenGLShader
+QOpenGLShader::_ZTV13QOpenGLShader: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QOpenGLShader)
+16 (int (*)(...))QOpenGLShader::metaObject
+24 (int (*)(...))QOpenGLShader::qt_metacast
+32 (int (*)(...))QOpenGLShader::qt_metacall
+40 (int (*)(...))QOpenGLShader::~QOpenGLShader
+48 (int (*)(...))QOpenGLShader::~QOpenGLShader
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLShader
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLShader (0x0x7f0b1e0e2e38) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16)
+ QObject (0x0x7f0b1e0dbd20) 0
+ primary-for QOpenGLShader (0x0x7f0b1e0e2e38)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7f0b1e0fa2a0) 0 empty
+
+Vtable for QOpenGLShaderProgram
+QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QOpenGLShaderProgram)
+16 (int (*)(...))QOpenGLShaderProgram::metaObject
+24 (int (*)(...))QOpenGLShaderProgram::qt_metacast
+32 (int (*)(...))QOpenGLShaderProgram::qt_metacall
+40 (int (*)(...))QOpenGLShaderProgram::~QOpenGLShaderProgram
+48 (int (*)(...))QOpenGLShaderProgram::~QOpenGLShaderProgram
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QOpenGLShaderProgram::link
+
+Class QOpenGLShaderProgram
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLShaderProgram (0x0x7f0b1e118000) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16)
+ QObject (0x0x7f0b1e0fa240) 0
+ primary-for QOpenGLShaderProgram (0x0x7f0b1e118000)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7f0b1e0fa420) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7f0b1e1a2540) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7f0b1e1a2780) 0 empty
+
+Vtable for QOpenGLTimerQuery
+QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QOpenGLTimerQuery)
+16 (int (*)(...))QOpenGLTimerQuery::metaObject
+24 (int (*)(...))QOpenGLTimerQuery::qt_metacast
+32 (int (*)(...))QOpenGLTimerQuery::qt_metacall
+40 (int (*)(...))QOpenGLTimerQuery::~QOpenGLTimerQuery
+48 (int (*)(...))QOpenGLTimerQuery::~QOpenGLTimerQuery
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLTimerQuery
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLTimerQuery (0x0x7f0b1e1181a0) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16)
+ QObject (0x0x7f0b1e1a2720) 0
+ primary-for QOpenGLTimerQuery (0x0x7f0b1e1181a0)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7f0b1e1a2960) 0 empty
+
+Vtable for QOpenGLTimeMonitor
+QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QOpenGLTimeMonitor)
+16 (int (*)(...))QOpenGLTimeMonitor::metaObject
+24 (int (*)(...))QOpenGLTimeMonitor::qt_metacast
+32 (int (*)(...))QOpenGLTimeMonitor::qt_metacall
+40 (int (*)(...))QOpenGLTimeMonitor::~QOpenGLTimeMonitor
+48 (int (*)(...))QOpenGLTimeMonitor::~QOpenGLTimeMonitor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLTimeMonitor
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLTimeMonitor (0x0x7f0b1e118208) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16)
+ QObject (0x0x7f0b1e1a2900) 0
+ primary-for QOpenGLTimeMonitor (0x0x7f0b1e118208)
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7f0b1e1a2ae0) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7f0b1e251b40) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7f0b1e251d20) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7f0b1e251d80) 0
+
+Vtable for QAbstractOpenGLFunctions
+QAbstractOpenGLFunctions::_ZTV24QAbstractOpenGLFunctions: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractOpenGLFunctions)
+16 (int (*)(...))QAbstractOpenGLFunctions::~QAbstractOpenGLFunctions
+24 (int (*)(...))QAbstractOpenGLFunctions::~QAbstractOpenGLFunctions
+32 (int (*)(...))QAbstractOpenGLFunctions::initializeOpenGLFunctions
+
+Class QAbstractOpenGLFunctions
+ size=16 align=8
+ base size=16 base align=8
+QAbstractOpenGLFunctions (0x0x7f0b1e251f60) 0
+ vptr=((& QAbstractOpenGLFunctions::_ZTV24QAbstractOpenGLFunctions) + 16)
+
+Class QOpenGLFunctions_1_0_CoreBackend::Functions
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_1_0_CoreBackend::Functions (0x0x7f0b1e26d180) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7f0b1e247a90) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1e26d120) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7f0b1e26d4e0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7f0b1e247af8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1e26d480) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7f0b1e26d840) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7f0b1e247b60) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1e26d7e0) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7f0b1e26dba0) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7f0b1e247bc8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1e26db40) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7f0b1e26df00) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7f0b1e247c30) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1e26dea0) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7f0b1e2902a0) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7f0b1e247c98) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1e290240) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7f0b1e290600) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7f0b1e247d00) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1e2905a0) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7f0b1e290960) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7f0b1e247d68) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1e290900) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7f0b1e290cc0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7f0b1e247dd0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1e290c60) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7f0b1e2bf060) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7f0b1e247e38) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1e2bf000) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7f0b1e2bf3c0) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7f0b1e247ea0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1e2bf360) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7f0b1e2bf720) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7f0b1e247f08) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1e2bf6c0) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7f0b1e2bfa80) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7f0b1e247f70) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1e2bfa20) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7f0b1e2bfde0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7f0b1dee5000) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1e2bfd80) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7f0b1def9180) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7f0b1dee5068) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1def9120) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7f0b1def94e0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7f0b1dee50d0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1def9480) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7f0b1def9840) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7f0b1dee5138) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1def97e0) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7f0b1def9ba0) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7f0b1dee51a0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1def9b40) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7f0b1def9f00) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7f0b1dee5208) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1def9ea0) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7f0b1df4f2a0) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7f0b1dee5270) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1df4f240) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7f0b1df4f600) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7f0b1dee52d8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1df4f5a0) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7f0b1df4f960) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7f0b1dee5340) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1df4f900) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7f0b1df4fcc0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7f0b1dee53a8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1df4fc60) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7f0b1df72060) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7f0b1dee5410) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1df72000) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7f0b1df723c0) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7f0b1dee5478) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1df72360) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7f0b1df72720) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7f0b1dee54e0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1df726c0) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7f0b1df72a80) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7f0b1dee5548) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b1df72a20) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7f0b1df72d80) 0
+
+Class QOpenGLVersionFunctionsFactory
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVersionFunctionsFactory (0x0x7f0b1df72f00) 0 empty
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7f0b1df9b060) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7f0b1df9b0c0) 0
+
+Vtable for QOpenGLVertexArrayObject
+QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QOpenGLVertexArrayObject)
+16 (int (*)(...))QOpenGLVertexArrayObject::metaObject
+24 (int (*)(...))QOpenGLVertexArrayObject::qt_metacast
+32 (int (*)(...))QOpenGLVertexArrayObject::qt_metacall
+40 (int (*)(...))QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject
+48 (int (*)(...))QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLVertexArrayObject
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLVertexArrayObject (0x0x7f0b1dee55b0) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16)
+ QObject (0x0x7f0b1df9b000) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7f0b1dee55b0)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7f0b1df9b720) 0 empty
+
+Vtable for QOpenGLWindow
+QOpenGLWindow::_ZTV13QOpenGLWindow: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QOpenGLWindow)
+16 (int (*)(...))QOpenGLWindow::metaObject
+24 (int (*)(...))QOpenGLWindow::qt_metacast
+32 (int (*)(...))QOpenGLWindow::qt_metacall
+40 (int (*)(...))QOpenGLWindow::~QOpenGLWindow
+48 (int (*)(...))QOpenGLWindow::~QOpenGLWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QOpenGLWindow::resizeEvent
+168 (int (*)(...))QOpenGLWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QOpenGLWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))QOpenGLWindow::initializeGL
+336 (int (*)(...))QOpenGLWindow::resizeGL
+344 (int (*)(...))QOpenGLWindow::paintGL
+352 (int (*)(...))QOpenGLWindow::paintUnderGL
+360 (int (*)(...))QOpenGLWindow::paintOverGL
+368 (int (*)(...))QOpenGLWindow::redirected
+376 (int (*)(...))-16
+384 (int (*)(...))(& _ZTI13QOpenGLWindow)
+392 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD1Ev
+400 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD0Ev
+408 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+416 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+424 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+432 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+440 (int (*)(...))-40
+448 (int (*)(...))(& _ZTI13QOpenGLWindow)
+456 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD1Ev
+464 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD0Ev
+472 (int (*)(...))QPaintDevice::devType
+480 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+488 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QPaintDevice::initPainter
+504 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow10redirectedEP6QPoint
+512 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QOpenGLWindow
+ size=56 align=8
+ base size=50 base align=8
+QOpenGLWindow (0x0x7f0b1dee5680) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16)
+ QPaintDeviceWindow (0x0x7f0b1e25e7e0) 0
+ primary-for QOpenGLWindow (0x0x7f0b1dee5680)
+ QWindow (0x0x7f0b1e25e850) 0
+ primary-for QPaintDeviceWindow (0x0x7f0b1e25e7e0)
+ QObject (0x0x7f0b1df9b600) 0
+ primary-for QWindow (0x0x7f0b1e25e850)
+ QSurface (0x0x7f0b1df9b660) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 392)
+ QPaintDevice (0x0x7f0b1df9b6c0) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 456)
+
+Class QOpenGLWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWidget::QPrivateSignal (0x0x7f0b1df9b960) 0 empty
+
+Vtable for QOpenGLWidget
+QOpenGLWidget::_ZTV13QOpenGLWidget: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QOpenGLWidget)
+16 (int (*)(...))QOpenGLWidget::metaObject
+24 (int (*)(...))QOpenGLWidget::qt_metacast
+32 (int (*)(...))QOpenGLWidget::qt_metacall
+40 (int (*)(...))QOpenGLWidget::~QOpenGLWidget
+48 (int (*)(...))QOpenGLWidget::~QOpenGLWidget
+56 (int (*)(...))QOpenGLWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QOpenGLWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QOpenGLWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QOpenGLWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QOpenGLWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QOpenGLWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QOpenGLWidget::initializeGL
+440 (int (*)(...))QOpenGLWidget::resizeGL
+448 (int (*)(...))QOpenGLWidget::paintGL
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI13QOpenGLWidget)
+472 (int (*)(...))QOpenGLWidget::_ZThn16_N13QOpenGLWidgetD1Ev
+480 (int (*)(...))QOpenGLWidget::_ZThn16_N13QOpenGLWidgetD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QOpenGLWidget::_ZThn16_NK13QOpenGLWidget11paintEngineEv
+504 (int (*)(...))QOpenGLWidget::_ZThn16_NK13QOpenGLWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QOpenGLWidget::_ZThn16_NK13QOpenGLWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QOpenGLWidget
+ size=40 align=8
+ base size=40 base align=8
+QOpenGLWidget (0x0x7f0b1dee5750) 0
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 16)
+ QWidget (0x0x7f0b1e25ea10) 0
+ primary-for QOpenGLWidget (0x0x7f0b1dee5750)
+ QObject (0x0x7f0b1df9b8a0) 0
+ primary-for QWidget (0x0x7f0b1e25ea10)
+ QPaintDevice (0x0x7f0b1df9b900) 16
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 472)
+
+Class QUiLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUiLoader::QPrivateSignal (0x0x7f0b1df9bb40) 0 empty
+
+Vtable for QUiLoader
+QUiLoader::_ZTV9QUiLoader: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QUiLoader)
+16 (int (*)(...))QUiLoader::metaObject
+24 (int (*)(...))QUiLoader::qt_metacast
+32 (int (*)(...))QUiLoader::qt_metacall
+40 (int (*)(...))QUiLoader::~QUiLoader
+48 (int (*)(...))QUiLoader::~QUiLoader
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QUiLoader::createWidget
+120 (int (*)(...))QUiLoader::createLayout
+128 (int (*)(...))QUiLoader::createActionGroup
+136 (int (*)(...))QUiLoader::createAction
+
+Class QUiLoader
+ size=24 align=8
+ base size=24 base align=8
+QUiLoader (0x0x7f0b1dee5820) 0
+ vptr=((& QUiLoader::_ZTV9QUiLoader) + 16)
+ QObject (0x0x7f0b1df9bae0) 0
+ primary-for QUiLoader (0x0x7f0b1dee5820)
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b1dfed180) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b1dfed4e0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b1dfed6c0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b1dfeda20) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b1dfedc00) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b1dfedf60) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b1e00b0c0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b1e00b420) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b1e00b600) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b1e00b960) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b1e00bb40) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b1e00bea0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b1e02a0c0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b1e02a420) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b1e02a600) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b1e02a960) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b1e05d240) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b1e05d5a0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b1e05d720) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b1e05da80) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b1e05dc00) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b1e05df60) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b1e078120) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b1e078480) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b1e078600) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b1e078960) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b1e078ae0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b1e078e40) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b1e093000) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b1e093360) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b1e0934e0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b1e093840) 0 empty
+
diff --git a/tests/auto/bic/data/QtUiTools.6.1.0.linux-gcc-amd64.txt b/tests/auto/bic/data/QtUiTools.6.1.0.linux-gcc-amd64.txt
new file mode 100644
index 000000000..f32345bcb
--- /dev/null
+++ b/tests/auto/bic/data/QtUiTools.6.1.0.linux-gcc-amd64.txt
@@ -0,0 +1,19804 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7fe2315d18a0) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7fe2316da0c0) 0 empty
+
+Class std::__do_is_nt_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_nt_destructible_impl (0x0x7fe2316da300) 0 empty
+
+Class std::__do_is_implicitly_default_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_implicitly_default_constructible_impl (0x0x7fe23170a420) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7fe231938c00) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7fe2319b2a20) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7fe2319b2ae0) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7fe2319e6000) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7fe2319e6060) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7fe2319e60c0) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7fe2319e6120) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7fe2319e6180) 0 empty
+
+Class std::__result_of_memfun_ref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memfun_ref_impl (0x0x7fe2319e6240) 0 empty
+
+Class std::__result_of_memfun_deref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memfun_deref_impl (0x0x7fe2319e6300) 0 empty
+
+Class std::__result_of_memobj_ref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memobj_ref_impl (0x0x7fe2319e63c0) 0 empty
+
+Class std::__result_of_memobj_deref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memobj_deref_impl (0x0x7fe2319e6480) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7fe2319e67e0) 0 empty
+
+Class std::__swappable_details::__do_is_swappable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_details::__do_is_swappable_impl (0x0x7fe2319e6b40) 0 empty
+
+Class std::__swappable_details::__do_is_nothrow_swappable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_details::__do_is_nothrow_swappable_impl (0x0x7fe2319e6ba0) 0 empty
+
+Class std::__swappable_with_details::__do_is_swappable_with_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_with_details::__do_is_swappable_with_impl (0x0x7fe2319e6e40) 0 empty
+
+Class std::__swappable_with_details::__do_is_nothrow_swappable_with_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_with_details::__do_is_nothrow_swappable_with_impl (0x0x7fe2319e6ea0) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuch (0x0x7fe231a33720) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7fe231a81cc0) 0 empty
+
+Class std::__nonesuch_no_braces
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch_no_braces (0x0x7fe231a43680) 0 empty
+ std::__nonesuch (0x0x7fe231ab71e0) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7fe231b00f00) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7fe2317331e0) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7fe231733240) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7fe231766f60) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7fe231791000) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7fe231a43bc8) 0 empty
+ std::input_iterator_tag (0x0x7fe231791060) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7fe231a43c30) 0 empty
+ std::forward_iterator_tag (0x0x7fe231a43c98) 0 empty
+ std::input_iterator_tag (0x0x7fe2317910c0) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7fe231a43d00) 0 empty
+ std::bidirectional_iterator_tag (0x0x7fe231a43d68) 0 empty
+ std::forward_iterator_tag (0x0x7fe231a43dd0) 0 empty
+ std::input_iterator_tag (0x0x7fe231791120) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_iter (0x0x7fe23181cde0) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_less_val
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_val (0x0x7fe23181cf00) 0 empty
+
+Class __gnu_cxx::__ops::_Val_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Val_less_iter (0x0x7fe23184d240) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_equal_to_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_equal_to_iter (0x0x7fe23184d540) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_equal_to_val
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_equal_to_val (0x0x7fe23184d660) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7fe2318d2e40) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7fe23191d1e0) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7fe23191d240) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7fe23191d300) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7fe23191d360) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7fe23191d3c0) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7fe23191d420) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7fe23191d480) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7fe23191d720) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7fe23191d9c0) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7fe23191da20) 0
+
+Vtable for std::exception
+std::exception::_ZTVSt9exception: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9exception)
+16 (int (*)(...))std::exception::~exception
+24 (int (*)(...))std::exception::~exception
+32 (int (*)(...))std::exception::what
+
+Class std::exception
+ size=8 align=8
+ base size=8 base align=8
+std::exception (0x0x7fe230bcc7e0) 0 nearly-empty
+ vptr=((& std::exception::_ZTVSt9exception) + 16)
+
+Vtable for std::bad_exception
+std::bad_exception::_ZTVSt13bad_exception: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13bad_exception)
+16 (int (*)(...))std::bad_exception::~bad_exception
+24 (int (*)(...))std::bad_exception::~bad_exception
+32 (int (*)(...))std::bad_exception::what
+
+Class std::bad_exception
+ size=8 align=8
+ base size=8 base align=8
+std::bad_exception (0x0x7fe2317e51a0) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+ std::exception (0x0x7fe230bcc9c0) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7fe2317e51a0)
+
+Vtable for std::type_info
+std::type_info::_ZTVSt9type_info: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9type_info)
+16 (int (*)(...))std::type_info::~type_info
+24 (int (*)(...))std::type_info::~type_info
+32 (int (*)(...))std::type_info::__is_pointer_p
+40 (int (*)(...))std::type_info::__is_function_p
+48 (int (*)(...))std::type_info::__do_catch
+56 (int (*)(...))std::type_info::__do_upcast
+
+Class std::type_info
+ size=16 align=8
+ base size=16 base align=8
+std::type_info (0x0x7fe230bccba0) 0
+ vptr=((& std::type_info::_ZTVSt9type_info) + 16)
+
+Vtable for std::bad_cast
+std::bad_cast::_ZTVSt8bad_cast: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt8bad_cast)
+16 (int (*)(...))std::bad_cast::~bad_cast
+24 (int (*)(...))std::bad_cast::~bad_cast
+32 (int (*)(...))std::bad_cast::what
+
+Class std::bad_cast
+ size=8 align=8
+ base size=8 base align=8
+std::bad_cast (0x0x7fe2317e5208) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+ std::exception (0x0x7fe230bccf60) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7fe2317e5208)
+
+Vtable for std::bad_typeid
+std::bad_typeid::_ZTVSt10bad_typeid: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt10bad_typeid)
+16 (int (*)(...))std::bad_typeid::~bad_typeid
+24 (int (*)(...))std::bad_typeid::~bad_typeid
+32 (int (*)(...))std::bad_typeid::what
+
+Class std::bad_typeid
+ size=8 align=8
+ base size=8 base align=8
+std::bad_typeid (0x0x7fe2317e5270) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+ std::exception (0x0x7fe230c03180) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7fe2317e5270)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7fe230c03360) 0
+
+Vtable for std::nested_exception
+std::nested_exception::_ZTVSt16nested_exception: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt16nested_exception)
+16 (int (*)(...))std::nested_exception::~nested_exception
+24 (int (*)(...))std::nested_exception::~nested_exception
+
+Class std::nested_exception
+ size=16 align=8
+ base size=16 base align=8
+std::nested_exception (0x0x7fe230c038a0) 0
+ vptr=((& std::nested_exception::_ZTVSt16nested_exception) + 16)
+
+Vtable for std::bad_alloc
+std::bad_alloc::_ZTVSt9bad_alloc: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9bad_alloc)
+16 (int (*)(...))std::bad_alloc::~bad_alloc
+24 (int (*)(...))std::bad_alloc::~bad_alloc
+32 (int (*)(...))std::bad_alloc::what
+
+Class std::bad_alloc
+ size=8 align=8
+ base size=8 base align=8
+std::bad_alloc (0x0x7fe2317e52d8) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+ std::exception (0x0x7fe230c03f60) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7fe2317e52d8)
+
+Vtable for std::bad_array_new_length
+std::bad_array_new_length::_ZTVSt20bad_array_new_length: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt20bad_array_new_length)
+16 (int (*)(...))std::bad_array_new_length::~bad_array_new_length
+24 (int (*)(...))std::bad_array_new_length::~bad_array_new_length
+32 (int (*)(...))std::bad_array_new_length::what
+
+Class std::bad_array_new_length
+ size=8 align=8
+ base size=8 base align=8
+std::bad_array_new_length (0x0x7fe2317e5340) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+ std::bad_alloc (0x0x7fe2317e53a8) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7fe2317e5340)
+ std::exception (0x0x7fe230c3a180) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7fe2317e53a8)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7fe230c3a360) 0 empty
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7fe230c3a5a0) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7fe230cbcd20) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7fe2308dd120) 0
+
+Vtable for __cxxabiv1::__forced_unwind
+__cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN10__cxxabiv115__forced_unwindE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class __cxxabiv1::__forced_unwind
+ size=8 align=8
+ base size=8 base align=8
+__cxxabiv1::__forced_unwind (0x0x7fe2308dd1e0) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7fe23053d0c0) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7fe23053d180) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7fe23053d1e0) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7fe23053d240) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7fe23053d2a0) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7fe23053d3c0) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7fe23053d420) 0
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7fe2305d3a80) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7fe2305d3c00) 0 empty
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7fe2303eea80) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7fe2303eeae0) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7fe2303eeb40) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7fe2303eeba0) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7fe23004b360) 0
+
+Vtable for std::logic_error
+std::logic_error::_ZTVSt11logic_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt11logic_error)
+16 (int (*)(...))std::logic_error::~logic_error
+24 (int (*)(...))std::logic_error::~logic_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::logic_error
+ size=16 align=8
+ base size=16 base align=8
+std::logic_error (0x0x7fe23004f340) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+ std::exception (0x0x7fe23004b420) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fe23004f340)
+
+Vtable for std::domain_error
+std::domain_error::_ZTVSt12domain_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12domain_error)
+16 (int (*)(...))std::domain_error::~domain_error
+24 (int (*)(...))std::domain_error::~domain_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::domain_error
+ size=16 align=8
+ base size=16 base align=8
+std::domain_error (0x0x7fe23004f3a8) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+ std::logic_error (0x0x7fe23004f410) 0
+ primary-for std::domain_error (0x0x7fe23004f3a8)
+ std::exception (0x0x7fe23004b480) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fe23004f410)
+
+Vtable for std::invalid_argument
+std::invalid_argument::_ZTVSt16invalid_argument: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt16invalid_argument)
+16 (int (*)(...))std::invalid_argument::~invalid_argument
+24 (int (*)(...))std::invalid_argument::~invalid_argument
+32 (int (*)(...))std::logic_error::what
+
+Class std::invalid_argument
+ size=16 align=8
+ base size=16 base align=8
+std::invalid_argument (0x0x7fe23004f478) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+ std::logic_error (0x0x7fe23004f4e0) 0
+ primary-for std::invalid_argument (0x0x7fe23004f478)
+ std::exception (0x0x7fe23004b4e0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fe23004f4e0)
+
+Vtable for std::length_error
+std::length_error::_ZTVSt12length_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12length_error)
+16 (int (*)(...))std::length_error::~length_error
+24 (int (*)(...))std::length_error::~length_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::length_error
+ size=16 align=8
+ base size=16 base align=8
+std::length_error (0x0x7fe23004f548) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+ std::logic_error (0x0x7fe23004f5b0) 0
+ primary-for std::length_error (0x0x7fe23004f548)
+ std::exception (0x0x7fe23004b540) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fe23004f5b0)
+
+Vtable for std::out_of_range
+std::out_of_range::_ZTVSt12out_of_range: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12out_of_range)
+16 (int (*)(...))std::out_of_range::~out_of_range
+24 (int (*)(...))std::out_of_range::~out_of_range
+32 (int (*)(...))std::logic_error::what
+
+Class std::out_of_range
+ size=16 align=8
+ base size=16 base align=8
+std::out_of_range (0x0x7fe23004f618) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+ std::logic_error (0x0x7fe23004f680) 0
+ primary-for std::out_of_range (0x0x7fe23004f618)
+ std::exception (0x0x7fe23004b5a0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fe23004f680)
+
+Vtable for std::runtime_error
+std::runtime_error::_ZTVSt13runtime_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13runtime_error)
+16 (int (*)(...))std::runtime_error::~runtime_error
+24 (int (*)(...))std::runtime_error::~runtime_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::runtime_error
+ size=16 align=8
+ base size=16 base align=8
+std::runtime_error (0x0x7fe23004f6e8) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+ std::exception (0x0x7fe23004b600) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fe23004f6e8)
+
+Vtable for std::range_error
+std::range_error::_ZTVSt11range_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt11range_error)
+16 (int (*)(...))std::range_error::~range_error
+24 (int (*)(...))std::range_error::~range_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::range_error
+ size=16 align=8
+ base size=16 base align=8
+std::range_error (0x0x7fe23004f750) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+ std::runtime_error (0x0x7fe23004f7b8) 0
+ primary-for std::range_error (0x0x7fe23004f750)
+ std::exception (0x0x7fe23004b660) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fe23004f7b8)
+
+Vtable for std::overflow_error
+std::overflow_error::_ZTVSt14overflow_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt14overflow_error)
+16 (int (*)(...))std::overflow_error::~overflow_error
+24 (int (*)(...))std::overflow_error::~overflow_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::overflow_error
+ size=16 align=8
+ base size=16 base align=8
+std::overflow_error (0x0x7fe23004f820) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+ std::runtime_error (0x0x7fe23004f888) 0
+ primary-for std::overflow_error (0x0x7fe23004f820)
+ std::exception (0x0x7fe23004b6c0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fe23004f888)
+
+Vtable for std::underflow_error
+std::underflow_error::_ZTVSt15underflow_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt15underflow_error)
+16 (int (*)(...))std::underflow_error::~underflow_error
+24 (int (*)(...))std::underflow_error::~underflow_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::underflow_error
+ size=16 align=8
+ base size=16 base align=8
+std::underflow_error (0x0x7fe23004f8f0) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+ std::runtime_error (0x0x7fe23004f958) 0
+ primary-for std::underflow_error (0x0x7fe23004f8f0)
+ std::exception (0x0x7fe23004b720) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fe23004f958)
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7fe2300b3a20) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7fe2300b3a80) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7fe2300b3c00) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7fe2300b3cc0) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7fe23004fbc8) 0
+ std::__uses_alloc_base (0x0x7fe2300b3c60) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7fe22fe52300) 0 empty
+
+Vtable for std::bad_function_call
+std::bad_function_call::_ZTVSt17bad_function_call: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt17bad_function_call)
+16 (int (*)(...))std::bad_function_call::~bad_function_call
+24 (int (*)(...))std::bad_function_call::~bad_function_call
+32 (int (*)(...))std::bad_function_call::what
+
+Class std::bad_function_call
+ size=8 align=8
+ base size=8 base align=8
+std::bad_function_call (0x0x7fe22ff0d000) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+ std::exception (0x0x7fe22fef19c0) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7fe22ff0d000)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7fe22fef1a80) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7fe22fef1ae0) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7fe22fef1de0) 0
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7fe22fbc6c60) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7fe22fbc6d20) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7fe22fbf2240) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7fe22fc1b0c0) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7fe22fc1b180) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7fe22fc1b1e0) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7fe22fc1b5a0) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7fe22fc1b6c0) 0
+
+Class std::__detail::_Equality_base
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Equality_base (0x0x7fe22f9fd780) 0 empty
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7fe22fa3b060) 0 empty
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7fe22fa3ba20) 0 empty
+
+Vtable for std::bad_optional_access
+std::bad_optional_access::_ZTVSt19bad_optional_access: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt19bad_optional_access)
+16 (int (*)(...))std::bad_optional_access::~bad_optional_access
+24 (int (*)(...))std::bad_optional_access::~bad_optional_access
+32 (int (*)(...))std::bad_optional_access::what
+
+Class std::bad_optional_access
+ size=8 align=8
+ base size=8 base align=8
+std::bad_optional_access (0x0x7fe22f994f08) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+ std::exception (0x0x7fe22fa3bc60) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7fe22f994f08)
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7fe22f516600) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7fe22f3eda28) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7fe22f516d80) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7fe22f3edaf8) 0
+ std::_Bit_iterator_base (0x0x7fe22f3edb60) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7fe22f145360) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7fe22f3edc30) 0
+ std::_Bit_iterator_base (0x0x7fe22f3edc98) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7fe22f145b40) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7fe22ef56060) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7fe22ef561e0) 0 empty
+
+Class __pstl::execution::v1::parallel_unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_unsequenced_policy (0x0x7fe22ef56360) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7fe22ef564e0) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7fe22f093000) 0 empty
+
+Class std::__detail::__variant::__variant_idx_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_idx_cookie (0x0x7fe22f093060) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7fe22f117ae0) 0 empty
+
+Vtable for std::bad_variant_access
+std::bad_variant_access::_ZTVSt18bad_variant_access: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt18bad_variant_access)
+16 (int (*)(...))std::bad_variant_access::~bad_variant_access
+24 (int (*)(...))std::bad_variant_access::~bad_variant_access
+32 (int (*)(...))std::bad_variant_access::what
+
+Class std::bad_variant_access
+ size=16 align=8
+ base size=16 base align=8
+std::bad_variant_access (0x0x7fe22ed42068) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+ std::exception (0x0x7fe22ed80060) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7fe22ed42068)
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7fe22ee16a20) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7fe22ee16a80) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7fe22ee16d20) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7fe22ee5d540) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7fe22ee95660) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7fe22ef26480) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7fe22eecc2d8) 0
+ std::__atomic_flag_base (0x0x7fe22ef264e0) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7fe22eaac5b0) 0
+ QAtomicInteger<int> (0x0x7fe22eaac618) 0
+ QBasicAtomicInteger<int> (0x0x7fe22eaaf3c0) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7fe22e252660) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7fe22e2526c0) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7fe22e3079c0) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7fe22df47120) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7fe22df47180) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7fe22e2a0a28) 0
+ QGenericArgument (0x0x7fe22df47420) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7fe22df47900) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7fe22df47960) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7fe22df478a0) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7fe22df96300) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7fe22dfc2d20) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7fe22dfeb720) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7fe22e0c1240) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7fe22e0c15a0) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7fe22dd55f60) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7fe22dd7f0c0) 0
+
+Vtable for std::locale::facet
+std::locale::facet::_ZTVNSt6locale5facetE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6locale5facetE)
+16 (int (*)(...))std::locale::facet::~facet
+24 (int (*)(...))std::locale::facet::~facet
+
+Class std::locale::facet
+ size=16 align=8
+ base size=12 base align=8
+std::locale::facet (0x0x7fe22dd7f480) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7fe22dd7f720) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7fe22dd7f900) 0
+
+Vtable for std::_V2::error_category
+std::_V2::error_category::_ZTVNSt3_V214error_categoryE: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt3_V214error_categoryE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))std::_V2::error_category::_M_message
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))std::_V2::error_category::default_error_condition
+64 (int (*)(...))std::_V2::error_category::equivalent
+72 (int (*)(...))std::_V2::error_category::equivalent
+
+Class std::_V2::error_category
+ size=8 align=8
+ base size=8 base align=8
+std::_V2::error_category (0x0x7fe22ddd9a20) 0 nearly-empty
+ vptr=((& std::_V2::error_category::_ZTVNSt3_V214error_categoryE) + 16)
+
+Class std::error_code
+ size=16 align=8
+ base size=16 base align=8
+std::error_code (0x0x7fe22ddd9d80) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7fe22de1d5a0) 0
+
+Vtable for std::system_error
+std::system_error::_ZTVSt12system_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12system_error)
+16 (int (*)(...))std::system_error::~system_error
+24 (int (*)(...))std::system_error::~system_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::system_error
+ size=32 align=8
+ base size=32 base align=8
+std::system_error (0x0x7fe22dd62f08) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+ std::runtime_error (0x0x7fe22dd62f70) 0
+ primary-for std::system_error (0x0x7fe22dd62f08)
+ std::exception (0x0x7fe22de48180) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fe22dd62f70)
+
+Vtable for std::ios_base::failure
+std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt8ios_base7failureB5cxx11E)
+16 (int (*)(...))std::ios_base::failure::~failure
+24 (int (*)(...))std::ios_base::failure::~failure
+32 (int (*)(...))std::ios_base::failure::what
+
+Class std::ios_base::failure
+ size=32 align=8
+ base size=32 base align=8
+std::ios_base::failure (0x0x7fe22de532d8) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+ std::system_error (0x0x7fe22de53340) 0
+ primary-for std::ios_base::failure (0x0x7fe22de532d8)
+ std::runtime_error (0x0x7fe22de533a8) 0
+ primary-for std::system_error (0x0x7fe22de53340)
+ std::exception (0x0x7fe22de7b900) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fe22de533a8)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7fe22de7b960) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7fe22de7b9c0) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7fe22de7ba20) 0 empty
+
+Vtable for std::ios_base
+std::ios_base::_ZTVSt8ios_base: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt8ios_base)
+16 (int (*)(...))std::ios_base::~ios_base
+24 (int (*)(...))std::ios_base::~ios_base
+
+Class std::ios_base
+ size=216 align=8
+ base size=216 base align=8
+std::ios_base (0x0x7fe22de7b8a0) 0
+ vptr=((& std::ios_base::_ZTVSt8ios_base) + 16)
+
+Class std::ctype_base
+ size=1 align=1
+ base size=0 base align=1
+std::ctype_base (0x0x7fe22db38660) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7fe22dbef960) 0 empty
+
+VTT for std::basic_ostream<char>
+std::basic_ostream<char>::_ZTTSo: 2 entries
+0 ((& std::basic_ostream<char>::_ZTVSo) + 24)
+8 ((& std::basic_ostream<char>::_ZTVSo) + 64)
+
+VTT for std::basic_ostream<wchar_t>
+std::basic_ostream<wchar_t>::_ZTTSt13basic_ostreamIwSt11char_traitsIwEE: 2 entries
+0 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 64)
+
+VTT for std::basic_istream<char>
+std::basic_istream<char>::_ZTTSi: 2 entries
+0 ((& std::basic_istream<char>::_ZTVSi) + 24)
+8 ((& std::basic_istream<char>::_ZTVSi) + 64)
+
+VTT for std::basic_istream<wchar_t>
+std::basic_istream<wchar_t>::_ZTTSt13basic_istreamIwSt11char_traitsIwEE: 2 entries
+0 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 64)
+
+Construction vtable for std::basic_istream<char> (0x0x7fe22d72af08 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd0_Si: 10 entries
+0 24
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISi)
+24 0
+32 0
+40 18446744073709551592
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISi)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<char> (0x0x7fe22d7a2000 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd16_So: 10 entries
+0 8
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISo)
+24 0
+32 0
+40 18446744073709551608
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISo)
+64 0
+72 0
+
+VTT for std::basic_iostream<char>
+std::basic_iostream<char>::_ZTTSd: 7 entries
+0 ((& std::basic_iostream<char>::_ZTVSd) + 24)
+8 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 24)
+16 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 64)
+24 ((& std::basic_iostream<char>::_ZTCSd16_So) + 24)
+32 ((& std::basic_iostream<char>::_ZTCSd16_So) + 64)
+40 ((& std::basic_iostream<char>::_ZTVSd) + 104)
+48 ((& std::basic_iostream<char>::_ZTVSd) + 64)
+
+Construction vtable for std::basic_istream<wchar_t> (0x0x7fe22d7a2548 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E: 10 entries
+0 24
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551592
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<wchar_t> (0x0x7fe22d7a2618 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E: 10 entries
+0 8
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551608
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+VTT for std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTTSt14basic_iostreamIwSt11char_traitsIwEE: 7 entries
+0 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 24)
+16 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 64)
+24 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 24)
+32 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 64)
+40 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 104)
+48 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 64)
+
+Vtable for __gnu_cxx::__concurrence_lock_error
+__gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx24__concurrence_lock_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error
+24 (int (*)(...))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error
+32 (int (*)(...))__gnu_cxx::__concurrence_lock_error::what
+
+Class __gnu_cxx::__concurrence_lock_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_lock_error (0x0x7fe22d7a2bc8) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+ std::exception (0x0x7fe22d7e5360) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7fe22d7a2bc8)
+
+Vtable for __gnu_cxx::__concurrence_unlock_error
+__gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx26__concurrence_unlock_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error
+24 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error
+32 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::what
+
+Class __gnu_cxx::__concurrence_unlock_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_unlock_error (0x0x7fe22d7a2c30) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+ std::exception (0x0x7fe22d7e5480) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7fe22d7a2c30)
+
+Vtable for __gnu_cxx::__concurrence_broadcast_error
+__gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx29__concurrence_broadcast_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::~__concurrence_broadcast_error
+24 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::~__concurrence_broadcast_error
+32 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::what
+
+Class __gnu_cxx::__concurrence_broadcast_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_broadcast_error (0x0x7fe22d7a2c98) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+ std::exception (0x0x7fe22d7e55a0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7fe22d7a2c98)
+
+Vtable for __gnu_cxx::__concurrence_wait_error
+__gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx24__concurrence_wait_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_wait_error::~__concurrence_wait_error
+24 (int (*)(...))__gnu_cxx::__concurrence_wait_error::~__concurrence_wait_error
+32 (int (*)(...))__gnu_cxx::__concurrence_wait_error::what
+
+Class __gnu_cxx::__concurrence_wait_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_wait_error (0x0x7fe22d7a2d68) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+ std::exception (0x0x7fe22d7e56c0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7fe22d7a2d68)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7fe22d7e5f60) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7fe22d80f300) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7fe22d80f600) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7fe22d80f960) 0
+
+Vtable for std::bad_weak_ptr
+std::bad_weak_ptr::_ZTVSt12bad_weak_ptr: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12bad_weak_ptr)
+16 (int (*)(...))std::bad_weak_ptr::~bad_weak_ptr
+24 (int (*)(...))std::bad_weak_ptr::~bad_weak_ptr
+32 (int (*)(...))std::bad_weak_ptr::what
+
+Class std::bad_weak_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::bad_weak_ptr (0x0x7fe22d7a2ea0) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+ std::exception (0x0x7fe22d8bf120) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7fe22d7a2ea0)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7fe22d8feea0) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7fe22d927420) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7fe22d66d240) 0
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7fe22d3bf900) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7fe22d4c7300) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7fe22d30e5a0) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7fe22cfbd180) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7fe22d104000) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7fe22d104420) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7fe22d104480) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7fe22cd87600) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7fe22ce66c00) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7fe22ce66ba0) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7fe22ceaec00) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7fe22cc10d80) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7fe22c849180) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7fe22c82ab60) 0
+ QtPrivate::ArgBase (0x0x7fe22c8491e0) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7fe22c82ac30) 0
+ QtPrivate::ArgBase (0x0x7fe22c849420) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7fe22c8bd8a0) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7fe22c8bd960) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7fe22c6cade0) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7fe22c6fe480) 0 empty
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7fe22c38fd20) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7fe22c38ff60) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7fe22c44a0c0) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7fe22c65e820) 0
+ QIODeviceBase (0x0x7fe22c44a120) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7fe22c44a2a0) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7fe22c5016c0) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7fe22c151000) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7fe22c501780) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7fe22c1510d0) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7fe22c501840) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7fe22c1ea360) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7fe22c151478) 0
+ QMetaContainer (0x0x7fe22c1ea540) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7fe22c1514e0) 0
+ QMetaContainer (0x0x7fe22c1ea900) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7fe22c2dbc60) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7fe22c297548) 0
+ std::__detail::_List_node_base (0x0x7fe22c2dbcc0) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7fe22bfccd80) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7fe22bfed120) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7fe22be4a720) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7fe22beadd80) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7fe22b9bcc00) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7fe22b9bcc60) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7fe22b902360) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7fe22b9026c0) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7fe22b563720) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7fe22b563840) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7fe22b5acea0) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7fe22b5ace40) 0 empty
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7fe22b5acf00) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7fe22b5d33c0) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7fe22b5d3420) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7fe22b5d3a20) 0
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7fe22b603180) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7fe22b603480) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7fe22b6035a0) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7fe22b6037e0) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7fe22b5c4618) 0
+ QPropertyObserverBase (0x0x7fe22b603960) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7fe22b6718a0) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7fe22b68fa20) 0
+
+Class QBindingStatus
+ size=16 align=8
+ base size=16 base align=8
+QBindingStatus (0x0x7fe22b6bee40) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7fe22b6beea0) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7fe22b3c2b40) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7fe22b4668a0) 0 empty
+
+Vtable for QObjectData
+QObjectData::_ZTV11QObjectData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QObjectData)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+
+Class QObjectData
+ size=80 align=8
+ base size=80 base align=8
+QObjectData (0x0x7fe22b145240) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7fe22b145ba0) 0 empty
+
+Vtable for QObject
+QObject::_ZTV7QObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QObject)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QObject::qt_metacall
+40 (int (*)(...))QObject::~QObject
+48 (int (*)(...))QObject::~QObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QObject
+ size=16 align=8
+ base size=16 base align=8
+QObject (0x0x7fe22b145b40) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7fe22b20eae0) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7fe22b24b3c0) 0 empty
+
+Vtable for QAbstractAnimation
+QAbstractAnimation::_ZTV18QAbstractAnimation: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractAnimation)
+16 (int (*)(...))QAbstractAnimation::metaObject
+24 (int (*)(...))QAbstractAnimation::qt_metacast
+32 (int (*)(...))QAbstractAnimation::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAbstractAnimation
+ size=16 align=8
+ base size=16 base align=8
+QAbstractAnimation (0x0x7fe22b177888) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+ QObject (0x0x7fe22b24b360) 0
+ primary-for QAbstractAnimation (0x0x7fe22b177888)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7fe22b24b720) 0 empty
+
+Vtable for QAnimationDriver
+QAnimationDriver::_ZTV16QAnimationDriver: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAnimationDriver)
+16 (int (*)(...))QAnimationDriver::metaObject
+24 (int (*)(...))QAnimationDriver::qt_metacast
+32 (int (*)(...))QAnimationDriver::qt_metacall
+40 (int (*)(...))QAnimationDriver::~QAnimationDriver
+48 (int (*)(...))QAnimationDriver::~QAnimationDriver
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAnimationDriver::advance
+120 (int (*)(...))QAnimationDriver::elapsed
+128 (int (*)(...))QAnimationDriver::start
+136 (int (*)(...))QAnimationDriver::stop
+
+Class QAnimationDriver
+ size=16 align=8
+ base size=16 base align=8
+QAnimationDriver (0x0x7fe22b1778f0) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+ QObject (0x0x7fe22b24b6c0) 0
+ primary-for QAnimationDriver (0x0x7fe22b1778f0)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7fe22b24b900) 0 empty
+
+Vtable for QEventLoop
+QEventLoop::_ZTV10QEventLoop: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QEventLoop)
+16 (int (*)(...))QEventLoop::metaObject
+24 (int (*)(...))QEventLoop::qt_metacast
+32 (int (*)(...))QEventLoop::qt_metacall
+40 (int (*)(...))QEventLoop::~QEventLoop
+48 (int (*)(...))QEventLoop::~QEventLoop
+56 (int (*)(...))QEventLoop::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QEventLoop
+ size=16 align=8
+ base size=16 base align=8
+QEventLoop (0x0x7fe22b177958) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+ QObject (0x0x7fe22b24b8a0) 0
+ primary-for QEventLoop (0x0x7fe22b177958)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7fe22b24bd80) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7fe22b24be40) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7fe22b24bea0) 0
+
+Vtable for QAbstractEventDispatcher
+QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractEventDispatcher)
+16 (int (*)(...))QAbstractEventDispatcher::metaObject
+24 (int (*)(...))QAbstractEventDispatcher::qt_metacast
+32 (int (*)(...))QAbstractEventDispatcher::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))QAbstractEventDispatcher::startingUp
+200 (int (*)(...))QAbstractEventDispatcher::closingDown
+
+Class QAbstractEventDispatcher
+ size=16 align=8
+ base size=16 base align=8
+QAbstractEventDispatcher (0x0x7fe22b177af8) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+ QObject (0x0x7fe22b24bde0) 0
+ primary-for QAbstractEventDispatcher (0x0x7fe22b177af8)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7fe22b2e5660) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7fe22adb44e0) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7fe22adb4480) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7fe22adfb060) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7fe22b2ebc30) 0
+ QStringConverterBase (0x0x7fe22adfb000) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7fe22b2ebc98) 0
+ QStringConverter (0x0x7fe22b2ebd00) 0
+ QStringConverterBase (0x0x7fe22adfba20) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7fe22b2ebd68) 0
+ QStringConverter (0x0x7fe22b2ebdd0) 0
+ QStringConverterBase (0x0x7fe22ae2a8a0) 0 empty
+
+Vtable for QTextStream
+QTextStream::_ZTV11QTextStream: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTextStream)
+16 (int (*)(...))QTextStream::~QTextStream
+24 (int (*)(...))QTextStream::~QTextStream
+
+Class QTextStream
+ size=16 align=8
+ base size=16 base align=8
+QTextStream (0x0x7fe22b2ebe38) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+ QIODeviceBase (0x0x7fe22ae4b5a0) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7fe22ae4bc60) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7fe22af22e40) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7fe22ab668a0) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7fe22ab66a20) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7fe22ac27c00) 0 empty
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7fe22ac41c00) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7fe22ac0b8f0) 0
+ QIODeviceBase (0x0x7fe22ac41ba0) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7fe22a96eb40) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7fe22a96ec00) 0 empty
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7fe22a742660) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7fe22a7426c0) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7fe22a742600) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7fe22a907de0) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7fe22a52d060) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7fe22a52d240) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7fe22a564120) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7fe22a5af180) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7fe22a5fc360) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7fe22a66dc00) 0 empty
+
+Vtable for QAbstractItemModel
+QAbstractItemModel::_ZTV18QAbstractItemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractItemModel)
+16 (int (*)(...))QAbstractItemModel::metaObject
+24 (int (*)(...))QAbstractItemModel::qt_metacast
+32 (int (*)(...))QAbstractItemModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractItemModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractItemModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractItemModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModel (0x0x7fe22a67ba90) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+ QObject (0x0x7fe22a66dba0) 0
+ primary-for QAbstractItemModel (0x0x7fe22a67ba90)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7fe22a39d900) 0 empty
+
+Vtable for QAbstractTableModel
+QAbstractTableModel::_ZTV19QAbstractTableModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractTableModel)
+16 (int (*)(...))QAbstractTableModel::metaObject
+24 (int (*)(...))QAbstractTableModel::qt_metacast
+32 (int (*)(...))QAbstractTableModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractTableModel::index
+120 (int (*)(...))QAbstractTableModel::parent
+128 (int (*)(...))QAbstractTableModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractTableModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractTableModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractTableModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractTableModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTableModel (0x0x7fe22a3402d8) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+ QAbstractItemModel (0x0x7fe22a340340) 0
+ primary-for QAbstractTableModel (0x0x7fe22a3402d8)
+ QObject (0x0x7fe22a39d8a0) 0
+ primary-for QAbstractItemModel (0x0x7fe22a340340)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7fe22a39da20) 0 empty
+
+Vtable for QAbstractListModel
+QAbstractListModel::_ZTV18QAbstractListModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractListModel)
+16 (int (*)(...))QAbstractListModel::metaObject
+24 (int (*)(...))QAbstractListModel::qt_metacast
+32 (int (*)(...))QAbstractListModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QAbstractListModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractListModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractListModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractListModel (0x0x7fe22a3403a8) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+ QAbstractItemModel (0x0x7fe22a340410) 0
+ primary-for QAbstractListModel (0x0x7fe22a3403a8)
+ QObject (0x0x7fe22a39d9c0) 0
+ primary-for QAbstractItemModel (0x0x7fe22a340410)
+
+Vtable for QAbstractNativeEventFilter
+QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractNativeEventFilter)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractNativeEventFilter
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNativeEventFilter (0x0x7fe22a3eee40) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7fe22a3eef00) 0 empty
+
+Vtable for QAbstractProxyModel
+QAbstractProxyModel::_ZTV19QAbstractProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractProxyModel)
+16 (int (*)(...))QAbstractProxyModel::metaObject
+24 (int (*)(...))QAbstractProxyModel::qt_metacast
+32 (int (*)(...))QAbstractProxyModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractProxyModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QAbstractProxyModel::headerData
+184 (int (*)(...))QAbstractProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QAbstractProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QAbstractProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QAbstractProxyModel::setSourceModel
+416 (int (*)(...))__cxa_pure_virtual
+424 (int (*)(...))__cxa_pure_virtual
+432 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+440 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QAbstractProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractProxyModel (0x0x7fe22a407820) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+ QAbstractItemModel (0x0x7fe22a407888) 0
+ primary-for QAbstractProxyModel (0x0x7fe22a407820)
+ QObject (0x0x7fe22a3eeea0) 0
+ primary-for QAbstractItemModel (0x0x7fe22a407888)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7fe22a432120) 0 empty
+
+Vtable for QAnimationGroup
+QAnimationGroup::_ZTV15QAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAnimationGroup)
+16 (int (*)(...))QAnimationGroup::metaObject
+24 (int (*)(...))QAnimationGroup::qt_metacast
+32 (int (*)(...))QAnimationGroup::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QAnimationGroup (0x0x7fe22a4078f0) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+ QAbstractAnimation (0x0x7fe22a407958) 0
+ primary-for QAnimationGroup (0x0x7fe22a4078f0)
+ QObject (0x0x7fe22a4320c0) 0
+ primary-for QAbstractAnimation (0x0x7fe22a407958)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7fe22a407a90) 0
+ QIterator<QMetaAssociation> (0x0x7fe22a407af8) 0
+ QBaseIterator<QMetaAssociation> (0x0x7fe22a432540) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7fe22a407c30) 0
+ QConstIterator<QMetaAssociation> (0x0x7fe22a407c98) 0
+ QBaseIterator<QMetaAssociation> (0x0x7fe22a432ae0) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7fe22a407d68) 0
+ QIterable<QMetaAssociation> (0x0x7fe22a484000) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7fe22a163ae0) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7fe22a1c3840) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7fe22a1f3780) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7fe22a23a300) 0 empty
+
+Vtable for QIODevice
+QIODevice::_ZTV9QIODevice: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QIODevice)
+16 (int (*)(...))QIODevice::metaObject
+24 (int (*)(...))QIODevice::qt_metacast
+32 (int (*)(...))QIODevice::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIODevice::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QIODevice::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))__cxa_pure_virtual
+
+Class QIODevice
+ size=16 align=8
+ base size=16 base align=8
+QIODevice (0x0x7fe22a14a850) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+ QObject (0x0x7fe22a23a240) 0
+ primary-for QIODevice (0x0x7fe22a14a850)
+ QIODeviceBase (0x0x7fe22a23a2a0) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7fe22a23a660) 0 empty
+
+Vtable for QBuffer
+QBuffer::_ZTV7QBuffer: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QBuffer)
+16 (int (*)(...))QBuffer::metaObject
+24 (int (*)(...))QBuffer::qt_metacast
+32 (int (*)(...))QBuffer::qt_metacall
+40 (int (*)(...))QBuffer::~QBuffer
+48 (int (*)(...))QBuffer::~QBuffer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QBuffer::connectNotify
+104 (int (*)(...))QBuffer::disconnectNotify
+112 (int (*)(...))QIODevice::isSequential
+120 (int (*)(...))QBuffer::open
+128 (int (*)(...))QBuffer::close
+136 (int (*)(...))QBuffer::pos
+144 (int (*)(...))QBuffer::size
+152 (int (*)(...))QBuffer::seek
+160 (int (*)(...))QBuffer::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QBuffer::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QBuffer::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QBuffer::writeData
+
+Class QBuffer
+ size=16 align=8
+ base size=16 base align=8
+QBuffer (0x0x7fe22a22ac98) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+ QIODevice (0x0x7fe22a14a8c0) 0
+ primary-for QBuffer (0x0x7fe22a22ac98)
+ QObject (0x0x7fe22a23a5a0) 0
+ primary-for QIODevice (0x0x7fe22a14a8c0)
+ QIODeviceBase (0x0x7fe22a23a600) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7fe22a23a8a0) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7fe22a23a840) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7fe22a23aa20) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7fe22a23a9c0) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7fe22a2de240) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7fe22a019000) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7fe229fd7f60) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7fe22a019360) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7fe22a080960) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7fe22a0c8ba0) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7fe22a0c8c00) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7fe22a0c8b40) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7fe229d4ee40) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7fe229d74720) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7fe229e1a7e0) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7fe229e82f60) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7fe229ea6060) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7fe229ea61e0) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7fe229b311e0) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7fe229bf7d20) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7fe229c74ea0) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7fe229c74f60) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7fe2299a8840) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7fe2299e2d80) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7fe2299e2de0) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7fe2299e2d20) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7fe229aee3c0) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7fe229aee420) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7fe229aee360) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7fe229906480) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7fe229906420) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7fe2295fa4e0) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7fe22963ce40) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7fe2296688a0) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7fe229668a80) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7fe22932c4e0) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7fe229395d80) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7fe229395de0) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7fe229395e40) 0 empty
+
+Vtable for QEvent
+QEvent::_ZTV6QEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QEvent)
+16 (int (*)(...))QEvent::~QEvent
+24 (int (*)(...))QEvent::~QEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QEvent
+ size=16 align=8
+ base size=16 base align=8
+QEvent (0x0x7fe229395d20) 0
+ vptr=((& QEvent::_ZTV6QEvent) + 16)
+
+Vtable for QTimerEvent
+QTimerEvent::_ZTV11QTimerEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTimerEvent)
+16 (int (*)(...))QTimerEvent::~QTimerEvent
+24 (int (*)(...))QTimerEvent::~QTimerEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QTimerEvent::clone
+
+Class QTimerEvent
+ size=24 align=8
+ base size=20 base align=8
+QTimerEvent (0x0x7fe22939bbc8) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+ QEvent (0x0x7fe2293f27e0) 0
+ primary-for QTimerEvent (0x0x7fe22939bbc8)
+
+Vtable for QChildEvent
+QChildEvent::_ZTV11QChildEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QChildEvent)
+16 (int (*)(...))QChildEvent::~QChildEvent
+24 (int (*)(...))QChildEvent::~QChildEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QChildEvent::clone
+
+Class QChildEvent
+ size=24 align=8
+ base size=24 base align=8
+QChildEvent (0x0x7fe22939bc30) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+ QEvent (0x0x7fe2293f2cc0) 0
+ primary-for QChildEvent (0x0x7fe22939bc30)
+
+Vtable for QDynamicPropertyChangeEvent
+QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDynamicPropertyChangeEvent)
+16 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+24 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDynamicPropertyChangeEvent::clone
+
+Class QDynamicPropertyChangeEvent
+ size=40 align=8
+ base size=40 base align=8
+QDynamicPropertyChangeEvent (0x0x7fe22939bc98) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+ QEvent (0x0x7fe229421120) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7fe22939bc98)
+
+Vtable for QDeferredDeleteEvent
+QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDeferredDeleteEvent)
+16 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+24 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDeferredDeleteEvent::clone
+
+Class QDeferredDeleteEvent
+ size=24 align=8
+ base size=20 base align=8
+QDeferredDeleteEvent (0x0x7fe22939bd00) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+ QEvent (0x0x7fe2294213c0) 0
+ primary-for QDeferredDeleteEvent (0x0x7fe22939bd00)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7fe229421720) 0 empty
+
+Vtable for QCoreApplication
+QCoreApplication::_ZTV16QCoreApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QCoreApplication)
+16 (int (*)(...))QCoreApplication::metaObject
+24 (int (*)(...))QCoreApplication::qt_metacast
+32 (int (*)(...))QCoreApplication::qt_metacall
+40 (int (*)(...))QCoreApplication::~QCoreApplication
+48 (int (*)(...))QCoreApplication::~QCoreApplication
+56 (int (*)(...))QCoreApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCoreApplication::notify
+120 (int (*)(...))QCoreApplication::compressEvent
+
+Class QCoreApplication
+ size=16 align=8
+ base size=16 base align=8
+QCoreApplication (0x0x7fe22939bd68) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+ QObject (0x0x7fe2294216c0) 0
+ primary-for QCoreApplication (0x0x7fe22939bd68)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7fe229421900) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7fe229421a20) 0 empty
+
+Vtable for QConcatenateTablesProxyModel
+QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QConcatenateTablesProxyModel)
+16 (int (*)(...))QConcatenateTablesProxyModel::metaObject
+24 (int (*)(...))QConcatenateTablesProxyModel::qt_metacast
+32 (int (*)(...))QConcatenateTablesProxyModel::qt_metacall
+40 (int (*)(...))QConcatenateTablesProxyModel::~QConcatenateTablesProxyModel
+48 (int (*)(...))QConcatenateTablesProxyModel::~QConcatenateTablesProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QConcatenateTablesProxyModel::index
+120 (int (*)(...))QConcatenateTablesProxyModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QConcatenateTablesProxyModel::rowCount
+144 (int (*)(...))QConcatenateTablesProxyModel::columnCount
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))QConcatenateTablesProxyModel::data
+168 (int (*)(...))QConcatenateTablesProxyModel::setData
+176 (int (*)(...))QConcatenateTablesProxyModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QConcatenateTablesProxyModel::itemData
+200 (int (*)(...))QConcatenateTablesProxyModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QConcatenateTablesProxyModel::mimeTypes
+224 (int (*)(...))QConcatenateTablesProxyModel::mimeData
+232 (int (*)(...))QConcatenateTablesProxyModel::canDropMimeData
+240 (int (*)(...))QConcatenateTablesProxyModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QConcatenateTablesProxyModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QConcatenateTablesProxyModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QConcatenateTablesProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QConcatenateTablesProxyModel (0x0x7fe22939bdd0) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+ QAbstractItemModel (0x0x7fe22939be38) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7fe22939bdd0)
+ QObject (0x0x7fe2294219c0) 0
+ primary-for QAbstractItemModel (0x0x7fe22939be38)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7fe229421ba0) 0
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7fe229421cc0) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7fe229488000) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7fe22918e5a0) 0 empty
+
+Vtable for QFileDevice
+QFileDevice::_ZTV11QFileDevice: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFileDevice)
+16 (int (*)(...))QFileDevice::metaObject
+24 (int (*)(...))QFileDevice::qt_metacast
+32 (int (*)(...))QFileDevice::qt_metacall
+40 (int (*)(...))QFileDevice::~QFileDevice
+48 (int (*)(...))QFileDevice::~QFileDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFileDevice::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QFileDevice::fileName
+256 (int (*)(...))QFileDevice::resize
+264 (int (*)(...))QFileDevice::permissions
+272 (int (*)(...))QFileDevice::setPermissions
+
+Class QFileDevice
+ size=16 align=8
+ base size=16 base align=8
+QFileDevice (0x0x7fe22918f410) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+ QIODevice (0x0x7fe22919a000) 0
+ primary-for QFileDevice (0x0x7fe22918f410)
+ QObject (0x0x7fe22918e4e0) 0
+ primary-for QIODevice (0x0x7fe22919a000)
+ QIODeviceBase (0x0x7fe22918e540) 0 empty
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7fe22922d120) 0 empty
+
+Vtable for QFile
+QFile::_ZTV5QFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QFile)
+16 (int (*)(...))QFile::metaObject
+24 (int (*)(...))QFile::qt_metacast
+32 (int (*)(...))QFile::qt_metacall
+40 (int (*)(...))QFile::~QFile
+48 (int (*)(...))QFile::~QFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QFile::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFile::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QFile::fileName
+256 (int (*)(...))QFile::resize
+264 (int (*)(...))QFile::permissions
+272 (int (*)(...))QFile::setPermissions
+
+Class QFile
+ size=16 align=8
+ base size=16 base align=8
+QFile (0x0x7fe22918f820) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+ QFileDevice (0x0x7fe22918f888) 0
+ primary-for QFile (0x0x7fe22918f820)
+ QIODevice (0x0x7fe22922f000) 0
+ primary-for QFileDevice (0x0x7fe22918f888)
+ QObject (0x0x7fe22922d060) 0
+ primary-for QIODevice (0x0x7fe22922f000)
+ QIODeviceBase (0x0x7fe22922d0c0) 0 empty
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7fe22922d3c0) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7fe2292aede0) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7fe228fa00c0) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7fe228fa0480) 0
+
+Vtable for QException
+QException::_ZTV10QException: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QException)
+16 (int (*)(...))QException::~QException
+24 (int (*)(...))QException::~QException
+32 (int (*)(...))std::exception::what
+40 (int (*)(...))QException::raise
+48 (int (*)(...))QException::clone
+
+Class QException
+ size=8 align=8
+ base size=8 base align=8
+QException (0x0x7fe229051478) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+ std::exception (0x0x7fe229079ba0) 0 nearly-empty
+ primary-for QException (0x0x7fe229051478)
+
+Vtable for QUnhandledException
+QUnhandledException::_ZTV19QUnhandledException: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QUnhandledException)
+16 (int (*)(...))QUnhandledException::~QUnhandledException
+24 (int (*)(...))QUnhandledException::~QUnhandledException
+32 (int (*)(...))std::exception::what
+40 (int (*)(...))QUnhandledException::raise
+48 (int (*)(...))QUnhandledException::clone
+
+Class QUnhandledException
+ size=16 align=8
+ base size=16 base align=8
+QUnhandledException (0x0x7fe2290514e0) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+ QException (0x0x7fe229051548) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7fe2290514e0)
+ std::exception (0x0x7fe229079c00) 0 nearly-empty
+ primary-for QException (0x0x7fe229051548)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7fe2290c6a80) 0
+
+Vtable for QFactoryInterface
+QFactoryInterface::_ZTV17QFactoryInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFactoryInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QFactoryInterface
+ size=8 align=8
+ base size=8 base align=8
+QFactoryInterface (0x0x7fe2290c6ae0) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7fe2290c6d20) 0 empty
+
+Vtable for QFileSelector
+QFileSelector::_ZTV13QFileSelector: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QFileSelector)
+16 (int (*)(...))QFileSelector::metaObject
+24 (int (*)(...))QFileSelector::qt_metacast
+32 (int (*)(...))QFileSelector::qt_metacall
+40 (int (*)(...))QFileSelector::~QFileSelector
+48 (int (*)(...))QFileSelector::~QFileSelector
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSelector
+ size=16 align=8
+ base size=16 base align=8
+QFileSelector (0x0x7fe2290d6750) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+ QObject (0x0x7fe2290c6cc0) 0
+ primary-for QFileSelector (0x0x7fe2290d6750)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7fe2290c6f00) 0 empty
+
+Vtable for QFileSystemWatcher
+QFileSystemWatcher::_ZTV18QFileSystemWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFileSystemWatcher)
+16 (int (*)(...))QFileSystemWatcher::metaObject
+24 (int (*)(...))QFileSystemWatcher::qt_metacast
+32 (int (*)(...))QFileSystemWatcher::qt_metacall
+40 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+48 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSystemWatcher
+ size=16 align=8
+ base size=16 base align=8
+QFileSystemWatcher (0x0x7fe2290d67b8) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+ QObject (0x0x7fe2290c6ea0) 0
+ primary-for QFileSystemWatcher (0x0x7fe2290d67b8)
+
+Vtable for QRunnable
+QRunnable::_ZTV9QRunnable: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QRunnable)
+16 (int (*)(...))__cxa_pure_virtual
+24 0
+32 0
+
+Class QRunnable
+ size=16 align=8
+ base size=9 base align=8
+QRunnable (0x0x7fe2290f80c0) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7fe2290f82a0) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7fe2290d6888) 0
+ QBasicMutex (0x0x7fe228d5f000) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7fe228d5f420) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7fe228d5fa20) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7fe228dcf060) 0
+
+Vtable for QtPrivate::ResultStoreBase
+QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9QtPrivate15ResultStoreBaseE)
+16 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+24 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+
+Class QtPrivate::ResultStoreBase
+ size=48 align=8
+ base size=44 base align=8
+QtPrivate::ResultStoreBase (0x0x7fe228dcfcc0) 0
+ vptr=((& QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE) + 16)
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7fe228b34720) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7fe228b35af8) 0
+ std::__mutex_base (0x0x7fe228b34780) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7fe228b34960) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7fe228b349c0) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7fe228b34a20) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7fe228b6f420) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7fe228b35b60) 0
+ std::__recursive_mutex_base (0x0x7fe228b6f480) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7fe229058850) 0
+ std::__mutex_base (0x0x7fe228b6f840) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7fe228b6f8a0) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7fe2290588c0) 0
+ std::__recursive_mutex_base (0x0x7fe228b6fc60) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7fe228b6fcc0) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7fe228ba9ae0) 0
+
+Vtable for QFutureInterfaceBase
+QFutureInterfaceBase::_ZTV20QFutureInterfaceBase: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QFutureInterfaceBase)
+16 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+24 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+
+Class QFutureInterfaceBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureInterfaceBase (0x0x7fe228ba9d20) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Vtable for std::thread::_State
+std::thread::_State::_ZTVNSt6thread6_StateE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6thread6_StateE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class std::thread::_State
+ size=8 align=8
+ base size=8 base align=8
+std::thread::_State (0x0x7fe228bf4c60) 0 nearly-empty
+ vptr=((& std::thread::_State::_ZTVNSt6thread6_StateE) + 16)
+
+Class std::thread::id
+ size=8 align=8
+ base size=8 base align=8
+std::thread::id (0x0x7fe228bf4cc0) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7fe228bf4c00) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7fe2289e2f00) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7fe228a1b300) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7fe228a1b360) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7fe228acd8a0) 0 empty
+
+Vtable for std::future_error
+std::future_error::_ZTVSt12future_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12future_error)
+16 (int (*)(...))std::future_error::~future_error
+24 (int (*)(...))std::future_error::~future_error
+32 (int (*)(...))std::future_error::what
+
+Class std::future_error
+ size=32 align=8
+ base size=32 base align=8
+std::future_error (0x0x7fe228a1cd68) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+ std::logic_error (0x0x7fe228a1cdd0) 0
+ primary-for std::future_error (0x0x7fe228a1cd68)
+ std::exception (0x0x7fe228af7000) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fe228a1cdd0)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7fe228af7720) 0 empty
+
+Vtable for std::__future_base::_Result_base
+std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base12_Result_baseE)
+16 (int (*)(...))__cxa_pure_virtual
+24 0
+32 0
+
+Class std::__future_base::_Result_base
+ size=16 align=8
+ base size=16 base align=8
+std::__future_base::_Result_base (0x0x7fe228af76c0) 0
+ vptr=((& std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE) + 16)
+
+Class std::__future_base::_State_baseV2::__exception_ptr_tag
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_State_baseV2::__exception_ptr_tag (0x0x7fe22886f180) 0 empty
+
+Class std::__future_base::_State_baseV2::_Make_ready
+ size=32 align=8
+ base size=32 base align=8
+std::__future_base::_State_baseV2::_Make_ready (0x0x7fe22885d5b0) 0
+ std::__at_thread_exit_elt (0x0x7fe22886f240) 0
+
+Vtable for std::__future_base::_State_baseV2
+std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base13_State_baseV2E)
+16 (int (*)(...))std::__future_base::_State_baseV2::~_State_baseV2
+24 (int (*)(...))std::__future_base::_State_baseV2::~_State_baseV2
+32 (int (*)(...))std::__future_base::_State_baseV2::_M_complete_async
+40 (int (*)(...))std::__future_base::_State_baseV2::_M_is_deferred_future
+
+Class std::__future_base::_State_baseV2
+ size=32 align=8
+ base size=28 base align=8
+std::__future_base::_State_baseV2 (0x0x7fe228af78a0) 0
+ vptr=((& std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E) + 16)
+
+Class std::__future_base
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base (0x0x7fe228af7660) 0 empty
+
+Vtable for std::__future_base::_Async_state_commonV2
+std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base21_Async_state_commonV2E)
+16 (int (*)(...))std::__future_base::_Async_state_commonV2::~_Async_state_commonV2
+24 (int (*)(...))std::__future_base::_Async_state_commonV2::~_Async_state_commonV2
+32 (int (*)(...))std::__future_base::_Async_state_commonV2::_M_complete_async
+40 (int (*)(...))std::__future_base::_State_baseV2::_M_is_deferred_future
+
+Class std::__future_base::_Async_state_commonV2
+ size=48 align=8
+ base size=44 base align=8
+std::__future_base::_Async_state_commonV2 (0x0x7fe2285009c0) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+ std::__future_base::_State_baseV2 (0x0x7fe228132f00) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7fe2285009c0)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7fe2281707e0) 0 empty
+
+Vtable for QThread
+QThread::_ZTV7QThread: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QThread)
+16 (int (*)(...))QThread::metaObject
+24 (int (*)(...))QThread::qt_metacast
+32 (int (*)(...))QThread::qt_metacall
+40 (int (*)(...))QThread::~QThread
+48 (int (*)(...))QThread::~QThread
+56 (int (*)(...))QThread::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QThread::run
+
+Class QThread
+ size=16 align=8
+ base size=16 base align=8
+QThread (0x0x7fe228500d00) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+ QObject (0x0x7fe228170780) 0
+ primary-for QThread (0x0x7fe228500d00)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7fe228170ba0) 0 empty
+
+Vtable for QThreadPool
+QThreadPool::_ZTV11QThreadPool: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QThreadPool)
+16 (int (*)(...))QThreadPool::metaObject
+24 (int (*)(...))QThreadPool::qt_metacast
+32 (int (*)(...))QThreadPool::qt_metacall
+40 (int (*)(...))QThreadPool::~QThreadPool
+48 (int (*)(...))QThreadPool::~QThreadPool
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QThreadPool
+ size=16 align=8
+ base size=16 base align=8
+QThreadPool (0x0x7fe228500d68) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+ QObject (0x0x7fe228170b40) 0
+ primary-for QThreadPool (0x0x7fe228500d68)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7fe227fc4a80) 0 empty
+
+Vtable for QFutureWatcherBase
+QFutureWatcherBase::_ZTV18QFutureWatcherBase: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFutureWatcherBase)
+16 (int (*)(...))QFutureWatcherBase::metaObject
+24 (int (*)(...))QFutureWatcherBase::qt_metacast
+32 (int (*)(...))QFutureWatcherBase::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QFutureWatcherBase::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QFutureWatcherBase::connectNotify
+104 (int (*)(...))QFutureWatcherBase::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QFutureWatcherBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureWatcherBase (0x0x7fe228319bc8) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+ QObject (0x0x7fe227fc4a20) 0
+ primary-for QFutureWatcherBase (0x0x7fe228319bc8)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7fe227fed000) 0 empty
+
+Vtable for QIdentityProxyModel
+QIdentityProxyModel::_ZTV19QIdentityProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QIdentityProxyModel)
+16 (int (*)(...))QIdentityProxyModel::metaObject
+24 (int (*)(...))QIdentityProxyModel::qt_metacast
+32 (int (*)(...))QIdentityProxyModel::qt_metacall
+40 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+48 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIdentityProxyModel::index
+120 (int (*)(...))QIdentityProxyModel::parent
+128 (int (*)(...))QIdentityProxyModel::sibling
+136 (int (*)(...))QIdentityProxyModel::rowCount
+144 (int (*)(...))QIdentityProxyModel::columnCount
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QIdentityProxyModel::headerData
+184 (int (*)(...))QAbstractProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QIdentityProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QIdentityProxyModel::insertRows
+272 (int (*)(...))QIdentityProxyModel::insertColumns
+280 (int (*)(...))QIdentityProxyModel::removeRows
+288 (int (*)(...))QIdentityProxyModel::removeColumns
+296 (int (*)(...))QIdentityProxyModel::moveRows
+304 (int (*)(...))QIdentityProxyModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QAbstractProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QIdentityProxyModel::match
+360 (int (*)(...))QAbstractProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QIdentityProxyModel::setSourceModel
+416 (int (*)(...))QIdentityProxyModel::mapToSource
+424 (int (*)(...))QIdentityProxyModel::mapFromSource
+432 (int (*)(...))QIdentityProxyModel::mapSelectionToSource
+440 (int (*)(...))QIdentityProxyModel::mapSelectionFromSource
+
+Class QIdentityProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QIdentityProxyModel (0x0x7fe228319dd0) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+ QAbstractProxyModel (0x0x7fe228319e38) 0
+ primary-for QIdentityProxyModel (0x0x7fe228319dd0)
+ QAbstractItemModel (0x0x7fe228319ea0) 0
+ primary-for QAbstractProxyModel (0x0x7fe228319e38)
+ QObject (0x0x7fe227fc4f60) 0
+ primary-for QAbstractItemModel (0x0x7fe228319ea0)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7fe227fed180) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7fe228050d20) 0 empty
+
+Vtable for QItemSelectionModel
+QItemSelectionModel::_ZTV19QItemSelectionModel: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QItemSelectionModel)
+16 (int (*)(...))QItemSelectionModel::metaObject
+24 (int (*)(...))QItemSelectionModel::qt_metacast
+32 (int (*)(...))QItemSelectionModel::qt_metacall
+40 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+48 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QItemSelectionModel::setCurrentIndex
+120 (int (*)(...))QItemSelectionModel::select
+128 (int (*)(...))QItemSelectionModel::select
+136 (int (*)(...))QItemSelectionModel::clear
+144 (int (*)(...))QItemSelectionModel::reset
+152 (int (*)(...))QItemSelectionModel::clearCurrentIndex
+
+Class QItemSelectionModel
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionModel (0x0x7fe228059c30) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+ QObject (0x0x7fe228050cc0) 0
+ primary-for QItemSelectionModel (0x0x7fe228059c30)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7fe2280cd138) 0
+ QList<QItemSelectionRange> (0x0x7fe2280cd1a0) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7fe2280cd208) 0 empty
+ QListSpecialMethodsBase<QItemSelectionRange> (0x0x7fe22807f720) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7fe227d3c420) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7fe227d3c900) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7fe227d99b40) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7fe227d99ba0) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7fe227d99ae0) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7fe227e475a0) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7fe227e47600) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7fe227bdab40) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7fe227bdaba0) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7fe227bdaae0) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7fe227c946c0) 0 empty
+
+Vtable for QLibrary
+QLibrary::_ZTV8QLibrary: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QLibrary)
+16 (int (*)(...))QLibrary::metaObject
+24 (int (*)(...))QLibrary::qt_metacast
+32 (int (*)(...))QLibrary::qt_metacall
+40 (int (*)(...))QLibrary::~QLibrary
+48 (int (*)(...))QLibrary::~QLibrary
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QLibrary
+ size=24 align=8
+ base size=24 base align=8
+QLibrary (0x0x7fe227c992d8) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+ QObject (0x0x7fe227c94660) 0
+ primary-for QLibrary (0x0x7fe227c992d8)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7fe227c94cc0) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7fe227c94c60) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7fe2279aa480) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7fe227a00c00) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7fe227a00cc0) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7fe227a7d3c0) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7fe227ad3d20) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7fe22773e360) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7fe227790b40) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7fe227790d80) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7fe227790d20) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7fe2277d5c60) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7fe2278715a0) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7fe227904300) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7fe2279043c0) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7fe227904360) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7fe227569600) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7fe2275695a0) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7fe2275ae360) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7fe2275ae300) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7fe2275aea20) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7fe2275ae9c0) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7fe2275fb840) 0 empty
+
+Vtable for QMimeData
+QMimeData::_ZTV9QMimeData: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QMimeData)
+16 (int (*)(...))QMimeData::metaObject
+24 (int (*)(...))QMimeData::qt_metacast
+32 (int (*)(...))QMimeData::qt_metacall
+40 (int (*)(...))QMimeData::~QMimeData
+48 (int (*)(...))QMimeData::~QMimeData
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QMimeData::hasFormat
+120 (int (*)(...))QMimeData::formats
+128 (int (*)(...))QMimeData::retrieveData
+
+Class QMimeData
+ size=16 align=8
+ base size=16 base align=8
+QMimeData (0x0x7fe2275f6d68) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+ QObject (0x0x7fe2275fb7e0) 0
+ primary-for QMimeData (0x0x7fe2275f6d68)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7fe2275fb9c0) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7fe22768f3c0) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7fe22768f480) 0 empty
+
+Vtable for QObjectCleanupHandler
+QObjectCleanupHandler::_ZTV21QObjectCleanupHandler: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QObjectCleanupHandler)
+16 (int (*)(...))QObjectCleanupHandler::metaObject
+24 (int (*)(...))QObjectCleanupHandler::qt_metacast
+32 (int (*)(...))QObjectCleanupHandler::qt_metacall
+40 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+48 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QObjectCleanupHandler
+ size=40 align=8
+ base size=40 base align=8
+QObjectCleanupHandler (0x0x7fe227682bc8) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+ QObject (0x0x7fe22768f420) 0
+ primary-for QObjectCleanupHandler (0x0x7fe227682bc8)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7fe22768f540) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7fe2276f0360) 0 empty
+
+Vtable for QParallelAnimationGroup
+QParallelAnimationGroup::_ZTV23QParallelAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QParallelAnimationGroup)
+16 (int (*)(...))QParallelAnimationGroup::metaObject
+24 (int (*)(...))QParallelAnimationGroup::qt_metacast
+32 (int (*)(...))QParallelAnimationGroup::qt_metacall
+40 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+48 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+56 (int (*)(...))QParallelAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QParallelAnimationGroup::duration
+120 (int (*)(...))QParallelAnimationGroup::updateCurrentTime
+128 (int (*)(...))QParallelAnimationGroup::updateState
+136 (int (*)(...))QParallelAnimationGroup::updateDirection
+
+Class QParallelAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QParallelAnimationGroup (0x0x7fe2276e7618) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+ QAnimationGroup (0x0x7fe2276e7680) 0
+ primary-for QParallelAnimationGroup (0x0x7fe2276e7618)
+ QAbstractAnimation (0x0x7fe2276e76e8) 0
+ primary-for QAnimationGroup (0x0x7fe2276e7680)
+ QObject (0x0x7fe2276f0300) 0
+ primary-for QAbstractAnimation (0x0x7fe2276e76e8)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7fe2276f0540) 0 empty
+
+Vtable for QPauseAnimation
+QPauseAnimation::_ZTV15QPauseAnimation: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QPauseAnimation)
+16 (int (*)(...))QPauseAnimation::metaObject
+24 (int (*)(...))QPauseAnimation::qt_metacast
+32 (int (*)(...))QPauseAnimation::qt_metacall
+40 (int (*)(...))QPauseAnimation::~QPauseAnimation
+48 (int (*)(...))QPauseAnimation::~QPauseAnimation
+56 (int (*)(...))QPauseAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPauseAnimation::duration
+120 (int (*)(...))QPauseAnimation::updateCurrentTime
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QPauseAnimation
+ size=16 align=8
+ base size=16 base align=8
+QPauseAnimation (0x0x7fe2276e7750) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+ QAbstractAnimation (0x0x7fe2276e77b8) 0
+ primary-for QPauseAnimation (0x0x7fe2276e7750)
+ QObject (0x0x7fe2276f04e0) 0
+ primary-for QAbstractAnimation (0x0x7fe2276e77b8)
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7fe2276f0720) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7fe2276f0780) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7fe22733e1e0) 0 empty
+
+Vtable for QPluginLoader
+QPluginLoader::_ZTV13QPluginLoader: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPluginLoader)
+16 (int (*)(...))QPluginLoader::metaObject
+24 (int (*)(...))QPluginLoader::qt_metacast
+32 (int (*)(...))QPluginLoader::qt_metacall
+40 (int (*)(...))QPluginLoader::~QPluginLoader
+48 (int (*)(...))QPluginLoader::~QPluginLoader
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPluginLoader
+ size=32 align=8
+ base size=25 base align=8
+QPluginLoader (0x0x7fe2273383a8) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+ QObject (0x0x7fe22733e180) 0
+ primary-for QPluginLoader (0x0x7fe2273383a8)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7fe22733e2a0) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7fe2273ae9c0) 0 empty
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7fe2273aea20) 0 empty
+
+Vtable for QProcess
+QProcess::_ZTV8QProcess: 32 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QProcess)
+16 (int (*)(...))QProcess::metaObject
+24 (int (*)(...))QProcess::qt_metacast
+32 (int (*)(...))QProcess::qt_metacall
+40 (int (*)(...))QProcess::~QProcess
+48 (int (*)(...))QProcess::~QProcess
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QProcess::isSequential
+120 (int (*)(...))QProcess::open
+128 (int (*)(...))QProcess::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QProcess::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QProcess::waitForReadyRead
+208 (int (*)(...))QProcess::waitForBytesWritten
+216 (int (*)(...))QProcess::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QProcess::writeData
+248 (int (*)(...))QProcess::setupChildProcess
+
+Class QProcess
+ size=16 align=8
+ base size=16 base align=8
+QProcess (0x0x7fe2273b5410) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+ QIODevice (0x0x7fe2273bc0e0) 0
+ primary-for QProcess (0x0x7fe2273b5410)
+ QObject (0x0x7fe2273ae900) 0
+ primary-for QIODevice (0x0x7fe2273bc0e0)
+ QIODeviceBase (0x0x7fe2273ae960) 0 empty
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7fe2273f17e0) 0 empty
+
+Vtable for QVariantAnimation
+QVariantAnimation::_ZTV17QVariantAnimation: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QVariantAnimation)
+16 (int (*)(...))QVariantAnimation::metaObject
+24 (int (*)(...))QVariantAnimation::qt_metacast
+32 (int (*)(...))QVariantAnimation::qt_metacall
+40 (int (*)(...))QVariantAnimation::~QVariantAnimation
+48 (int (*)(...))QVariantAnimation::~QVariantAnimation
+56 (int (*)(...))QVariantAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QVariantAnimation::duration
+120 (int (*)(...))QVariantAnimation::updateCurrentTime
+128 (int (*)(...))QVariantAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+144 (int (*)(...))QVariantAnimation::updateCurrentValue
+152 (int (*)(...))QVariantAnimation::interpolated
+
+Class QVariantAnimation
+ size=16 align=8
+ base size=16 base align=8
+QVariantAnimation (0x0x7fe2273b5478) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+ QAbstractAnimation (0x0x7fe2273b54e0) 0
+ primary-for QVariantAnimation (0x0x7fe2273b5478)
+ QObject (0x0x7fe2273f1780) 0
+ primary-for QAbstractAnimation (0x0x7fe2273b54e0)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7fe2273f1a20) 0 empty
+
+Vtable for QPropertyAnimation
+QPropertyAnimation::_ZTV18QPropertyAnimation: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QPropertyAnimation)
+16 (int (*)(...))QPropertyAnimation::metaObject
+24 (int (*)(...))QPropertyAnimation::qt_metacast
+32 (int (*)(...))QPropertyAnimation::qt_metacall
+40 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+48 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+56 (int (*)(...))QPropertyAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QVariantAnimation::duration
+120 (int (*)(...))QVariantAnimation::updateCurrentTime
+128 (int (*)(...))QPropertyAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+144 (int (*)(...))QPropertyAnimation::updateCurrentValue
+152 (int (*)(...))QVariantAnimation::interpolated
+
+Class QPropertyAnimation
+ size=16 align=8
+ base size=16 base align=8
+QPropertyAnimation (0x0x7fe2273b55b0) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+ QVariantAnimation (0x0x7fe2273b5618) 0
+ primary-for QPropertyAnimation (0x0x7fe2273b55b0)
+ QAbstractAnimation (0x0x7fe2273b5680) 0
+ primary-for QVariantAnimation (0x0x7fe2273b5618)
+ QObject (0x0x7fe2273f19c0) 0
+ primary-for QAbstractAnimation (0x0x7fe2273b5680)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7fe2274ab180) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7fe22719d600) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7fe22719d5a0) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7fe226f55d80) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7fe226d6ecc0) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7fe226d6ec60) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7fe226de6340) 0
+ QRandomGenerator (0x0x7fe226dedf60) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7fe226e1bba0) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7fe226e1bde0) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7fe226e82300) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7fe226e827e0) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7fe226efd240) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7fe226b57a20) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7fe226c25840) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7fe226cfc3c0) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7fe226cfc6c0) 0 empty
+
+Vtable for QSaveFile
+QSaveFile::_ZTV9QSaveFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSaveFile)
+16 (int (*)(...))QSaveFile::metaObject
+24 (int (*)(...))QSaveFile::qt_metacast
+32 (int (*)(...))QSaveFile::qt_metacall
+40 (int (*)(...))QSaveFile::~QSaveFile
+48 (int (*)(...))QSaveFile::~QSaveFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QSaveFile::open
+128 (int (*)(...))QSaveFile::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFileDevice::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QSaveFile::writeData
+248 (int (*)(...))QSaveFile::fileName
+256 (int (*)(...))QFileDevice::resize
+264 (int (*)(...))QFileDevice::permissions
+272 (int (*)(...))QFileDevice::setPermissions
+
+Class QSaveFile
+ size=16 align=8
+ base size=16 base align=8
+QSaveFile (0x0x7fe226c9c5b0) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+ QFileDevice (0x0x7fe226c9c618) 0
+ primary-for QSaveFile (0x0x7fe226c9c5b0)
+ QIODevice (0x0x7fe226ca72a0) 0
+ primary-for QFileDevice (0x0x7fe226c9c618)
+ QObject (0x0x7fe226cfc600) 0
+ primary-for QIODevice (0x0x7fe226ca72a0)
+ QIODeviceBase (0x0x7fe226cfc660) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7fe226cfccc0) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7fe2269954e0) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7fe2269fa1e0) 0 empty
+
+Vtable for QSequentialAnimationGroup
+QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QSequentialAnimationGroup)
+16 (int (*)(...))QSequentialAnimationGroup::metaObject
+24 (int (*)(...))QSequentialAnimationGroup::qt_metacast
+32 (int (*)(...))QSequentialAnimationGroup::qt_metacall
+40 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+48 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+56 (int (*)(...))QSequentialAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSequentialAnimationGroup::duration
+120 (int (*)(...))QSequentialAnimationGroup::updateCurrentTime
+128 (int (*)(...))QSequentialAnimationGroup::updateState
+136 (int (*)(...))QSequentialAnimationGroup::updateDirection
+
+Class QSequentialAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QSequentialAnimationGroup (0x0x7fe2269f91a0) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+ QAnimationGroup (0x0x7fe2269f9208) 0
+ primary-for QSequentialAnimationGroup (0x0x7fe2269f91a0)
+ QAbstractAnimation (0x0x7fe2269f9270) 0
+ primary-for QAnimationGroup (0x0x7fe2269f9208)
+ QObject (0x0x7fe2269fa180) 0
+ primary-for QAbstractAnimation (0x0x7fe2269f9270)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7fe2269f93a8) 0
+ QIterator<QMetaSequence> (0x0x7fe2269f9410) 0
+ QBaseIterator<QMetaSequence> (0x0x7fe2269fa540) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7fe2269f94e0) 0
+ QConstIterator<QMetaSequence> (0x0x7fe2269f9548) 0
+ QBaseIterator<QMetaSequence> (0x0x7fe2269faae0) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7fe2269f95b0) 0
+ QIterable<QMetaSequence> (0x0x7fe226a4c000) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7fe22672c600) 0 empty
+
+Vtable for QSettings
+QSettings::_ZTV9QSettings: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSettings)
+16 (int (*)(...))QSettings::metaObject
+24 (int (*)(...))QSettings::qt_metacast
+32 (int (*)(...))QSettings::qt_metacall
+40 (int (*)(...))QSettings::~QSettings
+48 (int (*)(...))QSettings::~QSettings
+56 (int (*)(...))QSettings::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSettings
+ size=16 align=8
+ base size=16 base align=8
+QSettings (0x0x7fe22672b9c0) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+ QObject (0x0x7fe22672c5a0) 0
+ primary-for QSettings (0x0x7fe22672b9c0)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7fe22672ca20) 0 empty
+
+Vtable for QSharedMemory
+QSharedMemory::_ZTV13QSharedMemory: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSharedMemory)
+16 (int (*)(...))QSharedMemory::metaObject
+24 (int (*)(...))QSharedMemory::qt_metacast
+32 (int (*)(...))QSharedMemory::qt_metacall
+40 (int (*)(...))QSharedMemory::~QSharedMemory
+48 (int (*)(...))QSharedMemory::~QSharedMemory
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSharedMemory
+ size=16 align=8
+ base size=16 base align=8
+QSharedMemory (0x0x7fe22672ba28) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+ QObject (0x0x7fe22672c9c0) 0
+ primary-for QSharedMemory (0x0x7fe22672ba28)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7fe22672cc00) 0 empty
+
+Vtable for QSignalMapper
+QSignalMapper::_ZTV13QSignalMapper: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSignalMapper)
+16 (int (*)(...))QSignalMapper::metaObject
+24 (int (*)(...))QSignalMapper::qt_metacast
+32 (int (*)(...))QSignalMapper::qt_metacall
+40 (int (*)(...))QSignalMapper::~QSignalMapper
+48 (int (*)(...))QSignalMapper::~QSignalMapper
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSignalMapper
+ size=16 align=8
+ base size=16 base align=8
+QSignalMapper (0x0x7fe22672ba90) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+ QObject (0x0x7fe22672cba0) 0
+ primary-for QSignalMapper (0x0x7fe22672ba90)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7fe22a623ea0) 0 empty
+
+Vtable for QSocketNotifier
+QSocketNotifier::_ZTV15QSocketNotifier: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSocketNotifier)
+16 (int (*)(...))QSocketNotifier::metaObject
+24 (int (*)(...))QSocketNotifier::qt_metacast
+32 (int (*)(...))QSocketNotifier::qt_metacall
+40 (int (*)(...))QSocketNotifier::~QSocketNotifier
+48 (int (*)(...))QSocketNotifier::~QSocketNotifier
+56 (int (*)(...))QSocketNotifier::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSocketNotifier
+ size=16 align=8
+ base size=16 base align=8
+QSocketNotifier (0x0x7fe22f358bc8) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+ QObject (0x0x7fe22a623e40) 0
+ primary-for QSocketNotifier (0x0x7fe22f358bc8)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7fe229ce6060) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7fe229ce6720) 0 empty
+
+Vtable for QSortFilterProxyModel
+QSortFilterProxyModel::_ZTV21QSortFilterProxyModel: 59 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QSortFilterProxyModel)
+16 (int (*)(...))QSortFilterProxyModel::metaObject
+24 (int (*)(...))QSortFilterProxyModel::qt_metacast
+32 (int (*)(...))QSortFilterProxyModel::qt_metacall
+40 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+48 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSortFilterProxyModel::index
+120 (int (*)(...))QSortFilterProxyModel::parent
+128 (int (*)(...))QSortFilterProxyModel::sibling
+136 (int (*)(...))QSortFilterProxyModel::rowCount
+144 (int (*)(...))QSortFilterProxyModel::columnCount
+152 (int (*)(...))QSortFilterProxyModel::hasChildren
+160 (int (*)(...))QSortFilterProxyModel::data
+168 (int (*)(...))QSortFilterProxyModel::setData
+176 (int (*)(...))QSortFilterProxyModel::headerData
+184 (int (*)(...))QSortFilterProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QSortFilterProxyModel::mimeTypes
+224 (int (*)(...))QSortFilterProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QSortFilterProxyModel::dropMimeData
+248 (int (*)(...))QSortFilterProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QSortFilterProxyModel::insertRows
+272 (int (*)(...))QSortFilterProxyModel::insertColumns
+280 (int (*)(...))QSortFilterProxyModel::removeRows
+288 (int (*)(...))QSortFilterProxyModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QSortFilterProxyModel::fetchMore
+320 (int (*)(...))QSortFilterProxyModel::canFetchMore
+328 (int (*)(...))QSortFilterProxyModel::flags
+336 (int (*)(...))QSortFilterProxyModel::sort
+344 (int (*)(...))QSortFilterProxyModel::buddy
+352 (int (*)(...))QSortFilterProxyModel::match
+360 (int (*)(...))QSortFilterProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QSortFilterProxyModel::setSourceModel
+416 (int (*)(...))QSortFilterProxyModel::mapToSource
+424 (int (*)(...))QSortFilterProxyModel::mapFromSource
+432 (int (*)(...))QSortFilterProxyModel::mapSelectionToSource
+440 (int (*)(...))QSortFilterProxyModel::mapSelectionFromSource
+448 (int (*)(...))QSortFilterProxyModel::filterAcceptsRow
+456 (int (*)(...))QSortFilterProxyModel::filterAcceptsColumn
+464 (int (*)(...))QSortFilterProxyModel::lessThan
+
+Class QSortFilterProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QSortFilterProxyModel (0x0x7fe22f358c30) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+ QAbstractProxyModel (0x0x7fe22f358c98) 0
+ primary-for QSortFilterProxyModel (0x0x7fe22f358c30)
+ QAbstractItemModel (0x0x7fe22f358d68) 0
+ primary-for QAbstractProxyModel (0x0x7fe22f358c98)
+ QObject (0x0x7fe229ce66c0) 0
+ primary-for QAbstractItemModel (0x0x7fe22f358d68)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7fe229ce6ae0) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7fe2296fe420) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7fe228c65d80) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7fe227beb600) 0 empty
+
+Vtable for QStringListModel
+QStringListModel::_ZTV16QStringListModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QStringListModel)
+16 (int (*)(...))QStringListModel::metaObject
+24 (int (*)(...))QStringListModel::qt_metacast
+32 (int (*)(...))QStringListModel::qt_metacall
+40 (int (*)(...))QStringListModel::~QStringListModel
+48 (int (*)(...))QStringListModel::~QStringListModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QStringListModel::sibling
+136 (int (*)(...))QStringListModel::rowCount
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))QStringListModel::data
+168 (int (*)(...))QStringListModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QStringListModel::itemData
+200 (int (*)(...))QStringListModel::setItemData
+208 (int (*)(...))QStringListModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QStringListModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStringListModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QStringListModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QStringListModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStringListModel::flags
+336 (int (*)(...))QStringListModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QStringListModel
+ size=40 align=8
+ base size=40 base align=8
+QStringListModel (0x0x7fe22f982e38) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+ QAbstractListModel (0x0x7fe22f982f08) 0
+ primary-for QStringListModel (0x0x7fe22f982e38)
+ QAbstractItemModel (0x0x7fe22f982f70) 0
+ primary-for QAbstractListModel (0x0x7fe22f982f08)
+ QObject (0x0x7fe227beb5a0) 0
+ primary-for QAbstractItemModel (0x0x7fe22f982f70)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7fe227beb6c0) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7fe227beb7e0) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7fe227beb960) 0 empty
+
+Vtable for QTemporaryFile
+QTemporaryFile::_ZTV14QTemporaryFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QTemporaryFile)
+16 (int (*)(...))QTemporaryFile::metaObject
+24 (int (*)(...))QTemporaryFile::qt_metacast
+32 (int (*)(...))QTemporaryFile::qt_metacall
+40 (int (*)(...))QTemporaryFile::~QTemporaryFile
+48 (int (*)(...))QTemporaryFile::~QTemporaryFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QTemporaryFile::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFile::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QTemporaryFile::fileName
+256 (int (*)(...))QFile::resize
+264 (int (*)(...))QFile::permissions
+272 (int (*)(...))QFile::setPermissions
+
+Class QTemporaryFile
+ size=16 align=8
+ base size=16 base align=8
+QTemporaryFile (0x0x7fe22f994000) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+ QFile (0x0x7fe22f9940d0) 0
+ primary-for QTemporaryFile (0x0x7fe22f994000)
+ QFileDevice (0x0x7fe22f9941a0) 0
+ primary-for QFile (0x0x7fe22f9940d0)
+ QIODevice (0x0x7fe22f951f50) 0
+ primary-for QFileDevice (0x0x7fe22f9941a0)
+ QObject (0x0x7fe227beb8a0) 0
+ primary-for QIODevice (0x0x7fe22f951f50)
+ QIODeviceBase (0x0x7fe227beb900) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7fe227bebba0) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7fe226a9f180) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7fe226a9f840) 0 empty
+
+Vtable for QTimeLine
+QTimeLine::_ZTV9QTimeLine: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTimeLine)
+16 (int (*)(...))QTimeLine::metaObject
+24 (int (*)(...))QTimeLine::qt_metacast
+32 (int (*)(...))QTimeLine::qt_metacall
+40 (int (*)(...))QTimeLine::~QTimeLine
+48 (int (*)(...))QTimeLine::~QTimeLine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTimeLine::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTimeLine::valueForTime
+
+Class QTimeLine
+ size=16 align=8
+ base size=16 base align=8
+QTimeLine (0x0x7fe22f9946e8) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+ QObject (0x0x7fe226a9f7e0) 0
+ primary-for QTimeLine (0x0x7fe22f9946e8)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7fe226a9fa20) 0 empty
+
+Vtable for QTimer
+QTimer::_ZTV6QTimer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QTimer)
+16 (int (*)(...))QTimer::metaObject
+24 (int (*)(...))QTimer::qt_metacast
+32 (int (*)(...))QTimer::qt_metacall
+40 (int (*)(...))QTimer::~QTimer
+48 (int (*)(...))QTimer::~QTimer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTimer::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTimer
+ size=16 align=8
+ base size=16 base align=8
+QTimer (0x0x7fe22f994750) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+ QObject (0x0x7fe226a9f9c0) 0
+ primary-for QTimer (0x0x7fe22f994750)
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7fe22c9e7840) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7fe22c9e77e0) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7fe227cdf8a0) 0 empty
+
+Vtable for QTranslator
+QTranslator::_ZTV11QTranslator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTranslator)
+16 (int (*)(...))QTranslator::metaObject
+24 (int (*)(...))QTranslator::qt_metacast
+32 (int (*)(...))QTranslator::qt_metacall
+40 (int (*)(...))QTranslator::~QTranslator
+48 (int (*)(...))QTranslator::~QTranslator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTranslator::translate
+120 (int (*)(...))QTranslator::isEmpty
+
+Class QTranslator
+ size=16 align=8
+ base size=16 base align=8
+QTranslator (0x0x7fe22f803068) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+ QObject (0x0x7fe227cdf840) 0
+ primary-for QTranslator (0x0x7fe22f803068)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7fe227cdfa80) 0 empty
+
+Vtable for QTransposeProxyModel
+QTransposeProxyModel::_ZTV20QTransposeProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTransposeProxyModel)
+16 (int (*)(...))QTransposeProxyModel::metaObject
+24 (int (*)(...))QTransposeProxyModel::qt_metacast
+32 (int (*)(...))QTransposeProxyModel::qt_metacall
+40 (int (*)(...))QTransposeProxyModel::~QTransposeProxyModel
+48 (int (*)(...))QTransposeProxyModel::~QTransposeProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTransposeProxyModel::index
+120 (int (*)(...))QTransposeProxyModel::parent
+128 (int (*)(...))QAbstractProxyModel::sibling
+136 (int (*)(...))QTransposeProxyModel::rowCount
+144 (int (*)(...))QTransposeProxyModel::columnCount
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QTransposeProxyModel::headerData
+184 (int (*)(...))QTransposeProxyModel::setHeaderData
+192 (int (*)(...))QTransposeProxyModel::itemData
+200 (int (*)(...))QTransposeProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QAbstractProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QTransposeProxyModel::insertRows
+272 (int (*)(...))QTransposeProxyModel::insertColumns
+280 (int (*)(...))QTransposeProxyModel::removeRows
+288 (int (*)(...))QTransposeProxyModel::removeColumns
+296 (int (*)(...))QTransposeProxyModel::moveRows
+304 (int (*)(...))QTransposeProxyModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QTransposeProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QTransposeProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QTransposeProxyModel::setSourceModel
+416 (int (*)(...))QTransposeProxyModel::mapToSource
+424 (int (*)(...))QTransposeProxyModel::mapFromSource
+432 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+440 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QTransposeProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QTransposeProxyModel (0x0x7fe22f8030d0) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+ QAbstractProxyModel (0x0x7fe22f803270) 0
+ primary-for QTransposeProxyModel (0x0x7fe22f8030d0)
+ QAbstractItemModel (0x0x7fe22f8033a8) 0
+ primary-for QAbstractProxyModel (0x0x7fe22f803270)
+ QObject (0x0x7fe227cdfa20) 0
+ primary-for QAbstractItemModel (0x0x7fe22f8033a8)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7fe227cdfc00) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7fe22cb40420) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7fe22cb40540) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7fe22aa333c0) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7fe22f5c57b8) 0
+ QList<QXmlStreamAttribute> (0x0x7fe22f5c5750) 0
+ QListSpecialMethods<QXmlStreamAttribute> (0x0x7fe22f5c5888) 0 empty
+ QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7fe22a2f2480) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7fe22a2f2d20) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7fe223f4d3c0) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7fe223f53a20) 0
+
+Vtable for QXmlStreamEntityResolver
+QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QXmlStreamEntityResolver)
+16 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+24 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+32 (int (*)(...))QXmlStreamEntityResolver::resolveEntity
+40 (int (*)(...))QXmlStreamEntityResolver::resolveUndeclaredEntity
+
+Class QXmlStreamEntityResolver
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamEntityResolver (0x0x7fe223f5f1e0) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7fe223f5f240) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7fe223f5f7e0) 0
+
+Vtable for QPaintDevice
+QPaintDevice::_ZTV12QPaintDevice: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDevice
+ size=16 align=8
+ base size=10 base align=8
+QPaintDevice (0x0x7fe223f5f9c0) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7fe223f87480) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7fe223fae180) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7fe223fae120) 0
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7fe223fdb1e0) 0
+
+Class QPolygon
+ size=24 align=8
+ base size=24 base align=8
+QPolygon (0x0x7fe22f65a0d0) 0
+ QList<QPoint> (0x0x7fe22f65a138) 0
+ QListSpecialMethods<QPoint> (0x0x7fe22f65a1a0) 0 empty
+ QListSpecialMethodsBase<QPoint> (0x0x7fe223ffcea0) 0 empty
+
+Class QPolygonF
+ size=24 align=8
+ base size=24 base align=8
+QPolygonF (0x0x7fe22f65e4e0) 0
+ QList<QPointF> (0x0x7fe22f65e548) 0
+ QListSpecialMethods<QPointF> (0x0x7fe22f65e5b0) 0 empty
+ QListSpecialMethodsBase<QPointF> (0x0x7fe224039ae0) 0 empty
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7fe22407e300) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7fe22407e2a0) 0
+
+Class QTransform::Affine
+ size=8 align=8
+ base size=8 base align=8
+QTransform::Affine (0x0x7fe2240ae7e0) 0
+
+Class QTransform
+ size=80 align=8
+ base size=74 base align=8
+QTransform (0x0x7fe2240ae780) 0
+
+Vtable for QImage
+QImage::_ZTV6QImage: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QImage)
+16 (int (*)(...))QImage::~QImage
+24 (int (*)(...))QImage::~QImage
+32 (int (*)(...))QImage::devType
+40 (int (*)(...))QImage::paintEngine
+48 (int (*)(...))QImage::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QImage
+ size=24 align=8
+ base size=24 base align=8
+QImage (0x0x7fe22f6764e0) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+ QPaintDevice (0x0x7fe2240db3c0) 0
+ primary-for QImage (0x0x7fe22f6764e0)
+
+Vtable for QPixmap
+QPixmap::_ZTV7QPixmap: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QPixmap)
+16 (int (*)(...))QPixmap::~QPixmap
+24 (int (*)(...))QPixmap::~QPixmap
+32 (int (*)(...))QPixmap::devType
+40 (int (*)(...))QPixmap::paintEngine
+48 (int (*)(...))QPixmap::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPixmap
+ size=24 align=8
+ base size=24 base align=8
+QPixmap (0x0x7fe22f3520d0) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+ QPaintDevice (0x0x7fe224113b40) 0
+ primary-for QPixmap (0x0x7fe22f3520d0)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7fe223d47660) 0
+
+Vtable for QAbstractFileIconProvider
+QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAbstractFileIconProvider)
+16 (int (*)(...))QAbstractFileIconProvider::~QAbstractFileIconProvider
+24 (int (*)(...))QAbstractFileIconProvider::~QAbstractFileIconProvider
+32 (int (*)(...))QAbstractFileIconProvider::icon
+40 (int (*)(...))QAbstractFileIconProvider::icon
+48 (int (*)(...))QAbstractFileIconProvider::type
+56 (int (*)(...))QAbstractFileIconProvider::setOptions
+64 (int (*)(...))QAbstractFileIconProvider::options
+
+Class QAbstractFileIconProvider
+ size=16 align=8
+ base size=16 base align=8
+QAbstractFileIconProvider (0x0x7fe223d6d960) 0
+ vptr=((& QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider) + 16)
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7fe223d6de40) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7fe223d9aba0) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7fe223db8ae0) 0
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7fe223e14300) 0 empty
+
+Vtable for QScreen
+QScreen::_ZTV7QScreen: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QScreen)
+16 (int (*)(...))QScreen::metaObject
+24 (int (*)(...))QScreen::qt_metacast
+32 (int (*)(...))QScreen::qt_metacall
+40 (int (*)(...))QScreen::~QScreen
+48 (int (*)(...))QScreen::~QScreen
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QScreen
+ size=16 align=8
+ base size=16 base align=8
+QScreen (0x0x7fe22f384d68) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+ QObject (0x0x7fe223e142a0) 0
+ primary-for QScreen (0x0x7fe22f384d68)
+
+Class QInputDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDevice::QPrivateSignal (0x0x7fe223e144e0) 0 empty
+
+Vtable for QInputDevice
+QInputDevice::_ZTV12QInputDevice: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputDevice)
+16 (int (*)(...))QInputDevice::metaObject
+24 (int (*)(...))QInputDevice::qt_metacast
+32 (int (*)(...))QInputDevice::qt_metacall
+40 (int (*)(...))QInputDevice::~QInputDevice
+48 (int (*)(...))QInputDevice::~QInputDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QInputDevice
+ size=16 align=8
+ base size=16 base align=8
+QInputDevice (0x0x7fe22f384e38) 0
+ vptr=((& QInputDevice::_ZTV12QInputDevice) + 16)
+ QObject (0x0x7fe223e14480) 0
+ primary-for QInputDevice (0x0x7fe22f384e38)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7fe223e14de0) 0
+
+Class QPointingDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPointingDevice::QPrivateSignal (0x0x7fe223e4d780) 0 empty
+
+Vtable for QPointingDevice
+QPointingDevice::_ZTV15QPointingDevice: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QPointingDevice)
+16 (int (*)(...))QPointingDevice::metaObject
+24 (int (*)(...))QPointingDevice::qt_metacast
+32 (int (*)(...))QPointingDevice::qt_metacall
+40 (int (*)(...))QPointingDevice::~QPointingDevice
+48 (int (*)(...))QPointingDevice::~QPointingDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPointingDevice
+ size=16 align=8
+ base size=16 base align=8
+QPointingDevice (0x0x7fe22f38fe38) 0
+ vptr=((& QPointingDevice::_ZTV15QPointingDevice) + 16)
+ QInputDevice (0x0x7fe22f38fea0) 0
+ primary-for QPointingDevice (0x0x7fe22f38fe38)
+ QObject (0x0x7fe223e4d720) 0
+ primary-for QInputDevice (0x0x7fe22f38fea0)
+
+Class QEventPoint
+ size=8 align=8
+ base size=8 base align=8
+QEventPoint (0x0x7fe223e4dde0) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7fe223e95c00) 0
+
+Vtable for QInputEvent
+QInputEvent::_ZTV11QInputEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QInputEvent)
+16 (int (*)(...))QInputEvent::~QInputEvent
+24 (int (*)(...))QInputEvent::~QInputEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QInputEvent
+ size=40 align=8
+ base size=40 base align=8
+QInputEvent (0x0x7fe22f3a1820) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+ QEvent (0x0x7fe223ebcba0) 0
+ primary-for QInputEvent (0x0x7fe22f3a1820)
+
+Vtable for QPointerEvent
+QPointerEvent::_ZTV13QPointerEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPointerEvent)
+16 (int (*)(...))QPointerEvent::~QPointerEvent
+24 (int (*)(...))QPointerEvent::~QPointerEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QPointerEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QPointerEvent::isBeginEvent
+64 (int (*)(...))QPointerEvent::isUpdateEvent
+72 (int (*)(...))QPointerEvent::isEndEvent
+
+Class QPointerEvent
+ size=64 align=8
+ base size=64 base align=8
+QPointerEvent (0x0x7fe22f3a1888) 0
+ vptr=((& QPointerEvent::_ZTV13QPointerEvent) + 16)
+ QInputEvent (0x0x7fe22f3a18f0) 0
+ primary-for QPointerEvent (0x0x7fe22f3a1888)
+ QEvent (0x0x7fe223ecb0c0) 0
+ primary-for QInputEvent (0x0x7fe22f3a18f0)
+
+Vtable for QSinglePointEvent
+QSinglePointEvent::_ZTV17QSinglePointEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSinglePointEvent)
+16 (int (*)(...))QSinglePointEvent::~QSinglePointEvent
+24 (int (*)(...))QSinglePointEvent::~QSinglePointEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QSinglePointEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QSinglePointEvent
+ size=80 align=8
+ base size=80 base align=8
+QSinglePointEvent (0x0x7fe22f3a30d0) 0
+ vptr=((& QSinglePointEvent::_ZTV17QSinglePointEvent) + 16)
+ QPointerEvent (0x0x7fe22f3a3138) 0
+ primary-for QSinglePointEvent (0x0x7fe22f3a30d0)
+ QInputEvent (0x0x7fe22f3a31a0) 0
+ primary-for QPointerEvent (0x0x7fe22f3a3138)
+ QEvent (0x0x7fe223ecb420) 0
+ primary-for QInputEvent (0x0x7fe22f3a31a0)
+
+Vtable for QEnterEvent
+QEnterEvent::_ZTV11QEnterEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QEnterEvent)
+16 (int (*)(...))QEnterEvent::~QEnterEvent
+24 (int (*)(...))QEnterEvent::~QEnterEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QEnterEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QEnterEvent (0x0x7fe22f3a3208) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+ QSinglePointEvent (0x0x7fe22f3a3270) 0
+ primary-for QEnterEvent (0x0x7fe22f3a3208)
+ QPointerEvent (0x0x7fe22f3a32d8) 0
+ primary-for QSinglePointEvent (0x0x7fe22f3a3270)
+ QInputEvent (0x0x7fe22f3a3340) 0
+ primary-for QPointerEvent (0x0x7fe22f3a32d8)
+ QEvent (0x0x7fe223f03480) 0
+ primary-for QInputEvent (0x0x7fe22f3a3340)
+
+Vtable for QMouseEvent
+QMouseEvent::_ZTV11QMouseEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMouseEvent)
+16 (int (*)(...))QMouseEvent::~QMouseEvent
+24 (int (*)(...))QMouseEvent::~QMouseEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QMouseEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QMouseEvent
+ size=80 align=8
+ base size=80 base align=8
+QMouseEvent (0x0x7fe22f3a33a8) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+ QSinglePointEvent (0x0x7fe22f3a3410) 0
+ primary-for QMouseEvent (0x0x7fe22f3a33a8)
+ QPointerEvent (0x0x7fe22f3a3478) 0
+ primary-for QSinglePointEvent (0x0x7fe22f3a3410)
+ QInputEvent (0x0x7fe22f3a3548) 0
+ primary-for QPointerEvent (0x0x7fe22f3a3478)
+ QEvent (0x0x7fe223f03c00) 0
+ primary-for QInputEvent (0x0x7fe22f3a3548)
+
+Vtable for QHoverEvent
+QHoverEvent::_ZTV11QHoverEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHoverEvent)
+16 (int (*)(...))QHoverEvent::~QHoverEvent
+24 (int (*)(...))QHoverEvent::~QHoverEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QHoverEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QHoverEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QHoverEvent
+ size=96 align=8
+ base size=96 base align=8
+QHoverEvent (0x0x7fe22f3a35b0) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+ QSinglePointEvent (0x0x7fe22f3a3618) 0
+ primary-for QHoverEvent (0x0x7fe22f3a35b0)
+ QPointerEvent (0x0x7fe22f3a3680) 0
+ primary-for QSinglePointEvent (0x0x7fe22f3a3618)
+ QInputEvent (0x0x7fe22f3a36e8) 0
+ primary-for QPointerEvent (0x0x7fe22f3a3680)
+ QEvent (0x0x7fe223f1a1e0) 0
+ primary-for QInputEvent (0x0x7fe22f3a36e8)
+
+Vtable for QWheelEvent
+QWheelEvent::_ZTV11QWheelEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWheelEvent)
+16 (int (*)(...))QWheelEvent::~QWheelEvent
+24 (int (*)(...))QWheelEvent::~QWheelEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QWheelEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QWheelEvent::isBeginEvent
+64 (int (*)(...))QWheelEvent::isUpdateEvent
+72 (int (*)(...))QWheelEvent::isEndEvent
+
+Class QWheelEvent
+ size=96 align=8
+ base size=96 base align=8
+QWheelEvent (0x0x7fe22f3a3750) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+ QSinglePointEvent (0x0x7fe22f3a37b8) 0
+ primary-for QWheelEvent (0x0x7fe22f3a3750)
+ QPointerEvent (0x0x7fe22f3a3820) 0
+ primary-for QSinglePointEvent (0x0x7fe22f3a37b8)
+ QInputEvent (0x0x7fe22f3a3888) 0
+ primary-for QPointerEvent (0x0x7fe22f3a3820)
+ QEvent (0x0x7fe223f1a600) 0
+ primary-for QInputEvent (0x0x7fe22f3a3888)
+
+Vtable for QTabletEvent
+QTabletEvent::_ZTV12QTabletEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTabletEvent)
+16 (int (*)(...))QTabletEvent::~QTabletEvent
+24 (int (*)(...))QTabletEvent::~QTabletEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QTabletEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QTabletEvent
+ size=96 align=8
+ base size=96 base align=8
+QTabletEvent (0x0x7fe22f3a38f0) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+ QSinglePointEvent (0x0x7fe22f3a3958) 0
+ primary-for QTabletEvent (0x0x7fe22f3a38f0)
+ QPointerEvent (0x0x7fe22f3a39c0) 0
+ primary-for QSinglePointEvent (0x0x7fe22f3a3958)
+ QInputEvent (0x0x7fe22f3a3a28) 0
+ primary-for QPointerEvent (0x0x7fe22f3a39c0)
+ QEvent (0x0x7fe223f1aae0) 0
+ primary-for QInputEvent (0x0x7fe22f3a3a28)
+
+Vtable for QNativeGestureEvent
+QNativeGestureEvent::_ZTV19QNativeGestureEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNativeGestureEvent)
+16 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+24 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QNativeGestureEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QNativeGestureEvent
+ size=112 align=8
+ base size=112 base align=8
+QNativeGestureEvent (0x0x7fe22f3a3a90) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+ QSinglePointEvent (0x0x7fe22f3a3b60) 0
+ primary-for QNativeGestureEvent (0x0x7fe22f3a3a90)
+ QPointerEvent (0x0x7fe22f3a3bc8) 0
+ primary-for QSinglePointEvent (0x0x7fe22f3a3b60)
+ QInputEvent (0x0x7fe22f3a3c30) 0
+ primary-for QPointerEvent (0x0x7fe22f3a3bc8)
+ QEvent (0x0x7fe223b333c0) 0
+ primary-for QInputEvent (0x0x7fe22f3a3c30)
+
+Vtable for QKeyEvent
+QKeyEvent::_ZTV9QKeyEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QKeyEvent)
+16 (int (*)(...))QKeyEvent::~QKeyEvent
+24 (int (*)(...))QKeyEvent::~QKeyEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QKeyEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QKeyEvent
+ size=88 align=8
+ base size=82 base align=8
+QKeyEvent (0x0x7fe22f3a3c98) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+ QInputEvent (0x0x7fe22f3a3d00) 0
+ primary-for QKeyEvent (0x0x7fe22f3a3c98)
+ QEvent (0x0x7fe223b338a0) 0
+ primary-for QInputEvent (0x0x7fe22f3a3d00)
+
+Vtable for QFocusEvent
+QFocusEvent::_ZTV11QFocusEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusEvent)
+16 (int (*)(...))QFocusEvent::~QFocusEvent
+24 (int (*)(...))QFocusEvent::~QFocusEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QFocusEvent::clone
+
+Class QFocusEvent
+ size=24 align=8
+ base size=20 base align=8
+QFocusEvent (0x0x7fe22f3a3d68) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+ QEvent (0x0x7fe223b33ea0) 0
+ primary-for QFocusEvent (0x0x7fe22f3a3d68)
+
+Vtable for QPaintEvent
+QPaintEvent::_ZTV11QPaintEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPaintEvent)
+16 (int (*)(...))QPaintEvent::~QPaintEvent
+24 (int (*)(...))QPaintEvent::~QPaintEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QPaintEvent::clone
+
+Class QPaintEvent
+ size=48 align=8
+ base size=41 base align=8
+QPaintEvent (0x0x7fe22f3a3dd0) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+ QEvent (0x0x7fe223b4f240) 0
+ primary-for QPaintEvent (0x0x7fe22f3a3dd0)
+
+Vtable for QMoveEvent
+QMoveEvent::_ZTV10QMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QMoveEvent)
+16 (int (*)(...))QMoveEvent::~QMoveEvent
+24 (int (*)(...))QMoveEvent::~QMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QMoveEvent::clone
+
+Class QMoveEvent
+ size=32 align=8
+ base size=32 base align=8
+QMoveEvent (0x0x7fe22f3a3ea0) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+ QEvent (0x0x7fe223b4f540) 0
+ primary-for QMoveEvent (0x0x7fe22f3a3ea0)
+
+Vtable for QExposeEvent
+QExposeEvent::_ZTV12QExposeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QExposeEvent)
+16 (int (*)(...))QExposeEvent::~QExposeEvent
+24 (int (*)(...))QExposeEvent::~QExposeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QExposeEvent::clone
+
+Class QExposeEvent
+ size=24 align=8
+ base size=24 base align=8
+QExposeEvent (0x0x7fe22f3a3f08) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+ QEvent (0x0x7fe223b4f8a0) 0
+ primary-for QExposeEvent (0x0x7fe22f3a3f08)
+
+Vtable for QPlatformSurfaceEvent
+QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QPlatformSurfaceEvent)
+16 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+24 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QPlatformSurfaceEvent::clone
+
+Class QPlatformSurfaceEvent
+ size=24 align=8
+ base size=20 base align=8
+QPlatformSurfaceEvent (0x0x7fe22f3a3f70) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+ QEvent (0x0x7fe223b4fb40) 0
+ primary-for QPlatformSurfaceEvent (0x0x7fe22f3a3f70)
+
+Vtable for QResizeEvent
+QResizeEvent::_ZTV12QResizeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QResizeEvent)
+16 (int (*)(...))QResizeEvent::~QResizeEvent
+24 (int (*)(...))QResizeEvent::~QResizeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QResizeEvent::clone
+
+Class QResizeEvent
+ size=32 align=8
+ base size=32 base align=8
+QResizeEvent (0x0x7fe22f3a7000) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+ QEvent (0x0x7fe223b4fe40) 0
+ primary-for QResizeEvent (0x0x7fe22f3a7000)
+
+Vtable for QCloseEvent
+QCloseEvent::_ZTV11QCloseEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QCloseEvent)
+16 (int (*)(...))QCloseEvent::~QCloseEvent
+24 (int (*)(...))QCloseEvent::~QCloseEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QCloseEvent
+ size=16 align=8
+ base size=16 base align=8
+QCloseEvent (0x0x7fe22f3a7068) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+ QEvent (0x0x7fe223b661e0) 0
+ primary-for QCloseEvent (0x0x7fe22f3a7068)
+
+Vtable for QIconDragEvent
+QIconDragEvent::_ZTV14QIconDragEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QIconDragEvent)
+16 (int (*)(...))QIconDragEvent::~QIconDragEvent
+24 (int (*)(...))QIconDragEvent::~QIconDragEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QIconDragEvent
+ size=16 align=8
+ base size=16 base align=8
+QIconDragEvent (0x0x7fe22f3a70d0) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+ QEvent (0x0x7fe223b66240) 0
+ primary-for QIconDragEvent (0x0x7fe22f3a70d0)
+
+Vtable for QShowEvent
+QShowEvent::_ZTV10QShowEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QShowEvent)
+16 (int (*)(...))QShowEvent::~QShowEvent
+24 (int (*)(...))QShowEvent::~QShowEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QShowEvent
+ size=16 align=8
+ base size=16 base align=8
+QShowEvent (0x0x7fe22f3a7138) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+ QEvent (0x0x7fe223b662a0) 0
+ primary-for QShowEvent (0x0x7fe22f3a7138)
+
+Vtable for QHideEvent
+QHideEvent::_ZTV10QHideEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHideEvent)
+16 (int (*)(...))QHideEvent::~QHideEvent
+24 (int (*)(...))QHideEvent::~QHideEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QHideEvent
+ size=16 align=8
+ base size=16 base align=8
+QHideEvent (0x0x7fe22f3a71a0) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+ QEvent (0x0x7fe223b66300) 0
+ primary-for QHideEvent (0x0x7fe22f3a71a0)
+
+Vtable for QContextMenuEvent
+QContextMenuEvent::_ZTV17QContextMenuEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QContextMenuEvent)
+16 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+24 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QContextMenuEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QContextMenuEvent
+ size=64 align=8
+ base size=57 base align=8
+QContextMenuEvent (0x0x7fe22f3a7270) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+ QInputEvent (0x0x7fe22f3a72d8) 0
+ primary-for QContextMenuEvent (0x0x7fe22f3a7270)
+ QEvent (0x0x7fe223b66360) 0
+ primary-for QInputEvent (0x0x7fe22f3a72d8)
+
+Class QInputMethodEvent::Attribute
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodEvent::Attribute (0x0x7fe223b66900) 0
+
+Vtable for QInputMethodEvent
+QInputMethodEvent::_ZTV17QInputMethodEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QInputMethodEvent)
+16 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+24 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputMethodEvent::clone
+
+Class QInputMethodEvent
+ size=96 align=8
+ base size=96 base align=8
+QInputMethodEvent (0x0x7fe22f3a7340) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+ QEvent (0x0x7fe223b668a0) 0
+ primary-for QInputMethodEvent (0x0x7fe22f3a7340)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=40 align=8
+ base size=40 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7fe223bbd120) 0
+
+Vtable for QInputMethodQueryEvent
+QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QInputMethodQueryEvent)
+16 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+24 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputMethodQueryEvent::clone
+
+Class QInputMethodQueryEvent
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodQueryEvent (0x0x7fe22f3ae618) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+ QEvent (0x0x7fe223bbd0c0) 0
+ primary-for QInputMethodQueryEvent (0x0x7fe22f3ae618)
+
+Vtable for QDropEvent
+QDropEvent::_ZTV10QDropEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDropEvent)
+16 (int (*)(...))QDropEvent::~QDropEvent
+24 (int (*)(...))QDropEvent::~QDropEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDropEvent::clone
+
+Class QDropEvent
+ size=64 align=8
+ base size=64 base align=8
+QDropEvent (0x0x7fe22f3b3888) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+ QEvent (0x0x7fe223bfd240) 0
+ primary-for QDropEvent (0x0x7fe22f3b3888)
+
+Vtable for QDragMoveEvent
+QDragMoveEvent::_ZTV14QDragMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDragMoveEvent)
+16 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+24 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDragMoveEvent::clone
+
+Class QDragMoveEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragMoveEvent (0x0x7fe22f3b38f0) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+ QDropEvent (0x0x7fe22f3b39c0) 0
+ primary-for QDragMoveEvent (0x0x7fe22f3b38f0)
+ QEvent (0x0x7fe223bfd960) 0
+ primary-for QDropEvent (0x0x7fe22f3b39c0)
+
+Vtable for QDragEnterEvent
+QDragEnterEvent::_ZTV15QDragEnterEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragEnterEvent)
+16 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+24 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDragMoveEvent::clone
+
+Class QDragEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragEnterEvent (0x0x7fe22f3b3a28) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+ QDragMoveEvent (0x0x7fe22f3b3a90) 0
+ primary-for QDragEnterEvent (0x0x7fe22f3b3a28)
+ QDropEvent (0x0x7fe22f3b3af8) 0
+ primary-for QDragMoveEvent (0x0x7fe22f3b3a90)
+ QEvent (0x0x7fe223bfdde0) 0
+ primary-for QDropEvent (0x0x7fe22f3b3af8)
+
+Vtable for QDragLeaveEvent
+QDragLeaveEvent::_ZTV15QDragLeaveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragLeaveEvent)
+16 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+24 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QDragLeaveEvent
+ size=16 align=8
+ base size=16 base align=8
+QDragLeaveEvent (0x0x7fe22f3b3b60) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+ QEvent (0x0x7fe223bfde40) 0
+ primary-for QDragLeaveEvent (0x0x7fe22f3b3b60)
+
+Vtable for QHelpEvent
+QHelpEvent::_ZTV10QHelpEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHelpEvent)
+16 (int (*)(...))QHelpEvent::~QHelpEvent
+24 (int (*)(...))QHelpEvent::~QHelpEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QHelpEvent::clone
+
+Class QHelpEvent
+ size=32 align=8
+ base size=32 base align=8
+QHelpEvent (0x0x7fe22f3b3bc8) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+ QEvent (0x0x7fe223bfdea0) 0
+ primary-for QHelpEvent (0x0x7fe22f3b3bc8)
+
+Vtable for QStatusTipEvent
+QStatusTipEvent::_ZTV15QStatusTipEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QStatusTipEvent)
+16 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+24 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QStatusTipEvent::clone
+
+Class QStatusTipEvent
+ size=40 align=8
+ base size=40 base align=8
+QStatusTipEvent (0x0x7fe22f3b3c30) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+ QEvent (0x0x7fe223c1a3c0) 0
+ primary-for QStatusTipEvent (0x0x7fe22f3b3c30)
+
+Vtable for QWhatsThisClickedEvent
+QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QWhatsThisClickedEvent)
+16 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+24 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QWhatsThisClickedEvent::clone
+
+Class QWhatsThisClickedEvent
+ size=40 align=8
+ base size=40 base align=8
+QWhatsThisClickedEvent (0x0x7fe22f3b3c98) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+ QEvent (0x0x7fe223c1a660) 0
+ primary-for QWhatsThisClickedEvent (0x0x7fe22f3b3c98)
+
+Vtable for QActionEvent
+QActionEvent::_ZTV12QActionEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionEvent)
+16 (int (*)(...))QActionEvent::~QActionEvent
+24 (int (*)(...))QActionEvent::~QActionEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QActionEvent::clone
+
+Class QActionEvent
+ size=32 align=8
+ base size=32 base align=8
+QActionEvent (0x0x7fe22f3b3d00) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+ QEvent (0x0x7fe223c1a900) 0
+ primary-for QActionEvent (0x0x7fe22f3b3d00)
+
+Vtable for QFileOpenEvent
+QFileOpenEvent::_ZTV14QFileOpenEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QFileOpenEvent)
+16 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+24 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QFileOpenEvent::clone
+
+Class QFileOpenEvent
+ size=48 align=8
+ base size=48 base align=8
+QFileOpenEvent (0x0x7fe22f3b3dd0) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+ QEvent (0x0x7fe223c1ac60) 0
+ primary-for QFileOpenEvent (0x0x7fe22f3b3dd0)
+
+Vtable for QToolBarChangeEvent
+QToolBarChangeEvent::_ZTV19QToolBarChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QToolBarChangeEvent)
+16 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+24 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QToolBarChangeEvent::clone
+
+Class QToolBarChangeEvent
+ size=24 align=8
+ base size=17 base align=8
+QToolBarChangeEvent (0x0x7fe22f3b3e38) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+ QEvent (0x0x7fe223c1af60) 0
+ primary-for QToolBarChangeEvent (0x0x7fe22f3b3e38)
+
+Vtable for QShortcutEvent
+QShortcutEvent::_ZTV14QShortcutEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QShortcutEvent)
+16 (int (*)(...))QShortcutEvent::~QShortcutEvent
+24 (int (*)(...))QShortcutEvent::~QShortcutEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QShortcutEvent::clone
+
+Class QShortcutEvent
+ size=32 align=8
+ base size=29 base align=8
+QShortcutEvent (0x0x7fe22f3b3ea0) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+ QEvent (0x0x7fe223c372a0) 0
+ primary-for QShortcutEvent (0x0x7fe22f3b3ea0)
+
+Vtable for QWindowStateChangeEvent
+QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QWindowStateChangeEvent)
+16 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+24 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QWindowStateChangeEvent::clone
+
+Class QWindowStateChangeEvent
+ size=24 align=8
+ base size=21 base align=8
+QWindowStateChangeEvent (0x0x7fe22f3b3f08) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+ QEvent (0x0x7fe223c37600) 0
+ primary-for QWindowStateChangeEvent (0x0x7fe22f3b3f08)
+
+Vtable for QTouchEvent
+QTouchEvent::_ZTV11QTouchEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTouchEvent)
+16 (int (*)(...))QTouchEvent::~QTouchEvent
+24 (int (*)(...))QTouchEvent::~QTouchEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QTouchEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QTouchEvent::isBeginEvent
+64 (int (*)(...))QTouchEvent::isUpdateEvent
+72 (int (*)(...))QTouchEvent::isEndEvent
+
+Class QTouchEvent
+ size=80 align=8
+ base size=79 base align=8
+QTouchEvent (0x0x7fe22f3b3f70) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+ QPointerEvent (0x0x7fe22f3b6000) 0
+ primary-for QTouchEvent (0x0x7fe22f3b3f70)
+ QInputEvent (0x0x7fe22f3b6068) 0
+ primary-for QPointerEvent (0x0x7fe22f3b6000)
+ QEvent (0x0x7fe223c37900) 0
+ primary-for QInputEvent (0x0x7fe22f3b6068)
+
+Vtable for QScrollPrepareEvent
+QScrollPrepareEvent::_ZTV19QScrollPrepareEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollPrepareEvent)
+16 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+24 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScrollPrepareEvent::clone
+
+Class QScrollPrepareEvent
+ size=96 align=8
+ base size=96 base align=8
+QScrollPrepareEvent (0x0x7fe22f3b60d0) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+ QEvent (0x0x7fe223c37c60) 0
+ primary-for QScrollPrepareEvent (0x0x7fe22f3b60d0)
+
+Vtable for QScrollEvent
+QScrollEvent::_ZTV12QScrollEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QScrollEvent)
+16 (int (*)(...))QScrollEvent::~QScrollEvent
+24 (int (*)(...))QScrollEvent::~QScrollEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScrollEvent::clone
+
+Class QScrollEvent
+ size=56 align=8
+ base size=52 base align=8
+QScrollEvent (0x0x7fe22f3b6138) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+ QEvent (0x0x7fe223c530c0) 0
+ primary-for QScrollEvent (0x0x7fe22f3b6138)
+
+Vtable for QScreenOrientationChangeEvent
+QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QScreenOrientationChangeEvent)
+16 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+24 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScreenOrientationChangeEvent::clone
+
+Class QScreenOrientationChangeEvent
+ size=32 align=8
+ base size=28 base align=8
+QScreenOrientationChangeEvent (0x0x7fe22f3b61a0) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+ QEvent (0x0x7fe223c53480) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7fe22f3b61a0)
+
+Vtable for QApplicationStateChangeEvent
+QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QApplicationStateChangeEvent)
+16 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+24 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QApplicationStateChangeEvent::clone
+
+Class QApplicationStateChangeEvent
+ size=24 align=8
+ base size=20 base align=8
+QApplicationStateChangeEvent (0x0x7fe22f3b6208) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+ QEvent (0x0x7fe223c537e0) 0
+ primary-for QApplicationStateChangeEvent (0x0x7fe22f3b6208)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7fe223c53ae0) 0
+
+Class QFontDatabase
+ size=1 align=1
+ base size=0 base align=1
+QFontDatabase (0x0x7fe223ca1b40) 0 empty
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7fe223ca1d20) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7fe223cd7c00) 0
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7fe223d11300) 0
+
+Class QBrushData
+ size=104 align=8
+ base size=104 base align=8
+QBrushData (0x0x7fe223932e40) 0
+
+Class QGradient::QGradientData
+ size=48 align=8
+ base size=48 base align=8
+QGradient::QGradientData (0x0x7fe22393c0c0) 0
+
+Class QGradient
+ size=88 align=8
+ base size=88 base align=8
+QGradient (0x0x7fe22393c060) 0
+
+Class QLinearGradient
+ size=88 align=8
+ base size=88 base align=8
+QLinearGradient (0x0x7fe229763b60) 0
+ QGradient (0x0x7fe22393cf60) 0
+
+Class QRadialGradient
+ size=88 align=8
+ base size=88 base align=8
+QRadialGradient (0x0x7fe229763af8) 0
+ QGradient (0x0x7fe22397d060) 0
+
+Class QConicalGradient
+ size=88 align=8
+ base size=88 base align=8
+QConicalGradient (0x0x7fe229775068) 0
+ QGradient (0x0x7fe22397d180) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7fe22397d240) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7fe2239a9300) 0
+
+Class QTextOption
+ size=24 align=8
+ base size=24 base align=8
+QTextOption (0x0x7fe2239a92a0) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7fe2239cc060) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7fe2239dad20) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7fe2269d7bc8) 0
+ QTextFormat (0x0x7fe223a423c0) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7fe223a826e8) 0
+ QTextFormat (0x0x7fe223a818a0) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7fe223aa2340) 0
+ QTextFormat (0x0x7fe223a9ede0) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7fe223ab3f08) 0
+ QTextCharFormat (0x0x7fe223ab3f70) 0
+ QTextFormat (0x0x7fe223ab6cc0) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7fe223accbc8) 0
+ QTextFormat (0x0x7fe223acdb40) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7fe223aea820) 0
+ QTextFrameFormat (0x0x7fe223aea888) 0
+ QTextFormat (0x0x7fe223ae8f60) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7fe223b084e0) 0
+ QTextCharFormat (0x0x7fe223b08548) 0
+ QTextFormat (0x0x7fe223b0b240) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7fe22372a780) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7fe223764de0) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7fe223771240) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7fe2237711e0) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7fe2237b7300) 0
+
+Vtable for QAbstractUndoItem
+QAbstractUndoItem::_ZTV17QAbstractUndoItem: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAbstractUndoItem)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractUndoItem
+ size=8 align=8
+ base size=8 base align=8
+QAbstractUndoItem (0x0x7fe2237b7780) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7fe2237b7a20) 0 empty
+
+Vtable for QTextDocument
+QTextDocument::_ZTV13QTextDocument: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QTextDocument)
+16 (int (*)(...))QTextDocument::metaObject
+24 (int (*)(...))QTextDocument::qt_metacast
+32 (int (*)(...))QTextDocument::qt_metacall
+40 (int (*)(...))QTextDocument::~QTextDocument
+48 (int (*)(...))QTextDocument::~QTextDocument
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextDocument::clear
+120 (int (*)(...))QTextDocument::createObject
+128 (int (*)(...))QTextDocument::loadResource
+
+Class QTextDocument
+ size=16 align=8
+ base size=16 base align=8
+QTextDocument (0x0x7fe2237bb138) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+ QObject (0x0x7fe2237b79c0) 0
+ primary-for QTextDocument (0x0x7fe2237bb138)
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7fe2237f1240) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7fe2238405a0) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7fe223840600) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=80 align=8
+ base size=80 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7fe223840660) 0
+
+Vtable for QAbstractTextDocumentLayout
+QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAbstractTextDocumentLayout)
+16 (int (*)(...))QAbstractTextDocumentLayout::metaObject
+24 (int (*)(...))QAbstractTextDocumentLayout::qt_metacast
+32 (int (*)(...))QAbstractTextDocumentLayout::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractTextDocumentLayout::resizeInlineObject
+176 (int (*)(...))QAbstractTextDocumentLayout::positionInlineObject
+184 (int (*)(...))QAbstractTextDocumentLayout::drawInlineObject
+
+Class QAbstractTextDocumentLayout
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTextDocumentLayout (0x0x7fe22383e478) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+ QObject (0x0x7fe223840540) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7fe22383e478)
+
+Vtable for QTextObjectInterface
+QTextObjectInterface::_ZTV20QTextObjectInterface: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextObjectInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QTextObjectInterface
+ size=8 align=8
+ base size=8 base align=8
+QTextObjectInterface (0x0x7fe22389ec00) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7fe22389ee40) 0
+
+Vtable for QAccessible::ActivationObserver
+QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN11QAccessible18ActivationObserverE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessible::ActivationObserver
+ size=8 align=8
+ base size=8 base align=8
+QAccessible::ActivationObserver (0x0x7fe22389eea0) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7fe22389ede0) 0 empty
+
+Vtable for QAccessibleInterface
+QAccessibleInterface::_ZTV20QAccessibleInterface: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAccessibleInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QAccessibleInterface::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleInterface::focusChild
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleInterface (0x0x7fe2238bd720) 0 nearly-empty
+ vptr=((& QAccessibleInterface::_ZTV20QAccessibleInterface) + 16)
+
+Vtable for QAccessibleTextInterface
+QAccessibleTextInterface::_ZTV24QAccessibleTextInterface: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAccessibleTextInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))QAccessibleTextInterface::textBeforeOffset
+104 (int (*)(...))QAccessibleTextInterface::textAfterOffset
+112 (int (*)(...))QAccessibleTextInterface::textAtOffset
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTextInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTextInterface (0x0x7fe2238bda80) 0 nearly-empty
+ vptr=((& QAccessibleTextInterface::_ZTV24QAccessibleTextInterface) + 16)
+
+Vtable for QAccessibleEditableTextInterface
+QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleEditableTextInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleEditableTextInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleEditableTextInterface (0x0x7fe2238bdae0) 0 nearly-empty
+ vptr=((& QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface) + 16)
+
+Vtable for QAccessibleValueInterface
+QAccessibleValueInterface::_ZTV25QAccessibleValueInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleValueInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleValueInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleValueInterface (0x0x7fe2238bdb40) 0 nearly-empty
+ vptr=((& QAccessibleValueInterface::_ZTV25QAccessibleValueInterface) + 16)
+
+Vtable for QAccessibleTableCellInterface
+QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTableCellInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTableCellInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTableCellInterface (0x0x7fe2238bdba0) 0 nearly-empty
+ vptr=((& QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface) + 16)
+
+Vtable for QAccessibleTableInterface
+QAccessibleTableInterface::_ZTV25QAccessibleTableInterface: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleTableInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTableInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTableInterface (0x0x7fe2238bdc00) 0 nearly-empty
+ vptr=((& QAccessibleTableInterface::_ZTV25QAccessibleTableInterface) + 16)
+
+Vtable for QAccessibleActionInterface
+QAccessibleActionInterface::_ZTV26QAccessibleActionInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleActionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QAccessibleActionInterface::localizedActionName
+48 (int (*)(...))QAccessibleActionInterface::localizedActionDescription
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleActionInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleActionInterface (0x0x7fe2238bdc60) 0 nearly-empty
+ vptr=((& QAccessibleActionInterface::_ZTV26QAccessibleActionInterface) + 16)
+
+Vtable for QAccessibleImageInterface
+QAccessibleImageInterface::_ZTV25QAccessibleImageInterface: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleImageInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleImageInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleImageInterface (0x0x7fe2238bdd20) 0 nearly-empty
+ vptr=((& QAccessibleImageInterface::_ZTV25QAccessibleImageInterface) + 16)
+
+Vtable for QAccessibleEvent
+QAccessibleEvent::_ZTV16QAccessibleEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAccessibleEvent)
+16 (int (*)(...))QAccessibleEvent::~QAccessibleEvent
+24 (int (*)(...))QAccessibleEvent::~QAccessibleEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleEvent
+ size=32 align=8
+ base size=28 base align=8
+QAccessibleEvent (0x0x7fe2238bdd80) 0
+ vptr=((& QAccessibleEvent::_ZTV16QAccessibleEvent) + 16)
+
+Vtable for QAccessibleStateChangeEvent
+QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleStateChangeEvent)
+16 (int (*)(...))QAccessibleStateChangeEvent::~QAccessibleStateChangeEvent
+24 (int (*)(...))QAccessibleStateChangeEvent::~QAccessibleStateChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleStateChangeEvent
+ size=40 align=8
+ base size=40 base align=8
+QAccessibleStateChangeEvent (0x0x7fe2238a3958) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+ QAccessibleEvent (0x0x7fe2238e9300) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7fe2238a3958)
+
+Vtable for QAccessibleTextCursorEvent
+QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextCursorEvent)
+16 (int (*)(...))QAccessibleTextCursorEvent::~QAccessibleTextCursorEvent
+24 (int (*)(...))QAccessibleTextCursorEvent::~QAccessibleTextCursorEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextCursorEvent
+ size=32 align=8
+ base size=32 base align=8
+QAccessibleTextCursorEvent (0x0x7fe2238a39c0) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+ QAccessibleEvent (0x0x7fe2238e96c0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fe2238a39c0)
+
+Vtable for QAccessibleTextSelectionEvent
+QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTextSelectionEvent)
+16 (int (*)(...))QAccessibleTextSelectionEvent::~QAccessibleTextSelectionEvent
+24 (int (*)(...))QAccessibleTextSelectionEvent::~QAccessibleTextSelectionEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextSelectionEvent
+ size=40 align=8
+ base size=40 base align=8
+QAccessibleTextSelectionEvent (0x0x7fe2238a3a28) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7fe2238a3a90) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7fe2238a3a28)
+ QAccessibleEvent (0x0x7fe2238e9ae0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fe2238a3a90)
+
+Vtable for QAccessibleTextInsertEvent
+QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextInsertEvent)
+16 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+24 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextInsertEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleTextInsertEvent (0x0x7fe2238a3af8) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7fe2238a3b60) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7fe2238a3af8)
+ QAccessibleEvent (0x0x7fe2238e9f60) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fe2238a3b60)
+
+Vtable for QAccessibleTextRemoveEvent
+QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextRemoveEvent)
+16 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+24 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextRemoveEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleTextRemoveEvent (0x0x7fe2238a3bc8) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7fe2238a3c30) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7fe2238a3bc8)
+ QAccessibleEvent (0x0x7fe2239003c0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fe2238a3c30)
+
+Vtable for QAccessibleTextUpdateEvent
+QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextUpdateEvent)
+16 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+24 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextUpdateEvent
+ size=88 align=8
+ base size=88 base align=8
+QAccessibleTextUpdateEvent (0x0x7fe2238a3c98) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7fe2238a3d00) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7fe2238a3c98)
+ QAccessibleEvent (0x0x7fe2239007e0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fe2238a3d00)
+
+Vtable for QAccessibleValueChangeEvent
+QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleValueChangeEvent)
+16 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+24 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleValueChangeEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleValueChangeEvent (0x0x7fe2238a3d68) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+ QAccessibleEvent (0x0x7fe223900c60) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7fe2238a3d68)
+
+Vtable for QAccessibleTableModelChangeEvent
+QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleTableModelChangeEvent)
+16 (int (*)(...))QAccessibleTableModelChangeEvent::~QAccessibleTableModelChangeEvent
+24 (int (*)(...))QAccessibleTableModelChangeEvent::~QAccessibleTableModelChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTableModelChangeEvent
+ size=48 align=8
+ base size=48 base align=8
+QAccessibleTableModelChangeEvent (0x0x7fe2238a3dd0) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+ QAccessibleEvent (0x0x7fe2239110c0) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7fe2238a3dd0)
+
+Vtable for QAccessibleBridge
+QAccessibleBridge::_ZTV17QAccessibleBridge: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleBridge)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridge
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleBridge (0x0x7fe223911960) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7fe223911c00) 0 empty
+
+Vtable for QAccessibleBridgePlugin
+QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QAccessibleBridgePlugin)
+16 (int (*)(...))QAccessibleBridgePlugin::metaObject
+24 (int (*)(...))QAccessibleBridgePlugin::qt_metacast
+32 (int (*)(...))QAccessibleBridgePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridgePlugin
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleBridgePlugin (0x0x7fe2238a3e38) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+ QObject (0x0x7fe223911ba0) 0
+ primary-for QAccessibleBridgePlugin (0x0x7fe2238a3e38)
+
+Vtable for QAccessibleObject
+QAccessibleObject::_ZTV17QAccessibleObject: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleObject)
+16 0
+24 0
+32 (int (*)(...))QAccessibleObject::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleInterface::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleInterface::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleObject::rect
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleObject
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleObject (0x0x7fe2238a3ea0) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+ QAccessibleInterface (0x0x7fe223911cc0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7fe2238a3ea0)
+
+Vtable for QAccessibleApplication
+QAccessibleApplication::_ZTV22QAccessibleApplication: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QAccessibleApplication)
+16 (int (*)(...))QAccessibleApplication::~QAccessibleApplication
+24 (int (*)(...))QAccessibleApplication::~QAccessibleApplication
+32 (int (*)(...))QAccessibleObject::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleApplication::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleApplication::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))QAccessibleApplication::parent
+88 (int (*)(...))QAccessibleApplication::child
+96 (int (*)(...))QAccessibleApplication::childCount
+104 (int (*)(...))QAccessibleApplication::indexOfChild
+112 (int (*)(...))QAccessibleApplication::text
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleObject::rect
+136 (int (*)(...))QAccessibleApplication::role
+144 (int (*)(...))QAccessibleApplication::state
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleApplication
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleApplication (0x0x7fe2238a3f08) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+ QAccessibleObject (0x0x7fe2238a3f70) 0
+ primary-for QAccessibleApplication (0x0x7fe2238a3f08)
+ QAccessibleInterface (0x0x7fe223911d20) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7fe2238a3f70)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7fe223911de0) 0 empty
+
+Vtable for QAccessiblePlugin
+QAccessiblePlugin::_ZTV17QAccessiblePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessiblePlugin)
+16 (int (*)(...))QAccessiblePlugin::metaObject
+24 (int (*)(...))QAccessiblePlugin::qt_metacast
+32 (int (*)(...))QAccessiblePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessiblePlugin
+ size=16 align=8
+ base size=16 base align=8
+QAccessiblePlugin (0x0x7fe22352a000) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+ QObject (0x0x7fe223911d80) 0
+ primary-for QAccessiblePlugin (0x0x7fe22352a000)
+
+Class QAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAction::QPrivateSignal (0x0x7fe223911f00) 0 empty
+
+Vtable for QAction
+QAction::_ZTV7QAction: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QAction)
+16 (int (*)(...))QAction::metaObject
+24 (int (*)(...))QAction::qt_metacast
+32 (int (*)(...))QAction::qt_metacall
+40 (int (*)(...))QAction::~QAction
+48 (int (*)(...))QAction::~QAction
+56 (int (*)(...))QAction::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QAction
+ size=16 align=8
+ base size=16 base align=8
+QAction (0x0x7fe22352a068) 0
+ vptr=((& QAction::_ZTV7QAction) + 16)
+ QObject (0x0x7fe223911ea0) 0
+ primary-for QAction (0x0x7fe22352a068)
+
+Class QActionGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QActionGroup::QPrivateSignal (0x0x7fe22353f840) 0 empty
+
+Vtable for QActionGroup
+QActionGroup::_ZTV12QActionGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionGroup)
+16 (int (*)(...))QActionGroup::metaObject
+24 (int (*)(...))QActionGroup::qt_metacast
+32 (int (*)(...))QActionGroup::qt_metacall
+40 (int (*)(...))QActionGroup::~QActionGroup
+48 (int (*)(...))QActionGroup::~QActionGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QActionGroup
+ size=16 align=8
+ base size=16 base align=8
+QActionGroup (0x0x7fe22352a0d0) 0
+ vptr=((& QActionGroup::_ZTV12QActionGroup) + 16)
+ QObject (0x0x7fe22353f7e0) 0
+ primary-for QActionGroup (0x0x7fe22352a0d0)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7fe22353fae0) 0
+
+Vtable for QSurface
+QSurface::_ZTV8QSurface: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSurface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+
+Class QSurface
+ size=24 align=8
+ base size=24 base align=8
+QSurface (0x0x7fe223563360) 0
+ vptr=((& QSurface::_ZTV8QSurface) + 16)
+
+Vtable for QBitmap
+QBitmap::_ZTV7QBitmap: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QBitmap)
+16 (int (*)(...))QBitmap::~QBitmap
+24 (int (*)(...))QBitmap::~QBitmap
+32 (int (*)(...))QPixmap::devType
+40 (int (*)(...))QPixmap::paintEngine
+48 (int (*)(...))QPixmap::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QBitmap
+ size=24 align=8
+ base size=24 base align=8
+QBitmap (0x0x7fe22352a270) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+ QPixmap (0x0x7fe22352a2d8) 0
+ primary-for QBitmap (0x0x7fe22352a270)
+ QPaintDevice (0x0x7fe223563660) 0
+ primary-for QPixmap (0x0x7fe22352a2d8)
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7fe223582f60) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7fe2235cc180) 0 empty
+
+Vtable for QWindow
+QWindow::_ZTV7QWindow: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWindow)
+16 (int (*)(...))QWindow::metaObject
+24 (int (*)(...))QWindow::qt_metacast
+32 (int (*)(...))QWindow::qt_metacall
+40 (int (*)(...))QWindow::~QWindow
+48 (int (*)(...))QWindow::~QWindow
+56 (int (*)(...))QWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI7QWindow)
+328 (int (*)(...))QWindow::_ZThn16_N7QWindowD1Ev
+336 (int (*)(...))QWindow::_ZThn16_N7QWindowD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QWindow
+ size=40 align=8
+ base size=40 base align=8
+QWindow (0x0x7fe223553ee0) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+ QObject (0x0x7fe2235cc0c0) 0
+ primary-for QWindow (0x0x7fe223553ee0)
+ QSurface (0x0x7fe2235cc120) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 328)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7fe2235cc9c0) 0
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7fe2235ccae0) 0 empty
+
+Vtable for QClipboard
+QClipboard::_ZTV10QClipboard: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QClipboard)
+16 (int (*)(...))QClipboard::metaObject
+24 (int (*)(...))QClipboard::qt_metacast
+32 (int (*)(...))QClipboard::qt_metacall
+40 (int (*)(...))QClipboard::~QClipboard
+48 (int (*)(...))QClipboard::~QClipboard
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QClipboard
+ size=16 align=8
+ base size=16 base align=8
+QClipboard (0x0x7fe2235c5958) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+ QObject (0x0x7fe2235cca80) 0
+ primary-for QClipboard (0x0x7fe2235c5958)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7fe2235ccc00) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7fe22364bba0) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7fe2236a2840) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7fe2236a2900) 0 empty
+
+Vtable for QDrag
+QDrag::_ZTV5QDrag: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDrag)
+16 (int (*)(...))QDrag::metaObject
+24 (int (*)(...))QDrag::qt_metacast
+32 (int (*)(...))QDrag::qt_metacall
+40 (int (*)(...))QDrag::~QDrag
+48 (int (*)(...))QDrag::~QDrag
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDrag
+ size=16 align=8
+ base size=16 base align=8
+QDrag (0x0x7fe2236a6340) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+ QObject (0x0x7fe2236a28a0) 0
+ primary-for QDrag (0x0x7fe2236a6340)
+
+Class QFileSystemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemModel::QPrivateSignal (0x0x7fe2236a2ae0) 0 empty
+
+Vtable for QFileSystemModel
+QFileSystemModel::_ZTV16QFileSystemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QFileSystemModel)
+16 (int (*)(...))QFileSystemModel::metaObject
+24 (int (*)(...))QFileSystemModel::qt_metacast
+32 (int (*)(...))QFileSystemModel::qt_metacall
+40 (int (*)(...))QFileSystemModel::~QFileSystemModel
+48 (int (*)(...))QFileSystemModel::~QFileSystemModel
+56 (int (*)(...))QFileSystemModel::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QFileSystemModel::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileSystemModel::index
+120 (int (*)(...))QFileSystemModel::parent
+128 (int (*)(...))QFileSystemModel::sibling
+136 (int (*)(...))QFileSystemModel::rowCount
+144 (int (*)(...))QFileSystemModel::columnCount
+152 (int (*)(...))QFileSystemModel::hasChildren
+160 (int (*)(...))QFileSystemModel::data
+168 (int (*)(...))QFileSystemModel::setData
+176 (int (*)(...))QFileSystemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QFileSystemModel::mimeTypes
+224 (int (*)(...))QFileSystemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QFileSystemModel::dropMimeData
+248 (int (*)(...))QFileSystemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QFileSystemModel::fetchMore
+320 (int (*)(...))QFileSystemModel::canFetchMore
+328 (int (*)(...))QFileSystemModel::flags
+336 (int (*)(...))QFileSystemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QFileSystemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QFileSystemModel
+ size=16 align=8
+ base size=16 base align=8
+QFileSystemModel (0x0x7fe2236a63a8) 0
+ vptr=((& QFileSystemModel::_ZTV16QFileSystemModel) + 16)
+ QAbstractItemModel (0x0x7fe2236a6410) 0
+ primary-for QFileSystemModel (0x0x7fe2236a63a8)
+ QObject (0x0x7fe2236a2a80) 0
+ primary-for QAbstractItemModel (0x0x7fe2236a6410)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7fe2236e3120) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7fe2236fba20) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7fe223727480) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7fe22338e2a0) 0 empty
+
+Vtable for QGenericPlugin
+QGenericPlugin::_ZTV14QGenericPlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGenericPlugin)
+16 (int (*)(...))QGenericPlugin::metaObject
+24 (int (*)(...))QGenericPlugin::qt_metacast
+32 (int (*)(...))QGenericPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QGenericPlugin
+ size=16 align=8
+ base size=16 base align=8
+QGenericPlugin (0x0x7fe22334ec30) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+ QObject (0x0x7fe22338e240) 0
+ primary-for QGenericPlugin (0x0x7fe22334ec30)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7fe22338e360) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7fe22338e420) 0 empty
+
+Vtable for QInputMethod
+QInputMethod::_ZTV12QInputMethod: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputMethod)
+16 (int (*)(...))QInputMethod::metaObject
+24 (int (*)(...))QInputMethod::qt_metacast
+32 (int (*)(...))QInputMethod::qt_metacall
+40 (int (*)(...))QInputMethod::~QInputMethod
+48 (int (*)(...))QInputMethod::~QInputMethod
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QInputMethod
+ size=16 align=8
+ base size=16 base align=8
+QInputMethod (0x0x7fe22334ec98) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+ QObject (0x0x7fe22338e3c0) 0
+ primary-for QInputMethod (0x0x7fe22334ec98)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7fe22338e6c0) 0 empty
+
+Vtable for QGuiApplication
+QGuiApplication::_ZTV15QGuiApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGuiApplication)
+16 (int (*)(...))QGuiApplication::metaObject
+24 (int (*)(...))QGuiApplication::qt_metacast
+32 (int (*)(...))QGuiApplication::qt_metacall
+40 (int (*)(...))QGuiApplication::~QGuiApplication
+48 (int (*)(...))QGuiApplication::~QGuiApplication
+56 (int (*)(...))QGuiApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGuiApplication::notify
+120 (int (*)(...))QGuiApplication::compressEvent
+
+Class QGuiApplication
+ size=16 align=8
+ base size=16 base align=8
+QGuiApplication (0x0x7fe22334ed00) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+ QCoreApplication (0x0x7fe22334ed68) 0
+ primary-for QGuiApplication (0x0x7fe22334ed00)
+ QObject (0x0x7fe22338e660) 0
+ primary-for QCoreApplication (0x0x7fe22334ed68)
+
+Class QIconEngine::ScaledPixmapArgument
+ size=48 align=8
+ base size=48 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7fe22338e960) 0
+
+Vtable for QIconEngine
+QIconEngine::_ZTV11QIconEngine: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QIconEngine)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QIconEngine::actualSize
+48 (int (*)(...))QIconEngine::pixmap
+56 (int (*)(...))QIconEngine::addPixmap
+64 (int (*)(...))QIconEngine::addFile
+72 (int (*)(...))QIconEngine::key
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QIconEngine::read
+96 (int (*)(...))QIconEngine::write
+104 (int (*)(...))QIconEngine::availableSizes
+112 (int (*)(...))QIconEngine::iconName
+120 (int (*)(...))QIconEngine::isNull
+128 (int (*)(...))QIconEngine::scaledPixmap
+136 (int (*)(...))QIconEngine::virtual_hook
+
+Class QIconEngine
+ size=8 align=8
+ base size=8 base align=8
+QIconEngine (0x0x7fe22338e900) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7fe22338ea20) 0 empty
+
+Vtable for QIconEnginePlugin
+QIconEnginePlugin::_ZTV17QIconEnginePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QIconEnginePlugin)
+16 (int (*)(...))QIconEnginePlugin::metaObject
+24 (int (*)(...))QIconEnginePlugin::qt_metacast
+32 (int (*)(...))QIconEnginePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QIconEnginePlugin
+ size=16 align=8
+ base size=16 base align=8
+QIconEnginePlugin (0x0x7fe22334edd0) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+ QObject (0x0x7fe22338e9c0) 0
+ primary-for QIconEnginePlugin (0x0x7fe22334edd0)
+
+Vtable for QImageIOHandler
+QImageIOHandler::_ZTV15QImageIOHandler: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QImageIOHandler)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QImageIOHandler::write
+56 (int (*)(...))QImageIOHandler::option
+64 (int (*)(...))QImageIOHandler::setOption
+72 (int (*)(...))QImageIOHandler::supportsOption
+80 (int (*)(...))QImageIOHandler::jumpToNextImage
+88 (int (*)(...))QImageIOHandler::jumpToImage
+96 (int (*)(...))QImageIOHandler::loopCount
+104 (int (*)(...))QImageIOHandler::imageCount
+112 (int (*)(...))QImageIOHandler::nextImageDelay
+120 (int (*)(...))QImageIOHandler::currentImageNumber
+128 (int (*)(...))QImageIOHandler::currentImageRect
+
+Class QImageIOHandler
+ size=16 align=8
+ base size=16 base align=8
+QImageIOHandler (0x0x7fe22338eae0) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7fe22338ed20) 0 empty
+
+Vtable for QImageIOPlugin
+QImageIOPlugin::_ZTV14QImageIOPlugin: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QImageIOPlugin)
+16 (int (*)(...))QImageIOPlugin::metaObject
+24 (int (*)(...))QImageIOPlugin::qt_metacast
+32 (int (*)(...))QImageIOPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QImageIOPlugin
+ size=16 align=8
+ base size=16 base align=8
+QImageIOPlugin (0x0x7fe22334ee38) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+ QObject (0x0x7fe22338ecc0) 0
+ primary-for QImageIOPlugin (0x0x7fe22334ee38)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7fe2233e5120) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7fe2233e51e0) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7fe2233e52a0) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7fe223440000) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7fe22349c480) 0 empty
+
+Vtable for QMovie
+QMovie::_ZTV6QMovie: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QMovie)
+16 (int (*)(...))QMovie::metaObject
+24 (int (*)(...))QMovie::qt_metacast
+32 (int (*)(...))QMovie::qt_metacall
+40 (int (*)(...))QMovie::~QMovie
+48 (int (*)(...))QMovie::~QMovie
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QMovie
+ size=16 align=8
+ base size=16 base align=8
+QMovie (0x0x7fe223484618) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+ QObject (0x0x7fe22349c420) 0
+ primary-for QMovie (0x0x7fe223484618)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7fe22349c840) 0 empty
+
+Vtable for QOffscreenSurface
+QOffscreenSurface::_ZTV17QOffscreenSurface: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QOffscreenSurface)
+16 (int (*)(...))QOffscreenSurface::metaObject
+24 (int (*)(...))QOffscreenSurface::qt_metacast
+32 (int (*)(...))QOffscreenSurface::qt_metacall
+40 (int (*)(...))QOffscreenSurface::~QOffscreenSurface
+48 (int (*)(...))QOffscreenSurface::~QOffscreenSurface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QOffscreenSurface::surfaceType
+120 (int (*)(...))QOffscreenSurface::format
+128 (int (*)(...))QOffscreenSurface::size
+136 (int (*)(...))QOffscreenSurface::surfaceHandle
+144 (int (*)(...))-16
+152 (int (*)(...))(& _ZTI17QOffscreenSurface)
+160 (int (*)(...))QOffscreenSurface::_ZThn16_N17QOffscreenSurfaceD1Ev
+168 (int (*)(...))QOffscreenSurface::_ZThn16_N17QOffscreenSurfaceD0Ev
+176 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface6formatEv
+184 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface13surfaceHandleEv
+192 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface11surfaceTypeEv
+200 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface4sizeEv
+
+Class QOffscreenSurface
+ size=40 align=8
+ base size=40 base align=8
+QOffscreenSurface (0x0x7fe223483700) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+ QObject (0x0x7fe22349c780) 0
+ primary-for QOffscreenSurface (0x0x7fe223483700)
+ QSurface (0x0x7fe22349c7e0) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7fe22349ca80) 0 empty
+
+Vtable for QOpenGLContextGroup
+QOpenGLContextGroup::_ZTV19QOpenGLContextGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QOpenGLContextGroup)
+16 (int (*)(...))QOpenGLContextGroup::metaObject
+24 (int (*)(...))QOpenGLContextGroup::qt_metacast
+32 (int (*)(...))QOpenGLContextGroup::qt_metacall
+40 (int (*)(...))QOpenGLContextGroup::~QOpenGLContextGroup
+48 (int (*)(...))QOpenGLContextGroup::~QOpenGLContextGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLContextGroup
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLContextGroup (0x0x7fe223484680) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+ QObject (0x0x7fe22349ca20) 0
+ primary-for QOpenGLContextGroup (0x0x7fe223484680)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7fe22349cc60) 0 empty
+
+Vtable for QOpenGLContext
+QOpenGLContext::_ZTV14QOpenGLContext: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QOpenGLContext)
+16 (int (*)(...))QOpenGLContext::metaObject
+24 (int (*)(...))QOpenGLContext::qt_metacast
+32 (int (*)(...))QOpenGLContext::qt_metacall
+40 (int (*)(...))QOpenGLContext::~QOpenGLContext
+48 (int (*)(...))QOpenGLContext::~QOpenGLContext
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLContext
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLContext (0x0x7fe2234846e8) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+ QObject (0x0x7fe22349cc00) 0
+ primary-for QOpenGLContext (0x0x7fe2234846e8)
+
+Vtable for QNativeInterface::QGLXContext
+QNativeInterface::QGLXContext::_ZTVN16QNativeInterface11QGLXContextE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QGLXContextE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QGLXContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QGLXContext (0x0x7fe22349cde0) 0 nearly-empty
+ vptr=((& QNativeInterface::QGLXContext::_ZTVN16QNativeInterface11QGLXContextE) + 16)
+
+Vtable for QNativeInterface::QEGLContext
+QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QEGLContextE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QEGLContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QEGLContext (0x0x7fe22349ce40) 0 nearly-empty
+ vptr=((& QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE) + 16)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7fe22349cea0) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7fe222fdc480) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7fe222fdc420) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7fe223484af8) 0
+ QOpenGLFunctions (0x0x7fe223050240) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7fe2230505a0) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7fe223484b60) 0
+ QOpenGLFunctionsPrivate (0x0x7fe223050540) 0
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7fe222d342a0) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7fe222d7ed20) 0
+
+Class QPageRanges::Range
+ size=8 align=4
+ base size=8 base align=4
+QPageRanges::Range (0x0x7fe222dd49c0) 0
+
+Class QPageRanges
+ size=8 align=8
+ base size=8 base align=8
+QPageRanges (0x0x7fe222dd4960) 0
+
+Vtable for QPagedPaintDevice
+QPagedPaintDevice::_ZTV17QPagedPaintDevice: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QPagedPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QPagedPaintDevice::setPageLayout
+96 (int (*)(...))QPagedPaintDevice::setPageSize
+104 (int (*)(...))QPagedPaintDevice::setPageOrientation
+112 (int (*)(...))QPagedPaintDevice::setPageMargins
+120 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPagedPaintDevice
+ size=24 align=8
+ base size=24 base align=8
+QPagedPaintDevice (0x0x7fe222e46750) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+ QPaintDevice (0x0x7fe222e41ae0) 0
+ primary-for QPagedPaintDevice (0x0x7fe222e46750)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7fe222e41c60) 0 empty
+
+Vtable for QPaintDeviceWindow
+QPaintDeviceWindow::_ZTV18QPaintDeviceWindow: 59 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+16 (int (*)(...))QPaintDeviceWindow::metaObject
+24 (int (*)(...))QPaintDeviceWindow::qt_metacast
+32 (int (*)(...))QPaintDeviceWindow::qt_metacall
+40 (int (*)(...))QPaintDeviceWindow::~QPaintDeviceWindow
+48 (int (*)(...))QPaintDeviceWindow::~QPaintDeviceWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QPaintDeviceWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QPaintDeviceWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))-16
+336 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+344 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD1Ev
+352 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD0Ev
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+384 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+392 (int (*)(...))-40
+400 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+408 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD1Ev
+416 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD0Ev
+424 (int (*)(...))QPaintDevice::devType
+432 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+440 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+448 (int (*)(...))QPaintDevice::initPainter
+456 (int (*)(...))QPaintDevice::redirected
+464 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDeviceWindow
+ size=56 align=8
+ base size=50 base align=8
+QPaintDeviceWindow (0x0x7fe222e2e770) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+ QWindow (0x0x7fe222e2e7e0) 0
+ primary-for QPaintDeviceWindow (0x0x7fe222e2e770)
+ QObject (0x0x7fe222e41b40) 0
+ primary-for QWindow (0x0x7fe222e2e7e0)
+ QSurface (0x0x7fe222e41ba0) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 344)
+ QPaintDevice (0x0x7fe222e41c00) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 408)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7fe222e41e40) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7fe222e41de0) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7fe222bed9c0) 0 empty
+
+Vtable for QPaintEngine
+QPaintEngine::_ZTV12QPaintEngine: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintEngine)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))QPaintEngine::drawRects
+64 (int (*)(...))QPaintEngine::drawRects
+72 (int (*)(...))QPaintEngine::drawLines
+80 (int (*)(...))QPaintEngine::drawLines
+88 (int (*)(...))QPaintEngine::drawEllipse
+96 (int (*)(...))QPaintEngine::drawEllipse
+104 (int (*)(...))QPaintEngine::drawPath
+112 (int (*)(...))QPaintEngine::drawPoints
+120 (int (*)(...))QPaintEngine::drawPoints
+128 (int (*)(...))QPaintEngine::drawPolygon
+136 (int (*)(...))QPaintEngine::drawPolygon
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QPaintEngine::drawTextItem
+160 (int (*)(...))QPaintEngine::drawTiledPixmap
+168 (int (*)(...))QPaintEngine::drawImage
+176 (int (*)(...))QPaintEngine::coordinateOffset
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))QPaintEngine::createPixmap
+200 (int (*)(...))QPaintEngine::createPixmapFromImage
+
+Class QPaintEngine
+ size=32 align=8
+ base size=32 base align=8
+QPaintEngine (0x0x7fe222c1a1e0) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7fe222c1a7e0) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7fe222c742a0) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7fe222c74240) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7fe222cd55a0) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7fe222cd5d80) 0 empty
+
+Vtable for QPdfWriter
+QPdfWriter::_ZTV10QPdfWriter: 33 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QPdfWriter)
+16 (int (*)(...))QPdfWriter::metaObject
+24 (int (*)(...))QPdfWriter::qt_metacast
+32 (int (*)(...))QPdfWriter::qt_metacall
+40 (int (*)(...))QPdfWriter::~QPdfWriter
+48 (int (*)(...))QPdfWriter::~QPdfWriter
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPdfWriter::newPage
+120 (int (*)(...))QPdfWriter::paintEngine
+128 (int (*)(...))QPdfWriter::metric
+136 (int (*)(...))-16
+144 (int (*)(...))(& _ZTI10QPdfWriter)
+152 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD1Ev
+160 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD0Ev
+168 (int (*)(...))QPaintDevice::devType
+176 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter11paintEngineEv
+184 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter6metricEN12QPaintDevice17PaintDeviceMetricE
+192 (int (*)(...))QPaintDevice::initPainter
+200 (int (*)(...))QPaintDevice::redirected
+208 (int (*)(...))QPaintDevice::sharedPainter
+216 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter7newPageEv
+224 (int (*)(...))QPagedPaintDevice::setPageLayout
+232 (int (*)(...))QPagedPaintDevice::setPageSize
+240 (int (*)(...))QPagedPaintDevice::setPageOrientation
+248 (int (*)(...))QPagedPaintDevice::setPageMargins
+256 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPdfWriter
+ size=40 align=8
+ base size=40 base align=8
+QPdfWriter (0x0x7fe222cd82a0) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+ QObject (0x0x7fe222cd5cc0) 0
+ primary-for QPdfWriter (0x0x7fe222cd82a0)
+ QPagedPaintDevice (0x0x7fe222cd35b0) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 152)
+ QPaintDevice (0x0x7fe222cd5d20) 16
+ primary-for QPagedPaintDevice (0x0x7fe222cd35b0)
+
+Vtable for QPicture
+QPicture::_ZTV8QPicture: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QPicture)
+16 (int (*)(...))QPicture::~QPicture
+24 (int (*)(...))QPicture::~QPicture
+32 (int (*)(...))QPicture::devType
+40 (int (*)(...))QPicture::paintEngine
+48 (int (*)(...))QPicture::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QPicture::setData
+
+Class QPicture
+ size=24 align=8
+ base size=24 base align=8
+QPicture (0x0x7fe222cd3618) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+ QPaintDevice (0x0x7fe222cd5f60) 0
+ primary-for QPicture (0x0x7fe222cd3618)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7fe22292ca20) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7fe22292c9c0) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7fe22296dc60) 0 empty
+
+Vtable for QRasterWindow
+QRasterWindow::_ZTV13QRasterWindow: 60 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QRasterWindow)
+16 (int (*)(...))QRasterWindow::metaObject
+24 (int (*)(...))QRasterWindow::qt_metacast
+32 (int (*)(...))QRasterWindow::qt_metacall
+40 (int (*)(...))QRasterWindow::~QRasterWindow
+48 (int (*)(...))QRasterWindow::~QRasterWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QPaintDeviceWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QRasterWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))QRasterWindow::redirected
+336 (int (*)(...))-16
+344 (int (*)(...))(& _ZTI13QRasterWindow)
+352 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD1Ev
+360 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD0Ev
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+384 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+392 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+400 (int (*)(...))-40
+408 (int (*)(...))(& _ZTI13QRasterWindow)
+416 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD1Ev
+424 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD0Ev
+432 (int (*)(...))QPaintDevice::devType
+440 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+448 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+456 (int (*)(...))QPaintDevice::initPainter
+464 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow10redirectedEP6QPoint
+472 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QRasterWindow
+ size=56 align=8
+ base size=50 base align=8
+QRasterWindow (0x0x7fe22296fb60) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+ QPaintDeviceWindow (0x0x7fe222cd8e70) 0
+ primary-for QRasterWindow (0x0x7fe22296fb60)
+ QWindow (0x0x7fe222cd8ee0) 0
+ primary-for QPaintDeviceWindow (0x0x7fe222cd8e70)
+ QObject (0x0x7fe22296db40) 0
+ primary-for QWindow (0x0x7fe222cd8ee0)
+ QSurface (0x0x7fe22296dba0) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 352)
+ QPaintDevice (0x0x7fe22296dc00) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 416)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7fe22296de40) 0 empty
+
+Vtable for QSessionManager
+QSessionManager::_ZTV15QSessionManager: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSessionManager)
+16 (int (*)(...))QSessionManager::metaObject
+24 (int (*)(...))QSessionManager::qt_metacast
+32 (int (*)(...))QSessionManager::qt_metacall
+40 (int (*)(...))QSessionManager::~QSessionManager
+48 (int (*)(...))QSessionManager::~QSessionManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSessionManager
+ size=16 align=8
+ base size=16 base align=8
+QSessionManager (0x0x7fe22296fc30) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+ QObject (0x0x7fe22296dde0) 0
+ primary-for QSessionManager (0x0x7fe22296fc30)
+
+Class QShortcut::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QShortcut::QPrivateSignal (0x0x7fe222989060) 0 empty
+
+Vtable for QShortcut
+QShortcut::_ZTV9QShortcut: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QShortcut)
+16 (int (*)(...))QShortcut::metaObject
+24 (int (*)(...))QShortcut::qt_metacast
+32 (int (*)(...))QShortcut::qt_metacall
+40 (int (*)(...))QShortcut::~QShortcut
+48 (int (*)(...))QShortcut::~QShortcut
+56 (int (*)(...))QShortcut::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QShortcut
+ size=16 align=8
+ base size=16 base align=8
+QShortcut (0x0x7fe22296fc98) 0
+ vptr=((& QShortcut::_ZTV9QShortcut) + 16)
+ QObject (0x0x7fe222989000) 0
+ primary-for QShortcut (0x0x7fe22296fc98)
+
+Vtable for QStandardItem
+QStandardItem::_ZTV13QStandardItem: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QStandardItem)
+16 (int (*)(...))QStandardItem::~QStandardItem
+24 (int (*)(...))QStandardItem::~QStandardItem
+32 (int (*)(...))QStandardItem::data
+40 (int (*)(...))QStandardItem::multiData
+48 (int (*)(...))QStandardItem::setData
+56 (int (*)(...))QStandardItem::clone
+64 (int (*)(...))QStandardItem::type
+72 (int (*)(...))QStandardItem::read
+80 (int (*)(...))QStandardItem::write
+88 (int (*)(...))QStandardItem::operator<
+
+Class QStandardItem
+ size=16 align=8
+ base size=16 base align=8
+QStandardItem (0x0x7fe222989540) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7fe222a17540) 0 empty
+
+Vtable for QStandardItemModel
+QStandardItemModel::_ZTV18QStandardItemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QStandardItemModel)
+16 (int (*)(...))QStandardItemModel::metaObject
+24 (int (*)(...))QStandardItemModel::qt_metacast
+32 (int (*)(...))QStandardItemModel::qt_metacall
+40 (int (*)(...))QStandardItemModel::~QStandardItemModel
+48 (int (*)(...))QStandardItemModel::~QStandardItemModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStandardItemModel::index
+120 (int (*)(...))QStandardItemModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QStandardItemModel::rowCount
+144 (int (*)(...))QStandardItemModel::columnCount
+152 (int (*)(...))QStandardItemModel::hasChildren
+160 (int (*)(...))QStandardItemModel::data
+168 (int (*)(...))QStandardItemModel::setData
+176 (int (*)(...))QStandardItemModel::headerData
+184 (int (*)(...))QStandardItemModel::setHeaderData
+192 (int (*)(...))QStandardItemModel::itemData
+200 (int (*)(...))QStandardItemModel::setItemData
+208 (int (*)(...))QStandardItemModel::clearItemData
+216 (int (*)(...))QStandardItemModel::mimeTypes
+224 (int (*)(...))QStandardItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QStandardItemModel::dropMimeData
+248 (int (*)(...))QStandardItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStandardItemModel::insertRows
+272 (int (*)(...))QStandardItemModel::insertColumns
+280 (int (*)(...))QStandardItemModel::removeRows
+288 (int (*)(...))QStandardItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStandardItemModel::flags
+336 (int (*)(...))QStandardItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QStandardItemModel::roleNames
+376 (int (*)(...))QStandardItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QStandardItemModel
+ size=16 align=8
+ base size=16 base align=8
+QStandardItemModel (0x0x7fe2229de618) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+ QAbstractItemModel (0x0x7fe2229de680) 0
+ primary-for QStandardItemModel (0x0x7fe2229de618)
+ QObject (0x0x7fe222a174e0) 0
+ primary-for QAbstractItemModel (0x0x7fe2229de680)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7fe222a178a0) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7fe222a7e1e0) 0 empty
+
+Vtable for QStyleHints
+QStyleHints::_ZTV11QStyleHints: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QStyleHints)
+16 (int (*)(...))QStyleHints::metaObject
+24 (int (*)(...))QStyleHints::qt_metacast
+32 (int (*)(...))QStyleHints::qt_metacall
+40 (int (*)(...))QStyleHints::~QStyleHints
+48 (int (*)(...))QStyleHints::~QStyleHints
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QStyleHints
+ size=16 align=8
+ base size=16 base align=8
+QStyleHints (0x0x7fe222a782d8) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+ QObject (0x0x7fe222a7e180) 0
+ primary-for QStyleHints (0x0x7fe222a782d8)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7fe222a7e3c0) 0 empty
+
+Vtable for QTextObject
+QTextObject::_ZTV11QTextObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTextObject)
+16 (int (*)(...))QTextObject::metaObject
+24 (int (*)(...))QTextObject::qt_metacast
+32 (int (*)(...))QTextObject::qt_metacall
+40 (int (*)(...))QTextObject::~QTextObject
+48 (int (*)(...))QTextObject::~QTextObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextObject
+ size=16 align=8
+ base size=16 base align=8
+QTextObject (0x0x7fe222a78340) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+ QObject (0x0x7fe222a7e360) 0
+ primary-for QTextObject (0x0x7fe222a78340)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7fe222a7e5a0) 0 empty
+
+Vtable for QTextBlockGroup
+QTextBlockGroup::_ZTV15QTextBlockGroup: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QTextBlockGroup)
+16 (int (*)(...))QTextBlockGroup::metaObject
+24 (int (*)(...))QTextBlockGroup::qt_metacast
+32 (int (*)(...))QTextBlockGroup::qt_metacall
+40 (int (*)(...))QTextBlockGroup::~QTextBlockGroup
+48 (int (*)(...))QTextBlockGroup::~QTextBlockGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextBlockGroup::blockInserted
+120 (int (*)(...))QTextBlockGroup::blockRemoved
+128 (int (*)(...))QTextBlockGroup::blockFormatChanged
+
+Class QTextBlockGroup
+ size=16 align=8
+ base size=16 base align=8
+QTextBlockGroup (0x0x7fe222a783a8) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+ QTextObject (0x0x7fe222a78410) 0
+ primary-for QTextBlockGroup (0x0x7fe222a783a8)
+ QObject (0x0x7fe222a7e540) 0
+ primary-for QTextObject (0x0x7fe222a78410)
+
+Vtable for QTextFrameLayoutData
+QTextFrameLayoutData::_ZTV20QTextFrameLayoutData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextFrameLayoutData)
+16 (int (*)(...))QTextFrameLayoutData::~QTextFrameLayoutData
+24 (int (*)(...))QTextFrameLayoutData::~QTextFrameLayoutData
+
+Class QTextFrameLayoutData
+ size=8 align=8
+ base size=8 base align=8
+QTextFrameLayoutData (0x0x7fe222a7e720) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7fe222a7e7e0) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7fe222a7e840) 0
+
+Vtable for QTextFrame
+QTextFrame::_ZTV10QTextFrame: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextFrame)
+16 (int (*)(...))QTextFrame::metaObject
+24 (int (*)(...))QTextFrame::qt_metacast
+32 (int (*)(...))QTextFrame::qt_metacall
+40 (int (*)(...))QTextFrame::~QTextFrame
+48 (int (*)(...))QTextFrame::~QTextFrame
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextFrame
+ size=16 align=8
+ base size=16 base align=8
+QTextFrame (0x0x7fe222a78478) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+ QTextObject (0x0x7fe222a784e0) 0
+ primary-for QTextFrame (0x0x7fe222a78478)
+ QObject (0x0x7fe222a7e780) 0
+ primary-for QTextObject (0x0x7fe222a784e0)
+
+Vtable for QTextBlockUserData
+QTextBlockUserData::_ZTV18QTextBlockUserData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QTextBlockUserData)
+16 (int (*)(...))QTextBlockUserData::~QTextBlockUserData
+24 (int (*)(...))QTextBlockUserData::~QTextBlockUserData
+
+Class QTextBlockUserData
+ size=8 align=8
+ base size=8 base align=8
+QTextBlockUserData (0x0x7fe222ac76c0) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7fe222ac7780) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7fe222ac7720) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7fe222b29000) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7fe222741e40) 0 empty
+
+Vtable for QSyntaxHighlighter
+QSyntaxHighlighter::_ZTV18QSyntaxHighlighter: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSyntaxHighlighter)
+16 (int (*)(...))QSyntaxHighlighter::metaObject
+24 (int (*)(...))QSyntaxHighlighter::qt_metacast
+32 (int (*)(...))QSyntaxHighlighter::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QSyntaxHighlighter
+ size=16 align=8
+ base size=16 base align=8
+QSyntaxHighlighter (0x0x7fe22274d680) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+ QObject (0x0x7fe222741de0) 0
+ primary-for QSyntaxHighlighter (0x0x7fe22274d680)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7fe22275e000) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7fe22275e060) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7fe22275e120) 0 empty
+
+Vtable for QTextList
+QTextList::_ZTV9QTextList: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTextList)
+16 (int (*)(...))QTextList::metaObject
+24 (int (*)(...))QTextList::qt_metacast
+32 (int (*)(...))QTextList::qt_metacall
+40 (int (*)(...))QTextList::~QTextList
+48 (int (*)(...))QTextList::~QTextList
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextBlockGroup::blockInserted
+120 (int (*)(...))QTextBlockGroup::blockRemoved
+128 (int (*)(...))QTextBlockGroup::blockFormatChanged
+
+Class QTextList
+ size=16 align=8
+ base size=16 base align=8
+QTextList (0x0x7fe22274d6e8) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+ QTextBlockGroup (0x0x7fe22274d750) 0
+ primary-for QTextList (0x0x7fe22274d6e8)
+ QTextObject (0x0x7fe22274d7b8) 0
+ primary-for QTextBlockGroup (0x0x7fe22274d750)
+ QObject (0x0x7fe22275e0c0) 0
+ primary-for QTextObject (0x0x7fe22274d7b8)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7fe22275e4e0) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7fe22275ed20) 0 empty
+
+Vtable for QTextTable
+QTextTable::_ZTV10QTextTable: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextTable)
+16 (int (*)(...))QTextTable::metaObject
+24 (int (*)(...))QTextTable::qt_metacast
+32 (int (*)(...))QTextTable::qt_metacall
+40 (int (*)(...))QTextTable::~QTextTable
+48 (int (*)(...))QTextTable::~QTextTable
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextTable
+ size=16 align=8
+ base size=16 base align=8
+QTextTable (0x0x7fe22274d820) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+ QTextFrame (0x0x7fe22274d888) 0
+ primary-for QTextTable (0x0x7fe22274d820)
+ QTextObject (0x0x7fe22274d8f0) 0
+ primary-for QTextFrame (0x0x7fe22274d888)
+ QObject (0x0x7fe22275ecc0) 0
+ primary-for QTextObject (0x0x7fe22274d8f0)
+
+Class QUndoGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoGroup::QPrivateSignal (0x0x7fe22278f120) 0 empty
+
+Vtable for QUndoGroup
+QUndoGroup::_ZTV10QUndoGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUndoGroup)
+16 (int (*)(...))QUndoGroup::metaObject
+24 (int (*)(...))QUndoGroup::qt_metacast
+32 (int (*)(...))QUndoGroup::qt_metacall
+40 (int (*)(...))QUndoGroup::~QUndoGroup
+48 (int (*)(...))QUndoGroup::~QUndoGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QUndoGroup
+ size=16 align=8
+ base size=16 base align=8
+QUndoGroup (0x0x7fe22274d958) 0
+ vptr=((& QUndoGroup::_ZTV10QUndoGroup) + 16)
+ QObject (0x0x7fe22278f0c0) 0
+ primary-for QUndoGroup (0x0x7fe22274d958)
+
+Vtable for QUndoCommand
+QUndoCommand::_ZTV12QUndoCommand: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QUndoCommand)
+16 (int (*)(...))QUndoCommand::~QUndoCommand
+24 (int (*)(...))QUndoCommand::~QUndoCommand
+32 (int (*)(...))QUndoCommand::undo
+40 (int (*)(...))QUndoCommand::redo
+48 (int (*)(...))QUndoCommand::id
+56 (int (*)(...))QUndoCommand::mergeWith
+
+Class QUndoCommand
+ size=16 align=8
+ base size=16 base align=8
+QUndoCommand (0x0x7fe22278f2a0) 0
+ vptr=((& QUndoCommand::_ZTV12QUndoCommand) + 16)
+
+Class QUndoStack::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoStack::QPrivateSignal (0x0x7fe22278f360) 0 empty
+
+Vtable for QUndoStack
+QUndoStack::_ZTV10QUndoStack: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUndoStack)
+16 (int (*)(...))QUndoStack::metaObject
+24 (int (*)(...))QUndoStack::qt_metacast
+32 (int (*)(...))QUndoStack::qt_metacall
+40 (int (*)(...))QUndoStack::~QUndoStack
+48 (int (*)(...))QUndoStack::~QUndoStack
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QUndoStack
+ size=16 align=8
+ base size=16 base align=8
+QUndoStack (0x0x7fe22274d9c0) 0
+ vptr=((& QUndoStack::_ZTV10QUndoStack) + 16)
+ QObject (0x0x7fe22278f300) 0
+ primary-for QUndoStack (0x0x7fe22274d9c0)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7fe22278f540) 0 empty
+
+Vtable for QValidator
+QValidator::_ZTV10QValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QValidator)
+16 (int (*)(...))QValidator::metaObject
+24 (int (*)(...))QValidator::qt_metacast
+32 (int (*)(...))QValidator::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))QValidator::fixup
+
+Class QValidator
+ size=16 align=8
+ base size=16 base align=8
+QValidator (0x0x7fe22274da28) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+ QObject (0x0x7fe22278f4e0) 0
+ primary-for QValidator (0x0x7fe22274da28)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7fe22278f7e0) 0 empty
+
+Vtable for QIntValidator
+QIntValidator::_ZTV13QIntValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QIntValidator)
+16 (int (*)(...))QIntValidator::metaObject
+24 (int (*)(...))QIntValidator::qt_metacast
+32 (int (*)(...))QIntValidator::qt_metacall
+40 (int (*)(...))QIntValidator::~QIntValidator
+48 (int (*)(...))QIntValidator::~QIntValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIntValidator::validate
+120 (int (*)(...))QIntValidator::fixup
+
+Class QIntValidator
+ size=24 align=8
+ base size=24 base align=8
+QIntValidator (0x0x7fe22274da90) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+ QValidator (0x0x7fe22274daf8) 0
+ primary-for QIntValidator (0x0x7fe22274da90)
+ QObject (0x0x7fe22278f780) 0
+ primary-for QValidator (0x0x7fe22274daf8)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7fe22278f9c0) 0 empty
+
+Vtable for QDoubleValidator
+QDoubleValidator::_ZTV16QDoubleValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QDoubleValidator)
+16 (int (*)(...))QDoubleValidator::metaObject
+24 (int (*)(...))QDoubleValidator::qt_metacast
+32 (int (*)(...))QDoubleValidator::qt_metacall
+40 (int (*)(...))QDoubleValidator::~QDoubleValidator
+48 (int (*)(...))QDoubleValidator::~QDoubleValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDoubleValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QDoubleValidator
+ size=40 align=8
+ base size=36 base align=8
+QDoubleValidator (0x0x7fe22274db60) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+ QValidator (0x0x7fe22274dbc8) 0
+ primary-for QDoubleValidator (0x0x7fe22274db60)
+ QObject (0x0x7fe22278f960) 0
+ primary-for QValidator (0x0x7fe22274dbc8)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7fe22278fd80) 0 empty
+
+Vtable for QRegularExpressionValidator
+QRegularExpressionValidator::_ZTV27QRegularExpressionValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QRegularExpressionValidator)
+16 (int (*)(...))QRegularExpressionValidator::metaObject
+24 (int (*)(...))QRegularExpressionValidator::qt_metacast
+32 (int (*)(...))QRegularExpressionValidator::qt_metacall
+40 (int (*)(...))QRegularExpressionValidator::~QRegularExpressionValidator
+48 (int (*)(...))QRegularExpressionValidator::~QRegularExpressionValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QRegularExpressionValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QRegularExpressionValidator
+ size=16 align=8
+ base size=16 base align=8
+QRegularExpressionValidator (0x0x7fe22274dc30) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+ QValidator (0x0x7fe22274dc98) 0
+ primary-for QRegularExpressionValidator (0x0x7fe22274dc30)
+ QObject (0x0x7fe22278fd20) 0
+ primary-for QValidator (0x0x7fe22274dc98)
+
+Class QSizePolicy::Bits
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy::Bits (0x0x7fe22278ff60) 0
+
+Class QSizePolicy
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy (0x0x7fe22278ff00) 0
+
+Class QWidgetData
+ size=88 align=8
+ base size=88 base align=8
+QWidgetData (0x0x7fe22282af00) 0
+
+Class QWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidget::QPrivateSignal (0x0x7fe22284e060) 0 empty
+
+Vtable for QWidget
+QWidget::_ZTV7QWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWidget)
+16 (int (*)(...))QWidget::metaObject
+24 (int (*)(...))QWidget::qt_metacast
+32 (int (*)(...))QWidget::qt_metacall
+40 (int (*)(...))QWidget::~QWidget
+48 (int (*)(...))QWidget::~QWidget
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI7QWidget)
+448 (int (*)(...))QWidget::_ZThn16_N7QWidgetD1Ev
+456 (int (*)(...))QWidget::_ZThn16_N7QWidgetD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWidget
+ size=40 align=8
+ base size=40 base align=8
+QWidget (0x0x7fe2227e0850) 0
+ vptr=((& QWidget::_ZTV7QWidget) + 16)
+ QObject (0x0x7fe22282af60) 0
+ primary-for QWidget (0x0x7fe2227e0850)
+ QPaintDevice (0x0x7fe22284e000) 16
+ vptr=((& QWidget::_ZTV7QWidget) + 448)
+
+Class QAbstractButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractButton::QPrivateSignal (0x0x7fe2228c0900) 0 empty
+
+Vtable for QAbstractButton
+QAbstractButton::_ZTV15QAbstractButton: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractButton)
+16 (int (*)(...))QAbstractButton::metaObject
+24 (int (*)(...))QAbstractButton::qt_metacast
+32 (int (*)(...))QAbstractButton::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI15QAbstractButton)
+472 0
+480 0
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractButton
+ size=40 align=8
+ base size=40 base align=8
+QAbstractButton (0x0x7fe222832c98) 0
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 16)
+ QWidget (0x0x7fe2227e0a80) 0
+ primary-for QAbstractButton (0x0x7fe222832c98)
+ QObject (0x0x7fe2228c0840) 0
+ primary-for QWidget (0x0x7fe2227e0a80)
+ QPaintDevice (0x0x7fe2228c08a0) 16
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 472)
+
+Class QAbstractSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSpinBox::QPrivateSignal (0x0x7fe2228c0b40) 0 empty
+
+Vtable for QAbstractSpinBox
+QAbstractSpinBox::_ZTV16QAbstractSpinBox: 70 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAbstractSpinBox)
+16 (int (*)(...))QAbstractSpinBox::metaObject
+24 (int (*)(...))QAbstractSpinBox::qt_metacast
+32 (int (*)(...))QAbstractSpinBox::qt_metacall
+40 (int (*)(...))QAbstractSpinBox::~QAbstractSpinBox
+48 (int (*)(...))QAbstractSpinBox::~QAbstractSpinBox
+56 (int (*)(...))QAbstractSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSpinBox::validate
+440 (int (*)(...))QAbstractSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI16QAbstractSpinBox)
+496 (int (*)(...))QAbstractSpinBox::_ZThn16_N16QAbstractSpinBoxD1Ev
+504 (int (*)(...))QAbstractSpinBox::_ZThn16_N16QAbstractSpinBoxD0Ev
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QAbstractSpinBox (0x0x7fe222832d00) 0
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 16)
+ QWidget (0x0x7fe2227e0af0) 0
+ primary-for QAbstractSpinBox (0x0x7fe222832d00)
+ QObject (0x0x7fe2228c0a80) 0
+ primary-for QWidget (0x0x7fe2227e0af0)
+ QPaintDevice (0x0x7fe2228c0ae0) 16
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 496)
+
+Class QAbstractSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSlider::QPrivateSignal (0x0x7fe2228fc300) 0 empty
+
+Vtable for QAbstractSlider
+QAbstractSlider::_ZTV15QAbstractSlider: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractSlider)
+16 (int (*)(...))QAbstractSlider::metaObject
+24 (int (*)(...))QAbstractSlider::qt_metacast
+32 (int (*)(...))QAbstractSlider::qt_metacall
+40 (int (*)(...))QAbstractSlider::~QAbstractSlider
+48 (int (*)(...))QAbstractSlider::~QAbstractSlider
+56 (int (*)(...))QAbstractSlider::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSlider::sliderChange
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI15QAbstractSlider)
+456 (int (*)(...))QAbstractSlider::_ZThn16_N15QAbstractSliderD1Ev
+464 (int (*)(...))QAbstractSlider::_ZThn16_N15QAbstractSliderD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractSlider
+ size=40 align=8
+ base size=40 base align=8
+QAbstractSlider (0x0x7fe222832ea0) 0
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 16)
+ QWidget (0x0x7fe2227e0620) 0
+ primary-for QAbstractSlider (0x0x7fe222832ea0)
+ QObject (0x0x7fe2228fc240) 0
+ primary-for QWidget (0x0x7fe2227e0620)
+ QPaintDevice (0x0x7fe2228fc2a0) 16
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 456)
+
+Class QSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSlider::QPrivateSignal (0x0x7fe2228fc540) 0 empty
+
+Vtable for QSlider
+QSlider::_ZTV7QSlider: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QSlider)
+16 (int (*)(...))QSlider::metaObject
+24 (int (*)(...))QSlider::qt_metacast
+32 (int (*)(...))QSlider::qt_metacall
+40 (int (*)(...))QSlider::~QSlider
+48 (int (*)(...))QSlider::~QSlider
+56 (int (*)(...))QSlider::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSlider::sizeHint
+136 (int (*)(...))QSlider::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSlider::mousePressEvent
+176 (int (*)(...))QSlider::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSlider::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSlider::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSlider::sliderChange
+440 (int (*)(...))QSlider::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI7QSlider)
+464 (int (*)(...))QSlider::_ZThn16_N7QSliderD1Ev
+472 (int (*)(...))QSlider::_ZThn16_N7QSliderD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSlider
+ size=40 align=8
+ base size=40 base align=8
+QSlider (0x0x7fe222832f08) 0
+ vptr=((& QSlider::_ZTV7QSlider) + 16)
+ QAbstractSlider (0x0x7fe222832f70) 0
+ primary-for QSlider (0x0x7fe222832f08)
+ QWidget (0x0x7fe22291f540) 0
+ primary-for QAbstractSlider (0x0x7fe222832f70)
+ QObject (0x0x7fe2228fc480) 0
+ primary-for QWidget (0x0x7fe22291f540)
+ QPaintDevice (0x0x7fe2228fc4e0) 16
+ vptr=((& QSlider::_ZTV7QSlider) + 464)
+
+Class QStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyle::QPrivateSignal (0x0x7fe2228fc7e0) 0 empty
+
+Vtable for QStyle
+QStyle::_ZTV6QStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QStyle)
+16 (int (*)(...))QStyle::metaObject
+24 (int (*)(...))QStyle::qt_metacast
+32 (int (*)(...))QStyle::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStyle::polish
+120 (int (*)(...))QStyle::unpolish
+128 (int (*)(...))QStyle::polish
+136 (int (*)(...))QStyle::unpolish
+144 (int (*)(...))QStyle::polish
+152 (int (*)(...))QStyle::itemTextRect
+160 (int (*)(...))QStyle::itemPixmapRect
+168 (int (*)(...))QStyle::drawItemText
+176 (int (*)(...))QStyle::drawItemPixmap
+184 (int (*)(...))QStyle::standardPalette
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+232 (int (*)(...))__cxa_pure_virtual
+240 (int (*)(...))__cxa_pure_virtual
+248 (int (*)(...))__cxa_pure_virtual
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))__cxa_pure_virtual
+272 (int (*)(...))__cxa_pure_virtual
+280 (int (*)(...))__cxa_pure_virtual
+288 (int (*)(...))__cxa_pure_virtual
+
+Class QStyle
+ size=16 align=8
+ base size=16 base align=8
+QStyle (0x0x7fe22253e000) 0
+ vptr=((& QStyle::_ZTV6QStyle) + 16)
+ QObject (0x0x7fe2228fc780) 0
+ primary-for QStyle (0x0x7fe22253e000)
+
+Class QTabBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabBar::QPrivateSignal (0x0x7fe22257a8a0) 0 empty
+
+Vtable for QTabBar
+QTabBar::_ZTV7QTabBar: 70 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QTabBar)
+16 (int (*)(...))QTabBar::metaObject
+24 (int (*)(...))QTabBar::qt_metacast
+32 (int (*)(...))QTabBar::qt_metacall
+40 (int (*)(...))QTabBar::~QTabBar
+48 (int (*)(...))QTabBar::~QTabBar
+56 (int (*)(...))QTabBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTabBar::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QTabBar::sizeHint
+136 (int (*)(...))QTabBar::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTabBar::mousePressEvent
+176 (int (*)(...))QTabBar::mouseReleaseEvent
+184 (int (*)(...))QTabBar::mouseDoubleClickEvent
+192 (int (*)(...))QTabBar::mouseMoveEvent
+200 (int (*)(...))QTabBar::wheelEvent
+208 (int (*)(...))QTabBar::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTabBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTabBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QTabBar::showEvent
+352 (int (*)(...))QTabBar::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTabBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QTabBar::tabSizeHint
+440 (int (*)(...))QTabBar::minimumTabSizeHint
+448 (int (*)(...))QTabBar::tabInserted
+456 (int (*)(...))QTabBar::tabRemoved
+464 (int (*)(...))QTabBar::tabLayoutChange
+472 (int (*)(...))QTabBar::initStyleOption
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI7QTabBar)
+496 (int (*)(...))QTabBar::_ZThn16_N7QTabBarD1Ev
+504 (int (*)(...))QTabBar::_ZThn16_N7QTabBarD0Ev
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTabBar
+ size=40 align=8
+ base size=40 base align=8
+QTabBar (0x0x7fe22253e2d8) 0
+ vptr=((& QTabBar::_ZTV7QTabBar) + 16)
+ QWidget (0x0x7fe222567070) 0
+ primary-for QTabBar (0x0x7fe22253e2d8)
+ QObject (0x0x7fe22257a7e0) 0
+ primary-for QWidget (0x0x7fe222567070)
+ QPaintDevice (0x0x7fe22257a840) 16
+ vptr=((& QTabBar::_ZTV7QTabBar) + 496)
+
+Class QTabWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabWidget::QPrivateSignal (0x0x7fe22257aba0) 0 empty
+
+Vtable for QTabWidget
+QTabWidget::_ZTV10QTabWidget: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTabWidget)
+16 (int (*)(...))QTabWidget::metaObject
+24 (int (*)(...))QTabWidget::qt_metacast
+32 (int (*)(...))QTabWidget::qt_metacall
+40 (int (*)(...))QTabWidget::~QTabWidget
+48 (int (*)(...))QTabWidget::~QTabWidget
+56 (int (*)(...))QTabWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QTabWidget::sizeHint
+136 (int (*)(...))QTabWidget::minimumSizeHint
+144 (int (*)(...))QTabWidget::heightForWidth
+152 (int (*)(...))QTabWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QTabWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTabWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTabWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QTabWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTabWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QTabWidget::tabInserted
+440 (int (*)(...))QTabWidget::tabRemoved
+448 (int (*)(...))QTabWidget::initStyleOption
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI10QTabWidget)
+472 (int (*)(...))QTabWidget::_ZThn16_N10QTabWidgetD1Ev
+480 (int (*)(...))QTabWidget::_ZThn16_N10QTabWidgetD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTabWidget
+ size=40 align=8
+ base size=40 base align=8
+QTabWidget (0x0x7fe22253e340) 0
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 16)
+ QWidget (0x0x7fe222567690) 0
+ primary-for QTabWidget (0x0x7fe22253e340)
+ QObject (0x0x7fe22257aae0) 0
+ primary-for QWidget (0x0x7fe222567690)
+ QPaintDevice (0x0x7fe22257ab40) 16
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 472)
+
+Class QRubberBand::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRubberBand::QPrivateSignal (0x0x7fe22257af60) 0 empty
+
+Vtable for QRubberBand
+QRubberBand::_ZTV11QRubberBand: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QRubberBand)
+16 (int (*)(...))QRubberBand::metaObject
+24 (int (*)(...))QRubberBand::qt_metacast
+32 (int (*)(...))QRubberBand::qt_metacall
+40 (int (*)(...))QRubberBand::~QRubberBand
+48 (int (*)(...))QRubberBand::~QRubberBand
+56 (int (*)(...))QRubberBand::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QRubberBand::paintEvent
+264 (int (*)(...))QRubberBand::moveEvent
+272 (int (*)(...))QRubberBand::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QRubberBand::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QRubberBand::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QRubberBand::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QRubberBand)
+456 (int (*)(...))QRubberBand::_ZThn16_N11QRubberBandD1Ev
+464 (int (*)(...))QRubberBand::_ZThn16_N11QRubberBandD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QRubberBand
+ size=40 align=8
+ base size=40 base align=8
+QRubberBand (0x0x7fe22253e3a8) 0
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 16)
+ QWidget (0x0x7fe2225679a0) 0
+ primary-for QRubberBand (0x0x7fe22253e3a8)
+ QObject (0x0x7fe22257aea0) 0
+ primary-for QWidget (0x0x7fe2225679a0)
+ QPaintDevice (0x0x7fe22257af00) 16
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 456)
+
+Class QFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFrame::QPrivateSignal (0x0x7fe2225f83c0) 0 empty
+
+Vtable for QFrame
+QFrame::_ZTV6QFrame: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QFrame)
+16 (int (*)(...))QFrame::metaObject
+24 (int (*)(...))QFrame::qt_metacast
+32 (int (*)(...))QFrame::qt_metacall
+40 (int (*)(...))QFrame::~QFrame
+48 (int (*)(...))QFrame::~QFrame
+56 (int (*)(...))QFrame::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI6QFrame)
+456 (int (*)(...))QFrame::_ZThn16_N6QFrameD1Ev
+464 (int (*)(...))QFrame::_ZThn16_N6QFrameD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFrame
+ size=40 align=8
+ base size=40 base align=8
+QFrame (0x0x7fe22253e410) 0
+ vptr=((& QFrame::_ZTV6QFrame) + 16)
+ QWidget (0x0x7fe222567af0) 0
+ primary-for QFrame (0x0x7fe22253e410)
+ QObject (0x0x7fe2225f8300) 0
+ primary-for QWidget (0x0x7fe222567af0)
+ QPaintDevice (0x0x7fe2225f8360) 16
+ vptr=((& QFrame::_ZTV6QFrame) + 456)
+
+Class QStyleOption
+ size=64 align=8
+ base size=64 base align=8
+QStyleOption (0x0x7fe2225f86c0) 0
+
+Class QStyleOptionFocusRect
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFocusRect (0x0x7fe22253e478) 0
+ QStyleOption (0x0x7fe2225f8720) 0
+
+Class QStyleOptionFrame
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFrame (0x0x7fe22f6361a0) 0
+ QStyleOption (0x0x7fe2225f8960) 0
+
+Class QStyleOptionTabWidgetFrame
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionTabWidgetFrame (0x0x7fe22f6363a8) 0
+ QStyleOption (0x0x7fe2225f8ea0) 0
+
+Class QStyleOptionTabBarBase
+ size=104 align=8
+ base size=101 base align=8
+QStyleOptionTabBarBase (0x0x7fe22253e4e0) 0
+ QStyleOption (0x0x7fe222650120) 0
+
+Class QStyleOptionHeader
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionHeader (0x0x7fe22253e548) 0
+ QStyleOption (0x0x7fe222650360) 0
+
+Class QStyleOptionHeaderV2
+ size=136 align=8
+ base size=136 base align=8
+QStyleOptionHeaderV2 (0x0x7fe22253e5b0) 0
+ QStyleOptionHeader (0x0x7fe22253e618) 0
+ QStyleOption (0x0x7fe2226505a0) 0
+
+Class QStyleOptionButton
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionButton (0x0x7fe22253e6e8) 0
+ QStyleOption (0x0x7fe222650960) 0
+
+Class QStyleOptionTab
+ size=160 align=8
+ base size=156 base align=8
+QStyleOptionTab (0x0x7fe22253e888) 0
+ QStyleOption (0x0x7fe222650ea0) 0
+
+Class QStyleOptionToolBar
+ size=88 align=8
+ base size=88 base align=8
+QStyleOptionToolBar (0x0x7fe22253eb60) 0
+ QStyleOption (0x0x7fe222693600) 0
+
+Class QStyleOptionProgressBar
+ size=112 align=8
+ base size=111 base align=8
+QStyleOptionProgressBar (0x0x7fe22253ed00) 0
+ QStyleOption (0x0x7fe222693b40) 0
+
+Class QStyleOptionMenuItem
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionMenuItem (0x0x7fe22253ed68) 0
+ QStyleOption (0x0x7fe222693d80) 0
+
+Class QStyleOptionDockWidget
+ size=96 align=8
+ base size=92 base align=8
+QStyleOptionDockWidget (0x0x7fe22253edd0) 0
+ QStyleOption (0x0x7fe2226fb000) 0
+
+Class QStyleOptionViewItem
+ size=208 align=8
+ base size=208 base align=8
+QStyleOptionViewItem (0x0x7fe22253ee38) 0
+ QStyleOption (0x0x7fe2226fb240) 0
+
+Class QStyleOptionToolBox
+ size=104 align=8
+ base size=104 base align=8
+QStyleOptionToolBox (0x0x7fe22232a000) 0
+ QStyleOption (0x0x7fe2226fb780) 0
+
+Class QStyleOptionRubberBand
+ size=72 align=8
+ base size=69 base align=8
+QStyleOptionRubberBand (0x0x7fe22232a068) 0
+ QStyleOption (0x0x7fe2226fb9c0) 0
+
+Class QStyleOptionComplex
+ size=72 align=8
+ base size=72 base align=8
+QStyleOptionComplex (0x0x7fe22232a0d0) 0
+ QStyleOption (0x0x7fe2226fbc60) 0
+
+Class QStyleOptionSlider
+ size=128 align=8
+ base size=128 base align=8
+QStyleOptionSlider (0x0x7fe22232a138) 0
+ QStyleOptionComplex (0x0x7fe22232a1a0) 0
+ QStyleOption (0x0x7fe2226fbf00) 0
+
+Class QStyleOptionSpinBox
+ size=88 align=8
+ base size=81 base align=8
+QStyleOptionSpinBox (0x0x7fe22232a270) 0
+ QStyleOptionComplex (0x0x7fe22232a2d8) 0
+ QStyleOption (0x0x7fe2223482a0) 0
+
+Class QStyleOptionToolButton
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionToolButton (0x0x7fe22232a3a8) 0
+ QStyleOptionComplex (0x0x7fe22232a410) 0
+ QStyleOption (0x0x7fe2223484e0) 0
+
+Class QStyleOptionComboBox
+ size=144 align=8
+ base size=140 base align=8
+QStyleOptionComboBox (0x0x7fe22232a5b0) 0
+ QStyleOptionComplex (0x0x7fe22232a618) 0
+ QStyleOption (0x0x7fe222348a20) 0
+
+Class QStyleOptionTitleBar
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionTitleBar (0x0x7fe22232a680) 0
+ QStyleOptionComplex (0x0x7fe22232a6e8) 0
+ QStyleOption (0x0x7fe222348c60) 0
+
+Class QStyleOptionGroupBox
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionGroupBox (0x0x7fe22232a750) 0
+ QStyleOptionComplex (0x0x7fe22232a7b8) 0
+ QStyleOption (0x0x7fe222348ea0) 0
+
+Class QStyleOptionSizeGrip
+ size=80 align=8
+ base size=76 base align=8
+QStyleOptionSizeGrip (0x0x7fe22232a820) 0
+ QStyleOptionComplex (0x0x7fe22232a888) 0
+ QStyleOption (0x0x7fe22238d120) 0
+
+Class QStyleOptionGraphicsItem
+ size=96 align=8
+ base size=96 base align=8
+QStyleOptionGraphicsItem (0x0x7fe22232a8f0) 0
+ QStyleOption (0x0x7fe22238d360) 0
+
+Class QStyleHintReturn
+ size=8 align=4
+ base size=8 base align=4
+QStyleHintReturn (0x0x7fe22238d6c0) 0
+
+Class QStyleHintReturnMask
+ size=16 align=8
+ base size=16 base align=8
+QStyleHintReturnMask (0x0x7fe22232a958) 0
+ QStyleHintReturn (0x0x7fe22238d720) 0
+
+Class QStyleHintReturnVariant
+ size=40 align=8
+ base size=40 base align=8
+QStyleHintReturnVariant (0x0x7fe22232aa28) 0
+ QStyleHintReturn (0x0x7fe22238d780) 0
+
+Class QAbstractItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemDelegate::QPrivateSignal (0x0x7fe22238d900) 0 empty
+
+Vtable for QAbstractItemDelegate
+QAbstractItemDelegate::_ZTV21QAbstractItemDelegate: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QAbstractItemDelegate)
+16 (int (*)(...))QAbstractItemDelegate::metaObject
+24 (int (*)(...))QAbstractItemDelegate::qt_metacast
+32 (int (*)(...))QAbstractItemDelegate::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QAbstractItemDelegate::setEditorData
+152 (int (*)(...))QAbstractItemDelegate::setModelData
+160 (int (*)(...))QAbstractItemDelegate::updateEditorGeometry
+168 (int (*)(...))QAbstractItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+
+Class QAbstractItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemDelegate (0x0x7fe22232aaf8) 0
+ vptr=((& QAbstractItemDelegate::_ZTV21QAbstractItemDelegate) + 16)
+ QObject (0x0x7fe22238d8a0) 0
+ primary-for QAbstractItemDelegate (0x0x7fe22232aaf8)
+
+Class QAbstractScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractScrollArea::QPrivateSignal (0x0x7fe22238db40) 0 empty
+
+Vtable for QAbstractScrollArea
+QAbstractScrollArea::_ZTV19QAbstractScrollArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractScrollArea)
+16 (int (*)(...))QAbstractScrollArea::metaObject
+24 (int (*)(...))QAbstractScrollArea::qt_metacast
+32 (int (*)(...))QAbstractScrollArea::qt_metacall
+40 (int (*)(...))QAbstractScrollArea::~QAbstractScrollArea
+48 (int (*)(...))QAbstractScrollArea::~QAbstractScrollArea
+56 (int (*)(...))QAbstractScrollArea::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractScrollArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QAbstractScrollArea::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI19QAbstractScrollArea)
+488 (int (*)(...))QAbstractScrollArea::_ZThn16_N19QAbstractScrollAreaD1Ev
+496 (int (*)(...))QAbstractScrollArea::_ZThn16_N19QAbstractScrollAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractScrollArea
+ size=40 align=8
+ base size=40 base align=8
+QAbstractScrollArea (0x0x7fe22232ab60) 0
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 16)
+ QFrame (0x0x7fe22232abc8) 0
+ primary-for QAbstractScrollArea (0x0x7fe22232ab60)
+ QWidget (0x0x7fe222353e00) 0
+ primary-for QFrame (0x0x7fe22232abc8)
+ QObject (0x0x7fe22238da80) 0
+ primary-for QWidget (0x0x7fe222353e00)
+ QPaintDevice (0x0x7fe22238dae0) 16
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 488)
+
+Class QAbstractItemView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemView::QPrivateSignal (0x0x7fe22238de40) 0 empty
+
+Vtable for QAbstractItemView
+QAbstractItemView::_ZTV17QAbstractItemView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAbstractItemView)
+16 (int (*)(...))QAbstractItemView::metaObject
+24 (int (*)(...))QAbstractItemView::qt_metacast
+32 (int (*)(...))QAbstractItemView::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QAbstractScrollArea::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))__cxa_pure_virtual
+504 (int (*)(...))__cxa_pure_virtual
+512 (int (*)(...))__cxa_pure_virtual
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QAbstractItemView::setRootIndex
+560 (int (*)(...))QAbstractItemView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QAbstractItemView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QAbstractItemView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))__cxa_pure_virtual
+704 (int (*)(...))__cxa_pure_virtual
+712 (int (*)(...))__cxa_pure_virtual
+720 (int (*)(...))__cxa_pure_virtual
+728 (int (*)(...))__cxa_pure_virtual
+736 (int (*)(...))__cxa_pure_virtual
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI17QAbstractItemView)
+800 0
+808 0
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractItemView
+ size=40 align=8
+ base size=40 base align=8
+QAbstractItemView (0x0x7fe22232ac30) 0
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 16)
+ QAbstractScrollArea (0x0x7fe22232ac98) 0
+ primary-for QAbstractItemView (0x0x7fe22232ac30)
+ QFrame (0x0x7fe22232ad00) 0
+ primary-for QAbstractScrollArea (0x0x7fe22232ac98)
+ QWidget (0x0x7fe2223cc000) 0
+ primary-for QFrame (0x0x7fe22232ad00)
+ QObject (0x0x7fe22238dd80) 0
+ primary-for QWidget (0x0x7fe2223cc000)
+ QPaintDevice (0x0x7fe22238dde0) 16
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 800)
+
+Vtable for QAccessibleWidget
+QAccessibleWidget::_ZTV17QAccessibleWidget: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleWidget)
+16 (int (*)(...))QAccessibleWidget::~QAccessibleWidget
+24 (int (*)(...))QAccessibleWidget::~QAccessibleWidget
+32 (int (*)(...))QAccessibleWidget::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleWidget::window
+56 (int (*)(...))QAccessibleWidget::relations
+64 (int (*)(...))QAccessibleWidget::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))QAccessibleWidget::parent
+88 (int (*)(...))QAccessibleWidget::child
+96 (int (*)(...))QAccessibleWidget::childCount
+104 (int (*)(...))QAccessibleWidget::indexOfChild
+112 (int (*)(...))QAccessibleWidget::text
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleWidget::rect
+136 (int (*)(...))QAccessibleWidget::role
+144 (int (*)(...))QAccessibleWidget::state
+152 (int (*)(...))QAccessibleWidget::foregroundColor
+160 (int (*)(...))QAccessibleWidget::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleWidget::interface_cast
+184 (int (*)(...))QAccessibleWidget::actionNames
+192 (int (*)(...))QAccessibleWidget::doAction
+200 (int (*)(...))QAccessibleWidget::keyBindingsForAction
+208 (int (*)(...))-16
+216 (int (*)(...))(& _ZTI17QAccessibleWidget)
+224 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidgetD1Ev
+232 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidgetD0Ev
+240 (int (*)(...))QAccessibleWidget::_ZThn16_NK17QAccessibleWidget11actionNamesEv
+248 (int (*)(...))QAccessibleActionInterface::localizedActionName
+256 (int (*)(...))QAccessibleActionInterface::localizedActionDescription
+264 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidget8doActionERK7QString
+272 (int (*)(...))QAccessibleWidget::_ZThn16_NK17QAccessibleWidget20keyBindingsForActionERK7QString
+
+Class QAccessibleWidget
+ size=32 align=8
+ base size=32 base align=8
+QAccessibleWidget (0x0x7fe2223ee540) 0
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 16)
+ QAccessibleObject (0x0x7fe22232aea0) 0
+ primary-for QAccessibleWidget (0x0x7fe2223ee540)
+ QAccessibleInterface (0x0x7fe2223fe7e0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7fe22232aea0)
+ QAccessibleActionInterface (0x0x7fe2223fe840) 16 nearly-empty
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 224)
+
+Class QApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QApplication::QPrivateSignal (0x0x7fe2223fe960) 0 empty
+
+Vtable for QApplication
+QApplication::_ZTV12QApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QApplication)
+16 (int (*)(...))QApplication::metaObject
+24 (int (*)(...))QApplication::qt_metacast
+32 (int (*)(...))QApplication::qt_metacall
+40 (int (*)(...))QApplication::~QApplication
+48 (int (*)(...))QApplication::~QApplication
+56 (int (*)(...))QApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QApplication::notify
+120 (int (*)(...))QApplication::compressEvent
+
+Class QApplication
+ size=16 align=8
+ base size=16 base align=8
+QApplication (0x0x7fe22232af08) 0
+ vptr=((& QApplication::_ZTV12QApplication) + 16)
+ QGuiApplication (0x0x7fe22232af70) 0
+ primary-for QApplication (0x0x7fe22232af08)
+ QCoreApplication (0x0x7fe22232a208) 0
+ primary-for QGuiApplication (0x0x7fe22232af70)
+ QObject (0x0x7fe2223fe900) 0
+ primary-for QCoreApplication (0x0x7fe22232a208)
+
+Vtable for QLayoutItem
+QLayoutItem::_ZTV11QLayoutItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QLayoutItem)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QLayoutItem::hasHeightForWidth
+96 (int (*)(...))QLayoutItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QLayoutItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QLayoutItem::controlTypes
+
+Class QLayoutItem
+ size=16 align=8
+ base size=12 base align=8
+QLayoutItem (0x0x7fe2223feba0) 0
+ vptr=((& QLayoutItem::_ZTV11QLayoutItem) + 16)
+
+Vtable for QSpacerItem
+QSpacerItem::_ZTV11QSpacerItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSpacerItem)
+16 (int (*)(...))QSpacerItem::~QSpacerItem
+24 (int (*)(...))QSpacerItem::~QSpacerItem
+32 (int (*)(...))QSpacerItem::sizeHint
+40 (int (*)(...))QSpacerItem::minimumSize
+48 (int (*)(...))QSpacerItem::maximumSize
+56 (int (*)(...))QSpacerItem::expandingDirections
+64 (int (*)(...))QSpacerItem::setGeometry
+72 (int (*)(...))QSpacerItem::geometry
+80 (int (*)(...))QSpacerItem::isEmpty
+88 (int (*)(...))QLayoutItem::hasHeightForWidth
+96 (int (*)(...))QLayoutItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QLayoutItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QSpacerItem::spacerItem
+144 (int (*)(...))QLayoutItem::controlTypes
+
+Class QSpacerItem
+ size=40 align=8
+ base size=40 base align=8
+QSpacerItem (0x0x7fe222448000) 0
+ vptr=((& QSpacerItem::_ZTV11QSpacerItem) + 16)
+ QLayoutItem (0x0x7fe2223fede0) 0
+ primary-for QSpacerItem (0x0x7fe222448000)
+
+Vtable for QWidgetItem
+QWidgetItem::_ZTV11QWidgetItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWidgetItem)
+16 (int (*)(...))QWidgetItem::~QWidgetItem
+24 (int (*)(...))QWidgetItem::~QWidgetItem
+32 (int (*)(...))QWidgetItem::sizeHint
+40 (int (*)(...))QWidgetItem::minimumSize
+48 (int (*)(...))QWidgetItem::maximumSize
+56 (int (*)(...))QWidgetItem::expandingDirections
+64 (int (*)(...))QWidgetItem::setGeometry
+72 (int (*)(...))QWidgetItem::geometry
+80 (int (*)(...))QWidgetItem::isEmpty
+88 (int (*)(...))QWidgetItem::hasHeightForWidth
+96 (int (*)(...))QWidgetItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QWidgetItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QWidgetItem::controlTypes
+
+Class QWidgetItem
+ size=24 align=8
+ base size=24 base align=8
+QWidgetItem (0x0x7fe222448068) 0
+ vptr=((& QWidgetItem::_ZTV11QWidgetItem) + 16)
+ QLayoutItem (0x0x7fe22244e060) 0
+ primary-for QWidgetItem (0x0x7fe222448068)
+
+Vtable for QWidgetItemV2
+QWidgetItemV2::_ZTV13QWidgetItemV2: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QWidgetItemV2)
+16 (int (*)(...))QWidgetItemV2::~QWidgetItemV2
+24 (int (*)(...))QWidgetItemV2::~QWidgetItemV2
+32 (int (*)(...))QWidgetItemV2::sizeHint
+40 (int (*)(...))QWidgetItemV2::minimumSize
+48 (int (*)(...))QWidgetItemV2::maximumSize
+56 (int (*)(...))QWidgetItem::expandingDirections
+64 (int (*)(...))QWidgetItem::setGeometry
+72 (int (*)(...))QWidgetItem::geometry
+80 (int (*)(...))QWidgetItem::isEmpty
+88 (int (*)(...))QWidgetItem::hasHeightForWidth
+96 (int (*)(...))QWidgetItemV2::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QWidgetItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QWidgetItem::controlTypes
+
+Class QWidgetItemV2
+ size=88 align=8
+ base size=88 base align=8
+QWidgetItemV2 (0x0x7fe2224480d0) 0
+ vptr=((& QWidgetItemV2::_ZTV13QWidgetItemV2) + 16)
+ QWidgetItem (0x0x7fe222448138) 0
+ primary-for QWidgetItemV2 (0x0x7fe2224480d0)
+ QLayoutItem (0x0x7fe22244e240) 0
+ primary-for QWidgetItem (0x0x7fe222448138)
+
+Class QLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLayout::QPrivateSignal (0x0x7fe22244e3c0) 0 empty
+
+Vtable for QLayout
+QLayout::_ZTV7QLayout: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QLayout)
+16 (int (*)(...))QLayout::metaObject
+24 (int (*)(...))QLayout::qt_metacast
+32 (int (*)(...))QLayout::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLayout::spacing
+120 (int (*)(...))QLayout::setSpacing
+128 (int (*)(...))QLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QLayout::expandingDirections
+160 (int (*)(...))QLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QLayout::setGeometry
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))-16
+264 (int (*)(...))(& _ZTI7QLayout)
+272 0
+280 0
+288 (int (*)(...))__cxa_pure_virtual
+296 (int (*)(...))QLayout::_ZThn16_NK7QLayout11minimumSizeEv
+304 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+312 (int (*)(...))QLayout::_ZThn16_NK7QLayout19expandingDirectionsEv
+320 (int (*)(...))QLayout::_ZThn16_N7QLayout11setGeometryERK5QRect
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+336 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+344 (int (*)(...))QLayoutItem::hasHeightForWidth
+352 (int (*)(...))QLayoutItem::heightForWidth
+360 (int (*)(...))QLayoutItem::minimumHeightForWidth
+368 (int (*)(...))QLayout::_ZThn16_N7QLayout10invalidateEv
+376 (int (*)(...))QLayoutItem::widget
+384 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+392 (int (*)(...))QLayoutItem::spacerItem
+400 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QLayout
+ size=32 align=8
+ base size=28 base align=8
+QLayout (0x0x7fe2223ee690) 0
+ vptr=((& QLayout::_ZTV7QLayout) + 16)
+ QObject (0x0x7fe22244e300) 0
+ primary-for QLayout (0x0x7fe2223ee690)
+ QLayoutItem (0x0x7fe22244e360) 16
+ vptr=((& QLayout::_ZTV7QLayout) + 272)
+
+Class QGridLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGridLayout::QPrivateSignal (0x0x7fe22244e6c0) 0 empty
+
+Vtable for QGridLayout
+QGridLayout::_ZTV11QGridLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QGridLayout)
+16 (int (*)(...))QGridLayout::metaObject
+24 (int (*)(...))QGridLayout::qt_metacast
+32 (int (*)(...))QGridLayout::qt_metacall
+40 (int (*)(...))QGridLayout::~QGridLayout
+48 (int (*)(...))QGridLayout::~QGridLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGridLayout::spacing
+120 (int (*)(...))QGridLayout::setSpacing
+128 (int (*)(...))QGridLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QGridLayout::addItem
+152 (int (*)(...))QGridLayout::expandingDirections
+160 (int (*)(...))QGridLayout::minimumSize
+168 (int (*)(...))QGridLayout::maximumSize
+176 (int (*)(...))QGridLayout::setGeometry
+184 (int (*)(...))QGridLayout::itemAt
+192 (int (*)(...))QGridLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QGridLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QGridLayout::sizeHint
+264 (int (*)(...))QGridLayout::hasHeightForWidth
+272 (int (*)(...))QGridLayout::heightForWidth
+280 (int (*)(...))QGridLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QGridLayout)
+304 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayoutD1Ev
+312 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayoutD0Ev
+320 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout8sizeHintEv
+328 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout11minimumSizeEv
+336 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout11maximumSizeEv
+344 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout19expandingDirectionsEv
+352 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout17hasHeightForWidthEv
+384 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout14heightForWidthEi
+392 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout21minimumHeightForWidthEi
+400 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QGridLayout
+ size=32 align=8
+ base size=28 base align=8
+QGridLayout (0x0x7fe2224481a0) 0
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 16)
+ QLayout (0x0x7fe2223ee9a0) 0
+ primary-for QGridLayout (0x0x7fe2224481a0)
+ QObject (0x0x7fe22244e600) 0
+ primary-for QLayout (0x0x7fe2223ee9a0)
+ QLayoutItem (0x0x7fe22244e660) 16
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 304)
+
+Class QBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBoxLayout::QPrivateSignal (0x0x7fe22244e960) 0 empty
+
+Vtable for QBoxLayout
+QBoxLayout::_ZTV10QBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QBoxLayout)
+16 (int (*)(...))QBoxLayout::metaObject
+24 (int (*)(...))QBoxLayout::qt_metacast
+32 (int (*)(...))QBoxLayout::qt_metacall
+40 (int (*)(...))QBoxLayout::~QBoxLayout
+48 (int (*)(...))QBoxLayout::~QBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI10QBoxLayout)
+304 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayoutD1Ev
+312 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QBoxLayout (0x0x7fe222448208) 0
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 16)
+ QLayout (0x0x7fe2223eea10) 0
+ primary-for QBoxLayout (0x0x7fe222448208)
+ QObject (0x0x7fe22244e8a0) 0
+ primary-for QLayout (0x0x7fe2223eea10)
+ QLayoutItem (0x0x7fe22244e900) 16
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 304)
+
+Class QHBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHBoxLayout::QPrivateSignal (0x0x7fe22244eba0) 0 empty
+
+Vtable for QHBoxLayout
+QHBoxLayout::_ZTV11QHBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHBoxLayout)
+16 (int (*)(...))QHBoxLayout::metaObject
+24 (int (*)(...))QHBoxLayout::qt_metacast
+32 (int (*)(...))QHBoxLayout::qt_metacall
+40 (int (*)(...))QHBoxLayout::~QHBoxLayout
+48 (int (*)(...))QHBoxLayout::~QHBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QHBoxLayout)
+304 (int (*)(...))QHBoxLayout::_ZThn16_N11QHBoxLayoutD1Ev
+312 (int (*)(...))QHBoxLayout::_ZThn16_N11QHBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QHBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QHBoxLayout (0x0x7fe222448270) 0
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 16)
+ QBoxLayout (0x0x7fe2224482d8) 0
+ primary-for QHBoxLayout (0x0x7fe222448270)
+ QLayout (0x0x7fe2223eed20) 0
+ primary-for QBoxLayout (0x0x7fe2224482d8)
+ QObject (0x0x7fe22244eae0) 0
+ primary-for QLayout (0x0x7fe2223eed20)
+ QLayoutItem (0x0x7fe22244eb40) 16
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 304)
+
+Class QVBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVBoxLayout::QPrivateSignal (0x0x7fe22244ed20) 0 empty
+
+Vtable for QVBoxLayout
+QVBoxLayout::_ZTV11QVBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QVBoxLayout)
+16 (int (*)(...))QVBoxLayout::metaObject
+24 (int (*)(...))QVBoxLayout::qt_metacast
+32 (int (*)(...))QVBoxLayout::qt_metacall
+40 (int (*)(...))QVBoxLayout::~QVBoxLayout
+48 (int (*)(...))QVBoxLayout::~QVBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QVBoxLayout)
+304 (int (*)(...))QVBoxLayout::_ZThn16_N11QVBoxLayoutD1Ev
+312 (int (*)(...))QVBoxLayout::_ZThn16_N11QVBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QVBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QVBoxLayout (0x0x7fe222448340) 0
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 16)
+ QBoxLayout (0x0x7fe2224483a8) 0
+ primary-for QVBoxLayout (0x0x7fe222448340)
+ QLayout (0x0x7fe2223eed90) 0
+ primary-for QBoxLayout (0x0x7fe2224483a8)
+ QObject (0x0x7fe22244ec60) 0
+ primary-for QLayout (0x0x7fe2223eed90)
+ QLayoutItem (0x0x7fe22244ecc0) 16
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 304)
+
+Class QButtonGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QButtonGroup::QPrivateSignal (0x0x7fe22244ee40) 0 empty
+
+Vtable for QButtonGroup
+QButtonGroup::_ZTV12QButtonGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QButtonGroup)
+16 (int (*)(...))QButtonGroup::metaObject
+24 (int (*)(...))QButtonGroup::qt_metacast
+32 (int (*)(...))QButtonGroup::qt_metacall
+40 (int (*)(...))QButtonGroup::~QButtonGroup
+48 (int (*)(...))QButtonGroup::~QButtonGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QButtonGroup
+ size=16 align=8
+ base size=16 base align=8
+QButtonGroup (0x0x7fe222448410) 0
+ vptr=((& QButtonGroup::_ZTV12QButtonGroup) + 16)
+ QObject (0x0x7fe22244ede0) 0
+ primary-for QButtonGroup (0x0x7fe222448410)
+
+Class QCalendarWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCalendarWidget::QPrivateSignal (0x0x7fe2224b90c0) 0 empty
+
+Vtable for QCalendarWidget
+QCalendarWidget::_ZTV15QCalendarWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QCalendarWidget)
+16 (int (*)(...))QCalendarWidget::metaObject
+24 (int (*)(...))QCalendarWidget::qt_metacast
+32 (int (*)(...))QCalendarWidget::qt_metacall
+40 (int (*)(...))QCalendarWidget::~QCalendarWidget
+48 (int (*)(...))QCalendarWidget::~QCalendarWidget
+56 (int (*)(...))QCalendarWidget::event
+64 (int (*)(...))QCalendarWidget::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCalendarWidget::sizeHint
+136 (int (*)(...))QCalendarWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QCalendarWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QCalendarWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QCalendarWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QCalendarWidget::paintCell
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI15QCalendarWidget)
+456 (int (*)(...))QCalendarWidget::_ZThn16_N15QCalendarWidgetD1Ev
+464 (int (*)(...))QCalendarWidget::_ZThn16_N15QCalendarWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCalendarWidget
+ size=40 align=8
+ base size=40 base align=8
+QCalendarWidget (0x0x7fe222448478) 0
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 16)
+ QWidget (0x0x7fe2223eee00) 0
+ primary-for QCalendarWidget (0x0x7fe222448478)
+ QObject (0x0x7fe2224b9000) 0
+ primary-for QWidget (0x0x7fe2223eee00)
+ QPaintDevice (0x0x7fe2224b9060) 16
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 456)
+
+Class QCheckBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCheckBox::QPrivateSignal (0x0x7fe2224b9540) 0 empty
+
+Vtable for QCheckBox
+QCheckBox::_ZTV9QCheckBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QCheckBox)
+16 (int (*)(...))QCheckBox::metaObject
+24 (int (*)(...))QCheckBox::qt_metacast
+32 (int (*)(...))QCheckBox::qt_metacall
+40 (int (*)(...))QCheckBox::~QCheckBox
+48 (int (*)(...))QCheckBox::~QCheckBox
+56 (int (*)(...))QCheckBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCheckBox::sizeHint
+136 (int (*)(...))QCheckBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QCheckBox::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QCheckBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QCheckBox::hitButton
+440 (int (*)(...))QCheckBox::checkStateSet
+448 (int (*)(...))QCheckBox::nextCheckState
+456 (int (*)(...))QCheckBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI9QCheckBox)
+480 (int (*)(...))QCheckBox::_ZThn16_N9QCheckBoxD1Ev
+488 (int (*)(...))QCheckBox::_ZThn16_N9QCheckBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCheckBox
+ size=40 align=8
+ base size=40 base align=8
+QCheckBox (0x0x7fe2224484e0) 0
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 16)
+ QAbstractButton (0x0x7fe222448548) 0
+ primary-for QCheckBox (0x0x7fe2224484e0)
+ QWidget (0x0x7fe2224bf230) 0
+ primary-for QAbstractButton (0x0x7fe222448548)
+ QObject (0x0x7fe2224b9480) 0
+ primary-for QWidget (0x0x7fe2224bf230)
+ QPaintDevice (0x0x7fe2224b94e0) 16
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 480)
+
+Class QDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialog::QPrivateSignal (0x0x7fe2224b9780) 0 empty
+
+Vtable for QDialog
+QDialog::_ZTV7QDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QDialog)
+16 (int (*)(...))QDialog::metaObject
+24 (int (*)(...))QDialog::qt_metacast
+32 (int (*)(...))QDialog::qt_metacall
+40 (int (*)(...))QDialog::~QDialog
+48 (int (*)(...))QDialog::~QDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI7QDialog)
+488 (int (*)(...))QDialog::_ZThn16_N7QDialogD1Ev
+496 (int (*)(...))QDialog::_ZThn16_N7QDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDialog
+ size=40 align=8
+ base size=40 base align=8
+QDialog (0x0x7fe2224485b0) 0
+ vptr=((& QDialog::_ZTV7QDialog) + 16)
+ QWidget (0x0x7fe2224bf2a0) 0
+ primary-for QDialog (0x0x7fe2224485b0)
+ QObject (0x0x7fe2224b96c0) 0
+ primary-for QWidget (0x0x7fe2224bf2a0)
+ QPaintDevice (0x0x7fe2224b9720) 16
+ vptr=((& QDialog::_ZTV7QDialog) + 488)
+
+Class QColorDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColorDialog::QPrivateSignal (0x0x7fe2224b99c0) 0 empty
+
+Vtable for QColorDialog
+QColorDialog::_ZTV12QColorDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QColorDialog)
+16 (int (*)(...))QColorDialog::metaObject
+24 (int (*)(...))QColorDialog::qt_metacast
+32 (int (*)(...))QColorDialog::qt_metacall
+40 (int (*)(...))QColorDialog::~QColorDialog
+48 (int (*)(...))QColorDialog::~QColorDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QColorDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QColorDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QColorDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QColorDialog)
+488 (int (*)(...))QColorDialog::_ZThn16_N12QColorDialogD1Ev
+496 (int (*)(...))QColorDialog::_ZThn16_N12QColorDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QColorDialog
+ size=40 align=8
+ base size=40 base align=8
+QColorDialog (0x0x7fe222448618) 0
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 16)
+ QDialog (0x0x7fe222448680) 0
+ primary-for QColorDialog (0x0x7fe222448618)
+ QWidget (0x0x7fe2224bf3f0) 0
+ primary-for QDialog (0x0x7fe222448680)
+ QObject (0x0x7fe2224b9900) 0
+ primary-for QWidget (0x0x7fe2224bf3f0)
+ QPaintDevice (0x0x7fe2224b9960) 16
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 488)
+
+Class QColormap
+ size=8 align=8
+ base size=8 base align=8
+QColormap (0x0x7fe2224b9f00) 0
+
+Class QColumnView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColumnView::QPrivateSignal (0x0x7fe222523060) 0 empty
+
+Vtable for QColumnView
+QColumnView::_ZTV11QColumnView: 109 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QColumnView)
+16 (int (*)(...))QColumnView::metaObject
+24 (int (*)(...))QColumnView::qt_metacast
+32 (int (*)(...))QColumnView::qt_metacall
+40 (int (*)(...))QColumnView::~QColumnView
+48 (int (*)(...))QColumnView::~QColumnView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QColumnView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QColumnView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QColumnView::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QColumnView::setModel
+480 (int (*)(...))QColumnView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QColumnView::visualRect
+504 (int (*)(...))QColumnView::scrollTo
+512 (int (*)(...))QColumnView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QColumnView::setRootIndex
+560 (int (*)(...))QAbstractItemView::doItemsLayout
+568 (int (*)(...))QColumnView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QColumnView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QColumnView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QAbstractItemView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QColumnView::moveCursor
+704 (int (*)(...))QColumnView::horizontalOffset
+712 (int (*)(...))QColumnView::verticalOffset
+720 (int (*)(...))QColumnView::isIndexHidden
+728 (int (*)(...))QColumnView::setSelection
+736 (int (*)(...))QColumnView::visualRegionForSelection
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QColumnView::createColumn
+792 (int (*)(...))-16
+800 (int (*)(...))(& _ZTI11QColumnView)
+808 (int (*)(...))QColumnView::_ZThn16_N11QColumnViewD1Ev
+816 (int (*)(...))QColumnView::_ZThn16_N11QColumnViewD0Ev
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QColumnView
+ size=40 align=8
+ base size=40 base align=8
+QColumnView (0x0x7fe222448820) 0
+ vptr=((& QColumnView::_ZTV11QColumnView) + 16)
+ QAbstractItemView (0x0x7fe222448888) 0
+ primary-for QColumnView (0x0x7fe222448820)
+ QAbstractScrollArea (0x0x7fe2224488f0) 0
+ primary-for QAbstractItemView (0x0x7fe222448888)
+ QFrame (0x0x7fe222448958) 0
+ primary-for QAbstractScrollArea (0x0x7fe2224488f0)
+ QWidget (0x0x7fe2224bf700) 0
+ primary-for QFrame (0x0x7fe222448958)
+ QObject (0x0x7fe2224b9f60) 0
+ primary-for QWidget (0x0x7fe2224bf700)
+ QPaintDevice (0x0x7fe222523000) 16
+ vptr=((& QColumnView::_ZTV11QColumnView) + 808)
+
+Class QComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QComboBox::QPrivateSignal (0x0x7fe2225232a0) 0 empty
+
+Vtable for QComboBox
+QComboBox::_ZTV9QComboBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QComboBox)
+16 (int (*)(...))QComboBox::metaObject
+24 (int (*)(...))QComboBox::qt_metacast
+32 (int (*)(...))QComboBox::qt_metacall
+40 (int (*)(...))QComboBox::~QComboBox
+48 (int (*)(...))QComboBox::~QComboBox
+56 (int (*)(...))QComboBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QComboBox::sizeHint
+136 (int (*)(...))QComboBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QComboBox::mousePressEvent
+176 (int (*)(...))QComboBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QComboBox::wheelEvent
+208 (int (*)(...))QComboBox::keyPressEvent
+216 (int (*)(...))QComboBox::keyReleaseEvent
+224 (int (*)(...))QComboBox::focusInEvent
+232 (int (*)(...))QComboBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QComboBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QComboBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QComboBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QComboBox::showEvent
+352 (int (*)(...))QComboBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QComboBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QComboBox::inputMethodEvent
+416 (int (*)(...))QComboBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QComboBox::setModel
+440 (int (*)(...))QComboBox::showPopup
+448 (int (*)(...))QComboBox::hidePopup
+456 (int (*)(...))QComboBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI9QComboBox)
+480 (int (*)(...))QComboBox::_ZThn16_N9QComboBoxD1Ev
+488 (int (*)(...))QComboBox::_ZThn16_N9QComboBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QComboBox
+ size=40 align=8
+ base size=40 base align=8
+QComboBox (0x0x7fe2224489c0) 0
+ vptr=((& QComboBox::_ZTV9QComboBox) + 16)
+ QWidget (0x0x7fe2224bf770) 0
+ primary-for QComboBox (0x0x7fe2224489c0)
+ QObject (0x0x7fe2225231e0) 0
+ primary-for QWidget (0x0x7fe2224bf770)
+ QPaintDevice (0x0x7fe222523240) 16
+ vptr=((& QComboBox::_ZTV9QComboBox) + 480)
+
+Class QPushButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPushButton::QPrivateSignal (0x0x7fe222523840) 0 empty
+
+Vtable for QPushButton
+QPushButton::_ZTV11QPushButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPushButton)
+16 (int (*)(...))QPushButton::metaObject
+24 (int (*)(...))QPushButton::qt_metacast
+32 (int (*)(...))QPushButton::qt_metacall
+40 (int (*)(...))QPushButton::~QPushButton
+48 (int (*)(...))QPushButton::~QPushButton
+56 (int (*)(...))QPushButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QPushButton::sizeHint
+136 (int (*)(...))QPushButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QPushButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QPushButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QPushButton::focusInEvent
+232 (int (*)(...))QPushButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QPushButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QPushButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QPushButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI11QPushButton)
+480 (int (*)(...))QPushButton::_ZThn16_N11QPushButtonD1Ev
+488 (int (*)(...))QPushButton::_ZThn16_N11QPushButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QPushButton
+ size=40 align=8
+ base size=40 base align=8
+QPushButton (0x0x7fe222448a28) 0
+ vptr=((& QPushButton::_ZTV11QPushButton) + 16)
+ QAbstractButton (0x0x7fe222448a90) 0
+ primary-for QPushButton (0x0x7fe222448a28)
+ QWidget (0x0x7fe2224bfc40) 0
+ primary-for QAbstractButton (0x0x7fe222448a90)
+ QObject (0x0x7fe222523780) 0
+ primary-for QWidget (0x0x7fe2224bfc40)
+ QPaintDevice (0x0x7fe2225237e0) 16
+ vptr=((& QPushButton::_ZTV11QPushButton) + 480)
+
+Class QCommandLinkButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommandLinkButton::QPrivateSignal (0x0x7fe222523a80) 0 empty
+
+Vtable for QCommandLinkButton
+QCommandLinkButton::_ZTV18QCommandLinkButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QCommandLinkButton)
+16 (int (*)(...))QCommandLinkButton::metaObject
+24 (int (*)(...))QCommandLinkButton::qt_metacast
+32 (int (*)(...))QCommandLinkButton::qt_metacall
+40 (int (*)(...))QCommandLinkButton::~QCommandLinkButton
+48 (int (*)(...))QCommandLinkButton::~QCommandLinkButton
+56 (int (*)(...))QCommandLinkButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCommandLinkButton::sizeHint
+136 (int (*)(...))QCommandLinkButton::minimumSizeHint
+144 (int (*)(...))QCommandLinkButton::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QPushButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QPushButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QPushButton::focusInEvent
+232 (int (*)(...))QPushButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QCommandLinkButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QPushButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QCommandLinkButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI18QCommandLinkButton)
+480 (int (*)(...))QCommandLinkButton::_ZThn16_N18QCommandLinkButtonD1Ev
+488 (int (*)(...))QCommandLinkButton::_ZThn16_N18QCommandLinkButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCommandLinkButton
+ size=40 align=8
+ base size=40 base align=8
+QCommandLinkButton (0x0x7fe222448af8) 0
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 16)
+ QPushButton (0x0x7fe222448b60) 0
+ primary-for QCommandLinkButton (0x0x7fe222448af8)
+ QAbstractButton (0x0x7fe222448bc8) 0
+ primary-for QPushButton (0x0x7fe222448b60)
+ QWidget (0x0x7fe2224bfcb0) 0
+ primary-for QAbstractButton (0x0x7fe222448bc8)
+ QObject (0x0x7fe2225239c0) 0
+ primary-for QWidget (0x0x7fe2224bfcb0)
+ QPaintDevice (0x0x7fe222523a20) 16
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 480)
+
+Class QCommonStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommonStyle::QPrivateSignal (0x0x7fe222523c60) 0 empty
+
+Vtable for QCommonStyle
+QCommonStyle::_ZTV12QCommonStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QCommonStyle)
+16 (int (*)(...))QCommonStyle::metaObject
+24 (int (*)(...))QCommonStyle::qt_metacast
+32 (int (*)(...))QCommonStyle::qt_metacall
+40 (int (*)(...))QCommonStyle::~QCommonStyle
+48 (int (*)(...))QCommonStyle::~QCommonStyle
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCommonStyle::polish
+120 (int (*)(...))QCommonStyle::unpolish
+128 (int (*)(...))QCommonStyle::polish
+136 (int (*)(...))QCommonStyle::unpolish
+144 (int (*)(...))QCommonStyle::polish
+152 (int (*)(...))QStyle::itemTextRect
+160 (int (*)(...))QStyle::itemPixmapRect
+168 (int (*)(...))QStyle::drawItemText
+176 (int (*)(...))QStyle::drawItemPixmap
+184 (int (*)(...))QStyle::standardPalette
+192 (int (*)(...))QCommonStyle::drawPrimitive
+200 (int (*)(...))QCommonStyle::drawControl
+208 (int (*)(...))QCommonStyle::subElementRect
+216 (int (*)(...))QCommonStyle::drawComplexControl
+224 (int (*)(...))QCommonStyle::hitTestComplexControl
+232 (int (*)(...))QCommonStyle::subControlRect
+240 (int (*)(...))QCommonStyle::pixelMetric
+248 (int (*)(...))QCommonStyle::sizeFromContents
+256 (int (*)(...))QCommonStyle::styleHint
+264 (int (*)(...))QCommonStyle::standardPixmap
+272 (int (*)(...))QCommonStyle::standardIcon
+280 (int (*)(...))QCommonStyle::generatedIconPixmap
+288 (int (*)(...))QCommonStyle::layoutSpacing
+
+Class QCommonStyle
+ size=16 align=8
+ base size=16 base align=8
+QCommonStyle (0x0x7fe222448c30) 0
+ vptr=((& QCommonStyle::_ZTV12QCommonStyle) + 16)
+ QStyle (0x0x7fe222448c98) 0
+ primary-for QCommonStyle (0x0x7fe222448c30)
+ QObject (0x0x7fe222523c00) 0
+ primary-for QStyle (0x0x7fe222448c98)
+
+Class QCompleter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCompleter::QPrivateSignal (0x0x7fe222523e40) 0 empty
+
+Vtable for QCompleter
+QCompleter::_ZTV10QCompleter: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QCompleter)
+16 (int (*)(...))QCompleter::metaObject
+24 (int (*)(...))QCompleter::qt_metacast
+32 (int (*)(...))QCompleter::qt_metacall
+40 (int (*)(...))QCompleter::~QCompleter
+48 (int (*)(...))QCompleter::~QCompleter
+56 (int (*)(...))QCompleter::event
+64 (int (*)(...))QCompleter::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCompleter::pathFromIndex
+120 (int (*)(...))QCompleter::splitPath
+
+Class QCompleter
+ size=16 align=8
+ base size=16 base align=8
+QCompleter (0x0x7fe222448d00) 0
+ vptr=((& QCompleter::_ZTV10QCompleter) + 16)
+ QObject (0x0x7fe222523de0) 0
+ primary-for QCompleter (0x0x7fe222448d00)
+
+Class QDataWidgetMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDataWidgetMapper::QPrivateSignal (0x0x7fe2221991e0) 0 empty
+
+Vtable for QDataWidgetMapper
+QDataWidgetMapper::_ZTV17QDataWidgetMapper: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QDataWidgetMapper)
+16 (int (*)(...))QDataWidgetMapper::metaObject
+24 (int (*)(...))QDataWidgetMapper::qt_metacast
+32 (int (*)(...))QDataWidgetMapper::qt_metacall
+40 (int (*)(...))QDataWidgetMapper::~QDataWidgetMapper
+48 (int (*)(...))QDataWidgetMapper::~QDataWidgetMapper
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDataWidgetMapper::setCurrentIndex
+
+Class QDataWidgetMapper
+ size=16 align=8
+ base size=16 base align=8
+QDataWidgetMapper (0x0x7fe222448d68) 0
+ vptr=((& QDataWidgetMapper::_ZTV17QDataWidgetMapper) + 16)
+ QObject (0x0x7fe222199180) 0
+ primary-for QDataWidgetMapper (0x0x7fe222448d68)
+
+Class QDateTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateTimeEdit::QPrivateSignal (0x0x7fe2221994e0) 0 empty
+
+Vtable for QDateTimeEdit
+QDateTimeEdit::_ZTV13QDateTimeEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QDateTimeEdit)
+16 (int (*)(...))QDateTimeEdit::metaObject
+24 (int (*)(...))QDateTimeEdit::qt_metacast
+32 (int (*)(...))QDateTimeEdit::qt_metacall
+40 (int (*)(...))QDateTimeEdit::~QDateTimeEdit
+48 (int (*)(...))QDateTimeEdit::~QDateTimeEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI13QDateTimeEdit)
+512 (int (*)(...))QDateTimeEdit::_ZThn16_N13QDateTimeEditD1Ev
+520 (int (*)(...))QDateTimeEdit::_ZThn16_N13QDateTimeEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDateTimeEdit
+ size=40 align=8
+ base size=40 base align=8
+QDateTimeEdit (0x0x7fe222448dd0) 0
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 16)
+ QAbstractSpinBox (0x0x7fe222448e38) 0
+ primary-for QDateTimeEdit (0x0x7fe222448dd0)
+ QWidget (0x0x7fe2221a00e0) 0
+ primary-for QAbstractSpinBox (0x0x7fe222448e38)
+ QObject (0x0x7fe222199420) 0
+ primary-for QWidget (0x0x7fe2221a00e0)
+ QPaintDevice (0x0x7fe222199480) 16
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 512)
+
+Class QTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeEdit::QPrivateSignal (0x0x7fe222199a80) 0 empty
+
+Vtable for QTimeEdit
+QTimeEdit::_ZTV9QTimeEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTimeEdit)
+16 (int (*)(...))QTimeEdit::metaObject
+24 (int (*)(...))QTimeEdit::qt_metacast
+32 (int (*)(...))QTimeEdit::qt_metacall
+40 (int (*)(...))QTimeEdit::~QTimeEdit
+48 (int (*)(...))QTimeEdit::~QTimeEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI9QTimeEdit)
+512 (int (*)(...))QTimeEdit::_ZThn16_N9QTimeEditD1Ev
+520 (int (*)(...))QTimeEdit::_ZThn16_N9QTimeEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTimeEdit
+ size=40 align=8
+ base size=40 base align=8
+QTimeEdit (0x0x7fe2221da000) 0
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 16)
+ QDateTimeEdit (0x0x7fe2221da068) 0
+ primary-for QTimeEdit (0x0x7fe2221da000)
+ QAbstractSpinBox (0x0x7fe2221da0d0) 0
+ primary-for QDateTimeEdit (0x0x7fe2221da068)
+ QWidget (0x0x7fe2221a05b0) 0
+ primary-for QAbstractSpinBox (0x0x7fe2221da0d0)
+ QObject (0x0x7fe2221999c0) 0
+ primary-for QWidget (0x0x7fe2221a05b0)
+ QPaintDevice (0x0x7fe222199a20) 16
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 512)
+
+Class QDateEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateEdit::QPrivateSignal (0x0x7fe222199c00) 0 empty
+
+Vtable for QDateEdit
+QDateEdit::_ZTV9QDateEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QDateEdit)
+16 (int (*)(...))QDateEdit::metaObject
+24 (int (*)(...))QDateEdit::qt_metacast
+32 (int (*)(...))QDateEdit::qt_metacall
+40 (int (*)(...))QDateEdit::~QDateEdit
+48 (int (*)(...))QDateEdit::~QDateEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI9QDateEdit)
+512 (int (*)(...))QDateEdit::_ZThn16_N9QDateEditD1Ev
+520 (int (*)(...))QDateEdit::_ZThn16_N9QDateEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDateEdit
+ size=40 align=8
+ base size=40 base align=8
+QDateEdit (0x0x7fe2221da138) 0
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 16)
+ QDateTimeEdit (0x0x7fe2221da1a0) 0
+ primary-for QDateEdit (0x0x7fe2221da138)
+ QAbstractSpinBox (0x0x7fe2221da208) 0
+ primary-for QDateTimeEdit (0x0x7fe2221da1a0)
+ QWidget (0x0x7fe2221a0620) 0
+ primary-for QAbstractSpinBox (0x0x7fe2221da208)
+ QObject (0x0x7fe222199b40) 0
+ primary-for QWidget (0x0x7fe2221a0620)
+ QPaintDevice (0x0x7fe222199ba0) 16
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 512)
+
+Class QDial::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDial::QPrivateSignal (0x0x7fe222199ea0) 0 empty
+
+Vtable for QDial
+QDial::_ZTV5QDial: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDial)
+16 (int (*)(...))QDial::metaObject
+24 (int (*)(...))QDial::qt_metacast
+32 (int (*)(...))QDial::qt_metacall
+40 (int (*)(...))QDial::~QDial
+48 (int (*)(...))QDial::~QDial
+56 (int (*)(...))QDial::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDial::sizeHint
+136 (int (*)(...))QDial::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDial::mousePressEvent
+176 (int (*)(...))QDial::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QDial::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDial::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDial::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDial::sliderChange
+440 (int (*)(...))QDial::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI5QDial)
+464 (int (*)(...))QDial::_ZThn16_N5QDialD1Ev
+472 (int (*)(...))QDial::_ZThn16_N5QDialD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDial
+ size=40 align=8
+ base size=40 base align=8
+QDial (0x0x7fe2221da270) 0
+ vptr=((& QDial::_ZTV5QDial) + 16)
+ QAbstractSlider (0x0x7fe2221da2d8) 0
+ primary-for QDial (0x0x7fe2221da270)
+ QWidget (0x0x7fe2221a0690) 0
+ primary-for QAbstractSlider (0x0x7fe2221da2d8)
+ QObject (0x0x7fe222199de0) 0
+ primary-for QWidget (0x0x7fe2221a0690)
+ QPaintDevice (0x0x7fe222199e40) 16
+ vptr=((& QDial::_ZTV5QDial) + 464)
+
+Class QDialogButtonBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialogButtonBox::QPrivateSignal (0x0x7fe222203120) 0 empty
+
+Vtable for QDialogButtonBox
+QDialogButtonBox::_ZTV16QDialogButtonBox: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QDialogButtonBox)
+16 (int (*)(...))QDialogButtonBox::metaObject
+24 (int (*)(...))QDialogButtonBox::qt_metacast
+32 (int (*)(...))QDialogButtonBox::qt_metacall
+40 (int (*)(...))QDialogButtonBox::~QDialogButtonBox
+48 (int (*)(...))QDialogButtonBox::~QDialogButtonBox
+56 (int (*)(...))QDialogButtonBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QDialogButtonBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI16QDialogButtonBox)
+448 (int (*)(...))QDialogButtonBox::_ZThn16_N16QDialogButtonBoxD1Ev
+456 (int (*)(...))QDialogButtonBox::_ZThn16_N16QDialogButtonBoxD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDialogButtonBox
+ size=40 align=8
+ base size=40 base align=8
+QDialogButtonBox (0x0x7fe2221da340) 0
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 16)
+ QWidget (0x0x7fe2221a0700) 0
+ primary-for QDialogButtonBox (0x0x7fe2221da340)
+ QObject (0x0x7fe222203060) 0
+ primary-for QWidget (0x0x7fe2221a0700)
+ QPaintDevice (0x0x7fe2222030c0) 16
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 448)
+
+Class QDockWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDockWidget::QPrivateSignal (0x0x7fe222203720) 0 empty
+
+Vtable for QDockWidget
+QDockWidget::_ZTV11QDockWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QDockWidget)
+16 (int (*)(...))QDockWidget::metaObject
+24 (int (*)(...))QDockWidget::qt_metacast
+32 (int (*)(...))QDockWidget::qt_metacall
+40 (int (*)(...))QDockWidget::~QDockWidget
+48 (int (*)(...))QDockWidget::~QDockWidget
+56 (int (*)(...))QDockWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDockWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QDockWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QDockWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDockWidget::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QDockWidget)
+456 (int (*)(...))QDockWidget::_ZThn16_N11QDockWidgetD1Ev
+464 (int (*)(...))QDockWidget::_ZThn16_N11QDockWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDockWidget
+ size=40 align=8
+ base size=40 base align=8
+QDockWidget (0x0x7fe2221da4e0) 0
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 16)
+ QWidget (0x0x7fe2222067e0) 0
+ primary-for QDockWidget (0x0x7fe2221da4e0)
+ QObject (0x0x7fe222203660) 0
+ primary-for QWidget (0x0x7fe2222067e0)
+ QPaintDevice (0x0x7fe2222036c0) 16
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 456)
+
+Class QTileRules
+ size=8 align=4
+ base size=8 base align=4
+QTileRules (0x0x7fe222203d20) 0
+
+Class QErrorMessage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QErrorMessage::QPrivateSignal (0x0x7fe22226e3c0) 0 empty
+
+Vtable for QErrorMessage
+QErrorMessage::_ZTV13QErrorMessage: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QErrorMessage)
+16 (int (*)(...))QErrorMessage::metaObject
+24 (int (*)(...))QErrorMessage::qt_metacast
+32 (int (*)(...))QErrorMessage::qt_metacall
+40 (int (*)(...))QErrorMessage::~QErrorMessage
+48 (int (*)(...))QErrorMessage::~QErrorMessage
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QErrorMessage::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QErrorMessage::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI13QErrorMessage)
+488 (int (*)(...))QErrorMessage::_ZThn16_N13QErrorMessageD1Ev
+496 (int (*)(...))QErrorMessage::_ZThn16_N13QErrorMessageD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QErrorMessage
+ size=40 align=8
+ base size=40 base align=8
+QErrorMessage (0x0x7fe2221da7b8) 0
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 16)
+ QDialog (0x0x7fe2221da820) 0
+ primary-for QErrorMessage (0x0x7fe2221da7b8)
+ QWidget (0x0x7fe22226f230) 0
+ primary-for QDialog (0x0x7fe2221da820)
+ QObject (0x0x7fe22226e300) 0
+ primary-for QWidget (0x0x7fe22226f230)
+ QPaintDevice (0x0x7fe22226e360) 16
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 488)
+
+Class QFileDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDialog::QPrivateSignal (0x0x7fe22226e600) 0 empty
+
+Vtable for QFileDialog
+QFileDialog::_ZTV11QFileDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFileDialog)
+16 (int (*)(...))QFileDialog::metaObject
+24 (int (*)(...))QFileDialog::qt_metacast
+32 (int (*)(...))QFileDialog::qt_metacall
+40 (int (*)(...))QFileDialog::~QFileDialog
+48 (int (*)(...))QFileDialog::~QFileDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QFileDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFileDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QFileDialog::done
+456 (int (*)(...))QFileDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QFileDialog)
+488 (int (*)(...))QFileDialog::_ZThn16_N11QFileDialogD1Ev
+496 (int (*)(...))QFileDialog::_ZThn16_N11QFileDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFileDialog
+ size=40 align=8
+ base size=40 base align=8
+QFileDialog (0x0x7fe2221da888) 0
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 16)
+ QDialog (0x0x7fe2221da8f0) 0
+ primary-for QFileDialog (0x0x7fe2221da888)
+ QWidget (0x0x7fe22226f2a0) 0
+ primary-for QDialog (0x0x7fe2221da8f0)
+ QObject (0x0x7fe22226e540) 0
+ primary-for QWidget (0x0x7fe22226f2a0)
+ QPaintDevice (0x0x7fe22226e5a0) 16
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 488)
+
+Vtable for QFileIconProvider
+QFileIconProvider::_ZTV17QFileIconProvider: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFileIconProvider)
+16 (int (*)(...))QFileIconProvider::~QFileIconProvider
+24 (int (*)(...))QFileIconProvider::~QFileIconProvider
+32 (int (*)(...))QFileIconProvider::icon
+40 (int (*)(...))QFileIconProvider::icon
+48 (int (*)(...))QAbstractFileIconProvider::type
+56 (int (*)(...))QAbstractFileIconProvider::setOptions
+64 (int (*)(...))QAbstractFileIconProvider::options
+
+Class QFileIconProvider
+ size=16 align=8
+ base size=16 base align=8
+QFileIconProvider (0x0x7fe2221daa90) 0
+ vptr=((& QFileIconProvider::_ZTV17QFileIconProvider) + 16)
+ QAbstractFileIconProvider (0x0x7fe22226eea0) 0
+ primary-for QFileIconProvider (0x0x7fe2221daa90)
+
+Class QFocusFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFocusFrame::QPrivateSignal (0x0x7fe2222d80c0) 0 empty
+
+Vtable for QFocusFrame
+QFocusFrame::_ZTV11QFocusFrame: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusFrame)
+16 (int (*)(...))QFocusFrame::metaObject
+24 (int (*)(...))QFocusFrame::qt_metacast
+32 (int (*)(...))QFocusFrame::qt_metacall
+40 (int (*)(...))QFocusFrame::~QFocusFrame
+48 (int (*)(...))QFocusFrame::~QFocusFrame
+56 (int (*)(...))QFocusFrame::event
+64 (int (*)(...))QFocusFrame::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFocusFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFocusFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QFocusFrame)
+456 (int (*)(...))QFocusFrame::_ZThn16_N11QFocusFrameD1Ev
+464 (int (*)(...))QFocusFrame::_ZThn16_N11QFocusFrameD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFocusFrame
+ size=40 align=8
+ base size=40 base align=8
+QFocusFrame (0x0x7fe2221daaf8) 0
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 16)
+ QWidget (0x0x7fe22226fbd0) 0
+ primary-for QFocusFrame (0x0x7fe2221daaf8)
+ QObject (0x0x7fe2222d8000) 0
+ primary-for QWidget (0x0x7fe22226fbd0)
+ QPaintDevice (0x0x7fe2222d8060) 16
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 456)
+
+Class QFontComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontComboBox::QPrivateSignal (0x0x7fe2222d8300) 0 empty
+
+Vtable for QFontComboBox
+QFontComboBox::_ZTV13QFontComboBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QFontComboBox)
+16 (int (*)(...))QFontComboBox::metaObject
+24 (int (*)(...))QFontComboBox::qt_metacast
+32 (int (*)(...))QFontComboBox::qt_metacall
+40 (int (*)(...))QFontComboBox::~QFontComboBox
+48 (int (*)(...))QFontComboBox::~QFontComboBox
+56 (int (*)(...))QFontComboBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFontComboBox::sizeHint
+136 (int (*)(...))QComboBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QComboBox::mousePressEvent
+176 (int (*)(...))QComboBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QComboBox::wheelEvent
+208 (int (*)(...))QComboBox::keyPressEvent
+216 (int (*)(...))QComboBox::keyReleaseEvent
+224 (int (*)(...))QComboBox::focusInEvent
+232 (int (*)(...))QComboBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QComboBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QComboBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QComboBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QComboBox::showEvent
+352 (int (*)(...))QComboBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QComboBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QComboBox::inputMethodEvent
+416 (int (*)(...))QComboBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QComboBox::setModel
+440 (int (*)(...))QComboBox::showPopup
+448 (int (*)(...))QComboBox::hidePopup
+456 (int (*)(...))QComboBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI13QFontComboBox)
+480 (int (*)(...))QFontComboBox::_ZThn16_N13QFontComboBoxD1Ev
+488 (int (*)(...))QFontComboBox::_ZThn16_N13QFontComboBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFontComboBox
+ size=40 align=8
+ base size=40 base align=8
+QFontComboBox (0x0x7fe2221dab60) 0
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 16)
+ QComboBox (0x0x7fe2221dabc8) 0
+ primary-for QFontComboBox (0x0x7fe2221dab60)
+ QWidget (0x0x7fe22226fc40) 0
+ primary-for QComboBox (0x0x7fe2221dabc8)
+ QObject (0x0x7fe2222d8240) 0
+ primary-for QWidget (0x0x7fe22226fc40)
+ QPaintDevice (0x0x7fe2222d82a0) 16
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 480)
+
+Class QFontDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontDialog::QPrivateSignal (0x0x7fe2222d8900) 0 empty
+
+Vtable for QFontDialog
+QFontDialog::_ZTV11QFontDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFontDialog)
+16 (int (*)(...))QFontDialog::metaObject
+24 (int (*)(...))QFontDialog::qt_metacast
+32 (int (*)(...))QFontDialog::qt_metacall
+40 (int (*)(...))QFontDialog::~QFontDialog
+48 (int (*)(...))QFontDialog::~QFontDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QFontDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QFontDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFontDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QFontDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QFontDialog)
+488 (int (*)(...))QFontDialog::_ZThn16_N11QFontDialogD1Ev
+496 (int (*)(...))QFontDialog::_ZThn16_N11QFontDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFontDialog
+ size=40 align=8
+ base size=40 base align=8
+QFontDialog (0x0x7fe2221dad68) 0
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 16)
+ QDialog (0x0x7fe2221dadd0) 0
+ primary-for QFontDialog (0x0x7fe2221dad68)
+ QWidget (0x0x7fe22226fee0) 0
+ primary-for QDialog (0x0x7fe2221dadd0)
+ QObject (0x0x7fe2222d8840) 0
+ primary-for QWidget (0x0x7fe22226fee0)
+ QPaintDevice (0x0x7fe2222d88a0) 16
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 488)
+
+Class QFormLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFormLayout::QPrivateSignal (0x0x7fe2222d8f00) 0 empty
+
+Class QFormLayout::TakeRowResult
+ size=16 align=8
+ base size=16 base align=8
+QFormLayout::TakeRowResult (0x0x7fe2222d8f60) 0
+
+Vtable for QFormLayout
+QFormLayout::_ZTV11QFormLayout: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFormLayout)
+16 (int (*)(...))QFormLayout::metaObject
+24 (int (*)(...))QFormLayout::qt_metacast
+32 (int (*)(...))QFormLayout::qt_metacall
+40 (int (*)(...))QFormLayout::~QFormLayout
+48 (int (*)(...))QFormLayout::~QFormLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFormLayout::spacing
+120 (int (*)(...))QFormLayout::setSpacing
+128 (int (*)(...))QFormLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QFormLayout::addItem
+152 (int (*)(...))QFormLayout::expandingDirections
+160 (int (*)(...))QFormLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QFormLayout::setGeometry
+184 (int (*)(...))QFormLayout::itemAt
+192 (int (*)(...))QFormLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QFormLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QFormLayout::sizeHint
+264 (int (*)(...))QFormLayout::hasHeightForWidth
+272 (int (*)(...))QFormLayout::heightForWidth
+280 (int (*)(...))-16
+288 (int (*)(...))(& _ZTI11QFormLayout)
+296 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayoutD1Ev
+304 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayoutD0Ev
+312 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout8sizeHintEv
+320 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout11minimumSizeEv
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+336 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout19expandingDirectionsEv
+344 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayout11setGeometryERK5QRect
+352 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+368 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout17hasHeightForWidthEv
+376 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout14heightForWidthEi
+384 (int (*)(...))QLayoutItem::minimumHeightForWidth
+392 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayout10invalidateEv
+400 (int (*)(...))QLayoutItem::widget
+408 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+416 (int (*)(...))QLayoutItem::spacerItem
+424 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QFormLayout
+ size=32 align=8
+ base size=28 base align=8
+QFormLayout (0x0x7fe2221daf70) 0
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 16)
+ QLayout (0x0x7fe22230f230) 0
+ primary-for QFormLayout (0x0x7fe2221daf70)
+ QObject (0x0x7fe2222d8e40) 0
+ primary-for QLayout (0x0x7fe22230f230)
+ QLayoutItem (0x0x7fe2222d8ea0) 16
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 296)
+
+Class QGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGesture::QPrivateSignal (0x0x7fe221f6ea80) 0 empty
+
+Vtable for QGesture
+QGesture::_ZTV8QGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QGesture)
+16 (int (*)(...))QGesture::metaObject
+24 (int (*)(...))QGesture::qt_metacast
+32 (int (*)(...))QGesture::qt_metacall
+40 (int (*)(...))QGesture::~QGesture
+48 (int (*)(...))QGesture::~QGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QGesture
+ size=16 align=8
+ base size=16 base align=8
+QGesture (0x0x7fe221f72a28) 0
+ vptr=((& QGesture::_ZTV8QGesture) + 16)
+ QObject (0x0x7fe221f6ea20) 0
+ primary-for QGesture (0x0x7fe221f72a28)
+
+Class QPanGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPanGesture::QPrivateSignal (0x0x7fe221f6ec60) 0 empty
+
+Vtable for QPanGesture
+QPanGesture::_ZTV11QPanGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPanGesture)
+16 (int (*)(...))QPanGesture::metaObject
+24 (int (*)(...))QPanGesture::qt_metacast
+32 (int (*)(...))QPanGesture::qt_metacall
+40 (int (*)(...))QPanGesture::~QPanGesture
+48 (int (*)(...))QPanGesture::~QPanGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPanGesture
+ size=16 align=8
+ base size=16 base align=8
+QPanGesture (0x0x7fe221f72a90) 0
+ vptr=((& QPanGesture::_ZTV11QPanGesture) + 16)
+ QGesture (0x0x7fe221f72af8) 0
+ primary-for QPanGesture (0x0x7fe221f72a90)
+ QObject (0x0x7fe221f6ec00) 0
+ primary-for QGesture (0x0x7fe221f72af8)
+
+Class QPinchGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPinchGesture::QPrivateSignal (0x0x7fe221f6ee40) 0 empty
+
+Vtable for QPinchGesture
+QPinchGesture::_ZTV13QPinchGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPinchGesture)
+16 (int (*)(...))QPinchGesture::metaObject
+24 (int (*)(...))QPinchGesture::qt_metacast
+32 (int (*)(...))QPinchGesture::qt_metacall
+40 (int (*)(...))QPinchGesture::~QPinchGesture
+48 (int (*)(...))QPinchGesture::~QPinchGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPinchGesture
+ size=16 align=8
+ base size=16 base align=8
+QPinchGesture (0x0x7fe221f72b60) 0
+ vptr=((& QPinchGesture::_ZTV13QPinchGesture) + 16)
+ QGesture (0x0x7fe221f72bc8) 0
+ primary-for QPinchGesture (0x0x7fe221f72b60)
+ QObject (0x0x7fe221f6ede0) 0
+ primary-for QGesture (0x0x7fe221f72bc8)
+
+Class QSwipeGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSwipeGesture::QPrivateSignal (0x0x7fe221f9f600) 0 empty
+
+Vtable for QSwipeGesture
+QSwipeGesture::_ZTV13QSwipeGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSwipeGesture)
+16 (int (*)(...))QSwipeGesture::metaObject
+24 (int (*)(...))QSwipeGesture::qt_metacast
+32 (int (*)(...))QSwipeGesture::qt_metacall
+40 (int (*)(...))QSwipeGesture::~QSwipeGesture
+48 (int (*)(...))QSwipeGesture::~QSwipeGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSwipeGesture
+ size=16 align=8
+ base size=16 base align=8
+QSwipeGesture (0x0x7fe221f72d68) 0
+ vptr=((& QSwipeGesture::_ZTV13QSwipeGesture) + 16)
+ QGesture (0x0x7fe221f72dd0) 0
+ primary-for QSwipeGesture (0x0x7fe221f72d68)
+ QObject (0x0x7fe221f9f5a0) 0
+ primary-for QGesture (0x0x7fe221f72dd0)
+
+Class QTapGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapGesture::QPrivateSignal (0x0x7fe221f9f8a0) 0 empty
+
+Vtable for QTapGesture
+QTapGesture::_ZTV11QTapGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTapGesture)
+16 (int (*)(...))QTapGesture::metaObject
+24 (int (*)(...))QTapGesture::qt_metacast
+32 (int (*)(...))QTapGesture::qt_metacall
+40 (int (*)(...))QTapGesture::~QTapGesture
+48 (int (*)(...))QTapGesture::~QTapGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTapGesture
+ size=16 align=8
+ base size=16 base align=8
+QTapGesture (0x0x7fe221f72e38) 0
+ vptr=((& QTapGesture::_ZTV11QTapGesture) + 16)
+ QGesture (0x0x7fe221f72ea0) 0
+ primary-for QTapGesture (0x0x7fe221f72e38)
+ QObject (0x0x7fe221f9f840) 0
+ primary-for QGesture (0x0x7fe221f72ea0)
+
+Class QTapAndHoldGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapAndHoldGesture::QPrivateSignal (0x0x7fe221f9fa80) 0 empty
+
+Vtable for QTapAndHoldGesture
+QTapAndHoldGesture::_ZTV18QTapAndHoldGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QTapAndHoldGesture)
+16 (int (*)(...))QTapAndHoldGesture::metaObject
+24 (int (*)(...))QTapAndHoldGesture::qt_metacast
+32 (int (*)(...))QTapAndHoldGesture::qt_metacall
+40 (int (*)(...))QTapAndHoldGesture::~QTapAndHoldGesture
+48 (int (*)(...))QTapAndHoldGesture::~QTapAndHoldGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTapAndHoldGesture
+ size=16 align=8
+ base size=16 base align=8
+QTapAndHoldGesture (0x0x7fe221f72f08) 0
+ vptr=((& QTapAndHoldGesture::_ZTV18QTapAndHoldGesture) + 16)
+ QGesture (0x0x7fe221f72f70) 0
+ primary-for QTapAndHoldGesture (0x0x7fe221f72f08)
+ QObject (0x0x7fe221f9fa20) 0
+ primary-for QGesture (0x0x7fe221f72f70)
+
+Vtable for QGestureEvent
+QGestureEvent::_ZTV13QGestureEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGestureEvent)
+16 (int (*)(...))QGestureEvent::~QGestureEvent
+24 (int (*)(...))QGestureEvent::~QGestureEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGestureEvent
+ size=64 align=8
+ base size=64 base align=8
+QGestureEvent (0x0x7fe221fd8000) 0
+ vptr=((& QGestureEvent::_ZTV13QGestureEvent) + 16)
+ QEvent (0x0x7fe221f9fc00) 0
+ primary-for QGestureEvent (0x0x7fe221fd8000)
+
+Vtable for QGestureRecognizer
+QGestureRecognizer::_ZTV18QGestureRecognizer: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGestureRecognizer)
+16 0
+24 0
+32 (int (*)(...))QGestureRecognizer::create
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGestureRecognizer::reset
+
+Class QGestureRecognizer
+ size=8 align=8
+ base size=8 base align=8
+QGestureRecognizer (0x0x7fe221fe58a0) 0 nearly-empty
+ vptr=((& QGestureRecognizer::_ZTV18QGestureRecognizer) + 16)
+
+Vtable for QGraphicsItem
+QGraphicsItem::_ZTV13QGraphicsItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGraphicsItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsItem::isObscuredBy
+88 (int (*)(...))QGraphicsItem::opaqueArea
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))QGraphicsItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsItem (0x0x7fe221fe5c00) 0
+ vptr=((& QGraphicsItem::_ZTV13QGraphicsItem) + 16)
+
+Class QGraphicsObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsObject::QPrivateSignal (0x0x7fe2220bcd80) 0 empty
+
+Vtable for QGraphicsObject
+QGraphicsObject::_ZTV15QGraphicsObject: 53 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsObject)
+16 (int (*)(...))QGraphicsObject::metaObject
+24 (int (*)(...))QGraphicsObject::qt_metacast
+32 (int (*)(...))QGraphicsObject::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QGraphicsObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))-16
+120 (int (*)(...))(& _ZTI15QGraphicsObject)
+128 0
+136 0
+144 (int (*)(...))QGraphicsItem::advance
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))QGraphicsItem::shape
+168 (int (*)(...))QGraphicsItem::contains
+176 (int (*)(...))QGraphicsItem::collidesWithItem
+184 (int (*)(...))QGraphicsItem::collidesWithPath
+192 (int (*)(...))QGraphicsItem::isObscuredBy
+200 (int (*)(...))QGraphicsItem::opaqueArea
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))QGraphicsItem::type
+224 (int (*)(...))QGraphicsItem::sceneEventFilter
+232 (int (*)(...))QGraphicsItem::sceneEvent
+240 (int (*)(...))QGraphicsItem::contextMenuEvent
+248 (int (*)(...))QGraphicsItem::dragEnterEvent
+256 (int (*)(...))QGraphicsItem::dragLeaveEvent
+264 (int (*)(...))QGraphicsItem::dragMoveEvent
+272 (int (*)(...))QGraphicsItem::dropEvent
+280 (int (*)(...))QGraphicsItem::focusInEvent
+288 (int (*)(...))QGraphicsItem::focusOutEvent
+296 (int (*)(...))QGraphicsItem::hoverEnterEvent
+304 (int (*)(...))QGraphicsItem::hoverMoveEvent
+312 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+320 (int (*)(...))QGraphicsItem::keyPressEvent
+328 (int (*)(...))QGraphicsItem::keyReleaseEvent
+336 (int (*)(...))QGraphicsItem::mousePressEvent
+344 (int (*)(...))QGraphicsItem::mouseMoveEvent
+352 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+360 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+368 (int (*)(...))QGraphicsItem::wheelEvent
+376 (int (*)(...))QGraphicsItem::inputMethodEvent
+384 (int (*)(...))QGraphicsItem::inputMethodQuery
+392 (int (*)(...))QGraphicsItem::itemChange
+400 (int (*)(...))QGraphicsItem::supportsExtension
+408 (int (*)(...))QGraphicsItem::setExtension
+416 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsObject
+ size=32 align=8
+ base size=32 base align=8
+QGraphicsObject (0x0x7fe2220a6070) 0
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 16)
+ QObject (0x0x7fe2220bccc0) 0
+ primary-for QGraphicsObject (0x0x7fe2220a6070)
+ QGraphicsItem (0x0x7fe2220bcd20) 16
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 128)
+
+Vtable for QAbstractGraphicsShapeItem
+QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractGraphicsShapeItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QAbstractGraphicsShapeItem::isObscuredBy
+88 (int (*)(...))QAbstractGraphicsShapeItem::opaqueArea
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))QGraphicsItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QAbstractGraphicsShapeItem
+ size=16 align=8
+ base size=16 base align=8
+QAbstractGraphicsShapeItem (0x0x7fe221fd8a90) 0
+ vptr=((& QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem) + 16)
+ QGraphicsItem (0x0x7fe2220bce40) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fe221fd8a90)
+
+Vtable for QGraphicsPathItem
+QGraphicsPathItem::_ZTV17QGraphicsPathItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsPathItem)
+16 (int (*)(...))QGraphicsPathItem::~QGraphicsPathItem
+24 (int (*)(...))QGraphicsPathItem::~QGraphicsPathItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPathItem::boundingRect
+48 (int (*)(...))QGraphicsPathItem::shape
+56 (int (*)(...))QGraphicsPathItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPathItem::isObscuredBy
+88 (int (*)(...))QGraphicsPathItem::opaqueArea
+96 (int (*)(...))QGraphicsPathItem::paint
+104 (int (*)(...))QGraphicsPathItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPathItem::supportsExtension
+296 (int (*)(...))QGraphicsPathItem::setExtension
+304 (int (*)(...))QGraphicsPathItem::extension
+
+Class QGraphicsPathItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPathItem (0x0x7fe221fd8af8) 0
+ vptr=((& QGraphicsPathItem::_ZTV17QGraphicsPathItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7fe221fd8b60) 0
+ primary-for QGraphicsPathItem (0x0x7fe221fd8af8)
+ QGraphicsItem (0x0x7fe2220bcf60) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fe221fd8b60)
+
+Vtable for QGraphicsRectItem
+QGraphicsRectItem::_ZTV17QGraphicsRectItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsRectItem)
+16 (int (*)(...))QGraphicsRectItem::~QGraphicsRectItem
+24 (int (*)(...))QGraphicsRectItem::~QGraphicsRectItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsRectItem::boundingRect
+48 (int (*)(...))QGraphicsRectItem::shape
+56 (int (*)(...))QGraphicsRectItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsRectItem::isObscuredBy
+88 (int (*)(...))QGraphicsRectItem::opaqueArea
+96 (int (*)(...))QGraphicsRectItem::paint
+104 (int (*)(...))QGraphicsRectItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsRectItem::supportsExtension
+296 (int (*)(...))QGraphicsRectItem::setExtension
+304 (int (*)(...))QGraphicsRectItem::extension
+
+Class QGraphicsRectItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsRectItem (0x0x7fe221fd8bc8) 0
+ vptr=((& QGraphicsRectItem::_ZTV17QGraphicsRectItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7fe221fd8c30) 0
+ primary-for QGraphicsRectItem (0x0x7fe221fd8bc8)
+ QGraphicsItem (0x0x7fe2221040c0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fe221fd8c30)
+
+Vtable for QGraphicsEllipseItem
+QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsEllipseItem)
+16 (int (*)(...))QGraphicsEllipseItem::~QGraphicsEllipseItem
+24 (int (*)(...))QGraphicsEllipseItem::~QGraphicsEllipseItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsEllipseItem::boundingRect
+48 (int (*)(...))QGraphicsEllipseItem::shape
+56 (int (*)(...))QGraphicsEllipseItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsEllipseItem::isObscuredBy
+88 (int (*)(...))QGraphicsEllipseItem::opaqueArea
+96 (int (*)(...))QGraphicsEllipseItem::paint
+104 (int (*)(...))QGraphicsEllipseItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsEllipseItem::supportsExtension
+296 (int (*)(...))QGraphicsEllipseItem::setExtension
+304 (int (*)(...))QGraphicsEllipseItem::extension
+
+Class QGraphicsEllipseItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsEllipseItem (0x0x7fe221fd8c98) 0
+ vptr=((& QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7fe221fd8d00) 0
+ primary-for QGraphicsEllipseItem (0x0x7fe221fd8c98)
+ QGraphicsItem (0x0x7fe222104240) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fe221fd8d00)
+
+Vtable for QGraphicsPolygonItem
+QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsPolygonItem)
+16 (int (*)(...))QGraphicsPolygonItem::~QGraphicsPolygonItem
+24 (int (*)(...))QGraphicsPolygonItem::~QGraphicsPolygonItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPolygonItem::boundingRect
+48 (int (*)(...))QGraphicsPolygonItem::shape
+56 (int (*)(...))QGraphicsPolygonItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPolygonItem::isObscuredBy
+88 (int (*)(...))QGraphicsPolygonItem::opaqueArea
+96 (int (*)(...))QGraphicsPolygonItem::paint
+104 (int (*)(...))QGraphicsPolygonItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPolygonItem::supportsExtension
+296 (int (*)(...))QGraphicsPolygonItem::setExtension
+304 (int (*)(...))QGraphicsPolygonItem::extension
+
+Class QGraphicsPolygonItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPolygonItem (0x0x7fe221fd8d68) 0
+ vptr=((& QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7fe221fd8dd0) 0
+ primary-for QGraphicsPolygonItem (0x0x7fe221fd8d68)
+ QGraphicsItem (0x0x7fe2221043c0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fe221fd8dd0)
+
+Vtable for QGraphicsLineItem
+QGraphicsLineItem::_ZTV17QGraphicsLineItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsLineItem)
+16 (int (*)(...))QGraphicsLineItem::~QGraphicsLineItem
+24 (int (*)(...))QGraphicsLineItem::~QGraphicsLineItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsLineItem::boundingRect
+48 (int (*)(...))QGraphicsLineItem::shape
+56 (int (*)(...))QGraphicsLineItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsLineItem::isObscuredBy
+88 (int (*)(...))QGraphicsLineItem::opaqueArea
+96 (int (*)(...))QGraphicsLineItem::paint
+104 (int (*)(...))QGraphicsLineItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsLineItem::supportsExtension
+296 (int (*)(...))QGraphicsLineItem::setExtension
+304 (int (*)(...))QGraphicsLineItem::extension
+
+Class QGraphicsLineItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLineItem (0x0x7fe221fd8e38) 0
+ vptr=((& QGraphicsLineItem::_ZTV17QGraphicsLineItem) + 16)
+ QGraphicsItem (0x0x7fe2221044e0) 0
+ primary-for QGraphicsLineItem (0x0x7fe221fd8e38)
+
+Vtable for QGraphicsPixmapItem
+QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsPixmapItem)
+16 (int (*)(...))QGraphicsPixmapItem::~QGraphicsPixmapItem
+24 (int (*)(...))QGraphicsPixmapItem::~QGraphicsPixmapItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPixmapItem::boundingRect
+48 (int (*)(...))QGraphicsPixmapItem::shape
+56 (int (*)(...))QGraphicsPixmapItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPixmapItem::isObscuredBy
+88 (int (*)(...))QGraphicsPixmapItem::opaqueArea
+96 (int (*)(...))QGraphicsPixmapItem::paint
+104 (int (*)(...))QGraphicsPixmapItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPixmapItem::supportsExtension
+296 (int (*)(...))QGraphicsPixmapItem::setExtension
+304 (int (*)(...))QGraphicsPixmapItem::extension
+
+Class QGraphicsPixmapItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPixmapItem (0x0x7fe221fd8ea0) 0
+ vptr=((& QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem) + 16)
+ QGraphicsItem (0x0x7fe222104660) 0
+ primary-for QGraphicsPixmapItem (0x0x7fe221fd8ea0)
+
+Class QGraphicsTextItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTextItem::QPrivateSignal (0x0x7fe2221048a0) 0 empty
+
+Vtable for QGraphicsTextItem
+QGraphicsTextItem::_ZTV17QGraphicsTextItem: 82 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsTextItem)
+16 (int (*)(...))QGraphicsTextItem::metaObject
+24 (int (*)(...))QGraphicsTextItem::qt_metacast
+32 (int (*)(...))QGraphicsTextItem::qt_metacall
+40 (int (*)(...))QGraphicsTextItem::~QGraphicsTextItem
+48 (int (*)(...))QGraphicsTextItem::~QGraphicsTextItem
+56 (int (*)(...))QGraphicsObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsTextItem::boundingRect
+120 (int (*)(...))QGraphicsTextItem::shape
+128 (int (*)(...))QGraphicsTextItem::contains
+136 (int (*)(...))QGraphicsTextItem::paint
+144 (int (*)(...))QGraphicsTextItem::isObscuredBy
+152 (int (*)(...))QGraphicsTextItem::opaqueArea
+160 (int (*)(...))QGraphicsTextItem::type
+168 (int (*)(...))QGraphicsTextItem::sceneEvent
+176 (int (*)(...))QGraphicsTextItem::mousePressEvent
+184 (int (*)(...))QGraphicsTextItem::mouseMoveEvent
+192 (int (*)(...))QGraphicsTextItem::mouseReleaseEvent
+200 (int (*)(...))QGraphicsTextItem::mouseDoubleClickEvent
+208 (int (*)(...))QGraphicsTextItem::contextMenuEvent
+216 (int (*)(...))QGraphicsTextItem::keyPressEvent
+224 (int (*)(...))QGraphicsTextItem::keyReleaseEvent
+232 (int (*)(...))QGraphicsTextItem::focusInEvent
+240 (int (*)(...))QGraphicsTextItem::focusOutEvent
+248 (int (*)(...))QGraphicsTextItem::dragEnterEvent
+256 (int (*)(...))QGraphicsTextItem::dragLeaveEvent
+264 (int (*)(...))QGraphicsTextItem::dragMoveEvent
+272 (int (*)(...))QGraphicsTextItem::dropEvent
+280 (int (*)(...))QGraphicsTextItem::inputMethodEvent
+288 (int (*)(...))QGraphicsTextItem::hoverEnterEvent
+296 (int (*)(...))QGraphicsTextItem::hoverMoveEvent
+304 (int (*)(...))QGraphicsTextItem::hoverLeaveEvent
+312 (int (*)(...))QGraphicsTextItem::inputMethodQuery
+320 (int (*)(...))QGraphicsTextItem::supportsExtension
+328 (int (*)(...))QGraphicsTextItem::setExtension
+336 (int (*)(...))QGraphicsTextItem::extension
+344 (int (*)(...))-16
+352 (int (*)(...))(& _ZTI17QGraphicsTextItem)
+360 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItemD1Ev
+368 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItemD0Ev
+376 (int (*)(...))QGraphicsItem::advance
+384 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem12boundingRectEv
+392 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem5shapeEv
+400 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem8containsERK7QPointF
+408 (int (*)(...))QGraphicsItem::collidesWithItem
+416 (int (*)(...))QGraphicsItem::collidesWithPath
+424 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem12isObscuredByEPK13QGraphicsItem
+432 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem10opaqueAreaEv
+440 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+448 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem4typeEv
+456 (int (*)(...))QGraphicsItem::sceneEventFilter
+464 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem10sceneEventEP6QEvent
+472 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem16contextMenuEventEP30QGraphicsSceneContextMenuEvent
+480 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14dragEnterEventEP27QGraphicsSceneDragDropEvent
+488 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14dragLeaveEventEP27QGraphicsSceneDragDropEvent
+496 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13dragMoveEventEP27QGraphicsSceneDragDropEvent
+504 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem9dropEventEP27QGraphicsSceneDragDropEvent
+512 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem12focusInEventEP11QFocusEvent
+520 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13focusOutEventEP11QFocusEvent
+528 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15hoverEnterEventEP24QGraphicsSceneHoverEvent
+536 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14hoverMoveEventEP24QGraphicsSceneHoverEvent
+544 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+552 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13keyPressEventEP9QKeyEvent
+560 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15keyReleaseEventEP9QKeyEvent
+568 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15mousePressEventEP24QGraphicsSceneMouseEvent
+576 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14mouseMoveEventEP24QGraphicsSceneMouseEvent
+584 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem17mouseReleaseEventEP24QGraphicsSceneMouseEvent
+592 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent
+600 (int (*)(...))QGraphicsItem::wheelEvent
+608 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem16inputMethodEventEP17QInputMethodEvent
+616 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem16inputMethodQueryEN2Qt16InputMethodQueryE
+624 (int (*)(...))QGraphicsItem::itemChange
+632 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem17supportsExtensionEN13QGraphicsItem9ExtensionE
+640 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem12setExtensionEN13QGraphicsItem9ExtensionERK8QVariant
+648 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem9extensionERK8QVariant
+
+Class QGraphicsTextItem
+ size=40 align=8
+ base size=40 base align=8
+QGraphicsTextItem (0x0x7fe221fd8f08) 0
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 16)
+ QGraphicsObject (0x0x7fe2220a64d0) 0
+ primary-for QGraphicsTextItem (0x0x7fe221fd8f08)
+ QObject (0x0x7fe2221047e0) 0
+ primary-for QGraphicsObject (0x0x7fe2220a64d0)
+ QGraphicsItem (0x0x7fe222104840) 16
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 360)
+
+Vtable for QGraphicsSimpleTextItem
+QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSimpleTextItem)
+16 (int (*)(...))QGraphicsSimpleTextItem::~QGraphicsSimpleTextItem
+24 (int (*)(...))QGraphicsSimpleTextItem::~QGraphicsSimpleTextItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsSimpleTextItem::boundingRect
+48 (int (*)(...))QGraphicsSimpleTextItem::shape
+56 (int (*)(...))QGraphicsSimpleTextItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsSimpleTextItem::isObscuredBy
+88 (int (*)(...))QGraphicsSimpleTextItem::opaqueArea
+96 (int (*)(...))QGraphicsSimpleTextItem::paint
+104 (int (*)(...))QGraphicsSimpleTextItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsSimpleTextItem::supportsExtension
+296 (int (*)(...))QGraphicsSimpleTextItem::setExtension
+304 (int (*)(...))QGraphicsSimpleTextItem::extension
+
+Class QGraphicsSimpleTextItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsSimpleTextItem (0x0x7fe221d5e000) 0
+ vptr=((& QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7fe221d5e068) 0
+ primary-for QGraphicsSimpleTextItem (0x0x7fe221d5e000)
+ QGraphicsItem (0x0x7fe222104b40) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fe221d5e068)
+
+Vtable for QGraphicsItemGroup
+QGraphicsItemGroup::_ZTV18QGraphicsItemGroup: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGraphicsItemGroup)
+16 (int (*)(...))QGraphicsItemGroup::~QGraphicsItemGroup
+24 (int (*)(...))QGraphicsItemGroup::~QGraphicsItemGroup
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsItemGroup::boundingRect
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsItemGroup::isObscuredBy
+88 (int (*)(...))QGraphicsItemGroup::opaqueArea
+96 (int (*)(...))QGraphicsItemGroup::paint
+104 (int (*)(...))QGraphicsItemGroup::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsItemGroup
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsItemGroup (0x0x7fe221d5e0d0) 0
+ vptr=((& QGraphicsItemGroup::_ZTV18QGraphicsItemGroup) + 16)
+ QGraphicsItem (0x0x7fe222104c60) 0
+ primary-for QGraphicsItemGroup (0x0x7fe221d5e0d0)
+
+Vtable for QGraphicsLayoutItem
+QGraphicsLayoutItem::_ZTV19QGraphicsLayoutItem: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsLayoutItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsLayoutItem::setGeometry
+40 (int (*)(...))QGraphicsLayoutItem::getContentsMargins
+48 (int (*)(...))QGraphicsLayoutItem::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsLayoutItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLayoutItem (0x0x7fe222104f60) 0
+ vptr=((& QGraphicsLayoutItem::_ZTV19QGraphicsLayoutItem) + 16)
+
+Vtable for QGraphicsLayout
+QGraphicsLayout::_ZTV15QGraphicsLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsLayout)
+16 0
+24 0
+32 (int (*)(...))QGraphicsLayoutItem::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))QGraphicsLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLayout (0x0x7fe221d5e138) 0
+ vptr=((& QGraphicsLayout::_ZTV15QGraphicsLayout) + 16)
+ QGraphicsLayoutItem (0x0x7fe221d7f660) 0
+ primary-for QGraphicsLayout (0x0x7fe221d5e138)
+
+Class QGraphicsAnchor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsAnchor::QPrivateSignal (0x0x7fe221d7f960) 0 empty
+
+Vtable for QGraphicsAnchor
+QGraphicsAnchor::_ZTV15QGraphicsAnchor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsAnchor)
+16 (int (*)(...))QGraphicsAnchor::metaObject
+24 (int (*)(...))QGraphicsAnchor::qt_metacast
+32 (int (*)(...))QGraphicsAnchor::qt_metacall
+40 (int (*)(...))QGraphicsAnchor::~QGraphicsAnchor
+48 (int (*)(...))QGraphicsAnchor::~QGraphicsAnchor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QGraphicsAnchor
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsAnchor (0x0x7fe221d5e1a0) 0
+ vptr=((& QGraphicsAnchor::_ZTV15QGraphicsAnchor) + 16)
+ QObject (0x0x7fe221d7f900) 0
+ primary-for QGraphicsAnchor (0x0x7fe221d5e1a0)
+
+Vtable for QGraphicsAnchorLayout
+QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QGraphicsAnchorLayout)
+16 (int (*)(...))QGraphicsAnchorLayout::~QGraphicsAnchorLayout
+24 (int (*)(...))QGraphicsAnchorLayout::~QGraphicsAnchorLayout
+32 (int (*)(...))QGraphicsAnchorLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsAnchorLayout::sizeHint
+72 (int (*)(...))QGraphicsAnchorLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsAnchorLayout::count
+96 (int (*)(...))QGraphicsAnchorLayout::itemAt
+104 (int (*)(...))QGraphicsAnchorLayout::removeAt
+
+Class QGraphicsAnchorLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsAnchorLayout (0x0x7fe221d5e208) 0
+ vptr=((& QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout) + 16)
+ QGraphicsLayout (0x0x7fe221d5e270) 0
+ primary-for QGraphicsAnchorLayout (0x0x7fe221d5e208)
+ QGraphicsLayoutItem (0x0x7fe221d7fae0) 0
+ primary-for QGraphicsLayout (0x0x7fe221d5e270)
+
+Class QGraphicsEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsEffect::QPrivateSignal (0x0x7fe221d7fc60) 0 empty
+
+Vtable for QGraphicsEffect
+QGraphicsEffect::_ZTV15QGraphicsEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsEffect)
+16 (int (*)(...))QGraphicsEffect::metaObject
+24 (int (*)(...))QGraphicsEffect::qt_metacast
+32 (int (*)(...))QGraphicsEffect::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsEffect (0x0x7fe221d5e2d8) 0
+ vptr=((& QGraphicsEffect::_ZTV15QGraphicsEffect) + 16)
+ QObject (0x0x7fe221d7fc00) 0
+ primary-for QGraphicsEffect (0x0x7fe221d5e2d8)
+
+Class QGraphicsColorizeEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsColorizeEffect::QPrivateSignal (0x0x7fe221dc9240) 0 empty
+
+Vtable for QGraphicsColorizeEffect
+QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsColorizeEffect)
+16 (int (*)(...))QGraphicsColorizeEffect::metaObject
+24 (int (*)(...))QGraphicsColorizeEffect::qt_metacast
+32 (int (*)(...))QGraphicsColorizeEffect::qt_metacall
+40 (int (*)(...))QGraphicsColorizeEffect::~QGraphicsColorizeEffect
+48 (int (*)(...))QGraphicsColorizeEffect::~QGraphicsColorizeEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))QGraphicsColorizeEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsColorizeEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsColorizeEffect (0x0x7fe221d5e478) 0
+ vptr=((& QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect) + 16)
+ QGraphicsEffect (0x0x7fe221d5e4e0) 0
+ primary-for QGraphicsColorizeEffect (0x0x7fe221d5e478)
+ QObject (0x0x7fe221dc91e0) 0
+ primary-for QGraphicsEffect (0x0x7fe221d5e4e0)
+
+Class QGraphicsBlurEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsBlurEffect::QPrivateSignal (0x0x7fe221dc9420) 0 empty
+
+Vtable for QGraphicsBlurEffect
+QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsBlurEffect)
+16 (int (*)(...))QGraphicsBlurEffect::metaObject
+24 (int (*)(...))QGraphicsBlurEffect::qt_metacast
+32 (int (*)(...))QGraphicsBlurEffect::qt_metacall
+40 (int (*)(...))QGraphicsBlurEffect::~QGraphicsBlurEffect
+48 (int (*)(...))QGraphicsBlurEffect::~QGraphicsBlurEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsBlurEffect::boundingRectFor
+120 (int (*)(...))QGraphicsBlurEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsBlurEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsBlurEffect (0x0x7fe221d5e548) 0
+ vptr=((& QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect) + 16)
+ QGraphicsEffect (0x0x7fe221d5e5b0) 0
+ primary-for QGraphicsBlurEffect (0x0x7fe221d5e548)
+ QObject (0x0x7fe221dc93c0) 0
+ primary-for QGraphicsEffect (0x0x7fe221d5e5b0)
+
+Class QGraphicsDropShadowEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsDropShadowEffect::QPrivateSignal (0x0x7fe221dc9a80) 0 empty
+
+Vtable for QGraphicsDropShadowEffect
+QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QGraphicsDropShadowEffect)
+16 (int (*)(...))QGraphicsDropShadowEffect::metaObject
+24 (int (*)(...))QGraphicsDropShadowEffect::qt_metacast
+32 (int (*)(...))QGraphicsDropShadowEffect::qt_metacall
+40 (int (*)(...))QGraphicsDropShadowEffect::~QGraphicsDropShadowEffect
+48 (int (*)(...))QGraphicsDropShadowEffect::~QGraphicsDropShadowEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsDropShadowEffect::boundingRectFor
+120 (int (*)(...))QGraphicsDropShadowEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsDropShadowEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsDropShadowEffect (0x0x7fe221d5e750) 0
+ vptr=((& QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect) + 16)
+ QGraphicsEffect (0x0x7fe221d5e7b8) 0
+ primary-for QGraphicsDropShadowEffect (0x0x7fe221d5e750)
+ QObject (0x0x7fe221dc9a20) 0
+ primary-for QGraphicsEffect (0x0x7fe221d5e7b8)
+
+Class QGraphicsOpacityEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsOpacityEffect::QPrivateSignal (0x0x7fe221dc9ea0) 0 empty
+
+Vtable for QGraphicsOpacityEffect
+QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QGraphicsOpacityEffect)
+16 (int (*)(...))QGraphicsOpacityEffect::metaObject
+24 (int (*)(...))QGraphicsOpacityEffect::qt_metacast
+32 (int (*)(...))QGraphicsOpacityEffect::qt_metacall
+40 (int (*)(...))QGraphicsOpacityEffect::~QGraphicsOpacityEffect
+48 (int (*)(...))QGraphicsOpacityEffect::~QGraphicsOpacityEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))QGraphicsOpacityEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsOpacityEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsOpacityEffect (0x0x7fe221d5e820) 0
+ vptr=((& QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect) + 16)
+ QGraphicsEffect (0x0x7fe221d5e888) 0
+ primary-for QGraphicsOpacityEffect (0x0x7fe221d5e820)
+ QObject (0x0x7fe221dc9e40) 0
+ primary-for QGraphicsEffect (0x0x7fe221d5e888)
+
+Vtable for QGraphicsGridLayout
+QGraphicsGridLayout::_ZTV19QGraphicsGridLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsGridLayout)
+16 (int (*)(...))QGraphicsGridLayout::~QGraphicsGridLayout
+24 (int (*)(...))QGraphicsGridLayout::~QGraphicsGridLayout
+32 (int (*)(...))QGraphicsGridLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsGridLayout::sizeHint
+72 (int (*)(...))QGraphicsGridLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsGridLayout::count
+96 (int (*)(...))QGraphicsGridLayout::itemAt
+104 (int (*)(...))QGraphicsGridLayout::removeAt
+
+Class QGraphicsGridLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsGridLayout (0x0x7fe221d5e8f0) 0
+ vptr=((& QGraphicsGridLayout::_ZTV19QGraphicsGridLayout) + 16)
+ QGraphicsLayout (0x0x7fe221d5e958) 0
+ primary-for QGraphicsGridLayout (0x0x7fe221d5e8f0)
+ QGraphicsLayoutItem (0x0x7fe221e2b060) 0
+ primary-for QGraphicsLayout (0x0x7fe221d5e958)
+
+Class QGraphicsItemAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsItemAnimation::QPrivateSignal (0x0x7fe221e2b240) 0 empty
+
+Vtable for QGraphicsItemAnimation
+QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QGraphicsItemAnimation)
+16 (int (*)(...))QGraphicsItemAnimation::metaObject
+24 (int (*)(...))QGraphicsItemAnimation::qt_metacast
+32 (int (*)(...))QGraphicsItemAnimation::qt_metacall
+40 (int (*)(...))QGraphicsItemAnimation::~QGraphicsItemAnimation
+48 (int (*)(...))QGraphicsItemAnimation::~QGraphicsItemAnimation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsItemAnimation::beforeAnimationStep
+120 (int (*)(...))QGraphicsItemAnimation::afterAnimationStep
+
+Class QGraphicsItemAnimation
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsItemAnimation (0x0x7fe221d5ea90) 0
+ vptr=((& QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation) + 16)
+ QObject (0x0x7fe221e2b1e0) 0
+ primary-for QGraphicsItemAnimation (0x0x7fe221d5ea90)
+
+Vtable for QGraphicsLinearLayout
+QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QGraphicsLinearLayout)
+16 (int (*)(...))QGraphicsLinearLayout::~QGraphicsLinearLayout
+24 (int (*)(...))QGraphicsLinearLayout::~QGraphicsLinearLayout
+32 (int (*)(...))QGraphicsLinearLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsLinearLayout::sizeHint
+72 (int (*)(...))QGraphicsLinearLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsLinearLayout::count
+96 (int (*)(...))QGraphicsLinearLayout::itemAt
+104 (int (*)(...))QGraphicsLinearLayout::removeAt
+
+Class QGraphicsLinearLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLinearLayout (0x0x7fe221d5eaf8) 0
+ vptr=((& QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout) + 16)
+ QGraphicsLayout (0x0x7fe221d5eb60) 0
+ primary-for QGraphicsLinearLayout (0x0x7fe221d5eaf8)
+ QGraphicsLayoutItem (0x0x7fe221e2b300) 0
+ primary-for QGraphicsLayout (0x0x7fe221d5eb60)
+
+Class QGraphicsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsWidget::QPrivateSignal (0x0x7fe221e2b600) 0 empty
+
+Vtable for QGraphicsWidget
+QGraphicsWidget::_ZTV15QGraphicsWidget: 93 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsWidget)
+16 (int (*)(...))QGraphicsWidget::metaObject
+24 (int (*)(...))QGraphicsWidget::qt_metacast
+32 (int (*)(...))QGraphicsWidget::qt_metacall
+40 (int (*)(...))QGraphicsWidget::~QGraphicsWidget
+48 (int (*)(...))QGraphicsWidget::~QGraphicsWidget
+56 (int (*)(...))QGraphicsWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsWidget::setGeometry
+120 (int (*)(...))QGraphicsWidget::getContentsMargins
+128 (int (*)(...))QGraphicsWidget::type
+136 (int (*)(...))QGraphicsWidget::paint
+144 (int (*)(...))QGraphicsWidget::paintWindowFrame
+152 (int (*)(...))QGraphicsWidget::boundingRect
+160 (int (*)(...))QGraphicsWidget::shape
+168 (int (*)(...))QGraphicsWidget::initStyleOption
+176 (int (*)(...))QGraphicsWidget::sizeHint
+184 (int (*)(...))QGraphicsWidget::updateGeometry
+192 (int (*)(...))QGraphicsWidget::itemChange
+200 (int (*)(...))QGraphicsWidget::propertyChange
+208 (int (*)(...))QGraphicsWidget::sceneEvent
+216 (int (*)(...))QGraphicsWidget::windowFrameEvent
+224 (int (*)(...))QGraphicsWidget::windowFrameSectionAt
+232 (int (*)(...))QGraphicsWidget::changeEvent
+240 (int (*)(...))QGraphicsWidget::closeEvent
+248 (int (*)(...))QGraphicsWidget::focusInEvent
+256 (int (*)(...))QGraphicsWidget::focusNextPrevChild
+264 (int (*)(...))QGraphicsWidget::focusOutEvent
+272 (int (*)(...))QGraphicsWidget::hideEvent
+280 (int (*)(...))QGraphicsWidget::moveEvent
+288 (int (*)(...))QGraphicsWidget::polishEvent
+296 (int (*)(...))QGraphicsWidget::resizeEvent
+304 (int (*)(...))QGraphicsWidget::showEvent
+312 (int (*)(...))QGraphicsWidget::hoverMoveEvent
+320 (int (*)(...))QGraphicsWidget::hoverLeaveEvent
+328 (int (*)(...))QGraphicsWidget::grabMouseEvent
+336 (int (*)(...))QGraphicsWidget::ungrabMouseEvent
+344 (int (*)(...))QGraphicsWidget::grabKeyboardEvent
+352 (int (*)(...))QGraphicsWidget::ungrabKeyboardEvent
+360 (int (*)(...))-16
+368 (int (*)(...))(& _ZTI15QGraphicsWidget)
+376 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidgetD1Ev
+384 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidgetD0Ev
+392 (int (*)(...))QGraphicsItem::advance
+400 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget12boundingRectEv
+408 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget5shapeEv
+416 (int (*)(...))QGraphicsItem::contains
+424 (int (*)(...))QGraphicsItem::collidesWithItem
+432 (int (*)(...))QGraphicsItem::collidesWithPath
+440 (int (*)(...))QGraphicsItem::isObscuredBy
+448 (int (*)(...))QGraphicsItem::opaqueArea
+456 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+464 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget4typeEv
+472 (int (*)(...))QGraphicsItem::sceneEventFilter
+480 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10sceneEventEP6QEvent
+488 (int (*)(...))QGraphicsItem::contextMenuEvent
+496 (int (*)(...))QGraphicsItem::dragEnterEvent
+504 (int (*)(...))QGraphicsItem::dragLeaveEvent
+512 (int (*)(...))QGraphicsItem::dragMoveEvent
+520 (int (*)(...))QGraphicsItem::dropEvent
+528 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget12focusInEventEP11QFocusEvent
+536 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget13focusOutEventEP11QFocusEvent
+544 (int (*)(...))QGraphicsItem::hoverEnterEvent
+552 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget14hoverMoveEventEP24QGraphicsSceneHoverEvent
+560 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+568 (int (*)(...))QGraphicsItem::keyPressEvent
+576 (int (*)(...))QGraphicsItem::keyReleaseEvent
+584 (int (*)(...))QGraphicsItem::mousePressEvent
+592 (int (*)(...))QGraphicsItem::mouseMoveEvent
+600 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+608 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+616 (int (*)(...))QGraphicsItem::wheelEvent
+624 (int (*)(...))QGraphicsItem::inputMethodEvent
+632 (int (*)(...))QGraphicsItem::inputMethodQuery
+640 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant
+648 (int (*)(...))QGraphicsItem::supportsExtension
+656 (int (*)(...))QGraphicsItem::setExtension
+664 (int (*)(...))QGraphicsItem::extension
+672 (int (*)(...))-32
+680 (int (*)(...))(& _ZTI15QGraphicsWidget)
+688 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidgetD1Ev
+696 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidgetD0Ev
+704 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget11setGeometryERK6QRectF
+712 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget18getContentsMarginsEPdS0_S0_S0_
+720 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget14updateGeometryEv
+728 (int (*)(...))QGraphicsLayoutItem::isEmpty
+736 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget8sizeHintEN2Qt8SizeHintERK6QSizeF
+
+Class QGraphicsWidget
+ size=48 align=8
+ base size=48 base align=8
+QGraphicsWidget (0x0x7fe221de4070) 0
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 16)
+ QGraphicsObject (0x0x7fe221de40e0) 0
+ primary-for QGraphicsWidget (0x0x7fe221de4070)
+ QObject (0x0x7fe221e2b4e0) 0
+ primary-for QGraphicsObject (0x0x7fe221de40e0)
+ QGraphicsItem (0x0x7fe221e2b540) 16
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 376)
+ QGraphicsLayoutItem (0x0x7fe221e2b5a0) 32
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 688)
+
+Class QGraphicsProxyWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsProxyWidget::QPrivateSignal (0x0x7fe221e2ba80) 0 empty
+
+Vtable for QGraphicsProxyWidget
+QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+16 (int (*)(...))QGraphicsProxyWidget::metaObject
+24 (int (*)(...))QGraphicsProxyWidget::qt_metacast
+32 (int (*)(...))QGraphicsProxyWidget::qt_metacall
+40 (int (*)(...))QGraphicsProxyWidget::~QGraphicsProxyWidget
+48 (int (*)(...))QGraphicsProxyWidget::~QGraphicsProxyWidget
+56 (int (*)(...))QGraphicsProxyWidget::event
+64 (int (*)(...))QGraphicsProxyWidget::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsProxyWidget::setGeometry
+120 (int (*)(...))QGraphicsWidget::getContentsMargins
+128 (int (*)(...))QGraphicsProxyWidget::type
+136 (int (*)(...))QGraphicsProxyWidget::paint
+144 (int (*)(...))QGraphicsWidget::paintWindowFrame
+152 (int (*)(...))QGraphicsWidget::boundingRect
+160 (int (*)(...))QGraphicsWidget::shape
+168 (int (*)(...))QGraphicsWidget::initStyleOption
+176 (int (*)(...))QGraphicsProxyWidget::sizeHint
+184 (int (*)(...))QGraphicsWidget::updateGeometry
+192 (int (*)(...))QGraphicsProxyWidget::itemChange
+200 (int (*)(...))QGraphicsWidget::propertyChange
+208 (int (*)(...))QGraphicsWidget::sceneEvent
+216 (int (*)(...))QGraphicsWidget::windowFrameEvent
+224 (int (*)(...))QGraphicsWidget::windowFrameSectionAt
+232 (int (*)(...))QGraphicsWidget::changeEvent
+240 (int (*)(...))QGraphicsWidget::closeEvent
+248 (int (*)(...))QGraphicsProxyWidget::focusInEvent
+256 (int (*)(...))QGraphicsProxyWidget::focusNextPrevChild
+264 (int (*)(...))QGraphicsProxyWidget::focusOutEvent
+272 (int (*)(...))QGraphicsProxyWidget::hideEvent
+280 (int (*)(...))QGraphicsWidget::moveEvent
+288 (int (*)(...))QGraphicsWidget::polishEvent
+296 (int (*)(...))QGraphicsProxyWidget::resizeEvent
+304 (int (*)(...))QGraphicsProxyWidget::showEvent
+312 (int (*)(...))QGraphicsProxyWidget::hoverMoveEvent
+320 (int (*)(...))QGraphicsProxyWidget::hoverLeaveEvent
+328 (int (*)(...))QGraphicsProxyWidget::grabMouseEvent
+336 (int (*)(...))QGraphicsProxyWidget::ungrabMouseEvent
+344 (int (*)(...))QGraphicsWidget::grabKeyboardEvent
+352 (int (*)(...))QGraphicsWidget::ungrabKeyboardEvent
+360 (int (*)(...))QGraphicsProxyWidget::contextMenuEvent
+368 (int (*)(...))QGraphicsProxyWidget::dragEnterEvent
+376 (int (*)(...))QGraphicsProxyWidget::dragLeaveEvent
+384 (int (*)(...))QGraphicsProxyWidget::dragMoveEvent
+392 (int (*)(...))QGraphicsProxyWidget::dropEvent
+400 (int (*)(...))QGraphicsProxyWidget::hoverEnterEvent
+408 (int (*)(...))QGraphicsProxyWidget::mouseMoveEvent
+416 (int (*)(...))QGraphicsProxyWidget::mousePressEvent
+424 (int (*)(...))QGraphicsProxyWidget::mouseReleaseEvent
+432 (int (*)(...))QGraphicsProxyWidget::mouseDoubleClickEvent
+440 (int (*)(...))QGraphicsProxyWidget::wheelEvent
+448 (int (*)(...))QGraphicsProxyWidget::keyPressEvent
+456 (int (*)(...))QGraphicsProxyWidget::keyReleaseEvent
+464 (int (*)(...))QGraphicsProxyWidget::inputMethodQuery
+472 (int (*)(...))QGraphicsProxyWidget::inputMethodEvent
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+496 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidgetD1Ev
+504 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidgetD0Ev
+512 (int (*)(...))QGraphicsItem::advance
+520 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget12boundingRectEv
+528 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget5shapeEv
+536 (int (*)(...))QGraphicsItem::contains
+544 (int (*)(...))QGraphicsItem::collidesWithItem
+552 (int (*)(...))QGraphicsItem::collidesWithPath
+560 (int (*)(...))QGraphicsItem::isObscuredBy
+568 (int (*)(...))QGraphicsItem::opaqueArea
+576 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+584 (int (*)(...))QGraphicsProxyWidget::_ZThn16_NK20QGraphicsProxyWidget4typeEv
+592 (int (*)(...))QGraphicsItem::sceneEventFilter
+600 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10sceneEventEP6QEvent
+608 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget16contextMenuEventEP30QGraphicsSceneContextMenuEvent
+616 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14dragEnterEventEP27QGraphicsSceneDragDropEvent
+624 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14dragLeaveEventEP27QGraphicsSceneDragDropEvent
+632 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13dragMoveEventEP27QGraphicsSceneDragDropEvent
+640 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget9dropEventEP27QGraphicsSceneDragDropEvent
+648 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget12focusInEventEP11QFocusEvent
+656 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13focusOutEventEP11QFocusEvent
+664 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15hoverEnterEventEP24QGraphicsSceneHoverEvent
+672 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14hoverMoveEventEP24QGraphicsSceneHoverEvent
+680 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+688 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13keyPressEventEP9QKeyEvent
+696 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15keyReleaseEventEP9QKeyEvent
+704 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15mousePressEventEP24QGraphicsSceneMouseEvent
+712 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14mouseMoveEventEP24QGraphicsSceneMouseEvent
+720 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget17mouseReleaseEventEP24QGraphicsSceneMouseEvent
+728 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent
+736 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget10wheelEventEP24QGraphicsSceneWheelEvent
+744 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget16inputMethodEventEP17QInputMethodEvent
+752 (int (*)(...))QGraphicsProxyWidget::_ZThn16_NK20QGraphicsProxyWidget16inputMethodQueryEN2Qt16InputMethodQueryE
+760 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant
+768 (int (*)(...))QGraphicsItem::supportsExtension
+776 (int (*)(...))QGraphicsItem::setExtension
+784 (int (*)(...))QGraphicsItem::extension
+792 (int (*)(...))-32
+800 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+808 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidgetD1Ev
+816 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidgetD0Ev
+824 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidget11setGeometryERK6QRectF
+832 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget18getContentsMarginsEPdS0_S0_S0_
+840 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget14updateGeometryEv
+848 (int (*)(...))QGraphicsLayoutItem::isEmpty
+856 (int (*)(...))QGraphicsProxyWidget::_ZThn32_NK20QGraphicsProxyWidget8sizeHintEN2Qt8SizeHintERK6QSizeF
+
+Class QGraphicsProxyWidget
+ size=48 align=8
+ base size=48 base align=8
+QGraphicsProxyWidget (0x0x7fe221d5ec98) 0
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 16)
+ QGraphicsWidget (0x0x7fe221de4230) 0
+ primary-for QGraphicsProxyWidget (0x0x7fe221d5ec98)
+ QGraphicsObject (0x0x7fe221de42a0) 0
+ primary-for QGraphicsWidget (0x0x7fe221de4230)
+ QObject (0x0x7fe221e2b960) 0
+ primary-for QGraphicsObject (0x0x7fe221de42a0)
+ QGraphicsItem (0x0x7fe221e2b9c0) 16
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 496)
+ QGraphicsLayoutItem (0x0x7fe221e2ba20) 32
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 808)
+
+Class QGraphicsScene::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScene::QPrivateSignal (0x0x7fe221e2bde0) 0 empty
+
+Vtable for QGraphicsScene
+QGraphicsScene::_ZTV14QGraphicsScene: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGraphicsScene)
+16 (int (*)(...))QGraphicsScene::metaObject
+24 (int (*)(...))QGraphicsScene::qt_metacast
+32 (int (*)(...))QGraphicsScene::qt_metacall
+40 (int (*)(...))QGraphicsScene::~QGraphicsScene
+48 (int (*)(...))QGraphicsScene::~QGraphicsScene
+56 (int (*)(...))QGraphicsScene::event
+64 (int (*)(...))QGraphicsScene::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsScene::inputMethodQuery
+120 (int (*)(...))QGraphicsScene::contextMenuEvent
+128 (int (*)(...))QGraphicsScene::dragEnterEvent
+136 (int (*)(...))QGraphicsScene::dragMoveEvent
+144 (int (*)(...))QGraphicsScene::dragLeaveEvent
+152 (int (*)(...))QGraphicsScene::dropEvent
+160 (int (*)(...))QGraphicsScene::focusInEvent
+168 (int (*)(...))QGraphicsScene::focusOutEvent
+176 (int (*)(...))QGraphicsScene::helpEvent
+184 (int (*)(...))QGraphicsScene::keyPressEvent
+192 (int (*)(...))QGraphicsScene::keyReleaseEvent
+200 (int (*)(...))QGraphicsScene::mousePressEvent
+208 (int (*)(...))QGraphicsScene::mouseMoveEvent
+216 (int (*)(...))QGraphicsScene::mouseReleaseEvent
+224 (int (*)(...))QGraphicsScene::mouseDoubleClickEvent
+232 (int (*)(...))QGraphicsScene::wheelEvent
+240 (int (*)(...))QGraphicsScene::inputMethodEvent
+248 (int (*)(...))QGraphicsScene::drawBackground
+256 (int (*)(...))QGraphicsScene::drawForeground
+264 (int (*)(...))QGraphicsScene::drawItems
+272 (int (*)(...))QGraphicsScene::focusNextPrevChild
+
+Class QGraphicsScene
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsScene (0x0x7fe221d5eea0) 0
+ vptr=((& QGraphicsScene::_ZTV14QGraphicsScene) + 16)
+ QObject (0x0x7fe221e2bd80) 0
+ primary-for QGraphicsScene (0x0x7fe221d5eea0)
+
+Vtable for QGraphicsSceneEvent
+QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsSceneEvent)
+16 (int (*)(...))QGraphicsSceneEvent::~QGraphicsSceneEvent
+24 (int (*)(...))QGraphicsSceneEvent::~QGraphicsSceneEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneEvent (0x0x7fe221ec28f0) 0
+ vptr=((& QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent) + 16)
+ QEvent (0x0x7fe221b3d120) 0
+ primary-for QGraphicsSceneEvent (0x0x7fe221ec28f0)
+
+Vtable for QGraphicsSceneMouseEvent
+QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneMouseEvent)
+16 (int (*)(...))QGraphicsSceneMouseEvent::~QGraphicsSceneMouseEvent
+24 (int (*)(...))QGraphicsSceneMouseEvent::~QGraphicsSceneMouseEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneMouseEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneMouseEvent (0x0x7fe221ec2958) 0
+ vptr=((& QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fe221ec29c0) 0
+ primary-for QGraphicsSceneMouseEvent (0x0x7fe221ec2958)
+ QEvent (0x0x7fe221b3d300) 0
+ primary-for QGraphicsSceneEvent (0x0x7fe221ec29c0)
+
+Vtable for QGraphicsSceneWheelEvent
+QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneWheelEvent)
+16 (int (*)(...))QGraphicsSceneWheelEvent::~QGraphicsSceneWheelEvent
+24 (int (*)(...))QGraphicsSceneWheelEvent::~QGraphicsSceneWheelEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneWheelEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneWheelEvent (0x0x7fe221ec2a28) 0
+ vptr=((& QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fe221ec2a90) 0
+ primary-for QGraphicsSceneWheelEvent (0x0x7fe221ec2a28)
+ QEvent (0x0x7fe221b3d420) 0
+ primary-for QGraphicsSceneEvent (0x0x7fe221ec2a90)
+
+Vtable for QGraphicsSceneContextMenuEvent
+QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI30QGraphicsSceneContextMenuEvent)
+16 (int (*)(...))QGraphicsSceneContextMenuEvent::~QGraphicsSceneContextMenuEvent
+24 (int (*)(...))QGraphicsSceneContextMenuEvent::~QGraphicsSceneContextMenuEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneContextMenuEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneContextMenuEvent (0x0x7fe221ec2af8) 0
+ vptr=((& QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fe221ec2b60) 0
+ primary-for QGraphicsSceneContextMenuEvent (0x0x7fe221ec2af8)
+ QEvent (0x0x7fe221b3d540) 0
+ primary-for QGraphicsSceneEvent (0x0x7fe221ec2b60)
+
+Vtable for QGraphicsSceneHoverEvent
+QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneHoverEvent)
+16 (int (*)(...))QGraphicsSceneHoverEvent::~QGraphicsSceneHoverEvent
+24 (int (*)(...))QGraphicsSceneHoverEvent::~QGraphicsSceneHoverEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneHoverEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneHoverEvent (0x0x7fe221ec2bc8) 0
+ vptr=((& QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fe221ec2c30) 0
+ primary-for QGraphicsSceneHoverEvent (0x0x7fe221ec2bc8)
+ QEvent (0x0x7fe221b3d660) 0
+ primary-for QGraphicsSceneEvent (0x0x7fe221ec2c30)
+
+Vtable for QGraphicsSceneHelpEvent
+QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSceneHelpEvent)
+16 (int (*)(...))QGraphicsSceneHelpEvent::~QGraphicsSceneHelpEvent
+24 (int (*)(...))QGraphicsSceneHelpEvent::~QGraphicsSceneHelpEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneHelpEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneHelpEvent (0x0x7fe221ec2c98) 0
+ vptr=((& QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fe221ec2d00) 0
+ primary-for QGraphicsSceneHelpEvent (0x0x7fe221ec2c98)
+ QEvent (0x0x7fe221b3d780) 0
+ primary-for QGraphicsSceneEvent (0x0x7fe221ec2d00)
+
+Vtable for QGraphicsSceneDragDropEvent
+QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QGraphicsSceneDragDropEvent)
+16 (int (*)(...))QGraphicsSceneDragDropEvent::~QGraphicsSceneDragDropEvent
+24 (int (*)(...))QGraphicsSceneDragDropEvent::~QGraphicsSceneDragDropEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneDragDropEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneDragDropEvent (0x0x7fe221ec2d68) 0
+ vptr=((& QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fe221ec2dd0) 0
+ primary-for QGraphicsSceneDragDropEvent (0x0x7fe221ec2d68)
+ QEvent (0x0x7fe221b3d8a0) 0
+ primary-for QGraphicsSceneEvent (0x0x7fe221ec2dd0)
+
+Vtable for QGraphicsSceneResizeEvent
+QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QGraphicsSceneResizeEvent)
+16 (int (*)(...))QGraphicsSceneResizeEvent::~QGraphicsSceneResizeEvent
+24 (int (*)(...))QGraphicsSceneResizeEvent::~QGraphicsSceneResizeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneResizeEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneResizeEvent (0x0x7fe221ec2e38) 0
+ vptr=((& QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fe221ec2ea0) 0
+ primary-for QGraphicsSceneResizeEvent (0x0x7fe221ec2e38)
+ QEvent (0x0x7fe221b3d9c0) 0
+ primary-for QGraphicsSceneEvent (0x0x7fe221ec2ea0)
+
+Vtable for QGraphicsSceneMoveEvent
+QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSceneMoveEvent)
+16 (int (*)(...))QGraphicsSceneMoveEvent::~QGraphicsSceneMoveEvent
+24 (int (*)(...))QGraphicsSceneMoveEvent::~QGraphicsSceneMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneMoveEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneMoveEvent (0x0x7fe221ec2f08) 0
+ vptr=((& QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent) + 16)
+ QGraphicsSceneEvent (0x0x7fe221ec2f70) 0
+ primary-for QGraphicsSceneMoveEvent (0x0x7fe221ec2f08)
+ QEvent (0x0x7fe221b3dae0) 0
+ primary-for QGraphicsSceneEvent (0x0x7fe221ec2f70)
+
+Class QGraphicsTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTransform::QPrivateSignal (0x0x7fe221b3dc60) 0 empty
+
+Vtable for QGraphicsTransform
+QGraphicsTransform::_ZTV18QGraphicsTransform: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGraphicsTransform)
+16 (int (*)(...))QGraphicsTransform::metaObject
+24 (int (*)(...))QGraphicsTransform::qt_metacast
+32 (int (*)(...))QGraphicsTransform::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsTransform
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsTransform (0x0x7fe221ec2888) 0
+ vptr=((& QGraphicsTransform::_ZTV18QGraphicsTransform) + 16)
+ QObject (0x0x7fe221b3dc00) 0
+ primary-for QGraphicsTransform (0x0x7fe221ec2888)
+
+Class QGraphicsScale::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScale::QPrivateSignal (0x0x7fe221b3de40) 0 empty
+
+Vtable for QGraphicsScale
+QGraphicsScale::_ZTV14QGraphicsScale: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGraphicsScale)
+16 (int (*)(...))QGraphicsScale::metaObject
+24 (int (*)(...))QGraphicsScale::qt_metacast
+32 (int (*)(...))QGraphicsScale::qt_metacall
+40 (int (*)(...))QGraphicsScale::~QGraphicsScale
+48 (int (*)(...))QGraphicsScale::~QGraphicsScale
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsScale::applyTo
+
+Class QGraphicsScale
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsScale (0x0x7fe221ba3000) 0
+ vptr=((& QGraphicsScale::_ZTV14QGraphicsScale) + 16)
+ QGraphicsTransform (0x0x7fe221ba3068) 0
+ primary-for QGraphicsScale (0x0x7fe221ba3000)
+ QObject (0x0x7fe221b3dde0) 0
+ primary-for QGraphicsTransform (0x0x7fe221ba3068)
+
+Class QGraphicsRotation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsRotation::QPrivateSignal (0x0x7fe221bac060) 0 empty
+
+Vtable for QGraphicsRotation
+QGraphicsRotation::_ZTV17QGraphicsRotation: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsRotation)
+16 (int (*)(...))QGraphicsRotation::metaObject
+24 (int (*)(...))QGraphicsRotation::qt_metacast
+32 (int (*)(...))QGraphicsRotation::qt_metacall
+40 (int (*)(...))QGraphicsRotation::~QGraphicsRotation
+48 (int (*)(...))QGraphicsRotation::~QGraphicsRotation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsRotation::applyTo
+
+Class QGraphicsRotation
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsRotation (0x0x7fe221ba30d0) 0
+ vptr=((& QGraphicsRotation::_ZTV17QGraphicsRotation) + 16)
+ QGraphicsTransform (0x0x7fe221ba3138) 0
+ primary-for QGraphicsRotation (0x0x7fe221ba30d0)
+ QObject (0x0x7fe221bac000) 0
+ primary-for QGraphicsTransform (0x0x7fe221ba3138)
+
+Class QScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollArea::QPrivateSignal (0x0x7fe221bac2a0) 0 empty
+
+Vtable for QScrollArea
+QScrollArea::_ZTV11QScrollArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QScrollArea)
+16 (int (*)(...))QScrollArea::metaObject
+24 (int (*)(...))QScrollArea::qt_metacast
+32 (int (*)(...))QScrollArea::qt_metacall
+40 (int (*)(...))QScrollArea::~QScrollArea
+48 (int (*)(...))QScrollArea::~QScrollArea
+56 (int (*)(...))QScrollArea::event
+64 (int (*)(...))QScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QScrollArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QScrollArea::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QScrollArea::scrollContentsBy
+464 (int (*)(...))QScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QScrollArea)
+488 (int (*)(...))QScrollArea::_ZThn16_N11QScrollAreaD1Ev
+496 (int (*)(...))QScrollArea::_ZThn16_N11QScrollAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QScrollArea
+ size=40 align=8
+ base size=40 base align=8
+QScrollArea (0x0x7fe221ba31a0) 0
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 16)
+ QAbstractScrollArea (0x0x7fe221ba3208) 0
+ primary-for QScrollArea (0x0x7fe221ba31a0)
+ QFrame (0x0x7fe221ba3270) 0
+ primary-for QAbstractScrollArea (0x0x7fe221ba3208)
+ QWidget (0x0x7fe221de4af0) 0
+ primary-for QFrame (0x0x7fe221ba3270)
+ QObject (0x0x7fe221bac1e0) 0
+ primary-for QWidget (0x0x7fe221de4af0)
+ QPaintDevice (0x0x7fe221bac240) 16
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 488)
+
+Class QGraphicsView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsView::QPrivateSignal (0x0x7fe221bac4e0) 0 empty
+
+Vtable for QGraphicsView
+QGraphicsView::_ZTV13QGraphicsView: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGraphicsView)
+16 (int (*)(...))QGraphicsView::metaObject
+24 (int (*)(...))QGraphicsView::qt_metacast
+32 (int (*)(...))QGraphicsView::qt_metacall
+40 (int (*)(...))QGraphicsView::~QGraphicsView
+48 (int (*)(...))QGraphicsView::~QGraphicsView
+56 (int (*)(...))QGraphicsView::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QGraphicsView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QGraphicsView::mousePressEvent
+176 (int (*)(...))QGraphicsView::mouseReleaseEvent
+184 (int (*)(...))QGraphicsView::mouseDoubleClickEvent
+192 (int (*)(...))QGraphicsView::mouseMoveEvent
+200 (int (*)(...))QGraphicsView::wheelEvent
+208 (int (*)(...))QGraphicsView::keyPressEvent
+216 (int (*)(...))QGraphicsView::keyReleaseEvent
+224 (int (*)(...))QGraphicsView::focusInEvent
+232 (int (*)(...))QGraphicsView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QGraphicsView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QGraphicsView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QGraphicsView::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QGraphicsView::dragEnterEvent
+320 (int (*)(...))QGraphicsView::dragMoveEvent
+328 (int (*)(...))QGraphicsView::dragLeaveEvent
+336 (int (*)(...))QGraphicsView::dropEvent
+344 (int (*)(...))QGraphicsView::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QGraphicsView::inputMethodEvent
+416 (int (*)(...))QGraphicsView::inputMethodQuery
+424 (int (*)(...))QGraphicsView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QGraphicsView::setupViewport
+448 (int (*)(...))QGraphicsView::viewportEvent
+456 (int (*)(...))QGraphicsView::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QGraphicsView::drawBackground
+480 (int (*)(...))QGraphicsView::drawForeground
+488 (int (*)(...))QGraphicsView::drawItems
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI13QGraphicsView)
+512 (int (*)(...))QGraphicsView::_ZThn16_N13QGraphicsViewD1Ev
+520 (int (*)(...))QGraphicsView::_ZThn16_N13QGraphicsViewD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QGraphicsView
+ size=40 align=8
+ base size=40 base align=8
+QGraphicsView (0x0x7fe221ba32d8) 0
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 16)
+ QAbstractScrollArea (0x0x7fe221ba3340) 0
+ primary-for QGraphicsView (0x0x7fe221ba32d8)
+ QFrame (0x0x7fe221ba33a8) 0
+ primary-for QAbstractScrollArea (0x0x7fe221ba3340)
+ QWidget (0x0x7fe221de4b60) 0
+ primary-for QFrame (0x0x7fe221ba33a8)
+ QObject (0x0x7fe221bac420) 0
+ primary-for QWidget (0x0x7fe221de4b60)
+ QPaintDevice (0x0x7fe221bac480) 16
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 512)
+
+Class QGroupBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGroupBox::QPrivateSignal (0x0x7fe221c473c0) 0 empty
+
+Vtable for QGroupBox
+QGroupBox::_ZTV9QGroupBox: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QGroupBox)
+16 (int (*)(...))QGroupBox::metaObject
+24 (int (*)(...))QGroupBox::qt_metacast
+32 (int (*)(...))QGroupBox::qt_metacall
+40 (int (*)(...))QGroupBox::~QGroupBox
+48 (int (*)(...))QGroupBox::~QGroupBox
+56 (int (*)(...))QGroupBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QGroupBox::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QGroupBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QGroupBox::mousePressEvent
+176 (int (*)(...))QGroupBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QGroupBox::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QGroupBox::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QGroupBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QGroupBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QGroupBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QGroupBox::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI9QGroupBox)
+456 (int (*)(...))QGroupBox::_ZThn16_N9QGroupBoxD1Ev
+464 (int (*)(...))QGroupBox::_ZThn16_N9QGroupBoxD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QGroupBox
+ size=40 align=8
+ base size=40 base align=8
+QGroupBox (0x0x7fe221ba3680) 0
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 16)
+ QWidget (0x0x7fe221bc8310) 0
+ primary-for QGroupBox (0x0x7fe221ba3680)
+ QObject (0x0x7fe221c47300) 0
+ primary-for QWidget (0x0x7fe221bc8310)
+ QPaintDevice (0x0x7fe221c47360) 16
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 456)
+
+Class QHeaderView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHeaderView::QPrivateSignal (0x0x7fe221c47600) 0 empty
+
+Vtable for QHeaderView
+QHeaderView::_ZTV11QHeaderView: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHeaderView)
+16 (int (*)(...))QHeaderView::metaObject
+24 (int (*)(...))QHeaderView::qt_metacast
+32 (int (*)(...))QHeaderView::qt_metacall
+40 (int (*)(...))QHeaderView::~QHeaderView
+48 (int (*)(...))QHeaderView::~QHeaderView
+56 (int (*)(...))QHeaderView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QHeaderView::setVisible
+128 (int (*)(...))QHeaderView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QHeaderView::mousePressEvent
+176 (int (*)(...))QHeaderView::mouseReleaseEvent
+184 (int (*)(...))QHeaderView::mouseDoubleClickEvent
+192 (int (*)(...))QHeaderView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QHeaderView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QHeaderView::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QHeaderView::viewportEvent
+456 (int (*)(...))QHeaderView::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QHeaderView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QHeaderView::visualRect
+504 (int (*)(...))QHeaderView::scrollTo
+512 (int (*)(...))QHeaderView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QHeaderView::reset
+552 (int (*)(...))QAbstractItemView::setRootIndex
+560 (int (*)(...))QHeaderView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QHeaderView::dataChanged
+584 (int (*)(...))QHeaderView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QHeaderView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QHeaderView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QHeaderView::moveCursor
+704 (int (*)(...))QHeaderView::horizontalOffset
+712 (int (*)(...))QHeaderView::verticalOffset
+720 (int (*)(...))QHeaderView::isIndexHidden
+728 (int (*)(...))QHeaderView::setSelection
+736 (int (*)(...))QHeaderView::visualRegionForSelection
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QHeaderView::paintSection
+792 (int (*)(...))QHeaderView::sectionSizeFromContents
+800 (int (*)(...))QHeaderView::initStyleOptionForIndex
+808 (int (*)(...))QHeaderView::initStyleOption
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI11QHeaderView)
+832 (int (*)(...))QHeaderView::_ZThn16_N11QHeaderViewD1Ev
+840 (int (*)(...))QHeaderView::_ZThn16_N11QHeaderViewD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHeaderView
+ size=40 align=8
+ base size=40 base align=8
+QHeaderView (0x0x7fe221ba36e8) 0
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 16)
+ QAbstractItemView (0x0x7fe221ba3750) 0
+ primary-for QHeaderView (0x0x7fe221ba36e8)
+ QAbstractScrollArea (0x0x7fe221ba37b8) 0
+ primary-for QAbstractItemView (0x0x7fe221ba3750)
+ QFrame (0x0x7fe221ba3820) 0
+ primary-for QAbstractScrollArea (0x0x7fe221ba37b8)
+ QWidget (0x0x7fe221bc8380) 0
+ primary-for QFrame (0x0x7fe221ba3820)
+ QObject (0x0x7fe221c47540) 0
+ primary-for QWidget (0x0x7fe221bc8380)
+ QPaintDevice (0x0x7fe221c475a0) 16
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 832)
+
+Class QLineEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLineEdit::QPrivateSignal (0x0x7fe221c47a80) 0 empty
+
+Vtable for QLineEdit
+QLineEdit::_ZTV9QLineEdit: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QLineEdit)
+16 (int (*)(...))QLineEdit::metaObject
+24 (int (*)(...))QLineEdit::qt_metacast
+32 (int (*)(...))QLineEdit::qt_metacall
+40 (int (*)(...))QLineEdit::~QLineEdit
+48 (int (*)(...))QLineEdit::~QLineEdit
+56 (int (*)(...))QLineEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QLineEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLineEdit::sizeHint
+136 (int (*)(...))QLineEdit::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QLineEdit::mousePressEvent
+176 (int (*)(...))QLineEdit::mouseReleaseEvent
+184 (int (*)(...))QLineEdit::mouseDoubleClickEvent
+192 (int (*)(...))QLineEdit::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QLineEdit::keyPressEvent
+216 (int (*)(...))QLineEdit::keyReleaseEvent
+224 (int (*)(...))QLineEdit::focusInEvent
+232 (int (*)(...))QLineEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLineEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QLineEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QLineEdit::dragEnterEvent
+320 (int (*)(...))QLineEdit::dragMoveEvent
+328 (int (*)(...))QLineEdit::dragLeaveEvent
+336 (int (*)(...))QLineEdit::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QLineEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QLineEdit::inputMethodEvent
+416 (int (*)(...))QLineEdit::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QLineEdit::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI9QLineEdit)
+456 (int (*)(...))QLineEdit::_ZThn16_N9QLineEditD1Ev
+464 (int (*)(...))QLineEdit::_ZThn16_N9QLineEditD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLineEdit
+ size=40 align=8
+ base size=40 base align=8
+QLineEdit (0x0x7fe221ba3888) 0
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 16)
+ QWidget (0x0x7fe221bc8620) 0
+ primary-for QLineEdit (0x0x7fe221ba3888)
+ QObject (0x0x7fe221c479c0) 0
+ primary-for QWidget (0x0x7fe221bc8620)
+ QPaintDevice (0x0x7fe221c47a20) 16
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 456)
+
+Class QInputDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDialog::QPrivateSignal (0x0x7fe221c47e40) 0 empty
+
+Vtable for QInputDialog
+QInputDialog::_ZTV12QInputDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputDialog)
+16 (int (*)(...))QInputDialog::metaObject
+24 (int (*)(...))QInputDialog::qt_metacast
+32 (int (*)(...))QInputDialog::qt_metacall
+40 (int (*)(...))QInputDialog::~QInputDialog
+48 (int (*)(...))QInputDialog::~QInputDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QInputDialog::setVisible
+128 (int (*)(...))QInputDialog::sizeHint
+136 (int (*)(...))QInputDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QInputDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QInputDialog)
+488 (int (*)(...))QInputDialog::_ZThn16_N12QInputDialogD1Ev
+496 (int (*)(...))QInputDialog::_ZThn16_N12QInputDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QInputDialog
+ size=40 align=8
+ base size=40 base align=8
+QInputDialog (0x0x7fe221ba38f0) 0
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 16)
+ QDialog (0x0x7fe221ba3958) 0
+ primary-for QInputDialog (0x0x7fe221ba38f0)
+ QWidget (0x0x7fe221bc8930) 0
+ primary-for QDialog (0x0x7fe221ba3958)
+ QObject (0x0x7fe221c47d80) 0
+ primary-for QWidget (0x0x7fe221bc8930)
+ QPaintDevice (0x0x7fe221c47de0) 16
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 488)
+
+Class QItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemDelegate::QPrivateSignal (0x0x7fe221cbf360) 0 empty
+
+Vtable for QItemDelegate
+QItemDelegate::_ZTV13QItemDelegate: 28 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QItemDelegate)
+16 (int (*)(...))QItemDelegate::metaObject
+24 (int (*)(...))QItemDelegate::qt_metacast
+32 (int (*)(...))QItemDelegate::qt_metacall
+40 (int (*)(...))QItemDelegate::~QItemDelegate
+48 (int (*)(...))QItemDelegate::~QItemDelegate
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QItemDelegate::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QItemDelegate::paint
+120 (int (*)(...))QItemDelegate::sizeHint
+128 (int (*)(...))QItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QItemDelegate::setEditorData
+152 (int (*)(...))QItemDelegate::setModelData
+160 (int (*)(...))QItemDelegate::updateEditorGeometry
+168 (int (*)(...))QItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+192 (int (*)(...))QItemDelegate::drawDisplay
+200 (int (*)(...))QItemDelegate::drawDecoration
+208 (int (*)(...))QItemDelegate::drawFocus
+216 (int (*)(...))QItemDelegate::drawCheck
+
+Class QItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QItemDelegate (0x0x7fe221ba3af8) 0
+ vptr=((& QItemDelegate::_ZTV13QItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7fe221ba3b60) 0
+ primary-for QItemDelegate (0x0x7fe221ba3af8)
+ QObject (0x0x7fe221cbf300) 0
+ primary-for QAbstractItemDelegate (0x0x7fe221ba3b60)
+
+Vtable for QItemEditorCreatorBase
+QItemEditorCreatorBase::_ZTV22QItemEditorCreatorBase: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QItemEditorCreatorBase)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QItemEditorCreatorBase
+ size=8 align=8
+ base size=8 base align=8
+QItemEditorCreatorBase (0x0x7fe221cbf4e0) 0 nearly-empty
+ vptr=((& QItemEditorCreatorBase::_ZTV22QItemEditorCreatorBase) + 16)
+
+Vtable for QItemEditorFactory
+QItemEditorFactory::_ZTV18QItemEditorFactory: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QItemEditorFactory)
+16 (int (*)(...))QItemEditorFactory::~QItemEditorFactory
+24 (int (*)(...))QItemEditorFactory::~QItemEditorFactory
+32 (int (*)(...))QItemEditorFactory::createEditor
+40 (int (*)(...))QItemEditorFactory::valuePropertyName
+
+Class QItemEditorFactory
+ size=16 align=8
+ base size=16 base align=8
+QItemEditorFactory (0x0x7fe221cbf840) 0
+ vptr=((& QItemEditorFactory::_ZTV18QItemEditorFactory) + 16)
+
+Class QKeySequenceEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QKeySequenceEdit::QPrivateSignal (0x0x7fe221cbfd20) 0 empty
+
+Vtable for QKeySequenceEdit
+QKeySequenceEdit::_ZTV16QKeySequenceEdit: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QKeySequenceEdit)
+16 (int (*)(...))QKeySequenceEdit::metaObject
+24 (int (*)(...))QKeySequenceEdit::qt_metacast
+32 (int (*)(...))QKeySequenceEdit::qt_metacall
+40 (int (*)(...))QKeySequenceEdit::~QKeySequenceEdit
+48 (int (*)(...))QKeySequenceEdit::~QKeySequenceEdit
+56 (int (*)(...))QKeySequenceEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QKeySequenceEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QKeySequenceEdit::keyPressEvent
+216 (int (*)(...))QKeySequenceEdit::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI16QKeySequenceEdit)
+448 (int (*)(...))QKeySequenceEdit::_ZThn16_N16QKeySequenceEditD1Ev
+456 (int (*)(...))QKeySequenceEdit::_ZThn16_N16QKeySequenceEditD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QKeySequenceEdit
+ size=40 align=8
+ base size=40 base align=8
+QKeySequenceEdit (0x0x7fe221ba3c98) 0
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 16)
+ QWidget (0x0x7fe221bc8c40) 0
+ primary-for QKeySequenceEdit (0x0x7fe221ba3c98)
+ QObject (0x0x7fe221cbfc60) 0
+ primary-for QWidget (0x0x7fe221bc8c40)
+ QPaintDevice (0x0x7fe221cbfcc0) 16
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 448)
+
+Class QLabel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLabel::QPrivateSignal (0x0x7fe221cbff60) 0 empty
+
+Vtable for QLabel
+QLabel::_ZTV6QLabel: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QLabel)
+16 (int (*)(...))QLabel::metaObject
+24 (int (*)(...))QLabel::qt_metacast
+32 (int (*)(...))QLabel::qt_metacall
+40 (int (*)(...))QLabel::~QLabel
+48 (int (*)(...))QLabel::~QLabel
+56 (int (*)(...))QLabel::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLabel::sizeHint
+136 (int (*)(...))QLabel::minimumSizeHint
+144 (int (*)(...))QLabel::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QLabel::mousePressEvent
+176 (int (*)(...))QLabel::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QLabel::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QLabel::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QLabel::focusInEvent
+232 (int (*)(...))QLabel::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLabel::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QLabel::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QLabel::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QLabel::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI6QLabel)
+456 (int (*)(...))QLabel::_ZThn16_N6QLabelD1Ev
+464 (int (*)(...))QLabel::_ZThn16_N6QLabelD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLabel
+ size=40 align=8
+ base size=40 base align=8
+QLabel (0x0x7fe221ba3d00) 0
+ vptr=((& QLabel::_ZTV6QLabel) + 16)
+ QFrame (0x0x7fe221ba3d68) 0
+ primary-for QLabel (0x0x7fe221ba3d00)
+ QWidget (0x0x7fe221bc8cb0) 0
+ primary-for QFrame (0x0x7fe221ba3d68)
+ QObject (0x0x7fe221cbfea0) 0
+ primary-for QWidget (0x0x7fe221bc8cb0)
+ QPaintDevice (0x0x7fe221cbff00) 16
+ vptr=((& QLabel::_ZTV6QLabel) + 456)
+
+Class QLCDNumber::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLCDNumber::QPrivateSignal (0x0x7fe22193e2a0) 0 empty
+
+Vtable for QLCDNumber
+QLCDNumber::_ZTV10QLCDNumber: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QLCDNumber)
+16 (int (*)(...))QLCDNumber::metaObject
+24 (int (*)(...))QLCDNumber::qt_metacast
+32 (int (*)(...))QLCDNumber::qt_metacall
+40 (int (*)(...))QLCDNumber::~QLCDNumber
+48 (int (*)(...))QLCDNumber::~QLCDNumber
+56 (int (*)(...))QLCDNumber::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLCDNumber::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLCDNumber::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI10QLCDNumber)
+456 (int (*)(...))QLCDNumber::_ZThn16_N10QLCDNumberD1Ev
+464 (int (*)(...))QLCDNumber::_ZThn16_N10QLCDNumberD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLCDNumber
+ size=40 align=8
+ base size=40 base align=8
+QLCDNumber (0x0x7fe221ba3dd0) 0
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 16)
+ QFrame (0x0x7fe221ba3e38) 0
+ primary-for QLCDNumber (0x0x7fe221ba3dd0)
+ QWidget (0x0x7fe221bc8d20) 0
+ primary-for QFrame (0x0x7fe221ba3e38)
+ QObject (0x0x7fe22193e1e0) 0
+ primary-for QWidget (0x0x7fe221bc8d20)
+ QPaintDevice (0x0x7fe22193e240) 16
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 456)
+
+Class QListView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListView::QPrivateSignal (0x0x7fe22193e660) 0 empty
+
+Vtable for QListView
+QListView::_ZTV9QListView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QListView)
+16 (int (*)(...))QListView::metaObject
+24 (int (*)(...))QListView::qt_metacast
+32 (int (*)(...))QListView::qt_metacall
+40 (int (*)(...))QListView::~QListView
+48 (int (*)(...))QListView::~QListView
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI9QListView)
+800 (int (*)(...))QListView::_ZThn16_N9QListViewD1Ev
+808 (int (*)(...))QListView::_ZThn16_N9QListViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QListView
+ size=40 align=8
+ base size=40 base align=8
+QListView (0x0x7fe221ba3ea0) 0
+ vptr=((& QListView::_ZTV9QListView) + 16)
+ QAbstractItemView (0x0x7fe221ba3f08) 0
+ primary-for QListView (0x0x7fe221ba3ea0)
+ QAbstractScrollArea (0x0x7fe221ba3f70) 0
+ primary-for QAbstractItemView (0x0x7fe221ba3f08)
+ QFrame (0x0x7fe221956000) 0
+ primary-for QAbstractScrollArea (0x0x7fe221ba3f70)
+ QWidget (0x0x7fe2219440e0) 0
+ primary-for QFrame (0x0x7fe221956000)
+ QObject (0x0x7fe22193e5a0) 0
+ primary-for QWidget (0x0x7fe2219440e0)
+ QPaintDevice (0x0x7fe22193e600) 16
+ vptr=((& QListView::_ZTV9QListView) + 800)
+
+Vtable for QListWidgetItem
+QListWidgetItem::_ZTV15QListWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QListWidgetItem)
+16 (int (*)(...))QListWidgetItem::~QListWidgetItem
+24 (int (*)(...))QListWidgetItem::~QListWidgetItem
+32 (int (*)(...))QListWidgetItem::clone
+40 (int (*)(...))QListWidgetItem::data
+48 (int (*)(...))QListWidgetItem::setData
+56 (int (*)(...))QListWidgetItem::operator<
+64 (int (*)(...))QListWidgetItem::read
+72 (int (*)(...))QListWidgetItem::write
+
+Class QListWidgetItem
+ size=40 align=8
+ base size=36 base align=8
+QListWidgetItem (0x0x7fe22193eba0) 0
+ vptr=((& QListWidgetItem::_ZTV15QListWidgetItem) + 16)
+
+Class QListWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListWidget::QPrivateSignal (0x0x7fe221993660) 0 empty
+
+Vtable for QListWidget
+QListWidget::_ZTV11QListWidget: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QListWidget)
+16 (int (*)(...))QListWidget::metaObject
+24 (int (*)(...))QListWidget::qt_metacast
+32 (int (*)(...))QListWidget::qt_metacall
+40 (int (*)(...))QListWidget::~QListWidget
+48 (int (*)(...))QListWidget::~QListWidget
+56 (int (*)(...))QListWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QListWidget::setModel
+480 (int (*)(...))QListWidget::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))QListWidget::mimeTypes
+792 (int (*)(...))QListWidget::mimeData
+800 (int (*)(...))QListWidget::dropMimeData
+808 (int (*)(...))QListWidget::supportedDropActions
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI11QListWidget)
+832 (int (*)(...))QListWidget::_ZThn16_N11QListWidgetD1Ev
+840 (int (*)(...))QListWidget::_ZThn16_N11QListWidgetD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QListWidget
+ size=40 align=8
+ base size=40 base align=8
+QListWidget (0x0x7fe221956068) 0
+ vptr=((& QListWidget::_ZTV11QListWidget) + 16)
+ QListView (0x0x7fe2219560d0) 0
+ primary-for QListWidget (0x0x7fe221956068)
+ QAbstractItemView (0x0x7fe221956138) 0
+ primary-for QListView (0x0x7fe2219560d0)
+ QAbstractScrollArea (0x0x7fe2219561a0) 0
+ primary-for QAbstractItemView (0x0x7fe221956138)
+ QFrame (0x0x7fe221956208) 0
+ primary-for QAbstractScrollArea (0x0x7fe2219561a0)
+ QWidget (0x0x7fe221944700) 0
+ primary-for QFrame (0x0x7fe221956208)
+ QObject (0x0x7fe2219935a0) 0
+ primary-for QWidget (0x0x7fe221944700)
+ QPaintDevice (0x0x7fe221993600) 16
+ vptr=((& QListWidget::_ZTV11QListWidget) + 832)
+
+Class QMainWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMainWindow::QPrivateSignal (0x0x7fe221993b40) 0 empty
+
+Vtable for QMainWindow
+QMainWindow::_ZTV11QMainWindow: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMainWindow)
+16 (int (*)(...))QMainWindow::metaObject
+24 (int (*)(...))QMainWindow::qt_metacast
+32 (int (*)(...))QMainWindow::qt_metacall
+40 (int (*)(...))QMainWindow::~QMainWindow
+48 (int (*)(...))QMainWindow::~QMainWindow
+56 (int (*)(...))QMainWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QMainWindow::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QMainWindow::createPopupMenu
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QMainWindow)
+456 (int (*)(...))QMainWindow::_ZThn16_N11QMainWindowD1Ev
+464 (int (*)(...))QMainWindow::_ZThn16_N11QMainWindowD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMainWindow
+ size=40 align=8
+ base size=40 base align=8
+QMainWindow (0x0x7fe221956270) 0
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 16)
+ QWidget (0x0x7fe221944770) 0
+ primary-for QMainWindow (0x0x7fe221956270)
+ QObject (0x0x7fe221993a80) 0
+ primary-for QWidget (0x0x7fe221944770)
+ QPaintDevice (0x0x7fe221993ae0) 16
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 456)
+
+Class QMdiArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiArea::QPrivateSignal (0x0x7fe2219ee240) 0 empty
+
+Vtable for QMdiArea
+QMdiArea::_ZTV8QMdiArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QMdiArea)
+16 (int (*)(...))QMdiArea::metaObject
+24 (int (*)(...))QMdiArea::qt_metacast
+32 (int (*)(...))QMdiArea::qt_metacall
+40 (int (*)(...))QMdiArea::~QMdiArea
+48 (int (*)(...))QMdiArea::~QMdiArea
+56 (int (*)(...))QMdiArea::event
+64 (int (*)(...))QMdiArea::eventFilter
+72 (int (*)(...))QMdiArea::timerEvent
+80 (int (*)(...))QMdiArea::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMdiArea::sizeHint
+136 (int (*)(...))QMdiArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QMdiArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMdiArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QMdiArea::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QMdiArea::setupViewport
+448 (int (*)(...))QMdiArea::viewportEvent
+456 (int (*)(...))QMdiArea::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI8QMdiArea)
+488 (int (*)(...))QMdiArea::_ZThn16_N8QMdiAreaD1Ev
+496 (int (*)(...))QMdiArea::_ZThn16_N8QMdiAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMdiArea
+ size=40 align=8
+ base size=40 base align=8
+QMdiArea (0x0x7fe221956410) 0
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 16)
+ QAbstractScrollArea (0x0x7fe221956478) 0
+ primary-for QMdiArea (0x0x7fe221956410)
+ QFrame (0x0x7fe2219564e0) 0
+ primary-for QAbstractScrollArea (0x0x7fe221956478)
+ QWidget (0x0x7fe221944a80) 0
+ primary-for QFrame (0x0x7fe2219564e0)
+ QObject (0x0x7fe2219ee180) 0
+ primary-for QWidget (0x0x7fe221944a80)
+ QPaintDevice (0x0x7fe2219ee1e0) 16
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 488)
+
+Class QMdiSubWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiSubWindow::QPrivateSignal (0x0x7fe2219ee900) 0 empty
+
+Vtable for QMdiSubWindow
+QMdiSubWindow::_ZTV13QMdiSubWindow: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QMdiSubWindow)
+16 (int (*)(...))QMdiSubWindow::metaObject
+24 (int (*)(...))QMdiSubWindow::qt_metacast
+32 (int (*)(...))QMdiSubWindow::qt_metacall
+40 (int (*)(...))QMdiSubWindow::~QMdiSubWindow
+48 (int (*)(...))QMdiSubWindow::~QMdiSubWindow
+56 (int (*)(...))QMdiSubWindow::event
+64 (int (*)(...))QMdiSubWindow::eventFilter
+72 (int (*)(...))QMdiSubWindow::timerEvent
+80 (int (*)(...))QMdiSubWindow::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMdiSubWindow::sizeHint
+136 (int (*)(...))QMdiSubWindow::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMdiSubWindow::mousePressEvent
+176 (int (*)(...))QMdiSubWindow::mouseReleaseEvent
+184 (int (*)(...))QMdiSubWindow::mouseDoubleClickEvent
+192 (int (*)(...))QMdiSubWindow::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMdiSubWindow::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QMdiSubWindow::focusInEvent
+232 (int (*)(...))QMdiSubWindow::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QMdiSubWindow::leaveEvent
+256 (int (*)(...))QMdiSubWindow::paintEvent
+264 (int (*)(...))QMdiSubWindow::moveEvent
+272 (int (*)(...))QMdiSubWindow::resizeEvent
+280 (int (*)(...))QMdiSubWindow::closeEvent
+288 (int (*)(...))QMdiSubWindow::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QMdiSubWindow::showEvent
+352 (int (*)(...))QMdiSubWindow::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMdiSubWindow::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI13QMdiSubWindow)
+448 (int (*)(...))QMdiSubWindow::_ZThn16_N13QMdiSubWindowD1Ev
+456 (int (*)(...))QMdiSubWindow::_ZThn16_N13QMdiSubWindowD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMdiSubWindow
+ size=40 align=8
+ base size=40 base align=8
+QMdiSubWindow (0x0x7fe221956680) 0
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 16)
+ QWidget (0x0x7fe221944e00) 0
+ primary-for QMdiSubWindow (0x0x7fe221956680)
+ QObject (0x0x7fe2219ee840) 0
+ primary-for QWidget (0x0x7fe221944e00)
+ QPaintDevice (0x0x7fe2219ee8a0) 16
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 448)
+
+Class QMenu::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenu::QPrivateSignal (0x0x7fe2219eee40) 0 empty
+
+Vtable for QMenu
+QMenu::_ZTV5QMenu: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QMenu)
+16 (int (*)(...))QMenu::metaObject
+24 (int (*)(...))QMenu::qt_metacast
+32 (int (*)(...))QMenu::qt_metacall
+40 (int (*)(...))QMenu::~QMenu
+48 (int (*)(...))QMenu::~QMenu
+56 (int (*)(...))QMenu::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QMenu::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMenu::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMenu::mousePressEvent
+176 (int (*)(...))QMenu::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QMenu::mouseMoveEvent
+200 (int (*)(...))QMenu::wheelEvent
+208 (int (*)(...))QMenu::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QMenu::enterEvent
+248 (int (*)(...))QMenu::leaveEvent
+256 (int (*)(...))QMenu::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QMenu::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QMenu::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMenu::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QMenu::focusNextPrevChild
+432 (int (*)(...))QMenu::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI5QMenu)
+456 (int (*)(...))QMenu::_ZThn16_N5QMenuD1Ev
+464 (int (*)(...))QMenu::_ZThn16_N5QMenuD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMenu
+ size=40 align=8
+ base size=40 base align=8
+QMenu (0x0x7fe221956820) 0
+ vptr=((& QMenu::_ZTV5QMenu) + 16)
+ QWidget (0x0x7fe221a4c070) 0
+ primary-for QMenu (0x0x7fe221956820)
+ QObject (0x0x7fe2219eed80) 0
+ primary-for QWidget (0x0x7fe221a4c070)
+ QPaintDevice (0x0x7fe2219eede0) 16
+ vptr=((& QMenu::_ZTV5QMenu) + 456)
+
+Class QMenuBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenuBar::QPrivateSignal (0x0x7fe221aa5240) 0 empty
+
+Vtable for QMenuBar
+QMenuBar::_ZTV8QMenuBar: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QMenuBar)
+16 (int (*)(...))QMenuBar::metaObject
+24 (int (*)(...))QMenuBar::qt_metacast
+32 (int (*)(...))QMenuBar::qt_metacall
+40 (int (*)(...))QMenuBar::~QMenuBar
+48 (int (*)(...))QMenuBar::~QMenuBar
+56 (int (*)(...))QMenuBar::event
+64 (int (*)(...))QMenuBar::eventFilter
+72 (int (*)(...))QMenuBar::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QMenuBar::setVisible
+128 (int (*)(...))QMenuBar::sizeHint
+136 (int (*)(...))QMenuBar::minimumSizeHint
+144 (int (*)(...))QMenuBar::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMenuBar::mousePressEvent
+176 (int (*)(...))QMenuBar::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QMenuBar::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMenuBar::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QMenuBar::focusInEvent
+232 (int (*)(...))QMenuBar::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QMenuBar::leaveEvent
+256 (int (*)(...))QMenuBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMenuBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QMenuBar::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMenuBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QMenuBar::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI8QMenuBar)
+456 (int (*)(...))QMenuBar::_ZThn16_N8QMenuBarD1Ev
+464 (int (*)(...))QMenuBar::_ZThn16_N8QMenuBarD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMenuBar
+ size=40 align=8
+ base size=40 base align=8
+QMenuBar (0x0x7fe221956888) 0
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 16)
+ QWidget (0x0x7fe221a4c0e0) 0
+ primary-for QMenuBar (0x0x7fe221956888)
+ QObject (0x0x7fe221aa5180) 0
+ primary-for QWidget (0x0x7fe221a4c0e0)
+ QPaintDevice (0x0x7fe221aa51e0) 16
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 456)
+
+Class QMessageBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMessageBox::QPrivateSignal (0x0x7fe221aa5540) 0 empty
+
+Vtable for QMessageBox
+QMessageBox::_ZTV11QMessageBox: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMessageBox)
+16 (int (*)(...))QMessageBox::metaObject
+24 (int (*)(...))QMessageBox::qt_metacast
+32 (int (*)(...))QMessageBox::qt_metacall
+40 (int (*)(...))QMessageBox::~QMessageBox
+48 (int (*)(...))QMessageBox::~QMessageBox
+56 (int (*)(...))QMessageBox::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMessageBox::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMessageBox::resizeEvent
+280 (int (*)(...))QMessageBox::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QMessageBox::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMessageBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QMessageBox)
+488 (int (*)(...))QMessageBox::_ZThn16_N11QMessageBoxD1Ev
+496 (int (*)(...))QMessageBox::_ZThn16_N11QMessageBoxD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMessageBox
+ size=40 align=8
+ base size=40 base align=8
+QMessageBox (0x0x7fe2219568f0) 0
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 16)
+ QDialog (0x0x7fe221956958) 0
+ primary-for QMessageBox (0x0x7fe2219568f0)
+ QWidget (0x0x7fe221a4c150) 0
+ primary-for QDialog (0x0x7fe221956958)
+ QObject (0x0x7fe221aa5480) 0
+ primary-for QWidget (0x0x7fe221a4c150)
+ QPaintDevice (0x0x7fe221aa54e0) 16
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 488)
+
+Class QTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextEdit::QPrivateSignal (0x0x7fe221aa5d80) 0 empty
+
+Class QTextEdit::ExtraSelection
+ size=24 align=8
+ base size=24 base align=8
+QTextEdit::ExtraSelection (0x0x7fe221aa5de0) 0
+
+Vtable for QTextEdit
+QTextEdit::_ZTV9QTextEdit: 74 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTextEdit)
+16 (int (*)(...))QTextEdit::metaObject
+24 (int (*)(...))QTextEdit::qt_metacast
+32 (int (*)(...))QTextEdit::qt_metacall
+40 (int (*)(...))QTextEdit::~QTextEdit
+48 (int (*)(...))QTextEdit::~QTextEdit
+56 (int (*)(...))QTextEdit::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTextEdit::mousePressEvent
+176 (int (*)(...))QTextEdit::mouseReleaseEvent
+184 (int (*)(...))QTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QTextEdit::mouseMoveEvent
+200 (int (*)(...))QTextEdit::wheelEvent
+208 (int (*)(...))QTextEdit::keyPressEvent
+216 (int (*)(...))QTextEdit::keyReleaseEvent
+224 (int (*)(...))QTextEdit::focusInEvent
+232 (int (*)(...))QTextEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTextEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QTextEdit::dragEnterEvent
+320 (int (*)(...))QTextEdit::dragMoveEvent
+328 (int (*)(...))QTextEdit::dragLeaveEvent
+336 (int (*)(...))QTextEdit::dropEvent
+344 (int (*)(...))QTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QTextEdit::inputMethodEvent
+416 (int (*)(...))QTextEdit::inputMethodQuery
+424 (int (*)(...))QTextEdit::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QTextEdit::loadResource
+480 (int (*)(...))QTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QTextEdit::canInsertFromMimeData
+496 (int (*)(...))QTextEdit::insertFromMimeData
+504 (int (*)(...))QTextEdit::doSetTextCursor
+512 (int (*)(...))-16
+520 (int (*)(...))(& _ZTI9QTextEdit)
+528 (int (*)(...))QTextEdit::_ZThn16_N9QTextEditD1Ev
+536 (int (*)(...))QTextEdit::_ZThn16_N9QTextEditD0Ev
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTextEdit
+ size=40 align=8
+ base size=40 base align=8
+QTextEdit (0x0x7fe221956af8) 0
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 16)
+ QAbstractScrollArea (0x0x7fe221956b60) 0
+ primary-for QTextEdit (0x0x7fe221956af8)
+ QFrame (0x0x7fe221956bc8) 0
+ primary-for QAbstractScrollArea (0x0x7fe221956b60)
+ QWidget (0x0x7fe221ac04d0) 0
+ primary-for QFrame (0x0x7fe221956bc8)
+ QObject (0x0x7fe221aa5cc0) 0
+ primary-for QWidget (0x0x7fe221ac04d0)
+ QPaintDevice (0x0x7fe221aa5d20) 16
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 528)
+
+Class QPlainTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextEdit::QPrivateSignal (0x0x7fe22173d660) 0 empty
+
+Vtable for QPlainTextEdit
+QPlainTextEdit::_ZTV14QPlainTextEdit: 74 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QPlainTextEdit)
+16 (int (*)(...))QPlainTextEdit::metaObject
+24 (int (*)(...))QPlainTextEdit::qt_metacast
+32 (int (*)(...))QPlainTextEdit::qt_metacall
+40 (int (*)(...))QPlainTextEdit::~QPlainTextEdit
+48 (int (*)(...))QPlainTextEdit::~QPlainTextEdit
+56 (int (*)(...))QPlainTextEdit::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QPlainTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QPlainTextEdit::mousePressEvent
+176 (int (*)(...))QPlainTextEdit::mouseReleaseEvent
+184 (int (*)(...))QPlainTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QPlainTextEdit::mouseMoveEvent
+200 (int (*)(...))QPlainTextEdit::wheelEvent
+208 (int (*)(...))QPlainTextEdit::keyPressEvent
+216 (int (*)(...))QPlainTextEdit::keyReleaseEvent
+224 (int (*)(...))QPlainTextEdit::focusInEvent
+232 (int (*)(...))QPlainTextEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QPlainTextEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QPlainTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QPlainTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QPlainTextEdit::dragEnterEvent
+320 (int (*)(...))QPlainTextEdit::dragMoveEvent
+328 (int (*)(...))QPlainTextEdit::dragLeaveEvent
+336 (int (*)(...))QPlainTextEdit::dropEvent
+344 (int (*)(...))QPlainTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QPlainTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QPlainTextEdit::inputMethodEvent
+416 (int (*)(...))QPlainTextEdit::inputMethodQuery
+424 (int (*)(...))QPlainTextEdit::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QPlainTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QPlainTextEdit::loadResource
+480 (int (*)(...))QPlainTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QPlainTextEdit::canInsertFromMimeData
+496 (int (*)(...))QPlainTextEdit::insertFromMimeData
+504 (int (*)(...))QPlainTextEdit::doSetTextCursor
+512 (int (*)(...))-16
+520 (int (*)(...))(& _ZTI14QPlainTextEdit)
+528 (int (*)(...))QPlainTextEdit::_ZThn16_N14QPlainTextEditD1Ev
+536 (int (*)(...))QPlainTextEdit::_ZThn16_N14QPlainTextEditD0Ev
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QPlainTextEdit
+ size=40 align=8
+ base size=40 base align=8
+QPlainTextEdit (0x0x7fe221956d68) 0
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 16)
+ QAbstractScrollArea (0x0x7fe221956dd0) 0
+ primary-for QPlainTextEdit (0x0x7fe221956d68)
+ QFrame (0x0x7fe221956e38) 0
+ primary-for QAbstractScrollArea (0x0x7fe221956dd0)
+ QWidget (0x0x7fe221ac0850) 0
+ primary-for QFrame (0x0x7fe221956e38)
+ QObject (0x0x7fe22173d5a0) 0
+ primary-for QWidget (0x0x7fe221ac0850)
+ QPaintDevice (0x0x7fe22173d600) 16
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 528)
+
+Class QPlainTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextDocumentLayout::QPrivateSignal (0x0x7fe22173dba0) 0 empty
+
+Vtable for QPlainTextDocumentLayout
+QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QPlainTextDocumentLayout)
+16 (int (*)(...))QPlainTextDocumentLayout::metaObject
+24 (int (*)(...))QPlainTextDocumentLayout::qt_metacast
+32 (int (*)(...))QPlainTextDocumentLayout::qt_metacall
+40 (int (*)(...))QPlainTextDocumentLayout::~QPlainTextDocumentLayout
+48 (int (*)(...))QPlainTextDocumentLayout::~QPlainTextDocumentLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPlainTextDocumentLayout::draw
+120 (int (*)(...))QPlainTextDocumentLayout::hitTest
+128 (int (*)(...))QPlainTextDocumentLayout::pageCount
+136 (int (*)(...))QPlainTextDocumentLayout::documentSize
+144 (int (*)(...))QPlainTextDocumentLayout::frameBoundingRect
+152 (int (*)(...))QPlainTextDocumentLayout::blockBoundingRect
+160 (int (*)(...))QPlainTextDocumentLayout::documentChanged
+168 (int (*)(...))QAbstractTextDocumentLayout::resizeInlineObject
+176 (int (*)(...))QAbstractTextDocumentLayout::positionInlineObject
+184 (int (*)(...))QAbstractTextDocumentLayout::drawInlineObject
+
+Class QPlainTextDocumentLayout
+ size=16 align=8
+ base size=16 base align=8
+QPlainTextDocumentLayout (0x0x7fe221956ea0) 0
+ vptr=((& QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout) + 16)
+ QAbstractTextDocumentLayout (0x0x7fe221956f08) 0
+ primary-for QPlainTextDocumentLayout (0x0x7fe221956ea0)
+ QObject (0x0x7fe22173db40) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7fe221956f08)
+
+Class QProgressBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressBar::QPrivateSignal (0x0x7fe22173dde0) 0 empty
+
+Vtable for QProgressBar
+QProgressBar::_ZTV12QProgressBar: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QProgressBar)
+16 (int (*)(...))QProgressBar::metaObject
+24 (int (*)(...))QProgressBar::qt_metacast
+32 (int (*)(...))QProgressBar::qt_metacall
+40 (int (*)(...))QProgressBar::~QProgressBar
+48 (int (*)(...))QProgressBar::~QProgressBar
+56 (int (*)(...))QProgressBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QProgressBar::sizeHint
+136 (int (*)(...))QProgressBar::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QProgressBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QProgressBar::text
+440 (int (*)(...))QProgressBar::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI12QProgressBar)
+464 (int (*)(...))QProgressBar::_ZThn16_N12QProgressBarD1Ev
+472 (int (*)(...))QProgressBar::_ZThn16_N12QProgressBarD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QProgressBar
+ size=40 align=8
+ base size=40 base align=8
+QProgressBar (0x0x7fe221956f70) 0
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 16)
+ QWidget (0x0x7fe221ac09a0) 0
+ primary-for QProgressBar (0x0x7fe221956f70)
+ QObject (0x0x7fe22173dd20) 0
+ primary-for QWidget (0x0x7fe221ac09a0)
+ QPaintDevice (0x0x7fe22173dd80) 16
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 464)
+
+Class QProgressDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressDialog::QPrivateSignal (0x0x7fe2217b1120) 0 empty
+
+Vtable for QProgressDialog
+QProgressDialog::_ZTV15QProgressDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QProgressDialog)
+16 (int (*)(...))QProgressDialog::metaObject
+24 (int (*)(...))QProgressDialog::qt_metacast
+32 (int (*)(...))QProgressDialog::qt_metacall
+40 (int (*)(...))QProgressDialog::~QProgressDialog
+48 (int (*)(...))QProgressDialog::~QProgressDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QProgressDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QProgressDialog::resizeEvent
+280 (int (*)(...))QProgressDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QProgressDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QProgressDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI15QProgressDialog)
+488 (int (*)(...))QProgressDialog::_ZThn16_N15QProgressDialogD1Ev
+496 (int (*)(...))QProgressDialog::_ZThn16_N15QProgressDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QProgressDialog
+ size=40 align=8
+ base size=40 base align=8
+QProgressDialog (0x0x7fe2217b3000) 0
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 16)
+ QDialog (0x0x7fe2217b3068) 0
+ primary-for QProgressDialog (0x0x7fe2217b3000)
+ QWidget (0x0x7fe221ac0af0) 0
+ primary-for QDialog (0x0x7fe2217b3068)
+ QObject (0x0x7fe2217b1060) 0
+ primary-for QWidget (0x0x7fe221ac0af0)
+ QPaintDevice (0x0x7fe2217b10c0) 16
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 488)
+
+Class QProxyStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProxyStyle::QPrivateSignal (0x0x7fe2217b1300) 0 empty
+
+Vtable for QProxyStyle
+QProxyStyle::_ZTV11QProxyStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QProxyStyle)
+16 (int (*)(...))QProxyStyle::metaObject
+24 (int (*)(...))QProxyStyle::qt_metacast
+32 (int (*)(...))QProxyStyle::qt_metacall
+40 (int (*)(...))QProxyStyle::~QProxyStyle
+48 (int (*)(...))QProxyStyle::~QProxyStyle
+56 (int (*)(...))QProxyStyle::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QProxyStyle::polish
+120 (int (*)(...))QProxyStyle::unpolish
+128 (int (*)(...))QProxyStyle::polish
+136 (int (*)(...))QProxyStyle::unpolish
+144 (int (*)(...))QProxyStyle::polish
+152 (int (*)(...))QProxyStyle::itemTextRect
+160 (int (*)(...))QProxyStyle::itemPixmapRect
+168 (int (*)(...))QProxyStyle::drawItemText
+176 (int (*)(...))QProxyStyle::drawItemPixmap
+184 (int (*)(...))QProxyStyle::standardPalette
+192 (int (*)(...))QProxyStyle::drawPrimitive
+200 (int (*)(...))QProxyStyle::drawControl
+208 (int (*)(...))QProxyStyle::subElementRect
+216 (int (*)(...))QProxyStyle::drawComplexControl
+224 (int (*)(...))QProxyStyle::hitTestComplexControl
+232 (int (*)(...))QProxyStyle::subControlRect
+240 (int (*)(...))QProxyStyle::pixelMetric
+248 (int (*)(...))QProxyStyle::sizeFromContents
+256 (int (*)(...))QProxyStyle::styleHint
+264 (int (*)(...))QProxyStyle::standardPixmap
+272 (int (*)(...))QProxyStyle::standardIcon
+280 (int (*)(...))QProxyStyle::generatedIconPixmap
+288 (int (*)(...))QProxyStyle::layoutSpacing
+
+Class QProxyStyle
+ size=16 align=8
+ base size=16 base align=8
+QProxyStyle (0x0x7fe2217b30d0) 0
+ vptr=((& QProxyStyle::_ZTV11QProxyStyle) + 16)
+ QCommonStyle (0x0x7fe2217b3138) 0
+ primary-for QProxyStyle (0x0x7fe2217b30d0)
+ QStyle (0x0x7fe2217b31a0) 0
+ primary-for QCommonStyle (0x0x7fe2217b3138)
+ QObject (0x0x7fe2217b12a0) 0
+ primary-for QStyle (0x0x7fe2217b31a0)
+
+Class QRadioButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRadioButton::QPrivateSignal (0x0x7fe2217b1540) 0 empty
+
+Vtable for QRadioButton
+QRadioButton::_ZTV12QRadioButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QRadioButton)
+16 (int (*)(...))QRadioButton::metaObject
+24 (int (*)(...))QRadioButton::qt_metacast
+32 (int (*)(...))QRadioButton::qt_metacall
+40 (int (*)(...))QRadioButton::~QRadioButton
+48 (int (*)(...))QRadioButton::~QRadioButton
+56 (int (*)(...))QRadioButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QRadioButton::sizeHint
+136 (int (*)(...))QRadioButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QRadioButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QRadioButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QRadioButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QRadioButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI12QRadioButton)
+480 (int (*)(...))QRadioButton::_ZThn16_N12QRadioButtonD1Ev
+488 (int (*)(...))QRadioButton::_ZThn16_N12QRadioButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QRadioButton
+ size=40 align=8
+ base size=40 base align=8
+QRadioButton (0x0x7fe2217b3208) 0
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 16)
+ QAbstractButton (0x0x7fe2217b3270) 0
+ primary-for QRadioButton (0x0x7fe2217b3208)
+ QWidget (0x0x7fe221ac0b60) 0
+ primary-for QAbstractButton (0x0x7fe2217b3270)
+ QObject (0x0x7fe2217b1480) 0
+ primary-for QWidget (0x0x7fe221ac0b60)
+ QPaintDevice (0x0x7fe2217b14e0) 16
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 480)
+
+Class QScrollBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollBar::QPrivateSignal (0x0x7fe2217b1780) 0 empty
+
+Vtable for QScrollBar
+QScrollBar::_ZTV10QScrollBar: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QScrollBar)
+16 (int (*)(...))QScrollBar::metaObject
+24 (int (*)(...))QScrollBar::qt_metacast
+32 (int (*)(...))QScrollBar::qt_metacall
+40 (int (*)(...))QScrollBar::~QScrollBar
+48 (int (*)(...))QScrollBar::~QScrollBar
+56 (int (*)(...))QScrollBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QScrollBar::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QScrollBar::mousePressEvent
+176 (int (*)(...))QScrollBar::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QScrollBar::mouseMoveEvent
+200 (int (*)(...))QScrollBar::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QScrollBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QScrollBar::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QScrollBar::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QScrollBar::sliderChange
+440 (int (*)(...))QScrollBar::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI10QScrollBar)
+464 (int (*)(...))QScrollBar::_ZThn16_N10QScrollBarD1Ev
+472 (int (*)(...))QScrollBar::_ZThn16_N10QScrollBarD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QScrollBar
+ size=40 align=8
+ base size=40 base align=8
+QScrollBar (0x0x7fe2217b32d8) 0
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 16)
+ QAbstractSlider (0x0x7fe2217b3340) 0
+ primary-for QScrollBar (0x0x7fe2217b32d8)
+ QWidget (0x0x7fe221ac0bd0) 0
+ primary-for QAbstractSlider (0x0x7fe2217b3340)
+ QObject (0x0x7fe2217b16c0) 0
+ primary-for QWidget (0x0x7fe221ac0bd0)
+ QPaintDevice (0x0x7fe2217b1720) 16
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 464)
+
+Vtable for QScrollerProperties
+QScrollerProperties::_ZTV19QScrollerProperties: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollerProperties)
+16 (int (*)(...))QScrollerProperties::~QScrollerProperties
+24 (int (*)(...))QScrollerProperties::~QScrollerProperties
+
+Class QScrollerProperties
+ size=16 align=8
+ base size=16 base align=8
+QScrollerProperties (0x0x7fe2217b1900) 0
+ vptr=((& QScrollerProperties::_ZTV19QScrollerProperties) + 16)
+
+Class QScroller::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScroller::QPrivateSignal (0x0x7fe2217b1c60) 0 empty
+
+Vtable for QScroller
+QScroller::_ZTV9QScroller: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QScroller)
+16 (int (*)(...))QScroller::metaObject
+24 (int (*)(...))QScroller::qt_metacast
+32 (int (*)(...))QScroller::qt_metacall
+40 (int (*)(...))QScroller::~QScroller
+48 (int (*)(...))QScroller::~QScroller
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QScroller
+ size=24 align=8
+ base size=24 base align=8
+QScroller (0x0x7fe2217b33a8) 0
+ vptr=((& QScroller::_ZTV9QScroller) + 16)
+ QObject (0x0x7fe2217b1c00) 0
+ primary-for QScroller (0x0x7fe2217b33a8)
+
+Class QSizeGrip::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSizeGrip::QPrivateSignal (0x0x7fe2217b1f60) 0 empty
+
+Vtable for QSizeGrip
+QSizeGrip::_ZTV9QSizeGrip: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSizeGrip)
+16 (int (*)(...))QSizeGrip::metaObject
+24 (int (*)(...))QSizeGrip::qt_metacast
+32 (int (*)(...))QSizeGrip::qt_metacall
+40 (int (*)(...))QSizeGrip::~QSizeGrip
+48 (int (*)(...))QSizeGrip::~QSizeGrip
+56 (int (*)(...))QSizeGrip::event
+64 (int (*)(...))QSizeGrip::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QSizeGrip::setVisible
+128 (int (*)(...))QSizeGrip::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSizeGrip::mousePressEvent
+176 (int (*)(...))QSizeGrip::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSizeGrip::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSizeGrip::paintEvent
+264 (int (*)(...))QSizeGrip::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QSizeGrip::showEvent
+352 (int (*)(...))QSizeGrip::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI9QSizeGrip)
+448 (int (*)(...))QSizeGrip::_ZThn16_N9QSizeGripD1Ev
+456 (int (*)(...))QSizeGrip::_ZThn16_N9QSizeGripD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSizeGrip
+ size=40 align=8
+ base size=40 base align=8
+QSizeGrip (0x0x7fe2217b3410) 0
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 16)
+ QWidget (0x0x7fe2217f7f50) 0
+ primary-for QSizeGrip (0x0x7fe2217b3410)
+ QObject (0x0x7fe2217b1ea0) 0
+ primary-for QWidget (0x0x7fe2217f7f50)
+ QPaintDevice (0x0x7fe2217b1f00) 16
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 448)
+
+Class QSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSpinBox::QPrivateSignal (0x0x7fe22182a1e0) 0 empty
+
+Vtable for QSpinBox
+QSpinBox::_ZTV8QSpinBox: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSpinBox)
+16 (int (*)(...))QSpinBox::metaObject
+24 (int (*)(...))QSpinBox::qt_metacast
+32 (int (*)(...))QSpinBox::qt_metacall
+40 (int (*)(...))QSpinBox::~QSpinBox
+48 (int (*)(...))QSpinBox::~QSpinBox
+56 (int (*)(...))QSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QSpinBox::validate
+440 (int (*)(...))QSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))QSpinBox::valueFromText
+488 (int (*)(...))QSpinBox::textFromValue
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI8QSpinBox)
+512 (int (*)(...))QSpinBox::_ZThn16_N8QSpinBoxD1Ev
+520 (int (*)(...))QSpinBox::_ZThn16_N8QSpinBoxD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QSpinBox (0x0x7fe2217b3478) 0
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 16)
+ QAbstractSpinBox (0x0x7fe2217b34e0) 0
+ primary-for QSpinBox (0x0x7fe2217b3478)
+ QWidget (0x0x7fe2217f7930) 0
+ primary-for QAbstractSpinBox (0x0x7fe2217b34e0)
+ QObject (0x0x7fe22182a120) 0
+ primary-for QWidget (0x0x7fe2217f7930)
+ QPaintDevice (0x0x7fe22182a180) 16
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 512)
+
+Class QDoubleSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleSpinBox::QPrivateSignal (0x0x7fe22182a420) 0 empty
+
+Vtable for QDoubleSpinBox
+QDoubleSpinBox::_ZTV14QDoubleSpinBox: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDoubleSpinBox)
+16 (int (*)(...))QDoubleSpinBox::metaObject
+24 (int (*)(...))QDoubleSpinBox::qt_metacast
+32 (int (*)(...))QDoubleSpinBox::qt_metacall
+40 (int (*)(...))QDoubleSpinBox::~QDoubleSpinBox
+48 (int (*)(...))QDoubleSpinBox::~QDoubleSpinBox
+56 (int (*)(...))QAbstractSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDoubleSpinBox::validate
+440 (int (*)(...))QDoubleSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))QDoubleSpinBox::valueFromText
+488 (int (*)(...))QDoubleSpinBox::textFromValue
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI14QDoubleSpinBox)
+512 (int (*)(...))QDoubleSpinBox::_ZThn16_N14QDoubleSpinBoxD1Ev
+520 (int (*)(...))QDoubleSpinBox::_ZThn16_N14QDoubleSpinBoxD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDoubleSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QDoubleSpinBox (0x0x7fe2217b3548) 0
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 16)
+ QAbstractSpinBox (0x0x7fe2217b35b0) 0
+ primary-for QDoubleSpinBox (0x0x7fe2217b3548)
+ QWidget (0x0x7fe2217f7a10) 0
+ primary-for QAbstractSpinBox (0x0x7fe2217b35b0)
+ QObject (0x0x7fe22182a360) 0
+ primary-for QWidget (0x0x7fe2217f7a10)
+ QPaintDevice (0x0x7fe22182a3c0) 16
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 512)
+
+Class QSplashScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplashScreen::QPrivateSignal (0x0x7fe22182a660) 0 empty
+
+Vtable for QSplashScreen
+QSplashScreen::_ZTV13QSplashScreen: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSplashScreen)
+16 (int (*)(...))QSplashScreen::metaObject
+24 (int (*)(...))QSplashScreen::qt_metacast
+32 (int (*)(...))QSplashScreen::qt_metacall
+40 (int (*)(...))QSplashScreen::~QSplashScreen
+48 (int (*)(...))QSplashScreen::~QSplashScreen
+56 (int (*)(...))QSplashScreen::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSplashScreen::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QSplashScreen::drawContents
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI13QSplashScreen)
+456 (int (*)(...))QSplashScreen::_ZThn16_N13QSplashScreenD1Ev
+464 (int (*)(...))QSplashScreen::_ZThn16_N13QSplashScreenD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplashScreen
+ size=40 align=8
+ base size=40 base align=8
+QSplashScreen (0x0x7fe2217b3618) 0
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 16)
+ QWidget (0x0x7fe221848000) 0
+ primary-for QSplashScreen (0x0x7fe2217b3618)
+ QObject (0x0x7fe22182a5a0) 0
+ primary-for QWidget (0x0x7fe221848000)
+ QPaintDevice (0x0x7fe22182a600) 16
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 456)
+
+Class QSplitter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitter::QPrivateSignal (0x0x7fe22182a8a0) 0 empty
+
+Vtable for QSplitter
+QSplitter::_ZTV9QSplitter: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSplitter)
+16 (int (*)(...))QSplitter::metaObject
+24 (int (*)(...))QSplitter::qt_metacast
+32 (int (*)(...))QSplitter::qt_metacall
+40 (int (*)(...))QSplitter::~QSplitter
+48 (int (*)(...))QSplitter::~QSplitter
+56 (int (*)(...))QSplitter::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QSplitter::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSplitter::sizeHint
+136 (int (*)(...))QSplitter::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QSplitter::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QSplitter::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QSplitter::createHandle
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI9QSplitter)
+464 (int (*)(...))QSplitter::_ZThn16_N9QSplitterD1Ev
+472 (int (*)(...))QSplitter::_ZThn16_N9QSplitterD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplitter
+ size=40 align=8
+ base size=40 base align=8
+QSplitter (0x0x7fe2217b3680) 0
+ vptr=((& QSplitter::_ZTV9QSplitter) + 16)
+ QFrame (0x0x7fe2217b36e8) 0
+ primary-for QSplitter (0x0x7fe2217b3680)
+ QWidget (0x0x7fe221848070) 0
+ primary-for QFrame (0x0x7fe2217b36e8)
+ QObject (0x0x7fe22182a7e0) 0
+ primary-for QWidget (0x0x7fe221848070)
+ QPaintDevice (0x0x7fe22182a840) 16
+ vptr=((& QSplitter::_ZTV9QSplitter) + 464)
+
+Class QSplitterHandle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitterHandle::QPrivateSignal (0x0x7fe22182aae0) 0 empty
+
+Vtable for QSplitterHandle
+QSplitterHandle::_ZTV15QSplitterHandle: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSplitterHandle)
+16 (int (*)(...))QSplitterHandle::metaObject
+24 (int (*)(...))QSplitterHandle::qt_metacast
+32 (int (*)(...))QSplitterHandle::qt_metacall
+40 (int (*)(...))QSplitterHandle::~QSplitterHandle
+48 (int (*)(...))QSplitterHandle::~QSplitterHandle
+56 (int (*)(...))QSplitterHandle::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSplitterHandle::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSplitterHandle::mousePressEvent
+176 (int (*)(...))QSplitterHandle::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSplitterHandle::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSplitterHandle::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QSplitterHandle::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI15QSplitterHandle)
+448 (int (*)(...))QSplitterHandle::_ZThn16_N15QSplitterHandleD1Ev
+456 (int (*)(...))QSplitterHandle::_ZThn16_N15QSplitterHandleD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplitterHandle
+ size=40 align=8
+ base size=40 base align=8
+QSplitterHandle (0x0x7fe2217b3750) 0
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 16)
+ QWidget (0x0x7fe2218480e0) 0
+ primary-for QSplitterHandle (0x0x7fe2217b3750)
+ QObject (0x0x7fe22182aa20) 0
+ primary-for QWidget (0x0x7fe2218480e0)
+ QPaintDevice (0x0x7fe22182aa80) 16
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 448)
+
+Class QStackedLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedLayout::QPrivateSignal (0x0x7fe22182ad20) 0 empty
+
+Vtable for QStackedLayout
+QStackedLayout::_ZTV14QStackedLayout: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QStackedLayout)
+16 (int (*)(...))QStackedLayout::metaObject
+24 (int (*)(...))QStackedLayout::qt_metacast
+32 (int (*)(...))QStackedLayout::qt_metacall
+40 (int (*)(...))QStackedLayout::~QStackedLayout
+48 (int (*)(...))QStackedLayout::~QStackedLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLayout::spacing
+120 (int (*)(...))QLayout::setSpacing
+128 (int (*)(...))QLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QStackedLayout::addItem
+152 (int (*)(...))QLayout::expandingDirections
+160 (int (*)(...))QStackedLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QStackedLayout::setGeometry
+184 (int (*)(...))QStackedLayout::itemAt
+192 (int (*)(...))QStackedLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QStackedLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QStackedLayout::sizeHint
+264 (int (*)(...))QStackedLayout::hasHeightForWidth
+272 (int (*)(...))QStackedLayout::heightForWidth
+280 (int (*)(...))-16
+288 (int (*)(...))(& _ZTI14QStackedLayout)
+296 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayoutD1Ev
+304 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayoutD0Ev
+312 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout8sizeHintEv
+320 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout11minimumSizeEv
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+336 (int (*)(...))QLayout::_ZThn16_NK7QLayout19expandingDirectionsEv
+344 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayout11setGeometryERK5QRect
+352 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+368 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout17hasHeightForWidthEv
+376 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout14heightForWidthEi
+384 (int (*)(...))QLayoutItem::minimumHeightForWidth
+392 (int (*)(...))QLayout::_ZThn16_N7QLayout10invalidateEv
+400 (int (*)(...))QLayoutItem::widget
+408 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+416 (int (*)(...))QLayoutItem::spacerItem
+424 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QStackedLayout
+ size=32 align=8
+ base size=28 base align=8
+QStackedLayout (0x0x7fe2217b37b8) 0
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 16)
+ QLayout (0x0x7fe221848150) 0
+ primary-for QStackedLayout (0x0x7fe2217b37b8)
+ QObject (0x0x7fe22182ac60) 0
+ primary-for QLayout (0x0x7fe221848150)
+ QLayoutItem (0x0x7fe22182acc0) 16
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 296)
+
+Class QStackedWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedWidget::QPrivateSignal (0x0x7fe22188b060) 0 empty
+
+Vtable for QStackedWidget
+QStackedWidget::_ZTV14QStackedWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QStackedWidget)
+16 (int (*)(...))QStackedWidget::metaObject
+24 (int (*)(...))QStackedWidget::qt_metacast
+32 (int (*)(...))QStackedWidget::qt_metacall
+40 (int (*)(...))QStackedWidget::~QStackedWidget
+48 (int (*)(...))QStackedWidget::~QStackedWidget
+56 (int (*)(...))QStackedWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI14QStackedWidget)
+456 (int (*)(...))QStackedWidget::_ZThn16_N14QStackedWidgetD1Ev
+464 (int (*)(...))QStackedWidget::_ZThn16_N14QStackedWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QStackedWidget
+ size=40 align=8
+ base size=40 base align=8
+QStackedWidget (0x0x7fe2217b3820) 0
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 16)
+ QFrame (0x0x7fe2217b3888) 0
+ primary-for QStackedWidget (0x0x7fe2217b3820)
+ QWidget (0x0x7fe2218482a0) 0
+ primary-for QFrame (0x0x7fe2217b3888)
+ QObject (0x0x7fe22182af60) 0
+ primary-for QWidget (0x0x7fe2218482a0)
+ QPaintDevice (0x0x7fe22188b000) 16
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 456)
+
+Class QStatusBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStatusBar::QPrivateSignal (0x0x7fe22188b2a0) 0 empty
+
+Vtable for QStatusBar
+QStatusBar::_ZTV10QStatusBar: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QStatusBar)
+16 (int (*)(...))QStatusBar::metaObject
+24 (int (*)(...))QStatusBar::qt_metacast
+32 (int (*)(...))QStatusBar::qt_metacall
+40 (int (*)(...))QStatusBar::~QStatusBar
+48 (int (*)(...))QStatusBar::~QStatusBar
+56 (int (*)(...))QStatusBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QStatusBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QStatusBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QStatusBar::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI10QStatusBar)
+448 (int (*)(...))QStatusBar::_ZThn16_N10QStatusBarD1Ev
+456 (int (*)(...))QStatusBar::_ZThn16_N10QStatusBarD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QStatusBar
+ size=40 align=8
+ base size=40 base align=8
+QStatusBar (0x0x7fe2217b38f0) 0
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 16)
+ QWidget (0x0x7fe221848310) 0
+ primary-for QStatusBar (0x0x7fe2217b38f0)
+ QObject (0x0x7fe22188b1e0) 0
+ primary-for QWidget (0x0x7fe221848310)
+ QPaintDevice (0x0x7fe22188b240) 16
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 448)
+
+Class QStyledItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyledItemDelegate::QPrivateSignal (0x0x7fe22188b480) 0 empty
+
+Vtable for QStyledItemDelegate
+QStyledItemDelegate::_ZTV19QStyledItemDelegate: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QStyledItemDelegate)
+16 (int (*)(...))QStyledItemDelegate::metaObject
+24 (int (*)(...))QStyledItemDelegate::qt_metacast
+32 (int (*)(...))QStyledItemDelegate::qt_metacall
+40 (int (*)(...))QStyledItemDelegate::~QStyledItemDelegate
+48 (int (*)(...))QStyledItemDelegate::~QStyledItemDelegate
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QStyledItemDelegate::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStyledItemDelegate::paint
+120 (int (*)(...))QStyledItemDelegate::sizeHint
+128 (int (*)(...))QStyledItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QStyledItemDelegate::setEditorData
+152 (int (*)(...))QStyledItemDelegate::setModelData
+160 (int (*)(...))QStyledItemDelegate::updateEditorGeometry
+168 (int (*)(...))QStyledItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+192 (int (*)(...))QStyledItemDelegate::displayText
+200 (int (*)(...))QStyledItemDelegate::initStyleOption
+
+Class QStyledItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QStyledItemDelegate (0x0x7fe2217b3958) 0
+ vptr=((& QStyledItemDelegate::_ZTV19QStyledItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7fe2217b39c0) 0
+ primary-for QStyledItemDelegate (0x0x7fe2217b3958)
+ QObject (0x0x7fe22188b420) 0
+ primary-for QAbstractItemDelegate (0x0x7fe2217b39c0)
+
+Class QStyleFactory
+ size=1 align=1
+ base size=0 base align=1
+QStyleFactory (0x0x7fe22188b600) 0 empty
+
+Class QStylePainter
+ size=24 align=8
+ base size=24 base align=8
+QStylePainter (0x0x7fe2217b3a28) 0
+ QPainter (0x0x7fe22188b660) 0
+
+Class QStylePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStylePlugin::QPrivateSignal (0x0x7fe22188bf00) 0 empty
+
+Vtable for QStylePlugin
+QStylePlugin::_ZTV12QStylePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QStylePlugin)
+16 (int (*)(...))QStylePlugin::metaObject
+24 (int (*)(...))QStylePlugin::qt_metacast
+32 (int (*)(...))QStylePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QStylePlugin
+ size=16 align=8
+ base size=16 base align=8
+QStylePlugin (0x0x7fe2217b3a90) 0
+ vptr=((& QStylePlugin::_ZTV12QStylePlugin) + 16)
+ QObject (0x0x7fe22188bea0) 0
+ primary-for QStylePlugin (0x0x7fe2217b3a90)
+
+Class QSystemTrayIcon::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSystemTrayIcon::QPrivateSignal (0x0x7fe2218cb060) 0 empty
+
+Vtable for QSystemTrayIcon
+QSystemTrayIcon::_ZTV15QSystemTrayIcon: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSystemTrayIcon)
+16 (int (*)(...))QSystemTrayIcon::metaObject
+24 (int (*)(...))QSystemTrayIcon::qt_metacast
+32 (int (*)(...))QSystemTrayIcon::qt_metacall
+40 (int (*)(...))QSystemTrayIcon::~QSystemTrayIcon
+48 (int (*)(...))QSystemTrayIcon::~QSystemTrayIcon
+56 (int (*)(...))QSystemTrayIcon::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSystemTrayIcon
+ size=16 align=8
+ base size=16 base align=8
+QSystemTrayIcon (0x0x7fe2217b3af8) 0
+ vptr=((& QSystemTrayIcon::_ZTV15QSystemTrayIcon) + 16)
+ QObject (0x0x7fe2218cb000) 0
+ primary-for QSystemTrayIcon (0x0x7fe2217b3af8)
+
+Class QTableView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableView::QPrivateSignal (0x0x7fe2218cb360) 0 empty
+
+Vtable for QTableView
+QTableView::_ZTV10QTableView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTableView)
+16 (int (*)(...))QTableView::metaObject
+24 (int (*)(...))QTableView::qt_metacast
+32 (int (*)(...))QTableView::qt_metacall
+40 (int (*)(...))QTableView::~QTableView
+48 (int (*)(...))QTableView::~QTableView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTableView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTableView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QTableView::scrollContentsBy
+464 (int (*)(...))QTableView::viewportSizeHint
+472 (int (*)(...))QTableView::setModel
+480 (int (*)(...))QTableView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QTableView::visualRect
+504 (int (*)(...))QTableView::scrollTo
+512 (int (*)(...))QTableView::indexAt
+520 (int (*)(...))QTableView::sizeHintForRow
+528 (int (*)(...))QTableView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QTableView::setRootIndex
+560 (int (*)(...))QTableView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QTableView::selectionChanged
+608 (int (*)(...))QTableView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTableView::updateGeometries
+640 (int (*)(...))QTableView::verticalScrollbarAction
+648 (int (*)(...))QTableView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTableView::moveCursor
+704 (int (*)(...))QTableView::horizontalOffset
+712 (int (*)(...))QTableView::verticalOffset
+720 (int (*)(...))QTableView::isIndexHidden
+728 (int (*)(...))QTableView::setSelection
+736 (int (*)(...))QTableView::visualRegionForSelection
+744 (int (*)(...))QTableView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QTableView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI10QTableView)
+800 (int (*)(...))QTableView::_ZThn16_N10QTableViewD1Ev
+808 (int (*)(...))QTableView::_ZThn16_N10QTableViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTableView
+ size=40 align=8
+ base size=40 base align=8
+QTableView (0x0x7fe2217b3b60) 0
+ vptr=((& QTableView::_ZTV10QTableView) + 16)
+ QAbstractItemView (0x0x7fe2217b3bc8) 0
+ primary-for QTableView (0x0x7fe2217b3b60)
+ QAbstractScrollArea (0x0x7fe2217b3c30) 0
+ primary-for QAbstractItemView (0x0x7fe2217b3bc8)
+ QFrame (0x0x7fe2217b3c98) 0
+ primary-for QAbstractScrollArea (0x0x7fe2217b3c30)
+ QWidget (0x0x7fe221848850) 0
+ primary-for QFrame (0x0x7fe2217b3c98)
+ QObject (0x0x7fe2218cb2a0) 0
+ primary-for QWidget (0x0x7fe221848850)
+ QPaintDevice (0x0x7fe2218cb300) 16
+ vptr=((& QTableView::_ZTV10QTableView) + 800)
+
+Class QTableWidgetSelectionRange
+ size=16 align=4
+ base size=16 base align=4
+QTableWidgetSelectionRange (0x0x7fe2218cb4e0) 0
+
+Vtable for QTableWidgetItem
+QTableWidgetItem::_ZTV16QTableWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QTableWidgetItem)
+16 (int (*)(...))QTableWidgetItem::~QTableWidgetItem
+24 (int (*)(...))QTableWidgetItem::~QTableWidgetItem
+32 (int (*)(...))QTableWidgetItem::clone
+40 (int (*)(...))QTableWidgetItem::data
+48 (int (*)(...))QTableWidgetItem::setData
+56 (int (*)(...))QTableWidgetItem::operator<
+64 (int (*)(...))QTableWidgetItem::read
+72 (int (*)(...))QTableWidgetItem::write
+
+Class QTableWidgetItem
+ size=64 align=8
+ base size=60 base align=8
+QTableWidgetItem (0x0x7fe2218cb900) 0
+ vptr=((& QTableWidgetItem::_ZTV16QTableWidgetItem) + 16)
+
+Class QTableWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableWidget::QPrivateSignal (0x0x7fe221917c60) 0 empty
+
+Vtable for QTableWidget
+QTableWidget::_ZTV12QTableWidget: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTableWidget)
+16 (int (*)(...))QTableWidget::metaObject
+24 (int (*)(...))QTableWidget::qt_metacast
+32 (int (*)(...))QTableWidget::qt_metacall
+40 (int (*)(...))QTableWidget::~QTableWidget
+48 (int (*)(...))QTableWidget::~QTableWidget
+56 (int (*)(...))QTableWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTableView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTableView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QTableWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QTableView::scrollContentsBy
+464 (int (*)(...))QTableView::viewportSizeHint
+472 (int (*)(...))QTableWidget::setModel
+480 (int (*)(...))QTableView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QTableView::visualRect
+504 (int (*)(...))QTableView::scrollTo
+512 (int (*)(...))QTableView::indexAt
+520 (int (*)(...))QTableView::sizeHintForRow
+528 (int (*)(...))QTableView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QTableView::setRootIndex
+560 (int (*)(...))QTableView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QTableView::selectionChanged
+608 (int (*)(...))QTableView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTableView::updateGeometries
+640 (int (*)(...))QTableView::verticalScrollbarAction
+648 (int (*)(...))QTableView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTableView::moveCursor
+704 (int (*)(...))QTableView::horizontalOffset
+712 (int (*)(...))QTableView::verticalOffset
+720 (int (*)(...))QTableView::isIndexHidden
+728 (int (*)(...))QTableView::setSelection
+736 (int (*)(...))QTableView::visualRegionForSelection
+744 (int (*)(...))QTableView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QTableView::initViewItemOption
+784 (int (*)(...))QTableWidget::mimeTypes
+792 (int (*)(...))QTableWidget::mimeData
+800 (int (*)(...))QTableWidget::dropMimeData
+808 (int (*)(...))QTableWidget::supportedDropActions
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI12QTableWidget)
+832 (int (*)(...))QTableWidget::_ZThn16_N12QTableWidgetD1Ev
+840 (int (*)(...))QTableWidget::_ZThn16_N12QTableWidgetD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTableWidget
+ size=40 align=8
+ base size=40 base align=8
+QTableWidget (0x0x7fe2219145b0) 0
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 16)
+ QTableView (0x0x7fe221914618) 0
+ primary-for QTableWidget (0x0x7fe2219145b0)
+ QAbstractItemView (0x0x7fe221914680) 0
+ primary-for QTableView (0x0x7fe221914618)
+ QAbstractScrollArea (0x0x7fe2219146e8) 0
+ primary-for QAbstractItemView (0x0x7fe221914680)
+ QFrame (0x0x7fe221914750) 0
+ primary-for QAbstractScrollArea (0x0x7fe2219146e8)
+ QWidget (0x0x7fe221944b60) 0
+ primary-for QFrame (0x0x7fe221914750)
+ QObject (0x0x7fe221917ba0) 0
+ primary-for QWidget (0x0x7fe221944b60)
+ QPaintDevice (0x0x7fe221917c00) 16
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 832)
+
+Class QTextBrowser::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBrowser::QPrivateSignal (0x0x7fe22159e000) 0 empty
+
+Vtable for QTextBrowser
+QTextBrowser::_ZTV12QTextBrowser: 79 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTextBrowser)
+16 (int (*)(...))QTextBrowser::metaObject
+24 (int (*)(...))QTextBrowser::qt_metacast
+32 (int (*)(...))QTextBrowser::qt_metacall
+40 (int (*)(...))QTextBrowser::~QTextBrowser
+48 (int (*)(...))QTextBrowser::~QTextBrowser
+56 (int (*)(...))QTextBrowser::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTextBrowser::mousePressEvent
+176 (int (*)(...))QTextBrowser::mouseReleaseEvent
+184 (int (*)(...))QTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QTextBrowser::mouseMoveEvent
+200 (int (*)(...))QTextEdit::wheelEvent
+208 (int (*)(...))QTextBrowser::keyPressEvent
+216 (int (*)(...))QTextEdit::keyReleaseEvent
+224 (int (*)(...))QTextEdit::focusInEvent
+232 (int (*)(...))QTextBrowser::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTextBrowser::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QTextEdit::dragEnterEvent
+320 (int (*)(...))QTextEdit::dragMoveEvent
+328 (int (*)(...))QTextEdit::dragLeaveEvent
+336 (int (*)(...))QTextEdit::dropEvent
+344 (int (*)(...))QTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QTextEdit::inputMethodEvent
+416 (int (*)(...))QTextEdit::inputMethodQuery
+424 (int (*)(...))QTextBrowser::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QTextBrowser::loadResource
+480 (int (*)(...))QTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QTextEdit::canInsertFromMimeData
+496 (int (*)(...))QTextEdit::insertFromMimeData
+504 (int (*)(...))QTextEdit::doSetTextCursor
+512 (int (*)(...))QTextBrowser::backward
+520 (int (*)(...))QTextBrowser::forward
+528 (int (*)(...))QTextBrowser::home
+536 (int (*)(...))QTextBrowser::reload
+544 (int (*)(...))QTextBrowser::doSetSource
+552 (int (*)(...))-16
+560 (int (*)(...))(& _ZTI12QTextBrowser)
+568 (int (*)(...))QTextBrowser::_ZThn16_N12QTextBrowserD1Ev
+576 (int (*)(...))QTextBrowser::_ZThn16_N12QTextBrowserD0Ev
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+592 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+600 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+608 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+616 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+624 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTextBrowser
+ size=40 align=8
+ base size=40 base align=8
+QTextBrowser (0x0x7fe2219147b8) 0
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 16)
+ QTextEdit (0x0x7fe221914820) 0
+ primary-for QTextBrowser (0x0x7fe2219147b8)
+ QAbstractScrollArea (0x0x7fe221914888) 0
+ primary-for QTextEdit (0x0x7fe221914820)
+ QFrame (0x0x7fe2219148f0) 0
+ primary-for QAbstractScrollArea (0x0x7fe221914888)
+ QWidget (0x0x7fe221848a80) 0
+ primary-for QFrame (0x0x7fe2219148f0)
+ QObject (0x0x7fe221917f60) 0
+ primary-for QWidget (0x0x7fe221848a80)
+ QPaintDevice (0x0x7fe221917180) 16
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 568)
+
+Class QToolBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBar::QPrivateSignal (0x0x7fe22159e240) 0 empty
+
+Vtable for QToolBar
+QToolBar::_ZTV8QToolBar: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QToolBar)
+16 (int (*)(...))QToolBar::metaObject
+24 (int (*)(...))QToolBar::qt_metacast
+32 (int (*)(...))QToolBar::qt_metacall
+40 (int (*)(...))QToolBar::~QToolBar
+48 (int (*)(...))QToolBar::~QToolBar
+56 (int (*)(...))QToolBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QToolBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QToolBar::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QToolBar::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI8QToolBar)
+456 (int (*)(...))QToolBar::_ZThn16_N8QToolBarD1Ev
+464 (int (*)(...))QToolBar::_ZThn16_N8QToolBarD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolBar
+ size=40 align=8
+ base size=40 base align=8
+QToolBar (0x0x7fe221914958) 0
+ vptr=((& QToolBar::_ZTV8QToolBar) + 16)
+ QWidget (0x0x7fe221848af0) 0
+ primary-for QToolBar (0x0x7fe221914958)
+ QObject (0x0x7fe22159e180) 0
+ primary-for QWidget (0x0x7fe221848af0)
+ QPaintDevice (0x0x7fe22159e1e0) 16
+ vptr=((& QToolBar::_ZTV8QToolBar) + 456)
+
+Class QToolBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBox::QPrivateSignal (0x0x7fe22159e6c0) 0 empty
+
+Vtable for QToolBox
+QToolBox::_ZTV8QToolBox: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QToolBox)
+16 (int (*)(...))QToolBox::metaObject
+24 (int (*)(...))QToolBox::qt_metacast
+32 (int (*)(...))QToolBox::qt_metacall
+40 (int (*)(...))QToolBox::~QToolBox
+48 (int (*)(...))QToolBox::~QToolBox
+56 (int (*)(...))QToolBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QToolBox::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QToolBox::itemInserted
+448 (int (*)(...))QToolBox::itemRemoved
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI8QToolBox)
+472 (int (*)(...))QToolBox::_ZThn16_N8QToolBoxD1Ev
+480 (int (*)(...))QToolBox::_ZThn16_N8QToolBoxD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolBox
+ size=40 align=8
+ base size=40 base align=8
+QToolBox (0x0x7fe2219149c0) 0
+ vptr=((& QToolBox::_ZTV8QToolBox) + 16)
+ QFrame (0x0x7fe221914a28) 0
+ primary-for QToolBox (0x0x7fe2219149c0)
+ QWidget (0x0x7fe221848b60) 0
+ primary-for QFrame (0x0x7fe221914a28)
+ QObject (0x0x7fe22159e600) 0
+ primary-for QWidget (0x0x7fe221848b60)
+ QPaintDevice (0x0x7fe22159e660) 16
+ vptr=((& QToolBox::_ZTV8QToolBox) + 472)
+
+Class QToolButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolButton::QPrivateSignal (0x0x7fe22159ea20) 0 empty
+
+Vtable for QToolButton
+QToolButton::_ZTV11QToolButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QToolButton)
+16 (int (*)(...))QToolButton::metaObject
+24 (int (*)(...))QToolButton::qt_metacast
+32 (int (*)(...))QToolButton::qt_metacall
+40 (int (*)(...))QToolButton::~QToolButton
+48 (int (*)(...))QToolButton::~QToolButton
+56 (int (*)(...))QToolButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QToolButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QToolButton::sizeHint
+136 (int (*)(...))QToolButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QToolButton::mousePressEvent
+176 (int (*)(...))QToolButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QToolButton::enterEvent
+248 (int (*)(...))QToolButton::leaveEvent
+256 (int (*)(...))QToolButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QToolButton::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QToolButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QToolButton::nextCheckState
+456 (int (*)(...))QToolButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI11QToolButton)
+480 (int (*)(...))QToolButton::_ZThn16_N11QToolButtonD1Ev
+488 (int (*)(...))QToolButton::_ZThn16_N11QToolButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolButton
+ size=40 align=8
+ base size=40 base align=8
+QToolButton (0x0x7fe221914a90) 0
+ vptr=((& QToolButton::_ZTV11QToolButton) + 16)
+ QAbstractButton (0x0x7fe221914af8) 0
+ primary-for QToolButton (0x0x7fe221914a90)
+ QWidget (0x0x7fe221848bd0) 0
+ primary-for QAbstractButton (0x0x7fe221914af8)
+ QObject (0x0x7fe22159e960) 0
+ primary-for QWidget (0x0x7fe221848bd0)
+ QPaintDevice (0x0x7fe22159e9c0) 16
+ vptr=((& QToolButton::_ZTV11QToolButton) + 480)
+
+Class QToolTip
+ size=1 align=1
+ base size=0 base align=1
+QToolTip (0x0x7fe22159ec60) 0 empty
+
+Class QTreeView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeView::QPrivateSignal (0x0x7fe22159ede0) 0 empty
+
+Vtable for QTreeView
+QTreeView::_ZTV9QTreeView: 110 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTreeView)
+16 (int (*)(...))QTreeView::metaObject
+24 (int (*)(...))QTreeView::qt_metacast
+32 (int (*)(...))QTreeView::qt_metacall
+40 (int (*)(...))QTreeView::~QTreeView
+48 (int (*)(...))QTreeView::~QTreeView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeView::setModel
+480 (int (*)(...))QTreeView::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))-16
+808 (int (*)(...))(& _ZTI9QTreeView)
+816 (int (*)(...))QTreeView::_ZThn16_N9QTreeViewD1Ev
+824 (int (*)(...))QTreeView::_ZThn16_N9QTreeViewD0Ev
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTreeView
+ size=40 align=8
+ base size=40 base align=8
+QTreeView (0x0x7fe221914b60) 0
+ vptr=((& QTreeView::_ZTV9QTreeView) + 16)
+ QAbstractItemView (0x0x7fe221914bc8) 0
+ primary-for QTreeView (0x0x7fe221914b60)
+ QAbstractScrollArea (0x0x7fe221914c30) 0
+ primary-for QAbstractItemView (0x0x7fe221914bc8)
+ QFrame (0x0x7fe221914c98) 0
+ primary-for QAbstractScrollArea (0x0x7fe221914c30)
+ QWidget (0x0x7fe221848d90) 0
+ primary-for QFrame (0x0x7fe221914c98)
+ QObject (0x0x7fe22159ed20) 0
+ primary-for QWidget (0x0x7fe221848d90)
+ QPaintDevice (0x0x7fe22159ed80) 16
+ vptr=((& QTreeView::_ZTV9QTreeView) + 816)
+
+Class QTreeWidgetItemIterator
+ size=24 align=8
+ base size=20 base align=8
+QTreeWidgetItemIterator (0x0x7fe22159ef60) 0
+
+Vtable for QTreeWidgetItem
+QTreeWidgetItem::_ZTV15QTreeWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QTreeWidgetItem)
+16 (int (*)(...))QTreeWidgetItem::~QTreeWidgetItem
+24 (int (*)(...))QTreeWidgetItem::~QTreeWidgetItem
+32 (int (*)(...))QTreeWidgetItem::clone
+40 (int (*)(...))QTreeWidgetItem::data
+48 (int (*)(...))QTreeWidgetItem::setData
+56 (int (*)(...))QTreeWidgetItem::operator<
+64 (int (*)(...))QTreeWidgetItem::read
+72 (int (*)(...))QTreeWidgetItem::write
+
+Class QTreeWidgetItem
+ size=96 align=8
+ base size=92 base align=8
+QTreeWidgetItem (0x0x7fe221617660) 0
+ vptr=((& QTreeWidgetItem::_ZTV15QTreeWidgetItem) + 16)
+
+Class QTreeWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeWidget::QPrivateSignal (0x0x7fe22132a480) 0 empty
+
+Vtable for QTreeWidget
+QTreeWidget::_ZTV11QTreeWidget: 114 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTreeWidget)
+16 (int (*)(...))QTreeWidget::metaObject
+24 (int (*)(...))QTreeWidget::qt_metacast
+32 (int (*)(...))QTreeWidget::qt_metacall
+40 (int (*)(...))QTreeWidget::~QTreeWidget
+48 (int (*)(...))QTreeWidget::~QTreeWidget
+56 (int (*)(...))QTreeWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QTreeWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeWidget::setModel
+480 (int (*)(...))QTreeWidget::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))QTreeWidget::mimeTypes
+808 (int (*)(...))QTreeWidget::mimeData
+816 (int (*)(...))QTreeWidget::dropMimeData
+824 (int (*)(...))QTreeWidget::supportedDropActions
+832 (int (*)(...))-16
+840 (int (*)(...))(& _ZTI11QTreeWidget)
+848 (int (*)(...))QTreeWidget::_ZThn16_N11QTreeWidgetD1Ev
+856 (int (*)(...))QTreeWidget::_ZThn16_N11QTreeWidgetD0Ev
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+896 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+904 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTreeWidget
+ size=40 align=8
+ base size=40 base align=8
+QTreeWidget (0x0x7fe2216706e8) 0
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 16)
+ QTreeView (0x0x7fe221670f70) 0
+ primary-for QTreeWidget (0x0x7fe2216706e8)
+ QAbstractItemView (0x0x7fe221332000) 0
+ primary-for QTreeView (0x0x7fe221670f70)
+ QAbstractScrollArea (0x0x7fe221332068) 0
+ primary-for QAbstractItemView (0x0x7fe221332000)
+ QFrame (0x0x7fe2213320d0) 0
+ primary-for QAbstractScrollArea (0x0x7fe221332068)
+ QWidget (0x0x7fe221612b60) 0
+ primary-for QFrame (0x0x7fe2213320d0)
+ QObject (0x0x7fe22132a3c0) 0
+ primary-for QWidget (0x0x7fe221612b60)
+ QPaintDevice (0x0x7fe22132a420) 16
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 848)
+
+Class QUndoView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoView::QPrivateSignal (0x0x7fe22132a8a0) 0 empty
+
+Vtable for QUndoView
+QUndoView::_ZTV9QUndoView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QUndoView)
+16 (int (*)(...))QUndoView::metaObject
+24 (int (*)(...))QUndoView::qt_metacast
+32 (int (*)(...))QUndoView::qt_metacall
+40 (int (*)(...))QUndoView::~QUndoView
+48 (int (*)(...))QUndoView::~QUndoView
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI9QUndoView)
+800 (int (*)(...))QUndoView::_ZThn16_N9QUndoViewD1Ev
+808 (int (*)(...))QUndoView::_ZThn16_N9QUndoViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QUndoView
+ size=40 align=8
+ base size=40 base align=8
+QUndoView (0x0x7fe221332138) 0
+ vptr=((& QUndoView::_ZTV9QUndoView) + 16)
+ QListView (0x0x7fe2213321a0) 0
+ primary-for QUndoView (0x0x7fe221332138)
+ QAbstractItemView (0x0x7fe221332208) 0
+ primary-for QListView (0x0x7fe2213321a0)
+ QAbstractScrollArea (0x0x7fe221332270) 0
+ primary-for QAbstractItemView (0x0x7fe221332208)
+ QFrame (0x0x7fe2213322d8) 0
+ primary-for QAbstractScrollArea (0x0x7fe221332270)
+ QWidget (0x0x7fe221612bd0) 0
+ primary-for QFrame (0x0x7fe2213322d8)
+ QObject (0x0x7fe22132a7e0) 0
+ primary-for QWidget (0x0x7fe221612bd0)
+ QPaintDevice (0x0x7fe22132a840) 16
+ vptr=((& QUndoView::_ZTV9QUndoView) + 800)
+
+Class QWhatsThis
+ size=1 align=1
+ base size=0 base align=1
+QWhatsThis (0x0x7fe22132aa20) 0 empty
+
+Class QWidgetAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidgetAction::QPrivateSignal (0x0x7fe22132aae0) 0 empty
+
+Vtable for QWidgetAction
+QWidgetAction::_ZTV13QWidgetAction: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QWidgetAction)
+16 (int (*)(...))QWidgetAction::metaObject
+24 (int (*)(...))QWidgetAction::qt_metacast
+32 (int (*)(...))QWidgetAction::qt_metacall
+40 (int (*)(...))QWidgetAction::~QWidgetAction
+48 (int (*)(...))QWidgetAction::~QWidgetAction
+56 (int (*)(...))QWidgetAction::event
+64 (int (*)(...))QWidgetAction::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidgetAction::createWidget
+120 (int (*)(...))QWidgetAction::deleteWidget
+
+Class QWidgetAction
+ size=16 align=8
+ base size=16 base align=8
+QWidgetAction (0x0x7fe221332340) 0
+ vptr=((& QWidgetAction::_ZTV13QWidgetAction) + 16)
+ QAction (0x0x7fe2213323a8) 0
+ primary-for QWidgetAction (0x0x7fe221332340)
+ QObject (0x0x7fe22132aa80) 0
+ primary-for QAction (0x0x7fe2213323a8)
+
+Class QWizard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizard::QPrivateSignal (0x0x7fe22132ad20) 0 empty
+
+Vtable for QWizard
+QWizard::_ZTV7QWizard: 73 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWizard)
+16 (int (*)(...))QWizard::metaObject
+24 (int (*)(...))QWizard::qt_metacast
+32 (int (*)(...))QWizard::qt_metacall
+40 (int (*)(...))QWizard::~QWizard
+48 (int (*)(...))QWizard::~QWizard
+56 (int (*)(...))QWizard::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWizard::setVisible
+128 (int (*)(...))QWizard::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWizard::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWizard::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QWizard::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))QWizard::validateCurrentPage
+480 (int (*)(...))QWizard::nextId
+488 (int (*)(...))QWizard::initializePage
+496 (int (*)(...))QWizard::cleanupPage
+504 (int (*)(...))-16
+512 (int (*)(...))(& _ZTI7QWizard)
+520 (int (*)(...))QWizard::_ZThn16_N7QWizardD1Ev
+528 (int (*)(...))QWizard::_ZThn16_N7QWizardD0Ev
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWizard
+ size=40 align=8
+ base size=40 base align=8
+QWizard (0x0x7fe221332410) 0
+ vptr=((& QWizard::_ZTV7QWizard) + 16)
+ QDialog (0x0x7fe221332478) 0
+ primary-for QWizard (0x0x7fe221332410)
+ QWidget (0x0x7fe221612c40) 0
+ primary-for QDialog (0x0x7fe221332478)
+ QObject (0x0x7fe22132ac60) 0
+ primary-for QWidget (0x0x7fe221612c40)
+ QPaintDevice (0x0x7fe22132acc0) 16
+ vptr=((& QWizard::_ZTV7QWizard) + 520)
+
+Class QWizardPage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizardPage::QPrivateSignal (0x0x7fe2213924e0) 0 empty
+
+Vtable for QWizardPage
+QWizardPage::_ZTV11QWizardPage: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWizardPage)
+16 (int (*)(...))QWizardPage::metaObject
+24 (int (*)(...))QWizardPage::qt_metacast
+32 (int (*)(...))QWizardPage::qt_metacall
+40 (int (*)(...))QWizardPage::~QWizardPage
+48 (int (*)(...))QWizardPage::~QWizardPage
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QWizardPage::initializePage
+440 (int (*)(...))QWizardPage::cleanupPage
+448 (int (*)(...))QWizardPage::validatePage
+456 (int (*)(...))QWizardPage::isComplete
+464 (int (*)(...))QWizardPage::nextId
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QWizardPage)
+488 (int (*)(...))QWizardPage::_ZThn16_N11QWizardPageD1Ev
+496 (int (*)(...))QWizardPage::_ZThn16_N11QWizardPageD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWizardPage
+ size=40 align=8
+ base size=40 base align=8
+QWizardPage (0x0x7fe221332618) 0
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 16)
+ QWidget (0x0x7fe221374e00) 0
+ primary-for QWizardPage (0x0x7fe221332618)
+ QObject (0x0x7fe221392420) 0
+ primary-for QWidget (0x0x7fe221374e00)
+ QPaintDevice (0x0x7fe221392480) 16
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 488)
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7fe221392660) 0
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7fe221392ae0) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7fe22149fae0) 0 empty
+
+Vtable for QOpenGLDebugLogger
+QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QOpenGLDebugLogger)
+16 (int (*)(...))QOpenGLDebugLogger::metaObject
+24 (int (*)(...))QOpenGLDebugLogger::qt_metacast
+32 (int (*)(...))QOpenGLDebugLogger::qt_metacall
+40 (int (*)(...))QOpenGLDebugLogger::~QOpenGLDebugLogger
+48 (int (*)(...))QOpenGLDebugLogger::~QOpenGLDebugLogger
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLDebugLogger
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLDebugLogger (0x0x7fe221495b60) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16)
+ QObject (0x0x7fe22149fa80) 0
+ primary-for QOpenGLDebugLogger (0x0x7fe221495b60)
+
+Vtable for QOpenGLFramebufferObject
+QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QOpenGLFramebufferObject)
+16 (int (*)(...))QOpenGLFramebufferObject::~QOpenGLFramebufferObject
+24 (int (*)(...))QOpenGLFramebufferObject::~QOpenGLFramebufferObject
+
+Class QOpenGLFramebufferObject
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLFramebufferObject (0x0x7fe22149fe40) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7fe22117b120) 0
+
+Vtable for QOpenGLPaintDevice
+QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QOpenGLPaintDevice)
+16 (int (*)(...))QOpenGLPaintDevice::~QOpenGLPaintDevice
+24 (int (*)(...))QOpenGLPaintDevice::~QOpenGLPaintDevice
+32 (int (*)(...))QOpenGLPaintDevice::devType
+40 (int (*)(...))QOpenGLPaintDevice::paintEngine
+48 (int (*)(...))QOpenGLPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QOpenGLPaintDevice::ensureActiveTarget
+
+Class QOpenGLPaintDevice
+ size=24 align=8
+ base size=24 base align=8
+QOpenGLPaintDevice (0x0x7fe221495bc8) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16)
+ QPaintDevice (0x0x7fe22117b180) 0
+ primary-for QOpenGLPaintDevice (0x0x7fe221495bc8)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7fe22117b3c0) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7fe2211cca80) 0 empty
+
+Vtable for QOpenGLShader
+QOpenGLShader::_ZTV13QOpenGLShader: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QOpenGLShader)
+16 (int (*)(...))QOpenGLShader::metaObject
+24 (int (*)(...))QOpenGLShader::qt_metacast
+32 (int (*)(...))QOpenGLShader::qt_metacall
+40 (int (*)(...))QOpenGLShader::~QOpenGLShader
+48 (int (*)(...))QOpenGLShader::~QOpenGLShader
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLShader
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLShader (0x0x7fe2211db5b0) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16)
+ QObject (0x0x7fe2211cca20) 0
+ primary-for QOpenGLShader (0x0x7fe2211db5b0)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7fe2211ccf60) 0 empty
+
+Vtable for QOpenGLShaderProgram
+QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QOpenGLShaderProgram)
+16 (int (*)(...))QOpenGLShaderProgram::metaObject
+24 (int (*)(...))QOpenGLShaderProgram::qt_metacast
+32 (int (*)(...))QOpenGLShaderProgram::qt_metacall
+40 (int (*)(...))QOpenGLShaderProgram::~QOpenGLShaderProgram
+48 (int (*)(...))QOpenGLShaderProgram::~QOpenGLShaderProgram
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QOpenGLShaderProgram::link
+
+Class QOpenGLShaderProgram
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLShaderProgram (0x0x7fe2211db750) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16)
+ QObject (0x0x7fe2211ccf00) 0
+ primary-for QOpenGLShaderProgram (0x0x7fe2211db750)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7fe221270120) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7fe2212e5240) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7fe2212e5480) 0 empty
+
+Vtable for QOpenGLTimerQuery
+QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QOpenGLTimerQuery)
+16 (int (*)(...))QOpenGLTimerQuery::metaObject
+24 (int (*)(...))QOpenGLTimerQuery::qt_metacast
+32 (int (*)(...))QOpenGLTimerQuery::qt_metacall
+40 (int (*)(...))QOpenGLTimerQuery::~QOpenGLTimerQuery
+48 (int (*)(...))QOpenGLTimerQuery::~QOpenGLTimerQuery
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLTimerQuery
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLTimerQuery (0x0x7fe2211db8f0) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16)
+ QObject (0x0x7fe2212e5420) 0
+ primary-for QOpenGLTimerQuery (0x0x7fe2211db8f0)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7fe2212e5660) 0 empty
+
+Vtable for QOpenGLTimeMonitor
+QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QOpenGLTimeMonitor)
+16 (int (*)(...))QOpenGLTimeMonitor::metaObject
+24 (int (*)(...))QOpenGLTimeMonitor::qt_metacast
+32 (int (*)(...))QOpenGLTimeMonitor::qt_metacall
+40 (int (*)(...))QOpenGLTimeMonitor::~QOpenGLTimeMonitor
+48 (int (*)(...))QOpenGLTimeMonitor::~QOpenGLTimeMonitor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLTimeMonitor
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLTimeMonitor (0x0x7fe2211db958) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16)
+ QObject (0x0x7fe2212e5600) 0
+ primary-for QOpenGLTimeMonitor (0x0x7fe2211db958)
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7fe2212e57e0) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7fe220ff9840) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7fe220ff9a20) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7fe220ff9a80) 0
+
+Vtable for QAbstractOpenGLFunctions
+QAbstractOpenGLFunctions::_ZTV24QAbstractOpenGLFunctions: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractOpenGLFunctions)
+16 (int (*)(...))QAbstractOpenGLFunctions::~QAbstractOpenGLFunctions
+24 (int (*)(...))QAbstractOpenGLFunctions::~QAbstractOpenGLFunctions
+32 (int (*)(...))QAbstractOpenGLFunctions::initializeOpenGLFunctions
+
+Class QAbstractOpenGLFunctions
+ size=16 align=8
+ base size=16 base align=8
+QAbstractOpenGLFunctions (0x0x7fe220ff9c60) 0
+ vptr=((& QAbstractOpenGLFunctions::_ZTV24QAbstractOpenGLFunctions) + 16)
+
+Class QOpenGLFunctions_1_0_CoreBackend::Functions
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_1_0_CoreBackend::Functions (0x0x7fe220ff9e40) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7fe220ff4208) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe220ff9de0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7fe2210381e0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7fe220ff4270) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe221038180) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7fe221038540) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7fe220ff42d8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe2210384e0) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7fe2210388a0) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7fe220ff4340) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe221038840) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7fe221038c00) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7fe220ff43a8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe221038ba0) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7fe221038f60) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7fe220ff4410) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe221038f00) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7fe221061300) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7fe220ff4478) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe2210612a0) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7fe221061660) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7fe220ff44e0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe221061600) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7fe2210619c0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7fe220ff4548) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe221061960) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7fe221061d20) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7fe220ff45b0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe221061cc0) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7fe2210ab0c0) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7fe220ff4618) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe2210ab060) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7fe2210ab420) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7fe220ff4680) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe2210ab3c0) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7fe2210ab780) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7fe220ff46e8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe2210ab720) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7fe2210abae0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7fe220ff4750) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe2210aba80) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7fe2210abe40) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7fe220ff47b8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe2210abde0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7fe2211031e0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7fe220ff4820) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe221103180) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7fe221103540) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7fe220ff4888) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe2211034e0) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7fe2211038a0) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7fe220ff48f0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe221103840) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7fe221103c00) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7fe220ff4958) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe221103ba0) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7fe221103f60) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7fe220ff49c0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe221103f00) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7fe220d8c300) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7fe220ff4a28) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe220d8c2a0) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7fe220d8c660) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7fe220ff4a90) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe220d8c600) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7fe220d8c9c0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7fe220ff4af8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe220d8c960) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7fe220d8cd20) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7fe220ff4b60) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe220d8ccc0) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7fe220dc60c0) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7fe220ff4bc8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe220dc6060) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7fe220dc6420) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7fe220ff4c30) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe220dc63c0) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7fe220dc6780) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7fe220ff4c98) 0
+ QOpenGLVersionFunctionsBackend (0x0x7fe220dc6720) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7fe220dc6a80) 0
+
+Class QOpenGLVersionFunctionsFactory
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVersionFunctionsFactory (0x0x7fe220dc6c00) 0 empty
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7fe220dc6d20) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7fe220dc6d80) 0
+
+Vtable for QOpenGLVertexArrayObject
+QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QOpenGLVertexArrayObject)
+16 (int (*)(...))QOpenGLVertexArrayObject::metaObject
+24 (int (*)(...))QOpenGLVertexArrayObject::qt_metacast
+32 (int (*)(...))QOpenGLVertexArrayObject::qt_metacall
+40 (int (*)(...))QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject
+48 (int (*)(...))QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLVertexArrayObject
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLVertexArrayObject (0x0x7fe220ff4d00) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16)
+ QObject (0x0x7fe220dc6cc0) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7fe220ff4d00)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7fe220e05420) 0 empty
+
+Vtable for QOpenGLWindow
+QOpenGLWindow::_ZTV13QOpenGLWindow: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QOpenGLWindow)
+16 (int (*)(...))QOpenGLWindow::metaObject
+24 (int (*)(...))QOpenGLWindow::qt_metacast
+32 (int (*)(...))QOpenGLWindow::qt_metacall
+40 (int (*)(...))QOpenGLWindow::~QOpenGLWindow
+48 (int (*)(...))QOpenGLWindow::~QOpenGLWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QOpenGLWindow::resizeEvent
+168 (int (*)(...))QOpenGLWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QOpenGLWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))QOpenGLWindow::initializeGL
+336 (int (*)(...))QOpenGLWindow::resizeGL
+344 (int (*)(...))QOpenGLWindow::paintGL
+352 (int (*)(...))QOpenGLWindow::paintUnderGL
+360 (int (*)(...))QOpenGLWindow::paintOverGL
+368 (int (*)(...))QOpenGLWindow::redirected
+376 (int (*)(...))-16
+384 (int (*)(...))(& _ZTI13QOpenGLWindow)
+392 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD1Ev
+400 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD0Ev
+408 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+416 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+424 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+432 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+440 (int (*)(...))-40
+448 (int (*)(...))(& _ZTI13QOpenGLWindow)
+456 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD1Ev
+464 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD0Ev
+472 (int (*)(...))QPaintDevice::devType
+480 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+488 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QPaintDevice::initPainter
+504 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow10redirectedEP6QPoint
+512 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QOpenGLWindow
+ size=56 align=8
+ base size=50 base align=8
+QOpenGLWindow (0x0x7fe220ff4dd0) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16)
+ QPaintDeviceWindow (0x0x7fe221015460) 0
+ primary-for QOpenGLWindow (0x0x7fe220ff4dd0)
+ QWindow (0x0x7fe2210154d0) 0
+ primary-for QPaintDeviceWindow (0x0x7fe221015460)
+ QObject (0x0x7fe220e05300) 0
+ primary-for QWindow (0x0x7fe2210154d0)
+ QSurface (0x0x7fe220e05360) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 392)
+ QPaintDevice (0x0x7fe220e053c0) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 456)
+
+Class QOpenGLWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWidget::QPrivateSignal (0x0x7fe220e05660) 0 empty
+
+Vtable for QOpenGLWidget
+QOpenGLWidget::_ZTV13QOpenGLWidget: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QOpenGLWidget)
+16 (int (*)(...))QOpenGLWidget::metaObject
+24 (int (*)(...))QOpenGLWidget::qt_metacast
+32 (int (*)(...))QOpenGLWidget::qt_metacall
+40 (int (*)(...))QOpenGLWidget::~QOpenGLWidget
+48 (int (*)(...))QOpenGLWidget::~QOpenGLWidget
+56 (int (*)(...))QOpenGLWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QOpenGLWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QOpenGLWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QOpenGLWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QOpenGLWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QOpenGLWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QOpenGLWidget::initializeGL
+440 (int (*)(...))QOpenGLWidget::resizeGL
+448 (int (*)(...))QOpenGLWidget::paintGL
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI13QOpenGLWidget)
+472 (int (*)(...))QOpenGLWidget::_ZThn16_N13QOpenGLWidgetD1Ev
+480 (int (*)(...))QOpenGLWidget::_ZThn16_N13QOpenGLWidgetD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QOpenGLWidget::_ZThn16_NK13QOpenGLWidget11paintEngineEv
+504 (int (*)(...))QOpenGLWidget::_ZThn16_NK13QOpenGLWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QOpenGLWidget::_ZThn16_NK13QOpenGLWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QOpenGLWidget
+ size=40 align=8
+ base size=40 base align=8
+QOpenGLWidget (0x0x7fe220ff4ea0) 0
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 16)
+ QWidget (0x0x7fe221015690) 0
+ primary-for QOpenGLWidget (0x0x7fe220ff4ea0)
+ QObject (0x0x7fe220e055a0) 0
+ primary-for QWidget (0x0x7fe221015690)
+ QPaintDevice (0x0x7fe220e05600) 16
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 472)
+
+Class QUiLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUiLoader::QPrivateSignal (0x0x7fe220e05840) 0 empty
+
+Vtable for QUiLoader
+QUiLoader::_ZTV9QUiLoader: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QUiLoader)
+16 (int (*)(...))QUiLoader::metaObject
+24 (int (*)(...))QUiLoader::qt_metacast
+32 (int (*)(...))QUiLoader::qt_metacall
+40 (int (*)(...))QUiLoader::~QUiLoader
+48 (int (*)(...))QUiLoader::~QUiLoader
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QUiLoader::createWidget
+120 (int (*)(...))QUiLoader::createLayout
+128 (int (*)(...))QUiLoader::createActionGroup
+136 (int (*)(...))QUiLoader::createAction
+
+Class QUiLoader
+ size=24 align=8
+ base size=24 base align=8
+QUiLoader (0x0x7fe220ff4f70) 0
+ vptr=((& QUiLoader::_ZTV9QUiLoader) + 16)
+ QObject (0x0x7fe220e057e0) 0
+ primary-for QUiLoader (0x0x7fe220ff4f70)
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fe220e57e40) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7fe220e701e0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fe220e703c0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7fe220e70720) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fe220e70900) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7fe220e70c60) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fe220e70de0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7fe220ea4120) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fe220ea4300) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7fe220ea4660) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7fe220ea4840) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7fe220ea4ba0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7fe220ea4d80) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7fe220ed2120) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7fe220ed2300) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7fe220ed2660) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fe220efdf00) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7fe220f232a0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fe220f23420) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7fe220f23780) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fe220f23900) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7fe220f23c60) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fe220f23de0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7fe220b4d180) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7fe220b4d300) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7fe220b4d660) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7fe220b4d7e0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7fe220b4db40) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7fe220b4dcc0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7fe220b79060) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7fe220b791e0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7fe220b79540) 0 empty
+
diff --git a/tests/auto/bic/data/QtUiTools.6.2.0.linux-gcc-amd64.txt b/tests/auto/bic/data/QtUiTools.6.2.0.linux-gcc-amd64.txt
new file mode 100644
index 000000000..52a154b70
--- /dev/null
+++ b/tests/auto/bic/data/QtUiTools.6.2.0.linux-gcc-amd64.txt
@@ -0,0 +1,20214 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f0b4ed18c60) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f0b4ee1b480) 0 empty
+
+Class std::__do_is_nt_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_nt_destructible_impl (0x0x7f0b4ee1b6c0) 0 empty
+
+Class std::__do_is_implicitly_default_constructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_implicitly_default_constructible_impl (0x0x7f0b4ee4d7e0) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7f0b4eaa4000) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f0b4eaf2de0) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7f0b4eaf2ea0) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7f0b4eb273c0) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7f0b4eb27420) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7f0b4eb27480) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7f0b4eb274e0) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7f0b4eb27540) 0 empty
+
+Class std::__result_of_memfun_ref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memfun_ref_impl (0x0x7f0b4eb27600) 0 empty
+
+Class std::__result_of_memfun_deref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memfun_deref_impl (0x0x7f0b4eb276c0) 0 empty
+
+Class std::__result_of_memobj_ref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memobj_ref_impl (0x0x7f0b4eb27780) 0 empty
+
+Class std::__result_of_memobj_deref_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_memobj_deref_impl (0x0x7f0b4eb27840) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f0b4eb27ba0) 0 empty
+
+Class std::__swappable_details::__do_is_swappable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_details::__do_is_swappable_impl (0x0x7f0b4eb27f00) 0 empty
+
+Class std::__swappable_details::__do_is_nothrow_swappable_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_details::__do_is_nothrow_swappable_impl (0x0x7f0b4eb27f60) 0 empty
+
+Class std::__swappable_with_details::__do_is_swappable_with_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_with_details::__do_is_swappable_with_impl (0x0x7f0b4eb72240) 0 empty
+
+Class std::__swappable_with_details::__do_is_nothrow_swappable_with_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__swappable_with_details::__do_is_nothrow_swappable_with_impl (0x0x7f0b4eb722a0) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuch (0x0x7f0b4eb72ae0) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f0b4ebee0c0) 0 empty
+
+Class std::__nonesuch_no_braces
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch_no_braces (0x0x7f0b4eb67e38) 0 empty
+ std::__nonesuch (0x0x7f0b4ebee5a0) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7f0b4e072300) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f0b4e072600) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f0b4e072660) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f0b4e0d33c0) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f0b4e0d3420) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f0b4ec503a8) 0 empty
+ std::input_iterator_tag (0x0x7f0b4e0d3480) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f0b4ec50410) 0 empty
+ std::forward_iterator_tag (0x0x7f0b4ec50478) 0 empty
+ std::input_iterator_tag (0x0x7f0b4e0d34e0) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f0b4ec504e0) 0 empty
+ std::bidirectional_iterator_tag (0x0x7f0b4ec50548) 0 empty
+ std::forward_iterator_tag (0x0x7f0b4ec505b0) 0 empty
+ std::input_iterator_tag (0x0x7f0b4e0d3540) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_iter (0x0x7f0b4e18c240) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_less_val
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_val (0x0x7f0b4e18c360) 0 empty
+
+Class __gnu_cxx::__ops::_Val_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Val_less_iter (0x0x7f0b4e18c660) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_equal_to_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_equal_to_iter (0x0x7f0b4e18c960) 0 empty
+
+Class __gnu_cxx::__ops::_Iter_equal_to_val
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_equal_to_val (0x0x7f0b4e18ca80) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f0b4e24d2a0) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f0b4e24d5a0) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f0b4e24d600) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f0b4e24d6c0) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7f0b4e24d720) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7f0b4e24d780) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7f0b4e24d7e0) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7f0b4e24d840) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f0b4e24dae0) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f0b4e24dd80) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f0b4e24dde0) 0
+
+Vtable for std::exception
+std::exception::_ZTVSt9exception: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9exception)
+16 (int (*)(...))std::exception::~exception
+24 (int (*)(...))std::exception::~exception
+32 (int (*)(...))std::exception::what
+
+Class std::exception
+ size=8 align=8
+ base size=8 base align=8
+std::exception (0x0x7f0b4dea1ba0) 0 nearly-empty
+ vptr=((& std::exception::_ZTVSt9exception) + 16)
+
+Vtable for std::bad_exception
+std::bad_exception::_ZTVSt13bad_exception: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13bad_exception)
+16 (int (*)(...))std::bad_exception::~bad_exception
+24 (int (*)(...))std::bad_exception::~bad_exception
+32 (int (*)(...))std::bad_exception::what
+
+Class std::bad_exception
+ size=8 align=8
+ base size=8 base align=8
+std::bad_exception (0x0x7f0b4ec50958) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+ std::exception (0x0x7f0b4dea1d80) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f0b4ec50958)
+
+Vtable for std::type_info
+std::type_info::_ZTVSt9type_info: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9type_info)
+16 (int (*)(...))std::type_info::~type_info
+24 (int (*)(...))std::type_info::~type_info
+32 (int (*)(...))std::type_info::__is_pointer_p
+40 (int (*)(...))std::type_info::__is_function_p
+48 (int (*)(...))std::type_info::__do_catch
+56 (int (*)(...))std::type_info::__do_upcast
+
+Class std::type_info
+ size=16 align=8
+ base size=16 base align=8
+std::type_info (0x0x7f0b4dea1f60) 0
+ vptr=((& std::type_info::_ZTVSt9type_info) + 16)
+
+Vtable for std::bad_cast
+std::bad_cast::_ZTVSt8bad_cast: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt8bad_cast)
+16 (int (*)(...))std::bad_cast::~bad_cast
+24 (int (*)(...))std::bad_cast::~bad_cast
+32 (int (*)(...))std::bad_cast::what
+
+Class std::bad_cast
+ size=8 align=8
+ base size=8 base align=8
+std::bad_cast (0x0x7f0b4ec509c0) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+ std::exception (0x0x7f0b4df4b360) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f0b4ec509c0)
+
+Vtable for std::bad_typeid
+std::bad_typeid::_ZTVSt10bad_typeid: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt10bad_typeid)
+16 (int (*)(...))std::bad_typeid::~bad_typeid
+24 (int (*)(...))std::bad_typeid::~bad_typeid
+32 (int (*)(...))std::bad_typeid::what
+
+Class std::bad_typeid
+ size=8 align=8
+ base size=8 base align=8
+std::bad_typeid (0x0x7f0b4ec50a28) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+ std::exception (0x0x7f0b4df4b540) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f0b4ec50a28)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f0b4df4b720) 0
+
+Vtable for std::nested_exception
+std::nested_exception::_ZTVSt16nested_exception: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt16nested_exception)
+16 (int (*)(...))std::nested_exception::~nested_exception
+24 (int (*)(...))std::nested_exception::~nested_exception
+
+Class std::nested_exception
+ size=16 align=8
+ base size=16 base align=8
+std::nested_exception (0x0x7f0b4df4bc60) 0
+ vptr=((& std::nested_exception::_ZTVSt16nested_exception) + 16)
+
+Vtable for std::bad_alloc
+std::bad_alloc::_ZTVSt9bad_alloc: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt9bad_alloc)
+16 (int (*)(...))std::bad_alloc::~bad_alloc
+24 (int (*)(...))std::bad_alloc::~bad_alloc
+32 (int (*)(...))std::bad_alloc::what
+
+Class std::bad_alloc
+ size=8 align=8
+ base size=8 base align=8
+std::bad_alloc (0x0x7f0b4ec50a90) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+ std::exception (0x0x7f0b4df7a360) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f0b4ec50a90)
+
+Vtable for std::bad_array_new_length
+std::bad_array_new_length::_ZTVSt20bad_array_new_length: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt20bad_array_new_length)
+16 (int (*)(...))std::bad_array_new_length::~bad_array_new_length
+24 (int (*)(...))std::bad_array_new_length::~bad_array_new_length
+32 (int (*)(...))std::bad_array_new_length::what
+
+Class std::bad_array_new_length
+ size=8 align=8
+ base size=8 base align=8
+std::bad_array_new_length (0x0x7f0b4ec50af8) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+ std::bad_alloc (0x0x7f0b4ec50b60) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f0b4ec50af8)
+ std::exception (0x0x7f0b4df7a540) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f0b4ec50b60)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f0b4df7a720) 0 empty
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7f0b4df7a960) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f0b4e02c120) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f0b4dc1b4e0) 0
+
+Vtable for __cxxabiv1::__forced_unwind
+__cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN10__cxxabiv115__forced_unwindE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class __cxxabiv1::__forced_unwind
+ size=8 align=8
+ base size=8 base align=8
+__cxxabiv1::__forced_unwind (0x0x7f0b4dc1b5a0) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f0b4d87e480) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f0b4d87e540) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f0b4d87e5a0) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f0b4d87e600) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f0b4d87e660) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f0b4d87e780) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f0b4d87e7e0) 0
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f0b4d913e40) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f0b4d935000) 0 empty
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7f0b4d729e40) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7f0b4d729ea0) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f0b4d729f00) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7f0b4d729f60) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f0b4d387720) 0
+
+Vtable for std::logic_error
+std::logic_error::_ZTVSt11logic_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt11logic_error)
+16 (int (*)(...))std::logic_error::~logic_error
+24 (int (*)(...))std::logic_error::~logic_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::logic_error
+ size=16 align=8
+ base size=16 base align=8
+std::logic_error (0x0x7f0b4d31eaf8) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+ std::exception (0x0x7f0b4d3877e0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f0b4d31eaf8)
+
+Vtable for std::domain_error
+std::domain_error::_ZTVSt12domain_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12domain_error)
+16 (int (*)(...))std::domain_error::~domain_error
+24 (int (*)(...))std::domain_error::~domain_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::domain_error
+ size=16 align=8
+ base size=16 base align=8
+std::domain_error (0x0x7f0b4d31eb60) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+ std::logic_error (0x0x7f0b4d31ebc8) 0
+ primary-for std::domain_error (0x0x7f0b4d31eb60)
+ std::exception (0x0x7f0b4d387840) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f0b4d31ebc8)
+
+Vtable for std::invalid_argument
+std::invalid_argument::_ZTVSt16invalid_argument: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt16invalid_argument)
+16 (int (*)(...))std::invalid_argument::~invalid_argument
+24 (int (*)(...))std::invalid_argument::~invalid_argument
+32 (int (*)(...))std::logic_error::what
+
+Class std::invalid_argument
+ size=16 align=8
+ base size=16 base align=8
+std::invalid_argument (0x0x7f0b4d31ec30) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+ std::logic_error (0x0x7f0b4d31ec98) 0
+ primary-for std::invalid_argument (0x0x7f0b4d31ec30)
+ std::exception (0x0x7f0b4d3878a0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f0b4d31ec98)
+
+Vtable for std::length_error
+std::length_error::_ZTVSt12length_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12length_error)
+16 (int (*)(...))std::length_error::~length_error
+24 (int (*)(...))std::length_error::~length_error
+32 (int (*)(...))std::logic_error::what
+
+Class std::length_error
+ size=16 align=8
+ base size=16 base align=8
+std::length_error (0x0x7f0b4d31ed00) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+ std::logic_error (0x0x7f0b4d31ed68) 0
+ primary-for std::length_error (0x0x7f0b4d31ed00)
+ std::exception (0x0x7f0b4d387900) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f0b4d31ed68)
+
+Vtable for std::out_of_range
+std::out_of_range::_ZTVSt12out_of_range: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12out_of_range)
+16 (int (*)(...))std::out_of_range::~out_of_range
+24 (int (*)(...))std::out_of_range::~out_of_range
+32 (int (*)(...))std::logic_error::what
+
+Class std::out_of_range
+ size=16 align=8
+ base size=16 base align=8
+std::out_of_range (0x0x7f0b4d31edd0) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+ std::logic_error (0x0x7f0b4d31ee38) 0
+ primary-for std::out_of_range (0x0x7f0b4d31edd0)
+ std::exception (0x0x7f0b4d387960) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f0b4d31ee38)
+
+Vtable for std::runtime_error
+std::runtime_error::_ZTVSt13runtime_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt13runtime_error)
+16 (int (*)(...))std::runtime_error::~runtime_error
+24 (int (*)(...))std::runtime_error::~runtime_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::runtime_error
+ size=16 align=8
+ base size=16 base align=8
+std::runtime_error (0x0x7f0b4d31eea0) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+ std::exception (0x0x7f0b4d3879c0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f0b4d31eea0)
+
+Vtable for std::range_error
+std::range_error::_ZTVSt11range_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt11range_error)
+16 (int (*)(...))std::range_error::~range_error
+24 (int (*)(...))std::range_error::~range_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::range_error
+ size=16 align=8
+ base size=16 base align=8
+std::range_error (0x0x7f0b4d31ef08) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+ std::runtime_error (0x0x7f0b4d31ef70) 0
+ primary-for std::range_error (0x0x7f0b4d31ef08)
+ std::exception (0x0x7f0b4d387a20) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f0b4d31ef70)
+
+Vtable for std::overflow_error
+std::overflow_error::_ZTVSt14overflow_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt14overflow_error)
+16 (int (*)(...))std::overflow_error::~overflow_error
+24 (int (*)(...))std::overflow_error::~overflow_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::overflow_error
+ size=16 align=8
+ base size=16 base align=8
+std::overflow_error (0x0x7f0b4d3da000) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+ std::runtime_error (0x0x7f0b4d3da068) 0
+ primary-for std::overflow_error (0x0x7f0b4d3da000)
+ std::exception (0x0x7f0b4d387a80) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f0b4d3da068)
+
+Vtable for std::underflow_error
+std::underflow_error::_ZTVSt15underflow_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt15underflow_error)
+16 (int (*)(...))std::underflow_error::~underflow_error
+24 (int (*)(...))std::underflow_error::~underflow_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::underflow_error
+ size=16 align=8
+ base size=16 base align=8
+std::underflow_error (0x0x7f0b4d3da0d0) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+ std::runtime_error (0x0x7f0b4d3da138) 0
+ primary-for std::underflow_error (0x0x7f0b4d3da0d0)
+ std::exception (0x0x7f0b4d387ae0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f0b4d3da138)
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7f0b4d3fbde0) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f0b4d3fbe40) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f0b4d421000) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f0b4d4210c0) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f0b4d3da3a8) 0
+ std::__uses_alloc_base (0x0x7f0b4d421060) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f0b4d1906c0) 0 empty
+
+Vtable for std::bad_function_call
+std::bad_function_call::_ZTVSt17bad_function_call: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt17bad_function_call)
+16 (int (*)(...))std::bad_function_call::~bad_function_call
+24 (int (*)(...))std::bad_function_call::~bad_function_call
+32 (int (*)(...))std::bad_function_call::what
+
+Class std::bad_function_call
+ size=8 align=8
+ base size=8 base align=8
+std::bad_function_call (0x0x7f0b4d2247b8) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+ std::exception (0x0x7f0b4d230d80) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f0b4d2247b8)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f0b4d230e40) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f0b4d230ea0) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f0b4ce611e0) 0
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7f0b4cf36060) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7f0b4cf36120) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7f0b4cf36600) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7f0b4cf61480) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7f0b4cf61540) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7f0b4cf615a0) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7f0b4cf61960) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7f0b4cf61a80) 0
+
+Class std::__detail::_Equality_base
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Equality_base (0x0x7f0b4cd3eb40) 0 empty
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7f0b4cd78420) 0 empty
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7f0b4cd78de0) 0 empty
+
+Vtable for std::bad_optional_access
+std::bad_optional_access::_ZTVSt19bad_optional_access: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt19bad_optional_access)
+16 (int (*)(...))std::bad_optional_access::~bad_optional_access
+24 (int (*)(...))std::bad_optional_access::~bad_optional_access
+32 (int (*)(...))std::bad_optional_access::what
+
+Class std::bad_optional_access
+ size=8 align=8
+ base size=8 base align=8
+std::bad_optional_access (0x0x7f0b4cd706e8) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+ std::exception (0x0x7f0b4cdc2060) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7f0b4cd706e8)
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f0b4c45e9c0) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f0b4c750208) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f0b4c483180) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f0b4c7502d8) 0
+ std::_Bit_iterator_base (0x0x7f0b4c750340) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f0b4c483720) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f0b4c750410) 0
+ std::_Bit_iterator_base (0x0x7f0b4c750478) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f0b4c483f00) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7f0b4c297420) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7f0b4c2975a0) 0 empty
+
+Class __pstl::execution::v1::parallel_unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_unsequenced_policy (0x0x7f0b4c297720) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7f0b4c2978a0) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7f0b4c3d1420) 0 empty
+
+Class std::__detail::__variant::__variant_idx_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_idx_cookie (0x0x7f0b4c3d1480) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7f0b4c05cf00) 0 empty
+
+Vtable for std::bad_variant_access
+std::bad_variant_access::_ZTVSt18bad_variant_access: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt18bad_variant_access)
+16 (int (*)(...))std::bad_variant_access::~bad_variant_access
+24 (int (*)(...))std::bad_variant_access::~bad_variant_access
+32 (int (*)(...))std::bad_variant_access::what
+
+Class std::bad_variant_access
+ size=16 align=8
+ base size=16 base align=8
+std::bad_variant_access (0x0x7f0b4c3d7820) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+ std::exception (0x0x7f0b4c0c8480) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7f0b4c3d7820)
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f0b4c150ea0) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f0b4c150f00) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f0b4c19e1e0) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f0b4c19ea20) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f0b4c1e3ae0) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f0b4be79d80) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f0b4c218af8) 0
+ std::__atomic_flag_base (0x0x7f0b4be79de0) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f0b4bcf6dd0) 0
+ QAtomicInteger<int> (0x0x7f0b4bcf6e38) 0
+ QBasicAtomicInteger<int> (0x0x7f0b4bdfbd20) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f0b4b2a2000) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7f0b4b2a2060) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f0b4b362360) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7f0b4b362a80) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f0b4b362ae0) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f0b4b387270) 0
+ QGenericArgument (0x0x7f0b4b362d80) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7f0b4b39a2a0) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7f0b4b39a300) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7f0b4b39a240) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f0b4b39ac60) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f0b4b4136c0) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f0b4b4390c0) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f0b4b0f5ba0) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7f0b4b0f5f00) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f0b4b1ac9c0) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f0b4b1acae0) 0
+
+Vtable for std::locale::facet
+std::locale::facet::_ZTVNSt6locale5facetE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6locale5facetE)
+16 (int (*)(...))std::locale::facet::~facet
+24 (int (*)(...))std::locale::facet::~facet
+
+Class std::locale::facet
+ size=16 align=8
+ base size=12 base align=8
+std::locale::facet (0x0x7f0b4b1acea0) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f0b4b1f2180) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f0b4b1f2360) 0
+
+Vtable for std::_V2::error_category
+std::_V2::error_category::_ZTVNSt3_V214error_categoryE: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt3_V214error_categoryE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))std::_V2::error_category::_M_message
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))std::_V2::error_category::default_error_condition
+64 (int (*)(...))std::_V2::error_category::equivalent
+72 (int (*)(...))std::_V2::error_category::equivalent
+
+Class std::_V2::error_category
+ size=8 align=8
+ base size=8 base align=8
+std::_V2::error_category (0x0x7f0b4b23d480) 0 nearly-empty
+ vptr=((& std::_V2::error_category::_ZTVNSt3_V214error_categoryE) + 16)
+
+Class std::error_code
+ size=16 align=8
+ base size=16 base align=8
+std::error_code (0x0x7f0b4b23d7e0) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f0b4ae7b000) 0
+
+Vtable for std::system_error
+std::system_error::_ZTVSt12system_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12system_error)
+16 (int (*)(...))std::system_error::~system_error
+24 (int (*)(...))std::system_error::~system_error
+32 (int (*)(...))std::runtime_error::what
+
+Class std::system_error
+ size=32 align=8
+ base size=32 base align=8
+std::system_error (0x0x7f0b4b215750) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+ std::runtime_error (0x0x7f0b4b2157b8) 0
+ primary-for std::system_error (0x0x7f0b4b215750)
+ std::exception (0x0x7f0b4ae7bba0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f0b4b2157b8)
+
+Vtable for std::ios_base::failure
+std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt8ios_base7failureB5cxx11E)
+16 (int (*)(...))std::ios_base::failure::~failure
+24 (int (*)(...))std::ios_base::failure::~failure
+32 (int (*)(...))std::ios_base::failure::what
+
+Class std::ios_base::failure
+ size=32 align=8
+ base size=32 base align=8
+std::ios_base::failure (0x0x7f0b4b215af8) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+ std::system_error (0x0x7f0b4b215b60) 0
+ primary-for std::ios_base::failure (0x0x7f0b4b215af8)
+ std::runtime_error (0x0x7f0b4b215bc8) 0
+ primary-for std::system_error (0x0x7f0b4b215b60)
+ std::exception (0x0x7f0b4aedb360) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f0b4b215bc8)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f0b4aedb3c0) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f0b4aedb420) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f0b4aedb480) 0 empty
+
+Vtable for std::ios_base
+std::ios_base::_ZTVSt8ios_base: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt8ios_base)
+16 (int (*)(...))std::ios_base::~ios_base
+24 (int (*)(...))std::ios_base::~ios_base
+
+Class std::ios_base
+ size=216 align=8
+ base size=216 base align=8
+std::ios_base (0x0x7f0b4aedb300) 0
+ vptr=((& std::ios_base::_ZTVSt8ios_base) + 16)
+
+Class std::ctype_base
+ size=1 align=1
+ base size=0 base align=1
+std::ctype_base (0x0x7f0b4af920c0) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7f0b4ac683c0) 0 empty
+
+VTT for std::basic_ostream<char>
+std::basic_ostream<char>::_ZTTSo: 2 entries
+0 ((& std::basic_ostream<char>::_ZTVSo) + 24)
+8 ((& std::basic_ostream<char>::_ZTVSo) + 64)
+
+VTT for std::basic_ostream<wchar_t>
+std::basic_ostream<wchar_t>::_ZTTSt13basic_ostreamIwSt11char_traitsIwEE: 2 entries
+0 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_ostream<wchar_t>::_ZTVSt13basic_ostreamIwSt11char_traitsIwEE) + 64)
+
+VTT for std::basic_istream<char>
+std::basic_istream<char>::_ZTTSi: 2 entries
+0 ((& std::basic_istream<char>::_ZTVSi) + 24)
+8 ((& std::basic_istream<char>::_ZTVSi) + 64)
+
+VTT for std::basic_istream<wchar_t>
+std::basic_istream<wchar_t>::_ZTTSt13basic_istreamIwSt11char_traitsIwEE: 2 entries
+0 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_istream<wchar_t>::_ZTVSt13basic_istreamIwSt11char_traitsIwEE) + 64)
+
+Construction vtable for std::basic_istream<char> (0x0x7f0b4abb8750 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd0_Si: 10 entries
+0 24
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISi)
+24 0
+32 0
+40 18446744073709551592
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISi)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<char> (0x0x7f0b4abb8820 instance) in std::basic_iostream<char>
+std::basic_iostream<char>::_ZTCSd16_So: 10 entries
+0 8
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISo)
+24 0
+32 0
+40 18446744073709551608
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISo)
+64 0
+72 0
+
+VTT for std::basic_iostream<char>
+std::basic_iostream<char>::_ZTTSd: 7 entries
+0 ((& std::basic_iostream<char>::_ZTVSd) + 24)
+8 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 24)
+16 ((& std::basic_iostream<char>::_ZTCSd0_Si) + 64)
+24 ((& std::basic_iostream<char>::_ZTCSd16_So) + 24)
+32 ((& std::basic_iostream<char>::_ZTCSd16_So) + 64)
+40 ((& std::basic_iostream<char>::_ZTVSd) + 104)
+48 ((& std::basic_iostream<char>::_ZTVSd) + 64)
+
+Construction vtable for std::basic_istream<wchar_t> (0x0x7f0b4abb8d68 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E: 10 entries
+0 24
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551592
+48 (int (*)(...))-24
+56 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<wchar_t> (0x0x7f0b4abb8e38 instance) in std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E: 10 entries
+0 8
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551608
+48 (int (*)(...))-8
+56 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+VTT for std::basic_iostream<wchar_t>
+std::basic_iostream<wchar_t>::_ZTTSt14basic_iostreamIwSt11char_traitsIwEE: 7 entries
+0 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 24)
+8 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 24)
+16 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE0_St13basic_istreamIwS1_E) + 64)
+24 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 24)
+32 ((& std::basic_iostream<wchar_t>::_ZTCSt14basic_iostreamIwSt11char_traitsIwEE16_St13basic_ostreamIwS1_E) + 64)
+40 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 104)
+48 ((& std::basic_iostream<wchar_t>::_ZTVSt14basic_iostreamIwSt11char_traitsIwEE) + 64)
+
+Vtable for __gnu_cxx::__concurrence_lock_error
+__gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx24__concurrence_lock_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error
+24 (int (*)(...))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error
+32 (int (*)(...))__gnu_cxx::__concurrence_lock_error::what
+
+Class __gnu_cxx::__concurrence_lock_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_lock_error (0x0x7f0b4ac1c208) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+ std::exception (0x0x7f0b4ac03d80) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f0b4ac1c208)
+
+Vtable for __gnu_cxx::__concurrence_unlock_error
+__gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx26__concurrence_unlock_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error
+24 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error
+32 (int (*)(...))__gnu_cxx::__concurrence_unlock_error::what
+
+Class __gnu_cxx::__concurrence_unlock_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_unlock_error (0x0x7f0b4ac1c270) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+ std::exception (0x0x7f0b4ac03ea0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f0b4ac1c270)
+
+Vtable for __gnu_cxx::__concurrence_broadcast_error
+__gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx29__concurrence_broadcast_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::~__concurrence_broadcast_error
+24 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::~__concurrence_broadcast_error
+32 (int (*)(...))__gnu_cxx::__concurrence_broadcast_error::what
+
+Class __gnu_cxx::__concurrence_broadcast_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_broadcast_error (0x0x7f0b4ac1c2d8) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+ std::exception (0x0x7f0b4ac40000) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f0b4ac1c2d8)
+
+Vtable for __gnu_cxx::__concurrence_wait_error
+__gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9__gnu_cxx24__concurrence_wait_errorE)
+16 (int (*)(...))__gnu_cxx::__concurrence_wait_error::~__concurrence_wait_error
+24 (int (*)(...))__gnu_cxx::__concurrence_wait_error::~__concurrence_wait_error
+32 (int (*)(...))__gnu_cxx::__concurrence_wait_error::what
+
+Class __gnu_cxx::__concurrence_wait_error
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__concurrence_wait_error (0x0x7f0b4ac1c3a8) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+ std::exception (0x0x7f0b4ac40120) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f0b4ac1c3a8)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f0b4ac409c0) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f0b4ac40d20) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f0b4a869000) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f0b4a869360) 0
+
+Vtable for std::bad_weak_ptr
+std::bad_weak_ptr::_ZTVSt12bad_weak_ptr: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12bad_weak_ptr)
+16 (int (*)(...))std::bad_weak_ptr::~bad_weak_ptr
+24 (int (*)(...))std::bad_weak_ptr::~bad_weak_ptr
+32 (int (*)(...))std::bad_weak_ptr::what
+
+Class std::bad_weak_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::bad_weak_ptr (0x0x7f0b4ac1c4e0) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+ std::exception (0x0x7f0b4a8ecb40) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f0b4ac1c4e0)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f0b4a95f900) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7f0b4a95fe40) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f0b4a69ac60) 0
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7f0b4a82c000) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7f0b4a51e120) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7f0b4a36a4e0) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f0b4a401480) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7f0b4a17a3c0) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7f0b4a17a7e0) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7f0b4a17a840) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7f0b4a2055a0) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7f0b49eed780) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7f0b49eed720) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f0b49f3b660) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7f0b49cab900) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7f0b4989ac00) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7f0b498a3340) 0
+ QtPrivate::ArgBase (0x0x7f0b4989ac60) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7f0b498a3410) 0
+ QtPrivate::ArgBase (0x0x7f0b4989aea0) 0
+
+Class QHashSeed
+ size=8 align=8
+ base size=8 base align=8
+QHashSeed (0x0x7f0b4990a720) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f0b499466c0) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f0b49946780) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7f0b49753c60) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f0b4978ee40) 0 empty
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7f0b49817b40) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7f0b49817d80) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7f0b494c38a0) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f0b499c4a90) 0
+ QIODeviceBase (0x0x7f0b494c3900) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f0b494c3a80) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f0b49601060) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7f0b495a27b8) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f0b49601120) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7f0b495a2888) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f0b496011e0) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7f0b4929ccc0) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7f0b495a2c30) 0
+ QMetaContainer (0x0x7f0b4929cea0) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7f0b495a2c98) 0
+ QMetaContainer (0x0x7f0b492c02a0) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f0b493bc480) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7f0b4934dd00) 0
+ std::__detail::_List_node_base (0x0x7f0b493bc4e0) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f0b490955a0) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7f0b49095900) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7f0b48effd80) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7f0b48efff60) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f0b48feb000) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7f0b46ac58a0) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f0b466b8ba0) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7f0b466b8f00) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7f0b4672bf60) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7f0b467430c0) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7f0b46791720) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7f0b467916c0) 0 empty
+
+Class QPropertyProxyBindingData
+ size=24 align=8
+ base size=24 base align=8
+QPropertyProxyBindingData (0x0x7f0b46791780) 0
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7f0b467917e0) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7f0b46791d20) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7f0b46791d80) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7f0b467b94e0) 0
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7f0b467b9c00) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7f0b467b9f00) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7f0b467fc060) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7f0b467fc2a0) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7f0b46796750) 0
+ QPropertyObserverBase (0x0x7f0b467fc420) 0
+
+Class QPropertyNotifier
+ size=56 align=8
+ base size=56 base align=8
+QPropertyNotifier (0x0x7f0b46796a90) 0
+ QPropertyObserver (0x0x7f0b46796af8) 0
+ QPropertyObserverBase (0x0x7f0b467fc900) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7f0b464657e0) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7f0b46484960) 0
+
+Class QBindingStatus
+ size=32 align=8
+ base size=32 base align=8
+QBindingStatus (0x0x7f0b4659b8a0) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7f0b4659b900) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f0b462ab6c0) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f0b46358420) 0 empty
+
+Vtable for QObjectData
+QObjectData::_ZTV11QObjectData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QObjectData)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+
+Class QObjectData
+ size=80 align=8
+ base size=80 base align=8
+QObjectData (0x0x7f0b463a7d80) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f0b46449720) 0 empty
+
+Vtable for QObject
+QObject::_ZTV7QObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QObject)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QObject::qt_metacall
+40 (int (*)(...))QObject::~QObject
+48 (int (*)(...))QObject::~QObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QObject
+ size=16 align=8
+ base size=16 base align=8
+QObject (0x0x7f0b464496c0) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f0b46106660) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f0b46106f00) 0 empty
+
+Vtable for QAbstractAnimation
+QAbstractAnimation::_ZTV18QAbstractAnimation: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractAnimation)
+16 (int (*)(...))QAbstractAnimation::metaObject
+24 (int (*)(...))QAbstractAnimation::qt_metacast
+32 (int (*)(...))QAbstractAnimation::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAbstractAnimation
+ size=16 align=8
+ base size=16 base align=8
+QAbstractAnimation (0x0x7f0b463ded00) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+ QObject (0x0x7f0b46106ea0) 0
+ primary-for QAbstractAnimation (0x0x7f0b463ded00)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f0b461452a0) 0 empty
+
+Vtable for QAnimationDriver
+QAnimationDriver::_ZTV16QAnimationDriver: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAnimationDriver)
+16 (int (*)(...))QAnimationDriver::metaObject
+24 (int (*)(...))QAnimationDriver::qt_metacast
+32 (int (*)(...))QAnimationDriver::qt_metacall
+40 (int (*)(...))QAnimationDriver::~QAnimationDriver
+48 (int (*)(...))QAnimationDriver::~QAnimationDriver
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAnimationDriver::advance
+120 (int (*)(...))QAnimationDriver::elapsed
+128 (int (*)(...))QAnimationDriver::start
+136 (int (*)(...))QAnimationDriver::stop
+
+Class QAnimationDriver
+ size=16 align=8
+ base size=16 base align=8
+QAnimationDriver (0x0x7f0b46149000) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+ QObject (0x0x7f0b46145240) 0
+ primary-for QAnimationDriver (0x0x7f0b46149000)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f0b46145480) 0 empty
+
+Vtable for QEventLoop
+QEventLoop::_ZTV10QEventLoop: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QEventLoop)
+16 (int (*)(...))QEventLoop::metaObject
+24 (int (*)(...))QEventLoop::qt_metacast
+32 (int (*)(...))QEventLoop::qt_metacall
+40 (int (*)(...))QEventLoop::~QEventLoop
+48 (int (*)(...))QEventLoop::~QEventLoop
+56 (int (*)(...))QEventLoop::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QEventLoop
+ size=16 align=8
+ base size=16 base align=8
+QEventLoop (0x0x7f0b46149068) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+ QObject (0x0x7f0b46145420) 0
+ primary-for QEventLoop (0x0x7f0b46149068)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f0b461459c0) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f0b46145a80) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f0b46145ae0) 0
+
+Vtable for QAbstractEventDispatcher
+QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractEventDispatcher)
+16 (int (*)(...))QAbstractEventDispatcher::metaObject
+24 (int (*)(...))QAbstractEventDispatcher::qt_metacast
+32 (int (*)(...))QAbstractEventDispatcher::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))QAbstractEventDispatcher::startingUp
+200 (int (*)(...))QAbstractEventDispatcher::closingDown
+
+Class QAbstractEventDispatcher
+ size=16 align=8
+ base size=16 base align=8
+QAbstractEventDispatcher (0x0x7f0b46149208) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+ QObject (0x0x7f0b46145a20) 0
+ primary-for QAbstractEventDispatcher (0x0x7f0b46149208)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f0b461d32a0) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7f0b45c9fea0) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7f0b45c9fe40) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7f0b45cc4ae0) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7f0b45cc23a8) 0
+ QStringConverterBase (0x0x7f0b45cc4a80) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7f0b45cc2410) 0
+ QStringConverter (0x0x7f0b45cc2478) 0
+ QStringConverterBase (0x0x7f0b45d1c4e0) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7f0b45cc24e0) 0
+ QStringConverter (0x0x7f0b45cc2548) 0
+ QStringConverterBase (0x0x7f0b45d3c360) 0 empty
+
+Vtable for QTextStream
+QTextStream::_ZTV11QTextStream: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTextStream)
+16 (int (*)(...))QTextStream::~QTextStream
+24 (int (*)(...))QTextStream::~QTextStream
+
+Class QTextStream
+ size=16 align=8
+ base size=16 base align=8
+QTextStream (0x0x7f0b45cc25b0) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+ QIODeviceBase (0x0x7f0b45d69060) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f0b45d697e0) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7f0b45e459c0) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f0b45aa0060) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f0b45aa01e0) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7f0b45b4c420) 0 empty
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7f0b45b72360) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f0b45b53068) 0
+ QIODeviceBase (0x0x7f0b45b72300) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f0b45875cc0) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f0b45875d80) 0 empty
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7f0b45a1e9c0) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7f0b45a1ea20) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7f0b45a1e960) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7f0b4580a180) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7f0b4580a3c0) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7f0b4580a5a0) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7f0b4584a4e0) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f0b454944e0) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f0b454e16c0) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f0b45553f60) 0 empty
+
+Vtable for QAbstractItemModel
+QAbstractItemModel::_ZTV18QAbstractItemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractItemModel)
+16 (int (*)(...))QAbstractItemModel::metaObject
+24 (int (*)(...))QAbstractItemModel::qt_metacast
+32 (int (*)(...))QAbstractItemModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractItemModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractItemModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractItemModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModel (0x0x7f0b4555ae38) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+ QObject (0x0x7f0b45553f00) 0
+ primary-for QAbstractItemModel (0x0x7f0b4555ae38)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f0b4528cd20) 0 empty
+
+Vtable for QAbstractTableModel
+QAbstractTableModel::_ZTV19QAbstractTableModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractTableModel)
+16 (int (*)(...))QAbstractTableModel::metaObject
+24 (int (*)(...))QAbstractTableModel::qt_metacast
+32 (int (*)(...))QAbstractTableModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractTableModel::index
+120 (int (*)(...))QAbstractTableModel::parent
+128 (int (*)(...))QAbstractTableModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractTableModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractTableModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractTableModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractTableModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTableModel (0x0x7f0b455cb6e8) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+ QAbstractItemModel (0x0x7f0b455cb750) 0
+ primary-for QAbstractTableModel (0x0x7f0b455cb6e8)
+ QObject (0x0x7f0b4528ccc0) 0
+ primary-for QAbstractItemModel (0x0x7f0b455cb750)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f0b4528ce40) 0 empty
+
+Vtable for QAbstractListModel
+QAbstractListModel::_ZTV18QAbstractListModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QAbstractListModel)
+16 (int (*)(...))QAbstractListModel::metaObject
+24 (int (*)(...))QAbstractListModel::qt_metacast
+32 (int (*)(...))QAbstractListModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QAbstractListModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractItemModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QAbstractListModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QAbstractListModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractListModel (0x0x7f0b455cb7b8) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+ QAbstractItemModel (0x0x7f0b455cb820) 0
+ primary-for QAbstractListModel (0x0x7f0b455cb7b8)
+ QObject (0x0x7f0b4528cde0) 0
+ primary-for QAbstractItemModel (0x0x7f0b455cb820)
+
+Vtable for QAbstractNativeEventFilter
+QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractNativeEventFilter)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractNativeEventFilter
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNativeEventFilter (0x0x7f0b4530b6c0) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f0b4530b780) 0 empty
+
+Vtable for QAbstractProxyModel
+QAbstractProxyModel::_ZTV19QAbstractProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractProxyModel)
+16 (int (*)(...))QAbstractProxyModel::metaObject
+24 (int (*)(...))QAbstractProxyModel::qt_metacast
+32 (int (*)(...))QAbstractProxyModel::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractProxyModel::sibling
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QAbstractProxyModel::headerData
+184 (int (*)(...))QAbstractProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QAbstractProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QAbstractProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QAbstractProxyModel::setSourceModel
+416 (int (*)(...))__cxa_pure_virtual
+424 (int (*)(...))__cxa_pure_virtual
+432 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+440 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QAbstractProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QAbstractProxyModel (0x0x7f0b45303c30) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+ QAbstractItemModel (0x0x7f0b45303c98) 0
+ primary-for QAbstractProxyModel (0x0x7f0b45303c30)
+ QObject (0x0x7f0b4530b720) 0
+ primary-for QAbstractItemModel (0x0x7f0b45303c98)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f0b4530b960) 0 empty
+
+Vtable for QAnimationGroup
+QAnimationGroup::_ZTV15QAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAnimationGroup)
+16 (int (*)(...))QAnimationGroup::metaObject
+24 (int (*)(...))QAnimationGroup::qt_metacast
+32 (int (*)(...))QAnimationGroup::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QAnimationGroup (0x0x7f0b45303d00) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+ QAbstractAnimation (0x0x7f0b45303d68) 0
+ primary-for QAnimationGroup (0x0x7f0b45303d00)
+ QObject (0x0x7f0b4530b900) 0
+ primary-for QAbstractAnimation (0x0x7f0b45303d68)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7f0b45303ea0) 0
+ QIterator<QMetaAssociation> (0x0x7f0b45303f08) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f0b4530bd80) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7f0b45395000) 0
+ QConstIterator<QMetaAssociation> (0x0x7f0b45395068) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f0b4538d300) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7f0b45395138) 0
+ QIterable<QMetaAssociation> (0x0x7f0b4538d840) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f0b45094360) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7f0b450ec0c0) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7f0b45122000) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f0b45149b40) 0 empty
+
+Vtable for QIODevice
+QIODevice::_ZTV9QIODevice: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QIODevice)
+16 (int (*)(...))QIODevice::metaObject
+24 (int (*)(...))QIODevice::qt_metacast
+32 (int (*)(...))QIODevice::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIODevice::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QIODevice::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))__cxa_pure_virtual
+
+Class QIODevice
+ size=16 align=8
+ base size=16 base align=8
+QIODevice (0x0x7f0b45158070) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+ QObject (0x0x7f0b45149a80) 0
+ primary-for QIODevice (0x0x7f0b45158070)
+ QIODeviceBase (0x0x7f0b45149ae0) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f0b45149f60) 0 empty
+
+Vtable for QBuffer
+QBuffer::_ZTV7QBuffer: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QBuffer)
+16 (int (*)(...))QBuffer::metaObject
+24 (int (*)(...))QBuffer::qt_metacast
+32 (int (*)(...))QBuffer::qt_metacall
+40 (int (*)(...))QBuffer::~QBuffer
+48 (int (*)(...))QBuffer::~QBuffer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QBuffer::connectNotify
+104 (int (*)(...))QBuffer::disconnectNotify
+112 (int (*)(...))QIODevice::isSequential
+120 (int (*)(...))QBuffer::open
+128 (int (*)(...))QBuffer::close
+136 (int (*)(...))QBuffer::pos
+144 (int (*)(...))QBuffer::size
+152 (int (*)(...))QBuffer::seek
+160 (int (*)(...))QBuffer::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QBuffer::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QBuffer::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QBuffer::writeData
+
+Class QBuffer
+ size=16 align=8
+ base size=16 base align=8
+QBuffer (0x0x7f0b451570d0) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+ QIODevice (0x0x7f0b451580e0) 0
+ primary-for QBuffer (0x0x7f0b451570d0)
+ QObject (0x0x7f0b45149ea0) 0
+ primary-for QIODevice (0x0x7f0b451580e0)
+ QIODeviceBase (0x0x7f0b45149f00) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f0b4519d1e0) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7f0b4519d180) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f0b4519d360) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f0b4519d300) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f0b451f3b40) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7f0b44f0c9c0) 0
+
+Class QCalendar::SystemId
+ size=8 align=8
+ base size=8 base align=8
+QCalendar::SystemId (0x0x7f0b44f0ca20) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7f0b44f0c960) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f0b44f6a480) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f0b44fbea80) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f0b4500bcc0) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f0b4500bd20) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f0b4500bc60) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7f0b44c8ff60) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f0b44ce9360) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f0b44d9b5a0) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7f0b44e0ed20) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f0b44e0ede0) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7f0b44e0ef60) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f0b44abc1e0) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f0b44b8ede0) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7f0b44c13f60) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7f0b44c31060) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7f0b44951900) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7f0b44986e40) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7f0b44986ea0) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7f0b44986de0) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7f0b44698480) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7f0b446984e0) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7f0b44698420) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7f0b444ad540) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7f0b444ad4e0) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7f0b4459f900) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7f0b445eed80) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f0b446227e0) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f0b446229c0) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f0b442e8420) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7f0b44354d80) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7f0b44354de0) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7f0b44354e40) 0 empty
+
+Vtable for QEvent
+QEvent::_ZTV6QEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QEvent)
+16 (int (*)(...))QEvent::~QEvent
+24 (int (*)(...))QEvent::~QEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QEvent
+ size=16 align=8
+ base size=16 base align=8
+QEvent (0x0x7f0b44354d20) 0
+ vptr=((& QEvent::_ZTV6QEvent) + 16)
+
+Vtable for QTimerEvent
+QTimerEvent::_ZTV11QTimerEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTimerEvent)
+16 (int (*)(...))QTimerEvent::~QTimerEvent
+24 (int (*)(...))QTimerEvent::~QTimerEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QTimerEvent::clone
+
+Class QTimerEvent
+ size=24 align=8
+ base size=20 base align=8
+QTimerEvent (0x0x7f0b4435d548) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+ QEvent (0x0x7f0b443b67e0) 0
+ primary-for QTimerEvent (0x0x7f0b4435d548)
+
+Vtable for QChildEvent
+QChildEvent::_ZTV11QChildEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QChildEvent)
+16 (int (*)(...))QChildEvent::~QChildEvent
+24 (int (*)(...))QChildEvent::~QChildEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QChildEvent::clone
+
+Class QChildEvent
+ size=24 align=8
+ base size=24 base align=8
+QChildEvent (0x0x7f0b4435d5b0) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+ QEvent (0x0x7f0b443b6cc0) 0
+ primary-for QChildEvent (0x0x7f0b4435d5b0)
+
+Vtable for QDynamicPropertyChangeEvent
+QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QDynamicPropertyChangeEvent)
+16 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+24 (int (*)(...))QDynamicPropertyChangeEvent::~QDynamicPropertyChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDynamicPropertyChangeEvent::clone
+
+Class QDynamicPropertyChangeEvent
+ size=40 align=8
+ base size=40 base align=8
+QDynamicPropertyChangeEvent (0x0x7f0b4435d618) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+ QEvent (0x0x7f0b443e6120) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f0b4435d618)
+
+Vtable for QDeferredDeleteEvent
+QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDeferredDeleteEvent)
+16 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+24 (int (*)(...))QDeferredDeleteEvent::~QDeferredDeleteEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDeferredDeleteEvent::clone
+
+Class QDeferredDeleteEvent
+ size=24 align=8
+ base size=20 base align=8
+QDeferredDeleteEvent (0x0x7f0b4435d680) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+ QEvent (0x0x7f0b443e63c0) 0
+ primary-for QDeferredDeleteEvent (0x0x7f0b4435d680)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f0b443e6780) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f0b4435d750) 0
+ QBasicMutex (0x0x7f0b440564e0) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7f0b44056900) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f0b44056f00) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f0b440c6540) 0
+
+Vtable for QtPrivate::ResultStoreBase
+QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9QtPrivate15ResultStoreBaseE)
+16 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+24 (int (*)(...))QtPrivate::ResultStoreBase::~ResultStoreBase
+
+Class QtPrivate::ResultStoreBase
+ size=48 align=8
+ base size=44 base align=8
+QtPrivate::ResultStoreBase (0x0x7f0b441fd1e0) 0
+ vptr=((& QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE) + 16)
+
+Vtable for QFutureInterfaceBase
+QFutureInterfaceBase::_ZTV20QFutureInterfaceBase: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QFutureInterfaceBase)
+16 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+24 (int (*)(...))QFutureInterfaceBase::~QFutureInterfaceBase
+
+Class QFutureInterfaceBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureInterfaceBase (0x0x7f0b44230c00) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f0b43e65d80) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f0b43ea40c0) 0
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f0b43fdd480) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f0b43fe4a28) 0
+ std::__mutex_base (0x0x7f0b43fdd4e0) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f0b43fdd6c0) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f0b43fdd720) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f0b43fdd780) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f0b4401d1e0) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f0b43fe4a90) 0
+ std::__recursive_mutex_base (0x0x7f0b4401d240) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f0b43eede00) 0
+ std::__mutex_base (0x0x7f0b4401d600) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7f0b4401d660) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f0b43eede70) 0
+ std::__recursive_mutex_base (0x0x7f0b4401da20) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f0b4401da80) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f0b43c588a0) 0
+
+Vtable for std::thread::_State
+std::thread::_State::_ZTVNSt6thread6_StateE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt6thread6_StateE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class std::thread::_State
+ size=8 align=8
+ base size=8 base align=8
+std::thread::_State (0x0x7f0b43c58b40) 0 nearly-empty
+ vptr=((& std::thread::_State::_ZTVNSt6thread6_StateE) + 16)
+
+Class std::thread::id
+ size=8 align=8
+ base size=8 base align=8
+std::thread::id (0x0x7f0b43c58ba0) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f0b43c58ae0) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f0b43e42de0) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f0b43a7a1e0) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f0b43a7a240) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f0b43b2d780) 0 empty
+
+Vtable for std::future_error
+std::future_error::_ZTVSt12future_error: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTISt12future_error)
+16 (int (*)(...))std::future_error::~future_error
+24 (int (*)(...))std::future_error::~future_error
+32 (int (*)(...))std::future_error::what
+
+Class std::future_error
+ size=32 align=8
+ base size=32 base align=8
+std::future_error (0x0x7f0b43ae3888) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+ std::logic_error (0x0x7f0b43ae38f0) 0
+ primary-for std::future_error (0x0x7f0b43ae3888)
+ std::exception (0x0x7f0b43b2dea0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f0b43ae38f0)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f0b43b5c600) 0 empty
+
+Vtable for std::__future_base::_Result_base
+std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base12_Result_baseE)
+16 (int (*)(...))__cxa_pure_virtual
+24 0
+32 0
+
+Class std::__future_base::_Result_base
+ size=16 align=8
+ base size=16 base align=8
+std::__future_base::_Result_base (0x0x7f0b43b5c5a0) 0
+ vptr=((& std::__future_base::_Result_base::_ZTVNSt13__future_base12_Result_baseE) + 16)
+
+Class std::__future_base::_State_baseV2::__exception_ptr_tag
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_State_baseV2::__exception_ptr_tag (0x0x7f0b438dc060) 0 empty
+
+Class std::__future_base::_State_baseV2::_Make_ready
+ size=32 align=8
+ base size=32 base align=8
+std::__future_base::_State_baseV2::_Make_ready (0x0x7f0b438bf0d0) 0
+ std::__at_thread_exit_elt (0x0x7f0b438dc120) 0
+
+Vtable for std::__future_base::_State_baseV2
+std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base13_State_baseV2E)
+16 (int (*)(...))std::__future_base::_State_baseV2::~_State_baseV2
+24 (int (*)(...))std::__future_base::_State_baseV2::~_State_baseV2
+32 (int (*)(...))std::__future_base::_State_baseV2::_M_complete_async
+40 (int (*)(...))std::__future_base::_State_baseV2::_M_is_deferred_future
+
+Class std::__future_base::_State_baseV2
+ size=32 align=8
+ base size=28 base align=8
+std::__future_base::_State_baseV2 (0x0x7f0b43b5c780) 0
+ vptr=((& std::__future_base::_State_baseV2::_ZTVNSt13__future_base13_State_baseV2E) + 16)
+
+Class std::__future_base
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base (0x0x7f0b43b5c540) 0 empty
+
+Vtable for std::__future_base::_Async_state_commonV2
+std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt13__future_base21_Async_state_commonV2E)
+16 (int (*)(...))std::__future_base::_Async_state_commonV2::~_Async_state_commonV2
+24 (int (*)(...))std::__future_base::_Async_state_commonV2::~_Async_state_commonV2
+32 (int (*)(...))std::__future_base::_Async_state_commonV2::_M_complete_async
+40 (int (*)(...))std::__future_base::_State_baseV2::_M_is_deferred_future
+
+Class std::__future_base::_Async_state_commonV2
+ size=48 align=8
+ base size=44 base align=8
+std::__future_base::_Async_state_commonV2 (0x0x7f0b4357a4e0) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+ std::__future_base::_State_baseV2 (0x0x7f0b43591de0) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f0b4357a4e0)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f0b435d06c0) 0 empty
+
+Vtable for QThread
+QThread::_ZTV7QThread: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QThread)
+16 (int (*)(...))QThread::metaObject
+24 (int (*)(...))QThread::qt_metacast
+32 (int (*)(...))QThread::qt_metacall
+40 (int (*)(...))QThread::~QThread
+48 (int (*)(...))QThread::~QThread
+56 (int (*)(...))QThread::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QThread::run
+
+Class QThread
+ size=16 align=8
+ base size=16 base align=8
+QThread (0x0x7f0b4357a820) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+ QObject (0x0x7f0b435d0660) 0
+ primary-for QThread (0x0x7f0b4357a820)
+
+Vtable for QRunnable
+QRunnable::_ZTV9QRunnable: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QRunnable)
+16 (int (*)(...))__cxa_pure_virtual
+24 0
+32 0
+
+Class QRunnable
+ size=16 align=8
+ base size=9 base align=8
+QRunnable (0x0x7f0b435d0a20) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f0b435d0ba0) 0 empty
+
+Vtable for QThreadPool
+QThreadPool::_ZTV11QThreadPool: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QThreadPool)
+16 (int (*)(...))QThreadPool::metaObject
+24 (int (*)(...))QThreadPool::qt_metacast
+32 (int (*)(...))QThreadPool::qt_metacall
+40 (int (*)(...))QThreadPool::~QThreadPool
+48 (int (*)(...))QThreadPool::~QThreadPool
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QThreadPool
+ size=16 align=8
+ base size=16 base align=8
+QThreadPool (0x0x7f0b4357a888) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+ QObject (0x0x7f0b435d0b40) 0
+ primary-for QThreadPool (0x0x7f0b4357a888)
+
+Vtable for QException
+QException::_ZTV10QException: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QException)
+16 (int (*)(...))QException::~QException
+24 (int (*)(...))QException::~QException
+32 (int (*)(...))std::exception::what
+40 (int (*)(...))QException::raise
+48 (int (*)(...))QException::clone
+
+Class QException
+ size=8 align=8
+ base size=8 base align=8
+QException (0x0x7f0b4357a8f0) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+ std::exception (0x0x7f0b435d0d20) 0 nearly-empty
+ primary-for QException (0x0x7f0b4357a8f0)
+
+Vtable for QUnhandledException
+QUnhandledException::_ZTV19QUnhandledException: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QUnhandledException)
+16 (int (*)(...))QUnhandledException::~QUnhandledException
+24 (int (*)(...))QUnhandledException::~QUnhandledException
+32 (int (*)(...))std::exception::what
+40 (int (*)(...))QUnhandledException::raise
+48 (int (*)(...))QUnhandledException::clone
+
+Class QUnhandledException
+ size=16 align=8
+ base size=16 base align=8
+QUnhandledException (0x0x7f0b4357a958) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+ QException (0x0x7f0b4357a9c0) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f0b4357a958)
+ std::exception (0x0x7f0b435d0d80) 0 nearly-empty
+ primary-for QException (0x0x7f0b4357a9c0)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f0b43635c00) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f0b4306a300) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f0b4306a2a0) 0
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f0b430af540) 0 empty
+
+Vtable for QCoreApplication
+QCoreApplication::_ZTV16QCoreApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QCoreApplication)
+16 (int (*)(...))QCoreApplication::metaObject
+24 (int (*)(...))QCoreApplication::qt_metacast
+32 (int (*)(...))QCoreApplication::qt_metacall
+40 (int (*)(...))QCoreApplication::~QCoreApplication
+48 (int (*)(...))QCoreApplication::~QCoreApplication
+56 (int (*)(...))QCoreApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCoreApplication::notify
+120 (int (*)(...))QCoreApplication::compressEvent
+
+Class QCoreApplication
+ size=16 align=8
+ base size=16 base align=8
+QCoreApplication (0x0x7f0b430865b0) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+ QObject (0x0x7f0b430af4e0) 0
+ primary-for QCoreApplication (0x0x7f0b430865b0)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f0b430af780) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7f0b430af8a0) 0 empty
+
+Vtable for QConcatenateTablesProxyModel
+QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QConcatenateTablesProxyModel)
+16 (int (*)(...))QConcatenateTablesProxyModel::metaObject
+24 (int (*)(...))QConcatenateTablesProxyModel::qt_metacast
+32 (int (*)(...))QConcatenateTablesProxyModel::qt_metacall
+40 (int (*)(...))QConcatenateTablesProxyModel::~QConcatenateTablesProxyModel
+48 (int (*)(...))QConcatenateTablesProxyModel::~QConcatenateTablesProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QConcatenateTablesProxyModel::index
+120 (int (*)(...))QConcatenateTablesProxyModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QConcatenateTablesProxyModel::rowCount
+144 (int (*)(...))QConcatenateTablesProxyModel::columnCount
+152 (int (*)(...))QAbstractItemModel::hasChildren
+160 (int (*)(...))QConcatenateTablesProxyModel::data
+168 (int (*)(...))QConcatenateTablesProxyModel::setData
+176 (int (*)(...))QConcatenateTablesProxyModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QConcatenateTablesProxyModel::itemData
+200 (int (*)(...))QConcatenateTablesProxyModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QConcatenateTablesProxyModel::mimeTypes
+224 (int (*)(...))QConcatenateTablesProxyModel::mimeData
+232 (int (*)(...))QConcatenateTablesProxyModel::canDropMimeData
+240 (int (*)(...))QConcatenateTablesProxyModel::dropMimeData
+248 (int (*)(...))QAbstractItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QConcatenateTablesProxyModel::flags
+336 (int (*)(...))QAbstractItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QConcatenateTablesProxyModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QConcatenateTablesProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QConcatenateTablesProxyModel (0x0x7f0b43086618) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+ QAbstractItemModel (0x0x7f0b43086680) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7f0b43086618)
+ QObject (0x0x7f0b430af840) 0
+ primary-for QAbstractItemModel (0x0x7f0b43086680)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f0b430afa20) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f0b430afc00) 0 empty
+
+Vtable for QFileDevice
+QFileDevice::_ZTV11QFileDevice: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFileDevice)
+16 (int (*)(...))QFileDevice::metaObject
+24 (int (*)(...))QFileDevice::qt_metacast
+32 (int (*)(...))QFileDevice::qt_metacall
+40 (int (*)(...))QFileDevice::~QFileDevice
+48 (int (*)(...))QFileDevice::~QFileDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFileDevice::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QFileDevice::fileName
+256 (int (*)(...))QFileDevice::resize
+264 (int (*)(...))QFileDevice::permissions
+272 (int (*)(...))QFileDevice::setPermissions
+
+Class QFileDevice
+ size=16 align=8
+ base size=16 base align=8
+QFileDevice (0x0x7f0b430866e8) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+ QIODevice (0x0x7f0b430dcd20) 0
+ primary-for QFileDevice (0x0x7f0b430866e8)
+ QObject (0x0x7f0b430afb40) 0
+ primary-for QIODevice (0x0x7f0b430dcd20)
+ QIODeviceBase (0x0x7f0b430afba0) 0 empty
+
+Class std::filesystem::space_info
+ size=24 align=8
+ base size=24 base align=8
+std::filesystem::space_info (0x0x7f0b43139900) 0
+
+Class std::filesystem::__file_clock
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__file_clock (0x0x7f0b431cfea0) 0 empty
+
+Class std::time_base
+ size=1 align=1
+ base size=0 base align=1
+std::time_base (0x0x7f0b431ee360) 0 empty
+
+Class std::money_base::pattern
+ size=4 align=1
+ base size=4 base align=1
+std::money_base::pattern (0x0x7f0b42e54660) 0
+
+Class std::money_base
+ size=1 align=1
+ base size=0 base align=1
+std::money_base (0x0x7f0b42e54600) 0 empty
+
+Class std::messages_base
+ size=1 align=1
+ base size=0 base align=1
+std::messages_base (0x0x7f0b42e7ac00) 0 empty
+
+Class std::codecvt_base
+ size=1 align=1
+ base size=0 base align=1
+std::codecvt_base (0x0x7f0b42ed3780) 0 empty
+
+Construction vtable for std::basic_istream<char> (0x0x7f0b42d2a958 instance) in std::__cxx11::basic_istringstream<char>
+std::__cxx11::basic_istringstream<char>::_ZTCNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE0_Si: 10 entries
+0 120
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISi)
+24 0
+32 0
+40 18446744073709551496
+48 (int (*)(...))-120
+56 (int (*)(...))(& _ZTISi)
+64 0
+72 0
+
+VTT for std::__cxx11::basic_istringstream<char>
+std::__cxx11::basic_istringstream<char>::_ZTTNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE: 4 entries
+0 ((& std::__cxx11::basic_istringstream<char>::_ZTVNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE) + 24)
+8 ((& std::__cxx11::basic_istringstream<char>::_ZTCNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE0_Si) + 24)
+16 ((& std::__cxx11::basic_istringstream<char>::_ZTCNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE0_Si) + 64)
+24 ((& std::__cxx11::basic_istringstream<char>::_ZTVNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE) + 64)
+
+Construction vtable for std::basic_ostream<char> (0x0x7f0b42d2abc8 instance) in std::__cxx11::basic_ostringstream<char>
+std::__cxx11::basic_ostringstream<char>::_ZTCNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE0_So: 10 entries
+0 112
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISo)
+24 0
+32 0
+40 18446744073709551504
+48 (int (*)(...))-112
+56 (int (*)(...))(& _ZTISo)
+64 0
+72 0
+
+VTT for std::__cxx11::basic_ostringstream<char>
+std::__cxx11::basic_ostringstream<char>::_ZTTNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE: 4 entries
+0 ((& std::__cxx11::basic_ostringstream<char>::_ZTVNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE) + 24)
+8 ((& std::__cxx11::basic_ostringstream<char>::_ZTCNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE0_So) + 24)
+16 ((& std::__cxx11::basic_ostringstream<char>::_ZTCNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE0_So) + 64)
+24 ((& std::__cxx11::basic_ostringstream<char>::_ZTVNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE) + 64)
+
+Construction vtable for std::basic_iostream<char> (0x0x7f0b4302be00 instance) in std::__cxx11::basic_stringstream<char>
+std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Sd: 15 entries
+0 128
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISd)
+24 0
+32 0
+40 112
+48 (int (*)(...))-16
+56 (int (*)(...))(& _ZTISd)
+64 0
+72 0
+80 18446744073709551488
+88 (int (*)(...))-128
+96 (int (*)(...))(& _ZTISd)
+104 0
+112 0
+
+Construction vtable for std::basic_istream<char> (0x0x7f0b42d2ae38 instance) in std::__cxx11::basic_stringstream<char>
+std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Si: 10 entries
+0 128
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISi)
+24 0
+32 0
+40 18446744073709551488
+48 (int (*)(...))-128
+56 (int (*)(...))(& _ZTISi)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<char> (0x0x7f0b42d2af08 instance) in std::__cxx11::basic_stringstream<char>
+std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE16_So: 10 entries
+0 112
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISo)
+24 0
+32 0
+40 18446744073709551504
+48 (int (*)(...))-112
+56 (int (*)(...))(& _ZTISo)
+64 0
+72 0
+
+VTT for std::__cxx11::basic_stringstream<char>
+std::__cxx11::basic_stringstream<char>::_ZTTNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE: 10 entries
+0 ((& std::__cxx11::basic_stringstream<char>::_ZTVNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE) + 24)
+8 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Sd) + 24)
+16 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Si) + 24)
+24 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Si) + 64)
+32 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE16_So) + 24)
+40 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE16_So) + 64)
+48 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Sd) + 104)
+56 ((& std::__cxx11::basic_stringstream<char>::_ZTCNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE0_Sd) + 64)
+64 ((& std::__cxx11::basic_stringstream<char>::_ZTVNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE) + 104)
+72 ((& std::__cxx11::basic_stringstream<char>::_ZTVNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE) + 64)
+
+Construction vtable for std::basic_istream<wchar_t> (0x0x7f0b42dcf0d0 instance) in std::__cxx11::basic_istringstream<wchar_t>
+std::__cxx11::basic_istringstream<wchar_t>::_ZTCNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_istreamIwS2_E: 10 entries
+0 120
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551496
+48 (int (*)(...))-120
+56 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+VTT for std::__cxx11::basic_istringstream<wchar_t>
+std::__cxx11::basic_istringstream<wchar_t>::_ZTTNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEE: 4 entries
+0 ((& std::__cxx11::basic_istringstream<wchar_t>::_ZTVNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEE) + 24)
+8 ((& std::__cxx11::basic_istringstream<wchar_t>::_ZTCNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_istreamIwS2_E) + 24)
+16 ((& std::__cxx11::basic_istringstream<wchar_t>::_ZTCNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_istreamIwS2_E) + 64)
+24 ((& std::__cxx11::basic_istringstream<wchar_t>::_ZTVNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEE) + 64)
+
+Construction vtable for std::basic_ostream<wchar_t> (0x0x7f0b42dcf340 instance) in std::__cxx11::basic_ostringstream<wchar_t>
+std::__cxx11::basic_ostringstream<wchar_t>::_ZTCNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_ostreamIwS2_E: 10 entries
+0 112
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551504
+48 (int (*)(...))-112
+56 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+VTT for std::__cxx11::basic_ostringstream<wchar_t>
+std::__cxx11::basic_ostringstream<wchar_t>::_ZTTNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEE: 4 entries
+0 ((& std::__cxx11::basic_ostringstream<wchar_t>::_ZTVNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEE) + 24)
+8 ((& std::__cxx11::basic_ostringstream<wchar_t>::_ZTCNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_ostreamIwS2_E) + 24)
+16 ((& std::__cxx11::basic_ostringstream<wchar_t>::_ZTCNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_ostreamIwS2_E) + 64)
+24 ((& std::__cxx11::basic_ostringstream<wchar_t>::_ZTVNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEE) + 64)
+
+Construction vtable for std::basic_iostream<wchar_t> (0x0x7f0b42ddf1c0 instance) in std::__cxx11::basic_stringstream<wchar_t>
+std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St14basic_iostreamIwS2_E: 15 entries
+0 128
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt14basic_iostreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 112
+48 (int (*)(...))-16
+56 (int (*)(...))(& _ZTISt14basic_iostreamIwSt11char_traitsIwEE)
+64 0
+72 0
+80 18446744073709551488
+88 (int (*)(...))-128
+96 (int (*)(...))(& _ZTISt14basic_iostreamIwSt11char_traitsIwEE)
+104 0
+112 0
+
+Construction vtable for std::basic_istream<wchar_t> (0x0x7f0b42dcf5b0 instance) in std::__cxx11::basic_stringstream<wchar_t>
+std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_istreamIwS2_E: 10 entries
+0 128
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551488
+48 (int (*)(...))-128
+56 (int (*)(...))(& _ZTISt13basic_istreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+Construction vtable for std::basic_ostream<wchar_t> (0x0x7f0b42dcf680 instance) in std::__cxx11::basic_stringstream<wchar_t>
+std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE16_St13basic_ostreamIwS2_E: 10 entries
+0 112
+8 (int (*)(...))0
+16 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+24 0
+32 0
+40 18446744073709551504
+48 (int (*)(...))-112
+56 (int (*)(...))(& _ZTISt13basic_ostreamIwSt11char_traitsIwEE)
+64 0
+72 0
+
+VTT for std::__cxx11::basic_stringstream<wchar_t>
+std::__cxx11::basic_stringstream<wchar_t>::_ZTTNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE: 10 entries
+0 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTVNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE) + 24)
+8 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St14basic_iostreamIwS2_E) + 24)
+16 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_istreamIwS2_E) + 24)
+24 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St13basic_istreamIwS2_E) + 64)
+32 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE16_St13basic_ostreamIwS2_E) + 24)
+40 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE16_St13basic_ostreamIwS2_E) + 64)
+48 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St14basic_iostreamIwS2_E) + 104)
+56 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTCNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE0_St14basic_iostreamIwS2_E) + 64)
+64 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTVNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE) + 104)
+72 ((& std::__cxx11::basic_stringstream<wchar_t>::_ZTVNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEE) + 64)
+
+Class std::_Resetiosflags
+ size=4 align=4
+ base size=4 base align=4
+std::_Resetiosflags (0x0x7f0b42e0b000) 0
+
+Class std::_Setiosflags
+ size=4 align=4
+ base size=4 base align=4
+std::_Setiosflags (0x0x7f0b42e0b180) 0
+
+Class std::_Setbase
+ size=4 align=4
+ base size=4 base align=4
+std::_Setbase (0x0x7f0b42e0b300) 0
+
+Class std::_Setprecision
+ size=4 align=4
+ base size=4 base align=4
+std::_Setprecision (0x0x7f0b42e0b600) 0
+
+Class std::_Setw
+ size=4 align=4
+ base size=4 base align=4
+std::_Setw (0x0x7f0b42e0b780) 0
+
+Class std::filesystem::__cxx11::path::__null_terminated
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__cxx11::path::__null_terminated (0x0x7f0b42acc840) 0 empty
+
+Class std::filesystem::__cxx11::path::_List::_Impl_deleter
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__cxx11::path::_List::_Impl_deleter (0x0x7f0b42acc900) 0 empty
+
+Class std::filesystem::__cxx11::path::_List
+ size=8 align=8
+ base size=8 base align=8
+std::filesystem::__cxx11::path::_List (0x0x7f0b42acc8a0) 0
+
+Class std::filesystem::__cxx11::path
+ size=40 align=8
+ base size=40 base align=8
+std::filesystem::__cxx11::path (0x0x7f0b42acc720) 0
+
+Vtable for std::filesystem::__cxx11::filesystem_error
+std::filesystem::__cxx11::filesystem_error::_ZTVNSt10filesystem7__cxx1116filesystem_errorE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt10filesystem7__cxx1116filesystem_errorE)
+16 (int (*)(...))std::filesystem::__cxx11::filesystem_error::~filesystem_error
+24 (int (*)(...))std::filesystem::__cxx11::filesystem_error::~filesystem_error
+32 (int (*)(...))std::filesystem::__cxx11::filesystem_error::what
+
+Class std::filesystem::__cxx11::filesystem_error
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::filesystem_error (0x0x7f0b42941478) 0
+ vptr=((& std::filesystem::__cxx11::filesystem_error::_ZTVNSt10filesystem7__cxx1116filesystem_errorE) + 16)
+ std::system_error (0x0x7f0b429414e0) 0
+ primary-for std::filesystem::__cxx11::filesystem_error (0x0x7f0b42941478)
+ std::runtime_error (0x0x7f0b42941548) 0
+ primary-for std::system_error (0x0x7f0b429414e0)
+ std::exception (0x0x7f0b429467e0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f0b42941548)
+
+Class std::filesystem::__cxx11::path::_Cmpt
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::path::_Cmpt (0x0x7f0b42941ea0) 0
+ std::filesystem::__cxx11::path (0x0x7f0b4299f2a0) 0
+
+Class std::filesystem::__cxx11::path::iterator
+ size=24 align=8
+ base size=17 base align=8
+std::filesystem::__cxx11::path::iterator (0x0x7f0b429c8540) 0
+
+Class std::filesystem::file_status
+ size=8 align=4
+ base size=8 base align=4
+std::filesystem::file_status (0x0x7f0b4267bd20) 0
+
+Class std::filesystem::__cxx11::directory_entry
+ size=48 align=8
+ base size=41 base align=8
+std::filesystem::__cxx11::directory_entry (0x0x7f0b426c9240) 0
+
+Class std::filesystem::__cxx11::__directory_iterator_proxy
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::__directory_iterator_proxy (0x0x7f0b4270f900) 0
+
+Class std::filesystem::__cxx11::directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::directory_iterator (0x0x7f0b427350c0) 0
+
+Class std::filesystem::__cxx11::recursive_directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::recursive_directory_iterator (0x0x7f0b427b01e0) 0
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f0b42485360) 0 empty
+
+Vtable for QFile
+QFile::_ZTV5QFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QFile)
+16 (int (*)(...))QFile::metaObject
+24 (int (*)(...))QFile::qt_metacast
+32 (int (*)(...))QFile::qt_metacall
+40 (int (*)(...))QFile::~QFile
+48 (int (*)(...))QFile::~QFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QFile::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFile::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QFile::fileName
+256 (int (*)(...))QFile::resize
+264 (int (*)(...))QFile::permissions
+272 (int (*)(...))QFile::setPermissions
+
+Class QFile
+ size=16 align=8
+ base size=16 base align=8
+QFile (0x0x7f0b42481958) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+ QFileDevice (0x0x7f0b424819c0) 0
+ primary-for QFile (0x0x7f0b42481958)
+ QIODevice (0x0x7f0b426834d0) 0
+ primary-for QFileDevice (0x0x7f0b424819c0)
+ QObject (0x0x7f0b424852a0) 0
+ primary-for QIODevice (0x0x7f0b426834d0)
+ QIODeviceBase (0x0x7f0b42485300) 0 empty
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f0b42485960) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f0b42565300) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f0b4262fa20) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f0b4262fea0) 0
+
+Vtable for QFactoryInterface
+QFactoryInterface::_ZTV17QFactoryInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFactoryInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QFactoryInterface
+ size=8 align=8
+ base size=8 base align=8
+QFactoryInterface (0x0x7f0b4235a660) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f0b4235a8a0) 0 empty
+
+Vtable for QFileSelector
+QFileSelector::_ZTV13QFileSelector: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QFileSelector)
+16 (int (*)(...))QFileSelector::metaObject
+24 (int (*)(...))QFileSelector::qt_metacast
+32 (int (*)(...))QFileSelector::qt_metacall
+40 (int (*)(...))QFileSelector::~QFileSelector
+48 (int (*)(...))QFileSelector::~QFileSelector
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSelector
+ size=16 align=8
+ base size=16 base align=8
+QFileSelector (0x0x7f0b42320b60) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+ QObject (0x0x7f0b4235a840) 0
+ primary-for QFileSelector (0x0x7f0b42320b60)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f0b4235aa80) 0 empty
+
+Vtable for QFileSystemWatcher
+QFileSystemWatcher::_ZTV18QFileSystemWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFileSystemWatcher)
+16 (int (*)(...))QFileSystemWatcher::metaObject
+24 (int (*)(...))QFileSystemWatcher::qt_metacast
+32 (int (*)(...))QFileSystemWatcher::qt_metacall
+40 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+48 (int (*)(...))QFileSystemWatcher::~QFileSystemWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QFileSystemWatcher
+ size=16 align=8
+ base size=16 base align=8
+QFileSystemWatcher (0x0x7f0b42320bc8) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+ QObject (0x0x7f0b4235aa20) 0
+ primary-for QFileSystemWatcher (0x0x7f0b42320bc8)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f0b42390240) 0 empty
+
+Vtable for QFutureWatcherBase
+QFutureWatcherBase::_ZTV18QFutureWatcherBase: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QFutureWatcherBase)
+16 (int (*)(...))QFutureWatcherBase::metaObject
+24 (int (*)(...))QFutureWatcherBase::qt_metacast
+32 (int (*)(...))QFutureWatcherBase::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QFutureWatcherBase::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QFutureWatcherBase::connectNotify
+104 (int (*)(...))QFutureWatcherBase::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QFutureWatcherBase
+ size=16 align=8
+ base size=16 base align=8
+QFutureWatcherBase (0x0x7f0b42320c30) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+ QObject (0x0x7f0b423901e0) 0
+ primary-for QFutureWatcherBase (0x0x7f0b42320c30)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f0b42390780) 0 empty
+
+Vtable for QIdentityProxyModel
+QIdentityProxyModel::_ZTV19QIdentityProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QIdentityProxyModel)
+16 (int (*)(...))QIdentityProxyModel::metaObject
+24 (int (*)(...))QIdentityProxyModel::qt_metacast
+32 (int (*)(...))QIdentityProxyModel::qt_metacall
+40 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+48 (int (*)(...))QIdentityProxyModel::~QIdentityProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIdentityProxyModel::index
+120 (int (*)(...))QIdentityProxyModel::parent
+128 (int (*)(...))QIdentityProxyModel::sibling
+136 (int (*)(...))QIdentityProxyModel::rowCount
+144 (int (*)(...))QIdentityProxyModel::columnCount
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QIdentityProxyModel::headerData
+184 (int (*)(...))QAbstractProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QIdentityProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QIdentityProxyModel::insertRows
+272 (int (*)(...))QIdentityProxyModel::insertColumns
+280 (int (*)(...))QIdentityProxyModel::removeRows
+288 (int (*)(...))QIdentityProxyModel::removeColumns
+296 (int (*)(...))QIdentityProxyModel::moveRows
+304 (int (*)(...))QIdentityProxyModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QAbstractProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QIdentityProxyModel::match
+360 (int (*)(...))QAbstractProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QIdentityProxyModel::setSourceModel
+416 (int (*)(...))QIdentityProxyModel::mapToSource
+424 (int (*)(...))QIdentityProxyModel::mapFromSource
+432 (int (*)(...))QIdentityProxyModel::mapSelectionToSource
+440 (int (*)(...))QIdentityProxyModel::mapSelectionFromSource
+
+Class QIdentityProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QIdentityProxyModel (0x0x7f0b42320e38) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f0b42320ea0) 0
+ primary-for QIdentityProxyModel (0x0x7f0b42320e38)
+ QAbstractItemModel (0x0x7f0b42320f08) 0
+ primary-for QAbstractProxyModel (0x0x7f0b42320ea0)
+ QObject (0x0x7f0b42390720) 0
+ primary-for QAbstractItemModel (0x0x7f0b42320f08)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f0b42390900) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f0b4241f540) 0 empty
+
+Vtable for QItemSelectionModel
+QItemSelectionModel::_ZTV19QItemSelectionModel: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QItemSelectionModel)
+16 (int (*)(...))QItemSelectionModel::metaObject
+24 (int (*)(...))QItemSelectionModel::qt_metacast
+32 (int (*)(...))QItemSelectionModel::qt_metacall
+40 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+48 (int (*)(...))QItemSelectionModel::~QItemSelectionModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QItemSelectionModel::setCurrentIndex
+120 (int (*)(...))QItemSelectionModel::select
+128 (int (*)(...))QItemSelectionModel::select
+136 (int (*)(...))QItemSelectionModel::clear
+144 (int (*)(...))QItemSelectionModel::reset
+152 (int (*)(...))QItemSelectionModel::clearCurrentIndex
+
+Class QItemSelectionModel
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionModel (0x0x7f0b42418d00) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+ QObject (0x0x7f0b4241f4e0) 0
+ primary-for QItemSelectionModel (0x0x7f0b42418d00)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7f0b42080208) 0
+ QList<QItemSelectionRange> (0x0x7f0b42080270) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7f0b420802d8) 0 empty
+ QListSpecialMethodsBase<QItemSelectionRange> (0x0x7f0b4241ff00) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7f0b42175120) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7f0b42175600) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7f0b421d3960) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7f0b421d39c0) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7f0b421d3900) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f0b41e813c0) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f0b41e81420) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7f0b42015960) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7f0b420159c0) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7f0b42015900) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f0b41cd04e0) 0 empty
+
+Vtable for QLibrary
+QLibrary::_ZTV8QLibrary: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QLibrary)
+16 (int (*)(...))QLibrary::metaObject
+24 (int (*)(...))QLibrary::qt_metacast
+32 (int (*)(...))QLibrary::qt_metacall
+40 (int (*)(...))QLibrary::~QLibrary
+48 (int (*)(...))QLibrary::~QLibrary
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QLibrary
+ size=24 align=8
+ base size=24 base align=8
+QLibrary (0x0x7f0b41cc9b60) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+ QObject (0x0x7f0b41cd0480) 0
+ primary-for QLibrary (0x0x7f0b41cc9b60)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f0b41cd0ba0) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f0b41cd0b40) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7f0b41ded360) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f0b41a85ba0) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f0b41a85c60) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f0b41b07360) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f0b41b64cc0) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f0b41bcc300) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f0b41c1dae0) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f0b418612a0) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f0b418afba0) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f0b4193f900) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7f0b4193f9c0) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7f0b4193f960) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7f0b419b9c00) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7f0b419b9ba0) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7f0b419fc960) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f0b419fc900) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7f0b41a27000) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7f0b419fc9c0) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f0b41a46e40) 0 empty
+
+Vtable for QMimeData
+QMimeData::_ZTV9QMimeData: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QMimeData)
+16 (int (*)(...))QMimeData::metaObject
+24 (int (*)(...))QMimeData::qt_metacast
+32 (int (*)(...))QMimeData::qt_metacall
+40 (int (*)(...))QMimeData::~QMimeData
+48 (int (*)(...))QMimeData::~QMimeData
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QMimeData::hasFormat
+120 (int (*)(...))QMimeData::formats
+128 (int (*)(...))QMimeData::retrieveData
+
+Class QMimeData
+ size=16 align=8
+ base size=16 base align=8
+QMimeData (0x0x7f0b41656680) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+ QObject (0x0x7f0b41a46de0) 0
+ primary-for QMimeData (0x0x7f0b41656680)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f0b41a46ba0) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f0b416dbae0) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f0b416dbba0) 0 empty
+
+Vtable for QObjectCleanupHandler
+QObjectCleanupHandler::_ZTV21QObjectCleanupHandler: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QObjectCleanupHandler)
+16 (int (*)(...))QObjectCleanupHandler::metaObject
+24 (int (*)(...))QObjectCleanupHandler::qt_metacast
+32 (int (*)(...))QObjectCleanupHandler::qt_metacall
+40 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+48 (int (*)(...))QObjectCleanupHandler::~QObjectCleanupHandler
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QObjectCleanupHandler
+ size=40 align=8
+ base size=40 base align=8
+QObjectCleanupHandler (0x0x7f0b416e4548) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+ QObject (0x0x7f0b416dbb40) 0
+ primary-for QObjectCleanupHandler (0x0x7f0b416e4548)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f0b416dbc60) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f0b41731a80) 0 empty
+
+Vtable for QParallelAnimationGroup
+QParallelAnimationGroup::_ZTV23QParallelAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QParallelAnimationGroup)
+16 (int (*)(...))QParallelAnimationGroup::metaObject
+24 (int (*)(...))QParallelAnimationGroup::qt_metacast
+32 (int (*)(...))QParallelAnimationGroup::qt_metacall
+40 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+48 (int (*)(...))QParallelAnimationGroup::~QParallelAnimationGroup
+56 (int (*)(...))QParallelAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QParallelAnimationGroup::duration
+120 (int (*)(...))QParallelAnimationGroup::updateCurrentTime
+128 (int (*)(...))QParallelAnimationGroup::updateState
+136 (int (*)(...))QParallelAnimationGroup::updateDirection
+
+Class QParallelAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QParallelAnimationGroup (0x0x7f0b41730f70) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f0b41748000) 0
+ primary-for QParallelAnimationGroup (0x0x7f0b41730f70)
+ QAbstractAnimation (0x0x7f0b41748068) 0
+ primary-for QAnimationGroup (0x0x7f0b41748000)
+ QObject (0x0x7f0b41731a20) 0
+ primary-for QAbstractAnimation (0x0x7f0b41748068)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f0b41731c60) 0 empty
+
+Vtable for QPauseAnimation
+QPauseAnimation::_ZTV15QPauseAnimation: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QPauseAnimation)
+16 (int (*)(...))QPauseAnimation::metaObject
+24 (int (*)(...))QPauseAnimation::qt_metacast
+32 (int (*)(...))QPauseAnimation::qt_metacall
+40 (int (*)(...))QPauseAnimation::~QPauseAnimation
+48 (int (*)(...))QPauseAnimation::~QPauseAnimation
+56 (int (*)(...))QPauseAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPauseAnimation::duration
+120 (int (*)(...))QPauseAnimation::updateCurrentTime
+128 (int (*)(...))QAbstractAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+
+Class QPauseAnimation
+ size=16 align=8
+ base size=16 base align=8
+QPauseAnimation (0x0x7f0b417480d0) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+ QAbstractAnimation (0x0x7f0b41748138) 0
+ primary-for QPauseAnimation (0x0x7f0b417480d0)
+ QObject (0x0x7f0b41731c00) 0
+ primary-for QAbstractAnimation (0x0x7f0b41748138)
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7f0b41731e40) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7f0b41731ea0) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f0b41788900) 0 empty
+
+Vtable for QPluginLoader
+QPluginLoader::_ZTV13QPluginLoader: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPluginLoader)
+16 (int (*)(...))QPluginLoader::metaObject
+24 (int (*)(...))QPluginLoader::qt_metacast
+32 (int (*)(...))QPluginLoader::qt_metacall
+40 (int (*)(...))QPluginLoader::~QPluginLoader
+48 (int (*)(...))QPluginLoader::~QPluginLoader
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPluginLoader
+ size=32 align=8
+ base size=25 base align=8
+QPluginLoader (0x0x7f0b4178bd00) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+ QObject (0x0x7f0b417888a0) 0
+ primary-for QPluginLoader (0x0x7f0b4178bd00)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f0b417889c0) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f0b41813240) 0 empty
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7f0b418132a0) 0 empty
+
+Vtable for QProcess
+QProcess::_ZTV8QProcess: 32 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QProcess)
+16 (int (*)(...))QProcess::metaObject
+24 (int (*)(...))QProcess::qt_metacast
+32 (int (*)(...))QProcess::qt_metacall
+40 (int (*)(...))QProcess::~QProcess
+48 (int (*)(...))QProcess::~QProcess
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QProcess::isSequential
+120 (int (*)(...))QProcess::open
+128 (int (*)(...))QProcess::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QProcess::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QProcess::waitForReadyRead
+208 (int (*)(...))QProcess::waitForBytesWritten
+216 (int (*)(...))QProcess::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QProcess::writeData
+248 (int (*)(...))QProcess::setupChildProcess
+
+Class QProcess
+ size=16 align=8
+ base size=16 base align=8
+QProcess (0x0x7f0b41808dd0) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+ QIODevice (0x0x7f0b4173bb60) 0
+ primary-for QProcess (0x0x7f0b41808dd0)
+ QObject (0x0x7f0b41813180) 0
+ primary-for QIODevice (0x0x7f0b4173bb60)
+ QIODeviceBase (0x0x7f0b418131e0) 0 empty
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f0b4145a060) 0 empty
+
+Vtable for QVariantAnimation
+QVariantAnimation::_ZTV17QVariantAnimation: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QVariantAnimation)
+16 (int (*)(...))QVariantAnimation::metaObject
+24 (int (*)(...))QVariantAnimation::qt_metacast
+32 (int (*)(...))QVariantAnimation::qt_metacall
+40 (int (*)(...))QVariantAnimation::~QVariantAnimation
+48 (int (*)(...))QVariantAnimation::~QVariantAnimation
+56 (int (*)(...))QVariantAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QVariantAnimation::duration
+120 (int (*)(...))QVariantAnimation::updateCurrentTime
+128 (int (*)(...))QVariantAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+144 (int (*)(...))QVariantAnimation::updateCurrentValue
+152 (int (*)(...))QVariantAnimation::interpolated
+
+Class QVariantAnimation
+ size=16 align=8
+ base size=16 base align=8
+QVariantAnimation (0x0x7f0b41808e38) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+ QAbstractAnimation (0x0x7f0b41808ea0) 0
+ primary-for QVariantAnimation (0x0x7f0b41808e38)
+ QObject (0x0x7f0b4145a000) 0
+ primary-for QAbstractAnimation (0x0x7f0b41808ea0)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f0b41fc0120) 0 empty
+
+Vtable for QPropertyAnimation
+QPropertyAnimation::_ZTV18QPropertyAnimation: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QPropertyAnimation)
+16 (int (*)(...))QPropertyAnimation::metaObject
+24 (int (*)(...))QPropertyAnimation::qt_metacast
+32 (int (*)(...))QPropertyAnimation::qt_metacall
+40 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+48 (int (*)(...))QPropertyAnimation::~QPropertyAnimation
+56 (int (*)(...))QPropertyAnimation::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QVariantAnimation::duration
+120 (int (*)(...))QVariantAnimation::updateCurrentTime
+128 (int (*)(...))QPropertyAnimation::updateState
+136 (int (*)(...))QAbstractAnimation::updateDirection
+144 (int (*)(...))QPropertyAnimation::updateCurrentValue
+152 (int (*)(...))QVariantAnimation::interpolated
+
+Class QPropertyAnimation
+ size=16 align=8
+ base size=16 base align=8
+QPropertyAnimation (0x0x7f0b42c375b0) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+ QVariantAnimation (0x0x7f0b42c37680) 0
+ primary-for QPropertyAnimation (0x0x7f0b42c375b0)
+ QAbstractAnimation (0x0x7f0b42c376e8) 0
+ primary-for QVariantAnimation (0x0x7f0b42c37680)
+ QObject (0x0x7f0b41fc0060) 0
+ primary-for QAbstractAnimation (0x0x7f0b42c376e8)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f0b4cee2000) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f0b4a34d7e0) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f0b4a34d780) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f0b44c13a20) 0
+
+Class QRandomGenerator::InitialRandomData
+ size=16 align=8
+ base size=16 base align=8
+QRandomGenerator::InitialRandomData (0x0x7f0b4262f0c0) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f0b4262f180) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f0b4262f000) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f0b4c8b9c98) 0
+ QRandomGenerator (0x0x7f0b41dd5540) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f0b41b8d600) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f0b41baa4e0) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f0b41861a80) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f0b419163c0) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f0b42f5d540) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f0b454f2000) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f0b4db8bde0) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f0b4b427960) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f0b4b427c60) 0 empty
+
+Vtable for QSaveFile
+QSaveFile::_ZTV9QSaveFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSaveFile)
+16 (int (*)(...))QSaveFile::metaObject
+24 (int (*)(...))QSaveFile::qt_metacast
+32 (int (*)(...))QSaveFile::qt_metacall
+40 (int (*)(...))QSaveFile::~QSaveFile
+48 (int (*)(...))QSaveFile::~QSaveFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QSaveFile::open
+128 (int (*)(...))QSaveFile::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFileDevice::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QSaveFile::writeData
+248 (int (*)(...))QSaveFile::fileName
+256 (int (*)(...))QFileDevice::resize
+264 (int (*)(...))QFileDevice::permissions
+272 (int (*)(...))QFileDevice::setPermissions
+
+Class QSaveFile
+ size=16 align=8
+ base size=16 base align=8
+QSaveFile (0x0x7f0b4cb5a068) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+ QFileDevice (0x0x7f0b4cb5a0d0) 0
+ primary-for QSaveFile (0x0x7f0b4cb5a068)
+ QIODevice (0x0x7f0b4535c4d0) 0
+ primary-for QFileDevice (0x0x7f0b4cb5a0d0)
+ QObject (0x0x7f0b4b427ba0) 0
+ primary-for QIODevice (0x0x7f0b4535c4d0)
+ QIODeviceBase (0x0x7f0b4b427c00) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f0b4af23000) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f0b4a5477e0) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f0b4a591540) 0 empty
+
+Vtable for QSequentialAnimationGroup
+QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QSequentialAnimationGroup)
+16 (int (*)(...))QSequentialAnimationGroup::metaObject
+24 (int (*)(...))QSequentialAnimationGroup::qt_metacast
+32 (int (*)(...))QSequentialAnimationGroup::qt_metacall
+40 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+48 (int (*)(...))QSequentialAnimationGroup::~QSequentialAnimationGroup
+56 (int (*)(...))QSequentialAnimationGroup::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSequentialAnimationGroup::duration
+120 (int (*)(...))QSequentialAnimationGroup::updateCurrentTime
+128 (int (*)(...))QSequentialAnimationGroup::updateState
+136 (int (*)(...))QSequentialAnimationGroup::updateDirection
+
+Class QSequentialAnimationGroup
+ size=16 align=8
+ base size=16 base align=8
+QSequentialAnimationGroup (0x0x7f0b4cbaaa28) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f0b4cbaaa90) 0
+ primary-for QSequentialAnimationGroup (0x0x7f0b4cbaaa28)
+ QAbstractAnimation (0x0x7f0b4cbaab60) 0
+ primary-for QAnimationGroup (0x0x7f0b4cbaaa90)
+ QObject (0x0x7f0b4a5914e0) 0
+ primary-for QAbstractAnimation (0x0x7f0b4cbaab60)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7f0b4cbaabc8) 0
+ QIterator<QMetaSequence> (0x0x7f0b4cbaad00) 0
+ QBaseIterator<QMetaSequence> (0x0x7f0b4a5918a0) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7f0b4cbaadd0) 0
+ QConstIterator<QMetaSequence> (0x0x7f0b4cbaae38) 0
+ QBaseIterator<QMetaSequence> (0x0x7f0b4a591e40) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7f0b4cbaaea0) 0
+ QIterable<QMetaSequence> (0x0x7f0b49ccc360) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f0b49d6d960) 0 empty
+
+Vtable for QSettings
+QSettings::_ZTV9QSettings: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSettings)
+16 (int (*)(...))QSettings::metaObject
+24 (int (*)(...))QSettings::qt_metacast
+32 (int (*)(...))QSettings::qt_metacall
+40 (int (*)(...))QSettings::~QSettings
+48 (int (*)(...))QSettings::~QSettings
+56 (int (*)(...))QSettings::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSettings
+ size=16 align=8
+ base size=16 base align=8
+QSettings (0x0x7f0b4c96c410) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+ QObject (0x0x7f0b49d6d900) 0
+ primary-for QSettings (0x0x7f0b4c96c410)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f0b49d6dd80) 0 empty
+
+Vtable for QSharedMemory
+QSharedMemory::_ZTV13QSharedMemory: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSharedMemory)
+16 (int (*)(...))QSharedMemory::metaObject
+24 (int (*)(...))QSharedMemory::qt_metacast
+32 (int (*)(...))QSharedMemory::qt_metacall
+40 (int (*)(...))QSharedMemory::~QSharedMemory
+48 (int (*)(...))QSharedMemory::~QSharedMemory
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSharedMemory
+ size=16 align=8
+ base size=16 base align=8
+QSharedMemory (0x0x7f0b4c96c478) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+ QObject (0x0x7f0b49d6dd20) 0
+ primary-for QSharedMemory (0x0x7f0b4c96c478)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f0b49d6df60) 0 empty
+
+Vtable for QSignalMapper
+QSignalMapper::_ZTV13QSignalMapper: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSignalMapper)
+16 (int (*)(...))QSignalMapper::metaObject
+24 (int (*)(...))QSignalMapper::qt_metacast
+32 (int (*)(...))QSignalMapper::qt_metacall
+40 (int (*)(...))QSignalMapper::~QSignalMapper
+48 (int (*)(...))QSignalMapper::~QSignalMapper
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSignalMapper
+ size=16 align=8
+ base size=16 base align=8
+QSignalMapper (0x0x7f0b4c96c548) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+ QObject (0x0x7f0b49d6df00) 0
+ primary-for QSignalMapper (0x0x7f0b4c96c548)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f0b40edf9c0) 0 empty
+
+Vtable for QSocketNotifier
+QSocketNotifier::_ZTV15QSocketNotifier: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSocketNotifier)
+16 (int (*)(...))QSocketNotifier::metaObject
+24 (int (*)(...))QSocketNotifier::qt_metacast
+32 (int (*)(...))QSocketNotifier::qt_metacall
+40 (int (*)(...))QSocketNotifier::~QSocketNotifier
+48 (int (*)(...))QSocketNotifier::~QSocketNotifier
+56 (int (*)(...))QSocketNotifier::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSocketNotifier
+ size=16 align=8
+ base size=16 base align=8
+QSocketNotifier (0x0x7f0b4c978ea0) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+ QObject (0x0x7f0b40edf960) 0
+ primary-for QSocketNotifier (0x0x7f0b4c978ea0)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7f0b40edfb40) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f0b40f0e4e0) 0 empty
+
+Vtable for QSortFilterProxyModel
+QSortFilterProxyModel::_ZTV21QSortFilterProxyModel: 59 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QSortFilterProxyModel)
+16 (int (*)(...))QSortFilterProxyModel::metaObject
+24 (int (*)(...))QSortFilterProxyModel::qt_metacast
+32 (int (*)(...))QSortFilterProxyModel::qt_metacall
+40 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+48 (int (*)(...))QSortFilterProxyModel::~QSortFilterProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QSortFilterProxyModel::index
+120 (int (*)(...))QSortFilterProxyModel::parent
+128 (int (*)(...))QSortFilterProxyModel::sibling
+136 (int (*)(...))QSortFilterProxyModel::rowCount
+144 (int (*)(...))QSortFilterProxyModel::columnCount
+152 (int (*)(...))QSortFilterProxyModel::hasChildren
+160 (int (*)(...))QSortFilterProxyModel::data
+168 (int (*)(...))QSortFilterProxyModel::setData
+176 (int (*)(...))QSortFilterProxyModel::headerData
+184 (int (*)(...))QSortFilterProxyModel::setHeaderData
+192 (int (*)(...))QAbstractProxyModel::itemData
+200 (int (*)(...))QAbstractProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QSortFilterProxyModel::mimeTypes
+224 (int (*)(...))QSortFilterProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QSortFilterProxyModel::dropMimeData
+248 (int (*)(...))QSortFilterProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QSortFilterProxyModel::insertRows
+272 (int (*)(...))QSortFilterProxyModel::insertColumns
+280 (int (*)(...))QSortFilterProxyModel::removeRows
+288 (int (*)(...))QSortFilterProxyModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QSortFilterProxyModel::fetchMore
+320 (int (*)(...))QSortFilterProxyModel::canFetchMore
+328 (int (*)(...))QSortFilterProxyModel::flags
+336 (int (*)(...))QSortFilterProxyModel::sort
+344 (int (*)(...))QSortFilterProxyModel::buddy
+352 (int (*)(...))QSortFilterProxyModel::match
+360 (int (*)(...))QSortFilterProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QSortFilterProxyModel::setSourceModel
+416 (int (*)(...))QSortFilterProxyModel::mapToSource
+424 (int (*)(...))QSortFilterProxyModel::mapFromSource
+432 (int (*)(...))QSortFilterProxyModel::mapSelectionToSource
+440 (int (*)(...))QSortFilterProxyModel::mapSelectionFromSource
+448 (int (*)(...))QSortFilterProxyModel::filterAcceptsRow
+456 (int (*)(...))QSortFilterProxyModel::filterAcceptsColumn
+464 (int (*)(...))QSortFilterProxyModel::lessThan
+
+Class QSortFilterProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QSortFilterProxyModel (0x0x7f0b4c9819c0) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f0b4c981a90) 0
+ primary-for QSortFilterProxyModel (0x0x7f0b4c9819c0)
+ QAbstractItemModel (0x0x7f0b4c981af8) 0
+ primary-for QAbstractProxyModel (0x0x7f0b4c981a90)
+ QObject (0x0x7f0b40f0e480) 0
+ primary-for QAbstractItemModel (0x0x7f0b4c981af8)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f0b40f0e8a0) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f0b40f372a0) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f0b40f69ae0) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f0b40faa360) 0 empty
+
+Vtable for QStringListModel
+QStringListModel::_ZTV16QStringListModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QStringListModel)
+16 (int (*)(...))QStringListModel::metaObject
+24 (int (*)(...))QStringListModel::qt_metacast
+32 (int (*)(...))QStringListModel::qt_metacall
+40 (int (*)(...))QStringListModel::~QStringListModel
+48 (int (*)(...))QStringListModel::~QStringListModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractListModel::index
+120 (int (*)(...))QAbstractListModel::parent
+128 (int (*)(...))QStringListModel::sibling
+136 (int (*)(...))QStringListModel::rowCount
+144 (int (*)(...))QAbstractListModel::columnCount
+152 (int (*)(...))QAbstractListModel::hasChildren
+160 (int (*)(...))QStringListModel::data
+168 (int (*)(...))QStringListModel::setData
+176 (int (*)(...))QAbstractItemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QStringListModel::itemData
+200 (int (*)(...))QStringListModel::setItemData
+208 (int (*)(...))QStringListModel::clearItemData
+216 (int (*)(...))QAbstractItemModel::mimeTypes
+224 (int (*)(...))QAbstractItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QAbstractListModel::dropMimeData
+248 (int (*)(...))QStringListModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStringListModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QStringListModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QStringListModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStringListModel::flags
+336 (int (*)(...))QStringListModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QAbstractItemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QStringListModel
+ size=40 align=8
+ base size=40 base align=8
+QStringListModel (0x0x7f0b4c99d6e8) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+ QAbstractListModel (0x0x7f0b4c99d750) 0
+ primary-for QStringListModel (0x0x7f0b4c99d6e8)
+ QAbstractItemModel (0x0x7f0b4c99d7b8) 0
+ primary-for QAbstractListModel (0x0x7f0b4c99d750)
+ QObject (0x0x7f0b40faa300) 0
+ primary-for QAbstractItemModel (0x0x7f0b4c99d7b8)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f0b40faa420) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f0b40faa540) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f0b40faa6c0) 0 empty
+
+Vtable for QTemporaryFile
+QTemporaryFile::_ZTV14QTemporaryFile: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QTemporaryFile)
+16 (int (*)(...))QTemporaryFile::metaObject
+24 (int (*)(...))QTemporaryFile::qt_metacast
+32 (int (*)(...))QTemporaryFile::qt_metacall
+40 (int (*)(...))QTemporaryFile::~QTemporaryFile
+48 (int (*)(...))QTemporaryFile::~QTemporaryFile
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileDevice::isSequential
+120 (int (*)(...))QTemporaryFile::open
+128 (int (*)(...))QFileDevice::close
+136 (int (*)(...))QFileDevice::pos
+144 (int (*)(...))QFile::size
+152 (int (*)(...))QFileDevice::seek
+160 (int (*)(...))QFileDevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QIODevice::bytesAvailable
+184 (int (*)(...))QIODevice::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QIODevice::waitForReadyRead
+208 (int (*)(...))QIODevice::waitForBytesWritten
+216 (int (*)(...))QFileDevice::readData
+224 (int (*)(...))QFileDevice::readLineData
+232 (int (*)(...))QIODevice::skipData
+240 (int (*)(...))QFileDevice::writeData
+248 (int (*)(...))QTemporaryFile::fileName
+256 (int (*)(...))QFile::resize
+264 (int (*)(...))QFile::permissions
+272 (int (*)(...))QFile::setPermissions
+
+Class QTemporaryFile
+ size=16 align=8
+ base size=16 base align=8
+QTemporaryFile (0x0x7f0b4c99d888) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+ QFile (0x0x7f0b4c99d8f0) 0
+ primary-for QTemporaryFile (0x0x7f0b4c99d888)
+ QFileDevice (0x0x7f0b4c99d958) 0
+ primary-for QFile (0x0x7f0b4c99d8f0)
+ QIODevice (0x0x7f0b40f91af0) 0
+ primary-for QFileDevice (0x0x7f0b4c99d958)
+ QObject (0x0x7f0b40faa600) 0
+ primary-for QIODevice (0x0x7f0b40f91af0)
+ QIODeviceBase (0x0x7f0b40faa660) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7f0b40faa900) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f0b40faaf60) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f0b40fe6660) 0 empty
+
+Vtable for QTimeLine
+QTimeLine::_ZTV9QTimeLine: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTimeLine)
+16 (int (*)(...))QTimeLine::metaObject
+24 (int (*)(...))QTimeLine::qt_metacast
+32 (int (*)(...))QTimeLine::qt_metacall
+40 (int (*)(...))QTimeLine::~QTimeLine
+48 (int (*)(...))QTimeLine::~QTimeLine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTimeLine::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTimeLine::valueForTime
+
+Class QTimeLine
+ size=16 align=8
+ base size=16 base align=8
+QTimeLine (0x0x7f0b4c99db60) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+ QObject (0x0x7f0b40fe6600) 0
+ primary-for QTimeLine (0x0x7f0b4c99db60)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f0b40fe6840) 0 empty
+
+Vtable for QTimer
+QTimer::_ZTV6QTimer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QTimer)
+16 (int (*)(...))QTimer::metaObject
+24 (int (*)(...))QTimer::qt_metacast
+32 (int (*)(...))QTimer::qt_metacall
+40 (int (*)(...))QTimer::~QTimer
+48 (int (*)(...))QTimer::~QTimer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTimer::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTimer
+ size=16 align=8
+ base size=16 base align=8
+QTimer (0x0x7f0b4c99dbc8) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+ QObject (0x0x7f0b40fe67e0) 0
+ primary-for QTimer (0x0x7f0b4c99dbc8)
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7f0b410051e0) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f0b41005180) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f0b41036240) 0 empty
+
+Vtable for QTranslator
+QTranslator::_ZTV11QTranslator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTranslator)
+16 (int (*)(...))QTranslator::metaObject
+24 (int (*)(...))QTranslator::qt_metacast
+32 (int (*)(...))QTranslator::qt_metacall
+40 (int (*)(...))QTranslator::~QTranslator
+48 (int (*)(...))QTranslator::~QTranslator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTranslator::translate
+120 (int (*)(...))QTranslator::isEmpty
+
+Class QTranslator
+ size=16 align=8
+ base size=16 base align=8
+QTranslator (0x0x7f0b4c9a4b60) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+ QObject (0x0x7f0b410361e0) 0
+ primary-for QTranslator (0x0x7f0b4c9a4b60)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7f0b41036420) 0 empty
+
+Vtable for QTransposeProxyModel
+QTransposeProxyModel::_ZTV20QTransposeProxyModel: 56 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTransposeProxyModel)
+16 (int (*)(...))QTransposeProxyModel::metaObject
+24 (int (*)(...))QTransposeProxyModel::qt_metacast
+32 (int (*)(...))QTransposeProxyModel::qt_metacall
+40 (int (*)(...))QTransposeProxyModel::~QTransposeProxyModel
+48 (int (*)(...))QTransposeProxyModel::~QTransposeProxyModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTransposeProxyModel::index
+120 (int (*)(...))QTransposeProxyModel::parent
+128 (int (*)(...))QAbstractProxyModel::sibling
+136 (int (*)(...))QTransposeProxyModel::rowCount
+144 (int (*)(...))QTransposeProxyModel::columnCount
+152 (int (*)(...))QAbstractProxyModel::hasChildren
+160 (int (*)(...))QAbstractProxyModel::data
+168 (int (*)(...))QAbstractProxyModel::setData
+176 (int (*)(...))QTransposeProxyModel::headerData
+184 (int (*)(...))QTransposeProxyModel::setHeaderData
+192 (int (*)(...))QTransposeProxyModel::itemData
+200 (int (*)(...))QTransposeProxyModel::setItemData
+208 (int (*)(...))QAbstractProxyModel::clearItemData
+216 (int (*)(...))QAbstractProxyModel::mimeTypes
+224 (int (*)(...))QAbstractProxyModel::mimeData
+232 (int (*)(...))QAbstractProxyModel::canDropMimeData
+240 (int (*)(...))QAbstractProxyModel::dropMimeData
+248 (int (*)(...))QAbstractProxyModel::supportedDropActions
+256 (int (*)(...))QAbstractProxyModel::supportedDragActions
+264 (int (*)(...))QTransposeProxyModel::insertRows
+272 (int (*)(...))QTransposeProxyModel::insertColumns
+280 (int (*)(...))QTransposeProxyModel::removeRows
+288 (int (*)(...))QTransposeProxyModel::removeColumns
+296 (int (*)(...))QTransposeProxyModel::moveRows
+304 (int (*)(...))QTransposeProxyModel::moveColumns
+312 (int (*)(...))QAbstractProxyModel::fetchMore
+320 (int (*)(...))QAbstractProxyModel::canFetchMore
+328 (int (*)(...))QAbstractProxyModel::flags
+336 (int (*)(...))QTransposeProxyModel::sort
+344 (int (*)(...))QAbstractProxyModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QTransposeProxyModel::span
+368 (int (*)(...))QAbstractProxyModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractProxyModel::submit
+392 (int (*)(...))QAbstractProxyModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+408 (int (*)(...))QTransposeProxyModel::setSourceModel
+416 (int (*)(...))QTransposeProxyModel::mapToSource
+424 (int (*)(...))QTransposeProxyModel::mapFromSource
+432 (int (*)(...))QAbstractProxyModel::mapSelectionToSource
+440 (int (*)(...))QAbstractProxyModel::mapSelectionFromSource
+
+Class QTransposeProxyModel
+ size=16 align=8
+ base size=16 base align=8
+QTransposeProxyModel (0x0x7f0b4c9a4bc8) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f0b4c9a4c30) 0
+ primary-for QTransposeProxyModel (0x0x7f0b4c9a4bc8)
+ QAbstractItemModel (0x0x7f0b4c9a4c98) 0
+ primary-for QAbstractProxyModel (0x0x7f0b4c9a4c30)
+ QObject (0x0x7f0b410363c0) 0
+ primary-for QAbstractItemModel (0x0x7f0b4c9a4c98)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f0b410365a0) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f0b40c88de0) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7f0b40c88f00) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7f0b40c9fd80) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7f0b4c9c08f0) 0
+ QList<QXmlStreamAttribute> (0x0x7f0b4c9c0888) 0
+ QListSpecialMethods<QXmlStreamAttribute> (0x0x7f0b4c9c09c0) 0 empty
+ QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7f0b40cb9e40) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f0b40cea6c0) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7f0b40cf7d80) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7f0b40d10420) 0
+
+Vtable for QXmlStreamEntityResolver
+QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QXmlStreamEntityResolver)
+16 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+24 (int (*)(...))QXmlStreamEntityResolver::~QXmlStreamEntityResolver
+32 (int (*)(...))QXmlStreamEntityResolver::resolveEntity
+40 (int (*)(...))QXmlStreamEntityResolver::resolveUndeclaredEntity
+
+Class QXmlStreamEntityResolver
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamEntityResolver (0x0x7f0b40d1cba0) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f0b40d1cc00) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f0b40d3b1e0) 0
+
+Vtable for QPaintDevice
+QPaintDevice::_ZTV12QPaintDevice: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDevice
+ size=16 align=8
+ base size=10 base align=8
+QPaintDevice (0x0x7f0b40d3b3c0) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7f0b40d3be40) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7f0b40d87b40) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7f0b40d87ae0) 0
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7f0b40dc5ba0) 0
+
+Class QPolygon
+ size=24 align=8
+ base size=24 base align=8
+QPolygon (0x0x7f0b4c6c7888) 0
+ QList<QPoint> (0x0x7f0b4c6c78f0) 0
+ QListSpecialMethods<QPoint> (0x0x7f0b4c6c7958) 0 empty
+ QListSpecialMethodsBase<QPoint> (0x0x7f0b40df88a0) 0 empty
+
+Class QPolygonF
+ size=24 align=8
+ base size=24 base align=8
+QPolygonF (0x0x7f0b4c6cebc8) 0
+ QList<QPointF> (0x0x7f0b4c6ceb60) 0
+ QListSpecialMethods<QPointF> (0x0x7f0b4c6cec98) 0 empty
+ QListSpecialMethodsBase<QPointF> (0x0x7f0b40e4e4e0) 0 empty
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7f0b40a97cc0) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7f0b40a97c60) 0
+
+Class QTransform::Affine
+ size=8 align=8
+ base size=8 base align=8
+QTransform::Affine (0x0x7f0b40ad4240) 0
+
+Class QTransform
+ size=80 align=8
+ base size=74 base align=8
+QTransform (0x0x7f0b40ad41e0) 0
+
+Vtable for QImage
+QImage::_ZTV6QImage: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QImage)
+16 (int (*)(...))QImage::~QImage
+24 (int (*)(...))QImage::~QImage
+32 (int (*)(...))QImage::devType
+40 (int (*)(...))QImage::paintEngine
+48 (int (*)(...))QImage::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QImage
+ size=24 align=8
+ base size=24 base align=8
+QImage (0x0x7f0b4c6e5ea0) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+ QPaintDevice (0x0x7f0b40af8de0) 0
+ primary-for QImage (0x0x7f0b4c6e5ea0)
+
+Vtable for QPixmap
+QPixmap::_ZTV7QPixmap: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QPixmap)
+16 (int (*)(...))QPixmap::~QPixmap
+24 (int (*)(...))QPixmap::~QPixmap
+32 (int (*)(...))QPixmap::devType
+40 (int (*)(...))QPixmap::paintEngine
+48 (int (*)(...))QPixmap::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPixmap
+ size=24 align=8
+ base size=24 base align=8
+QPixmap (0x0x7f0b4c6f1340) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+ QPaintDevice (0x0x7f0b40b49600) 0
+ primary-for QPixmap (0x0x7f0b4c6f1340)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7f0b40b82240) 0
+
+Vtable for QAbstractFileIconProvider
+QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAbstractFileIconProvider)
+16 (int (*)(...))QAbstractFileIconProvider::~QAbstractFileIconProvider
+24 (int (*)(...))QAbstractFileIconProvider::~QAbstractFileIconProvider
+32 (int (*)(...))QAbstractFileIconProvider::icon
+40 (int (*)(...))QAbstractFileIconProvider::icon
+48 (int (*)(...))QAbstractFileIconProvider::type
+56 (int (*)(...))QAbstractFileIconProvider::setOptions
+64 (int (*)(...))QAbstractFileIconProvider::options
+
+Class QAbstractFileIconProvider
+ size=16 align=8
+ base size=16 base align=8
+QAbstractFileIconProvider (0x0x7f0b40baa5a0) 0
+ vptr=((& QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider) + 16)
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7f0b40baab40) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7f0b40be3900) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7f0b40c038a0) 0
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7f0b408703c0) 0 empty
+
+Vtable for QScreen
+QScreen::_ZTV7QScreen: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QScreen)
+16 (int (*)(...))QScreen::metaObject
+24 (int (*)(...))QScreen::qt_metacast
+32 (int (*)(...))QScreen::qt_metacall
+40 (int (*)(...))QScreen::~QScreen
+48 (int (*)(...))QScreen::~QScreen
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QScreen
+ size=16 align=8
+ base size=16 base align=8
+QScreen (0x0x7f0b45b0ec30) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+ QObject (0x0x7f0b40870360) 0
+ primary-for QScreen (0x0x7f0b45b0ec30)
+
+Class QInputDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDevice::QPrivateSignal (0x0x7f0b40870600) 0 empty
+
+Vtable for QInputDevice
+QInputDevice::_ZTV12QInputDevice: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputDevice)
+16 (int (*)(...))QInputDevice::metaObject
+24 (int (*)(...))QInputDevice::qt_metacast
+32 (int (*)(...))QInputDevice::qt_metacall
+40 (int (*)(...))QInputDevice::~QInputDevice
+48 (int (*)(...))QInputDevice::~QInputDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QInputDevice
+ size=16 align=8
+ base size=16 base align=8
+QInputDevice (0x0x7f0b45b0ee38) 0
+ vptr=((& QInputDevice::_ZTV12QInputDevice) + 16)
+ QObject (0x0x7f0b408705a0) 0
+ primary-for QInputDevice (0x0x7f0b45b0ee38)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7f0b408a60c0) 0
+
+Class QPointingDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPointingDevice::QPrivateSignal (0x0x7f0b408b5a20) 0 empty
+
+Vtable for QPointingDevice
+QPointingDevice::_ZTV15QPointingDevice: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QPointingDevice)
+16 (int (*)(...))QPointingDevice::metaObject
+24 (int (*)(...))QPointingDevice::qt_metacast
+32 (int (*)(...))QPointingDevice::qt_metacall
+40 (int (*)(...))QPointingDevice::~QPointingDevice
+48 (int (*)(...))QPointingDevice::~QPointingDevice
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPointingDevice
+ size=16 align=8
+ base size=16 base align=8
+QPointingDevice (0x0x7f0b4541c208) 0
+ vptr=((& QPointingDevice::_ZTV15QPointingDevice) + 16)
+ QInputDevice (0x0x7f0b4541c270) 0
+ primary-for QPointingDevice (0x0x7f0b4541c208)
+ QObject (0x0x7f0b408b59c0) 0
+ primary-for QInputDevice (0x0x7f0b4541c270)
+
+Class QEventPoint
+ size=8 align=8
+ base size=8 base align=8
+QEventPoint (0x0x7f0b408d3180) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7f0b409110c0) 0
+
+Vtable for QInputEvent
+QInputEvent::_ZTV11QInputEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QInputEvent)
+16 (int (*)(...))QInputEvent::~QInputEvent
+24 (int (*)(...))QInputEvent::~QInputEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QInputEvent
+ size=40 align=8
+ base size=40 base align=8
+QInputEvent (0x0x7f0b424f5958) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+ QEvent (0x0x7f0b4093e0c0) 0
+ primary-for QInputEvent (0x0x7f0b424f5958)
+
+Vtable for QPointerEvent
+QPointerEvent::_ZTV13QPointerEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPointerEvent)
+16 (int (*)(...))QPointerEvent::~QPointerEvent
+24 (int (*)(...))QPointerEvent::~QPointerEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QPointerEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QPointerEvent::isBeginEvent
+64 (int (*)(...))QPointerEvent::isUpdateEvent
+72 (int (*)(...))QPointerEvent::isEndEvent
+
+Class QPointerEvent
+ size=64 align=8
+ base size=64 base align=8
+QPointerEvent (0x0x7f0b424f5af8) 0
+ vptr=((& QPointerEvent::_ZTV13QPointerEvent) + 16)
+ QInputEvent (0x0x7f0b424f5d00) 0
+ primary-for QPointerEvent (0x0x7f0b424f5af8)
+ QEvent (0x0x7f0b4093e5a0) 0
+ primary-for QInputEvent (0x0x7f0b424f5d00)
+
+Vtable for QSinglePointEvent
+QSinglePointEvent::_ZTV17QSinglePointEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSinglePointEvent)
+16 (int (*)(...))QSinglePointEvent::~QSinglePointEvent
+24 (int (*)(...))QSinglePointEvent::~QSinglePointEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QSinglePointEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QSinglePointEvent
+ size=80 align=8
+ base size=80 base align=8
+QSinglePointEvent (0x0x7f0b423208f0) 0
+ vptr=((& QSinglePointEvent::_ZTV17QSinglePointEvent) + 16)
+ QPointerEvent (0x0x7f0b423d4138) 0
+ primary-for QSinglePointEvent (0x0x7f0b423208f0)
+ QInputEvent (0x0x7f0b423d41a0) 0
+ primary-for QPointerEvent (0x0x7f0b423d4138)
+ QEvent (0x0x7f0b4097f480) 0
+ primary-for QInputEvent (0x0x7f0b423d41a0)
+
+Vtable for QEnterEvent
+QEnterEvent::_ZTV11QEnterEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QEnterEvent)
+16 (int (*)(...))QEnterEvent::~QEnterEvent
+24 (int (*)(...))QEnterEvent::~QEnterEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QEnterEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QEnterEvent (0x0x7f0b423fc208) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+ QSinglePointEvent (0x0x7f0b423fc270) 0
+ primary-for QEnterEvent (0x0x7f0b423fc208)
+ QPointerEvent (0x0x7f0b423fc410) 0
+ primary-for QSinglePointEvent (0x0x7f0b423fc270)
+ QInputEvent (0x0x7f0b423fc5b0) 0
+ primary-for QPointerEvent (0x0x7f0b423fc410)
+ QEvent (0x0x7f0b4097f960) 0
+ primary-for QInputEvent (0x0x7f0b423fc5b0)
+
+Vtable for QMouseEvent
+QMouseEvent::_ZTV11QMouseEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMouseEvent)
+16 (int (*)(...))QMouseEvent::~QMouseEvent
+24 (int (*)(...))QMouseEvent::~QMouseEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QMouseEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QMouseEvent
+ size=80 align=8
+ base size=80 base align=8
+QMouseEvent (0x0x7f0b423fc618) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+ QSinglePointEvent (0x0x7f0b423fc7b8) 0
+ primary-for QMouseEvent (0x0x7f0b423fc618)
+ QPointerEvent (0x0x7f0b423fca28) 0
+ primary-for QSinglePointEvent (0x0x7f0b423fc7b8)
+ QInputEvent (0x0x7f0b423fca90) 0
+ primary-for QPointerEvent (0x0x7f0b423fca28)
+ QEvent (0x0x7f0b40997120) 0
+ primary-for QInputEvent (0x0x7f0b423fca90)
+
+Vtable for QHoverEvent
+QHoverEvent::_ZTV11QHoverEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHoverEvent)
+16 (int (*)(...))QHoverEvent::~QHoverEvent
+24 (int (*)(...))QHoverEvent::~QHoverEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QHoverEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QHoverEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QHoverEvent
+ size=96 align=8
+ base size=96 base align=8
+QHoverEvent (0x0x7f0b424181a0) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+ QSinglePointEvent (0x0x7f0b42418208) 0
+ primary-for QHoverEvent (0x0x7f0b424181a0)
+ QPointerEvent (0x0x7f0b424183a8) 0
+ primary-for QSinglePointEvent (0x0x7f0b42418208)
+ QInputEvent (0x0x7f0b424185b0) 0
+ primary-for QPointerEvent (0x0x7f0b424183a8)
+ QEvent (0x0x7f0b409976c0) 0
+ primary-for QInputEvent (0x0x7f0b424185b0)
+
+Vtable for QWheelEvent
+QWheelEvent::_ZTV11QWheelEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWheelEvent)
+16 (int (*)(...))QWheelEvent::~QWheelEvent
+24 (int (*)(...))QWheelEvent::~QWheelEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QWheelEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QWheelEvent::isBeginEvent
+64 (int (*)(...))QWheelEvent::isUpdateEvent
+72 (int (*)(...))QWheelEvent::isEndEvent
+
+Class QWheelEvent
+ size=96 align=8
+ base size=96 base align=8
+QWheelEvent (0x0x7f0b42418820) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+ QSinglePointEvent (0x0x7f0b42418af8) 0
+ primary-for QWheelEvent (0x0x7f0b42418820)
+ QPointerEvent (0x0x7f0b42418b60) 0
+ primary-for QSinglePointEvent (0x0x7f0b42418af8)
+ QInputEvent (0x0x7f0b420805b0) 0
+ primary-for QPointerEvent (0x0x7f0b42418b60)
+ QEvent (0x0x7f0b40997ae0) 0
+ primary-for QInputEvent (0x0x7f0b420805b0)
+
+Vtable for QTabletEvent
+QTabletEvent::_ZTV12QTabletEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTabletEvent)
+16 (int (*)(...))QTabletEvent::~QTabletEvent
+24 (int (*)(...))QTabletEvent::~QTabletEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QTabletEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QTabletEvent
+ size=96 align=8
+ base size=96 base align=8
+QTabletEvent (0x0x7f0b42080618) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+ QSinglePointEvent (0x0x7f0b42080dd0) 0
+ primary-for QTabletEvent (0x0x7f0b42080618)
+ QPointerEvent (0x0x7f0b42080e38) 0
+ primary-for QSinglePointEvent (0x0x7f0b42080dd0)
+ QInputEvent (0x0x7f0b420f6270) 0
+ primary-for QPointerEvent (0x0x7f0b42080e38)
+ QEvent (0x0x7f0b409b8000) 0
+ primary-for QInputEvent (0x0x7f0b420f6270)
+
+Vtable for QNativeGestureEvent
+QNativeGestureEvent::_ZTV19QNativeGestureEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNativeGestureEvent)
+16 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+24 (int (*)(...))QNativeGestureEvent::~QNativeGestureEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QNativeGestureEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QSinglePointEvent::isBeginEvent
+64 (int (*)(...))QSinglePointEvent::isUpdateEvent
+72 (int (*)(...))QSinglePointEvent::isEndEvent
+
+Class QNativeGestureEvent
+ size=112 align=8
+ base size=112 base align=8
+QNativeGestureEvent (0x0x7f0b420f62d8) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+ QSinglePointEvent (0x0x7f0b420f6c98) 0
+ primary-for QNativeGestureEvent (0x0x7f0b420f62d8)
+ QPointerEvent (0x0x7f0b420f6d00) 0
+ primary-for QSinglePointEvent (0x0x7f0b420f6c98)
+ QInputEvent (0x0x7f0b42156af8) 0
+ primary-for QPointerEvent (0x0x7f0b420f6d00)
+ QEvent (0x0x7f0b409b88a0) 0
+ primary-for QInputEvent (0x0x7f0b42156af8)
+
+Vtable for QKeyEvent
+QKeyEvent::_ZTV9QKeyEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QKeyEvent)
+16 (int (*)(...))QKeyEvent::~QKeyEvent
+24 (int (*)(...))QKeyEvent::~QKeyEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QKeyEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QKeyEvent
+ size=88 align=8
+ base size=82 base align=8
+QKeyEvent (0x0x7f0b42156b60) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+ QInputEvent (0x0x7f0b42156ea0) 0
+ primary-for QKeyEvent (0x0x7f0b42156b60)
+ QEvent (0x0x7f0b409b8e40) 0
+ primary-for QInputEvent (0x0x7f0b42156ea0)
+
+Vtable for QFocusEvent
+QFocusEvent::_ZTV11QFocusEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusEvent)
+16 (int (*)(...))QFocusEvent::~QFocusEvent
+24 (int (*)(...))QFocusEvent::~QFocusEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QFocusEvent::clone
+
+Class QFocusEvent
+ size=24 align=8
+ base size=20 base align=8
+QFocusEvent (0x0x7f0b42156f08) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+ QEvent (0x0x7f0b409da480) 0
+ primary-for QFocusEvent (0x0x7f0b42156f08)
+
+Vtable for QPaintEvent
+QPaintEvent::_ZTV11QPaintEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPaintEvent)
+16 (int (*)(...))QPaintEvent::~QPaintEvent
+24 (int (*)(...))QPaintEvent::~QPaintEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QPaintEvent::clone
+
+Class QPaintEvent
+ size=48 align=8
+ base size=41 base align=8
+QPaintEvent (0x0x7f0b421de4e0) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+ QEvent (0x0x7f0b409da7e0) 0
+ primary-for QPaintEvent (0x0x7f0b421de4e0)
+
+Vtable for QMoveEvent
+QMoveEvent::_ZTV10QMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QMoveEvent)
+16 (int (*)(...))QMoveEvent::~QMoveEvent
+24 (int (*)(...))QMoveEvent::~QMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QMoveEvent::clone
+
+Class QMoveEvent
+ size=32 align=8
+ base size=32 base align=8
+QMoveEvent (0x0x7f0b421de548) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+ QEvent (0x0x7f0b409daae0) 0
+ primary-for QMoveEvent (0x0x7f0b421de548)
+
+Vtable for QExposeEvent
+QExposeEvent::_ZTV12QExposeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QExposeEvent)
+16 (int (*)(...))QExposeEvent::~QExposeEvent
+24 (int (*)(...))QExposeEvent::~QExposeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QExposeEvent::clone
+
+Class QExposeEvent
+ size=24 align=8
+ base size=24 base align=8
+QExposeEvent (0x0x7f0b421de888) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+ QEvent (0x0x7f0b409dae40) 0
+ primary-for QExposeEvent (0x0x7f0b421de888)
+
+Vtable for QPlatformSurfaceEvent
+QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QPlatformSurfaceEvent)
+16 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+24 (int (*)(...))QPlatformSurfaceEvent::~QPlatformSurfaceEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QPlatformSurfaceEvent::clone
+
+Class QPlatformSurfaceEvent
+ size=24 align=8
+ base size=20 base align=8
+QPlatformSurfaceEvent (0x0x7f0b421de8f0) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+ QEvent (0x0x7f0b409f5120) 0
+ primary-for QPlatformSurfaceEvent (0x0x7f0b421de8f0)
+
+Vtable for QResizeEvent
+QResizeEvent::_ZTV12QResizeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QResizeEvent)
+16 (int (*)(...))QResizeEvent::~QResizeEvent
+24 (int (*)(...))QResizeEvent::~QResizeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QResizeEvent::clone
+
+Class QResizeEvent
+ size=32 align=8
+ base size=32 base align=8
+QResizeEvent (0x0x7f0b41eb22d8) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+ QEvent (0x0x7f0b409f5420) 0
+ primary-for QResizeEvent (0x0x7f0b41eb22d8)
+
+Vtable for QCloseEvent
+QCloseEvent::_ZTV11QCloseEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QCloseEvent)
+16 (int (*)(...))QCloseEvent::~QCloseEvent
+24 (int (*)(...))QCloseEvent::~QCloseEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QCloseEvent
+ size=16 align=8
+ base size=16 base align=8
+QCloseEvent (0x0x7f0b41eb2340) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+ QEvent (0x0x7f0b409f5780) 0
+ primary-for QCloseEvent (0x0x7f0b41eb2340)
+
+Vtable for QIconDragEvent
+QIconDragEvent::_ZTV14QIconDragEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QIconDragEvent)
+16 (int (*)(...))QIconDragEvent::~QIconDragEvent
+24 (int (*)(...))QIconDragEvent::~QIconDragEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QIconDragEvent
+ size=16 align=8
+ base size=16 base align=8
+QIconDragEvent (0x0x7f0b41fb6e38) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+ QEvent (0x0x7f0b409f57e0) 0
+ primary-for QIconDragEvent (0x0x7f0b41fb6e38)
+
+Vtable for QShowEvent
+QShowEvent::_ZTV10QShowEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QShowEvent)
+16 (int (*)(...))QShowEvent::~QShowEvent
+24 (int (*)(...))QShowEvent::~QShowEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QShowEvent
+ size=16 align=8
+ base size=16 base align=8
+QShowEvent (0x0x7f0b41fb6ea0) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+ QEvent (0x0x7f0b409f5840) 0
+ primary-for QShowEvent (0x0x7f0b41fb6ea0)
+
+Vtable for QHideEvent
+QHideEvent::_ZTV10QHideEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHideEvent)
+16 (int (*)(...))QHideEvent::~QHideEvent
+24 (int (*)(...))QHideEvent::~QHideEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QHideEvent
+ size=16 align=8
+ base size=16 base align=8
+QHideEvent (0x0x7f0b41fe82d8) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+ QEvent (0x0x7f0b409f58a0) 0
+ primary-for QHideEvent (0x0x7f0b41fe82d8)
+
+Vtable for QContextMenuEvent
+QContextMenuEvent::_ZTV17QContextMenuEvent: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QContextMenuEvent)
+16 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+24 (int (*)(...))QContextMenuEvent::~QContextMenuEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QContextMenuEvent::clone
+48 (int (*)(...))QInputEvent::setTimestamp
+
+Class QContextMenuEvent
+ size=64 align=8
+ base size=57 base align=8
+QContextMenuEvent (0x0x7f0b41fe8340) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+ QInputEvent (0x0x7f0b41fe87b8) 0
+ primary-for QContextMenuEvent (0x0x7f0b41fe8340)
+ QEvent (0x0x7f0b409f5900) 0
+ primary-for QInputEvent (0x0x7f0b41fe87b8)
+
+Class QInputMethodEvent::Attribute
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodEvent::Attribute (0x0x7f0b409f5ea0) 0
+
+Vtable for QInputMethodEvent
+QInputMethodEvent::_ZTV17QInputMethodEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QInputMethodEvent)
+16 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+24 (int (*)(...))QInputMethodEvent::~QInputMethodEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputMethodEvent::clone
+
+Class QInputMethodEvent
+ size=96 align=8
+ base size=96 base align=8
+QInputMethodEvent (0x0x7f0b41fe8820) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+ QEvent (0x0x7f0b409f5e40) 0
+ primary-for QInputMethodEvent (0x0x7f0b41fe8820)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=40 align=8
+ base size=40 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7f0b4065c6c0) 0
+
+Vtable for QInputMethodQueryEvent
+QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QInputMethodQueryEvent)
+16 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+24 (int (*)(...))QInputMethodQueryEvent::~QInputMethodQueryEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QInputMethodQueryEvent::clone
+
+Class QInputMethodQueryEvent
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodQueryEvent (0x0x7f0b41730138) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+ QEvent (0x0x7f0b4065c660) 0
+ primary-for QInputMethodQueryEvent (0x0x7f0b41730138)
+
+Vtable for QDropEvent
+QDropEvent::_ZTV10QDropEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDropEvent)
+16 (int (*)(...))QDropEvent::~QDropEvent
+24 (int (*)(...))QDropEvent::~QDropEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDropEvent::clone
+
+Class QDropEvent
+ size=64 align=8
+ base size=64 base align=8
+QDropEvent (0x0x7f0b406a4340) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+ QEvent (0x0x7f0b4069e7e0) 0
+ primary-for QDropEvent (0x0x7f0b406a4340)
+
+Vtable for QDragMoveEvent
+QDragMoveEvent::_ZTV14QDragMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDragMoveEvent)
+16 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+24 (int (*)(...))QDragMoveEvent::~QDragMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDragMoveEvent::clone
+
+Class QDragMoveEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragMoveEvent (0x0x7f0b406a43a8) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+ QDropEvent (0x0x7f0b406a4410) 0
+ primary-for QDragMoveEvent (0x0x7f0b406a43a8)
+ QEvent (0x0x7f0b4069ef00) 0
+ primary-for QDropEvent (0x0x7f0b406a4410)
+
+Vtable for QDragEnterEvent
+QDragEnterEvent::_ZTV15QDragEnterEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragEnterEvent)
+16 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+24 (int (*)(...))QDragEnterEvent::~QDragEnterEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QDragMoveEvent::clone
+
+Class QDragEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragEnterEvent (0x0x7f0b406a4478) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+ QDragMoveEvent (0x0x7f0b406a44e0) 0
+ primary-for QDragEnterEvent (0x0x7f0b406a4478)
+ QDropEvent (0x0x7f0b406a4548) 0
+ primary-for QDragMoveEvent (0x0x7f0b406a44e0)
+ QEvent (0x0x7f0b406b63c0) 0
+ primary-for QDropEvent (0x0x7f0b406a4548)
+
+Vtable for QDragLeaveEvent
+QDragLeaveEvent::_ZTV15QDragLeaveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QDragLeaveEvent)
+16 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+24 (int (*)(...))QDragLeaveEvent::~QDragLeaveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QDragLeaveEvent
+ size=16 align=8
+ base size=16 base align=8
+QDragLeaveEvent (0x0x7f0b406a45b0) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+ QEvent (0x0x7f0b406b6420) 0
+ primary-for QDragLeaveEvent (0x0x7f0b406a45b0)
+
+Vtable for QHelpEvent
+QHelpEvent::_ZTV10QHelpEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QHelpEvent)
+16 (int (*)(...))QHelpEvent::~QHelpEvent
+24 (int (*)(...))QHelpEvent::~QHelpEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QHelpEvent::clone
+
+Class QHelpEvent
+ size=32 align=8
+ base size=32 base align=8
+QHelpEvent (0x0x7f0b406a4618) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+ QEvent (0x0x7f0b406b6480) 0
+ primary-for QHelpEvent (0x0x7f0b406a4618)
+
+Vtable for QStatusTipEvent
+QStatusTipEvent::_ZTV15QStatusTipEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QStatusTipEvent)
+16 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+24 (int (*)(...))QStatusTipEvent::~QStatusTipEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QStatusTipEvent::clone
+
+Class QStatusTipEvent
+ size=40 align=8
+ base size=40 base align=8
+QStatusTipEvent (0x0x7f0b406a4680) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+ QEvent (0x0x7f0b406b6960) 0
+ primary-for QStatusTipEvent (0x0x7f0b406a4680)
+
+Vtable for QWhatsThisClickedEvent
+QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QWhatsThisClickedEvent)
+16 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+24 (int (*)(...))QWhatsThisClickedEvent::~QWhatsThisClickedEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QWhatsThisClickedEvent::clone
+
+Class QWhatsThisClickedEvent
+ size=40 align=8
+ base size=40 base align=8
+QWhatsThisClickedEvent (0x0x7f0b406a46e8) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+ QEvent (0x0x7f0b406b6c00) 0
+ primary-for QWhatsThisClickedEvent (0x0x7f0b406a46e8)
+
+Vtable for QActionEvent
+QActionEvent::_ZTV12QActionEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionEvent)
+16 (int (*)(...))QActionEvent::~QActionEvent
+24 (int (*)(...))QActionEvent::~QActionEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QActionEvent::clone
+
+Class QActionEvent
+ size=32 align=8
+ base size=32 base align=8
+QActionEvent (0x0x7f0b406a4750) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+ QEvent (0x0x7f0b406b6ea0) 0
+ primary-for QActionEvent (0x0x7f0b406a4750)
+
+Vtable for QFileOpenEvent
+QFileOpenEvent::_ZTV14QFileOpenEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QFileOpenEvent)
+16 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+24 (int (*)(...))QFileOpenEvent::~QFileOpenEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QFileOpenEvent::clone
+
+Class QFileOpenEvent
+ size=48 align=8
+ base size=48 base align=8
+QFileOpenEvent (0x0x7f0b406a47b8) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+ QEvent (0x0x7f0b406d4240) 0
+ primary-for QFileOpenEvent (0x0x7f0b406a47b8)
+
+Vtable for QToolBarChangeEvent
+QToolBarChangeEvent::_ZTV19QToolBarChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QToolBarChangeEvent)
+16 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+24 (int (*)(...))QToolBarChangeEvent::~QToolBarChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QToolBarChangeEvent::clone
+
+Class QToolBarChangeEvent
+ size=24 align=8
+ base size=17 base align=8
+QToolBarChangeEvent (0x0x7f0b406a4820) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+ QEvent (0x0x7f0b406d4540) 0
+ primary-for QToolBarChangeEvent (0x0x7f0b406a4820)
+
+Vtable for QShortcutEvent
+QShortcutEvent::_ZTV14QShortcutEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QShortcutEvent)
+16 (int (*)(...))QShortcutEvent::~QShortcutEvent
+24 (int (*)(...))QShortcutEvent::~QShortcutEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QShortcutEvent::clone
+
+Class QShortcutEvent
+ size=32 align=8
+ base size=29 base align=8
+QShortcutEvent (0x0x7f0b406a4888) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+ QEvent (0x0x7f0b406d4840) 0
+ primary-for QShortcutEvent (0x0x7f0b406a4888)
+
+Vtable for QWindowStateChangeEvent
+QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QWindowStateChangeEvent)
+16 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+24 (int (*)(...))QWindowStateChangeEvent::~QWindowStateChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QWindowStateChangeEvent::clone
+
+Class QWindowStateChangeEvent
+ size=24 align=8
+ base size=21 base align=8
+QWindowStateChangeEvent (0x0x7f0b406a48f0) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+ QEvent (0x0x7f0b406d4ba0) 0
+ primary-for QWindowStateChangeEvent (0x0x7f0b406a48f0)
+
+Vtable for QTouchEvent
+QTouchEvent::_ZTV11QTouchEvent: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTouchEvent)
+16 (int (*)(...))QTouchEvent::~QTouchEvent
+24 (int (*)(...))QTouchEvent::~QTouchEvent
+32 (int (*)(...))QPointerEvent::setAccepted
+40 (int (*)(...))QTouchEvent::clone
+48 (int (*)(...))QPointerEvent::setTimestamp
+56 (int (*)(...))QTouchEvent::isBeginEvent
+64 (int (*)(...))QTouchEvent::isUpdateEvent
+72 (int (*)(...))QTouchEvent::isEndEvent
+
+Class QTouchEvent
+ size=80 align=8
+ base size=79 base align=8
+QTouchEvent (0x0x7f0b406a4958) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+ QPointerEvent (0x0x7f0b406a49c0) 0
+ primary-for QTouchEvent (0x0x7f0b406a4958)
+ QInputEvent (0x0x7f0b406a4a28) 0
+ primary-for QPointerEvent (0x0x7f0b406a49c0)
+ QEvent (0x0x7f0b406d4ea0) 0
+ primary-for QInputEvent (0x0x7f0b406a4a28)
+
+Vtable for QScrollPrepareEvent
+QScrollPrepareEvent::_ZTV19QScrollPrepareEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollPrepareEvent)
+16 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+24 (int (*)(...))QScrollPrepareEvent::~QScrollPrepareEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScrollPrepareEvent::clone
+
+Class QScrollPrepareEvent
+ size=96 align=8
+ base size=96 base align=8
+QScrollPrepareEvent (0x0x7f0b406a4a90) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+ QEvent (0x0x7f0b406f4240) 0
+ primary-for QScrollPrepareEvent (0x0x7f0b406a4a90)
+
+Vtable for QScrollEvent
+QScrollEvent::_ZTV12QScrollEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QScrollEvent)
+16 (int (*)(...))QScrollEvent::~QScrollEvent
+24 (int (*)(...))QScrollEvent::~QScrollEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScrollEvent::clone
+
+Class QScrollEvent
+ size=56 align=8
+ base size=52 base align=8
+QScrollEvent (0x0x7f0b406a4af8) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+ QEvent (0x0x7f0b406f4660) 0
+ primary-for QScrollEvent (0x0x7f0b406a4af8)
+
+Vtable for QScreenOrientationChangeEvent
+QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QScreenOrientationChangeEvent)
+16 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+24 (int (*)(...))QScreenOrientationChangeEvent::~QScreenOrientationChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QScreenOrientationChangeEvent::clone
+
+Class QScreenOrientationChangeEvent
+ size=32 align=8
+ base size=28 base align=8
+QScreenOrientationChangeEvent (0x0x7f0b406a4b60) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+ QEvent (0x0x7f0b406f4a20) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7f0b406a4b60)
+
+Vtable for QApplicationStateChangeEvent
+QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QApplicationStateChangeEvent)
+16 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+24 (int (*)(...))QApplicationStateChangeEvent::~QApplicationStateChangeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QApplicationStateChangeEvent::clone
+
+Class QApplicationStateChangeEvent
+ size=24 align=8
+ base size=20 base align=8
+QApplicationStateChangeEvent (0x0x7f0b406a4bc8) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+ QEvent (0x0x7f0b406f4d80) 0
+ primary-for QApplicationStateChangeEvent (0x0x7f0b406a4bc8)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7f0b4070f0c0) 0
+
+Class QFontDatabase
+ size=1 align=1
+ base size=0 base align=1
+QFontDatabase (0x0x7f0b40754240) 0 empty
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7f0b40754420) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7f0b407a34e0) 0
+
+Class QBrushDataPointerDeleter
+ size=1 align=1
+ base size=0 base align=1
+QBrushDataPointerDeleter (0x0x7f0b407c9cc0) 0 empty
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7f0b407c9d20) 0
+
+Class QBrushData
+ size=104 align=8
+ base size=104 base align=8
+QBrushData (0x0x7f0b404df780) 0
+
+Class QGradient::QGradientData
+ size=48 align=8
+ base size=48 base align=8
+QGradient::QGradientData (0x0x7f0b404df9c0) 0
+
+Class QGradient
+ size=88 align=8
+ base size=88 base align=8
+QGradient (0x0x7f0b404df960) 0
+
+Class QLinearGradient
+ size=88 align=8
+ base size=88 base align=8
+QLinearGradient (0x0x7f0b404e3bc8) 0
+ QGradient (0x0x7f0b405068a0) 0
+
+Class QRadialGradient
+ size=88 align=8
+ base size=88 base align=8
+QRadialGradient (0x0x7f0b404e3c30) 0
+ QGradient (0x0x7f0b405069c0) 0
+
+Class QConicalGradient
+ size=88 align=8
+ base size=88 base align=8
+QConicalGradient (0x0x7f0b404e3c98) 0
+ QGradient (0x0x7f0b40506ae0) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7f0b40506ba0) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7f0b4058ec60) 0
+
+Class QTextOption
+ size=24 align=8
+ base size=24 base align=8
+QTextOption (0x0x7f0b4058ec00) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7f0b405d6060) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7f0b405eed20) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7f0b4028c750) 0
+ QTextFormat (0x0x7f0b402914e0) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7f0b402ef4e0) 0
+ QTextFormat (0x0x7f0b402eb9c0) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7f0b40323138) 0
+ QTextFormat (0x0x7f0b40316f00) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7f0b4033dd00) 0
+ QTextCharFormat (0x0x7f0b4033dd68) 0
+ QTextFormat (0x0x7f0b4033cde0) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7f0b403639c0) 0
+ QTextFormat (0x0x7f0b40360c60) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7f0b40393618) 0
+ QTextFrameFormat (0x0x7f0b40393680) 0
+ QTextFormat (0x0x7f0b4039d0c0) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7f0b403c02d8) 0
+ QTextCharFormat (0x0x7f0b403c0340) 0
+ QTextFormat (0x0x7f0b403c2360) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7f0b403f08a0) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7f0b40444f60) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7f0b400593c0) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7f0b40059360) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7f0b400c4480) 0
+
+Vtable for QAbstractUndoItem
+QAbstractUndoItem::_ZTV17QAbstractUndoItem: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAbstractUndoItem)
+16 (int (*)(...))__cxa_pure_virtual
+24 (int (*)(...))__cxa_pure_virtual
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAbstractUndoItem
+ size=8 align=8
+ base size=8 base align=8
+QAbstractUndoItem (0x0x7f0b400c4900) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7f0b400c4ba0) 0 empty
+
+Vtable for QTextDocument
+QTextDocument::_ZTV13QTextDocument: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QTextDocument)
+16 (int (*)(...))QTextDocument::metaObject
+24 (int (*)(...))QTextDocument::qt_metacast
+32 (int (*)(...))QTextDocument::qt_metacall
+40 (int (*)(...))QTextDocument::~QTextDocument
+48 (int (*)(...))QTextDocument::~QTextDocument
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextDocument::clear
+120 (int (*)(...))QTextDocument::createObject
+128 (int (*)(...))QTextDocument::loadResource
+
+Class QTextDocument
+ size=16 align=8
+ base size=16 base align=8
+QTextDocument (0x0x7f0b400bbf70) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+ QObject (0x0x7f0b400c4b40) 0
+ primary-for QTextDocument (0x0x7f0b400bbf70)
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7f0b40121480) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7f0b4019c8a0) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7f0b4019c900) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=80 align=8
+ base size=80 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7f0b4019c960) 0
+
+Vtable for QAbstractTextDocumentLayout
+QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAbstractTextDocumentLayout)
+16 (int (*)(...))QAbstractTextDocumentLayout::metaObject
+24 (int (*)(...))QAbstractTextDocumentLayout::qt_metacast
+32 (int (*)(...))QAbstractTextDocumentLayout::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))QAbstractTextDocumentLayout::resizeInlineObject
+176 (int (*)(...))QAbstractTextDocumentLayout::positionInlineObject
+184 (int (*)(...))QAbstractTextDocumentLayout::drawInlineObject
+
+Class QAbstractTextDocumentLayout
+ size=16 align=8
+ base size=16 base align=8
+QAbstractTextDocumentLayout (0x0x7f0b401a13a8) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+ QObject (0x0x7f0b4019c840) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f0b401a13a8)
+
+Vtable for QTextObjectInterface
+QTextObjectInterface::_ZTV20QTextObjectInterface: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextObjectInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QTextObjectInterface
+ size=8 align=8
+ base size=8 base align=8
+QTextObjectInterface (0x0x7f0b4022cf00) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7f0b40248180) 0
+
+Vtable for QAccessible::ActivationObserver
+QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN11QAccessible18ActivationObserverE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessible::ActivationObserver
+ size=8 align=8
+ base size=8 base align=8
+QAccessible::ActivationObserver (0x0x7f0b402481e0) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7f0b40248120) 0 empty
+
+Vtable for QAccessibleInterface
+QAccessibleInterface::_ZTV20QAccessibleInterface: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAccessibleInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QAccessibleInterface::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleInterface::focusChild
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleInterface (0x0x7f0b40248ae0) 0 nearly-empty
+ vptr=((& QAccessibleInterface::_ZTV20QAccessibleInterface) + 16)
+
+Vtable for QAccessibleTextInterface
+QAccessibleTextInterface::_ZTV24QAccessibleTextInterface: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAccessibleTextInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))QAccessibleTextInterface::textBeforeOffset
+104 (int (*)(...))QAccessibleTextInterface::textAfterOffset
+112 (int (*)(...))QAccessibleTextInterface::textAtOffset
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTextInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTextInterface (0x0x7f0b40248ea0) 0 nearly-empty
+ vptr=((& QAccessibleTextInterface::_ZTV24QAccessibleTextInterface) + 16)
+
+Vtable for QAccessibleEditableTextInterface
+QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleEditableTextInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleEditableTextInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleEditableTextInterface (0x0x7f0b40248f00) 0 nearly-empty
+ vptr=((& QAccessibleEditableTextInterface::_ZTV32QAccessibleEditableTextInterface) + 16)
+
+Vtable for QAccessibleValueInterface
+QAccessibleValueInterface::_ZTV25QAccessibleValueInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleValueInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleValueInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleValueInterface (0x0x7f0b40248f60) 0 nearly-empty
+ vptr=((& QAccessibleValueInterface::_ZTV25QAccessibleValueInterface) + 16)
+
+Vtable for QAccessibleTableCellInterface
+QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTableCellInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTableCellInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTableCellInterface (0x0x7f0b3fe8f000) 0 nearly-empty
+ vptr=((& QAccessibleTableCellInterface::_ZTV29QAccessibleTableCellInterface) + 16)
+
+Vtable for QAccessibleTableInterface
+QAccessibleTableInterface::_ZTV25QAccessibleTableInterface: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleTableInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))__cxa_pure_virtual
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))__cxa_pure_virtual
+184 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleTableInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleTableInterface (0x0x7f0b3fe8f060) 0 nearly-empty
+ vptr=((& QAccessibleTableInterface::_ZTV25QAccessibleTableInterface) + 16)
+
+Vtable for QAccessibleActionInterface
+QAccessibleActionInterface::_ZTV26QAccessibleActionInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleActionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QAccessibleActionInterface::localizedActionName
+48 (int (*)(...))QAccessibleActionInterface::localizedActionDescription
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleActionInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleActionInterface (0x0x7f0b3fe8f0c0) 0 nearly-empty
+ vptr=((& QAccessibleActionInterface::_ZTV26QAccessibleActionInterface) + 16)
+
+Vtable for QAccessibleImageInterface
+QAccessibleImageInterface::_ZTV25QAccessibleImageInterface: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QAccessibleImageInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleImageInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleImageInterface (0x0x7f0b3fe8f180) 0 nearly-empty
+ vptr=((& QAccessibleImageInterface::_ZTV25QAccessibleImageInterface) + 16)
+
+Vtable for QAccessibleHyperlinkInterface
+QAccessibleHyperlinkInterface::_ZTV29QAccessibleHyperlinkInterface: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleHyperlinkInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleHyperlinkInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleHyperlinkInterface (0x0x7f0b3fe8f1e0) 0 nearly-empty
+ vptr=((& QAccessibleHyperlinkInterface::_ZTV29QAccessibleHyperlinkInterface) + 16)
+
+Vtable for QAccessibleEvent
+QAccessibleEvent::_ZTV16QAccessibleEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAccessibleEvent)
+16 (int (*)(...))QAccessibleEvent::~QAccessibleEvent
+24 (int (*)(...))QAccessibleEvent::~QAccessibleEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleEvent
+ size=32 align=8
+ base size=28 base align=8
+QAccessibleEvent (0x0x7f0b3fe8f240) 0
+ vptr=((& QAccessibleEvent::_ZTV16QAccessibleEvent) + 16)
+
+Vtable for QAccessibleStateChangeEvent
+QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleStateChangeEvent)
+16 (int (*)(...))QAccessibleStateChangeEvent::~QAccessibleStateChangeEvent
+24 (int (*)(...))QAccessibleStateChangeEvent::~QAccessibleStateChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleStateChangeEvent
+ size=40 align=8
+ base size=40 base align=8
+QAccessibleStateChangeEvent (0x0x7f0b4023c888) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f0b3fe8f780) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7f0b4023c888)
+
+Vtable for QAccessibleTextCursorEvent
+QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextCursorEvent)
+16 (int (*)(...))QAccessibleTextCursorEvent::~QAccessibleTextCursorEvent
+24 (int (*)(...))QAccessibleTextCursorEvent::~QAccessibleTextCursorEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextCursorEvent
+ size=32 align=8
+ base size=32 base align=8
+QAccessibleTextCursorEvent (0x0x7f0b4023c8f0) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+ QAccessibleEvent (0x0x7f0b3fe8fb40) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f0b4023c8f0)
+
+Vtable for QAccessibleTextSelectionEvent
+QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleTextSelectionEvent)
+16 (int (*)(...))QAccessibleTextSelectionEvent::~QAccessibleTextSelectionEvent
+24 (int (*)(...))QAccessibleTextSelectionEvent::~QAccessibleTextSelectionEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextSelectionEvent
+ size=40 align=8
+ base size=40 base align=8
+QAccessibleTextSelectionEvent (0x0x7f0b4023c958) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f0b4023c9c0) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7f0b4023c958)
+ QAccessibleEvent (0x0x7f0b3fe8ff60) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f0b4023c9c0)
+
+Vtable for QAccessibleTextInsertEvent
+QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextInsertEvent)
+16 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+24 (int (*)(...))QAccessibleTextInsertEvent::~QAccessibleTextInsertEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextInsertEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleTextInsertEvent (0x0x7f0b4023ca28) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f0b4023ca90) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7f0b4023ca28)
+ QAccessibleEvent (0x0x7f0b3feba420) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f0b4023ca90)
+
+Vtable for QAccessibleTextRemoveEvent
+QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextRemoveEvent)
+16 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+24 (int (*)(...))QAccessibleTextRemoveEvent::~QAccessibleTextRemoveEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextRemoveEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleTextRemoveEvent (0x0x7f0b4023caf8) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f0b4023cb60) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7f0b4023caf8)
+ QAccessibleEvent (0x0x7f0b3feba840) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f0b4023cb60)
+
+Vtable for QAccessibleTextUpdateEvent
+QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAccessibleTextUpdateEvent)
+16 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+24 (int (*)(...))QAccessibleTextUpdateEvent::~QAccessibleTextUpdateEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTextUpdateEvent
+ size=88 align=8
+ base size=88 base align=8
+QAccessibleTextUpdateEvent (0x0x7f0b4023cbc8) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f0b4023cc30) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7f0b4023cbc8)
+ QAccessibleEvent (0x0x7f0b3febac60) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f0b4023cc30)
+
+Vtable for QAccessibleValueChangeEvent
+QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QAccessibleValueChangeEvent)
+16 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+24 (int (*)(...))QAccessibleValueChangeEvent::~QAccessibleValueChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleValueChangeEvent
+ size=64 align=8
+ base size=64 base align=8
+QAccessibleValueChangeEvent (0x0x7f0b4023cc98) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f0b3fed0120) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7f0b4023cc98)
+
+Vtable for QAccessibleTableModelChangeEvent
+QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI32QAccessibleTableModelChangeEvent)
+16 (int (*)(...))QAccessibleTableModelChangeEvent::~QAccessibleTableModelChangeEvent
+24 (int (*)(...))QAccessibleTableModelChangeEvent::~QAccessibleTableModelChangeEvent
+32 (int (*)(...))QAccessibleEvent::accessibleInterface
+
+Class QAccessibleTableModelChangeEvent
+ size=48 align=8
+ base size=48 base align=8
+QAccessibleTableModelChangeEvent (0x0x7f0b4023cd00) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f0b3fed0540) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7f0b4023cd00)
+
+Vtable for QAccessibleBridge
+QAccessibleBridge::_ZTV17QAccessibleBridge: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleBridge)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridge
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleBridge (0x0x7f0b3fed0de0) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7f0b3feea0c0) 0 empty
+
+Vtable for QAccessibleBridgePlugin
+QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QAccessibleBridgePlugin)
+16 (int (*)(...))QAccessibleBridgePlugin::metaObject
+24 (int (*)(...))QAccessibleBridgePlugin::qt_metacast
+32 (int (*)(...))QAccessibleBridgePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleBridgePlugin
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleBridgePlugin (0x0x7f0b4023cd68) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+ QObject (0x0x7f0b3feea060) 0
+ primary-for QAccessibleBridgePlugin (0x0x7f0b4023cd68)
+
+Vtable for QAccessibleObject
+QAccessibleObject::_ZTV17QAccessibleObject: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleObject)
+16 0
+24 0
+32 (int (*)(...))QAccessibleObject::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleInterface::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleInterface::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleObject::rect
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleObject
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleObject (0x0x7f0b4023cdd0) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+ QAccessibleInterface (0x0x7f0b3feea180) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f0b4023cdd0)
+
+Vtable for QAccessibleApplication
+QAccessibleApplication::_ZTV22QAccessibleApplication: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QAccessibleApplication)
+16 (int (*)(...))QAccessibleApplication::~QAccessibleApplication
+24 (int (*)(...))QAccessibleApplication::~QAccessibleApplication
+32 (int (*)(...))QAccessibleObject::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleApplication::window
+56 (int (*)(...))QAccessibleInterface::relations
+64 (int (*)(...))QAccessibleApplication::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))QAccessibleApplication::parent
+88 (int (*)(...))QAccessibleApplication::child
+96 (int (*)(...))QAccessibleApplication::childCount
+104 (int (*)(...))QAccessibleApplication::indexOfChild
+112 (int (*)(...))QAccessibleApplication::text
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleObject::rect
+136 (int (*)(...))QAccessibleApplication::role
+144 (int (*)(...))QAccessibleApplication::state
+152 (int (*)(...))QAccessibleInterface::foregroundColor
+160 (int (*)(...))QAccessibleInterface::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleInterface::interface_cast
+
+Class QAccessibleApplication
+ size=16 align=8
+ base size=16 base align=8
+QAccessibleApplication (0x0x7f0b4023ce38) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+ QAccessibleObject (0x0x7f0b4023cea0) 0
+ primary-for QAccessibleApplication (0x0x7f0b4023ce38)
+ QAccessibleInterface (0x0x7f0b3feea1e0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f0b4023cea0)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7f0b3feea2a0) 0 empty
+
+Vtable for QAccessiblePlugin
+QAccessiblePlugin::_ZTV17QAccessiblePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessiblePlugin)
+16 (int (*)(...))QAccessiblePlugin::metaObject
+24 (int (*)(...))QAccessiblePlugin::qt_metacast
+32 (int (*)(...))QAccessiblePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessiblePlugin
+ size=16 align=8
+ base size=16 base align=8
+QAccessiblePlugin (0x0x7f0b4023cf08) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+ QObject (0x0x7f0b3feea240) 0
+ primary-for QAccessiblePlugin (0x0x7f0b4023cf08)
+
+Class QAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAction::QPrivateSignal (0x0x7f0b3feea3c0) 0 empty
+
+Vtable for QAction
+QAction::_ZTV7QAction: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QAction)
+16 (int (*)(...))QAction::metaObject
+24 (int (*)(...))QAction::qt_metacast
+32 (int (*)(...))QAction::qt_metacall
+40 (int (*)(...))QAction::~QAction
+48 (int (*)(...))QAction::~QAction
+56 (int (*)(...))QAction::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QAction
+ size=16 align=8
+ base size=16 base align=8
+QAction (0x0x7f0b4023cf70) 0
+ vptr=((& QAction::_ZTV7QAction) + 16)
+ QObject (0x0x7f0b3feea360) 0
+ primary-for QAction (0x0x7f0b4023cf70)
+
+Class QActionGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QActionGroup::QPrivateSignal (0x0x7f0b3feeacc0) 0 empty
+
+Vtable for QActionGroup
+QActionGroup::_ZTV12QActionGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QActionGroup)
+16 (int (*)(...))QActionGroup::metaObject
+24 (int (*)(...))QActionGroup::qt_metacast
+32 (int (*)(...))QActionGroup::qt_metacall
+40 (int (*)(...))QActionGroup::~QActionGroup
+48 (int (*)(...))QActionGroup::~QActionGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QActionGroup
+ size=16 align=8
+ base size=16 base align=8
+QActionGroup (0x0x7f0b3ff1e000) 0
+ vptr=((& QActionGroup::_ZTV12QActionGroup) + 16)
+ QObject (0x0x7f0b3feeac60) 0
+ primary-for QActionGroup (0x0x7f0b3ff1e000)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7f0b3feeaf60) 0
+
+Vtable for QSurface
+QSurface::_ZTV8QSurface: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSurface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+
+Class QSurface
+ size=24 align=8
+ base size=24 base align=8
+QSurface (0x0x7f0b3ff3d8a0) 0
+ vptr=((& QSurface::_ZTV8QSurface) + 16)
+
+Vtable for QBitmap
+QBitmap::_ZTV7QBitmap: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QBitmap)
+16 (int (*)(...))QBitmap::~QBitmap
+24 (int (*)(...))QBitmap::~QBitmap
+32 (int (*)(...))QPixmap::devType
+40 (int (*)(...))QPixmap::paintEngine
+48 (int (*)(...))QPixmap::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QBitmap
+ size=24 align=8
+ base size=24 base align=8
+QBitmap (0x0x7f0b3ff1e208) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+ QPixmap (0x0x7f0b3ff1e270) 0
+ primary-for QBitmap (0x0x7f0b3ff1e208)
+ QPaintDevice (0x0x7f0b3ff3df00) 0
+ primary-for QPixmap (0x0x7f0b3ff1e270)
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7f0b3ff7e840) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7f0b3ffc4a80) 0 empty
+
+Vtable for QWindow
+QWindow::_ZTV7QWindow: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWindow)
+16 (int (*)(...))QWindow::metaObject
+24 (int (*)(...))QWindow::qt_metacast
+32 (int (*)(...))QWindow::qt_metacall
+40 (int (*)(...))QWindow::~QWindow
+48 (int (*)(...))QWindow::~QWindow
+56 (int (*)(...))QWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI7QWindow)
+328 (int (*)(...))QWindow::_ZThn16_N7QWindowD1Ev
+336 (int (*)(...))QWindow::_ZThn16_N7QWindowD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QWindow
+ size=40 align=8
+ base size=40 base align=8
+QWindow (0x0x7f0b3ff30d20) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+ QObject (0x0x7f0b3ffc49c0) 0
+ primary-for QWindow (0x0x7f0b3ff30d20)
+ QSurface (0x0x7f0b3ffc4a20) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 328)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7f0b3fffe360) 0
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7f0b3fffe480) 0 empty
+
+Vtable for QClipboard
+QClipboard::_ZTV10QClipboard: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QClipboard)
+16 (int (*)(...))QClipboard::metaObject
+24 (int (*)(...))QClipboard::qt_metacast
+32 (int (*)(...))QClipboard::qt_metacall
+40 (int (*)(...))QClipboard::~QClipboard
+48 (int (*)(...))QClipboard::~QClipboard
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QClipboard
+ size=16 align=8
+ base size=16 base align=8
+QClipboard (0x0x7f0b3ffc9958) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+ QObject (0x0x7f0b3fffe420) 0
+ primary-for QClipboard (0x0x7f0b3ffc9958)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7f0b3fffe5a0) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7f0b3fc595a0) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7f0b3fcb2360) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7f0b3fcb2420) 0 empty
+
+Vtable for QDrag
+QDrag::_ZTV5QDrag: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDrag)
+16 (int (*)(...))QDrag::metaObject
+24 (int (*)(...))QDrag::qt_metacast
+32 (int (*)(...))QDrag::qt_metacall
+40 (int (*)(...))QDrag::~QDrag
+48 (int (*)(...))QDrag::~QDrag
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDrag
+ size=16 align=8
+ base size=16 base align=8
+QDrag (0x0x7f0b3fcb04e0) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+ QObject (0x0x7f0b3fcb23c0) 0
+ primary-for QDrag (0x0x7f0b3fcb04e0)
+
+Class QFileSystemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemModel::QPrivateSignal (0x0x7f0b3fcb2600) 0 empty
+
+Vtable for QFileSystemModel
+QFileSystemModel::_ZTV16QFileSystemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QFileSystemModel)
+16 (int (*)(...))QFileSystemModel::metaObject
+24 (int (*)(...))QFileSystemModel::qt_metacast
+32 (int (*)(...))QFileSystemModel::qt_metacall
+40 (int (*)(...))QFileSystemModel::~QFileSystemModel
+48 (int (*)(...))QFileSystemModel::~QFileSystemModel
+56 (int (*)(...))QFileSystemModel::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QFileSystemModel::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFileSystemModel::index
+120 (int (*)(...))QFileSystemModel::parent
+128 (int (*)(...))QFileSystemModel::sibling
+136 (int (*)(...))QFileSystemModel::rowCount
+144 (int (*)(...))QFileSystemModel::columnCount
+152 (int (*)(...))QFileSystemModel::hasChildren
+160 (int (*)(...))QFileSystemModel::data
+168 (int (*)(...))QFileSystemModel::setData
+176 (int (*)(...))QFileSystemModel::headerData
+184 (int (*)(...))QAbstractItemModel::setHeaderData
+192 (int (*)(...))QAbstractItemModel::itemData
+200 (int (*)(...))QAbstractItemModel::setItemData
+208 (int (*)(...))QAbstractItemModel::clearItemData
+216 (int (*)(...))QFileSystemModel::mimeTypes
+224 (int (*)(...))QFileSystemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QFileSystemModel::dropMimeData
+248 (int (*)(...))QFileSystemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QAbstractItemModel::insertRows
+272 (int (*)(...))QAbstractItemModel::insertColumns
+280 (int (*)(...))QAbstractItemModel::removeRows
+288 (int (*)(...))QAbstractItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QFileSystemModel::fetchMore
+320 (int (*)(...))QFileSystemModel::canFetchMore
+328 (int (*)(...))QFileSystemModel::flags
+336 (int (*)(...))QFileSystemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QFileSystemModel::roleNames
+376 (int (*)(...))QAbstractItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QFileSystemModel
+ size=16 align=8
+ base size=16 base align=8
+QFileSystemModel (0x0x7f0b3fcb0548) 0
+ vptr=((& QFileSystemModel::_ZTV16QFileSystemModel) + 16)
+ QAbstractItemModel (0x0x7f0b3fcb05b0) 0
+ primary-for QFileSystemModel (0x0x7f0b3fcb0548)
+ QObject (0x0x7f0b3fcb25a0) 0
+ primary-for QAbstractItemModel (0x0x7f0b3fcb05b0)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7f0b3fcb2cc0) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7f0b3fd0f600) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7f0b3fd41060) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7f0b3fdbed20) 0 empty
+
+Vtable for QGenericPlugin
+QGenericPlugin::_ZTV14QGenericPlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGenericPlugin)
+16 (int (*)(...))QGenericPlugin::metaObject
+24 (int (*)(...))QGenericPlugin::qt_metacast
+32 (int (*)(...))QGenericPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QGenericPlugin
+ size=16 align=8
+ base size=16 base align=8
+QGenericPlugin (0x0x7f0b3fd9d6e8) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+ QObject (0x0x7f0b3fdbecc0) 0
+ primary-for QGenericPlugin (0x0x7f0b3fd9d6e8)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7f0b3fdbede0) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7f0b3fdbeea0) 0 empty
+
+Vtable for QInputMethod
+QInputMethod::_ZTV12QInputMethod: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputMethod)
+16 (int (*)(...))QInputMethod::metaObject
+24 (int (*)(...))QInputMethod::qt_metacast
+32 (int (*)(...))QInputMethod::qt_metacall
+40 (int (*)(...))QInputMethod::~QInputMethod
+48 (int (*)(...))QInputMethod::~QInputMethod
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QInputMethod
+ size=16 align=8
+ base size=16 base align=8
+QInputMethod (0x0x7f0b3fd9d750) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+ QObject (0x0x7f0b3fdbee40) 0
+ primary-for QInputMethod (0x0x7f0b3fd9d750)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7f0b3fdd9180) 0 empty
+
+Vtable for QGuiApplication
+QGuiApplication::_ZTV15QGuiApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGuiApplication)
+16 (int (*)(...))QGuiApplication::metaObject
+24 (int (*)(...))QGuiApplication::qt_metacast
+32 (int (*)(...))QGuiApplication::qt_metacall
+40 (int (*)(...))QGuiApplication::~QGuiApplication
+48 (int (*)(...))QGuiApplication::~QGuiApplication
+56 (int (*)(...))QGuiApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGuiApplication::notify
+120 (int (*)(...))QGuiApplication::compressEvent
+
+Class QGuiApplication
+ size=16 align=8
+ base size=16 base align=8
+QGuiApplication (0x0x7f0b3fd9d7b8) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+ QCoreApplication (0x0x7f0b3fd9d820) 0
+ primary-for QGuiApplication (0x0x7f0b3fd9d7b8)
+ QObject (0x0x7f0b3fdd9120) 0
+ primary-for QCoreApplication (0x0x7f0b3fd9d820)
+
+Class QNativeInterface::QX11Application::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QX11Application::TypeInfo (0x0x7f0b3fdd9480) 0 empty
+
+Vtable for QNativeInterface::QX11Application
+QNativeInterface::QX11Application::_ZTVN16QNativeInterface15QX11ApplicationE: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface15QX11ApplicationE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QX11Application
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QX11Application (0x0x7f0b3fdd9420) 0 nearly-empty
+ vptr=((& QNativeInterface::QX11Application::_ZTVN16QNativeInterface15QX11ApplicationE) + 16)
+
+Class QIconEngine::ScaledPixmapArgument
+ size=48 align=8
+ base size=48 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7f0b3fdd9540) 0
+
+Vtable for QIconEngine
+QIconEngine::_ZTV11QIconEngine: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QIconEngine)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QIconEngine::actualSize
+48 (int (*)(...))QIconEngine::pixmap
+56 (int (*)(...))QIconEngine::addPixmap
+64 (int (*)(...))QIconEngine::addFile
+72 (int (*)(...))QIconEngine::key
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QIconEngine::read
+96 (int (*)(...))QIconEngine::write
+104 (int (*)(...))QIconEngine::availableSizes
+112 (int (*)(...))QIconEngine::iconName
+120 (int (*)(...))QIconEngine::isNull
+128 (int (*)(...))QIconEngine::scaledPixmap
+136 (int (*)(...))QIconEngine::virtual_hook
+
+Class QIconEngine
+ size=8 align=8
+ base size=8 base align=8
+QIconEngine (0x0x7f0b3fdd94e0) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7f0b3fdd9600) 0 empty
+
+Vtable for QIconEnginePlugin
+QIconEnginePlugin::_ZTV17QIconEnginePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QIconEnginePlugin)
+16 (int (*)(...))QIconEnginePlugin::metaObject
+24 (int (*)(...))QIconEnginePlugin::qt_metacast
+32 (int (*)(...))QIconEnginePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QIconEnginePlugin
+ size=16 align=8
+ base size=16 base align=8
+QIconEnginePlugin (0x0x7f0b3fd9d888) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+ QObject (0x0x7f0b3fdd95a0) 0
+ primary-for QIconEnginePlugin (0x0x7f0b3fd9d888)
+
+Vtable for QImageIOHandler
+QImageIOHandler::_ZTV15QImageIOHandler: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QImageIOHandler)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QImageIOHandler::write
+56 (int (*)(...))QImageIOHandler::option
+64 (int (*)(...))QImageIOHandler::setOption
+72 (int (*)(...))QImageIOHandler::supportsOption
+80 (int (*)(...))QImageIOHandler::jumpToNextImage
+88 (int (*)(...))QImageIOHandler::jumpToImage
+96 (int (*)(...))QImageIOHandler::loopCount
+104 (int (*)(...))QImageIOHandler::imageCount
+112 (int (*)(...))QImageIOHandler::nextImageDelay
+120 (int (*)(...))QImageIOHandler::currentImageNumber
+128 (int (*)(...))QImageIOHandler::currentImageRect
+
+Class QImageIOHandler
+ size=16 align=8
+ base size=16 base align=8
+QImageIOHandler (0x0x7f0b3fdd96c0) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7f0b3fdd9900) 0 empty
+
+Vtable for QImageIOPlugin
+QImageIOPlugin::_ZTV14QImageIOPlugin: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QImageIOPlugin)
+16 (int (*)(...))QImageIOPlugin::metaObject
+24 (int (*)(...))QImageIOPlugin::qt_metacast
+32 (int (*)(...))QImageIOPlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+
+Class QImageIOPlugin
+ size=16 align=8
+ base size=16 base align=8
+QImageIOPlugin (0x0x7f0b3fd9d8f0) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+ QObject (0x0x7f0b3fdd98a0) 0
+ primary-for QImageIOPlugin (0x0x7f0b3fd9d8f0)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7f0b3fdd9d80) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7f0b3fdd9e40) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7f0b3fdd9f00) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7f0b3fa78c60) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7f0b3faee1e0) 0 empty
+
+Vtable for QMovie
+QMovie::_ZTV6QMovie: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QMovie)
+16 (int (*)(...))QMovie::metaObject
+24 (int (*)(...))QMovie::qt_metacast
+32 (int (*)(...))QMovie::qt_metacall
+40 (int (*)(...))QMovie::~QMovie
+48 (int (*)(...))QMovie::~QMovie
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QMovie
+ size=16 align=8
+ base size=16 base align=8
+QMovie (0x0x7f0b3fad3138) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+ QObject (0x0x7f0b3faee180) 0
+ primary-for QMovie (0x0x7f0b3fad3138)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7f0b3faee5a0) 0 empty
+
+Vtable for QOffscreenSurface
+QOffscreenSurface::_ZTV17QOffscreenSurface: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QOffscreenSurface)
+16 (int (*)(...))QOffscreenSurface::metaObject
+24 (int (*)(...))QOffscreenSurface::qt_metacast
+32 (int (*)(...))QOffscreenSurface::qt_metacall
+40 (int (*)(...))QOffscreenSurface::~QOffscreenSurface
+48 (int (*)(...))QOffscreenSurface::~QOffscreenSurface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QOffscreenSurface::surfaceType
+120 (int (*)(...))QOffscreenSurface::format
+128 (int (*)(...))QOffscreenSurface::size
+136 (int (*)(...))QOffscreenSurface::surfaceHandle
+144 (int (*)(...))-16
+152 (int (*)(...))(& _ZTI17QOffscreenSurface)
+160 (int (*)(...))QOffscreenSurface::_ZThn16_N17QOffscreenSurfaceD1Ev
+168 (int (*)(...))QOffscreenSurface::_ZThn16_N17QOffscreenSurfaceD0Ev
+176 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface6formatEv
+184 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface13surfaceHandleEv
+192 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface11surfaceTypeEv
+200 (int (*)(...))QOffscreenSurface::_ZThn16_NK17QOffscreenSurface4sizeEv
+
+Class QOffscreenSurface
+ size=40 align=8
+ base size=40 base align=8
+QOffscreenSurface (0x0x7f0b3fad45b0) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+ QObject (0x0x7f0b3faee4e0) 0
+ primary-for QOffscreenSurface (0x0x7f0b3fad45b0)
+ QSurface (0x0x7f0b3faee540) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7f0b3faee840) 0 empty
+
+Vtable for QOpenGLContextGroup
+QOpenGLContextGroup::_ZTV19QOpenGLContextGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QOpenGLContextGroup)
+16 (int (*)(...))QOpenGLContextGroup::metaObject
+24 (int (*)(...))QOpenGLContextGroup::qt_metacast
+32 (int (*)(...))QOpenGLContextGroup::qt_metacall
+40 (int (*)(...))QOpenGLContextGroup::~QOpenGLContextGroup
+48 (int (*)(...))QOpenGLContextGroup::~QOpenGLContextGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLContextGroup
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLContextGroup (0x0x7f0b3fad31a0) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+ QObject (0x0x7f0b3faee7e0) 0
+ primary-for QOpenGLContextGroup (0x0x7f0b3fad31a0)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7f0b3faeea20) 0 empty
+
+Vtable for QOpenGLContext
+QOpenGLContext::_ZTV14QOpenGLContext: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QOpenGLContext)
+16 (int (*)(...))QOpenGLContext::metaObject
+24 (int (*)(...))QOpenGLContext::qt_metacast
+32 (int (*)(...))QOpenGLContext::qt_metacall
+40 (int (*)(...))QOpenGLContext::~QOpenGLContext
+48 (int (*)(...))QOpenGLContext::~QOpenGLContext
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLContext
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLContext (0x0x7f0b3fad3208) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+ QObject (0x0x7f0b3faee9c0) 0
+ primary-for QOpenGLContext (0x0x7f0b3fad3208)
+
+Class QNativeInterface::QGLXContext::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QGLXContext::TypeInfo (0x0x7f0b3faeec60) 0 empty
+
+Vtable for QNativeInterface::QGLXContext
+QNativeInterface::QGLXContext::_ZTVN16QNativeInterface11QGLXContextE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QGLXContextE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QGLXContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QGLXContext (0x0x7f0b3faeec00) 0 nearly-empty
+ vptr=((& QNativeInterface::QGLXContext::_ZTVN16QNativeInterface11QGLXContextE) + 16)
+
+Class QNativeInterface::QEGLContext::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QEGLContext::TypeInfo (0x0x7f0b3faeed20) 0 empty
+
+Vtable for QNativeInterface::QEGLContext
+QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QEGLContextE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QEGLContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QEGLContext (0x0x7f0b3faeecc0) 0 nearly-empty
+ vptr=((& QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE) + 16)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7f0b3faeed80) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7f0b3fa37420) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7f0b3fa373c0) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7f0b3fad3618) 0
+ QOpenGLFunctions (0x0x7f0b3f6aaba0) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7f0b3f6aaf00) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7f0b3fad3680) 0
+ QOpenGLFunctionsPrivate (0x0x7f0b3f6aaea0) 0
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7f0b3f7e0c00) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7f0b3f46b240) 0
+
+Class QPageRanges::Range
+ size=8 align=4
+ base size=8 base align=4
+QPageRanges::Range (0x0x7f0b3f523240) 0
+
+Class QPageRanges
+ size=8 align=8
+ base size=8 base align=8
+QPageRanges (0x0x7f0b3f5231e0) 0
+
+Vtable for QPagedPaintDevice
+QPagedPaintDevice::_ZTV17QPagedPaintDevice: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QPagedPaintDevice)
+16 0
+24 0
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QPagedPaintDevice::setPageLayout
+96 (int (*)(...))QPagedPaintDevice::setPageSize
+104 (int (*)(...))QPagedPaintDevice::setPageOrientation
+112 (int (*)(...))QPagedPaintDevice::setPageMargins
+120 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPagedPaintDevice
+ size=24 align=8
+ base size=24 base align=8
+QPagedPaintDevice (0x0x7f0b3f5944e0) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+ QPaintDevice (0x0x7f0b3f5967e0) 0
+ primary-for QPagedPaintDevice (0x0x7f0b3f5944e0)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7f0b3f596960) 0 empty
+
+Vtable for QPaintDeviceWindow
+QPaintDeviceWindow::_ZTV18QPaintDeviceWindow: 59 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+16 (int (*)(...))QPaintDeviceWindow::metaObject
+24 (int (*)(...))QPaintDeviceWindow::qt_metacast
+32 (int (*)(...))QPaintDeviceWindow::qt_metacall
+40 (int (*)(...))QPaintDeviceWindow::~QPaintDeviceWindow
+48 (int (*)(...))QPaintDeviceWindow::~QPaintDeviceWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QPaintDeviceWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QPaintDeviceWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))-16
+336 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+344 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD1Ev
+352 (int (*)(...))QPaintDeviceWindow::_ZThn16_N18QPaintDeviceWindowD0Ev
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+384 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+392 (int (*)(...))-40
+400 (int (*)(...))(& _ZTI18QPaintDeviceWindow)
+408 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD1Ev
+416 (int (*)(...))QPaintDeviceWindow::_ZThn40_N18QPaintDeviceWindowD0Ev
+424 (int (*)(...))QPaintDevice::devType
+432 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+440 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+448 (int (*)(...))QPaintDevice::initPainter
+456 (int (*)(...))QPaintDevice::redirected
+464 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QPaintDeviceWindow
+ size=56 align=8
+ base size=50 base align=8
+QPaintDeviceWindow (0x0x7f0b3f4e0230) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+ QWindow (0x0x7f0b3f4e02a0) 0
+ primary-for QPaintDeviceWindow (0x0x7f0b3f4e0230)
+ QObject (0x0x7f0b3f596840) 0
+ primary-for QWindow (0x0x7f0b3f4e02a0)
+ QSurface (0x0x7f0b3f5968a0) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 344)
+ QPaintDevice (0x0x7f0b3f596900) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 408)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7f0b3f596b40) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7f0b3f596ae0) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7f0b3f3cb720) 0 empty
+
+Vtable for QPaintEngine
+QPaintEngine::_ZTV12QPaintEngine: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPaintEngine)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))QPaintEngine::drawRects
+64 (int (*)(...))QPaintEngine::drawRects
+72 (int (*)(...))QPaintEngine::drawLines
+80 (int (*)(...))QPaintEngine::drawLines
+88 (int (*)(...))QPaintEngine::drawEllipse
+96 (int (*)(...))QPaintEngine::drawEllipse
+104 (int (*)(...))QPaintEngine::drawPath
+112 (int (*)(...))QPaintEngine::drawPoints
+120 (int (*)(...))QPaintEngine::drawPoints
+128 (int (*)(...))QPaintEngine::drawPolygon
+136 (int (*)(...))QPaintEngine::drawPolygon
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QPaintEngine::drawTextItem
+160 (int (*)(...))QPaintEngine::drawTiledPixmap
+168 (int (*)(...))QPaintEngine::drawImage
+176 (int (*)(...))QPaintEngine::coordinateOffset
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))QPaintEngine::createPixmap
+200 (int (*)(...))QPaintEngine::createPixmapFromImage
+
+Class QPaintEngine
+ size=32 align=8
+ base size=32 base align=8
+QPaintEngine (0x0x7f0b3f3eef00) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7f0b3f418540) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7f0b3f0b7240) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7f0b3f0b71e0) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7f0b3f14a540) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7f0b3f14ad20) 0 empty
+
+Vtable for QPdfWriter
+QPdfWriter::_ZTV10QPdfWriter: 33 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QPdfWriter)
+16 (int (*)(...))QPdfWriter::metaObject
+24 (int (*)(...))QPdfWriter::qt_metacast
+32 (int (*)(...))QPdfWriter::qt_metacall
+40 (int (*)(...))QPdfWriter::~QPdfWriter
+48 (int (*)(...))QPdfWriter::~QPdfWriter
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPdfWriter::newPage
+120 (int (*)(...))QPdfWriter::paintEngine
+128 (int (*)(...))QPdfWriter::metric
+136 (int (*)(...))-16
+144 (int (*)(...))(& _ZTI10QPdfWriter)
+152 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD1Ev
+160 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriterD0Ev
+168 (int (*)(...))QPaintDevice::devType
+176 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter11paintEngineEv
+184 (int (*)(...))QPdfWriter::_ZThn16_NK10QPdfWriter6metricEN12QPaintDevice17PaintDeviceMetricE
+192 (int (*)(...))QPaintDevice::initPainter
+200 (int (*)(...))QPaintDevice::redirected
+208 (int (*)(...))QPaintDevice::sharedPainter
+216 (int (*)(...))QPdfWriter::_ZThn16_N10QPdfWriter7newPageEv
+224 (int (*)(...))QPagedPaintDevice::setPageLayout
+232 (int (*)(...))QPagedPaintDevice::setPageSize
+240 (int (*)(...))QPagedPaintDevice::setPageOrientation
+248 (int (*)(...))QPagedPaintDevice::setPageMargins
+256 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPdfWriter
+ size=40 align=8
+ base size=40 base align=8
+QPdfWriter (0x0x7f0b3f0cd930) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+ QObject (0x0x7f0b3f14ac60) 0
+ primary-for QPdfWriter (0x0x7f0b3f0cd930)
+ QPagedPaintDevice (0x0x7f0b3f149340) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 152)
+ QPaintDevice (0x0x7f0b3f14acc0) 16
+ primary-for QPagedPaintDevice (0x0x7f0b3f149340)
+
+Vtable for QPicture
+QPicture::_ZTV8QPicture: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QPicture)
+16 (int (*)(...))QPicture::~QPicture
+24 (int (*)(...))QPicture::~QPicture
+32 (int (*)(...))QPicture::devType
+40 (int (*)(...))QPicture::paintEngine
+48 (int (*)(...))QPicture::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QPicture::setData
+
+Class QPicture
+ size=24 align=8
+ base size=24 base align=8
+QPicture (0x0x7f0b3f1493a8) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+ QPaintDevice (0x0x7f0b3f14af00) 0
+ primary-for QPicture (0x0x7f0b3f1493a8)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7f0b3f1b49c0) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7f0b3f1b4960) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7f0b3f209c60) 0 empty
+
+Vtable for QRasterWindow
+QRasterWindow::_ZTV13QRasterWindow: 60 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QRasterWindow)
+16 (int (*)(...))QRasterWindow::metaObject
+24 (int (*)(...))QRasterWindow::qt_metacast
+32 (int (*)(...))QRasterWindow::qt_metacall
+40 (int (*)(...))QRasterWindow::~QRasterWindow
+48 (int (*)(...))QRasterWindow::~QRasterWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QWindow::resizeEvent
+168 (int (*)(...))QPaintDeviceWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QRasterWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))QRasterWindow::redirected
+336 (int (*)(...))-16
+344 (int (*)(...))(& _ZTI13QRasterWindow)
+352 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD1Ev
+360 (int (*)(...))QRasterWindow::_ZThn16_N13QRasterWindowD0Ev
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+376 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+384 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+392 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+400 (int (*)(...))-40
+408 (int (*)(...))(& _ZTI13QRasterWindow)
+416 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD1Ev
+424 (int (*)(...))QRasterWindow::_ZThn40_N13QRasterWindowD0Ev
+432 (int (*)(...))QPaintDevice::devType
+440 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+448 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+456 (int (*)(...))QPaintDevice::initPainter
+464 (int (*)(...))QRasterWindow::_ZThn40_NK13QRasterWindow10redirectedEP6QPoint
+472 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QRasterWindow
+ size=56 align=8
+ base size=50 base align=8
+QRasterWindow (0x0x7f0b3f20e958) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+ QPaintDeviceWindow (0x0x7f0b3f1e0540) 0
+ primary-for QRasterWindow (0x0x7f0b3f20e958)
+ QWindow (0x0x7f0b3f1e05b0) 0
+ primary-for QPaintDeviceWindow (0x0x7f0b3f1e0540)
+ QObject (0x0x7f0b3f209b40) 0
+ primary-for QWindow (0x0x7f0b3f1e05b0)
+ QSurface (0x0x7f0b3f209ba0) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 352)
+ QPaintDevice (0x0x7f0b3f209c00) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 416)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7f0b3f230960) 0 empty
+
+Vtable for QSessionManager
+QSessionManager::_ZTV15QSessionManager: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSessionManager)
+16 (int (*)(...))QSessionManager::metaObject
+24 (int (*)(...))QSessionManager::qt_metacast
+32 (int (*)(...))QSessionManager::qt_metacall
+40 (int (*)(...))QSessionManager::~QSessionManager
+48 (int (*)(...))QSessionManager::~QSessionManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSessionManager
+ size=16 align=8
+ base size=16 base align=8
+QSessionManager (0x0x7f0b3f20ea28) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+ QObject (0x0x7f0b3f230900) 0
+ primary-for QSessionManager (0x0x7f0b3f20ea28)
+
+Class QShortcut::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QShortcut::QPrivateSignal (0x0x7f0b3f230b40) 0 empty
+
+Vtable for QShortcut
+QShortcut::_ZTV9QShortcut: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QShortcut)
+16 (int (*)(...))QShortcut::metaObject
+24 (int (*)(...))QShortcut::qt_metacast
+32 (int (*)(...))QShortcut::qt_metacall
+40 (int (*)(...))QShortcut::~QShortcut
+48 (int (*)(...))QShortcut::~QShortcut
+56 (int (*)(...))QShortcut::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QShortcut
+ size=16 align=8
+ base size=16 base align=8
+QShortcut (0x0x7f0b3f20ea90) 0
+ vptr=((& QShortcut::_ZTV9QShortcut) + 16)
+ QObject (0x0x7f0b3f230ae0) 0
+ primary-for QShortcut (0x0x7f0b3f20ea90)
+
+Vtable for QStandardItem
+QStandardItem::_ZTV13QStandardItem: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QStandardItem)
+16 (int (*)(...))QStandardItem::~QStandardItem
+24 (int (*)(...))QStandardItem::~QStandardItem
+32 (int (*)(...))QStandardItem::data
+40 (int (*)(...))QStandardItem::multiData
+48 (int (*)(...))QStandardItem::setData
+56 (int (*)(...))QStandardItem::clone
+64 (int (*)(...))QStandardItem::type
+72 (int (*)(...))QStandardItem::read
+80 (int (*)(...))QStandardItem::write
+88 (int (*)(...))QStandardItem::operator<
+
+Class QStandardItem
+ size=16 align=8
+ base size=16 base align=8
+QStandardItem (0x0x7f0b3ee6a060) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7f0b3ef5d060) 0 empty
+
+Vtable for QStandardItemModel
+QStandardItemModel::_ZTV18QStandardItemModel: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QStandardItemModel)
+16 (int (*)(...))QStandardItemModel::metaObject
+24 (int (*)(...))QStandardItemModel::qt_metacast
+32 (int (*)(...))QStandardItemModel::qt_metacall
+40 (int (*)(...))QStandardItemModel::~QStandardItemModel
+48 (int (*)(...))QStandardItemModel::~QStandardItemModel
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStandardItemModel::index
+120 (int (*)(...))QStandardItemModel::parent
+128 (int (*)(...))QAbstractItemModel::sibling
+136 (int (*)(...))QStandardItemModel::rowCount
+144 (int (*)(...))QStandardItemModel::columnCount
+152 (int (*)(...))QStandardItemModel::hasChildren
+160 (int (*)(...))QStandardItemModel::data
+168 (int (*)(...))QStandardItemModel::setData
+176 (int (*)(...))QStandardItemModel::headerData
+184 (int (*)(...))QStandardItemModel::setHeaderData
+192 (int (*)(...))QStandardItemModel::itemData
+200 (int (*)(...))QStandardItemModel::setItemData
+208 (int (*)(...))QStandardItemModel::clearItemData
+216 (int (*)(...))QStandardItemModel::mimeTypes
+224 (int (*)(...))QStandardItemModel::mimeData
+232 (int (*)(...))QAbstractItemModel::canDropMimeData
+240 (int (*)(...))QStandardItemModel::dropMimeData
+248 (int (*)(...))QStandardItemModel::supportedDropActions
+256 (int (*)(...))QAbstractItemModel::supportedDragActions
+264 (int (*)(...))QStandardItemModel::insertRows
+272 (int (*)(...))QStandardItemModel::insertColumns
+280 (int (*)(...))QStandardItemModel::removeRows
+288 (int (*)(...))QStandardItemModel::removeColumns
+296 (int (*)(...))QAbstractItemModel::moveRows
+304 (int (*)(...))QAbstractItemModel::moveColumns
+312 (int (*)(...))QAbstractItemModel::fetchMore
+320 (int (*)(...))QAbstractItemModel::canFetchMore
+328 (int (*)(...))QStandardItemModel::flags
+336 (int (*)(...))QStandardItemModel::sort
+344 (int (*)(...))QAbstractItemModel::buddy
+352 (int (*)(...))QAbstractItemModel::match
+360 (int (*)(...))QAbstractItemModel::span
+368 (int (*)(...))QStandardItemModel::roleNames
+376 (int (*)(...))QStandardItemModel::multiData
+384 (int (*)(...))QAbstractItemModel::submit
+392 (int (*)(...))QAbstractItemModel::revert
+400 (int (*)(...))QAbstractItemModel::resetInternalData
+
+Class QStandardItemModel
+ size=16 align=8
+ base size=16 base align=8
+QStandardItemModel (0x0x7f0b3eef2410) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+ QAbstractItemModel (0x0x7f0b3eef2478) 0
+ primary-for QStandardItemModel (0x0x7f0b3eef2410)
+ QObject (0x0x7f0b3ef5d000) 0
+ primary-for QAbstractItemModel (0x0x7f0b3eef2478)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7f0b3ef5d3c0) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7f0b3f018180) 0 empty
+
+Vtable for QStyleHints
+QStyleHints::_ZTV11QStyleHints: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QStyleHints)
+16 (int (*)(...))QStyleHints::metaObject
+24 (int (*)(...))QStyleHints::qt_metacast
+32 (int (*)(...))QStyleHints::qt_metacall
+40 (int (*)(...))QStyleHints::~QStyleHints
+48 (int (*)(...))QStyleHints::~QStyleHints
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QStyleHints
+ size=16 align=8
+ base size=16 base align=8
+QStyleHints (0x0x7f0b3efff1a0) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+ QObject (0x0x7f0b3f018120) 0
+ primary-for QStyleHints (0x0x7f0b3efff1a0)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7f0b3f018360) 0 empty
+
+Vtable for QTextObject
+QTextObject::_ZTV11QTextObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTextObject)
+16 (int (*)(...))QTextObject::metaObject
+24 (int (*)(...))QTextObject::qt_metacast
+32 (int (*)(...))QTextObject::qt_metacall
+40 (int (*)(...))QTextObject::~QTextObject
+48 (int (*)(...))QTextObject::~QTextObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextObject
+ size=16 align=8
+ base size=16 base align=8
+QTextObject (0x0x7f0b3efff208) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+ QObject (0x0x7f0b3f018300) 0
+ primary-for QTextObject (0x0x7f0b3efff208)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7f0b3f018540) 0 empty
+
+Vtable for QTextBlockGroup
+QTextBlockGroup::_ZTV15QTextBlockGroup: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QTextBlockGroup)
+16 (int (*)(...))QTextBlockGroup::metaObject
+24 (int (*)(...))QTextBlockGroup::qt_metacast
+32 (int (*)(...))QTextBlockGroup::qt_metacall
+40 (int (*)(...))QTextBlockGroup::~QTextBlockGroup
+48 (int (*)(...))QTextBlockGroup::~QTextBlockGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextBlockGroup::blockInserted
+120 (int (*)(...))QTextBlockGroup::blockRemoved
+128 (int (*)(...))QTextBlockGroup::blockFormatChanged
+
+Class QTextBlockGroup
+ size=16 align=8
+ base size=16 base align=8
+QTextBlockGroup (0x0x7f0b3efff270) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+ QTextObject (0x0x7f0b3efff2d8) 0
+ primary-for QTextBlockGroup (0x0x7f0b3efff270)
+ QObject (0x0x7f0b3f0184e0) 0
+ primary-for QTextObject (0x0x7f0b3efff2d8)
+
+Vtable for QTextFrameLayoutData
+QTextFrameLayoutData::_ZTV20QTextFrameLayoutData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QTextFrameLayoutData)
+16 (int (*)(...))QTextFrameLayoutData::~QTextFrameLayoutData
+24 (int (*)(...))QTextFrameLayoutData::~QTextFrameLayoutData
+
+Class QTextFrameLayoutData
+ size=8 align=8
+ base size=8 base align=8
+QTextFrameLayoutData (0x0x7f0b3f0186c0) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7f0b3f018780) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7f0b3f0187e0) 0
+
+Vtable for QTextFrame
+QTextFrame::_ZTV10QTextFrame: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextFrame)
+16 (int (*)(...))QTextFrame::metaObject
+24 (int (*)(...))QTextFrame::qt_metacast
+32 (int (*)(...))QTextFrame::qt_metacall
+40 (int (*)(...))QTextFrame::~QTextFrame
+48 (int (*)(...))QTextFrame::~QTextFrame
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextFrame
+ size=16 align=8
+ base size=16 base align=8
+QTextFrame (0x0x7f0b3efff340) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+ QTextObject (0x0x7f0b3efff3a8) 0
+ primary-for QTextFrame (0x0x7f0b3efff340)
+ QObject (0x0x7f0b3f018720) 0
+ primary-for QTextObject (0x0x7f0b3efff3a8)
+
+Vtable for QTextBlockUserData
+QTextBlockUserData::_ZTV18QTextBlockUserData: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QTextBlockUserData)
+16 (int (*)(...))QTextBlockUserData::~QTextBlockUserData
+24 (int (*)(...))QTextBlockUserData::~QTextBlockUserData
+
+Class QTextBlockUserData
+ size=8 align=8
+ base size=8 base align=8
+QTextBlockUserData (0x0x7f0b3ec84660) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7f0b3ec84720) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7f0b3ec846c0) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7f0b3ecedf60) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7f0b3ed2ede0) 0 empty
+
+Vtable for QSyntaxHighlighter
+QSyntaxHighlighter::_ZTV18QSyntaxHighlighter: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSyntaxHighlighter)
+16 (int (*)(...))QSyntaxHighlighter::metaObject
+24 (int (*)(...))QSyntaxHighlighter::qt_metacast
+32 (int (*)(...))QSyntaxHighlighter::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QSyntaxHighlighter
+ size=16 align=8
+ base size=16 base align=8
+QSyntaxHighlighter (0x0x7f0b3ed3e548) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+ QObject (0x0x7f0b3ed2ed80) 0
+ primary-for QSyntaxHighlighter (0x0x7f0b3ed3e548)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7f0b3ed2ef60) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7f0b3ed5b000) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7f0b3ed5b0c0) 0 empty
+
+Vtable for QTextList
+QTextList::_ZTV9QTextList: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTextList)
+16 (int (*)(...))QTextList::metaObject
+24 (int (*)(...))QTextList::qt_metacast
+32 (int (*)(...))QTextList::qt_metacall
+40 (int (*)(...))QTextList::~QTextList
+48 (int (*)(...))QTextList::~QTextList
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTextBlockGroup::blockInserted
+120 (int (*)(...))QTextBlockGroup::blockRemoved
+128 (int (*)(...))QTextBlockGroup::blockFormatChanged
+
+Class QTextList
+ size=16 align=8
+ base size=16 base align=8
+QTextList (0x0x7f0b3ed3e5b0) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+ QTextBlockGroup (0x0x7f0b3ed3e618) 0
+ primary-for QTextList (0x0x7f0b3ed3e5b0)
+ QTextObject (0x0x7f0b3ed3e680) 0
+ primary-for QTextBlockGroup (0x0x7f0b3ed3e618)
+ QObject (0x0x7f0b3ed5b060) 0
+ primary-for QTextObject (0x0x7f0b3ed3e680)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7f0b3ed5b480) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7f0b3ed5bcc0) 0 empty
+
+Vtable for QTextTable
+QTextTable::_ZTV10QTextTable: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTextTable)
+16 (int (*)(...))QTextTable::metaObject
+24 (int (*)(...))QTextTable::qt_metacast
+32 (int (*)(...))QTextTable::qt_metacall
+40 (int (*)(...))QTextTable::~QTextTable
+48 (int (*)(...))QTextTable::~QTextTable
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTextTable
+ size=16 align=8
+ base size=16 base align=8
+QTextTable (0x0x7f0b3ed3e6e8) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+ QTextFrame (0x0x7f0b3ed3e750) 0
+ primary-for QTextTable (0x0x7f0b3ed3e6e8)
+ QTextObject (0x0x7f0b3ed3e7b8) 0
+ primary-for QTextFrame (0x0x7f0b3ed3e750)
+ QObject (0x0x7f0b3ed5bc60) 0
+ primary-for QTextObject (0x0x7f0b3ed3e7b8)
+
+Class QUndoGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoGroup::QPrivateSignal (0x0x7f0b3ed8f0c0) 0 empty
+
+Vtable for QUndoGroup
+QUndoGroup::_ZTV10QUndoGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUndoGroup)
+16 (int (*)(...))QUndoGroup::metaObject
+24 (int (*)(...))QUndoGroup::qt_metacast
+32 (int (*)(...))QUndoGroup::qt_metacall
+40 (int (*)(...))QUndoGroup::~QUndoGroup
+48 (int (*)(...))QUndoGroup::~QUndoGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QUndoGroup
+ size=16 align=8
+ base size=16 base align=8
+QUndoGroup (0x0x7f0b3ed3e820) 0
+ vptr=((& QUndoGroup::_ZTV10QUndoGroup) + 16)
+ QObject (0x0x7f0b3ed8f060) 0
+ primary-for QUndoGroup (0x0x7f0b3ed3e820)
+
+Vtable for QUndoCommand
+QUndoCommand::_ZTV12QUndoCommand: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QUndoCommand)
+16 (int (*)(...))QUndoCommand::~QUndoCommand
+24 (int (*)(...))QUndoCommand::~QUndoCommand
+32 (int (*)(...))QUndoCommand::undo
+40 (int (*)(...))QUndoCommand::redo
+48 (int (*)(...))QUndoCommand::id
+56 (int (*)(...))QUndoCommand::mergeWith
+
+Class QUndoCommand
+ size=16 align=8
+ base size=16 base align=8
+QUndoCommand (0x0x7f0b3ed8f240) 0
+ vptr=((& QUndoCommand::_ZTV12QUndoCommand) + 16)
+
+Class QUndoStack::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoStack::QPrivateSignal (0x0x7f0b3ed8f300) 0 empty
+
+Vtable for QUndoStack
+QUndoStack::_ZTV10QUndoStack: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUndoStack)
+16 (int (*)(...))QUndoStack::metaObject
+24 (int (*)(...))QUndoStack::qt_metacast
+32 (int (*)(...))QUndoStack::qt_metacall
+40 (int (*)(...))QUndoStack::~QUndoStack
+48 (int (*)(...))QUndoStack::~QUndoStack
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QUndoStack
+ size=16 align=8
+ base size=16 base align=8
+QUndoStack (0x0x7f0b3ed3e888) 0
+ vptr=((& QUndoStack::_ZTV10QUndoStack) + 16)
+ QObject (0x0x7f0b3ed8f2a0) 0
+ primary-for QUndoStack (0x0x7f0b3ed3e888)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7f0b3ed8f4e0) 0 empty
+
+Vtable for QValidator
+QValidator::_ZTV10QValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QValidator)
+16 (int (*)(...))QValidator::metaObject
+24 (int (*)(...))QValidator::qt_metacast
+32 (int (*)(...))QValidator::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))QValidator::fixup
+
+Class QValidator
+ size=16 align=8
+ base size=16 base align=8
+QValidator (0x0x7f0b3ed3e8f0) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+ QObject (0x0x7f0b3ed8f480) 0
+ primary-for QValidator (0x0x7f0b3ed3e8f0)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7f0b3ed8f780) 0 empty
+
+Vtable for QIntValidator
+QIntValidator::_ZTV13QIntValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QIntValidator)
+16 (int (*)(...))QIntValidator::metaObject
+24 (int (*)(...))QIntValidator::qt_metacast
+32 (int (*)(...))QIntValidator::qt_metacall
+40 (int (*)(...))QIntValidator::~QIntValidator
+48 (int (*)(...))QIntValidator::~QIntValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QIntValidator::validate
+120 (int (*)(...))QIntValidator::fixup
+
+Class QIntValidator
+ size=24 align=8
+ base size=24 base align=8
+QIntValidator (0x0x7f0b3ed3e958) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+ QValidator (0x0x7f0b3ed3e9c0) 0
+ primary-for QIntValidator (0x0x7f0b3ed3e958)
+ QObject (0x0x7f0b3ed8f720) 0
+ primary-for QValidator (0x0x7f0b3ed3e9c0)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7f0b3ed8f960) 0 empty
+
+Vtable for QDoubleValidator
+QDoubleValidator::_ZTV16QDoubleValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QDoubleValidator)
+16 (int (*)(...))QDoubleValidator::metaObject
+24 (int (*)(...))QDoubleValidator::qt_metacast
+32 (int (*)(...))QDoubleValidator::qt_metacall
+40 (int (*)(...))QDoubleValidator::~QDoubleValidator
+48 (int (*)(...))QDoubleValidator::~QDoubleValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDoubleValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QDoubleValidator
+ size=40 align=8
+ base size=36 base align=8
+QDoubleValidator (0x0x7f0b3ed3ea28) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+ QValidator (0x0x7f0b3ed3ea90) 0
+ primary-for QDoubleValidator (0x0x7f0b3ed3ea28)
+ QObject (0x0x7f0b3ed8f900) 0
+ primary-for QValidator (0x0x7f0b3ed3ea90)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7f0b3ed8fd20) 0 empty
+
+Vtable for QRegularExpressionValidator
+QRegularExpressionValidator::_ZTV27QRegularExpressionValidator: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QRegularExpressionValidator)
+16 (int (*)(...))QRegularExpressionValidator::metaObject
+24 (int (*)(...))QRegularExpressionValidator::qt_metacast
+32 (int (*)(...))QRegularExpressionValidator::qt_metacall
+40 (int (*)(...))QRegularExpressionValidator::~QRegularExpressionValidator
+48 (int (*)(...))QRegularExpressionValidator::~QRegularExpressionValidator
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QRegularExpressionValidator::validate
+120 (int (*)(...))QValidator::fixup
+
+Class QRegularExpressionValidator
+ size=16 align=8
+ base size=16 base align=8
+QRegularExpressionValidator (0x0x7f0b3ed3eaf8) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+ QValidator (0x0x7f0b3ed3eb60) 0
+ primary-for QRegularExpressionValidator (0x0x7f0b3ed3eaf8)
+ QObject (0x0x7f0b3ed8fcc0) 0
+ primary-for QValidator (0x0x7f0b3ed3eb60)
+
+Class QSizePolicy::Bits
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy::Bits (0x0x7f0b3ed8ff00) 0
+
+Class QSizePolicy
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy (0x0x7f0b3ed8fea0) 0
+
+Class QWidgetData
+ size=88 align=8
+ base size=88 base align=8
+QWidgetData (0x0x7f0b3ea72f60) 0
+
+Class QWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidget::QPrivateSignal (0x0x7f0b3eab50c0) 0 empty
+
+Vtable for QWidget
+QWidget::_ZTV7QWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWidget)
+16 (int (*)(...))QWidget::metaObject
+24 (int (*)(...))QWidget::qt_metacast
+32 (int (*)(...))QWidget::qt_metacall
+40 (int (*)(...))QWidget::~QWidget
+48 (int (*)(...))QWidget::~QWidget
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI7QWidget)
+448 (int (*)(...))QWidget::_ZThn16_N7QWidgetD1Ev
+456 (int (*)(...))QWidget::_ZThn16_N7QWidgetD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWidget
+ size=40 align=8
+ base size=40 base align=8
+QWidget (0x0x7f0b3edd7ee0) 0
+ vptr=((& QWidget::_ZTV7QWidget) + 16)
+ QObject (0x0x7f0b3eab5000) 0
+ primary-for QWidget (0x0x7f0b3edd7ee0)
+ QPaintDevice (0x0x7f0b3eab5060) 16
+ vptr=((& QWidget::_ZTV7QWidget) + 448)
+
+Class QAbstractButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractButton::QPrivateSignal (0x0x7f0b3eb69a20) 0 empty
+
+Vtable for QAbstractButton
+QAbstractButton::_ZTV15QAbstractButton: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractButton)
+16 (int (*)(...))QAbstractButton::metaObject
+24 (int (*)(...))QAbstractButton::qt_metacast
+32 (int (*)(...))QAbstractButton::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI15QAbstractButton)
+472 0
+480 0
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractButton
+ size=40 align=8
+ base size=40 base align=8
+QAbstractButton (0x0x7f0b3ea7fb60) 0
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 16)
+ QWidget (0x0x7f0b3eb7b070) 0
+ primary-for QAbstractButton (0x0x7f0b3ea7fb60)
+ QObject (0x0x7f0b3eb69960) 0
+ primary-for QWidget (0x0x7f0b3eb7b070)
+ QPaintDevice (0x0x7f0b3eb699c0) 16
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 472)
+
+Class QAbstractSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSpinBox::QPrivateSignal (0x0x7f0b3eb69c60) 0 empty
+
+Vtable for QAbstractSpinBox
+QAbstractSpinBox::_ZTV16QAbstractSpinBox: 70 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QAbstractSpinBox)
+16 (int (*)(...))QAbstractSpinBox::metaObject
+24 (int (*)(...))QAbstractSpinBox::qt_metacast
+32 (int (*)(...))QAbstractSpinBox::qt_metacall
+40 (int (*)(...))QAbstractSpinBox::~QAbstractSpinBox
+48 (int (*)(...))QAbstractSpinBox::~QAbstractSpinBox
+56 (int (*)(...))QAbstractSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSpinBox::validate
+440 (int (*)(...))QAbstractSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI16QAbstractSpinBox)
+496 (int (*)(...))QAbstractSpinBox::_ZThn16_N16QAbstractSpinBoxD1Ev
+504 (int (*)(...))QAbstractSpinBox::_ZThn16_N16QAbstractSpinBoxD0Ev
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QAbstractSpinBox (0x0x7f0b3ea7fbc8) 0
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 16)
+ QWidget (0x0x7f0b3eb7b0e0) 0
+ primary-for QAbstractSpinBox (0x0x7f0b3ea7fbc8)
+ QObject (0x0x7f0b3eb69ba0) 0
+ primary-for QWidget (0x0x7f0b3eb7b0e0)
+ QPaintDevice (0x0x7f0b3eb69c00) 16
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 496)
+
+Class QAbstractSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSlider::QPrivateSignal (0x0x7f0b3ebbb4e0) 0 empty
+
+Vtable for QAbstractSlider
+QAbstractSlider::_ZTV15QAbstractSlider: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractSlider)
+16 (int (*)(...))QAbstractSlider::metaObject
+24 (int (*)(...))QAbstractSlider::qt_metacast
+32 (int (*)(...))QAbstractSlider::qt_metacall
+40 (int (*)(...))QAbstractSlider::~QAbstractSlider
+48 (int (*)(...))QAbstractSlider::~QAbstractSlider
+56 (int (*)(...))QAbstractSlider::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSlider::sliderChange
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI15QAbstractSlider)
+456 (int (*)(...))QAbstractSlider::_ZThn16_N15QAbstractSliderD1Ev
+464 (int (*)(...))QAbstractSlider::_ZThn16_N15QAbstractSliderD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractSlider
+ size=40 align=8
+ base size=40 base align=8
+QAbstractSlider (0x0x7f0b3ea7fd68) 0
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 16)
+ QWidget (0x0x7f0b3eb7b5b0) 0
+ primary-for QAbstractSlider (0x0x7f0b3ea7fd68)
+ QObject (0x0x7f0b3ebbb420) 0
+ primary-for QWidget (0x0x7f0b3eb7b5b0)
+ QPaintDevice (0x0x7f0b3ebbb480) 16
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 456)
+
+Class QSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSlider::QPrivateSignal (0x0x7f0b3ebbb720) 0 empty
+
+Vtable for QSlider
+QSlider::_ZTV7QSlider: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QSlider)
+16 (int (*)(...))QSlider::metaObject
+24 (int (*)(...))QSlider::qt_metacast
+32 (int (*)(...))QSlider::qt_metacall
+40 (int (*)(...))QSlider::~QSlider
+48 (int (*)(...))QSlider::~QSlider
+56 (int (*)(...))QSlider::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSlider::sizeHint
+136 (int (*)(...))QSlider::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSlider::mousePressEvent
+176 (int (*)(...))QSlider::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSlider::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSlider::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QAbstractSlider::sliderChange
+440 (int (*)(...))QSlider::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI7QSlider)
+464 (int (*)(...))QSlider::_ZThn16_N7QSliderD1Ev
+472 (int (*)(...))QSlider::_ZThn16_N7QSliderD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSlider
+ size=40 align=8
+ base size=40 base align=8
+QSlider (0x0x7f0b3ea7fdd0) 0
+ vptr=((& QSlider::_ZTV7QSlider) + 16)
+ QAbstractSlider (0x0x7f0b3ea7fe38) 0
+ primary-for QSlider (0x0x7f0b3ea7fdd0)
+ QWidget (0x0x7f0b3eb7bb60) 0
+ primary-for QAbstractSlider (0x0x7f0b3ea7fe38)
+ QObject (0x0x7f0b3ebbb660) 0
+ primary-for QWidget (0x0x7f0b3eb7bb60)
+ QPaintDevice (0x0x7f0b3ebbb6c0) 16
+ vptr=((& QSlider::_ZTV7QSlider) + 464)
+
+Class QStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyle::QPrivateSignal (0x0x7f0b3ebbb9c0) 0 empty
+
+Vtable for QStyle
+QStyle::_ZTV6QStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QStyle)
+16 (int (*)(...))QStyle::metaObject
+24 (int (*)(...))QStyle::qt_metacast
+32 (int (*)(...))QStyle::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStyle::polish
+120 (int (*)(...))QStyle::unpolish
+128 (int (*)(...))QStyle::polish
+136 (int (*)(...))QStyle::unpolish
+144 (int (*)(...))QStyle::polish
+152 (int (*)(...))QStyle::itemTextRect
+160 (int (*)(...))QStyle::itemPixmapRect
+168 (int (*)(...))QStyle::drawItemText
+176 (int (*)(...))QStyle::drawItemPixmap
+184 (int (*)(...))QStyle::standardPalette
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))__cxa_pure_virtual
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))__cxa_pure_virtual
+232 (int (*)(...))__cxa_pure_virtual
+240 (int (*)(...))__cxa_pure_virtual
+248 (int (*)(...))__cxa_pure_virtual
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))__cxa_pure_virtual
+272 (int (*)(...))__cxa_pure_virtual
+280 (int (*)(...))__cxa_pure_virtual
+288 (int (*)(...))__cxa_pure_virtual
+
+Class QStyle
+ size=16 align=8
+ base size=16 base align=8
+QStyle (0x0x7f0b3ea7fea0) 0
+ vptr=((& QStyle::_ZTV6QStyle) + 16)
+ QObject (0x0x7f0b3ebbb960) 0
+ primary-for QStyle (0x0x7f0b3ea7fea0)
+
+Class QTabBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabBar::QPrivateSignal (0x0x7f0b3e87bc00) 0 empty
+
+Vtable for QTabBar
+QTabBar::_ZTV7QTabBar: 70 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QTabBar)
+16 (int (*)(...))QTabBar::metaObject
+24 (int (*)(...))QTabBar::qt_metacast
+32 (int (*)(...))QTabBar::qt_metacall
+40 (int (*)(...))QTabBar::~QTabBar
+48 (int (*)(...))QTabBar::~QTabBar
+56 (int (*)(...))QTabBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTabBar::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QTabBar::sizeHint
+136 (int (*)(...))QTabBar::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTabBar::mousePressEvent
+176 (int (*)(...))QTabBar::mouseReleaseEvent
+184 (int (*)(...))QTabBar::mouseDoubleClickEvent
+192 (int (*)(...))QTabBar::mouseMoveEvent
+200 (int (*)(...))QTabBar::wheelEvent
+208 (int (*)(...))QTabBar::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTabBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTabBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QTabBar::showEvent
+352 (int (*)(...))QTabBar::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTabBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QTabBar::tabSizeHint
+440 (int (*)(...))QTabBar::minimumTabSizeHint
+448 (int (*)(...))QTabBar::tabInserted
+456 (int (*)(...))QTabBar::tabRemoved
+464 (int (*)(...))QTabBar::tabLayoutChange
+472 (int (*)(...))QTabBar::initStyleOption
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI7QTabBar)
+496 (int (*)(...))QTabBar::_ZThn16_N7QTabBarD1Ev
+504 (int (*)(...))QTabBar::_ZThn16_N7QTabBarD0Ev
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTabBar
+ size=40 align=8
+ base size=40 base align=8
+QTabBar (0x0x7f0b3e8851a0) 0
+ vptr=((& QTabBar::_ZTV7QTabBar) + 16)
+ QWidget (0x0x7f0b3e860700) 0
+ primary-for QTabBar (0x0x7f0b3e8851a0)
+ QObject (0x0x7f0b3e87bb40) 0
+ primary-for QWidget (0x0x7f0b3e860700)
+ QPaintDevice (0x0x7f0b3e87bba0) 16
+ vptr=((& QTabBar::_ZTV7QTabBar) + 496)
+
+Class QTabWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabWidget::QPrivateSignal (0x0x7f0b3e87bf00) 0 empty
+
+Vtable for QTabWidget
+QTabWidget::_ZTV10QTabWidget: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTabWidget)
+16 (int (*)(...))QTabWidget::metaObject
+24 (int (*)(...))QTabWidget::qt_metacast
+32 (int (*)(...))QTabWidget::qt_metacall
+40 (int (*)(...))QTabWidget::~QTabWidget
+48 (int (*)(...))QTabWidget::~QTabWidget
+56 (int (*)(...))QTabWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QTabWidget::sizeHint
+136 (int (*)(...))QTabWidget::minimumSizeHint
+144 (int (*)(...))QTabWidget::heightForWidth
+152 (int (*)(...))QTabWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QTabWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTabWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTabWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QTabWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTabWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QTabWidget::tabInserted
+440 (int (*)(...))QTabWidget::tabRemoved
+448 (int (*)(...))QTabWidget::initStyleOption
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI10QTabWidget)
+472 (int (*)(...))QTabWidget::_ZThn16_N10QTabWidgetD1Ev
+480 (int (*)(...))QTabWidget::_ZThn16_N10QTabWidgetD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTabWidget
+ size=40 align=8
+ base size=40 base align=8
+QTabWidget (0x0x7f0b3e885208) 0
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 16)
+ QWidget (0x0x7f0b3e860d20) 0
+ primary-for QTabWidget (0x0x7f0b3e885208)
+ QObject (0x0x7f0b3e87be40) 0
+ primary-for QWidget (0x0x7f0b3e860d20)
+ QPaintDevice (0x0x7f0b3e87bea0) 16
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 472)
+
+Class QRubberBand::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRubberBand::QPrivateSignal (0x0x7f0b3e946300) 0 empty
+
+Vtable for QRubberBand
+QRubberBand::_ZTV11QRubberBand: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QRubberBand)
+16 (int (*)(...))QRubberBand::metaObject
+24 (int (*)(...))QRubberBand::qt_metacast
+32 (int (*)(...))QRubberBand::qt_metacall
+40 (int (*)(...))QRubberBand::~QRubberBand
+48 (int (*)(...))QRubberBand::~QRubberBand
+56 (int (*)(...))QRubberBand::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QRubberBand::paintEvent
+264 (int (*)(...))QRubberBand::moveEvent
+272 (int (*)(...))QRubberBand::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QRubberBand::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QRubberBand::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QRubberBand::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QRubberBand)
+456 (int (*)(...))QRubberBand::_ZThn16_N11QRubberBandD1Ev
+464 (int (*)(...))QRubberBand::_ZThn16_N11QRubberBandD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QRubberBand
+ size=40 align=8
+ base size=40 base align=8
+QRubberBand (0x0x7f0b3e885270) 0
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 16)
+ QWidget (0x0x7f0b3e932070) 0
+ primary-for QRubberBand (0x0x7f0b3e885270)
+ QObject (0x0x7f0b3e946240) 0
+ primary-for QWidget (0x0x7f0b3e932070)
+ QPaintDevice (0x0x7f0b3e9462a0) 16
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 456)
+
+Class QFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFrame::QPrivateSignal (0x0x7f0b3e946720) 0 empty
+
+Vtable for QFrame
+QFrame::_ZTV6QFrame: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QFrame)
+16 (int (*)(...))QFrame::metaObject
+24 (int (*)(...))QFrame::qt_metacast
+32 (int (*)(...))QFrame::qt_metacall
+40 (int (*)(...))QFrame::~QFrame
+48 (int (*)(...))QFrame::~QFrame
+56 (int (*)(...))QFrame::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI6QFrame)
+456 (int (*)(...))QFrame::_ZThn16_N6QFrameD1Ev
+464 (int (*)(...))QFrame::_ZThn16_N6QFrameD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFrame
+ size=40 align=8
+ base size=40 base align=8
+QFrame (0x0x7f0b3e8852d8) 0
+ vptr=((& QFrame::_ZTV6QFrame) + 16)
+ QWidget (0x0x7f0b3e9321c0) 0
+ primary-for QFrame (0x0x7f0b3e8852d8)
+ QObject (0x0x7f0b3e946660) 0
+ primary-for QWidget (0x0x7f0b3e9321c0)
+ QPaintDevice (0x0x7f0b3e9466c0) 16
+ vptr=((& QFrame::_ZTV6QFrame) + 456)
+
+Class QStyleOption
+ size=64 align=8
+ base size=64 base align=8
+QStyleOption (0x0x7f0b3e946a20) 0
+
+Class QStyleOptionFocusRect
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFocusRect (0x0x7f0b3e885340) 0
+ QStyleOption (0x0x7f0b3e946a80) 0
+
+Class QStyleOptionFrame
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFrame (0x0x7f0b4c6a6208) 0
+ QStyleOption (0x0x7f0b3e946cc0) 0
+
+Class QStyleOptionTabWidgetFrame
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionTabWidgetFrame (0x0x7f0b4c6a6410) 0
+ QStyleOption (0x0x7f0b3e9af300) 0
+
+Class QStyleOptionTabBarBase
+ size=104 align=8
+ base size=101 base align=8
+QStyleOptionTabBarBase (0x0x7f0b3e8853a8) 0
+ QStyleOption (0x0x7f0b3e9af540) 0
+
+Class QStyleOptionHeader
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionHeader (0x0x7f0b3e885410) 0
+ QStyleOption (0x0x7f0b3e9af780) 0
+
+Class QStyleOptionHeaderV2
+ size=136 align=8
+ base size=136 base align=8
+QStyleOptionHeaderV2 (0x0x7f0b3e885478) 0
+ QStyleOptionHeader (0x0x7f0b3e8854e0) 0
+ QStyleOption (0x0x7f0b3e9af9c0) 0
+
+Class QStyleOptionButton
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionButton (0x0x7f0b3e8855b0) 0
+ QStyleOption (0x0x7f0b3e9afd80) 0
+
+Class QStyleOptionTab
+ size=160 align=8
+ base size=156 base align=8
+QStyleOptionTab (0x0x7f0b3e885750) 0
+ QStyleOption (0x0x7f0b3ea293c0) 0
+
+Class QStyleOptionToolBar
+ size=88 align=8
+ base size=88 base align=8
+QStyleOptionToolBar (0x0x7f0b3e885a28) 0
+ QStyleOption (0x0x7f0b3ea29ba0) 0
+
+Class QStyleOptionProgressBar
+ size=112 align=8
+ base size=111 base align=8
+QStyleOptionProgressBar (0x0x7f0b3e885bc8) 0
+ QStyleOption (0x0x7f0b3e6eb1e0) 0
+
+Class QStyleOptionMenuItem
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionMenuItem (0x0x7f0b3e885c30) 0
+ QStyleOption (0x0x7f0b3e6eb420) 0
+
+Class QStyleOptionDockWidget
+ size=96 align=8
+ base size=92 base align=8
+QStyleOptionDockWidget (0x0x7f0b3e885c98) 0
+ QStyleOption (0x0x7f0b3e6eb660) 0
+
+Class QStyleOptionViewItem
+ size=208 align=8
+ base size=208 base align=8
+QStyleOptionViewItem (0x0x7f0b3e885d00) 0
+ QStyleOption (0x0x7f0b3e6eb8a0) 0
+
+Class QStyleOptionToolBox
+ size=104 align=8
+ base size=104 base align=8
+QStyleOptionToolBox (0x0x7f0b3e885ea0) 0
+ QStyleOption (0x0x7f0b3e6ebea0) 0
+
+Class QStyleOptionRubberBand
+ size=72 align=8
+ base size=69 base align=8
+QStyleOptionRubberBand (0x0x7f0b3e885f08) 0
+ QStyleOption (0x0x7f0b3e78a120) 0
+
+Class QStyleOptionComplex
+ size=72 align=8
+ base size=72 base align=8
+QStyleOptionComplex (0x0x7f0b3e885f70) 0
+ QStyleOption (0x0x7f0b3e78a3c0) 0
+
+Class QStyleOptionSlider
+ size=128 align=8
+ base size=128 base align=8
+QStyleOptionSlider (0x0x7f0b3e79e000) 0
+ QStyleOptionComplex (0x0x7f0b3e79e068) 0
+ QStyleOption (0x0x7f0b3e78a660) 0
+
+Class QStyleOptionSpinBox
+ size=88 align=8
+ base size=81 base align=8
+QStyleOptionSpinBox (0x0x7f0b3e79e138) 0
+ QStyleOptionComplex (0x0x7f0b3e79e1a0) 0
+ QStyleOption (0x0x7f0b3e78aa20) 0
+
+Class QStyleOptionToolButton
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionToolButton (0x0x7f0b3e79e270) 0
+ QStyleOptionComplex (0x0x7f0b3e79e2d8) 0
+ QStyleOption (0x0x7f0b3e78ac60) 0
+
+Class QStyleOptionComboBox
+ size=144 align=8
+ base size=140 base align=8
+QStyleOptionComboBox (0x0x7f0b3e79e478) 0
+ QStyleOptionComplex (0x0x7f0b3e79e4e0) 0
+ QStyleOption (0x0x7f0b3e7da240) 0
+
+Class QStyleOptionTitleBar
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionTitleBar (0x0x7f0b3e79e548) 0
+ QStyleOptionComplex (0x0x7f0b3e79e5b0) 0
+ QStyleOption (0x0x7f0b3e7da480) 0
+
+Class QStyleOptionGroupBox
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionGroupBox (0x0x7f0b3e79e618) 0
+ QStyleOptionComplex (0x0x7f0b3e79e680) 0
+ QStyleOption (0x0x7f0b3e7da6c0) 0
+
+Class QStyleOptionSizeGrip
+ size=80 align=8
+ base size=76 base align=8
+QStyleOptionSizeGrip (0x0x7f0b3e79e6e8) 0
+ QStyleOptionComplex (0x0x7f0b3e79e750) 0
+ QStyleOption (0x0x7f0b3e7da900) 0
+
+Class QStyleOptionGraphicsItem
+ size=96 align=8
+ base size=96 base align=8
+QStyleOptionGraphicsItem (0x0x7f0b3e79e7b8) 0
+ QStyleOption (0x0x7f0b3e7dab40) 0
+
+Class QStyleHintReturn
+ size=8 align=4
+ base size=8 base align=4
+QStyleHintReturn (0x0x7f0b3e7daea0) 0
+
+Class QStyleHintReturnMask
+ size=16 align=8
+ base size=16 base align=8
+QStyleHintReturnMask (0x0x7f0b3e79e820) 0
+ QStyleHintReturn (0x0x7f0b3e7daf00) 0
+
+Class QStyleHintReturnVariant
+ size=40 align=8
+ base size=40 base align=8
+QStyleHintReturnVariant (0x0x7f0b3e79e8f0) 0
+ QStyleHintReturn (0x0x7f0b3e7daf60) 0
+
+Class QAbstractItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemDelegate::QPrivateSignal (0x0x7f0b3e845120) 0 empty
+
+Vtable for QAbstractItemDelegate
+QAbstractItemDelegate::_ZTV21QAbstractItemDelegate: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QAbstractItemDelegate)
+16 (int (*)(...))QAbstractItemDelegate::metaObject
+24 (int (*)(...))QAbstractItemDelegate::qt_metacast
+32 (int (*)(...))QAbstractItemDelegate::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QAbstractItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QAbstractItemDelegate::setEditorData
+152 (int (*)(...))QAbstractItemDelegate::setModelData
+160 (int (*)(...))QAbstractItemDelegate::updateEditorGeometry
+168 (int (*)(...))QAbstractItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+
+Class QAbstractItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemDelegate (0x0x7f0b3e79e9c0) 0
+ vptr=((& QAbstractItemDelegate::_ZTV21QAbstractItemDelegate) + 16)
+ QObject (0x0x7f0b3e8450c0) 0
+ primary-for QAbstractItemDelegate (0x0x7f0b3e79e9c0)
+
+Class QAbstractScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractScrollArea::QPrivateSignal (0x0x7f0b3e845360) 0 empty
+
+Vtable for QAbstractScrollArea
+QAbstractScrollArea::_ZTV19QAbstractScrollArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QAbstractScrollArea)
+16 (int (*)(...))QAbstractScrollArea::metaObject
+24 (int (*)(...))QAbstractScrollArea::qt_metacast
+32 (int (*)(...))QAbstractScrollArea::qt_metacall
+40 (int (*)(...))QAbstractScrollArea::~QAbstractScrollArea
+48 (int (*)(...))QAbstractScrollArea::~QAbstractScrollArea
+56 (int (*)(...))QAbstractScrollArea::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractScrollArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QAbstractScrollArea::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI19QAbstractScrollArea)
+488 (int (*)(...))QAbstractScrollArea::_ZThn16_N19QAbstractScrollAreaD1Ev
+496 (int (*)(...))QAbstractScrollArea::_ZThn16_N19QAbstractScrollAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractScrollArea
+ size=40 align=8
+ base size=40 base align=8
+QAbstractScrollArea (0x0x7f0b3e79ea28) 0
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 16)
+ QFrame (0x0x7f0b3e79ea90) 0
+ primary-for QAbstractScrollArea (0x0x7f0b3e79ea28)
+ QWidget (0x0x7f0b3e83c4d0) 0
+ primary-for QFrame (0x0x7f0b3e79ea90)
+ QObject (0x0x7f0b3e8452a0) 0
+ primary-for QWidget (0x0x7f0b3e83c4d0)
+ QPaintDevice (0x0x7f0b3e845300) 16
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 488)
+
+Class QAbstractItemView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemView::QPrivateSignal (0x0x7f0b3e845660) 0 empty
+
+Vtable for QAbstractItemView
+QAbstractItemView::_ZTV17QAbstractItemView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAbstractItemView)
+16 (int (*)(...))QAbstractItemView::metaObject
+24 (int (*)(...))QAbstractItemView::qt_metacast
+32 (int (*)(...))QAbstractItemView::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QAbstractScrollArea::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))__cxa_pure_virtual
+504 (int (*)(...))__cxa_pure_virtual
+512 (int (*)(...))__cxa_pure_virtual
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QAbstractItemView::setRootIndex
+560 (int (*)(...))QAbstractItemView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QAbstractItemView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QAbstractItemView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))__cxa_pure_virtual
+704 (int (*)(...))__cxa_pure_virtual
+712 (int (*)(...))__cxa_pure_virtual
+720 (int (*)(...))__cxa_pure_virtual
+728 (int (*)(...))__cxa_pure_virtual
+736 (int (*)(...))__cxa_pure_virtual
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI17QAbstractItemView)
+800 0
+808 0
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QAbstractItemView
+ size=40 align=8
+ base size=40 base align=8
+QAbstractItemView (0x0x7f0b3e79eaf8) 0
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 16)
+ QAbstractScrollArea (0x0x7f0b3e79eb60) 0
+ primary-for QAbstractItemView (0x0x7f0b3e79eaf8)
+ QFrame (0x0x7f0b3e79ebc8) 0
+ primary-for QAbstractScrollArea (0x0x7f0b3e79eb60)
+ QWidget (0x0x7f0b3e83c690) 0
+ primary-for QFrame (0x0x7f0b3e79ebc8)
+ QObject (0x0x7f0b3e8455a0) 0
+ primary-for QWidget (0x0x7f0b3e83c690)
+ QPaintDevice (0x0x7f0b3e845600) 16
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 800)
+
+Vtable for QAccessibleWidget
+QAccessibleWidget::_ZTV17QAccessibleWidget: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QAccessibleWidget)
+16 (int (*)(...))QAccessibleWidget::~QAccessibleWidget
+24 (int (*)(...))QAccessibleWidget::~QAccessibleWidget
+32 (int (*)(...))QAccessibleWidget::isValid
+40 (int (*)(...))QAccessibleObject::object
+48 (int (*)(...))QAccessibleWidget::window
+56 (int (*)(...))QAccessibleWidget::relations
+64 (int (*)(...))QAccessibleWidget::focusChild
+72 (int (*)(...))QAccessibleObject::childAt
+80 (int (*)(...))QAccessibleWidget::parent
+88 (int (*)(...))QAccessibleWidget::child
+96 (int (*)(...))QAccessibleWidget::childCount
+104 (int (*)(...))QAccessibleWidget::indexOfChild
+112 (int (*)(...))QAccessibleWidget::text
+120 (int (*)(...))QAccessibleObject::setText
+128 (int (*)(...))QAccessibleWidget::rect
+136 (int (*)(...))QAccessibleWidget::role
+144 (int (*)(...))QAccessibleWidget::state
+152 (int (*)(...))QAccessibleWidget::foregroundColor
+160 (int (*)(...))QAccessibleWidget::backgroundColor
+168 (int (*)(...))QAccessibleInterface::virtual_hook
+176 (int (*)(...))QAccessibleWidget::interface_cast
+184 (int (*)(...))QAccessibleWidget::actionNames
+192 (int (*)(...))QAccessibleWidget::doAction
+200 (int (*)(...))QAccessibleWidget::keyBindingsForAction
+208 (int (*)(...))-16
+216 (int (*)(...))(& _ZTI17QAccessibleWidget)
+224 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidgetD1Ev
+232 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidgetD0Ev
+240 (int (*)(...))QAccessibleWidget::_ZThn16_NK17QAccessibleWidget11actionNamesEv
+248 (int (*)(...))QAccessibleActionInterface::localizedActionName
+256 (int (*)(...))QAccessibleActionInterface::localizedActionDescription
+264 (int (*)(...))QAccessibleWidget::_ZThn16_N17QAccessibleWidget8doActionERK7QString
+272 (int (*)(...))QAccessibleWidget::_ZThn16_NK17QAccessibleWidget20keyBindingsForActionERK7QString
+
+Class QAccessibleWidget
+ size=32 align=8
+ base size=32 base align=8
+QAccessibleWidget (0x0x7f0b3e481bd0) 0
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 16)
+ QAccessibleObject (0x0x7f0b3e79ed68) 0
+ primary-for QAccessibleWidget (0x0x7f0b3e481bd0)
+ QAccessibleInterface (0x0x7f0b3e4f90c0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f0b3e79ed68)
+ QAccessibleActionInterface (0x0x7f0b3e4f9120) 16 nearly-empty
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 224)
+
+Class QApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QApplication::QPrivateSignal (0x0x7f0b3e4f9240) 0 empty
+
+Vtable for QApplication
+QApplication::_ZTV12QApplication: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QApplication)
+16 (int (*)(...))QApplication::metaObject
+24 (int (*)(...))QApplication::qt_metacast
+32 (int (*)(...))QApplication::qt_metacall
+40 (int (*)(...))QApplication::~QApplication
+48 (int (*)(...))QApplication::~QApplication
+56 (int (*)(...))QApplication::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QApplication::notify
+120 (int (*)(...))QApplication::compressEvent
+
+Class QApplication
+ size=16 align=8
+ base size=16 base align=8
+QApplication (0x0x7f0b3e79edd0) 0
+ vptr=((& QApplication::_ZTV12QApplication) + 16)
+ QGuiApplication (0x0x7f0b3e79ee38) 0
+ primary-for QApplication (0x0x7f0b3e79edd0)
+ QCoreApplication (0x0x7f0b3e79eea0) 0
+ primary-for QGuiApplication (0x0x7f0b3e79ee38)
+ QObject (0x0x7f0b3e4f91e0) 0
+ primary-for QCoreApplication (0x0x7f0b3e79eea0)
+
+Vtable for QLayoutItem
+QLayoutItem::_ZTV11QLayoutItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QLayoutItem)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))QLayoutItem::hasHeightForWidth
+96 (int (*)(...))QLayoutItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QLayoutItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QLayoutItem::controlTypes
+
+Class QLayoutItem
+ size=16 align=8
+ base size=12 base align=8
+QLayoutItem (0x0x7f0b3e4f94e0) 0
+ vptr=((& QLayoutItem::_ZTV11QLayoutItem) + 16)
+
+Vtable for QSpacerItem
+QSpacerItem::_ZTV11QSpacerItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSpacerItem)
+16 (int (*)(...))QSpacerItem::~QSpacerItem
+24 (int (*)(...))QSpacerItem::~QSpacerItem
+32 (int (*)(...))QSpacerItem::sizeHint
+40 (int (*)(...))QSpacerItem::minimumSize
+48 (int (*)(...))QSpacerItem::maximumSize
+56 (int (*)(...))QSpacerItem::expandingDirections
+64 (int (*)(...))QSpacerItem::setGeometry
+72 (int (*)(...))QSpacerItem::geometry
+80 (int (*)(...))QSpacerItem::isEmpty
+88 (int (*)(...))QLayoutItem::hasHeightForWidth
+96 (int (*)(...))QLayoutItem::heightForWidth
+104 (int (*)(...))QLayoutItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QLayoutItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QSpacerItem::spacerItem
+144 (int (*)(...))QLayoutItem::controlTypes
+
+Class QSpacerItem
+ size=40 align=8
+ base size=40 base align=8
+QSpacerItem (0x0x7f0b3e79ef08) 0
+ vptr=((& QSpacerItem::_ZTV11QSpacerItem) + 16)
+ QLayoutItem (0x0x7f0b3e4f9720) 0
+ primary-for QSpacerItem (0x0x7f0b3e79ef08)
+
+Vtable for QWidgetItem
+QWidgetItem::_ZTV11QWidgetItem: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWidgetItem)
+16 (int (*)(...))QWidgetItem::~QWidgetItem
+24 (int (*)(...))QWidgetItem::~QWidgetItem
+32 (int (*)(...))QWidgetItem::sizeHint
+40 (int (*)(...))QWidgetItem::minimumSize
+48 (int (*)(...))QWidgetItem::maximumSize
+56 (int (*)(...))QWidgetItem::expandingDirections
+64 (int (*)(...))QWidgetItem::setGeometry
+72 (int (*)(...))QWidgetItem::geometry
+80 (int (*)(...))QWidgetItem::isEmpty
+88 (int (*)(...))QWidgetItem::hasHeightForWidth
+96 (int (*)(...))QWidgetItem::heightForWidth
+104 (int (*)(...))QWidgetItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QWidgetItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QWidgetItem::controlTypes
+
+Class QWidgetItem
+ size=24 align=8
+ base size=24 base align=8
+QWidgetItem (0x0x7f0b3e79ef70) 0
+ vptr=((& QWidgetItem::_ZTV11QWidgetItem) + 16)
+ QLayoutItem (0x0x7f0b3e4f9960) 0
+ primary-for QWidgetItem (0x0x7f0b3e79ef70)
+
+Vtable for QWidgetItemV2
+QWidgetItemV2::_ZTV13QWidgetItemV2: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QWidgetItemV2)
+16 (int (*)(...))QWidgetItemV2::~QWidgetItemV2
+24 (int (*)(...))QWidgetItemV2::~QWidgetItemV2
+32 (int (*)(...))QWidgetItemV2::sizeHint
+40 (int (*)(...))QWidgetItemV2::minimumSize
+48 (int (*)(...))QWidgetItemV2::maximumSize
+56 (int (*)(...))QWidgetItem::expandingDirections
+64 (int (*)(...))QWidgetItem::setGeometry
+72 (int (*)(...))QWidgetItem::geometry
+80 (int (*)(...))QWidgetItem::isEmpty
+88 (int (*)(...))QWidgetItem::hasHeightForWidth
+96 (int (*)(...))QWidgetItemV2::heightForWidth
+104 (int (*)(...))QWidgetItem::minimumHeightForWidth
+112 (int (*)(...))QLayoutItem::invalidate
+120 (int (*)(...))QWidgetItem::widget
+128 (int (*)(...))QLayoutItem::layout
+136 (int (*)(...))QLayoutItem::spacerItem
+144 (int (*)(...))QWidgetItem::controlTypes
+
+Class QWidgetItemV2
+ size=88 align=8
+ base size=88 base align=8
+QWidgetItemV2 (0x0x7f0b3e79e0d0) 0
+ vptr=((& QWidgetItemV2::_ZTV13QWidgetItemV2) + 16)
+ QWidgetItem (0x0x7f0b3e54a000) 0
+ primary-for QWidgetItemV2 (0x0x7f0b3e79e0d0)
+ QLayoutItem (0x0x7f0b3e4f9b40) 0
+ primary-for QWidgetItem (0x0x7f0b3e54a000)
+
+Class QLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLayout::QPrivateSignal (0x0x7f0b3e4f9cc0) 0 empty
+
+Vtable for QLayout
+QLayout::_ZTV7QLayout: 51 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QLayout)
+16 (int (*)(...))QLayout::metaObject
+24 (int (*)(...))QLayout::qt_metacast
+32 (int (*)(...))QLayout::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLayout::spacing
+120 (int (*)(...))QLayout::setSpacing
+128 (int (*)(...))QLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QLayout::expandingDirections
+160 (int (*)(...))QLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QLayout::setGeometry
+184 (int (*)(...))__cxa_pure_virtual
+192 (int (*)(...))__cxa_pure_virtual
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))__cxa_pure_virtual
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))-16
+264 (int (*)(...))(& _ZTI7QLayout)
+272 0
+280 0
+288 (int (*)(...))__cxa_pure_virtual
+296 (int (*)(...))QLayout::_ZThn16_NK7QLayout11minimumSizeEv
+304 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+312 (int (*)(...))QLayout::_ZThn16_NK7QLayout19expandingDirectionsEv
+320 (int (*)(...))QLayout::_ZThn16_N7QLayout11setGeometryERK5QRect
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+336 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+344 (int (*)(...))QLayoutItem::hasHeightForWidth
+352 (int (*)(...))QLayoutItem::heightForWidth
+360 (int (*)(...))QLayoutItem::minimumHeightForWidth
+368 (int (*)(...))QLayout::_ZThn16_N7QLayout10invalidateEv
+376 (int (*)(...))QLayoutItem::widget
+384 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+392 (int (*)(...))QLayoutItem::spacerItem
+400 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QLayout
+ size=32 align=8
+ base size=28 base align=8
+QLayout (0x0x7f0b3e481d90) 0
+ vptr=((& QLayout::_ZTV7QLayout) + 16)
+ QObject (0x0x7f0b3e4f9c00) 0
+ primary-for QLayout (0x0x7f0b3e481d90)
+ QLayoutItem (0x0x7f0b3e4f9c60) 16
+ vptr=((& QLayout::_ZTV7QLayout) + 272)
+
+Class QGridLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGridLayout::QPrivateSignal (0x0x7f0b3e577000) 0 empty
+
+Vtable for QGridLayout
+QGridLayout::_ZTV11QGridLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QGridLayout)
+16 (int (*)(...))QGridLayout::metaObject
+24 (int (*)(...))QGridLayout::qt_metacast
+32 (int (*)(...))QGridLayout::qt_metacall
+40 (int (*)(...))QGridLayout::~QGridLayout
+48 (int (*)(...))QGridLayout::~QGridLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGridLayout::spacing
+120 (int (*)(...))QGridLayout::setSpacing
+128 (int (*)(...))QGridLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QGridLayout::addItem
+152 (int (*)(...))QGridLayout::expandingDirections
+160 (int (*)(...))QGridLayout::minimumSize
+168 (int (*)(...))QGridLayout::maximumSize
+176 (int (*)(...))QGridLayout::setGeometry
+184 (int (*)(...))QGridLayout::itemAt
+192 (int (*)(...))QGridLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QGridLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QGridLayout::sizeHint
+264 (int (*)(...))QGridLayout::hasHeightForWidth
+272 (int (*)(...))QGridLayout::heightForWidth
+280 (int (*)(...))QGridLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QGridLayout)
+304 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayoutD1Ev
+312 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayoutD0Ev
+320 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout8sizeHintEv
+328 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout11minimumSizeEv
+336 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout11maximumSizeEv
+344 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout19expandingDirectionsEv
+352 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout17hasHeightForWidthEv
+384 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout14heightForWidthEi
+392 (int (*)(...))QGridLayout::_ZThn16_NK11QGridLayout21minimumHeightForWidthEi
+400 (int (*)(...))QGridLayout::_ZThn16_N11QGridLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QGridLayout
+ size=32 align=8
+ base size=28 base align=8
+QGridLayout (0x0x7f0b3e54a068) 0
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 16)
+ QLayout (0x0x7f0b3e5550e0) 0
+ primary-for QGridLayout (0x0x7f0b3e54a068)
+ QObject (0x0x7f0b3e4f9f00) 0
+ primary-for QLayout (0x0x7f0b3e5550e0)
+ QLayoutItem (0x0x7f0b3e4f9f60) 16
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 304)
+
+Class QBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBoxLayout::QPrivateSignal (0x0x7f0b3e5772a0) 0 empty
+
+Vtable for QBoxLayout
+QBoxLayout::_ZTV10QBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QBoxLayout)
+16 (int (*)(...))QBoxLayout::metaObject
+24 (int (*)(...))QBoxLayout::qt_metacast
+32 (int (*)(...))QBoxLayout::qt_metacall
+40 (int (*)(...))QBoxLayout::~QBoxLayout
+48 (int (*)(...))QBoxLayout::~QBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI10QBoxLayout)
+304 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayoutD1Ev
+312 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QBoxLayout (0x0x7f0b3e54a0d0) 0
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 16)
+ QLayout (0x0x7f0b3e555150) 0
+ primary-for QBoxLayout (0x0x7f0b3e54a0d0)
+ QObject (0x0x7f0b3e5771e0) 0
+ primary-for QLayout (0x0x7f0b3e555150)
+ QLayoutItem (0x0x7f0b3e577240) 16
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 304)
+
+Class QHBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHBoxLayout::QPrivateSignal (0x0x7f0b3e5774e0) 0 empty
+
+Vtable for QHBoxLayout
+QHBoxLayout::_ZTV11QHBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHBoxLayout)
+16 (int (*)(...))QHBoxLayout::metaObject
+24 (int (*)(...))QHBoxLayout::qt_metacast
+32 (int (*)(...))QHBoxLayout::qt_metacall
+40 (int (*)(...))QHBoxLayout::~QHBoxLayout
+48 (int (*)(...))QHBoxLayout::~QHBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QHBoxLayout)
+304 (int (*)(...))QHBoxLayout::_ZThn16_N11QHBoxLayoutD1Ev
+312 (int (*)(...))QHBoxLayout::_ZThn16_N11QHBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QHBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QHBoxLayout (0x0x7f0b3e54a138) 0
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 16)
+ QBoxLayout (0x0x7f0b3e54a1a0) 0
+ primary-for QHBoxLayout (0x0x7f0b3e54a138)
+ QLayout (0x0x7f0b3e555460) 0
+ primary-for QBoxLayout (0x0x7f0b3e54a1a0)
+ QObject (0x0x7f0b3e577420) 0
+ primary-for QLayout (0x0x7f0b3e555460)
+ QLayoutItem (0x0x7f0b3e577480) 16
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 304)
+
+Class QVBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVBoxLayout::QPrivateSignal (0x0x7f0b3e577660) 0 empty
+
+Vtable for QVBoxLayout
+QVBoxLayout::_ZTV11QVBoxLayout: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QVBoxLayout)
+16 (int (*)(...))QVBoxLayout::metaObject
+24 (int (*)(...))QVBoxLayout::qt_metacast
+32 (int (*)(...))QVBoxLayout::qt_metacall
+40 (int (*)(...))QVBoxLayout::~QVBoxLayout
+48 (int (*)(...))QVBoxLayout::~QVBoxLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QBoxLayout::spacing
+120 (int (*)(...))QBoxLayout::setSpacing
+128 (int (*)(...))QBoxLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QBoxLayout::addItem
+152 (int (*)(...))QBoxLayout::expandingDirections
+160 (int (*)(...))QBoxLayout::minimumSize
+168 (int (*)(...))QBoxLayout::maximumSize
+176 (int (*)(...))QBoxLayout::setGeometry
+184 (int (*)(...))QBoxLayout::itemAt
+192 (int (*)(...))QBoxLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QBoxLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QBoxLayout::sizeHint
+264 (int (*)(...))QBoxLayout::hasHeightForWidth
+272 (int (*)(...))QBoxLayout::heightForWidth
+280 (int (*)(...))QBoxLayout::minimumHeightForWidth
+288 (int (*)(...))-16
+296 (int (*)(...))(& _ZTI11QVBoxLayout)
+304 (int (*)(...))QVBoxLayout::_ZThn16_N11QVBoxLayoutD1Ev
+312 (int (*)(...))QVBoxLayout::_ZThn16_N11QVBoxLayoutD0Ev
+320 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout8sizeHintEv
+328 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11minimumSizeEv
+336 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout11maximumSizeEv
+344 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout19expandingDirectionsEv
+352 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout11setGeometryERK5QRect
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+368 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+376 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout17hasHeightForWidthEv
+384 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout14heightForWidthEi
+392 (int (*)(...))QBoxLayout::_ZThn16_NK10QBoxLayout21minimumHeightForWidthEi
+400 (int (*)(...))QBoxLayout::_ZThn16_N10QBoxLayout10invalidateEv
+408 (int (*)(...))QLayoutItem::widget
+416 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+424 (int (*)(...))QLayoutItem::spacerItem
+432 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QVBoxLayout
+ size=32 align=8
+ base size=28 base align=8
+QVBoxLayout (0x0x7f0b3e54a208) 0
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 16)
+ QBoxLayout (0x0x7f0b3e54a270) 0
+ primary-for QVBoxLayout (0x0x7f0b3e54a208)
+ QLayout (0x0x7f0b3e5554d0) 0
+ primary-for QBoxLayout (0x0x7f0b3e54a270)
+ QObject (0x0x7f0b3e5775a0) 0
+ primary-for QLayout (0x0x7f0b3e5554d0)
+ QLayoutItem (0x0x7f0b3e577600) 16
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 304)
+
+Class QButtonGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QButtonGroup::QPrivateSignal (0x0x7f0b3e577780) 0 empty
+
+Vtable for QButtonGroup
+QButtonGroup::_ZTV12QButtonGroup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QButtonGroup)
+16 (int (*)(...))QButtonGroup::metaObject
+24 (int (*)(...))QButtonGroup::qt_metacast
+32 (int (*)(...))QButtonGroup::qt_metacall
+40 (int (*)(...))QButtonGroup::~QButtonGroup
+48 (int (*)(...))QButtonGroup::~QButtonGroup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QButtonGroup
+ size=16 align=8
+ base size=16 base align=8
+QButtonGroup (0x0x7f0b3e54a2d8) 0
+ vptr=((& QButtonGroup::_ZTV12QButtonGroup) + 16)
+ QObject (0x0x7f0b3e577720) 0
+ primary-for QButtonGroup (0x0x7f0b3e54a2d8)
+
+Class QCalendarWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCalendarWidget::QPrivateSignal (0x0x7f0b3e5779c0) 0 empty
+
+Vtable for QCalendarWidget
+QCalendarWidget::_ZTV15QCalendarWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QCalendarWidget)
+16 (int (*)(...))QCalendarWidget::metaObject
+24 (int (*)(...))QCalendarWidget::qt_metacast
+32 (int (*)(...))QCalendarWidget::qt_metacall
+40 (int (*)(...))QCalendarWidget::~QCalendarWidget
+48 (int (*)(...))QCalendarWidget::~QCalendarWidget
+56 (int (*)(...))QCalendarWidget::event
+64 (int (*)(...))QCalendarWidget::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCalendarWidget::sizeHint
+136 (int (*)(...))QCalendarWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QCalendarWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QCalendarWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QCalendarWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QCalendarWidget::paintCell
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI15QCalendarWidget)
+456 (int (*)(...))QCalendarWidget::_ZThn16_N15QCalendarWidgetD1Ev
+464 (int (*)(...))QCalendarWidget::_ZThn16_N15QCalendarWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCalendarWidget
+ size=40 align=8
+ base size=40 base align=8
+QCalendarWidget (0x0x7f0b3e54a340) 0
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 16)
+ QWidget (0x0x7f0b3e555540) 0
+ primary-for QCalendarWidget (0x0x7f0b3e54a340)
+ QObject (0x0x7f0b3e577900) 0
+ primary-for QWidget (0x0x7f0b3e555540)
+ QPaintDevice (0x0x7f0b3e577960) 16
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 456)
+
+Class QCheckBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCheckBox::QPrivateSignal (0x0x7f0b3e577e40) 0 empty
+
+Vtable for QCheckBox
+QCheckBox::_ZTV9QCheckBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QCheckBox)
+16 (int (*)(...))QCheckBox::metaObject
+24 (int (*)(...))QCheckBox::qt_metacast
+32 (int (*)(...))QCheckBox::qt_metacall
+40 (int (*)(...))QCheckBox::~QCheckBox
+48 (int (*)(...))QCheckBox::~QCheckBox
+56 (int (*)(...))QCheckBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCheckBox::sizeHint
+136 (int (*)(...))QCheckBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QCheckBox::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QCheckBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QCheckBox::hitButton
+440 (int (*)(...))QCheckBox::checkStateSet
+448 (int (*)(...))QCheckBox::nextCheckState
+456 (int (*)(...))QCheckBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI9QCheckBox)
+480 (int (*)(...))QCheckBox::_ZThn16_N9QCheckBoxD1Ev
+488 (int (*)(...))QCheckBox::_ZThn16_N9QCheckBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCheckBox
+ size=40 align=8
+ base size=40 base align=8
+QCheckBox (0x0x7f0b3e54a3a8) 0
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 16)
+ QAbstractButton (0x0x7f0b3e54a410) 0
+ primary-for QCheckBox (0x0x7f0b3e54a3a8)
+ QWidget (0x0x7f0b3e555930) 0
+ primary-for QAbstractButton (0x0x7f0b3e54a410)
+ QObject (0x0x7f0b3e577d80) 0
+ primary-for QWidget (0x0x7f0b3e555930)
+ QPaintDevice (0x0x7f0b3e577de0) 16
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 480)
+
+Class QDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialog::QPrivateSignal (0x0x7f0b3e6000c0) 0 empty
+
+Vtable for QDialog
+QDialog::_ZTV7QDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QDialog)
+16 (int (*)(...))QDialog::metaObject
+24 (int (*)(...))QDialog::qt_metacast
+32 (int (*)(...))QDialog::qt_metacall
+40 (int (*)(...))QDialog::~QDialog
+48 (int (*)(...))QDialog::~QDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI7QDialog)
+488 (int (*)(...))QDialog::_ZThn16_N7QDialogD1Ev
+496 (int (*)(...))QDialog::_ZThn16_N7QDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDialog
+ size=40 align=8
+ base size=40 base align=8
+QDialog (0x0x7f0b3e54a478) 0
+ vptr=((& QDialog::_ZTV7QDialog) + 16)
+ QWidget (0x0x7f0b3e5559a0) 0
+ primary-for QDialog (0x0x7f0b3e54a478)
+ QObject (0x0x7f0b3e600000) 0
+ primary-for QWidget (0x0x7f0b3e5559a0)
+ QPaintDevice (0x0x7f0b3e600060) 16
+ vptr=((& QDialog::_ZTV7QDialog) + 488)
+
+Class QColorDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColorDialog::QPrivateSignal (0x0x7f0b3e600300) 0 empty
+
+Vtable for QColorDialog
+QColorDialog::_ZTV12QColorDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QColorDialog)
+16 (int (*)(...))QColorDialog::metaObject
+24 (int (*)(...))QColorDialog::qt_metacast
+32 (int (*)(...))QColorDialog::qt_metacall
+40 (int (*)(...))QColorDialog::~QColorDialog
+48 (int (*)(...))QColorDialog::~QColorDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QColorDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QColorDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QColorDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QColorDialog)
+488 (int (*)(...))QColorDialog::_ZThn16_N12QColorDialogD1Ev
+496 (int (*)(...))QColorDialog::_ZThn16_N12QColorDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QColorDialog
+ size=40 align=8
+ base size=40 base align=8
+QColorDialog (0x0x7f0b3e54a4e0) 0
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 16)
+ QDialog (0x0x7f0b3e54a548) 0
+ primary-for QColorDialog (0x0x7f0b3e54a4e0)
+ QWidget (0x0x7f0b3e555af0) 0
+ primary-for QDialog (0x0x7f0b3e54a548)
+ QObject (0x0x7f0b3e600240) 0
+ primary-for QWidget (0x0x7f0b3e555af0)
+ QPaintDevice (0x0x7f0b3e6002a0) 16
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 488)
+
+Class QColormap
+ size=8 align=8
+ base size=8 base align=8
+QColormap (0x0x7f0b3e600900) 0
+
+Class QColumnView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColumnView::QPrivateSignal (0x0x7f0b3e600a20) 0 empty
+
+Vtable for QColumnView
+QColumnView::_ZTV11QColumnView: 109 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QColumnView)
+16 (int (*)(...))QColumnView::metaObject
+24 (int (*)(...))QColumnView::qt_metacast
+32 (int (*)(...))QColumnView::qt_metacall
+40 (int (*)(...))QColumnView::~QColumnView
+48 (int (*)(...))QColumnView::~QColumnView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QColumnView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QColumnView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QColumnView::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QColumnView::setModel
+480 (int (*)(...))QColumnView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QColumnView::visualRect
+504 (int (*)(...))QColumnView::scrollTo
+512 (int (*)(...))QColumnView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QColumnView::setRootIndex
+560 (int (*)(...))QAbstractItemView::doItemsLayout
+568 (int (*)(...))QColumnView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QColumnView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QColumnView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QAbstractItemView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QColumnView::moveCursor
+704 (int (*)(...))QColumnView::horizontalOffset
+712 (int (*)(...))QColumnView::verticalOffset
+720 (int (*)(...))QColumnView::isIndexHidden
+728 (int (*)(...))QColumnView::setSelection
+736 (int (*)(...))QColumnView::visualRegionForSelection
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QColumnView::createColumn
+792 (int (*)(...))-16
+800 (int (*)(...))(& _ZTI11QColumnView)
+808 (int (*)(...))QColumnView::_ZThn16_N11QColumnViewD1Ev
+816 (int (*)(...))QColumnView::_ZThn16_N11QColumnViewD0Ev
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QColumnView
+ size=40 align=8
+ base size=40 base align=8
+QColumnView (0x0x7f0b3e54a6e8) 0
+ vptr=((& QColumnView::_ZTV11QColumnView) + 16)
+ QAbstractItemView (0x0x7f0b3e54a750) 0
+ primary-for QColumnView (0x0x7f0b3e54a6e8)
+ QAbstractScrollArea (0x0x7f0b3e54a7b8) 0
+ primary-for QAbstractItemView (0x0x7f0b3e54a750)
+ QFrame (0x0x7f0b3e54a820) 0
+ primary-for QAbstractScrollArea (0x0x7f0b3e54a7b8)
+ QWidget (0x0x7f0b3e555e00) 0
+ primary-for QFrame (0x0x7f0b3e54a820)
+ QObject (0x0x7f0b3e600960) 0
+ primary-for QWidget (0x0x7f0b3e555e00)
+ QPaintDevice (0x0x7f0b3e6009c0) 16
+ vptr=((& QColumnView::_ZTV11QColumnView) + 808)
+
+Class QComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QComboBox::QPrivateSignal (0x0x7f0b3e600c60) 0 empty
+
+Vtable for QComboBox
+QComboBox::_ZTV9QComboBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QComboBox)
+16 (int (*)(...))QComboBox::metaObject
+24 (int (*)(...))QComboBox::qt_metacast
+32 (int (*)(...))QComboBox::qt_metacall
+40 (int (*)(...))QComboBox::~QComboBox
+48 (int (*)(...))QComboBox::~QComboBox
+56 (int (*)(...))QComboBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QComboBox::sizeHint
+136 (int (*)(...))QComboBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QComboBox::mousePressEvent
+176 (int (*)(...))QComboBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QComboBox::wheelEvent
+208 (int (*)(...))QComboBox::keyPressEvent
+216 (int (*)(...))QComboBox::keyReleaseEvent
+224 (int (*)(...))QComboBox::focusInEvent
+232 (int (*)(...))QComboBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QComboBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QComboBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QComboBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QComboBox::showEvent
+352 (int (*)(...))QComboBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QComboBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QComboBox::inputMethodEvent
+416 (int (*)(...))QComboBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QComboBox::setModel
+440 (int (*)(...))QComboBox::showPopup
+448 (int (*)(...))QComboBox::hidePopup
+456 (int (*)(...))QComboBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI9QComboBox)
+480 (int (*)(...))QComboBox::_ZThn16_N9QComboBoxD1Ev
+488 (int (*)(...))QComboBox::_ZThn16_N9QComboBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QComboBox
+ size=40 align=8
+ base size=40 base align=8
+QComboBox (0x0x7f0b3e54a888) 0
+ vptr=((& QComboBox::_ZTV9QComboBox) + 16)
+ QWidget (0x0x7f0b3e555e70) 0
+ primary-for QComboBox (0x0x7f0b3e54a888)
+ QObject (0x0x7f0b3e600ba0) 0
+ primary-for QWidget (0x0x7f0b3e555e70)
+ QPaintDevice (0x0x7f0b3e600c00) 16
+ vptr=((& QComboBox::_ZTV9QComboBox) + 480)
+
+Class QPushButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPushButton::QPrivateSignal (0x0x7f0b3e2bd240) 0 empty
+
+Vtable for QPushButton
+QPushButton::_ZTV11QPushButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPushButton)
+16 (int (*)(...))QPushButton::metaObject
+24 (int (*)(...))QPushButton::qt_metacast
+32 (int (*)(...))QPushButton::qt_metacall
+40 (int (*)(...))QPushButton::~QPushButton
+48 (int (*)(...))QPushButton::~QPushButton
+56 (int (*)(...))QPushButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QPushButton::sizeHint
+136 (int (*)(...))QPushButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QPushButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QPushButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QPushButton::focusInEvent
+232 (int (*)(...))QPushButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QPushButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QPushButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QPushButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI11QPushButton)
+480 (int (*)(...))QPushButton::_ZThn16_N11QPushButtonD1Ev
+488 (int (*)(...))QPushButton::_ZThn16_N11QPushButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QPushButton
+ size=40 align=8
+ base size=40 base align=8
+QPushButton (0x0x7f0b3e54a8f0) 0
+ vptr=((& QPushButton::_ZTV11QPushButton) + 16)
+ QAbstractButton (0x0x7f0b3e54a958) 0
+ primary-for QPushButton (0x0x7f0b3e54a8f0)
+ QWidget (0x0x7f0b3e294380) 0
+ primary-for QAbstractButton (0x0x7f0b3e54a958)
+ QObject (0x0x7f0b3e2bd180) 0
+ primary-for QWidget (0x0x7f0b3e294380)
+ QPaintDevice (0x0x7f0b3e2bd1e0) 16
+ vptr=((& QPushButton::_ZTV11QPushButton) + 480)
+
+Class QCommandLinkButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommandLinkButton::QPrivateSignal (0x0x7f0b3e2bd480) 0 empty
+
+Vtable for QCommandLinkButton
+QCommandLinkButton::_ZTV18QCommandLinkButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QCommandLinkButton)
+16 (int (*)(...))QCommandLinkButton::metaObject
+24 (int (*)(...))QCommandLinkButton::qt_metacast
+32 (int (*)(...))QCommandLinkButton::qt_metacall
+40 (int (*)(...))QCommandLinkButton::~QCommandLinkButton
+48 (int (*)(...))QCommandLinkButton::~QCommandLinkButton
+56 (int (*)(...))QCommandLinkButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QCommandLinkButton::sizeHint
+136 (int (*)(...))QCommandLinkButton::minimumSizeHint
+144 (int (*)(...))QCommandLinkButton::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QPushButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QPushButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QPushButton::focusInEvent
+232 (int (*)(...))QPushButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QCommandLinkButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QPushButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QCommandLinkButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI18QCommandLinkButton)
+480 (int (*)(...))QCommandLinkButton::_ZThn16_N18QCommandLinkButtonD1Ev
+488 (int (*)(...))QCommandLinkButton::_ZThn16_N18QCommandLinkButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QCommandLinkButton
+ size=40 align=8
+ base size=40 base align=8
+QCommandLinkButton (0x0x7f0b3e54a9c0) 0
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 16)
+ QPushButton (0x0x7f0b3e54aa28) 0
+ primary-for QCommandLinkButton (0x0x7f0b3e54a9c0)
+ QAbstractButton (0x0x7f0b3e54aa90) 0
+ primary-for QPushButton (0x0x7f0b3e54aa28)
+ QWidget (0x0x7f0b3e2943f0) 0
+ primary-for QAbstractButton (0x0x7f0b3e54aa90)
+ QObject (0x0x7f0b3e2bd3c0) 0
+ primary-for QWidget (0x0x7f0b3e2943f0)
+ QPaintDevice (0x0x7f0b3e2bd420) 16
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 480)
+
+Class QCommonStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommonStyle::QPrivateSignal (0x0x7f0b3e2bd660) 0 empty
+
+Vtable for QCommonStyle
+QCommonStyle::_ZTV12QCommonStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QCommonStyle)
+16 (int (*)(...))QCommonStyle::metaObject
+24 (int (*)(...))QCommonStyle::qt_metacast
+32 (int (*)(...))QCommonStyle::qt_metacall
+40 (int (*)(...))QCommonStyle::~QCommonStyle
+48 (int (*)(...))QCommonStyle::~QCommonStyle
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCommonStyle::polish
+120 (int (*)(...))QCommonStyle::unpolish
+128 (int (*)(...))QCommonStyle::polish
+136 (int (*)(...))QCommonStyle::unpolish
+144 (int (*)(...))QCommonStyle::polish
+152 (int (*)(...))QStyle::itemTextRect
+160 (int (*)(...))QStyle::itemPixmapRect
+168 (int (*)(...))QStyle::drawItemText
+176 (int (*)(...))QStyle::drawItemPixmap
+184 (int (*)(...))QStyle::standardPalette
+192 (int (*)(...))QCommonStyle::drawPrimitive
+200 (int (*)(...))QCommonStyle::drawControl
+208 (int (*)(...))QCommonStyle::subElementRect
+216 (int (*)(...))QCommonStyle::drawComplexControl
+224 (int (*)(...))QCommonStyle::hitTestComplexControl
+232 (int (*)(...))QCommonStyle::subControlRect
+240 (int (*)(...))QCommonStyle::pixelMetric
+248 (int (*)(...))QCommonStyle::sizeFromContents
+256 (int (*)(...))QCommonStyle::styleHint
+264 (int (*)(...))QCommonStyle::standardPixmap
+272 (int (*)(...))QCommonStyle::standardIcon
+280 (int (*)(...))QCommonStyle::generatedIconPixmap
+288 (int (*)(...))QCommonStyle::layoutSpacing
+
+Class QCommonStyle
+ size=16 align=8
+ base size=16 base align=8
+QCommonStyle (0x0x7f0b3e54aaf8) 0
+ vptr=((& QCommonStyle::_ZTV12QCommonStyle) + 16)
+ QStyle (0x0x7f0b3e54ab60) 0
+ primary-for QCommonStyle (0x0x7f0b3e54aaf8)
+ QObject (0x0x7f0b3e2bd600) 0
+ primary-for QStyle (0x0x7f0b3e54ab60)
+
+Class QCompleter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCompleter::QPrivateSignal (0x0x7f0b3e2bd840) 0 empty
+
+Vtable for QCompleter
+QCompleter::_ZTV10QCompleter: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QCompleter)
+16 (int (*)(...))QCompleter::metaObject
+24 (int (*)(...))QCompleter::qt_metacast
+32 (int (*)(...))QCompleter::qt_metacall
+40 (int (*)(...))QCompleter::~QCompleter
+48 (int (*)(...))QCompleter::~QCompleter
+56 (int (*)(...))QCompleter::event
+64 (int (*)(...))QCompleter::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QCompleter::pathFromIndex
+120 (int (*)(...))QCompleter::splitPath
+
+Class QCompleter
+ size=16 align=8
+ base size=16 base align=8
+QCompleter (0x0x7f0b3e54abc8) 0
+ vptr=((& QCompleter::_ZTV10QCompleter) + 16)
+ QObject (0x0x7f0b3e2bd7e0) 0
+ primary-for QCompleter (0x0x7f0b3e54abc8)
+
+Class QDataWidgetMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDataWidgetMapper::QPrivateSignal (0x0x7f0b3e2bdba0) 0 empty
+
+Vtable for QDataWidgetMapper
+QDataWidgetMapper::_ZTV17QDataWidgetMapper: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QDataWidgetMapper)
+16 (int (*)(...))QDataWidgetMapper::metaObject
+24 (int (*)(...))QDataWidgetMapper::qt_metacast
+32 (int (*)(...))QDataWidgetMapper::qt_metacall
+40 (int (*)(...))QDataWidgetMapper::~QDataWidgetMapper
+48 (int (*)(...))QDataWidgetMapper::~QDataWidgetMapper
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QDataWidgetMapper::setCurrentIndex
+
+Class QDataWidgetMapper
+ size=16 align=8
+ base size=16 base align=8
+QDataWidgetMapper (0x0x7f0b3e54ac30) 0
+ vptr=((& QDataWidgetMapper::_ZTV17QDataWidgetMapper) + 16)
+ QObject (0x0x7f0b3e2bdb40) 0
+ primary-for QDataWidgetMapper (0x0x7f0b3e54ac30)
+
+Class QDateTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateTimeEdit::QPrivateSignal (0x0x7f0b3e2bdea0) 0 empty
+
+Vtable for QDateTimeEdit
+QDateTimeEdit::_ZTV13QDateTimeEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QDateTimeEdit)
+16 (int (*)(...))QDateTimeEdit::metaObject
+24 (int (*)(...))QDateTimeEdit::qt_metacast
+32 (int (*)(...))QDateTimeEdit::qt_metacall
+40 (int (*)(...))QDateTimeEdit::~QDateTimeEdit
+48 (int (*)(...))QDateTimeEdit::~QDateTimeEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI13QDateTimeEdit)
+512 (int (*)(...))QDateTimeEdit::_ZThn16_N13QDateTimeEditD1Ev
+520 (int (*)(...))QDateTimeEdit::_ZThn16_N13QDateTimeEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDateTimeEdit
+ size=40 align=8
+ base size=40 base align=8
+QDateTimeEdit (0x0x7f0b3e54ac98) 0
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 16)
+ QAbstractSpinBox (0x0x7f0b3e54ad00) 0
+ primary-for QDateTimeEdit (0x0x7f0b3e54ac98)
+ QWidget (0x0x7f0b3e2947e0) 0
+ primary-for QAbstractSpinBox (0x0x7f0b3e54ad00)
+ QObject (0x0x7f0b3e2bdde0) 0
+ primary-for QWidget (0x0x7f0b3e2947e0)
+ QPaintDevice (0x0x7f0b3e2bde40) 16
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 512)
+
+Class QTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeEdit::QPrivateSignal (0x0x7f0b3e34e480) 0 empty
+
+Vtable for QTimeEdit
+QTimeEdit::_ZTV9QTimeEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTimeEdit)
+16 (int (*)(...))QTimeEdit::metaObject
+24 (int (*)(...))QTimeEdit::qt_metacast
+32 (int (*)(...))QTimeEdit::qt_metacall
+40 (int (*)(...))QTimeEdit::~QTimeEdit
+48 (int (*)(...))QTimeEdit::~QTimeEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI9QTimeEdit)
+512 (int (*)(...))QTimeEdit::_ZThn16_N9QTimeEditD1Ev
+520 (int (*)(...))QTimeEdit::_ZThn16_N9QTimeEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTimeEdit
+ size=40 align=8
+ base size=40 base align=8
+QTimeEdit (0x0x7f0b3e54aea0) 0
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 16)
+ QDateTimeEdit (0x0x7f0b3e54af08) 0
+ primary-for QTimeEdit (0x0x7f0b3e54aea0)
+ QAbstractSpinBox (0x0x7f0b3e54af70) 0
+ primary-for QDateTimeEdit (0x0x7f0b3e54af08)
+ QWidget (0x0x7f0b3e294d20) 0
+ primary-for QAbstractSpinBox (0x0x7f0b3e54af70)
+ QObject (0x0x7f0b3e34e3c0) 0
+ primary-for QWidget (0x0x7f0b3e294d20)
+ QPaintDevice (0x0x7f0b3e34e420) 16
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 512)
+
+Class QDateEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateEdit::QPrivateSignal (0x0x7f0b3e34e600) 0 empty
+
+Vtable for QDateEdit
+QDateEdit::_ZTV9QDateEdit: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QDateEdit)
+16 (int (*)(...))QDateEdit::metaObject
+24 (int (*)(...))QDateEdit::qt_metacast
+32 (int (*)(...))QDateEdit::qt_metacall
+40 (int (*)(...))QDateEdit::~QDateEdit
+48 (int (*)(...))QDateEdit::~QDateEdit
+56 (int (*)(...))QDateTimeEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDateTimeEdit::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDateTimeEdit::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QDateTimeEdit::wheelEvent
+208 (int (*)(...))QDateTimeEdit::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QDateTimeEdit::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDateTimeEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QDateTimeEdit::focusNextPrevChild
+432 (int (*)(...))QDateTimeEdit::validate
+440 (int (*)(...))QDateTimeEdit::fixup
+448 (int (*)(...))QDateTimeEdit::stepBy
+456 (int (*)(...))QDateTimeEdit::clear
+464 (int (*)(...))QDateTimeEdit::initStyleOption
+472 (int (*)(...))QDateTimeEdit::stepEnabled
+480 (int (*)(...))QDateTimeEdit::dateTimeFromText
+488 (int (*)(...))QDateTimeEdit::textFromDateTime
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI9QDateEdit)
+512 (int (*)(...))QDateEdit::_ZThn16_N9QDateEditD1Ev
+520 (int (*)(...))QDateEdit::_ZThn16_N9QDateEditD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDateEdit
+ size=40 align=8
+ base size=40 base align=8
+QDateEdit (0x0x7f0b3e372000) 0
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 16)
+ QDateTimeEdit (0x0x7f0b3e372068) 0
+ primary-for QDateEdit (0x0x7f0b3e372000)
+ QAbstractSpinBox (0x0x7f0b3e3720d0) 0
+ primary-for QDateTimeEdit (0x0x7f0b3e372068)
+ QWidget (0x0x7f0b3e294d90) 0
+ primary-for QAbstractSpinBox (0x0x7f0b3e3720d0)
+ QObject (0x0x7f0b3e34e540) 0
+ primary-for QWidget (0x0x7f0b3e294d90)
+ QPaintDevice (0x0x7f0b3e34e5a0) 16
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 512)
+
+Class QDial::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDial::QPrivateSignal (0x0x7f0b3e34e960) 0 empty
+
+Vtable for QDial
+QDial::_ZTV5QDial: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDial)
+16 (int (*)(...))QDial::metaObject
+24 (int (*)(...))QDial::qt_metacast
+32 (int (*)(...))QDial::qt_metacall
+40 (int (*)(...))QDial::~QDial
+48 (int (*)(...))QDial::~QDial
+56 (int (*)(...))QDial::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QDial::sizeHint
+136 (int (*)(...))QDial::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QDial::mousePressEvent
+176 (int (*)(...))QDial::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QDial::mouseMoveEvent
+200 (int (*)(...))QAbstractSlider::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDial::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDial::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDial::sliderChange
+440 (int (*)(...))QDial::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI5QDial)
+464 (int (*)(...))QDial::_ZThn16_N5QDialD1Ev
+472 (int (*)(...))QDial::_ZThn16_N5QDialD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDial
+ size=40 align=8
+ base size=40 base align=8
+QDial (0x0x7f0b3e372138) 0
+ vptr=((& QDial::_ZTV5QDial) + 16)
+ QAbstractSlider (0x0x7f0b3e3721a0) 0
+ primary-for QDial (0x0x7f0b3e372138)
+ QWidget (0x0x7f0b3e294e00) 0
+ primary-for QAbstractSlider (0x0x7f0b3e3721a0)
+ QObject (0x0x7f0b3e34e8a0) 0
+ primary-for QWidget (0x0x7f0b3e294e00)
+ QPaintDevice (0x0x7f0b3e34e900) 16
+ vptr=((& QDial::_ZTV5QDial) + 464)
+
+Class QDialogButtonBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialogButtonBox::QPrivateSignal (0x0x7f0b3e34eba0) 0 empty
+
+Vtable for QDialogButtonBox
+QDialogButtonBox::_ZTV16QDialogButtonBox: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QDialogButtonBox)
+16 (int (*)(...))QDialogButtonBox::metaObject
+24 (int (*)(...))QDialogButtonBox::qt_metacast
+32 (int (*)(...))QDialogButtonBox::qt_metacall
+40 (int (*)(...))QDialogButtonBox::~QDialogButtonBox
+48 (int (*)(...))QDialogButtonBox::~QDialogButtonBox
+56 (int (*)(...))QDialogButtonBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QDialogButtonBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI16QDialogButtonBox)
+448 (int (*)(...))QDialogButtonBox::_ZThn16_N16QDialogButtonBoxD1Ev
+456 (int (*)(...))QDialogButtonBox::_ZThn16_N16QDialogButtonBoxD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDialogButtonBox
+ size=40 align=8
+ base size=40 base align=8
+QDialogButtonBox (0x0x7f0b3e372208) 0
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 16)
+ QWidget (0x0x7f0b3e294e70) 0
+ primary-for QDialogButtonBox (0x0x7f0b3e372208)
+ QObject (0x0x7f0b3e34eae0) 0
+ primary-for QWidget (0x0x7f0b3e294e70)
+ QPaintDevice (0x0x7f0b3e34eb40) 16
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 448)
+
+Class QDockWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDockWidget::QPrivateSignal (0x0x7f0b3e3fb2a0) 0 empty
+
+Vtable for QDockWidget
+QDockWidget::_ZTV11QDockWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QDockWidget)
+16 (int (*)(...))QDockWidget::metaObject
+24 (int (*)(...))QDockWidget::qt_metacast
+32 (int (*)(...))QDockWidget::qt_metacall
+40 (int (*)(...))QDockWidget::~QDockWidget
+48 (int (*)(...))QDockWidget::~QDockWidget
+56 (int (*)(...))QDockWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QDockWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QDockWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QDockWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDockWidget::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QDockWidget)
+456 (int (*)(...))QDockWidget::_ZThn16_N11QDockWidgetD1Ev
+464 (int (*)(...))QDockWidget::_ZThn16_N11QDockWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDockWidget
+ size=40 align=8
+ base size=40 base align=8
+QDockWidget (0x0x7f0b3e3723a8) 0
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 16)
+ QWidget (0x0x7f0b3e3bef50) 0
+ primary-for QDockWidget (0x0x7f0b3e3723a8)
+ QObject (0x0x7f0b3e3fb1e0) 0
+ primary-for QWidget (0x0x7f0b3e3bef50)
+ QPaintDevice (0x0x7f0b3e3fb240) 16
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 456)
+
+Class QTileRules
+ size=8 align=4
+ base size=8 base align=4
+QTileRules (0x0x7f0b3e3fb960) 0
+
+Class QErrorMessage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QErrorMessage::QPrivateSignal (0x0x7f0b3e0ae000) 0 empty
+
+Vtable for QErrorMessage
+QErrorMessage::_ZTV13QErrorMessage: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QErrorMessage)
+16 (int (*)(...))QErrorMessage::metaObject
+24 (int (*)(...))QErrorMessage::qt_metacast
+32 (int (*)(...))QErrorMessage::qt_metacall
+40 (int (*)(...))QErrorMessage::~QErrorMessage
+48 (int (*)(...))QErrorMessage::~QErrorMessage
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QErrorMessage::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QErrorMessage::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI13QErrorMessage)
+488 (int (*)(...))QErrorMessage::_ZThn16_N13QErrorMessageD1Ev
+496 (int (*)(...))QErrorMessage::_ZThn16_N13QErrorMessageD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QErrorMessage
+ size=40 align=8
+ base size=40 base align=8
+QErrorMessage (0x0x7f0b3e372680) 0
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 16)
+ QDialog (0x0x7f0b3e3726e8) 0
+ primary-for QErrorMessage (0x0x7f0b3e372680)
+ QWidget (0x0x7f0b3e4209a0) 0
+ primary-for QDialog (0x0x7f0b3e3726e8)
+ QObject (0x0x7f0b3e3fbf00) 0
+ primary-for QWidget (0x0x7f0b3e4209a0)
+ QPaintDevice (0x0x7f0b3e3fbf60) 16
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 488)
+
+Class QFileDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDialog::QPrivateSignal (0x0x7f0b3e0ae240) 0 empty
+
+Vtable for QFileDialog
+QFileDialog::_ZTV11QFileDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFileDialog)
+16 (int (*)(...))QFileDialog::metaObject
+24 (int (*)(...))QFileDialog::qt_metacast
+32 (int (*)(...))QFileDialog::qt_metacall
+40 (int (*)(...))QFileDialog::~QFileDialog
+48 (int (*)(...))QFileDialog::~QFileDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QFileDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFileDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QFileDialog::done
+456 (int (*)(...))QFileDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QFileDialog)
+488 (int (*)(...))QFileDialog::_ZThn16_N11QFileDialogD1Ev
+496 (int (*)(...))QFileDialog::_ZThn16_N11QFileDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFileDialog
+ size=40 align=8
+ base size=40 base align=8
+QFileDialog (0x0x7f0b3e372750) 0
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 16)
+ QDialog (0x0x7f0b3e3727b8) 0
+ primary-for QFileDialog (0x0x7f0b3e372750)
+ QWidget (0x0x7f0b3e420a10) 0
+ primary-for QDialog (0x0x7f0b3e3727b8)
+ QObject (0x0x7f0b3e0ae180) 0
+ primary-for QWidget (0x0x7f0b3e420a10)
+ QPaintDevice (0x0x7f0b3e0ae1e0) 16
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 488)
+
+Vtable for QFileIconProvider
+QFileIconProvider::_ZTV17QFileIconProvider: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QFileIconProvider)
+16 (int (*)(...))QFileIconProvider::~QFileIconProvider
+24 (int (*)(...))QFileIconProvider::~QFileIconProvider
+32 (int (*)(...))QFileIconProvider::icon
+40 (int (*)(...))QFileIconProvider::icon
+48 (int (*)(...))QAbstractFileIconProvider::type
+56 (int (*)(...))QAbstractFileIconProvider::setOptions
+64 (int (*)(...))QAbstractFileIconProvider::options
+
+Class QFileIconProvider
+ size=16 align=8
+ base size=16 base align=8
+QFileIconProvider (0x0x7f0b3e372958) 0
+ vptr=((& QFileIconProvider::_ZTV17QFileIconProvider) + 16)
+ QAbstractFileIconProvider (0x0x7f0b3e0aeba0) 0
+ primary-for QFileIconProvider (0x0x7f0b3e372958)
+
+Class QFocusFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFocusFrame::QPrivateSignal (0x0x7f0b3e0aed80) 0 empty
+
+Vtable for QFocusFrame
+QFocusFrame::_ZTV11QFocusFrame: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFocusFrame)
+16 (int (*)(...))QFocusFrame::metaObject
+24 (int (*)(...))QFocusFrame::qt_metacast
+32 (int (*)(...))QFocusFrame::qt_metacall
+40 (int (*)(...))QFocusFrame::~QFocusFrame
+48 (int (*)(...))QFocusFrame::~QFocusFrame
+56 (int (*)(...))QFocusFrame::event
+64 (int (*)(...))QFocusFrame::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFocusFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFocusFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QFocusFrame)
+456 (int (*)(...))QFocusFrame::_ZThn16_N11QFocusFrameD1Ev
+464 (int (*)(...))QFocusFrame::_ZThn16_N11QFocusFrameD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFocusFrame
+ size=40 align=8
+ base size=40 base align=8
+QFocusFrame (0x0x7f0b3e3729c0) 0
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 16)
+ QWidget (0x0x7f0b3e0c1380) 0
+ primary-for QFocusFrame (0x0x7f0b3e3729c0)
+ QObject (0x0x7f0b3e0aecc0) 0
+ primary-for QWidget (0x0x7f0b3e0c1380)
+ QPaintDevice (0x0x7f0b3e0aed20) 16
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 456)
+
+Class QFontComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontComboBox::QPrivateSignal (0x0x7f0b3e155000) 0 empty
+
+Vtable for QFontComboBox
+QFontComboBox::_ZTV13QFontComboBox: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QFontComboBox)
+16 (int (*)(...))QFontComboBox::metaObject
+24 (int (*)(...))QFontComboBox::qt_metacast
+32 (int (*)(...))QFontComboBox::qt_metacall
+40 (int (*)(...))QFontComboBox::~QFontComboBox
+48 (int (*)(...))QFontComboBox::~QFontComboBox
+56 (int (*)(...))QFontComboBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFontComboBox::sizeHint
+136 (int (*)(...))QComboBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QComboBox::mousePressEvent
+176 (int (*)(...))QComboBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QComboBox::wheelEvent
+208 (int (*)(...))QComboBox::keyPressEvent
+216 (int (*)(...))QComboBox::keyReleaseEvent
+224 (int (*)(...))QComboBox::focusInEvent
+232 (int (*)(...))QComboBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QComboBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QComboBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QComboBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QComboBox::showEvent
+352 (int (*)(...))QComboBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QComboBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QComboBox::inputMethodEvent
+416 (int (*)(...))QComboBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QComboBox::setModel
+440 (int (*)(...))QComboBox::showPopup
+448 (int (*)(...))QComboBox::hidePopup
+456 (int (*)(...))QComboBox::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI13QFontComboBox)
+480 (int (*)(...))QFontComboBox::_ZThn16_N13QFontComboBoxD1Ev
+488 (int (*)(...))QFontComboBox::_ZThn16_N13QFontComboBoxD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFontComboBox
+ size=40 align=8
+ base size=40 base align=8
+QFontComboBox (0x0x7f0b3e372a28) 0
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 16)
+ QComboBox (0x0x7f0b3e372a90) 0
+ primary-for QFontComboBox (0x0x7f0b3e372a28)
+ QWidget (0x0x7f0b3e0c13f0) 0
+ primary-for QComboBox (0x0x7f0b3e372a90)
+ QObject (0x0x7f0b3e0aef00) 0
+ primary-for QWidget (0x0x7f0b3e0c13f0)
+ QPaintDevice (0x0x7f0b3e0aef60) 16
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 480)
+
+Class QFontDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontDialog::QPrivateSignal (0x0x7f0b3e1556c0) 0 empty
+
+Vtable for QFontDialog
+QFontDialog::_ZTV11QFontDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFontDialog)
+16 (int (*)(...))QFontDialog::metaObject
+24 (int (*)(...))QFontDialog::qt_metacast
+32 (int (*)(...))QFontDialog::qt_metacall
+40 (int (*)(...))QFontDialog::~QFontDialog
+48 (int (*)(...))QFontDialog::~QFontDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QFontDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QFontDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFontDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QFontDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QFontDialog)
+488 (int (*)(...))QFontDialog::_ZThn16_N11QFontDialogD1Ev
+496 (int (*)(...))QFontDialog::_ZThn16_N11QFontDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QFontDialog
+ size=40 align=8
+ base size=40 base align=8
+QFontDialog (0x0x7f0b3e372c30) 0
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 16)
+ QDialog (0x0x7f0b3e372c98) 0
+ primary-for QFontDialog (0x0x7f0b3e372c30)
+ QWidget (0x0x7f0b3e0c1690) 0
+ primary-for QDialog (0x0x7f0b3e372c98)
+ QObject (0x0x7f0b3e155600) 0
+ primary-for QWidget (0x0x7f0b3e0c1690)
+ QPaintDevice (0x0x7f0b3e155660) 16
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 488)
+
+Class QFormLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFormLayout::QPrivateSignal (0x0x7f0b3e155d80) 0 empty
+
+Class QFormLayout::TakeRowResult
+ size=16 align=8
+ base size=16 base align=8
+QFormLayout::TakeRowResult (0x0x7f0b3e155de0) 0
+
+Vtable for QFormLayout
+QFormLayout::_ZTV11QFormLayout: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QFormLayout)
+16 (int (*)(...))QFormLayout::metaObject
+24 (int (*)(...))QFormLayout::qt_metacast
+32 (int (*)(...))QFormLayout::qt_metacall
+40 (int (*)(...))QFormLayout::~QFormLayout
+48 (int (*)(...))QFormLayout::~QFormLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QFormLayout::spacing
+120 (int (*)(...))QFormLayout::setSpacing
+128 (int (*)(...))QFormLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QFormLayout::addItem
+152 (int (*)(...))QFormLayout::expandingDirections
+160 (int (*)(...))QFormLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QFormLayout::setGeometry
+184 (int (*)(...))QFormLayout::itemAt
+192 (int (*)(...))QFormLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QFormLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QFormLayout::sizeHint
+264 (int (*)(...))QFormLayout::hasHeightForWidth
+272 (int (*)(...))QFormLayout::heightForWidth
+280 (int (*)(...))-16
+288 (int (*)(...))(& _ZTI11QFormLayout)
+296 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayoutD1Ev
+304 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayoutD0Ev
+312 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout8sizeHintEv
+320 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout11minimumSizeEv
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+336 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout19expandingDirectionsEv
+344 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayout11setGeometryERK5QRect
+352 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+368 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout17hasHeightForWidthEv
+376 (int (*)(...))QFormLayout::_ZThn16_NK11QFormLayout14heightForWidthEi
+384 (int (*)(...))QLayoutItem::minimumHeightForWidth
+392 (int (*)(...))QFormLayout::_ZThn16_N11QFormLayout10invalidateEv
+400 (int (*)(...))QLayoutItem::widget
+408 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+416 (int (*)(...))QLayoutItem::spacerItem
+424 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QFormLayout
+ size=32 align=8
+ base size=28 base align=8
+QFormLayout (0x0x7f0b3e372e38) 0
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 16)
+ QLayout (0x0x7f0b3e0c19a0) 0
+ primary-for QFormLayout (0x0x7f0b3e372e38)
+ QObject (0x0x7f0b3e155cc0) 0
+ primary-for QLayout (0x0x7f0b3e0c19a0)
+ QLayoutItem (0x0x7f0b3e155d20) 16
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 296)
+
+Class QGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGesture::QPrivateSignal (0x0x7f0b3de960c0) 0 empty
+
+Vtable for QGesture
+QGesture::_ZTV8QGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QGesture)
+16 (int (*)(...))QGesture::metaObject
+24 (int (*)(...))QGesture::qt_metacast
+32 (int (*)(...))QGesture::qt_metacall
+40 (int (*)(...))QGesture::~QGesture
+48 (int (*)(...))QGesture::~QGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QGesture
+ size=16 align=8
+ base size=16 base align=8
+QGesture (0x0x7f0b3e24c9c0) 0
+ vptr=((& QGesture::_ZTV8QGesture) + 16)
+ QObject (0x0x7f0b3de96060) 0
+ primary-for QGesture (0x0x7f0b3e24c9c0)
+
+Class QPanGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPanGesture::QPrivateSignal (0x0x7f0b3de962a0) 0 empty
+
+Vtable for QPanGesture
+QPanGesture::_ZTV11QPanGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QPanGesture)
+16 (int (*)(...))QPanGesture::metaObject
+24 (int (*)(...))QPanGesture::qt_metacast
+32 (int (*)(...))QPanGesture::qt_metacall
+40 (int (*)(...))QPanGesture::~QPanGesture
+48 (int (*)(...))QPanGesture::~QPanGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPanGesture
+ size=16 align=8
+ base size=16 base align=8
+QPanGesture (0x0x7f0b3e24ca28) 0
+ vptr=((& QPanGesture::_ZTV11QPanGesture) + 16)
+ QGesture (0x0x7f0b3e24ca90) 0
+ primary-for QPanGesture (0x0x7f0b3e24ca28)
+ QObject (0x0x7f0b3de96240) 0
+ primary-for QGesture (0x0x7f0b3e24ca90)
+
+Class QPinchGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPinchGesture::QPrivateSignal (0x0x7f0b3de96480) 0 empty
+
+Vtable for QPinchGesture
+QPinchGesture::_ZTV13QPinchGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QPinchGesture)
+16 (int (*)(...))QPinchGesture::metaObject
+24 (int (*)(...))QPinchGesture::qt_metacast
+32 (int (*)(...))QPinchGesture::qt_metacall
+40 (int (*)(...))QPinchGesture::~QPinchGesture
+48 (int (*)(...))QPinchGesture::~QPinchGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QPinchGesture
+ size=16 align=8
+ base size=16 base align=8
+QPinchGesture (0x0x7f0b3e24caf8) 0
+ vptr=((& QPinchGesture::_ZTV13QPinchGesture) + 16)
+ QGesture (0x0x7f0b3e24cb60) 0
+ primary-for QPinchGesture (0x0x7f0b3e24caf8)
+ QObject (0x0x7f0b3de96420) 0
+ primary-for QGesture (0x0x7f0b3e24cb60)
+
+Class QSwipeGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSwipeGesture::QPrivateSignal (0x0x7f0b3df28cc0) 0 empty
+
+Vtable for QSwipeGesture
+QSwipeGesture::_ZTV13QSwipeGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSwipeGesture)
+16 (int (*)(...))QSwipeGesture::metaObject
+24 (int (*)(...))QSwipeGesture::qt_metacast
+32 (int (*)(...))QSwipeGesture::qt_metacall
+40 (int (*)(...))QSwipeGesture::~QSwipeGesture
+48 (int (*)(...))QSwipeGesture::~QSwipeGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSwipeGesture
+ size=16 align=8
+ base size=16 base align=8
+QSwipeGesture (0x0x7f0b3df58478) 0
+ vptr=((& QSwipeGesture::_ZTV13QSwipeGesture) + 16)
+ QGesture (0x0x7f0b3df584e0) 0
+ primary-for QSwipeGesture (0x0x7f0b3df58478)
+ QObject (0x0x7f0b3df28c60) 0
+ primary-for QGesture (0x0x7f0b3df584e0)
+
+Class QTapGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapGesture::QPrivateSignal (0x0x7f0b3df28f60) 0 empty
+
+Vtable for QTapGesture
+QTapGesture::_ZTV11QTapGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTapGesture)
+16 (int (*)(...))QTapGesture::metaObject
+24 (int (*)(...))QTapGesture::qt_metacast
+32 (int (*)(...))QTapGesture::qt_metacall
+40 (int (*)(...))QTapGesture::~QTapGesture
+48 (int (*)(...))QTapGesture::~QTapGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTapGesture
+ size=16 align=8
+ base size=16 base align=8
+QTapGesture (0x0x7f0b3df58548) 0
+ vptr=((& QTapGesture::_ZTV11QTapGesture) + 16)
+ QGesture (0x0x7f0b3df585b0) 0
+ primary-for QTapGesture (0x0x7f0b3df58548)
+ QObject (0x0x7f0b3df28f00) 0
+ primary-for QGesture (0x0x7f0b3df585b0)
+
+Class QTapAndHoldGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapAndHoldGesture::QPrivateSignal (0x0x7f0b3df71180) 0 empty
+
+Vtable for QTapAndHoldGesture
+QTapAndHoldGesture::_ZTV18QTapAndHoldGesture: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QTapAndHoldGesture)
+16 (int (*)(...))QTapAndHoldGesture::metaObject
+24 (int (*)(...))QTapAndHoldGesture::qt_metacast
+32 (int (*)(...))QTapAndHoldGesture::qt_metacall
+40 (int (*)(...))QTapAndHoldGesture::~QTapAndHoldGesture
+48 (int (*)(...))QTapAndHoldGesture::~QTapAndHoldGesture
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTapAndHoldGesture
+ size=16 align=8
+ base size=16 base align=8
+QTapAndHoldGesture (0x0x7f0b3df58618) 0
+ vptr=((& QTapAndHoldGesture::_ZTV18QTapAndHoldGesture) + 16)
+ QGesture (0x0x7f0b3df58680) 0
+ primary-for QTapAndHoldGesture (0x0x7f0b3df58618)
+ QObject (0x0x7f0b3df71120) 0
+ primary-for QGesture (0x0x7f0b3df58680)
+
+Vtable for QGestureEvent
+QGestureEvent::_ZTV13QGestureEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGestureEvent)
+16 (int (*)(...))QGestureEvent::~QGestureEvent
+24 (int (*)(...))QGestureEvent::~QGestureEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGestureEvent
+ size=64 align=8
+ base size=64 base align=8
+QGestureEvent (0x0x7f0b3df586e8) 0
+ vptr=((& QGestureEvent::_ZTV13QGestureEvent) + 16)
+ QEvent (0x0x7f0b3df71300) 0
+ primary-for QGestureEvent (0x0x7f0b3df586e8)
+
+Vtable for QGestureRecognizer
+QGestureRecognizer::_ZTV18QGestureRecognizer: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGestureRecognizer)
+16 0
+24 0
+32 (int (*)(...))QGestureRecognizer::create
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGestureRecognizer::reset
+
+Class QGestureRecognizer
+ size=8 align=8
+ base size=8 base align=8
+QGestureRecognizer (0x0x7f0b3e04fe40) 0 nearly-empty
+ vptr=((& QGestureRecognizer::_ZTV18QGestureRecognizer) + 16)
+
+Vtable for QGraphicsItem
+QGraphicsItem::_ZTV13QGraphicsItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGraphicsItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsItem::isObscuredBy
+88 (int (*)(...))QGraphicsItem::opaqueArea
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))QGraphicsItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsItem (0x0x7f0b3dc8d2a0) 0
+ vptr=((& QGraphicsItem::_ZTV13QGraphicsItem) + 16)
+
+Class QGraphicsObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsObject::QPrivateSignal (0x0x7f0b3dd82540) 0 empty
+
+Vtable for QGraphicsObject
+QGraphicsObject::_ZTV15QGraphicsObject: 53 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsObject)
+16 (int (*)(...))QGraphicsObject::metaObject
+24 (int (*)(...))QGraphicsObject::qt_metacast
+32 (int (*)(...))QGraphicsObject::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QGraphicsObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))-16
+120 (int (*)(...))(& _ZTI15QGraphicsObject)
+128 0
+136 0
+144 (int (*)(...))QGraphicsItem::advance
+152 (int (*)(...))__cxa_pure_virtual
+160 (int (*)(...))QGraphicsItem::shape
+168 (int (*)(...))QGraphicsItem::contains
+176 (int (*)(...))QGraphicsItem::collidesWithItem
+184 (int (*)(...))QGraphicsItem::collidesWithPath
+192 (int (*)(...))QGraphicsItem::isObscuredBy
+200 (int (*)(...))QGraphicsItem::opaqueArea
+208 (int (*)(...))__cxa_pure_virtual
+216 (int (*)(...))QGraphicsItem::type
+224 (int (*)(...))QGraphicsItem::sceneEventFilter
+232 (int (*)(...))QGraphicsItem::sceneEvent
+240 (int (*)(...))QGraphicsItem::contextMenuEvent
+248 (int (*)(...))QGraphicsItem::dragEnterEvent
+256 (int (*)(...))QGraphicsItem::dragLeaveEvent
+264 (int (*)(...))QGraphicsItem::dragMoveEvent
+272 (int (*)(...))QGraphicsItem::dropEvent
+280 (int (*)(...))QGraphicsItem::focusInEvent
+288 (int (*)(...))QGraphicsItem::focusOutEvent
+296 (int (*)(...))QGraphicsItem::hoverEnterEvent
+304 (int (*)(...))QGraphicsItem::hoverMoveEvent
+312 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+320 (int (*)(...))QGraphicsItem::keyPressEvent
+328 (int (*)(...))QGraphicsItem::keyReleaseEvent
+336 (int (*)(...))QGraphicsItem::mousePressEvent
+344 (int (*)(...))QGraphicsItem::mouseMoveEvent
+352 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+360 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+368 (int (*)(...))QGraphicsItem::wheelEvent
+376 (int (*)(...))QGraphicsItem::inputMethodEvent
+384 (int (*)(...))QGraphicsItem::inputMethodQuery
+392 (int (*)(...))QGraphicsItem::itemChange
+400 (int (*)(...))QGraphicsItem::supportsExtension
+408 (int (*)(...))QGraphicsItem::setExtension
+416 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsObject
+ size=32 align=8
+ base size=32 base align=8
+QGraphicsObject (0x0x7f0b3dd92000) 0
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 16)
+ QObject (0x0x7f0b3dd82480) 0
+ primary-for QGraphicsObject (0x0x7f0b3dd92000)
+ QGraphicsItem (0x0x7f0b3dd824e0) 16
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 128)
+
+Vtable for QAbstractGraphicsShapeItem
+QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QAbstractGraphicsShapeItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QAbstractGraphicsShapeItem::isObscuredBy
+88 (int (*)(...))QAbstractGraphicsShapeItem::opaqueArea
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))QGraphicsItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QAbstractGraphicsShapeItem
+ size=16 align=8
+ base size=16 base align=8
+QAbstractGraphicsShapeItem (0x0x7f0b3dc7c820) 0
+ vptr=((& QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem) + 16)
+ QGraphicsItem (0x0x7f0b3dd82600) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f0b3dc7c820)
+
+Vtable for QGraphicsPathItem
+QGraphicsPathItem::_ZTV17QGraphicsPathItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsPathItem)
+16 (int (*)(...))QGraphicsPathItem::~QGraphicsPathItem
+24 (int (*)(...))QGraphicsPathItem::~QGraphicsPathItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPathItem::boundingRect
+48 (int (*)(...))QGraphicsPathItem::shape
+56 (int (*)(...))QGraphicsPathItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPathItem::isObscuredBy
+88 (int (*)(...))QGraphicsPathItem::opaqueArea
+96 (int (*)(...))QGraphicsPathItem::paint
+104 (int (*)(...))QGraphicsPathItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPathItem::supportsExtension
+296 (int (*)(...))QGraphicsPathItem::setExtension
+304 (int (*)(...))QGraphicsPathItem::extension
+
+Class QGraphicsPathItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPathItem (0x0x7f0b3dc7c888) 0
+ vptr=((& QGraphicsPathItem::_ZTV17QGraphicsPathItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f0b3dc7c8f0) 0
+ primary-for QGraphicsPathItem (0x0x7f0b3dc7c888)
+ QGraphicsItem (0x0x7f0b3dd82720) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f0b3dc7c8f0)
+
+Vtable for QGraphicsRectItem
+QGraphicsRectItem::_ZTV17QGraphicsRectItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsRectItem)
+16 (int (*)(...))QGraphicsRectItem::~QGraphicsRectItem
+24 (int (*)(...))QGraphicsRectItem::~QGraphicsRectItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsRectItem::boundingRect
+48 (int (*)(...))QGraphicsRectItem::shape
+56 (int (*)(...))QGraphicsRectItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsRectItem::isObscuredBy
+88 (int (*)(...))QGraphicsRectItem::opaqueArea
+96 (int (*)(...))QGraphicsRectItem::paint
+104 (int (*)(...))QGraphicsRectItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsRectItem::supportsExtension
+296 (int (*)(...))QGraphicsRectItem::setExtension
+304 (int (*)(...))QGraphicsRectItem::extension
+
+Class QGraphicsRectItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsRectItem (0x0x7f0b3dc7c958) 0
+ vptr=((& QGraphicsRectItem::_ZTV17QGraphicsRectItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f0b3dc7c9c0) 0
+ primary-for QGraphicsRectItem (0x0x7f0b3dc7c958)
+ QGraphicsItem (0x0x7f0b3dd82840) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f0b3dc7c9c0)
+
+Vtable for QGraphicsEllipseItem
+QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsEllipseItem)
+16 (int (*)(...))QGraphicsEllipseItem::~QGraphicsEllipseItem
+24 (int (*)(...))QGraphicsEllipseItem::~QGraphicsEllipseItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsEllipseItem::boundingRect
+48 (int (*)(...))QGraphicsEllipseItem::shape
+56 (int (*)(...))QGraphicsEllipseItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsEllipseItem::isObscuredBy
+88 (int (*)(...))QGraphicsEllipseItem::opaqueArea
+96 (int (*)(...))QGraphicsEllipseItem::paint
+104 (int (*)(...))QGraphicsEllipseItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsEllipseItem::supportsExtension
+296 (int (*)(...))QGraphicsEllipseItem::setExtension
+304 (int (*)(...))QGraphicsEllipseItem::extension
+
+Class QGraphicsEllipseItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsEllipseItem (0x0x7f0b3dc7ca28) 0
+ vptr=((& QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f0b3dc7ca90) 0
+ primary-for QGraphicsEllipseItem (0x0x7f0b3dc7ca28)
+ QGraphicsItem (0x0x7f0b3dd829c0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f0b3dc7ca90)
+
+Vtable for QGraphicsPolygonItem
+QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsPolygonItem)
+16 (int (*)(...))QGraphicsPolygonItem::~QGraphicsPolygonItem
+24 (int (*)(...))QGraphicsPolygonItem::~QGraphicsPolygonItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPolygonItem::boundingRect
+48 (int (*)(...))QGraphicsPolygonItem::shape
+56 (int (*)(...))QGraphicsPolygonItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPolygonItem::isObscuredBy
+88 (int (*)(...))QGraphicsPolygonItem::opaqueArea
+96 (int (*)(...))QGraphicsPolygonItem::paint
+104 (int (*)(...))QGraphicsPolygonItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPolygonItem::supportsExtension
+296 (int (*)(...))QGraphicsPolygonItem::setExtension
+304 (int (*)(...))QGraphicsPolygonItem::extension
+
+Class QGraphicsPolygonItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPolygonItem (0x0x7f0b3dc7caf8) 0
+ vptr=((& QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f0b3dc7cb60) 0
+ primary-for QGraphicsPolygonItem (0x0x7f0b3dc7caf8)
+ QGraphicsItem (0x0x7f0b3dd82b40) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f0b3dc7cb60)
+
+Vtable for QGraphicsLineItem
+QGraphicsLineItem::_ZTV17QGraphicsLineItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsLineItem)
+16 (int (*)(...))QGraphicsLineItem::~QGraphicsLineItem
+24 (int (*)(...))QGraphicsLineItem::~QGraphicsLineItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsLineItem::boundingRect
+48 (int (*)(...))QGraphicsLineItem::shape
+56 (int (*)(...))QGraphicsLineItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsLineItem::isObscuredBy
+88 (int (*)(...))QGraphicsLineItem::opaqueArea
+96 (int (*)(...))QGraphicsLineItem::paint
+104 (int (*)(...))QGraphicsLineItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsLineItem::supportsExtension
+296 (int (*)(...))QGraphicsLineItem::setExtension
+304 (int (*)(...))QGraphicsLineItem::extension
+
+Class QGraphicsLineItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLineItem (0x0x7f0b3dc7cbc8) 0
+ vptr=((& QGraphicsLineItem::_ZTV17QGraphicsLineItem) + 16)
+ QGraphicsItem (0x0x7f0b3dd82c60) 0
+ primary-for QGraphicsLineItem (0x0x7f0b3dc7cbc8)
+
+Vtable for QGraphicsPixmapItem
+QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsPixmapItem)
+16 (int (*)(...))QGraphicsPixmapItem::~QGraphicsPixmapItem
+24 (int (*)(...))QGraphicsPixmapItem::~QGraphicsPixmapItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsPixmapItem::boundingRect
+48 (int (*)(...))QGraphicsPixmapItem::shape
+56 (int (*)(...))QGraphicsPixmapItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsPixmapItem::isObscuredBy
+88 (int (*)(...))QGraphicsPixmapItem::opaqueArea
+96 (int (*)(...))QGraphicsPixmapItem::paint
+104 (int (*)(...))QGraphicsPixmapItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsPixmapItem::supportsExtension
+296 (int (*)(...))QGraphicsPixmapItem::setExtension
+304 (int (*)(...))QGraphicsPixmapItem::extension
+
+Class QGraphicsPixmapItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsPixmapItem (0x0x7f0b3dc7cc30) 0
+ vptr=((& QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem) + 16)
+ QGraphicsItem (0x0x7f0b3dd82de0) 0
+ primary-for QGraphicsPixmapItem (0x0x7f0b3dc7cc30)
+
+Class QGraphicsTextItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTextItem::QPrivateSignal (0x0x7f0b3de09060) 0 empty
+
+Vtable for QGraphicsTextItem
+QGraphicsTextItem::_ZTV17QGraphicsTextItem: 82 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsTextItem)
+16 (int (*)(...))QGraphicsTextItem::metaObject
+24 (int (*)(...))QGraphicsTextItem::qt_metacast
+32 (int (*)(...))QGraphicsTextItem::qt_metacall
+40 (int (*)(...))QGraphicsTextItem::~QGraphicsTextItem
+48 (int (*)(...))QGraphicsTextItem::~QGraphicsTextItem
+56 (int (*)(...))QGraphicsObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsTextItem::boundingRect
+120 (int (*)(...))QGraphicsTextItem::shape
+128 (int (*)(...))QGraphicsTextItem::contains
+136 (int (*)(...))QGraphicsTextItem::paint
+144 (int (*)(...))QGraphicsTextItem::isObscuredBy
+152 (int (*)(...))QGraphicsTextItem::opaqueArea
+160 (int (*)(...))QGraphicsTextItem::type
+168 (int (*)(...))QGraphicsTextItem::sceneEvent
+176 (int (*)(...))QGraphicsTextItem::mousePressEvent
+184 (int (*)(...))QGraphicsTextItem::mouseMoveEvent
+192 (int (*)(...))QGraphicsTextItem::mouseReleaseEvent
+200 (int (*)(...))QGraphicsTextItem::mouseDoubleClickEvent
+208 (int (*)(...))QGraphicsTextItem::contextMenuEvent
+216 (int (*)(...))QGraphicsTextItem::keyPressEvent
+224 (int (*)(...))QGraphicsTextItem::keyReleaseEvent
+232 (int (*)(...))QGraphicsTextItem::focusInEvent
+240 (int (*)(...))QGraphicsTextItem::focusOutEvent
+248 (int (*)(...))QGraphicsTextItem::dragEnterEvent
+256 (int (*)(...))QGraphicsTextItem::dragLeaveEvent
+264 (int (*)(...))QGraphicsTextItem::dragMoveEvent
+272 (int (*)(...))QGraphicsTextItem::dropEvent
+280 (int (*)(...))QGraphicsTextItem::inputMethodEvent
+288 (int (*)(...))QGraphicsTextItem::hoverEnterEvent
+296 (int (*)(...))QGraphicsTextItem::hoverMoveEvent
+304 (int (*)(...))QGraphicsTextItem::hoverLeaveEvent
+312 (int (*)(...))QGraphicsTextItem::inputMethodQuery
+320 (int (*)(...))QGraphicsTextItem::supportsExtension
+328 (int (*)(...))QGraphicsTextItem::setExtension
+336 (int (*)(...))QGraphicsTextItem::extension
+344 (int (*)(...))-16
+352 (int (*)(...))(& _ZTI17QGraphicsTextItem)
+360 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItemD1Ev
+368 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItemD0Ev
+376 (int (*)(...))QGraphicsItem::advance
+384 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem12boundingRectEv
+392 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem5shapeEv
+400 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem8containsERK7QPointF
+408 (int (*)(...))QGraphicsItem::collidesWithItem
+416 (int (*)(...))QGraphicsItem::collidesWithPath
+424 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem12isObscuredByEPK13QGraphicsItem
+432 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem10opaqueAreaEv
+440 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+448 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem4typeEv
+456 (int (*)(...))QGraphicsItem::sceneEventFilter
+464 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem10sceneEventEP6QEvent
+472 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem16contextMenuEventEP30QGraphicsSceneContextMenuEvent
+480 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14dragEnterEventEP27QGraphicsSceneDragDropEvent
+488 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14dragLeaveEventEP27QGraphicsSceneDragDropEvent
+496 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13dragMoveEventEP27QGraphicsSceneDragDropEvent
+504 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem9dropEventEP27QGraphicsSceneDragDropEvent
+512 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem12focusInEventEP11QFocusEvent
+520 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13focusOutEventEP11QFocusEvent
+528 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15hoverEnterEventEP24QGraphicsSceneHoverEvent
+536 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14hoverMoveEventEP24QGraphicsSceneHoverEvent
+544 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+552 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem13keyPressEventEP9QKeyEvent
+560 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15keyReleaseEventEP9QKeyEvent
+568 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem15mousePressEventEP24QGraphicsSceneMouseEvent
+576 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem14mouseMoveEventEP24QGraphicsSceneMouseEvent
+584 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem17mouseReleaseEventEP24QGraphicsSceneMouseEvent
+592 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent
+600 (int (*)(...))QGraphicsItem::wheelEvent
+608 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem16inputMethodEventEP17QInputMethodEvent
+616 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem16inputMethodQueryEN2Qt16InputMethodQueryE
+624 (int (*)(...))QGraphicsItem::itemChange
+632 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem17supportsExtensionEN13QGraphicsItem9ExtensionE
+640 (int (*)(...))QGraphicsTextItem::_ZThn16_N17QGraphicsTextItem12setExtensionEN13QGraphicsItem9ExtensionERK8QVariant
+648 (int (*)(...))QGraphicsTextItem::_ZThn16_NK17QGraphicsTextItem9extensionERK8QVariant
+
+Class QGraphicsTextItem
+ size=40 align=8
+ base size=40 base align=8
+QGraphicsTextItem (0x0x7f0b3dc7cc98) 0
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 16)
+ QGraphicsObject (0x0x7f0b3dd92460) 0
+ primary-for QGraphicsTextItem (0x0x7f0b3dc7cc98)
+ QObject (0x0x7f0b3dd82f60) 0
+ primary-for QGraphicsObject (0x0x7f0b3dd92460)
+ QGraphicsItem (0x0x7f0b3de09000) 16
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 360)
+
+Vtable for QGraphicsSimpleTextItem
+QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSimpleTextItem)
+16 (int (*)(...))QGraphicsSimpleTextItem::~QGraphicsSimpleTextItem
+24 (int (*)(...))QGraphicsSimpleTextItem::~QGraphicsSimpleTextItem
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsSimpleTextItem::boundingRect
+48 (int (*)(...))QGraphicsSimpleTextItem::shape
+56 (int (*)(...))QGraphicsSimpleTextItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsSimpleTextItem::isObscuredBy
+88 (int (*)(...))QGraphicsSimpleTextItem::opaqueArea
+96 (int (*)(...))QGraphicsSimpleTextItem::paint
+104 (int (*)(...))QGraphicsSimpleTextItem::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsSimpleTextItem::supportsExtension
+296 (int (*)(...))QGraphicsSimpleTextItem::setExtension
+304 (int (*)(...))QGraphicsSimpleTextItem::extension
+
+Class QGraphicsSimpleTextItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsSimpleTextItem (0x0x7f0b3dc7cdd0) 0
+ vptr=((& QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f0b3dc7ce38) 0
+ primary-for QGraphicsSimpleTextItem (0x0x7f0b3dc7cdd0)
+ QGraphicsItem (0x0x7f0b3de09300) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f0b3dc7ce38)
+
+Vtable for QGraphicsItemGroup
+QGraphicsItemGroup::_ZTV18QGraphicsItemGroup: 39 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGraphicsItemGroup)
+16 (int (*)(...))QGraphicsItemGroup::~QGraphicsItemGroup
+24 (int (*)(...))QGraphicsItemGroup::~QGraphicsItemGroup
+32 (int (*)(...))QGraphicsItem::advance
+40 (int (*)(...))QGraphicsItemGroup::boundingRect
+48 (int (*)(...))QGraphicsItem::shape
+56 (int (*)(...))QGraphicsItem::contains
+64 (int (*)(...))QGraphicsItem::collidesWithItem
+72 (int (*)(...))QGraphicsItem::collidesWithPath
+80 (int (*)(...))QGraphicsItemGroup::isObscuredBy
+88 (int (*)(...))QGraphicsItemGroup::opaqueArea
+96 (int (*)(...))QGraphicsItemGroup::paint
+104 (int (*)(...))QGraphicsItemGroup::type
+112 (int (*)(...))QGraphicsItem::sceneEventFilter
+120 (int (*)(...))QGraphicsItem::sceneEvent
+128 (int (*)(...))QGraphicsItem::contextMenuEvent
+136 (int (*)(...))QGraphicsItem::dragEnterEvent
+144 (int (*)(...))QGraphicsItem::dragLeaveEvent
+152 (int (*)(...))QGraphicsItem::dragMoveEvent
+160 (int (*)(...))QGraphicsItem::dropEvent
+168 (int (*)(...))QGraphicsItem::focusInEvent
+176 (int (*)(...))QGraphicsItem::focusOutEvent
+184 (int (*)(...))QGraphicsItem::hoverEnterEvent
+192 (int (*)(...))QGraphicsItem::hoverMoveEvent
+200 (int (*)(...))QGraphicsItem::hoverLeaveEvent
+208 (int (*)(...))QGraphicsItem::keyPressEvent
+216 (int (*)(...))QGraphicsItem::keyReleaseEvent
+224 (int (*)(...))QGraphicsItem::mousePressEvent
+232 (int (*)(...))QGraphicsItem::mouseMoveEvent
+240 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+248 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+256 (int (*)(...))QGraphicsItem::wheelEvent
+264 (int (*)(...))QGraphicsItem::inputMethodEvent
+272 (int (*)(...))QGraphicsItem::inputMethodQuery
+280 (int (*)(...))QGraphicsItem::itemChange
+288 (int (*)(...))QGraphicsItem::supportsExtension
+296 (int (*)(...))QGraphicsItem::setExtension
+304 (int (*)(...))QGraphicsItem::extension
+
+Class QGraphicsItemGroup
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsItemGroup (0x0x7f0b3dc7cea0) 0
+ vptr=((& QGraphicsItemGroup::_ZTV18QGraphicsItemGroup) + 16)
+ QGraphicsItem (0x0x7f0b3de09420) 0
+ primary-for QGraphicsItemGroup (0x0x7f0b3dc7cea0)
+
+Vtable for QGraphicsLayoutItem
+QGraphicsLayoutItem::_ZTV19QGraphicsLayoutItem: 9 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsLayoutItem)
+16 0
+24 0
+32 (int (*)(...))QGraphicsLayoutItem::setGeometry
+40 (int (*)(...))QGraphicsLayoutItem::getContentsMargins
+48 (int (*)(...))QGraphicsLayoutItem::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsLayoutItem
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLayoutItem (0x0x7f0b3de09ae0) 0
+ vptr=((& QGraphicsLayoutItem::_ZTV19QGraphicsLayoutItem) + 16)
+
+Vtable for QGraphicsLayout
+QGraphicsLayout::_ZTV15QGraphicsLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsLayout)
+16 0
+24 0
+32 (int (*)(...))QGraphicsLayoutItem::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))QGraphicsLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))__cxa_pure_virtual
+96 (int (*)(...))__cxa_pure_virtual
+104 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLayout (0x0x7f0b3dc7cf70) 0
+ vptr=((& QGraphicsLayout::_ZTV15QGraphicsLayout) + 16)
+ QGraphicsLayoutItem (0x0x7f0b3da7e1e0) 0
+ primary-for QGraphicsLayout (0x0x7f0b3dc7cf70)
+
+Class QGraphicsAnchor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsAnchor::QPrivateSignal (0x0x7f0b3da7e4e0) 0 empty
+
+Vtable for QGraphicsAnchor
+QGraphicsAnchor::_ZTV15QGraphicsAnchor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsAnchor)
+16 (int (*)(...))QGraphicsAnchor::metaObject
+24 (int (*)(...))QGraphicsAnchor::qt_metacast
+32 (int (*)(...))QGraphicsAnchor::qt_metacall
+40 (int (*)(...))QGraphicsAnchor::~QGraphicsAnchor
+48 (int (*)(...))QGraphicsAnchor::~QGraphicsAnchor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QGraphicsAnchor
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsAnchor (0x0x7f0b3da90000) 0
+ vptr=((& QGraphicsAnchor::_ZTV15QGraphicsAnchor) + 16)
+ QObject (0x0x7f0b3da7e480) 0
+ primary-for QGraphicsAnchor (0x0x7f0b3da90000)
+
+Vtable for QGraphicsAnchorLayout
+QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QGraphicsAnchorLayout)
+16 (int (*)(...))QGraphicsAnchorLayout::~QGraphicsAnchorLayout
+24 (int (*)(...))QGraphicsAnchorLayout::~QGraphicsAnchorLayout
+32 (int (*)(...))QGraphicsAnchorLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsAnchorLayout::sizeHint
+72 (int (*)(...))QGraphicsAnchorLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsAnchorLayout::count
+96 (int (*)(...))QGraphicsAnchorLayout::itemAt
+104 (int (*)(...))QGraphicsAnchorLayout::removeAt
+
+Class QGraphicsAnchorLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsAnchorLayout (0x0x7f0b3da90068) 0
+ vptr=((& QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout) + 16)
+ QGraphicsLayout (0x0x7f0b3da900d0) 0
+ primary-for QGraphicsAnchorLayout (0x0x7f0b3da90068)
+ QGraphicsLayoutItem (0x0x7f0b3da7e660) 0
+ primary-for QGraphicsLayout (0x0x7f0b3da900d0)
+
+Class QGraphicsEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsEffect::QPrivateSignal (0x0x7f0b3da7e7e0) 0 empty
+
+Vtable for QGraphicsEffect
+QGraphicsEffect::_ZTV15QGraphicsEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsEffect)
+16 (int (*)(...))QGraphicsEffect::metaObject
+24 (int (*)(...))QGraphicsEffect::qt_metacast
+32 (int (*)(...))QGraphicsEffect::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))__cxa_pure_virtual
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsEffect (0x0x7f0b3da90138) 0
+ vptr=((& QGraphicsEffect::_ZTV15QGraphicsEffect) + 16)
+ QObject (0x0x7f0b3da7e780) 0
+ primary-for QGraphicsEffect (0x0x7f0b3da90138)
+
+Class QGraphicsColorizeEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsColorizeEffect::QPrivateSignal (0x0x7f0b3da7ee40) 0 empty
+
+Vtable for QGraphicsColorizeEffect
+QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsColorizeEffect)
+16 (int (*)(...))QGraphicsColorizeEffect::metaObject
+24 (int (*)(...))QGraphicsColorizeEffect::qt_metacast
+32 (int (*)(...))QGraphicsColorizeEffect::qt_metacall
+40 (int (*)(...))QGraphicsColorizeEffect::~QGraphicsColorizeEffect
+48 (int (*)(...))QGraphicsColorizeEffect::~QGraphicsColorizeEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))QGraphicsColorizeEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsColorizeEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsColorizeEffect (0x0x7f0b3da902d8) 0
+ vptr=((& QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect) + 16)
+ QGraphicsEffect (0x0x7f0b3da90340) 0
+ primary-for QGraphicsColorizeEffect (0x0x7f0b3da902d8)
+ QObject (0x0x7f0b3da7ede0) 0
+ primary-for QGraphicsEffect (0x0x7f0b3da90340)
+
+Class QGraphicsBlurEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsBlurEffect::QPrivateSignal (0x0x7f0b3db07060) 0 empty
+
+Vtable for QGraphicsBlurEffect
+QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsBlurEffect)
+16 (int (*)(...))QGraphicsBlurEffect::metaObject
+24 (int (*)(...))QGraphicsBlurEffect::qt_metacast
+32 (int (*)(...))QGraphicsBlurEffect::qt_metacall
+40 (int (*)(...))QGraphicsBlurEffect::~QGraphicsBlurEffect
+48 (int (*)(...))QGraphicsBlurEffect::~QGraphicsBlurEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsBlurEffect::boundingRectFor
+120 (int (*)(...))QGraphicsBlurEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsBlurEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsBlurEffect (0x0x7f0b3da903a8) 0
+ vptr=((& QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect) + 16)
+ QGraphicsEffect (0x0x7f0b3da90410) 0
+ primary-for QGraphicsBlurEffect (0x0x7f0b3da903a8)
+ QObject (0x0x7f0b3db07000) 0
+ primary-for QGraphicsEffect (0x0x7f0b3da90410)
+
+Class QGraphicsDropShadowEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsDropShadowEffect::QPrivateSignal (0x0x7f0b3db07780) 0 empty
+
+Vtable for QGraphicsDropShadowEffect
+QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QGraphicsDropShadowEffect)
+16 (int (*)(...))QGraphicsDropShadowEffect::metaObject
+24 (int (*)(...))QGraphicsDropShadowEffect::qt_metacast
+32 (int (*)(...))QGraphicsDropShadowEffect::qt_metacall
+40 (int (*)(...))QGraphicsDropShadowEffect::~QGraphicsDropShadowEffect
+48 (int (*)(...))QGraphicsDropShadowEffect::~QGraphicsDropShadowEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsDropShadowEffect::boundingRectFor
+120 (int (*)(...))QGraphicsDropShadowEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsDropShadowEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsDropShadowEffect (0x0x7f0b3da905b0) 0
+ vptr=((& QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect) + 16)
+ QGraphicsEffect (0x0x7f0b3da90618) 0
+ primary-for QGraphicsDropShadowEffect (0x0x7f0b3da905b0)
+ QObject (0x0x7f0b3db07720) 0
+ primary-for QGraphicsEffect (0x0x7f0b3da90618)
+
+Class QGraphicsOpacityEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsOpacityEffect::QPrivateSignal (0x0x7f0b3db07ba0) 0 empty
+
+Vtable for QGraphicsOpacityEffect
+QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QGraphicsOpacityEffect)
+16 (int (*)(...))QGraphicsOpacityEffect::metaObject
+24 (int (*)(...))QGraphicsOpacityEffect::qt_metacast
+32 (int (*)(...))QGraphicsOpacityEffect::qt_metacall
+40 (int (*)(...))QGraphicsOpacityEffect::~QGraphicsOpacityEffect
+48 (int (*)(...))QGraphicsOpacityEffect::~QGraphicsOpacityEffect
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsEffect::boundingRectFor
+120 (int (*)(...))QGraphicsOpacityEffect::draw
+128 (int (*)(...))QGraphicsEffect::sourceChanged
+
+Class QGraphicsOpacityEffect
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsOpacityEffect (0x0x7f0b3da90680) 0
+ vptr=((& QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect) + 16)
+ QGraphicsEffect (0x0x7f0b3da906e8) 0
+ primary-for QGraphicsOpacityEffect (0x0x7f0b3da90680)
+ QObject (0x0x7f0b3db07b40) 0
+ primary-for QGraphicsEffect (0x0x7f0b3da906e8)
+
+Vtable for QGraphicsGridLayout
+QGraphicsGridLayout::_ZTV19QGraphicsGridLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsGridLayout)
+16 (int (*)(...))QGraphicsGridLayout::~QGraphicsGridLayout
+24 (int (*)(...))QGraphicsGridLayout::~QGraphicsGridLayout
+32 (int (*)(...))QGraphicsGridLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsGridLayout::sizeHint
+72 (int (*)(...))QGraphicsGridLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsGridLayout::count
+96 (int (*)(...))QGraphicsGridLayout::itemAt
+104 (int (*)(...))QGraphicsGridLayout::removeAt
+
+Class QGraphicsGridLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsGridLayout (0x0x7f0b3da90750) 0
+ vptr=((& QGraphicsGridLayout::_ZTV19QGraphicsGridLayout) + 16)
+ QGraphicsLayout (0x0x7f0b3da907b8) 0
+ primary-for QGraphicsGridLayout (0x0x7f0b3da90750)
+ QGraphicsLayoutItem (0x0x7f0b3db07d20) 0
+ primary-for QGraphicsLayout (0x0x7f0b3da907b8)
+
+Class QGraphicsItemAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsItemAnimation::QPrivateSignal (0x0x7f0b3db07f00) 0 empty
+
+Vtable for QGraphicsItemAnimation
+QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QGraphicsItemAnimation)
+16 (int (*)(...))QGraphicsItemAnimation::metaObject
+24 (int (*)(...))QGraphicsItemAnimation::qt_metacast
+32 (int (*)(...))QGraphicsItemAnimation::qt_metacall
+40 (int (*)(...))QGraphicsItemAnimation::~QGraphicsItemAnimation
+48 (int (*)(...))QGraphicsItemAnimation::~QGraphicsItemAnimation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsItemAnimation::beforeAnimationStep
+120 (int (*)(...))QGraphicsItemAnimation::afterAnimationStep
+
+Class QGraphicsItemAnimation
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsItemAnimation (0x0x7f0b3da908f0) 0
+ vptr=((& QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation) + 16)
+ QObject (0x0x7f0b3db07ea0) 0
+ primary-for QGraphicsItemAnimation (0x0x7f0b3da908f0)
+
+Vtable for QGraphicsLinearLayout
+QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QGraphicsLinearLayout)
+16 (int (*)(...))QGraphicsLinearLayout::~QGraphicsLinearLayout
+24 (int (*)(...))QGraphicsLinearLayout::~QGraphicsLinearLayout
+32 (int (*)(...))QGraphicsLinearLayout::setGeometry
+40 (int (*)(...))QGraphicsLayout::getContentsMargins
+48 (int (*)(...))QGraphicsLayout::updateGeometry
+56 (int (*)(...))QGraphicsLayoutItem::isEmpty
+64 (int (*)(...))QGraphicsLinearLayout::sizeHint
+72 (int (*)(...))QGraphicsLinearLayout::invalidate
+80 (int (*)(...))QGraphicsLayout::widgetEvent
+88 (int (*)(...))QGraphicsLinearLayout::count
+96 (int (*)(...))QGraphicsLinearLayout::itemAt
+104 (int (*)(...))QGraphicsLinearLayout::removeAt
+
+Class QGraphicsLinearLayout
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsLinearLayout (0x0x7f0b3da90958) 0
+ vptr=((& QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout) + 16)
+ QGraphicsLayout (0x0x7f0b3da909c0) 0
+ primary-for QGraphicsLinearLayout (0x0x7f0b3da90958)
+ QGraphicsLayoutItem (0x0x7f0b3dba6000) 0
+ primary-for QGraphicsLayout (0x0x7f0b3da909c0)
+
+Class QGraphicsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsWidget::QPrivateSignal (0x0x7f0b3dba6300) 0 empty
+
+Vtable for QGraphicsWidget
+QGraphicsWidget::_ZTV15QGraphicsWidget: 93 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QGraphicsWidget)
+16 (int (*)(...))QGraphicsWidget::metaObject
+24 (int (*)(...))QGraphicsWidget::qt_metacast
+32 (int (*)(...))QGraphicsWidget::qt_metacall
+40 (int (*)(...))QGraphicsWidget::~QGraphicsWidget
+48 (int (*)(...))QGraphicsWidget::~QGraphicsWidget
+56 (int (*)(...))QGraphicsWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsWidget::setGeometry
+120 (int (*)(...))QGraphicsWidget::getContentsMargins
+128 (int (*)(...))QGraphicsWidget::type
+136 (int (*)(...))QGraphicsWidget::paint
+144 (int (*)(...))QGraphicsWidget::paintWindowFrame
+152 (int (*)(...))QGraphicsWidget::boundingRect
+160 (int (*)(...))QGraphicsWidget::shape
+168 (int (*)(...))QGraphicsWidget::initStyleOption
+176 (int (*)(...))QGraphicsWidget::sizeHint
+184 (int (*)(...))QGraphicsWidget::updateGeometry
+192 (int (*)(...))QGraphicsWidget::itemChange
+200 (int (*)(...))QGraphicsWidget::propertyChange
+208 (int (*)(...))QGraphicsWidget::sceneEvent
+216 (int (*)(...))QGraphicsWidget::windowFrameEvent
+224 (int (*)(...))QGraphicsWidget::windowFrameSectionAt
+232 (int (*)(...))QGraphicsWidget::changeEvent
+240 (int (*)(...))QGraphicsWidget::closeEvent
+248 (int (*)(...))QGraphicsWidget::focusInEvent
+256 (int (*)(...))QGraphicsWidget::focusNextPrevChild
+264 (int (*)(...))QGraphicsWidget::focusOutEvent
+272 (int (*)(...))QGraphicsWidget::hideEvent
+280 (int (*)(...))QGraphicsWidget::moveEvent
+288 (int (*)(...))QGraphicsWidget::polishEvent
+296 (int (*)(...))QGraphicsWidget::resizeEvent
+304 (int (*)(...))QGraphicsWidget::showEvent
+312 (int (*)(...))QGraphicsWidget::hoverMoveEvent
+320 (int (*)(...))QGraphicsWidget::hoverLeaveEvent
+328 (int (*)(...))QGraphicsWidget::grabMouseEvent
+336 (int (*)(...))QGraphicsWidget::ungrabMouseEvent
+344 (int (*)(...))QGraphicsWidget::grabKeyboardEvent
+352 (int (*)(...))QGraphicsWidget::ungrabKeyboardEvent
+360 (int (*)(...))-16
+368 (int (*)(...))(& _ZTI15QGraphicsWidget)
+376 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidgetD1Ev
+384 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidgetD0Ev
+392 (int (*)(...))QGraphicsItem::advance
+400 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget12boundingRectEv
+408 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget5shapeEv
+416 (int (*)(...))QGraphicsItem::contains
+424 (int (*)(...))QGraphicsItem::collidesWithItem
+432 (int (*)(...))QGraphicsItem::collidesWithPath
+440 (int (*)(...))QGraphicsItem::isObscuredBy
+448 (int (*)(...))QGraphicsItem::opaqueArea
+456 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+464 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget4typeEv
+472 (int (*)(...))QGraphicsItem::sceneEventFilter
+480 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10sceneEventEP6QEvent
+488 (int (*)(...))QGraphicsItem::contextMenuEvent
+496 (int (*)(...))QGraphicsItem::dragEnterEvent
+504 (int (*)(...))QGraphicsItem::dragLeaveEvent
+512 (int (*)(...))QGraphicsItem::dragMoveEvent
+520 (int (*)(...))QGraphicsItem::dropEvent
+528 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget12focusInEventEP11QFocusEvent
+536 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget13focusOutEventEP11QFocusEvent
+544 (int (*)(...))QGraphicsItem::hoverEnterEvent
+552 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget14hoverMoveEventEP24QGraphicsSceneHoverEvent
+560 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+568 (int (*)(...))QGraphicsItem::keyPressEvent
+576 (int (*)(...))QGraphicsItem::keyReleaseEvent
+584 (int (*)(...))QGraphicsItem::mousePressEvent
+592 (int (*)(...))QGraphicsItem::mouseMoveEvent
+600 (int (*)(...))QGraphicsItem::mouseReleaseEvent
+608 (int (*)(...))QGraphicsItem::mouseDoubleClickEvent
+616 (int (*)(...))QGraphicsItem::wheelEvent
+624 (int (*)(...))QGraphicsItem::inputMethodEvent
+632 (int (*)(...))QGraphicsItem::inputMethodQuery
+640 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant
+648 (int (*)(...))QGraphicsItem::supportsExtension
+656 (int (*)(...))QGraphicsItem::setExtension
+664 (int (*)(...))QGraphicsItem::extension
+672 (int (*)(...))-32
+680 (int (*)(...))(& _ZTI15QGraphicsWidget)
+688 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidgetD1Ev
+696 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidgetD0Ev
+704 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget11setGeometryERK6QRectF
+712 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget18getContentsMarginsEPdS0_S0_S0_
+720 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget14updateGeometryEv
+728 (int (*)(...))QGraphicsLayoutItem::isEmpty
+736 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget8sizeHintEN2Qt8SizeHintERK6QSizeF
+
+Class QGraphicsWidget
+ size=48 align=8
+ base size=48 base align=8
+QGraphicsWidget (0x0x7f0b3dbb7000) 0
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 16)
+ QGraphicsObject (0x0x7f0b3dbb7070) 0
+ primary-for QGraphicsWidget (0x0x7f0b3dbb7000)
+ QObject (0x0x7f0b3dba61e0) 0
+ primary-for QGraphicsObject (0x0x7f0b3dbb7070)
+ QGraphicsItem (0x0x7f0b3dba6240) 16
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 376)
+ QGraphicsLayoutItem (0x0x7f0b3dba62a0) 32
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 688)
+
+Class QGraphicsProxyWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsProxyWidget::QPrivateSignal (0x0x7f0b3dba6780) 0 empty
+
+Vtable for QGraphicsProxyWidget
+QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+16 (int (*)(...))QGraphicsProxyWidget::metaObject
+24 (int (*)(...))QGraphicsProxyWidget::qt_metacast
+32 (int (*)(...))QGraphicsProxyWidget::qt_metacall
+40 (int (*)(...))QGraphicsProxyWidget::~QGraphicsProxyWidget
+48 (int (*)(...))QGraphicsProxyWidget::~QGraphicsProxyWidget
+56 (int (*)(...))QGraphicsProxyWidget::event
+64 (int (*)(...))QGraphicsProxyWidget::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsProxyWidget::setGeometry
+120 (int (*)(...))QGraphicsWidget::getContentsMargins
+128 (int (*)(...))QGraphicsProxyWidget::type
+136 (int (*)(...))QGraphicsProxyWidget::paint
+144 (int (*)(...))QGraphicsWidget::paintWindowFrame
+152 (int (*)(...))QGraphicsWidget::boundingRect
+160 (int (*)(...))QGraphicsWidget::shape
+168 (int (*)(...))QGraphicsWidget::initStyleOption
+176 (int (*)(...))QGraphicsProxyWidget::sizeHint
+184 (int (*)(...))QGraphicsWidget::updateGeometry
+192 (int (*)(...))QGraphicsProxyWidget::itemChange
+200 (int (*)(...))QGraphicsWidget::propertyChange
+208 (int (*)(...))QGraphicsWidget::sceneEvent
+216 (int (*)(...))QGraphicsWidget::windowFrameEvent
+224 (int (*)(...))QGraphicsWidget::windowFrameSectionAt
+232 (int (*)(...))QGraphicsWidget::changeEvent
+240 (int (*)(...))QGraphicsWidget::closeEvent
+248 (int (*)(...))QGraphicsProxyWidget::focusInEvent
+256 (int (*)(...))QGraphicsProxyWidget::focusNextPrevChild
+264 (int (*)(...))QGraphicsProxyWidget::focusOutEvent
+272 (int (*)(...))QGraphicsProxyWidget::hideEvent
+280 (int (*)(...))QGraphicsWidget::moveEvent
+288 (int (*)(...))QGraphicsWidget::polishEvent
+296 (int (*)(...))QGraphicsProxyWidget::resizeEvent
+304 (int (*)(...))QGraphicsProxyWidget::showEvent
+312 (int (*)(...))QGraphicsProxyWidget::hoverMoveEvent
+320 (int (*)(...))QGraphicsProxyWidget::hoverLeaveEvent
+328 (int (*)(...))QGraphicsProxyWidget::grabMouseEvent
+336 (int (*)(...))QGraphicsProxyWidget::ungrabMouseEvent
+344 (int (*)(...))QGraphicsWidget::grabKeyboardEvent
+352 (int (*)(...))QGraphicsWidget::ungrabKeyboardEvent
+360 (int (*)(...))QGraphicsProxyWidget::contextMenuEvent
+368 (int (*)(...))QGraphicsProxyWidget::dragEnterEvent
+376 (int (*)(...))QGraphicsProxyWidget::dragLeaveEvent
+384 (int (*)(...))QGraphicsProxyWidget::dragMoveEvent
+392 (int (*)(...))QGraphicsProxyWidget::dropEvent
+400 (int (*)(...))QGraphicsProxyWidget::hoverEnterEvent
+408 (int (*)(...))QGraphicsProxyWidget::mouseMoveEvent
+416 (int (*)(...))QGraphicsProxyWidget::mousePressEvent
+424 (int (*)(...))QGraphicsProxyWidget::mouseReleaseEvent
+432 (int (*)(...))QGraphicsProxyWidget::mouseDoubleClickEvent
+440 (int (*)(...))QGraphicsProxyWidget::wheelEvent
+448 (int (*)(...))QGraphicsProxyWidget::keyPressEvent
+456 (int (*)(...))QGraphicsProxyWidget::keyReleaseEvent
+464 (int (*)(...))QGraphicsProxyWidget::inputMethodQuery
+472 (int (*)(...))QGraphicsProxyWidget::inputMethodEvent
+480 (int (*)(...))-16
+488 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+496 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidgetD1Ev
+504 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidgetD0Ev
+512 (int (*)(...))QGraphicsItem::advance
+520 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget12boundingRectEv
+528 (int (*)(...))QGraphicsWidget::_ZThn16_NK15QGraphicsWidget5shapeEv
+536 (int (*)(...))QGraphicsItem::contains
+544 (int (*)(...))QGraphicsItem::collidesWithItem
+552 (int (*)(...))QGraphicsItem::collidesWithPath
+560 (int (*)(...))QGraphicsItem::isObscuredBy
+568 (int (*)(...))QGraphicsItem::opaqueArea
+576 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget
+584 (int (*)(...))QGraphicsProxyWidget::_ZThn16_NK20QGraphicsProxyWidget4typeEv
+592 (int (*)(...))QGraphicsItem::sceneEventFilter
+600 (int (*)(...))QGraphicsWidget::_ZThn16_N15QGraphicsWidget10sceneEventEP6QEvent
+608 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget16contextMenuEventEP30QGraphicsSceneContextMenuEvent
+616 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14dragEnterEventEP27QGraphicsSceneDragDropEvent
+624 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14dragLeaveEventEP27QGraphicsSceneDragDropEvent
+632 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13dragMoveEventEP27QGraphicsSceneDragDropEvent
+640 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget9dropEventEP27QGraphicsSceneDragDropEvent
+648 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget12focusInEventEP11QFocusEvent
+656 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13focusOutEventEP11QFocusEvent
+664 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15hoverEnterEventEP24QGraphicsSceneHoverEvent
+672 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14hoverMoveEventEP24QGraphicsSceneHoverEvent
+680 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15hoverLeaveEventEP24QGraphicsSceneHoverEvent
+688 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget13keyPressEventEP9QKeyEvent
+696 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15keyReleaseEventEP9QKeyEvent
+704 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget15mousePressEventEP24QGraphicsSceneMouseEvent
+712 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget14mouseMoveEventEP24QGraphicsSceneMouseEvent
+720 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget17mouseReleaseEventEP24QGraphicsSceneMouseEvent
+728 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent
+736 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget10wheelEventEP24QGraphicsSceneWheelEvent
+744 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget16inputMethodEventEP17QInputMethodEvent
+752 (int (*)(...))QGraphicsProxyWidget::_ZThn16_NK20QGraphicsProxyWidget16inputMethodQueryEN2Qt16InputMethodQueryE
+760 (int (*)(...))QGraphicsProxyWidget::_ZThn16_N20QGraphicsProxyWidget10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant
+768 (int (*)(...))QGraphicsItem::supportsExtension
+776 (int (*)(...))QGraphicsItem::setExtension
+784 (int (*)(...))QGraphicsItem::extension
+792 (int (*)(...))-32
+800 (int (*)(...))(& _ZTI20QGraphicsProxyWidget)
+808 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidgetD1Ev
+816 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidgetD0Ev
+824 (int (*)(...))QGraphicsProxyWidget::_ZThn32_N20QGraphicsProxyWidget11setGeometryERK6QRectF
+832 (int (*)(...))QGraphicsWidget::_ZThn32_NK15QGraphicsWidget18getContentsMarginsEPdS0_S0_S0_
+840 (int (*)(...))QGraphicsWidget::_ZThn32_N15QGraphicsWidget14updateGeometryEv
+848 (int (*)(...))QGraphicsLayoutItem::isEmpty
+856 (int (*)(...))QGraphicsProxyWidget::_ZThn32_NK20QGraphicsProxyWidget8sizeHintEN2Qt8SizeHintERK6QSizeF
+
+Class QGraphicsProxyWidget
+ size=48 align=8
+ base size=48 base align=8
+QGraphicsProxyWidget (0x0x7f0b3da90af8) 0
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 16)
+ QGraphicsWidget (0x0x7f0b3dbb71c0) 0
+ primary-for QGraphicsProxyWidget (0x0x7f0b3da90af8)
+ QGraphicsObject (0x0x7f0b3dbb7230) 0
+ primary-for QGraphicsWidget (0x0x7f0b3dbb71c0)
+ QObject (0x0x7f0b3dba6660) 0
+ primary-for QGraphicsObject (0x0x7f0b3dbb7230)
+ QGraphicsItem (0x0x7f0b3dba66c0) 16
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 496)
+ QGraphicsLayoutItem (0x0x7f0b3dba6720) 32
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 808)
+
+Class QGraphicsScene::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScene::QPrivateSignal (0x0x7f0b3dba6ae0) 0 empty
+
+Vtable for QGraphicsScene
+QGraphicsScene::_ZTV14QGraphicsScene: 35 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGraphicsScene)
+16 (int (*)(...))QGraphicsScene::metaObject
+24 (int (*)(...))QGraphicsScene::qt_metacast
+32 (int (*)(...))QGraphicsScene::qt_metacall
+40 (int (*)(...))QGraphicsScene::~QGraphicsScene
+48 (int (*)(...))QGraphicsScene::~QGraphicsScene
+56 (int (*)(...))QGraphicsScene::event
+64 (int (*)(...))QGraphicsScene::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsScene::inputMethodQuery
+120 (int (*)(...))QGraphicsScene::contextMenuEvent
+128 (int (*)(...))QGraphicsScene::dragEnterEvent
+136 (int (*)(...))QGraphicsScene::dragMoveEvent
+144 (int (*)(...))QGraphicsScene::dragLeaveEvent
+152 (int (*)(...))QGraphicsScene::dropEvent
+160 (int (*)(...))QGraphicsScene::focusInEvent
+168 (int (*)(...))QGraphicsScene::focusOutEvent
+176 (int (*)(...))QGraphicsScene::helpEvent
+184 (int (*)(...))QGraphicsScene::keyPressEvent
+192 (int (*)(...))QGraphicsScene::keyReleaseEvent
+200 (int (*)(...))QGraphicsScene::mousePressEvent
+208 (int (*)(...))QGraphicsScene::mouseMoveEvent
+216 (int (*)(...))QGraphicsScene::mouseReleaseEvent
+224 (int (*)(...))QGraphicsScene::mouseDoubleClickEvent
+232 (int (*)(...))QGraphicsScene::wheelEvent
+240 (int (*)(...))QGraphicsScene::inputMethodEvent
+248 (int (*)(...))QGraphicsScene::drawBackground
+256 (int (*)(...))QGraphicsScene::drawForeground
+264 (int (*)(...))QGraphicsScene::drawItems
+272 (int (*)(...))QGraphicsScene::focusNextPrevChild
+
+Class QGraphicsScene
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsScene (0x0x7f0b3da90d00) 0
+ vptr=((& QGraphicsScene::_ZTV14QGraphicsScene) + 16)
+ QObject (0x0x7f0b3dba6a80) 0
+ primary-for QGraphicsScene (0x0x7f0b3da90d00)
+
+Vtable for QGraphicsSceneEvent
+QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QGraphicsSceneEvent)
+16 (int (*)(...))QGraphicsSceneEvent::~QGraphicsSceneEvent
+24 (int (*)(...))QGraphicsSceneEvent::~QGraphicsSceneEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneEvent (0x0x7f0b3d860750) 0
+ vptr=((& QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent) + 16)
+ QEvent (0x0x7f0b3d857f00) 0
+ primary-for QGraphicsSceneEvent (0x0x7f0b3d860750)
+
+Vtable for QGraphicsSceneMouseEvent
+QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneMouseEvent)
+16 (int (*)(...))QGraphicsSceneMouseEvent::~QGraphicsSceneMouseEvent
+24 (int (*)(...))QGraphicsSceneMouseEvent::~QGraphicsSceneMouseEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneMouseEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneMouseEvent (0x0x7f0b3d8607b8) 0
+ vptr=((& QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f0b3d860820) 0
+ primary-for QGraphicsSceneMouseEvent (0x0x7f0b3d8607b8)
+ QEvent (0x0x7f0b3d9030c0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f0b3d860820)
+
+Vtable for QGraphicsSceneWheelEvent
+QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneWheelEvent)
+16 (int (*)(...))QGraphicsSceneWheelEvent::~QGraphicsSceneWheelEvent
+24 (int (*)(...))QGraphicsSceneWheelEvent::~QGraphicsSceneWheelEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneWheelEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneWheelEvent (0x0x7f0b3d860888) 0
+ vptr=((& QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f0b3d8608f0) 0
+ primary-for QGraphicsSceneWheelEvent (0x0x7f0b3d860888)
+ QEvent (0x0x7f0b3d9031e0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f0b3d8608f0)
+
+Vtable for QGraphicsSceneContextMenuEvent
+QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI30QGraphicsSceneContextMenuEvent)
+16 (int (*)(...))QGraphicsSceneContextMenuEvent::~QGraphicsSceneContextMenuEvent
+24 (int (*)(...))QGraphicsSceneContextMenuEvent::~QGraphicsSceneContextMenuEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneContextMenuEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneContextMenuEvent (0x0x7f0b3d860958) 0
+ vptr=((& QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f0b3d8609c0) 0
+ primary-for QGraphicsSceneContextMenuEvent (0x0x7f0b3d860958)
+ QEvent (0x0x7f0b3d903300) 0
+ primary-for QGraphicsSceneEvent (0x0x7f0b3d8609c0)
+
+Vtable for QGraphicsSceneHoverEvent
+QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QGraphicsSceneHoverEvent)
+16 (int (*)(...))QGraphicsSceneHoverEvent::~QGraphicsSceneHoverEvent
+24 (int (*)(...))QGraphicsSceneHoverEvent::~QGraphicsSceneHoverEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneHoverEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneHoverEvent (0x0x7f0b3d860a28) 0
+ vptr=((& QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f0b3d860a90) 0
+ primary-for QGraphicsSceneHoverEvent (0x0x7f0b3d860a28)
+ QEvent (0x0x7f0b3d903420) 0
+ primary-for QGraphicsSceneEvent (0x0x7f0b3d860a90)
+
+Vtable for QGraphicsSceneHelpEvent
+QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSceneHelpEvent)
+16 (int (*)(...))QGraphicsSceneHelpEvent::~QGraphicsSceneHelpEvent
+24 (int (*)(...))QGraphicsSceneHelpEvent::~QGraphicsSceneHelpEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneHelpEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneHelpEvent (0x0x7f0b3d860af8) 0
+ vptr=((& QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f0b3d860b60) 0
+ primary-for QGraphicsSceneHelpEvent (0x0x7f0b3d860af8)
+ QEvent (0x0x7f0b3d903540) 0
+ primary-for QGraphicsSceneEvent (0x0x7f0b3d860b60)
+
+Vtable for QGraphicsSceneDragDropEvent
+QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QGraphicsSceneDragDropEvent)
+16 (int (*)(...))QGraphicsSceneDragDropEvent::~QGraphicsSceneDragDropEvent
+24 (int (*)(...))QGraphicsSceneDragDropEvent::~QGraphicsSceneDragDropEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneDragDropEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneDragDropEvent (0x0x7f0b3d860bc8) 0
+ vptr=((& QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f0b3d860c30) 0
+ primary-for QGraphicsSceneDragDropEvent (0x0x7f0b3d860bc8)
+ QEvent (0x0x7f0b3d903660) 0
+ primary-for QGraphicsSceneEvent (0x0x7f0b3d860c30)
+
+Vtable for QGraphicsSceneResizeEvent
+QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QGraphicsSceneResizeEvent)
+16 (int (*)(...))QGraphicsSceneResizeEvent::~QGraphicsSceneResizeEvent
+24 (int (*)(...))QGraphicsSceneResizeEvent::~QGraphicsSceneResizeEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneResizeEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneResizeEvent (0x0x7f0b3d860c98) 0
+ vptr=((& QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f0b3d860d00) 0
+ primary-for QGraphicsSceneResizeEvent (0x0x7f0b3d860c98)
+ QEvent (0x0x7f0b3d903780) 0
+ primary-for QGraphicsSceneEvent (0x0x7f0b3d860d00)
+
+Vtable for QGraphicsSceneMoveEvent
+QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QGraphicsSceneMoveEvent)
+16 (int (*)(...))QGraphicsSceneMoveEvent::~QGraphicsSceneMoveEvent
+24 (int (*)(...))QGraphicsSceneMoveEvent::~QGraphicsSceneMoveEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QEvent::clone
+
+Class QGraphicsSceneMoveEvent
+ size=24 align=8
+ base size=24 base align=8
+QGraphicsSceneMoveEvent (0x0x7f0b3d860d68) 0
+ vptr=((& QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f0b3d860dd0) 0
+ primary-for QGraphicsSceneMoveEvent (0x0x7f0b3d860d68)
+ QEvent (0x0x7f0b3d9038a0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f0b3d860dd0)
+
+Class QGraphicsTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTransform::QPrivateSignal (0x0x7f0b3d903a20) 0 empty
+
+Vtable for QGraphicsTransform
+QGraphicsTransform::_ZTV18QGraphicsTransform: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QGraphicsTransform)
+16 (int (*)(...))QGraphicsTransform::metaObject
+24 (int (*)(...))QGraphicsTransform::qt_metacast
+32 (int (*)(...))QGraphicsTransform::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QGraphicsTransform
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsTransform (0x0x7f0b3d860e38) 0
+ vptr=((& QGraphicsTransform::_ZTV18QGraphicsTransform) + 16)
+ QObject (0x0x7f0b3d9039c0) 0
+ primary-for QGraphicsTransform (0x0x7f0b3d860e38)
+
+Class QGraphicsScale::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScale::QPrivateSignal (0x0x7f0b3d903c00) 0 empty
+
+Vtable for QGraphicsScale
+QGraphicsScale::_ZTV14QGraphicsScale: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QGraphicsScale)
+16 (int (*)(...))QGraphicsScale::metaObject
+24 (int (*)(...))QGraphicsScale::qt_metacast
+32 (int (*)(...))QGraphicsScale::qt_metacall
+40 (int (*)(...))QGraphicsScale::~QGraphicsScale
+48 (int (*)(...))QGraphicsScale::~QGraphicsScale
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsScale::applyTo
+
+Class QGraphicsScale
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsScale (0x0x7f0b3d860ea0) 0
+ vptr=((& QGraphicsScale::_ZTV14QGraphicsScale) + 16)
+ QGraphicsTransform (0x0x7f0b3d860f08) 0
+ primary-for QGraphicsScale (0x0x7f0b3d860ea0)
+ QObject (0x0x7f0b3d903ba0) 0
+ primary-for QGraphicsTransform (0x0x7f0b3d860f08)
+
+Class QGraphicsRotation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsRotation::QPrivateSignal (0x0x7f0b3d903de0) 0 empty
+
+Vtable for QGraphicsRotation
+QGraphicsRotation::_ZTV17QGraphicsRotation: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QGraphicsRotation)
+16 (int (*)(...))QGraphicsRotation::metaObject
+24 (int (*)(...))QGraphicsRotation::qt_metacast
+32 (int (*)(...))QGraphicsRotation::qt_metacall
+40 (int (*)(...))QGraphicsRotation::~QGraphicsRotation
+48 (int (*)(...))QGraphicsRotation::~QGraphicsRotation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QGraphicsRotation::applyTo
+
+Class QGraphicsRotation
+ size=16 align=8
+ base size=16 base align=8
+QGraphicsRotation (0x0x7f0b3d860f70) 0
+ vptr=((& QGraphicsRotation::_ZTV17QGraphicsRotation) + 16)
+ QGraphicsTransform (0x0x7f0b3d8606e8) 0
+ primary-for QGraphicsRotation (0x0x7f0b3d860f70)
+ QObject (0x0x7f0b3d903d80) 0
+ primary-for QGraphicsTransform (0x0x7f0b3d8606e8)
+
+Class QScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollArea::QPrivateSignal (0x0x7f0b3d96f060) 0 empty
+
+Vtable for QScrollArea
+QScrollArea::_ZTV11QScrollArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QScrollArea)
+16 (int (*)(...))QScrollArea::metaObject
+24 (int (*)(...))QScrollArea::qt_metacast
+32 (int (*)(...))QScrollArea::qt_metacall
+40 (int (*)(...))QScrollArea::~QScrollArea
+48 (int (*)(...))QScrollArea::~QScrollArea
+56 (int (*)(...))QScrollArea::event
+64 (int (*)(...))QScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractScrollArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QScrollArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QScrollArea::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QScrollArea::scrollContentsBy
+464 (int (*)(...))QScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QScrollArea)
+488 (int (*)(...))QScrollArea::_ZThn16_N11QScrollAreaD1Ev
+496 (int (*)(...))QScrollArea::_ZThn16_N11QScrollAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QScrollArea
+ size=40 align=8
+ base size=40 base align=8
+QScrollArea (0x0x7f0b3d96e000) 0
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 16)
+ QAbstractScrollArea (0x0x7f0b3d96e068) 0
+ primary-for QScrollArea (0x0x7f0b3d96e000)
+ QFrame (0x0x7f0b3d96e0d0) 0
+ primary-for QAbstractScrollArea (0x0x7f0b3d96e068)
+ QWidget (0x0x7f0b3dbb7a80) 0
+ primary-for QFrame (0x0x7f0b3d96e0d0)
+ QObject (0x0x7f0b3d903f60) 0
+ primary-for QWidget (0x0x7f0b3dbb7a80)
+ QPaintDevice (0x0x7f0b3d96f000) 16
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 488)
+
+Class QGraphicsView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsView::QPrivateSignal (0x0x7f0b3d96f2a0) 0 empty
+
+Vtable for QGraphicsView
+QGraphicsView::_ZTV13QGraphicsView: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QGraphicsView)
+16 (int (*)(...))QGraphicsView::metaObject
+24 (int (*)(...))QGraphicsView::qt_metacast
+32 (int (*)(...))QGraphicsView::qt_metacall
+40 (int (*)(...))QGraphicsView::~QGraphicsView
+48 (int (*)(...))QGraphicsView::~QGraphicsView
+56 (int (*)(...))QGraphicsView::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QGraphicsView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QGraphicsView::mousePressEvent
+176 (int (*)(...))QGraphicsView::mouseReleaseEvent
+184 (int (*)(...))QGraphicsView::mouseDoubleClickEvent
+192 (int (*)(...))QGraphicsView::mouseMoveEvent
+200 (int (*)(...))QGraphicsView::wheelEvent
+208 (int (*)(...))QGraphicsView::keyPressEvent
+216 (int (*)(...))QGraphicsView::keyReleaseEvent
+224 (int (*)(...))QGraphicsView::focusInEvent
+232 (int (*)(...))QGraphicsView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QGraphicsView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QGraphicsView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QGraphicsView::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QGraphicsView::dragEnterEvent
+320 (int (*)(...))QGraphicsView::dragMoveEvent
+328 (int (*)(...))QGraphicsView::dragLeaveEvent
+336 (int (*)(...))QGraphicsView::dropEvent
+344 (int (*)(...))QGraphicsView::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QGraphicsView::inputMethodEvent
+416 (int (*)(...))QGraphicsView::inputMethodQuery
+424 (int (*)(...))QGraphicsView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QGraphicsView::setupViewport
+448 (int (*)(...))QGraphicsView::viewportEvent
+456 (int (*)(...))QGraphicsView::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QGraphicsView::drawBackground
+480 (int (*)(...))QGraphicsView::drawForeground
+488 (int (*)(...))QGraphicsView::drawItems
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI13QGraphicsView)
+512 (int (*)(...))QGraphicsView::_ZThn16_N13QGraphicsViewD1Ev
+520 (int (*)(...))QGraphicsView::_ZThn16_N13QGraphicsViewD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QGraphicsView
+ size=40 align=8
+ base size=40 base align=8
+QGraphicsView (0x0x7f0b3d96e138) 0
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 16)
+ QAbstractScrollArea (0x0x7f0b3d96e1a0) 0
+ primary-for QGraphicsView (0x0x7f0b3d96e138)
+ QFrame (0x0x7f0b3d96e208) 0
+ primary-for QAbstractScrollArea (0x0x7f0b3d96e1a0)
+ QWidget (0x0x7f0b3dbb7af0) 0
+ primary-for QFrame (0x0x7f0b3d96e208)
+ QObject (0x0x7f0b3d96f1e0) 0
+ primary-for QWidget (0x0x7f0b3dbb7af0)
+ QPaintDevice (0x0x7f0b3d96f240) 16
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 512)
+
+Class QGroupBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGroupBox::QPrivateSignal (0x0x7f0b3d654300) 0 empty
+
+Vtable for QGroupBox
+QGroupBox::_ZTV9QGroupBox: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QGroupBox)
+16 (int (*)(...))QGroupBox::metaObject
+24 (int (*)(...))QGroupBox::qt_metacast
+32 (int (*)(...))QGroupBox::qt_metacall
+40 (int (*)(...))QGroupBox::~QGroupBox
+48 (int (*)(...))QGroupBox::~QGroupBox
+56 (int (*)(...))QGroupBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QGroupBox::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QGroupBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QGroupBox::mousePressEvent
+176 (int (*)(...))QGroupBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QGroupBox::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QGroupBox::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QGroupBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QGroupBox::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QGroupBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QGroupBox::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI9QGroupBox)
+456 (int (*)(...))QGroupBox::_ZThn16_N9QGroupBoxD1Ev
+464 (int (*)(...))QGroupBox::_ZThn16_N9QGroupBoxD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QGroupBox
+ size=40 align=8
+ base size=40 base align=8
+QGroupBox (0x0x7f0b3d96e4e0) 0
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 16)
+ QWidget (0x0x7f0b3d9892a0) 0
+ primary-for QGroupBox (0x0x7f0b3d96e4e0)
+ QObject (0x0x7f0b3d654240) 0
+ primary-for QWidget (0x0x7f0b3d9892a0)
+ QPaintDevice (0x0x7f0b3d6542a0) 16
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 456)
+
+Class QHeaderView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHeaderView::QPrivateSignal (0x0x7f0b3d654540) 0 empty
+
+Vtable for QHeaderView
+QHeaderView::_ZTV11QHeaderView: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QHeaderView)
+16 (int (*)(...))QHeaderView::metaObject
+24 (int (*)(...))QHeaderView::qt_metacast
+32 (int (*)(...))QHeaderView::qt_metacall
+40 (int (*)(...))QHeaderView::~QHeaderView
+48 (int (*)(...))QHeaderView::~QHeaderView
+56 (int (*)(...))QHeaderView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QAbstractItemView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QHeaderView::setVisible
+128 (int (*)(...))QHeaderView::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QHeaderView::mousePressEvent
+176 (int (*)(...))QHeaderView::mouseReleaseEvent
+184 (int (*)(...))QHeaderView::mouseDoubleClickEvent
+192 (int (*)(...))QHeaderView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QHeaderView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QHeaderView::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QHeaderView::viewportEvent
+456 (int (*)(...))QHeaderView::scrollContentsBy
+464 (int (*)(...))QAbstractItemView::viewportSizeHint
+472 (int (*)(...))QHeaderView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QHeaderView::visualRect
+504 (int (*)(...))QHeaderView::scrollTo
+512 (int (*)(...))QHeaderView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QHeaderView::reset
+552 (int (*)(...))QAbstractItemView::setRootIndex
+560 (int (*)(...))QHeaderView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QHeaderView::dataChanged
+584 (int (*)(...))QHeaderView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QAbstractItemView::selectionChanged
+608 (int (*)(...))QHeaderView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QHeaderView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QHeaderView::moveCursor
+704 (int (*)(...))QHeaderView::horizontalOffset
+712 (int (*)(...))QHeaderView::verticalOffset
+720 (int (*)(...))QHeaderView::isIndexHidden
+728 (int (*)(...))QHeaderView::setSelection
+736 (int (*)(...))QHeaderView::visualRegionForSelection
+744 (int (*)(...))QAbstractItemView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QHeaderView::paintSection
+792 (int (*)(...))QHeaderView::sectionSizeFromContents
+800 (int (*)(...))QHeaderView::initStyleOptionForIndex
+808 (int (*)(...))QHeaderView::initStyleOption
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI11QHeaderView)
+832 (int (*)(...))QHeaderView::_ZThn16_N11QHeaderViewD1Ev
+840 (int (*)(...))QHeaderView::_ZThn16_N11QHeaderViewD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QHeaderView
+ size=40 align=8
+ base size=40 base align=8
+QHeaderView (0x0x7f0b3d96e548) 0
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 16)
+ QAbstractItemView (0x0x7f0b3d96e5b0) 0
+ primary-for QHeaderView (0x0x7f0b3d96e548)
+ QAbstractScrollArea (0x0x7f0b3d96e618) 0
+ primary-for QAbstractItemView (0x0x7f0b3d96e5b0)
+ QFrame (0x0x7f0b3d96e680) 0
+ primary-for QAbstractScrollArea (0x0x7f0b3d96e618)
+ QWidget (0x0x7f0b3d989310) 0
+ primary-for QFrame (0x0x7f0b3d96e680)
+ QObject (0x0x7f0b3d654480) 0
+ primary-for QWidget (0x0x7f0b3d989310)
+ QPaintDevice (0x0x7f0b3d6544e0) 16
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 832)
+
+Class QLineEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLineEdit::QPrivateSignal (0x0x7f0b3d6549c0) 0 empty
+
+Vtable for QLineEdit
+QLineEdit::_ZTV9QLineEdit: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QLineEdit)
+16 (int (*)(...))QLineEdit::metaObject
+24 (int (*)(...))QLineEdit::qt_metacast
+32 (int (*)(...))QLineEdit::qt_metacall
+40 (int (*)(...))QLineEdit::~QLineEdit
+48 (int (*)(...))QLineEdit::~QLineEdit
+56 (int (*)(...))QLineEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QLineEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLineEdit::sizeHint
+136 (int (*)(...))QLineEdit::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QLineEdit::mousePressEvent
+176 (int (*)(...))QLineEdit::mouseReleaseEvent
+184 (int (*)(...))QLineEdit::mouseDoubleClickEvent
+192 (int (*)(...))QLineEdit::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QLineEdit::keyPressEvent
+216 (int (*)(...))QLineEdit::keyReleaseEvent
+224 (int (*)(...))QLineEdit::focusInEvent
+232 (int (*)(...))QLineEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLineEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QLineEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QLineEdit::dragEnterEvent
+320 (int (*)(...))QLineEdit::dragMoveEvent
+328 (int (*)(...))QLineEdit::dragLeaveEvent
+336 (int (*)(...))QLineEdit::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QLineEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QLineEdit::inputMethodEvent
+416 (int (*)(...))QLineEdit::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QLineEdit::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI9QLineEdit)
+456 (int (*)(...))QLineEdit::_ZThn16_N9QLineEditD1Ev
+464 (int (*)(...))QLineEdit::_ZThn16_N9QLineEditD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLineEdit
+ size=40 align=8
+ base size=40 base align=8
+QLineEdit (0x0x7f0b3d96e6e8) 0
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 16)
+ QWidget (0x0x7f0b3d9895b0) 0
+ primary-for QLineEdit (0x0x7f0b3d96e6e8)
+ QObject (0x0x7f0b3d654900) 0
+ primary-for QWidget (0x0x7f0b3d9895b0)
+ QPaintDevice (0x0x7f0b3d654960) 16
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 456)
+
+Class QInputDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDialog::QPrivateSignal (0x0x7f0b3d654d80) 0 empty
+
+Vtable for QInputDialog
+QInputDialog::_ZTV12QInputDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QInputDialog)
+16 (int (*)(...))QInputDialog::metaObject
+24 (int (*)(...))QInputDialog::qt_metacast
+32 (int (*)(...))QInputDialog::qt_metacall
+40 (int (*)(...))QInputDialog::~QInputDialog
+48 (int (*)(...))QInputDialog::~QInputDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QInputDialog::setVisible
+128 (int (*)(...))QInputDialog::sizeHint
+136 (int (*)(...))QInputDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QDialog::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QInputDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QInputDialog)
+488 (int (*)(...))QInputDialog::_ZThn16_N12QInputDialogD1Ev
+496 (int (*)(...))QInputDialog::_ZThn16_N12QInputDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QInputDialog
+ size=40 align=8
+ base size=40 base align=8
+QInputDialog (0x0x7f0b3d96e750) 0
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 16)
+ QDialog (0x0x7f0b3d96e7b8) 0
+ primary-for QInputDialog (0x0x7f0b3d96e750)
+ QWidget (0x0x7f0b3d9898c0) 0
+ primary-for QDialog (0x0x7f0b3d96e7b8)
+ QObject (0x0x7f0b3d654cc0) 0
+ primary-for QWidget (0x0x7f0b3d9898c0)
+ QPaintDevice (0x0x7f0b3d654d20) 16
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 488)
+
+Class QItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemDelegate::QPrivateSignal (0x0x7f0b3d6e7360) 0 empty
+
+Vtable for QItemDelegate
+QItemDelegate::_ZTV13QItemDelegate: 28 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QItemDelegate)
+16 (int (*)(...))QItemDelegate::metaObject
+24 (int (*)(...))QItemDelegate::qt_metacast
+32 (int (*)(...))QItemDelegate::qt_metacall
+40 (int (*)(...))QItemDelegate::~QItemDelegate
+48 (int (*)(...))QItemDelegate::~QItemDelegate
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QItemDelegate::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QItemDelegate::paint
+120 (int (*)(...))QItemDelegate::sizeHint
+128 (int (*)(...))QItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QItemDelegate::setEditorData
+152 (int (*)(...))QItemDelegate::setModelData
+160 (int (*)(...))QItemDelegate::updateEditorGeometry
+168 (int (*)(...))QItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+192 (int (*)(...))QItemDelegate::drawDisplay
+200 (int (*)(...))QItemDelegate::drawDecoration
+208 (int (*)(...))QItemDelegate::drawFocus
+216 (int (*)(...))QItemDelegate::drawCheck
+
+Class QItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QItemDelegate (0x0x7f0b3d96e958) 0
+ vptr=((& QItemDelegate::_ZTV13QItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7f0b3d96e9c0) 0
+ primary-for QItemDelegate (0x0x7f0b3d96e958)
+ QObject (0x0x7f0b3d6e7300) 0
+ primary-for QAbstractItemDelegate (0x0x7f0b3d96e9c0)
+
+Vtable for QItemEditorCreatorBase
+QItemEditorCreatorBase::_ZTV22QItemEditorCreatorBase: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QItemEditorCreatorBase)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QItemEditorCreatorBase
+ size=8 align=8
+ base size=8 base align=8
+QItemEditorCreatorBase (0x0x7f0b3d6e74e0) 0 nearly-empty
+ vptr=((& QItemEditorCreatorBase::_ZTV22QItemEditorCreatorBase) + 16)
+
+Vtable for QItemEditorFactory
+QItemEditorFactory::_ZTV18QItemEditorFactory: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QItemEditorFactory)
+16 (int (*)(...))QItemEditorFactory::~QItemEditorFactory
+24 (int (*)(...))QItemEditorFactory::~QItemEditorFactory
+32 (int (*)(...))QItemEditorFactory::createEditor
+40 (int (*)(...))QItemEditorFactory::valuePropertyName
+
+Class QItemEditorFactory
+ size=16 align=8
+ base size=16 base align=8
+QItemEditorFactory (0x0x7f0b3d6e7840) 0
+ vptr=((& QItemEditorFactory::_ZTV18QItemEditorFactory) + 16)
+
+Class QKeySequenceEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QKeySequenceEdit::QPrivateSignal (0x0x7f0b3d6e7d20) 0 empty
+
+Vtable for QKeySequenceEdit
+QKeySequenceEdit::_ZTV16QKeySequenceEdit: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QKeySequenceEdit)
+16 (int (*)(...))QKeySequenceEdit::metaObject
+24 (int (*)(...))QKeySequenceEdit::qt_metacast
+32 (int (*)(...))QKeySequenceEdit::qt_metacall
+40 (int (*)(...))QKeySequenceEdit::~QKeySequenceEdit
+48 (int (*)(...))QKeySequenceEdit::~QKeySequenceEdit
+56 (int (*)(...))QKeySequenceEdit::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QKeySequenceEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QKeySequenceEdit::keyPressEvent
+216 (int (*)(...))QKeySequenceEdit::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI16QKeySequenceEdit)
+448 (int (*)(...))QKeySequenceEdit::_ZThn16_N16QKeySequenceEditD1Ev
+456 (int (*)(...))QKeySequenceEdit::_ZThn16_N16QKeySequenceEditD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QKeySequenceEdit
+ size=40 align=8
+ base size=40 base align=8
+QKeySequenceEdit (0x0x7f0b3d96eaf8) 0
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 16)
+ QWidget (0x0x7f0b3d989bd0) 0
+ primary-for QKeySequenceEdit (0x0x7f0b3d96eaf8)
+ QObject (0x0x7f0b3d6e7c60) 0
+ primary-for QWidget (0x0x7f0b3d989bd0)
+ QPaintDevice (0x0x7f0b3d6e7cc0) 16
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 448)
+
+Class QLabel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLabel::QPrivateSignal (0x0x7f0b3d6e7f60) 0 empty
+
+Vtable for QLabel
+QLabel::_ZTV6QLabel: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI6QLabel)
+16 (int (*)(...))QLabel::metaObject
+24 (int (*)(...))QLabel::qt_metacast
+32 (int (*)(...))QLabel::qt_metacall
+40 (int (*)(...))QLabel::~QLabel
+48 (int (*)(...))QLabel::~QLabel
+56 (int (*)(...))QLabel::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLabel::sizeHint
+136 (int (*)(...))QLabel::minimumSizeHint
+144 (int (*)(...))QLabel::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QLabel::mousePressEvent
+176 (int (*)(...))QLabel::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QLabel::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QLabel::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QLabel::focusInEvent
+232 (int (*)(...))QLabel::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLabel::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QLabel::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QLabel::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QLabel::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI6QLabel)
+456 (int (*)(...))QLabel::_ZThn16_N6QLabelD1Ev
+464 (int (*)(...))QLabel::_ZThn16_N6QLabelD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLabel
+ size=40 align=8
+ base size=40 base align=8
+QLabel (0x0x7f0b3d96eb60) 0
+ vptr=((& QLabel::_ZTV6QLabel) + 16)
+ QFrame (0x0x7f0b3d96ebc8) 0
+ primary-for QLabel (0x0x7f0b3d96eb60)
+ QWidget (0x0x7f0b3d989c40) 0
+ primary-for QFrame (0x0x7f0b3d96ebc8)
+ QObject (0x0x7f0b3d6e7ea0) 0
+ primary-for QWidget (0x0x7f0b3d989c40)
+ QPaintDevice (0x0x7f0b3d6e7f00) 16
+ vptr=((& QLabel::_ZTV6QLabel) + 456)
+
+Class QLCDNumber::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLCDNumber::QPrivateSignal (0x0x7f0b3d79e2a0) 0 empty
+
+Vtable for QLCDNumber
+QLCDNumber::_ZTV10QLCDNumber: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QLCDNumber)
+16 (int (*)(...))QLCDNumber::metaObject
+24 (int (*)(...))QLCDNumber::qt_metacast
+32 (int (*)(...))QLCDNumber::qt_metacall
+40 (int (*)(...))QLCDNumber::~QLCDNumber
+48 (int (*)(...))QLCDNumber::~QLCDNumber
+56 (int (*)(...))QLCDNumber::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QLCDNumber::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QLCDNumber::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI10QLCDNumber)
+456 (int (*)(...))QLCDNumber::_ZThn16_N10QLCDNumberD1Ev
+464 (int (*)(...))QLCDNumber::_ZThn16_N10QLCDNumberD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QLCDNumber
+ size=40 align=8
+ base size=40 base align=8
+QLCDNumber (0x0x7f0b3d96ec30) 0
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 16)
+ QFrame (0x0x7f0b3d96ec98) 0
+ primary-for QLCDNumber (0x0x7f0b3d96ec30)
+ QWidget (0x0x7f0b3d989cb0) 0
+ primary-for QFrame (0x0x7f0b3d96ec98)
+ QObject (0x0x7f0b3d79e1e0) 0
+ primary-for QWidget (0x0x7f0b3d989cb0)
+ QPaintDevice (0x0x7f0b3d79e240) 16
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 456)
+
+Class QListView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListView::QPrivateSignal (0x0x7f0b3d79e660) 0 empty
+
+Vtable for QListView
+QListView::_ZTV9QListView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QListView)
+16 (int (*)(...))QListView::metaObject
+24 (int (*)(...))QListView::qt_metacast
+32 (int (*)(...))QListView::qt_metacall
+40 (int (*)(...))QListView::~QListView
+48 (int (*)(...))QListView::~QListView
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI9QListView)
+800 (int (*)(...))QListView::_ZThn16_N9QListViewD1Ev
+808 (int (*)(...))QListView::_ZThn16_N9QListViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QListView
+ size=40 align=8
+ base size=40 base align=8
+QListView (0x0x7f0b3d96ed00) 0
+ vptr=((& QListView::_ZTV9QListView) + 16)
+ QAbstractItemView (0x0x7f0b3d96ed68) 0
+ primary-for QListView (0x0x7f0b3d96ed00)
+ QAbstractScrollArea (0x0x7f0b3d96edd0) 0
+ primary-for QAbstractItemView (0x0x7f0b3d96ed68)
+ QFrame (0x0x7f0b3d96ee38) 0
+ primary-for QAbstractScrollArea (0x0x7f0b3d96edd0)
+ QWidget (0x0x7f0b3d7a6070) 0
+ primary-for QFrame (0x0x7f0b3d96ee38)
+ QObject (0x0x7f0b3d79e5a0) 0
+ primary-for QWidget (0x0x7f0b3d7a6070)
+ QPaintDevice (0x0x7f0b3d79e600) 16
+ vptr=((& QListView::_ZTV9QListView) + 800)
+
+Vtable for QListWidgetItem
+QListWidgetItem::_ZTV15QListWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QListWidgetItem)
+16 (int (*)(...))QListWidgetItem::~QListWidgetItem
+24 (int (*)(...))QListWidgetItem::~QListWidgetItem
+32 (int (*)(...))QListWidgetItem::clone
+40 (int (*)(...))QListWidgetItem::data
+48 (int (*)(...))QListWidgetItem::setData
+56 (int (*)(...))QListWidgetItem::operator<
+64 (int (*)(...))QListWidgetItem::read
+72 (int (*)(...))QListWidgetItem::write
+
+Class QListWidgetItem
+ size=40 align=8
+ base size=36 base align=8
+QListWidgetItem (0x0x7f0b3d79eba0) 0
+ vptr=((& QListWidgetItem::_ZTV15QListWidgetItem) + 16)
+
+Class QListWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListWidget::QPrivateSignal (0x0x7f0b3d804660) 0 empty
+
+Vtable for QListWidget
+QListWidget::_ZTV11QListWidget: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QListWidget)
+16 (int (*)(...))QListWidget::metaObject
+24 (int (*)(...))QListWidget::qt_metacast
+32 (int (*)(...))QListWidget::qt_metacall
+40 (int (*)(...))QListWidget::~QListWidget
+48 (int (*)(...))QListWidget::~QListWidget
+56 (int (*)(...))QListWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QListWidget::setModel
+480 (int (*)(...))QListWidget::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))QListWidget::mimeTypes
+792 (int (*)(...))QListWidget::mimeData
+800 (int (*)(...))QListWidget::dropMimeData
+808 (int (*)(...))QListWidget::supportedDropActions
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI11QListWidget)
+832 (int (*)(...))QListWidget::_ZThn16_N11QListWidgetD1Ev
+840 (int (*)(...))QListWidget::_ZThn16_N11QListWidgetD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QListWidget
+ size=40 align=8
+ base size=40 base align=8
+QListWidget (0x0x7f0b3d96eea0) 0
+ vptr=((& QListWidget::_ZTV11QListWidget) + 16)
+ QListView (0x0x7f0b3d96ef08) 0
+ primary-for QListWidget (0x0x7f0b3d96eea0)
+ QAbstractItemView (0x0x7f0b3d96ef70) 0
+ primary-for QListView (0x0x7f0b3d96ef08)
+ QAbstractScrollArea (0x0x7f0b3d81d000) 0
+ primary-for QAbstractItemView (0x0x7f0b3d96ef70)
+ QFrame (0x0x7f0b3d81d068) 0
+ primary-for QAbstractScrollArea (0x0x7f0b3d81d000)
+ QWidget (0x0x7f0b3d7a6690) 0
+ primary-for QFrame (0x0x7f0b3d81d068)
+ QObject (0x0x7f0b3d8045a0) 0
+ primary-for QWidget (0x0x7f0b3d7a6690)
+ QPaintDevice (0x0x7f0b3d804600) 16
+ vptr=((& QListWidget::_ZTV11QListWidget) + 832)
+
+Class QMainWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMainWindow::QPrivateSignal (0x0x7f0b3d804b40) 0 empty
+
+Vtable for QMainWindow
+QMainWindow::_ZTV11QMainWindow: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMainWindow)
+16 (int (*)(...))QMainWindow::metaObject
+24 (int (*)(...))QMainWindow::qt_metacast
+32 (int (*)(...))QMainWindow::qt_metacall
+40 (int (*)(...))QMainWindow::~QMainWindow
+48 (int (*)(...))QMainWindow::~QMainWindow
+56 (int (*)(...))QMainWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QMainWindow::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QMainWindow::createPopupMenu
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI11QMainWindow)
+456 (int (*)(...))QMainWindow::_ZThn16_N11QMainWindowD1Ev
+464 (int (*)(...))QMainWindow::_ZThn16_N11QMainWindowD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMainWindow
+ size=40 align=8
+ base size=40 base align=8
+QMainWindow (0x0x7f0b3d81d0d0) 0
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 16)
+ QWidget (0x0x7f0b3d7a6700) 0
+ primary-for QMainWindow (0x0x7f0b3d81d0d0)
+ QObject (0x0x7f0b3d804a80) 0
+ primary-for QWidget (0x0x7f0b3d7a6700)
+ QPaintDevice (0x0x7f0b3d804ae0) 16
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 456)
+
+Class QMdiArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiArea::QPrivateSignal (0x0x7f0b3d47c300) 0 empty
+
+Vtable for QMdiArea
+QMdiArea::_ZTV8QMdiArea: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QMdiArea)
+16 (int (*)(...))QMdiArea::metaObject
+24 (int (*)(...))QMdiArea::qt_metacast
+32 (int (*)(...))QMdiArea::qt_metacall
+40 (int (*)(...))QMdiArea::~QMdiArea
+48 (int (*)(...))QMdiArea::~QMdiArea
+56 (int (*)(...))QMdiArea::event
+64 (int (*)(...))QMdiArea::eventFilter
+72 (int (*)(...))QMdiArea::timerEvent
+80 (int (*)(...))QMdiArea::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMdiArea::sizeHint
+136 (int (*)(...))QMdiArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractScrollArea::mousePressEvent
+176 (int (*)(...))QAbstractScrollArea::mouseReleaseEvent
+184 (int (*)(...))QAbstractScrollArea::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractScrollArea::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractScrollArea::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QMdiArea::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMdiArea::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractScrollArea::dragEnterEvent
+320 (int (*)(...))QAbstractScrollArea::dragMoveEvent
+328 (int (*)(...))QAbstractScrollArea::dragLeaveEvent
+336 (int (*)(...))QAbstractScrollArea::dropEvent
+344 (int (*)(...))QMdiArea::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QMdiArea::setupViewport
+448 (int (*)(...))QMdiArea::viewportEvent
+456 (int (*)(...))QMdiArea::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI8QMdiArea)
+488 (int (*)(...))QMdiArea::_ZThn16_N8QMdiAreaD1Ev
+496 (int (*)(...))QMdiArea::_ZThn16_N8QMdiAreaD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMdiArea
+ size=40 align=8
+ base size=40 base align=8
+QMdiArea (0x0x7f0b3d81d270) 0
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 16)
+ QAbstractScrollArea (0x0x7f0b3d81d2d8) 0
+ primary-for QMdiArea (0x0x7f0b3d81d270)
+ QFrame (0x0x7f0b3d81d340) 0
+ primary-for QAbstractScrollArea (0x0x7f0b3d81d2d8)
+ QWidget (0x0x7f0b3d7a6a10) 0
+ primary-for QFrame (0x0x7f0b3d81d340)
+ QObject (0x0x7f0b3d47c240) 0
+ primary-for QWidget (0x0x7f0b3d7a6a10)
+ QPaintDevice (0x0x7f0b3d47c2a0) 16
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 488)
+
+Class QMdiSubWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiSubWindow::QPrivateSignal (0x0x7f0b3d47ca80) 0 empty
+
+Vtable for QMdiSubWindow
+QMdiSubWindow::_ZTV13QMdiSubWindow: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QMdiSubWindow)
+16 (int (*)(...))QMdiSubWindow::metaObject
+24 (int (*)(...))QMdiSubWindow::qt_metacast
+32 (int (*)(...))QMdiSubWindow::qt_metacall
+40 (int (*)(...))QMdiSubWindow::~QMdiSubWindow
+48 (int (*)(...))QMdiSubWindow::~QMdiSubWindow
+56 (int (*)(...))QMdiSubWindow::event
+64 (int (*)(...))QMdiSubWindow::eventFilter
+72 (int (*)(...))QMdiSubWindow::timerEvent
+80 (int (*)(...))QMdiSubWindow::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMdiSubWindow::sizeHint
+136 (int (*)(...))QMdiSubWindow::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMdiSubWindow::mousePressEvent
+176 (int (*)(...))QMdiSubWindow::mouseReleaseEvent
+184 (int (*)(...))QMdiSubWindow::mouseDoubleClickEvent
+192 (int (*)(...))QMdiSubWindow::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMdiSubWindow::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QMdiSubWindow::focusInEvent
+232 (int (*)(...))QMdiSubWindow::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QMdiSubWindow::leaveEvent
+256 (int (*)(...))QMdiSubWindow::paintEvent
+264 (int (*)(...))QMdiSubWindow::moveEvent
+272 (int (*)(...))QMdiSubWindow::resizeEvent
+280 (int (*)(...))QMdiSubWindow::closeEvent
+288 (int (*)(...))QMdiSubWindow::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QMdiSubWindow::showEvent
+352 (int (*)(...))QMdiSubWindow::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMdiSubWindow::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI13QMdiSubWindow)
+448 (int (*)(...))QMdiSubWindow::_ZThn16_N13QMdiSubWindowD1Ev
+456 (int (*)(...))QMdiSubWindow::_ZThn16_N13QMdiSubWindowD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMdiSubWindow
+ size=40 align=8
+ base size=40 base align=8
+QMdiSubWindow (0x0x7f0b3d81d4e0) 0
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 16)
+ QWidget (0x0x7f0b3d7a6d90) 0
+ primary-for QMdiSubWindow (0x0x7f0b3d81d4e0)
+ QObject (0x0x7f0b3d47c9c0) 0
+ primary-for QWidget (0x0x7f0b3d7a6d90)
+ QPaintDevice (0x0x7f0b3d47ca20) 16
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 448)
+
+Class QMenu::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenu::QPrivateSignal (0x0x7f0b3d5770c0) 0 empty
+
+Vtable for QMenu
+QMenu::_ZTV5QMenu: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QMenu)
+16 (int (*)(...))QMenu::metaObject
+24 (int (*)(...))QMenu::qt_metacast
+32 (int (*)(...))QMenu::qt_metacall
+40 (int (*)(...))QMenu::~QMenu
+48 (int (*)(...))QMenu::~QMenu
+56 (int (*)(...))QMenu::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QMenu::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QMenu::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMenu::mousePressEvent
+176 (int (*)(...))QMenu::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QMenu::mouseMoveEvent
+200 (int (*)(...))QMenu::wheelEvent
+208 (int (*)(...))QMenu::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QMenu::enterEvent
+248 (int (*)(...))QMenu::leaveEvent
+256 (int (*)(...))QMenu::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QMenu::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QMenu::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMenu::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QMenu::focusNextPrevChild
+432 (int (*)(...))QMenu::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI5QMenu)
+456 (int (*)(...))QMenu::_ZThn16_N5QMenuD1Ev
+464 (int (*)(...))QMenu::_ZThn16_N5QMenuD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMenu
+ size=40 align=8
+ base size=40 base align=8
+QMenu (0x0x7f0b3d81d680) 0
+ vptr=((& QMenu::_ZTV5QMenu) + 16)
+ QWidget (0x0x7f0b3d576000) 0
+ primary-for QMenu (0x0x7f0b3d81d680)
+ QObject (0x0x7f0b3d577000) 0
+ primary-for QWidget (0x0x7f0b3d576000)
+ QPaintDevice (0x0x7f0b3d577060) 16
+ vptr=((& QMenu::_ZTV5QMenu) + 456)
+
+Class QMenuBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenuBar::QPrivateSignal (0x0x7f0b3d577480) 0 empty
+
+Vtable for QMenuBar
+QMenuBar::_ZTV8QMenuBar: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QMenuBar)
+16 (int (*)(...))QMenuBar::metaObject
+24 (int (*)(...))QMenuBar::qt_metacast
+32 (int (*)(...))QMenuBar::qt_metacall
+40 (int (*)(...))QMenuBar::~QMenuBar
+48 (int (*)(...))QMenuBar::~QMenuBar
+56 (int (*)(...))QMenuBar::event
+64 (int (*)(...))QMenuBar::eventFilter
+72 (int (*)(...))QMenuBar::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QMenuBar::setVisible
+128 (int (*)(...))QMenuBar::sizeHint
+136 (int (*)(...))QMenuBar::minimumSizeHint
+144 (int (*)(...))QMenuBar::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QMenuBar::mousePressEvent
+176 (int (*)(...))QMenuBar::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QMenuBar::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMenuBar::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QMenuBar::focusInEvent
+232 (int (*)(...))QMenuBar::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QMenuBar::leaveEvent
+256 (int (*)(...))QMenuBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMenuBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QMenuBar::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMenuBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QMenuBar::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI8QMenuBar)
+456 (int (*)(...))QMenuBar::_ZThn16_N8QMenuBarD1Ev
+464 (int (*)(...))QMenuBar::_ZThn16_N8QMenuBarD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMenuBar
+ size=40 align=8
+ base size=40 base align=8
+QMenuBar (0x0x7f0b3d81d6e8) 0
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 16)
+ QWidget (0x0x7f0b3d576070) 0
+ primary-for QMenuBar (0x0x7f0b3d81d6e8)
+ QObject (0x0x7f0b3d5773c0) 0
+ primary-for QWidget (0x0x7f0b3d576070)
+ QPaintDevice (0x0x7f0b3d577420) 16
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 456)
+
+Class QMessageBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMessageBox::QPrivateSignal (0x0x7f0b3d577780) 0 empty
+
+Vtable for QMessageBox
+QMessageBox::_ZTV11QMessageBox: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QMessageBox)
+16 (int (*)(...))QMessageBox::metaObject
+24 (int (*)(...))QMessageBox::qt_metacast
+32 (int (*)(...))QMessageBox::qt_metacall
+40 (int (*)(...))QMessageBox::~QMessageBox
+48 (int (*)(...))QMessageBox::~QMessageBox
+56 (int (*)(...))QMessageBox::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QMessageBox::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QMessageBox::resizeEvent
+280 (int (*)(...))QMessageBox::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QMessageBox::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QMessageBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QMessageBox)
+488 (int (*)(...))QMessageBox::_ZThn16_N11QMessageBoxD1Ev
+496 (int (*)(...))QMessageBox::_ZThn16_N11QMessageBoxD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QMessageBox
+ size=40 align=8
+ base size=40 base align=8
+QMessageBox (0x0x7f0b3d81d750) 0
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 16)
+ QDialog (0x0x7f0b3d81d7b8) 0
+ primary-for QMessageBox (0x0x7f0b3d81d750)
+ QWidget (0x0x7f0b3d5760e0) 0
+ primary-for QDialog (0x0x7f0b3d81d7b8)
+ QObject (0x0x7f0b3d5776c0) 0
+ primary-for QWidget (0x0x7f0b3d5760e0)
+ QPaintDevice (0x0x7f0b3d577720) 16
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 488)
+
+Class QTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextEdit::QPrivateSignal (0x0x7f0b3d6420c0) 0 empty
+
+Class QTextEdit::ExtraSelection
+ size=24 align=8
+ base size=24 base align=8
+QTextEdit::ExtraSelection (0x0x7f0b3d642120) 0
+
+Vtable for QTextEdit
+QTextEdit::_ZTV9QTextEdit: 74 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTextEdit)
+16 (int (*)(...))QTextEdit::metaObject
+24 (int (*)(...))QTextEdit::qt_metacast
+32 (int (*)(...))QTextEdit::qt_metacall
+40 (int (*)(...))QTextEdit::~QTextEdit
+48 (int (*)(...))QTextEdit::~QTextEdit
+56 (int (*)(...))QTextEdit::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTextEdit::mousePressEvent
+176 (int (*)(...))QTextEdit::mouseReleaseEvent
+184 (int (*)(...))QTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QTextEdit::mouseMoveEvent
+200 (int (*)(...))QTextEdit::wheelEvent
+208 (int (*)(...))QTextEdit::keyPressEvent
+216 (int (*)(...))QTextEdit::keyReleaseEvent
+224 (int (*)(...))QTextEdit::focusInEvent
+232 (int (*)(...))QTextEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTextEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QTextEdit::dragEnterEvent
+320 (int (*)(...))QTextEdit::dragMoveEvent
+328 (int (*)(...))QTextEdit::dragLeaveEvent
+336 (int (*)(...))QTextEdit::dropEvent
+344 (int (*)(...))QTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QTextEdit::inputMethodEvent
+416 (int (*)(...))QTextEdit::inputMethodQuery
+424 (int (*)(...))QTextEdit::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QTextEdit::loadResource
+480 (int (*)(...))QTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QTextEdit::canInsertFromMimeData
+496 (int (*)(...))QTextEdit::insertFromMimeData
+504 (int (*)(...))QTextEdit::doSetTextCursor
+512 (int (*)(...))-16
+520 (int (*)(...))(& _ZTI9QTextEdit)
+528 (int (*)(...))QTextEdit::_ZThn16_N9QTextEditD1Ev
+536 (int (*)(...))QTextEdit::_ZThn16_N9QTextEditD0Ev
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTextEdit
+ size=40 align=8
+ base size=40 base align=8
+QTextEdit (0x0x7f0b3d81d958) 0
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 16)
+ QAbstractScrollArea (0x0x7f0b3d81d9c0) 0
+ primary-for QTextEdit (0x0x7f0b3d81d958)
+ QFrame (0x0x7f0b3d81da28) 0
+ primary-for QAbstractScrollArea (0x0x7f0b3d81d9c0)
+ QWidget (0x0x7f0b3d5c1460) 0
+ primary-for QFrame (0x0x7f0b3d81da28)
+ QObject (0x0x7f0b3d642000) 0
+ primary-for QWidget (0x0x7f0b3d5c1460)
+ QPaintDevice (0x0x7f0b3d642060) 16
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 528)
+
+Class QPlainTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextEdit::QPrivateSignal (0x0x7f0b3d642a20) 0 empty
+
+Vtable for QPlainTextEdit
+QPlainTextEdit::_ZTV14QPlainTextEdit: 74 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QPlainTextEdit)
+16 (int (*)(...))QPlainTextEdit::metaObject
+24 (int (*)(...))QPlainTextEdit::qt_metacast
+32 (int (*)(...))QPlainTextEdit::qt_metacall
+40 (int (*)(...))QPlainTextEdit::~QPlainTextEdit
+48 (int (*)(...))QPlainTextEdit::~QPlainTextEdit
+56 (int (*)(...))QPlainTextEdit::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QPlainTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QPlainTextEdit::mousePressEvent
+176 (int (*)(...))QPlainTextEdit::mouseReleaseEvent
+184 (int (*)(...))QPlainTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QPlainTextEdit::mouseMoveEvent
+200 (int (*)(...))QPlainTextEdit::wheelEvent
+208 (int (*)(...))QPlainTextEdit::keyPressEvent
+216 (int (*)(...))QPlainTextEdit::keyReleaseEvent
+224 (int (*)(...))QPlainTextEdit::focusInEvent
+232 (int (*)(...))QPlainTextEdit::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QPlainTextEdit::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QPlainTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QPlainTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QPlainTextEdit::dragEnterEvent
+320 (int (*)(...))QPlainTextEdit::dragMoveEvent
+328 (int (*)(...))QPlainTextEdit::dragLeaveEvent
+336 (int (*)(...))QPlainTextEdit::dropEvent
+344 (int (*)(...))QPlainTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QPlainTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QPlainTextEdit::inputMethodEvent
+416 (int (*)(...))QPlainTextEdit::inputMethodQuery
+424 (int (*)(...))QPlainTextEdit::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QPlainTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QPlainTextEdit::loadResource
+480 (int (*)(...))QPlainTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QPlainTextEdit::canInsertFromMimeData
+496 (int (*)(...))QPlainTextEdit::insertFromMimeData
+504 (int (*)(...))QPlainTextEdit::doSetTextCursor
+512 (int (*)(...))-16
+520 (int (*)(...))(& _ZTI14QPlainTextEdit)
+528 (int (*)(...))QPlainTextEdit::_ZThn16_N14QPlainTextEditD1Ev
+536 (int (*)(...))QPlainTextEdit::_ZThn16_N14QPlainTextEditD0Ev
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QPlainTextEdit
+ size=40 align=8
+ base size=40 base align=8
+QPlainTextEdit (0x0x7f0b3d81dbc8) 0
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 16)
+ QAbstractScrollArea (0x0x7f0b3d81dc30) 0
+ primary-for QPlainTextEdit (0x0x7f0b3d81dbc8)
+ QFrame (0x0x7f0b3d81dc98) 0
+ primary-for QAbstractScrollArea (0x0x7f0b3d81dc30)
+ QWidget (0x0x7f0b3d5c17e0) 0
+ primary-for QFrame (0x0x7f0b3d81dc98)
+ QObject (0x0x7f0b3d642960) 0
+ primary-for QWidget (0x0x7f0b3d5c17e0)
+ QPaintDevice (0x0x7f0b3d6429c0) 16
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 528)
+
+Class QPlainTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextDocumentLayout::QPrivateSignal (0x0x7f0b3d642f60) 0 empty
+
+Vtable for QPlainTextDocumentLayout
+QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QPlainTextDocumentLayout)
+16 (int (*)(...))QPlainTextDocumentLayout::metaObject
+24 (int (*)(...))QPlainTextDocumentLayout::qt_metacast
+32 (int (*)(...))QPlainTextDocumentLayout::qt_metacall
+40 (int (*)(...))QPlainTextDocumentLayout::~QPlainTextDocumentLayout
+48 (int (*)(...))QPlainTextDocumentLayout::~QPlainTextDocumentLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QPlainTextDocumentLayout::draw
+120 (int (*)(...))QPlainTextDocumentLayout::hitTest
+128 (int (*)(...))QPlainTextDocumentLayout::pageCount
+136 (int (*)(...))QPlainTextDocumentLayout::documentSize
+144 (int (*)(...))QPlainTextDocumentLayout::frameBoundingRect
+152 (int (*)(...))QPlainTextDocumentLayout::blockBoundingRect
+160 (int (*)(...))QPlainTextDocumentLayout::documentChanged
+168 (int (*)(...))QAbstractTextDocumentLayout::resizeInlineObject
+176 (int (*)(...))QAbstractTextDocumentLayout::positionInlineObject
+184 (int (*)(...))QAbstractTextDocumentLayout::drawInlineObject
+
+Class QPlainTextDocumentLayout
+ size=16 align=8
+ base size=16 base align=8
+QPlainTextDocumentLayout (0x0x7f0b3d81dd00) 0
+ vptr=((& QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout) + 16)
+ QAbstractTextDocumentLayout (0x0x7f0b3d81dd68) 0
+ primary-for QPlainTextDocumentLayout (0x0x7f0b3d81dd00)
+ QObject (0x0x7f0b3d642f00) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f0b3d81dd68)
+
+Class QProgressBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressBar::QPrivateSignal (0x0x7f0b3d2fd1e0) 0 empty
+
+Vtable for QProgressBar
+QProgressBar::_ZTV12QProgressBar: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QProgressBar)
+16 (int (*)(...))QProgressBar::metaObject
+24 (int (*)(...))QProgressBar::qt_metacast
+32 (int (*)(...))QProgressBar::qt_metacall
+40 (int (*)(...))QProgressBar::~QProgressBar
+48 (int (*)(...))QProgressBar::~QProgressBar
+56 (int (*)(...))QProgressBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QProgressBar::sizeHint
+136 (int (*)(...))QProgressBar::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QProgressBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QProgressBar::text
+440 (int (*)(...))QProgressBar::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI12QProgressBar)
+464 (int (*)(...))QProgressBar::_ZThn16_N12QProgressBarD1Ev
+472 (int (*)(...))QProgressBar::_ZThn16_N12QProgressBarD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QProgressBar
+ size=40 align=8
+ base size=40 base align=8
+QProgressBar (0x0x7f0b3d81ddd0) 0
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 16)
+ QWidget (0x0x7f0b3d5c1930) 0
+ primary-for QProgressBar (0x0x7f0b3d81ddd0)
+ QObject (0x0x7f0b3d2fd120) 0
+ primary-for QWidget (0x0x7f0b3d5c1930)
+ QPaintDevice (0x0x7f0b3d2fd180) 16
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 464)
+
+Class QProgressDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressDialog::QPrivateSignal (0x0x7f0b3d2fd4e0) 0 empty
+
+Vtable for QProgressDialog
+QProgressDialog::_ZTV15QProgressDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QProgressDialog)
+16 (int (*)(...))QProgressDialog::metaObject
+24 (int (*)(...))QProgressDialog::qt_metacast
+32 (int (*)(...))QProgressDialog::qt_metacall
+40 (int (*)(...))QProgressDialog::~QProgressDialog
+48 (int (*)(...))QProgressDialog::~QProgressDialog
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QDialog::setVisible
+128 (int (*)(...))QProgressDialog::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QProgressDialog::resizeEvent
+280 (int (*)(...))QProgressDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QProgressDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QProgressDialog::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI15QProgressDialog)
+488 (int (*)(...))QProgressDialog::_ZThn16_N15QProgressDialogD1Ev
+496 (int (*)(...))QProgressDialog::_ZThn16_N15QProgressDialogD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QProgressDialog
+ size=40 align=8
+ base size=40 base align=8
+QProgressDialog (0x0x7f0b3d81de38) 0
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 16)
+ QDialog (0x0x7f0b3d81dea0) 0
+ primary-for QProgressDialog (0x0x7f0b3d81de38)
+ QWidget (0x0x7f0b3d5c1a80) 0
+ primary-for QDialog (0x0x7f0b3d81dea0)
+ QObject (0x0x7f0b3d2fd420) 0
+ primary-for QWidget (0x0x7f0b3d5c1a80)
+ QPaintDevice (0x0x7f0b3d2fd480) 16
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 488)
+
+Class QProxyStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProxyStyle::QPrivateSignal (0x0x7f0b3d2fd6c0) 0 empty
+
+Vtable for QProxyStyle
+QProxyStyle::_ZTV11QProxyStyle: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QProxyStyle)
+16 (int (*)(...))QProxyStyle::metaObject
+24 (int (*)(...))QProxyStyle::qt_metacast
+32 (int (*)(...))QProxyStyle::qt_metacall
+40 (int (*)(...))QProxyStyle::~QProxyStyle
+48 (int (*)(...))QProxyStyle::~QProxyStyle
+56 (int (*)(...))QProxyStyle::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QProxyStyle::polish
+120 (int (*)(...))QProxyStyle::unpolish
+128 (int (*)(...))QProxyStyle::polish
+136 (int (*)(...))QProxyStyle::unpolish
+144 (int (*)(...))QProxyStyle::polish
+152 (int (*)(...))QProxyStyle::itemTextRect
+160 (int (*)(...))QProxyStyle::itemPixmapRect
+168 (int (*)(...))QProxyStyle::drawItemText
+176 (int (*)(...))QProxyStyle::drawItemPixmap
+184 (int (*)(...))QProxyStyle::standardPalette
+192 (int (*)(...))QProxyStyle::drawPrimitive
+200 (int (*)(...))QProxyStyle::drawControl
+208 (int (*)(...))QProxyStyle::subElementRect
+216 (int (*)(...))QProxyStyle::drawComplexControl
+224 (int (*)(...))QProxyStyle::hitTestComplexControl
+232 (int (*)(...))QProxyStyle::subControlRect
+240 (int (*)(...))QProxyStyle::pixelMetric
+248 (int (*)(...))QProxyStyle::sizeFromContents
+256 (int (*)(...))QProxyStyle::styleHint
+264 (int (*)(...))QProxyStyle::standardPixmap
+272 (int (*)(...))QProxyStyle::standardIcon
+280 (int (*)(...))QProxyStyle::generatedIconPixmap
+288 (int (*)(...))QProxyStyle::layoutSpacing
+
+Class QProxyStyle
+ size=16 align=8
+ base size=16 base align=8
+QProxyStyle (0x0x7f0b3d81df08) 0
+ vptr=((& QProxyStyle::_ZTV11QProxyStyle) + 16)
+ QCommonStyle (0x0x7f0b3d81df70) 0
+ primary-for QProxyStyle (0x0x7f0b3d81df08)
+ QStyle (0x0x7f0b3d32b000) 0
+ primary-for QCommonStyle (0x0x7f0b3d81df70)
+ QObject (0x0x7f0b3d2fd660) 0
+ primary-for QStyle (0x0x7f0b3d32b000)
+
+Class QRadioButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRadioButton::QPrivateSignal (0x0x7f0b3d2fd900) 0 empty
+
+Vtable for QRadioButton
+QRadioButton::_ZTV12QRadioButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QRadioButton)
+16 (int (*)(...))QRadioButton::metaObject
+24 (int (*)(...))QRadioButton::qt_metacast
+32 (int (*)(...))QRadioButton::qt_metacall
+40 (int (*)(...))QRadioButton::~QRadioButton
+48 (int (*)(...))QRadioButton::~QRadioButton
+56 (int (*)(...))QRadioButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QRadioButton::sizeHint
+136 (int (*)(...))QRadioButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractButton::mousePressEvent
+176 (int (*)(...))QAbstractButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QRadioButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QRadioButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QRadioButton::hitButton
+440 (int (*)(...))QAbstractButton::checkStateSet
+448 (int (*)(...))QAbstractButton::nextCheckState
+456 (int (*)(...))QRadioButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI12QRadioButton)
+480 (int (*)(...))QRadioButton::_ZThn16_N12QRadioButtonD1Ev
+488 (int (*)(...))QRadioButton::_ZThn16_N12QRadioButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QRadioButton
+ size=40 align=8
+ base size=40 base align=8
+QRadioButton (0x0x7f0b3d32b068) 0
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 16)
+ QAbstractButton (0x0x7f0b3d32b0d0) 0
+ primary-for QRadioButton (0x0x7f0b3d32b068)
+ QWidget (0x0x7f0b3d5c1af0) 0
+ primary-for QAbstractButton (0x0x7f0b3d32b0d0)
+ QObject (0x0x7f0b3d2fd840) 0
+ primary-for QWidget (0x0x7f0b3d5c1af0)
+ QPaintDevice (0x0x7f0b3d2fd8a0) 16
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 480)
+
+Class QScrollBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollBar::QPrivateSignal (0x0x7f0b3d2fdb40) 0 empty
+
+Vtable for QScrollBar
+QScrollBar::_ZTV10QScrollBar: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QScrollBar)
+16 (int (*)(...))QScrollBar::metaObject
+24 (int (*)(...))QScrollBar::qt_metacast
+32 (int (*)(...))QScrollBar::qt_metacall
+40 (int (*)(...))QScrollBar::~QScrollBar
+48 (int (*)(...))QScrollBar::~QScrollBar
+56 (int (*)(...))QScrollBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSlider::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QScrollBar::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QScrollBar::mousePressEvent
+176 (int (*)(...))QScrollBar::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QScrollBar::mouseMoveEvent
+200 (int (*)(...))QScrollBar::wheelEvent
+208 (int (*)(...))QAbstractSlider::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QScrollBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QScrollBar::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QScrollBar::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSlider::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QScrollBar::sliderChange
+440 (int (*)(...))QScrollBar::initStyleOption
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI10QScrollBar)
+464 (int (*)(...))QScrollBar::_ZThn16_N10QScrollBarD1Ev
+472 (int (*)(...))QScrollBar::_ZThn16_N10QScrollBarD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QScrollBar
+ size=40 align=8
+ base size=40 base align=8
+QScrollBar (0x0x7f0b3d32b138) 0
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 16)
+ QAbstractSlider (0x0x7f0b3d32b1a0) 0
+ primary-for QScrollBar (0x0x7f0b3d32b138)
+ QWidget (0x0x7f0b3d5c1b60) 0
+ primary-for QAbstractSlider (0x0x7f0b3d32b1a0)
+ QObject (0x0x7f0b3d2fda80) 0
+ primary-for QWidget (0x0x7f0b3d5c1b60)
+ QPaintDevice (0x0x7f0b3d2fdae0) 16
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 464)
+
+Vtable for QScrollerProperties
+QScrollerProperties::_ZTV19QScrollerProperties: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QScrollerProperties)
+16 (int (*)(...))QScrollerProperties::~QScrollerProperties
+24 (int (*)(...))QScrollerProperties::~QScrollerProperties
+
+Class QScrollerProperties
+ size=16 align=8
+ base size=16 base align=8
+QScrollerProperties (0x0x7f0b3d2fdcc0) 0
+ vptr=((& QScrollerProperties::_ZTV19QScrollerProperties) + 16)
+
+Class QScroller::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScroller::QPrivateSignal (0x0x7f0b3d42b0c0) 0 empty
+
+Vtable for QScroller
+QScroller::_ZTV9QScroller: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QScroller)
+16 (int (*)(...))QScroller::metaObject
+24 (int (*)(...))QScroller::qt_metacast
+32 (int (*)(...))QScroller::qt_metacall
+40 (int (*)(...))QScroller::~QScroller
+48 (int (*)(...))QScroller::~QScroller
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QScroller
+ size=24 align=8
+ base size=24 base align=8
+QScroller (0x0x7f0b3d4240d0) 0
+ vptr=((& QScroller::_ZTV9QScroller) + 16)
+ QObject (0x0x7f0b3d42b060) 0
+ primary-for QScroller (0x0x7f0b3d4240d0)
+
+Class QSizeGrip::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSizeGrip::QPrivateSignal (0x0x7f0b3d42b3c0) 0 empty
+
+Vtable for QSizeGrip
+QSizeGrip::_ZTV9QSizeGrip: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSizeGrip)
+16 (int (*)(...))QSizeGrip::metaObject
+24 (int (*)(...))QSizeGrip::qt_metacast
+32 (int (*)(...))QSizeGrip::qt_metacall
+40 (int (*)(...))QSizeGrip::~QSizeGrip
+48 (int (*)(...))QSizeGrip::~QSizeGrip
+56 (int (*)(...))QSizeGrip::event
+64 (int (*)(...))QSizeGrip::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QSizeGrip::setVisible
+128 (int (*)(...))QSizeGrip::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSizeGrip::mousePressEvent
+176 (int (*)(...))QSizeGrip::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSizeGrip::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSizeGrip::paintEvent
+264 (int (*)(...))QSizeGrip::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QSizeGrip::showEvent
+352 (int (*)(...))QSizeGrip::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI9QSizeGrip)
+448 (int (*)(...))QSizeGrip::_ZThn16_N9QSizeGripD1Ev
+456 (int (*)(...))QSizeGrip::_ZThn16_N9QSizeGripD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSizeGrip
+ size=40 align=8
+ base size=40 base align=8
+QSizeGrip (0x0x7f0b3d424138) 0
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 16)
+ QWidget (0x0x7f0b3d4235b0) 0
+ primary-for QSizeGrip (0x0x7f0b3d424138)
+ QObject (0x0x7f0b3d42b300) 0
+ primary-for QWidget (0x0x7f0b3d4235b0)
+ QPaintDevice (0x0x7f0b3d42b360) 16
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 448)
+
+Class QSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSpinBox::QPrivateSignal (0x0x7f0b3d42b600) 0 empty
+
+Vtable for QSpinBox
+QSpinBox::_ZTV8QSpinBox: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QSpinBox)
+16 (int (*)(...))QSpinBox::metaObject
+24 (int (*)(...))QSpinBox::qt_metacast
+32 (int (*)(...))QSpinBox::qt_metacall
+40 (int (*)(...))QSpinBox::~QSpinBox
+48 (int (*)(...))QSpinBox::~QSpinBox
+56 (int (*)(...))QSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QSpinBox::validate
+440 (int (*)(...))QSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))QSpinBox::valueFromText
+488 (int (*)(...))QSpinBox::textFromValue
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI8QSpinBox)
+512 (int (*)(...))QSpinBox::_ZThn16_N8QSpinBoxD1Ev
+520 (int (*)(...))QSpinBox::_ZThn16_N8QSpinBoxD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QSpinBox (0x0x7f0b3d4241a0) 0
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 16)
+ QAbstractSpinBox (0x0x7f0b3d424208) 0
+ primary-for QSpinBox (0x0x7f0b3d4241a0)
+ QWidget (0x0x7f0b3d423620) 0
+ primary-for QAbstractSpinBox (0x0x7f0b3d424208)
+ QObject (0x0x7f0b3d42b540) 0
+ primary-for QWidget (0x0x7f0b3d423620)
+ QPaintDevice (0x0x7f0b3d42b5a0) 16
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 512)
+
+Class QDoubleSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleSpinBox::QPrivateSignal (0x0x7f0b3d42b840) 0 empty
+
+Vtable for QDoubleSpinBox
+QDoubleSpinBox::_ZTV14QDoubleSpinBox: 72 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDoubleSpinBox)
+16 (int (*)(...))QDoubleSpinBox::metaObject
+24 (int (*)(...))QDoubleSpinBox::qt_metacast
+32 (int (*)(...))QDoubleSpinBox::qt_metacall
+40 (int (*)(...))QDoubleSpinBox::~QDoubleSpinBox
+48 (int (*)(...))QDoubleSpinBox::~QDoubleSpinBox
+56 (int (*)(...))QAbstractSpinBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QAbstractSpinBox::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractSpinBox::sizeHint
+136 (int (*)(...))QAbstractSpinBox::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractSpinBox::mousePressEvent
+176 (int (*)(...))QAbstractSpinBox::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractSpinBox::mouseMoveEvent
+200 (int (*)(...))QAbstractSpinBox::wheelEvent
+208 (int (*)(...))QAbstractSpinBox::keyPressEvent
+216 (int (*)(...))QAbstractSpinBox::keyReleaseEvent
+224 (int (*)(...))QAbstractSpinBox::focusInEvent
+232 (int (*)(...))QAbstractSpinBox::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QAbstractSpinBox::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractSpinBox::resizeEvent
+280 (int (*)(...))QAbstractSpinBox::closeEvent
+288 (int (*)(...))QAbstractSpinBox::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QAbstractSpinBox::showEvent
+352 (int (*)(...))QAbstractSpinBox::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QAbstractSpinBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QAbstractSpinBox::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDoubleSpinBox::validate
+440 (int (*)(...))QDoubleSpinBox::fixup
+448 (int (*)(...))QAbstractSpinBox::stepBy
+456 (int (*)(...))QAbstractSpinBox::clear
+464 (int (*)(...))QAbstractSpinBox::initStyleOption
+472 (int (*)(...))QAbstractSpinBox::stepEnabled
+480 (int (*)(...))QDoubleSpinBox::valueFromText
+488 (int (*)(...))QDoubleSpinBox::textFromValue
+496 (int (*)(...))-16
+504 (int (*)(...))(& _ZTI14QDoubleSpinBox)
+512 (int (*)(...))QDoubleSpinBox::_ZThn16_N14QDoubleSpinBoxD1Ev
+520 (int (*)(...))QDoubleSpinBox::_ZThn16_N14QDoubleSpinBoxD0Ev
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QDoubleSpinBox
+ size=40 align=8
+ base size=40 base align=8
+QDoubleSpinBox (0x0x7f0b3d424270) 0
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 16)
+ QAbstractSpinBox (0x0x7f0b3d4242d8) 0
+ primary-for QDoubleSpinBox (0x0x7f0b3d424270)
+ QWidget (0x0x7f0b3d423690) 0
+ primary-for QAbstractSpinBox (0x0x7f0b3d4242d8)
+ QObject (0x0x7f0b3d42b780) 0
+ primary-for QWidget (0x0x7f0b3d423690)
+ QPaintDevice (0x0x7f0b3d42b7e0) 16
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 512)
+
+Class QSplashScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplashScreen::QPrivateSignal (0x0x7f0b3d42ba80) 0 empty
+
+Vtable for QSplashScreen
+QSplashScreen::_ZTV13QSplashScreen: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSplashScreen)
+16 (int (*)(...))QSplashScreen::metaObject
+24 (int (*)(...))QSplashScreen::qt_metacast
+32 (int (*)(...))QSplashScreen::qt_metacall
+40 (int (*)(...))QSplashScreen::~QSplashScreen
+48 (int (*)(...))QSplashScreen::~QSplashScreen
+56 (int (*)(...))QSplashScreen::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSplashScreen::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QSplashScreen::drawContents
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI13QSplashScreen)
+456 (int (*)(...))QSplashScreen::_ZThn16_N13QSplashScreenD1Ev
+464 (int (*)(...))QSplashScreen::_ZThn16_N13QSplashScreenD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplashScreen
+ size=40 align=8
+ base size=40 base align=8
+QSplashScreen (0x0x7f0b3d424340) 0
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 16)
+ QWidget (0x0x7f0b3d423700) 0
+ primary-for QSplashScreen (0x0x7f0b3d424340)
+ QObject (0x0x7f0b3d42b9c0) 0
+ primary-for QWidget (0x0x7f0b3d423700)
+ QPaintDevice (0x0x7f0b3d42ba20) 16
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 456)
+
+Class QSplitter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitter::QPrivateSignal (0x0x7f0b3d42bcc0) 0 empty
+
+Vtable for QSplitter
+QSplitter::_ZTV9QSplitter: 66 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QSplitter)
+16 (int (*)(...))QSplitter::metaObject
+24 (int (*)(...))QSplitter::qt_metacast
+32 (int (*)(...))QSplitter::qt_metacall
+40 (int (*)(...))QSplitter::~QSplitter
+48 (int (*)(...))QSplitter::~QSplitter
+56 (int (*)(...))QSplitter::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QSplitter::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSplitter::sizeHint
+136 (int (*)(...))QSplitter::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QSplitter::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QSplitter::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QSplitter::createHandle
+448 (int (*)(...))-16
+456 (int (*)(...))(& _ZTI9QSplitter)
+464 (int (*)(...))QSplitter::_ZThn16_N9QSplitterD1Ev
+472 (int (*)(...))QSplitter::_ZThn16_N9QSplitterD0Ev
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplitter
+ size=40 align=8
+ base size=40 base align=8
+QSplitter (0x0x7f0b3d4243a8) 0
+ vptr=((& QSplitter::_ZTV9QSplitter) + 16)
+ QFrame (0x0x7f0b3d424410) 0
+ primary-for QSplitter (0x0x7f0b3d4243a8)
+ QWidget (0x0x7f0b3d423770) 0
+ primary-for QFrame (0x0x7f0b3d424410)
+ QObject (0x0x7f0b3d42bc00) 0
+ primary-for QWidget (0x0x7f0b3d423770)
+ QPaintDevice (0x0x7f0b3d42bc60) 16
+ vptr=((& QSplitter::_ZTV9QSplitter) + 464)
+
+Class QSplitterHandle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitterHandle::QPrivateSignal (0x0x7f0b3d42bf00) 0 empty
+
+Vtable for QSplitterHandle
+QSplitterHandle::_ZTV15QSplitterHandle: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSplitterHandle)
+16 (int (*)(...))QSplitterHandle::metaObject
+24 (int (*)(...))QSplitterHandle::qt_metacast
+32 (int (*)(...))QSplitterHandle::qt_metacall
+40 (int (*)(...))QSplitterHandle::~QSplitterHandle
+48 (int (*)(...))QSplitterHandle::~QSplitterHandle
+56 (int (*)(...))QSplitterHandle::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QSplitterHandle::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QSplitterHandle::mousePressEvent
+176 (int (*)(...))QSplitterHandle::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QSplitterHandle::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QSplitterHandle::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QSplitterHandle::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI15QSplitterHandle)
+448 (int (*)(...))QSplitterHandle::_ZThn16_N15QSplitterHandleD1Ev
+456 (int (*)(...))QSplitterHandle::_ZThn16_N15QSplitterHandleD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QSplitterHandle
+ size=40 align=8
+ base size=40 base align=8
+QSplitterHandle (0x0x7f0b3d424478) 0
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 16)
+ QWidget (0x0x7f0b3d4237e0) 0
+ primary-for QSplitterHandle (0x0x7f0b3d424478)
+ QObject (0x0x7f0b3d42be40) 0
+ primary-for QWidget (0x0x7f0b3d4237e0)
+ QPaintDevice (0x0x7f0b3d42bea0) 16
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 448)
+
+Class QStackedLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedLayout::QPrivateSignal (0x0x7f0b3d0b0180) 0 empty
+
+Vtable for QStackedLayout
+QStackedLayout::_ZTV14QStackedLayout: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QStackedLayout)
+16 (int (*)(...))QStackedLayout::metaObject
+24 (int (*)(...))QStackedLayout::qt_metacast
+32 (int (*)(...))QStackedLayout::qt_metacall
+40 (int (*)(...))QStackedLayout::~QStackedLayout
+48 (int (*)(...))QStackedLayout::~QStackedLayout
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QLayout::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLayout::spacing
+120 (int (*)(...))QLayout::setSpacing
+128 (int (*)(...))QLayout::invalidate
+136 (int (*)(...))QLayout::geometry
+144 (int (*)(...))QStackedLayout::addItem
+152 (int (*)(...))QLayout::expandingDirections
+160 (int (*)(...))QStackedLayout::minimumSize
+168 (int (*)(...))QLayout::maximumSize
+176 (int (*)(...))QStackedLayout::setGeometry
+184 (int (*)(...))QStackedLayout::itemAt
+192 (int (*)(...))QStackedLayout::takeAt
+200 (int (*)(...))QLayout::indexOf
+208 (int (*)(...))QLayout::indexOf
+216 (int (*)(...))QStackedLayout::count
+224 (int (*)(...))QLayout::isEmpty
+232 (int (*)(...))QLayout::controlTypes
+240 (int (*)(...))QLayout::replaceWidget
+248 (int (*)(...))QLayout::layout
+256 (int (*)(...))QStackedLayout::sizeHint
+264 (int (*)(...))QStackedLayout::hasHeightForWidth
+272 (int (*)(...))QStackedLayout::heightForWidth
+280 (int (*)(...))-16
+288 (int (*)(...))(& _ZTI14QStackedLayout)
+296 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayoutD1Ev
+304 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayoutD0Ev
+312 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout8sizeHintEv
+320 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout11minimumSizeEv
+328 (int (*)(...))QLayout::_ZThn16_NK7QLayout11maximumSizeEv
+336 (int (*)(...))QLayout::_ZThn16_NK7QLayout19expandingDirectionsEv
+344 (int (*)(...))QStackedLayout::_ZThn16_N14QStackedLayout11setGeometryERK5QRect
+352 (int (*)(...))QLayout::_ZThn16_NK7QLayout8geometryEv
+360 (int (*)(...))QLayout::_ZThn16_NK7QLayout7isEmptyEv
+368 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout17hasHeightForWidthEv
+376 (int (*)(...))QStackedLayout::_ZThn16_NK14QStackedLayout14heightForWidthEi
+384 (int (*)(...))QLayoutItem::minimumHeightForWidth
+392 (int (*)(...))QLayout::_ZThn16_N7QLayout10invalidateEv
+400 (int (*)(...))QLayoutItem::widget
+408 (int (*)(...))QLayout::_ZThn16_N7QLayout6layoutEv
+416 (int (*)(...))QLayoutItem::spacerItem
+424 (int (*)(...))QLayout::_ZThn16_NK7QLayout12controlTypesEv
+
+Class QStackedLayout
+ size=32 align=8
+ base size=28 base align=8
+QStackedLayout (0x0x7f0b3d4244e0) 0
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 16)
+ QLayout (0x0x7f0b3d423850) 0
+ primary-for QStackedLayout (0x0x7f0b3d4244e0)
+ QObject (0x0x7f0b3d0b00c0) 0
+ primary-for QLayout (0x0x7f0b3d423850)
+ QLayoutItem (0x0x7f0b3d0b0120) 16
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 296)
+
+Class QStackedWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedWidget::QPrivateSignal (0x0x7f0b3d0b0480) 0 empty
+
+Vtable for QStackedWidget
+QStackedWidget::_ZTV14QStackedWidget: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QStackedWidget)
+16 (int (*)(...))QStackedWidget::metaObject
+24 (int (*)(...))QStackedWidget::qt_metacast
+32 (int (*)(...))QStackedWidget::qt_metacall
+40 (int (*)(...))QStackedWidget::~QStackedWidget
+48 (int (*)(...))QStackedWidget::~QStackedWidget
+56 (int (*)(...))QStackedWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI14QStackedWidget)
+456 (int (*)(...))QStackedWidget::_ZThn16_N14QStackedWidgetD1Ev
+464 (int (*)(...))QStackedWidget::_ZThn16_N14QStackedWidgetD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QStackedWidget
+ size=40 align=8
+ base size=40 base align=8
+QStackedWidget (0x0x7f0b3d424548) 0
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 16)
+ QFrame (0x0x7f0b3d4245b0) 0
+ primary-for QStackedWidget (0x0x7f0b3d424548)
+ QWidget (0x0x7f0b3d4239a0) 0
+ primary-for QFrame (0x0x7f0b3d4245b0)
+ QObject (0x0x7f0b3d0b03c0) 0
+ primary-for QWidget (0x0x7f0b3d4239a0)
+ QPaintDevice (0x0x7f0b3d0b0420) 16
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 456)
+
+Class QStatusBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStatusBar::QPrivateSignal (0x0x7f0b3d0b06c0) 0 empty
+
+Vtable for QStatusBar
+QStatusBar::_ZTV10QStatusBar: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QStatusBar)
+16 (int (*)(...))QStatusBar::metaObject
+24 (int (*)(...))QStatusBar::qt_metacast
+32 (int (*)(...))QStatusBar::qt_metacall
+40 (int (*)(...))QStatusBar::~QStatusBar
+48 (int (*)(...))QStatusBar::~QStatusBar
+56 (int (*)(...))QStatusBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QStatusBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QStatusBar::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QStatusBar::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))-16
+440 (int (*)(...))(& _ZTI10QStatusBar)
+448 (int (*)(...))QStatusBar::_ZThn16_N10QStatusBarD1Ev
+456 (int (*)(...))QStatusBar::_ZThn16_N10QStatusBarD0Ev
+464 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QStatusBar
+ size=40 align=8
+ base size=40 base align=8
+QStatusBar (0x0x7f0b3d424618) 0
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 16)
+ QWidget (0x0x7f0b3d423a10) 0
+ primary-for QStatusBar (0x0x7f0b3d424618)
+ QObject (0x0x7f0b3d0b0600) 0
+ primary-for QWidget (0x0x7f0b3d423a10)
+ QPaintDevice (0x0x7f0b3d0b0660) 16
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 448)
+
+Class QStyledItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyledItemDelegate::QPrivateSignal (0x0x7f0b3d0b08a0) 0 empty
+
+Vtable for QStyledItemDelegate
+QStyledItemDelegate::_ZTV19QStyledItemDelegate: 26 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QStyledItemDelegate)
+16 (int (*)(...))QStyledItemDelegate::metaObject
+24 (int (*)(...))QStyledItemDelegate::qt_metacast
+32 (int (*)(...))QStyledItemDelegate::qt_metacall
+40 (int (*)(...))QStyledItemDelegate::~QStyledItemDelegate
+48 (int (*)(...))QStyledItemDelegate::~QStyledItemDelegate
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QStyledItemDelegate::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QStyledItemDelegate::paint
+120 (int (*)(...))QStyledItemDelegate::sizeHint
+128 (int (*)(...))QStyledItemDelegate::createEditor
+136 (int (*)(...))QAbstractItemDelegate::destroyEditor
+144 (int (*)(...))QStyledItemDelegate::setEditorData
+152 (int (*)(...))QStyledItemDelegate::setModelData
+160 (int (*)(...))QStyledItemDelegate::updateEditorGeometry
+168 (int (*)(...))QStyledItemDelegate::editorEvent
+176 (int (*)(...))QAbstractItemDelegate::helpEvent
+184 (int (*)(...))QAbstractItemDelegate::paintingRoles
+192 (int (*)(...))QStyledItemDelegate::displayText
+200 (int (*)(...))QStyledItemDelegate::initStyleOption
+
+Class QStyledItemDelegate
+ size=16 align=8
+ base size=16 base align=8
+QStyledItemDelegate (0x0x7f0b3d424680) 0
+ vptr=((& QStyledItemDelegate::_ZTV19QStyledItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7f0b3d4246e8) 0
+ primary-for QStyledItemDelegate (0x0x7f0b3d424680)
+ QObject (0x0x7f0b3d0b0840) 0
+ primary-for QAbstractItemDelegate (0x0x7f0b3d4246e8)
+
+Class QStyleFactory
+ size=1 align=1
+ base size=0 base align=1
+QStyleFactory (0x0x7f0b3d0b0a20) 0 empty
+
+Class QStylePainter
+ size=24 align=8
+ base size=24 base align=8
+QStylePainter (0x0x7f0b3d424750) 0
+ QPainter (0x0x7f0b3d0b0a80) 0
+
+Class QStylePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStylePlugin::QPrivateSignal (0x0x7f0b3d10b300) 0 empty
+
+Vtable for QStylePlugin
+QStylePlugin::_ZTV12QStylePlugin: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QStylePlugin)
+16 (int (*)(...))QStylePlugin::metaObject
+24 (int (*)(...))QStylePlugin::qt_metacast
+32 (int (*)(...))QStylePlugin::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))__cxa_pure_virtual
+
+Class QStylePlugin
+ size=16 align=8
+ base size=16 base align=8
+QStylePlugin (0x0x7f0b3d4247b8) 0
+ vptr=((& QStylePlugin::_ZTV12QStylePlugin) + 16)
+ QObject (0x0x7f0b3d10b2a0) 0
+ primary-for QStylePlugin (0x0x7f0b3d4247b8)
+
+Class QSystemTrayIcon::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSystemTrayIcon::QPrivateSignal (0x0x7f0b3d10b420) 0 empty
+
+Vtable for QSystemTrayIcon
+QSystemTrayIcon::_ZTV15QSystemTrayIcon: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSystemTrayIcon)
+16 (int (*)(...))QSystemTrayIcon::metaObject
+24 (int (*)(...))QSystemTrayIcon::qt_metacast
+32 (int (*)(...))QSystemTrayIcon::qt_metacall
+40 (int (*)(...))QSystemTrayIcon::~QSystemTrayIcon
+48 (int (*)(...))QSystemTrayIcon::~QSystemTrayIcon
+56 (int (*)(...))QSystemTrayIcon::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSystemTrayIcon
+ size=16 align=8
+ base size=16 base align=8
+QSystemTrayIcon (0x0x7f0b3d424820) 0
+ vptr=((& QSystemTrayIcon::_ZTV15QSystemTrayIcon) + 16)
+ QObject (0x0x7f0b3d10b3c0) 0
+ primary-for QSystemTrayIcon (0x0x7f0b3d424820)
+
+Class QTableView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableView::QPrivateSignal (0x0x7f0b3d10b720) 0 empty
+
+Vtable for QTableView
+QTableView::_ZTV10QTableView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTableView)
+16 (int (*)(...))QTableView::metaObject
+24 (int (*)(...))QTableView::qt_metacast
+32 (int (*)(...))QTableView::qt_metacall
+40 (int (*)(...))QTableView::~QTableView
+48 (int (*)(...))QTableView::~QTableView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTableView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTableView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QTableView::scrollContentsBy
+464 (int (*)(...))QTableView::viewportSizeHint
+472 (int (*)(...))QTableView::setModel
+480 (int (*)(...))QTableView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QTableView::visualRect
+504 (int (*)(...))QTableView::scrollTo
+512 (int (*)(...))QTableView::indexAt
+520 (int (*)(...))QTableView::sizeHintForRow
+528 (int (*)(...))QTableView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QTableView::setRootIndex
+560 (int (*)(...))QTableView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QTableView::selectionChanged
+608 (int (*)(...))QTableView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTableView::updateGeometries
+640 (int (*)(...))QTableView::verticalScrollbarAction
+648 (int (*)(...))QTableView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTableView::moveCursor
+704 (int (*)(...))QTableView::horizontalOffset
+712 (int (*)(...))QTableView::verticalOffset
+720 (int (*)(...))QTableView::isIndexHidden
+728 (int (*)(...))QTableView::setSelection
+736 (int (*)(...))QTableView::visualRegionForSelection
+744 (int (*)(...))QTableView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QTableView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI10QTableView)
+800 (int (*)(...))QTableView::_ZThn16_N10QTableViewD1Ev
+808 (int (*)(...))QTableView::_ZThn16_N10QTableViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTableView
+ size=40 align=8
+ base size=40 base align=8
+QTableView (0x0x7f0b3d424888) 0
+ vptr=((& QTableView::_ZTV10QTableView) + 16)
+ QAbstractItemView (0x0x7f0b3d4248f0) 0
+ primary-for QTableView (0x0x7f0b3d424888)
+ QAbstractScrollArea (0x0x7f0b3d424958) 0
+ primary-for QAbstractItemView (0x0x7f0b3d4248f0)
+ QFrame (0x0x7f0b3d4249c0) 0
+ primary-for QAbstractScrollArea (0x0x7f0b3d424958)
+ QWidget (0x0x7f0b3d423f50) 0
+ primary-for QFrame (0x0x7f0b3d4249c0)
+ QObject (0x0x7f0b3d10b660) 0
+ primary-for QWidget (0x0x7f0b3d423f50)
+ QPaintDevice (0x0x7f0b3d10b6c0) 16
+ vptr=((& QTableView::_ZTV10QTableView) + 800)
+
+Class QTableWidgetSelectionRange
+ size=16 align=4
+ base size=16 base align=4
+QTableWidgetSelectionRange (0x0x7f0b3d10b8a0) 0
+
+Vtable for QTableWidgetItem
+QTableWidgetItem::_ZTV16QTableWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QTableWidgetItem)
+16 (int (*)(...))QTableWidgetItem::~QTableWidgetItem
+24 (int (*)(...))QTableWidgetItem::~QTableWidgetItem
+32 (int (*)(...))QTableWidgetItem::clone
+40 (int (*)(...))QTableWidgetItem::data
+48 (int (*)(...))QTableWidgetItem::setData
+56 (int (*)(...))QTableWidgetItem::operator<
+64 (int (*)(...))QTableWidgetItem::read
+72 (int (*)(...))QTableWidgetItem::write
+
+Class QTableWidgetItem
+ size=64 align=8
+ base size=60 base align=8
+QTableWidgetItem (0x0x7f0b3d10bcc0) 0
+ vptr=((& QTableWidgetItem::_ZTV16QTableWidgetItem) + 16)
+
+Class QTableWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableWidget::QPrivateSignal (0x0x7f0b3d1eb000) 0 empty
+
+Vtable for QTableWidget
+QTableWidget::_ZTV12QTableWidget: 112 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTableWidget)
+16 (int (*)(...))QTableWidget::metaObject
+24 (int (*)(...))QTableWidget::qt_metacast
+32 (int (*)(...))QTableWidget::qt_metacall
+40 (int (*)(...))QTableWidget::~QTableWidget
+48 (int (*)(...))QTableWidget::~QTableWidget
+56 (int (*)(...))QTableWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTableView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QAbstractItemView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractItemView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTableView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QAbstractItemView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QTableWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QTableView::scrollContentsBy
+464 (int (*)(...))QTableView::viewportSizeHint
+472 (int (*)(...))QTableWidget::setModel
+480 (int (*)(...))QTableView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QTableView::visualRect
+504 (int (*)(...))QTableView::scrollTo
+512 (int (*)(...))QTableView::indexAt
+520 (int (*)(...))QTableView::sizeHintForRow
+528 (int (*)(...))QTableView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QAbstractItemView::reset
+552 (int (*)(...))QTableView::setRootIndex
+560 (int (*)(...))QTableView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QAbstractItemView::dataChanged
+584 (int (*)(...))QAbstractItemView::rowsInserted
+592 (int (*)(...))QAbstractItemView::rowsAboutToBeRemoved
+600 (int (*)(...))QTableView::selectionChanged
+608 (int (*)(...))QTableView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTableView::updateGeometries
+640 (int (*)(...))QTableView::verticalScrollbarAction
+648 (int (*)(...))QTableView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTableView::moveCursor
+704 (int (*)(...))QTableView::horizontalOffset
+712 (int (*)(...))QTableView::verticalOffset
+720 (int (*)(...))QTableView::isIndexHidden
+728 (int (*)(...))QTableView::setSelection
+736 (int (*)(...))QTableView::visualRegionForSelection
+744 (int (*)(...))QTableView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QTableView::initViewItemOption
+784 (int (*)(...))QTableWidget::mimeTypes
+792 (int (*)(...))QTableWidget::mimeData
+800 (int (*)(...))QTableWidget::dropMimeData
+808 (int (*)(...))QTableWidget::supportedDropActions
+816 (int (*)(...))-16
+824 (int (*)(...))(& _ZTI12QTableWidget)
+832 (int (*)(...))QTableWidget::_ZThn16_N12QTableWidgetD1Ev
+840 (int (*)(...))QTableWidget::_ZThn16_N12QTableWidgetD0Ev
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTableWidget
+ size=40 align=8
+ base size=40 base align=8
+QTableWidget (0x0x7f0b3d1702d8) 0
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 16)
+ QTableView (0x0x7f0b3d170340) 0
+ primary-for QTableWidget (0x0x7f0b3d1702d8)
+ QAbstractItemView (0x0x7f0b3d1703a8) 0
+ primary-for QTableView (0x0x7f0b3d170340)
+ QAbstractScrollArea (0x0x7f0b3d170410) 0
+ primary-for QAbstractItemView (0x0x7f0b3d1703a8)
+ QFrame (0x0x7f0b3d170478) 0
+ primary-for QAbstractScrollArea (0x0x7f0b3d170410)
+ QWidget (0x0x7f0b3d1551c0) 0
+ primary-for QFrame (0x0x7f0b3d170478)
+ QObject (0x0x7f0b3d16bf60) 0
+ primary-for QWidget (0x0x7f0b3d1551c0)
+ QPaintDevice (0x0x7f0b3d16b540) 16
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 832)
+
+Class QTextBrowser::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBrowser::QPrivateSignal (0x0x7f0b3d1eb3c0) 0 empty
+
+Vtable for QTextBrowser
+QTextBrowser::_ZTV12QTextBrowser: 79 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QTextBrowser)
+16 (int (*)(...))QTextBrowser::metaObject
+24 (int (*)(...))QTextBrowser::qt_metacast
+32 (int (*)(...))QTextBrowser::qt_metacall
+40 (int (*)(...))QTextBrowser::~QTextBrowser
+48 (int (*)(...))QTextBrowser::~QTextBrowser
+56 (int (*)(...))QTextBrowser::event
+64 (int (*)(...))QAbstractScrollArea::eventFilter
+72 (int (*)(...))QTextEdit::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTextBrowser::mousePressEvent
+176 (int (*)(...))QTextBrowser::mouseReleaseEvent
+184 (int (*)(...))QTextEdit::mouseDoubleClickEvent
+192 (int (*)(...))QTextBrowser::mouseMoveEvent
+200 (int (*)(...))QTextEdit::wheelEvent
+208 (int (*)(...))QTextBrowser::keyPressEvent
+216 (int (*)(...))QTextEdit::keyReleaseEvent
+224 (int (*)(...))QTextEdit::focusInEvent
+232 (int (*)(...))QTextBrowser::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTextBrowser::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QTextEdit::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QTextEdit::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QTextEdit::dragEnterEvent
+320 (int (*)(...))QTextEdit::dragMoveEvent
+328 (int (*)(...))QTextEdit::dragLeaveEvent
+336 (int (*)(...))QTextEdit::dropEvent
+344 (int (*)(...))QTextEdit::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTextEdit::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QTextEdit::inputMethodEvent
+416 (int (*)(...))QTextEdit::inputMethodQuery
+424 (int (*)(...))QTextBrowser::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractScrollArea::viewportEvent
+456 (int (*)(...))QTextEdit::scrollContentsBy
+464 (int (*)(...))QAbstractScrollArea::viewportSizeHint
+472 (int (*)(...))QTextBrowser::loadResource
+480 (int (*)(...))QTextEdit::createMimeDataFromSelection
+488 (int (*)(...))QTextEdit::canInsertFromMimeData
+496 (int (*)(...))QTextEdit::insertFromMimeData
+504 (int (*)(...))QTextEdit::doSetTextCursor
+512 (int (*)(...))QTextBrowser::backward
+520 (int (*)(...))QTextBrowser::forward
+528 (int (*)(...))QTextBrowser::home
+536 (int (*)(...))QTextBrowser::reload
+544 (int (*)(...))QTextBrowser::doSetSource
+552 (int (*)(...))-16
+560 (int (*)(...))(& _ZTI12QTextBrowser)
+568 (int (*)(...))QTextBrowser::_ZThn16_N12QTextBrowserD1Ev
+576 (int (*)(...))QTextBrowser::_ZThn16_N12QTextBrowserD0Ev
+584 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+592 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+600 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+608 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+616 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+624 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTextBrowser
+ size=40 align=8
+ base size=40 base align=8
+QTextBrowser (0x0x7f0b3d1704e0) 0
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 16)
+ QTextEdit (0x0x7f0b3d170548) 0
+ primary-for QTextBrowser (0x0x7f0b3d1704e0)
+ QAbstractScrollArea (0x0x7f0b3d1705b0) 0
+ primary-for QTextEdit (0x0x7f0b3d170548)
+ QFrame (0x0x7f0b3d170618) 0
+ primary-for QAbstractScrollArea (0x0x7f0b3d1705b0)
+ QWidget (0x0x7f0b3d155230) 0
+ primary-for QFrame (0x0x7f0b3d170618)
+ QObject (0x0x7f0b3d1eb300) 0
+ primary-for QWidget (0x0x7f0b3d155230)
+ QPaintDevice (0x0x7f0b3d1eb360) 16
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 568)
+
+Class QToolBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBar::QPrivateSignal (0x0x7f0b3d1eb600) 0 empty
+
+Vtable for QToolBar
+QToolBar::_ZTV8QToolBar: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QToolBar)
+16 (int (*)(...))QToolBar::metaObject
+24 (int (*)(...))QToolBar::qt_metacast
+32 (int (*)(...))QToolBar::qt_metacall
+40 (int (*)(...))QToolBar::~QToolBar
+48 (int (*)(...))QToolBar::~QToolBar
+56 (int (*)(...))QToolBar::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QToolBar::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QToolBar::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolBar::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QToolBar::initStyleOption
+440 (int (*)(...))-16
+448 (int (*)(...))(& _ZTI8QToolBar)
+456 (int (*)(...))QToolBar::_ZThn16_N8QToolBarD1Ev
+464 (int (*)(...))QToolBar::_ZThn16_N8QToolBarD0Ev
+472 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+480 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolBar
+ size=40 align=8
+ base size=40 base align=8
+QToolBar (0x0x7f0b3d170680) 0
+ vptr=((& QToolBar::_ZTV8QToolBar) + 16)
+ QWidget (0x0x7f0b3d1552a0) 0
+ primary-for QToolBar (0x0x7f0b3d170680)
+ QObject (0x0x7f0b3d1eb540) 0
+ primary-for QWidget (0x0x7f0b3d1552a0)
+ QPaintDevice (0x0x7f0b3d1eb5a0) 16
+ vptr=((& QToolBar::_ZTV8QToolBar) + 456)
+
+Class QToolBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBox::QPrivateSignal (0x0x7f0b3d1eba80) 0 empty
+
+Vtable for QToolBox
+QToolBox::_ZTV8QToolBox: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QToolBox)
+16 (int (*)(...))QToolBox::metaObject
+24 (int (*)(...))QToolBox::qt_metacast
+32 (int (*)(...))QToolBox::qt_metacall
+40 (int (*)(...))QToolBox::~QToolBox
+48 (int (*)(...))QToolBox::~QToolBox
+56 (int (*)(...))QToolBox::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QFrame::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QFrame::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QToolBox::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolBox::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QToolBox::itemInserted
+448 (int (*)(...))QToolBox::itemRemoved
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI8QToolBox)
+472 (int (*)(...))QToolBox::_ZThn16_N8QToolBoxD1Ev
+480 (int (*)(...))QToolBox::_ZThn16_N8QToolBoxD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolBox
+ size=40 align=8
+ base size=40 base align=8
+QToolBox (0x0x7f0b3d1706e8) 0
+ vptr=((& QToolBox::_ZTV8QToolBox) + 16)
+ QFrame (0x0x7f0b3d170750) 0
+ primary-for QToolBox (0x0x7f0b3d1706e8)
+ QWidget (0x0x7f0b3d155310) 0
+ primary-for QFrame (0x0x7f0b3d170750)
+ QObject (0x0x7f0b3d1eb9c0) 0
+ primary-for QWidget (0x0x7f0b3d155310)
+ QPaintDevice (0x0x7f0b3d1eba20) 16
+ vptr=((& QToolBox::_ZTV8QToolBox) + 472)
+
+Class QToolButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolButton::QPrivateSignal (0x0x7f0b3d1ebde0) 0 empty
+
+Vtable for QToolButton
+QToolButton::_ZTV11QToolButton: 68 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QToolButton)
+16 (int (*)(...))QToolButton::metaObject
+24 (int (*)(...))QToolButton::qt_metacast
+32 (int (*)(...))QToolButton::qt_metacall
+40 (int (*)(...))QToolButton::~QToolButton
+48 (int (*)(...))QToolButton::~QToolButton
+56 (int (*)(...))QToolButton::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QToolButton::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QToolButton::sizeHint
+136 (int (*)(...))QToolButton::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QToolButton::mousePressEvent
+176 (int (*)(...))QToolButton::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QAbstractButton::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QAbstractButton::keyPressEvent
+216 (int (*)(...))QAbstractButton::keyReleaseEvent
+224 (int (*)(...))QAbstractButton::focusInEvent
+232 (int (*)(...))QAbstractButton::focusOutEvent
+240 (int (*)(...))QToolButton::enterEvent
+248 (int (*)(...))QToolButton::leaveEvent
+256 (int (*)(...))QToolButton::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QToolButton::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QToolButton::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QToolButton::hitButton
+440 (int (*)(...))QToolButton::checkStateSet
+448 (int (*)(...))QToolButton::nextCheckState
+456 (int (*)(...))QToolButton::initStyleOption
+464 (int (*)(...))-16
+472 (int (*)(...))(& _ZTI11QToolButton)
+480 (int (*)(...))QToolButton::_ZThn16_N11QToolButtonD1Ev
+488 (int (*)(...))QToolButton::_ZThn16_N11QToolButtonD0Ev
+496 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QToolButton
+ size=40 align=8
+ base size=40 base align=8
+QToolButton (0x0x7f0b3d1707b8) 0
+ vptr=((& QToolButton::_ZTV11QToolButton) + 16)
+ QAbstractButton (0x0x7f0b3d170820) 0
+ primary-for QToolButton (0x0x7f0b3d1707b8)
+ QWidget (0x0x7f0b3d155380) 0
+ primary-for QAbstractButton (0x0x7f0b3d170820)
+ QObject (0x0x7f0b3d1ebd20) 0
+ primary-for QWidget (0x0x7f0b3d155380)
+ QPaintDevice (0x0x7f0b3d1ebd80) 16
+ vptr=((& QToolButton::_ZTV11QToolButton) + 480)
+
+Class QToolTip
+ size=1 align=1
+ base size=0 base align=1
+QToolTip (0x0x7f0b3ce7e060) 0 empty
+
+Class QTreeView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeView::QPrivateSignal (0x0x7f0b3ce7e1e0) 0 empty
+
+Vtable for QTreeView
+QTreeView::_ZTV9QTreeView: 110 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QTreeView)
+16 (int (*)(...))QTreeView::metaObject
+24 (int (*)(...))QTreeView::qt_metacast
+32 (int (*)(...))QTreeView::qt_metacall
+40 (int (*)(...))QTreeView::~QTreeView
+48 (int (*)(...))QTreeView::~QTreeView
+56 (int (*)(...))QAbstractItemView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QAbstractItemView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeView::setModel
+480 (int (*)(...))QTreeView::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))-16
+808 (int (*)(...))(& _ZTI9QTreeView)
+816 (int (*)(...))QTreeView::_ZThn16_N9QTreeViewD1Ev
+824 (int (*)(...))QTreeView::_ZThn16_N9QTreeViewD0Ev
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTreeView
+ size=40 align=8
+ base size=40 base align=8
+QTreeView (0x0x7f0b3d170888) 0
+ vptr=((& QTreeView::_ZTV9QTreeView) + 16)
+ QAbstractItemView (0x0x7f0b3d1708f0) 0
+ primary-for QTreeView (0x0x7f0b3d170888)
+ QAbstractScrollArea (0x0x7f0b3d170958) 0
+ primary-for QAbstractItemView (0x0x7f0b3d1708f0)
+ QFrame (0x0x7f0b3d1709c0) 0
+ primary-for QAbstractScrollArea (0x0x7f0b3d170958)
+ QWidget (0x0x7f0b3d155540) 0
+ primary-for QFrame (0x0x7f0b3d1709c0)
+ QObject (0x0x7f0b3ce7e120) 0
+ primary-for QWidget (0x0x7f0b3d155540)
+ QPaintDevice (0x0x7f0b3ce7e180) 16
+ vptr=((& QTreeView::_ZTV9QTreeView) + 816)
+
+Class QTreeWidgetItemIterator
+ size=24 align=8
+ base size=20 base align=8
+QTreeWidgetItemIterator (0x0x7f0b3ce7e360) 0
+
+Vtable for QTreeWidgetItem
+QTreeWidgetItem::_ZTV15QTreeWidgetItem: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QTreeWidgetItem)
+16 (int (*)(...))QTreeWidgetItem::~QTreeWidgetItem
+24 (int (*)(...))QTreeWidgetItem::~QTreeWidgetItem
+32 (int (*)(...))QTreeWidgetItem::clone
+40 (int (*)(...))QTreeWidgetItem::data
+48 (int (*)(...))QTreeWidgetItem::setData
+56 (int (*)(...))QTreeWidgetItem::operator<
+64 (int (*)(...))QTreeWidgetItem::read
+72 (int (*)(...))QTreeWidgetItem::write
+
+Class QTreeWidgetItem
+ size=96 align=8
+ base size=92 base align=8
+QTreeWidgetItem (0x0x7f0b3ce7eae0) 0
+ vptr=((& QTreeWidgetItem::_ZTV15QTreeWidgetItem) + 16)
+
+Class QTreeWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeWidget::QPrivateSignal (0x0x7f0b3d006900) 0 empty
+
+Vtable for QTreeWidget
+QTreeWidget::_ZTV11QTreeWidget: 114 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QTreeWidget)
+16 (int (*)(...))QTreeWidget::metaObject
+24 (int (*)(...))QTreeWidget::qt_metacast
+32 (int (*)(...))QTreeWidget::qt_metacall
+40 (int (*)(...))QTreeWidget::~QTreeWidget
+48 (int (*)(...))QTreeWidget::~QTreeWidget
+56 (int (*)(...))QTreeWidget::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QTreeView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QTreeView::mousePressEvent
+176 (int (*)(...))QTreeView::mouseReleaseEvent
+184 (int (*)(...))QTreeView::mouseDoubleClickEvent
+192 (int (*)(...))QTreeView::mouseMoveEvent
+200 (int (*)(...))QAbstractScrollArea::wheelEvent
+208 (int (*)(...))QTreeView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QTreeView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QAbstractItemView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QTreeView::dragMoveEvent
+328 (int (*)(...))QAbstractItemView::dragLeaveEvent
+336 (int (*)(...))QTreeWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QTreeView::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QTreeView::viewportEvent
+456 (int (*)(...))QTreeView::scrollContentsBy
+464 (int (*)(...))QTreeView::viewportSizeHint
+472 (int (*)(...))QTreeWidget::setModel
+480 (int (*)(...))QTreeWidget::setSelectionModel
+488 (int (*)(...))QTreeView::keyboardSearch
+496 (int (*)(...))QTreeView::visualRect
+504 (int (*)(...))QTreeView::scrollTo
+512 (int (*)(...))QTreeView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QTreeView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QTreeView::reset
+552 (int (*)(...))QTreeView::setRootIndex
+560 (int (*)(...))QTreeView::doItemsLayout
+568 (int (*)(...))QTreeView::selectAll
+576 (int (*)(...))QTreeView::dataChanged
+584 (int (*)(...))QTreeView::rowsInserted
+592 (int (*)(...))QTreeView::rowsAboutToBeRemoved
+600 (int (*)(...))QTreeView::selectionChanged
+608 (int (*)(...))QTreeView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QTreeView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QTreeView::horizontalScrollbarAction
+656 (int (*)(...))QTreeView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QTreeView::moveCursor
+704 (int (*)(...))QTreeView::horizontalOffset
+712 (int (*)(...))QTreeView::verticalOffset
+720 (int (*)(...))QTreeView::isIndexHidden
+728 (int (*)(...))QTreeView::setSelection
+736 (int (*)(...))QTreeView::visualRegionForSelection
+744 (int (*)(...))QTreeView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QAbstractItemView::startDrag
+776 (int (*)(...))QAbstractItemView::initViewItemOption
+784 (int (*)(...))QTreeView::drawRow
+792 (int (*)(...))QTreeView::drawBranches
+800 (int (*)(...))QTreeWidget::mimeTypes
+808 (int (*)(...))QTreeWidget::mimeData
+816 (int (*)(...))QTreeWidget::dropMimeData
+824 (int (*)(...))QTreeWidget::supportedDropActions
+832 (int (*)(...))-16
+840 (int (*)(...))(& _ZTI11QTreeWidget)
+848 (int (*)(...))QTreeWidget::_ZThn16_N11QTreeWidgetD1Ev
+856 (int (*)(...))QTreeWidget::_ZThn16_N11QTreeWidgetD0Ev
+864 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+872 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+880 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+888 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+896 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+904 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QTreeWidget
+ size=40 align=8
+ base size=40 base align=8
+QTreeWidget (0x0x7f0b3cf3dd00) 0
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 16)
+ QTreeView (0x0x7f0b3cf3dd68) 0
+ primary-for QTreeWidget (0x0x7f0b3cf3dd00)
+ QAbstractItemView (0x0x7f0b3cf3ddd0) 0
+ primary-for QTreeView (0x0x7f0b3cf3dd68)
+ QAbstractScrollArea (0x0x7f0b3cf3de38) 0
+ primary-for QAbstractItemView (0x0x7f0b3cf3ddd0)
+ QFrame (0x0x7f0b3cf3dea0) 0
+ primary-for QAbstractScrollArea (0x0x7f0b3cf3de38)
+ QWidget (0x0x7f0b3cf1e310) 0
+ primary-for QFrame (0x0x7f0b3cf3dea0)
+ QObject (0x0x7f0b3d006840) 0
+ primary-for QWidget (0x0x7f0b3cf1e310)
+ QPaintDevice (0x0x7f0b3d0068a0) 16
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 848)
+
+Class QUndoView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoView::QPrivateSignal (0x0x7f0b3d006d20) 0 empty
+
+Vtable for QUndoView
+QUndoView::_ZTV9QUndoView: 108 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QUndoView)
+16 (int (*)(...))QUndoView::metaObject
+24 (int (*)(...))QUndoView::qt_metacast
+32 (int (*)(...))QUndoView::qt_metacall
+40 (int (*)(...))QUndoView::~QUndoView
+48 (int (*)(...))QUndoView::~QUndoView
+56 (int (*)(...))QListView::event
+64 (int (*)(...))QAbstractItemView::eventFilter
+72 (int (*)(...))QListView::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QAbstractScrollArea::sizeHint
+136 (int (*)(...))QAbstractScrollArea::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QAbstractItemView::mousePressEvent
+176 (int (*)(...))QListView::mouseReleaseEvent
+184 (int (*)(...))QAbstractItemView::mouseDoubleClickEvent
+192 (int (*)(...))QListView::mouseMoveEvent
+200 (int (*)(...))QListView::wheelEvent
+208 (int (*)(...))QAbstractItemView::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QAbstractItemView::focusInEvent
+232 (int (*)(...))QAbstractItemView::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QListView::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QListView::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QAbstractScrollArea::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QAbstractItemView::dragEnterEvent
+320 (int (*)(...))QListView::dragMoveEvent
+328 (int (*)(...))QListView::dragLeaveEvent
+336 (int (*)(...))QListView::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QFrame::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QAbstractItemView::inputMethodEvent
+416 (int (*)(...))QAbstractItemView::inputMethodQuery
+424 (int (*)(...))QAbstractItemView::focusNextPrevChild
+432 (int (*)(...))QFrame::initStyleOption
+440 (int (*)(...))QAbstractScrollArea::setupViewport
+448 (int (*)(...))QAbstractItemView::viewportEvent
+456 (int (*)(...))QListView::scrollContentsBy
+464 (int (*)(...))QListView::viewportSizeHint
+472 (int (*)(...))QAbstractItemView::setModel
+480 (int (*)(...))QAbstractItemView::setSelectionModel
+488 (int (*)(...))QAbstractItemView::keyboardSearch
+496 (int (*)(...))QListView::visualRect
+504 (int (*)(...))QListView::scrollTo
+512 (int (*)(...))QListView::indexAt
+520 (int (*)(...))QAbstractItemView::sizeHintForRow
+528 (int (*)(...))QAbstractItemView::sizeHintForColumn
+536 (int (*)(...))QAbstractItemView::itemDelegateForIndex
+544 (int (*)(...))QListView::reset
+552 (int (*)(...))QListView::setRootIndex
+560 (int (*)(...))QListView::doItemsLayout
+568 (int (*)(...))QAbstractItemView::selectAll
+576 (int (*)(...))QListView::dataChanged
+584 (int (*)(...))QListView::rowsInserted
+592 (int (*)(...))QListView::rowsAboutToBeRemoved
+600 (int (*)(...))QListView::selectionChanged
+608 (int (*)(...))QListView::currentChanged
+616 (int (*)(...))QAbstractItemView::updateEditorData
+624 (int (*)(...))QAbstractItemView::updateEditorGeometries
+632 (int (*)(...))QListView::updateGeometries
+640 (int (*)(...))QAbstractItemView::verticalScrollbarAction
+648 (int (*)(...))QAbstractItemView::horizontalScrollbarAction
+656 (int (*)(...))QAbstractItemView::verticalScrollbarValueChanged
+664 (int (*)(...))QAbstractItemView::horizontalScrollbarValueChanged
+672 (int (*)(...))QAbstractItemView::closeEditor
+680 (int (*)(...))QAbstractItemView::commitData
+688 (int (*)(...))QAbstractItemView::editorDestroyed
+696 (int (*)(...))QListView::moveCursor
+704 (int (*)(...))QListView::horizontalOffset
+712 (int (*)(...))QListView::verticalOffset
+720 (int (*)(...))QListView::isIndexHidden
+728 (int (*)(...))QListView::setSelection
+736 (int (*)(...))QListView::visualRegionForSelection
+744 (int (*)(...))QListView::selectedIndexes
+752 (int (*)(...))QAbstractItemView::edit
+760 (int (*)(...))QAbstractItemView::selectionCommand
+768 (int (*)(...))QListView::startDrag
+776 (int (*)(...))QListView::initViewItemOption
+784 (int (*)(...))-16
+792 (int (*)(...))(& _ZTI9QUndoView)
+800 (int (*)(...))QUndoView::_ZThn16_N9QUndoViewD1Ev
+808 (int (*)(...))QUndoView::_ZThn16_N9QUndoViewD0Ev
+816 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+824 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+832 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+840 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+848 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+856 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QUndoView
+ size=40 align=8
+ base size=40 base align=8
+QUndoView (0x0x7f0b3cf3df08) 0
+ vptr=((& QUndoView::_ZTV9QUndoView) + 16)
+ QListView (0x0x7f0b3cf3df70) 0
+ primary-for QUndoView (0x0x7f0b3cf3df08)
+ QAbstractItemView (0x0x7f0b3cf3d410) 0
+ primary-for QListView (0x0x7f0b3cf3df70)
+ QAbstractScrollArea (0x0x7f0b3cf3dc98) 0
+ primary-for QAbstractItemView (0x0x7f0b3cf3d410)
+ QFrame (0x0x7f0b3cc67000) 0
+ primary-for QAbstractScrollArea (0x0x7f0b3cf3dc98)
+ QWidget (0x0x7f0b3cf1e380) 0
+ primary-for QFrame (0x0x7f0b3cc67000)
+ QObject (0x0x7f0b3d006c60) 0
+ primary-for QWidget (0x0x7f0b3cf1e380)
+ QPaintDevice (0x0x7f0b3d006cc0) 16
+ vptr=((& QUndoView::_ZTV9QUndoView) + 800)
+
+Class QWhatsThis
+ size=1 align=1
+ base size=0 base align=1
+QWhatsThis (0x0x7f0b3d006ea0) 0 empty
+
+Class QWidgetAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidgetAction::QPrivateSignal (0x0x7f0b3d006f60) 0 empty
+
+Vtable for QWidgetAction
+QWidgetAction::_ZTV13QWidgetAction: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QWidgetAction)
+16 (int (*)(...))QWidgetAction::metaObject
+24 (int (*)(...))QWidgetAction::qt_metacast
+32 (int (*)(...))QWidgetAction::qt_metacall
+40 (int (*)(...))QWidgetAction::~QWidgetAction
+48 (int (*)(...))QWidgetAction::~QWidgetAction
+56 (int (*)(...))QWidgetAction::event
+64 (int (*)(...))QWidgetAction::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidgetAction::createWidget
+120 (int (*)(...))QWidgetAction::deleteWidget
+
+Class QWidgetAction
+ size=16 align=8
+ base size=16 base align=8
+QWidgetAction (0x0x7f0b3cc67068) 0
+ vptr=((& QWidgetAction::_ZTV13QWidgetAction) + 16)
+ QAction (0x0x7f0b3cc670d0) 0
+ primary-for QWidgetAction (0x0x7f0b3cc67068)
+ QObject (0x0x7f0b3d006f00) 0
+ primary-for QAction (0x0x7f0b3cc670d0)
+
+Class QWizard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizard::QPrivateSignal (0x0x7f0b3cc831e0) 0 empty
+
+Vtable for QWizard
+QWizard::_ZTV7QWizard: 73 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QWizard)
+16 (int (*)(...))QWizard::metaObject
+24 (int (*)(...))QWizard::qt_metacast
+32 (int (*)(...))QWizard::qt_metacall
+40 (int (*)(...))QWizard::~QWizard
+48 (int (*)(...))QWizard::~QWizard
+56 (int (*)(...))QWizard::event
+64 (int (*)(...))QDialog::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWizard::setVisible
+128 (int (*)(...))QWizard::sizeHint
+136 (int (*)(...))QDialog::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QDialog::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWizard::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWizard::resizeEvent
+280 (int (*)(...))QDialog::closeEvent
+288 (int (*)(...))QDialog::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QDialog::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QDialog::open
+440 (int (*)(...))QDialog::exec
+448 (int (*)(...))QWizard::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))QWizard::validateCurrentPage
+480 (int (*)(...))QWizard::nextId
+488 (int (*)(...))QWizard::initializePage
+496 (int (*)(...))QWizard::cleanupPage
+504 (int (*)(...))-16
+512 (int (*)(...))(& _ZTI7QWizard)
+520 (int (*)(...))QWizard::_ZThn16_N7QWizardD1Ev
+528 (int (*)(...))QWizard::_ZThn16_N7QWizardD0Ev
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+552 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+560 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+568 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+576 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWizard
+ size=40 align=8
+ base size=40 base align=8
+QWizard (0x0x7f0b3cc67138) 0
+ vptr=((& QWizard::_ZTV7QWizard) + 16)
+ QDialog (0x0x7f0b3cc671a0) 0
+ primary-for QWizard (0x0x7f0b3cc67138)
+ QWidget (0x0x7f0b3cf1e3f0) 0
+ primary-for QDialog (0x0x7f0b3cc671a0)
+ QObject (0x0x7f0b3cc83120) 0
+ primary-for QWidget (0x0x7f0b3cf1e3f0)
+ QPaintDevice (0x0x7f0b3cc83180) 16
+ vptr=((& QWizard::_ZTV7QWizard) + 520)
+
+Class QWizardPage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizardPage::QPrivateSignal (0x0x7f0b3cc83a20) 0 empty
+
+Vtable for QWizardPage
+QWizardPage::_ZTV11QWizardPage: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QWizardPage)
+16 (int (*)(...))QWizardPage::metaObject
+24 (int (*)(...))QWizardPage::qt_metacast
+32 (int (*)(...))QWizardPage::qt_metacall
+40 (int (*)(...))QWizardPage::~QWizardPage
+48 (int (*)(...))QWizardPage::~QWizardPage
+56 (int (*)(...))QWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QWizardPage::initializePage
+440 (int (*)(...))QWizardPage::cleanupPage
+448 (int (*)(...))QWizardPage::validatePage
+456 (int (*)(...))QWizardPage::isComplete
+464 (int (*)(...))QWizardPage::nextId
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI11QWizardPage)
+488 (int (*)(...))QWizardPage::_ZThn16_N11QWizardPageD1Ev
+496 (int (*)(...))QWizardPage::_ZThn16_N11QWizardPageD0Ev
+504 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11paintEngineEv
+520 (int (*)(...))QWidget::_ZThn16_NK7QWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+536 (int (*)(...))QWidget::_ZThn16_NK7QWidget10redirectedEP6QPoint
+544 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QWizardPage
+ size=40 align=8
+ base size=40 base align=8
+QWizardPage (0x0x7f0b3cc67340) 0
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 16)
+ QWidget (0x0x7f0b3cc8c5b0) 0
+ primary-for QWizardPage (0x0x7f0b3cc67340)
+ QObject (0x0x7f0b3cc83960) 0
+ primary-for QWidget (0x0x7f0b3cc8c5b0)
+ QPaintDevice (0x0x7f0b3cc839c0) 16
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 488)
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7f0b3cc83ba0) 0
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7f0b3cd50120) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7f0b3ca72480) 0 empty
+
+Vtable for QOpenGLDebugLogger
+QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QOpenGLDebugLogger)
+16 (int (*)(...))QOpenGLDebugLogger::metaObject
+24 (int (*)(...))QOpenGLDebugLogger::qt_metacast
+32 (int (*)(...))QOpenGLDebugLogger::qt_metacall
+40 (int (*)(...))QOpenGLDebugLogger::~QOpenGLDebugLogger
+48 (int (*)(...))QOpenGLDebugLogger::~QOpenGLDebugLogger
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLDebugLogger
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLDebugLogger (0x0x7f0b3cdd68f0) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16)
+ QObject (0x0x7f0b3ca72420) 0
+ primary-for QOpenGLDebugLogger (0x0x7f0b3cdd68f0)
+
+Vtable for QOpenGLFramebufferObject
+QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QOpenGLFramebufferObject)
+16 (int (*)(...))QOpenGLFramebufferObject::~QOpenGLFramebufferObject
+24 (int (*)(...))QOpenGLFramebufferObject::~QOpenGLFramebufferObject
+
+Class QOpenGLFramebufferObject
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLFramebufferObject (0x0x7f0b3ca72ba0) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7f0b3ca72e40) 0
+
+Vtable for QOpenGLPaintDevice
+QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QOpenGLPaintDevice)
+16 (int (*)(...))QOpenGLPaintDevice::~QOpenGLPaintDevice
+24 (int (*)(...))QOpenGLPaintDevice::~QOpenGLPaintDevice
+32 (int (*)(...))QOpenGLPaintDevice::devType
+40 (int (*)(...))QOpenGLPaintDevice::paintEngine
+48 (int (*)(...))QOpenGLPaintDevice::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QOpenGLPaintDevice::ensureActiveTarget
+
+Class QOpenGLPaintDevice
+ size=24 align=8
+ base size=24 base align=8
+QOpenGLPaintDevice (0x0x7f0b3cdd69c0) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16)
+ QPaintDevice (0x0x7f0b3ca72ea0) 0
+ primary-for QOpenGLPaintDevice (0x0x7f0b3cdd69c0)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7f0b3cb2c120) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7f0b3cb687e0) 0 empty
+
+Vtable for QOpenGLShader
+QOpenGLShader::_ZTV13QOpenGLShader: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QOpenGLShader)
+16 (int (*)(...))QOpenGLShader::metaObject
+24 (int (*)(...))QOpenGLShader::qt_metacast
+32 (int (*)(...))QOpenGLShader::qt_metacall
+40 (int (*)(...))QOpenGLShader::~QOpenGLShader
+48 (int (*)(...))QOpenGLShader::~QOpenGLShader
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLShader
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLShader (0x0x7f0b3cb713a8) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16)
+ QObject (0x0x7f0b3cb68780) 0
+ primary-for QOpenGLShader (0x0x7f0b3cb713a8)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7f0b3cb68d80) 0 empty
+
+Vtable for QOpenGLShaderProgram
+QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QOpenGLShaderProgram)
+16 (int (*)(...))QOpenGLShaderProgram::metaObject
+24 (int (*)(...))QOpenGLShaderProgram::qt_metacast
+32 (int (*)(...))QOpenGLShaderProgram::qt_metacall
+40 (int (*)(...))QOpenGLShaderProgram::~QOpenGLShaderProgram
+48 (int (*)(...))QOpenGLShaderProgram::~QOpenGLShaderProgram
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QOpenGLShaderProgram::link
+
+Class QOpenGLShaderProgram
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLShaderProgram (0x0x7f0b3cb71548) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16)
+ QObject (0x0x7f0b3cb68d20) 0
+ primary-for QOpenGLShaderProgram (0x0x7f0b3cb71548)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7f0b3cb68f00) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7f0b3c8ca120) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7f0b3c8ca360) 0 empty
+
+Vtable for QOpenGLTimerQuery
+QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QOpenGLTimerQuery)
+16 (int (*)(...))QOpenGLTimerQuery::metaObject
+24 (int (*)(...))QOpenGLTimerQuery::qt_metacast
+32 (int (*)(...))QOpenGLTimerQuery::qt_metacall
+40 (int (*)(...))QOpenGLTimerQuery::~QOpenGLTimerQuery
+48 (int (*)(...))QOpenGLTimerQuery::~QOpenGLTimerQuery
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLTimerQuery
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLTimerQuery (0x0x7f0b3cb716e8) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16)
+ QObject (0x0x7f0b3c8ca300) 0
+ primary-for QOpenGLTimerQuery (0x0x7f0b3cb716e8)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7f0b3c8ca540) 0 empty
+
+Vtable for QOpenGLTimeMonitor
+QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QOpenGLTimeMonitor)
+16 (int (*)(...))QOpenGLTimeMonitor::metaObject
+24 (int (*)(...))QOpenGLTimeMonitor::qt_metacast
+32 (int (*)(...))QOpenGLTimeMonitor::qt_metacall
+40 (int (*)(...))QOpenGLTimeMonitor::~QOpenGLTimeMonitor
+48 (int (*)(...))QOpenGLTimeMonitor::~QOpenGLTimeMonitor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLTimeMonitor
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLTimeMonitor (0x0x7f0b3cb71750) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16)
+ QObject (0x0x7f0b3c8ca4e0) 0
+ primary-for QOpenGLTimeMonitor (0x0x7f0b3cb71750)
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7f0b3c8ca6c0) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7f0b3c9bb720) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7f0b3c9bb900) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7f0b3c9bb960) 0
+
+Vtable for QAbstractOpenGLFunctions
+QAbstractOpenGLFunctions::_ZTV24QAbstractOpenGLFunctions: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractOpenGLFunctions)
+16 (int (*)(...))QAbstractOpenGLFunctions::~QAbstractOpenGLFunctions
+24 (int (*)(...))QAbstractOpenGLFunctions::~QAbstractOpenGLFunctions
+32 (int (*)(...))QAbstractOpenGLFunctions::initializeOpenGLFunctions
+
+Class QAbstractOpenGLFunctions
+ size=16 align=8
+ base size=16 base align=8
+QAbstractOpenGLFunctions (0x0x7f0b3c9bbb40) 0
+ vptr=((& QAbstractOpenGLFunctions::_ZTV24QAbstractOpenGLFunctions) + 16)
+
+Class QOpenGLFunctions_1_0_CoreBackend::Functions
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_1_0_CoreBackend::Functions (0x0x7f0b3c9bbd20) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7f0b3c9e4000) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c9bbcc0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7f0b3c9f80c0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7f0b3c9e4068) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c9f8060) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7f0b3c9f8420) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7f0b3c9e40d0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c9f83c0) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7f0b3c9f8780) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7f0b3c9e4138) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c9f8720) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7f0b3c9f8ae0) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7f0b3c9e41a0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c9f8a80) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7f0b3c9f8e40) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7f0b3c9e4208) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c9f8de0) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7f0b3ca251e0) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7f0b3c9e4270) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3ca25180) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7f0b3ca25540) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7f0b3c9e42d8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3ca254e0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7f0b3ca258a0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7f0b3c9e4340) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3ca25840) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7f0b3ca25c00) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7f0b3c9e43a8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3ca25ba0) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7f0b3ca25f60) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7f0b3c9e4410) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3ca25f00) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7f0b3c672300) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7f0b3c9e4478) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c6722a0) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7f0b3c672660) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7f0b3c9e44e0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c672600) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7f0b3c6729c0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7f0b3c9e4548) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c672960) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7f0b3c672d20) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7f0b3c9e45b0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c672cc0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7f0b3c6c00c0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7f0b3c9e4618) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c6c0060) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7f0b3c6c0420) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7f0b3c9e4680) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c6c03c0) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7f0b3c6c0780) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7f0b3c9e46e8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c6c0720) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7f0b3c6c0ae0) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7f0b3c9e4750) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c6c0a80) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7f0b3c6c0e40) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7f0b3c9e47b8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c6c0de0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7f0b3c74c1e0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7f0b3c9e4820) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c74c180) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7f0b3c74c540) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7f0b3c9e4888) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c74c4e0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7f0b3c74c8a0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7f0b3c9e48f0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c74c840) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7f0b3c74cc00) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7f0b3c9e4958) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c74cba0) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7f0b3c74cf60) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7f0b3c9e49c0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c74cf00) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7f0b3c78a300) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7f0b3c9e4a28) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c78a2a0) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7f0b3c78a660) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7f0b3c9e4a90) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f0b3c78a600) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7f0b3c78a960) 0
+
+Class QOpenGLVersionFunctionsFactory
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVersionFunctionsFactory (0x0x7f0b3c78aae0) 0 empty
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7f0b3c78ac00) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7f0b3c78ac60) 0
+
+Vtable for QOpenGLVertexArrayObject
+QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QOpenGLVertexArrayObject)
+16 (int (*)(...))QOpenGLVertexArrayObject::metaObject
+24 (int (*)(...))QOpenGLVertexArrayObject::qt_metacast
+32 (int (*)(...))QOpenGLVertexArrayObject::qt_metacall
+40 (int (*)(...))QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject
+48 (int (*)(...))QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QOpenGLVertexArrayObject
+ size=16 align=8
+ base size=16 base align=8
+QOpenGLVertexArrayObject (0x0x7f0b3c9e4af8) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16)
+ QObject (0x0x7f0b3c78aba0) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7f0b3c9e4af8)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7f0b3c7c6300) 0 empty
+
+Vtable for QOpenGLWindow
+QOpenGLWindow::_ZTV13QOpenGLWindow: 65 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QOpenGLWindow)
+16 (int (*)(...))QOpenGLWindow::metaObject
+24 (int (*)(...))QOpenGLWindow::qt_metacast
+32 (int (*)(...))QOpenGLWindow::qt_metacall
+40 (int (*)(...))QOpenGLWindow::~QOpenGLWindow
+48 (int (*)(...))QOpenGLWindow::~QOpenGLWindow
+56 (int (*)(...))QPaintDeviceWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWindow::surfaceType
+120 (int (*)(...))QWindow::format
+128 (int (*)(...))QWindow::size
+136 (int (*)(...))QWindow::accessibleRoot
+144 (int (*)(...))QWindow::focusObject
+152 (int (*)(...))QPaintDeviceWindow::exposeEvent
+160 (int (*)(...))QOpenGLWindow::resizeEvent
+168 (int (*)(...))QOpenGLWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QWindow::focusInEvent
+192 (int (*)(...))QWindow::focusOutEvent
+200 (int (*)(...))QWindow::showEvent
+208 (int (*)(...))QWindow::hideEvent
+216 (int (*)(...))QWindow::closeEvent
+224 (int (*)(...))QWindow::keyPressEvent
+232 (int (*)(...))QWindow::keyReleaseEvent
+240 (int (*)(...))QWindow::mousePressEvent
+248 (int (*)(...))QWindow::mouseReleaseEvent
+256 (int (*)(...))QWindow::mouseDoubleClickEvent
+264 (int (*)(...))QWindow::mouseMoveEvent
+272 (int (*)(...))QWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))QOpenGLWindow::metric
+320 (int (*)(...))QPaintDeviceWindow::paintEngine
+328 (int (*)(...))QOpenGLWindow::initializeGL
+336 (int (*)(...))QOpenGLWindow::resizeGL
+344 (int (*)(...))QOpenGLWindow::paintGL
+352 (int (*)(...))QOpenGLWindow::paintUnderGL
+360 (int (*)(...))QOpenGLWindow::paintOverGL
+368 (int (*)(...))QOpenGLWindow::redirected
+376 (int (*)(...))-16
+384 (int (*)(...))(& _ZTI13QOpenGLWindow)
+392 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD1Ev
+400 (int (*)(...))QOpenGLWindow::_ZThn16_N13QOpenGLWindowD0Ev
+408 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+416 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+424 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+432 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+440 (int (*)(...))-40
+448 (int (*)(...))(& _ZTI13QOpenGLWindow)
+456 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD1Ev
+464 (int (*)(...))QOpenGLWindow::_ZThn40_N13QOpenGLWindowD0Ev
+472 (int (*)(...))QPaintDevice::devType
+480 (int (*)(...))QPaintDeviceWindow::_ZThn40_NK18QPaintDeviceWindow11paintEngineEv
+488 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow6metricEN12QPaintDevice17PaintDeviceMetricE
+496 (int (*)(...))QPaintDevice::initPainter
+504 (int (*)(...))QOpenGLWindow::_ZThn40_NK13QOpenGLWindow10redirectedEP6QPoint
+512 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QOpenGLWindow
+ size=56 align=8
+ base size=50 base align=8
+QOpenGLWindow (0x0x7f0b3c9e4bc8) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16)
+ QPaintDeviceWindow (0x0x7f0b3c9d6bd0) 0
+ primary-for QOpenGLWindow (0x0x7f0b3c9e4bc8)
+ QWindow (0x0x7f0b3c9d6c40) 0
+ primary-for QPaintDeviceWindow (0x0x7f0b3c9d6bd0)
+ QObject (0x0x7f0b3c7c61e0) 0
+ primary-for QWindow (0x0x7f0b3c9d6c40)
+ QSurface (0x0x7f0b3c7c6240) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 392)
+ QPaintDevice (0x0x7f0b3c7c62a0) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 456)
+
+Class QOpenGLWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWidget::QPrivateSignal (0x0x7f0b3c7c6540) 0 empty
+
+Vtable for QOpenGLWidget
+QOpenGLWidget::_ZTV13QOpenGLWidget: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QOpenGLWidget)
+16 (int (*)(...))QOpenGLWidget::metaObject
+24 (int (*)(...))QOpenGLWidget::qt_metacast
+32 (int (*)(...))QOpenGLWidget::qt_metacall
+40 (int (*)(...))QOpenGLWidget::~QOpenGLWidget
+48 (int (*)(...))QOpenGLWidget::~QOpenGLWidget
+56 (int (*)(...))QOpenGLWidget::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QWidget::devType
+120 (int (*)(...))QWidget::setVisible
+128 (int (*)(...))QWidget::sizeHint
+136 (int (*)(...))QWidget::minimumSizeHint
+144 (int (*)(...))QWidget::heightForWidth
+152 (int (*)(...))QWidget::hasHeightForWidth
+160 (int (*)(...))QOpenGLWidget::paintEngine
+168 (int (*)(...))QWidget::mousePressEvent
+176 (int (*)(...))QWidget::mouseReleaseEvent
+184 (int (*)(...))QWidget::mouseDoubleClickEvent
+192 (int (*)(...))QWidget::mouseMoveEvent
+200 (int (*)(...))QWidget::wheelEvent
+208 (int (*)(...))QWidget::keyPressEvent
+216 (int (*)(...))QWidget::keyReleaseEvent
+224 (int (*)(...))QWidget::focusInEvent
+232 (int (*)(...))QWidget::focusOutEvent
+240 (int (*)(...))QWidget::enterEvent
+248 (int (*)(...))QWidget::leaveEvent
+256 (int (*)(...))QOpenGLWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QOpenGLWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))QWidget::dragMoveEvent
+328 (int (*)(...))QWidget::dragLeaveEvent
+336 (int (*)(...))QWidget::dropEvent
+344 (int (*)(...))QWidget::showEvent
+352 (int (*)(...))QWidget::hideEvent
+360 (int (*)(...))QWidget::nativeEvent
+368 (int (*)(...))QWidget::changeEvent
+376 (int (*)(...))QOpenGLWidget::metric
+384 (int (*)(...))QWidget::initPainter
+392 (int (*)(...))QOpenGLWidget::redirected
+400 (int (*)(...))QWidget::sharedPainter
+408 (int (*)(...))QWidget::inputMethodEvent
+416 (int (*)(...))QWidget::inputMethodQuery
+424 (int (*)(...))QWidget::focusNextPrevChild
+432 (int (*)(...))QOpenGLWidget::initializeGL
+440 (int (*)(...))QOpenGLWidget::resizeGL
+448 (int (*)(...))QOpenGLWidget::paintGL
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI13QOpenGLWidget)
+472 (int (*)(...))QOpenGLWidget::_ZThn16_N13QOpenGLWidgetD1Ev
+480 (int (*)(...))QOpenGLWidget::_ZThn16_N13QOpenGLWidgetD0Ev
+488 (int (*)(...))QWidget::_ZThn16_NK7QWidget7devTypeEv
+496 (int (*)(...))QOpenGLWidget::_ZThn16_NK13QOpenGLWidget11paintEngineEv
+504 (int (*)(...))QOpenGLWidget::_ZThn16_NK13QOpenGLWidget6metricEN12QPaintDevice17PaintDeviceMetricE
+512 (int (*)(...))QWidget::_ZThn16_NK7QWidget11initPainterEP8QPainter
+520 (int (*)(...))QOpenGLWidget::_ZThn16_NK13QOpenGLWidget10redirectedEP6QPoint
+528 (int (*)(...))QWidget::_ZThn16_NK7QWidget13sharedPainterEv
+
+Class QOpenGLWidget
+ size=40 align=8
+ base size=40 base align=8
+QOpenGLWidget (0x0x7f0b3c9e4c98) 0
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 16)
+ QWidget (0x0x7f0b3c9d6e00) 0
+ primary-for QOpenGLWidget (0x0x7f0b3c9e4c98)
+ QObject (0x0x7f0b3c7c6480) 0
+ primary-for QWidget (0x0x7f0b3c9d6e00)
+ QPaintDevice (0x0x7f0b3c7c64e0) 16
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 472)
+
+Class QUiLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUiLoader::QPrivateSignal (0x0x7f0b3c7c6720) 0 empty
+
+Vtable for QUiLoader
+QUiLoader::_ZTV9QUiLoader: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QUiLoader)
+16 (int (*)(...))QUiLoader::metaObject
+24 (int (*)(...))QUiLoader::qt_metacast
+32 (int (*)(...))QUiLoader::qt_metacall
+40 (int (*)(...))QUiLoader::~QUiLoader
+48 (int (*)(...))QUiLoader::~QUiLoader
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QUiLoader::createWidget
+120 (int (*)(...))QUiLoader::createLayout
+128 (int (*)(...))QUiLoader::createActionGroup
+136 (int (*)(...))QUiLoader::createAction
+
+Class QUiLoader
+ size=24 align=8
+ base size=24 base align=8
+QUiLoader (0x0x7f0b3c9e4d68) 0
+ vptr=((& QUiLoader::_ZTV9QUiLoader) + 16)
+ QObject (0x0x7f0b3c7c66c0) 0
+ primary-for QUiLoader (0x0x7f0b3c9e4d68)
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b3c818840) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b3c818ba0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b3c818d80) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b3c83e0c0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b3c83e2a0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b3c83e600) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b3c83e780) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b3c83eae0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b3c83ecc0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = char; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b3c46b060) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b3c46b240) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b3c46b5a0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b3c46b780) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b3c46bae0) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b3c46bcc0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = char; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b3c49b060) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b3c4c6900) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b3c4c6c60) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b3c4c6de0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long int; _Ret = long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b3c4ec180) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b3c4ec300) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long unsigned int; _Ret = long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b3c4ec660) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b3c4ec7e0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long int; _Ret = long long int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b3c4ecb40) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b3c4eccc0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long long unsigned int; _Ret = long long unsigned int; _CharT = wchar_t; _Base = {int}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b3c514060) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b3c5141e0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = float; _Ret = float; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b3c514540) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b3c5146c0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = double; _Ret = double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b3c514a20) 0 empty
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno
+ size=4 align=4
+ base size=4 base align=4
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Save_errno (0x0x7f0b3c514ba0) 0
+
+Class __gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__stoa(_TRet (*)(const _CharT*, _CharT**, _Base ...), const char*, const _CharT*, std::size_t*, _Base ...) [with _TRet = long double; _Ret = long double; _CharT = wchar_t; _Base = {}; std::size_t = long unsigned int]::_Range_chk (0x0x7f0b3c514f00) 0 empty
+
diff --git a/tests/auto/cmake/CMakeLists.txt b/tests/auto/cmake/CMakeLists.txt
index bf69829fb..2533156d5 100644
--- a/tests/auto/cmake/CMakeLists.txt
+++ b/tests/auto/cmake/CMakeLists.txt
@@ -1,48 +1,68 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
# This is an automatic test for the CMake configuration files.
-# To run it,
+# To run it manually,
# 1) mkdir build # Create a build directory
# 2) cd build
-# 3) cmake .. # Run cmake on this directory.
+# 3) # Run cmake on this directory
+# `$qt_prefix/bin/qt-cmake ..` or `cmake -DCMAKE_PREFIX_PATH=/path/to/qt ..`
# 4) ctest # Run ctest
+# 5) ctest -V -R test_add_translation_macro # Run single test
#
# The expected output is something like:
#
-# Start 1: test_translation_macros
-# 1/2 Test #1: test_translation_macros .......... Passed 0.98 sec
-# Start 2: test_modules
-# 2/2 Test #2: test_modules ..................... Passed 1.41 sec
+# 1/2 Test #1: test_uiplugin_module ............. Passed 6.33 sec
+# Start 4: test_uiplugin_via_designer
+# 2/2 Test #2: test_uiplugin_via_designer ....... Passed 9.32 sec
+#
#
# Note that if Qt is not installed, or if it is installed to a
# non-standard prefix, the environment variable CMAKE_PREFIX_PATH
# needs to be set to the installation prefix or build prefix of Qt
# before running these tests.
+cmake_minimum_required(VERSION 3.16)
-cmake_minimum_required(VERSION 2.8)
-
-project(qmake_cmake_files)
+project(qttools_cmake_tests)
enable_testing()
-find_package(Qt5Core REQUIRED)
+set(required_packages Core)
+set(optional_packages Widgets LinguistTools)
-include("${_Qt5CTestMacros}")
-
-if(NOT CMAKE_CROSSCOMPILING)
- expect_pass(test_create_translation_macro)
- expect_pass(test_add_translation_macro)
+# Setup the test when called as a completely standalone project.
+if(TARGET Qt6::Core)
+ # Tests are built as part of the qtbase build tree.
+ # Setup paths so that the Qt packages are found, similar to examples.
+ qt_internal_set_up_build_dir_package_paths()
endif()
-if (NOT NO_WIDGETS)
- test_module_includes(
- Designer QFormBuilder
- Help QHelpSearchQuery
- UiTools QUiLoader
- )
+find_package(Qt6 REQUIRED COMPONENTS ${required_packages})
+find_package(Qt6 OPTIONAL_COMPONENTS ${optional_packages})
+
+# Setup common test variables which were previously set by ctest_testcase_common.prf.
+set(CMAKE_MODULES_UNDER_TEST "${required_packages}")
+foreach(qt_package ${optional_packages})
+ set(package_name "${QT_CMAKE_EXPORT_NAMESPACE}${qt_package}")
+ list(APPEND CMAKE_MODULES_UNDER_TEST "${qt_package}")
+endforeach()
- expect_pass(test_uiplugin_via_designer)
- if (NOT CMAKE_VERSION VERSION_LESS 3.0)
- expect_pass(test_uiplugin_module)
+foreach(qt_package ${CMAKE_MODULES_UNDER_TEST})
+ if(${package_name}_FOUND)
+ set(CMAKE_${qt_package}_MODULE_MAJOR_VERSION "${${package_name}_VERSION_MAJOR}")
+ set(CMAKE_${qt_package}_MODULE_MINOR_VERSION "${${package_name}_VERSION_MINOR}")
+ set(CMAKE_${qt_package}_MODULE_PATCH_VERSION "${${package_name}_VERSION_PATCH}")
endif()
+endforeach()
+
+include("${_Qt6CTestMacros}")
+
+if (TARGET Qt6::Widgets)
+ _qt_internal_test_expect_pass(test_uiplugin_module)
+ _qt_internal_test_expect_pass(test_uiplugin_via_designer)
+endif()
+
+if(TARGET Qt6::lupdate)
+ add_subdirectory(linguist)
endif()
diff --git a/tests/auto/cmake/cmake.pro b/tests/auto/cmake/cmake.pro
deleted file mode 100644
index 311af63ff..000000000
--- a/tests/auto/cmake/cmake.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-
-# Cause make to do nothing.
-TEMPLATE = subdirs
-
-qtHaveModule(widgets) {
- CMAKE_QT_MODULES_UNDER_TEST = designer help uitools
-}
-
-CONFIG += ctest_testcase
diff --git a/tests/auto/cmake/linguist/CMakeLists.txt b/tests/auto/cmake/linguist/CMakeLists.txt
new file mode 100644
index 000000000..e08d12f5e
--- /dev/null
+++ b/tests/auto/cmake/linguist/CMakeLists.txt
@@ -0,0 +1,67 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+# This is an automatic test for the CMake configuration files.
+# To run it manually,
+# 1) mkdir build # Create a build directory
+# 2) cd build
+# 3) # Run cmake on this directory
+# `$qt_prefix/bin/qt-cmake ..` or `cmake -DCMAKE_PREFIX_PATH=/path/to/qt ..`
+# 4) ctest # Run ctest
+# 5) ctest -V -R test_add_translation_macro # Run single test
+#
+# The expected output is something like:
+#
+# Start 1: test_add_translation_macro
+# 1/2 Test #1: test_add_translation_macro ....... Passed 3.13 sec
+# Start 2: test_create_translation_macro
+# 2/2 Test #2: test_create_translation_macro .... Passed 3.64 sec
+#
+#
+# Note that if Qt is not installed, or if it is installed to a
+# non-standard prefix, the environment variable CMAKE_PREFIX_PATH
+# needs to be set to the installation prefix or build prefix of Qt
+# before running these tests.
+
+cmake_minimum_required(VERSION 3.16)
+
+project(qttools_cmake_tests_linguist)
+
+enable_testing()
+
+set(required_packages Core LinguistTools)
+
+# Setup the test when called as a completely standalone project.
+if(TARGET Qt6::Core)
+ # Tests are built as part of the qtbase build tree.
+ # Setup paths so that the Qt packages are found, similar to examples.
+ qt_internal_set_up_build_dir_package_paths()
+endif()
+
+find_package(Qt6 REQUIRED COMPONENTS ${required_packages})
+
+# Setup common test variables which were previously set by ctest_testcase_common.prf.
+set(CMAKE_MODULES_UNDER_TEST "${required_packages}")
+foreach(qt_package ${optional_packages})
+ set(package_name "${QT_CMAKE_EXPORT_NAMESPACE}${qt_package}")
+ list(APPEND CMAKE_MODULES_UNDER_TEST "${qt_package}")
+endforeach()
+
+foreach(qt_package ${CMAKE_MODULES_UNDER_TEST})
+ if(${package_name}_FOUND)
+ set(CMAKE_${qt_package}_MODULE_MAJOR_VERSION "${${package_name}_VERSION_MAJOR}")
+ set(CMAKE_${qt_package}_MODULE_MINOR_VERSION "${${package_name}_VERSION_MINOR}")
+ set(CMAKE_${qt_package}_MODULE_PATCH_VERSION "${${package_name}_VERSION_PATCH}")
+ endif()
+endforeach()
+
+include("${_Qt6CTestMacros}")
+
+_qt_internal_test_expect_pass(test_add_translation_macro)
+_qt_internal_test_expect_pass(test_create_translation_macro)
+_qt_internal_test_expect_pass(test_create_translation_same_base_names)
+_qt_internal_test_expect_pass(test_translation_api)
+_qt_internal_test_expect_pass(test_i18n_auto_ts_file_names)
+_qt_internal_test_expect_pass(test_i18n_exclusion)
+_qt_internal_test_expect_pass(test_i18n_filter_autogen_files)
+_qt_internal_test_expect_pass(test_i18n_source_language)
diff --git a/tests/auto/cmake/linguist/test_add_translation_macro/CMakeLists.txt b/tests/auto/cmake/linguist/test_add_translation_macro/CMakeLists.txt
new file mode 100644
index 000000000..9812734f1
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_add_translation_macro/CMakeLists.txt
@@ -0,0 +1,17 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+project(test_add_translation_macro)
+
+find_package(Qt6 COMPONENTS Core LinguistTools REQUIRED)
+
+set(my_srcs myi18nobject.cpp)
+
+include_directories("${CMAKE_CURRENT_SOURCE_DIR}/some_dir")
+
+qt_add_translation(qm_files myobject_de.ts OPTIONS -compress) # play around with OPTIONS
+
+add_executable(test_add_translation ${my_srcs} ${qm_files})
+target_link_libraries(test_add_translation Qt::Core)
diff --git a/tests/auto/cmake/linguist/test_add_translation_macro/myi18nobject.cpp b/tests/auto/cmake/linguist/test_add_translation_macro/myi18nobject.cpp
new file mode 100644
index 000000000..ed518ab5f
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_add_translation_macro/myi18nobject.cpp
@@ -0,0 +1,28 @@
+// Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Stephen Kelly <stephen.kelly@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QCoreApplication>
+#include <QLocale>
+#include <QTranslator>
+
+#include "some_include.h"
+
+int main(int argc, char **argv)
+{
+ QCoreApplication app(argc, argv);
+ QTranslator *myappTranslator = new QTranslator;
+
+ QLocale::setDefault(QLocale("de"));
+
+ if (!myappTranslator->load(QLocale(), "myobject", "_", qApp->applicationDirPath()))
+ qFatal("Could not load translation file!");
+
+ app.installTranslator(myappTranslator);
+
+ QString text = QCoreApplication::translate("main", "Hello, world!");
+ if (text != QLatin1String("Hallo, Welt!"))
+ qFatal("Translation not found!");
+
+ std::fprintf(stdout, "%s\n", qPrintable(text));
+ return 0;
+}
diff --git a/tests/auto/cmake/linguist/test_add_translation_macro/myobject_de.ts b/tests/auto/cmake/linguist/test_add_translation_macro/myobject_de.ts
new file mode 100644
index 000000000..18811c2e3
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_add_translation_macro/myobject_de.ts
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="de_DE">
+<context>
+ <name>main</name>
+ <message>
+ <location filename="myi18nobject.cpp" line="49"/>
+ <source>Hello, world!</source>
+ <translation>Hallo, Welt!</translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/cmake/linguist/test_add_translation_macro/some_dir/some_include.h b/tests/auto/cmake/linguist/test_add_translation_macro/some_dir/some_include.h
new file mode 100644
index 000000000..f2577ba2e
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_add_translation_macro/some_dir/some_include.h
@@ -0,0 +1,9 @@
+// Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Stephen Kelly <stephen.kelly@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef SOME_INCLUDE_H
+#define SOME_INCLUDE_H
+
+enum { Non_Empty_File };
+
+#endif
diff --git a/tests/auto/cmake/linguist/test_create_translation_macro/CMakeLists.txt b/tests/auto/cmake/linguist/test_create_translation_macro/CMakeLists.txt
new file mode 100644
index 000000000..9e57ee802
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_create_translation_macro/CMakeLists.txt
@@ -0,0 +1,17 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+project(test_create_translation_macros)
+
+find_package(Qt6 COMPONENTS Core LinguistTools REQUIRED)
+
+set(my_srcs myi18nobject.cpp)
+
+include_directories("${CMAKE_CURRENT_SOURCE_DIR}/some_dir")
+
+qt_create_translation(qm_files ${my_srcs} myobject_de.ts OPTIONS -pro-debug) # play around with OPTIONS
+
+add_executable(myobject ${my_srcs} ${qm_files})
+target_link_libraries(myobject Qt::Core)
diff --git a/tests/auto/cmake/linguist/test_create_translation_macro/myi18nobject.cpp b/tests/auto/cmake/linguist/test_create_translation_macro/myi18nobject.cpp
new file mode 100644
index 000000000..fdc373734
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_create_translation_macro/myi18nobject.cpp
@@ -0,0 +1,26 @@
+// Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Stephen Kelly <stephen.kelly@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QCoreApplication>
+#include <QTranslator>
+#include <QLocale>
+
+int main(int argc, char **argv)
+{
+ QCoreApplication app(argc, argv);
+ QTranslator *myappTranslator = new QTranslator;
+
+ QLocale::setDefault(QLocale("de"));
+
+ if (!myappTranslator->load(QLocale(), "myobject", "_", qApp->applicationDirPath()))
+ qFatal("Could not load translation file!");
+
+ app.installTranslator(myappTranslator);
+
+ QString text = QCoreApplication::translate("main", "Hello, world!");
+ if (text != QLatin1String("Hallo, Welt!"))
+ qFatal("Translation not found!");
+
+ std::fprintf(stdout, "%s\n", qPrintable(text));
+ return 0;
+}
diff --git a/tests/auto/cmake/linguist/test_create_translation_macro/myobject_de.ts b/tests/auto/cmake/linguist/test_create_translation_macro/myobject_de.ts
new file mode 100644
index 000000000..67c56ed98
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_create_translation_macro/myobject_de.ts
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="de_DE">
+<context>
+ <name>main</name>
+ <message>
+ <location filename="myi18nobject.cpp" line="20"/>
+ <source>Hello, world!</source>
+ <translation>Hallo, Welt!</translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/cmake/linguist/test_create_translation_macro/some_dir/some_include.h b/tests/auto/cmake/linguist/test_create_translation_macro/some_dir/some_include.h
new file mode 100644
index 000000000..f2577ba2e
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_create_translation_macro/some_dir/some_include.h
@@ -0,0 +1,9 @@
+// Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Stephen Kelly <stephen.kelly@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef SOME_INCLUDE_H
+#define SOME_INCLUDE_H
+
+enum { Non_Empty_File };
+
+#endif
diff --git a/tests/auto/cmake/linguist/test_create_translation_same_base_names/CMakeLists.txt b/tests/auto/cmake/linguist/test_create_translation_same_base_names/CMakeLists.txt
new file mode 100644
index 000000000..e395cd2b6
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_create_translation_same_base_names/CMakeLists.txt
@@ -0,0 +1,22 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+project(test_create_translation_same_base_names)
+
+find_package(Qt6 COMPONENTS Core LinguistTools REQUIRED)
+
+set(my_srcs myi18nobject.cpp)
+
+set(ts_files "")
+foreach(language de fr)
+ set(ts_file ${language}/myobject.ts)
+ set_property(SOURCE ${ts_file}
+ PROPERTY OUTPUT_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/${language})
+ list(APPEND ts_files ${ts_file})
+endforeach()
+qt_create_translation(qm_files ${my_srcs} ${ts_files})
+
+add_executable(myobject ${my_srcs} ${qm_files})
+target_link_libraries(myobject Qt::Core)
diff --git a/tests/auto/cmake/linguist/test_create_translation_same_base_names/de/myobject.ts b/tests/auto/cmake/linguist/test_create_translation_same_base_names/de/myobject.ts
new file mode 100644
index 000000000..4d4292e5b
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_create_translation_same_base_names/de/myobject.ts
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="de_DE">
+<context>
+ <name>main</name>
+ <message>
+ <location filename="../myi18nobject.cpp" line="26"/>
+ <source>Hello, world!</source>
+ <translation>Hallo, Welt!</translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/cmake/linguist/test_create_translation_same_base_names/fr/myobject.ts b/tests/auto/cmake/linguist/test_create_translation_same_base_names/fr/myobject.ts
new file mode 100644
index 000000000..ab96d20e3
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_create_translation_same_base_names/fr/myobject.ts
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="fr">
+<context>
+ <name>main</name>
+ <message>
+ <location filename="../myi18nobject.cpp" line="26"/>
+ <source>Hello, world!</source>
+ <translation>Bonjour le monde!</translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/cmake/linguist/test_create_translation_same_base_names/myi18nobject.cpp b/tests/auto/cmake/linguist/test_create_translation_same_base_names/myi18nobject.cpp
new file mode 100644
index 000000000..2f2b31ff6
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_create_translation_same_base_names/myi18nobject.cpp
@@ -0,0 +1,32 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Stephen Kelly <stephen.kelly@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QCoreApplication>
+#include <QTranslator>
+#include <QLocale>
+
+#include <cstdio>
+
+using namespace Qt::Literals::StringLiterals;
+
+int main(int argc, char **argv)
+{
+ QCoreApplication app(argc, argv);
+ QTranslator *translator = new QTranslator();
+ QLocale frenchLocale = QLocale(QLocale::French);
+ QLocale::setDefault(frenchLocale);
+ if (!translator->load(QLocale(), "myobject.qm"_L1, {},
+ qApp->applicationDirPath() + "/fr/"_L1)) {
+ qFatal("Could not load translation file!");
+ }
+
+ app.installTranslator(translator);
+
+ QString text = QCoreApplication::translate("main", "Hello, world!");
+ if (text != "Bonjour le monde!"_L1)
+ qFatal("Translation not found!");
+
+ std::fprintf(stdout, "%s\n", qPrintable(text));
+ return 0;
+}
diff --git a/tests/auto/cmake/linguist/test_i18n_auto_ts_file_names/CMakeLists.txt b/tests/auto/cmake/linguist/test_i18n_auto_ts_file_names/CMakeLists.txt
new file mode 100644
index 000000000..04e84edd4
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_auto_ts_file_names/CMakeLists.txt
@@ -0,0 +1,115 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(test_i18n_auto_ts_file_names)
+
+# Set up the project structure.
+find_package(Qt6 REQUIRED COMPONENTS Core Gui LinguistTools)
+qt_standard_project_setup()
+
+function(my_add_library target)
+ qt6_add_library("${target}" ${ARGN})
+ target_link_libraries("${target}" PRIVATE Qt6::Core)
+endfunction()
+
+# Remove .ts files from older test runs.
+file(GLOB_RECURSE old_ts_files "${CMAKE_CURRENT_SOURCE_DIR}/*.ts")
+foreach(f IN LISTS old_ts_files)
+ message("Removing: ${f}")
+ file(REMOVE "${f}")
+endforeach()
+
+set(expected_files "")
+set(unexpected_files "")
+
+# Check defaults for the deferred call.
+my_add_library(lib1 STATIC lib.cpp)
+set(QT_I18N_TRANSLATED_LANGUAGES te st)
+qt_add_translations(TARGETS lib1)
+list(APPEND expected_files
+ "${CMAKE_CURRENT_SOURCE_DIR}/test_i18n_auto_ts_file_names_en.ts" # plurals-only file
+ "${CMAKE_CURRENT_SOURCE_DIR}/test_i18n_auto_ts_file_names_te.ts"
+ "${CMAKE_CURRENT_SOURCE_DIR}/test_i18n_auto_ts_file_names_st.ts")
+
+# Check defaults for the immediate call.
+my_add_library(lib2 STATIC lib.cpp)
+set(QT_I18N_SOURCE_LANGUAGE hu)
+set(QT_I18N_TRANSLATED_LANGUAGES hi ho)
+qt_add_translations(TARGETS lib2 IMMEDIATE_CALL)
+list(APPEND expected_files
+ "${CMAKE_CURRENT_SOURCE_DIR}/test_i18n_auto_ts_file_names_hu.ts" # plurals-only file
+ "${CMAKE_CURRENT_SOURCE_DIR}/test_i18n_auto_ts_file_names_hi.ts"
+ "${CMAKE_CURRENT_SOURCE_DIR}/test_i18n_auto_ts_file_names_ho.ts")
+
+# Check defaults for deferred/immediate call in a subdir.
+add_subdirectory(subdir)
+list(APPEND expected_files
+ "${CMAKE_CURRENT_SOURCE_DIR}/subdir/test_i18n_auto_ts_file_names_eo.ts" # plurals-only file
+ "${CMAKE_CURRENT_SOURCE_DIR}/subdir/test_i18n_auto_ts_file_names_de.ts"
+ "${CMAKE_CURRENT_SOURCE_DIR}/subdir/test_i18n_auto_ts_file_names_ee.ts" # plurals-only file
+ "${CMAKE_CURRENT_SOURCE_DIR}/subdir/test_i18n_auto_ts_file_names_da.ts"
+)
+
+# Check whether TS_FILE_BASE works.
+my_add_library(lib5 STATIC lib.cpp)
+set(QT_I18N_SOURCE_LANGUAGE ne)
+set(QT_I18N_TRANSLATED_LANGUAGES no)
+qt_add_translations(TARGETS lib5 TS_FILE_BASE lib5)
+list(APPEND expected_files
+ "${CMAKE_CURRENT_SOURCE_DIR}/lib5_ne.ts" # plurals-only file
+ "${CMAKE_CURRENT_SOURCE_DIR}/lib5_no.ts")
+
+# Check whether TS_FILE_DIR works.
+my_add_library(lib6 STATIC lib.cpp)
+set(QT_I18N_SOURCE_LANGUAGE so) # plurals-only file
+set(QT_I18N_TRANSLATED_LANGUAGES sv)
+qt_add_translations(TARGETS lib6 TS_FILE_DIR translations)
+list(APPEND expected_files
+ "${CMAKE_CURRENT_SOURCE_DIR}/translations/test_i18n_auto_ts_file_names_sv.ts")
+
+# Check whether TS_FILE_BASE and TS_FILE_DIR work together.
+my_add_library(lib7 STATIC lib.cpp)
+set(QT_I18N_SOURCE_LANGUAGE fy)
+set(QT_I18N_TRANSLATED_LANGUAGES fi)
+qt_add_translations(TARGETS lib7 TS_FILE_BASE lib7 TS_FILE_DIR translations)
+list(APPEND expected_files
+ "${CMAKE_CURRENT_SOURCE_DIR}/translations/lib7_fy.ts" # plurals-only file
+ "${CMAKE_CURRENT_SOURCE_DIR}/translations/lib7_fi.ts")
+
+# Check defaults for the deferred call with just the native language set.
+my_add_library(lib8 STATIC lib.cpp)
+set(QT_I18N_TRANSLATED_LANGUAGES "")
+set(QT_I18N_SOURCE_LANGUAGE nl)
+qt_add_translations(TARGETS lib8)
+list(APPEND expected_files
+ "${CMAKE_CURRENT_SOURCE_DIR}/test_i18n_auto_ts_file_names_nl.ts")
+
+# Check whether we can turn off the generation of the plurals-only file.
+my_add_library(lib10 STATIC lib.cpp)
+set(QT_I18N_TRANSLATED_LANGUAGES cy)
+set(QT_I18N_SOURCE_LANGUAGE an)
+qt_add_translations(TARGETS lib10 NO_GENERATE_PLURALS_TS_FILE)
+list(APPEND expected_files
+ "${CMAKE_CURRENT_SOURCE_DIR}/test_i18n_auto_ts_file_names_cy.ts")
+list(APPEND unexpected_files
+ "${CMAKE_CURRENT_SOURCE_DIR}/test_i18n_auto_ts_file_names_an.ts")
+
+function(check_ts_file_paths)
+ foreach(filepath IN LISTS expected_files)
+ if(NOT EXISTS "${filepath}")
+ message(FATAL_ERROR "Expected file '${filepath}' does not exist.")
+ endif()
+ endforeach()
+ foreach(filepath IN LISTS unexpected_files)
+ if(EXISTS "${filepath}")
+ message(FATAL_ERROR "File '${filepath}' unexpectedly exists.")
+ endif()
+ endforeach()
+endfunction()
+
+if(CMAKE_VERSION VERSION_LESS "3.19")
+ check_ts_file_paths()
+else()
+ cmake_language(DEFER CALL check_ts_file_paths)
+endif()
diff --git a/tests/auto/cmake/linguist/test_i18n_auto_ts_file_names/lib.cpp b/tests/auto/cmake/linguist/test_i18n_auto_ts_file_names/lib.cpp
new file mode 100644
index 000000000..da1c291b4
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_auto_ts_file_names/lib.cpp
@@ -0,0 +1 @@
+int getSomeNumber() { return 42; }
diff --git a/tests/auto/cmake/linguist/test_i18n_auto_ts_file_names/subdir/CMakeLists.txt b/tests/auto/cmake/linguist/test_i18n_auto_ts_file_names/subdir/CMakeLists.txt
new file mode 100644
index 000000000..2fcc3cc03
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_auto_ts_file_names/subdir/CMakeLists.txt
@@ -0,0 +1,13 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+my_add_library(lib3 STATIC ../lib.cpp)
+set(QT_I18N_SOURCE_LANGUAGE eo)
+set(QT_I18N_TRANSLATED_LANGUAGES de)
+qt_add_translations(TARGETS lib3)
+
+my_add_library(lib4 STATIC ../lib.cpp)
+set(QT_I18N_SOURCE_LANGUAGE ee)
+set(QT_I18N_TRANSLATED_LANGUAGES da)
+qt_add_translations(TARGETS lib4 IMMEDIATE_CALL)
+
diff --git a/tests/auto/cmake/linguist/test_i18n_exclusion/CMakeLists.txt b/tests/auto/cmake/linguist/test_i18n_exclusion/CMakeLists.txt
new file mode 100644
index 000000000..574567e48
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_exclusion/CMakeLists.txt
@@ -0,0 +1,29 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(test_i18n_exclusion)
+
+# Set up the project structure.
+find_package(Qt6 REQUIRED COMPONENTS Core Gui LinguistTools)
+qt_standard_project_setup()
+add_subdirectory(libs)
+add_subdirectory(apps)
+add_subdirectory(tests)
+
+# Generate a fresh, empty .ts file in the build directory.
+set(ts_file "${CMAKE_CURRENT_BINARY_DIR}/test_i18n_exclusion_de.ts")
+configure_file(test_i18n_exclusion_de.ts.in "${ts_file}")
+
+# Set up the 'update_translations' target.
+qt_collect_translation_source_targets(i18n_targets)
+qt_add_lupdate(
+ SOURCE_TARGETS ${i18n_targets}
+ TS_FILES "${ts_file}"
+)
+
+# Build the 'update_translations' target by default and check the content of the updated .ts file.
+add_custom_target(force_ts_update ALL
+ COMMAND "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_SOURCE_DIR}/check_ts_file.cmake"
+)
+add_dependencies(force_ts_update update_translations)
diff --git a/tests/auto/cmake/linguist/test_i18n_exclusion/apps/CMakeLists.txt b/tests/auto/cmake/linguist/test_i18n_exclusion/apps/CMakeLists.txt
new file mode 100644
index 000000000..0026828cb
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_exclusion/apps/CMakeLists.txt
@@ -0,0 +1,4 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+add_subdirectory(app1)
diff --git a/tests/auto/cmake/linguist/test_i18n_exclusion/apps/app1/CMakeLists.txt b/tests/auto/cmake/linguist/test_i18n_exclusion/apps/app1/CMakeLists.txt
new file mode 100644
index 000000000..0c1a8af5c
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_exclusion/apps/app1/CMakeLists.txt
@@ -0,0 +1,24 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_add_executable(app1
+ main.cpp
+ excluded1.cpp
+ subdir/excluded2.cpp
+ ../shared/excluded3.cpp
+)
+
+# Note: subdir2/excluded4.cpp is deliberately not added to the sources. It's included in main.cpp,
+# and lupdate picks up such source files. The exclusion pattern must work for those too.
+
+set_property(TARGET app1 PROPERTY QT_EXCLUDE_SOURCES_FROM_TRANSLATION
+ ../shared/*
+ excluded?.cpp
+ subdir/*
+ subdir2/excluded4.cpp
+)
+target_link_libraries(app1 PRIVATE
+ Qt6::Gui
+ lib1
+ lib2
+)
diff --git a/tests/auto/cmake/linguist/test_i18n_exclusion/apps/app1/excluded1.cpp b/tests/auto/cmake/linguist/test_i18n_exclusion/apps/app1/excluded1.cpp
new file mode 100644
index 000000000..8e04d3ee1
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_exclusion/apps/app1/excluded1.cpp
@@ -0,0 +1,9 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QCoreApplication>
+
+void excluded1()
+{
+ QCoreApplication::translate("app1", "excluded1");
+}
diff --git a/tests/auto/cmake/linguist/test_i18n_exclusion/apps/app1/main.cpp b/tests/auto/cmake/linguist/test_i18n_exclusion/apps/app1/main.cpp
new file mode 100644
index 000000000..820d82744
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_exclusion/apps/app1/main.cpp
@@ -0,0 +1,19 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QCoreApplication>
+#include "lib1.h"
+#include "lib2.h"
+#include "subdir2/excluded4.cpp"
+
+int main(int argc, char **argv)
+{
+ QCoreApplication app(argc, argv);
+ auto obj1 = new MyObject1(&app);
+ auto obj2 = new MyObject2(&app);
+ qDebug() << QCoreApplication::translate("app1", "Hello from app1!")
+ << obj1->greeting()
+ << obj2->greeting()
+ << WossName::greeting();
+ return app.exec();
+}
diff --git a/tests/auto/cmake/linguist/test_i18n_exclusion/apps/app1/subdir/excluded2.cpp b/tests/auto/cmake/linguist/test_i18n_exclusion/apps/app1/subdir/excluded2.cpp
new file mode 100644
index 000000000..3cae0ba5f
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_exclusion/apps/app1/subdir/excluded2.cpp
@@ -0,0 +1,9 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QCoreApplication>
+
+void excluded2()
+{
+ QCoreApplication::translate("app1", "excluded2");
+}
diff --git a/tests/auto/cmake/linguist/test_i18n_exclusion/apps/app1/subdir2/excluded4.cpp b/tests/auto/cmake/linguist/test_i18n_exclusion/apps/app1/subdir2/excluded4.cpp
new file mode 100644
index 000000000..f6ce89cb4
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_exclusion/apps/app1/subdir2/excluded4.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QCoreApplication>
+
+class WossName
+{
+ Q_DECLARE_TR_FUNCTIONS(WossName)
+public:
+ static QString greeting()
+ {
+ return tr("excluded4");
+ }
+};
diff --git a/tests/auto/cmake/linguist/test_i18n_exclusion/apps/shared/excluded3.cpp b/tests/auto/cmake/linguist/test_i18n_exclusion/apps/shared/excluded3.cpp
new file mode 100644
index 000000000..e3d0784cb
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_exclusion/apps/shared/excluded3.cpp
@@ -0,0 +1,9 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QCoreApplication>
+
+void excluded3()
+{
+ QCoreApplication::translate("shared", "excluded3");
+}
diff --git a/tests/auto/cmake/linguist/test_i18n_exclusion/check_ts_file.cmake b/tests/auto/cmake/linguist/test_i18n_exclusion/check_ts_file.cmake
new file mode 100644
index 000000000..45b9b434a
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_exclusion/check_ts_file.cmake
@@ -0,0 +1,37 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+set(ts_file "test_i18n_exclusion_de.ts")
+file(READ "${ts_file}" ts_file_content)
+
+set(expected_strings
+ "<source>Hello from app1!</source>"
+ "<source>Hello from MyObject1!</source>"
+)
+foreach(needle IN LISTS expected_strings)
+ string(FIND "${ts_file_content}" "${needle}" pos)
+ if(pos EQUAL "-1")
+ message(FATAL_ERROR
+ "Expected string '${needle}' was not found in '${ts_file}'. "
+ "The file content is:\n${ts_file_content}"
+ )
+ endif()
+endforeach()
+
+set(forbidden_strings
+ "<source>Hello from MyObject2!</source>"
+ "<source>Hello from test1!</source>"
+ "<source>excluded1</source>"
+ "<source>excluded2</source>"
+ "<source>excluded3</source>"
+ "<source>excluded4</source>"
+)
+foreach(needle IN LISTS forbidden_strings)
+ string(FIND "${ts_file_content}" "${needle}" pos)
+ if(NOT pos EQUAL "-1")
+ message(FATAL_ERROR
+ "Excluded string '${needle}' was found in '${ts_file}'. "
+ "The file content is:\n${ts_file_content}"
+ )
+ endif()
+endforeach()
diff --git a/tests/auto/cmake/linguist/test_i18n_exclusion/libs/CMakeLists.txt b/tests/auto/cmake/linguist/test_i18n_exclusion/libs/CMakeLists.txt
new file mode 100644
index 000000000..b75acc2ce
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_exclusion/libs/CMakeLists.txt
@@ -0,0 +1,5 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+add_subdirectory(lib1)
+add_subdirectory(lib2)
diff --git a/tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib1/CMakeLists.txt b/tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib1/CMakeLists.txt
new file mode 100644
index 000000000..7cdc5da8d
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib1/CMakeLists.txt
@@ -0,0 +1,6 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_add_library(lib1 STATIC lib1.cpp)
+target_link_libraries(lib1 PRIVATE Qt6::Core)
+target_include_directories(lib1 PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
diff --git a/tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib1/lib1.cpp b/tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib1/lib1.cpp
new file mode 100644
index 000000000..187367436
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib1/lib1.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "lib1.h"
+
+MyObject1::MyObject1(QObject *parent)
+ : QObject(parent)
+{
+}
+
+QString MyObject1::greeting() const
+{
+ return tr("Hello from MyObject1!");
+}
diff --git a/tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib1/lib1.h b/tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib1/lib1.h
new file mode 100644
index 000000000..42cd3f5c9
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib1/lib1.h
@@ -0,0 +1,17 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef _LIB1_H_
+#define _LIB1_H_
+
+#include <QObject>
+
+class MyObject1 : public QObject
+{
+ Q_OBJECT
+public:
+ MyObject1(QObject *parent = nullptr);
+ QString greeting() const;
+};
+
+#endif // _LIB1_H_
diff --git a/tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib2/CMakeLists.txt b/tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib2/CMakeLists.txt
new file mode 100644
index 000000000..d29ce8c1b
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib2/CMakeLists.txt
@@ -0,0 +1,7 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_add_library(lib2 STATIC lib2.cpp)
+target_link_libraries(lib2 PRIVATE Qt6::Core)
+target_include_directories(lib2 PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
+set_property(TARGET lib2 PROPERTY QT_EXCLUDE_FROM_TRANSLATION ON)
diff --git a/tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib2/lib2.cpp b/tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib2/lib2.cpp
new file mode 100644
index 000000000..0839c5216
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib2/lib2.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "lib2.h"
+
+MyObject2::MyObject2(QObject *parent)
+ : QObject(parent)
+{
+}
+
+QString MyObject2::greeting() const
+{
+ return tr("Hello from MyObject2!");
+}
diff --git a/tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib2/lib2.h b/tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib2/lib2.h
new file mode 100644
index 000000000..610cf038c
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_exclusion/libs/lib2/lib2.h
@@ -0,0 +1,17 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef _LIB2_H_
+#define _LIB2_H_
+
+#include <QObject>
+
+class MyObject2 : public QObject
+{
+ Q_OBJECT
+public:
+ MyObject2(QObject *parent = nullptr);
+ QString greeting() const;
+};
+
+#endif // _LIB2_H_
diff --git a/tests/auto/cmake/linguist/test_i18n_exclusion/test_i18n_exclusion_de.ts.in b/tests/auto/cmake/linguist/test_i18n_exclusion/test_i18n_exclusion_de.ts.in
new file mode 100644
index 000000000..1552582ed
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_exclusion/test_i18n_exclusion_de.ts.in
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="de_DE">
+</TS>
diff --git a/tests/auto/cmake/linguist/test_i18n_exclusion/tests/CMakeLists.txt b/tests/auto/cmake/linguist/test_i18n_exclusion/tests/CMakeLists.txt
new file mode 100644
index 000000000..fc5166707
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_exclusion/tests/CMakeLists.txt
@@ -0,0 +1,5 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+add_subdirectory(test1)
+set_directory_properties(PROPERTIES QT_EXCLUDE_FROM_TRANSLATION ON)
diff --git a/tests/auto/cmake/linguist/test_i18n_exclusion/tests/test1/CMakeLists.txt b/tests/auto/cmake/linguist/test_i18n_exclusion/tests/test1/CMakeLists.txt
new file mode 100644
index 000000000..0be774e82
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_exclusion/tests/test1/CMakeLists.txt
@@ -0,0 +1,5 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_add_executable(test1 test1.cpp)
+target_link_libraries(test1 PRIVATE Qt6::Gui)
diff --git a/tests/auto/cmake/linguist/test_i18n_exclusion/tests/test1/test1.cpp b/tests/auto/cmake/linguist/test_i18n_exclusion/tests/test1/test1.cpp
new file mode 100644
index 000000000..6af64ece1
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_exclusion/tests/test1/test1.cpp
@@ -0,0 +1,12 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QCoreApplication>
+#include <QDebug>
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication app(argc, argv);
+ qDebug() << QCoreApplication::translate("test1", "Hello from test1!");
+ return app.exec();
+}
diff --git a/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/CMakeLists.txt b/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/CMakeLists.txt
new file mode 100644
index 000000000..0e3871ef6
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/CMakeLists.txt
@@ -0,0 +1,30 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(test_i18n_filter_autogen_files)
+set(CMAKE_CXX_STANDARD 20)
+find_package(Qt6 COMPONENTS Widgets LinguistTools)
+qt_standard_project_setup()
+add_subdirectory(app1)
+add_subdirectory(app2)
+
+set(ts_file "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_de.ts")
+qt_add_lupdate(
+ TS_FILES "${ts_file}"
+ SOURCE_TARGETS app1 app2
+ LUPDATE_TARGET update_ts_files
+ NO_GLOBAL_TARGET
+)
+
+# Make sure that we build the app before creating the .ts file.
+# We want to have AUTOMOC and AUTOUIC files generated.
+add_dependencies(update_ts_files app1 app2)
+
+# Update the .ts files by default and check the content of the updated .ts file.
+add_custom_target(force_ts_update ALL
+ COMMENT "Checking .ts file contents..."
+ COMMAND "${CMAKE_COMMAND}" -DTS_FILE="${ts_file}"
+ -P "${CMAKE_CURRENT_SOURCE_DIR}/check_ts_file.cmake"
+)
+add_dependencies(force_ts_update update_ts_files)
diff --git a/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app1/CMakeLists.txt b/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app1/CMakeLists.txt
new file mode 100644
index 000000000..6ff3989e7
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app1/CMakeLists.txt
@@ -0,0 +1,9 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+qt_add_executable(app1
+ main.cpp
+ mainwindow.ui
+)
+target_link_libraries(app1 PRIVATE Qt6::Widgets)
diff --git a/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app1/main.cpp b/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app1/main.cpp
new file mode 100644
index 000000000..21db50503
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app1/main.cpp
@@ -0,0 +1,27 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/QCoreApplication>
+
+#include "ui_mainwindow.h"
+
+class MyObject : public QObject
+{
+ Q_OBJECT
+public:
+ MyObject(QObject *parent = nullptr)
+ : QObject(parent)
+ {
+ qDebug() << tr("Hello from app1!");
+ }
+};
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication app(argc, argv);
+ MyObject obj;
+ Ui::MainWindow wnd;
+ app.exec();
+}
+
+#include "main.moc"
diff --git a/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app1/mainwindow.ui b/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app1/mainwindow.ui
new file mode 100644
index 000000000..2b9bac77c
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app1/mainwindow.ui
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>800</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>App1's Main Window</string>
+ </property>
+ <widget class="QWidget" name="centralwidget"/>
+ <widget class="QMenuBar" name="menubar">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>800</width>
+ <height>22</height>
+ </rect>
+ </property>
+ </widget>
+ <widget class="QStatusBar" name="statusbar"/>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app2/CMakeLists.txt b/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app2/CMakeLists.txt
new file mode 100644
index 000000000..d5c26b126
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app2/CMakeLists.txt
@@ -0,0 +1,12 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+qt_add_executable(app2
+ main.cpp
+ mainwindow.ui
+)
+target_link_libraries(app2 PRIVATE Qt6::Widgets)
+set_target_properties(app2 PROPERTIES
+ AUTOGEN_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/wossname_autogen"
+)
diff --git a/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app2/main.cpp b/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app2/main.cpp
new file mode 100644
index 000000000..3b432078f
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app2/main.cpp
@@ -0,0 +1,27 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/QCoreApplication>
+
+#include "ui_mainwindow.h"
+
+class MyObject : public QObject
+{
+ Q_OBJECT
+public:
+ MyObject(QObject *parent = nullptr)
+ : QObject(parent)
+ {
+ qDebug() << tr("Hello from app2!");
+ }
+};
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication app(argc, argv);
+ MyObject obj;
+ Ui::MainWindow wnd;
+ app.exec();
+}
+
+#include "main.moc"
diff --git a/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app2/mainwindow.ui b/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app2/mainwindow.ui
new file mode 100644
index 000000000..6b0b6f2de
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/app2/mainwindow.ui
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>800</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>App2's Main Window</string>
+ </property>
+ <widget class="QWidget" name="centralwidget"/>
+ <widget class="QMenuBar" name="menubar">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>800</width>
+ <height>22</height>
+ </rect>
+ </property>
+ </widget>
+ <widget class="QStatusBar" name="statusbar"/>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/check_ts_file.cmake b/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/check_ts_file.cmake
new file mode 100644
index 000000000..0e0118180
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_filter_autogen_files/check_ts_file.cmake
@@ -0,0 +1,31 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+file(READ "${TS_FILE}" ts_file_content)
+
+set(expected_strings
+ "<source>Hello from app1!</source>"
+ "<source>Hello from app2!</source>"
+)
+foreach(needle IN LISTS expected_strings)
+ string(FIND "${ts_file_content}" "${needle}" pos)
+ if(pos EQUAL "-1")
+ message(FATAL_ERROR
+ "Expected string '${needle}' was not found in '${TS_FILE}'. "
+ "The file content is:\n${ts_file_content}"
+ )
+ endif()
+endforeach()
+
+set(forbidden_strings
+ "/ui_mainwindow.h\""
+)
+foreach(needle IN LISTS forbidden_strings)
+ string(FIND "${ts_file_content}" "${needle}" pos)
+ if(NOT pos EQUAL "-1")
+ message(FATAL_ERROR
+ "Excluded string '${needle}' was found in '${TS_FILE}'. "
+ "The file content is:\n${ts_file_content}"
+ )
+ endif()
+endforeach()
diff --git a/tests/auto/cmake/linguist/test_i18n_source_language/CMakeLists.txt b/tests/auto/cmake/linguist/test_i18n_source_language/CMakeLists.txt
new file mode 100644
index 000000000..72b5e5cde
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_source_language/CMakeLists.txt
@@ -0,0 +1,69 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(test_i18n_source_language)
+
+# Set up the project structure.
+find_package(Qt6 REQUIRED COMPONENTS Core Gui LinguistTools)
+qt_standard_project_setup()
+set(native_ts_files "")
+
+function(my_add_library target)
+ add_library("${target}" STATIC lib.cpp)
+ target_link_libraries("${target}" PRIVATE Qt6::Core)
+endfunction()
+
+# qt_add_lupdate with just the native translation.
+my_add_library(lib1 STATIC lib.cpp)
+qt_add_lupdate(
+ SOURCE_TARGETS lib1
+ PLURALS_TS_FILE "${CMAKE_CURRENT_BINARY_DIR}/lib1_en.ts"
+)
+
+# qt_add_lupdate with just the native translation which has already been translated.
+# check_ts_files.cmake checks that the numerus translations are preserved.
+my_add_library(lib2 STATIC lib.cpp)
+configure_file(lib2_en.ts.in lib2_en.ts COPYONLY)
+qt_add_lupdate(
+ SOURCE_TARGETS lib2
+ PLURALS_TS_FILE "${CMAKE_CURRENT_BINARY_DIR}/lib2_en.ts"
+)
+
+# qt_add_lupdate with regular translations and the native translation.
+my_add_library(lib3 STATIC lib.cpp)
+qt_add_lupdate(
+ SOURCE_TARGETS lib3
+ TS_FILES "${CMAKE_CURRENT_BINARY_DIR}/lib3_hi.ts" "${CMAKE_CURRENT_BINARY_DIR}/lib3_ho.ts"
+ PLURALS_TS_FILE "${CMAKE_CURRENT_BINARY_DIR}/lib3_en.ts"
+)
+
+# qt_add_translations with just the native translation.
+my_add_library(lib4 STATIC lib.cpp)
+qt_add_translations(
+ TARGETS lib4
+ SOURCE_TARGETS lib4
+ PLURALS_TS_FILE "${CMAKE_CURRENT_BINARY_DIR}/lib4_en.ts"
+)
+
+# qt_add_translations with regular translations and the native translation.
+my_add_library(lib5 STATIC lib.cpp)
+qt_add_translations(
+ TARGETS lib5
+ SOURCE_TARGETS lib5
+ TS_FILES "${CMAKE_CURRENT_BINARY_DIR}/lib5_hi.ts" "${CMAKE_CURRENT_BINARY_DIR}/lib5_ho.ts"
+ PLURALS_TS_FILE "${CMAKE_CURRENT_BINARY_DIR}/lib5_en.ts"
+)
+
+# Find out how many targets we created above.
+get_directory_property(targets BUILDSYSTEM_TARGETS)
+list(FILTER targets INCLUDE REGEX "^lib[0-9]+$")
+list(LENGTH targets targets_length)
+
+# Build the 'update_translations' target by default and check the native language .ts files.
+string(REPLACE ";" "\\\\;" native_ts_files "${native_ts_files}")
+add_custom_target(force_ts_update ALL
+ COMMAND "${CMAKE_COMMAND}" -DNR_OF_TARGETS=${targets_length}
+ -P "${CMAKE_CURRENT_SOURCE_DIR}/check_ts_files.cmake"
+)
+add_dependencies(force_ts_update update_translations)
diff --git a/tests/auto/cmake/linguist/test_i18n_source_language/check_ts_files.cmake b/tests/auto/cmake/linguist/test_i18n_source_language/check_ts_files.cmake
new file mode 100644
index 000000000..4427682f7
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_source_language/check_ts_files.cmake
@@ -0,0 +1,47 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+set(ts_files_to_check "")
+foreach(i RANGE 1 ${NR_OF_TARGETS})
+ list(APPEND ts_files_to_check "lib${i}_en.ts")
+endforeach()
+
+function(check_ts_file ts_file)
+ message("Checking the content of '${ts_file}'...")
+ file(READ "${ts_file}" ts_file_content)
+
+ set(expected_strings
+ "<source>%n argument(s) passed</source>"
+ )
+ if(ts_file MATCHES "^lib2_en\\.ts$")
+ list(APPEND expected_strings
+ "<numerusform>one argument passed</numerusform>"
+ )
+ endif()
+ foreach(needle IN LISTS expected_strings)
+ string(FIND "${ts_file_content}" "${needle}" pos)
+ if(pos EQUAL "-1")
+ message(FATAL_ERROR
+ "Expected string '${needle}' was not found in '${ts_file}'. "
+ "The file content is:\n${ts_file_content}"
+ )
+ endif()
+ endforeach()
+
+ set(forbidden_strings
+ "<source>We must not see this in the native language"
+ )
+ foreach(needle IN LISTS forbidden_strings)
+ string(FIND "${ts_file_content}" "${needle}" pos)
+ if(NOT pos EQUAL "-1")
+ message(FATAL_ERROR
+ "Excluded string '${needle}' was found in '${ts_file}'. "
+ "The file content is:\n${ts_file_content}"
+ )
+ endif()
+ endforeach()
+endfunction()
+
+foreach(ts_file IN LISTS ts_files_to_check)
+ check_ts_file("${ts_file}")
+endforeach()
diff --git a/tests/auto/cmake/linguist/test_i18n_source_language/lib.cpp b/tests/auto/cmake/linguist/test_i18n_source_language/lib.cpp
new file mode 100644
index 000000000..f99e0a9bf
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_source_language/lib.cpp
@@ -0,0 +1,12 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QCoreApplication>
+#include <QDebug>
+
+void printStuff()
+{
+ qDebug()
+ << QObject::tr("We must not see this in the native language's .tr file.")
+ << QObject::tr("%n argument(s) passed", "", 156);
+}
diff --git a/tests/auto/cmake/linguist/test_i18n_source_language/lib2_en.ts.in b/tests/auto/cmake/linguist/test_i18n_source_language/lib2_en.ts.in
new file mode 100644
index 000000000..bf74b249c
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_i18n_source_language/lib2_en.ts.in
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="en_US">
+<context>
+ <name>QObject</name>
+ <message>
+ <source>We must not see this in the native language&apos;s .tr file.</source>
+ <translation>We oughta steer clear of layin&apos; eyes on this thing in da native file yo.</translation>
+ </message>
+ <message numerus="yes">
+ <source>%n argument(s) passed</source>
+ <translation>
+ <numerusform>one argument passed</numerusform>
+ <numerusform>%n arguments passed</numerusform>
+ </translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/cmake/linguist/test_translation_api/CMakeLists.txt b/tests/auto/cmake/linguist/test_translation_api/CMakeLists.txt
new file mode 100644
index 000000000..781927f37
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_translation_api/CMakeLists.txt
@@ -0,0 +1,162 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+project(test_update_translation_macro)
+
+find_package(Qt6 REQUIRED COMPONENTS Core LinguistTools)
+
+function(create_app target)
+ add_executable(${target}
+ myi18nobject.cpp)
+
+ target_include_directories(${target}
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/some_dir)
+
+ target_link_libraries(${target} Qt6::Core)
+endfunction()
+
+function(expect_target target)
+ if(NOT TARGET ${target})
+ message(FATAL_ERROR "Expected target '${target}' does not exist.")
+ endif()
+endfunction()
+
+function(not_expect_target target)
+ if(TARGET ${target})
+ message(FATAL_ERROR "Target '${target}' exists unexpectedly.")
+ endif()
+endfunction()
+
+function(expect_files_in_list list_var)
+ set(file_names "")
+ foreach(path IN LISTS "${list_var}")
+ get_filename_component(file_name "${path}" NAME)
+ list(APPEND file_names "${file_name}")
+ endforeach()
+ set(found_file_names "")
+ foreach(expected_file_name IN LISTS ARGN)
+ list(FIND file_names "${expected_file_name}" idx)
+ if(idx EQUAL -1)
+ message(FATAL_ERROR "Expected file name '${expected_file_name}' is not in "
+ "'${list_var}'. Its value is '${${list_var}}'.")
+ endif()
+ list(APPEND found_file_names "${expected_file_name}")
+ endforeach()
+ list(REMOVE_ITEM file_names ${found_file_names})
+ list(LENGTH file_names n)
+ if(NOT n EQUAL 0)
+ message(FATAL_ERROR "Unexpected file names in '${list_var}': ${file_names}\n"
+ "Value of '${list_var}' is '${${list_var}}'.")
+ endif()
+endfunction()
+
+# Test NO_GLOBAL_TARGET for lupdate.
+# Also, use the old signature where the first argument is the target.
+create_app(app1)
+qt6_add_lupdate(app1
+ NO_GLOBAL_TARGET
+ TS_FILES myobject_de.ts)
+expect_target(test_update_translation_macro_lupdate)
+not_expect_target(app1_lrelease)
+not_expect_target(update_translations)
+not_expect_target(release_translations)
+
+# Test NO_GLOBAL_TARGET for lrelease.
+create_app(app2)
+qt6_add_lrelease(app2
+ NO_GLOBAL_TARGET
+ TS_FILES myobject_de.ts myobject_en.ts
+ QM_FILES_OUTPUT_VARIABLE qm_files)
+not_expect_target(app2_lupdate)
+expect_target(test_update_translation_macro_lrelease)
+not_expect_target(update_translations)
+not_expect_target(release_translations)
+expect_files_in_list(qm_files myobject_de.qm myobject_en.qm)
+
+# Typical usage of qt_add_lupdate/qt_add_lrelease. Pass some options for good measure.
+create_app(app3)
+qt6_add_lupdate(
+ SOURCE_TARGETS app1 app2 app3
+ TS_FILES myobject_no.ts myobject_fi.ts
+ OPTIONS -source-language en_US)
+qt6_add_lrelease(app3
+ TS_FILES myobject_no.ts myobject_fi.ts
+ LRELEASE_TARGET app3_lrelease
+ OPTIONS -compress
+ QM_FILES_OUTPUT_VARIABLE qm_files2)
+expect_target(test_update_translation_macro_lupdate1)
+expect_target(app3_lrelease)
+expect_target(release_translations)
+expect_files_in_list(qm_files2 myobject_no.qm myobject_fi.qm)
+
+# Now do the same with qt6_add_translations.
+create_app(app4)
+qt6_add_translations(
+ IMMEDIATE_CALL
+ TARGETS app4
+ SOURCE_TARGETS app4
+ LUPDATE_TARGET app4_lupdate
+ LRELEASE_TARGET app4_lrelease
+ TS_FILES myobject_lv.ts myobject_et.ts
+ QM_FILES_OUTPUT_VARIABLE qm_files
+ LUPDATE_OPTIONS -source-language en_US
+ LRELEASE_OPTIONS -compress)
+expect_target(app4_lupdate)
+expect_target(app4_lrelease)
+expect_target(release_translations)
+expect_files_in_list(qm_files myobject_lv.qm myobject_et.qm)
+
+# Typical usage of qt_add_translations with a generated resource.
+create_app(app5)
+qt6_add_translations(app5
+ IMMEDIATE_CALL
+ TS_FILES myobject_ru.ts
+ RESOURCE_PREFIX "/tränslehschns")
+
+# qt_add_translations on a static lib with a generated resource and the default resource prefix.
+# Extract the created resource targets.
+add_library(staticlib1 STATIC
+ myi18nobject.cpp)
+target_include_directories(staticlib1
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/some_dir)
+target_link_libraries(staticlib1 PRIVATE Qt6::Core)
+set(staticlib1_resource_targets "")
+qt6_add_translations(staticlib1
+ IMMEDIATE_CALL
+ SOURCE_TARGETS staticlib1
+ TS_FILES myobject_da.ts
+ OUTPUT_TARGETS staticlib1_resource_targets)
+if("${staticlib1_resource_targets}" STREQUAL "")
+ message(FATAL_ERROR "staticlib1_resource_targets is empty.")
+endif()
+
+# Explicitly specify SOURCES.
+create_app(app6)
+qt6_add_translations(app6
+ IMMEDIATE_CALL
+ SOURCE_TARGETS app6
+ TS_FILES myobject_cs.ts
+ SOURCES myi18nobject.cpp)
+
+# Explicitly specify SOURCES with target-less qt_add_lupdate.
+qt6_add_lupdate(
+ TS_FILES myobject_sk.ts
+ SOURCES myi18nobject.cpp
+)
+
+# Explicitly specify INCLUDE_DIRECTORIES.
+create_app(app7)
+qt6_add_translations(app7
+ IMMEDIATE_CALL
+ SOURCE_TARGETS app7
+ TS_FILES myobject_nl.ts
+ INCLUDE_DIRECTORIES some_dir)
+
+# Build 'update_translations' before any of the '*_lrelease' targets.
+get_directory_property(lrelease_targets BUILDSYSTEM_TARGETS)
+list(FILTER lrelease_targets INCLUDE REGEX "_lrelease[0-9]*$")
+foreach(target IN LISTS lrelease_targets)
+ add_dependencies(${target} update_translations)
+endforeach()
diff --git a/tests/auto/cmake/linguist/test_translation_api/myi18nobject.cpp b/tests/auto/cmake/linguist/test_translation_api/myi18nobject.cpp
new file mode 100644
index 000000000..061d89e10
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_translation_api/myi18nobject.cpp
@@ -0,0 +1,24 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Stephen Kelly <stephen.kelly@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QDebug>
+#include <QCoreApplication>
+#include <QLocale>
+#include <QTranslator>
+
+#include "some_include.h"
+
+int main(int argc, char **argv)
+{
+ QCoreApplication app(argc, argv);
+ QTranslator *myappTranslator = new QTranslator;
+ QString localeName = QLocale::system().name();
+ if (!myappTranslator->load("myobject_" + localeName + ".qm", qApp->applicationDirPath()))
+ return 1;
+ myappTranslator->setObjectName("myobject_" + localeName);
+ app.installTranslator(myappTranslator);
+
+ qDebug() << QObject::tr("Hello, world!");
+ return 0;
+}
diff --git a/tests/auto/cmake/linguist/test_translation_api/myobject_de.ts b/tests/auto/cmake/linguist/test_translation_api/myobject_de.ts
new file mode 100644
index 000000000..fb4ee6f55
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_translation_api/myobject_de.ts
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="de_DE">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="myi18nobject.cpp" line="47"/>
+ <source>Hello, world!</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/cmake/linguist/test_translation_api/some_dir/some_include.h b/tests/auto/cmake/linguist/test_translation_api/some_dir/some_include.h
new file mode 100644
index 000000000..320e1f982
--- /dev/null
+++ b/tests/auto/cmake/linguist/test_translation_api/some_dir/some_include.h
@@ -0,0 +1,12 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Stephen Kelly <stephen.kelly@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef SOME_INCLUDE_H
+#define SOME_INCLUDE_H
+
+enum {
+ Non_Empty_File
+};
+
+#endif
diff --git a/tests/auto/cmake/test_add_translation_macro/CMakeLists.txt b/tests/auto/cmake/test_add_translation_macro/CMakeLists.txt
deleted file mode 100644
index a9fd32cea..000000000
--- a/tests/auto/cmake/test_add_translation_macro/CMakeLists.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-
-project(test_add_translation_macro)
-
-find_package(Qt5Core 5.0.0 REQUIRED)
-find_package(Qt5LinguistTools 5.0.0 REQUIRED)
-
-include_directories(
- ${Qt5Core_INCLUDE_DIRS}
-)
-
-add_definitions(${Qt5Core_DEFINITIONS})
-
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
-
-set(my_srcs myi18nobject.cpp)
-
-include_directories("${CMAKE_CURRENT_SOURCE_DIR}/some_dir")
-
-qt5_add_translation(qm_files myobject_de.ts OPTIONS -compress) # play around with OPTIONS
-
-add_executable(test_add_translation ${my_srcs} ${qm_files})
-target_link_libraries(test_add_translation ${Qt5Core_LIBRARIES})
diff --git a/tests/auto/cmake/test_add_translation_macro/myi18nobject.cpp b/tests/auto/cmake/test_add_translation_macro/myi18nobject.cpp
deleted file mode 100644
index ed51b9288..000000000
--- a/tests/auto/cmake/test_add_translation_macro/myi18nobject.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Stephen Kelly <stephen.kelly@kdab.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QDebug>
-#include <QCoreApplication>
-#include <QTranslator>
-
-#include "some_include.h"
-
-int main(int argc, char **argv)
-{
- QCoreApplication app(argc, argv);
- QTranslator *myappTranslator = new QTranslator;
- QString localeName = QLocale::system().name();
- myappTranslator->load("myobject_" + localeName + ".qm", qApp->applicationDirPath());
- myappTranslator->setObjectName("myobject_" + localeName);
- app.installTranslator(myappTranslator);
-
- qDebug() << QObject::tr("Hello, world!");
- return 0;
-}
diff --git a/tests/auto/cmake/test_add_translation_macro/myobject_de.ts b/tests/auto/cmake/test_add_translation_macro/myobject_de.ts
deleted file mode 100644
index 240ffb389..000000000
--- a/tests/auto/cmake/test_add_translation_macro/myobject_de.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1" language="de_DE">
-<context>
- <name>QObject</name>
- <message>
- <location filename="myi18nobject.cpp" line="49"/>
- <source>Hello, world!</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/tests/auto/cmake/test_add_translation_macro/some_dir/some_include.h b/tests/auto/cmake/test_add_translation_macro/some_dir/some_include.h
deleted file mode 100644
index 62accdf86..000000000
--- a/tests/auto/cmake/test_add_translation_macro/some_dir/some_include.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Stephen Kelly <stephen.kelly@kdab.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef SOME_INCLUDE_H
-#define SOME_INCLUDE_H
-
-enum {
- Non_Empty_File
-};
-
-#endif
diff --git a/tests/auto/cmake/test_create_translation_macro/CMakeLists.txt b/tests/auto/cmake/test_create_translation_macro/CMakeLists.txt
deleted file mode 100644
index 100d689c7..000000000
--- a/tests/auto/cmake/test_create_translation_macro/CMakeLists.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-
-project(test_create_translation_macros)
-
-find_package(Qt5Core 5.0.0 REQUIRED)
-find_package(Qt5LinguistTools 5.0.0 REQUIRED)
-
-include_directories(
- ${Qt5Core_INCLUDE_DIRS}
-)
-
-add_definitions(${Qt5Core_DEFINITIONS})
-
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
-
-set(my_srcs myi18nobject.cpp)
-
-include_directories("${CMAKE_CURRENT_SOURCE_DIR}/some_dir")
-
-qt5_create_translation(qm_files ${my_srcs} myobject_de.ts OPTIONS -pro-debug) # play around with OPTIONS
-
-add_executable(myobject ${my_srcs} ${qm_files})
-target_link_libraries(myobject ${Qt5Core_LIBRARIES})
diff --git a/tests/auto/cmake/test_create_translation_macro/myi18nobject.cpp b/tests/auto/cmake/test_create_translation_macro/myi18nobject.cpp
deleted file mode 100644
index ed51b9288..000000000
--- a/tests/auto/cmake/test_create_translation_macro/myi18nobject.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Stephen Kelly <stephen.kelly@kdab.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QDebug>
-#include <QCoreApplication>
-#include <QTranslator>
-
-#include "some_include.h"
-
-int main(int argc, char **argv)
-{
- QCoreApplication app(argc, argv);
- QTranslator *myappTranslator = new QTranslator;
- QString localeName = QLocale::system().name();
- myappTranslator->load("myobject_" + localeName + ".qm", qApp->applicationDirPath());
- myappTranslator->setObjectName("myobject_" + localeName);
- app.installTranslator(myappTranslator);
-
- qDebug() << QObject::tr("Hello, world!");
- return 0;
-}
diff --git a/tests/auto/cmake/test_create_translation_macro/myobject_de.ts b/tests/auto/cmake/test_create_translation_macro/myobject_de.ts
deleted file mode 100644
index 240ffb389..000000000
--- a/tests/auto/cmake/test_create_translation_macro/myobject_de.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1" language="de_DE">
-<context>
- <name>QObject</name>
- <message>
- <location filename="myi18nobject.cpp" line="49"/>
- <source>Hello, world!</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/tests/auto/cmake/test_create_translation_macro/some_dir/some_include.h b/tests/auto/cmake/test_create_translation_macro/some_dir/some_include.h
deleted file mode 100644
index 62accdf86..000000000
--- a/tests/auto/cmake/test_create_translation_macro/some_dir/some_include.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Stephen Kelly <stephen.kelly@kdab.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef SOME_INCLUDE_H
-#define SOME_INCLUDE_H
-
-enum {
- Non_Empty_File
-};
-
-#endif
diff --git a/tests/auto/cmake/test_uiplugin_module/CMakeLists.txt b/tests/auto/cmake/test_uiplugin_module/CMakeLists.txt
index 062a94960..edb62602d 100644
--- a/tests/auto/cmake/test_uiplugin_module/CMakeLists.txt
+++ b/tests/auto/cmake/test_uiplugin_module/CMakeLists.txt
@@ -1,11 +1,13 @@
-cmake_minimum_required(VERSION 3.0)
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
project(test_uiplugin_module)
-find_package(Qt5Widgets REQUIRED)
-find_package(Qt5UiPlugin REQUIRED)
+find_package(Qt6 COMPONENTS Widgets UiPlugin REQUIRED)
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
add_library(my_designer_plugin my_designer_plugin.cpp)
-target_link_libraries(my_designer_plugin Qt5::UiPlugin)
+target_link_libraries(my_designer_plugin Qt::UiPlugin)
diff --git a/tests/auto/cmake/test_uiplugin_module/my_designer_plugin.cpp b/tests/auto/cmake/test_uiplugin_module/my_designer_plugin.cpp
index 9cb423287..03a1f8a4a 100644
--- a/tests/auto/cmake/test_uiplugin_module/my_designer_plugin.cpp
+++ b/tests/auto/cmake/test_uiplugin_module/my_designer_plugin.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Stephen Kelly <steveire@gmail.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 Stephen Kelly <steveire@gmail.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtUiPlugin>
#include <QtUiPlugin/QtUiPlugin>
diff --git a/tests/auto/cmake/test_uiplugin_via_designer/CMakeLists.txt b/tests/auto/cmake/test_uiplugin_via_designer/CMakeLists.txt
index b8edeaa8e..520fbe111 100644
--- a/tests/auto/cmake/test_uiplugin_via_designer/CMakeLists.txt
+++ b/tests/auto/cmake/test_uiplugin_via_designer/CMakeLists.txt
@@ -1,25 +1,15 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-# Backward compatibility test that code prior to Qt 5.5 linking to
-# Qt5::Designer gets the required include directories for using
-# the QDesignerCustomWidgetInterface.
-
-cmake_minimum_required(VERSION 2.8.11)
+cmake_minimum_required(VERSION 3.16)
project(test_uiplugin_via_designer)
-find_package(Qt5Widgets REQUIRED)
-find_package(Qt5Xml REQUIRED)
-find_package(Qt5Designer REQUIRED)
+find_package(Qt6 COMPONENTS Widgets Xml Designer REQUIRED)
set(CMAKE_AUTOMOC ON)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-if (NOT CMAKE_VERSION VERSION_LESS 3.0)
- set(CMAKE_HAS_INTERFACE 1)
-else()
- set(CMAKE_HAS_INTERFACE 0)
-endif()
-add_definitions(-DTEST_UIPLUGIN_USAGE_REQUIREMENTS=${CMAKE_HAS_INTERFACE})
+add_definitions(-DTEST_UIPLUGIN_USAGE_REQUIREMENTS=1)
-add_library(my_designer_plugin my_designer_plugin.cpp)
-target_link_libraries(my_designer_plugin Qt5::Designer)
+add_library(my_uiplugin_via_designer my_designer_plugin.cpp)
+target_link_libraries(my_uiplugin_via_designer Qt::Designer)
diff --git a/tests/auto/cmake/test_uiplugin_via_designer/my_designer_plugin.cpp b/tests/auto/cmake/test_uiplugin_via_designer/my_designer_plugin.cpp
index be4a331f6..ff4640c39 100644
--- a/tests/auto/cmake/test_uiplugin_via_designer/my_designer_plugin.cpp
+++ b/tests/auto/cmake/test_uiplugin_via_designer/my_designer_plugin.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Stephen Kelly <steveire@gmail.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 Stephen Kelly <steveire@gmail.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtDesigner>
#include <QtDesigner/QtDesigner>
diff --git a/tests/auto/installed_cmake/installed_cmake.pro b/tests/auto/installed_cmake/installed_cmake.pro
deleted file mode 100644
index 14d0b283d..000000000
--- a/tests/auto/installed_cmake/installed_cmake.pro
+++ /dev/null
@@ -1,4 +0,0 @@
-include(../cmake/cmake.pro)
-
-CONFIG -= ctest_testcase
-CONFIG += ctest_testcase_installed
diff --git a/tests/auto/linguist/CMakeLists.txt b/tests/auto/linguist/CMakeLists.txt
index a619324bd..a651fd3ec 100644
--- a/tests/auto/linguist/CMakeLists.txt
+++ b/tests/auto/linguist/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from linguist.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(lrelease)
add_subdirectory(lconvert)
diff --git a/tests/auto/linguist/lconvert/CMakeLists.txt b/tests/auto/linguist/lconvert/CMakeLists.txt
index 800dcb793..7aeffbb8b 100644
--- a/tests/auto/linguist/lconvert/CMakeLists.txt
+++ b/tests/auto/linguist/lconvert/CMakeLists.txt
@@ -1,10 +1,17 @@
-# Generated from lconvert.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_lconvert Test:
#####################################################################
-qt_add_test(tst_lconvert
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_lconvert LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_lconvert
SOURCES
tst_lconvert.cpp
)
diff --git a/tests/auto/linguist/lconvert/data/makeplurals.pl b/tests/auto/linguist/lconvert/data/makeplurals.pl
index ced1429b9..b6c5894b6 100755
--- a/tests/auto/linguist/lconvert/data/makeplurals.pl
+++ b/tests/auto/linguist/lconvert/data/makeplurals.pl
@@ -1,31 +1,6 @@
#!/usr/bin/env perl
-#############################################################################
-##
-## Copyright (C) 2016 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of the test suite of the Qt Toolkit.
-##
-## $QT_BEGIN_LICENSE:GPL-EXCEPT$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 3 as published by the Free Software
-## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-## included in the packaging of this file. Please review the following
-## information to ensure the GNU General Public License requirements will
-## be met: https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
+# Copyright (C) 2016 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
sub makeit2($$$)
{
diff --git a/tests/auto/linguist/lconvert/data/test-trans_seg.ts.out b/tests/auto/linguist/lconvert/data/test-trans_seg.ts.out
new file mode 100644
index 000000000..962dd6534
--- /dev/null
+++ b/tests/auto/linguist/lconvert/data/test-trans_seg.ts.out
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="de">
+<context>
+ <name></name>
+ <message id="hello_world">
+ <source>Hello world!</source>
+ <translation type="unfinished">Hallo Welt!</translation>
+ </message>
+ <message>
+ <location filename="self" line="137"/>
+ <source>A standout centrepiece for any occasion. Use the temperature sensor for best results.
+
+Serve with roast tomatoes and hasselback potatoes.</source>
+ <translation type="unfinished">Un centro de mesa destacado para cualquier ocasión.Utilice el sensor de temperatura para obtener mejores resultados.
+
+Acompañe con tomates asados y papas horneadas tipo hassleback.</translation>
+ </message>
+ <message>
+ <location filename="self" line="137"/>
+ <source>Two pieces</source>
+ <translation type="unfinished">Zwei Stueck</translation>
+ </message>
+ <message id="test">
+ <source>Hello!</source>
+ <translation type="unfinished">Hallo!</translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/linguist/lconvert/data/test-trans_seg.xlf b/tests/auto/linguist/lconvert/data/test-trans_seg.xlf
new file mode 100644
index 000000000..4cff2bc56
--- /dev/null
+++ b/tests/auto/linguist/lconvert/data/test-trans_seg.xlf
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xliff
+ xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+ <file datatype="plaintext" original="self" source-language="en" target-language="de">
+ <body>
+ <trans-unit id="hello_world"
+ xmlns:sap="urn:x-sap:sls-mlt">
+ <source>Hello world!</source>
+ <target>Hallo Welt!</target>
+ </trans-unit>
+ <trans-unit id="_msg2394">
+ <source xml:space="preserve">A standout centrepiece for any occasion. Use the temperature sensor for best results.
+
+Serve with roast tomatoes and hasselback potatoes.</source>
+ <seg-source><mrk mtype="seg" mid="605">A standout centrepiece for any occasion.</mrk><mrk mtype="seg" mid="606">Use the temperature sensor for best results.</mrk>
+
+ <mrk mtype="seg" mid="607">Serve with roast tomatoes and hasselback potatoes.</mrk></seg-source>
+ <target state="signed-off" xml:space="preserve"><mrk mtype="seg" mid="605">Un centro de mesa destacado para cualquier ocasión.</mrk><mrk mtype="seg" mid="606">Utilice el sensor de temperatura para obtener mejores resultados.</mrk>
+
+<mrk mtype="seg" mid="607">Acompañe con tomates asados y papas horneadas tipo hassleback.</mrk></target>
+ <context-group purpose="location">
+ <context context-type="linenumber">137</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="_msg2395">
+ <source xml:space="preserve">Two pieces</source>
+ <seg-source>
+ <mrk mtype="seg" mid="1">Two</mrk> <mrk mtype="seg" mid="2">pieces</mrk>
+ </seg-source>
+ <target state="signed-off" xml:space="preserve"><mrk mtype="seg" mid="1">Zwei</mrk> <mrk mtype="seg" mid="2">Stueck</mrk></target>
+ <context-group purpose="location">
+ <context context-type="linenumber">137</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="test"
+ xmlns:sap="urn:x-sap:sls-mlt">
+ <source>Hello!</source>
+ <target>Hallo!</target>
+ </trans-unit>
+ </body>
+ </file>
+</xliff>
diff --git a/tests/auto/linguist/lconvert/data/untranslated.qm b/tests/auto/linguist/lconvert/data/untranslated.qm
new file mode 100644
index 000000000..e31d2553a
--- /dev/null
+++ b/tests/auto/linguist/lconvert/data/untranslated.qm
Binary files differ
diff --git a/tests/auto/linguist/lconvert/lconvert.pro b/tests/auto/linguist/lconvert/lconvert.pro
deleted file mode 100644
index e373d75cc..000000000
--- a/tests/auto/linguist/lconvert/lconvert.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-CONFIG += testcase
-QT = core testlib
-
-TARGET = tst_lconvert
-
-#HEADERS += testlupdate.h
-SOURCES += tst_lconvert.cpp
-# testlupdate.cpp
diff --git a/tests/auto/linguist/lconvert/tst_lconvert.cpp b/tests/auto/linguist/lconvert/tst_lconvert.cpp
index 2b3729d6c..5f67cabae 100644
--- a/tests/auto/linguist/lconvert/tst_lconvert.cpp
+++ b/tests/auto/linguist/lconvert/tst_lconvert.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtCore/QFile>
@@ -36,7 +11,7 @@ class tst_lconvert : public QObject
public:
tst_lconvert()
: dataDir(QFINDTESTDATA("data/"))
- , lconvert(QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/lconvert") {}
+ , lconvert(QLibraryInfo::path(QLibraryInfo::BinariesPath) + "/lconvert") {}
private slots:
void initTestCase();
@@ -170,10 +145,10 @@ void tst_lconvert::convertChain(const QString &_inFileName, const QString &_outF
args << "-if" << stations[i] << "-i" << "-" << "-of" << stations[i + 1];
cvts.at(i)->start(lconvert, args, QIODevice::ReadWrite | QIODevice::Text);
}
- for (QProcess *cvt : qAsConst(cvts))
+ for (QProcess *cvt : std::as_const(cvts))
QVERIFY2(cvt->waitForStarted(), qPrintable(cvt->errorString()));
int st = 0;
- for (QProcess *cvt : qAsConst(cvts))
+ for (QProcess *cvt : std::as_const(cvts))
doWait(cvt, ++st);
if (!QTest::currentTestFailed())
@@ -225,6 +200,7 @@ void tst_lconvert::converts_data()
QTest::newRow("broken utf8") << "test-broken-utf8.po" << "test-broken-utf8.po.out" << "po";
QTest::newRow("line joins") << "test-slurp.po" << "test-slurp.po.out" << "po";
QTest::newRow("escapes") << "test-escapes.po" << "test-escapes.po.out" << "po";
+ QTest::newRow("xlf seg") << "test-trans_seg.xlf" << "test-trans_seg.ts.out" << "ts";
}
void tst_lconvert::converts()
@@ -282,6 +258,7 @@ void tst_lconvert::roundtrips_data()
QStringList tsPoTs; tsPoTs << "ts" << "po" << "ts";
QStringList tsXlfTs; tsXlfTs << "ts" << "xlf" << "ts";
QStringList tsQmTs; tsQmTs << "ts" << "qm" << "ts";
+ QStringList qmTsQm; qmTsQm << "qm" << "ts" << "qm";
QList<QStringList> noArgs;
QList<QStringList> filterPoArgs; filterPoArgs << QStringList() << (QStringList() << "-drop-tag" << "po:*");
@@ -318,6 +295,7 @@ void tst_lconvert::roundtrips_data()
QTest::newRow("ts-po-ts (endless loop)") << "endless-po-loop.ts" << tsPoTs << noArgs;
QTest::newRow("ts-qm-ts (whitespace)") << "whitespace.ts" << tsQmTs << noArgs;
+ QTest::newRow("qm-ts-qm (untranslated)") << "untranslated.qm" << qmTsQm << noArgs;
}
void tst_lconvert::roundtrips()
diff --git a/tests/auto/linguist/linguist.pro b/tests/auto/linguist/linguist.pro
deleted file mode 100644
index 90e2d367d..000000000
--- a/tests/auto/linguist/linguist.pro
+++ /dev/null
@@ -1,2 +0,0 @@
-TEMPLATE = subdirs
-SUBDIRS = lrelease lconvert lupdate
diff --git a/tests/auto/linguist/lrelease/CMakeLists.txt b/tests/auto/linguist/lrelease/CMakeLists.txt
index 6de654340..2e48a1b70 100644
--- a/tests/auto/linguist/lrelease/CMakeLists.txt
+++ b/tests/auto/linguist/lrelease/CMakeLists.txt
@@ -1,10 +1,17 @@
-# Generated from lrelease.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_lrelease Test:
#####################################################################
-qt_add_test(tst_lrelease
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_lrelease LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_lrelease
SOURCES
tst_lrelease.cpp
)
diff --git a/tests/auto/linguist/lrelease/lrelease.pro b/tests/auto/linguist/lrelease/lrelease.pro
deleted file mode 100644
index ba69b7ff3..000000000
--- a/tests/auto/linguist/lrelease/lrelease.pro
+++ /dev/null
@@ -1,5 +0,0 @@
-CONFIG += testcase
-QT = core testlib
-TARGET = tst_lrelease
-
-SOURCES += tst_lrelease.cpp
diff --git a/tests/auto/linguist/lrelease/testdata/dupes.errors b/tests/auto/linguist/lrelease/testdata/dupes.errors
index 9af5f0542..ed4394d7f 100644
--- a/tests/auto/linguist/lrelease/testdata/dupes.errors
+++ b/tests/auto/linguist/lrelease/testdata/dupes.errors
@@ -2,3 +2,5 @@ Warning: dropping duplicate messages in '.*testdata/dupes\.qm':
\* Context: FindDialog
\* Source: Text not found
+\* Line in .ts file: 11
+\* Duplicate at line: 16
diff --git a/tests/auto/linguist/lrelease/tst_lrelease.cpp b/tests/auto/linguist/lrelease/tst_lrelease.cpp
index b2ac3dc5d..9763c087f 100644
--- a/tests/auto/linguist/lrelease/tst_lrelease.cpp
+++ b/tests/auto/linguist/lrelease/tst_lrelease.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QDir>
#include <QtCore/QDebug>
@@ -39,7 +14,7 @@ class tst_lrelease : public QObject
public:
tst_lrelease()
- : lrelease(QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/lrelease")
+ : lrelease(QLibraryInfo::path(QLibraryInfo::BinariesPath) + "/lrelease")
, dataDir(QFINDTESTDATA("testdata/"))
{}
diff --git a/tests/auto/linguist/lupdate/.prev_CMakeLists.txt b/tests/auto/linguist/lupdate/.prev_CMakeLists.txt
deleted file mode 100644
index 405663002..000000000
--- a/tests/auto/linguist/lupdate/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-# Generated from lupdate.pro.
-
-#####################################################################
-## tst_lupdate Test:
-#####################################################################
-
-qt_add_test(tst_lupdate
- SOURCES
- tst_lupdate.cpp
-)
diff --git a/tests/auto/linguist/lupdate/CMakeLists.txt b/tests/auto/linguist/lupdate/CMakeLists.txt
index 27c96e9f8..ee57b32f9 100644
--- a/tests/auto/linguist/lupdate/CMakeLists.txt
+++ b/tests/auto/linguist/lupdate/CMakeLists.txt
@@ -1,17 +1,29 @@
-# Generated from lupdate.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_lupdate LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
-# special case begin
if(CMAKE_VERSION VERSION_LESS "3.19" AND MSVC AND QT_FEATURE_debug_and_release)
message(WARNING "tst_lupdate will not be built in this configuration.")
return()
endif()
-# special case end
#####################################################################
## tst_lupdate Test:
#####################################################################
-qt_add_test(tst_lupdate
+qt_internal_add_test(tst_lupdate
SOURCES
tst_lupdate.cpp
+ LIBRARIES
+ Qt::Tools
+ Qt::CorePrivate
)
+
+# The recursive tests take a bit longer for the clang-based parser.
+# Increase the test timeout.
+set_property(TEST tst_lupdate APPEND PROPERTY ENVIRONMENT "QTEST_FUNCTION_TIMEOUT=900000")
diff --git a/tests/auto/linguist/lupdate/lupdate.pro b/tests/auto/linguist/lupdate/lupdate.pro
deleted file mode 100644
index 5ed1ed73c..000000000
--- a/tests/auto/linguist/lupdate/lupdate.pro
+++ /dev/null
@@ -1,6 +0,0 @@
-CONFIG += testcase
-QT = core testlib
-
-TARGET = tst_lupdate
-
-SOURCES += tst_lupdate.cpp
diff --git a/tests/auto/linguist/lupdate/testdata/good/backslashes/src/main.cpp b/tests/auto/linguist/lupdate/testdata/good/backslashes/src/main.cpp
index e9976c987..68d436012 100644
--- a/tests/auto/linguist/lupdate/testdata/good/backslashes/src/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/backslashes/src/main.cpp
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
@@ -33,11 +33,12 @@
//
//
-QString qt_detectRTLLanguage()
+#include <QCoreApplication>
+
+bool qt_detectRTLLanguage()
{
- return QApplication::tr("QT_LAYOUT_DIRECTION",
+ return QCoreApplication::tr("QT_LAYOUT_DIRECTION",
"Translate this string to the string 'LTR' in left-to-right"
" languages or to 'RTL' in right-to-left languages (such as Hebrew"
" and Arabic) to get proper widget layout.") == QLatin1String("RTL");
}
-
diff --git a/tests/auto/linguist/lupdate/testdata/good/backslashes/ts/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/backslashes/ts/project.ts.result
index 3951a6461..90ac88d52 100644
--- a/tests/auto/linguist/lupdate/testdata/good/backslashes/ts/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/backslashes/ts/project.ts.result
@@ -2,9 +2,9 @@
<!DOCTYPE TS>
<TS version="2.1">
<context>
- <name>QApplication</name>
+ <name>QCoreApplication</name>
<message>
- <location filename="../src/main.cpp" line="38"/>
+ <location filename="../src/main.cpp" line="40"/>
<source>QT_LAYOUT_DIRECTION</source>
<comment>Translate this string to the string &apos;LTR&apos; in left-to-right languages or to &apos;RTL&apos; in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment>
<translation type="unfinished"></translation>
diff --git a/tests/auto/linguist/lupdate/testdata/good/cmdline_order/a.h b/tests/auto/linguist/lupdate/testdata/good/cmdline_order/a.h
index 5b8259624..d0bec4dcd 100644
--- a/tests/auto/linguist/lupdate/testdata/good/cmdline_order/a.h
+++ b/tests/auto/linguist/lupdate/testdata/good/cmdline_order/a.h
@@ -1,29 +1,29 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#define XX QT_TRANSLATE_NOOP("aaa", "some text")
diff --git a/tests/auto/linguist/lupdate/testdata/good/cmdline_order/b.h b/tests/auto/linguist/lupdate/testdata/good/cmdline_order/b.h
index c93eb9f88..ce5f6082e 100644
--- a/tests/auto/linguist/lupdate/testdata/good/cmdline_order/b.h
+++ b/tests/auto/linguist/lupdate/testdata/good/cmdline_order/b.h
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include "a.h"
diff --git a/tests/auto/linguist/lupdate/testdata/good/cmdline_recurse/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/cmdline_recurse/project.ts.result
index 98a695c3b..99311232f 100644
--- a/tests/auto/linguist/lupdate/testdata/good/cmdline_recurse/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/cmdline_recurse/project.ts.result
@@ -4,12 +4,12 @@
<context>
<name>FindDialog</name>
<message>
- <location filename="project.ui" line="44"/>
+ <location filename="project.ui" line="19"/>
<source>Qt Assistant - Finn text</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="project.ui" line="47"/>
+ <location filename="project.ui" line="22"/>
<source>Finn tekst</source>
<translation type="unfinished"></translation>
</message>
diff --git a/tests/auto/linguist/lupdate/testdata/good/codecforsrc/main.cpp b/tests/auto/linguist/lupdate/testdata/good/codecforsrc/main.cpp
index 169c63cd1..cf0f6665a 100644
--- a/tests/auto/linguist/lupdate/testdata/good/codecforsrc/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/codecforsrc/main.cpp
@@ -1,36 +1,36 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QApplication>
-#include <QtGui>
-#include <QtCore>
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtWidgets/QApplication>
+#include <QtGui>
+#include <QtCore>
+#include <QtWidgets/QLabel>
+#include <QtWidgets/QBoxLayout>
int main(int argc, char **argv)
{
QApplication a(argc, argv);
@@ -40,8 +40,8 @@ int main(int argc, char **argv)
QLabel label1(QObject::tr("abc", "ascii"), &w);
QLabel label2(QObject::tr("æøå", "utf-8"), &w);
QLabel label2a(QObject::tr("\303\246\303\270\303\245", "utf-8 oct"), &w);
- QLabel label3(QObject::trUtf8("Für Élise", "trUtf8"), &w);
- QLabel label3a(QObject::trUtf8("F\303\274r \303\211lise", "trUtf8 oct"), &w);
+ QLabel label3(QObject::tr("Für Élise", "trUtf8"), &w); // trUtf8 is obsolete
+ QLabel label3a(QObject::tr("F\303\274r \303\211lise", "trUtf8 oct"), &w); // trUtf8 is obsolete
QBoxLayout *ly = new QVBoxLayout(&w);
ly->addWidget(&label1);
diff --git a/tests/auto/linguist/lupdate/testdata/good/from_subdir/src/main.cpp b/tests/auto/linguist/lupdate/testdata/good/from_subdir/src/main.cpp
index e96716d1f..b6ee6b1ba 100644
--- a/tests/auto/linguist/lupdate/testdata/good/from_subdir/src/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/from_subdir/src/main.cpp
@@ -1,37 +1,38 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtWidgets/QApplication>
#include "main.h"
int main(int argc, char **argv)
{
- return QApplication::tr("string in main.cpp");
+ QString s1 = QApplication::tr("string in main.cpp");
+ return 0;
}
diff --git a/tests/auto/linguist/lupdate/testdata/good/from_subdir/src/main.h b/tests/auto/linguist/lupdate/testdata/good/from_subdir/src/main.h
index 86dac7e40..4207ffd5e 100644
--- a/tests/auto/linguist/lupdate/testdata/good/from_subdir/src/main.h
+++ b/tests/auto/linguist/lupdate/testdata/good/from_subdir/src/main.h
@@ -1,32 +1,32 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
-QT_TRANSLATE_NOOP("QApplication", "string in main.h")
+#include <QtCore>
+char dummy[] = QT_TRANSLATE_NOOP("QApplication", "string in main.h");
diff --git a/tests/auto/linguist/lupdate/testdata/good/heuristics/expectedoutput.txt b/tests/auto/linguist/lupdate/testdata/good/heuristics/expectedoutput.txt
index 1eed403b7..f8c994f34 100644
--- a/tests/auto/linguist/lupdate/testdata/good/heuristics/expectedoutput.txt
+++ b/tests/auto/linguist/lupdate/testdata/good/heuristics/expectedoutput.txt
@@ -1,5 +1,4 @@
Updating 'project\.ts'\.\.\.
- Found 3 source text\(s\) \(3 new and 0 already existing\)
- Removed 5 obsolete entries
- Number heuristic provided 1 translation\(s\)
+ Found 2 source text\(s\) \(2 new and 0 already existing\)
+ Removed 4 obsolete entries
Same-text heuristic provided 1 translation\(s\)
diff --git a/tests/auto/linguist/lupdate/testdata/good/heuristics/main.cpp b/tests/auto/linguist/lupdate/testdata/good/heuristics/main.cpp
index 2d42d7336..50e2aac78 100644
--- a/tests/auto/linguist/lupdate/testdata/good/heuristics/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/heuristics/main.cpp
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
@@ -36,9 +36,6 @@ class A: public QObject {
Q_OBJECT
void foo()
{
- // number Heuristics
- tr("version 2.0 now");
-
// same text match
tr("this is the matched same text");
diff --git a/tests/auto/linguist/lupdate/testdata/good/heuristics/project.ts.before b/tests/auto/linguist/lupdate/testdata/good/heuristics/project.ts.before
index e72debed9..2d1b201a9 100644
--- a/tests/auto/linguist/lupdate/testdata/good/heuristics/project.ts.before
+++ b/tests/auto/linguist/lupdate/testdata/good/heuristics/project.ts.before
@@ -2,14 +2,6 @@
<!DOCTYPE TS>
<TS version="2.0" language="de_DE">
<context>
- <name>A</name>
- <message>
- <location filename="main.cpp" line="53"/>
- <source>version 1.0 now</source>
- <translation>teraz wersja 1.0</translation>
- </message>
-</context>
-<context>
<name>B</name>
<message>
<location filename="main.cpp" line="56"/>
diff --git a/tests/auto/linguist/lupdate/testdata/good/heuristics/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/heuristics/project.ts.result
index 351bdff7d..3c150a30c 100644
--- a/tests/auto/linguist/lupdate/testdata/good/heuristics/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/heuristics/project.ts.result
@@ -5,16 +5,11 @@
<name>A</name>
<message>
<location filename="main.cpp" line="40"/>
- <source>version 2.0 now</source>
- <translation type="unfinished">teraz wersja 1.0 {2.0 ?}</translation>
- </message>
- <message>
- <location filename="main.cpp" line="43"/>
<source>this is the matched same text</source>
<translation type="unfinished">der same-text-treffer</translation>
</message>
<message>
- <location filename="main.cpp" line="46"/>
+ <location filename="main.cpp" line="43"/>
<source>this is the non-matched same text</source>
<translation type="unfinished"></translation>
</message>
diff --git a/tests/auto/linguist/lupdate/testdata/good/lacksqobject/main.cpp b/tests/auto/linguist/lupdate/testdata/good/lacksqobject/main.cpp
index d8e7db2a8..640f208ad 100644
--- a/tests/auto/linguist/lupdate/testdata/good/lacksqobject/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/lacksqobject/main.cpp
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
diff --git a/tests/auto/linguist/lupdate/testdata/good/lacksqobject_clang_parser/expectedoutput.txt b/tests/auto/linguist/lupdate/testdata/good/lacksqobject_clang_parser/expectedoutput.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/lacksqobject_clang_parser/expectedoutput.txt
diff --git a/tests/auto/linguist/lupdate/testdata/good/lacksqobject_clang_parser/main.cpp b/tests/auto/linguist/lupdate/testdata/good/lacksqobject_clang_parser/main.cpp
new file mode 100644
index 000000000..640f208ad
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/lacksqobject_clang_parser/main.cpp
@@ -0,0 +1,75 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// IMPORTANT!!!! If you want to add testdata to this file,
+// always add it to the end in order to not change the linenumbers of translations!!!
+
+#define QTCORE <QtCore>
+#include QTCORE // Hidden from lupdate, but compiles
+
+//
+// Test 'lacks Q_OBJECT' reporting on namespace scopes
+//
+
+class B : public QObject {
+ //Q_OBJECT
+ void foo();
+};
+
+void B::foo() {
+ tr("Bla", "::B");
+}
+
+
+class C : public QObject {
+ //Q_OBJECT
+ void foo() {
+ tr("Bla", "::C");
+ }
+};
+
+
+namespace nsB {
+
+ class B : public QObject {
+ //Q_OBJECT
+ void foo();
+ };
+
+ void B::foo() {
+ tr("Bla", "nsB::B");
+ }
+
+ class C : public QObject {
+ //Q_OBJECT
+ void foo() {
+ tr("Bla", "nsB::C");
+ }
+ };
+}
+
diff --git a/tests/auto/linguist/lupdate/testdata/good/lacksqobject_clang_parser/project.pro b/tests/auto/linguist/lupdate/testdata/good/lacksqobject_clang_parser/project.pro
new file mode 100644
index 000000000..759bea068
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/lacksqobject_clang_parser/project.pro
@@ -0,0 +1,3 @@
+SOURCES = main.cpp
+
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/lacksqobject_clang_parser/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/lacksqobject_clang_parser/project.ts.result
new file mode 100644
index 000000000..66a33a320
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/lacksqobject_clang_parser/project.ts.result
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="main.cpp" line="45"/>
+ <source>Bla</source>
+ <comment>::B</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="52"/>
+ <source>Bla</source>
+ <comment>::C</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="65"/>
+ <source>Bla</source>
+ <comment>nsB::B</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="71"/>
+ <source>Bla</source>
+ <comment>nsB::C</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/linguist/lupdate/testdata/good/merge_ordering/foo.cpp b/tests/auto/linguist/lupdate/testdata/good/merge_ordering/foo.cpp
index d03a1a009..d94c031ad 100644
--- a/tests/auto/linguist/lupdate/testdata/good/merge_ordering/foo.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/merge_ordering/foo.cpp
@@ -1,32 +1,32 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
// The first line in this file should always be empty, its part of the test!!
class Foo : public QObject
{
@@ -35,8 +35,8 @@ public:
Foo();
};
-Foo::Foo(MainWindow *parent)
- : QObject(parent)
+Foo::Foo()
+ : QObject()
{
tr("This is the first entry.");
tr("A second message."); tr("And a second one on the same line.");
diff --git a/tests/auto/linguist/lupdate/testdata/good/merge_versions/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/merge_versions/project.ts.result
index 51a15683d..9f5c925cb 100644
--- a/tests/auto/linguist/lupdate/testdata/good/merge_versions/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/merge_versions/project.ts.result
@@ -4,10 +4,12 @@
<context>
<name>FindDialog</name>
<message>
+ <location filename="project.ui" line="18"/>
<source>Qt Assistant - Finn text</source>
<translation></translation>
</message>
<message>
+ <location filename="project.ui" line="21"/>
<source>Finn tekst</source>
<translation type="unfinished"></translation>
</message>
diff --git a/tests/auto/linguist/lupdate/testdata/good/merge_versions/project.ui b/tests/auto/linguist/lupdate/testdata/good/merge_versions/project.ui
index db98879cd..93c36b08e 100644
--- a/tests/auto/linguist/lupdate/testdata/good/merge_versions/project.ui
+++ b/tests/auto/linguist/lupdate/testdata/good/merge_versions/project.ui
@@ -1,32 +1,8 @@
<ui version="4.0" >
- <author></author>
- <comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<exportmacro></exportmacro>
<class>FindDialog</class>
<widget class="QWidget" name="FindDialog" >
diff --git a/tests/auto/linguist/lupdate/testdata/good/merge_whitespace/main.cpp b/tests/auto/linguist/lupdate/testdata/good/merge_whitespace/main.cpp
index dcf785bfe..afb5028e1 100644
--- a/tests/auto/linguist/lupdate/testdata/good/merge_whitespace/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/merge_whitespace/main.cpp
@@ -1,32 +1,32 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QApplication>
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
+#include <QtWidgets/QApplication>
#include <QDebug>
int main(int argc, char **argv)
diff --git a/tests/auto/linguist/lupdate/testdata/good/mergecpp/finddialog.cpp b/tests/auto/linguist/lupdate/testdata/good/mergecpp/finddialog.cpp
index 977445d23..afae71c03 100644
--- a/tests/auto/linguist/lupdate/testdata/good/mergecpp/finddialog.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/mergecpp/finddialog.cpp
@@ -1,43 +1,45 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-// The first line in this file should always be empty, its part of the test!!
-
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
+#include <QtWidgets/QDialog>
+#include <QtWidgets/QMainWindow>
class FindDialog : public QDialog
{
Q_OBJECT
public:
- FindDialog(MainWindow *parent);
+ FindDialog(QMainWindow *parent);
void reset();
};
-
-FindDialog::FindDialog(MainWindow *parent)
+FindDialog::FindDialog(QMainWindow *parent)
: QDialog(parent)
{
QString trans = tr("Enter the text you want to find.");
diff --git a/tests/auto/linguist/lupdate/testdata/good/mergecpp/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/mergecpp/project.ts.result
index 7e23b16d6..427f9c710 100644
--- a/tests/auto/linguist/lupdate/testdata/good/mergecpp/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/mergecpp/project.ts.result
@@ -4,19 +4,19 @@
<context>
<name></name>
<message id="xx_hello">
- <location filename="finddialog.cpp" line="57"/>
+ <location filename="finddialog.cpp" line="59"/>
<source>Hello</source>
<translation>Hallo</translation>
<extra-meta>matter</extra-meta>
</message>
<message id="xx_world">
- <location filename="finddialog.cpp" line="60"/>
+ <location filename="finddialog.cpp" line="62"/>
<source>New world</source>
<oldsource>World</oldsource>
<translation type="unfinished">Welt</translation>
</message>
<message id="qtn_virtual">
- <location filename="finddialog.cpp" line="68"/>
+ <location filename="finddialog.cpp" line="70"/>
<source></source>
<extracomment>A message without source string</extracomment>
<translation></translation>
@@ -31,27 +31,27 @@
<translation></translation>
</message>
<message>
- <location filename="finddialog.cpp" line="43"/>
+ <location filename="finddialog.cpp" line="45"/>
<source>Enter the text you want to find.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="finddialog.cpp" line="44"/>
+ <location filename="finddialog.cpp" line="46"/>
<source>Search reached end of the document</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="finddialog.cpp" line="45"/>
+ <location filename="finddialog.cpp" line="47"/>
<source>Search reached start of the document</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="finddialog.cpp" line="46"/>
+ <location filename="finddialog.cpp" line="48"/>
<source>Text not found</source>
<translation>text not found (in chinese)</translation>
</message>
<message numerus="yes">
- <location filename="finddialog.cpp" line="51"/>
+ <location filename="finddialog.cpp" line="53"/>
<source>%n item(s)</source>
<comment>merge from singular to plural form</comment>
<translation type="unfinished">
@@ -59,7 +59,7 @@
</translation>
</message>
<message numerus="yes">
- <location filename="finddialog.cpp" line="52"/>
+ <location filename="finddialog.cpp" line="54"/>
<source>%n item(s)</source>
<comment>merge from a finished singular form to an unfinished plural form</comment>
<translation type="unfinished">
@@ -67,7 +67,7 @@
</translation>
</message>
<message id="new_id">
- <location filename="finddialog.cpp" line="64"/>
+ <location filename="finddialog.cpp" line="66"/>
<source>this is just some text</source>
<translation type="unfinished">Unfertige Uebersetzung</translation>
</message>
diff --git a/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/finddialog.cpp b/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/finddialog.cpp
index 1e2de849e..d9c8c512d 100644
--- a/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/finddialog.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/finddialog.cpp
@@ -1,43 +1,43 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include "finddialog.h"
-#include "mainwindow.h"
-#include "tabbedbrowser.h"
-#include "helpwindow.h"
-#include <QTextBrowser>
+
+
+
+#include <QtWidgets/QTextBrowser>
#include <QTextCursor>
-#include <QStatusBar>
-#include <QLineEdit>
+#include <QtWidgets/QStatusBar>
+#include <QtWidgets/QLineEdit>
#include <QDateTime>
-#include <QGridLayout>
-
+#include <QtWidgets/QGridLayout>
+//#include <QtWidgets/QDialog>
CaseSensitiveModel::CaseSensitiveModel(int rows, int columns, QObject *parent)
: QStandardItemModel(rows, columns, parent)
{}
@@ -50,56 +50,56 @@ QModelIndexList CaseSensitiveModel::match(const QModelIndex &start, int role, co
return QStandardItemModel::match(start, role, value, hits, flags);
}
-FindDialog::FindDialog(MainWindow *parent)
+FindDialog::FindDialog(QMainWindow *parent)
: QDialog(parent)
{
- contentsWidget = new QWidget(this);
- ui.setupUi(contentsWidget);
- ui.comboFind->setModel(new CaseSensitiveModel(0, 1, ui.comboFind));
+ auto contentsWidget = new QWidget(this);
+ //ui.setupUi(contentsWidget);
+ //ui.comboFind->setModel(new CaseSensitiveModel(0, 1, ui.comboFind));
QVBoxLayout *l = new QVBoxLayout(this);
l->setContentsMargins(QMargins());
l->setSpacing(0);
l->addWidget(contentsWidget);
- lastBrowser = 0;
- onceFound = false;
- findExpr.clear();
+ auto lastBrowser = 0;
+ auto onceFound = false;
+ //findExpr.clear();
- sb = new QStatusBar(this);
+ auto sb = new QStatusBar(this);
l->addWidget(sb);
sb->showMessage(tr("Enter the text you want to find."));
- connect(ui.findButton, SIGNAL(clicked()), this, SLOT(findButtonClicked()));
- connect(ui.closeButton, SIGNAL(clicked()), this, SLOT(reject()));
+ //connect(ui.findButton, SIGNAL(clicked()), this, SLOT(findButtonClicked()));
+ //connect(ui.closeButton, SIGNAL(clicked()), this, SLOT(reject()));
}
-FindDialog::~FindDialog()
-{
-}
+//FindDialog::~FindDialog()
+//{
+//}
-void FindDialog::findButtonClicked()
-{
- doFind(ui.radioForward->isChecked());
-}
+//void FindDialog::findButtonClicked()
+//{
+// doFind(ui.radioForward->isChecked());
+//}
void FindDialog::doFind(bool forward)
{
- QTextBrowser *browser = static_cast<QTextBrowser*>(mainWindow()->browsers()->currentBrowser());
- sb->clearMessage();
+ QTextBrowser *browser = NULL;// = static_cast<QTextBrowser*>(mainWindow()->browsers()->currentBrowser());
+ //sb->clearMessage();
- if (ui.comboFind->currentText() != findExpr || lastBrowser != browser)
- onceFound = false;
- findExpr = ui.comboFind->currentText();
+ //if (ui.comboFind->currentText() != findExpr || lastBrowser != browser)
+ // onceFound = false;
+ //findExpr = ui.comboFind->currentText();
- QTextDocument::FindFlags flags = 0;
+ QTextDocument::FindFlags flags;// = 0;
- if (ui.checkCase->isChecked())
- flags |= QTextDocument::FindCaseSensitively;
+ //if (ui.checkCase->isChecked())
+ // flags |= QTextDocument::FindCaseSensitively;
- if (ui.checkWords->isChecked())
- flags |= QTextDocument::FindWholeWords;
+ //if (ui.checkWords->isChecked())
+ // flags |= QTextDocument::FindWholeWords;
QTextCursor c = browser->textCursor();
if (!c.hasSelection()) {
@@ -114,28 +114,28 @@ void FindDialog::doFind(bool forward)
QTextDocument::FindFlags options;
if (forward == false)
flags |= QTextDocument::FindBackward;
-
- QTextCursor found = browser->document()->find(findExpr, c, flags);
+ bool onceFound = true;
+ QTextCursor found;// = browser->document()->find(findExpr, c, flags);
if (found.isNull()) {
if (onceFound) {
if (forward)
- statusMessage(tr("Search reached end of the document"));
+ auto a = tr("Search reached end of the document");//statusMessage(tr("Search reached end of the document"));
else
- statusMessage(tr("Search reached start of the document"));
+ auto aa = tr("Search reached start of the document");//statusMessage(tr("Search reached start of the document"));
} else {
- statusMessage(tr( "Text not found" ));
+ auto aaa = tr( "Text not found" ); //statusMessage(tr( "Text not found" ));
}
} else {
browser->setTextCursor(found);
}
onceFound |= !found.isNull();
- lastBrowser = browser;
+ auto lastBrowser = browser;
}
-bool FindDialog::hasFindExpression() const
+void FindDialog::hasFindExpression() const
{
// statusMessage(tr( "Should be obsolete" ));
//% "This is some random text"
- qtTrId("keep_id")
+ qtTrId("keep_id");
}
diff --git a/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/finddialog.h b/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/finddialog.h
new file mode 100644
index 000000000..9b2d0d3d1
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/finddialog.h
@@ -0,0 +1,66 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtWidgets/QTextBrowser>
+#include <QTextCursor>
+#include <QtWidgets/QStatusBar>
+#include <QtWidgets/QLineEdit>
+#include <QDateTime>
+#include <QtWidgets/QGridLayout>
+#include <QtWidgets/QDialog>
+#include <QtGui>
+#include <QtWidgets/QMainWindow>
+
+class FindDialog : public QDialog
+{
+ Q_OBJECT
+public:
+ FindDialog(QWidget *parent = 0);
+ FindDialog(QMainWindow *parent = 0);
+ void doFind(bool forward);
+ void hasFindExpression() const;
+
+signals:
+
+public slots:
+ void find();
+
+private slots:
+ void emitFindNext();
+ void verify();
+
+private:
+ bool m_redText = false;
+};
+
+
+class CaseSensitiveModel: public QStandardItemModel
+{
+ CaseSensitiveModel(int rows, int columns, QObject *parent);
+ QModelIndexList match(const QModelIndex &start, int role, const QVariant &value, int hits, Qt::MatchFlags flags) const;
+};
diff --git a/tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/finddialog.cpp b/tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/finddialog.cpp
index dd5888043..e98111b69 100644
--- a/tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/finddialog.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/finddialog.cpp
@@ -1,42 +1,42 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include "finddialog.h"
-#include "mainwindow.h"
-#include "tabbedbrowser.h"
-#include "helpwindow.h"
+//#include "mainwindow.h"
+//#include "tabbedbrowser.h"
+//#include "helpwindow.h"
-#include <QTextBrowser>
+#include <QtWidgets/QTextBrowser>
#include <QTextCursor>
-#include <QStatusBar>
-#include <QLineEdit>
+#include <QtWidgets/QStatusBar>
+#include <QtWidgets/QLineEdit>
#include <QDateTime>
-#include <QGridLayout>
+#include <QtWidgets/QGridLayout>
CaseSensitiveModel::CaseSensitiveModel(int rows, int columns, QObject *parent)
: QStandardItemModel(rows, columns, parent)
@@ -50,23 +50,23 @@ QModelIndexList CaseSensitiveModel::match(const QModelIndex &start, int role, co
return QStandardItemModel::match(start, role, value, hits, flags);
}
-FindDialog::FindDialog(MainWindow *parent)
+FindDialog::FindDialog(QMainWindow *parent)
: QDialog(parent)
{
- contentsWidget = new QWidget(this);
- ui.setupUi(contentsWidget);
- ui.comboFind->setModel(new CaseSensitiveModel(0, 1, ui.comboFind));
+ auto contentsWidget = new QWidget(this);
+ //ui.setupUi(contentsWidget);
+ //ui.comboFind->setModel(new CaseSensitiveModel(0, 1, ui.comboFind));
QVBoxLayout *l = new QVBoxLayout(this);
l->setContentsMargins(QMargins());
l->setSpacing(0);
l->addWidget(contentsWidget);
- lastBrowser = 0;
- onceFound = false;
- findExpr.clear();
+ auto lastBrowser = 0;
+ auto onceFound = false;
+ //findExpr.clear();
- sb = new QStatusBar(this);
+ auto sb = new QStatusBar(this);
l->addWidget(sb);
@@ -74,35 +74,35 @@ FindDialog::FindDialog(MainWindow *parent)
// then lupdate should add this one as a new one, and mark the old one as obsolete.
sb->showMessage(tr("Enter the text you want to find."));
- connect(ui.findButton, SIGNAL(clicked()), this, SLOT(findButtonClicked()));
- connect(ui.closeButton, SIGNAL(clicked()), this, SLOT(reject()));
+ //connect(ui.findButton, SIGNAL(clicked()), this, SLOT(findButtonClicked()));
+ //connect(ui.closeButton, SIGNAL(clicked()), this, SLOT(reject()));
}
-FindDialog::~FindDialog()
-{
-}
+//FindDialog::~FindDialog()
+//{
+//}
-void FindDialog::findButtonClicked()
-{
- doFind(ui.radioForward->isChecked());
-}
+//void FindDialog::findButtonClicked()
+//{
+ //doFind(ui.radioForward->isChecked());
+//}
void FindDialog::doFind(bool forward)
{
- QTextBrowser *browser = static_cast<QTextBrowser*>(mainWindow()->browsers()->currentBrowser());
- sb->clearMessage();
+ QTextBrowser *browser;// = static_cast<QTextBrowser*>(mainWindow()->browsers()->currentBrowser());
+ //sb->clearMessage();
- if (ui.comboFind->currentText() != findExpr || lastBrowser != browser)
- onceFound = false;
- findExpr = ui.comboFind->currentText();
+ //if (ui.comboFind->currentText() != findExpr || lastBrowser != browser)
+ // onceFound = false;
+ //findExpr = ui.comboFind->currentText();
- QTextDocument::FindFlags flags = 0;
+ //QTextDocument::FindFlags flags = 0;
- if (ui.checkCase->isChecked())
- flags |= QTextDocument::FindCaseSensitively;
+ //if (ui.checkCase->isChecked())
+ // flags |= QTextDocument::FindCaseSensitively;
- if (ui.checkWords->isChecked())
- flags |= QTextDocument::FindWholeWords;
+ //if (ui.checkWords->isChecked())
+ // flags |= QTextDocument::FindWholeWords;
QTextCursor c = browser->textCursor();
if (!c.hasSelection()) {
@@ -115,50 +115,31 @@ void FindDialog::doFind(bool forward)
}
QTextDocument::FindFlags options;
- if (forward == false)
- flags |= QTextDocument::FindBackward;
-
- QTextCursor found = browser->document()->find(findExpr, c, flags);
+ //if (forward == false)
+ // flags |= QTextDocument::FindBackward;
+ bool onceFound = true;
+ QTextCursor found;// = browser->document()->find(findExpr, c, flags);
if (found.isNull()) {
if (onceFound) {
if (forward)
- statusMessage(tr("Search reached end of the document"));
+ auto a = tr("Search reached end of the document");//statusMessage(tr("Search reached end of the document"));
else
- statusMessage(tr("Search reached start of the document"));
+ auto aa = tr("Search reached start of the document");//statusMessage(tr("Search reached start of the document"));
} else {
- statusMessage(tr( "Text not found" ));
+ auto aaa = tr( "Text not found" );//statusMessage(tr( "Text not found" ));
}
} else {
browser->setTextCursor(found);
}
onceFound |= !found.isNull();
- lastBrowser = browser;
+ auto lastBrowser = browser;
}
-bool FindDialog::hasFindExpression() const
+void FindDialog::hasFindExpression() const
{
//% "This is some random text"
- qtTrId("keep_id")
+ qtTrId("keep_id");
- return !findExpr.isEmpty();
+ //return !findExpr.isEmpty();
}
-void FindDialog::statusMessage(const QString &message)
-{
- if (isVisible())
- sb->showMessage(message);
- else
- static_cast<MainWindow*>(parent())->statusBar()->showMessage(message, 2000);
-}
-
-MainWindow *FindDialog::mainWindow() const
-{
- return static_cast<MainWindow*>(parentWidget());
-}
-
-void FindDialog::reset()
-{
- ui.comboFind->setFocus();
- ui.comboFind->lineEdit()->setSelection(
- 0, ui.comboFind->lineEdit()->text().length());
-}
diff --git a/tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/finddialog.h b/tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/finddialog.h
new file mode 100644
index 000000000..9b2d0d3d1
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/finddialog.h
@@ -0,0 +1,66 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtWidgets/QTextBrowser>
+#include <QTextCursor>
+#include <QtWidgets/QStatusBar>
+#include <QtWidgets/QLineEdit>
+#include <QDateTime>
+#include <QtWidgets/QGridLayout>
+#include <QtWidgets/QDialog>
+#include <QtGui>
+#include <QtWidgets/QMainWindow>
+
+class FindDialog : public QDialog
+{
+ Q_OBJECT
+public:
+ FindDialog(QWidget *parent = 0);
+ FindDialog(QMainWindow *parent = 0);
+ void doFind(bool forward);
+ void hasFindExpression() const;
+
+signals:
+
+public slots:
+ void find();
+
+private slots:
+ void emitFindNext();
+ void verify();
+
+private:
+ bool m_redText = false;
+};
+
+
+class CaseSensitiveModel: public QStandardItemModel
+{
+ CaseSensitiveModel(int rows, int columns, QObject *parent);
+ QModelIndexList match(const QModelIndex &start, int role, const QVariant &value, int hits, Qt::MatchFlags flags) const;
+};
diff --git a/tests/auto/linguist/lupdate/testdata/good/mergeui/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/mergeui/project.ts.result
index 8d51b197d..683972961 100644
--- a/tests/auto/linguist/lupdate/testdata/good/mergeui/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/mergeui/project.ts.result
@@ -8,17 +8,17 @@
<translation type="vanished">Qt Assistant - Finn tekst</translation>
</message>
<message>
- <location filename="project.ui" line="44"/>
+ <location filename="project.ui" line="19"/>
<source>Qt Assistant - Find Text</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="project.ui" line="47"/>
+ <location filename="project.ui" line="22"/>
<source>300px</source>
<translation>300px</translation>
</message>
<message>
- <location filename="project.ui" line="50"/>
+ <location filename="project.ui" line="25"/>
<source>401 pixels</source>
<translation type="unfinished"></translation>
</message>
diff --git a/tests/auto/linguist/lupdate/testdata/good/mergeui/project.ui b/tests/auto/linguist/lupdate/testdata/good/mergeui/project.ui
index 7e521d19d..400480bde 100644
--- a/tests/auto/linguist/lupdate/testdata/good/mergeui/project.ui
+++ b/tests/auto/linguist/lupdate/testdata/good/mergeui/project.ui
@@ -1,33 +1,8 @@
<ui version="4.0" >
<author></author>
<comment>
-*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
</comment>
<exportmacro></exportmacro>
<class>FindDialog</class>
diff --git a/tests/auto/linguist/lupdate/testdata/good/multiple_locations/finddialog.cpp b/tests/auto/linguist/lupdate/testdata/good/multiple_locations/finddialog.cpp
index 070b35617..587950751 100644
--- a/tests/auto/linguist/lupdate/testdata/good/multiple_locations/finddialog.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/multiple_locations/finddialog.cpp
@@ -1,34 +1,42 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-QT_TRANSLATE_NOOP("context", "just a message");
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
+
+
+class AClass
+{
+ Q_OBJECT
+
+ const char *c_noop_translate = QT_TRANSLATE_NOOP("context", "just a message");
//: This is one comment
-QT_TRANSLATE_NOOP("context", "just a message");
+ const char *c_noop_translate2 = QT_TRANSLATE_NOOP("context", "just a message");
+};
diff --git a/tests/auto/linguist/lupdate/testdata/good/multiple_locations/main.cpp b/tests/auto/linguist/lupdate/testdata/good/multiple_locations/main.cpp
index 5d9634465..6f093aeff 100644
--- a/tests/auto/linguist/lupdate/testdata/good/multiple_locations/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/multiple_locations/main.cpp
@@ -1,62 +1,63 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
-//: This is a comment, too.
-QT_TRANSLATE_NOOP("context", "just a message");
+
+
+
+
+
+
+#include <QtCore>
+class DClass
+{
+
+//: This is a comment, too.
+ const char *c_noop_translate = QT_TRANSLATE_NOOP("context", "just a message");
+ void func();
+};
+void DClass::func() {
//: commented
-qtTrId("lollipop");
+ qtTrId("lollipop");
//% "this is the source text"
//~ meta so-meta
//: even more commented
-qtTrId("lollipop");
+ qtTrId("lollipop");
//% "this is contradicting source text"
-qtTrId("lollipop");
+ qtTrId("lollipop");
//~ meta too-much-meta
-qtTrId("lollipop");
+ qtTrId("lollipop");
//~ meta so-meta
-QObject::tr("another message", "here with a lot of noise in the comment so it is long enough");
+ auto a = QObject::tr("another message", "here with a lot of noise in the comment so it is long enough");
//~ meta too-much-meta
-QObject::tr("another message", "here with a lot of noise in the comment so it is long enough");
+ auto aa = QObject::tr("another message", "here with a lot of noise in the comment so it is long enough"); // old parser: not picked up
//: commented
qtTrId("lollipop");
+}
diff --git a/tests/auto/linguist/lupdate/testdata/good/multiple_locations/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/multiple_locations/project.ts.result
index f10f9cced..03fa9b1bf 100644
--- a/tests/auto/linguist/lupdate/testdata/good/multiple_locations/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/multiple_locations/project.ts.result
@@ -28,8 +28,8 @@ even more commented</extracomment>
<context>
<name>context</name>
<message>
- <location filename="finddialog.cpp" line="29"/>
- <location filename="finddialog.cpp" line="34"/>
+ <location filename="finddialog.cpp" line="36"/>
+ <location filename="finddialog.cpp" line="41"/>
<location filename="main.cpp" line="33"/>
<source>just a message</source>
<extracomment>This is one comment
diff --git a/tests/auto/linguist/lupdate/testdata/good/namespaces/main.cpp b/tests/auto/linguist/lupdate/testdata/good/namespaces/main.cpp
index 68e5da5ed..c761c0dec 100644
--- a/tests/auto/linguist/lupdate/testdata/good/namespaces/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/namespaces/main.cpp
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <QtCore>
@@ -130,7 +130,7 @@ void foo()
using namespace A;
}
-void goo()
+QString goo()
{
return QObject::tr("Bla");
}
@@ -182,4 +182,4 @@ void foo()
}
-#include "main.moc"
+//#include "main.moc"
diff --git a/tests/auto/linguist/lupdate/testdata/good/notargetlanguage/main.cpp b/tests/auto/linguist/lupdate/testdata/good/notargetlanguage/main.cpp
index 157979b70..c51a722df 100644
--- a/tests/auto/linguist/lupdate/testdata/good/notargetlanguage/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/notargetlanguage/main.cpp
@@ -1,32 +1,32 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include <QApplication>
-#include <QPushButton>
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtWidgets/QApplication>
+#include <QtWidgets/QPushButton>
#include <QTranslator>
int main(int argc, char *argv[])
diff --git a/tests/auto/linguist/lupdate/testdata/good/parse_special_chars/main.cpp b/tests/auto/linguist/lupdate/testdata/good/parse_special_chars/main.cpp
index 791fbdcbd..d19e193bf 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parse_special_chars/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/parse_special_chars/main.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtWidgets/QDialog>
class Dialog2 : public QDialog
{
Q_OBJECT
@@ -40,7 +40,7 @@ void Dialog2::func()
{
tr("cat\xc3\xa9gorie");
- tr("F\xc3\xbcr \xc3\x88lise")
+ tr("F\xc3\xbcr \xc3\x88lise");
}
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecontexts/main.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecontexts/main.cpp
index f73bdcbc1..7a5fff93d 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecontexts/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecontexts/main.cpp
@@ -1,36 +1,36 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
#include <QtCore>
#include <QtGui>
-
+#include <QtWidgets/QMainWindow>
//
// Test namespace scoping
//
@@ -247,13 +247,13 @@ QString C2::foo()
{
return tr("test TRANSLATOR comment (6)", "A1::B3::C2"); // 4.4 screws up
}
-
-
namespace Fooish {
- Q_DECLARE_TR_FUNCTIONS(Bears::And::Spiders)
+ struct toto {
+ Q_DECLARE_TR_FUNCTIONS(Bears::And::Spiders)
+ QString bar(); };
}
-void Fooish::bar()
+QString Fooish::toto::bar()
{
return tr("whatever the context", "Bears::And::Spiders");
}
@@ -263,4 +263,4 @@ int main(int /*argc*/, char ** /*argv*/) {
return 0;
}
-#include "main.moc"
+//#include "main.moc"
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecontexts_clang_parser/main.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecontexts_clang_parser/main.cpp
new file mode 100644
index 000000000..7a5fff93d
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecontexts_clang_parser/main.cpp
@@ -0,0 +1,266 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// IMPORTANT!!!! If you want to add testdata to this file,
+// always add it to the end in order to not change the linenumbers of translations!!!
+#include <QtCore>
+#include <QtGui>
+#include <QtWidgets/QMainWindow>
+//
+// Test namespace scoping
+//
+
+class D : public QObject {
+ Q_OBJECT
+ public:
+ QString foo() {
+ return tr("test", "D");
+ }
+
+};
+
+namespace A {
+
+ class C : public QObject {
+ Q_OBJECT
+ public:
+ void foo();
+ };
+
+ void C::foo() {
+ tr("Bla", "A::C");
+ }
+
+ void goo() {
+ C::tr("Bla", "A::C"); // Is identical to the previous tr(), (same context, sourcetext and comment,
+ // so it should not add another entry to the list of messages)
+ }
+
+ void goo2() {
+ C::tr("Bla 2", "A::C"); //Should be in the same namespace as the previous tr()
+ }
+
+}
+
+
+namespace X {
+
+ class D : public QObject {
+ Q_OBJECT
+ public:
+
+ };
+
+ class E : public QObject {
+ Q_OBJECT
+ public:
+ void foo() { D::tr("foo", "D"); } // Note that this is X::D from 440 on
+ };
+
+
+ namespace Y {
+ class E : public QObject {
+ Q_OBJECT
+
+ };
+
+ class C : public QObject {
+ Q_OBJECT
+ void foo();
+ };
+
+ void C::foo() {
+ tr("Bla", "X::Y::C");
+ }
+
+ void goo() {
+ D::tr("Bla", "X::D"); //This should be assigned to the X::D context
+ }
+
+ void goo2() {
+ E::tr("Bla", "X::Y::E"); //This should be assigned to the X::Y::E context
+ Y::E::tr("Bla", "X::Y::E"); //This should be assigned to the X::Y::E context
+ }
+
+ }; // namespace Y
+
+ class F : public QObject {
+ Q_OBJECT
+ inline void inlinefunc() {
+ tr("inline function", "X::F");
+ }
+ };
+} // namespace X
+
+namespace ico {
+ namespace foo {
+ class A : public QObject {
+ A();
+ };
+
+ A::A() {
+ tr("myfoo", "ico::foo::A");
+ QObject::tr("task 161186", "QObject");
+ }
+ }
+}
+
+namespace AA {
+class C {};
+}
+
+/**
+ * the context of a message should not be affected by any inherited classes
+ *
+ * Keep this disabled for now, but at a long-term range it should work.
+ */
+namespace Gui {
+ class MainWindow : public QMainWindow,
+ public AA::C
+ {
+ Q_OBJECT
+public:
+ MainWindow()
+ {
+ tr("More bla", "Gui::MainWindow");
+ }
+
+ };
+} //namespace Gui
+
+
+namespace A1 {
+ class AB : public QObject {
+ Q_OBJECT
+ public:
+
+ friend class OtherClass;
+
+ QString inlineFuncAfterFriendDeclaration() const {
+ return tr("inlineFuncAfterFriendDeclaration", "A1::AB");
+ }
+ };
+ class B : AB {
+ Q_OBJECT
+ public:
+ QString foo() const { return tr("foo", "A1::B"); }
+ };
+
+ // This is valid C++ too....
+ class V : virtual AB {
+ Q_OBJECT
+ public:
+ QString bar() const { return tr("bar", "A1::V"); }
+ };
+
+ class W : virtual public AB {
+ Q_OBJECT
+ public:
+ QString baz() const { return tr("baz", "A1::W"); }
+ };
+}
+
+class ForwardDecl;
+
+
+class B1 : public QObject {
+};
+
+class C1 : public QObject {
+};
+
+namespace A1 {
+
+class B2 : public QObject {
+};
+
+}
+
+void func1()
+{
+ B1::tr("test TRANSLATOR comment (1)", "B1");
+
+}
+
+using namespace A1;
+/*
+ TRANSLATOR A1::B2
+*/
+void func2()
+{
+ B2::tr("test TRANSLATOR comment (2)", "A1::B2");
+ C1::tr("test TRANSLATOR comment (3)", "C1");
+}
+
+void func3()
+{
+ B2::tr("test TRANSLATOR comment (4)", "A1::B2");
+}
+
+/*
+ TRANSLATOR B2
+ This is a comment to the translator.
+*/
+void func4()
+{
+ B2::tr("test TRANSLATOR comment (5)", "A1::B2");
+}
+
+namespace A1 {
+namespace B3 {
+class C2 : public QObject {
+QString foo();
+};
+}
+}
+
+namespace D1 = A1::B3;
+using namespace D1;
+
+// TRANSLATOR A1::B3::C2
+QString C2::foo()
+{
+ return tr("test TRANSLATOR comment (6)", "A1::B3::C2"); // 4.4 screws up
+}
+namespace Fooish {
+ struct toto {
+ Q_DECLARE_TR_FUNCTIONS(Bears::And::Spiders)
+ QString bar(); };
+}
+
+QString Fooish::toto::bar()
+{
+ return tr("whatever the context", "Bears::And::Spiders");
+}
+
+
+int main(int /*argc*/, char ** /*argv*/) {
+ return 0;
+}
+
+//#include "main.moc"
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecontexts_clang_parser/project.pro b/tests/auto/linguist/lupdate/testdata/good/parsecontexts_clang_parser/project.pro
new file mode 100644
index 000000000..759bea068
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecontexts_clang_parser/project.pro
@@ -0,0 +1,3 @@
+SOURCES = main.cpp
+
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecontexts_clang_parser/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parsecontexts_clang_parser/project.ts.result
new file mode 100644
index 000000000..6ff4df1b4
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecontexts_clang_parser/project.ts.result
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>A1::AB</name>
+ <message>
+ <location filename="main.cpp" line="165"/>
+ <source>inlineFuncAfterFriendDeclaration</source>
+ <comment>A1::AB</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>A1::B</name>
+ <message>
+ <location filename="main.cpp" line="171"/>
+ <source>foo</source>
+ <comment>A1::B</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>A1::V</name>
+ <message>
+ <location filename="main.cpp" line="178"/>
+ <source>bar</source>
+ <comment>A1::V</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>A1::W</name>
+ <message>
+ <location filename="main.cpp" line="184"/>
+ <source>baz</source>
+ <comment>A1::W</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>A::C</name>
+ <message>
+ <location filename="main.cpp" line="56"/>
+ <location filename="main.cpp" line="60"/>
+ <source>Bla</source>
+ <comment>A::C</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="65"/>
+ <source>Bla 2</source>
+ <comment>A::C</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Bears::And::Spiders</name>
+ <message>
+ <location filename="main.cpp" line="258"/>
+ <source>whatever the context</source>
+ <comment>Bears::And::Spiders</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>D</name>
+ <message>
+ <location filename="main.cpp" line="42"/>
+ <source>test</source>
+ <comment>D</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Gui::MainWindow</name>
+ <message>
+ <location filename="main.cpp" line="150"/>
+ <source>More bla</source>
+ <comment>Gui::MainWindow</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="main.cpp" line="127"/>
+ <source>myfoo</source>
+ <comment>ico::foo::A</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="128"/>
+ <source>task 161186</source>
+ <comment>QObject</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="206"/>
+ <source>test TRANSLATOR comment (1)</source>
+ <comment>B1</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="216"/>
+ <source>test TRANSLATOR comment (2)</source>
+ <comment>A1::B2</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="217"/>
+ <source>test TRANSLATOR comment (3)</source>
+ <comment>C1</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="222"/>
+ <source>test TRANSLATOR comment (4)</source>
+ <comment>A1::B2</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="231"/>
+ <source>test TRANSLATOR comment (5)</source>
+ <comment>A1::B2</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="248"/>
+ <source>test TRANSLATOR comment (6)</source>
+ <comment>A1::B3::C2</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>X::D</name>
+ <message>
+ <location filename="main.cpp" line="82"/>
+ <source>foo</source>
+ <comment>D</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="102"/>
+ <source>Bla</source>
+ <comment>X::D</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>X::F</name>
+ <message>
+ <location filename="main.cpp" line="115"/>
+ <source>inline function</source>
+ <comment>X::F</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>X::Y::C</name>
+ <message>
+ <location filename="main.cpp" line="98"/>
+ <source>Bla</source>
+ <comment>X::Y::C</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>X::Y::E</name>
+ <message>
+ <location filename="main.cpp" line="106"/>
+ <location filename="main.cpp" line="107"/>
+ <source>Bla</source>
+ <comment>X::Y::E</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp/excluded.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp/excluded.cpp
index 592ceb4d8..32d0210a6 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp/excluded.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp/excluded.cpp
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
int main(int argc, char **argv)
{
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp/expectedoutput.txt b/tests/auto/linguist/lupdate/testdata/good/parsecpp/expectedoutput.txt
index c4dbae544..03ad73aa6 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp/expectedoutput.txt
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp/expectedoutput.txt
@@ -1,7 +1,3 @@
-.*/lupdate/testdata/good/parsecpp/finddialog.cpp:72: Qualifying with unknown namespace/class ::FindDialog
-.*/lupdate/testdata/good/parsecpp/finddialog.cpp:122: Qualifying with unknown namespace/class ::FindDialog
-.*/lupdate/testdata/good/parsecpp/finddialog.cpp:162: Qualifying with unknown namespace/class ::FindDialog
-.*/lupdate/testdata/good/parsecpp/finddialog.cpp:168: Unsupported encoding Latin1/DefaultCodec/CodecForTr
.*/lupdate/testdata/good/parsecpp/main.cpp:620: tr\(\) cannot be called without context
.*/lupdate/testdata/good/parsecpp/main.cpp:622: tr\(\) cannot be called without context
lupdate warning: Message with id 'yet_another_id' has no source.
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp/finddialog.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp/finddialog.cpp
index 47dda61d6..65d5ede30 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp/finddialog.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp/finddialog.cpp
@@ -1,100 +1,100 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the autotests of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "finddialog.h"
-#include "mainwindow.h"
-#include "tabbedbrowser.h"
-#include "helpwindow.h"
-
-#include <QTextBrowser>
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//#include "finddialog.h" nothing is picked up from there
+//#include "mainwindow.h"
+//#include "tabbedbrowser.h"
+//#include "helpwindow.h"
+#include <QtCore>
+#include <QtWidgets/QTextBrowser>
#include <QTextCursor>
-#include <QStatusBar>
-#include <QLineEdit>
+#include <QtWidgets/QStatusBar>
+#include <QtWidgets/QLineEdit>
#include <QDateTime>
-#include <QGridLayout>
+#include <QtWidgets/QGridLayout>
+#include <QtWidgets/QMainWindow>
+class FindDialog
+{ Q_OBJECT
+ FindDialog(QMainWindow *parent);
+ void findButtonClicked();
+ void doFind(bool forward);
+ void statusMessage(const QString &message);
+ //QMainWindow *mainWindow() const;
+ void reset();
-CaseSensitiveModel::CaseSensitiveModel(int rows, int columns, QObject *parent)
- : QStandardItemModel(rows, columns, parent)
-{}
-QModelIndexList CaseSensitiveModel::match(const QModelIndex &start, int role, const QVariant &value,
- int hits, Qt::MatchFlags flags) const
-{
- if (flags == Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap))
- flags |= Qt::MatchCaseSensitive;
- return QStandardItemModel::match(start, role, value, hits, flags);
-}
+};
+
-FindDialog::FindDialog(MainWindow *parent)
- : QDialog(parent)
+FindDialog::FindDialog(QMainWindow *parent)
{
- contentsWidget = new QWidget(this);
- ui.setupUi(contentsWidget);
- ui.comboFind->setModel(new CaseSensitiveModel(0, 1, ui.comboFind));
+ //auto contentsWidget = new QWidget(this);
+ //ui.setupUi(contentsWidget);
+ //ui.comboFind->setModel(new CaseSensitiveModel(0, 1, ui.comboFind));
- QVBoxLayout *l = new QVBoxLayout(this);
- l->setContentsMargins(QMargins());
- l->setSpacing(0);
- l->addWidget(contentsWidget);
+ //QVBoxLayout *l = new QVBoxLayout(this);
+ //l->setContentsMargins(QMargins());
+ //l->setSpacing(0);
+ //l->addWidget(contentsWidget);
- lastBrowser = 0;
- onceFound = false;
- findExpr.clear();
+ auto lastBrowser = 0;
+ auto onceFound = false;
+ //findExpr.clear();
- sb = new QStatusBar(this);
- l->addWidget(sb);
+ auto sb = new QStatusBar;
+ //l->addWidget(sb);
sb->showMessage(tr("Enter the text you are looking for."));
- connect(ui.findButton, SIGNAL(clicked()), this, SLOT(findButtonClicked()));
- connect(ui.closeButton, SIGNAL(clicked()), this, SLOT(reject()));
+ //connect(ui.findButton, SIGNAL(clicked()), this, SLOT(findButtonClicked()));
+ //connect(ui.closeButton, SIGNAL(clicked()), this, SLOT(reject()));
}
-FindDialog::~FindDialog()
-{
-}
+//FindDialog::~FindDialog()
+//{
+//}
-void FindDialog::findButtonClicked()
-{
- doFind(ui.radioForward->isChecked());
-}
+//void FindDialog::findButtonClicked()
+//{
+// doFind(ui.radioForward->isChecked());
+//}
void FindDialog::doFind(bool forward)
{
- QTextBrowser *browser = static_cast<QTextBrowser*>(mainWindow()->browsers()->currentBrowser());
- sb->clearMessage();
-
- if (ui.comboFind->currentText() != findExpr || lastBrowser != browser)
- onceFound = false;
- findExpr = ui.comboFind->currentText();
-
- QTextDocument::FindFlags flags = 0;
-
+ //QTextBrowser *browser = static_cast<QTextBrowser*>(mainWindow()->browsers()->currentBrowser());
+ //sb->clearMessage();
+
+ //if (ui.comboFind->currentText() != findExpr || lastBrowser != browser)
+ // onceFound = false;
+ //findExpr = ui.comboFind->currentText();
+ bool onceFound = false;
+ //QTextDocument::FindFlags flags = 0;
+ /*
if (ui.checkCase->isChecked())
flags |= QTextDocument::FindCaseSensitively;
@@ -114,8 +114,8 @@ void FindDialog::doFind(bool forward)
QTextDocument::FindFlags options;
if (forward == false)
flags |= QTextDocument::FindBackward;
-
- QTextCursor found = browser->document()->find(findExpr, c, flags);
+ */
+ QTextCursor found;//browser->document()->find(findExpr, c, flags);
if (found.isNull()) {
if (onceFound) {
if (forward)
@@ -126,46 +126,46 @@ void FindDialog::doFind(bool forward)
statusMessage(tr( "Text not found" ));
}
} else {
- browser->setTextCursor(found);
+ //browser->setTextCursor(found);
}
onceFound |= !found.isNull();
- lastBrowser = browser;
+ //lastBrowser = browser;
}
-bool FindDialog::hasFindExpression() const
-{
- return !findExpr.isEmpty();
-}
+//bool FindDialog::hasFindExpression() const
+//{
+// return !findExpr.isEmpty();
+//}
void FindDialog::statusMessage(const QString &message)
-{
+{ /*
if (isVisible())
sb->showMessage(message);
else
- static_cast<MainWindow*>(parent())->statusBar()->showMessage(message, 2000);
+ static_cast<MainWindow*>(parent())->statusBar()->showMessage(message, 2000); */
}
-MainWindow *FindDialog::mainWindow() const
-{
- return static_cast<MainWindow*>(parentWidget());
-}
+//QMainWindow *FindDialog::mainWindow() const
+//{
+// return static_cast<MainWindow*>(parentWidget());
+//}
void FindDialog::reset()
{
- ui.comboFind->setFocus();
- ui.comboFind->lineEdit()->setSelection(
- 0, ui.comboFind->lineEdit()->text().length());
+ //ui.comboFind->setFocus();
+ //ui.comboFind->lineEdit()->setSelection(
+ // 0, ui.comboFind->lineEdit()->text().length());
- QString s = QApplication::translate("QCoreApplication", "with comment", "comment");
- QString s = QApplication::translate("QCoreApplication", "empty comment", "");
- QString s = QApplication::translate("QCoreApplication", "null comment", 0);
- QString s = tr("null comment");
+ QString s = QCoreApplication::translate("QCoreApplication", "with comment", "comment");
+ QString s1 = QCoreApplication::translate("QCoreApplication", "empty comment", "");
+ QString s2 = QCoreApplication::translate("QCoreApplication", "null comment", 0);
+ QString s3 = tr("null comment");
- QString s = QApplication::translate("QCoreApplication", "encoding, using QCoreApplication", 0, QCoreApplication::UnicodeUTF8);
- QString s = QApplication::translate("QCoreApplication", "encoding, using QApplication", 0, QApplication::UnicodeUTF8);
+ QString s4 = QCoreApplication::translate("QCoreApplication", "encoding, using QCoreApplication", 0);
+ QString s5 = QCoreApplication::translate("QCoreApplication", "encoding, using QApplication", 0);
- QString s = QApplication::translate("Kåntekst", "encoding, using QApplication", 0, QApplication::UnicodeUTF8);
- QString s = QApplication::translate("QTranslator", "Key", "disambiguation", QCoreApplication::Latin1);
+ QString s6 = QCoreApplication::translate("Kåntekst", "encoding, using QApplication", 0);
+ QString s7 = QCoreApplication::translate("QTranslator", "Key", "disambiguation");
}
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp/included.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp/included.cpp
index e7bc50b42..ff7fe370b 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp/included.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp/included.cpp
@@ -1,29 +1,31 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-QObject::tr("message from #included .cpp file");
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
+class MyClass2{
+ QString toto = QObject::tr("message from #included .cpp file");
+};
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp
index d93f1bb1f..49f30a8e3 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp
@@ -1,48 +1,48 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
int main(int argc, char **argv)
{
- Size size = QSize(1,1);
+ //Size size = QSize(1,1);
}
-
+#include <QtCore>
QString qt_detectRTLLanguage()
{
- return QApplication::tr("QT_LAYOUT_DIRECTION",
+ return QCoreApplication::tr("QT_LAYOUT_DIRECTION",
"Translate this string to the string 'LTR' in left-to-right"
" languages or to 'RTL' in right-to-left languages (such as Hebrew"
- " and Arabic) to get proper widget layout.") == QLatin1String("RTL");
+ " and Arabic) to get proper widget layout.");// == QLatin1String("RTL");
}
-class Dialog2 : public QDialog
+class Dialog2
{
Q_OBJECT
void func();
@@ -65,9 +65,9 @@ void Dialog2::func()
- QCoreApplication::translate("Plurals, QCoreApplication", "%n house(s)", "Plurals and identifier", QCoreApplication::UnicodeUTF8, n);
- QCoreApplication::translate("Plurals, QCoreApplication", "%n car(s)", "Plurals and literal number", QCoreApplication::UnicodeUTF8, 1);
- QCoreApplication::translate("Plurals, QCoreApplication", "%n horse(s)", "Plurals and function call", QCoreApplication::UnicodeUTF8, getCount());
+ QCoreApplication::translate("Plurals, QCoreApplication", "%n house(s)", "Plurals and identifier", n);
+ QCoreApplication::translate("Plurals, QCoreApplication", "%n car(s)", "Plurals and literal number", 1);
+ QCoreApplication::translate("Plurals, QCoreApplication", "%n horse(s)", "Plurals and function call", getCount());
@@ -171,25 +171,25 @@ class Testing : QObject {
/*: another extra-comment */
return tr("another extra-commented string");
/*: blah! */
- return QApplication::translate("scope", "works in translate, too", "blabb", 0);
+ return QCoreApplication::translate("scope", "works in translate, too", "blabb", 0);
}
};
//: extra comment for NOOP
//: which spans multiple lines
-QT_TRANSLATE_NOOP("scope", "string") /*: complain & ignore */; // 4.4 says the line of this is at the next statement
+const char *c_1 = QT_TRANSLATE_NOOP("scope", "string") /*: complain & ignore */; // 4.4 says the line of this is at the next statement
//: extra comment for NOOP3
-QT_TRANSLATE_NOOP3_UTF8("scope", "string", "comment"); // 4.4 doesn't see this
+const char *c_2[2] = QT_TRANSLATE_NOOP3_UTF8("scope", "string", "comment"); // 4.4 doesn't see this
-QT_TRANSLATE_NOOP("scope", "string " // this is an interleaved comment
+const char *c_3 = QT_TRANSLATE_NOOP("scope", "string " // this is an interleaved comment
"continuation on next line");
class TestingTake17 : QObject {
Q_OBJECT
- int function(void)
+ void function(void)
{
//: random comment
//= this_is_an_id
@@ -210,18 +210,18 @@ class TestingTake17 : QObject {
//: again an extra comment, this time for id-based NOOP
//% "This is supposed\tto be quoted \" newline\n"
//% "backslashed \\ stuff."
-QT_TRID_NOOP("this_a_id");
+const char *c_4 = QT_TRID_NOOP("this_a_id");
//~ some thing
//% "This needs to be here. Really."
-QString test = qtTrId("this_another_id", n);
+QString test = qtTrId("this_another_id", 2);
class YetAnotherTest : QObject {
Q_OBJECT
- int function(void)
+ void function(void)
{
//
//:
@@ -238,14 +238,14 @@ class YetAnotherTest : QObject {
//: This is a message without a source string
-QString test = qtTrId("yet_another_id");
+QString test1 = qtTrId("yet_another_id");
// QTBUG-9276: context in static initializers
class Bogus : QObject {
Q_OBJECT
-
+ static const char * const s_stringss[];
static const char * const s_strings[];
};
@@ -253,14 +253,14 @@ const char * const Bogus::s_strings[] = {
QT_TR_NOOP("this should be in Bogus")
};
-const char * const Bogus::s_strings[SIZE] = {
+const char * const Bogus::s_stringss[] = {
QT_TR_NOOP("this should be in Bogus")
};
void bogosity()
{
// no spaces here. test collateral damage from ignoring equal sign
- Class::member=QObject::tr("just QObject");
+ QString toto=QObject::tr("just QObject");
}
@@ -297,13 +297,13 @@ class LotsaFun : public QObject
{
Q_OBJECT
public:
- int operator<<(int left, int right);
+ LotsaFun *operator<<(int i);
};
-int LotsaFun::operator<<(int left, int right)
+LotsaFun *LotsaFun::operator<<(int i)
{
tr("this is inside operator<<");
- return left << right;
+ return this;
}
@@ -343,7 +343,7 @@ void blubb()
// QTBUG-9276 part 2: QT_TR_NOOP in static member initializers
-class TestClass
+class TestClass2
{
Q_DECLARE_TR_FUNCTIONS(TestClass);
@@ -351,26 +351,26 @@ public:
static const char TEST_STRING[];
};
-const char TestClass::TEST_STRING[] = QT_TR_NOOP("Test value");
+const char TestClass2::TEST_STRING[] = QT_TR_NOOP("Test value");
// derivation from namespaced class
-class Class42 : public NameSchpase::YetMoreFun, Gui::BaseClass
+class Class42 : public NameSchpace::YetMoreFun, Gui::BaseClass
{
Q_OBJECT
-
+ void foo();
Class42() :
- NameSchpase::YetMoreFun(),
+ NameSchpace::YetMoreFun(),
Gui::BaseClass()
{
tr("does that make sense?");
}
+ void hello(int something, QString str);
};
-Class42::Class42() :
- NameSchpase::YetMoreFun(),
- Gui::BaseClass()
+
+void Class42::foo()
{
tr("and does that?");
}
@@ -378,7 +378,7 @@ Class42::Class42() :
// QTBUG-11866: magic comment parsing is too greedy
-Class42::hello(int something /*= 17 */, QString str = Class42::tr("eyo"))
+void Class42::hello(int something /*= 17 */, QString str = Class42::tr("eyo"))
{
}
@@ -393,7 +393,7 @@ Class42::hello(int something /*= 17 */, QString str = Class42::tr("eyo"))
// failure to update index on insertion messes up subsequent de-duplication
-int dupeFail()
+void dupeFail()
{
// First just the Id.
qtTrId("dupe_id");
@@ -450,13 +450,13 @@ class Abc::NamespacedFinalClass final : public QObject
void ternary()
{
const auto aaa =
- obj.condition ?
+ true ?
//: comment, aaa, true
QObject::tr("ternary, true, aaa") :
QObject::tr("ternary, failure, aaa");
const auto bbb =
- obj.condition ?
+ true ?
//: comment, bbb, true
QObject::tr("ternary, bbb, true") :
//: comment, bbb, false
@@ -470,13 +470,13 @@ class TernaryClass : public QObject
void f()
{
const auto ccc =
- obj.condition ?
+ true ?
//: comment, ccc, true
tr("ternary, ccc, true") :
tr("ternary, ccc, false");
const auto ddd =
- obj.condition ?
+ true ?
//: comment, ddd, true
tr("ternary, ddd, true") :
//: comment, ddd, false
@@ -490,7 +490,7 @@ class TernaryClass : public QObject
void nullptrInPlural()
{
QObject::tr("%n nullptr(s)", nullptr, 3);
- QCoreApplication::translate("Plurals, nullptr", "%n car(s)", nullptr, QCoreApplication::UnicodeUTF8, 1);
+ QCoreApplication::translate("Plurals, nullptr", "%n car(s)", nullptr, 1);
}
class nullptrClass : public QObject
@@ -516,12 +516,12 @@ void nullMacroInPlural()
// QTBUG-34128: lupdate ignores tr() calls in constructor if a member is
// initialized with C++11 initializer list
-class ListInitializationClass : public NameSchpase::YetMoreFun, Gui::BaseClass
+class ListInitializationClass : public NameSchpace::YetMoreFun, Gui::BaseClass
{
Q_OBJECT
ListInitializationClass() :
- NameSchpase::YetMoreFun(),
+ NameSchpace::YetMoreFun(),
Gui::BaseClass{ },
a{ 0 },
b(1),
@@ -539,14 +539,14 @@ class ListInitializationClass : public NameSchpase::YetMoreFun, Gui::BaseClass
QString c;
};
-ListInitializationClass::ListInitializationClass(int a) :
- b{ { 2, 3 }[a] }
+ListInitializationClass::ListInitializationClass(int a)// :
+// b{ { 2, 3 }}[a]
{
tr("ListInitializationClass out-of-class single member initializer");
}
ListInitializationClass::ListInitializationClass(int a, int b, int c) :
- NameSchpase::YetMoreFun{ },
+ NameSchpace::YetMoreFun{ },
Gui::BaseClass(),
a{ 2 + (a/3) },
b(b),
@@ -564,8 +564,8 @@ class LambdaMemberClass : public Gui::BaseClass
LambdaMemberClass() :
Gui::BaseClass(),
- a{ [](){ std::cout << QObject::tr("Hello"); } },
- b([](){ std::cout << "World\n"; })
+ a{ [](){ /*std::cout << */QObject::tr("Hello"); } },
+ b([](){ /*std::cout << "World\n";*/ })
{
tr("LambdaMemberClass in-class constructor");
}
@@ -578,8 +578,8 @@ class LambdaMemberClass : public Gui::BaseClass
LambdaMemberClass::LambdaMemberClass(void *) :
Gui::BaseClass{ },
- a([](){ std::cout << QObject::tr("Hallo "); }),
- b{ [](){ std::cout << "Welt\n"; } }
+ a([](){ /*std::cout <<*/ QObject::tr("Hallo "); }),
+ b{ [](){ /*std::cout << "Welt\n";*/ } }
{
tr("LambdaMemberClass out-of-class constructor");
}
@@ -641,19 +641,19 @@ class TranslatedAfterPrivate
};
#include<QObject>
-
-QObject::tr("message after system include without space");
-
+class AClass {
+ QString aa = QObject::tr("message after system include without space");
+};
#include"qobject.h"
-
-QObject::tr("message after local include without space");
-
+class AAClass {
+ QString aa = QObject::tr("message after local include without space");
+};
// QTBUG-35164: handling of \uNNNN escapes
QString unicodeEscape()
{
- return QApplication::tr("Context", "soft\u00ADhyphen");
+ return QCoreApplication::tr("Context", "soft\u00ADhyphen");
}
@@ -679,12 +679,52 @@ static const char * const test_string_n1[] = {
QT_TRANSLATE_N_NOOP("scope", "string %n")
};
-static const char * const test_string_n2[] = {
- QT_TRANSLATE_N_NOOP3("scope", "string %n", "comment");
+static const char * const test_string_n2[] =
+ QT_TRANSLATE_N_NOOP3("scope", "string %n", "comment")
+;
+class testing { Q_OBJECT
+ void test(); };
+void testing::test() { static const char * const test_string_n3[] = {
+ QT_TR_N_NOOP("%n test")
+ };
+}
+
+
+
+// QTBUG-91521: context in static initializers with parentheses
+class Hogus : QObject {
+ Q_OBJECT
+ static const QString myString;
};
-class testing {
+
+const QString Hogus::myString(QT_TR_NOOP("this should be in Hogus"));
+
+
+
+// QTBUG-99415: multiple specifiers after method parameter list
+class QTBUG99415 : QObject {
Q_OBJECT
- static const char * const test_string_n3[] = {
- QT_TR_N_NOOP("%n test");
- };
+ const QString text1() const noexcept { return tr("text1"); }
+ const QString text2() const noexcept;
+};
+
+const QString QTBUG99415::text2() const noexcept { return tr("text2"); }
+
+// QTBUG-110630: Support quoting in extras field to allow whitespace preservation
+class QTBUG110630 : QObject {
+ Q_OBJECT
+ const QString txt() {
+ //~ quoted " string with spaces "
+ tr("translation with extras-quoted field");
+ }
+};
+
+// enum class - C++11
+enum class Bar : unsigned short;
+// QTBUG-36589: Don't treat enum classes as a normal class
+class QTBUG36589 : QObject {
+ Q_OBJECT
+ const QString txt() {
+ tr("string after an enum class");
+ }
};
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp/notincluded.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp/notincluded.cpp
index 3cdbb3524..3f502fffe 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp/notincluded.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp/notincluded.cpp
@@ -1,29 +1,31 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-QObject::tr("message from not #included .cpp file");
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
+class MyClass{
+ QString toto = QObject::tr("message from #included .cpp file");
+};
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result
index 7c500f6a3..fe5c00d96 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result
@@ -166,6 +166,14 @@ backslashed \ stuff.</source>
</message>
</context>
<context>
+ <name>Hogus</name>
+ <message>
+ <location filename="main.cpp" line="700"/>
+ <source>this should be in Hogus</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Internal::Message</name>
<message>
<location filename="main.cpp" line="283"/>
@@ -296,21 +304,6 @@ backslashed \ stuff.</source>
</message>
</context>
<context>
- <name>QApplication</name>
- <message>
- <location filename="main.cpp" line="38"/>
- <source>QT_LAYOUT_DIRECTION</source>
- <comment>Translate this string to the string &apos;LTR&apos; in left-to-right languages or to &apos;RTL&apos; in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="main.cpp" line="656"/>
- <source>Context</source>
- <comment>soft­hyphen</comment>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>QCoreApplication</name>
<message>
<location filename="finddialog.cpp" line="159"/>
@@ -338,6 +331,18 @@ backslashed \ stuff.</source>
<source>encoding, using QApplication</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="main.cpp" line="38"/>
+ <source>QT_LAYOUT_DIRECTION</source>
+ <comment>Translate this string to the string &apos;LTR&apos; in left-to-right languages or to &apos;RTL&apos; in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="656"/>
+ <source>Context</source>
+ <comment>soft­hyphen</comment>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QObject</name>
@@ -411,20 +416,48 @@ backslashed \ stuff.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="included.cpp" line="29"/>
+ <location filename="included.cpp" line="30"/>
<source>message from #included .cpp file</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>QTBUG110630</name>
+ <message>
+ <location filename="main.cpp" line="718"/>
+ <source>translation with extras-quoted field</source>
+ <translation type="unfinished"></translation>
+ <extra-quoted> string with spaces </extra-quoted>
+ </message>
+</context>
+<context>
+ <name>QTBUG36589</name>
+ <message>
+ <location filename="main.cpp" line="728"/>
+ <source>string after an enum class</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QTBUG99415</name>
+ <message>
+ <location filename="main.cpp" line="707"/>
+ <source>text1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="711"/>
+ <source>text2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>QTranslator</name>
- <message numerus="yes">
+ <message>
<location filename="finddialog.cpp" line="168"/>
<source>Key</source>
<comment>disambiguation</comment>
- <translation type="unfinished">
- <numerusform></numerusform>
- </translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cpp" line="80"/>
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.cpp
index dec5232fc..85a1e3ac0 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.cpp
@@ -1,32 +1,32 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-// IMPORTANT!!!! If you want to add testdata to this file,
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
// nothing here
@@ -50,7 +50,7 @@ line c++ comment } (with brace)
#define This is another // comment in } define \
something } comment
} // complain here
-
+#include <QtCore>
// Nested class in same file
@@ -64,7 +64,7 @@ class TopLevel::Nested {
void foo();
};
-TopLevel::Nested::foo()
+void TopLevel::Nested::foo()
{
TopLevel::tr("TopLevel");
}
@@ -76,7 +76,7 @@ class TopLevel2::Nested {
void foo();
};
-TopLevel2::Nested::foo()
+void TopLevel2::Nested::foo()
{
TopLevel2::tr("TopLevel2");
}
@@ -99,26 +99,26 @@ void ToBeUsed::caller()
{
tr("NameSpace::ToBeUsed");
}
+#include <QtWidgets/QApplication>
-
-
+bool me = false;
// QTBUG-11818
//% "Foo"
-QObject::tr("Hello World");
-QObject::tr("Hello World");
+QString s1 = QObject::tr("Hello World");
+QString s2 = QObject::tr("Hello World");
//% "Bar"
-QApplication::translate("QObject", "Hello World");
-QApplication::translate("QObject", "Hello World");
+QString s3 = QApplication::translate("QObject", "Hello World");
+QString s4 = QApplication::translate("QObject", "Hello World");
//% "Baz"
-clear = me;
-QObject::tr("Hello World");
+bool clear = me;
+QString s5 = QObject::tr("Hello World");
// QTBUG-11843: complain about missing source in id-based messages
-qtTrId("no_source");
+QString s6 = qtTrId("no_source");
-QObject::tr(R"(simple one)" R"delim(enter
+QString s7 = QObject::tr(R"(simple one)" R"delim(enter
)delim" R"delim(with delimiter )delim inside)delim" u8R"(with quote " inside)");
QLatin1String not_translated(R"(
@@ -136,6 +136,97 @@ And whether pigs have wings."
const QString nodelimiter(QObject::tr(R"(
This is a test string
)"));
-const Qstring withdelimiter = QObject::tr(R"delim(
+const QString withdelimiter = QObject::tr(R"delim(
This is a test string
)delim");
+
+
+// New in C++14: integer literals may contain single quotes as separator.
+struct IntLiteralsWithSeparators {
+ long d = 10'000'000'0'00;
+ int x = 0x1'AF'FE;
+ int X = 0X2'E5E7;
+};
+
+
+// QTBUG-59802: prefixed string literals
+class PrefixedStringLiterals : public QObject {
+ Q_OBJECT
+ void foo()
+ {
+ #if 0
+ tr(u8"UTF-8 string literal");
+ tr(u8R"(UTF-8 raw string literal)");
+ tr(u"UTF-16 string literal");
+ tr(uR"(UTF-16 raw string literal)");
+ tr(U"UTF-32 string literal");
+ tr(UR"(UTF-32 raw string literal)");
+ tr(L"wide string literal");
+ tr(LR"(wide raw string literal)");
+ #endif
+ }
+};
+
+// QTBUG-110949: trailing return types with template parameters
+class TrailingReturnType : public QObject {
+ Q_OBJECT
+ auto f1() -> QString
+ {
+ return tr("f1: trailing return type");
+ }
+ auto f2() -> QString;
+ auto f3() -> std::vector<QString>
+ {
+ return { tr("f3: trailing return type") };
+ }
+ auto f4() -> std::vector<QString>
+ {
+ return { tr("f4: trailing return type") };
+ }
+ auto f5() -> decltype([]() { return 1; })
+ {
+ tr("f5: trailing return type");
+ }
+ auto f6() -> decltype([]() { return 1; });
+};
+
+auto TrailingReturnType::f2() -> QString
+{
+ return tr("f2: trailing return type");
+}
+
+auto TrailingReturnType::f4() -> std::vector<QString>
+{
+ return { tr("f4: trailing return type") };
+}
+
+auto TrailingReturnType::f6() -> decltype([]() { return 1; })
+{
+ tr("f6: trailing return type");
+ return {};
+}
+
+// Check that our -> handling doesn't break the common cases.
+class SomeClassWithArrowInMethods : public QObject {
+ Q_OBJECT
+ void f1()
+ {
+ mainWindow->setWindowTitle(QObject::tr("SomeClassWithArrowInMethods::f1"));
+ }
+ void f2();
+ void f3()
+ {
+ mainWindow->setWindowTitle(tr("SomeClassWithArrowInMethods::f3"));
+ }
+ void f4();
+};
+
+SomeClassWithArrowInMethods::f2()
+{
+ mainWindow->setWindowTitle(QObject::tr("SomeClassWithArrowInMethods::f2"));
+}
+
+SomeClassWithArrowInMethods::f4()
+{
+ mainWindow->setWindowTitle(tr("SomeClassWithArrowInMethods::f4"));
+}
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.h b/tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.h
index 23aa03ab1..b1e01da6c 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.h
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.h
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtCore>
class TopLevel2 {
Q_OBJECT
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp2/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parsecpp2/project.ts.result
index 0710915de..2f65832ed 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp2/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp2/project.ts.result
@@ -18,6 +18,49 @@
</message>
</context>
<context>
+ <name>PrefixedStringLiterals</name>
+ <message>
+ <location filename="main.cpp" line="158"/>
+ <source>UTF-8 string literal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="159"/>
+ <source>UTF-8 raw string literal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="160"/>
+ <source>UTF-16 string literal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="161"/>
+ <source>UTF-16 raw string literal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="162"/>
+ <source>UTF-32 string literal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="163"/>
+ <source>UTF-32 raw string literal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="164"/>
+ <source>wide string literal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="165"/>
+ <source>wide raw string literal</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>QObject</name>
<message>
<location filename="main.cpp" line="107"/>
@@ -48,6 +91,29 @@ This is a test string
</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="main.cpp" line="214"/>
+ <source>SomeClassWithArrowInMethods::f1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="226"/>
+ <source>SomeClassWithArrowInMethods::f2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SomeClassWithArrowInMethods</name>
+ <message>
+ <location filename="main.cpp" line="219"/>
+ <source>SomeClassWithArrowInMethods::f3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="231"/>
+ <source>SomeClassWithArrowInMethods::f4</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>TopLevel</name>
@@ -66,6 +132,40 @@ This is a test string
</message>
</context>
<context>
+ <name>TrailingReturnType</name>
+ <message>
+ <location filename="main.cpp" line="175"/>
+ <source>f1: trailing return type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="180"/>
+ <source>f3: trailing return type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="184"/>
+ <location filename="main.cpp" line="200"/>
+ <source>f4: trailing return type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="188"/>
+ <source>f5: trailing return type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="195"/>
+ <source>f2: trailing return type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="205"/>
+ <source>f6: trailing return type</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>global</name>
<message>
<location filename="main.cpp" line="127"/>
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp2_clang_parser/expectedoutput.txt b/tests/auto/linguist/lupdate/testdata/good/parsecpp2_clang_parser/expectedoutput.txt
new file mode 100644
index 000000000..5546bccc7
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp2_clang_parser/expectedoutput.txt
@@ -0,0 +1,3 @@
+.*[/\\]lupdate[/\\]testdata[/\\]good[/\\]parsecpp2_clang_parser[/\\]main.cpp:107:0: //% cannot be used with tr\(\) / QT_TR_NOOP\(\)\. Ignoring
+.*[/\\]lupdate[/\\]testdata[/\\]good[/\\]parsecpp2_clang_parser[/\\]main.cpp:110:0: //% cannot be used with translate\(\) / QT_TRANSLATE_NOOP\(\)\. Ignoring
+lupdate warning: Message with id 'no_source' has no source\.
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp2_clang_parser/main.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp2_clang_parser/main.cpp
new file mode 100644
index 000000000..933337894
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp2_clang_parser/main.cpp
@@ -0,0 +1,141 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// IMPORTANT!!!! If you want to add testdata to this file,
+// always add it to the end in order to not change the linenumbers of translations!!!
+
+// nothing here
+
+// sickness: multi-\
+line c++ comment } (with brace)
+
+//#define This is a closing brace } which was ignored
+//} // complain here
+
+//#define This is another \
+// closing brace } which was ignored
+//} // complain here
+
+//#define This is another /* comment in } define */\
+// something /* comment )
+// spanning {multiple} lines */ \
+// closing brace } which was ignored
+//} // complain here
+
+//#define This is another // comment in } define \
+// something } comment
+//} // complain here
+#include <QtCore>
+
+
+// Nested class in same file
+class TopLevel {
+ Q_OBJECT
+
+ class Nested;
+};
+
+class TopLevel::Nested {
+ void foo();
+};
+
+void TopLevel::Nested::foo()
+{
+ TopLevel::tr("TopLevel");
+}
+
+// Nested class in other file
+#include "main.h"
+
+class TopLevel2::Nested {
+ void foo();
+};
+
+void TopLevel2::Nested::foo()
+{
+ TopLevel2::tr("TopLevel2");
+}
+
+
+
+namespace NameSpace {
+class ToBeUsed;
+}
+
+// using statement before class definition
+using NameSpace::ToBeUsed;
+
+class NameSpace::ToBeUsed {
+ Q_OBJECT
+ void caller();
+};
+
+void ToBeUsed::caller()
+{
+ tr("NameSpace::ToBeUsed");
+}
+#include <QtWidgets/QApplication>
+
+bool me = false;
+// QTBUG-11818
+//% "Foo"
+QString s1 = QObject::tr("Hello World");
+QString s2 = QObject::tr("Hello World");
+//% "Bar"
+QString s3 = QApplication::translate("QObject", "Hello World");
+QString s4 = QApplication::translate("QObject", "Hello World");
+//% "Baz"
+bool clear = me;
+QString s5 = QObject::tr("Hello World");
+
+
+
+// QTBUG-11843: complain about missing source in id-based messages
+QString s6 = qtTrId("no_source");
+
+QString s7 = QObject::tr(R"(simple one)" R"delim(enter
+)delim" R"delim(with delimiter )delim inside)delim" u8R"(with quote " inside)");
+
+QLatin1String not_translated(R"(
+ This is a test string
+)");
+const char valid[] = QT_TRANSLATE_NOOP("global", R"(
+"The time has come," the Walrus said,
+"To talk of many things:
+Of shoes - and ships - and sealing-wax -
+Of cabbages - and kings -
+And why the sea is boiling hot -
+And whether pigs have wings."
+)");
+
+const QString nodelimiter(QObject::tr(R"(
+ This is a test string
+)"));
+const QString withdelimiter = QObject::tr(R"delim(
+This is a test string
+)delim");
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp2_clang_parser/main.h b/tests/auto/linguist/lupdate/testdata/good/parsecpp2_clang_parser/main.h
new file mode 100644
index 000000000..ccdefdad5
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp2_clang_parser/main.h
@@ -0,0 +1,36 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// IMPORTANT!!!! If you want to add testdata to this file,
+// always add it to the end in order to not change the linenumbers of translations!!!
+#include <QtCore>
+class TopLevel2 {
+ Q_OBJECT
+
+ class Nested;
+};
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp2_clang_parser/project.pro b/tests/auto/linguist/lupdate/testdata/good/parsecpp2_clang_parser/project.pro
new file mode 100644
index 000000000..759bea068
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp2_clang_parser/project.pro
@@ -0,0 +1,3 @@
+SOURCES = main.cpp
+
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp2_clang_parser/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parsecpp2_clang_parser/project.ts.result
new file mode 100644
index 000000000..0710915de
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp2_clang_parser/project.ts.result
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name></name>
+ <message id="no_source">
+ <location filename="main.cpp" line="119"/>
+ <source></source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>NameSpace::ToBeUsed</name>
+ <message>
+ <location filename="main.cpp" line="100"/>
+ <source>NameSpace::ToBeUsed</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="main.cpp" line="107"/>
+ <location filename="main.cpp" line="108"/>
+ <location filename="main.cpp" line="110"/>
+ <location filename="main.cpp" line="111"/>
+ <location filename="main.cpp" line="114"/>
+ <source>Hello World</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="121"/>
+ <source>simple oneenter
+with delimiter )delim insidewith quote &quot; inside</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="136"/>
+ <source>
+ This is a test string
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="139"/>
+ <source>
+This is a test string
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TopLevel</name>
+ <message>
+ <location filename="main.cpp" line="69"/>
+ <source>TopLevel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TopLevel2</name>
+ <message>
+ <location filename="main.cpp" line="81"/>
+ <source>TopLevel2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>global</name>
+ <message>
+ <location filename="main.cpp" line="127"/>
+ <source>
+&quot;The time has come,&quot; the Walrus said,
+&quot;To talk of many things:
+Of shoes - and ships - and sealing-wax -
+Of cabbages - and kings -
+And why the sea is boiling hot -
+And whether pigs have wings.&quot;
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/expectedoutput.txt b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/expectedoutput.txt
new file mode 100644
index 000000000..4ce39f634
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/expectedoutput.txt
@@ -0,0 +1,5 @@
+.*[/\\]lupdate[/\\]testdata[/\\]good[/\\]parsecpp_clang_only[/\\]test_QT_TR_NOOP_context.cpp:51:26: QT_TR_NOOP cannot be called without context\. The call is ignored \(missing Q_OBJECT maybe\?\)
+.*[/\\]lupdate[/\\]testdata[/\\]good[/\\]parsecpp_clang_only[/\\]test_QT_TR_NOOP_context.cpp:91:26: QT_TR_NOOP cannot be called without context\. The call is ignored \(missing Q_OBJECT maybe\?\)
+.*[/\\]lupdate[/\\]testdata[/\\]good[/\\]parsecpp_clang_only[/\\]test_QT_TR_NOOP_context_bis.cpp:51:26: QT_TR_NOOP cannot be called without context\. The call is ignored \(missing Q_OBJECT maybe\?\)
+.*[/\\]lupdate[/\\]testdata[/\\]good[/\\]parsecpp_clang_only[/\\]test_QT_TR_NOOP_context_bis.cpp:91:26: QT_TR_NOOP cannot be called without context\. The call is ignored \(missing Q_OBJECT maybe\?\)
+.*[/\\]lupdate[/\\]testdata[/\\]good[/\\]parsecpp_clang_only[/\\]test_isolatedComments.cpp:84:0: TRANSLATOR cannot be called without comment. The call is ignored.
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/lupdatecmd b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/lupdatecmd
new file mode 100644
index 000000000..e8aa3b3d0
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/lupdatecmd
@@ -0,0 +1 @@
+lupdate project.pro -tr-function-alias QT_TRANSLATE_NOOP+=ma_fonction_a_moi
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/my_include.h b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/my_include.h
new file mode 100644
index 000000000..bd6cc0ca0
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/my_include.h
@@ -0,0 +1,33 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
+
+class Foo
+{
+ Q_OBJECT
+};
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/project.pro b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/project.pro
new file mode 100644
index 000000000..e9e5188d9
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/project.pro
@@ -0,0 +1,9 @@
+SOURCES += test_QT_TR_NOOP_context.cpp
+SOURCES += test_QT_TR_NOOP_context_bis.cpp
+SOURCES += test_isolatedComments.cpp
+SOURCES += test_sameLineComments.cpp
+SOURCES += test_contain_only_alias.cpp
+SOURCES += test_line_directive.cpp
+SOURCES += test_header_only.cpp
+
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/project.ts.result
new file mode 100644
index 000000000..47bd60e6b
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/project.ts.result
@@ -0,0 +1,319 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>Class</name>
+ <message>
+ <location filename="test_header_only.h" line="36"/>
+ <source>translation_in_hearder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CommentOnSameLineExtraComment</name>
+ <message>
+ <location filename="test_sameLineComments.cpp" line="46"/>
+ <source>extra comment before translation. , and = in between</source>
+ <extracomment>other extra comment</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="test_sameLineComments.cpp" line="47"/>
+ <source>extra comment before translation. = in between</source>
+ <extracomment>extra2</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="test_sameLineComments.cpp" line="50"/>
+ <source>extra comment before translation</source>
+ <extracomment>extra3</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="test_sameLineComments.cpp" line="53"/>
+ <source>extra comment before translation. ; in between</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CommentOnSameLineMetaDataComment</name>
+ <message id="other metaData">
+ <location filename="test_sameLineComments.cpp" line="35"/>
+ <source>meta data comment before translation. , and = in between</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="metaData2">
+ <location filename="test_sameLineComments.cpp" line="36"/>
+ <source>meta data comment before translation. = in between</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="metaData3">
+ <location filename="test_sameLineComments.cpp" line="39"/>
+ <source>meta data comment before translation</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Foo</name>
+ <message>
+ <location filename="test_QT_TR_NOOP_context.cpp" line="37"/>
+ <location filename="test_QT_TR_NOOP_context_bis.cpp" line="37"/>
+ <source>context Foo. noop</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FooChild</name>
+ <message>
+ <location filename="test_QT_TR_NOOP_context_with_comments.h" line="35"/>
+ <source>context FooChild. noop with comments</source>
+ <extracomment>Some comments</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GluedNumber1</name>
+ <message>
+ <location filename="test_isolatedComments.cpp" line="59"/>
+ <source></source>
+ <comment>blabla</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GluedNumber2</name>
+ <message>
+ <location filename="test_isolatedComments.cpp" line="60"/>
+ <source></source>
+ <comment>blabla</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GluedNumber3</name>
+ <message>
+ <location filename="test_isolatedComments.cpp" line="61"/>
+ <source></source>
+ <comment>blabla</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GluedNumber4</name>
+ <message>
+ <location filename="test_isolatedComments.cpp" line="62"/>
+ <source></source>
+ <comment>// whatever we have here</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GluedNumber5</name>
+ <message>
+ <location filename="test_isolatedComments.cpp" line="69"/>
+ <source></source>
+ <comment>// whatever2 we2 have2 here2</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GluedOnSameLineOne</name>
+ <message>
+ <location filename="test_isolatedComments.cpp" line="76"/>
+ <source></source>
+ <comment>blabla</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GluedOnSameLineTwo</name>
+ <message>
+ <location filename="test_isolatedComments.cpp" line="76"/>
+ <source></source>
+ <comment>blabla</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>IN_NESTED</name>
+ <message>
+ <location filename="test_QT_TR_NOOP_context.cpp" line="61"/>
+ <location filename="test_QT_TR_NOOP_context_bis.cpp" line="61"/>
+ <source>context IN_NESTED. tr</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="test_QT_TR_NOOP_context.cpp" line="62"/>
+ <location filename="test_QT_TR_NOOP_context_bis.cpp" line="62"/>
+ <source>context IN_NESTED. noop</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MULTIPLELINE</name>
+ <message>
+ <location filename="test_isolatedComments.cpp" line="32"/>
+ <source></source>
+ <comment>first line second line</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MultipleAppearance</name>
+ <message>
+ <location filename="test_isolatedComments.cpp" line="55"/>
+ <source></source>
+ <comment>first appearance</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="test_isolatedComments.cpp" line="57"/>
+ <source></source>
+ <comment>second appearance</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MultipleLineFourthTry</name>
+ <message>
+ <location filename="test_isolatedComments.cpp" line="48"/>
+ <source></source>
+ <comment>first line second line</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MultipleLineSecondTry</name>
+ <message>
+ <location filename="test_isolatedComments.cpp" line="36"/>
+ <source></source>
+ <comment>first line second line</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MultipleLineThirdTry</name>
+ <message>
+ <location filename="test_isolatedComments.cpp" line="42"/>
+ <source></source>
+ <comment>first line second line</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ONLY_Q</name>
+ <message>
+ <location filename="test_QT_TR_NOOP_context.cpp" line="44"/>
+ <location filename="test_QT_TR_NOOP_context_bis.cpp" line="44"/>
+ <source>context ONLY_Q. noop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="test_QT_TR_NOOP_context.cpp" line="45"/>
+ <location filename="test_QT_TR_NOOP_context_bis.cpp" line="45"/>
+ <source>context ONLY_Q. noop N</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="test_line_directive.cpp" line="3"/>
+ <source>blabla 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="test_line_directive.cpp" line="7"/>
+ <source>blabla 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WithQDeclareTr::Nested</name>
+ <message>
+ <location filename="test_QT_TR_NOOP_context.cpp" line="74"/>
+ <location filename="test_QT_TR_NOOP_context_bis.cpp" line="74"/>
+ <source>context WithQDeclareTr::Nested. tr</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="test_QT_TR_NOOP_context.cpp" line="75"/>
+ <location filename="test_QT_TR_NOOP_context_bis.cpp" line="75"/>
+ <source>context WithQDeclareTr::Nested. noop</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>inHeader</name>
+ <message>
+ <location filename="test_isolatedComments.h" line="29"/>
+ <source></source>
+ <comment>how to pick this up Not triggering visit from AST visitor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>my_arg</name>
+ <message>
+ <location filename="test_QT_TR_NOOP_context.cpp" line="63"/>
+ <location filename="test_QT_TR_NOOP_context_bis.cpp" line="63"/>
+ <source>context my_arg. translate_noop</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>test2::BB</name>
+ <message>
+ <location filename="test_QT_TR_NOOP_context.cpp" line="114"/>
+ <location filename="test_QT_TR_NOOP_context_bis.cpp" line="114"/>
+ <source>context test2::BB. tr</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="test_QT_TR_NOOP_context.cpp" line="115"/>
+ <location filename="test_QT_TR_NOOP_context_bis.cpp" line="115"/>
+ <source>context test2::BB. noop</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>test3::D</name>
+ <message>
+ <location filename="test_QT_TR_NOOP_context.cpp" line="137"/>
+ <location filename="test_QT_TR_NOOP_context_bis.cpp" line="137"/>
+ <source>context test3::D. tr</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="test_QT_TR_NOOP_context.cpp" line="138"/>
+ <location filename="test_QT_TR_NOOP_context_bis.cpp" line="138"/>
+ <source>context test3::D. noop</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>test4::A::B::C</name>
+ <message>
+ <location filename="test_QT_TR_NOOP_context.cpp" line="158"/>
+ <location filename="test_QT_TR_NOOP_context_bis.cpp" line="158"/>
+ <source>context is test4::A::B::C. tr</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="test_QT_TR_NOOP_context.cpp" line="159"/>
+ <location filename="test_QT_TR_NOOP_context_bis.cpp" line="159"/>
+ <source>context is test4::A::B::C. noop</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>zscope</name>
+ <message>
+ <location filename="test_contain_only_alias.cpp" line="33"/>
+ <source>string_a_moi</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_QT_TR_NOOP_context.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_QT_TR_NOOP_context.cpp
new file mode 100644
index 000000000..0eca1e66a
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_QT_TR_NOOP_context.cpp
@@ -0,0 +1,165 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
+#include "my_include.h"
+
+int X = 111222332444;
+
+// Q_OBJECT declared in an other file
+class FooChild : public Foo
+{
+ const char *c_noop = QT_TR_NOOP("context Foo. noop");
+};
+
+// No Q_OBJECT. Q_DECLARE_TR_FUNCTIONS. It is enough for tr, it is enough for QT_TR_NOOP
+class OnlyQDeclare
+{
+ Q_DECLARE_TR_FUNCTIONS(ONLY_Q)
+ const char *c_noop = QT_TR_NOOP("context ONLY_Q. noop");
+ const char *c_noop_n = QT_TR_N_NOOP("context ONLY_Q. noop N");
+};
+
+// Show the message warning that the QT_TR_NOOP is ignored because no context could be found.
+class Nothing
+{
+ const char *c_noop = QT_TR_NOOP("context Nothing. noop with no Q_OBJECT nor Q_DECLARE_TR_FUNCTIONS");
+};
+
+// The closest Q_OBJECT or Q_DECLARE_TR_FUNCTIONS gives the context
+class WithQObject
+{
+ Q_OBJECT
+ class Nested
+ {
+ Q_DECLARE_TR_FUNCTIONS(IN_NESTED)
+ QString c_tr = tr("context IN_NESTED. tr");
+ const char *c_noop = QT_TR_NOOP("context IN_NESTED. noop");
+ const char *c_noop_translate = QT_TRANSLATE_NOOP("my_arg", "context my_arg. translate_noop");
+ };
+};
+
+// The closest Q_OBJECT or Q_DECLARE_TR_FUNCTIONS gives the context
+class WithQDeclareTr
+{
+ Q_DECLARE_TR_FUNCTIONS(A_CONTEXT)
+ class Nested
+ {
+ Q_OBJECT
+ QString c_tr = tr("context WithQDeclareTr::Nested. tr");
+ const char *c_noop = QT_TR_NOOP("context WithQDeclareTr::Nested. noop");
+ };
+};
+
+// Case where Q_OBJECT is not seen. Behavior reproduces tr function behavior
+namespace test1 {
+ class AA
+ {
+ Q_OBJECT
+ public:
+ class A {};
+ };
+
+ class B : public AA::A
+ {
+ //QString c_tr = tr(" the Q_OBJECT is not seen"); // this will generate an error.
+ const char *c_noop = QT_TR_NOOP("the Q_OBJECT is not seen"); // Once exploring the bases of B (that is AA:A)
+ // we are not looking for the parents
+ // AA is the parent of A in terms of CXXContextDecl::getParent()
+ // This reproduced tr behavior.
+ };
+}
+
+namespace test2 {
+ class AA
+ {
+ Q_OBJECT
+ public:
+ class A {};
+ };
+
+ class C {};
+
+ class BB
+ {
+ Q_OBJECT
+ public:
+ class B : public AA::A, public C
+ {
+ QString c_tr = tr("context test2::BB. tr");
+ const char *c_noop = QT_TR_NOOP("context test2::BB. noop");
+ };
+ };
+}
+
+namespace test3 {
+ class AA
+ {
+ Q_OBJECT
+ public:
+ class A {};
+ };
+
+ class D {Q_OBJECT};
+ class C : public D {};
+
+ class BB
+ {
+ Q_OBJECT
+ public:
+ class B : public AA::A, public C
+ {
+ QString c_tr = tr("context test3::D. tr");
+ const char *c_noop = QT_TR_NOOP("context test3::D. noop");
+ };
+ };
+}
+
+namespace test4 {
+
+ class A
+ {
+ Q_OBJECT
+ public:
+ class B
+ {
+ public:
+ class C
+ {
+ Q_OBJECT
+ public:
+ class D
+ {
+ QString c_tr = tr("context is test4::A::B::C. tr");
+ const char *c_noop = QT_TR_NOOP("context is test4::A::B::C. noop");
+ };
+ };
+ };
+ };
+
+}
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_QT_TR_NOOP_context_bis.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_QT_TR_NOOP_context_bis.cpp
new file mode 100644
index 000000000..7d30a38ce
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_QT_TR_NOOP_context_bis.cpp
@@ -0,0 +1,165 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
+#include "my_include.h"
+// Testing with two files to check that patch https://codereview.qt-project.org/c/qt/qttools/+/338709/1..3 still works
+int X = 111222332444;
+
+// Q_OBJECT declared in an other file
+class FooChild : public Foo
+{
+ const char *c_noop = QT_TR_NOOP("context Foo. noop");
+};
+
+// No Q_OBJECT. Q_DECLARE_TR_FUNCTIONS. It is enough for tr, it is enough for QT_TR_NOOP
+class OnlyQDeclare
+{
+ Q_DECLARE_TR_FUNCTIONS(ONLY_Q)
+ const char *c_noop = QT_TR_NOOP("context ONLY_Q. noop");
+ const char *c_noop_n = QT_TR_N_NOOP("context ONLY_Q. noop N");
+};
+
+// Show the message warning that the QT_TR_NOOP is ignored because no context could be found.
+class Nothing
+{
+ const char *c_noop = QT_TR_NOOP("context Nothing. noop with no Q_OBJECT nor Q_DECLARE_TR_FUNCTIONS");
+};
+
+// The closest Q_OBJECT or Q_DECLARE_TR_FUNCTIONS gives the context
+class WithQObject
+{
+ Q_OBJECT
+ class Nested
+ {
+ Q_DECLARE_TR_FUNCTIONS(IN_NESTED)
+ QString c_tr = tr("context IN_NESTED. tr");
+ const char *c_noop = QT_TR_NOOP("context IN_NESTED. noop");
+ const char *c_noop_translate = QT_TRANSLATE_NOOP("my_arg", "context my_arg. translate_noop");
+ };
+};
+
+// The closest Q_OBJECT or Q_DECLARE_TR_FUNCTIONS gives the context
+class WithQDeclareTr
+{
+ Q_DECLARE_TR_FUNCTIONS(A_CONTEXT)
+ class Nested
+ {
+ Q_OBJECT
+ QString c_tr = tr("context WithQDeclareTr::Nested. tr");
+ const char *c_noop = QT_TR_NOOP("context WithQDeclareTr::Nested. noop");
+ };
+};
+
+// Case where Q_OBJECT is not seen. Behavior reproduces tr function behavior
+namespace test1 {
+ class AA
+ {
+ Q_OBJECT
+ public:
+ class A {};
+ };
+
+ class B : public AA::A
+ {
+ //QString c_tr = tr(" the Q_OBJECT is not seen"); // this will generate an error.
+ const char *c_noop = QT_TR_NOOP("the Q_OBJECT is not seen"); // Once exploring the bases of B (that is AA:A)
+ // we are not looking for the parents
+ // AA is the parent of A in terms of CXXContextDecl::getParent()
+ // This reproduced tr behavior.
+ };
+}
+
+namespace test2 {
+ class AA
+ {
+ Q_OBJECT
+ public:
+ class A {};
+ };
+
+ class C {};
+
+ class BB
+ {
+ Q_OBJECT
+ public:
+ class B : public AA::A, public C
+ {
+ QString c_tr = tr("context test2::BB. tr");
+ const char *c_noop = QT_TR_NOOP("context test2::BB. noop");
+ };
+ };
+}
+
+namespace test3 {
+ class AA
+ {
+ Q_OBJECT
+ public:
+ class A {};
+ };
+
+ class D {Q_OBJECT};
+ class C : public D {};
+
+ class BB
+ {
+ Q_OBJECT
+ public:
+ class B : public AA::A, public C
+ {
+ QString c_tr = tr("context test3::D. tr");
+ const char *c_noop = QT_TR_NOOP("context test3::D. noop");
+ };
+ };
+}
+
+namespace test4 {
+
+ class A
+ {
+ Q_OBJECT
+ public:
+ class B
+ {
+ public:
+ class C
+ {
+ Q_OBJECT
+ public:
+ class D
+ {
+ QString c_tr = tr("context is test4::A::B::C. tr");
+ const char *c_noop = QT_TR_NOOP("context is test4::A::B::C. noop");
+ };
+ };
+ };
+ };
+
+}
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_QT_TR_NOOP_context_with_comments.h b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_QT_TR_NOOP_context_with_comments.h
new file mode 100644
index 000000000..59da401e9
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_QT_TR_NOOP_context_with_comments.h
@@ -0,0 +1,36 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
+
+class FooChild
+{
+ Q_OBJECT
+ //: Some comments
+ const char *c_noop = QT_TR_NOOP("context FooChild. noop with comments");
+};
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_contain_only_alias.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_contain_only_alias.cpp
new file mode 100644
index 000000000..3af8c48e5
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_contain_only_alias.cpp
@@ -0,0 +1,35 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#ifndef MYOBJECT_H
+#define MYOBJECT_H
+
+#include <QtCore>
+const char *c_2 = ma_fonction_a_moi("zscope", "string_a_moi");
+
+#endif
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_header_only.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_header_only.cpp
new file mode 100644
index 000000000..01b0f6d24
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_header_only.cpp
@@ -0,0 +1,28 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include "test_header_only.h"
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_header_only.h b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_header_only.h
new file mode 100644
index 000000000..3f8c1b0a8
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_header_only.h
@@ -0,0 +1,39 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
+
+class Class
+{
+ Q_OBJECT
+ void function()
+ {
+ tr("translation_in_hearder");
+ }
+
+};
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_isolatedComments.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_isolatedComments.cpp
new file mode 100644
index 000000000..6677145d3
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_isolatedComments.cpp
@@ -0,0 +1,84 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore/QtCore>
+#include "test_isolatedComments.h"
+#include "test_QT_TR_NOOP_context_with_comments.h"
+
+/* TRANSLATOR MULTIPLELINE
+ first line
+ second line
+ */
+/* TRANSLATOR
+ MultipleLineSecondTry
+ first line
+ second line
+ */
+
+/* TRANSLATOR
+ MultipleLineThirdTry first
+ line
+ second line
+ */
+
+/* TRANSLATOR
+ MultipleLineFourthTry first
+ line
+ second line
+ */
+
+
+/* TRANSLATOR MultipleAppearance first appearance */
+
+/* TRANSLATOR MultipleAppearance second appearance */
+
+/* TRANSLATOR GluedNumber1 blabla */
+/* TRANSLATOR GluedNumber2 blabla */
+// TRANSLATOR GluedNumber3 blabla
+/*TRANSLATOR
+GluedNumber4
+ // whatever
+ we
+ have
+ here
+*/
+/* TRANSLATOR GluedNumber5
+ // whatever2
+ we2
+ have2
+ here2
+*/
+
+/* TRANSLATOR GluedOnSameLineOne blabla*/ /* TRANSLATOR GluedOnSameLineTwo blabla*/
+// TRANSLATORMISSINGSPACE this will not be picked up by clang cpp parser
+// oooTRANSLATOR SomethingBeforeTranslator this should not be picked up
+// ooo TRANSLATOR SomethingBeforeTranslatorTwo this should not be picked up
+/* ooo TRANSLATOR SomethingBeforeTranslatorThree this should not be picked up */
+/* ~ TRANSLATOR SomethingBeforeTranslatorFour this
+ should not be picked up */
+// The following comment should be ignored because the comment part is empty
+/* TRANSLATOR onlyContext */
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_isolatedComments.h b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_isolatedComments.h
new file mode 100644
index 000000000..94817de75
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_isolatedComments.h
@@ -0,0 +1,33 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/* TRANSLATOR
+ inHeader
+ how to pick this up
+ Not triggering visit from AST visitor
+ */
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_line_directive.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_line_directive.cpp
new file mode 100644
index 000000000..ed3fc9520
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_line_directive.cpp
@@ -0,0 +1,7 @@
+#include <QtCore>
+
+QString t1 = QObject::tr("blabla 1");
+
+#line 1 "toto.cpp"
+
+QString t2 = QObject::tr("blabla 2");
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_sameLineComments.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_sameLineComments.cpp
new file mode 100644
index 000000000..6f0ddefab
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_only/test_sameLineComments.cpp
@@ -0,0 +1,54 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore/QtCore>
+
+class CommentOnSameLineMetaDataComment
+{
+ Q_OBJECT
+ //= other metaData
+ void hello(int something /*= metaData1 */, QString str = tr("meta data comment before translation. , and = in between"));
+ void hellobis(/*= metaData2 */QString str = tr("meta data comment before translation. = in between"));
+ void hellobiss()
+ {
+ hellobis(/*= metaData3*/ tr("meta data comment before translation"));
+ }
+};
+class CommentOnSameLineExtraComment
+{
+ Q_OBJECT
+ //: other extra comment
+ void hello(int something /*: extra1 */, QString str = tr("extra comment before translation. , and = in between"));
+ void hellobis(/*: extra2 */QString str = tr("extra comment before translation. = in between"));
+ void hellobiss()
+ {
+ hellobis(/*: extra3*/ tr("extra comment before translation"));
+ }
+ //: other extra comment
+ QString toto/*: extra4*/; QString titi = tr("extra comment before translation. ; in between");
+};
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/expectedoutput.txt b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/expectedoutput.txt
new file mode 100644
index 000000000..65c6b1fec
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/expectedoutput.txt
@@ -0,0 +1,2 @@
+.*[/\\]lupdate[/\\]testdata[/\\]good[/\\]parsecpp_clang_parser[/\\]main.cpp:406:0: 'translate' cannot be called without context or source. The call is ignored.
+lupdate warning: Message with id 'yet_another_id' has no source.
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/finddialog.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/finddialog.cpp
new file mode 100644
index 000000000..66e6152ef
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/finddialog.cpp
@@ -0,0 +1,169 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//#include "finddialog.h" nothing is picked up from there
+//#include "mainwindow.h"
+//#include "tabbedbrowser.h"
+//#include "helpwindow.h"
+#include <QtCore>
+#include <QtWidgets/QTextBrowser>
+#include <QTextCursor>
+#include <QtWidgets/QStatusBar>
+#include <QtWidgets/QLineEdit>
+#include <QDateTime>
+#include <QtWidgets/QGridLayout>
+#include <QtWidgets/QMainWindow>
+class FindDialog
+{ Q_OBJECT
+ FindDialog(QMainWindow *parent);
+ void findButtonClicked();
+ void doFind(bool forward);
+ void statusMessage(const QString &message);
+ //QMainWindow *mainWindow() const;
+ void reset();
+
+
+};
+
+
+FindDialog::FindDialog(QMainWindow *parent)
+{
+ //auto contentsWidget = new QWidget(this);
+ //ui.setupUi(contentsWidget);
+ //ui.comboFind->setModel(new CaseSensitiveModel(0, 1, ui.comboFind));
+
+ //QVBoxLayout *l = new QVBoxLayout(this);
+ //l->setContentsMargins(QMargins());
+ //l->setSpacing(0);
+ //l->addWidget(contentsWidget);
+
+ auto lastBrowser = 0;
+ auto onceFound = false;
+ //findExpr.clear();
+
+ auto sb = new QStatusBar;
+ //l->addWidget(sb);
+
+ sb->showMessage(tr("Enter the text you are looking for."));
+
+ //connect(ui.findButton, SIGNAL(clicked()), this, SLOT(findButtonClicked()));
+ //connect(ui.closeButton, SIGNAL(clicked()), this, SLOT(reject()));
+}
+
+//FindDialog::~FindDialog()
+//{
+//}
+
+//void FindDialog::findButtonClicked()
+//{
+// doFind(ui.radioForward->isChecked());
+//}
+
+void FindDialog::doFind(bool forward)
+{
+ //QTextBrowser *browser = static_cast<QTextBrowser*>(mainWindow()->browsers()->currentBrowser());
+ //sb->clearMessage();
+
+ //if (ui.comboFind->currentText() != findExpr || lastBrowser != browser)
+ // onceFound = false;
+ //findExpr = ui.comboFind->currentText();
+ bool onceFound = false;
+ //QTextDocument::FindFlags flags = 0;
+ /*
+ if (ui.checkCase->isChecked())
+ flags |= QTextDocument::FindCaseSensitively;
+
+ if (ui.checkWords->isChecked())
+ flags |= QTextDocument::FindWholeWords;
+
+ QTextCursor c = browser->textCursor();
+ if (!c.hasSelection()) {
+ if (forward)
+ c.movePosition(QTextCursor::Start);
+ else
+ c.movePosition(QTextCursor::End);
+
+ browser->setTextCursor(c);
+ }
+
+ QTextDocument::FindFlags options;
+ if (forward == false)
+ flags |= QTextDocument::FindBackward;
+ */
+ QTextCursor found;//browser->document()->find(findExpr, c, flags);
+ if (found.isNull()) {
+ if (onceFound) {
+ if (forward)
+ statusMessage(tr("Search reached end of the document"));
+ else
+ statusMessage(tr("Search reached start of the document"));
+ } else {
+ statusMessage(tr( "Text not found" ));
+ }
+ } else {
+ //browser->setTextCursor(found);
+ }
+ onceFound |= !found.isNull();
+ //lastBrowser = browser;
+}
+
+//bool FindDialog::hasFindExpression() const
+//{
+// return !findExpr.isEmpty();
+//}
+
+void FindDialog::statusMessage(const QString &message)
+{ /*
+ if (isVisible())
+ sb->showMessage(message);
+ else
+ static_cast<MainWindow*>(parent())->statusBar()->showMessage(message, 2000); */
+}
+
+//QMainWindow *FindDialog::mainWindow() const
+//{
+// return static_cast<MainWindow*>(parentWidget());
+//}
+
+void FindDialog::reset()
+{
+ //ui.comboFind->setFocus();
+ //ui.comboFind->lineEdit()->setSelection(
+ // 0, ui.comboFind->lineEdit()->text().length());
+
+ QString s = QCoreApplication::translate("QCoreApplication", "with comment", "comment");
+ QString s1 = QCoreApplication::translate("QCoreApplication", "empty comment", "");
+ QString s2 = QCoreApplication::translate("QCoreApplication", "null comment", 0);
+ QString s3 = tr("null comment");
+
+ QString s4 = QCoreApplication::translate("QCoreApplication", "encoding, using QCoreApplication", 0);
+ QString s5 = QCoreApplication::translate("QCoreApplication", "encoding, using QApplication", 0);
+
+ QString s6 = QCoreApplication::translate("Kåntekst", "encoding, using QApplication", 0);
+ QString s7 = QCoreApplication::translate("QTranslator", "Key", "disambiguation");
+}
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/included.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/included.cpp
new file mode 100644
index 000000000..ff7fe370b
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/included.cpp
@@ -0,0 +1,31 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
+class MyClass2{
+ QString toto = QObject::tr("message from #included .cpp file");
+};
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/main.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/main.cpp
new file mode 100644
index 000000000..0b70f3b14
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/main.cpp
@@ -0,0 +1,690 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// IMPORTANT!!!! If you want to add testdata to this file,
+// always add it to the end in order to not change the linenumbers of translations!!!
+int main(int argc, char **argv)
+{
+ //Size size = QSize(1,1);
+}
+#include <QtCore>
+QString qt_detectRTLLanguage()
+{
+ return QCoreApplication::tr("QT_LAYOUT_DIRECTION",
+ "Translate this string to the string 'LTR' in left-to-right"
+ " languages or to 'RTL' in right-to-left languages (such as Hebrew"
+ " and Arabic) to get proper widget layout.");// == QLatin1String("RTL");
+}
+
+
+class Dialog2
+{
+ Q_OBJECT
+ void func();
+ void func3();
+ int getCount() const { return 2; }
+
+};
+
+void Dialog2::func()
+{
+ int n = getCount();
+ tr("%n files", "plural form", n);
+ tr("%n cars", 0, n);
+ tr("&Find %n cars", 0, n);
+ tr("Search in %n items?", 0, n);
+ tr("%1. Search in %n items?", 0, n);
+ tr("Age: %1");
+ tr("There are %n house(s)", "Plurals and function call", getCount());
+
+
+
+
+ QCoreApplication::translate("Plurals, QCoreApplication", "%n house(s)", "Plurals and identifier", n);
+ QCoreApplication::translate("Plurals, QCoreApplication", "%n car(s)", "Plurals and literal number", 1);
+ QCoreApplication::translate("Plurals, QCoreApplication", "%n horse(s)", "Plurals and function call", getCount());
+
+
+
+
+
+
+
+
+ QTranslator trans;
+ trans.translate("QTranslator", "Simple");
+ trans.translate("QTranslator", "Simple", 0);
+ trans.translate("QTranslator", "Simple with comment", "with comment");
+ trans.translate("QTranslator", "Plural without comment", 0, 1);
+ trans.translate("QTranslator", "Plural with comment", "comment 1", n);
+ trans.translate("QTranslator", "Plural with comment", "comment 2", getCount());
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
+
+/* This is actually a test of how many alternative ways a struct/class can be found in a source file.
+ * Due to the simple parser in lupdate, it will actually not treat the remaining lines in the define
+ * as a macro, which is a case the 'Tok_Class' parser block might not consider, and it might loop infinite
+ * if it just tries to fetch the next token until it gets a '{' or a ';'. Another pitfall is that the
+ * context of tr("func3") might not be parsed, it won't resume normal evaluation until the '{' after the function
+ * signature.
+ *
+ */
+typedef struct S_
+{
+int a;
+} S, *SPtr;
+class ForwardDecl;
+
+
+#define FT_DEFINE_SERVICE( name ) \
+ typedef struct FT_Service_ ## name ## Rec_ \
+ FT_Service_ ## name ## Rec ; \
+ typedef struct FT_Service_ ## name ## Rec_ \
+ const * FT_Service_ ## name ; \
+ struct FT_Service_ ## name ## Rec_
+
+
+
+
+void Dialog2::func3()
+{
+ tr("func3");
+}
+
+
+
+
+namespace Gui { class BaseClass {}; }
+
+
+class TestClass : QObject {
+ Q_OBJECT
+
+
+ inline QString inlineFunc1() {
+ return tr("inline function", "TestClass");
+ }
+
+ QString inlineFunc2() {
+ return tr("inline function 2", "TestClass");
+ }
+
+ static inline QString staticInlineFunc() {
+ return tr("static inline function", "TestClass");
+ }
+
+ class NoQObject : public Gui::BaseClass {
+ public:
+ inline QString hello() { return QString("hello"); }
+
+ };
+
+};
+
+
+class Testing : QObject {
+ Q_OBJECT
+
+ inline QString f1() {
+ //: this is an extra comment for the translator
+ return tr("extra-commented string");
+ return tr("not extra-commented string");
+ /*: another extra-comment */
+ return tr("another extra-commented string");
+ /*: blah! */
+ return QCoreApplication::translate("scope", "works in translate, too", "blabb", 0);
+ }
+
+};
+
+//: extra comment for NOOP
+//: which spans multiple lines
+const char *c_1 = QT_TRANSLATE_NOOP("scope", "string") /*: complain & ignore */; // 4.4 says the line of this is at the next statement
+//: extra comment for NOOP3
+const char *c_2[2] = QT_TRANSLATE_NOOP3_UTF8("scope", "string", "comment"); // 4.4 doesn't see this
+
+const char *c_3 = QT_TRANSLATE_NOOP("scope", "string " // this is an interleaved comment
+ "continuation on next line");
+
+
+class TestingTake17 : QObject {
+ Q_OBJECT
+
+ void function(void)
+ {
+ //: random comment
+ //= this_is_an_id
+ //~ loc-layout_id fooish_bar
+ //~ po-ignore_me totally foo-barred nonsense
+ tr("something cool");
+
+ tr("less cool");
+
+ //= another_id
+ tr("even more cool");
+ }
+};
+
+
+
+
+//: again an extra comment, this time for id-based NOOP
+//% "This is supposed\tto be quoted \" newline\n"
+//% "backslashed \\ stuff."
+const char *c_4 = QT_TRID_NOOP("this_a_id");
+
+//~ some thing
+//% "This needs to be here. Really."
+QString test = qtTrId("this_another_id", 2);
+
+
+
+class YetAnotherTest : QObject {
+ Q_OBJECT
+
+ void function(void)
+ {
+ //
+ //:
+ //=
+ //~
+ //#
+ //=============
+ //~~~~~~~~~~~~~
+ //:::::::::::::
+ tr("nothing");
+ }
+};
+
+
+
+//: This is a message without a source string
+QString test1 = qtTrId("yet_another_id");
+
+
+
+// QTBUG-9276: context in static initializers
+class Bogus : QObject {
+ Q_OBJECT
+ static const char * const s_stringss[];
+ static const char * const s_strings[];
+
+};
+const char * const Bogus::s_strings[] = {
+ QT_TR_NOOP("this should be in Bogus")
+};
+
+const char * const Bogus::s_stringss[] = {
+ QT_TR_NOOP("this should be in Bogus")
+};
+
+void bogosity()
+{
+ // no spaces here. test collateral damage from ignoring equal sign
+ QString toto=QObject::tr("just QObject");
+}
+
+
+
+namespace Internal {
+
+class Message : public QObject
+{
+ Q_OBJECT
+public:
+ Message(QObject *parent = 0);
+};
+
+} // The temporary closing of the namespace triggers the problem
+
+namespace Internal {
+
+static inline QString message1()
+{
+ return Message::tr("message1"); // Had no namespace
+}
+
+static inline QString message2()
+{
+ return Message::tr("message2"); // Already had namespace
+}
+
+}
+
+
+
+// QTBUG-11426: operator overloads
+class LotsaFun : public QObject
+{
+ Q_OBJECT
+public:
+ LotsaFun *operator<<(int i);
+};
+
+LotsaFun *LotsaFun::operator<<(int i)
+{
+ tr("this is inside operator<<");
+ return this;
+}
+
+
+
+// QTBUG-12683: define in re-opened namespace
+namespace NameSchpace {
+
+class YetMoreFun : public QObject
+{
+ Q_OBJECT
+public:
+ void funStuff();
+};
+
+}
+
+namespace NameSchpace {
+
+#define somevar 1
+
+void YetMoreFun::funStuff()
+{
+ tr("funStuff!");
+}
+
+}
+
+
+
+// QTBUG-29998: tr() macro inside square brackets
+void blubb()
+{
+ QMap<QString, QString> d;
+ d[LotsaFun::tr("bracketed")] = "plain";
+}
+
+
+
+// QTBUG-9276 part 2: QT_TR_NOOP in static member initializers
+class TestClass2
+{
+ Q_DECLARE_TR_FUNCTIONS(TestClass);
+
+public:
+ static const char TEST_STRING[];
+};
+
+const char TestClass2::TEST_STRING[] = QT_TR_NOOP("Test value");
+
+
+
+// derivation from namespaced class
+class Class42 : public NameSchpace::YetMoreFun, Gui::BaseClass
+{
+ Q_OBJECT
+ void foo();
+ Class42() :
+ NameSchpace::YetMoreFun(),
+ Gui::BaseClass()
+ {
+ tr("does that make sense?");
+ }
+ void hello(int something, QString str);
+};
+
+
+void Class42::foo()
+{
+ tr("and does that?");
+}
+
+
+
+// QTBUG-11866: magic comment parsing is too greedy
+void Class42::hello(int something /*= 17 */, QString str = Class42::tr("eyo"))
+{
+}
+
+
+
+// QTBUG-27974: strings from included sources are not collected
+#include "included.cpp"
+
+// test TR_EXCLUDE
+#include "notincluded.cpp"
+
+
+
+// failure to update index on insertion messes up subsequent de-duplication
+void dupeFail()
+{
+ // First just the Id.
+ qtTrId("dupe_id");
+
+ // Then with source
+ //% "This is the source"
+ qtTrId("dupe_id");
+
+ // Finally, same source, but without ID.
+ QCoreApplication::translate("", "This is the source");
+}
+
+
+
+// QTBUG-42735: lupdate confused by `final` specifier (C++11)
+namespace Abc {
+
+class NamespacedFinalClass;
+
+}
+
+class FinalClass final : public QObject
+{
+ Q_OBJECT
+
+ class SubClass final
+ {
+ void f()
+ {
+ tr("nested class context with final");
+ }
+ };
+
+ void f()
+ {
+ tr("class context with final");
+ }
+};
+
+class Abc::NamespacedFinalClass final : public QObject
+{
+ Q_OBJECT
+
+ void f()
+ {
+ tr("namespaced class with final");
+ }
+};
+
+
+
+// QTBUG-48776: lupdate fails to recognize translator comment in ternary
+// operator construct
+void ternary()
+{
+ const auto aaa =
+ true ?
+ //: comment, aaa, true
+ QObject::tr("ternary, true, aaa") :
+ QObject::tr("ternary, failure, aaa");
+
+ const auto bbb =
+ true ?
+ //: comment, bbb, true
+ QObject::tr("ternary, bbb, true") :
+ //: comment, bbb, false
+ QObject::tr("ternary, bbb, false");
+}
+
+class TernaryClass : public QObject
+{
+ Q_OBJECT
+
+ void f()
+ {
+ const auto ccc =
+ true ?
+ //: comment, ccc, true
+ tr("ternary, ccc, true") :
+ tr("ternary, ccc, false");
+
+ const auto ddd =
+ true ?
+ //: comment, ddd, true
+ tr("ternary, ddd, true") :
+ //: comment, ddd, false
+ tr("ternary, ddd, false");
+ }
+};
+
+
+
+// QTBUG-47467: lupdate confused by nullptr in case of plural forms
+void nullptrInPlural()
+{
+ QObject::tr("%n nullptr(s)", nullptr, 3);
+ QCoreApplication::translate("Plurals, nullptr", "%n car(s)", nullptr, 1);
+}
+
+class nullptrClass : public QObject
+{
+ Q_OBJECT
+
+ void f()
+ {
+ tr("%n car(s)", nullptr, 2);
+ }
+};
+
+
+
+// QTBUG-34265: lupdate does not detect NULL and Q_NULLPTR as 0 when being passed as context
+void nullMacroInPlural()
+{
+ QObject::tr("%n NULL(s)", NULL, 3);
+ QObject::tr("%n Q_NULLPTR(s)", Q_NULLPTR, 3);
+}
+
+
+
+// QTBUG-34128: lupdate ignores tr() calls in constructor if a member is
+// initialized with C++11 initializer list
+class ListInitializationClass : public NameSchpace::YetMoreFun, Gui::BaseClass
+{
+ Q_OBJECT
+
+ ListInitializationClass() :
+ NameSchpace::YetMoreFun(),
+ Gui::BaseClass{ },
+ a{ 0 },
+ b(1),
+ c(tr("Hello World"))
+ {
+ tr("ListInitializationClass in-class constructor");
+ }
+
+ ListInitializationClass(int a);
+
+ ListInitializationClass(int a, int b, int c);
+
+ int a;
+ int b;
+ QString c;
+};
+
+ListInitializationClass::ListInitializationClass(int a)// :
+// b{ { 2, 3 }}[a]
+{
+ tr("ListInitializationClass out-of-class single member initializer");
+}
+
+ListInitializationClass::ListInitializationClass(int a, int b, int c) :
+ NameSchpace::YetMoreFun{ },
+ Gui::BaseClass(),
+ a{ 2 + (a/3) },
+ b(b),
+ c{ tr("%n item(s)", Q_NULLPTR, c) }
+{
+ tr("ListInitializationClass out-of-class multi member initializer");
+}
+
+
+
+// QTBUG-42166: lupdate is confused by C++11 lambdas in constructor initializer lists
+class LambdaMemberClass : public Gui::BaseClass
+{
+ Q_OBJECT
+
+ LambdaMemberClass() :
+ Gui::BaseClass(),
+ a{ [](){ /*std::cout << */QObject::tr("Hello"); } },
+ b([](){ /*std::cout << "World\n";*/ })
+ {
+ tr("LambdaMemberClass in-class constructor");
+ }
+
+ LambdaMemberClass(void *);
+
+ std::function<void()> a;
+ std::function<void()> b;
+};
+
+LambdaMemberClass::LambdaMemberClass(void *) :
+ Gui::BaseClass{ },
+ a([](){ /*std::cout <<*/ QObject::tr("Hallo "); }),
+ b{ [](){ /*std::cout << "Welt\n";*/ } }
+{
+ tr("LambdaMemberClass out-of-class constructor");
+}
+
+
+
+// Template parameters in base class initialization
+class TemplateClass : QVarLengthArray<char, sizeof(std::size_t)>, std::vector<int>
+{
+ Q_DECLARE_TR_FUNCTIONS(TemplateClass)
+ QString member;
+
+public:
+ TemplateClass() :
+ QVarLengthArray<char, sizeof(std::size_t)>(),
+ std::vector<int>(3),
+ member(tr("TemplateClass() in-class member initialization"))
+ {
+ tr("TemplateClass() in-class body");
+ }
+
+ TemplateClass(void *);
+ TemplateClass(int);
+};
+
+// supported: combination of parens in base class template parameter with direct initialization (parens)
+TemplateClass::TemplateClass(void *) :
+ QVarLengthArray<char, sizeof(std::size_t)>(),
+ std::vector<int>{ 1, 2 },
+ member{ tr("TemplateClass(void *) out-of-class member initialization") }
+{
+ tr("TemplateClass(void *) out-of-class body");
+}
+
+// not supported: combination of parens in base class template parameter with list initialization (braces)
+TemplateClass::TemplateClass(int) :
+ QVarLengthArray<char, sizeof(std::size_t)>{ 3, 4, 5 },
+ member(tr("[unsupported] TemplateClass(int) out-of-class member initialization"))
+{
+ tr("[unsupported] TemplateClass(int) out-of-class body");
+}
+
+
+
+// Related to QTBUG-53644, adapted from qglobal.h.
+// Namespace Private must be parsed correctly for TranslatedAfterPrivate to work.
+namespace Private {
+ template <class T> struct Class1 { T t; };
+ template <class T> struct Class1<T &> : Class1<T> {};
+ template <class T> struct Class2 { enum { Value = sizeof(T) }; };
+} // namespace Private
+class TranslatedAfterPrivate
+{
+ Q_OBJECT
+ TranslatedAfterPrivate()
+ {
+ tr("Must be in context TranslatedAfterPrivate");
+ }
+};
+
+#include<QObject>
+class AClass {
+ QString aa = QObject::tr("message after system include without space");
+};
+#include"qobject.h"
+class AAClass {
+ QString aa = QObject::tr("message after local include without space");
+};
+
+
+// QTBUG-35164: handling of \uNNNN escapes
+QString unicodeEscape()
+{
+ return QCoreApplication::tr("Context", "soft\u00ADhyphen");
+}
+
+
+
+// QTBUG-63364: C++17 nested namespaces
+namespace Outer::Inner {
+
+class Class
+{
+ Q_OBJECT
+ void function()
+ {
+ tr("MoreFunStuff!");
+ }
+};
+
+}
+
+
+
+// test of translation for _N_ family
+static const char * const test_string_n1[] = {
+ QT_TRANSLATE_N_NOOP("scope", "string %n")
+};
+
+static const char * const test_string_n2[] =
+ QT_TRANSLATE_N_NOOP3("scope", "string %n", "comment")
+;
+class testing { Q_OBJECT
+ void test(); };
+void testing::test() { static const char * const test_string_n3[] = {
+ QT_TR_N_NOOP("%n test")
+ };
+}
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/my_include.h b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/my_include.h
new file mode 100644
index 000000000..1c609d1e3
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/my_include.h
@@ -0,0 +1,6 @@
+#include <QtCore>
+
+class Foo
+{
+ Q_OBJECT
+};
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/notincluded.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/notincluded.cpp
new file mode 100644
index 000000000..3f502fffe
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/notincluded.cpp
@@ -0,0 +1,31 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
+class MyClass{
+ QString toto = QObject::tr("message from #included .cpp file");
+};
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/project.pro b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/project.pro
new file mode 100644
index 000000000..0fd8a9627
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/project.pro
@@ -0,0 +1,7 @@
+SOURCES += main.cpp
+SOURCES += finddialog.cpp
+SOURCES += excluded.cpp
+
+TR_EXCLUDE = $$PWD/excluded.* $$PWD/notincluded.cpp
+
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/project.ts.result
new file mode 100644
index 000000000..ad871b20c
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp_clang_parser/project.ts.result
@@ -0,0 +1,666 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name></name>
+ <message id="this_a_id">
+ <location filename="main.cpp" line="213"/>
+ <source>This is supposed to be quoted &quot; newline
+backslashed \ stuff.</source>
+ <extracomment>again an extra comment, this time for id-based NOOP</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="this_another_id" numerus="yes">
+ <location filename="main.cpp" line="217"/>
+ <source>This needs to be here. Really.</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ <extra-some>thing</extra-some>
+ </message>
+ <message id="yet_another_id">
+ <location filename="main.cpp" line="241"/>
+ <source></source>
+ <extracomment>This is a message without a source string</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="dupe_id">
+ <location filename="main.cpp" line="399"/>
+ <location filename="main.cpp" line="403"/>
+ <source>This is the source</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Abc::NamespacedFinalClass</name>
+ <message>
+ <location filename="main.cpp" line="442"/>
+ <source>namespaced class with final</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Bogus</name>
+ <message>
+ <location filename="main.cpp" line="253"/>
+ <location filename="main.cpp" line="257"/>
+ <source>this should be in Bogus</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Class42</name>
+ <message>
+ <location filename="main.cpp" line="367"/>
+ <source>does that make sense?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="375"/>
+ <source>and does that?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="381"/>
+ <source>eyo</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Dialog2</name>
+ <message numerus="yes">
+ <location filename="main.cpp" line="57"/>
+ <source>%n files</source>
+ <comment>plural form</comment>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="main.cpp" line="58"/>
+ <source>%n cars</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="main.cpp" line="59"/>
+ <source>&amp;Find %n cars</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="main.cpp" line="60"/>
+ <source>Search in %n items?</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="main.cpp" line="61"/>
+ <source>%1. Search in %n items?</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="62"/>
+ <source>Age: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="main.cpp" line="63"/>
+ <source>There are %n house(s)</source>
+ <comment>Plurals and function call</comment>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="130"/>
+ <source>func3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FinalClass</name>
+ <message>
+ <location filename="main.cpp" line="426"/>
+ <source>nested class context with final</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="432"/>
+ <source>class context with final</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FindDialog</name>
+ <message>
+ <location filename="finddialog.cpp" line="72"/>
+ <source>Enter the text you are looking for.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="finddialog.cpp" line="122"/>
+ <source>Search reached end of the document</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="finddialog.cpp" line="124"/>
+ <source>Search reached start of the document</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="finddialog.cpp" line="126"/>
+ <source>Text not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="finddialog.cpp" line="162"/>
+ <source>null comment</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Internal::Message</name>
+ <message>
+ <location filename="main.cpp" line="283"/>
+ <source>message1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="288"/>
+ <source>message2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Kåntekst</name>
+ <message>
+ <location filename="finddialog.cpp" line="167"/>
+ <source>encoding, using QApplication</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LambdaMemberClass</name>
+ <message>
+ <location filename="main.cpp" line="570"/>
+ <source>LambdaMemberClass in-class constructor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="584"/>
+ <source>LambdaMemberClass out-of-class constructor</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListInitializationClass</name>
+ <message>
+ <location filename="main.cpp" line="528"/>
+ <source>Hello World</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="530"/>
+ <source>ListInitializationClass in-class constructor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="545"/>
+ <source>ListInitializationClass out-of-class single member initializer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="main.cpp" line="553"/>
+ <source>%n item(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="555"/>
+ <source>ListInitializationClass out-of-class multi member initializer</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LotsaFun</name>
+ <message>
+ <location filename="main.cpp" line="305"/>
+ <source>this is inside operator&lt;&lt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="340"/>
+ <source>bracketed</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>NameSchpace::YetMoreFun</name>
+ <message>
+ <location filename="main.cpp" line="329"/>
+ <source>funStuff!</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Outer::Inner::Class</name>
+ <message>
+ <location filename="main.cpp" line="669"/>
+ <source>MoreFunStuff!</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Plurals, QCoreApplication</name>
+ <message numerus="yes">
+ <location filename="main.cpp" line="68"/>
+ <source>%n house(s)</source>
+ <comment>Plurals and identifier</comment>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="main.cpp" line="69"/>
+ <source>%n car(s)</source>
+ <comment>Plurals and literal number</comment>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="main.cpp" line="70"/>
+ <source>%n horse(s)</source>
+ <comment>Plurals and function call</comment>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>Plurals, nullptr</name>
+ <message numerus="yes">
+ <location filename="main.cpp" line="493"/>
+ <source>%n car(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>QCoreApplication</name>
+ <message>
+ <location filename="finddialog.cpp" line="159"/>
+ <source>with comment</source>
+ <comment>comment</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="finddialog.cpp" line="160"/>
+ <source>empty comment</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="finddialog.cpp" line="161"/>
+ <source>null comment</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="finddialog.cpp" line="164"/>
+ <source>encoding, using QCoreApplication</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="finddialog.cpp" line="165"/>
+ <source>encoding, using QApplication</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="38"/>
+ <source>QT_LAYOUT_DIRECTION</source>
+ <comment>Translate this string to the string &apos;LTR&apos; in left-to-right languages or to &apos;RTL&apos; in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="656"/>
+ <source>Context</source>
+ <comment>soft­hyphen</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="main.cpp" line="263"/>
+ <source>just QObject</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="455"/>
+ <source>ternary, true, aaa</source>
+ <extracomment>comment, aaa, true</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="456"/>
+ <source>ternary, failure, aaa</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="461"/>
+ <source>ternary, bbb, true</source>
+ <extracomment>comment, bbb, true</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="463"/>
+ <source>ternary, bbb, false</source>
+ <extracomment>comment, bbb, false</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="main.cpp" line="492"/>
+ <source>%n nullptr(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="main.cpp" line="511"/>
+ <source>%n NULL(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="main.cpp" line="512"/>
+ <source>%n Q_NULLPTR(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="567"/>
+ <source>Hello</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="581"/>
+ <source>Hallo </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="645"/>
+ <source>message after system include without space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="649"/>
+ <source>message after local include without space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="included.cpp" line="30"/>
+ <source>message from #included .cpp file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QTranslator</name>
+ <message>
+ <location filename="finddialog.cpp" line="168"/>
+ <source>Key</source>
+ <comment>disambiguation</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="80"/>
+ <location filename="main.cpp" line="81"/>
+ <source>Simple</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="82"/>
+ <source>Simple with comment</source>
+ <comment>with comment</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="main.cpp" line="83"/>
+ <source>Plural without comment</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="main.cpp" line="84"/>
+ <source>Plural with comment</source>
+ <comment>comment 1</comment>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="main.cpp" line="85"/>
+ <source>Plural with comment</source>
+ <comment>comment 2</comment>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>TemplateClass</name>
+ <message>
+ <location filename="main.cpp" line="599"/>
+ <source>TemplateClass() in-class member initialization</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="601"/>
+ <source>TemplateClass() in-class body</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="612"/>
+ <source>TemplateClass(void *) out-of-class member initialization</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="614"/>
+ <source>TemplateClass(void *) out-of-class body</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="620"/>
+ <source>[unsupported] TemplateClass(int) out-of-class member initialization</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="622"/>
+ <source>[unsupported] TemplateClass(int) out-of-class body</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TernaryClass</name>
+ <message>
+ <location filename="main.cpp" line="475"/>
+ <source>ternary, ccc, true</source>
+ <extracomment>comment, ccc, true</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="476"/>
+ <source>ternary, ccc, false</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="481"/>
+ <source>ternary, ddd, true</source>
+ <extracomment>comment, ddd, true</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="483"/>
+ <source>ternary, ddd, false</source>
+ <extracomment>comment, ddd, false</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TestClass</name>
+ <message>
+ <location filename="main.cpp" line="144"/>
+ <source>inline function</source>
+ <comment>TestClass</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="148"/>
+ <source>inline function 2</source>
+ <comment>TestClass</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="152"/>
+ <source>static inline function</source>
+ <comment>TestClass</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="354"/>
+ <source>Test value</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Testing</name>
+ <message>
+ <location filename="main.cpp" line="169"/>
+ <source>extra-commented string</source>
+ <extracomment>this is an extra comment for the translator</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="170"/>
+ <source>not extra-commented string</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="172"/>
+ <source>another extra-commented string</source>
+ <extracomment>another extra-comment</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TestingTake17</name>
+ <message id="this_is_an_id">
+ <location filename="main.cpp" line="198"/>
+ <source>something cool</source>
+ <extracomment>random comment</extracomment>
+ <translation type="unfinished"></translation>
+ <extra-loc-layout_id>fooish_bar</extra-loc-layout_id>
+ <extra-po-ignore_me>totally foo-barred nonsense</extra-po-ignore_me>
+ </message>
+ <message>
+ <location filename="main.cpp" line="200"/>
+ <source>less cool</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="another_id">
+ <location filename="main.cpp" line="203"/>
+ <source>even more cool</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TranslatedAfterPrivate</name>
+ <message>
+ <location filename="main.cpp" line="639"/>
+ <source>Must be in context TranslatedAfterPrivate</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>YetAnotherTest</name>
+ <message>
+ <location filename="main.cpp" line="234"/>
+ <source>nothing</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>nullptrClass</name>
+ <message numerus="yes">
+ <location filename="main.cpp" line="502"/>
+ <source>%n car(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>scope</name>
+ <message numerus="yes">
+ <location filename="main.cpp" line="174"/>
+ <source>works in translate, too</source>
+ <comment>blabb</comment>
+ <extracomment>blah!</extracomment>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="181"/>
+ <source>string</source>
+ <extracomment>extra comment for NOOP which spans multiple lines</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="183"/>
+ <source>string</source>
+ <comment>comment</comment>
+ <extracomment>extra comment for NOOP3</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="185"/>
+ <source>string continuation on next line</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="main.cpp" line="679"/>
+ <source>string %n</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="main.cpp" line="683"/>
+ <source>string %n</source>
+ <comment>comment</comment>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>testing</name>
+ <message numerus="yes">
+ <location filename="main.cpp" line="688"/>
+ <source>%n test</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/linguist/lupdate/testdata/good/parseidbasedui/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parseidbasedui/project.ts.result
index 989aabcbb..96ad9277e 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parseidbasedui/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/parseidbasedui/project.ts.result
@@ -4,12 +4,12 @@
<context>
<name>FindDialog</name>
<message id="windowTitleId">
- <location filename="project.ui" line="42"/>
+ <location filename="project.ui" line="18"/>
<source>Qt Assistant - Finn text</source>
<translation type="unfinished"></translation>
</message>
<message id="heightId">
- <location filename="project.ui" line="45"/>
+ <location filename="project.ui" line="21"/>
<source>Finn tekst - Der Bjørn möchte auch mal.</source>
<translation type="unfinished"></translation>
</message>
diff --git a/tests/auto/linguist/lupdate/testdata/good/parseidbasedui/project.ui b/tests/auto/linguist/lupdate/testdata/good/parseidbasedui/project.ui
index 684033ddb..f44278306 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parseidbasedui/project.ui
+++ b/tests/auto/linguist/lupdate/testdata/good/parseidbasedui/project.ui
@@ -1,32 +1,8 @@
<ui version="4.0" idbasedtr="true">
- <author></author>
-<comment>*********************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2017 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<exportmacro></exportmacro>
<class>FindDialog</class>
<widget class="QWidget" name="FindDialog" >
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsejava/main.java b/tests/auto/linguist/lupdate/testdata/good/parsejava/main.java
index da3af7650..3bb2c111c 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsejava/main.java
+++ b/tests/auto/linguist/lupdate/testdata/good/parsejava/main.java
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtTools of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsejs/main.js b/tests/auto/linguist/lupdate/testdata/good/parsejs/main.js
index 9f61cea8f..964ec72a1 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsejs/main.js
+++ b/tests/auto/linguist/lupdate/testdata/good/parsejs/main.js
@@ -89,3 +89,6 @@ var more_greeting_strings = [ QT_TRID_NOOP("qtn_needle"), QT_TRID_NOOP("qtn_hays
//: qsTrId() with comment, meta-data and plurals.
//~ well-tested True
qsTrId("qtn_bar_baz", 10);
+
+//~ quoted " string with spaces "
+qsTr("translation with extras-quoted field");
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsejs/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parsejs/project.ts.result
index 8df655fec..b505d3608 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsejs/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/parsejs/project.ts.result
@@ -191,5 +191,11 @@
<numerusform></numerusform>
</translation>
</message>
+ <message>
+ <location filename="main.js" line="94"/>
+ <source>translation with extras-quoted field</source>
+ <translation type="unfinished"></translation>
+ <extra-quoted> string with spaces </extra-quoted>
+ </message>
</context>
</TS>
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsejs4/main.js b/tests/auto/linguist/lupdate/testdata/good/parsejs4/main.js
index 7a709ad92..3daafc480 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsejs4/main.js
+++ b/tests/auto/linguist/lupdate/testdata/good/parsejs4/main.js
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
.pragma library
.import QtQuick 2.0 as Quick2
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsejscontexts/main.js b/tests/auto/linguist/lupdate/testdata/good/parsejscontexts/main.js
index aa510c1ae..e34662062 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsejscontexts/main.js
+++ b/tests/auto/linguist/lupdate/testdata/good/parsejscontexts/main.js
@@ -27,3 +27,6 @@ qsTranslate("Foo", "Nine");
// Empty context.
// TRANSLATOR
qsTr("Ten");
+
+// setting context with TRANSLATOR comment is not supported on the QML side
+// The support on the lupdate side has been removed
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsejscontexts/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parsejscontexts/project.ts.result
index e36dbe4fa..61de0454c 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsejscontexts/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/parsejscontexts/project.ts.result
@@ -2,45 +2,25 @@
<!DOCTYPE TS>
<TS version="2.1">
<context>
- <name></name>
- <message>
- <location filename="main.js" line="29"/>
- <source>Ten</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Bar</name>
+ <name>Foo</name>
<message>
- <location filename="main.js" line="10"/>
- <source>Five</source>
+ <location filename="main.js" line="25"/>
+ <source>Nine</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>Bar::Baz</name>
+ <name>main</name>
<message>
- <location filename="main.js" line="22"/>
- <source>Eight</source>
+ <location filename="main.js" line="2"/>
+ <source>One</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>Baz</name>
- <message>
- <location filename="main.js" line="12"/>
- <source></source>
- <comment>This is a comment to the translator.</comment>
- <translation></translation>
- </message>
<message>
- <location filename="main.js" line="16"/>
- <source>Six</source>
+ <location filename="main.js" line="3"/>
+ <source>Two</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>Foo</name>
<message>
<location filename="main.js" line="6"/>
<source>Three</source>
@@ -52,29 +32,28 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.js" line="25"/>
- <source>Nine</source>
+ <location filename="main.js" line="10"/>
+ <source>Five</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.js" line="16"/>
+ <source>Six</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>Foo.Bar</name>
<message>
<location filename="main.js" line="19"/>
<source>Seven</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>main</name>
<message>
- <location filename="main.js" line="2"/>
- <source>One</source>
+ <location filename="main.js" line="22"/>
+ <source>Eight</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.js" line="3"/>
- <source>Two</source>
+ <location filename="main.js" line="29"/>
+ <source>Ten</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/tests/auto/linguist/lupdate/testdata/good/parseobjc/main.mm b/tests/auto/linguist/lupdate/testdata/good/parseobjc/main.mm
index 7cc1c34e3..f04701a98 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parseobjc/main.mm
+++ b/tests/auto/linguist/lupdate/testdata/good/parseobjc/main.mm
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <QtCore/qcoreapplication.h>
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsepython/main.py b/tests/auto/linguist/lupdate/testdata/good/parsepython/main.py
new file mode 100644
index 000000000..5c0c77851
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsepython/main.py
@@ -0,0 +1,95 @@
+from pathlib import Path
+import sys
+
+from PySide6.QtCore import (QItemSelection, QLibraryInfo, QLocale, QTranslator,
+ Qt, Slot)
+from PySide6.QtWidgets import (QAbstractItemView, QApplication, QListWidget,
+ QMainWindow, QWidget)
+import linguist_rc
+
+""""
+ Misleading indentation (5) for PYSIDE-2379"""
+
+class Window(QMainWindow):
+ def __init__(self):
+ super().__init__()
+ #: File menu
+ file_menu = self.menuBar().addMenu(self.tr("&File"))
+ #= quit_id
+ quit_action = file_menu.addAction(self.tr("Quit"))
+ quit_action.setShortcut(self.tr("CTRL+Q"))
+ quit_action.triggered.connect(self.close)
+ help_menu = self.menuBar().addMenu(self.tr("&Help"))
+ about_qt_action = help_menu.addAction(self.tr("About Qt"))
+ about_qt_action.triggered.connect(qApp.aboutQt)
+
+ self._list_widget = QListWidget()
+ self._list_widget.setSelectionMode(QAbstractItemView.MultiSelection)
+ self._list_widget.selectionModel().selectionChanged.connect(self.selection_changed)
+ self._list_widget.addItem("C++")
+ self._list_widget.addItem("Java")
+ self._list_widget.addItem("Python")
+ self.setCentralWidget(self._list_widget)
+
+ @Slot(QItemSelection, QItemSelection)
+ def selection_changed(self, selected, deselected):
+ count = len(self._list_widget.selectionModel().selectedRows())
+ message = self.tr("%n language(s) selected", "", count)
+ self.statusBar().showMessage(message)
+
+ def test_translate_trailing_comma_behavior(self):
+ self.translate("CONTEXT",
+ "SOME TEXT, NO COMMENT, TRAILING COMMA",
+ )
+ self.translate("CONTEXT",
+ "SOME TEXT",
+ "A COMMENT, NO TRAILING COMMA"
+ )
+ self.translate("CONTEXT",
+ "SOME MORE TEXT",
+ "A COMMENT WITH A TRAILING COMMA",
+ )
+ self.translate("CONTEXT",
+ "EVEN MORE TEXT",
+ "A COMMENT WITH PLURALIZATION",
+ 42
+ )
+ self.translate("CONTEXT",
+ "YET MORE TEXT",
+ "A COMMENT WITH PLURALIZATION AND A TRAILING COMMA",
+ 42,
+ )
+ self.translate("CONTEXT",
+ "SOME TEXT, SHOULD NOT BE EXTRACTED",
+ "A COMMENT WITH PLURALIZATION AND A TRAILING COMMA AND GARBAGE",
+ 42,
+ "THIS SHOULD NOT WORK"
+ )
+
+ class NestedClass:
+ def foo(self):
+ msg = self.tr("Nested Message")
+
+ def window_method(self): # PYSIDE-2379, Don't put this into NestedClass
+ msg = self.tr("Window Message")
+ msg = self.tr(f"An f-string\\")
+ msg = self.tr(r"A raw strin\g")
+ msg = self.tr(r"A raw strin\g""continued\\")
+ msg = self.tr(r"A raw string with escaped quote\"bla")
+
+
+if __name__ == '__main__':
+ app = QApplication(sys.argv)
+
+ path = QLibraryInfo.location(QLibraryInfo.TranslationsPath)
+ translator = QTranslator(app)
+ if translator.load(QLocale.system(), 'qtbase_', '', path):
+ app.installTranslator(translator)
+ translator = QTranslator(app)
+ path = ':/translations'
+ if translator.load(QLocale.system(), 'example_', '', path):
+ app.installTranslator(translator)
+
+ window = Window()
+ window.show()
+ sys.exit(app.exec())
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsepython/project.pro b/tests/auto/linguist/lupdate/testdata/good/parsepython/project.pro
new file mode 100644
index 000000000..ed8aba541
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsepython/project.pro
@@ -0,0 +1,3 @@
+SOURCES += main.py
+
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsepython/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parsepython/project.ts.result
new file mode 100644
index 000000000..df1788672
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsepython/project.ts.result
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>CONTEXT</name>
+ <message>
+ <location filename="main.py" line="44"/>
+ <source>SOME TEXT, NO COMMENT, TRAILING COMMA</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.py" line="48"/>
+ <source>SOME TEXT</source>
+ <comment>A COMMENT, NO TRAILING COMMA</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.py" line="52"/>
+ <source>SOME MORE TEXT</source>
+ <comment>A COMMENT WITH A TRAILING COMMA</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="main.py" line="57"/>
+ <source>EVEN MORE TEXT</source>
+ <comment>A COMMENT WITH PLURALIZATION</comment>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="main.py" line="62"/>
+ <source>YET MORE TEXT</source>
+ <comment>A COMMENT WITH PLURALIZATION AND A TRAILING COMMA</comment>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>NestedClass</name>
+ <message>
+ <location filename="main.py" line="73"/>
+ <source>Nested Message</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Window</name>
+ <message>
+ <location filename="main.py" line="17"/>
+ <source>&amp;File</source>
+ <extracomment>File menu</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="quit_id">
+ <location filename="main.py" line="19"/>
+ <source>Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.py" line="20"/>
+ <source>CTRL+Q</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.py" line="22"/>
+ <source>&amp;Help</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.py" line="23"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="main.py" line="37"/>
+ <source>%n language(s) selected</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="main.py" line="75"/>
+ <source>Window Message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.py" line="76"/>
+ <source>An f-string\</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.py" line="77"/>
+ <source>A raw strin\g</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.py" line="78"/>
+ <source>A raw strin\gcontinued\</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.py" line="81"/>
+ <source>A raw string with escaped quote&quot;bla</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/linguist/lupdate/testdata/good/parseqml/main.qml b/tests/auto/linguist/lupdate/testdata/good/parseqml/main.qml
index c966fa112..c19bffc72 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parseqml/main.qml
+++ b/tests/auto/linguist/lupdate/testdata/good/parseqml/main.qml
@@ -96,5 +96,12 @@ QtObject {
//% "Source text"
qsTrId("qtn_baz_biz");
+
+ //~ quoted " string with spaces "
+ qsTr("translation with extras-quoted field");
+
+ // template literals are supported
+ qsTr(`template literal`);
+ qsTranslate("TemplateLiteral", 'template literal 2');
}
}
diff --git a/tests/auto/linguist/lupdate/testdata/good/parseqml/main_test_pragma.qml b/tests/auto/linguist/lupdate/testdata/good/parseqml/main_test_pragma.qml
new file mode 100644
index 000000000..4a13bd3f0
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parseqml/main_test_pragma.qml
@@ -0,0 +1,104 @@
+import QtQuick 1.0
+
+pragma Translator: PragmaContext
+QtObject {
+ function translate() {
+ qsTr("One");
+ qsTranslate("FooContext", "Two");
+
+ var greeting_strings = [
+ QT_TR_NOOP("Hello"),
+ QT_TRANSLATE_NOOP("FooContext", "Goodbye")
+ ];
+
+ qsTr("One", "not the same one");
+
+ //: My first comment.
+ qsTr("See comment");
+
+ //: My second comment.
+ qsTranslate("BarContext", "See other comment");
+
+ //: My third comment
+ //: spans two lines.
+ qsTr("The comment explains it all");
+
+ //: My fourth comment
+ //: spans a whopping
+ //: three lines.
+ qsTranslate("BazContext", "It should be clear by now");
+
+ /*: C-style comment. */
+ qsTr("I love C++");
+
+ /*: Another C-style comment. */
+ qsTranslate("FooContext", "I really love C++");
+
+ /*: C-style comment, followed by */
+ /*: another one. */
+ qsTr("Qt is the best");
+
+ /*: Another C-style comment, followed by */
+ /*: yet another one. */
+ qsTranslate("BarContext", "Qt is the very best");
+
+ // This comment doesn't have any effect.
+ qsTr("The comment had no effect");
+
+ // This comment doesn't have any effect either.
+ qsTranslate("BazContext", "The comment had no effect, really");
+
+ /* This C-style comment doesn't have any effect. */
+ qsTr("No comment to your comment");
+
+ /* This C-style comment doesn't have any effect either. */
+ qsTranslate("FooContext", "I refuse to comment on that");
+
+ //= id_foo
+ qsTr("This string has an identifier");
+
+ //= id_bar
+ qsTranslate("BarContext", "This string also has an identifier");
+
+ //~ loc-blank False
+ qsTr("This string has meta-data");
+
+ //~ loc-layout_id foo_dialog
+ qsTranslate("BazContext", "This string also has meta-data");
+
+ // This comment is to be ignored.
+ //: This is a comment for the translator.
+ //= id_baz
+ //~ foo 123
+ //~ magic-stuff This means something special.
+ qsTr("This string has a lot of information");
+
+ // This comment is also to be ignored.
+ //: This is another comment for the translator.
+ //= id_babar
+ //~ foo-bar Important stuff
+ //~ needle-in-haystack Found
+ //~ overflow True
+ qsTranslate("FooContext", "This string has even more information");
+
+ qsTr("This string has disambiguation", "Disambiguation");
+
+ qsTranslate("BarContext", "This string also has disambiguation", "Another disambiguation");
+
+ qsTr("This string contains plurals", "", 10);
+
+ qsTrId("qtn_foo_bar");
+
+ var more_greeting_strings = [ QT_TRID_NOOP("qtn_needle"), QT_TRID_NOOP("qtn_haystack") ];
+
+ //: qsTrId() with comment, meta-data and plurals.
+ //~ well-tested True
+ qsTrId("qtn_bar_baz", 10);
+
+ //% "Source text"
+ qsTrId("qtn_baz_biz");
+
+ //~ quoted " string with spaces "
+ qsTr("translation with extras-quoted field");
+ }
+}
diff --git a/tests/auto/linguist/lupdate/testdata/good/parseqml/project.pro b/tests/auto/linguist/lupdate/testdata/good/parseqml/project.pro
index 1040e2227..4e67693d7 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parseqml/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/parseqml/project.pro
@@ -1,3 +1,4 @@
SOURCES += main.qml
+SOURCES += main_test_pragma.qml
TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/parseqml/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parseqml/project.ts.result
index ce57bd44d..6dc3a5a27 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parseqml/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/parseqml/project.ts.result
@@ -5,21 +5,25 @@
<name></name>
<message id="qtn_foo_bar">
<location filename="main.qml" line="89"/>
+ <location filename="main_test_pragma.qml" line="90"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message id="qtn_needle">
<location filename="main.qml" line="91"/>
+ <location filename="main_test_pragma.qml" line="92"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message id="qtn_haystack">
<location filename="main.qml" line="91"/>
+ <location filename="main_test_pragma.qml" line="92"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message id="qtn_bar_baz" numerus="yes">
<location filename="main.qml" line="95"/>
+ <location filename="main_test_pragma.qml" line="96"/>
<source></source>
<extracomment>qsTrId() with comment, meta-data and plurals.</extracomment>
<translation type="unfinished">
@@ -29,6 +33,7 @@
</message>
<message id="qtn_baz_biz">
<location filename="main.qml" line="98"/>
+ <location filename="main_test_pragma.qml" line="99"/>
<source>Source text</source>
<translation type="unfinished"></translation>
</message>
@@ -37,23 +42,27 @@
<name>BarContext</name>
<message>
<location filename="main.qml" line="19"/>
+ <location filename="main_test_pragma.qml" line="20"/>
<source>See other comment</source>
<extracomment>My second comment.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.qml" line="42"/>
+ <location filename="main_test_pragma.qml" line="43"/>
<source>Qt is the very best</source>
<extracomment>Another C-style comment, followed by yet another one.</extracomment>
<translation type="unfinished"></translation>
</message>
<message id="id_bar">
<location filename="main.qml" line="60"/>
+ <location filename="main_test_pragma.qml" line="61"/>
<source>This string also has an identifier</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.qml" line="85"/>
+ <location filename="main_test_pragma.qml" line="86"/>
<source>This string also has disambiguation</source>
<comment>Another disambiguation</comment>
<translation type="unfinished"></translation>
@@ -63,17 +72,20 @@
<name>BazContext</name>
<message>
<location filename="main.qml" line="28"/>
+ <location filename="main_test_pragma.qml" line="29"/>
<source>It should be clear by now</source>
<extracomment>My fourth comment spans a whopping three lines.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.qml" line="48"/>
+ <location filename="main_test_pragma.qml" line="49"/>
<source>The comment had no effect, really</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.qml" line="66"/>
+ <location filename="main_test_pragma.qml" line="67"/>
<source>This string also has meta-data</source>
<translation type="unfinished"></translation>
<extra-loc-layout_id>foo_dialog</extra-loc-layout_id>
@@ -83,27 +95,32 @@
<name>FooContext</name>
<message>
<location filename="main.qml" line="6"/>
+ <location filename="main_test_pragma.qml" line="7"/>
<source>Two</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.qml" line="10"/>
+ <location filename="main_test_pragma.qml" line="11"/>
<source>Goodbye</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.qml" line="34"/>
+ <location filename="main_test_pragma.qml" line="35"/>
<source>I really love C++</source>
<extracomment>Another C-style comment.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.qml" line="54"/>
+ <location filename="main_test_pragma.qml" line="55"/>
<source>I refuse to comment on that</source>
<translation type="unfinished"></translation>
</message>
<message id="id_babar">
<location filename="main.qml" line="81"/>
+ <location filename="main_test_pragma.qml" line="82"/>
<source>This string has even more information</source>
<extracomment>This is another comment for the translator.</extracomment>
<translation type="unfinished"></translation>
@@ -113,6 +130,92 @@
</message>
</context>
<context>
+ <name>PragmaContext</name>
+ <message>
+ <location filename="main_test_pragma.qml" line="6"/>
+ <source>One</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main_test_pragma.qml" line="10"/>
+ <source>Hello</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main_test_pragma.qml" line="14"/>
+ <source>One</source>
+ <comment>not the same one</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main_test_pragma.qml" line="17"/>
+ <source>See comment</source>
+ <extracomment>My first comment.</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main_test_pragma.qml" line="24"/>
+ <source>The comment explains it all</source>
+ <extracomment>My third comment spans two lines.</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main_test_pragma.qml" line="32"/>
+ <source>I love C++</source>
+ <extracomment>C-style comment.</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main_test_pragma.qml" line="39"/>
+ <source>Qt is the best</source>
+ <extracomment>C-style comment, followed by another one.</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main_test_pragma.qml" line="46"/>
+ <source>The comment had no effect</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main_test_pragma.qml" line="52"/>
+ <source>No comment to your comment</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main_test_pragma.qml" line="64"/>
+ <source>This string has meta-data</source>
+ <translation type="unfinished"></translation>
+ <extra-loc-blank>False</extra-loc-blank>
+ </message>
+ <message>
+ <location filename="main_test_pragma.qml" line="84"/>
+ <source>This string has disambiguation</source>
+ <comment>Disambiguation</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="main_test_pragma.qml" line="88"/>
+ <source>This string contains plurals</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="main_test_pragma.qml" line="102"/>
+ <source>translation with extras-quoted field</source>
+ <translation type="unfinished"></translation>
+ <extra-quoted> string with spaces </extra-quoted>
+ </message>
+</context>
+<context>
+ <name>TemplateLiteral</name>
+ <message>
+ <location filename="main.qml" line="105"/>
+ <source>template literal 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>main</name>
<message>
<location filename="main.qml" line="5"/>
@@ -166,6 +269,7 @@
</message>
<message id="id_foo">
<location filename="main.qml" line="57"/>
+ <location filename="main_test_pragma.qml" line="58"/>
<source>This string has an identifier</source>
<translation type="unfinished"></translation>
</message>
@@ -177,6 +281,7 @@
</message>
<message id="id_baz">
<location filename="main.qml" line="73"/>
+ <location filename="main_test_pragma.qml" line="74"/>
<source>This string has a lot of information</source>
<extracomment>This is a comment for the translator.</extracomment>
<translation type="unfinished"></translation>
@@ -196,5 +301,16 @@
<numerusform></numerusform>
</translation>
</message>
+ <message>
+ <location filename="main.qml" line="101"/>
+ <source>translation with extras-quoted field</source>
+ <translation type="unfinished"></translation>
+ <extra-quoted> string with spaces </extra-quoted>
+ </message>
+ <message>
+ <location filename="main.qml" line="104"/>
+ <source>template literal</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
diff --git a/tests/auto/linguist/lupdate/testdata/good/parseqml2/main.qml b/tests/auto/linguist/lupdate/testdata/good/parseqml2/main.qml
index 2b08bf7a0..b5e58420c 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parseqml2/main.qml
+++ b/tests/auto/linguist/lupdate/testdata/good/parseqml2/main.qml
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
import QtQuick 1.0; QtObject {
function translate() {
@@ -85,4 +85,4 @@ QT_TRID_NOOP("qtn_bar");
}
-} \ No newline at end of file
+}
diff --git a/tests/auto/linguist/lupdate/testdata/good/parseqrc/main.cpp b/tests/auto/linguist/lupdate/testdata/good/parseqrc/main.cpp
index a7052dada..dba66cfd6 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parseqrc/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/parseqrc/main.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtWidgets/QApplication>
void func1() {
QApplication::tr("Hello world");
diff --git a/tests/auto/linguist/lupdate/testdata/good/parseqrc/main.qml b/tests/auto/linguist/lupdate/testdata/good/parseqrc/main.qml
index abeb4c4a3..ab47681fe 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parseqrc/main.qml
+++ b/tests/auto/linguist/lupdate/testdata/good/parseqrc/main.qml
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
import QtQuick 1.0
diff --git a/tests/auto/linguist/lupdate/testdata/good/parseqrc_json/main.cpp b/tests/auto/linguist/lupdate/testdata/good/parseqrc_json/main.cpp
new file mode 100644
index 000000000..2b6c70877
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parseqrc_json/main.cpp
@@ -0,0 +1,10 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+// IMPORTANT!!!! If you want to add testdata to this file,
+// always add it to the end in order to not change the linenumbers of translations!!!
+#include <QtCore/QCoreApplication>
+
+void func1() {
+ QCoreApplication::tr("Hello world");
+}
diff --git a/tests/auto/linguist/lupdate/testdata/good/parseqrc_json/main.js b/tests/auto/linguist/lupdate/testdata/good/parseqrc_json/main.js
new file mode 100644
index 000000000..b2e1dd9e0
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parseqrc_json/main.js
@@ -0,0 +1 @@
+qsTr("From JavaScript file");
diff --git a/tests/auto/linguist/lupdate/testdata/good/parseqrc_json/main.qml b/tests/auto/linguist/lupdate/testdata/good/parseqrc_json/main.qml
new file mode 100644
index 000000000..f86ec5343
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parseqrc_json/main.qml
@@ -0,0 +1,10 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick 1.0
+
+QtObject {
+ function translate() {
+ qsTr("From QML file in root");
+ }
+}
diff --git a/tests/auto/linguist/lupdate/testdata/good/parseqrc_json/project.json b/tests/auto/linguist/lupdate/testdata/good/parseqrc_json/project.json
new file mode 100644
index 000000000..d7a1db7a3
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parseqrc_json/project.json
@@ -0,0 +1,16 @@
+[
+ {
+ "excluded": [],
+ "includePaths": [
+ ],
+ "projectFile": "project.pro",
+ "sources": [
+ "main.cpp",
+ "main.qml",
+ "project.qrc"
+ ],
+ "translations": [
+ "project.ts"
+ ]
+ }
+]
diff --git a/tests/auto/linguist/lupdate/testdata/good/parseqrc_json/project.qrc b/tests/auto/linguist/lupdate/testdata/good/parseqrc_json/project.qrc
new file mode 100644
index 000000000..87bacf228
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parseqrc_json/project.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/">
+ <file>main.js</file>
+</qresource>
+</RCC>
diff --git a/tests/auto/linguist/lupdate/testdata/good/parseqrc_json/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parseqrc_json/project.ts.result
new file mode 100644
index 000000000..ea847ab55
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parseqrc_json/project.ts.result
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>QCoreApplication</name>
+ <message>
+ <location filename="main.cpp" line="9"/>
+ <source>Hello world</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>main</name>
+ <message>
+ <location filename="main.qml" line="8"/>
+ <source>From QML file in root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.js" line="1"/>
+ <source>From JavaScript file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/linguist/lupdate/testdata/good/parseui/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parseui/project.ts.result
index 027a366d5..80edae5d7 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parseui/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/parseui/project.ts.result
@@ -4,12 +4,12 @@
<context>
<name>FindDialog</name>
<message>
- <location filename="project.ui" line="42"/>
+ <location filename="project.ui" line="18"/>
<source>Qt Assistant - Finn text</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="project.ui" line="45"/>
+ <location filename="project.ui" line="21"/>
<source>Finn tekst - Der Bjørn möchte auch mal.</source>
<translation type="unfinished"></translation>
</message>
diff --git a/tests/auto/linguist/lupdate/testdata/good/parseui/project.ui b/tests/auto/linguist/lupdate/testdata/good/parseui/project.ui
index 84e1818b7..7be23cbb8 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parseui/project.ui
+++ b/tests/auto/linguist/lupdate/testdata/good/parseui/project.ui
@@ -1,32 +1,8 @@
<ui version="4.0" >
- <author></author>
-<comment>*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<exportmacro></exportmacro>
<class>FindDialog</class>
<widget class="QWidget" name="FindDialog" >
diff --git a/tests/auto/linguist/lupdate/testdata/good/prefix/main.cpp b/tests/auto/linguist/lupdate/testdata/good/prefix/main.cpp
index 6cef7a28c..05d46a3fd 100644
--- a/tests/auto/linguist/lupdate/testdata/good/prefix/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/prefix/main.cpp
@@ -1,35 +1,35 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include "main.h"
+
QString foo()
{
- QCoreApplication::translate("Foo","XXX","YYY");
+ return QCoreApplication::translate("Foo","XXX","YYY");
}
Foo::Foo()
@@ -50,7 +50,7 @@ class BitFields : public QObject
Bibi::Bibi()
{
- int bits : 32;
+ //int bits : 32;
tr("text Bibi");
Babebi::tr("text Babebi");
}
diff --git a/tests/auto/linguist/lupdate/testdata/good/prefix/main.h b/tests/auto/linguist/lupdate/testdata/good/prefix/main.h
new file mode 100644
index 000000000..063d51344
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/prefix/main.h
@@ -0,0 +1,48 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
+
+class Foo
+{
+ Q_OBJECT
+ Foo();
+ void bar();
+};
+
+class Bibi
+{
+ Q_OBJECT
+ Bibi();
+
+};
+
+class Babebi
+{
+Q_OBJECT
+};
+
diff --git a/tests/auto/linguist/lupdate/testdata/good/prefix_clang_parser/main.cpp b/tests/auto/linguist/lupdate/testdata/good/prefix_clang_parser/main.cpp
new file mode 100644
index 000000000..05d46a3fd
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/prefix_clang_parser/main.cpp
@@ -0,0 +1,56 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include "main.h"
+
+QString foo()
+{
+ return QCoreApplication::translate("Foo","XXX","YYY");
+}
+
+Foo::Foo()
+{
+ tr("CTOR");
+}
+
+void Foo::bar()
+{
+ tr("BAR");
+}
+
+class BitFields : public QObject
+{
+ int bits : 20;
+ QString str = tr("text BitFields");
+};
+
+Bibi::Bibi()
+{
+ //int bits : 32;
+ tr("text Bibi");
+ Babebi::tr("text Babebi");
+}
diff --git a/tests/auto/linguist/lupdate/testdata/good/prefix_clang_parser/main.h b/tests/auto/linguist/lupdate/testdata/good/prefix_clang_parser/main.h
new file mode 100644
index 000000000..063d51344
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/prefix_clang_parser/main.h
@@ -0,0 +1,48 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
+
+class Foo
+{
+ Q_OBJECT
+ Foo();
+ void bar();
+};
+
+class Bibi
+{
+ Q_OBJECT
+ Bibi();
+
+};
+
+class Babebi
+{
+Q_OBJECT
+};
+
diff --git a/tests/auto/linguist/lupdate/testdata/good/prefix_clang_parser/project.pro b/tests/auto/linguist/lupdate/testdata/good/prefix_clang_parser/project.pro
new file mode 100644
index 000000000..759bea068
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/prefix_clang_parser/project.pro
@@ -0,0 +1,3 @@
+SOURCES = main.cpp
+
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/prefix_clang_parser/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/prefix_clang_parser/project.ts.result
new file mode 100644
index 000000000..5af02f702
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/prefix_clang_parser/project.ts.result
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>Babebi</name>
+ <message>
+ <location filename="main.cpp" line="55"/>
+ <source>text Babebi</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Bibi</name>
+ <message>
+ <location filename="main.cpp" line="54"/>
+ <source>text Bibi</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Foo</name>
+ <message>
+ <location filename="main.cpp" line="32"/>
+ <source>XXX</source>
+ <comment>YYY</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="37"/>
+ <source>CTOR</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="42"/>
+ <source>BAR</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="main.cpp" line="48"/>
+ <source>text BitFields</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/linguist/lupdate/testdata/good/preprocess/main.cpp b/tests/auto/linguist/lupdate/testdata/good/preprocess/main.cpp
index 70a100b6f..e831d285d 100644
--- a/tests/auto/linguist/lupdate/testdata/good/preprocess/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/preprocess/main.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtWidgets/QApplication>
void func1() {
QApplication::tr("Hello world", "Platform-independent file");
diff --git a/tests/auto/linguist/lupdate/testdata/good/preprocess_clang_parser/expectedoutput.txt b/tests/auto/linguist/lupdate/testdata/good/preprocess_clang_parser/expectedoutput.txt
new file mode 100644
index 000000000..fe7615b1e
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/preprocess_clang_parser/expectedoutput.txt
@@ -0,0 +1 @@
+.*[/\\]lupdate[/\\]testdata[/\\]good[/\\]preprocess_clang_parser[/\\]main.cpp Code with translation information has been skipped between lines .. and ..
diff --git a/tests/auto/linguist/lupdate/testdata/good/preprocess_clang_parser/main.cpp b/tests/auto/linguist/lupdate/testdata/good/preprocess_clang_parser/main.cpp
new file mode 100644
index 000000000..bc20bef00
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/preprocess_clang_parser/main.cpp
@@ -0,0 +1,62 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// IMPORTANT!!!! If you want to add testdata to this file,
+// always add it to the end in order to not change the linenumbers of translations!!!
+#include <QtWidgets/QApplication>
+
+void func1() {
+ QApplication::tr("Hello world", "Platform-independent file");
+}
+
+
+
+
+void func2() {
+#ifdef Q_OS_WIN
+ QApplication::tr("KindType", "The other option has been skipped");
+#else
+ QApplication::tr("KindType", "The other option has been skipped");
+#endif
+
+}
+
+
+
+void stringconcatenation()
+{
+ QApplication::tr("One string,"
+ " three"
+ " lines");
+
+ QApplication::tr("a backslash followed by newline \
+should be ignored \
+and the next line should be syntactically considered to be \
+on the same line");
+
+}
diff --git a/tests/auto/linguist/lupdate/testdata/good/preprocess_clang_parser/project.pro b/tests/auto/linguist/lupdate/testdata/good/preprocess_clang_parser/project.pro
new file mode 100644
index 000000000..c96859bdb
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/preprocess_clang_parser/project.pro
@@ -0,0 +1,3 @@
+SOURCES += main.cpp
+
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/preprocess_clang_parser/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/preprocess_clang_parser/project.ts.result
new file mode 100644
index 000000000..666dc0ff1
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/preprocess_clang_parser/project.ts.result
@@ -0,0 +1,29 @@
+.*
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>QApplication</name>
+ <message>
+ <location filename="main.cpp" line="34"/>
+ <source>Hello world</source>
+ <comment>Platform-independent file</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line=.*/>
+ <source>KindType</source>
+ <comment>The other option has been skipped</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="53"/>
+ <source>One string, three lines</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="57"/>
+ <source>a backslash followed by newline should be ignored and the next line should be syntactically considered to be on the same line</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing/main.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsing/main.cpp
index e7400ce28..1de627e4c 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing/main.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
+#include <QApplication>
void func1() {
QApplication::tr("Hello world", "Platform-independent file");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing/main.qml b/tests/auto/linguist/lupdate/testdata/good/proparsing/main.qml
index da332363c..c5933cef9 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing/main.qml
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing/main.qml
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
import QtQuick 1.0
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing/main_mac.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsing/main_mac.cpp
index 7c00a19a7..6811d06ae 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing/main_mac.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing/main_mac.cpp
@@ -1,38 +1,35 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
+#include <QApplication>
void func1() {
QApplication::tr("Hello macworld", "mac-only file");
}
-
-
-
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing/main_unix.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsing/main_unix.cpp
index 4274c6f72..4da7161b1 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing/main_unix.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing/main_unix.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
+#include <QApplication>
void func1() {
QApplication::tr("Hello unixworld", "unix-only file");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing/main_win.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsing/main_win.cpp
index a963f3eeb..58021aa6f 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing/main_win.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing/main_win.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
+#include <QApplication>
void func1() {
QApplication::tr("Hello windowsworld", "Windows-only file");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing/project.pro b/tests/auto/linguist/lupdate/testdata/good/proparsing/project.pro
index 7c6ad99dd..c6a970fae 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing/project.pro
@@ -1,6 +1,8 @@
# Try to reference a variable that does not exist:
MYVAR=$$THIS_VARIABLE_IS_NOT_DEFINED
+QT += widgets
+
SOURCES += main.cpp
win32 {
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing/qml/excluded.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsing/qml/excluded.cpp
index 592ceb4d8..32d0210a6 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing/qml/excluded.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing/qml/excluded.cpp
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
int main(int argc, char **argv)
{
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing/qml/notmain.qml b/tests/auto/linguist/lupdate/testdata/good/proparsing/qml/notmain.qml
index 795c9b675..55ebfa0af 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing/qml/notmain.qml
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing/qml/notmain.qml
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
import QtQuick 1.0
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing/vpaths/dependpath/main_dependpath.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsing/vpaths/dependpath/main_dependpath.cpp
index 2ac487555..cf9b325f7 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing/vpaths/dependpath/main_dependpath.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing/vpaths/dependpath/main_dependpath.cpp
@@ -1,38 +1,36 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
+#include <QApplication>
int main(int argc, char **argv)
{
QCoreApplication::tr("Hello from a VPATH", "See if the VPATH thing works");
}
-
-
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing/wildcard/main1.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsing/wildcard/main1.cpp
index ed0cb245e..bbc8d6c0d 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing/wildcard/main1.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing/wildcard/main1.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
+#include <QApplication>
void func1() {
QApplication::tr("Hello world", "wildcard/main1.cpp");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing/wildcard/mainfile.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsing/wildcard/mainfile.cpp
index 895e9ffa4..83336d307 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing/wildcard/mainfile.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing/wildcard/mainfile.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
+#include <QApplication>
void func1() {
QApplication::tr("Hello world", "wildcard/main2.cpp");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing/wildcard1.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsing/wildcard1.cpp
index 0f6694166..e9c39eaf9 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing/wildcard1.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing/wildcard1.cpp
@@ -1,37 +1,35 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
+#include <QApplication>
void func1() {
QApplication::tr("Hello world", "wildcard1.cpp");
}
-
-
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing/wildcard99.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsing/wildcard99.cpp
index da6e45f2b..beb679bda 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing/wildcard99.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing/wildcard99.cpp
@@ -1,37 +1,35 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
+#include <QApplication>
void func1() {
QApplication::tr("Hello world", "wildcard99.cpp");
}
-
-
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing2/a b/tests/auto/linguist/lupdate/testdata/good/proparsing2/a
index cc56055fb..5c63bafa2 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing2/a
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing2/a
@@ -1,31 +1,31 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include "include.h"
QString func()
{
return QLineEdit::tr("a");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing2/a.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsing2/a.cpp
index a4b323ecb..ddd62c9e8 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing2/a.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing2/a.cpp
@@ -1,31 +1,31 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include "include.h"
QString func()
{
return QLineEdit::tr("a.cpp");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing2/b b/tests/auto/linguist/lupdate/testdata/good/proparsing2/b
index 448d7433a..5625aea06 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing2/b
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing2/b
@@ -1,31 +1,31 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include "include.h"
QString func()
{
return QLineEdit::tr("b");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing2/b.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsing2/b.cpp
index 60107a1c8..7656986df 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing2/b.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing2/b.cpp
@@ -1,31 +1,31 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include "include.h"
QString func()
{
return QLineEdit::tr("b.cpp");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing2/e b/tests/auto/linguist/lupdate/testdata/good/proparsing2/e
index c847576d3..a2a4aa1e7 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing2/e
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing2/e
@@ -1,31 +1,31 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include "include.h"
QString func()
{
return QLineEdit::tr("e");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing2/f/g.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsing2/f/g.cpp
index 466fb26b7..1edb1fe4c 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing2/f/g.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing2/f/g.cpp
@@ -1,31 +1,31 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include "../include.h"
QString func()
{
return QLineEdit::tr("f/g.cpp");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing2/include.h b/tests/auto/linguist/lupdate/testdata/good/proparsing2/include.h
new file mode 100644
index 000000000..94e95433b
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing2/include.h
@@ -0,0 +1,2 @@
+#include <QtCore>
+#include <QtWidgets/QLineEdit>
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing2/spaces/z b/tests/auto/linguist/lupdate/testdata/good/proparsing2/spaces/z
index 68ad77a38..8e7dd8ef1 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing2/spaces/z
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing2/spaces/z
@@ -1,31 +1,31 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include "../include.h"
QString func()
{
return QLineEdit::tr("spaces/z");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing2/variable_with_spaces b/tests/auto/linguist/lupdate/testdata/good/proparsing2/variable_with_spaces
index e9c2b3a51..7e1f39060 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing2/variable_with_spaces
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing2/variable_with_spaces
@@ -1,31 +1,31 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include "include.h"
QString func()
{
return QLineEdit::tr("variable with spaces");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing2/with b/tests/auto/linguist/lupdate/testdata/good/proparsing2/with
index 7ebc8e228..42f49ad98 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing2/with
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing2/with
@@ -1,31 +1,31 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include "include.h"
QString func()
{
return QLineEdit::tr("with");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing2/x/d b/tests/auto/linguist/lupdate/testdata/good/proparsing2/x/d
index 8e211a902..ba5c3e9a4 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing2/x/d
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing2/x/d
@@ -1,31 +1,31 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include "../include.h"
QString func()
{
return QLineEdit::tr("x/d");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing2/x/variable b/tests/auto/linguist/lupdate/testdata/good/proparsing2/x/variable
index a934e515f..467394a15 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing2/x/variable
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing2/x/variable
@@ -1,31 +1,31 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include "../include.h"
QString func()
{
return QLineEdit::tr("x/variable");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingpaths/file1.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsingpaths/file1.cpp
index 589674fc3..33ddbb155 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingpaths/file1.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingpaths/file1.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtWidgets/QApplication>
void func1() {
QApplication::tr("Hello world", "top-level wildcard");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingpaths/filter.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsingpaths/filter.cpp
index 4414d75ab..1332563bc 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingpaths/filter.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingpaths/filter.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtWidgets/QApplication>
void func1() {
QApplication::tr("Hello world", "top-level direct");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingpaths/sub/subfile1.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsingpaths/sub/subfile1.cpp
index c2033d4bb..19ccb47e2 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingpaths/sub/subfile1.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingpaths/sub/subfile1.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtWidgets/QApplication>
void func1() {
QApplication::tr("Hello world", "nested wildcard");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingpaths/sub/subfilter.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsingpaths/sub/subfilter.cpp
index 26172f074..9af9cfaa0 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingpaths/sub/subfilter.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingpaths/sub/subfilter.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtWidgets/QApplication>
void func1() {
QApplication::tr("Hello world", "nested direct");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingpri/common/main.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsingpri/common/main.cpp
index e7400ce28..3118ac1a0 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingpri/common/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingpri/common/main.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtWidgets/QApplication>
void func1() {
QApplication::tr("Hello world", "Platform-independent file");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingpri/mac/main_mac.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsingpri/mac/main_mac.cpp
index 7c00a19a7..436ecefb7 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingpri/mac/main_mac.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingpri/mac/main_mac.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtWidgets/QApplication>
void func1() {
QApplication::tr("Hello macworld", "mac-only file");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingpri/relativity/relativity.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsingpri/relativity/relativity.cpp
index dae68096b..5f43b80c8 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingpri/relativity/relativity.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingpri/relativity/relativity.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtWidgets/QApplication>
void func1() {
QApplication::tr("relativity.pri", "Platform-independent file");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingpri/unix/main_unix.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsingpri/unix/main_unix.cpp
index 4274c6f72..010299a21 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingpri/unix/main_unix.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingpri/unix/main_unix.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtWidgets/QApplication>
void func1() {
QApplication::tr("Hello unixworld", "unix-only file");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingpri/win/main_win.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsingpri/win/main_win.cpp
index a963f3eeb..ed41af6e2 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingpri/win/main_win.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingpri/win/main_win.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtWidgets/QApplication>
void func1() {
QApplication::tr("Hello windowsworld", "Windows-only file");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingsubdirs/sub1/main.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsingsubdirs/sub1/main.cpp
index e7400ce28..3118ac1a0 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingsubdirs/sub1/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingsubdirs/sub1/main.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtWidgets/QApplication>
void func1() {
QApplication::tr("Hello world", "Platform-independent file");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/common/main.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/common/main.cpp
index e7400ce28..3118ac1a0 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/common/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/common/main.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtWidgets/QApplication>
void func1() {
QApplication::tr("Hello world", "Platform-independent file");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/excluded/main.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/excluded/main.cpp
index 423dce4ef..bd88d290f 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/excluded/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/excluded/main.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtWidgets/QApplication>
void func1() {
QString fake = QApplication::tr("fake", "This message will not be collected");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/mac/main_mac.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/mac/main_mac.cpp
index 7c00a19a7..436ecefb7 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/mac/main_mac.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/mac/main_mac.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtWidgets/QApplication>
void func1() {
QApplication::tr("Hello macworld", "mac-only file");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/sub/include/test.h b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/sub/include/test.h
index f1e58eca4..fbb0ff89b 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/sub/include/test.h
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/sub/include/test.h
@@ -1,35 +1,35 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-#include <QObject>
+#include <QtCore>
namespace nm {
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/sub/src/test.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/sub/src/test.cpp
index 71af0a205..412737279 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/sub/src/test.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/sub/src/test.cpp
@@ -1,35 +1,35 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-#include <test.h>
+#include "../include/test.h"
using namespace nm;
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/unix/main_unix.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/unix/main_unix.cpp
index 4274c6f72..010299a21 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/unix/main_unix.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/unix/main_unix.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtWidgets/QApplication>
void func1() {
QApplication::tr("Hello unixworld", "unix-only file");
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/win/main_win.cpp b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/win/main_win.cpp
index a963f3eeb..ed41af6e2 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/win/main_win.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/win/main_win.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtWidgets/QApplication>
void func1() {
QApplication::tr("Hello windowsworld", "Windows-only file");
diff --git a/tests/auto/linguist/lupdate/testdata/good/reloutput/main.cpp b/tests/auto/linguist/lupdate/testdata/good/reloutput/main.cpp
index 9a3880031..435b13c63 100644
--- a/tests/auto/linguist/lupdate/testdata/good/reloutput/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/reloutput/main.cpp
@@ -1,34 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
-
+#include <QtWidgets/QApplication>
void func1() {
QApplication::tr("Hello world");
diff --git a/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/main.qml b/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/main.qml
index abeb4c4a3..ab47681fe 100644
--- a/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/main.qml
+++ b/tests/auto/linguist/lupdate/testdata/good/resources_cmdline/main.qml
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
import QtQuick 1.0
diff --git a/tests/auto/linguist/lupdate/testdata/good/respfile/source1.cpp b/tests/auto/linguist/lupdate/testdata/good/respfile/source1.cpp
index 06715c627..64f8d4e61 100644
--- a/tests/auto/linguist/lupdate/testdata/good/respfile/source1.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/respfile/source1.cpp
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
diff --git a/tests/auto/linguist/lupdate/testdata/good/respfile/source2.cpp b/tests/auto/linguist/lupdate/testdata/good/respfile/source2.cpp
index c8e4e11f1..d015a26b3 100644
--- a/tests/auto/linguist/lupdate/testdata/good/respfile/source2.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/respfile/source2.cpp
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
// IMPORTANT!!!! If you want to add testdata to this file,
// always add it to the end in order to not change the linenumbers of translations!!!
diff --git a/tests/auto/linguist/lupdate/testdata/good/tr_function_alias/lupdatecmd b/tests/auto/linguist/lupdate/testdata/good/tr_function_alias/lupdatecmd
index e2f91b5f1..c5dcb6b33 100644
--- a/tests/auto/linguist/lupdate/testdata/good/tr_function_alias/lupdatecmd
+++ b/tests/auto/linguist/lupdate/testdata/good/tr_function_alias/lupdatecmd
@@ -1 +1 @@
-lupdate main.cpp main.qml -tr-function-alias QT_TRANSLATE_NOOP+=QT_TRANSLATE_NOOP_ALIAS,QT_TRANSLATE_NOOP_UTF8+=QT_TRANSLATE_NOOP_UTF8_ALIAS,QT_TRANSLATE_NOOP3+=QT_TRANSLATE_NOOP3_ALIAS,QT_TRANSLATE_NOOP3_UTF8+=QT_TRANSLATE_NOOP3_UTF8_ALIAS,QT_TRID_NOOP+=QT_TRID_NOOP_ALIAS,Q_DECLARE_TR_FUNCTIONS+=Q_DECLARE_TR_FUNCTIONS_ALIAS,qtTrId+=qtTrId_alias,QT_TR_NOOP+=QT_TR_NOOP_ALIAS,QT_TR_NOOP_UTF8+=QT_TR_NOOP_UTF8_ALIAS,tr+=tr_alias,trUtf8+=trUtf8_alias,translate+=translate_alias,qsTr=MySingletonCustomTranslator.subObject.tr -ts project.ts
+lupdate project.pro -tr-function-alias QT_TRANSLATE_NOOP+=QT_TRANSLATE_NOOP_ALIAS,QT_TRANSLATE_NOOP_UTF8+=QT_TRANSLATE_NOOP_UTF8_ALIAS,QT_TRANSLATE_NOOP3+=QT_TRANSLATE_NOOP3_ALIAS,QT_TRANSLATE_NOOP3_UTF8+=QT_TRANSLATE_NOOP3_UTF8_ALIAS,QT_TRID_NOOP+=QT_TRID_NOOP_ALIAS,Q_DECLARE_TR_FUNCTIONS+=Q_DECLARE_TR_FUNCTIONS_ALIAS,qtTrId+=qtTrId_alias,QT_TR_NOOP+=QT_TR_NOOP_ALIAS,QT_TR_NOOP_UTF8+=QT_TR_NOOP_UTF8_ALIAS,tr+=tr_alias,trUtf8+=trUtf8_alias,translate+=translate_alias,qsTr=MySingletonCustomTranslator.subObject.tr -ts project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/tr_function_alias/main.cpp b/tests/auto/linguist/lupdate/testdata/good/tr_function_alias/main.cpp
index 6b92d678f..8bb614c78 100644
--- a/tests/auto/linguist/lupdate/testdata/good/tr_function_alias/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/tr_function_alias/main.cpp
@@ -1,46 +1,46 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Stephen Kelly <stephen.kelly@kdab.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Stephen Kelly <stephen.kelly@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#ifndef MYOBJECT_H
#define MYOBJECT_H
-#include <QtCore/QObject>
-
-QT_TRANSLATE_NOOP("scope", "string")
-QT_TRANSLATE_NOOP_ALIAS("scope", "string_alias")
-QT_TRANSLATE_NOOP_UTF8("scope", "utf8_string")
-QT_TRANSLATE_NOOP_UTF8_ALIAS("scope", "utf8_string_alias")
-QT_TRANSLATE_NOOP3("scope", "string_with_comment", "comment")
-QT_TRANSLATE_NOOP3_ALIAS("scope", "string_with_comment_alias", "comment")
-QT_TRANSLATE_NOOP3_UTF8("scope", "utf8_string_with_comment", "comment")
-QT_TRANSLATE_NOOP3_UTF8_ALIAS("scope", "utf8_string_with_comment_alias", "comment")
-QT_TRID_NOOP("this_a_id")
-QT_TRID_NOOP_ALIAS("this_a_id_alias")
+#include <QtCore>
+
+const char *c_1 = QT_TRANSLATE_NOOP("scope", "string");
+const char *c_2 = QT_TRANSLATE_NOOP_ALIAS("scope", "string_alias");
+const char *c_3 = QT_TRANSLATE_NOOP_UTF8("scope", "utf8_string");
+const char *c_4 = QT_TRANSLATE_NOOP_UTF8_ALIAS("scope", "utf8_string_alias");
+const char *c_5[2] = QT_TRANSLATE_NOOP3("scope", "string_with_comment", "comment");
+const char *c_6[2] = QT_TRANSLATE_NOOP3_ALIAS("scope", "string_with_comment_alias", "comment");
+const char *c_7[2] = QT_TRANSLATE_NOOP3_UTF8("scope", "utf8_string_with_comment", "comment");
+const char *c_8[2] = QT_TRANSLATE_NOOP3_UTF8_ALIAS("scope", "utf8_string_with_comment_alias", "comment");
+const char *c_9 = QT_TRID_NOOP("this_a_id");
+const char *c_10 = QT_TRID_NOOP_ALIAS("this_a_id_alias");
QString test = qtTrId("yet_another_id");
QString test_alias = qtTrId_alias("yet_another_id_alias");
@@ -53,7 +53,7 @@ class Bogus : QObject {
const char * const Bogus::s_strings[] = {
QT_TR_NOOP("this should be in Bogus"),
QT_TR_NOOP_ALIAS("this should be in Bogus Alias"),
- QT_TR_NOOP_UTF8("this should be utf8 in Bogus")
+ QT_TR_NOOP_UTF8("this should be utf8 in Bogus"),
QT_TR_NOOP_UTF8_ALIAS("this should be utf8 in Bogus Alias")
};
@@ -64,10 +64,10 @@ class MyObject : public QObject
{
tr("Boo", "nsF::D");
tr_alias("Boo_alias", "nsB::C");
- trUtf8("utf8_Boo", "nsF::D");
+ tr("utf8_Boo", "nsF::D"); // trUtf8 is now obsolete
trUtf8_alias("utf8_Boo_alias", "nsF::D");
- translate("QTranslator", "Simple");
- translate_alias("QTranslator", "Simple with comment alias", "with comment")
+ QCoreApplication::translate("QTranslator", "Simple");
+ translate_alias("QTranslator", "Simple with comment alias", "with comment");
}
};
@@ -79,10 +79,10 @@ struct NonQObject
{
tr("NonQObject_Boo", "nsF::NonQObject_D");
tr_alias("NonQObject_Boo_alias", "nsB::NonQObject_C");
- trUtf8("utf_NonQObject_Boo", "nsF::D");
+ tr("utf_NonQObject_Boo", "nsF::D");
trUtf8_alias("utf8_NonQObject_Boo_alias", "nsF::D");
- translate("NonQObject_QTranslator", "Simple");
- translate_alias("NonQObject_QTranslator", "Simple with comment alias", "with comment")
+ QCoreApplication::translate("NonQObject_QTranslator", "Simple");
+ translate_alias("NonQObject_QTranslator", "Simple with comment alias", "with comment");
}
};
diff --git a/tests/auto/linguist/lupdate/testdata/good/tr_function_alias/project.pro b/tests/auto/linguist/lupdate/testdata/good/tr_function_alias/project.pro
new file mode 100644
index 000000000..d624cadac
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/tr_function_alias/project.pro
@@ -0,0 +1,4 @@
+SOURCES += main.cpp
+SOURCES += main.qml
+
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/recursivescan/main.cpp b/tests/auto/linguist/lupdate/testdata/recursivescan/main.cpp
index 79932bcb1..74742e54b 100644
--- a/tests/auto/linguist/lupdate/testdata/recursivescan/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/recursivescan/main.cpp
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <QApplication>
#include <QDebug>
diff --git a/tests/auto/linguist/lupdate/testdata/recursivescan/project.ui b/tests/auto/linguist/lupdate/testdata/recursivescan/project.ui
index 5a26d6ed2..6e5775c86 100644
--- a/tests/auto/linguist/lupdate/testdata/recursivescan/project.ui
+++ b/tests/auto/linguist/lupdate/testdata/recursivescan/project.ui
@@ -1,33 +1,8 @@
<ui version="4.0" >
<author></author>
<comment>
-*********************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-*********************************************************************
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
</comment>
<exportmacro></exportmacro>
<class>FindDialog</class>
diff --git a/tests/auto/linguist/lupdate/testdata/recursivescan/sub/filetypes/main.c++ b/tests/auto/linguist/lupdate/testdata/recursivescan/sub/filetypes/main.c++
index e1d5232c6..9527549ac 100644
--- a/tests/auto/linguist/lupdate/testdata/recursivescan/sub/filetypes/main.c++
+++ b/tests/auto/linguist/lupdate/testdata/recursivescan/sub/filetypes/main.c++
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <QApplication>
diff --git a/tests/auto/linguist/lupdate/testdata/recursivescan/sub/filetypes/main.cpp b/tests/auto/linguist/lupdate/testdata/recursivescan/sub/filetypes/main.cpp
index a0d5e374f..9ae45aa16 100644
--- a/tests/auto/linguist/lupdate/testdata/recursivescan/sub/filetypes/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/recursivescan/sub/filetypes/main.cpp
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <QApplication>
diff --git a/tests/auto/linguist/lupdate/testdata/recursivescan/sub/filetypes/main.cxx b/tests/auto/linguist/lupdate/testdata/recursivescan/sub/filetypes/main.cxx
index d1b99e763..70aa43197 100644
--- a/tests/auto/linguist/lupdate/testdata/recursivescan/sub/filetypes/main.cxx
+++ b/tests/auto/linguist/lupdate/testdata/recursivescan/sub/filetypes/main.cxx
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <QApplication>
diff --git a/tests/auto/linguist/lupdate/testdata/recursivescan/sub/finddialog.cpp b/tests/auto/linguist/lupdate/testdata/recursivescan/sub/finddialog.cpp
index 6f8c35eba..69d719493 100644
--- a/tests/auto/linguist/lupdate/testdata/recursivescan/sub/finddialog.cpp
+++ b/tests/auto/linguist/lupdate/testdata/recursivescan/sub/finddialog.cpp
@@ -1,30 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include "finddialog.h"
#include "mainwindow.h"
diff --git a/tests/auto/linguist/lupdate/testdata/subdirs_full/subdir1/main.cpp b/tests/auto/linguist/lupdate/testdata/subdirs_full/subdir1/main.cpp
index b06785a80..3a3fc177f 100644
--- a/tests/auto/linguist/lupdate/testdata/subdirs_full/subdir1/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/subdirs_full/subdir1/main.cpp
@@ -1,33 +1,33 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
+
QString foo()
{
- QCoreApplication::translate("subdir1","minimal test");
+ return QCoreApplication::translate("subdir1","minimal test");
}
diff --git a/tests/auto/linguist/lupdate/testdata/subdirs_full/subdir2/subsub1/main.cpp b/tests/auto/linguist/lupdate/testdata/subdirs_full/subdir2/subsub1/main.cpp
index 766d615cb..c57ada17f 100644
--- a/tests/auto/linguist/lupdate/testdata/subdirs_full/subdir2/subsub1/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/subdirs_full/subdir2/subsub1/main.cpp
@@ -1,33 +1,33 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
+
QString foo()
{
- QCoreApplication::translate("subsub1","minimal test");
+ return QCoreApplication::translate("subsub1","minimal test");
}
diff --git a/tests/auto/linguist/lupdate/testdata/subdirs_full/subdir2/subsub2/main.cpp b/tests/auto/linguist/lupdate/testdata/subdirs_full/subdir2/subsub2/main.cpp
index 5617fd1ce..bd0acde61 100644
--- a/tests/auto/linguist/lupdate/testdata/subdirs_full/subdir2/subsub2/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/subdirs_full/subdir2/subsub2/main.cpp
@@ -1,33 +1,33 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
+
QString foo()
{
- QCoreApplication::translate("subsub2","minimal test");
+ return QCoreApplication::translate("subsub2","minimal test");
}
diff --git a/tests/auto/linguist/lupdate/testdata/subdirs_part/subdir1/main.cpp b/tests/auto/linguist/lupdate/testdata/subdirs_part/subdir1/main.cpp
index b06785a80..3a3fc177f 100644
--- a/tests/auto/linguist/lupdate/testdata/subdirs_part/subdir1/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/subdirs_part/subdir1/main.cpp
@@ -1,33 +1,33 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
+
QString foo()
{
- QCoreApplication::translate("subdir1","minimal test");
+ return QCoreApplication::translate("subdir1","minimal test");
}
diff --git a/tests/auto/linguist/lupdate/testdata/subdirs_part/subdir2/subsub1/main.cpp b/tests/auto/linguist/lupdate/testdata/subdirs_part/subdir2/subsub1/main.cpp
index 766d615cb..c57ada17f 100644
--- a/tests/auto/linguist/lupdate/testdata/subdirs_part/subdir2/subsub1/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/subdirs_part/subdir2/subsub1/main.cpp
@@ -1,33 +1,33 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
+
QString foo()
{
- QCoreApplication::translate("subsub1","minimal test");
+ return QCoreApplication::translate("subsub1","minimal test");
}
diff --git a/tests/auto/linguist/lupdate/testdata/subdirs_part/subdir2/subsub2/main.cpp b/tests/auto/linguist/lupdate/testdata/subdirs_part/subdir2/subsub2/main.cpp
index 5617fd1ce..bd0acde61 100644
--- a/tests/auto/linguist/lupdate/testdata/subdirs_part/subdir2/subsub2/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/subdirs_part/subdir2/subsub2/main.cpp
@@ -1,33 +1,33 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include <QtCore>
+
QString foo()
{
- QCoreApplication::translate("subsub2","minimal test");
+ return QCoreApplication::translate("subsub2","minimal test");
}
diff --git a/tests/auto/linguist/lupdate/tst_lupdate.cpp b/tests/auto/linguist/lupdate/tst_lupdate.cpp
index 41457969f..9f3d57595 100644
--- a/tests/auto/linguist/lupdate/tst_lupdate.cpp
+++ b/tests/auto/linguist/lupdate/tst_lupdate.cpp
@@ -1,41 +1,23 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#if CHECK_SIMTEXTH
#include "../shared/simtexth.h"
#endif
-#include <QtCore/QDir>
+#include <QtCore/QByteArray>
#include <QtCore/QDebug>
+#include <QtCore/QDir>
#include <QtCore/QFile>
-#include <QtCore/QByteArray>
+#include <QtCore/private/qconfig_p.h>
+#include <QtCore/QSet>
#include <QtTest/QtTest>
+#include <QtTools/private/qttools-config_p.h>
+
+#include <iostream>
+
+using namespace Qt::Literals::StringLiterals;
class tst_lupdate : public QObject
{
@@ -62,7 +44,7 @@ private:
tst_lupdate::tst_lupdate()
{
- QString binPath = QLibraryInfo::location(QLibraryInfo::BinariesPath);
+ QString binPath = QLibraryInfo::path(QLibraryInfo::BinariesPath);
m_cmdLupdate = binPath + QLatin1String("/lupdate");
m_basePath = QFINDTESTDATA("testdata/");
}
@@ -200,8 +182,9 @@ void tst_lupdate::doCompare(QStringList actual, const QString &expectedFn, bool
diff += ">>>>>>> expected\n";
for (int j = oam; j < qMin(oam + 3, actual.size()); j++)
diff += actual.at(j) + '\n';
- QFAIL(qPrintable((err ? "Output for " : "Result for ") + expectedFn + " does not meet expectations:\n" + diff));
-}
+ QFAIL(qPrintable((err ? "Output for " : "Result for ")
+ + expectedFn + " does not meet expectations:\n" + diff));
+ }
void tst_lupdate::doCompare(const QString &actualFn, const QString &expectedFn, bool err)
{
@@ -215,6 +198,7 @@ void tst_lupdate::doCompare(const QString &actualFn, const QString &expectedFn,
void tst_lupdate::good_data()
{
QTest::addColumn<QString>("directory");
+ QTest::addColumn<bool>("useClangCpp");
QDir parsingDir(m_basePath + "good");
QStringList dirs = parsingDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name);
@@ -225,19 +209,48 @@ void tst_lupdate::good_data()
#ifndef Q_OS_MACOS
dirs.removeAll(QLatin1String("parseobjc"));
#endif
+ QSet<QString> ignoredTests = {
+ "lacksqobject_clang_parser", "parsecontexts_clang_parser", "parsecpp2_clang_parser",
+ "parsecpp_clang_parser", "prefix_clang_parser", "preprocess_clang_parser",
+ "parsecpp_clang_only"};
+
+ // Add test rows for the "classic" lupdate
+ for (const QString &dir : dirs) {
+ if (ignoredTests.contains(dir))
+ continue;
+ QTest::newRow(dir.toLocal8Bit()) << dir << false;
+ }
- for (const QString &dir : qAsConst(dirs))
- QTest::newRow(dir.toLocal8Bit()) << dir;
+#if QT_CONFIG(clangcpp) && QT_CONFIG(widgets)
+ // Add test rows for the clang-based lupdate
+ ignoredTests = {
+ "lacksqobject",
+ "parsecontexts",
+ "parsecpp",
+ "parsecpp2",
+ "parseqrc_json",
+ "prefix",
+ "preprocess",
+ "proparsing2", // llvm8 cannot handle file name without extension
+ "respfile", //@lst not supported with the new parser yet (include not properly set in the compile_command.json)
+ "cmdline_deeppath", //no project file, new parser does not support (yet) this way of launching lupdate
+ "cmdline_order", // no project, new parser do not pickup on macro defined but not used. Test not needed for new parser.
+ "cmdline_recurse", // recursive scan without project file not supported (yet) with the new parser
+ };
+ for (const QString &dir : dirs) {
+ if (ignoredTests.contains(dir))
+ continue;
+ QTest::newRow("clang-" + dir.toLocal8Bit()) << dir << true;
+ }
+#endif
}
void tst_lupdate::good()
{
QFETCH(QString, directory);
+ QFETCH(bool, useClangCpp);
QString dir = m_basePath + "good/" + directory;
-
- qDebug() << "Checking...";
-
QString workDir = dir;
QStringList generatedtsfiles(QLatin1String("project.ts"));
QStringList lupdateArguments;
@@ -268,7 +281,7 @@ void tst_lupdate::good()
file.close();
}
- for (const QString &ts : qAsConst(generatedtsfiles)) {
+ for (const QString &ts : std::as_const(generatedtsfiles)) {
QString genTs = workDir + QLatin1Char('/') + ts;
QFile::remove(genTs);
QString beforetsfile = dir + QLatin1Char('/') + ts + QLatin1String(".before");
@@ -280,9 +293,18 @@ void tst_lupdate::good()
QVERIFY(file.open(QIODevice::WriteOnly));
file.close();
- if (lupdateArguments.isEmpty())
- lupdateArguments.append(QLatin1String("project.pro"));
+ if (lupdateArguments.isEmpty()) {
+ // Automatically pass "project.pro" or "-project project.json".
+ if (QFile::exists(dir + u"/project.json"_s)) {
+ lupdateArguments << u"-project"_s << u"project.json"_s;
+ } else {
+ lupdateArguments.append(QLatin1String("project.pro"));
+ }
+ }
+
lupdateArguments.prepend("-silent");
+ if (useClangCpp)
+ lupdateArguments.append("-clang-parser");
QProcess proc;
proc.setWorkingDirectory(workDir);
@@ -308,9 +330,15 @@ void tst_lupdate::good()
return;
}
- for (const QString &ts : qAsConst(generatedtsfiles))
+ for (const QString &ts : std::as_const(generatedtsfiles)) {
+ if (dir.endsWith("preprocess_clang_parser")) {
+ doCompare(workDir + QLatin1Char('/') + ts,
+ dir + QLatin1Char('/') + ts + QLatin1String(".result"), true);
+ } else {
doCompare(workDir + QLatin1Char('/') + ts,
dir + QLatin1Char('/') + ts + QLatin1String(".result"), false);
+ }
+ }
}
#if CHECK_SIMTEXTH
diff --git a/tests/auto/qdoc/.prev_CMakeLists.txt b/tests/auto/qdoc/.prev_CMakeLists.txt
deleted file mode 100644
index 9dbae4fc5..000000000
--- a/tests/auto/qdoc/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-# Generated from qdoc.pro.
-
-add_subdirectory(config)
-add_subdirectory(generatedoutput)
-add_subdirectory(qdoccommandlineparser)
-add_subdirectory(utilities)
diff --git a/tests/auto/qdoc/CMakeLists.txt b/tests/auto/qdoc/CMakeLists.txt
index b3894fb3d..994306723 100644
--- a/tests/auto/qdoc/CMakeLists.txt
+++ b/tests/auto/qdoc/CMakeLists.txt
@@ -1,20 +1,47 @@
-# Generated from qdoc.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-# special case begin
if(CMAKE_VERSION VERSION_LESS "3.19" AND MSVC AND QT_FEATURE_debug_and_release)
message(WARNING "qdoc tests will not be built in this configuration.")
return()
endif()
-# special case end
-add_subdirectory(config)
-# special case begin
-# CMake builds currently don't build qdoc, presumably because the llvm
-# version update hasn't been finished yet. This causes the test to fail.
-# Include it conditionally.
-if(TARGET Qt::qdoc)
- add_subdirectory(generatedoutput)
+set(QDOC_PROJECT_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/../../../src/qdoc/)
+set(QDOC_SOURCE_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/../../../src/qdoc/qdoc/src/qdoc)
+set(QDOC_INCLUDE_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/../../../src/qdoc/qdoc/src/)
+
+# Mirrors the definition for test targets from the source directory to the
+# "tests" directory.
+# The CI for the Qt project is set up so that, when tests are run in CI, only
+# the "tests" directory under the root of a repo is configured and test targets
+# are later run over an already built Qt (with everything exported from the
+# various src directories).
+# This means that any target that is defined outside the "tests" directory in
+# the root of the repo will not be picked up for testing by CI.
+#
+# As QDoc is currently organizing so that its part of the "src" directory
+# contains everything related to its of its subprojects, tests included, our
+# tests targets will not be checked by CI.
+#
+# To avoid this issue, each test target is defined in its own self-contained
+# "CMakeLists.txt" file under its correct place in the "src" directory and is
+# later included here to ensure that it is picked up when Ci run the tests for
+# the qttools repository.
+#
+# Outside of CI, both the "src" and "tests" directory will be configured and we
+# need to avoid repeating the targets definition.
+#
+# When CI is running its tests, it will set `QT_BUILD_STANDALONE_TESTS`, which
+# we can depend on to filter the inclusions.
+if(QT_BUILD_STANDALONE_TESTS)
+ include(${QDOC_PROJECT_DIRECTORY}/catch_generators/tests/CMakeLists.txt)
+
+ # Add all tests in src/qdoc/qdoc/tests:
+ file(GLOB qdoc_tests_dir_content LIST_DIRECTORIES true "${QDOC_PROJECT_DIRECTORY}/qdoc/tests/*")
+ foreach(path IN LISTS qdoc_tests_dir_content)
+ if(EXISTS "${path}/CMakeLists.txt")
+ get_filename_component(test_directory "${path}" NAME)
+ add_subdirectory("${path}" "${test_directory}")
+ endif()
+ endforeach()
endif()
-# special case end
-add_subdirectory(qdoccommandlineparser)
-add_subdirectory(utilities)
diff --git a/tests/auto/qdoc/config/CMakeLists.txt b/tests/auto/qdoc/config/CMakeLists.txt
deleted file mode 100644
index 2d54cc041..000000000
--- a/tests/auto/qdoc/config/CMakeLists.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-# Generated from config.pro.
-
-#####################################################################
-## tst_config Test:
-#####################################################################
-
-qt_add_test(tst_config
- SOURCES
- ../../../../src/qdoc/config.cpp ../../../../src/qdoc/config.h
- ../../../../src/qdoc/location.cpp ../../../../src/qdoc/location.h
- ../../../../src/qdoc/loggingcategory.h
- ../../../../src/qdoc/qdoccommandlineparser.cpp ../../../../src/qdoc/qdoccommandlineparser.h
- tst_config.cpp
- INCLUDE_DIRECTORIES
- ../../../../src/qdoc
-)
diff --git a/tests/auto/qdoc/config/config.pro b/tests/auto/qdoc/config/config.pro
deleted file mode 100644
index b6cb9a32d..000000000
--- a/tests/auto/qdoc/config/config.pro
+++ /dev/null
@@ -1,16 +0,0 @@
-CONFIG += testcase
-QT = core testlib
-TARGET = tst_config
-INCLUDEPATH += $$PWD/../../../../src/qdoc
-
-HEADERS += \
- $$PWD/../../../../src/qdoc/config.h \
- $$PWD/../../../../src/qdoc/location.h \
- $$PWD/../../../../src/qdoc/qdoccommandlineparser.h \
- $$PWD/../../../../src/qdoc/loggingcategory.h
-
-SOURCES += \
- tst_config.cpp \
- $$PWD/../../../../src/qdoc/config.cpp \
- $$PWD/../../../../src/qdoc/location.cpp \
- $$PWD/../../../../src/qdoc/qdoccommandlineparser.cpp
diff --git a/tests/auto/qdoc/config/tst_config.cpp b/tests/auto/qdoc/config/tst_config.cpp
deleted file mode 100644
index 816057512..000000000
--- a/tests/auto/qdoc/config/tst_config.cpp
+++ /dev/null
@@ -1,185 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "config.h"
-
-#include <QtCore/qdir.h>
-#include <QtCore/qfileinfo.h>
-#include <QtCore/qhash.h>
-#include <QtCore/qstringlist.h>
-#include <QtTest/QtTest>
-
-QT_BEGIN_NAMESPACE
-Q_LOGGING_CATEGORY(lcQdoc, "qt.test")
-QT_END_NAMESPACE
-
-class tst_Config : public QObject
-{
- Q_OBJECT
-
-private slots:
- void classMembersInitializeToFalseOrEmpty();
- void includePathsFromCommandLine();
- void variables();
- void paths();
- void getExampleProjectFile();
- void expandVars();
-
-private:
- Config &initConfig(const QStringList &args = QStringList(),
- const char *qdocconf = nullptr);
- Config &initConfig(const char *qdocconf)
- {
- return initConfig(QStringList(), qdocconf);
- }
-};
-
-/*
- Initializes the Config with optional arguments and a .qdocconf file
- to load, and returns a reference to it.
-*/
-Config &tst_Config::initConfig(const QStringList &args, const char *qdocconf)
-{
- QStringList fullArgs = { QStringLiteral("./qdoc") };
- fullArgs << args;
- Config::instance().init("QDoc Test", fullArgs);
-
- if (qdocconf) {
- const auto configFile = QFINDTESTDATA(qdocconf);
- if (!configFile.isEmpty())
- Config::instance().load(configFile);
- }
-
- return Config::instance();
-}
-
-void tst_Config::classMembersInitializeToFalseOrEmpty()
-{
- auto &config = initConfig();
- QCOMPARE(config.showInternal(), false);
- QCOMPARE(config.singleExec(), false);
-
- QVERIFY(config.defines().isEmpty());
- QVERIFY(config.includePaths().isEmpty());
- QVERIFY(config.dependModules().isEmpty());
- QVERIFY(config.indexDirs().isEmpty());
- QVERIFY(config.currentDir().isEmpty());
- QVERIFY(config.previousCurrentDir().isEmpty());
-}
-
-void tst_Config::includePathsFromCommandLine()
-{
- const auto mockIncludePath1 = QString("-I" + QDir().absoluteFilePath("/qt5/qtdoc/doc/."));
- const auto mockIncludePath2 = QString("-I" + QDir().absoluteFilePath("/qt5/qtbase/mkspecs/linux-g++"));
- const QStringList commandLineArgs = { mockIncludePath1, mockIncludePath2 };
- auto &config = initConfig(commandLineArgs);
-
- const QStringList expected = { mockIncludePath1, mockIncludePath2 };
- const QStringList actual = config.includePaths();
-
- QCOMPARE(actual, expected);
-}
-
-// Tests different types of variables; string, string list, bool, int,
-// empty and undefined variables, and subvariables.
-void tst_Config::variables()
-{
- auto &config = initConfig("/testdata/configs/vars.qdocconf");
-
- const QStringList list = { "testing", "line", "by\n", "line" };
- QCOMPARE(config.getStringList("list"), list);
- QCOMPARE(config.getString("list"), "testing line by\nline");
- QCOMPARE(config.getBool("true"), true);
- QCOMPARE(config.getBool("untrue"), false);
- QCOMPARE(config.getInt("int"), 2);
- QCOMPARE(config.getString("void"), QString());
- QCOMPARE(config.getString("void", "undefined"), QString());
- QCOMPARE(config.getString("undefined", "undefined"), "undefined");
- QVERIFY(config.getString("undefined").isNull());
-
- QSet<QString> subVars = { "thing", "where", "time" };
- QCOMPARE(config.subVars("some"), subVars);
-}
-
-// Tests whether paths or variables are resolved correctly.
-void tst_Config::paths()
-{
- auto &config = initConfig();
- const auto docConfig = QFINDTESTDATA("/testdata/configs/paths.qdocconf");
- if (!docConfig.isEmpty())
- config.load(docConfig);
-
- auto rootDir = QFileInfo(docConfig).dir();
- QVERIFY(rootDir.cdUp());
-
- const auto paths = config.getCanonicalPathList("sourcedirs");
- QVERIFY(paths.size() == 3);
-
- QCOMPARE(paths[0], rootDir.absoluteFilePath("paths/includes"));
- QCOMPARE(paths[1], rootDir.absoluteFilePath("configs"));
- QCOMPARE(paths[2], rootDir.absoluteFilePath("configs/includes"));
-}
-
-void::tst_Config::getExampleProjectFile()
-{
- auto &config = initConfig();
- const auto docConfig = QFINDTESTDATA("/testdata/configs/exampletest.qdocconf");
- if (!docConfig.isEmpty())
- config.load(docConfig);
-
- auto rootDir = QFileInfo(docConfig).dir();
- QVERIFY(rootDir.cd("../exampletest/examples/test"));
-
- QVERIFY(config.getExampleProjectFile("invalid").isEmpty());
- QVERIFY(config.getExampleProjectFile("test/empty").isEmpty());
-
- QCOMPARE(config.getExampleProjectFile("test/example1"),
- rootDir.absoluteFilePath("example1/example1.pro"));
- QCOMPARE(config.getExampleProjectFile("test/example2"),
- rootDir.absoluteFilePath("example2/example2.qmlproject"));
- QCOMPARE(config.getExampleProjectFile("test/example3"),
- rootDir.absoluteFilePath("example3/example3.pyproject"));
- QCOMPARE(config.getExampleProjectFile("test/example4"),
- rootDir.absoluteFilePath("example4/CMakeLists.txt"));
-}
-
-void::tst_Config::expandVars()
-{
- qputenv("QDOC_TSTCONFIG_LIST", QByteArray("a b c"));
- auto &config = initConfig("/testdata/configs/expandvars.qdocconf");
-
- QCOMPARE(config.getString("expanded1"), "foo");
- QCOMPARE(config.getString("expanded2"), "foo,bar");
- QCOMPARE(config.getString("expanded3"), "foobar foobar baz");
- QCOMPARE(config.getString("literally"), "$data ${data}");
- QCOMPARE(config.getString("csvlist"), "a,b,c");
-}
-
-QTEST_APPLESS_MAIN(tst_Config)
-
-#include "tst_config.moc"
diff --git a/tests/auto/qdoc/generatedoutput/CMakeLists.txt b/tests/auto/qdoc/generatedoutput/CMakeLists.txt
deleted file mode 100644
index d64432b5f..000000000
--- a/tests/auto/qdoc/generatedoutput/CMakeLists.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-# Generated from generatedoutput.pro.
-
-#####################################################################
-## tst_generatedOutput Test:
-#####################################################################
-
-qt_add_test(tst_generatedOutput
- SOURCES
- tst_generatedoutput.cpp
-)
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/crossmodule/testtype-members.html b/tests/auto/qdoc/generatedoutput/expected_output/crossmodule/testtype-members.html
deleted file mode 100644
index 327176bb9..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/crossmodule/testtype-members.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testtype.cpp -->
- <title>List of All Members for TestType | CrossModule</title>
-</head>
-<body>
-<li>TestType</li>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">List of All Members for TestType</h1>
-<p>This is the complete list of members for <a href="testtype.html">TestType</a>, including inherited members.</p>
-<ul>
-<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#DerivedType-alias">DerivedType</a></b></span></li>
-<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#NotTypedef-alias">NotTypedef</a></b></span></li>
-<li class="fn">typedef <span class="name"><b><a href="testqdoc-test.html#SomeType-typedef">SomeType</a></b></span></li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#funcPtr">funcPtr</a></b></span>(bool , const char *) : void (*)(bool)</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#inlineFunction">inlineFunction</a></b></span>()</li>
-<li class="fn"><span class="name"><b><a href="testtype.html#nothing">nothing</a></b></span>()</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#overload">overload</a></b></span>()</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#overload-1">overload</a></b></span>(bool )</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#someFunction">someFunction</a></b></span>(int ) : int</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#someFunctionDefaultArg">someFunctionDefaultArg</a></b></span>(int , bool )</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#virtualFun">virtualFun</a></b></span>()</li>
-</ul>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/crossmodule/testtype.html b/tests/auto/qdoc/generatedoutput/expected_output/crossmodule/testtype.html
deleted file mode 100644
index dcf2114b7..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/crossmodule/testtype.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testtype.cpp -->
- <title>TestType Class | CrossModule</title>
-</head>
-<body>
-<li>TestType</li>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#public-functions">Public Functions</a></li>
-<li class="level1"><a href="#details">Detailed Description</a></li>
-<li class="level2"><a href="#linking">Linking</a></li>
-</ul>
-</div>
-<div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">TestType Class</h1>
-<!-- $$$TestType-brief -->
-<p>A class inheriting another class that lives in an external doc module. <a href="#details">More...</a></p>
-<!-- @@@TestType -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;TestType&gt;</span>
-</td></tr><tr><td class="memItemLeft rightAlign topAlign"> Inherits:</td><td class="memItemRight bottomAlign"> <a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></td></tr></table></div><ul>
-<li><a href="testtype-members.html">List of all members, including inherited members</a></li>
-</ul>
-<a name="public-functions"></a>
-<h2 id="public-functions">Public Functions</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testtype.html#nothing">nothing</a></b>()</td></tr>
-</table></div>
-<a name="details"></a>
-<!-- $$$TestType-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-<a name="linking"></a>
-<h3 id="linking">Linking</h3>
-<p>These links go to the parent class:</p>
-<ul>
-<li><a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></li>
-<li><a href="testqdoc-test.html">Test</a> class <a href="testqdoc.html#usage">Usage</a>.</li>
-<li><a href="testqdoc.html#QDOCTEST_MACRO">QDOCTEST_MACRO</a></li>
-</ul>
-</div>
-<p><b>See also </b><a href="testqdoc-test.html#someFunction">someFunction</a>().</p>
-<!-- @@@TestType -->
-<div class="func">
-<h2>Member Function Documentation</h2>
-<!-- $$$nothing[overload1]$$$nothing -->
-<h3 class="fn" id="nothing"><a name="nothing"></a><span class="type">void</span> TestType::<span class="name">nothing</span>()</h3>
-<p>Nothing to see here.</p>
-<!-- @@@nothing -->
-</div>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/demos-manifest.xml b/tests/auto/qdoc/generatedoutput/expected_output/demos-manifest.xml
deleted file mode 100644
index bdbdb688b..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/demos-manifest.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<instructionals module="Test">
- <demos>
- <demo name="Demo" docUrl="qthelp://org.qt-project.test.001/test/test-demos-demo-example.html" projectPath="test/demos/demo/demo.pro" imageUrl="qthelp://org.qt-project.test.001/test/images/leonardo-da-vinci.png" isTest="true">
- <description><![CDATA[No description available]]></description>
- <tags>demo,test</tags>
- </demo>
- </demos>
-</instructionals>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qdoc-test-qmlmodule.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/qdoc-test-qmlmodule.xml
deleted file mode 100644
index 8d514bad1..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qdoc-test-qmlmodule.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?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>Test</db:productname>
-<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
-<db:abstract>
-<db:para>QML Types for the Test module.</db:para>
-<db:para><db:emphasis role="bold">This module is under development and is subject to change.</db:emphasis></db:para>
-<db:para>This module was introduced in Qt 1.1.</db:para>
-</db:abstract>
-</db:info>
-<db:para><db:emphasis role="bold">This module is under development and is subject to change.</db:emphasis></db:para>
-<db:para>This module was introduced in Qt 1.1.</db:para>
-<db:anchor xml:id="details"/>
-<db:variablelist role="members">
-<db:varlistentry>
-<db:term><db:link xlink:href="qml-qdoc-test-doctest.xml" xlink:role="">DocTest</db:link></db:term>
-<db:listitem>
-<db:para>Represents a doc test case.</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term><db:link xlink:href="qml-qdoc-test-abstractparent.xml" xlink:role="">AbstractParent</db:link></db:term>
-<db:listitem>
-<db:para>Abstract base QML type.</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term><db:link xlink:href="qml-qdoc-test-child.xml" xlink:role="">Child</db:link></db:term>
-<db:listitem>
-<db:para>A Child inheriting its parent.</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term><db:link xlink:href="qml-int.xml" xlink:role="">int</db:link></db:term>
-<db:listitem>
-<db:para>An integer basic type.</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term><db:link xlink:href="qml-qdoc-test-yetanotherchild.xml" xlink:role="">YetAnotherChild</db:link></db:term>
-<db:listitem>
-<db:para>A type inheriting from internal abstract parent.</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term><db:link xlink:href="qml-qdoc-test-type.xml" xlink:role="">Type</db:link></db:term>
-<db:listitem>
-<db:para>A QML type documented in a .cpp file.</db:para>
-</db:listitem>
-</db:varlistentry>
-</db:variablelist>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qdoctests-qdocfileoutput-exhaustive.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/qdoctests-qdocfileoutput-exhaustive.xml
deleted file mode 100644
index af2fdd955..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qdoctests-qdocfileoutput-exhaustive.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?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>Exhaustive testing of QDoc commands</db:title>
-<db:productname>OutputFromQDocFiles</db:productname>
-<db:edition>OutputFromQDocFiles - A test project for QDoc build artifacts</db:edition>
-<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
-<db:abstract>
-<db:para>This page is a dumping ground for QDoc commands under test.</db:para>
-</db:abstract>
-</db:info>
-<db:section xml:id="this-is-a-section1">
-<db:title>This is a section1</db:title>
-<db:section xml:id="this-is-a-section2">
-<db:title>This is a section2</db:title>
-<db:section xml:id="this-is-a-section3">
-<db:title>This is a section3</db:title>
-<db:section xml:id="this-is-a-section4">
-<db:title>This is a section4</db:title>
-<db:programlisting language="cpp" role="bad">This is bad code
-</db:programlisting>
-<db:para>This text should have a line break riiiiight noooow.</db:para>
-<db:para><db:emphasis role="bold">All your text belong to bold</db:emphasis> ...And this is an examble of only <db:emphasis role="bold">bold</db:emphasis> being, well, bold.</db:para>
-<db:programlisting language="cpp"> ...
-</db:programlisting>
-<db:programlisting language="js">&lt;@comment&gt;// If I knew JavaScript, this is where I would write it.&lt;/@comment&gt;
-</db:programlisting>
-<db:para>And if I knew qmltext, I guess this is where that would go. </db:para>
-<db:title>This a caption</db:title>
-<db:para>Lorem legal ipsum</db:para>
-<db:blockquote><db:para>This is a quotation.</db:para>
-</db:blockquote>
- &lt;html&gt;&lt;body&gt;This is &lt;b&gt;raw&lt;/b&gt;. Like the &lt;h1&gt;Eddie Murphy&lt;/h1&gt; movie. Just not as funny.&lt;/body&gt;&lt;/html&gt;
- <db:sidebar><db:para>Look, ma! I made a sidebar!</db:para>
-</db:sidebar>
-<db:informaltable style="generic">
-<db:tr valign="top">
-<db:td>
-<db:para>Table item in a table row</db:para>
-</db:td>
-</db:tr>
-<db:tr valign="top">
-<db:td>
-<db:para>Another item in a different row</db:para>
-</db:td>
-</db:tr>
-</db:informaltable>
-<db:important>
-<db:para>This is really important.</db:para>
-</db:important>
-<db:para>For example, if you have code like</db:para>
-<db:programlisting language="cpp" role="bad">This is old code&lt;@op&gt;.&lt;/@op&gt;
-</db:programlisting>
-<db:para>you can rewrite it as</db:para>
-<db:programlisting language="cpp" role="new">This is &lt;@keyword&gt;new&lt;/@keyword&gt; and shiny&lt;@op&gt;!&lt;/@op&gt;
-</db:programlisting>
-<db:note>
-<db:para>The code above doesn't compile</db:para>
-</db:note>
-<db:para><db:emphasis role="bold">Warning:</db:emphasis> The following commands have yet to be tested: footnote link sincelist header index topicref // or just don’t care, remove it image inlineimage printline printto printuntil // what’s the difference between printto and printuntil??? quotefile quotefromfile quotefunction skipline skipto skipuntil span snippet codeline overload sub sup tableofcontents tt uicontrol endmapref endomit underline unicode</db:para>
-</db:section>
-</db:section>
-</db:section>
-</db:section>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qdoctests-qdocfileoutput-linking.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/qdoctests-qdocfileoutput-linking.xml
deleted file mode 100644
index 90c76d8ee..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qdoctests-qdocfileoutput-linking.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?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 QDoc's link command</db:title>
-<db:productname>OutputFromQDocFiles</db:productname>
-<db:edition>OutputFromQDocFiles - A test project for QDoc build artifacts</db:edition>
-<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
-<db:extendedlink><db:link xlink:to="qdoctests-qdocfileoutput.xml" xlink:title="prev" xlink:label="QDoc Testing"/></db:extendedlink><db:extendedlink><db:link xlink:to="toc.xml" xlink:title="prev" xlink:label="Table of Contents"/></db:extendedlink><db:abstract>
-<db:para>This is a page for testing QDoc's link command.</db:para>
-</db:abstract>
-</db:info>
-<db:anchor xml:id="link-test-target"/>
-<db:section xml:id="link-targets">
-<db:title>Link targets</db:title>
-<db:para>Valid parameters for the link command (<db:code>\l</db:code>) are page and section titles, targets defined with \target or \keyword commands, and API reference keywords (types, methods, namespaces, and so on).</db:para>
-</db:section>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qdoctests-qdocfileoutput.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/qdoctests-qdocfileoutput.xml
deleted file mode 100644
index 1e230d3b7..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qdoctests-qdocfileoutput.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?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 QDoc output from .qdoc files</db:title>
-<db:productname>OutputFromQDocFiles</db:productname>
-<db:edition>OutputFromQDocFiles - A test project for QDoc build artifacts</db:edition>
-<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
-<db:extendedlink><db:link xlink:to="qdoctests-qdocfileoutput-linking.xml" xlink:title="prev" xlink:label="QDoc Linking Test"/></db:extendedlink><db:abstract>
-<db:para>This is a simple page for testing purposes only.</db:para>
-</db:abstract>
-</db:info>
-<db:para>QDoc generates documentation for software projects. It does this by extracting <db:emphasis>QDoc comments</db:emphasis> from project source files. QDoc comments are signified by a C-style-like comment tag followed by an exclamation point, like this: <db:code>/*!</db:code> <db:code>This text is contained within QDoc comment tags.</db:code> <db:code>*/</db:code>.</db:para>
-<db:section xml:id="supported-file-types">
-<db:title>Supported file types</db:title>
-<db:para>QDoc parses <db:code>.cpp</db:code> and <db:code>.qdoc</db:code> files. It does extract comments from header (<db:code>.h</db:code>) files.</db:para>
-</db:section>
-<db:section xml:id="further-information">
-<db:title>Further information</db:title>
-<db:para>This test document is written with the purpose of testing the output QDoc generates when parsing <db:code>.qdoc</db:code> files. It is fairly simple and makes use of a limited subset of QDoc's command. Those commands are:</db:para>
-<db:itemizedlist>
-<db:listitem>
-<db:para><db:code>\page</db:code></db:para>
-</db:listitem>
-<db:listitem>
-<db:para><db:code>\title</db:code></db:para>
-</db:listitem>
-<db:listitem>
-<db:para><db:code>\brief</db:code></db:para>
-</db:listitem>
-<db:listitem>
-<db:para><db:code>\e</db:code> (for emphasizing &quot;QDoc comments&quot;)</db:para>
-</db:listitem>
-<db:listitem>
-<db:para><db:code>\c</db:code> (for multiple monospace-formatted entries)</db:para>
-</db:listitem>
-<db:listitem>
-<db:para><db:code>\section1</db:code></db:para>
-</db:listitem>
-<db:listitem>
-<db:para><db:code>\list</db:code></db:para>
-</db:listitem>
-<db:listitem>
-<db:para><db:code>\li</db:code></db:para>
-</db:listitem>
-<db:listitem>
-<db:para><db:code>\endlist</db:code></db:para>
-</db:listitem>
-</db:itemizedlist>
-</db:section>
-<db:section xml:id="linking">
-<db:title>Linking</db:title>
-<db:para>There are multiple ways to create hyperlinks to other topics:</db:para>
-<db:itemizedlist>
-<db:listitem>
-<db:para><db:link xlink:href="qdoctests-qdocfileoutput-linking.xml">Linking to a page title</db:link></db:para>
-</db:listitem>
-<db:listitem>
-<db:para><db:link xlink:href="qdoctests-qdocfileoutput-linking.xml#link-targets">Linking to a section title</db:link></db:para>
-</db:listitem>
-<db:listitem>
-<db:para><db:link xlink:href="qdoctests-qdocfileoutput-linking.xml#link-test-target">Linking using a \target string</db:link></db:para>
-</db:listitem>
-<db:listitem>
-<db:para><db:link xlink:href="qdoctests-qdocfileoutput-linking.xml">Linking using a \keyword string</db:link></db:para>
-</db:listitem>
-</db:itemizedlist>
-</db:section>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-int.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-int.xml
deleted file mode 100644
index 00ef9ec39..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-int.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?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>int QML Basic Type</db:title>
-<db:productname>Test</db:productname>
-<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
-<db:abstract>
-<db:para>An integer basic type.</db:para>
-</db:abstract>
-</db:info>
-<db:section xml:id="details">
-<db:title>Detailed Description</db:title>
-</db:section>
-<db:section xml:id="method-documentation">
-<db:title>Method Documentation</db:title>
-<db:section xml:id="abs-method">
-<db:title>int abs()</db:title>
-<db:para>Returns the absolute value of this integer.</db:para>
-</db:section>
-</db:section>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-abstractparent.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-abstractparent.xml
deleted file mode 100644
index ceac4f33f..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-abstractparent.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?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>AbstractParent QML Type</db:title>
-<db:productname>Test</db:productname>
-<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
-<db:abstract>
-<db:para>Abstract base QML type.</db:para>
-</db:abstract>
-</db:info>
-<db:variablelist>
-<db:varlistentry>
-<db:term>Import Statement</db:term>
-<db:listitem>
-<db:para>import QDoc.Test 1.1</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term>Inherited By:</db:term>
-<db:listitem>
-<db:para><db:link xlink:href="qml-qdoc-test-child.xml" xlink:role="">Child</db:link></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="property-documentation">
-<db:title>Property Documentation</db:title>
-<db:section xml:id="children-prop">
-<db:title>[default] children : list&lt;Child&gt;</db:title>
-<db:fieldsynopsis>
-<db:type>list&lt;Child&gt;</db:type>
-<db:varname>children</db:varname>
-<db:modifier>writable</db:modifier>
-<db:modifier>[default]</db:modifier>
-
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">Test</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:para>Children of the type.</db:para>
-</db:section>
-</db:section>
-<db:section xml:id="method-documentation">
-<db:title>Method Documentation</db:title>
-<db:section xml:id="rear-method">
-<db:title>void rear(Child <db:emphasis>child</db:emphasis>, var <db:emphasis>method</db:emphasis> = Strict)</db:title>
-<db:para>Do some abstract parenting on <db:code role="parameter">child</db:code> using a specific <db:code role="parameter">method</db:code>.</db:para>
-</db:section>
-</db:section>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-child.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-child.xml
deleted file mode 100644
index 21b3fbc05..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-child.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?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>Child QML Type</db:title>
-<db:productname>Test</db:productname>
-<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
-<db:abstract>
-<db:para>A Child inheriting its parent.</db:para>
-</db:abstract>
-</db:info>
-<db:variablelist>
-<db:varlistentry>
-<db:term>Import Statement</db:term>
-<db:listitem>
-<db:para>import QDoc.Test 1.1</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term>Inherits:</db:term>
-<db:listitem>
-<db:para><db:link xlink:href="">AbstractParent</db:link></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="property-documentation">
-<db:title>Property Documentation</db:title>
-<db:section xml:id="children-prop">
-<db:title>[default] children : list&lt;Child&gt;</db:title>
-<db:fieldsynopsis>
-<db:type>list&lt;Child&gt;</db:type>
-<db:varname>children</db:varname>
-<db:modifier>writable</db:modifier>
-<db:modifier>[default]</db:modifier>
-
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">Test</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:para>Children of the type.</db:para>
-</db:section>
-</db:section>
-<db:section xml:id="method-documentation">
-<db:title>Method Documentation</db:title>
-<db:section xml:id="rear-method">
-<db:title>void rear(Child <db:emphasis>child</db:emphasis>, var <db:emphasis>method</db:emphasis> = Strict)</db:title>
-<db:para>Do some abstract parenting on <db:code role="parameter">child</db:code> using a specific <db:code role="parameter">method</db:code>.</db:para>
-</db:section>
-</db:section>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-doctest.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-doctest.xml
deleted file mode 100644
index 5953866a1..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-doctest.xml
+++ /dev/null
@@ -1,105 +0,0 @@
-<?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>DocTest QML Type</db:title>
-<db:productname>Test</db:productname>
-<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
-<db:abstract>
-<db:para>Represents a doc test case.</db:para>
-<db:para>This type was introduced in QDoc.Test 0.9.</db:para>
-</db:abstract>
-</db:info>
-<db:variablelist>
-<db:varlistentry>
-<db:term>Import Statement</db:term>
-<db:listitem>
-<db:para>import QDoc.Test 1.1</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term>Since:</db:term>
-<db:listitem>
-<db:para>QDoc.Test 0.9</db:para>
-</db:listitem>
-</db:varlistentry>
-</db:variablelist>
-<db:section xml:id="details">
-<db:title>Detailed Description</db:title>
-<db:section xml:id="introduction">
-<db:title>Introduction</db:title>
-<db:para>A documentation test case, itself documented inline in <db:link xlink:href="qml-qdoc-test-doctest.xml">DocTest</db:link>.qml.</db:para>
-</db:section>
-</db:section>
-<db:section xml:id="property-documentation">
-<db:title>Property Documentation</db:title>
-<db:section xml:id="active-prop">
-<db:title>active : bool</db:title>
-<db:fieldsynopsis>
-<db:type>bool</db:type>
-<db:varname>active</db:varname>
-<db:modifier>writable</db:modifier>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:para>Whether the test is active.</db:para>
-<db:para><db:emphasis>See also </db:emphasis>
-<db:simplelist type="vert" role="see-also"><db:member><db:link xlink:href="qml-qdoc-test-doctest.xml#name-prop">name</db:link></db:member>
-</db:simplelist>
-</db:para></db:section>
-<db:section xml:id="name-prop">
-<db:title>[required] name : string</db:title>
-<db:fieldsynopsis>
-<db:type>string</db:type>
-<db:varname>name</db:varname>
-<db:modifier>writable</db:modifier>
-<db:modifier>required</db:modifier>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:para>Name of the test.</db:para>
-<db:programlisting language="qml">&lt;@type&gt;DocTest&lt;/@type&gt; {
- &lt;@name&gt;name&lt;/@name&gt;: &lt;@string&gt;&amp;quot;test&amp;quot;&lt;/@string&gt;
- &lt;@comment&gt;// ...&lt;/@comment&gt;
-}
-</db:programlisting>
-</db:section>
-</db:section>
-<db:section xml:id="signal-documentation">
-<db:title>Signal Documentation</db:title>
-<db:section xml:id="completed-signal">
-<db:title>completed()</db:title>
-<db:note>
-<db:para>The corresponding handler is <db:code>onCompleted</db:code>.</db:para>
-</db:note>
-</db:section>
-<db:section xml:id="foo-signal">
-<db:title>foo(var <db:emphasis>bar</db:emphasis>)</db:title>
-<db:para>Signal with parameter <db:code role="parameter">bar</db:code>.</db:para>
-<db:note>
-<db:para>The corresponding handler is <db:code>onFoo</db:code>.</db:para>
-</db:note>
-</db:section>
-</db:section>
-<db:section xml:id="method-documentation">
-<db:title>Method Documentation</db:title>
-<db:section xml:id="fail-method">
-<db:title>[since QDoc.Test 1.0] fail(<db:emphasis>message</db:emphasis> = &quot;oops&quot;)</db:title>
-<db:para>Fails the current test case, with the optional <db:code role="parameter">message</db:code>.</db:para>
-<db:para>This method was introduced in QDoc.Test 1.0.</db:para>
-</db:section>
-<db:section xml:id="fail_hard-method">
-<db:title>fail_hard(<db:emphasis>msg</db:emphasis> = &quot;facepalm&quot;, <db:emphasis>option</db:emphasis> = 123)</db:title>
-<db:para>Fails the current test case, hard.</db:para>
-<db:itemizedlist>
-<db:listitem>
-<db:para>Prints out <db:code role="parameter">msg</db:code>.</db:para>
-</db:listitem>
-<db:listitem>
-<db:para>Accepts a random <db:code role="parameter">option</db:code>.</db:para>
-</db:listitem>
-</db:itemizedlist>
-</db:section>
-</db:section>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-type.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-type.xml
deleted file mode 100644
index 874f9833b..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-type.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-<?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>Test</db:productname>
-<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
-<db:abstract>
-<db:para>A QML type documented in a .cpp file.</db:para>
-</db:abstract>
-</db:info>
-<db:variablelist>
-<db:varlistentry>
-<db:term>Import Statement</db:term>
-<db:listitem>
-<db:para>import QDoc.Test 1.1</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term>Instantiates:</db:term>
-<db:listitem>
-<db:para><db:link xlink:href="testqdoc-test.xml">Test</db:link></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="property-documentation">
-<db:title>Property Documentation</db:title>
-<db:para>A group of properties sharing a documentation comment.</db:para>
-<db:section xml:id="group-prop">
-<db:title>group group</db:title>
-<db:bridgehead renderas="sect2" xml:id="group.first-prop">group.first : int</db:bridgehead>
-<db:fieldsynopsis>
-<db:type>int</db:type>
-<db:varname>group.first</db:varname>
-<db:modifier>writable</db:modifier>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">Test</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:bridgehead renderas="sect2" xml:id="group.second-prop">group.second : int</db:bridgehead>
-<db:fieldsynopsis>
-<db:type>int</db:type>
-<db:varname>group.second</db:varname>
-<db:modifier>writable</db:modifier>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">Test</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:bridgehead renderas="sect2" xml:id="group.third-prop">group.third : int</db:bridgehead>
-<db:fieldsynopsis>
-<db:type>int</db:type>
-<db:varname>group.third</db:varname>
-<db:modifier>writable</db:modifier>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">Test</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:para>A property group.</db:para>
-</db:section>
-<db:section xml:id="id-prop">
-<db:title>[read-only] id : int</db:title>
-<db:fieldsynopsis>
-<db:type>int</db:type>
-<db:varname>id</db:varname>
-<db:modifier>[read-only]</db:modifier>
-
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">Test</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:para>A read-only property.</db:para>
-</db:section>
-<db:section xml:id="name-prop">
-<db:title>[required] name : string</db:title>
-<db:fieldsynopsis>
-<db:type>string</db:type>
-<db:varname>name</db:varname>
-<db:modifier>writable</db:modifier>
-<db:modifier>required</db:modifier>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">Test</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:para>Name of the Test.</db:para>
-</db:section>
-</db:section>
-<db:section xml:id="attached-property-documentation">
-<db:title>Attached Property Documentation</db:title>
-<db:section xml:id="type-attached-prop">
-<db:title>Type.type : enumeration</db:title>
-<db:fieldsynopsis>
-<db:type>enumeration</db:type>
-<db:varname>Type.type</db:varname>
-<db:modifier>attached</db:modifier>
-<db:modifier>writable</db:modifier>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">Test</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:informaltable>
-<db:thead>
-<db:tr>
-<db:th>Constant</db:th>
-<db:th>Description</db:th>
-</db:tr>
-</db:thead>
-<db:tr>
-<db:td>
-<db:para>Type.NoType</db:para>
-</db:td>
-<db:td>
-<db:para>Nothing</db:para>
-</db:td>
-</db:tr>
-<db:tr>
-<db:td>
-<db:para>Type.SomeType</db:para>
-</db:td>
-<db:td>
-<db:para>Something</db:para>
-</db:td>
-</db:tr>
-</db:informaltable>
-</db:section>
-</db:section>
-<db:section xml:id="signal-documentation">
-<db:title>Signal Documentation</db:title>
-<db:section xml:id="completed-signal">
-<db:title>completed(int <db:emphasis>status</db:emphasis>)</db:title>
-<db:para>This signal is emitted when the operation completed with <db:code role="parameter">status</db:code>.</db:para>
-<db:note>
-<db:para>The corresponding handler is <db:code>onCompleted</db:code>.</db:para>
-</db:note>
-</db:section>
-</db:section>
-<db:section xml:id="attached-signal-documentation">
-<db:title>Attached Signal Documentation</db:title>
-<db:section xml:id="configured-signal">
-<db:title>configured()</db:title>
-<db:para>This attached signal is emitted when the type was configured.</db:para>
-<db:note>
-<db:para>The corresponding handler is <db:code>onConfigured</db:code>.</db:para>
-</db:note>
-</db:section>
-</db:section>
-<db:section xml:id="method-documentation">
-<db:title>Method Documentation</db:title>
-<db:para>Enables or disables this type.</db:para>
-<db:section xml:id="copy-method">
-<db:title>Type copy(<db:emphasis>a</db:emphasis>)</db:title>
-<db:para>Returns another Type based on <db:code role="parameter">a</db:code>.</db:para>
-</db:section>
-</db:section>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-yetanotherchild.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-yetanotherchild.xml
deleted file mode 100644
index 487043376..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-yetanotherchild.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?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>YetAnotherChild QML Type</db:title>
-<db:productname>Test</db:productname>
-<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
-<db:abstract>
-<db:para>A type inheriting from internal abstract parent.</db:para>
-</db:abstract>
-</db:info>
-<db:variablelist>
-<db:varlistentry>
-<db:term>Import Statement</db:term>
-<db:listitem>
-<db:para>import QDoc.Test 1.1</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="property-documentation">
-<db:title>Property Documentation</db:title>
-<db:section xml:id="prop-prop">
-<db:title>prop : int</db:title>
-<db:fieldsynopsis>
-<db:type>int</db:type>
-<db:varname>prop</db:varname>
-<db:modifier>writable</db:modifier>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">Test</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:para>Propagated to inheriting type docs.</db:para>
-</db:section>
-</db:section>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-uicomponents-progressbar.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-uicomponents-progressbar.xml
deleted file mode 100644
index 3f162e8a4..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-uicomponents-progressbar.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?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>ProgressBar QML Type</db:title>
-<db:productname>Test</db:productname>
-<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
-<db:abstract>
-<db:para>A component that shows the progress of an event.</db:para>
-</db:abstract>
-</db:info>
-<db:variablelist>
-<db:varlistentry>
-<db:term>Import Statement</db:term>
-<db:listitem>
-<db:para>import UIComponents 1.0</db:para>
-</db:listitem>
-</db:varlistentry>
-</db:variablelist>
-<db:section xml:id="details">
-<db:title>Detailed Description</db:title>
-<db:para>A <db:link xlink:href="qml-uicomponents-progressbar.xml">ProgressBar</db:link> shows the linear progress of an event as its <db:link xlink:href="qml-uicomponents-progressbar.xml#value-prop">value</db:link>. The range is specified using the <db:link xlink:href="qml-uicomponents-progressbar.xml#minimum-prop">minimum</db:link> and the <db:link xlink:href="qml-uicomponents-progressbar.xml#maximum-prop">maximum</db:link> values.</db:para>
-<db:para>The <db:link xlink:href="qml-uicomponents-progressbar.xml">ProgressBar</db:link> component is part of the <db:link xlink:href="uicomponents-qmlmodule.xml">UI Components</db:link> module.</db:para>
-<db:para>This documentation is part of the <db:link xlink:href="test-componentset-example.xml">UIComponents</db:link> example.</db:para>
-</db:section>
-<db:section xml:id="property-documentation">
-<db:title>Property Documentation</db:title>
-<db:section xml:id="color-prop">
-<db:title>color : color</db:title>
-<db:fieldsynopsis>
-<db:type>color</db:type>
-<db:varname>color</db:varname>
-<db:modifier>writable</db:modifier>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:para>The color of the <db:link xlink:href="qml-uicomponents-progressbar.xml">ProgressBar</db:link>'s gradient. Must bind to a color type.</db:para>
-<db:para><db:emphasis>See also </db:emphasis>
-<db:simplelist type="vert" role="see-also"><db:member><db:link xlink:href="qml-uicomponents-progressbar.xml#secondColor-prop">secondColor</db:link></db:member>
-</db:simplelist>
-</db:para></db:section>
-<db:section xml:id="maximum-prop">
-<db:title>maximum : int</db:title>
-<db:fieldsynopsis>
-<db:type>int</db:type>
-<db:varname>maximum</db:varname>
-<db:modifier>writable</db:modifier>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:para>The maximum value of the <db:link xlink:href="qml-uicomponents-progressbar.xml">ProgressBar</db:link> range. The <db:link xlink:href="qml-uicomponents-progressbar.xml#value-prop">value</db:link> must not be more than this value.</db:para>
-</db:section>
-<db:section xml:id="minimum-prop">
-<db:title>minimum : int</db:title>
-<db:fieldsynopsis>
-<db:type>int</db:type>
-<db:varname>minimum</db:varname>
-<db:modifier>writable</db:modifier>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:para>The minimum value of the <db:link xlink:href="qml-uicomponents-progressbar.xml">ProgressBar</db:link> range. The <db:link xlink:href="qml-uicomponents-progressbar.xml#value-prop">value</db:link> must not be less than this value.</db:para>
-</db:section>
-<db:section xml:id="secondColor-prop">
-<db:title>secondColor : color</db:title>
-<db:fieldsynopsis>
-<db:type>color</db:type>
-<db:varname>secondColor</db:varname>
-<db:modifier>writable</db:modifier>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:para>The second color of the <db:link xlink:href="qml-uicomponents-progressbar.xml">ProgressBar</db:link>'s gradient. Must bind to a color type.</db:para>
-<db:para><db:emphasis>See also </db:emphasis>
-<db:simplelist type="vert" role="see-also"><db:member><db:link xlink:href="qml-uicomponents-progressbar.xml#color-prop">color</db:link></db:member>
-</db:simplelist>
-</db:para></db:section>
-<db:section xml:id="value-prop">
-<db:title>value : int</db:title>
-<db:fieldsynopsis>
-<db:type>int</db:type>
-<db:varname>value</db:varname>
-<db:modifier>writable</db:modifier>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:para>The value of the progress.</db:para>
-</db:section>
-</db:section>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-uicomponents-switch.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-uicomponents-switch.xml
deleted file mode 100644
index 7b1e169ef..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-uicomponents-switch.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?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>Switch QML Type</db:title>
-<db:productname>Test</db:productname>
-<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
-<db:abstract>
-<db:para>A component that can be turned on or off.</db:para>
-</db:abstract>
-</db:info>
-<db:variablelist>
-<db:varlistentry>
-<db:term>Import Statement</db:term>
-<db:listitem>
-<db:para>import UIComponents 1.0</db:para>
-</db:listitem>
-</db:varlistentry>
-</db:variablelist>
-<db:section xml:id="details">
-<db:title>Detailed Description</db:title>
-<db:para>A toggle switch has two states: an <db:code>on</db:code> and an <db:code>off</db:code> state. The <db:code>off</db:code> state is when the <db:link xlink:href="qml-uicomponents-switch.xml#on-prop">on</db:link> property is set to <db:code>false</db:code>.</db:para>
-<db:para>The ToggleSwitch component is part of the <db:link xlink:href="uicomponents-qmlmodule.xml">UI Components</db:link> module.</db:para>
-<db:para>This documentation is part of the <db:link xlink:href="test-componentset-example.xml">UIComponents</db:link> example.</db:para>
-</db:section>
-<db:section xml:id="property-documentation">
-<db:title>Property Documentation</db:title>
-<db:section xml:id="on-prop">
-<db:title>on : bool</db:title>
-<db:fieldsynopsis>
-<db:type>bool</db:type>
-<db:varname>on</db:varname>
-<db:modifier>writable</db:modifier>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:para>Indicates the state of the switch. If <db:code>false</db:code>, then the switch is in the <db:code>off</db:code> state.</db:para>
-</db:section>
-</db:section>
-<db:section xml:id="method-documentation">
-<db:title>Method Documentation</db:title>
-<db:section xml:id="toggle-method">
-<db:title>toggle()</db:title>
-<db:para>A method to toggle the switch. If the switch is <db:code>on</db:code>, the toggling it will turn it <db:code>off</db:code>. Toggling a switch in the <db:code>off</db:code> position will turn it <db:code>on</db:code>.</db:para>
-</db:section>
-</db:section>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-uicomponents-tabwidget.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-uicomponents-tabwidget.xml
deleted file mode 100644
index 0232dbe27..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-uicomponents-tabwidget.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?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>TabWidget QML Type</db:title>
-<db:productname>Test</db:productname>
-<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
-<db:abstract>
-<db:para>A widget that places its children as tabs.</db:para>
-</db:abstract>
-</db:info>
-<db:variablelist>
-<db:varlistentry>
-<db:term>Import Statement</db:term>
-<db:listitem>
-<db:para>import UIComponents 1.0</db:para>
-</db:listitem>
-</db:varlistentry>
-</db:variablelist>
-<db:section xml:id="details">
-<db:title>Detailed Description</db:title>
-<db:para>A <db:link xlink:href="qml-uicomponents-tabwidget.xml">TabWidget</db:link> places its children as tabs in a view. Selecting a tab involves selecting the tab at the top.</db:para>
-<db:para>The <db:link xlink:href="qml-uicomponents-tabwidget.xml">TabWidget</db:link> component is part of the <db:link xlink:href="uicomponents-qmlmodule.xml">UI Components</db:link> module.</db:para>
-<db:para>This documentation is part of the <db:link xlink:href="test-componentset-example.xml">UIComponents</db:link> example.</db:para>
-<db:section xml:id="adding-tabs">
-<db:title>Adding Tabs</db:title>
-<db:para>To add a tab, declare the tab as a child of the <db:link xlink:href="qml-uicomponents-tabwidget.xml">TabWidget</db:link>.</db:para>
-<db:programlisting language="cpp">TabWidget {
- id: tabwidget
-
- Rectangle {
- id: tab1
- color: &lt;@string&gt;&amp;quot;red&amp;quot;&lt;/@string&gt;
- &lt;@comment&gt;//... omitted&lt;/@comment&gt;
- }
- Rectangle {
- id: tab2
- color: &lt;@string&gt;&amp;quot;blue&amp;quot;&lt;/@string&gt;
- &lt;@comment&gt;//... omitted&lt;/@comment&gt;
- }
-
-}
-</db:programlisting>
-</db:section>
-</db:section>
-<db:section xml:id="property-documentation">
-<db:title>Property Documentation</db:title>
-<db:section xml:id="current-prop">
-<db:title>current : int</db:title>
-<db:fieldsynopsis>
-<db:type>int</db:type>
-<db:varname>current</db:varname>
-<db:modifier>writable</db:modifier>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:para>The currently active tab in the <db:link xlink:href="qml-uicomponents-tabwidget.xml">TabWidget</db:link>.</db:para>
-</db:section>
-<db:section xml:id="sampleReadOnlyProperty-prop">
-<db:title>[read-only] sampleReadOnlyProperty : int</db:title>
-<db:fieldsynopsis>
-<db:type>int</db:type>
-<db:varname>sampleReadOnlyProperty</db:varname>
-<db:modifier>[read-only]</db:modifier>
-
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:para>A sample <db:code>read-only</db:code> property. A contrived property to demonstrate QDoc's ability to detect read-only properties.</db:para>
-<db:para>The signature is:</db:para>
-<db:programlisting language="cpp">readonly property &lt;@type&gt;int&lt;/@type&gt; sampleReadOnlyProperty: &lt;@number&gt;0&lt;/@number&gt;
-</db:programlisting>
-<db:para>Note that the property must be initialized to a value.</db:para>
-</db:section>
-</db:section>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/test-componentset-example.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/test-componentset-example.xml
deleted file mode 100644
index d65d81fe1..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/test-componentset-example.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?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>QML Documentation Example</db:title>
-<db:productname>Test</db:productname>
-<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
-<db:abstract>
-<db:para>Example for documenting QML types.</db:para>
-</db:abstract>
-</db:info>
-<db:para>This example demonstrates one of the ways to document QML types. It also generates a warning about a missing example image, on purpose.</db:para>
-<db:para>In particular, there are sample types that are documented with QDoc commands comments. There are documentation comments for the QML types and their public interfaces. The types are grouped into a module, the <db:link xlink:href="uicomponents-qmlmodule.xml">UI Components</db:link> module.</db:para>
-<db:para>The uicomponents.qdoc file generates the overview page for the <db:link xlink:href="uicomponents-qmlmodule.xml">UI Components</db:link> module page.</db:para>
-<db:para>The generated documentation is available in the <db:link xlink:href="uicomponents-qmlmodule.xml">UI Components</db:link> module.</db:para>
-<db:section xml:id="qml-class">
-<db:title>QML Class</db:title>
-<db:para>The QML types use the \qmltype to document the type. In addition, they have the \inmodule command in order for QDoc to associate them to the <db:code>UIComponents</db:code> module.</db:para>
-<db:para>QDoc uses the \brief command to place a basic description when listing the types.</db:para>
-</db:section>
-<db:section xml:id="properties-signals-handlers-and-methods">
-<db:title>Properties, Signals, Handlers, and Methods</db:title>
-<db:para>The types have their properties, signals, handlers, and methods defined in their respective QML files. QDoc associates the properties and methods to the types, therefore, you only need to place the documentation above the property, method, or signal.</db:para>
-<db:para>To document the type of a <db:emphasis>property alias</db:emphasis>, you must use the \qmlproperty command to specify the data type.</db:para>
-<db:programlisting language="cpp">\qmlproperty &lt;@type&gt;int&lt;/@type&gt; anAliasedProperty
-An aliased property of type &lt;@type&gt;int&lt;/@type&gt;&lt;@op&gt;.&lt;/@op&gt;
-</db:programlisting>
-<db:section xml:id="internal-documentation">
-<db:title>Internal Documentation</db:title>
-<db:para>You may declare that a documentation is for internal use by placing the \internal command after the beginning QDoc comment <db:code>/*</db:code>. QDoc will prevent the internal documentation from appearing in the public API.</db:para>
-<db:para>If you wish to omit certain parts of the documentation, you may use the \omit and \endomit command.</db:para>
-</db:section>
-</db:section>
-<db:section xml:id="qml-types-with-c-implementation">
-<db:title>QML Types with C++ Implementation</db:title>
-<db:para>This example only demonstrates the documentation for types in QML files, but the regular QML commands may be placed inside C++ classes to define the public API of the QML type.</db:para>
-</db:section>
-<db:para>Files:</db:para>
-<db:itemizedlist><db:listitem>
-<db:para><db:link xlink:href="componentset/ProgressBar.qml">componentset/ProgressBar.qml</db:link></db:para></db:listitem>
-<db:listitem>
-<db:para><db:link xlink:href="componentset/Switch.qml">componentset/Switch.qml</db:link></db:para></db:listitem>
-<db:listitem>
-<db:para><db:link xlink:href="componentset/TabWidget.qml">componentset/TabWidget.qml</db:link></db:para></db:listitem>
-<db:listitem>
-<db:para><db:link xlink:href="componentset/componentset.pro">componentset/componentset.pro</db:link></db:para></db:listitem>
-</db:itemizedlist>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/testcpp-module.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/testcpp-module.xml
deleted file mode 100644
index 604e577df..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/testcpp-module.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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>QDoc Test C++ Classes</db:title>
-<db:productname>TestCPP</db:productname>
-<db:titleabbrev>TestCPP Reference Documentation</db:titleabbrev>
-<db:abstract>
-<db:para>A test module page.</db:para>
-</db:abstract>
-</db:info>
-<db:para>A test module page.</db:para>
-<db:section xml:id="namespaces">
-<db:title>Namespaces</db:title>
-<db:variablelist role="namespaces">
-<db:varlistentry>
-<db:term><db:link xlink:href="testqdoc.xml" xlink:role="namespace">TestQDoc</db:link></db:term>
-<db:listitem>
-<db:para>A namespace.</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="testqdoc-test.xml" xlink:role="class">TestQDoc::Test</db:link></db:term>
-<db:listitem>
-<db:para>A class in a namespace.</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term><db:link xlink:href="testqdoc-testderived.xml" xlink:role="class">TestQDoc::TestDerived</db:link></db:term>
-<db:listitem>
-<db:para>A derived class in a namespace.</db:para>
-</db:listitem>
-</db:varlistentry>
-</db:variablelist>
-</db:section>
-<db:section xml:id="details">
-<db:title>Detailed Description</db:title>
-</db:section>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/testqdoc-test.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/testqdoc-test.xml
deleted file mode 100644
index 013dd6433..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/testqdoc-test.xml
+++ /dev/null
@@ -1,234 +0,0 @@
-<?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>Test Class</db:title>
-<db:subtitle>TestQDoc::Test</db:subtitle>
-<db:productname>TestCPP</db:productname>
-<db:titleabbrev>TestCPP Reference Documentation</db:titleabbrev>
-<db:abstract>
-<db:para>A class in a namespace.</db:para>
-</db:abstract>
-</db:info>
-<db:variablelist>
-<db:varlistentry>
-<db:term>Header</db:term>
-<db:listitem>
-<db:para>Test</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term>CMake</db:term>
-<db:listitem>
-<db:para>find_package(Qt6 COMPONENT QDocTest)</db:para>
-<db:para>target_link_libraries(mytarget PUBLIC Qt::QDocTest)</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term>qmake</db:term>
-<db:listitem>
-<db:para>QT += testcpp</db:para>
-</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:variablelist>
-<db:section xml:id="details">
-<db:title>Detailed Description</db:title>
-</db:section>
-<db:section xml:id="member-type-documentation">
-<db:title>Member Type Documentation</db:title>
-<db:section xml:id="SomeType-typedef">
-<db:title>Test::typedef SomeType</db:title>
-<db:typedefsynopsis>
-<db:type>SomeType</db:type><db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:typedefsynopsis>
-<db:para>A typedef.</db:para>
-</db:section>
-</db:section>
-<db:section xml:id="member-function-documentation">
-<db:title>Member Function Documentation</db:title>
-<db:section xml:id="overload">
-<db:title>[protected] Test::void overload()</db:title>
-<db:bridgehead renderas="sect2" xml:id="overload-1">[protected, since Test 1.2] Test::void 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="funcPtr">
-<db:title>Test::void (*)(bool) funcPtr(bool <db:emphasis>b</db:emphasis>, const char *<db:emphasis>s</db:emphasis>)</db:title>
-<db:methodsynopsis>
-<db:type>void (*)(bool)</db:type>
-<db:methodname>funcPtr</db:methodname>
-<db:methodparam>
-<db:type>bool</db:type>
-<db:parameter>b</db:parameter>
-</db:methodparam>
-<db:methodparam>
-<db:type>const char *</db:type>
-<db:parameter>s</db:parameter>
-</db:methodparam>
-<db:synopsisinfo db:role="meta">plain</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">void (*)(bool) funcPtr(bool b, const char *s)</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:methodsynopsis>
-<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>
-</db:section>
-<db:section xml:id="inlineFunction">
-<db:title>Test::void inlineFunction()</db:title>
-<db:methodsynopsis>
-<db:void/>
-<db:methodname>inlineFunction</db:methodname>
-<db:void/>
-<db:synopsisinfo db:role="meta">plain</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">void inlineFunction()</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:methodsynopsis>
-<db:para>An inline function, documented using the \fn QDoc command.</db:para>
-</db:section>
-<db:section xml:id="someFunction">
-<db:title>Test::int someFunction(int <db:emphasis>v</db:emphasis> = 0)</db:title>
-<db:methodsynopsis>
-<db:type>int</db:type>
-<db:methodname>someFunction</db:methodname>
-<db:methodparam>
-<db:type>int</db:type>
-<db:parameter>v</db:parameter>
-<db:initializer>0</db:initializer>
-</db:methodparam>
-<db:synopsisinfo db:role="meta">plain</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">int someFunction(int v)</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:methodsynopsis>
-<db:para>Function that takes a parameter <db:code role="parameter">v</db:code>. Also returns the value of <db:code role="parameter">v</db:code>.</db:para>
-</db:section>
-<db:section xml:id="someFunctionDefaultArg">
-<db:title>Test::void someFunctionDefaultArg(int <db:emphasis>i</db:emphasis>, bool <db:emphasis>b</db:emphasis> = false)</db:title>
-<db:methodsynopsis>
-<db:void/>
-<db:methodname>someFunctionDefaultArg</db:methodname>
-<db:methodparam>
-<db:type>int</db:type>
-<db:parameter>i</db:parameter>
-</db:methodparam>
-<db:methodparam>
-<db:type>bool</db:type>
-<db:parameter>b</db:parameter>
-<db:initializer>false</db:initializer>
-</db:methodparam>
-<db:synopsisinfo db:role="meta">plain</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">void someFunctionDefaultArg(int i, bool b)</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:methodsynopsis>
-<db:para>Function that takes a parameter <db:code role="parameter">i</db:code> and <db:code role="parameter">b</db:code>.</db:para>
-</db:section>
-<db:section xml:id="virtualFun">
-<db:title>[virtual] Test::void virtualFun()</db:title>
-<db:methodsynopsis>
-<db:modifier>virtual</db:modifier>
-<db:void/>
-<db:methodname>virtualFun</db:methodname>
-<db:void/>
-<db:synopsisinfo db:role="meta">plain</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">void virtualFun()</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:methodsynopsis>
-<db:para>Function that must be reimplemented.</db:para>
-</db:section>
-</db:section>
-<db:section xml:id="macro-documentation">
-<db:title>Macro Documentation</db:title>
-<db:section xml:id="QDOCTEST_MACRO2">
-<db:title>[since Test 1.1] QDOCTEST_MACRO2(<db:emphasis>x</db:emphasis>)</db:title>
-<db:methodsynopsis>
-<db:methodname>QDOCTEST_MACR</db:methodname>
-<db:methodparam>
-<db:type></db:type>
-<db:parameter>x</db:parameter>
-</db:methodparam>
-<db:synopsisinfo db:role="meta">macrowithparams</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">QDOCTEST_MACRO2( x)</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:methodsynopsis>
-<db:para>A macro with argument <db:code role="parameter">x</db:code>.</db:para>
-<db:para>This function was introduced in Test 1.1.</db:para>
-</db:section>
-</db:section>
-<db:section xml:id="obsolete">
-<db:title>Obsolete Members for Test</db:title>
-<db:para><db:emphasis role="bold">The following members of class <db:link xlink:href="testqdoc-test.xml">Test</db:link> are obsolete.</db:emphasis> They are provided to keep old source code working. We strongly advise against using them in new code.</db:para>
-<db:section xml:id="member-function-documentation">
-<db:title>Member Function Documentation</db:title>
-<db:section xml:id="anotherObsoleteMember">
-<db:title>Test::void anotherObsoleteMember()</db:title>
-<db:methodsynopsis>
-<db:void/>
-<db:methodname>anotherObsoleteMember</db:methodname>
-<db:void/>
-<db:synopsisinfo db:role="meta">plain</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">void anotherObsoleteMember()</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">obsolete</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:methodsynopsis>
-<db:para>This function is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.</db:para>
-<db:para>Use <db:link xlink:href="testqdoc-test.xml#obsoleteMember">obsoleteMember</db:link>() instead.</db:para>
-</db:section>
-<db:section xml:id="deprecatedMember">
-<db:title>Test::void deprecatedMember()</db:title>
-<db:methodsynopsis>
-<db:void/>
-<db:methodname>deprecatedMember</db:methodname>
-<db:void/>
-<db:synopsisinfo db:role="meta">plain</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">void deprecatedMember()</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">obsolete</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:methodsynopsis>
-<db:para>This function is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.</db:para>
-<db:para>Use <db:link xlink:href="testqdoc-test.xml#someFunction">someFunction</db:link>() instead.</db:para>
-</db:section>
-<db:section xml:id="obsoleteMember">
-<db:title>Test::void obsoleteMember()</db:title>
-<db:methodsynopsis>
-<db:void/>
-<db:methodname>obsoleteMember</db:methodname>
-<db:void/>
-<db:synopsisinfo db:role="meta">plain</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">void obsoleteMember()</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">obsolete</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:methodsynopsis>
-<db:para>This function is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.</db:para>
-<db:para>Use <db:link xlink:href="testqdoc-test.xml#someFunction">someFunction</db:link>() instead.</db:para>
-</db:section>
-</db:section>
-</db:section>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/testqdoc-testderived.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/testqdoc-testderived.xml
deleted file mode 100644
index 066b29e32..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/testqdoc-testderived.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?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>TestDerived Class</db:title>
-<db:subtitle>TestQDoc::TestDerived</db:subtitle>
-<db:productname>TestCPP</db:productname>
-<db:titleabbrev>TestCPP Reference Documentation</db:titleabbrev>
-<db:abstract>
-<db:para>A derived class in a namespace.</db:para>
-</db:abstract>
-</db:info>
-<db:variablelist>
-<db:varlistentry>
-<db:term>Header</db:term>
-<db:listitem>
-<db:para>TestDerived</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term>CMake</db:term>
-<db:listitem>
-<db:para>find_package(Qt6 COMPONENT QDocTest)</db:para>
-<db:para>target_link_libraries(mytarget PUBLIC Qt::QDocTest)</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term>qmake</db:term>
-<db:listitem>
-<db:para>QT += testcpp</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term>Inherits</db:term>
-<db:listitem>
-<db:para><db:link xlink:href="testqdoc-test.xml" xlink:role="class">TestQDoc::Test</db:link></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="member-type-documentation">
-<db:title>Member Type Documentation</db:title>
-<db:section xml:id="DerivedType-alias">
-<db:title>[alias] TestDerived::DerivedType</db:title>
-<db:typedefsynopsis>
-<db:type>DerivedType</db:type><db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:typedefsynopsis>
-<db:para>This is a type alias for <db:link xlink:href="testqdoc-test.xml#SomeType-typedef">TestQDoc::Test::SomeType</db:link>.</db:para>
-<db:para>An aliased typedef.</db:para>
-</db:section>
-<db:section xml:id="NotTypedef-alias">
-<db:title>[alias] TestDerived::NotTypedef</db:title>
-<db:typedefsynopsis>
-<db:type>NotTypedef</db:type><db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:typedefsynopsis>
-<db:para>This is a type alias for <db:code>int</db:code>.</db:para>
-<db:para>I'm an alias, not a typedef.</db:para>
-</db:section>
-</db:section>
-<db:section xml:id="member-function-documentation">
-<db:title>Member Function Documentation</db:title>
-<db:section xml:id="virtualFun">
-<db:title>[override virtual] TestDerived::void virtualFun()</db:title>
-<db:methodsynopsis>
-<db:modifier>virtual</db:modifier>
-<db:void/>
-<db:methodname>virtualFun</db:methodname>
-<db:modifier>override</db:modifier>
-<db:void/>
-<db:synopsisinfo db:role="meta">plain</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">void virtualFun() override</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:methodsynopsis>
-<db:para>Reimplements: <db:link xlink:href="testqdoc-test.xml#virtualFun" type="function">Test::virtualFun()</db:link>.</db:para>
-</db:section>
-</db:section></db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/testqdoc.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/testqdoc.xml
deleted file mode 100644
index 2bd666c06..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/testqdoc.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?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>TestQDoc Namespace</db:title>
-<db:productname>TestCPP</db:productname>
-<db:titleabbrev>TestCPP Reference Documentation</db:titleabbrev>
-<db:abstract>
-<db:para>A namespace.</db:para>
-</db:abstract>
-</db:info>
-<db:variablelist>
-<db:varlistentry>
-<db:term>Header</db:term>
-<db:listitem>
-<db:para>TestCPP</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term>CMake</db:term>
-<db:listitem>
-<db:para>find_package(Qt6 COMPONENT QDocTest)</db:para>
-<db:para>target_link_libraries(mytarget PUBLIC Qt::QDocTest)</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term>qmake</db:term>
-<db:listitem>
-<db:para>QT += testcpp</db:para>
-</db:listitem>
-</db:varlistentry>
-</db:variablelist>
-<db:section xml:id="details">
-<db:title>Detailed Description</db:title>
-<db:section xml:id="usage">
-<db:title>Usage</db:title>
-<db:para>This namespace is for testing QDoc output.</db:para>
-</db:section>
-</db:section>
-<db:section xml:id="classes">
-<db:title>Classes</db:title>
-<db:section>
-<db:title>class <db:link xlink:href="testqdoc-test.xml" xlink:role="class">Test</db:link></db:title>
-<db:para>A class in a namespace.</db:para>
-</db:section>
-<db:section>
-<db:title>class <db:link xlink:href="testqdoc-testderived.xml" xlink:role="class">TestDerived</db:link></db:title>
-<db:para>A derived class in a namespace.</db:para>
-</db:section>
-</db:section>
-<db:section xml:id="macro-documentation">
-<db:title>Macro Documentation</db:title>
-<db:section xml:id="QDOCTEST_MACRO">
-<db:title>QDOCTEST_MACRO</db:title>
-<db:methodsynopsis>
-<db:methodname>QDOCTEST_MAC</db:methodname>
-<db:synopsisinfo db:role="meta">macrowithoutparams</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">QDOCTEST_MACRO</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:methodsynopsis>
-</db:section>
-</db:section>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/uicomponents-qmlmodule.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/uicomponents-qmlmodule.xml
deleted file mode 100644
index f00b3d3f7..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/uicomponents-qmlmodule.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?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>UI Components</db:title>
-<db:productname>Test</db:productname>
-<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
-<db:abstract>
-<db:para>Basic set of UI components.</db:para>
-</db:abstract>
-</db:info>
-<db:anchor xml:id="details"/>
-<db:para>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.</db:para>
-<db:para>This module is part of the <db:link xlink:href="test-componentset-example.xml">UIComponents</db:link> example.</db:para>
-<db:variablelist role="members">
-<db:varlistentry>
-<db:term><db:link xlink:href="qml-uicomponents-progressbar.xml" xlink:role="">ProgressBar</db:link></db:term>
-<db:listitem>
-<db:para>A component that shows the progress of an event.</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term><db:link xlink:href="qml-uicomponents-switch.xml" xlink:role="">Switch</db:link></db:term>
-<db:listitem>
-<db:para>A component that can be turned on or off.</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term><db:link xlink:href="qml-uicomponents-tabwidget.xml" xlink:role="">TabWidget</db:link></db:term>
-<db:listitem>
-<db:para>A widget that places its children as tabs.</db:para>
-</db:listitem>
-</db:varlistentry>
-</db:variablelist>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/dontdocument/classes.html b/tests/auto/qdoc/generatedoutput/expected_output/dontdocument/classes.html
deleted file mode 100644
index f5bae610a..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/dontdocument/classes.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- test.qdoc -->
- <title>Classes | TestCPP</title>
-</head>
-<body>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">Classes</h1>
-<span class="subtitle"></span>
-<!-- $$$classes.html-description -->
-<div class="descr"> <a name="details"></a>
-<div class="table"><table class="annotated">
-<tr class="odd topAlign"><td class="tblName"><p><a href="seenclass.html">SeenClass</a></p></td><td class="tblDescr"><p>A public but undocumented class</p></td></tr>
-<tr class="even topAlign"><td class="tblName"><p><a href="testqdoc-test.html">TestQDoc::Test</a></p></td><td class="tblDescr"><p>A class in a namespace</p></td></tr>
-<tr class="odd topAlign"><td class="tblName"><p><a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></p></td><td class="tblDescr"><p>A derived class in a namespace</p></td></tr>
-</table></div>
-</div>
-<!-- @@@classes.html -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/dontdocument/dontdocument.qhp b/tests/auto/qdoc/generatedoutput/expected_output/dontdocument/dontdocument.qhp
deleted file mode 100644
index 58738393a..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/dontdocument/dontdocument.qhp
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<QtHelpProject version="1.0">
- <namespace>org.qt-project.dontdocument.001</namespace>
- <virtualFolder>test</virtualFolder>
- <metaData name="version" value=""/>
- <filterSection>
- <toc>
- <section ref="testcpp-module.html" title="QDoc Test C++ Classes">
- <section ref="testcpp-module.html" title="Classes">
- <section ref="seenclass.html" title="SeenClass Class Reference"/>
- <section ref="testqdoc-test.html" title="TestQDoc::Test Class Reference">
- <section ref="testqdoc-test-members.html" title="List of all members"/>
- <section ref="testqdoc-test-obsolete.html" title="Obsolete members"/>
- </section>
- <section ref="testqdoc-testderived.html" title="TestQDoc::TestDerived Class Reference">
- <section ref="testqdoc-testderived-members.html" title="List of all members"/>
- </section>
- </section>
- </section>
- </toc>
- <keywords>
- <keyword name="Classes" id="Classes" ref="classes.html"/>
- <keyword name="QDOCTEST_MACRO" id="QDOCTEST_MACRO" ref="testqdoc.html#QDOCTEST_MACRO"/>
- <keyword name="QDOCTEST_MACRO2" id="QDOCTEST_MACRO2" ref="testqdoc-test.html#QDOCTEST_MACRO2"/>
- <keyword name="QDoc Test C++ Classes" id="QDoc Test C++ Classes" ref="testcpp-module.html"/>
- <keyword name="SeenClass" id="SeenClass" ref="seenclass.html"/>
- <keyword name="Test" id="TestQDoc::Test" ref="testqdoc-test.html"/>
- <keyword name="Test::SomeType" id="Test::SomeType" ref="testqdoc-test.html#SomeType-typedef"/>
- <keyword name="TestDerived" id="TestQDoc::TestDerived" ref="testqdoc-testderived.html"/>
- <keyword name="TestDerived::DerivedType" id="TestDerived::DerivedType" ref="testqdoc-testderived.html#DerivedType-alias"/>
- <keyword name="TestDerived::NotTypedef" id="TestDerived::NotTypedef" ref="testqdoc-testderived.html#NotTypedef-alias"/>
- <keyword name="TestQDoc" id="TestQDoc" ref="testqdoc.html"/>
- <keyword name="anotherObsoleteMember" id="Test::anotherObsoleteMember" ref="testqdoc-test-obsolete.html#anotherObsoleteMember"/>
- <keyword name="deprecatedMember" id="Test::deprecatedMember" ref="testqdoc-test-obsolete.html#deprecatedMember"/>
- <keyword name="funcPtr" id="Test::funcPtr" ref="testqdoc-test.html#funcPtr"/>
- <keyword name="inlineFunction" id="Test::inlineFunction" ref="testqdoc-test.html#inlineFunction"/>
- <keyword name="obsoleteMember" id="Test::obsoleteMember" ref="testqdoc-test-obsolete.html#obsoleteMember"/>
- <keyword name="overload" id="Test::overload" ref="testqdoc-test.html#overload"/>
- <keyword name="someFunction" id="Test::someFunction" ref="testqdoc-test.html#someFunction"/>
- <keyword name="someFunctionDefaultArg" id="Test::someFunctionDefaultArg" ref="testqdoc-test.html#someFunctionDefaultArg"/>
- <keyword name="virtualFun" id="Test::virtualFun" ref="testqdoc-test.html#virtualFun"/>
- <keyword name="virtualFun" id="TestDerived::virtualFun" ref="testqdoc-testderived.html#virtualFun"/>
- </keywords>
- <files>
- <file>classes.html</file>
- <file>seenclass.html</file>
- <file>testcpp-module.html</file>
- <file>testqdoc-test-members.html</file>
- <file>testqdoc-test-obsolete.html</file>
- <file>testqdoc-test.html</file>
- <file>testqdoc-testderived-members.html</file>
- <file>testqdoc-testderived.html</file>
- <file>testqdoc.html</file>
- </files>
- </filterSection>
-</QtHelpProject>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/dontdocument/seenclass.html b/tests/auto/qdoc/generatedoutput/expected_output/dontdocument/seenclass.html
deleted file mode 100644
index 68124a7bd..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/dontdocument/seenclass.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- dont.cpp -->
- <title>SeenClass Class | TestCPP</title>
-</head>
-<body>
-<li>SeenClass</li>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></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">SeenClass Class</h1>
-<!-- $$$SeenClass-brief -->
-<p>A public but undocumented class. <a href="#details">More...</a></p>
-<!-- @@@SeenClass -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;SeenClass&gt;</span>
-</td></tr><tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 COMPONENT QDocTest) <br/>
-target_link_libraries(mytarget PUBLIC Qt::QDocTest)</td></tr><tr><td class="memItemLeft rightAlign topAlign"> qmake:</td><td class="memItemRight bottomAlign"> QT += testcpp</td></tr></table></div><ul>
-</ul>
-<a name="details"></a>
-<!-- $$$SeenClass-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-</div>
-<!-- @@@SeenClass -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/examples-manifest.xml b/tests/auto/qdoc/generatedoutput/expected_output/examples-manifest.xml
deleted file mode 100644
index b528755a8..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/examples-manifest.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<instructionals module="Test">
- <examples>
- <example name="CMake Example Project" docUrl="qthelp://org.qt-project.test.001/test/test-cmaketest-example.html" projectPath="test/cmaketest/CMakeLists.txt" imageUrl="qthelp://org.qt-project.test.001/test/images/leonardo-da-vinci.png" isTest="true">
- <description><![CDATA[No description available]]></description>
- <tags>cmake,project,test</tags>
- <fileToOpen mainFile="true">test/cmaketest/main.cpp</fileToOpen>
- </example>
- <example name="QML Documentation Example" docUrl="qthelp://org.qt-project.test.001/test/test-componentset-example.html" projectPath="tutorials/componentset/componentset.pro" isTest="true">
- <description><![CDATA[Example for documenting QML types.]]></description>
- <tags>documentation,qml,sample,test</tags>
- </example>
- </examples>
-</instructionals>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/first.html b/tests/auto/qdoc/generatedoutput/expected_output/first.html
deleted file mode 100644
index 1e92e7067..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/first.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- main.cpp -->
- <title>First Class | TestModule</title>
-</head>
-<body>
-<li>First</li>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></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">First Class</h1>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;First&gt;</span>
-</td></tr></table></div><ul>
-</ul>
-<a name="details"></a>
-<!-- $$$First-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-<p>This is a first class</p>
-</div>
-<!-- @@@First -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/headerfile-docbook/testheader.xml b/tests/auto/qdoc/generatedoutput/expected_output/headerfile-docbook/testheader.xml
deleted file mode 100644
index afa0b20a3..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/headerfile-docbook/testheader.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?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;TestHeader&gt; - Test Header</db:title>
-<db:productname>HeaderFile</db:productname>
-<db:titleabbrev>HeaderFile Reference Documentation</db:titleabbrev>
-<db:abstract>
-<db:para>A header file.</db:para>
-</db:abstract>
-</db:info>
-<db:variablelist>
-<db:varlistentry>
-<db:term>Header</db:term>
-<db:listitem>
-<db:para>TestHeader</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="type-documentation">
-<db:title>Type Documentation</db:title>
-<db:section xml:id="Globals-enum">
-<db:title>enum Globals</db:title>
-<db:enumsynopsis>
-<db:enumname>Globals</db:enumname>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">HeaderFile</db:synopsisinfo>
-<db:enumitem db:enumidentifier="Glo" db:enumvalue="0"/>
-<db:enumitem db:enumidentifier="Bal" db:enumvalue="1"/>
-</db:enumsynopsis>
-<db:informaltable>
-<db:thead>
-<db:tr>
-<db:th>Constant</db:th>
-<db:th>Description</db:th>
-</db:tr>
-</db:thead>
-<db:tr>
-<db:td>
-<db:para><db:code>Glo</db:code></db:para>
-</db:td>
-<db:td><db:code>0</db:code></db:td>
-</db:tr>
-<db:tr>
-<db:td>
-<db:para><db:code>Bal</db:code></db:para>
-</db:td>
-<db:td><db:code>1</db:code></db:td>
-</db:tr>
-</db:informaltable>
-</db:section>
-</db:section>
-<db:section xml:id="variable-documentation">
-<db:title>Variable Documentation</db:title>
-<db:section xml:id="globalVar-var">
-<db:title>const int globalVar</db:title>
-<db:fieldsynopsis>
-<db:type>const int</db:type>
-<db:varname>globalVar</db:varname>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">HeaderFile</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:para>Global variable.</db:para>
-</db:section>
-</db:section>
-<db:section xml:id="function-documentation">
-<db:title>Function Documentation</db:title>
-<db:section xml:id="globalFunc">
-<db:title>void globalFunc()</db:title>
-<db:methodsynopsis>
-<db:void/>
-<db:methodname>globalFunc</db:methodname>
-<db:void/>
-<db:synopsisinfo db:role="meta">plain</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">void globalFunc()</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">HeaderFile</db:synopsisinfo>
-</db:methodsynopsis>
-<db:para>Global function.</db:para>
-</db:section>
-</db:section>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/headerfile/headers.html b/tests/auto/qdoc/generatedoutput/expected_output/headerfile/headers.html
deleted file mode 100644
index 65b88eca4..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/headerfile/headers.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testheader.cpp -->
- <title>Headers | HeaderFile</title>
-</head>
-<body>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">Headers</h1>
-<span class="subtitle"></span>
-<!-- $$$headers-description -->
-<div class="descr"> <a name="details"></a>
-</div>
-<!-- @@@headers -->
-<div class="table"><table class="annotated">
-<tr class="odd topAlign"><td class="tblName"><p><a href="testheader.html">&lt;TestHeader&gt;</a></p></td><td class="tblDescr"><p>A header file</p></td></tr>
-</table></div>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/headerfile/testheader.html b/tests/auto/qdoc/generatedoutput/expected_output/headerfile/testheader.html
deleted file mode 100644
index f67de8a3f..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/headerfile/testheader.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testheader.cpp -->
- <title>&lt;TestHeader&gt; - Test Header | HeaderFile</title>
-</head>
-<body>
-<li><a href="headers.html">Headers</a></li>
-<li>&lt;TestHeader&gt; - Test Header</li>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-</ul>
-</div>
-<div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">&lt;TestHeader&gt; - Test Header</h1>
-<!-- $$$<TestHeader>-brief -->
-<p>A header file. <a href="#details">More...</a></p>
-<!-- @@@<TestHeader> -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;TestHeader&gt;</span>
-</td></tr></table></div><ul>
-</ul>
-<a name="types"></a>
-<h2 id="types">Types</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> enum </td><td class="memItemRight bottomAlign"><b><a href="testheader.html#Globals-enum">Globals</a></b> { Glo, Bal }</td></tr>
-</table></div>
-<a name="variables"></a>
-<h2 id="variables">Variables</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> const int </td><td class="memItemRight bottomAlign"><b><a href="testheader.html#globalVar-var">globalVar</a></b></td></tr>
-</table></div>
-<a name="functions"></a>
-<h2 id="functions">Functions</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testheader.html#globalFunc">globalFunc</a></b>()</td></tr>
-</table></div>
-<a name="details"></a>
-<!-- $$$<TestHeader>-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-</div>
-<!-- @@@<TestHeader> -->
-<div class="types">
-<h2>Type Documentation</h2>
-<!-- $$$Globals$$$Glo$$$Bal -->
-<h3 class="fn" id="Globals-enum"><a name="Globals-enum"></a>enum <span class="name">Globals</span></h3>
-<div class="table"><table class="valuelist"><tr><th class="tblConst">Constant</th><th class="tblVal">Value</th></tr>
-<tr><td class="topAlign"><code>Glo</code></td><td class="topAlign tblval"><code>0</code></td></tr>
-<tr><td class="topAlign"><code>Bal</code></td><td class="topAlign tblval"><code>1</code></td></tr>
-</table></div>
-<!-- @@@Globals -->
-</div>
-<div class="vars">
-<h2>Variable Documentation</h2>
-<!-- $$$globalVar -->
-<h3 class="fn" id="globalVar-var"><a name="globalVar-var"></a>const <span class="type">int</span> <span class="name">globalVar</span></h3>
-<p>Global variable.</p>
-<!-- @@@globalVar -->
-</div>
-<div class="func">
-<h2>Function Documentation</h2>
-<!-- $$$globalFunc[overload1]$$$globalFunc -->
-<h3 class="fn" id="globalFunc"><a name="globalFunc"></a><span class="type">void</span> <span class="name">globalFunc</span>()</h3>
-<p>Global function.</p>
-<!-- @@@globalFunc -->
-</div>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/html/first.webxml b/tests/auto/qdoc/generatedoutput/expected_output/html/first.webxml
deleted file mode 100644
index b3dc9dffa..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/html/first.webxml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<WebXML>
- <document>
- <class name="First" href="first.html" status="active" access="public" location="bbb.h" documented="true" module="TestModule">
- <description>
- <para>This is a first class</para>
- </description>
- <class name="Nested" fullname="First::Nested" href="first-nested.html" status="active" access="private" location="bbb.h" documented="true" module="TestModule">
- <description>
- <para>This is a nested class</para>
- </description>
- </class>
- </class>
- </document>
-</WebXML>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/html/index.webxml b/tests/auto/qdoc/generatedoutput/expected_output/html/index.webxml
deleted file mode 100644
index c2235e69d..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/html/index.webxml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<WebXML>
- <document>
- <page name="index.html" href="index.html" status="active" location="index.qdoc" documented="true" subtype="page" title="doc index" fulltitle="doc index" subtitle="" module="TestModule">
- <description>
- <generatedlist contents="classesbymodule TestModule"/>
- </description>
- </page>
- </document>
-</WebXML>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/html/qdoctests-qdocfileoutput-exhaustive.webxml b/tests/auto/qdoc/generatedoutput/expected_output/html/qdoctests-qdocfileoutput-exhaustive.webxml
deleted file mode 100644
index 673675bd1..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/html/qdoctests-qdocfileoutput-exhaustive.webxml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<WebXML>
- <document>
- <page name="qdoctests-qdocfileoutput-exhaustive.html" href="qdoctests-qdocfileoutput-exhaustive.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Exhaustive testing of QDoc commands" fulltitle="Exhaustive testing of QDoc commands" subtitle="" module="OutputFromQDocFiles" brief="This page is a dumping ground for QDoc commands under test">
- <contents name="this-is-a-section1" title="This is a section1" level="1"/>
- <contents name="this-is-a-section2" title="This is a section2" level="2"/>
- <contents name="this-is-a-section3" title="This is a section3" level="3"/>
- <contents name="this-is-a-section4" title="This is a section4" level="4"/>
- <description>
- <brief>This page is a dumping ground for QDoc commands under test.</brief>
- <section id="this-is-a-section1">
- <heading level="1">This is a section1</heading>
- </section>
- <section id="this-is-a-section2">
- <heading level="2">This is a section2</heading>
- </section>
- <section id="this-is-a-section3">
- <heading level="3">This is a section3</heading>
- </section>
- <section id="this-is-a-section4">
- <heading level="4">This is a section4</heading>
- </section>
- </description>
- </page>
- </document>
- <badcode>This is bad code</badcode>
- <para>This text should have a line break riiiiight noooow.</para>
- <para>
- <bold>All your text belong to bold</bold> ...And this is an examble of only <bold>bold</bold> being, well, bold.</para>
- <dots indent="4">...</dots>
- <para>And if I knew qmltext, I guess this is where that would go. </para>This a caption<legalese>
- <para>Lorem legal ipsum</para>
- </legalese>
- <quote>
- <para>This is a quotation.</para>
- </quote>
- <raw format="HTML"> &lt;html&gt;&lt;body&gt;This is &lt;b&gt;raw&lt;/b&gt;. Like the &lt;h1&gt;Eddie Murphy&lt;/h1&gt; movie. Just not as funny.&lt;/body&gt;&lt;/html&gt;
- </raw>
- <para>Look, ma! I made a sidebar!</para>
- <table>
- <row>
- <item>
- <para>Table item in a table row</para>
- </item>
- </row>
- <row>
- <item>
- <para>Another item in a different row</para>
- </item>
- </row>
- </table>
- <para>
- <bold>Important:</bold> This is really important.</para>
- <para>For example, if you have code like</para>
- <oldcode>This is old code.</oldcode>
- <para>you can rewrite it as</para>
- <newcode>This is new and shiny!</newcode>
- <para>
- <bold>Note:</bold> The code above doesn't compile</para>
- <para>
- <bold>Warning:</bold> The following commands have yet to be tested: footnote link sincelist header index topicref // or just don’t care, remove it image inlineimage printline printto printuntil // what’s the difference between printto and printuntil??? quotefile quotefromfile quotefunction skipline skipto skipuntil span snippet codeline overload sub sup tableofcontents tt uicontrol endmapref endomit underline unicode</para>
-</WebXML>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/html/qdoctests-qdocfileoutput-linking.webxml b/tests/auto/qdoc/generatedoutput/expected_output/html/qdoctests-qdocfileoutput-linking.webxml
deleted file mode 100644
index b3ad4ee3b..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/html/qdoctests-qdocfileoutput-linking.webxml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<WebXML>
- <document>
- <page name="qdoctests-qdocfileoutput-linking.html" href="qdoctests-qdocfileoutput-linking.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Testing QDoc's link command" fulltitle="Testing QDoc's link command" subtitle="" module="OutputFromQDocFiles" brief="This is a page for testing QDoc's link command">
- <target name="link-test-target"/>
- <keyword name="qdoc-linking-test" title="QDoc Linking Test"/>
- <contents name="link-targets" title="Link targets" level="1"/>
- <description>
- <relation href="toc.html" type="page" meta="next" description="Table of Contents"/>
- <relation href="qdoctests-qdocfileoutput.html" type="page" meta="previous" description="Testing QDoc output from .qdoc files"/>
- <brief>This is a page for testing QDoc's link command.</brief>
- <target name="link-test-target"/>
- <section id="link-targets">
- <heading level="1">Link targets</heading>
- <para>Valid parameters for the link command (<teletype type="highlighted">\l</teletype>) are page and section titles, targets defined with \target or \keyword commands, and API reference keywords (types, methods, namespaces, and so on).</para>
- </section>
- </description>
- </page>
- </document>
-</WebXML>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/html/qdoctests-qdocfileoutput.webxml b/tests/auto/qdoc/generatedoutput/expected_output/html/qdoctests-qdocfileoutput.webxml
deleted file mode 100644
index 2d9c786d8..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/html/qdoctests-qdocfileoutput.webxml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<WebXML>
- <document>
- <page name="qdoctests-qdocfileoutput.html" href="qdoctests-qdocfileoutput.html" status="active" location="qdoctests-outputfromqdocfiles.qdoc" documented="true" subtype="page" title="Testing QDoc output from .qdoc files" fulltitle="Testing QDoc output from .qdoc files" subtitle="" module="OutputFromQDocFiles" brief="This is a simple page for testing purposes only">
- <contents name="supported-file-types" title="Supported file types" level="1"/>
- <contents name="further-information" title="Further information" level="1"/>
- <contents name="linking" title="Linking" level="1"/>
- <description>
- <relation href="qdoctests-qdocfileoutput-linking.html" type="page" meta="next" description="Testing QDoc's link command"/>
- <brief>This is a simple page for testing purposes only.</brief>
- <para>QDoc generates documentation for software projects. It does this by extracting <italic>QDoc comments</italic> from project source files. QDoc comments are signified by a C-style-like comment tag followed by an exclamation point, like this: <teletype type="highlighted">/*!</teletype> <teletype type="highlighted">This text is contained within QDoc comment tags.</teletype> <teletype type="highlighted">*/</teletype>.</para>
- <section id="supported-file-types">
- <heading level="1">Supported file types</heading>
- <para>QDoc parses <teletype type="highlighted">.cpp</teletype> and <teletype type="highlighted">.qdoc</teletype> files. It does extract comments from header (<teletype type="highlighted">.h</teletype>) files.</para>
- </section>
- <section id="further-information">
- <heading level="1">Further information</heading>
- <para>This test document is written with the purpose of testing the output QDoc generates when parsing <teletype type="highlighted">.qdoc</teletype> files. It is fairly simple and makes use of a limited subset of QDoc's command. Those commands are:</para>
- <list type="bullet">
- <item>
- <para>
- <teletype type="highlighted">\page</teletype></para>
- </item>
- <item>
- <para>
- <teletype type="highlighted">\title</teletype></para>
- </item>
- <item>
- <para>
- <teletype type="highlighted">\brief</teletype></para>
- </item>
- <item>
- <para>
- <teletype type="highlighted">\e</teletype> (for emphasizing &quot;QDoc comments&quot;)</para>
- </item>
- <item>
- <para>
- <teletype type="highlighted">\c</teletype> (for multiple monospace-formatted entries)</para>
- </item>
- <item>
- <para>
- <teletype type="highlighted">\section1</teletype></para>
- </item>
- <item>
- <para>
- <teletype type="highlighted">\list</teletype></para>
- </item>
- <item>
- <para>
- <teletype type="highlighted">\li</teletype></para>
- </item>
- <item>
- <para>
- <teletype type="highlighted">\endlist</teletype></para>
- </item>
- </list>
- </section>
- <section id="linking">
- <heading level="1">Linking</heading>
- <para>There are multiple ways to create hyperlinks to other topics:</para>
- <list type="bullet">
- <item>
- <para>
- <link raw="Testing QDoc's link command" href="qdoctests-qdocfileoutput-linking.html" type="page" page="Testing QDoc's link command">Linking to a page title</link></para>
- </item>
- <item>
- <para>
- <link raw="Link targets" href="qdoctests-qdocfileoutput-linking.html#link-targets" type="page" page="Testing QDoc's link command">Linking to a section title</link></para>
- </item>
- <item>
- <para>
- <link raw="link-test-target" href="qdoctests-qdocfileoutput-linking.html#link-test-target" type="page" page="Testing QDoc's link command">Linking using a \target string</link></para>
- </item>
- <item>
- <para>
- <link raw="QDoc Linking Test" href="qdoctests-qdocfileoutput-linking.html" type="page" page="Testing QDoc's link command">Linking using a \keyword string</link></para>
- </item>
- </list>
- </section>
- </description>
- </page>
- </document>
-</WebXML>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/html/test-componentset-example.webxml b/tests/auto/qdoc/generatedoutput/expected_output/html/test-componentset-example.webxml
deleted file mode 100644
index a5f3a2577..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/html/test-componentset-example.webxml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<WebXML>
- <document>
- <page name="componentset" href="test-componentset-example.html" status="active" location="examples.qdoc" documented="true" subtype="example" title="QML Documentation Example" fulltitle="QML Documentation Example" subtitle="" module="Test" brief="Example for documenting QML types">
- <contents name="qml-class" title="QML Class" level="1"/>
- <contents name="properties-signals-handlers-and-methods" title="Properties, Signals, Handlers, and Methods" level="1"/>
- <contents name="internal-documentation" title="Internal Documentation" level="2"/>
- <contents name="qml-types-with-c-implementation" title="QML Types with C++ Implementation" level="1"/>
- <description>
- <brief>Example for documenting QML types.</brief>
- <para>This example demonstrates one of the ways to document QML types. It also generates a warning about a missing example image, on purpose.</para>
- <para>In particular, there are sample types that are documented with QDoc commands comments. There are documentation comments for the QML types and their public interfaces. The types are grouped into a module, the <link raw="UI Components" href="uicomponents-qmlmodule.html" type="">UI Components</link> module.</para>
- <para>The uicomponents.qdoc file generates the overview page for the <link raw="UI Components" href="uicomponents-qmlmodule.html" type="">UI Components</link> module page.</para>
- <para>The generated documentation is available in the <link raw="UI Components" href="uicomponents-qmlmodule.html" type="">UI Components</link> module.</para>
- <section id="qml-class">
- <heading level="1">QML Class</heading>
- <para>The QML types use the \qmltype to document the type. In addition, they have the \inmodule command in order for QDoc to associate them to the <teletype type="highlighted">UIComponents</teletype> module.</para>
- <para>QDoc uses the \brief command to place a basic description when listing the types.</para>
- </section>
- <section id="properties-signals-handlers-and-methods">
- <heading level="1">Properties, Signals, Handlers, and Methods</heading>
- <para>The types have their properties, signals, handlers, and methods defined in their respective QML files. QDoc associates the properties and methods to the types, therefore, you only need to place the documentation above the property, method, or signal.</para>
- <para>To document the type of a <italic>property alias</italic>, you must use the \qmlproperty command to specify the data type.</para>
- <code>\qmlproperty int anAliasedProperty
-An aliased property of type int.</code>
- </section>
- <section id="internal-documentation">
- <heading level="2">Internal Documentation</heading>
- <para>You may declare that a documentation is for internal use by placing the \internal command after the beginning QDoc comment <teletype type="highlighted">/*</teletype>. QDoc will prevent the internal documentation from appearing in the public API.</para>
- <para>If you wish to omit certain parts of the documentation, you may use the \omit and \endomit command.</para>
- </section>
- <section id="qml-types-with-c-implementation">
- <heading level="1">QML Types with C++ Implementation</heading>
- <para>This example only demonstrates the documentation for types in QML files, but the regular QML commands may be placed inside C++ classes to define the public API of the QML type.</para>
- </section>
- <para>Files:</para>
- <list type="bullet">
- <item>
- <para>
- <link raw="componentset/ProgressBar.qml" href="test-componentset-progressbar-qml.html" type="page" page="ProgressBar.qml Example File">componentset/ProgressBar.qml</link>
- </para>
- </item>
- <item>
- <para>
- <link raw="componentset/Switch.qml" href="test-componentset-switch-qml.html" type="page" page="Switch.qml Example File">componentset/Switch.qml</link>
- </para>
- </item>
- <item>
- <para>
- <link raw="componentset/TabWidget.qml" href="test-componentset-tabwidget-qml.html" type="page" page="TabWidget.qml Example File">componentset/TabWidget.qml</link>
- </para>
- </item>
- <item>
- <para>
- <link raw="componentset/componentset.pro" href="test-componentset-componentset-pro.html" type="page" page="componentset.pro Example File">componentset/componentset.pro</link>
- </para>
- </item>
- </list>
- </description>
- </page>
- </document>
-</WebXML>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/html/testqdoc-test.webxml b/tests/auto/qdoc/generatedoutput/expected_output/html/testqdoc-test.webxml
deleted file mode 100644
index ebe8189c0..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/html/testqdoc-test.webxml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<WebXML>
- <document>
- <class name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" documented="true" module="TestCPP" brief="A class in a namespace">
- <description>
- <brief>A class in a namespace.</brief>
- </description>
- <function name="QDOCTEST_MACRO2" href="testqdoc-test.html#QDOCTEST_MACRO2" status="active" access="public" documented="true" related="true" since="Test 1.1" meta="macrowithparams" virtual="non" const="false" static="false" final="false" override="false" type="" brief="A macro with argument x" signature="QDOCTEST_MACRO2( x)">
- <parameter type="" name="x" default=""/>
- <description>
- <brief>A macro with argument <argument>x</argument>.</brief>
- </description>
- </function>
- <function name="anotherObsoleteMember" fullname="TestQDoc::Test::anotherObsoleteMember" href="testqdoc-test-obsolete.html#anotherObsoleteMember" status="obsolete" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void anotherObsoleteMember()">
- <description>
- <para>Use <link raw="obsoleteMember()" href="testqdoc-test.html#obsoleteMember" type="function">obsoleteMember()</link> instead.</para>
- </description>
- </function>
- <function name="deprecatedMember" fullname="TestQDoc::Test::deprecatedMember" href="testqdoc-test-obsolete.html#deprecatedMember" status="obsolete" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void deprecatedMember()">
- <description>
- <para>Use <link raw="someFunction()" href="testqdoc-test.html#someFunction" type="function">someFunction()</link> instead.</para>
- </description>
- </function>
- <function name="func" fullname="TestQDoc::Test::func" href="testqdoc-test.html#func" status="internal" access="private" location="testcpp.h" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void func(bool )">
- <parameter type="bool" name="" default=""/>
- <description/>
- </function>
- <function name="funcPtr" fullname="TestQDoc::Test::funcPtr" href="testqdoc-test.html#funcPtr" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void (*)(bool)" signature="void (*)(bool) funcPtr(bool b, const char *s)">
- <parameter type="bool" name="b" default=""/>
- <parameter type="const char *" name="s" default=""/>
- <description>
- <para>Returns a pointer to a function that takes a boolean. Uses <argument>b</argument> and <argument>s</argument>.</para>
- </description>
- </function>
- <function name="inlineFunction" fullname="TestQDoc::Test::inlineFunction" href="testqdoc-test.html#inlineFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" brief="An inline function, documented using the \fn QDoc command" signature="void inlineFunction()">
- <description>
- <brief>An inline function, documented using the \fn QDoc command.</brief>
- </description>
- </function>
- <function name="obsoleteMember" fullname="TestQDoc::Test::obsoleteMember" href="testqdoc-test-obsolete.html#obsoleteMember" status="obsolete" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void obsoleteMember()">
- <description>
- <para>Use <link raw="someFunction()" href="testqdoc-test.html#someFunction" type="function">someFunction()</link> instead.</para>
- </description>
- </function>
- <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload" status="active" access="protected" location="testcpp.h" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void overload()">
- <description/>
- </function>
- <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload-1" status="active" access="protected" location="testcpp.h" documented="true" since="Test 1.2" meta="plain" virtual="non" const="false" static="false" final="false" override="false" overload="true" overload-number="1" type="void" signature="void overload(bool b)">
- <parameter type="bool" name="b" default=""/>
- <description/>
- </function>
- <function name="someFunction" fullname="TestQDoc::Test::someFunction" href="testqdoc-test.html#someFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="int" signature="int someFunction(int v)">
- <parameter type="int" name="v" default="0"/>
- <description>
- <para>Function that takes a parameter <argument>v</argument>. Also returns the value of <argument>v</argument>.</para>
- </description>
- </function>
- <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void someFunctionDefaultArg(int i, bool b)">
- <parameter type="int" name="i" default=""/>
- <parameter type="bool" name="b" default="false"/>
- <description>
- <para>Function that takes a parameter <argument>i</argument> and <argument>b</argument>.</para>
- </description>
- </function>
- <function name="virtualFun" fullname="TestQDoc::Test::virtualFun" href="testqdoc-test.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" const="false" static="false" final="false" override="false" type="void" signature="void virtualFun()">
- <description>
- <para>Function that must be reimplemented.</para>
- </description>
- </function>
- <typedef name="SomeType" fullname="TestQDoc::Test::SomeType" href="testqdoc-test.html#SomeType-typedef" status="active" access="public" location="testcpp.h" documented="true">
- <description>
- <brief>A typedef.</brief>
- </description>
- </typedef>
- </class>
- </document>
-</WebXML>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/html/testqdoc-testderived.webxml b/tests/auto/qdoc/generatedoutput/expected_output/html/testqdoc-testderived.webxml
deleted file mode 100644
index 7711b09df..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/html/testqdoc-testderived.webxml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<WebXML>
- <document>
- <class name="TestDerived" fullname="TestQDoc::TestDerived" href="testqdoc-testderived.html" status="active" access="public" location="testcpp.h" documented="true" bases="TestQDoc::Test" module="TestCPP" brief="A derived class in a namespace">
- <description>
- <brief>A derived class in a namespace.</brief>
- </description>
- <function name="virtualFun" fullname="TestQDoc::TestDerived::virtualFun" href="testqdoc-testderived.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" const="false" static="false" final="false" override="true" type="void" signature="void virtualFun() override">
- <description/>
- </function>
- <alias name="DerivedType" fullname="TestQDoc::TestDerived::DerivedType" href="testqdoc-testderived.html#DerivedType-alias" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="Test::SomeType">
- <description>
- <para>An aliased typedef.</para>
- </description>
- </alias>
- <alias name="NotTypedef" fullname="TestQDoc::TestDerived::NotTypedef" href="testqdoc-testderived.html#NotTypedef-alias" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="int">
- <description>
- <para>I'm an alias, not a typedef.</para>
- </description>
- </alias>
- </class>
- </document>
-</WebXML>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/html/testqdoc.webxml b/tests/auto/qdoc/generatedoutput/expected_output/html/testqdoc.webxml
deleted file mode 100644
index a8cbb951a..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/html/testqdoc.webxml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<WebXML>
- <document>
- <namespace name="TestQDoc" href="testqdoc.html" status="active" access="public" location="testcpp.h" documented="true" module="TestCPP" brief="A namespace">
- <contents name="usage" title="Usage" level="1"/>
- <description>
- <brief>A namespace.</brief>
- <section id="usage">
- <heading level="1">Usage</heading>
- <para>This namespace is for testing QDoc output.</para>
- </section>
- </description>
- <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="true" meta="macrowithoutparams" virtual="non" const="false" static="false" final="false" override="false" type="" signature="QDOCTEST_MACRO">
- <description />
- </function>
- <class name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" documented="true" module="TestCPP" brief="A class in a namespace">
- <description>
- <brief>A class in a namespace.</brief>
- </description>
- <function name="QDOCTEST_MACRO2" href="testqdoc-test.html#QDOCTEST_MACRO2" status="active" access="public" documented="true" related="true" since="Test 1.1" meta="macrowithparams" virtual="non" const="false" static="false" final="false" override="false" type="" brief="A macro with argument x" signature="QDOCTEST_MACRO2( x)">
- <parameter type="" name="x" default=""/>
- <description>
- <brief>A macro with argument <argument>x</argument>.</brief>
- </description>
- </function>
- <function name="anotherObsoleteMember" fullname="TestQDoc::Test::anotherObsoleteMember" href="testqdoc-test-obsolete.html#anotherObsoleteMember" status="obsolete" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void anotherObsoleteMember()">
- <description>
- <para>Use <link raw="obsoleteMember()" href="testqdoc-test-obsolete.html#obsoleteMember" type="function">obsoleteMember()</link> instead.</para>
- </description>
- </function>
- <function name="deprecatedMember" fullname="TestQDoc::Test::deprecatedMember" href="testqdoc-test-obsolete.html#deprecatedMember" status="obsolete" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void deprecatedMember()">
- <description>
- <para>Use <link raw="someFunction()" href="testqdoc-test.html#someFunction" type="function">someFunction()</link> instead.</para>
- </description>
- </function>
- <function name="inlineFunction" fullname="TestQDoc::Test::inlineFunction" href="testqdoc-test.html#inlineFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" brief="An inline function, documented using the \fn QDoc command" signature="void inlineFunction()">
- <description>
- <brief>An inline function, documented using the \fn QDoc command.</brief>
- </description>
- </function>
- <function name="obsoleteMember" fullname="TestQDoc::Test::obsoleteMember" href="testqdoc-test-obsolete.html#obsoleteMember" status="obsolete" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void obsoleteMember()">
- <description>
- <para>Use <link raw="someFunction()" href="testqdoc-test.html#someFunction" type="function">someFunction()</link> instead.</para>
- </description>
- </function>
- <function name="someFunction" fullname="TestQDoc::Test::someFunction" href="testqdoc-test.html#someFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="int" signature="int someFunction(int v)">
- <parameter type="int" name="v" default=""/>
- <description>
- <para>Function that takes a parameter <argument>v</argument>. Also returns the value of <argument>v</argument>.</para>
- </description>
- </function>
- <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void someFunctionDefaultArg(int i, bool b)">
- <parameter type="int" name="i" default=""/>
- <parameter type="bool" name="b" default="false"/>
- <description>
- <para>Function that takes a parameter <argument>i</argument> and <argument>b</argument>.</para>
- </description>
- </function>
- <function name="virtualFun" fullname="TestQDoc::Test::virtualFun" href="testqdoc-test.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" const="false" static="false" final="false" override="false" type="void" signature="void virtualFun()">
- <description>
- <para>Function that must be reimplemented.</para>
- </description>
- </function>
- </class>
- <class name="TestDerived" fullname="TestQDoc::TestDerived" href="testqdoc-testderived.html" status="active" access="public" location="testcpp.h" documented="true" bases="TestQDoc::Test" module="TestCPP" brief="A derived class in a namespace">
- <description>
- <brief>A derived class in a namespace.</brief>
- </description>
- <function name="virtualFun" fullname="TestQDoc::TestDerived::virtualFun" href="testqdoc-testderived.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" const="false" static="false" final="false" override="true" type="void" signature="void virtualFun() override">
- <description />
- </function>
- </class>
- </namespace>
- </document>
-</WebXML>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/ignoresince/testqdoc-test.html b/tests/auto/qdoc/generatedoutput/expected_output/ignoresince/testqdoc-test.html
deleted file mode 100644
index f4c17f10d..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/ignoresince/testqdoc-test.html
+++ /dev/null
@@ -1,112 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>Test Class | TestCPP</title>
-</head>
-<body>
-<li>Test</li>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#public-types">Public Types</a></li>
-<li class="level1"><a href="#public-functions">Public Functions</a></li>
-<li class="level1"><a href="#protected-functions">Protected Functions</a></li>
-<li class="level1"><a href="#macros">Macros</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">Test Class</h1>
-<span class="small-subtitle">class <a href="testqdoc.html">TestQDoc</a>::Test</span>
-<!-- $$$Test-brief -->
-<p>A class in a namespace. <a href="#details">More...</a></p>
-<!-- @@@Test -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;Test&gt;</span>
-</td></tr><tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 COMPONENT QDocTest) <br/>
-target_link_libraries(mytarget PUBLIC Qt::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"> Inherited By:</td><td class="memItemRight bottomAlign"> <p><a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></p>
-</td></tr></table></div><ul>
-<li><a href="testqdoc-test-members.html">List of all members, including inherited members</a></li>
-<li><a href="testqdoc-test-obsolete.html">Obsolete members</a></li>
-</ul>
-<a name="public-types"></a>
-<h2 id="public-types">Public Types</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> typedef </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#SomeType-typedef">SomeType</a></b></td></tr>
-</table></div>
-<a name="public-functions"></a>
-<h2 id="public-functions">Public Functions</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> void (*)(bool) </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#funcPtr">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">inlineFunction</a></b>()</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> int </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#someFunction">someFunction</a></b>(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">someFunctionDefaultArg</a></b>(int <i>i</i>, bool <i>b</i> = false)</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> virtual void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#virtualFun">virtualFun</a></b>()</td></tr>
-</table></div>
-<a name="protected-functions"></a>
-<h2 id="protected-functions">Protected Functions</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#overload">overload</a></b>()</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#overload-1">overload</a></b>(bool <i>b</i>)</td></tr>
-</table></div>
-<a name="macros"></a>
-<h2 id="macros">Macros</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#QDOCTEST_MACRO2">QDOCTEST_MACRO2</a></b>(<i>x</i>)</td></tr>
-</table></div>
-<a name="details"></a>
-<!-- $$$Test-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-</div>
-<!-- @@@Test -->
-<div class="types">
-<h2>Member Type Documentation</h2>
-<!-- $$$SomeType -->
-<h3 class="fn" id="SomeType-typedef"><a name="SomeType-typedef"></a>typedef Test::<span class="name">SomeType</span></h3>
-<p>A typedef.</p>
-<!-- @@@SomeType -->
-</div>
-<div class="func">
-<h2>Member Function Documentation</h2>
-<!-- $$$ -->
-<div class="fngroup">
-<h3 class="fn fngroupitem" id="overload"><a name="overload"></a><code>[protected] </code><span class="type">void</span> Test::<span class="name">overload</span>()</h3><h3 class="fn fngroupitem" id="overload-1"><a name="overload-1"></a><code>[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>b</i>.</p>
-<!-- @@@ -->
-<!-- $$$funcPtr[overload1]$$$funcPtrboolconstchar* -->
-<h3 class="fn" id="funcPtr"><a name="funcPtr"></a><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>b</i> and <i>s</i>.</p>
-<!-- @@@funcPtr -->
-<!-- $$$inlineFunction[overload1]$$$inlineFunction -->
-<h3 class="fn" id="inlineFunction"><a name="inlineFunction"></a><span class="type">void</span> Test::<span class="name">inlineFunction</span>()</h3>
-<p>An inline function, documented using the \fn QDoc command.</p>
-<!-- @@@inlineFunction -->
-<!-- $$$someFunction[overload1]$$$someFunctionint -->
-<h3 class="fn" id="someFunction"><a name="someFunction"></a><code>[since Test 1.0] </code><span class="type">int</span> Test::<span class="name">someFunction</span>(<span class="type">int</span> <i>v</i> = 0)</h3>
-<p>Function that takes a parameter <i>v</i>. Also returns the value of <i>v</i>.</p>
-<p>This function was introduced in Test 1.0.</p>
-<!-- @@@someFunction -->
-<!-- $$$someFunctionDefaultArg[overload1]$$$someFunctionDefaultArgintbool -->
-<h3 class="fn" id="someFunctionDefaultArg"><a name="someFunctionDefaultArg"></a><code>[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)</h3>
-<p>Function that takes a parameter <i>i</i> and <i>b</i>.</p>
-<p>This function was introduced in Qt 2.0.</p>
-<!-- @@@someFunctionDefaultArg -->
-<!-- $$$virtualFun[overload1]$$$virtualFun -->
-<h3 class="fn" id="virtualFun"><a name="virtualFun"></a><code>[virtual] </code><span class="type">void</span> Test::<span class="name">virtualFun</span>()</h3>
-<p>Function that must be reimplemented.</p>
-<!-- @@@virtualFun -->
-</div>
-<div class="macros">
-<h2>Macro Documentation</h2>
-<!-- $$$QDOCTEST_MACRO2[overload1]$$$QDOCTEST_MACRO2 -->
-<h3 class="fn" id="QDOCTEST_MACRO2"><a name="QDOCTEST_MACRO2"></a><code>[since Test 1.1] </code><span class="name">QDOCTEST_MACRO2</span>(<i>x</i>)</h3>
-<p>A macro with argument <i>x</i>.</p>
-<p>This function was introduced in Test 1.1.</p>
-<!-- @@@QDOCTEST_MACRO2 -->
-</div>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/ignoresince/testqdoc.html b/tests/auto/qdoc/generatedoutput/expected_output/ignoresince/testqdoc.html
deleted file mode 100644
index b57a6b794..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/ignoresince/testqdoc.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>TestQDoc Namespace | TestCPP</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#classes">Classes</a></li>
-<li class="level1"><a href="#macros">Macros</a></li>
-<li class="level1"><a href="#details">Detailed Description</a></li>
-<li class="level2"><a href="#usage">Usage</a></li>
-</ul>
-</div>
-<div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">TestQDoc Namespace</h1>
-<!-- $$$TestQDoc-brief -->
-<p>A namespace. <a href="#details">More...</a></p>
-<!-- @@@TestQDoc -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;TestCPP&gt;</span>
-</td></tr><tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 COMPONENT QDocTest) <br/>
-target_link_libraries(mytarget PUBLIC Qt::QDocTest)</td></tr><tr><td class="memItemLeft rightAlign topAlign"> qmake:</td><td class="memItemRight bottomAlign"> QT += testcpp</td></tr></table></div><ul>
-</ul>
-<a name="classes"></a>
-<h2 id="classes">Classes</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> class </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html">Test</a></b></td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> class </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html">TestDerived</a></b></td></tr>
-</table></div>
-<a name="macros"></a>
-<h2 id="macros">Macros</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc.html#QDOCTEST_MACRO">QDOCTEST_MACRO</a></b></td></tr>
-</table></div>
-<a name="details"></a>
-<!-- $$$TestQDoc-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-<a name="usage"></a>
-<h3 id="usage">Usage</h3>
-<p>This namespace is for testing QDoc output.</p>
-</div>
-<!-- @@@TestQDoc -->
-<div class="classes">
-<h2>Classes</h2>
-<h3> class <a href="testqdoc-test.html">Test</a></h3><!-- $$$Test-brief -->
-<p>A class in a namespace. <a href="testqdoc-test.html#details">More...</a></p>
-<!-- @@@Test -->
-<h3> class <a href="testqdoc-testderived.html">TestDerived</a></h3><!-- $$$TestDerived-brief -->
-<p>A derived class in a namespace. <a href="testqdoc-testderived.html#details">More...</a></p>
-<!-- @@@TestDerived -->
-</div>
-<div class="macros">
-<h2>Macro Documentation</h2>
-<!-- $$$QDOCTEST_MACRO[overload1]$$$QDOCTEST_MACRO -->
-<h3 class="fn" id="QDOCTEST_MACRO"><a name="QDOCTEST_MACRO"></a><span class="name">QDOCTEST_MACRO</span></h3>
-<!-- @@@QDOCTEST_MACRO -->
-</div>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/index.html b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/index.html
deleted file mode 100644
index fd9fdd50a..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- includefromparent.qdoc -->
- <title>doc index | Test</title>
-</head>
-<body>
-<h1 class="title">doc index</h1>
-<span class="subtitle"></span>
-<!-- $$$index.html-description -->
-<div class="descr"> <a name="details"></a>
-<a name="c-classes"></a>
-<h2 id="c-classes">C++ Classes</h2>
-<div class="table"><table class="annotated">
-<tr class="odd topAlign"><td class="tblName"><p><a href="testqdoc-test.html">TestQDoc::Test</a></p></td><td class="tblDescr"><p>A class in a namespace</p></td></tr>
-<tr class="even topAlign"><td class="tblName"><p><a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></p></td><td class="tblDescr"><p>A derived class in a namespace</p></td></tr>
-</table></div>
-<a name="qml-types"></a>
-<h2 id="qml-types">QML Types</h2>
-<div class="table"><table class="annotated">
-<tr class="odd topAlign"><td class="tblName"><p><a href="qml-qdoc-test-abstractparent.html">AbstractParent</a></p></td><td class="tblDescr"><p>Abstract base QML type</p></td></tr>
-<tr class="even topAlign"><td class="tblName"><p><a href="qml-qdoc-test-child.html">Child</a></p></td><td class="tblDescr"><p>A Child inheriting its parent</p></td></tr>
-<tr class="odd topAlign"><td class="tblName"><p><a href="qml-int.html">int</a></p></td><td class="tblDescr"><p>An integer basic type</p></td></tr>
-</table></div>
-<p>Test include file that is part of the sourcedirs.</p>
-</div>
-<!-- @@@index.html -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qdoc-test-qmlmodule.html b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qdoc-test-qmlmodule.html
deleted file mode 100644
index 6a513e987..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qdoc-test-qmlmodule.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- type.cpp -->
- <title>Test</title>
-</head>
-<body>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<span class="subtitle"></span>
-<!-- $$$QDoc.Test-description -->
-<div class="descr"> <a name="details"></a>
-</div>
-<!-- @@@QDoc.Test -->
-<div class="table"><table class="annotated">
-<tr class="odd topAlign"><td class="tblName"><p><a href="qml-qdoc-test-abstractparent.html">AbstractParent</a></p></td><td class="tblDescr"><p>Abstract base QML type</p></td></tr>
-<tr class="even topAlign"><td class="tblName"><p><a href="qml-qdoc-test-child.html">Child</a></p></td><td class="tblDescr"><p>A Child inheriting its parent</p></td></tr>
-<tr class="odd topAlign"><td class="tblName"><p><a href="qml-qdoc-test-doctest.html">DocTest</a></p></td><td class="tblDescr"><p>Represents a doc test case</p></td></tr>
-<tr class="even topAlign"><td class="tblName"><p><a href="qml-qdoc-test-type.html">Type</a></p></td><td class="tblDescr"><p>A QML type documented in a .cpp file</p></td></tr>
-<tr class="odd topAlign"><td class="tblName"><p><a href="qml-int.html">int</a></p></td><td class="tblDescr"><p>An integer basic type</p></td></tr>
-</table></div>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-int.html b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-int.html
deleted file mode 100644
index 651f840cb..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-int.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- parent.qdoc -->
- <title>int QML Basic Type | Test</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-</ul>
-</div>
-<div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">int QML Basic Type</h1>
-<span class="subtitle"></span>
-<!-- $$$int-description -->
-<div class="descr"> <a name="details"></a>
-</div>
-<!-- @@@int -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent-members.html b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent-members.html
deleted file mode 100644
index e8ecfbb69..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent-members.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- includefromparent.qdoc -->
- <title>List of All Members for AbstractParent | Test</title>
-</head>
-<body>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">List of All Members for AbstractParent</h1>
-<p>This is the complete list of members for <a href="qml-qdoc-test-abstractparent.html">AbstractParent</a>, including inherited members.</p>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-abstractparent.html#children-prop">children</a></b></b> : list&lt;Child&gt; [default]</li>
-<li class="fn">void <b><b><a href="qml-qdoc-test-abstractparent.html#rear-method">rear</a></b></b>(Child <i>child</i>)</li>
-</ul>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent.html b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent.html
deleted file mode 100644
index 1f49ca4cc..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- includefromparent.qdoc -->
- <title>AbstractParent QML Type | Test</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#properties">Properties</a></li>
-<li class="level1"><a href="#methods">Methods</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">AbstractParent QML Type</h1>
-<span class="subtitle"></span>
-<!-- $$$AbstractParent-brief -->
-<p>Abstract base QML type. <a href="#details">More...</a></p>
-<!-- @@@AbstractParent -->
-<div class="table"><table class="alignedsummary">
-<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"> Inherited By:</td><td class="memItemRight bottomAlign"> <p><a href="qml-qdoc-test-child.html">Child</a></p>
-</td></tr></table></div><ul>
-<li><a href="qml-qdoc-test-abstractparent-members.html">List of all members, including inherited members</a></li>
-</ul>
-<a name="properties"></a>
-<h2 id="properties">Properties</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-abstractparent.html#children-prop">children</a></b></b> : list&lt;Child&gt;</li>
-</ul>
-<a name="methods"></a>
-<h2 id="methods">Methods</h2>
-<ul>
-<li class="fn">void <b><b><a href="qml-qdoc-test-abstractparent.html#rear-method">rear</a></b></b>(Child <i>child</i>)</li>
-</ul>
-<!-- $$$AbstractParent-description -->
-<a name="details"></a>
-<h2 id="details">Detailed Description</h2>
-<p>Test include file that is part of the sourcedirs.</p>
-<!-- @@@AbstractParent -->
-<h2>Property Documentation</h2>
-<!-- $$$children -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="children-prop">
-<td class="tblQmlPropNode"><p>
-<a name="children-prop"></a><span class="qmlextra">[default] </span><span class="name">children</span> : <span class="type">list</span>&lt;<span class="type"><a href="qml-qdoc-test-child.html">Child</a></span>&gt;</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Children of the type.</p>
-<p>Test include file that is part of the sourcedirs.</p>
-</div></div><!-- @@@children -->
-<br/>
-<h2>Method Documentation</h2>
-<!-- $$$rear[overload1]$$$rearChild -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="rear-method">
-<td class="tblQmlFuncNode"><p>
-<a name="rear-method"></a><span class="type">void</span> <span class="name">rear</span>(<span class="type"><a href="qml-qdoc-test-child.html">Child</a></span> <i>child</i>)</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Do some abstract parenting on <i>child</i>.</p>
-<p>Test include file that is part of the sourcedirs.</p>
-</div></div><!-- @@@rear -->
-<br/>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-child-members.html b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-child-members.html
deleted file mode 100644
index cedbad6bc..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-child-members.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- parent.qdoc -->
- <title>List of All Members for Child | Test</title>
-</head>
-<body>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">List of All Members for Child</h1>
-<p>This is the complete list of members for <a href="qml-qdoc-test-child.html">Child</a>, including inherited members.</p>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-child.html#children-prop">children</a></b></b> : list&lt;Child&gt; [default]</li>
-<li class="fn">void <b><b><a href="qml-qdoc-test-child.html#rear-method-1">rear</a></b></b>(<i>child</i>)</li>
-<li class="fn">void <b><b><a href="qml-qdoc-test-child.html#rear-method">rear</a></b></b>(<i>child</i>)</li>
-</ul>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-child.html b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-child.html
deleted file mode 100644
index b1775faa3..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-child.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- parent.qdoc -->
- <title>Child QML Type | Test</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#properties">Properties</a></li>
-<li class="level1"><a href="#methods">Methods</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">Child QML Type</h1>
-<span class="subtitle"></span>
-<!-- $$$Child-brief -->
-<p>A Child inheriting its parent. <a href="#details">More...</a></p>
-<!-- @@@Child -->
-<div class="table"><table class="alignedsummary">
-<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"> Inherits:</td><td class="memItemRight bottomAlign"> <p><a href="qml-qdoc-test-abstractparent.html">AbstractParent</a></p>
-</td></tr></table></div><ul>
-<li><a href="qml-qdoc-test-child-members.html">List of all members, including inherited members</a></li>
-</ul>
-<a name="properties"></a>
-<h2 id="properties">Properties</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-child.html#children-prop">children</a></b></b> : list&lt;Child&gt;</li>
-</ul>
-<a name="methods"></a>
-<h2 id="methods">Methods</h2>
-<ul>
-<li class="fn">void <b><b><a href="qml-qdoc-test-child.html#rear-method-1">rear</a></b></b>(<i>child</i>)</li>
-<li class="fn">void <b><b><a href="qml-qdoc-test-child.html#rear-method">rear</a></b></b>(<i>child</i>)</li>
-</ul>
-<!-- $$$Child-description -->
-<a name="details"></a>
-<h2 id="details">Detailed Description</h2>
-<!-- @@@Child -->
-<h2>Property Documentation</h2>
-<!-- $$$children -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="children-prop">
-<td class="tblQmlPropNode"><p>
-<a name="children-prop"></a><span class="qmldefault">[default] </span><span class="name">children</span> : <span class="type">list</span>&lt;<span class="type"><a href="qml-qdoc-test-child.html">Child</a></span>&gt;</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Children of the type.</p>
-<p>Test include file that is part of the sourcedirs.</p>
-</div></div><!-- @@@children -->
-<br/>
-<h2>Method Documentation</h2>
-<!-- $$$rear$$$rear -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="rear-method-1">
-<td class="tblQmlFuncNode"><p>
-<a name="rear-method-1"></a><span class="type">void</span> <span class="name">rear</span>(<i>child</i>)</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Do some abstract parenting on <i>child</i>.</p>
-</div></div><!-- @@@rear -->
-<br/>
-<!-- $$$rear[overload1]$$$rear -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="rear-method">
-<td class="tblQmlFuncNode"><p>
-<a name="rear-method"></a><span class="type">void</span> <span class="name">rear</span>(<i>child</i>)</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Do some abstract parenting on <i>child</i>.</p>
-<p>Test include file that is part of the sourcedirs.</p>
-</div></div><!-- @@@rear -->
-<br/>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-doctest-members.html b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-doctest-members.html
deleted file mode 100644
index 3048f9701..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-doctest-members.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- DocTest.qml -->
- <title>List of All Members for DocTest | Test</title>
-</head>
-<body>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">List of All Members for DocTest</h1>
-<p>This is the complete list of members for <a href="qml-qdoc-test-doctest.html">DocTest</a>, including inherited members.</p>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-doctest.html#active-prop">active</a></b></b> : bool</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-doctest.html#name-prop">name</a></b></b> : string</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-doctest.html#fail-method">fail</a></b></b>(<i>message</i>)</li>
-</ul>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-doctest.html b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-doctest.html
deleted file mode 100644
index e1475d5fb..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-doctest.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- DocTest.qml -->
- <title>DocTest QML Type | Test</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#properties">Properties</a></li>
-<li class="level1"><a href="#methods">Methods</a></li>
-<li class="level1"><a href="#details">Detailed Description</a></li>
-<li class="level2"><a href="#introduction">Introduction</a></li>
-</ul>
-</div>
-<div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">DocTest QML Type</h1>
-<span class="subtitle"></span>
-<!-- $$$DocTest-brief -->
-<p>Represents a doc test case. <a href="#details">More...</a></p>
-<!-- @@@DocTest -->
-<div class="table"><table class="alignedsummary">
-<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"> QDoc.Test 0.9</td></tr></table></div><ul>
-<li><a href="qml-qdoc-test-doctest-members.html">List of all members, including inherited members</a></li>
-</ul>
-<a name="properties"></a>
-<h2 id="properties">Properties</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-doctest.html#active-prop">active</a></b></b> : bool</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-doctest.html#name-prop">name</a></b></b> : string</li>
-</ul>
-<a name="methods"></a>
-<h2 id="methods">Methods</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-doctest.html#fail-method">fail</a></b></b>(<i>message</i>)</li>
-</ul>
-<!-- $$$DocTest-description -->
-<a name="details"></a>
-<h2 id="details">Detailed Description</h2>
-<a name="introduction"></a>
-<h2 id="introduction">Introduction</h2>
-<p>A documentation test case, itself documented inline in DocTest.qml.</p>
-<!-- @@@DocTest -->
-<h2>Property Documentation</h2>
-<!-- $$$active -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="active-prop">
-<td class="tblQmlPropNode"><p>
-<a name="active-prop"></a><span class="name">active</span> : <span class="type">bool</span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Whether the test is active.</p>
-<p><b>See also </b><a href="qml-qdoc-test-doctest.html#name-prop">name</a>.</p>
-</div></div><!-- @@@active -->
-<br/>
-<!-- $$$name -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="name-prop">
-<td class="tblQmlPropNode"><p>
-<a name="name-prop"></a><span class="name">name</span> : <span class="type">string</span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Name of the test.</p>
-<pre class="qml"><span class="type"><a href="qml-qdoc-test-doctest.html">DocTest</a></span> {
- <span class="name">name</span>: <span class="string">&quot;test&quot;</span>
- <span class="comment">// ...</span>
-}</pre>
-</div></div><!-- @@@name -->
-<br/>
-<h2>Method Documentation</h2>
-<!-- $$$fail[overload1]$$$fail -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="fail-method">
-<td class="tblQmlFuncNode"><p>
-<a name="fail-method"></a><span class="name">fail</span>(<i>message</i> = &quot;oops&quot;)</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Fails the current test case, with the optional <i>message</i>.</p>
-<p>This method was introduced in QDoc.Test 1.0.</p>
-</div></div><!-- @@@fail -->
-<br/>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-type-members.html b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-type-members.html
deleted file mode 100644
index 91cfa8643..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-type-members.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- type.cpp -->
- <title>List of All Members for Type | Test</title>
-</head>
-<body>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">List of All Members for Type</h1>
-<p>This is the complete list of members for <a href="qml-qdoc-test-type.html">Type</a>, including inherited members.</p>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#fifth-prop">fifth</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#fourth-prop">fourth</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#group-prop">group</a></b></b><ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#group.first-prop">group.first</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#group.second-prop">group.second</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#group.third-prop">group.third</a></b></b> : int</li>
-</ul>
-</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#id-prop">id</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#name-prop">name</a></b></b> : string</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#type-attached-prop">type</a></b></b> : enumeration [attached]</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#completed-signal">completed</a></b></b>(<i>status</i>)</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#configured-signal">configured</a></b></b>() [attached]</li>
-<li class="fn">Type <b><b><a href="qml-qdoc-test-type.html#copy-method">copy</a></b></b>(<i>a</i>)</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#disable-method">disable</a></b></b>()</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#enable-method">enable</a></b></b>()</li>
-</ul>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-type.html b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-type.html
deleted file mode 100644
index 166cbee81..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-type.html
+++ /dev/null
@@ -1,185 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- type.cpp -->
- <title>Type QML Type | Test</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#properties">Properties</a></li>
-<li class="level1"><a href="#attached-properties">Attached Properties</a></li>
-<li class="level1"><a href="#signals">Signals</a></li>
-<li class="level1"><a href="#attached-signals">Attached Signals</a></li>
-<li class="level1"><a href="#methods">Methods</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">Type QML Type</h1>
-<span class="subtitle"></span>
-<!-- $$$Type-brief -->
-<p>A QML type documented in a .cpp file. <a href="#details">More...</a></p>
-<!-- @@@Type -->
-<div class="table"><table class="alignedsummary">
-<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"> Instantiates:</td><td class="memItemRight bottomAlign"> <a href="qml-qdoc-test-type.html"><a href="testqdoc-test.html">Test</a></td></tr></table></div><ul>
-<li><a href="qml-qdoc-test-type-members.html">List of all members, including inherited members</a></li>
-</ul>
-<a name="properties"></a>
-<h2 id="properties">Properties</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#fifth-prop">fifth</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#fourth-prop">fourth</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#group-prop">group</a></b></b><ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#group.first-prop">group.first</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#group.second-prop">group.second</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#group.third-prop">group.third</a></b></b> : int</li>
-</ul>
-</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#id-prop">id</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#name-prop">name</a></b></b> : string</li>
-</ul>
-<a name="attached-properties"></a>
-<h2 id="attached-properties">Attached Properties</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#type-attached-prop">type</a></b></b> : enumeration</li>
-</ul>
-<a name="signals"></a>
-<h2 id="signals">Signals</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#completed-signal">completed</a></b></b>(<i>status</i>)</li>
-</ul>
-<a name="attached-signals"></a>
-<h2 id="attached-signals">Attached Signals</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#configured-signal">configured</a></b></b>()</li>
-</ul>
-<a name="methods"></a>
-<h2 id="methods">Methods</h2>
-<ul>
-<li class="fn">Type <b><b><a href="qml-qdoc-test-type.html#copy-method">copy</a></b></b>(<i>a</i>)</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#disable-method">disable</a></b></b>()</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#enable-method">enable</a></b></b>()</li>
-</ul>
-<!-- $$$Type-description -->
-<a name="details"></a>
-<h2 id="details">Detailed Description</h2>
-<!-- @@@Type -->
-<h2>Property Documentation</h2>
-<!-- $$$ -->
-<div class="qmlitem"><div class="fngroup">
-<div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="fifth-prop">
-<td class="tblQmlPropNode"><p>
-<a name="fifth-prop"></a><span class="name">fifth</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-<tr valign="top" class="odd" id="fourth-prop">
-<td class="tblQmlPropNode"><p>
-<a name="fourth-prop"></a><span class="name">fourth</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-</table></div></div>
-</div><div class="qmldoc"><p>A group of properties sharing a documentation comment.</p>
-</div></div><!-- @@@ -->
-<br/>
-<!-- $$$group -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="even" id="group-prop"><th class="centerAlign"><p><a name="group-prop"></a><b>group group</b></p></th></tr>
-<tr valign="top" class="odd" id="group.first-prop">
-<td class="tblQmlPropNode"><p>
-<a name="group.first-prop"></a><span class="name">group.first</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-<tr valign="top" class="odd" id="group.second-prop">
-<td class="tblQmlPropNode"><p>
-<a name="group.second-prop"></a><span class="name">group.second</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-<tr valign="top" class="odd" id="group.third-prop">
-<td class="tblQmlPropNode"><p>
-<a name="group.third-prop"></a><span class="name">group.third</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>A property group.</p>
-</div></div><!-- @@@group -->
-<br/>
-<!-- $$$id -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="id-prop">
-<td class="tblQmlPropNode"><p>
-<a name="id-prop"></a><span class="qmlreadonly">[read-only] </span><span class="name">id</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>A read-only property.</p>
-</div></div><!-- @@@id -->
-<br/>
-<!-- $$$name -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="name-prop">
-<td class="tblQmlPropNode"><p>
-<a name="name-prop"></a><span class="name">name</span> : <span class="type">string</span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Name of the Test.</p>
-</div></div><!-- @@@name -->
-<br/>
-<h2>Attached Property Documentation</h2>
-<!-- $$$type -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="type-attached-prop">
-<td class="tblQmlPropNode"><p>
-<a name="type-attached-prop"></a><span class="name">Type.type</span> : <span class="type">enumeration</span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><div class="table"><table class="valuelist"><tr valign="top" class="odd"><th class="tblConst">Constant</th><th class="tbldscr">Description</th></tr>
-<tr><td class="topAlign"><code>Type.NoType</code></td><td class="topAlign">Nothing</td></tr>
-<tr><td class="topAlign"><code>Type.SomeType</code></td><td class="topAlign">Something</td></tr>
-</table></div>
-</div></div><!-- @@@type -->
-<br/>
-<h2>Signal Documentation</h2>
-<!-- $$$completed[overload1]$$$completed -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="completed-signal">
-<td class="tblQmlFuncNode"><p>
-<a name="completed-signal"></a><span class="name">completed</span>(<i>status</i>)</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>This signal is emitted when the operation completed with <i>status</i>.</p>
-</div></div><!-- @@@completed -->
-<br/>
-<h2>Attached Signal Documentation</h2>
-<!-- $$$configured[overload1]$$$configured -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="configured-signal">
-<td class="tblQmlFuncNode"><p>
-<a name="configured-signal"></a><span class="name">configured</span>()</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>This attached signal is emitted when the type was configured.</p>
-</div></div><!-- @@@configured -->
-<br/>
-<h2>Method Documentation</h2>
-<!-- $$$ -->
-<div class="qmlitem"><div class="fngroup">
-<div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="disable-method">
-<td class="tblQmlFuncNode"><p>
-<a name="disable-method"></a><span class="name">disable</span>()</p></td></tr>
-<tr valign="top" class="odd" id="enable-method">
-<td class="tblQmlFuncNode"><p>
-<a name="enable-method"></a><span class="name">enable</span>()</p></td></tr>
-</table></div></div>
-</div><div class="qmldoc"><p>Enables or disables this type.</p>
-</div></div><!-- @@@ -->
-<br/>
-<!-- $$$copy[overload1]$$$copy -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="copy-method">
-<td class="tblQmlFuncNode"><p>
-<a name="copy-method"></a><span class="type"><a href="qml-qdoc-test-type.html">Type</a></span> <span class="name">copy</span>(<i>a</i>)</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Returns another Type based on <i>a</i>.</p>
-</div></div><!-- @@@copy -->
-<br/>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/test.index b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/test.index
deleted file mode 100644
index f45b33114..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/test.index
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE QDOCINDEX>
-<INDEX url="" title="A test project for QDoc build artifacts" version="" project="Test">
- <namespace name="" status="active" access="public" module="test">
- <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="true" meta="macrowithoutparams" virtual="non" const="false" static="false" final="false" override="false" type="" signature="QDOCTEST_MACRO"/>
- <function name="QDOCTEST_MACRO2" href="testqdoc-test.html#QDOCTEST_MACRO2" status="active" access="public" documented="true" related="true" since="Test 1.1" meta="macrowithparams" virtual="non" const="false" static="false" final="false" override="false" type="" brief="A macro with argument x" signature="QDOCTEST_MACRO2( x)">
- <parameter type="" name="x" default=""/>
- </function>
- <qmlclass name="AbstractParent" qml-module-name="QDoc.Test" fullname="QDoc.Test.AbstractParent" href="qml-qdoc-test-abstractparent.html" status="active" access="public" abstract="true" location="parent.qdoc" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput/qml/parent.qdoc" lineno="29" documented="true" title="AbstractParent" fulltitle="AbstractParent" subtitle="" groups="qmltypes" brief="Abstract base QML type">
- <function name="rear" fullname="QDoc.Test.AbstractParent.rear" href="qml-qdoc-test-abstractparent.html#rear-method" status="active" access="public" location="includefromparent.qdoc" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput/includefromexampledirs/src/includefromparent.qdoc" lineno="47" documented="true" meta="qmlmethod"/>
- <function name="rear" fullname="QDoc.Test.AbstractParent.rear" href="qml-qdoc-test-abstractparent.html#rear-method" status="active" access="public" location="parent.qdoc" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput/qml/parent.qdoc" lineno="42" documented="true" meta="qmlmethod"/>
- <qmlproperty name="children" fullname="QDoc.Test.AbstractParent.children" status="active" access="public" location="includefromparent.qdoc" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput/includefromexampledirs/src/includefromparent.qdoc" lineno="41" documented="true" type="list&lt;Child&gt;" attached="false" writable="true" brief="Children of the type"/>
- </qmlclass>
- <qmlclass name="Child" qml-module-name="QDoc.Test" qml-base-type="QDoc.Test::AbstractParent" fullname="QDoc.Test.Child" href="qml-qdoc-test-child.html" status="active" access="public" location="parent.qdoc" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput/qml/parent.qdoc" lineno="47" documented="true" title="Child" fulltitle="Child" subtitle="" brief="A Child inheriting its parent"/>
- <qmlclass name="DocTest" qml-module-name="QDoc.Test" fullname="QDoc.Test.DocTest" href="qml-qdoc-test-doctest.html" status="active" access="public" since="QDoc.Test 0.9" documented="true" title="DocTest" fulltitle="DocTest" subtitle="" brief="Represents a doc test case">
- <contents name="introduction" title="Introduction" level="1"/>
- <function name="doctest_fail" fullname="QDoc.Test.DocTest.doctest_fail" href="qml-qdoc-test-doctest.html#doctest_fail-method" status="internal" access="public" documented="true" meta="qmlmethod"/>
- <function name="fail" fullname="QDoc.Test.DocTest.fail" href="qml-qdoc-test-doctest.html#fail-method" status="active" access="public" location="DocTest.qml" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput/qml/DocTest.qml" lineno="68" documented="true" since="QDoc.Test 1.0" meta="qmlmethod"/>
- <qmlproperty name="active" fullname="QDoc.Test.DocTest.active" href="qml-qdoc-test-doctest.html#active-prop" status="active" access="public" documented="true" type="bool" attached="false" writable="true"/>
- <qmlproperty name="doctest_internal" fullname="QDoc.Test.DocTest.doctest_internal" href="qml-qdoc-test-doctest.html#doctest_internal-prop" status="internal" access="public" documented="true" type="int" attached="false" writable="true"/>
- <qmlproperty name="name" fullname="QDoc.Test.DocTest.name" href="qml-qdoc-test-doctest.html#name-prop" status="active" access="public" documented="true" type="string" attached="false" writable="true"/>
- </qmlclass>
- <namespace name="TestQDoc" href="testqdoc.html" status="active" access="public" location="testcpp.h" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput\testcpp.h" lineno="32" documented="true" module="TestCPP" brief="A namespace">
- <contents name="usage" title="Usage" level="1"/>
- <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="true" meta="macrowithoutparams" virtual="non" const="false" static="false" final="false" override="false" type="" signature="QDOCTEST_MACRO"/>
- <class name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput\testcpp.h" lineno="34" documented="true" module="TestCPP" brief="A class in a namespace">
- <function name="QDOCTEST_MACRO2" href="testqdoc-test.html#QDOCTEST_MACRO2" status="active" access="public" documented="true" related="true" since="Test 1.1" meta="macrowithparams" virtual="non" const="false" static="false" final="false" override="false" type="" brief="A macro with argument x" signature="QDOCTEST_MACRO2( x)">
- <parameter type="" name="x" default=""/>
- </function>
- <function name="anotherObsoleteMember" fullname="TestQDoc::Test::anotherObsoleteMember" href="testqdoc-test-obsolete.html#anotherObsoleteMember" status="obsolete" access="public" location="testcpp.h" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput\testcpp.h" lineno="39" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void anotherObsoleteMember()"/>
- <function name="deprecatedMember" fullname="TestQDoc::Test::deprecatedMember" href="testqdoc-test-obsolete.html#deprecatedMember" status="obsolete" access="public" location="testcpp.h" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput\testcpp.h" lineno="40" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void deprecatedMember()"/>
- <function name="inlineFunction" fullname="TestQDoc::Test::inlineFunction" href="testqdoc-test.html#inlineFunction" status="active" access="public" location="testcpp.h" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput\testcpp.h" lineno="41" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" brief="An inline function, documented using the \fn QDoc command" signature="void inlineFunction()"/>
- <function name="obsoleteMember" fullname="TestQDoc::Test::obsoleteMember" href="testqdoc-test-obsolete.html#obsoleteMember" status="obsolete" access="public" location="testcpp.h" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput\testcpp.h" lineno="38" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void obsoleteMember()"/>
- <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload" status="active" access="protected" location="testcpp.h" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput\testcpp.h" lineno="45" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void overload()"/>
- <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload-1" status="active" access="protected" location="testcpp.h" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput\testcpp.h" lineno="46" meta="plain" virtual="non" const="false" static="false" final="false" override="false" overload="true" overload-number="1" type="void" signature="void overload(bool b)">
- <parameter type="bool" name="b" default=""/>
- </function>
- <function name="someFunction" fullname="TestQDoc::Test::someFunction" href="testqdoc-test.html#someFunction" status="active" access="public" location="testcpp.h" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput\testcpp.h" lineno="36" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="int" signature="int someFunction(int v)">
- <parameter type="int" name="v" default=""/>
- </function>
- <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" status="active" access="public" location="testcpp.h" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput\testcpp.h" lineno="37" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void someFunctionDefaultArg(int i, bool b)">
- <parameter type="int" name="i" default=""/>
- <parameter type="bool" name="b" default="false"/>
- </function>
- <function name="virtualFun" fullname="TestQDoc::Test::virtualFun" href="testqdoc-test.html#virtualFun" status="active" access="public" location="testcpp.h" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput\testcpp.h" lineno="42" documented="true" meta="plain" virtual="virtual" const="false" static="false" final="false" override="false" type="void" signature="void virtualFun()"/>
- </class>
- <class name="TestDerived" fullname="TestQDoc::TestDerived" href="testqdoc-testderived.html" status="active" access="public" location="testcpp.h" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput\testcpp.h" lineno="49" documented="true" bases="TestQDoc::Test" module="TestCPP" brief="A derived class in a namespace">
- <function name="virtualFun" fullname="TestQDoc::TestDerived::virtualFun" href="testqdoc-testderived.html#virtualFun" status="active" access="public" location="testcpp.h" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput\testcpp.h" lineno="51" documented="true" meta="plain" virtual="virtual" const="false" static="false" final="false" override="true" type="void" signature="void virtualFun() override"/>
- </class>
- </namespace>
- <qmlclass name="Type" qml-module-name="QDoc.Test" fullname="QDoc.Test.Type" href="qml-qdoc-test-type.html" status="active" access="public" documented="true" title="Type" fulltitle="Type" subtitle="" brief="A QML type documented in a .cpp file">
- <function name="completed" fullname="QDoc.Test.Type.completed" href="qml-qdoc-test-type.html#completed-signal" status="active" access="public" documented="true" meta="qmlsignal"/>
- <function name="configured" fullname="QDoc.Test.Type.configured" href="qml-qdoc-test-type.html#configured-signal" status="active" access="public" documented="true" meta="qmlsignal"/>
- <function name="copy" fullname="QDoc.Test.Type.copy" href="qml-qdoc-test-type.html#copy-method" status="active" access="public" documented="true" meta="qmlmethod"/>
- <function name="disable" fullname="QDoc.Test.Type.disable" href="qml-qdoc-test-type.html#disable-method" status="active" access="public" meta="qmlmethod"/>
- <function name="enable" fullname="QDoc.Test.Type.enable" href="qml-qdoc-test-type.html#enable-method" status="active" access="public" meta="qmlmethod"/>
- <qmlproperty name="fifth" fullname="QDoc.Test.Type.fifth" href="qml-qdoc-test-type.html#fifth-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true" brief="A group of properties sharing a documentation comment"/>
- <qmlproperty name="fourth" fullname="QDoc.Test.Type.fourth" href="qml-qdoc-test-type.html#fourth-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true" brief="A group of properties sharing a documentation comment"/>
- <qmlproperty name="group.first" fullname="QDoc.Test.Type.group.first" href="qml-qdoc-test-type.html#group.first-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true" brief="A property group"/>
- <qmlproperty name="group.second" fullname="QDoc.Test.Type.group.second" href="qml-qdoc-test-type.html#group.second-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true" brief="A property group"/>
- <qmlproperty name="group.third" fullname="QDoc.Test.Type.group.third" href="qml-qdoc-test-type.html#group.third-prop" status="active" access="public" documented="true" type="int" attached="false" writable="true" brief="A property group"/>
- <qmlproperty name="id" fullname="QDoc.Test.Type.id" href="qml-qdoc-test-type.html#id-prop" status="active" access="public" documented="true" type="int" attached="false" writable="false" brief="A read-only property"/>
- <qmlproperty name="name" fullname="QDoc.Test.Type.name" href="qml-qdoc-test-type.html#name-prop" status="active" access="public" documented="true" type="string" attached="false" writable="true" brief="Name of the Test"/>
- <qmlproperty name="type" fullname="QDoc.Test.Type.type" href="qml-qdoc-test-type.html#type-attached-prop" status="active" access="public" documented="true" type="enumeration" attached="true" writable="true"/>
- </qmlclass>
- <page name="index.html" href="index.html" status="active" location="includefromparent.qdoc" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput/includefromexampledirs/src/includefromparent.qdoc" lineno="29" documented="true" subtype="page" title="doc index" fulltitle="doc index" subtitle="" module="Test">
- <contents name="c-classes" title="C++ Classes" level="1"/>
- <contents name="qml-types" title="QML Types" level="1"/>
- </page>
- <qmlbasictype name="int" href="qml-int.html" status="active" access="public" location="parent.qdoc" filepath="C:/qt5/qttools/tests/auto/qdoc/generatedoutput/qml/parent.qdoc" lineno="54" documented="true"/>
- <group name="qmltypes" href="qmltypes.html" status="internal" seen="false" title="" members="AbstractParent"/>
- <module name="TestCPP" href="testcpp-module.html" status="active" documented="true" seen="true" title="QDoc Test C++ Classes" module="Test" members="TestQDoc,Test,TestDerived" brief="A test module page"/>
- <qmlmodule name="QDoc.Test" qml-module-name="QDoc.Test" qml-module-version="1.1" href="qdoc-test-qmlmodule.html" status="active" documented="true" seen="true" title="" module="Test" members="DocTest,AbstractParent,Child,int,Type" brief="QML Types for the Test module"/>
- </namespace>
-</INDEX>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testcpp-module.html b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testcpp-module.html
deleted file mode 100644
index b1301b5d0..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testcpp-module.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>QDoc Test C++ Classes | Test</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></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>
-<h1 class="title">QDoc Test C++ Classes</h1>
-<span class="subtitle"></span>
-<!-- $$$TestCPP-brief -->
-<p>A test module page. <a href="#details">More...</a></p>
-<!-- @@@TestCPP -->
-<a name="namespaces"></a>
-<h2 id="namespaces">Namespaces</h2>
-<div class="table"><table class="annotated">
-<tr class="odd topAlign"><td class="tblName"><p><a href="testqdoc.html">TestQDoc</a></p></td><td class="tblDescr"><p>A namespace</p></td></tr>
-</table></div>
-<a name="classes"></a>
-<h2 id="classes">Classes</h2>
-<div class="table"><table class="annotated">
-<tr class="odd topAlign"><td class="tblName"><p><a href="testqdoc-test.html">TestQDoc::Test</a></p></td><td class="tblDescr"><p>A class in a namespace</p></td></tr>
-<tr class="even topAlign"><td class="tblName"><p><a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></p></td><td class="tblDescr"><p>A derived class in a namespace</p></td></tr>
-</table></div>
-<!-- $$$TestCPP-description -->
-<a name="details"></a>
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-</div>
-<!-- @@@TestCPP -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc-test-members.html b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc-test-members.html
deleted file mode 100644
index 6f3ca0ff5..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc-test-members.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>List of All Members for Test | Test</title>
-</head>
-<body>
-<li>Test</li>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">List of All Members for Test</h1>
-<p>This is the complete list of members for <a href="testqdoc-test.html">TestQDoc::Test</a>, including inherited members.</p>
-<ul>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#inlineFunction">inlineFunction</a></b></span>()</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#overload">overload</a></b></span>()</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#overload-1">overload</a></b></span>(bool )</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#someFunction">someFunction</a></b></span>(int ) : int</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#someFunctionDefaultArg">someFunctionDefaultArg</a></b></span>(int , bool )</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#virtualFun">virtualFun</a></b></span>()</li>
-</ul>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc-test-obsolete.html b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc-test-obsolete.html
deleted file mode 100644
index 088c2ee99..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc-test-obsolete.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>Obsolete Members for Test | Test</title>
-</head>
-<body>
-<li>Test</li>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">Obsolete Members for Test</h1>
-<p><b>The following members of class <a href="testqdoc-test.html">Test</a> are obsolete.</b> They are provided to keep old source code working. We strongly advise against using them in new code.</p>
-<h2>Public Functions</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft topAlign rightAlign"> <code>(obsolete) </code>void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#anotherObsoleteMember">anotherObsoleteMember</a></b>()</td></tr>
-<tr><td class="memItemLeft topAlign rightAlign"> <code>(obsolete) </code>void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#deprecatedMember">deprecatedMember</a></b>()</td></tr>
-<tr><td class="memItemLeft topAlign rightAlign"> <code>(obsolete) </code>void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#obsoleteMember">obsoleteMember</a></b>()</td></tr>
-</table></div>
-<h2>Member Function Documentation</h2>
-<!-- $$$anotherObsoleteMember[overload1]$$$anotherObsoleteMember -->
-<h3 class="fn" id="anotherObsoleteMember"><a name="anotherObsoleteMember"></a><span class="type">void</span> Test::<span class="name">anotherObsoleteMember</span>()</h3>
-<p>This function is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.</p>
-<p>Use <a href="testqdoc-test-obsolete.html#obsoleteMember">obsoleteMember</a>() instead.</p>
-<!-- @@@anotherObsoleteMember -->
-<!-- $$$deprecatedMember[overload1]$$$deprecatedMember -->
-<h3 class="fn" id="deprecatedMember"><a name="deprecatedMember"></a><span class="type">void</span> Test::<span class="name">deprecatedMember</span>()</h3>
-<p>This function is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.</p>
-<p>Use <a href="testqdoc-test.html#someFunction">someFunction</a>() instead.</p>
-<!-- @@@deprecatedMember -->
-<!-- $$$obsoleteMember[overload1]$$$obsoleteMember -->
-<h3 class="fn" id="obsoleteMember"><a name="obsoleteMember"></a><span class="type">void</span> Test::<span class="name">obsoleteMember</span>()</h3>
-<p>This function is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.</p>
-<p>Use <a href="testqdoc-test.html#someFunction">someFunction</a>() instead.</p>
-<!-- @@@obsoleteMember -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc-test.html b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc-test.html
deleted file mode 100644
index 53db06685..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc-test.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>Test Class | Test</title>
-</head>
-<body>
-<li>Test</li>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#public-functions">Public Functions</a></li>
-<li class="level1"><a href="#protected-functions">Protected Functions</a></li>
-<li class="level1"><a href="#macros">Macros</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">Test Class</h1>
-<span class="small-subtitle">(<a href="testqdoc-test.html">TestQDoc::Test</a>)<br/></span>
-<!-- $$$Test-brief -->
-<p>A class in a namespace. <a href="#details">More...</a></p>
-<!-- @@@Test -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;Test&gt;</span>
-</td></tr><tr><td class="memItemLeft rightAlign topAlign"> qmake:</td><td class="memItemRight bottomAlign"> QT += testcpp</td></tr><tr><td class="memItemLeft rightAlign topAlign"> Instantiated By:</td><td class="memItemRight bottomAlign"> <a href="qml-qdoc-test-type.html">Type</a></td></tr><tr><td class="memItemLeft rightAlign topAlign"> Inherited By:</td><td class="memItemRight bottomAlign"> <p><a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></p>
-</td></tr></table></div><ul>
-<li><a href="testqdoc-test-members.html">List of all members, including inherited members</a></li>
-<li><a href="testqdoc-test-obsolete.html">Obsolete members</a></li>
-</ul>
-<a name="public-functions"></a>
-<h2 id="public-functions">Public Functions</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#inlineFunction">inlineFunction</a></b>()</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> int </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#someFunction">someFunction</a></b>(int <i>v</i>)</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#someFunctionDefaultArg">someFunctionDefaultArg</a></b>(int <i>i</i>, bool <i>b</i> = false)</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> virtual void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#virtualFun">virtualFun</a></b>()</td></tr>
-</table></div>
-<a name="protected-functions"></a>
-<h2 id="protected-functions">Protected Functions</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#overload">overload</a></b>()</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#overload-1">overload</a></b>(bool <i>b</i>)</td></tr>
-</table></div>
-<a name="macros"></a>
-<h2 id="macros">Macros</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#QDOCTEST_MACRO2">QDOCTEST_MACRO2</a></b>(<i>x</i>)</td></tr>
-</table></div>
-<a name="details"></a>
-<!-- $$$Test-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-</div>
-<!-- @@@Test -->
-<div class="func">
-<h2>Member Function Documentation</h2>
-<!-- $$$ -->
-<div class="fngroup">
-<h3 class="fn fngroupitem" id="overload"><a name="overload"></a><code>[protected] </code><span class="type">void</span> Test::<span class="name">overload</span>()</h3><h3 class="fn fngroupitem" id="overload-1"><a name="overload-1"></a><code>[protected] </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>b</i>.</p>
-<!-- @@@ -->
-<!-- $$$inlineFunction[overload1]$$$inlineFunction -->
-<h3 class="fn" id="inlineFunction"><a name="inlineFunction"></a><span class="type">void</span> Test::<span class="name">inlineFunction</span>()</h3>
-<p>An inline function, documented using the \fn QDoc command.</p>
-<!-- @@@inlineFunction -->
-<!-- $$$someFunction[overload1]$$$someFunctionint -->
-<h3 class="fn" id="someFunction"><a name="someFunction"></a><span class="type">int</span> Test::<span class="name">someFunction</span>(<span class="type">int</span> <i>v</i>)</h3>
-<p>Function that takes a parameter <i>v</i>. Also returns the value of <i>v</i>.</p>
-<!-- @@@someFunction -->
-<!-- $$$someFunctionDefaultArg[overload1]$$$someFunctionDefaultArgintbool -->
-<h3 class="fn" id="someFunctionDefaultArg"><a name="someFunctionDefaultArg"></a><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)</h3>
-<p>Function that takes a parameter <i>i</i> and <i>b</i>.</p>
-<!-- @@@someFunctionDefaultArg -->
-<!-- $$$virtualFun[overload1]$$$virtualFun -->
-<h3 class="fn" id="virtualFun"><a name="virtualFun"></a><code>[virtual] </code><span class="type">void</span> Test::<span class="name">virtualFun</span>()</h3>
-<p>Function that must be reimplemented.</p>
-<!-- @@@virtualFun -->
-</div>
-<div class="macros">
-<h2>Macro Documentation</h2>
-<!-- $$$QDOCTEST_MACRO2[overload1]$$$QDOCTEST_MACRO2 -->
-<h3 class="fn" id="QDOCTEST_MACRO2"><a name="QDOCTEST_MACRO2"></a><span class="name">QDOCTEST_MACRO2</span>(<i>x</i>)</h3>
-<p>A macro with argument <i>x</i>.</p>
-<p>This function was introduced in Test 1.1.</p>
-<!-- @@@QDOCTEST_MACRO2 -->
-</div>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc-testderived-members.html b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc-testderived-members.html
deleted file mode 100644
index 0babbbd5f..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc-testderived-members.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>List of All Members for TestDerived | Test</title>
-</head>
-<body>
-<li>TestDerived</li>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">List of All Members for TestDerived</h1>
-<p>This is the complete list of members for <a href="testqdoc-testderived.html">TestQDoc::TestDerived</a>, including inherited members.</p>
-<ul>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#inlineFunction">inlineFunction</a></b></span>()</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#overload">overload</a></b></span>()</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#overload-1">overload</a></b></span>(bool )</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#someFunction">someFunction</a></b></span>(int ) : int</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#someFunctionDefaultArg">someFunctionDefaultArg</a></b></span>(int , bool )</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#virtualFun">virtualFun</a></b></span>()</li>
-</ul>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc-testderived.html b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc-testderived.html
deleted file mode 100644
index 8f7517cd3..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc-testderived.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>TestDerived Class | Test</title>
-</head>
-<body>
-<li>TestDerived</li>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#reimplemented-public-functions">Reimplemented 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">TestDerived Class</h1>
-<span class="small-subtitle">(<a href="testqdoc-testderived.html">TestQDoc::TestDerived</a>)<br/></span>
-<!-- $$$TestDerived-brief -->
-<p>A derived class in a namespace. <a href="#details">More...</a></p>
-<!-- @@@TestDerived -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;TestDerived&gt;</span>
-</td></tr><tr><td class="memItemLeft rightAlign topAlign"> qmake:</td><td class="memItemRight bottomAlign"> QT += testcpp</td></tr><tr><td class="memItemLeft rightAlign topAlign"> Inherits:</td><td class="memItemRight bottomAlign"> <a href="testqdoc-test.html">TestQDoc::Test</a></td></tr></table></div><ul>
-<li><a href="testqdoc-testderived-members.html">List of all members, including inherited members</a></li>
-</ul>
-<a name="reimplemented-public-functions"></a>
-<h2 id="reimplemented-public-functions">Reimplemented Public Functions</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> virtual void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#virtualFun">virtualFun</a></b>() override</td></tr>
-</table></div>
-<a name="details"></a>
-<!-- $$$TestDerived-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-</div>
-<!-- @@@TestDerived -->
-<div class="func">
-<h2>Member Function Documentation</h2>
-<!-- $$$virtualFun[overload1]$$$virtualFun -->
-<h3 class="fn" id="virtualFun"><a name="virtualFun"></a><code>[override virtual] </code><span class="type">void</span> TestDerived::<span class="name">virtualFun</span>()</h3>
-<p>Reimplements: <a href="testqdoc-test.html#virtualFun">Test::virtualFun</a>().</p>
-<!-- @@@virtualFun -->
-</div>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc.html b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc.html
deleted file mode 100644
index 9c6f5b6ae..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/testqdoc.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>TestQDoc Namespace | Test</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#classes">Classes</a></li>
-<li class="level1"><a href="#macros">Macros</a></li>
-<li class="level1"><a href="#details">Detailed Description</a></li>
-<li class="level2"><a href="#usage">Usage</a></li>
-</ul>
-</div>
-<div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">TestQDoc Namespace</h1>
-<!-- $$$TestQDoc-brief -->
-<p>A namespace. <a href="#details">More...</a></p>
-<!-- @@@TestQDoc -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;TestCPP&gt;</span>
-</td></tr><tr><td class="memItemLeft rightAlign topAlign"> qmake:</td><td class="memItemRight bottomAlign"> QT += testcpp</td></tr></table></div><ul>
-</ul>
-<a name="classes"></a>
-<h2 id="classes">Classes</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> class </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html">Test</a></b></td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> class </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html">TestDerived</a></b></td></tr>
-</table></div>
-<a name="macros"></a>
-<h2 id="macros">Macros</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc.html#QDOCTEST_MACRO">QDOCTEST_MACRO</a></b></td></tr>
-</table></div>
-<a name="details"></a>
-<!-- $$$TestQDoc-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-<a name="usage"></a>
-<h3 id="usage">Usage</h3>
-<p>This namespace is for testing QDoc output.</p>
-</div>
-<!-- @@@TestQDoc -->
-<div class="classes">
-<h2>Classes</h2>
-<h3> class <a href="testqdoc-test.html">Test</a></h3><!-- $$$Test-brief -->
-<p>A class in a namespace. <a href="testqdoc-test.html#details">More...</a></p>
-<!-- @@@Test -->
-<h3> class <a href="testqdoc-testderived.html">TestDerived</a></h3><!-- $$$TestDerived-brief -->
-<p>A derived class in a namespace. <a href="testqdoc-testderived.html#details">More...</a></p>
-<!-- @@@TestDerived -->
-</div>
-<div class="macros">
-<h2>Macro Documentation</h2>
-<!-- $$$QDOCTEST_MACRO[overload1]$$$QDOCTEST_MACRO -->
-<h3 class="fn" id="QDOCTEST_MACRO"><a name="QDOCTEST_MACRO"></a><span class="name">QDOCTEST_MACRO</span></h3>
-<!-- @@@QDOCTEST_MACRO -->
-</div>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/index.html b/tests/auto/qdoc/generatedoutput/expected_output/index.html
deleted file mode 100644
index cb5b7b6db..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/index.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- index.qdoc -->
- <title>doc index | TestModule</title>
-</head>
-<body>
-<h1 class="title">doc index</h1>
-<span class="subtitle"></span>
-<!-- $$$index.html-description -->
-<div class="descr"> <a name="details"></a>
-<div class="table"><table class="annotated">
-<tr class="odd topAlign"><td class="tblName"><p><a href="first.html">First</a></p></td></tr>
-<tr class="even topAlign"><td class="tblName"><p><a href="">First::Nested</a></p></td></tr>
-<tr class="odd topAlign"><td class="tblName"><p><a href="second.html">Second</a></p></td></tr>
-<tr class="even topAlign"><td class="tblName"><p><a href="third.html">Third</a></p></td></tr>
-</table></div>
-</div>
-<!-- @@@index.html -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/nestedmacro/testcpp-module.html b/tests/auto/qdoc/generatedoutput/expected_output/nestedmacro/testcpp-module.html
deleted file mode 100644
index 6ab4d245b..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/nestedmacro/testcpp-module.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>QDoc Test C++ Classes | TestCPP</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></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>
-<h1 class="title">QDoc Test C++ Classes</h1>
-<span class="subtitle"></span>
-<!-- $$$TestCPP-brief -->
-<p>A test module page. <a href="#details">More...</a></p>
-<!-- @@@TestCPP -->
-<a name="namespaces"></a>
-<h2 id="namespaces">Namespaces</h2>
-<div class="table"><table class="annotated">
-<tr class="odd topAlign"><td class="tblName"><p><a href="testqdoc.html">TestQDoc</a></p></td><td class="tblDescr"><p>A namespace</p></td></tr>
-</table></div>
-<a name="classes"></a>
-<h2 id="classes">Classes</h2>
-<div class="table"><table class="annotated">
-<tr class="odd topAlign"><td class="tblName"><p><a href="testqdoc-test.html">TestQDoc::Test</a></p></td><td class="tblDescr"><p>A class in a namespace</p></td></tr>
-<tr class="even topAlign"><td class="tblName"><p><a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></p></td><td class="tblDescr"><p>A derived class in a namespace</p></td></tr>
-</table></div>
-<!-- $$$TestCPP-description -->
-<a name="details"></a>
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-<p><b>This module was introduced in version 5.15.</b></p>
-</div>
-<!-- @@@TestCPP -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/noautolist-docbook/qdoc-test-qmlmodule.xml b/tests/auto/qdoc/generatedoutput/expected_output/noautolist-docbook/qdoc-test-qmlmodule.xml
deleted file mode 100644
index 8934e4729..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/noautolist-docbook/qdoc-test-qmlmodule.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?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>Test</db:productname>
-<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
-<db:abstract>
-<db:para>QML Types for the Test module.</db:para>
-<db:para><db:emphasis role="bold">This module is under development and is subject to change.</db:emphasis></db:para>
-<db:para>This module was introduced in Qt 1.1.</db:para>
-</db:abstract>
-</db:info>
-<db:para><db:emphasis role="bold">This module is under development and is subject to change.</db:emphasis></db:para>
-<db:para>This module was introduced in Qt 1.1.</db:para>
-<db:anchor xml:id="details"/>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/noautolist-docbook/test-componentset-example.xml b/tests/auto/qdoc/generatedoutput/expected_output/noautolist-docbook/test-componentset-example.xml
deleted file mode 100644
index 062d7cdf0..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/noautolist-docbook/test-componentset-example.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?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>QML Documentation Example</db:title>
-<db:productname>Test</db:productname>
-<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
-<db:abstract>
-<db:para>Example for documenting QML types.</db:para>
-</db:abstract>
-</db:info>
-<db:para>This example demonstrates one of the ways to document QML types. It also generates a warning about a missing example image, on purpose.</db:para>
-<db:para>In particular, there are sample types that are documented with QDoc commands comments. There are documentation comments for the QML types and their public interfaces. The types are grouped into a module, the <db:link xlink:href="uicomponents-qmlmodule.xml">UI Components</db:link> module.</db:para>
-<db:para>The uicomponents.qdoc file generates the overview page for the <db:link xlink:href="uicomponents-qmlmodule.xml">UI Components</db:link> module page.</db:para>
-<db:para>The generated documentation is available in the <db:link xlink:href="uicomponents-qmlmodule.xml">UI Components</db:link> module.</db:para>
-<db:section xml:id="qml-class">
-<db:title>QML Class</db:title>
-<db:para>The QML types use the \qmltype to document the type. In addition, they have the \inmodule command in order for QDoc to associate them to the <db:code>UIComponents</db:code> module.</db:para>
-<db:para>QDoc uses the \brief command to place a basic description when listing the types.</db:para>
-</db:section>
-<db:section xml:id="properties-signals-handlers-and-methods">
-<db:title>Properties, Signals, Handlers, and Methods</db:title>
-<db:para>The types have their properties, signals, handlers, and methods defined in their respective QML files. QDoc associates the properties and methods to the types, therefore, you only need to place the documentation above the property, method, or signal.</db:para>
-<db:para>To document the type of a <db:emphasis>property alias</db:emphasis>, you must use the \qmlproperty command to specify the data type.</db:para>
-<db:programlisting language="cpp">\qmlproperty &lt;@type&gt;int&lt;/@type&gt; anAliasedProperty
-An aliased property of type &lt;@type&gt;int&lt;/@type&gt;&lt;@op&gt;.&lt;/@op&gt;
-</db:programlisting>
-<db:section xml:id="internal-documentation">
-<db:title>Internal Documentation</db:title>
-<db:para>You may declare that a documentation is for internal use by placing the \internal command after the beginning QDoc comment <db:code>/*</db:code>. QDoc will prevent the internal documentation from appearing in the public API.</db:para>
-<db:para>If you wish to omit certain parts of the documentation, you may use the \omit and \endomit command.</db:para>
-</db:section>
-</db:section>
-<db:section xml:id="qml-types-with-c-implementation">
-<db:title>QML Types with C++ Implementation</db:title>
-<db:para>This example only demonstrates the documentation for types in QML files, but the regular QML commands may be placed inside C++ classes to define the public API of the QML type.</db:para>
-</db:section>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/noautolist-docbook/testcpp-module.xml b/tests/auto/qdoc/generatedoutput/expected_output/noautolist-docbook/testcpp-module.xml
deleted file mode 100644
index d2ba83a13..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/noautolist-docbook/testcpp-module.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?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>QDoc Test C++ Classes</db:title>
-<db:productname>Test</db:productname>
-<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
-<db:abstract>
-<db:para>A test module page.</db:para>
-</db:abstract>
-</db:info>
-<db:para>A test module page.</db:para>
-<db:section xml:id="details">
-<db:title>Detailed Description</db:title>
-</db:section>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/noautolist/qdoc-test-qmlmodule.html b/tests/auto/qdoc/generatedoutput/expected_output/noautolist/qdoc-test-qmlmodule.html
deleted file mode 100644
index 9a1d8b329..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/noautolist/qdoc-test-qmlmodule.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- type.cpp -->
- <title>Test</title>
-</head>
-<body>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<span class="subtitle"></span>
-<p><b>This module is under development and is subject to change.</b></p>
-<p>This module was introduced in Qt 1.1.</p>
-<!-- $$$QDoc.Test-description -->
-<div class="descr"> <a name="details"></a>
-</div>
-<!-- @@@QDoc.Test -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/noautolist/test-componentset-example.html b/tests/auto/qdoc/generatedoutput/expected_output/noautolist/test-componentset-example.html
deleted file mode 100644
index 385f284fc..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/noautolist/test-componentset-example.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- examples.qdoc -->
- <title>QML Documentation Example | Test</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#qml-class">QML Class</a></li>
-<li class="level1"><a href="#properties-signals-handlers-and-methods">Properties, Signals, Handlers, and Methods</a></li>
-<li class="level2"><a href="#internal-documentation">Internal Documentation</a></li>
-<li class="level1"><a href="#qml-types-with-c-implementation">QML Types with C++ Implementation</a></li>
-</ul>
-</div>
-<div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">QML Documentation Example</h1>
-<span class="subtitle"></span>
-<!-- $$$componentset-brief -->
-<p>Example for documenting QML types.</p>
-<!-- @@@componentset -->
-<!-- $$$componentset-description -->
-<div class="descr"> <a name="details"></a>
-<p>This example demonstrates one of the ways to document QML types. It also generates a warning about a missing example image, on purpose.</p>
-<p>In particular, there are sample types that are documented with QDoc commands comments. There are documentation comments for the QML types and their public interfaces. The types are grouped into a module, the <a href="uicomponents-qmlmodule.html">UI Components</a> module.</p>
-<p>The uicomponents.qdoc file generates the overview page for the <a href="uicomponents-qmlmodule.html">UI Components</a> module page.</p>
-<p>The generated documentation is available in the <a href="uicomponents-qmlmodule.html">UI Components</a> module.</p>
-<a name="qml-class"></a>
-<h4 id="qml-class">QML Class</h4>
-<p>The QML types use the \qmltype to document the type. In addition, they have the \inmodule command in order for QDoc to associate them to the <code>UIComponents</code> module.</p>
-<p>QDoc uses the \brief command to place a basic description when listing the types.</p>
-<a name="properties-signals-handlers-and-methods"></a>
-<h4 id="properties-signals-handlers-and-methods">Properties, Signals, Handlers, and Methods</h4>
-<p>The types have their properties, signals, handlers, and methods defined in their respective QML files. QDoc associates the properties and methods to the types, therefore, you only need to place the documentation above the property, method, or signal.</p>
-<p>To document the type of a <i>property alias</i>, you must use the \qmlproperty command to specify the data type.</p>
-<pre class="cpp">\qmlproperty <span class="type">int</span> anAliasedProperty
-An aliased property of type <span class="type">int</span><span class="operator">.</span></pre>
-<a name="internal-documentation"></a>
-<h5 id="internal-documentation">Internal Documentation</h5>
-<p>You may declare that a documentation is for internal use by placing the \internal command after the beginning QDoc comment <code>/*</code>. QDoc will prevent the internal documentation from appearing in the public API.</p>
-<p>If you wish to omit certain parts of the documentation, you may use the \omit and \endomit command.</p>
-<a name="qml-types-with-c-implementation"></a>
-<h4 id="qml-types-with-c-implementation">QML Types with C++ Implementation</h4>
-<p>This example only demonstrates the documentation for types in QML files, but the regular QML commands may be placed inside C++ classes to define the public API of the QML type.</p>
-</div>
-<!-- @@@componentset -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/noautolist/testcpp-module.html b/tests/auto/qdoc/generatedoutput/expected_output/noautolist/testcpp-module.html
deleted file mode 100644
index 8108b0979..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/noautolist/testcpp-module.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>QDoc Test C++ Classes | Test</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></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">QDoc Test C++ Classes</h1>
-<span class="subtitle"></span>
-<!-- $$$TestCPP-brief -->
-<p>A test module page. <a href="#details">More...</a></p>
-<!-- @@@TestCPP -->
-<!-- $$$TestCPP-description -->
-<a name="details"></a>
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-</div>
-<!-- @@@TestCPP -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qdoc-test-qmlmodule.html b/tests/auto/qdoc/generatedoutput/expected_output/qdoc-test-qmlmodule.html
deleted file mode 100644
index 16df6ff0d..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/qdoc-test-qmlmodule.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- type.cpp -->
- <title>Test</title>
-</head>
-<body>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<span class="subtitle"></span>
-<p><b>This module is under development and is subject to change.</b></p>
-<p>This module was introduced in Qt 1.1.</p>
-<!-- $$$QDoc.Test-description -->
-<div class="descr"> <a name="details"></a>
-</div>
-<!-- @@@QDoc.Test -->
-<div class="table"><table class="annotated">
-<tr class="odd topAlign"><td class="tblName"><p><a href="qml-qdoc-test-abstractparent.html">AbstractParent</a></p></td><td class="tblDescr"><p>Abstract base QML type</p></td></tr>
-<tr class="even topAlign"><td class="tblName"><p><a href="qml-qdoc-test-child.html">Child</a></p></td><td class="tblDescr"><p>A Child inheriting its parent</p></td></tr>
-<tr class="odd topAlign"><td class="tblName"><p><a href="qml-qdoc-test-doctest.html">DocTest</a></p></td><td class="tblDescr"><p>Represents a doc test case</p></td></tr>
-<tr class="even topAlign"><td class="tblName"><p><a href="qml-qdoc-test-type.html">Type</a></p></td><td class="tblDescr"><p>A QML type documented in a .cpp file</p></td></tr>
-<tr class="odd topAlign"><td class="tblName"><p><a href="qml-qdoc-test-yetanotherchild.html">YetAnotherChild</a></p></td><td class="tblDescr"><p>A type inheriting from internal abstract parent</p></td></tr>
-<tr class="even topAlign"><td class="tblName"><p><a href="qml-int.html">int</a></p></td><td class="tblDescr"><p>An integer basic type</p></td></tr>
-</table></div>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qdoctests-qdocfileoutput-exhaustive.html b/tests/auto/qdoc/generatedoutput/expected_output/qdoctests-qdocfileoutput-exhaustive.html
deleted file mode 100644
index 8dcfe9452..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/qdoctests-qdocfileoutput-exhaustive.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- qdoctests-outputfromqdocfiles.qdoc -->
- <title>Exhaustive testing of QDoc commands | OutputFromQDocFiles</title>
-</head>
-<body>
-<li id="buildversion">OutputFromQDocFiles - A test project for QDoc build artifacts</li>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#this-is-a-section1">This is a section1</a></li>
-<li class="level2"><a href="#this-is-a-section2">This is a section2</a></li>
-<li class="level3"><a href="#this-is-a-section3">This is a section3</a></li>
-<li class="level4"><a href="#this-is-a-section4">This is a section4</a></li>
-</ul>
-</div>
-<div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">Exhaustive testing of QDoc commands</h1>
-<span class="subtitle"></span>
-<!-- $$$qdoctests-qdocfileoutput-exhaustive.html-description -->
-<div class="descr"> <a name="details"></a>
-<a name="this-is-a-section1"></a>
-<h2 id="this-is-a-section1">This is a section1</h2>
-<a name="this-is-a-section2"></a>
-<h3 id="this-is-a-section2">This is a section2</h3>
-<a name="this-is-a-section3"></a>
-<h4 id="this-is-a-section3">This is a section3</h4>
-<a name="this-is-a-section4"></a>
-<h5 id="this-is-a-section4">This is a section4</h5>
-<pre class="cpp plain">This is bad code</pre>
-<p>This text should have a line break riiiiight <br />
- noooow.</p>
-<p><b>All your text belong to bold</b> ..&#x2e;And this is an examble of only <b>bold</b> being, well, bold.</p>
-<pre class="cpp"> ...</pre>
-<pre class="js"><span class="comment">// If I knew JavaScript, this is where I would write it.</span></pre>
-<p>And if I knew qmltext, I guess this is where that would go. </p>
-<p class="figCaption">This a caption</p>
-<div class="LegaleseLeft"><p>Lorem legal ipsum</p>
-</div><blockquote><p>This is a quotation.</p>
-</blockquote>
- <html><body>This is <b>raw</b>. Like the <h1>Eddie Murphy</h1> movie. Just not as funny.</body></html>
- <p>Look, ma! I made a sidebar!</p>
-<div class="table"><table class="generic">
- <tr valign="top" class="odd"><td >Table item in a table row</td></tr>
-<tr valign="top" class="even"><td >Another item in a different row</td></tr>
-</table></div>
-<p><b>Important: </b>This is really important.</p><p>For example, if you have code like</p>
-<pre class="cpp plain">This is old code.</pre>
-<p>you can rewrite it as</p>
-<pre class="cpp">This is <span class="keyword">new</span> and shiny<span class="operator">!</span></pre>
-<p><b>Note: </b>The code above doesn't compile</p>
-<hr />
-<p><b>Warning:</b> The following commands have yet to be tested: footnote link sincelist header index topicref // or just don’t care, remove it image inlineimage printline printto printuntil // what’s the difference between printto and printuntil??? quotefile quotefromfile quotefunction skipline skipto skipuntil span snippet codeline overload sub sup tableofcontents tt uicontrol endmapref endomit underline unicode</p>
-</div>
-<!-- @@@qdoctests-qdocfileoutput-exhaustive.html -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qdoctests-qdocfileoutput-linking.html b/tests/auto/qdoc/generatedoutput/expected_output/qdoctests-qdocfileoutput-linking.html
deleted file mode 100644
index 4da717b70..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/qdoctests-qdocfileoutput-linking.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- qdoctests-outputfromqdocfiles.qdoc -->
- <title>Testing QDoc's link command | OutputFromQDocFiles</title>
-</head>
-<body>
-<li id="buildversion">OutputFromQDocFiles - A test project for QDoc build artifacts</li>
- <link rel="prev" href="qdoctests-qdocfileoutput.html" />
- <link rel="next" href="toc.html" />
-<p class="naviNextPrevious headerNavi">
-<a class="prevPage" href="qdoctests-qdocfileoutput.html">QDoc Testing</a>
-<a class="nextPage" href="toc.html">Table of Contents</a>
-</p><p/>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#link-targets">Link targets</a></li>
-</ul>
-</div>
-<div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">Testing QDoc's link command</h1>
-<span class="subtitle"></span>
-<!-- $$$qdoctests-qdocfileoutput-linking.html-description -->
-<div class="descr"> <a name="details"></a>
-<a name="link-test-target"></a><a name="link-targets"></a>
-<h2 id="link-targets">Link targets</h2>
-<p>Valid parameters for the link command (<code>\l</code>) are page and section titles, targets defined with \target or \keyword commands, and API reference keywords (types, methods, namespaces, and so on).</p>
-</div>
-<!-- @@@qdoctests-qdocfileoutput-linking.html -->
-<p class="naviNextPrevious footerNavi">
-<a class="prevPage" href="qdoctests-qdocfileoutput.html">QDoc Testing</a>
-<a class="nextPage" href="toc.html">Table of Contents</a>
-</p>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qdoctests-qdocfileoutput.html b/tests/auto/qdoc/generatedoutput/expected_output/qdoctests-qdocfileoutput.html
deleted file mode 100644
index 273b0110e..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/qdoctests-qdocfileoutput.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- qdoctests-outputfromqdocfiles.qdoc -->
- <title>Testing QDoc output from .qdoc files | OutputFromQDocFiles</title>
-</head>
-<body>
-<li id="buildversion">OutputFromQDocFiles - A test project for QDoc build artifacts</li>
- <link rel="next" href="qdoctests-qdocfileoutput-linking.html" />
-<p class="naviNextPrevious headerNavi">
-<a class="nextPage" href="qdoctests-qdocfileoutput-linking.html">QDoc Linking Test</a>
-</p><p/>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#supported-file-types">Supported file types</a></li>
-<li class="level1"><a href="#further-information">Further information</a></li>
-<li class="level1"><a href="#linking">Linking</a></li>
-</ul>
-</div>
-<div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">Testing QDoc output from .qdoc files</h1>
-<span class="subtitle"></span>
-<!-- $$$qdoctests-qdocfileoutput.html-description -->
-<div class="descr"> <a name="details"></a>
-<p>QDoc generates documentation for software projects. It does this by extracting <i>QDoc comments</i> from project source files. QDoc comments are signified by a C-style-like comment tag followed by an exclamation point, like this: <code>/*!</code> <code>This text is contained within QDoc comment tags.</code> <code>*/</code>.</p>
-<a name="supported-file-types"></a>
-<h2 id="supported-file-types">Supported file types</h2>
-<p>QDoc parses <code>.cpp</code> and <code>.qdoc</code> files. It does extract comments from header (<code>.h</code>) files.</p>
-<a name="further-information"></a>
-<h2 id="further-information">Further information</h2>
-<p>This test document is written with the purpose of testing the output QDoc generates when parsing <code>.qdoc</code> files. It is fairly simple and makes use of a limited subset of QDoc's command. Those commands are:</p>
-<ul>
-<li><code>\page</code></li>
-<li><code>\title</code></li>
-<li><code>\brief</code></li>
-<li><code>\e</code> (for emphasizing &quot;QDoc comments&quot;)</li>
-<li><code>\c</code> (for multiple monospace-formatted entries)</li>
-<li><code>\section1</code></li>
-<li><code>\list</code></li>
-<li><code>\li</code></li>
-<li><code>\endlist</code></li>
-</ul>
-<a name="linking"></a>
-<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">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>
-</div>
-<!-- @@@qdoctests-qdocfileoutput.html -->
-<p class="naviNextPrevious footerNavi">
-<a class="nextPage" href="qdoctests-qdocfileoutput-linking.html">QDoc Linking Test</a>
-</p>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-int.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-int.html
deleted file mode 100644
index 0b21da628..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-int.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- parent.qdoc -->
- <title>int QML Basic Type | Test</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-</ul>
-</div>
-<div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">int QML Basic Type</h1>
-<span class="subtitle"></span>
-<a name="methods"></a>
-<h2 id="methods">Methods</h2>
-<ul>
-<li class="fn">int <b><b><a href="qml-int.html#abs-method">abs</a></b></b>()</li>
-</ul>
-<!-- $$$int-description -->
-<div class="descr"> <a name="details"></a>
-</div>
-<!-- @@@int -->
-<h2>Method Documentation</h2>
-<!-- $$$abs[overload1]$$$abs -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="abs-method">
-<td class="tblQmlFuncNode"><p>
-<a name="abs-method"></a><span class="type"><a href="qml-int.html">int</a></span> <span class="name">abs</span>()</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Returns the absolute value of this integer.</p>
-</div></div><!-- @@@abs -->
-<br/>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-abstractparent.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-abstractparent.html
deleted file mode 100644
index e23993eb9..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-abstractparent.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- parent.qdoc -->
- <title>AbstractParent QML Type | Test</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#properties">Properties</a></li>
-<li class="level1"><a href="#methods">Methods</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">AbstractParent QML Type</h1>
-<span class="subtitle"></span>
-<!-- $$$AbstractParent-brief -->
-<p>Abstract base QML type. <a href="#details">More...</a></p>
-<!-- @@@AbstractParent -->
-<div class="table"><table class="alignedsummary">
-<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"> Inherited By:</td><td class="memItemRight bottomAlign"> <p><a href="qml-qdoc-test-child.html">Child</a></p>
-</td></tr></table></div><ul>
-<li><a href="qml-qdoc-test-abstractparent-members.html">List of all members, including inherited members</a></li>
-</ul>
-<a name="properties"></a>
-<h2 id="properties">Properties</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-abstractparent.html#children-prop">children</a></b></b> : list&lt;Child&gt;</li>
-</ul>
-<a name="methods"></a>
-<h2 id="methods">Methods</h2>
-<ul>
-<li class="fn">void <b><b><a href="qml-qdoc-test-abstractparent.html#rear-method">rear</a></b></b>(Child <i>child</i>, var <i>method</i>)</li>
-</ul>
-<!-- $$$AbstractParent-description -->
-<a name="details"></a>
-<h2 id="details">Detailed Description</h2>
-<!-- @@@AbstractParent -->
-<h2>Property Documentation</h2>
-<!-- $$$children -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="children-prop">
-<td class="tblQmlPropNode"><p>
-<a name="children-prop"></a><span class="qmlextra">[default] </span><span class="name">children</span> : <span class="type">list</span>&lt;<span class="type"><a href="qml-qdoc-test-child.html">Child</a></span>&gt;</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Children of the type.</p>
-</div></div><!-- @@@children -->
-<br/>
-<h2>Method Documentation</h2>
-<!-- $$$rear[overload1]$$$rearChildvar -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="rear-method">
-<td class="tblQmlFuncNode"><p>
-<a name="rear-method"></a><span class="type">void</span> <span class="name">rear</span>(<span class="type"><a href="qml-qdoc-test-child.html">Child</a></span> <i>child</i>, <span class="type">var</span> <i>method</i> = Strict)</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Do some abstract parenting on <i>child</i> using a specific <i>method</i>.</p>
-</div></div><!-- @@@rear -->
-<br/>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-child.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-child.html
deleted file mode 100644
index df0a15b86..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-child.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- parent.qdoc -->
- <title>Child QML Type | Test</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#properties">Properties</a></li>
-<li class="level1"><a href="#methods">Methods</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">Child QML Type</h1>
-<span class="subtitle"></span>
-<!-- $$$Child-brief -->
-<p>A Child inheriting its parent. <a href="#details">More...</a></p>
-<!-- @@@Child -->
-<div class="table"><table class="alignedsummary">
-<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"> Inherits:</td><td class="memItemRight bottomAlign"> <p><a href="qml-qdoc-test-abstractparent.html">AbstractParent</a></p>
-</td></tr></table></div><ul>
-<li><a href="qml-qdoc-test-child-members.html">List of all members, including inherited members</a></li>
-</ul>
-<a name="properties"></a>
-<h2 id="properties">Properties</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-child.html#children-prop">children</a></b></b> : list&lt;Child&gt;</li>
-</ul>
-<a name="methods"></a>
-<h2 id="methods">Methods</h2>
-<ul>
-<li class="fn">void <b><b><a href="qml-qdoc-test-child.html#rear-method">rear</a></b></b>(Child <i>child</i>, var <i>method</i>)</li>
-</ul>
-<!-- $$$Child-description -->
-<a name="details"></a>
-<h2 id="details">Detailed Description</h2>
-<!-- @@@Child -->
-<h2>Property Documentation</h2>
-<!-- $$$children -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="children-prop">
-<td class="tblQmlPropNode"><p>
-<a name="children-prop"></a><span class="qmlextra">[default] </span><span class="name">children</span> : <span class="type">list</span>&lt;<span class="type"><a href="qml-qdoc-test-child.html">Child</a></span>&gt;</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Children of the type.</p>
-</div></div><!-- @@@children -->
-<br/>
-<h2>Method Documentation</h2>
-<!-- $$$rear[overload1]$$$rearChildvar -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="rear-method">
-<td class="tblQmlFuncNode"><p>
-<a name="rear-method"></a><span class="type">void</span> <span class="name">rear</span>(<span class="type"><a href="qml-qdoc-test-child.html">Child</a></span> <i>child</i>, <span class="type">var</span> <i>method</i> = Strict)</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Do some abstract parenting on <i>child</i> using a specific <i>method</i>.</p>
-</div></div><!-- @@@rear -->
-<br/>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-doctest.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-doctest.html
deleted file mode 100644
index 637605f0d..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-doctest.html
+++ /dev/null
@@ -1,130 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- DocTest.qml -->
- <title>DocTest QML Type | Test</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#properties">Properties</a></li>
-<li class="level1"><a href="#signals">Signals</a></li>
-<li class="level1"><a href="#methods">Methods</a></li>
-<li class="level1"><a href="#details">Detailed Description</a></li>
-<li class="level2"><a href="#introduction">Introduction</a></li>
-</ul>
-</div>
-<div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">DocTest QML Type</h1>
-<span class="subtitle"></span>
-<!-- $$$DocTest-brief -->
-<p>Represents a doc test case. <a href="#details">More...</a></p>
-<!-- @@@DocTest -->
-<div class="table"><table class="alignedsummary">
-<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"> QDoc.Test 0.9</td></tr></table></div><ul>
-<li><a href="qml-qdoc-test-doctest-members.html">List of all members, including inherited members</a></li>
-</ul>
-<a name="properties"></a>
-<h2 id="properties">Properties</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-doctest.html#active-prop">active</a></b></b> : bool</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-doctest.html#name-prop">name</a></b></b> : string</li>
-</ul>
-<a name="signals"></a>
-<h2 id="signals">Signals</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-doctest.html#completed-signal">completed</a></b></b>()</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-doctest.html#foo-signal">foo</a></b></b>(var <i>bar</i>)</li>
-</ul>
-<a name="methods"></a>
-<h2 id="methods">Methods</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-doctest.html#fail-method">fail</a></b></b>(<i>message</i>)</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-doctest.html#fail_hard-method">fail_hard</a></b></b>(<i>msg</i>, <i>option</i>)</li>
-</ul>
-<!-- $$$DocTest-description -->
-<a name="details"></a>
-<h2 id="details">Detailed Description</h2>
-<a name="introduction"></a>
-<h2 id="introduction">Introduction</h2>
-<p>A documentation test case, itself documented inline in DocTest.qml.</p>
-<!-- @@@DocTest -->
-<h2>Property Documentation</h2>
-<!-- $$$active -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="active-prop">
-<td class="tblQmlPropNode"><p>
-<a name="active-prop"></a><span class="name">active</span> : <span class="type">bool</span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Whether the test is active.</p>
-<p><b>See also </b><a href="qml-qdoc-test-doctest.html#name-prop">name</a>.</p>
-</div></div><!-- @@@active -->
-<br/>
-<!-- $$$name -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="name-prop">
-<td class="tblQmlPropNode"><p>
-<a name="name-prop"></a><span class="qmlextra">[required] </span><span class="name">name</span> : <span class="type">string</span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Name of the test.</p>
-<pre class="qml"><span class="type"><a href="qml-qdoc-test-doctest.html">DocTest</a></span> {
- <span class="name">name</span>: <span class="string">&quot;test&quot;</span>
- <span class="comment">// ...</span>
-}</pre>
-</div></div><!-- @@@name -->
-<br/>
-<h2>Signal Documentation</h2>
-<!-- $$$completed[overload1]$$$completed -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="completed-signal">
-<td class="tblQmlFuncNode"><p>
-<a name="completed-signal"></a><span class="name">completed</span>()</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p><b>Note: </b>The corresponding handler is <code>onCompleted</code>.</p>
-</div></div><!-- @@@completed -->
-<br/>
-<!-- $$$foo[overload1]$$$foovar -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="foo-signal">
-<td class="tblQmlFuncNode"><p>
-<a name="foo-signal"></a><span class="name">foo</span>(<span class="type">var</span> <i>bar</i>)</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Signal with parameter <i>bar</i>.</p>
-<p><b>Note: </b>The corresponding handler is <code>onFoo</code>.</p>
-</div></div><!-- @@@foo -->
-<br/>
-<h2>Method Documentation</h2>
-<!-- $$$fail[overload1]$$$fail -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="fail-method">
-<td class="tblQmlFuncNode"><p>
-<a name="fail-method"></a><code>[since QDoc.Test 1.0] </code><span class="name">fail</span>(<i>message</i> = &quot;oops&quot;)</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Fails the current test case, with the optional <i>message</i>.</p>
-<p>This method was introduced in QDoc.Test 1.0.</p>
-</div></div><!-- @@@fail -->
-<br/>
-<!-- $$$fail_hard[overload1]$$$fail_hard -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="fail_hard-method">
-<td class="tblQmlFuncNode"><p>
-<a name="fail_hard-method"></a><span class="name">fail_hard</span>(<i>msg</i> = &quot;facepalm&quot;, <i>option</i> = 123)</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Fails the current test case, hard.</p>
-<ul>
-<li>Prints out <i>msg</i>.</li>
-<li>Accepts a random <i>option</i>.</li>
-</ul>
-</div></div><!-- @@@fail_hard -->
-<br/>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type-members.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type-members.html
deleted file mode 100644
index c3866cc66..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type-members.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- type.cpp -->
- <title>List of All Members for Type | Test</title>
-</head>
-<body>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">List of All Members for Type</h1>
-<p>This is the complete list of members for <a href="qml-qdoc-test-type.html">Type</a>, including inherited members.</p>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#fifth-prop">fifth</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#fourth-prop">fourth</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#group-prop">group</a></b></b><ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#group.first-prop">group.first</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#group.second-prop">group.second</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#group.third-prop">group.third</a></b></b> : int</li>
-</ul>
-</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#id-prop">id</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#name-prop">name</a></b></b> : string</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#type-attached-prop">type</a></b></b> : enumeration [attached]</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#completed-signal">completed</a></b></b>(int <i>status</i>)</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#configured-signal">configured</a></b></b>() [attached]</li>
-<li class="fn">Type <b><b><a href="qml-qdoc-test-type.html#copy-method">copy</a></b></b>(<i>a</i>)</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#disable-method">disable</a></b></b>()</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#enable-method">enable</a></b></b>()</li>
-</ul>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type.html
deleted file mode 100644
index c5dddd5f1..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type.html
+++ /dev/null
@@ -1,187 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- type.cpp -->
- <title>Type QML Type | Test</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#properties">Properties</a></li>
-<li class="level1"><a href="#attached-properties">Attached Properties</a></li>
-<li class="level1"><a href="#signals">Signals</a></li>
-<li class="level1"><a href="#attached-signals">Attached Signals</a></li>
-<li class="level1"><a href="#methods">Methods</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">Type QML Type</h1>
-<span class="subtitle"></span>
-<!-- $$$Type-brief -->
-<p>A QML type documented in a .cpp file. <a href="#details">More...</a></p>
-<!-- @@@Type -->
-<div class="table"><table class="alignedsummary">
-<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"> Instantiates:</td><td class="memItemRight bottomAlign"> <a href="qml-qdoc-test-type.html"><a href="testqdoc-test.html">Test</a></td></tr></table></div><ul>
-<li><a href="qml-qdoc-test-type-members.html">List of all members, including inherited members</a></li>
-</ul>
-<a name="properties"></a>
-<h2 id="properties">Properties</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#fifth-prop">fifth</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#fourth-prop">fourth</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#group-prop">group</a></b></b><ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#group.first-prop">group.first</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#group.second-prop">group.second</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#group.third-prop">group.third</a></b></b> : int</li>
-</ul>
-</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#id-prop">id</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#name-prop">name</a></b></b> : string</li>
-</ul>
-<a name="attached-properties"></a>
-<h2 id="attached-properties">Attached Properties</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#type-attached-prop">type</a></b></b> : enumeration</li>
-</ul>
-<a name="signals"></a>
-<h2 id="signals">Signals</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#completed-signal">completed</a></b></b>(int <i>status</i>)</li>
-</ul>
-<a name="attached-signals"></a>
-<h2 id="attached-signals">Attached Signals</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#configured-signal">configured</a></b></b>()</li>
-</ul>
-<a name="methods"></a>
-<h2 id="methods">Methods</h2>
-<ul>
-<li class="fn">Type <b><b><a href="qml-qdoc-test-type.html#copy-method">copy</a></b></b>(<i>a</i>)</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#disable-method">disable</a></b></b>()</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-type.html#enable-method">enable</a></b></b>()</li>
-</ul>
-<!-- $$$Type-description -->
-<a name="details"></a>
-<h2 id="details">Detailed Description</h2>
-<!-- @@@Type -->
-<h2>Property Documentation</h2>
-<!-- $$$ -->
-<div class="qmlitem"><div class="fngroup">
-<div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="fifth-prop">
-<td class="tblQmlPropNode"><p>
-<a name="fifth-prop"></a><span class="name">fifth</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-<tr valign="top" class="odd" id="fourth-prop">
-<td class="tblQmlPropNode"><p>
-<a name="fourth-prop"></a><span class="name">fourth</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-</table></div></div>
-</div><div class="qmldoc"><p>A group of properties sharing a documentation comment.</p>
-</div></div><!-- @@@ -->
-<br/>
-<!-- $$$group -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="even" id="group-prop"><th class="centerAlign"><p><a name="group-prop"></a><b>group group</b></p></th></tr>
-<tr valign="top" class="odd" id="group.first-prop">
-<td class="tblQmlPropNode"><p>
-<a name="group.first-prop"></a><span class="name">group.first</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-<tr valign="top" class="odd" id="group.second-prop">
-<td class="tblQmlPropNode"><p>
-<a name="group.second-prop"></a><span class="name">group.second</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-<tr valign="top" class="odd" id="group.third-prop">
-<td class="tblQmlPropNode"><p>
-<a name="group.third-prop"></a><span class="name">group.third</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>A property group.</p>
-</div></div><!-- @@@group -->
-<br/>
-<!-- $$$id -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="id-prop">
-<td class="tblQmlPropNode"><p>
-<a name="id-prop"></a><span class="qmlextra">[read-only] </span><span class="name">id</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>A read-only property.</p>
-</div></div><!-- @@@id -->
-<br/>
-<!-- $$$name -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="name-prop">
-<td class="tblQmlPropNode"><p>
-<a name="name-prop"></a><span class="qmlextra">[required] </span><span class="name">name</span> : <span class="type">string</span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Name of the Test.</p>
-</div></div><!-- @@@name -->
-<br/>
-<h2>Attached Property Documentation</h2>
-<!-- $$$type -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="type-attached-prop">
-<td class="tblQmlPropNode"><p>
-<a name="type-attached-prop"></a><span class="name">Type.type</span> : <span class="type">enumeration</span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><div class="table"><table class="valuelist"><tr valign="top" class="odd"><th class="tblConst">Constant</th><th class="tbldscr">Description</th></tr>
-<tr><td class="topAlign"><code>Type.NoType</code></td><td class="topAlign">Nothing</td></tr>
-<tr><td class="topAlign"><code>Type.SomeType</code></td><td class="topAlign">Something</td></tr>
-</table></div>
-</div></div><!-- @@@type -->
-<br/>
-<h2>Signal Documentation</h2>
-<!-- $$$completed[overload1]$$$completedint -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="completed-signal">
-<td class="tblQmlFuncNode"><p>
-<a name="completed-signal"></a><span class="name">completed</span>(<span class="type"><a href="qml-int.html">int</a></span> <i>status</i>)</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>This signal is emitted when the operation completed with <i>status</i>.</p>
-<p><b>Note: </b>The corresponding handler is <code>onCompleted</code>.</p>
-</div></div><!-- @@@completed -->
-<br/>
-<h2>Attached Signal Documentation</h2>
-<!-- $$$configured[overload1]$$$configured -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="configured-signal">
-<td class="tblQmlFuncNode"><p>
-<a name="configured-signal"></a><span class="name">configured</span>()</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>This attached signal is emitted when the type was configured.</p>
-<p><b>Note: </b>The corresponding handler is <code>onConfigured</code>.</p>
-</div></div><!-- @@@configured -->
-<br/>
-<h2>Method Documentation</h2>
-<!-- $$$ -->
-<div class="qmlitem"><div class="fngroup">
-<div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="disable-method">
-<td class="tblQmlFuncNode"><p>
-<a name="disable-method"></a><span class="name">disable</span>()</p></td></tr>
-<tr valign="top" class="odd" id="enable-method">
-<td class="tblQmlFuncNode"><p>
-<a name="enable-method"></a><span class="name">enable</span>()</p></td></tr>
-</table></div></div>
-</div><div class="qmldoc"><p>Enables or disables this type.</p>
-</div></div><!-- @@@ -->
-<br/>
-<!-- $$$copy[overload1]$$$copy -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="copy-method">
-<td class="tblQmlFuncNode"><p>
-<a name="copy-method"></a><span class="type"><a href="qml-qdoc-test-type.html">Type</a></span> <span class="name">copy</span>(<i>a</i>)</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Returns another Type based on <i>a</i>.</p>
-</div></div><!-- @@@copy -->
-<br/>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-yetanotherchild.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-yetanotherchild.html
deleted file mode 100644
index a79c759af..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-yetanotherchild.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- parent.qdoc -->
- <title>YetAnotherChild QML Type | Test</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#properties">Properties</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">YetAnotherChild QML Type</h1>
-<span class="subtitle"></span>
-<!-- $$$YetAnotherChild-brief -->
-<p>A type inheriting from internal abstract parent. <a href="#details">More...</a></p>
-<!-- @@@YetAnotherChild -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Import Statement:</td><td class="memItemRight bottomAlign"> import QDoc.Test 1.1</td></tr></table></div><ul>
-<li><a href="qml-qdoc-test-yetanotherchild-members.html">List of all members, including inherited members</a></li>
-</ul>
-<a name="properties"></a>
-<h2 id="properties">Properties</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-yetanotherchild.html#prop-prop">prop</a></b></b> : int</li>
-</ul>
-<!-- $$$YetAnotherChild-description -->
-<a name="details"></a>
-<h2 id="details">Detailed Description</h2>
-<!-- @@@YetAnotherChild -->
-<h2>Property Documentation</h2>
-<!-- $$$prop -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="prop-prop">
-<td class="tblQmlPropNode"><p>
-<a name="prop-prop"></a><span class="name">prop</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Propagated to inheriting type docs.</p>
-</div></div><!-- @@@prop -->
-<br/>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-progressbar.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-progressbar.html
deleted file mode 100644
index a1b43ea9d..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-progressbar.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- ProgressBar.qml -->
- <title>ProgressBar QML Type | Test</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#properties">Properties</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">ProgressBar QML Type</h1>
-<span class="subtitle"></span>
-<!-- $$$ProgressBar-brief -->
-<p>A component that shows the progress of an event. <a href="#details">More...</a></p>
-<!-- @@@ProgressBar -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Import Statement:</td><td class="memItemRight bottomAlign"> import UIComponents 1.0</td></tr></table></div><ul>
-<li><a href="qml-uicomponents-progressbar-members.html">List of all members, including inherited members</a></li>
-</ul>
-<a name="properties"></a>
-<h2 id="properties">Properties</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-uicomponents-progressbar.html#color-prop">color</a></b></b> : color</li>
-<li class="fn"><b><b><a href="qml-uicomponents-progressbar.html#maximum-prop">maximum</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-uicomponents-progressbar.html#minimum-prop">minimum</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-uicomponents-progressbar.html#secondColor-prop">secondColor</a></b></b> : color</li>
-<li class="fn"><b><b><a href="qml-uicomponents-progressbar.html#value-prop">value</a></b></b> : int</li>
-</ul>
-<!-- $$$ProgressBar-description -->
-<a name="details"></a>
-<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">value</a>. The range is specified using the <a href="qml-uicomponents-progressbar.html#minimum-prop">minimum</a> and the <a href="qml-uicomponents-progressbar.html#maximum-prop">maximum</a> values.</p>
-<p>The ProgressBar component is part of the <a href="uicomponents-qmlmodule.html">UI Components</a> module.</p>
-<p>This documentation is part of the <a href="test-componentset-example.html">UIComponents</a> example.</p>
-<!-- @@@ProgressBar -->
-<h2>Property Documentation</h2>
-<!-- $$$color -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="color-prop">
-<td class="tblQmlPropNode"><p>
-<a name="color-prop"></a><span class="name">color</span> : <span class="type">color</span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>The color of the <a href="qml-uicomponents-progressbar.html">ProgressBar</a>'s gradient. Must bind to a color type.</p>
-<p><b>See also </b><a href="qml-uicomponents-progressbar.html#secondColor-prop">secondColor</a>.</p>
-</div></div><!-- @@@color -->
-<br/>
-<!-- $$$maximum -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="maximum-prop">
-<td class="tblQmlPropNode"><p>
-<a name="maximum-prop"></a><span class="name">maximum</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>The maximum value of the <a href="qml-uicomponents-progressbar.html">ProgressBar</a> range. The <a href="qml-uicomponents-progressbar.html#value-prop">value</a> must not be more than this value.</p>
-</div></div><!-- @@@maximum -->
-<br/>
-<!-- $$$minimum -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="minimum-prop">
-<td class="tblQmlPropNode"><p>
-<a name="minimum-prop"></a><span class="name">minimum</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>The minimum value of the <a href="qml-uicomponents-progressbar.html">ProgressBar</a> range. The <a href="qml-uicomponents-progressbar.html#value-prop">value</a> must not be less than this value.</p>
-</div></div><!-- @@@minimum -->
-<br/>
-<!-- $$$secondColor -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="secondColor-prop">
-<td class="tblQmlPropNode"><p>
-<a name="secondColor-prop"></a><span class="name">secondColor</span> : <span class="type">color</span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>The second color of the <a href="qml-uicomponents-progressbar.html">ProgressBar</a>'s gradient. Must bind to a color type.</p>
-<p><b>See also </b><a href="qml-uicomponents-progressbar.html#color-prop">color</a>.</p>
-</div></div><!-- @@@secondColor -->
-<br/>
-<!-- $$$value -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="value-prop">
-<td class="tblQmlPropNode"><p>
-<a name="value-prop"></a><span class="name">value</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>The value of the progress.</p>
-</div></div><!-- @@@value -->
-<br/>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-switch.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-switch.html
deleted file mode 100644
index fadb1a531..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-switch.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- Switch.qml -->
- <title>Switch QML Type | Test</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#properties">Properties</a></li>
-<li class="level1"><a href="#methods">Methods</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">Switch QML Type</h1>
-<span class="subtitle"></span>
-<!-- $$$Switch-brief -->
-<p>A component that can be turned on or off. <a href="#details">More...</a></p>
-<!-- @@@Switch -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Import Statement:</td><td class="memItemRight bottomAlign"> import UIComponents 1.0</td></tr></table></div><ul>
-<li><a href="qml-uicomponents-switch-members.html">List of all members, including inherited members</a></li>
-</ul>
-<a name="properties"></a>
-<h2 id="properties">Properties</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-uicomponents-switch.html#on-prop">on</a></b></b> : bool</li>
-</ul>
-<a name="methods"></a>
-<h2 id="methods">Methods</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-uicomponents-switch.html#toggle-method">toggle</a></b></b>()</li>
-</ul>
-<!-- $$$Switch-description -->
-<a name="details"></a>
-<h2 id="details">Detailed Description</h2>
-<p>A toggle switch has two states: an <code>on</code> and an <code>off</code> state. The <code>off</code> state is when the <a href="qml-uicomponents-switch.html#on-prop">on</a> property is set to <code>false</code>.</p>
-<p>The ToggleSwitch component is part of the <a href="uicomponents-qmlmodule.html">UI Components</a> module.</p>
-<p>This documentation is part of the <a href="test-componentset-example.html">UIComponents</a> example.</p>
-<!-- @@@Switch -->
-<h2>Property Documentation</h2>
-<!-- $$$on -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="on-prop">
-<td class="tblQmlPropNode"><p>
-<a name="on-prop"></a><span class="name">on</span> : <span class="type">bool</span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Indicates the state of the switch. If <code>false</code>, then the switch is in the <code>off</code> state.</p>
-</div></div><!-- @@@on -->
-<br/>
-<h2>Method Documentation</h2>
-<!-- $$$toggle[overload1]$$$toggle -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="toggle-method">
-<td class="tblQmlFuncNode"><p>
-<a name="toggle-method"></a><span class="name">toggle</span>()</p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>A method to toggle the switch. If the switch is <code>on</code>, the toggling it will turn it <code>off</code>. Toggling a switch in the <code>off</code> position will turn it <code>on</code>.</p>
-</div></div><!-- @@@toggle -->
-<br/>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-tabwidget.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-tabwidget.html
deleted file mode 100644
index 4122bd553..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-tabwidget.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- TabWidget.qml -->
- <title>TabWidget QML Type | Test</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#properties">Properties</a></li>
-<li class="level1"><a href="#details">Detailed Description</a></li>
-<li class="level2"><a href="#adding-tabs">Adding Tabs</a></li>
-</ul>
-</div>
-<div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">TabWidget QML Type</h1>
-<span class="subtitle"></span>
-<!-- $$$TabWidget-brief -->
-<p>A widget that places its children as tabs. <a href="#details">More...</a></p>
-<!-- @@@TabWidget -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Import Statement:</td><td class="memItemRight bottomAlign"> import UIComponents 1.0</td></tr></table></div><ul>
-<li><a href="qml-uicomponents-tabwidget-members.html">List of all members, including inherited members</a></li>
-</ul>
-<a name="properties"></a>
-<h2 id="properties">Properties</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-uicomponents-tabwidget.html#current-prop">current</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-uicomponents-tabwidget.html#sampleReadOnlyProperty-prop">sampleReadOnlyProperty</a></b></b> : int</li>
-</ul>
-<!-- $$$TabWidget-description -->
-<a name="details"></a>
-<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">UI Components</a> module.</p>
-<p>This documentation is part of the <a href="test-componentset-example.html">UIComponents</a> example.</p>
-<a name="adding-tabs"></a>
-<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">TabWidget {
- id: tabwidget
-
- Rectangle {
- id: tab1
- color: <span class="string">&quot;red&quot;</span>
- <span class="comment">//... omitted</span>
- }
- Rectangle {
- id: tab2
- color: <span class="string">&quot;blue&quot;</span>
- <span class="comment">//... omitted</span>
- }
-
-}</pre>
-<!-- @@@TabWidget -->
-<h2>Property Documentation</h2>
-<!-- $$$current -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="current-prop">
-<td class="tblQmlPropNode"><p>
-<a name="current-prop"></a><span class="name">current</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>The currently active tab in the <a href="qml-uicomponents-tabwidget.html">TabWidget</a>.</p>
-</div></div><!-- @@@current -->
-<br/>
-<!-- $$$sampleReadOnlyProperty -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="sampleReadOnlyProperty-prop">
-<td class="tblQmlPropNode"><p>
-<a name="sampleReadOnlyProperty-prop"></a><span class="qmlextra">[read-only] </span><span class="name">sampleReadOnlyProperty</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>A sample <code>read-only</code> property. A contrived property to demonstrate QDoc's ability to detect read-only properties.</p>
-<p>The signature is:</p>
-<pre class="cpp">readonly property <span class="type"><a href="qml-int.html">int</a></span> sampleReadOnlyProperty: <span class="number">0</span></pre>
-<p>Note that the property must be initialized to a value.</p>
-</div></div><!-- @@@sampleReadOnlyProperty -->
-<br/>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups-docbook/qml-qdoc-test-parent.xml b/tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups-docbook/qml-qdoc-test-parent.xml
deleted file mode 100644
index 89423831c..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups-docbook/qml-qdoc-test-parent.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?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>Parent QML Type</db:title>
-<db:productname>Test</db:productname>
-<db:titleabbrev>A test project for QDoc build artifacts</db:titleabbrev>
-<db:abstract>
-<db:para>Base QML type.</db:para>
-</db:abstract>
-</db:info>
-<db:variablelist>
-<db:varlistentry>
-<db:term>Import Statement</db:term>
-<db:listitem>
-<db:para>import QDoc.Test 1.1</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term>Inherited By:</db:term>
-<db:listitem>
-<db:para><db:link xlink:href="qml-qdoc-test-anotherchild.xml" xlink:role="">AnotherChild</db:link></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="property-documentation">
-<db:title>Property Documentation</db:title>
-<db:section xml:id="group-prop">
-<db:title>group group</db:title>
-<db:bridgehead renderas="sect2" xml:id="group.a-prop">group.a : int</db:bridgehead>
-<db:fieldsynopsis>
-<db:type>int</db:type>
-<db:varname>group.a</db:varname>
-<db:modifier>writable</db:modifier>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">Test</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:bridgehead renderas="sect2" xml:id="group.b-prop">[read-only] group.b : int</db:bridgehead>
-<db:fieldsynopsis>
-<db:type>int</db:type>
-<db:varname>group.b</db:varname>
-<db:modifier>[read-only]</db:modifier>
-
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">Test</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:bridgehead renderas="sect2" xml:id="group.c-prop">[since 2.0] group.c : int</db:bridgehead>
-<db:fieldsynopsis>
-<db:type>int</db:type>
-<db:varname>group.c</db:varname>
-<db:modifier>writable</db:modifier>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">Test</db:synopsisinfo>
-</db:fieldsynopsis>
-<db:para>Property group.</db:para>
-</db:section>
-</db:section>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-anotherchild-members.html b/tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-anotherchild-members.html
deleted file mode 100644
index aa80b49df..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-anotherchild-members.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- parent.qdoc -->
- <title>List of All Members for AnotherChild | Test</title>
-</head>
-<body>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">List of All Members for AnotherChild</h1>
-<p>This is the complete list of members for <a href="qml-qdoc-test-anotherchild.html">AnotherChild</a>, including inherited members.</p>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-anotherchild.html#name-prop">name</a></b></b> : string</li>
-</ul>
-<p>The following members are inherited from <a href="qml-qdoc-test-parent.html">Parent</a>.</p>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-parent.html#group-prop">group</a></b></b><ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-parent.html#group.a-prop">group.a</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-parent.html#group.b-prop">group.b</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-parent.html#group.c-prop">group.c</a></b></b> : int</li>
-</ul>
-</li>
-</ul>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-parent.html b/tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-parent.html
deleted file mode 100644
index 7aace00f6..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-parent.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- parent.qdoc -->
- <title>Parent QML Type | Test</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#properties">Properties</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">Parent QML Type</h1>
-<span class="subtitle"></span>
-<!-- $$$Parent-brief -->
-<p>Base QML type. <a href="#details">More...</a></p>
-<!-- @@@Parent -->
-<div class="table"><table class="alignedsummary">
-<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"> Inherited By:</td><td class="memItemRight bottomAlign"> <p><a href="qml-qdoc-test-anotherchild.html">AnotherChild</a></p>
-</td></tr></table></div><ul>
-<li><a href="qml-qdoc-test-parent-members.html">List of all members, including inherited members</a></li>
-</ul>
-<a name="properties"></a>
-<h2 id="properties">Properties</h2>
-<ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-parent.html#group-prop">group</a></b></b><ul>
-<li class="fn"><b><b><a href="qml-qdoc-test-parent.html#group.a-prop">group.a</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-parent.html#group.b-prop">group.b</a></b></b> : int</li>
-<li class="fn"><b><b><a href="qml-qdoc-test-parent.html#group.c-prop">group.c</a></b></b> : int</li>
-</ul>
-</li>
-</ul>
-<!-- $$$Parent-description -->
-<a name="details"></a>
-<h2 id="details">Detailed Description</h2>
-<!-- @@@Parent -->
-<h2>Property Documentation</h2>
-<!-- $$$group -->
-<div class="qmlitem"><div class="qmlproto">
-<div class="table"><table class="qmlname">
-<tr valign="top" class="even" id="group-prop"><th class="centerAlign"><p><a name="group-prop"></a><b>group group</b></p></th></tr>
-<tr valign="top" class="odd" id="group.a-prop">
-<td class="tblQmlPropNode"><p>
-<a name="group.a-prop"></a><span class="name">group.a</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-<tr valign="top" class="odd" id="group.b-prop">
-<td class="tblQmlPropNode"><p>
-<a name="group.b-prop"></a><span class="qmlextra">[read-only] </span><span class="name">group.b</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-<tr valign="top" class="odd" id="group.c-prop">
-<td class="tblQmlPropNode"><p>
-<a name="group.c-prop"></a><span class="qmlextra">[since 2.0] </span><span class="name">group.c</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
-</table></div></div>
-<div class="qmldoc"><p>Property group.</p>
-</div></div><!-- @@@group -->
-<br/>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/scopedenum-docbook/testqdoc-test.xml b/tests/auto/qdoc/generatedoutput/expected_output/scopedenum-docbook/testqdoc-test.xml
deleted file mode 100644
index 9c5530dd3..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/scopedenum-docbook/testqdoc-test.xml
+++ /dev/null
@@ -1,284 +0,0 @@
-<?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>Test Class</db:title>
-<db:subtitle>TestQDoc::Test</db:subtitle>
-<db:productname>TestCPP</db:productname>
-<db:titleabbrev>TestCPP Reference Documentation</db:titleabbrev>
-<db:abstract>
-<db:para>A class in a namespace.</db:para>
-</db:abstract>
-</db:info>
-<db:variablelist>
-<db:varlistentry>
-<db:term>Header</db:term>
-<db:listitem>
-<db:para>Test</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term>CMake</db:term>
-<db:listitem>
-<db:para>find_package(Qt6 COMPONENT QDocTest)</db:para>
-<db:para>target_link_libraries(mytarget PUBLIC Qt::QDocTest)</db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term>qmake</db:term>
-<db:listitem>
-<db:para>QT += testcpp</db:para>
-</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:variablelist>
-<db:section xml:id="details">
-<db:title>Detailed Description</db:title>
-</db:section>
-<db:section xml:id="member-type-documentation">
-<db:title>Member Type Documentation</db:title>
-<db:section xml:id="ScopedEnum-enum">
-<db:title>Test::enum ScopedEnum</db:title>
-<db:enumsynopsis>
-<db:enumname>ScopedEnum</db:enumname>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-<db:enumitem db:enumidentifier="This" db:enumvalue="0x01"/>
-<db:enumitem db:enumidentifier="That" db:enumvalue="0x02"/>
-<db:enumitem db:enumidentifier="All" db:enumvalue="This | That"/>
-<db:enumitem db:enumidentifier="OmittedValue" db:enumvalue="99"/>
-</db:enumsynopsis>
-<db:informaltable>
-<db:thead>
-<db:tr>
-<db:th>Constant</db:th>
-<db:th>Value</db:th>
-<db:th>Description</db:th>
-</db:tr>
-</db:thead>
-<db:tr>
-<db:td>
-<db:para><db:code><db:emphasis role="bold"><db:link xlink:href="testqdoc.xml">TestQDoc</db:link></db:emphasis>::<db:emphasis role="bold"><db:link xlink:href="testqdoc-test.xml">Test</db:link></db:emphasis>::<db:emphasis role="bold"><db:link xlink:href="">ScopedEnum</db:link></db:emphasis>::This</db:code></db:para>
-</db:td>
-<db:td><db:code>0x01</db:code></db:td>
-<db:td>
-<db:para>Something</db:para>
-</db:td>
-</db:tr>
-<db:tr>
-<db:td>
-<db:para><db:code><db:emphasis role="bold"><db:link xlink:href="testqdoc.xml">TestQDoc</db:link></db:emphasis>::<db:emphasis role="bold"><db:link xlink:href="testqdoc-test.xml">Test</db:link></db:emphasis>::<db:emphasis role="bold"><db:link xlink:href="">ScopedEnum</db:link></db:emphasis>::That</db:code></db:para>
-</db:td>
-<db:td><db:code>0x02</db:code></db:td>
-<db:td>
-<db:para>Something else</db:para>
-</db:td>
-</db:tr>
-<db:tr>
-<db:td>
-<db:para><db:code><db:emphasis role="bold"><db:link xlink:href="testqdoc.xml">TestQDoc</db:link></db:emphasis>::<db:emphasis role="bold"><db:link xlink:href="testqdoc-test.xml">Test</db:link></db:emphasis>::<db:emphasis role="bold"><db:link xlink:href="">ScopedEnum</db:link></db:emphasis>::All</db:code></db:para>
-</db:td>
-<db:td><db:code>This | That</db:code></db:td>
-<db:td>
-<db:para>Everything</db:para>
-</db:td>
-</db:tr>
-</db:informaltable>
-</db:section>
-<db:section xml:id="SomeType-typedef">
-<db:title>Test::typedef SomeType</db:title>
-<db:typedefsynopsis>
-<db:type>SomeType</db:type><db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:typedefsynopsis>
-<db:para>A typedef.</db:para>
-</db:section>
-</db:section>
-<db:section xml:id="member-function-documentation">
-<db:title>Member Function Documentation</db:title>
-<db:section xml:id="overload">
-<db:title>[protected] Test::void overload()</db:title>
-<db:bridgehead renderas="sect2" xml:id="overload-1">[protected, since Test 1.2] Test::void 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="funcPtr">
-<db:title>Test::void (*)(bool) funcPtr(bool <db:emphasis>b</db:emphasis>, const char *<db:emphasis>s</db:emphasis>)</db:title>
-<db:methodsynopsis>
-<db:type>void (*)(bool)</db:type>
-<db:methodname>funcPtr</db:methodname>
-<db:methodparam>
-<db:type>bool</db:type>
-<db:parameter>b</db:parameter>
-</db:methodparam>
-<db:methodparam>
-<db:type>const char *</db:type>
-<db:parameter>s</db:parameter>
-</db:methodparam>
-<db:synopsisinfo db:role="meta">plain</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">void (*)(bool) funcPtr(bool b, const char *s)</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:methodsynopsis>
-<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>
-</db:section>
-<db:section xml:id="inlineFunction">
-<db:title>Test::void inlineFunction()</db:title>
-<db:methodsynopsis>
-<db:void/>
-<db:methodname>inlineFunction</db:methodname>
-<db:void/>
-<db:synopsisinfo db:role="meta">plain</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">void inlineFunction()</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:methodsynopsis>
-<db:para>An inline function, documented using the \fn QDoc command.</db:para>
-</db:section>
-<db:section xml:id="someFunction">
-<db:title>Test::int someFunction(int <db:emphasis>v</db:emphasis> = 0)</db:title>
-<db:methodsynopsis>
-<db:type>int</db:type>
-<db:methodname>someFunction</db:methodname>
-<db:methodparam>
-<db:type>int</db:type>
-<db:parameter>v</db:parameter>
-<db:initializer>0</db:initializer>
-</db:methodparam>
-<db:synopsisinfo db:role="meta">plain</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">int someFunction(int v)</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:methodsynopsis>
-<db:para>Function that takes a parameter <db:code role="parameter">v</db:code>. Also returns the value of <db:code role="parameter">v</db:code>.</db:para>
-</db:section>
-<db:section xml:id="someFunctionDefaultArg">
-<db:title>Test::void someFunctionDefaultArg(int <db:emphasis>i</db:emphasis>, bool <db:emphasis>b</db:emphasis> = false)</db:title>
-<db:methodsynopsis>
-<db:void/>
-<db:methodname>someFunctionDefaultArg</db:methodname>
-<db:methodparam>
-<db:type>int</db:type>
-<db:parameter>i</db:parameter>
-</db:methodparam>
-<db:methodparam>
-<db:type>bool</db:type>
-<db:parameter>b</db:parameter>
-<db:initializer>false</db:initializer>
-</db:methodparam>
-<db:synopsisinfo db:role="meta">plain</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">void someFunctionDefaultArg(int i, bool b)</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:methodsynopsis>
-<db:para>Function that takes a parameter <db:code role="parameter">i</db:code> and <db:code role="parameter">b</db:code>.</db:para>
-</db:section>
-<db:section xml:id="virtualFun">
-<db:title>[virtual] Test::void virtualFun()</db:title>
-<db:methodsynopsis>
-<db:modifier>virtual</db:modifier>
-<db:void/>
-<db:methodname>virtualFun</db:methodname>
-<db:void/>
-<db:synopsisinfo db:role="meta">plain</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">void virtualFun()</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:methodsynopsis>
-<db:para>Function that must be reimplemented.</db:para>
-</db:section>
-</db:section>
-<db:section xml:id="macro-documentation">
-<db:title>Macro Documentation</db:title>
-<db:section xml:id="QDOCTEST_MACRO2">
-<db:title>[since Test 1.1] QDOCTEST_MACRO2(<db:emphasis>x</db:emphasis>)</db:title>
-<db:methodsynopsis>
-<db:methodname>QDOCTEST_MACR</db:methodname>
-<db:methodparam>
-<db:type></db:type>
-<db:parameter>x</db:parameter>
-</db:methodparam>
-<db:synopsisinfo db:role="meta">macrowithparams</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">QDOCTEST_MACRO2( x)</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">active</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:methodsynopsis>
-<db:para>A macro with argument <db:code role="parameter">x</db:code>.</db:para>
-<db:para>This function was introduced in Test 1.1.</db:para>
-</db:section>
-</db:section>
-<db:section xml:id="obsolete">
-<db:title>Obsolete Members for Test</db:title>
-<db:para><db:emphasis role="bold">The following members of class <db:link xlink:href="testqdoc-test.xml">Test</db:link> are obsolete.</db:emphasis> They are provided to keep old source code working. We strongly advise against using them in new code.</db:para>
-<db:section xml:id="member-function-documentation">
-<db:title>Member Function Documentation</db:title>
-<db:section xml:id="anotherObsoleteMember">
-<db:title>Test::void anotherObsoleteMember()</db:title>
-<db:methodsynopsis>
-<db:void/>
-<db:methodname>anotherObsoleteMember</db:methodname>
-<db:void/>
-<db:synopsisinfo db:role="meta">plain</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">void anotherObsoleteMember()</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">obsolete</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:methodsynopsis>
-<db:para>This function is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.</db:para>
-<db:para>Use <db:link xlink:href="testqdoc-test.xml#obsoleteMember">obsoleteMember</db:link>() instead.</db:para>
-</db:section>
-<db:section xml:id="deprecatedMember">
-<db:title>Test::void deprecatedMember()</db:title>
-<db:methodsynopsis>
-<db:void/>
-<db:methodname>deprecatedMember</db:methodname>
-<db:void/>
-<db:synopsisinfo db:role="meta">plain</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">void deprecatedMember()</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">obsolete</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:methodsynopsis>
-<db:para>This function is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.</db:para>
-<db:para>Use <db:link xlink:href="testqdoc-test.xml#someFunction">someFunction</db:link>() instead.</db:para>
-</db:section>
-<db:section xml:id="obsoleteMember">
-<db:title>Test::void obsoleteMember()</db:title>
-<db:methodsynopsis>
-<db:void/>
-<db:methodname>obsoleteMember</db:methodname>
-<db:void/>
-<db:synopsisinfo db:role="meta">plain</db:synopsisinfo>
-<db:synopsisinfo db:role="signature">void obsoleteMember()</db:synopsisinfo>
-<db:synopsisinfo db:role="access">public</db:synopsisinfo>
-<db:synopsisinfo db:role="status">obsolete</db:synopsisinfo>
-<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
-<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo>
-</db:methodsynopsis>
-<db:para>This function is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.</db:para>
-<db:para>Use <db:link xlink:href="testqdoc-test.xml#someFunction">someFunction</db:link>() instead.</db:para>
-</db:section>
-</db:section>
-</db:section>
-</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/scopedenum/testqdoc-test.html b/tests/auto/qdoc/generatedoutput/expected_output/scopedenum/testqdoc-test.html
deleted file mode 100644
index 84ddc86dc..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/scopedenum/testqdoc-test.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>Test Class | TestCPP</title>
-</head>
-<body>
-<li>Test</li>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#public-types">Public Types</a></li>
-<li class="level1"><a href="#public-functions">Public Functions</a></li>
-<li class="level1"><a href="#protected-functions">Protected Functions</a></li>
-<li class="level1"><a href="#macros">Macros</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">Test Class</h1>
-<span class="small-subtitle">class <a href="testqdoc.html">TestQDoc</a>::Test</span>
-<!-- $$$Test-brief -->
-<p>A class in a namespace. <a href="#details">More...</a></p>
-<!-- @@@Test -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;Test&gt;</span>
-</td></tr><tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 COMPONENT QDocTest) <br/>
-target_link_libraries(mytarget PUBLIC Qt::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"> Inherited By:</td><td class="memItemRight bottomAlign"> <p><a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></p>
-</td></tr></table></div><ul>
-<li><a href="testqdoc-test-members.html">List of all members, including inherited members</a></li>
-<li><a href="testqdoc-test-obsolete.html">Obsolete members</a></li>
-</ul>
-<a name="public-types"></a>
-<h2 id="public-types">Public Types</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> enum class </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#ScopedEnum-enum">ScopedEnum</a></b> { This, That, All }</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> typedef </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#SomeType-typedef">SomeType</a></b></td></tr>
-</table></div>
-<a name="public-functions"></a>
-<h2 id="public-functions">Public Functions</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> void (*)(bool) </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#funcPtr">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">inlineFunction</a></b>()</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> int </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#someFunction">someFunction</a></b>(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">someFunctionDefaultArg</a></b>(int <i>i</i>, bool <i>b</i> = false)</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> virtual void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#virtualFun">virtualFun</a></b>()</td></tr>
-</table></div>
-<a name="protected-functions"></a>
-<h2 id="protected-functions">Protected Functions</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#overload">overload</a></b>()</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#overload-1">overload</a></b>(bool <i>b</i>)</td></tr>
-</table></div>
-<a name="macros"></a>
-<h2 id="macros">Macros</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#QDOCTEST_MACRO2">QDOCTEST_MACRO2</a></b>(<i>x</i>)</td></tr>
-</table></div>
-<a name="details"></a>
-<!-- $$$Test-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-</div>
-<!-- @@@Test -->
-<div class="types">
-<h2>Member Type Documentation</h2>
-<!-- $$$ScopedEnum$$$This$$$That$$$All$$$OmittedValue -->
-<h3 class="fn" id="ScopedEnum-enum"><a name="ScopedEnum-enum"></a>enum class Test::<span class="name">ScopedEnum</span></h3>
-<div class="table"><table class="valuelist"><tr valign="top" class="odd"><th class="tblConst">Constant</th><th class="tblval">Value</th><th class="tbldscr">Description</th></tr>
-<tr><td class="topAlign"><code>TestQDoc::Test::ScopedEnum::This</code></td><td class="topAlign tblval"><code>0x01</code></td><td class="topAlign">Something</td></tr>
-<tr><td class="topAlign"><code>TestQDoc::Test::ScopedEnum::That</code></td><td class="topAlign tblval"><code>0x02</code></td><td class="topAlign">Something else</td></tr>
-<tr><td class="topAlign"><code>TestQDoc::Test::ScopedEnum::All</code></td><td class="topAlign tblval"><code>This | That</code></td><td class="topAlign">Everything</td></tr>
-</table></div>
-<!-- @@@ScopedEnum -->
-<!-- $$$SomeType -->
-<h3 class="fn" id="SomeType-typedef"><a name="SomeType-typedef"></a>typedef Test::<span class="name">SomeType</span></h3>
-<p>A typedef.</p>
-<!-- @@@SomeType -->
-</div>
-<div class="func">
-<h2>Member Function Documentation</h2>
-<!-- $$$ -->
-<div class="fngroup">
-<h3 class="fn fngroupitem" id="overload"><a name="overload"></a><code>[protected] </code><span class="type">void</span> Test::<span class="name">overload</span>()</h3><h3 class="fn fngroupitem" id="overload-1"><a name="overload-1"></a><code>[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>b</i>.</p>
-<!-- @@@ -->
-<!-- $$$funcPtr[overload1]$$$funcPtrboolconstchar* -->
-<h3 class="fn" id="funcPtr"><a name="funcPtr"></a><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>b</i> and <i>s</i>.</p>
-<!-- @@@funcPtr -->
-<!-- $$$inlineFunction[overload1]$$$inlineFunction -->
-<h3 class="fn" id="inlineFunction"><a name="inlineFunction"></a><span class="type">void</span> Test::<span class="name">inlineFunction</span>()</h3>
-<p>An inline function, documented using the \fn QDoc command.</p>
-<!-- @@@inlineFunction -->
-<!-- $$$someFunction[overload1]$$$someFunctionint -->
-<h3 class="fn" id="someFunction"><a name="someFunction"></a><span class="type">int</span> Test::<span class="name">someFunction</span>(<span class="type">int</span> <i>v</i> = 0)</h3>
-<p>Function that takes a parameter <i>v</i>. Also returns the value of <i>v</i>.</p>
-<!-- @@@someFunction -->
-<!-- $$$someFunctionDefaultArg[overload1]$$$someFunctionDefaultArgintbool -->
-<h3 class="fn" id="someFunctionDefaultArg"><a name="someFunctionDefaultArg"></a><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)</h3>
-<p>Function that takes a parameter <i>i</i> and <i>b</i>.</p>
-<!-- @@@someFunctionDefaultArg -->
-<!-- $$$virtualFun[overload1]$$$virtualFun -->
-<h3 class="fn" id="virtualFun"><a name="virtualFun"></a><code>[virtual] </code><span class="type">void</span> Test::<span class="name">virtualFun</span>()</h3>
-<p>Function that must be reimplemented.</p>
-<!-- @@@virtualFun -->
-</div>
-<div class="macros">
-<h2>Macro Documentation</h2>
-<!-- $$$QDOCTEST_MACRO2[overload1]$$$QDOCTEST_MACRO2 -->
-<h3 class="fn" id="QDOCTEST_MACRO2"><a name="QDOCTEST_MACRO2"></a><code>[since Test 1.1] </code><span class="name">QDOCTEST_MACRO2</span>(<i>x</i>)</h3>
-<p>A macro with argument <i>x</i>.</p>
-<p>This function was introduced in Test 1.1.</p>
-<!-- @@@QDOCTEST_MACRO2 -->
-</div>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/second.html b/tests/auto/qdoc/generatedoutput/expected_output/second.html
deleted file mode 100644
index 04a4862cd..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/second.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- main.cpp -->
- <title>Second Class | TestModule</title>
-</head>
-<body>
-<li>Second</li>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></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">Second Class</h1>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;Second&gt;</span>
-</td></tr></table></div><ul>
-</ul>
-<a name="details"></a>
-<!-- $$$Second-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-<p>This is a second class</p>
-</div>
-<!-- @@@Second -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/space.html b/tests/auto/qdoc/generatedoutput/expected_output/space.html
deleted file mode 100644
index b40932b2f..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/space.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- space.cpp -->
- <title>Space Namespace | UsingDirective</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#functions">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">Space Namespace</h1>
-<!-- $$$Space-brief -->
-<p>A namespace..&#x2e;in space. <a href="#details">More...</a></p>
-<!-- @@@Space -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;Space&gt;</span>
-</td></tr></table></div><ul>
-</ul>
-<a name="functions"></a>
-<h2 id="functions">Functions</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="space.html#spaceFun">spaceFun</a></b>(Space::spacename <i>space</i>)</td></tr>
-</table></div>
-<a name="details"></a>
-<!-- $$$Space-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-</div>
-<!-- @@@Space -->
-<div class="func">
-<h2>Function Documentation</h2>
-<!-- $$$spaceFun[overload1]$$$spaceFunSpace::spacename -->
-<h3 class="fn" id="spaceFun"><a name="spaceFun"></a><span class="type">void</span> <span class="name">spaceFun</span>(<span class="type">Space::spacename</span> <i>space</i>)</h3>
-<p>A <i>space</i> function.</p>
-<!-- @@@spaceFun -->
-</div>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/template/bar.html b/tests/auto/qdoc/generatedoutput/expected_output/template/bar.html
deleted file mode 100644
index 8ed714702..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/template/bar.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testtemplate.cpp -->
- <title>Bar Class | TestCPP</title>
-</head>
-<body>
-<li>Bar</li>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></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">Bar Class</h1>
-<span class="small-subtitle">template &lt;typename T, typename D&gt; class Bar</span>
-<!-- $$$Bar-brief -->
-<p>Another class template. <a href="#details">More...</a></p>
-<!-- @@@Bar -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;Bar&gt;</span>
-</td></tr><tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 COMPONENT QDocTest) <br/>
-target_link_libraries(mytarget PUBLIC Qt::QDocTest)</td></tr><tr><td class="memItemLeft rightAlign topAlign"> qmake:</td><td class="memItemRight bottomAlign"> QT += testcpp</td></tr></table></div><ul>
-</ul>
-<a name="details"></a>
-<!-- $$$Bar-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-</div>
-<!-- @@@Bar -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/template/baz.html b/tests/auto/qdoc/generatedoutput/expected_output/template/baz.html
deleted file mode 100644
index 12e24271a..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/template/baz.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testtemplate.cpp -->
- <title>Baz Struct | TestCPP</title>
-</head>
-<body>
-<li>Baz</li>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></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">Baz Struct</h1>
-<span class="small-subtitle">template &lt;template &lt;typename&gt; class X, typename Y&gt; struct Baz</span>
-<!-- $$$Baz-brief -->
-<p>Class template template. <a href="#details">More...</a></p>
-<!-- @@@Baz -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;Baz&gt;</span>
-</td></tr><tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 COMPONENT QDocTest) <br/>
-target_link_libraries(mytarget PUBLIC Qt::QDocTest)</td></tr><tr><td class="memItemLeft rightAlign topAlign"> qmake:</td><td class="memItemRight bottomAlign"> QT += testcpp</td></tr></table></div><ul>
-</ul>
-<a name="details"></a>
-<!-- $$$Baz-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-</div>
-<!-- @@@Baz -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/template/foo.html b/tests/auto/qdoc/generatedoutput/expected_output/template/foo.html
deleted file mode 100644
index b5841de79..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/template/foo.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testtemplate.cpp -->
- <title>Foo Class | TestCPP</title>
-</head>
-<body>
-<li>Foo</li>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></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">Foo Class</h1>
-<span class="small-subtitle">template &lt;typename T&gt; class Foo</span>
-<!-- $$$Foo-brief -->
-<p>Class template. <a href="#details">More...</a></p>
-<!-- @@@Foo -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;Foo&gt;</span>
-</td></tr><tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 COMPONENT QDocTest) <br/>
-target_link_libraries(mytarget PUBLIC Qt::QDocTest)</td></tr><tr><td class="memItemLeft rightAlign topAlign"> qmake:</td><td class="memItemRight bottomAlign"> QT += testcpp</td></tr></table></div><ul>
-</ul>
-<a name="details"></a>
-<!-- $$$Foo-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-</div>
-<!-- @@@Foo -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test-struct.html b/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test-struct.html
deleted file mode 100644
index 1624e4fd2..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test-struct.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>Struct Struct | TestCPP</title>
-</head>
-<body>
-<li>Struct</li>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></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">Struct Struct</h1>
-<span class="small-subtitle">template &lt;typename D, typename T&gt; struct <a href="testqdoc.html">TestQDoc</a>::<a href="testqdoc-test.html">Test</a>::Struct</span>
-<!-- $$$Struct-brief -->
-<p>Templated struct. <a href="#details">More...</a></p>
-<!-- @@@Struct -->
-<ul>
-</ul>
-<a name="details"></a>
-<!-- $$$Struct-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-</div>
-<!-- @@@Struct -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test.html b/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test.html
deleted file mode 100644
index d939262d2..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>Test Class | TestCPP</title>
-</head>
-<body>
-<li>Test</li>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#public-types">Public Types</a></li>
-<li class="level1"><a href="#public-functions">Public Functions</a></li>
-<li class="level1"><a href="#protected-functions">Protected Functions</a></li>
-<li class="level1"><a href="#macros">Macros</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">Test Class</h1>
-<span class="small-subtitle">class <a href="testqdoc.html">TestQDoc</a>::Test</span>
-<!-- $$$Test-brief -->
-<p>A class in a namespace. <a href="#details">More...</a></p>
-<!-- @@@Test -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;Test&gt;</span>
-</td></tr><tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 COMPONENT QDocTest) <br/>
-target_link_libraries(mytarget PUBLIC Qt::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"> Inherited By:</td><td class="memItemRight bottomAlign"> <p><a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></p>
-</td></tr></table></div><ul>
-<li><a href="testqdoc-test-members.html">List of all members, including inherited members</a></li>
-<li><a href="testqdoc-test-obsolete.html">Obsolete members</a></li>
-</ul>
-<a name="public-types"></a>
-<h2 id="public-types">Public Types</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> struct </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-struct.html">Struct</a></b></td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> typedef </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#SomeType-typedef">SomeType</a></b></td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> (alias) </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#Specialized-alias">Specialized</a></b></td></tr>
-</table></div>
-<a name="public-functions"></a>
-<h2 id="public-functions">Public Functions</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> void (*)(bool) </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#funcPtr">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">inlineFunction</a></b>()</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> int </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#someFunction">someFunction</a></b>(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">someFunctionDefaultArg</a></b>(int <i>i</i>, bool <i>b</i> = false)</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> virtual void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#virtualFun">virtualFun</a></b>()</td></tr>
-</table></div>
-<a name="protected-functions"></a>
-<h2 id="protected-functions">Protected Functions</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#funcTemplate">funcTemplate</a></b>(T1 <i>a</i>, T2 <i>b</i>)</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#overload">overload</a></b>()</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#overload-1">overload</a></b>(bool <i>b</i>)</td></tr>
-</table></div>
-<a name="macros"></a>
-<h2 id="macros">Macros</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#QDOCTEST_MACRO2">QDOCTEST_MACRO2</a></b>(<i>x</i>)</td></tr>
-</table></div>
-<a name="details"></a>
-<!-- $$$Test-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-</div>
-<!-- @@@Test -->
-<div class="types">
-<h2>Member Type Documentation</h2>
-<!-- $$$SomeType -->
-<h3 class="fn" id="SomeType-typedef"><a name="SomeType-typedef"></a>typedef Test::<span class="name">SomeType</span></h3>
-<p>A typedef.</p>
-<!-- @@@SomeType -->
-<!-- $$$Specialized -->
-<h3 class="fn" id="Specialized-alias"><a name="Specialized-alias"></a><code>[alias] </code>template&lt;typename T&gt; Test::<span class="name">Specialized</span></h3>
-<p>This is a type alias for Struct&lt;int, T&gt;.</p>
-<!-- @@@Specialized -->
-</div>
-<div class="func">
-<h2>Member Function Documentation</h2>
-<!-- $$$ -->
-<div class="fngroup">
-<h3 class="fn fngroupitem" id="overload"><a name="overload"></a><code>[protected] </code><span class="type">void</span> Test::<span class="name">overload</span>()</h3><h3 class="fn fngroupitem" id="overload-1"><a name="overload-1"></a><code>[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>b</i>.</p>
-<!-- @@@ -->
-<!-- $$$funcPtr[overload1]$$$funcPtrboolconstchar* -->
-<h3 class="fn" id="funcPtr"><a name="funcPtr"></a><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>b</i> and <i>s</i>.</p>
-<!-- @@@funcPtr -->
-<!-- $$$funcTemplate[overload1]$$$funcTemplateT1T2 -->
-<h3 class="fn" id="funcTemplate"><a name="funcTemplate"></a><code>[protected] </code>template &lt;typename T1, typename T2&gt; <span class="type">void</span> Test::<span class="name">funcTemplate</span>(<span class="type">T1</span> <i>a</i>, <span class="type">T2</span> <i>b</i>)</h3>
-<p>Function template with two parameters, <i>a</i> and <i>b</i>.</p>
-<!-- @@@funcTemplate -->
-<!-- $$$inlineFunction[overload1]$$$inlineFunction -->
-<h3 class="fn" id="inlineFunction"><a name="inlineFunction"></a><span class="type">void</span> Test::<span class="name">inlineFunction</span>()</h3>
-<p>An inline function, documented using the \fn QDoc command.</p>
-<!-- @@@inlineFunction -->
-<!-- $$$someFunction[overload1]$$$someFunctionint -->
-<h3 class="fn" id="someFunction"><a name="someFunction"></a><span class="type">int</span> Test::<span class="name">someFunction</span>(<span class="type">int</span> <i>v</i> = 0)</h3>
-<p>Function that takes a parameter <i>v</i>. Also returns the value of <i>v</i>.</p>
-<!-- @@@someFunction -->
-<!-- $$$someFunctionDefaultArg[overload1]$$$someFunctionDefaultArgintbool -->
-<h3 class="fn" id="someFunctionDefaultArg"><a name="someFunctionDefaultArg"></a><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)</h3>
-<p>Function that takes a parameter <i>i</i> and <i>b</i>.</p>
-<!-- @@@someFunctionDefaultArg -->
-<!-- $$$virtualFun[overload1]$$$virtualFun -->
-<h3 class="fn" id="virtualFun"><a name="virtualFun"></a><code>[virtual] </code><span class="type">void</span> Test::<span class="name">virtualFun</span>()</h3>
-<p>Function that must be reimplemented.</p>
-<!-- @@@virtualFun -->
-</div>
-<div class="macros">
-<h2>Macro Documentation</h2>
-<!-- $$$QDOCTEST_MACRO2[overload1]$$$QDOCTEST_MACRO2 -->
-<h3 class="fn" id="QDOCTEST_MACRO2"><a name="QDOCTEST_MACRO2"></a><code>[since Test 1.1] </code><span class="name">QDOCTEST_MACRO2</span>(<i>x</i>)</h3>
-<p>A macro with argument <i>x</i>.</p>
-<p>This function was introduced in Test 1.1.</p>
-<!-- @@@QDOCTEST_MACRO2 -->
-</div>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/test-cmaketest-example.html b/tests/auto/qdoc/generatedoutput/expected_output/test-cmaketest-example.html
deleted file mode 100644
index 3c3987041..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/test-cmaketest-example.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- cmaketest.qdoc -->
- <title>CMake Example Project | Test</title>
-</head>
-<body>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">CMake Example Project</h1>
-<span class="subtitle"></span>
-<!-- $$$cmaketest-description -->
-<div class="descr"> <a name="details"></a>
-<p class="centerAlign"><img src="images/leonardo-da-vinci.png" alt="" /></p><p>Files:</p>
-<ul>
-<li><a href="test-cmaketest-cmakelists-txt.html">cmaketest/CMakeLists.txt</a></li>
-<li><a href="test-cmaketest-main-cpp.html">cmaketest/main.cpp</a></li>
-</ul>
-</div>
-<!-- @@@cmaketest -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/test-componentset-example.html b/tests/auto/qdoc/generatedoutput/expected_output/test-componentset-example.html
deleted file mode 100644
index 976f07c1c..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/test-componentset-example.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- examples.qdoc -->
- <title>QML Documentation Example | Test</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#qml-class">QML Class</a></li>
-<li class="level1"><a href="#properties-signals-handlers-and-methods">Properties, Signals, Handlers, and Methods</a></li>
-<li class="level2"><a href="#internal-documentation">Internal Documentation</a></li>
-<li class="level1"><a href="#qml-types-with-c-implementation">QML Types with C++ Implementation</a></li>
-</ul>
-</div>
-<div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">QML Documentation Example</h1>
-<span class="subtitle"></span>
-<!-- $$$componentset-brief -->
-<p>Example for documenting QML types.</p>
-<!-- @@@componentset -->
-<!-- $$$componentset-description -->
-<div class="descr"> <a name="details"></a>
-<p>This example demonstrates one of the ways to document QML types. It also generates a warning about a missing example image, on purpose.</p>
-<p>In particular, there are sample types that are documented with QDoc commands comments. There are documentation comments for the QML types and their public interfaces. The types are grouped into a module, the <a href="uicomponents-qmlmodule.html">UI Components</a> module.</p>
-<p>The uicomponents.qdoc file generates the overview page for the <a href="uicomponents-qmlmodule.html">UI Components</a> module page.</p>
-<p>The generated documentation is available in the <a href="uicomponents-qmlmodule.html">UI Components</a> module.</p>
-<a name="qml-class"></a>
-<h4 id="qml-class">QML Class</h4>
-<p>The QML types use the \qmltype to document the type. In addition, they have the \inmodule command in order for QDoc to associate them to the <code>UIComponents</code> module.</p>
-<p>QDoc uses the \brief command to place a basic description when listing the types.</p>
-<a name="properties-signals-handlers-and-methods"></a>
-<h4 id="properties-signals-handlers-and-methods">Properties, Signals, Handlers, and Methods</h4>
-<p>The types have their properties, signals, handlers, and methods defined in their respective QML files. QDoc associates the properties and methods to the types, therefore, you only need to place the documentation above the property, method, or signal.</p>
-<p>To document the type of a <i>property alias</i>, you must use the \qmlproperty command to specify the data type.</p>
-<pre class="cpp">\qmlproperty <span class="type">int</span> anAliasedProperty
-An aliased property of type <span class="type">int</span><span class="operator">.</span></pre>
-<a name="internal-documentation"></a>
-<h5 id="internal-documentation">Internal Documentation</h5>
-<p>You may declare that a documentation is for internal use by placing the \internal command after the beginning QDoc comment <code>/*</code>. QDoc will prevent the internal documentation from appearing in the public API.</p>
-<p>If you wish to omit certain parts of the documentation, you may use the \omit and \endomit command.</p>
-<a name="qml-types-with-c-implementation"></a>
-<h4 id="qml-types-with-c-implementation">QML Types with C++ Implementation</h4>
-<p>This example only demonstrates the documentation for types in QML files, but the regular QML commands may be placed inside C++ classes to define the public API of the QML type.</p>
-<p>Files:</p>
-<ul>
-<li><a href="test-componentset-progressbar-qml.html">componentset/ProgressBar.qml</a></li>
-<li><a href="test-componentset-switch-qml.html">componentset/Switch.qml</a></li>
-<li><a href="test-componentset-tabwidget-qml.html">componentset/TabWidget.qml</a></li>
-<li><a href="test-componentset-componentset-pro.html">componentset/componentset.pro</a></li>
-</ul>
-</div>
-<!-- @@@componentset -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/test.qhp b/tests/auto/qdoc/generatedoutput/expected_output/test.qhp
deleted file mode 100644
index 8d701a0e7..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/test.qhp
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<QtHelpProject version="1.0">
- <namespace>org.qt-project.test.001</namespace>
- <virtualFolder>test</virtualFolder>
- <metaData name="version" value="0.0.1"/>
- <filterSection>
- <toc>
- <section ref="uicomponents-qmlmodule.html" title="UI Components">
- <section ref="uicomponents-qmlmodule.html" title="Test">
- <section ref="qdoc-test-qmlmodule.html" title=""/>
- <section ref="test-cmaketest-example.html" title="CMake Example Project"/>
- <section ref="test-demos-demo-example.html" title="Demo"/>
- <section ref="testcpp-module.html" title="QDoc Test C++ Classes"/>
- <section ref="test-componentset-example.html" title="QML Documentation Example"/>
- <section ref="uicomponents-qmlmodule.html" title="UI Components"/>
- </section>
- <section ref="testcpp-module.html" title="Classes">
- <section ref="testqdoc.html" title="TestQDoc"/>
- <section ref="testqdoc-test.html" title="TestQDoc::Test Class Reference">
- <section ref="testqdoc-test-members.html" title="List of all members"/>
- <section ref="testqdoc-test-obsolete.html" title="Obsolete members"/>
- </section>
- <section ref="testqdoc-testderived.html" title="TestQDoc::TestDerived Class Reference">
- <section ref="testqdoc-testderived-members.html" title="List of all members"/>
- </section>
- </section>
- <section ref="uicomponents-qmlmodule.html" title="QML Types">
- <section ref="qml-qdoc-test-abstractparent.html" title="AbstractParent Type Reference">
- <section ref="qml-qdoc-test-abstractparent-members.html" title="List of all members"/>
- </section>
- <section ref="qml-qdoc-test-child.html" title="Child Type Reference">
- <section ref="qml-qdoc-test-child-members.html" title="List of all members"/>
- </section>
- <section ref="qml-qdoc-test-doctest.html" title="DocTest Type Reference">
- <section ref="qml-qdoc-test-doctest-members.html" title="List of all members"/>
- </section>
- <section ref="qml-qdoc-test-type.html" title="Type Type Reference">
- <section ref="qml-qdoc-test-type-members.html" title="List of all members"/>
- </section>
- <section ref="qml-qdoc-test-yetanotherchild.html" title="YetAnotherChild Type Reference">
- <section ref="qml-qdoc-test-yetanotherchild-members.html" title="List of all members"/>
- </section>
- <section ref="qml-uicomponents-progressbar.html" title="ProgressBar Type Reference">
- <section ref="qml-uicomponents-progressbar-members.html" title="List of all members"/>
- </section>
- <section ref="qml-uicomponents-switch.html" title="Switch Type Reference">
- <section ref="qml-uicomponents-switch-members.html" title="List of all members"/>
- </section>
- <section ref="qml-uicomponents-tabwidget.html" title="TabWidget Type Reference">
- <section ref="qml-uicomponents-tabwidget-members.html" title="List of all members"/>
- </section>
- <section ref="qml-int.html" title="int Type Reference"/>
- </section>
- </section>
- </toc>
- <keywords>
- <keyword name="AbstractParent" id="QML.AbstractParent" ref="qml-qdoc-test-abstractparent.html"/>
- <keyword name="Child" id="QML.Child" ref="qml-qdoc-test-child.html"/>
- <keyword name="DocTest" id="QML.DocTest" ref="qml-qdoc-test-doctest.html"/>
- <keyword name="ProgressBar" id="QML.ProgressBar" ref="qml-uicomponents-progressbar.html"/>
- <keyword name="QDOCTEST_MACRO" id="QDOCTEST_MACRO" ref="testqdoc.html#QDOCTEST_MACRO"/>
- <keyword name="QDOCTEST_MACRO2" id="QDOCTEST_MACRO2" ref="testqdoc-test.html#QDOCTEST_MACRO2"/>
- <keyword name="QDoc Test C++ Classes" id="QDoc Test C++ Classes" ref="testcpp-module.html"/>
- <keyword name="Switch" id="QML.Switch" ref="qml-uicomponents-switch.html"/>
- <keyword name="TabWidget" id="QML.TabWidget" ref="qml-uicomponents-tabwidget.html"/>
- <keyword name="Test" id="TestQDoc::Test" ref="testqdoc-test.html"/>
- <keyword name="Test::SomeType" id="Test::SomeType" ref="testqdoc-test.html#SomeType-typedef"/>
- <keyword name="TestDerived" id="TestQDoc::TestDerived" ref="testqdoc-testderived.html"/>
- <keyword name="TestDerived::DerivedType" id="TestDerived::DerivedType" ref="testqdoc-testderived.html#DerivedType-alias"/>
- <keyword name="TestDerived::NotTypedef" id="TestDerived::NotTypedef" ref="testqdoc-testderived.html#NotTypedef-alias"/>
- <keyword name="TestQDoc" id="TestQDoc" ref="testqdoc.html"/>
- <keyword name="Type" id="QML.Type" ref="qml-qdoc-test-type.html"/>
- <keyword name="UI Components" id="UI Components" ref="uicomponents-qmlmodule.html"/>
- <keyword name="YetAnotherChild" id="QML.YetAnotherChild" ref="qml-qdoc-test-yetanotherchild.html"/>
- <keyword name="abs" id="int::abs" ref="qml-int.html#abs-method"/>
- <keyword name="active" id="DocTest::active" ref="qml-qdoc-test-doctest.html#active-prop"/>
- <keyword name="anotherObsoleteMember" id="Test::anotherObsoleteMember" ref="testqdoc-test-obsolete.html#anotherObsoleteMember"/>
- <keyword name="children" id="AbstractParent::children" ref="qml-qdoc-test-abstractparent.html#children-prop"/>
- <keyword name="color" id="ProgressBar::color" ref="qml-uicomponents-progressbar.html#color-prop"/>
- <keyword name="completed" id="DocTest::completed" ref="qml-qdoc-test-doctest.html#completed-signal"/>
- <keyword name="completed" id="Type::completed" ref="qml-qdoc-test-type.html#completed-signal"/>
- <keyword name="configured" id="Type::configured" ref="qml-qdoc-test-type.html#configured-signal"/>
- <keyword name="copy" id="Type::copy" ref="qml-qdoc-test-type.html#copy-method"/>
- <keyword name="current" id="TabWidget::current" ref="qml-uicomponents-tabwidget.html#current-prop"/>
- <keyword name="deprecatedMember" id="Test::deprecatedMember" ref="testqdoc-test-obsolete.html#deprecatedMember"/>
- <keyword name="disable" id="Type::disable" ref="qml-qdoc-test-type.html#disable-method"/>
- <keyword name="enable" id="Type::enable" ref="qml-qdoc-test-type.html#enable-method"/>
- <keyword name="fail" id="DocTest::fail" ref="qml-qdoc-test-doctest.html#fail-method"/>
- <keyword name="fail_hard" id="DocTest::fail_hard" ref="qml-qdoc-test-doctest.html#fail_hard-method"/>
- <keyword name="fifth" id="Type::fifth" ref="qml-qdoc-test-type.html#fifth-prop"/>
- <keyword name="foo" id="DocTest::foo" ref="qml-qdoc-test-doctest.html#foo-signal"/>
- <keyword name="fourth" id="Type::fourth" ref="qml-qdoc-test-type.html#fourth-prop"/>
- <keyword name="funcPtr" id="Test::funcPtr" ref="testqdoc-test.html#funcPtr"/>
- <keyword name="group.first" id="Type::group.first" ref="qml-qdoc-test-type.html#group.first-prop"/>
- <keyword name="group.second" id="Type::group.second" ref="qml-qdoc-test-type.html#group.second-prop"/>
- <keyword name="group.third" id="Type::group.third" ref="qml-qdoc-test-type.html#group.third-prop"/>
- <keyword name="id" id="Type::id" ref="qml-qdoc-test-type.html#id-prop"/>
- <keyword name="inlineFunction" id="Test::inlineFunction" ref="testqdoc-test.html#inlineFunction"/>
- <keyword name="int" id="QML.int" ref="qml-int.html"/>
- <keyword name="maximum" id="ProgressBar::maximum" ref="qml-uicomponents-progressbar.html#maximum-prop"/>
- <keyword name="minimum" id="ProgressBar::minimum" ref="qml-uicomponents-progressbar.html#minimum-prop"/>
- <keyword name="name" id="DocTest::name" ref="qml-qdoc-test-doctest.html#name-prop"/>
- <keyword name="name" id="Type::name" ref="qml-qdoc-test-type.html#name-prop"/>
- <keyword name="obsoleteMember" id="Test::obsoleteMember" ref="testqdoc-test-obsolete.html#obsoleteMember"/>
- <keyword name="on" id="Switch::on" ref="qml-uicomponents-switch.html#on-prop"/>
- <keyword name="overload" id="Test::overload" ref="testqdoc-test.html#overload"/>
- <keyword name="rear" id="AbstractParent::rear" ref="qml-qdoc-test-abstractparent.html#rear-method"/>
- <keyword name="sampleReadOnlyProperty" id="TabWidget::sampleReadOnlyProperty" ref="qml-uicomponents-tabwidget.html#sampleReadOnlyProperty-prop"/>
- <keyword name="secondColor" id="ProgressBar::secondColor" ref="qml-uicomponents-progressbar.html#secondColor-prop"/>
- <keyword name="someFunction" id="Test::someFunction" ref="testqdoc-test.html#someFunction"/>
- <keyword name="someFunctionDefaultArg" id="Test::someFunctionDefaultArg" ref="testqdoc-test.html#someFunctionDefaultArg"/>
- <keyword name="toggle" id="Switch::toggle" ref="qml-uicomponents-switch.html#toggle-method"/>
- <keyword name="type" id="Type::type" ref="qml-qdoc-test-type.html#type-attached-prop"/>
- <keyword name="value" id="ProgressBar::value" ref="qml-uicomponents-progressbar.html#value-prop"/>
- <keyword name="virtualFun" id="Test::virtualFun" ref="testqdoc-test.html#virtualFun"/>
- <keyword name="virtualFun" id="TestDerived::virtualFun" ref="testqdoc-testderived.html#virtualFun"/>
- </keywords>
- <files>
- <file>images/leonardo-da-vinci.png</file>
- <file>qdoc-test-qmlmodule.html</file>
- <file>qml-int.html</file>
- <file>qml-qdoc-test-abstractparent-members.html</file>
- <file>qml-qdoc-test-abstractparent.html</file>
- <file>qml-qdoc-test-child-members.html</file>
- <file>qml-qdoc-test-child.html</file>
- <file>qml-qdoc-test-doctest-members.html</file>
- <file>qml-qdoc-test-doctest.html</file>
- <file>qml-qdoc-test-type-members.html</file>
- <file>qml-qdoc-test-type.html</file>
- <file>qml-qdoc-test-yetanotherchild-members.html</file>
- <file>qml-qdoc-test-yetanotherchild.html</file>
- <file>qml-uicomponents-progressbar-members.html</file>
- <file>qml-uicomponents-progressbar.html</file>
- <file>qml-uicomponents-switch-members.html</file>
- <file>qml-uicomponents-switch.html</file>
- <file>qml-uicomponents-tabwidget-members.html</file>
- <file>qml-uicomponents-tabwidget.html</file>
- <file>test-cmaketest-cmakelists-txt.html</file>
- <file>test-cmaketest-example.html</file>
- <file>test-cmaketest-main-cpp.html</file>
- <file>test-componentset-componentset-pro.html</file>
- <file>test-componentset-example.html</file>
- <file>test-componentset-progressbar-qml.html</file>
- <file>test-componentset-switch-qml.html</file>
- <file>test-componentset-tabwidget-qml.html</file>
- <file>test-demos-demo-example.html</file>
- <file>testcpp-module.html</file>
- <file>testqdoc-test-members.html</file>
- <file>testqdoc-test-obsolete.html</file>
- <file>testqdoc-test.html</file>
- <file>testqdoc-testderived-members.html</file>
- <file>testqdoc-testderived.html</file>
- <file>testqdoc.html</file>
- <file>uicomponents-qmlmodule.html</file>
- </files>
- </filterSection>
-</QtHelpProject>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testcpp-module.html b/tests/auto/qdoc/generatedoutput/expected_output/testcpp-module.html
deleted file mode 100644
index 60bbd587c..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/testcpp-module.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>QDoc Test C++ Classes | TestCPP</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></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>
-<h1 class="title">QDoc Test C++ Classes</h1>
-<span class="subtitle"></span>
-<!-- $$$TestCPP-brief -->
-<p>A test module page. <a href="#details">More...</a></p>
-<!-- @@@TestCPP -->
-<a name="namespaces"></a>
-<h2 id="namespaces">Namespaces</h2>
-<div class="table"><table class="annotated">
-<tr class="odd topAlign"><td class="tblName"><p><a href="testqdoc.html">TestQDoc</a></p></td><td class="tblDescr"><p>A namespace</p></td></tr>
-</table></div>
-<a name="classes"></a>
-<h2 id="classes">Classes</h2>
-<div class="table"><table class="annotated">
-<tr class="odd topAlign"><td class="tblName"><p><a href="testqdoc-test.html">TestQDoc::Test</a></p></td><td class="tblDescr"><p>A class in a namespace</p></td></tr>
-<tr class="even topAlign"><td class="tblName"><p><a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></p></td><td class="tblDescr"><p>A derived class in a namespace</p></td></tr>
-</table></div>
-<!-- $$$TestCPP-description -->
-<a name="details"></a>
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-</div>
-<!-- @@@TestCPP -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testcpp.index b/tests/auto/qdoc/generatedoutput/expected_output/testcpp.index
deleted file mode 100644
index 1b0fdce24..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/testcpp.index
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE QDOCINDEX>
-<INDEX url="" title="TestCPP Reference Documentation" version="" project="TestCPP">
- <namespace name="" status="active" access="public" module="testcpp">
- <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="true" meta="macrowithoutparams" virtual="non" const="false" static="false" final="false" override="false" type="" signature="QDOCTEST_MACRO"/>
- <function name="QDOCTEST_MACRO2" href="testqdoc-test.html#QDOCTEST_MACRO2" status="active" access="public" documented="true" related="true" since="Test 1.1" meta="macrowithparams" virtual="non" const="false" static="false" final="false" override="false" type="" brief="A macro with argument x" signature="QDOCTEST_MACRO2( x)">
- <parameter type="" name="x" default=""/>
- </function>
- <namespace name="TestQDoc" href="testqdoc.html" status="active" access="public" location="testcpp.h" documented="true" module="TestCPP" brief="A namespace">
- <contents name="usage" title="Usage" level="1"/>
- <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="true" meta="macrowithoutparams" virtual="non" const="false" static="false" final="false" override="false" type="" signature="QDOCTEST_MACRO"/>
- <class name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" documented="true" module="TestCPP" brief="A class in a namespace">
- <function name="QDOCTEST_MACRO2" href="testqdoc-test.html#QDOCTEST_MACRO2" status="active" access="public" documented="true" related="true" since="Test 1.1" meta="macrowithparams" virtual="non" const="false" static="false" final="false" override="false" type="" brief="A macro with argument x" signature="QDOCTEST_MACRO2( x)">
- <parameter type="" name="x" default=""/>
- </function>
- <function name="anotherObsoleteMember" fullname="TestQDoc::Test::anotherObsoleteMember" href="testqdoc-test-obsolete.html#anotherObsoleteMember" status="obsolete" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void anotherObsoleteMember()"/>
- <function name="deprecatedMember" fullname="TestQDoc::Test::deprecatedMember" href="testqdoc-test-obsolete.html#deprecatedMember" status="obsolete" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void deprecatedMember()"/>
- <function name="func" fullname="TestQDoc::Test::func" href="testqdoc-test.html#func" status="internal" access="private" location="testcpp.h" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void func(bool )">
- <parameter type="bool" name="" default=""/>
- </function>
- <function name="funcPtr" fullname="TestQDoc::Test::funcPtr" href="testqdoc-test.html#funcPtr" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void (*)(bool)" signature="void (*)(bool) funcPtr(bool b, const char *s)">
- <parameter type="bool" name="b" default=""/>
- <parameter type="const char *" name="s" default=""/>
- </function>
- <function name="inlineFunction" fullname="TestQDoc::Test::inlineFunction" href="testqdoc-test.html#inlineFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" brief="An inline function, documented using the \fn QDoc command" signature="void inlineFunction()"/>
- <function name="obsoleteMember" fullname="TestQDoc::Test::obsoleteMember" href="testqdoc-test-obsolete.html#obsoleteMember" status="obsolete" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void obsoleteMember()"/>
- <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload" status="active" access="protected" location="testcpp.h" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void overload()"/>
- <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload-1" status="active" access="protected" location="testcpp.h" documented="true" since="Test 1.2" meta="plain" virtual="non" const="false" static="false" final="false" override="false" overload="true" overload-number="1" type="void" signature="void overload(bool b)">
- <parameter type="bool" name="b" default=""/>
- </function>
- <function name="someFunction" fullname="TestQDoc::Test::someFunction" href="testqdoc-test.html#someFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="int" signature="int someFunction(int v)">
- <parameter type="int" name="v" default="0"/>
- </function>
- <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void someFunctionDefaultArg(int i, bool b)">
- <parameter type="int" name="i" default=""/>
- <parameter type="bool" name="b" default="false"/>
- </function>
- <function name="virtualFun" fullname="TestQDoc::Test::virtualFun" href="testqdoc-test.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" const="false" static="false" final="false" override="false" type="void" signature="void virtualFun()"/>
- <typedef name="SomeType" fullname="TestQDoc::Test::SomeType" href="testqdoc-test.html#SomeType-typedef" status="active" access="public" location="testcpp.h" documented="true"/>
- </class>
- <class name="TestDerived" fullname="TestQDoc::TestDerived" href="testqdoc-testderived.html" status="active" access="public" location="testcpp.h" documented="true" bases="TestQDoc::Test" module="TestCPP" brief="A derived class in a namespace">
- <function name="virtualFun" fullname="TestQDoc::TestDerived::virtualFun" href="testqdoc-testderived.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" const="false" static="false" final="false" override="true" type="void" signature="void virtualFun() override"/>
- <alias name="DerivedType" fullname="TestQDoc::TestDerived::DerivedType" href="testqdoc-testderived.html#DerivedType-alias" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="Test::SomeType"/>
- <alias name="NotTypedef" fullname="TestQDoc::TestDerived::NotTypedef" href="testqdoc-testderived.html#NotTypedef-alias" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="int"/>
- </class>
- </namespace>
- <module name="TestCPP" href="testcpp-module.html" status="active" documented="true" seen="true" title="QDoc Test C++ Classes" module="TestCPP" members="TestQDoc,Test,TestDerived" brief="A test module page"/>
- </namespace>
-</INDEX>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-members.html b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-members.html
deleted file mode 100644
index 4dbdd1e41..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-members.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>List of All Members for Test | TestCPP</title>
-</head>
-<body>
-<li>Test</li>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">List of All Members for Test</h1>
-<p>This is the complete list of members for <a href="testqdoc-test.html">TestQDoc::Test</a>, including inherited members.</p>
-<ul>
-<li class="fn">typedef <span class="name"><b><a href="testqdoc-test.html#SomeType-typedef">SomeType</a></b></span></li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#funcPtr">funcPtr</a></b></span>(bool , const char *) : void (*)(bool)</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#inlineFunction">inlineFunction</a></b></span>()</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#overload">overload</a></b></span>()</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#overload-1">overload</a></b></span>(bool )</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#someFunction">someFunction</a></b></span>(int ) : int</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#someFunctionDefaultArg">someFunctionDefaultArg</a></b></span>(int , bool )</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#virtualFun">virtualFun</a></b></span>()</li>
-</ul>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-obsolete.html b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-obsolete.html
deleted file mode 100644
index ef0e7bcac..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-obsolete.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>Obsolete Members for Test | TestCPP</title>
-</head>
-<body>
-<li>Test</li>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">Obsolete Members for Test</h1>
-<p><b>The following members of class <a href="testqdoc-test.html">Test</a> are obsolete.</b> They are provided to keep old source code working. We strongly advise against using them in new code.</p>
-<h2>Public Functions</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft topAlign rightAlign"> <code>(obsolete) </code>void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#anotherObsoleteMember">anotherObsoleteMember</a></b>()</td></tr>
-<tr><td class="memItemLeft topAlign rightAlign"> <code>(obsolete) </code>void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#deprecatedMember">deprecatedMember</a></b>()</td></tr>
-<tr><td class="memItemLeft topAlign rightAlign"> <code>(obsolete) </code>void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-obsolete.html#obsoleteMember">obsoleteMember</a></b>()</td></tr>
-</table></div>
-<h2>Member Function Documentation</h2>
-<!-- $$$anotherObsoleteMember[overload1]$$$anotherObsoleteMember -->
-<h3 class="fn" id="anotherObsoleteMember"><a name="anotherObsoleteMember"></a><span class="type">void</span> Test::<span class="name">anotherObsoleteMember</span>()</h3>
-<p>This function is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.</p>
-<p>Use <a href="testqdoc-test-obsolete.html#obsoleteMember">obsoleteMember</a>() instead.</p>
-<!-- @@@anotherObsoleteMember -->
-<!-- $$$deprecatedMember[overload1]$$$deprecatedMember -->
-<h3 class="fn" id="deprecatedMember"><a name="deprecatedMember"></a><span class="type">void</span> Test::<span class="name">deprecatedMember</span>()</h3>
-<p>This function is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.</p>
-<p>Use <a href="testqdoc-test.html#someFunction">someFunction</a>() instead.</p>
-<!-- @@@deprecatedMember -->
-<!-- $$$obsoleteMember[overload1]$$$obsoleteMember -->
-<h3 class="fn" id="obsoleteMember"><a name="obsoleteMember"></a><span class="type">void</span> Test::<span class="name">obsoleteMember</span>()</h3>
-<p>This function is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.</p>
-<p>Use <a href="testqdoc-test.html#someFunction">someFunction</a>() instead.</p>
-<!-- @@@obsoleteMember -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test.html b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test.html
deleted file mode 100644
index 7ca9b3a42..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>Test Class | TestCPP</title>
-</head>
-<body>
-<li>Test</li>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#public-types">Public Types</a></li>
-<li class="level1"><a href="#public-functions">Public Functions</a></li>
-<li class="level1"><a href="#protected-functions">Protected Functions</a></li>
-<li class="level1"><a href="#macros">Macros</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">Test Class</h1>
-<span class="small-subtitle">class <a href="testqdoc.html">TestQDoc</a>::Test</span>
-<!-- $$$Test-brief -->
-<p>A class in a namespace. <a href="#details">More...</a></p>
-<!-- @@@Test -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;Test&gt;</span>
-</td></tr><tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 COMPONENT QDocTest) <br/>
-target_link_libraries(mytarget PUBLIC Qt::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"> Inherited By:</td><td class="memItemRight bottomAlign"> <p><a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></p>
-</td></tr></table></div><ul>
-<li><a href="testqdoc-test-members.html">List of all members, including inherited members</a></li>
-<li><a href="testqdoc-test-obsolete.html">Obsolete members</a></li>
-</ul>
-<a name="public-types"></a>
-<h2 id="public-types">Public Types</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> typedef </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#SomeType-typedef">SomeType</a></b></td></tr>
-</table></div>
-<a name="public-functions"></a>
-<h2 id="public-functions">Public Functions</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> void (*)(bool) </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#funcPtr">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">inlineFunction</a></b>()</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> int </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#someFunction">someFunction</a></b>(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">someFunctionDefaultArg</a></b>(int <i>i</i>, bool <i>b</i> = false)</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> virtual void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#virtualFun">virtualFun</a></b>()</td></tr>
-</table></div>
-<a name="protected-functions"></a>
-<h2 id="protected-functions">Protected Functions</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#overload">overload</a></b>()</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#overload-1">overload</a></b>(bool <i>b</i>)</td></tr>
-</table></div>
-<a name="macros"></a>
-<h2 id="macros">Macros</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#QDOCTEST_MACRO2">QDOCTEST_MACRO2</a></b>(<i>x</i>)</td></tr>
-</table></div>
-<a name="details"></a>
-<!-- $$$Test-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-</div>
-<!-- @@@Test -->
-<div class="types">
-<h2>Member Type Documentation</h2>
-<!-- $$$SomeType -->
-<h3 class="fn" id="SomeType-typedef"><a name="SomeType-typedef"></a>typedef Test::<span class="name">SomeType</span></h3>
-<p>A typedef.</p>
-<!-- @@@SomeType -->
-</div>
-<div class="func">
-<h2>Member Function Documentation</h2>
-<!-- $$$ -->
-<div class="fngroup">
-<h3 class="fn fngroupitem" id="overload"><a name="overload"></a><code>[protected] </code><span class="type">void</span> Test::<span class="name">overload</span>()</h3><h3 class="fn fngroupitem" id="overload-1"><a name="overload-1"></a><code>[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>b</i>.</p>
-<!-- @@@ -->
-<!-- $$$funcPtr[overload1]$$$funcPtrboolconstchar* -->
-<h3 class="fn" id="funcPtr"><a name="funcPtr"></a><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>b</i> and <i>s</i>.</p>
-<!-- @@@funcPtr -->
-<!-- $$$inlineFunction[overload1]$$$inlineFunction -->
-<h3 class="fn" id="inlineFunction"><a name="inlineFunction"></a><span class="type">void</span> Test::<span class="name">inlineFunction</span>()</h3>
-<p>An inline function, documented using the \fn QDoc command.</p>
-<!-- @@@inlineFunction -->
-<!-- $$$someFunction[overload1]$$$someFunctionint -->
-<h3 class="fn" id="someFunction"><a name="someFunction"></a><span class="type">int</span> Test::<span class="name">someFunction</span>(<span class="type">int</span> <i>v</i> = 0)</h3>
-<p>Function that takes a parameter <i>v</i>. Also returns the value of <i>v</i>.</p>
-<!-- @@@someFunction -->
-<!-- $$$someFunctionDefaultArg[overload1]$$$someFunctionDefaultArgintbool -->
-<h3 class="fn" id="someFunctionDefaultArg"><a name="someFunctionDefaultArg"></a><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)</h3>
-<p>Function that takes a parameter <i>i</i> and <i>b</i>.</p>
-<!-- @@@someFunctionDefaultArg -->
-<!-- $$$virtualFun[overload1]$$$virtualFun -->
-<h3 class="fn" id="virtualFun"><a name="virtualFun"></a><code>[virtual] </code><span class="type">void</span> Test::<span class="name">virtualFun</span>()</h3>
-<p>Function that must be reimplemented.</p>
-<!-- @@@virtualFun -->
-</div>
-<div class="macros">
-<h2>Macro Documentation</h2>
-<!-- $$$QDOCTEST_MACRO2[overload1]$$$QDOCTEST_MACRO2 -->
-<h3 class="fn" id="QDOCTEST_MACRO2"><a name="QDOCTEST_MACRO2"></a><code>[since Test 1.1] </code><span class="name">QDOCTEST_MACRO2</span>(<i>x</i>)</h3>
-<p>A macro with argument <i>x</i>.</p>
-<p>This function was introduced in Test 1.1.</p>
-<!-- @@@QDOCTEST_MACRO2 -->
-</div>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived-members.html b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived-members.html
deleted file mode 100644
index efd0a279c..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived-members.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>List of All Members for TestDerived | TestCPP</title>
-</head>
-<body>
-<li>TestDerived</li>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">List of All Members for TestDerived</h1>
-<p>This is the complete list of members for <a href="testqdoc-testderived.html">TestQDoc::TestDerived</a>, including inherited members.</p>
-<ul>
-<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#DerivedType-alias">DerivedType</a></b></span></li>
-<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#NotTypedef-alias">NotTypedef</a></b></span></li>
-<li class="fn">typedef <span class="name"><b><a href="testqdoc-test.html#SomeType-typedef">SomeType</a></b></span></li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#funcPtr">funcPtr</a></b></span>(bool , const char *) : void (*)(bool)</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#inlineFunction">inlineFunction</a></b></span>()</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#overload">overload</a></b></span>()</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#overload-1">overload</a></b></span>(bool )</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#someFunction">someFunction</a></b></span>(int ) : int</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-test.html#someFunctionDefaultArg">someFunctionDefaultArg</a></b></span>(int , bool )</li>
-<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#virtualFun">virtualFun</a></b></span>()</li>
-</ul>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived.html b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived.html
deleted file mode 100644
index 1be46f741..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>TestDerived Class | TestCPP</title>
-</head>
-<body>
-<li>TestDerived</li>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#public-types">Public Types</a></li>
-<li class="level1"><a href="#reimplemented-public-functions">Reimplemented 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">TestDerived Class</h1>
-<span class="small-subtitle">class <a href="testqdoc.html">TestQDoc</a>::TestDerived</span>
-<!-- $$$TestDerived-brief -->
-<p>A derived class in a namespace. <a href="#details">More...</a></p>
-<!-- @@@TestDerived -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;TestDerived&gt;</span>
-</td></tr><tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 COMPONENT QDocTest) <br/>
-target_link_libraries(mytarget PUBLIC Qt::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"> Inherits:</td><td class="memItemRight bottomAlign"> <a href="testqdoc-test.html">TestQDoc::Test</a></td></tr></table></div><ul>
-<li><a href="testqdoc-testderived-members.html">List of all members, including inherited members</a></li>
-</ul>
-<a name="public-types"></a>
-<h2 id="public-types">Public Types</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> (alias) </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#DerivedType-alias">DerivedType</a></b></td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> (alias) </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#NotTypedef-alias">NotTypedef</a></b></td></tr>
-</table></div>
-<a name="reimplemented-public-functions"></a>
-<h2 id="reimplemented-public-functions">Reimplemented Public Functions</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> virtual void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#virtualFun">virtualFun</a></b>() override</td></tr>
-</table></div>
-<a name="details"></a>
-<!-- $$$TestDerived-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-</div>
-<!-- @@@TestDerived -->
-<div class="types">
-<h2>Member Type Documentation</h2>
-<!-- $$$DerivedType -->
-<h3 class="fn" id="DerivedType-alias"><a name="DerivedType-alias"></a><code>[alias] </code>TestDerived::<span class="name">DerivedType</span></h3>
-<p>This is a type alias for <a href="testqdoc-test.html#SomeType-typedef">TestQDoc::Test::SomeType</a>.</p>
-<p>An aliased typedef.</p>
-<!-- @@@DerivedType -->
-<!-- $$$NotTypedef -->
-<h3 class="fn" id="NotTypedef-alias"><a name="NotTypedef-alias"></a><code>[alias] </code>TestDerived::<span class="name">NotTypedef</span></h3>
-<p>This is a type alias for int.</p>
-<p>I'm an alias, not a typedef.</p>
-<!-- @@@NotTypedef -->
-</div>
-<div class="func">
-<h2>Member Function Documentation</h2>
-<!-- $$$virtualFun[overload1]$$$virtualFun -->
-<h3 class="fn" id="virtualFun"><a name="virtualFun"></a><code>[override virtual] </code><span class="type">void</span> TestDerived::<span class="name">virtualFun</span>()</h3>
-<p>Reimplements: <a href="testqdoc-test.html#virtualFun">Test::virtualFun</a>().</p>
-<!-- @@@virtualFun -->
-</div>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc.html b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc.html
deleted file mode 100644
index b57a6b794..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- testcpp.cpp -->
- <title>TestQDoc Namespace | TestCPP</title>
-</head>
-<body>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></h3>
-<ul>
-<li class="level1"><a href="#classes">Classes</a></li>
-<li class="level1"><a href="#macros">Macros</a></li>
-<li class="level1"><a href="#details">Detailed Description</a></li>
-<li class="level2"><a href="#usage">Usage</a></li>
-</ul>
-</div>
-<div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">TestQDoc Namespace</h1>
-<!-- $$$TestQDoc-brief -->
-<p>A namespace. <a href="#details">More...</a></p>
-<!-- @@@TestQDoc -->
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;TestCPP&gt;</span>
-</td></tr><tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 COMPONENT QDocTest) <br/>
-target_link_libraries(mytarget PUBLIC Qt::QDocTest)</td></tr><tr><td class="memItemLeft rightAlign topAlign"> qmake:</td><td class="memItemRight bottomAlign"> QT += testcpp</td></tr></table></div><ul>
-</ul>
-<a name="classes"></a>
-<h2 id="classes">Classes</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> class </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html">Test</a></b></td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> class </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html">TestDerived</a></b></td></tr>
-</table></div>
-<a name="macros"></a>
-<h2 id="macros">Macros</h2>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc.html#QDOCTEST_MACRO">QDOCTEST_MACRO</a></b></td></tr>
-</table></div>
-<a name="details"></a>
-<!-- $$$TestQDoc-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-<a name="usage"></a>
-<h3 id="usage">Usage</h3>
-<p>This namespace is for testing QDoc output.</p>
-</div>
-<!-- @@@TestQDoc -->
-<div class="classes">
-<h2>Classes</h2>
-<h3> class <a href="testqdoc-test.html">Test</a></h3><!-- $$$Test-brief -->
-<p>A class in a namespace. <a href="testqdoc-test.html#details">More...</a></p>
-<!-- @@@Test -->
-<h3> class <a href="testqdoc-testderived.html">TestDerived</a></h3><!-- $$$TestDerived-brief -->
-<p>A derived class in a namespace. <a href="testqdoc-testderived.html#details">More...</a></p>
-<!-- @@@TestDerived -->
-</div>
-<div class="macros">
-<h2>Macro Documentation</h2>
-<!-- $$$QDOCTEST_MACRO[overload1]$$$QDOCTEST_MACRO -->
-<h3 class="fn" id="QDOCTEST_MACRO"><a name="QDOCTEST_MACRO"></a><span class="name">QDOCTEST_MACRO</span></h3>
-<!-- @@@QDOCTEST_MACRO -->
-</div>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/third.html b/tests/auto/qdoc/generatedoutput/expected_output/third.html
deleted file mode 100644
index ee69a1689..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/third.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- main.cpp -->
- <title>Third Class | TestModule</title>
-</head>
-<body>
-<li>Third</li>
-<div class="sidebar">
-<div class="toc">
-<h3><a name="toc">Contents</a></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">Third Class</h1>
-<div class="table"><table class="alignedsummary">
-<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;Third&gt;</span>
-</td></tr></table></div><ul>
-</ul>
-<a name="details"></a>
-<!-- $$$Third-description -->
-<div class="descr">
-<h2 id="details">Detailed Description</h2>
-<p>This is a third class</p>
-</div>
-<!-- @@@Third -->
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/toc.html b/tests/auto/qdoc/generatedoutput/expected_output/toc.html
deleted file mode 100644
index cd4a50328..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/toc.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- qdoctests-outputfromqdocfiles.qdoc -->
- <title>Table of Contents | OutputFromQDocFiles</title>
-</head>
-<body>
-<li id="buildversion">OutputFromQDocFiles - A test project for QDoc build artifacts</li>
- <link rel="prev" href="qdoctests-qdocfileoutput-linking.html" />
-<p class="naviNextPrevious headerNavi">
-<a class="prevPage" href="qdoctests-qdocfileoutput-linking.html">QDoc Linking Test</a>
-</p><p/>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">Table of Contents</h1>
-<span class="subtitle"></span>
-<!-- $$$toc.html-description -->
-<div class="descr"> <a name="details"></a>
-<ul>
-<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 -->
-<p class="naviNextPrevious footerNavi">
-<a class="prevPage" href="qdoctests-qdocfileoutput-linking.html">QDoc Linking Test</a>
-</p>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/uicomponents-qmlmodule.html b/tests/auto/qdoc/generatedoutput/expected_output/uicomponents-qmlmodule.html
deleted file mode 100644
index baba2c57a..000000000
--- a/tests/auto/qdoc/generatedoutput/expected_output/uicomponents-qmlmodule.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
-<!-- examples.qdoc -->
- <title>UI Components | Test</title>
-</head>
-<body>
-<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
-<h1 class="title">UI Components</h1>
-<span class="subtitle"></span>
-<!-- $$$UIComponents-description -->
-<div class="descr"> <a name="details"></a>
-<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">UIComponents</a> example.</p>
-</div>
-<!-- @@@UIComponents -->
-<div class="table"><table class="annotated">
-<tr class="odd topAlign"><td class="tblName"><p><a href="qml-uicomponents-progressbar.html">ProgressBar</a></p></td><td class="tblDescr"><p>A component that shows the progress of an event</p></td></tr>
-<tr class="even topAlign"><td class="tblName"><p><a href="qml-uicomponents-switch.html">Switch</a></p></td><td class="tblDescr"><p>A component that can be turned on or off</p></td></tr>
-<tr class="odd topAlign"><td class="tblName"><p><a href="qml-uicomponents-tabwidget.html">TabWidget</a></p></td><td class="tblDescr"><p>A widget that places its children as tabs</p></td></tr>
-</table></div>
-</body>
-</html>
diff --git a/tests/auto/qdoc/generatedoutput/generatedoutput.pro b/tests/auto/qdoc/generatedoutput/generatedoutput.pro
deleted file mode 100644
index be9377bec..000000000
--- a/tests/auto/qdoc/generatedoutput/generatedoutput.pro
+++ /dev/null
@@ -1,7 +0,0 @@
-CONFIG += testcase
-QT = core testlib
-
-TARGET = tst_generatedOutput
-
-SOURCES += \
- tst_generatedoutput.cpp
diff --git a/tests/auto/qdoc/generatedoutput/testdata/bug80259/inc/testmodule/TestModule.h b/tests/auto/qdoc/generatedoutput/testdata/bug80259/inc/testmodule/TestModule.h
deleted file mode 100644
index 06f046a71..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/bug80259/inc/testmodule/TestModule.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "aaa.h"
-#include "bbb.h"
-#include "ccc.h"
diff --git a/tests/auto/qdoc/generatedoutput/testdata/bug80259/inc/testmodule/aaa.h b/tests/auto/qdoc/generatedoutput/testdata/bug80259/inc/testmodule/aaa.h
deleted file mode 100644
index dea5c1841..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/bug80259/inc/testmodule/aaa.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#pragma once
-class Third
-{
-};
diff --git a/tests/auto/qdoc/generatedoutput/testdata/bug80259/inc/testmodule/bbb.h b/tests/auto/qdoc/generatedoutput/testdata/bug80259/inc/testmodule/bbb.h
deleted file mode 100644
index 0dc6e52c6..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/bug80259/inc/testmodule/bbb.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#pragma once
-class First
-{
- class Nested {};
-};
diff --git a/tests/auto/qdoc/generatedoutput/testdata/bug80259/inc/testmodule/ccc.h b/tests/auto/qdoc/generatedoutput/testdata/bug80259/inc/testmodule/ccc.h
deleted file mode 100644
index d3a1557e1..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/bug80259/inc/testmodule/ccc.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#pragma once
-class Second
-{
-};
diff --git a/tests/auto/qdoc/generatedoutput/testdata/bug80259/src/main.cpp b/tests/auto/qdoc/generatedoutput/testdata/bug80259/src/main.cpp
deleted file mode 100644
index a8991e18f..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/bug80259/src/main.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-/*!
-\class First
-\inmodule TestModule
-
-This is a first class
-*/
-
-/*!
-\class First::Nested
-\inmodule TestModule
-
-This is a nested class
-*/
-
-/*!
-\class Second
-\inmodule TestModule
-
-This is a second class
-*/
-
-/*!
-\class Third
-\inmodule TestModule
-
-This is a third class
-*/
diff --git a/tests/auto/qdoc/generatedoutput/testdata/bug80259/src/qdoc/index.qdoc b/tests/auto/qdoc/generatedoutput/testdata/bug80259/src/qdoc/index.qdoc
deleted file mode 100644
index 35ef7e087..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/bug80259/src/qdoc/index.qdoc
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- \page index.html
- \title doc index
-
- \generatelist {classesbymodule TestModule}
-
-*/
diff --git a/tests/auto/qdoc/generatedoutput/testdata/bug80259/testmodule.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/bug80259/testmodule.qdocconf
deleted file mode 100644
index 97599d0be..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/bug80259/testmodule.qdocconf
+++ /dev/null
@@ -1,14 +0,0 @@
-include(../configs/config.qdocconf)
-project = TestModule
-
-moduleheader = TestModule.h
-
-headerdirs = ./inc
-sourcedirs = ./src
-includepaths += ./inc/testmodule
-
-sources.fileextensions = "*.cpp *.qdoc"
-headers.fileextensions = "*.h"
-
-outputdir = doc
-outputformats = HTML
diff --git a/tests/auto/qdoc/generatedoutput/testdata/bug80259/webxml_testmodule.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/bug80259/webxml_testmodule.qdocconf
deleted file mode 100644
index dc9234fbb..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/bug80259/webxml_testmodule.qdocconf
+++ /dev/null
@@ -1,2 +0,0 @@
-include(testmodule.qdocconf)
-include(../configs/webxml.qdocconf)
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/config.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/config.qdocconf
deleted file mode 100644
index 70129901c..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/config.qdocconf
+++ /dev/null
@@ -1,14 +0,0 @@
-# Shared configuration for all tests
-
-sources.fileextensions = "*.qml *.cpp *.qdoc"
-headers.fileextensions = "*.h"
-
-# images
-imagedirs = ../images
-
-# zero warning policy
-warninglimit = 0
-warninglimit.enabled = true
-
-# don't write host system-specific paths to index files
-locationinfo = false
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/docbook.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/docbook.qdocconf
deleted file mode 100644
index 68afd29e8..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/docbook.qdocconf
+++ /dev/null
@@ -1,7 +0,0 @@
-outputformats = DocBook
-DocBook.nosubdirs = true
-DocBook.outputsubdir = docbook
-
-# TODO: DocBook generator has trouble handling shared comment nodes
-# allow two warnings related to these
-warninglimit = 2
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/docbook_test.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/docbook_test.qdocconf
deleted file mode 100644
index cf9880078..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/docbook_test.qdocconf
+++ /dev/null
@@ -1,3 +0,0 @@
-include(config.qdocconf)
-include(test.qdocconf)
-include(docbook.qdocconf)
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/docbook_testcpp.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/docbook_testcpp.qdocconf
deleted file mode 100644
index f2b714e00..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/docbook_testcpp.qdocconf
+++ /dev/null
@@ -1,3 +0,0 @@
-include(config.qdocconf)
-include(testcpp.qdocconf)
-include(docbook.qdocconf)
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/docbook_testqml.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/docbook_testqml.qdocconf
deleted file mode 100644
index 028690834..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/docbook_testqml.qdocconf
+++ /dev/null
@@ -1,3 +0,0 @@
-include(config.qdocconf)
-include(testqml.qdocconf)
-include(docbook.qdocconf)
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/examples-qhp.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/examples-qhp.qdocconf
deleted file mode 100644
index 4b9f86938..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/examples-qhp.qdocconf
+++ /dev/null
@@ -1,40 +0,0 @@
-# QML test includes a documented example
-include(config.qdocconf)
-include(testqml.qdocconf)
-version = 0.0.1
-
-examplesinstallpath = test
-
-exampledirs += ../examples
-
-# Configure .qhp generation
-qhp.projects = Test
-
-qhp.Test.file = test.qhp
-qhp.Test.namespace = org.qt-project.test.001
-qhp.Test.virtualFolder = test
-qhp.Test.indexTitle = UI Components
-qhp.Test.indexRoot =
-
-qhp.Test.subprojects = test classes qmltypes undefined
-qhp.Test.subprojects.test.title = Test
-qhp.Test.subprojects.test.indexTitle = UI Components
-qhp.Test.subprojects.test.selectors = doc:page fake:example module qmlmodule
-qhp.Test.subprojects.test.sortPages = true
-
-qhp.Test.subprojects.classes.title = Classes
-qhp.Test.subprojects.classes.indexTitle = QDoc Test C++ Classes
-qhp.Test.subprojects.classes.selectors = class namespace doc:headerfile boop:whatever
-qhp.Test.subprojects.classes.sortPages = true
-
-qhp.Test.subprojects.qmltypes.title = QML Types
-qhp.Test.subprojects.qmltypes.indexTitle = UI Components
-qhp.Test.subprojects.qmltypes.selectors = qmlmodule:UIComponents,QDoc.Test
-qhp.Test.subprojects.qmltypes.sortPages = true
-
-# Add some meta-data to the example
-manifestmeta.filters = test
-
-manifestmeta.test.names = *
-manifestmeta.test.attributes = isTest:true
-manifestmeta.test.tags = test
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/headerfile.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/headerfile.qdocconf
deleted file mode 100644
index 9fa359b90..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/headerfile.qdocconf
+++ /dev/null
@@ -1,11 +0,0 @@
-include(config.qdocconf)
-project = HeaderFile
-moduleheader = testheader.h
-
-{includepaths,sourcedirs,headerdirs} += ../headerfile
-
-outputformats = HTML DocBook
-HTML.nosubdirs = true
-HTML.outputsubdir = headerfile
-DocBook.nosubdirs = true
-DocBook.outputsubdir = headerfile-docbook
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/ignoresince.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/ignoresince.qdocconf
deleted file mode 100644
index 019b15b3a..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/ignoresince.qdocconf
+++ /dev/null
@@ -1,9 +0,0 @@
-include(config.qdocconf)
-include(testcpp.qdocconf)
-defines += test_ignoresince
-
-ignoresince = 2.0
-ignoresince.Test = 1.0
-
-HTML.nosubdirs = true
-HTML.outputsubdir = ignoresince
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/nestedmacro.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/nestedmacro.qdocconf
deleted file mode 100644
index 056b30452..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/nestedmacro.qdocconf
+++ /dev/null
@@ -1,10 +0,0 @@
-include(config.qdocconf)
-include(testcpp.qdocconf)
-defines += test_nestedmacro
-
-macro.ver = "5.15.0"
-macro.ver.match = "^(\\d+\\.\\d+)"
-macro.versionnote.HTML = "<p><b>This \1 was introduced in version \2.</b></p>\n"
-
-HTML.nosubdirs = true
-HTML.outputsubdir = nestedmacro
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/noautolist.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/noautolist.qdocconf
deleted file mode 100644
index 16824db0e..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/noautolist.qdocconf
+++ /dev/null
@@ -1,14 +0,0 @@
-include(config.qdocconf)
-include(testqml.qdocconf)
-defines += test_noautolist
-
-outputformats = HTML DocBook
-
-HTML.nosubdirs = true
-DocBook.nosubdirs = true
-HTML.outputsubdir = noautolist
-DocBook.outputsubdir = noautolist-docbook
-
-# TODO: DocBook generator has trouble handling shared comment nodes
-# - allow two warnings related to these
-warninglimit = 2
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/scopedenum.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/scopedenum.qdocconf
deleted file mode 100644
index 0c1501213..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/scopedenum.qdocconf
+++ /dev/null
@@ -1,13 +0,0 @@
-include(config.qdocconf)
-include(testcpp.qdocconf)
-defines += test_scopedenum
-
-sources += ../scopedenum/scopedenum.qdoc
-
-outputformats = HTML DocBook
-
-{HTML.nosubdirs,DocBook.nosubdirs} = true
-HTML.outputsubdir = scopedenum
-DocBook.outputsubdir = scopedenum-docbook
-
-warninglimit += 2
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/test.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/test.qdocconf
deleted file mode 100644
index 80e7c2fee..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/test.qdocconf
+++ /dev/null
@@ -1,13 +0,0 @@
-include(config.qdocconf)
-project = OutputFromQDocFiles
-description = "A test project for QDoc build artifacts"
-buildversion = "$project - $description"
-moduleheader =
-
-sources = ../outputfromqdocfiles/qdoctests-outputfromqdocfiles.qdoc
-
-macro.beginqdoc = "\\c {/*!}"
-macro.endqdoc = "\\c */"
-macro.PROD = QDoc
-
-defines = test_navigation
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/testcpp.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/testcpp.qdocconf
deleted file mode 100644
index 094545756..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/testcpp.qdocconf
+++ /dev/null
@@ -1,10 +0,0 @@
-include(config.qdocconf)
-project = TestCPP
-includepaths += -I../testcpp
-
-headers = ../testcpp/testcpp.h
-sources = ../testcpp/testcpp.cpp
-
-macro.CMDFN = \\\\fn
-macro.nothing = \\dontdocument ()
-macro.testnoautolist = \\if defined(test_noautolist)\n\\noautolist\n\\endif
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/testcpp_singleexec.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/testcpp_singleexec.qdocconf
deleted file mode 100644
index 2ca75ea0a..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/testcpp_singleexec.qdocconf
+++ /dev/null
@@ -1,6 +0,0 @@
-include(testcpp.qdocconf)
-
-# Config::getOutputDir() forces a subdir in single-exec mode (why?),
-# disable it here explicitly
-HTML.nosubdirs = true
-HTML.outputsubdir = .
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/testqml.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/testqml.qdocconf
deleted file mode 100644
index 1c4d29a13..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/testqml.qdocconf
+++ /dev/null
@@ -1,22 +0,0 @@
-include(config.qdocconf)
-include(testcpp.qdocconf)
-moduleheader = TestCPP
-
-project = Test
-description = "A test project for QDoc build artifacts"
-outputdir = ./html
-
-exampledirs = ../qml
-
-headerdirs += ../
-sourcedirs += ../qml
-
-# Exclude source files from other tests' subdirs
-excludedirs = ../bug80259
-
-examples.fileextensions = "*.qml *.cpp"
-
-macro.begincomment = "\\c{/*}"
-macro.QDocTestVer = "1.1"
-
-warninglimit += 1
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/testtemplate.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/testtemplate.qdocconf
deleted file mode 100644
index 575a30d8d..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/testtemplate.qdocconf
+++ /dev/null
@@ -1,9 +0,0 @@
-include(config.qdocconf)
-include(testcpp.qdocconf)
-defines += test_template
-
-headers += ../testtemplate/testtemplate.h
-sources += ../testtemplate/testtemplate.cpp
-
-HTML.nosubdirs = true
-HTML.outputsubdir = template
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/tocnavigation.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/tocnavigation.qdocconf
deleted file mode 100644
index ba950532b..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/tocnavigation.qdocconf
+++ /dev/null
@@ -1,5 +0,0 @@
-include(config.qdocconf)
-include(test.qdocconf)
-
-defines =
-navigation.toctitles = "Table of Contents"
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/usingdirective.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/usingdirective.qdocconf
deleted file mode 100644
index d5a925b58..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/usingdirective.qdocconf
+++ /dev/null
@@ -1,3 +0,0 @@
-include(config.qdocconf)
-project = UsingDirective
-{includepaths,headerdirs,sourcedirs} = ../usingdirective
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/webxml.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/webxml.qdocconf
deleted file mode 100644
index d6e6290b8..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/webxml.qdocconf
+++ /dev/null
@@ -1,3 +0,0 @@
-outputformats = WebXML
-WebXML.quotinginformation = true
-WebXML.nosubdirs = true
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/webxml_test.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/webxml_test.qdocconf
deleted file mode 100644
index 468bc42b5..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/webxml_test.qdocconf
+++ /dev/null
@@ -1,3 +0,0 @@
-include(config.qdocconf)
-include(test.qdocconf)
-include(webxml.qdocconf)
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/webxml_testcpp.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/webxml_testcpp.qdocconf
deleted file mode 100644
index dee1f4dcc..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/webxml_testcpp.qdocconf
+++ /dev/null
@@ -1,3 +0,0 @@
-include(config.qdocconf)
-include(testcpp.qdocconf)
-include(webxml.qdocconf)
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/webxml_testqml.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/webxml_testqml.qdocconf
deleted file mode 100644
index 537685700..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/webxml_testqml.qdocconf
+++ /dev/null
@@ -1,2 +0,0 @@
-include(testqml.qdocconf)
-include(webxml.qdocconf)
diff --git a/tests/auto/qdoc/generatedoutput/testdata/crossmodule/crossmodule.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/crossmodule/crossmodule.qdocconf
deleted file mode 100644
index 359063f34..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/crossmodule/crossmodule.qdocconf
+++ /dev/null
@@ -1,11 +0,0 @@
-include(../configs/config.qdocconf)
-project = CrossModule
-includepaths += -I.
-
-depends = testcpp
-
-headers = testtype.h
-sources = testtype.cpp
-
-HTML.nosubdirs = true
-HTML.outputsubdir = crossmodule
diff --git a/tests/auto/qdoc/generatedoutput/testdata/crossmodule/crossmodule_singleexec.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/crossmodule/crossmodule_singleexec.qdocconf
deleted file mode 100644
index d49498ec0..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/crossmodule/crossmodule_singleexec.qdocconf
+++ /dev/null
@@ -1,4 +0,0 @@
-include(crossmodule.qdocconf)
-
-HTML.nosubdirs = true
-HTML.outputsubdir = crossmodule
diff --git a/tests/auto/qdoc/generatedoutput/testdata/crossmodule/testtype.cpp b/tests/auto/qdoc/generatedoutput/testdata/crossmodule/testtype.cpp
deleted file mode 100644
index 50d5d4845..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/crossmodule/testtype.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "testtype.h"
-
-/*!
- \module CrossModule
-*/
-/*!
- \class TestType
- \inmodule CrossModule
- \brief A class inheriting another class that lives in an external doc
- module.
-
- \section1 Linking
-
- These links go to the parent class:
- \list
- \li \l {TestQDoc::TestDerived}
- \li \l {TestQDoc::}{Test} class \l Usage.
- \li QDOCTEST_MACRO
- \endlist
-
- \sa {TestQDoc::Test::}{someFunction()}
-*/
-
-/*!
- Nothing to see here.
-*/
-void TestType::nothing()
-{
-}
diff --git a/tests/auto/qdoc/generatedoutput/testdata/crossmodule/testtype.h b/tests/auto/qdoc/generatedoutput/testdata/crossmodule/testtype.h
deleted file mode 100644
index 4ffb0c80b..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/crossmodule/testtype.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#pragma once
-
-#include "../testcpp/testcpp.h"
-
-class TestType : public TestQDoc::TestDerived
-{
-public:
- TestType() {}
- void nothing() {}
-};
diff --git a/tests/auto/qdoc/generatedoutput/testdata/dontdocument/dont.cpp b/tests/auto/qdoc/generatedoutput/testdata/dontdocument/dont.cpp
deleted file mode 100644
index 33e208459..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/dontdocument/dont.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "dont.h"
-
-/*!
- \class UnseenClass
- \inmodule TestCPP
- \brief A public but undocumented class.
-*/
-UnseenClass::UnseenClass()
-{
-}
-
-/*!
- \class SeenClass
- \inmodule TestCPP
- \brief A public but undocumented class.
-*/
-SeenClass::SeenClass()
-{
-}
diff --git a/tests/auto/qdoc/generatedoutput/testdata/dontdocument/dont.h b/tests/auto/qdoc/generatedoutput/testdata/dontdocument/dont.h
deleted file mode 100644
index 5ef436b5c..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/dontdocument/dont.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#pragma once
-
-class UnseenClass
-{
-public:
- UnseenClass();
-};
-
-class SeenClass : public UnseenClass
-{
-public:
- SeenClass();
-};
diff --git a/tests/auto/qdoc/generatedoutput/testdata/dontdocument/dontdocument.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/dontdocument/dontdocument.qdocconf
deleted file mode 100644
index ef45f50a6..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/dontdocument/dontdocument.qdocconf
+++ /dev/null
@@ -1,21 +0,0 @@
-include(../configs/testcpp.qdocconf)
-
-headers += dont.h
-sources += dont.cpp test.qdoc
-
-qhp.projects = DontDocument
-
-qhp.DontDocument.file = dontdocument.qhp
-qhp.DontDocument.namespace = org.qt-project.dontdocument.001
-qhp.DontDocument.virtualFolder = test
-qhp.DontDocument.indexTitle = QDoc Test C++ Classes
-qhp.DontDocument.indexRoot =
-
-qhp.DontDocument.subprojects = classes
-qhp.DontDocument.subprojects.classes.title = Classes
-qhp.DontDocument.subprojects.classes.indexTitle = QDoc Test C++ Classes
-qhp.DontDocument.subprojects.classes.selectors = class
-qhp.DontDocument.subprojects.classes.sortPages = true
-
-HTML.nosubdirs = true
-HTML.outputsubdir = dontdocument
diff --git a/tests/auto/qdoc/generatedoutput/testdata/dontdocument/test.qdoc b/tests/auto/qdoc/generatedoutput/testdata/dontdocument/test.qdoc
deleted file mode 100644
index 3f6e0be30..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/dontdocument/test.qdoc
+++ /dev/null
@@ -1,36 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \dontdocument (UnseenClass)
-*/
-
-/*! \page classes.html
- \title Classes
- \generatelist annotatedclasses
-*/
diff --git a/tests/auto/qdoc/generatedoutput/testdata/examples/demos/demo/doc/src/demo.qdoc b/tests/auto/qdoc/generatedoutput/testdata/examples/demos/demo/doc/src/demo.qdoc
deleted file mode 100644
index de7160ee4..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/examples/demos/demo/doc/src/demo.qdoc
+++ /dev/null
@@ -1,34 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example demos/demo
- \title Demo
- \image leonardo-da-vinci.png
- //! Icon made by Smashicons from www.flaticon.com
-*/
diff --git a/tests/auto/qdoc/generatedoutput/testdata/headerfile/testheader.cpp b/tests/auto/qdoc/generatedoutput/testdata/headerfile/testheader.cpp
deleted file mode 100644
index 3a85b169c..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/headerfile/testheader.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "testheader.h"
-
-/*!
- \headerfile <TestHeader>
- \title Test Header
- \inmodule TestCPP
- \brief A header file.
- \ingroup headers
-*/
-
-/*!
- \group headers
- \title Headers
-*/
-
-/*!
- \fn void globalFunc()
- \brief Global function.
- \relates <TestHeader>
-*/
-
-/*!
- \variable globalVar
- \brief Global variable.
- \relates <TestHeader>
-*/
-
-/*!
- \enum Globals
- \relates <TestHeader>
- \value Glo
- \value Bal
-*/
diff --git a/tests/auto/qdoc/generatedoutput/testdata/headerfile/testheader.h b/tests/auto/qdoc/generatedoutput/testdata/headerfile/testheader.h
deleted file mode 100644
index 94c625157..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/headerfile/testheader.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#pragma once
-
-void globalFunc() {};
-enum Globals { Glo, Bal };
-const int globalVar;
diff --git a/tests/auto/qdoc/generatedoutput/testdata/includefromexampledirs/excludes/anotherindex.qdoc b/tests/auto/qdoc/generatedoutput/testdata/includefromexampledirs/excludes/anotherindex.qdoc
deleted file mode 100644
index 75dd9197d..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/includefromexampledirs/excludes/anotherindex.qdoc
+++ /dev/null
@@ -1,39 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
-//! exampledirs-include
- \page index.html
- \title doc index
-
- \section1 C++ Classes
- \generatelist {classesbymodule TestCPP}
- \section1 QML Types
- \annotatedlist qmltypes
-//! exampledirs-include
-*/
diff --git a/tests/auto/qdoc/generatedoutput/testdata/includefromexampledirs/excludes/parentinclude.qdoc b/tests/auto/qdoc/generatedoutput/testdata/includefromexampledirs/excludes/parentinclude.qdoc
deleted file mode 100644
index 4933bc4bd..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/includefromexampledirs/excludes/parentinclude.qdoc
+++ /dev/null
@@ -1,52 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
-//! abstract-type
- \qmltype AbstractParent
- \inqmlmodule QDoc.Test
- \ingroup qmltypes
- \qmlabstract
- \brief Abstract base QML type.
-//! abstract-type
-*/
-
-/*!
-//! children-qmlproperty
- \qmlproperty list<Child> AbstractParent::children
- \default
- \brief Children of the type.
-//! children-qmlproperty
-*/
-
-/*!
-//! rear-qmlmethod
- \qmlmethod void AbstractParent::rear(Child child)
- \brief Do some abstract parenting on \a child.
-//! rear-qmlmethod
-*/
diff --git a/tests/auto/qdoc/generatedoutput/testdata/includefromexampledirs/includefromexampledirs.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/includefromexampledirs/includefromexampledirs.qdocconf
deleted file mode 100644
index d64985942..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/includefromexampledirs/includefromexampledirs.qdocconf
+++ /dev/null
@@ -1,13 +0,0 @@
-include(../configs/testqml.qdocconf)
-
-sourcedirs += src
-
-excludedirs += excludes \
- ../qml/componentset
-
-excludefiles += ../qml/parent.qdoc
-
-exampledirs += excludes
-
-HTML.nosubdirs = true
-HTML.outputsubdir = includefromexampledirs
diff --git a/tests/auto/qdoc/generatedoutput/testdata/includefromexampledirs/src/includefromparent.qdoc b/tests/auto/qdoc/generatedoutput/testdata/includefromexampledirs/src/includefromparent.qdoc
deleted file mode 100644
index a9a526c64..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/includefromexampledirs/src/includefromparent.qdoc
+++ /dev/null
@@ -1,66 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
-\include anotherindex.qdoc exampledirs-include
-
-\include parent.qdocinc
-*/
-
-/*!
-\include parentinclude.qdoc abstract-type
-
-\include parent.qdocinc
-*/
-
-/*!
-\include parentinclude.qdoc children-qmlproperty
-
-\include parent.qdocinc
-*/
-
-/*!
-\include parentinclude.qdoc rear-qmlmethod
-
-\include parent.qdocinc
-*/
-
-/*!
- \qmltype Child
- \inqmlmodule QDoc.Test
- \ingroup qmltypes
- \inherits AbstractParent
- \brief A Child inheriting its parent.
-*/
-
-/*!
- \qmlbasictype int
- \inqmlmodule QDoc.Test
- \ingroup qmltypes
- \brief An integer basic type.
-*/
diff --git a/tests/auto/qdoc/generatedoutput/testdata/outputfromqdocfiles/qdoctests-outputfromqdocfiles.qdoc b/tests/auto/qdoc/generatedoutput/testdata/outputfromqdocfiles/qdoctests-outputfromqdocfiles.qdoc
deleted file mode 100644
index e421ed1fb..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/outputfromqdocfiles/qdoctests-outputfromqdocfiles.qdoc
+++ /dev/null
@@ -1,212 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
-\if defined(test_navigation)
- \nextpage {qdoctests-qdocfileoutput-linking.html}{QDoc Linking Test}
-\endif
-
- \page qdoctests-qdocfileoutput.html
- \title Testing \PROD output from .qdoc files
- \brief This is a simple page for testing purposes only.
-
- QDoc generates documentation for software projects. It does this by
- extracting \e {QDoc comments} from project source files. QDoc comments are
- signified by a C-style-like comment tag followed by an exclamation point,
- like this:
- \beginqdoc \c {This text is contained within QDoc comment tags.} \endqdoc.
-
- \section1 Supported file types
- QDoc parses \c .cpp and \c .qdoc files. It does extract comments from
- header (\c {.h}) files.
-
- \section1 Further information
- This test document is written with the purpose of testing the output QDoc
- generates when parsing \c .qdoc files. It is fairly simple and makes use of
- a limited subset of QDoc's command. Those commands are:
- \list
- \li \c {\page}
- \li \c {\title}
- \li \c {\brief}
- \li \c {\e} (for emphasizing "QDoc comments")
- \li \c {\c} (for multiple monospace-formatted entries)
- \li \c {\section1}
- \li \c {\list}
- \li \c {\li}
- \li \c {\endlist}
- \endlist
-
- \section1 Linking
-
- There are multiple ways to create hyperlinks to other topics:
-
- \list
- \li \l {Testing QDoc's link command}{Linking to a page title}
- \li \l {Link targets}{Linking to a section title}
- \li \l {link-test-target}{Linking using a \\target string}
- \li \l {QDoc Linking Test}{Linking using a \\keyword string}
- \endlist
-*/
-
-/*!
-\if defined(test_navigation)
- \previouspage qdoctests-qdocfileoutput.html \PROD Testing
- \nextpage Table of Contents
-\endif
-
- \keyword QDoc Linking Test
- \page qdoctests-qdocfileoutput-linking.html
- \title Testing QDoc's link command
- \brief This is a page for testing QDoc's link command.
-
- \target link-test-target
- \section1 Link targets
-
- Valid parameters for the link command (\c {\l}) are page and section
- titles, targets defined with \\target or \\keyword commands, and API
- reference keywords (types, methods, namespaces, and so on).
-*/
-
-/*!
-\if defined(test_navigation)
- \previouspage {Testing QDoc's link command}{QDoc Linking Test}
-\endif
-
- \page toc.html
- \title Table of Contents
-
- \list
- \li \l {Testing \PROD output from .qdoc files}{\PROD Testing}
- \li \l {QDoc Linking Test}
- \li \l {Table of Contents}
- \endlist
-*/
-
-/*!
- \page qdoctests-qdocfileoutput-exhaustive.html
- \title Exhaustive testing of QDoc commands
- \brief This page is a dumping ground for QDoc commands under test.
-
- \section1 This is a section1
- \section2 This is a section2
- \section3 This is a section3
- \section4 This is a section4
- \endsection4
- \endsection3
- \endsection2
- \endsection1
-
- \badcode
- This is bad code
- \endcode
-
- This text should have a line break riiiiight \br noooow.
-
- \b{All your text belong to bold}
- ...And this is an examble of only \b bold being, well, bold.
-
- \dots
-
- \js
- // If I knew JavaScript, this is where I would write it.
- \endjs
-
- \qmltext
- And if I knew qmltext, I guess this is where that would go.
- \endqmltext
-
- \caption This a caption
-
- \legalese
- Lorem legal ipsum
- \endlegalese
-
- \quotation
- This is a quotation.
- \endquotation
-
- \raw HTML
- <html><body>This is <b>raw</b>. Like the <h1>Eddie Murphy</h1> movie. Just not as funny.</body></html>
- \endraw
-
- \sidebar
- Look, ma! I made a sidebar!
- \endsidebar
-
- \table
- \row \li Table item in a table row
- \row \li Another item in a different row
- \endtable
-
- \granularity
-
- \important This is really important.
-
- \oldcode
- This is old code.
- \newcode
- This is new and shiny!
- \endcode
-
- \note The code above doesn't compile
-
- \hr
-
- \warning The following commands have yet to be tested:
- footnote
- link
- //! Check why above two (when used in this order) cause missing linefeeds on Windows/webxml
- sincelist
- header
- index
- topicref // or just don’t care, remove it
- image
- inlineimage
- printline
- printto
- printuntil // what’s the difference between printto and printuntil???
- quotefile
- quotefromfile
- quotefunction
- skipline
- skipto
- skipuntil
- span
- snippet
- codeline
- overload
- sub
- sup
- tableofcontents
- tt
- uicontrol
- endmapref
- endomit
- underline
- unicode
-
-*/
diff --git a/tests/auto/qdoc/generatedoutput/testdata/qml/DocTest.qml b/tests/auto/qdoc/generatedoutput/testdata/qml/DocTest.qml
deleted file mode 100644
index 9b4c975f2..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/qml/DocTest.qml
+++ /dev/null
@@ -1,105 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-/*!
- \qmltype DocTest
- \inherits Test
- \inqmlmodule QDoc.Test
- \brief Represents a doc test case.
- \since QDoc.Test 0.9
-
- \section1 Introduction
-
- A documentation test case, itself documented inline in DocTest.qml.
-*/
-Item {
- id: testCase
-
- /*!
- \qmlsignal QDocTest::completed
- */
- signal completed
-
- /*!
- \qmlsignal DocTest::test(var bar)
- Signal with parameter \a bar.
- */
- signal foo(var bar)
-
- /*!
- \qmlproperty string DocTest::name
-
- Name of the test.
- \qml
- DocTest {
- name: "test"
- // ...
- }
- \endqml
- */
- required property string name
-
- /*!
- Whether the test is active.
-
- \sa name
- */
- property bool active: true
-
- /*! \internal */
- property int doctest_internal: -1
-
- /*!
- \qmlmethod DocTest::fail(message = "oops")
- \since QDoc.Test 1.0
-
- Fails the current test case, with the optional \a message.
- */
- function fail(msg) {
- if (msg === undefined)
- msg = "oops";
- }
-
- /*! \internal */
- function doctest_fail(msg) {
- if (msg === undefined)
- msg = "";
- }
-
- /*!
- \brief Fails the current test case, hard.
- \list
- \li Prints out \a msg.
- \li Accepts a random \a option.
- \endlist
- */
- function fail_hard(msg = "facepalm", option = 123) {
- }
-}
diff --git a/tests/auto/qdoc/generatedoutput/testdata/qml/cmaketest/CMakeLists.txt b/tests/auto/qdoc/generatedoutput/testdata/qml/cmaketest/CMakeLists.txt
deleted file mode 100644
index c6a5c654b..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/qml/cmaketest/CMakeLists.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-cmake_minimum_required (VERSION 2.8.11)
-project (QDOCTEST)
diff --git a/tests/auto/qdoc/generatedoutput/testdata/qml/cmaketest/doc/src/cmaketest.qdoc b/tests/auto/qdoc/generatedoutput/testdata/qml/cmaketest/doc/src/cmaketest.qdoc
deleted file mode 100644
index e60f3b9e8..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/qml/cmaketest/doc/src/cmaketest.qdoc
+++ /dev/null
@@ -1,34 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example cmaketest
- \title CMake Example Project
- \image leonardo-da-vinci.png
- //! Icon made by Smashicons from www.flaticon.com
-*/
diff --git a/tests/auto/qdoc/generatedoutput/testdata/qml/componentset/ProgressBar.qml b/tests/auto/qdoc/generatedoutput/testdata/qml/componentset/ProgressBar.qml
deleted file mode 100644
index 2a40cc488..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/qml/componentset/ProgressBar.qml
+++ /dev/null
@@ -1,145 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 1.0
-
-/*!
- \qmltype ProgressBar
- \inqmlmodule UIComponents
- \brief A component that shows the progress of an event.
-
- A ProgressBar shows the linear progress of an event as its \l value.
- The range is specified using the \l {minimum} and the \l{maximum} values.
-
- The ProgressBar component is part of the \l {UI Components} module.
-
- This documentation is part of the \l{componentset}{UIComponents} example.
-*/
-Item {
- id: progressbar
-
- /*!
- The minimum value of the ProgressBar range.
- The \l value must not be less than this value.
- */
- property int minimum: 0
-
- /*!
- The maximum value of the ProgressBar range.
- The \l value must not be more than this value.
- */
- property int maximum: 100
-
- /*!
- The value of the progress.
- */
- property int value: 0
-
- /*!
- \qmlproperty color ProgressBar::color
- The color of the ProgressBar's gradient. Must bind to a color type.
-
- \omit
- The "\qmlproperty <type> <property name>" is needed because
- property alias need to have their types manually entered.
-
- QDoc will not publish the documentation within omit and endomit.
- \endomit
-
- \sa secondColor
- */
- property alias color: gradient1.color
-
- /*!
- \qmlproperty color ProgressBar::secondColor
- The second color of the ProgressBar's gradient.
- Must bind to a color type.
-
- \omit
- The "\qmlproperty <type> <property name>" is needed because
- property alias need to have their types manually entered.
-
- QDoc will not publish the documentation within omit and endomit.
- \endomit
-
- \sa color
- */
- property alias secondColor: gradient2.color
-
- width: 250; height: 23
- clip: true
-
- Rectangle {
- id: highlight
-
- /*!
- An internal documentation comment. The widthDest property is not
- a public API and therefore will not be exposed.
- */
- property int widthDest: ((progressbar.width * (value - minimum)) / (maximum - minimum) - 6)
-
- width: highlight.widthDest
- Behavior on width { SmoothedAnimation { velocity: 1200 } }
-
- anchors { left: parent.left; top: parent.top; bottom: parent.bottom; margins: 3 }
- radius: 1
- gradient: Gradient {
- GradientStop { id: gradient1; position: 0.0 }
- GradientStop { id: gradient2; position: 1.0 }
- }
-
- }
- Text {
- anchors { right: highlight.right; rightMargin: 6; verticalCenter: parent.verticalCenter }
- color: "white"
- font.bold: true
- text: Math.floor((value - minimum) / (maximum - minimum) * 100) + '%'
- }
-}
diff --git a/tests/auto/qdoc/generatedoutput/testdata/qml/componentset/Switch.qml b/tests/auto/qdoc/generatedoutput/testdata/qml/componentset/Switch.qml
deleted file mode 100644
index db9616b69..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/qml/componentset/Switch.qml
+++ /dev/null
@@ -1,152 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 1.0
-
-/*!
- \qmltype ToggleSwitch
- \inqmlmodule UIComponents
- \brief A component that can be turned on or off.
-
- A toggle switch has two states: an \c on and an \c off state. The \c off
- state is when the \l on property is set to \c false.
-
- The ToggleSwitch component is part of the \l {UI Components} module.
-
- This documentation is part of the \l{componentset}{UIComponents} example.
-
-*/
-Item {
- id: toggleswitch
- width: background.width; height: background.height
-
- /*!
- Indicates the state of the switch. If \c false, then the switch is in
- the \c off state.
-
- \omit
- The \qmlproperty <type> <propertyname> is not necessary as QDoc
- will associate this property to the ToggleSwitch
-
- QDoc will not publish the documentation within omit and endomit.
- \endomit
- */
- property bool on: false
-
-
- /*!
- A method to toggle the switch. If the switch is \c on, the toggling it
- will turn it \c off. Toggling a switch in the \c off position will
- turn it \c on.
- */
- function toggle() {
- if (toggleswitch.state == "on")
- toggleswitch.state = "off";
- else
- toggleswitch.state = "on";
- }
-
-
- /*!
- \internal
-
- An internal function to synchronize the switch's internals. This
- function is not for public access. The \internal command will
- prevent QDoc from publishing this comment in the public API.
- */
- function releaseSwitch() {
- if (knob.x == 1) {
- if (toggleswitch.state == "off") return;
- }
- if (knob.x == 78) {
- if (toggleswitch.state == "on") return;
- }
- toggle();
- }
-
- Rectangle {
- id: background
- width: 130; height: 48
- radius: 48
- color: "lightsteelblue"
- MouseArea { anchors.fill: parent; onClicked: toggle() }
- }
-
- Rectangle {
- id: knob
- width: 48; height: 48
- radius: width
- color: "lightblue"
-
- MouseArea {
- anchors.fill: parent
- drag.target: knob; drag.axis: Drag.XAxis; drag.minimumX: 1; drag.maximumX: 78
- onClicked: toggle()
- onReleased: releaseSwitch()
- }
- }
-
- states: [
- State {
- name: "on"
- PropertyChanges { target: knob; x: 78 }
- PropertyChanges { target: toggleswitch; on: true }
- },
- State {
- name: "off"
- PropertyChanges { target: knob; x: 1 }
- PropertyChanges { target: toggleswitch; on: false }
- }
- ]
-
- transitions: Transition {
- NumberAnimation { properties: "x"; easing.type: Easing.InOutQuad; duration: 200 }
- }
-}
diff --git a/tests/auto/qdoc/generatedoutput/testdata/qml/componentset/TabWidget.qml b/tests/auto/qdoc/generatedoutput/testdata/qml/componentset/TabWidget.qml
deleted file mode 100644
index 07fd40db9..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/qml/componentset/TabWidget.qml
+++ /dev/null
@@ -1,193 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 1.0
-
-/*!
- \qmltype TabWidget
- \inqmlmodule UIComponents
- \brief A widget that places its children as tabs.
-
- A TabWidget places its children as tabs in a view. Selecting
- a tab involves selecting the tab at the top.
-
- The TabWidget component is part of the \l {UI Components} module.
-
- This documentation is part of the \l{componentset}{UIComponents} example.
-
- \section1 Adding Tabs
-
- To add a tab, declare the tab as a child of the TabWidget.
-
- \code
- TabWidget {
- id: tabwidget
-
- Rectangle {
- id: tab1
- color: "red"
- //... omitted
- }
- Rectangle {
- id: tab2
- color: "blue"
- //... omitted
- }
-
- }
- \endcode
-
-*/
-Item {
- id: tabWidget
-
- /*!
- \internal
-
- Setting the default property to stack.children means any child items
- of the TabWidget are actually added to the 'stack' item's children.
-
- See the \l{"Property Binding in QML"}
- documentation for details on default properties.
-
- This is an implementation detail, not meant for public knowledge. Putting
- the \internal command at the beginning will cause QDoc to not publish this
- documentation in the public API page.
-
- Normally, a property alias needs to have a
- "\qmlproperty <type> <propertyname>" to assign the alias a type.
-
- */
- default property alias content: stack.children
-
-
- /*!
- The currently active tab in the TabWidget.
- */
- property int current: 0
-
- /*!
- A sample \c{read-only} property.
- A contrived property to demonstrate QDoc's ability to detect
- read-only properties.
-
- The signature is:
- \code
- readonly property int sampleReadOnlyProperty: 0
- \endcode
-
- Note that the property must be initialized to a value.
-
- */
- readonly property int sampleReadOnlyProperty: 0
-
- /*!
- \internal
-
- This handler is an implementation
- detail. The \c{\internal} command will prevent QDoc from publishing this
- documentation on the public API.
- */
- onCurrentChanged: setOpacities()
- Component.onCompleted: setOpacities()
-
- /*!
- \internal
-
- An internal function to set the opacity.
- The \internal command will prevent QDoc from publishing this
- documentation on the public API.
- */
- function setOpacities() {
- for (var i = 0; i < stack.children.length; ++i) {
- stack.children[i].opacity = (i == current ? 1 : 0)
- }
- }
-
- Row {
- id: header
-
- Repeater {
- model: stack.children.length
- delegate: Rectangle {
- width: tabWidget.width / stack.children.length; height: 36
-
- Rectangle {
- width: parent.width; height: 1
- anchors { bottom: parent.bottom; bottomMargin: 1 }
- color: "#acb2c2"
- }
- BorderImage {
- anchors { fill: parent; leftMargin: 2; topMargin: 5; rightMargin: 1 }
- border { left: 7; right: 7 }
- source: "tab.png"
- visible: tabWidget.current == index
- }
- Text {
- horizontalAlignment: Qt.AlignHCenter; verticalAlignment: Qt.AlignVCenter
- anchors.fill: parent
- text: stack.children[index].title
- elide: Text.ElideRight
- font.bold: tabWidget.current == index
- }
- MouseArea {
- anchors.fill: parent
- onClicked: tabWidget.current = index
- }
- }
- }
- }
-
- Item {
- id: stack
- width: tabWidget.width
- anchors.top: header.bottom; anchors.bottom: tabWidget.bottom
- }
-}
diff --git a/tests/auto/qdoc/generatedoutput/testdata/qml/componentset/examples.qdoc b/tests/auto/qdoc/generatedoutput/testdata/qml/componentset/examples.qdoc
deleted file mode 100644
index 9ca0db891..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/qml/componentset/examples.qdoc
+++ /dev/null
@@ -1,104 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example componentset
- \title QML Documentation Example
- \brief Example for documenting QML types.
-
- \testnoautolist
-
- \meta tag {test,sample}
- \meta installpath tutorials
-
- This example demonstrates one of the ways to document QML types. It also
- generates a warning about a missing example image, on purpose.
-
- In particular, there are sample types that are documented with QDoc
- commands comments. There are documentation comments for the QML types
- and their public interfaces. The types are grouped into a module, the
- \l{UI Components} module.
-
- The uicomponents.qdoc file generates
- the overview page for the \l{UI Components} module page.
-
- The generated documentation is available in the \l{UI Components} module.
-
- \section1 QML Class
-
- The QML types use the \\qmltype to document the
- type. In addition, they have the \\inmodule
- command in order for QDoc to associate them to the \c UIComponents module.
-
- QDoc uses the \\brief command to place a basic
- description when listing the types.
-
- \section1 Properties, Signals, Handlers, and Methods
-
- The types have their properties, signals, handlers, and methods
- defined in their respective QML files. QDoc associates the properties and
- methods to the types, therefore, you only need to place the
- documentation above the property, method, or signal.
-
- To document the type of a \e {property alias}, you must use the
- \\qmlproperty command to specify the data type.
-
- \code
- \qmlproperty int anAliasedProperty
- An aliased property of type int.
- \endcode
-
- \section2 Internal Documentation
-
- You may declare that a documentation is for internal use by placing the
- \\internal command after the beginning QDoc comment
- \begincomment. QDoc will prevent the internal documentation from appearing
- in the public API.
-
- If you wish to omit certain parts of the documentation, you may use the
- \\omit and \\endomit command.
-
- \section1 QML Types with C++ Implementation
-
- This example only demonstrates the documentation for types in QML
- files, but the regular QML commands may be placed
- inside C++ classes to define the public API of the QML type.
-
-*/
-
-
-/*!
- \qmlmodule UIComponents 1.0
- \title UI Components
- \brief Basic set of UI components.
-
- 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.
-
- This module is part of the \l{componentset}{UIComponents} example.
-*/
diff --git a/tests/auto/qdoc/generatedoutput/testdata/qml/componentset/uicomponents.qdoc.sample b/tests/auto/qdoc/generatedoutput/testdata/qml/componentset/uicomponents.qdoc.sample
deleted file mode 100644
index 0c6d187ed..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/qml/componentset/uicomponents.qdoc.sample
+++ /dev/null
@@ -1,38 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \qmlmodule UIComponents 1.0
- \title UI Components
- \brief Basic set of UI components
-
- 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 off the \l{Qt
- Quick Code Samples}.
-
- This module is part of the \l{componentset}{UIComponents} example.
-*/
diff --git a/tests/auto/qdoc/generatedoutput/testdata/qml/parent.qdoc b/tests/auto/qdoc/generatedoutput/testdata/qml/parent.qdoc
deleted file mode 100644
index c3db549eb..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/qml/parent.qdoc
+++ /dev/null
@@ -1,84 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \qmltype AbstractParent
- \inqmlmodule QDoc.Test
- \qmlabstract
- \brief Abstract base QML type.
-*/
-
-/*!
- \qmlproperty list<Child> AbstractParent::children
- \default
- \brief Children of the type.
-*/
-
-/*!
- \qmlmethod void AbstractParent::rear(Child child, var method = Strict)
- \brief Do some abstract parenting on \a child using a specific \a method.
-*/
-
-/*!
- \qmltype Child
- \inqmlmodule QDoc.Test
- \inherits AbstractParent
- \brief A Child inheriting its parent.
-*/
-
-/*!
- \qmlbasictype int
- \inqmlmodule QDoc.Test
-
- \brief An integer basic type.
-*/
-
-/*!
- \qmlmethod int int::abs()
- Returns the absolute value of this integer.
-*/
-
-/*!
- \qmltype InternParent
- \inqmlmodule QDoc.Test
- \internal
- \qmlabstract
- \brief Internal abstract base QML type.
-*/
-
-/*!
- \qmlproperty int InternParent::prop
- \brief Propagated to inheriting type docs.
-*/
-
-/*!
- \qmltype YetAnotherChild
- \inherits InternParent
- \inqmlmodule QDoc.Test
- \brief A type inheriting from internal abstract parent.
-*/
diff --git a/tests/auto/qdoc/generatedoutput/testdata/qml/type.cpp b/tests/auto/qdoc/generatedoutput/testdata/qml/type.cpp
deleted file mode 100644
index 439738342..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/qml/type.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "testcpp.h"
-
-/*!
- \qmlmodule QDoc.Test \QDocTestVer
- \brief QML Types for the Test module.
- \since 1.1
- \preliminary
-
- \testnoautolist
-*/
-
-/*!
- \qmltype Type
- \instantiates TestQDoc::Test
- \inqmlmodule QDoc.Test
- \brief A QML type documented in a .cpp file.
-*/
-
-/*!
- \qmlproperty int Type::id
- \readonly
- \brief A read-only property.
-*/
-
-/*!
- \qmlproperty string QDoc.Test::Type::name
- \required
- \brief Name of the Test.
-*/
-
-/*!
- \qmlattachedproperty enumeration Type::type
-
- \value Type.NoType
- Nothing
- \value Type.SomeType
- Something
-*/
-
-/*!
- \qmlproperty int Type::group.first
- \qmlproperty int Type::group.second
- \qmlproperty int Type::group.third
-
- \brief A property group.
-*/
-
-/*!
- \qmlproperty int Type::fourth
- \qmlproperty int Type::fifth
-
- \brief A group of properties sharing a documentation comment.
-*/
-
-/*!
- \qmlmethod Type Type::copy(a)
-
- Returns another Type based on \a a.
-*/
-
-/*!
- \qmlmethod Type::enable()
- \qmlmethod Type::disable()
-
- Enables or disables this type.
-*/
-
-/*!
- \qmlsignal Type::completed(int status)
-
- This signal is emitted when the operation completed with \a status.
-*/
-
-/*!
- \qmlattachedsignal Type::configured()
-
- This attached signal is emitted when the type was configured.
-*/
diff --git a/tests/auto/qdoc/generatedoutput/testdata/qmlpropertygroups/parent.qdoc b/tests/auto/qdoc/generatedoutput/testdata/qmlpropertygroups/parent.qdoc
deleted file mode 100644
index e0d716225..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/qmlpropertygroups/parent.qdoc
+++ /dev/null
@@ -1,62 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \qmltype Parent
- \inqmlmodule QDoc.Test
- \brief Base QML type.
-*/
-
-/*!
- \qmlproperty int Parent::group.c
- \qmlproperty int Parent::group.a
- \qmlproperty int Parent::group.b
- \brief Property group.
-*/
-
-/*!
- \qmlproperty int Parent::group.b
- \readonly
-*/
-
-/*!
- \qmlproperty int Parent::group.c
- \since 2.0
-*/
-
-/*!
- \qmltype AnotherChild
- \inqmlmodule QDoc.Test
- \inherits Parent
- \brief Just another child inheriting a parent.
-*/
-
-/*!
- \qmlproperty string AnotherChild::name
- \brief Name of this child.
-*/
diff --git a/tests/auto/qdoc/generatedoutput/testdata/qmlpropertygroups/qmlpropertygroups.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/qmlpropertygroups/qmlpropertygroups.qdocconf
deleted file mode 100644
index 713b5d6d5..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/qmlpropertygroups/qmlpropertygroups.qdocconf
+++ /dev/null
@@ -1,11 +0,0 @@
-include(../configs/testqml.qdocconf)
-
-sourcedirs += .
-
-outputformats = HTML DocBook
-
-{HTML.nosubdirs,DocBook.nosubdirs} = true
-HTML.outputsubdir = qmlpropertygroups
-DocBook.outputsubdir = qmlpropertygroups-docbook
-
-warninglimit += 2
diff --git a/tests/auto/qdoc/generatedoutput/testdata/scopedenum/scopedenum.qdoc b/tests/auto/qdoc/generatedoutput/testdata/scopedenum/scopedenum.qdoc
deleted file mode 100644
index 4262c1ce6..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/scopedenum/scopedenum.qdoc
+++ /dev/null
@@ -1,35 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \enum TestQDoc::Test::ScopedEnum
-
- \value This Something
- \value That Something else
- \value All Everything
- \omitvalue OmittedValue
-*/
diff --git a/tests/auto/qdoc/generatedoutput/testdata/singleexec/singleexec.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/singleexec/singleexec.qdocconf
deleted file mode 100644
index 037cfc74a..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/singleexec/singleexec.qdocconf
+++ /dev/null
@@ -1,2 +0,0 @@
-../configs/testcpp_singleexec.qdocconf
-../crossmodule/crossmodule_singleexec.qdocconf
diff --git a/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp b/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp
deleted file mode 100644
index eb5b79c67..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp
+++ /dev/null
@@ -1,233 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "testcpp.h"
-
-namespace TestQDoc {
-
-/*!
- \module TestCPP
- \qtvariable testcpp
- \qtcmakepackage QDocTest
- \title QDoc Test C++ Classes
- \brief A test module page.
-
- \testnoautolist
-
-\if defined(test_nestedmacro)
- \versionnote {module} {\ver}
-\endif
-*/
-
-/*!
- \namespace TestQDoc
- \inheaderfile TestCPP
- \inmodule TestCPP
- \brief A namespace.
-
- \section1 Usage
- This namespace is for testing QDoc output.
-*/
-
-/*!
- \class TestQDoc::Test
- \inmodule TestCPP
- \brief A class in a namespace.
-
-\if defined(test_ignoresince)
- //! omitted by ignoresince
- \since 1.1
-\endif
-*/
-
-/*!
- \class TestQDoc::TestDerived
- \inmodule TestCPP
- \brief A derived class in a namespace.
-*/
-
-/*!
- \macro QDOCTEST_MACRO
- \relates TestQDoc
-\if defined(test_ignoresince)
- //! omitted by ignoresince.Test
- \since Test 0.9
-\endif
-*/
-
-/*!
- \macro QDOCTEST_MACRO2(x)
- \relates TestQDoc::Test
- \since Test 1.1
- \brief A macro with argument \a x.
-*/
-
-/*!
- \deprecated
-
- Use someFunction() instead.
-*/
-void Test::deprecatedMember()
-{
- return;
-}
-
-/*!
- \obsolete
-
- Use someFunction() instead.
-*/
-void Test::obsoleteMember()
-{
- return;
-}
-
-/*!
- \obsolete Use obsoleteMember() instead.
-*/
-void Test::anotherObsoleteMember()
-{
- return;
-}
-
-/*!
- Function that takes a parameter \a i and \a b.
-\if defined(test_ignoresince)
- \since 2.0
-\endif
-*/
-void Test::someFunctionDefaultArg(int i, bool b = false)
-{
- return;
-}
-
-/*!
- \fn void Test::func(bool)
- \internal
-*/
-
-/*!
- \fn [funcPtr] void (*funcPtr(bool b, const char *s))(bool)
-
- Returns a pointer to a function that takes a boolean. Uses \a b and \a s.
-*/
-
-// Documented below with an \fn command. Unnecessary but we support it, and it's used.
-int Test::someFunction(int v)
-{
- return v;
-}
-
-/*!
- \fn void TestQDoc::Test::inlineFunction()
-
- \brief An inline function, documented using the \CMDFN QDoc command.
-*/
-
-/*!
- \fn int Test::someFunction(int v = 0)
-
- Function that takes a parameter \a v.
- Also returns the value of \a v.
-\if defined(test_ignoresince)
- \since Test 1.0
-\endif
-*/
-
-/*!
- Function that must be reimplemented.
-*/
-void Test::virtualFun()
-{
- return;
-}
-
-/*!
- \typedef Test::SomeType
- \brief A typedef.
-*/
-
-/*!
- \reimp
-*/
-void TestDerived::virtualFun()
-{
- return;
-}
-
-/*!
- \fn TestQDoc::Test::overload()
- \fn Test::overload(bool b)
- //! The second overload should match even without the fully qualified path
-
- Overloads that share a documentation comment, optionally taking
- a parameter \a b.
-*/
-
-/*!
- \fn Test::overload(bool b)
- \since Test 1.2
-*/
-
-/*!
- \typealias TestDerived::DerivedType
- An aliased typedef.
-*/
-
-/*!
- \typedef TestDerived::NotTypedef
- I'm an alias, not a typedef.
-*/
-
-/*!
-\if defined(test_template)
- \fn template <typename T1, typename T2> void TestQDoc::Test::funcTemplate(T1 a, T2 b)
- \brief Function template with two parameters, \a a and \a b.
-\else
- \nothing
-\endif
-*/
-
-/*!
-\if defined(test_template)
- \struct TestQDoc::Test::Struct
- \inmodule TestCPP
- \brief Templated struct.
-\else
- \nothing
-\endif
-*/
-
-/*!
-\if defined(test_template)
- \typealias TestQDoc::Test::Specialized
-\else
- \nothing
-\endif
-*/
-
-} // namespace TestQDoc
diff --git a/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.h b/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.h
deleted file mode 100644
index b950dfec9..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#pragma once
-#define QDOCTEST_MACRO test
-#define QDOCTEST_MACRO2(x) (x) < 0 ? 0 : (x))
-
-namespace TestQDoc {
-
-class Test {
-public:
-
-#ifdef test_template
-template<typename D, typename T> struct Struct {};
-template<typename T>
-using Specialized = Struct<int, T>;
-#endif
-
-#ifdef test_scopedenum
- enum class ScopedEnum : unsigned char {
- This = 0x01,
- That = 0x02,
- All = This | That,
- OmittedValue = 99
- };
-#endif
- typedef struct {
- int data;
- } SomeType;
- int someFunction(int v = 0);
- void someFunctionDefaultArg(int i, bool b);
- void obsoleteMember();
- void anotherObsoleteMember();
- void deprecatedMember();
- void func(bool) {};
- //! [funcPtr]
- void (*funcPtr(bool b, const char *s))(bool) {
- return func;
- }
- inline void inlineFunction() {};
- virtual void virtualFun();
-
-protected:
- void overload() {}
- void overload(bool b) { if (!b) return; }
-#ifdef test_template
- template <typename T1, typename T2> void funcTemplate(T1 a, T2 b) {
- a = b;
- }
-#endif
-};
-
-class TestDerived : public Test {
-public:
- using DerivedType = Test::SomeType;
- using NotTypedef = int;
- void virtualFun() override;
-};
-
-} // namespace TestQDoc
diff --git a/tests/auto/qdoc/generatedoutput/testdata/testtemplate/testtemplate.cpp b/tests/auto/qdoc/generatedoutput/testdata/testtemplate/testtemplate.cpp
deleted file mode 100644
index 3214f4061..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/testtemplate/testtemplate.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "testtemplate.h"
-
-/*!
- \class Foo
- \inmodule TestCPP
- \brief Class template.
-*/
-
-/*!
- \class Bar
- \inmodule TestCPP
- \brief Another class template.
-*/
-
-/*!
- //! Baz is a struct, QDoc auto-converts this to the correct type
- \class Baz
- \inmodule TestCPP
- \brief Class template template.
-*/
diff --git a/tests/auto/qdoc/generatedoutput/testdata/testtemplate/testtemplate.h b/tests/auto/qdoc/generatedoutput/testdata/testtemplate/testtemplate.h
deleted file mode 100644
index d60ab0da4..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/testtemplate/testtemplate.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#pragma once
-
-template <typename T>
-class Foo {
-public:
- Foo() {}
-private:
- T t;
-};
-
-template <typename T, typename D>
-class Bar {
-public:
- Bar() {}
-private:
- T t;
- D d;
-};
-
-template<template<typename> class X, typename Y>
-struct Baz
-{
- X<Y> z;
- Baz() : z() {}
-};
diff --git a/tests/auto/qdoc/generatedoutput/testdata/usingdirective/alias.h b/tests/auto/qdoc/generatedoutput/testdata/usingdirective/alias.h
deleted file mode 100644
index 1fb9ee471..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/usingdirective/alias.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-#include "space.h"
-
-namespace Alias {
- using spacename = Space::spacename;
-}
diff --git a/tests/auto/qdoc/generatedoutput/testdata/usingdirective/space.cpp b/tests/auto/qdoc/generatedoutput/testdata/usingdirective/space.cpp
deleted file mode 100644
index 4a4962550..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/usingdirective/space.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "space.h"
-
-/*!
- \namespace Space
- \inmodule UsingDirective
- \brief A namespace...in space.
-*/
-
-using namespace Alias;
-using namespace Space;
-
-/*!
- \relates Space
- A \a space function.
-*/
-void spaceFun(spacename space)
-{
-}
diff --git a/tests/auto/qdoc/generatedoutput/testdata/usingdirective/space.h b/tests/auto/qdoc/generatedoutput/testdata/usingdirective/space.h
deleted file mode 100644
index 9ac01fba6..000000000
--- a/tests/auto/qdoc/generatedoutput/testdata/usingdirective/space.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-namespace Space {
- typedef int spacename;
-}
-
-void spaceFun(Space::spacename space);
diff --git a/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp b/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp
deleted file mode 100644
index bf22e44ed..000000000
--- a/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp
+++ /dev/null
@@ -1,473 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include <QProcess>
-#include <QTemporaryDir>
-#include <QDirIterator>
-#include <QtTest>
-
-class tst_generatedOutput : public QObject
-{
- Q_OBJECT
-
-public:
- void setRegenerate() { m_regen = true; }
-
-private slots:
- void initTestCase();
- void init();
-
- // HTML generator
- void htmlFromQDocFile();
- void htmlFromCpp();
- void htmlFromQml();
- void htmlFromCppBug80259();
-
- // WebXML generator
- void webXmlFromQDocFile();
- void webXmlFromCpp();
- void webXmlFromQml();
- void webXmlFromCppBug80259();
-
- // DocBook generator
- void docBookFromQDocFile();
- void docBookFromCpp();
- void docBookFromQml();
-
- // Output format independent tests
- void autoNavigation();
- void examplesManifestXmlAndQhp();
- void ignoresinceVariable();
- void templateParameters();
- void scopedEnum();
- void dontDocument();
- void inheritedQmlPropertyGroups();
- void crossModuleLinking();
- void includeFromExampleDirs();
- void singleExec();
- void preparePhase();
- void generatePhase();
- void noAutoList();
- void nestedMacro();
- void headerFile();
- void usingDirective();
-
-private:
- QScopedPointer<QTemporaryDir> m_outputDir;
- QString m_qdoc;
- QDir m_expectedDir;
- bool m_regen = false;
-
- void runQDocProcess(const QStringList &arguments);
- void compareLineByLine(const QStringList &expectedFiles);
- void testAndCompare(const char *input, const char *outNames, const char *extraParams = nullptr,
- const char *outputPathPrefix = nullptr);
- void copyIndexFiles();
-};
-
-void tst_generatedOutput::initTestCase()
-{
- // 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" : "";
- m_qdoc = binpath + QLatin1String("/qdoc") + extension;
- m_expectedDir.setPath(QFINDTESTDATA(".") + QLatin1String("/expected_output"));
-}
-
-void tst_generatedOutput::init()
-{
- m_outputDir.reset(new QTemporaryDir());
- if (!m_outputDir->isValid()) {
- const QString errorMessage =
- "Couldn't create temporary directory: " + m_outputDir->errorString();
- QFAIL(qPrintable(errorMessage));
- }
-}
-
-void tst_generatedOutput::runQDocProcess(const QStringList &arguments)
-{
- QProcess qdocProcess;
- qdocProcess.setProgram(m_qdoc);
- qdocProcess.setArguments(arguments);
- qdocProcess.start();
- qdocProcess.waitForFinished();
-
- if (qdocProcess.exitCode() == 0)
- return;
-
- QString output = qdocProcess.readAllStandardOutput();
- QString errors = qdocProcess.readAllStandardError();
-
- qInfo() << "QDoc exited with exit code" << qdocProcess.exitCode();
- if (output.size() > 0)
- qInfo() << "Received output:\n" << output;
- if (errors.size() > 0)
- qInfo() << "Received errors:\n" << errors;
-
- QFAIL("Running QDoc failed. See output above.");
-}
-
-void tst_generatedOutput::compareLineByLine(const QStringList &expectedFiles)
-{
- for (const auto &file : expectedFiles) {
- QString expected(m_expectedDir.filePath(file));
- QString actual(m_outputDir->filePath(file));
-
- QFile expectedFile(expected);
- if (!expectedFile.open(QIODevice::ReadOnly))
- QFAIL("Cannot open expected data file!");
- QTextStream expectedIn(&expectedFile);
-
- QFile actualFile(actual);
- if (!actualFile.open(QIODevice::ReadOnly))
- QFAIL("Cannot open actual data file!");
- QTextStream actualIn(&actualFile);
-
- const QLatin1String delim(": ");
- int lineNumber = 0;
- while (!expectedIn.atEnd() && !actualIn.atEnd()) {
- lineNumber++;
- QString prefix = file + delim + QString::number(lineNumber) + delim;
- QString expectedLine = prefix + expectedIn.readLine();
- QString actualLine = prefix + actualIn.readLine();
- QCOMPARE(actualLine, expectedLine);
- }
- }
-}
-
-void tst_generatedOutput::testAndCompare(const char *input, const char *outNames,
- const char *extraParams, const char *outputPathPrefix)
-{
- QStringList args { "-outputdir", m_outputDir->path() + "/" + outputPathPrefix,
- QFINDTESTDATA(input) };
- if (extraParams)
- args << QString(QLatin1String(extraParams)).split(QChar(' '));
-
- runQDocProcess(args);
-
- if (QTest::currentTestFailed())
- return;
-
- QStringList expectedOuts(QString(QLatin1String(outNames)).split(QChar(' ')));
- if (outputPathPrefix)
- for (auto &expectedOut : expectedOuts)
- expectedOut = QString(outputPathPrefix) + "/" + expectedOut;
-
- if (m_regen) {
- QVERIFY(m_expectedDir.mkpath(m_expectedDir.path()));
- for (const auto &file : qAsConst(expectedOuts)) {
- QFileInfo fileInfo(m_expectedDir.filePath(file));
- fileInfo.dir().remove(fileInfo.fileName()); // Allowed to fail
- QVERIFY(m_expectedDir.mkpath(fileInfo.dir().path()));
- QVERIFY(QFile::copy(m_outputDir->filePath(file),
- fileInfo.filePath()));
- }
- QSKIP("Regenerated expected output only.");
- return;
- }
-
- compareLineByLine(expectedOuts);
-}
-
-// Copy <project>.index to <project>/<project>.index in the outputdir
-void tst_generatedOutput::copyIndexFiles()
-{
- QDirIterator it(m_outputDir->path(), QStringList("*.index"), QDir::Files, QDirIterator::Subdirectories);
- while (it.hasNext()) {
- QFileInfo fileInfo(it.next());
- QDir indexDir(m_outputDir->path());
- QVERIFY(indexDir.mkpath(fileInfo.baseName()));
- QVERIFY(indexDir.cd(fileInfo.baseName()));
- if (!indexDir.exists(fileInfo.fileName()))
- QVERIFY(QFile::copy(fileInfo.filePath(), indexDir.filePath(fileInfo.fileName())));
- }
-}
-
-void tst_generatedOutput::htmlFromQDocFile()
-{
- testAndCompare("testdata/configs/test.qdocconf",
- "qdoctests-qdocfileoutput.html "
- "qdoctests-qdocfileoutput-linking.html "
- "qdoctests-qdocfileoutput-exhaustive.html "
- "toc.html");
-}
-
-void tst_generatedOutput::htmlFromCpp()
-{
- testAndCompare("testdata/configs/testcpp.qdocconf",
- "testcpp-module.html "
- "testqdoc-test.html "
- "testqdoc-test-members.html "
- "testqdoc-testderived.html "
- "testqdoc-testderived-members.html "
- "testqdoc.html");
-}
-
-void tst_generatedOutput::htmlFromQml()
-{
- testAndCompare("testdata/configs/testqml.qdocconf",
- "test-componentset-example.html "
- "test-cmaketest-example.html "
- "uicomponents-qmlmodule.html "
- "qdoc-test-qmlmodule.html "
- "qml-qdoc-test-abstractparent.html "
- "qml-qdoc-test-child.html "
- "qml-qdoc-test-yetanotherchild.html "
- "qml-qdoc-test-doctest.html "
- "qml-qdoc-test-type-members.html "
- "qml-qdoc-test-type.html "
- "qml-uicomponents-progressbar.html "
- "qml-uicomponents-switch.html "
- "qml-uicomponents-tabwidget.html "
- "qml-int.html");
-}
-
-void tst_generatedOutput::htmlFromCppBug80259()
-{
- testAndCompare("testdata/bug80259/testmodule.qdocconf",
- "first.html "
- "second.html "
- "third.html "
- "index.html");
-}
-
-void tst_generatedOutput::webXmlFromQDocFile()
-{
- testAndCompare("testdata/configs/webxml_test.qdocconf",
- "html/qdoctests-qdocfileoutput.webxml "
- "html/qdoctests-qdocfileoutput-linking.webxml "
- "html/qdoctests-qdocfileoutput-exhaustive.webxml");
-}
-
-void tst_generatedOutput::webXmlFromCpp()
-{
- testAndCompare("testdata/configs/webxml_testcpp.qdocconf",
- "html/testcpp-module.webxml "
- "html/testqdoc-test.webxml "
- "html/testqdoc-testderived.webxml");
-}
-
-void tst_generatedOutput::webXmlFromQml()
-{
- testAndCompare("testdata/configs/webxml_testqml.qdocconf",
- "html/test-componentset-example.webxml "
- "html/uicomponents-qmlmodule.webxml");
-}
-
-void tst_generatedOutput::webXmlFromCppBug80259()
-{
- testAndCompare("testdata/bug80259/webxml_testmodule.qdocconf",
- "html/first.webxml "
- "html/second.webxml "
- "html/third.webxml "
- "html/index.webxml");
-}
-
-void tst_generatedOutput::docBookFromQDocFile()
-{
- testAndCompare("testdata/configs/docbook_test.qdocconf",
- "docbook/qdoctests-qdocfileoutput.xml "
- "docbook/qdoctests-qdocfileoutput-linking.xml "
- "docbook/qdoctests-qdocfileoutput-exhaustive.xml");
-}
-
-void tst_generatedOutput::docBookFromCpp()
-{
- testAndCompare("testdata/configs/docbook_testcpp.qdocconf",
- "docbook/testcpp-module.xml "
- "docbook/testqdoc-test.xml "
- "docbook/testqdoc-testderived.xml "
- "docbook/testqdoc.xml");
-}
-
-void tst_generatedOutput::docBookFromQml()
-{
- testAndCompare("testdata/configs/docbook_testqml.qdocconf",
- "docbook/test-componentset-example.xml "
- "docbook/uicomponents-qmlmodule.xml "
- "docbook/qdoc-test-qmlmodule.xml "
- "docbook/qml-qdoc-test-abstractparent.xml "
- "docbook/qml-qdoc-test-child.xml "
- "docbook/qml-qdoc-test-yetanotherchild.xml "
- "docbook/qml-qdoc-test-doctest.xml "
- "docbook/qml-qdoc-test-type.xml "
- "docbook/qml-uicomponents-progressbar.xml "
- "docbook/qml-uicomponents-switch.xml "
- "docbook/qml-uicomponents-tabwidget.xml "
- "docbook/qml-int.xml");
-}
-
-void tst_generatedOutput::autoNavigation()
-{
- // Same expected files as htmlFromQdocFile, but with auto-generated navigation links
- testAndCompare("testdata/configs/tocnavigation.qdocconf",
- "qdoctests-qdocfileoutput.html "
- "qdoctests-qdocfileoutput-linking.html "
- "qdoctests-qdocfileoutput-exhaustive.html "
- "toc.html");
-}
-
-void tst_generatedOutput::examplesManifestXmlAndQhp()
-{
- testAndCompare("testdata/configs/examples-qhp.qdocconf",
- "examples-manifest.xml "
- "demos-manifest.xml "
- "test.qhp");
-}
-
-void tst_generatedOutput::ignoresinceVariable()
-{
- testAndCompare("testdata/configs/ignoresince.qdocconf",
- "ignoresince/testqdoc.html "
- "ignoresince/testqdoc-test.html");
-}
-
-void tst_generatedOutput::templateParameters()
-{
- testAndCompare("testdata/configs/testtemplate.qdocconf",
- "template/testqdoc-test.html "
- "template/testqdoc-test-struct.html "
- "template/foo.html "
- "template/bar.html "
- "template/baz.html");
-}
-
-void tst_generatedOutput::scopedEnum()
-{
- testAndCompare("testdata/configs/scopedenum.qdocconf",
- "scopedenum/testqdoc-test.html "
- "scopedenum-docbook/testqdoc-test.xml");
-}
-
-void tst_generatedOutput::dontDocument()
-{
- testAndCompare("testdata/dontdocument/dontdocument.qdocconf",
- "dontdocument/classes.html "
- "dontdocument/seenclass.html "
- "dontdocument/dontdocument.qhp");
-}
-
-void tst_generatedOutput::inheritedQmlPropertyGroups()
-{
- testAndCompare("testdata/qmlpropertygroups/qmlpropertygroups.qdocconf",
- "qmlpropertygroups/qml-qdoc-test-anotherchild-members.html "
- "qmlpropertygroups/qml-qdoc-test-parent.html "
- "qmlpropertygroups-docbook/qml-qdoc-test-parent.xml");
-}
-
-void tst_generatedOutput::crossModuleLinking()
-{
- htmlFromCpp();
- copyIndexFiles();
- QString indexDir = QLatin1String("-indexdir ") + m_outputDir->path();
- testAndCompare("testdata/crossmodule/crossmodule.qdocconf",
- "crossmodule/testtype.html "
- "crossmodule/testtype-members.html",
- indexDir.toLatin1().data());
-}
-
-void tst_generatedOutput::includeFromExampleDirs()
-{
- testAndCompare("testdata/includefromexampledirs/includefromexampledirs.qdocconf",
- "includefromexampledirs/index.html "
- "includefromexampledirs/qml-qdoc-test-abstractparent.html "
- "includefromexampledirs/qml-qdoc-test-abstractparent-members.html");
-}
-
-void tst_generatedOutput::singleExec()
-{
- // Build both testcpp and crossmodule projects in single-exec mode
- testAndCompare("testdata/singleexec/singleexec.qdocconf",
- "testcpp-module.html "
- "testqdoc-test.html "
- "testqdoc-test-members.html "
- "testqdoc.html "
- "crossmodule/testtype.html "
- "crossmodule/testtype-members.html",
- "-single-exec");
-}
-
-void tst_generatedOutput::preparePhase()
-{
- testAndCompare("testdata/configs/testcpp.qdocconf",
- "testcpp.index",
- "-prepare");
-}
-
-void tst_generatedOutput::generatePhase()
-{
- testAndCompare("testdata/configs/testcpp.qdocconf",
- "testcpp-module.html "
- "testqdoc-test.html "
- "testqdoc-test-members.html "
- "testqdoc.html",
- "-generate");
-}
-
-void tst_generatedOutput::noAutoList()
-{
- testAndCompare("testdata/configs/noautolist.qdocconf",
- "noautolist/testcpp-module.html "
- "noautolist/test-componentset-example.html "
- "noautolist/qdoc-test-qmlmodule.html "
- "noautolist-docbook/testcpp-module.xml "
- "noautolist-docbook/test-componentset-example.xml "
- "noautolist-docbook/qdoc-test-qmlmodule.xml");
-}
-
-void tst_generatedOutput::nestedMacro()
-{
- testAndCompare("testdata/configs/nestedmacro.qdocconf",
- "nestedmacro/testcpp-module.html");
-}
-
-void tst_generatedOutput::headerFile()
-{
- testAndCompare("testdata/configs/headerfile.qdocconf",
- "headerfile/testheader.html "
- "headerfile/headers.html "
- "headerfile-docbook/testheader.xml "
- "headerfile-docbook/headers.xml");
-}
-
-void tst_generatedOutput::usingDirective()
-{
- testAndCompare("testdata/configs/usingdirective.qdocconf", "space.html");
-}
-
-int main(int argc, char *argv[])
-{
- tst_generatedOutput tc;
- // Re-populate expected data and skip tests if option -regenerate is set
- if (argc == 2 && QByteArray(argv[1]) == "-regenerate") {
- tc.setRegenerate();
- --argc;
- }
- return QTest::qExec(&tc, argc, argv);
-}
-
-#include "tst_generatedoutput.moc"
diff --git a/tests/auto/qdoc/qdoc.pro b/tests/auto/qdoc/qdoc.pro
deleted file mode 100644
index 407df43a1..000000000
--- a/tests/auto/qdoc/qdoc.pro
+++ /dev/null
@@ -1,7 +0,0 @@
-TEMPLATE = subdirs
-
-SUBDIRS = \
- config \
- generatedoutput \
- qdoccommandlineparser \
- utilities
diff --git a/tests/auto/qdoc/qdoccommandlineparser/.prev_CMakeLists.txt b/tests/auto/qdoc/qdoccommandlineparser/.prev_CMakeLists.txt
deleted file mode 100644
index 68da67c5d..000000000
--- a/tests/auto/qdoc/qdoccommandlineparser/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-# Generated from qdoccommandlineparser.pro.
-
-#####################################################################
-## tst_qdoccommandlineparser Test:
-#####################################################################
-
-qt_add_test(tst_qdoccommandlineparser
- SOURCES
- ../../../../src/qdoc/qdoccommandlineparser.cpp ../../../../src/qdoc/qdoccommandlineparser.h
- tst_qdoccommandlineparser.cpp
- INCLUDE_DIRECTORIES
- ../../../../src/qdoc
-)
-
-# Resources:
-set(tst_qdoccommandlineparser_resource_files
- "tst_arguments.txt"
-)
-
-qt_add_resource(tst_qdoccommandlineparser "tst_qdoccommandlineparser"
- PREFIX
- "/"
- FILES
- ${tst_qdoccommandlineparser_resource_files}
-)
-
diff --git a/tests/auto/qdoc/qdoccommandlineparser/CMakeLists.txt b/tests/auto/qdoc/qdoccommandlineparser/CMakeLists.txt
deleted file mode 100644
index f3d75e501..000000000
--- a/tests/auto/qdoc/qdoccommandlineparser/CMakeLists.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-# Generated from qdoccommandlineparser.pro.
-
-#####################################################################
-## tst_qdoccommandlineparser Test:
-#####################################################################
-
-qt_add_test(tst_qdoccommandlineparser
- WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" # special case
- SOURCES
- ../../../../src/qdoc/qdoccommandlineparser.cpp ../../../../src/qdoc/qdoccommandlineparser.h
- tst_qdoccommandlineparser.cpp
- INCLUDE_DIRECTORIES
- ../../../../src/qdoc
-)
-
-# Resources:
-set(tst_qdoccommandlineparser_resource_files
- "tst_arguments.txt"
-)
-
-qt_add_resource(tst_qdoccommandlineparser "tst_qdoccommandlineparser"
- PREFIX
- "/"
- FILES
- ${tst_qdoccommandlineparser_resource_files}
-)
-
diff --git a/tests/auto/qdoc/qdoccommandlineparser/qdoccommandlineparser.pro b/tests/auto/qdoc/qdoccommandlineparser/qdoccommandlineparser.pro
deleted file mode 100644
index eeb69a5fc..000000000
--- a/tests/auto/qdoc/qdoccommandlineparser/qdoccommandlineparser.pro
+++ /dev/null
@@ -1,14 +0,0 @@
-CONFIG += testcase
-QT = core testlib
-TARGET = tst_qdoccommandlineparser
-INCLUDEPATH += $$PWD/../../../../src/qdoc
-
-HEADERS += \
- $$PWD/../../../../src/qdoc/qdoccommandlineparser.h
-
-SOURCES += \
- $$PWD/../../../../src/qdoc/qdoccommandlineparser.cpp \
- tst_qdoccommandlineparser.cpp
-
-RESOURCES += \
- tst_qdoccommandlineparser.qrc
diff --git a/tests/auto/qdoc/qdoccommandlineparser/tst_qdoccommandlineparser.cpp b/tests/auto/qdoc/qdoccommandlineparser/tst_qdoccommandlineparser.cpp
deleted file mode 100644
index ae228cd5d..000000000
--- a/tests/auto/qdoc/qdoccommandlineparser/tst_qdoccommandlineparser.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdoccommandlineparser.h"
-
-#include <QtCore/qstringlist.h>
-#include <QtTest/QtTest>
-
-class tst_QDocCommandLineParser : public QObject
-{
- Q_OBJECT
-
-private slots:
- void defaultConstructor();
- void process();
- void argumentsFromCommandLineAndFile();
-};
-
-void tst_QDocCommandLineParser::defaultConstructor()
-{
- QDocCommandLineParser parser;
-
- QVERIFY2(parser.applicationDescription() == QStringLiteral("Qt documentation generator"),
- "The application description is incorrect.");
-}
-
-void tst_QDocCommandLineParser::process()
-{
- const QStringList arguments =
- QStringLiteral("/src/qt5/qtbase/bin/qdoc "
- "-outputdir "
- "/src/qt5/qtbase/doc/qtgamepad "
- "-installdir "
- "/src/qt5/qtbase/doc "
- "/src/qt5/qtgamepad/src/gamepad/doc/qtgamepad.qdocconf "
- "-prepare "
- "-indexdir "
- "/src/qt5/qtbase/doc "
- "-no-link-errors "
- "-I. "
- "-I/src/qt5/qtbase/include "
- "-I/src/qt5/qtbase/include/QtGamepad "
- "-I/src/qt5/qtbase/include/QtGamepad/5.14.0 "
- "-I/src/qt5/qtbase/include/QtGamepad/5.14.0/QtGamepad "
- "-I/src/qt5/qtbase/include/QtCore/5.14.0 "
- "-I/src/qt5/qtbase/include/QtCore/5.14.0/QtCore "
- "-I/src/qt5/qtbase/include/QtGui "
- "-I/src/qt5/qtbase/include/QtCore "
- "-I.moc "
- "-isystem "
- "/usr/include/libdrm "
- "-I/src/qt5/qtbase/mkspecs/linux-g++"
- ).split(QString(" "));
- const QStringList expectedIncludePaths =
- QStringLiteral(". "
- "/src/qt5/qtbase/include "
- "/src/qt5/qtbase/include/QtGamepad "
- "/src/qt5/qtbase/include/QtGamepad/5.14.0 "
- "/src/qt5/qtbase/include/QtGamepad/5.14.0/QtGamepad "
- "/src/qt5/qtbase/include/QtCore/5.14.0 "
- "/src/qt5/qtbase/include/QtCore/5.14.0/QtCore "
- "/src/qt5/qtbase/include/QtGui "
- "/src/qt5/qtbase/include/QtCore "
- ".moc "
- "/src/qt5/qtbase/mkspecs/linux-g++"
- ).split(QString(" "));
- const QStringList expectedSystemIncludePath(QStringLiteral("/usr/include/libdrm"));
-
- QDocCommandLineParser parser;
- parser.process(arguments);
-
- QVERIFY(parser.isSet(parser.outputDirOption));
- QCOMPARE(parser.value(parser.outputDirOption), QStringLiteral("/src/qt5/qtbase/doc/qtgamepad"));
- QVERIFY(parser.isSet(parser.installDirOption));
- QCOMPARE(parser.value(parser.installDirOption), QStringLiteral("/src/qt5/qtbase/doc"));
- QVERIFY(parser.isSet(parser.prepareOption));
- QVERIFY(parser.isSet(parser.indexDirOption));
- QCOMPARE(parser.value(parser.indexDirOption), QStringLiteral("/src/qt5/qtbase/doc"));
- QVERIFY(parser.isSet(parser.noLinkErrorsOption));
- QVERIFY(parser.isSet(parser.includePathOption));
- QCOMPARE(parser.values(parser.includePathOption), expectedIncludePaths);
- QVERIFY(parser.isSet(parser.includePathSystemOption));
- QCOMPARE(parser.values(parser.includePathSystemOption), expectedSystemIncludePath);
-
- QVERIFY(!parser.isSet(parser.timestampsOption));
- QVERIFY(!parser.isSet(parser.dependsOption));
- QVERIFY(!parser.isSet(parser.highlightingOption));
- QVERIFY(!parser.isSet(parser.showInternalOption));
- QVERIFY(!parser.isSet(parser.redirectDocumentationToDevNullOption));
- QVERIFY(!parser.isSet(parser.noExamplesOption));
- QVERIFY(!parser.isSet(parser.autoLinkErrorsOption));
- QVERIFY(!parser.isSet(parser.debugOption));
- QVERIFY(!parser.isSet(parser.generateOption));
- QVERIFY(!parser.isSet(parser.logProgressOption));
- QVERIFY(!parser.isSet(parser.singleExecOption));
- QVERIFY(!parser.isSet(parser.frameworkOption));
-
- const QStringList expectedPositionalArgument = {
- QStringLiteral("/src/qt5/qtgamepad/src/gamepad/doc/qtgamepad.qdocconf")
- };
- QCOMPARE(parser.positionalArguments(), expectedPositionalArgument);
-}
-
-void tst_QDocCommandLineParser::argumentsFromCommandLineAndFile()
-{
- const QString atFilePath("@" + QFINDTESTDATA("tst_arguments.txt"));
- const QStringList arguments { "/src/qt5/qtbase/bin/qdoc", atFilePath };
-
- QDocCommandLineParser parser;
- parser.process(arguments);
-
- const QStringList expectedIncludePaths =
- QStringLiteral(". "
- "/src/qt5/qtbase/include "
- "/src/qt5/qtbase/include/QtGamepad "
- "/src/qt5/qtbase/include/QtGamepad/5.14.0 "
- "/src/qt5/qtbase/include/QtGamepad/5.14.0/QtGamepad "
- "/src/qt5/qtbase/include/QtCore/5.14.0 "
- "/src/qt5/qtbase/include/QtCore/5.14.0/QtCore "
- "/src/qt5/qtbase/include/QtGui "
- "/src/qt5/qtbase/include/QtCore "
- ".moc "
- "/src/qt5/qtbase/mkspecs/linux-g++"
- ).split(QString(" "));
- const QStringList expectedSystemIncludePath(QStringLiteral("/usr/include/libdrm"));
- const QStringList expectedPositionalArgument = {
- QStringLiteral("/src/qt5/qtgamepad/src/gamepad/doc/qtgamepad.qdocconf")
- };
-
- QVERIFY(parser.isSet(parser.outputDirOption));
- QCOMPARE(parser.value(parser.outputDirOption), QStringLiteral("/src/qt5/qtbase/doc/qtgamepad"));
- QVERIFY(parser.isSet(parser.installDirOption));
- QCOMPARE(parser.value(parser.installDirOption), QStringLiteral("/src/qt5/qtbase/doc"));
- QVERIFY(parser.isSet(parser.prepareOption));
- QVERIFY(parser.isSet(parser.indexDirOption));
- QCOMPARE(parser.value(parser.indexDirOption), QStringLiteral("/src/qt5/qtbase/doc"));
- QVERIFY(parser.isSet(parser.noLinkErrorsOption));
- QVERIFY(parser.isSet(parser.includePathOption));
- QCOMPARE(parser.values(parser.includePathOption), expectedIncludePaths);
- QVERIFY(parser.isSet(parser.includePathSystemOption));
- QCOMPARE(parser.values(parser.includePathSystemOption), expectedSystemIncludePath);
-
- QVERIFY(!parser.isSet(parser.timestampsOption));
- QVERIFY(!parser.isSet(parser.dependsOption));
- QVERIFY(!parser.isSet(parser.highlightingOption));
- QVERIFY(!parser.isSet(parser.showInternalOption));
- QVERIFY(!parser.isSet(parser.redirectDocumentationToDevNullOption));
- QVERIFY(!parser.isSet(parser.noExamplesOption));
- QVERIFY(!parser.isSet(parser.autoLinkErrorsOption));
- QVERIFY(!parser.isSet(parser.debugOption));
- QVERIFY(!parser.isSet(parser.generateOption));
- QVERIFY(!parser.isSet(parser.logProgressOption));
- QVERIFY(!parser.isSet(parser.singleExecOption));
- QVERIFY(!parser.isSet(parser.frameworkOption));
-
- QCOMPARE(parser.positionalArguments(), expectedPositionalArgument);
-}
-
-QTEST_APPLESS_MAIN(tst_QDocCommandLineParser)
-
-#include "tst_qdoccommandlineparser.moc"
diff --git a/tests/auto/qdoc/qdoccommandlineparser/tst_qdoccommandlineparser.qrc b/tests/auto/qdoc/qdoccommandlineparser/tst_qdoccommandlineparser.qrc
deleted file mode 100644
index 9a45cf68c..000000000
--- a/tests/auto/qdoc/qdoccommandlineparser/tst_qdoccommandlineparser.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>tst_arguments.txt</file>
- </qresource>
-</RCC>
diff --git a/tests/auto/qdoc/utilities/CMakeLists.txt b/tests/auto/qdoc/utilities/CMakeLists.txt
deleted file mode 100644
index bd949b84d..000000000
--- a/tests/auto/qdoc/utilities/CMakeLists.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-# Generated from utilities.pro.
-
-#####################################################################
-## tst_utilities Test:
-#####################################################################
-
-qt_add_test(tst_utilities
- SOURCES
- ../../../../src/qdoc/loggingcategory.h
- ../../../../src/qdoc/utilities.cpp ../../../../src/qdoc/utilities.h
- tst_utilities.cpp
- INCLUDE_DIRECTORIES
- ../../../../src/qdoc
-)
diff --git a/tests/auto/qdoc/utilities/tst_utilities.cpp b/tests/auto/qdoc/utilities/tst_utilities.cpp
deleted file mode 100644
index 0f63b1daf..000000000
--- a/tests/auto/qdoc/utilities/tst_utilities.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "utilities.h"
-
-#include <QtTest/QtTest>
-
-QT_BEGIN_NAMESPACE
-Q_LOGGING_CATEGORY(lcQdoc, "qt.test")
-QT_END_NAMESPACE
-
-class tst_Utilities : public QObject
-{
- Q_OBJECT
-
-private slots:
- void loggingCategoryName();
- void loggingCategoryDefaults();
- void startDebugging();
- void stopDebugging();
- void debugging();
-};
-
-void tst_Utilities::loggingCategoryName()
-{
- const QString expected = "qt.test";
- QCOMPARE(lcQdoc().categoryName(), expected);
-}
-
-void tst_Utilities::loggingCategoryDefaults()
-{
- QVERIFY(lcQdoc().isCriticalEnabled());
- QVERIFY(lcQdoc().isWarningEnabled());
- QVERIFY(!lcQdoc().isDebugEnabled());
- QVERIFY(lcQdoc().isInfoEnabled());
-}
-
-void tst_Utilities::startDebugging()
-{
- QVERIFY(!lcQdoc().isDebugEnabled());
- Utilities::startDebugging("test");
- QVERIFY(lcQdoc().isDebugEnabled());
-}
-
-void tst_Utilities::stopDebugging()
-{
- Utilities::startDebugging("test");
- QVERIFY(lcQdoc().isDebugEnabled());
- Utilities::stopDebugging("test");
- QVERIFY(!lcQdoc().isDebugEnabled());
-}
-
-void tst_Utilities::debugging()
-{
- QVERIFY(!lcQdoc().isDebugEnabled());
- QVERIFY(!Utilities::debugging());
- Utilities::startDebugging("test");
- QVERIFY(lcQdoc().isDebugEnabled());
- QVERIFY(Utilities::debugging());
-}
-
-QTEST_APPLESS_MAIN(tst_Utilities)
-
-#include "tst_utilities.moc"
diff --git a/tests/auto/qdoc/utilities/utilities.pro b/tests/auto/qdoc/utilities/utilities.pro
deleted file mode 100644
index 57489f2b1..000000000
--- a/tests/auto/qdoc/utilities/utilities.pro
+++ /dev/null
@@ -1,12 +0,0 @@
-CONFIG += testcase
-QT = core testlib
-TARGET = tst_utilities
-INCLUDEPATH += $$PWD/../../../../src/qdoc
-
-HEADERS += \
- $$PWD/../../../../src/qdoc/loggingcategory.h \
- $$PWD/../../../../src/qdoc/utilities.h
-
-SOURCES += \
- tst_utilities.cpp \
- $$PWD/../../../../src/qdoc/utilities.cpp
diff --git a/tests/auto/qhelpcontentmodel/CMakeLists.txt b/tests/auto/qhelpcontentmodel/CMakeLists.txt
index daef8c0b8..649aa8ef7 100644
--- a/tests/auto/qhelpcontentmodel/CMakeLists.txt
+++ b/tests/auto/qhelpcontentmodel/CMakeLists.txt
@@ -1,16 +1,23 @@
-# Generated from qhelpcontentmodel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qhelpcontentmodel Test:
#####################################################################
-qt_add_test(tst_qhelpcontentmodel
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qhelpcontentmodel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qhelpcontentmodel
SOURCES
tst_qhelpcontentmodel.cpp
DEFINES
QT_USE_USING_NAMESPACE
- SRCDIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}\\\"
- PUBLIC_LIBRARIES
+ SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}"
+ LIBRARIES
Qt::Gui
Qt::Help
)
diff --git a/tests/auto/qhelpcontentmodel/qhelpcontentmodel.pro b/tests/auto/qhelpcontentmodel/qhelpcontentmodel.pro
deleted file mode 100644
index 7fb9f6585..000000000
--- a/tests/auto/qhelpcontentmodel/qhelpcontentmodel.pro
+++ /dev/null
@@ -1,6 +0,0 @@
-TARGET = tst_qhelpcontentmodel
-CONFIG += testcase
-QT += help testlib
-SOURCES += tst_qhelpcontentmodel.cpp
-
-DEFINES += QT_USE_USING_NAMESPACE SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/qhelpcontentmodel/tst_qhelpcontentmodel.cpp b/tests/auto/qhelpcontentmodel/tst_qhelpcontentmodel.cpp
index 5480168d3..8cc614ce7 100644
--- a/tests/auto/qhelpcontentmodel/tst_qhelpcontentmodel.cpp
+++ b/tests/auto/qhelpcontentmodel/tst_qhelpcontentmodel.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtCore/QThread>
@@ -40,7 +15,7 @@ class SignalWaiter : public QThread
public:
SignalWaiter();
- void run();
+ void run() override;
public slots:
void stopWaiting();
@@ -101,8 +76,7 @@ void tst_QHelpContentModel::setupContents()
h.setReadOnly(false);
QHelpContentModel *m = h.contentModel();
SignalWaiter w;
- connect(m, SIGNAL(contentsCreated()),
- &w, SLOT(stopWaiting()));
+ connect(m, &QHelpContentModel::contentsCreated, &w, &SignalWaiter::stopWaiting);
w.start();
h.setupData();
int i = 0;
@@ -127,8 +101,7 @@ void tst_QHelpContentModel::contentItemAt()
h.setReadOnly(false);
QHelpContentModel *m = h.contentModel();
SignalWaiter w;
- connect(m, SIGNAL(contentsCreated()),
- &w, SLOT(stopWaiting()));
+ connect(m, &QHelpContentModel::contentsCreated, &w, &SignalWaiter::stopWaiting);
w.start();
h.setupData();
int i = 0;
diff --git a/tests/auto/qhelpenginecore/CMakeLists.txt b/tests/auto/qhelpenginecore/CMakeLists.txt
index e31f8b10b..7cc14220d 100644
--- a/tests/auto/qhelpenginecore/CMakeLists.txt
+++ b/tests/auto/qhelpenginecore/CMakeLists.txt
@@ -1,16 +1,24 @@
-# Generated from qhelpenginecore.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qhelpenginecore Test:
#####################################################################
-qt_add_test(tst_qhelpenginecore
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qhelpenginecore LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qhelpenginecore
SOURCES
tst_qhelpenginecore.cpp
DEFINES
QT_USE_USING_NAMESPACE
- SRCDIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}\\\"
- PUBLIC_LIBRARIES
+ SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}"
+ LIBRARIES
Qt::Gui
Qt::Help
Qt::Sql
diff --git a/tests/auto/qhelpenginecore/qhelpenginecore.pro b/tests/auto/qhelpenginecore/qhelpenginecore.pro
deleted file mode 100644
index e6fc35074..000000000
--- a/tests/auto/qhelpenginecore/qhelpenginecore.pro
+++ /dev/null
@@ -1,7 +0,0 @@
-TARGET = tst_qhelpenginecore
-CONFIG += testcase
-SOURCES += tst_qhelpenginecore.cpp
-QT += help sql testlib help
-
-
-DEFINES += QT_USE_USING_NAMESPACE SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/qhelpenginecore/tst_qhelpenginecore.cpp b/tests/auto/qhelpenginecore/tst_qhelpenginecore.cpp
index 3ca299b26..cbf6b500a 100644
--- a/tests/auto/qhelpenginecore/tst_qhelpenginecore.cpp
+++ b/tests/auto/qhelpenginecore/tst_qhelpenginecore.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtCore/QUrl>
@@ -115,7 +90,7 @@ void tst_QHelpEngineCore::setCollectionFile()
QCOMPARE(help.collectionFile(), QFileInfo(col1File).absoluteFilePath());
QStringList docs = help.registeredDocumentations();
- QCOMPARE(docs.count(), 1);
+ QCOMPARE(docs.size(), 1);
QCOMPARE(docs.first(), QLatin1String("trolltech.com.1.0.0.test"));
}
@@ -189,7 +164,7 @@ void tst_QHelpEngineCore::registeredDocumentations()
QHelpEngineCore help(m_colFile, 0);
QCOMPARE(help.setupData(), true);
const QStringList docs = help.registeredDocumentations();
- QCOMPARE(docs.count(), 3);
+ QCOMPARE(docs.size(), 3);
QStringList lst;
lst << "trolltech.com.3-3-8.qmake" << "trolltech.com.4-3-0.qmake"
<< "trolltech.com.1.0.0.test";
@@ -207,11 +182,11 @@ void tst_QHelpEngineCore::registerDocumentation()
c.setReadOnly(false);
QCOMPARE(c.setupData(), true);
c.registerDocumentation(m_path + "/data/qmake-3.3.8.qch");
- QCOMPARE(c.registeredDocumentations().count(), 1);
+ QCOMPARE(c.registeredDocumentations().size(), 1);
c.registerDocumentation(m_path + "/data/qmake-3.3.8.qch");
- QCOMPARE(c.registeredDocumentations().count(), 1);
+ QCOMPARE(c.registeredDocumentations().size(), 1);
c.registerDocumentation(m_path + "/data/linguist-3.3.8.qch");
- QCOMPARE(c.registeredDocumentations().count(), 2);
+ QCOMPARE(c.registeredDocumentations().size(), 2);
}
{
@@ -238,9 +213,9 @@ void tst_QHelpEngineCore::unregisterDocumentation()
QHelpEngineCore c(m_colFile);
c.setReadOnly(false);
QCOMPARE(c.setupData(), true);
- QCOMPARE(c.registeredDocumentations().count(), 3);
+ QCOMPARE(c.registeredDocumentations().size(), 3);
c.unregisterDocumentation("trolltech.com.3-3-8.qmake");
- QCOMPARE(c.registeredDocumentations().count(), 2);
+ QCOMPARE(c.registeredDocumentations().size(), 2);
QCOMPARE(c.unregisterDocumentation("noexisting"), false);
}
@@ -261,13 +236,13 @@ void tst_QHelpEngineCore::customFilters()
QHelpEngineCore help(m_colFile, 0);
QCOMPARE(help.setupData(), true);
const QStringList custom = help.customFilters();
- QCOMPARE(custom.count(), 4);
+ QCOMPARE(custom.size(), 4);
QStringList lst;
lst << "qmake Manual" << "Custom Filter 1"
<< "Custom Filter 2" << "unfiltered";
for (const QString &s : custom)
lst.removeAll(s);
- QCOMPARE(lst.count(), 0);
+ QCOMPARE(lst.size(), 0);
}
void tst_QHelpEngineCore::removeCustomFilter()
@@ -276,7 +251,7 @@ void tst_QHelpEngineCore::removeCustomFilter()
QCOMPARE(help.setupData(), true);
help.removeCustomFilter("Custom Filter 1");
QStringList custom = help.customFilters();
- QCOMPARE(custom.count(), 3);
+ QCOMPARE(custom.size(), 3);
QCOMPARE((bool)custom.contains("Custom Filter 1"), false);
}
@@ -286,7 +261,7 @@ void tst_QHelpEngineCore::addCustomFilter()
QCOMPARE(help.setupData(), true);
help.addCustomFilter("Qt Tools", QStringList() << "tools" << "qt");
QStringList custom = help.customFilters();
- QCOMPARE(custom.count(), 5);
+ QCOMPARE(custom.size(), 5);
QCOMPARE((bool)custom.contains("Qt Tools"), true);
}
@@ -295,12 +270,12 @@ void tst_QHelpEngineCore::filterAttributes()
QHelpEngineCore help(m_colFile, 0);
QCOMPARE(help.setupData(), true);
const QStringList atts = help.filterAttributes("qmake Manual");
- QCOMPARE(atts.count(), 3);
+ QCOMPARE(atts.size(), 3);
QStringList lst;
lst << "qmake" << "tools" << "qt";
for (const QString &s : atts)
lst.removeAll(s);
- QCOMPARE(lst.count(), 0);
+ QCOMPARE(lst.size(), 0);
}
void tst_QHelpEngineCore::currentFilter()
@@ -327,8 +302,8 @@ void tst_QHelpEngineCore::filterAttributeSets()
help.setReadOnly(false);
QCOMPARE(help.setupData(), true);
QList<QStringList> lst = help.filterAttributeSets("trolltech.com.1.0.0.test");
- QCOMPARE(lst.count(), 2);
- QCOMPARE(lst.first().count(), 2);
+ QCOMPARE(lst.size(), 2);
+ QCOMPARE(lst.first().size(), 2);
QCOMPARE((bool)lst.first().contains("filter1"), true);
QCOMPARE((bool)lst.last().contains("filter2"), true);
}
@@ -340,26 +315,26 @@ void tst_QHelpEngineCore::files()
QCOMPARE(help.setupData(), true);
QList<QUrl> lst = help.files("trolltech.com.4-3-0.qmake",
QStringList());
- QCOMPARE(lst.count(), 16);
+ QCOMPARE(lst.size(), 16);
lst = help.files("trolltech.com.4-3-0.qmake",
QStringList(), "png");
- QCOMPARE(lst.count(), 2);
+ QCOMPARE(lst.size(), 2);
lst = help.files("trolltech.com.4-3-0.qmake",
QStringList() << "qt", "html");
- QCOMPARE(lst.count(), 13);
+ QCOMPARE(lst.size(), 13);
lst = help.files("trolltech.com.4-3-0.qmake",
QStringList() << "qt" << "qmake", "html");
- QCOMPARE(lst.count(), 13);
+ QCOMPARE(lst.size(), 13);
lst = help.files("trolltech.com.4-3-0.qmake",
QStringList() << "qt" << "qmake" << "bla", "html");
- QCOMPARE(lst.count(), 0);
+ QCOMPARE(lst.size(), 0);
lst = help.files("trolltech.com.4-3-0.qmake",
QStringList() << "qt" << "qmake", "foo");
// print 'lst' if test fails:
auto printRemainder = qScopeGuard([&]{ for (const QUrl &url : lst) qDebug() << url; });
- QCOMPARE(lst.count(), 0);
+ QCOMPARE(lst.size(), 0);
printRemainder.dismiss();
}
diff --git a/tests/auto/qhelpgenerator/CMakeLists.txt b/tests/auto/qhelpgenerator/CMakeLists.txt
index 40ed0bec3..47d4e8336 100644
--- a/tests/auto/qhelpgenerator/CMakeLists.txt
+++ b/tests/auto/qhelpgenerator/CMakeLists.txt
@@ -1,10 +1,17 @@
-# Generated from qhelpgenerator.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qhelpgenerator Test:
#####################################################################
-qt_add_test(tst_qhelpgenerator
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qhelpgenerator LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qhelpgenerator
SOURCES
../../../src/assistant/qhelpgenerator/helpgenerator.cpp ../../../src/assistant/qhelpgenerator/helpgenerator.h
../../../src/assistant/qhelpgenerator/qhelpdatainterface.cpp ../../../src/assistant/qhelpgenerator/qhelpdatainterface_p.h
@@ -12,8 +19,8 @@ qt_add_test(tst_qhelpgenerator
tst_qhelpgenerator.cpp
DEFINES
QT_USE_USING_NAMESPACE
- SRCDIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}\\\"
- PUBLIC_LIBRARIES
+ SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}"
+ LIBRARIES
Qt::Gui
Qt::HelpPrivate
Qt::Sql
diff --git a/tests/auto/qhelpgenerator/qhelpgenerator.pro b/tests/auto/qhelpgenerator/qhelpgenerator.pro
deleted file mode 100644
index da3826844..000000000
--- a/tests/auto/qhelpgenerator/qhelpgenerator.pro
+++ /dev/null
@@ -1,14 +0,0 @@
-TARGET = tst_qhelpgenerator
-CONFIG += testcase
-
-HEADERS += ../../../src/assistant/qhelpgenerator/helpgenerator.h \
- ../../../src/assistant/qhelpgenerator/qhelpdatainterface_p.h \
- ../../../src/assistant/qhelpgenerator/qhelpprojectdata_p.h
-SOURCES += tst_qhelpgenerator.cpp \
- ../../../src/assistant/qhelpgenerator/helpgenerator.cpp \
- ../../../src/assistant/qhelpgenerator/qhelpdatainterface.cpp \
- ../../../src/assistant/qhelpgenerator/qhelpprojectdata.cpp
-QT += help-private sql testlib
-
-DEFINES += SRCDIR=\\\"$$PWD\\\"
-DEFINES += QT_USE_USING_NAMESPACE
diff --git a/tests/auto/qhelpgenerator/tst_qhelpgenerator.cpp b/tests/auto/qhelpgenerator/tst_qhelpgenerator.cpp
index 47a879db2..542b1fe41 100644
--- a/tests/auto/qhelpgenerator/tst_qhelpgenerator.cpp
+++ b/tests/auto/qhelpgenerator/tst_qhelpgenerator.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtCore/QFileInfo>
@@ -158,7 +133,7 @@ void tst_QHelpGenerator::checkFiles()
"AND b.FileId=a.FileID AND c.Name=\'filter1\'");
while (m_query->next())
lst.removeAll(m_query->value(0).toString());
- QCOMPARE(lst.count(), 0);
+ QCOMPARE(lst.size(), 0);
QMap<int, QStringList> fileAtts;
m_query->exec("SELECT a.Id, b.Name FROM FileAttributeSetTable a, "
@@ -169,7 +144,7 @@ void tst_QHelpGenerator::checkFiles()
fileAtts.insert(id, QStringList());
fileAtts[id].append(m_query->value(1).toString());
}
- QCOMPARE(fileAtts.count(), 2);
+ QCOMPARE(fileAtts.size(), 2);
QVERIFY(fileAtts.value(1).contains("test"));
QVERIFY(fileAtts.value(1).contains("filter1"));
QVERIFY(!fileAtts.value(1).contains("filter2"));
diff --git a/tests/auto/qhelpindexmodel/CMakeLists.txt b/tests/auto/qhelpindexmodel/CMakeLists.txt
index 6357488a6..43ae6b25e 100644
--- a/tests/auto/qhelpindexmodel/CMakeLists.txt
+++ b/tests/auto/qhelpindexmodel/CMakeLists.txt
@@ -1,16 +1,23 @@
-# Generated from qhelpindexmodel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qhelpindexmodel Test:
#####################################################################
-qt_add_test(tst_qhelpindexmodel
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qhelpindexmodel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qhelpindexmodel
SOURCES
tst_qhelpindexmodel.cpp
DEFINES
QT_USE_USING_NAMESPACE
- SRCDIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}\\\"
- PUBLIC_LIBRARIES
+ SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}"
+ LIBRARIES
Qt::Gui
Qt::Help
Qt::Sql
diff --git a/tests/auto/qhelpindexmodel/qhelpindexmodel.pro b/tests/auto/qhelpindexmodel/qhelpindexmodel.pro
deleted file mode 100644
index 18c118f2d..000000000
--- a/tests/auto/qhelpindexmodel/qhelpindexmodel.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-TARGET = tst_qhelpindexmodel
-CONFIG += testcase
-
-SOURCES += tst_qhelpindexmodel.cpp
-QT += help sql testlib
-
-DEFINES += SRCDIR=\\\"$$PWD\\\"
-DEFINES += QT_USE_USING_NAMESPACE
diff --git a/tests/auto/qhelpindexmodel/tst_qhelpindexmodel.cpp b/tests/auto/qhelpindexmodel/tst_qhelpindexmodel.cpp
index ce8889efe..a77c56aa1 100644
--- a/tests/auto/qhelpindexmodel/tst_qhelpindexmodel.cpp
+++ b/tests/auto/qhelpindexmodel/tst_qhelpindexmodel.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtCore/QThread>
@@ -40,7 +15,7 @@ class SignalWaiter : public QThread
public:
SignalWaiter();
- void run();
+ void run() override;
public slots:
void stopWaiting();
@@ -100,8 +75,7 @@ void tst_QHelpIndexModel::setupIndex()
h.setReadOnly(false);
QHelpIndexModel *m = h.indexModel();
SignalWaiter w;
- connect(m, SIGNAL(indexCreated()),
- &w, SLOT(stopWaiting()));
+ connect(m, &QHelpIndexModel::indexCreated, &w, &SignalWaiter::stopWaiting);
w.start();
h.setupData();
int i = 0;
@@ -109,7 +83,7 @@ void tst_QHelpIndexModel::setupIndex()
QTest::qWait(500);
QCOMPARE(h.currentFilter(), QString("unfiltered"));
- QCOMPARE(m->stringList().count(), 19);
+ QCOMPARE(m->stringList().size(), 19);
w.start();
h.setCurrentFilter("Custom Filter 1");
@@ -120,7 +94,7 @@ void tst_QHelpIndexModel::setupIndex()
QStringList lst;
lst << "foo" << "bar" << "bla" << "einstein" << "newton";
const auto stringList = m->stringList();
- QCOMPARE(stringList.count(), 5);
+ QCOMPARE(stringList.size(), 5);
for (const QString &s : stringList)
lst.removeAll(s);
QCOMPARE(lst.isEmpty(), true);
@@ -132,8 +106,7 @@ void tst_QHelpIndexModel::filter()
h.setReadOnly(false);
QHelpIndexModel *m = h.indexModel();
SignalWaiter w;
- connect(m, SIGNAL(indexCreated()),
- &w, SLOT(stopWaiting()));
+ connect(m, &QHelpIndexModel::indexCreated, &w, &SignalWaiter::stopWaiting);
w.start();
h.setupData();
int i = 0;
@@ -141,16 +114,16 @@ void tst_QHelpIndexModel::filter()
QTest::qWait(500);
QCOMPARE(h.currentFilter(), QString("unfiltered"));
- QCOMPARE(m->stringList().count(), 19);
+ QCOMPARE(m->stringList().size(), 19);
m->filter("foo");
- QCOMPARE(m->stringList().count(), 2);
+ QCOMPARE(m->stringList().size(), 2);
m->filter("fo");
- QCOMPARE(m->stringList().count(), 3);
+ QCOMPARE(m->stringList().size(), 3);
m->filter("qmake");
- QCOMPARE(m->stringList().count(), 11);
+ QCOMPARE(m->stringList().size(), 11);
}
QTEST_MAIN(tst_QHelpIndexModel)
diff --git a/tests/auto/qhelpprojectdata/CMakeLists.txt b/tests/auto/qhelpprojectdata/CMakeLists.txt
index 1d140b287..9e0c03c87 100644
--- a/tests/auto/qhelpprojectdata/CMakeLists.txt
+++ b/tests/auto/qhelpprojectdata/CMakeLists.txt
@@ -1,18 +1,25 @@
-# Generated from qhelpprojectdata.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qhelpprojectdata Test:
#####################################################################
-qt_add_test(tst_qhelpprojectdata
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qhelpprojectdata LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qhelpprojectdata
SOURCES
../../../src/assistant/qhelpgenerator/qhelpdatainterface.cpp ../../../src/assistant/qhelpgenerator/qhelpdatainterface_p.h
../../../src/assistant/qhelpgenerator/qhelpprojectdata.cpp ../../../src/assistant/qhelpgenerator/qhelpprojectdata_p.h
tst_qhelpprojectdata.cpp
DEFINES
QT_USE_USING_NAMESPACE
- SRCDIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}\\\"
- PUBLIC_LIBRARIES
+ SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}"
+ LIBRARIES
Qt::Gui
Qt::HelpPrivate
)
diff --git a/tests/auto/qhelpprojectdata/qhelpprojectdata.pro b/tests/auto/qhelpprojectdata/qhelpprojectdata.pro
deleted file mode 100644
index 51d127ac0..000000000
--- a/tests/auto/qhelpprojectdata/qhelpprojectdata.pro
+++ /dev/null
@@ -1,15 +0,0 @@
-TARGET = tst_qhelpprojectdata
-CONFIG += testcase
-
-HEADERS += ../../../src/assistant/qhelpgenerator/qhelpdatainterface_p.h \
- ../../../src/assistant/qhelpgenerator/qhelpprojectdata_p.h
-
-SOURCES += tst_qhelpprojectdata.cpp \
- ../../../src/assistant/qhelpgenerator/qhelpdatainterface.cpp \
- ../../../src/assistant/qhelpgenerator/qhelpprojectdata.cpp
-
-QT += help-private testlib
-
-DEFINES += SRCDIR=\\\"$$PWD\\\"
-DEFINES += QT_USE_USING_NAMESPACE
-
diff --git a/tests/auto/qhelpprojectdata/tst_qhelpprojectdata.cpp b/tests/auto/qhelpprojectdata/tst_qhelpprojectdata.cpp
index 9b47be519..8e86346f3 100644
--- a/tests/auto/qhelpprojectdata/tst_qhelpprojectdata.cpp
+++ b/tests/auto/qhelpprojectdata/tst_qhelpprojectdata.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtCore/QFileInfo>
@@ -86,7 +61,7 @@ void tst_QHelpProjectData::customFilters()
QFAIL("Cannot read qhp file!");
const QList<QHelpDataCustomFilter> filters = data.customFilters();
- QCOMPARE(filters.count(), 2);
+ QCOMPARE(filters.size(), 2);
for (const QHelpDataCustomFilter &f : filters) {
if (f.name == QLatin1String("Custom Filter 1")) {
@@ -114,7 +89,7 @@ void tst_QHelpProjectData::filterSections()
QFAIL("Cannot read qhp file!");
const QList<QHelpDataFilterSection> sections = data.filterSections();
- QCOMPARE(sections.count(), 2);
+ QCOMPARE(sections.size(), 2);
for (const QHelpDataFilterSection &s : sections) {
if (s.filterAttributes().contains("filter1")) {
@@ -135,10 +110,10 @@ void tst_QHelpProjectData::filterSections()
QFAIL("Unexpected index!");
}
}
- QCOMPARE(s.contents().count(), 1);
- QCOMPARE(s.contents().first()->children().count(), 5);
+ QCOMPARE(s.contents().size(), 1);
+ QCOMPARE(s.contents().first()->children().size(), 5);
} else if (s.filterAttributes().contains("filter2")) {
- QCOMPARE(s.contents().count(), 1);
+ QCOMPARE(s.contents().size(), 1);
const QStringList lst = {
"cars.html",
"classic.css",
@@ -159,7 +134,7 @@ void tst_QHelpProjectData::metaData()
if (!data.readData(m_inputFile))
QFAIL("Cannot read qhp file!");
- QCOMPARE(data.metaData().count(), 2);
+ QCOMPARE(data.metaData().size(), 2);
QCOMPARE(data.metaData().value("author").toString(),
QString("Digia Plc and/or its subsidiary(-ies)"));
}
diff --git a/tests/auto/qtattributionsscanner/CMakeLists.txt b/tests/auto/qtattributionsscanner/CMakeLists.txt
index c76353323..c7bdd56ca 100644
--- a/tests/auto/qtattributionsscanner/CMakeLists.txt
+++ b/tests/auto/qtattributionsscanner/CMakeLists.txt
@@ -1,13 +1,21 @@
-# Generated from qtattributionsscanner.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtattributionsscanner Test:
#####################################################################
-qt_add_test(tst_qtattributionsscanner
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtattributionsscanner LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qtattributionsscanner
SOURCES
tst_qtattributionsscanner.cpp
)
-#### Keys ignored in scope 1:.:.:qtattributionsscanner.pro:<TRUE>:
-# DISTFILES = "testdata/good/expected.json" "testdata/good/expected.error" "testdata/good/minimal/qt_attribution_test.json" "testdata/good/minimal/expected.json" "testdata/good/minimal/expected.error" "testdata/good/complete/qt_attribution_test.json" "testdata/good/complete/expected.json" "testdata/good/complete/expected.error" "testdata/good/variants/qt_attribution_test.json" "testdata/good/variants/expected.json" "testdata/good/variants/expected.error" "testdata/warnings/incomplete/qt_attribution_test.json" "testdata/warnings/incomplete/expected.json" "testdata/warnings/incomplete/expected.error" "testdata/warnings/unknown/qt_attribution_test.json" "testdata/warnings/unknown/expected.json" "testdata/warnings/unknown/expected.error"
+target_compile_definitions(tst_qtattributionsscanner
+ PRIVATE QTTOOLS_LICENSES_DIR="${CMAKE_CURRENT_SOURCE_DIR}/../../../LICENSES"
+)
diff --git a/tests/auto/qtattributionsscanner/qtattributionsscanner.pro b/tests/auto/qtattributionsscanner/qtattributionsscanner.pro
deleted file mode 100644
index c4c1ca854..000000000
--- a/tests/auto/qtattributionsscanner/qtattributionsscanner.pro
+++ /dev/null
@@ -1,25 +0,0 @@
-CONFIG += testcase
-QT = core testlib
-
-DISTFILES += \
- testdata/good/expected.json \
- testdata/good/expected.error \
- testdata/good/minimal/qt_attribution_test.json \
- testdata/good/minimal/expected.json \
- testdata/good/minimal/expected.error \
- testdata/good/complete/qt_attribution_test.json \
- testdata/good/complete/expected.json \
- testdata/good/complete/expected.error \
- testdata/good/variants/qt_attribution_test.json \
- testdata/good/variants/expected.json \
- testdata/good/variants/expected.error \
- testdata/warnings/incomplete/qt_attribution_test.json \
- testdata/warnings/incomplete/expected.json \
- testdata/warnings/incomplete/expected.error \
- testdata/warnings/unknown/qt_attribution_test.json \
- testdata/warnings/unknown/expected.json \
- testdata/warnings/unknown/expected.error
-
-TARGET = tst_qtattributionsscanner
-
-SOURCES += tst_qtattributionsscanner.cpp
diff --git a/tests/auto/qtattributionsscanner/testdata/good/complete/qt_attribution_test.json b/tests/auto/qtattributionsscanner/testdata/good/complete/qt_attribution_test.json
index 8035cefab..22eadd8cd 100644
--- a/tests/auto/qtattributionsscanner/testdata/good/complete/qt_attribution_test.json
+++ b/tests/auto/qtattributionsscanner/testdata/good/complete/qt_attribution_test.json
@@ -1,22 +1,25 @@
{
- "Id": "complete",
- "Name": "Complete",
- "QDocModule": "qtest",
- "QtParts": ["examples"],
+ "Id": "complete",
+ "Name": "Complete",
+ "QDocModule": "qtest",
+ "QtParts": [
+ "examples"
+ ],
- "License": "License",
- "Copyright": "Copyright",
+ "License": "License",
+ "Copyright": "Copyright",
- "Description": "Multi
+ "Description": "Multi
Line
Description",
- "QtUsage": "Multi
+ "QtUsage": "Multi
Line
Usage",
- "Homepage": "www.qt.io",
- "Version": "1.0",
- "DownloadLocation": "www.qt.io/1.0",
- "LicenseId": "xxx",
- "LicenseFile": "LICENSE",
- "PackageComment": "just a test package"
+ "Homepage": "www.qt.io",
+ "Version": "1.0",
+ "DownloadLocation": "www.qt.io/1.0",
+ "SecurityCritical": true,
+ "LicenseId": "xxx",
+ "LicenseFile": "../../../../../../LICENSES/BSD-3-Clause.txt",
+ "PackageComment": "just a test package"
}
diff --git a/tests/auto/qtattributionsscanner/testdata/good/expected.json b/tests/auto/qtattributionsscanner/testdata/good/expected.json
index d910e6165..adde0d86b 100644
--- a/tests/auto/qtattributionsscanner/testdata/good/expected.json
+++ b/tests/auto/qtattributionsscanner/testdata/good/expected.json
@@ -18,6 +18,7 @@
"libs"
],
"QtUsage": "Used in Qt WebEngine",
+ "SecurityCritical": false,
"Version": ""
},
{
@@ -29,7 +30,7 @@
"Homepage": "www.qt.io",
"Id": "complete",
"License": "License",
- "LicenseFile": "%{PWD}/complete/LICENSE",
+ "LicenseFile": "%{PWD}/complete/../../../../../../LICENSES/BSD-3-Clause.txt",
"LicenseId": "xxx",
"Name": "Complete",
"PackageComment": "just a test package",
@@ -39,6 +40,7 @@
"examples"
],
"QtUsage": "Multi\nLine\nUsage",
+ "SecurityCritical": true,
"Version": "1.0"
},
{
@@ -48,6 +50,28 @@
"DownloadLocation": "",
"Files": "",
"Homepage": "",
+ "Id": "licenses-dir",
+ "License": "BSD 3-Clause \"New\" or \"Revised\" License",
+ "LicenseFile": "%{LICENSES_DIR}/BSD-3-Clause.txt",
+ "LicenseId": "BSD-3-Clause",
+ "Name": "LicensesDir",
+ "PackageComment": "",
+ "Path": "%{PWD}/licenses-dir",
+ "QDocModule": "qtest",
+ "QtParts": [
+ "libs"
+ ],
+ "QtUsage": "Usage",
+ "SecurityCritical": false,
+ "Version": ""
+ },
+ {
+ "Copyright": "Copyright",
+ "CopyrightFile": "",
+ "Description": "",
+ "DownloadLocation": "",
+ "Files": "",
+ "Homepage": "",
"Id": "minimal",
"License": "License",
"LicenseFile": "",
@@ -60,6 +84,7 @@
"libs"
],
"QtUsage": "Usage",
+ "SecurityCritical": false,
"Version": ""
},
{
@@ -84,6 +109,7 @@
"libs"
],
"QtUsage": "Usage",
+ "SecurityCritical": false,
"Version": ""
}
]
diff --git a/tests/auto/qtattributionsscanner/testdata/good/licenses-dir/expected.error b/tests/auto/qtattributionsscanner/testdata/good/licenses-dir/expected.error
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/auto/qtattributionsscanner/testdata/good/licenses-dir/expected.error
diff --git a/tests/auto/qtattributionsscanner/testdata/good/licenses-dir/expected.json b/tests/auto/qtattributionsscanner/testdata/good/licenses-dir/expected.json
new file mode 100644
index 000000000..ab5c31309
--- /dev/null
+++ b/tests/auto/qtattributionsscanner/testdata/good/licenses-dir/expected.json
@@ -0,0 +1,24 @@
+[
+ {
+ "Copyright": "Copyright",
+ "CopyrightFile": "",
+ "Description": "",
+ "DownloadLocation": "",
+ "Files": "",
+ "Homepage": "",
+ "Id": "licenses-dir",
+ "License": "BSD 3-Clause \"New\" or \"Revised\" License",
+ "LicenseFile": "%{LICENSES_DIR}/BSD-3-Clause.txt",
+ "LicenseId": "BSD-3-Clause",
+ "Name": "LicensesDir",
+ "PackageComment": "",
+ "Path": "%{PWD}",
+ "QDocModule": "qtest",
+ "QtParts": [
+ "libs"
+ ],
+ "QtUsage": "Usage",
+ "SecurityCritical": false,
+ "Version": ""
+ }
+]
diff --git a/tests/auto/qtattributionsscanner/testdata/good/licenses-dir/qt_attribution_test.json b/tests/auto/qtattributionsscanner/testdata/good/licenses-dir/qt_attribution_test.json
new file mode 100644
index 000000000..bf3f0658f
--- /dev/null
+++ b/tests/auto/qtattributionsscanner/testdata/good/licenses-dir/qt_attribution_test.json
@@ -0,0 +1,9 @@
+{
+ "Id": "licenses-dir",
+ "Name": "LicensesDir",
+ "QDocModule": "qtest",
+ "QtUsage": "Usage",
+ "License": "BSD 3-Clause \"New\" or \"Revised\" License",
+ "LicenseId": "BSD-3-Clause",
+ "Copyright": "Copyright"
+}
diff --git a/tests/auto/qtattributionsscanner/testdata/good/minimal/expected.json b/tests/auto/qtattributionsscanner/testdata/good/minimal/expected.json
index fcde8f084..546830d3f 100644
--- a/tests/auto/qtattributionsscanner/testdata/good/minimal/expected.json
+++ b/tests/auto/qtattributionsscanner/testdata/good/minimal/expected.json
@@ -18,6 +18,7 @@
"libs"
],
"QtUsage": "Usage",
+ "SecurityCritical": false,
"Version": ""
}
]
diff --git a/tests/auto/qtattributionsscanner/testdata/good/variants/COPYRIGHT.txt b/tests/auto/qtattributionsscanner/testdata/good/variants/COPYRIGHT.txt
new file mode 100644
index 000000000..923580113
--- /dev/null
+++ b/tests/auto/qtattributionsscanner/testdata/good/variants/COPYRIGHT.txt
@@ -0,0 +1 @@
+COPYRIGHT
diff --git a/tests/auto/qtattributionsscanner/testdata/good/variants/expected.json b/tests/auto/qtattributionsscanner/testdata/good/variants/expected.json
index 10a339175..f69f55726 100644
--- a/tests/auto/qtattributionsscanner/testdata/good/variants/expected.json
+++ b/tests/auto/qtattributionsscanner/testdata/good/variants/expected.json
@@ -21,6 +21,7 @@
"libs"
],
"QtUsage": "Usage",
+ "SecurityCritical": false,
"Version": ""
}
]
diff --git a/tests/auto/qtattributionsscanner/testdata/warnings/incomplete/expected.json b/tests/auto/qtattributionsscanner/testdata/warnings/incomplete/expected.json
deleted file mode 100644
index 77b77b44c..000000000
--- a/tests/auto/qtattributionsscanner/testdata/warnings/incomplete/expected.json
+++ /dev/null
@@ -1,23 +0,0 @@
-[
- {
- "Copyright": "",
- "CopyrightFile": "",
- "Description": "",
- "DownloadLocation": "",
- "Files": "",
- "Homepage": "",
- "Id": "",
- "License": "",
- "LicenseFile": "",
- "LicenseId": "",
- "Name": "",
- "PackageComment": "",
- "Path": "%{PWD}",
- "QDocModule": "",
- "QtParts": [
- "libs"
- ],
- "QtUsage": "",
- "Version": ""
- }
-]
diff --git a/tests/auto/qtattributionsscanner/testdata/warnings/unknown/expected.json b/tests/auto/qtattributionsscanner/testdata/warnings/unknown/expected.json
deleted file mode 100644
index a87917eba..000000000
--- a/tests/auto/qtattributionsscanner/testdata/warnings/unknown/expected.json
+++ /dev/null
@@ -1,23 +0,0 @@
-[
- {
- "Copyright": "Copyright",
- "CopyrightFile": "",
- "Description": "",
- "DownloadLocation": "",
- "Files": "",
- "Homepage": "",
- "Id": "unknown",
- "License": "License",
- "LicenseFile": "",
- "LicenseId": "",
- "Name": "Unknown",
- "PackageComment": "",
- "Path": "%{PWD}",
- "QDocModule": "qtest",
- "QtParts": [
- "libs"
- ],
- "QtUsage": "Usage",
- "Version": ""
- }
-]
diff --git a/tests/auto/qtattributionsscanner/tst_qtattributionsscanner.cpp b/tests/auto/qtattributionsscanner/tst_qtattributionsscanner.cpp
index 31d7c7847..617141d9b 100644
--- a/tests/auto/qtattributionsscanner/tst_qtattributionsscanner.cpp
+++ b/tests/auto/qtattributionsscanner/tst_qtattributionsscanner.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/qdir.h>
#include <QtCore/qdebug.h>
@@ -56,7 +31,7 @@ private:
tst_qtattributionsscanner::tst_qtattributionsscanner()
{
- QString binPath = QLibraryInfo::location(QLibraryInfo::BinariesPath);
+ QString binPath = QLibraryInfo::path(QLibraryInfo::LibraryExecutablesPath);
m_cmd = binPath + QLatin1String("/qtattributionsscanner");
m_basePath = QFINDTESTDATA("testdata");
}
@@ -65,26 +40,23 @@ tst_qtattributionsscanner::tst_qtattributionsscanner()
void tst_qtattributionsscanner::test_data()
{
QTest::addColumn<QString>("input");
+ QTest::addColumn<bool>("success");
QTest::addColumn<QString>("stdout_file");
QTest::addColumn<QString>("stderr_file");
- QTest::newRow("good")
- << QStringLiteral("good")
- << QStringLiteral("good/expected.json")
- << QStringLiteral("good/expected.error");
- QTest::newRow("warnings (incomplete)")
- << QStringLiteral("warnings/incomplete")
- << QStringLiteral("warnings/incomplete/expected.json")
- << QStringLiteral("warnings/incomplete/expected.error");
+ QTest::newRow("good") << QStringLiteral("good") << true << QStringLiteral("good/expected.json")
+ << QStringLiteral("good/expected.error");
+ QTest::newRow("warnings (incomplete)") << QStringLiteral("warnings/incomplete") << false
+ << QStringLiteral("warnings/incomplete/expected.json")
+ << QStringLiteral("warnings/incomplete/expected.error");
QTest::newRow("warnings (unknown attribute)")
- << QStringLiteral("warnings/unknown")
+ << QStringLiteral("warnings/unknown") << false
<< QStringLiteral("warnings/unknown/expected.json")
<< QStringLiteral("warnings/unknown/expected.error");
- QTest::newRow("singlefile")
- << QStringLiteral("good/minimal/qt_attribution_test.json")
- << QStringLiteral("good/minimal/expected.json")
- << QStringLiteral("good/minimal/expected.error");
- QTest::newRow("variants") << QStringLiteral("good/variants/qt_attribution_test.json")
+ QTest::newRow("singlefile") << QStringLiteral("good/minimal/qt_attribution_test.json") << true
+ << QStringLiteral("good/minimal/expected.json")
+ << QStringLiteral("good/minimal/expected.error");
+ QTest::newRow("variants") << QStringLiteral("good/variants/qt_attribution_test.json") << true
<< QStringLiteral("good/variants/expected.json")
<< QStringLiteral("good/variants/expected.error");
}
@@ -95,11 +67,15 @@ void tst_qtattributionsscanner::readExpectedFile(const QString &baseDir, const Q
QVERIFY2(file.open(QIODevice::ReadOnly | QIODevice::Text), "Could not open " + file.fileName().toLocal8Bit());
*content = file.readAll();
content->replace("%{PWD}", baseDir.toUtf8());
+
+ QDir licensesDir(QStringLiteral(QTTOOLS_LICENSES_DIR));
+ content->replace("%{LICENSES_DIR}", licensesDir.canonicalPath().toUtf8());
}
void tst_qtattributionsscanner::test()
{
QFETCH(QString, input);
+ QFETCH(bool, success);
QFETCH(QString, stdout_file);
QFETCH(QString, stderr_file);
@@ -120,9 +96,9 @@ void tst_qtattributionsscanner::test()
QVERIFY2(proc.exitStatus() == QProcess::NormalExit,
"\"qtattributionsscanner " + m_cmd.toLatin1() + "\" crashed");
- QVERIFY2(!proc.exitCode(),
- "\"qtattributionsscanner " + m_cmd.toLatin1() + "\" exited with code " +
- QByteArray::number(proc.exitCode()));
+ QVERIFY2(success ? (proc.exitCode() == 0) : (proc.exitCode() != 0),
+ "\"qtattributionsscanner " + m_cmd.toLatin1() + "\" exited with code "
+ + QByteArray::number(proc.exitCode()));
{ // compare error output
QByteArray stdErr = proc.readAllStandardError();
@@ -134,7 +110,8 @@ void tst_qtattributionsscanner::test()
QCOMPARE(stdErr, expectedErrorOutput);
}
- { // compare json output
+ if (proc.exitCode() == 0) {
+ // compare json output
QByteArray stdOut = proc.readAllStandardOutput();
QJsonParseError jsonError;
diff --git a/tests/auto/qtdiag/CMakeLists.txt b/tests/auto/qtdiag/CMakeLists.txt
index 0c6ce3698..ba8342c1f 100644
--- a/tests/auto/qtdiag/CMakeLists.txt
+++ b/tests/auto/qtdiag/CMakeLists.txt
@@ -1,10 +1,17 @@
-# Generated from qtdiag.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_tdiag Test:
#####################################################################
-qt_add_test(tst_tdiag
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_tdiag LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_tdiag
SOURCES
tst_qtdiag.cpp
DEFINES
diff --git a/tests/auto/qtdiag/qtdiag.pro b/tests/auto/qtdiag/qtdiag.pro
deleted file mode 100644
index 5f2f224c6..000000000
--- a/tests/auto/qtdiag/qtdiag.pro
+++ /dev/null
@@ -1,7 +0,0 @@
-TARGET = tst_tdiag
-CONFIG += testcase
-QT = core testlib
-
-SOURCES += tst_qtdiag.cpp
-
-DEFINES += QT_USE_USING_NAMESPACE
diff --git a/tests/auto/qtdiag/tst_qtdiag.cpp b/tests/auto/qtdiag/tst_qtdiag.cpp
index d120b0fa9..ac3bd9bd2 100644
--- a/tests/auto/qtdiag/tst_qtdiag.cpp
+++ b/tests/auto/qtdiag/tst_qtdiag.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtCore/QProcess>
@@ -46,7 +21,7 @@ private:
void tst_QtDiag::initTestCase()
{
- QString binary = QLibraryInfo::location(QLibraryInfo::BinariesPath) + QStringLiteral("/qtdiag");
+ QString binary = QLibraryInfo::path(QLibraryInfo::BinariesPath) + QStringLiteral("/qtdiag");
# ifdef Q_OS_WIN
binary += QStringLiteral(".exe");
# endif
diff --git a/tests/auto/windeployqt/BLACKLIST b/tests/auto/windeployqt/BLACKLIST
deleted file mode 100644
index 372edcb9d..000000000
--- a/tests/auto/windeployqt/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[deploy]
-windows
diff --git a/tests/auto/windeployqt/CMakeLists.txt b/tests/auto/windeployqt/CMakeLists.txt
deleted file mode 100644
index 5eae1ca16..000000000
--- a/tests/auto/windeployqt/CMakeLists.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-# Generated from windeployqt.pro.
-
-add_subdirectory(testapp)
-add_subdirectory(test)
diff --git a/tests/auto/windeployqt/test/.prev_CMakeLists.txt b/tests/auto/windeployqt/test/.prev_CMakeLists.txt
deleted file mode 100644
index 53de8926d..000000000
--- a/tests/auto/windeployqt/test/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-# Generated from test.pro.
-
-#####################################################################
-## tst_windeployqt Test:
-#####################################################################
-
-qt_add_test(tst_windeployqt
- OUTPUT_DIRECTORY ".."
- SOURCES
- ../tst_windeployqt.cpp
-)
diff --git a/tests/auto/windeployqt/test/CMakeLists.txt b/tests/auto/windeployqt/test/CMakeLists.txt
deleted file mode 100644
index 1c9a9ca41..000000000
--- a/tests/auto/windeployqt/test/CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-# Generated from test.pro.
-
-#####################################################################
-## tst_windeployqt Test:
-#####################################################################
-
-qt_add_test(tst_windeployqt
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../" # special case
- SOURCES
- ../tst_windeployqt.cpp
-)
diff --git a/tests/auto/windeployqt/test/test.pro b/tests/auto/windeployqt/test/test.pro
deleted file mode 100644
index 7aac19a0d..000000000
--- a/tests/auto/windeployqt/test/test.pro
+++ /dev/null
@@ -1,5 +0,0 @@
-CONFIG += testcase
-QT = core testlib
-DESTDIR = ..
-TARGET = tst_windeployqt
-SOURCES += ../tst_windeployqt.cpp
diff --git a/tests/auto/windeployqt/testapp/.prev_CMakeLists.txt b/tests/auto/windeployqt/testapp/.prev_CMakeLists.txt
deleted file mode 100644
index 6c9b9c79b..000000000
--- a/tests/auto/windeployqt/testapp/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-# Generated from testapp.pro.
-
-#####################################################################
-## testapp Binary:
-#####################################################################
-
-qt_add_executable(testapp
- GUI
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
- SOURCES
- main.cpp
- PUBLIC_LIBRARIES
- Qt::Gui
-)
diff --git a/tests/auto/windeployqt/testapp/CMakeLists.txt b/tests/auto/windeployqt/testapp/CMakeLists.txt
deleted file mode 100644
index bb8127633..000000000
--- a/tests/auto/windeployqt/testapp/CMakeLists.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-# Generated from testapp.pro.
-
-#####################################################################
-## testapp Binary:
-#####################################################################
-
-qt_add_executable(windeploy_testapp # special case
- GUI
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
- SOURCES
- main.cpp
- PUBLIC_LIBRARIES
- Qt::Gui
-)
-
-# special case begin
-set_target_properties(windeploy_testapp
- PROPERTIES
- OUTPUT_NAME testapp
-)
-# special case end
diff --git a/tests/auto/windeployqt/testapp/main.cpp b/tests/auto/windeployqt/testapp/main.cpp
deleted file mode 100644
index 4dc03cdad..000000000
--- a/tests/auto/windeployqt/testapp/main.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QGuiApplication>
-#include <QRasterWindow>
-#include <QScreen>
-#include <QTimer>
-
-// Simple test application just to verify that it comes up properly
-
-int main(int argc, char ** argv)
-{
- QGuiApplication app(argc, argv);
- QRasterWindow w;
- w.setTitle("windeployqt test application");
- const QRect availableGeometry = QGuiApplication::primaryScreen()->availableGeometry();
- w.resize(availableGeometry.size() / 4);
- w.show();
- QTimer::singleShot(200, &w, &QCoreApplication::quit);
- return app.exec();
-}
diff --git a/tests/auto/windeployqt/testapp/testapp.pro b/tests/auto/windeployqt/testapp/testapp.pro
deleted file mode 100644
index 7bd2fba0e..000000000
--- a/tests/auto/windeployqt/testapp/testapp.pro
+++ /dev/null
@@ -1,2 +0,0 @@
-SOURCES = main.cpp
-DESTDIR = ./
diff --git a/tests/auto/windeployqt/tst_windeployqt.cpp b/tests/auto/windeployqt/tst_windeployqt.cpp
deleted file mode 100644
index 04aece287..000000000
--- a/tests/auto/windeployqt/tst_windeployqt.cpp
+++ /dev/null
@@ -1,181 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtCore/QDebug>
-#include <QtCore/QDir>
-#include <QtCore/QFile>
-#include <QtCore/QFileInfo>
-#include <QtCore/QLibraryInfo>
-#include <QtCore/QProcess>
-#include <QtCore/QProcessEnvironment>
-#include <QtCore/QStandardPaths>
-#include <QtCore/QTextStream>
-#include <QtTest/QtTest>
-
-static const QString msgProcessError(const QProcess &process, const QString &what,
- const QByteArray &stdOut = QByteArray(),
- const QByteArray &stdErr = QByteArray())
-{
- QString result;
- QTextStream str(&result);
- str << what << ": \"" << process.program() << ' '
- << process.arguments().join(QLatin1Char(' ')) << "\": " << process.errorString();
- if (!stdOut.isEmpty())
- str << "\nStandard output:\n" << stdOut;
- if (!stdErr.isEmpty())
- str << "\nStandard error:\n" << stdErr;
- return result;
-}
-
-static bool runProcess(const QString &binary,
- const QStringList &arguments,
- QString *errorMessage,
- const QString &workingDir = QString(),
- const QProcessEnvironment &env = QProcessEnvironment(),
- int timeOut = 5000,
- QByteArray *stdOutIn = nullptr, QByteArray *stdErrIn = nullptr)
-{
- QProcess process;
- if (!env.isEmpty())
- process.setProcessEnvironment(env);
- if (!workingDir.isEmpty())
- process.setWorkingDirectory(workingDir);
- qDebug().noquote().nospace() << "Running: " << QDir::toNativeSeparators(binary)
- << ' ' << arguments.join(QLatin1Char(' '));
- process.start(binary, arguments, QIODevice::ReadOnly);
- if (!process.waitForStarted()) {
- *errorMessage = msgProcessError(process, "Failed to start");
- return false;
- }
- if (!process.waitForFinished(timeOut)) {
- *errorMessage = msgProcessError(process, "Timed out");
- process.terminate();
- if (!process.waitForFinished(300))
- process.kill();
- return false;
- }
- const QByteArray stdOut = process.readAllStandardOutput();
- const QByteArray stdErr = process.readAllStandardError();
- if (stdOutIn)
- *stdOutIn = stdOut;
- if (stdErrIn)
- *stdErrIn = stdErr;
- if (process.exitStatus() != QProcess::NormalExit) {
- *errorMessage = msgProcessError(process, "Crashed", stdOut, stdErr);
- return false;
- }
- if (process.exitCode() != QProcess::NormalExit) {
- *errorMessage = msgProcessError(process, "Exit code " + QString::number(process.exitCode()),
- stdOut, stdErr);
- return false;
- }
- return true;
-}
-
-class tst_windeployqt : public QObject
-{
- Q_OBJECT
-private slots:
- void initTestCase();
- void help();
- void deploy();
-
-private:
- QString m_windeployqtBinary;
- QString m_testApp;
- QString m_testAppBinary;
-};
-
-void tst_windeployqt::initTestCase()
-{
- m_windeployqtBinary = QStandardPaths::findExecutable("windeployqt");
- QVERIFY(!m_windeployqtBinary.isEmpty());
- m_testApp = QFINDTESTDATA("testapp");
- QVERIFY(!m_testApp.isEmpty());
- const QFileInfo testAppBinary(m_testApp + QLatin1String("/testapp.exe"));
- QVERIFY2(testAppBinary.isFile(), qPrintable(testAppBinary.absoluteFilePath()));
- m_testAppBinary = testAppBinary.absoluteFilePath();
-}
-
-void tst_windeployqt::help()
-{
- QString errorMessage;
- QByteArray stdOut;
- QByteArray stdErr;
- QVERIFY2(runProcess(m_windeployqtBinary, QStringList("--help"), &errorMessage,
- QString(), QProcessEnvironment(), 5000, &stdOut, &stdErr),
- qPrintable(errorMessage));
- QVERIFY2(!stdOut.isEmpty(), stdErr);
-}
-
-// deploy(): Deploys the test application and launches it with Qt removed from the environment
-// to verify it runs stand-alone.
-
-void tst_windeployqt::deploy()
-{
- QString errorMessage;
- // Deploy application
- QStringList deployArguments;
- deployArguments << QLatin1String("--no-translations") << QDir::toNativeSeparators(m_testAppBinary);
- QVERIFY2(runProcess(m_windeployqtBinary, deployArguments, &errorMessage, QString(), QProcessEnvironment(), 20000),
- qPrintable(errorMessage));
-
- // Create environment with Qt and all "lib" paths removed.
- const QString qtBinDir = QDir::toNativeSeparators(QLibraryInfo::location(QLibraryInfo::BinariesPath));
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
- const QString pathKey = QLatin1String("PATH");
- const QChar pathSeparator(QLatin1Char(';')); // ### fixme: Qt 5.6: QDir::listSeparator()
- const QString origPath = env.value(pathKey);
- QString newPath;
- const QStringList pathElements = origPath.split(pathSeparator, Qt::SkipEmptyParts);
- for (const QString &pathElement : pathElements) {
- if (pathElement.compare(qtBinDir, Qt::CaseInsensitive)
- && !pathElement.contains(QLatin1String("\\lib"), Qt::CaseInsensitive)) {
- if (!newPath.isEmpty())
- newPath.append(pathSeparator);
- newPath.append(pathElement);
- }
- }
- if (newPath == origPath)
- qWarning() << "Unable to remove Qt from PATH";
- env.insert(pathKey, newPath);
-
- // Create qt.conf to enforce usage of local plugins
- QFile qtConf(QFileInfo(m_testAppBinary).absolutePath() + QLatin1String("/qt.conf"));
- QVERIFY2(qtConf.open(QIODevice::WriteOnly | QIODevice::Text),
- qPrintable(qtConf.fileName() + QLatin1String(": ") + qtConf.errorString()));
- QVERIFY(qtConf.write("[Paths]\nPrefix = .\n"));
- qtConf.close();
-
- // Verify that application still runs
- QVERIFY2(runProcess(m_testAppBinary, QStringList(), &errorMessage, QString(), env, 10000),
- qPrintable(errorMessage));
-}
-
-QTEST_MAIN(tst_windeployqt)
-#include "tst_windeployqt.moc"
diff --git a/tests/auto/windeployqt/windeployqt.pro b/tests/auto/windeployqt/windeployqt.pro
deleted file mode 100644
index 0ae9b2bab..000000000
--- a/tests/auto/windeployqt/windeployqt.pro
+++ /dev/null
@@ -1,3 +0,0 @@
-TEMPLATE = subdirs
-SUBDIRS = testapp test
-CONFIG += ordered
diff --git a/tests/manual/CMakeLists.txt b/tests/manual/CMakeLists.txt
index f9eb933df..278ae6fdb 100644
--- a/tests/manual/CMakeLists.txt
+++ b/tests/manual/CMakeLists.txt
@@ -1,3 +1,4 @@
-# Generated from manual.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qtattributionsscanner)
diff --git a/tests/manual/qtattributionsscanner/CMakeLists.txt b/tests/manual/qtattributionsscanner/CMakeLists.txt
index 878f96a6d..8b1378917 100644
--- a/tests/manual/qtattributionsscanner/CMakeLists.txt
+++ b/tests/manual/qtattributionsscanner/CMakeLists.txt
@@ -1,2 +1 @@
-# Generated from qtattributionsscanner.pro.
diff --git a/tests/manual/qtattributionsscanner/data/qt_attribution.json b/tests/manual/qtattributionsscanner/data/qt_attribution_test.json
index adc97d3b6..adc97d3b6 100644
--- a/tests/manual/qtattributionsscanner/data/qt_attribution.json
+++ b/tests/manual/qtattributionsscanner/data/qt_attribution_test.json
diff --git a/tests/manual/qtattributionsscanner/qtattributionsscanner.pro b/tests/manual/qtattributionsscanner/qtattributionsscanner.pro
index c3bcf99e3..74ad8eb7b 100644
--- a/tests/manual/qtattributionsscanner/qtattributionsscanner.pro
+++ b/tests/manual/qtattributionsscanner/qtattributionsscanner.pro
@@ -5,7 +5,7 @@ DISTFILES += test.qdocconf overview.qdoc data/qt_attribution.json data/LICENSE
run_qtattributionsscanner.commands = $$[QT_HOST_BINS]/qtattributionsscanner \
--filter QDocModule=somemodule -o generated.qdoc $$PWD
-run_docs.commands = BUILDDIR=$$OUT_PWD $$[QT_HOST_BINS]/qdoc $$PWD/test.qdocconf
+run_docs.commands = QT_ATTRIBUTIONSSCANNER_TEST=1 BUILDDIR=$$OUT_PWD $$[QT_HOST_BINS]/qdoc $$PWD/test.qdocconf
check.depends = run_qtattributionsscanner run_docs
diff --git a/tests/tests.pro b/tests/tests.pro
deleted file mode 100644
index 85e4f3a53..000000000
--- a/tests/tests.pro
+++ /dev/null
@@ -1,2 +0,0 @@
-TEMPLATE = subdirs
-SUBDIRS += auto
diff --git a/util/recolordocsicons/README.md b/util/recolordocsicons/README.md
new file mode 100644
index 000000000..44e69cc67
--- /dev/null
+++ b/util/recolordocsicons/README.md
@@ -0,0 +1,32 @@
+How to recolor icons for doc.qt.io
+==================================
+
+You can view Qt Documentation online at https://doc.qt.io in dark and light
+modes. To make the icons you use in the docs visible in both modes, save icon
+files as gray-scale images with a transparent background.
+
+If you receive a large number of icons that are not visible in either light
+or dark mode or have a solid background, run the ``recolordocsicons.py``
+Python script.
+
+The script runs ImageMagick to recolor the images and optipng to optimize the
+icon files.
+
+## Preparation
+
+To run the script, you will need to install the following tools and add them
+to the PATH:
+
+- Python 3.x (the script has been tested to work with 3.10)
+- ImageMagick
+- optipng
+
+## Running the script
+
+Use the `-docspath` option to specify the path to the folder where you stored
+the icons.
+
+For example, if you saved the new icons in `C:\iconconversions`, switch to
+the `qttools\util\recolordocsicons` folder and enter:
+
+`recolordocsicons.py -docspath C:\iconconversions`
diff --git a/util/recolordocsicons/recolordocsicons.py b/util/recolordocsicons/recolordocsicons.py
new file mode 100644
index 000000000..70dee2699
--- /dev/null
+++ b/util/recolordocsicons/recolordocsicons.py
@@ -0,0 +1,76 @@
+#!/usr/bin/env python
+
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import argparse
+import os
+import pathlib
+import subprocess
+import sys
+
+from distutils import spawn
+
+def recolorizePng(pngPath, color, magick):
+ print("Recolorizing: {}".format(pngPath))
+ try:
+ subprocess.check_call([magick,
+ pngPath,
+ "-depth", "24",
+ "-colorspace", "rgb",
+ "(", "+clone", "-background", "white", "-flatten", ")",
+ "(", "+clone", "-negate", "-alpha", "copy", ")",
+ "(", "+clone", "-fuzz", "100%", "-fill", color, "-opaque", color, ")",
+ "(", "-clone", "-1,-2", "-compose", "dst_in", "-composite", ")",
+ "-delete", "0--2",
+ pngPath])
+ except subprocess.CalledProcessError:
+ sys.exit("Failed to recolorize {}.".format(pngPath))
+
+
+def optimizePng(pngPath, optipng):
+ print("Optimizing: {}".format(pngPath))
+ try:
+ subprocess.check_call([optipng,
+ "-o7",
+ "-strip", "all",
+ pngPath],
+ stderr=subprocess.DEVNULL)
+ except subprocess.CalledProcessError:
+ sys.exit("Failed to optimize {}.".format(pngPath))
+
+
+def processDocsPath(docsPath, color, magick, optipng):
+ pngPaths = docsPath.glob('**/*.png')
+ for pngPath in pngPaths:
+ recolorizePng(pngPath, color, magick)
+ optimizePng(pngPath, optipng)
+
+
+def main():
+ parser = argparse.ArgumentParser(description='Recolor icon .png files in the '
+ 'Documentation. '
+ 'Requires ImageMagick and Optipng in Path.')
+ parser.add_argument('-docspath',
+ help='The path to process (recursively).',
+ type=pathlib.Path)
+ parser.add_argument('-color',
+ help='The icon foreground color.',
+ default="#808080")
+ args = parser.parse_args()
+
+ magick = spawn.find_executable("magick")
+ if magick is None:
+ sys.exit("ImageMagick was not found in Path.")
+
+ optipng = spawn.find_executable("optipng")
+ if optipng is None:
+ sys.exit("Optipng was not found in Path.")
+
+ processDocsPath(args.docspath, args.color, magick, optipng)
+
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(main())